<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=utf-8">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<!--[if !mso]><style>v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style><![endif]--><style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p.msonormal0, li.msonormal0, div.msonormal0
        {mso-style-name:msonormal;
        mso-margin-top-alt:auto;
        margin-right:0in;
        mso-margin-bottom-alt:auto;
        margin-left:0in;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
span.gmail-m-1501418984181503871apple-converted-space
        {mso-style-name:gmail-m_-1501418984181503871apple-converted-space;}
span.EmailStyle19
        {mso-style-type:personal-reply;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></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="EN-US" link="blue" vlink="purple">
<div class="WordSection1">
<p class="MsoNormal">I guess it depends if the goal is to have a spin lock class, or a sharded lock table.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">If it’s a spin lock class, then someone needs to just make the class and get it into some header and/or static lib somewhere.  The specifics aren’t super important.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">If it’s a sharded lock table, then you need to figure out which dynamic library will provide it, and how that will interact with libc++ when it is used atop libsupc++ or built with GCC.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<div style="border:none;border-left:solid blue 1.5pt;padding:0in 0in 0in 4.0pt">
<div>
<div style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b>From:</b> jfbastien@apple.com <jfbastien@apple.com> <br>
<b>Sent:</b> Monday, May 20, 2019 3:59 PM<br>
<b>To:</b> Mitch Phillips <mitchphillips@outlook.com><br>
<b>Cc:</b> Ben Craig <ben.craig@ni.com>; Olivier Giroux <OGiroux@nvidia.com>; libcxx-dev@lists.llvm.org; kostyak@google.com<br>
<b>Subject:</b> [EXTERNAL] Re: [libcxx-dev] Is a compiler-rt shared spinlock implementation of any use to libcxx?<o:p></o:p></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">“Freestanding” is meant for a few things, of which: codebases that can’t have external dependencies, “bare metal” code or other embedded code. This sounds exactly like what you’re after.<o:p></o:p></p>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">The projects are all in the same repository. You can absolutely depend on having it: it’s in the same repo. You therefore don’t need to duplicate anything.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<p class="MsoNormal"><br>
<br>
<o:p></o:p></p>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<div>
<p class="MsoNormal">On May 20, 2019, at 1:55 PM, Mitch Phillips <<a href="mailto:mitchphillips@outlook.com">mitchphillips@outlook.com</a>> wrote:<o:p></o:p></p>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<div>
<p class="MsoNormal">I'm a little confused about how said aformentioned freestanding implementation would work. We (GWP-ASan + Scudo) can't depend on having libcxx (we actually
<a href="https://urldefense.proofpoint.com/v2/url?u=https-3A__reviews.llvm.org_D62048&d=DwMFaQ&c=I_0YwoKy7z5LMTVdyO6YCiE2uzI1jjZZuIPelcSjixA&r=y8mub81SfUi-UCZRX0Vl1g&m=0JDRKupnKG2FyAYi69CfJqswn5ys3q3D8nrjL8eqtQw&s=AgRXbJ1EHKQtYIn_0Ku-RB1v_LizN2Q4nVeZ595pZa8&e=">
explicitly disable</a> using of the c++ standard library for these libraries), and I don't know where we could have a shared implementation live (that could be used by both us and libcxx).<o:p></o:p></p>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">Would we have a spinlock implementation in libcxx and have that guarded by a macro definition before the include of <mutex>, and then keep a synchronised version in compiler-rt?<o:p></o:p></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<div>
<p class="MsoNormal">On Mon, May 20, 2019 at 10:10 AM Ben Craig <<a href="mailto:ben.craig@ni.com">ben.craig@ni.com</a>> wrote:<o:p></o:p></p>
</div>
<blockquote style="border:none;border-left:solid #CCCCCC 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-right:0in">
<div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">Wouldn’t all the Scudo and sanitizer things count as part of the toolchain implementation though?  Having pieces of the toolchain use an alternative name seems pretty reasonable
 to me.<o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">If the goal is to have a freestanding std::mutex that is implemented as a spin lock, well, that’s different.  I could be convinced that’s a good thing to have, but I’m still a bit
 uneasy about it.<o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
<div style="border:none;border-left:solid blue 1.5pt;padding:0in 0in 0in 4.0pt">
<div>
<div style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><b>From:</b>
<a href="mailto:jfbastien@apple.com" target="_blank">jfbastien@apple.com</a> <<a href="mailto:jfbastien@apple.com" target="_blank">jfbastien@apple.com</a>>
<br>
<b>Sent:</b> Monday, May 20, 2019 11:27 AM<br>
<b>To:</b> Ben Craig <<a href="mailto:ben.craig@ni.com" target="_blank">ben.craig@ni.com</a>><br>
<b>Cc:</b> Olivier Giroux <<a href="mailto:OGiroux@nvidia.com" target="_blank">OGiroux@nvidia.com</a>>; Mitch Phillips <<a href="mailto:mitchphillips@outlook.com" target="_blank">mitchphillips@outlook.com</a>>;
<a href="mailto:libcxx-dev@lists.llvm.org" target="_blank">libcxx-dev@lists.llvm.org</a>;
<a href="mailto:kostyak@google.com" target="_blank">kostyak@google.com</a><br>
<b>Subject:</b> [EXTERNAL] Re: [libcxx-dev] Is a compiler-rt shared spinlock implementation of any use to libcxx?<o:p></o:p></p>
</div>
</div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">I think what developers *use* should definitely be named std::mutex. We indeed want to consider how the ABI is exposed, that’s a good question for libc++ maintainers.<o:p></o:p></p>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;margin-bottom:12.0pt"><o:p> </o:p></p>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">On May 20, 2019, at 6:23 AM, Ben Craig <<a href="mailto:ben.craig@ni.com" target="_blank">ben.craig@ni.com</a>> wrote:<o:p></o:p></p>
</div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
<div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">I think it’s fine to give such a class the same interface as std::mutex, just please don’t actually name it std::mutex.  I would be pretty concerned about ABI compatibility in that
 situation, as well as subtle interactions with things like condition_variable::wait.  cxxabi::__mutex, or almost any other identifier would be fine.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
</div>
<div style="border:none;border-left:solid blue 1.5pt;padding:0in 0in 0in 4.0pt">
<div>
<div style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in">
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><b>From:</b><span class="gmail-m-1501418984181503871apple-converted-space"> </span>libcxx-dev <<a href="mailto:libcxx-dev-bounces@lists.llvm.org" target="_blank">libcxx-dev-bounces@lists.llvm.org</a>><span class="gmail-m-1501418984181503871apple-converted-space"> </span><b>On
 Behalf Of<span class="gmail-m-1501418984181503871apple-converted-space"> </span></b>Olivier Giroux via libcxx-dev<br>
<b>Sent:</b><span class="gmail-m-1501418984181503871apple-converted-space"> </span>Friday, May 17, 2019 7:55 PM<br>
<b>To:</b><span class="gmail-m-1501418984181503871apple-converted-space"> </span>JF Bastien <<a href="mailto:jfbastien@apple.com" target="_blank">jfbastien@apple.com</a>>; Mitch Phillips <<a href="mailto:mitchphillips@outlook.com" target="_blank">mitchphillips@outlook.com</a>><br>
<b>Cc:</b><span class="gmail-m-1501418984181503871apple-converted-space"> </span><a href="mailto:kostyak@google.com" target="_blank">kostyak@google.com</a>;
<a href="mailto:libcxx-dev@lists.llvm.org" target="_blank">libcxx-dev@lists.llvm.org</a><br>
<b>Subject:</b><span class="gmail-m-1501418984181503871apple-converted-space"> </span>[EXTERNAL] Re: [libcxx-dev] Is a compiler-rt shared spinlock implementation of any use to libcxx?<o:p></o:p></p>
</div>
</div>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">That’s what makes the most sense to me, include <mutex> with a macro that freestanding would also use. Inside of that, I would have an implementation of standard mutex backed by
 atomics and the atomic_wait/atomic_notify_* functions, themselves configured with a macro to not rely on the OS in freestanding implementations.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">Olivier<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
</div>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in">
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><b><span style="font-size:12.0pt">From:<span class="gmail-m-1501418984181503871apple-converted-space"> </span></span></b><span style="font-size:12.0pt">libcxx-dev <<a href="mailto:libcxx-dev-bounces@lists.llvm.org" target="_blank"><span style="color:purple">libcxx-dev-bounces@lists.llvm.org</span></a>>
 on behalf of JF Bastien via libcxx-dev <<a href="mailto:libcxx-dev@lists.llvm.org" target="_blank"><span style="color:purple">libcxx-dev@lists.llvm.org</span></a>><br>
<b>Reply-To:<span class="gmail-m-1501418984181503871apple-converted-space"> </span></b>JF Bastien <<a href="mailto:jfbastien@apple.com" target="_blank"><span style="color:purple">jfbastien@apple.com</span></a>><br>
<b>Date:<span class="gmail-m-1501418984181503871apple-converted-space"> </span></b>Friday, May 17, 2019 at 4:40 PM<br>
<b>To:<span class="gmail-m-1501418984181503871apple-converted-space"> </span></b>Mitch Phillips <<a href="mailto:mitchphillips@outlook.com" target="_blank"><span style="color:purple">mitchphillips@outlook.com</span></a>><br>
<b>Cc:<span class="gmail-m-1501418984181503871apple-converted-space"> </span></b>"<a href="mailto:kostyak@google.com" target="_blank"><span style="color:purple">kostyak@google.com</span></a>" <<a href="mailto:kostyak@google.com" target="_blank"><span style="color:purple">kostyak@google.com</span></a>>,
 "<a href="mailto:libcxx-dev@lists.llvm.org" target="_blank"><span style="color:purple">libcxx-dev@lists.llvm.org</span></a>" <<a href="mailto:libcxx-dev@lists.llvm.org" target="_blank"><span style="color:purple">libcxx-dev@lists.llvm.org</span></a>><br>
<b>Subject:<span class="gmail-m-1501418984181503871apple-converted-space"> </span></b>Re: [libcxx-dev] Is a compiler-rt shared spinlock implementation of any use to libcxx?</span><o:p></o:p></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
</div>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">I think it makes sense for libc++ to have a version of mutex which has the same API as the standard one, but for “freestanding” platforms such as yours. A flavor which mostly just
 spins and yields as in your review.<o:p></o:p></p>
</div>
<div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">I’m not sure how to best turn it on, though. Should it be controlled by a macro, and otherwise it just looks like you’re using <mutex>?<o:p></o:p></p>
</div>
<div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;margin-bottom:12.0pt"> <o:p></o:p></p>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">On May 17, 2019, at 1:49 PM, Mitch Phillips via libcxx-dev <<a href="mailto:libcxx-dev@lists.llvm.org" target="_blank"><span style="color:purple">libcxx-dev@lists.llvm.org</span></a>>
 wrote:<o:p></o:p></p>
</div>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
</div>
<div>
<div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">Hi all,<span class="gmail-m-1501418984181503871apple-converted-space"> </span><o:p></o:p></p>
</div>
<div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">In a recent<span class="gmail-m-1501418984181503871apple-converted-space"> </span><a href="https://urldefense.proofpoint.com/v2/url?u=https-3A__reviews.llvm.org_D61923-231503272&d=DwMGaQ&c=I_0YwoKy7z5LMTVdyO6YCiE2uzI1jjZZuIPelcSjixA&r=y8mub81SfUi-UCZRX0Vl1g&m=yw9dJtPZSvMNi00nrRSUlnN4NTQzKvXzHbd5w8ShH8A&s=uW10gtroz30NxGIUU3BvNH5efGnzv2tds3P49eY5ri4&e=" target="_blank"><span style="color:purple">discussion</span></a><span class="gmail-m-1501418984181503871apple-converted-space"> </span>from
 the reviews of<span class="gmail-m-1501418984181503871apple-converted-space"> </span><a href="https://urldefense.proofpoint.com/v2/url?u=https-3A__reviews.llvm.org_D60593&d=DwMGaQ&c=I_0YwoKy7z5LMTVdyO6YCiE2uzI1jjZZuIPelcSjixA&r=y8mub81SfUi-UCZRX0Vl1g&m=yw9dJtPZSvMNi00nrRSUlnN4NTQzKvXzHbd5w8ShH8A&s=rKVj5vHVGEsEZRjMkiN2X6e0bAfdTY7iVW0laX2AO8o&e=" target="_blank"><span style="color:purple">GWP-ASan</span></a>,
 it was mentioned that I should probably consult with cxx-dev to see whether they'd be interested in a common spinlock implementation.<o:p></o:p></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">The problem is:<o:p></o:p></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> - Scudo hardened allocator (compiler-rt/lib/scudo) requires its own spinlock as it can't use the C++ standard library due to Fuchsia requirements.<o:p></o:p></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> - GWP-ASan (as it's packaged into Scudo) also requires a spinlock.<o:p></o:p></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> - Compiler-rt sanitizer_common also can't use c++ stdlib, and has its own spinlock. We can't reuse the sanitizer_common spinlock for Scudo/GWP-ASan as it's currently tightly coupled
 into sanitizer_common, and Scudo+Fuchsia can't afford the code size overhead of pulling the entire sanitizer_common library.<o:p></o:p></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">The plan was to basically write a small standalone spinlock implementation that can be used by all three of these requirements. Would libcxx benefit by us making this an llvm-common
 spinlock rather than compiler-rt-common? If so, are there any requirements that we need to be aware of?<o:p></o:p></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">Cheers,<o:p></o:p></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">Mitch.<o:p></o:p></p>
</div>
</div>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">_______________________________________________<br>
libcxx-dev mailing list<br>
<a href="mailto:libcxx-dev@lists.llvm.org" target="_blank"><span style="color:purple">libcxx-dev@lists.llvm.org</span></a><br>
<a href="https://urldefense.proofpoint.com/v2/url?u=https-3A__lists.llvm.org_cgi-2Dbin_mailman_listinfo_libcxx-2Ddev&d=DwQGaQ&c=I_0YwoKy7z5LMTVdyO6YCiE2uzI1jjZZuIPelcSjixA&r=y8mub81SfUi-UCZRX0Vl1g&m=yw9dJtPZSvMNi00nrRSUlnN4NTQzKvXzHbd5w8ShH8A&s=SLhw06SYT_9fwfHOjm_nzQZ0LuPvmMe_b2gjd-VEFcc&e=" target="_blank"><span style="color:purple">https://lists.llvm.org/cgi-bin/mailman/listinfo/libcxx-dev</span></a><o:p></o:p></p>
</div>
</div>
</blockquote>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
</div>
</div>
</div>
<div>
<div class="MsoNormal" align="center" style="text-align:center">
<hr size="2" width="100%" align="center">
</div>
</div>
<div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">This email message is for the sole use of the intended recipient(s) and may contain confidential information.  Any unauthorized review, use, disclosure or distribution is prohibited. 
 If you are not the intended recipient, please contact the sender by reply email and destroy all copies of the original message.<span class="gmail-m-1501418984181503871apple-converted-space"> </span><o:p></o:p></p>
</div>
</div>
</div>
</div>
</blockquote>
</div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
</div>
</div>
</div>
</div>
</blockquote>
</div>
</div>
</blockquote>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
</div>
</div>
</body>
</html>