<?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>136712</bug_id>
          
          <creation_ts>2014-09-10 13:24:12 -0700</creation_ts>
          <short_desc>Support the type profiler in the DFG</short_desc>
          <delta_ts>2014-10-01 13:49:03 -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>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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1034381</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-09-10 13:24:12 -0700</bug_when>
    <thetext>op_profile_type is not currently supported by the DFG.

This patch will support it in the most naive way, and then in later patch(es), optimizations will be made.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1036230</commentid>
    <comment_count>1</comment_count>
      <attachid>238394</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-09-19 15:34:26 -0700</bug_when>
    <thetext>Created attachment 238394
work in progress

Here is the initial implementation of just passing op_profile_type through the DFG in the simplest way possible.
I&apos;m still not sure why the generated assembly is failing, any help from another pair of eyes would be appreciated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1036261</commentid>
    <comment_count>2</comment_count>
      <attachid>238400</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-09-19 18:26:51 -0700</bug_when>
    <thetext>Created attachment 238400
work in progress

convert to Check nodes in FixupPhase if possible.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1037553</commentid>
    <comment_count>3</comment_count>
      <attachid>238736</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-09-26 14:07:57 -0700</bug_when>
    <thetext>Created attachment 238736
patch

generated machine code now works.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1038439</commentid>
    <comment_count>4</comment_count>
      <attachid>238987</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-09-30 20:11:00 -0700</bug_when>
    <thetext>Created attachment 238987
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1038443</commentid>
    <comment_count>5</comment_count>
      <attachid>238987</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-09-30 20:34:01 -0700</bug_when>
    <thetext>Comment on attachment 238987
patch

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

See comments.

&gt; Source/JavaScriptCore/dfg/DFGFixupPhase.cpp:1129
&gt; +                if (node-&gt;child1()-&gt;prediction() &amp; SpecInt32)
&gt; +                    fixEdge&lt;Int32Use&gt;(node-&gt;child1());

This is wrong.  You&apos;re saying I&apos;ll check if it&apos;s an Int32 if it could have been an Int32.  Instead, you want to say: I&apos;ll check if it&apos;s an Int32 if that&apos;s the only thing it could have been.

The boolean logic would be &quot;!(prediction &amp; ~SpecInt32)&quot;.

&gt; Source/JavaScriptCore/dfg/DFGFixupPhase.cpp:1132
&gt; +            } else if (typeSet-&gt;doesTypeConformTo(TypeNumber | TypeMachineInt) &amp;&amp; seenTypes &amp; TypeNumber &amp;&amp; seenTypes &amp; TypeMachineInt) {

I would put parentheses around &quot;seenTypes &amp; TypeNumber&quot; and &quot;seenTypes &amp; TypeMachineInt&quot;.  Also, that boolean math smells like it might have the same problem as the SpecInt32 problem above.

&gt; Source/JavaScriptCore/dfg/DFGFixupPhase.cpp:1141
&gt; +            } else if (typeSet-&gt;doesTypeConformTo(TypeUndefined | TypeNull) &amp;&amp; seenTypes &amp; TypeUndefined &amp;&amp; seenTypes &amp; TypeNull) {

Ditto.

&gt; Source/JavaScriptCore/dfg/DFGSlowPathGenerator.h:164
&gt; +template&lt;typename JumpType, typename FunctionType&gt;
&gt; +class CallNoResultAndNoArgumentsSlowPathGenerator
&gt; +    : public CallSlowPathGenerator&lt;JumpType, FunctionType, GPRReg&gt; {
&gt; +public:
&gt; +    CallNoResultAndNoArgumentsSlowPathGenerator(
&gt; +        JumpType from, SpeculativeJIT* jit, FunctionType function,
&gt; +        SpillRegistersMode spillMode)
&gt; +        : CallSlowPathGenerator&lt;JumpType, FunctionType, GPRReg&gt;(
&gt; +            from, jit, function, spillMode, InvalidGPRReg)
&gt; +    {
&gt; +    }
&gt; +    
&gt; +protected:
&gt; +    virtual void generateInternal(SpeculativeJIT* jit) override
&gt; +    {
&gt; +        this-&gt;setUp(jit);
&gt; +        this-&gt;recordCall(jit-&gt;callOperation(this-&gt;m_function));
&gt; +        this-&gt;tearDown(jit);
&gt; +    }
&gt; +};
&gt; +

Why didn&apos;t CallResultAndNoArgumentsSlowPathGenerator with the result argument being &quot;NoResult&quot; work?

&gt; Source/JavaScriptCore/dfg/DFGSlowPathGenerator.h:361
&gt; +template&lt;typename JumpType, typename FunctionType&gt;
&gt; +inline PassOwnPtr&lt;SlowPathGenerator&gt; slowPathCall(
&gt; +    JumpType from, SpeculativeJIT* jit, FunctionType function, SpillRegistersMode spillMode = NeedToSpill)
&gt; +{
&gt; +    return adoptPtr(
&gt; +        new CallNoResultAndNoArgumentsSlowPathGenerator&lt;
&gt; +            JumpType, FunctionType&gt;(
&gt; +                from, jit, function, spillMode));
&gt; +}
&gt; +

See above - I think this shouldn&apos;t have been necessary.

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:4937
&gt; +        else if (cachedTypeLocation-&gt;m_lastSeenType == TypeNumber) {
&gt; +            // A JSValue is a double when it&apos;s a number and it&apos;s NOT an int32.
&gt; +            MacroAssembler::Jump definitelyNotDouble = m_jit.branchTest64(MacroAssembler::Zero, valueGPR, GPRInfo::tagTypeNumberRegister);
&gt; +            JITCompiler::Jump notInt32 = m_jit.branch64(MacroAssembler::Below, valueGPR, GPRInfo::tagTypeNumberRegister);
&gt; +            jumpToEnd.append(notInt32);
&gt; +            definitelyNotDouble.link(&amp;m_jit);

I really don&apos;t like this because it&apos;s just incompatible with how the DFG works.  The DFG can coerce an int32 to a double behind the scenes if it believes that this value could also be a double.  So, I think this is just unsound.

You should allow your type profiling to treat Double and Double|Int as equivalent things.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1038448</commentid>
    <comment_count>6</comment_count>
      <attachid>238987</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-09-30 21:02:00 -0700</bug_when>
    <thetext>Comment on attachment 238987
patch

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

&gt;&gt; Source/JavaScriptCore/dfg/DFGFixupPhase.cpp:1132
&gt;&gt; +            } else if (typeSet-&gt;doesTypeConformTo(TypeNumber | TypeMachineInt) &amp;&amp; seenTypes &amp; TypeNumber &amp;&amp; seenTypes &amp; TypeMachineInt) {
&gt; 
&gt; I would put parentheses around &quot;seenTypes &amp; TypeNumber&quot; and &quot;seenTypes &amp; TypeMachineInt&quot;.  Also, that boolean math smells like it might have the same problem as the SpecInt32 problem above.

It doesn&apos;t, doesTypeConformTo(T) will make sure that its internal bit string has no bits set outside the bits of T. Then the additional individual checks makes sure that both bits are set.

&gt;&gt; Source/JavaScriptCore/dfg/DFGSlowPathGenerator.h:164
&gt;&gt; +
&gt; 
&gt; Why didn&apos;t CallResultAndNoArgumentsSlowPathGenerator with the result argument being &quot;NoResult&quot; work?

I didn&apos;t try this, actually. I should, it seems like it should work.

&gt;&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:4937
&gt;&gt; +            definitelyNotDouble.link(&amp;m_jit);
&gt; 
&gt; I really don&apos;t like this because it&apos;s just incompatible with how the DFG works.  The DFG can coerce an int32 to a double behind the scenes if it believes that this value could also be a double.  So, I think this is just unsound.
&gt; 
&gt; You should allow your type profiling to treat Double and Double|Int as equivalent things.

Yeah, I think this is the right solution. And, I&apos;m going to also have the internal data structure represent this explicitly.

So the enum in TypeSet should be:
...
    TypeNumber = 0x20 | 0x10,
...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1038494</commentid>
    <comment_count>7</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-10-01 00:12:44 -0700</bug_when>
    <thetext>
&gt; &gt;&gt; Source/JavaScriptCore/dfg/DFGSlowPathGenerator.h:164
&gt; &gt;&gt; +
&gt; &gt; 
&gt; &gt; Why didn&apos;t CallResultAndNoArgumentsSlowPathGenerator with the result argument being &quot;NoResult&quot; work?
&gt; 
&gt; I didn&apos;t try this, actually. I should, it seems like it should work.

I wasn&apos;t thinking properly about this when I responded. I&apos;m pretty sure I tried this, and the problem was that the DFG operation I define isn&apos;t of the correct type. I would have to declare a DFG operation that would have a non void return value. 

I&apos;ll double check to confirm this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1038508</commentid>
    <comment_count>8</comment_count>
      <attachid>239016</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-10-01 02:55:51 -0700</bug_when>
    <thetext>Created attachment 239016
patch

- I left the additional class for slow path call w/ no arguments and no result type. It doesn&apos;t work
  by just passing in NoResult to the existing class because then the operation it calls is expected to 
  have a return type. I guess this can also be done by having a bogus return type in the operation, 
  but that seems a bit hacky to me. What do you think?

- I made the necessary changes to reflect that TypeInteger is contained in TypeNumber.
   This includes fixing the inlined type check when emitting code, and also the convert to check
   for NumberUse in the Fixup phase. This NumberUse Check is now generated more eagerly because
   I removed a few checks that were in place when TypeMachineInt wasn&apos;t contained in TypeNumber.

- I also decided to use &quot;isInt32Speculation(prediction)&quot; instead of &quot;!(prediction &amp; ~SpecInt32)&quot; because it seems more consistent with the other checks of this nature in the Fixup phase.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1038511</commentid>
    <comment_count>9</comment_count>
      <attachid>239017</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-10-01 02:58:18 -0700</bug_when>
    <thetext>Created attachment 239017
patch

Same as above, but actually builds.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1038556</commentid>
    <comment_count>10</comment_count>
      <attachid>239017</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-10-01 08:59:26 -0700</bug_when>
    <thetext>Comment on attachment 239017
patch

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

&gt; Source/JavaScriptCore/dfg/DFGFixupPhase.cpp:1128
&gt; +                if (isInt32Speculation(node-&gt;child1()-&gt;prediction()))

node-&gt;child1()-&gt;shouldSpeculateInt32() is the shortest way to say this</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1038558</commentid>
    <comment_count>11</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-10-01 09:00:57 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; Created an attachment (id=239016) [details]
&gt; patch
&gt; 
&gt; - I left the additional class for slow path call w/ no arguments and no result type. It doesn&apos;t work
&gt;   by just passing in NoResult to the existing class because then the operation it calls is expected to 
&gt;   have a return type. I guess this can also be done by having a bogus return type in the operation, 
&gt;   but that seems a bit hacky to me. What do you think?

I don&apos;t understand this point.  What error do you get?

We have *many* operations with void return type.  This should work.  If it doesn&apos;t, we should fix it; adding a new class to work around it is probably not the right solution.

&gt; 
&gt; - I made the necessary changes to reflect that TypeInteger is contained in TypeNumber.
&gt;    This includes fixing the inlined type check when emitting code, and also the convert to check
&gt;    for NumberUse in the Fixup phase. This NumberUse Check is now generated more eagerly because
&gt;    I removed a few checks that were in place when TypeMachineInt wasn&apos;t contained in TypeNumber.
&gt; 
&gt; - I also decided to use &quot;isInt32Speculation(prediction)&quot; instead of &quot;!(prediction &amp; ~SpecInt32)&quot; because it seems more consistent with the other checks of this nature in the Fixup phase.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1038562</commentid>
    <comment_count>12</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-10-01 09:09:46 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #8)
&gt; &gt; Created an attachment (id=239016) [details] [details]
&gt; &gt; patch
&gt; &gt; 
&gt; &gt; - I left the additional class for slow path call w/ no arguments and no result type. It doesn&apos;t work
&gt; &gt;   by just passing in NoResult to the existing class because then the operation it calls is expected to 
&gt; &gt;   have a return type. I guess this can also be done by having a bogus return type in the operation, 
&gt; &gt;   but that seems a bit hacky to me. What do you think?
&gt; 
&gt; I don&apos;t understand this point.  What error do you get?
&gt; 
&gt; We have *many* operations with void return type.  This should work.  If it doesn&apos;t, we should fix it; adding a new class to work around it is probably not the right solution.

Here&apos;s what you need.  Revert the change to DFGSpeculativeJIT64.cpp, it&apos;s just there to test if this compiles and to demonstrate the syntax.



Index: dfg/DFGSpeculativeJIT.h
===================================================================
--- dfg/DFGSpeculativeJIT.h	(revision 174092)
+++ dfg/DFGSpeculativeJIT.h	(working copy)
@@ -1087,6 +1087,12 @@
         return appendCallWithExceptionCheckSetResult(operation, result);
     }
 
+    JITCompiler::Call callOperation(V_JITOperation_E operation)
+    {
+        m_jit.setupArgumentsExecState();
+        return appendCallWithExceptionCheck(operation);
+    }
+
     JITCompiler::Call callOperation(V_JITOperation_EC operation, GPRReg arg1)
     {
         m_jit.setupArgumentsWithExecState(arg1);
@@ -1148,6 +1154,11 @@
         return appendCallWithExceptionCheckSetResult(operation, result);
     }
 
+    template&lt;typename FunctionType&gt;
+    JITCompiler::Call callOperation(FunctionType operation, NoResultTag)
+    {
+        return callOperation(operation);
+    }
     template&lt;typename FunctionType, typename ArgumentType1&gt;
     JITCompiler::Call callOperation(FunctionType operation, NoResultTag, ArgumentType1 arg1)
     {
Index: dfg/DFGSpeculativeJIT64.cpp
===================================================================
--- dfg/DFGSpeculativeJIT64.cpp	(revision 174092)
+++ dfg/DFGSpeculativeJIT64.cpp	(working copy)
@@ -2094,6 +2094,10 @@
         else
             callOperation(operationValueAdd, result.gpr(), op1GPR, op2GPR);
         
+        addSlowPathGenerator(
+            slowPathCall(
+                m_jit.jump(), this, operationVMHandleException, NoResult));
+        
         jsValueResult(result.gpr(), node);
         break;
     }</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1038598</commentid>
    <comment_count>13</comment_count>
      <attachid>239036</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-10-01 11:22:35 -0700</bug_when>
    <thetext>Created attachment 239036
patch

- Removed the unnecessary class in DFGSlowPathGenerator by explicitly handling the NoResult in DFGSpeculativeJIT::callOperation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1038600</commentid>
    <comment_count>14</comment_count>
      <attachid>239037</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-10-01 11:26:27 -0700</bug_when>
    <thetext>Created attachment 239037
patch

(Uploaded wrong diff above).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1038635</commentid>
    <comment_count>15</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-10-01 13:49:03 -0700</bug_when>
    <thetext>landed in: http://trac.webkit.org/changeset/174167</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238394</attachid>
            <date>2014-09-19 15:34:26 -0700</date>
            <delta_ts>2014-09-19 18:26:51 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>12371</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklu
bGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3Ry
YWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDE3MzUwNCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMTkyNyw2ICsxOTI3LDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3Ry
YWN0U3RhdGVUeQogICAgIGNhc2UgQnJlYWtwb2ludDoKICAgICBjYXNlIFByb2ZpbGVXaWxsQ2Fs
bDoKICAgICBjYXNlIFByb2ZpbGVEaWRDYWxsOgorICAgIGNhc2UgUHJvZmlsZVR5cGU6CiAgICAg
Y2FzZSBQaGFudG9tOgogICAgIGNhc2UgSGFyZFBoYW50b206CiAgICAgY2FzZSBDb3VudEV4ZWN1
dGlvbjoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQ
YXJzZXIuY3BwCShyZXZpc2lvbiAxNzM1MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjg5NCw2ICsyODk0LDEy
IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAg
IE5FWFRfT1BDT0RFKG9wX2luaXRfZ2xvYmFsX2NvbnN0KTsKICAgICAgICAgfQogCisgICAgICAg
IGNhc2Ugb3BfcHJvZmlsZV90eXBlOiB7CisgICAgICAgICAgICBOb2RlKiB2YWx1ZVRvUHJvZmls
ZSA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkp
OworICAgICAgICAgICAgYWRkVG9HcmFwaChQcm9maWxlVHlwZSwgT3BJbmZvKGN1cnJlbnRJbnN0
cnVjdGlvblsyXS51LmxvY2F0aW9uKSwgdmFsdWVUb1Byb2ZpbGUpOworICAgICAgICAgICAgTkVY
VF9PUENPREUob3BfcHJvZmlsZV90eXBlKTsKKyAgICAgICAgfQorCiAgICAgICAgIC8vID09PSBC
bG9jayB0ZXJtaW5hdG9ycy4gPT09CiAKICAgICAgICAgY2FzZSBvcF9qbXA6IHsKQEAgLTM1NTIs
NiArMzU1OCw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAg
ICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3RvX2luZGV4X3N0cmluZyk7CiAgICAgICAgIH0KIAor
CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAvLyBQYXJzZSBmYWlsZWQhIFRoaXMgc2hv
dWxkIG5vdCBoYXBwZW4gYmVjYXVzZSB0aGUgY2FwYWJpbGl0aWVzIGNoZWNrZXIKICAgICAgICAg
ICAgIC8vIHNob3VsZCBoYXZlIGNhdWdodCBpdC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAJKHJldmlzaW9uIDE3MzUwNCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTIwLDYgKzEyMCw3IEBAIENhcGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWwoT3Bjb2Rl
SUQKICAgICBjYXNlIG9wX2RlYnVnOgogICAgIGNhc2Ugb3BfcHJvZmlsZV93aWxsX2NhbGw6CiAg
ICAgY2FzZSBvcF9wcm9maWxlX2RpZF9jYWxsOgorICAgIGNhc2Ugb3BfcHJvZmlsZV90eXBlOgog
ICAgIGNhc2Ugb3BfbW92OgogICAgIGNhc2Ugb3BfY2FwdHVyZWRfbW92OgogICAgIGNhc2Ugb3Bf
Y2hlY2tfaGFzX2luc3RhbmNlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
bG9iYmVyaXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
bG9iYmVyaXplLmgJKHJldmlzaW9uIDE3MzUwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ2xvYmJlcml6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNzEsNiArMjcxLDcgQEAgdm9p
ZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgIGNhc2UgQnJlYWtwb2lu
dDoKICAgICBjYXNlIFByb2ZpbGVXaWxsQ2FsbDoKICAgICBjYXNlIFByb2ZpbGVEaWRDYWxsOgor
ICAgIGNhc2UgUHJvZmlsZVR5cGU6CiAgICAgY2FzZSBTdG9yZUJhcnJpZXI6CiAgICAgY2FzZSBT
dG9yZUJhcnJpZXJXaXRoTnVsbENoZWNrOgogICAgICAgICB3cml0ZShTaWRlU3RhdGUpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAkocmV2aXNpb24gMTczNTA0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMjQsNiArMTI0LDcgQEAgYm9vbCBkb2VzR0MoR3JhcGgmIGdyYXBoLCBOb2RlKiBu
b2RlKQogICAgIGNhc2UgQnJlYWtwb2ludDoKICAgICBjYXNlIFByb2ZpbGVXaWxsQ2FsbDoKICAg
ICBjYXNlIFByb2ZpbGVEaWRDYWxsOgorICAgIGNhc2UgUHJvZmlsZVR5cGU6CiAgICAgY2FzZSBD
aGVja0hhc0luc3RhbmNlOgogICAgIGNhc2UgSW5zdGFuY2VPZjoKICAgICBjYXNlIElzVW5kZWZp
bmVkOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3Bw
CShyZXZpc2lvbiAxNzM1MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVw
UGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTM2LDYgKzExMzYsNyBAQCBwcml2YXRlOgog
ICAgICAgICBjYXNlIEJyZWFrcG9pbnQ6CiAgICAgICAgIGNhc2UgUHJvZmlsZVdpbGxDYWxsOgog
ICAgICAgICBjYXNlIFByb2ZpbGVEaWRDYWxsOgorICAgICAgICBjYXNlIFByb2ZpbGVUeXBlOgog
ICAgICAgICBjYXNlIElzVW5kZWZpbmVkOgogICAgICAgICBjYXNlIElzQm9vbGVhbjoKICAgICAg
ICAgY2FzZSBJc051bWJlcjoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9k
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShy
ZXZpc2lvbiAxNzM1MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAko
d29ya2luZyBjb3B5KQpAQCAtNDcsNiArNDcsNyBAQAogI2luY2x1ZGUgIlB1dEJ5SWRWYXJpYW50
LmgiCiAjaW5jbHVkZSAiU3BlY3VsYXRlZFR5cGUuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVTZXQu
aCIKKyNpbmNsdWRlICJUeXBlTG9jYXRpb24uaCIKICNpbmNsdWRlICJWYWx1ZVByb2ZpbGUuaCIK
ICNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KIApAQCAtMTY5Nyw2ICsxNjk4LDExIEBAIHN0cnVj
dCBOb2RlIHsKICAgICB7CiAgICAgICAgIHJldHVybiBjYW5TcGVjdWxhdGVJbnQ1Mihzb3VyY2VG
b3IocGFzcykpOwogICAgIH0KKworICAgIFR5cGVMb2NhdGlvbiogdHlwZUxvY2F0aW9uKCkKKyAg
ICB7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFR5cGVMb2NhdGlvbio+KG1fb3BJ
bmZvKTsKKyAgICB9CiAgICAgCiAgICAgdm9pZCBkdW1wQ2hpbGRyZW4oUHJpbnRTdHJlYW0mIG91
dCkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCShy
ZXZpc2lvbiAxNzM1MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI0Nyw2ICsyNDcsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CiAgICAgbWFjcm8oTmV3U3RyaW5nT2JqZWN0LCBOb2RlUmVzdWx0SlMpIFwK
ICAgICBtYWNybyhNYWtlUm9wZSwgTm9kZVJlc3VsdEpTKSBcCiAgICAgbWFjcm8oSW4sIE5vZGVS
ZXN1bHRCb29sZWFuIHwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVDbG9iYmVyc1dvcmxkKSBcCisg
ICAgbWFjcm8oUHJvZmlsZVR5cGUsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBcCiAgICAgLyog
Tm9kZXMgdXNlZCBmb3IgYWN0aXZhdGlvbnMuIEFjdGl2YXRpb24gc3VwcG9ydCB3b3JrcyBieSBo
YXZpbmcgaXQgYW5jaG9yZWQgYXQgKi9cCiAgICAgLyogZXBpbGdvdWVzIHZpYSBUZWFyT2ZmQWN0
aXZhdGlvbiwgYW5kIGFsbCBDcmVhdGVBY3RpdmF0aW9uIG5vZGVzIGtlcHQgYWxpdmUgYnkgKi9c
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJl
dmlzaW9uIDE3MzUwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9u
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDYgKzU0LDcgQEAKICNpbmNsdWRlICJSZXBhdGNo
LmgiCiAjaW5jbHVkZSAiU3RyaW5nQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJUeXBlZEFycmF5
SW5saW5lcy5oIgorI2luY2x1ZGUgIlR5cGVQcm9maWxlckxvZy5oIgogI2luY2x1ZGUgPHd0Zi9J
bmxpbmVBU00uaD4KIAogI2lmIEVOQUJMRShKSVQpCkBAIC0xMDYyLDYgKzEwNjMsMTEgQEAgaW50
NjRfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbnZlcnREbwogICAgIHJldHVybiB0cnlDb252
ZXJ0VG9JbnQ1Mih2YWx1ZSk7CiB9CiAKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Qcm9j
ZXNzVHlwZVByb2ZpbGVyTG9nREZHKEV4ZWNTdGF0ZSogZXhlYykgCit7CisgICAgZXhlYy0+dm0o
KS50eXBlUHJvZmlsZXJMb2coKS0+cHJvY2Vzc0xvZ0VudHJpZXMoQVNDSUlMaXRlcmFsKCJMb2cg
RnVsbCwgY2FsbGVkIGZyb20gaW5zaWRlIERGRy4iKSk7Cit9CisKIHNpemVfdCBKSVRfT1BFUkFU
SU9OIGRmZ0NvbnZlcnRKU1ZhbHVlVG9JbnQzMihFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1Zh
bHVlIHZhbHVlKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgJKHJldmlzaW9uIDE3MzUwNCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMzAsNiArMTMwLDggQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5vdGlmeVdyaXRl
KAogaW50NjRfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbnZlcnRCb3hlZERvdWJsZVRvSW50
NTIoRW5jb2RlZEpTVmFsdWUpOwogaW50NjRfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbnZl
cnREb3VibGVUb0ludDUyKGRvdWJsZSk7CiAKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Q
cm9jZXNzVHlwZVByb2ZpbGVyTG9nREZHKEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKKwogLy8g
VGhlc2Ugb3BlcmF0aW9ucyBpbXBsZW1lbnQgdGhlIGltcGxpY2l0bHkgY2FsbGVkIFRvSW50MzIg
YW5kIFRvQm9vbGVhbiBjb252ZXJzaW9ucyBmcm9tIEVTNS4KIC8vIFRoaXMgY29udmVyc2lvbiBy
ZXR1cm5zIGFuIGludDMyX3Qgd2l0aGluIGEgc2l6ZV90IHN1Y2ggdGhhdCB0aGUgdmFsdWUgaXMg
emVybyBleHRlbmRlZCB0byBmaWxsIHRoZSByZWdpc3Rlci4KIHNpemVfdCBKSVRfT1BFUkFUSU9O
IGRmZ0NvbnZlcnRKU1ZhbHVlVG9JbnQzMihFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSkgV1RG
X0lOVEVSTkFMOwpAQCAtMTM4LDYgKzE0MCw3IEBAIHZvaWQgSklUX09QRVJBVElPTiBkZWJ1Z09w
ZXJhdGlvblByaW50U3AKIAogdm9pZCBKSVRfT1BFUkFUSU9OIHRyaWdnZXJSZW9wdGltaXphdGlv
bk5vdyhDb2RlQmxvY2sqLCBPU1JFeGl0QmFzZSopIFdURl9JTlRFUk5BTDsKIAorCiAjaWYgRU5B
QkxFKEZUTF9KSVQpCiB2b2lkIEpJVF9PUEVSQVRJT04gdHJpZ2dlclRpZXJVcE5vdyhFeGVjU3Rh
dGUqKSBXVEZfSU5URVJOQUw7CiBjaGFyKiBKSVRfT1BFUkFUSU9OIHRyaWdnZXJPU1JFbnRyeU5v
dyhFeGVjU3RhdGUqLCBpbnQzMl90IGJ5dGVjb2RlSW5kZXgsIGludDMyX3Qgc3RyZWFtSW5kZXgp
IFdURl9JTlRFUk5BTDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGlj
dGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNzM1
MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlv
blBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQwLDYgKzY0MCw3IEBAIHByaXZhdGU6CiAg
ICAgICAgIGNhc2UgQnJlYWtwb2ludDoKICAgICAgICAgY2FzZSBQcm9maWxlV2lsbENhbGw6CiAg
ICAgICAgIGNhc2UgUHJvZmlsZURpZENhbGw6CisgICAgICAgIGNhc2UgUHJvZmlsZVR5cGU6CiAg
ICAgICAgIGNhc2UgQ2hlY2tIYXNJbnN0YW5jZToKICAgICAgICAgY2FzZSBUaHJvd1JlZmVyZW5j
ZUVycm9yOgogICAgICAgICBjYXNlIEZvcmNlT1NSRXhpdDoKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCShyZXZpc2lvbiAxNzM1MDQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMTk4LDYgKzE5OCw3IEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlw
ZSYgc3QKICAgICBjYXNlIEJyZWFrcG9pbnQ6CiAgICAgY2FzZSBQcm9maWxlV2lsbENhbGw6CiAg
ICAgY2FzZSBQcm9maWxlRGlkQ2FsbDoKKyAgICBjYXNlIFByb2ZpbGVUeXBlOgogICAgIGNhc2Ug
Q2hlY2tIYXNJbnN0YW5jZToKICAgICBjYXNlIEluc3RhbmNlT2Y6CiAgICAgY2FzZSBJc1VuZGVm
aW5lZDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2
NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTczNTA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAs
NyBAQAogI2luY2x1ZGUgIkpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oIgogI2luY2x1ZGUgIk9i
amVjdFByb3RvdHlwZS5oIgogI2luY2x1ZGUgIlNwaWxsUmVnaXN0ZXJzTW9kZS5oIgorI2luY2x1
ZGUgIlR5cGVQcm9maWxlckxvZy5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7
CiAKQEAgLTQ5MDQsNiArNDkwNSw1MyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUqIG5vZGUpCiAgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQorICAgIGNhc2UgUHJvZmlsZVR5cGU6IHsKKyAgICAgICAgSlNWYWx1ZU9w
ZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBHUFJUZW1wb3Jhcnkg
c2NyYXRjaDEodGhpcyk7CisgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMih0aGlzKTsKKyAg
ICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gzKHRoaXMpOworCisgICAgICAgIEdQUlJlZyBzY3Jh
dGNoMUdQUiA9IHNjcmF0Y2gxLmdwcigpOworICAgICAgICBHUFJSZWcgc2NyYXRjaDJHUFIgPSBz
Y3JhdGNoMi5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gzR1BSID0gc2NyYXRjaDMuZ3By
KCk7CisgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworCisgICAgICAgIC8v
IExvYWQgdGhlIFR5cGVQcm9maWxlckxvZyBpbnRvIFNjcmF0Y2gyLgorICAgICAgICBUeXBlUHJv
ZmlsZXJMb2cqIGNhY2hlZFR5cGVQcm9maWxlckxvZyA9IG1faml0LnZtKCktPnR5cGVQcm9maWxl
ckxvZygpOworICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoY2FjaGVkVHlwZVByb2Zp
bGVyTG9nKSwgc2NyYXRjaDJHUFIpOworCisgICAgICAgIC8vIExvYWQgdGhlIG5leHQgTG9nRW50
cnkgaW50byBTY3JhdGNoMS4KKyAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhzY3JhdGNoMkdQUiwgVHlwZVByb2ZpbGVyTG9nOjpjdXJyZW50TG9nRW50cnlPZmZz
ZXQoKSksIHNjcmF0Y2gxR1BSKTsKKworICAgICAgICAvLyBTdG9yZSB0aGUgSlNWYWx1ZSBvbnRv
IHRoZSBsb2cgZW50cnkuCisgICAgICAgIG1faml0LnN0b3JlNjQodmFsdWVHUFIsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2gxR1BSLCBUeXBlUHJvZmlsZXJMb2c6OkxvZ0VudHJ5Ojp2
YWx1ZU9mZnNldCgpKSk7CisKKyAgICAgICAgLy8gU3RvcmUgdGhlIHN0cnVjdHVyZUlEIG9mIHRo
ZSBjZWxsIGlmIHZhbHVlR1BSIGlzIGEgY2VsbCwgb3RoZXJ3aXNlLCBzdG9yZSAwIG9uIHRoZSBs
b2cgZW50cnkuCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGlzTm90Q2VsbCA9IGJyYW5j
aE5vdENlbGwoSlNWYWx1ZVJlZ3ModmFsdWVHUFIpKTsKKyAgICAgICAgbV9qaXQubG9hZDMyKE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKHZhbHVlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0
KCkpLCBzY3JhdGNoM0dQUik7CisgICAgICAgIG1faml0LnN0b3JlMzIoc2NyYXRjaDNHUFIsIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2gxR1BSLCBUeXBlUHJvZmlsZXJMb2c6OkxvZ0Vu
dHJ5OjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSk7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1w
IHNraXBJc0NlbGwgPSBtX2ppdC5qdW1wKCk7CisgICAgICAgIGlzTm90Q2VsbC5saW5rKCZtX2pp
dCk7CisgICAgICAgIG1faml0LnN0b3JlMzIoVHJ1c3RlZEltbTMyKDApLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhzY3JhdGNoMUdQUiwgVHlwZVByb2ZpbGVyTG9nOjpMb2dFbnRyeTo6c3RydWN0
dXJlSURPZmZzZXQoKSkpOworICAgICAgICBza2lwSXNDZWxsLmxpbmsoJm1faml0KTsKKworICAg
ICAgICAvLyBTdG9yZSB0aGUgdHlwZUxvY2F0aW9uIG9uIHRoZSBsb2cgZW50cnkuCisgICAgICAg
IFR5cGVMb2NhdGlvbiogY2FjaGVkVHlwZUxvY2F0aW9uID0gbm9kZS0+dHlwZUxvY2F0aW9uKCk7
CisgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cihjYWNoZWRUeXBlTG9jYXRpb24pLCBz
Y3JhdGNoM0dQUik7CisgICAgICAgIG1faml0LnN0b3JlNjQoc2NyYXRjaDNHUFIsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2gxR1BSLCBUeXBlUHJvZmlsZXJMb2c6OkxvZ0VudHJ5Ojps
b2NhdGlvbk9mZnNldCgpKSk7CisKKyAgICAgICAgLy8gSW5jcmVtZW50IHRoZSBjdXJyZW50IGxv
ZyBlbnRyeS4KKyAgICAgICAgbV9qaXQuYWRkUHRyKFRydXN0ZWRJbW0zMihzaXplb2YoVHlwZVBy
b2ZpbGVyTG9nOjpMb2dFbnRyeSkpLCBzY3JhdGNoMUdQUik7CisgICAgICAgIG1faml0LnN0b3Jl
NjQoc2NyYXRjaDFHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2gyR1BSLCBUeXBl
UHJvZmlsZXJMb2c6OmN1cnJlbnRMb2dFbnRyeU9mZnNldCgpKSk7CisgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIHNraXBDbGVhckxvZyA9IG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxl
cjo6Tm90RXF1YWwsIHNjcmF0Y2gxR1BSLCBUcnVzdGVkSW1tUHRyKGNhY2hlZFR5cGVQcm9maWxl
ckxvZy0+bG9nRW5kUHRyKCkpKTsKKyAgICAgICAgLy8gQ2xlYXIgdGhlIGxvZyBpZiB3ZSByZWFj
aCB0aGUgZW5kIG9mIHRoZSBsb2cuCisgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisgICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHJvY2Vzc1R5cGVQcm9maWxlckxvZ0RGRyk7CisgICAg
ICAgIHNraXBDbGVhckxvZy5saW5rKCZtX2ppdCk7CisKKyAgICAgICAgbm9SZXN1bHQobm9kZSk7
CisgICAgICAgIGJyZWFrOworICAgIH0KIAogI2lmIEVOQUJMRShGVExfSklUKSAgICAgICAgCiAg
ICAgY2FzZSBDaGVja1RpZXJVcEluTG9vcDogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMTczNTA0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBA
IC05NDQsNiArOTQ0LDExIEBAIHB1YmxpYzoKICAgICAvLyBtYWNoaW5lIHJlZ2lzdGVycywgYW5k
IGRlbGVnYXRlIHRoZSBjYWxsaW5nIGNvbnZlbnRpb24gc3BlY2lmaWMKICAgICAvLyBkZWNpc2lv
biBhcyB0byBob3cgdG8gZmlsbCB0aGUgcmVnc2l0ZXJzIHRvIHNldHVwQXJndW1lbnRzKiBtZXRo
b2RzLgogCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlv
bl9FIG9wZXJhdGlvbikKKyAgICB7CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzRXhlY1N0
YXRlKCk7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsKG9wZXJhdGlvbik7CisgICAgfQogICAg
IEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oUF9KSVRPcGVyYXRpb25fRSBvcGVyYXRp
b24sIEdQUlJlZyByZXN1bHQpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c0V4
ZWNTdGF0ZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVByb2Zp
bGVyTG9nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlw
ZVByb2ZpbGVyTG9nLmgJKHJldmlzaW9uIDE3MzUwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1R5cGVQcm9maWxlckxvZy5oCSh3b3JraW5nIGNvcHkpCkBAIC03Niw2ICs3Niw3
IEBAIHB1YmxpYzoKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcHJvY2Vzc0xvZ0VudHJp
ZXMoU3RyaW5nKTsKICAgICBMb2dFbnRyeSogbG9nRW5kUHRyKCkgY29uc3QgeyByZXR1cm4gbV9s
b2dFbmRQdHI7IH0KKyAgICBMb2dFbnRyeSogbG9nU3RhcnRQdHIoKSBjb25zdCB7IHJldHVybiBt
X2xvZ1N0YXJ0UHRyOyB9CiAKICAgICBzdGF0aWMgcHRyZGlmZl90IGxvZ1N0YXJ0T2Zmc2V0KCkg
eyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFR5cGVQcm9maWxlckxvZywgbV9sb2dTdGFydFB0cik7
IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IGN1cnJlbnRMb2dFbnRyeU9mZnNldCgpIHsgcmV0dXJu
IE9CSkVDVF9PRkZTRVRPRihUeXBlUHJvZmlsZXJMb2csIG1fY3VycmVudExvZ0VudHJ5UHRyKTsg
fQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238400</attachid>
            <date>2014-09-19 18:26:51 -0700</date>
            <delta_ts>2014-09-26 14:07:57 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>15397</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklu
bGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3Ry
YWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDE3MzUwNCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMTkyNyw2ICsxOTI3LDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3Ry
YWN0U3RhdGVUeQogICAgIGNhc2UgQnJlYWtwb2ludDoKICAgICBjYXNlIFByb2ZpbGVXaWxsQ2Fs
bDoKICAgICBjYXNlIFByb2ZpbGVEaWRDYWxsOgorICAgIGNhc2UgUHJvZmlsZVR5cGU6CiAgICAg
Y2FzZSBQaGFudG9tOgogICAgIGNhc2UgSGFyZFBoYW50b206CiAgICAgY2FzZSBDb3VudEV4ZWN1
dGlvbjoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQ
YXJzZXIuY3BwCShyZXZpc2lvbiAxNzM1MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjg5NCw2ICsyODk0LDEy
IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAg
IE5FWFRfT1BDT0RFKG9wX2luaXRfZ2xvYmFsX2NvbnN0KTsKICAgICAgICAgfQogCisgICAgICAg
IGNhc2Ugb3BfcHJvZmlsZV90eXBlOiB7CisgICAgICAgICAgICBOb2RlKiB2YWx1ZVRvUHJvZmls
ZSA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkp
OworICAgICAgICAgICAgYWRkVG9HcmFwaChQcm9maWxlVHlwZSwgT3BJbmZvKGN1cnJlbnRJbnN0
cnVjdGlvblsyXS51LmxvY2F0aW9uKSwgdmFsdWVUb1Byb2ZpbGUpOworICAgICAgICAgICAgTkVY
VF9PUENPREUob3BfcHJvZmlsZV90eXBlKTsKKyAgICAgICAgfQorCiAgICAgICAgIC8vID09PSBC
bG9jayB0ZXJtaW5hdG9ycy4gPT09CiAKICAgICAgICAgY2FzZSBvcF9qbXA6IHsKQEAgLTM1NTIs
NiArMzU1OCw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAg
ICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3RvX2luZGV4X3N0cmluZyk7CiAgICAgICAgIH0KIAor
CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAvLyBQYXJzZSBmYWlsZWQhIFRoaXMgc2hv
dWxkIG5vdCBoYXBwZW4gYmVjYXVzZSB0aGUgY2FwYWJpbGl0aWVzIGNoZWNrZXIKICAgICAgICAg
ICAgIC8vIHNob3VsZCBoYXZlIGNhdWdodCBpdC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAJKHJldmlzaW9uIDE3MzUwNCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTIwLDYgKzEyMCw3IEBAIENhcGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWwoT3Bjb2Rl
SUQKICAgICBjYXNlIG9wX2RlYnVnOgogICAgIGNhc2Ugb3BfcHJvZmlsZV93aWxsX2NhbGw6CiAg
ICAgY2FzZSBvcF9wcm9maWxlX2RpZF9jYWxsOgorICAgIGNhc2Ugb3BfcHJvZmlsZV90eXBlOgog
ICAgIGNhc2Ugb3BfbW92OgogICAgIGNhc2Ugb3BfY2FwdHVyZWRfbW92OgogICAgIGNhc2Ugb3Bf
Y2hlY2tfaGFzX2luc3RhbmNlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
bG9iYmVyaXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
bG9iYmVyaXplLmgJKHJldmlzaW9uIDE3MzUwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ2xvYmJlcml6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNzEsNiArMjcxLDcgQEAgdm9p
ZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgIGNhc2UgQnJlYWtwb2lu
dDoKICAgICBjYXNlIFByb2ZpbGVXaWxsQ2FsbDoKICAgICBjYXNlIFByb2ZpbGVEaWRDYWxsOgor
ICAgIGNhc2UgUHJvZmlsZVR5cGU6CiAgICAgY2FzZSBTdG9yZUJhcnJpZXI6CiAgICAgY2FzZSBT
dG9yZUJhcnJpZXJXaXRoTnVsbENoZWNrOgogICAgICAgICB3cml0ZShTaWRlU3RhdGUpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAkocmV2aXNpb24gMTczNTA0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMjQsNiArMTI0LDcgQEAgYm9vbCBkb2VzR0MoR3JhcGgmIGdyYXBoLCBOb2RlKiBu
b2RlKQogICAgIGNhc2UgQnJlYWtwb2ludDoKICAgICBjYXNlIFByb2ZpbGVXaWxsQ2FsbDoKICAg
ICBjYXNlIFByb2ZpbGVEaWRDYWxsOgorICAgIGNhc2UgUHJvZmlsZVR5cGU6CiAgICAgY2FzZSBD
aGVja0hhc0luc3RhbmNlOgogICAgIGNhc2UgSW5zdGFuY2VPZjoKICAgICBjYXNlIElzVW5kZWZp
bmVkOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3Bw
CShyZXZpc2lvbiAxNzM1MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVw
UGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiREZH
UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuaCIKICNpbmNsdWRlICJERkdWYXJpYWJsZUFjY2Vz
c0RhdGFEdW1wLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIlR5cGVMb2Nh
dGlvbi5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKQEAgLTQ5LDYgKzUw
LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgQVNTRVJUKG1fZ3JhcGgubV9maXhwb2ludFN0
YXRlID09IEJlZm9yZUZpeHBvaW50KTsKICAgICAgICAgQVNTRVJUKG1fZ3JhcGgubV9mb3JtID09
IFRocmVhZGVkQ1BTKTsKKyAgICAgICAgLy9tX2dyYXBoLmR1bXAoKTsKICAgICAgICAgCiAgICAg
ICAgIG1fcHJvZml0YWJpbGl0eUNoYW5nZWQgPSBmYWxzZTsKICAgICAgICAgZm9yIChCbG9ja0lu
ZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5udW1CbG9ja3MoKTsgKyti
bG9ja0luZGV4KQpAQCAtNjcsNiArNjksNyBAQCBwdWJsaWM6CiAgICAgICAgIGZvciAoQmxvY2tJ
bmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsr
YmxvY2tJbmRleCkKICAgICAgICAgICAgIGluamVjdFR5cGVDb252ZXJzaW9uc0luQmxvY2sobV9n
cmFwaC5ibG9jayhibG9ja0luZGV4KSk7CiAgICAgICAgIAorICAgICAgICAvL21fZ3JhcGguZHVt
cCgpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTExMDcsNiArMTExMCwzNSBA
QCBwcml2YXRlOgogICAgICAgICAgICAgZml4RWRnZTxLbm93bkludDMyVXNlPihub2RlLT5jaGls
ZDEoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQorICAgICAgICBjYXNlIFByb2Zp
bGVUeXBlOiB7CisgICAgICAgICAgICAvLyBXZSB3YW50IHRvIGluc2VydCB0eXBlIGNoZWNrcyBi
YXNlZCBvbiB0aGUgaW5zdHJ1Y3Rpb24gdHlwZSBzZXQgb2YgdHlwZSBsb2NhdGlvbiwgbm90IHRo
ZSBnbG9iYWwgdHlwZSBzZXQuCisgICAgICAgICAgICAvLyBCZWNhdXNlOgorICAgICAgICAgICAg
Ly8gaW5zdHJ1Y3Rpb24gdHlwZSBzZXQgaXMgY29udGFpbmVkIGluIGdsb2JhbCB0eXBlIHNldCwg
dGhlcmVmb3JlLCBpZiB3ZSBwcm9kdWNlIGEgdHlwZSBjaGVjayBmb3IKKyAgICAgICAgICAgIC8v
IHR5cGUgVCBmb3IgdGhlIGluc3RydWN0aW9uIHR5cGUgc2V0LCB0aGUgZ2xvYmFsIHR5cGUgc2V0
IG11c3QgYWxzbyBoYXZlIGluZm9ybWF0aW9uIGZvciB0eXBlIFQuCisgICAgICAgICAgICAvLyAo
VGhlIG90aGVyIGRpcmVjdGlvbiBkb2VzIG5vdCBob2xkIGluIGdlbmVyYWwpLgorICAgICAgICAg
ICAgUmVmUHRyPFR5cGVTZXQ+IHR5cGVTZXQgPSBub2RlLT50eXBlTG9jYXRpb24oKS0+bV9pbnN0
cnVjdGlvblR5cGVTZXQ7CisgICAgICAgICAgICBpZiAodHlwZVNldC0+ZG9lc1R5cGVDb25mb3Jt
VG8oVHlwZU1hY2hpbmVJbnQpKSB7CisgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvQ2hl
Y2soKTsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKSAm
IFNwZWNJbnQzMikKKyAgICAgICAgICAgICAgICAgICAgZml4RWRnZTxJbnQzMlVzZT4obm9kZS0+
Y2hpbGQxKCkpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgZml4
RWRnZTxNYWNoaW5lSW50VXNlPihub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICB9IGVsc2Ug
aWYgKHR5cGVTZXQtPmRvZXNUeXBlQ29uZm9ybVRvKFR5cGVNYWNoaW5lSW50IHwgVHlwZU51bWJl
cikpIHsKKyAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9DaGVjaygpOworICAgICAgICAg
ICAgICAgIGZpeEVkZ2U8TnVtYmVyVXNlPihub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICB9
IGVsc2UgaWYgKHR5cGVTZXQtPmRvZXNUeXBlQ29uZm9ybVRvKFR5cGVTdHJpbmcpKSB7CisgICAg
ICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvQ2hlY2soKTsKKyAgICAgICAgICAgICAgICBmaXhF
ZGdlPFN0cmluZ1VzZT4obm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgfSBlbHNlIGlmICh0
eXBlU2V0LT5kb2VzVHlwZUNvbmZvcm1UbyhUeXBlQm9vbGVhbikpIHsKKyAgICAgICAgICAgICAg
ICBub2RlLT5jb252ZXJ0VG9DaGVjaygpOworICAgICAgICAgICAgICAgIGZpeEVkZ2U8Qm9vbGVh
blVzZT4obm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlU2V0LT5k
b2VzVHlwZUNvbmZvcm1UbyhUeXBlVW5kZWZpbmVkKSAmJiB0eXBlU2V0LT5kb2VzVHlwZUNvbmZv
cm1UbyhUeXBlTnVsbCkpIHsKKyAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9DaGVjaygp
OworICAgICAgICAgICAgICAgIGZpeEVkZ2U8T3RoZXJVc2U+KG5vZGUtPmNoaWxkMSgpKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgICAg
IAogI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICAgICAgLy8gSGF2ZSB0aGVzZSBuby1vcCBjYXNl
cyBoZXJlIHRvIGVuc3VyZSB0aGF0IG5vYm9keSBmb3JnZXRzIHRvIGFkZCBoYW5kbGVycyBmb3Ig
bmV3IG9wY29kZXMuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNp
b24gMTczNTA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ3LDYgKzQ3LDcgQEAKICNpbmNsdWRlICJQdXRCeUlkVmFyaWFudC5oIgog
I2luY2x1ZGUgIlNwZWN1bGF0ZWRUeXBlLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlU2V0LmgiCisj
aW5jbHVkZSAiVHlwZUxvY2F0aW9uLmgiCiAjaW5jbHVkZSAiVmFsdWVQcm9maWxlLmgiCiAjaW5j
bHVkZSA8d3RmL0xpc3REdW1wLmg+CiAKQEAgLTE2OTcsNiArMTY5OCwxMSBAQCBzdHJ1Y3QgTm9k
ZSB7CiAgICAgewogICAgICAgICByZXR1cm4gY2FuU3BlY3VsYXRlSW50NTIoc291cmNlRm9yKHBh
c3MpKTsKICAgICB9CisKKyAgICBUeXBlTG9jYXRpb24qIHR5cGVMb2NhdGlvbigpCisgICAgewor
ICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUeXBlTG9jYXRpb24qPihtX29wSW5mbyk7
CisgICAgfQogICAgIAogICAgIHZvaWQgZHVtcENoaWxkcmVuKFByaW50U3RyZWFtJiBvdXQpCiAg
ICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkocmV2aXNp
b24gMTczNTA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNDcsNiArMjQ3LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgewogICAgIG1hY3JvKE5ld1N0cmluZ09iamVjdCwgTm9kZVJlc3VsdEpTKSBcCiAgICAg
bWFjcm8oTWFrZVJvcGUsIE5vZGVSZXN1bHRKUykgXAogICAgIG1hY3JvKEluLCBOb2RlUmVzdWx0
Qm9vbGVhbiB8IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlQ2xvYmJlcnNXb3JsZCkgXAorICAgIG1h
Y3JvKFByb2ZpbGVUeXBlLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgXAogICAgIC8qIE5vZGVz
IHVzZWQgZm9yIGFjdGl2YXRpb25zLiBBY3RpdmF0aW9uIHN1cHBvcnQgd29ya3MgYnkgaGF2aW5n
IGl0IGFuY2hvcmVkIGF0ICovXAogICAgIC8qIGVwaWxnb3VlcyB2aWEgVGVhck9mZkFjdGl2YXRp
b24sIGFuZCBhbGwgQ3JlYXRlQWN0aXZhdGlvbiBub2RlcyBrZXB0IGFsaXZlIGJ5ICovXApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lv
biAxNzM1MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01NCw2ICs1NCw3IEBACiAjaW5jbHVkZSAiUmVwYXRjaC5oIgog
I2luY2x1ZGUgIlN0cmluZ0NvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiVHlwZWRBcnJheUlubGlu
ZXMuaCIKKyNpbmNsdWRlICJUeXBlUHJvZmlsZXJMb2cuaCIKICNpbmNsdWRlIDx3dGYvSW5saW5l
QVNNLmg+CiAKICNpZiBFTkFCTEUoSklUKQpAQCAtMTA2Miw2ICsxMDYzLDExIEBAIGludDY0X3Qg
SklUX09QRVJBVElPTiBvcGVyYXRpb25Db252ZXJ0RG8KICAgICByZXR1cm4gdHJ5Q29udmVydFRv
SW50NTIodmFsdWUpOwogfQogCit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHJvY2Vzc1R5
cGVQcm9maWxlckxvZ0RGRyhFeGVjU3RhdGUqIGV4ZWMpIAoreworICAgIGV4ZWMtPnZtKCkudHlw
ZVByb2ZpbGVyTG9nKCktPnByb2Nlc3NMb2dFbnRyaWVzKEFTQ0lJTGl0ZXJhbCgiTG9nIEZ1bGws
IGNhbGxlZCBmcm9tIGluc2lkZSBERkcuIikpOworfQorCiBzaXplX3QgSklUX09QRVJBVElPTiBk
ZmdDb252ZXJ0SlNWYWx1ZVRvSW50MzIoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSB2
YWx1ZSkKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAxNzM1MDQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTMw
LDYgKzEzMCw4IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Ob3RpZnlXcml0ZSgKIGlu
dDY0X3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db252ZXJ0Qm94ZWREb3VibGVUb0ludDUyKEVu
Y29kZWRKU1ZhbHVlKTsKIGludDY0X3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db252ZXJ0RG91
YmxlVG9JbnQ1Mihkb3VibGUpOwogCit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHJvY2Vz
c1R5cGVQcm9maWxlckxvZ0RGRyhFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7CisKIC8vIFRoZXNl
IG9wZXJhdGlvbnMgaW1wbGVtZW50IHRoZSBpbXBsaWNpdGx5IGNhbGxlZCBUb0ludDMyIGFuZCBU
b0Jvb2xlYW4gY29udmVyc2lvbnMgZnJvbSBFUzUuCiAvLyBUaGlzIGNvbnZlcnNpb24gcmV0dXJu
cyBhbiBpbnQzMl90IHdpdGhpbiBhIHNpemVfdCBzdWNoIHRoYXQgdGhlIHZhbHVlIGlzIHplcm8g
ZXh0ZW5kZWQgdG8gZmlsbCB0aGUgcmVnaXN0ZXIuCiBzaXplX3QgSklUX09QRVJBVElPTiBkZmdD
b252ZXJ0SlNWYWx1ZVRvSW50MzIoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRF
Uk5BTDsKQEAgLTEzOCw2ICsxNDAsNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gZGVidWdPcGVyYXRp
b25QcmludFNwCiAKIHZvaWQgSklUX09QRVJBVElPTiB0cmlnZ2VyUmVvcHRpbWl6YXRpb25Ob3co
Q29kZUJsb2NrKiwgT1NSRXhpdEJhc2UqKSBXVEZfSU5URVJOQUw7CiAKKwogI2lmIEVOQUJMRShG
VExfSklUKQogdm9pZCBKSVRfT1BFUkFUSU9OIHRyaWdnZXJUaWVyVXBOb3coRXhlY1N0YXRlKikg
V1RGX0lOVEVSTkFMOwogY2hhciogSklUX09QRVJBVElPTiB0cmlnZ2VyT1NSRW50cnlOb3coRXhl
Y1N0YXRlKiwgaW50MzJfdCBieXRlY29kZUluZGV4LCBpbnQzMl90IHN0cmVhbUluZGV4KSBXVEZf
SU5URVJOQUw7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Q
cm9wYWdhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTczNTA0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFz
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0MCw2ICs2NDAsNyBAQCBwcml2YXRlOgogICAgICAg
ICBjYXNlIEJyZWFrcG9pbnQ6CiAgICAgICAgIGNhc2UgUHJvZmlsZVdpbGxDYWxsOgogICAgICAg
ICBjYXNlIFByb2ZpbGVEaWRDYWxsOgorICAgICAgICBjYXNlIFByb2ZpbGVUeXBlOgogICAgICAg
ICBjYXNlIENoZWNrSGFzSW5zdGFuY2U6CiAgICAgICAgIGNhc2UgVGhyb3dSZWZlcmVuY2VFcnJv
cjoKICAgICAgICAgY2FzZSBGb3JjZU9TUkV4aXQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkocmV2aXNpb24gMTczNTA0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTE5OCw2ICsxOTgsNyBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0
CiAgICAgY2FzZSBCcmVha3BvaW50OgogICAgIGNhc2UgUHJvZmlsZVdpbGxDYWxsOgogICAgIGNh
c2UgUHJvZmlsZURpZENhbGw6CisgICAgY2FzZSBQcm9maWxlVHlwZToKICAgICBjYXNlIENoZWNr
SGFzSW5zdGFuY2U6CiAgICAgY2FzZSBJbnN0YW5jZU9mOgogICAgIGNhc2UgSXNVbmRlZmluZWQ6
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQ2NC5jcHAJKHJldmlzaW9uIDE3MzUwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDcgQEAK
ICNpbmNsdWRlICJKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCIKICNpbmNsdWRlICJPYmplY3RQ
cm90b3R5cGUuaCIKICNpbmNsdWRlICJTcGlsbFJlZ2lzdGVyc01vZGUuaCIKKyNpbmNsdWRlICJU
eXBlUHJvZmlsZXJMb2cuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCkBA
IC00OTA0LDYgKzQ5MDUsNTMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBu
b2RlKQogICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KKyAgICBjYXNlIFByb2ZpbGVUeXBlOiB7CisgICAgICAgIEpTVmFsdWVPcGVyYW5k
IHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0
Y2gxKHRoaXMpOworICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDIodGhpcyk7CisgICAgICAg
IEdQUlRlbXBvcmFyeSBzY3JhdGNoMyh0aGlzKTsKKworICAgICAgICBHUFJSZWcgc2NyYXRjaDFH
UFIgPSBzY3JhdGNoMS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gc2NyYXRj
aDIuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoM0dQUiA9IHNjcmF0Y2gzLmdwcigpOwor
ICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKworICAgICAgICAvLyBMb2Fk
IHRoZSBUeXBlUHJvZmlsZXJMb2cgaW50byBTY3JhdGNoMi4KKyAgICAgICAgVHlwZVByb2ZpbGVy
TG9nKiBjYWNoZWRUeXBlUHJvZmlsZXJMb2cgPSBtX2ppdC52bSgpLT50eXBlUHJvZmlsZXJMb2co
KTsKKyAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKGNhY2hlZFR5cGVQcm9maWxlckxv
ZyksIHNjcmF0Y2gyR1BSKTsKKworICAgICAgICAvLyBMb2FkIHRoZSBuZXh0IExvZ0VudHJ5IGlu
dG8gU2NyYXRjaDEuCisgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Moc2NyYXRjaDJHUFIsIFR5cGVQcm9maWxlckxvZzo6Y3VycmVudExvZ0VudHJ5T2Zmc2V0KCkp
LCBzY3JhdGNoMUdQUik7CisKKyAgICAgICAgLy8gU3RvcmUgdGhlIEpTVmFsdWUgb250byB0aGUg
bG9nIGVudHJ5LgorICAgICAgICBtX2ppdC5zdG9yZTY0KHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhzY3JhdGNoMUdQUiwgVHlwZVByb2ZpbGVyTG9nOjpMb2dFbnRyeTo6dmFsdWVP
ZmZzZXQoKSkpOworCisgICAgICAgIC8vIFN0b3JlIHRoZSBzdHJ1Y3R1cmVJRCBvZiB0aGUgY2Vs
bCBpZiB2YWx1ZUdQUiBpcyBhIGNlbGwsIG90aGVyd2lzZSwgc3RvcmUgMCBvbiB0aGUgbG9nIGVu
dHJ5LgorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBpc05vdENlbGwgPSBicmFuY2hOb3RD
ZWxsKEpTVmFsdWVSZWdzKHZhbHVlR1BSKSk7CisgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyh2YWx1ZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwg
c2NyYXRjaDNHUFIpOworICAgICAgICBtX2ppdC5zdG9yZTMyKHNjcmF0Y2gzR1BSLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoMUdQUiwgVHlwZVByb2ZpbGVyTG9nOjpMb2dFbnRyeTo6
c3RydWN0dXJlSURPZmZzZXQoKSkpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBza2lw
SXNDZWxsID0gbV9qaXQuanVtcCgpOworICAgICAgICBpc05vdENlbGwubGluaygmbV9qaXQpOwor
ICAgICAgICBtX2ppdC5zdG9yZTMyKFRydXN0ZWRJbW0zMigwKSwgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3Moc2NyYXRjaDFHUFIsIFR5cGVQcm9maWxlckxvZzo6TG9nRW50cnk6OnN0cnVjdHVyZUlE
T2Zmc2V0KCkpKTsKKyAgICAgICAgc2tpcElzQ2VsbC5saW5rKCZtX2ppdCk7CisKKyAgICAgICAg
Ly8gU3RvcmUgdGhlIHR5cGVMb2NhdGlvbiBvbiB0aGUgbG9nIGVudHJ5LgorICAgICAgICBUeXBl
TG9jYXRpb24qIGNhY2hlZFR5cGVMb2NhdGlvbiA9IG5vZGUtPnR5cGVMb2NhdGlvbigpOworICAg
ICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoY2FjaGVkVHlwZUxvY2F0aW9uKSwgc2NyYXRj
aDNHUFIpOworICAgICAgICBtX2ppdC5zdG9yZTY0KHNjcmF0Y2gzR1BSLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhzY3JhdGNoMUdQUiwgVHlwZVByb2ZpbGVyTG9nOjpMb2dFbnRyeTo6bG9jYXRp
b25PZmZzZXQoKSkpOworCisgICAgICAgIC8vIEluY3JlbWVudCB0aGUgY3VycmVudCBsb2cgZW50
cnkuCisgICAgICAgIG1faml0LmFkZFB0cihUcnVzdGVkSW1tMzIoc2l6ZW9mKFR5cGVQcm9maWxl
ckxvZzo6TG9nRW50cnkpKSwgc2NyYXRjaDFHUFIpOworICAgICAgICBtX2ppdC5zdG9yZTY0KHNj
cmF0Y2gxR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoMkdQUiwgVHlwZVByb2Zp
bGVyTG9nOjpjdXJyZW50TG9nRW50cnlPZmZzZXQoKSkpOworICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBza2lwQ2xlYXJMb2cgPSBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5v
dEVxdWFsLCBzY3JhdGNoMUdQUiwgVHJ1c3RlZEltbVB0cihjYWNoZWRUeXBlUHJvZmlsZXJMb2ct
PmxvZ0VuZFB0cigpKSk7CisgICAgICAgIC8vIENsZWFyIHRoZSBsb2cgaWYgd2UgcmVhY2ggdGhl
IGVuZCBvZiB0aGUgbG9nLgorICAgICAgICBmbHVzaFJlZ2lzdGVycygpOworICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvblByb2Nlc3NUeXBlUHJvZmlsZXJMb2dERkcpOworICAgICAgICBz
a2lwQ2xlYXJMb2cubGluaygmbV9qaXQpOworCisgICAgICAgIG5vUmVzdWx0KG5vZGUpOworICAg
ICAgICBicmVhazsKKyAgICB9CiAKICNpZiBFTkFCTEUoRlRMX0pJVCkgICAgICAgIAogICAgIGNh
c2UgQ2hlY2tUaWVyVXBJbkxvb3A6IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDE3MzUwNCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtOTQ0
LDYgKzk0NCwxMSBAQCBwdWJsaWM6CiAgICAgLy8gbWFjaGluZSByZWdpc3RlcnMsIGFuZCBkZWxl
Z2F0ZSB0aGUgY2FsbGluZyBjb252ZW50aW9uIHNwZWNpZmljCiAgICAgLy8gZGVjaXNpb24gYXMg
dG8gaG93IHRvIGZpbGwgdGhlIHJlZ3NpdGVycyB0byBzZXR1cEFyZ3VtZW50cyogbWV0aG9kcy4K
IAorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9KSVRPcGVyYXRpb25fRSBv
cGVyYXRpb24pCisgICAgeworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c0V4ZWNTdGF0ZSgp
OworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbChvcGVyYXRpb24pOworICAgIH0KICAgICBKSVRD
b21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBfSklUT3BlcmF0aW9uX0Ugb3BlcmF0aW9uLCBH
UFJSZWcgcmVzdWx0KQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNFeGVjU3Rh
dGUoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVQcm9maWxlckxv
Zy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVQcm9m
aWxlckxvZy5oCShyZXZpc2lvbiAxNzM1MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9UeXBlUHJvZmlsZXJMb2cuaAkod29ya2luZyBjb3B5KQpAQCAtNzYsNiArNzYsNyBAQCBw
dWJsaWM6CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHByb2Nlc3NMb2dFbnRyaWVzKFN0
cmluZyk7CiAgICAgTG9nRW50cnkqIGxvZ0VuZFB0cigpIGNvbnN0IHsgcmV0dXJuIG1fbG9nRW5k
UHRyOyB9CisgICAgTG9nRW50cnkqIGxvZ1N0YXJ0UHRyKCkgY29uc3QgeyByZXR1cm4gbV9sb2dT
dGFydFB0cjsgfQogCiAgICAgc3RhdGljIHB0cmRpZmZfdCBsb2dTdGFydE9mZnNldCgpIHsgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihUeXBlUHJvZmlsZXJMb2csIG1fbG9nU3RhcnRQdHIpOyB9CiAg
ICAgc3RhdGljIHB0cmRpZmZfdCBjdXJyZW50TG9nRW50cnlPZmZzZXQoKSB7IHJldHVybiBPQkpF
Q1RfT0ZGU0VUT0YoVHlwZVByb2ZpbGVyTG9nLCBtX2N1cnJlbnRMb2dFbnRyeVB0cik7IH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVTZXQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlU2V0LmgJKHJldmlzaW9uIDE3MzUw
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVTZXQuaAkod29ya2luZyBj
b3B5KQpAQCAtMTA4LDEwICsxMDgsMTAgQEAgcHVibGljOgogICAgIGJvb2wgaXNPdmVyZmxvd24o
KSBjb25zdCB7IHJldHVybiBtX2lzT3ZlcmZsb3duOyB9CiAgICAgU3RyaW5nIGxlYXN0Q29tbW9u
QW5jZXN0b3IoKSBjb25zdDsKICAgICBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1
bnRpbWU6OlR5cGVTZXQ+IGluc3BlY3RvclR5cGVTZXQoKSBjb25zdDsKKyAgICBib29sIGRvZXNU
eXBlQ29uZm9ybVRvKHVpbnQzMl90IHRlc3QpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIHZvaWQg
ZHVtcFNlZW5UeXBlcygpOwotICAgIGJvb2wgZG9lc1R5cGVDb25mb3JtVG8odWludDMyX3QgdGVz
dCkgY29uc3Q7CiAKICAgICB1aW50MzJfdCBtX3NlZW5UeXBlczsKICAgICBib29sIG1faXNPdmVy
Zmxvd247Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238736</attachid>
            <date>2014-09-26 14:07:57 -0700</date>
            <delta_ts>2014-09-30 20:11:00 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>15742</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklu
bGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3Ry
YWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDE3Mzc5NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMTkyNyw2ICsxOTI3LDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3Ry
YWN0U3RhdGVUeQogICAgIGNhc2UgQnJlYWtwb2ludDoKICAgICBjYXNlIFByb2ZpbGVXaWxsQ2Fs
bDoKICAgICBjYXNlIFByb2ZpbGVEaWRDYWxsOgorICAgIGNhc2UgUHJvZmlsZVR5cGU6CiAgICAg
Y2FzZSBQaGFudG9tOgogICAgIGNhc2UgSGFyZFBoYW50b206CiAgICAgY2FzZSBDb3VudEV4ZWN1
dGlvbjoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQ
YXJzZXIuY3BwCShyZXZpc2lvbiAxNzM3OTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjg5Myw2ICsyODkzLDEy
IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAg
IE5FWFRfT1BDT0RFKG9wX2luaXRfZ2xvYmFsX2NvbnN0KTsKICAgICAgICAgfQogCisgICAgICAg
IGNhc2Ugb3BfcHJvZmlsZV90eXBlOiB7CisgICAgICAgICAgICBOb2RlKiB2YWx1ZVRvUHJvZmls
ZSA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkp
OworICAgICAgICAgICAgYWRkVG9HcmFwaChQcm9maWxlVHlwZSwgT3BJbmZvKGN1cnJlbnRJbnN0
cnVjdGlvblsyXS51LmxvY2F0aW9uKSwgdmFsdWVUb1Byb2ZpbGUpOworICAgICAgICAgICAgTkVY
VF9PUENPREUob3BfcHJvZmlsZV90eXBlKTsKKyAgICAgICAgfQorCiAgICAgICAgIC8vID09PSBC
bG9jayB0ZXJtaW5hdG9ycy4gPT09CiAKICAgICAgICAgY2FzZSBvcF9qbXA6IHsKQEAgLTM1NTEs
NiArMzU1Nyw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAg
ICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3RvX2luZGV4X3N0cmluZyk7CiAgICAgICAgIH0KIAor
CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAvLyBQYXJzZSBmYWlsZWQhIFRoaXMgc2hv
dWxkIG5vdCBoYXBwZW4gYmVjYXVzZSB0aGUgY2FwYWJpbGl0aWVzIGNoZWNrZXIKICAgICAgICAg
ICAgIC8vIHNob3VsZCBoYXZlIGNhdWdodCBpdC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAJKHJldmlzaW9uIDE3Mzc5NSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTIwLDYgKzEyMCw3IEBAIENhcGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWwoT3Bjb2Rl
SUQKICAgICBjYXNlIG9wX2RlYnVnOgogICAgIGNhc2Ugb3BfcHJvZmlsZV93aWxsX2NhbGw6CiAg
ICAgY2FzZSBvcF9wcm9maWxlX2RpZF9jYWxsOgorICAgIGNhc2Ugb3BfcHJvZmlsZV90eXBlOgog
ICAgIGNhc2Ugb3BfbW92OgogICAgIGNhc2Ugb3BfY2FwdHVyZWRfbW92OgogICAgIGNhc2Ugb3Bf
Y2hlY2tfaGFzX2luc3RhbmNlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
bG9iYmVyaXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
bG9iYmVyaXplLmgJKHJldmlzaW9uIDE3Mzc5NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ2xvYmJlcml6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNzEsNiArMjcxLDcgQEAgdm9p
ZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgIGNhc2UgQnJlYWtwb2lu
dDoKICAgICBjYXNlIFByb2ZpbGVXaWxsQ2FsbDoKICAgICBjYXNlIFByb2ZpbGVEaWRDYWxsOgor
ICAgIGNhc2UgUHJvZmlsZVR5cGU6CiAgICAgY2FzZSBTdG9yZUJhcnJpZXI6CiAgICAgY2FzZSBT
dG9yZUJhcnJpZXJXaXRoTnVsbENoZWNrOgogICAgICAgICB3cml0ZShTaWRlU3RhdGUpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAkocmV2aXNpb24gMTczNzk1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMjQsNiArMTI0LDcgQEAgYm9vbCBkb2VzR0MoR3JhcGgmIGdyYXBoLCBOb2RlKiBu
b2RlKQogICAgIGNhc2UgQnJlYWtwb2ludDoKICAgICBjYXNlIFByb2ZpbGVXaWxsQ2FsbDoKICAg
ICBjYXNlIFByb2ZpbGVEaWRDYWxsOgorICAgIGNhc2UgUHJvZmlsZVR5cGU6CiAgICAgY2FzZSBD
aGVja0hhc0luc3RhbmNlOgogICAgIGNhc2UgSW5zdGFuY2VPZjoKICAgICBjYXNlIElzVW5kZWZp
bmVkOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3Bw
CShyZXZpc2lvbiAxNzM3OTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVw
UGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiREZH
UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuaCIKICNpbmNsdWRlICJERkdWYXJpYWJsZUFjY2Vz
c0RhdGFEdW1wLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIlR5cGVMb2Nh
dGlvbi5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKQEAgLTQ5LDYgKzUw
LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgQVNTRVJUKG1fZ3JhcGgubV9maXhwb2ludFN0
YXRlID09IEJlZm9yZUZpeHBvaW50KTsKICAgICAgICAgQVNTRVJUKG1fZ3JhcGgubV9mb3JtID09
IFRocmVhZGVkQ1BTKTsKKyAgICAgICAgLy9tX2dyYXBoLmR1bXAoKTsKICAgICAgICAgCiAgICAg
ICAgIG1fcHJvZml0YWJpbGl0eUNoYW5nZWQgPSBmYWxzZTsKICAgICAgICAgZm9yIChCbG9ja0lu
ZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5udW1CbG9ja3MoKTsgKyti
bG9ja0luZGV4KQpAQCAtNjcsNiArNjksNyBAQCBwdWJsaWM6CiAgICAgICAgIGZvciAoQmxvY2tJ
bmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsr
YmxvY2tJbmRleCkKICAgICAgICAgICAgIGluamVjdFR5cGVDb252ZXJzaW9uc0luQmxvY2sobV9n
cmFwaC5ibG9jayhibG9ja0luZGV4KSk7CiAgICAgICAgIAorICAgICAgICAvL21fZ3JhcGguZHVt
cCgpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTExMDcsNiArMTExMCwzNSBA
QCBwcml2YXRlOgogICAgICAgICAgICAgZml4RWRnZTxLbm93bkludDMyVXNlPihub2RlLT5jaGls
ZDEoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQorICAgICAgICBjYXNlIFByb2Zp
bGVUeXBlOiB7CisgICAgICAgICAgICAvLyBXZSB3YW50IHRvIGluc2VydCB0eXBlIGNoZWNrcyBi
YXNlZCBvbiB0aGUgaW5zdHJ1Y3Rpb24gdHlwZSBzZXQgb2YgdHlwZSBsb2NhdGlvbiwgbm90IHRo
ZSBnbG9iYWwgdHlwZSBzZXQuCisgICAgICAgICAgICAvLyBCZWNhdXNlOgorICAgICAgICAgICAg
Ly8gaW5zdHJ1Y3Rpb24gdHlwZSBzZXQgaXMgY29udGFpbmVkIGluIGdsb2JhbCB0eXBlIHNldCwg
dGhlcmVmb3JlLCBpZiB3ZSBwcm9kdWNlIGEgdHlwZSBjaGVjayBmb3IKKyAgICAgICAgICAgIC8v
IHR5cGUgVCBmb3IgdGhlIGluc3RydWN0aW9uIHR5cGUgc2V0LCB0aGUgZ2xvYmFsIHR5cGUgc2V0
IG11c3QgYWxzbyBoYXZlIGluZm9ybWF0aW9uIGZvciB0eXBlIFQuCisgICAgICAgICAgICAvLyAo
VGhlIG90aGVyIGRpcmVjdGlvbiBkb2VzIG5vdCBob2xkIGluIGdlbmVyYWwpLgorICAgICAgICAg
ICAgUmVmUHRyPFR5cGVTZXQ+IHR5cGVTZXQgPSBub2RlLT50eXBlTG9jYXRpb24oKS0+bV9pbnN0
cnVjdGlvblR5cGVTZXQ7CisgICAgICAgICAgICBpZiAodHlwZVNldC0+ZG9lc1R5cGVDb25mb3Jt
VG8oVHlwZU1hY2hpbmVJbnQpKSB7CisgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvQ2hl
Y2soKTsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKSAm
IFNwZWNJbnQzMikKKyAgICAgICAgICAgICAgICAgICAgZml4RWRnZTxJbnQzMlVzZT4obm9kZS0+
Y2hpbGQxKCkpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgZml4
RWRnZTxNYWNoaW5lSW50VXNlPihub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICB9IGVsc2Ug
aWYgKHR5cGVTZXQtPmRvZXNUeXBlQ29uZm9ybVRvKFR5cGVNYWNoaW5lSW50IHwgVHlwZU51bWJl
cikpIHsKKyAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9DaGVjaygpOworICAgICAgICAg
ICAgICAgIGZpeEVkZ2U8TnVtYmVyVXNlPihub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICB9
IGVsc2UgaWYgKHR5cGVTZXQtPmRvZXNUeXBlQ29uZm9ybVRvKFR5cGVTdHJpbmcpKSB7CisgICAg
ICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvQ2hlY2soKTsKKyAgICAgICAgICAgICAgICBmaXhF
ZGdlPFN0cmluZ1VzZT4obm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgfSBlbHNlIGlmICh0
eXBlU2V0LT5kb2VzVHlwZUNvbmZvcm1UbyhUeXBlQm9vbGVhbikpIHsKKyAgICAgICAgICAgICAg
ICBub2RlLT5jb252ZXJ0VG9DaGVjaygpOworICAgICAgICAgICAgICAgIGZpeEVkZ2U8Qm9vbGVh
blVzZT4obm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlU2V0LT5k
b2VzVHlwZUNvbmZvcm1UbyhUeXBlVW5kZWZpbmVkKSAmJiB0eXBlU2V0LT5kb2VzVHlwZUNvbmZv
cm1UbyhUeXBlTnVsbCkpIHsKKyAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9DaGVjaygp
OworICAgICAgICAgICAgICAgIGZpeEVkZ2U8T3RoZXJVc2U+KG5vZGUtPmNoaWxkMSgpKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgICAg
IAogI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICAgICAgLy8gSGF2ZSB0aGVzZSBuby1vcCBjYXNl
cyBoZXJlIHRvIGVuc3VyZSB0aGF0IG5vYm9keSBmb3JnZXRzIHRvIGFkZCBoYW5kbGVycyBmb3Ig
bmV3IG9wY29kZXMuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNp
b24gMTczNzk1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ3LDYgKzQ3LDcgQEAKICNpbmNsdWRlICJQdXRCeUlkVmFyaWFudC5oIgog
I2luY2x1ZGUgIlNwZWN1bGF0ZWRUeXBlLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlU2V0LmgiCisj
aW5jbHVkZSAiVHlwZUxvY2F0aW9uLmgiCiAjaW5jbHVkZSAiVmFsdWVQcm9maWxlLmgiCiAjaW5j
bHVkZSA8d3RmL0xpc3REdW1wLmg+CiAKQEAgLTE3MDIsNiArMTcwMywxMSBAQCBzdHJ1Y3QgTm9k
ZSB7CiAgICAgewogICAgICAgICByZXR1cm4gY2FuU3BlY3VsYXRlSW50NTIoc291cmNlRm9yKHBh
c3MpKTsKICAgICB9CisKKyAgICBUeXBlTG9jYXRpb24qIHR5cGVMb2NhdGlvbigpCisgICAgewor
ICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUeXBlTG9jYXRpb24qPihtX29wSW5mbyk7
CisgICAgfQogICAgIAogICAgIHZvaWQgZHVtcENoaWxkcmVuKFByaW50U3RyZWFtJiBvdXQpCiAg
ICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkocmV2aXNp
b24gMTczNzk1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNDcsNiArMjQ3LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgewogICAgIG1hY3JvKE5ld1N0cmluZ09iamVjdCwgTm9kZVJlc3VsdEpTKSBcCiAgICAg
bWFjcm8oTWFrZVJvcGUsIE5vZGVSZXN1bHRKUykgXAogICAgIG1hY3JvKEluLCBOb2RlUmVzdWx0
Qm9vbGVhbiB8IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlQ2xvYmJlcnNXb3JsZCkgXAorICAgIG1h
Y3JvKFByb2ZpbGVUeXBlLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgXAogICAgIC8qIE5vZGVz
IHVzZWQgZm9yIGFjdGl2YXRpb25zLiBBY3RpdmF0aW9uIHN1cHBvcnQgd29ya3MgYnkgaGF2aW5n
IGl0IGFuY2hvcmVkIGF0ICovXAogICAgIC8qIGVwaWxnb3VlcyB2aWEgVGVhck9mZkFjdGl2YXRp
b24sIGFuZCBhbGwgQ3JlYXRlQWN0aXZhdGlvbiBub2RlcyBrZXB0IGFsaXZlIGJ5ICovXApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lv
biAxNzM3OTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01NCw2ICs1NCw3IEBACiAjaW5jbHVkZSAiUmVwYXRjaC5oIgog
I2luY2x1ZGUgIlN0cmluZ0NvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiVHlwZWRBcnJheUlubGlu
ZXMuaCIKKyNpbmNsdWRlICJUeXBlUHJvZmlsZXJMb2cuaCIKICNpbmNsdWRlIDx3dGYvSW5saW5l
QVNNLmg+CiAKICNpZiBFTkFCTEUoSklUKQpAQCAtMTA2Miw2ICsxMDYzLDExIEBAIGludDY0X3Qg
SklUX09QRVJBVElPTiBvcGVyYXRpb25Db252ZXJ0RG8KICAgICByZXR1cm4gdHJ5Q29udmVydFRv
SW50NTIodmFsdWUpOwogfQogCit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHJvY2Vzc1R5
cGVQcm9maWxlckxvZ0RGRyhFeGVjU3RhdGUqIGV4ZWMpIAoreworICAgIGV4ZWMtPnZtKCkudHlw
ZVByb2ZpbGVyTG9nKCktPnByb2Nlc3NMb2dFbnRyaWVzKEFTQ0lJTGl0ZXJhbCgiTG9nIEZ1bGws
IGNhbGxlZCBmcm9tIGluc2lkZSBERkcuIikpOworfQorCiBzaXplX3QgSklUX09QRVJBVElPTiBk
ZmdDb252ZXJ0SlNWYWx1ZVRvSW50MzIoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSB2
YWx1ZSkKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAxNzM3OTUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTMw
LDYgKzEzMCw4IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Ob3RpZnlXcml0ZSgKIGlu
dDY0X3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db252ZXJ0Qm94ZWREb3VibGVUb0ludDUyKEVu
Y29kZWRKU1ZhbHVlKTsKIGludDY0X3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db252ZXJ0RG91
YmxlVG9JbnQ1Mihkb3VibGUpOwogCit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHJvY2Vz
c1R5cGVQcm9maWxlckxvZ0RGRyhFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7CisKIC8vIFRoZXNl
IG9wZXJhdGlvbnMgaW1wbGVtZW50IHRoZSBpbXBsaWNpdGx5IGNhbGxlZCBUb0ludDMyIGFuZCBU
b0Jvb2xlYW4gY29udmVyc2lvbnMgZnJvbSBFUzUuCiAvLyBUaGlzIGNvbnZlcnNpb24gcmV0dXJu
cyBhbiBpbnQzMl90IHdpdGhpbiBhIHNpemVfdCBzdWNoIHRoYXQgdGhlIHZhbHVlIGlzIHplcm8g
ZXh0ZW5kZWQgdG8gZmlsbCB0aGUgcmVnaXN0ZXIuCiBzaXplX3QgSklUX09QRVJBVElPTiBkZmdD
b252ZXJ0SlNWYWx1ZVRvSW50MzIoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRF
Uk5BTDsKQEAgLTEzOCw2ICsxNDAsNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gZGVidWdPcGVyYXRp
b25QcmludFNwCiAKIHZvaWQgSklUX09QRVJBVElPTiB0cmlnZ2VyUmVvcHRpbWl6YXRpb25Ob3co
Q29kZUJsb2NrKiwgT1NSRXhpdEJhc2UqKSBXVEZfSU5URVJOQUw7CiAKKwogI2lmIEVOQUJMRShG
VExfSklUKQogdm9pZCBKSVRfT1BFUkFUSU9OIHRyaWdnZXJUaWVyVXBOb3coRXhlY1N0YXRlKikg
V1RGX0lOVEVSTkFMOwogY2hhciogSklUX09QRVJBVElPTiB0cmlnZ2VyT1NSRW50cnlOb3coRXhl
Y1N0YXRlKiwgaW50MzJfdCBieXRlY29kZUluZGV4LCBpbnQzMl90IHN0cmVhbUluZGV4KSBXVEZf
SU5URVJOQUw7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Q
cm9wYWdhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTczNzk1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFz
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0MCw2ICs2NDAsNyBAQCBwcml2YXRlOgogICAgICAg
ICBjYXNlIEJyZWFrcG9pbnQ6CiAgICAgICAgIGNhc2UgUHJvZmlsZVdpbGxDYWxsOgogICAgICAg
ICBjYXNlIFByb2ZpbGVEaWRDYWxsOgorICAgICAgICBjYXNlIFByb2ZpbGVUeXBlOgogICAgICAg
ICBjYXNlIENoZWNrSGFzSW5zdGFuY2U6CiAgICAgICAgIGNhc2UgVGhyb3dSZWZlcmVuY2VFcnJv
cjoKICAgICAgICAgY2FzZSBGb3JjZU9TUkV4aXQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkocmV2aXNpb24gMTczNzk1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTE5OCw2ICsxOTgsNyBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0
CiAgICAgY2FzZSBCcmVha3BvaW50OgogICAgIGNhc2UgUHJvZmlsZVdpbGxDYWxsOgogICAgIGNh
c2UgUHJvZmlsZURpZENhbGw6CisgICAgY2FzZSBQcm9maWxlVHlwZToKICAgICBjYXNlIENoZWNr
SGFzSW5zdGFuY2U6CiAgICAgY2FzZSBJbnN0YW5jZU9mOgogICAgIGNhc2UgSXNVbmRlZmluZWQ6
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQ2NC5jcHAJKHJldmlzaW9uIDE3Mzc5NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDcgQEAK
ICNpbmNsdWRlICJKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCIKICNpbmNsdWRlICJPYmplY3RQ
cm90b3R5cGUuaCIKICNpbmNsdWRlICJTcGlsbFJlZ2lzdGVyc01vZGUuaCIKKyNpbmNsdWRlICJU
eXBlUHJvZmlsZXJMb2cuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCkBA
IC00OTA0LDYgKzQ5MDUsNTcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBu
b2RlKQogICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KKyAgICBjYXNlIFByb2ZpbGVUeXBlOiB7CisgICAgICAgIEpTVmFsdWVPcGVyYW5k
IHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0
Y2gxKHRoaXMpOworICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDIodGhpcyk7CisgICAgICAg
IEdQUlRlbXBvcmFyeSBzY3JhdGNoMyh0aGlzKTsKKworICAgICAgICBHUFJSZWcgc2NyYXRjaDFH
UFIgPSBzY3JhdGNoMS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gc2NyYXRj
aDIuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoM0dQUiA9IHNjcmF0Y2gzLmdwcigpOwor
ICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKworICAgICAgICAvLyBMb2Fk
IHRoZSBUeXBlUHJvZmlsZXJMb2cgaW50byBTY3JhdGNoMi4KKyAgICAgICAgVHlwZVByb2ZpbGVy
TG9nKiBjYWNoZWRUeXBlUHJvZmlsZXJMb2cgPSBtX2ppdC52bSgpLT50eXBlUHJvZmlsZXJMb2co
KTsKKyAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKGNhY2hlZFR5cGVQcm9maWxlckxv
ZyksIHNjcmF0Y2gyR1BSKTsKKworICAgICAgICAvLyBMb2FkIHRoZSBuZXh0IExvZ0VudHJ5IGlu
dG8gU2NyYXRjaDEuCisgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Moc2NyYXRjaDJHUFIsIFR5cGVQcm9maWxlckxvZzo6Y3VycmVudExvZ0VudHJ5T2Zmc2V0KCkp
LCBzY3JhdGNoMUdQUik7CisKKyAgICAgICAgLy8gU3RvcmUgdGhlIEpTVmFsdWUgb250byB0aGUg
bG9nIGVudHJ5LgorICAgICAgICBtX2ppdC5zdG9yZTY0KHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhzY3JhdGNoMUdQUiwgVHlwZVByb2ZpbGVyTG9nOjpMb2dFbnRyeTo6dmFsdWVP
ZmZzZXQoKSkpOworCisgICAgICAgIC8vIFN0b3JlIHRoZSBzdHJ1Y3R1cmVJRCBvZiB0aGUgY2Vs
bCBpZiB2YWx1ZUdQUiBpcyBhIGNlbGwsIG90aGVyd2lzZSwgc3RvcmUgMCBvbiB0aGUgbG9nIGVu
dHJ5LgorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBpc05vdENlbGwgPSBicmFuY2hOb3RD
ZWxsKEpTVmFsdWVSZWdzKHZhbHVlR1BSKSk7CisgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyh2YWx1ZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwg
c2NyYXRjaDNHUFIpOworICAgICAgICBtX2ppdC5zdG9yZTMyKHNjcmF0Y2gzR1BSLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoMUdQUiwgVHlwZVByb2ZpbGVyTG9nOjpMb2dFbnRyeTo6
c3RydWN0dXJlSURPZmZzZXQoKSkpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBza2lw
SXNDZWxsID0gbV9qaXQuanVtcCgpOworICAgICAgICBpc05vdENlbGwubGluaygmbV9qaXQpOwor
ICAgICAgICBtX2ppdC5zdG9yZTMyKFRydXN0ZWRJbW0zMigwKSwgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3Moc2NyYXRjaDFHUFIsIFR5cGVQcm9maWxlckxvZzo6TG9nRW50cnk6OnN0cnVjdHVyZUlE
T2Zmc2V0KCkpKTsKKyAgICAgICAgc2tpcElzQ2VsbC5saW5rKCZtX2ppdCk7CisKKyAgICAgICAg
Ly8gU3RvcmUgdGhlIHR5cGVMb2NhdGlvbiBvbiB0aGUgbG9nIGVudHJ5LgorICAgICAgICBUeXBl
TG9jYXRpb24qIGNhY2hlZFR5cGVMb2NhdGlvbiA9IG5vZGUtPnR5cGVMb2NhdGlvbigpOworICAg
ICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoY2FjaGVkVHlwZUxvY2F0aW9uKSwgc2NyYXRj
aDNHUFIpOworICAgICAgICBtX2ppdC5zdG9yZTY0KHNjcmF0Y2gzR1BSLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhzY3JhdGNoMUdQUiwgVHlwZVByb2ZpbGVyTG9nOjpMb2dFbnRyeTo6bG9jYXRp
b25PZmZzZXQoKSkpOworCisgICAgICAgIC8vIEluY3JlbWVudCB0aGUgY3VycmVudCBsb2cgZW50
cnkuCisgICAgICAgIG1faml0LmFkZFB0cihUcnVzdGVkSW1tMzIoc2l6ZW9mKFR5cGVQcm9maWxl
ckxvZzo6TG9nRW50cnkpKSwgc2NyYXRjaDFHUFIpOworICAgICAgICBtX2ppdC5zdG9yZTY0KHNj
cmF0Y2gxR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoMkdQUiwgVHlwZVByb2Zp
bGVyTG9nOjpjdXJyZW50TG9nRW50cnlPZmZzZXQoKSkpOworICAgICAgICAvL01hY3JvQXNzZW1i
bGVyOjpKdW1wIGNsZWFyTG9nID0gbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpFcXVh
bCwgc2NyYXRjaDFHUFIsIFRydXN0ZWRJbW1QdHIoY2FjaGVkVHlwZVByb2ZpbGVyTG9nLT5sb2dF
bmRQdHIoKSkpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBza2lwQ2xlYXJMb2cgPSBt
X2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBzY3JhdGNoMUdQUiwgVHJ1
c3RlZEltbVB0cihjYWNoZWRUeXBlUHJvZmlsZXJMb2ctPmxvZ0VuZFB0cigpKSk7CisgICAgICAg
IC8vIENsZWFyIHRoZSBsb2cgaWYgd2UgcmVhY2ggdGhlIGVuZCBvZiB0aGUgbG9nLgorICAgICAg
ICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25Qcm9jZXNzVHlwZVByb2ZpbGVyTG9nREZHKTsKKyAgICAgICAgc2ls
ZW50RmlsbEFsbFJlZ2lzdGVycyhJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgc2tpcENsZWFyTG9n
LmxpbmsoJm1faml0KTsKKyAgICAgICAgLy9hZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAg
Ly8gICAgc2xvd1BhdGhDYWxsKGNsZWFyTG9nLCB0aGlzLCBvcGVyYXRpb25Qcm9jZXNzVHlwZVBy
b2ZpbGVyTG9nREZHLCBzY3JhdGNoMUdQUikpOworCisgICAgICAgIG5vUmVzdWx0KG5vZGUpOwor
ICAgICAgICBicmVhazsKKyAgICB9CiAKICNpZiBFTkFCTEUoRlRMX0pJVCkgICAgICAgIAogICAg
IGNhc2UgQ2hlY2tUaWVyVXBJbkxvb3A6IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDE3Mzc5NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAt
OTQ0LDYgKzk0NCwxMSBAQCBwdWJsaWM6CiAgICAgLy8gbWFjaGluZSByZWdpc3RlcnMsIGFuZCBk
ZWxlZ2F0ZSB0aGUgY2FsbGluZyBjb252ZW50aW9uIHNwZWNpZmljCiAgICAgLy8gZGVjaXNpb24g
YXMgdG8gaG93IHRvIGZpbGwgdGhlIHJlZ3NpdGVycyB0byBzZXR1cEFyZ3VtZW50cyogbWV0aG9k
cy4KIAorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9KSVRPcGVyYXRpb25f
RSBvcGVyYXRpb24pCisgICAgeworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c0V4ZWNTdGF0
ZSgpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbChvcGVyYXRpb24pOworICAgIH0KICAgICBK
SVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBfSklUT3BlcmF0aW9uX0Ugb3BlcmF0aW9u
LCBHUFJSZWcgcmVzdWx0KQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNFeGVj
U3RhdGUoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVQcm9maWxl
ckxvZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVQ
cm9maWxlckxvZy5oCShyZXZpc2lvbiAxNzM3OTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9UeXBlUHJvZmlsZXJMb2cuaAkod29ya2luZyBjb3B5KQpAQCAtNzYsNiArNzYsNyBA
QCBwdWJsaWM6CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHByb2Nlc3NMb2dFbnRyaWVz
KFN0cmluZyk7CiAgICAgTG9nRW50cnkqIGxvZ0VuZFB0cigpIGNvbnN0IHsgcmV0dXJuIG1fbG9n
RW5kUHRyOyB9CisgICAgTG9nRW50cnkqIGxvZ1N0YXJ0UHRyKCkgY29uc3QgeyByZXR1cm4gbV9s
b2dTdGFydFB0cjsgfQogCiAgICAgc3RhdGljIHB0cmRpZmZfdCBsb2dTdGFydE9mZnNldCgpIHsg
cmV0dXJuIE9CSkVDVF9PRkZTRVRPRihUeXBlUHJvZmlsZXJMb2csIG1fbG9nU3RhcnRQdHIpOyB9
CiAgICAgc3RhdGljIHB0cmRpZmZfdCBjdXJyZW50TG9nRW50cnlPZmZzZXQoKSB7IHJldHVybiBP
QkpFQ1RfT0ZGU0VUT0YoVHlwZVByb2ZpbGVyTG9nLCBtX2N1cnJlbnRMb2dFbnRyeVB0cik7IH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVTZXQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlU2V0LmgJKHJldmlzaW9uIDE3
Mzc5NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVTZXQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTA4LDEwICsxMDgsMTAgQEAgcHVibGljOgogICAgIGJvb2wgaXNPdmVyZmxv
d24oKSBjb25zdCB7IHJldHVybiBtX2lzT3ZlcmZsb3duOyB9CiAgICAgU3RyaW5nIGxlYXN0Q29t
bW9uQW5jZXN0b3IoKSBjb25zdDsKICAgICBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlJ1bnRpbWU6OlR5cGVTZXQ+IGluc3BlY3RvclR5cGVTZXQoKSBjb25zdDsKKyAgICBib29sIGRv
ZXNUeXBlQ29uZm9ybVRvKHVpbnQzMl90IHRlc3QpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIHZv
aWQgZHVtcFNlZW5UeXBlcygpOwotICAgIGJvb2wgZG9lc1R5cGVDb25mb3JtVG8odWludDMyX3Qg
dGVzdCkgY29uc3Q7CiAKICAgICB1aW50MzJfdCBtX3NlZW5UeXBlczsKICAgICBib29sIG1faXNP
dmVyZmxvd247Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238987</attachid>
            <date>2014-09-30 20:11:00 -0700</date>
            <delta_ts>2014-10-01 02:55:51 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>29395</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTc0MTM5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY5IEBA
CisyMDE0LTA5LTMwICBTYWFtIEJhcmF0aSAgPHNhYW1iYXJhdGkxQGdtYWlsLmNvbT4KKworICAg
ICAgICBTdXBwb3J0IHRoZSB0eXBlIHByb2ZpbGVyIGluIHRoZSBERkcKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjcxMgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggaW1wbGVtZW50cyBv
cF9wcm9maWxlX3R5cGUgaW5zaWRlIHRoZSBERkcgYXMgdGhlIG5vZGU6IFByb2ZpbGVUeXBlLgor
ICAgICAgICBUaGUgREZHIHdpbGwgY29udmVydCB0aGUgUHJvZmlsZVR5cGUgbm9kZSBpbnRvIGEg
Q2hlY2sgbm9kZSBpbiB0aGUgY2FzZXMgd2hlcmUKKyAgICAgICAgcGFzc2luZyBhIHR5cGUgY2hl
Y2sgaXMgZXF1aXZhbGVudCB0byB3cml0aW5nIHRvIHRoZSBUeXBlUHJvZmlsZXJMb2cuIFRoaXMK
KyAgICAgICAgZ2l2ZXMgdGhlIERGRyB0aGUgcG90ZW50aWFsIHRvIG9wdGltaXplIG91dCBtdWx0
aXBsZSBQcm9maWxlVHlwZSBub2RlcyBpbnRvCisgICAgICAgIGEgc2luZ2xlIENoZWNrIG5vZGUu
CisKKyAgICAgICAgV2hlbiB0aGUgREZHIGRvZXNuJ3QgY29udmVydCBQcm9maWxlVHlwZSBpbnRv
IGEgQ2hlY2sgbm9kZSwgaXQgd2lsbCBnZW5lcmF0ZQorICAgICAgICB0aGUgc2FtZSBpbmxpbmUg
Y29kZSBhcyB0aGUgYmFzZWxpbmUgSklUIGRvZXMgZm9yIHdyaXRpbmcgYW4gZW50cnkgdG8gdGhl
CisgICAgICAgIFR5cGVQcm9maWxlckxvZy4KKworICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdElu
dGVycHJldGVySW5saW5lcy5oOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0
ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyk6CisgICAgICAgICogZGZnL0RG
R0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6
cGFyc2VCbG9jayk6CisgICAgICAgICogZGZnL0RGR0NhcGFiaWxpdGllcy5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6Y2FwYWJpbGl0eUxldmVsKToKKyAgICAgICAgKiBkZmcvREZHQ2xvYmJlcml6
ZS5oOgorICAgICAgICAoSlNDOjpERkc6OmNsb2JiZXJpemUpOgorICAgICAgICAqIGRmZy9ERkdE
b2VzR0MuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmRvZXNHQyk6CisgICAgICAgICogZGZnL0RG
R0RyaXZlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Y29tcGlsZUltcGwpOgorICAgICAgICAq
IGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjpm
aXh1cE5vZGUpOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6
Tm9kZTo6dHlwZUxvY2F0aW9uKToKKyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUuaDoKKyAgICAg
ICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMu
aDoKKyAgICAgICAgKiBkZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OlByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlOjpwcm9wYWdhdGUpOgor
ICAgICAgICAqIGRmZy9ERkdTYWZlVG9FeGVjdXRlLmg6CisgICAgICAgIChKU0M6OkRGRzo6c2Fm
ZVRvRXhlY3V0ZSk6CisgICAgICAgICogZGZnL0RGR1Nsb3dQYXRoR2VuZXJhdG9yLmg6CisgICAg
ICAgIChKU0M6OkRGRzo6Q2FsbE5vUmVzdWx0QW5kTm9Bcmd1bWVudHNTbG93UGF0aEdlbmVyYXRv
cjo6Q2FsbE5vUmVzdWx0QW5kTm9Bcmd1bWVudHNTbG93UGF0aEdlbmVyYXRvcik6CisgICAgICAg
IChKU0M6OkRGRzo6c2xvd1BhdGhDYWxsKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVK
SVQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2FsbE9wZXJhdGlvbik6
CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3Vs
YXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUpOgorICAgICAgICAqIHJ1bnRpbWUvVHlwZVByb2ZpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6
VHlwZVByb2ZpbGVyOjpsb2dUeXBlc0ZvclR5cGVMb2NhdGlvbik6CisgICAgICAgICogcnVudGlt
ZS9UeXBlU2V0LmNwcDoKKyAgICAgICAgKEpTQzo6VHlwZVNldDo6ZHVtcFR5cGVzKToKKyAgICAg
ICAgKEpTQzo6VHlwZVNldDo6ZG9lc1R5cGVDb25mb3JtVG8pOgorICAgICAgICBNYWtlIHRoaXMg
bWV0aG9kIHB1YmxpYyBzbyBvdGhlciBjbGFzc2VzIGNhbiByZWFzb24gYWJvdXQgdGhlIHR5cGVz
CisgICAgICAgIGEgVHlwZVNldCBoYXMgc2Vlbi4KKyAgICAgICAgKEpTQzo6VHlwZVNldDo6c2Vl
blR5cGVzKTogRGVsZXRlZC4KKyAgICAgICAgUmVuYW1lZCB0byBkdW1wVHlwZXMgc28gdGhlIG1l
dGhvZCBzZWVuVHlwZXMgY2FuIGJlIHVzZWQgYXMgYSBwdWJsaWMgZ2V0dGVyLgorICAgICAgICAo
SlNDOjpUeXBlU2V0OjpkdW1wU2VlblR5cGVzKTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1l
L1R5cGVTZXQuaDoKKyAgICAgICAgKEpTQzo6VHlwZVNldDo6c2VlblR5cGVzKToKKyAgICAgICAg
KiB0ZXN0cy90eXBlUHJvZmlsZXIvZGZnLWppdC1vcHRpbWl6YXRpb25zLmpzOiBBZGRlZC4KKyAg
ICAgICAgKHRpZXJVcFRvREZHKToKKyAgICAgICAgKGZ1bmNzKToKKyAgICAgICAgKC5yZXR1cm4p
OgorCiAyMDE0LTA5LTMwICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KIAogICAgICAg
ICBMYWJlbCBzb21lIGFzc2VydHMgYXMgaGF2aW5nIHNlY3VyaXR5IGltcGxpY2F0aW9ucy4KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGlu
ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0
SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDE3NDEzOSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5
KQpAQCAtMTk4NSw2ICsxOTg1LDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0
U3RhdGVUeQogICAgIGNhc2UgQnJlYWtwb2ludDoKICAgICBjYXNlIFByb2ZpbGVXaWxsQ2FsbDoK
ICAgICBjYXNlIFByb2ZpbGVEaWRDYWxsOgorICAgIGNhc2UgUHJvZmlsZVR5cGU6CiAgICAgY2Fz
ZSBQaGFudG9tOgogICAgIGNhc2UgSGFyZFBoYW50b206CiAgICAgY2FzZSBDb3VudEV4ZWN1dGlv
bjoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJz
ZXIuY3BwCShyZXZpc2lvbiAxNzQxMzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjg5Myw2ICsyODkzLDEyIEBA
IGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIE5F
WFRfT1BDT0RFKG9wX2luaXRfZ2xvYmFsX2NvbnN0KTsKICAgICAgICAgfQogCisgICAgICAgIGNh
c2Ugb3BfcHJvZmlsZV90eXBlOiB7CisgICAgICAgICAgICBOb2RlKiB2YWx1ZVRvUHJvZmlsZSA9
IGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpOwor
ICAgICAgICAgICAgYWRkVG9HcmFwaChQcm9maWxlVHlwZSwgT3BJbmZvKGN1cnJlbnRJbnN0cnVj
dGlvblsyXS51LmxvY2F0aW9uKSwgdmFsdWVUb1Byb2ZpbGUpOworICAgICAgICAgICAgTkVYVF9P
UENPREUob3BfcHJvZmlsZV90eXBlKTsKKyAgICAgICAgfQorCiAgICAgICAgIC8vID09PSBCbG9j
ayB0ZXJtaW5hdG9ycy4gPT09CiAKICAgICAgICAgY2FzZSBvcF9qbXA6IHsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAJKHJldmlzaW9uIDE3
NDEzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTIwLDYgKzEyMCw3IEBAIENhcGFiaWxpdHlMZXZlbCBjYXBhYmls
aXR5TGV2ZWwoT3Bjb2RlSUQKICAgICBjYXNlIG9wX2RlYnVnOgogICAgIGNhc2Ugb3BfcHJvZmls
ZV93aWxsX2NhbGw6CiAgICAgY2FzZSBvcF9wcm9maWxlX2RpZF9jYWxsOgorICAgIGNhc2Ugb3Bf
cHJvZmlsZV90eXBlOgogICAgIGNhc2Ugb3BfbW92OgogICAgIGNhc2Ugb3BfY2FwdHVyZWRfbW92
OgogICAgIGNhc2Ugb3BfY2hlY2tfaGFzX2luc3RhbmNlOgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHJldmlzaW9uIDE3NDEzOSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNzIs
NiArMjcyLDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAg
IGNhc2UgQnJlYWtwb2ludDoKICAgICBjYXNlIFByb2ZpbGVXaWxsQ2FsbDoKICAgICBjYXNlIFBy
b2ZpbGVEaWRDYWxsOgorICAgIGNhc2UgUHJvZmlsZVR5cGU6CiAgICAgY2FzZSBTdG9yZUJhcnJp
ZXI6CiAgICAgY2FzZSBTdG9yZUJhcnJpZXJXaXRoTnVsbENoZWNrOgogICAgIGNhc2UgUHV0QnlP
ZmZzZXRIaW50OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAko
cmV2aXNpb24gMTc0MTM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0Mu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQsNiArMTI0LDcgQEAgYm9vbCBkb2VzR0MoR3JhcGgm
IGdyYXBoLCBOb2RlKiBub2RlKQogICAgIGNhc2UgQnJlYWtwb2ludDoKICAgICBjYXNlIFByb2Zp
bGVXaWxsQ2FsbDoKICAgICBjYXNlIFByb2ZpbGVEaWRDYWxsOgorICAgIGNhc2UgUHJvZmlsZVR5
cGU6CiAgICAgY2FzZSBDaGVja0hhc0luc3RhbmNlOgogICAgIGNhc2UgSW5zdGFuY2VPZjoKICAg
ICBjYXNlIElzVW5kZWZpbmVkOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdE
cml2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJp
dmVyLmNwcAkocmV2aXNpb24gMTc0MTM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdEcml2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAi
SlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIk9wdGlvbnMuaCIKICNpbmNsdWRlICJTYW1wbGluZ1Rv
b2wuaCIKKyNpbmNsdWRlICJUeXBlUHJvZmlsZXJMb2cuaCIKICNpbmNsdWRlIDx3dGYvQXRvbWlj
cy5oPgogCiAjaWYgRU5BQkxFKEZUTF9KSVQpCkBAIC05MSw2ICs5Miw5IEBAIHN0YXRpYyBDb21w
aWxhdGlvblJlc3VsdCBjb21waWxlSW1wbCgKICAgICAKICAgICBpZiAoQ2FsbEVkZ2VMb2c6Omlz
RW5hYmxlZCgpKQogICAgICAgICB2bS5lbnN1cmVDYWxsRWRnZUxvZygpLnByb2Nlc3NMb2coKTsK
KworICAgIGlmICh2bS50eXBlUHJvZmlsZXIoKSkKKyAgICAgICAgdm0udHlwZVByb2ZpbGVyTG9n
KCktPnByb2Nlc3NMb2dFbnRyaWVzKEFTQ0lJTGl0ZXJhbCgiUHJlcGFyaW5nIGZvciBERkcgY29t
cGlsYXRpb24uIikpOwogICAgIAogICAgIFJlZlB0cjxQbGFuPiBwbGFuID0gYWRvcHRSZWYoCiAg
ICAgICAgIG5ldyBQbGFuKGNvZGVCbG9jaywgcHJvZmlsZWRERkdDb2RlQmxvY2ssIG1vZGUsIG9z
ckVudHJ5Qnl0ZWNvZGVJbmRleCwgbXVzdEhhbmRsZVZhbHVlcykpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCShyZXZpc2lvbiAxNzQxMzkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiREZHUHJlZGljdGlvblByb3BhZ2F0aW9u
UGhhc2UuaCIKICNpbmNsdWRlICJERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmgiCiAjaW5jbHVk
ZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIlR5cGVMb2NhdGlvbi5oIgogCiBuYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKQEAgLTExMTIsNiArMTExMywzOCBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgZml4RWRnZTxLbm93bkludDMyVXNlPihub2RlLT5jaGlsZDEoKSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQorICAgICAgICBjYXNlIFByb2ZpbGVUeXBlOiB7Cisg
ICAgICAgICAgICAvLyBXZSB3YW50IHRvIGluc2VydCB0eXBlIGNoZWNrcyBiYXNlZCBvbiB0aGUg
aW5zdHJ1Y3Rpb25UeXBlU2V0IG9mIHRoZSBUeXBlTG9jYXRpb24sIG5vdCB0aGUgZ2xvYmFsVHlw
ZVNldC4KKyAgICAgICAgICAgIC8vIEJlY2F1c2UgdGhlIGluc3RydWN0aW9uVHlwZVNldCBpcyBj
b250YWluZWQgaW4gZ2xvYmFsVHlwZVNldCwgaWYgd2UgcHJvZHVjZSBhIHR5cGUgY2hlY2sgZm9y
CisgICAgICAgICAgICAvLyB0eXBlIFQgZm9yIHRoZSBpbnN0cnVjdGlvblR5cGVTZXQsIHRoZSBn
bG9iYWwgdHlwZSBzZXQgbXVzdCBhbHNvIGhhdmUgaW5mb3JtYXRpb24gZm9yIHR5cGUgVC4KKyAg
ICAgICAgICAgIC8vIFNvIGlmIGl0IHRoZSB0eXBlIGNoZWNrIHN1Y2NlZWRzIGZvciB0eXBlIFQg
aW4gdGhlIGluc3RydWN0aW9uVHlwZVNldCwgYSB0eXBlIGNoZWNrIGZvciB0eXBlIFQgCisgICAg
ICAgICAgICAvLyBpbiB0aGUgZ2xvYmFsVHlwZVNldCB3b3VsZCd2ZSBhbHNvIHN1Y2NlZWRlZC4K
KyAgICAgICAgICAgIC8vIChUaGUgb3RoZXIgZGlyZWN0aW9uIGRvZXMgbm90IGhvbGQgaW4gZ2Vu
ZXJhbCkuCisKKyAgICAgICAgICAgIFJlZlB0cjxUeXBlU2V0PiB0eXBlU2V0ID0gbm9kZS0+dHlw
ZUxvY2F0aW9uKCktPm1faW5zdHJ1Y3Rpb25UeXBlU2V0OworICAgICAgICAgICAgdWludDMyX3Qg
c2VlblR5cGVzID0gdHlwZVNldC0+c2VlblR5cGVzKCk7CisgICAgICAgICAgICBpZiAodHlwZVNl
dC0+ZG9lc1R5cGVDb25mb3JtVG8oVHlwZU1hY2hpbmVJbnQpKSB7CisgICAgICAgICAgICAgICAg
bm9kZS0+Y29udmVydFRvQ2hlY2soKTsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQx
KCktPnByZWRpY3Rpb24oKSAmIFNwZWNJbnQzMikKKyAgICAgICAgICAgICAgICAgICAgZml4RWRn
ZTxJbnQzMlVzZT4obm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICAgICAgZml4RWRnZTxNYWNoaW5lSW50VXNlPihub2RlLT5jaGlsZDEoKSk7Cisg
ICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVTZXQtPmRvZXNUeXBlQ29uZm9ybVRvKFR5cGVOdW1i
ZXIgfCBUeXBlTWFjaGluZUludCkgJiYgc2VlblR5cGVzICYgVHlwZU51bWJlciAmJiBzZWVuVHlw
ZXMgJiBUeXBlTWFjaGluZUludCkgeworICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb0No
ZWNrKCk7CisgICAgICAgICAgICAgICAgZml4RWRnZTxOdW1iZXJVc2U+KG5vZGUtPmNoaWxkMSgp
KTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZVNldC0+ZG9lc1R5cGVDb25mb3JtVG8oVHlw
ZVN0cmluZykpIHsKKyAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9DaGVjaygpOworICAg
ICAgICAgICAgICAgIGZpeEVkZ2U8U3RyaW5nVXNlPihub2RlLT5jaGlsZDEoKSk7CisgICAgICAg
ICAgICB9IGVsc2UgaWYgKHR5cGVTZXQtPmRvZXNUeXBlQ29uZm9ybVRvKFR5cGVCb29sZWFuKSkg
eworICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb0NoZWNrKCk7CisgICAgICAgICAgICAg
ICAgZml4RWRnZTxCb29sZWFuVXNlPihub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICB9IGVs
c2UgaWYgKHR5cGVTZXQtPmRvZXNUeXBlQ29uZm9ybVRvKFR5cGVVbmRlZmluZWQgfCBUeXBlTnVs
bCkgJiYgc2VlblR5cGVzICYgVHlwZVVuZGVmaW5lZCAmJiBzZWVuVHlwZXMgJiBUeXBlTnVsbCkg
eworICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb0NoZWNrKCk7CisgICAgICAgICAgICAg
ICAgZml4RWRnZTxPdGhlclVzZT4obm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICAgICAgCiAjaWYgIUFTU0VSVF9E
SVNBQkxFRAogICAgICAgICAvLyBIYXZlIHRoZXNlIG5vLW9wIGNhc2VzIGhlcmUgdG8gZW5zdXJl
IHRoYXQgbm9ib2R5IGZvcmdldHMgdG8gYWRkIGhhbmRsZXJzIGZvciBuZXcgb3Bjb2Rlcy4KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAxNzQxMzkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDgs
NiArNDgsNyBAQAogI2luY2x1ZGUgIlB1dEJ5SWRWYXJpYW50LmgiCiAjaW5jbHVkZSAiU3BlY3Vs
YXRlZFR5cGUuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVTZXQuaCIKKyNpbmNsdWRlICJUeXBlTG9j
YXRpb24uaCIKICNpbmNsdWRlICJWYWx1ZVByb2ZpbGUuaCIKICNpbmNsdWRlIDx3dGYvTGlzdER1
bXAuaD4KIApAQCAtMTc3Myw2ICsxNzc0LDExIEBAIHN0cnVjdCBOb2RlIHsKICAgICB7CiAgICAg
ICAgIHJldHVybiBjYW5TcGVjdWxhdGVJbnQ1Mihzb3VyY2VGb3IocGFzcykpOwogICAgIH0KKwor
ICAgIFR5cGVMb2NhdGlvbiogdHlwZUxvY2F0aW9uKCkKKyAgICB7CisgICAgICAgIHJldHVybiBy
ZWludGVycHJldF9jYXN0PFR5cGVMb2NhdGlvbio+KG1fb3BJbmZvKTsKKyAgICB9CiAgICAgCiAg
ICAgdm9pZCBkdW1wQ2hpbGRyZW4oUHJpbnRTdHJlYW0mIG91dCkKICAgICB7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCShyZXZpc2lvbiAxNzQxMzkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI1NCw2ICsyNTQsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgbWFj
cm8oTmV3U3RyaW5nT2JqZWN0LCBOb2RlUmVzdWx0SlMpIFwKICAgICBtYWNybyhNYWtlUm9wZSwg
Tm9kZVJlc3VsdEpTKSBcCiAgICAgbWFjcm8oSW4sIE5vZGVSZXN1bHRCb29sZWFuIHwgTm9kZU11
c3RHZW5lcmF0ZSB8IE5vZGVDbG9iYmVyc1dvcmxkKSBcCisgICAgbWFjcm8oUHJvZmlsZVR5cGUs
IE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBcCiAgICAgLyogTm9kZXMgdXNlZCBmb3IgYWN0aXZh
dGlvbnMuIEFjdGl2YXRpb24gc3VwcG9ydCB3b3JrcyBieSBoYXZpbmcgaXQgYW5jaG9yZWQgYXQg
Ki9cCiAgICAgLyogZXBpbGdvdWVzIHZpYSBUZWFyT2ZmQWN0aXZhdGlvbiwgYW5kIGFsbCBDcmVh
dGVBY3RpdmF0aW9uIG5vZGVzIGtlcHQgYWxpdmUgYnkgKi9cCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDE3NDEzOSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTUzLDYgKzUzLDcgQEAKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiUmVw
YXRjaC5oIgogI2luY2x1ZGUgIlN0cmluZ0NvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiVHlwZVBy
b2ZpbGVyTG9nLmgiCiAjaW5jbHVkZSAiVHlwZWRBcnJheUlubGluZXMuaCIKICNpbmNsdWRlIDx3
dGYvSW5saW5lQVNNLmg+CiAKQEAgLTEwNjIsNiArMTA2MywxMSBAQCBpbnQ2NF90IEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uQ29udmVydERvCiAgICAgcmV0dXJuIHRyeUNvbnZlcnRUb0ludDUyKHZh
bHVlKTsKIH0KIAordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblByb2Nlc3NUeXBlUHJvZmls
ZXJMb2dERkcoRXhlY1N0YXRlKiBleGVjKSAKK3sKKyAgICBleGVjLT52bSgpLnR5cGVQcm9maWxl
ckxvZygpLT5wcm9jZXNzTG9nRW50cmllcyhBU0NJSUxpdGVyYWwoIkxvZyBGdWxsLCBjYWxsZWQg
ZnJvbSBpbnNpZGUgREZHLiIpKTsKK30KKwogc2l6ZV90IEpJVF9PUEVSQVRJT04gZGZnQ29udmVy
dEpTVmFsdWVUb0ludDMyKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgdmFsdWUpCiB7
CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09wZXJhdGlvbnMuaAkocmV2aXNpb24gMTc0MTM5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzMCw2ICsxMzAs
OCBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTm90aWZ5V3JpdGUoCiBpbnQ2NF90IEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uQ29udmVydEJveGVkRG91YmxlVG9JbnQ1MihFbmNvZGVkSlNW
YWx1ZSk7CiBpbnQ2NF90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29udmVydERvdWJsZVRvSW50
NTIoZG91YmxlKTsKIAordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblByb2Nlc3NUeXBlUHJv
ZmlsZXJMb2dERkcoRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOworCiAvLyBUaGVzZSBvcGVyYXRp
b25zIGltcGxlbWVudCB0aGUgaW1wbGljaXRseSBjYWxsZWQgVG9JbnQzMiBhbmQgVG9Cb29sZWFu
IGNvbnZlcnNpb25zIGZyb20gRVM1LgogLy8gVGhpcyBjb252ZXJzaW9uIHJldHVybnMgYW4gaW50
MzJfdCB3aXRoaW4gYSBzaXplX3Qgc3VjaCB0aGF0IHRoZSB2YWx1ZSBpcyB6ZXJvIGV4dGVuZGVk
IHRvIGZpbGwgdGhlIHJlZ2lzdGVyLgogc2l6ZV90IEpJVF9PUEVSQVRJT04gZGZnQ29udmVydEpT
VmFsdWVUb0ludDMyKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBo
YXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRp
Y3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTc0MTM5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTY0NSw2ICs2NDUsNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIEJyZWFr
cG9pbnQ6CiAgICAgICAgIGNhc2UgUHJvZmlsZVdpbGxDYWxsOgogICAgICAgICBjYXNlIFByb2Zp
bGVEaWRDYWxsOgorICAgICAgICBjYXNlIFByb2ZpbGVUeXBlOgogICAgICAgICBjYXNlIENoZWNr
SGFzSW5zdGFuY2U6CiAgICAgICAgIGNhc2UgVGhyb3dSZWZlcmVuY2VFcnJvcjoKICAgICAgICAg
Y2FzZSBGb3JjZU9TUkV4aXQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nh
ZmVUb0V4ZWN1dGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NhZmVUb0V4ZWN1dGUuaAkocmV2aXNpb24gMTc0MTM5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5OCw2ICsxOTgs
NyBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0CiAgICAgY2FzZSBC
cmVha3BvaW50OgogICAgIGNhc2UgUHJvZmlsZVdpbGxDYWxsOgogICAgIGNhc2UgUHJvZmlsZURp
ZENhbGw6CisgICAgY2FzZSBQcm9maWxlVHlwZToKICAgICBjYXNlIENoZWNrSGFzSW5zdGFuY2U6
CiAgICAgY2FzZSBJbnN0YW5jZU9mOgogICAgIGNhc2UgSXNVbmRlZmluZWQ6CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nsb3dQYXRoR2VuZXJhdG9yLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTbG93UGF0aEdlbmVyYXRvci5oCShyZXZp
c2lvbiAxNzQxMzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nsb3dQYXRoR2Vu
ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MSw2ICsxNDEsMjcgQEAgcHJvdGVjdGVkOgog
ICAgIFZlY3RvcjxTaWxlbnRSZWdpc3RlclNhdmVQbGFuLCAyPiBtX3BsYW5zOwogfTsKIAordGVt
cGxhdGU8dHlwZW5hbWUgSnVtcFR5cGUsIHR5cGVuYW1lIEZ1bmN0aW9uVHlwZT4KK2NsYXNzIENh
bGxOb1Jlc3VsdEFuZE5vQXJndW1lbnRzU2xvd1BhdGhHZW5lcmF0b3IKKyAgICA6IHB1YmxpYyBD
YWxsU2xvd1BhdGhHZW5lcmF0b3I8SnVtcFR5cGUsIEZ1bmN0aW9uVHlwZSwgR1BSUmVnPiB7Citw
dWJsaWM6CisgICAgQ2FsbE5vUmVzdWx0QW5kTm9Bcmd1bWVudHNTbG93UGF0aEdlbmVyYXRvcigK
KyAgICAgICAgSnVtcFR5cGUgZnJvbSwgU3BlY3VsYXRpdmVKSVQqIGppdCwgRnVuY3Rpb25UeXBl
IGZ1bmN0aW9uLAorICAgICAgICBTcGlsbFJlZ2lzdGVyc01vZGUgc3BpbGxNb2RlKQorICAgICAg
ICA6IENhbGxTbG93UGF0aEdlbmVyYXRvcjxKdW1wVHlwZSwgRnVuY3Rpb25UeXBlLCBHUFJSZWc+
KAorICAgICAgICAgICAgZnJvbSwgaml0LCBmdW5jdGlvbiwgc3BpbGxNb2RlLCBJbnZhbGlkR1BS
UmVnKQorICAgIHsKKyAgICB9CisgICAgCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIGdl
bmVyYXRlSW50ZXJuYWwoU3BlY3VsYXRpdmVKSVQqIGppdCkgb3ZlcnJpZGUKKyAgICB7CisgICAg
ICAgIHRoaXMtPnNldFVwKGppdCk7CisgICAgICAgIHRoaXMtPnJlY29yZENhbGwoaml0LT5jYWxs
T3BlcmF0aW9uKHRoaXMtPm1fZnVuY3Rpb24pKTsKKyAgICAgICAgdGhpcy0+dGVhckRvd24oaml0
KTsKKyAgICB9Cit9OworCiB0ZW1wbGF0ZTx0eXBlbmFtZSBKdW1wVHlwZSwgdHlwZW5hbWUgRnVu
Y3Rpb25UeXBlLCB0eXBlbmFtZSBSZXN1bHRUeXBlPgogY2xhc3MgQ2FsbFJlc3VsdEFuZE5vQXJn
dW1lbnRzU2xvd1BhdGhHZW5lcmF0b3IKICAgICA6IHB1YmxpYyBDYWxsU2xvd1BhdGhHZW5lcmF0
b3I8SnVtcFR5cGUsIEZ1bmN0aW9uVHlwZSwgUmVzdWx0VHlwZT4gewpAQCAtMzI4LDYgKzM0OSwx
NiBAQCBwcm90ZWN0ZWQ6ICAgIAogICAgIEFyZ3VtZW50VHlwZTUgbV9hcmd1bWVudDU7CiB9Owog
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBKdW1wVHlwZSwgdHlwZW5hbWUgRnVuY3Rpb25UeXBlPgoraW5s
aW5lIFBhc3NPd25QdHI8U2xvd1BhdGhHZW5lcmF0b3I+IHNsb3dQYXRoQ2FsbCgKKyAgICBKdW1w
VHlwZSBmcm9tLCBTcGVjdWxhdGl2ZUpJVCogaml0LCBGdW5jdGlvblR5cGUgZnVuY3Rpb24sIFNw
aWxsUmVnaXN0ZXJzTW9kZSBzcGlsbE1vZGUgPSBOZWVkVG9TcGlsbCkKK3sKKyAgICByZXR1cm4g
YWRvcHRQdHIoCisgICAgICAgIG5ldyBDYWxsTm9SZXN1bHRBbmROb0FyZ3VtZW50c1Nsb3dQYXRo
R2VuZXJhdG9yPAorICAgICAgICAgICAgSnVtcFR5cGUsIEZ1bmN0aW9uVHlwZT4oCisgICAgICAg
ICAgICAgICAgZnJvbSwgaml0LCBmdW5jdGlvbiwgc3BpbGxNb2RlKSk7Cit9CisKIHRlbXBsYXRl
PHR5cGVuYW1lIEp1bXBUeXBlLCB0eXBlbmFtZSBGdW5jdGlvblR5cGUsIHR5cGVuYW1lIFJlc3Vs
dFR5cGU+CiBpbmxpbmUgUGFzc093blB0cjxTbG93UGF0aEdlbmVyYXRvcj4gc2xvd1BhdGhDYWxs
KAogICAgIEp1bXBUeXBlIGZyb20sIFNwZWN1bGF0aXZlSklUKiBqaXQsIEZ1bmN0aW9uVHlwZSBm
dW5jdGlvbiwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMTc0MTM5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgIkpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oIgog
I2luY2x1ZGUgIk9iamVjdFByb3RvdHlwZS5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNp
bmNsdWRlICJUeXBlUHJvZmlsZXJMb2cuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgewogCkBAIC00ODU2LDYgKzQ4NTcsNTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlKiBub2RlKQogICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KKyAgICBjYXNlIFByb2ZpbGVUeXBlOiB7CisgICAgICAgIEpTVmFs
dWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgR1BSVGVtcG9y
YXJ5IHNjcmF0Y2gxKHRoaXMpOworICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDIodGhpcyk7
CisgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMyh0aGlzKTsKKworICAgICAgICBHUFJSZWcg
c2NyYXRjaDFHUFIgPSBzY3JhdGNoMS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gyR1BS
ID0gc2NyYXRjaDIuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoM0dQUiA9IHNjcmF0Y2gz
LmdwcigpOworCisgICAgICAgIC8vIExvYWQgdGhlIFR5cGVQcm9maWxlckxvZyBpbnRvIFNjcmF0
Y2gyLgorICAgICAgICBUeXBlUHJvZmlsZXJMb2cqIGNhY2hlZFR5cGVQcm9maWxlckxvZyA9IG1f
aml0LnZtKCktPnR5cGVQcm9maWxlckxvZygpOworICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJ
bW1QdHIoY2FjaGVkVHlwZVByb2ZpbGVyTG9nKSwgc2NyYXRjaDJHUFIpOworCisgICAgICAgIC8v
IExvYWQgdGhlIG5leHQgTG9nRW50cnkgaW50byBTY3JhdGNoMS4KKyAgICAgICAgbV9qaXQubG9h
ZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoMkdQUiwgVHlwZVByb2ZpbGVyTG9n
OjpjdXJyZW50TG9nRW50cnlPZmZzZXQoKSksIHNjcmF0Y2gxR1BSKTsKKworICAgICAgICAvLyBT
dG9yZSB0aGUgSlNWYWx1ZSBvbnRvIHRoZSBsb2cgZW50cnkuCisgICAgICAgIG1faml0LnN0b3Jl
MzIodmFsdWUudGFnR1BSKCksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2gxR1BSLCBU
eXBlUHJvZmlsZXJMb2c6OkxvZ0VudHJ5Ojp2YWx1ZU9mZnNldCgpICsgT0JKRUNUX09GRlNFVE9G
KEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpKTsKKyAgICAgICAgbV9qaXQuc3RvcmUzMih2YWx1ZS5w
YXlsb2FkR1BSKCksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2gxR1BSLCBUeXBlUHJv
ZmlsZXJMb2c6OkxvZ0VudHJ5Ojp2YWx1ZU9mZnNldCgpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFs
dWUsIHUuYXNCaXRzLnBheWxvYWQpKSk7CisKKyAgICAgICAgLy8gU3RvcmUgdGhlIHN0cnVjdHVy
ZUlEIG9mIHRoZSBjZWxsIGlmIHZhbHVlR1BSIGlzIGEgY2VsbCwgb3RoZXJ3aXNlLCBzdG9yZSAw
IG9uIHRoZSBsb2cgZW50cnkuCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGlzTm90Q2Vs
bCA9IGJyYW5jaE5vdENlbGwodmFsdWUuanNWYWx1ZVJlZ3MoKSk7CisgICAgICAgIG1faml0Lmxv
YWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh2YWx1ZS5wYXlsb2FkR1BSKCksIEpTQ2VsbDo6
c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2gzR1BSKTsKKyAgICAgICAgbV9qaXQuc3RvcmUz
MihzY3JhdGNoM0dQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaDFHUFIsIFR5cGVQ
cm9maWxlckxvZzo6TG9nRW50cnk6OnN0cnVjdHVyZUlET2Zmc2V0KCkpKTsKKyAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXAgc2tpcElzQ2VsbCA9IG1faml0Lmp1bXAoKTsKKyAgICAgICAgaXNO
b3RDZWxsLmxpbmsoJm1faml0KTsKKyAgICAgICAgbV9qaXQuc3RvcmUzMihUcnVzdGVkSW1tMzIo
MCksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2gxR1BSLCBUeXBlUHJvZmlsZXJMb2c6
OkxvZ0VudHJ5OjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSk7CisgICAgICAgIHNraXBJc0NlbGwubGlu
aygmbV9qaXQpOworCisgICAgICAgIC8vIFN0b3JlIHRoZSB0eXBlTG9jYXRpb24gb24gdGhlIGxv
ZyBlbnRyeS4KKyAgICAgICAgVHlwZUxvY2F0aW9uKiBjYWNoZWRUeXBlTG9jYXRpb24gPSBub2Rl
LT50eXBlTG9jYXRpb24oKTsKKyAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKGNhY2hl
ZFR5cGVMb2NhdGlvbiksIHNjcmF0Y2gzR1BSKTsKKyAgICAgICAgbV9qaXQuc3RvcmVQdHIoc2Ny
YXRjaDNHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2gxR1BSLCBUeXBlUHJvZmls
ZXJMb2c6OkxvZ0VudHJ5Ojpsb2NhdGlvbk9mZnNldCgpKSk7CisKKyAgICAgICAgLy8gSW5jcmVt
ZW50IHRoZSBjdXJyZW50IGxvZyBlbnRyeS4KKyAgICAgICAgbV9qaXQuYWRkUHRyKFRydXN0ZWRJ
bW0zMihzaXplb2YoVHlwZVByb2ZpbGVyTG9nOjpMb2dFbnRyeSkpLCBzY3JhdGNoMUdQUik7Cisg
ICAgICAgIG1faml0LnN0b3JlUHRyKHNjcmF0Y2gxR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhzY3JhdGNoMkdQUiwgVHlwZVByb2ZpbGVyTG9nOjpjdXJyZW50TG9nRW50cnlPZmZzZXQoKSkp
OworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBjbGVhckxvZyA9IG1faml0LmJyYW5jaFB0
cihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHNjcmF0Y2gxR1BSLCBUcnVzdGVkSW1tUHRyKGNhY2hl
ZFR5cGVQcm9maWxlckxvZy0+bG9nRW5kUHRyKCkpKTsKKyAgICAgICAgYWRkU2xvd1BhdGhHZW5l
cmF0b3IoCisgICAgICAgICAgICBzbG93UGF0aENhbGwoY2xlYXJMb2csIHRoaXMsIG9wZXJhdGlv
blByb2Nlc3NUeXBlUHJvZmlsZXJMb2dERkcpKTsKKworICAgICAgICBub1Jlc3VsdChub2RlKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQogCiAgICAgY2FzZSBGb3JjZU9TUkV4aXQ6IHsKICAgICAg
ICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oSW5hZGVxdWF0ZUNvdmVyYWdlLCBKU1Zh
bHVlUmVncygpLCAwKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTc0MTM5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDAsNiArNDAsNyBAQAogI2luY2x1ZGUgIkpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oIgogI2lu
Y2x1ZGUgIk9iamVjdFByb3RvdHlwZS5oIgogI2luY2x1ZGUgIlNwaWxsUmVnaXN0ZXJzTW9kZS5o
IgorI2luY2x1ZGUgIlR5cGVQcm9maWxlckxvZy5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CiAKQEAgLTQ5MDIsNiArNDkwMyw3OSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQorICAgIGNhc2UgUHJvZmlsZVR5cGU6IHsKKyAgICAgICAg
SlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBHUFJU
ZW1wb3Jhcnkgc2NyYXRjaDEodGhpcyk7CisgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMih0
aGlzKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gzKHRoaXMpOworCisgICAgICAgIEdQ
UlJlZyBzY3JhdGNoMUdQUiA9IHNjcmF0Y2gxLmdwcigpOworICAgICAgICBHUFJSZWcgc2NyYXRj
aDJHUFIgPSBzY3JhdGNoMi5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gzR1BSID0gc2Ny
YXRjaDMuZ3ByKCk7CisgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworCisg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBqdW1wVG9FbmQ7CisKKyAgICAgICAgVHlw
ZUxvY2F0aW9uKiBjYWNoZWRUeXBlTG9jYXRpb24gPSBub2RlLT50eXBlTG9jYXRpb24oKTsKKyAg
ICAgICAgLy8gQ29tcGlsZSBpbiBhIHByZWRpY3RpdmUgdHlwZSBjaGVjaywgaWYgcG9zc2libGUs
IHRvIHNlZSBpZiB3ZSBjYW4gc2tpcCB3cml0aW5nIHRvIHRoZSBsb2cuCisgICAgICAgIC8vIFRo
ZXNlIHR5cGVjaGVja3MgYXJlIGlubGluZWQgdG8gbWF0Y2ggdGhvc2Ugb2YgdGhlIDY0LWJpdCBK
U1ZhbHVlIHR5cGUgY2hlY2tzLgorICAgICAgICBpZiAoY2FjaGVkVHlwZUxvY2F0aW9uLT5tX2xh
c3RTZWVuVHlwZSA9PSBUeXBlVW5kZWZpbmVkKQorICAgICAgICAgICAganVtcFRvRW5kLmFwcGVu
ZChtX2ppdC5icmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHZhbHVlR1BSLCBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSkpKTsK
KyAgICAgICAgZWxzZSBpZiAoY2FjaGVkVHlwZUxvY2F0aW9uLT5tX2xhc3RTZWVuVHlwZSA9PSBU
eXBlTnVsbCkKKyAgICAgICAgICAgIGp1bXBUb0VuZC5hcHBlbmQobV9qaXQuYnJhbmNoNjQoTWFj
cm9Bc3NlbWJsZXI6OkVxdWFsLCB2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02
NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSkpOworICAgICAgICBlbHNlIGlmIChjYWNoZWRU
eXBlTG9jYXRpb24tPm1fbGFzdFNlZW5UeXBlID09IFR5cGVCb29sZWFuKSB7CisgICAgICAgICAg
ICBtX2ppdC5tb3ZlKHZhbHVlR1BSLCBzY3JhdGNoMkdQUik7CisgICAgICAgICAgICBtX2ppdC5h
bmQ2NChUcnVzdGVkSW1tMzIofjEpLCBzY3JhdGNoMkdQUik7CisgICAgICAgICAgICBqdW1wVG9F
bmQuYXBwZW5kKG1faml0LmJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgc2NyYXRjaDJH
UFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoVmFsdWVGYWxzZSkpKTsKKyAgICAgICAg
fSBlbHNlIGlmIChjYWNoZWRUeXBlTG9jYXRpb24tPm1fbGFzdFNlZW5UeXBlID09IFR5cGVNYWNo
aW5lSW50KQorICAgICAgICAgICAganVtcFRvRW5kLmFwcGVuZChtX2ppdC5icmFuY2g2NChNYWNy
b0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCB2YWx1ZUdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJl
clJlZ2lzdGVyKSk7CisgICAgICAgIGVsc2UgaWYgKGNhY2hlZFR5cGVMb2NhdGlvbi0+bV9sYXN0
U2VlblR5cGUgPT0gVHlwZU51bWJlcikgeworICAgICAgICAgICAgLy8gQSBKU1ZhbHVlIGlzIGEg
ZG91YmxlIHdoZW4gaXQncyBhIG51bWJlciBhbmQgaXQncyBOT1QgYW4gaW50MzIuCisgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkZWZpbml0ZWx5Tm90RG91YmxlID0gbV9qaXQuYnJh
bmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCB2YWx1ZUdQUiwgR1BSSW5mbzo6dGFnVHlw
ZU51bWJlclJlZ2lzdGVyKTsKKyAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdEludDMy
ID0gbV9qaXQuYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCB2YWx1ZUdQUiwgR1BSSW5m
bzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKKyAgICAgICAgICAgIGp1bXBUb0VuZC5hcHBlbmQo
bm90SW50MzIpOworICAgICAgICAgICAgZGVmaW5pdGVseU5vdERvdWJsZS5saW5rKCZtX2ppdCk7
CisgICAgICAgIH0gZWxzZSBpZiAoY2FjaGVkVHlwZUxvY2F0aW9uLT5tX2xhc3RTZWVuVHlwZSA9
PSBUeXBlU3RyaW5nKSB7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBpc05vdENl
bGwgPSBicmFuY2hOb3RDZWxsKEpTVmFsdWVSZWdzKHZhbHVlR1BSKSk7CisgICAgICAgICAgICBq
dW1wVG9FbmQuYXBwZW5kKG1faml0LmJyYW5jaDgoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyh2YWx1ZUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQo
KSksIFRydXN0ZWRJbW0zMihTdHJpbmdUeXBlKSkpOworICAgICAgICAgICAgaXNOb3RDZWxsLmxp
bmsoJm1faml0KTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIExvYWQgdGhlIFR5cGVQcm9maWxl
ckxvZyBpbnRvIFNjcmF0Y2gyLgorICAgICAgICBUeXBlUHJvZmlsZXJMb2cqIGNhY2hlZFR5cGVQ
cm9maWxlckxvZyA9IG1faml0LnZtKCktPnR5cGVQcm9maWxlckxvZygpOworICAgICAgICBtX2pp
dC5tb3ZlKFRydXN0ZWRJbW1QdHIoY2FjaGVkVHlwZVByb2ZpbGVyTG9nKSwgc2NyYXRjaDJHUFIp
OworCisgICAgICAgIC8vIExvYWQgdGhlIG5leHQgTG9nRW50cnkgaW50byBTY3JhdGNoMS4KKyAg
ICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoMkdQUiwg
VHlwZVByb2ZpbGVyTG9nOjpjdXJyZW50TG9nRW50cnlPZmZzZXQoKSksIHNjcmF0Y2gxR1BSKTsK
KworICAgICAgICAvLyBTdG9yZSB0aGUgSlNWYWx1ZSBvbnRvIHRoZSBsb2cgZW50cnkuCisgICAg
ICAgIG1faml0LnN0b3JlNjQodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0
Y2gxR1BSLCBUeXBlUHJvZmlsZXJMb2c6OkxvZ0VudHJ5Ojp2YWx1ZU9mZnNldCgpKSk7CisKKyAg
ICAgICAgLy8gU3RvcmUgdGhlIHN0cnVjdHVyZUlEIG9mIHRoZSBjZWxsIGlmIHZhbHVlR1BSIGlz
IGEgY2VsbCwgb3RoZXJ3aXNlLCBzdG9yZSAwIG9uIHRoZSBsb2cgZW50cnkuCisgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaE5vdENlbGwoSlNWYWx1ZVJlZ3Mo
dmFsdWVHUFIpKTsKKyAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KHZhbHVlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoM0dQUik7Cisg
ICAgICAgIG1faml0LnN0b3JlMzIoc2NyYXRjaDNHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KHNjcmF0Y2gxR1BSLCBUeXBlUHJvZmlsZXJMb2c6OkxvZ0VudHJ5OjpzdHJ1Y3R1cmVJRE9mZnNl
dCgpKSk7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNraXBJc0NlbGwgPSBtX2ppdC5q
dW1wKCk7CisgICAgICAgIGlzTm90Q2VsbC5saW5rKCZtX2ppdCk7CisgICAgICAgIG1faml0LnN0
b3JlMzIoVHJ1c3RlZEltbTMyKDApLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoMUdQ
UiwgVHlwZVByb2ZpbGVyTG9nOjpMb2dFbnRyeTo6c3RydWN0dXJlSURPZmZzZXQoKSkpOworICAg
ICAgICBza2lwSXNDZWxsLmxpbmsoJm1faml0KTsKKworICAgICAgICAvLyBTdG9yZSB0aGUgdHlw
ZUxvY2F0aW9uIG9uIHRoZSBsb2cgZW50cnkuCisgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZElt
bVB0cihjYWNoZWRUeXBlTG9jYXRpb24pLCBzY3JhdGNoM0dQUik7CisgICAgICAgIG1faml0LnN0
b3JlUHRyKHNjcmF0Y2gzR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoMUdQUiwg
VHlwZVByb2ZpbGVyTG9nOjpMb2dFbnRyeTo6bG9jYXRpb25PZmZzZXQoKSkpOworCisgICAgICAg
IC8vIEluY3JlbWVudCB0aGUgY3VycmVudCBsb2cgZW50cnkuCisgICAgICAgIG1faml0LmFkZFB0
cihUcnVzdGVkSW1tMzIoc2l6ZW9mKFR5cGVQcm9maWxlckxvZzo6TG9nRW50cnkpKSwgc2NyYXRj
aDFHUFIpOworICAgICAgICBtX2ppdC5zdG9yZVB0cihzY3JhdGNoMUdQUiwgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3Moc2NyYXRjaDJHUFIsIFR5cGVQcm9maWxlckxvZzo6Y3VycmVudExvZ0VudHJ5
T2Zmc2V0KCkpKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgY2xlYXJMb2cgPSBtX2pp
dC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBzY3JhdGNoMUdQUiwgVHJ1c3RlZElt
bVB0cihjYWNoZWRUeXBlUHJvZmlsZXJMb2ctPmxvZ0VuZFB0cigpKSk7CisgICAgICAgIGFkZFNs
b3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAgICAgc2xvd1BhdGhDYWxsKGNsZWFyTG9nLCB0aGlz
LCBvcGVyYXRpb25Qcm9jZXNzVHlwZVByb2ZpbGVyTG9nREZHKSk7CisKKyAgICAgICAganVtcFRv
RW5kLmxpbmsoJm1faml0KTsKKworICAgICAgICBub1Jlc3VsdChub2RlKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQogCiAjaWYgRU5BQkxFKEZUTF9KSVQpICAgICAgICAKICAgICBjYXNlIENoZWNr
VGllclVwSW5Mb29wOiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAxNzQxMzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTk0NCw2ICs5NDQs
MTEgQEAgcHVibGljOgogICAgIC8vIG1hY2hpbmUgcmVnaXN0ZXJzLCBhbmQgZGVsZWdhdGUgdGhl
IGNhbGxpbmcgY29udmVudGlvbiBzcGVjaWZpYwogICAgIC8vIGRlY2lzaW9uIGFzIHRvIGhvdyB0
byBmaWxsIHRoZSByZWdzaXRlcnMgdG8gc2V0dXBBcmd1bWVudHMqIG1ldGhvZHMuCiAKKyAgICBK
SVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0Ugb3BlcmF0aW9u
KQorICAgIHsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNFeGVjU3RhdGUoKTsKKyAgICAg
ICAgcmV0dXJuIGFwcGVuZENhbGwob3BlcmF0aW9uKTsKKyAgICB9CiAgICAgSklUQ29tcGlsZXI6
OkNhbGwgY2FsbE9wZXJhdGlvbihQX0pJVE9wZXJhdGlvbl9FIG9wZXJhdGlvbiwgR1BSUmVnIHJl
c3VsdCkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzRXhlY1N0YXRlKCk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlUHJvZmlsZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVQcm9maWxlci5jcHAJ
KHJldmlzaW9uIDE3NDEzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVQ
cm9maWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDkgKzQ2LDkgQEAgdm9pZCBUeXBlUHJv
ZmlsZXI6OmxvZ1R5cGVzRm9yVHlwZUxvY2F0aQogCiAgICAgZGF0YUxvZygiXHRcdCIsIGxvY2F0
aW9uLT5tX2dsb2JhbFZhcmlhYmxlSUQgPT0gVHlwZVByb2ZpbGVyUmV0dXJuU3RhdGVtZW50ID8g
IltSZXR1cm4gU3RhdGVtZW50XSIgOiAiW05vcm1hbCBTdGF0ZW1lbnRdIiwgIlxuIik7CiAKLSAg
ICBkYXRhTG9nKCJcdFx0I0xvY2FsI1xuXHRcdCIsIGxvY2F0aW9uLT5tX2luc3RydWN0aW9uVHlw
ZVNldC0+c2VlblR5cGVzKCkucmVwbGFjZSgiXG4iLCAiXG5cdFx0IiksICJcbiIpOworICAgIGRh
dGFMb2coIlx0XHQjTG9jYWwjXG5cdFx0IiwgbG9jYXRpb24tPm1faW5zdHJ1Y3Rpb25UeXBlU2V0
LT5kdW1wVHlwZXMoKS5yZXBsYWNlKCJcbiIsICJcblx0XHQiKSwgIlxuIik7CiAgICAgaWYgKGxv
Y2F0aW9uLT5tX2dsb2JhbFR5cGVTZXQpCi0gICAgICAgIGRhdGFMb2coIlx0XHQjR2xvYmFsI1xu
XHRcdCIsIGxvY2F0aW9uLT5tX2dsb2JhbFR5cGVTZXQtPnNlZW5UeXBlcygpLnJlcGxhY2UoIlxu
IiwgIlxuXHRcdCIpLCAiXG4iKTsKKyAgICAgICAgZGF0YUxvZygiXHRcdCNHbG9iYWwjXG5cdFx0
IiwgbG9jYXRpb24tPm1fZ2xvYmFsVHlwZVNldC0+ZHVtcFR5cGVzKCkucmVwbGFjZSgiXG4iLCAi
XG5cdFx0IiksICJcbiIpOwogfQogCiB2b2lkIFR5cGVQcm9maWxlcjo6aW5zZXJ0TmV3TG9jYXRp
b24oVHlwZUxvY2F0aW9uKiBsb2NhdGlvbikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1R5cGVTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1R5cGVTZXQuY3BwCShyZXZpc2lvbiAxNzQxMzkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9UeXBlU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEwLDcgKzExMCw3
IEBAIHZvaWQgVHlwZVNldDo6aW52YWxpZGF0ZUNhY2hlKCkKICAgICBtX3N0cnVjdHVyZUlEQ2Fj
aGUuY2xlYXIoKTsKIH0KIAotU3RyaW5nIFR5cGVTZXQ6OnNlZW5UeXBlcygpIGNvbnN0CitTdHJp
bmcgVHlwZVNldDo6ZHVtcFR5cGVzKCkgY29uc3QKIHsKICAgICBpZiAobV9zZWVuVHlwZXMgPT0g
VHlwZU5vdGhpbmcpCiAgICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoIihVbnJlYWNoZWQgU3Rh
dGVtZW50KSIpOwpAQCAtMTc0LDcgKzE3NCw3IEBAIGJvb2wgVHlwZVNldDo6ZG9lc1R5cGVDb25m
b3JtVG8odWludDMyX3QKICAgICAvLyAtLS0tLS0gKEFORCkKICAgICAvLyAwYjAwMTAgIT0gc2Vl
bgogCi0gICAgcmV0dXJuIChtX3NlZW5UeXBlcyAmIHRlc3QpID09IG1fc2VlblR5cGVzOworICAg
IHJldHVybiBtX3NlZW5UeXBlcyAhPSBUeXBlTm90aGluZyAmJiAobV9zZWVuVHlwZXMgJiB0ZXN0
KSA9PSBtX3NlZW5UeXBlczsKIH0KIAogU3RyaW5nIFR5cGVTZXQ6OmRpc3BsYXlOYW1lKCkgY29u
c3QKQEAgLTM1MywxMSArMzUzLDYgQEAgU3RyaW5nIFR5cGVTZXQ6OnRvSlNPTlN0cmluZygpIGNv
bnN0CiAgICAgcmV0dXJuIGpzb24udG9TdHJpbmcoKTsKIH0KIAotdm9pZCBUeXBlU2V0OjpkdW1w
U2VlblR5cGVzKCkKLXsKLSAgICBkYXRhTG9nKHNlZW5UeXBlcygpLCAiXG4iKTsKLX0KLQogU3Ry
dWN0dXJlU2hhcGU6OlN0cnVjdHVyZVNoYXBlKCkKICAgICA6IG1fcHJvdG8obnVsbHB0cikKICAg
ICAsIG1fcHJvcGVydHlIYXNoKG51bGxwdHIpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9UeXBlU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVHlwZVNldC5oCShyZXZpc2lvbiAxNzQxMzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9UeXBlU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw3ICsxMDAsNyBAQCBw
dWJsaWM6CiAgICAgdm9pZCBhZGRUeXBlSW5mb3JtYXRpb24oUnVudGltZVR5cGUsIFBhc3NSZWZQ
dHI8U3RydWN0dXJlU2hhcGU+LCBTdHJ1Y3R1cmVJRCk7CiAgICAgc3RhdGljIFJ1bnRpbWVUeXBl
IGdldFJ1bnRpbWVUeXBlRm9yVmFsdWUoSlNWYWx1ZSk7CiAgICAgdm9pZCBpbnZhbGlkYXRlQ2Fj
aGUoKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBTdHJpbmcgc2VlblR5cGVzKCkgY29uc3Q7Cisg
ICAgU3RyaW5nIGR1bXBUeXBlcygpIGNvbnN0OwogICAgIFN0cmluZyBkaXNwbGF5TmFtZSgpIGNv
bnN0OwogICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4g
YWxsUHJpbWl0aXZlVHlwZU5hbWVzKCkgY29uc3Q7CiAgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpTdHJ1Y3R1cmVE
ZXNjcmlwdGlvbj4+IGFsbFN0cnVjdHVyZVJlcHJlc2VudGF0aW9ucygpIGNvbnN0OwpAQCAtMTA5
LDEwICsxMDksMTAgQEAgcHVibGljOgogICAgIFN0cmluZyBsZWFzdENvbW1vbkFuY2VzdG9yKCkg
Y29uc3Q7CiAgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpUeXBl
U2V0PiBpbnNwZWN0b3JUeXBlU2V0KCkgY29uc3Q7CiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3Qg
eyByZXR1cm4gbV9zZWVuVHlwZXMgPT0gVHlwZU5vdGhpbmc7IH0KKyAgICBib29sIGRvZXNUeXBl
Q29uZm9ybVRvKHVpbnQzMl90IHRlc3QpIGNvbnN0OworICAgIHVpbnQzMl90IHNlZW5UeXBlcygp
IGNvbnN0IHsgcmV0dXJuIG1fc2VlblR5cGVzOyB9CiAKIHByaXZhdGU6Ci0gICAgdm9pZCBkdW1w
U2VlblR5cGVzKCk7Ci0gICAgYm9vbCBkb2VzVHlwZUNvbmZvcm1Ubyh1aW50MzJfdCB0ZXN0KSBj
b25zdDsKIAogICAgIHVpbnQzMl90IG1fc2VlblR5cGVzOwogICAgIGJvb2wgbV9pc092ZXJmbG93
bjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy90eXBlUHJvZmlsZXIvZGZnLWpp
dC1vcHRpbWl6YXRpb25zLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90
ZXN0cy90eXBlUHJvZmlsZXIvZGZnLWppdC1vcHRpbWl6YXRpb25zLmpzCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3R5cGVQcm9maWxlci9kZmctaml0LW9wdGlt
aXphdGlvbnMuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMiBAQAorbG9hZCgiLi9kcml2
ZXIvZHJpdmVyLmpzIik7CisKK2Z1bmN0aW9uIHRpZXJVcFRvREZHKGZ1bmMsIGFyZykgCit7Cisg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwOyBpKyspCisgICAgICAgIGZ1bmMoYXJnKTsKK30K
KwordmFyIHR5cGVzID0gW1QuQm9vbGVhbiwgVC5JbnRlZ2VyLCBULk51bGwsIFQuTnVtYmVyLCBU
LlN0cmluZywgVC5VbmRlZmluZWRdOwordmFyIHZhbHVlcyA9IFt0cnVlLCAxLCBudWxsLCAxLjEs
ICJoZWxsbyIsIHVuZGVmaW5lZF07Cit2YXIgZnVuY3MgPSBbZnVuY3Rpb24oeCkgeyByZXR1cm4g
eDsgfSwgZnVuY3Rpb24oeCkgeyByZXR1cm4geDsgfSwgZnVuY3Rpb24oeCkgeyByZXR1cm4geDsg
fSwgCisgICAgZnVuY3Rpb24oeCkgeyByZXR1cm4geDsgfSwgZnVuY3Rpb24oeCkgeyByZXR1cm4g
eDsgfSwgZnVuY3Rpb24oeCkgeyByZXR1cm4geDsgfV0KKworYXNzZXJ0KHR5cGVzLmxlbmd0aCA9
PT0gdmFsdWVzLmxlbmd0aCAmJiB2YWx1ZXMubGVuZ3RoID09PSBmdW5jcy5sZW5ndGgpOworCisv
LyBNYWtlIHN1cmUgYmFzZWxpbmUgREZHIHR5cGUgY2hlY2sgb3B0aW1pemF0aW9ucyB3b3JrLgor
Ly8gVGllciB1cCBlYWNoIGZ1bmN0aW9uIG9uIGEgZGlmZmVyZW50IHR5cGUsIHRoZW4gY2FsbCBp
dCB3aXRoIGFsbCBvdGhlciBwcmltaXRpdmUgdHlwZXMgdG8gbWFrZSBzdXJlIHRoZXkncmUgcmVj
b3JkZWQuCitmb3IgKHZhciBpID0gMDsgaSA8IHR5cGVzLmxlbmd0aDsgaSsrKSB7CisgICAgdmFy
IGZ1bmMgPSBmdW5jc1tpXTsKKyAgICB2YXIgdHlwZSA9IHR5cGVzW2ldOworICAgIHZhciB2YWx1
ZSA9IHZhbHVlc1tpXTsKKyAgICBub0lubGluZShmdW5jKTsKKyAgICB0aWVyVXBUb0RGRyhmdW5j
LCB2YWx1ZSk7CisgICAgdmFyIHR5cGVJbmZvID0gZmluZFR5cGVGb3JFeHByZXNzaW9uKGZ1bmMs
ICJ4Iik7IAorICAgIGFzc2VydCh0eXBlSW5mby5pbnN0cnVjdGlvblR5cGVTZXQucHJpbWl0aXZl
VHlwZU5hbWVzLmxlbmd0aCA9PT0gMSwgIk9ubHkgb25lIHByaW1pdGl2ZSB0eXBlIHNob3VsZCBo
YXZlIGJlZW4gc2VlbiBzbyBmYXIuIik7CisgICAgYXNzZXJ0KHR5cGVJbmZvLmluc3RydWN0aW9u
VHlwZVNldC5wcmltaXRpdmVUeXBlTmFtZXMuaW5kZXhPZih0eXBlKSAhPT0gLTEsICJTaG91bGQg
aGF2ZSBiZWVuIG9wdGltaXplZCBvbiB0eXBlOiAiICsgdHlwZSk7CisgICAgZm9yICh2YXIgaiA9
IDA7IGogPCB0eXBlcy5sZW5ndGg7IGorKykgeworICAgICAgICBmdW5jKHZhbHVlc1tqXSk7Cisg
ICAgICAgIHR5cGVJbmZvID0gZmluZFR5cGVGb3JFeHByZXNzaW9uKGZ1bmMsICJ4Iik7IAorICAg
ICAgICBhc3NlcnQodHlwZUluZm8uaW5zdHJ1Y3Rpb25UeXBlU2V0LnByaW1pdGl2ZVR5cGVOYW1l
cy5pbmRleE9mKHR5cGVzW2pdKSAhPT0gLTEsICJTaG91bGQgaGF2ZSBzZWVuIHR5cGU6ICIgKyB0
eXBlc1tqXSArICIgIiArIGkgKyAiLCIgKyBqKTsKKyAgICB9Cit9Cg==
</data>
<flag name="review"
          id="263706"
          type_id="1"
          status="-"
          setter="fpizlo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>239016</attachid>
            <date>2014-10-01 02:55:51 -0700</date>
            <delta_ts>2014-10-01 02:58:18 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>29347</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTc0MTM5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY5IEBA
CisyMDE0LTA5LTMwICBTYWFtIEJhcmF0aSAgPHNhYW1iYXJhdGkxQGdtYWlsLmNvbT4KKworICAg
ICAgICBTdXBwb3J0IHRoZSB0eXBlIHByb2ZpbGVyIGluIHRoZSBERkcKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjcxMgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggaW1wbGVtZW50cyBv
cF9wcm9maWxlX3R5cGUgaW5zaWRlIHRoZSBERkcgYXMgdGhlIG5vZGU6IFByb2ZpbGVUeXBlLgor
ICAgICAgICBUaGUgREZHIHdpbGwgY29udmVydCB0aGUgUHJvZmlsZVR5cGUgbm9kZSBpbnRvIGEg
Q2hlY2sgbm9kZSBpbiB0aGUgY2FzZXMgd2hlcmUKKyAgICAgICAgcGFzc2luZyBhIHR5cGUgY2hl
Y2sgaXMgZXF1aXZhbGVudCB0byB3cml0aW5nIHRvIHRoZSBUeXBlUHJvZmlsZXJMb2cuIFRoaXMK
KyAgICAgICAgZ2l2ZXMgdGhlIERGRyB0aGUgcG90ZW50aWFsIHRvIG9wdGltaXplIG91dCBtdWx0
aXBsZSBQcm9maWxlVHlwZSBub2RlcyBpbnRvCisgICAgICAgIGEgc2luZ2xlIENoZWNrIG5vZGUu
CisKKyAgICAgICAgV2hlbiB0aGUgREZHIGRvZXNuJ3QgY29udmVydCBQcm9maWxlVHlwZSBpbnRv
IGEgQ2hlY2sgbm9kZSwgaXQgd2lsbCBnZW5lcmF0ZQorICAgICAgICB0aGUgc2FtZSBpbmxpbmUg
Y29kZSBhcyB0aGUgYmFzZWxpbmUgSklUIGRvZXMgZm9yIHdyaXRpbmcgYW4gZW50cnkgdG8gdGhl
CisgICAgICAgIFR5cGVQcm9maWxlckxvZy4KKworICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdElu
dGVycHJldGVySW5saW5lcy5oOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0
ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyk6CisgICAgICAgICogZGZnL0RG
R0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6
cGFyc2VCbG9jayk6CisgICAgICAgICogZGZnL0RGR0NhcGFiaWxpdGllcy5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6Y2FwYWJpbGl0eUxldmVsKToKKyAgICAgICAgKiBkZmcvREZHQ2xvYmJlcml6
ZS5oOgorICAgICAgICAoSlNDOjpERkc6OmNsb2JiZXJpemUpOgorICAgICAgICAqIGRmZy9ERkdE
b2VzR0MuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmRvZXNHQyk6CisgICAgICAgICogZGZnL0RG
R0RyaXZlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Y29tcGlsZUltcGwpOgorICAgICAgICAq
IGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjpm
aXh1cE5vZGUpOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6
Tm9kZTo6dHlwZUxvY2F0aW9uKToKKyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUuaDoKKyAgICAg
ICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMu
aDoKKyAgICAgICAgKiBkZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OlByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlOjpwcm9wYWdhdGUpOgor
ICAgICAgICAqIGRmZy9ERkdTYWZlVG9FeGVjdXRlLmg6CisgICAgICAgIChKU0M6OkRGRzo6c2Fm
ZVRvRXhlY3V0ZSk6CisgICAgICAgICogZGZnL0RGR1Nsb3dQYXRoR2VuZXJhdG9yLmg6CisgICAg
ICAgIChKU0M6OkRGRzo6Q2FsbE5vUmVzdWx0QW5kTm9Bcmd1bWVudHNTbG93UGF0aEdlbmVyYXRv
cjo6Q2FsbE5vUmVzdWx0QW5kTm9Bcmd1bWVudHNTbG93UGF0aEdlbmVyYXRvcik6CisgICAgICAg
IChKU0M6OkRGRzo6c2xvd1BhdGhDYWxsKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVK
SVQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2FsbE9wZXJhdGlvbik6
CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3Vs
YXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUpOgorICAgICAgICAqIHJ1bnRpbWUvVHlwZVByb2ZpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6
VHlwZVByb2ZpbGVyOjpsb2dUeXBlc0ZvclR5cGVMb2NhdGlvbik6CisgICAgICAgICogcnVudGlt
ZS9UeXBlU2V0LmNwcDoKKyAgICAgICAgKEpTQzo6VHlwZVNldDo6ZHVtcFR5cGVzKToKKyAgICAg
ICAgKEpTQzo6VHlwZVNldDo6ZG9lc1R5cGVDb25mb3JtVG8pOgorICAgICAgICBNYWtlIHRoaXMg
bWV0aG9kIHB1YmxpYyBzbyBvdGhlciBjbGFzc2VzIGNhbiByZWFzb24gYWJvdXQgdGhlIHR5cGVz
CisgICAgICAgIGEgVHlwZVNldCBoYXMgc2Vlbi4KKyAgICAgICAgKEpTQzo6VHlwZVNldDo6c2Vl
blR5cGVzKTogRGVsZXRlZC4KKyAgICAgICAgUmVuYW1lZCB0byBkdW1wVHlwZXMgc28gdGhlIG1l
dGhvZCBzZWVuVHlwZXMgY2FuIGJlIHVzZWQgYXMgYSBwdWJsaWMgZ2V0dGVyLgorICAgICAgICAo
SlNDOjpUeXBlU2V0OjpkdW1wU2VlblR5cGVzKTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1l
L1R5cGVTZXQuaDoKKyAgICAgICAgKEpTQzo6VHlwZVNldDo6c2VlblR5cGVzKToKKyAgICAgICAg
KiB0ZXN0cy90eXBlUHJvZmlsZXIvZGZnLWppdC1vcHRpbWl6YXRpb25zLmpzOiBBZGRlZC4KKyAg
ICAgICAgKHRpZXJVcFRvREZHKToKKyAgICAgICAgKGZ1bmNzKToKKyAgICAgICAgKC5yZXR1cm4p
OgorCiAyMDE0LTA5LTMwICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KIAogICAgICAg
ICBMYWJlbCBzb21lIGFzc2VydHMgYXMgaGF2aW5nIHNlY3VyaXR5IGltcGxpY2F0aW9ucy4KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGlu
ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0
SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDE3NDEzOSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5
KQpAQCAtMTk4NSw2ICsxOTg1LDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0
U3RhdGVUeQogICAgIGNhc2UgQnJlYWtwb2ludDoKICAgICBjYXNlIFByb2ZpbGVXaWxsQ2FsbDoK
ICAgICBjYXNlIFByb2ZpbGVEaWRDYWxsOgorICAgIGNhc2UgUHJvZmlsZVR5cGU6CiAgICAgY2Fz
ZSBQaGFudG9tOgogICAgIGNhc2UgSGFyZFBoYW50b206CiAgICAgY2FzZSBDb3VudEV4ZWN1dGlv
bjoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJz
ZXIuY3BwCShyZXZpc2lvbiAxNzQxMzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjg5Myw2ICsyODkzLDEyIEBA
IGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIE5F
WFRfT1BDT0RFKG9wX2luaXRfZ2xvYmFsX2NvbnN0KTsKICAgICAgICAgfQogCisgICAgICAgIGNh
c2Ugb3BfcHJvZmlsZV90eXBlOiB7CisgICAgICAgICAgICBOb2RlKiB2YWx1ZVRvUHJvZmlsZSA9
IGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpOwor
ICAgICAgICAgICAgYWRkVG9HcmFwaChQcm9maWxlVHlwZSwgT3BJbmZvKGN1cnJlbnRJbnN0cnVj
dGlvblsyXS51LmxvY2F0aW9uKSwgdmFsdWVUb1Byb2ZpbGUpOworICAgICAgICAgICAgTkVYVF9P
UENPREUob3BfcHJvZmlsZV90eXBlKTsKKyAgICAgICAgfQorCiAgICAgICAgIC8vID09PSBCbG9j
ayB0ZXJtaW5hdG9ycy4gPT09CiAKICAgICAgICAgY2FzZSBvcF9qbXA6IHsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAJKHJldmlzaW9uIDE3
NDEzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTIwLDYgKzEyMCw3IEBAIENhcGFiaWxpdHlMZXZlbCBjYXBhYmls
aXR5TGV2ZWwoT3Bjb2RlSUQKICAgICBjYXNlIG9wX2RlYnVnOgogICAgIGNhc2Ugb3BfcHJvZmls
ZV93aWxsX2NhbGw6CiAgICAgY2FzZSBvcF9wcm9maWxlX2RpZF9jYWxsOgorICAgIGNhc2Ugb3Bf
cHJvZmlsZV90eXBlOgogICAgIGNhc2Ugb3BfbW92OgogICAgIGNhc2Ugb3BfY2FwdHVyZWRfbW92
OgogICAgIGNhc2Ugb3BfY2hlY2tfaGFzX2luc3RhbmNlOgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHJldmlzaW9uIDE3NDEzOSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNzIs
NiArMjcyLDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAg
IGNhc2UgQnJlYWtwb2ludDoKICAgICBjYXNlIFByb2ZpbGVXaWxsQ2FsbDoKICAgICBjYXNlIFBy
b2ZpbGVEaWRDYWxsOgorICAgIGNhc2UgUHJvZmlsZVR5cGU6CiAgICAgY2FzZSBTdG9yZUJhcnJp
ZXI6CiAgICAgY2FzZSBTdG9yZUJhcnJpZXJXaXRoTnVsbENoZWNrOgogICAgIGNhc2UgUHV0QnlP
ZmZzZXRIaW50OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAko
cmV2aXNpb24gMTc0MTM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0Mu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQsNiArMTI0LDcgQEAgYm9vbCBkb2VzR0MoR3JhcGgm
IGdyYXBoLCBOb2RlKiBub2RlKQogICAgIGNhc2UgQnJlYWtwb2ludDoKICAgICBjYXNlIFByb2Zp
bGVXaWxsQ2FsbDoKICAgICBjYXNlIFByb2ZpbGVEaWRDYWxsOgorICAgIGNhc2UgUHJvZmlsZVR5
cGU6CiAgICAgY2FzZSBDaGVja0hhc0luc3RhbmNlOgogICAgIGNhc2UgSW5zdGFuY2VPZjoKICAg
ICBjYXNlIElzVW5kZWZpbmVkOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdE
cml2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJp
dmVyLmNwcAkocmV2aXNpb24gMTc0MTM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdEcml2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAi
SlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIk9wdGlvbnMuaCIKICNpbmNsdWRlICJTYW1wbGluZ1Rv
b2wuaCIKKyNpbmNsdWRlICJUeXBlUHJvZmlsZXJMb2cuaCIKICNpbmNsdWRlIDx3dGYvQXRvbWlj
cy5oPgogCiAjaWYgRU5BQkxFKEZUTF9KSVQpCkBAIC05MSw2ICs5Miw5IEBAIHN0YXRpYyBDb21w
aWxhdGlvblJlc3VsdCBjb21waWxlSW1wbCgKICAgICAKICAgICBpZiAoQ2FsbEVkZ2VMb2c6Omlz
RW5hYmxlZCgpKQogICAgICAgICB2bS5lbnN1cmVDYWxsRWRnZUxvZygpLnByb2Nlc3NMb2coKTsK
KworICAgIGlmICh2bS50eXBlUHJvZmlsZXIoKSkKKyAgICAgICAgdm0udHlwZVByb2ZpbGVyTG9n
KCktPnByb2Nlc3NMb2dFbnRyaWVzKEFTQ0lJTGl0ZXJhbCgiUHJlcGFyaW5nIGZvciBERkcgY29t
cGlsYXRpb24uIikpOwogICAgIAogICAgIFJlZlB0cjxQbGFuPiBwbGFuID0gYWRvcHRSZWYoCiAg
ICAgICAgIG5ldyBQbGFuKGNvZGVCbG9jaywgcHJvZmlsZWRERkdDb2RlQmxvY2ssIG1vZGUsIG9z
ckVudHJ5Qnl0ZWNvZGVJbmRleCwgbXVzdEhhbmRsZVZhbHVlcykpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCShyZXZpc2lvbiAxNzQxMzkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiREZHUHJlZGljdGlvblByb3BhZ2F0aW9u
UGhhc2UuaCIKICNpbmNsdWRlICJERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmgiCiAjaW5jbHVk
ZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIlR5cGVMb2NhdGlvbi5oIgogCiBuYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKQEAgLTExMTIsNiArMTExMywzOCBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgZml4RWRnZTxLbm93bkludDMyVXNlPihub2RlLT5jaGlsZDEoKSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQorICAgICAgICBjYXNlIFByb2ZpbGVUeXBlOiB7Cisg
ICAgICAgICAgICAvLyBXZSB3YW50IHRvIGluc2VydCB0eXBlIGNoZWNrcyBiYXNlZCBvbiB0aGUg
aW5zdHJ1Y3Rpb25UeXBlU2V0IG9mIHRoZSBUeXBlTG9jYXRpb24sIG5vdCB0aGUgZ2xvYmFsVHlw
ZVNldC4KKyAgICAgICAgICAgIC8vIEJlY2F1c2UgdGhlIGluc3RydWN0aW9uVHlwZVNldCBpcyBj
b250YWluZWQgaW4gZ2xvYmFsVHlwZVNldCwgaWYgd2UgcHJvZHVjZSBhIHR5cGUgY2hlY2sgZm9y
CisgICAgICAgICAgICAvLyB0eXBlIFQgZm9yIHRoZSBpbnN0cnVjdGlvblR5cGVTZXQsIHRoZSBn
bG9iYWwgdHlwZSBzZXQgbXVzdCBhbHNvIGhhdmUgaW5mb3JtYXRpb24gZm9yIHR5cGUgVC4KKyAg
ICAgICAgICAgIC8vIFNvIGlmIGl0IHRoZSB0eXBlIGNoZWNrIHN1Y2NlZWRzIGZvciB0eXBlIFQg
aW4gdGhlIGluc3RydWN0aW9uVHlwZVNldCwgYSB0eXBlIGNoZWNrIGZvciB0eXBlIFQgCisgICAg
ICAgICAgICAvLyBpbiB0aGUgZ2xvYmFsVHlwZVNldCB3b3VsZCd2ZSBhbHNvIHN1Y2NlZWRlZC4K
KyAgICAgICAgICAgIC8vIChUaGUgb3RoZXIgZGlyZWN0aW9uIGRvZXMgbm90IGhvbGQgaW4gZ2Vu
ZXJhbCkuCisKKyAgICAgICAgICAgIFJlZlB0cjxUeXBlU2V0PiB0eXBlU2V0ID0gbm9kZS0+dHlw
ZUxvY2F0aW9uKCktPm1faW5zdHJ1Y3Rpb25UeXBlU2V0OworICAgICAgICAgICAgdWludDMyX3Qg
c2VlblR5cGVzID0gdHlwZVNldC0+c2VlblR5cGVzKCk7CisgICAgICAgICAgICBpZiAodHlwZVNl
dC0+ZG9lc1R5cGVDb25mb3JtVG8oVHlwZU1hY2hpbmVJbnQpKSB7CisgICAgICAgICAgICAgICAg
bm9kZS0+Y29udmVydFRvQ2hlY2soKTsKKyAgICAgICAgICAgICAgICBpZiAoaXNJbnQzMlNwZWN1
bGF0aW9uKG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCkpKTsKKyAgICAgICAgICAgICAgICAg
ICAgZml4RWRnZTxJbnQzMlVzZT4obm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICAgICAgZml4RWRnZTxNYWNoaW5lSW50VXNlPihub2RlLT5jaGls
ZDEoKSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVTZXQtPmRvZXNUeXBlQ29uZm9ybVRv
KFR5cGVOdW1iZXIgfCBUeXBlTWFjaGluZUludCkpIHsKKyAgICAgICAgICAgICAgICBub2RlLT5j
b252ZXJ0VG9DaGVjaygpOworICAgICAgICAgICAgICAgIGZpeEVkZ2U8TnVtYmVyVXNlPihub2Rl
LT5jaGlsZDEoKSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVTZXQtPmRvZXNUeXBlQ29u
Zm9ybVRvKFR5cGVTdHJpbmcpKSB7CisgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvQ2hl
Y2soKTsKKyAgICAgICAgICAgICAgICBmaXhFZGdlPFN0cmluZ1VzZT4obm9kZS0+Y2hpbGQxKCkp
OworICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlU2V0LT5kb2VzVHlwZUNvbmZvcm1UbyhUeXBl
Qm9vbGVhbikpIHsKKyAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9DaGVjaygpOworICAg
ICAgICAgICAgICAgIGZpeEVkZ2U8Qm9vbGVhblVzZT4obm9kZS0+Y2hpbGQxKCkpOworICAgICAg
ICAgICAgfSBlbHNlIGlmICh0eXBlU2V0LT5kb2VzVHlwZUNvbmZvcm1UbyhUeXBlVW5kZWZpbmVk
IHwgVHlwZU51bGwpICYmIChzZWVuVHlwZXMgJiBUeXBlVW5kZWZpbmVkKSAmJiAoc2VlblR5cGVz
ICYgVHlwZU51bGwpKSB7CisgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvQ2hlY2soKTsK
KyAgICAgICAgICAgICAgICBmaXhFZGdlPE90aGVyVXNlPihub2RlLT5jaGlsZDEoKSk7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgICAgICAK
ICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgICAgIC8vIEhhdmUgdGhlc2Ugbm8tb3AgY2FzZXMg
aGVyZSB0byBlbnN1cmUgdGhhdCBub2JvZHkgZm9yZ2V0cyB0byBhZGQgaGFuZGxlcnMgZm9yIG5l
dyBvcGNvZGVzLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9u
IDE3NDEzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC00OCw2ICs0OCw3IEBACiAjaW5jbHVkZSAiUHV0QnlJZFZhcmlhbnQuaCIKICNp
bmNsdWRlICJTcGVjdWxhdGVkVHlwZS5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZVNldC5oIgorI2lu
Y2x1ZGUgIlR5cGVMb2NhdGlvbi5oIgogI2luY2x1ZGUgIlZhbHVlUHJvZmlsZS5oIgogI2luY2x1
ZGUgPHd0Zi9MaXN0RHVtcC5oPgogCkBAIC0xNzczLDYgKzE3NzQsMTEgQEAgc3RydWN0IE5vZGUg
ewogICAgIHsKICAgICAgICAgcmV0dXJuIGNhblNwZWN1bGF0ZUludDUyKHNvdXJjZUZvcihwYXNz
KSk7CiAgICAgfQorCisgICAgVHlwZUxvY2F0aW9uKiB0eXBlTG9jYXRpb24oKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VHlwZUxvY2F0aW9uKj4obV9vcEluZm8pOwor
ICAgIH0KICAgICAKICAgICB2b2lkIGR1bXBDaGlsZHJlbihQcmludFN0cmVhbSYgb3V0KQogICAg
IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9u
IDE3NDEzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMjU0LDYgKzI1NCw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKICAgICBtYWNybyhOZXdTdHJpbmdPYmplY3QsIE5vZGVSZXN1bHRKUykgXAogICAgIG1h
Y3JvKE1ha2VSb3BlLCBOb2RlUmVzdWx0SlMpIFwKICAgICBtYWNybyhJbiwgTm9kZVJlc3VsdEJv
b2xlYW4gfCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUNsb2JiZXJzV29ybGQpIFwKKyAgICBtYWNy
byhQcm9maWxlVHlwZSwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIFwKICAgICAvKiBOb2RlcyB1
c2VkIGZvciBhY3RpdmF0aW9ucy4gQWN0aXZhdGlvbiBzdXBwb3J0IHdvcmtzIGJ5IGhhdmluZyBp
dCBhbmNob3JlZCBhdCAqL1wKICAgICAvKiBlcGlsZ291ZXMgdmlhIFRlYXJPZmZBY3RpdmF0aW9u
LCBhbmQgYWxsIENyZWF0ZUFjdGl2YXRpb24gbm9kZXMga2VwdCBhbGl2ZSBieSAqL1wKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24g
MTc0MTM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTMsNiArNTMsNyBAQAogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIK
ICNpbmNsdWRlICJSZXBhdGNoLmgiCiAjaW5jbHVkZSAiU3RyaW5nQ29uc3RydWN0b3IuaCIKKyNp
bmNsdWRlICJUeXBlUHJvZmlsZXJMb2cuaCIKICNpbmNsdWRlICJUeXBlZEFycmF5SW5saW5lcy5o
IgogI2luY2x1ZGUgPHd0Zi9JbmxpbmVBU00uaD4KIApAQCAtMTA2Miw2ICsxMDYzLDExIEBAIGlu
dDY0X3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db252ZXJ0RG8KICAgICByZXR1cm4gdHJ5Q29u
dmVydFRvSW50NTIodmFsdWUpOwogfQogCit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHJv
Y2Vzc1R5cGVQcm9maWxlckxvZ0RGRyhFeGVjU3RhdGUqIGV4ZWMpIAoreworICAgIGV4ZWMtPnZt
KCkudHlwZVByb2ZpbGVyTG9nKCktPnByb2Nlc3NMb2dFbnRyaWVzKEFTQ0lJTGl0ZXJhbCgiTG9n
IEZ1bGwsIGNhbGxlZCBmcm9tIGluc2lkZSBERkcuIikpOworfQorCiBzaXplX3QgSklUX09QRVJB
VElPTiBkZmdDb252ZXJ0SlNWYWx1ZVRvSW50MzIoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNW
YWx1ZSB2YWx1ZSkKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAxNzQxMzkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpA
QCAtMTMwLDYgKzEzMCw4IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Ob3RpZnlXcml0
ZSgKIGludDY0X3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db252ZXJ0Qm94ZWREb3VibGVUb0lu
dDUyKEVuY29kZWRKU1ZhbHVlKTsKIGludDY0X3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db252
ZXJ0RG91YmxlVG9JbnQ1Mihkb3VibGUpOwogCit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
UHJvY2Vzc1R5cGVQcm9maWxlckxvZ0RGRyhFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7CisKIC8v
IFRoZXNlIG9wZXJhdGlvbnMgaW1wbGVtZW50IHRoZSBpbXBsaWNpdGx5IGNhbGxlZCBUb0ludDMy
IGFuZCBUb0Jvb2xlYW4gY29udmVyc2lvbnMgZnJvbSBFUzUuCiAvLyBUaGlzIGNvbnZlcnNpb24g
cmV0dXJucyBhbiBpbnQzMl90IHdpdGhpbiBhIHNpemVfdCBzdWNoIHRoYXQgdGhlIHZhbHVlIGlz
IHplcm8gZXh0ZW5kZWQgdG8gZmlsbCB0aGUgcmVnaXN0ZXIuCiBzaXplX3QgSklUX09QRVJBVElP
TiBkZmdDb252ZXJ0SlNWYWx1ZVRvSW50MzIoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUpIFdU
Rl9JTlRFUk5BTDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlv
blByb3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNzQxMzkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBo
YXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQ1LDYgKzY0NSw3IEBAIHByaXZhdGU6CiAgICAg
ICAgIGNhc2UgQnJlYWtwb2ludDoKICAgICAgICAgY2FzZSBQcm9maWxlV2lsbENhbGw6CiAgICAg
ICAgIGNhc2UgUHJvZmlsZURpZENhbGw6CisgICAgICAgIGNhc2UgUHJvZmlsZVR5cGU6CiAgICAg
ICAgIGNhc2UgQ2hlY2tIYXNJbnN0YW5jZToKICAgICAgICAgY2FzZSBUaHJvd1JlZmVyZW5jZUVy
cm9yOgogICAgICAgICBjYXNlIEZvcmNlT1NSRXhpdDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCShyZXZpc2lvbiAxNzQxMzkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMTk4LDYgKzE5OCw3IEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYg
c3QKICAgICBjYXNlIEJyZWFrcG9pbnQ6CiAgICAgY2FzZSBQcm9maWxlV2lsbENhbGw6CiAgICAg
Y2FzZSBQcm9maWxlRGlkQ2FsbDoKKyAgICBjYXNlIFByb2ZpbGVUeXBlOgogICAgIGNhc2UgQ2hl
Y2tIYXNJbnN0YW5jZToKICAgICBjYXNlIEluc3RhbmNlT2Y6CiAgICAgY2FzZSBJc1VuZGVmaW5l
ZDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2xvd1BhdGhHZW5lcmF0b3Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nsb3dQYXRoR2Vu
ZXJhdG9yLmgJKHJldmlzaW9uIDE3NDEzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU2xvd1BhdGhHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMTQxLDYgKzE0MSwyNyBA
QCBwcm90ZWN0ZWQ6CiAgICAgVmVjdG9yPFNpbGVudFJlZ2lzdGVyU2F2ZVBsYW4sIDI+IG1fcGxh
bnM7CiB9OwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBKdW1wVHlwZSwgdHlwZW5hbWUgRnVuY3Rpb25U
eXBlPgorY2xhc3MgQ2FsbE5vUmVzdWx0QW5kTm9Bcmd1bWVudHNTbG93UGF0aEdlbmVyYXRvcgor
ICAgIDogcHVibGljIENhbGxTbG93UGF0aEdlbmVyYXRvcjxKdW1wVHlwZSwgRnVuY3Rpb25UeXBl
LCBHUFJSZWc+IHsKK3B1YmxpYzoKKyAgICBDYWxsTm9SZXN1bHRBbmROb0FyZ3VtZW50c1Nsb3dQ
YXRoR2VuZXJhdG9yKAorICAgICAgICBKdW1wVHlwZSBmcm9tLCBTcGVjdWxhdGl2ZUpJVCogaml0
LCBGdW5jdGlvblR5cGUgZnVuY3Rpb24sCisgICAgICAgIFNwaWxsUmVnaXN0ZXJzTW9kZSBzcGls
bE1vZGUpCisgICAgICAgIDogQ2FsbFNsb3dQYXRoR2VuZXJhdG9yPEp1bXBUeXBlLCBGdW5jdGlv
blR5cGUsIEdQUlJlZz4oCisgICAgICAgICAgICBmcm9tLCBqaXQsIGZ1bmN0aW9uLCBzcGlsbE1v
ZGUsIEludmFsaWRHUFJSZWcpCisgICAgeworICAgIH0KKyAgICAKK3Byb3RlY3RlZDoKKyAgICB2
aXJ0dWFsIHZvaWQgZ2VuZXJhdGVJbnRlcm5hbChTcGVjdWxhdGl2ZUpJVCogaml0KSBvdmVycmlk
ZQorICAgIHsKKyAgICAgICAgdGhpcy0+c2V0VXAoaml0KTsKKyAgICAgICAgdGhpcy0+cmVjb3Jk
Q2FsbChqaXQtPmNhbGxPcGVyYXRpb24odGhpcy0+bV9mdW5jdGlvbikpOworICAgICAgICB0aGlz
LT50ZWFyRG93bihqaXQpOworICAgIH0KK307CisKIHRlbXBsYXRlPHR5cGVuYW1lIEp1bXBUeXBl
LCB0eXBlbmFtZSBGdW5jdGlvblR5cGUsIHR5cGVuYW1lIFJlc3VsdFR5cGU+CiBjbGFzcyBDYWxs
UmVzdWx0QW5kTm9Bcmd1bWVudHNTbG93UGF0aEdlbmVyYXRvcgogICAgIDogcHVibGljIENhbGxT
bG93UGF0aEdlbmVyYXRvcjxKdW1wVHlwZSwgRnVuY3Rpb25UeXBlLCBSZXN1bHRUeXBlPiB7CkBA
IC0zMjgsNiArMzQ5LDE2IEBAIHByb3RlY3RlZDogICAgCiAgICAgQXJndW1lbnRUeXBlNSBtX2Fy
Z3VtZW50NTsKIH07CiAKK3RlbXBsYXRlPHR5cGVuYW1lIEp1bXBUeXBlLCB0eXBlbmFtZSBGdW5j
dGlvblR5cGU+CitpbmxpbmUgUGFzc093blB0cjxTbG93UGF0aEdlbmVyYXRvcj4gc2xvd1BhdGhD
YWxsKAorICAgIEp1bXBUeXBlIGZyb20sIFNwZWN1bGF0aXZlSklUKiBqaXQsIEZ1bmN0aW9uVHlw
ZSBmdW5jdGlvbiwgU3BpbGxSZWdpc3RlcnNNb2RlIHNwaWxsTW9kZSA9IE5lZWRUb1NwaWxsKQor
eworICAgIHJldHVybiBhZG9wdFB0cigKKyAgICAgICAgbmV3IENhbGxOb1Jlc3VsdEFuZE5vQXJn
dW1lbnRzU2xvd1BhdGhHZW5lcmF0b3I8CisgICAgICAgICAgICBKdW1wVHlwZSwgRnVuY3Rpb25U
eXBlPigKKyAgICAgICAgICAgICAgICBmcm9tLCBqaXQsIGZ1bmN0aW9uLCBzcGlsbE1vZGUpKTsK
K30KKwogdGVtcGxhdGU8dHlwZW5hbWUgSnVtcFR5cGUsIHR5cGVuYW1lIEZ1bmN0aW9uVHlwZSwg
dHlwZW5hbWUgUmVzdWx0VHlwZT4KIGlubGluZSBQYXNzT3duUHRyPFNsb3dQYXRoR2VuZXJhdG9y
PiBzbG93UGF0aENhbGwoCiAgICAgSnVtcFR5cGUgZnJvbSwgU3BlY3VsYXRpdmVKSVQqIGppdCwg
RnVuY3Rpb25UeXBlIGZ1bmN0aW9uLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAxNzQxMzkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSAiSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yLmgiCiAjaW5jbHVkZSAiT2JqZWN0UHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiSlND
SW5saW5lcy5oIgorI2luY2x1ZGUgIlR5cGVQcm9maWxlckxvZy5oIgogCiBuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIERGRyB7CiAKQEAgLTQ4NTYsNiArNDg1Nyw1MSBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0R1BS
LCBub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQorICAgIGNhc2UgUHJvZmlsZVR5cGU6IHsK
KyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAg
ICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDEodGhpcyk7CisgICAgICAgIEdQUlRlbXBvcmFyeSBz
Y3JhdGNoMih0aGlzKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gzKHRoaXMpOworCisg
ICAgICAgIEdQUlJlZyBzY3JhdGNoMUdQUiA9IHNjcmF0Y2gxLmdwcigpOworICAgICAgICBHUFJS
ZWcgc2NyYXRjaDJHUFIgPSBzY3JhdGNoMi5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gz
R1BSID0gc2NyYXRjaDMuZ3ByKCk7CisKKyAgICAgICAgLy8gTG9hZCB0aGUgVHlwZVByb2ZpbGVy
TG9nIGludG8gU2NyYXRjaDIuCisgICAgICAgIFR5cGVQcm9maWxlckxvZyogY2FjaGVkVHlwZVBy
b2ZpbGVyTG9nID0gbV9qaXQudm0oKS0+dHlwZVByb2ZpbGVyTG9nKCk7CisgICAgICAgIG1faml0
Lm1vdmUoVHJ1c3RlZEltbVB0cihjYWNoZWRUeXBlUHJvZmlsZXJMb2cpLCBzY3JhdGNoMkdQUik7
CisKKyAgICAgICAgLy8gTG9hZCB0aGUgbmV4dCBMb2dFbnRyeSBpbnRvIFNjcmF0Y2gxLgorICAg
ICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2gyR1BSLCBU
eXBlUHJvZmlsZXJMb2c6OmN1cnJlbnRMb2dFbnRyeU9mZnNldCgpKSwgc2NyYXRjaDFHUFIpOwor
CisgICAgICAgIC8vIFN0b3JlIHRoZSBKU1ZhbHVlIG9udG8gdGhlIGxvZyBlbnRyeS4KKyAgICAg
ICAgbV9qaXQuc3RvcmUzMih2YWx1ZS50YWdHUFIoKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
c2NyYXRjaDFHUFIsIFR5cGVQcm9maWxlckxvZzo6TG9nRW50cnk6OnZhbHVlT2Zmc2V0KCkgKyBP
QkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSkpOworICAgICAgICBtX2ppdC5z
dG9yZTMyKHZhbHVlLnBheWxvYWRHUFIoKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRj
aDFHUFIsIFR5cGVQcm9maWxlckxvZzo6TG9nRW50cnk6OnZhbHVlT2Zmc2V0KCkgKyBPQkpFQ1Rf
T0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpKTsKKworICAgICAgICAvLyBTdG9y
ZSB0aGUgc3RydWN0dXJlSUQgb2YgdGhlIGNlbGwgaWYgdmFsdWVHUFIgaXMgYSBjZWxsLCBvdGhl
cndpc2UsIHN0b3JlIDAgb24gdGhlIGxvZyBlbnRyeS4KKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgaXNOb3RDZWxsID0gYnJhbmNoTm90Q2VsbCh2YWx1ZS5qc1ZhbHVlUmVncygpKTsKKyAg
ICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHZhbHVlLnBheWxvYWRH
UFIoKSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaDNHUFIpOworICAgICAg
ICBtX2ppdC5zdG9yZTMyKHNjcmF0Y2gzR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3Jh
dGNoMUdQUiwgVHlwZVByb2ZpbGVyTG9nOjpMb2dFbnRyeTo6c3RydWN0dXJlSURPZmZzZXQoKSkp
OworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBza2lwSXNDZWxsID0gbV9qaXQuanVtcCgp
OworICAgICAgICBpc05vdENlbGwubGluaygmbV9qaXQpOworICAgICAgICBtX2ppdC5zdG9yZTMy
KFRydXN0ZWRJbW0zMigwKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaDFHUFIsIFR5
cGVQcm9maWxlckxvZzo6TG9nRW50cnk6OnN0cnVjdHVyZUlET2Zmc2V0KCkpKTsKKyAgICAgICAg
c2tpcElzQ2VsbC5saW5rKCZtX2ppdCk7CisKKyAgICAgICAgLy8gU3RvcmUgdGhlIHR5cGVMb2Nh
dGlvbiBvbiB0aGUgbG9nIGVudHJ5LgorICAgICAgICBUeXBlTG9jYXRpb24qIGNhY2hlZFR5cGVM
b2NhdGlvbiA9IG5vZGUtPnR5cGVMb2NhdGlvbigpOworICAgICAgICBtX2ppdC5tb3ZlKFRydXN0
ZWRJbW1QdHIoY2FjaGVkVHlwZUxvY2F0aW9uKSwgc2NyYXRjaDNHUFIpOworICAgICAgICBtX2pp
dC5zdG9yZVB0cihzY3JhdGNoM0dQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaDFH
UFIsIFR5cGVQcm9maWxlckxvZzo6TG9nRW50cnk6OmxvY2F0aW9uT2Zmc2V0KCkpKTsKKworICAg
ICAgICAvLyBJbmNyZW1lbnQgdGhlIGN1cnJlbnQgbG9nIGVudHJ5LgorICAgICAgICBtX2ppdC5h
ZGRQdHIoVHJ1c3RlZEltbTMyKHNpemVvZihUeXBlUHJvZmlsZXJMb2c6OkxvZ0VudHJ5KSksIHNj
cmF0Y2gxR1BSKTsKKyAgICAgICAgbV9qaXQuc3RvcmVQdHIoc2NyYXRjaDFHUFIsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2gyR1BSLCBUeXBlUHJvZmlsZXJMb2c6OmN1cnJlbnRMb2dF
bnRyeU9mZnNldCgpKSk7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGNsZWFyTG9nID0g
bV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgc2NyYXRjaDFHUFIsIFRydXN0
ZWRJbW1QdHIoY2FjaGVkVHlwZVByb2ZpbGVyTG9nLT5sb2dFbmRQdHIoKSkpOworICAgICAgICBh
ZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgICAgIHNsb3dQYXRoQ2FsbChjbGVhckxvZywg
dGhpcywgb3BlcmF0aW9uUHJvY2Vzc1R5cGVQcm9maWxlckxvZ0RGRykpOworCisgICAgICAgIG5v
UmVzdWx0KG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CiAKICAgICBjYXNlIEZvcmNlT1NS
RXhpdDogewogICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihJbmFkZXF1YXRl
Q292ZXJhZ2UsIEpTVmFsdWVSZWdzKCksIDApOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAxNzQxMzkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSAiSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yLmgiCiAjaW5jbHVkZSAiT2JqZWN0UHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiU3BpbGxS
ZWdpc3RlcnNNb2RlLmgiCisjaW5jbHVkZSAiVHlwZVByb2ZpbGVyTG9nLmgiCiAKIG5hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIApAQCAtNDkwMiw2ICs0OTAzLDc1IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgY2VsbFJlc3VsdChyZXN1
bHRHUFIsIG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CisgICAgY2FzZSBQcm9maWxlVHlw
ZTogeworICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7
CisgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMSh0aGlzKTsKKyAgICAgICAgR1BSVGVtcG9y
YXJ5IHNjcmF0Y2gyKHRoaXMpOworICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDModGhpcyk7
CisKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gxR1BSID0gc2NyYXRjaDEuZ3ByKCk7CisgICAgICAg
IEdQUlJlZyBzY3JhdGNoMkdQUiA9IHNjcmF0Y2gyLmdwcigpOworICAgICAgICBHUFJSZWcgc2Ny
YXRjaDNHUFIgPSBzY3JhdGNoMy5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFs
dWUuZ3ByKCk7CisKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGp1bXBUb0VuZDsK
KworICAgICAgICBUeXBlTG9jYXRpb24qIGNhY2hlZFR5cGVMb2NhdGlvbiA9IG5vZGUtPnR5cGVM
b2NhdGlvbigpOworICAgICAgICAvLyBDb21waWxlIGluIGEgcHJlZGljdGl2ZSB0eXBlIGNoZWNr
LCBpZiBwb3NzaWJsZSwgdG8gc2VlIGlmIHdlIGNhbiBza2lwIHdyaXRpbmcgdG8gdGhlIGxvZy4K
KyAgICAgICAgLy8gVGhlc2UgdHlwZWNoZWNrcyBhcmUgaW5saW5lZCB0byBtYXRjaCB0aG9zZSBv
ZiB0aGUgNjQtYml0IEpTVmFsdWUgdHlwZSBjaGVja3MuCisgICAgICAgIGlmIChjYWNoZWRUeXBl
TG9jYXRpb24tPm1fbGFzdFNlZW5UeXBlID09IFR5cGVVbmRlZmluZWQpCisgICAgICAgICAgICBq
dW1wVG9FbmQuYXBwZW5kKG1faml0LmJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgdmFs
dWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpKSkpOworICAgICAgICBlbHNlIGlmIChjYWNoZWRUeXBlTG9jYXRpb24tPm1fbGFz
dFNlZW5UeXBlID09IFR5cGVOdWxsKQorICAgICAgICAgICAganVtcFRvRW5kLmFwcGVuZChtX2pp
dC5icmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSk7CisgICAgICAgIGVs
c2UgaWYgKGNhY2hlZFR5cGVMb2NhdGlvbi0+bV9sYXN0U2VlblR5cGUgPT0gVHlwZUJvb2xlYW4p
IHsKKyAgICAgICAgICAgIG1faml0Lm1vdmUodmFsdWVHUFIsIHNjcmF0Y2gyR1BSKTsKKyAgICAg
ICAgICAgIG1faml0LmFuZDY0KFRydXN0ZWRJbW0zMih+MSksIHNjcmF0Y2gyR1BSKTsKKyAgICAg
ICAgICAgIGp1bXBUb0VuZC5hcHBlbmQobV9qaXQuYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkVx
dWFsLCBzY3JhdGNoMkdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChWYWx1ZUZhbHNl
KSkpOworICAgICAgICB9IGVsc2UgaWYgKGNhY2hlZFR5cGVMb2NhdGlvbi0+bV9sYXN0U2VlblR5
cGUgPT0gVHlwZU1hY2hpbmVJbnQpCisgICAgICAgICAgICBqdW1wVG9FbmQuYXBwZW5kKG1faml0
LmJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHZhbHVlR1BSLCBHUFJJbmZv
Ojp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKKyAgICAgICAgZWxzZSBpZiAoY2FjaGVkVHlwZUxv
Y2F0aW9uLT5tX2xhc3RTZWVuVHlwZSA9PSBUeXBlTnVtYmVyKQorICAgICAgICAgICAganVtcFRv
RW5kLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHZh
bHVlR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKKyAgICAgICAgZWxzZSBp
ZiAoY2FjaGVkVHlwZUxvY2F0aW9uLT5tX2xhc3RTZWVuVHlwZSA9PSBUeXBlU3RyaW5nKSB7Cisg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBpc05vdENlbGwgPSBicmFuY2hOb3RDZWxs
KEpTVmFsdWVSZWdzKHZhbHVlR1BSKSk7CisgICAgICAgICAgICBqdW1wVG9FbmQuYXBwZW5kKG1f
aml0LmJyYW5jaDgoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyh2YWx1ZUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihT
dHJpbmdUeXBlKSkpOworICAgICAgICAgICAgaXNOb3RDZWxsLmxpbmsoJm1faml0KTsKKyAgICAg
ICAgfQorCisgICAgICAgIC8vIExvYWQgdGhlIFR5cGVQcm9maWxlckxvZyBpbnRvIFNjcmF0Y2gy
LgorICAgICAgICBUeXBlUHJvZmlsZXJMb2cqIGNhY2hlZFR5cGVQcm9maWxlckxvZyA9IG1faml0
LnZtKCktPnR5cGVQcm9maWxlckxvZygpOworICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1Q
dHIoY2FjaGVkVHlwZVByb2ZpbGVyTG9nKSwgc2NyYXRjaDJHUFIpOworCisgICAgICAgIC8vIExv
YWQgdGhlIG5leHQgTG9nRW50cnkgaW50byBTY3JhdGNoMS4KKyAgICAgICAgbV9qaXQubG9hZFB0
cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoMkdQUiwgVHlwZVByb2ZpbGVyTG9nOjpj
dXJyZW50TG9nRW50cnlPZmZzZXQoKSksIHNjcmF0Y2gxR1BSKTsKKworICAgICAgICAvLyBTdG9y
ZSB0aGUgSlNWYWx1ZSBvbnRvIHRoZSBsb2cgZW50cnkuCisgICAgICAgIG1faml0LnN0b3JlNjQo
dmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2gxR1BSLCBUeXBlUHJvZmls
ZXJMb2c6OkxvZ0VudHJ5Ojp2YWx1ZU9mZnNldCgpKSk7CisKKyAgICAgICAgLy8gU3RvcmUgdGhl
IHN0cnVjdHVyZUlEIG9mIHRoZSBjZWxsIGlmIHZhbHVlR1BSIGlzIGEgY2VsbCwgb3RoZXJ3aXNl
LCBzdG9yZSAwIG9uIHRoZSBsb2cgZW50cnkuCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1w
IGlzTm90Q2VsbCA9IGJyYW5jaE5vdENlbGwoSlNWYWx1ZVJlZ3ModmFsdWVHUFIpKTsKKyAgICAg
ICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHZhbHVlR1BSLCBKU0NlbGw6
OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoM0dQUik7CisgICAgICAgIG1faml0LnN0b3Jl
MzIoc2NyYXRjaDNHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2gxR1BSLCBUeXBl
UHJvZmlsZXJMb2c6OkxvZ0VudHJ5OjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSk7CisgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wIHNraXBJc0NlbGwgPSBtX2ppdC5qdW1wKCk7CisgICAgICAgIGlz
Tm90Q2VsbC5saW5rKCZtX2ppdCk7CisgICAgICAgIG1faml0LnN0b3JlMzIoVHJ1c3RlZEltbTMy
KDApLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoMUdQUiwgVHlwZVByb2ZpbGVyTG9n
OjpMb2dFbnRyeTo6c3RydWN0dXJlSURPZmZzZXQoKSkpOworICAgICAgICBza2lwSXNDZWxsLmxp
bmsoJm1faml0KTsKKworICAgICAgICAvLyBTdG9yZSB0aGUgdHlwZUxvY2F0aW9uIG9uIHRoZSBs
b2cgZW50cnkuCisgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cihjYWNoZWRUeXBlTG9j
YXRpb24pLCBzY3JhdGNoM0dQUik7CisgICAgICAgIG1faml0LnN0b3JlUHRyKHNjcmF0Y2gzR1BS
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoMUdQUiwgVHlwZVByb2ZpbGVyTG9nOjpM
b2dFbnRyeTo6bG9jYXRpb25PZmZzZXQoKSkpOworCisgICAgICAgIC8vIEluY3JlbWVudCB0aGUg
Y3VycmVudCBsb2cgZW50cnkuCisgICAgICAgIG1faml0LmFkZFB0cihUcnVzdGVkSW1tMzIoc2l6
ZW9mKFR5cGVQcm9maWxlckxvZzo6TG9nRW50cnkpKSwgc2NyYXRjaDFHUFIpOworICAgICAgICBt
X2ppdC5zdG9yZVB0cihzY3JhdGNoMUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRj
aDJHUFIsIFR5cGVQcm9maWxlckxvZzo6Y3VycmVudExvZ0VudHJ5T2Zmc2V0KCkpKTsKKyAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgY2xlYXJMb2cgPSBtX2ppdC5icmFuY2hQdHIoTWFjcm9B
c3NlbWJsZXI6OkVxdWFsLCBzY3JhdGNoMUdQUiwgVHJ1c3RlZEltbVB0cihjYWNoZWRUeXBlUHJv
ZmlsZXJMb2ctPmxvZ0VuZFB0cigpKSk7CisgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAor
ICAgICAgICAgICAgc2xvd1BhdGhDYWxsKGNsZWFyTG9nLCB0aGlzLCBvcGVyYXRpb25Qcm9jZXNz
VHlwZVByb2ZpbGVyTG9nREZHKSk7CisKKyAgICAgICAganVtcFRvRW5kLmxpbmsoJm1faml0KTsK
KworICAgICAgICBub1Jlc3VsdChub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQogCiAjaWYg
RU5BQkxFKEZUTF9KSVQpICAgICAgICAKICAgICBjYXNlIENoZWNrVGllclVwSW5Mb29wOiB7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShy
ZXZpc2lvbiAxNzQxMzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTk0NCw2ICs5NDQsMTEgQEAgcHVibGljOgogICAg
IC8vIG1hY2hpbmUgcmVnaXN0ZXJzLCBhbmQgZGVsZWdhdGUgdGhlIGNhbGxpbmcgY29udmVudGlv
biBzcGVjaWZpYwogICAgIC8vIGRlY2lzaW9uIGFzIHRvIGhvdyB0byBmaWxsIHRoZSByZWdzaXRl
cnMgdG8gc2V0dXBBcmd1bWVudHMqIG1ldGhvZHMuCiAKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBj
YWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0Ugb3BlcmF0aW9uKQorICAgIHsKKyAgICAgICAg
bV9qaXQuc2V0dXBBcmd1bWVudHNFeGVjU3RhdGUoKTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENh
bGwob3BlcmF0aW9uKTsKKyAgICB9CiAgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlv
bihQX0pJVE9wZXJhdGlvbl9FIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCkKICAgICB7CiAgICAg
ICAgIG1faml0LnNldHVwQXJndW1lbnRzRXhlY1N0YXRlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9UeXBlUHJvZmlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVQcm9maWxlci5jcHAJKHJldmlzaW9uIDE3NDEzOSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVQcm9maWxlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ2LDkgKzQ2LDkgQEAgdm9pZCBUeXBlUHJvZmlsZXI6OmxvZ1R5cGVzRm9y
VHlwZUxvY2F0aQogCiAgICAgZGF0YUxvZygiXHRcdCIsIGxvY2F0aW9uLT5tX2dsb2JhbFZhcmlh
YmxlSUQgPT0gVHlwZVByb2ZpbGVyUmV0dXJuU3RhdGVtZW50ID8gIltSZXR1cm4gU3RhdGVtZW50
XSIgOiAiW05vcm1hbCBTdGF0ZW1lbnRdIiwgIlxuIik7CiAKLSAgICBkYXRhTG9nKCJcdFx0I0xv
Y2FsI1xuXHRcdCIsIGxvY2F0aW9uLT5tX2luc3RydWN0aW9uVHlwZVNldC0+c2VlblR5cGVzKCku
cmVwbGFjZSgiXG4iLCAiXG5cdFx0IiksICJcbiIpOworICAgIGRhdGFMb2coIlx0XHQjTG9jYWwj
XG5cdFx0IiwgbG9jYXRpb24tPm1faW5zdHJ1Y3Rpb25UeXBlU2V0LT5kdW1wVHlwZXMoKS5yZXBs
YWNlKCJcbiIsICJcblx0XHQiKSwgIlxuIik7CiAgICAgaWYgKGxvY2F0aW9uLT5tX2dsb2JhbFR5
cGVTZXQpCi0gICAgICAgIGRhdGFMb2coIlx0XHQjR2xvYmFsI1xuXHRcdCIsIGxvY2F0aW9uLT5t
X2dsb2JhbFR5cGVTZXQtPnNlZW5UeXBlcygpLnJlcGxhY2UoIlxuIiwgIlxuXHRcdCIpLCAiXG4i
KTsKKyAgICAgICAgZGF0YUxvZygiXHRcdCNHbG9iYWwjXG5cdFx0IiwgbG9jYXRpb24tPm1fZ2xv
YmFsVHlwZVNldC0+ZHVtcFR5cGVzKCkucmVwbGFjZSgiXG4iLCAiXG5cdFx0IiksICJcbiIpOwog
fQogCiB2b2lkIFR5cGVQcm9maWxlcjo6aW5zZXJ0TmV3TG9jYXRpb24oVHlwZUxvY2F0aW9uKiBs
b2NhdGlvbikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVTZXQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVTZXQuY3Bw
CShyZXZpc2lvbiAxNzQxMzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBl
U2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEwLDcgKzExMCw3IEBAIHZvaWQgVHlwZVNldDo6
aW52YWxpZGF0ZUNhY2hlKCkKICAgICBtX3N0cnVjdHVyZUlEQ2FjaGUuY2xlYXIoKTsKIH0KIAot
U3RyaW5nIFR5cGVTZXQ6OnNlZW5UeXBlcygpIGNvbnN0CitTdHJpbmcgVHlwZVNldDo6ZHVtcFR5
cGVzKCkgY29uc3QKIHsKICAgICBpZiAobV9zZWVuVHlwZXMgPT0gVHlwZU5vdGhpbmcpCiAgICAg
ICAgIHJldHVybiBBU0NJSUxpdGVyYWwoIihVbnJlYWNoZWQgU3RhdGVtZW50KSIpOwpAQCAtMTc0
LDcgKzE3NCw3IEBAIGJvb2wgVHlwZVNldDo6ZG9lc1R5cGVDb25mb3JtVG8odWludDMyX3QKICAg
ICAvLyAtLS0tLS0gKEFORCkKICAgICAvLyAwYjAwMTAgIT0gc2VlbgogCi0gICAgcmV0dXJuICht
X3NlZW5UeXBlcyAmIHRlc3QpID09IG1fc2VlblR5cGVzOworICAgIHJldHVybiBtX3NlZW5UeXBl
cyAhPSBUeXBlTm90aGluZyAmJiAobV9zZWVuVHlwZXMgJiB0ZXN0KSA9PSBtX3NlZW5UeXBlczsK
IH0KIAogU3RyaW5nIFR5cGVTZXQ6OmRpc3BsYXlOYW1lKCkgY29uc3QKQEAgLTM1MywxMSArMzUz
LDYgQEAgU3RyaW5nIFR5cGVTZXQ6OnRvSlNPTlN0cmluZygpIGNvbnN0CiAgICAgcmV0dXJuIGpz
b24udG9TdHJpbmcoKTsKIH0KIAotdm9pZCBUeXBlU2V0OjpkdW1wU2VlblR5cGVzKCkKLXsKLSAg
ICBkYXRhTG9nKHNlZW5UeXBlcygpLCAiXG4iKTsKLX0KLQogU3RydWN0dXJlU2hhcGU6OlN0cnVj
dHVyZVNoYXBlKCkKICAgICA6IG1fcHJvdG8obnVsbHB0cikKICAgICAsIG1fcHJvcGVydHlIYXNo
KG51bGxwdHIpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlU2V0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVNldC5oCShy
ZXZpc2lvbiAxNzQxMzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlU2V0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw3ICsxMDAsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBh
ZGRUeXBlSW5mb3JtYXRpb24oUnVudGltZVR5cGUsIFBhc3NSZWZQdHI8U3RydWN0dXJlU2hhcGU+
LCBTdHJ1Y3R1cmVJRCk7CiAgICAgc3RhdGljIFJ1bnRpbWVUeXBlIGdldFJ1bnRpbWVUeXBlRm9y
VmFsdWUoSlNWYWx1ZSk7CiAgICAgdm9pZCBpbnZhbGlkYXRlQ2FjaGUoKTsKLSAgICBKU19FWFBP
UlRfUFJJVkFURSBTdHJpbmcgc2VlblR5cGVzKCkgY29uc3Q7CisgICAgU3RyaW5nIGR1bXBUeXBl
cygpIGNvbnN0OwogICAgIFN0cmluZyBkaXNwbGF5TmFtZSgpIGNvbnN0OwogICAgIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4gYWxsUHJpbWl0aXZlVHlwZU5h
bWVzKCkgY29uc3Q7CiAgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJ
bnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpTdHJ1Y3R1cmVEZXNjcmlwdGlvbj4+IGFsbFN0
cnVjdHVyZVJlcHJlc2VudGF0aW9ucygpIGNvbnN0OwpAQCAtMTA5LDEwICsxMDksMTAgQEAgcHVi
bGljOgogICAgIFN0cmluZyBsZWFzdENvbW1vbkFuY2VzdG9yKCkgY29uc3Q7CiAgICAgUGFzc1Jl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpUeXBlU2V0PiBpbnNwZWN0b3JUeXBl
U2V0KCkgY29uc3Q7CiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9zZWVuVHlw
ZXMgPT0gVHlwZU5vdGhpbmc7IH0KKyAgICBib29sIGRvZXNUeXBlQ29uZm9ybVRvKHVpbnQzMl90
IHRlc3QpIGNvbnN0OworICAgIHVpbnQzMl90IHNlZW5UeXBlcygpIGNvbnN0IHsgcmV0dXJuIG1f
c2VlblR5cGVzOyB9CiAKIHByaXZhdGU6Ci0gICAgdm9pZCBkdW1wU2VlblR5cGVzKCk7Ci0gICAg
Ym9vbCBkb2VzVHlwZUNvbmZvcm1Ubyh1aW50MzJfdCB0ZXN0KSBjb25zdDsKIAogICAgIHVpbnQz
Ml90IG1fc2VlblR5cGVzOwogICAgIGJvb2wgbV9pc092ZXJmbG93bjsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS90ZXN0cy90eXBlUHJvZmlsZXIvZGZnLWppdC1vcHRpbWl6YXRpb25zLmpz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy90eXBlUHJvZmlsZXIv
ZGZnLWppdC1vcHRpbWl6YXRpb25zLmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3Rlc3RzL3R5cGVQcm9maWxlci9kZmctaml0LW9wdGltaXphdGlvbnMuanMJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwzOCBAQAorbG9hZCgiLi9kcml2ZXIvZHJpdmVyLmpzIik7CisK
K2Z1bmN0aW9uIHRpZXJVcFRvREZHKGZ1bmMsIGFyZykgCit7CisgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCAxMDAwOyBpKyspCisgICAgICAgIGZ1bmMoYXJnKTsKK30KKwordmFyIHR5cGVzID0gW1Qu
Qm9vbGVhbiwgVC5JbnRlZ2VyLCBULk51bGwsIFQuTnVtYmVyLCBULlN0cmluZywgVC5VbmRlZmlu
ZWRdOwordmFyIHZhbHVlcyA9IFt0cnVlLCAxLCBudWxsLCAxLjEsICJoZWxsbyIsIHVuZGVmaW5l
ZF07Cit2YXIgZnVuY3MgPSBbZnVuY3Rpb24oeCkgeyByZXR1cm4geDsgfSwgZnVuY3Rpb24oeCkg
eyByZXR1cm4geDsgfSwgZnVuY3Rpb24oeCkgeyByZXR1cm4geDsgfSwgCisgICAgZnVuY3Rpb24o
eCkgeyByZXR1cm4geDsgfSwgZnVuY3Rpb24oeCkgeyByZXR1cm4geDsgfSwgZnVuY3Rpb24oeCkg
eyByZXR1cm4geDsgfV0KKworYXNzZXJ0KHR5cGVzLmxlbmd0aCA9PT0gdmFsdWVzLmxlbmd0aCAm
JiB2YWx1ZXMubGVuZ3RoID09PSBmdW5jcy5sZW5ndGgpOworCisvLyBNYWtlIHN1cmUgYmFzZWxp
bmUgREZHIHR5cGUgY2hlY2sgb3B0aW1pemF0aW9ucyB3b3JrLgorLy8gVGllciB1cCBlYWNoIGZ1
bmN0aW9uIG9uIGEgZGlmZmVyZW50IHR5cGUsIHRoZW4gY2FsbCBpdCB3aXRoIGFsbCBvdGhlciBw
cmltaXRpdmUgdHlwZXMgdG8gbWFrZSBzdXJlIHRoZXkncmUgcmVjb3JkZWQuCitmb3IgKHZhciBp
ID0gMDsgaSA8IHR5cGVzLmxlbmd0aDsgaSsrKSB7CisgICAgdmFyIGZ1bmMgPSBmdW5jc1tpXTsK
KyAgICB2YXIgdHlwZSA9IHR5cGVzW2ldOworICAgIHZhciB2YWx1ZSA9IHZhbHVlc1tpXTsKKyAg
ICBub0lubGluZShmdW5jKTsKKyAgICB0aWVyVXBUb0RGRyhmdW5jLCB2YWx1ZSk7CisgICAgdmFy
IHR5cGVJbmZvID0gZmluZFR5cGVGb3JFeHByZXNzaW9uKGZ1bmMsICJ4Iik7IAorICAgIGFzc2Vy
dCh0eXBlSW5mby5pbnN0cnVjdGlvblR5cGVTZXQucHJpbWl0aXZlVHlwZU5hbWVzLmxlbmd0aCA9
PT0gMSwgIk9ubHkgb25lIHByaW1pdGl2ZSB0eXBlIHNob3VsZCBoYXZlIGJlZW4gc2VlbiBzbyBm
YXIuIik7CisgICAgYXNzZXJ0KHR5cGVJbmZvLmluc3RydWN0aW9uVHlwZVNldC5wcmltaXRpdmVU
eXBlTmFtZXMuaW5kZXhPZih0eXBlKSAhPT0gLTEsICJTaG91bGQgaGF2ZSBiZWVuIG9wdGltaXpl
ZCBvbiB0eXBlOiAiICsgdHlwZSk7CisgICAgZm9yICh2YXIgaiA9IDA7IGogPCB0eXBlcy5sZW5n
dGg7IGorKykgeworICAgICAgICBpZiAodHlwZSA9PT0gVC5OdW1iZXIgJiYgdHlwZXNbal0gPT09
IFQuSW50ZWdlcikgeworICAgICAgICAgICAgLy8gSWYgd2Ugb3B0aW1pemUgb24gdHlwZSBOdW1i
ZXIsIGJ1dCB3ZSBwYXNzIGluIGFuIEludGVnZXIsIG91ciB0eXBlY2hlY2sgd2lsbCBzdGlsbCBw
YXNzLCBzbyB3ZSB3b250IGRpcmVjdGx5IGdldAorICAgICAgICAgICAgLy8gdHlwZSBJbnRlZ2Vy
IGJlY2F1c2UgVC5JbnRlZ2VyIGlzIGltcGxpZWQgdG8gYmUgY29udGFpbmVkIGluIFQuTnVtYmVy
LgorICAgICAgICAgICAgY29udGludWU7IAorICAgICAgICB9CisKKyAgICAgICAgZnVuYyh2YWx1
ZXNbal0pOworICAgICAgICB0eXBlSW5mbyA9IGZpbmRUeXBlRm9yRXhwcmVzc2lvbihmdW5jLCAi
eCIpOworICAgICAgICBhc3NlcnQodHlwZUluZm8uaW5zdHJ1Y3Rpb25UeXBlU2V0LnByaW1pdGl2
ZVR5cGVOYW1lcy5pbmRleE9mKHR5cGVzW2pdKSAhPT0gLTEsICJTaG91bGQgaGF2ZSBzZWVuIHR5
cGU6ICIgKyB0eXBlc1tqXSArICIgIiArIGkgKyAiLCIgKyBqKTsKKyAgICB9Cit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>239017</attachid>
            <date>2014-10-01 02:58:18 -0700</date>
            <delta_ts>2014-10-01 11:22:35 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>29346</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTc0MTM5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY5IEBA
CisyMDE0LTA5LTMwICBTYWFtIEJhcmF0aSAgPHNhYW1iYXJhdGkxQGdtYWlsLmNvbT4KKworICAg
ICAgICBTdXBwb3J0IHRoZSB0eXBlIHByb2ZpbGVyIGluIHRoZSBERkcKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjcxMgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggaW1wbGVtZW50cyBv
cF9wcm9maWxlX3R5cGUgaW5zaWRlIHRoZSBERkcgYXMgdGhlIG5vZGU6IFByb2ZpbGVUeXBlLgor
ICAgICAgICBUaGUgREZHIHdpbGwgY29udmVydCB0aGUgUHJvZmlsZVR5cGUgbm9kZSBpbnRvIGEg
Q2hlY2sgbm9kZSBpbiB0aGUgY2FzZXMgd2hlcmUKKyAgICAgICAgcGFzc2luZyBhIHR5cGUgY2hl
Y2sgaXMgZXF1aXZhbGVudCB0byB3cml0aW5nIHRvIHRoZSBUeXBlUHJvZmlsZXJMb2cuIFRoaXMK
KyAgICAgICAgZ2l2ZXMgdGhlIERGRyB0aGUgcG90ZW50aWFsIHRvIG9wdGltaXplIG91dCBtdWx0
aXBsZSBQcm9maWxlVHlwZSBub2RlcyBpbnRvCisgICAgICAgIGEgc2luZ2xlIENoZWNrIG5vZGUu
CisKKyAgICAgICAgV2hlbiB0aGUgREZHIGRvZXNuJ3QgY29udmVydCBQcm9maWxlVHlwZSBpbnRv
IGEgQ2hlY2sgbm9kZSwgaXQgd2lsbCBnZW5lcmF0ZQorICAgICAgICB0aGUgc2FtZSBpbmxpbmUg
Y29kZSBhcyB0aGUgYmFzZWxpbmUgSklUIGRvZXMgZm9yIHdyaXRpbmcgYW4gZW50cnkgdG8gdGhl
CisgICAgICAgIFR5cGVQcm9maWxlckxvZy4KKworICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdElu
dGVycHJldGVySW5saW5lcy5oOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0
ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyk6CisgICAgICAgICogZGZnL0RG
R0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6
cGFyc2VCbG9jayk6CisgICAgICAgICogZGZnL0RGR0NhcGFiaWxpdGllcy5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6Y2FwYWJpbGl0eUxldmVsKToKKyAgICAgICAgKiBkZmcvREZHQ2xvYmJlcml6
ZS5oOgorICAgICAgICAoSlNDOjpERkc6OmNsb2JiZXJpemUpOgorICAgICAgICAqIGRmZy9ERkdE
b2VzR0MuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmRvZXNHQyk6CisgICAgICAgICogZGZnL0RG
R0RyaXZlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Y29tcGlsZUltcGwpOgorICAgICAgICAq
IGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjpm
aXh1cE5vZGUpOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6
Tm9kZTo6dHlwZUxvY2F0aW9uKToKKyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUuaDoKKyAgICAg
ICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMu
aDoKKyAgICAgICAgKiBkZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OlByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlOjpwcm9wYWdhdGUpOgor
ICAgICAgICAqIGRmZy9ERkdTYWZlVG9FeGVjdXRlLmg6CisgICAgICAgIChKU0M6OkRGRzo6c2Fm
ZVRvRXhlY3V0ZSk6CisgICAgICAgICogZGZnL0RGR1Nsb3dQYXRoR2VuZXJhdG9yLmg6CisgICAg
ICAgIChKU0M6OkRGRzo6Q2FsbE5vUmVzdWx0QW5kTm9Bcmd1bWVudHNTbG93UGF0aEdlbmVyYXRv
cjo6Q2FsbE5vUmVzdWx0QW5kTm9Bcmd1bWVudHNTbG93UGF0aEdlbmVyYXRvcik6CisgICAgICAg
IChKU0M6OkRGRzo6c2xvd1BhdGhDYWxsKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVK
SVQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2FsbE9wZXJhdGlvbik6
CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3Vs
YXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUpOgorICAgICAgICAqIHJ1bnRpbWUvVHlwZVByb2ZpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6
VHlwZVByb2ZpbGVyOjpsb2dUeXBlc0ZvclR5cGVMb2NhdGlvbik6CisgICAgICAgICogcnVudGlt
ZS9UeXBlU2V0LmNwcDoKKyAgICAgICAgKEpTQzo6VHlwZVNldDo6ZHVtcFR5cGVzKToKKyAgICAg
ICAgKEpTQzo6VHlwZVNldDo6ZG9lc1R5cGVDb25mb3JtVG8pOgorICAgICAgICBNYWtlIHRoaXMg
bWV0aG9kIHB1YmxpYyBzbyBvdGhlciBjbGFzc2VzIGNhbiByZWFzb24gYWJvdXQgdGhlIHR5cGVz
CisgICAgICAgIGEgVHlwZVNldCBoYXMgc2Vlbi4KKyAgICAgICAgKEpTQzo6VHlwZVNldDo6c2Vl
blR5cGVzKTogRGVsZXRlZC4KKyAgICAgICAgUmVuYW1lZCB0byBkdW1wVHlwZXMgc28gdGhlIG1l
dGhvZCBzZWVuVHlwZXMgY2FuIGJlIHVzZWQgYXMgYSBwdWJsaWMgZ2V0dGVyLgorICAgICAgICAo
SlNDOjpUeXBlU2V0OjpkdW1wU2VlblR5cGVzKTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1l
L1R5cGVTZXQuaDoKKyAgICAgICAgKEpTQzo6VHlwZVNldDo6c2VlblR5cGVzKToKKyAgICAgICAg
KiB0ZXN0cy90eXBlUHJvZmlsZXIvZGZnLWppdC1vcHRpbWl6YXRpb25zLmpzOiBBZGRlZC4KKyAg
ICAgICAgKHRpZXJVcFRvREZHKToKKyAgICAgICAgKGZ1bmNzKToKKyAgICAgICAgKC5yZXR1cm4p
OgorCiAyMDE0LTA5LTMwICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KIAogICAgICAg
ICBMYWJlbCBzb21lIGFzc2VydHMgYXMgaGF2aW5nIHNlY3VyaXR5IGltcGxpY2F0aW9ucy4KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGlu
ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0
SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDE3NDEzOSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5
KQpAQCAtMTk4NSw2ICsxOTg1LDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0
U3RhdGVUeQogICAgIGNhc2UgQnJlYWtwb2ludDoKICAgICBjYXNlIFByb2ZpbGVXaWxsQ2FsbDoK
ICAgICBjYXNlIFByb2ZpbGVEaWRDYWxsOgorICAgIGNhc2UgUHJvZmlsZVR5cGU6CiAgICAgY2Fz
ZSBQaGFudG9tOgogICAgIGNhc2UgSGFyZFBoYW50b206CiAgICAgY2FzZSBDb3VudEV4ZWN1dGlv
bjoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJz
ZXIuY3BwCShyZXZpc2lvbiAxNzQxMzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjg5Myw2ICsyODkzLDEyIEBA
IGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIE5F
WFRfT1BDT0RFKG9wX2luaXRfZ2xvYmFsX2NvbnN0KTsKICAgICAgICAgfQogCisgICAgICAgIGNh
c2Ugb3BfcHJvZmlsZV90eXBlOiB7CisgICAgICAgICAgICBOb2RlKiB2YWx1ZVRvUHJvZmlsZSA9
IGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpOwor
ICAgICAgICAgICAgYWRkVG9HcmFwaChQcm9maWxlVHlwZSwgT3BJbmZvKGN1cnJlbnRJbnN0cnVj
dGlvblsyXS51LmxvY2F0aW9uKSwgdmFsdWVUb1Byb2ZpbGUpOworICAgICAgICAgICAgTkVYVF9P
UENPREUob3BfcHJvZmlsZV90eXBlKTsKKyAgICAgICAgfQorCiAgICAgICAgIC8vID09PSBCbG9j
ayB0ZXJtaW5hdG9ycy4gPT09CiAKICAgICAgICAgY2FzZSBvcF9qbXA6IHsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAJKHJldmlzaW9uIDE3
NDEzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTIwLDYgKzEyMCw3IEBAIENhcGFiaWxpdHlMZXZlbCBjYXBhYmls
aXR5TGV2ZWwoT3Bjb2RlSUQKICAgICBjYXNlIG9wX2RlYnVnOgogICAgIGNhc2Ugb3BfcHJvZmls
ZV93aWxsX2NhbGw6CiAgICAgY2FzZSBvcF9wcm9maWxlX2RpZF9jYWxsOgorICAgIGNhc2Ugb3Bf
cHJvZmlsZV90eXBlOgogICAgIGNhc2Ugb3BfbW92OgogICAgIGNhc2Ugb3BfY2FwdHVyZWRfbW92
OgogICAgIGNhc2Ugb3BfY2hlY2tfaGFzX2luc3RhbmNlOgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHJldmlzaW9uIDE3NDEzOSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNzIs
NiArMjcyLDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAg
IGNhc2UgQnJlYWtwb2ludDoKICAgICBjYXNlIFByb2ZpbGVXaWxsQ2FsbDoKICAgICBjYXNlIFBy
b2ZpbGVEaWRDYWxsOgorICAgIGNhc2UgUHJvZmlsZVR5cGU6CiAgICAgY2FzZSBTdG9yZUJhcnJp
ZXI6CiAgICAgY2FzZSBTdG9yZUJhcnJpZXJXaXRoTnVsbENoZWNrOgogICAgIGNhc2UgUHV0QnlP
ZmZzZXRIaW50OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAko
cmV2aXNpb24gMTc0MTM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0Mu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQsNiArMTI0LDcgQEAgYm9vbCBkb2VzR0MoR3JhcGgm
IGdyYXBoLCBOb2RlKiBub2RlKQogICAgIGNhc2UgQnJlYWtwb2ludDoKICAgICBjYXNlIFByb2Zp
bGVXaWxsQ2FsbDoKICAgICBjYXNlIFByb2ZpbGVEaWRDYWxsOgorICAgIGNhc2UgUHJvZmlsZVR5
cGU6CiAgICAgY2FzZSBDaGVja0hhc0luc3RhbmNlOgogICAgIGNhc2UgSW5zdGFuY2VPZjoKICAg
ICBjYXNlIElzVW5kZWZpbmVkOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdE
cml2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJp
dmVyLmNwcAkocmV2aXNpb24gMTc0MTM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdEcml2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAi
SlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIk9wdGlvbnMuaCIKICNpbmNsdWRlICJTYW1wbGluZ1Rv
b2wuaCIKKyNpbmNsdWRlICJUeXBlUHJvZmlsZXJMb2cuaCIKICNpbmNsdWRlIDx3dGYvQXRvbWlj
cy5oPgogCiAjaWYgRU5BQkxFKEZUTF9KSVQpCkBAIC05MSw2ICs5Miw5IEBAIHN0YXRpYyBDb21w
aWxhdGlvblJlc3VsdCBjb21waWxlSW1wbCgKICAgICAKICAgICBpZiAoQ2FsbEVkZ2VMb2c6Omlz
RW5hYmxlZCgpKQogICAgICAgICB2bS5lbnN1cmVDYWxsRWRnZUxvZygpLnByb2Nlc3NMb2coKTsK
KworICAgIGlmICh2bS50eXBlUHJvZmlsZXIoKSkKKyAgICAgICAgdm0udHlwZVByb2ZpbGVyTG9n
KCktPnByb2Nlc3NMb2dFbnRyaWVzKEFTQ0lJTGl0ZXJhbCgiUHJlcGFyaW5nIGZvciBERkcgY29t
cGlsYXRpb24uIikpOwogICAgIAogICAgIFJlZlB0cjxQbGFuPiBwbGFuID0gYWRvcHRSZWYoCiAg
ICAgICAgIG5ldyBQbGFuKGNvZGVCbG9jaywgcHJvZmlsZWRERkdDb2RlQmxvY2ssIG1vZGUsIG9z
ckVudHJ5Qnl0ZWNvZGVJbmRleCwgbXVzdEhhbmRsZVZhbHVlcykpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCShyZXZpc2lvbiAxNzQxMzkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiREZHUHJlZGljdGlvblByb3BhZ2F0aW9u
UGhhc2UuaCIKICNpbmNsdWRlICJERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmgiCiAjaW5jbHVk
ZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIlR5cGVMb2NhdGlvbi5oIgogCiBuYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKQEAgLTExMTIsNiArMTExMywzOCBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgZml4RWRnZTxLbm93bkludDMyVXNlPihub2RlLT5jaGlsZDEoKSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQorICAgICAgICBjYXNlIFByb2ZpbGVUeXBlOiB7Cisg
ICAgICAgICAgICAvLyBXZSB3YW50IHRvIGluc2VydCB0eXBlIGNoZWNrcyBiYXNlZCBvbiB0aGUg
aW5zdHJ1Y3Rpb25UeXBlU2V0IG9mIHRoZSBUeXBlTG9jYXRpb24sIG5vdCB0aGUgZ2xvYmFsVHlw
ZVNldC4KKyAgICAgICAgICAgIC8vIEJlY2F1c2UgdGhlIGluc3RydWN0aW9uVHlwZVNldCBpcyBj
b250YWluZWQgaW4gZ2xvYmFsVHlwZVNldCwgaWYgd2UgcHJvZHVjZSBhIHR5cGUgY2hlY2sgZm9y
CisgICAgICAgICAgICAvLyB0eXBlIFQgZm9yIHRoZSBpbnN0cnVjdGlvblR5cGVTZXQsIHRoZSBn
bG9iYWwgdHlwZSBzZXQgbXVzdCBhbHNvIGhhdmUgaW5mb3JtYXRpb24gZm9yIHR5cGUgVC4KKyAg
ICAgICAgICAgIC8vIFNvIGlmIGl0IHRoZSB0eXBlIGNoZWNrIHN1Y2NlZWRzIGZvciB0eXBlIFQg
aW4gdGhlIGluc3RydWN0aW9uVHlwZVNldCwgYSB0eXBlIGNoZWNrIGZvciB0eXBlIFQgCisgICAg
ICAgICAgICAvLyBpbiB0aGUgZ2xvYmFsVHlwZVNldCB3b3VsZCd2ZSBhbHNvIHN1Y2NlZWRlZC4K
KyAgICAgICAgICAgIC8vIChUaGUgb3RoZXIgZGlyZWN0aW9uIGRvZXMgbm90IGhvbGQgaW4gZ2Vu
ZXJhbCkuCisKKyAgICAgICAgICAgIFJlZlB0cjxUeXBlU2V0PiB0eXBlU2V0ID0gbm9kZS0+dHlw
ZUxvY2F0aW9uKCktPm1faW5zdHJ1Y3Rpb25UeXBlU2V0OworICAgICAgICAgICAgdWludDMyX3Qg
c2VlblR5cGVzID0gdHlwZVNldC0+c2VlblR5cGVzKCk7CisgICAgICAgICAgICBpZiAodHlwZVNl
dC0+ZG9lc1R5cGVDb25mb3JtVG8oVHlwZU1hY2hpbmVJbnQpKSB7CisgICAgICAgICAgICAgICAg
bm9kZS0+Y29udmVydFRvQ2hlY2soKTsKKyAgICAgICAgICAgICAgICBpZiAoaXNJbnQzMlNwZWN1
bGF0aW9uKG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCkpKQorICAgICAgICAgICAgICAgICAg
ICBmaXhFZGdlPEludDMyVXNlPihub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgICAgICBmaXhFZGdlPE1hY2hpbmVJbnRVc2U+KG5vZGUtPmNoaWxk
MSgpKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZVNldC0+ZG9lc1R5cGVDb25mb3JtVG8o
VHlwZU51bWJlciB8IFR5cGVNYWNoaW5lSW50KSkgeworICAgICAgICAgICAgICAgIG5vZGUtPmNv
bnZlcnRUb0NoZWNrKCk7CisgICAgICAgICAgICAgICAgZml4RWRnZTxOdW1iZXJVc2U+KG5vZGUt
PmNoaWxkMSgpKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZVNldC0+ZG9lc1R5cGVDb25m
b3JtVG8oVHlwZVN0cmluZykpIHsKKyAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9DaGVj
aygpOworICAgICAgICAgICAgICAgIGZpeEVkZ2U8U3RyaW5nVXNlPihub2RlLT5jaGlsZDEoKSk7
CisgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVTZXQtPmRvZXNUeXBlQ29uZm9ybVRvKFR5cGVC
b29sZWFuKSkgeworICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb0NoZWNrKCk7CisgICAg
ICAgICAgICAgICAgZml4RWRnZTxCb29sZWFuVXNlPihub2RlLT5jaGlsZDEoKSk7CisgICAgICAg
ICAgICB9IGVsc2UgaWYgKHR5cGVTZXQtPmRvZXNUeXBlQ29uZm9ybVRvKFR5cGVVbmRlZmluZWQg
fCBUeXBlTnVsbCkgJiYgKHNlZW5UeXBlcyAmIFR5cGVVbmRlZmluZWQpICYmIChzZWVuVHlwZXMg
JiBUeXBlTnVsbCkpIHsKKyAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9DaGVjaygpOwor
ICAgICAgICAgICAgICAgIGZpeEVkZ2U8T3RoZXJVc2U+KG5vZGUtPmNoaWxkMSgpKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgICAgIAog
I2lmICFBU1NFUlRfRElTQUJMRUQKICAgICAgICAgLy8gSGF2ZSB0aGVzZSBuby1vcCBjYXNlcyBo
ZXJlIHRvIGVuc3VyZSB0aGF0IG5vYm9keSBmb3JnZXRzIHRvIGFkZCBoYW5kbGVycyBmb3IgbmV3
IG9wY29kZXMuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24g
MTc0MTM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAKICNpbmNsdWRlICJQdXRCeUlkVmFyaWFudC5oIgogI2lu
Y2x1ZGUgIlNwZWN1bGF0ZWRUeXBlLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlU2V0LmgiCisjaW5j
bHVkZSAiVHlwZUxvY2F0aW9uLmgiCiAjaW5jbHVkZSAiVmFsdWVQcm9maWxlLmgiCiAjaW5jbHVk
ZSA8d3RmL0xpc3REdW1wLmg+CiAKQEAgLTE3NzMsNiArMTc3NCwxMSBAQCBzdHJ1Y3QgTm9kZSB7
CiAgICAgewogICAgICAgICByZXR1cm4gY2FuU3BlY3VsYXRlSW50NTIoc291cmNlRm9yKHBhc3Mp
KTsKICAgICB9CisKKyAgICBUeXBlTG9jYXRpb24qIHR5cGVMb2NhdGlvbigpCisgICAgeworICAg
ICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUeXBlTG9jYXRpb24qPihtX29wSW5mbyk7Cisg
ICAgfQogICAgIAogICAgIHZvaWQgZHVtcENoaWxkcmVuKFByaW50U3RyZWFtJiBvdXQpCiAgICAg
ewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkocmV2aXNpb24g
MTc0MTM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNTQsNiArMjU0LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgewogICAgIG1hY3JvKE5ld1N0cmluZ09iamVjdCwgTm9kZVJlc3VsdEpTKSBcCiAgICAgbWFj
cm8oTWFrZVJvcGUsIE5vZGVSZXN1bHRKUykgXAogICAgIG1hY3JvKEluLCBOb2RlUmVzdWx0Qm9v
bGVhbiB8IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlQ2xvYmJlcnNXb3JsZCkgXAorICAgIG1hY3Jv
KFByb2ZpbGVUeXBlLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgXAogICAgIC8qIE5vZGVzIHVz
ZWQgZm9yIGFjdGl2YXRpb25zLiBBY3RpdmF0aW9uIHN1cHBvcnQgd29ya3MgYnkgaGF2aW5nIGl0
IGFuY2hvcmVkIGF0ICovXAogICAgIC8qIGVwaWxnb3VlcyB2aWEgVGVhck9mZkFjdGl2YXRpb24s
IGFuZCBhbGwgQ3JlYXRlQWN0aXZhdGlvbiBub2RlcyBrZXB0IGFsaXZlIGJ5ICovXApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAx
NzQxMzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01Myw2ICs1Myw3IEBACiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgog
I2luY2x1ZGUgIlJlcGF0Y2guaCIKICNpbmNsdWRlICJTdHJpbmdDb25zdHJ1Y3Rvci5oIgorI2lu
Y2x1ZGUgIlR5cGVQcm9maWxlckxvZy5oIgogI2luY2x1ZGUgIlR5cGVkQXJyYXlJbmxpbmVzLmgi
CiAjaW5jbHVkZSA8d3RmL0lubGluZUFTTS5oPgogCkBAIC0xMDYyLDYgKzEwNjMsMTEgQEAgaW50
NjRfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbnZlcnREbwogICAgIHJldHVybiB0cnlDb252
ZXJ0VG9JbnQ1Mih2YWx1ZSk7CiB9CiAKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Qcm9j
ZXNzVHlwZVByb2ZpbGVyTG9nREZHKEV4ZWNTdGF0ZSogZXhlYykgCit7CisgICAgZXhlYy0+dm0o
KS50eXBlUHJvZmlsZXJMb2coKS0+cHJvY2Vzc0xvZ0VudHJpZXMoQVNDSUlMaXRlcmFsKCJMb2cg
RnVsbCwgY2FsbGVkIGZyb20gaW5zaWRlIERGRy4iKSk7Cit9CisKIHNpemVfdCBKSVRfT1BFUkFU
SU9OIGRmZ0NvbnZlcnRKU1ZhbHVlVG9JbnQzMihFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1Zh
bHVlIHZhbHVlKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgJKHJldmlzaW9uIDE3NDEzOSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMzAsNiArMTMwLDggQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5vdGlmeVdyaXRl
KAogaW50NjRfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbnZlcnRCb3hlZERvdWJsZVRvSW50
NTIoRW5jb2RlZEpTVmFsdWUpOwogaW50NjRfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbnZl
cnREb3VibGVUb0ludDUyKGRvdWJsZSk7CiAKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Q
cm9jZXNzVHlwZVByb2ZpbGVyTG9nREZHKEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKKwogLy8g
VGhlc2Ugb3BlcmF0aW9ucyBpbXBsZW1lbnQgdGhlIGltcGxpY2l0bHkgY2FsbGVkIFRvSW50MzIg
YW5kIFRvQm9vbGVhbiBjb252ZXJzaW9ucyBmcm9tIEVTNS4KIC8vIFRoaXMgY29udmVyc2lvbiBy
ZXR1cm5zIGFuIGludDMyX3Qgd2l0aGluIGEgc2l6ZV90IHN1Y2ggdGhhdCB0aGUgdmFsdWUgaXMg
emVybyBleHRlbmRlZCB0byBmaWxsIHRoZSByZWdpc3Rlci4KIHNpemVfdCBKSVRfT1BFUkFUSU9O
IGRmZ0NvbnZlcnRKU1ZhbHVlVG9JbnQzMihFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSkgV1RG
X0lOVEVSTkFMOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9u
UHJvcGFnYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE3NDEzOSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NDUsNiArNjQ1LDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgY2FzZSBCcmVha3BvaW50OgogICAgICAgICBjYXNlIFByb2ZpbGVXaWxsQ2FsbDoKICAgICAg
ICAgY2FzZSBQcm9maWxlRGlkQ2FsbDoKKyAgICAgICAgY2FzZSBQcm9maWxlVHlwZToKICAgICAg
ICAgY2FzZSBDaGVja0hhc0luc3RhbmNlOgogICAgICAgICBjYXNlIFRocm93UmVmZXJlbmNlRXJy
b3I6CiAgICAgICAgIGNhc2UgRm9yY2VPU1JFeGl0OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHJldmlzaW9uIDE3NDEzOSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xOTgsNiArMTk4LDcgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBz
dAogICAgIGNhc2UgQnJlYWtwb2ludDoKICAgICBjYXNlIFByb2ZpbGVXaWxsQ2FsbDoKICAgICBj
YXNlIFByb2ZpbGVEaWRDYWxsOgorICAgIGNhc2UgUHJvZmlsZVR5cGU6CiAgICAgY2FzZSBDaGVj
a0hhc0luc3RhbmNlOgogICAgIGNhc2UgSW5zdGFuY2VPZjoKICAgICBjYXNlIElzVW5kZWZpbmVk
OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTbG93UGF0aEdlbmVyYXRvci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2xvd1BhdGhHZW5l
cmF0b3IuaAkocmV2aXNpb24gMTc0MTM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTbG93UGF0aEdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDEsNiArMTQxLDI3IEBA
IHByb3RlY3RlZDoKICAgICBWZWN0b3I8U2lsZW50UmVnaXN0ZXJTYXZlUGxhbiwgMj4gbV9wbGFu
czsKIH07CiAKK3RlbXBsYXRlPHR5cGVuYW1lIEp1bXBUeXBlLCB0eXBlbmFtZSBGdW5jdGlvblR5
cGU+CitjbGFzcyBDYWxsTm9SZXN1bHRBbmROb0FyZ3VtZW50c1Nsb3dQYXRoR2VuZXJhdG9yCisg
ICAgOiBwdWJsaWMgQ2FsbFNsb3dQYXRoR2VuZXJhdG9yPEp1bXBUeXBlLCBGdW5jdGlvblR5cGUs
IEdQUlJlZz4geworcHVibGljOgorICAgIENhbGxOb1Jlc3VsdEFuZE5vQXJndW1lbnRzU2xvd1Bh
dGhHZW5lcmF0b3IoCisgICAgICAgIEp1bXBUeXBlIGZyb20sIFNwZWN1bGF0aXZlSklUKiBqaXQs
IEZ1bmN0aW9uVHlwZSBmdW5jdGlvbiwKKyAgICAgICAgU3BpbGxSZWdpc3RlcnNNb2RlIHNwaWxs
TW9kZSkKKyAgICAgICAgOiBDYWxsU2xvd1BhdGhHZW5lcmF0b3I8SnVtcFR5cGUsIEZ1bmN0aW9u
VHlwZSwgR1BSUmVnPigKKyAgICAgICAgICAgIGZyb20sIGppdCwgZnVuY3Rpb24sIHNwaWxsTW9k
ZSwgSW52YWxpZEdQUlJlZykKKyAgICB7CisgICAgfQorICAgIAorcHJvdGVjdGVkOgorICAgIHZp
cnR1YWwgdm9pZCBnZW5lcmF0ZUludGVybmFsKFNwZWN1bGF0aXZlSklUKiBqaXQpIG92ZXJyaWRl
CisgICAgeworICAgICAgICB0aGlzLT5zZXRVcChqaXQpOworICAgICAgICB0aGlzLT5yZWNvcmRD
YWxsKGppdC0+Y2FsbE9wZXJhdGlvbih0aGlzLT5tX2Z1bmN0aW9uKSk7CisgICAgICAgIHRoaXMt
PnRlYXJEb3duKGppdCk7CisgICAgfQorfTsKKwogdGVtcGxhdGU8dHlwZW5hbWUgSnVtcFR5cGUs
IHR5cGVuYW1lIEZ1bmN0aW9uVHlwZSwgdHlwZW5hbWUgUmVzdWx0VHlwZT4KIGNsYXNzIENhbGxS
ZXN1bHRBbmROb0FyZ3VtZW50c1Nsb3dQYXRoR2VuZXJhdG9yCiAgICAgOiBwdWJsaWMgQ2FsbFNs
b3dQYXRoR2VuZXJhdG9yPEp1bXBUeXBlLCBGdW5jdGlvblR5cGUsIFJlc3VsdFR5cGU+IHsKQEAg
LTMyOCw2ICszNDksMTYgQEAgcHJvdGVjdGVkOiAgICAKICAgICBBcmd1bWVudFR5cGU1IG1fYXJn
dW1lbnQ1OwogfTsKIAordGVtcGxhdGU8dHlwZW5hbWUgSnVtcFR5cGUsIHR5cGVuYW1lIEZ1bmN0
aW9uVHlwZT4KK2lubGluZSBQYXNzT3duUHRyPFNsb3dQYXRoR2VuZXJhdG9yPiBzbG93UGF0aENh
bGwoCisgICAgSnVtcFR5cGUgZnJvbSwgU3BlY3VsYXRpdmVKSVQqIGppdCwgRnVuY3Rpb25UeXBl
IGZ1bmN0aW9uLCBTcGlsbFJlZ2lzdGVyc01vZGUgc3BpbGxNb2RlID0gTmVlZFRvU3BpbGwpCit7
CisgICAgcmV0dXJuIGFkb3B0UHRyKAorICAgICAgICBuZXcgQ2FsbE5vUmVzdWx0QW5kTm9Bcmd1
bWVudHNTbG93UGF0aEdlbmVyYXRvcjwKKyAgICAgICAgICAgIEp1bXBUeXBlLCBGdW5jdGlvblR5
cGU+KAorICAgICAgICAgICAgICAgIGZyb20sIGppdCwgZnVuY3Rpb24sIHNwaWxsTW9kZSkpOwor
fQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBKdW1wVHlwZSwgdHlwZW5hbWUgRnVuY3Rpb25UeXBlLCB0
eXBlbmFtZSBSZXN1bHRUeXBlPgogaW5saW5lIFBhc3NPd25QdHI8U2xvd1BhdGhHZW5lcmF0b3I+
IHNsb3dQYXRoQ2FsbCgKICAgICBKdW1wVHlwZSBmcm9tLCBTcGVjdWxhdGl2ZUpJVCogaml0LCBG
dW5jdGlvblR5cGUgZnVuY3Rpb24sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDE3NDEzOSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlICJKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3IuaCIKICNpbmNsdWRlICJPYmplY3RQcm90b3R5cGUuaCIKICNpbmNsdWRlICJKU0NJ
bmxpbmVzLmgiCisjaW5jbHVkZSAiVHlwZVByb2ZpbGVyTG9nLmgiCiAKIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKIApAQCAtNDg1Niw2ICs0ODU3LDUxIEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIs
IG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CisgICAgY2FzZSBQcm9maWxlVHlwZTogewor
ICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAg
ICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMSh0aGlzKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHNj
cmF0Y2gyKHRoaXMpOworICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDModGhpcyk7CisKKyAg
ICAgICAgR1BSUmVnIHNjcmF0Y2gxR1BSID0gc2NyYXRjaDEuZ3ByKCk7CisgICAgICAgIEdQUlJl
ZyBzY3JhdGNoMkdQUiA9IHNjcmF0Y2gyLmdwcigpOworICAgICAgICBHUFJSZWcgc2NyYXRjaDNH
UFIgPSBzY3JhdGNoMy5ncHIoKTsKKworICAgICAgICAvLyBMb2FkIHRoZSBUeXBlUHJvZmlsZXJM
b2cgaW50byBTY3JhdGNoMi4KKyAgICAgICAgVHlwZVByb2ZpbGVyTG9nKiBjYWNoZWRUeXBlUHJv
ZmlsZXJMb2cgPSBtX2ppdC52bSgpLT50eXBlUHJvZmlsZXJMb2coKTsKKyAgICAgICAgbV9qaXQu
bW92ZShUcnVzdGVkSW1tUHRyKGNhY2hlZFR5cGVQcm9maWxlckxvZyksIHNjcmF0Y2gyR1BSKTsK
KworICAgICAgICAvLyBMb2FkIHRoZSBuZXh0IExvZ0VudHJ5IGludG8gU2NyYXRjaDEuCisgICAg
ICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaDJHUFIsIFR5
cGVQcm9maWxlckxvZzo6Y3VycmVudExvZ0VudHJ5T2Zmc2V0KCkpLCBzY3JhdGNoMUdQUik7CisK
KyAgICAgICAgLy8gU3RvcmUgdGhlIEpTVmFsdWUgb250byB0aGUgbG9nIGVudHJ5LgorICAgICAg
ICBtX2ppdC5zdG9yZTMyKHZhbHVlLnRhZ0dQUigpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhz
Y3JhdGNoMUdQUiwgVHlwZVByb2ZpbGVyTG9nOjpMb2dFbnRyeTo6dmFsdWVPZmZzZXQoKSArIE9C
SkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSk7CisgICAgICAgIG1faml0LnN0
b3JlMzIodmFsdWUucGF5bG9hZEdQUigpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNo
MUdQUiwgVHlwZVByb2ZpbGVyTG9nOjpMb2dFbnRyeTo6dmFsdWVPZmZzZXQoKSArIE9CSkVDVF9P
RkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSkpOworCisgICAgICAgIC8vIFN0b3Jl
IHRoZSBzdHJ1Y3R1cmVJRCBvZiB0aGUgY2VsbCBpZiB2YWx1ZUdQUiBpcyBhIGNlbGwsIG90aGVy
d2lzZSwgc3RvcmUgMCBvbiB0aGUgbG9nIGVudHJ5LgorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcCBpc05vdENlbGwgPSBicmFuY2hOb3RDZWxsKHZhbHVlLmpzVmFsdWVSZWdzKCkpOworICAg
ICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModmFsdWUucGF5bG9hZEdQ
UigpLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoM0dQUik7CisgICAgICAg
IG1faml0LnN0b3JlMzIoc2NyYXRjaDNHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0
Y2gxR1BSLCBUeXBlUHJvZmlsZXJMb2c6OkxvZ0VudHJ5OjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSk7
CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNraXBJc0NlbGwgPSBtX2ppdC5qdW1wKCk7
CisgICAgICAgIGlzTm90Q2VsbC5saW5rKCZtX2ppdCk7CisgICAgICAgIG1faml0LnN0b3JlMzIo
VHJ1c3RlZEltbTMyKDApLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoMUdQUiwgVHlw
ZVByb2ZpbGVyTG9nOjpMb2dFbnRyeTo6c3RydWN0dXJlSURPZmZzZXQoKSkpOworICAgICAgICBz
a2lwSXNDZWxsLmxpbmsoJm1faml0KTsKKworICAgICAgICAvLyBTdG9yZSB0aGUgdHlwZUxvY2F0
aW9uIG9uIHRoZSBsb2cgZW50cnkuCisgICAgICAgIFR5cGVMb2NhdGlvbiogY2FjaGVkVHlwZUxv
Y2F0aW9uID0gbm9kZS0+dHlwZUxvY2F0aW9uKCk7CisgICAgICAgIG1faml0Lm1vdmUoVHJ1c3Rl
ZEltbVB0cihjYWNoZWRUeXBlTG9jYXRpb24pLCBzY3JhdGNoM0dQUik7CisgICAgICAgIG1faml0
LnN0b3JlUHRyKHNjcmF0Y2gzR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoMUdQ
UiwgVHlwZVByb2ZpbGVyTG9nOjpMb2dFbnRyeTo6bG9jYXRpb25PZmZzZXQoKSkpOworCisgICAg
ICAgIC8vIEluY3JlbWVudCB0aGUgY3VycmVudCBsb2cgZW50cnkuCisgICAgICAgIG1faml0LmFk
ZFB0cihUcnVzdGVkSW1tMzIoc2l6ZW9mKFR5cGVQcm9maWxlckxvZzo6TG9nRW50cnkpKSwgc2Ny
YXRjaDFHUFIpOworICAgICAgICBtX2ppdC5zdG9yZVB0cihzY3JhdGNoMUdQUiwgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3Moc2NyYXRjaDJHUFIsIFR5cGVQcm9maWxlckxvZzo6Y3VycmVudExvZ0Vu
dHJ5T2Zmc2V0KCkpKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgY2xlYXJMb2cgPSBt
X2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBzY3JhdGNoMUdQUiwgVHJ1c3Rl
ZEltbVB0cihjYWNoZWRUeXBlUHJvZmlsZXJMb2ctPmxvZ0VuZFB0cigpKSk7CisgICAgICAgIGFk
ZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAgICAgc2xvd1BhdGhDYWxsKGNsZWFyTG9nLCB0
aGlzLCBvcGVyYXRpb25Qcm9jZXNzVHlwZVByb2ZpbGVyTG9nREZHKSk7CisKKyAgICAgICAgbm9S
ZXN1bHQobm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KIAogICAgIGNhc2UgRm9yY2VPU1JF
eGl0OiB7CiAgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEluYWRlcXVhdGVD
b3ZlcmFnZSwgSlNWYWx1ZVJlZ3MoKSwgMCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDE3NDEzOSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlICJKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3IuaCIKICNpbmNsdWRlICJPYmplY3RQcm90b3R5cGUuaCIKICNpbmNsdWRlICJTcGlsbFJl
Z2lzdGVyc01vZGUuaCIKKyNpbmNsdWRlICJUeXBlUHJvZmlsZXJMb2cuaCIKIAogbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBERkcgewogCkBAIC00OTAyLDYgKzQ5MDMsNzUgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBjZWxsUmVzdWx0KHJlc3Vs
dEdQUiwgbm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KKyAgICBjYXNlIFByb2ZpbGVUeXBl
OiB7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsK
KyAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gxKHRoaXMpOworICAgICAgICBHUFJUZW1wb3Jh
cnkgc2NyYXRjaDIodGhpcyk7CisgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMyh0aGlzKTsK
KworICAgICAgICBHUFJSZWcgc2NyYXRjaDFHUFIgPSBzY3JhdGNoMS5ncHIoKTsKKyAgICAgICAg
R1BSUmVnIHNjcmF0Y2gyR1BSID0gc2NyYXRjaDIuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBzY3Jh
dGNoM0dQUiA9IHNjcmF0Y2gzLmdwcigpOworICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1
ZS5ncHIoKTsKKworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QganVtcFRvRW5kOwor
CisgICAgICAgIFR5cGVMb2NhdGlvbiogY2FjaGVkVHlwZUxvY2F0aW9uID0gbm9kZS0+dHlwZUxv
Y2F0aW9uKCk7CisgICAgICAgIC8vIENvbXBpbGUgaW4gYSBwcmVkaWN0aXZlIHR5cGUgY2hlY2ss
IGlmIHBvc3NpYmxlLCB0byBzZWUgaWYgd2UgY2FuIHNraXAgd3JpdGluZyB0byB0aGUgbG9nLgor
ICAgICAgICAvLyBUaGVzZSB0eXBlY2hlY2tzIGFyZSBpbmxpbmVkIHRvIG1hdGNoIHRob3NlIG9m
IHRoZSA2NC1iaXQgSlNWYWx1ZSB0eXBlIGNoZWNrcy4KKyAgICAgICAgaWYgKGNhY2hlZFR5cGVM
b2NhdGlvbi0+bV9sYXN0U2VlblR5cGUgPT0gVHlwZVVuZGVmaW5lZCkKKyAgICAgICAgICAgIGp1
bXBUb0VuZC5hcHBlbmQobV9qaXQuYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCB2YWx1
ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSkpKSk7CisgICAgICAgIGVsc2UgaWYgKGNhY2hlZFR5cGVMb2NhdGlvbi0+bV9sYXN0
U2VlblR5cGUgPT0gVHlwZU51bGwpCisgICAgICAgICAgICBqdW1wVG9FbmQuYXBwZW5kKG1faml0
LmJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgdmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpKTsKKyAgICAgICAgZWxz
ZSBpZiAoY2FjaGVkVHlwZUxvY2F0aW9uLT5tX2xhc3RTZWVuVHlwZSA9PSBUeXBlQm9vbGVhbikg
eworICAgICAgICAgICAgbV9qaXQubW92ZSh2YWx1ZUdQUiwgc2NyYXRjaDJHUFIpOworICAgICAg
ICAgICAgbV9qaXQuYW5kNjQoVHJ1c3RlZEltbTMyKH4xKSwgc2NyYXRjaDJHUFIpOworICAgICAg
ICAgICAganVtcFRvRW5kLmFwcGVuZChtX2ppdC5icmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6RXF1
YWwsIHNjcmF0Y2gyR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KFZhbHVlRmFsc2Up
KSk7CisgICAgICAgIH0gZWxzZSBpZiAoY2FjaGVkVHlwZUxvY2F0aW9uLT5tX2xhc3RTZWVuVHlw
ZSA9PSBUeXBlTWFjaGluZUludCkKKyAgICAgICAgICAgIGp1bXBUb0VuZC5hcHBlbmQobV9qaXQu
YnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgdmFsdWVHUFIsIEdQUkluZm86
OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOworICAgICAgICBlbHNlIGlmIChjYWNoZWRUeXBlTG9j
YXRpb24tPm1fbGFzdFNlZW5UeXBlID09IFR5cGVOdW1iZXIpCisgICAgICAgICAgICBqdW1wVG9F
bmQuYXBwZW5kKG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgdmFs
dWVHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOworICAgICAgICBlbHNlIGlm
IChjYWNoZWRUeXBlTG9jYXRpb24tPm1fbGFzdFNlZW5UeXBlID09IFR5cGVTdHJpbmcpIHsKKyAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaE5vdENlbGwo
SlNWYWx1ZVJlZ3ModmFsdWVHUFIpKTsKKyAgICAgICAgICAgIGp1bXBUb0VuZC5hcHBlbmQobV9q
aXQuYnJhbmNoOChNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KHZhbHVlR1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKFN0
cmluZ1R5cGUpKSk7CisgICAgICAgICAgICBpc05vdENlbGwubGluaygmbV9qaXQpOworICAgICAg
ICB9CisKKyAgICAgICAgLy8gTG9hZCB0aGUgVHlwZVByb2ZpbGVyTG9nIGludG8gU2NyYXRjaDIu
CisgICAgICAgIFR5cGVQcm9maWxlckxvZyogY2FjaGVkVHlwZVByb2ZpbGVyTG9nID0gbV9qaXQu
dm0oKS0+dHlwZVByb2ZpbGVyTG9nKCk7CisgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0
cihjYWNoZWRUeXBlUHJvZmlsZXJMb2cpLCBzY3JhdGNoMkdQUik7CisKKyAgICAgICAgLy8gTG9h
ZCB0aGUgbmV4dCBMb2dFbnRyeSBpbnRvIFNjcmF0Y2gxLgorICAgICAgICBtX2ppdC5sb2FkUHRy
KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2gyR1BSLCBUeXBlUHJvZmlsZXJMb2c6OmN1
cnJlbnRMb2dFbnRyeU9mZnNldCgpKSwgc2NyYXRjaDFHUFIpOworCisgICAgICAgIC8vIFN0b3Jl
IHRoZSBKU1ZhbHVlIG9udG8gdGhlIGxvZyBlbnRyeS4KKyAgICAgICAgbV9qaXQuc3RvcmU2NCh2
YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaDFHUFIsIFR5cGVQcm9maWxl
ckxvZzo6TG9nRW50cnk6OnZhbHVlT2Zmc2V0KCkpKTsKKworICAgICAgICAvLyBTdG9yZSB0aGUg
c3RydWN0dXJlSUQgb2YgdGhlIGNlbGwgaWYgdmFsdWVHUFIgaXMgYSBjZWxsLCBvdGhlcndpc2Us
IHN0b3JlIDAgb24gdGhlIGxvZyBlbnRyeS4KKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
aXNOb3RDZWxsID0gYnJhbmNoTm90Q2VsbChKU1ZhbHVlUmVncyh2YWx1ZUdQUikpOworICAgICAg
ICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModmFsdWVHUFIsIEpTQ2VsbDo6
c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2gzR1BSKTsKKyAgICAgICAgbV9qaXQuc3RvcmUz
MihzY3JhdGNoM0dQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaDFHUFIsIFR5cGVQ
cm9maWxlckxvZzo6TG9nRW50cnk6OnN0cnVjdHVyZUlET2Zmc2V0KCkpKTsKKyAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXAgc2tpcElzQ2VsbCA9IG1faml0Lmp1bXAoKTsKKyAgICAgICAgaXNO
b3RDZWxsLmxpbmsoJm1faml0KTsKKyAgICAgICAgbV9qaXQuc3RvcmUzMihUcnVzdGVkSW1tMzIo
MCksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2gxR1BSLCBUeXBlUHJvZmlsZXJMb2c6
OkxvZ0VudHJ5OjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSk7CisgICAgICAgIHNraXBJc0NlbGwubGlu
aygmbV9qaXQpOworCisgICAgICAgIC8vIFN0b3JlIHRoZSB0eXBlTG9jYXRpb24gb24gdGhlIGxv
ZyBlbnRyeS4KKyAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKGNhY2hlZFR5cGVMb2Nh
dGlvbiksIHNjcmF0Y2gzR1BSKTsKKyAgICAgICAgbV9qaXQuc3RvcmVQdHIoc2NyYXRjaDNHUFIs
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2gxR1BSLCBUeXBlUHJvZmlsZXJMb2c6Okxv
Z0VudHJ5Ojpsb2NhdGlvbk9mZnNldCgpKSk7CisKKyAgICAgICAgLy8gSW5jcmVtZW50IHRoZSBj
dXJyZW50IGxvZyBlbnRyeS4KKyAgICAgICAgbV9qaXQuYWRkUHRyKFRydXN0ZWRJbW0zMihzaXpl
b2YoVHlwZVByb2ZpbGVyTG9nOjpMb2dFbnRyeSkpLCBzY3JhdGNoMUdQUik7CisgICAgICAgIG1f
aml0LnN0b3JlUHRyKHNjcmF0Y2gxR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNo
MkdQUiwgVHlwZVByb2ZpbGVyTG9nOjpjdXJyZW50TG9nRW50cnlPZmZzZXQoKSkpOworICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBjbGVhckxvZyA9IG1faml0LmJyYW5jaFB0cihNYWNyb0Fz
c2VtYmxlcjo6RXF1YWwsIHNjcmF0Y2gxR1BSLCBUcnVzdGVkSW1tUHRyKGNhY2hlZFR5cGVQcm9m
aWxlckxvZy0+bG9nRW5kUHRyKCkpKTsKKyAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisg
ICAgICAgICAgICBzbG93UGF0aENhbGwoY2xlYXJMb2csIHRoaXMsIG9wZXJhdGlvblByb2Nlc3NU
eXBlUHJvZmlsZXJMb2dERkcpKTsKKworICAgICAgICBqdW1wVG9FbmQubGluaygmbV9qaXQpOwor
CisgICAgICAgIG5vUmVzdWx0KG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CiAKICNpZiBF
TkFCTEUoRlRMX0pJVCkgICAgICAgIAogICAgIGNhc2UgQ2hlY2tUaWVyVXBJbkxvb3A6IHsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJl
dmlzaW9uIDE3NDEzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtOTQ0LDYgKzk0NCwxMSBAQCBwdWJsaWM6CiAgICAg
Ly8gbWFjaGluZSByZWdpc3RlcnMsIGFuZCBkZWxlZ2F0ZSB0aGUgY2FsbGluZyBjb252ZW50aW9u
IHNwZWNpZmljCiAgICAgLy8gZGVjaXNpb24gYXMgdG8gaG93IHRvIGZpbGwgdGhlIHJlZ3NpdGVy
cyB0byBzZXR1cEFyZ3VtZW50cyogbWV0aG9kcy4KIAorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNh
bGxPcGVyYXRpb24oVl9KSVRPcGVyYXRpb25fRSBvcGVyYXRpb24pCisgICAgeworICAgICAgICBt
X2ppdC5zZXR1cEFyZ3VtZW50c0V4ZWNTdGF0ZSgpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2Fs
bChvcGVyYXRpb24pOworICAgIH0KICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9u
KFBfSklUT3BlcmF0aW9uX0Ugb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0KQogICAgIHsKICAgICAg
ICAgbV9qaXQuc2V0dXBBcmd1bWVudHNFeGVjU3RhdGUoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1R5cGVQcm9maWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVByb2ZpbGVyLmNwcAkocmV2aXNpb24gMTc0MTM5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVByb2ZpbGVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDYsOSArNDYsOSBAQCB2b2lkIFR5cGVQcm9maWxlcjo6bG9nVHlwZXNGb3JU
eXBlTG9jYXRpCiAKICAgICBkYXRhTG9nKCJcdFx0IiwgbG9jYXRpb24tPm1fZ2xvYmFsVmFyaWFi
bGVJRCA9PSBUeXBlUHJvZmlsZXJSZXR1cm5TdGF0ZW1lbnQgPyAiW1JldHVybiBTdGF0ZW1lbnRd
IiA6ICJbTm9ybWFsIFN0YXRlbWVudF0iLCAiXG4iKTsKIAotICAgIGRhdGFMb2coIlx0XHQjTG9j
YWwjXG5cdFx0IiwgbG9jYXRpb24tPm1faW5zdHJ1Y3Rpb25UeXBlU2V0LT5zZWVuVHlwZXMoKS5y
ZXBsYWNlKCJcbiIsICJcblx0XHQiKSwgIlxuIik7CisgICAgZGF0YUxvZygiXHRcdCNMb2NhbCNc
blx0XHQiLCBsb2NhdGlvbi0+bV9pbnN0cnVjdGlvblR5cGVTZXQtPmR1bXBUeXBlcygpLnJlcGxh
Y2UoIlxuIiwgIlxuXHRcdCIpLCAiXG4iKTsKICAgICBpZiAobG9jYXRpb24tPm1fZ2xvYmFsVHlw
ZVNldCkKLSAgICAgICAgZGF0YUxvZygiXHRcdCNHbG9iYWwjXG5cdFx0IiwgbG9jYXRpb24tPm1f
Z2xvYmFsVHlwZVNldC0+c2VlblR5cGVzKCkucmVwbGFjZSgiXG4iLCAiXG5cdFx0IiksICJcbiIp
OworICAgICAgICBkYXRhTG9nKCJcdFx0I0dsb2JhbCNcblx0XHQiLCBsb2NhdGlvbi0+bV9nbG9i
YWxUeXBlU2V0LT5kdW1wVHlwZXMoKS5yZXBsYWNlKCJcbiIsICJcblx0XHQiKSwgIlxuIik7CiB9
CiAKIHZvaWQgVHlwZVByb2ZpbGVyOjppbnNlcnROZXdMb2NhdGlvbihUeXBlTG9jYXRpb24qIGxv
Y2F0aW9uKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVNldC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVNldC5jcHAJ
KHJldmlzaW9uIDE3NDEzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVT
ZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTAsNyArMTEwLDcgQEAgdm9pZCBUeXBlU2V0Ojpp
bnZhbGlkYXRlQ2FjaGUoKQogICAgIG1fc3RydWN0dXJlSURDYWNoZS5jbGVhcigpOwogfQogCi1T
dHJpbmcgVHlwZVNldDo6c2VlblR5cGVzKCkgY29uc3QKK1N0cmluZyBUeXBlU2V0OjpkdW1wVHlw
ZXMoKSBjb25zdAogewogICAgIGlmIChtX3NlZW5UeXBlcyA9PSBUeXBlTm90aGluZykKICAgICAg
ICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiKFVucmVhY2hlZCBTdGF0ZW1lbnQpIik7CkBAIC0xNzQs
NyArMTc0LDcgQEAgYm9vbCBUeXBlU2V0Ojpkb2VzVHlwZUNvbmZvcm1Ubyh1aW50MzJfdAogICAg
IC8vIC0tLS0tLSAoQU5EKQogICAgIC8vIDBiMDAxMCAhPSBzZWVuCiAKLSAgICByZXR1cm4gKG1f
c2VlblR5cGVzICYgdGVzdCkgPT0gbV9zZWVuVHlwZXM7CisgICAgcmV0dXJuIG1fc2VlblR5cGVz
ICE9IFR5cGVOb3RoaW5nICYmIChtX3NlZW5UeXBlcyAmIHRlc3QpID09IG1fc2VlblR5cGVzOwog
fQogCiBTdHJpbmcgVHlwZVNldDo6ZGlzcGxheU5hbWUoKSBjb25zdApAQCAtMzUzLDExICszNTMs
NiBAQCBTdHJpbmcgVHlwZVNldDo6dG9KU09OU3RyaW5nKCkgY29uc3QKICAgICByZXR1cm4ganNv
bi50b1N0cmluZygpOwogfQogCi12b2lkIFR5cGVTZXQ6OmR1bXBTZWVuVHlwZXMoKQotewotICAg
IGRhdGFMb2coc2VlblR5cGVzKCksICJcbiIpOwotfQotCiBTdHJ1Y3R1cmVTaGFwZTo6U3RydWN0
dXJlU2hhcGUoKQogICAgIDogbV9wcm90byhudWxscHRyKQogICAgICwgbV9wcm9wZXJ0eUhhc2go
bnVsbHB0cikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVTZXQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlU2V0LmgJKHJl
dmlzaW9uIDE3NDEzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVTZXQu
aAkod29ya2luZyBjb3B5KQpAQCAtMTAwLDcgKzEwMCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGFk
ZFR5cGVJbmZvcm1hdGlvbihSdW50aW1lVHlwZSwgUGFzc1JlZlB0cjxTdHJ1Y3R1cmVTaGFwZT4s
IFN0cnVjdHVyZUlEKTsKICAgICBzdGF0aWMgUnVudGltZVR5cGUgZ2V0UnVudGltZVR5cGVGb3JW
YWx1ZShKU1ZhbHVlKTsKICAgICB2b2lkIGludmFsaWRhdGVDYWNoZSgpOwotICAgIEpTX0VYUE9S
VF9QUklWQVRFIFN0cmluZyBzZWVuVHlwZXMoKSBjb25zdDsKKyAgICBTdHJpbmcgZHVtcFR5cGVz
KCkgY29uc3Q7CiAgICAgU3RyaW5nIGRpc3BsYXlOYW1lKCkgY29uc3Q7CiAgICAgUGFzc1JlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiBhbGxQcmltaXRpdmVUeXBlTmFt
ZXMoKSBjb25zdDsKICAgICBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlN0cnVjdHVyZURlc2NyaXB0aW9uPj4gYWxsU3Ry
dWN0dXJlUmVwcmVzZW50YXRpb25zKCkgY29uc3Q7CkBAIC0xMDksMTAgKzEwOSwxMCBAQCBwdWJs
aWM6CiAgICAgU3RyaW5nIGxlYXN0Q29tbW9uQW5jZXN0b3IoKSBjb25zdDsKICAgICBQYXNzUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR5cGVTZXQ+IGluc3BlY3RvclR5cGVT
ZXQoKSBjb25zdDsKICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX3NlZW5UeXBl
cyA9PSBUeXBlTm90aGluZzsgfQorICAgIGJvb2wgZG9lc1R5cGVDb25mb3JtVG8odWludDMyX3Qg
dGVzdCkgY29uc3Q7CisgICAgdWludDMyX3Qgc2VlblR5cGVzKCkgY29uc3QgeyByZXR1cm4gbV9z
ZWVuVHlwZXM7IH0KIAogcHJpdmF0ZToKLSAgICB2b2lkIGR1bXBTZWVuVHlwZXMoKTsKLSAgICBi
b29sIGRvZXNUeXBlQ29uZm9ybVRvKHVpbnQzMl90IHRlc3QpIGNvbnN0OwogCiAgICAgdWludDMy
X3QgbV9zZWVuVHlwZXM7CiAgICAgYm9vbCBtX2lzT3ZlcmZsb3duOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Rlc3RzL3R5cGVQcm9maWxlci9kZmctaml0LW9wdGltaXphdGlvbnMuanMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3R5cGVQcm9maWxlci9k
Zmctaml0LW9wdGltaXphdGlvbnMuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvdGVzdHMvdHlwZVByb2ZpbGVyL2RmZy1qaXQtb3B0aW1pemF0aW9ucy5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDM4IEBACitsb2FkKCIuL2RyaXZlci9kcml2ZXIuanMiKTsKKwor
ZnVuY3Rpb24gdGllclVwVG9ERkcoZnVuYywgYXJnKSAKK3sKKyAgICBmb3IgKHZhciBpID0gMDsg
aSA8IDEwMDA7IGkrKykKKyAgICAgICAgZnVuYyhhcmcpOworfQorCit2YXIgdHlwZXMgPSBbVC5C
b29sZWFuLCBULkludGVnZXIsIFQuTnVsbCwgVC5OdW1iZXIsIFQuU3RyaW5nLCBULlVuZGVmaW5l
ZF07Cit2YXIgdmFsdWVzID0gW3RydWUsIDEsIG51bGwsIDEuMSwgImhlbGxvIiwgdW5kZWZpbmVk
XTsKK3ZhciBmdW5jcyA9IFtmdW5jdGlvbih4KSB7IHJldHVybiB4OyB9LCBmdW5jdGlvbih4KSB7
IHJldHVybiB4OyB9LCBmdW5jdGlvbih4KSB7IHJldHVybiB4OyB9LCAKKyAgICBmdW5jdGlvbih4
KSB7IHJldHVybiB4OyB9LCBmdW5jdGlvbih4KSB7IHJldHVybiB4OyB9LCBmdW5jdGlvbih4KSB7
IHJldHVybiB4OyB9XQorCithc3NlcnQodHlwZXMubGVuZ3RoID09PSB2YWx1ZXMubGVuZ3RoICYm
IHZhbHVlcy5sZW5ndGggPT09IGZ1bmNzLmxlbmd0aCk7CisKKy8vIE1ha2Ugc3VyZSBiYXNlbGlu
ZSBERkcgdHlwZSBjaGVjayBvcHRpbWl6YXRpb25zIHdvcmsuCisvLyBUaWVyIHVwIGVhY2ggZnVu
Y3Rpb24gb24gYSBkaWZmZXJlbnQgdHlwZSwgdGhlbiBjYWxsIGl0IHdpdGggYWxsIG90aGVyIHBy
aW1pdGl2ZSB0eXBlcyB0byBtYWtlIHN1cmUgdGhleSdyZSByZWNvcmRlZC4KK2ZvciAodmFyIGkg
PSAwOyBpIDwgdHlwZXMubGVuZ3RoOyBpKyspIHsKKyAgICB2YXIgZnVuYyA9IGZ1bmNzW2ldOwor
ICAgIHZhciB0eXBlID0gdHlwZXNbaV07CisgICAgdmFyIHZhbHVlID0gdmFsdWVzW2ldOworICAg
IG5vSW5saW5lKGZ1bmMpOworICAgIHRpZXJVcFRvREZHKGZ1bmMsIHZhbHVlKTsKKyAgICB2YXIg
dHlwZUluZm8gPSBmaW5kVHlwZUZvckV4cHJlc3Npb24oZnVuYywgIngiKTsgCisgICAgYXNzZXJ0
KHR5cGVJbmZvLmluc3RydWN0aW9uVHlwZVNldC5wcmltaXRpdmVUeXBlTmFtZXMubGVuZ3RoID09
PSAxLCAiT25seSBvbmUgcHJpbWl0aXZlIHR5cGUgc2hvdWxkIGhhdmUgYmVlbiBzZWVuIHNvIGZh
ci4iKTsKKyAgICBhc3NlcnQodHlwZUluZm8uaW5zdHJ1Y3Rpb25UeXBlU2V0LnByaW1pdGl2ZVR5
cGVOYW1lcy5pbmRleE9mKHR5cGUpICE9PSAtMSwgIlNob3VsZCBoYXZlIGJlZW4gb3B0aW1pemVk
IG9uIHR5cGU6ICIgKyB0eXBlKTsKKyAgICBmb3IgKHZhciBqID0gMDsgaiA8IHR5cGVzLmxlbmd0
aDsgaisrKSB7CisgICAgICAgIGlmICh0eXBlID09PSBULk51bWJlciAmJiB0eXBlc1tqXSA9PT0g
VC5JbnRlZ2VyKSB7CisgICAgICAgICAgICAvLyBJZiB3ZSBvcHRpbWl6ZSBvbiB0eXBlIE51bWJl
ciwgYnV0IHdlIHBhc3MgaW4gYW4gSW50ZWdlciwgb3VyIHR5cGVjaGVjayB3aWxsIHN0aWxsIHBh
c3MsIHNvIHdlIHdvbnQgZGlyZWN0bHkgZ2V0CisgICAgICAgICAgICAvLyB0eXBlIEludGVnZXIg
YmVjYXVzZSBULkludGVnZXIgaXMgaW1wbGllZCB0byBiZSBjb250YWluZWQgaW4gVC5OdW1iZXIu
CisgICAgICAgICAgICBjb250aW51ZTsgCisgICAgICAgIH0KKworICAgICAgICBmdW5jKHZhbHVl
c1tqXSk7CisgICAgICAgIHR5cGVJbmZvID0gZmluZFR5cGVGb3JFeHByZXNzaW9uKGZ1bmMsICJ4
Iik7CisgICAgICAgIGFzc2VydCh0eXBlSW5mby5pbnN0cnVjdGlvblR5cGVTZXQucHJpbWl0aXZl
VHlwZU5hbWVzLmluZGV4T2YodHlwZXNbal0pICE9PSAtMSwgIlNob3VsZCBoYXZlIHNlZW4gdHlw
ZTogIiArIHR5cGVzW2pdICsgIiAiICsgaSArICIsIiArIGopOworICAgIH0KK30K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>239036</attachid>
            <date>2014-10-01 11:22:35 -0700</date>
            <delta_ts>2014-10-01 11:26:27 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>27721</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTc0MTYxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY1IEBA
CisyMDE0LTEwLTAxICBTYWFtIEJhcmF0aSAgPHNhYW1iYXJhdGkxQGdtYWlsLmNvbT4KKworICAg
ICAgICBTdXBwb3J0IHRoZSB0eXBlIHByb2ZpbGVyIGluIHRoZSBERkcKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjcxMgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggaW1wbGVtZW50cyBv
cF9wcm9maWxlX3R5cGUgaW5zaWRlIHRoZSBERkcgYXMgdGhlIG5vZGU6IFByb2ZpbGVUeXBlLgor
ICAgICAgICBUaGUgREZHIHdpbGwgY29udmVydCB0aGUgUHJvZmlsZVR5cGUgbm9kZSBpbnRvIGEg
Q2hlY2sgbm9kZSBpbiB0aGUgY2FzZXMgd2hlcmUKKyAgICAgICAgcGFzc2luZyBhIHR5cGUgY2hl
Y2sgaXMgZXF1aXZhbGVudCB0byB3cml0aW5nIHRvIHRoZSBUeXBlUHJvZmlsZXJMb2cuIFRoaXMK
KyAgICAgICAgZ2l2ZXMgdGhlIERGRyB0aGUgcG90ZW50aWFsIHRvIG9wdGltaXplIG91dCBtdWx0
aXBsZSBQcm9maWxlVHlwZSBub2RlcyBpbnRvCisgICAgICAgIGEgc2luZ2xlIENoZWNrIG5vZGUu
CisKKyAgICAgICAgV2hlbiB0aGUgREZHIGRvZXNuJ3QgY29udmVydCBQcm9maWxlVHlwZSBpbnRv
IGEgQ2hlY2sgbm9kZSwgaXQgd2lsbCBnZW5lcmF0ZQorICAgICAgICB0aGUgc2FtZSBpbmxpbmUg
Y29kZSBhcyB0aGUgYmFzZWxpbmUgSklUIGRvZXMgZm9yIHdyaXRpbmcgYW4gZW50cnkgdG8gdGhl
CisgICAgICAgIFR5cGVQcm9maWxlckxvZy4KKworICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdElu
dGVycHJldGVySW5saW5lcy5oOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0
ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyk6CisgICAgICAgICogZGZnL0RG
R0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6
cGFyc2VCbG9jayk6CisgICAgICAgICogZGZnL0RGR0NhcGFiaWxpdGllcy5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6Y2FwYWJpbGl0eUxldmVsKToKKyAgICAgICAgKiBkZmcvREZHQ2xvYmJlcml6
ZS5oOgorICAgICAgICAoSlNDOjpERkc6OmNsb2JiZXJpemUpOgorICAgICAgICAqIGRmZy9ERkdE
b2VzR0MuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmRvZXNHQyk6CisgICAgICAgICogZGZnL0RG
R0RyaXZlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Y29tcGlsZUltcGwpOgorICAgICAgICAq
IGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjpm
aXh1cE5vZGUpOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6
Tm9kZTo6dHlwZUxvY2F0aW9uKToKKyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUuaDoKKyAgICAg
ICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMu
aDoKKyAgICAgICAgKiBkZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OlByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlOjpwcm9wYWdhdGUpOgor
ICAgICAgICAqIGRmZy9ERkdTYWZlVG9FeGVjdXRlLmg6CisgICAgICAgIChKU0M6OkRGRzo6c2Fm
ZVRvRXhlY3V0ZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNhbGxPcGVyYXRpb24pOgorICAgICAgICAqIGRm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAg
KiBydW50aW1lL1R5cGVQcm9maWxlci5jcHA6CisgICAgICAgIChKU0M6OlR5cGVQcm9maWxlcjo6
bG9nVHlwZXNGb3JUeXBlTG9jYXRpb24pOgorICAgICAgICAqIHJ1bnRpbWUvVHlwZVNldC5jcHA6
CisgICAgICAgIChKU0M6OlR5cGVTZXQ6OmR1bXBUeXBlcyk6CisgICAgICAgIChKU0M6OlR5cGVT
ZXQ6OmRvZXNUeXBlQ29uZm9ybVRvKToKKyAgICAgICAgTWFrZSB0aGlzIG1ldGhvZCBwdWJsaWMg
c28gb3RoZXJzIGNhbiByZWFzb24gYWJvdXQgdGhlIHR5cGVzIGEgVHlwZVNldCBoYXMgc2Vlbi4K
KyAgICAgICAgKEpTQzo6VHlwZVNldDo6c2VlblR5cGVzKTogRGVsZXRlZC4KKyAgICAgICAgUmVu
YW1lZCB0byBkdW1wVHlwZXMgc28gdGhlIG1ldGhvZCBzZWVuVHlwZXMgY2FuIGJlIHVzZWQgYXMg
YSBwdWJsaWMgZ2V0dGVyLgorICAgICAgICAoSlNDOjpUeXBlU2V0OjpkdW1wU2VlblR5cGVzKTog
RGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL1R5cGVTZXQuaDoKKyAgICAgICAgKEpTQzo6VHlw
ZVNldDo6c2VlblR5cGVzKToKKyAgICAgICAgKiB0ZXN0cy90eXBlUHJvZmlsZXIvZGZnLWppdC1v
cHRpbWl6YXRpb25zLmpzOiBBZGRlZC4KKyAgICAgICAgKHRpZXJVcFRvREZHKToKKyAgICAgICAg
KGZ1bmNzKToKKyAgICAgICAgKC5yZXR1cm4pOgorCiAyMDE0LTA5LTMwICBCcmlhbiBKLiBCdXJn
ICA8YnVyZ0Bjcy53YXNoaW5ndG9uLmVkdT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBFcnJv
clN0cmluZyBzaG91bGQgYmUgcGFzc2VkIGJ5IHJlZmVyZW5jZQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGlu
ZXMuaAkocmV2aXNpb24gMTc0MTYxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
YnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTg1LDYgKzE5
ODUsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgY2Fz
ZSBCcmVha3BvaW50OgogICAgIGNhc2UgUHJvZmlsZVdpbGxDYWxsOgogICAgIGNhc2UgUHJvZmls
ZURpZENhbGw6CisgICAgY2FzZSBQcm9maWxlVHlwZToKICAgICBjYXNlIFBoYW50b206CiAgICAg
Y2FzZSBIYXJkUGhhbnRvbToKICAgICBjYXNlIENvdW50RXhlY3V0aW9uOgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9u
IDE3NDE2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODkzLDYgKzI4OTMsMTIgQEAgYm9vbCBCeXRlQ29kZVBh
cnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfaW5p
dF9nbG9iYWxfY29uc3QpOwogICAgICAgICB9CiAKKyAgICAgICAgY2FzZSBvcF9wcm9maWxlX3R5
cGU6IHsKKyAgICAgICAgICAgIE5vZGUqIHZhbHVlVG9Qcm9maWxlID0gZ2V0KFZpcnR1YWxSZWdp
c3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSk7CisgICAgICAgICAgICBhZGRU
b0dyYXBoKFByb2ZpbGVUeXBlLCBPcEluZm8oY3VycmVudEluc3RydWN0aW9uWzJdLnUubG9jYXRp
b24pLCB2YWx1ZVRvUHJvZmlsZSk7CisgICAgICAgICAgICBORVhUX09QQ09ERShvcF9wcm9maWxl
X3R5cGUpOworICAgICAgICB9CisKICAgICAgICAgLy8gPT09IEJsb2NrIHRlcm1pbmF0b3JzLiA9
PT0KIAogICAgICAgICBjYXNlIG9wX2ptcDogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNpb24gMTc0MTYxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMjAsNiArMTIwLDcgQEAgQ2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbChPcGNvZGVJ
RAogICAgIGNhc2Ugb3BfZGVidWc6CiAgICAgY2FzZSBvcF9wcm9maWxlX3dpbGxfY2FsbDoKICAg
ICBjYXNlIG9wX3Byb2ZpbGVfZGlkX2NhbGw6CisgICAgY2FzZSBvcF9wcm9maWxlX3R5cGU6CiAg
ICAgY2FzZSBvcF9tb3Y6CiAgICAgY2FzZSBvcF9jYXB0dXJlZF9tb3Y6CiAgICAgY2FzZSBvcF9j
aGVja19oYXNfaW5zdGFuY2U6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Ns
b2JiZXJpemUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Ns
b2JiZXJpemUuaAkocmV2aXNpb24gMTc0MTYxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDbG9iYmVyaXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3Miw2ICsyNzIsNyBAQCB2b2lk
IGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgY2FzZSBCcmVha3BvaW50
OgogICAgIGNhc2UgUHJvZmlsZVdpbGxDYWxsOgogICAgIGNhc2UgUHJvZmlsZURpZENhbGw6Cisg
ICAgY2FzZSBQcm9maWxlVHlwZToKICAgICBjYXNlIFN0b3JlQmFycmllcjoKICAgICBjYXNlIFN0
b3JlQmFycmllcldpdGhOdWxsQ2hlY2s6CiAgICAgY2FzZSBQdXRCeU9mZnNldEhpbnQ6CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCShyZXZpc2lvbiAxNzQxNjEp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEyNCw2ICsxMjQsNyBAQCBib29sIGRvZXNHQyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5v
ZGUpCiAgICAgY2FzZSBCcmVha3BvaW50OgogICAgIGNhc2UgUHJvZmlsZVdpbGxDYWxsOgogICAg
IGNhc2UgUHJvZmlsZURpZENhbGw6CisgICAgY2FzZSBQcm9maWxlVHlwZToKICAgICBjYXNlIENo
ZWNrSGFzSW5zdGFuY2U6CiAgICAgY2FzZSBJbnN0YW5jZU9mOgogICAgIGNhc2UgSXNVbmRlZmlu
ZWQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCShyZXZpc2lv
biAxNzQxNjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAj
aW5jbHVkZSAiT3B0aW9ucy5oIgogI2luY2x1ZGUgIlNhbXBsaW5nVG9vbC5oIgorI2luY2x1ZGUg
IlR5cGVQcm9maWxlckxvZy5oIgogI2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+CiAKICNpZiBFTkFC
TEUoRlRMX0pJVCkKQEAgLTkxLDYgKzkyLDkgQEAgc3RhdGljIENvbXBpbGF0aW9uUmVzdWx0IGNv
bXBpbGVJbXBsKAogICAgIAogICAgIGlmIChDYWxsRWRnZUxvZzo6aXNFbmFibGVkKCkpCiAgICAg
ICAgIHZtLmVuc3VyZUNhbGxFZGdlTG9nKCkucHJvY2Vzc0xvZygpOworCisgICAgaWYgKHZtLnR5
cGVQcm9maWxlcigpKQorICAgICAgICB2bS50eXBlUHJvZmlsZXJMb2coKS0+cHJvY2Vzc0xvZ0Vu
dHJpZXMoQVNDSUlMaXRlcmFsKCJQcmVwYXJpbmcgZm9yIERGRyBjb21waWxhdGlvbi4iKSk7CiAg
ICAgCiAgICAgUmVmUHRyPFBsYW4+IHBsYW4gPSBhZG9wdFJlZigKICAgICAgICAgbmV3IFBsYW4o
Y29kZUJsb2NrLCBwcm9maWxlZERGR0NvZGVCbG9jaywgbW9kZSwgb3NyRW50cnlCeXRlY29kZUlu
ZGV4LCBtdXN0SGFuZGxlVmFsdWVzKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9uIDE3NDE2MSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0
LDcgQEAKICNpbmNsdWRlICJERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5oIgogI2luY2x1
ZGUgIkRGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgi
CisjaW5jbHVkZSAiVHlwZUxvY2F0aW9uLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKIApAQCAtMTExMiw2ICsxMTEzLDM4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBmaXhF
ZGdlPEtub3duSW50MzJVc2U+KG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CisgICAgICAgIGNhc2UgUHJvZmlsZVR5cGU6IHsKKyAgICAgICAgICAgIC8vIFdl
IHdhbnQgdG8gaW5zZXJ0IHR5cGUgY2hlY2tzIGJhc2VkIG9uIHRoZSBpbnN0cnVjdGlvblR5cGVT
ZXQgb2YgdGhlIFR5cGVMb2NhdGlvbiwgbm90IHRoZSBnbG9iYWxUeXBlU2V0LgorICAgICAgICAg
ICAgLy8gQmVjYXVzZSB0aGUgaW5zdHJ1Y3Rpb25UeXBlU2V0IGlzIGNvbnRhaW5lZCBpbiBnbG9i
YWxUeXBlU2V0LCBpZiB3ZSBwcm9kdWNlIGEgdHlwZSBjaGVjayBmb3IKKyAgICAgICAgICAgIC8v
IHR5cGUgVCBmb3IgdGhlIGluc3RydWN0aW9uVHlwZVNldCwgdGhlIGdsb2JhbCB0eXBlIHNldCBt
dXN0IGFsc28gaGF2ZSBpbmZvcm1hdGlvbiBmb3IgdHlwZSBULgorICAgICAgICAgICAgLy8gU28g
aWYgaXQgdGhlIHR5cGUgY2hlY2sgc3VjY2VlZHMgZm9yIHR5cGUgVCBpbiB0aGUgaW5zdHJ1Y3Rp
b25UeXBlU2V0LCBhIHR5cGUgY2hlY2sgZm9yIHR5cGUgVCAKKyAgICAgICAgICAgIC8vIGluIHRo
ZSBnbG9iYWxUeXBlU2V0IHdvdWxkJ3ZlIGFsc28gc3VjY2VlZGVkLgorICAgICAgICAgICAgLy8g
KFRoZSBvdGhlciBkaXJlY3Rpb24gZG9lcyBub3QgaG9sZCBpbiBnZW5lcmFsKS4KKworICAgICAg
ICAgICAgUmVmUHRyPFR5cGVTZXQ+IHR5cGVTZXQgPSBub2RlLT50eXBlTG9jYXRpb24oKS0+bV9p
bnN0cnVjdGlvblR5cGVTZXQ7CisgICAgICAgICAgICB1aW50MzJfdCBzZWVuVHlwZXMgPSB0eXBl
U2V0LT5zZWVuVHlwZXMoKTsKKyAgICAgICAgICAgIGlmICh0eXBlU2V0LT5kb2VzVHlwZUNvbmZv
cm1UbyhUeXBlTWFjaGluZUludCkpIHsKKyAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9D
aGVjaygpOworICAgICAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24obm9kZS0+Y2hp
bGQxKCktPnByZWRpY3Rpb24oKSkpCisgICAgICAgICAgICAgICAgICAgIGZpeEVkZ2U8SW50MzJV
c2U+KG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgICAgIGZpeEVkZ2U8TWFjaGluZUludFVzZT4obm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAg
ICAgfSBlbHNlIGlmICh0eXBlU2V0LT5kb2VzVHlwZUNvbmZvcm1UbyhUeXBlTnVtYmVyIHwgVHlw
ZU1hY2hpbmVJbnQpKSB7CisgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvQ2hlY2soKTsK
KyAgICAgICAgICAgICAgICBmaXhFZGdlPE51bWJlclVzZT4obm9kZS0+Y2hpbGQxKCkpOworICAg
ICAgICAgICAgfSBlbHNlIGlmICh0eXBlU2V0LT5kb2VzVHlwZUNvbmZvcm1UbyhUeXBlU3RyaW5n
KSkgeworICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb0NoZWNrKCk7CisgICAgICAgICAg
ICAgICAgZml4RWRnZTxTdHJpbmdVc2U+KG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIH0g
ZWxzZSBpZiAodHlwZVNldC0+ZG9lc1R5cGVDb25mb3JtVG8oVHlwZUJvb2xlYW4pKSB7CisgICAg
ICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvQ2hlY2soKTsKKyAgICAgICAgICAgICAgICBmaXhF
ZGdlPEJvb2xlYW5Vc2U+KG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAo
dHlwZVNldC0+ZG9lc1R5cGVDb25mb3JtVG8oVHlwZVVuZGVmaW5lZCB8IFR5cGVOdWxsKSAmJiAo
c2VlblR5cGVzICYgVHlwZVVuZGVmaW5lZCkgJiYgKHNlZW5UeXBlcyAmIFR5cGVOdWxsKSkgewor
ICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb0NoZWNrKCk7CisgICAgICAgICAgICAgICAg
Zml4RWRnZTxPdGhlclVzZT4obm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICAgICAgCiAjaWYgIUFTU0VSVF9ESVNB
QkxFRAogICAgICAgICAvLyBIYXZlIHRoZXNlIG5vLW9wIGNhc2VzIGhlcmUgdG8gZW5zdXJlIHRo
YXQgbm9ib2R5IGZvcmdldHMgdG8gYWRkIGhhbmRsZXJzIGZvciBuZXcgb3Bjb2Rlcy4KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAxNzQxNjEpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNiAr
NDgsNyBAQAogI2luY2x1ZGUgIlB1dEJ5SWRWYXJpYW50LmgiCiAjaW5jbHVkZSAiU3BlY3VsYXRl
ZFR5cGUuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVTZXQuaCIKKyNpbmNsdWRlICJUeXBlTG9jYXRp
b24uaCIKICNpbmNsdWRlICJWYWx1ZVByb2ZpbGUuaCIKICNpbmNsdWRlIDx3dGYvTGlzdER1bXAu
aD4KIApAQCAtMTc3Myw2ICsxNzc0LDExIEBAIHN0cnVjdCBOb2RlIHsKICAgICB7CiAgICAgICAg
IHJldHVybiBjYW5TcGVjdWxhdGVJbnQ1Mihzb3VyY2VGb3IocGFzcykpOwogICAgIH0KKworICAg
IFR5cGVMb2NhdGlvbiogdHlwZUxvY2F0aW9uKCkKKyAgICB7CisgICAgICAgIHJldHVybiByZWlu
dGVycHJldF9jYXN0PFR5cGVMb2NhdGlvbio+KG1fb3BJbmZvKTsKKyAgICB9CiAgICAgCiAgICAg
dm9pZCBkdW1wQ2hpbGRyZW4oUHJpbnRTdHJlYW0mIG91dCkKICAgICB7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCShyZXZpc2lvbiAxNzQxNjEpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1
NCw2ICsyNTQsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgbWFjcm8o
TmV3U3RyaW5nT2JqZWN0LCBOb2RlUmVzdWx0SlMpIFwKICAgICBtYWNybyhNYWtlUm9wZSwgTm9k
ZVJlc3VsdEpTKSBcCiAgICAgbWFjcm8oSW4sIE5vZGVSZXN1bHRCb29sZWFuIHwgTm9kZU11c3RH
ZW5lcmF0ZSB8IE5vZGVDbG9iYmVyc1dvcmxkKSBcCisgICAgbWFjcm8oUHJvZmlsZVR5cGUsIE5v
ZGVNdXN0R2VuZXJhdGUpIFwKICAgICBcCiAgICAgLyogTm9kZXMgdXNlZCBmb3IgYWN0aXZhdGlv
bnMuIEFjdGl2YXRpb24gc3VwcG9ydCB3b3JrcyBieSBoYXZpbmcgaXQgYW5jaG9yZWQgYXQgKi9c
CiAgICAgLyogZXBpbGdvdWVzIHZpYSBUZWFyT2ZmQWN0aXZhdGlvbiwgYW5kIGFsbCBDcmVhdGVB
Y3RpdmF0aW9uIG5vZGVzIGtlcHQgYWxpdmUgYnkgKi9cCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDE3NDE2MSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTUzLDYgKzUzLDcgQEAKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiUmVwYXRj
aC5oIgogI2luY2x1ZGUgIlN0cmluZ0NvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiVHlwZVByb2Zp
bGVyTG9nLmgiCiAjaW5jbHVkZSAiVHlwZWRBcnJheUlubGluZXMuaCIKICNpbmNsdWRlIDx3dGYv
SW5saW5lQVNNLmg+CiAKQEAgLTEwNjIsNiArMTA2MywxMSBAQCBpbnQ2NF90IEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uQ29udmVydERvCiAgICAgcmV0dXJuIHRyeUNvbnZlcnRUb0ludDUyKHZhbHVl
KTsKIH0KIAordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblByb2Nlc3NUeXBlUHJvZmlsZXJM
b2dERkcoRXhlY1N0YXRlKiBleGVjKSAKK3sKKyAgICBleGVjLT52bSgpLnR5cGVQcm9maWxlckxv
ZygpLT5wcm9jZXNzTG9nRW50cmllcyhBU0NJSUxpdGVyYWwoIkxvZyBGdWxsLCBjYWxsZWQgZnJv
bSBpbnNpZGUgREZHLiIpKTsKK30KKwogc2l6ZV90IEpJVF9PUEVSQVRJT04gZGZnQ29udmVydEpT
VmFsdWVUb0ludDMyKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgdmFsdWUpCiB7CiAg
ICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09wZXJhdGlvbnMuaAkocmV2aXNpb24gMTc0MTYxKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzMCw2ICsxMzAsOCBA
QCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTm90aWZ5V3JpdGUoCiBpbnQ2NF90IEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uQ29udmVydEJveGVkRG91YmxlVG9JbnQ1MihFbmNvZGVkSlNWYWx1
ZSk7CiBpbnQ2NF90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29udmVydERvdWJsZVRvSW50NTIo
ZG91YmxlKTsKIAordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblByb2Nlc3NUeXBlUHJvZmls
ZXJMb2dERkcoRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOworCiAvLyBUaGVzZSBvcGVyYXRpb25z
IGltcGxlbWVudCB0aGUgaW1wbGljaXRseSBjYWxsZWQgVG9JbnQzMiBhbmQgVG9Cb29sZWFuIGNv
bnZlcnNpb25zIGZyb20gRVM1LgogLy8gVGhpcyBjb252ZXJzaW9uIHJldHVybnMgYW4gaW50MzJf
dCB3aXRoaW4gYSBzaXplX3Qgc3VjaCB0aGF0IHRoZSB2YWx1ZSBpcyB6ZXJvIGV4dGVuZGVkIHRv
IGZpbGwgdGhlIHJlZ2lzdGVyLgogc2l6ZV90IEpJVF9PUEVSQVRJT04gZGZnQ29udmVydEpTVmFs
dWVUb0ludDMyKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rp
b25Qcm9wYWdhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTc0MTYxKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTY0NSw2ICs2NDUsNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIEJyZWFrcG9p
bnQ6CiAgICAgICAgIGNhc2UgUHJvZmlsZVdpbGxDYWxsOgogICAgICAgICBjYXNlIFByb2ZpbGVE
aWRDYWxsOgorICAgICAgICBjYXNlIFByb2ZpbGVUeXBlOgogICAgICAgICBjYXNlIENoZWNrSGFz
SW5zdGFuY2U6CiAgICAgICAgIGNhc2UgVGhyb3dSZWZlcmVuY2VFcnJvcjoKICAgICAgICAgY2Fz
ZSBGb3JjZU9TUkV4aXQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVU
b0V4ZWN1dGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nh
ZmVUb0V4ZWN1dGUuaAkocmV2aXNpb24gMTc0MTYxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5OCw2ICsxOTgsNyBA
QCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0CiAgICAgY2FzZSBCcmVh
a3BvaW50OgogICAgIGNhc2UgUHJvZmlsZVdpbGxDYWxsOgogICAgIGNhc2UgUHJvZmlsZURpZENh
bGw6CisgICAgY2FzZSBQcm9maWxlVHlwZToKICAgICBjYXNlIENoZWNrSGFzSW5zdGFuY2U6CiAg
ICAgY2FzZSBJbnN0YW5jZU9mOgogICAgIGNhc2UgSXNVbmRlZmluZWQ6CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJ
KHJldmlzaW9uIDE3NDE2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNs
dWRlICJKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCIKICNpbmNsdWRlICJPYmplY3RQcm90b3R5
cGUuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiVHlwZVByb2ZpbGVyTG9n
LmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIApAQCAtNDg1Niw2ICs0ODU3
LDUxIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAg
Y2VsbFJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CisgICAg
Y2FzZSBQcm9maWxlVHlwZTogeworICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBu
b2RlLT5jaGlsZDEoKSk7CisgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMSh0aGlzKTsKKyAg
ICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gyKHRoaXMpOworICAgICAgICBHUFJUZW1wb3Jhcnkg
c2NyYXRjaDModGhpcyk7CisKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gxR1BSID0gc2NyYXRjaDEu
Z3ByKCk7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoMkdQUiA9IHNjcmF0Y2gyLmdwcigpOworICAg
ICAgICBHUFJSZWcgc2NyYXRjaDNHUFIgPSBzY3JhdGNoMy5ncHIoKTsKKworICAgICAgICAvLyBM
b2FkIHRoZSBUeXBlUHJvZmlsZXJMb2cgaW50byBTY3JhdGNoMi4KKyAgICAgICAgVHlwZVByb2Zp
bGVyTG9nKiBjYWNoZWRUeXBlUHJvZmlsZXJMb2cgPSBtX2ppdC52bSgpLT50eXBlUHJvZmlsZXJM
b2coKTsKKyAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKGNhY2hlZFR5cGVQcm9maWxl
ckxvZyksIHNjcmF0Y2gyR1BSKTsKKworICAgICAgICAvLyBMb2FkIHRoZSBuZXh0IExvZ0VudHJ5
IGludG8gU2NyYXRjaDEuCisgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3Moc2NyYXRjaDJHUFIsIFR5cGVQcm9maWxlckxvZzo6Y3VycmVudExvZ0VudHJ5T2Zmc2V0
KCkpLCBzY3JhdGNoMUdQUik7CisKKyAgICAgICAgLy8gU3RvcmUgdGhlIEpTVmFsdWUgb250byB0
aGUgbG9nIGVudHJ5LgorICAgICAgICBtX2ppdC5zdG9yZTMyKHZhbHVlLnRhZ0dQUigpLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoMUdQUiwgVHlwZVByb2ZpbGVyTG9nOjpMb2dFbnRy
eTo6dmFsdWVPZmZzZXQoKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcp
KSk7CisgICAgICAgIG1faml0LnN0b3JlMzIodmFsdWUucGF5bG9hZEdQUigpLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhzY3JhdGNoMUdQUiwgVHlwZVByb2ZpbGVyTG9nOjpMb2dFbnRyeTo6dmFs
dWVPZmZzZXQoKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSkp
OworCisgICAgICAgIC8vIFN0b3JlIHRoZSBzdHJ1Y3R1cmVJRCBvZiB0aGUgY2VsbCBpZiB2YWx1
ZUdQUiBpcyBhIGNlbGwsIG90aGVyd2lzZSwgc3RvcmUgMCBvbiB0aGUgbG9nIGVudHJ5LgorICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBpc05vdENlbGwgPSBicmFuY2hOb3RDZWxsKHZhbHVl
LmpzVmFsdWVSZWdzKCkpOworICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3ModmFsdWUucGF5bG9hZEdQUigpLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBz
Y3JhdGNoM0dQUik7CisgICAgICAgIG1faml0LnN0b3JlMzIoc2NyYXRjaDNHUFIsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2gxR1BSLCBUeXBlUHJvZmlsZXJMb2c6OkxvZ0VudHJ5Ojpz
dHJ1Y3R1cmVJRE9mZnNldCgpKSk7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNraXBJ
c0NlbGwgPSBtX2ppdC5qdW1wKCk7CisgICAgICAgIGlzTm90Q2VsbC5saW5rKCZtX2ppdCk7Cisg
ICAgICAgIG1faml0LnN0b3JlMzIoVHJ1c3RlZEltbTMyKDApLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhzY3JhdGNoMUdQUiwgVHlwZVByb2ZpbGVyTG9nOjpMb2dFbnRyeTo6c3RydWN0dXJlSURP
ZmZzZXQoKSkpOworICAgICAgICBza2lwSXNDZWxsLmxpbmsoJm1faml0KTsKKworICAgICAgICAv
LyBTdG9yZSB0aGUgdHlwZUxvY2F0aW9uIG9uIHRoZSBsb2cgZW50cnkuCisgICAgICAgIFR5cGVM
b2NhdGlvbiogY2FjaGVkVHlwZUxvY2F0aW9uID0gbm9kZS0+dHlwZUxvY2F0aW9uKCk7CisgICAg
ICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cihjYWNoZWRUeXBlTG9jYXRpb24pLCBzY3JhdGNo
M0dQUik7CisgICAgICAgIG1faml0LnN0b3JlUHRyKHNjcmF0Y2gzR1BSLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhzY3JhdGNoMUdQUiwgVHlwZVByb2ZpbGVyTG9nOjpMb2dFbnRyeTo6bG9jYXRp
b25PZmZzZXQoKSkpOworCisgICAgICAgIC8vIEluY3JlbWVudCB0aGUgY3VycmVudCBsb2cgZW50
cnkuCisgICAgICAgIG1faml0LmFkZFB0cihUcnVzdGVkSW1tMzIoc2l6ZW9mKFR5cGVQcm9maWxl
ckxvZzo6TG9nRW50cnkpKSwgc2NyYXRjaDFHUFIpOworICAgICAgICBtX2ppdC5zdG9yZVB0cihz
Y3JhdGNoMUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaDJHUFIsIFR5cGVQcm9m
aWxlckxvZzo6Y3VycmVudExvZ0VudHJ5T2Zmc2V0KCkpKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAgY2xlYXJMb2cgPSBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFs
LCBzY3JhdGNoMUdQUiwgVHJ1c3RlZEltbVB0cihjYWNoZWRUeXBlUHJvZmlsZXJMb2ctPmxvZ0Vu
ZFB0cigpKSk7CisgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAgICAgc2xv
d1BhdGhDYWxsKGNsZWFyTG9nLCB0aGlzLCBvcGVyYXRpb25Qcm9jZXNzVHlwZVByb2ZpbGVyTG9n
REZHLCBOb1Jlc3VsdCkpOworCisgICAgICAgIG5vUmVzdWx0KG5vZGUpOworICAgICAgICBicmVh
azsKKyAgICB9CiAKICAgICBjYXNlIEZvcmNlT1NSRXhpdDogewogICAgICAgICB0ZXJtaW5hdGVT
cGVjdWxhdGl2ZUV4ZWN1dGlvbihJbmFkZXF1YXRlQ292ZXJhZ2UsIEpTVmFsdWVSZWdzKCksIDAp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklUNjQuY3BwCShyZXZpc2lvbiAxNzQxNjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBA
CiAjaW5jbHVkZSAiSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgiCiAjaW5jbHVkZSAiT2JqZWN0
UHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiU3BpbGxSZWdpc3RlcnNNb2RlLmgiCisjaW5jbHVkZSAi
VHlwZVByb2ZpbGVyTG9nLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIApA
QCAtNDkwMiw2ICs0OTAzLDc1IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSog
bm9kZSkKICAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwogICAgICAgICBicmVh
azsKICAgICB9CisgICAgY2FzZSBQcm9maWxlVHlwZTogeworICAgICAgICBKU1ZhbHVlT3BlcmFu
ZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIEdQUlRlbXBvcmFyeSBzY3Jh
dGNoMSh0aGlzKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gyKHRoaXMpOworICAgICAg
ICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDModGhpcyk7CisKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gx
R1BSID0gc2NyYXRjaDEuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoMkdQUiA9IHNjcmF0
Y2gyLmdwcigpOworICAgICAgICBHUFJSZWcgc2NyYXRjaDNHUFIgPSBzY3JhdGNoMy5ncHIoKTsK
KyAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisKKyAgICAgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXBMaXN0IGp1bXBUb0VuZDsKKworICAgICAgICBUeXBlTG9jYXRpb24qIGNh
Y2hlZFR5cGVMb2NhdGlvbiA9IG5vZGUtPnR5cGVMb2NhdGlvbigpOworICAgICAgICAvLyBDb21w
aWxlIGluIGEgcHJlZGljdGl2ZSB0eXBlIGNoZWNrLCBpZiBwb3NzaWJsZSwgdG8gc2VlIGlmIHdl
IGNhbiBza2lwIHdyaXRpbmcgdG8gdGhlIGxvZy4KKyAgICAgICAgLy8gVGhlc2UgdHlwZWNoZWNr
cyBhcmUgaW5saW5lZCB0byBtYXRjaCB0aG9zZSBvZiB0aGUgNjQtYml0IEpTVmFsdWUgdHlwZSBj
aGVja3MuCisgICAgICAgIGlmIChjYWNoZWRUeXBlTG9jYXRpb24tPm1fbGFzdFNlZW5UeXBlID09
IFR5cGVVbmRlZmluZWQpCisgICAgICAgICAgICBqdW1wVG9FbmQuYXBwZW5kKG1faml0LmJyYW5j
aDY0KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgdmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSkpOworICAgICAgICBlbHNl
IGlmIChjYWNoZWRUeXBlTG9jYXRpb24tPm1fbGFzdFNlZW5UeXBlID09IFR5cGVOdWxsKQorICAg
ICAgICAgICAganVtcFRvRW5kLmFwcGVuZChtX2ppdC5icmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6
RXF1YWwsIHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVu
Y29kZShqc051bGwoKSkpKSk7CisgICAgICAgIGVsc2UgaWYgKGNhY2hlZFR5cGVMb2NhdGlvbi0+
bV9sYXN0U2VlblR5cGUgPT0gVHlwZUJvb2xlYW4pIHsKKyAgICAgICAgICAgIG1faml0Lm1vdmUo
dmFsdWVHUFIsIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgIG1faml0LmFuZDY0KFRydXN0ZWRJ
bW0zMih+MSksIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgIGp1bXBUb0VuZC5hcHBlbmQobV9q
aXQuYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBzY3JhdGNoMkdQUiwgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW02NChWYWx1ZUZhbHNlKSkpOworICAgICAgICB9IGVsc2UgaWYgKGNh
Y2hlZFR5cGVMb2NhdGlvbi0+bV9sYXN0U2VlblR5cGUgPT0gVHlwZU1hY2hpbmVJbnQpCisgICAg
ICAgICAgICBqdW1wVG9FbmQuYXBwZW5kKG1faml0LmJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpB
Ym92ZU9yRXF1YWwsIHZhbHVlR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsK
KyAgICAgICAgZWxzZSBpZiAoY2FjaGVkVHlwZUxvY2F0aW9uLT5tX2xhc3RTZWVuVHlwZSA9PSBU
eXBlTnVtYmVyKQorICAgICAgICAgICAganVtcFRvRW5kLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0
NjQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHZhbHVlR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVt
YmVyUmVnaXN0ZXIpKTsKKyAgICAgICAgZWxzZSBpZiAoY2FjaGVkVHlwZUxvY2F0aW9uLT5tX2xh
c3RTZWVuVHlwZSA9PSBUeXBlU3RyaW5nKSB7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcCBpc05vdENlbGwgPSBicmFuY2hOb3RDZWxsKEpTVmFsdWVSZWdzKHZhbHVlR1BSKSk7Cisg
ICAgICAgICAgICBqdW1wVG9FbmQuYXBwZW5kKG1faml0LmJyYW5jaDgoTWFjcm9Bc3NlbWJsZXI6
OkVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh2YWx1ZUdQUiwgSlNDZWxsOjp0eXBlSW5m
b1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihTdHJpbmdUeXBlKSkpOworICAgICAgICAgICAg
aXNOb3RDZWxsLmxpbmsoJm1faml0KTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIExvYWQgdGhl
IFR5cGVQcm9maWxlckxvZyBpbnRvIFNjcmF0Y2gyLgorICAgICAgICBUeXBlUHJvZmlsZXJMb2cq
IGNhY2hlZFR5cGVQcm9maWxlckxvZyA9IG1faml0LnZtKCktPnR5cGVQcm9maWxlckxvZygpOwor
ICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoY2FjaGVkVHlwZVByb2ZpbGVyTG9nKSwg
c2NyYXRjaDJHUFIpOworCisgICAgICAgIC8vIExvYWQgdGhlIG5leHQgTG9nRW50cnkgaW50byBT
Y3JhdGNoMS4KKyAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhz
Y3JhdGNoMkdQUiwgVHlwZVByb2ZpbGVyTG9nOjpjdXJyZW50TG9nRW50cnlPZmZzZXQoKSksIHNj
cmF0Y2gxR1BSKTsKKworICAgICAgICAvLyBTdG9yZSB0aGUgSlNWYWx1ZSBvbnRvIHRoZSBsb2cg
ZW50cnkuCisgICAgICAgIG1faml0LnN0b3JlNjQodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHNjcmF0Y2gxR1BSLCBUeXBlUHJvZmlsZXJMb2c6OkxvZ0VudHJ5Ojp2YWx1ZU9mZnNl
dCgpKSk7CisKKyAgICAgICAgLy8gU3RvcmUgdGhlIHN0cnVjdHVyZUlEIG9mIHRoZSBjZWxsIGlm
IHZhbHVlR1BSIGlzIGEgY2VsbCwgb3RoZXJ3aXNlLCBzdG9yZSAwIG9uIHRoZSBsb2cgZW50cnku
CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaE5vdENlbGwo
SlNWYWx1ZVJlZ3ModmFsdWVHUFIpKTsKKyAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKHZhbHVlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3Jh
dGNoM0dQUik7CisgICAgICAgIG1faml0LnN0b3JlMzIoc2NyYXRjaDNHUFIsIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKHNjcmF0Y2gxR1BSLCBUeXBlUHJvZmlsZXJMb2c6OkxvZ0VudHJ5OjpzdHJ1
Y3R1cmVJRE9mZnNldCgpKSk7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNraXBJc0Nl
bGwgPSBtX2ppdC5qdW1wKCk7CisgICAgICAgIGlzTm90Q2VsbC5saW5rKCZtX2ppdCk7CisgICAg
ICAgIG1faml0LnN0b3JlMzIoVHJ1c3RlZEltbTMyKDApLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhzY3JhdGNoMUdQUiwgVHlwZVByb2ZpbGVyTG9nOjpMb2dFbnRyeTo6c3RydWN0dXJlSURPZmZz
ZXQoKSkpOworICAgICAgICBza2lwSXNDZWxsLmxpbmsoJm1faml0KTsKKworICAgICAgICAvLyBT
dG9yZSB0aGUgdHlwZUxvY2F0aW9uIG9uIHRoZSBsb2cgZW50cnkuCisgICAgICAgIG1faml0Lm1v
dmUoVHJ1c3RlZEltbVB0cihjYWNoZWRUeXBlTG9jYXRpb24pLCBzY3JhdGNoM0dQUik7CisgICAg
ICAgIG1faml0LnN0b3JlUHRyKHNjcmF0Y2gzR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhz
Y3JhdGNoMUdQUiwgVHlwZVByb2ZpbGVyTG9nOjpMb2dFbnRyeTo6bG9jYXRpb25PZmZzZXQoKSkp
OworCisgICAgICAgIC8vIEluY3JlbWVudCB0aGUgY3VycmVudCBsb2cgZW50cnkuCisgICAgICAg
IG1faml0LmFkZFB0cihUcnVzdGVkSW1tMzIoc2l6ZW9mKFR5cGVQcm9maWxlckxvZzo6TG9nRW50
cnkpKSwgc2NyYXRjaDFHUFIpOworICAgICAgICBtX2ppdC5zdG9yZVB0cihzY3JhdGNoMUdQUiwg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaDJHUFIsIFR5cGVQcm9maWxlckxvZzo6Y3Vy
cmVudExvZ0VudHJ5T2Zmc2V0KCkpKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgY2xl
YXJMb2cgPSBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBzY3JhdGNoMUdQ
UiwgVHJ1c3RlZEltbVB0cihjYWNoZWRUeXBlUHJvZmlsZXJMb2ctPmxvZ0VuZFB0cigpKSk7Cisg
ICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAgICAgc2xvd1BhdGhDYWxsKGNs
ZWFyTG9nLCB0aGlzLCBvcGVyYXRpb25Qcm9jZXNzVHlwZVByb2ZpbGVyTG9nREZHLCBOb1Jlc3Vs
dCkpOworCisgICAgICAgIGp1bXBUb0VuZC5saW5rKCZtX2ppdCk7CisKKyAgICAgICAgbm9SZXN1
bHQobm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KIAogI2lmIEVOQUJMRShGVExfSklUKSAg
ICAgICAgCiAgICAgY2FzZSBDaGVja1RpZXJVcEluTG9vcDogewpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMTc0MTYxKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5n
IGNvcHkpCkBAIC05NDQsNiArOTQ0LDExIEBAIHB1YmxpYzoKICAgICAvLyBtYWNoaW5lIHJlZ2lz
dGVycywgYW5kIGRlbGVnYXRlIHRoZSBjYWxsaW5nIGNvbnZlbnRpb24gc3BlY2lmaWMKICAgICAv
LyBkZWNpc2lvbiBhcyB0byBob3cgdG8gZmlsbCB0aGUgcmVnc2l0ZXJzIHRvIHNldHVwQXJndW1l
bnRzKiBtZXRob2RzLgogCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0pJ
VE9wZXJhdGlvbl9FIG9wZXJhdGlvbikKKyAgICB7CisgICAgICAgIG1faml0LnNldHVwQXJndW1l
bnRzRXhlY1N0YXRlKCk7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsKG9wZXJhdGlvbik7Cisg
ICAgfQogICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oUF9KSVRPcGVyYXRpb25f
RSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFy
Z3VtZW50c0V4ZWNTdGF0ZSgpOwpAQCAtMTE0OCw2ICsxMTUzLDExIEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9u
LCByZXN1bHQpOwogICAgIH0KIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0aW9uVHlwZT4K
KyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEZ1bmN0aW9uVHlwZSBvcGVyYXRp
b24sIE5vUmVzdWx0VGFnKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uKTsKKyAgICB9CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rpb25UeXBlLCB0eXBl
bmFtZSBBcmd1bWVudFR5cGUxPgogICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24o
RnVuY3Rpb25UeXBlIG9wZXJhdGlvbiwgTm9SZXN1bHRUYWcsIEFyZ3VtZW50VHlwZTEgYXJnMSkK
ICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlUHJvZmlsZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVQcm9m
aWxlci5jcHAJKHJldmlzaW9uIDE3NDE2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1R5cGVQcm9maWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDkgKzQ2LDkgQEAgdm9p
ZCBUeXBlUHJvZmlsZXI6OmxvZ1R5cGVzRm9yVHlwZUxvY2F0aQogCiAgICAgZGF0YUxvZygiXHRc
dCIsIGxvY2F0aW9uLT5tX2dsb2JhbFZhcmlhYmxlSUQgPT0gVHlwZVByb2ZpbGVyUmV0dXJuU3Rh
dGVtZW50ID8gIltSZXR1cm4gU3RhdGVtZW50XSIgOiAiW05vcm1hbCBTdGF0ZW1lbnRdIiwgIlxu
Iik7CiAKLSAgICBkYXRhTG9nKCJcdFx0I0xvY2FsI1xuXHRcdCIsIGxvY2F0aW9uLT5tX2luc3Ry
dWN0aW9uVHlwZVNldC0+c2VlblR5cGVzKCkucmVwbGFjZSgiXG4iLCAiXG5cdFx0IiksICJcbiIp
OworICAgIGRhdGFMb2coIlx0XHQjTG9jYWwjXG5cdFx0IiwgbG9jYXRpb24tPm1faW5zdHJ1Y3Rp
b25UeXBlU2V0LT5kdW1wVHlwZXMoKS5yZXBsYWNlKCJcbiIsICJcblx0XHQiKSwgIlxuIik7CiAg
ICAgaWYgKGxvY2F0aW9uLT5tX2dsb2JhbFR5cGVTZXQpCi0gICAgICAgIGRhdGFMb2coIlx0XHQj
R2xvYmFsI1xuXHRcdCIsIGxvY2F0aW9uLT5tX2dsb2JhbFR5cGVTZXQtPnNlZW5UeXBlcygpLnJl
cGxhY2UoIlxuIiwgIlxuXHRcdCIpLCAiXG4iKTsKKyAgICAgICAgZGF0YUxvZygiXHRcdCNHbG9i
YWwjXG5cdFx0IiwgbG9jYXRpb24tPm1fZ2xvYmFsVHlwZVNldC0+ZHVtcFR5cGVzKCkucmVwbGFj
ZSgiXG4iLCAiXG5cdFx0IiksICJcbiIpOwogfQogCiB2b2lkIFR5cGVQcm9maWxlcjo6aW5zZXJ0
TmV3TG9jYXRpb24oVHlwZUxvY2F0aW9uKiBsb2NhdGlvbikKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1R5cGVTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1R5cGVTZXQuY3BwCShyZXZpc2lvbiAxNzQxNjEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEw
LDcgKzExMCw3IEBAIHZvaWQgVHlwZVNldDo6aW52YWxpZGF0ZUNhY2hlKCkKICAgICBtX3N0cnVj
dHVyZUlEQ2FjaGUuY2xlYXIoKTsKIH0KIAotU3RyaW5nIFR5cGVTZXQ6OnNlZW5UeXBlcygpIGNv
bnN0CitTdHJpbmcgVHlwZVNldDo6ZHVtcFR5cGVzKCkgY29uc3QKIHsKICAgICBpZiAobV9zZWVu
VHlwZXMgPT0gVHlwZU5vdGhpbmcpCiAgICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoIihVbnJl
YWNoZWQgU3RhdGVtZW50KSIpOwpAQCAtMTc0LDcgKzE3NCw3IEBAIGJvb2wgVHlwZVNldDo6ZG9l
c1R5cGVDb25mb3JtVG8odWludDMyX3QKICAgICAvLyAtLS0tLS0gKEFORCkKICAgICAvLyAwYjAw
MTAgIT0gc2VlbgogCi0gICAgcmV0dXJuIChtX3NlZW5UeXBlcyAmIHRlc3QpID09IG1fc2VlblR5
cGVzOworICAgIHJldHVybiBtX3NlZW5UeXBlcyAhPSBUeXBlTm90aGluZyAmJiAobV9zZWVuVHlw
ZXMgJiB0ZXN0KSA9PSBtX3NlZW5UeXBlczsKIH0KIAogU3RyaW5nIFR5cGVTZXQ6OmRpc3BsYXlO
YW1lKCkgY29uc3QKQEAgLTM1MywxMSArMzUzLDYgQEAgU3RyaW5nIFR5cGVTZXQ6OnRvSlNPTlN0
cmluZygpIGNvbnN0CiAgICAgcmV0dXJuIGpzb24udG9TdHJpbmcoKTsKIH0KIAotdm9pZCBUeXBl
U2V0OjpkdW1wU2VlblR5cGVzKCkKLXsKLSAgICBkYXRhTG9nKHNlZW5UeXBlcygpLCAiXG4iKTsK
LX0KLQogU3RydWN0dXJlU2hhcGU6OlN0cnVjdHVyZVNoYXBlKCkKICAgICA6IG1fcHJvdG8obnVs
bHB0cikKICAgICAsIG1fcHJvcGVydHlIYXNoKG51bGxwdHIpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9UeXBlU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVHlwZVNldC5oCShyZXZpc2lvbiAxNzQxNjEpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9UeXBlU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw3ICsx
MDAsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGRUeXBlSW5mb3JtYXRpb24oUnVudGltZVR5cGUs
IFBhc3NSZWZQdHI8U3RydWN0dXJlU2hhcGU+LCBTdHJ1Y3R1cmVJRCk7CiAgICAgc3RhdGljIFJ1
bnRpbWVUeXBlIGdldFJ1bnRpbWVUeXBlRm9yVmFsdWUoSlNWYWx1ZSk7CiAgICAgdm9pZCBpbnZh
bGlkYXRlQ2FjaGUoKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBTdHJpbmcgc2VlblR5cGVzKCkg
Y29uc3Q7CisgICAgU3RyaW5nIGR1bXBUeXBlcygpIGNvbnN0OwogICAgIFN0cmluZyBkaXNwbGF5
TmFtZSgpIGNvbnN0OwogICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8
U3RyaW5nPj4gYWxsUHJpbWl0aXZlVHlwZU5hbWVzKCkgY29uc3Q7CiAgICAgUGFzc1JlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpT
dHJ1Y3R1cmVEZXNjcmlwdGlvbj4+IGFsbFN0cnVjdHVyZVJlcHJlc2VudGF0aW9ucygpIGNvbnN0
OwpAQCAtMTA5LDEwICsxMDksMTAgQEAgcHVibGljOgogICAgIFN0cmluZyBsZWFzdENvbW1vbkFu
Y2VzdG9yKCkgY29uc3Q7CiAgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50
aW1lOjpUeXBlU2V0PiBpbnNwZWN0b3JUeXBlU2V0KCkgY29uc3Q7CiAgICAgYm9vbCBpc0VtcHR5
KCkgY29uc3QgeyByZXR1cm4gbV9zZWVuVHlwZXMgPT0gVHlwZU5vdGhpbmc7IH0KKyAgICBib29s
IGRvZXNUeXBlQ29uZm9ybVRvKHVpbnQzMl90IHRlc3QpIGNvbnN0OworICAgIHVpbnQzMl90IHNl
ZW5UeXBlcygpIGNvbnN0IHsgcmV0dXJuIG1fc2VlblR5cGVzOyB9CiAKIHByaXZhdGU6Ci0gICAg
dm9pZCBkdW1wU2VlblR5cGVzKCk7Ci0gICAgYm9vbCBkb2VzVHlwZUNvbmZvcm1Ubyh1aW50MzJf
dCB0ZXN0KSBjb25zdDsKIAogICAgIHVpbnQzMl90IG1fc2VlblR5cGVzOwogICAgIGJvb2wgbV9p
c092ZXJmbG93bjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy90eXBlUHJvZmls
ZXIvZGZnLWppdC1vcHRpbWl6YXRpb25zLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS90ZXN0cy90eXBlUHJvZmlsZXIvZGZnLWppdC1vcHRpbWl6YXRpb25zLmpzCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3R5cGVQcm9maWxlci9kZmct
aml0LW9wdGltaXphdGlvbnMuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzOCBAQAorbG9h
ZCgiLi9kcml2ZXIvZHJpdmVyLmpzIik7CisKK2Z1bmN0aW9uIHRpZXJVcFRvREZHKGZ1bmMsIGFy
ZykgCit7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwOyBpKyspCisgICAgICAgIGZ1bmMo
YXJnKTsKK30KKwordmFyIHR5cGVzID0gW1QuQm9vbGVhbiwgVC5JbnRlZ2VyLCBULk51bGwsIFQu
TnVtYmVyLCBULlN0cmluZywgVC5VbmRlZmluZWRdOwordmFyIHZhbHVlcyA9IFt0cnVlLCAxLCBu
dWxsLCAxLjEsICJoZWxsbyIsIHVuZGVmaW5lZF07Cit2YXIgZnVuY3MgPSBbZnVuY3Rpb24oeCkg
eyByZXR1cm4geDsgfSwgZnVuY3Rpb24oeCkgeyByZXR1cm4geDsgfSwgZnVuY3Rpb24oeCkgeyBy
ZXR1cm4geDsgfSwgCisgICAgZnVuY3Rpb24oeCkgeyByZXR1cm4geDsgfSwgZnVuY3Rpb24oeCkg
eyByZXR1cm4geDsgfSwgZnVuY3Rpb24oeCkgeyByZXR1cm4geDsgfV0KKworYXNzZXJ0KHR5cGVz
Lmxlbmd0aCA9PT0gdmFsdWVzLmxlbmd0aCAmJiB2YWx1ZXMubGVuZ3RoID09PSBmdW5jcy5sZW5n
dGgpOworCisvLyBNYWtlIHN1cmUgYmFzZWxpbmUgREZHIHR5cGUgY2hlY2sgb3B0aW1pemF0aW9u
cyB3b3JrLgorLy8gVGllciB1cCBlYWNoIGZ1bmN0aW9uIG9uIGEgZGlmZmVyZW50IHR5cGUsIHRo
ZW4gY2FsbCBpdCB3aXRoIGFsbCBvdGhlciBwcmltaXRpdmUgdHlwZXMgdG8gbWFrZSBzdXJlIHRo
ZXkncmUgcmVjb3JkZWQuCitmb3IgKHZhciBpID0gMDsgaSA8IHR5cGVzLmxlbmd0aDsgaSsrKSB7
CisgICAgdmFyIGZ1bmMgPSBmdW5jc1tpXTsKKyAgICB2YXIgdHlwZSA9IHR5cGVzW2ldOworICAg
IHZhciB2YWx1ZSA9IHZhbHVlc1tpXTsKKyAgICBub0lubGluZShmdW5jKTsKKyAgICB0aWVyVXBU
b0RGRyhmdW5jLCB2YWx1ZSk7CisgICAgdmFyIHR5cGVJbmZvID0gZmluZFR5cGVGb3JFeHByZXNz
aW9uKGZ1bmMsICJ4Iik7IAorICAgIGFzc2VydCh0eXBlSW5mby5pbnN0cnVjdGlvblR5cGVTZXQu
cHJpbWl0aXZlVHlwZU5hbWVzLmxlbmd0aCA9PT0gMSwgIk9ubHkgb25lIHByaW1pdGl2ZSB0eXBl
IHNob3VsZCBoYXZlIGJlZW4gc2VlbiBzbyBmYXIuIik7CisgICAgYXNzZXJ0KHR5cGVJbmZvLmlu
c3RydWN0aW9uVHlwZVNldC5wcmltaXRpdmVUeXBlTmFtZXMuaW5kZXhPZih0eXBlKSAhPT0gLTEs
ICJTaG91bGQgaGF2ZSBiZWVuIG9wdGltaXplZCBvbiB0eXBlOiAiICsgdHlwZSk7CisgICAgZm9y
ICh2YXIgaiA9IDA7IGogPCB0eXBlcy5sZW5ndGg7IGorKykgeworICAgICAgICBpZiAodHlwZSA9
PT0gVC5OdW1iZXIgJiYgdHlwZXNbal0gPT09IFQuSW50ZWdlcikgeworICAgICAgICAgICAgLy8g
SWYgd2Ugb3B0aW1pemUgb24gdHlwZSBOdW1iZXIsIGJ1dCB3ZSBwYXNzIGluIGFuIEludGVnZXIs
IG91ciB0eXBlY2hlY2sgd2lsbCBzdGlsbCBwYXNzLCBzbyB3ZSB3b250IGRpcmVjdGx5IGdldAor
ICAgICAgICAgICAgLy8gdHlwZSBJbnRlZ2VyIGJlY2F1c2UgVC5JbnRlZ2VyIGlzIGltcGxpZWQg
dG8gYmUgY29udGFpbmVkIGluIFQuTnVtYmVyLgorICAgICAgICAgICAgY29udGludWU7IAorICAg
ICAgICB9CisKKyAgICAgICAgZnVuYyh2YWx1ZXNbal0pOworICAgICAgICB0eXBlSW5mbyA9IGZp
bmRUeXBlRm9yRXhwcmVzc2lvbihmdW5jLCAieCIpOworICAgICAgICBhc3NlcnQodHlwZUluZm8u
aW5zdHJ1Y3Rpb25UeXBlU2V0LnByaW1pdGl2ZVR5cGVOYW1lcy5pbmRleE9mKHR5cGVzW2pdKSAh
PT0gLTEsICJTaG91bGQgaGF2ZSBzZWVuIHR5cGU6ICIgKyB0eXBlc1tqXSArICIgIiArIGkgKyAi
LCIgKyBqKTsKKyAgICB9Cit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>239037</attachid>
            <date>2014-10-01 11:26:27 -0700</date>
            <delta_ts>2014-10-01 13:04:37 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>27711</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTc0MTYxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY1IEBA
CisyMDE0LTEwLTAxICBTYWFtIEJhcmF0aSAgPHNhYW1iYXJhdGkxQGdtYWlsLmNvbT4KKworICAg
ICAgICBTdXBwb3J0IHRoZSB0eXBlIHByb2ZpbGVyIGluIHRoZSBERkcKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjcxMgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggaW1wbGVtZW50cyBv
cF9wcm9maWxlX3R5cGUgaW5zaWRlIHRoZSBERkcgYXMgdGhlIG5vZGU6IFByb2ZpbGVUeXBlLgor
ICAgICAgICBUaGUgREZHIHdpbGwgY29udmVydCB0aGUgUHJvZmlsZVR5cGUgbm9kZSBpbnRvIGEg
Q2hlY2sgbm9kZSBpbiB0aGUgY2FzZXMgd2hlcmUKKyAgICAgICAgcGFzc2luZyBhIHR5cGUgY2hl
Y2sgaXMgZXF1aXZhbGVudCB0byB3cml0aW5nIHRvIHRoZSBUeXBlUHJvZmlsZXJMb2cuIFRoaXMK
KyAgICAgICAgZ2l2ZXMgdGhlIERGRyB0aGUgcG90ZW50aWFsIHRvIG9wdGltaXplIG91dCBtdWx0
aXBsZSBQcm9maWxlVHlwZSBub2RlcyBpbnRvCisgICAgICAgIGEgc2luZ2xlIENoZWNrIG5vZGUu
CisKKyAgICAgICAgV2hlbiB0aGUgREZHIGRvZXNuJ3QgY29udmVydCBQcm9maWxlVHlwZSBpbnRv
IGEgQ2hlY2sgbm9kZSwgaXQgd2lsbCBnZW5lcmF0ZQorICAgICAgICB0aGUgc2FtZSBpbmxpbmUg
Y29kZSBhcyB0aGUgYmFzZWxpbmUgSklUIGRvZXMgZm9yIHdyaXRpbmcgYW4gZW50cnkgdG8gdGhl
CisgICAgICAgIFR5cGVQcm9maWxlckxvZy4KKworICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdElu
dGVycHJldGVySW5saW5lcy5oOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0
ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyk6CisgICAgICAgICogZGZnL0RG
R0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6
cGFyc2VCbG9jayk6CisgICAgICAgICogZGZnL0RGR0NhcGFiaWxpdGllcy5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6Y2FwYWJpbGl0eUxldmVsKToKKyAgICAgICAgKiBkZmcvREZHQ2xvYmJlcml6
ZS5oOgorICAgICAgICAoSlNDOjpERkc6OmNsb2JiZXJpemUpOgorICAgICAgICAqIGRmZy9ERkdE
b2VzR0MuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmRvZXNHQyk6CisgICAgICAgICogZGZnL0RG
R0RyaXZlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Y29tcGlsZUltcGwpOgorICAgICAgICAq
IGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjpm
aXh1cE5vZGUpOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6
Tm9kZTo6dHlwZUxvY2F0aW9uKToKKyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUuaDoKKyAgICAg
ICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMu
aDoKKyAgICAgICAgKiBkZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OlByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlOjpwcm9wYWdhdGUpOgor
ICAgICAgICAqIGRmZy9ERkdTYWZlVG9FeGVjdXRlLmg6CisgICAgICAgIChKU0M6OkRGRzo6c2Fm
ZVRvRXhlY3V0ZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNhbGxPcGVyYXRpb24pOgorICAgICAgICAqIGRm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAg
KiBydW50aW1lL1R5cGVQcm9maWxlci5jcHA6CisgICAgICAgIChKU0M6OlR5cGVQcm9maWxlcjo6
bG9nVHlwZXNGb3JUeXBlTG9jYXRpb24pOgorICAgICAgICAqIHJ1bnRpbWUvVHlwZVNldC5jcHA6
CisgICAgICAgIChKU0M6OlR5cGVTZXQ6OmR1bXBUeXBlcyk6CisgICAgICAgIChKU0M6OlR5cGVT
ZXQ6OmRvZXNUeXBlQ29uZm9ybVRvKToKKyAgICAgICAgTWFrZSB0aGlzIG1ldGhvZCBwdWJsaWMg
c28gb3RoZXJzIGNhbiByZWFzb24gYWJvdXQgdGhlIHR5cGVzIGEgVHlwZVNldCBoYXMgc2Vlbi4K
KyAgICAgICAgKEpTQzo6VHlwZVNldDo6c2VlblR5cGVzKTogRGVsZXRlZC4KKyAgICAgICAgUmVu
YW1lZCB0byBkdW1wVHlwZXMgc28gdGhlIG1ldGhvZCBzZWVuVHlwZXMgY2FuIGJlIHVzZWQgYXMg
YSBwdWJsaWMgZ2V0dGVyLgorICAgICAgICAoSlNDOjpUeXBlU2V0OjpkdW1wU2VlblR5cGVzKTog
RGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL1R5cGVTZXQuaDoKKyAgICAgICAgKEpTQzo6VHlw
ZVNldDo6c2VlblR5cGVzKToKKyAgICAgICAgKiB0ZXN0cy90eXBlUHJvZmlsZXIvZGZnLWppdC1v
cHRpbWl6YXRpb25zLmpzOiBBZGRlZC4KKyAgICAgICAgKHRpZXJVcFRvREZHKToKKyAgICAgICAg
KGZ1bmNzKToKKyAgICAgICAgKC5yZXR1cm4pOgorCiAyMDE0LTA5LTMwICBCcmlhbiBKLiBCdXJn
ICA8YnVyZ0Bjcy53YXNoaW5ndG9uLmVkdT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBFcnJv
clN0cmluZyBzaG91bGQgYmUgcGFzc2VkIGJ5IHJlZmVyZW5jZQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGlu
ZXMuaAkocmV2aXNpb24gMTc0MTYxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
YnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTg1LDYgKzE5
ODUsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgY2Fz
ZSBCcmVha3BvaW50OgogICAgIGNhc2UgUHJvZmlsZVdpbGxDYWxsOgogICAgIGNhc2UgUHJvZmls
ZURpZENhbGw6CisgICAgY2FzZSBQcm9maWxlVHlwZToKICAgICBjYXNlIFBoYW50b206CiAgICAg
Y2FzZSBIYXJkUGhhbnRvbToKICAgICBjYXNlIENvdW50RXhlY3V0aW9uOgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9u
IDE3NDE2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODkzLDYgKzI4OTMsMTIgQEAgYm9vbCBCeXRlQ29kZVBh
cnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfaW5p
dF9nbG9iYWxfY29uc3QpOwogICAgICAgICB9CiAKKyAgICAgICAgY2FzZSBvcF9wcm9maWxlX3R5
cGU6IHsKKyAgICAgICAgICAgIE5vZGUqIHZhbHVlVG9Qcm9maWxlID0gZ2V0KFZpcnR1YWxSZWdp
c3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSk7CisgICAgICAgICAgICBhZGRU
b0dyYXBoKFByb2ZpbGVUeXBlLCBPcEluZm8oY3VycmVudEluc3RydWN0aW9uWzJdLnUubG9jYXRp
b24pLCB2YWx1ZVRvUHJvZmlsZSk7CisgICAgICAgICAgICBORVhUX09QQ09ERShvcF9wcm9maWxl
X3R5cGUpOworICAgICAgICB9CisKICAgICAgICAgLy8gPT09IEJsb2NrIHRlcm1pbmF0b3JzLiA9
PT0KIAogICAgICAgICBjYXNlIG9wX2ptcDogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNpb24gMTc0MTYxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMjAsNiArMTIwLDcgQEAgQ2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbChPcGNvZGVJ
RAogICAgIGNhc2Ugb3BfZGVidWc6CiAgICAgY2FzZSBvcF9wcm9maWxlX3dpbGxfY2FsbDoKICAg
ICBjYXNlIG9wX3Byb2ZpbGVfZGlkX2NhbGw6CisgICAgY2FzZSBvcF9wcm9maWxlX3R5cGU6CiAg
ICAgY2FzZSBvcF9tb3Y6CiAgICAgY2FzZSBvcF9jYXB0dXJlZF9tb3Y6CiAgICAgY2FzZSBvcF9j
aGVja19oYXNfaW5zdGFuY2U6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Ns
b2JiZXJpemUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Ns
b2JiZXJpemUuaAkocmV2aXNpb24gMTc0MTYxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDbG9iYmVyaXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3Miw2ICsyNzIsNyBAQCB2b2lk
IGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgY2FzZSBCcmVha3BvaW50
OgogICAgIGNhc2UgUHJvZmlsZVdpbGxDYWxsOgogICAgIGNhc2UgUHJvZmlsZURpZENhbGw6Cisg
ICAgY2FzZSBQcm9maWxlVHlwZToKICAgICBjYXNlIFN0b3JlQmFycmllcjoKICAgICBjYXNlIFN0
b3JlQmFycmllcldpdGhOdWxsQ2hlY2s6CiAgICAgY2FzZSBQdXRCeU9mZnNldEhpbnQ6CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCShyZXZpc2lvbiAxNzQxNjEp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEyNCw2ICsxMjQsNyBAQCBib29sIGRvZXNHQyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5v
ZGUpCiAgICAgY2FzZSBCcmVha3BvaW50OgogICAgIGNhc2UgUHJvZmlsZVdpbGxDYWxsOgogICAg
IGNhc2UgUHJvZmlsZURpZENhbGw6CisgICAgY2FzZSBQcm9maWxlVHlwZToKICAgICBjYXNlIENo
ZWNrSGFzSW5zdGFuY2U6CiAgICAgY2FzZSBJbnN0YW5jZU9mOgogICAgIGNhc2UgSXNVbmRlZmlu
ZWQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCShyZXZpc2lv
biAxNzQxNjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAj
aW5jbHVkZSAiT3B0aW9ucy5oIgogI2luY2x1ZGUgIlNhbXBsaW5nVG9vbC5oIgorI2luY2x1ZGUg
IlR5cGVQcm9maWxlckxvZy5oIgogI2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+CiAKICNpZiBFTkFC
TEUoRlRMX0pJVCkKQEAgLTkxLDYgKzkyLDkgQEAgc3RhdGljIENvbXBpbGF0aW9uUmVzdWx0IGNv
bXBpbGVJbXBsKAogICAgIAogICAgIGlmIChDYWxsRWRnZUxvZzo6aXNFbmFibGVkKCkpCiAgICAg
ICAgIHZtLmVuc3VyZUNhbGxFZGdlTG9nKCkucHJvY2Vzc0xvZygpOworCisgICAgaWYgKHZtLnR5
cGVQcm9maWxlcigpKQorICAgICAgICB2bS50eXBlUHJvZmlsZXJMb2coKS0+cHJvY2Vzc0xvZ0Vu
dHJpZXMoQVNDSUlMaXRlcmFsKCJQcmVwYXJpbmcgZm9yIERGRyBjb21waWxhdGlvbi4iKSk7CiAg
ICAgCiAgICAgUmVmUHRyPFBsYW4+IHBsYW4gPSBhZG9wdFJlZigKICAgICAgICAgbmV3IFBsYW4o
Y29kZUJsb2NrLCBwcm9maWxlZERGR0NvZGVCbG9jaywgbW9kZSwgb3NyRW50cnlCeXRlY29kZUlu
ZGV4LCBtdXN0SGFuZGxlVmFsdWVzKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9uIDE3NDE2MSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0
LDcgQEAKICNpbmNsdWRlICJERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5oIgogI2luY2x1
ZGUgIkRGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgi
CisjaW5jbHVkZSAiVHlwZUxvY2F0aW9uLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKIApAQCAtMTExMiw2ICsxMTEzLDM4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBmaXhF
ZGdlPEtub3duSW50MzJVc2U+KG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CisgICAgICAgIGNhc2UgUHJvZmlsZVR5cGU6IHsKKyAgICAgICAgICAgIC8vIFdl
IHdhbnQgdG8gaW5zZXJ0IHR5cGUgY2hlY2tzIGJhc2VkIG9uIHRoZSBpbnN0cnVjdGlvblR5cGVT
ZXQgb2YgdGhlIFR5cGVMb2NhdGlvbiwgbm90IHRoZSBnbG9iYWxUeXBlU2V0LgorICAgICAgICAg
ICAgLy8gQmVjYXVzZSB0aGUgaW5zdHJ1Y3Rpb25UeXBlU2V0IGlzIGNvbnRhaW5lZCBpbiBnbG9i
YWxUeXBlU2V0LCBpZiB3ZSBwcm9kdWNlIGEgdHlwZSBjaGVjayBmb3IKKyAgICAgICAgICAgIC8v
IHR5cGUgVCBmb3IgdGhlIGluc3RydWN0aW9uVHlwZVNldCwgdGhlIGdsb2JhbCB0eXBlIHNldCBt
dXN0IGFsc28gaGF2ZSBpbmZvcm1hdGlvbiBmb3IgdHlwZSBULgorICAgICAgICAgICAgLy8gU28g
aWYgaXQgdGhlIHR5cGUgY2hlY2sgc3VjY2VlZHMgZm9yIHR5cGUgVCBpbiB0aGUgaW5zdHJ1Y3Rp
b25UeXBlU2V0LCBhIHR5cGUgY2hlY2sgZm9yIHR5cGUgVCAKKyAgICAgICAgICAgIC8vIGluIHRo
ZSBnbG9iYWxUeXBlU2V0IHdvdWxkJ3ZlIGFsc28gc3VjY2VlZGVkLgorICAgICAgICAgICAgLy8g
KFRoZSBvdGhlciBkaXJlY3Rpb24gZG9lcyBub3QgaG9sZCBpbiBnZW5lcmFsKS4KKworICAgICAg
ICAgICAgUmVmUHRyPFR5cGVTZXQ+IHR5cGVTZXQgPSBub2RlLT50eXBlTG9jYXRpb24oKS0+bV9p
bnN0cnVjdGlvblR5cGVTZXQ7CisgICAgICAgICAgICB1aW50MzJfdCBzZWVuVHlwZXMgPSB0eXBl
U2V0LT5zZWVuVHlwZXMoKTsKKyAgICAgICAgICAgIGlmICh0eXBlU2V0LT5kb2VzVHlwZUNvbmZv
cm1UbyhUeXBlTWFjaGluZUludCkpIHsKKyAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9D
aGVjaygpOworICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3Vs
YXRlSW50MzIoKSkKKyAgICAgICAgICAgICAgICAgICAgZml4RWRnZTxJbnQzMlVzZT4obm9kZS0+
Y2hpbGQxKCkpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgZml4
RWRnZTxNYWNoaW5lSW50VXNlPihub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICB9IGVsc2Ug
aWYgKHR5cGVTZXQtPmRvZXNUeXBlQ29uZm9ybVRvKFR5cGVOdW1iZXIgfCBUeXBlTWFjaGluZUlu
dCkpIHsKKyAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9DaGVjaygpOworICAgICAgICAg
ICAgICAgIGZpeEVkZ2U8TnVtYmVyVXNlPihub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICB9
IGVsc2UgaWYgKHR5cGVTZXQtPmRvZXNUeXBlQ29uZm9ybVRvKFR5cGVTdHJpbmcpKSB7CisgICAg
ICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvQ2hlY2soKTsKKyAgICAgICAgICAgICAgICBmaXhF
ZGdlPFN0cmluZ1VzZT4obm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgfSBlbHNlIGlmICh0
eXBlU2V0LT5kb2VzVHlwZUNvbmZvcm1UbyhUeXBlQm9vbGVhbikpIHsKKyAgICAgICAgICAgICAg
ICBub2RlLT5jb252ZXJ0VG9DaGVjaygpOworICAgICAgICAgICAgICAgIGZpeEVkZ2U8Qm9vbGVh
blVzZT4obm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlU2V0LT5k
b2VzVHlwZUNvbmZvcm1UbyhUeXBlVW5kZWZpbmVkIHwgVHlwZU51bGwpICYmIChzZWVuVHlwZXMg
JiBUeXBlVW5kZWZpbmVkKSAmJiAoc2VlblR5cGVzICYgVHlwZU51bGwpKSB7CisgICAgICAgICAg
ICAgICAgbm9kZS0+Y29udmVydFRvQ2hlY2soKTsKKyAgICAgICAgICAgICAgICBmaXhFZGdlPE90
aGVyVXNlPihub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CiAgICAgICAgICAgICAKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAg
ICAgIC8vIEhhdmUgdGhlc2Ugbm8tb3AgY2FzZXMgaGVyZSB0byBlbnN1cmUgdGhhdCBub2JvZHkg
Zm9yZ2V0cyB0byBhZGQgaGFuZGxlcnMgZm9yIG5ldyBvcGNvZGVzLgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDE3NDE2MSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0OCw3IEBACiAj
aW5jbHVkZSAiUHV0QnlJZFZhcmlhbnQuaCIKICNpbmNsdWRlICJTcGVjdWxhdGVkVHlwZS5oIgog
I2luY2x1ZGUgIlN0cnVjdHVyZVNldC5oIgorI2luY2x1ZGUgIlR5cGVMb2NhdGlvbi5oIgogI2lu
Y2x1ZGUgIlZhbHVlUHJvZmlsZS5oIgogI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgogCkBAIC0x
NzczLDYgKzE3NzQsMTEgQEAgc3RydWN0IE5vZGUgewogICAgIHsKICAgICAgICAgcmV0dXJuIGNh
blNwZWN1bGF0ZUludDUyKHNvdXJjZUZvcihwYXNzKSk7CiAgICAgfQorCisgICAgVHlwZUxvY2F0
aW9uKiB0eXBlTG9jYXRpb24oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8VHlwZUxvY2F0aW9uKj4obV9vcEluZm8pOworICAgIH0KICAgICAKICAgICB2b2lkIGR1bXBD
aGlsZHJlbihQcmludFN0cmVhbSYgb3V0KQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDE3NDE2MSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjU0LDYgKzI1NCw3
IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhOZXdTdHJpbmdP
YmplY3QsIE5vZGVSZXN1bHRKUykgXAogICAgIG1hY3JvKE1ha2VSb3BlLCBOb2RlUmVzdWx0SlMp
IFwKICAgICBtYWNybyhJbiwgTm9kZVJlc3VsdEJvb2xlYW4gfCBOb2RlTXVzdEdlbmVyYXRlIHwg
Tm9kZUNsb2JiZXJzV29ybGQpIFwKKyAgICBtYWNybyhQcm9maWxlVHlwZSwgTm9kZU11c3RHZW5l
cmF0ZSkgXAogICAgIFwKICAgICAvKiBOb2RlcyB1c2VkIGZvciBhY3RpdmF0aW9ucy4gQWN0aXZh
dGlvbiBzdXBwb3J0IHdvcmtzIGJ5IGhhdmluZyBpdCBhbmNob3JlZCBhdCAqL1wKICAgICAvKiBl
cGlsZ291ZXMgdmlhIFRlYXJPZmZBY3RpdmF0aW9uLCBhbmQgYWxsIENyZWF0ZUFjdGl2YXRpb24g
bm9kZXMga2VwdCBhbGl2ZSBieSAqL1wKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMTc0MTYxKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsNiArNTMs
NyBAQAogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJSZXBhdGNoLmgiCiAjaW5j
bHVkZSAiU3RyaW5nQ29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJUeXBlUHJvZmlsZXJMb2cuaCIK
ICNpbmNsdWRlICJUeXBlZEFycmF5SW5saW5lcy5oIgogI2luY2x1ZGUgPHd0Zi9JbmxpbmVBU00u
aD4KIApAQCAtMTA2Miw2ICsxMDYzLDExIEBAIGludDY0X3QgSklUX09QRVJBVElPTiBvcGVyYXRp
b25Db252ZXJ0RG8KICAgICByZXR1cm4gdHJ5Q29udmVydFRvSW50NTIodmFsdWUpOwogfQogCit2
b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHJvY2Vzc1R5cGVQcm9maWxlckxvZ0RGRyhFeGVj
U3RhdGUqIGV4ZWMpIAoreworICAgIGV4ZWMtPnZtKCkudHlwZVByb2ZpbGVyTG9nKCktPnByb2Nl
c3NMb2dFbnRyaWVzKEFTQ0lJTGl0ZXJhbCgiTG9nIEZ1bGwsIGNhbGxlZCBmcm9tIGluc2lkZSBE
RkcuIikpOworfQorCiBzaXplX3QgSklUX09QRVJBVElPTiBkZmdDb252ZXJ0SlNWYWx1ZVRvSW50
MzIoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBWTSogdm0g
PSAmZXhlYy0+dm0oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0
aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0
aW9ucy5oCShyZXZpc2lvbiAxNzQxNjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTMwLDYgKzEzMCw4IEBAIHZvaWQgSklU
X09QRVJBVElPTiBvcGVyYXRpb25Ob3RpZnlXcml0ZSgKIGludDY0X3QgSklUX09QRVJBVElPTiBv
cGVyYXRpb25Db252ZXJ0Qm94ZWREb3VibGVUb0ludDUyKEVuY29kZWRKU1ZhbHVlKTsKIGludDY0
X3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db252ZXJ0RG91YmxlVG9JbnQ1Mihkb3VibGUpOwog
Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHJvY2Vzc1R5cGVQcm9maWxlckxvZ0RGRyhF
eGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7CisKIC8vIFRoZXNlIG9wZXJhdGlvbnMgaW1wbGVtZW50
IHRoZSBpbXBsaWNpdGx5IGNhbGxlZCBUb0ludDMyIGFuZCBUb0Jvb2xlYW4gY29udmVyc2lvbnMg
ZnJvbSBFUzUuCiAvLyBUaGlzIGNvbnZlcnNpb24gcmV0dXJucyBhbiBpbnQzMl90IHdpdGhpbiBh
IHNpemVfdCBzdWNoIHRoYXQgdGhlIHZhbHVlIGlzIHplcm8gZXh0ZW5kZWQgdG8gZmlsbCB0aGUg
cmVnaXN0ZXIuCiBzaXplX3QgSklUX09QRVJBVElPTiBkZmdDb252ZXJ0SlNWYWx1ZVRvSW50MzIo
RXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0
aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNzQxNjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjQ1LDYgKzY0NSw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgQnJlYWtwb2ludDoKICAgICAg
ICAgY2FzZSBQcm9maWxlV2lsbENhbGw6CiAgICAgICAgIGNhc2UgUHJvZmlsZURpZENhbGw6Cisg
ICAgICAgIGNhc2UgUHJvZmlsZVR5cGU6CiAgICAgICAgIGNhc2UgQ2hlY2tIYXNJbnN0YW5jZToK
ICAgICAgICAgY2FzZSBUaHJvd1JlZmVyZW5jZUVycm9yOgogICAgICAgICBjYXNlIEZvcmNlT1NS
RXhpdDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0
ZS5oCShyZXZpc2lvbiAxNzQxNjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nh
ZmVUb0V4ZWN1dGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTk4LDYgKzE5OCw3IEBAIGJvb2wgc2Fm
ZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3QKICAgICBjYXNlIEJyZWFrcG9pbnQ6CiAg
ICAgY2FzZSBQcm9maWxlV2lsbENhbGw6CiAgICAgY2FzZSBQcm9maWxlRGlkQ2FsbDoKKyAgICBj
YXNlIFByb2ZpbGVUeXBlOgogICAgIGNhc2UgQ2hlY2tIYXNJbnN0YW5jZToKICAgICBjYXNlIElu
c3RhbmNlT2Y6CiAgICAgY2FzZSBJc1VuZGVmaW5lZDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24g
MTc0MTYxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMy
XzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgIkpTUHJv
cGVydHlOYW1lRW51bWVyYXRvci5oIgogI2luY2x1ZGUgIk9iamVjdFByb3RvdHlwZS5oIgogI2lu
Y2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJUeXBlUHJvZmlsZXJMb2cuaCIKIAogbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCkBAIC00ODU2LDYgKzQ4NTcsNTEgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBjZWxsUmVzdWx0
KHJlc3VsdEdQUiwgbm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KKyAgICBjYXNlIFByb2Zp
bGVUeXBlOiB7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxk
MSgpKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gxKHRoaXMpOworICAgICAgICBHUFJU
ZW1wb3Jhcnkgc2NyYXRjaDIodGhpcyk7CisgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMyh0
aGlzKTsKKworICAgICAgICBHUFJSZWcgc2NyYXRjaDFHUFIgPSBzY3JhdGNoMS5ncHIoKTsKKyAg
ICAgICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gc2NyYXRjaDIuZ3ByKCk7CisgICAgICAgIEdQUlJl
ZyBzY3JhdGNoM0dQUiA9IHNjcmF0Y2gzLmdwcigpOworCisgICAgICAgIC8vIExvYWQgdGhlIFR5
cGVQcm9maWxlckxvZyBpbnRvIFNjcmF0Y2gyLgorICAgICAgICBUeXBlUHJvZmlsZXJMb2cqIGNh
Y2hlZFR5cGVQcm9maWxlckxvZyA9IG1faml0LnZtKCktPnR5cGVQcm9maWxlckxvZygpOworICAg
ICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoY2FjaGVkVHlwZVByb2ZpbGVyTG9nKSwgc2Ny
YXRjaDJHUFIpOworCisgICAgICAgIC8vIExvYWQgdGhlIG5leHQgTG9nRW50cnkgaW50byBTY3Jh
dGNoMS4KKyAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3Jh
dGNoMkdQUiwgVHlwZVByb2ZpbGVyTG9nOjpjdXJyZW50TG9nRW50cnlPZmZzZXQoKSksIHNjcmF0
Y2gxR1BSKTsKKworICAgICAgICAvLyBTdG9yZSB0aGUgSlNWYWx1ZSBvbnRvIHRoZSBsb2cgZW50
cnkuCisgICAgICAgIG1faml0LnN0b3JlMzIodmFsdWUudGFnR1BSKCksIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHNjcmF0Y2gxR1BSLCBUeXBlUHJvZmlsZXJMb2c6OkxvZ0VudHJ5Ojp2YWx1ZU9m
ZnNldCgpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpKTsKKyAgICAg
ICAgbV9qaXQuc3RvcmUzMih2YWx1ZS5wYXlsb2FkR1BSKCksIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHNjcmF0Y2gxR1BSLCBUeXBlUHJvZmlsZXJMb2c6OkxvZ0VudHJ5Ojp2YWx1ZU9mZnNldCgp
ICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSk7CisKKyAgICAg
ICAgLy8gU3RvcmUgdGhlIHN0cnVjdHVyZUlEIG9mIHRoZSBjZWxsIGlmIHZhbHVlR1BSIGlzIGEg
Y2VsbCwgb3RoZXJ3aXNlLCBzdG9yZSAwIG9uIHRoZSBsb2cgZW50cnkuCisgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaE5vdENlbGwodmFsdWUuanNWYWx1ZVJl
Z3MoKSk7CisgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh2YWx1
ZS5wYXlsb2FkR1BSKCksIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2gzR1BS
KTsKKyAgICAgICAgbV9qaXQuc3RvcmUzMihzY3JhdGNoM0dQUiwgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3Moc2NyYXRjaDFHUFIsIFR5cGVQcm9maWxlckxvZzo6TG9nRW50cnk6OnN0cnVjdHVyZUlE
T2Zmc2V0KCkpKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc2tpcElzQ2VsbCA9IG1f
aml0Lmp1bXAoKTsKKyAgICAgICAgaXNOb3RDZWxsLmxpbmsoJm1faml0KTsKKyAgICAgICAgbV9q
aXQuc3RvcmUzMihUcnVzdGVkSW1tMzIoMCksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0
Y2gxR1BSLCBUeXBlUHJvZmlsZXJMb2c6OkxvZ0VudHJ5OjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSk7
CisgICAgICAgIHNraXBJc0NlbGwubGluaygmbV9qaXQpOworCisgICAgICAgIC8vIFN0b3JlIHRo
ZSB0eXBlTG9jYXRpb24gb24gdGhlIGxvZyBlbnRyeS4KKyAgICAgICAgVHlwZUxvY2F0aW9uKiBj
YWNoZWRUeXBlTG9jYXRpb24gPSBub2RlLT50eXBlTG9jYXRpb24oKTsKKyAgICAgICAgbV9qaXQu
bW92ZShUcnVzdGVkSW1tUHRyKGNhY2hlZFR5cGVMb2NhdGlvbiksIHNjcmF0Y2gzR1BSKTsKKyAg
ICAgICAgbV9qaXQuc3RvcmVQdHIoc2NyYXRjaDNHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KHNjcmF0Y2gxR1BSLCBUeXBlUHJvZmlsZXJMb2c6OkxvZ0VudHJ5Ojpsb2NhdGlvbk9mZnNldCgp
KSk7CisKKyAgICAgICAgLy8gSW5jcmVtZW50IHRoZSBjdXJyZW50IGxvZyBlbnRyeS4KKyAgICAg
ICAgbV9qaXQuYWRkUHRyKFRydXN0ZWRJbW0zMihzaXplb2YoVHlwZVByb2ZpbGVyTG9nOjpMb2dF
bnRyeSkpLCBzY3JhdGNoMUdQUik7CisgICAgICAgIG1faml0LnN0b3JlUHRyKHNjcmF0Y2gxR1BS
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoMkdQUiwgVHlwZVByb2ZpbGVyTG9nOjpj
dXJyZW50TG9nRW50cnlPZmZzZXQoKSkpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBj
bGVhckxvZyA9IG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHNjcmF0Y2gx
R1BSLCBUcnVzdGVkSW1tUHRyKGNhY2hlZFR5cGVQcm9maWxlckxvZy0+bG9nRW5kUHRyKCkpKTsK
KyAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAgICBzbG93UGF0aENhbGwo
Y2xlYXJMb2csIHRoaXMsIG9wZXJhdGlvblByb2Nlc3NUeXBlUHJvZmlsZXJMb2dERkcsIE5vUmVz
dWx0KSk7CisKKyAgICAgICAgbm9SZXN1bHQobm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0K
IAogICAgIGNhc2UgRm9yY2VPU1JFeGl0OiB7CiAgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZl
RXhlY3V0aW9uKEluYWRlcXVhdGVDb3ZlcmFnZSwgSlNWYWx1ZVJlZ3MoKSwgMCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJ
KHJldmlzaW9uIDE3NDE2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRl
ICJKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCIKICNpbmNsdWRlICJPYmplY3RQcm90b3R5cGUu
aCIKICNpbmNsdWRlICJTcGlsbFJlZ2lzdGVyc01vZGUuaCIKKyNpbmNsdWRlICJUeXBlUHJvZmls
ZXJMb2cuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCkBAIC00OTAyLDYg
KzQ5MDMsNzUgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAg
ICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
KyAgICBjYXNlIFByb2ZpbGVUeXBlOiB7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRo
aXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gxKHRoaXMp
OworICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDIodGhpcyk7CisgICAgICAgIEdQUlRlbXBv
cmFyeSBzY3JhdGNoMyh0aGlzKTsKKworICAgICAgICBHUFJSZWcgc2NyYXRjaDFHUFIgPSBzY3Jh
dGNoMS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gc2NyYXRjaDIuZ3ByKCk7
CisgICAgICAgIEdQUlJlZyBzY3JhdGNoM0dQUiA9IHNjcmF0Y2gzLmdwcigpOworICAgICAgICBH
UFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3QganVtcFRvRW5kOworCisgICAgICAgIFR5cGVMb2NhdGlvbiogY2FjaGVkVHlwZUxv
Y2F0aW9uID0gbm9kZS0+dHlwZUxvY2F0aW9uKCk7CisgICAgICAgIC8vIENvbXBpbGUgaW4gYSBw
cmVkaWN0aXZlIHR5cGUgY2hlY2ssIGlmIHBvc3NpYmxlLCB0byBzZWUgaWYgd2UgY2FuIHNraXAg
d3JpdGluZyB0byB0aGUgbG9nLgorICAgICAgICAvLyBUaGVzZSB0eXBlY2hlY2tzIGFyZSBpbmxp
bmVkIHRvIG1hdGNoIHRob3NlIG9mIHRoZSA2NC1iaXQgSlNWYWx1ZSB0eXBlIGNoZWNrcy4KKyAg
ICAgICAgaWYgKGNhY2hlZFR5cGVMb2NhdGlvbi0+bV9sYXN0U2VlblR5cGUgPT0gVHlwZVVuZGVm
aW5lZCkKKyAgICAgICAgICAgIGp1bXBUb0VuZC5hcHBlbmQobV9qaXQuYnJhbmNoNjQoTWFjcm9B
c3NlbWJsZXI6OkVxdWFsLCB2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpKSk7CisgICAgICAgIGVsc2UgaWYgKGNhY2hl
ZFR5cGVMb2NhdGlvbi0+bV9sYXN0U2VlblR5cGUgPT0gVHlwZU51bGwpCisgICAgICAgICAgICBq
dW1wVG9FbmQuYXBwZW5kKG1faml0LmJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgdmFs
dWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVs
bCgpKSkpKTsKKyAgICAgICAgZWxzZSBpZiAoY2FjaGVkVHlwZUxvY2F0aW9uLT5tX2xhc3RTZWVu
VHlwZSA9PSBUeXBlQm9vbGVhbikgeworICAgICAgICAgICAgbV9qaXQubW92ZSh2YWx1ZUdQUiwg
c2NyYXRjaDJHUFIpOworICAgICAgICAgICAgbV9qaXQuYW5kNjQoVHJ1c3RlZEltbTMyKH4xKSwg
c2NyYXRjaDJHUFIpOworICAgICAgICAgICAganVtcFRvRW5kLmFwcGVuZChtX2ppdC5icmFuY2g2
NChNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHNjcmF0Y2gyR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTY0KFZhbHVlRmFsc2UpKSk7CisgICAgICAgIH0gZWxzZSBpZiAoY2FjaGVkVHlwZUxv
Y2F0aW9uLT5tX2xhc3RTZWVuVHlwZSA9PSBUeXBlTWFjaGluZUludCkKKyAgICAgICAgICAgIGp1
bXBUb0VuZC5hcHBlbmQobV9qaXQuYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVh
bCwgdmFsdWVHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOworICAgICAgICBl
bHNlIGlmIChjYWNoZWRUeXBlTG9jYXRpb24tPm1fbGFzdFNlZW5UeXBlID09IFR5cGVOdW1iZXIp
CisgICAgICAgICAgICBqdW1wVG9FbmQuYXBwZW5kKG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fz
c2VtYmxlcjo6Tm9uWmVybywgdmFsdWVHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rl
cikpOworICAgICAgICBlbHNlIGlmIChjYWNoZWRUeXBlTG9jYXRpb24tPm1fbGFzdFNlZW5UeXBl
ID09IFR5cGVTdHJpbmcpIHsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGlzTm90
Q2VsbCA9IGJyYW5jaE5vdENlbGwoSlNWYWx1ZVJlZ3ModmFsdWVHUFIpKTsKKyAgICAgICAgICAg
IGp1bXBUb0VuZC5hcHBlbmQobV9qaXQuYnJhbmNoOChNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKHZhbHVlR1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNl
dCgpKSwgVHJ1c3RlZEltbTMyKFN0cmluZ1R5cGUpKSk7CisgICAgICAgICAgICBpc05vdENlbGwu
bGluaygmbV9qaXQpOworICAgICAgICB9CisKKyAgICAgICAgLy8gTG9hZCB0aGUgVHlwZVByb2Zp
bGVyTG9nIGludG8gU2NyYXRjaDIuCisgICAgICAgIFR5cGVQcm9maWxlckxvZyogY2FjaGVkVHlw
ZVByb2ZpbGVyTG9nID0gbV9qaXQudm0oKS0+dHlwZVByb2ZpbGVyTG9nKCk7CisgICAgICAgIG1f
aml0Lm1vdmUoVHJ1c3RlZEltbVB0cihjYWNoZWRUeXBlUHJvZmlsZXJMb2cpLCBzY3JhdGNoMkdQ
Uik7CisKKyAgICAgICAgLy8gTG9hZCB0aGUgbmV4dCBMb2dFbnRyeSBpbnRvIFNjcmF0Y2gxLgor
ICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2gyR1BS
LCBUeXBlUHJvZmlsZXJMb2c6OmN1cnJlbnRMb2dFbnRyeU9mZnNldCgpKSwgc2NyYXRjaDFHUFIp
OworCisgICAgICAgIC8vIFN0b3JlIHRoZSBKU1ZhbHVlIG9udG8gdGhlIGxvZyBlbnRyeS4KKyAg
ICAgICAgbV9qaXQuc3RvcmU2NCh2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2Ny
YXRjaDFHUFIsIFR5cGVQcm9maWxlckxvZzo6TG9nRW50cnk6OnZhbHVlT2Zmc2V0KCkpKTsKKwor
ICAgICAgICAvLyBTdG9yZSB0aGUgc3RydWN0dXJlSUQgb2YgdGhlIGNlbGwgaWYgdmFsdWVHUFIg
aXMgYSBjZWxsLCBvdGhlcndpc2UsIHN0b3JlIDAgb24gdGhlIGxvZyBlbnRyeS4KKyAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXAgaXNOb3RDZWxsID0gYnJhbmNoTm90Q2VsbChKU1ZhbHVlUmVn
cyh2YWx1ZUdQUikpOworICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3ModmFsdWVHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2gzR1BSKTsK
KyAgICAgICAgbV9qaXQuc3RvcmUzMihzY3JhdGNoM0dQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Moc2NyYXRjaDFHUFIsIFR5cGVQcm9maWxlckxvZzo6TG9nRW50cnk6OnN0cnVjdHVyZUlET2Zm
c2V0KCkpKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc2tpcElzQ2VsbCA9IG1faml0
Lmp1bXAoKTsKKyAgICAgICAgaXNOb3RDZWxsLmxpbmsoJm1faml0KTsKKyAgICAgICAgbV9qaXQu
c3RvcmUzMihUcnVzdGVkSW1tMzIoMCksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2gx
R1BSLCBUeXBlUHJvZmlsZXJMb2c6OkxvZ0VudHJ5OjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSk7Cisg
ICAgICAgIHNraXBJc0NlbGwubGluaygmbV9qaXQpOworCisgICAgICAgIC8vIFN0b3JlIHRoZSB0
eXBlTG9jYXRpb24gb24gdGhlIGxvZyBlbnRyeS4KKyAgICAgICAgbV9qaXQubW92ZShUcnVzdGVk
SW1tUHRyKGNhY2hlZFR5cGVMb2NhdGlvbiksIHNjcmF0Y2gzR1BSKTsKKyAgICAgICAgbV9qaXQu
c3RvcmVQdHIoc2NyYXRjaDNHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2gxR1BS
LCBUeXBlUHJvZmlsZXJMb2c6OkxvZ0VudHJ5Ojpsb2NhdGlvbk9mZnNldCgpKSk7CisKKyAgICAg
ICAgLy8gSW5jcmVtZW50IHRoZSBjdXJyZW50IGxvZyBlbnRyeS4KKyAgICAgICAgbV9qaXQuYWRk
UHRyKFRydXN0ZWRJbW0zMihzaXplb2YoVHlwZVByb2ZpbGVyTG9nOjpMb2dFbnRyeSkpLCBzY3Jh
dGNoMUdQUik7CisgICAgICAgIG1faml0LnN0b3JlUHRyKHNjcmF0Y2gxR1BSLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhzY3JhdGNoMkdQUiwgVHlwZVByb2ZpbGVyTG9nOjpjdXJyZW50TG9nRW50
cnlPZmZzZXQoKSkpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBjbGVhckxvZyA9IG1f
aml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHNjcmF0Y2gxR1BSLCBUcnVzdGVk
SW1tUHRyKGNhY2hlZFR5cGVQcm9maWxlckxvZy0+bG9nRW5kUHRyKCkpKTsKKyAgICAgICAgYWRk
U2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAgICBzbG93UGF0aENhbGwoY2xlYXJMb2csIHRo
aXMsIG9wZXJhdGlvblByb2Nlc3NUeXBlUHJvZmlsZXJMb2dERkcsIE5vUmVzdWx0KSk7CisKKyAg
ICAgICAganVtcFRvRW5kLmxpbmsoJm1faml0KTsKKworICAgICAgICBub1Jlc3VsdChub2RlKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQogCiAjaWYgRU5BQkxFKEZUTF9KSVQpICAgICAgICAKICAg
ICBjYXNlIENoZWNrVGllclVwSW5Mb29wOiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAxNzQxNjEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAg
LTk0NCw2ICs5NDQsMTEgQEAgcHVibGljOgogICAgIC8vIG1hY2hpbmUgcmVnaXN0ZXJzLCBhbmQg
ZGVsZWdhdGUgdGhlIGNhbGxpbmcgY29udmVudGlvbiBzcGVjaWZpYwogICAgIC8vIGRlY2lzaW9u
IGFzIHRvIGhvdyB0byBmaWxsIHRoZSByZWdzaXRlcnMgdG8gc2V0dXBBcmd1bWVudHMqIG1ldGhv
ZHMuCiAKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0aW9u
X0Ugb3BlcmF0aW9uKQorICAgIHsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNFeGVjU3Rh
dGUoKTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGwob3BlcmF0aW9uKTsKKyAgICB9CiAgICAg
SklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0pJVE9wZXJhdGlvbl9FIG9wZXJhdGlv
biwgR1BSUmVnIHJlc3VsdCkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzRXhl
Y1N0YXRlKCk7CkBAIC0xMTQ4LDYgKzExNTMsMTEgQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7
CiAgICAgfQogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rpb25UeXBlPgorICAgIEpJVENv
bXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oRnVuY3Rpb25UeXBlIG9wZXJhdGlvbiwgTm9SZXN1
bHRUYWcpCisgICAgeworICAgICAgICByZXR1cm4gY2FsbE9wZXJhdGlvbihvcGVyYXRpb24pOwor
ICAgIH0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdGlvblR5cGUsIHR5cGVuYW1lIEFyZ3Vt
ZW50VHlwZTE+CiAgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihGdW5jdGlvblR5
cGUgb3BlcmF0aW9uLCBOb1Jlc3VsdFRhZywgQXJndW1lbnRUeXBlMSBhcmcxKQogICAgIHsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVQcm9maWxlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVByb2ZpbGVyLmNwcAko
cmV2aXNpb24gMTc0MTYxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVBy
b2ZpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsOSArNDYsOSBAQCB2b2lkIFR5cGVQcm9m
aWxlcjo6bG9nVHlwZXNGb3JUeXBlTG9jYXRpCiAKICAgICBkYXRhTG9nKCJcdFx0IiwgbG9jYXRp
b24tPm1fZ2xvYmFsVmFyaWFibGVJRCA9PSBUeXBlUHJvZmlsZXJSZXR1cm5TdGF0ZW1lbnQgPyAi
W1JldHVybiBTdGF0ZW1lbnRdIiA6ICJbTm9ybWFsIFN0YXRlbWVudF0iLCAiXG4iKTsKIAotICAg
IGRhdGFMb2coIlx0XHQjTG9jYWwjXG5cdFx0IiwgbG9jYXRpb24tPm1faW5zdHJ1Y3Rpb25UeXBl
U2V0LT5zZWVuVHlwZXMoKS5yZXBsYWNlKCJcbiIsICJcblx0XHQiKSwgIlxuIik7CisgICAgZGF0
YUxvZygiXHRcdCNMb2NhbCNcblx0XHQiLCBsb2NhdGlvbi0+bV9pbnN0cnVjdGlvblR5cGVTZXQt
PmR1bXBUeXBlcygpLnJlcGxhY2UoIlxuIiwgIlxuXHRcdCIpLCAiXG4iKTsKICAgICBpZiAobG9j
YXRpb24tPm1fZ2xvYmFsVHlwZVNldCkKLSAgICAgICAgZGF0YUxvZygiXHRcdCNHbG9iYWwjXG5c
dFx0IiwgbG9jYXRpb24tPm1fZ2xvYmFsVHlwZVNldC0+c2VlblR5cGVzKCkucmVwbGFjZSgiXG4i
LCAiXG5cdFx0IiksICJcbiIpOworICAgICAgICBkYXRhTG9nKCJcdFx0I0dsb2JhbCNcblx0XHQi
LCBsb2NhdGlvbi0+bV9nbG9iYWxUeXBlU2V0LT5kdW1wVHlwZXMoKS5yZXBsYWNlKCJcbiIsICJc
blx0XHQiKSwgIlxuIik7CiB9CiAKIHZvaWQgVHlwZVByb2ZpbGVyOjppbnNlcnROZXdMb2NhdGlv
bihUeXBlTG9jYXRpb24qIGxvY2F0aW9uKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVHlwZVNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVHlwZVNldC5jcHAJKHJldmlzaW9uIDE3NDE2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1R5cGVTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTAsNyArMTEwLDcg
QEAgdm9pZCBUeXBlU2V0OjppbnZhbGlkYXRlQ2FjaGUoKQogICAgIG1fc3RydWN0dXJlSURDYWNo
ZS5jbGVhcigpOwogfQogCi1TdHJpbmcgVHlwZVNldDo6c2VlblR5cGVzKCkgY29uc3QKK1N0cmlu
ZyBUeXBlU2V0OjpkdW1wVHlwZXMoKSBjb25zdAogewogICAgIGlmIChtX3NlZW5UeXBlcyA9PSBU
eXBlTm90aGluZykKICAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiKFVucmVhY2hlZCBTdGF0
ZW1lbnQpIik7CkBAIC0xNzQsNyArMTc0LDcgQEAgYm9vbCBUeXBlU2V0Ojpkb2VzVHlwZUNvbmZv
cm1Ubyh1aW50MzJfdAogICAgIC8vIC0tLS0tLSAoQU5EKQogICAgIC8vIDBiMDAxMCAhPSBzZWVu
CiAKLSAgICByZXR1cm4gKG1fc2VlblR5cGVzICYgdGVzdCkgPT0gbV9zZWVuVHlwZXM7CisgICAg
cmV0dXJuIG1fc2VlblR5cGVzICE9IFR5cGVOb3RoaW5nICYmIChtX3NlZW5UeXBlcyAmIHRlc3Qp
ID09IG1fc2VlblR5cGVzOwogfQogCiBTdHJpbmcgVHlwZVNldDo6ZGlzcGxheU5hbWUoKSBjb25z
dApAQCAtMzUzLDExICszNTMsNiBAQCBTdHJpbmcgVHlwZVNldDo6dG9KU09OU3RyaW5nKCkgY29u
c3QKICAgICByZXR1cm4ganNvbi50b1N0cmluZygpOwogfQogCi12b2lkIFR5cGVTZXQ6OmR1bXBT
ZWVuVHlwZXMoKQotewotICAgIGRhdGFMb2coc2VlblR5cGVzKCksICJcbiIpOwotfQotCiBTdHJ1
Y3R1cmVTaGFwZTo6U3RydWN0dXJlU2hhcGUoKQogICAgIDogbV9wcm90byhudWxscHRyKQogICAg
ICwgbV9wcm9wZXJ0eUhhc2gobnVsbHB0cikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1R5cGVTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9UeXBlU2V0LmgJKHJldmlzaW9uIDE3NDE2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1R5cGVTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMTAwLDcgKzEwMCw3IEBAIHB1
YmxpYzoKICAgICB2b2lkIGFkZFR5cGVJbmZvcm1hdGlvbihSdW50aW1lVHlwZSwgUGFzc1JlZlB0
cjxTdHJ1Y3R1cmVTaGFwZT4sIFN0cnVjdHVyZUlEKTsKICAgICBzdGF0aWMgUnVudGltZVR5cGUg
Z2V0UnVudGltZVR5cGVGb3JWYWx1ZShKU1ZhbHVlKTsKICAgICB2b2lkIGludmFsaWRhdGVDYWNo
ZSgpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIFN0cmluZyBzZWVuVHlwZXMoKSBjb25zdDsKKyAg
ICBTdHJpbmcgZHVtcFR5cGVzKCkgY29uc3Q7CiAgICAgU3RyaW5nIGRpc3BsYXlOYW1lKCkgY29u
c3Q7CiAgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiBh
bGxQcmltaXRpdmVUeXBlTmFtZXMoKSBjb25zdDsKICAgICBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlN0cnVjdHVyZURl
c2NyaXB0aW9uPj4gYWxsU3RydWN0dXJlUmVwcmVzZW50YXRpb25zKCkgY29uc3Q7CkBAIC0xMDks
MTAgKzEwOSwxMCBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIGxlYXN0Q29tbW9uQW5jZXN0b3IoKSBj
b25zdDsKICAgICBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR5cGVT
ZXQ+IGluc3BlY3RvclR5cGVTZXQoKSBjb25zdDsKICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7
IHJldHVybiBtX3NlZW5UeXBlcyA9PSBUeXBlTm90aGluZzsgfQorICAgIGJvb2wgZG9lc1R5cGVD
b25mb3JtVG8odWludDMyX3QgdGVzdCkgY29uc3Q7CisgICAgdWludDMyX3Qgc2VlblR5cGVzKCkg
Y29uc3QgeyByZXR1cm4gbV9zZWVuVHlwZXM7IH0KIAogcHJpdmF0ZToKLSAgICB2b2lkIGR1bXBT
ZWVuVHlwZXMoKTsKLSAgICBib29sIGRvZXNUeXBlQ29uZm9ybVRvKHVpbnQzMl90IHRlc3QpIGNv
bnN0OwogCiAgICAgdWludDMyX3QgbV9zZWVuVHlwZXM7CiAgICAgYm9vbCBtX2lzT3ZlcmZsb3du
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3R5cGVQcm9maWxlci9kZmctaml0
LW9wdGltaXphdGlvbnMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rl
c3RzL3R5cGVQcm9maWxlci9kZmctaml0LW9wdGltaXphdGlvbnMuanMJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvdHlwZVByb2ZpbGVyL2RmZy1qaXQtb3B0aW1p
emF0aW9ucy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM4IEBACitsb2FkKCIuL2RyaXZl
ci9kcml2ZXIuanMiKTsKKworZnVuY3Rpb24gdGllclVwVG9ERkcoZnVuYywgYXJnKSAKK3sKKyAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDA7IGkrKykKKyAgICAgICAgZnVuYyhhcmcpOworfQor
Cit2YXIgdHlwZXMgPSBbVC5Cb29sZWFuLCBULkludGVnZXIsIFQuTnVsbCwgVC5OdW1iZXIsIFQu
U3RyaW5nLCBULlVuZGVmaW5lZF07Cit2YXIgdmFsdWVzID0gW3RydWUsIDEsIG51bGwsIDEuMSwg
ImhlbGxvIiwgdW5kZWZpbmVkXTsKK3ZhciBmdW5jcyA9IFtmdW5jdGlvbih4KSB7IHJldHVybiB4
OyB9LCBmdW5jdGlvbih4KSB7IHJldHVybiB4OyB9LCBmdW5jdGlvbih4KSB7IHJldHVybiB4OyB9
LCAKKyAgICBmdW5jdGlvbih4KSB7IHJldHVybiB4OyB9LCBmdW5jdGlvbih4KSB7IHJldHVybiB4
OyB9LCBmdW5jdGlvbih4KSB7IHJldHVybiB4OyB9XQorCithc3NlcnQodHlwZXMubGVuZ3RoID09
PSB2YWx1ZXMubGVuZ3RoICYmIHZhbHVlcy5sZW5ndGggPT09IGZ1bmNzLmxlbmd0aCk7CisKKy8v
IE1ha2Ugc3VyZSBiYXNlbGluZSBERkcgdHlwZSBjaGVjayBvcHRpbWl6YXRpb25zIHdvcmsuCisv
LyBUaWVyIHVwIGVhY2ggZnVuY3Rpb24gb24gYSBkaWZmZXJlbnQgdHlwZSwgdGhlbiBjYWxsIGl0
IHdpdGggYWxsIG90aGVyIHByaW1pdGl2ZSB0eXBlcyB0byBtYWtlIHN1cmUgdGhleSdyZSByZWNv
cmRlZC4KK2ZvciAodmFyIGkgPSAwOyBpIDwgdHlwZXMubGVuZ3RoOyBpKyspIHsKKyAgICB2YXIg
ZnVuYyA9IGZ1bmNzW2ldOworICAgIHZhciB0eXBlID0gdHlwZXNbaV07CisgICAgdmFyIHZhbHVl
ID0gdmFsdWVzW2ldOworICAgIG5vSW5saW5lKGZ1bmMpOworICAgIHRpZXJVcFRvREZHKGZ1bmMs
IHZhbHVlKTsKKyAgICB2YXIgdHlwZUluZm8gPSBmaW5kVHlwZUZvckV4cHJlc3Npb24oZnVuYywg
IngiKTsgCisgICAgYXNzZXJ0KHR5cGVJbmZvLmluc3RydWN0aW9uVHlwZVNldC5wcmltaXRpdmVU
eXBlTmFtZXMubGVuZ3RoID09PSAxLCAiT25seSBvbmUgcHJpbWl0aXZlIHR5cGUgc2hvdWxkIGhh
dmUgYmVlbiBzZWVuIHNvIGZhci4iKTsKKyAgICBhc3NlcnQodHlwZUluZm8uaW5zdHJ1Y3Rpb25U
eXBlU2V0LnByaW1pdGl2ZVR5cGVOYW1lcy5pbmRleE9mKHR5cGUpICE9PSAtMSwgIlNob3VsZCBo
YXZlIGJlZW4gb3B0aW1pemVkIG9uIHR5cGU6ICIgKyB0eXBlKTsKKyAgICBmb3IgKHZhciBqID0g
MDsgaiA8IHR5cGVzLmxlbmd0aDsgaisrKSB7CisgICAgICAgIGlmICh0eXBlID09PSBULk51bWJl
ciAmJiB0eXBlc1tqXSA9PT0gVC5JbnRlZ2VyKSB7CisgICAgICAgICAgICAvLyBJZiB3ZSBvcHRp
bWl6ZSBvbiB0eXBlIE51bWJlciwgYnV0IHdlIHBhc3MgaW4gYW4gSW50ZWdlciwgb3VyIHR5cGVj
aGVjayB3aWxsIHN0aWxsIHBhc3MsIHNvIHdlIHdvbnQgZGlyZWN0bHkgZ2V0CisgICAgICAgICAg
ICAvLyB0eXBlIEludGVnZXIgYmVjYXVzZSBULkludGVnZXIgaXMgaW1wbGllZCB0byBiZSBjb250
YWluZWQgaW4gVC5OdW1iZXIuCisgICAgICAgICAgICBjb250aW51ZTsgCisgICAgICAgIH0KKwor
ICAgICAgICBmdW5jKHZhbHVlc1tqXSk7CisgICAgICAgIHR5cGVJbmZvID0gZmluZFR5cGVGb3JF
eHByZXNzaW9uKGZ1bmMsICJ4Iik7CisgICAgICAgIGFzc2VydCh0eXBlSW5mby5pbnN0cnVjdGlv
blR5cGVTZXQucHJpbWl0aXZlVHlwZU5hbWVzLmluZGV4T2YodHlwZXNbal0pICE9PSAtMSwgIlNo
b3VsZCBoYXZlIHNlZW4gdHlwZTogIiArIHR5cGVzW2pdICsgIiAiICsgaSArICIsIiArIGopOwor
ICAgIH0KK30K
</data>
<flag name="review"
          id="263740"
          type_id="1"
          status="+"
          setter="fpizlo"
    />
          </attachment>
      

    </bug>

</bugzilla>