tag:blogger.com,1999:blog-3546409112375215432024-03-21T21:19:17.689+05:30Android BandhanaUnknownnoreply@blogger.comBlogger15125tag:blogger.com,1999:blog-354640911237521543.post-30140410135082314782015-06-25T14:55:00.000+05:302015-06-25T16:25:54.822+05:30Hybrid Application Frameworks for faster app development<div dir="ltr" style="text-align: left;" trbidi="on">
It's been longggg time since i have posted anything on this (To be precise, it is 2+ years)<br />
I have been moved from writing device drivers to the Hybrid application development - for Android and IOS devices.<br />
<br />
First hybrid application platform which i have worked on is <a href="http://phonegap.com/" target="_blank">Phonegap</a>.<br />
<br />
Now, I am working with <a href="http://xamarin.com/platform" target="_blank">Xamarin </a>(An Awesome platform for .NET geeks) and will post my learning/Adventures with Xamarin very soon. <br />
<br />
<a href="http://developer.xamarin.com/guides/android/" target="_blank">Xamarin Guide link</a></div>
Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-354640911237521543.post-74885505046091027572013-05-02T11:03:00.000+05:302013-05-02T11:03:25.265+05:30How to resolve the USB-Ethernet device un-registration on Android.<div dir="ltr" style="text-align: left;" trbidi="on">
<br />
<br />
On Our OMAP4 board, we were enabling the USB-Ethernet functionality. We were using the SMSC Ethernet drivers. The 'eth0' interface was getting registered succesfully , but immediately the interface was getting removed off.<br />
<br />
<b> Root Cause :</b> It seems like , android intentionally removing the Ultra Fast Medias from the system.<br />
In one of the init.rc file, this below piece of code was creating the havoc.<br />
<br />
# Remove the Ultra Fast Media Card Reader on EHCI bus<br />
#<span class="Apple-tab-span" style="white-space: pre;"> </span>write /sys/bus/usb/devices/1-1.1/remove 1<br />
</div>
Unknownnoreply@blogger.com1Bangalore, Karnataka, India12.9715987 77.59456269999998312.9715987 77.594562699999983 12.9715987 77.594562699999983tag:blogger.com,1999:blog-354640911237521543.post-32938794975495894332013-05-02T10:53:00.000+05:302013-05-02T10:53:07.955+05:30TLV320AIC3104 Audio Playback on 3.0.31 kernel.<div dir="ltr" style="text-align: left;" trbidi="on">
<br />
We have migrated from 3.0.21 kernel to 3.0.31 kernel version.<br />
<br />
One of the main issue we have observed is in audio playback. On previous version (3.0.21) the audio playback was working fine. But on 3.0.31 it was failing.<br />
<br />
<b> Root Cause : </b>We are using the TLV320AIC3104 audio codec chip on our OMAP4 board.<br />
Observation was 'Always the DIN pin was down' But the MCLK, BCLK and WCLK clocks were fine.<br />
<br />
In devices.c file (arch/arm/mach-omap2) omap_init_mcpdm() function, the CLOCKS were getting reset .<br />
<br />
I Am not sure why this clock resetting was required in 3.0.31. I has posted an query to TI E2E forum on why the clock resetting was required.<br />
<a href="http://e2e.ti.com/support/omap/f/849/p/258490/917666.aspx#917666">http://e2e.ti.com/support/omap/f/849/p/258490/917666.aspx#917666</a><br />
</div>
Unknownnoreply@blogger.com0Bangalore, Karnataka, India12.9715987 77.59456269999998312.9715987 77.594562699999983 12.9715987 77.594562699999983tag:blogger.com,1999:blog-354640911237521543.post-35772733964059539382013-05-02T10:36:00.000+05:302013-05-02T10:36:30.661+05:30How to resolve the OTG Malfunctioning when adb service is started.<div dir="ltr" style="text-align: left;" trbidi="on">
<br />
On Our OMAP4 board, we have enabled the OTG (On The Go) functionality .<br />
<br />
It has been enabled in both Master mode and Slave mode.<br />
<br />
<b>Master Mode</b> : Connect USB mouse to the OTG port on the board. The Board will recognize the USB mouse. In this case, the board is acting as a master and the usb mouse as a slave one.<br />
<br />
<b>Slave Mode</b> : Connect the OMAP4 board on to the PC. PC recognizes the board. PC acts as a host device and the board acts as a slave one.<br />
<br />
While Enabling the OTG functionality, we bumped into a problem where in which the OTG functionality was getting failed .<br />
<br />
<b>Root Cause :</b> In init.rc file, we use to start the ADB service which was causing the reset of OTG functionality.<br />
<br />
Comment out the below lines from init.rc file , which has helped in resolving this issue.<br />
<br />
#set the adb properties which will help in installing the applications.<br />
# setprop service.adb.tcp.port 5555<br />
# stop adbd<br />
# start adbd<br />
<br />
<b>OTG Links</b><br />
1) <a href="http://en.wikipedia.org/wiki/USB_On-The-Go">http://en.wikipedia.org/wiki/USB_On-The-Go</a><br />
<br />
</div>
Unknownnoreply@blogger.com0Bangalore, Karnataka, India12.9715987 77.59456269999998312.4790917 76.951862699999978 13.4641057 78.237262699999988tag:blogger.com,1999:blog-354640911237521543.post-22443556378820772302013-01-28T15:40:00.001+05:302013-01-28T15:40:50.879+05:30Android User application as System Application or as a prebuilt application<div dir="ltr" style="text-align: left;" trbidi="on">
In many scenario's with the customized android ROM's, we want some of the android applications to be a part of the android image. i.e we want the apk's as a prebuilt apk.<br />
<br />
Follow these instructions, to prepare an apk as a prebuilt apk.<br />
<h3>
<a href="http://www.blogger.com/blogger.g?blogID=354640911237521543" name="prebuiltAPK"></a>Adding a prebuilt APK (Android.mk)</h3>
<pre> LOCAL_PATH := $(call my-dir)</pre>
<pre> include $(CLEAR_VARS)
# Module name should match apk name to be installed.
LOCAL_MODULE := LocalModuleName
LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
include $(BUILD_PREBUILT)
</pre>
</div>
Unknownnoreply@blogger.com1tag:blogger.com,1999:blog-354640911237521543.post-40030359207201162272013-01-28T15:32:00.001+05:302013-01-28T15:32:10.087+05:30Enable LCD Brightness control feature for Generic DPI Panels<div dir="ltr" style="text-align: left;" trbidi="on">
<br />
By default, the 'LCD brightness control' feature has not been added in the Generic DPI panel drivers.<br />
<br />
Follow these steps , which will enable the brightness control for the Generic DPI panel drivers.<br />
<br />
Kernel version : 3.0.21<br />
Processor : OMAP4460<br />
Android O.S : Ice Cream Sandwich (4.0.3)<br />
<br />
List of files which requires modifications are.<br />
1) LCD Driver File - panel-generic-dpi.c<br />
2) Board file - board-4430dsp.c<br />
3) Kernel Config File.<br />
<br />
<b>Changes to the LCD Driver File</b><br />
(/drivers/video/omap2/displays/panel-generic-dpi.c)<br />
<br />
1) #include <linux/backlight.h><br />
<br />
2) //brightness start<br />
static int generic_bl_get_intensity(struct backlight_device *dev)<br />
{<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>if (dev->props.fb_blank == FB_BLANK_UNBLANK &&<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>dev->props.power == FB_BLANK_UNBLANK)<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>return dev->props.brightness;<br />
<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>return 0;<br />
}<br />
<br />
static int generic_bl_update_status(struct backlight_device *bl)<br />
{<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>struct omap_dss_device *dssdev = dev_get_drvdata(&bl->dev);<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span><br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>int level;<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span><br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>if (!dssdev->set_backlight)<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>return -EINVAL;<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span><br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>if (bl->props.fb_blank == FB_BLANK_UNBLANK &&<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>bl->props.power == FB_BLANK_UNBLANK)<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>level = bl->props.brightness;<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>else<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>level = 0;<br />
<br />
<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>return dssdev->set_backlight(dssdev, level);<br />
<br />
}<br />
<br />
static const struct backlight_ops generic_bl_ops = {<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>.get_brightness = generic_bl_get_intensity,<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>.update_status = generic_bl_update_status,<br />
};<br />
<br />
<br />
3) struct panel_drv_data {<br />
<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>struct omap_dss_device *dssdev;<br />
<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>struct panel_config *panel_config;<br />
<br />
//brightness start<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>struct backlight_device *bldev;<br />
//brightness end<br />
};<br />
<br />
4) static int generic_dpi_panel_probe(struct omap_dss_device *dssdev)<br />
{<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>struct panel_generic_dpi_data *panel_data = get_panel_data(dssdev);<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>struct panel_config *panel_config = NULL;<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>struct panel_drv_data *drv_data = NULL;<br />
<br />
//brightness start<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>struct backlight_device *bldev = NULL ;<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>struct backlight_properties props ;<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>int iTemp = 0;<br />
<br />
//brightness end<br />
<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>int i;<br />
<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>dev_dbg(&dssdev->dev, "probe\n");<br />
<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>if (!panel_data || !panel_data->name)<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>return -EINVAL;<br />
<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>for (i = 0; i < ARRAY_SIZE(generic_dpi_panels); i++) {<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>if (strcmp(panel_data->name, generic_dpi_panels[i].name) == 0) {<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>panel_config = &generic_dpi_panels[i];<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>break;<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>}<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>}<br />
<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>if (!panel_config)<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>return -EINVAL;<br />
<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>dssdev->panel.config = panel_config->config;<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>dssdev->panel.timings = panel_config->timings;<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>dssdev->panel.acb = panel_config->acb;<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>dssdev->panel.acbi = panel_config->acbi;<br />
<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>drv_data = kzalloc(sizeof(*drv_data), GFP_KERNEL);<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>if (!drv_data)<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>return -ENOMEM;<br />
<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>drv_data->dssdev = dssdev;<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>drv_data->panel_config = panel_config;<br />
<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>dev_set_drvdata(&dssdev->dev, drv_data);<br />
<br />
//brightness start<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>/* if no platform set_backlight() defined, presume DSI backlight<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span> * control */<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>memset(&props, 0, sizeof(struct backlight_properties));<br />
<br />
props.max_brightness = 255;<span class="Apple-tab-span" style="white-space: pre;"> </span>//the brightness values have been in the range from 0 - 255<br />
props.type = BACKLIGHT_RAW;<br />
<br />
//The sysfs entries will be created after the registration<br />
<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>bldev = backlight_device_register(dev_name(&dssdev->dev), &dssdev->dev,<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>dssdev, &generic_bl_ops, &props);<br />
<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>if (IS_ERR(bldev))<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>{<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>int r = PTR_ERR(bldev);<br />
<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>printk("SANDEEP:generic_dpi_panel_probe() backlight device register didn't happenned \n");<span class="Apple-tab-span" style="white-space: pre;"> </span><br />
<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>}<br />
<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>bldev->props.fb_blank = FB_BLANK_UNBLANK;<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>bldev->props.power = FB_BLANK_UNBLANK;<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>bldev->props.brightness = dssdev->max_backlight_level;<br />
<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>iTemp = generic_bl_update_status(bldev);<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span><br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>if (iTemp < 0)<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>{<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>dev_err(&dssdev->dev, "failed to set lcd brightness\n");<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span><br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>printk("SANDEEP:generic_dpi_panel_probe() Failed to set the LCD brightness \n");<span class="Apple-tab-span" style="white-space: pre;"> </span><br />
<span class="Apple-tab-span" style="white-space: pre;"> </span><br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>}<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>drv_data->bldev = bldev ;<span class="Apple-tab-span" style="white-space: pre;"> </span>//Copying the backlight data to the driver data. So, that in the later stages this data can be used.<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span><br />
//brightness end<br />
<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>return 0;<br />
}<br />
<br />
5)<br />
static void __exit generic_dpi_panel_remove(struct omap_dss_device *dssdev)<br />
{<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>struct panel_drv_data *drv_data = dev_get_drvdata(&dssdev->dev);<br />
//brightness start<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>struct backlight_device *bldev;<br />
//brightness end<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>dev_dbg(&dssdev->dev, "remove\n");<br />
<br />
//brightness start<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>if(NULL != drv_data->bldev)<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>{<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>bldev = drv_data->bldev ;<span class="Apple-tab-span" style="white-space: pre;"> </span>//getting the backlight data back again.<br />
<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>bldev->props.power = FB_BLANK_POWERDOWN;<br />
<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>backlight_device_unregister(bldev);<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>}<br />
//brightness end<br />
<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>kfree(drv_data);<br />
<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>dev_set_drvdata(&dssdev->dev, NULL);<br />
}<br />
<br />
<b>Changes to the Board File</b><br />
<br />
//brightness start<br />
<br />
static int generic_set_backlight(struct omap_dss_device *dssdev, int level)<br />
{<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>int r;<br />
<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>r = twl_i2c_write_u8(TWL_MODULE_PWM, 0x7F, LED_PWM2OFF);<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span><br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>if (r)<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>return r;<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span><br />
<span class="Apple-tab-span" style="white-space: pre;"> </span> if (level > 1 && level >=20 && level < 255)<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span> {<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span> if (level == 255)<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span> level = 0x7F;<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span> else<br />
//<span class="Apple-tab-span" style="white-space: pre;"> </span> level = (~(level/2)) & 0x7F;<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>level = level /2 ;<span class="Apple-tab-span" style="white-space: pre;"> </span>//dummy statement. Needs to check the side effect of this.<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span><br />
<span class="Apple-tab-span" style="white-space: pre;"> </span> r = twl_i2c_write_u8(TWL_MODULE_PWM, level, LED_PWM2ON);<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span> if (r)<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span> return r;<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span> r = twl_i2c_write_u8(TWL6030_MODULE_ID1, 0x30, TWL6030_TOGGLE3);<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span> if (r)<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span> return r;<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span> }<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span> else if (level <= 1)<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span> {<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span> r = twl_i2c_write_u8(TWL6030_MODULE_ID1, 0x08, TWL6030_TOGGLE3);<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span> if (r)<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span> return r;<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span> r = twl_i2c_write_u8(TWL6030_MODULE_ID1, 0x28, TWL6030_TOGGLE3);<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span> if (r)<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span> return r;<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span> r = twl_i2c_write_u8(TWL6030_MODULE_ID1, 0x00, TWL6030_TOGGLE3);<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span> if (r)<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span> return r;<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span> }<br />
return 0;<br />
}<br />
<br />
//brightness end<br />
<br />
2) struct omap_dss_device omap4_spanda_dvi_device = {<br />
.type = OMAP_DISPLAY_TYPE_DPI,<br />
.name = "generic",<br />
.driver_name = "generic_dpi_panel",<br />
.data = &omap4_dvi_panel,<br />
.phy.dpi.data_lines = 24,<br />
.reset_gpio = PANDA_DVI_TFP410_POWER_DOWN_GPIO,<br />
.channel = OMAP_DSS_CHANNEL_LCD2,<br />
//brightness start<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>.set_backlight<span class="Apple-tab-span" style="white-space: pre;"> </span>= generic_set_backlight,<br />
//brightness end<br />
};<br />
<br />
<b>Changes to Kernel Config File</b><br />
CONFIG_BACKLIGHT_GENERIC = y<br />
<br />
<br />
<br />
<br />
</div>
Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-354640911237521543.post-1093433829704017382012-08-09T10:26:00.000+05:302012-08-09T10:26:59.444+05:30How to install JAVA On Ubuntu<div dir="ltr" style="text-align: left;" trbidi="on">
<br />
<b>Follow these steps to install JAVA on Ubuntu.</b><br />
<br />
1) Download the java version from this <a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html" target="_blank">link</a><br />
2) $chmod a+x jdk-6u33-linux-x64.bin<br />
3) ./jdk-6u33-linux-x64.bin<br />
This will extract with whole folder contents.<br />
4) place the extracted folder into /usr/bin/<br />
5) edit the bashrc file. add the below line.<br />
$sudo gedit .bashrc<br />
$export PATH=$PATH:/usr/bin/jdk1.6.0_33/bin<br />
<br />
<b>How to check about the Java installation.</b><br />
Open terminal, and execute these commands<br />
1) $java -version<br />
2) $which java<br />
</div>Unknownnoreply@blogger.com0Bangalore, Karnataka, India12.9715987 77.594562712.724026199999999 77.2787057 13.2191712 77.910419699999991tag:blogger.com,1999:blog-354640911237521543.post-66919552068222602732012-05-10T10:30:00.000+05:302012-05-10T10:33:55.411+05:30Multi-Touch (Pinch-zoom) support to Android Applications<div dir="ltr" style="text-align: left;" trbidi="on">
In this post, i am going to explain the mechanism to enable the multi-touch support for Android applications.<br />
<br />
<div style="background-color: white; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #252525; line-height: 18px; margin-bottom: 15px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: -webkit-auto; vertical-align: baseline;">
<strong><span style="font-family: inherit;">Introducing multi-touch</span></strong></div>
<div style="background-color: white; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #252525; line-height: 18px; margin-bottom: 15px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: -webkit-auto; vertical-align: baseline;">
<span style="font-family: inherit;">Multi-touch is simply an extension of the regular touch-screen user interface, using two or more fingers instead of one. We’ve used single-finger gestures before, although we didn’t call it that.</span></div>
<div style="background-color: white; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #252525; line-height: 18px; margin-bottom: 15px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: -webkit-auto; vertical-align: baseline;">
<span style="font-family: inherit;">Three common touch gestures .</span></div>
<div style="background-color: white; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #252525; line-height: 18px; margin-bottom: 15px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: -webkit-auto; vertical-align: baseline;">
<span style="font-family: inherit;">a) Tap</span></div>
<div style="background-color: white; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #252525; line-height: 18px; margin-bottom: 15px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: -webkit-auto; vertical-align: baseline;">
<span style="font-family: inherit;">b) Drag</span></div>
<div style="background-color: white; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #252525; line-height: 18px; margin-bottom: 15px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: -webkit-auto; vertical-align: baseline;">
<span style="font-family: inherit;">c) Pinch-Zoom</span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjdyd6vTWeU0fLD0qNB3eatlVNYTfEo73kTAblhT8Ag2dqmSC90bfrmwS-4OWMermeWNjUuypy0Z_DB463VIahtK8OAAnWOc9z9PD4vs8oHYYpZcNMdVQrCUlhQIAe_4Vq9kHbnQ7Z2aIE/s1600/touch-465.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="311" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjdyd6vTWeU0fLD0qNB3eatlVNYTfEo73kTAblhT8Ag2dqmSC90bfrmwS-4OWMermeWNjUuypy0Z_DB463VIahtK8OAAnWOc9z9PD4vs8oHYYpZcNMdVQrCUlhQIAe_4Vq9kHbnQ7Z2aIE/s320/touch-465.png" width="320" /></a></div>
<div style="background-color: white; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #252525; line-height: 18px; margin-bottom: 15px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: -webkit-auto; vertical-align: baseline;">
<span style="font-family: Verdana, sans-serif;">With pinch zoom, you place two fingers on the screen and squeeze them together to make the item you’re viewing smaller, or pull them apart to make it bigger. Before Android 2.0 you had to use a clunky zoom control with icons that you pressed to zoom in and out . But thanks to its new multi-touch support, you can now pinch to zoom on Android too! As long as the application supports it, of course.</span></div>
<div style="background-color: white; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #252525; line-height: 18px; margin-bottom: 15px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: -webkit-auto; vertical-align: baseline;">
<span style="font-family: Verdana, sans-serif;"><b>Enable the multi-touch for Android Applications</b></span></div>
<div style="background-color: white; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #252525; line-height: 18px; margin-bottom: 15px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: -webkit-auto; vertical-align: baseline;">
<span style="font-family: Verdana, sans-serif;">By default, all the android applications won't be enabled for the multi-touch functionality. </span><span style="font-family: Verdana, sans-serif;">You need to explicitly mention this feature in your AndroidManifest.xml file of the application. </span></div>
<div style="background-color: white; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #252525; line-height: 18px; margin-bottom: 15px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: -webkit-auto; vertical-align: baseline;">
<span style="font-family: Verdana, sans-serif;">The applications like 'Browser', 'Maps' and 'Gallery' will usually require this feature.</span></div>
<div style="background-color: white; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #252525; line-height: 18px; margin-bottom: 15px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: -webkit-auto; vertical-align: baseline;">
<span style="font-family: Verdana, sans-serif;"> a) Include the below lines in your application manifest file</span></div>
<div style="background-color: white; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 15px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: -webkit-auto; vertical-align: baseline;">
<i><span style="color: #252525; font-family: Verdana, sans-serif; line-height: 18px;"> </span><span style="color: #252525; font-family: Verdana, sans-serif;"><span style="line-height: 18px;"><uses-feature android:name="android.hardware.touchscreen.multitouch"</span></span></i></div>
<div style="background-color: white; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 15px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: -webkit-auto; vertical-align: baseline;">
<span style="color: #252525; font-family: Verdana, sans-serif;"><span style="line-height: 18px;"><i> android:required="true" /></i></span></span></div>
<div style="background-color: white; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 15px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: -webkit-auto; vertical-align: baseline;">
<span style="color: #252525; font-family: Verdana, sans-serif;"><span style="line-height: 18px;">b) Copy the respective multitouch.xml file onto /system/etc/permissions folder. This is an important step when we know that from the hardware side the multi touch is already supported. </span></span></div>
<div style="background-color: white; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 15px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: -webkit-auto; vertical-align: baseline;">
<span style="color: #252525; font-family: Verdana, sans-serif;"><span style="line-height: 18px;"> Include the below lines in your device.mk file.</span></span></div>
<div style="background-color: white; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 15px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: -webkit-auto; vertical-align: baseline;">
<span style="color: #252525; font-family: Verdana, sans-serif;"><span style="line-height: 18px;"> <i> PRODUCT_COPY_FILES := \</i></span></span><span style="background-color: transparent;"><i> frameworks/base/data/etc/android.hardware.touchscreen.multitouch.jazzhand.xml:system/etc/permissions/android.hardware.touchscreen.multitouch.jazzhand.xml \</i></span></div>
<div style="background-color: white; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #252525; line-height: 18px; margin-bottom: 15px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: -webkit-auto; vertical-align: baseline;">
<span style="font-family: Verdana, sans-serif;">Refer PackageManager.java for more info . (frameworks/base/core/java/android/content/pm)</span></div>
<div style="background-color: white; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #252525; line-height: 18px; margin-bottom: 15px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: -webkit-auto; vertical-align: baseline;">
<span style="font-family: Verdana, sans-serif;"><b><br /></b></span></div>
<div style="background-color: white; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #252525; line-height: 18px; margin-bottom: 15px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: -webkit-auto; vertical-align: baseline;">
<span style="font-family: Verdana, sans-serif;"><b>References</b></span></div>
<div style="background-color: white; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #252525; line-height: 18px; margin-bottom: 15px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: -webkit-auto; vertical-align: baseline;">
<a href="http://www.zdnet.com/blog/burnette/how-to-use-multi-touch-in-android-2/1747?tag=content;siu-container" style="font-family: inherit; line-height: 1.08em;" target="_blank">How to use Multi-touch in Android 2 ?</a></div>
</div>Unknownnoreply@blogger.com0Bengaluru, Karnataka, India12.9715987 77.594562712.724026199999999 77.2787057 13.2191712 77.910419699999991tag:blogger.com,1999:blog-354640911237521543.post-3937958047241825812012-04-25T12:22:00.001+05:302012-05-10T10:32:55.243+05:30How to resolve the "INSTALL_FAILED_CONTAINER_ERROR" in Android?<div dir="ltr" style="text-align: left;" trbidi="on">
<br />
By Default, All Android applications can be installed in internal memory or external memory (SDCARD).<br />
If you specify android:installLocation="preferExternal" in your AndroidManifest.xml file, then the application will be installed on external storage.<br />
<br />
If you declare "preferExternal", you request that your application be installed on the external storage, but the system does not guarantee that your application will be installed on the external storage. <br />
If the external storage is full, the system will install it on the internal storage. The user can also move your application between the two locations.<br />
<br />
The kernel has to support the installations of the applications on the external memory. <br />
Without the kernel support the application installation will end up in the error message " INSTALL_FAILED_CONTAINER_ERROR "<br />
<br />
<b>Enable these configurations in linux kernel and build the kernel</b><br />
<br />
<i>CONFIG_MD=y<br />CONFIG_BLK_DEV_MD=y<br />CONFIG_MD_MULTIPATH=y<br />CONFIG_BLK_DEV_DM=y<br />CONFIG_DM_DEBUG=y<br />CONFIG_DM_CRYPT=y<br />CONFIG_DM_SNAPSHOT=y<br />CONFIG_DM_MIRROR=y<br />CONFIG_DM_LOG_USERSPACE=y<br />CONFIG_DM_ZERO=y<br />CONFIG_DM_MULTIPATH=y<br />CONFIG_DM_MULTIPATH_QL=y<br />CONFIG_DM_MULTIPATH_ST=y<br />CONFIG_DM_UEVENT=y<br />CONFIG_CRYPTO_GF128MUL=y<br />CONFIG_CRYPTO_XTS=y<br />CONFIG_CRYPTO_SHA512=y<br />CONFIG_CRYPTO_WP512=y<br />CONFIG_CRYPTO_BLOWFISH=y<br />CONFIG_CRYPTO_TWOFISH=y<br />CONFIG_CRYPTO_TWOFISH_COMMON=y<br />CONFIG_CRYPTO_USER_API=y<br />CONFIG_CRYPTO_USER_API_HASH=y<br />CONFIG_CRYPTO_USER_API_SKCIPHER=y<br />CONFIG_CRYPTO_DEV_OMAP_AES=y</i><br />
<br />
After these changes you can install all the applications on your device either as a part of internal or external memory</div>Unknownnoreply@blogger.com2Bengaluru, Karnataka, India12.9715987 77.594562712.724026199999999 77.2787057 13.2191712 77.910419699999991tag:blogger.com,1999:blog-354640911237521543.post-59866213472906398752012-03-19T17:19:00.001+05:302012-03-19T17:19:42.430+05:30How to add Virtual Softkeys / Navigation bar to Gingerbread.<div dir="ltr" style="text-align: left;" trbidi="on">
<br />
Virtual buttons allows for the buttons (Home, Back, etc) to be incorporated in the bottom of the screen. <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGxaL-5E13jB0nrl9Y-za_03MtWEVhoqNsYXJK0B1GJUZHObzwMsuj9C_PywQM5bFV37S3Q1KJ5ucFm09pZYSJ5drKcL2ZJfwodbBF7-sFAfeQ45Jc3BOoIrDytjY9r0f90yy-KfQH3TM/s1600/virtualbuttons.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="170" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGxaL-5E13jB0nrl9Y-za_03MtWEVhoqNsYXJK0B1GJUZHObzwMsuj9C_PywQM5bFV37S3Q1KJ5ucFm09pZYSJ5drKcL2ZJfwodbBF7-sFAfeQ45Jc3BOoIrDytjY9r0f90yy-KfQH3TM/s320/virtualbuttons.jpg" width="320" /></a></div>
<br />
<br />
The Input system in Android provides special features for implementing virtual soft keys.<br />
<br />
There are three cases:<br />
<br />
1. If the virtual soft keys are displayed graphically on the screen, as on the Galaxy Nexus, then they are implemented by the Navigation Bar component in the System UI package.<br />
<br />
2. If the virtual soft keys are implemented as an extended touchable region that is part of the main touch screen, as on the Nexus One, then the input system uses a virtual key map file to translate X / Y touch coordinates into Linux key codes, then uses the key layout file to translate Linux key codes into Android key codes.<br />
<br />
3. If the virtual soft keys are implemented as capacitive buttons that are separate from the main touch screen, as on the Nexus S, then the kernel device driver or firmware is responsible for translating touches into Linux key codes which the input system then translates into Android key codes using the key layout file.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
From ICS onwards, Android supports the (1) case along with (2) and (3) case. The introduction of virtual buttons does not necessarily spell the end to hardware buttons, as such devices with buttons will simply not display the digital buttons.<br />
<br />
<b>This article targets for the devices which are running on Gingerbread (2.3.6) without the hardware buttons. </b><br />
<br />
I Back-ported the "Virtual Soft keys / Navigation Bar from ICS (4.0.3) to Gingerbread (2.3.6) .<br />
<br />
The animation changes of ICS have been discarded in Gingerbread and the Functionality of 'Recent Applications list ' of ICS hasn't been taken into GB. <br />
<br />
Follow these steps to get the Virtual soft keys on Gingerbread (2.3.6).<br />
<br />
<b>Prerequisites : </b><br />
a) AOSP Gingerbread code (2.3.6) -- Get it from <a href="http://source.android.com/source/downloading.html" target="_blank">here</a><br />
b) AOSP ICS source code (4.0.3) -- Get it from <a href="http://source.android.com/source/downloading.html" target="_blank">here </a><br />
<br />
<u><b>Source File Changes:</b></u><br />
<b> </b><br />
All the source file changes are in '/frameworks/base'<b> </b>module.<br />
<br />
<b>Addition of source files</b> : New source files have been added from ICS to GB.<br />
<br />
a) NavigationBarView.java: Copy this file from ICS to GB. <br />
ICS Location : /frameworks/base/packages/systemui/src/com/android<br />
/systemui/statusbar/phone/<br /> GB Location : /frameworks/base/packages/systemui/src/com/android<br />
/systemui/statusbar/<br />
Note : Ignore out all the animator related stuffs in this source file.<br />
Change the package name also.<br />
<br />
b) KeyButtonView.java: Copy this file from ICS to GB. <br />
ICS Location : /frameworks/base/packages/systemui/src/com/android<br />
/systemui/statusbar/policy/<br />
GB Location : /frameworks/base/packages/systemui/src/com/android<br />
/systemui/statusbar/<br />
Note : Ignore out all the animator related stuffs in this source file.<div>
Change the package name also. <br />
<br />
<b>Modification to source files</b> : <br />
<br />
a) core/java/android/view/KeyCharacterMap.java :<br />
b) core/java/android/view/View.java<br />
c) core/java/android/view/ViewGroup.java<br />
d) core/java/android/view/WindowManager.java<br />
e) include/ui/InputDispatcher.h<br />
f) packages/SystemUI/src/com/android/systemui/statusbar/StatusBarService.java<br />
g) policy/src/com/android/internal/policy/impl/PhoneWindowManager.java<br />
<br />
<u><b>Resource File Changes :</b></u><br />
<br />
<b>Addition of Resource Files :</b> New Resource files have been added from ICS to GB<br />
a) Copy these files from /frameworks/base/packages/SystemUI<br />
/res/drawable-hdpi to<br />
/frameworks/base/packages/SystemUI/res/drawable<br />
<br />
<ul style="text-align: left;">
<li>packages/SystemUI/res/drawable/ic_sysbar_back.png</li>
<li>packages/SystemUI/res/drawable/ic_sysbar_back_land.png</li>
<li>packages/SystemUI/res/drawable/ic_sysbar_highlight.png</li>
<li>packages/SystemUI/res/drawable/ic_sysbar_highlight_land.png</li>
<li>packages/SystemUI/res/drawable/ic_sysbar_home.png</li>
<li>packages/SystemUI/res/drawable/ic_sysbar_home_land.png</li>
<li>packages/SystemUI/res/drawable/ic_sysbar_lights_out_dot_large.png</li>
<li>Packages/SystemUI/res/drawable/ic_sysbar_lights_out_dot_small.png</li>
<li>packages/SystemUI/res/drawable/ic_sysbar_menu.png</li>
<li>packages/SystemUI/res/drawable/ic_sysbar_menu_land.png</li>
<li>packages/SystemUI/res/drawable/ic_sysbar_recent.png</li>
<li>packages/SystemUI/res/drawable/ic_sysbar_recent_land.png </li>
</ul>
b) navigation_bar.xml: Copy this file from /frameworks/base/packages/SystemUI<br />
/res/layout/ to<br />
/frameworks/base/packages/SystemUI/res/layout/<br />
<br />
c) attrs.xml : Copy this file from /frameworks/base/packages/SystemUI/res/values/ to /frameworks/base/packages/SystemUI/res/values/<br />
<b></b><br />
<b></b><br />
<b> Modifications to Resource Files :</b><br />
<br />
a) core/res/res/values/dimens.xml<br />
b) packages/SystemUI/res/layout/status_bar.xml<br />
c) packages/SystemUI/res/values/dimens.xml<br />
d) packages/SystemUI/res/values/strings.xml<br />
<br />
Will be updating the complete patches list of the modifications soon !!!<br />
<br />
Happy Navigating !!</div>
</div>Unknownnoreply@blogger.com21tag:blogger.com,1999:blog-354640911237521543.post-40792747071895134772012-02-23T10:11:00.000+05:302012-02-23T10:11:14.924+05:30Wi-Fi and Wi-Fi in Android<div dir="ltr" style="text-align: left;" trbidi="on">
In this post i will be discussing the general concepts of Wi-Fi and Wi-Fi in Android<br />
<br />
The contents have been categorised into these sections.<br />
<br />
<ul style="text-align: left;">
<li>Definition</li>
<li>Modes of operation</li>
<li>Working concepts</li>
<li>WI-FI in Android</li>
<li>Porting WI-FI drivers to Android</li>
<li>FAQ's on WI-FI on Android</li>
<li>References</li>
</ul>
<br />
<span style="font-size: large;"><b>Definition : </b></span><br />
<br />
WI-FI is a mechanism that allows electronic devices to exchange data wirelessly over a computer network. WI-FI stands for <b>Wi</b>reless <b>Fi</b>delity. WI-FI is based on the IEEE 802.11 family of standards and is primarily a Local Area networking (LAN) technology designed to provide in-building broadband coverage.<br />
<br />
<b><span style="font-size: large;">Modes of Operation :</span> </b><br />
<br />
WI-FI can operate in two different modes <br />
a) Station Mode<br />
b) Access Point mode<br />
<br />
<b>Station mode</b> is the default operating mode for a WI-FI adapter. In this mode the adapter operates as a client that connects to a Wi-Fi access point (usually a wi-fi enabled router). This mode is used when you use a wi-fi adapter to connect to a wireless network<br />
<br />
In <b>Access Point mode</b>, the adapter will act as an access point enabling other wi-fi adapters to connect to it. So in other words you can use the adapter to create your own wireless network. This can be handy is you w<span style="font-family: inherit;">ant to share a wired Internet connection with other wireless devices and you don't have dedicated access point for example </span><br />
<br />
<span style="font-size: large;"><b>Working Concepts:</b></span><br />
<br />
There are three most important items which makes wi-fi working in your laptop or desktop. These are<br />
<ul style="text-align: left;">
<li><b> </b>Radi<span style="font-size: small;">o Signals</span></li>
<li><span style="font-size: small;"> Wi-FI Card</span></li>
<li> Hotspots which create Wi-Fi network</li>
</ul>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhH6MZKE0mXT5TcxerDVQO_Zz8QUWy4dKOTqRYV4xZvJUKC7zhVdngF2Vu4QuIc4Ap929g6ZYzoHvph5pzN3h7w-y6XE_fXnO4RigITCTuVxEAyDOcw54R3NHN6mre_UqucFbWgkqp8uE/s1600/1.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="250" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhH6MZKE0mXT5TcxerDVQO_Zz8QUWy4dKOTqRYV4xZvJUKC7zhVdngF2Vu4QuIc4Ap929g6ZYzoHvph5pzN3h7w-y6XE_fXnO4RigITCTuVxEAyDOcw54R3NHN6mre_UqucFbWgkqp8uE/s320/1.gif" width="320" /></a></div>
<br />
<link href="file:///C:%5CDOCUME%7E1%5Cspalaks%5CLocal%20Settings%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_filelist.xml" rel="File-List"></link><link href="file:///C:%5CDOCUME%7E1%5Cspalaks%5CLocal%20Settings%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_themedata.thmx" rel="themeData"></link><link href="file:///C:%5CDOCUME%7E1%5Cspalaks%5CLocal%20Settings%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_colorschememapping.xml" rel="colorSchemeMapping"></link><style>
<!--
/* Font Definitions */
@font-face
{font-family:<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">Helvetica</span>;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">panose</span>-1:2 11 6 4 2 2 2 2 2 4;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-font-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">charset</span>:0;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-generic-font-family:<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">swiss</span>;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-font-pitch:variable;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-font-signature:536881799 -2147483648 8 0 511 0;}
@font-face
{font-family:<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">Helvetica</span>;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">panose</span>-1:2 11 6 4 2 2 2 2 2 4;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-font-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">charset</span>:0;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-generic-font-family:<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">swiss</span>;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-font-pitch:variable;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-font-signature:536881799 -2147483648 8 0 511 0;}
@font-face
{font-family:<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">Cambria</span>;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">panose</span>-1:2 4 5 3 5 4 6 3 2 4;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-font-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">charset</span>:0;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-generic-font-family:roman;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-font-pitch:variable;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-font-signature:-536870145 1073743103 0 0 415 0;}
@font-face
{font-family:<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">Calibri</span>;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">panose</span>-1:2 15 5 2 2 2 4 3 2 4;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-font-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">charset</span>:0;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-generic-font-family:<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">swiss</span>;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-font-pitch:variable;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-font-signature:-520092929 1073786111 9 0 415 0;}
/* Style Definitions */
p.<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">MsoNormal</span>, <span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">li</span>.<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">MsoNormal</span>, div.<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">MsoNormal</span>
{<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-style-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">unhide</span>:no;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-style-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">qformat</span>:yes;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-style-parent:"";
margin-top:0in;
margin-right:0in;
margin-bottom:10.0pt;
margin-left:0in;
line-height:115%;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-pagination:widow-orphan;
font-size:11.0pt;
font-family:"<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">Calibri</span>","sans-serif";
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">ascii</span>-font-family:<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">Calibri</span>;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">ascii</span>-theme-font:minor-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">latin</span>;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">fareast</span>-font-family:<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">Calibri</span>;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">fareast</span>-theme-font:minor-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">latin</span>;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">hansi</span>-font-family:<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">Calibri</span>;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">hansi</span>-theme-font:minor-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">latin</span>;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">bidi</span>-font-family:"Times New Roman";
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">bidi</span>-theme-font:minor-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">bidi</span>;}
h2
{<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-style-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">noshow</span>:yes;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-style-priority:9;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-style-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">qformat</span>:yes;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-style-link:"Heading 2 Char";
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-style-next:Normal;
margin-top:10.0pt;
margin-right:0in;
margin-bottom:0in;
margin-left:0in;
margin-bottom:.0001pt;
line-height:115%;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-pagination:widow-orphan lines-together;
page-break-after:avoid;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-outline-level:2;
font-size:13.0pt;
font-family:"<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">Cambria</span>","serif";
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">ascii</span>-font-family:<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">Cambria</span>;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">ascii</span>-theme-font:major-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">latin</span>;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">fareast</span>-font-family:"Times New Roman";
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">fareast</span>-theme-font:major-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">fareast</span>;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">hansi</span>-font-family:<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">Cambria</span>;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">hansi</span>-theme-font:major-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">latin</span>;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">bidi</span>-font-family:"Times New Roman";
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">bidi</span>-theme-font:major-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">bidi</span>;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">color</span>:#4F81BD;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">themecolor</span>:accent1;}
span.Heading2Char
{<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-style-name:"Heading 2 Char";
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-style-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">noshow</span>:yes;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-style-priority:9;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-style-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">unhide</span>:no;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-style-locked:yes;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-style-link:"Heading 2";
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">ansi</span>-font-size:13.0pt;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">bidi</span>-font-size:13.0pt;
font-family:"<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">Cambria</span>","serif";
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">ascii</span>-font-family:<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">Cambria</span>;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">ascii</span>-theme-font:major-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">latin</span>;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">fareast</span>-font-family:"Times New Roman";
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">fareast</span>-theme-font:major-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">fareast</span>;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">hansi</span>-font-family:<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">Cambria</span>;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">hansi</span>-theme-font:major-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">latin</span>;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">bidi</span>-font-family:"Times New Roman";
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">bidi</span>-theme-font:major-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">bidi</span>;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">color</span>:#4F81BD;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">themecolor</span>:accent1;
font-weight:bold;}
.<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">MsoChpDefault</span>
{<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-style-type:export-only;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-default-props:yes;
font-family:"<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">Calibri</span>","sans-serif";
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">ascii</span>-font-family:<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">Calibri</span>;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">ascii</span>-theme-font:minor-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">latin</span>;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">fareast</span>-font-family:<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">Calibri</span>;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">fareast</span>-theme-font:minor-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">latin</span>;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">hansi</span>-font-family:<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">Calibri</span>;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">hansi</span>-theme-font:minor-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">latin</span>;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">bidi</span>-font-family:"Times New Roman";
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">bidi</span>-theme-font:minor-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">bidi</span>;}
.<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">MsoPapDefault</span>
{<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-style-type:export-only;
margin-bottom:10.0pt;
line-height:115%;}
@page WordSection1
{size:8.5in 11.0in;
margin:1.0in 1.0in 1.0in 1.0in;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-header-margin:.5in;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-footer-margin:.5in;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-paper-source:0;}
div.WordSection1
{page:WordSection1;}
-->
</style>
<br />
<link href="file:///C:%5CDOCUME%7E1%5Cspalaks%5CLocal%20Settings%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_filelist.xml" rel="File-List"></link><link href="file:///C:%5CDOCUME%7E1%5Cspalaks%5CLocal%20Settings%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_themedata.thmx" rel="themeData"></link><link href="file:///C:%5CDOCUME%7E1%5Cspalaks%5CLocal%20Settings%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_colorschememapping.xml" rel="colorSchemeMapping"></link><style>
<!--
/* Font Definitions */
@font-face
{font-family:<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">Helvetica</span>;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">panose</span>-1:2 11 6 4 2 2 2 2 2 4;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-font-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">charset</span>:0;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-generic-font-family:<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">swiss</span>;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-font-pitch:variable;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-font-signature:536881799 -2147483648 8 0 511 0;}
@font-face
{font-family:<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">Helvetica</span>;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">panose</span>-1:2 11 6 4 2 2 2 2 2 4;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-font-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">charset</span>:0;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-generic-font-family:<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">swiss</span>;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-font-pitch:variable;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-font-signature:536881799 -2147483648 8 0 511 0;}
@font-face
{font-family:<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">Cambria</span>;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">panose</span>-1:2 4 5 3 5 4 6 3 2 4;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-font-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">charset</span>:0;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-generic-font-family:roman;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-font-pitch:variable;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-font-signature:-536870145 1073743103 0 0 415 0;}
@font-face
{font-family:<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">Calibri</span>;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">panose</span>-1:2 15 5 2 2 2 4 3 2 4;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-font-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">charset</span>:0;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-generic-font-family:<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">swiss</span>;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-font-pitch:variable;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-font-signature:-520092929 1073786111 9 0 415 0;}
/* Style Definitions */
p.<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">MsoNormal</span>, <span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">li</span>.<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">MsoNormal</span>, div.<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">MsoNormal</span>
{<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-style-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">unhide</span>:no;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-style-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">qformat</span>:yes;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-style-parent:"";
margin-top:0in;
margin-right:0in;
margin-bottom:10.0pt;
margin-left:0in;
line-height:115%;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-pagination:widow-orphan;
font-size:11.0pt;
font-family:"<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">Calibri</span>","sans-serif";
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">ascii</span>-font-family:<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">Calibri</span>;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">ascii</span>-theme-font:minor-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">latin</span>;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">fareast</span>-font-family:<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">Calibri</span>;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">fareast</span>-theme-font:minor-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">latin</span>;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">hansi</span>-font-family:<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">Calibri</span>;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">hansi</span>-theme-font:minor-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">latin</span>;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">bidi</span>-font-family:"Times New Roman";
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">bidi</span>-theme-font:minor-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">bidi</span>;}
h2
{<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-style-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">noshow</span>:yes;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-style-priority:9;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-style-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">qformat</span>:yes;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-style-link:"Heading 2 Char";
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-style-next:Normal;
margin-top:10.0pt;
margin-right:0in;
margin-bottom:0in;
margin-left:0in;
margin-bottom:.0001pt;
line-height:115%;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-pagination:widow-orphan lines-together;
page-break-after:avoid;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-outline-level:2;
font-size:13.0pt;
font-family:"<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">Cambria</span>","serif";
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">ascii</span>-font-family:<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">Cambria</span>;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">ascii</span>-theme-font:major-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">latin</span>;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">fareast</span>-font-family:"Times New Roman";
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">fareast</span>-theme-font:major-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">fareast</span>;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">hansi</span>-font-family:<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">Cambria</span>;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">hansi</span>-theme-font:major-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">latin</span>;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">bidi</span>-font-family:"Times New Roman";
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">bidi</span>-theme-font:major-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">bidi</span>;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">color</span>:#4F81BD;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">themecolor</span>:accent1;
font-weight:bold;}
p
{<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-style-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">noshow</span>:yes;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-style-priority:99;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-margin-top-alt:auto;
margin-right:0in;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-margin-bottom-alt:auto;
margin-left:0in;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-pagination:widow-orphan;
font-size:12.0pt;
font-family:"Times New Roman","serif";
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">fareast</span>-font-family:"Times New Roman";}
span.Heading2Char
{<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-style-name:"Heading 2 Char";
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-style-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">noshow</span>:yes;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-style-priority:9;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-style-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">unhide</span>:no;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-style-locked:yes;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-style-link:"Heading 2";
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">ansi</span>-font-size:13.0pt;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">bidi</span>-font-size:13.0pt;
font-family:"<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">Cambria</span>","serif";
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">ascii</span>-font-family:<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">Cambria</span>;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">ascii</span>-theme-font:major-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">latin</span>;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">fareast</span>-font-family:"Times New Roman";
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">fareast</span>-theme-font:major-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">fareast</span>;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">hansi</span>-font-family:<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">Cambria</span>;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">hansi</span>-theme-font:major-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">latin</span>;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">bidi</span>-font-family:"Times New Roman";
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">bidi</span>-theme-font:major-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">bidi</span>;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">color</span>:#4F81BD;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">themecolor</span>:accent1;
font-weight:bold;}
.<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">MsoChpDefault</span>
{<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-style-type:export-only;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-default-props:yes;
font-family:"<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">Calibri</span>","sans-serif";
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">ascii</span>-font-family:<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">Calibri</span>;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">ascii</span>-theme-font:minor-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">latin</span>;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">fareast</span>-font-family:<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">Calibri</span>;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">fareast</span>-theme-font:minor-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">latin</span>;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">hansi</span>-font-family:<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">Calibri</span>;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">hansi</span>-theme-font:minor-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">latin</span>;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">bidi</span>-font-family:"Times New Roman";
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">bidi</span>-theme-font:minor-<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">bidi</span>;}
.<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">MsoPapDefault</span>
{<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-style-type:export-only;
margin-bottom:10.0pt;
line-height:115%;}
@page WordSection1
{size:8.5in 11.0in;
margin:1.0in 1.0in 1.0in 1.0in;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-header-margin:.5in;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-footer-margin:.5in;
<span style="background: yellow none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="goog-spellcheck-word">mso</span>-paper-source:0;}
div.WordSection1
{page:WordSection1;}
-->
</style>
<br />
<span style="font-family: inherit; font-size: small;"><span style="color: black; line-height: 115%;"></span></span><b>Radio Signals :</b><br />
<br />
Radio signals are the
keys which make WiFi networking possible. These radio signals
transmitted from Wi-Fi antennas are picked up by WiFi receivers such as
computers and cell phones that are equipped with WiFi cards. Whenever a
computer receives any of the signals within the range of a WiFi network
which is usually 300-500 feet for antennas, the WiFi card will read the
signals and thus create an internet connection between the user and the
network without the use of a card. <br />
<br />
<br />
<b>Wi-Fi Cards :</b><br />
<br />
<br />
You can think WiFI card as being an invisible card that connects
your computer to the antenna for a direct connection to the internet.<br />
<br />
<b>Wi-Fi Hotspots:</b><br />
<br />
A Wi-Fi hotspot is created
by installing an access point to an internet connection, The access
point transmits a wireless signal over a short distance. Typically
covering around 300 feet. When a Wi-Fi enabled device, such as a Pocket
PC encounters a hotspot, the device can then connect to that network
wirelessly<br />
<br />
<br />
<span style="font-size: large;"><b>Wi-Fi in Android</b></span><br />
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0w3jeQ6O6lkVQ_j-lcyavhjuoiPSkTOrodjqlkHMn6OjjN6vN74EGwXmOZ2nfo2bGUvjhk67te1cb1MX5MjHnm7I-wvlrUdwKfGZXsHgz_TorIfNd1Q_iI6VnypFqlzKlYmcwne28bJ4/s1600/1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0w3jeQ6O6lkVQ_j-lcyavhjuoiPSkTOrodjqlkHMn6OjjN6vN74EGwXmOZ2nfo2bGUvjhk67te1cb1MX5MjHnm7I-wvlrUdwKfGZXsHgz_TorIfNd1Q_iI6VnypFqlzKlYmcwne28bJ4/s400/1.png" width="400" /></a><br />
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
Android uses modified wpa_supplicant daemon for wifi support. On gingerbread versions wpa_supplicant_6 version has used and on ICS versions wpa_supplicant_8 version has been used.<br />
The daemon is controlled through a socket by hardware/libhardware_legacy/wifi/wifi.c (WiFiHW) that gets controlled from Android UI through android.net.wifi pcakage from frameworks/base/wifi/java/android/net/wifi and it's corresponding JNI implementation in frameworks/base/core/jni/android_net_wifi_wifi.cpp. Higher level network management is done in frameworks/base/core/java/android/net.<br />
<br />
<br />
Original source <a href="http://blog.linuxconsulting.ro/2010/04/porting-wifi-drivers-to-android.html" target="_blank">Link</a><br />
<link href="file:///C:%5CDOCUME%7E1%5Cspalaks%5CLocal%20Settings%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_filelist.xml" rel="File-List"></link><link href="file:///C:%5CDOCUME%7E1%5Cspalaks%5CLocal%20Settings%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_themedata.thmx" rel="themeData"></link><link href="file:///C:%5CDOCUME%7E1%5Cspalaks%5CLocal%20Settings%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_colorschememapping.xml" rel="colorSchemeMapping"></link><style>
<!--
/* Font Definitions */
@font-face
{font-family:Calibri;
panose-1:2 15 5 2 2 2 4 3 2 4;
mso-font-charset:0;
mso-generic-font-family:swiss;
mso-font-pitch:variable;
mso-font-signature:-520092929 1073786111 9 0 415 0;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{mso-style-unhide:no;
mso-style-qformat:yes;
mso-style-parent:"";
margin-top:0in;
margin-right:0in;
margin-bottom:10.0pt;
margin-left:0in;
line-height:115%;
mso-pagination:widow-orphan;
font-size:11.0pt;
font-family:"Calibri","sans-serif";
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-fareast-font-family:Calibri;
mso-fareast-theme-font:minor-latin;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;
mso-bidi-font-family:"Times New Roman";
mso-bidi-theme-font:minor-bidi;}
a:link, span.MsoHyperlink
{mso-style-priority:99;
color:blue;
text-decoration:underline;
text-underline:single;}
a:visited, span.MsoHyperlinkFollowed
{mso-style-noshow:yes;
mso-style-priority:99;
color:purple;
mso-themecolor:followedhyperlink;
text-decoration:underline;
text-underline:single;}
span.code
{mso-style-name:code;
mso-style-unhide:no;}
.MsoChpDefault
{mso-style-type:export-only;
mso-default-props:yes;
font-family:"Calibri","sans-serif";
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-fareast-font-family:Calibri;
mso-fareast-theme-font:minor-latin;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;
mso-bidi-font-family:"Times New Roman";
mso-bidi-theme-font:minor-bidi;}
.MsoPapDefault
{mso-style-type:export-only;
margin-bottom:10.0pt;
line-height:115%;}
@page WordSection1
{size:8.5in 11.0in;
margin:1.0in 1.0in 1.0in 1.0in;
mso-header-margin:.5in;
mso-footer-margin:.5in;
mso-paper-source:0;}
div.WordSection1
{page:WordSection1;}
-->
</style>
<br />
<div class="MsoNormal" style="font-family: inherit;">
<b>Porting Wi-Fi drivers
to Android:<o:p></o:p></b></div>
<div class="MsoNormal" style="font-family: inherit;">
<b>Contents</b><br />
0. Understand how Android WiFi works. <br />
1. Enable building of wpa_supplicant in your BoardConfig.mk <br />
2. (Optional) Enable debug for wpa_supplicant. <br />
3. Provide a proper wpa_supplicant.conf for your device <br />
4. Have the correct paths and permissions created from init.rc <br />
5. Make sure your wpa_supplicant and dhcpcd (optional) are starting from
init.rc <br />
6. Provide your driver either as a module or built in kernel and proper kernel
support for it and modify Android source code accordingly. <br />
7. Provide a firmware if your module needs it. <br />
8. Make your driver work with Android custom wpa_supplicant commands and
SIOCSIWPRIV ioctl <br />
<br />
Now onto details. <br />
<br />
<b>0. Understand how Android WiFi works.</b></div>
<div class="MsoNormal" style="font-family: inherit;">
<br />
Android uses a modified <i>wpa_supplicant</i> ( external/wpa_supplicant )
daemon for wifi support which is controlled through a socket by
hardware/libhardware_legacy/wifi/wifi.c (WiFiHW) that gets controlled from
Android UI through <i>android.net.wifi </i>package from frameworks/base/wifi/java/android/net/wifi/
and it's corresponding jni implementation in
frameworks/base/core/jni/android_net_wifi_Wifi.cpp Higher level network
management is done in frameworks/base/core/java/android/net <br />
<br />
<b>1. Enable building of wpa_supplicant in your BoardConfig.mk</b></div>
<div class="MsoNormal" style="font-family: inherit;">
<br />
This is by simply adding: BOARD_WPA_SUPPLICANT_DRIVER := WEXT to your
BoardConfig.mk . This will set WPA_BUILD_SUPPLICANT to true in
external/wpa_supplicant/Android.mk enabling building of driver_wext.c<br />
If you have a custom wpa_supplicant driver (like madwifi or my custom android
private commands emulation - see last paragraph) you can replace WEXT with
AWEXT or your driver name (MADWIFI, PRISM etc). <br />
<br />
<b>2. (Optional) Enable debug for wpa_supplicant.</b></div>
<div class="MsoNormal" style="font-family: inherit;">
<br />
By default wpa_supplicant is set to MSG_INFO that doesn't tell much. <br />
To enable more messages: <br />
2.1 modify common.c and set wpa_debug_level = MSG_DEBUG <br />
2.2 modify common.h and change #define wpa_printf from if ((level) >=
MSG_INFO) to if ((level) >= MSG_DEBUG) <br />
<br />
<b>3. Provide a proper wpa_supplicant.conf for your device </b></div>
<div class="MsoNormal" style="font-family: inherit;">
<br />
Providing a wpa_supplicant.conf it's important because the control socket for
android is specified in this file (ctrl_interface= ). This file should be
copied by your AndroidBoard.mk to $(TARGET_OUT_ETC)/wifi (usually
/system/etc/wifi/wpa_supplicant.conf ). This location will be used on
wpa_supplicant service from init.rc. <br />
There are two different ways in which wpa_supplicant can be configured, one is
to use a "private" socket in android namespace, created by
socket_local_client_connect() function in wpa_ctrl.c and another is by using a
standard unix socket. <br />
<br />
Minimum required config options in wpa_supplicant.conf : <br />
<b>- Android private socket </b><br />
<br />
ctrl_interface=wlan0 <br />
update_config=1 <br />
<br />
<b>- Unix standard socket </b><br />
<br />
ctrl_interface=DIR=/data/system/wpa_supplicant GROUP=wifi <br />
update_config=1 <br />
<br />
<br />
Depending on your driver you might also want to add: <br />
ap_scan=1 <br />
<br />
If you have AP association problems with should change to ap_scan=0 to let the
driver do the association instead of wpa_supplicant. <br />
If you want to let wpa_supplicant connect to non-WPA or open wireless networks
(by default it skips these kind) add: <br />
<br />
<br />
network={ <br />
key_mgmt=NONE <br />
} <br />
<br />
<b>4. Have the correct permissions and paths created from init.rc </b><br />
Incorrect permissions will result in wpa_supplicant not being able to
create/open the control socket and libhardware_legacy/wifi/wifi.c won't
connect. <br />
Since Google modified wpa_supplicant to run as <b>wifi </b>user/group the
directory structure and file ownership should belong to wifi user/group (see
os_program_init() function in wpa_supplicant/os_unix.c ).<br />
<br />
Otherwise errors like: <br />
E/WifiHW ( ): Unable to open connection to supplicant on
"/data/system/wpa_supplicant/wlan0": No such file or directory will
appear. <br />
<br />
Also wpa_supplicant.conf should belong to wifi user/group because
wpa_supplicant will want to modify this file. If your system has /system as
read-only use a location like /data/misc/wifi/wpa_supplicant.conf and modify
wpa_supplicant service in init.rc with new location. <br />
Make sure the paths are correctly created in init.rc: <br />
<br />
<br />
mkdir /system/etc/wifi 0770 wifi wifi <br />
chmod 0770 /system/etc/wifi <br />
chmod 0660 /system/etc/wifi/wpa_supplicant.conf <br />
chown wifi wifi /system/etc/wifi/wpa_supplicant.conf <br />
#wpa_supplicant control socket for android wifi.c (android private socket) <br />
mkdir /data/misc/wifi 0770 wifi wifi <br />
mkdir /data/misc/wifi/sockets 0770 wifi wifi <br />
chmod 0770 /data/misc/wifi <br />
chmod 0660 /data/misc/wifi/wpa_supplicant.conf <br />
chown wifi wifi /data/misc/wifi <br />
chown wifi wifi /data/misc/wifi/wpa_supplicant.conf <br />
<br />
<br />
If you use a <b>Unix standard socket </b>in wpa_supplicant.conf (see above)
add: <br />
<br />
# wpa_supplicant socket (unix socket mode) <br />
mkdir /data/system/wpa_supplicant 0771 wifi wifi <br />
chmod 0771 /data/system/wpa_supplicant <br />
chown wifi wifi /data/system/wpa_supplicant <br />
<br />
Do not add these if you use Android private socket because it will make
wpa_supplicant non-functional, because hardware/libhardware_legacy/wifi/wifi.c
check for existence of the /data/system/wpa_supplicant folder and will pass a
wrong interface name to wpa_ctrl_open() function. <br />
<br />
<b>5. Make sure your wpa_supplicant and dhcpcd are starting from init.rc </b><br />
<br />
For wpa_supplicant the init.rc startup like should be depending on which path
you chosen: <br />
<b>- Android private socket: </b><br />
<br />
service wpa_supplicant /system/bin/wpa_supplicant -dd -Dwext -iwlan0 -c
/system/etc/wifi/wpa_supplicant.conf <br />
socket wpa_wlan0 dgram 660 wifi wifi <br />
group system wifi inet <br />
disabled <br />
oneshot <br />
<br />
<b>- Unix standard socket: </b><br />
<br />
service wpa_supplicant /system/bin/wpa_supplicant -dd -Dwext -iwlan0 -c
/system/etc/wifi/wpa_supplicant.conf <br />
group system wifi inet <br />
disabled <br />
oneshot <br />
<br />
If your wifi driver creates a wifi interface with other name than wlan0 you
will have to modify the above line accordingly. <br />
You also should have dhcpcd starting from init.rc <br />
<br />
service dhcpcd /system/bin/dhcpcd wlan0 <br />
group system dhcp <br />
disabled <br />
oneshot <br />
<br />
<br />
Newer AOSP versions after Gingerbread use dhcpcd_wlan0 as service name.<br />
<br />
<b>6. Provide your driver either as a module or built in kernel and proper
kernel support for it. </b><br />
First make sure that <span class="code">CONFIG_PACKET and
CONFIG_NET_RADIO</span> (wireless extensions) are enabled in your kernel.
The driver can be built as module (default android way) or built in kernel (if
you want to rely in kernel auto probing to support multiple driver eg. USB
wifi) but will require source code modifications (see below). <br />
<b> - As kernel module: </b><br />
Define in your BoardConfig.mk : <br />
1. WIFI_DRIVER_MODULE_PATH := path to the module to be loaded <br />
You need to specify module name in that
path too, usually should look something like /system/lib/modules/wlan.ko <br />
2. WIFI_DRIVER_MODULE_NAME:= the name of the network
interface that the driver creates, for example wlan0 <br />
3. WIFI_DRIVER_MODULE_ARG:= any arguments that you want to pass to
the driver on insmod, for example nohwcrypt <br />
<br />
Make sure you copy your kernel module when building android to the
correct location. <br />
<b>- As built in kernel: </b><br />
- First init.rc needs to be modified to inform
hardware/libhardware_legacy/wifi/wifi.c about the name of the interface, that
the driver is already loaded and set the status of wpa_supplicant to
running: <br />
<br />
setprop wifi.interface "wlan0" <br />
setprop wlan.driver.status "ok" <br />
<br />
<br />
Do <b>NOT </b>add setprop init.svc.wpa_supplicant "running" as I
previously mentioned as it will prevent wpa_supplicant from starting from init.
<br />
- Secondly hardware/libhardware_legacy/wifi/wifi.c need to be modified so
the functions insmod() and rmmod() return 0 (simply add return 0; as the first
line in functions since they are not needed when driver is built in kernel) and
return before checking for /proc/modules in check_driver_loaded()
function. <br />
You might encounter problems with WifiHW module not being able to connect to
wpa_supplicant socket even with the correct permisions. Try to turn off / turn
on Wifi from the GUI. <br />
<br />
<b> 7. Provide a firmware if your driver needs it </b><br />
<br />
If your driver needs a firmware you will have to copy this firmware file to
/etc/firmware on your android build. Android doesn't use a standard hotplug
binary (although there is an implementation available on android-x86 system/code/toolbox/hotplug.c
) instead the init process takes care of firmware events and loads the firmware
file from /etc/firmware (see: system/core/init/devices.c handle_firmware_event()
function). <br />
Firmware file name is defined by the driver and might also contain a folder
like: RTL8192SU/rtl8192sfw.bin, entire file path should be available in
/etc/firmware <br />
<br />
<b>8. Make your driver work with Android custom wpa_supplicant commands and
SIOCSIWPRIV ioctl. </b><br />
<br />
Android uses SIOCSIWPRIV ioctl to send commands to modify driver
behaviour and receive information like signal strength, mac address of the AP,
link speed etc. This ioctl is usually not implemented in any known wireless drivers
except bcm4329 which is in google msm
kernel branch . <br />
The errors from not having this ioctl implemented will look like: <br />
E/wpa_supplicant( ): wpa_driver_priv_driver_cmd failed
wpa_driver_priv_driver_cmd RSSI len = 4096 <br />
E/wpa_supplicant( ): wpa_driver_priv_driver_cmd failed <br />
D/wpa_supplicant( ): wpa_driver_priv_driver_cmd LINKSPEED len = 4096 <br />
E/wpa_supplicant( ): wpa_driver_priv_driver_cmd failed <br />
I/wpa_supplicant( ): CTRL-EVENT-DRIVER-STATE HANGED <br />
<br />
After 4, WEXT_NUMBER_SEQUENTIAL_ERRORS errors, android will abort using the
device. <br />
<br />
To quickly test your wifi from interface you can disable error checking in
external/wpa_supplicant/driver_wext.c by simply making ret = 0; in
wpa_driver_priv_driver_cmd() function after the SIOCSIWPRIV ioctl call. This
will make all access points in android UI appear without signal or MAC address.
<br />
To proper implement the ioctl you will need to modify your kernel driver to
reply to SIOCSIWPRIV ioctl with RSSI (signal strength) and MACADDR commands
being the most important. <br />
A better way is to add a custom driver_xxx.c to google external/wpa_supplicant/
implementing wpa_driver_priv_driver_cmd() function that will take care of RSSI,
MACADDR and others, through calls to SIOCGIWSTATS, SIOCGIFHWADDR ioctls, with
the rest of the functions being called from driver_wext.c. <br />
Below is a link to a patch for wpa_supplicant that I did for mini-box.com picoPC Android
build. It creates a new driver awext which "emulates" android driver
commands using wireless extensions ioctls. <br />
<br />
How to use the new driver: <br />
<br />
1. In your BoardConfig.mk define: BOARD_WPA_SUPPLICANT_DRIVER := AWEXT <br />
2. Change init.rc wpa_supplicant service command line by replacind -Dwext with –Dawext<o:p></o:p></div>
<span style="font-family: inherit; font-size: 11pt; line-height: 115%;">AWEXT driver patch download: android_wext_emulation_driver_awext.patch
<br />
For Gingerbread patches see the post above.</span><br />
<br />
<span style="font-size: large;"><b>FAQ's on Wi-Fi on Android</b></span><span style="font-family: inherit; font-size: 11pt; line-height: 115%;"> </span><br />
<br />
<b>a) </b><b>I am getting an error "Failed to start supplicant!". How to resolve this issue?</b><br />
The wpa_supplicant needs to run as a service. It looks like the service entry hasn't been added to init.rc file. Add the below entries to init.rc file.<br />
service wpa_supplicant /system/bin/wpa_supplicant -Dwext -iwlan0 -c/data/misc/wifi/wpa_supplicant.conf<br /> class main<br /> socket wpa_wlan0 dgram 0660 wifi wifi<br /> disabled<br /> oneshot<br />
<br /><b>b) Unable to open connection to supplicant on "/data/system/wpa_supplicant/wlan0": No such file or directory</b><br />
The socket entry and permissions needs to be added in init.rc file<br />
Add the below entries to init.rc file<br />
mkdir /system/etc/wifi 0770 wifi wifi<br /> chmod 0770 /system/etc/wifi<br /> chmod 0660 /system/etc/wifi/wpa_supplicant.conf<br /> chown wifi wifi /system/etc/wifi/wpa_supplicant.conf<br /># wpa_supplicant control socket for android wifi.c (android private socket)<br /> mkdir /data/misc/wifi 0770 wifi wifi<br /> mkdir /data/misc/wifi/sockets 0770 wifi wifi<br /> chmod 0770 /data/misc/wifi<br /> chmod 0660 /data/misc/wifi/wpa_supplicant.conf<br /> chown wifi wifi /data/misc/wifi<br /> chown wifi wifi /data/misc/wifi/wpa_supplicant.conf <br /><br />
<b>c)</b> <b>ADDRCONF(NETDEV_UP): wlan0: link is not read</b>y <br />
The wpa_supplicant service is already will be running . But, it's failing to scan the networks. At this point of time, you will receive an warning message like this.<br />
Android uses SIOCSIWPRIV ioctl to send commands to modify driver behaviour and receive information like signal strength, mac address of the AP, link speed etc. This ioctl is usually not implemented. A quick workaround was to emulate this ioctl functionality in WPA_supplicant itself. Here is the corresponding patch Added emulation of Android private ioctls for generic WiFi drivers.<br />
Check this <a href="https://gitorious.org/picopc-android-gingerbread/external-wpa_supplicant_6/commit/5f5c50d722eedaedd75c1698b79f464310ce6478?format=patch" target="_blank">link </a>for the Patch. <br />
<br />
<b>d)</b> <b>Wi-Fi is able to scan other networks, but when i tried to connect to other networks, it's getting failed</b>.<br />
The DHCPCD service needs to be started as well. The <b>Dynamic Host Configuration Protocol</b> (<b>DHCP</b>) is a network configuration protocol for hosts on Internet Protocol (IP) networks. This service will provide the dynamic IP.<br />
start the dhcp service from init.rc file<br />
service dhcpcd /system/bin/dhcpcd wlan0 <br /> group system dhcp <br /> disabled <br /> oneshot <br />
<br />
<span style="font-size: large;"><b><span style="font-family: inherit;">References</span></b></span><br />
<span style="font-size: large;"><span style="font-family: inherit;"><b> </b><span style="font-size: small;">a) <a href="http://blog.linuxconsulting.ro/2010/04/porting-wifi-drivers-to-android.html">http://blog.linuxconsulting.ro/2010/04/porting-wifi-drivers-to-android.html</a></span></span></span><br />
<span style="font-size: large;"><span style="font-family: inherit;"><span style="font-size: small;"> b)</span></span></span><a href="http://www.howstuffworks.com/wireless-network.htm"><span style="font-size: small;"><span style="font-family: inherit;"> </span></span>http://www.howstuffworks.com/wireless-network.htm</a><br />
<br />
Let me know, for any broken links<br />
<br />
<br />
<span style="font-family: "Calibri","sans-serif"; font-size: 11pt; line-height: 115%;"></span></div>Unknownnoreply@blogger.com5tag:blogger.com,1999:blog-354640911237521543.post-58028950752616927712012-02-03T09:07:00.000+05:302012-03-21T11:58:47.970+05:30Android Useful Links<div dir="ltr" style="text-align: left;" trbidi="on">
In this post, i am gathering some of the Android web Links which will be useful for the Android Developers.<br />
<br />
<div style="color: #0b5394;">
<b>The Android boot process from power on:</b></div>
<br />
This <a href="http://www.androidenea.com/2009/06/android-boot-process-from-power-on.html" target="_blank">link</a> will discuss the initial boot stages of an Android phone in detail. This article will through light on boot process steps starting from Boot Rom code to the Android System Server.<br />
I Found this article very useful and informative.<br />
<br />
<b><span style="color: #0b5394;">Porting Wi-Fi Drivers to Android</span></b><br />
<br />
This <a href="http://blog.linuxconsulting.ro/2010/04/porting-wifi-drivers-to-android.html" target="_blank">link</a> provides a step by step explanation of what's involved in adding a
new wifi driver and making wifi work in a custom Android build.<br />
I referred this link, and got an instant success in bringing up the Wi-Fi Driver on Android.<br />
<br />
<div style="color: #0b5394;">
<b>Wi-Fi as Access Point (AP) in Android.</b></div>
<br />
This <a href="http://omappedia.org/wiki/Porting_WLAN_SoftAP_to_Android" target="_blank">link</a> provides complete instructions on how to build SoftAP driver and porting SoftAP driver to Android File System.<br />
<b></b><br />
<div style="color: #0b5394;">
<b>Android on OMAP (TI's ARM)</b></div>
<br />
This <a href="http://elinux.org/Android_on_OMAP" target="_blank">link</a> collects information about and guides you through the installation of Google's<a href="http://www.blogger.com/goog_1749392822"> </a>Android on TI's ARM based OMAP SoCs.<br />
<br />
<div style="color: #0b5394;">
<b>Android Bluetooth Introduction.</b></div>
<br />
This <a href="http://i-miss-erin.blogspot.in/2009/06/android-bluetooth-introduction-part-i.html" target="_blank">link</a> explains the architecture of Bluetooth in android.<br />
<br />
<div style="color: #0b5394;">
<b>Git Cheat Sheets</b></div>
<br />
This <a href="http://help.github.com/git-cheat-sheets/" target="_blank">link</a> is having the "git commands" in a trimmed way. Most comprehensive list of commands.<br />
<br />
<br />
Please write to me, for any broken links</div>Unknownnoreply@blogger.com0Bengaluru, Karnataka, India12.9715987 77.594562712.724026199999999 77.2787057 13.2191712 77.910419699999991tag:blogger.com,1999:blog-354640911237521543.post-14279276912590017062012-01-16T13:46:00.000+05:302012-01-16T13:46:12.339+05:30How to know My Android Application/Process killed due to low Memory?<div dir="ltr" style="text-align: left;" trbidi="on">
<br />
<b>Prerequisites : </b><br /> 1) ICS(Ice cream sandwich) <a href="http://source.android.com/source/downloading.html" target="_blank">AOSP code</a> - 4.0.3<br />
<br />
These are the pointers to verify in native source code for the "low-memory" condition.<br />
<br />
<b>1) Detect "Out of Memory on" situation in the below functions</b><br /><br /> Function Names : dvmMalloc() calls<br /> tryMalloc ()<br /> File Name : Heap.cpp<br /> Path : /dalvik/vm/alloc<br /><br /><b>2) ActivityManager kill the process.</b><br /><br /> Function Name : requestFinishActivityLocked<br /> File Name : ActivityStack.java<br /> Path : /frameworks/base/services/java/com/android/server/am<br /><br /><b>3) Report process is died.</b><br /><br /> Function Name : appDiedLocked<br /> File Name : ActivityManagerService.java<br /> Path : frameworks/base/services/java/com/android/server/am/ <br />
<br />
Enable the Native logs in above functions, and from this you can confirm that the application is getting killed because of low memory.<br />
<br />
Check this <a href="http://androidandsandu.blogspot.com/2012/01/log-function-for-debugging-native-code.html" target="_blank">link</a> to know "How to enable native logs".<br />
<br />
<span style="font-size: x-small;">Note : execute '/proc/meminfo' to know the current status of memory consumed, memory free etc..</span><br />
<br /></div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-354640911237521543.post-46910322852287470192012-01-16T13:27:00.000+05:302012-01-16T13:27:23.274+05:30Log Function for Debugging Native Code in Android<div dir="ltr" style="text-align: left;" trbidi="on">
<b><span style="font-family: Times,"Times New Roman",serif;">Follow these steps to enable logs in the native code. </span></b><br style="font-family: Times,"Times New Roman",serif;" /><i><br style="font-family: Times,"Times New Roman",serif;" /><span style="font-family: Times,"Times New Roman",serif;">1) Include the "log.h" in the native code . Preferably in the beginning of the file.</span></i><br style="font-family: Times,"Times New Roman",serif;" /><span style="font-family: Times,"Times New Roman",serif;"> </span><br />
<span style="font-family: Times,"Times New Roman",serif;"> #include "android/log.h" </span><br style="font-family: Times,"Times New Roman",serif;" /><i><br style="font-family: Times,"Times New Roman",serif;" /><span style="font-family: Times,"Times New Roman",serif;">2) Write the "my_log" function in the source file</span></i><br style="font-family: Times,"Times New Roman",serif;" /><br style="font-family: Times,"Times New Roman",serif;" /><span style="font-family: Times,"Times New Roman",serif;">void my_log(int level, const char *format,...)</span><br style="font-family: Times,"Times New Roman",serif;" /><span style="font-family: Times,"Times New Roman",serif;">{</span><br style="font-family: Times,"Times New Roman",serif;" /><span style="font-family: Times,"Times New Roman",serif;"> va_list arglist;</span><br style="font-family: Times,"Times New Roman",serif;" /><br style="font-family: Times,"Times New Roman",serif;" /><span style="font-family: Times,"Times New Roman",serif;"> va_start(arglist, format);</span><br style="font-family: Times,"Times New Roman",serif;" /><span style="font-family: Times,"Times New Roman",serif;"> __android_log_vprint(level, "file_name.cpp", format, arglist);</span><br style="font-family: Times,"Times New Roman",serif;" /><span style="font-family: Times,"Times New Roman",serif;"> va_end(arglist);</span><br style="font-family: Times,"Times New Roman",serif;" /><br style="font-family: Times,"Times New Roman",serif;" /><span style="font-family: Times,"Times New Roman",serif;"> return;</span><br style="font-family: Times,"Times New Roman",serif;" /><span style="font-family: Times,"Times New Roman",serif;">}</span><br style="font-family: Times,"Times New Roman",serif;" /><br style="font-family: Times,"Times New Roman",serif;" /><i><span style="font-family: Times,"Times New Roman",serif;">3) call "my_log()" from your function.</span></i><br style="font-family: Times,"Times New Roman",serif;" /><span style="font-family: Times,"Times New Roman",serif;"> </span><br />
<span style="font-family: Times,"Times New Roman",serif;">ex:</span><br style="font-family: Times,"Times New Roman",serif;" /><span style="font-family: Times,"Times New Roman",serif;"> int my_function()</span><br style="font-family: Times,"Times New Roman",serif;" /><span style="font-family: Times,"Times New Roman",serif;"> {</span><br style="font-family: Times,"Times New Roman",serif;" /><span style="font-family: Times,"Times New Roman",serif;"> .........</span><br style="font-family: Times,"Times New Roman",serif;" /><span style="font-family: Times,"Times New Roman",serif;"> .........</span><br style="font-family: Times,"Times New Roman",serif;" /><span style="font-family: Times,"Times New Roman",serif;"> my_log(ANDROID_LOG_DEBUG,(const char *)"my_function has been called") ;</span><br style="font-family: Times,"Times New Roman",serif;" /><span style="font-family: Times,"Times New Roman",serif;"> .........</span><br style="font-family: Times,"Times New Roman",serif;" /><span style="font-family: Times,"Times New Roman",serif;"> .........</span><br style="font-family: Times,"Times New Roman",serif;" /><span style="font-family: Times,"Times New Roman",serif;"> }</span><br />
<br />
<br />
<span style="font-size: x-small;">Note : </span><br />
<span style="font-size: x-small;">a) "android/log.h" doesn't define LOGE, LOGD, etc.. but only a few functions<br />like __android_log_print() that you are free to wrap around your own<br />logging/debugging macros. </span><br />
<br />
<span style="font-size: x-small;">b) LOGD/LOGE are used internally by the Android sources (in <cutils/log.h>),<br />but are not exposed by the native code for fear of conflict with other logging<br />systems.</span></div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-354640911237521543.post-81522958427693071142011-12-22T10:15:00.000+05:302011-12-22T10:15:42.521+05:30How to add Indian Languages to Android ICS (4.0.3)<div dir="ltr" style="text-align: left;" trbidi="on">Google is officially supporting the Indian languages rendering from 4.0.3 onwards.<br />
The AOSP code supports rendering of three Indian languages in Web-kit. (Devanagari, Tamil, and Bengali).<br />
I just added support for the other Indian languages as well. Tested it on my Nexus-S device<br />
<br />
<b>Prerequisites :</b><br />
<ul style="text-align: left;"><li>ICS (4.0.3) <a href="http://source.android.com/source/downloading.html" target="_blank">AOSP source code</a>.</li>
<li>Nexus -s Device </li>
</ul><br />
<b>Follow these instructions:</b><br />
<br />
1) Download the "Binary" file of the Indian language from <a href="https://fedorahosted.org/lohit/" target="_blank">this</a> link.<br />
<span style="font-size: x-small;">Ex: lohit-kananda-ttf-2.5.0.tar.gz</span> <br />
<br />
2) Untar the downloaded file and Copy the extracted folder into <br />
external/lohit-fonts directory<br />
<span style="font-size: x-small;">Ex: lohit-kannada-ttf-2.5.0</span><br />
<br />
3) Rename the folder name to lohit-kannada-ttf<br />
<br />
4) Modify the Android.mk file which is present in external\lohit-fonts directory<br />
<br />
<span style="font-size: x-small;">ifneq ($(SMALLER_FONT_FOOTPRINT),true)<br />
extra_lohit_fonts := Lohit-Bengali.ttf Lohit-Tamil.ttf Lohit-Kannada.ttf <br />
endif </span><br />
<br />
<span style="font-size: x-small;">include $(CLEAR_VARS)</span><br />
<span style="font-size: x-small;"> LOCAL_MODULE := Lohit-Kannada.ttf</span><br />
<span style="font-size: x-small;"> LOCAL_SRC_FILES := lohit-kannada-ttf/$(LOCAL_MODULE)</span><br />
<span style="font-size: x-small;"> LOCAL_MODULE_CLASS := ETC</span><br />
<span style="font-size: x-small;"> LOCAL_MODULE_TAGS := optional</span><br />
<span style="font-size: x-small;"> LOCAL_MODULE_PATH := $(TARGET_OUT)/fonts</span><br />
<span style="font-size: x-small;"> include $(BUILD_PREBUILT)</span><br />
<br />
5) Modify the FontAndroid.cpp file (external/webkit/source/webcore/platform/graphics/android)<br />
<br />
a) Add an language entry to CustomScript enum<br />
<span style="font-size: x-small;"> enum CustomScript {</span><br />
<span style="font-size: x-small;"> Bengali,<br />
Devanagari,</span><br />
<span style="font-size: x-small;"> Kannada,</span><br />
<span style="font-size: x-small;"> .......</span><br />
<span style="font-size: x-small;"> };</span><br />
<br />
b) Add the ttf file path to the TextRunWalker Paths<br />
<br />
<span style="font-size: x-small;">const char* TextRunWalker::paths[] = {<br />
"/system/fonts/Lohit-Bengali.ttf",<br />
"/system/fonts/Lohit-Devanagari.ttf",</span><br />
<span style="font-size: x-small;"> "/system/fonts/Lohit-Kannada.ttf",</span><br />
<span style="font-size: x-small;"> ........</span><br />
<span style="font-size: x-small;"> };</span><br />
<br />
c) Now setup the Font for Script Run<br />
<span style="font-size: x-small;">TextRunWalker::setupFontForScriptRun()</span><br />
<span style="font-size: x-small;"> {</span><br />
<span style="font-size: x-small;"> case HB_Script_Kannada:<br />
complexPlatformData = setupComplexFont(Kannada, platformData);<br />
break;</span><br />
<span style="font-size: x-small;"> }</span><br />
<span style="font-size: x-small;"> </span><br />
6) Add the *.ttf file in Fallback_fonts.xml <span style="font-size: x-small;">(frameworks\base\data\fonts)</span><br />
<br />
<span style="font-size: x-small;">Note : Assamese language is not enabled as Harfbuzz is not supporting this language.</span></div>Unknownnoreply@blogger.com35Bengaluru, Karnataka, India12.9715987 77.59456269999998312.7518902 77.342821199999989 13.191307199999999 77.846304199999977