<?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>126393</bug_id>
          
          <creation_ts>2014-01-02 11:38:08 -0800</creation_ts>
          <short_desc>CStack: Get the C Loop LLINT to build again.</short_desc>
          <delta_ts>2014-01-02 15:56:29 -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>126392</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>963804</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-01-02 11:38:08 -0800</bug_when>
    <thetext>As a first step towards resurrecting the C Loop LLINT, let’s get it to build again.  The goal here is simply to resolve build issues, and not necessarily to get it to run yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>963835</commentid>
    <comment_count>1</comment_count>
      <attachid>220241</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-01-02 12:28:43 -0800</bug_when>
    <thetext>Created attachment 220241
the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>963836</commentid>
    <comment_count>2</comment_count>
      <attachid>220241</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-01-02 12:32:06 -0800</bug_when>
    <thetext>Comment on attachment 220241
the patch.

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

&gt; Source/JavaScriptCore/llint/LLIntCLoop.h:44
&gt; +    static JSValue execute(OpcodeID entryOpcodeID, void* executableAddress, VM*, ProtoCallFrame*, bool isInitializationPass = false);    

Will remove excess spaces at the end before landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>963840</commentid>
    <comment_count>3</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-01-02 12:39:15 -0800</bug_when>
    <thetext>Landed in r161219 on the jsCStack branch: &lt;http://trac.webkit.org/r161219&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>963866</commentid>
    <comment_count>4</comment_count>
      <attachid>220241</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2014-01-02 13:44:10 -0800</bug_when>
    <thetext>Comment on attachment 220241
the patch.

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

r-

It seems to me that callToJavaScript should be calling the C Loop interpreter and not the other way around.  By having CLoop::execute() call into callToJavaScript (renamed for the CLoop in this patch to _llint_call_to_javascript) the CLoop is diverging from the LLInt.  CLoop::execute() is the entry point for the C Loop LLInt and that is what callToJavaScript should call.

This patch also breaks 4 tests when compiled X86-64:
** The following JSC stress test failures have been introduced:
	jsc-layout-tests.yaml/js/script-tests/function-apply-aliased.js.layout
	jsc-layout-tests.yaml/js/script-tests/function-apply-aliased.js.layout-no-llint
	jsc-layout-tests.yaml/js/script-tests/function-apply-aliased.js.layout-no-cjit
	jsc-layout-tests.yaml/js/script-tests/function-apply-aliased.js.layout-dfg-eager-no-cjit

&gt; Source/JavaScriptCore/llint/LLIntThunks.cpp:97
&gt; +EncodedJSValue callToJavaScript(void* executableAddress, VM* vm, ProtoCallFrame* protoCallFrame)

This should be renamed to cLoopCallToJavaScript() or callToJavaScriptCLoop() and don&apos;t rename callToJavaScript().

&gt; Source/JavaScriptCore/llint/LLIntThunks.cpp:103
&gt; +EncodedJSValue callToNativeFunction(void* executableAddress, VM* vm, ProtoCallFrame* protoCallFrame)

Same comment as callToJavaScript above.  Rename this function not the one in LowLevelInterpreter.asm

&gt; Source/JavaScriptCore/llint/LowLevelInterpreter.asm:475
&gt; +_llint_call_to_javascript:

Why a different name for the C Loop?

&gt; Source/JavaScriptCore/llint/LowLevelInterpreter.asm:483
&gt; +_llint_call_to_native_function:

Ditto.

&gt; Source/JavaScriptCore/llint/LowLevelInterpreter.cpp:247
&gt; +JSValue CLoop::execute(OpcodeID entryOpcodeID, void* executableAddress, VM* vm, ProtoCallFrame* protoCallFrame, bool isInitializationPass)

I don&apos;t like that the C Loop interpreter uses the ProtoCallFrame.  We want it to use a CallFrame just like the LLInt and other engines.

&gt; Source/JavaScriptCore/offlineasm/cloop.rb:74
&gt; +            &quot;t0&quot;

Move the when &quot;t0&quot; to here as well.

&gt; Source/JavaScriptCore/offlineasm/cloop.rb:75
&gt;          when &quot;a1&quot;

Move the when &quot;t1&quot; to here as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>963910</commentid>
    <comment_count>5</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-01-02 14:54:13 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 220241 [details])
&gt; It seems to me that callToJavaScript should be calling the C Loop interpreter and not the other way around.  By having CLoop::execute() call into callToJavaScript (renamed for the CLoop in this patch to _llint_call_to_javascript) the CLoop is diverging from the LLInt.  CLoop::execute() is the entry point for the C Loop LLInt and that is what callToJavaScript should call.

The devil is in the details:

1. Interpreter.cpp and JITCode.cpp calls callToJavaScript and callToNativeFunction directly.  I can either turn callToJavaScript into C functions that know how to enter the C Loop LLINT, or I can add #if ENABLE(LLINT_C_LOOP) to all the places that currently expect callToJavaScript and callToNativeFunction to be call-able.  I opted for the former, which I think is cleaner and keep the LLINT implementation details (and I consider the C Loop LLINT part of the LLINT) in the LLINT.  I don’t like adding #if’s outside the LLINT for this if I can help it.  In the end, the decision is subjective.  Do you insist that I add #if ENABLE(LLINT_C_LOOP) in Interpreter.cpp and JITCode.cpp instead?

2. callToJavaScript does a lot of initialization work that I don’t want to duplicate in a C function.  This way, if we fix the code in LLINT assembly, it is fixed, and I won’t have to redo the work.  It also means that the CLoop LLINT will more closely match the semantics of the assembly LLINT, which is good for all sorts of reasons.

In order to execute the “assembly” code in callToJavaScript, that necessarily means that CLoop::execute() should be calling callToJavaScript instead of the other way around.  Note: the correct way to think of CLoop::execute() is that it is a CPU emulator that can execute all of the “assembly” code in the LowLevelInterpreter*.asm files. 


&gt; This patch also breaks 4 tests when compiled X86-64:
&gt; ** The following JSC stress test failures have been introduced:
&gt;     jsc-layout-tests.yaml/js/script-tests/function-apply-aliased.js.layout
&gt;     jsc-layout-tests.yaml/js/script-tests/function-apply-aliased.js.layout-no-llint
&gt;     jsc-layout-tests.yaml/js/script-tests/function-apply-aliased.js.layout-no-cjit
&gt;     jsc-layout-tests.yaml/js/script-tests/function-apply-aliased.js.layout-dfg-eager-no-cjit

The breakage is not due to this patch, though this patch did uncover the latent bug that caused it.  The breakage is fixed in https://bugs.webkit.org/show_bug.cgi?id=126405.

&gt; &gt; Source/JavaScriptCore/llint/LLIntThunks.cpp:97
&gt; &gt; +EncodedJSValue callToJavaScript(void* executableAddress, VM* vm, ProtoCallFrame* protoCallFrame)
&gt; 
&gt; This should be renamed to cLoopCallToJavaScript() or callToJavaScriptCLoop() and don&apos;t rename callToJavaScript().

See reason above.  I think we will want to preserve the semantics of being able to call callToJavaScript().  In order to do that, I need to rename it.

&gt; &gt; Source/JavaScriptCore/llint/LLIntThunks.cpp:103
&gt; &gt; +EncodedJSValue callToNativeFunction(void* executableAddress, VM* vm, ProtoCallFrame* protoCallFrame)
&gt; 
&gt; Same comment as callToJavaScript above.  Rename this function not the one in LowLevelInterpreter.asm

See reason above.  I think we will want to preserve the semantics of being able to call callToNativeFunction().  In order to do that, I need to rename it.
 
&gt; &gt; Source/JavaScriptCore/llint/LowLevelInterpreter.asm:475
&gt; &gt; +_llint_call_to_javascript:
&gt; 
&gt; Why a different name for the C Loop?

See reason above.  I think we will want to preserve the semantics of being able to call callToJavaScript().  In order to do that, I need to rename it.
 
&gt; &gt; Source/JavaScriptCore/llint/LowLevelInterpreter.asm:483
&gt; &gt; +_llint_call_to_native_function:
&gt; 
&gt; Ditto.

See reason above.  I think we will want to preserve the semantics of being able to call callToJavaScript().  In order to do that, I need to rename it.
 
&gt; &gt; Source/JavaScriptCore/llint/LowLevelInterpreter.cpp:247
&gt; &gt; +JSValue CLoop::execute(OpcodeID entryOpcodeID, void* executableAddress, VM* vm, ProtoCallFrame* protoCallFrame, bool isInitializationPass)
&gt; 
&gt; I don&apos;t like that the C Loop interpreter uses the ProtoCallFrame.  We want it to use a CallFrame just like the LLInt and other engines.

At the entry point to the LLINT and other engines, we pass in the ProtoCallFrame.  doCallToJavaScript then takes care of doing the stack checks and populating the CallFrame.  I am doing the exact same thing here.

Again, the goal is so that the C Loop LLINT works as much the same way as the assembly LLINT as possible.  In this case, I’m trying to make it use the code for doCallToJavaScript and not rewrite a mirrored version in C++.

&gt; &gt; Source/JavaScriptCore/offlineasm/cloop.rb:74
&gt; &gt; +            &quot;t0&quot;
&gt; 
&gt; Move the when &quot;t0&quot; to here as well.
&gt; 
&gt; &gt; Source/JavaScriptCore/offlineasm/cloop.rb:75
&gt; &gt;          when &quot;a1&quot;
&gt; 
&gt; Move the when &quot;t1&quot; to here as well.

OK, will fix these.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>963912</commentid>
    <comment_count>6</comment_count>
      <attachid>220259</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-01-02 14:57:50 -0800</bug_when>
    <thetext>Created attachment 220259
follow up patch to address feedback for cloop.rb</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>963941</commentid>
    <comment_count>7</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-01-02 15:56:29 -0800</bug_when>
    <thetext>Thanks for the review.  Review status update and follow up patch landed in r161238: &lt;http://trac.webkit.org/r161238&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>220241</attachid>
            <date>2014-01-02 12:28:43 -0800</date>
            <delta_ts>2014-01-02 13:44:10 -0800</delta_ts>
            <desc>the patch.</desc>
            <filename>bug-126393.patch</filename>
            <type>text/plain</type>
            <size>21872</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTYxMjE0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgzIEBA
CisyMDE0LTAxLTAyICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBD
U3RhY2s6IEdldCB0aGUgQyBMb29wIExMSU5UIHRvIGJ1aWxkIGFnYWluLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI2MzkzLgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogaml0L0pJVENvZGUuY3BwOgor
ICAgICAgICAoSlNDOjpEaXJlY3RKSVRDb2RlOjphZGRyZXNzRm9yQ2FsbCk6CisgICAgICAgIC0g
I2lmIEVOQUJMRShKSVQpIG91dCB0aGUgdXNlIG9mIFJlZ2lzdGVyUHJlc2VydmF0aW9uV3JhcHBl
cnMuCisKKyAgICAgICAgKiBsbGludC9MTEludENMb29wLmNwcDoKKyAgICAgICAgKEpTQzo6TExJ
bnQ6OkNMb29wOjppbml0aWFsaXplKToKKyAgICAgICAgLSBVcGRhdGUgQ0xvb3A6OmluaXRpYWxp
emUoKSB0byBjYWxsIHRoZSBuZXcgQ0xvb3A6OmV4ZWN1dGUoKS4KKworICAgICAgICAqIGxsaW50
L0xMSW50Q0xvb3AuaDoKKyAgICAgICAgLSBDTG9vcDo6ZXhlY3V0ZSgpIG5vdyB0YWtlcyB0aGUg
YXJndW1lbnRzIGZvciBjYWxsVG9KYXZhU2NyaXB0LCBhbmQgaXQKKyAgICAgICAgICBlZmZlY3Rp
dmVseSBhY3RzIGFzIHRoZSBnYXRld2F5IGZvciByZS1lbnRlcmluZyB0aGUgVk0gaW4gcGxhY2Ug
Zm9yCisgICAgICAgICAgY2FsbFRvSmF2YVNjcmlwdCAoYW5kIGNhbGxUb05hdGl2ZUZ1bmN0aW9u
KS4KKworICAgICAgICAgIENMb29wOjpleGVjdXRlKCkgc2hvdWxkIHNldCB1cCB0aGUgIkNQVSIg
ZXhlY3V0aW9uIGVudmlyb25tZW50IGkuZS4KKyAgICAgICAgICBDTG9vcFJlZ2lzdGVycyBzaG91
bGQgYmUgaW5pdGlhbGl6ZWQgd2l0aCB0aGUgaW5jb21pbmcgYXJncywgc3RhY2sKKyAgICAgICAg
ICBwb2ludGVyLCBiYXNlIHBvaW50ZXIsIGFuZCByZXR1cm4gYWRkcmVzcy4gV2UnbGwgdGFrZSBj
YXJlIG9mIHRoaXMKKyAgICAgICAgICBwYXJ0IGluIGEgc3Vic2VxdWVudCBwYXRjaC4KKworICAg
ICAgICAqIGxsaW50L0xMSW50T3Bjb2RlLmg6CisgICAgICAgIC0gQWRkZWQgQyBsb29wIG9ubHkg
bGxpbnQgb3Bjb2RlcyBsbGludF9jYWxsX3RvX2phdmFzY3JpcHQsIGFuZAorICAgICAgICAgIGxs
aW50X2NhbGxfdG9fbmF0aXZlX2Z1bmN0aW9uLiBUaGVzZSB3aWxsIGJlIHVzZWQgYXMgdGhlIG9w
Y29kZUlEIGZvcgorICAgICAgICAgIHRoZSBsbGludCBpbnRlcnByZXRlciBibG9iIGZvciBjYWxs
VG9KYXZhU2NyaXB0IGFuZCBjYWxsVG9OYXRpdmVGdW5jdGlvbi4KKworICAgICAgICAgIE1lYW53
aGlsZSwgdGhlIExMSU5UIHRodW5rIHdpbGwgcHJvdmlkZSBDIGZ1bmN0aW9ucyBmb3IgY2FsbFRv
SmF2YVNjcmlwdAorICAgICAgICAgIGFuZCBjYWxsVG9OYXRpdmVGdW5jdGlvbiB3aGljaCBjYWxs
cyBDTG9vcDo6ZXhlY3V0ZSgpIHdpdGggdGhlIG9wY29kZUlECisgICAgICAgICAgZm9yIGxsaW50
X2NhbGxfdG9famF2YXNjcmlwdCBhbmQgbGxpbnRfY2FsbF90b19uYXRpdmVfZnVuY3Rpb24KKyAg
ICAgICAgICByZXNwZWN0aXZlbHkuCisKKyAgICAgICAgKiBsbGludC9MTEludFNsb3dQYXRocy5j
cHA6CisgICAgICAgIChKU0M6OkxMSW50OjpsbGludF90aHJvd19zdGFja19vdmVyZmxvd19lcnJv
cik6CisgICAgICAgIC0gQ2hhbmdlZCBsbGludF90aHJvd19zdGFja19vdmVyZmxvd19lcnJvcigp
J3MgcmV0dXJuIHR5cGUgc28gdGhhdCBpdAorICAgICAgICAgIGlzIGVhc2llciBmb3IgdGhlIEMg
TG9vcCBMTElOVCB0byBnZW5lcmF0ZSBib2lsZXJwbGF0ZSBjb2RlIHRvIGNhbGwgaXQuCisKKyAg
ICAgICAgICBUaGUgcmV0dXJuIHZhbHVlIGlzIG5vdCB1c2VkIGJ5IGFueW9uZS4gQnV0IHNpbmNl
IHRoaXMgaXMgY29kZSB0aGF0CisgICAgICAgICAgcmFyZWx5IGV4ZWN1dGVkLCB3ZSdsbCBvcHQg
dG8gdGFrZSB0aGlzIHNtYWxsIGhpdCBvZiByZXR1cm5pbmcgYW4KKyAgICAgICAgICB1bnVzZWQg
dmFsdWUgcmF0aGVyIHRoYW4gaGF2aW5nIHRvIHNwaW4gc29tZSB3YXkgdG8gbWFrZSB0aGUgQyBM
b29wCisgICAgICAgICAgb2ZmbGluZWFzbSBzbWFydGVyIG9ubHkgZm9yIGhhbmRsaW5nIHRoaXMg
b25lIGNhc2UuCisKKyAgICAgICAgKiBsbGludC9MTEludFNsb3dQYXRocy5oOgorICAgICAgICAq
IGxsaW50L0xMSW50VGh1bmtzLmNwcDoKKyAgICAgICAgKEpTQzo6Y2FsbFRvSmF2YVNjcmlwdCk6
CisgICAgICAgIChKU0M6OmNhbGxUb05hdGl2ZUZ1bmN0aW9uKToKKyAgICAgICAgLSBVcGRhdGVk
IHRvIGNhbGwgdGhlIG5ldyBDTG9vcDo6ZXhlY3V0ZSgpLgorCisgICAgICAgICAgV2UncmUgZ29p
bmcgdG8gdHJ5IHRvIHVzZSB0aGUgZG9DYWxsVG9KYXZhU2NyaXB0IGNvZGUgZGVmaW5lZCBpbiB0
aGUKKyAgICAgICAgICBMTElOVCBhc3NlbWJseSBpbnN0ZWFkIG9mIHNwaW5uaW5nIG91ciBvd24g
dmVyc2lvbiBpbiBDKysgYXMgd2UgZGlkCisgICAgICAgICAgcHJldmlvdXNseS4KKworICAgICAg
ICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtOgorICAgICAgICAqIGxsaW50L0xvd0xl
dmVsSW50ZXJwcmV0ZXIuY3BwOgorICAgICAgICAoSlNDOjpDTG9vcFJlZ2lzdGVyOjpvcGVyYXRv
ciBFeGVjU3RhdGUqKToKKyAgICAgICAgKEpTQzo6Q0xvb3BSZWdpc3Rlcjo6b3BlcmF0b3IgSW5z
dHJ1Y3Rpb24qKToKKyAgICAgICAgKEpTQzo6Q0xvb3BSZWdpc3Rlcjo6b3BlcmF0b3IgVk0qKToK
KyAgICAgICAgKEpTQzo6Q0xvb3BSZWdpc3Rlcjo6b3BlcmF0b3IgUHJvdG9DYWxsRnJhbWUqKToK
KyAgICAgICAgLSBBZGRlZCB0aGVzZSBjYXN0IG9wZXJhdG9ycyB0byB0aGUgQ0xvb3BSZWdpc3Rl
ciB0byBzaW1wbGlmeSB0aGUgQyBMb29wCisgICAgICAgICAgY2FsbCBzbG93IHBhdGggYm9pbGVy
cGxhdGUuCisKKyAgICAgICAgKEpTQzo6Q0xvb3A6OmV4ZWN1dGUpOgorICAgICAgICAqIGxsaW50
L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc206CisgICAgICAgICogb2ZmbGluZWFzbS9jbG9vcC5y
YjoKKyAgICAgICAgLSBEZWZpbmUgQyBMb29wIHJlZ2lzdGVycyB0byBtYXRjaCBBUk0gYXMgZXhw
ZWN0ZWQgYnkgdGhlIGNvZGUuCisgICAgICAgIC0gUmVwbGFjZWQgYSAjZXJyb3Igd2l0aCBhIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCkuCisgICAgICAgIC0gUmV3b3JrZWQgdGhlIGNhbGwg
c2xvdyBwYXRoIGJvaWxlcnBsYXRlIHRvIHRha2UgYWR2YW50YWdlIG9mIHRoZSBDTG9vcFJlZ2lz
dGVyCisgICAgICAgICAgY2FzdCBvcGVyYXRvcnMuIFdlIG5lZWQgdGhpcyBpbiBvcmRlciB0byBi
ZSBhYmxlIHRvIGNhbGwgc2xvdyBwYXRoIGZ1bmN0aW9ucworICAgICAgICAgIHRoYXQgdGFrZSBk
aWZmZXJlbnQgYXJndW1lbnQgdHlwZXMgZS5nLiBsbGludF90aHJvd19zdGFja19vdmVyZmxvd19l
cnJvcigpLgorCisgICAgICAgICogcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwOgorICAgICAg
ICAoSlNDOjpzZXR1cEFyaXR5Q2hlY2tEYXRhKToKKyAgICAgICAgKiBydW50aW1lL1ZNLmNwcDoK
KyAgICAgICAgKEpTQzo6Vk06OmdldEhvc3RGdW5jdGlvbik6CisgICAgICAgICogcnVudGltZS9W
TUVudHJ5U2NvcGUuY3BwOgorICAgICAgICAoSlNDOjpWTUVudHJ5U2NvcGU6OnJlcXVpcmVkQ2Fw
YWNpdHkpOgorCiAyMDE0LTAxLTAyICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAK
ICAgICAgICAgUmVmYWN0b3IgTExJbnQgQyBzdGFjayBmcmFtZSBtdW5naW5nIGhlbHBlcnMgc28g
dGhhdCAzMi1iaXQgY29kZSBwYXRocyBjYW4gdXNlIHRoZW0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUQ29kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRDb2RlLmNwcAkocmV2aXNpb24gMTYxMjAzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRDb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYxLDEwICsxNjEsMTYg
QEAgSklUQ29kZTo6Q29kZVB0ciBEaXJlY3RKSVRDb2RlOjphZGRyZXNzRgogICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQobV9yZWYpOwogICAgICAgICAgICAgcmV0dXJuIG1fcmVmLmNvZGUoKTsK
ICAgICAgICAgY2FzZSBNdXN0UHJlc2VydmVSZWdpc3RlcnM6IHsKKyNpZiBFTkFCTEUoSklUKQog
ICAgICAgICAgICAgUmVnaXN0ZXJQcmVzZXJ2YXRpb25XcmFwcGVycyogd3JhcHBlcnMgPSBlbnN1
cmVXcmFwcGVycygpOwogICAgICAgICAgICAgaWYgKCF3cmFwcGVycy0+d2l0aG91dEFyaXR5Q2hl
Y2spCiAgICAgICAgICAgICAgICAgd3JhcHBlcnMtPndpdGhvdXRBcml0eUNoZWNrID0gZ2VuZXJh
dGVSZWdpc3RlclByZXNlcnZhdGlvbldyYXBwZXIodm0sIGV4ZWN1dGFibGUsIG1fcmVmLmNvZGUo
KSk7CiAgICAgICAgICAgICByZXR1cm4gd3JhcHBlcnMtPndpdGhvdXRBcml0eUNoZWNrLmNvZGUo
KTsKKyNlbHNlCisgICAgICAgICAgICBVTlVTRURfUEFSQU0odm0pOworICAgICAgICAgICAgVU5V
U0VEX1BBUkFNKGV4ZWN1dGFibGUpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyNlbmRpZgogICAgICAgICB9IH0KICAgICBjYXNlIE11c3RDaGVja0FyaXR5Ogog
ICAgICAgICBzd2l0Y2ggKHJlZ2lzdGVycykgewpAQCAtMTcyLDEwICsxNzgsMTQgQEAgSklUQ29k
ZTo6Q29kZVB0ciBEaXJlY3RKSVRDb2RlOjphZGRyZXNzRgogICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlQobV93aXRoQXJpdHlDaGVjayk7CiAgICAgICAgICAgICByZXR1cm4gbV93aXRoQXJpdHlD
aGVjazsKICAgICAgICAgY2FzZSBNdXN0UHJlc2VydmVSZWdpc3RlcnM6IHsKKyNpZiBFTkFCTEUo
SklUKQogICAgICAgICAgICAgUmVnaXN0ZXJQcmVzZXJ2YXRpb25XcmFwcGVycyogd3JhcHBlcnMg
PSBlbnN1cmVXcmFwcGVycygpOwogICAgICAgICAgICAgaWYgKCF3cmFwcGVycy0+d2l0aEFyaXR5
Q2hlY2spCiAgICAgICAgICAgICAgICAgd3JhcHBlcnMtPndpdGhBcml0eUNoZWNrID0gZ2VuZXJh
dGVSZWdpc3RlclByZXNlcnZhdGlvbldyYXBwZXIodm0sIGV4ZWN1dGFibGUsIG1fd2l0aEFyaXR5
Q2hlY2spOwogICAgICAgICAgICAgcmV0dXJuIHdyYXBwZXJzLT53aXRoQXJpdHlDaGVjay5jb2Rl
KCk7CisjZWxzZQorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyNl
bmRpZgogICAgICAgICB9IH0KICAgICB9CiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludENMb29wLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRDTG9vcC5jcHAJKHJl
dmlzaW9uIDE2MTIwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludENMb29w
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQCBuYW1lc3BhY2UgTExJbnQgewog
CiB2b2lkIENMb29wOjppbml0aWFsaXplKCkKIHsKLSAgICBleGVjdXRlKDAsIGdldE9wY29kZShs
bGludF91bnVzZWQpLCB0cnVlKTsKKyAgICBleGVjdXRlKGxsaW50X3VudXNlZCwgMCwgMCwgMCwg
dHJ1ZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIExMSW50CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTExJbnRDTG9vcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9MTEludENMb29wLmgJKHJldmlzaW9uIDE2MTIwMykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9MTEludENMb29wLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMx
LDcgQEAKICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCiAj
aW5jbHVkZSAiT3Bjb2RlLmgiCisjaW5jbHVkZSAiUHJvdG9DYWxsRnJhbWUuaCIKIAogbmFtZXNw
YWNlIEpTQyB7CiBuYW1lc3BhY2UgTExJbnQgewpAQCAtNDAsNyArNDEsNyBAQCBjb25zdCBPcGNv
ZGVJRCBsbGludF91bnVzZWQgPSBsbGludF9lbmQ7CiBjbGFzcyBDTG9vcCB7CiBwdWJsaWM6CiAg
ICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZSgpOwotICAgIHN0YXRpYyBKU1ZhbHVlIGV4ZWN1dGUo
Q2FsbEZyYW1lKiwgT3Bjb2RlIGVudHJ5T3Bjb2RlLCBib29sIGlzSW5pdGlhbGl6YXRpb25QYXNz
ID0gZmFsc2UpOworICAgIHN0YXRpYyBKU1ZhbHVlIGV4ZWN1dGUoT3Bjb2RlSUQgZW50cnlPcGNv
ZGVJRCwgdm9pZCogZXhlY3V0YWJsZUFkZHJlc3MsIFZNKiwgUHJvdG9DYWxsRnJhbWUqLCBib29s
IGlzSW5pdGlhbGl6YXRpb25QYXNzID0gZmFsc2UpOyAgICAKIH07CiAKIH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpMTEludApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50T3Bj
b2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50T3Bj
b2RlLmgJKHJldmlzaW9uIDE2MTIwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
TEludE9wY29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw4IEBACiAKICNkZWZpbmUg
Rk9SX0VBQ0hfTExJTlRfTk9KSVRfTkFUSVZFX0hFTFBFUihtYWNybykgXAogICAgIG1hY3JvKGdl
dEhvc3RDYWxsUmV0dXJuVmFsdWUsIDEpIFwKKyAgICBtYWNybyhsbGludF9jYWxsX3RvX2phdmFz
Y3JpcHQsIDEpIFwKKyAgICBtYWNybyhsbGludF9jYWxsX3RvX25hdGl2ZV9mdW5jdGlvbiwgMSkg
XAogICAgIG1hY3JvKGhhbmRsZVVuY2F1Z2h0RXhjZXB0aW9uLCAxKQogCiAjZWxzZSAvLyAhRU5B
QkxFKExMSU5UX0NfTE9PUCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTElu
dFNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xMSW50U2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMTYxMjAzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQxNCwx
MiArMTQxNCwxMyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcHV0X3RvX3NjCiAg
ICAgTExJTlRfRU5EKCk7CiB9CiAKLXZvaWQgbGxpbnRfdGhyb3dfc3RhY2tfb3ZlcmZsb3dfZXJy
b3IoVk0qIHZtLCBQcm90b0NhbGxGcmFtZSogcHJvdG9GcmFtZSkKK1Nsb3dQYXRoUmV0dXJuVHlw
ZSBsbGludF90aHJvd19zdGFja19vdmVyZmxvd19lcnJvcihWTSogdm0sIFByb3RvQ2FsbEZyYW1l
KiBwcm90b0ZyYW1lKQogewogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHZtLT50b3BDYWxsRnJhbWU7
CiAgICAgaWYgKCFleGVjKQogICAgICAgICBleGVjID0gcHJvdG9GcmFtZS0+c2NvcGUoKS0+Z2xv
YmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKICAgICB0aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcihl
eGVjKTsKKyAgICByZXR1cm4gZW5jb2RlUmVzdWx0KDAsIDApOwogfQogCiB9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6TExJbnQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNs
b3dQYXRocy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTElu
dFNsb3dQYXRocy5oCShyZXZpc2lvbiAxNjEyMDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTExJbnRTbG93UGF0aHMuaAkod29ya2luZyBjb3B5KQpAQCAtMTIzLDcgKzEyMyw3IEBA
IExMSU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfaGEKIExMSU5UX1NMT1dfUEFU
SF9ISURERU5fREVDTChzbG93X3BhdGhfcmVzb2x2ZV9zY29wZSk7CiBMTElOVF9TTE9XX1BBVEhf
SElEREVOX0RFQ0woc2xvd19wYXRoX2dldF9mcm9tX3Njb3BlKTsKIExMSU5UX1NMT1dfUEFUSF9I
SURERU5fREVDTChzbG93X3BhdGhfcHV0X3RvX3Njb3BlKTsKLWV4dGVybiAiQyIgdm9pZCBsbGlu
dF90aHJvd19zdGFja19vdmVyZmxvd19lcnJvcihWTSosIFByb3RvQ2FsbEZyYW1lKik7CitleHRl
cm4gIkMiIFNsb3dQYXRoUmV0dXJuVHlwZSBsbGludF90aHJvd19zdGFja19vdmVyZmxvd19lcnJv
cihWTSosIFByb3RvQ2FsbEZyYW1lKik7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpMTEludAog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRUaHVua3MuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFRodW5rcy5jcHAJKHJl
dmlzaW9uIDE2MTIwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFRodW5r
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk0LDU4ICs5NCwxNiBAQCBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgcHJvZ3JhbUVudHJ5VGh1bmtHCiAKIC8vIE5vbi1KSVQgKGkuZS4gQyBMb29wIExMSU5U
KSBjYXNlOgogCi10eXBlZGVmIEpTVmFsdWUgKCpFeGVjdXRlQ29kZSkgKENhbGxGcmFtZSosIHZv
aWQqIGV4ZWN1dGFibGVBZGRyZXNzKTsKLQotdGVtcGxhdGU8RXhlY3V0ZUNvZGUgZXhlY3V0ZT4K
LUVuY29kZWRKU1ZhbHVlIGRvQ2FsbFRvSmF2YVNjcmlwdCh2b2lkKiBleGVjdXRhYmxlQWRkcmVz
cywgUHJvdG9DYWxsRnJhbWUqIHByb3RvQ2FsbEZyYW1lKQorRW5jb2RlZEpTVmFsdWUgY2FsbFRv
SmF2YVNjcmlwdCh2b2lkKiBleGVjdXRhYmxlQWRkcmVzcywgVk0qIHZtLCBQcm90b0NhbGxGcmFt
ZSogcHJvdG9DYWxsRnJhbWUpCiB7Ci0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBwcm90b0Nh
bGxGcmFtZS0+Y29kZUJsb2NrKCk7Ci0gICAgSlNTY29wZSogc2NvcGUgPSBwcm90b0NhbGxGcmFt
ZS0+c2NvcGUoKTsKLSAgICBKU09iamVjdCogY2FsbGVlID0gcHJvdG9DYWxsRnJhbWUtPmNhbGxl
ZSgpOwotICAgIGludCBhcmdDb3VudEluY2x1ZGluZ1RoaXMgPSBwcm90b0NhbGxGcmFtZS0+YXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKTsKLSAgICBpbnQgYXJnQ291bnQgPSBwcm90b0NhbGxG
cmFtZS0+YXJndW1lbnRDb3VudCgpOwotICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gcHJvdG9DYWxs
RnJhbWUtPnRoaXNWYWx1ZSgpOwotICAgIEpTU3RhY2smIHN0YWNrID0gc2NvcGUtPnZtKCktPmlu
dGVycHJldGVyLT5zdGFjaygpOwotCi0gICAgQ2FsbEZyYW1lKiBuZXdDYWxsRnJhbWUgPSBzdGFj
ay5wdXNoRnJhbWUoY29kZUJsb2NrLCBzY29wZSwgYXJnQ291bnRJbmNsdWRpbmdUaGlzLCBjYWxs
ZWUpOwotICAgIGlmIChVTkxJS0VMWSghbmV3Q2FsbEZyYW1lKSkgewotICAgICAgICBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc2NvcGUtPmdsb2JhbE9iamVjdCgpOwotICAgICAgICBF
eGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKLSAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcihleGVjKSk7Ci0gICAg
fQotCi0gICAgLy8gU2V0IHRoZSBhcmd1bWVudHMgZm9yIHRoZSBjYWxsZWU6Ci0gICAgbmV3Q2Fs
bEZyYW1lLT5zZXRUaGlzVmFsdWUodGhpc1ZhbHVlKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8
IGFyZ0NvdW50OyArK2kpCi0gICAgICAgIG5ld0NhbGxGcmFtZS0+c2V0QXJndW1lbnQoaSwgcHJv
dG9DYWxsRnJhbWUtPmFyZ3VtZW50KGkpKTsKLQotICAgIEpTVmFsdWUgcmVzdWx0ID0gZXhlY3V0
ZShuZXdDYWxsRnJhbWUsIGV4ZWN1dGFibGVBZGRyZXNzKTsKLQotICAgIHN0YWNrLnBvcEZyYW1l
KG5ld0NhbGxGcmFtZSk7Ci0KKyAgICBKU1ZhbHVlIHJlc3VsdCA9IENMb29wOjpleGVjdXRlKGxs
aW50X2NhbGxfdG9famF2YXNjcmlwdCwgZXhlY3V0YWJsZUFkZHJlc3MsIHZtLCBwcm90b0NhbGxG
cmFtZSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogCi1zdGF0aWMg
aW5saW5lIEpTVmFsdWUgZXhlY3V0ZUpTKENhbGxGcmFtZSogbmV3Q2FsbEZyYW1lLCB2b2lkKiBl
eGVjdXRhYmxlQWRkcmVzcykKLXsKLSAgICBPcGNvZGUgZW50cnlPcGNvZGUgPSAqcmVpbnRlcnBy
ZXRfY2FzdDxPcGNvZGUqPigmZXhlY3V0YWJsZUFkZHJlc3MpOwotICAgIHJldHVybiBDTG9vcDo6
ZXhlY3V0ZShuZXdDYWxsRnJhbWUsIGVudHJ5T3Bjb2RlKTsKLX0KLQotRW5jb2RlZEpTVmFsdWUg
Y2FsbFRvSmF2YVNjcmlwdCh2b2lkKiBleGVjdXRhYmxlQWRkcmVzcywgRXhlY1N0YXRlKiosIFBy
b3RvQ2FsbEZyYW1lKiBwcm90b0NhbGxGcmFtZSwgUmVnaXN0ZXIqKQotewotICAgIHJldHVybiBk
b0NhbGxUb0phdmFTY3JpcHQ8ZXhlY3V0ZUpTPihleGVjdXRhYmxlQWRkcmVzcywgcHJvdG9DYWxs
RnJhbWUpOwotfQotCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUgZXhlY3V0ZU5hdGl2ZShDYWxsRnJh
bWUqIG5ld0NhbGxGcmFtZSwgdm9pZCogZXhlY3V0YWJsZUFkZHJlc3MpCitFbmNvZGVkSlNWYWx1
ZSBjYWxsVG9OYXRpdmVGdW5jdGlvbih2b2lkKiBleGVjdXRhYmxlQWRkcmVzcywgVk0qIHZtLCBQ
cm90b0NhbGxGcmFtZSogcHJvdG9DYWxsRnJhbWUpCiB7Ci0gICAgTmF0aXZlRnVuY3Rpb24gZnVu
Y3Rpb24gPSByZWludGVycHJldF9jYXN0PE5hdGl2ZUZ1bmN0aW9uPihleGVjdXRhYmxlQWRkcmVz
cyk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmRlY29kZShmdW5jdGlvbihuZXdDYWxsRnJhbWUpKTsK
LX0KLQotRW5jb2RlZEpTVmFsdWUgY2FsbFRvTmF0aXZlRnVuY3Rpb24odm9pZCogZXhlY3V0YWJs
ZUFkZHJlc3MsIEV4ZWNTdGF0ZSoqLCBQcm90b0NhbGxGcmFtZSogcHJvdG9DYWxsRnJhbWUsIFJl
Z2lzdGVyKikKLXsKLSAgICByZXR1cm4gZG9DYWxsVG9KYXZhU2NyaXB0PGV4ZWN1dGVOYXRpdmU+
KGV4ZWN1dGFibGVBZGRyZXNzLCBwcm90b0NhbGxGcmFtZSk7CisgICAgSlNWYWx1ZSByZXN1bHQg
PSBDTG9vcDo6ZXhlY3V0ZShsbGludF9jYWxsX3RvX25hdGl2ZV9mdW5jdGlvbiwgZXhlY3V0YWJs
ZUFkZHJlc3MsIHZtLCBwcm90b0NhbGxGcmFtZSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShyZXN1bHQpOwogfQogCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCShy
ZXZpc2lvbiAxNjEyMDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJ
bnRlcnByZXRlcjY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAtMTU5LDcgKzE1OSw3IEBAIG1hY3Jv
IGRvQ2FsbFRvSmF2YVNjcmlwdChtYWtlQ2FsbCkKICAgICAgICAgY29uc3QgdGVtcDEgPSB0MAog
ICAgICAgICBjb25zdCB0ZW1wMiA9IHQzCiAgICAgICAgIGNvbnN0IHRlbXAzID0gdDYKLSAgICBl
bHNpZiBBUk02NAorICAgIGVsc2lmIEFSTTY0IG9yIENfTE9PUAogICAgICAgICBjb25zdCBlbnRy
eSA9IGEwCiAgICAgICAgIGNvbnN0IHZtID0gYTEKICAgICAgICAgY29uc3QgcHJvdG9DYWxsRnJh
bWUgPSBhMgpAQCAtMTkzMiw3ICsxOTMyLDEwIEBAIF9sbGludF90aHJvd19mcm9tX3Nsb3dfcGF0
aF90cmFtcG9saW5lOgogCiAKIF9sbGludF90aHJvd19kdXJpbmdfY2FsbF90cmFtcG9saW5lOgor
aWYgQ19MT09QCitlbHNlCiAgICAgcG9wIHQyCitlbmQKICAgICBqbXAgX2xsaW50X3Rocm93X2Zy
b21fc2xvd19wYXRoX3RyYW1wb2xpbmUKIAogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCShyZXZpc2lvbiAxNjEyMDMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20J
KHdvcmtpbmcgY29weSkKQEAgLTQ2NSwxOCArNDY1LDI1IEBAIG1hY3JvIGRvUmV0dXJuKCkKICAg
ICByZXQKIGVuZAogCi1pZiBDX0xPT1AKLWVsc2UKICMgc3R1YiB0byBjYWxsIGludG8gSmF2YVNj
cmlwdCBvciBOYXRpdmUgZnVuY3Rpb25zCiAjIEVuY29kZWRKU1ZhbHVlIGNhbGxUb0phdmFTY3Jp
cHQodm9pZCogY29kZSwgRXhlY1N0YXRlKiogdm1Ub3BDYWxsRnJhbWUsIFByb3RvQ2FsbEZyYW1l
KiBwcm90b0ZyYW1lKQogIyBFbmNvZGVkSlNWYWx1ZSBjYWxsVG9OYXRpdmVGdW5jdGlvbih2b2lk
KiBjb2RlLCBFeGVjU3RhdGUqKiB2bVRvcENhbGxGcmFtZSwgUHJvdG9DYWxsRnJhbWUqIHByb3Rv
RnJhbWUpCiAjIE5vdGUsIGlmIHRoZXNlIHN0dWJzIG9yIG9uZSBvZiB0aGVpciByZWxhdGVkIG1h
Y3JvcyBhcmUgY2hhbmdlZCwgbWFrZSB0aGUKICMgZXF1aXZhbGVudCBjaGFuZ2VzIGluIGppdC9K
SVRTdHVic1g4Ni5oIGFuZC9vciBqaXQvSklUU3R1YnNNU1ZDNjQuYXNtCisKK2lmIENfTE9PUAor
X2xsaW50X2NhbGxfdG9famF2YXNjcmlwdDoKK2Vsc2UKIF9jYWxsVG9KYXZhU2NyaXB0OgorZW5k
CiAgICAgZG9DYWxsVG9KYXZhU2NyaXB0KG1ha2VKYXZhU2NyaXB0Q2FsbCkKIAogCitpZiBDX0xP
T1AKK19sbGludF9jYWxsX3RvX25hdGl2ZV9mdW5jdGlvbjoKK2Vsc2UKIF9jYWxsVG9OYXRpdmVG
dW5jdGlvbjoKK2VuZAogICAgIGRvQ2FsbFRvSmF2YVNjcmlwdChtYWtlSG9zdEZ1bmN0aW9uQ2Fs
bCkKIAogCkBAIC01MDgsNyArNTE1LDcgQEAgX3Nhbml0aXplU3RhY2tGb3JWTToKIC56ZXJvRmls
bERvbmU6CiAgICAgc3RvcmVwIHNwLCBWTTo6bV9sYXN0U3RhY2tUb3Bbdm1dCiAgICAgcmV0Ci1l
bmQKKwogCiAjIEluZGljYXRlIHRoZSBiZWdpbm5pbmcgb2YgTExJbnQuCiBfbGxpbnRfYmVnaW46
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50
ZXJwcmV0ZXIuY3BwCShyZXZpc2lvbiAxNjEyMDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxNiw2ICsy
MTYsOCBAQCBzdHJ1Y3QgQ0xvb3BSZWdpc3RlciB7CiAgICAgICAgIHZvaWQqIHZwOwogICAgICAg
ICBFeGVjU3RhdGUqIGV4ZWNTdGF0ZTsKICAgICAgICAgdm9pZCogaW5zdHJ1Y3Rpb247CisgICAg
ICAgIFZNKiB2bTsKKyAgICAgICAgUHJvdG9DYWxsRnJhbWUqIHByb3RvQ2FsbEZyYW1lOwogICAg
ICAgICBOYXRpdmVGdW5jdGlvbiBuYXRpdmVGdW5jOwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAg
ICAgIGludDY0X3QgaTY0OwpAQCAtMjI2LDYgKzIyOCwxMSBAQCBzdHJ1Y3QgQ0xvb3BSZWdpc3Rl
ciB7CiAgICAgICAgIE9wY29kZSBvcGNvZGU7CiAgICAgfTsKIAorICAgIG9wZXJhdG9yIEV4ZWNT
dGF0ZSooKSB7IHJldHVybiBleGVjU3RhdGU7IH0KKyAgICBvcGVyYXRvciBJbnN0cnVjdGlvbioo
KSB7IHJldHVybiByZWludGVycHJldF9jYXN0PEluc3RydWN0aW9uKj4oaW5zdHJ1Y3Rpb24pOyB9
CisgICAgb3BlcmF0b3IgVk0qKCkgeyByZXR1cm4gdm07IH0KKyAgICBvcGVyYXRvciBQcm90b0Nh
bGxGcmFtZSooKSB7IHJldHVybiBwcm90b0NhbGxGcmFtZTsgfQorCiAjaWYgVVNFKEpTVkFMVUU2
NCkKICAgICBpbmxpbmUgdm9pZCBjbGVhckhpZ2hXb3JkKCkgeyBpMzJwYWRkaW5nID0gMDsgfQog
I2Vsc2UKQEAgLTIzNyw3ICsyNDQsNyBAQCBzdHJ1Y3QgQ0xvb3BSZWdpc3RlciB7CiAvLyBUaGUg
bGxpbnQgQysrIGludGVycHJldGVyIGxvb3A6CiAvLwogCi1KU1ZhbHVlIENMb29wOjpleGVjdXRl
KENhbGxGcmFtZSogY2FsbEZyYW1lLCBPcGNvZGUgZW50cnlPcGNvZGUsIGJvb2wgaXNJbml0aWFs
aXphdGlvblBhc3MpCitKU1ZhbHVlIENMb29wOjpleGVjdXRlKE9wY29kZUlEIGVudHJ5T3Bjb2Rl
SUQsIHZvaWQqIGV4ZWN1dGFibGVBZGRyZXNzLCBWTSogdm0sIFByb3RvQ2FsbEZyYW1lKiBwcm90
b0NhbGxGcmFtZSwgYm9vbCBpc0luaXRpYWxpemF0aW9uUGFzcykKIHsKICAgICAjZGVmaW5lIENB
U1QgcmVpbnRlcnByZXRfY2FzdAogICAgICNkZWZpbmUgU0lHTl9CSVQzMih4KSAoKHgpICYgMHg4
MDAwMDAwMCkKQEAgLTI3Miw4ICsyNzksNiBAQCBKU1ZhbHVlIENMb29wOjpleGVjdXRlKENhbGxG
cmFtZSogY2FsbEZyCiAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAgICAgfQogCi0gICAgQVNT
RVJUKGNhbGxGcmFtZS0+dm0oKS50b3BDYWxsRnJhbWUgPT0gY2FsbEZyYW1lKTsKLQogICAgIC8v
IERlZmluZSB0aGUgcHNldWRvIHJlZ2lzdGVycyB1c2VkIGJ5IHRoZSBMTElOVCBDIExvb3AgYmFj
a2VuZDoKICAgICBBU1NFUlQoc2l6ZW9mKENMb29wUmVnaXN0ZXIpID09IHNpemVvZihpbnRwdHJf
dCkpOwogCkBAIC0zMTUsMjUgKzMyMCwxNyBAQCBKU1ZhbHVlIENMb29wOjpleGVjdXRlKENhbGxG
cmFtZSogY2FsbEZyCiAgICAgQ0xvb3BSZWdpc3RlciByUmV0VlBDOwogICAgIENMb29wRG91Ymxl
UmVnaXN0ZXIgZDAsIGQxOwogCi0gICAgLy8gS2VlcCB0aGUgY29tcGlsZXIgaGFwcHkuIFdlIGRv
bid0IHJlYWxseSBuZWVkIHRoaXMsIGJ1dCB0aGUgY29tcGlsZXIKLSAgICAvLyB3aWxsIGNvbXBs
YWluLiBUaGlzIG1ha2VzIHRoZSB3YXJuaW5nIGdvIGF3YXkuCi0gICAgdDAuaSA9IDA7Ci0gICAg
dDEuaSA9IDA7Ci0KLSAgICBWTSogdm0gPSAmY2FsbEZyYW1lLT52bSgpOwotCi0gICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwogICAgIEluc3RydWN0aW9u
KiB2UEM7CiAKICAgICAvLyByUEMgaXMgYW4gYWxpYXMgZm9yIHZQQy4gU2V0IHVwIHRoZSBhbGlh
czoKICAgICBDTG9vcFJlZ2lzdGVyJiByUEMgPSAqQ0FTVDxDTG9vcFJlZ2lzdGVyKj4oJnZQQyk7
CiAKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIHZQQyA9IGNvZGVCbG9jay0+aW5zdHJ1Y3Rp
b25zKCkuYmVnaW4oKTsKLSNlbHNlIC8vIFVTRShKU1ZBTFVFNjQpCi0gICAgdlBDID0gMDsKLSAg
ICByQmFzZVBDLnZwID0gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpOworICAgIC8v
IEluaXRpYWxpemUgdGhlIGluY29taW5nIGFyZ3MgZm9yIGRvQ2FsbFRvSmF2YVNjcmlwdDoKKyAg
ICB0MC52cCA9IGV4ZWN1dGFibGVBZGRyZXNzOworICAgIHQxLnZtID0gdm07CisgICAgdDIucHJv
dG9DYWxsRnJhbWUgPSBwcm90b0NhbGxGcmFtZTsKIAorI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAg
Ly8gRm9yIHRoZSBBU00gbGxpbnQsIEpJVFN0dWJzIHRha2VzIGNhcmUgb2YgdGhpcyBpbml0aWFs
aXphdGlvbi4gV2UgZG8KICAgICAvLyBpdCBleHBsaWNpdGx5IGhlcmUgZm9yIHRoZSBDIGxvb3A6
CiAgICAgdGFnVHlwZU51bWJlci5pID0gMHhGRkZGMDAwMDAwMDAwMDAwOwpAQCAtMzQxLDYgKzMz
OCw3IEBAIEpTVmFsdWUgQ0xvb3A6OmV4ZWN1dGUoQ2FsbEZyYW1lKiBjYWxsRnIKICNlbmRpZiAv
LyBVU0UoSlNWQUxVRTY0KQogCiAgICAgLy8gY2ZyIGlzIGFuIGFsaWFzIGZvciBjYWxsRnJhbWUu
IFNldCB1cCB0aGlzIGFsaWFzOgorICAgIENhbGxGcmFtZSogY2FsbEZyYW1lOwogICAgIENMb29w
UmVnaXN0ZXImIGNmciA9ICpDQVNUPENMb29wUmVnaXN0ZXIqPigmY2FsbEZyYW1lKTsKIAogICAg
IC8vIFNpbXVsYXRlIGEgbmF0aXZlIHJldHVybiBQQyB3aGljaCBzaG91bGQgbmV2ZXIgYmUgdXNl
ZDoKQEAgLTM0OSw5ICszNDcsNyBAQCBKU1ZhbHVlIENMb29wOjpleGVjdXRlKENhbGxGcmFtZSog
Y2FsbEZyCiAgICAgLy8gSW50ZXJwcmV0ZXIgdmFyaWFibGVzIGZvciB2YWx1ZSBwYXNzaW5nIGJl
dHdlZW4gb3Bjb2RlcyBhbmQvb3IgaGVscGVyczoKICAgICBOYXRpdmVGdW5jdGlvbiBuYXRpdmVG
dW5jID0gMDsKICAgICBKU1ZhbHVlIGZ1bmN0aW9uUmV0dXJuVmFsdWU7Ci0gICAgT3Bjb2RlIG9w
Y29kZTsKLQotICAgIG9wY29kZSA9IGVudHJ5T3Bjb2RlOworICAgIE9wY29kZSBvcGNvZGUgPSBn
ZXRPcGNvZGUoZW50cnlPcGNvZGVJRCk7CiAKICAgICAjaWYgRU5BQkxFKE9QQ09ERV9TVEFUUykK
ICAgICAgICAgI2RlZmluZSBSRUNPUkRfT1BDT0RFX1NUQVRTKF9fb3Bjb2RlKSBcCkBAIC00MzEs
MTEgKzQyNyw2IEBAIEpTVmFsdWUgQ0xvb3A6OmV4ZWN1dGUoQ2FsbEZyYW1lKiBjYWxsRnIKICAg
ICAgICAgICAgIGdvdG8gZG9SZXR1cm5IZWxwZXI7CiAgICAgICAgIH0KIAotICAgICAgICBPRkZM
SU5FX0FTTV9HTFVFX0xBQkVMKGhhbmRsZVVuY2F1Z2h0RXhjZXB0aW9uKQotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gdm0tPmV4Y2VwdGlvbigpOwotICAgICAgICB9Ci0KICNpZiAhRU5B
QkxFKENPTVBVVEVEX0dPVE9fT1BDT0RFUykKICAgICBkZWZhdWx0OgogICAgICAgICBBU1NFUlQo
ZmFsc2UpOwpAQCAtNDc4LDcgKzQ2OSw3IEBAIEpTVmFsdWUgQ0xvb3A6OmV4ZWN1dGUoQ2FsbEZy
YW1lKiBjYWxsRnIKICAgICAgICAgLy8gYnl0ZWNvZGUgb2Zmc2V0IGJlZm9yZSB3ZSBkaXNwYXRj
aCB2aWEgdGhlIHVzdWFsIGRpc3BhdGNoIG1lY2hhbmlzbQogICAgICAgICAvLyBpLmUuIE5FWFRf
SU5TVFJVQ1RJT04oKToKIAotICAgICAgICBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9j
aygpOworICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2Nr
KCk7CiAgICAgICAgIEFTU0VSVChjb2RlQmxvY2spOwogICAgICAgICByUEMudnAgPSBjYWxsRnJh
bWUtPmN1cnJlbnRWUEMoKTsKICAgICAgICAgclBDLmkgPSByUEMuaThwIC0gcmVpbnRlcnByZXRf
Y2FzdDxpbnQ4X3QqPihjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmJlZ2luKCkpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL29mZmxpbmVhc20vY2xvb3AucmIKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL29mZmxpbmVhc20vY2xvb3AucmIJKHJldmlzaW9uIDE2MTIw
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9vZmZsaW5lYXNtL2Nsb29wLnJiCSh3b3JraW5n
IGNvcHkpCkBAIC02OCwyMiArNjgsMTcgQEAgQ19MT09QX1NDUkFUQ0hfRlBSID0gU3BlY2lhbFJl
Z2lzdGVyLm5ldwogY2xhc3MgUmVnaXN0ZXJJRAogICAgIGRlZiBjbER1bXAKICAgICAgICAgY2Fz
ZSBuYW1lCisgICAgICAgICMgVGhlIGNsb29wIGlzIG1vZGVsbGVkIG9uIHRoZSBBUk0gaW1wbGVt
ZW50YXRpb24uIEhlbmNlLCB0aGUgYTAtYTMKKyAgICAgICAgIyByZWdpc3RlcnMgYXJlIGFsaWFz
ZXMgZm9yIHIwLXIzIGkuZS4gdDAtdDMgaW4gb3VyIGNhc2UuCiAgICAgICAgIHdoZW4gImEwIgot
ICAgICAgICAgICAgImEwIgorICAgICAgICAgICAgInQwIgogICAgICAgICB3aGVuICJhMSIKLSAg
ICAgICAgICAgICJhMSIKKyAgICAgICAgICAgICJ0MSIKICAgICAgICAgd2hlbiAiYTIiCi0gICAg
ICAgICAgICAiYTIiCisgICAgICAgICAgICAidDIiCiAgICAgICAgIHdoZW4gImEzIgotICAgICAg
ICAgICAgImEzIgotICAgICAgICB3aGVuICJhNCIKLSAgICAgICAgICAgICJhNCIKLSAgICAgICAg
d2hlbiAiYTUiCi0gICAgICAgICAgICAiYTUiCi0gICAgICAgIHdoZW4gImE2IgotICAgICAgICAg
ICAgImE2IgotICAgICAgICB3aGVuICJhNiIKLSAgICAgICAgICAgICJhNiIKKyAgICAgICAgICAg
ICJ0MyIKKwogICAgICAgICB3aGVuICJ0MCIKICAgICAgICAgICAgICJ0MCIKICAgICAgICAgd2hl
biAidDEiCkBAIC01NTcsOSArNTUyLDcgQEAgZW5kCiAjIG9wZXJhbmRzOiBjYWxsVGFyZ2V0LCBj
dXJyZW50RnJhbWUsIGN1cnJlbnRQQwogZGVmIGNsb29wRW1pdENhbGxTbG93UGF0aChvcGVyYW5k
cykKICAgICAkYXNtLnB1dGMgInsiCi0gICAgJGFzbS5wdXRjICIgICAgRXhlY1N0YXRlKiBleGVj
ID0gQ0FTVDxFeGVjU3RhdGUqPigje29wZXJhbmRzWzFdLmNsVmFsdWUoOnZvaWRQdHIpfSk7Igot
ICAgICRhc20ucHV0YyAiICAgIEluc3RydWN0aW9uKiBwYyA9IENBU1Q8SW5zdHJ1Y3Rpb24qPigj
e29wZXJhbmRzWzJdLmNsVmFsdWUoOnZvaWRQdHIpfSk7IgotICAgICRhc20ucHV0YyAiICAgIFNs
b3dQYXRoUmV0dXJuVHlwZSByZXN1bHQgPSAje29wZXJhbmRzWzBdLmNMYWJlbH0oZXhlYywgcGMp
OyIKKyAgICAkYXNtLnB1dGMgIiAgICBTbG93UGF0aFJldHVyblR5cGUgcmVzdWx0ID0gI3tvcGVy
YW5kc1swXS5jTGFiZWx9KCN7b3BlcmFuZHNbMV0uY2xEdW1wfSwgI3tvcGVyYW5kc1syXS5jbER1
bXB9KTsiCiAgICAgJGFzbS5wdXRjICIgICAgZGVjb2RlUmVzdWx0KHJlc3VsdCwgdDAuaW5zdHJ1
Y3Rpb24sIHQxLnZwKTsiCiAgICAgJGFzbS5wdXRjICJ9IgogZW5kCkBAIC0xMTAwLDcgKzEwOTMs
OCBAQCBjbGFzcyBJbnN0cnVjdGlvbgogICAgICAgICAgICAgCiAgICAgICAgIHdoZW4gIm1lbWZl
bmNlIgogICAgICAgICB3aGVuICJwb3AiCi0gICAgICAgICAgICAkYXNtLnB1dGMgIiNlcnJvciBG
SVhNRTogTmVlZCBpbXBsZW1lbnRhdGlvbiBmb3IgcG9wIgorICAgICAgICAgICAgJGFzbS5wdXRj
ICJSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBwb3Agbm90IGltcGxlbWVudGVkLiIK
KwogICAgICAgICB3aGVuICJwdXNoQ2FsbGVlU2F2ZXMiCiAgICAgICAgIHdoZW4gInBvcENhbGxl
ZVNhdmVzIgogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93
UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nv
bW1vblNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDE2MTIwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3NCwx
MCArMTc0LDEzIEBAIHN0YXRpYyBDb21tb25TbG93UGF0aHM6OkFyaXR5Q2hlY2tEYXRhKiAKIHsK
ICAgICBDb21tb25TbG93UGF0aHM6OkFyaXR5Q2hlY2tEYXRhKiByZXN1bHQgPSB2bS5hcml0eUNo
ZWNrRGF0YS5nZXQoKTsKICAgICByZXN1bHQtPnBhZGRlZFN0YWNrU3BhY2UgPSBzbG90c1RvQWRk
OworI2lmIEVOQUJMRShKSVQpCiAgICAgaWYgKHZtLmNhblVzZUpJVCgpKSB7CiAgICAgICAgIHJl
c3VsdC0+dGh1bmtUb0NhbGwgPSB2bS5nZXRDVElTdHViKGFyaXR5Rml4dXApLmNvZGUoKS5leGVj
dXRhYmxlQWRkcmVzcygpOwogICAgICAgICByZXN1bHQtPnJldHVyblBDID0gdm0uYXJpdHlDaGVj
a0ZhaWxSZXR1cm5UaHVua3MtPnJldHVyblBDRm9yKHZtLCBzbG90c1RvQWRkICogc3RhY2tBbGln
bm1lbnRSZWdpc3RlcnMoKSkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKLSAgICB9IGVsc2UgeworICAg
IH0gZWxzZQorI2VuZGlmCisgICAgewogICAgICAgICByZXN1bHQtPnRodW5rVG9DYWxsID0gMDsK
ICAgICAgICAgcmVzdWx0LT5yZXR1cm5QQyA9IDA7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1ZNLmNwcAkocmV2aXNpb24gMTYxMjAzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSw3IEBACiAj
aW5jbHVkZSAiSWRlbnRpZmllci5oIgogI2luY2x1ZGUgIkluY3JlbWVudGFsU3dlZXBlci5oIgog
I2luY2x1ZGUgIkludGVycHJldGVyLmgiCisjaW5jbHVkZSAiSklUQ29kZS5oIgogI2luY2x1ZGUg
IkpTQVBJVmFsdWVXcmFwcGVyLmgiCiAjaW5jbHVkZSAiSlNBY3RpdmF0aW9uLmgiCiAjaW5jbHVk
ZSAiSlNBcnJheS5oIgpAQCAtNDY3LDggKzQ2OCw4IEBAIE5hdGl2ZUV4ZWN1dGFibGUqIFZNOjpn
ZXRIb3N0RnVuY3Rpb24oTmEKIE5hdGl2ZUV4ZWN1dGFibGUqIFZNOjpnZXRIb3N0RnVuY3Rpb24o
TmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24sIE5hdGl2ZUZ1bmN0aW9uIGNvbnN0cnVjdG9yKQogewog
ICAgIHJldHVybiBOYXRpdmVFeGVjdXRhYmxlOjpjcmVhdGUoKnRoaXMsCi0gICAgICAgIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlTExJbnRDb2RlUmVmKGxsaW50X25hdGl2ZV9jYWxsX3Ry
YW1wb2xpbmUpLCBmdW5jdGlvbiwKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVh
dGVMTEludENvZGVSZWYobGxpbnRfbmF0aXZlX2NvbnN0cnVjdF90cmFtcG9saW5lKSwgY29uc3Ry
dWN0b3IsCisgICAgICAgIGFkb3B0UmVmKG5ldyBOYXRpdmVKSVRDb2RlKE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjo6Y3JlYXRlTExJbnRDb2RlUmVmKGxsaW50X25hdGl2ZV9jYWxsX3RyYW1wb2xpbmUp
LCBKSVRDb2RlOjpIb3N0Q2FsbFRodW5rKSksIGZ1bmN0aW9uLAorICAgICAgICBhZG9wdFJlZihu
ZXcgTmF0aXZlSklUQ29kZShNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZUxMSW50Q29kZVJl
ZihsbGludF9uYXRpdmVfY29uc3RydWN0X3RyYW1wb2xpbmUpLCBKSVRDb2RlOjpIb3N0Q2FsbFRo
dW5rKSksIGNvbnN0cnVjdG9yLAogICAgICAgICBOb0ludHJpbnNpYyk7CiB9CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNRW50cnlTY29wZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1FbnRyeVNjb3BlLmNwcAkocmV2aXNp
b24gMTYxMjAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1FbnRyeVNjb3Bl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY5LDYgKzE2OSw3IEBAIHNpemVfdCBWTUVudHJ5U2Nv
cGU6OnJlcXVpcmVkQ2FwYWNpdHkoY2gKICAgICAgICAgICAgIGV4Y2Vzc0NTdGFja1NpemUgPSBh
dmFpbGFibGVDU3RhY2sgLSBhdmFpbGFibGVKU1N0YWNrOwogICAgIH0KICNlbHNlCisgICAgVU5V
U0VEX1BBUkFNKHRvcE9mU3RhY2spOwogICAgIFVOVVNFRF9QQVJBTSh0eXBlKTsKICAgICBBU1NF
UlQodHlwZSA9PSBOYXRpdmVTdGFja0NhcGFjaXR5KTsKICNlbmRpZgo=
</data>
<flag name="review"
          id="243924"
          type_id="1"
          status="-"
          setter="msaboff"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>220259</attachid>
            <date>2014-01-02 14:57:50 -0800</date>
            <delta_ts>2014-01-02 15:30:56 -0800</delta_ts>
            <desc>follow up patch to address feedback for cloop.rb</desc>
            <filename>bug-126393b.patch</filename>
            <type>text/plain</type>
            <size>878</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9vZmZsaW5lYXNtL2Nsb29wLnJiCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9vZmZsaW5lYXNtL2Nsb29wLnJiCShyZXZpc2lv
biAxNjEyMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvb2ZmbGluZWFzbS9jbG9vcC5yYgko
d29ya2luZyBjb3B5KQpAQCAtNzAsMjIgKzcwLDEzIEBAIGNsYXNzIFJlZ2lzdGVySUQKICAgICAg
ICAgY2FzZSBuYW1lCiAgICAgICAgICMgVGhlIGNsb29wIGlzIG1vZGVsbGVkIG9uIHRoZSBBUk0g
aW1wbGVtZW50YXRpb24uIEhlbmNlLCB0aGUgYTAtYTMKICAgICAgICAgIyByZWdpc3RlcnMgYXJl
IGFsaWFzZXMgZm9yIHIwLXIzIGkuZS4gdDAtdDMgaW4gb3VyIGNhc2UuCi0gICAgICAgIHdoZW4g
ImEwIgorICAgICAgICB3aGVuICJ0MCIsICJhMCIKICAgICAgICAgICAgICJ0MCIKLSAgICAgICAg
d2hlbiAiYTEiCisgICAgICAgIHdoZW4gInQxIiwgImExIgogICAgICAgICAgICAgInQxIgotICAg
ICAgICB3aGVuICJhMiIKKyAgICAgICAgd2hlbiAidDIiLCAiYTIiCiAgICAgICAgICAgICAidDIi
Ci0gICAgICAgIHdoZW4gImEzIgotICAgICAgICAgICAgInQzIgotCi0gICAgICAgIHdoZW4gInQw
IgotICAgICAgICAgICAgInQwIgotICAgICAgICB3aGVuICJ0MSIKLSAgICAgICAgICAgICJ0MSIK
LSAgICAgICAgd2hlbiAidDIiCi0gICAgICAgICAgICAidDIiCi0gICAgICAgIHdoZW4gInQzIgor
ICAgICAgICB3aGVuICJ0MyIsICJhMyIKICAgICAgICAgICAgICJ0MyIKICAgICAgICAgd2hlbiAi
dDQiCiAgICAgICAgICAgICAiclBDIgo=
</data>
<flag name="review"
          id="243947"
          type_id="1"
          status="+"
          setter="msaboff"
    />
          </attachment>
      

    </bug>

</bugzilla>