# Maintainer: Levente Polyak # Contributor: Jan Alexander Steffens (heftig) # Contributor: Ionut Biru # Contributor: Alexander Baldeck # Contributor: Dale Blount # Contributor: Anders Bostrom # ALARM: Kevin Mihelich # - mozconfig changes for ARM # - disable rust lto for v7 highmem=1 pkgbase=thunderbird pkgname=(thunderbird) pkgver=128.2.2 pkgrel=1 pkgdesc='Standalone mail and news reader from mozilla.org' url='https://www.thunderbird.net/' arch=(x86_64) license=('MPL-2.0' 'GPL-2.0-only' 'LGPL-2.1-only') depends=( glibc gtk3 libgdk-3.so libgtk-3.so mime-types dbus libdbus-1.so dbus-glib alsa-lib nss hunspell sqlite ttf-font libvpx libvpx.so zlib bzip2 libbz2.so botan2 libwebp libwebp.so libwebpdemux.so libevent libjpeg-turbo libffi libffi.so nspr gcc-libs libx11 libxrender libxfixes libxext libxcomposite libxdamage pango libpango-1.0.so cairo gdk-pixbuf2 freetype2 libfreetype.so fontconfig libfontconfig.so glib2 libglib-2.0.so pixman libpixman-1.so gnupg json-c libcanberra ffmpeg icu libicui18n.so libicuuc.so ) makedepends=( unzip zip diffutils python nasm mesa libpulse libice libsm rust clang llvm cbindgen nodejs-lts-iron lld gawk perl findutils libotr ) options=(!emptydirs !makeflags !lto) source=(https://archive.mozilla.org/pub/thunderbird/releases/${pkgver}esr/source/thunderbird-${pkgver}esr.source.tar.xz{,.asc} vendor-prefs.js distribution.ini mozconfig.cfg metainfo.patch org.mozilla.Thunderbird.desktop thunderbird-system-icu-74.patch # https://bugzilla.mozilla.org/show_bug.cgi?id=1862601 ) validpgpkeys=( 14F26682D0916CDD81E37B6D61B7B526D98F0353 # Mozilla Software Releases 4360FE2109C49763186F8E21EBE41E90F6F12F6D # Mozilla Software Releases ) # Google API keys (see http://www.chromium.org/developers/how-tos/api-keys) # Note: These are for Arch Linux use ONLY. For your own distribution, please # get your own set of keys. Feel free to contact foutrelis@archlinux.org for # more information. _google_api_key=AIzaSyDwr302FpOSkGRpLlUpPThNTDPbXcIn_FM # Mozilla API keys (see https://location.services.mozilla.com/api) # Note: These are for Arch Linux use ONLY. For your own distribution, please # get your own set of keys. Feel free to contact heftig@archlinux.org for # more information. _mozilla_api_key=16674381-f021-49de-8622-3021c5942aff prepare() { cd $pkgname-$pkgver echo "${noextract[@]}" local src for src in "${source[@]}"; do src="${src%%::*}" src="${src##*/}" [[ $src = *.patch ]] || continue echo "Applying patch $src..." patch -Np1 < "../$src" done sed -e 's|73114a5c28472e77082ad259113ffafb418ed602c1741f26da3e10278b0bf93e|a88d6cc10ec1322b53a8f4c782b5133135ace0fdfcf03d1624b768788e17be0f|' \ -i third_party/rust/mp4parse/.cargo-checksum.json sed -e 's|880c982df0843cbdff38b9f9c3829a2d863a224e4de2260c41c3ac69e9148ad4|239b3e4d20498f69ed5f94481ed932340bd58cb485b26c35b09517f249d20d11|' \ -i third_party/rust/bindgen/.cargo-checksum.json # Make icon transparent sed -i '/^google-api-key printf "%s" "$_mozilla_api_key" >mozilla-api-key cp ../mozconfig.cfg .mozconfig sed "s|@PWD@|${PWD@Q}|g" -i .mozconfig if [[ $CARCH == "armv7h" ]]; then echo "ac_add_options --disable-elf-hack" >> .mozconfig MAKEFLAGS="-j4" # disable hard-coded LTO sed -i '/cargo_rustc_flags += -Clto/d' config/makefiles/rust.mk sed -i '/RUSTFLAGS += -Cembed-bitcode=yes/d' config/makefiles/rust.mk # increase codegen-units due to RAM constraints sed -i 's/codegen-units=1/codegen-units=16/' config/makefiles/rust.mk fi echo 'ac_add_options --enable-optimize="-g0 -O2"' >> .mozconfig echo "mk_add_options MOZ_MAKE_FLAGS=\"${MAKEFLAGS}\"" >> .mozconfig export MOZ_DEBUG_FLAGS=" " export CFLAGS+=" -g0" export CXXFLAGS+=" -g0" #export LDFLAGS+=" -Wl,--no-keep-memory -Wl,--reduce-memory-overheads" export LDFLAGS+=" -Wl,--no-keep-memory" export RUSTFLAGS="-Cdebuginfo=0" CFLAGS=${CFLAGS/-fstack-clash-protection} CXXFLAGS=${CXXFLAGS/-fstack-clash-protection} } build() { cd $pkgname-$pkgver if [[ -n "${SOURCE_DATE_EPOCH}" ]]; then export MOZ_BUILD_DATE=$(date --date "@${SOURCE_DATE_EPOCH}" "+%Y%m%d%H%M%S") fi export MACH_BUILD_PYTHON_NATIVE_PACKAGE_SOURCE=none export MOZBUILD_STATE_PATH="${srcdir}/mozbuild" # malloc_usable_size is used in various parts of the codebase CFLAGS="${CFLAGS/_FORTIFY_SOURCE=3/_FORTIFY_SOURCE=2}" CFLAGS="${CFLAGS/-fexceptions/}" CXXFLAGS="${CXXFLAGS/_FORTIFY_SOURCE=3/_FORTIFY_SOURCE=2}" CXXFLAGS="${CXXFLAGS/-fexceptions/}" ./mach configure ./mach build ./mach buildsymbols } package_thunderbird() { optdepends=( 'hunspell-en_us: Spell checking, American English' 'libotr: OTR support for active one-to-one chats' 'libnotify: Notification integration' ) cd $pkgname-$pkgver DESTDIR="$pkgdir" ./mach install install -Dm 644 ../vendor-prefs.js -t "$pkgdir/usr/lib/$pkgname/defaults/pref" install -Dm 644 ../distribution.ini -t "$pkgdir/usr/lib/$pkgname/distribution" install -Dm 644 ../org.mozilla.Thunderbird.desktop -t "$pkgdir/usr/share/applications" install -Dm 644 comm/mail/branding/thunderbird/net.thunderbird.Thunderbird.appdata.xml \ "$pkgdir/usr/share/metainfo/net.thunderbird.Thunderbird.appdata.xml" for i in 16 22 24 32 48 64 128 256; do install -Dm644 comm/mail/branding/thunderbird/default${i}.png \ "$pkgdir/usr/share/icons/hicolor/${i}x${i}/apps/org.mozilla.Thunderbird.png" done install -Dm644 comm/mail/branding/thunderbird/TB-symbolic.svg \ "$pkgdir/usr/share/icons/hicolor/symbolic/apps/thunderbird-symbolic.svg" # Use system-provided dictionaries ln -Ts /usr/share/hunspell "$pkgdir/usr/lib/$pkgname/dictionaries" ln -Ts /usr/share/hyphen "$pkgdir/usr/lib/$pkgname/hyphenation" # Install a wrapper to avoid confusion about binary path install -Dm755 /dev/stdin "$pkgdir/usr/bin/$pkgname" <=$pkgver") install -Dm644 thunderbird-i18n-$pkgver-$1.xpi \ "$pkgdir/usr/lib/thunderbird/extensions/langpack-$1@thunderbird.mozilla.org.xpi" } _languages=( 'af "Afrikaans"' 'ar "Arabic"' 'ast "Asturian"' 'be "Belarusian"' 'bg "Bulgarian"' 'br "Breton"' 'ca "Catalan"' 'cak "Kaqchikel"' 'cs "Czech"' 'cy "Welsh"' 'da "Danish"' 'de "German"' 'dsb "Lower Sorbian"' 'el "Greek"' 'en-GB "English (British)"' 'en-US "English (US)"' 'es-AR "Spanish (Argentina)"' 'es-ES "Spanish (Spain)"' 'et "Estonian"' 'eu "Basque"' 'fi "Finnish"' 'fr "French"' 'fy-NL "Frisian"' 'ga-IE "Irish"' 'gd "Gaelic (Scotland)"' 'gl "Galician"' 'he "Hebrew"' 'hr "Croatian"' 'hsb "Upper Sorbian"' 'hu "Hungarian"' 'hy-AM "Armenian"' 'id "Indonesian"' 'is "Icelandic"' 'it "Italian"' 'ja "Japanese"' 'ka "Georgian"' 'kab "Kabyle"' 'kk "Kazakh"' 'ko "Korean"' 'lt "Lithuanian"' 'ms "Malay"' 'nb-NO "Norwegian (Bokmål)"' 'nl "Dutch"' 'nn-NO "Norwegian (Nynorsk)"' 'pa-IN "Punjabi (India)"' 'pl "Polish"' 'pt-BR "Portuguese (Brazilian)"' 'pt-PT "Portuguese (Portugal)"' 'rm "Romansh"' 'ro "Romanian"' 'ru "Russian"' 'sk "Slovak"' 'sl "Slovenian"' 'sq "Albanian"' 'sr "Serbian"' 'sv-SE "Swedish"' 'th "Thai"' 'tr "Turkish"' 'uk "Ukrainian"' 'uz "Uzbek"' 'vi "Vietnamese"' 'zh-CN "Chinese (Simplified)"' 'zh-TW "Chinese (Traditional)"' ) _url=https://archive.mozilla.org/pub/thunderbird/releases/${pkgver}esr/linux-x86_64/xpi for _lang in "${_languages[@]}"; do _locale=${_lang%% *} _pkgname=thunderbird-i18n-${_locale,,} pkgname+=($_pkgname) source+=("thunderbird-i18n-$pkgver-$_locale.xpi::$_url/$_locale.xpi") eval "package_$_pkgname() { _package_i18n $_lang }" done # Don't extract languages noextract=() for _src in "${source[@]%%::*}"; do case "$_src" in *.xpi) noextract+=("$_src") ;; esac done sha512sums=('6300f3f6d3a907e849a6acf06101d7441680a4eab965955887ac829886d4f2152e49a0ca97255e3cd9de579fea9ff5c03f75c70a361116a66c735face885ab89' 'SKIP' '6918c0de63deeddc6f53b9ba331390556c12e0d649cf54587dfaabb98b32d6a597b63cf02809c7c58b15501720455a724d527375a8fb9d757ccca57460320734' '5cd3ac4c94ef6dcce72fba02bc18b771a2f67906ff795e0e3d71ce7db6d8a41165bd5443908470915bdbdb98dddd9cf3f837c4ba3a36413f55ec570e6efdbb9f' 'a34dd97954f415a5ffe956ca1f10718bd164950566ceba328805c2ccbb54ed9081df07f2e063479bf932c4a443bb5b7443cca2f82eea3914465ed6e4863e0c0e' '7e43b1f25827ddae615ad43fc1e11c6ba439d6c2049477dfe60e00188a70c0a76160c59a97cc01d1fd99c476f261c7cecb57628b5be48874be7cf991c22db290' 'fffeb73e2055408c5598439b0214b3cb3bb4e53dac3090b880a55f64afcbc56ba5d32d1187829a08ef06d592513d158ced1fde2f20e2f01e967b5fbd3b2fafd4' '9897cb0ababc8e1a0001c4e1f70e0b39f5cdb9c08c69e3afd42088dfd001aa1fc6996cd83df0db1fb57ee0a80686c35c8df783108408dbe9191602cddd1e3c65' 'b7fa16adc69576b42119dcf65c4e45e31e00e98987e260df7e728be4e9fad5db7e3ee7704a3893ee85ecabad9cfcd05d81f6e7dc6278764fc0ad80ac97c530b6' '0faaca4ec5ba7867bbe4d3f57ec9cbbe66b1bdf7ebbe4dc5519a49aaba776eb0d1c4374c9b8136b416d61471805ca9dae7a2e5a12b6d3b7eedaf5d953fab2c95' 'a4b6a92b2bd2b2926e06ba8c43ec7803b5b3ff82ad240c6a90de65a25671f6dff686beb32f0f21f253564dd5403f2e225d1339989b43aa4d80bf3a9c6a3fbd90' '3263422945063667f62824134f9b1aa0f4aae3780caba3306c0df60220f6aa2b0f1e666b58fed90e0c83a8b3d4e3ade2e0b4b9e719f0768ec07a2602380e683c' '5fef536a4b59667343c0b480776d88b0d389eea2f75a78996d40659a3960b84e3aec498357da7e8df0b9b1457e4926d314d30fc97f7d838fce4f2fa65c872cbd' '05a442876965d6f70654f27499bb89e4314369c2dbae34a3e3769c4b43ff25e6816993fcebf5ca65d0f81c27c6cbd8afc0d7c4ae59297d84fa677065582480a9' '97e30e2ff485f83ba1612fb205d0542ee8c14307630985823f6dee5bab91a67fdc3d92da806d93efd57dd78487e8c6063ca0e2034f8126d22b1242c05ac560bf' '70abfe9ddba026194866f7ee3580e749b0a6fcdc3d9a574b80c3007acbc37eecded23efc69f0db31e17166825509faec8cbf24479e3be8304aebfb3aa3f58abc' 'df01acbe01daa0100a300b57ed933ec31dd671c9b7ea7cb19fc76f07aeb010b7362b640312f511860d2285d057cb3da08091bf7a8f7574f72ef3310a9511a99b' '9a822522fcc3a18193f3a5046f7a52dd3d467dc2855a9238f33473272aba4c6fbe59e5873c98a1d50b82ec10dd58285e5bcdeaf58b1040889b3b9e5d3094207c' '8b470f007dfa79d11f3fa55cf6f36fbd4ccd0ad7dd436a53d9761d20a04e7e199555f04f765e6e9221e3079ecd96792b3cb1c51e826596aff147b6b728313be7' 'f1cbd3ec218d41eca12e8fcde90319ba3acc3d7ccdd0fd8d0d535daefef5e344428684b544cafe24d23d31cdd8e2397d44d03a65dbddb2d679decccda12e21bb' '8c8aa85a43ab884069061eb09b9227a7604da7826ead0313d754aa6842f02f237f466e502c979d000fb69addc0a6bc8812a8d650bf90e002aff863dfb924cf59' '7f0132917a7472a2351a7d6c508455a9783a1c947eaef910147e64ab98a812876b6bf7e1039e7c5f57a46153aadc2a31a67c004857e0ebcae288eb9726c5995b' '2c39705e01179244373facd5de6c0122187d4e7d4476e8571bcadd2725d9a78431c19c53b091abfec0ab3e4b2b22aae868c95a3886e2bf4598cb00235a37613c' 'd613407d788bf48d93c32106eeef8c0f85025633378f8c4a91d30e61a05a483c0ca5b61b67732396d0a5225600fb9005a37f8067745c4eec5aab020972ca4ef4' 'dea206ebc27ac17f68cd11c488843109cb512e6bf4f40eabb076c9568517d3ab3d43e9a0335ff9497c00b2906c9f28840f05c85c9f3adce060b34ca132a37d7f' 'b75040158484dffeaae54b0bbe4f3943531e46ebe9e4bea2df8d57a824bfd163fdf4136ad8104847893e8dbd9ebfa86d6dc2a2dd5391d10652833030c9dd9253' '8dec1a219b4ea2b4e186d8120129176defbc317830198e2211f1aa8cc89ef16987294e9444aa250748798eb748ce8e5cbaed209cdfbae4615b69b683b3d20b26' 'c52309755ba065f666c4f66c0fba2782c593a6a7d2c85c6ef072948914cbc820e7aa726418e4ba6e56310e7704c5dca127c04eabf4f02598edb70fc171520431' '20c0d9f1d85e0ebfac38f1bd3d45e86fd9784d02fbea3b003f57acc85f0e1e5500ee4db7a065ef442679f5710bc5bc7e2dd55bc5b53d6e82fbd1a5e1ae9f328f' '1d47991f193b992b133b391e1ef973ff6dc186c0e363d0ef1c83e288f56214384482c3562c4a45dcc375a23c43c75e9aca6702acab2201b93331d0b438213783' '7ad1aa764b030b00b114fc6f0a16265de1fee327303fed96ab4adead7b7c14941c2f8ea4703d1ae8a1956969db3b54215dc44f579c053d9ae7f86f189e91e671' '22d06a3ed77ec8346ce994d765bb7997015c66c63644cf7840b4efea64c60907a5c32a1d506d97be8350412ea1b9a7cedb6e9610140799a4fe963a3e85b91936' '4e10a62b3275ecc5ba2eeb3f81b880da33e90363ccb84e6a19e0bcd4d950a6efb1714b9048d7a7abb73ed09306af7c9108dca28ac3267ffbf53f5c2cc516fa3f' 'e275162e37cd1d3f43c3e33af5bfefe42ca875c58f26a5478ccfc9be73575f5643b25107cb6569192cdcef460fbfa428811c1a2cdf43ca03ae7379f26ae8909b' 'e6b22bde8ce7470b88fb0ff3ba57ab3dfeecd616411cbccefd27106281c2e60a8337b69ebde2d286ebd1e84cba32fbd0b2c2dc4094ea9263294ed5f2571da26e' '4bdf8cf2cace5f41c53b19c4b8aa2aca0532369fb1d777acbeb9fceb3b5a8e18934091d4ed3b358bf4d61345976e2c72124adc57fed8b73485a2cbca31ecb9aa' '60e38453a6bcebab8ff3b58df8a771e92fb750260b0e9db21b0dd162b75b38694204d35fa50000a1bad57b9a52f583514c322b28385a205e903fe37dd6d22159' 'ae6775bc5fa417ada71054c4f09b50037bf5fada2e155dff71446256b3cedfe28cc66cf0280e78d399b9d988aeab296abec02e34946695cd789885cc231482bf' '43a5299d8f6e28cd58bf633aabb62adebb7cc8f613a7a902cf03dcd7878d9cf6cca14bae5274facdac7850247105359fe1ce6a60eda4954166975483aa70f1e5' '0df571d988ae5d36013d93f86cb5dc2942c8b04885288932fafd269216eb45a638261719532d9ab5640052c2f3af9ffb72235de99ae93697d4fc932867a69332' '934375a444a0c97a9559d6e625bac69477e04129ed8b1ee084ce2be100e0422411a1b6cd439318c31e708720f3cc8d7e4fb57afb95489b91577bc4d2c3a92bd0' 'e912e81e16c6d594de1db3fa1e31f6a809d9b5cd630076d5c6346f956d4f4f7b40d8a12943c993a5181823aa0704a9c121c5b13a13cd74ab9322608ae6a3da70' 'b2082cbcdc4b7d888a7b2949d20e284048c56582aa365d47d505db2ab2951bb94ebdc48769ea7614d4cc856a1d326e0c28cb2d799e8fbfa9d107037197590c45' '325ce0d81111f7adb5aea2ab2941629d21c041d3440398757d8d761cd7285a2c38e5e6d992859821d2869479b4146047f48e0c7ab9aa3cdd9f17e38e9d307002' '177d4df8a2f0a09f7c48aba46fe7e07705467482ba82cf8b9031ace3375c24d70376fc3d067a6702999db3e093c78e08942f6d9e1f2226e5d32387fc3b744c75' '94e132fa08c1dece0e3c2b47be24b063bb0f4155d4318534143ae4606fc409e5cd82034de6a93423726ca96a89969d94833551423ee02d041d644cb3507becbe' '470fc5bfdc0d139d19a236cd1abaa72d9da2a3e87ed8c7bd2f23282217241d5611537033cd28e5938b8d19d64ba0d3d75b200d4073db747d60482c838fa9b63d' 'fca2e33a1fbe684efbd96b6f74b2d811c329fabc7ebff26fa9152b36bf316851e8390537d05255dee0e1c5e47ad2336036b76526573791d7ece6c127e2feb538' '3e1807a9f3b0396ac79981f4104bba73d0b1357c8e8dedd67b06703144f419059c5c104a2d0030b16fce15aa55923e2f0efedcad5f080375a7713f362301a184' 'a6732fceea73299362855bd4fca683f0944b3955f9668aa369932ec8e8bb39cf1f8e8a011ee103c5f642e0e22310ee3a7b422d773b705bec04fe1f81fe71131b' 'fb978ad3fc6e70b117fac9aacb0377d7e488d8a8891ccebaae6fe845edb1c87bf05a6286a764343707bf44bbbb29b6b62cfaebc18d90308838eee3c5cfeeef91' 'd0d5f91c1d3563cf61f86bb0f58c9dd91ffa9809db112fa2114ed8b938c64cab76c14be04b94b794bd07e07b91755bb6e8cbd8efc089dab52bcb1d0720b1acce' 'a536b95560e84affb3d67173773a0b0a69053dcebe2abc9dc4c05469f7895fe31977a4bd3e3c22870d191882546e1168518c7444c1baf2153e7556b6f88815ca' '8d008eb7b0723c6d8fea007a926e2b5b929d65fcac5c4009ec4cb7e7927af79eb5f5e62c14b4e0d9ce3b310a67155857c0c36649842b0ff259bfb9ea7dae43d4' '5b9ccc6efffe4d096fe8a011ccf0ed0d75801ba6fbde7448d61d86c67445a81fde037332f962b7a8718f07f15c540ae11584911f007a335f37dd6c370a16b8bf' '5d212f4ad1829206c99c269e440142274288470e997b362ffb8a2f22081858d44be8432ea2bedca5f6ca31c02bbd31e0559e8e562bfe83ac4b69eeaa23a4019d' '44f8ab9bcf893ef4f6fbfa9c549b7c0dd84e87bb6c8c35fc8257a04b449c19e55c38a3d0e3321e938aaf29dd61d0636384390c8ec20b276755b0a83b70875bfa' 'affab7161952ef70aa8f6147e048b9209ab9996de1416e8c645726ceda9ec694a46a95e91fb4da3de7bef95ef9d7f9a2fb5c0e0cc1c20cf440b1b09e4eae8582' '5fa1e5810cd442a8a95b29c4e1f6e0a5c447d4ac43ca8b3de3cd21aa3ff215e281a7c73ab85309b261274578b99f52b95e60abbda876f434adf91be3860ab2bf' '028d4c99b393bcd245d02cd0e97c98dcc20bdd153a08afd623de06579d9ff71108997840a757c84c6abab322ed20cc5c87a5dc273823ddc6610d74f268b08241' 'c505cc60ea3fe60ef1a0a252e99ef3aec14eed535b181c2f2ba21e607a7c41ec7dd37f9afeae7d7ca2e7ed0486908ee019b7397c3eb1d1ab0ba69a2132950ef1' '956daefdf678b71adb87fe64e8004382a47e2fcfbebc9552bb0c3d83871347fe77e13bc9dc1a4220c124357bb6121392b58168f12f178c88c0c40009218e6ba5' '6813b47cb79ceed6f376238480488f3ef2c388775bcf2cebe77dba4b9af4cfa6205219a3850635eddc9f3a363df65f63435b42e6a3afebe33b1816bdb5b21c15' '9f93d3180d2b64ab5dc6682a74a9a2d38acc0274733940e51a257a87903e0375093b25e3189673786473f1553047cdfededdf3728266cbb2dfaf52a2dfe6e76e' '490ece4ddb5ed2155084ee3d2fe54a2d216f5622eb55088b399e92da55ff598836e787a1dffc638122f3c80de0c35214121bd84884d25c51a3b83b3288f77893' '232e52755661a339650a76b701610cc136c7a7e5b11788afdf470e18ebd13a3befa7464ab073579bf7a7b7b340a82ceb9328df93e8995b2356c87a55b8110a1e' '02072a6eeb9f03a71cae1f7ef4de4272aa677657b1cc8ed1c28badc713510c9d53c6029e3647817769fdd79caed735373263d0150c4c5ae6997479cd0291c64e' '415f903c63ffc47a9d6463ac41a2b842164497377fe9ac225875b8f3babb3c798b988ee40b5cd609cc2559eee96c2b19d91e51d8df36381cbdd2a1ecf892ccbb' '4cb791209a31f87a481085fe8925b470f51ae4ba357a415bbfb01f974bad4080c61edeaf3805c5544636376ccd85470e26e24c7477a1a6436944b4a2072fd28b' '345bba000b277941423af0f3f47763208a565a408c99a6a8ff5619d3d5a91a8c5c18d867d667f6ecdc2f56dad4007ccd2f75cff113bb7eb294f3ee2d9b8d1def' '0b650d6c00a0dc05119e20b4d072124c98e70f70a7b98f05644e344fe952b8992d9aa5ea0f320e0f13c3c80e07e8a23f3160e4443510c139ebeedf2eb7778d1f') # vim:set sw=2 et: