<?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>99872</bug_id>
          
          <creation_ts>2012-10-19 14:30:41 -0700</creation_ts>
          <short_desc>JSC: Change stack recursion checks to be based on stack availability</short_desc>
          <delta_ts>2012-10-23 07:50:08 -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>
          <dependson>100109</dependson>
    
    <dependson>100117</dependson>
          <blocked>98928</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>barraclough</cc>
    
    <cc>cdumez</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>ossy</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>746645</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2012-10-19 14:30:41 -0700</bug_when>
    <thetext>Some existing stack checks are based on  max reentry depth estimates.  Fix these checks to be based on actual available stack space.  Also fix the JSStack to reserve some space for error handling so that we won&apos;t end up throwing a StackOverflowError when processing (throwing and reporting) an exception.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>746939</commentid>
    <comment_count>1</comment_count>
      <attachid>169764</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2012-10-20 00:50:23 -0700</bug_when>
    <thetext>Created attachment 169764
Fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>746940</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-20 00:53:00 -0700</bug_when>
    <thetext>Attachment 169764 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/fast...&quot; exit_code: 1
Source/JavaScriptCore/interpreter/Interpreter.cpp:125:  PREFERRED_NATIVE_STACK_AVAILBILITY is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/JavaScriptCore/interpreter/Interpreter.cpp:126:  MINIMUM_NATIVE_STACK_AVAILBILITY is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/JavaScriptCore/interpreter/Interpreter.cpp:127:  MINIMUM_INTERPRETER_NATIVE_STACK is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/JavaScriptCore/interpreter/Interpreter.h:250:  size_t is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/JavaScriptCore/interpreter/Interpreter.h:280:  UNINITIALIZED_NATIVE_STACK_AVAILABILITY is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 5 in 23 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>746947</commentid>
    <comment_count>3</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2012-10-20 01:16:38 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Attachment 169764 [details] did not pass style-queue:
&gt; 
&gt; Source/JavaScriptCore/interpreter/Interpreter.cpp:125:  PREFERRED_NATIVE_STACK_AVAILBILITY is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
&gt; Source/JavaScriptCore/interpreter/Interpreter.cpp:126:  MINIMUM_NATIVE_STACK_AVAILBILITY is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
&gt; Source/JavaScriptCore/interpreter/Interpreter.cpp:127:  MINIMUM_INTERPRETER_NATIVE_STACK is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
&gt; Source/JavaScriptCore/interpreter/Interpreter.h:280:  UNINITIALIZED_NATIVE_STACK_AVAILABILITY is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]

These are all constants, e.g. &quot;const int PREFERRED_NATIVE_STACK_AVAILBILITY = 1024 * 1024;&quot;  The style guide says that #define constants should be capitalized with underscores, but does not say anything about typed constants like these.  I think it is appropriate to use this same &quot;capitalized with underscores&quot; convention for typed constants as well.

&gt; Source/JavaScriptCore/interpreter/Interpreter.h:250:  size_t is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]

This is from &quot;operator size_t()&quot;.  Bug against check-webkit-style filed: &lt;https://bugs.webkit.org/show_bug.cgi?id=99911&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>746954</commentid>
    <comment_count>4</comment_count>
      <attachid>169764</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-10-20 01:34:27 -0700</bug_when>
    <thetext>Comment on attachment 169764
Fix.

Attachment 169764 did not pass win-ews (win):
Output: http://queues.webkit.org/results/14462793</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>746957</commentid>
    <comment_count>5</comment_count>
      <attachid>169767</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2012-10-20 02:24:17 -0700</bug_when>
    <thetext>Created attachment 169767
Fix 2: a partial edit slipped thru on the first patch.  Now fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>746958</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-20 02:27:01 -0700</bug_when>
    <thetext>Attachment 169767 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/fast...&quot; exit_code: 1
Source/JavaScriptCore/interpreter/Interpreter.cpp:125:  PREFERRED_NATIVE_STACK_AVAILBILITY is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/JavaScriptCore/interpreter/Interpreter.cpp:126:  MINIMUM_NATIVE_STACK_AVAILBILITY is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/JavaScriptCore/interpreter/Interpreter.cpp:127:  MINIMUM_INTERPRETER_NATIVE_STACK is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/JavaScriptCore/interpreter/Interpreter.h:250:  size_t is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/JavaScriptCore/interpreter/Interpreter.h:280:  UNINITIALIZED_NATIVE_STACK_AVAILABILITY is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 5 in 23 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>746964</commentid>
    <comment_count>7</comment_count>
      <attachid>169767</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2012-10-20 03:51:21 -0700</bug_when>
    <thetext>Comment on attachment 169767
Fix 2: a partial edit slipped thru on the first patch.  Now fixed.

All bots are green.  We&apos;re ready for a review now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>747176</commentid>
    <comment_count>8</comment_count>
      <attachid>169767</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-10-21 17:47:25 -0700</bug_when>
    <thetext>Comment on attachment 169767
Fix 2: a partial edit slipped thru on the first patch.  Now fixed.

I buy his. It would be good if you got a second review for this, though; I don&apos;t have a great intuition for</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>747177</commentid>
    <comment_count>9</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-10-21 17:48:03 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 169767 [details])
&gt; I buy his. It would be good if you got a second review for this, though; I don&apos;t have a great intuition for

... For the meaning of soundness in this code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>747796</commentid>
    <comment_count>10</comment_count>
      <attachid>169767</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-10-22 13:02:30 -0700</bug_when>
    <thetext>Comment on attachment 169767
Fix 2: a partial edit slipped thru on the first patch.  Now fixed.

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

Please make sure to address the interpreter caching issue before landing, as that is a real correctness problem.

&gt; Source/JavaScriptCore/interpreter/Interpreter.cpp:117
&gt; +Interpreter::StackAvailability::StackAvailability(Interpreter&amp; interpreter, const StackBounds&amp; stack)

Since this class selects a stack usage policy, instead of reporting how much stack is available, maybe we should call it &quot;StackPolicy&quot;.

&gt; Source/JavaScriptCore/interpreter/Interpreter.cpp:123
&gt; +    if (m_interpreter.m_nativeStackAvailability == UNINITIALIZED_NATIVE_STACK_AVAILABILITY
&gt; +        || (!!m_interpreter.m_errorHandlingModeReentry)) {
&gt; +        int size = stack.size();

Since VM exit and re-entry can restart on another thread, it&apos;s not valid to cache this value in the interpreter.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>747945</commentid>
    <comment_count>11</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2012-10-22 15:12:59 -0700</bug_when>
    <thetext>Issues have been addressed.

Landed in r132143: &lt;http://trac.webkit.org/changeset/132143&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>748319</commentid>
    <comment_count>12</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-10-23 00:24:03 -0700</bug_when>
    <thetext>We hit an assertion in EFL API tests after this patch:

ASSERTION FAILED: (requiredCapacity &gt;= 0) &amp;&amp; (requiredCapacity &lt; size)
/home/chris/Devel/WebKit/Source/JavaScriptCore/interpreter/Interpreter.cpp(194) : JSC::Interpreter::StackPolicy::StackPolicy(JSC::Interpreter&amp;, const WTF::StackBounds&amp;)
1   0x2b6781fbd5a6 JSC::Interpreter::StackPolicy::StackPolicy(JSC::Interpreter&amp;, WTF::StackBounds const&amp;)
2   0x2b6781fc095c JSC::Interpreter::execute(JSC::ProgramExecutable*, JSC::ExecState*, JSC::JSObject*)
3   0x2b6782080af4 JSC::evaluate(JSC::ExecState*, JSC::SourceCode const&amp;, JSC::JSValue, JSC::JSValue*)
4   0x2b677e445e65 WebCore::JSMainThreadExecState::evaluate(JSC::ExecState*, JSC::SourceCode const&amp;, JSC::JSValue, JSC::JSValue*)
5   0x2b677e462bbc WebCore::ScriptController::evaluateInWorld(WebCore::ScriptSourceCode const&amp;, WebCore::DOMWrapperWorld*)
6   0x2b677e462cbe WebCore::ScriptController::evaluate(WebCore::ScriptSourceCode const&amp;)
7   0x2b677d70490c WebCore::ScriptController::executeScript(WebCore::ScriptSourceCode const&amp;)
8   0x2b677d704862 WebCore::ScriptController::executeScript(WTF::String const&amp;, bool)
9   0x2b677aa55aa9 WebKit::WebPage::runJavaScriptInMainFrame(WTF::String const&amp;, unsigned long)
10  0x2b677aae383e void CoreIPC::callMemberFunction&lt;WebKit::WebPage, void (WebKit::WebPage::*)(WTF::String const&amp;, unsigned long), WTF::String, unsigned long&gt;(CoreIPC::Arguments2&lt;WTF::String, unsigned long&gt; const&amp;, WebKit::WebPage*, void (WebKit::WebPage::*)(WTF::String const&amp;, unsigned long))
11  0x2b677aae159a void CoreIPC::handleMessage&lt;Messages::WebPage::RunJavaScriptInMainFrame, WebKit::WebPage, void (WebKit::WebPage::*)(WTF::String const&amp;, unsigned long)&gt;(CoreIPC::MessageDecoder&amp;, WebKit::WebPage*, void (WebKit::WebPage::*)(WTF::String const&amp;, unsigned long))
12  0x2b677aadf44e WebKit::WebPage::didReceiveWebPageMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::MessageDecoder&amp;)
13  0x2b677aa58d2e WebKit::WebPage::didReceiveMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::MessageDecoder&amp;)
14  0x2b677a988b88 WebKit::WebProcess::didReceiveMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::MessageDecoder&amp;)
15  0x2b677a98459f WebKit::WebConnectionToUIProcess::didReceiveMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::MessageDecoder&amp;)
16  0x2b677a84bb4c CoreIPC::Connection::dispatchMessage(CoreIPC::MessageID, CoreIPC::MessageDecoder&amp;)
17  0x2b677a84bc85 CoreIPC::Connection::dispatchMessage(CoreIPC::Connection::Message&lt;CoreIPC::MessageDecoder&gt;&amp;)
18  0x2b677a84be21 CoreIPC::Connection::dispatchOneMessage()
19  0x2b677a855f76 WTF::FunctionWrapper&lt;void (CoreIPC::Connection::*)()&gt;::operator()(CoreIPC::Connection*)
20  0x2b677a855d7c WTF::BoundFunctionImpl&lt;WTF::FunctionWrapper&lt;void (CoreIPC::Connection::*)()&gt;, void (CoreIPC::Connection*)&gt;::operator()()
21  0x2b677aa3775c WTF::Function&lt;void ()&gt;::operator()() const
22  0x2b677deee132 WebCore::RunLoop::performWork()
23  0x2b677e8a88a7 WebCore::RunLoop::wakeUpEvent(void*, void*, unsigned int)
24  0x2b6780d28901
25  0x2b6780d27851
26  0x2b6780d27d97 ecore_main_loop_begin
27  0x2b677e8a8871 WebCore::RunLoop::run()
28  0x2b677aab4d78 WebProcessMainEfl
29  0x4007c4 main
30  0x2b677ae7e76d __libc_start_main
31  0x4006e9</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>748324</commentid>
    <comment_count>13</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2012-10-23 00:29:13 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; We hit an assertion in EFL API tests after this patch:
&gt; 
&gt; ASSERTION FAILED: (requiredCapacity &gt;= 0) &amp;&amp; (requiredCapacity &lt; size)
&gt; /home/chris/Devel/WebKit/Source/JavaScriptCore/interpreter/Interpreter.cpp(194) : JSC::Interpreter::StackPolicy::StackPolicy(JSC::Interpreter&amp;, const WTF::StackBounds&amp;)

Can you please check what the value of requiredCapacity is in your case that is failing this assertion?  Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>748338</commentid>
    <comment_count>14</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-10-23 00:40:53 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; (In reply to comment #12)
&gt; &gt; We hit an assertion in EFL API tests after this patch:
&gt; &gt; 
&gt; &gt; ASSERTION FAILED: (requiredCapacity &gt;= 0) &amp;&amp; (requiredCapacity &lt; size)
&gt; &gt; /home/chris/Devel/WebKit/Source/JavaScriptCore/interpreter/Interpreter.cpp(194) : JSC::Interpreter::StackPolicy::StackPolicy(JSC::Interpreter&amp;, const WTF::StackBounds&amp;)
&gt; 
&gt; Can you please check what the value of requiredCapacity is in your case that is failing this assertion?  Thanks.

Sure, I&apos;ll report back soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>748370</commentid>
    <comment_count>15</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-10-23 01:34:20 -0700</bug_when>
    <thetext>Here are the results on Ubuntu 64 bit:

requiredCapacity: 0, size: -944271360
ASSERTION FAILED: (requiredCapacity &gt;= 0) &amp;&amp; (requiredCapacity &lt; size)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>748380</commentid>
    <comment_count>16</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2012-10-23 01:47:15 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; Here are the results on Ubuntu 64 bit:
&gt; 
&gt; requiredCapacity: 0, size: -944271360
&gt; ASSERTION FAILED: (requiredCapacity &gt;= 0) &amp;&amp; (requiredCapacity &lt; size)

Your size should not be negative.  It is likely that your port is not implementing WTF::StackBounds correctly.  Please look into that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>748444</commentid>
    <comment_count>17</comment_count>
      <attachid>169767</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-10-23 03:07:14 -0700</bug_when>
    <thetext>Comment on attachment 169767
Fix 2: a partial edit slipped thru on the first patch.  Now fixed.

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

&gt;&gt; Source/JavaScriptCore/interpreter/Interpreter.cpp:123
&gt;&gt; +        int size = stack.size();
&gt; 
&gt; Since VM exit and re-entry can restart on another thread, it&apos;s not valid to cache this value in the interpreter.

Why is this stored in an int? stack.size() returns a size_t so it can overflow and becomes negative, right?

StackBounds does not seem to have any port-specific implementation as far as I could see.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>748460</commentid>
    <comment_count>18</comment_count>
      <attachid>169767</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-10-23 03:46:37 -0700</bug_when>
    <thetext>Comment on attachment 169767
Fix 2: a partial edit slipped thru on the first patch.  Now fixed.

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

&gt;&gt;&gt; Source/JavaScriptCore/interpreter/Interpreter.cpp:123
&gt;&gt;&gt; +        int size = stack.size();
&gt;&gt; 
&gt;&gt; Since VM exit and re-entry can restart on another thread, it&apos;s not valid to cache this value in the interpreter.
&gt; 
&gt; Why is this stored in an int? stack.size() returns a size_t so it can overflow and becomes negative, right?
&gt; 
&gt; StackBounds does not seem to have any port-specific implementation as far as I could see.

By the way, I may be misunderstanding Geoffrey Garen&apos;s comment but it seems to me that the patch that landed still caches stack.size().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>748465</commentid>
    <comment_count>19</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-10-23 03:53:31 -0700</bug_when>
    <thetext>I can confirm that using size_t instead of int in the constructor solves crashing on EFL port.

Here is the patch I used for testing (for reference):
http://pastebin.com/MX0Px5S5</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>748586</commentid>
    <comment_count>20</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-10-23 06:44:46 -0700</bug_when>
    <thetext>r132143 made fast/xmlhttprequest/xmlhttprequest-recursive-sync-event.html flakey on Qt - https://bugs.webkit.org/show_bug.cgi?id=100117</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>748644</commentid>
    <comment_count>21</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2012-10-23 07:50:08 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; By the way, I may be misunderstanding Geoffrey Garen&apos;s comment but it seems to me that the patch that landed still caches stack.size().

You misunderstood.  Geoff&apos;s comment was that the required stack capacity used for the stack checks should not be cached in the interpreter, and this patch is not in violation of that.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>169764</attachid>
            <date>2012-10-20 00:50:23 -0700</date>
            <delta_ts>2012-10-20 02:24:17 -0700</delta_ts>
            <desc>Fix.</desc>
            <filename>bug-99872.patch</filename>
            <type>text/plain</type>
            <size>40987</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTMxOTgyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc5IEBA
CisyMDEyLTEwLTIwICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBD
aGFuZ2Ugc3RhY2sgcmVjdXJzaW9uIGNoZWNrcyB0byBiZSBiYXNlZCBvbiBzdGFjayBhdmFpbGFi
aWxpdHkuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05
OTg3Mi4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAt
IFJlbW92ZSBtX3JlZW50cnlEZXB0aCwgVGhyZWFkU3RhY2tUeXBlIHdoaWNoIGFyZSBub3cgb2Jz
b2xldGUuCisgICAgICAgIC0gUmVwbGFjZWQgdGhlIHJlZW50cnlEZXB0aCBjaGVja3Mgd2l0aCBh
IFN0YWNrQm91bmRzIGNoZWNrLgorICAgICAgICAtIEFkZGVkIHRoZSBJbnRlcnByZXRlcjo6U3Rh
Y2tBdmFpbGFiaWxpdHkgY2xhc3MgdG8gY29tcHV0ZSBhCisgICAgICAgICAgcmVhc29uYWJsZSBz
dGFjayBhdmFpbGFiaWxpdHkgcmVxdWlyZW1lbnQgZ2l2ZW4gdGhlIG5hdGl2ZSBzdGFjaworICAg
ICAgICAgIHRoYXQgdGhlIGludGVycHJldGVyIGlzIGV4ZWN1dGluZyBvbiBhdCB0aGF0IHRpbWUu
CisgICAgICAgIC0gUmVzZXJ2ZWQgYW4gYW1vdW50IG9mIEpTU3RhY2sgc3BhY2UgZm9yIHRoZSB1
c2Ugb2YgZXJyb3IgaGFuZGxpbmcKKyAgICAgICAgICBhbmQgZW5hYmxlIGl0cyB1c2UgKHVzaW5n
IEludGVycHJldGVyOjpFcnJvckhhbmRsaW5nTW9kZSkgd2hlbgorICAgICAgICAgIHdlJ3JlIGFi
b3V0IHRvIHRocm93IG9yIHJlcG9ydCBhbiBleGNlcHRpb24uCisgICAgICAgIC0gSW50ZXJwcmV0
ZXI6OlN0YWNrQXZhaWxhYmlsaXR5IGFsc28gYWxsb3dzIG1vcmUgbmF0aXZlIHN0YWNrIHNwYWNl
CisgICAgICAgICAgdG8gYmUgdXNlZCB3aGVuIGluIEVycm9ySGFuZGxpbmdNb2RlLiBUaGlzIGlz
IG5lZWRlZCBpbiB0aGUgY2FzZQorICAgICAgICAgIG9mIG5hdGl2ZSBzdGFjayBvdmVyZmxvd3Mu
CisgICAgICAgIC0gRml4ZWQgdGhlIHBhcnNlciBzbyB0aGF0IGl0IHRocm93cyBhIFN0YWNrT3Zl
cmZsb3dFcnJvciBpbnN0ZWFkIG9mCisgICAgICAgICAgYSBTeW50YXhFcnJvciB3aGVuIGl0IGVu
Y291bnRlcnMgYSBzdGFjayBvdmVyZmxvdy4KKworICAgICAgICAqIEFQSS9KU0NvbnRleHRSZWYu
Y3BwOgorICAgICAgICAoSlNDb250ZXh0R3JvdXBDcmVhdGUpOgorICAgICAgICAoSlNHbG9iYWxD
b250ZXh0Q3JlYXRlSW5Hcm91cCk6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUub3JkZXI6Cisg
ICAgICAgICogSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLmRlZjoKKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHA6CisgICAgICAg
IChKU0M6OkludGVycHJldGVyOjpFcnJvckhhbmRsaW5nTW9kZTo6RXJyb3JIYW5kbGluZ01vZGUp
OgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OkVycm9ySGFuZGxp
bmdNb2RlOjp+RXJyb3JIYW5kbGluZ01vZGUpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6
U3RhY2tBdmFpbGFiaWxpdHk6OlN0YWNrQXZhaWxhYmlsaXR5KToKKyAgICAgICAgKEpTQzo6SW50
ZXJwcmV0ZXI6OlN0YWNrQXZhaWxhYmlsaXR5Ojp+U3RhY2tBdmFpbGFiaWxpdHkpOgorICAgICAg
ICAoSlNDOjpJbnRlcnByZXRlcjo6SW50ZXJwcmV0ZXIpOgorICAgICAgICAoSlNDOjpJbnRlcnBy
ZXRlcjo6ZXhlY3V0ZSk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpleGVjdXRlQ2FsbCk6
CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpleGVjdXRlQ29uc3RydWN0KToKKyAgICAgICAg
KEpTQzo6SW50ZXJwcmV0ZXI6OnByZXBhcmVGb3JSZXBlYXRDYWxsKToKKyAgICAgICAgKiBpbnRl
cnByZXRlci9JbnRlcnByZXRlci5oOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEludGVycHJl
dGVyKToKKyAgICAgICAgKEVycm9ySGFuZGxpbmdNb2RlKToKKyAgICAgICAgKFN0YWNrQXZhaWxh
YmlsaXR5KToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OlN0YWNrQXZhaWxhYmlsaXR5Ojpv
cGVyYXRvciBzaXplX3QpOgorICAgICAgICAqIGludGVycHJldGVyL0pTU3RhY2suY3BwOgorICAg
ICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SlNTdGFjazo6SlNTdGFjayk6CisgICAgICAgIChK
U0M6OkpTU3RhY2s6Omdyb3dTbG93Q2FzZSk6CisgICAgICAgIChKU0M6OkpTU3RhY2s6OmVuYWJs
ZUVycm9yU3RhY2tSZXNlcnZlKToKKyAgICAgICAgKEpTQzo6SlNTdGFjazo6ZGlzYWJsZUVycm9y
U3RhY2tSZXNlcnZlKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9KU1N0YWNrLmg6CisgICAgICAg
IChKU1N0YWNrKToKKyAgICAgICAgKEpTQzo6SlNTdGFjazo6cmVzZXJ2YXRpb25FbmQpOgorICAg
ICAgICAoSlNDKToKKyAgICAgICAgKiBqc2MuY3BwOgorICAgICAgICAoanNjbWFpbik6CisgICAg
ICAgICogcGFyc2VyL1BhcnNlci5jcHA6CisgICAgICAgIChKU0M6Ojo6UGFyc2VyKToKKyAgICAg
ICAgKiBwYXJzZXIvUGFyc2VyLmg6CisgICAgICAgIChQYXJzZXIpOgorICAgICAgICAoSlNDOjo6
OnBhcnNlKToKKyAgICAgICAgKiBydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuY3BwOgorICAgICAg
ICAoSlNDOjp0aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcik6CisgICAgICAgICogcnVudGltZS9KU0ds
b2JhbERhdGEuY3BwOgorICAgICAgICAoSlNDOjpKU0dsb2JhbERhdGE6OkpTR2xvYmFsRGF0YSk6
CisgICAgICAgIChKU0M6OkpTR2xvYmFsRGF0YTo6Y3JlYXRlQ29udGV4dEdyb3VwKToKKyAgICAg
ICAgKEpTQzo6SlNHbG9iYWxEYXRhOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpKU0dsb2JhbERh
dGE6OmNyZWF0ZUxlYWtlZCk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsRGF0YTo6c2hhcmVkSW5z
dGFuY2UpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxEYXRhLmg6CisgICAgICAgIChKU0Mp
OgorICAgICAgICAoSlNHbG9iYWxEYXRhKToKKyAgICAgICAgKiBydW50aW1lL1N0cmluZ1JlY3Vy
c2lvbkNoZWNrZXIuaDoKKyAgICAgICAgKEpTQzo6U3RyaW5nUmVjdXJzaW9uQ2hlY2tlcjo6cGVy
Zm9ybUNoZWNrKToKKyAgICAgICAgKiB0ZXN0UmVnRXhwLmNwcDoKKyAgICAgICAgKHJlYWxNYWlu
KToKKwogMjAxMi0xMC0xOSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAg
ICAgIERGRyBzaG91bGQgaGF2ZSBzb21lIGZhY2lsaXR5IGZvciByZWNvZ25pemluZyByZWR1bmRh
bnQgQ2hlY2tBcnJheXMgYW5kIEFycmF5aWZpZXMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS5vcmRlcgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUub3JkZXIJKHJldmlzaW9uIDEzMTk4MikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5vcmRlcgkod29ya2luZyBjb3B5KQpAQCAtMTIwLDcg
KzEyMCw3IEBAIF9KU0dsb2JhbENvbnRleHRDcmVhdGUKIF9fWk4zSlNDNkpTTG9jazRsb2NrRU5T
XzE0SlNMb2NrQmVoYXZpb3JFCiBfX1pOM0pTQ0wxN2NyZWF0ZUpTTG9ja0NvdW50RXYKIF9fWk4z
SlNDMTJKU0dsb2JhbERhdGExNHNoYXJlZEluc3RhbmNlRXYKLV9fWk4zSlNDMTJKU0dsb2JhbERh
dGFDMkVOUzBfMTRHbG9iYWxEYXRhVHlwZUVOU18xNVRocmVhZFN0YWNrVHlwZUUKK19fWk4zSlND
MTJKU0dsb2JhbERhdGFDMkVOUzBfMTRHbG9iYWxEYXRhVHlwZUVOU184SGVhcFR5cGVFCiBfX1pO
M0pTQzIxY3JlYXRlSWRlbnRpZmllclRhYmxlRXYKIF9fWk4zSlNDMTdDb21tb25JZGVudGlmaWVy
c0MxRVBOU18xMkpTR2xvYmFsRGF0YUUKIF9fWk4zSlNDMTdDb21tb25JZGVudGlmaWVyc0MyRVBO
U18xMkpTR2xvYmFsRGF0YUUKQEAgLTQ0MCw3ICs0NDAsNyBAQCBfX1pOM1dURjZzdHJ0b2RFUEtj
UFBjCiBfX1pOM1dURjEwU3RyaW5nSW1wbDIyY29udGFpbnNPbmx5V2hpdGVzcGFjZUV2CiBfX1pO
M1dURjEwU3RyaW5nSW1wbDExcmV2ZXJzZUZpbmRFUFMwX2oKIF9fWk4zV1RGMTdlcXVhbElnbm9y
aW5nQ2FzZUVQTlNfMTBTdHJpbmdJbXBsRVMxXwotX19aTjNKU0MxMkpTR2xvYmFsRGF0YTEyY3Jl
YXRlTGVha2VkRU5TXzE1VGhyZWFkU3RhY2tUeXBlRQorX19aTjNKU0MxMkpTR2xvYmFsRGF0YTEy
Y3JlYXRlTGVha2VkRU5TXzhIZWFwVHlwZUUKIF9fWk4zSlNDMjRKU09iamVjdFdpdGhHbG9iYWxP
YmplY3RDMkVSTlNfMTJKU0dsb2JhbERhdGFFUE5TXzE0SlNHbG9iYWxPYmplY3RFUE5TXzlTdHJ1
Y3R1cmVFCiBfX1pOM0pTQzhldmFsdWF0ZUVQTlNfOUV4ZWNTdGF0ZUVQTlNfMTRTY29wZUNoYWlu
Tm9kZUVSS05TXzEwU291cmNlQ29kZUVOU183SlNWYWx1ZUUKIF9fWk4zSlNDMTdQcm9ncmFtRXhl
Y3V0YWJsZUMxRVBOU185RXhlY1N0YXRlRVJLTlNfMTBTb3VyY2VDb2RlRQpAQCAtMTcwNyw3ICsx
NzA3LDcgQEAgX19aTjNKU0M4SlNQYXJzZXIyMXBhcnNlRG9XaGlsZVN0YXRlbWVudAogX19aTjNK
U0NMMTZtYXRoUHJvdG9GdW5jTWluRVBOU185RXhlY1N0YXRlRQogX19aTjNKU0NMMjFhcnJheVBy
b3RvRnVuY1JldmVyc2VFUE5TXzlFeGVjU3RhdGVFCiBfX1pOM0pTQzE3UHJvZ3JhbUV4ZWN1dGFi
bGUxM3Zpc2l0Q2hpbGRyZW5FUk5TXzlNYXJrU3RhY2tFCi1fX1pOM0pTQzEySlNHbG9iYWxEYXRh
MThjcmVhdGVDb250ZXh0R3JvdXBFTlNfMTVUaHJlYWRTdGFja1R5cGVFCitfX1pOM0pTQzEySlNH
bG9iYWxEYXRhMThjcmVhdGVDb250ZXh0R3JvdXBFTlNfOEhlYXBUeXBlRQogX19aTjNKU0MxMkpT
R2xvYmFsRGF0YTIyY2xlYXJCdWlsdGluU3RydWN0dXJlc0V2CiBfX1pOM0pTQzRIZWFwN2Rlc3Ry
b3lFdgogX19aTjNKU0M5SklUVGh1bmtzMjJjbGVhckhvc3RGdW5jdGlvblN0dWJzRXYKQEAgLTE4
NDIsNyArMTg0Miw3IEBAIF9KU09iamVjdEhhc1Byb3BlcnR5CiBfSlNPYmplY3RHZXRQcm90b3R5
cGUKIF9fWk4zSlNDOEpTT2JqZWN0MTV1bndyYXBwZWRPYmplY3RFdgogX19aTjNKU0MxMWNyZWF0
ZUVycm9yRVBOU185RXhlY1N0YXRlRVJLTlNfN1VTdHJpbmdFCi1fX1pOM0pTQzEySlNHbG9iYWxE
YXRhNmNyZWF0ZUVOU18xNVRocmVhZFN0YWNrVHlwZUUKK19fWk4zSlNDMTJKU0dsb2JhbERhdGE2
Y3JlYXRlRU5TXzhIZWFwVHlwZUUKIF9fWk4zSlNDOEpTT2JqZWN0MTdwdXREaXJlY3RGdW5jdGlv
bkVQTlNfOUV4ZWNTdGF0ZUVQTlNfMTBKU0Z1bmN0aW9uRWoKIF9fWk4zSlNDMTJKU0dsb2JhbERh
dGExM3N0YXJ0U2FtcGxpbmdFdgogX19aTjNKU0MxMUludGVycHJldGVyMTNzdGFydFNhbXBsaW5n
RXYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCShyZXZpc2lvbiAxMzE5ODIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvanNjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzQ2LDcgKzc0Niw3IEBA
IGludCBqc2NtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKICAgICAvLyBOb3RlIHRoYXQgdGhl
IG9wdGlvbnMgcGFyc2luZyBjYW4gYWZmZWN0IEpTR2xvYmFsRGF0YSBjcmVhdGlvbiwgYW5kIHRo
dXMKICAgICAvLyBjb21lcyBmaXJzdC4KICAgICBDb21tYW5kTGluZSBvcHRpb25zKGFyZ2MsIGFy
Z3YpOwotICAgIFJlZlB0cjxKU0dsb2JhbERhdGE+IGdsb2JhbERhdGEgPSBKU0dsb2JhbERhdGE6
OmNyZWF0ZShUaHJlYWRTdGFja1R5cGVMYXJnZSwgTGFyZ2VIZWFwKTsKKyAgICBSZWZQdHI8SlNH
bG9iYWxEYXRhPiBnbG9iYWxEYXRhID0gSlNHbG9iYWxEYXRhOjpjcmVhdGUoTGFyZ2VIZWFwKTsK
ICAgICBKU0xvY2tIb2xkZXIgbG9jayhnbG9iYWxEYXRhLmdldCgpKTsKICAgICBpbnQgcmVzdWx0
OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdFJlZ0V4cC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RSZWdFeHAuY3BwCShyZXZpc2lvbiAxMzE5
ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdFJlZ0V4cC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ5OCw3ICs0OTgsNyBAQCBzdGF0aWMgdm9pZCBwYXJzZUFyZ3VtZW50cyhpbnQgYXJn
YywgY2hhCiAKIGludCByZWFsTWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiB7Ci0gICAgUmVm
UHRyPEpTR2xvYmFsRGF0YT4gZ2xvYmFsRGF0YSA9IEpTR2xvYmFsRGF0YTo6Y3JlYXRlKFRocmVh
ZFN0YWNrVHlwZUxhcmdlLCBMYXJnZUhlYXApOworICAgIFJlZlB0cjxKU0dsb2JhbERhdGE+IGds
b2JhbERhdGEgPSBKU0dsb2JhbERhdGE6OmNyZWF0ZShMYXJnZUhlYXApOwogICAgIEpTTG9ja0hv
bGRlciBsb2NrKGdsb2JhbERhdGEuZ2V0KCkpOwogCiAgICAgQ29tbWFuZExpbmUgb3B0aW9uczsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0UmVmLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dFJlZi5jcHAJKHJldmlz
aW9uIDEzMTk4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0UmVmLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTQsNyArNTQsNyBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwog
SlNDb250ZXh0R3JvdXBSZWYgSlNDb250ZXh0R3JvdXBDcmVhdGUoKQogewogICAgIGluaXRpYWxp
emVUaHJlYWRpbmcoKTsKLSAgICByZXR1cm4gdG9SZWYoSlNHbG9iYWxEYXRhOjpjcmVhdGVDb250
ZXh0R3JvdXAoVGhyZWFkU3RhY2tUeXBlU21hbGwpLmxlYWtSZWYoKSk7CisgICAgcmV0dXJuIHRv
UmVmKEpTR2xvYmFsRGF0YTo6Y3JlYXRlQ29udGV4dEdyb3VwKCkubGVha1JlZigpKTsKIH0KIAog
SlNDb250ZXh0R3JvdXBSZWYgSlNDb250ZXh0R3JvdXBSZXRhaW4oSlNDb250ZXh0R3JvdXBSZWYg
Z3JvdXApCkBAIC04OSw3ICs4OSw3IEBAIEpTR2xvYmFsQ29udGV4dFJlZiBKU0dsb2JhbENvbnRl
eHRDcmVhdGUKIHsKICAgICBpbml0aWFsaXplVGhyZWFkaW5nKCk7CiAKLSAgICBSZWZQdHI8SlNH
bG9iYWxEYXRhPiBnbG9iYWxEYXRhID0gZ3JvdXAgPyBQYXNzUmVmUHRyPEpTR2xvYmFsRGF0YT4o
dG9KUyhncm91cCkpIDogSlNHbG9iYWxEYXRhOjpjcmVhdGVDb250ZXh0R3JvdXAoVGhyZWFkU3Rh
Y2tUeXBlU21hbGwpOworICAgIFJlZlB0cjxKU0dsb2JhbERhdGE+IGdsb2JhbERhdGEgPSBncm91
cCA/IFBhc3NSZWZQdHI8SlNHbG9iYWxEYXRhPih0b0pTKGdyb3VwKSkgOiBKU0dsb2JhbERhdGE6
OmNyZWF0ZUNvbnRleHRHcm91cCgpOwogCiAgICAgQVBJRW50cnlTaGltIGVudHJ5U2hpbShnbG9i
YWxEYXRhLmdldCgpLCBmYWxzZSk7CiAgICAgZ2xvYmFsRGF0YS0+bWFrZVVzYWJsZUZyb21NdWx0
aXBsZVRocmVhZHMoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZGVmCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUuZGVmCShyZXZpc2lvbiAxMzE5ODIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLmRlZgkod29ya2luZyBjb3B5KQpAQCAtMTAsNiArMTAsOCBAQCBFWFBPUlRTCiAgICAgPz8w
RHJvcEFsbExvY2tzQEpTTG9ja0BKU0NAQFFBRUBQQVZFeGVjU3RhdGVAMkBAWgogICAgID8/MERy
b3BBbGxMb2Nrc0BKU0xvY2tASlNDQEBRQUVAUEFWSlNHbG9iYWxEYXRhQDJAQFoKICAgICA/PzBE
eW5hbWljR2xvYmFsT2JqZWN0U2NvcGVASlNDQEBRQUVAQUFWSlNHbG9iYWxEYXRhQDFAUEFWSlNH
bG9iYWxPYmplY3RAMUBAWiAKKyAgICA/PzBFcnJvckhhbmRsaW5nTW9kZUBJbnRlcnByZXRlckBK
U0NAQFFBRUBQQVZFeGVjU3RhdGVAMkBAWgorICAgID8/MUVycm9ySGFuZGxpbmdNb2RlQEludGVy
cHJldGVyQEpTQ0BAUUFFQFhaCiAgICAgPz8wSW50ZXJuYWxGdW5jdGlvbkBKU0NAQElBRUBQQVZK
U0dsb2JhbE9iamVjdEAxQFBBVlN0cnVjdHVyZUAxQEBaCiAgICAgPz8wSlNHbG9iYWxPYmplY3RA
SlNDQEBJQUVAQUFWSlNHbG9iYWxEYXRhQDFAUEFWU3RydWN0dXJlQDFAUEJVR2xvYmFsT2JqZWN0
TWV0aG9kVGFibGVAMUBAWgogICAgID8/MEpTTG9ja0hvbGRlckBKU0NAQFFBRUBBQVZKU0dsb2Jh
bERhdGFAMUBAWgpAQCAtMTE4LDEzICsxMjAsMTMgQEAgRVhQT1JUUwogICAgID9jb252ZXJ0VVRG
OFRvVVRGMTZAVW5pY29kZUBXVEZAQFlBP0FXNENvbnZlcnNpb25SZXN1bHRAMTJAUEFQQkRQQkRQ
QVBBX1dQQV9XUEFfTl9OQFoKICAgICA/Y29weUJhY2tpbmdTdG9yZUBKU09iamVjdEBKU0NAQFNB
WFBBVkpTQ2VsbEAyQEFBVkNvcHlWaXNpdG9yQDJAQFoKICAgICA/Y3JlYXRlQEpTRnVuY3Rpb25A
SlNDQEBTQVBBVjEyQFBBVkV4ZWNTdGF0ZUAyQFBBVkpTR2xvYmFsT2JqZWN0QDJASEFCVlN0cmlu
Z0BXVEZAQFA2SV9KMEBaVzRJbnRyaW5zaWNAMkAzQFoKLSAgICA/Y3JlYXRlQEpTR2xvYmFsRGF0
YUBKU0NAQFNBP0FWPyRQYXNzUmVmUHRyQFZKU0dsb2JhbERhdGFASlNDQEBAV1RGQEBXNFRocmVh
ZFN0YWNrVHlwZUAyQFc0SGVhcFR5cGVAMkBAWgorICAgID9jcmVhdGVASlNHbG9iYWxEYXRhQEpT
Q0BAU0E/QVY/JFBhc3NSZWZQdHJAVkpTR2xvYmFsRGF0YUBKU0NAQEBXVEZAQFc0SGVhcFR5cGVA
MkBAWgogICAgID9jcmVhdGVAT3BhcXVlSlNTdHJpbmdAQFNBP0FWPyRQYXNzUmVmUHRyQFVPcGFx
dWVKU1N0cmluZ0BAQFdURkBAQUJWU3RyaW5nQDNAQFoKICAgICA/Y3JlYXRlQFJlZ0V4cEBKU0NA
QFNBUEFWMTJAQUFWSlNHbG9iYWxEYXRhQDJAQUJWU3RyaW5nQFdURkBAVzRSZWdFeHBGbGFnc0Ay
QEBaCiAgICAgP2NyZWF0ZUVtcHR5U3RyaW5nQFNtYWxsU3RyaW5nc0BKU0NAQEFBRVhQQVZKU0ds
b2JhbERhdGFAMkBAWgogICAgID9jcmVhdGVFcnJvckBKU0NAQFlBUEFWSlNPYmplY3RAMUBQQVZF
eGVjU3RhdGVAMUBBQlZTdHJpbmdAV1RGQEBAWgogICAgID9jcmVhdGVJbnRlcnJ1cHRlZEV4ZWN1
dGlvbkV4Y2VwdGlvbkBKU0NAQFlBUEFWSlNPYmplY3RAMUBQQVZKU0dsb2JhbERhdGFAMUBAWgot
ICAgID9jcmVhdGVMZWFrZWRASlNHbG9iYWxEYXRhQEpTQ0BAU0E/QVY/JFBhc3NSZWZQdHJAVkpT
R2xvYmFsRGF0YUBKU0NAQEBXVEZAQFc0VGhyZWFkU3RhY2tUeXBlQDJAVzRIZWFwVHlwZUAyQEBa
CisgICAgP2NyZWF0ZUxlYWtlZEBKU0dsb2JhbERhdGFASlNDQEBTQT9BVj8kUGFzc1JlZlB0ckBW
SlNHbG9iYWxEYXRhQEpTQ0BAQFdURkBAVzRIZWFwVHlwZUAyQEBaCiAgICAgP2NyZWF0ZU5vdEVu
b3VnaEFyZ3VtZW50c0Vycm9yQEpTQ0BAWUFQQVZKU09iamVjdEAxQFBBVkV4ZWNTdGF0ZUAxQEBa
CiAgICAgP2NyZWF0ZVJhbmdlRXJyb3JASlNDQEBZQVBBVkpTT2JqZWN0QDFAUEFWRXhlY1N0YXRl
QDFAQUJWU3RyaW5nQFdURkBAQFoKICAgICA/Y3JlYXRlUmVmZXJlbmNlRXJyb3JASlNDQEBZQVBB
VkpTT2JqZWN0QDFAUEFWRXhlY1N0YXRlQDFAQUJWU3RyaW5nQFdURkBAQFoKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkocmV2
aXNpb24gMTMxOTgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVy
cHJldGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcsNiArNjcsNyBAQAogI2luY2x1ZGUgPHN0
ZGlvLmg+CiAjaW5jbHVkZSA8d3RmL1N0YWNrU3RhdHMuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFk
aW5nLmg+CisjaW5jbHVkZSA8d3RmL1dURlRocmVhZERhdGEuaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdCdWlsZGVyLmg+CiAKICNpZiBFTkFCTEUoSklUKQpAQCAtNzksNiArODAsOTcgQEAg
dXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIEpTQyB7CiAKK0ludGVycHJldGVyOjpF
cnJvckhhbmRsaW5nTW9kZTo6RXJyb3JIYW5kbGluZ01vZGUoRXhlY1N0YXRlICpleGVjKQorICAg
IDogbV9pbnRlcnByZXRlcigqZXhlYy0+aW50ZXJwcmV0ZXIoKSkKK3sKKyAgICBpZiAoIW1faW50
ZXJwcmV0ZXIubV9lcnJvckhhbmRsaW5nTW9kZVJlZW50cnkpCisgICAgICAgIG1faW50ZXJwcmV0
ZXIuc3RhY2soKS5lbmFibGVFcnJvclN0YWNrUmVzZXJ2ZSgpOworICAgIG1faW50ZXJwcmV0ZXIu
bV9lcnJvckhhbmRsaW5nTW9kZVJlZW50cnkrKzsKK30KKworSW50ZXJwcmV0ZXI6OkVycm9ySGFu
ZGxpbmdNb2RlOjp+RXJyb3JIYW5kbGluZ01vZGUoKQoreworICAgIG1faW50ZXJwcmV0ZXIubV9l
cnJvckhhbmRsaW5nTW9kZVJlZW50cnktLTsKKyAgICBBU1NFUlQobV9pbnRlcnByZXRlci5tX2Vy
cm9ySGFuZGxpbmdNb2RlUmVlbnRyeSA+PSAwKTsKKyAgICBpZiAoIW1faW50ZXJwcmV0ZXIubV9l
cnJvckhhbmRsaW5nTW9kZVJlZW50cnkpCisgICAgICAgIG1faW50ZXJwcmV0ZXIuc3RhY2soKS5k
aXNhYmxlRXJyb3JTdGFja1Jlc2VydmUoKTsKK30KKworCisvLyBUaGUgSW50ZXJwcmV0ZXI6OlN0
YWNrQXZhaWxhYmlsaXR5IGNsYXNzIGlzIHVzZWQgdG8gY29tcHV0ZSBhIHN0YWNrCisvLyBhdmFp
bGFiaWxpdHkgcmVxdWlyZW1lbnQgZm9yIHRoZSBjdXJyZW50IHRocmVhZCBydW5uaW5nIHRoZSBp
bnRlcnByZXRlci4KKy8vIEV4ZWN1dGlvbiBvZiB0aGUgaW50ZXJwcmV0ZXIgaXMgZXhwZWN0ZWQg
dG8gcmVtYWluIG9uIHRoaXMgdGhyZWFkIGF0IGxlYXN0CisvLyB1bnRpbCB3ZSByZXR1cm4gZnJv
bSB0aGUgdmVyeSBmaXJzdCBpbnZvY2F0aW9uIG9mIHRoZSBpbnRlcnByZXRlciBvbiB0aGlzCisv
LyB0aHJlYWQuCisvLworLy8gT25jZSB0aGUgYXZhaWxhYmlsaXR5IHJlcXVpcmVtZW50IGlzIGNv
bXB1dGVkLCBpdCB3aWxsIGJlIGNhY2hlZCBpbiB0aGUKKy8vIGludGVycHJldGVyLiBUaGUgdmFs
dWUgd2lsbCBiZSByZXVzZWQgKG5vdCByZWNvbXB1dGVkKSBmb3Igc3Vic2VxdWVudAorLy8gcmVj
dXJzaW9uIHN0YWNrIGNoZWNrcyB1bnRpbCB3ZSByZXR1cm4gZnJvbSB0aGUgZmlyc3QgaW52b2Nh
dGlvbiBvZiB0aGUKKy8vIGludGVycHJldGVyLgorLy8KKy8vIFdoZW4gd2UgcmV0dXJuIGZyb20g
dGhlIGZpcnN0IGludm9jYXRpb24gb2YgdGhlIGludGVycHJldGVyLCB3ZSB3aWxsCisvLyByZXNl
dCB0aGUgaW50ZXJwcmV0ZXIncyBtX25hdGl2ZVN0YWNrQXZhaWxhYmlsaXR5IHRvCisvLyBVTklO
SVRJQUxJWkVEX05BVElWRV9TVEFDS19BVkFJTEFCSUxJVFkuIFRoYXQgaXMgaG93IHdlJ2xsIGtu
b3cgdGhhdCB3ZQorLy8gbmVlZCB0byByZWNvbXB1dGUgdGhlIGF2YWlsYWJpbGl0eSBhZ2FpbiB0
aGUgbmV4dCB0aW1lIHRoZSBpbnRlcnByZXRlcgorLy8gaXMgaW52b2tlZCAocG9zc2libHkgb24g
YSBkaWZmZXJlbnQgdGhyZWFkIHdpdGggYSBkaWZmZXJlbnQgbmF0aXZlIHN0YWNrKS4KKworSW50
ZXJwcmV0ZXI6OlN0YWNrQXZhaWxhYmlsaXR5OjpTdGFja0F2YWlsYWJpbGl0eShJbnRlcnByZXRl
ciYgaW50ZXJwcmV0ZXIsIGNvbnN0IFN0YWNrQm91bmRzJiBzdGFjaykKKyAgICA6IG1faW50ZXJw
cmV0ZXIoaW50ZXJwcmV0ZXIpCisgICAgLCBtX2lzRmlyc3QoZmFsc2UpCit7CisgICAgaWYgKG1f
aW50ZXJwcmV0ZXIubV9uYXRpdmVTdGFja0F2YWlsYWJpbGl0eSA9PSBVTklOSVRJQUxJWkVEX05B
VElWRV9TVEFDS19BVkFJTEFCSUxJVFkKKyAgICAgICAgfHwgKCEhbV9pbnRlcnByZXRlci5tX2Vy
cm9ySGFuZGxpbmdNb2RlUmVlbnRyeSkpIHsKKyAgICAgICAgaW50IHNpemUgPSBzdGFjay5zaXpl
KCk7CisKKyAgICAgICAgY29uc3QgaW50IFBSRUZFUlJFRF9OQVRJVkVfU1RBQ0tfQVZBSUxCSUxJ
VFkgPSAxMDI0ICogMTAyNDsKKyAgICAgICAgY29uc3QgaW50IE1JTklNVU1fTkFUSVZFX1NUQUNL
X0FWQUlMQklMSVRZID0gMzIgKiAxMDI0OworICAgICAgICBjb25zdCBpbnQgTUlOSU1VTV9JTlRF
UlBSRVRFUl9OQVRJVkVfU1RBQ0sgPSAxMjggKiAxMDI0OworCisgICAgICAgIC8vIFdlIHdhbnQg
dG8gcmVzZXJ2ZSBhdCBsZWFzdCBQUkVGRVJSRURfTkFUSVZFX1NUQUNLX0FWQUlMQklMSVRZCisg
ICAgICAgIC8vIGJ5dGVzIG9mIHN0YWNrIGZvciBjb2RlIHRoYXQgdGhlIGludGVycHJldGVyIG1h
eSBjYWxsLgorICAgICAgICAvLyBIb3dldmVyLCBpZiB0aGVyZSBpcyBub3QgZW5vdWdoIHN0YWNr
IHNwYWNlIHRvIGd1YXJhbnRlZSB0aGF0CisgICAgICAgIC8vIGFuZCBzdGlsbCBwcm92aWRlIHNv
bWUgc3RhY2sgc3BhY2UgZm9yIHRoZSBpbnRlcnByZXRlciB0byBydW4gaW4sCisgICAgICAgIC8v
IHRoZW4gd2UgZ2l2ZSB0aGUgaW50ZXJwcmV0ZXIgdGhlIE1JTklNVU1fSU5URVJQUkVURVJfTkFU
SVZFX1NUQUNLCisgICAgICAgIC8vIGJ5dGVzIG9mIG5hdGl2ZSBzdGFjayB0byB3b3JrIHdpdGgu
CisKKyAgICAgICAgaW50IHVzZWFibGVTdGFjayA9IHNpemUgLSBQUkVGRVJSRURfTkFUSVZFX1NU
QUNLX0FWQUlMQklMSVRZOworICAgICAgICBpZiAodXNlYWJsZVN0YWNrIDwgTUlOSU1VTV9JTlRF
UlBSRVRFUl9OQVRJVkVfU1RBQ0spCisgICAgICAgICAgICB1c2VhYmxlU3RhY2sgPSBNSU5JTVVN
X0lOVEVSUFJFVEVSX05BVElWRV9TVEFDSzsKKworICAgICAgICAvLyBXZSBjYW4gbm90IHVzZSBt
b3JlIHNwYWNlIHRoYW4gdGhlIHN0YWNrIHBoeXNpY2FsbHkgaGFzLgorICAgICAgICAvLyBTbyBl
bnN1cmUgdGhhdCB0aGUgdXNlYWJsZSB2YWx1ZSBpcyBzYW5lOgorICAgICAgICBpZiAodXNlYWJs
ZVN0YWNrID4gc2l6ZSkKKyAgICAgICAgICAgIHVzZWFibGVTdGFjayA9IHNpemU7CisKKyAgICAg
ICAgLy8gTm93IHdlIGNhbiBjb21wdXRlIHRoZSBhdmFpbGFiaWxpdHkgcmVxdWlyZW1lbnQgdG8g
dXNlIGluCisgICAgICAgIC8vIGludGVycHJldGVyIHN0YWNrIGNoZWNrczoKKyAgICAgICAgaW50
IGF2YWlsYWJpbGl0eSA9IHNpemUgLSB1c2VhYmxlU3RhY2s7CisKKyAgICAgICAgLy8gSWYgd2Un
cmUgaW4gZXJyb3IgaGFuZGxpbmcgbW9kZSwgdGhlbiBhbGxvdyB0aGUgbWF4aW11bSBhbW91bnQg
b2YKKyAgICAgICAgLy8gc3RhY2sgdG8gYmUgdXNlZC4gVGhpcyBhbGxvd3MgdXMgdG8gcmUtZW50
ZXIgdGhlIGludGVycHJldGVyIHRvCisgICAgICAgIC8vIGRvIGVycm9yIGhhbmRsaW5nIHdvcmsg
d2hlcmUgcHJldmlvdXNseSB3ZSB3b3VsZCBoYXZlIGRpc2FsbG93ZWQKKyAgICAgICAgLy8gaXQg
Zm9yIG5vcm1hbCB3b3JrLgorICAgICAgICBpZiAobV9pbnRlcnByZXRlci5tX2Vycm9ySGFuZGxp
bmdNb2RlUmVlbnRyeSA+IDApCisgICAgICAgICAgICBhdmFpbGFiaWxpdHkgPSBNSU5JTVVNX05B
VElWRV9TVEFDS19BVkFJTEJJTElUWTsKKworICAgICAgICBBU1NFUlQoKGF2YWlsYWJpbGl0eSA+
PSAwKSAmJiAoYXZhaWxhYmlsaXR5IDwgc2l6ZSkpOworCisgICAgICAgIG1faW50ZXJwcmV0ZXIu
bV9uYXRpdmVTdGFja0F2YWlsYWJpbGl0eSA9IGF2YWlsYWJpbGl0eTsKKyAgICAgICAgbV9pc0Zp
cnN0ID0gdHJ1ZTsKKyAgICB9Cit9CisKK0ludGVycHJldGVyOjpTdGFja0F2YWlsYWJpbGl0eTo6
flN0YWNrQXZhaWxhYmlsaXR5KCkKK3sKKyAgICAvLyBXZSdyZSBleGl0aW5nIHRoZSB2ZXJ5IGZp
cnN0IGVudHJ5IHBvaW50IGludG8gdGhlIFZNL2ludGVycHJldGVyLgorICAgIC8vIENsZWFyIHRo
ZSBhdmFpbGFiaWxpdHkgdmFsdWUgc28gdGhhdCB3ZSBjYW4gcmUtY29tcHV0ZSBpdCBhcHByb3By
aWF0ZWx5CisgICAgLy8gZm9yIHRoZSBuZXh0IHRocmVhZCB0aGF0IHdlIHJ1biBvbiB0aGF0IG1h
eSBvciBtYXkgbm90IGJlIHRoZSBzYW1lIGFzCisgICAgLy8gdGhpcyBvbmUgKGFuZCBoZW5jZSBt
YXkgaGF2ZSBhIGRpZmZlcmVudCBzdGFjayBzaXplIHRvIHdvcmsgd2l0aCk6IAorICAgIGlmICht
X2lzRmlyc3QpCisgICAgICAgIG1faW50ZXJwcmV0ZXIubV9uYXRpdmVTdGFja0F2YWlsYWJpbGl0
eSA9IFVOSU5JVElBTElaRURfTkFUSVZFX1NUQUNLX0FWQUlMQUJJTElUWTsKK30KKworCiBzdGF0
aWMgQ2FsbEZyYW1lKiBnZXRDYWxsZXJJbmZvKEpTR2xvYmFsRGF0YSosIENhbGxGcmFtZSosIGlu
dCYgbGluZU51bWJlciwgdW5zaWduZWQmIGJ5dGVjb2RlT2Zmc2V0KTsKIAogLy8gUmV0dXJucyB0
aGUgZGVwdGggb2YgdGhlIHNjb3BlIGNoYWluIHdpdGhpbiBhIGdpdmVuIGNhbGwgZnJhbWUuCkBA
IC0yNDcsNyArMzM5LDggQEAgQ2FsbEZyYW1lKiBsb2FkVmFyYXJncyhDYWxsRnJhbWUqIGNhbGxG
cgogCiBJbnRlcnByZXRlcjo6SW50ZXJwcmV0ZXIoKQogICAgIDogbV9zYW1wbGVFbnRyeURlcHRo
KDApCi0gICAgLCBtX3JlZW50cnlEZXB0aCgwKQorICAgICwgbV9lcnJvckhhbmRsaW5nTW9kZVJl
ZW50cnkoMCkKKyAgICAsIG1fbmF0aXZlU3RhY2tBdmFpbGFiaWxpdHkoVU5JTklUSUFMSVpFRF9O
QVRJVkVfU1RBQ0tfQVZBSUxBQklMSVRZKQogI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICAsIG1f
aW5pdGlhbGl6ZWQoZmFsc2UpCiAjZW5kaWYKQEAgLTc1NCw3ICs4NDcsOSBAQCBKU1ZhbHVlIElu
dGVycHJldGVyOjpleGVjdXRlKFByb2dyYW1FeGVjCiAgICAgICAgIENSQVNIKCk7CiAKICAgICBT
dGFja1N0YXRzOjpDaGVja1BvaW50IHN0YWNrQ2hlY2tQb2ludDsKLSAgICBpZiAobV9yZWVudHJ5
RGVwdGggPj0gTWF4U21hbGxUaHJlYWRSZWVudHJ5RGVwdGggJiYgbV9yZWVudHJ5RGVwdGggPj0g
Y2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkubWF4UmVlbnRyeURlcHRoKQorICAgIGNvbnN0IFN0YWNr
Qm91bmRzJiBuYXRpdmVTdGFjayA9IHd0ZlRocmVhZERhdGEoKS5zdGFjaygpOworICAgIFN0YWNr
QXZhaWxhYmlsaXR5IGF2YWlsYWJpbGl0eSgqdGhpcywgbmF0aXZlU3RhY2spOworICAgIGlmICgh
bmF0aXZlU3RhY2suaXNTYWZlVG9SZWN1cnNlKGF2YWlsYWJpbGl0eSkpCiAgICAgICAgIHJldHVy
biBjaGVja2VkUmV0dXJuKHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKGNhbGxGcmFtZSkpOwogCiAg
ICAgLy8gRmlyc3QgY2hlY2sgaWYgdGhlICJwcm9ncmFtIiBpcyBhY3R1YWxseSBqdXN0IGEgSlNP
TiBvYmplY3QuIElmIHNvLApAQCAtODkwLDE0ICs5ODUsMTEgQEAgZmFpbGVkSlNPTlA6CiAgICAg
ewogICAgICAgICBTYW1wbGluZ1Rvb2w6OkNhbGxSZWNvcmQgY2FsbFJlY29yZChtX3NhbXBsZXIu
Z2V0KCkpOwogCi0gICAgICAgIG1fcmVlbnRyeURlcHRoKys7CiAjaWYgRU5BQkxFKExMSU5UX0Nf
TE9PUCkKICAgICAgICAgcmVzdWx0ID0gTExJbnQ6OkNMb29wOjpleGVjdXRlKG5ld0NhbGxGcmFt
ZSwgbGxpbnRfcHJvZ3JhbV9wcm9sb2d1ZSk7CiAjZWxpZiBFTkFCTEUoSklUKQogICAgICAgICBy
ZXN1bHQgPSBwcm9ncmFtLT5nZW5lcmF0ZWRKSVRDb2RlKCkuZXhlY3V0ZSgmbV9zdGFjaywgbmV3
Q2FsbEZyYW1lLCBzY29wZS0+Z2xvYmFsRGF0YSgpKTsKICNlbmRpZiAvLyBFTkFCTEUoSklUKQot
Ci0gICAgICAgIG1fcmVlbnRyeURlcHRoLS07CiAgICAgfQogCiAgICAgaWYgKFByb2ZpbGVyKiBw
cm9maWxlciA9IGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLmVuYWJsZWRQcm9maWxlcigpKQpAQCAt
OTE3LDcgKzEwMDksOSBAQCBKU1ZhbHVlIEludGVycHJldGVyOjpleGVjdXRlQ2FsbChDYWxsRnJh
CiAgICAgICAgIHJldHVybiBqc051bGwoKTsKIAogICAgIFN0YWNrU3RhdHM6OkNoZWNrUG9pbnQg
c3RhY2tDaGVja1BvaW50OwotICAgIGlmIChtX3JlZW50cnlEZXB0aCA+PSBNYXhTbWFsbFRocmVh
ZFJlZW50cnlEZXB0aCAmJiBtX3JlZW50cnlEZXB0aCA+PSBjYWxsRnJhbWUtPmdsb2JhbERhdGEo
KS5tYXhSZWVudHJ5RGVwdGgpCisgICAgY29uc3QgU3RhY2tCb3VuZHMmIG5hdGl2ZVN0YWNrID0g
d3RmVGhyZWFkRGF0YSgpLnN0YWNrKCk7CisgICAgU3RhY2tBdmFpbGFiaWxpdHkgYXZhaWxhYmls
aXR5KCp0aGlzLCBuYXRpdmVTdGFjayk7CisgICAgaWYgKCFuYXRpdmVTdGFjay5pc1NhZmVUb1Jl
Y3Vyc2UoYXZhaWxhYmlsaXR5KSkKICAgICAgICAgcmV0dXJuIGNoZWNrZWRSZXR1cm4odGhyb3dT
dGFja092ZXJmbG93RXJyb3IoY2FsbEZyYW1lKSk7CiAKICAgICBSZWdpc3Rlciogb2xkRW5kID0g
bV9zdGFjay5lbmQoKTsKQEAgLTk2MiwxNCArMTA1NiwxMSBAQCBKU1ZhbHVlIEludGVycHJldGVy
OjpleGVjdXRlQ2FsbChDYWxsRnJhCiAgICAgICAgIHsKICAgICAgICAgICAgIFNhbXBsaW5nVG9v
bDo6Q2FsbFJlY29yZCBjYWxsUmVjb3JkKG1fc2FtcGxlci5nZXQoKSk7CiAKLSAgICAgICAgICAg
IG1fcmVlbnRyeURlcHRoKys7ICAKICNpZiBFTkFCTEUoTExJTlRfQ19MT09QKQogICAgICAgICAg
ICAgcmVzdWx0ID0gTExJbnQ6OkNMb29wOjpleGVjdXRlKG5ld0NhbGxGcmFtZSwgbGxpbnRfZnVu
Y3Rpb25fZm9yX2NhbGxfcHJvbG9ndWUpOwogI2VsaWYgRU5BQkxFKEpJVCkKICAgICAgICAgICAg
IHJlc3VsdCA9IGNhbGxEYXRhLmpzLmZ1bmN0aW9uRXhlY3V0YWJsZS0+Z2VuZXJhdGVkSklUQ29k
ZUZvckNhbGwoKS5leGVjdXRlKCZtX3N0YWNrLCBuZXdDYWxsRnJhbWUsIGNhbGxEYXRhU2NvcGUt
Pmdsb2JhbERhdGEoKSk7CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKLQotICAgICAgICAgICAgbV9y
ZWVudHJ5RGVwdGgtLTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChQcm9maWxlciogcHJvZmls
ZXIgPSBjYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5lbmFibGVkUHJvZmlsZXIoKSkKQEAgLTEwMTMs
NyArMTEwNCw5IEBAIEpTT2JqZWN0KiBJbnRlcnByZXRlcjo6ZXhlY3V0ZUNvbnN0cnVjdCgKICAg
ICAgICAgcmV0dXJuIGNoZWNrZWRSZXR1cm4odGhyb3dTdGFja092ZXJmbG93RXJyb3IoY2FsbEZy
YW1lKSk7CiAKICAgICBTdGFja1N0YXRzOjpDaGVja1BvaW50IHN0YWNrQ2hlY2tQb2ludDsKLSAg
ICBpZiAobV9yZWVudHJ5RGVwdGggPj0gTWF4U21hbGxUaHJlYWRSZWVudHJ5RGVwdGggJiYgbV9y
ZWVudHJ5RGVwdGggPj0gY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkubWF4UmVlbnRyeURlcHRoKQor
ICAgIGNvbnN0IFN0YWNrQm91bmRzJiBuYXRpdmVTdGFjayA9IHd0ZlRocmVhZERhdGEoKS5zdGFj
aygpOworICAgIFN0YWNrQXZhaWxhYmlsaXR5IGF2YWlsYWJpbGl0eSgqdGhpcywgbmF0aXZlU3Rh
Y2spOworICAgIGlmICghbmF0aXZlU3RhY2suaXNTYWZlVG9SZWN1cnNlKGF2YWlsYWJpbGl0eSkp
CiAgICAgICAgIHJldHVybiBjaGVja2VkUmV0dXJuKHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKGNh
bGxGcmFtZSkpOwogCiAgICAgUmVnaXN0ZXIqIG9sZEVuZCA9IG1fc3RhY2suZW5kKCk7CkBAIC0x
MDU3LDEzICsxMTUwLDExIEBAIEpTT2JqZWN0KiBJbnRlcnByZXRlcjo6ZXhlY3V0ZUNvbnN0cnVj
dCgKICAgICAgICAgewogICAgICAgICAgICAgU2FtcGxpbmdUb29sOjpDYWxsUmVjb3JkIGNhbGxS
ZWNvcmQobV9zYW1wbGVyLmdldCgpKTsKIAotICAgICAgICAgICAgbV9yZWVudHJ5RGVwdGgrKzsg
IAogI2lmIEVOQUJMRShMTElOVF9DX0xPT1ApCiAgICAgICAgICAgICByZXN1bHQgPSBMTEludDo6
Q0xvb3A6OmV4ZWN1dGUobmV3Q2FsbEZyYW1lLCBsbGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0
X3Byb2xvZ3VlKTsKICNlbGlmIEVOQUJMRShKSVQpCiAgICAgICAgICAgICByZXN1bHQgPSBjb25z
dHJ1Y3REYXRhLmpzLmZ1bmN0aW9uRXhlY3V0YWJsZS0+Z2VuZXJhdGVkSklUQ29kZUZvckNvbnN0
cnVjdCgpLmV4ZWN1dGUoJm1fc3RhY2ssIG5ld0NhbGxGcmFtZSwgY29uc3RydWN0RGF0YVNjb3Bl
LT5nbG9iYWxEYXRhKCkpOwogI2VuZGlmIC8vIEVOQUJMRShKSVQpCi0gICAgICAgICAgICBtX3Jl
ZW50cnlEZXB0aC0tOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKFByb2ZpbGVyKiBwcm9maWxl
ciA9IGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLmVuYWJsZWRQcm9maWxlcigpKQpAQCAtMTExMSw3
ICsxMjAyLDkgQEAgQ2FsbEZyYW1lQ2xvc3VyZSBJbnRlcnByZXRlcjo6cHJlcGFyZUZvcgogICAg
ICAgICByZXR1cm4gQ2FsbEZyYW1lQ2xvc3VyZSgpOwogCiAgICAgU3RhY2tTdGF0czo6Q2hlY2tQ
b2ludCBzdGFja0NoZWNrUG9pbnQ7Ci0gICAgaWYgKG1fcmVlbnRyeURlcHRoID49IE1heFNtYWxs
VGhyZWFkUmVlbnRyeURlcHRoICYmIG1fcmVlbnRyeURlcHRoID49IGNhbGxGcmFtZS0+Z2xvYmFs
RGF0YSgpLm1heFJlZW50cnlEZXB0aCkgeworICAgIGNvbnN0IFN0YWNrQm91bmRzJiBuYXRpdmVT
dGFjayA9IHd0ZlRocmVhZERhdGEoKS5zdGFjaygpOworICAgIFN0YWNrQXZhaWxhYmlsaXR5IGF2
YWlsYWJpbGl0eSgqdGhpcywgbmF0aXZlU3RhY2spOworICAgIGlmICghbmF0aXZlU3RhY2suaXNT
YWZlVG9SZWN1cnNlKGF2YWlsYWJpbGl0eSkpIHsKICAgICAgICAgdGhyb3dTdGFja092ZXJmbG93
RXJyb3IoY2FsbEZyYW1lKTsKICAgICAgICAgcmV0dXJuIENhbGxGcmFtZUNsb3N1cmUoKTsKICAg
ICB9CkBAIC0xMTY0LDEzICsxMjU3LDExIEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGUo
Q2FsbEZyYW1lQ2wKICAgICB7CiAgICAgICAgIFNhbXBsaW5nVG9vbDo6Q2FsbFJlY29yZCBjYWxs
UmVjb3JkKG1fc2FtcGxlci5nZXQoKSk7CiAgICAgICAgIAotICAgICAgICBtX3JlZW50cnlEZXB0
aCsrOyAgCiAjaWYgRU5BQkxFKExMSU5UX0NfTE9PUCkKICAgICAgICAgcmVzdWx0ID0gTExJbnQ6
OkNMb29wOjpleGVjdXRlKGNsb3N1cmUubmV3Q2FsbEZyYW1lLCBsbGludF9mdW5jdGlvbl9mb3Jf
Y2FsbF9wcm9sb2d1ZSk7CiAjZWxpZiBFTkFCTEUoSklUKQogICAgICAgICByZXN1bHQgPSBjbG9z
dXJlLmZ1bmN0aW9uRXhlY3V0YWJsZS0+Z2VuZXJhdGVkSklUQ29kZUZvckNhbGwoKS5leGVjdXRl
KCZtX3N0YWNrLCBjbG9zdXJlLm5ld0NhbGxGcmFtZSwgY2xvc3VyZS5nbG9iYWxEYXRhKTsKICNl
bmRpZiAvLyBFTkFCTEUoSklUKQotICAgICAgICBtX3JlZW50cnlEZXB0aC0tOwogICAgIH0KIAog
ICAgIGlmIChQcm9maWxlciogcHJvZmlsZXIgPSBjbG9zdXJlLm9sZENhbGxGcmFtZS0+Z2xvYmFs
RGF0YSgpLmVuYWJsZWRQcm9maWxlcigpKQpAQCAtMTE5Nyw3ICsxMjg4LDkgQEAgSlNWYWx1ZSBJ
bnRlcnByZXRlcjo6ZXhlY3V0ZShFdmFsRXhlY3V0YQogICAgIER5bmFtaWNHbG9iYWxPYmplY3RT
Y29wZSBnbG9iYWxPYmplY3RTY29wZSgqc2NvcGUtPmdsb2JhbERhdGEoKSwgc2NvcGUtPmdsb2Jh
bE9iamVjdCgpKTsKIAogICAgIFN0YWNrU3RhdHM6OkNoZWNrUG9pbnQgc3RhY2tDaGVja1BvaW50
OwotICAgIGlmIChtX3JlZW50cnlEZXB0aCA+PSBNYXhTbWFsbFRocmVhZFJlZW50cnlEZXB0aCAm
JiBtX3JlZW50cnlEZXB0aCA+PSBjYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5tYXhSZWVudHJ5RGVw
dGgpCisgICAgY29uc3QgU3RhY2tCb3VuZHMmIG5hdGl2ZVN0YWNrID0gd3RmVGhyZWFkRGF0YSgp
LnN0YWNrKCk7CisgICAgU3RhY2tBdmFpbGFiaWxpdHkgYXZhaWxhYmlsaXR5KCp0aGlzLCBuYXRp
dmVTdGFjayk7CisgICAgaWYgKCFuYXRpdmVTdGFjay5pc1NhZmVUb1JlY3Vyc2UoYXZhaWxhYmls
aXR5KSkKICAgICAgICAgcmV0dXJuIGNoZWNrZWRSZXR1cm4odGhyb3dTdGFja092ZXJmbG93RXJy
b3IoY2FsbEZyYW1lKSk7CiAKICAgICBKU09iamVjdCogY29tcGlsZUVycm9yID0gZXZhbC0+Y29t
cGlsZShjYWxsRnJhbWUsIHNjb3BlKTsKQEAgLTEyNTgsMTUgKzEzNTEsMTIgQEAgSlNWYWx1ZSBJ
bnRlcnByZXRlcjo6ZXhlY3V0ZShFdmFsRXhlY3V0YQogICAgIEpTVmFsdWUgcmVzdWx0OwogICAg
IHsKICAgICAgICAgU2FtcGxpbmdUb29sOjpDYWxsUmVjb3JkIGNhbGxSZWNvcmQobV9zYW1wbGVy
LmdldCgpKTsKLQotICAgICAgICBtX3JlZW50cnlEZXB0aCsrOwogICAgICAgICAKICNpZiBFTkFC
TEUoTExJTlRfQ19MT09QKQogICAgICAgICByZXN1bHQgPSBMTEludDo6Q0xvb3A6OmV4ZWN1dGUo
bmV3Q2FsbEZyYW1lLCBsbGludF9ldmFsX3Byb2xvZ3VlKTsKICNlbGlmIEVOQUJMRShKSVQpCiAg
ICAgICAgIHJlc3VsdCA9IGV2YWwtPmdlbmVyYXRlZEpJVENvZGUoKS5leGVjdXRlKCZtX3N0YWNr
LCBuZXdDYWxsRnJhbWUsIHNjb3BlLT5nbG9iYWxEYXRhKCkpOwogI2VuZGlmIC8vIEVOQUJMRShK
SVQpCi0gICAgICAgIG1fcmVlbnRyeURlcHRoLS07CiAgICAgfQogCiAgICAgaWYgKFByb2ZpbGVy
KiBwcm9maWxlciA9IGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLmVuYWJsZWRQcm9maWxlcigpKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVy
LmgJKHJldmlzaW9uIDEzMTk4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9JbnRlcnByZXRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzAsMjAgKzE3MCwyMSBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgfQogICAgIH07CiAKLSAgICAvLyBXZSB1c2UgYSBzbWFsbGVy
IHJlZW50cmFuY3kgbGltaXQgb24gaVBob25lIGJlY2F1c2Ugb2YgdGhlIGhpZ2ggYW1vdW50IG9m
Ci0gICAgLy8gc3RhY2sgc3BhY2UgcmVxdWlyZWQgb24gdGhlIHdlYiB0aHJlYWQuCi0jaWYgUExB
VEZPUk0oSU9TKQotICAgIGVudW0geyBNYXhMYXJnZVRocmVhZFJlZW50cnlEZXB0aCA9IDY0LCBN
YXhTbWFsbFRocmVhZFJlZW50cnlEZXB0aCA9IDE2IH07Ci0jZWxzZQotICAgIGVudW0geyBNYXhM
YXJnZVRocmVhZFJlZW50cnlEZXB0aCA9IDI1NiwgTWF4U21hbGxUaHJlYWRSZWVudHJ5RGVwdGgg
PSAxNiB9OwotI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKLQogICAgIGNsYXNzIEludGVycHJldGVy
IHsKICAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgICAgIGZyaWVuZCBjbGFz
cyBDYWNoZWRDYWxsOwogICAgICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9y
OwogICAgICAgICBmcmllbmQgY2xhc3MgSklUOworCiAgICAgcHVibGljOgorICAgICAgICBjbGFz
cyBFcnJvckhhbmRsaW5nTW9kZSB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIEpTX0VY
UE9SVF9QUklWQVRFIEVycm9ySGFuZGxpbmdNb2RlKEV4ZWNTdGF0ZSopOworICAgICAgICAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgfkVycm9ySGFuZGxpbmdNb2RlKCk7CisgICAgICAgIHByaXZhdGU6
CisgICAgICAgICAgICBJbnRlcnByZXRlciYgbV9pbnRlcnByZXRlcjsKKyAgICAgICAgfTsKKwog
ICAgICAgICBJbnRlcnByZXRlcigpOwogICAgICAgICB+SW50ZXJwcmV0ZXIoKTsKICAgICAgICAg
CkBAIC0yNDEsNiArMjQyLDE4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKU19FWFBPUlRf
UFJJVkFURSB2b2lkIGR1bXBDYWxsRnJhbWUoQ2FsbEZyYW1lKik7CiAKICAgICBwcml2YXRlOgor
ICAgICAgICBjbGFzcyBTdGFja0F2YWlsYWJpbGl0eSB7CisgICAgICAgIHB1YmxpYzoKKyAgICAg
ICAgICAgIFN0YWNrQXZhaWxhYmlsaXR5KEludGVycHJldGVyJiwgY29uc3QgU3RhY2tCb3VuZHMm
KTsKKyAgICAgICAgICAgIH5TdGFja0F2YWlsYWJpbGl0eSgpOworCisgICAgICAgICAgICBpbmxp
bmUgb3BlcmF0b3Igc2l6ZV90KCkgeyByZXR1cm4gbV9pbnRlcnByZXRlci5tX25hdGl2ZVN0YWNr
QXZhaWxhYmlsaXR5OyB9CisKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEludGVycHJl
dGVyJiBtX2ludGVycHJldGVyOworICAgICAgICAgICAgYm9vbCBtX2lzRmlyc3Q7CisgICAgICAg
IH07CisKICAgICAgICAgZW51bSBFeGVjdXRpb25GbGFnIHsgTm9ybWFsLCBJbml0aWFsaXplQW5k
UmV0dXJuIH07CiAKICAgICAgICAgQ2FsbEZyYW1lQ2xvc3VyZSBwcmVwYXJlRm9yUmVwZWF0Q2Fs
bChGdW5jdGlvbkV4ZWN1dGFibGUqLCBDYWxsRnJhbWUqLCBKU0Z1bmN0aW9uKiwgaW50IGFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzLCBKU1Njb3BlKik7CkBAIC0yNjEsOSArMjc0LDEwIEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICBpbnQgbV9zYW1wbGVFbnRyeURlcHRoOwogICAgICAgICBP
d25QdHI8U2FtcGxpbmdUb29sPiBtX3NhbXBsZXI7CiAKLSAgICAgICAgaW50IG1fcmVlbnRyeURl
cHRoOwotCiAgICAgICAgIEpTU3RhY2sgbV9zdGFjazsKKyAgICAgICAgaW50IG1fZXJyb3JIYW5k
bGluZ01vZGVSZWVudHJ5OworICAgICAgICBpbnQgbV9uYXRpdmVTdGFja0F2YWlsYWJpbGl0eTsK
KyAgICAgICAgc3RhdGljIGNvbnN0IGludCBVTklOSVRJQUxJWkVEX05BVElWRV9TVEFDS19BVkFJ
TEFCSUxJVFkgPSAtMTsKICAgICAgICAgCiAjaWYgRU5BQkxFKENPTVBVVEVEX0dPVE9fT1BDT0RF
UykgJiYgRU5BQkxFKExMSU5UKQogICAgICAgICBPcGNvZGUqIG1fb3Bjb2RlVGFibGU7IC8vIE1h
cHMgT3Bjb2RlSUQgPT4gT3Bjb2RlIGZvciBjb21waWxpbmcKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnRlcnByZXRlci9KU1N0YWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSlNTdGFjay5jcHAJKHJldmlzaW9uIDEzMTk4MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9KU1N0YWNrLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDEsNyArNDEsMTkgQEAgc3RhdGljIE11dGV4JiBzdGFja1N0YXRpc3RpY3NNdXRl
eCgpCiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChNdXRleCwgc3RhdGljTXV0ZXgsICgpKTsKICAg
ICByZXR1cm4gc3RhdGljTXV0ZXg7CiB9ICAgIAotICAgIAorCitKU1N0YWNrOjpKU1N0YWNrKHNp
emVfdCBjYXBhY2l0eSkKKyAgICA6IG1fZW5kKDApCit7CisgICAgQVNTRVJUKGNhcGFjaXR5ICYm
IGlzUGFnZUFsaWduZWQoY2FwYWNpdHkpKTsKKworICAgIG1fcmVzZXJ2YXRpb24gPSBQYWdlUmVz
ZXJ2YXRpb246OnJlc2VydmUocm91bmRVcEFsbG9jYXRpb25TaXplKGNhcGFjaXR5ICogc2l6ZW9m
KFJlZ2lzdGVyKSwgY29tbWl0U2l6ZSksIE9TQWxsb2NhdG9yOjpKU1ZNU3RhY2tQYWdlcyk7Cisg
ICAgbV9lbmQgPSBzdGF0aWNfY2FzdDxSZWdpc3Rlcio+KG1fcmVzZXJ2YXRpb24uYmFzZSgpKTsK
KyAgICBtX2NvbW1pdEVuZCA9IHN0YXRpY19jYXN0PFJlZ2lzdGVyKj4obV9yZXNlcnZhdGlvbi5i
YXNlKCkpOworCisgICAgZGlzYWJsZUVycm9yU3RhY2tSZXNlcnZlKCk7Cit9CisKIEpTU3RhY2s6
On5KU1N0YWNrKCkKIHsKICAgICB2b2lkKiBiYXNlID0gbV9yZXNlcnZhdGlvbi5iYXNlKCk7CkBA
IC01MiwxNSArNjQsMjIgQEAgSlNTdGFjazo6fkpTU3RhY2soKQogCiBib29sIEpTU3RhY2s6Omdy
b3dTbG93Q2FzZShSZWdpc3RlciogbmV3RW5kKQogeworICAgIC8vIElmIHdlIGhhdmUgYWxyZWFk
eSBjb21taXR0ZWQgZW5vdWdoIG1lbW9yeSB0byBzYXRpc2Z5IHRoaXMgcmVxdWVzdCwKKyAgICAv
LyBqdXN0IHVwZGF0ZSB0aGUgZW5kIHBvaW50ZXIgYW5kIHJldHVybi4KICAgICBpZiAobmV3RW5k
IDw9IG1fY29tbWl0RW5kKSB7CiAgICAgICAgIG1fZW5kID0gbmV3RW5kOwogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CiAKKyAgICAvLyBDb21wdXRlIHRoZSBjaHVuayBzaXplIG9mIGFkZGl0
aW9uYWwgbWVtb3J5IHRvIGNvbW1pdCwgYW5kIHNlZSBpZiB3ZQorICAgIC8vIGhhdmUgaXQgaXMg
c3RpbGwgd2l0aGluIG91ciBidWRnZXQuIElmIG5vdCwgd2UnbGwgZmFpbCB0byBncm93IGFuZAor
ICAgIC8vIHJldHVybiBmYWxzZS4KICAgICBsb25nIGRlbHRhID0gcm91bmRVcEFsbG9jYXRpb25T
aXplKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG5ld0VuZCkgLSByZWludGVycHJldF9jYXN0PGNo
YXIqPihtX2NvbW1pdEVuZCksIGNvbW1pdFNpemUpOwotICAgIGlmIChyZWludGVycHJldF9jYXN0
PGNoYXIqPihtX2NvbW1pdEVuZCkgKyBkZWx0YSA+IHN0YXRpY19jYXN0PGNoYXIqPihtX3Jlc2Vy
dmF0aW9uLmJhc2UoKSkgKyBtX3Jlc2VydmF0aW9uLnNpemUoKSkKKyAgICBpZiAocmVpbnRlcnBy
ZXRfY2FzdDxjaGFyKj4obV9jb21taXRFbmQpICsgZGVsdGEgPiByZWludGVycHJldF9jYXN0PGNo
YXIqPihtX3VzZWFibGVFbmQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICAvLyBPdGhl
cndpc2UsIHRoZSBncm93dGggaXMgc3RpbGwgd2l0aGluIG91ciBidWRnZXQuIEdvIGFoZWFkIGFu
ZCBjb21taXQKKyAgICAvLyBpdCBhbmQgcmV0dXJuIHRydWUuCiAgICAgbV9yZXNlcnZhdGlvbi5j
b21taXQobV9jb21taXRFbmQsIGRlbHRhKTsKICAgICBhZGRUb0NvbW1pdHRlZEJ5dGVDb3VudChk
ZWx0YSk7CiAgICAgbV9jb21taXRFbmQgPSByZWludGVycHJldF9jYXN0X3B0cjxSZWdpc3Rlcio+
KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG1fY29tbWl0RW5kKSArIGRlbHRhKTsKQEAgLTEwNCw0
ICsxMjMsMTkgQEAgdm9pZCBKU1N0YWNrOjphZGRUb0NvbW1pdHRlZEJ5dGVDb3VudChsbwogICAg
IGNvbW1pdHRlZEJ5dGVzQ291bnQgKz0gYnl0ZUNvdW50OwogfQogCit2b2lkIEpTU3RhY2s6OmVu
YWJsZUVycm9yU3RhY2tSZXNlcnZlKCkKK3sKKyAgICBtX3VzZWFibGVFbmQgPSByZXNlcnZhdGlv
bkVuZCgpOworfQorCit2b2lkIEpTU3RhY2s6OmRpc2FibGVFcnJvclN0YWNrUmVzZXJ2ZSgpCit7
CisgICAgY2hhciogdXNlYWJsZUVuZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHJlc2VydmF0
aW9uRW5kKCkpIC0gY29tbWl0U2l6ZTsKKyAgICBtX3VzZWFibGVFbmQgPSByZWludGVycHJldF9j
YXN0PFJlZ2lzdGVyKj4odXNlYWJsZUVuZCk7CisgICAgaWYgKG1fZW5kID4gbV91c2VhYmxlRW5k
KSB7CisgICAgICAgIEFTU0VSVChtX3RvcENhbGxGcmFtZS0+ZnJhbWVFeHRlbnQoKSA8IG1fdXNl
YWJsZUVuZCk7CisgICAgICAgIHNocmluayhtX3VzZWFibGVFbmQpOworICAgIH0KK30KKwogfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIv
SlNTdGFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9KU1N0YWNrLmgJKHJldmlzaW9uIDEzMTk4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnRlcnByZXRlci9KU1N0YWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTgyLDI3ICs4MiwyOCBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiAmbV9lbmQ7CiAgICAgICAgIH0KIAor
ICAgICAgICB2b2lkIGVuYWJsZUVycm9yU3RhY2tSZXNlcnZlKCk7CisgICAgICAgIHZvaWQgZGlz
YWJsZUVycm9yU3RhY2tSZXNlcnZlKCk7CisKICAgICBwcml2YXRlOgogICAgICAgICBmcmllbmQg
Y2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogCisgICAgICAgIFJlZ2lzdGVyKiByZXNlcnZh
dGlvbkVuZCgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIGNoYXIqIGJhc2UgPSBzdGF0
aWNfY2FzdDxjaGFyKj4obV9yZXNlcnZhdGlvbi5iYXNlKCkpOworICAgICAgICAgICAgY2hhciog
cmVzZXJ2YXRpb25FbmQgPSBiYXNlICsgbV9yZXNlcnZhdGlvbi5zaXplKCk7CisgICAgICAgICAg
ICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxSZWdpc3Rlcio+KHJlc2VydmF0aW9uRW5kKTsKKyAg
ICAgICAgfQorCiAgICAgICAgIGJvb2wgZ3Jvd1Nsb3dDYXNlKFJlZ2lzdGVyKik7CiAgICAgICAg
IHZvaWQgcmVsZWFzZUV4Y2Vzc0NhcGFjaXR5KCk7CiAgICAgICAgIHZvaWQgYWRkVG9Db21taXR0
ZWRCeXRlQ291bnQobG9uZyk7CiAgICAgICAgIFJlZ2lzdGVyKiBtX2VuZDsKICAgICAgICAgUmVn
aXN0ZXIqIG1fY29tbWl0RW5kOworICAgICAgICBSZWdpc3RlciogbV91c2VhYmxlRW5kOwogICAg
ICAgICBQYWdlUmVzZXJ2YXRpb24gbV9yZXNlcnZhdGlvbjsKICAgICB9OwogCi0gICAgaW5saW5l
IEpTU3RhY2s6OkpTU3RhY2soc2l6ZV90IGNhcGFjaXR5KQotICAgICAgICA6IG1fZW5kKDApCi0g
ICAgewotICAgICAgICBBU1NFUlQoY2FwYWNpdHkgJiYgaXNQYWdlQWxpZ25lZChjYXBhY2l0eSkp
OwotCi0gICAgICAgIG1fcmVzZXJ2YXRpb24gPSBQYWdlUmVzZXJ2YXRpb246OnJlc2VydmUocm91
bmRVcEFsbG9jYXRpb25TaXplKGNhcGFjaXR5ICogc2l6ZW9mKFJlZ2lzdGVyKSwgY29tbWl0U2l6
ZSksIE9TQWxsb2NhdG9yOjpKU1ZNU3RhY2tQYWdlcyk7Ci0gICAgICAgIG1fZW5kID0gc3RhdGlj
X2Nhc3Q8UmVnaXN0ZXIqPihtX3Jlc2VydmF0aW9uLmJhc2UoKSk7Ci0gICAgICAgIG1fY29tbWl0
RW5kID0gc3RhdGljX2Nhc3Q8UmVnaXN0ZXIqPihtX3Jlc2VydmF0aW9uLmJhc2UoKSk7Ci0gICAg
fQotCiAgICAgaW5saW5lIHZvaWQgSlNTdGFjazo6c2hyaW5rKFJlZ2lzdGVyKiBuZXdFbmQpCiAg
ICAgewogICAgICAgICBpZiAobmV3RW5kID49IG1fZW5kKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9wYXJzZXIvUGFyc2VyLmNwcAkocmV2aXNpb24gMTMxOTgyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSw3
IEBACiAjZGVmaW5lIGZhaWxXaXRoVG9rZW4odG9rKSBkbyB7IGlmICghbV9lcnJvcikgdXBkYXRl
RXJyb3JNZXNzYWdlKHRvayk7IHJldHVybiAwOyB9IHdoaWxlICgwKQogI2RlZmluZSBmYWlsV2l0
aE1lc3NhZ2UobXNnKSBkbyB7IGlmICghbV9lcnJvcikgdXBkYXRlRXJyb3JNZXNzYWdlKG1zZyk7
IHJldHVybiAwOyB9IHdoaWxlICgwKQogI2RlZmluZSBmYWlsV2l0aE5hbWVBbmRNZXNzYWdlKGJl
Zm9yZSwgbmFtZSwgYWZ0ZXIpIGRvIHsgaWYgKCFtX2Vycm9yKSB1cGRhdGVFcnJvcldpdGhOYW1l
QW5kTWVzc2FnZShiZWZvcmUsIG5hbWUsIGFmdGVyKTsgcmV0dXJuIDA7IH0gd2hpbGUgKDApCisj
ZGVmaW5lIGZhaWxXaXRoU3RhY2tPdmVyZmxvdygpIGRvIHsgbV9lcnJvciA9IHRydWU7IG1faGFz
U3RhY2tPdmVyZmxvdyA9IHRydWU7IHJldHVybiAwOyB9IHdoaWxlICgwKQogI2RlZmluZSBmYWls
SWZGYWxzZShjb25kKSBkbyB7IGlmICghKGNvbmQpKSBmYWlsKCk7IH0gd2hpbGUgKDApCiAjZGVm
aW5lIGZhaWxJZkZhbHNlV2l0aE1lc3NhZ2UoY29uZCwgbXNnKSBkbyB7IGlmICghKGNvbmQpKSBm
YWlsV2l0aE1lc3NhZ2UobXNnKTsgfSB3aGlsZSAoMCkKICNkZWZpbmUgZmFpbElmRmFsc2VXaXRo
TmFtZUFuZE1lc3NhZ2UoY29uZCwgYmVmb3JlLCBuYW1lLCBtc2cpIGRvIHsgaWYgKCEoY29uZCkp
IGZhaWxXaXRoTmFtZUFuZE1lc3NhZ2UoYmVmb3JlLCBuYW1lLCBtc2cpOyB9IHdoaWxlICgwKQpA
QCAtNTQsNyArNTUsNyBAQAogI2RlZmluZSBjb25zdW1lT3JGYWlsKHRva2VuVHlwZSkgZG8geyBp
ZiAoIWNvbnN1bWUodG9rZW5UeXBlKSkgZmFpbFdpdGhUb2tlbih0b2tlblR5cGUpOyB9IHdoaWxl
ICgwKQogI2RlZmluZSBjb25zdW1lT3JGYWlsV2l0aEZsYWdzKHRva2VuVHlwZSwgZmxhZ3MpIGRv
IHsgaWYgKCFjb25zdW1lKHRva2VuVHlwZSwgZmxhZ3MpKSBmYWlsV2l0aFRva2VuKHRva2VuVHlw
ZSk7IH0gd2hpbGUgKDApCiAjZGVmaW5lIG1hdGNoT3JGYWlsKHRva2VuVHlwZSkgZG8geyBpZiAo
IW1hdGNoKHRva2VuVHlwZSkpIGZhaWxXaXRoVG9rZW4odG9rZW5UeXBlKTsgfSB3aGlsZSAoMCkK
LSNkZWZpbmUgZmFpbElmU3RhY2tPdmVyZmxvdygpIGRvIHsgZmFpbElmRmFsc2VXaXRoTWVzc2Fn
ZShjYW5SZWN1cnNlKCksICJDb2RlIG5lc3RlZCB0b28gZGVlcGx5LiIpOyB9IHdoaWxlICgwKQor
I2RlZmluZSBmYWlsSWZTdGFja092ZXJmbG93KCkgZG8geyBpZiAoIWNhblJlY3Vyc2UoKSkgZmFp
bFdpdGhTdGFja092ZXJmbG93KCk7IH0gd2hpbGUgKDApCiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7
CiAKQEAgLTY1LDYgKzY2LDcgQEAgUGFyc2VyPExleGVyVHlwZT46OlBhcnNlcihKU0dsb2JhbERh
dGEqIAogICAgIDogbV9nbG9iYWxEYXRhKGdsb2JhbERhdGEpCiAgICAgLCBtX3NvdXJjZSgmc291
cmNlKQogICAgICwgbV9zdGFjayh3dGZUaHJlYWREYXRhKCkuc3RhY2soKSkKKyAgICAsIG1faGFz
U3RhY2tPdmVyZmxvdyhmYWxzZSkKICAgICAsIG1fZXJyb3IoZmFsc2UpCiAgICAgLCBtX2Vycm9y
TWVzc2FnZSgiUGFyc2UgZXJyb3IiKQogICAgICwgbV9hbGxvd3NJbih0cnVlKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCShyZXZpc2lvbiAxMzE5ODIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCSh3b3JraW5nIGNvcHkpCkBAIC04OTYs
NiArODk2LDcgQEAgcHJpdmF0ZToKICAgICBPd25QdHI8TGV4ZXJUeXBlPiBtX2xleGVyOwogICAg
IAogICAgIFN0YWNrQm91bmRzIG1fc3RhY2s7CisgICAgYm9vbCBtX2hhc1N0YWNrT3ZlcmZsb3c7
CiAgICAgYm9vbCBtX2Vycm9yOwogICAgIFN0cmluZyBtX2Vycm9yTWVzc2FnZTsKICAgICBKU1Rv
a2VuIG1fdG9rZW47CkBAIC05ODcsNyArOTg4LDcgQEAgUGFzc1JlZlB0cjxQYXJzZWROb2RlPiBQ
YXJzZXI8TGV4ZXJUeXBlPgogICAgICAgICAvLyB3ZSByYW4gb3V0IG9mIHN0YWNrIHdoaWxlIHBh
cnNpbmcuIElmIHdlIHNlZSBhbiBlcnJvciB3aGlsZSBwYXJzaW5nIGV2YWwgb3IgcHJvZ3JhbQog
ICAgICAgICAvLyBjb2RlIHdlIGFzc3VtZSB0aGF0IGl0IHdhcyBhIHN5bnRheCBlcnJvciBzaW5j
ZSBydW5uaW5nIG91dCBvZiBzdGFjayBpcyBtdWNoIGxlc3MKICAgICAgICAgLy8gbGlrZWx5LCBh
bmQgd2UgYXJlIGN1cnJlbnRseSB1bmFibGUgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiB0aGUgdHdv
IGNhc2VzLgotICAgICAgICBpZiAoaXNGdW5jdGlvbkJvZHlOb2RlKHN0YXRpY19jYXN0PFBhcnNl
ZE5vZGUqPigwKSkpCisgICAgICAgIGlmIChpc0Z1bmN0aW9uQm9keU5vZGUoc3RhdGljX2Nhc3Q8
UGFyc2VkTm9kZSo+KDApKSB8fCBtX2hhc1N0YWNrT3ZlcmZsb3cpCiAgICAgICAgICAgICAqZXhj
ZXB0aW9uID0gY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpOwog
ICAgICAgICBlbHNlIGlmIChpc0V2YWxOb2RlPFBhcnNlZE5vZGU+KCkpCiAgICAgICAgICAgICAq
ZXhjZXB0aW9uID0gY3JlYXRlU3ludGF4RXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgZXJyTXNn
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlv
bkhlbHBlcnMuY3BwCShyZXZpc2lvbiAxMzE5ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYzLDYgKzE2
Myw3IEBAIEpTT2JqZWN0KiB0aHJvd091dE9mTWVtb3J5RXJyb3IoRXhlY1N0YXQKIAogSlNPYmpl
Y3QqIHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBJbnRl
cnByZXRlcjo6RXJyb3JIYW5kbGluZ01vZGUgbW9kZShleGVjKTsKICAgICByZXR1cm4gdGhyb3dF
cnJvcihleGVjLCBjcmVhdGVTdGFja092ZXJmbG93RXJyb3IoZXhlYykpOwogfQogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAJKHJldmlz
aW9uIDEzMTk4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0
YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMCw3ICsxMzAsNyBAQCBzdGF0aWMgYm9vbCBlbmFi
bGVBc3NlbWJsZXIoRXhlY3V0YWJsZUFsCiB9CiAjZW5kaWYgLy8gRU5BQkxFKCFBU1NFTUJMRVIp
CiAKLUpTR2xvYmFsRGF0YTo6SlNHbG9iYWxEYXRhKEdsb2JhbERhdGFUeXBlIGdsb2JhbERhdGFU
eXBlLCBUaHJlYWRTdGFja1R5cGUgdGhyZWFkU3RhY2tUeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkK
K0pTR2xvYmFsRGF0YTo6SlNHbG9iYWxEYXRhKEdsb2JhbERhdGFUeXBlIGdsb2JhbERhdGFUeXBl
LCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICA6CiAjaWYgRU5BQkxFKEFTU0VNQkxFUikKICAgICAg
IGV4ZWN1dGFibGVBbGxvY2F0b3IoKnRoaXMpLApAQCAtMTcxLDcgKzE3MSw2IEBAIEpTR2xvYmFs
RGF0YTo6SlNHbG9iYWxEYXRhKEdsb2JhbERhdGFUeXAKICNlbmRpZgogICAgICwgZHluYW1pY0ds
b2JhbE9iamVjdCgwKQogICAgICwgY2FjaGVkVVRDT2Zmc2V0KHN0ZDo6bnVtZXJpY19saW1pdHM8
ZG91YmxlPjo6cXVpZXRfTmFOKCkpCi0gICAgLCBtYXhSZWVudHJ5RGVwdGgodGhyZWFkU3RhY2tU
eXBlID09IFRocmVhZFN0YWNrVHlwZVNtYWxsID8gTWF4U21hbGxUaHJlYWRSZWVudHJ5RGVwdGgg
OiBNYXhMYXJnZVRocmVhZFJlZW50cnlEZXB0aCkKICAgICAsIG1fZW5hYmxlZFByb2ZpbGVyKDAp
CiAgICAgLCBtX3JlZ0V4cENhY2hlKG5ldyBSZWdFeHBDYWNoZSh0aGlzKSkKICNpZiBFTkFCTEUo
UkVHRVhQX1RSQUNJTkcpCkBAIC0zMTAsMTkgKzMwOSwxOSBAQCBKU0dsb2JhbERhdGE6On5KU0ds
b2JhbERhdGEoKQogI2VuZGlmCiB9CiAKLVBhc3NSZWZQdHI8SlNHbG9iYWxEYXRhPiBKU0dsb2Jh
bERhdGE6OmNyZWF0ZUNvbnRleHRHcm91cChUaHJlYWRTdGFja1R5cGUgdHlwZSwgSGVhcFR5cGUg
aGVhcFR5cGUpCitQYXNzUmVmUHRyPEpTR2xvYmFsRGF0YT4gSlNHbG9iYWxEYXRhOjpjcmVhdGVD
b250ZXh0R3JvdXAoSGVhcFR5cGUgaGVhcFR5cGUpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBKU0dsb2JhbERhdGEoQVBJQ29udGV4dEdyb3VwLCB0eXBlLCBoZWFwVHlwZSkpOworICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgSlNHbG9iYWxEYXRhKEFQSUNvbnRleHRHcm91cCwgaGVhcFR5cGUp
KTsKIH0KIAotUGFzc1JlZlB0cjxKU0dsb2JhbERhdGE+IEpTR2xvYmFsRGF0YTo6Y3JlYXRlKFRo
cmVhZFN0YWNrVHlwZSB0eXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKK1Bhc3NSZWZQdHI8SlNHbG9i
YWxEYXRhPiBKU0dsb2JhbERhdGE6OmNyZWF0ZShIZWFwVHlwZSBoZWFwVHlwZSkKIHsKLSAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IEpTR2xvYmFsRGF0YShEZWZhdWx0LCB0eXBlLCBoZWFwVHlwZSkp
OworICAgIHJldHVybiBhZG9wdFJlZihuZXcgSlNHbG9iYWxEYXRhKERlZmF1bHQsIGhlYXBUeXBl
KSk7CiB9CiAKLVBhc3NSZWZQdHI8SlNHbG9iYWxEYXRhPiBKU0dsb2JhbERhdGE6OmNyZWF0ZUxl
YWtlZChUaHJlYWRTdGFja1R5cGUgdHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUpCitQYXNzUmVmUHRy
PEpTR2xvYmFsRGF0YT4gSlNHbG9iYWxEYXRhOjpjcmVhdGVMZWFrZWQoSGVhcFR5cGUgaGVhcFR5
cGUpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZSh0eXBlLCBoZWFwVHlwZSk7CisgICAgcmV0dXJuIGNy
ZWF0ZShoZWFwVHlwZSk7CiB9CiAKIGJvb2wgSlNHbG9iYWxEYXRhOjpzaGFyZWRJbnN0YW5jZUV4
aXN0cygpCkBAIC0zMzUsNyArMzM0LDcgQEAgSlNHbG9iYWxEYXRhJiBKU0dsb2JhbERhdGE6OnNo
YXJlZEluc3RhbgogICAgIEdsb2JhbEpTTG9jayBnbG9iYWxMb2NrOwogICAgIEpTR2xvYmFsRGF0
YSomIGluc3RhbmNlID0gc2hhcmVkSW5zdGFuY2VJbnRlcm5hbCgpOwogICAgIGlmICghaW5zdGFu
Y2UpIHsKLSAgICAgICAgaW5zdGFuY2UgPSBhZG9wdFJlZihuZXcgSlNHbG9iYWxEYXRhKEFQSVNo
YXJlZCwgVGhyZWFkU3RhY2tUeXBlU21hbGwsIFNtYWxsSGVhcCkpLmxlYWtSZWYoKTsKKyAgICAg
ICAgaW5zdGFuY2UgPSBhZG9wdFJlZihuZXcgSlNHbG9iYWxEYXRhKEFQSVNoYXJlZCwgU21hbGxI
ZWFwKSkubGVha1JlZigpOwogICAgICAgICBpbnN0YW5jZS0+bWFrZVVzYWJsZUZyb21NdWx0aXBs
ZVRocmVhZHMoKTsKICAgICB9CiAgICAgcmV0dXJuICppbnN0YW5jZTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCShyZXZpc2lvbiAxMzE5ODIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTA0LDExICsxMDQsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgZG91
YmxlIGluY3JlbWVudDsKICAgICB9OwogCi0gICAgZW51bSBUaHJlYWRTdGFja1R5cGUgewotICAg
ICAgICBUaHJlYWRTdGFja1R5cGVMYXJnZSwKLSAgICAgICAgVGhyZWFkU3RhY2tUeXBlU21hbGwK
LSAgICB9OwotCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgY2xhc3MgQ29uc2VydmF0aXZlUm9v
dHM7CiAKQEAgLTE2NCw5ICsxNTksOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGlj
IGJvb2wgc2hhcmVkSW5zdGFuY2VFeGlzdHMoKTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
c3RhdGljIEpTR2xvYmFsRGF0YSYgc2hhcmVkSW5zdGFuY2UoKTsKIAotICAgICAgICBKU19FWFBP
UlRfUFJJVkFURSBzdGF0aWMgUGFzc1JlZlB0cjxKU0dsb2JhbERhdGE+IGNyZWF0ZShUaHJlYWRT
dGFja1R5cGUsIEhlYXBUeXBlID0gU21hbGxIZWFwKTsKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgc3RhdGljIFBhc3NSZWZQdHI8SlNHbG9iYWxEYXRhPiBjcmVhdGVMZWFrZWQoVGhyZWFkU3Rh
Y2tUeXBlLCBIZWFwVHlwZSA9IFNtYWxsSGVhcCk7Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRy
PEpTR2xvYmFsRGF0YT4gY3JlYXRlQ29udGV4dEdyb3VwKFRocmVhZFN0YWNrVHlwZSwgSGVhcFR5
cGUgPSBTbWFsbEhlYXApOworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgUGFzc1Jl
ZlB0cjxKU0dsb2JhbERhdGE+IGNyZWF0ZShIZWFwVHlwZSA9IFNtYWxsSGVhcCk7CisgICAgICAg
IEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBQYXNzUmVmUHRyPEpTR2xvYmFsRGF0YT4gY3JlYXRl
TGVha2VkKEhlYXBUeXBlID0gU21hbGxIZWFwKTsKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8
SlNHbG9iYWxEYXRhPiBjcmVhdGVDb250ZXh0R3JvdXAoSGVhcFR5cGUgPSBTbWFsbEhlYXApOwog
ICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB+SlNHbG9iYWxEYXRhKCk7CiAKICAgICAgICAgdm9p
ZCBtYWtlVXNhYmxlRnJvbU11bHRpcGxlVGhyZWFkcygpIHsgaGVhcC5tYWNoaW5lVGhyZWFkcygp
Lm1ha2VVc2FibGVGcm9tTXVsdGlwbGVUaHJlYWRzKCk7IH0KQEAgLTM0Niw4ICszNDEsNiBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgU3RyaW5nIGNhY2hlZERhdGVTdHJpbmc7CiAgICAgICAg
IGRvdWJsZSBjYWNoZWREYXRlU3RyaW5nVmFsdWU7CiAKLSAgICAgICAgaW50IG1heFJlZW50cnlE
ZXB0aDsKLQogICAgICAgICBQcm9maWxlciogbV9lbmFibGVkUHJvZmlsZXI7CiAgICAgICAgIFJl
Z0V4cENhY2hlKiBtX3JlZ0V4cENhY2hlOwogICAgICAgICBCdW1wUG9pbnRlckFsbG9jYXRvciBt
X3JlZ0V4cEFsbG9jYXRvcjsKQEAgLTQ0Nyw3ICs0NDAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICBwcml2YXRlOgogICAgICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwog
ICAgICAgICAKLSAgICAgICAgSlNHbG9iYWxEYXRhKEdsb2JhbERhdGFUeXBlLCBUaHJlYWRTdGFj
a1R5cGUsIEhlYXBUeXBlKTsKKyAgICAgICAgSlNHbG9iYWxEYXRhKEdsb2JhbERhdGFUeXBlLCBI
ZWFwVHlwZSk7CiAgICAgICAgIHN0YXRpYyBKU0dsb2JhbERhdGEqJiBzaGFyZWRJbnN0YW5jZUlu
dGVybmFsKCk7CiAgICAgICAgIHZvaWQgY3JlYXRlTmF0aXZlVGh1bmsoKTsKICNpZiBFTkFCTEUo
QVNTRU1CTEVSKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUmVj
dXJzaW9uQ2hlY2tlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0cmluZ1JlY3Vyc2lvbkNoZWNrZXIuaAkocmV2aXNpb24gMTMxOTgyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUmVjdXJzaW9uQ2hlY2tlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yMiw2ICsyMiw3IEBACiAKICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgogI2lu
Y2x1ZGUgPHd0Zi9TdGFja1N0YXRzLmg+CisjaW5jbHVkZSA8d3RmL1dURlRocmVhZERhdGEuaD4K
IAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTQ4LDggKzQ5LDggQEAgcHJpdmF0ZToKIAogaW5saW5l
IEpTVmFsdWUgU3RyaW5nUmVjdXJzaW9uQ2hlY2tlcjo6cGVyZm9ybUNoZWNrKCkKIHsKLSAgICBp
bnQgc2l6ZSA9IG1fZXhlYy0+Z2xvYmFsRGF0YSgpLnN0cmluZ1JlY3Vyc2lvbkNoZWNrVmlzaXRl
ZE9iamVjdHMuc2l6ZSgpOwotICAgIGlmIChzaXplID49IE1heFNtYWxsVGhyZWFkUmVlbnRyeURl
cHRoICYmIHNpemUgPj0gbV9leGVjLT5nbG9iYWxEYXRhKCkubWF4UmVlbnRyeURlcHRoKQorICAg
IGNvbnN0IFN0YWNrQm91bmRzJiBuYXRpdmVTdGFjayA9IHd0ZlRocmVhZERhdGEoKS5zdGFjaygp
OworICAgIGlmICghbmF0aXZlU3RhY2suaXNTYWZlVG9SZWN1cnNlKCkpCiAgICAgICAgIHJldHVy
biB0aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcigpOwogICAgIGJvb2wgYWxyZWFkeVZpc2l0ZWQgPSAh
bV9leGVjLT5nbG9iYWxEYXRhKCkuc3RyaW5nUmVjdXJzaW9uQ2hlY2tWaXNpdGVkT2JqZWN0cy5h
ZGQobV90aGlzT2JqZWN0KS5pc05ld0VudHJ5OwogICAgIGlmIChhbHJlYWR5VmlzaXRlZCkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMTk4MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwIEBACisyMDEyLTEwLTIwICBNYXJrIExhbSAg
PG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBDaGFuZ2Ugc3RhY2sgcmVjdXJzaW9uIGNo
ZWNrcyB0byBiZSBiYXNlZCBvbiBzdGFjayBhdmFpbGFiaWxpdHkuCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05OTg3Mi4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW1vdmVkIHRoZSB1c2Ugb2YgVGhyZWFk
U3RhY2tUeXBlLiBFbmFibGVkIHRoZSByZXNlcnZlZCBKU1N0YWNrIHNwYWNlCisgICAgICAgIGZv
ciBlcnJvciBwcm9jZXNzaW5nIGJlZm9yZSBkb2luZyB3b3JrIGluIHJlcG9ydEV4Y2VwdGlvbigp
LgorCisgICAgICAgICogYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OnJlcG9ydEV4Y2VwdGlvbik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01XaW5k
b3dCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNH
bG9iYWxEYXRhKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHRDb250cm9sbGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclNjcmlwdENvbnRyb2xsZXI6OldvcmtlclNj
cmlwdENvbnRyb2xsZXIpOgorCiAyMDEyLTEwLTE5ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtp
dC5vcmc+CiAKICAgICAgICAgW1Y4XSBWOERPTVdyYXBwZXIgc2hvdWxkIGF2b2lkIHVzaW5nIGl0
cyBkb2N1bWVudCBwYXJhbWV0ZXIgKHNvIHdlIGNhbiByZW1vdmUgaXQgc29vbikKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcAkocmV2aXNpb24gMTMx
OTgyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkpTRE9NV2luZG93Q3VzdG9t
LmgiCiAjaW5jbHVkZSAiSlNFeGNlcHRpb25CYXNlLmgiCiAjaW5jbHVkZSAiU2NyaXB0Q2FsbFN0
YWNrLmgiCisjaW5jbHVkZSA8aW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaD4KICNpbmNsdWRlIDxy
dW50aW1lL0RhdGVJbnN0YW5jZS5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KICNpbmNs
dWRlIDxydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuaD4KQEAgLTE0OSw2ICsxNTAsNyBAQCB2b2lk
IHJlcG9ydEV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTCiAgICAgaWYgKGlzVGVybWluYXRl
ZEV4ZWN1dGlvbkV4Y2VwdGlvbihleGNlcHRpb24pKQogICAgICAgICByZXR1cm47CiAKKyAgICBJ
bnRlcnByZXRlcjo6RXJyb3JIYW5kbGluZ01vZGUgbW9kZShleGVjKTsKICAgICBTdHJpbmcgZXJy
b3JNZXNzYWdlID0gZXhjZXB0aW9uLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICBK
U09iamVjdCogZXhjZXB0aW9uT2JqZWN0ID0gZXhjZXB0aW9uLnRvT2JqZWN0KGV4ZWMpOwogICAg
IGludCBsaW5lTnVtYmVyID0gZXhjZXB0aW9uT2JqZWN0LT5nZXQoZXhlYywgSWRlbnRpZmllcihl
eGVjLCAibGluZSIpKS50b0ludDMyKGV4ZWMpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01XaW5kb3dCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3BwCShyZXZpc2lvbiAxMzE5ODIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xODEsNyArMTgxLDcgQEAgSlNHbG9iYWxEYXRhKiBKU0RPTVdpbmRvd0Jhc2U6OmNvbW1v
bkpTRwogICAgIHN0YXRpYyBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAwOwogICAgIGlmICgh
Z2xvYmFsRGF0YSkgewogICAgICAgICBTY3JpcHRDb250cm9sbGVyOjppbml0aWFsaXplVGhyZWFk
aW5nKCk7Ci0gICAgICAgIGdsb2JhbERhdGEgPSBKU0dsb2JhbERhdGE6OmNyZWF0ZUxlYWtlZChU
aHJlYWRTdGFja1R5cGVMYXJnZSwgTGFyZ2VIZWFwKS5sZWFrUmVmKCk7CisgICAgICAgIGdsb2Jh
bERhdGEgPSBKU0dsb2JhbERhdGE6OmNyZWF0ZUxlYWtlZChMYXJnZUhlYXApLmxlYWtSZWYoKTsK
ICAgICAgICAgZ2xvYmFsRGF0YS0+dGltZW91dENoZWNrZXIuc2V0VGltZW91dEludGVydmFsKDEw
MDAwKTsgLy8gMTAgc2Vjb25kcwogI2lmbmRlZiBOREVCVUcKICAgICAgICAgZ2xvYmFsRGF0YS0+
ZXhjbHVzaXZlVGhyZWFkID0gY3VycmVudFRocmVhZCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvV29ya2VyU2NyaXB0Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV29ya2VyU2NyaXB0Q29udHJvbGxlci5jcHAJKHJldmlz
aW9uIDEzMTk4MikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dvcmtlclNjcmlwdENv
bnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1NSw3IEBAIHVzaW5nIG5hbWVz
cGFjZSBKU0M7CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFdvcmtlclNjcmlwdENvbnRyb2xsZXI6
OldvcmtlclNjcmlwdENvbnRyb2xsZXIoV29ya2VyQ29udGV4dCogd29ya2VyQ29udGV4dCkKLSAg
ICA6IG1fZ2xvYmFsRGF0YShKU0dsb2JhbERhdGE6OmNyZWF0ZShUaHJlYWRTdGFja1R5cGVTbWFs
bCkpCisgICAgOiBtX2dsb2JhbERhdGEoSlNHbG9iYWxEYXRhOjpjcmVhdGUoKSkKICAgICAsIG1f
d29ya2VyQ29udGV4dCh3b3JrZXJDb250ZXh0KQogICAgICwgbV93b3JrZXJDb250ZXh0V3JhcHBl
cigqbV9nbG9iYWxEYXRhKQogICAgICwgbV9leGVjdXRpb25Gb3JiaWRkZW4oZmFsc2UpCkluZGV4
OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCShyZXZpc2lvbiAxMzE5ODIpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAxMi0xMC0yMCAgTWFyayBMYW0gIDxtYXJrLmxhbUBh
cHBsZS5jb20+CisKKyAgICAgICAgQ2hhbmdlIHN0YWNrIHJlY3Vyc2lvbiBjaGVja3MgdG8gYmUg
YmFzZWQgb24gc3RhY2sgYXZhaWxhYmlsaXR5LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTk4NzIuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVXBkYXRlZCB0ZXN0IGJhc2VsaW5lLgorCisgICAgICAgICog
ZmFzdC9qcy9nbG9iYWwtcmVjdXJzaW9uLW9uLWZ1bGwtc3RhY2stZXhwZWN0ZWQudHh0OgorICAg
ICAgICAqIGZhc3QveG1saHR0cHJlcXVlc3QveG1saHR0cHJlcXVlc3QtcmVjdXJzaXZlLXN5bmMt
ZXZlbnQtZXhwZWN0ZWQudHh0OgorCiAyMDEyLTEwLTE5ICBGbG9yaW4gTWFsaXRhICA8Zm1hbGl0
YUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgSW5jb3JyZWN0IHBhdHRlcm4gc2NhbGluZwpJbmRl
eDogTGF5b3V0VGVzdHMvZmFzdC9qcy9nbG9iYWwtcmVjdXJzaW9uLW9uLWZ1bGwtc3RhY2stZXhw
ZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvZ2xvYmFsLXJlY3Vy
c2lvbi1vbi1mdWxsLXN0YWNrLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMTMxOTgyKQorKysgTGF5
b3V0VGVzdHMvZmFzdC9qcy9nbG9iYWwtcmVjdXJzaW9uLW9uLWZ1bGwtc3RhY2stZXhwZWN0ZWQu
dHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMyBAQAotQ09OU09MRSBNRVNTQUdFOiAKK0NP
TlNPTEUgTUVTU0FHRTogUmFuZ2VFcnJvcjogTWF4aW11bSBjYWxsIHN0YWNrIHNpemUgZXhjZWVk
ZWQuCiBUaGlzIHRlc3RzIGdsb2JhbCBjb2RlIHJlY3Vyc2lvbiB3aGVuIHRoZSBKUyBzdGFjayBp
cyBmdWxsLgogUEFTUzogRW50ZXJpbmcgZ2xvYmFsIGNvZGUgd2l0aCBhIGZ1bGwgSlMgc3RhY2sg
ZGlkIG5vdCBjcmFzaCwgYW5kIGRpZCBub3QgYWxsb3cgY29udGludWVkIHJlY3Vyc2lvbi4KSW5k
ZXg6IExheW91dFRlc3RzL2Zhc3QveG1saHR0cHJlcXVlc3QveG1saHR0cHJlcXVlc3QtcmVjdXJz
aXZlLXN5bmMtZXZlbnQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zh
c3QveG1saHR0cHJlcXVlc3QveG1saHR0cHJlcXVlc3QtcmVjdXJzaXZlLXN5bmMtZXZlbnQtZXhw
ZWN0ZWQudHh0CShyZXZpc2lvbiAxMzE5ODIpCisrKyBMYXlvdXRUZXN0cy9mYXN0L3htbGh0dHBy
ZXF1ZXN0L3htbGh0dHByZXF1ZXN0LXJlY3Vyc2l2ZS1zeW5jLWV2ZW50LWV4cGVjdGVkLnR4dAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDQgQEAKLUNPTlNPTEUgTUVTU0FHRTogCi1DT05TT0xF
IE1FU1NBR0U6IAorQ09OU09MRSBNRVNTQUdFOiBSYW5nZUVycm9yOiBNYXhpbXVtIGNhbGwgc3Rh
Y2sgc2l6ZSBleGNlZWRlZC4KIFRoaXMgdGVzdHMgdGhhdCBoYXZpbmcgaW5maW5pdGUgcmVjdXJz
aW9uIGluIFhNTEh0dHBSZXF1ZXN0IGV2ZW50IGhhbmRsZXIgZG9lcyBub3QgY3Jhc2guIAogUEFT
UwogCg==
</data>
<flag name="commit-queue"
          id="183172"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>169767</attachid>
            <date>2012-10-20 02:24:17 -0700</date>
            <delta_ts>2012-10-23 03:46:37 -0700</delta_ts>
            <desc>Fix 2: a partial edit slipped thru on the first patch.  Now fixed.</desc>
            <filename>bug-99872.patch</filename>
            <type>text/plain</type>
            <size>41263</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTMxOTgyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc5IEBA
CisyMDEyLTEwLTIwICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBD
aGFuZ2Ugc3RhY2sgcmVjdXJzaW9uIGNoZWNrcyB0byBiZSBiYXNlZCBvbiBzdGFjayBhdmFpbGFi
aWxpdHkuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05
OTg3Mi4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAt
IFJlbW92ZSBtX3JlZW50cnlEZXB0aCwgVGhyZWFkU3RhY2tUeXBlIHdoaWNoIGFyZSBub3cgb2Jz
b2xldGUuCisgICAgICAgIC0gUmVwbGFjZWQgdGhlIHJlZW50cnlEZXB0aCBjaGVja3Mgd2l0aCBh
IFN0YWNrQm91bmRzIGNoZWNrLgorICAgICAgICAtIEFkZGVkIHRoZSBJbnRlcnByZXRlcjo6U3Rh
Y2tBdmFpbGFiaWxpdHkgY2xhc3MgdG8gY29tcHV0ZSBhCisgICAgICAgICAgcmVhc29uYWJsZSBz
dGFjayBhdmFpbGFiaWxpdHkgcmVxdWlyZW1lbnQgZ2l2ZW4gdGhlIG5hdGl2ZSBzdGFjaworICAg
ICAgICAgIHRoYXQgdGhlIGludGVycHJldGVyIGlzIGV4ZWN1dGluZyBvbiBhdCB0aGF0IHRpbWUu
CisgICAgICAgIC0gUmVzZXJ2ZWQgYW4gYW1vdW50IG9mIEpTU3RhY2sgc3BhY2UgZm9yIHRoZSB1
c2Ugb2YgZXJyb3IgaGFuZGxpbmcKKyAgICAgICAgICBhbmQgZW5hYmxlIGl0cyB1c2UgKHVzaW5n
IEludGVycHJldGVyOjpFcnJvckhhbmRsaW5nTW9kZSkgd2hlbgorICAgICAgICAgIHdlJ3JlIGFi
b3V0IHRvIHRocm93IG9yIHJlcG9ydCBhbiBleGNlcHRpb24uCisgICAgICAgIC0gSW50ZXJwcmV0
ZXI6OlN0YWNrQXZhaWxhYmlsaXR5IGFsc28gYWxsb3dzIG1vcmUgbmF0aXZlIHN0YWNrIHNwYWNl
CisgICAgICAgICAgdG8gYmUgdXNlZCB3aGVuIGluIEVycm9ySGFuZGxpbmdNb2RlLiBUaGlzIGlz
IG5lZWRlZCBpbiB0aGUgY2FzZQorICAgICAgICAgIG9mIG5hdGl2ZSBzdGFjayBvdmVyZmxvd3Mu
CisgICAgICAgIC0gRml4ZWQgdGhlIHBhcnNlciBzbyB0aGF0IGl0IHRocm93cyBhIFN0YWNrT3Zl
cmZsb3dFcnJvciBpbnN0ZWFkIG9mCisgICAgICAgICAgYSBTeW50YXhFcnJvciB3aGVuIGl0IGVu
Y291bnRlcnMgYSBzdGFjayBvdmVyZmxvdy4KKworICAgICAgICAqIEFQSS9KU0NvbnRleHRSZWYu
Y3BwOgorICAgICAgICAoSlNDb250ZXh0R3JvdXBDcmVhdGUpOgorICAgICAgICAoSlNHbG9iYWxD
b250ZXh0Q3JlYXRlSW5Hcm91cCk6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUub3JkZXI6Cisg
ICAgICAgICogSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLmRlZjoKKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHA6CisgICAgICAg
IChKU0M6OkludGVycHJldGVyOjpFcnJvckhhbmRsaW5nTW9kZTo6RXJyb3JIYW5kbGluZ01vZGUp
OgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OkVycm9ySGFuZGxp
bmdNb2RlOjp+RXJyb3JIYW5kbGluZ01vZGUpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6
U3RhY2tBdmFpbGFiaWxpdHk6OlN0YWNrQXZhaWxhYmlsaXR5KToKKyAgICAgICAgKEpTQzo6SW50
ZXJwcmV0ZXI6OlN0YWNrQXZhaWxhYmlsaXR5Ojp+U3RhY2tBdmFpbGFiaWxpdHkpOgorICAgICAg
ICAoSlNDOjpJbnRlcnByZXRlcjo6SW50ZXJwcmV0ZXIpOgorICAgICAgICAoSlNDOjpJbnRlcnBy
ZXRlcjo6ZXhlY3V0ZSk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpleGVjdXRlQ2FsbCk6
CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpleGVjdXRlQ29uc3RydWN0KToKKyAgICAgICAg
KEpTQzo6SW50ZXJwcmV0ZXI6OnByZXBhcmVGb3JSZXBlYXRDYWxsKToKKyAgICAgICAgKiBpbnRl
cnByZXRlci9JbnRlcnByZXRlci5oOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEludGVycHJl
dGVyKToKKyAgICAgICAgKEVycm9ySGFuZGxpbmdNb2RlKToKKyAgICAgICAgKFN0YWNrQXZhaWxh
YmlsaXR5KToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OlN0YWNrQXZhaWxhYmlsaXR5Ojpv
cGVyYXRvciBzaXplX3QpOgorICAgICAgICAqIGludGVycHJldGVyL0pTU3RhY2suY3BwOgorICAg
ICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SlNTdGFjazo6SlNTdGFjayk6CisgICAgICAgIChK
U0M6OkpTU3RhY2s6Omdyb3dTbG93Q2FzZSk6CisgICAgICAgIChKU0M6OkpTU3RhY2s6OmVuYWJs
ZUVycm9yU3RhY2tSZXNlcnZlKToKKyAgICAgICAgKEpTQzo6SlNTdGFjazo6ZGlzYWJsZUVycm9y
U3RhY2tSZXNlcnZlKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9KU1N0YWNrLmg6CisgICAgICAg
IChKU1N0YWNrKToKKyAgICAgICAgKEpTQzo6SlNTdGFjazo6cmVzZXJ2YXRpb25FbmQpOgorICAg
ICAgICAoSlNDKToKKyAgICAgICAgKiBqc2MuY3BwOgorICAgICAgICAoanNjbWFpbik6CisgICAg
ICAgICogcGFyc2VyL1BhcnNlci5jcHA6CisgICAgICAgIChKU0M6Ojo6UGFyc2VyKToKKyAgICAg
ICAgKiBwYXJzZXIvUGFyc2VyLmg6CisgICAgICAgIChQYXJzZXIpOgorICAgICAgICAoSlNDOjo6
OnBhcnNlKToKKyAgICAgICAgKiBydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuY3BwOgorICAgICAg
ICAoSlNDOjp0aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcik6CisgICAgICAgICogcnVudGltZS9KU0ds
b2JhbERhdGEuY3BwOgorICAgICAgICAoSlNDOjpKU0dsb2JhbERhdGE6OkpTR2xvYmFsRGF0YSk6
CisgICAgICAgIChKU0M6OkpTR2xvYmFsRGF0YTo6Y3JlYXRlQ29udGV4dEdyb3VwKToKKyAgICAg
ICAgKEpTQzo6SlNHbG9iYWxEYXRhOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpKU0dsb2JhbERh
dGE6OmNyZWF0ZUxlYWtlZCk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsRGF0YTo6c2hhcmVkSW5z
dGFuY2UpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxEYXRhLmg6CisgICAgICAgIChKU0Mp
OgorICAgICAgICAoSlNHbG9iYWxEYXRhKToKKyAgICAgICAgKiBydW50aW1lL1N0cmluZ1JlY3Vy
c2lvbkNoZWNrZXIuaDoKKyAgICAgICAgKEpTQzo6U3RyaW5nUmVjdXJzaW9uQ2hlY2tlcjo6cGVy
Zm9ybUNoZWNrKToKKyAgICAgICAgKiB0ZXN0UmVnRXhwLmNwcDoKKyAgICAgICAgKHJlYWxNYWlu
KToKKwogMjAxMi0xMC0xOSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAg
ICAgIERGRyBzaG91bGQgaGF2ZSBzb21lIGZhY2lsaXR5IGZvciByZWNvZ25pemluZyByZWR1bmRh
bnQgQ2hlY2tBcnJheXMgYW5kIEFycmF5aWZpZXMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS5vcmRlcgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUub3JkZXIJKHJldmlzaW9uIDEzMTk4MikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5vcmRlcgkod29ya2luZyBjb3B5KQpAQCAtMTIwLDcg
KzEyMCw3IEBAIF9KU0dsb2JhbENvbnRleHRDcmVhdGUKIF9fWk4zSlNDNkpTTG9jazRsb2NrRU5T
XzE0SlNMb2NrQmVoYXZpb3JFCiBfX1pOM0pTQ0wxN2NyZWF0ZUpTTG9ja0NvdW50RXYKIF9fWk4z
SlNDMTJKU0dsb2JhbERhdGExNHNoYXJlZEluc3RhbmNlRXYKLV9fWk4zSlNDMTJKU0dsb2JhbERh
dGFDMkVOUzBfMTRHbG9iYWxEYXRhVHlwZUVOU18xNVRocmVhZFN0YWNrVHlwZUUKK19fWk4zSlND
MTJKU0dsb2JhbERhdGFDMkVOUzBfMTRHbG9iYWxEYXRhVHlwZUVOU184SGVhcFR5cGVFCiBfX1pO
M0pTQzIxY3JlYXRlSWRlbnRpZmllclRhYmxlRXYKIF9fWk4zSlNDMTdDb21tb25JZGVudGlmaWVy
c0MxRVBOU18xMkpTR2xvYmFsRGF0YUUKIF9fWk4zSlNDMTdDb21tb25JZGVudGlmaWVyc0MyRVBO
U18xMkpTR2xvYmFsRGF0YUUKQEAgLTQ0MCw3ICs0NDAsNyBAQCBfX1pOM1dURjZzdHJ0b2RFUEtj
UFBjCiBfX1pOM1dURjEwU3RyaW5nSW1wbDIyY29udGFpbnNPbmx5V2hpdGVzcGFjZUV2CiBfX1pO
M1dURjEwU3RyaW5nSW1wbDExcmV2ZXJzZUZpbmRFUFMwX2oKIF9fWk4zV1RGMTdlcXVhbElnbm9y
aW5nQ2FzZUVQTlNfMTBTdHJpbmdJbXBsRVMxXwotX19aTjNKU0MxMkpTR2xvYmFsRGF0YTEyY3Jl
YXRlTGVha2VkRU5TXzE1VGhyZWFkU3RhY2tUeXBlRQorX19aTjNKU0MxMkpTR2xvYmFsRGF0YTEy
Y3JlYXRlTGVha2VkRU5TXzhIZWFwVHlwZUUKIF9fWk4zSlNDMjRKU09iamVjdFdpdGhHbG9iYWxP
YmplY3RDMkVSTlNfMTJKU0dsb2JhbERhdGFFUE5TXzE0SlNHbG9iYWxPYmplY3RFUE5TXzlTdHJ1
Y3R1cmVFCiBfX1pOM0pTQzhldmFsdWF0ZUVQTlNfOUV4ZWNTdGF0ZUVQTlNfMTRTY29wZUNoYWlu
Tm9kZUVSS05TXzEwU291cmNlQ29kZUVOU183SlNWYWx1ZUUKIF9fWk4zSlNDMTdQcm9ncmFtRXhl
Y3V0YWJsZUMxRVBOU185RXhlY1N0YXRlRVJLTlNfMTBTb3VyY2VDb2RlRQpAQCAtMTcwNyw3ICsx
NzA3LDcgQEAgX19aTjNKU0M4SlNQYXJzZXIyMXBhcnNlRG9XaGlsZVN0YXRlbWVudAogX19aTjNK
U0NMMTZtYXRoUHJvdG9GdW5jTWluRVBOU185RXhlY1N0YXRlRQogX19aTjNKU0NMMjFhcnJheVBy
b3RvRnVuY1JldmVyc2VFUE5TXzlFeGVjU3RhdGVFCiBfX1pOM0pTQzE3UHJvZ3JhbUV4ZWN1dGFi
bGUxM3Zpc2l0Q2hpbGRyZW5FUk5TXzlNYXJrU3RhY2tFCi1fX1pOM0pTQzEySlNHbG9iYWxEYXRh
MThjcmVhdGVDb250ZXh0R3JvdXBFTlNfMTVUaHJlYWRTdGFja1R5cGVFCitfX1pOM0pTQzEySlNH
bG9iYWxEYXRhMThjcmVhdGVDb250ZXh0R3JvdXBFTlNfOEhlYXBUeXBlRQogX19aTjNKU0MxMkpT
R2xvYmFsRGF0YTIyY2xlYXJCdWlsdGluU3RydWN0dXJlc0V2CiBfX1pOM0pTQzRIZWFwN2Rlc3Ry
b3lFdgogX19aTjNKU0M5SklUVGh1bmtzMjJjbGVhckhvc3RGdW5jdGlvblN0dWJzRXYKQEAgLTE4
NDIsNyArMTg0Miw3IEBAIF9KU09iamVjdEhhc1Byb3BlcnR5CiBfSlNPYmplY3RHZXRQcm90b3R5
cGUKIF9fWk4zSlNDOEpTT2JqZWN0MTV1bndyYXBwZWRPYmplY3RFdgogX19aTjNKU0MxMWNyZWF0
ZUVycm9yRVBOU185RXhlY1N0YXRlRVJLTlNfN1VTdHJpbmdFCi1fX1pOM0pTQzEySlNHbG9iYWxE
YXRhNmNyZWF0ZUVOU18xNVRocmVhZFN0YWNrVHlwZUUKK19fWk4zSlNDMTJKU0dsb2JhbERhdGE2
Y3JlYXRlRU5TXzhIZWFwVHlwZUUKIF9fWk4zSlNDOEpTT2JqZWN0MTdwdXREaXJlY3RGdW5jdGlv
bkVQTlNfOUV4ZWNTdGF0ZUVQTlNfMTBKU0Z1bmN0aW9uRWoKIF9fWk4zSlNDMTJKU0dsb2JhbERh
dGExM3N0YXJ0U2FtcGxpbmdFdgogX19aTjNKU0MxMUludGVycHJldGVyMTNzdGFydFNhbXBsaW5n
RXYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCShyZXZpc2lvbiAxMzE5ODIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvanNjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzQ2LDcgKzc0Niw3IEBA
IGludCBqc2NtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKICAgICAvLyBOb3RlIHRoYXQgdGhl
IG9wdGlvbnMgcGFyc2luZyBjYW4gYWZmZWN0IEpTR2xvYmFsRGF0YSBjcmVhdGlvbiwgYW5kIHRo
dXMKICAgICAvLyBjb21lcyBmaXJzdC4KICAgICBDb21tYW5kTGluZSBvcHRpb25zKGFyZ2MsIGFy
Z3YpOwotICAgIFJlZlB0cjxKU0dsb2JhbERhdGE+IGdsb2JhbERhdGEgPSBKU0dsb2JhbERhdGE6
OmNyZWF0ZShUaHJlYWRTdGFja1R5cGVMYXJnZSwgTGFyZ2VIZWFwKTsKKyAgICBSZWZQdHI8SlNH
bG9iYWxEYXRhPiBnbG9iYWxEYXRhID0gSlNHbG9iYWxEYXRhOjpjcmVhdGUoTGFyZ2VIZWFwKTsK
ICAgICBKU0xvY2tIb2xkZXIgbG9jayhnbG9iYWxEYXRhLmdldCgpKTsKICAgICBpbnQgcmVzdWx0
OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdFJlZ0V4cC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RSZWdFeHAuY3BwCShyZXZpc2lvbiAxMzE5
ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdFJlZ0V4cC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ5OCw3ICs0OTgsNyBAQCBzdGF0aWMgdm9pZCBwYXJzZUFyZ3VtZW50cyhpbnQgYXJn
YywgY2hhCiAKIGludCByZWFsTWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiB7Ci0gICAgUmVm
UHRyPEpTR2xvYmFsRGF0YT4gZ2xvYmFsRGF0YSA9IEpTR2xvYmFsRGF0YTo6Y3JlYXRlKFRocmVh
ZFN0YWNrVHlwZUxhcmdlLCBMYXJnZUhlYXApOworICAgIFJlZlB0cjxKU0dsb2JhbERhdGE+IGds
b2JhbERhdGEgPSBKU0dsb2JhbERhdGE6OmNyZWF0ZShMYXJnZUhlYXApOwogICAgIEpTTG9ja0hv
bGRlciBsb2NrKGdsb2JhbERhdGEuZ2V0KCkpOwogCiAgICAgQ29tbWFuZExpbmUgb3B0aW9uczsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0UmVmLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dFJlZi5jcHAJKHJldmlz
aW9uIDEzMTk4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0UmVmLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTQsNyArNTQsNyBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwog
SlNDb250ZXh0R3JvdXBSZWYgSlNDb250ZXh0R3JvdXBDcmVhdGUoKQogewogICAgIGluaXRpYWxp
emVUaHJlYWRpbmcoKTsKLSAgICByZXR1cm4gdG9SZWYoSlNHbG9iYWxEYXRhOjpjcmVhdGVDb250
ZXh0R3JvdXAoVGhyZWFkU3RhY2tUeXBlU21hbGwpLmxlYWtSZWYoKSk7CisgICAgcmV0dXJuIHRv
UmVmKEpTR2xvYmFsRGF0YTo6Y3JlYXRlQ29udGV4dEdyb3VwKCkubGVha1JlZigpKTsKIH0KIAog
SlNDb250ZXh0R3JvdXBSZWYgSlNDb250ZXh0R3JvdXBSZXRhaW4oSlNDb250ZXh0R3JvdXBSZWYg
Z3JvdXApCkBAIC04OSw3ICs4OSw3IEBAIEpTR2xvYmFsQ29udGV4dFJlZiBKU0dsb2JhbENvbnRl
eHRDcmVhdGUKIHsKICAgICBpbml0aWFsaXplVGhyZWFkaW5nKCk7CiAKLSAgICBSZWZQdHI8SlNH
bG9iYWxEYXRhPiBnbG9iYWxEYXRhID0gZ3JvdXAgPyBQYXNzUmVmUHRyPEpTR2xvYmFsRGF0YT4o
dG9KUyhncm91cCkpIDogSlNHbG9iYWxEYXRhOjpjcmVhdGVDb250ZXh0R3JvdXAoVGhyZWFkU3Rh
Y2tUeXBlU21hbGwpOworICAgIFJlZlB0cjxKU0dsb2JhbERhdGE+IGdsb2JhbERhdGEgPSBncm91
cCA/IFBhc3NSZWZQdHI8SlNHbG9iYWxEYXRhPih0b0pTKGdyb3VwKSkgOiBKU0dsb2JhbERhdGE6
OmNyZWF0ZUNvbnRleHRHcm91cCgpOwogCiAgICAgQVBJRW50cnlTaGltIGVudHJ5U2hpbShnbG9i
YWxEYXRhLmdldCgpLCBmYWxzZSk7CiAgICAgZ2xvYmFsRGF0YS0+bWFrZVVzYWJsZUZyb21NdWx0
aXBsZVRocmVhZHMoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZGVmCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUuZGVmCShyZXZpc2lvbiAxMzE5ODIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLmRlZgkod29ya2luZyBjb3B5KQpAQCAtMTAsNiArMTAsOCBAQCBFWFBPUlRTCiAgICAgPz8w
RHJvcEFsbExvY2tzQEpTTG9ja0BKU0NAQFFBRUBQQVZFeGVjU3RhdGVAMkBAWgogICAgID8/MERy
b3BBbGxMb2Nrc0BKU0xvY2tASlNDQEBRQUVAUEFWSlNHbG9iYWxEYXRhQDJAQFoKICAgICA/PzBE
eW5hbWljR2xvYmFsT2JqZWN0U2NvcGVASlNDQEBRQUVAQUFWSlNHbG9iYWxEYXRhQDFAUEFWSlNH
bG9iYWxPYmplY3RAMUBAWiAKKyAgICA/PzBFcnJvckhhbmRsaW5nTW9kZUBJbnRlcnByZXRlckBK
U0NAQFFBRUBQQVZFeGVjU3RhdGVAMkBAWgorICAgID8/MUVycm9ySGFuZGxpbmdNb2RlQEludGVy
cHJldGVyQEpTQ0BAUUFFQFhaCiAgICAgPz8wSW50ZXJuYWxGdW5jdGlvbkBKU0NAQElBRUBQQVZK
U0dsb2JhbE9iamVjdEAxQFBBVlN0cnVjdHVyZUAxQEBaCiAgICAgPz8wSlNHbG9iYWxPYmplY3RA
SlNDQEBJQUVAQUFWSlNHbG9iYWxEYXRhQDFAUEFWU3RydWN0dXJlQDFAUEJVR2xvYmFsT2JqZWN0
TWV0aG9kVGFibGVAMUBAWgogICAgID8/MEpTTG9ja0hvbGRlckBKU0NAQFFBRUBBQVZKU0dsb2Jh
bERhdGFAMUBAWgpAQCAtMTE4LDEzICsxMjAsMTMgQEAgRVhQT1JUUwogICAgID9jb252ZXJ0VVRG
OFRvVVRGMTZAVW5pY29kZUBXVEZAQFlBP0FXNENvbnZlcnNpb25SZXN1bHRAMTJAUEFQQkRQQkRQ
QVBBX1dQQV9XUEFfTl9OQFoKICAgICA/Y29weUJhY2tpbmdTdG9yZUBKU09iamVjdEBKU0NAQFNB
WFBBVkpTQ2VsbEAyQEFBVkNvcHlWaXNpdG9yQDJAQFoKICAgICA/Y3JlYXRlQEpTRnVuY3Rpb25A
SlNDQEBTQVBBVjEyQFBBVkV4ZWNTdGF0ZUAyQFBBVkpTR2xvYmFsT2JqZWN0QDJASEFCVlN0cmlu
Z0BXVEZAQFA2SV9KMEBaVzRJbnRyaW5zaWNAMkAzQFoKLSAgICA/Y3JlYXRlQEpTR2xvYmFsRGF0
YUBKU0NAQFNBP0FWPyRQYXNzUmVmUHRyQFZKU0dsb2JhbERhdGFASlNDQEBAV1RGQEBXNFRocmVh
ZFN0YWNrVHlwZUAyQFc0SGVhcFR5cGVAMkBAWgorICAgID9jcmVhdGVASlNHbG9iYWxEYXRhQEpT
Q0BAU0E/QVY/JFBhc3NSZWZQdHJAVkpTR2xvYmFsRGF0YUBKU0NAQEBXVEZAQFc0SGVhcFR5cGVA
MkBAWgogICAgID9jcmVhdGVAT3BhcXVlSlNTdHJpbmdAQFNBP0FWPyRQYXNzUmVmUHRyQFVPcGFx
dWVKU1N0cmluZ0BAQFdURkBAQUJWU3RyaW5nQDNAQFoKICAgICA/Y3JlYXRlQFJlZ0V4cEBKU0NA
QFNBUEFWMTJAQUFWSlNHbG9iYWxEYXRhQDJAQUJWU3RyaW5nQFdURkBAVzRSZWdFeHBGbGFnc0Ay
QEBaCiAgICAgP2NyZWF0ZUVtcHR5U3RyaW5nQFNtYWxsU3RyaW5nc0BKU0NAQEFBRVhQQVZKU0ds
b2JhbERhdGFAMkBAWgogICAgID9jcmVhdGVFcnJvckBKU0NAQFlBUEFWSlNPYmplY3RAMUBQQVZF
eGVjU3RhdGVAMUBBQlZTdHJpbmdAV1RGQEBAWgogICAgID9jcmVhdGVJbnRlcnJ1cHRlZEV4ZWN1
dGlvbkV4Y2VwdGlvbkBKU0NAQFlBUEFWSlNPYmplY3RAMUBQQVZKU0dsb2JhbERhdGFAMUBAWgot
ICAgID9jcmVhdGVMZWFrZWRASlNHbG9iYWxEYXRhQEpTQ0BAU0E/QVY/JFBhc3NSZWZQdHJAVkpT
R2xvYmFsRGF0YUBKU0NAQEBXVEZAQFc0VGhyZWFkU3RhY2tUeXBlQDJAVzRIZWFwVHlwZUAyQEBa
CisgICAgP2NyZWF0ZUxlYWtlZEBKU0dsb2JhbERhdGFASlNDQEBTQT9BVj8kUGFzc1JlZlB0ckBW
SlNHbG9iYWxEYXRhQEpTQ0BAQFdURkBAVzRIZWFwVHlwZUAyQEBaCiAgICAgP2NyZWF0ZU5vdEVu
b3VnaEFyZ3VtZW50c0Vycm9yQEpTQ0BAWUFQQVZKU09iamVjdEAxQFBBVkV4ZWNTdGF0ZUAxQEBa
CiAgICAgP2NyZWF0ZVJhbmdlRXJyb3JASlNDQEBZQVBBVkpTT2JqZWN0QDFAUEFWRXhlY1N0YXRl
QDFAQUJWU3RyaW5nQFdURkBAQFoKICAgICA/Y3JlYXRlUmVmZXJlbmNlRXJyb3JASlNDQEBZQVBB
VkpTT2JqZWN0QDFAUEFWRXhlY1N0YXRlQDFAQUJWU3RyaW5nQFdURkBAQFoKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkocmV2
aXNpb24gMTMxOTgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVy
cHJldGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcsNiArNjcsNyBAQAogI2luY2x1ZGUgPHN0
ZGlvLmg+CiAjaW5jbHVkZSA8d3RmL1N0YWNrU3RhdHMuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFk
aW5nLmg+CisjaW5jbHVkZSA8d3RmL1dURlRocmVhZERhdGEuaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdCdWlsZGVyLmg+CiAKICNpZiBFTkFCTEUoSklUKQpAQCAtNzksNiArODAsOTcgQEAg
dXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIEpTQyB7CiAKK0ludGVycHJldGVyOjpF
cnJvckhhbmRsaW5nTW9kZTo6RXJyb3JIYW5kbGluZ01vZGUoRXhlY1N0YXRlICpleGVjKQorICAg
IDogbV9pbnRlcnByZXRlcigqZXhlYy0+aW50ZXJwcmV0ZXIoKSkKK3sKKyAgICBpZiAoIW1faW50
ZXJwcmV0ZXIubV9lcnJvckhhbmRsaW5nTW9kZVJlZW50cnkpCisgICAgICAgIG1faW50ZXJwcmV0
ZXIuc3RhY2soKS5lbmFibGVFcnJvclN0YWNrUmVzZXJ2ZSgpOworICAgIG1faW50ZXJwcmV0ZXIu
bV9lcnJvckhhbmRsaW5nTW9kZVJlZW50cnkrKzsKK30KKworSW50ZXJwcmV0ZXI6OkVycm9ySGFu
ZGxpbmdNb2RlOjp+RXJyb3JIYW5kbGluZ01vZGUoKQoreworICAgIG1faW50ZXJwcmV0ZXIubV9l
cnJvckhhbmRsaW5nTW9kZVJlZW50cnktLTsKKyAgICBBU1NFUlQobV9pbnRlcnByZXRlci5tX2Vy
cm9ySGFuZGxpbmdNb2RlUmVlbnRyeSA+PSAwKTsKKyAgICBpZiAoIW1faW50ZXJwcmV0ZXIubV9l
cnJvckhhbmRsaW5nTW9kZVJlZW50cnkpCisgICAgICAgIG1faW50ZXJwcmV0ZXIuc3RhY2soKS5k
aXNhYmxlRXJyb3JTdGFja1Jlc2VydmUoKTsKK30KKworCisvLyBUaGUgSW50ZXJwcmV0ZXI6OlN0
YWNrQXZhaWxhYmlsaXR5IGNsYXNzIGlzIHVzZWQgdG8gY29tcHV0ZSBhIHN0YWNrCisvLyBhdmFp
bGFiaWxpdHkgcmVxdWlyZW1lbnQgZm9yIHRoZSBjdXJyZW50IHRocmVhZCBydW5uaW5nIHRoZSBp
bnRlcnByZXRlci4KKy8vIEV4ZWN1dGlvbiBvZiB0aGUgaW50ZXJwcmV0ZXIgaXMgZXhwZWN0ZWQg
dG8gcmVtYWluIG9uIHRoaXMgdGhyZWFkIGF0IGxlYXN0CisvLyB1bnRpbCB3ZSByZXR1cm4gZnJv
bSB0aGUgdmVyeSBmaXJzdCBpbnZvY2F0aW9uIG9mIHRoZSBpbnRlcnByZXRlciBvbiB0aGlzCisv
LyB0aHJlYWQuCisvLworLy8gT25jZSB0aGUgYXZhaWxhYmlsaXR5IHJlcXVpcmVtZW50IGlzIGNv
bXB1dGVkLCBpdCB3aWxsIGJlIGNhY2hlZCBpbiB0aGUKKy8vIGludGVycHJldGVyLiBUaGUgdmFs
dWUgd2lsbCBiZSByZXVzZWQgKG5vdCByZWNvbXB1dGVkKSBmb3Igc3Vic2VxdWVudAorLy8gcmVj
dXJzaW9uIHN0YWNrIGNoZWNrcyB1bnRpbCB3ZSByZXR1cm4gZnJvbSB0aGUgZmlyc3QgaW52b2Nh
dGlvbiBvZiB0aGUKKy8vIGludGVycHJldGVyLgorLy8KKy8vIFdoZW4gd2UgcmV0dXJuIGZyb20g
dGhlIGZpcnN0IGludm9jYXRpb24gb2YgdGhlIGludGVycHJldGVyLCB3ZSB3aWxsCisvLyByZXNl
dCB0aGUgaW50ZXJwcmV0ZXIncyBtX25hdGl2ZVN0YWNrQXZhaWxhYmlsaXR5IHRvCisvLyBVTklO
SVRJQUxJWkVEX05BVElWRV9TVEFDS19BVkFJTEFCSUxJVFkuIFRoYXQgaXMgaG93IHdlJ2xsIGtu
b3cgdGhhdCB3ZQorLy8gbmVlZCB0byByZWNvbXB1dGUgdGhlIGF2YWlsYWJpbGl0eSBhZ2FpbiB0
aGUgbmV4dCB0aW1lIHRoZSBpbnRlcnByZXRlcgorLy8gaXMgaW52b2tlZCAocG9zc2libHkgb24g
YSBkaWZmZXJlbnQgdGhyZWFkIHdpdGggYSBkaWZmZXJlbnQgbmF0aXZlIHN0YWNrKS4KKworSW50
ZXJwcmV0ZXI6OlN0YWNrQXZhaWxhYmlsaXR5OjpTdGFja0F2YWlsYWJpbGl0eShJbnRlcnByZXRl
ciYgaW50ZXJwcmV0ZXIsIGNvbnN0IFN0YWNrQm91bmRzJiBzdGFjaykKKyAgICA6IG1faW50ZXJw
cmV0ZXIoaW50ZXJwcmV0ZXIpCisgICAgLCBtX2lzRmlyc3QoZmFsc2UpCit7CisgICAgaWYgKG1f
aW50ZXJwcmV0ZXIubV9uYXRpdmVTdGFja0F2YWlsYWJpbGl0eSA9PSBVTklOSVRJQUxJWkVEX05B
VElWRV9TVEFDS19BVkFJTEFCSUxJVFkKKyAgICAgICAgfHwgKCEhbV9pbnRlcnByZXRlci5tX2Vy
cm9ySGFuZGxpbmdNb2RlUmVlbnRyeSkpIHsKKyAgICAgICAgaW50IHNpemUgPSBzdGFjay5zaXpl
KCk7CisKKyAgICAgICAgY29uc3QgaW50IFBSRUZFUlJFRF9OQVRJVkVfU1RBQ0tfQVZBSUxCSUxJ
VFkgPSAxMDI0ICogMTAyNDsKKyAgICAgICAgY29uc3QgaW50IE1JTklNVU1fTkFUSVZFX1NUQUNL
X0FWQUlMQklMSVRZID0gMzIgKiAxMDI0OworICAgICAgICBjb25zdCBpbnQgTUlOSU1VTV9JTlRF
UlBSRVRFUl9OQVRJVkVfU1RBQ0sgPSAxMjggKiAxMDI0OworCisgICAgICAgIC8vIFdlIHdhbnQg
dG8gcmVzZXJ2ZSBhdCBsZWFzdCBQUkVGRVJSRURfTkFUSVZFX1NUQUNLX0FWQUlMQklMSVRZCisg
ICAgICAgIC8vIGJ5dGVzIG9mIHN0YWNrIGZvciBjb2RlIHRoYXQgdGhlIGludGVycHJldGVyIG1h
eSBjYWxsLgorICAgICAgICAvLyBIb3dldmVyLCBpZiB0aGVyZSBpcyBub3QgZW5vdWdoIHN0YWNr
IHNwYWNlIHRvIGd1YXJhbnRlZSB0aGF0CisgICAgICAgIC8vIGFuZCBzdGlsbCBwcm92aWRlIHNv
bWUgc3RhY2sgc3BhY2UgZm9yIHRoZSBpbnRlcnByZXRlciB0byBydW4gaW4sCisgICAgICAgIC8v
IHRoZW4gd2UgZ2l2ZSB0aGUgaW50ZXJwcmV0ZXIgdGhlIE1JTklNVU1fSU5URVJQUkVURVJfTkFU
SVZFX1NUQUNLCisgICAgICAgIC8vIGJ5dGVzIG9mIG5hdGl2ZSBzdGFjayB0byB3b3JrIHdpdGgu
CisKKyAgICAgICAgaW50IHVzZWFibGVTdGFjayA9IHNpemUgLSBQUkVGRVJSRURfTkFUSVZFX1NU
QUNLX0FWQUlMQklMSVRZOworICAgICAgICBpZiAodXNlYWJsZVN0YWNrIDwgTUlOSU1VTV9JTlRF
UlBSRVRFUl9OQVRJVkVfU1RBQ0spCisgICAgICAgICAgICB1c2VhYmxlU3RhY2sgPSBNSU5JTVVN
X0lOVEVSUFJFVEVSX05BVElWRV9TVEFDSzsKKworICAgICAgICAvLyBXZSBjYW4gbm90IHVzZSBt
b3JlIHNwYWNlIHRoYW4gdGhlIHN0YWNrIHBoeXNpY2FsbHkgaGFzLgorICAgICAgICAvLyBTbyBl
bnN1cmUgdGhhdCB0aGUgdXNlYWJsZSB2YWx1ZSBpcyBzYW5lOgorICAgICAgICBpZiAodXNlYWJs
ZVN0YWNrID4gc2l6ZSkKKyAgICAgICAgICAgIHVzZWFibGVTdGFjayA9IHNpemU7CisKKyAgICAg
ICAgLy8gTm93IHdlIGNhbiBjb21wdXRlIHRoZSBhdmFpbGFiaWxpdHkgcmVxdWlyZW1lbnQgdG8g
dXNlIGluCisgICAgICAgIC8vIGludGVycHJldGVyIHN0YWNrIGNoZWNrczoKKyAgICAgICAgaW50
IGF2YWlsYWJpbGl0eSA9IHNpemUgLSB1c2VhYmxlU3RhY2s7CisKKyAgICAgICAgLy8gSWYgd2Un
cmUgaW4gZXJyb3IgaGFuZGxpbmcgbW9kZSwgdGhlbiBhbGxvdyB0aGUgbWF4aW11bSBhbW91bnQg
b2YKKyAgICAgICAgLy8gc3RhY2sgdG8gYmUgdXNlZC4gVGhpcyBhbGxvd3MgdXMgdG8gcmUtZW50
ZXIgdGhlIGludGVycHJldGVyIHRvCisgICAgICAgIC8vIGRvIGVycm9yIGhhbmRsaW5nIHdvcmsg
d2hlcmUgcHJldmlvdXNseSB3ZSB3b3VsZCBoYXZlIGRpc2FsbG93ZWQKKyAgICAgICAgLy8gaXQg
Zm9yIG5vcm1hbCB3b3JrLgorICAgICAgICBpZiAobV9pbnRlcnByZXRlci5tX2Vycm9ySGFuZGxp
bmdNb2RlUmVlbnRyeSA+IDApCisgICAgICAgICAgICBhdmFpbGFiaWxpdHkgPSBNSU5JTVVNX05B
VElWRV9TVEFDS19BVkFJTEJJTElUWTsKKworICAgICAgICBBU1NFUlQoKGF2YWlsYWJpbGl0eSA+
PSAwKSAmJiAoYXZhaWxhYmlsaXR5IDwgc2l6ZSkpOworCisgICAgICAgIG1faW50ZXJwcmV0ZXIu
bV9uYXRpdmVTdGFja0F2YWlsYWJpbGl0eSA9IGF2YWlsYWJpbGl0eTsKKyAgICAgICAgbV9pc0Zp
cnN0ID0gdHJ1ZTsKKyAgICB9Cit9CisKK0ludGVycHJldGVyOjpTdGFja0F2YWlsYWJpbGl0eTo6
flN0YWNrQXZhaWxhYmlsaXR5KCkKK3sKKyAgICAvLyBXZSdyZSBleGl0aW5nIHRoZSB2ZXJ5IGZp
cnN0IGVudHJ5IHBvaW50IGludG8gdGhlIFZNL2ludGVycHJldGVyLgorICAgIC8vIENsZWFyIHRo
ZSBhdmFpbGFiaWxpdHkgdmFsdWUgc28gdGhhdCB3ZSBjYW4gcmUtY29tcHV0ZSBpdCBhcHByb3By
aWF0ZWx5CisgICAgLy8gZm9yIHRoZSBuZXh0IHRocmVhZCB0aGF0IHdlIHJ1biBvbiB0aGF0IG1h
eSBvciBtYXkgbm90IGJlIHRoZSBzYW1lIGFzCisgICAgLy8gdGhpcyBvbmUgKGFuZCBoZW5jZSBt
YXkgaGF2ZSBhIGRpZmZlcmVudCBzdGFjayBzaXplIHRvIHdvcmsgd2l0aCk6IAorICAgIGlmICht
X2lzRmlyc3QpCisgICAgICAgIG1faW50ZXJwcmV0ZXIubV9uYXRpdmVTdGFja0F2YWlsYWJpbGl0
eSA9IFVOSU5JVElBTElaRURfTkFUSVZFX1NUQUNLX0FWQUlMQUJJTElUWTsKK30KKworCiBzdGF0
aWMgQ2FsbEZyYW1lKiBnZXRDYWxsZXJJbmZvKEpTR2xvYmFsRGF0YSosIENhbGxGcmFtZSosIGlu
dCYgbGluZU51bWJlciwgdW5zaWduZWQmIGJ5dGVjb2RlT2Zmc2V0KTsKIAogLy8gUmV0dXJucyB0
aGUgZGVwdGggb2YgdGhlIHNjb3BlIGNoYWluIHdpdGhpbiBhIGdpdmVuIGNhbGwgZnJhbWUuCkBA
IC0yNDcsNyArMzM5LDggQEAgQ2FsbEZyYW1lKiBsb2FkVmFyYXJncyhDYWxsRnJhbWUqIGNhbGxG
cgogCiBJbnRlcnByZXRlcjo6SW50ZXJwcmV0ZXIoKQogICAgIDogbV9zYW1wbGVFbnRyeURlcHRo
KDApCi0gICAgLCBtX3JlZW50cnlEZXB0aCgwKQorICAgICwgbV9lcnJvckhhbmRsaW5nTW9kZVJl
ZW50cnkoMCkKKyAgICAsIG1fbmF0aXZlU3RhY2tBdmFpbGFiaWxpdHkoVU5JTklUSUFMSVpFRF9O
QVRJVkVfU1RBQ0tfQVZBSUxBQklMSVRZKQogI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICAsIG1f
aW5pdGlhbGl6ZWQoZmFsc2UpCiAjZW5kaWYKQEAgLTc1NCw3ICs4NDcsOSBAQCBKU1ZhbHVlIElu
dGVycHJldGVyOjpleGVjdXRlKFByb2dyYW1FeGVjCiAgICAgICAgIENSQVNIKCk7CiAKICAgICBT
dGFja1N0YXRzOjpDaGVja1BvaW50IHN0YWNrQ2hlY2tQb2ludDsKLSAgICBpZiAobV9yZWVudHJ5
RGVwdGggPj0gTWF4U21hbGxUaHJlYWRSZWVudHJ5RGVwdGggJiYgbV9yZWVudHJ5RGVwdGggPj0g
Y2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkubWF4UmVlbnRyeURlcHRoKQorICAgIGNvbnN0IFN0YWNr
Qm91bmRzJiBuYXRpdmVTdGFjayA9IHd0ZlRocmVhZERhdGEoKS5zdGFjaygpOworICAgIFN0YWNr
QXZhaWxhYmlsaXR5IGF2YWlsYWJpbGl0eSgqdGhpcywgbmF0aXZlU3RhY2spOworICAgIGlmICgh
bmF0aXZlU3RhY2suaXNTYWZlVG9SZWN1cnNlKGF2YWlsYWJpbGl0eSkpCiAgICAgICAgIHJldHVy
biBjaGVja2VkUmV0dXJuKHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKGNhbGxGcmFtZSkpOwogCiAg
ICAgLy8gRmlyc3QgY2hlY2sgaWYgdGhlICJwcm9ncmFtIiBpcyBhY3R1YWxseSBqdXN0IGEgSlNP
TiBvYmplY3QuIElmIHNvLApAQCAtODkwLDE0ICs5ODUsMTEgQEAgZmFpbGVkSlNPTlA6CiAgICAg
ewogICAgICAgICBTYW1wbGluZ1Rvb2w6OkNhbGxSZWNvcmQgY2FsbFJlY29yZChtX3NhbXBsZXIu
Z2V0KCkpOwogCi0gICAgICAgIG1fcmVlbnRyeURlcHRoKys7CiAjaWYgRU5BQkxFKExMSU5UX0Nf
TE9PUCkKICAgICAgICAgcmVzdWx0ID0gTExJbnQ6OkNMb29wOjpleGVjdXRlKG5ld0NhbGxGcmFt
ZSwgbGxpbnRfcHJvZ3JhbV9wcm9sb2d1ZSk7CiAjZWxpZiBFTkFCTEUoSklUKQogICAgICAgICBy
ZXN1bHQgPSBwcm9ncmFtLT5nZW5lcmF0ZWRKSVRDb2RlKCkuZXhlY3V0ZSgmbV9zdGFjaywgbmV3
Q2FsbEZyYW1lLCBzY29wZS0+Z2xvYmFsRGF0YSgpKTsKICNlbmRpZiAvLyBFTkFCTEUoSklUKQot
Ci0gICAgICAgIG1fcmVlbnRyeURlcHRoLS07CiAgICAgfQogCiAgICAgaWYgKFByb2ZpbGVyKiBw
cm9maWxlciA9IGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLmVuYWJsZWRQcm9maWxlcigpKQpAQCAt
OTE3LDcgKzEwMDksOSBAQCBKU1ZhbHVlIEludGVycHJldGVyOjpleGVjdXRlQ2FsbChDYWxsRnJh
CiAgICAgICAgIHJldHVybiBqc051bGwoKTsKIAogICAgIFN0YWNrU3RhdHM6OkNoZWNrUG9pbnQg
c3RhY2tDaGVja1BvaW50OwotICAgIGlmIChtX3JlZW50cnlEZXB0aCA+PSBNYXhTbWFsbFRocmVh
ZFJlZW50cnlEZXB0aCAmJiBtX3JlZW50cnlEZXB0aCA+PSBjYWxsRnJhbWUtPmdsb2JhbERhdGEo
KS5tYXhSZWVudHJ5RGVwdGgpCisgICAgY29uc3QgU3RhY2tCb3VuZHMmIG5hdGl2ZVN0YWNrID0g
d3RmVGhyZWFkRGF0YSgpLnN0YWNrKCk7CisgICAgU3RhY2tBdmFpbGFiaWxpdHkgYXZhaWxhYmls
aXR5KCp0aGlzLCBuYXRpdmVTdGFjayk7CisgICAgaWYgKCFuYXRpdmVTdGFjay5pc1NhZmVUb1Jl
Y3Vyc2UoYXZhaWxhYmlsaXR5KSkKICAgICAgICAgcmV0dXJuIGNoZWNrZWRSZXR1cm4odGhyb3dT
dGFja092ZXJmbG93RXJyb3IoY2FsbEZyYW1lKSk7CiAKICAgICBSZWdpc3Rlciogb2xkRW5kID0g
bV9zdGFjay5lbmQoKTsKQEAgLTk2MiwxNCArMTA1NiwxMSBAQCBKU1ZhbHVlIEludGVycHJldGVy
OjpleGVjdXRlQ2FsbChDYWxsRnJhCiAgICAgICAgIHsKICAgICAgICAgICAgIFNhbXBsaW5nVG9v
bDo6Q2FsbFJlY29yZCBjYWxsUmVjb3JkKG1fc2FtcGxlci5nZXQoKSk7CiAKLSAgICAgICAgICAg
IG1fcmVlbnRyeURlcHRoKys7ICAKICNpZiBFTkFCTEUoTExJTlRfQ19MT09QKQogICAgICAgICAg
ICAgcmVzdWx0ID0gTExJbnQ6OkNMb29wOjpleGVjdXRlKG5ld0NhbGxGcmFtZSwgbGxpbnRfZnVu
Y3Rpb25fZm9yX2NhbGxfcHJvbG9ndWUpOwogI2VsaWYgRU5BQkxFKEpJVCkKICAgICAgICAgICAg
IHJlc3VsdCA9IGNhbGxEYXRhLmpzLmZ1bmN0aW9uRXhlY3V0YWJsZS0+Z2VuZXJhdGVkSklUQ29k
ZUZvckNhbGwoKS5leGVjdXRlKCZtX3N0YWNrLCBuZXdDYWxsRnJhbWUsIGNhbGxEYXRhU2NvcGUt
Pmdsb2JhbERhdGEoKSk7CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKLQotICAgICAgICAgICAgbV9y
ZWVudHJ5RGVwdGgtLTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChQcm9maWxlciogcHJvZmls
ZXIgPSBjYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5lbmFibGVkUHJvZmlsZXIoKSkKQEAgLTEwMTMs
NyArMTEwNCw5IEBAIEpTT2JqZWN0KiBJbnRlcnByZXRlcjo6ZXhlY3V0ZUNvbnN0cnVjdCgKICAg
ICAgICAgcmV0dXJuIGNoZWNrZWRSZXR1cm4odGhyb3dTdGFja092ZXJmbG93RXJyb3IoY2FsbEZy
YW1lKSk7CiAKICAgICBTdGFja1N0YXRzOjpDaGVja1BvaW50IHN0YWNrQ2hlY2tQb2ludDsKLSAg
ICBpZiAobV9yZWVudHJ5RGVwdGggPj0gTWF4U21hbGxUaHJlYWRSZWVudHJ5RGVwdGggJiYgbV9y
ZWVudHJ5RGVwdGggPj0gY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkubWF4UmVlbnRyeURlcHRoKQor
ICAgIGNvbnN0IFN0YWNrQm91bmRzJiBuYXRpdmVTdGFjayA9IHd0ZlRocmVhZERhdGEoKS5zdGFj
aygpOworICAgIFN0YWNrQXZhaWxhYmlsaXR5IGF2YWlsYWJpbGl0eSgqdGhpcywgbmF0aXZlU3Rh
Y2spOworICAgIGlmICghbmF0aXZlU3RhY2suaXNTYWZlVG9SZWN1cnNlKGF2YWlsYWJpbGl0eSkp
CiAgICAgICAgIHJldHVybiBjaGVja2VkUmV0dXJuKHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKGNh
bGxGcmFtZSkpOwogCiAgICAgUmVnaXN0ZXIqIG9sZEVuZCA9IG1fc3RhY2suZW5kKCk7CkBAIC0x
MDU3LDEzICsxMTUwLDExIEBAIEpTT2JqZWN0KiBJbnRlcnByZXRlcjo6ZXhlY3V0ZUNvbnN0cnVj
dCgKICAgICAgICAgewogICAgICAgICAgICAgU2FtcGxpbmdUb29sOjpDYWxsUmVjb3JkIGNhbGxS
ZWNvcmQobV9zYW1wbGVyLmdldCgpKTsKIAotICAgICAgICAgICAgbV9yZWVudHJ5RGVwdGgrKzsg
IAogI2lmIEVOQUJMRShMTElOVF9DX0xPT1ApCiAgICAgICAgICAgICByZXN1bHQgPSBMTEludDo6
Q0xvb3A6OmV4ZWN1dGUobmV3Q2FsbEZyYW1lLCBsbGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0
X3Byb2xvZ3VlKTsKICNlbGlmIEVOQUJMRShKSVQpCiAgICAgICAgICAgICByZXN1bHQgPSBjb25z
dHJ1Y3REYXRhLmpzLmZ1bmN0aW9uRXhlY3V0YWJsZS0+Z2VuZXJhdGVkSklUQ29kZUZvckNvbnN0
cnVjdCgpLmV4ZWN1dGUoJm1fc3RhY2ssIG5ld0NhbGxGcmFtZSwgY29uc3RydWN0RGF0YVNjb3Bl
LT5nbG9iYWxEYXRhKCkpOwogI2VuZGlmIC8vIEVOQUJMRShKSVQpCi0gICAgICAgICAgICBtX3Jl
ZW50cnlEZXB0aC0tOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKFByb2ZpbGVyKiBwcm9maWxl
ciA9IGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLmVuYWJsZWRQcm9maWxlcigpKQpAQCAtMTExMSw3
ICsxMjAyLDkgQEAgQ2FsbEZyYW1lQ2xvc3VyZSBJbnRlcnByZXRlcjo6cHJlcGFyZUZvcgogICAg
ICAgICByZXR1cm4gQ2FsbEZyYW1lQ2xvc3VyZSgpOwogCiAgICAgU3RhY2tTdGF0czo6Q2hlY2tQ
b2ludCBzdGFja0NoZWNrUG9pbnQ7Ci0gICAgaWYgKG1fcmVlbnRyeURlcHRoID49IE1heFNtYWxs
VGhyZWFkUmVlbnRyeURlcHRoICYmIG1fcmVlbnRyeURlcHRoID49IGNhbGxGcmFtZS0+Z2xvYmFs
RGF0YSgpLm1heFJlZW50cnlEZXB0aCkgeworICAgIGNvbnN0IFN0YWNrQm91bmRzJiBuYXRpdmVT
dGFjayA9IHd0ZlRocmVhZERhdGEoKS5zdGFjaygpOworICAgIFN0YWNrQXZhaWxhYmlsaXR5IGF2
YWlsYWJpbGl0eSgqdGhpcywgbmF0aXZlU3RhY2spOworICAgIGlmICghbmF0aXZlU3RhY2suaXNT
YWZlVG9SZWN1cnNlKGF2YWlsYWJpbGl0eSkpIHsKICAgICAgICAgdGhyb3dTdGFja092ZXJmbG93
RXJyb3IoY2FsbEZyYW1lKTsKICAgICAgICAgcmV0dXJuIENhbGxGcmFtZUNsb3N1cmUoKTsKICAg
ICB9CkBAIC0xMTY0LDEzICsxMjU3LDExIEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGUo
Q2FsbEZyYW1lQ2wKICAgICB7CiAgICAgICAgIFNhbXBsaW5nVG9vbDo6Q2FsbFJlY29yZCBjYWxs
UmVjb3JkKG1fc2FtcGxlci5nZXQoKSk7CiAgICAgICAgIAotICAgICAgICBtX3JlZW50cnlEZXB0
aCsrOyAgCiAjaWYgRU5BQkxFKExMSU5UX0NfTE9PUCkKICAgICAgICAgcmVzdWx0ID0gTExJbnQ6
OkNMb29wOjpleGVjdXRlKGNsb3N1cmUubmV3Q2FsbEZyYW1lLCBsbGludF9mdW5jdGlvbl9mb3Jf
Y2FsbF9wcm9sb2d1ZSk7CiAjZWxpZiBFTkFCTEUoSklUKQogICAgICAgICByZXN1bHQgPSBjbG9z
dXJlLmZ1bmN0aW9uRXhlY3V0YWJsZS0+Z2VuZXJhdGVkSklUQ29kZUZvckNhbGwoKS5leGVjdXRl
KCZtX3N0YWNrLCBjbG9zdXJlLm5ld0NhbGxGcmFtZSwgY2xvc3VyZS5nbG9iYWxEYXRhKTsKICNl
bmRpZiAvLyBFTkFCTEUoSklUKQotICAgICAgICBtX3JlZW50cnlEZXB0aC0tOwogICAgIH0KIAog
ICAgIGlmIChQcm9maWxlciogcHJvZmlsZXIgPSBjbG9zdXJlLm9sZENhbGxGcmFtZS0+Z2xvYmFs
RGF0YSgpLmVuYWJsZWRQcm9maWxlcigpKQpAQCAtMTE5Nyw3ICsxMjg4LDkgQEAgSlNWYWx1ZSBJ
bnRlcnByZXRlcjo6ZXhlY3V0ZShFdmFsRXhlY3V0YQogICAgIER5bmFtaWNHbG9iYWxPYmplY3RT
Y29wZSBnbG9iYWxPYmplY3RTY29wZSgqc2NvcGUtPmdsb2JhbERhdGEoKSwgc2NvcGUtPmdsb2Jh
bE9iamVjdCgpKTsKIAogICAgIFN0YWNrU3RhdHM6OkNoZWNrUG9pbnQgc3RhY2tDaGVja1BvaW50
OwotICAgIGlmIChtX3JlZW50cnlEZXB0aCA+PSBNYXhTbWFsbFRocmVhZFJlZW50cnlEZXB0aCAm
JiBtX3JlZW50cnlEZXB0aCA+PSBjYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5tYXhSZWVudHJ5RGVw
dGgpCisgICAgY29uc3QgU3RhY2tCb3VuZHMmIG5hdGl2ZVN0YWNrID0gd3RmVGhyZWFkRGF0YSgp
LnN0YWNrKCk7CisgICAgU3RhY2tBdmFpbGFiaWxpdHkgYXZhaWxhYmlsaXR5KCp0aGlzLCBuYXRp
dmVTdGFjayk7CisgICAgaWYgKCFuYXRpdmVTdGFjay5pc1NhZmVUb1JlY3Vyc2UoYXZhaWxhYmls
aXR5KSkKICAgICAgICAgcmV0dXJuIGNoZWNrZWRSZXR1cm4odGhyb3dTdGFja092ZXJmbG93RXJy
b3IoY2FsbEZyYW1lKSk7CiAKICAgICBKU09iamVjdCogY29tcGlsZUVycm9yID0gZXZhbC0+Y29t
cGlsZShjYWxsRnJhbWUsIHNjb3BlKTsKQEAgLTEyNTgsMTUgKzEzNTEsMTIgQEAgSlNWYWx1ZSBJ
bnRlcnByZXRlcjo6ZXhlY3V0ZShFdmFsRXhlY3V0YQogICAgIEpTVmFsdWUgcmVzdWx0OwogICAg
IHsKICAgICAgICAgU2FtcGxpbmdUb29sOjpDYWxsUmVjb3JkIGNhbGxSZWNvcmQobV9zYW1wbGVy
LmdldCgpKTsKLQotICAgICAgICBtX3JlZW50cnlEZXB0aCsrOwogICAgICAgICAKICNpZiBFTkFC
TEUoTExJTlRfQ19MT09QKQogICAgICAgICByZXN1bHQgPSBMTEludDo6Q0xvb3A6OmV4ZWN1dGUo
bmV3Q2FsbEZyYW1lLCBsbGludF9ldmFsX3Byb2xvZ3VlKTsKICNlbGlmIEVOQUJMRShKSVQpCiAg
ICAgICAgIHJlc3VsdCA9IGV2YWwtPmdlbmVyYXRlZEpJVENvZGUoKS5leGVjdXRlKCZtX3N0YWNr
LCBuZXdDYWxsRnJhbWUsIHNjb3BlLT5nbG9iYWxEYXRhKCkpOwogI2VuZGlmIC8vIEVOQUJMRShK
SVQpCi0gICAgICAgIG1fcmVlbnRyeURlcHRoLS07CiAgICAgfQogCiAgICAgaWYgKFByb2ZpbGVy
KiBwcm9maWxlciA9IGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLmVuYWJsZWRQcm9maWxlcigpKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVy
LmgJKHJldmlzaW9uIDEzMTk4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9JbnRlcnByZXRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzAsMjAgKzE3MCwyMSBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgfQogICAgIH07CiAKLSAgICAvLyBXZSB1c2UgYSBzbWFsbGVy
IHJlZW50cmFuY3kgbGltaXQgb24gaVBob25lIGJlY2F1c2Ugb2YgdGhlIGhpZ2ggYW1vdW50IG9m
Ci0gICAgLy8gc3RhY2sgc3BhY2UgcmVxdWlyZWQgb24gdGhlIHdlYiB0aHJlYWQuCi0jaWYgUExB
VEZPUk0oSU9TKQotICAgIGVudW0geyBNYXhMYXJnZVRocmVhZFJlZW50cnlEZXB0aCA9IDY0LCBN
YXhTbWFsbFRocmVhZFJlZW50cnlEZXB0aCA9IDE2IH07Ci0jZWxzZQotICAgIGVudW0geyBNYXhM
YXJnZVRocmVhZFJlZW50cnlEZXB0aCA9IDI1NiwgTWF4U21hbGxUaHJlYWRSZWVudHJ5RGVwdGgg
PSAxNiB9OwotI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKLQogICAgIGNsYXNzIEludGVycHJldGVy
IHsKICAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgICAgIGZyaWVuZCBjbGFz
cyBDYWNoZWRDYWxsOwogICAgICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9y
OwogICAgICAgICBmcmllbmQgY2xhc3MgSklUOworCiAgICAgcHVibGljOgorICAgICAgICBjbGFz
cyBFcnJvckhhbmRsaW5nTW9kZSB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIEpTX0VY
UE9SVF9QUklWQVRFIEVycm9ySGFuZGxpbmdNb2RlKEV4ZWNTdGF0ZSopOworICAgICAgICAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgfkVycm9ySGFuZGxpbmdNb2RlKCk7CisgICAgICAgIHByaXZhdGU6
CisgICAgICAgICAgICBJbnRlcnByZXRlciYgbV9pbnRlcnByZXRlcjsKKyAgICAgICAgfTsKKwog
ICAgICAgICBJbnRlcnByZXRlcigpOwogICAgICAgICB+SW50ZXJwcmV0ZXIoKTsKICAgICAgICAg
CkBAIC0yNDEsNiArMjQyLDE4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKU19FWFBPUlRf
UFJJVkFURSB2b2lkIGR1bXBDYWxsRnJhbWUoQ2FsbEZyYW1lKik7CiAKICAgICBwcml2YXRlOgor
ICAgICAgICBjbGFzcyBTdGFja0F2YWlsYWJpbGl0eSB7CisgICAgICAgIHB1YmxpYzoKKyAgICAg
ICAgICAgIFN0YWNrQXZhaWxhYmlsaXR5KEludGVycHJldGVyJiwgY29uc3QgU3RhY2tCb3VuZHMm
KTsKKyAgICAgICAgICAgIH5TdGFja0F2YWlsYWJpbGl0eSgpOworCisgICAgICAgICAgICBpbmxp
bmUgb3BlcmF0b3Igc2l6ZV90KCkgeyByZXR1cm4gbV9pbnRlcnByZXRlci5tX25hdGl2ZVN0YWNr
QXZhaWxhYmlsaXR5OyB9CisKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEludGVycHJl
dGVyJiBtX2ludGVycHJldGVyOworICAgICAgICAgICAgYm9vbCBtX2lzRmlyc3Q7CisgICAgICAg
IH07CisKICAgICAgICAgZW51bSBFeGVjdXRpb25GbGFnIHsgTm9ybWFsLCBJbml0aWFsaXplQW5k
UmV0dXJuIH07CiAKICAgICAgICAgQ2FsbEZyYW1lQ2xvc3VyZSBwcmVwYXJlRm9yUmVwZWF0Q2Fs
bChGdW5jdGlvbkV4ZWN1dGFibGUqLCBDYWxsRnJhbWUqLCBKU0Z1bmN0aW9uKiwgaW50IGFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzLCBKU1Njb3BlKik7CkBAIC0yNjEsOSArMjc0LDEwIEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICBpbnQgbV9zYW1wbGVFbnRyeURlcHRoOwogICAgICAgICBP
d25QdHI8U2FtcGxpbmdUb29sPiBtX3NhbXBsZXI7CiAKLSAgICAgICAgaW50IG1fcmVlbnRyeURl
cHRoOwotCiAgICAgICAgIEpTU3RhY2sgbV9zdGFjazsKKyAgICAgICAgaW50IG1fZXJyb3JIYW5k
bGluZ01vZGVSZWVudHJ5OworICAgICAgICBpbnQgbV9uYXRpdmVTdGFja0F2YWlsYWJpbGl0eTsK
KyAgICAgICAgc3RhdGljIGNvbnN0IGludCBVTklOSVRJQUxJWkVEX05BVElWRV9TVEFDS19BVkFJ
TEFCSUxJVFkgPSAtMTsKICAgICAgICAgCiAjaWYgRU5BQkxFKENPTVBVVEVEX0dPVE9fT1BDT0RF
UykgJiYgRU5BQkxFKExMSU5UKQogICAgICAgICBPcGNvZGUqIG1fb3Bjb2RlVGFibGU7IC8vIE1h
cHMgT3Bjb2RlSUQgPT4gT3Bjb2RlIGZvciBjb21waWxpbmcKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnRlcnByZXRlci9KU1N0YWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSlNTdGFjay5jcHAJKHJldmlzaW9uIDEzMTk4MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9KU1N0YWNrLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDEsNyArNDEsMTkgQEAgc3RhdGljIE11dGV4JiBzdGFja1N0YXRpc3RpY3NNdXRl
eCgpCiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChNdXRleCwgc3RhdGljTXV0ZXgsICgpKTsKICAg
ICByZXR1cm4gc3RhdGljTXV0ZXg7CiB9ICAgIAotICAgIAorCitKU1N0YWNrOjpKU1N0YWNrKHNp
emVfdCBjYXBhY2l0eSkKKyAgICA6IG1fZW5kKDApCit7CisgICAgQVNTRVJUKGNhcGFjaXR5ICYm
IGlzUGFnZUFsaWduZWQoY2FwYWNpdHkpKTsKKworICAgIG1fcmVzZXJ2YXRpb24gPSBQYWdlUmVz
ZXJ2YXRpb246OnJlc2VydmUocm91bmRVcEFsbG9jYXRpb25TaXplKGNhcGFjaXR5ICogc2l6ZW9m
KFJlZ2lzdGVyKSwgY29tbWl0U2l6ZSksIE9TQWxsb2NhdG9yOjpKU1ZNU3RhY2tQYWdlcyk7Cisg
ICAgbV9lbmQgPSBzdGF0aWNfY2FzdDxSZWdpc3Rlcio+KG1fcmVzZXJ2YXRpb24uYmFzZSgpKTsK
KyAgICBtX2NvbW1pdEVuZCA9IHN0YXRpY19jYXN0PFJlZ2lzdGVyKj4obV9yZXNlcnZhdGlvbi5i
YXNlKCkpOworCisgICAgZGlzYWJsZUVycm9yU3RhY2tSZXNlcnZlKCk7Cit9CisKIEpTU3RhY2s6
On5KU1N0YWNrKCkKIHsKICAgICB2b2lkKiBiYXNlID0gbV9yZXNlcnZhdGlvbi5iYXNlKCk7CkBA
IC01MiwxNSArNjQsMjIgQEAgSlNTdGFjazo6fkpTU3RhY2soKQogCiBib29sIEpTU3RhY2s6Omdy
b3dTbG93Q2FzZShSZWdpc3RlciogbmV3RW5kKQogeworICAgIC8vIElmIHdlIGhhdmUgYWxyZWFk
eSBjb21taXR0ZWQgZW5vdWdoIG1lbW9yeSB0byBzYXRpc2Z5IHRoaXMgcmVxdWVzdCwKKyAgICAv
LyBqdXN0IHVwZGF0ZSB0aGUgZW5kIHBvaW50ZXIgYW5kIHJldHVybi4KICAgICBpZiAobmV3RW5k
IDw9IG1fY29tbWl0RW5kKSB7CiAgICAgICAgIG1fZW5kID0gbmV3RW5kOwogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CiAKKyAgICAvLyBDb21wdXRlIHRoZSBjaHVuayBzaXplIG9mIGFkZGl0
aW9uYWwgbWVtb3J5IHRvIGNvbW1pdCwgYW5kIHNlZSBpZiB3ZQorICAgIC8vIGhhdmUgaXQgaXMg
c3RpbGwgd2l0aGluIG91ciBidWRnZXQuIElmIG5vdCwgd2UnbGwgZmFpbCB0byBncm93IGFuZAor
ICAgIC8vIHJldHVybiBmYWxzZS4KICAgICBsb25nIGRlbHRhID0gcm91bmRVcEFsbG9jYXRpb25T
aXplKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG5ld0VuZCkgLSByZWludGVycHJldF9jYXN0PGNo
YXIqPihtX2NvbW1pdEVuZCksIGNvbW1pdFNpemUpOwotICAgIGlmIChyZWludGVycHJldF9jYXN0
PGNoYXIqPihtX2NvbW1pdEVuZCkgKyBkZWx0YSA+IHN0YXRpY19jYXN0PGNoYXIqPihtX3Jlc2Vy
dmF0aW9uLmJhc2UoKSkgKyBtX3Jlc2VydmF0aW9uLnNpemUoKSkKKyAgICBpZiAocmVpbnRlcnBy
ZXRfY2FzdDxjaGFyKj4obV9jb21taXRFbmQpICsgZGVsdGEgPiByZWludGVycHJldF9jYXN0PGNo
YXIqPihtX3VzZWFibGVFbmQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICAvLyBPdGhl
cndpc2UsIHRoZSBncm93dGggaXMgc3RpbGwgd2l0aGluIG91ciBidWRnZXQuIEdvIGFoZWFkIGFu
ZCBjb21taXQKKyAgICAvLyBpdCBhbmQgcmV0dXJuIHRydWUuCiAgICAgbV9yZXNlcnZhdGlvbi5j
b21taXQobV9jb21taXRFbmQsIGRlbHRhKTsKICAgICBhZGRUb0NvbW1pdHRlZEJ5dGVDb3VudChk
ZWx0YSk7CiAgICAgbV9jb21taXRFbmQgPSByZWludGVycHJldF9jYXN0X3B0cjxSZWdpc3Rlcio+
KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG1fY29tbWl0RW5kKSArIGRlbHRhKTsKQEAgLTEwNCw0
ICsxMjMsMjMgQEAgdm9pZCBKU1N0YWNrOjphZGRUb0NvbW1pdHRlZEJ5dGVDb3VudChsbwogICAg
IGNvbW1pdHRlZEJ5dGVzQ291bnQgKz0gYnl0ZUNvdW50OwogfQogCit2b2lkIEpTU3RhY2s6OmVu
YWJsZUVycm9yU3RhY2tSZXNlcnZlKCkKK3sKKyAgICBtX3VzZWFibGVFbmQgPSByZXNlcnZhdGlv
bkVuZCgpOworfQorCit2b2lkIEpTU3RhY2s6OmRpc2FibGVFcnJvclN0YWNrUmVzZXJ2ZSgpCit7
CisgICAgY2hhciogdXNlYWJsZUVuZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHJlc2VydmF0
aW9uRW5kKCkpIC0gY29tbWl0U2l6ZTsKKyAgICBtX3VzZWFibGVFbmQgPSByZWludGVycHJldF9j
YXN0PFJlZ2lzdGVyKj4odXNlYWJsZUVuZCk7CisKKyAgICAvLyBCeSB0aGUgdGltZSB3ZSBnZXQg
aGVyZSwgd2UgYXJlIGd1YXJhbnRlZWQgdG8gYmUgZGVzdHJ1Y3RpbmcgdGhlIGxhc3QKKyAgICAv
LyBJbnRlcnByZXRlcjo6RXJyb3JIYW5kbGluZ01vZGUgdGhhdCBlbmFibGVkIHRoaXMgcmVzZXJ2
ZSBpbiB0aGUgZmlyc3QKKyAgICAvLyBwbGFjZS4gVGhhdCBtZWFucyB0aGUgc3RhY2sgc3BhY2Ug
YmV5b25kIG1fdXNlYWJsZUVuZCBiZWZvcmUgd2UKKyAgICAvLyBlbmFibGVkIHRoZSByZXNlcnZl
IHdhcyBub3QgcHJldmlvdXNseSBpbiB1c2UuIEhlbmNlLCBpdCBpcyBzYWZlIHRvCisgICAgLy8g
c2hyaW5rIGJhY2sgdG8gdGhhdCBtX3VzZWFibGVFbmQuCisgICAgaWYgKG1fZW5kID4gbV91c2Vh
YmxlRW5kKQorICAgICAgICBzaHJpbmsobV91c2VhYmxlRW5kKTsKK30KKwogfSAvLyBuYW1lc3Bh
Y2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSlNTdGFjay5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9KU1N0YWNr
LmgJKHJldmlzaW9uIDEzMTk4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9KU1N0YWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTgyLDI3ICs4MiwyOCBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgICAgIHJldHVybiAmbV9lbmQ7CiAgICAgICAgIH0KIAorICAgICAgICB2
b2lkIGVuYWJsZUVycm9yU3RhY2tSZXNlcnZlKCk7CisgICAgICAgIHZvaWQgZGlzYWJsZUVycm9y
U3RhY2tSZXNlcnZlKCk7CisKICAgICBwcml2YXRlOgogICAgICAgICBmcmllbmQgY2xhc3MgTExJ
bnRPZmZzZXRzRXh0cmFjdG9yOwogCisgICAgICAgIFJlZ2lzdGVyKiByZXNlcnZhdGlvbkVuZCgp
IGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIGNoYXIqIGJhc2UgPSBzdGF0aWNfY2FzdDxj
aGFyKj4obV9yZXNlcnZhdGlvbi5iYXNlKCkpOworICAgICAgICAgICAgY2hhciogcmVzZXJ2YXRp
b25FbmQgPSBiYXNlICsgbV9yZXNlcnZhdGlvbi5zaXplKCk7CisgICAgICAgICAgICByZXR1cm4g
cmVpbnRlcnByZXRfY2FzdDxSZWdpc3Rlcio+KHJlc2VydmF0aW9uRW5kKTsKKyAgICAgICAgfQor
CiAgICAgICAgIGJvb2wgZ3Jvd1Nsb3dDYXNlKFJlZ2lzdGVyKik7CiAgICAgICAgIHZvaWQgcmVs
ZWFzZUV4Y2Vzc0NhcGFjaXR5KCk7CiAgICAgICAgIHZvaWQgYWRkVG9Db21taXR0ZWRCeXRlQ291
bnQobG9uZyk7CiAgICAgICAgIFJlZ2lzdGVyKiBtX2VuZDsKICAgICAgICAgUmVnaXN0ZXIqIG1f
Y29tbWl0RW5kOworICAgICAgICBSZWdpc3RlciogbV91c2VhYmxlRW5kOwogICAgICAgICBQYWdl
UmVzZXJ2YXRpb24gbV9yZXNlcnZhdGlvbjsKICAgICB9OwogCi0gICAgaW5saW5lIEpTU3RhY2s6
OkpTU3RhY2soc2l6ZV90IGNhcGFjaXR5KQotICAgICAgICA6IG1fZW5kKDApCi0gICAgewotICAg
ICAgICBBU1NFUlQoY2FwYWNpdHkgJiYgaXNQYWdlQWxpZ25lZChjYXBhY2l0eSkpOwotCi0gICAg
ICAgIG1fcmVzZXJ2YXRpb24gPSBQYWdlUmVzZXJ2YXRpb246OnJlc2VydmUocm91bmRVcEFsbG9j
YXRpb25TaXplKGNhcGFjaXR5ICogc2l6ZW9mKFJlZ2lzdGVyKSwgY29tbWl0U2l6ZSksIE9TQWxs
b2NhdG9yOjpKU1ZNU3RhY2tQYWdlcyk7Ci0gICAgICAgIG1fZW5kID0gc3RhdGljX2Nhc3Q8UmVn
aXN0ZXIqPihtX3Jlc2VydmF0aW9uLmJhc2UoKSk7Ci0gICAgICAgIG1fY29tbWl0RW5kID0gc3Rh
dGljX2Nhc3Q8UmVnaXN0ZXIqPihtX3Jlc2VydmF0aW9uLmJhc2UoKSk7Ci0gICAgfQotCiAgICAg
aW5saW5lIHZvaWQgSlNTdGFjazo6c2hyaW5rKFJlZ2lzdGVyKiBuZXdFbmQpCiAgICAgewogICAg
ICAgICBpZiAobmV3RW5kID49IG1fZW5kKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9QYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJz
ZXIvUGFyc2VyLmNwcAkocmV2aXNpb24gMTMxOTgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3BhcnNlci9QYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSw3IEBACiAjZGVm
aW5lIGZhaWxXaXRoVG9rZW4odG9rKSBkbyB7IGlmICghbV9lcnJvcikgdXBkYXRlRXJyb3JNZXNz
YWdlKHRvayk7IHJldHVybiAwOyB9IHdoaWxlICgwKQogI2RlZmluZSBmYWlsV2l0aE1lc3NhZ2Uo
bXNnKSBkbyB7IGlmICghbV9lcnJvcikgdXBkYXRlRXJyb3JNZXNzYWdlKG1zZyk7IHJldHVybiAw
OyB9IHdoaWxlICgwKQogI2RlZmluZSBmYWlsV2l0aE5hbWVBbmRNZXNzYWdlKGJlZm9yZSwgbmFt
ZSwgYWZ0ZXIpIGRvIHsgaWYgKCFtX2Vycm9yKSB1cGRhdGVFcnJvcldpdGhOYW1lQW5kTWVzc2Fn
ZShiZWZvcmUsIG5hbWUsIGFmdGVyKTsgcmV0dXJuIDA7IH0gd2hpbGUgKDApCisjZGVmaW5lIGZh
aWxXaXRoU3RhY2tPdmVyZmxvdygpIGRvIHsgbV9lcnJvciA9IHRydWU7IG1faGFzU3RhY2tPdmVy
ZmxvdyA9IHRydWU7IHJldHVybiAwOyB9IHdoaWxlICgwKQogI2RlZmluZSBmYWlsSWZGYWxzZShj
b25kKSBkbyB7IGlmICghKGNvbmQpKSBmYWlsKCk7IH0gd2hpbGUgKDApCiAjZGVmaW5lIGZhaWxJ
ZkZhbHNlV2l0aE1lc3NhZ2UoY29uZCwgbXNnKSBkbyB7IGlmICghKGNvbmQpKSBmYWlsV2l0aE1l
c3NhZ2UobXNnKTsgfSB3aGlsZSAoMCkKICNkZWZpbmUgZmFpbElmRmFsc2VXaXRoTmFtZUFuZE1l
c3NhZ2UoY29uZCwgYmVmb3JlLCBuYW1lLCBtc2cpIGRvIHsgaWYgKCEoY29uZCkpIGZhaWxXaXRo
TmFtZUFuZE1lc3NhZ2UoYmVmb3JlLCBuYW1lLCBtc2cpOyB9IHdoaWxlICgwKQpAQCAtNTQsNyAr
NTUsNyBAQAogI2RlZmluZSBjb25zdW1lT3JGYWlsKHRva2VuVHlwZSkgZG8geyBpZiAoIWNvbnN1
bWUodG9rZW5UeXBlKSkgZmFpbFdpdGhUb2tlbih0b2tlblR5cGUpOyB9IHdoaWxlICgwKQogI2Rl
ZmluZSBjb25zdW1lT3JGYWlsV2l0aEZsYWdzKHRva2VuVHlwZSwgZmxhZ3MpIGRvIHsgaWYgKCFj
b25zdW1lKHRva2VuVHlwZSwgZmxhZ3MpKSBmYWlsV2l0aFRva2VuKHRva2VuVHlwZSk7IH0gd2hp
bGUgKDApCiAjZGVmaW5lIG1hdGNoT3JGYWlsKHRva2VuVHlwZSkgZG8geyBpZiAoIW1hdGNoKHRv
a2VuVHlwZSkpIGZhaWxXaXRoVG9rZW4odG9rZW5UeXBlKTsgfSB3aGlsZSAoMCkKLSNkZWZpbmUg
ZmFpbElmU3RhY2tPdmVyZmxvdygpIGRvIHsgZmFpbElmRmFsc2VXaXRoTWVzc2FnZShjYW5SZWN1
cnNlKCksICJDb2RlIG5lc3RlZCB0b28gZGVlcGx5LiIpOyB9IHdoaWxlICgwKQorI2RlZmluZSBm
YWlsSWZTdGFja092ZXJmbG93KCkgZG8geyBpZiAoIWNhblJlY3Vyc2UoKSkgZmFpbFdpdGhTdGFj
a092ZXJmbG93KCk7IH0gd2hpbGUgKDApCiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKQEAgLTY1
LDYgKzY2LDcgQEAgUGFyc2VyPExleGVyVHlwZT46OlBhcnNlcihKU0dsb2JhbERhdGEqIAogICAg
IDogbV9nbG9iYWxEYXRhKGdsb2JhbERhdGEpCiAgICAgLCBtX3NvdXJjZSgmc291cmNlKQogICAg
ICwgbV9zdGFjayh3dGZUaHJlYWREYXRhKCkuc3RhY2soKSkKKyAgICAsIG1faGFzU3RhY2tPdmVy
ZmxvdyhmYWxzZSkKICAgICAsIG1fZXJyb3IoZmFsc2UpCiAgICAgLCBtX2Vycm9yTWVzc2FnZSgi
UGFyc2UgZXJyb3IiKQogICAgICwgbV9hbGxvd3NJbih0cnVlKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcGFyc2VyL1BhcnNlci5oCShyZXZpc2lvbiAxMzE5ODIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCSh3b3JraW5nIGNvcHkpCkBAIC04OTYsNiArODk2LDcg
QEAgcHJpdmF0ZToKICAgICBPd25QdHI8TGV4ZXJUeXBlPiBtX2xleGVyOwogICAgIAogICAgIFN0
YWNrQm91bmRzIG1fc3RhY2s7CisgICAgYm9vbCBtX2hhc1N0YWNrT3ZlcmZsb3c7CiAgICAgYm9v
bCBtX2Vycm9yOwogICAgIFN0cmluZyBtX2Vycm9yTWVzc2FnZTsKICAgICBKU1Rva2VuIG1fdG9r
ZW47CkBAIC05ODcsNyArOTg4LDcgQEAgUGFzc1JlZlB0cjxQYXJzZWROb2RlPiBQYXJzZXI8TGV4
ZXJUeXBlPgogICAgICAgICAvLyB3ZSByYW4gb3V0IG9mIHN0YWNrIHdoaWxlIHBhcnNpbmcuIElm
IHdlIHNlZSBhbiBlcnJvciB3aGlsZSBwYXJzaW5nIGV2YWwgb3IgcHJvZ3JhbQogICAgICAgICAv
LyBjb2RlIHdlIGFzc3VtZSB0aGF0IGl0IHdhcyBhIHN5bnRheCBlcnJvciBzaW5jZSBydW5uaW5n
IG91dCBvZiBzdGFjayBpcyBtdWNoIGxlc3MKICAgICAgICAgLy8gbGlrZWx5LCBhbmQgd2UgYXJl
IGN1cnJlbnRseSB1bmFibGUgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiB0aGUgdHdvIGNhc2VzLgot
ICAgICAgICBpZiAoaXNGdW5jdGlvbkJvZHlOb2RlKHN0YXRpY19jYXN0PFBhcnNlZE5vZGUqPigw
KSkpCisgICAgICAgIGlmIChpc0Z1bmN0aW9uQm9keU5vZGUoc3RhdGljX2Nhc3Q8UGFyc2VkTm9k
ZSo+KDApKSB8fCBtX2hhc1N0YWNrT3ZlcmZsb3cpCiAgICAgICAgICAgICAqZXhjZXB0aW9uID0g
Y3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgICAgICBl
bHNlIGlmIChpc0V2YWxOb2RlPFBhcnNlZE5vZGU+KCkpCiAgICAgICAgICAgICAqZXhjZXB0aW9u
ID0gY3JlYXRlU3ludGF4RXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgZXJyTXNnKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMu
Y3BwCShyZXZpc2lvbiAxMzE5ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9F
eGNlcHRpb25IZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYzLDYgKzE2Myw3IEBAIEpT
T2JqZWN0KiB0aHJvd091dE9mTWVtb3J5RXJyb3IoRXhlY1N0YXQKIAogSlNPYmplY3QqIHRocm93
U3RhY2tPdmVyZmxvd0Vycm9yKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBJbnRlcnByZXRlcjo6
RXJyb3JIYW5kbGluZ01vZGUgbW9kZShleGVjKTsKICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVj
LCBjcmVhdGVTdGFja092ZXJmbG93RXJyb3IoZXhlYykpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAJKHJldmlzaW9uIDEzMTk4
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEzMCw3ICsxMzAsNyBAQCBzdGF0aWMgYm9vbCBlbmFibGVBc3NlbWJs
ZXIoRXhlY3V0YWJsZUFsCiB9CiAjZW5kaWYgLy8gRU5BQkxFKCFBU1NFTUJMRVIpCiAKLUpTR2xv
YmFsRGF0YTo6SlNHbG9iYWxEYXRhKEdsb2JhbERhdGFUeXBlIGdsb2JhbERhdGFUeXBlLCBUaHJl
YWRTdGFja1R5cGUgdGhyZWFkU3RhY2tUeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKK0pTR2xvYmFs
RGF0YTo6SlNHbG9iYWxEYXRhKEdsb2JhbERhdGFUeXBlIGdsb2JhbERhdGFUeXBlLCBIZWFwVHlw
ZSBoZWFwVHlwZSkKICAgICA6CiAjaWYgRU5BQkxFKEFTU0VNQkxFUikKICAgICAgIGV4ZWN1dGFi
bGVBbGxvY2F0b3IoKnRoaXMpLApAQCAtMTcxLDcgKzE3MSw2IEBAIEpTR2xvYmFsRGF0YTo6SlNH
bG9iYWxEYXRhKEdsb2JhbERhdGFUeXAKICNlbmRpZgogICAgICwgZHluYW1pY0dsb2JhbE9iamVj
dCgwKQogICAgICwgY2FjaGVkVVRDT2Zmc2V0KHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6
cXVpZXRfTmFOKCkpCi0gICAgLCBtYXhSZWVudHJ5RGVwdGgodGhyZWFkU3RhY2tUeXBlID09IFRo
cmVhZFN0YWNrVHlwZVNtYWxsID8gTWF4U21hbGxUaHJlYWRSZWVudHJ5RGVwdGggOiBNYXhMYXJn
ZVRocmVhZFJlZW50cnlEZXB0aCkKICAgICAsIG1fZW5hYmxlZFByb2ZpbGVyKDApCiAgICAgLCBt
X3JlZ0V4cENhY2hlKG5ldyBSZWdFeHBDYWNoZSh0aGlzKSkKICNpZiBFTkFCTEUoUkVHRVhQX1RS
QUNJTkcpCkBAIC0zMTAsMTkgKzMwOSwxOSBAQCBKU0dsb2JhbERhdGE6On5KU0dsb2JhbERhdGEo
KQogI2VuZGlmCiB9CiAKLVBhc3NSZWZQdHI8SlNHbG9iYWxEYXRhPiBKU0dsb2JhbERhdGE6OmNy
ZWF0ZUNvbnRleHRHcm91cChUaHJlYWRTdGFja1R5cGUgdHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUp
CitQYXNzUmVmUHRyPEpTR2xvYmFsRGF0YT4gSlNHbG9iYWxEYXRhOjpjcmVhdGVDb250ZXh0R3Jv
dXAoSGVhcFR5cGUgaGVhcFR5cGUpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBKU0dsb2Jh
bERhdGEoQVBJQ29udGV4dEdyb3VwLCB0eXBlLCBoZWFwVHlwZSkpOworICAgIHJldHVybiBhZG9w
dFJlZihuZXcgSlNHbG9iYWxEYXRhKEFQSUNvbnRleHRHcm91cCwgaGVhcFR5cGUpKTsKIH0KIAot
UGFzc1JlZlB0cjxKU0dsb2JhbERhdGE+IEpTR2xvYmFsRGF0YTo6Y3JlYXRlKFRocmVhZFN0YWNr
VHlwZSB0eXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKK1Bhc3NSZWZQdHI8SlNHbG9iYWxEYXRhPiBK
U0dsb2JhbERhdGE6OmNyZWF0ZShIZWFwVHlwZSBoZWFwVHlwZSkKIHsKLSAgICByZXR1cm4gYWRv
cHRSZWYobmV3IEpTR2xvYmFsRGF0YShEZWZhdWx0LCB0eXBlLCBoZWFwVHlwZSkpOworICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgSlNHbG9iYWxEYXRhKERlZmF1bHQsIGhlYXBUeXBlKSk7CiB9CiAK
LVBhc3NSZWZQdHI8SlNHbG9iYWxEYXRhPiBKU0dsb2JhbERhdGE6OmNyZWF0ZUxlYWtlZChUaHJl
YWRTdGFja1R5cGUgdHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUpCitQYXNzUmVmUHRyPEpTR2xvYmFs
RGF0YT4gSlNHbG9iYWxEYXRhOjpjcmVhdGVMZWFrZWQoSGVhcFR5cGUgaGVhcFR5cGUpCiB7Ci0g
ICAgcmV0dXJuIGNyZWF0ZSh0eXBlLCBoZWFwVHlwZSk7CisgICAgcmV0dXJuIGNyZWF0ZShoZWFw
VHlwZSk7CiB9CiAKIGJvb2wgSlNHbG9iYWxEYXRhOjpzaGFyZWRJbnN0YW5jZUV4aXN0cygpCkBA
IC0zMzUsNyArMzM0LDcgQEAgSlNHbG9iYWxEYXRhJiBKU0dsb2JhbERhdGE6OnNoYXJlZEluc3Rh
bgogICAgIEdsb2JhbEpTTG9jayBnbG9iYWxMb2NrOwogICAgIEpTR2xvYmFsRGF0YSomIGluc3Rh
bmNlID0gc2hhcmVkSW5zdGFuY2VJbnRlcm5hbCgpOwogICAgIGlmICghaW5zdGFuY2UpIHsKLSAg
ICAgICAgaW5zdGFuY2UgPSBhZG9wdFJlZihuZXcgSlNHbG9iYWxEYXRhKEFQSVNoYXJlZCwgVGhy
ZWFkU3RhY2tUeXBlU21hbGwsIFNtYWxsSGVhcCkpLmxlYWtSZWYoKTsKKyAgICAgICAgaW5zdGFu
Y2UgPSBhZG9wdFJlZihuZXcgSlNHbG9iYWxEYXRhKEFQSVNoYXJlZCwgU21hbGxIZWFwKSkubGVh
a1JlZigpOwogICAgICAgICBpbnN0YW5jZS0+bWFrZVVzYWJsZUZyb21NdWx0aXBsZVRocmVhZHMo
KTsKICAgICB9CiAgICAgcmV0dXJuICppbnN0YW5jZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCShyZXZpc2lvbiAxMzE5ODIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAkod29ya2luZyBjb3B5KQpA
QCAtMTA0LDExICsxMDQsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgZG91YmxlIGluY3Jl
bWVudDsKICAgICB9OwogCi0gICAgZW51bSBUaHJlYWRTdGFja1R5cGUgewotICAgICAgICBUaHJl
YWRTdGFja1R5cGVMYXJnZSwKLSAgICAgICAgVGhyZWFkU3RhY2tUeXBlU21hbGwKLSAgICB9Owot
CiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgY2xhc3MgQ29uc2VydmF0aXZlUm9vdHM7CiAKQEAg
LTE2NCw5ICsxNTksOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIGJvb2wgc2hh
cmVkSW5zdGFuY2VFeGlzdHMoKTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIEpT
R2xvYmFsRGF0YSYgc2hhcmVkSW5zdGFuY2UoKTsKIAotICAgICAgICBKU19FWFBPUlRfUFJJVkFU
RSBzdGF0aWMgUGFzc1JlZlB0cjxKU0dsb2JhbERhdGE+IGNyZWF0ZShUaHJlYWRTdGFja1R5cGUs
IEhlYXBUeXBlID0gU21hbGxIZWFwKTsKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGlj
IFBhc3NSZWZQdHI8SlNHbG9iYWxEYXRhPiBjcmVhdGVMZWFrZWQoVGhyZWFkU3RhY2tUeXBlLCBI
ZWFwVHlwZSA9IFNtYWxsSGVhcCk7Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEpTR2xvYmFs
RGF0YT4gY3JlYXRlQ29udGV4dEdyb3VwKFRocmVhZFN0YWNrVHlwZSwgSGVhcFR5cGUgPSBTbWFs
bEhlYXApOworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgUGFzc1JlZlB0cjxKU0ds
b2JhbERhdGE+IGNyZWF0ZShIZWFwVHlwZSA9IFNtYWxsSGVhcCk7CisgICAgICAgIEpTX0VYUE9S
VF9QUklWQVRFIHN0YXRpYyBQYXNzUmVmUHRyPEpTR2xvYmFsRGF0YT4gY3JlYXRlTGVha2VkKEhl
YXBUeXBlID0gU21hbGxIZWFwKTsKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8SlNHbG9iYWxE
YXRhPiBjcmVhdGVDb250ZXh0R3JvdXAoSGVhcFR5cGUgPSBTbWFsbEhlYXApOwogICAgICAgICBK
U19FWFBPUlRfUFJJVkFURSB+SlNHbG9iYWxEYXRhKCk7CiAKICAgICAgICAgdm9pZCBtYWtlVXNh
YmxlRnJvbU11bHRpcGxlVGhyZWFkcygpIHsgaGVhcC5tYWNoaW5lVGhyZWFkcygpLm1ha2VVc2Fi
bGVGcm9tTXVsdGlwbGVUaHJlYWRzKCk7IH0KQEAgLTM0Niw4ICszNDEsNiBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgU3RyaW5nIGNhY2hlZERhdGVTdHJpbmc7CiAgICAgICAgIGRvdWJsZSBj
YWNoZWREYXRlU3RyaW5nVmFsdWU7CiAKLSAgICAgICAgaW50IG1heFJlZW50cnlEZXB0aDsKLQog
ICAgICAgICBQcm9maWxlciogbV9lbmFibGVkUHJvZmlsZXI7CiAgICAgICAgIFJlZ0V4cENhY2hl
KiBtX3JlZ0V4cENhY2hlOwogICAgICAgICBCdW1wUG9pbnRlckFsbG9jYXRvciBtX3JlZ0V4cEFs
bG9jYXRvcjsKQEAgLTQ0Nyw3ICs0NDAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBwcml2YXRl
OgogICAgICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogICAgICAgICAK
LSAgICAgICAgSlNHbG9iYWxEYXRhKEdsb2JhbERhdGFUeXBlLCBUaHJlYWRTdGFja1R5cGUsIEhl
YXBUeXBlKTsKKyAgICAgICAgSlNHbG9iYWxEYXRhKEdsb2JhbERhdGFUeXBlLCBIZWFwVHlwZSk7
CiAgICAgICAgIHN0YXRpYyBKU0dsb2JhbERhdGEqJiBzaGFyZWRJbnN0YW5jZUludGVybmFsKCk7
CiAgICAgICAgIHZvaWQgY3JlYXRlTmF0aXZlVGh1bmsoKTsKICNpZiBFTkFCTEUoQVNTRU1CTEVS
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUmVjdXJzaW9uQ2hl
Y2tlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmlu
Z1JlY3Vyc2lvbkNoZWNrZXIuaAkocmV2aXNpb24gMTMxOTgyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RyaW5nUmVjdXJzaW9uQ2hlY2tlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yMiw2ICsyMiw3IEBACiAKICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgogI2luY2x1ZGUgPHd0
Zi9TdGFja1N0YXRzLmg+CisjaW5jbHVkZSA8d3RmL1dURlRocmVhZERhdGEuaD4KIAogbmFtZXNw
YWNlIEpTQyB7CiAKQEAgLTQ4LDggKzQ5LDggQEAgcHJpdmF0ZToKIAogaW5saW5lIEpTVmFsdWUg
U3RyaW5nUmVjdXJzaW9uQ2hlY2tlcjo6cGVyZm9ybUNoZWNrKCkKIHsKLSAgICBpbnQgc2l6ZSA9
IG1fZXhlYy0+Z2xvYmFsRGF0YSgpLnN0cmluZ1JlY3Vyc2lvbkNoZWNrVmlzaXRlZE9iamVjdHMu
c2l6ZSgpOwotICAgIGlmIChzaXplID49IE1heFNtYWxsVGhyZWFkUmVlbnRyeURlcHRoICYmIHNp
emUgPj0gbV9leGVjLT5nbG9iYWxEYXRhKCkubWF4UmVlbnRyeURlcHRoKQorICAgIGNvbnN0IFN0
YWNrQm91bmRzJiBuYXRpdmVTdGFjayA9IHd0ZlRocmVhZERhdGEoKS5zdGFjaygpOworICAgIGlm
ICghbmF0aXZlU3RhY2suaXNTYWZlVG9SZWN1cnNlKCkpCiAgICAgICAgIHJldHVybiB0aHJvd1N0
YWNrT3ZlcmZsb3dFcnJvcigpOwogICAgIGJvb2wgYWxyZWFkeVZpc2l0ZWQgPSAhbV9leGVjLT5n
bG9iYWxEYXRhKCkuc3RyaW5nUmVjdXJzaW9uQ2hlY2tWaXNpdGVkT2JqZWN0cy5hZGQobV90aGlz
T2JqZWN0KS5pc05ld0VudHJ5OwogICAgIGlmIChhbHJlYWR5VmlzaXRlZCkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cJKHJldmlzaW9uIDEzMTk4MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDIwIEBACisyMDEyLTEwLTIwICBNYXJrIExhbSAgPG1hcmsubGFt
QGFwcGxlLmNvbT4KKworICAgICAgICBDaGFuZ2Ugc3RhY2sgcmVjdXJzaW9uIGNoZWNrcyB0byBi
ZSBiYXNlZCBvbiBzdGFjayBhdmFpbGFiaWxpdHkuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD05OTg3Mi4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBSZW1vdmVkIHRoZSB1c2Ugb2YgVGhyZWFkU3RhY2tUeXBl
LiBFbmFibGVkIHRoZSByZXNlcnZlZCBKU1N0YWNrIHNwYWNlCisgICAgICAgIGZvciBlcnJvciBw
cm9jZXNzaW5nIGJlZm9yZSBkb2luZyB3b3JrIGluIHJlcG9ydEV4Y2VwdGlvbigpLgorCisgICAg
ICAgICogYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnJl
cG9ydEV4Y2VwdGlvbik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRh
KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OldvcmtlclNjcmlwdENvbnRyb2xsZXI6OldvcmtlclNjcmlwdENvbnRy
b2xsZXIpOgorCiAyMDEyLTEwLTE5ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAK
ICAgICAgICAgW1Y4XSBWOERPTVdyYXBwZXIgc2hvdWxkIGF2b2lkIHVzaW5nIGl0cyBkb2N1bWVu
dCBwYXJhbWV0ZXIgKHNvIHdlIGNhbiByZW1vdmUgaXQgc29vbikKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcAkocmV2aXNpb24gMTMxOTgyKQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkpTRE9NV2luZG93Q3VzdG9tLmgiCiAjaW5j
bHVkZSAiSlNFeGNlcHRpb25CYXNlLmgiCiAjaW5jbHVkZSAiU2NyaXB0Q2FsbFN0YWNrLmgiCisj
aW5jbHVkZSA8aW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaD4KICNpbmNsdWRlIDxydW50aW1lL0Rh
dGVJbnN0YW5jZS5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KICNpbmNsdWRlIDxydW50
aW1lL0V4Y2VwdGlvbkhlbHBlcnMuaD4KQEAgLTE0OSw2ICsxNTAsNyBAQCB2b2lkIHJlcG9ydEV4
Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTCiAgICAgaWYgKGlzVGVybWluYXRlZEV4ZWN1dGlv
bkV4Y2VwdGlvbihleGNlcHRpb24pKQogICAgICAgICByZXR1cm47CiAKKyAgICBJbnRlcnByZXRl
cjo6RXJyb3JIYW5kbGluZ01vZGUgbW9kZShleGVjKTsKICAgICBTdHJpbmcgZXJyb3JNZXNzYWdl
ID0gZXhjZXB0aW9uLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICBKU09iamVjdCog
ZXhjZXB0aW9uT2JqZWN0ID0gZXhjZXB0aW9uLnRvT2JqZWN0KGV4ZWMpOwogICAgIGludCBsaW5l
TnVtYmVyID0gZXhjZXB0aW9uT2JqZWN0LT5nZXQoZXhlYywgSWRlbnRpZmllcihleGVjLCAibGlu
ZSIpKS50b0ludDMyKGV4ZWMpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01XaW5kb3dCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTVdpbmRvd0Jhc2UuY3BwCShyZXZpc2lvbiAxMzE5ODIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODEs
NyArMTgxLDcgQEAgSlNHbG9iYWxEYXRhKiBKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTRwogICAg
IHN0YXRpYyBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAwOwogICAgIGlmICghZ2xvYmFsRGF0
YSkgewogICAgICAgICBTY3JpcHRDb250cm9sbGVyOjppbml0aWFsaXplVGhyZWFkaW5nKCk7Ci0g
ICAgICAgIGdsb2JhbERhdGEgPSBKU0dsb2JhbERhdGE6OmNyZWF0ZUxlYWtlZChUaHJlYWRTdGFj
a1R5cGVMYXJnZSwgTGFyZ2VIZWFwKS5sZWFrUmVmKCk7CisgICAgICAgIGdsb2JhbERhdGEgPSBK
U0dsb2JhbERhdGE6OmNyZWF0ZUxlYWtlZChMYXJnZUhlYXApLmxlYWtSZWYoKTsKICAgICAgICAg
Z2xvYmFsRGF0YS0+dGltZW91dENoZWNrZXIuc2V0VGltZW91dEludGVydmFsKDEwMDAwKTsgLy8g
MTAgc2Vjb25kcwogI2lmbmRlZiBOREVCVUcKICAgICAgICAgZ2xvYmFsRGF0YS0+ZXhjbHVzaXZl
VGhyZWFkID0gY3VycmVudFRocmVhZCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvV29ya2VyU2NyaXB0Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvV29ya2VyU2NyaXB0Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDEzMTk4
MikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dvcmtlclNjcmlwdENvbnRyb2xsZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1NSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFdvcmtlclNjcmlwdENvbnRyb2xsZXI6OldvcmtlclNj
cmlwdENvbnRyb2xsZXIoV29ya2VyQ29udGV4dCogd29ya2VyQ29udGV4dCkKLSAgICA6IG1fZ2xv
YmFsRGF0YShKU0dsb2JhbERhdGE6OmNyZWF0ZShUaHJlYWRTdGFja1R5cGVTbWFsbCkpCisgICAg
OiBtX2dsb2JhbERhdGEoSlNHbG9iYWxEYXRhOjpjcmVhdGUoKSkKICAgICAsIG1fd29ya2VyQ29u
dGV4dCh3b3JrZXJDb250ZXh0KQogICAgICwgbV93b3JrZXJDb250ZXh0V3JhcHBlcigqbV9nbG9i
YWxEYXRhKQogICAgICwgbV9leGVjdXRpb25Gb3JiaWRkZW4oZmFsc2UpCkluZGV4OiBMYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZp
c2lvbiAxMzE5ODIpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwxNSBAQAorMjAxMi0xMC0yMCAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+
CisKKyAgICAgICAgQ2hhbmdlIHN0YWNrIHJlY3Vyc2lvbiBjaGVja3MgdG8gYmUgYmFzZWQgb24g
c3RhY2sgYXZhaWxhYmlsaXR5LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9OTk4NzIuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgVXBkYXRlZCB0ZXN0IGJhc2VsaW5lLgorCisgICAgICAgICogZmFzdC9qcy9n
bG9iYWwtcmVjdXJzaW9uLW9uLWZ1bGwtc3RhY2stZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGZh
c3QveG1saHR0cHJlcXVlc3QveG1saHR0cHJlcXVlc3QtcmVjdXJzaXZlLXN5bmMtZXZlbnQtZXhw
ZWN0ZWQudHh0OgorCiAyMDEyLTEwLTE5ICBGbG9yaW4gTWFsaXRhICA8Zm1hbGl0YUBjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgSW5jb3JyZWN0IHBhdHRlcm4gc2NhbGluZwpJbmRleDogTGF5b3V0
VGVzdHMvZmFzdC9qcy9nbG9iYWwtcmVjdXJzaW9uLW9uLWZ1bGwtc3RhY2stZXhwZWN0ZWQudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvZ2xvYmFsLXJlY3Vyc2lvbi1vbi1m
dWxsLXN0YWNrLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMTMxOTgyKQorKysgTGF5b3V0VGVzdHMv
ZmFzdC9qcy9nbG9iYWwtcmVjdXJzaW9uLW9uLWZ1bGwtc3RhY2stZXhwZWN0ZWQudHh0CSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMyBAQAotQ09OU09MRSBNRVNTQUdFOiAKK0NPTlNPTEUgTUVT
U0FHRTogUmFuZ2VFcnJvcjogTWF4aW11bSBjYWxsIHN0YWNrIHNpemUgZXhjZWVkZWQuCiBUaGlz
IHRlc3RzIGdsb2JhbCBjb2RlIHJlY3Vyc2lvbiB3aGVuIHRoZSBKUyBzdGFjayBpcyBmdWxsLgog
UEFTUzogRW50ZXJpbmcgZ2xvYmFsIGNvZGUgd2l0aCBhIGZ1bGwgSlMgc3RhY2sgZGlkIG5vdCBj
cmFzaCwgYW5kIGRpZCBub3QgYWxsb3cgY29udGludWVkIHJlY3Vyc2lvbi4KSW5kZXg6IExheW91
dFRlc3RzL2Zhc3QveG1saHR0cHJlcXVlc3QveG1saHR0cHJlcXVlc3QtcmVjdXJzaXZlLXN5bmMt
ZXZlbnQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QveG1saHR0
cHJlcXVlc3QveG1saHR0cHJlcXVlc3QtcmVjdXJzaXZlLXN5bmMtZXZlbnQtZXhwZWN0ZWQudHh0
CShyZXZpc2lvbiAxMzE5ODIpCisrKyBMYXlvdXRUZXN0cy9mYXN0L3htbGh0dHByZXF1ZXN0L3ht
bGh0dHByZXF1ZXN0LXJlY3Vyc2l2ZS1zeW5jLWV2ZW50LWV4cGVjdGVkLnR4dAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDQgQEAKLUNPTlNPTEUgTUVTU0FHRTogCi1DT05TT0xFIE1FU1NBR0U6
IAorQ09OU09MRSBNRVNTQUdFOiBSYW5nZUVycm9yOiBNYXhpbXVtIGNhbGwgc3RhY2sgc2l6ZSBl
eGNlZWRlZC4KIFRoaXMgdGVzdHMgdGhhdCBoYXZpbmcgaW5maW5pdGUgcmVjdXJzaW9uIGluIFhN
TEh0dHBSZXF1ZXN0IGV2ZW50IGhhbmRsZXIgZG9lcyBub3QgY3Jhc2guIAogUEFTUwogCg==
</data>
<flag name="review"
          id="183175"
          type_id="1"
          status="+"
          setter="fpizlo"
    />
          </attachment>
      

    </bug>

</bugzilla>