<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>/dev/mobile &#187; Communications</title>
	<atom:link href="http://www.christec.co.nz/blog/archives/category/communications/feed" rel="self" type="application/rss+xml" />
	<link>http://www.christec.co.nz</link>
	<description>Development for a mobile world - Making a quality platform one application at a time</description>
	<lastBuildDate>Tue, 27 Oct 2009 09:56:21 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.5</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Intercept SMS messages</title>
		<link>http://www.christec.co.nz/blog/archives/508</link>
		<comments>http://www.christec.co.nz/blog/archives/508#comments</comments>
		<pubDate>Tue, 23 Sep 2008 10:36:22 +0000</pubDate>
		<dc:creator>Christopher Fairbairn</dc:creator>
				<category><![CDATA[Communications]]></category>

		<guid isPermaLink="false">http://www.christec.co.nz/blog/?p=508</guid>
		<description><![CDATA[Many TV game shows use SMS text messages for viewer voting and other forms of participation. This blog post discusses how a Windows Mobile application can automatically respond to incoming SMS text messages to create such services.
Creating a Message Interceptor
The first step in catching received SMS text messages is to create an instance of the [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.christec.co.nz/blog/wp-content/uploads/2008/09/sms-interception-screenshot.png" alt="Screenshot of SMS Device Control sample application" width="240" height="117" class="alignleft size-full wp-image-510" />Many TV game shows use SMS text messages for viewer voting and other forms of participation. This blog post discusses how a Windows Mobile application can automatically respond to incoming SMS text messages to create such services.</p>
<h3>Creating a Message Interceptor</h3>
<p>The first step in catching received SMS text messages is to create an instance of the <a href="http://msdn.microsoft.com/en-us/library/microsoft.windowsmobile.pocketoutlook.messageinterception.messageinterceptor.aspx">MessageInterceptor</a> class that lives in the <a href="http://msdn.microsoft.com/en-us/library/microsoft.windowsmobile.pocketoutlook.aspx">Microsoft.WindowsMobile.PocketOutlook assembly</a>. You need to be careful about where you define this instance as if it goes out of scope and is garbage collected the message interception will stop.</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;">MessageInterceptor interceptor <span style="color: #008000;">=</span>
  <span style="color: #008000;">new</span> MessageInterceptor<span style="color: #000000;">&#40;</span>InterceptionAction.<span style="color: #0000FF;">NotifyAndDelete</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span></pre></div></div>

<p>An <a href="http://msdn.microsoft.com/en-us/library/microsoft.windowsmobile.pocketoutlook.messageinterception.interceptionaction.aspx">InterceptionAction</a> is passed to the constructor. This parameter defines the behaviour which occurs when a message is received. The two options are:</p>
<ul>
<li><i>Notify</i> &#8211; The message interceptor gets a chance to process the message but it is also received by the standard SMS inbox application.</li>
<li><i>NotifyAndDelete</i> &#8211; The message does not become visible to the user and is only seen by the message interceptor.</li>
</ul>
<h3>Specifying an interception condition</h3>
<p>A message interceptor that processed and potentially deleted every message would not be very useful. You can define a <a href="http://msdn.microsoft.com/en-us/library/microsoft.windowsmobile.pocketoutlook.messageinterception.messageinterceptor.messagecondition.aspx">message condition</a> to reduce the number of messages caught by a message interceptor.</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;">interceptor.<span style="color: #0000FF;">MessageCondition</span> <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> MessageCondition<span style="color: #000000;">&#40;</span>
  MessageProperty.<span style="color: #0000FF;">Body</span>, 
  MessagePropertyComparisonType.<span style="color: #0000FF;">StartsWith</span>, <span style="color: #666666;">&quot;CKF:&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span></pre></div></div>

<p>A message condition describes a <a href="http://msdn.microsoft.com/en-us/library/microsoft.windowsmobile.pocketoutlook.messageinterception.messageproperty.aspx">MessageProperty</a> (such as text message body or sender&#8217;s phone number) that should be compared against a specific value. A <a href="http://msdn.microsoft.com/en-us/library/microsoft.windowsmobile.pocketoutlook.messageinterception.messagepropertycomparisontype.aspx">MessagePropertyComparisionType</a> (such as Contains, EndsWith, StartsWith, or Equal) defines how to perform the comparison.</p>
<p>Only SMS text messages that pass the comparison will be forwarded to the message interceptor. In the code sample above, our message interceptor will intercept any message that begins with the special prefix &#8220;CKF:&#8221;. Any SMS message that does not match this condition will be placed into the standard SMS inbox.</p>
<h3>Transient Interceptors</h3>
<p>Now that we have configured the message interceptor we can finally request that it listens for incoming SMS text messages. We do this by registering a <a href="http://msdn.microsoft.com/en-us/library/microsoft.windowsmobile.pocketoutlook.messageinterception.messageinterceptor.messagereceived.aspx">MessageReceived</a> event handler.</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;">interceptor.<span style="color: #0000FF;">MessageReceived</span> <span style="color: #008000;">+=</span> SmsInterceptor_MessageReceived<span style="color: #008000;">;</span></pre></div></div>

<p>When we no longer desire to listen to incoming SMS text messages we simply remove our event handler.</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;">interceptor.<span style="color: #0000FF;">MessageReceived</span> <span style="color: #008000;">-=</span> SmsInterceptor_MessageReceived<span style="color: #008000;">;</span></pre></div></div>

<p>When the last event handler unhooks itself from the MessageReceived event the message interception process will be disabled.</p>
<p>While enabled any received text message will be passed to our MessageReceived event handler for processing.</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF;">void</span> SmsInterceptor_MessageReceived<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">object</span> sender, 
         MessageInterceptorEventArgs e<span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
  SmsMessage msg <span style="color: #008000;">=</span> e.<span style="color: #0000FF;">Message</span> <span style="color: #0600FF;">as</span> SmsMessage<span style="color: #008000;">;</span>
  <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>msg <span style="color: #008000;">!=</span> <span style="color: #0600FF;">null</span><span style="color: #000000;">&#41;</span>
  <span style="color: #000000;">&#123;</span>
    <span style="color: #008080; font-style: italic;">// Process the SMS text message </span>
    ....
  <span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<h3>Persistent Interceptors</h3>
<p>One flaw of solely using the <a href="http://msdn.microsoft.com/en-us/library/microsoft.windowsmobile.pocketoutlook.messageinterception.messageinterceptor.messagereceived.aspx">MessageReceived event</a> is that if your application exits you will stop intercepting SMS messages. </p>
<p>If you need to continue to intercept messages while your application is shutdown you need to use a persistent message interceptor.</p>
<p>In order to enable persistent message interception you simply need to call the <a href="http://msdn.microsoft.com/en-us/library/ms881990.aspx">EnableApplicationLauncher</a> method.</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #FF0000;">string</span> appId <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;ChrisTec-SmsDeviceControl&quot;</span><span style="color: #008000;">;</span>
interceptor.<span style="color: #0000FF;">EnableApplicationLauncher</span><span style="color: #000000;">&#40;</span>appId<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span></pre></div></div>

<p>The <i>appid</i> parameter is a unique string which uniquely identifies this particular message interceptor. No two message interceptors should use the same value. Common suggestions are to use a randomly generated GUID or a string that contains a company or product specific prefix.</p>
<p>To disable persistent message interception you call a matching <a href="http://msdn.microsoft.com/en-us/library/microsoft.windowsmobile.pocketoutlook.messageinterception.messageinterceptor.disableapplicationlauncher.aspx">DisableApplicationLauncher</a> method.</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;">interceptor.<span style="color: #0000FF;">DisableApplicationLauncher</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span></pre></div></div>

<p>When an SMS that matches the specified message condition is received by the PDA and the application is not running the OS will automatically restart the application. As part of your application&#8217;s startup procedure you need to recreate a new <a href="http://msdn.microsoft.com/en-us/library/microsoft.windowsmobile.pocketoutlook.messageinterception.messageinterceptor.aspx">MessageInterceptor</a> instance.</p>
<p>The easiest way to create an instance with an identical configuration is to use an <a href="http://msdn.microsoft.com/en-us/library/ms846061.aspx">additional constructor overload</a> that reads the values out of the registry location used to store the interceptor details while the application is not running.</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>MessageInterceptor.<span style="color: #0000FF;">IsApplicationLauncherEnabled</span><span style="color: #000000;">&#40;</span>appId<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
  <span style="color: #008080; font-style: italic;">// Persistent message interceptor has been enabled, so</span>
  <span style="color: #008080; font-style: italic;">// pick up the settings from the registry</span>
  interceptor <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> MessageInterceptor<span style="color: #000000;">&#40;</span>appId<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
<span style="color: #000000;">&#125;</span>
<span style="color: #0600FF;">else</span>
<span style="color: #000000;">&#123;</span>
  <span style="color: #008080; font-style: italic;">// A persistent message interceptor is not enabled, so</span>
  <span style="color: #008080; font-style: italic;">// create a new instance and manually setup the</span>
  <span style="color: #008080; font-style: italic;">// interceptor</span>
  interceptor <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> MessageInterceptor<span style="color: #000000;">&#40;</span>...<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
  interceptor.<span style="color: #0000FF;">MessageCondition</span> <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> MessageCondition<span style="color: #000000;">&#40;</span>...<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>As demonstrated in the above code snippet, it is common to see start up code that makes use of the <a href="http://msdn.microsoft.com/en-us/library/microsoft.windowsmobile.pocketoutlook.messageinterception.messageinterceptor.isapplicationlauncherenabled.aspx">MessageInterceptor.IsApplicationLauncherEnabled</a> method. This method checks if a persistent message interceptor is currently enabled, allowing the application to determine if it needs to register the application launcher or can simply pick up the pre-existing settings.</p>
<h3>Sample Application</h3>
<blockquote><p>[<a href="http://www.christec.co.nz/blog/wp-content/uploads/2008/09/smsdevicecontrol.zip">Download SmsDeviceControl.zip - 10KB</a>]</p></blockquote>
<p>A sample application is available for download. The application demonstrates one possible way for a Windows Mobile application to respond to special SMS text messages.</p>
<p>Once the application is ran (and the enabled checkbox is checked) the application will respond to any SMS text message sent to the device that starts with the &#8220;CKF:&#8221; prefix.</p>
<p>The application parses the contents of the SMS messages it intercepts and interprets them as commands. The following three commands are currently understood:</p>
<ul>
<li><i>GAME</i> &#8211; launches the solitaire game on the PDA</li>
<li><i>HELLO</i> &#8211; displays a message box on the PDA&#8217;s screen</li>
<li><i>MESSAGE your_message</i> &#8211; displays your message on the PDA&#8217;s screen</li>
</ul>
<p>For example an SMS text message containing the text &#8220;CKF: MESSAGE Hello World!&#8221; would cause the PDA&#8217;s screen to display the text &#8220;Hello World!&#8221;.</p>
<p>If you send an SMS text message with the CKF: prefix that isn&#8217;t one of the above commands the application will <a href="http://www.christec.co.nz/blog/archives/495">programatically send an error response message</a> back to the sender.</p>
<p>As SMS text messages are processed you should note that the message counter increases. However if you exit the application and then send an additional text message the counter should restart at 1. This occurs since the counter is not persistent so it does not survive the application re-launch.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.christec.co.nz/blog/archives/508/feed</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Sending SMS messages programatically</title>
		<link>http://www.christec.co.nz/blog/archives/495</link>
		<comments>http://www.christec.co.nz/blog/archives/495#comments</comments>
		<pubDate>Mon, 15 Sep 2008 11:08:45 +0000</pubDate>
		<dc:creator>Christopher Fairbairn</dc:creator>
				<category><![CDATA[Communications]]></category>

		<guid isPermaLink="false">http://www.christec.co.nz/blog/?p=495</guid>
		<description><![CDATA[When developing line of business applications for field service agents it can be handy to have the application send SMS text messages to alert customers of updated status information, such as the potential for the service agent to arrive late for an appointment. This blog post discusses how to send SMS text messages programatically via [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.christec.co.nz/blog/wp-content/uploads/2008/09/send-sms-screenshot.png" alt="Screenshot of Send SMS application" width="242" height="246" class="alignright size-full wp-image-496" />When developing line of business applications for field service agents it can be handy to have the application send SMS text messages to alert customers of updated status information, such as the potential for the service agent to arrive late for an appointment. This blog post discusses how to send SMS text messages programatically via the .NET Compact Framework.<br />
<br clear="all" /></p>
<h3>Supported Platforms</h3>
<p>This blog post makes use of classes within the <a href="http://msdn.microsoft.com/en-us/library/microsoft.windowsmobile.pocketoutlook.aspx">Microsoft.WindowsMobile.PocketOutlook</a> assembly. This assembly is not part of the .NET Compact Framework, instead it is shipped as part of the Windows Mobile operating system.</p>
<p>The assembly was first introduced as part of Windows Mobile 5.0. If you need to send SMS messages from a Windows Mobile 2003 device you will need to utilise a third party component such as the <a href="http://inthehand.com/content/Mobile.aspx">Mobile In The Hand</a> product (which provides a compatible interface) or manually wrap the underlying native APIs.</p>
<p>In order for the demos in this blog post to work you need to add references to the following two assemblies:</p>
<ul>
<li><a href="http://msdn.microsoft.com/en-us/library/microsoft.windowsmobile.pocketoutlook.aspx">Microsoft.WindowsMobile.PocketOutlook</a></li>
<li><a href="http://msdn.microsoft.com/en-us/library/microsoft.windowsmobile.aspx">Microsoft.WindowsMobile</a></li>
</ul>
<p>If you forget the reference to the Microsoft.WindowsMobile assembly you will get the following compile time error:</p>
<blockquote><p>The type &#8216;Microsoft.WindowsMobile.IApplicationLauncher&#8217; is defined in an assembly that is not referenced. You must add a reference to assembly &#8216;Microsoft.WindowsMobile, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35&#8242;.</p></blockquote>
<h3>Creating an SMS Message</h3>
<p>To create a new SMS text message you need to create an instance of the <a href="http://msdn.microsoft.com/en-us/library/microsoft.windowsmobile.pocketoutlook.smsmessage.aspx">SmsMessage class</a> and then set its various properties.</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF;">using</span> <span style="color: #008080;">Microsoft.WindowsMobile.PocketOutlook</span><span style="color: #008000;">;</span>
&nbsp;
SmsMessage message <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> SmsMessage<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
message.<span style="color: #0000FF;">To</span>.<span style="color: #0000FF;">Add</span><span style="color: #000000;">&#40;</span><span style="color: #008000;">new</span> Recipient<span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;Jane Doe&quot;</span>, <span style="color: #666666;">&quot;+1 45 123456&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
message.<span style="color: #0000FF;">Body</span> <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;Would you like to go to lunch?&quot;</span><span style="color: #008000;">;</span></pre></div></div>

<p>The <a href="http://msdn.microsoft.com/en-us/library/microsoft.windowsmobile.pocketoutlook.smsmessage.body.aspx">Body property</a> is a string which contains the message you want to send. Notice that the <a href="http://msdn.microsoft.com/en-us/library/microsoft.windowsmobile.pocketoutlook.smsmessage.to.aspx">To property</a> is a collection of recipients, so a single SMS can be addressed to one or more recipients.</p>
<p>There is even a <a href="http://msdn.microsoft.com/en-us/library/ms846081.aspx">constructor overload</a> which helps with the common case of a simple message intended for a single recipient:</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;">SmsMessage message <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> SmsMessage<span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;+1 45 123456&quot;</span>,
  <span style="color: #666666;">&quot;Would you like to go to lunch?&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span></pre></div></div>

<h3>Sending an SMS Message</h3>
<p>Once we have created the SMS message we need a way to cause it to be sent. There are a couple of ways to achieve this.</p>
<p>The easiest is to call the <a href="http://msdn.microsoft.com/en-us/library/microsoft.windowsmobile.pocketoutlook.smsmessage.send.aspx">send method</a> on the SmsMessage instance as shown below:</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #008080; font-style: italic;">// Send the SMS to its recipient(s)</span>
message.<span style="color: #0000FF;">Send</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span></pre></div></div>

<p>Calling the send method sends the SMS message behind the scenes with no visual indication that something is occurring.</p>
<p>Alternatively if you would like to give the user a chance to review and edit the contents of the message before it is sent you can display the message within the built in messaging application via the <a href="http://msdn.microsoft.com/en-us/library/ms882005.aspx">MessagingApplication.DisplayComposeForm</a> method.</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #008080; font-style: italic;">// Display the new SMS in the standard</span>
<span style="color: #008080; font-style: italic;">// messaging application</span>
MessagingApplication.<span style="color: #0000FF;">DisplayComposeForm</span><span style="color: #000000;">&#40;</span>message<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span></pre></div></div>

<p>The third and final way is to create an instance of the <a href="http://msdn.microsoft.com/en-us/library/microsoft.windowsmobile.pocketoutlook.outlooksession.aspx">OutlookSession</a> class and use it&#8217;s SmsAccount property as follows:</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF;">using</span> <span style="color: #000000;">&#40;</span>OutlookSession session <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> OutlookSession<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
  session.<span style="color: #0000FF;">SmsAccount</span>.<span style="color: #0000FF;">Send</span><span style="color: #000000;">&#40;</span>message<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<h3>Testing within an Emulator</h3>
<p><img src="http://www.christec.co.nz/blog/wp-content/uploads/2008/09/cellular-emulator-start-menu.png" alt="" title="Location of Windows Mobile 6.0 Cellular Emulator within the Windows Start Menu" width="412" height="20" class="aligncenter size-full wp-image-499" /><br />
The Windows Mobile 6 SDK introduced a <a href="http://msdn.microsoft.com/en-us/library/bb158495.aspx">Cellular Emulator</a> tool which makes it easy to test applications which interact with cellular phone based functionality. One advantage of using this tool to test SMS sending applications is that it avoids the charges typically associated with sending SMS messages via real devices.</p>
<p>You can find the Cellular Emulator within your desktop&#8217;s Windows start menu. The first step in using the Cellular Emulator is to connect it to your device emulator. This can be achieved by following the <a href="http://msdn.microsoft.com/en-us/library/bb158502.aspx">Cellular Emulator Quick Start</a> instructions available on MSDN.</p>
<p>If you need further assistance configuring the Cellular Emulator, <a href="http://pluralsight.com/blogs/jimw">Jim Wilson</a> has created a great video titled &#8220;<a href="http://msdn.microsoft.com/en-us/netframework/bb684940.aspx">How Do I: Configure the Device Emulator to Use an Emulated Cellular Connection?</a>&#8220;.</p>
<p>Once correctly configured you can switch to the SMS tab of the Cellular Emulator to send messages to, or view messages received from the device emulator.</p>
<p><img src="http://www.christec.co.nz/blog/wp-content/uploads/2008/09/cellular-emulator-sms-tab.png" alt="Screenshot of SMS tab within the Cellular Emulator application" width="441" height="404" class="aligncenter size-full wp-image-501" /></p>
<h3>Demo Application</h3>
<blockquote><p>[<a href="http://www.christec.co.nz/blog/wp-content/uploads/2008/09/sendsms.zip">Download sendsms.zip - 9KB</a>]</p></blockquote>
<p>A small example application is available for download which demonstrates how to send SMS messages programatically. It displays a simple form to capture the desired message and recipient phone number and then demonstrates a few techniques for sending the message.</p>
<p>Of note is a checkbox which makes the program append onto the end of the user&#8217;s message the current battery charge status. This is a lead into the next blog post which will discuss how to programmatically respond to a Windows Mobile device receiving a SMS text message.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.christec.co.nz/blog/archives/495/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>
