<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>51855</bug_id>
          
          <creation_ts>2011-01-03 17:20:45 -0800</creation_ts>
          <short_desc>Extract ThreadFunctionInvocation into separate file and share between Apple Windows and Android</short_desc>
          <delta_ts>2011-01-04 10:56:48 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Template Framework</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Windows XP</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Daniel Bates">dbates</reporter>
          <assigned_to name="Daniel Bates">dbates</assigned_to>
          <cc>aroben</cc>
    
    <cc>benm</cc>
    
    <cc>buildbot</cc>
    
    <cc>eric</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>328845</commentid>
    <comment_count>0</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2011-01-03 17:20:45 -0800</bug_when>
    <thetext>Both the Apple Windows and Android ports implement a similar adapter structure, called ThreadFunctionInvocation and ThreadData respectively, as part of their thread creation process. We should share such an adapter structure and remove duplicate code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>328850</commentid>
    <comment_count>1</comment_count>
      <attachid>77855</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2011-01-03 17:40:16 -0800</bug_when>
    <thetext>Created attachment 77855
Patch

This patch also modifies createThreadInternal() in wtf/ThreadingWin.cpp so that we deallocate the instantiated ThreadFunctionInvocation if the call to CreateThread() fails.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>328867</commentid>
    <comment_count>2</comment_count>
      <attachid>77860</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2011-01-03 18:11:39 -0800</bug_when>
    <thetext>Created attachment 77860
Patch

I thought it would be better to extract the fix for the memory leak into a separate bug, bug #51860.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>328868</commentid>
    <comment_count>3</comment_count>
      <attachid>77861</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2011-01-03 18:15:46 -0800</bug_when>
    <thetext>Created attachment 77861
Patch

Substitute typedef for ThreadFunction for #include &quot;Threading.h&quot; in ThreadFunctionInvocation.h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>328975</commentid>
    <comment_count>4</comment_count>
      <attachid>77861</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2011-01-04 06:26:50 -0800</bug_when>
    <thetext>Comment on attachment 77861
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=77861&amp;action=review

&gt; Source/JavaScriptCore/wtf/ThreadingPthreads.cpp:-155
&gt; -    ThreadData* data = static_cast&lt;ThreadData*&gt;(arg);
&gt; +    ThreadFunctionInvocation invocation = *static_cast&lt;ThreadFunctionInvocation*&gt;(arg);
&gt; +    delete static_cast&lt;ThreadFunctionInvocation*&gt;(arg);
&gt; +
&gt;      JavaVM* vm = JSC::Bindings::getJavaVM();
&gt;      JNIEnv* env;
&gt;      void* ret = 0;
&gt;      if (vm-&gt;AttachCurrentThread(&amp;env, 0) == JNI_OK) {
&gt; -        ret = data-&gt;entryPoint(data-&gt;arg);
&gt; +        ret = invocation.function(invocation.data);
&gt;          vm-&gt;DetachCurrentThread();
&gt;      }
&gt; -    delete data;

This is a little bizarre. How about just adopting arg into an OwnPtr&lt;ThreadFunctionInvocation&gt; and using that to invoke the function?

&gt; Source/JavaScriptCore/wtf/ThreadingPthreads.cpp:162
&gt; +    ThreadFunctionInvocation* invocation = new ThreadFunctionInvocation(entryPoint, data); // Deallocated in runThreadWithRegistration() if a thread is created.
&gt; +
&gt; +    if (pthread_create(&amp;threadHandle, 0, runThreadWithRegistration, invocation)) {

It would be nicer to use adoptPtr/leakPtr here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>329033</commentid>
    <comment_count>5</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2011-01-04 10:03:12 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 77861 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=77861&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/wtf/ThreadingPthreads.cpp:-155
&gt; &gt; -    ThreadData* data = static_cast&lt;ThreadData*&gt;(arg);
&gt; &gt; +    ThreadFunctionInvocation invocation = *static_cast&lt;ThreadFunctionInvocation*&gt;(arg);
&gt; &gt; +    delete static_cast&lt;ThreadFunctionInvocation*&gt;(arg);
&gt; &gt; +
&gt; &gt;      JavaVM* vm = JSC::Bindings::getJavaVM();
&gt; &gt;      JNIEnv* env;
&gt; &gt;      void* ret = 0;
&gt; &gt;      if (vm-&gt;AttachCurrentThread(&amp;env, 0) == JNI_OK) {
&gt; &gt; -        ret = data-&gt;entryPoint(data-&gt;arg);
&gt; &gt; +        ret = invocation.function(invocation.data);
&gt; &gt;          vm-&gt;DetachCurrentThread();
&gt; &gt;      }
&gt; &gt; -    delete data;
&gt; 
&gt; This is a little bizarre. How about just adopting arg into an OwnPtr&lt;ThreadFunctionInvocation&gt; and using that to invoke the function?

Will change.

&gt; 
&gt; &gt; Source/JavaScriptCore/wtf/ThreadingPthreads.cpp:162
&gt; &gt; +    ThreadFunctionInvocation* invocation = new ThreadFunctionInvocation(entryPoint, data); // Deallocated in runThreadWithRegistration() if a thread is created.
&gt; &gt; +
&gt; &gt; +    if (pthread_create(&amp;threadHandle, 0, runThreadWithRegistration, invocation)) {
&gt; 
&gt; It would be nicer to use adoptPtr/leakPtr here.

Is it safe to use adoptPtr/leakPtr for &lt;https://bugs.webkit.org/show_bug.cgi?id=51855&gt;. From my understanding, pthread_create() does not take ownership of the parameter arg. Assume we use adoptPtr/leakPtr and suppose pthread_create() returns an error (say EAGAIN - system lacked the necessary resources to create another thread). Then we will not delete the instance of ThreadFunctionInvocation because OwnPtr::leakPtr() sets OwnPtr::m_ptr to 0 and hence ~OwnPtr() will call delete(0).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>329041</commentid>
    <comment_count>6</comment_count>
      <attachid>77861</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2011-01-04 10:24:39 -0800</bug_when>
    <thetext>Comment on attachment 77861
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=77861&amp;action=review

&gt;&gt;&gt; Source/JavaScriptCore/wtf/ThreadingPthreads.cpp:162
&gt;&gt;&gt; +    if (pthread_create(&amp;threadHandle, 0, runThreadWithRegistration, invocation)) {
&gt;&gt; 
&gt;&gt; It would be nicer to use adoptPtr/leakPtr here.
&gt; 
&gt; Is it safe to use adoptPtr/leakPtr for &lt;https://bugs.webkit.org/show_bug.cgi?id=51855&gt;. From my understanding, pthread_create() does not take ownership of the parameter arg. Assume we use adoptPtr/leakPtr and suppose pthread_create() returns an error (say EAGAIN - system lacked the necessary resources to create another thread). Then we will not delete the instance of ThreadFunctionInvocation because OwnPtr::leakPtr() sets OwnPtr::m_ptr to 0 and hence ~OwnPtr() will call delete(0).

You&apos;d have to do something like:

OwnPtr&lt;&gt; invocation = adoptPtr(…);
if (pthread_create(…, invocation.get())
    return 0;
// The thread will take ownership of invocation.
invocation.leakPtr();

Maybe that&apos;s not much better than what you have now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>329057</commentid>
    <comment_count>7</comment_count>
      <attachid>77900</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2011-01-04 10:37:57 -0800</bug_when>
    <thetext>Created attachment 77900
Patch

Updated patch based on Adam Roben&apos;s suggestions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>329067</commentid>
    <comment_count>8</comment_count>
      <attachid>77900</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2011-01-04 10:46:20 -0800</bug_when>
    <thetext>Comment on attachment 77900
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=77900&amp;action=review

&gt; Source/JavaScriptCore/wtf/ThreadingPthreads.cpp:161
&gt; +    if (pthread_create(&amp;threadHandle, 0, runThreadWithRegistration, invocation)) {

This shouldn&apos;t compile. If it does, we should find out why. You should be passing invocation.get().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>329070</commentid>
    <comment_count>9</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2011-01-04 10:48:08 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 77900 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=77900&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/wtf/ThreadingPthreads.cpp:161
&gt; &gt; +    if (pthread_create(&amp;threadHandle, 0, runThreadWithRegistration, invocation)) {
&gt; 
&gt; This shouldn&apos;t compile. If it does, we should find out why. You should be passing invocation.get().

Right. Will fix before I land.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>329078</commentid>
    <comment_count>10</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2011-01-04 10:52:10 -0800</bug_when>
    <thetext>Attachment 77900 did not build on win:
Build output: http://queues.webkit.org/results/7346026</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>329084</commentid>
    <comment_count>11</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2011-01-04 10:56:48 -0800</bug_when>
    <thetext>Committed r74975: &lt;http://trac.webkit.org/changeset/74975&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77855</attachid>
            <date>2011-01-03 17:40:16 -0800</date>
            <delta_ts>2011-01-03 18:11:39 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>Bug51855.patch</filename>
            <type>text/plain</type>
            <size>8197</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gNzQ5NDkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjUgQEAK
KzIwMTEtMDEtMDMgIERhbmllbCBCYXRlcyAgPGRiYXRlc0ByaW0uY29tPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEV4dHJhY3QgVGhyZWFkRnVuY3Rp
b25JbnZvY2F0aW9uIGludG8gc2VwYXJhdGUgZmlsZSBhbmQgc2hhcmUgYmV0d2VlbiBBcHBsZSBX
aW5kb3dzIGFuZCBBbmRyb2lkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD01MTg1NQorCisgICAgICAgIEJvdGggdGhlIEFwcGxlIFdpbmRvd3MgYW5kIEFu
ZHJvaWQgcG9ydHMgaW1wbGVtZW50IGEgc2ltaWxhciBhZGFwdGVyIHN0cnVjdHVyZSwKKyAgICAg
ICAgY2FsbGVkIFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbiBhbmQgVGhyZWFkRGF0YSByZXNwZWN0
aXZlbHksIGFzIHBhcnQgb2YKKyAgICAgICAgdGhlaXIgdGhyZWFkIGNyZWF0aW9uIHByb2Nlc3Mu
IEluc3RlYWQsIHdlIHNob3VsZCBzaGFyZSBzdWNoIGFuIGFkYXB0ZXIKKyAgICAgICAgc3RydWN0
dXJlIGFuZCByZW1vdmUgZHVwbGljYXRlIGNvZGUuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29y
ZS5neXBpOiBBZGRlZCBoZWFkZXIgd3RmL1RocmVhZEZ1bmN0aW9uSW52b2NhdGlvbi5oLgorICAg
ICAgICAqIHd0Zi9UaHJlYWRGdW5jdGlvbkludm9jYXRpb24uaDogQWRkZWQuCisgICAgICAgIChX
VEY6OlRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbjo6VGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uKToK
KyAgICAgICAgKiB3dGYvVGhyZWFkaW5nUHRocmVhZHMuY3BwOiBSZW1vdmVkIEFuZHJvaWQtc3Bl
Y2lmaWMgc3RydWN0dXJlIFRocmVhZERhdGE7IEluc3RlYWQsIHVzZSBUaHJlYWRGdW5jdGlvbklu
dm9jYXRpb24uCisgICAgICAgIChXVEY6OnJ1blRocmVhZFdpdGhSZWdpc3RyYXRpb24pOgorICAg
ICAgICAoV1RGOjpjcmVhdGVUaHJlYWRJbnRlcm5hbCk6IAorICAgICAgICAqIHd0Zi9UaHJlYWRp
bmdXaW4uY3BwOiBNb3ZlZCBzdHJ1Y3R1cmUgVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uIHRvIGl0
cyBvd24gZmlsZSBzbyB0aGF0CisgICAgICAgIGl0IGNhbiBiZSBzaGFyZWQgd2l0aCB0aGUgQW5k
cm9pZCBpbXBsZW1lbnRhdGlvbiBvZiBjcmVhdGVUaHJlYWRJbnRlcm5hbCgpLgorICAgICAgICAo
V1RGOjpjcmVhdGVUaHJlYWRJbnRlcm5hbCk6IERlYWxsb2NhdGUgaW5zdGFuY2Ugb2YgVGhyZWFk
RnVuY3Rpb25JbnZvY2F0aW9uIGlmIENyZWF0ZVRocmVhZCgpIGZhaWxzLgorCiAyMDExLTAxLTAz
ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBC
cmFkeSBFaWRzb24uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
Z3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
Z3lwaQkocmV2aXNpb24gNzQ4OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtNDQwLDYgKzQ0MCw3IEBACiAgICAgICAgICAg
ICAnd3RmL1RDU3BpbkxvY2suaCcsCiAgICAgICAgICAgICAnd3RmL1RDU3lzdGVtQWxsb2MuY3Bw
JywKICAgICAgICAgICAgICd3dGYvVENTeXN0ZW1BbGxvYy5oJywKKyAgICAgICAgICAgICd3dGYv
VGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uLmgnLAogICAgICAgICAgICAgJ3d0Zi9UaHJlYWRJZGVu
dGlmaWVyRGF0YVB0aHJlYWRzLmNwcCcsCiAgICAgICAgICAgICAnd3RmL1RocmVhZElkZW50aWZp
ZXJEYXRhUHRocmVhZHMuaCcsCiAgICAgICAgICAgICAnd3RmL1RocmVhZGluZy5jcHAnLApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9UaHJlYWRGdW5jdGlvbkludm9jYXRpb24uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1RocmVhZEZ1bmN0aW9uSW52
b2NhdGlvbi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9UaHJl
YWRGdW5jdGlvbkludm9jYXRpb24uaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0OSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxl
IENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4gCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQK
KyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBUaHJlYWRGdW5jdGlvbkludm9jYXRpb25faAorI2RlZmluZSBUaHJlYWRG
dW5jdGlvbkludm9jYXRpb25faAorCisjaW5jbHVkZSAiVGhyZWFkaW5nLmgiCisKK25hbWVzcGFj
ZSBXVEYgeworCitzdHJ1Y3QgVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uIHsKKyAgICBUaHJlYWRG
dW5jdGlvbkludm9jYXRpb24oVGhyZWFkRnVuY3Rpb24gZnVuY3Rpb24sIHZvaWQqIGRhdGEpCisg
ICAgICAgIDogZnVuY3Rpb24oZnVuY3Rpb24pCisgICAgICAgICwgZGF0YShkYXRhKQorICAgIHsK
KyAgICB9CisKKyAgICBUaHJlYWRGdW5jdGlvbiBmdW5jdGlvbjsKKyAgICB2b2lkKiBkYXRhOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBUaHJlYWRGdW5jdGlvbkludm9j
YXRpb25faApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9UaHJlYWRpbmdQdGhyZWFk
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9UaHJlYWRpbmdQ
dGhyZWFkcy5jcHAJKHJldmlzaW9uIDc0ODk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0
Zi9UaHJlYWRpbmdQdGhyZWFkcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDcgQEAK
IAogI2lmIE9TKEFORFJPSUQpCiAjaW5jbHVkZSAiSk5JVXRpbGl0eS5oIgorI2luY2x1ZGUgIlRo
cmVhZEZ1bmN0aW9uSW52b2NhdGlvbi5oIgogI2VuZGlmCiAKIG5hbWVzcGFjZSBXVEYgewpAQCAt
MTM2LDM2ICsxMzcsMzEgQEAgdm9pZCBjbGVhclB0aHJlYWRIYW5kbGVGb3JJZGVudGlmaWVyKFRo
cgogfQogCiAjaWYgT1MoQU5EUk9JRCkKLS8vIE9uIHRoZSBBbmRyb2lkIHBsYXRmb3JtLCB0aHJl
YWRzIG11c3QgYmUgcmVnaXN0ZXJlZCB3aXRoIHRoZSBWTSBiZWZvcmUgdGhleSBydW4uCi1zdHJ1
Y3QgVGhyZWFkRGF0YSB7Ci0gICAgVGhyZWFkRnVuY3Rpb24gZW50cnlQb2ludDsKLSAgICB2b2lk
KiBhcmc7Ci19OwotCiBzdGF0aWMgdm9pZCogcnVuVGhyZWFkV2l0aFJlZ2lzdHJhdGlvbih2b2lk
KiBhcmcpCiB7Ci0gICAgVGhyZWFkRGF0YSogZGF0YSA9IHN0YXRpY19jYXN0PFRocmVhZERhdGEq
PihhcmcpOworICAgIFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbiBpbnZvY2F0aW9uID0gKnN0YXRp
Y19jYXN0PFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbio+KGFyZyk7CisgICAgZGVsZXRlIHN0YXRp
Y19jYXN0PFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbio+KGFyZyk7CisKICAgICBKYXZhVk0qIHZt
ID0gSlNDOjpCaW5kaW5nczo6Z2V0SmF2YVZNKCk7CiAgICAgSk5JRW52KiBlbnY7CiAgICAgdm9p
ZCogcmV0ID0gMDsKICAgICBpZiAodm0tPkF0dGFjaEN1cnJlbnRUaHJlYWQoJmVudiwgMCkgPT0g
Sk5JX09LKSB7Ci0gICAgICAgIHJldCA9IGRhdGEtPmVudHJ5UG9pbnQoZGF0YS0+YXJnKTsKKyAg
ICAgICAgcmV0ID0gaW52b2NhdGlvbi5mdW5jdGlvbihpbnZvY2F0aW9uLmRhdGEpOwogICAgICAg
ICB2bS0+RGV0YWNoQ3VycmVudFRocmVhZCgpOwogICAgIH0KLSAgICBkZWxldGUgZGF0YTsKICAg
ICByZXR1cm4gcmV0OwogfQogCiBUaHJlYWRJZGVudGlmaWVyIGNyZWF0ZVRocmVhZEludGVybmFs
KFRocmVhZEZ1bmN0aW9uIGVudHJ5UG9pbnQsIHZvaWQqIGRhdGEsIGNvbnN0IGNoYXIqKQogewog
ICAgIHB0aHJlYWRfdCB0aHJlYWRIYW5kbGU7Ci0gICAgVGhyZWFkRGF0YSogdGhyZWFkRGF0YSA9
IG5ldyBUaHJlYWREYXRhKCk7Ci0gICAgdGhyZWFkRGF0YS0+ZW50cnlQb2ludCA9IGVudHJ5UG9p
bnQ7Ci0gICAgdGhyZWFkRGF0YS0+YXJnID0gZGF0YTsKIAotICAgIGlmIChwdGhyZWFkX2NyZWF0
ZSgmdGhyZWFkSGFuZGxlLCAwLCBydW5UaHJlYWRXaXRoUmVnaXN0cmF0aW9uLCBzdGF0aWNfY2Fz
dDx2b2lkKj4odGhyZWFkRGF0YSkpKSB7CisgICAgLy8gT24gdGhlIEFuZHJvaWQgcGxhdGZvcm0s
IHRocmVhZHMgbXVzdCBiZSByZWdpc3RlcmVkIHdpdGggdGhlIFZNIGJlZm9yZSB0aGV5IHJ1bi4K
KyAgICBUaHJlYWRGdW5jdGlvbkludm9jYXRpb24qIGludm9jYXRpb24gPSBuZXcgVGhyZWFkRnVu
Y3Rpb25JbnZvY2F0aW9uKGVudHJ5UG9pbnQsIGRhdGEpOyAvLyBNYXkgYmUgZGVhbGxvY2F0ZWQg
aW4gcnVuVGhyZWFkV2l0aFJlZ2lzdHJhdGlvbigpLgorCisgICAgaWYgKHB0aHJlYWRfY3JlYXRl
KCZ0aHJlYWRIYW5kbGUsIDAsIHJ1blRocmVhZFdpdGhSZWdpc3RyYXRpb24sIGludm9jYXRpb24p
KSB7CiAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSBwdGhyZWFkIGF0IGVudHJ5
IHBvaW50ICVwIHdpdGggZGF0YSAlcCIsIGVudHJ5UG9pbnQsIGRhdGEpOwotICAgICAgICBkZWxl
dGUgdGhyZWFkRGF0YTsKKyAgICAgICAgZGVsZXRlIGludm9jYXRpb247CiAgICAgICAgIHJldHVy
biAwOwogICAgIH0KICAgICByZXR1cm4gZXN0YWJsaXNoSWRlbnRpZmllckZvclB0aHJlYWRIYW5k
bGUodGhyZWFkSGFuZGxlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvVGhyZWFk
aW5nV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1RocmVh
ZGluZ1dpbi5jcHAJKHJldmlzaW9uIDc0ODk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0
Zi9UaHJlYWRpbmdXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw2ICs4Nyw3IEBACiAjaW5j
bHVkZSAiVGhyZWFkaW5nLmgiCiAKICNpbmNsdWRlICJNYWluVGhyZWFkLmgiCisjaW5jbHVkZSAi
VGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uLmgiCiAjaWYgIVVTRShQVEhSRUFEUykgJiYgT1MoV0lO
RE9XUykKICNpbmNsdWRlICJUaHJlYWRTcGVjaWZpYy5oIgogI2VuZGlmCkBAIC0xODcsMTMgKzE4
OCw2IEBAIHN0YXRpYyB2b2lkIGNsZWFyVGhyZWFkSGFuZGxlRm9ySWRlbnRpZmkKICAgICB0aHJl
YWRNYXAoKS5yZW1vdmUoaWQpOwogfQogCi1zdHJ1Y3QgVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9u
IHsKLSAgICBUaHJlYWRGdW5jdGlvbkludm9jYXRpb24oVGhyZWFkRnVuY3Rpb24gZnVuY3Rpb24s
IHZvaWQqIGRhdGEpIDogZnVuY3Rpb24oZnVuY3Rpb24pLCBkYXRhKGRhdGEpIHt9Ci0KLSAgICBU
aHJlYWRGdW5jdGlvbiBmdW5jdGlvbjsKLSAgICB2b2lkKiBkYXRhOwotfTsKLQogc3RhdGljIHVu
c2lnbmVkIF9fc3RkY2FsbCB3dGZUaHJlYWRFbnRyeVBvaW50KHZvaWQqIHBhcmFtKQogewogICAg
IFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbiBpbnZvY2F0aW9uID0gKnN0YXRpY19jYXN0PFRocmVh
ZEZ1bmN0aW9uSW52b2NhdGlvbio+KHBhcmFtKTsKQEAgLTIxMyw3ICsyMDcsNyBAQCBUaHJlYWRJ
ZGVudGlmaWVyIGNyZWF0ZVRocmVhZEludGVybmFsKFRoCiB7CiAgICAgdW5zaWduZWQgdGhyZWFk
SWRlbnRpZmllciA9IDA7CiAgICAgVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJRCA9IDA7Ci0gICAg
VGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uKiBpbnZvY2F0aW9uID0gbmV3IFRocmVhZEZ1bmN0aW9u
SW52b2NhdGlvbihlbnRyeVBvaW50LCBkYXRhKTsKKyAgICBUaHJlYWRGdW5jdGlvbkludm9jYXRp
b24qIGludm9jYXRpb24gPSBuZXcgVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uKGVudHJ5UG9pbnQs
IGRhdGEpOyAvLyBNYXkgYmUgZGVhbGxvY2F0ZWQgaW4gd3RmVGhyZWFkRW50cnlQb2ludCgpLgog
I2lmIE9TKFdJTkNFKQogICAgIC8vIFRoaXMgaXMgc2FmZSBvbiBXSU5DRSwgc2luY2UgQ1JUIGlz
IGluIHRoZSBjb3JlIGFuZCBpbm5hdGVseSBtdWx0aXRocmVhZGVkLgogICAgIC8vIE9uIGRlc2t0
b3AgV2luZG93cywgbmVlZCB0byB1c2UgX2JlZ2ludGhyZWFkZXggKG5vdCBhdmFpbGFibGUgb24g
V2luQ0UpIGlmIHVzaW5nIGFueSBDUlQgZnVuY3Rpb25zCkBAIC0yMjksNiArMjIzLDcgQEAgVGhy
ZWFkSWRlbnRpZmllciBjcmVhdGVUaHJlYWRJbnRlcm5hbChUaAogI2Vsc2UKICAgICAgICAgTE9H
X0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIHRocmVhZCBhdCBlbnRyeSBwb2ludCAlcCB3aXRoIGRh
dGEgJXA6ICVsZCIsIGVudHJ5UG9pbnQsIGRhdGEsIGVycm5vKTsKICNlbmRpZgorICAgICAgICBk
ZWxldGUgaW52b2NhdGlvbjsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77860</attachid>
            <date>2011-01-03 18:11:39 -0800</date>
            <delta_ts>2011-01-03 18:15:46 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>Bug51855_1.patch</filename>
            <type>text/plain</type>
            <size>7288</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gNzQ5NTMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjQgQEAK
KzIwMTEtMDEtMDMgIERhbmllbCBCYXRlcyAgPGRiYXRlc0ByaW0uY29tPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEV4dHJhY3QgVGhyZWFkRnVuY3Rp
b25JbnZvY2F0aW9uIGludG8gc2VwYXJhdGUgZmlsZSBhbmQgc2hhcmUgYmV0d2VlbiBBcHBsZSBX
aW5kb3dzIGFuZCBBbmRyb2lkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD01MTg1NQorCisgICAgICAgIEJvdGggdGhlIEFwcGxlIFdpbmRvd3MgYW5kIEFu
ZHJvaWQgcG9ydHMgaW1wbGVtZW50IGEgc2ltaWxhciBhZGFwdGVyIHN0cnVjdHVyZSwKKyAgICAg
ICAgY2FsbGVkIFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbiBhbmQgVGhyZWFkRGF0YSByZXNwZWN0
aXZlbHksIGFzIHBhcnQgb2YKKyAgICAgICAgdGhlaXIgdGhyZWFkIGNyZWF0aW9uIHByb2Nlc3Mu
IEluc3RlYWQsIHdlIHNob3VsZCBzaGFyZSBzdWNoIGFuIGFkYXB0ZXIKKyAgICAgICAgc3RydWN0
dXJlIGFuZCByZW1vdmUgZHVwbGljYXRlIGNvZGUuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29y
ZS5neXBpOiBBZGRlZCBoZWFkZXIgd3RmL1RocmVhZEZ1bmN0aW9uSW52b2NhdGlvbi5oLgorICAg
ICAgICAqIHd0Zi9UaHJlYWRGdW5jdGlvbkludm9jYXRpb24uaDogQWRkZWQuCisgICAgICAgIChX
VEY6OlRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbjo6VGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uKToK
KyAgICAgICAgKiB3dGYvVGhyZWFkaW5nUHRocmVhZHMuY3BwOiBSZW1vdmVkIEFuZHJvaWQtc3Bl
Y2lmaWMgc3RydWN0dXJlIFRocmVhZERhdGE7IEluc3RlYWQsIHVzZSBUaHJlYWRGdW5jdGlvbklu
dm9jYXRpb24uCisgICAgICAgIChXVEY6OnJ1blRocmVhZFdpdGhSZWdpc3RyYXRpb24pOgorICAg
ICAgICAoV1RGOjpjcmVhdGVUaHJlYWRJbnRlcm5hbCk6IAorICAgICAgICAqIHd0Zi9UaHJlYWRp
bmdXaW4uY3BwOiBNb3ZlZCBzdHJ1Y3R1cmUgVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uIHRvIGl0
cyBvd24gZmlsZSBzbyB0aGF0CisgICAgICAgIGl0IGNhbiBiZSBzaGFyZWQgd2l0aCB0aGUgQW5k
cm9pZCBpbXBsZW1lbnRhdGlvbiBvZiBjcmVhdGVUaHJlYWRJbnRlcm5hbCgpLgorCiAyMDExLTAx
LTAzICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBCcmFkeSBFaWRzb24uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUuZ3lwaQkocmV2aXNpb24gNzQ4OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtNDQwLDYgKzQ0MCw3IEBACiAgICAgICAg
ICAgICAnd3RmL1RDU3BpbkxvY2suaCcsCiAgICAgICAgICAgICAnd3RmL1RDU3lzdGVtQWxsb2Mu
Y3BwJywKICAgICAgICAgICAgICd3dGYvVENTeXN0ZW1BbGxvYy5oJywKKyAgICAgICAgICAgICd3
dGYvVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uLmgnLAogICAgICAgICAgICAgJ3d0Zi9UaHJlYWRJ
ZGVudGlmaWVyRGF0YVB0aHJlYWRzLmNwcCcsCiAgICAgICAgICAgICAnd3RmL1RocmVhZElkZW50
aWZpZXJEYXRhUHRocmVhZHMuaCcsCiAgICAgICAgICAgICAnd3RmL1RocmVhZGluZy5jcHAnLApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9UaHJlYWRGdW5jdGlvbkludm9jYXRpb24u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1RocmVhZEZ1bmN0aW9u
SW52b2NhdGlvbi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9U
aHJlYWRGdW5jdGlvbkludm9jYXRpb24uaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0OSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgor
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFw
cGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRz
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4gCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBUaHJlYWRGdW5jdGlvbkludm9jYXRpb25faAorI2RlZmluZSBUaHJl
YWRGdW5jdGlvbkludm9jYXRpb25faAorCisjaW5jbHVkZSAiVGhyZWFkaW5nLmgiCisKK25hbWVz
cGFjZSBXVEYgeworCitzdHJ1Y3QgVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uIHsKKyAgICBUaHJl
YWRGdW5jdGlvbkludm9jYXRpb24oVGhyZWFkRnVuY3Rpb24gZnVuY3Rpb24sIHZvaWQqIGRhdGEp
CisgICAgICAgIDogZnVuY3Rpb24oZnVuY3Rpb24pCisgICAgICAgICwgZGF0YShkYXRhKQorICAg
IHsKKyAgICB9CisKKyAgICBUaHJlYWRGdW5jdGlvbiBmdW5jdGlvbjsKKyAgICB2b2lkKiBkYXRh
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBUaHJlYWRGdW5jdGlvbklu
dm9jYXRpb25faApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9UaHJlYWRpbmdQdGhy
ZWFkcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9UaHJlYWRp
bmdQdGhyZWFkcy5jcHAJKHJldmlzaW9uIDc0ODk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3d0Zi9UaHJlYWRpbmdQdGhyZWFkcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDcg
QEAKIAogI2lmIE9TKEFORFJPSUQpCiAjaW5jbHVkZSAiSk5JVXRpbGl0eS5oIgorI2luY2x1ZGUg
IlRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbi5oIgogI2VuZGlmCiAKIG5hbWVzcGFjZSBXVEYgewpA
QCAtMTM2LDM2ICsxMzcsMzEgQEAgdm9pZCBjbGVhclB0aHJlYWRIYW5kbGVGb3JJZGVudGlmaWVy
KFRocgogfQogCiAjaWYgT1MoQU5EUk9JRCkKLS8vIE9uIHRoZSBBbmRyb2lkIHBsYXRmb3JtLCB0
aHJlYWRzIG11c3QgYmUgcmVnaXN0ZXJlZCB3aXRoIHRoZSBWTSBiZWZvcmUgdGhleSBydW4uCi1z
dHJ1Y3QgVGhyZWFkRGF0YSB7Ci0gICAgVGhyZWFkRnVuY3Rpb24gZW50cnlQb2ludDsKLSAgICB2
b2lkKiBhcmc7Ci19OwotCiBzdGF0aWMgdm9pZCogcnVuVGhyZWFkV2l0aFJlZ2lzdHJhdGlvbih2
b2lkKiBhcmcpCiB7Ci0gICAgVGhyZWFkRGF0YSogZGF0YSA9IHN0YXRpY19jYXN0PFRocmVhZERh
dGEqPihhcmcpOworICAgIFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbiBpbnZvY2F0aW9uID0gKnN0
YXRpY19jYXN0PFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbio+KGFyZyk7CisgICAgZGVsZXRlIHN0
YXRpY19jYXN0PFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbio+KGFyZyk7CisKICAgICBKYXZhVk0q
IHZtID0gSlNDOjpCaW5kaW5nczo6Z2V0SmF2YVZNKCk7CiAgICAgSk5JRW52KiBlbnY7CiAgICAg
dm9pZCogcmV0ID0gMDsKICAgICBpZiAodm0tPkF0dGFjaEN1cnJlbnRUaHJlYWQoJmVudiwgMCkg
PT0gSk5JX09LKSB7Ci0gICAgICAgIHJldCA9IGRhdGEtPmVudHJ5UG9pbnQoZGF0YS0+YXJnKTsK
KyAgICAgICAgcmV0ID0gaW52b2NhdGlvbi5mdW5jdGlvbihpbnZvY2F0aW9uLmRhdGEpOwogICAg
ICAgICB2bS0+RGV0YWNoQ3VycmVudFRocmVhZCgpOwogICAgIH0KLSAgICBkZWxldGUgZGF0YTsK
ICAgICByZXR1cm4gcmV0OwogfQogCiBUaHJlYWRJZGVudGlmaWVyIGNyZWF0ZVRocmVhZEludGVy
bmFsKFRocmVhZEZ1bmN0aW9uIGVudHJ5UG9pbnQsIHZvaWQqIGRhdGEsIGNvbnN0IGNoYXIqKQog
ewogICAgIHB0aHJlYWRfdCB0aHJlYWRIYW5kbGU7Ci0gICAgVGhyZWFkRGF0YSogdGhyZWFkRGF0
YSA9IG5ldyBUaHJlYWREYXRhKCk7Ci0gICAgdGhyZWFkRGF0YS0+ZW50cnlQb2ludCA9IGVudHJ5
UG9pbnQ7Ci0gICAgdGhyZWFkRGF0YS0+YXJnID0gZGF0YTsKIAotICAgIGlmIChwdGhyZWFkX2Ny
ZWF0ZSgmdGhyZWFkSGFuZGxlLCAwLCBydW5UaHJlYWRXaXRoUmVnaXN0cmF0aW9uLCBzdGF0aWNf
Y2FzdDx2b2lkKj4odGhyZWFkRGF0YSkpKSB7CisgICAgLy8gT24gdGhlIEFuZHJvaWQgcGxhdGZv
cm0sIHRocmVhZHMgbXVzdCBiZSByZWdpc3RlcmVkIHdpdGggdGhlIFZNIGJlZm9yZSB0aGV5IHJ1
bi4KKyAgICBUaHJlYWRGdW5jdGlvbkludm9jYXRpb24qIGludm9jYXRpb24gPSBuZXcgVGhyZWFk
RnVuY3Rpb25JbnZvY2F0aW9uKGVudHJ5UG9pbnQsIGRhdGEpOyAvLyBEZWFsbG9jYXRlZCBpbiBy
dW5UaHJlYWRXaXRoUmVnaXN0cmF0aW9uKCkgaWYgYSB0aHJlYWQgaXMgY3JlYXRlZC4KKworICAg
IGlmIChwdGhyZWFkX2NyZWF0ZSgmdGhyZWFkSGFuZGxlLCAwLCBydW5UaHJlYWRXaXRoUmVnaXN0
cmF0aW9uLCBpbnZvY2F0aW9uKSkgewogICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBjcmVh
dGUgcHRocmVhZCBhdCBlbnRyeSBwb2ludCAlcCB3aXRoIGRhdGEgJXAiLCBlbnRyeVBvaW50LCBk
YXRhKTsKLSAgICAgICAgZGVsZXRlIHRocmVhZERhdGE7CisgICAgICAgIGRlbGV0ZSBpbnZvY2F0
aW9uOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgcmV0dXJuIGVzdGFibGlzaElkZW50
aWZpZXJGb3JQdGhyZWFkSGFuZGxlKHRocmVhZEhhbmRsZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd3RmL1RocmVhZGluZ1dpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3d0Zi9UaHJlYWRpbmdXaW4uY3BwCShyZXZpc2lvbiA3NDg5NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93dGYvVGhyZWFkaW5nV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
ODcsNiArODcsNyBAQAogI2luY2x1ZGUgIlRocmVhZGluZy5oIgogCiAjaW5jbHVkZSAiTWFpblRo
cmVhZC5oIgorI2luY2x1ZGUgIlRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbi5oIgogI2lmICFVU0Uo
UFRIUkVBRFMpICYmIE9TKFdJTkRPV1MpCiAjaW5jbHVkZSAiVGhyZWFkU3BlY2lmaWMuaCIKICNl
bmRpZgpAQCAtMTg3LDEzICsxODgsNiBAQCBzdGF0aWMgdm9pZCBjbGVhclRocmVhZEhhbmRsZUZv
cklkZW50aWZpCiAgICAgdGhyZWFkTWFwKCkucmVtb3ZlKGlkKTsKIH0KIAotc3RydWN0IFRocmVh
ZEZ1bmN0aW9uSW52b2NhdGlvbiB7Ci0gICAgVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uKFRocmVh
ZEZ1bmN0aW9uIGZ1bmN0aW9uLCB2b2lkKiBkYXRhKSA6IGZ1bmN0aW9uKGZ1bmN0aW9uKSwgZGF0
YShkYXRhKSB7fQotCi0gICAgVGhyZWFkRnVuY3Rpb24gZnVuY3Rpb247Ci0gICAgdm9pZCogZGF0
YTsKLX07Ci0KIHN0YXRpYyB1bnNpZ25lZCBfX3N0ZGNhbGwgd3RmVGhyZWFkRW50cnlQb2ludCh2
b2lkKiBwYXJhbSkKIHsKICAgICBUaHJlYWRGdW5jdGlvbkludm9jYXRpb24gaW52b2NhdGlvbiA9
ICpzdGF0aWNfY2FzdDxUaHJlYWRGdW5jdGlvbkludm9jYXRpb24qPihwYXJhbSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77861</attachid>
            <date>2011-01-03 18:15:46 -0800</date>
            <delta_ts>2011-01-04 10:37:57 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>Bug51855_1.patch</filename>
            <type>text/plain</type>
            <size>7314</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gNzQ5NTMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjQgQEAK
KzIwMTEtMDEtMDMgIERhbmllbCBCYXRlcyAgPGRiYXRlc0ByaW0uY29tPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEV4dHJhY3QgVGhyZWFkRnVuY3Rp
b25JbnZvY2F0aW9uIGludG8gc2VwYXJhdGUgZmlsZSBhbmQgc2hhcmUgYmV0d2VlbiBBcHBsZSBX
aW5kb3dzIGFuZCBBbmRyb2lkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD01MTg1NQorCisgICAgICAgIEJvdGggdGhlIEFwcGxlIFdpbmRvd3MgYW5kIEFu
ZHJvaWQgcG9ydHMgaW1wbGVtZW50IGEgc2ltaWxhciBhZGFwdGVyIHN0cnVjdHVyZSwKKyAgICAg
ICAgY2FsbGVkIFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbiBhbmQgVGhyZWFkRGF0YSByZXNwZWN0
aXZlbHksIGFzIHBhcnQgb2YKKyAgICAgICAgdGhlaXIgdGhyZWFkIGNyZWF0aW9uIHByb2Nlc3Mu
IEluc3RlYWQsIHdlIHNob3VsZCBzaGFyZSBzdWNoIGFuIGFkYXB0ZXIKKyAgICAgICAgc3RydWN0
dXJlIGFuZCByZW1vdmUgZHVwbGljYXRlIGNvZGUuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29y
ZS5neXBpOiBBZGRlZCBoZWFkZXIgd3RmL1RocmVhZEZ1bmN0aW9uSW52b2NhdGlvbi5oLgorICAg
ICAgICAqIHd0Zi9UaHJlYWRGdW5jdGlvbkludm9jYXRpb24uaDogQWRkZWQuCisgICAgICAgIChX
VEY6OlRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbjo6VGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uKToK
KyAgICAgICAgKiB3dGYvVGhyZWFkaW5nUHRocmVhZHMuY3BwOiBSZW1vdmVkIEFuZHJvaWQtc3Bl
Y2lmaWMgc3RydWN0dXJlIFRocmVhZERhdGE7IEluc3RlYWQsIHVzZSBUaHJlYWRGdW5jdGlvbklu
dm9jYXRpb24uCisgICAgICAgIChXVEY6OnJ1blRocmVhZFdpdGhSZWdpc3RyYXRpb24pOgorICAg
ICAgICAoV1RGOjpjcmVhdGVUaHJlYWRJbnRlcm5hbCk6IAorICAgICAgICAqIHd0Zi9UaHJlYWRp
bmdXaW4uY3BwOiBNb3ZlZCBzdHJ1Y3R1cmUgVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uIHRvIGl0
cyBvd24gZmlsZSBzbyB0aGF0CisgICAgICAgIGl0IGNhbiBiZSBzaGFyZWQgd2l0aCB0aGUgQW5k
cm9pZCBpbXBsZW1lbnRhdGlvbiBvZiBjcmVhdGVUaHJlYWRJbnRlcm5hbCgpLgorCiAyMDExLTAx
LTAzICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBCcmFkeSBFaWRzb24uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUuZ3lwaQkocmV2aXNpb24gNzQ4OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtNDQwLDYgKzQ0MCw3IEBACiAgICAgICAg
ICAgICAnd3RmL1RDU3BpbkxvY2suaCcsCiAgICAgICAgICAgICAnd3RmL1RDU3lzdGVtQWxsb2Mu
Y3BwJywKICAgICAgICAgICAgICd3dGYvVENTeXN0ZW1BbGxvYy5oJywKKyAgICAgICAgICAgICd3
dGYvVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uLmgnLAogICAgICAgICAgICAgJ3d0Zi9UaHJlYWRJ
ZGVudGlmaWVyRGF0YVB0aHJlYWRzLmNwcCcsCiAgICAgICAgICAgICAnd3RmL1RocmVhZElkZW50
aWZpZXJEYXRhUHRocmVhZHMuaCcsCiAgICAgICAgICAgICAnd3RmL1RocmVhZGluZy5jcHAnLApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9UaHJlYWRGdW5jdGlvbkludm9jYXRpb24u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1RocmVhZEZ1bmN0aW9u
SW52b2NhdGlvbi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9U
aHJlYWRGdW5jdGlvbkludm9jYXRpb24uaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0OSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgor
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFw
cGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRz
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4gCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBUaHJlYWRGdW5jdGlvbkludm9jYXRpb25faAorI2RlZmluZSBUaHJl
YWRGdW5jdGlvbkludm9jYXRpb25faAorCituYW1lc3BhY2UgV1RGIHsKKwordHlwZWRlZiB2b2lk
KiAoKlRocmVhZEZ1bmN0aW9uKSh2b2lkKiBhcmd1bWVudCk7CisKK3N0cnVjdCBUaHJlYWRGdW5j
dGlvbkludm9jYXRpb24geworICAgIFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbihUaHJlYWRGdW5j
dGlvbiBmdW5jdGlvbiwgdm9pZCogZGF0YSkKKyAgICAgICAgOiBmdW5jdGlvbihmdW5jdGlvbikK
KyAgICAgICAgLCBkYXRhKGRhdGEpCisgICAgeworICAgIH0KKworICAgIFRocmVhZEZ1bmN0aW9u
IGZ1bmN0aW9uOworICAgIHZvaWQqIGRhdGE7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwor
I2VuZGlmIC8vIFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbl9oCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd3RmL1RocmVhZGluZ1B0aHJlYWRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd3RmL1RocmVhZGluZ1B0aHJlYWRzLmNwcAkocmV2aXNpb24gNzQ4OTYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1RocmVhZGluZ1B0aHJlYWRzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTAsNiArNTAsNyBAQAogCiAjaWYgT1MoQU5EUk9JRCkKICNpbmNsdWRl
ICJKTklVdGlsaXR5LmgiCisjaW5jbHVkZSAiVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uLmgiCiAj
ZW5kaWYKIAogbmFtZXNwYWNlIFdURiB7CkBAIC0xMzYsMzYgKzEzNywzMSBAQCB2b2lkIGNsZWFy
UHRocmVhZEhhbmRsZUZvcklkZW50aWZpZXIoVGhyCiB9CiAKICNpZiBPUyhBTkRST0lEKQotLy8g
T24gdGhlIEFuZHJvaWQgcGxhdGZvcm0sIHRocmVhZHMgbXVzdCBiZSByZWdpc3RlcmVkIHdpdGgg
dGhlIFZNIGJlZm9yZSB0aGV5IHJ1bi4KLXN0cnVjdCBUaHJlYWREYXRhIHsKLSAgICBUaHJlYWRG
dW5jdGlvbiBlbnRyeVBvaW50OwotICAgIHZvaWQqIGFyZzsKLX07Ci0KIHN0YXRpYyB2b2lkKiBy
dW5UaHJlYWRXaXRoUmVnaXN0cmF0aW9uKHZvaWQqIGFyZykKIHsKLSAgICBUaHJlYWREYXRhKiBk
YXRhID0gc3RhdGljX2Nhc3Q8VGhyZWFkRGF0YSo+KGFyZyk7CisgICAgVGhyZWFkRnVuY3Rpb25J
bnZvY2F0aW9uIGludm9jYXRpb24gPSAqc3RhdGljX2Nhc3Q8VGhyZWFkRnVuY3Rpb25JbnZvY2F0
aW9uKj4oYXJnKTsKKyAgICBkZWxldGUgc3RhdGljX2Nhc3Q8VGhyZWFkRnVuY3Rpb25JbnZvY2F0
aW9uKj4oYXJnKTsKKwogICAgIEphdmFWTSogdm0gPSBKU0M6OkJpbmRpbmdzOjpnZXRKYXZhVk0o
KTsKICAgICBKTklFbnYqIGVudjsKICAgICB2b2lkKiByZXQgPSAwOwogICAgIGlmICh2bS0+QXR0
YWNoQ3VycmVudFRocmVhZCgmZW52LCAwKSA9PSBKTklfT0spIHsKLSAgICAgICAgcmV0ID0gZGF0
YS0+ZW50cnlQb2ludChkYXRhLT5hcmcpOworICAgICAgICByZXQgPSBpbnZvY2F0aW9uLmZ1bmN0
aW9uKGludm9jYXRpb24uZGF0YSk7CiAgICAgICAgIHZtLT5EZXRhY2hDdXJyZW50VGhyZWFkKCk7
CiAgICAgfQotICAgIGRlbGV0ZSBkYXRhOwogICAgIHJldHVybiByZXQ7CiB9CiAKIFRocmVhZElk
ZW50aWZpZXIgY3JlYXRlVGhyZWFkSW50ZXJuYWwoVGhyZWFkRnVuY3Rpb24gZW50cnlQb2ludCwg
dm9pZCogZGF0YSwgY29uc3QgY2hhciopCiB7CiAgICAgcHRocmVhZF90IHRocmVhZEhhbmRsZTsK
LSAgICBUaHJlYWREYXRhKiB0aHJlYWREYXRhID0gbmV3IFRocmVhZERhdGEoKTsKLSAgICB0aHJl
YWREYXRhLT5lbnRyeVBvaW50ID0gZW50cnlQb2ludDsKLSAgICB0aHJlYWREYXRhLT5hcmcgPSBk
YXRhOwogCi0gICAgaWYgKHB0aHJlYWRfY3JlYXRlKCZ0aHJlYWRIYW5kbGUsIDAsIHJ1blRocmVh
ZFdpdGhSZWdpc3RyYXRpb24sIHN0YXRpY19jYXN0PHZvaWQqPih0aHJlYWREYXRhKSkpIHsKKyAg
ICAvLyBPbiB0aGUgQW5kcm9pZCBwbGF0Zm9ybSwgdGhyZWFkcyBtdXN0IGJlIHJlZ2lzdGVyZWQg
d2l0aCB0aGUgVk0gYmVmb3JlIHRoZXkgcnVuLgorICAgIFRocmVhZEZ1bmN0aW9uSW52b2NhdGlv
biogaW52b2NhdGlvbiA9IG5ldyBUaHJlYWRGdW5jdGlvbkludm9jYXRpb24oZW50cnlQb2ludCwg
ZGF0YSk7IC8vIERlYWxsb2NhdGVkIGluIHJ1blRocmVhZFdpdGhSZWdpc3RyYXRpb24oKSBpZiBh
IHRocmVhZCBpcyBjcmVhdGVkLgorCisgICAgaWYgKHB0aHJlYWRfY3JlYXRlKCZ0aHJlYWRIYW5k
bGUsIDAsIHJ1blRocmVhZFdpdGhSZWdpc3RyYXRpb24sIGludm9jYXRpb24pKSB7CiAgICAgICAg
IExPR19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSBwdGhyZWFkIGF0IGVudHJ5IHBvaW50ICVwIHdp
dGggZGF0YSAlcCIsIGVudHJ5UG9pbnQsIGRhdGEpOwotICAgICAgICBkZWxldGUgdGhyZWFkRGF0
YTsKKyAgICAgICAgZGVsZXRlIGludm9jYXRpb247CiAgICAgICAgIHJldHVybiAwOwogICAgIH0K
ICAgICByZXR1cm4gZXN0YWJsaXNoSWRlbnRpZmllckZvclB0aHJlYWRIYW5kbGUodGhyZWFkSGFu
ZGxlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvVGhyZWFkaW5nV2luLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1RocmVhZGluZ1dpbi5jcHAJ
KHJldmlzaW9uIDc0ODk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9UaHJlYWRpbmdX
aW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw2ICs4Nyw3IEBACiAjaW5jbHVkZSAiVGhyZWFk
aW5nLmgiCiAKICNpbmNsdWRlICJNYWluVGhyZWFkLmgiCisjaW5jbHVkZSAiVGhyZWFkRnVuY3Rp
b25JbnZvY2F0aW9uLmgiCiAjaWYgIVVTRShQVEhSRUFEUykgJiYgT1MoV0lORE9XUykKICNpbmNs
dWRlICJUaHJlYWRTcGVjaWZpYy5oIgogI2VuZGlmCkBAIC0xODcsMTMgKzE4OCw2IEBAIHN0YXRp
YyB2b2lkIGNsZWFyVGhyZWFkSGFuZGxlRm9ySWRlbnRpZmkKICAgICB0aHJlYWRNYXAoKS5yZW1v
dmUoaWQpOwogfQogCi1zdHJ1Y3QgVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uIHsKLSAgICBUaHJl
YWRGdW5jdGlvbkludm9jYXRpb24oVGhyZWFkRnVuY3Rpb24gZnVuY3Rpb24sIHZvaWQqIGRhdGEp
IDogZnVuY3Rpb24oZnVuY3Rpb24pLCBkYXRhKGRhdGEpIHt9Ci0KLSAgICBUaHJlYWRGdW5jdGlv
biBmdW5jdGlvbjsKLSAgICB2b2lkKiBkYXRhOwotfTsKLQogc3RhdGljIHVuc2lnbmVkIF9fc3Rk
Y2FsbCB3dGZUaHJlYWRFbnRyeVBvaW50KHZvaWQqIHBhcmFtKQogewogICAgIFRocmVhZEZ1bmN0
aW9uSW52b2NhdGlvbiBpbnZvY2F0aW9uID0gKnN0YXRpY19jYXN0PFRocmVhZEZ1bmN0aW9uSW52
b2NhdGlvbio+KHBhcmFtKTsK
</data>
<flag name="review"
          id="69073"
          type_id="1"
          status="-"
          setter="aroben"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77900</attachid>
            <date>2011-01-04 10:37:57 -0800</date>
            <delta_ts>2011-01-04 10:46:20 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>Bug51855_2.patch</filename>
            <type>text/plain</type>
            <size>7948</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gNzQ5NzMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjUgQEAK
KzIwMTEtMDEtMDQgIERhbmllbCBCYXRlcyAgPGRiYXRlc0ByaW0uY29tPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEV4dHJhY3QgVGhyZWFkRnVuY3Rp
b25JbnZvY2F0aW9uIGludG8gc2VwYXJhdGUgZmlsZSBhbmQgc2hhcmUgYmV0d2VlbiBBcHBsZSBX
aW5kb3dzIGFuZCBBbmRyb2lkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD01MTg1NQorCisgICAgICAgIEJvdGggdGhlIEFwcGxlIFdpbmRvd3MgYW5kIEFu
ZHJvaWQgcG9ydHMgaW1wbGVtZW50IGEgc2ltaWxhciBhZGFwdGVyIHN0cnVjdHVyZSwKKyAgICAg
ICAgY2FsbGVkIFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbiBhbmQgVGhyZWFkRGF0YSByZXNwZWN0
aXZlbHksIGFzIHBhcnQgb2YKKyAgICAgICAgdGhlaXIgdGhyZWFkIGNyZWF0aW9uIHByb2Nlc3Mu
IEluc3RlYWQsIHdlIHNob3VsZCBzaGFyZSBzdWNoIGFuIGFkYXB0ZXIKKyAgICAgICAgc3RydWN0
dXJlIGFuZCByZW1vdmUgZHVwbGljYXRlIGNvZGUuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29y
ZS5neXBpOiBBZGRlZCBoZWFkZXIgd3RmL1RocmVhZEZ1bmN0aW9uSW52b2NhdGlvbi5oLgorICAg
ICAgICAqIHd0Zi9UaHJlYWRGdW5jdGlvbkludm9jYXRpb24uaDogQWRkZWQuCisgICAgICAgIChX
VEY6OlRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbjo6VGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uKToK
KyAgICAgICAgKiB3dGYvVGhyZWFkaW5nUHRocmVhZHMuY3BwOiBSZW1vdmVkIEFuZHJvaWQtc3Bl
Y2lmaWMgc3RydWN0dXJlIFRocmVhZERhdGE7IEluc3RlYWQsIHVzZSBUaHJlYWRGdW5jdGlvbklu
dm9jYXRpb24uCisgICAgICAgIChXVEY6OnJ1blRocmVhZFdpdGhSZWdpc3RyYXRpb24pOgorICAg
ICAgICAoV1RGOjpjcmVhdGVUaHJlYWRJbnRlcm5hbCk6IAorICAgICAgICAqIHd0Zi9UaHJlYWRp
bmdXaW4uY3BwOiBNb3ZlZCBzdHJ1Y3R1cmUgVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uIHRvIGl0
cyBvd24gZmlsZSBzbyB0aGF0CisgICAgICAgIGl0IGNhbiBiZSBzaGFyZWQgd2l0aCB0aGUgQW5k
cm9pZCBpbXBsZW1lbnRhdGlvbiBvZiBjcmVhdGVUaHJlYWRJbnRlcm5hbCgpLgorICAgICAgICAo
V1RGOjp3dGZUaHJlYWRFbnRyeVBvaW50KTogVXNlIE93blB0ciB0byBob2xkIHBhc3NlZCBpbnN0
YW5jZSBvZiBUaHJlYWRGdW5jdGlvbkludm9jYXRpb24uCisKIDIwMTEtMDEtMDMgIERhbmllbCBC
YXRlcyAgPGRiYXRlc0ByaW0uY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVy
LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmd5cGkKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmd5cGkJKHJldmlz
aW9uIDc0OTcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmd5cGkJ
KHdvcmtpbmcgY29weSkKQEAgLTQ0MCw2ICs0NDAsNyBAQAogICAgICAgICAgICAgJ3d0Zi9UQ1Nw
aW5Mb2NrLmgnLAogICAgICAgICAgICAgJ3d0Zi9UQ1N5c3RlbUFsbG9jLmNwcCcsCiAgICAgICAg
ICAgICAnd3RmL1RDU3lzdGVtQWxsb2MuaCcsCisgICAgICAgICAgICAnd3RmL1RocmVhZEZ1bmN0
aW9uSW52b2NhdGlvbi5oJywKICAgICAgICAgICAgICd3dGYvVGhyZWFkSWRlbnRpZmllckRhdGFQ
dGhyZWFkcy5jcHAnLAogICAgICAgICAgICAgJ3d0Zi9UaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJl
YWRzLmgnLAogICAgICAgICAgICAgJ3d0Zi9UaHJlYWRpbmcuY3BwJywKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93dGYvVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9UaHJlYWRGdW5jdGlvbkludm9jYXRpb24uaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvVGhyZWFkRnVuY3Rpb25J
bnZvY2F0aW9uLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4gCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4gCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwg
SW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAg
ICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uIAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElU
UyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwor
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uX2gKKyNkZWZpbmUgVGhyZWFkRnVuY3Rpb25JbnZv
Y2F0aW9uX2gKKworbmFtZXNwYWNlIFdURiB7CisKK3R5cGVkZWYgdm9pZCogKCpUaHJlYWRGdW5j
dGlvbikodm9pZCogYXJndW1lbnQpOworCitzdHJ1Y3QgVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9u
IHsKKyAgICBUaHJlYWRGdW5jdGlvbkludm9jYXRpb24oVGhyZWFkRnVuY3Rpb24gZnVuY3Rpb24s
IHZvaWQqIGRhdGEpCisgICAgICAgIDogZnVuY3Rpb24oZnVuY3Rpb24pCisgICAgICAgICwgZGF0
YShkYXRhKQorICAgIHsKKyAgICB9CisKKyAgICBUaHJlYWRGdW5jdGlvbiBmdW5jdGlvbjsKKyAg
ICB2b2lkKiBkYXRhOworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBUaHJl
YWRGdW5jdGlvbkludm9jYXRpb25faApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9U
aHJlYWRpbmdQdGhyZWFkcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3d0Zi9UaHJlYWRpbmdQdGhyZWFkcy5jcHAJKHJldmlzaW9uIDc0OTcyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3d0Zi9UaHJlYWRpbmdQdGhyZWFkcy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTUwLDYgKzUwLDggQEAKIAogI2lmIE9TKEFORFJPSUQpCiAjaW5jbHVkZSAiSk5JVXRpbGl0eS5o
IgorI2luY2x1ZGUgIlRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbi5oIgorI2luY2x1ZGUgPHd0Zi9P
d25QdHIuaD4KICNlbmRpZgogCiBuYW1lc3BhY2UgV1RGIHsKQEAgLTEzNiwzOCArMTM4LDM0IEBA
IHZvaWQgY2xlYXJQdGhyZWFkSGFuZGxlRm9ySWRlbnRpZmllcihUaHIKIH0KIAogI2lmIE9TKEFO
RFJPSUQpCi0vLyBPbiB0aGUgQW5kcm9pZCBwbGF0Zm9ybSwgdGhyZWFkcyBtdXN0IGJlIHJlZ2lz
dGVyZWQgd2l0aCB0aGUgVk0gYmVmb3JlIHRoZXkgcnVuLgotc3RydWN0IFRocmVhZERhdGEgewot
ICAgIFRocmVhZEZ1bmN0aW9uIGVudHJ5UG9pbnQ7Ci0gICAgdm9pZCogYXJnOwotfTsKLQogc3Rh
dGljIHZvaWQqIHJ1blRocmVhZFdpdGhSZWdpc3RyYXRpb24odm9pZCogYXJnKQogewotICAgIFRo
cmVhZERhdGEqIGRhdGEgPSBzdGF0aWNfY2FzdDxUaHJlYWREYXRhKj4oYXJnKTsKKyAgICBPd25Q
dHI8VGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uPiBpbnZvY2F0aW9uID0gYWRvcHRQdHIoc3RhdGlj
X2Nhc3Q8VGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uKj4oYXJnKSk7CiAgICAgSmF2YVZNKiB2bSA9
IEpTQzo6QmluZGluZ3M6OmdldEphdmFWTSgpOwogICAgIEpOSUVudiogZW52OwogICAgIHZvaWQq
IHJldCA9IDA7CiAgICAgaWYgKHZtLT5BdHRhY2hDdXJyZW50VGhyZWFkKCZlbnYsIDApID09IEpO
SV9PSykgewotICAgICAgICByZXQgPSBkYXRhLT5lbnRyeVBvaW50KGRhdGEtPmFyZyk7CisgICAg
ICAgIHJldCA9IGludm9jYXRpb24tPmZ1bmN0aW9uKGludm9jYXRpb24uZGF0YSk7CiAgICAgICAg
IHZtLT5EZXRhY2hDdXJyZW50VGhyZWFkKCk7CiAgICAgfQotICAgIGRlbGV0ZSBkYXRhOwogICAg
IHJldHVybiByZXQ7CiB9CiAKIFRocmVhZElkZW50aWZpZXIgY3JlYXRlVGhyZWFkSW50ZXJuYWwo
VGhyZWFkRnVuY3Rpb24gZW50cnlQb2ludCwgdm9pZCogZGF0YSwgY29uc3QgY2hhciopCiB7CiAg
ICAgcHRocmVhZF90IHRocmVhZEhhbmRsZTsKLSAgICBUaHJlYWREYXRhKiB0aHJlYWREYXRhID0g
bmV3IFRocmVhZERhdGEoKTsKLSAgICB0aHJlYWREYXRhLT5lbnRyeVBvaW50ID0gZW50cnlQb2lu
dDsKLSAgICB0aHJlYWREYXRhLT5hcmcgPSBkYXRhOwogCi0gICAgaWYgKHB0aHJlYWRfY3JlYXRl
KCZ0aHJlYWRIYW5kbGUsIDAsIHJ1blRocmVhZFdpdGhSZWdpc3RyYXRpb24sIHN0YXRpY19jYXN0
PHZvaWQqPih0aHJlYWREYXRhKSkpIHsKKyAgICAvLyBPbiB0aGUgQW5kcm9pZCBwbGF0Zm9ybSwg
dGhyZWFkcyBtdXN0IGJlIHJlZ2lzdGVyZWQgd2l0aCB0aGUgVk0gYmVmb3JlIHRoZXkgcnVuLgor
ICAgIE93blB0cjxUaHJlYWRGdW5jdGlvbkludm9jYXRpb24+IGludm9jYXRpb24gPSBhZG9wdFB0
cihuZXcgVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uKGVudHJ5UG9pbnQsIGRhdGEpKTsKKworICAg
IGlmIChwdGhyZWFkX2NyZWF0ZSgmdGhyZWFkSGFuZGxlLCAwLCBydW5UaHJlYWRXaXRoUmVnaXN0
cmF0aW9uLCBpbnZvY2F0aW9uKSkgewogICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBjcmVh
dGUgcHRocmVhZCBhdCBlbnRyeSBwb2ludCAlcCB3aXRoIGRhdGEgJXAiLCBlbnRyeVBvaW50LCBk
YXRhKTsKLSAgICAgICAgZGVsZXRlIHRocmVhZERhdGE7CiAgICAgICAgIHJldHVybiAwOwogICAg
IH0KKworICAgIC8vIFRoZSB0aHJlYWQgd2lsbCB0YWtlIG93bmVyc2hpcCBvZiBpbnZvY2F0aW9u
LgorICAgIGludm9jYXRpb24ubGVha1B0cigpOworCiAgICAgcmV0dXJuIGVzdGFibGlzaElkZW50
aWZpZXJGb3JQdGhyZWFkSGFuZGxlKHRocmVhZEhhbmRsZSk7CiB9CiAjZWxzZQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9UaHJlYWRpbmdXaW4uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvVGhyZWFkaW5nV2luLmNwcAkocmV2aXNpb24gNzQ5NzIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1RocmVhZGluZ1dpbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTg3LDYgKzg3LDcgQEAKICNpbmNsdWRlICJUaHJlYWRpbmcuaCIKIAogI2luY2x1
ZGUgIk1haW5UaHJlYWQuaCIKKyNpbmNsdWRlICJUaHJlYWRGdW5jdGlvbkludm9jYXRpb24uaCIK
ICNpZiAhVVNFKFBUSFJFQURTKSAmJiBPUyhXSU5ET1dTKQogI2luY2x1ZGUgIlRocmVhZFNwZWNp
ZmljLmgiCiAjZW5kaWYKQEAgLTEwMiw2ICsxMDMsNyBAQAogI2luY2x1ZGUgPHd0Zi9DdXJyZW50
VGltZS5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRy
YXMuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JhbmRvbU51bWJl
clNlZWQuaD4KIAogbmFtZXNwYWNlIFdURiB7CkBAIC0xODcsMTkgKzE4OSwxMCBAQCBzdGF0aWMg
dm9pZCBjbGVhclRocmVhZEhhbmRsZUZvcklkZW50aWZpCiAgICAgdGhyZWFkTWFwKCkucmVtb3Zl
KGlkKTsKIH0KIAotc3RydWN0IFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbiB7Ci0gICAgVGhyZWFk
RnVuY3Rpb25JbnZvY2F0aW9uKFRocmVhZEZ1bmN0aW9uIGZ1bmN0aW9uLCB2b2lkKiBkYXRhKSA6
IGZ1bmN0aW9uKGZ1bmN0aW9uKSwgZGF0YShkYXRhKSB7fQotCi0gICAgVGhyZWFkRnVuY3Rpb24g
ZnVuY3Rpb247Ci0gICAgdm9pZCogZGF0YTsKLX07Ci0KIHN0YXRpYyB1bnNpZ25lZCBfX3N0ZGNh
bGwgd3RmVGhyZWFkRW50cnlQb2ludCh2b2lkKiBwYXJhbSkKIHsKLSAgICBUaHJlYWRGdW5jdGlv
bkludm9jYXRpb24gaW52b2NhdGlvbiA9ICpzdGF0aWNfY2FzdDxUaHJlYWRGdW5jdGlvbkludm9j
YXRpb24qPihwYXJhbSk7Ci0gICAgZGVsZXRlIHN0YXRpY19jYXN0PFRocmVhZEZ1bmN0aW9uSW52
b2NhdGlvbio+KHBhcmFtKTsKLQotICAgIHZvaWQqIHJlc3VsdCA9IGludm9jYXRpb24uZnVuY3Rp
b24oaW52b2NhdGlvbi5kYXRhKTsKKyAgICBPd25QdHI8VGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9u
PiBpbnZvY2F0aW9uID0gYWRvcHRQdHIoc3RhdGljX2Nhc3Q8VGhyZWFkRnVuY3Rpb25JbnZvY2F0
aW9uKj4ocGFyYW0pKTsKKyAgICB2b2lkKiByZXN1bHQgPSBpbnZvY2F0aW9uLT5mdW5jdGlvbihp
bnZvY2F0aW9uLmRhdGEpOwogCiAjaWYgIVVTRShQVEhSRUFEUykgJiYgT1MoV0lORE9XUykKICAg
ICAvLyBEbyB0aGUgVExTIGNsZWFudXAuCg==
</data>
<flag name="review"
          id="69127"
          type_id="1"
          status="+"
          setter="aroben"
    />
    <flag name="commit-queue"
          id="69131"
          type_id="3"
          status="-"
          setter="aroben"
    />
          </attachment>
      

    </bug>

</bugzilla>