summaryrefslogtreecommitdiffstats
path: root/build
diff options
context:
space:
mode:
authorKristian Monsen <kristianm@google.com>2011-06-09 11:47:42 +0100
committerKristian Monsen <kristianm@google.com>2011-06-29 14:33:03 +0100
commitdc0f95d653279beabeb9817299e2902918ba123e (patch)
tree32eb121cd532053a5b9cb0c390331349af8d6baa /build
parentba160cd4054d13d0cb0b1b46e61c3bed67095811 (diff)
downloadexternal_chromium-dc0f95d653279beabeb9817299e2902918ba123e.zip
external_chromium-dc0f95d653279beabeb9817299e2902918ba123e.tar.gz
external_chromium-dc0f95d653279beabeb9817299e2902918ba123e.tar.bz2
Merge Chromium at r11.0.696.0: Initial merge by git
Change-Id: I273dde2843af0839dfc08b419bb443fbd449532d
Diffstat (limited to 'build')
-rw-r--r--build/all.gyp3
-rwxr-xr-xbuild/build-bisect.py11
-rw-r--r--build/common.gypi22
-rw-r--r--build/features_override.gypi3
-rwxr-xr-xbuild/gyp_chromium14
-rwxr-xr-xbuild/install-build-deps.sh72
-rw-r--r--build/sanitize-mac-build-log.sed12
-rw-r--r--build/temp_gyp/googleurl.gyp6
-rwxr-xr-xbuild/util/lastchange.py190
-rw-r--r--build/whitespace_file.txt4
10 files changed, 276 insertions, 61 deletions
diff --git a/build/all.gyp b/build/all.gyp
index 52d1238..3ea4654 100644
--- a/build/all.gyp
+++ b/build/all.gyp
@@ -334,6 +334,7 @@
'../chrome/chrome.gyp:sync_unit_tests',
'../chrome/chrome.gyp:unit_tests',
'../chrome/chrome.gyp:ui_tests',
+ '../ui/gfx/gfx.gyp:gfx_unittests',
'../jingle/jingle.gyp:notifier_unit_tests',
'../third_party/cacheinvalidation/cacheinvalidation.gyp:cacheinvalidation_unittests',
],
@@ -425,6 +426,7 @@
'type': 'none',
'dependencies': [
'../chrome/app/locales/locales.gyp:*',
+ '../chrome/chrome.gyp:chromedriver',
'../chrome/chrome.gyp:crash_service',
'../chrome/chrome.gyp:page_cycler_tests',
'../chrome/chrome.gyp:policy_templates',
@@ -436,6 +438,7 @@
'../chrome_frame/chrome_frame.gyp:chrome_frame_unittests',
'../chrome_frame/chrome_frame.gyp:npchrome_frame',
'../courgette/courgette.gyp:courgette',
+ '../courgette/courgette.gyp:courgette64',
'../third_party/adobe/flash/flash_player.gyp:flash_player',
'../webkit/webkit.gyp:test_shell',
],
diff --git a/build/build-bisect.py b/build/build-bisect.py
deleted file mode 100755
index 33fcb89..0000000
--- a/build/build-bisect.py
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/usr/bin/python
-# Copyright (c) 2010 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import sys
-
-print "This script has been moved to tools/bisect-builds.py."
-print "Please update any docs you're working from!"
-
-sys.exit(1)
diff --git a/build/common.gypi b/build/common.gypi
index 5b110d5..39ee2a9 100644
--- a/build/common.gypi
+++ b/build/common.gypi
@@ -23,10 +23,14 @@
# Disable touch support by default.
'touchui%': 0,
+
+ # Disable file manager component extension by default.
+ 'file_manager_extension%': 0,
},
# Copy conditionally-set variables out one scope.
'chromeos%': '<(chromeos)',
'touchui%': '<(touchui)',
+ 'file_manager_extension%': '<(file_manager_extension)',
# To do a shared build on linux we need to be able to choose between
# type static_library and shared_library. We default to doing a static
@@ -61,6 +65,7 @@
# Copy conditionally-set variables out one scope.
'chromeos%': '<(chromeos)',
'touchui%': '<(touchui)',
+ 'file_manager_extension%': '<(file_manager_extension)',
'host_arch%': '<(host_arch)',
'library%': '<(library)',
'toolkit_views%': '<(toolkit_views)',
@@ -107,7 +112,7 @@
'disable_sse2%': 0,
# Use libjpeg-turbo as the JPEG codec used by Chromium.
- 'use_libjpeg_turbo%': 0,
+ 'use_libjpeg_turbo%': 1,
# Variable 'component' is for cases where we would like to build some
# components as dynamic shared libraries but still need variable
@@ -176,6 +181,7 @@
'enable_flapper_hacks%': '<(enable_flapper_hacks)',
'chromeos%': '<(chromeos)',
'touchui%': '<(touchui)',
+ 'file_manager_extension%': '<(file_manager_extension)',
'inside_chromium_build%': '<(inside_chromium_build)',
'fastbuild%': '<(fastbuild)',
'python_ver%': '<(python_ver)',
@@ -485,6 +491,9 @@
['touchui==1', {
'grit_defines': ['-D', 'touchui'],
}],
+ ['file_manager_extension==1', {
+ 'grit_defines': ['-D', 'file_manager_extension'],
+ }],
['remoting==1', {
'grit_defines': ['-D', 'remoting'],
}],
@@ -564,6 +573,9 @@
['touchui==1', {
'defines': ['TOUCH_UI=1'],
}],
+ ['file_manager_extension==1', {
+ 'defines': ['FILE_MANAGER_EXTENSION=1'],
+ }],
['profiling==1', {
'defines': ['ENABLE_PROFILING=1'],
}],
@@ -1213,8 +1225,6 @@
# http://code.google.com/p/googletest/source/detail?r=446 .
# TODO(thakis): Use -isystem instead (http://crbug.com/58751 )
'-Wno-unnamed-type-template-args',
- # TODO(thakis): Turn on -- http://crbug.com/72205
- '-Wno-overloaded-virtual',
],
'cflags!': [
# Clang doesn't seem to know know this flag.
@@ -1349,8 +1359,10 @@
# http://code.google.com/p/googletest/source/detail?r=446 .
# TODO(thakis): Use -isystem instead (http://crbug.com/58751 ).
'-Wno-unnamed-type-template-args',
- # TODO(thakis): Turn on -- http://crbug.com/72205
- '-Wno-overloaded-virtual',
+ ],
+ 'OTHER_CFLAGS': [
+ # TODO(thakis): Causes many warnings - http://crbug.com/75001
+ '-fobjc-exceptions',
],
}],
['clang==1 and clang_use_chrome_plugins==1', {
diff --git a/build/features_override.gypi b/build/features_override.gypi
index de287c3..3030d43 100644
--- a/build/features_override.gypi
+++ b/build/features_override.gypi
@@ -28,6 +28,7 @@
'ENABLE_JAVASCRIPT_I18N_API=1',
'ENABLE_FILE_SYSTEM=1',
'ENABLE_FILTERS=1',
+ 'ENABLE_FULLSCREEN_API=1',
'ENABLE_GEOLOCATION=1',
'ENABLE_ICONDATABASE=0',
'ENABLE_INDEXED_DATABASE=1',
@@ -36,6 +37,7 @@
'ENABLE_JSC_MULTIPLE_THREADS=0',
'ENABLE_LINK_PREFETCH=1',
'ENABLE_METER_TAG=1',
+ 'ENABLE_MEDIA_STATISTICS=1',
'ENABLE_NOTIFICATIONS=1',
'ENABLE_OFFLINE_WEB_APPLICATIONS=1',
'ENABLE_OPENTYPE_SANITIZER=1',
@@ -62,6 +64,7 @@
'ENABLE_XHR_RESPONSE_BLOB=1',
'ENABLE_XPATH=1',
'ENABLE_XSLT=1',
+ 'WTF_USE_BUILTIN_UTF8_CODEC=1',
'WTF_USE_WEBP=1',
'WTF_USE_WEBKIT_IMAGE_DECODERS=1',
],
diff --git a/build/gyp_chromium b/build/gyp_chromium
index 2171770..7709d07 100755
--- a/build/gyp_chromium
+++ b/build/gyp_chromium
@@ -10,6 +10,7 @@
import glob
import os
import shlex
+import subprocess
import sys
script_dir = os.path.dirname(__file__)
@@ -78,6 +79,19 @@ def additional_include_files(args=[]):
if __name__ == '__main__':
args = sys.argv[1:]
+ # Fall back on hermetic python if we happen to get run under cygwin.
+ # TODO(bradnelson): take this out once this issue is fixed:
+ # http://code.google.com/p/gyp/issues/detail?id=177
+ if sys.platform == 'cygwin':
+ python_dir = os.path.join(chrome_src, 'third_party', 'python_26')
+ env = os.environ.copy()
+ env['PATH'] = python_dir + os.pathsep + env.get('PATH', '')
+ p = subprocess.Popen(
+ [os.path.join(python_dir, 'python.exe')] + sys.argv,
+ env=env, shell=False)
+ p.communicate()
+ sys.exit(p.returncode)
+
if 'SKIP_CHROMIUM_GYP_ENV' not in os.environ:
# Update the environment based on chromium.gyp_env
gyp_env_path = os.path.join(os.path.dirname(chrome_src), 'chromium.gyp_env')
diff --git a/build/install-build-deps.sh b/build/install-build-deps.sh
index 22b1b67..4663763 100755
--- a/build/install-build-deps.sh
+++ b/build/install-build-deps.sh
@@ -46,9 +46,9 @@ install_gold() {
return
fi
- BINUTILS=binutils-2.20.1
+ BINUTILS=binutils-2.21
BINUTILS_URL=http://ftp.gnu.org/gnu/binutils/$BINUTILS.tar.bz2
- BINUTILS_SHA1=fd2ba806e6f3a55cee453cb25c86991b26a75dee
+ BINUTILS_SHA1=ef93235588eb443e4c4a77f229a8d131bccaecc6
test -f $BINUTILS.tar.bz2 || wget $BINUTILS_URL
if test "`sha1sum $BINUTILS.tar.bz2|cut -d' ' -f1`" != "$BINUTILS_SHA1"
@@ -59,7 +59,57 @@ install_gold() {
tar -xjvf $BINUTILS.tar.bz2
cd $BINUTILS
- ./configure --prefix=/usr/local/gold --enable-gold
+ patch -p1 <<EOF
+diff -u -r1.103 -r1.103.2.1
+--- src/gold/object.h 2010/09/08 23:54:51 1.103
++++ src/gold/object.h 2011/02/10 01:15:28 1.103.2.1
+@@ -1,6 +1,6 @@
+ // object.h -- support for an object file for linking in gold -*- C++ -*-
+
+-// Copyright 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
++// Copyright 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
+ // Written by Ian Lance Taylor <iant@google.com>.
+
+ // This file is part of gold.
+@@ -2165,15 +2165,6 @@
+ Output_symtab_xindex*,
+ Output_symtab_xindex*);
+
+- // Clear the local symbol information.
+- void
+- clear_local_symbols()
+- {
+- this->local_values_.clear();
+- this->local_got_offsets_.clear();
+- this->local_plt_offsets_.clear();
+- }
+-
+ // Record a mapping from discarded section SHNDX to the corresponding
+ // kept section.
+ void
+diff -u -r1.60 -r1.60.2.1
+--- src/gold/reloc.cc 2010/10/14 22:10:22 1.60
++++ src/gold/reloc.cc 2011/02/10 01:15:28 1.60.2.1
+@@ -1,6 +1,6 @@
+ // reloc.cc -- relocate input files for gold.
+
+-// Copyright 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
++// Copyright 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
+ // Written by Ian Lance Taylor <iant@google.com>.
+
+ // This file is part of gold.
+@@ -685,9 +685,6 @@
+ // Write out the local symbols.
+ this->write_local_symbols(of, layout->sympool(), layout->dynpool(),
+ layout->symtab_xindex(), layout->dynsym_xindex());
+-
+- // We should no longer need the local symbol values.
+- this->clear_local_symbols();
+ }
+
+ // Sort a Read_multiple vector by file offset.
+EOF
+ ./configure --prefix=/usr/local/gold --enable-gold --enable-threads
make maybe-all-binutils maybe-all-gold -j4
if sudo make maybe-install-binutils maybe-install-gold
then
@@ -117,10 +167,10 @@ chromeos_lib_list="libpulse0 libbz2-1.0 libcurl4-gnutls-dev"
# Full list of required run-time libraries
lib_list="libatk1.0-0 libc6 libasound2 libcairo2 libdbus-glib-1-2 libexpat1
libfontconfig1 libfreetype6 libglib2.0-0 libgnome-keyring0 libgtk2.0-0
- libnspr4-0d libnss3-1d libpango1.0-0 libpcre3 libpixman-1-0 libpng12-0
- libstdc++6 libsqlite3-0 libx11-6 libxau6 libxcb1 libxcomposite1
- libxcursor1 libxdamage1 libxdmcp6 libxext6 libxfixes3 libxi6
- libxinerama1 libxrandr2 libxrender1 libxtst6 zlib1g
+ libnspr4-0d libnss3-1d libpam0g libpango1.0-0 libpcre3 libpixman-1-0
+ libpng12-0 libstdc++6 libsqlite3-0 libx11-6 libxau6 libxcb1
+ libxcomposite1 libxcursor1 libxdamage1 libxdmcp6 libxext6 libxfixes3
+ libxi6 libxinerama1 libxrandr2 libxrender1 libxtst6 zlib1g
$chromeos_lib_list"
# Debugging symbols for all of the run-time libraries
@@ -240,12 +290,12 @@ fi
# Some operating systems already ship gold (on recent Debian and
# Ubuntu you can do "apt-get install binutils-gold" to get it), but
# older releases didn't. Additionally, gold 2.20 (included in Ubuntu
-# Lucid) makes binaries that just segfault.
+# Lucid) makes binaries that just segfault, and 2.20.1 does not support
+# --map-whole-files.
# So install from source if we don't have a good version.
case `ld --version` in
-*gold*2.20.1*) ;;
-*gold*2.2[1-9]*) ;;
+*gold*2.2[1-9].*) ;;
* )
if test "$do_inst_gold" = ""
then
@@ -259,7 +309,7 @@ case `ld --version` in
if test "$do_inst_gold" = "1"
then
# If the system provides a good version of gold, just install it.
- if apt-cache show binutils-gold | grep -Eq 'Version: 2.2(0.1|[1-9]*)'; then
+ if apt-cache show binutils-gold | grep -Eq 'Version: 2.2[1-9].*'; then
echo "Installing binutils-gold. Backing up ld as ld.single."
sudo apt-get install binutils-gold
else
diff --git a/build/sanitize-mac-build-log.sed b/build/sanitize-mac-build-log.sed
index d6cef78..2de72bf 100644
--- a/build/sanitize-mac-build-log.sed
+++ b/build/sanitize-mac-build-log.sed
@@ -1,6 +1,6 @@
#!/bin/echo Use sanitize-mac-build-log.sh or sed -f
-# Copyright (c) 2010 The Chromium Authors. All rights reserved.
+# Copyright (c) 2011 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
@@ -12,10 +12,20 @@
/^ setenv /d
/^ cd /d
/^make: Nothing to be done/d
+/^$/d
# Xcode prints a short "compiling foobar.o" line followed by the lengthy
# full command line. These deletions drop the command line.
\|^ /Developer/usr/bin/|d
+\|^ /Developer/Library/PrivateFrameworks/DevToolsCore.framework/|d
+\|^ /Developer/Library/Xcode/Plug-ins/CoreBuildTasks.xcplugin/|d
+
+# And, if you've overridden something from your own bin directory, remove those
+# full command lines, too.
+\|^ /Users/[^/]*/bin/|d
+
+# There's already a nice note for bindings, don't need the command line.
+\|^python scripts/rule_binding.py|d
# Shorten the "compiling foobar.o" line.
s|^Distributed-CompileC \(.*\) normal i386 c++ com.apple.compilers.gcc.4_2| CC \1|
diff --git a/build/temp_gyp/googleurl.gyp b/build/temp_gyp/googleurl.gyp
index 9a2eda3..8bf7cce 100644
--- a/build/temp_gyp/googleurl.gyp
+++ b/build/temp_gyp/googleurl.gyp
@@ -70,6 +70,8 @@
'target_name': 'googleurl_unittests',
'dependencies': [
'googleurl',
+ '../../base/base.gyp:base_i18n',
+ '../../base/base.gyp:test_support_base',
'../../testing/gtest.gyp:gtest',
'../../third_party/icu/icu.gyp:icuuc',
],
@@ -79,7 +81,9 @@
'../../googleurl/src/url_parse_unittest.cc',
'../../googleurl/src/url_test_utils.h',
'../../googleurl/src/url_util_unittest.cc',
- '../../googleurl/src/gurl_test_main.cc',
+ # Make sure base and ICU are started up the 'Chromium way' since the
+ # build is using the Chromium base & ICU.
+ '../../base/test/run_all_unittests.cc',
],
'conditions': [
['OS=="linux" or OS=="freebsd"', {
diff --git a/build/util/lastchange.py b/build/util/lastchange.py
index c7200f1..4d7a1fe 100755
--- a/build/util/lastchange.py
+++ b/build/util/lastchange.py
@@ -1,5 +1,5 @@
#!/usr/bin/env python
-# Copyright (c) 2010 The Chromium Authors. All rights reserved.
+# Copyright (c) 2011 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
@@ -7,6 +7,7 @@
lastchange.py -- Chromium revision fetching utility.
"""
+import re
import optparse
import os
import subprocess
@@ -18,38 +19,10 @@ class VersionInfo(object):
self.root = root
self.revision = revision
-def FetchGitRevision(directory):
- """
- Fetch the Git hash for the a given directory.
-
- Errors are swallowed.
-
- Returns:
- a VersionInfo object or None on error.
- """
- # Force shell usage under cygwin & win32. This is a workaround for
- # mysterious loss of cwd while invoking cygwin's git.
- # We can't just pass shell=True to Popen, as under win32 this will
- # cause CMD to be used, while we explicitly want a cygwin shell.
- command = ['git', 'rev-parse', 'HEAD']
- if sys.platform in ('cygwin', 'win32'):
- command = ['sh', '-c', ' '.join(command)]
- try:
- proc = subprocess.Popen(command,
- stdout=subprocess.PIPE,
- stderr=subprocess.PIPE,
- cwd=directory)
- except OSError:
- return None
- output = proc.communicate()[0].strip()
- if proc.returncode == 0 and output:
- return VersionInfo('git', 'git', output[:7])
- return None
-
def FetchSVNRevision(directory):
"""
- Fetch the Subversion branch and revision for the a given directory.
+ Fetch the Subversion branch and revision for a given directory.
Errors are swallowed.
@@ -86,12 +59,167 @@ def FetchSVNRevision(directory):
return VersionInfo(url, root, revision)
+def RunGitCommand(directory, command):
+ """
+ Launches git subcommand.
+
+ Errors are swallowed.
+
+ Returns:
+ process object or None.
+ """
+ command = ['git'] + command
+ # Force shell usage under cygwin & win32. This is a workaround for
+ # mysterious loss of cwd while invoking cygwin's git.
+ # We can't just pass shell=True to Popen, as under win32 this will
+ # cause CMD to be used, while we explicitly want a cygwin shell.
+ if sys.platform in ('cygwin', 'win32'):
+ command = ['sh', '-c', ' '.join(command)]
+ try:
+ proc = subprocess.Popen(command,
+ stdout=subprocess.PIPE,
+ stderr=subprocess.PIPE,
+ cwd=directory)
+ return proc
+ except OSError:
+ return None
+
+
+def FetchGitRevision(directory):
+ """
+ Fetch the Git hash for a given directory.
+
+ Errors are swallowed.
+
+ Returns:
+ a VersionInfo object or None on error.
+ """
+ proc = RunGitCommand(directory, ['rev-parse', 'HEAD'])
+ if proc:
+ output = proc.communicate()[0].strip()
+ if proc.returncode == 0 and output:
+ return VersionInfo('git', 'git', output[:7])
+ return None
+
+
+def IsGitSVN(directory):
+ """
+ Checks whether git-svn has been set up.
+
+ Errors are swallowed.
+
+ Returns:
+ whether git-svn has been set up.
+ """
+ # To test whether git-svn has been set up, query the config for any
+ # svn-related configuration. This command exits with an error code
+ # if there aren't any matches, so ignore its output.
+ proc = RunGitCommand(directory, ['config', '--get-regexp', '^svn'])
+ if proc:
+ return (proc.wait() == 0)
+ return False
+
+
+def FetchGitSVNURL(directory):
+ """
+ Fetch URL of SVN repository bound to git.
+
+ Errors are swallowed.
+
+ Returns:
+ SVN URL.
+ """
+ if IsGitSVN(directory):
+ proc = RunGitCommand(directory, ['svn', 'info', '--url'])
+ if proc:
+ output = proc.communicate()[0].strip()
+ if proc.returncode == 0:
+ match = re.search(r'^\w+://.*$', output, re.M)
+ if match:
+ return match.group(0)
+ return ''
+
+
+def FetchGitSVNRoot(directory):
+ """
+ Fetch root of SVN repository bound to git.
+
+ Errors are swallowed.
+
+ Returns:
+ SVN root repository.
+ """
+ if IsGitSVN(directory):
+ git_command = ['config', '--get-regexp', '^svn-remote.svn.url$']
+ proc = RunGitCommand(directory, git_command)
+ if proc:
+ output = proc.communicate()[0].strip()
+ if proc.returncode == 0:
+ # Zero return code implies presence of requested configuration variable.
+ # Its value is second (last) field of output.
+ match = re.search(r'\S+$', output)
+ if match:
+ return match.group(0)
+ return ''
+
+
+def LookupGitSVNRevision(directory, depth):
+ """
+ Fetch the Git-SVN identifier for the local tree.
+ Parses first |depth| commit messages.
+
+ Errors are swallowed.
+ """
+ if not IsGitSVN(directory):
+ return None
+ git_re = re.compile(r'^\s*git-svn-id:\s+(\S+)@(\d+)')
+ proc = RunGitCommand(directory, ['log', '-' + str(depth)])
+ if proc:
+ for line in proc.stdout:
+ match = git_re.match(line)
+ if match:
+ id = match.group(2)
+ if id:
+ proc.stdout.close() # Cut pipe for fast exit.
+ return id
+ return None
+
+
+def IsGitSVNDirty(directory):
+ """
+ Checks whether our git-svn tree contains clean trunk or some branch.
+
+ Errors are swallowed.
+ """
+ # For git branches the last commit message is either
+ # some local commit or a merge.
+ return LookupGitSVNRevision(directory, 1) is None
+
+
+def FetchGitSVNRevision(directory):
+ """
+ Fetch the Git-SVN identifier for the local tree.
+
+ Errors are swallowed.
+ """
+ # We assume that at least first 999 commit messages contain svn evidence.
+ revision = LookupGitSVNRevision(directory, 999)
+ if not revision:
+ return None
+ if IsGitSVNDirty(directory):
+ revision = revision + '-dirty'
+ url = FetchGitSVNURL(directory)
+ root = FetchGitSVNRoot(directory)
+ return VersionInfo(url, root, revision)
+
+
def FetchVersionInfo(default_lastchange, directory=None):
"""
Returns the last change (in the form of a branch, revision tuple),
from some appropriate revision control system.
"""
- version_info = FetchSVNRevision(directory) or FetchGitRevision(directory)
+ version_info = (FetchSVNRevision(directory) or
+ FetchGitSVNRevision(directory) or FetchGitRevision(directory))
if not version_info:
if default_lastchange and os.path.exists(default_lastchange):
revision = open(default_lastchange, 'r').read().strip()
diff --git a/build/whitespace_file.txt b/build/whitespace_file.txt
index ccedfae..f45cad4 100644
--- a/build/whitespace_file.txt
+++ b/build/whitespace_file.txt
@@ -1,4 +1,4 @@
-Copyright (c) 2010 The Chromium Authors. All rights reserved.
+Copyright (c) 2011 The Chromium Authors. All rights reserved.
Use of this useless file is governed by a BSD-style license that can be
found in the LICENSE file.
@@ -7,3 +7,5 @@ any modification below this line.
================================================================================
i am somewhat YELLY!
+
+All your base belong to us.