<?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>126088</bug_id>
          
          <creation_ts>2013-12-20 15:17:16 -0800</creation_ts>
          <short_desc>CStack: callToJavaScript should do stack check for incoming args</short_desc>
          <delta_ts>2014-01-02 12:46:05 -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>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</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>
          
          <blocked>125928</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>962073</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-12-20 15:17:16 -0800</bug_when>
    <thetext>This change will achieve the following:

1. Change callToJavaScript()&apos;s prototype to:
        EncodedJSValue callToJavaScript(void*, VM*, ProtoCallFrame*);

    We now pass VM* instead of &amp;vm.topCallFrame for the second argument.  This gives us greater utility out of that arg.

2. Change callToJavaScript() to do a stack check to ensure that we have adequate stack space to copy all the args from the protoCallFrame.
    If not, it&apos;ll throw a StackOverflowError.

3. Removed JSStack::entryCheck() and calls to it.

    callToJavaScript now takes care of the stack check that ensures adequate stack space for incoming args.
    callToJavaScript does assume that we have adequate stack space for the VMEntrySentinelFrame, but that is ensured by our stack host zone.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>962078</commentid>
    <comment_count>1</comment_count>
      <attachid>219804</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-12-20 15:32:53 -0800</bug_when>
    <thetext>Created attachment 219804
the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>962093</commentid>
    <comment_count>2</comment_count>
      <attachid>219804</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-12-20 16:01:10 -0800</bug_when>
    <thetext>Comment on attachment 219804
the patch.

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

&gt; Source/JavaScriptCore/llint/LLIntSlowPaths.h:126
&gt; +extern &quot;C&quot; void llint_throw_stack_overflow_error(VM*, ProtoCallFrame*);

The style checker was complaining about the use of underscores here.  While the use of underscores is consistent with how LLINT slow paths roll, should I be switching to the webkit style of camel case here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>962115</commentid>
    <comment_count>3</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-12-20 16:54:31 -0800</bug_when>
    <thetext>Landed in r160947 on the jsCStack branch: &lt;http://trac.webkit.org/r160947&gt;.

A review is still needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>962121</commentid>
    <comment_count>4</comment_count>
      <attachid>219804</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2013-12-20 17:08:49 -0800</bug_when>
    <thetext>Comment on attachment 219804
the patch.

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

r=me modulo that verify that you can safely use vm-&gt;topCallFrame in llint_throw_stack_overflow_error

&gt; Source/JavaScriptCore/llint/LLIntSlowPaths.cpp:1394
&gt; +    ExecState* exec = vm-&gt;topCallFrame;

Please verify that we can count of vm-&gt;topCallFrame being valid or null.  I thought we could only count on its value when we call out to C++.  The JS caller will set topCallFrame before making the call.  I don&apos;t think it ever restores it to a prior value.  Seems it could be bad if a JS function A calls B and B calls out to a helper.  B is in now in topCallFrame.  B exits and A now makes a call that happens to be a native function.  I don&apos;t think that topCallFrame will get updated again before making the native call.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>962126</commentid>
    <comment_count>5</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-12-20 17:20:59 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 219804 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=219804&amp;action=review
&gt; 
&gt; r=me modulo that verify that you can safely use vm-&gt;topCallFrame in llint_throw_stack_overflow_error
&gt; 
&gt; &gt; Source/JavaScriptCore/llint/LLIntSlowPaths.cpp:1394
&gt; &gt; +    ExecState* exec = vm-&gt;topCallFrame;
&gt; 
&gt; Please verify that we can count of vm-&gt;topCallFrame being valid or null.  I thought we could only count on its value when we call out to C++.  The JS caller will set topCallFrame before making the call.  I don&apos;t think it ever restores it to a prior value.  Seems it could be bad if a JS function A calls B and B calls out to a helper.  B is in now in topCallFrame.  B exits and A now makes a call that happens to be a native function.  I don&apos;t think that topCallFrame will get updated again before making the native call.

Here are the critical check points:

1. JSStack initializes it to 0 initially.
2. callToJavaScript saves topCallFrame in VMEntrySentinelFrame::ScopeChain upon entry, and restores it before returning.
3. In LLInt slow paths, the NativeCallFrameTracer sets topCallFrame to the current CallFrame before executing native code.
4. JIT operations also use NativeCallFrameTracer to set topCallFrame.

Note that in callToJavaScript, we’ve only just come from C++ code.  Conceptually, we haven’t pushed any JS frames onto the stack yet.  Hence, whatever value topCallFrame had before we called callToJavaScript is the topCallFrame value that we want.  And by design, that’s the one we’re getting (because we haven’t set it to anything else yet). 

We are good to go.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>962138</commentid>
    <comment_count>6</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2013-12-20 17:53:52 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #4)
&gt; &gt; (From update of attachment 219804 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=219804&amp;action=review
&gt; &gt; 
&gt; &gt; r=me modulo that verify that you can safely use vm-&gt;topCallFrame in llint_throw_stack_overflow_error
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/llint/LLIntSlowPaths.cpp:1394
&gt; &gt; &gt; +    ExecState* exec = vm-&gt;topCallFrame;
&gt; &gt; 
&gt; &gt; Please verify that we can count of vm-&gt;topCallFrame being valid or null.  I thought we could only count on its value when we call out to C++.  The JS caller will set topCallFrame before making the call.  I don&apos;t think it ever restores it to a prior value.  Seems it could be bad if a JS function A calls B and B calls out to a helper.  B is in now in topCallFrame.  B exits and A now makes a call that happens to be a native function.  I don&apos;t think that topCallFrame will get updated again before making the native call.
&gt; 
&gt; Here are the critical check points:
&gt; 
&gt; 1. JSStack initializes it to 0 initially.
&gt; 2. callToJavaScript saves topCallFrame in VMEntrySentinelFrame::ScopeChain upon entry, and restores it before returning.
&gt; 3. In LLInt slow paths, the NativeCallFrameTracer sets topCallFrame to the current CallFrame before executing native code.
&gt; 4. JIT operations also use NativeCallFrameTracer to set topCallFrame.
&gt; 
&gt; Note that in callToJavaScript, we’ve only just come from C++ code.  Conceptually, we haven’t pushed any JS frames onto the stack yet.  Hence, whatever value topCallFrame had before we called callToJavaScript is the topCallFrame value that we want.  And by design, that’s the one we’re getting (because we haven’t set it to anything else yet). 
&gt; 
&gt; We are good to go.

There is also the reentrant case.  When we start off, topCallFrame should be 0.  We save it in callToJavaScript.  The called JS can make a C++ call that will reenter callToJavaScript (e.g. eval).  In that case topCallFrame is fine. 

I think we&apos;re okay, because callToJavaScript already relies on topCallFrame being valid.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>962492</commentid>
    <comment_count>7</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-12-23 09:47:26 -0800</bug_when>
    <thetext>Thanks for the review.  Review status updated in r160950: &lt;http://trac.webkit.org/r160950&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>963841</commentid>
    <comment_count>8</comment_count>
      <attachid>219804</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-01-02 12:39:39 -0800</bug_when>
    <thetext>Comment on attachment 219804
the patch.

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

&gt; Source/JavaScriptCore/llint/LLIntSlowPaths.cpp:1392
&gt; +void llint_throw_stack_overflow_error(VM* vm, ProtoCallFrame* protoFrame)

Is there anything that prevents us from passing ExecState* to this function? That would be much better. Then, we could reason about this code without a four-point logic map. Also, that&apos;s how other llint_ functions work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>963842</commentid>
    <comment_count>9</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-01-02 12:46:05 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 219804 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=219804&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/llint/LLIntSlowPaths.cpp:1392
&gt; &gt; +void llint_throw_stack_overflow_error(VM* vm, ProtoCallFrame* protoFrame)
&gt; 
&gt; Is there anything that prevents us from passing ExecState* to this function? That would be much better. Then, we could reason about this code without a four-point logic map. Also, that&apos;s how other llint_ functions work.

I chose to pass a VM* because there’s no guarantee that we have any valid CallFrames on the stack yet, and hence we don’t have a valid ExecState*.  llint_throw_stack_overflow_error() is called from doCallToJavaScript() only if we fail to set up the CallFrame due to inadequate space for the incoming args.  For other llint_ functions, they are guaranteed that there is at least one valid ExecState* that they can use.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>219804</attachid>
            <date>2013-12-20 15:32:53 -0800</date>
            <delta_ts>2014-01-02 12:39:39 -0800</delta_ts>
            <desc>the patch.</desc>
            <filename>bug-126088.patch</filename>
            <type>text/plain</type>
            <size>17096</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTYwOTMzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUwIEBA
CisyMDEzLTEyLTIwICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBD
U3RhY2s6IGNhbGxUb0phdmFTY3JpcHQgc2hvdWxkIGRvIHN0YWNrIGNoZWNrIGZvciBpbmNvbWlu
ZyBhcmdzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTI2MDg4LgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IDEuIENoYW5nZSBjYWxsVG9KYXZhU2NyaXB0KCkncyBwcm90b3R5cGUgdG86CisgICAgICAgICAg
ICAgICBFbmNvZGVkSlNWYWx1ZSBjYWxsVG9KYXZhU2NyaXB0KHZvaWQqLCBWTSosIFByb3RvQ2Fs
bEZyYW1lKik7CisKKyAgICAgICAgICAgV2Ugbm93IHBhc3MgVk0qIGluc3RlYWQgb2YgJnZtLnRv
cENhbGxGcmFtZSBmb3IgdGhlIHNlY29uZCBhcmd1bWVudC4KKyAgICAgICAgICAgVGhpcyBnaXZl
cyB1cyBncmVhdGVyIHV0aWxpdHkgb3V0IG9mIHRoYXQgYXJnLgorICAgICAgICAgICBXZSBhbHNv
IG5vdyBzYXZlIHRoZSBWTSogaW4gdGhlIFZNRW50cnlTZW50aW5lbEZyYW1lIGluc3RlYWQgb2YK
KyAgICAgICAgICAgJnZtLnRvcENhbGxGcmFtZS4KKworICAgICAgICAyLiBDaGFuZ2UgY2FsbFRv
SmF2YVNjcmlwdCgpIHRvIGRvIGEgc3RhY2sgY2hlY2sgdG8gZW5zdXJlIHRoYXQgd2UgaGF2ZQor
ICAgICAgICAgICBhZGVxdWF0ZSBzdGFjayBzcGFjZSB0byBjb3B5IGFsbCB0aGUgYXJncyBmcm9t
IHRoZSBwcm90b0NhbGxGcmFtZS4KKyAgICAgICAgICAgSWYgbm90LCBpdCdsbCB0aHJvdyBhIFN0
YWNrT3ZlcmZsb3dFcnJvci4KKworICAgICAgICAzLiBSZW1vdmVkIEpTU3RhY2s6OmVudHJ5Q2hl
Y2soKSBhbmQgY2FsbHMgdG8gaXQuCisKKyAgICAgICAgICAgY2FsbFRvSmF2YVNjcmlwdCBub3cg
dGFrZXMgY2FyZSBvZiB0aGUgc3RhY2sgY2hlY2sgdGhhdCBlbnN1cmVzCisgICAgICAgICAgIGFk
ZXF1YXRlIHN0YWNrIHNwYWNlIGZvciBpbmNvbWluZyBhcmdzLgorICAgICAgICAgICBjYWxsVG9K
YXZhU2NyaXB0IGRvZXMgYXNzdW1lIHRoYXQgd2UgaGF2ZSBhZGVxdWF0ZSBzdGFjayBzcGFjZSBm
b3IKKyAgICAgICAgICAgdGhlIFZNRW50cnlTZW50aW5lbEZyYW1lLCBidXQgdGhhdCBpcyBlbnN1
cmVkIGJ5IG91ciBzdGFjayBob3N0IHpvbmUuCisKKyAgICAgICAgQ2hhbmdlcyB0byBjYWxsVG9K
YXZhU2NyaXB0IGFyZSBkb25lIGluIHRoZSBkb0NhbGxUb0phdmFTY3JpcHQgbWFjcm8uCisgICAg
ICAgIEhlbmNlLCBhbGwgdGhlIGNoYW5nZXMgYXBwbHkgdG8gY2FsbFRvTmF0aXZlRnVuY3Rpb24g
YXMgd2VsbC4KKworICAgICAgICAqIGludGVycHJldGVyL0ludGVycHJldGVyLmNwcDoKKyAgICAg
ICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmV4ZWN1dGUpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRl
cjo6ZXhlY3V0ZUNhbGwpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6ZXhlY3V0ZUNvbnN0
cnVjdCk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpwcmVwYXJlRm9yUmVwZWF0Q2FsbCk6
CisgICAgICAgICogaW50ZXJwcmV0ZXIvSlNTdGFjay5oOgorICAgICAgICAqIGludGVycHJldGVy
L0pTU3RhY2tJbmxpbmVzLmg6CisgICAgICAgICogaml0L0pJVENvZGUuY3BwOgorICAgICAgICAo
SlNDOjpKSVRDb2RlOjpleGVjdXRlKToKKyAgICAgICAgKiBqaXQvSklUU3R1YnMuaDoKKyAgICAg
ICAgKiBqaXQvSklUU3R1YnNNU1ZDNjQuYXNtOiBBZGRlZCBhIEZJWE1FLgorICAgICAgICAqIGpp
dC9KSVRTdHVic1g4Ni5oOiBBZGRlZCBhIEZJWE1FLgorICAgICAgICAqIGxsaW50L0xMSW50U2xv
d1BhdGhzLmNwcDoKKyAgICAgICAgKEpTQzo6TExJbnQ6OmxsaW50X3Rocm93X3N0YWNrX292ZXJm
bG93X2Vycm9yKToKKyAgICAgICAgKiBsbGludC9MTEludFNsb3dQYXRocy5oOgorICAgICAgICAq
IGxsaW50L0xMSW50VGh1bmtzLmg6CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRl
cjY0LmFzbToKKwogMjAxMy0xMi0yMCAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAK
ICAgICAgICAgRml4IGJyb2tlbiBub24tRlRMIGJ1aWxkLgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCShyZXZpc2lvbiAxNjA5
MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04OTIsOSArODkyLDYgQEAgZmFpbGVkSlNPTlA6CiAKICAgICBB
U1NFUlQoY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkgPT0gMSk7IC8vIDEgcGFyYW1ldGVyIGZv
ciAndGhpcycuCiAKLSAgICBpZiAoVU5MSUtFTFkoIW1fc3RhY2suZW50cnlDaGVjayhjb2RlQmxv
Y2ssIDEpKSkKLSAgICAgICAgcmV0dXJuIGNoZWNrZWRSZXR1cm4odGhyb3dTdGFja092ZXJmbG93
RXJyb3IoY2FsbEZyYW1lKSk7Ci0KICAgICBQcm90b0NhbGxGcmFtZSBwcm90b0NhbGxGcmFtZTsK
ICAgICBwcm90b0NhbGxGcmFtZS5pbml0KGNvZGVCbG9jaywgc2NvcGUsIDAsIHRoaXNPYmosIDEp
OwogCkBAIC05NTUsOSArOTUyLDYgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZUNhbGwo
Q2FsbEZyYQogICAgIGlmIChVTkxJS0VMWSh2bS53YXRjaGRvZy5kaWRGaXJlKGNhbGxGcmFtZSkp
KQogICAgICAgICByZXR1cm4gdGhyb3dUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKGNhbGxG
cmFtZSk7CiAKLSAgICBpZiAoVU5MSUtFTFkoIW1fc3RhY2suZW50cnlDaGVjayhuZXdDb2RlQmxv
Y2ssIGFyZ3NDb3VudCkpKQotICAgICAgICByZXR1cm4gY2hlY2tlZFJldHVybih0aHJvd1N0YWNr
T3ZlcmZsb3dFcnJvcihjYWxsRnJhbWUpKTsKLQogICAgIFByb3RvQ2FsbEZyYW1lIHByb3RvQ2Fs
bEZyYW1lOwogICAgIHByb3RvQ2FsbEZyYW1lLmluaXQobmV3Q29kZUJsb2NrLCBzY29wZSwgZnVu
Y3Rpb24sIHRoaXNWYWx1ZSwgYXJnc0NvdW50LCBhcmdzLmRhdGEoKSk7CiAKQEAgLTk3Myw3ICs5
NjcsNyBAQCBKU1ZhbHVlIEludGVycHJldGVyOjpleGVjdXRlQ2FsbChDYWxsRnJhCiAgICAgICAg
IGlmIChpc0pTQ2FsbCkKICAgICAgICAgICAgIHJlc3VsdCA9IGNhbGxEYXRhLmpzLmZ1bmN0aW9u
RXhlY3V0YWJsZS0+Z2VuZXJhdGVkSklUQ29kZUZvckNhbGwoKS0+ZXhlY3V0ZSgmdm0sICZwcm90
b0NhbGxGcmFtZSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJlc3VsdCA9IEpTVmFsdWU6
OmRlY29kZShjYWxsVG9OYXRpdmVGdW5jdGlvbihyZWludGVycHJldF9jYXN0PHZvaWQqPihjYWxs
RGF0YS5uYXRpdmUuZnVuY3Rpb24pLCAmdm0udG9wQ2FsbEZyYW1lLCAmcHJvdG9DYWxsRnJhbWUp
KTsKKyAgICAgICAgICAgIHJlc3VsdCA9IEpTVmFsdWU6OmRlY29kZShjYWxsVG9OYXRpdmVGdW5j
dGlvbihyZWludGVycHJldF9jYXN0PHZvaWQqPihjYWxsRGF0YS5uYXRpdmUuZnVuY3Rpb24pLCAm
dm0sICZwcm90b0NhbGxGcmFtZSkpOwogICAgIH0KIAogICAgIGlmIChMZWdhY3lQcm9maWxlciog
cHJvZmlsZXIgPSB2bS5lbmFibGVkUHJvZmlsZXIoKSkKQEAgLTEwMjMsOSArMTAxNyw2IEBAIEpT
T2JqZWN0KiBJbnRlcnByZXRlcjo6ZXhlY3V0ZUNvbnN0cnVjdCgKICAgICBpZiAoVU5MSUtFTFko
dm0ud2F0Y2hkb2cuZGlkRmlyZShjYWxsRnJhbWUpKSkKICAgICAgICAgcmV0dXJuIHRocm93VGVy
bWluYXRlZEV4ZWN1dGlvbkV4Y2VwdGlvbihjYWxsRnJhbWUpOwogCi0gICAgaWYgKFVOTElLRUxZ
KCFtX3N0YWNrLmVudHJ5Q2hlY2sobmV3Q29kZUJsb2NrLCBhcmdzQ291bnQpKSkKLSAgICAgICAg
cmV0dXJuIGNoZWNrZWRSZXR1cm4odGhyb3dTdGFja092ZXJmbG93RXJyb3IoY2FsbEZyYW1lKSk7
Ci0KICAgICBQcm90b0NhbGxGcmFtZSBwcm90b0NhbGxGcmFtZTsKICAgICBwcm90b0NhbGxGcmFt
ZS5pbml0KG5ld0NvZGVCbG9jaywgc2NvcGUsIGNvbnN0cnVjdG9yLCBqc1VuZGVmaW5lZCgpLCBh
cmdzQ291bnQsIGFyZ3MuZGF0YSgpKTsKIApAQCAtMTA0MSw3ICsxMDMyLDcgQEAgSlNPYmplY3Qq
IEludGVycHJldGVyOjpleGVjdXRlQ29uc3RydWN0KAogICAgICAgICBpZiAoaXNKU0NvbnN0cnVj
dCkKICAgICAgICAgICAgIHJlc3VsdCA9IGNvbnN0cnVjdERhdGEuanMuZnVuY3Rpb25FeGVjdXRh
YmxlLT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ29uc3RydWN0KCktPmV4ZWN1dGUoJnZtLCAmcHJvdG9D
YWxsRnJhbWUpOwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IEpTVmFsdWU6
OmRlY29kZShjYWxsVG9OYXRpdmVGdW5jdGlvbihyZWludGVycHJldF9jYXN0PHZvaWQqPihjb25z
dHJ1Y3REYXRhLm5hdGl2ZS5mdW5jdGlvbiksICZ2bS50b3BDYWxsRnJhbWUsICZwcm90b0NhbGxG
cmFtZSkpOworICAgICAgICAgICAgcmVzdWx0ID0gSlNWYWx1ZTo6ZGVjb2RlKGNhbGxUb05hdGl2
ZUZ1bmN0aW9uKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1
bmN0aW9uKSwgJnZtLCAmcHJvdG9DYWxsRnJhbWUpKTsKIAogICAgICAgICAgICAgaWYgKCFjYWxs
RnJhbWUtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJl
c3VsdC5pc09iamVjdCgpKTsKQEAgLTEwNzYsMTEgKzEwNjcsNiBAQCBDYWxsRnJhbWVDbG9zdXJl
IEludGVycHJldGVyOjpwcmVwYXJlRm9yCiAKICAgICBzaXplX3QgYXJnc0NvdW50ID0gYXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXM7CiAKLSAgICBpZiAoVU5MSUtFTFkoIW1fc3RhY2suZW50cnlD
aGVjayhuZXdDb2RlQmxvY2ssIGFyZ3NDb3VudCkpKSB7Ci0gICAgICAgIHRocm93U3RhY2tPdmVy
Zmxvd0Vycm9yKGNhbGxGcmFtZSk7Ci0gICAgICAgIHJldHVybiBDYWxsRnJhbWVDbG9zdXJlKCk7
Ci0gICAgfQotCiAgICAgcHJvdG9DYWxsRnJhbWUtPmluaXQobmV3Q29kZUJsb2NrLCBzY29wZSwg
ZnVuY3Rpb24sIGpzVW5kZWZpbmVkKCksIGFyZ3NDb3VudCwgYXJncyk7CiAgICAgLy8gUmV0dXJu
IHRoZSBzdWNjZXNzZnVsIGNsb3N1cmU6CiAgICAgQ2FsbEZyYW1lQ2xvc3VyZSByZXN1bHQgPSB7
IGNhbGxGcmFtZSwgcHJvdG9DYWxsRnJhbWUsIGZ1bmN0aW9uLCBmdW5jdGlvbkV4ZWN1dGFibGUs
ICZ2bSwgc2NvcGUsIG5ld0NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBhcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcyB9OwpAQCAtMTE4Miw5ICsxMTY4LDYgQEAgSlNWYWx1ZSBJbnRlcnByZXRl
cjo6ZXhlY3V0ZShFdmFsRXhlY3V0YQogCiAgICAgQVNTRVJUKGNvZGVCbG9jay0+bnVtUGFyYW1l
dGVycygpID09IDEpOyAvLyAxIHBhcmFtZXRlciBmb3IgJ3RoaXMnLgogCi0gICAgaWYgKFVOTElL
RUxZKCFtX3N0YWNrLmVudHJ5Q2hlY2soY29kZUJsb2NrLCAxKSkpCi0gICAgICAgIHJldHVybiBj
aGVja2VkUmV0dXJuKHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKGNhbGxGcmFtZSkpOwotCiAgICAg
UHJvdG9DYWxsRnJhbWUgcHJvdG9DYWxsRnJhbWU7CiAgICAgcHJvdG9DYWxsRnJhbWUuaW5pdChj
b2RlQmxvY2ssIHNjb3BlLCAwLCB0aGlzVmFsdWUsIDEpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW50ZXJwcmV0ZXIvSlNTdGFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9KU1N0YWNrLmgJKHJldmlzaW9uIDE2MDkzMikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9KU1N0YWNrLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEwMSw4ICsxMDEsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgUmVnaXN0ZXIqIHN0
YXJ0T2ZGcmFtZUZvcihDYWxsRnJhbWUqKTsKICAgICAgICAgUmVnaXN0ZXIqIHRvcE9mU3RhY2so
KTsKIAotICAgICAgICBib29sIGVudHJ5Q2hlY2soY2xhc3MgQ29kZUJsb2NrKiwgaW50KTsKLQog
ICAgICAgICBDYWxsRnJhbWUqIHB1c2hGcmFtZShjbGFzcyBDb2RlQmxvY2sqLCBKU1Njb3BlKiwg
aW50IGFyZ3NDb3VudCwgSlNPYmplY3QqIGNhbGxlZSk7CiAKICAgICAgICAgdm9pZCBwb3BGcmFt
ZShDYWxsRnJhbWUqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9K
U1N0YWNrSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9KU1N0YWNrSW5saW5lcy5oCShyZXZpc2lvbiAxNjA5MzIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSlNTdGFja0lubGluZXMuaAkod29ya2luZyBjb3B5KQpA
QCAtNTEsMzUgKzUxLDYgQEAgaW5saW5lIFJlZ2lzdGVyKiBKU1N0YWNrOjpzdGFydE9mRnJhbWVG
bwogICAgIHJldHVybiB0b3BPZkZyYW1lRm9yKGNhbGxlckZyYW1lKTsKIH0KIAotaW5saW5lIGJv
b2wgSlNTdGFjazo6ZW50cnlDaGVjayhjbGFzcyBDb2RlQmxvY2sqIGNvZGVCbG9jaywgaW50IGFy
Z3NDb3VudCkKLXsKLSAgICBSZWdpc3Rlciogb2xkRW5kID0gdG9wT2ZTdGFjaygpOwotCi0gICAg
Ly8gRW5zdXJlIHRoYXQgd2UgaGF2ZSBlbm91Z2ggc3BhY2UgZm9yIHRoZSBwYXJhbWV0ZXJzOgot
ICAgIHNpemVfdCBwYWRkZWRBcmdzQ291bnQgPSBhcmdzQ291bnQ7Ci0gICAgaWYgKGNvZGVCbG9j
aykgewotICAgICAgICBzaXplX3QgbnVtUGFyYW1ldGVycyA9IGNvZGVCbG9jay0+bnVtUGFyYW1l
dGVycygpOwotICAgICAgICBpZiAocGFkZGVkQXJnc0NvdW50IDwgbnVtUGFyYW1ldGVycykKLSAg
ICAgICAgICAgIHBhZGRlZEFyZ3NDb3VudCA9IG51bVBhcmFtZXRlcnM7Ci0gICAgfQotCi0gICAg
UmVnaXN0ZXIqIG5ld0NhbGxGcmFtZVNsb3QgPSBvbGRFbmQgLSBwYWRkZWRBcmdzQ291bnQgLSAo
MiAqIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemUpICsgMTsKLQotI2lmIEVOQUJMRShERUJV
R19KU1NUQUNLKQotICAgIG5ld0NhbGxGcmFtZVNsb3QgLT0gSlNTdGFjazo6RmVuY2VTaXplOwot
I2VuZGlmCi0KLSAgICBSZWdpc3RlciogdG9wT2ZTdGFjayA9IG5ld0NhbGxGcmFtZVNsb3Q7Ci0g
ICAgaWYgKCEhY29kZUJsb2NrKQotICAgICAgICB0b3BPZlN0YWNrICs9IGNvZGVCbG9jay0+c3Rh
Y2tQb2ludGVyT2Zmc2V0KCk7Ci0KLSAgICAvLyBFbnN1cmUgdGhhdCB3ZSBoYXZlIHRoZSBuZWVk
ZWQgc3RhY2sgY2FwYWNpdHkgdG8gcHVzaCB0aGUgbmV3IGZyYW1lOgotICAgIGlmICghZ3Jvdyh0
b3BPZlN0YWNrKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KIGlubGluZSBDYWxsRnJhbWUqIEpTU3RhY2s6OnB1c2hGcmFtZShjbGFzcyBDb2RlQmxvY2sq
IGNvZGVCbG9jaywgSlNTY29wZSogc2NvcGUsIGludCBhcmdzQ291bnQsIEpTT2JqZWN0KiBjYWxs
ZWUpCiB7CiAgICAgQVNTRVJUKCEhc2NvcGUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRDb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVENvZGUuY3BwCShyZXZpc2lvbiAxNjA5MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVENvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3IEBAIEpJVENvZGU6
On5KSVRDb2RlKCkKIAogSlNWYWx1ZSBKSVRDb2RlOjpleGVjdXRlKFZNKiB2bSwgUHJvdG9DYWxs
RnJhbWUqIHByb3RvQ2FsbEZyYW1lKQogewotICAgIEpTVmFsdWUgcmVzdWx0ID0gSlNWYWx1ZTo6
ZGVjb2RlKGNhbGxUb0phdmFTY3JpcHQoZXhlY3V0YWJsZUFkZHJlc3MoKSwgJnZtLT50b3BDYWxs
RnJhbWUsIHByb3RvQ2FsbEZyYW1lKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBKU1ZhbHVlOjpk
ZWNvZGUoY2FsbFRvSmF2YVNjcmlwdChleGVjdXRhYmxlQWRkcmVzcygpLCB2bSwgcHJvdG9DYWxs
RnJhbWUpKTsKICAgICByZXR1cm4gdm0tPmV4Y2VwdGlvbigpID8ganNOdWxsKCkgOiByZXN1bHQ7
CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmgJKHJldmlzaW9uIDE2
MDkzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuaAkod29ya2luZyBj
b3B5KQpAQCAtMzcsMTQgKzM3LDEzIEBAIG5hbWVzcGFjZSBKU0MgewogI2lmIEVOQUJMRShKSVQp
CiAKICNpZiBPUyhXSU5ET1dTKQotY2xhc3MgRXhlY1N0YXRlOwotY2xhc3MgUmVnaXN0ZXI7CiBz
dHJ1Y3QgUHJvdG9DYWxsRnJhbWU7CitjbGFzcyBWTTsKIAogZXh0ZXJuICJDIiB7Ci0gICAgRW5j
b2RlZEpTVmFsdWUgY2FsbFRvSmF2YVNjcmlwdCh2b2lkKiwgRXhlY1N0YXRlKiosIFByb3RvQ2Fs
bEZyYW1lKik7CisgICAgRW5jb2RlZEpTVmFsdWUgY2FsbFRvSmF2YVNjcmlwdCh2b2lkKiwgVk0q
LCBQcm90b0NhbGxGcmFtZSopOworICAgIEVuY29kZWRKU1ZhbHVlIGNhbGxUb05hdGl2ZUZ1bmN0
aW9uKHZvaWQqLCBWTSosIFByb3RvQ2FsbEZyYW1lKik7CiAgICAgdm9pZCBoYW5kbGVVbmNhdWdo
dEV4Y2VwdGlvbigpOwotICAgIEVuY29kZWRKU1ZhbHVlIGNhbGxUb05hdGl2ZUZ1bmN0aW9uKHZv
aWQqLCBFeGVjU3RhdGUqKiwgUHJvdG9DYWxsRnJhbWUqKTsKIH0KICNlbmRpZgogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzTVNWQzY0LmFzbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzTVNWQzY0LmFzbQkocmV2aXNpb24g
MTYwOTMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVic01TVkM2NC5hc20J
KHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDE2IEBAIGNhbGxUb0phdmFTY3JpcHQgUFJPQwog
ICAgIDs7IEZJWE1FOiBUaGlzIGZ1bmN0aW9uIGhhcyBub3QgYmVlbiB0ZXN0ZWQgYXMgdGhlIFdp
biA2NCBwb3J0IGRvZXNuJ3QgY3VycmVudGx5IHVzZSB0aGUgSklULgogICAgIDs7IEl0IGlzIGJl
bGlldmVkIHRvIGJlIGFuIGFjY3VyYXRlIGFkYXB0YXRpb24gb2YgdGhlIGFzc2VtYmx5IGNyZWF0
ZWQgYnkgdGhlIGxsaW50IHN0dWIgb2YgdGhlCiAgICAgOzsgc2FtZSBuYW1lIHdpdGggY2hhbmdl
cyBmb3IgYWdydW1lbnQgcmVnaXN0ZXIgZGlmZmVyZW5jZXMuCisKKyAgICA7OyBGSVhNRTogVGhp
cyBjb2RlIGlzIHN0YWxlIGFuZCBuZWVkIHRvIGJlIHVwZGF0ZWQgZm9yIHRoZSBmb2xsb3dpbmc6
CisgICAgOzsgMS4gVGhlIHByb3RvdHlwZSBpcyBub3c6CisgICAgOzsgICAgICAgIEVuY29kZWRK
U1ZhbHVlIGNhbGxUb0phdmFTY3JpcHQodm9pZCogY29kZSwgVk0qLCBQcm90b0NhbGxGcmFtZSop
CisgICAgOzsgICAgVGhlIGNvZGUgYmVsb3cgd2FzIGltcGxlbWVudGVkIGZvciBhIHByb3RvdHlw
ZSBvZjoKKyAgICA7OyAgICAgICAgRW5jb2RlZEpTVmFsdWUgY2FsbFRvSmF2YVNjcmlwdCh2b2lk
KiBjb2RlLCBFeGVjU3RhdGUqKiwgUHJvdG9DYWxsRnJhbWUqLCBSZWdpc3RlciopCisgICAgOzsK
KyAgICA7OyAyLiBOZWVkIHRvIGFkZCBjb2RlIGZvciBhIHN0YWNrIGNoZWNrIHRvIGVuc3VyZSB0
aGF0IHdlIGhhdmUgZW5vdWdoIHN0YWNrIHNwYWNlCisgICAgOzsgICAgZm9yIGluY29taW5nIGFy
Z3MuCisKICAgICBpbnQgMwogICAgIG1vdiByMTAsIHF3b3JkIHB0cltyc3BdCiAgICAgcHVzaCBy
YnAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnNYODYuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzWDg2LmgJKHJldmlzaW9u
IDE2MDkzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnNYODYuaAkod29y
a2luZyBjb3B5KQpAQCAtMjA2LDYgKzIwNiwxNiBAQCBleHRlcm4gIkMiIHsKIAogICAgIC8vIEZJ
WE1FOiBTaW5jZSBXaW5kb3dzIGRvZXNuJ3QgdXNlIHRoZSBMTEludCwgd2UgaGF2ZSBpbmxpbmUg
c3R1YnMgaGVyZS4KICAgICAvLyBVbnRpbCB0aGUgTExJbnQgaXMgY2hhbmdlZCB0byBzdXBwb3J0
IFdpbmRvd3MsIHRoZXNlIHN0dWIgbmVlZHMgdG8gYmUgdXBkYXRlZC4KKworICAgIC8vIEZJWE1F
OiBUaGlzIGNvZGUgaXMgc3RhbGUgYW5kIG5lZWQgdG8gYmUgdXBkYXRlZCBmb3IgdGhlIGZvbGxv
d2luZzoKKyAgICAvLyAxLiBUaGUgcHJvdG90eXBlIGlzIG5vdzoKKyAgICAvLyAgICAgICAgRW5j
b2RlZEpTVmFsdWUgY2FsbFRvSmF2YVNjcmlwdCh2b2lkKiBjb2RlLCBWTSosIFByb3RvQ2FsbEZy
YW1lKikKKyAgICAvLyAgICBJJ3ZlIGxlZnQgdGhlIG9sZCBwcm90b3R5cGUgaW4gcGxhY2UgdG8g
Z2l2ZSBjb250ZXh0IGZvciB3aGF0IHRoZSBpbXBsZW1lbnRhdGlvbgorICAgIC8vICAgIGJlbG93
IGlzIGRvaW5nLgorICAgIC8vCisgICAgLy8gMi4gTmVlZCB0byBhZGQgY29kZSBmb3IgYSBzdGFj
ayBjaGVjayB0byBlbnN1cmUgdGhhdCB3ZSBoYXZlIGVub3VnaCBzdGFjayBzcGFjZQorICAgIC8v
ICAgIGZvciBpbmNvbWluZyBhcmdzLgorICAgIAogICAgIF9fZGVjbHNwZWMobmFrZWQpIEVuY29k
ZWRKU1ZhbHVlIGNhbGxUb0phdmFTY3JpcHQodm9pZCogY29kZSwgRXhlY1N0YXRlKiosIFByb3Rv
Q2FsbEZyYW1lKiwgUmVnaXN0ZXIqKQogICAgIHsKICAgICAgICAgX19hc20gewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCShyZXZpc2lv
biAxNjA5MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSw3IEBACiAjaW5jbHVkZSAiTG93TGV2ZWxJ
bnRlcnByZXRlci5oIgogI2luY2x1ZGUgIk9iamVjdENvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAi
T3BlcmF0aW9ucy5oIgorI2luY2x1ZGUgIlByb3RvQ2FsbEZyYW1lLmgiCiAjaW5jbHVkZSAiU3Ry
dWN0dXJlUmFyZURhdGFJbmxpbmVzLmgiCiAjaW5jbHVkZSA8d3RmL1N0cmluZ1ByaW50U3RyZWFt
Lmg+CiAKQEAgLTEzODgsNiArMTM4OSwxNCBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3Bh
dGhfcHV0X3RvX3NjCiAgICAgTExJTlRfRU5EKCk7CiB9CiAKK3ZvaWQgbGxpbnRfdGhyb3dfc3Rh
Y2tfb3ZlcmZsb3dfZXJyb3IoVk0qIHZtLCBQcm90b0NhbGxGcmFtZSogcHJvdG9GcmFtZSkKK3sK
KyAgICBFeGVjU3RhdGUqIGV4ZWMgPSB2bS0+dG9wQ2FsbEZyYW1lOworICAgIGlmICghZXhlYykK
KyAgICAgICAgZXhlYyA9IHByb3RvRnJhbWUtPnNjb3BlKCktPmdsb2JhbE9iamVjdCgpLT5nbG9i
YWxFeGVjKCk7CisgICAgdGhyb3dTdGFja092ZXJmbG93RXJyb3IoZXhlYyk7Cit9CisKIH0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpMTEludAogCiAjZW5kaWYgLy8gRU5BQkxFKExMSU5UKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmgJKHJldmlzaW9u
IDE2MDkzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjbGFz
cyBFeGVjU3RhdGU7CiBzdHJ1Y3QgSW5zdHJ1Y3Rpb247CitzdHJ1Y3QgUHJvdG9DYWxsRnJhbWU7
CiAKIG5hbWVzcGFjZSBMTEludCB7CiAKQEAgLTEyMiw2ICsxMjMsNyBAQCBMTElOVF9TTE9XX1BB
VEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2hhCiBMTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0wo
c2xvd19wYXRoX3Jlc29sdmVfc2NvcGUpOwogTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNs
b3dfcGF0aF9nZXRfZnJvbV9zY29wZSk7CiBMTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xv
d19wYXRoX3B1dF90b19zY29wZSk7CitleHRlcm4gIkMiIHZvaWQgbGxpbnRfdGhyb3dfc3RhY2tf
b3ZlcmZsb3dfZXJyb3IoVk0qLCBQcm90b0NhbGxGcmFtZSopOwogCiB9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6TExJbnQKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50VGh1
bmtzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50VGh1
bmtzLmgJKHJldmlzaW9uIDE2MDkzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
TEludFRodW5rcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwxNCArMzQsMTIgQEAKIAogbmFtZXNw
YWNlIEpTQyB7CiAKLWNsYXNzIEV4ZWNTdGF0ZTsKLWNsYXNzIFJlZ2lzdGVyOwogY2xhc3MgVk07
CiBzdHJ1Y3QgUHJvdG9DYWxsRnJhbWU7CiAKIGV4dGVybiAiQyIgewotICAgIEVuY29kZWRKU1Zh
bHVlIGNhbGxUb0phdmFTY3JpcHQodm9pZCosIEV4ZWNTdGF0ZSoqLCBQcm90b0NhbGxGcmFtZSop
OwotICAgIEVuY29kZWRKU1ZhbHVlIGNhbGxUb05hdGl2ZUZ1bmN0aW9uKHZvaWQqLCBFeGVjU3Rh
dGUqKiwgUHJvdG9DYWxsRnJhbWUqKTsKKyAgICBFbmNvZGVkSlNWYWx1ZSBjYWxsVG9KYXZhU2Ny
aXB0KHZvaWQqLCBWTSosIFByb3RvQ2FsbEZyYW1lKik7CisgICAgRW5jb2RlZEpTVmFsdWUgY2Fs
bFRvTmF0aXZlRnVuY3Rpb24odm9pZCosIFZNKiwgUHJvdG9DYWxsRnJhbWUqKTsKICNpZiBFTkFC
TEUoSklUKQogICAgIHZvaWQgaGFuZGxlVW5jYXVnaHRFeGNlcHRpb24oKTsKICNlbmRpZgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJw
cmV0ZXI2NC5hc20JKHJldmlzaW9uIDE2MDkzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0xNTEsOSAr
MTUxLDggQEAgZW5kCiBtYWNybyBkb0NhbGxUb0phdmFTY3JpcHQobWFrZUNhbGwpCiAgICAgaWYg
WDg2XzY0CiAgICAgICAgIGNvbnN0IGVudHJ5ID0gdDUKLSAgICAgICAgY29uc3Qgdm1Ub3BDYWxs
RnJhbWUgPSB0NAorICAgICAgICBjb25zdCB2bSA9IHQ0CiAgICAgICAgIGNvbnN0IHByb3RvQ2Fs
bEZyYW1lID0gdDEKLSAgICAgICAgY29uc3QgdG9wT2ZTdGFjayA9IHQyCiAKICAgICAgICAgY29u
c3QgcHJldmlvdXNDRlIgPSB0MAogICAgICAgICBjb25zdCBwcmV2aW91c1BDID0gdDYKQEAgLTE2
Miw5ICsxNjEsOCBAQCBtYWNybyBkb0NhbGxUb0phdmFTY3JpcHQobWFrZUNhbGwpCiAgICAgICAg
IGNvbnN0IHRlbXAzID0gdDYKICAgICBlbHNpZiBBUk02NAogICAgICAgICBjb25zdCBlbnRyeSA9
IGEwCi0gICAgICAgIGNvbnN0IHZtVG9wQ2FsbEZyYW1lID0gYTEKKyAgICAgICAgY29uc3Qgdm0g
PSBhMQogICAgICAgICBjb25zdCBwcm90b0NhbGxGcmFtZSA9IGEyCi0gICAgICAgIGNvbnN0IHRv
cE9mU3RhY2sgPSBhMwogCiAgICAgICAgIGNvbnN0IHByZXZpb3VzQ0ZSID0gdDQKICAgICAgICAg
Y29uc3QgcHJldmlvdXNQQyA9IGxyCkBAIC0xODEsMTIgKzE3OSwxNCBAQCBtYWNybyBkb0NhbGxU
b0phdmFTY3JpcHQobWFrZUNhbGwpCiAKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCh0
ZW1wMiwgMHhiYWQwZGMwMSkKIAotICAgICMgQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgdGhlIHNl
bnRpbmVsIGZyYW1lLgorICAgICMgVGhlIHN0YWNrIGhvc3Qgem9uZSBlbnN1cmVzIHRoYXQgd2Ug
aGF2ZSBhZGVxdWF0ZSBzcGFjZSBmb3IgdGhlCisgICAgIyBWTUVudHJ5U2VudGluZWxGcmFtZS4g
UHJvY2VlZCB3aXRoIGFsbG9jYXRpbmcgYW5kIGluaXRpYWxpemluZyB0aGUKKyAgICAjIHNlbnRp
bmVsIGZyYW1lLgogICAgIG1vdmUgc3AsIGNmcgogICAgIHN1YnAgQ2FsbEZyYW1lSGVhZGVyU2xv
dHMqOCwgY2ZyCiAgICAgc3RvcmVwIDAsIEFyZ3VtZW50Q291bnRbY2ZyXQotICAgIHN0b3JlcCB2
bVRvcENhbGxGcmFtZSwgQ2FsbGVlW2Nmcl0KLSAgICBsb2FkcCBbdm1Ub3BDYWxsRnJhbWVdLCB0
ZW1wMgorICAgIHN0b3JlcCB2bSwgQ2FsbGVlW2Nmcl0KKyAgICBsb2FkcCBWTTo6dG9wQ2FsbEZy
YW1lW3ZtXSwgdGVtcDIKICAgICBzdG9yZXAgdGVtcDIsIFNjb3BlQ2hhaW5bY2ZyXQogICAgIHN0
b3JlcCAxLCBDb2RlQmxvY2tbY2ZyXQogICAgIHN0b3JlcCBwcmV2aW91c1BDLCBSZXR1cm5QQ1tj
ZnJdCkBAIC0xOTUsOCArMTk1LDI3IEBAIG1hY3JvIGRvQ2FsbFRvSmF2YVNjcmlwdChtYWtlQ2Fs
bCkKICAgICBsb2FkaSBQcm90b0NhbGxGcmFtZTo6cGFkZGVkQXJnQ291bnRbcHJvdG9DYWxsRnJh
bWVdLCB0ZW1wMgogICAgIGFkZHAgQ2FsbEZyYW1lSGVhZGVyU2xvdHMsIHRlbXAyLCB0ZW1wMgog
ICAgIGxzaGlmdHAgMywgdGVtcDIKLSAgICBzdWJwIGNmciwgdGVtcDIsIHNwCisgICAgc3VicCBj
ZnIsIHRlbXAyLCB0ZW1wMQogCisgICAgIyBFbnN1cmUgdGhhdCB3ZSBoYXZlIGVub3VnaCBhZGRp
dGlvbmFsIHN0YWNrIGNhcGFjaXR5IGZvciB0aGUgaW5jb21pbmcgYXJncywKKyAgICAjIGFuZCB0
aGUgZnJhbWUgZm9yIHRoZSBKUyBjb2RlIHdlJ3JlIGV4ZWN1dGluZy4gV2UgbmVlZCB0byBkbyB0
aGlzIGNoZWNrCisgICAgIyBiZWZvcmUgd2Ugc3RhcnQgY29weWluZyB0aGUgYXJncyBmcm9tIHRo
ZSBwcm90b0NhbGxGcmFtZSBiZWxvdy4KKyAgICBicGFlcSB0ZW1wMSwgVk06Om1fanNTdGFja0xp
bWl0W3ZtXSwgLnN0YWNrSGVpZ2h0T0sKKworICAgIG1vdmUgY2ZyLCBzcAorCisgICAgaWYgQ19M
T09QCisgICAgIyBGSVhNRTogTmVlZCB0byBjYWxsIHN0YWNrIGNoZWNrIGhlcmUgdG8gc2VlIGlm
IHdlIGNhbiBncm93IHRoZSBzdGFjay4KKyAgICAjIFdpbGwgbmVlZCB0byBwcmVzZXJ2ZSByZWdp
c3RlcnMgc28gdGhhdCB3ZSBjYW4gcmVjb3ZlciBpZiB3ZSBkbyBub3QgZW5kCisgICAgIyB1cCB0
aHJvd2luZyBhIFN0YWNrT3ZlcmZsb3dFcnJvci4KKyAgICBlbmQKKworICAgIGNDYWxsMihfbGxp
bnRfdGhyb3dfc3RhY2tfb3ZlcmZsb3dfZXJyb3IsIHZtLCBwcm90b0NhbGxGcmFtZSkKKyAgICBj
YWxsVG9KYXZhU2NyaXB0RXBpbG9ndWUoKQorICAgIHJldAorCisuc3RhY2tIZWlnaHRPSzoKKyAg
ICBtb3ZlIHRlbXAxLCBzcAogICAgIG1vdmUgNSwgdGVtcDEKIAogLmNvcHlIZWFkZXJMb29wOgpA
QCAtMjI4LDcgKzI0Nyw3IEBAIG1hY3JvIGRvQ2FsbFRvSmF2YVNjcmlwdChtYWtlQ2FsbCkKICAg
ICBqbXAgLmNvcHlBcmdzTG9vcAogCiAuY29weUFyZ3NEb25lOgotICAgIHN0b3JlcCBzcCwgW3Zt
VG9wQ2FsbEZyYW1lXQorICAgIHN0b3JlcCBzcCwgVk06OnRvcENhbGxGcmFtZVt2bV0KIAogICAg
IG1vdmUgMHhmZmZmMDAwMDAwMDAwMDAwLCBjc3IxCiAgICAgYWRkcCAyLCBjc3IxLCBjc3IyCkBA
IC0yNDMsOSArMjYyLDkgQEAgbWFjcm8gZG9DYWxsVG9KYXZhU2NyaXB0KG1ha2VDYWxsKQogICAg
IGxvYWRwIENhbGxlckZyYW1lW2Nmcl0sIGNmcgogCiAuY2FsbGVlRnJhbWVQb3BwZWQ6Ci0gICAg
bG9hZHAgQ2FsbGVlW2Nmcl0sIHRlbXAyICMgVk0udG9wQ2FsbEZyYW1lCi0gICAgbG9hZHAgU2Nv
cGVDaGFpbltjZnJdLCB0ZW1wMwotICAgIHN0b3JlcCB0ZW1wMywgW3RlbXAyXQorICAgIGxvYWRw
IENhbGxlZVtjZnJdLCB0ZW1wMiAjIFZNCisgICAgbG9hZHAgU2NvcGVDaGFpbltjZnJdLCB0ZW1w
MyAjIHByZXZpb3VzIHRvcENhbGxGcmFtZQorICAgIHN0b3JlcCB0ZW1wMywgVk06OnRvcENhbGxG
cmFtZVt0ZW1wMl0KIAogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KHRlbXAzLCAweGJh
ZDBkYzA0KQogCkBAIC0yODUsOSArMzA0LDkgQEAgX2hhbmRsZVVuY2F1Z2h0RXhjZXB0aW9uOgog
ICAgICMgcmV0dXJuaW5nIHRvIHRoZSBjYWxsZXIgQyBmcmFtZS4KICAgICBsb2FkcCBDYWxsZXJG
cmFtZVtjZnJdLCBjZnIKIAotICAgIGxvYWRwIENhbGxlZVtjZnJdLCB0MyAjIFZNLnRvcENhbGxG
cmFtZQotICAgIGxvYWRwIFNjb3BlQ2hhaW5bY2ZyXSwgdDYKLSAgICBzdG9yZXAgdDYsIFt0M10K
KyAgICBsb2FkcCBDYWxsZWVbY2ZyXSwgdDMgIyBWTQorICAgIGxvYWRwIFNjb3BlQ2hhaW5bY2Zy
XSwgdDYgIyBwcmV2aW91cyB0b3BDYWxsRnJhbWUKKyAgICBzdG9yZXAgdDYsIFZNOjp0b3BDYWxs
RnJhbWVbdDNdCiAKICAgICBjYWxsVG9KYXZhU2NyaXB0RXBpbG9ndWUoKQogICAgIHJldAo=
</data>
<flag name="review"
          id="243466"
          type_id="1"
          status="+"
          setter="msaboff"
    />
          </attachment>
      

    </bug>

</bugzilla>