<?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>18338</bug_id>
          
          <creation_ts>2008-04-06 20:50:51 -0700</creation_ts>
          <short_desc>Support exceptions in SquirrelFish</short_desc>
          <delta_ts>2008-04-07 17:46:47 -0700</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>All</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>CLOSED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P1</priority>
          <bug_severity>Blocker</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Oliver Hunt">oliver</reporter>
          <assigned_to name="Oliver Hunt">oliver</assigned_to>
          <cc>ggaren</cc>
    
    <cc>mjs</cc>
    
    <cc>oliver</cc>
    
    <cc>sam</cc>
    
    <cc>zwarich</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>76454</commentid>
    <comment_count>0</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2008-04-06 20:50:51 -0700</bug_when>
    <thetext>task tracking bug</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>76455</commentid>
    <comment_count>1</comment_count>
      <attachid>20375</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2008-04-06 21:02:13 -0700</bug_when>
    <thetext>Created attachment 20375
Initial patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>76459</commentid>
    <comment_count>2</comment_count>
      <attachid>20376</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2008-04-06 23:39:58 -0700</bug_when>
    <thetext>Created attachment 20376
Slightly improved version of gcc perf hack

Avoid using a global for the exceptionTarget -- curse gcc</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>76546</commentid>
    <comment_count>3</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2008-04-07 17:11:45 -0700</bug_when>
    <thetext>-    printf(&quot;%lu instructions; %lu bytes at %p; %d locals (%d parameters); %d temporaries\n\n&quot;, instructionCount, instructions.size() * sizeof(Instruction), this, numParameters + numVars, numParameters, numTemporaries);
+    printf(&quot;%lu instructions; %lu bytes at %p; %lu exception handlers; %d locals (%d parameters); %d temporaries\n\n&quot;, instructionCount, instructions.size() * sizeof(Instruction), this, exceptionHandlers.size(), numParameters + numVars, numParameters, numTemporaries);

I don&apos;t think it&apos;s helpful to list the number of exception handlers in the code dump. We don&apos;t list other forms of control flow, like jumps and loops, and exception handlers aren&apos;t referenced by number in the disasembly. I&apos;d suggest removing this.
     
     for (Vector&lt;Instruction&gt;::const_iterator it = begin; it != end; ++it)
         dump(exec, begin, it);
@@ -154,6 +154,13 @@ void CodeBlock::dump(ExecState* exec) const
         } while (i &lt; jsValues.size());
     }
     
+    for (size_t i = 0; i &lt; identifiers.size(); ++i)
+        printf(&quot;  id%u = %s\n&quot;, static_cast&lt;unsigned&gt;(i), identifiers[i].ascii());
+
+    printf(&quot;\nConstants:\n&quot;);
+    for (size_t i = 0; i &lt; jsValues.size(); ++i)
+        printf(&quot;  k%u = %s\n&quot;, static_cast&lt;unsigned&gt;(i), valueToSourceString(exec, jsValues[i]).ascii());

This looks like an incorrect merge. Bad Ollie.

+    if (exceptionHandlers.size()) {
+        printf(&quot;\nException Handlers:\n&quot;);
+        unsigned i = 0;
+        do {
+            printf(&quot;\t%d: {start: [%4d] end: [%4d] handler: [%4d] }\n&quot;, i+1, exceptionHandlers[i].start, exceptionHandlers[i].end, exceptionHandlers[i].target);
+            ++i;
+        } while (i &lt; exceptionHandlers.size());
+    }

&quot;{start&quot; is missing a space.

&quot;handler:&quot; prints a data member named &quot;target&quot;. Should it say &quot;target:&quot;, or should the data member be named &quot;handler&quot; instead? I think it should say &quot;target&quot;.

+Instruction* CodeBlock::handlerForPC(const Instruction* const address, int&amp; expectedDepth)

This function signature is a little confusing. The first parameter is called &quot;PC&quot;, &quot;vPC&quot;, or &quot;address&quot;, depending on the contenxt, while the second parameter is
called &quot;expectedDepth&quot; or &quot;scopeDepth&quot;, depending on context. Also, it returns an out parameter but doesn&apos;t have &quot;get&quot; in its name. How about
&quot;bool getHandlerInfoForVPC(vPC, target, scopeDepth)&quot;, which returns false if no handler info is found?


+{
+    Vector&lt;HandlerInfo&gt;::iterator ptr = exceptionHandlers.begin(); 
+    Vector&lt;HandlerInfo&gt;::iterator end = exceptionHandlers.end();
+    unsigned addressOffset = address - instructions.begin();
+    ASSERT(addressOffset &lt; instructions.size());
+    
+    for (; ptr != end &amp;&amp; (ptr-&gt;start &lt;= addressOffset || ptr-&gt;end &gt;= addressOffset); ++ptr) {

As we discussed in person, please remove the second loop condition, since it complicates things, and is either wrong, or always true, and therefore irrelevent.
(Our heads ended up hurting too much to prove one way or the other.)

+        // Handlers are ordered innermost first, so the first handler we encounter
+        // that contains the source address is the correct handler to use.

Very helpful comment!

+RegisterID* CodeGenerator::emitCatch(RegisterID* targetRegister, LabelID* start, LabelID* end)
+{
+    HandlerInfo info = { start-&gt;offsetFrom(0), end-&gt;offsetFrom(0), instructions().size(), m_scopeDepth};

&quot;m_scopeDepth};&quot; is missing a space.

+NEVER_INLINE JSValue* prepareException(ExecState* exec, JSValue* exceptionValue) 
+{
+    if (exceptionValue-&gt;isObject()) {
+        JSObject* exception = static_cast&lt;JSObject*&gt;(exceptionValue);
+        if (!exception-&gt;hasProperty(exec, &quot;line&quot;) &amp;&amp; !exception-&gt;hasProperty(exec, &quot;sourceURL&quot;)) {
+            // Need to set line and sourceURL properties on the exception, but that is not currently possible
+            ASSERT_NOT_REACHED();

This ASSERT is really going to get in the way of using exceptions! Maybe we should do something less destructive for now? How about just putting in the empty
string and the number 0?

+NEVER_INLINE Instruction* unwindFrame(CodeBlock*&amp; codeBlock, JSValue**&amp; k, ScopeChain*&amp; scopeChain, Vector&lt;Register&gt;* registers, Register*&amp; base)

The &quot;dump&quot; function calls a register frame a &quot;callFrame&quot;. How about renaming this function to &quot;unwindCallFrame&quot;, for consistency?

Also for consistency, can we call &quot;base&quot; &quot;r&quot; for now? If &quot;r&quot; is not so good, we should rename it everywhere, but giving different names in different places will
just cause heartburn.

+{
+    CodeBlock* oldCodeBlock = codeBlock;
+    
+    Register* returnInfo = base - oldCodeBlock-&gt;numVars - oldCodeBlock-&gt;numParameters - Machine::returnInfoSize;

Can this be a member function so we don&apos;t have to &quot;Machine::&quot;?

You need special handling for global code, since it has no call frame. You can detect global code by testing if CodeBlock::numParameters is 0. (It&apos;s only 0 for
global code.)

+    
+    if (oldCodeBlock-&gt;needsActivation) {
+        // Find the top of the scope chain

I think you mean &quot;find this function&apos;s activation in the scope chain&quot;. The top of the scope chain is the first entry.

+        ScopeChainIterator iter = scopeChain-&gt;begin(); 
+        ScopeChainIterator end = scopeChain-&gt;end();
+        while (!((*iter)-&gt;isActivationObject())) {
+            ++iter;
+            if (iter == end)
+                break;
+        }

You can just ASSERT(itr != end). 

+
+        // Clean up the activation if&apos;n it&apos;s necessary
+        if (iter != end &amp;&amp; (*iter)-&gt;isActivationObject()) {
	
Same here.

+    codeBlock = returnInfo[0].u.codeBlock;
+    if (!codeBlock)
+        return 0;

Could use a comment here saying &quot;0 means built-in function&quot;.

+NEVER_INLINE static bool throwException(CodeBlock*&amp; codeBlock, JSValue**&amp; k, ScopeChain*&amp; scopeChain, Vector&lt;Register&gt;* registers, Register*&amp; base, const Instruction* vPC)
+{
+    while (codeBlock) {
+        int expectedDepth;        
+        Instruction* handlerPC = codeBlock-&gt;handlerForPC(vPC, expectedDepth);
+        if (!handlerPC) {
+            vPC = unwindFrame(codeBlock, k, scopeChain, registers, base);
+            continue;
+        }
+        // Now unwind the scope chain
+        int scopeDepth = 0;
+        // Step 1) work out how deep the scope chain is
+        ScopeChainIterator iter = scopeChain-&gt;begin(); 
+        ScopeChainIterator end = scopeChain-&gt;end(); 
+        while (!((*iter)-&gt;isActivationObject())) {
+            ++iter;
+            ++scopeDepth;
+            if (iter == end) {
+                // reached the global object at the top of the scope chain
+                --scopeDepth;
+                break;
+            }
+        }

Can depth() just be a member function on ScopeChain?

+        // Step 3) Cry :-(
	
There&apos;s no crying in JavaScriptCore!

Nice work.

r=me

Geoff</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>76547</commentid>
    <comment_count>4</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2008-04-07 17:46:38 -0700</bug_when>
    <thetext>Landed 31701</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>20375</attachid>
            <date>2008-04-06 21:02:13 -0700</date>
            <delta_ts>2008-04-06 23:39:58 -0700</delta_ts>
            <desc>Initial patch</desc>
            <filename>exceptions.patch</filename>
            <type>text/plain</type>
            <size>17984</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCA2NjBiODhiLi4xNGVlYjkxIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzUg
QEAKKzIwMDgtMDQtMDYgIE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBCdWcgMTgzMzg6IFN1cHBv
cnQgZXhjZXB0aW9ucyBpbiBTcXVpcnJlbEZpc2ggPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE4MzM4PgorCisgICAgICAgIEluaXRpYWwgc3VwcG9ydCBmb3IgZXhjZXB0
aW9ucyBpbiBTcXVpcnJlbEZpc2gsIG9ubHkgc3VwcG9ydHMgZmluYWxpc2VycyBpbiB0aGUKKyAg
ICAgICAgc2ltcGxlIGNhc2VzIChlZy4gZXhjZXB0aW9ucyBhbmQgbm9uLWdvdG8vcmV0dXJuIGFj
cm9zcyBmaW5hbGlzZXIgYm91bmRhcmllcykuCisgICAgICAgIFRoaXMgZG9lc24ndCBhZGQgdGhl
IHJlcXVpcmVkIGV4Y2VwdGlvbiBjaGVja3MgdG8gZXhpc3RpbmcgY29kZSwgaXQgbWVyZWx5IGFk
ZHMKKyAgICAgICAgc3VwcG9ydCBmb3IgdGhyb3csIGNhdGNoLCBhbmQgdGhlIHJlcXVpcmVkIHN0
YWNrIHVud2luZGluZy4KKworICAgICAgICAqIFZNL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChL
SlM6OkNvZGVCbG9jazo6ZHVtcCk6CisgICAgICAgIChLSlM6OkNvZGVCbG9jazo6aGFuZGxlckZv
clBDKToKKyAgICAgICAgKiBWTS9Db2RlQmxvY2suaDoKKyAgICAgICAgKiBWTS9Db2RlR2VuZXJh
dG9yLmNwcDoKKyAgICAgICAgKEtKUzo6Q29kZUdlbmVyYXRvcjo6ZW1pdENhdGNoKToKKyAgICAg
ICAgKEtKUzo6Q29kZUdlbmVyYXRvcjo6ZW1pdFRocm93KToKKyAgICAgICAgKiBWTS9Db2RlR2Vu
ZXJhdG9yLmg6CisgICAgICAgICogVk0vSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5jcHA6CisgICAg
ICAgIChLSlM6OkpTUHJvcGVydHlOYW1lSXRlcmF0b3I6OmNyZWF0ZSk6CisgICAgICAgICogVk0v
TWFjaGluZS5jcHA6CisgICAgICAgIChLSlM6OnByZXBhcmVFeGNlcHRpb24pOgorICAgICAgICAo
S0pTOjp1bndpbmRGcmFtZSk6CisgICAgICAgIChLSlM6OnRocm93RXhjZXB0aW9uKToKKyAgICAg
ICAgKEtKUzo6TWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUpOgorICAgICAgICAqIFZNL09wY29kZS5o
OgorICAgICAgICAqIGtqcy9ub2Rlcy5jcHA6CisgICAgICAgIChLSlM6OlRocm93Tm9kZTo6ZW1p
dENvZGUpOgorICAgICAgICAoS0pTOjpUcnlOb2RlOjplbWl0Q29kZSk6CisgICAgICAgICoga2pz
L25vZGVzLmg6CisKIDIwMDgtMDQtMDYgIEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNv
bT4KIAogICAgICAgICBSZXZpZXdlZCBieSBPbGl2ZXIgSHVudC4KZGlmZiAtLWdpdCBhL0phdmFT
Y3JpcHRDb3JlL1ZNL0NvZGVCbG9jay5jcHAgYi9KYXZhU2NyaXB0Q29yZS9WTS9Db2RlQmxvY2su
Y3BwCmluZGV4IDBlY2JlMGMuLjliNmJjOWQgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL1ZN
L0NvZGVCbG9jay5jcHAKKysrIGIvSmF2YVNjcmlwdENvcmUvVk0vQ29kZUJsb2NrLmNwcApAQCAt
MTMxLDcgKzEzMSw3IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wKEV4ZWNTdGF0ZSogZXhlYykgY29u
c3QKICAgICAgICAgaWYgKG1hY2hpbmUoKS5pc09wY29kZShpdC0+dS5vcGNvZGUpKQogICAgICAg
ICAgICAgKytpbnN0cnVjdGlvbkNvdW50OwogCi0gICAgcHJpbnRmKCIlbHUgaW5zdHJ1Y3Rpb25z
OyAlbHUgYnl0ZXMgYXQgJXA7ICVkIGxvY2FscyAoJWQgcGFyYW1ldGVycyk7ICVkIHRlbXBvcmFy
aWVzXG5cbiIsIGluc3RydWN0aW9uQ291bnQsIGluc3RydWN0aW9ucy5zaXplKCkgKiBzaXplb2Yo
SW5zdHJ1Y3Rpb24pLCB0aGlzLCBudW1QYXJhbWV0ZXJzICsgbnVtVmFycywgbnVtUGFyYW1ldGVy
cywgbnVtVGVtcG9yYXJpZXMpOworICAgIHByaW50ZigiJWx1IGluc3RydWN0aW9uczsgJWx1IGJ5
dGVzIGF0ICVwOyAlbHUgZXhjZXB0aW9uIGhhbmRsZXJzOyAlZCBsb2NhbHMgKCVkIHBhcmFtZXRl
cnMpOyAlZCB0ZW1wb3Jhcmllc1xuXG4iLCBpbnN0cnVjdGlvbkNvdW50LCBpbnN0cnVjdGlvbnMu
c2l6ZSgpICogc2l6ZW9mKEluc3RydWN0aW9uKSwgdGhpcywgZXhjZXB0aW9uSGFuZGxlcnMuc2l6
ZSgpLCBudW1QYXJhbWV0ZXJzICsgbnVtVmFycywgbnVtUGFyYW1ldGVycywgbnVtVGVtcG9yYXJp
ZXMpOwogICAgIAogICAgIGZvciAoVmVjdG9yPEluc3RydWN0aW9uPjo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBiZWdpbjsgaXQgIT0gZW5kOyArK2l0KQogICAgICAgICBkdW1wKGV4ZWMsIGJlZ2luLCBp
dCk7CkBAIC0xNTQsNiArMTU0LDEzIEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wKEV4ZWNTdGF0ZSog
ZXhlYykgY29uc3QKICAgICAgICAgfSB3aGlsZSAoaSA8IGpzVmFsdWVzLnNpemUoKSk7CiAgICAg
fQogICAgIAorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaWRlbnRpZmllcnMuc2l6ZSgpOyAr
K2kpCisgICAgICAgIHByaW50ZigiICBpZCV1ID0gJXNcbiIsIHN0YXRpY19jYXN0PHVuc2lnbmVk
PihpKSwgaWRlbnRpZmllcnNbaV0uYXNjaWkoKSk7CisKKyAgICBwcmludGYoIlxuQ29uc3RhbnRz
OlxuIik7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBqc1ZhbHVlcy5zaXplKCk7ICsraSkK
KyAgICAgICAgcHJpbnRmKCIgIGsldSA9ICVzXG4iLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaSks
IHZhbHVlVG9Tb3VyY2VTdHJpbmcoZXhlYywganNWYWx1ZXNbaV0pLmFzY2lpKCkpOworCiAgICAg
aWYgKHJlZ2V4cHMuc2l6ZSgpKSB7CiAgICAgICAgIHByaW50ZigiXG5SZWdFeHBzOlxuIik7CiAg
ICAgICAgIHNpemVfdCBpID0gMDsKQEAgLTE2Miw2ICsxNjksMTUgQEAgdm9pZCBDb2RlQmxvY2s6
OmR1bXAoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogICAgICAgICAgICAgKytpOwogICAgICAgICB9
IHdoaWxlIChpIDwgcmVnZXhwcy5zaXplKCkpOwogICAgIH0KKworICAgIGlmIChleGNlcHRpb25I
YW5kbGVycy5zaXplKCkpIHsKKyAgICAgICAgcHJpbnRmKCJcbkV4Y2VwdGlvbiBIYW5kbGVyczpc
biIpOworICAgICAgICB1bnNpZ25lZCBpID0gMDsKKyAgICAgICAgZG8geworICAgICAgICAgICAg
cHJpbnRmKCJcdCVkOiB7c3RhcnQ6IFslNGRdIGVuZDogWyU0ZF0gaGFuZGxlcjogWyU0ZF0gfVxu
IiwgaSsxLCBleGNlcHRpb25IYW5kbGVyc1tpXS5zdGFydCwgZXhjZXB0aW9uSGFuZGxlcnNbaV0u
ZW5kLCBleGNlcHRpb25IYW5kbGVyc1tpXS50YXJnZXQpOworICAgICAgICAgICAgKytpOworICAg
ICAgICB9IHdoaWxlIChpIDwgZXhjZXB0aW9uSGFuZGxlcnMuc2l6ZSgpKTsKKyAgICB9CiAgICAg
ICAgIAogICAgIHByaW50ZigiXG4iKTsKIH0KQEAgLTQ0OCw2ICs0NjQsMTYgQEAgdm9pZCBDb2Rl
QmxvY2s6OmR1bXAoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBWZWN0b3I8SW5zdHJ1Y3Rpb24+Ojpj
b25zdF9pdGVyYXRvciYKICAgICAgICAgICAgIHByaW50ZigiWyU0ZF0gam1wX3Njb3Blc1x0XiVk
LCAlZCgtPiVkKVxuIiwgbG9jYXRpb24sIHNjb3BlRGVsdGEsIG9mZnNldCwganVtcFRhcmdldChi
ZWdpbiwgaXQsIG9mZnNldCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKyAgICAg
ICAgY2FzZSBvcF9jYXRjaDogeworICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJh
bmQ7CisgICAgICAgICAgICBwcmludGYoIlslNGRdIGNhdGNoXHRcdCVzXG4iLCBsb2NhdGlvbiwg
cmVnaXN0ZXJOYW1lKHIwKS5jX3N0cigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIGNhc2Ugb3BfdGhyb3c6IHsKKyAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+
dS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRmKCJbJTRkXSB0aHJvd1x0XHQlc1xuIiwgbG9j
YXRpb24sIHJlZ2lzdGVyTmFtZShyMCkuY19zdHIoKSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQogICAgICAgICBjYXNlIG9wX2VuZDogewogICAgICAgICAgICAgaW50IHIwID0gKCsr
aXQpLT51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBwcmludGYoIlslNGRdIGVuZFx0XHQlc1xuIiwg
bG9jYXRpb24sIHJlZ2lzdGVyTmFtZShyMCkuY19zdHIoKSk7CkBAIC00NzMsNCArNDk5LDIyIEBA
IHZvaWQgQ29kZUJsb2NrOjptYXJrKCkKICAgICAgICAgZnVuY3Rpb25FeHByZXNzaW9uc1tpXS0+
Ym9keSgpLT5tYXJrKCk7CiB9CiAKK0luc3RydWN0aW9uKiBDb2RlQmxvY2s6OmhhbmRsZXJGb3JQ
Qyhjb25zdCBJbnN0cnVjdGlvbiogY29uc3QgYWRkcmVzcywgaW50JiBleHBlY3RlZERlcHRoKQor
eworICAgIFZlY3RvcjxIYW5kbGVySW5mbz46Oml0ZXJhdG9yIHB0ciA9IGV4Y2VwdGlvbkhhbmRs
ZXJzLmJlZ2luKCk7IAorICAgIFZlY3RvcjxIYW5kbGVySW5mbz46Oml0ZXJhdG9yIGVuZCA9IGV4
Y2VwdGlvbkhhbmRsZXJzLmVuZCgpOworICAgIHVuc2lnbmVkIGFkZHJlc3NPZmZzZXQgPSBhZGRy
ZXNzIC0gaW5zdHJ1Y3Rpb25zLmJlZ2luKCk7CisgICAgQVNTRVJUKGFkZHJlc3NPZmZzZXQgPCBp
bnN0cnVjdGlvbnMuc2l6ZSgpKTsKKyAgICAKKyAgICBmb3IgKDsgcHRyICE9IGVuZCAmJiAocHRy
LT5zdGFydCA8PSBhZGRyZXNzT2Zmc2V0IHx8IHB0ci0+ZW5kID49IGFkZHJlc3NPZmZzZXQpOyAr
K3B0cikgeworICAgICAgICAvLyBIYW5kbGVycyBhcmUgb3JkZXJlZCBpbm5lcm1vc3QgZmlyc3Qs
IHNvIHRoZSBmaXJzdCBoYW5kbGVyIHdlIGVuY291bnRlcgorICAgICAgICAvLyB0aGF0IGNvbnRh
aW5zIHRoZSBzb3VyY2UgYWRkcmVzcyBpcyB0aGUgY29ycmVjdCBoYW5kbGVyIHRvIHVzZS4KKyAg
ICAgICAgaWYgKHB0ci0+c3RhcnQgPD0gYWRkcmVzc09mZnNldCAmJiBwdHItPmVuZCA+PSBhZGRy
ZXNzT2Zmc2V0KSB7CisgICAgICAgICAgICBleHBlY3RlZERlcHRoID0gcHRyLT5zY29wZURlcHRo
OworICAgICAgICAgICAgcmV0dXJuIGluc3RydWN0aW9ucy5iZWdpbigpICsgcHRyLT50YXJnZXQ7
CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEtK
UwpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvVk0vQ29kZUJsb2NrLmggYi9KYXZhU2NyaXB0
Q29yZS9WTS9Db2RlQmxvY2suaAppbmRleCA4MTljMWY0Li4zNjY3ODQ1IDEwMDY0NAotLS0gYS9K
YXZhU2NyaXB0Q29yZS9WTS9Db2RlQmxvY2suaAorKysgYi9KYXZhU2NyaXB0Q29yZS9WTS9Db2Rl
QmxvY2suaApAQCAtNDAsNiArNDAsMTMgQEAgbmFtZXNwYWNlIEtKUyB7CiAKICAgICBjbGFzcyBF
eGVjU3RhdGU7CiAKKyAgICBzdHJ1Y3QgSGFuZGxlckluZm8geworICAgICAgICB1bnNpZ25lZCBz
dGFydDsKKyAgICAgICAgdW5zaWduZWQgZW5kOworICAgICAgICB1bnNpZ25lZCB0YXJnZXQ7Cisg
ICAgICAgIHVuc2lnbmVkIHNjb3BlRGVwdGg7CisgICAgfTsKKwogICAgIHN0cnVjdCBDb2RlQmxv
Y2sgewogICAgICAgICBDb2RlQmxvY2soYm9vbCB1c2VzRXZhbF8sIGJvb2wgbmVlZHNDbG9zdXJl
XykKICAgICAgICAgICAgIDogbnVtVGVtcG9yYXJpZXMoMCkKQEAgLTcwLDggKzc3LDEwIEBAIG5h
bWVzcGFjZSBLSlMgewogICAgICAgICBWZWN0b3I8UmVmUHRyPEZ1bmNEZWNsTm9kZT4gPiBmdW5j
dGlvbnM7CiAgICAgICAgIFZlY3RvcjxSZWZQdHI8RnVuY0V4cHJOb2RlPiA+IGZ1bmN0aW9uRXhw
cmVzc2lvbnM7CiAgICAgICAgIFZlY3RvcjxKU1ZhbHVlKj4ganNWYWx1ZXM7Ci0gICAgICAgIFZl
Y3RvcjxSZWZQdHI8UmVnRXhwPiA+IHJlZ2V4cHM7Ci0gICAgICAgIAorICAgICAgICBWZWN0b3I8
UmVmUHRyPFJlZ0V4cD4gPiByZWdleHBzOyAgICAgICAgCisgICAgICAgIFZlY3RvcjxIYW5kbGVy
SW5mbz4gZXhjZXB0aW9uSGFuZGxlcnM7CisKKyAgICAgICAgSW5zdHJ1Y3Rpb24qIGhhbmRsZXJG
b3JQQyhjb25zdCBJbnN0cnVjdGlvbiogY29uc3QsIGludCYgZXhwZWN0ZWREZXB0aCk7CiAgICAg
cHJpdmF0ZToKICAgICAgICAgdm9pZCBkdW1wKEV4ZWNTdGF0ZSosIGNvbnN0IFZlY3RvcjxJbnN0
cnVjdGlvbj46OmNvbnN0X2l0ZXJhdG9yJiBiZWdpbiwgVmVjdG9yPEluc3RydWN0aW9uPjo6Y29u
c3RfaXRlcmF0b3ImKSBjb25zdDsKICAgICB9OwpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUv
Vk0vQ29kZUdlbmVyYXRvci5jcHAgYi9KYXZhU2NyaXB0Q29yZS9WTS9Db2RlR2VuZXJhdG9yLmNw
cAppbmRleCBkYThhNGUyLi43ZTQ5NDVhIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9WTS9D
b2RlR2VuZXJhdG9yLmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS9WTS9Db2RlR2VuZXJhdG9yLmNw
cApAQCAtODU0LDQgKzg1NCwxOSBAQCBSZWdpc3RlcklEKiBDb2RlR2VuZXJhdG9yOjplbWl0R2V0
UHJvcGVydHlOYW1lcyhSZWdpc3RlcklEKiBpdGVyYXRvciwgUmVnaXN0ZXJJRAogICAgIHJldHVy
biBpdGVyYXRvcjsKIH0KIAorUmVnaXN0ZXJJRCogQ29kZUdlbmVyYXRvcjo6ZW1pdENhdGNoKFJl
Z2lzdGVySUQqIHRhcmdldFJlZ2lzdGVyLCBMYWJlbElEKiBzdGFydCwgTGFiZWxJRCogZW5kKQor
eworICAgIEhhbmRsZXJJbmZvIGluZm8gPSB7IHN0YXJ0LT5vZmZzZXRGcm9tKDApLCBlbmQtPm9m
ZnNldEZyb20oMCksIGluc3RydWN0aW9ucygpLnNpemUoKSwgbV9zY29wZURlcHRofTsKKyAgICBl
eGNlcHRpb25IYW5kbGVycygpLmFwcGVuZChpbmZvKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQobWFjaGluZSgpLmdldE9wY29kZShvcF9jYXRjaCkpOworICAgIGluc3RydWN0aW9ucygpLmFw
cGVuZCh0YXJnZXRSZWdpc3Rlci0+aW5kZXgoKSk7CisgICAgcmV0dXJuIHRhcmdldFJlZ2lzdGVy
OworfQorICAgIAordm9pZCBDb2RlR2VuZXJhdG9yOjplbWl0VGhyb3coUmVnaXN0ZXJJRCogZXhj
ZXB0aW9uKQoreworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChtYWNoaW5lKCkuZ2V0T3Bjb2Rl
KG9wX3Rocm93KSk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGV4Y2VwdGlvbi0+aW5kZXgo
KSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEtKUwpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUv
Vk0vQ29kZUdlbmVyYXRvci5oIGIvSmF2YVNjcmlwdENvcmUvVk0vQ29kZUdlbmVyYXRvci5oCmlu
ZGV4IGRjYTVmZDMuLmQyZmVkZjggMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL1ZNL0NvZGVH
ZW5lcmF0b3IuaAorKysgYi9KYXZhU2NyaXB0Q29yZS9WTS9Db2RlR2VuZXJhdG9yLmgKQEAgLTE4
MCw3ICsxODAsOSBAQCBuYW1lc3BhY2UgS0pTIHsKIAogICAgICAgICBSZWdpc3RlcklEKiBlbWl0
UHVzaFNjb3BlKFJlZ2lzdGVySUQqKTsKICAgICAgICAgdm9pZCBlbWl0UG9wU2NvcGUoKTsKLSAg
ICAgICAgCisKKyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdENhdGNoKFJlZ2lzdGVySUQqLCBMYWJl
bElEKiBzdGFydCwgTGFiZWxJRCogZW5kKTsKKyAgICAgICAgdm9pZCBlbWl0VGhyb3coUmVnaXN0
ZXJJRCopOwogICAgIHByaXZhdGU6CiAgICAgICAgIHN0cnVjdCBKU1ZhbHVlSGFzaFRyYWl0cyAg
ewogICAgICAgICAgICAgdHlwZWRlZiBKU1ZhbHVlKiBUcmFpdFR5cGU7CkBAIC0yMTgsNyArMjIw
LDggQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgIAogICAgICAgICBWZWN0b3I8SW5zdHJ1Y3Rp
b24+JiBpbnN0cnVjdGlvbnMoKSB7IHJldHVybiBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zOyB9
CiAgICAgICAgIFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSgpIHsgcmV0dXJuICptX3N5bWJvbFRh
YmxlOyB9Ci0gICAgICAgIAorICAgICAgICBWZWN0b3I8SGFuZGxlckluZm8+JiBleGNlcHRpb25I
YW5kbGVycygpIHsgcmV0dXJuIG1fY29kZUJsb2NrLT5leGNlcHRpb25IYW5kbGVyczsgfQorCiAg
ICAgICAgIGNvbnN0IFNjb3BlQ2hhaW4qIG1fc2NvcGVDaGFpbjsKICAgICAgICAgU3ltYm9sVGFi
bGUqIG1fc3ltYm9sVGFibGU7CiAgICAgICAgIApkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUv
Vk0vSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5jcHAgYi9KYXZhU2NyaXB0Q29yZS9WTS9KU1Byb3Bl
cnR5TmFtZUl0ZXJhdG9yLmNwcAppbmRleCAxM2QyOTZhLi5iNzgyMjVjIDEwMDY0NAotLS0gYS9K
YXZhU2NyaXB0Q29yZS9WTS9KU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmNwcAorKysgYi9KYXZhU2Ny
aXB0Q29yZS9WTS9KU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmNwcApAQCAtMTE3LDkgKzExNyw4IEBA
IEpTUHJvcGVydHlOYW1lSXRlcmF0b3IqIEpTUHJvcGVydHlOYW1lSXRlcmF0b3I6OmNyZWF0ZShF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUqCiB7CiAgICAgaWYgKHYtPmlzVW5kZWZpbmVkT3JOdWxs
KCkpCiAgICAgICAgIHJldHVybiBuZXcgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvcigwLCAwLCAwKTsK
LSAgICAKKwogICAgIEpTT2JqZWN0KiBvID0gdi0+dG9PYmplY3QoZXhlYyk7Ci0gICAgQVNTRVJU
KCFleGVjLT5oYWRFeGNlcHRpb24oKSk7IC8vIHRvT2JqZWN0IHNob3VsZCBuZXZlciB0aHJvdyBm
b3IgYW55IG5vbi1udWxsL3VuZGVmaW5lZCB2YWx1ZQogICAgIFByb3BlcnR5TmFtZUFycmF5IHBy
b3BlcnR5TmFtZXM7CiAgICAgby0+Z2V0UHJvcGVydHlOYW1lcyhleGVjLCBwcm9wZXJ0eU5hbWVz
KTsgICAgCiAgICAgc2l6ZV90IG51bVByb3BlcnRpZXMgPSBwcm9wZXJ0eU5hbWVzLnNpemUoKTsK
ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL1ZNL01hY2hpbmUuY3BwIGIvSmF2YVNjcmlwdENv
cmUvVk0vTWFjaGluZS5jcHAKaW5kZXggZGNmMDRmNi4uMzYxZDg4MiAxMDA2NDQKLS0tIGEvSmF2
YVNjcmlwdENvcmUvVk0vTWFjaGluZS5jcHAKKysrIGIvSmF2YVNjcmlwdENvcmUvVk0vTWFjaGlu
ZS5jcHAKQEAgLTI3MCw2ICsyNzAsOTEgQEAgc3RhdGljIHZvaWQgTkVWRVJfSU5MSU5FIHJlc29s
dmVCYXNlKEV4ZWNTdGF0ZSogZXhlYywgSW5zdHJ1Y3Rpb24qIHZQQywgUmVnaXN0ZXIKICAgICBy
W3IwXS51LmpzVmFsdWUgPSBiYXNlOwogfQogCitORVZFUl9JTkxJTkUgSlNWYWx1ZSogcHJlcGFy
ZUV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUqIGV4Y2VwdGlvblZhbHVlKSAKK3sK
KyAgICBpZiAoZXhjZXB0aW9uVmFsdWUtPmlzT2JqZWN0KCkpIHsKKyAgICAgICAgSlNPYmplY3Qq
IGV4Y2VwdGlvbiA9IHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4oZXhjZXB0aW9uVmFsdWUpOworICAg
ICAgICBpZiAoIWV4Y2VwdGlvbi0+aGFzUHJvcGVydHkoZXhlYywgImxpbmUiKSAmJiAhZXhjZXB0
aW9uLT5oYXNQcm9wZXJ0eShleGVjLCAic291cmNlVVJMIikpIHsKKyAgICAgICAgICAgIC8vIE5l
ZWQgdG8gc2V0IGxpbmUgYW5kIHNvdXJjZVVSTCBwcm9wZXJ0aWVzIG9uIHRoZSBleGNlcHRpb24s
IGJ1dCB0aGF0IGlzIG5vdCBjdXJyZW50bHkgcG9zc2libGUKKyAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBleGNlcHRpb25WYWx1
ZTsKK30KKworTkVWRVJfSU5MSU5FIEluc3RydWN0aW9uKiB1bndpbmRGcmFtZShDb2RlQmxvY2sq
JiBjb2RlQmxvY2ssIEpTVmFsdWUqKiYgaywgU2NvcGVDaGFpbiomIHNjb3BlQ2hhaW4sIFZlY3Rv
cjxSZWdpc3Rlcj4qIHJlZ2lzdGVycywgUmVnaXN0ZXIqJiBiYXNlKQoreworICAgIENvZGVCbG9j
ayogb2xkQ29kZUJsb2NrID0gY29kZUJsb2NrOworICAgIAorICAgIFJlZ2lzdGVyKiByZXR1cm5J
bmZvID0gYmFzZSAtIG9sZENvZGVCbG9jay0+bnVtVmFycyAtIG9sZENvZGVCbG9jay0+bnVtUGFy
YW1ldGVycyAtIE1hY2hpbmU6OnJldHVybkluZm9TaXplOworICAgIAorICAgIGlmIChvbGRDb2Rl
QmxvY2stPm5lZWRzQWN0aXZhdGlvbikgeworICAgICAgICAvLyBGaW5kIHRoZSB0b3Agb2YgdGhl
IHNjb3BlIGNoYWluCisgICAgICAgIFNjb3BlQ2hhaW5JdGVyYXRvciBpdGVyID0gc2NvcGVDaGFp
bi0+YmVnaW4oKTsgCisgICAgICAgIFNjb3BlQ2hhaW5JdGVyYXRvciBlbmQgPSBzY29wZUNoYWlu
LT5lbmQoKTsKKyAgICAgICAgd2hpbGUgKCEoKCppdGVyKS0+aXNBY3RpdmF0aW9uT2JqZWN0KCkp
KSB7CisgICAgICAgICAgICArK2l0ZXI7CisgICAgICAgICAgICBpZiAoaXRlciA9PSBlbmQpCisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICAvLyBDbGVhbiB1cCB0
aGUgYWN0aXZhdGlvbiBpZiduIGl0J3MgbmVjZXNzYXJ5CisgICAgICAgIGlmIChpdGVyICE9IGVu
ZCAmJiAoKml0ZXIpLT5pc0FjdGl2YXRpb25PYmplY3QoKSkgeworICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8SlNBY3RpdmF0aW9uKj4oKml0ZXIpLT5jb3B5UmVnaXN0ZXJzKCk7CisgICAgICAgICAg
ICBzY29wZUNoYWluLT5+U2NvcGVDaGFpbigpOworICAgICAgICB9CisgICAgfQorICAgIAorICAg
IGNvZGVCbG9jayA9IHJldHVybkluZm9bMF0udS5jb2RlQmxvY2s7CisgICAgaWYgKCFjb2RlQmxv
Y2spCisgICAgICAgIHJldHVybiAwOworICAgIGsgPSBjb2RlQmxvY2stPmpzVmFsdWVzLmRhdGEo
KTsKKyAgICBzY29wZUNoYWluID0gcmV0dXJuSW5mb1syXS51LnNjb3BlQ2hhaW47CisgICAgYmFz
ZSA9IHJlZ2lzdGVycy0+ZGF0YSgpICsgcmV0dXJuSW5mb1szXS51Lmk7CisgICAgcmV0dXJuIHJl
dHVybkluZm9bMV0udS52UEM7Cit9CisKK3N0YXRpYyBJbnN0cnVjdGlvbiogZXhjZXB0aW9uVGFy
Z2V0OworTkVWRVJfSU5MSU5FIHN0YXRpYyBib29sIHRocm93RXhjZXB0aW9uKENvZGVCbG9jayom
IGNvZGVCbG9jaywgSlNWYWx1ZSoqJiBrLCBTY29wZUNoYWluKiYgc2NvcGVDaGFpbiwgVmVjdG9y
PFJlZ2lzdGVyPiogcmVnaXN0ZXJzLCBSZWdpc3RlciomIGJhc2UsIGNvbnN0IEluc3RydWN0aW9u
KiB2UEMpCit7CisgICAgd2hpbGUgKGNvZGVCbG9jaykgeworICAgICAgICBpbnQgZXhwZWN0ZWRE
ZXB0aDsgICAgICAgIAorICAgICAgICBJbnN0cnVjdGlvbiogaGFuZGxlclBDID0gY29kZUJsb2Nr
LT5oYW5kbGVyRm9yUEModlBDLCBleHBlY3RlZERlcHRoKTsKKyAgICAgICAgaWYgKCFoYW5kbGVy
UEMpIHsKKyAgICAgICAgICAgIHZQQyA9IHVud2luZEZyYW1lKGNvZGVCbG9jaywgaywgc2NvcGVD
aGFpbiwgcmVnaXN0ZXJzLCBiYXNlKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9
CisgICAgICAgIC8vIE5vdyB1bndpbmQgdGhlIHNjb3BlIGNoYWluCisgICAgICAgIGludCBzY29w
ZURlcHRoID0gMDsKKyAgICAgICAgLy8gU3RlcCAxKSB3b3JrIG91dCBob3cgZGVlcCB0aGUgc2Nv
cGUgY2hhaW4gaXMKKyAgICAgICAgU2NvcGVDaGFpbkl0ZXJhdG9yIGl0ZXIgPSBzY29wZUNoYWlu
LT5iZWdpbigpOyAKKyAgICAgICAgU2NvcGVDaGFpbkl0ZXJhdG9yIGVuZCA9IHNjb3BlQ2hhaW4t
PmVuZCgpOyAKKyAgICAgICAgd2hpbGUgKCEoKCppdGVyKS0+aXNBY3RpdmF0aW9uT2JqZWN0KCkp
KSB7CisgICAgICAgICAgICArK2l0ZXI7CisgICAgICAgICAgICArK3Njb3BlRGVwdGg7CisgICAg
ICAgICAgICBpZiAoaXRlciA9PSBlbmQpIHsKKyAgICAgICAgICAgICAgICAvLyByZWFjaGVkIHRo
ZSBnbG9iYWwgb2JqZWN0IGF0IHRoZSB0b3Agb2YgdGhlIHNjb3BlIGNoYWluCisgICAgICAgICAg
ICAgICAgLS1zY29wZURlcHRoOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBTdGVwIDIpIHJlZHVjZSB0byB0aGUg
ZXhwZWN0IGRlcHRoCisgICAgICAgIGludCBzY29wZURlbHRhID0gc2NvcGVEZXB0aCAtIGV4cGVj
dGVkRGVwdGg7CisgICAgICAgIAorICAgICAgICAvLyBTdGVwIDMpIENyeSA6LSgKKyAgICAgICAg
QVNTRVJUKHNjb3BlRGVsdGEgPj0gMCk7CisgICAgICAgIHdoaWxlIChzY29wZURlbHRhLS0pCisg
ICAgICAgICAgICBzY29wZUNoYWluLT5wb3AoKTsKKyAgICAgICAgZXhjZXB0aW9uVGFyZ2V0ID0g
aGFuZGxlclBDOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNl
OworfQorCisjaWYgSEFWRShDT01QVVRFRF9HT1RPKQordm9pZCogdGhyb3dUYXJnZXQgPSAwOwor
I2VuZGlmCiAKIHZvaWQgTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aW9uRmxhZyBmbGFn
LCBFeGVjU3RhdGUqIGV4ZWMsIFZlY3RvcjxSZWdpc3Rlcj4qIHJlZ2lzdGVycywgU2NvcGVDaGFp
biogc2NvcGVDaGFpbiwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CkBAIC0yODUsMTIgKzM3MCwx
NCBAQCB2b2lkIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGlvbkZsYWcgZmxhZywgRXhl
Y1N0YXRlKiBleGVjLCBWZWN0b3I8UmVnaXN0ZQogICAgICAgICAgICAgICAgIEZPUl9FQUNIX09Q
Q09ERV9JRChBRERfT1BDT0RFX0lEKTsKICAgICAgICAgICAgICN1bmRlZiBBRERfT1BDT0RFCiAg
ICAgICAgICAgICBBU1NFUlQobV9vcGNvZGVJRFRhYmxlLnNpemUoKSA9PSBudW1PcGNvZGVJRHMp
OworICAgICAgICAgICAgdGhyb3dUYXJnZXQgPSAmJmdjY19kZXBlbmRlbmN5X2hhY2s7CiAgICAg
ICAgICNlbmRpZiAvLyBIQVZFKENPTVBVVEVEX0dPVE8pCiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+ZHluYW1pY0dsb2Jh
bE9iamVjdCgpOwotCisgICAgSlNWYWx1ZSogZXhjZXB0aW9uRGF0YSA9IDA7CisgICAgCiAgICAg
cmVnaXN0ZXJzLT5yZXNlcnZlQ2FwYWNpdHkoNTEyKTsKIAogICAgIGludCBvbGRSZWdpc3Rlck9m
ZnNldCA9IGdsb2JhbE9iamVjdC0+cmVnaXN0ZXJPZmZzZXQoKTsKQEAgLTk3OCw2ICsxMDY1LDM0
IEBAIHZvaWQgTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aW9uRmxhZyBmbGFnLCBFeGVj
U3RhdGUqIGV4ZWMsIFZlY3RvcjxSZWdpc3RlCiAgICAgICAgIHZQQyArPSBvZmZzZXQ7CiAgICAg
ICAgIE5FWFRfT1BDT0RFOwogICAgIH0KKyAgICBCRUdJTl9PUENPREUob3BfY2F0Y2gpIHsKKyAg
ICAgICAgQVNTRVJUKGV4Y2VwdGlvbkRhdGEpOworICAgICAgICBpbnQgcjAgPSAoKyt2UEMpLT51
Lm9wZXJhbmQ7CisgICAgICAgIHJbcjBdLnUuanNWYWx1ZSA9IGV4Y2VwdGlvbkRhdGE7CisgICAg
ICAgIGV4Y2VwdGlvbkRhdGEgPSAwOworICAgICAgICArK3ZQQzsKKyAgICAgICAgTkVYVF9PUENP
REU7CisgICAgfQorICAgIEJFR0lOX09QQ09ERShvcF90aHJvdykgeworICAgICAgICBpbnQgZSA9
ICgrK3ZQQyktPnUub3BlcmFuZDsKKyAgICAgICAgZXhjZXB0aW9uRGF0YSA9IHByZXBhcmVFeGNl
cHRpb24oZXhlYywgcltlXS51LmpzVmFsdWUpOworICAgICAgICBpZiAoISh0aHJvd0V4Y2VwdGlv
bihjb2RlQmxvY2ssIGssIHNjb3BlQ2hhaW4sIHJlZ2lzdGVycywgciwgdlBDKSkpIHsKKyAgICAg
ICAgICAgIGdsb2JhbE9iamVjdC0+c2V0UmVnaXN0ZXJPZmZzZXQob2xkUmVnaXN0ZXJPZmZzZXQp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyNpZiBIQVZFKENPTVBVVEVEX0dP
VE8pCisgICAgICAgIC8vIEhhY2sgYXJvdW5kIGdjYyBwZXJmb3JtYW5jZSBxdWlyayBieSBwZXJm
b3JtaW5nIGFuIGluZGlyZWN0IGdvdG8KKyAgICAgICAgLy8gaW4gb3JkZXIgdG8gc2V0IHRoZSB2
UEMgLS0gYXR0ZW1wdGluZyB0byBkbyBzbyBkaXJlY3RseSByZXN1bHRzIGluIGEKKyAgICAgICAg
Ly8gc2lnbmlmaWNhbnQgcmVncmVzc2lvbi4KKyAgICAgICAgZ290byAqdGhyb3dUYXJnZXQ7Cisg
ICAgfQorICAgIGdjY19kZXBlbmRlbmN5X2hhY2s6IHsKKyNlbmRpZgorCisgICAgICAgIHZQQyA9
IGV4Y2VwdGlvblRhcmdldDsKKyAgICAgICAgTkVYVF9PUENPREU7CisgICAgfQogICAgIEJFR0lO
X09QQ09ERShvcF9lbmQpIHsKICAgICAgICAgaW50IHIwID0gKCsrdlBDKS0+dS5vcGVyYW5kOwog
I2lmbmRlZiBOREVCVUcKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL1ZNL09wY29kZS5oIGIv
SmF2YVNjcmlwdENvcmUvVk0vT3Bjb2RlLmgKaW5kZXggMTI4NGJkYi4uNjY3YTU3NCAxMDA2NDQK
LS0tIGEvSmF2YVNjcmlwdENvcmUvVk0vT3Bjb2RlLmgKKysrIGIvSmF2YVNjcmlwdENvcmUvVk0v
T3Bjb2RlLmgKQEAgLTEwMyw2ICsxMDMsOSBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgbWFj
cm8ob3BfcHVzaF9zY29wZSkgXAogICAgICAgICBtYWNybyhvcF9wb3Bfc2NvcGUpIFwKICAgICAg
ICAgXAorICAgICAgICBtYWNybyhvcF9jYXRjaCkgXAorICAgICAgICBtYWNybyhvcF90aHJvdykg
XAorICAgICAgICBcCiAgICAgICAgIG1hY3JvKG9wX2VuZCkgLy8gZW5kIG11c3QgYmUgdGhlIGxh
c3Qgb3Bjb2RlIGluIHRoZSBsaXN0CiAgICAgICAgIAogICAgICNkZWZpbmUgT1BDT0RFX0lEX0VO
VU0ob3Bjb2RlKSBvcGNvZGUsCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9ranMvbm9kZXMu
Y3BwIGIvSmF2YVNjcmlwdENvcmUva2pzL25vZGVzLmNwcAppbmRleCBlOWFkZmQxLi5lNjBhZmEw
IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9ranMvbm9kZXMuY3BwCisrKyBiL0phdmFTY3Jp
cHRDb3JlL2tqcy9ub2Rlcy5jcHAKQEAgLTU0ODAsNiArNTQ4MCwxMiBAQCBKU1ZhbHVlKiBMYWJl
bE5vZGU6OmV4ZWN1dGUoRXhlY1N0YXRlKiBleGVjKQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0gVGhyb3dOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQogCitSZWdpc3RlcklEKiBUaHJvd05vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVy
YXRvciwgUmVnaXN0ZXJJRCogZHN0KQoreworICAgIGdlbmVyYXRvci5lbWl0VGhyb3coZ2VuZXJh
dG9yLmVtaXROb2RlKGRzdCwgbV9leHByLmdldCgpKSk7CisgICAgcmV0dXJuIGRzdDsKK30KKwog
dm9pZCBUaHJvd05vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoRXhlY1N0YXRlKiwgY29uc3Qg
U3ltYm9sVGFibGUmLCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smIG5vZGVTdGFjaykK
IHsKICAgICBub2RlU3RhY2suYXBwZW5kKG1fZXhwci5nZXQoKSk7CkBAIC01NDk3LDYgKzU1MDMs
NDUgQEAgSlNWYWx1ZSogVGhyb3dOb2RlOjpleGVjdXRlKEV4ZWNTdGF0ZSogZXhlYykKIAogLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRyeU5vZGUgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorUmVnaXN0ZXJJRCogVHJ5Tm9kZTo6ZW1pdENvZGUoQ29k
ZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCit7CisgICAgUmVmUHRyPExh
YmVsSUQ+IHRyeVN0YXJ0TGFiZWwgPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKKyAgICBSZWZQdHI8
TGFiZWxJRD4gdHJ5RW5kTGFiZWwgPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKKyAgICBSZWZQdHI8
TGFiZWxJRD4gaGFuZGxlckVuZExhYmVsID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7CisgICAgCisg
ICAgZ2VuZXJhdG9yLmVtaXRMYWJlbCh0cnlTdGFydExhYmVsLmdldCgpKTsKKyAgICBnZW5lcmF0
b3IuZW1pdE5vZGUoZHN0LCBtX3RyeUJsb2NrLmdldCgpKTsKKyAgICBnZW5lcmF0b3IuZW1pdExh
YmVsKHRyeUVuZExhYmVsLmdldCgpKTsKKyAgICAKKyAgICBnZW5lcmF0b3IuZW1pdEp1bXAoaGFu
ZGxlckVuZExhYmVsLmdldCgpKTsKKworICAgIGlmIChtX2NhdGNoQmxvY2spIHsKKyAgICAgICAg
UmVmUHRyPFJlZ2lzdGVySUQ+IGV4Y2VwdGlvblJlZ2lzdGVyID0gZ2VuZXJhdG9yLmVtaXRDYXRj
aChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHRyeVN0YXJ0TGFiZWwuZ2V0KCksIHRyeUVuZExh
YmVsLmdldCgpKTsKKyAgICAgICAgUmVnaXN0ZXJJRCogbmV3U2NvcGUgPSBnZW5lcmF0b3IuZW1p
dE5ld09iamVjdChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCkpOworICAgICAgICBnZW5lcmF0b3Iu
ZW1pdFB1dFByb3BJZChuZXdTY29wZSwgbV9leGNlcHRpb25JZGVudCwgZXhjZXB0aW9uUmVnaXN0
ZXIuZ2V0KCkpOworICAgICAgICBleGNlcHRpb25SZWdpc3RlciA9IDA7IC8vIFJlbGVhc2UgcmVn
aXN0ZXIgdXNlZCBmb3IgdGVtcG9yYXJpZXMKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRQdXNoU2Nv
cGUobmV3U2NvcGUpOworICAgICAgICBtX2NhdGNoQmxvY2stPmVtaXRDb2RlKGdlbmVyYXRvciwg
ZHN0KTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRQb3BTY29wZSgpOworICAgICAgICBpZiAoIW1f
ZmluYWxseUJsb2NrKQorICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChoYW5kbGVyRW5k
TGFiZWwuZ2V0KCkpOworICAgIH0gCisKKyAgICBpZiAobV9maW5hbGx5QmxvY2spIHsKKyAgICAg
ICAgUmVmUHRyPExhYmVsSUQ+IGZpbmFsbHlTdGFydExhYmVsID0gZ2VuZXJhdG9yLm5ld0xhYmVs
KCk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwoZmluYWxseVN0YXJ0TGFiZWwuZ2V0KCkp
OworICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXAoaGFuZGxlckVuZExhYmVsLmdldCgpKTsKKyAg
ICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHRlbXBFeGNlcHRpb25SZWdpc3RlciA9IGdlbmVyYXRv
ci5lbWl0Q2F0Y2goZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCB0cnlTdGFydExhYmVsLmdldCgp
LCBmaW5hbGx5U3RhcnRMYWJlbC5nZXQoKSk7CisgICAgICAgIG1fZmluYWxseUJsb2NrLT5lbWl0
Q29kZShnZW5lcmF0b3IsIGRzdCk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0VGhyb3codGVtcEV4
Y2VwdGlvblJlZ2lzdGVyLmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChoYW5k
bGVyRW5kTGFiZWwuZ2V0KCkpOworICAgICAgICBtX2ZpbmFsbHlCbG9jay0+ZW1pdENvZGUoZ2Vu
ZXJhdG9yLCBkc3QpOworICAgIH0KKworICAgIHJldHVybiBkc3Q7Cit9CisKKwogdm9pZCBUcnlO
b2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKEV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxl
JiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJiBub2RlU3RhY2spCiB7CiAgICAgLy8g
Q2FuJ3Qgb3B0aW1pemUgd2l0aGluIGNhdGNoQmxvY2sgYmVjYXVzZSAiY2F0Y2giIGludHJvZHVj
ZXMgYSBkeW5hbWljIHNjb3BlLgpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUva2pzL25vZGVz
LmggYi9KYXZhU2NyaXB0Q29yZS9ranMvbm9kZXMuaAppbmRleCA0YzMwNjVjLi41OWRjZTA2IDEw
MDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9ranMvbm9kZXMuaAorKysgYi9KYXZhU2NyaXB0Q29y
ZS9ranMvbm9kZXMuaApAQCAtMjg1OSw2ICsyODU5LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAg
ICAgIHsKICAgICAgICAgfQogCisgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUo
Q29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgS0pTX0ZBU1RfQ0FMTDsKICAgICAgICAg
dmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoRXhlY1N0YXRlKiwgY29uc3QgU3lt
Ym9sVGFibGUmLCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxM
OwogICAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV4ZWN1dGUoRXhlY1N0YXRlKikgS0pTX0ZBU1Rf
Q0FMTDsKICAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0
IEtKU19GQVNUX0NBTEw7CkBAIC0yODgxLDYgKzI4ODIsOCBAQCBuYW1lc3BhY2UgS0pTIHsKICAg
ICAgICAgdmlydHVhbCBKU1ZhbHVlKiBleGVjdXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7
CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNf
RkFTVF9DQUxMOwogCisgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdl
bmVyYXRvciYsIFJlZ2lzdGVySUQqIGRzdCA9IDApIEtKU19GQVNUX0NBTEw7CisKICAgICBwcml2
YXRlOgogICAgICAgICBSZWZQdHI8U3RhdGVtZW50Tm9kZT4gbV90cnlCbG9jazsKICAgICAgICAg
SWRlbnRpZmllciBtX2V4Y2VwdGlvbklkZW50Owo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>20376</attachid>
            <date>2008-04-06 23:39:58 -0700</date>
            <delta_ts>2008-04-07 17:11:53 -0700</delta_ts>
            <desc>Slightly improved version of gcc perf hack</desc>
            <filename>exceptions.patch</filename>
            <type>text/plain</type>
            <size>18297</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCA2NjBiODhiLi4xNGVlYjkxIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzUg
QEAKKzIwMDgtMDQtMDYgIE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBCdWcgMTgzMzg6IFN1cHBv
cnQgZXhjZXB0aW9ucyBpbiBTcXVpcnJlbEZpc2ggPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE4MzM4PgorCisgICAgICAgIEluaXRpYWwgc3VwcG9ydCBmb3IgZXhjZXB0
aW9ucyBpbiBTcXVpcnJlbEZpc2gsIG9ubHkgc3VwcG9ydHMgZmluYWxpc2VycyBpbiB0aGUKKyAg
ICAgICAgc2ltcGxlIGNhc2VzIChlZy4gZXhjZXB0aW9ucyBhbmQgbm9uLWdvdG8vcmV0dXJuIGFj
cm9zcyBmaW5hbGlzZXIgYm91bmRhcmllcykuCisgICAgICAgIFRoaXMgZG9lc24ndCBhZGQgdGhl
IHJlcXVpcmVkIGV4Y2VwdGlvbiBjaGVja3MgdG8gZXhpc3RpbmcgY29kZSwgaXQgbWVyZWx5IGFk
ZHMKKyAgICAgICAgc3VwcG9ydCBmb3IgdGhyb3csIGNhdGNoLCBhbmQgdGhlIHJlcXVpcmVkIHN0
YWNrIHVud2luZGluZy4KKworICAgICAgICAqIFZNL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChL
SlM6OkNvZGVCbG9jazo6ZHVtcCk6CisgICAgICAgIChLSlM6OkNvZGVCbG9jazo6aGFuZGxlckZv
clBDKToKKyAgICAgICAgKiBWTS9Db2RlQmxvY2suaDoKKyAgICAgICAgKiBWTS9Db2RlR2VuZXJh
dG9yLmNwcDoKKyAgICAgICAgKEtKUzo6Q29kZUdlbmVyYXRvcjo6ZW1pdENhdGNoKToKKyAgICAg
ICAgKEtKUzo6Q29kZUdlbmVyYXRvcjo6ZW1pdFRocm93KToKKyAgICAgICAgKiBWTS9Db2RlR2Vu
ZXJhdG9yLmg6CisgICAgICAgICogVk0vSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5jcHA6CisgICAg
ICAgIChLSlM6OkpTUHJvcGVydHlOYW1lSXRlcmF0b3I6OmNyZWF0ZSk6CisgICAgICAgICogVk0v
TWFjaGluZS5jcHA6CisgICAgICAgIChLSlM6OnByZXBhcmVFeGNlcHRpb24pOgorICAgICAgICAo
S0pTOjp1bndpbmRGcmFtZSk6CisgICAgICAgIChLSlM6OnRocm93RXhjZXB0aW9uKToKKyAgICAg
ICAgKEtKUzo6TWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUpOgorICAgICAgICAqIFZNL09wY29kZS5o
OgorICAgICAgICAqIGtqcy9ub2Rlcy5jcHA6CisgICAgICAgIChLSlM6OlRocm93Tm9kZTo6ZW1p
dENvZGUpOgorICAgICAgICAoS0pTOjpUcnlOb2RlOjplbWl0Q29kZSk6CisgICAgICAgICoga2pz
L25vZGVzLmg6CisKIDIwMDgtMDQtMDYgIEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNv
bT4KIAogICAgICAgICBSZXZpZXdlZCBieSBPbGl2ZXIgSHVudC4KZGlmZiAtLWdpdCBhL0phdmFT
Y3JpcHRDb3JlL1ZNL0NvZGVCbG9jay5jcHAgYi9KYXZhU2NyaXB0Q29yZS9WTS9Db2RlQmxvY2su
Y3BwCmluZGV4IDBlY2JlMGMuLjMwN2I4MzQgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL1ZN
L0NvZGVCbG9jay5jcHAKKysrIGIvSmF2YVNjcmlwdENvcmUvVk0vQ29kZUJsb2NrLmNwcApAQCAt
MTMxLDcgKzEzMSw3IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wKEV4ZWNTdGF0ZSogZXhlYykgY29u
c3QKICAgICAgICAgaWYgKG1hY2hpbmUoKS5pc09wY29kZShpdC0+dS5vcGNvZGUpKQogICAgICAg
ICAgICAgKytpbnN0cnVjdGlvbkNvdW50OwogCi0gICAgcHJpbnRmKCIlbHUgaW5zdHJ1Y3Rpb25z
OyAlbHUgYnl0ZXMgYXQgJXA7ICVkIGxvY2FscyAoJWQgcGFyYW1ldGVycyk7ICVkIHRlbXBvcmFy
aWVzXG5cbiIsIGluc3RydWN0aW9uQ291bnQsIGluc3RydWN0aW9ucy5zaXplKCkgKiBzaXplb2Yo
SW5zdHJ1Y3Rpb24pLCB0aGlzLCBudW1QYXJhbWV0ZXJzICsgbnVtVmFycywgbnVtUGFyYW1ldGVy
cywgbnVtVGVtcG9yYXJpZXMpOworICAgIHByaW50ZigiJWx1IGluc3RydWN0aW9uczsgJWx1IGJ5
dGVzIGF0ICVwOyAlbHUgZXhjZXB0aW9uIGhhbmRsZXJzOyAlZCBsb2NhbHMgKCVkIHBhcmFtZXRl
cnMpOyAlZCB0ZW1wb3Jhcmllc1xuXG4iLCBpbnN0cnVjdGlvbkNvdW50LCBpbnN0cnVjdGlvbnMu
c2l6ZSgpICogc2l6ZW9mKEluc3RydWN0aW9uKSwgdGhpcywgZXhjZXB0aW9uSGFuZGxlcnMuc2l6
ZSgpLCBudW1QYXJhbWV0ZXJzICsgbnVtVmFycywgbnVtUGFyYW1ldGVycywgbnVtVGVtcG9yYXJp
ZXMpOwogICAgIAogICAgIGZvciAoVmVjdG9yPEluc3RydWN0aW9uPjo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBiZWdpbjsgaXQgIT0gZW5kOyArK2l0KQogICAgICAgICBkdW1wKGV4ZWMsIGJlZ2luLCBp
dCk7CkBAIC0xNTQsNiArMTU0LDEzIEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wKEV4ZWNTdGF0ZSog
ZXhlYykgY29uc3QKICAgICAgICAgfSB3aGlsZSAoaSA8IGpzVmFsdWVzLnNpemUoKSk7CiAgICAg
fQogICAgIAorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaWRlbnRpZmllcnMuc2l6ZSgpOyAr
K2kpCisgICAgICAgIHByaW50ZigiICBpZCV1ID0gJXNcbiIsIHN0YXRpY19jYXN0PHVuc2lnbmVk
PihpKSwgaWRlbnRpZmllcnNbaV0uYXNjaWkoKSk7CisKKyAgICBwcmludGYoIlxuQ29uc3RhbnRz
OlxuIik7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBqc1ZhbHVlcy5zaXplKCk7ICsraSkK
KyAgICAgICAgcHJpbnRmKCIgIGsldSA9ICVzXG4iLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaSks
IHZhbHVlVG9Tb3VyY2VTdHJpbmcoZXhlYywganNWYWx1ZXNbaV0pLmFzY2lpKCkpOworCiAgICAg
aWYgKHJlZ2V4cHMuc2l6ZSgpKSB7CiAgICAgICAgIHByaW50ZigiXG5SZWdFeHBzOlxuIik7CiAg
ICAgICAgIHNpemVfdCBpID0gMDsKQEAgLTE2Miw2ICsxNjksMTUgQEAgdm9pZCBDb2RlQmxvY2s6
OmR1bXAoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogICAgICAgICAgICAgKytpOwogICAgICAgICB9
IHdoaWxlIChpIDwgcmVnZXhwcy5zaXplKCkpOwogICAgIH0KKworICAgIGlmIChleGNlcHRpb25I
YW5kbGVycy5zaXplKCkpIHsKKyAgICAgICAgcHJpbnRmKCJcbkV4Y2VwdGlvbiBIYW5kbGVyczpc
biIpOworICAgICAgICB1bnNpZ25lZCBpID0gMDsKKyAgICAgICAgZG8geworICAgICAgICAgICAg
cHJpbnRmKCJcdCVkOiB7c3RhcnQ6IFslNGRdIGVuZDogWyU0ZF0gaGFuZGxlcjogWyU0ZF0gfVxu
IiwgaSsxLCBleGNlcHRpb25IYW5kbGVyc1tpXS5zdGFydCwgZXhjZXB0aW9uSGFuZGxlcnNbaV0u
ZW5kLCBleGNlcHRpb25IYW5kbGVyc1tpXS50YXJnZXQpOworICAgICAgICAgICAgKytpOworICAg
ICAgICB9IHdoaWxlIChpIDwgZXhjZXB0aW9uSGFuZGxlcnMuc2l6ZSgpKTsKKyAgICB9CiAgICAg
ICAgIAogICAgIHByaW50ZigiXG4iKTsKIH0KQEAgLTQ0OCw2ICs0NjQsMTYgQEAgdm9pZCBDb2Rl
QmxvY2s6OmR1bXAoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBWZWN0b3I8SW5zdHJ1Y3Rpb24+Ojpj
b25zdF9pdGVyYXRvciYKICAgICAgICAgICAgIHByaW50ZigiWyU0ZF0gam1wX3Njb3Blc1x0XiVk
LCAlZCgtPiVkKVxuIiwgbG9jYXRpb24sIHNjb3BlRGVsdGEsIG9mZnNldCwganVtcFRhcmdldChi
ZWdpbiwgaXQsIG9mZnNldCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKyAgICAg
ICAgY2FzZSBvcF9jYXRjaDogeworICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJh
bmQ7CisgICAgICAgICAgICBwcmludGYoIlslNGRdIGNhdGNoXHRcdCVzXG4iLCBsb2NhdGlvbiwg
cmVnaXN0ZXJOYW1lKHIwKS5jX3N0cigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIGNhc2Ugb3BfdGhyb3c6IHsKKyAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+
dS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRmKCJbJTRkXSB0aHJvd1x0XHQlc1xuIiwgbG9j
YXRpb24sIHJlZ2lzdGVyTmFtZShyMCkuY19zdHIoKSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQogICAgICAgICBjYXNlIG9wX2VuZDogewogICAgICAgICAgICAgaW50IHIwID0gKCsr
aXQpLT51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBwcmludGYoIlslNGRdIGVuZFx0XHQlc1xuIiwg
bG9jYXRpb24sIHJlZ2lzdGVyTmFtZShyMCkuY19zdHIoKSk7CkBAIC00NzMsNCArNDk5LDIyIEBA
IHZvaWQgQ29kZUJsb2NrOjptYXJrKCkKICAgICAgICAgZnVuY3Rpb25FeHByZXNzaW9uc1tpXS0+
Ym9keSgpLT5tYXJrKCk7CiB9CiAKK0luc3RydWN0aW9uKiBDb2RlQmxvY2s6OmhhbmRsZXJGb3JQ
Qyhjb25zdCBJbnN0cnVjdGlvbiogYWRkcmVzcywgaW50JiBleHBlY3RlZERlcHRoKQoreworICAg
IFZlY3RvcjxIYW5kbGVySW5mbz46Oml0ZXJhdG9yIHB0ciA9IGV4Y2VwdGlvbkhhbmRsZXJzLmJl
Z2luKCk7IAorICAgIFZlY3RvcjxIYW5kbGVySW5mbz46Oml0ZXJhdG9yIGVuZCA9IGV4Y2VwdGlv
bkhhbmRsZXJzLmVuZCgpOworICAgIHVuc2lnbmVkIGFkZHJlc3NPZmZzZXQgPSBhZGRyZXNzIC0g
aW5zdHJ1Y3Rpb25zLmJlZ2luKCk7CisgICAgQVNTRVJUKGFkZHJlc3NPZmZzZXQgPCBpbnN0cnVj
dGlvbnMuc2l6ZSgpKTsKKyAgICAKKyAgICBmb3IgKDsgcHRyICE9IGVuZCAmJiAocHRyLT5zdGFy
dCA8PSBhZGRyZXNzT2Zmc2V0IHx8IHB0ci0+ZW5kID49IGFkZHJlc3NPZmZzZXQpOyArK3B0cikg
eworICAgICAgICAvLyBIYW5kbGVycyBhcmUgb3JkZXJlZCBpbm5lcm1vc3QgZmlyc3QsIHNvIHRo
ZSBmaXJzdCBoYW5kbGVyIHdlIGVuY291bnRlcgorICAgICAgICAvLyB0aGF0IGNvbnRhaW5zIHRo
ZSBzb3VyY2UgYWRkcmVzcyBpcyB0aGUgY29ycmVjdCBoYW5kbGVyIHRvIHVzZS4KKyAgICAgICAg
aWYgKHB0ci0+c3RhcnQgPD0gYWRkcmVzc09mZnNldCAmJiBwdHItPmVuZCA+PSBhZGRyZXNzT2Zm
c2V0KSB7CisgICAgICAgICAgICBleHBlY3RlZERlcHRoID0gcHRyLT5zY29wZURlcHRoOworICAg
ICAgICAgICAgcmV0dXJuIGluc3RydWN0aW9ucy5iZWdpbigpICsgcHRyLT50YXJnZXQ7CisgICAg
ICAgIH0KKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEtKUwpkaWZm
IC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvVk0vQ29kZUJsb2NrLmggYi9KYXZhU2NyaXB0Q29yZS9W
TS9Db2RlQmxvY2suaAppbmRleCA4MTljMWY0Li5hNDRjZWFhIDEwMDY0NAotLS0gYS9KYXZhU2Ny
aXB0Q29yZS9WTS9Db2RlQmxvY2suaAorKysgYi9KYXZhU2NyaXB0Q29yZS9WTS9Db2RlQmxvY2su
aApAQCAtNDAsNiArNDAsMTMgQEAgbmFtZXNwYWNlIEtKUyB7CiAKICAgICBjbGFzcyBFeGVjU3Rh
dGU7CiAKKyAgICBzdHJ1Y3QgSGFuZGxlckluZm8geworICAgICAgICB1bnNpZ25lZCBzdGFydDsK
KyAgICAgICAgdW5zaWduZWQgZW5kOworICAgICAgICB1bnNpZ25lZCB0YXJnZXQ7CisgICAgICAg
IHVuc2lnbmVkIHNjb3BlRGVwdGg7CisgICAgfTsKKwogICAgIHN0cnVjdCBDb2RlQmxvY2sgewog
ICAgICAgICBDb2RlQmxvY2soYm9vbCB1c2VzRXZhbF8sIGJvb2wgbmVlZHNDbG9zdXJlXykKICAg
ICAgICAgICAgIDogbnVtVGVtcG9yYXJpZXMoMCkKQEAgLTcwLDggKzc3LDEwIEBAIG5hbWVzcGFj
ZSBLSlMgewogICAgICAgICBWZWN0b3I8UmVmUHRyPEZ1bmNEZWNsTm9kZT4gPiBmdW5jdGlvbnM7
CiAgICAgICAgIFZlY3RvcjxSZWZQdHI8RnVuY0V4cHJOb2RlPiA+IGZ1bmN0aW9uRXhwcmVzc2lv
bnM7CiAgICAgICAgIFZlY3RvcjxKU1ZhbHVlKj4ganNWYWx1ZXM7Ci0gICAgICAgIFZlY3RvcjxS
ZWZQdHI8UmVnRXhwPiA+IHJlZ2V4cHM7Ci0gICAgICAgIAorICAgICAgICBWZWN0b3I8UmVmUHRy
PFJlZ0V4cD4gPiByZWdleHBzOyAgICAgICAgCisgICAgICAgIFZlY3RvcjxIYW5kbGVySW5mbz4g
ZXhjZXB0aW9uSGFuZGxlcnM7CisKKyAgICAgICAgSW5zdHJ1Y3Rpb24qIGhhbmRsZXJGb3JQQyhj
b25zdCBJbnN0cnVjdGlvbiosIGludCYgZXhwZWN0ZWREZXB0aCk7CiAgICAgcHJpdmF0ZToKICAg
ICAgICAgdm9pZCBkdW1wKEV4ZWNTdGF0ZSosIGNvbnN0IFZlY3RvcjxJbnN0cnVjdGlvbj46OmNv
bnN0X2l0ZXJhdG9yJiBiZWdpbiwgVmVjdG9yPEluc3RydWN0aW9uPjo6Y29uc3RfaXRlcmF0b3Im
KSBjb25zdDsKICAgICB9OwpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvVk0vQ29kZUdlbmVy
YXRvci5jcHAgYi9KYXZhU2NyaXB0Q29yZS9WTS9Db2RlR2VuZXJhdG9yLmNwcAppbmRleCBkYThh
NGUyLi43ZTQ5NDVhIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9WTS9Db2RlR2VuZXJhdG9y
LmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS9WTS9Db2RlR2VuZXJhdG9yLmNwcApAQCAtODU0LDQg
Kzg1NCwxOSBAQCBSZWdpc3RlcklEKiBDb2RlR2VuZXJhdG9yOjplbWl0R2V0UHJvcGVydHlOYW1l
cyhSZWdpc3RlcklEKiBpdGVyYXRvciwgUmVnaXN0ZXJJRAogICAgIHJldHVybiBpdGVyYXRvcjsK
IH0KIAorUmVnaXN0ZXJJRCogQ29kZUdlbmVyYXRvcjo6ZW1pdENhdGNoKFJlZ2lzdGVySUQqIHRh
cmdldFJlZ2lzdGVyLCBMYWJlbElEKiBzdGFydCwgTGFiZWxJRCogZW5kKQoreworICAgIEhhbmRs
ZXJJbmZvIGluZm8gPSB7IHN0YXJ0LT5vZmZzZXRGcm9tKDApLCBlbmQtPm9mZnNldEZyb20oMCks
IGluc3RydWN0aW9ucygpLnNpemUoKSwgbV9zY29wZURlcHRofTsKKyAgICBleGNlcHRpb25IYW5k
bGVycygpLmFwcGVuZChpbmZvKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobWFjaGluZSgp
LmdldE9wY29kZShvcF9jYXRjaCkpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCh0YXJnZXRS
ZWdpc3Rlci0+aW5kZXgoKSk7CisgICAgcmV0dXJuIHRhcmdldFJlZ2lzdGVyOworfQorICAgIAor
dm9pZCBDb2RlR2VuZXJhdG9yOjplbWl0VGhyb3coUmVnaXN0ZXJJRCogZXhjZXB0aW9uKQorewor
ICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChtYWNoaW5lKCkuZ2V0T3Bjb2RlKG9wX3Rocm93KSk7
CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGV4Y2VwdGlvbi0+aW5kZXgoKSk7Cit9CisKIH0g
Ly8gbmFtZXNwYWNlIEtKUwpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvVk0vQ29kZUdlbmVy
YXRvci5oIGIvSmF2YVNjcmlwdENvcmUvVk0vQ29kZUdlbmVyYXRvci5oCmluZGV4IGRjYTVmZDMu
LmQyZmVkZjggMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL1ZNL0NvZGVHZW5lcmF0b3IuaAor
KysgYi9KYXZhU2NyaXB0Q29yZS9WTS9Db2RlR2VuZXJhdG9yLmgKQEAgLTE4MCw3ICsxODAsOSBA
QCBuYW1lc3BhY2UgS0pTIHsKIAogICAgICAgICBSZWdpc3RlcklEKiBlbWl0UHVzaFNjb3BlKFJl
Z2lzdGVySUQqKTsKICAgICAgICAgdm9pZCBlbWl0UG9wU2NvcGUoKTsKLSAgICAgICAgCisKKyAg
ICAgICAgUmVnaXN0ZXJJRCogZW1pdENhdGNoKFJlZ2lzdGVySUQqLCBMYWJlbElEKiBzdGFydCwg
TGFiZWxJRCogZW5kKTsKKyAgICAgICAgdm9pZCBlbWl0VGhyb3coUmVnaXN0ZXJJRCopOwogICAg
IHByaXZhdGU6CiAgICAgICAgIHN0cnVjdCBKU1ZhbHVlSGFzaFRyYWl0cyAgewogICAgICAgICAg
ICAgdHlwZWRlZiBKU1ZhbHVlKiBUcmFpdFR5cGU7CkBAIC0yMTgsNyArMjIwLDggQEAgbmFtZXNw
YWNlIEtKUyB7CiAgICAgICAgIAogICAgICAgICBWZWN0b3I8SW5zdHJ1Y3Rpb24+JiBpbnN0cnVj
dGlvbnMoKSB7IHJldHVybiBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zOyB9CiAgICAgICAgIFN5
bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSgpIHsgcmV0dXJuICptX3N5bWJvbFRhYmxlOyB9Ci0gICAg
ICAgIAorICAgICAgICBWZWN0b3I8SGFuZGxlckluZm8+JiBleGNlcHRpb25IYW5kbGVycygpIHsg
cmV0dXJuIG1fY29kZUJsb2NrLT5leGNlcHRpb25IYW5kbGVyczsgfQorCiAgICAgICAgIGNvbnN0
IFNjb3BlQ2hhaW4qIG1fc2NvcGVDaGFpbjsKICAgICAgICAgU3ltYm9sVGFibGUqIG1fc3ltYm9s
VGFibGU7CiAgICAgICAgIApkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvVk0vSlNQcm9wZXJ0
eU5hbWVJdGVyYXRvci5jcHAgYi9KYXZhU2NyaXB0Q29yZS9WTS9KU1Byb3BlcnR5TmFtZUl0ZXJh
dG9yLmNwcAppbmRleCAxM2QyOTZhLi5iNzgyMjVjIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9WTS9KU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS9WTS9K
U1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmNwcApAQCAtMTE3LDkgKzExNyw4IEBAIEpTUHJvcGVydHlO
YW1lSXRlcmF0b3IqIEpTUHJvcGVydHlOYW1lSXRlcmF0b3I6OmNyZWF0ZShFeGVjU3RhdGUqIGV4
ZWMsIEpTVmFsdWUqCiB7CiAgICAgaWYgKHYtPmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAg
IHJldHVybiBuZXcgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvcigwLCAwLCAwKTsKLSAgICAKKwogICAg
IEpTT2JqZWN0KiBvID0gdi0+dG9PYmplY3QoZXhlYyk7Ci0gICAgQVNTRVJUKCFleGVjLT5oYWRF
eGNlcHRpb24oKSk7IC8vIHRvT2JqZWN0IHNob3VsZCBuZXZlciB0aHJvdyBmb3IgYW55IG5vbi1u
dWxsL3VuZGVmaW5lZCB2YWx1ZQogICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnR5TmFtZXM7
CiAgICAgby0+Z2V0UHJvcGVydHlOYW1lcyhleGVjLCBwcm9wZXJ0eU5hbWVzKTsgICAgCiAgICAg
c2l6ZV90IG51bVByb3BlcnRpZXMgPSBwcm9wZXJ0eU5hbWVzLnNpemUoKTsKZGlmZiAtLWdpdCBh
L0phdmFTY3JpcHRDb3JlL1ZNL01hY2hpbmUuY3BwIGIvSmF2YVNjcmlwdENvcmUvVk0vTWFjaGlu
ZS5jcHAKaW5kZXggZGNmMDRmNi4uMmM4ZTQ3YyAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUv
Vk0vTWFjaGluZS5jcHAKKysrIGIvSmF2YVNjcmlwdENvcmUvVk0vTWFjaGluZS5jcHAKQEAgLTI3
MCw2ICsyNzAsODkgQEAgc3RhdGljIHZvaWQgTkVWRVJfSU5MSU5FIHJlc29sdmVCYXNlKEV4ZWNT
dGF0ZSogZXhlYywgSW5zdHJ1Y3Rpb24qIHZQQywgUmVnaXN0ZXIKICAgICByW3IwXS51LmpzVmFs
dWUgPSBiYXNlOwogfQogCitORVZFUl9JTkxJTkUgSlNWYWx1ZSogcHJlcGFyZUV4Y2VwdGlvbihF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUqIGV4Y2VwdGlvblZhbHVlKSAKK3sKKyAgICBpZiAoZXhj
ZXB0aW9uVmFsdWUtPmlzT2JqZWN0KCkpIHsKKyAgICAgICAgSlNPYmplY3QqIGV4Y2VwdGlvbiA9
IHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4oZXhjZXB0aW9uVmFsdWUpOworICAgICAgICBpZiAoIWV4
Y2VwdGlvbi0+aGFzUHJvcGVydHkoZXhlYywgImxpbmUiKSAmJiAhZXhjZXB0aW9uLT5oYXNQcm9w
ZXJ0eShleGVjLCAic291cmNlVVJMIikpIHsKKyAgICAgICAgICAgIC8vIE5lZWQgdG8gc2V0IGxp
bmUgYW5kIHNvdXJjZVVSTCBwcm9wZXJ0aWVzIG9uIHRoZSBleGNlcHRpb24sIGJ1dCB0aGF0IGlz
IG5vdCBjdXJyZW50bHkgcG9zc2libGUKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBleGNlcHRpb25WYWx1ZTsKK30KKworTkVW
RVJfSU5MSU5FIEluc3RydWN0aW9uKiB1bndpbmRGcmFtZShDb2RlQmxvY2sqJiBjb2RlQmxvY2ss
IEpTVmFsdWUqKiYgaywgU2NvcGVDaGFpbiomIHNjb3BlQ2hhaW4sIFZlY3RvcjxSZWdpc3Rlcj4q
IHJlZ2lzdGVycywgUmVnaXN0ZXIqJiBiYXNlKQoreworICAgIENvZGVCbG9jayogb2xkQ29kZUJs
b2NrID0gY29kZUJsb2NrOworICAgIAorICAgIFJlZ2lzdGVyKiByZXR1cm5JbmZvID0gYmFzZSAt
IG9sZENvZGVCbG9jay0+bnVtVmFycyAtIG9sZENvZGVCbG9jay0+bnVtUGFyYW1ldGVycyAtIE1h
Y2hpbmU6OnJldHVybkluZm9TaXplOworICAgIAorICAgIGlmIChvbGRDb2RlQmxvY2stPm5lZWRz
QWN0aXZhdGlvbikgeworICAgICAgICAvLyBGaW5kIHRoZSB0b3Agb2YgdGhlIHNjb3BlIGNoYWlu
CisgICAgICAgIFNjb3BlQ2hhaW5JdGVyYXRvciBpdGVyID0gc2NvcGVDaGFpbi0+YmVnaW4oKTsg
CisgICAgICAgIFNjb3BlQ2hhaW5JdGVyYXRvciBlbmQgPSBzY29wZUNoYWluLT5lbmQoKTsKKyAg
ICAgICAgd2hpbGUgKCEoKCppdGVyKS0+aXNBY3RpdmF0aW9uT2JqZWN0KCkpKSB7CisgICAgICAg
ICAgICArK2l0ZXI7CisgICAgICAgICAgICBpZiAoaXRlciA9PSBlbmQpCisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICAvLyBDbGVhbiB1cCB0aGUgYWN0aXZhdGlv
biBpZiduIGl0J3MgbmVjZXNzYXJ5CisgICAgICAgIGlmIChpdGVyICE9IGVuZCAmJiAoKml0ZXIp
LT5pc0FjdGl2YXRpb25PYmplY3QoKSkgeworICAgICAgICAgICAgc3RhdGljX2Nhc3Q8SlNBY3Rp
dmF0aW9uKj4oKml0ZXIpLT5jb3B5UmVnaXN0ZXJzKCk7CisgICAgICAgICAgICBzY29wZUNoYWlu
LT5+U2NvcGVDaGFpbigpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIGNvZGVCbG9jayA9
IHJldHVybkluZm9bMF0udS5jb2RlQmxvY2s7CisgICAgaWYgKCFjb2RlQmxvY2spCisgICAgICAg
IHJldHVybiAwOworICAgIGsgPSBjb2RlQmxvY2stPmpzVmFsdWVzLmRhdGEoKTsKKyAgICBzY29w
ZUNoYWluID0gcmV0dXJuSW5mb1syXS51LnNjb3BlQ2hhaW47CisgICAgYmFzZSA9IHJlZ2lzdGVy
cy0+ZGF0YSgpICsgcmV0dXJuSW5mb1szXS51Lmk7CisgICAgcmV0dXJuIHJldHVybkluZm9bMV0u
dS52UEM7Cit9CisKK05FVkVSX0lOTElORSBzdGF0aWMgSW5zdHJ1Y3Rpb24qIHRocm93RXhjZXB0
aW9uKENvZGVCbG9jayomIGNvZGVCbG9jaywgSlNWYWx1ZSoqJiBrLCBTY29wZUNoYWluKiYgc2Nv
cGVDaGFpbiwgVmVjdG9yPFJlZ2lzdGVyPiogcmVnaXN0ZXJzLCBSZWdpc3RlciomIGJhc2UsIGNv
bnN0IEluc3RydWN0aW9uKiB2UEMpCit7CisgICAgd2hpbGUgKGNvZGVCbG9jaykgeworICAgICAg
ICBpbnQgZXhwZWN0ZWREZXB0aDsgICAgICAgIAorICAgICAgICBJbnN0cnVjdGlvbiogaGFuZGxl
clBDID0gY29kZUJsb2NrLT5oYW5kbGVyRm9yUEModlBDLCBleHBlY3RlZERlcHRoKTsKKyAgICAg
ICAgaWYgKCFoYW5kbGVyUEMpIHsKKyAgICAgICAgICAgIHZQQyA9IHVud2luZEZyYW1lKGNvZGVC
bG9jaywgaywgc2NvcGVDaGFpbiwgcmVnaXN0ZXJzLCBiYXNlKTsKKyAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICB9CisgICAgICAgIC8vIE5vdyB1bndpbmQgdGhlIHNjb3BlIGNoYWluCisg
ICAgICAgIGludCBzY29wZURlcHRoID0gMDsKKyAgICAgICAgLy8gU3RlcCAxKSB3b3JrIG91dCBo
b3cgZGVlcCB0aGUgc2NvcGUgY2hhaW4gaXMKKyAgICAgICAgU2NvcGVDaGFpbkl0ZXJhdG9yIGl0
ZXIgPSBzY29wZUNoYWluLT5iZWdpbigpOyAKKyAgICAgICAgU2NvcGVDaGFpbkl0ZXJhdG9yIGVu
ZCA9IHNjb3BlQ2hhaW4tPmVuZCgpOyAKKyAgICAgICAgd2hpbGUgKCEoKCppdGVyKS0+aXNBY3Rp
dmF0aW9uT2JqZWN0KCkpKSB7CisgICAgICAgICAgICArK2l0ZXI7CisgICAgICAgICAgICArK3Nj
b3BlRGVwdGg7CisgICAgICAgICAgICBpZiAoaXRlciA9PSBlbmQpIHsKKyAgICAgICAgICAgICAg
ICAvLyByZWFjaGVkIHRoZSBnbG9iYWwgb2JqZWN0IGF0IHRoZSB0b3Agb2YgdGhlIHNjb3BlIGNo
YWluCisgICAgICAgICAgICAgICAgLS1zY29wZURlcHRoOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBTdGVwIDIp
IHJlZHVjZSB0byB0aGUgZXhwZWN0IGRlcHRoCisgICAgICAgIGludCBzY29wZURlbHRhID0gc2Nv
cGVEZXB0aCAtIGV4cGVjdGVkRGVwdGg7CisgICAgICAgIAorICAgICAgICAvLyBTdGVwIDMpIENy
eSA6LSgKKyAgICAgICAgQVNTRVJUKHNjb3BlRGVsdGEgPj0gMCk7CisgICAgICAgIHdoaWxlIChz
Y29wZURlbHRhLS0pCisgICAgICAgICAgICBzY29wZUNoYWluLT5wb3AoKTsKKyAgICAgICAgcmV0
dXJuIGhhbmRsZXJQQzsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCisjaWYgSEFWRShD
T01QVVRFRF9HT1RPKQordm9pZCogdGhyb3dUYXJnZXQgPSAwOworI2VuZGlmCiAKIHZvaWQgTWFj
aGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aW9uRmxhZyBmbGFnLCBFeGVjU3RhdGUqIGV4ZWMs
IFZlY3RvcjxSZWdpc3Rlcj4qIHJlZ2lzdGVycywgU2NvcGVDaGFpbiogc2NvcGVDaGFpbiwgQ29k
ZUJsb2NrKiBjb2RlQmxvY2spCiB7CkBAIC0yODUsMTIgKzM2OCwxNCBAQCB2b2lkIE1hY2hpbmU6
OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGlvbkZsYWcgZmxhZywgRXhlY1N0YXRlKiBleGVjLCBWZWN0
b3I8UmVnaXN0ZQogICAgICAgICAgICAgICAgIEZPUl9FQUNIX09QQ09ERV9JRChBRERfT1BDT0RF
X0lEKTsKICAgICAgICAgICAgICN1bmRlZiBBRERfT1BDT0RFCiAgICAgICAgICAgICBBU1NFUlQo
bV9vcGNvZGVJRFRhYmxlLnNpemUoKSA9PSBudW1PcGNvZGVJRHMpOworICAgICAgICAgICAgdGhy
b3dUYXJnZXQgPSAmJmdjY19kZXBlbmRlbmN5X2hhY2s7CiAgICAgICAgICNlbmRpZiAvLyBIQVZF
KENPTVBVVEVEX0dPVE8pCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpOwotCisgICAg
SlNWYWx1ZSogZXhjZXB0aW9uRGF0YSA9IDA7CisgICAgCiAgICAgcmVnaXN0ZXJzLT5yZXNlcnZl
Q2FwYWNpdHkoNTEyKTsKIAogICAgIGludCBvbGRSZWdpc3Rlck9mZnNldCA9IGdsb2JhbE9iamVj
dC0+cmVnaXN0ZXJPZmZzZXQoKTsKQEAgLTMwOSw2ICszOTQsNyBAQCB2b2lkIE1hY2hpbmU6OnBy
aXZhdGVFeGVjdXRlKEV4ZWN1dGlvbkZsYWcgZmxhZywgRXhlY1N0YXRlKiBleGVjLCBWZWN0b3I8
UmVnaXN0ZQogCiAgICAgUmVnaXN0ZXIqIHIgPSAoKnJlZ2lzdGVyQmFzZSkgKyByZWdpc3Rlck9m
ZnNldDsKICAgICBJbnN0cnVjdGlvbiogdlBDID0gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMuYmVn
aW4oKTsKKyAgICBJbnN0cnVjdGlvbiogZXhjZXB0aW9uVGFyZ2V0ID0gMDsKICAgICBKU1ZhbHVl
KiogayA9IGNvZGVCbG9jay0+anNWYWx1ZXMuZGF0YSgpOwogICAgIAogI2lmIEhBVkUoQ09NUFVU
RURfR09UTykKQEAgLTk3OCw2ICsxMDY0LDM0IEBAIHZvaWQgTWFjaGluZTo6cHJpdmF0ZUV4ZWN1
dGUoRXhlY3V0aW9uRmxhZyBmbGFnLCBFeGVjU3RhdGUqIGV4ZWMsIFZlY3RvcjxSZWdpc3RlCiAg
ICAgICAgIHZQQyArPSBvZmZzZXQ7CiAgICAgICAgIE5FWFRfT1BDT0RFOwogICAgIH0KKyAgICBC
RUdJTl9PUENPREUob3BfY2F0Y2gpIHsKKyAgICAgICAgQVNTRVJUKGV4Y2VwdGlvbkRhdGEpOwor
ICAgICAgICBpbnQgcjAgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7CisgICAgICAgIHJbcjBdLnUuanNW
YWx1ZSA9IGV4Y2VwdGlvbkRhdGE7CisgICAgICAgIGV4Y2VwdGlvbkRhdGEgPSAwOworICAgICAg
ICArK3ZQQzsKKyAgICAgICAgTkVYVF9PUENPREU7CisgICAgfQorICAgIEJFR0lOX09QQ09ERShv
cF90aHJvdykgeworICAgICAgICBpbnQgZSA9ICgrK3ZQQyktPnUub3BlcmFuZDsKKyAgICAgICAg
ZXhjZXB0aW9uRGF0YSA9IHByZXBhcmVFeGNlcHRpb24oZXhlYywgcltlXS51LmpzVmFsdWUpOwor
ICAgICAgICBpZiAoIShleGNlcHRpb25UYXJnZXQgPSB0aHJvd0V4Y2VwdGlvbihjb2RlQmxvY2ss
IGssIHNjb3BlQ2hhaW4sIHJlZ2lzdGVycywgciwgdlBDKSkpIHsKKyAgICAgICAgICAgIGdsb2Jh
bE9iamVjdC0+c2V0UmVnaXN0ZXJPZmZzZXQob2xkUmVnaXN0ZXJPZmZzZXQpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisKKyNpZiBIQVZFKENPTVBVVEVEX0dPVE8pCisgICAgICAg
IC8vIEhhY2sgYXJvdW5kIGdjYyBwZXJmb3JtYW5jZSBxdWlyayBieSBwZXJmb3JtaW5nIGFuIGlu
ZGlyZWN0IGdvdG8KKyAgICAgICAgLy8gaW4gb3JkZXIgdG8gc2V0IHRoZSB2UEMgLS0gYXR0ZW1w
dGluZyB0byBkbyBzbyBkaXJlY3RseSByZXN1bHRzIGluIGEKKyAgICAgICAgLy8gc2lnbmlmaWNh
bnQgcmVncmVzc2lvbi4KKyAgICAgICAgZ290byAqdGhyb3dUYXJnZXQ7IC8vIGluZGlyZWN0IGdv
dG8gLT4gZ2NjX2RlcGVuZGVuY3lfaGFjaworICAgIH0KKyAgICBnY2NfZGVwZW5kZW5jeV9oYWNr
OiB7CisjZW5kaWYKKworICAgICAgICB2UEMgPSBleGNlcHRpb25UYXJnZXQ7CisgICAgICAgIE5F
WFRfT1BDT0RFOworICAgIH0KICAgICBCRUdJTl9PUENPREUob3BfZW5kKSB7CiAgICAgICAgIGlu
dCByMCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKICNpZm5kZWYgTkRFQlVHCmRpZmYgLS1naXQgYS9K
YXZhU2NyaXB0Q29yZS9WTS9PcGNvZGUuaCBiL0phdmFTY3JpcHRDb3JlL1ZNL09wY29kZS5oCmlu
ZGV4IDEyODRiZGIuLjY2N2E1NzQgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL1ZNL09wY29k
ZS5oCisrKyBiL0phdmFTY3JpcHRDb3JlL1ZNL09wY29kZS5oCkBAIC0xMDMsNiArMTAzLDkgQEAg
bmFtZXNwYWNlIEtKUyB7CiAgICAgICAgIG1hY3JvKG9wX3B1c2hfc2NvcGUpIFwKICAgICAgICAg
bWFjcm8ob3BfcG9wX3Njb3BlKSBcCiAgICAgICAgIFwKKyAgICAgICAgbWFjcm8ob3BfY2F0Y2gp
IFwKKyAgICAgICAgbWFjcm8ob3BfdGhyb3cpIFwKKyAgICAgICAgXAogICAgICAgICBtYWNybyhv
cF9lbmQpIC8vIGVuZCBtdXN0IGJlIHRoZSBsYXN0IG9wY29kZSBpbiB0aGUgbGlzdAogICAgICAg
ICAKICAgICAjZGVmaW5lIE9QQ09ERV9JRF9FTlVNKG9wY29kZSkgb3Bjb2RlLApkaWZmIC0tZ2l0
IGEvSmF2YVNjcmlwdENvcmUva2pzL25vZGVzLmNwcCBiL0phdmFTY3JpcHRDb3JlL2tqcy9ub2Rl
cy5jcHAKaW5kZXggZTlhZGZkMS4uZTYwYWZhMCAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUv
a2pzL25vZGVzLmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS9ranMvbm9kZXMuY3BwCkBAIC01NDgw
LDYgKzU0ODAsMTIgQEAgSlNWYWx1ZSogTGFiZWxOb2RlOjpleGVjdXRlKEV4ZWNTdGF0ZSogZXhl
YykKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRocm93Tm9kZSAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorUmVnaXN0ZXJJRCogVGhyb3dOb2RlOjpl
bWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKK3sKKyAg
ICBnZW5lcmF0b3IuZW1pdFRocm93KGdlbmVyYXRvci5lbWl0Tm9kZShkc3QsIG1fZXhwci5nZXQo
KSkpOworICAgIHJldHVybiBkc3Q7Cit9CisKIHZvaWQgVGhyb3dOb2RlOjpvcHRpbWl6ZVZhcmlh
YmxlQWNjZXNzKEV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9y
YWdlJiwgTm9kZVN0YWNrJiBub2RlU3RhY2spCiB7CiAgICAgbm9kZVN0YWNrLmFwcGVuZChtX2V4
cHIuZ2V0KCkpOwpAQCAtNTQ5Nyw2ICs1NTAzLDQ1IEBAIEpTVmFsdWUqIFRocm93Tm9kZTo6ZXhl
Y3V0ZShFeGVjU3RhdGUqIGV4ZWMpCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LSBUcnlOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKK1JlZ2lz
dGVySUQqIFRyeU5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0
ZXJJRCogZHN0KQoreworICAgIFJlZlB0cjxMYWJlbElEPiB0cnlTdGFydExhYmVsID0gZ2VuZXJh
dG9yLm5ld0xhYmVsKCk7CisgICAgUmVmUHRyPExhYmVsSUQ+IHRyeUVuZExhYmVsID0gZ2VuZXJh
dG9yLm5ld0xhYmVsKCk7CisgICAgUmVmUHRyPExhYmVsSUQ+IGhhbmRsZXJFbmRMYWJlbCA9IGdl
bmVyYXRvci5uZXdMYWJlbCgpOworICAgIAorICAgIGdlbmVyYXRvci5lbWl0TGFiZWwodHJ5U3Rh
cnRMYWJlbC5nZXQoKSk7CisgICAgZ2VuZXJhdG9yLmVtaXROb2RlKGRzdCwgbV90cnlCbG9jay5n
ZXQoKSk7CisgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbCh0cnlFbmRMYWJlbC5nZXQoKSk7CisgICAg
CisgICAgZ2VuZXJhdG9yLmVtaXRKdW1wKGhhbmRsZXJFbmRMYWJlbC5nZXQoKSk7CisKKyAgICBp
ZiAobV9jYXRjaEJsb2NrKSB7CisgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBleGNlcHRpb25S
ZWdpc3RlciA9IGdlbmVyYXRvci5lbWl0Q2F0Y2goZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCB0
cnlTdGFydExhYmVsLmdldCgpLCB0cnlFbmRMYWJlbC5nZXQoKSk7CisgICAgICAgIFJlZ2lzdGVy
SUQqIG5ld1Njb3BlID0gZ2VuZXJhdG9yLmVtaXROZXdPYmplY3QoZ2VuZXJhdG9yLm5ld1RlbXBv
cmFyeSgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRQdXRQcm9wSWQobmV3U2NvcGUsIG1fZXhj
ZXB0aW9uSWRlbnQsIGV4Y2VwdGlvblJlZ2lzdGVyLmdldCgpKTsKKyAgICAgICAgZXhjZXB0aW9u
UmVnaXN0ZXIgPSAwOyAvLyBSZWxlYXNlIHJlZ2lzdGVyIHVzZWQgZm9yIHRlbXBvcmFyaWVzCisg
ICAgICAgIGdlbmVyYXRvci5lbWl0UHVzaFNjb3BlKG5ld1Njb3BlKTsKKyAgICAgICAgbV9jYXRj
aEJsb2NrLT5lbWl0Q29kZShnZW5lcmF0b3IsIGRzdCk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0
UG9wU2NvcGUoKTsKKyAgICAgICAgaWYgKCFtX2ZpbmFsbHlCbG9jaykKKyAgICAgICAgICAgIGdl
bmVyYXRvci5lbWl0TGFiZWwoaGFuZGxlckVuZExhYmVsLmdldCgpKTsKKyAgICB9IAorCisgICAg
aWYgKG1fZmluYWxseUJsb2NrKSB7CisgICAgICAgIFJlZlB0cjxMYWJlbElEPiBmaW5hbGx5U3Rh
cnRMYWJlbCA9IGdlbmVyYXRvci5uZXdMYWJlbCgpOworICAgICAgICBnZW5lcmF0b3IuZW1pdExh
YmVsKGZpbmFsbHlTdGFydExhYmVsLmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1w
KGhhbmRsZXJFbmRMYWJlbC5nZXQoKSk7CisgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiB0ZW1w
RXhjZXB0aW9uUmVnaXN0ZXIgPSBnZW5lcmF0b3IuZW1pdENhdGNoKGdlbmVyYXRvci5uZXdUZW1w
b3JhcnkoKSwgdHJ5U3RhcnRMYWJlbC5nZXQoKSwgZmluYWxseVN0YXJ0TGFiZWwuZ2V0KCkpOwor
ICAgICAgICBtX2ZpbmFsbHlCbG9jay0+ZW1pdENvZGUoZ2VuZXJhdG9yLCBkc3QpOworICAgICAg
ICBnZW5lcmF0b3IuZW1pdFRocm93KHRlbXBFeGNlcHRpb25SZWdpc3Rlci5nZXQoKSk7CisgICAg
ICAgIGdlbmVyYXRvci5lbWl0TGFiZWwoaGFuZGxlckVuZExhYmVsLmdldCgpKTsKKyAgICAgICAg
bV9maW5hbGx5QmxvY2stPmVtaXRDb2RlKGdlbmVyYXRvciwgZHN0KTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gZHN0OworfQorCisKIHZvaWQgVHJ5Tm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhF
eGVjU3RhdGUqLCBjb25zdCBTeW1ib2xUYWJsZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVT
dGFjayYgbm9kZVN0YWNrKQogewogICAgIC8vIENhbid0IG9wdGltaXplIHdpdGhpbiBjYXRjaEJs
b2NrIGJlY2F1c2UgImNhdGNoIiBpbnRyb2R1Y2VzIGEgZHluYW1pYyBzY29wZS4KZGlmZiAtLWdp
dCBhL0phdmFTY3JpcHRDb3JlL2tqcy9ub2Rlcy5oIGIvSmF2YVNjcmlwdENvcmUva2pzL25vZGVz
LmgKaW5kZXggNGMzMDY1Yy4uNTlkY2UwNiAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUva2pz
L25vZGVzLmgKKysrIGIvSmF2YVNjcmlwdENvcmUva2pzL25vZGVzLmgKQEAgLTI4NTksNiArMjg1
OSw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICB7CiAgICAgICAgIH0KIAorICAgICAgICB2
aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9
IDApIEtKU19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxl
QWNjZXNzKEV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdl
JiwgTm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBl
eGVjdXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBz
dHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwpAQCAtMjg4MSw2ICsy
ODgyLDggQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogZXhlY3V0
ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFt
VG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKIAorICAgICAgICB2aXJ0dWFs
IFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiBkc3QgPSAw
KSBLSlNfRkFTVF9DQUxMOworCiAgICAgcHJpdmF0ZToKICAgICAgICAgUmVmUHRyPFN0YXRlbWVu
dE5vZGU+IG1fdHJ5QmxvY2s7CiAgICAgICAgIElkZW50aWZpZXIgbV9leGNlcHRpb25JZGVudDsK
</data>
<flag name="review"
          id="8871"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>