<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:Wingdings;
        panose-1:5 0 0 0 0 0 0 0 0 0;}
@font-face
        {font-family:宋体;
        panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
        {font-family:宋体;
        panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:"\@宋体";
        panose-1:2 1 6 0 3 1 1 1 1 1;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#0563C1;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
p.MsoPlainText, li.MsoPlainText, div.MsoPlainText
        {mso-style-priority:99;
        mso-style-link:"纯文本 Char";
        margin:0cm;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
pre
        {mso-style-priority:99;
        mso-style-link:"HTML 预设格式 Char";
        margin:0cm;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:宋体;}
span.HTMLChar
        {mso-style-name:"HTML 预设格式 Char";
        mso-style-priority:99;
        mso-style-link:"HTML 预设格式";
        font-family:宋体;}
span.Char
        {mso-style-name:"纯文本 Char";
        mso-style-priority:99;
        mso-style-link:纯文本;
        font-family:"Calibri",sans-serif;}
span.EmailStyle21
        {mso-style-type:personal;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
span.EmailStyle22
        {mso-style-type:personal;
        font-family:"Calibri",sans-serif;
        color:#1F497D;}
span.EmailStyle23
        {mso-style-type:personal;
        font-family:"Calibri",sans-serif;
        color:#1F497D;}
span.EmailStyle24
        {mso-style-type:personal;
        font-family:"Calibri",sans-serif;
        color:#1F497D;}
span.EmailStyle25
        {mso-style-type:personal-reply;
        font-family:"Calibri",sans-serif;
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 90.0pt 72.0pt 90.0pt;}
div.WordSection1
        {page:WordSection1;}
/* List Definitions */
@list l0
        {mso-list-id:1238133527;
        mso-list-type:hybrid;
        mso-list-template-ids:-219352040 -1279085848 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
@list l0:level1
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:18.0pt;
        text-indent:-18.0pt;}
@list l0:level2
        {mso-level-number-format:alpha-lower;
        mso-level-text:"%2\)";
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:42.0pt;
        text-indent:-21.0pt;}
@list l0:level3
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        margin-left:63.0pt;
        text-indent:-21.0pt;}
@list l0:level4
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:84.0pt;
        text-indent:-21.0pt;}
@list l0:level5
        {mso-level-number-format:alpha-lower;
        mso-level-text:"%5\)";
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:105.0pt;
        text-indent:-21.0pt;}
@list l0:level6
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        margin-left:126.0pt;
        text-indent:-21.0pt;}
@list l0:level7
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:147.0pt;
        text-indent:-21.0pt;}
@list l0:level8
        {mso-level-number-format:alpha-lower;
        mso-level-text:"%8\)";
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:168.0pt;
        text-indent:-21.0pt;}
@list l0:level9
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        margin-left:189.0pt;
        text-indent:-21.0pt;}
ol
        {margin-bottom:0cm;}
ul
        {margin-bottom:0cm;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="ZH-CN" link="#0563C1" vlink="#954F72">
<div class="WordSection1">
<p class="MsoPlainText"><span lang="EN-US">Hi all,<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">The ovs ran into a problem in our  environment: Flow continuous to upcall(can not generate
</span><span lang="EN-US" style="font-size:10.5pt">corresponding megaflow</span><span lang="EN-US" style="color:#1F497D">)</span><span lang="EN-US"> , because of flow_put_on_pmd failed.<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US" style="font-size:10.5pt"><o:p> </o:p></span></p>
<p class="MsoPlainText"><b><span lang="EN-US" style="font-size:12.0pt">flow configuration</span></b><span lang="EN-US" style="font-size:10.5pt">:<o:p></o:p></span></p>
<p class="MsoPlainText"><i><span lang="EN-US" style="font-size:10.5pt">ciagent-9-:/Images/fzt/ovs #<b> ovs-ofctl show br0</b><o:p></o:p></span></i></p>
<p class="MsoPlainText"><span lang="EN-US" style="font-size:10.5pt">OFPT_FEATURES_REPLY (xid=0x2): dpid:000070c7f2cb5874<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US" style="font-size:10.5pt">n_tables:254, n_buffers:0<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US" style="font-size:10.5pt">capabilities: FLOW_STATS TABLE_STATS PORT_STATS QUEUE_STATS ARP_MATCH_IP<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US" style="font-size:10.5pt">actions: output enqueue ext_action set_vlan_vid set_vlan_pcp strip_vlan mod_dl_src mod_dl_dst mod_nw_src mod_nw_dst mod_nw_tos mod_tp_src mod_tp_dst<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US" style="font-size:10.5pt">1(bond0): addr:70:c7:f2:cb:58:74<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US" style="font-size:10.5pt">     config:     0<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US" style="font-size:10.5pt">     state:      0<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US" style="font-size:10.5pt">     current:    10GB-FD<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US" style="font-size:10.5pt">     speed: 10000 Mbps now, 0 Mbps max<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US" style="font-size:10.5pt">2(test): addr:52:ec:0b:03:38:ab<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US" style="font-size:10.5pt">     config:     0<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US" style="font-size:10.5pt">     state:      0<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US" style="font-size:10.5pt">     current:    10MB-FD COPPER<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US" style="font-size:10.5pt">     speed: 10 Mbps now, 0 Mbps max<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US" style="font-size:10.5pt">LOCAL(br0): addr:70:c7:f2:cb:58:74<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US" style="font-size:10.5pt">     config:     0<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US" style="font-size:10.5pt">     state:      0<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US" style="font-size:10.5pt">     current:    10MB-FD COPPER<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US" style="font-size:10.5pt">     speed: 10 Mbps now, 0 Mbps max<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US" style="font-size:10.5pt"><o:p> </o:p></span></p>
<p class="MsoPlainText"><i><span lang="EN-US" style="font-size:10.5pt">ciagent-9-:/Images/fzt/ovs #
<b>ovs-ofctl dump-flows br0</b><o:p></o:p></span></i></p>
<p class="MsoPlainText"><span lang="EN-US" style="font-size:10.5pt">cookie=0x0, duration=395.501s, table=0, n_packets=717, n_bytes=70266, priority=28,ip,in_port=bond0 actions=IN_PORT<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US" style="font-size:10.5pt">cookie=0x0, duration=2015.547s, table=0, n_packets=0, n_bytes=0, priority=29,ip,nw_dst=198.159.208.0/24 actions=output:test<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US" style="font-size:10.5pt">cookie=0x0, duration=2.763s, table=0, n_packets=0, n_bytes=0, priority=29,ip,nw_dst=139.159.208.0/24 actions=output:test<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US" style="font-size:10.5pt"><o:p> </o:p></span></p>
<p class="MsoPlainText"><b><span lang="EN-US" style="font-size:12.0pt">Steps to reproduce the problem:<o:p></o:p></span></b></p>
<p class="MsoPlainText"><b><span lang="EN-US">Step1:<o:p></o:p></span></b></p>
<p class="MsoPlainText"><span lang="EN-US" style="font-size:10.5pt">Generate an ip stream into bond,<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US" style="font-size:10.5pt">SIP</span><span style="font-size:10.5pt;font-family:宋体">:</span><span lang="EN-US" style="font-size:10.5pt">1.2.1.2   DIP</span><span style="font-size:10.5pt;font-family:宋体">:</span><span lang="EN-US" style="font-size:10.5pt">130.119.101.60 
 Type:icmp request<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US" style="font-size:10.5pt"><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US" style="font-size:10.5pt">A megaflow will be generated:<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US" style="font-size:10.5pt">recirc_id(0),in_port(2),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(dst=130.119.101.60/248.0.0.0,frag=no), packets:751, bytes:73598, used:0.730s, actions:2<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US" style="font-size:10.5pt;color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoPlainText"><b><span lang="EN-US">Step2:<o:p></o:p></span></b></p>
<p class="MsoPlainText"><span lang="EN-US">Delete the flow of “</span><span lang="EN-US" style="font-size:10.5pt">nw_dst=139.159.208.0/24”</span><b><span lang="EN-US"><o:p></o:p></span></b></p>
<p class="MsoPlainText"><span lang="EN-US" style="font-size:10.5pt">ovs-ofctl del-flows br0 "table=0,ip,nw_dst=139.159.208.0/24"<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US" style="font-size:10.5pt"><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US" style="font-size:10.5pt">Note: The megaflow of 130.119.101.60 will not be changed.<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US" style="font-size:10.5pt"><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US" style="font-size:10.5pt;color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoPlainText"><b><span lang="EN-US">Step3:<o:p></o:p></span></b></p>
<p class="MsoPlainText"><span lang="EN-US" style="font-size:10.5pt">Generate another ip stream into bond,<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US" style="font-size:10.5pt">SIP</span><span style="font-size:10.5pt;font-family:宋体">:</span><span lang="EN-US" style="font-size:10.5pt">1.2.1.2   DIP</span><span style="font-size:10.5pt;font-family:宋体">:</span><span lang="EN-US" style="font-size:10.5pt">168.119.102.61 
 Type:icmp request<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US" style="font-size:10.5pt;color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US" style="font-size:10.5pt">Now, We can find that this stream cannot generate the corresponding megaflow. It will keep upcalling, and the miss counter in “ovs-appctl dpctl/show” will keep increasing. If we open the dpif’s
 debug, can find continuous log of “File exist”.<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoPlainText"><b><span lang="EN-US" style="font-size:12.0pt">Root cause analysis:<span style="color:#1F497D"><o:p></o:p></span></span></b></p>
<p class="MsoPlainText"><b><span lang="EN-US" style="font-size:12.0pt">The<span style="color:red"> key
</span>to lookup cls in fast_path_processing(</span></b><b><span lang="EN-US" style="font-size:12.0pt;font-family:Wingdings">à</span></b><b><span lang="EN-US" style="font-size:12.0pt">dp_netdev_pmd_lookup_flow) is
<span style="color:red">different</span> from the one in flow_put_on_pmd(</span></b><b><span lang="EN-US" style="font-size:12.0pt;font-family:Wingdings">à</span></b><b><span lang="EN-US" style="font-size:12.0pt">dp_netdev_pmd_lookup_flow).<o:p></o:p></span></b></p>
<p class="MsoPlainText"><b><span lang="EN-US"><o:p> </o:p></span></b></p>
<p class="MsoPlainText"><b><span lang="EN-US" style="font-size:10.5pt;color:#1F497D"><o:p> </o:p></span></b></p>
<p class="MsoPlainText"><b><span lang="EN-US" style="font-size:12.0pt">Is there any suggestion to fix this bug? How about the following two modifications:<span style="color:#1F497D"><o:p></o:p></span></span></b></p>
<p class="MsoPlainText" style="margin-left:18.0pt;text-indent:-18.0pt;mso-list:l0 level1 lfo2">
<![if !supportLists]><span lang="EN-US" style="font-size:10.5pt"><span style="mso-list:Ignore">1.<span style="font:7.0pt "Times New Roman"">      
</span></span></span><![endif]><span lang="EN-US" style="font-size:10.5pt">Use the same key to lookup cls in handler thread<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">---<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">lib/dpif-netdev.c | 10 ++++++----<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">1 file changed, 6 insertions(+), 4 deletions(-)<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">index e456cc9..facb9f6 100644<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">--- a/lib/dpif-netdev.c<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">+++ b/lib/dpif-netdev.c<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">@@ -3524,10 +3524,12 @@ dpif_netdev_flow_put(struct dpif *dpif, const struct dpif_flow_put *put)<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">     }<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">     /* Must produce a netdev_flow_key for lookup.<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">-     * Use the same method as employed to create the key when adding<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">-     * the flow to the dplcs to make sure they match. */<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">-    netdev_flow_mask_init(&mask, &match);<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">-    netdev_flow_key_init_masked(&key, &match.flow, &mask);<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">+         * Must generate key by flow to guarantee that key is the same as the key in<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">+         * fast_path_processing(). <o:p>
</o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">+         * ps: key.hash will not be used in lookup. */<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">+    miniflow_map_init(&key.mf, &match->flow);<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">+    miniflow_init(&key.mf, &match->flow);<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">+    key.len = netdev_flow_key_size(miniflow_n_values(&key.mf));<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">     if (put->pmd_id == PMD_ID_NULL) {<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">         if (cmap_count(&dp->poll_threads) == 0) {<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">--<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US" style="font-size:10.5pt"><o:p> </o:p></span></p>
<p class="MsoPlainText" style="margin-left:18.0pt;text-indent:-18.0pt;mso-list:l0 level1 lfo2">
<![if !supportLists]><span lang="EN-US"><span style="mso-list:Ignore">2.<span style="font:7.0pt "Times New Roman"">      
</span></span></span><![endif]><span lang="EN-US">Modify the revalidate_ukey__ to delete the megaflow when mask changes<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US" style="font-size:10.5pt"><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US" style="font-size:10.5pt">From c7bda1680832a18946b8459f6b937d62b02d0280 Mon Sep 17 00:00:00 2001<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US" style="font-size:10.5pt">From: f00448292 <<a href="mailto:fuzhantao@huawei.com">fuzhantao@huawei.com</a>><o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US" style="font-size:10.5pt">Date: Mon, 20 Jul 2020 14:44:34 +0800<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US" style="font-size:10.5pt">Subject: [PATCH] NEW<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US" style="font-size:10.5pt"><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US" style="font-size:10.5pt">Signed-off-by: f00448292 <<a href="mailto:fuzhantao@huawei.com">fuzhantao@huawei.com</a>><o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US" style="font-size:10.5pt">---<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US" style="font-size:10.5pt">ofproto/ofproto-dpif-upcall.c | 2 +-<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US" style="font-size:10.5pt">1 file changed, 1 insertion(+), 1 deletion(-)<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US" style="font-size:10.5pt"><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US" style="font-size:10.5pt">diff --git a/ofproto/ofproto-dpif-upcall.c b/ofproto/ofproto-dpif-upcall.c<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US" style="font-size:10.5pt">index 8dfa05b..8a8c233 100644<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US" style="font-size:10.5pt">--- a/ofproto/ofproto-dpif-upcall.c<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US" style="font-size:10.5pt">+++ b/ofproto/ofproto-dpif-upcall.c<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US" style="font-size:10.5pt">@@ -2209,7 +2209,7 @@ revalidate_ukey__(struct udpif *udpif, const struct udpif_key *ukey,<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US" style="font-size:10.5pt">      * tells that the datapath flow is now too generic and must be narrowed<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US" style="font-size:10.5pt">      * down.  Note that we do not know if the datapath has ignored any of the<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US" style="font-size:10.5pt">      * wildcarded bits, so we may be overly conservative here. */<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US" style="font-size:10.5pt">-    if (flow_wildcards_has_extra(&dp_mask, ctx.wc)) {<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US" style="font-size:10.5pt">+    if (flow_wildcards_equal(&dp_mask, ctx.wc)) {<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US" style="font-size:10.5pt">         goto exit;<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US" style="font-size:10.5pt">     }<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US" style="font-size:10.5pt"><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US" style="font-size:10.5pt;color:#1F497D">--<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">Looking forward to your reply<span style="color:#1F497D">.</span><o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">Thanks.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
</div>
</body>
</html>