<?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>139491</bug_id>
          
          <creation_ts>2014-12-10 09:35:06 -0800</creation_ts>
          <short_desc>[GTK] Add initial database process support</short_desc>
          <delta_ts>2015-01-23 06:30:27 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKitGTK</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>Gtk, Regression</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>139724</dependson>
          <blocked>98932</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>andersca</cc>
    
    <cc>beidson</cc>
    
    <cc>commit-queue</cc>
    
    <cc>gustavo</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>ossy</cc>
    
    <cc>pnormand</cc>
    
    <cc>svillar</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1054185</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-12-10 09:35:06 -0800</bug_when>
    <thetext>To bring back IndexedDB support to the GTK port.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1054201</commentid>
    <comment_count>1</comment_count>
      <attachid>243039</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-12-10 10:01:55 -0800</bug_when>
    <thetext>Created attachment 243039
Patch

It&apos;s still disabled by default because I&apos;m getting a lot of test failures, mainly due to what I think it&apos;s a bug in the compiler, but I&apos;m not sure. When completing an async task, UniqueIDBDatabase is calling AsyncRequest::completeRequest() with an errorCode and an errorMessage. For some reason, when the errorCode is 0, something very different is received in the completion handler callback, I guess someting goes wrong when unpacking the Arguments, however all other parameters are correctly unpacked. This makes the WebProcess think that many of the methods failed when they didn&apos;t. I manged to workaround it by using WTF::move(errorCode), but I don&apos;t have an explanation. With that, and skipping the same layout tests than mac, I managed to get only 25 failures (with similar error, so I suspect is actually the same bug in most of them).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1054202</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-12-10 10:03:26 -0800</bug_when>
    <thetext>Attachment 243039 did not pass style-queue:


ERROR: Source/WebKit2/CMakeLists.txt:469:  Alphabetical sorting problem. &quot;Shared/Network/CustomProtocols/CustomProtocolManager.messages.in&quot; should be before &quot;Shared/Plugins/NPObjectMessageReceiver.messages.in&quot;.  [list/order] [5]
ERROR: Source/WebKit2/DatabaseProcess/gtk/DatabaseProcessMainGtk.cpp:32:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 2 in 25 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>1054215</commentid>
    <comment_count>3</comment_count>
      <attachid>243042</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-12-10 10:15:12 -0800</bug_when>
    <thetext>Created attachment 243042
Updated patch

I forgot to git add a file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1054221</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-12-10 10:23:56 -0800</bug_when>
    <thetext>Attachment 243042 did not pass style-queue:


ERROR: Source/WebKit2/CMakeLists.txt:469:  Alphabetical sorting problem. &quot;Shared/Network/CustomProtocols/CustomProtocolManager.messages.in&quot; should be before &quot;Shared/Plugins/NPObjectMessageReceiver.messages.in&quot;.  [list/order] [5]
ERROR: Source/WebKit2/DatabaseProcess/gtk/DatabaseProcessMainGtk.cpp:32:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 2 in 26 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>1054231</commentid>
    <comment_count>5</comment_count>
      <attachid>243042</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2014-12-10 10:43:10 -0800</bug_when>
    <thetext>Comment on attachment 243042
Updated patch

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

Looks reasonable to me, though maybe someone with more GVariant experience should double-check the type strings.

&gt; Source/WebKit2/Shared/gtk/KeyedDecoder.cpp:2
&gt; + * Copyright (C) 2014 Apple Inc. All rights reserved.

I think we also want an Igalia copyright here too.

&gt; Source/WebKit2/Shared/gtk/KeyedDecoder.cpp:55
&gt; +    while (g_variant_iter_loop (&amp;iter, &quot;{&amp;sv}&quot;, &amp;key, &amp;value))

Extra space here after g_variant_iter_loop.

&gt; Source/WebKit2/Shared/gtk/KeyedEncoder.cpp:2
&gt; + * Copyright (C) 2013 Apple Inc. All rights reserved.

I think we want an Igalia copyright here too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1054232</commentid>
    <comment_count>6</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-12-10 10:48:52 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; Comment on attachment 243042 [details]
&gt; Updated patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=243042&amp;action=review
&gt; 
&gt; Looks reasonable to me, though maybe someone with more GVariant experience
&gt; should double-check the type strings.
&gt; 
&gt; &gt; Source/WebKit2/Shared/gtk/KeyedDecoder.cpp:2
&gt; &gt; + * Copyright (C) 2014 Apple Inc. All rights reserved.
&gt; 
&gt; I think we also want an Igalia copyright here too.

Right, I forgot to update that after copy-pasting :-P

&gt; &gt; Source/WebKit2/Shared/gtk/KeyedDecoder.cpp:55
&gt; &gt; +    while (g_variant_iter_loop (&amp;iter, &quot;{&amp;sv}&quot;, &amp;key, &amp;value))
&gt; 
&gt; Extra space here after g_variant_iter_loop.

Good catch!

&gt; &gt; Source/WebKit2/Shared/gtk/KeyedEncoder.cpp:2
&gt; &gt; + * Copyright (C) 2013 Apple Inc. All rights reserved.
&gt; 
&gt; I think we want an Igalia copyright here too.

Right</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1054441</commentid>
    <comment_count>7</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-12-11 01:25:15 -0800</bug_when>
    <thetext>Maybe sergio can look at the gvariant code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1054443</commentid>
    <comment_count>8</comment_count>
      <attachid>243110</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-12-11 02:01:57 -0800</bug_when>
    <thetext>Created attachment 243110
Updated patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1054471</commentid>
    <comment_count>9</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2014-12-11 04:35:18 -0800</bug_when>
    <thetext>Attachment 243110 did not pass style-queue:


ERROR: Source/WebKit2/CMakeLists.txt:470:  Alphabetical sorting problem. &quot;Shared/Network/CustomProtocols/CustomProtocolManager.messages.in&quot; should be before &quot;Shared/Plugins/NPObjectMessageReceiver.messages.in&quot;.  [list/order] [5]
ERROR: Source/WebKit2/DatabaseProcess/gtk/DatabaseProcessMainGtk.cpp:32:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 2 in 26 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>1054473</commentid>
    <comment_count>10</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-12-11 04:48:57 -0800</bug_when>
    <thetext>(In reply to comment #1)
&gt; Created attachment 243039 [details]
&gt; Patch
&gt; 
&gt; It&apos;s still disabled by default because I&apos;m getting a lot of test failures,
&gt; mainly due to what I think it&apos;s a bug in the compiler, but I&apos;m not sure.
&gt; When completing an async task, UniqueIDBDatabase is calling
&gt; AsyncRequest::completeRequest() with an errorCode and an errorMessage. For
&gt; some reason, when the errorCode is 0, something very different is received
&gt; in the completion handler callback, I guess someting goes wrong when
&gt; unpacking the Arguments, however all other parameters are correctly
&gt; unpacked. This makes the WebProcess think that many of the methods failed
&gt; when they didn&apos;t. I manged to workaround it by using WTF::move(errorCode),
&gt; but I don&apos;t have an explanation. With that, and skipping the same layout
&gt; tests than mac, I managed to get only 25 failures (with similar error, so I
&gt; suspect is actually the same bug in most of them).

It&apos;s definitely a gcc issue and also the other 25 tests failing, I built with clang and I&apos;m getting only one test failure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1055608</commentid>
    <comment_count>11</comment_count>
      <attachid>243291</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-12-15 06:13:08 -0800</bug_when>
    <thetext>Created attachment 243291
Test case for the compiler issue

Ok, I&apos;ve isolated the problem into a simpler test case. I&apos;m not so sure this is a gcc issue, since the test case also fails here with clang, I don&apos;t understand why WebKit worked when built with clang, though. The problem seems to be that we are using the parent class, casting to the derived class, and using a lambda function (if the print method in the test case, calls a member function it works too). I&apos;m not a C++11 expert, but the fact that when using the derived class directly, the build fails when calling print without using std::move for the arguments, makes me thing whether we should actually passing WTF::move for all the arguments passed to AsyncRequest::completeRequest(). I wonder if by using the parent class method and casting we are confusing the compiler that should fail like when using the derived class directly, but it doesn&apos;t.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1058600</commentid>
    <comment_count>12</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2015-01-04 16:03:55 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; I&apos;m not a C++11 expert, but the fact
&gt; that when using the derived class directly, the build fails when calling
&gt; print without using std::move for the arguments

So you can only call the function with rvalues. I think you found a bug in AsyncRequestImpl&lt;typename... Arguments&gt;::completeRequest. Brady, can you look at this please?

This function in the derived class in the attached test case is not right:

template &lt;typename... Arguments&gt;
class Printer : public PrinterBase {

void print(Arguments&amp;&amp;... arguments)
{
    m_printerFunction(std::forward&lt;Arguments&gt;(arguments)...);
}

}

Argument&amp;&amp;... is not a pack of forwarding/universal references (which can bind to any type) as was intended, or you would be able to call it with an lvalue. Therefore it must be a pack of rvalue references, since if it was a pack of forwarding references, Carlos wouldn&apos;t have needed the std::move to call it. So the std::forward used inside the function is useless, as it can only ever be called on rvalue references.

Now this here would be a pack of forwarding references:

template &lt;typename... Arguments&gt; // &lt;-- the difference is this line
void print(Arguments&amp;&amp;... arguments)
{
    m_printerFunction(std::forward&lt;Arguments&gt;(arguments)...);
}

In the function template version, type deduction is performed on the parameters that get passed. But when it&apos;s a normal function in a template class, there is no type deduction -- the types were already specified when the class template was instantiated -- so the only reason to write the &amp;&amp; is to force the parameters to be rvalues, which is what (I guess, almost confidently) the syntax does.

Now, at first I thought this all was unrelated to the data corruption problem, but now I think it&apos;s to blame. Here&apos;s why: AsyncRequestImpl&lt;typename... Arguments&gt;::completeRequest must &quot;obviously&quot; only be passed rvalue references and that&apos;s normally enforced at compile time as Carlos discovered, but if you call it via AsyncRequest::completeRequest, you are (possibly, and in this test case) perfect-forwarding lvalue references to it, so you wind up with lvalues being bound to rvalue references. This is the part I don&apos;t understand: how does that even compile? It seems like something that ought to be rejected at compile time, but since that&apos;s not happening, I guess it&apos;s a hole in the type system? (This is really hard to Google for.)

P.S. I think I&apos;ve reread that enough times and what I wrote makes sense, but look for mistakes in my reasoning please....</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1058669</commentid>
    <comment_count>13</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-01-04 23:17:18 -0800</bug_when>
    <thetext>Zan already fixed the AsyncRequest issues in bug #139724, that is blocking this one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1063326</commentid>
    <comment_count>14</comment_count>
      <attachid>245132</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-01-22 01:53:49 -0800</bug_when>
    <thetext>Created attachment 245132
Rebased patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1063327</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-01-22 01:56:08 -0800</bug_when>
    <thetext>Attachment 245132 did not pass style-queue:


ERROR: Source/WebKit2/CMakeLists.txt:484:  Alphabetical sorting problem. &quot;Shared/Network/CustomProtocols/CustomProtocolManager.messages.in&quot; should be before &quot;Shared/Plugins/NPObjectMessageReceiver.messages.in&quot;.  [list/order] [5]
ERROR: Source/WebKit2/DatabaseProcess/gtk/DatabaseProcessMainGtk.cpp:32:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 2 in 27 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>1063351</commentid>
    <comment_count>16</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-01-22 06:50:31 -0800</bug_when>
    <thetext>I have no idea what the GTK+ EWS build failure is about, but looks unrelated to this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1063353</commentid>
    <comment_count>17</comment_count>
      <attachid>245132</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2015-01-22 07:09:17 -0800</bug_when>
    <thetext>Comment on attachment 245132
Rebased patch

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

Great that the problems with the tests are solved.

&gt; Source/WebKit2/DatabaseProcess/EntryPoint/unix/DatabaseProcessMain.cpp:2
&gt; + * Copyright (C) 2014 Igalia S.L.

Nit: 2015

&gt; Source/WebKit2/DatabaseProcess/gtk/DatabaseProcessMainGtk.cpp:2
&gt; + * Copyright (C) 2014 Igalia S.L.

Ditto.

&gt; Source/WebKit2/Shared/gtk/KeyedDecoder.cpp:2
&gt; + * Copyright (C) 2014 Igalia S.L.

Ditto.

&gt; Source/WebKit2/Shared/gtk/KeyedDecoder.cpp:30
&gt; +

Is this going/meant to be used for anything else apart from the DatabaseProcess? If not we should add the proper guards.

&gt; Source/WebKit2/Shared/gtk/KeyedDecoder.cpp:38
&gt; +    buildDictionaryFromGVariant(variant.get(), dictionary);

As we do this trice, and knowing that in none of those cases we use the dictionary for anything else, I think we can create and return the dictionary from buildDictionaryFromGVariant (renamed to perhaps createDictionary... or convertGVariantToDictionary). That would allow us to remove those unneeded local variables.

&gt; Source/WebKit2/Shared/gtk/KeyedDecoder.cpp:47
&gt; +}

What about enclosing the destructor in a #if !ASSERT_DISABLED block?

&gt; Source/WebKit2/Shared/gtk/KeyedDecoder.cpp:79
&gt; +

This and the following 4 decodeXXX look almost the same, I think we can create a macro with this code, the unique difference is the g_variant_get_XXX call, which can be generated by the macro using a passed in argument. So the body of those methods would be simply something like DECODE(key, result, boolean) or DECODE(key, result, int32) ...

&gt; Source/WebKit2/Shared/gtk/KeyedDecoder.h:2
&gt; + * Copyright (C) 2014 Igaia S.L.

Nit: 2015

&gt; Source/WebKit2/Shared/gtk/KeyedDecoder.h:35
&gt; +

Is this going/meant to be used for anything else apart from the DatabaseProcess? If not we should add the proper guards.

&gt; Source/WebKit2/Shared/gtk/KeyedEncoder.cpp:2
&gt; + * Copyright (C) 2014 Igalia S.L.

Ditto.

&gt; Source/WebKit2/Shared/gtk/KeyedEncoder.cpp:31
&gt; +

Is this going/meant to be used for anything else apart from the DatabaseProcess? If not we should add the proper guards.

&gt; Source/WebKit2/Shared/gtk/KeyedEncoder.cpp:48
&gt; +}

Same comment about the destructor full of ASSERTs.

&gt; Source/WebKit2/Shared/gtk/KeyedEncoder.h:2
&gt; + * Copyright (C) 2014 Igalia S.L.

Nit: 2015

&gt; Source/WebKit2/Shared/gtk/KeyedEncoder.h:34
&gt; +

Is this going/meant to be used for anything else apart from the DatabaseProcess? If not we should add the proper guards.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1063388</commentid>
    <comment_count>18</comment_count>
      <attachid>245132</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2015-01-22 10:30:41 -0800</bug_when>
    <thetext>Comment on attachment 245132
Rebased patch

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

&gt; Source/WTF/wtf/gobject/GRefPtr.cpp:102
&gt; +template &lt;&gt; void derefGPtr(GVariantBuilder* ptr)
&gt; +{
&gt; +    g_variant_builder_unref(ptr);
&gt; +}

Safe to call g_variant_builder_unref() without a null check on ptr, like in refGPtr() for GVariantBuilder?

&gt; Source/WebKit2/DatabaseProcess/DatabaseProcess.cpp:196
&gt; +    RefPtr&lt;DatabaseToWebProcessConnection&gt; connection = DatabaseToWebProcessConnection::create(socketPair.server);
&gt; +    m_databaseToWebProcessConnections.append(connection.release());

Can you inline the DatabaseToWebProcessConnection::create() call?

&gt; Source/WebKit2/DatabaseProcess/DatabaseProcess.cpp:199
&gt; +    IPC::Attachment clientSocket(socketPair.client);
&gt; +    parentProcessConnection()-&gt;send(Messages::DatabaseProcessProxy::DidCreateDatabaseToWebProcessConnection(clientSocket), 0);

Can you inline the IPC::Attachment construction?

&gt; Source/WebKit2/DatabaseProcess/unix/DatabaseProcessMainUnix.h:43
&gt; +#endif // DatabaseProcessMainUnix_h
&gt; +
&gt; +#endif // ENABLE(DATABASE_PROCESS)

The comments for the build guards are reversed here.

&gt;&gt; Source/WebKit2/Shared/gtk/KeyedDecoder.cpp:79
&gt;&gt; +
&gt; 
&gt; This and the following 4 decodeXXX look almost the same, I think we can create a macro with this code, the unique difference is the g_variant_get_XXX call, which can be generated by the macro using a passed in argument. So the body of those methods would be simply something like DECODE(key, result, boolean) or DECODE(key, result, int32) ...

You get a golden r+ for using templates instead of macros.

&gt; Source/WebKit2/Shared/gtk/KeyedEncoder.h:52
&gt; +    virtual void encodeBytes(const String&amp; key, const uint8_t*, size_t) override;
&gt; +    virtual void encodeBool(const String&amp; key, bool) override;
&gt; +    virtual void encodeUInt32(const String&amp; key, uint32_t) override;
&gt; +    virtual void encodeInt32(const String&amp; key, int32_t) override;
&gt; +    virtual void encodeInt64(const String&amp; key, int64_t) override;
&gt; +    virtual void encodeFloat(const String&amp; key, float) override;
&gt; +    virtual void encodeDouble(const String&amp; key, double) override;
&gt; +    virtual void encodeString(const String&amp; key, const String&amp;) override;

Same here, it might be possible to implement these through macros or templates.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1063646</commentid>
    <comment_count>19</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-01-23 02:44:16 -0800</bug_when>
    <thetext>(In reply to comment #17)
&gt; Comment on attachment 245132 [details]
&gt; Rebased patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=245132&amp;action=review
&gt; 
&gt; Great that the problems with the tests are solved.

Thanks for the review.

&gt; &gt; Source/WebKit2/DatabaseProcess/EntryPoint/unix/DatabaseProcessMain.cpp:2
&gt; &gt; + * Copyright (C) 2014 Igalia S.L.
&gt; 
&gt; Nit: 2015

Sure.

&gt; 
&gt; &gt; Source/WebKit2/Shared/gtk/KeyedDecoder.cpp:30
&gt; &gt; +
&gt; 
&gt; Is this going/meant to be used for anything else apart from the
&gt; DatabaseProcess? If not we should add the proper guards.

I don&apos;t know, but neither the WebCore base classes nor the mac implementation have DatabaseProcess guards. In any case these are GTK+ specific files and I plan to enable indexeddb by default in bug #98932, so it will be always built anyway.

&gt; &gt; Source/WebKit2/Shared/gtk/KeyedDecoder.cpp:38
&gt; &gt; +    buildDictionaryFromGVariant(variant.get(), dictionary);
&gt; 
&gt; As we do this trice, and knowing that in none of those cases we use the
&gt; dictionary for anything else, I think we can create and return the
&gt; dictionary from buildDictionaryFromGVariant (renamed to perhaps
&gt; createDictionary... or convertGVariantToDictionary). That would allow us to
&gt; remove those unneeded local variables.

Good idea.

&gt; &gt; Source/WebKit2/Shared/gtk/KeyedDecoder.cpp:47
&gt; &gt; +}
&gt; 
&gt; What about enclosing the destructor in a #if !ASSERT_DISABLED block?

Isn&apos;t ASSERT noop in non debug builds? Or do you mean not defining the destructor at all? I think I need to define the destructor, since it&apos;s virtual in the parent class.

&gt; &gt; Source/WebKit2/Shared/gtk/KeyedDecoder.cpp:79
&gt; &gt; +
&gt; 
&gt; This and the following 4 decodeXXX look almost the same, I think we can
&gt; create a macro with this code, the unique difference is the
&gt; g_variant_get_XXX call, which can be generated by the macro using a passed
&gt; in argument. So the body of those methods would be simply something like
&gt; DECODE(key, result, boolean) or DECODE(key, result, int32) ...

I&apos;ll use a template as Zan suggested.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1063647</commentid>
    <comment_count>20</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-01-23 02:47:09 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; Comment on attachment 245132 [details]
&gt; Rebased patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=245132&amp;action=review

Thanks for the review.

&gt; &gt; Source/WTF/wtf/gobject/GRefPtr.cpp:102
&gt; &gt; +template &lt;&gt; void derefGPtr(GVariantBuilder* ptr)
&gt; &gt; +{
&gt; &gt; +    g_variant_builder_unref(ptr);
&gt; &gt; +}
&gt; 
&gt; Safe to call g_variant_builder_unref() without a null check on ptr, like in
&gt; refGPtr() for GVariantBuilder?

Good catch, it&apos;s indeed needed, and I made the mistake because I copy-pasted the GVariant implementation, which means it also needs to be fixed. I&apos;ve noticed that GHashTable impl has the same issue so I&apos;ll fix both GVariant and GHashTable in a separate patch.

&gt; &gt; Source/WebKit2/DatabaseProcess/DatabaseProcess.cpp:196
&gt; &gt; +    RefPtr&lt;DatabaseToWebProcessConnection&gt; connection = DatabaseToWebProcessConnection::create(socketPair.server);
&gt; &gt; +    m_databaseToWebProcessConnections.append(connection.release());
&gt; 
&gt; Can you inline the DatabaseToWebProcessConnection::create() call?

Yes

&gt; &gt; Source/WebKit2/DatabaseProcess/DatabaseProcess.cpp:199
&gt; &gt; +    IPC::Attachment clientSocket(socketPair.client);
&gt; &gt; +    parentProcessConnection()-&gt;send(Messages::DatabaseProcessProxy::DidCreateDatabaseToWebProcessConnection(clientSocket), 0);
&gt; 
&gt; Can you inline the IPC::Attachment construction?

Yes

&gt; &gt; Source/WebKit2/DatabaseProcess/unix/DatabaseProcessMainUnix.h:43
&gt; &gt; +#endif // DatabaseProcessMainUnix_h
&gt; &gt; +
&gt; &gt; +#endif // ENABLE(DATABASE_PROCESS)
&gt; 
&gt; The comments for the build guards are reversed here.

Oops

&gt; &gt;&gt; Source/WebKit2/Shared/gtk/KeyedDecoder.cpp:79
&gt; &gt;&gt; +
&gt; &gt; 
&gt; &gt; This and the following 4 decodeXXX look almost the same, I think we can create a macro with this code, the unique difference is the g_variant_get_XXX call, which can be generated by the macro using a passed in argument. So the body of those methods would be simply something like DECODE(key, result, boolean) or DECODE(key, result, int32) ...
&gt; 
&gt; You get a golden r+ for using templates instead of macros.

Let&apos;s try

&gt; &gt; Source/WebKit2/Shared/gtk/KeyedEncoder.h:52
&gt; &gt; +    virtual void encodeBytes(const String&amp; key, const uint8_t*, size_t) override;
&gt; &gt; +    virtual void encodeBool(const String&amp; key, bool) override;
&gt; &gt; +    virtual void encodeUInt32(const String&amp; key, uint32_t) override;
&gt; &gt; +    virtual void encodeInt32(const String&amp; key, int32_t) override;
&gt; &gt; +    virtual void encodeInt64(const String&amp; key, int64_t) override;
&gt; &gt; +    virtual void encodeFloat(const String&amp; key, float) override;
&gt; &gt; +    virtual void encodeDouble(const String&amp; key, double) override;
&gt; &gt; +    virtual void encodeString(const String&amp; key, const String&amp;) override;
&gt; 
&gt; Same here, it might be possible to implement these through macros or
&gt; templates.

In the case of the encoder, the implementation of those methods is already a single line, what would be the benefit of a template?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1063648</commentid>
    <comment_count>21</comment_count>
      <attachid>245219</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-01-23 02:53:20 -0800</bug_when>
    <thetext>Created attachment 245219
Updated patch

Addressed review comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1063649</commentid>
    <comment_count>22</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-01-23 02:56:14 -0800</bug_when>
    <thetext>Attachment 245219 did not pass style-queue:


ERROR: Source/WebKit2/CMakeLists.txt:484:  Alphabetical sorting problem. &quot;Shared/Network/CustomProtocols/CustomProtocolManager.messages.in&quot; should be before &quot;Shared/Plugins/NPObjectMessageReceiver.messages.in&quot;.  [list/order] [5]
ERROR: Source/WebKit2/DatabaseProcess/gtk/DatabaseProcessMainGtk.cpp:32:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 2 in 27 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>1063663</commentid>
    <comment_count>23</comment_count>
      <attachid>245219</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2015-01-23 06:13:39 -0800</bug_when>
    <thetext>Comment on attachment 245219
Updated patch

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

Awesome job!

&gt; Source/WebCore/ChangeLog:10
&gt; +        WebCore::fileSystemRepresentation() for the databae filename,

Typo: databae

&gt; Source/WebCore/ChangeLog:11
&gt; +        otherwise sqlite3_open() fails when the filename contains &quot;%2E&quot;.

Is there any test for this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1063664</commentid>
    <comment_count>24</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-01-23 06:22:38 -0800</bug_when>
    <thetext>(In reply to comment #23)
&gt; Comment on attachment 245219 [details]
&gt; Updated patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=245219&amp;action=review
&gt; 
&gt; Awesome job!

Thanks

&gt; &gt; Source/WebCore/ChangeLog:10
&gt; &gt; +        WebCore::fileSystemRepresentation() for the databae filename,
&gt; 
&gt; Typo: databae

Oops

&gt; &gt; Source/WebCore/ChangeLog:11
&gt; &gt; +        otherwise sqlite3_open() fails when the filename contains &quot;%2E&quot;.
&gt; 
&gt; Is there any test for this?

Yes, I noticed because some test failed, but I don&apos;t remember which ones.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1063665</commentid>
    <comment_count>25</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-01-23 06:30:27 -0800</bug_when>
    <thetext>Committed r179007: &lt;http://trac.webkit.org/changeset/179007&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>243039</attachid>
            <date>2014-12-10 10:01:55 -0800</date>
            <delta_ts>2014-12-10 10:15:12 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>wk2-database-process.diff</filename>
            <type>text/plain</type>
            <size>45881</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCA3ZDAwODQ4Li5kZGJjMDMz
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAK
KzIwMTQtMTItMTAgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgor
CisgICAgICAgIFtHVEtdIEFkZCBpbml0aWFsIGRhdGFiYXNlIHByb2Nlc3Mgc3VwcG9ydAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM5NDkxCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTb3VyY2UvY21h
a2UvT3B0aW9uc0dUSy5jbWFrZTogU2V0IFdlYktpdDJfRGF0YWJhc2VQcm9jZXNzX09VVFBVVF9O
QU1FLgorCiAyMDE0LTEyLTA3ICBBbGJlcnRvIEdhcmNpYSAgPGJlcnRvQGlnYWxpYS5jb20+CiAK
ICAgICAgICAgW0dUS10gV2ViS2l0IGhhcyBhIG5ldyByZXF1aXJlZCBkZXBlbmRlbmN5IG9uIEdu
dVRMUwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZwppbmRleCBjZGFmODRjLi5mZWQ5Njg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDE0LTEy
LTEwICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KKworICAgICAg
ICBbR1RLXSBBZGQgaW5pdGlhbCBkYXRhYmFzZSBwcm9jZXNzIHN1cHBvcnQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzOTQ5MQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBzdXBwb3J0IGZvciB1c2lu
ZyBHUmVmUHRyIHdpdGggR1ZhcmlhbnRCdWlsZGVyLgorCisgICAgICAgICogd3RmL2dvYmplY3Qv
R1JlZlB0ci5jcHA6CisgICAgICAgIChXVEY6OnJlZkdQdHIpOgorICAgICAgICAoV1RGOjpkZXJl
ZkdQdHIpOgorICAgICAgICAqIHd0Zi9nb2JqZWN0L0dSZWZQdHIuaDoKKyAgICAgICAgKiB3dGYv
Z29iamVjdC9HVHlwZWRlZnMuaDoKKwogMjAxNC0xMi0wNyAgQW5kcmVhcyBLbGluZyAgPGFrbGlu
Z0BhcHBsZS5jb20+CiAKICAgICAgICAgVXNlIG1vcmUgUGFzc1JlZiBpbiBBdG9taWNTdHJpbmcu
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dSZWZQdHIuY3BwIGIvU291cmNl
L1dURi93dGYvZ29iamVjdC9HUmVmUHRyLmNwcAppbmRleCAxM2RlMTY2Li4xYWEzY2IwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dSZWZQdHIuY3BwCisrKyBiL1NvdXJjZS9X
VEYvd3RmL2dvYmplY3QvR1JlZlB0ci5jcHAKQEAgLTg5LDYgKzg5LDE4IEBAIHRlbXBsYXRlIDw+
IHZvaWQgZGVyZWZHUHRyKEdWYXJpYW50KiBwdHIpCiAgICAgZ192YXJpYW50X3VucmVmKHB0cik7
CiB9CiAKK3RlbXBsYXRlIDw+IEdWYXJpYW50QnVpbGRlciogcmVmR1B0cihHVmFyaWFudEJ1aWxk
ZXIqIHB0cikKK3sKKyAgICBpZiAocHRyKQorICAgICAgICBnX3ZhcmlhbnRfYnVpbGRlcl9yZWYo
cHRyKTsKKyAgICByZXR1cm4gcHRyOworfQorCit0ZW1wbGF0ZSA8PiB2b2lkIGRlcmVmR1B0cihH
VmFyaWFudEJ1aWxkZXIqIHB0cikKK3sKKyAgICBnX3ZhcmlhbnRfYnVpbGRlcl91bnJlZihwdHIp
OworfQorCiB0ZW1wbGF0ZSA8PiBHU291cmNlKiByZWZHUHRyKEdTb3VyY2UqIHB0cikKIHsKICAg
ICBpZiAocHRyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvZ29iamVjdC9HUmVmUHRyLmgg
Yi9Tb3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dSZWZQdHIuaAppbmRleCAyMTZjMTQ1Li5iZWU2OTc1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dSZWZQdHIuaAorKysgYi9Tb3Vy
Y2UvV1RGL3d0Zi9nb2JqZWN0L0dSZWZQdHIuaApAQCAtMjI1LDYgKzIyNSw4IEBAIHRlbXBsYXRl
IDw+IFdURl9FWFBPUlRfUFJJVkFURSBHTWFpbkxvb3AqIHJlZkdQdHIoR01haW5Mb29wKiBwdHIp
OwogdGVtcGxhdGUgPD4gV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZGVyZWZHUHRyKEdNYWluTG9v
cCogcHRyKTsKIHRlbXBsYXRlIDw+IFdURl9FWFBPUlRfUFJJVkFURSBHVmFyaWFudCogcmVmR1B0
cihHVmFyaWFudCogcHRyKTsKIHRlbXBsYXRlIDw+IFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGRl
cmVmR1B0cihHVmFyaWFudCogcHRyKTsKK3RlbXBsYXRlIDw+IFdURl9FWFBPUlRfUFJJVkFURSBH
VmFyaWFudEJ1aWxkZXIqIHJlZkdQdHIoR1ZhcmlhbnRCdWlsZGVyKiBwdHIpOwordGVtcGxhdGUg
PD4gV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZGVyZWZHUHRyKEdWYXJpYW50QnVpbGRlciogcHRy
KTsKIHRlbXBsYXRlIDw+IFdURl9FWFBPUlRfUFJJVkFURSBHU291cmNlKiByZWZHUHRyKEdTb3Vy
Y2UqIHB0cik7CiB0ZW1wbGF0ZSA8PiBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBkZXJlZkdQdHIo
R1NvdXJjZSogcHRyKTsKIHRlbXBsYXRlIDw+IFdURl9FWFBPUlRfUFJJVkFURSBHUHRyQXJyYXkq
IHJlZkdQdHIoR1B0ckFycmF5Kik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9nb2JqZWN0
L0dUeXBlZGVmcy5oIGIvU291cmNlL1dURi93dGYvZ29iamVjdC9HVHlwZWRlZnMuaAppbmRleCA5
OTkwNzkyLi4zMjI5OGQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dUeXBl
ZGVmcy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL2dvYmplY3QvR1R5cGVkZWZzLmgKQEAgLTYwLDYg
KzYwLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgX0dTb2NrZXRDbGllbnQgR1NvY2tldENsaWVudDsKIHR5
cGVkZWYgc3RydWN0IF9HU29ja2V0Q29ubmVjdGlvbiBHU29ja2V0Q29ubmVjdGlvbjsKIHR5cGVk
ZWYgc3RydWN0IF9HU291cmNlIEdTb3VyY2U7CiB0eXBlZGVmIHN0cnVjdCBfR1ZhcmlhbnQgR1Zh
cmlhbnQ7Cit0eXBlZGVmIHN0cnVjdCBfR1ZhcmlhbnRCdWlsZGVyIEdWYXJpYW50QnVpbGRlcjsK
IHR5cGVkZWYgdW5pb24gX0dka0V2ZW50IEdka0V2ZW50OwogdHlwZWRlZiBzdHJ1Y3QgX0dUaW1l
ciBHVGltZXI7CiB0eXBlZGVmIHN0cnVjdCBfR0tleUZpbGUgR0tleUZpbGU7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5k
ZXggZjg0Mjc4NC4uMDY5YjE3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDE0LTEy
LTEwICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KKworICAgICAg
ICBbR1RLXSBBZGQgaW5pdGlhbCBkYXRhYmFzZSBwcm9jZXNzIHN1cHBvcnQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzOTQ5MQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcGxhdGZvcm0vc3FsL1NRTGl0
ZUZpbGVTeXN0ZW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlRmlsZVN5c3RlbTo6b3Bl
bkRhdGFiYXNlKTogVXNlCisgICAgICAgIFdlYkNvcmU6OmZpbGVTeXN0ZW1SZXByZXNlbnRhdGlv
bigpIGZvciB0aGUgZGF0YWJhZSBmaWxlbmFtZSwKKyAgICAgICAgb3RoZXJ3aXNlIHNxbGl0ZTNf
b3BlbigpIGZhaWxzIHdoZW4gdGhlIGZpbGVuYW1lIGNvbnRhaW5zICIlMkUiLgorCiAyMDE0LTEy
LTA3ICBHd2FuZyBZb29uIEh3YW5nICA8eW9vbkBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtUZXh0
dXJlTWFwcGVyXSBOb3JtYWxpemUgcGF0dGVybiB0cmFuc2Zvcm0gZm9yIHBhdHRlcm4gY29tcG9z
aXRpbmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVGaWxl
U3lzdGVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVt
LmNwcAppbmRleCBlOGNmYjBlLi4zYmMwNTBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vc3FsL1NRTGl0ZUZpbGVTeXN0ZW0uY3BwCkBAIC01MCw3ICs1MCw3IEBAIFNRTGl0ZUZp
bGVTeXN0ZW06OlNRTGl0ZUZpbGVTeXN0ZW0oKQogCiBpbnQgU1FMaXRlRmlsZVN5c3RlbTo6b3Bl
bkRhdGFiYXNlKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIHNxbGl0ZTMqKiBkYXRhYmFzZSwgYm9v
bCkKIHsKLSAgICByZXR1cm4gc3FsaXRlM19vcGVuKGZpbGVuYW1lLnV0ZjgoKS5kYXRhKCksIGRh
dGFiYXNlKTsKKyAgICByZXR1cm4gc3FsaXRlM19vcGVuKGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlv
bihmaWxlbmFtZSkuZGF0YSgpLCBkYXRhYmFzZSk7CiB9CiAKIFN0cmluZyBTUUxpdGVGaWxlU3lz
dGVtOjpnZXRGaWxlTmFtZUZvck5ld0RhdGFiYXNlKGNvbnN0IFN0cmluZyYgZGJEaXIsIGNvbnN0
IFN0cmluZyYsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DTWFrZUxpc3RzLnR4dCBiL1Nv
dXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0CmluZGV4IDEwZjE3ZTMuLmE3NmQ3MDMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQy
L0NNYWtlTGlzdHMudHh0CkBAIC0xLDYgKzEsOSBAQAogc2V0KFdlYktpdDJfSU5DTFVERV9ESVJF
Q1RPUklFUwogICAgICIke0pBVkFTQ1JJUFRDT1JFX0RJUn0vbGxpbnQiCiAgICAgIiR7V0VCS0lU
Ml9ESVJ9IgorICAgICIke1dFQktJVDJfRElSfS9EYXRhYmFzZVByb2Nlc3MiCisgICAgIiR7V0VC
S0lUMl9ESVJ9L0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIiCisgICAgIiR7V0VCS0lUMl9ESVJ9
L0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvc3FsaXRlIgogICAgICIke1dFQktJVDJfRElSfS9O
ZXR3b3JrUHJvY2VzcyIKICAgICAiJHtXRUJLSVQyX0RJUn0vTmV0d29ya1Byb2Nlc3MvRmlsZUFQ
SSIKICAgICAiJHtXRUJLSVQyX0RJUn0vUGxhdGZvcm0iCkBAIC0xMSw2ICsxNCw3IEBAIHNldChX
ZWJLaXQyX0lOQ0xVREVfRElSRUNUT1JJRVMKICAgICAiJHtXRUJLSVQyX0RJUn0vU2hhcmVkL0FQ
SS9jIgogICAgICIke1dFQktJVDJfRElSfS9TaGFyZWQvQXV0aGVudGljYXRpb24iCiAgICAgIiR7
V0VCS0lUMl9ESVJ9L1NoYXJlZC9Db3JlSVBDU3VwcG9ydCIKKyAgICAiJHtXRUJLSVQyX0RJUn0v
U2hhcmVkL0RhdGFiYXNlcyIKICAgICAiJHtXRUJLSVQyX0RJUn0vU2hhcmVkL0RhdGFiYXNlcy9J
bmRleGVkREIiCiAgICAgIiR7V0VCS0lUMl9ESVJ9L1NoYXJlZC9Eb3dubG9hZHMiCiAgICAgIiR7
V0VCS0lUMl9ESVJ9L1NoYXJlZC9GaWxlQVBJIgpAQCAtMjQsNiArMjgsNyBAQCBzZXQoV2ViS2l0
Ml9JTkNMVURFX0RJUkVDVE9SSUVTCiAgICAgIiR7V0VCS0lUMl9ESVJ9L1VJUHJvY2Vzcy9BUEkv
QyIKICAgICAiJHtXRUJLSVQyX0RJUn0vVUlQcm9jZXNzL0FQSS9jcHAiCiAgICAgIiR7V0VCS0lU
Ml9ESVJ9L1VJUHJvY2Vzcy9BdXRoZW50aWNhdGlvbiIKKyAgICAiJHtXRUJLSVQyX0RJUn0vVUlQ
cm9jZXNzL0RhdGFiYXNlcyIKICAgICAiJHtXRUJLSVQyX0RJUn0vVUlQcm9jZXNzL0Rvd25sb2Fk
cyIKICAgICAiJHtXRUJLSVQyX0RJUn0vVUlQcm9jZXNzL0luc3BlY3RvclNlcnZlciIKICAgICAi
JHtXRUJLSVQyX0RJUn0vVUlQcm9jZXNzL0xhdW5jaGVyIgpAQCAtMTQ3LDYgKzE1MiwxNiBAQCBp
ZiAoV1RGX1VTRV8zRF9HUkFQSElDUykKIGVuZGlmICgpCiAKIHNldChXZWJLaXQyX1NPVVJDRVMK
KyAgICBEYXRhYmFzZVByb2Nlc3MvRGF0YWJhc2VUb1dlYlByb2Nlc3NDb25uZWN0aW9uLmNwcAor
ICAgIERhdGFiYXNlUHJvY2Vzcy9EYXRhYmFzZVByb2Nlc3MuY3BwCisgICAgRGF0YWJhc2VQcm9j
ZXNzL0luZGV4ZWREQi9EYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0aW9uLmNwcAorICAgIERhdGFi
YXNlUHJvY2Vzcy9JbmRleGVkREIvSURCU2VyaWFsaXphdGlvbi5jcHAKKyAgICBEYXRhYmFzZVBy
b2Nlc3MvSW5kZXhlZERCL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcAorICAgIERhdGFiYXNlUHJvY2Vz
cy9JbmRleGVkREIvVW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyLmNwcAorICAgIERhdGFiYXNl
UHJvY2Vzcy9JbmRleGVkREIvc3FsaXRlL1NRTGl0ZUlEQkN1cnNvci5jcHAKKyAgICBEYXRhYmFz
ZVByb2Nlc3MvSW5kZXhlZERCL3NxbGl0ZS9TUUxpdGVJREJUcmFuc2FjdGlvbi5jcHAKKyAgICBE
YXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL3NxbGl0ZS9VbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdT
dG9yZVNRTGl0ZS5jcHAKKwogICAgIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzLmNwcAogICAgIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAogICAg
IE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzUGxhdGZvcm1TdHJhdGVnaWVzLmNwcApAQCAt
MTg2LDYgKzIwMSw3IEBAIHNldChXZWJLaXQyX1NPVVJDRVMKICAgICBTaGFyZWQvQVBJVVJMUmVx
dWVzdC5jcHAKICAgICBTaGFyZWQvQVBJVVJMUmVzcG9uc2UuY3BwCiAgICAgU2hhcmVkL0FjdGl2
aXR5QXNzZXJ0aW9uLmNwcAorICAgIFNoYXJlZC9Bc3luY1JlcXVlc3QuY3BwCiAgICAgU2hhcmVk
L0Jsb2JEYXRhRmlsZVJlZmVyZW5jZVdpdGhTYW5kYm94RXh0ZW5zaW9uLmNwcAogICAgIFNoYXJl
ZC9DYWNoZU1vZGVsLmNwcAogICAgIFNoYXJlZC9DaGlsZFByb2Nlc3MuY3BwCkBAIC0yMTgsNiAr
MjM0LDcgQEAgc2V0KFdlYktpdDJfU09VUkNFUwogICAgIFNoYXJlZC9XZWJDb250ZXh0TWVudUl0
ZW0uY3BwCiAgICAgU2hhcmVkL1dlYkNvbnRleHRNZW51SXRlbURhdGEuY3BwCiAgICAgU2hhcmVk
L1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAKKyAgICBTaGFyZWQvV2ViQ3Jvc3NUaHJlYWRDb3Bp
ZXIuY3BwCiAgICAgU2hhcmVkL1dlYkV2ZW50LmNwcAogICAgIFNoYXJlZC9XZWJFdmVudENvbnZl
cnNpb24uY3BwCiAgICAgU2hhcmVkL1dlYkdlb2xvY2F0aW9uUG9zaXRpb24uY3BwCkBAIC0yNjcs
NiArMjg0LDkgQEAgc2V0KFdlYktpdDJfU09VUkNFUwogCiAgICAgU2hhcmVkL0F1dGhlbnRpY2F0
aW9uL0F1dGhlbnRpY2F0aW9uTWFuYWdlci5jcHAKIAorICAgIFNoYXJlZC9EYXRhYmFzZXMvRGF0
YWJhc2VQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcAorICAgIFNoYXJlZC9EYXRhYmFzZXMv
SW5kZXhlZERCL0lEQlV0aWxpdGllcy5jcHAKKwogICAgIFNoYXJlZC9Eb3dubG9hZHMvRG93bmxv
YWQuY3BwCiAgICAgU2hhcmVkL0Rvd25sb2Fkcy9Eb3dubG9hZEF1dGhlbnRpY2F0aW9uQ2xpZW50
LmNwcAogICAgIFNoYXJlZC9Eb3dubG9hZHMvRG93bmxvYWRNYW5hZ2VyLmNwcApAQCAtNDAxLDYg
KzQyMSw4IEBAIHNldChXZWJLaXQyX1NPVVJDRVMKICAgICBVSVByb2Nlc3MvQXV0aGVudGljYXRp
b24vV2ViQ3JlZGVudGlhbC5jcHAKICAgICBVSVByb2Nlc3MvQXV0aGVudGljYXRpb24vV2ViUHJv
dGVjdGlvblNwYWNlLmNwcAogCisgICAgVUlQcm9jZXNzL0RhdGFiYXNlcy9EYXRhYmFzZVByb2Nl
c3NQcm94eS5jcHAKKwogICAgIFVJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eS5jcHAK
ICAgICBVSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuY3BwCiAKQEAgLTQ0Myw2
ICs0NjUsOCBAQCBzZXQoV2ViS2l0Ml9TT1VSQ0VTCiAgICAgV2ViUHJvY2Vzcy9Db29raWVzL1dl
YkNvb2tpZU1hbmFnZXIuY3BwCiAKICAgICBXZWJQcm9jZXNzL0RhdGFiYXNlcy9JbmRleGVkREIv
V2ViSURCRmFjdG9yeUJhY2tlbmQuY3BwCisgICAgV2ViUHJvY2Vzcy9EYXRhYmFzZXMvSW5kZXhl
ZERCL1dlYklEQlNlcnZlckNvbm5lY3Rpb24uY3BwCisgICAgV2ViUHJvY2Vzcy9EYXRhYmFzZXMv
V2ViVG9EYXRhYmFzZVByb2Nlc3NDb25uZWN0aW9uLmNwcAogCiAgICAgV2ViUHJvY2Vzcy9GaWxl
QVBJL0Jsb2JSZWdpc3RyeVByb3h5LmNwcAogCkBAIC01NjksNiArNTkzLDEwIEBAIHNldChXZWJL
aXQyX1NPVVJDRVMKICkKIAogc2V0KFdlYktpdDJfTUVTU0FHRVNfSU5fRklMRVMKKyAgICBEYXRh
YmFzZVByb2Nlc3MvRGF0YWJhc2VUb1dlYlByb2Nlc3NDb25uZWN0aW9uLm1lc3NhZ2VzLmluCisg
ICAgRGF0YWJhc2VQcm9jZXNzL0RhdGFiYXNlUHJvY2Vzcy5tZXNzYWdlcy5pbgorICAgIERhdGFi
YXNlUHJvY2Vzcy9JbmRleGVkREIvRGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbi5tZXNzYWdl
cy5pbgorCiAgICAgTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3Mu
bWVzc2FnZXMuaW4KICAgICBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5tZXNzYWdlcy5p
bgogICAgIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5tZXNzYWdlcy5pbgpA
QCAtNjAzLDYgKzYzMSw4IEBAIHNldChXZWJLaXQyX01FU1NBR0VTX0lOX0ZJTEVTCiAgICAgVUlQ
cm9jZXNzL1dlYlJlc291cmNlQ2FjaGVNYW5hZ2VyUHJveHkubWVzc2FnZXMuaW4KICAgICBVSVBy
b2Nlc3MvV2ViVmlicmF0aW9uUHJveHkubWVzc2FnZXMuaW4KIAorICAgIFVJUHJvY2Vzcy9EYXRh
YmFzZXMvRGF0YWJhc2VQcm9jZXNzUHJveHkubWVzc2FnZXMuaW4KKwogICAgIFVJUHJvY2Vzcy9E
b3dubG9hZHMvRG93bmxvYWRQcm94eS5tZXNzYWdlcy5pbgogCiAgICAgVUlQcm9jZXNzL05ldHdv
cmsvTmV0d29ya1Byb2Nlc3NQcm94eS5tZXNzYWdlcy5pbgpAQCAtNjIzLDYgKzY1Myw4IEBAIHNl
dChXZWJLaXQyX01FU1NBR0VTX0lOX0ZJTEVTCiAKICAgICBXZWJQcm9jZXNzL0Nvb2tpZXMvV2Vi
Q29va2llTWFuYWdlci5tZXNzYWdlcy5pbgogCisgICAgV2ViUHJvY2Vzcy9EYXRhYmFzZXMvSW5k
ZXhlZERCL1dlYklEQlNlcnZlckNvbm5lY3Rpb24ubWVzc2FnZXMuaW4KKwogICAgIFdlYlByb2Nl
c3MvRnVsbFNjcmVlbi9XZWJGdWxsU2NyZWVuTWFuYWdlci5tZXNzYWdlcy5pbgogCiAgICAgV2Vi
UHJvY2Vzcy9HZW9sb2NhdGlvbi9XZWJHZW9sb2NhdGlvbk1hbmFnZXIubWVzc2FnZXMuaW4KQEAg
LTY2Nyw2ICs2OTksMTAgQEAgc2V0KE5ldHdvcmtQcm9jZXNzX0xJQlJBUklFUwogICAgIFdlYktp
dDIKICkKIAorc2V0KERhdGFiYXNlUHJvY2Vzc19MSUJSQVJJRVMKKyAgV2ViS2l0MgorKQorCiBz
ZXQoV2ViS2l0Ml9MSUJSQVJJRVMKICAgICBKYXZhU2NyaXB0Q29yZQogICAgIFdlYkNvcmUKQEAg
LTc0OSw2ICs3ODUsMTkgQEAgaWYgKEVOQUJMRV9QTFVHSU5fUFJPQ0VTUykKICAgICBlbmRpZiAo
KQogZW5kaWYgKCkKIAoraWYgKEVOQUJMRV9EQVRBQkFTRV9QUk9DRVNTKQorICAgIGFkZF9kZWZp
bml0aW9ucygtREVOQUJMRV9EQVRBQkFTRV9QUk9DRVNTPTEpCisgICAgYWRkX2V4ZWN1dGFibGUo
RGF0YWJhc2VQcm9jZXNzICR7RGF0YWJhc2VQcm9jZXNzX1NPVVJDRVN9KQorICAgIGFkZF93ZWJr
aXQyX3ByZWZpeF9oZWFkZXIoRGF0YWJhc2VQcm9jZXNzKQorICAgIHRhcmdldF9saW5rX2xpYnJh
cmllcyhEYXRhYmFzZVByb2Nlc3MgJHtEYXRhYmFzZVByb2Nlc3NfTElCUkFSSUVTfSkKKyAgICBz
ZXRfdGFyZ2V0X3Byb3BlcnRpZXMoRGF0YWJhc2VQcm9jZXNzIFBST1BFUlRJRVMgRk9MREVSICJX
ZWJLaXQiKQorICAgIGluc3RhbGwoVEFSR0VUUyBEYXRhYmFzZVByb2Nlc3MgREVTVElOQVRJT04g
IiR7TElCRVhFQ19JTlNUQUxMX0RJUn0iKQorCisgICAgaWYgKFdlYktpdDJfRGF0YWJhc2VQcm9j
ZXNzX09VVFBVVF9OQU1FKQorICAgICAgICBzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoRGF0YWJhc2VQ
cm9jZXNzIFBST1BFUlRJRVMgT1VUUFVUX05BTUUgJHtXZWJLaXQyX0RhdGFiYXNlUHJvY2Vzc19P
VVRQVVRfTkFNRX0pCisgICAgZW5kaWYgKCkKK2VuZGlmICgpCisKIFBPUFVMQVRFX0xJQlJBUllf
VkVSU0lPTihXRUJLSVQyKQogc2V0X3RhcmdldF9wcm9wZXJ0aWVzKFdlYktpdDIgUFJPUEVSVElF
UyBWRVJTSU9OICR7V0VCS0lUMl9WRVJTSU9OfSBTT1ZFUlNJT04gJHtXRUJLSVQyX1ZFUlNJT05f
TUFKT1J9KQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggMzM0NTQ2MC4uMTMwNjViNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDc2IEBACisyMDE0LTEyLTEwICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFA
aWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBBZGQgaW5pdGlhbCBkYXRhYmFzZSBwcm9jZXNz
IHN1cHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEzOTQ5MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEFkZCBpbml0aWFsIHN1cHBvcnQgZm9yIERhdGFiYXNlUHJvY2VzcywgZGlzYWJsZWQgYnkgZGVm
YXVsdCBmb3IKKyAgICAgICAgbm93LgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6IEFkZCBy
ZXF1aXJlZCBmaWxlcyB0byBjb21waWxhdGlvbi4KKyAgICAgICAgKiBEYXRhYmFzZVByb2Nlc3Mv
RGF0YWJhc2VQcm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RGF0YWJhc2VQcm9jZXNzOjpj
cmVhdGVEYXRhYmFzZVRvV2ViUHJvY2Vzc0Nvbm5lY3Rpb24pOgorICAgICAgICBBZGQgdGhlIHVu
aXggZG9tYWluIHNvY2tldHMgaW1wbGVtZW50YXRpb24uCisgICAgICAgICogRGF0YWJhc2VQcm9j
ZXNzL0VudHJ5UG9pbnQvdW5peC9EYXRhYmFzZVByb2Nlc3NNYWluLmNwcDogQWRkZWQuCisgICAg
ICAgIChtYWluKToKKyAgICAgICAgKiBEYXRhYmFzZVByb2Nlc3MvZ3RrL0RhdGFiYXNlUHJvY2Vz
c01haW5HdGsuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6RGF0YWJhc2VQcm9jZXNzTWFp
blVuaXgpOgorICAgICAgICAqIERhdGFiYXNlUHJvY2Vzcy91bml4L0RhdGFiYXNlUHJvY2Vzc01h
aW5Vbml4Lmg6IEFkZGVkLgorICAgICAgICAqIFBsYXRmb3JtR1RLLmNtYWtlOiBBZGQgcmVxdWly
ZWQgZmlsZXMgdG8gY29tcGlsYXRpb24uCisgICAgICAgICogU2hhcmVkL1Byb2Nlc3NFeGVjdXRh
YmxlUGF0aC5oOgorICAgICAgICAqIFNoYXJlZC9ndGsvS2V5ZWREZWNvZGVyLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJLaXQ6OktleWVkRGVjb2Rlcjo6S2V5ZWREZWNvZGVyKToKKyAgICAgICAg
KFdlYktpdDo6S2V5ZWREZWNvZGVyOjp+S2V5ZWREZWNvZGVyKToKKyAgICAgICAgKFdlYktpdDo6
S2V5ZWREZWNvZGVyOjpidWlsZERpY3Rpb25hcnlGcm9tR1ZhcmlhbnQpOgorICAgICAgICAoV2Vi
S2l0OjpLZXllZERlY29kZXI6OmRlY29kZUJ5dGVzKToKKyAgICAgICAgKFdlYktpdDo6S2V5ZWRE
ZWNvZGVyOjpkZWNvZGVCb29sKToKKyAgICAgICAgKFdlYktpdDo6S2V5ZWREZWNvZGVyOjpkZWNv
ZGVVSW50MzIpOgorICAgICAgICAoV2ViS2l0OjpLZXllZERlY29kZXI6OmRlY29kZUludDMyKToK
KyAgICAgICAgKFdlYktpdDo6S2V5ZWREZWNvZGVyOjpkZWNvZGVJbnQ2NCk6CisgICAgICAgIChX
ZWJLaXQ6OktleWVkRGVjb2Rlcjo6ZGVjb2RlRmxvYXQpOgorICAgICAgICAoV2ViS2l0OjpLZXll
ZERlY29kZXI6OmRlY29kZURvdWJsZSk6CisgICAgICAgIChXZWJLaXQ6OktleWVkRGVjb2Rlcjo6
ZGVjb2RlU3RyaW5nKToKKyAgICAgICAgKFdlYktpdDo6S2V5ZWREZWNvZGVyOjpiZWdpbk9iamVj
dCk6CisgICAgICAgIChXZWJLaXQ6OktleWVkRGVjb2Rlcjo6ZW5kT2JqZWN0KToKKyAgICAgICAg
KFdlYktpdDo6S2V5ZWREZWNvZGVyOjpiZWdpbkFycmF5KToKKyAgICAgICAgKFdlYktpdDo6S2V5
ZWREZWNvZGVyOjpiZWdpbkFycmF5RWxlbWVudCk6CisgICAgICAgIChXZWJLaXQ6OktleWVkRGVj
b2Rlcjo6ZW5kQXJyYXlFbGVtZW50KToKKyAgICAgICAgKFdlYktpdDo6S2V5ZWREZWNvZGVyOjpl
bmRBcnJheSk6CisgICAgICAgICogU2hhcmVkL2d0ay9LZXllZERlY29kZXIuaDogQWRkZWQuCisg
ICAgICAgICogU2hhcmVkL2d0ay9LZXllZEVuY29kZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YktpdDo6S2V5ZWRFbmNvZGVyOjpLZXllZEVuY29kZXIpOgorICAgICAgICAoV2ViS2l0OjpLZXll
ZEVuY29kZXI6On5LZXllZEVuY29kZXIpOgorICAgICAgICAoV2ViS2l0OjpLZXllZEVuY29kZXI6
OmVuY29kZUJ5dGVzKToKKyAgICAgICAgKFdlYktpdDo6S2V5ZWRFbmNvZGVyOjplbmNvZGVCb29s
KToKKyAgICAgICAgKFdlYktpdDo6S2V5ZWRFbmNvZGVyOjplbmNvZGVVSW50MzIpOgorICAgICAg
ICAoV2ViS2l0OjpLZXllZEVuY29kZXI6OmVuY29kZUludDMyKToKKyAgICAgICAgKFdlYktpdDo6
S2V5ZWRFbmNvZGVyOjplbmNvZGVJbnQ2NCk6CisgICAgICAgIChXZWJLaXQ6OktleWVkRW5jb2Rl
cjo6ZW5jb2RlRmxvYXQpOgorICAgICAgICAoV2ViS2l0OjpLZXllZEVuY29kZXI6OmVuY29kZURv
dWJsZSk6CisgICAgICAgIChXZWJLaXQ6OktleWVkRW5jb2Rlcjo6ZW5jb2RlU3RyaW5nKToKKyAg
ICAgICAgKFdlYktpdDo6S2V5ZWRFbmNvZGVyOjpiZWdpbk9iamVjdCk6CisgICAgICAgIChXZWJL
aXQ6OktleWVkRW5jb2Rlcjo6ZW5kT2JqZWN0KToKKyAgICAgICAgKFdlYktpdDo6S2V5ZWRFbmNv
ZGVyOjpiZWdpbkFycmF5KToKKyAgICAgICAgKFdlYktpdDo6S2V5ZWRFbmNvZGVyOjpiZWdpbkFy
cmF5RWxlbWVudCk6CisgICAgICAgIChXZWJLaXQ6OktleWVkRW5jb2Rlcjo6ZW5kQXJyYXlFbGVt
ZW50KToKKyAgICAgICAgKFdlYktpdDo6S2V5ZWRFbmNvZGVyOjplbmRBcnJheSk6CisgICAgICAg
IChXZWJLaXQ6OktleWVkRW5jb2Rlcjo6ZmluaXNoRW5jb2RpbmcpOgorICAgICAgICAqIFNoYXJl
ZC9ndGsvS2V5ZWRFbmNvZGVyLmg6IEFkZGVkLgorICAgICAgICAqIFNoYXJlZC9ndGsvUHJvY2Vz
c0V4ZWN1dGFibGVQYXRoR3RrLmNwcDoKKyAgICAgICAgKFdlYktpdDo6ZXhlY3V0YWJsZVBhdGhP
ZkRhdGFiYXNlUHJvY2Vzcyk6CisgICAgICAgICogVUlQcm9jZXNzL0RhdGFiYXNlcy9EYXRhYmFz
ZVByb2Nlc3NQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRhdGFiYXNlUHJvY2Vzc1Byb3h5
OjpkaWRDcmVhdGVEYXRhYmFzZVRvV2ViUHJvY2Vzc0Nvbm5lY3Rpb24pOgorICAgICAgICBBZGQg
dGhlIHVuaXggZG9tYWluIHNvY2tldHMgaW1wbGVtZW50YXRpb24uCisgICAgICAgICogVUlQcm9j
ZXNzL0xhdW5jaGVyL2d0ay9Qcm9jZXNzTGF1bmNoZXJHdGsuY3BwOgorICAgICAgICAoV2ViS2l0
OjpQcm9jZXNzTGF1bmNoZXI6OmxhdW5jaFByb2Nlc3MpOiBIYW5kbGUgdGhlCisgICAgICAgIERh
dGFiYXNlUHJvY2VzcyB0b28uCisgICAgICAgICogVUlQcm9jZXNzL2d0ay9XZWJDb250ZXh0R3Rr
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGV4dDo6cGxhdGZvcm1EZWZhdWx0SW5kZXhl
ZERCRGF0YWJhc2VEaXJlY3RvcnkpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUHJvY2Vzcy5j
cHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OmVuc3VyZVdlYlRvRGF0YWJhc2VQcm9j
ZXNzQ29ubmVjdGlvbik6IEFkZAorICAgICAgICB0aGUgdW5peCBkb21haW4gc29ja2V0cyBpbXBs
ZW1lbnRhdGlvbi4KKwogMjAxNC0xMi0wNyAgR3dhbmcgWW9vbiBId2FuZyAgPHlvb25AaWdhbGlh
LmNvbT4KIAogICAgICAgICBbQ29vcmRpbmF0ZWRHcmFwaGljc10gQ2hhbmdlIHRoZSBuYW1lc3Bh
Y2Ugb2YgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUgYW5kIENvb3JkaW5hdGVkR3JhcGhpY3NTY2Vu
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0RhdGFiYXNlUHJv
Y2Vzcy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvRGF0YWJhc2VQcm9jZXNz
LmNwcAppbmRleCA1M2IxZTkyLi40MzZlMTNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9E
YXRhYmFzZVByb2Nlc3MvRGF0YWJhc2VQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9E
YXRhYmFzZVByb2Nlc3MvRGF0YWJhc2VQcm9jZXNzLmNwcApAQCAtMzksNiArMzksNyBAQAogI2lu
Y2x1ZGUgIldlYk9yaWdpbkRhdGFNYW5hZ2VyTWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJPcmln
aW5EYXRhTWFuYWdlclByb3h5TWVzc2FnZXMuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0ZpbGVTeXN0
ZW0uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9UZXh0RW5jb2RpbmcuaD4KICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogCkBAIC0x
ODYsNiArMTg3LDE0IEBAIHZvaWQgRGF0YWJhc2VQcm9jZXNzOjpjcmVhdGVEYXRhYmFzZVRvV2Vi
UHJvY2Vzc0Nvbm5lY3Rpb24oKQogCiAgICAgSVBDOjpBdHRhY2htZW50IGNsaWVudFBvcnQobGlz
dGVuaW5nUG9ydCwgTUFDSF9NU0dfVFlQRV9NQUtFX1NFTkQpOwogICAgIHBhcmVudFByb2Nlc3ND
b25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OkRhdGFiYXNlUHJvY2Vzc1Byb3h5OjpEaWRDcmVh
dGVEYXRhYmFzZVRvV2ViUHJvY2Vzc0Nvbm5lY3Rpb24oY2xpZW50UG9ydCksIDApOworI2VsaWYg
VVNFKFVOSVhfRE9NQUlOX1NPQ0tFVFMpCisgICAgSVBDOjpDb25uZWN0aW9uOjpTb2NrZXRQYWly
IHNvY2tldFBhaXIgPSBJUEM6OkNvbm5lY3Rpb246OmNyZWF0ZVBsYXRmb3JtQ29ubmVjdGlvbigp
OworCisgICAgUmVmUHRyPERhdGFiYXNlVG9XZWJQcm9jZXNzQ29ubmVjdGlvbj4gY29ubmVjdGlv
biA9IERhdGFiYXNlVG9XZWJQcm9jZXNzQ29ubmVjdGlvbjo6Y3JlYXRlKHNvY2tldFBhaXIuc2Vy
dmVyKTsKKyAgICBtX2RhdGFiYXNlVG9XZWJQcm9jZXNzQ29ubmVjdGlvbnMuYXBwZW5kKGNvbm5l
Y3Rpb24ucmVsZWFzZSgpKTsKKworICAgIElQQzo6QXR0YWNobWVudCBjbGllbnRTb2NrZXQoc29j
a2V0UGFpci5jbGllbnQpOworICAgIHBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVz
c2FnZXM6OkRhdGFiYXNlUHJvY2Vzc1Byb3h5OjpEaWRDcmVhdGVEYXRhYmFzZVRvV2ViUHJvY2Vz
c0Nvbm5lY3Rpb24oY2xpZW50U29ja2V0KSwgMCk7CiAjZWxzZQogICAgIG5vdEltcGxlbWVudGVk
KCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9F
bnRyeVBvaW50L3VuaXgvRGF0YWJhc2VQcm9jZXNzTWFpbi5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9E
YXRhYmFzZVByb2Nlc3MvRW50cnlQb2ludC91bml4L0RhdGFiYXNlUHJvY2Vzc01haW4uY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyY2Q0NjQKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvRW50cnlQb2ludC91bml4L0RhdGFi
YXNlUHJvY2Vzc01haW4uY3BwCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgIkRhdGFiYXNlUHJvY2Vzc01h
aW5Vbml4LmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKK2ludCBtYWluKGludCBhcmdj
LCBjaGFyKiogYXJndikKK3sKKyAgICByZXR1cm4gRGF0YWJhc2VQcm9jZXNzTWFpblVuaXgoYXJn
YywgYXJndik7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3Mv
Z3RrL0RhdGFiYXNlUHJvY2Vzc01haW5HdGsuY3BwIGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQ
cm9jZXNzL2d0ay9EYXRhYmFzZVByb2Nlc3NNYWluR3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi42NDNjNWNhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dDIvRGF0YWJhc2VQcm9jZXNzL2d0ay9EYXRhYmFzZVByb2Nlc3NNYWluR3RrLmNwcApAQCAtMCww
ICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IElnYWxpYSBTLkwuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJEYXRhYmFzZVByb2Nlc3NNYWluVW5p
eC5oIgorCisjaWYgRU5BQkxFKERBVEFCQVNFX1BST0NFU1MpCisKKyNpbmNsdWRlICJDaGlsZFBy
b2Nlc3NNYWluLmgiCisjaW5jbHVkZSAiRGF0YWJhc2VQcm9jZXNzLmgiCisjaW5jbHVkZSA8Z3Rr
L2d0ay5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7
CisKK2NsYXNzIERhdGFiYXNlUHJvY2Vzc01haW4gZmluYWw6IHB1YmxpYyBDaGlsZFByb2Nlc3NN
YWluQmFzZSB7CitwdWJsaWM6CisgICAgYm9vbCBwbGF0Zm9ybUluaXRpYWxpemUoKSBvdmVycmlk
ZQorICAgIHsKKyAgICAgICAgZ3RrX2luaXQobnVsbHB0ciwgbnVsbHB0cik7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KK307CisKK2ludCBEYXRhYmFzZVByb2Nlc3NNYWluVW5peChpbnQg
YXJnYywgY2hhcioqIGFyZ3YpCit7CisgICAgcmV0dXJuIENoaWxkUHJvY2Vzc01haW48RGF0YWJh
c2VQcm9jZXNzLCBEYXRhYmFzZVByb2Nlc3NNYWluPihhcmdjLCBhcmd2KTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoREFUQUJBU0VfUFJPQ0VTUykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy91bml4L0RhdGFiYXNlUHJv
Y2Vzc01haW5Vbml4LmggYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvdW5peC9EYXRh
YmFzZVByb2Nlc3NNYWluVW5peC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LmMwZDdiZjQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nl
c3MvdW5peC9EYXRhYmFzZVByb2Nlc3NNYWluVW5peC5oCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBEYXRh
YmFzZVByb2Nlc3NNYWluVW5peF9oCisjZGVmaW5lIERhdGFiYXNlUHJvY2Vzc01haW5Vbml4X2gK
KworI2lmIEVOQUJMRShEQVRBQkFTRV9QUk9DRVNTKQorCisjaW5jbHVkZSA8V2ViS2l0L1dLQmFz
ZS5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworZXh0ZXJuICJDIiB7CitXS19FWFBPUlQgaW50
IERhdGFiYXNlUHJvY2Vzc01haW5Vbml4KGludCBhcmdjLCBjaGFyKiogYXJndik7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRGF0YWJhc2VQcm9jZXNzTWFpblVuaXhf
aAorCisjZW5kaWYgLy8gRU5BQkxFKERBVEFCQVNFX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZSBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RL
LmNtYWtlCmluZGV4IDI4MTk3ZGQuLmMzOGQ4N2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1BsYXRmb3JtR1RLLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtl
CkBAIC0xNSw2ICsxNSw4IEBAIGFkZF9kZWZpbml0aW9ucygtRExJQkRJUj0iJHtMSUJfSU5TVEFM
TF9ESVJ9IikKIHNldChXZWJLaXQyX1VTRV9QUkVGSVhfSEVBREVSIE9OKQogCiBsaXN0KEFQUEVO
RCBXZWJLaXQyX1NPVVJDRVMKKyAgICBEYXRhYmFzZVByb2Nlc3MvZ3RrL0RhdGFiYXNlUHJvY2Vz
c01haW5HdGsuY3BwCisKICAgICBOZXR3b3JrUHJvY2Vzcy9ndGsvTmV0d29ya1Byb2Nlc3NNYWlu
R3RrLmNwcAogCiAgICAgTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrUHJvY2Vzc1NvdXAuY3Bw
CkBAIC00OCw2ICs1MCw4IEBAIGxpc3QoQVBQRU5EIFdlYktpdDJfU09VUkNFUwogICAgIFNoYXJl
ZC9jYWlyby9TaGFyZWFibGVCaXRtYXBDYWlyby5jcHAKIAogICAgIFNoYXJlZC9ndGsvQXJndW1l
bnRDb2RlcnNHdGsuY3BwCisgICAgU2hhcmVkL2d0ay9LZXllZEVuY29kZXIuY3BwCisgICAgU2hh
cmVkL2d0ay9LZXllZERlY29kZXIuY3BwCiAgICAgU2hhcmVkL2d0ay9OYXRpdmVXZWJLZXlib2Fy
ZEV2ZW50R3RrLmNwcAogICAgIFNoYXJlZC9ndGsvTmF0aXZlV2ViTW91c2VFdmVudEd0ay5jcHAK
ICAgICBTaGFyZWQvZ3RrL05hdGl2ZVdlYlRvdWNoRXZlbnRHdGsuY3BwCkBAIC03MCw2ICs3NCw4
IEBAIGxpc3QoQVBQRU5EIFdlYktpdDJfU09VUkNFUwogCiAgICAgU2hhcmVkL3VuaXgvQ2hpbGRQ
cm9jZXNzTWFpbi5jcHAKIAorICAgIFVJUHJvY2Vzcy9EYXRhYmFzZXMvZ3RrL0RhdGFiYXNlUHJv
Y2Vzc1Byb3h5R3RrLmNwcAorCiAgICAgVUlQcm9jZXNzL0RlZmF1bHRVbmRvQ29udHJvbGxlci5j
cHAKICAgICBVSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eUltcGwuY3BwCiAKQEAgLTQxNiw2ICs0
MjIsNyBAQCBsaXN0KEFQUEVORCBXZWJLaXQyX0lOQ0xVREVfRElSRUNUT1JJRVMKICAgICAiJHtX
RUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUiCiAgICAgIiR7V0VCQ09SRV9E
SVJ9L3BsYXRmb3JtL25ldHdvcmsvc291cCIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0v
dGV4dC9lbmNoYW50IgorICAgICIke1dFQktJVDJfRElSfS9EYXRhYmFzZVByb2Nlc3MvdW5peCIK
ICAgICAiJHtXRUJLSVQyX0RJUn0vTmV0d29ya1Byb2Nlc3MvZ3RrIgogICAgICIke1dFQktJVDJf
RElSfS9OZXR3b3JrUHJvY2Vzcy91bml4IgogICAgICIke1dFQktJVDJfRElSfS9TaGFyZWQvQVBJ
L2MvZ3RrIgpAQCAtNDY3LDYgKzQ3NCwxMCBAQCBsaXN0KEFQUEVORCBOZXR3b3JrUHJvY2Vzc19T
T1VSQ0VTCiAgICAgTmV0d29ya1Byb2Nlc3MvRW50cnlQb2ludC91bml4L05ldHdvcmtQcm9jZXNz
TWFpbi5jcHAKICkKIAorbGlzdChBUFBFTkQgRGF0YWJhc2VQcm9jZXNzX1NPVVJDRVMKKyAgICBE
YXRhYmFzZVByb2Nlc3MvRW50cnlQb2ludC91bml4L0RhdGFiYXNlUHJvY2Vzc01haW4uY3BwCisp
CisKIGZpbGUoV1JJVEUgJHtDTUFLRV9CSU5BUllfRElSfS90ZXN0X2F0b21pYy5jcHAKICAgICAg
IiNpbmNsdWRlIDxhdG9taWM+XG4iCiAgICAgICJpbnQgbWFpbigpIHsgc3RkOjphdG9taWM8aW50
NjRfdD4gaSgwKTsgaSsrOyByZXR1cm4gMDsgfVxuIikKQEAgLTg5NSw2ICs5MDYsNyBAQCBhZGRf
Y3VzdG9tX2NvbW1hbmQoCiAgICAgICAgICAgICAke1dlYktpdDJfU09VUkNFU30KICAgICAgICAg
ICAgICR7V2ViUHJvY2Vzc19TT1VSQ0VTfQogICAgICAgICAgICAgJHtOZXR3b3JrUHJvY2Vzc19T
T1VSQ0VTfQorICAgICAgICAgICAgJHtEYXRhYmFzZVByb2Nlc3NfU09VUkNFU30KICAgICAgICAg
ICAgICR7UGx1Z2luUHJvY2Vzc0dUSzJfU09VUkNFU30KICAgICAgICAgICAgICR7UGx1Z2luUHJv
Y2Vzc19TT1VSQ0VTfQogICAgICAgICAgICAgJHtXZWJLaXQyX0hFQURFUlN9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvUHJvY2Vzc0V4ZWN1dGFibGVQYXRoLmggYi9Tb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvUHJvY2Vzc0V4ZWN1dGFibGVQYXRoLmgKaW5kZXggZDc4ZWJjZC4uNGZm
ZDExYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1Byb2Nlc3NFeGVjdXRhYmxl
UGF0aC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Qcm9jZXNzRXhlY3V0YWJsZVBhdGgu
aApAQCAtMzUsNyArMzUsOSBAQCBTdHJpbmcgZXhlY3V0YWJsZVBhdGhPZlBsdWdpblByb2Nlc3Mo
KTsKICNpZiBFTkFCTEUoTkVUV09SS19QUk9DRVNTKQogU3RyaW5nIGV4ZWN1dGFibGVQYXRoT2ZO
ZXR3b3JrUHJvY2VzcygpOwogI2VuZGlmCi0KKyNpZiBFTkFCTEUoREFUQUJBU0VfUFJPQ0VTUykK
K1N0cmluZyBleGVjdXRhYmxlUGF0aE9mRGF0YWJhc2VQcm9jZXNzKCk7CisjZW5kaWYKIH0KIAog
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL0tleWVkRGVjb2Rl
ci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL0tleWVkRGVjb2Rlci5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjcyMWJmYwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvS2V5ZWREZWNvZGVyLmNwcApAQCAtMCwwICsxLDE5
MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJLZXllZERl
Y29kZXIuaCIKKworI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdl
YktpdCB7CisKK0tleWVkRGVjb2Rlcjo6S2V5ZWREZWNvZGVyKGNvbnN0IHVpbnQ4X3QqIGRhdGEs
IHNpemVfdCBzaXplKQoreworICAgIEdSZWZQdHI8R0J5dGVzPiBieXRlcyA9IGFkb3B0R1JlZihn
X2J5dGVzX25ldyhkYXRhLCBzaXplKSk7CisgICAgR1JlZlB0cjxHVmFyaWFudD4gdmFyaWFudCA9
IGdfdmFyaWFudF9uZXdfZnJvbV9ieXRlcyhHX1ZBUklBTlRfVFlQRSgiYXtzdn0iKSwgYnl0ZXMu
Z2V0KCksIFRSVUUpOworICAgIEhhc2hNYXA8U3RyaW5nLCBHUmVmUHRyPEdWYXJpYW50Pj4gZGlj
dGlvbmFyeTsKKyAgICBidWlsZERpY3Rpb25hcnlGcm9tR1ZhcmlhbnQodmFyaWFudC5nZXQoKSwg
ZGljdGlvbmFyeSk7CisgICAgbV9kaWN0aW9uYXJ5U3RhY2suYXBwZW5kKFdURjo6bW92ZShkaWN0
aW9uYXJ5KSk7Cit9CisKK0tleWVkRGVjb2Rlcjo6fktleWVkRGVjb2RlcigpCit7CisgICAgQVNT
RVJUKG1fZGljdGlvbmFyeVN0YWNrLnNpemUoKSA9PSAxKTsKKyAgICBBU1NFUlQobV9hcnJheVN0
YWNrLmlzRW1wdHkoKSk7CisgICAgQVNTRVJUKG1fYXJyYXlJbmRleFN0YWNrLmlzRW1wdHkoKSk7
Cit9CisKK3ZvaWQgS2V5ZWREZWNvZGVyOjpidWlsZERpY3Rpb25hcnlGcm9tR1ZhcmlhbnQoR1Zh
cmlhbnQqIHZhcmlhbnQsIEhhc2hNYXA8U3RyaW5nLCBHUmVmUHRyPEdWYXJpYW50Pj4mIGRpY3Rp
b25hcnkpCit7CisgICAgR1ZhcmlhbnRJdGVyIGl0ZXI7CisgICAgZ192YXJpYW50X2l0ZXJfaW5p
dCgmaXRlciwgdmFyaWFudCk7CisgICAgY29uc3QgY2hhcioga2V5OworICAgIEdWYXJpYW50KiB2
YWx1ZTsKKyAgICB3aGlsZSAoZ192YXJpYW50X2l0ZXJfbG9vcCAoJml0ZXIsICJ7JnN2fSIsICZr
ZXksICZ2YWx1ZSkpCisgICAgICAgIGRpY3Rpb25hcnkuc2V0KFN0cmluZzo6ZnJvbVVURjgoa2V5
KSwgdmFsdWUpOworfQorCitib29sIEtleWVkRGVjb2Rlcjo6ZGVjb2RlQnl0ZXMoY29uc3QgU3Ry
aW5nJiBrZXksIGNvbnN0IHVpbnQ4X3QqJiBieXRlcywgc2l6ZV90JiBzaXplKQoreworICAgIEdS
ZWZQdHI8R1ZhcmlhbnQ+IHZhbHVlID0gbV9kaWN0aW9uYXJ5U3RhY2subGFzdCgpLmdldChrZXkp
OworICAgIGlmICghdmFsdWUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHNpemUgPSBn
X3ZhcmlhbnRfZ2V0X3NpemUodmFsdWUuZ2V0KCkpOworICAgIGJ5dGVzID0gc3RhdGljX2Nhc3Q8
Y29uc3QgdWludDhfdCo+KGdfdmFyaWFudF9nZXRfZGF0YSh2YWx1ZS5nZXQoKSkpOworICAgIHJl
dHVybiB0cnVlOworfQorCitib29sIEtleWVkRGVjb2Rlcjo6ZGVjb2RlQm9vbChjb25zdCBTdHJp
bmcmIGtleSwgYm9vbCYgcmVzdWx0KQoreworICAgIEdSZWZQdHI8R1ZhcmlhbnQ+IHZhbHVlID0g
bV9kaWN0aW9uYXJ5U3RhY2subGFzdCgpLmdldChrZXkpOworICAgIGlmICghdmFsdWUpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIHJlc3VsdCA9IGdfdmFyaWFudF9nZXRfYm9vbGVhbih2
YWx1ZS5nZXQoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgS2V5ZWREZWNvZGVyOjpk
ZWNvZGVVSW50MzIoY29uc3QgU3RyaW5nJiBrZXksIHVpbnQzMl90JiByZXN1bHQpCit7CisgICAg
R1JlZlB0cjxHVmFyaWFudD4gdmFsdWUgPSBtX2RpY3Rpb25hcnlTdGFjay5sYXN0KCkuZ2V0KGtl
eSk7CisgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmVzdWx0
ID0gZ192YXJpYW50X2dldF91aW50MzIodmFsdWUuZ2V0KCkpOworICAgIHJldHVybiB0cnVlOwor
fQorCitib29sIEtleWVkRGVjb2Rlcjo6ZGVjb2RlSW50MzIoY29uc3QgU3RyaW5nJiBrZXksIGlu
dDMyX3QmIHJlc3VsdCkKK3sKKyAgICBHUmVmUHRyPEdWYXJpYW50PiB2YWx1ZSA9IG1fZGljdGlv
bmFyeVN0YWNrLmxhc3QoKS5nZXQoa2V5KTsKKyAgICBpZiAoIXZhbHVlKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICByZXN1bHQgPSBnX3ZhcmlhbnRfZ2V0X2ludDMyKHZhbHVlLmdldCgp
KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBLZXllZERlY29kZXI6OmRlY29kZUludDY0
KGNvbnN0IFN0cmluZyYga2V5LCBpbnQ2NF90JiByZXN1bHQpCit7CisgICAgR1JlZlB0cjxHVmFy
aWFudD4gdmFsdWUgPSBtX2RpY3Rpb25hcnlTdGFjay5sYXN0KCkuZ2V0KGtleSk7CisgICAgaWYg
KCF2YWx1ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmVzdWx0ID0gZ192YXJpYW50
X2dldF9pbnQ2NCh2YWx1ZS5nZXQoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgS2V5
ZWREZWNvZGVyOjpkZWNvZGVGbG9hdChjb25zdCBTdHJpbmcmIGtleSwgZmxvYXQmIHJlc3VsdCkK
K3sKKyAgICBHUmVmUHRyPEdWYXJpYW50PiB2YWx1ZSA9IG1fZGljdGlvbmFyeVN0YWNrLmxhc3Qo
KS5nZXQoa2V5KTsKKyAgICBpZiAoIXZhbHVlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICByZXN1bHQgPSBnX3ZhcmlhbnRfZ2V0X2RvdWJsZSh2YWx1ZS5nZXQoKSk7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK2Jvb2wgS2V5ZWREZWNvZGVyOjpkZWNvZGVEb3VibGUoY29uc3QgU3RyaW5n
JiBrZXksIGRvdWJsZSYgcmVzdWx0KQoreworICAgIEdSZWZQdHI8R1ZhcmlhbnQ+IHZhbHVlID0g
bV9kaWN0aW9uYXJ5U3RhY2subGFzdCgpLmdldChrZXkpOworICAgIGlmICghdmFsdWUpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIHJlc3VsdCA9IGdfdmFyaWFudF9nZXRfZG91YmxlKHZh
bHVlLmdldCgpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBLZXllZERlY29kZXI6OmRl
Y29kZVN0cmluZyhjb25zdCBTdHJpbmcmIGtleSwgU3RyaW5nJiByZXN1bHQpCit7CisgICAgR1Jl
ZlB0cjxHVmFyaWFudD4gdmFsdWUgPSBtX2RpY3Rpb25hcnlTdGFjay5sYXN0KCkuZ2V0KGtleSk7
CisgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmVzdWx0ID0g
U3RyaW5nOjpmcm9tVVRGOChnX3ZhcmlhbnRfZ2V0X3N0cmluZyh2YWx1ZS5nZXQoKSwgbnVsbHB0
cikpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEtleWVkRGVjb2Rlcjo6YmVnaW5PYmpl
Y3QoY29uc3QgU3RyaW5nJiBrZXkpCit7CisgICAgR1JlZlB0cjxHVmFyaWFudD4gdmFsdWUgPSBt
X2RpY3Rpb25hcnlTdGFjay5sYXN0KCkuZ2V0KGtleSk7CisgICAgaWYgKCF2YWx1ZSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgSGFzaE1hcDxTdHJpbmcsIEdSZWZQdHI8R1ZhcmlhbnQ+
PiBkaWN0aW9uYXJ5OworICAgIGJ1aWxkRGljdGlvbmFyeUZyb21HVmFyaWFudCh2YWx1ZS5nZXQo
KSwgZGljdGlvbmFyeSk7CisgICAgbV9kaWN0aW9uYXJ5U3RhY2suYXBwZW5kKFdURjo6bW92ZShk
aWN0aW9uYXJ5KSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgS2V5ZWREZWNvZGVyOjpl
bmRPYmplY3QoKQoreworICAgIG1fZGljdGlvbmFyeVN0YWNrLnJlbW92ZUxhc3QoKTsKK30KKwor
Ym9vbCBLZXllZERlY29kZXI6OmJlZ2luQXJyYXkoY29uc3QgU3RyaW5nJiBrZXkpCit7CisgICAg
R1JlZlB0cjxHVmFyaWFudD4gdmFsdWUgPSBtX2RpY3Rpb25hcnlTdGFjay5sYXN0KCkuZ2V0KGtl
eSk7CisgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgbV9hcnJh
eVN0YWNrLmFwcGVuZCh2YWx1ZS5nZXQoKSk7CisgICAgbV9hcnJheUluZGV4U3RhY2suYXBwZW5k
KDApOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEtleWVkRGVjb2Rlcjo6YmVnaW5BcnJh
eUVsZW1lbnQoKQoreworICAgIGlmIChtX2FycmF5SW5kZXhTdGFjay5sYXN0KCkgPj0gZ192YXJp
YW50X25fY2hpbGRyZW4obV9hcnJheVN0YWNrLmxhc3QoKSkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIEdSZWZQdHI8R1ZhcmlhbnQ+IHZhcmlhbnQgPSBhZG9wdEdSZWYoZ192YXJpYW50
X2dldF9jaGlsZF92YWx1ZShtX2FycmF5U3RhY2subGFzdCgpLCBtX2FycmF5SW5kZXhTdGFjay5s
YXN0KCkrKykpOworICAgIEhhc2hNYXA8U3RyaW5nLCBHUmVmUHRyPEdWYXJpYW50Pj4gZGljdGlv
bmFyeTsKKyAgICBidWlsZERpY3Rpb25hcnlGcm9tR1ZhcmlhbnQodmFyaWFudC5nZXQoKSwgZGlj
dGlvbmFyeSk7CisgICAgbV9kaWN0aW9uYXJ5U3RhY2suYXBwZW5kKFdURjo6bW92ZShkaWN0aW9u
YXJ5KSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgS2V5ZWREZWNvZGVyOjplbmRBcnJh
eUVsZW1lbnQoKQoreworICAgIG1fZGljdGlvbmFyeVN0YWNrLnJlbW92ZUxhc3QoKTsKK30KKwor
dm9pZCBLZXllZERlY29kZXI6OmVuZEFycmF5KCkKK3sKKyAgICBtX2FycmF5U3RhY2sucmVtb3Zl
TGFzdCgpOworICAgIG1fYXJyYXlJbmRleFN0YWNrLnJlbW92ZUxhc3QoKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL0tl
eWVkRGVjb2Rlci5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9LZXllZERlY29kZXIuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjQ4NmI5Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9LZXllZERlY29kZXIuaApAQCAtMCwwICsx
LDcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBLZXllZERlY29kZXJfaAorI2RlZmluZSBLZXll
ZERlY29kZXJfaAorCisjaW5jbHVkZSA8V2ViQ29yZS9LZXllZENvZGluZy5oPgorI2luY2x1ZGUg
PGdsaWIuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0
L0dSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBLZXll
ZERlY29kZXIgZmluYWwgOiBwdWJsaWMgV2ViQ29yZTo6S2V5ZWREZWNvZGVyIHsKK3B1YmxpYzoK
KyAgICBLZXllZERlY29kZXIoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90KTsKKyAgICB2aXJ0
dWFsIH5LZXllZERlY29kZXIoKSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIGJv
b2wgZGVjb2RlQnl0ZXMoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IHVpbnQ4X3QqJiwgc2l6ZV90
Jikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIGRlY29kZUJvb2woY29uc3QgU3RyaW5nJiBr
ZXksIGJvb2wmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgZGVjb2RlVUludDMyKGNvbnN0
IFN0cmluZyYga2V5LCB1aW50MzJfdCYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBkZWNv
ZGVJbnQzMihjb25zdCBTdHJpbmcmIGtleSwgaW50MzJfdCYpIG92ZXJyaWRlOworICAgIHZpcnR1
YWwgYm9vbCBkZWNvZGVJbnQ2NChjb25zdCBTdHJpbmcmIGtleSwgaW50NjRfdCYpIG92ZXJyaWRl
OworICAgIHZpcnR1YWwgYm9vbCBkZWNvZGVGbG9hdChjb25zdCBTdHJpbmcmIGtleSwgZmxvYXQm
KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgZGVjb2RlRG91YmxlKGNvbnN0IFN0cmluZyYg
a2V5LCBkb3VibGUmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgZGVjb2RlU3RyaW5nKGNv
bnN0IFN0cmluZyYga2V5LCBTdHJpbmcmKSBvdmVycmlkZTsKKworICAgIHZpcnR1YWwgYm9vbCBi
ZWdpbk9iamVjdChjb25zdCBTdHJpbmcmIGtleSkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lk
IGVuZE9iamVjdCgpIG92ZXJyaWRlOworCisgICAgdmlydHVhbCBib29sIGJlZ2luQXJyYXkoY29u
c3QgU3RyaW5nJiBrZXkpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBiZWdpbkFycmF5RWxl
bWVudCgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBlbmRBcnJheUVsZW1lbnQoKSBvdmVy
cmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZW5kQXJyYXkoKSBvdmVycmlkZTsKKworICAgIHZvaWQg
YnVpbGREaWN0aW9uYXJ5RnJvbUdWYXJpYW50KEdWYXJpYW50KiwgSGFzaE1hcDxTdHJpbmcsIEdS
ZWZQdHI8R1ZhcmlhbnQ+PiYpOworCisgICAgVmVjdG9yPEhhc2hNYXA8U3RyaW5nLCBHUmVmUHRy
PEdWYXJpYW50Pj4+IG1fZGljdGlvbmFyeVN0YWNrOworICAgIFZlY3RvcjxHVmFyaWFudCosIDE2
PiBtX2FycmF5U3RhY2s7CisgICAgVmVjdG9yPHVuc2lnbmVkPiBtX2FycmF5SW5kZXhTdGFjazsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gS2V5ZWREZWNvZGVyX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvS2V5ZWRFbmNvZGVyLmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvS2V5ZWRFbmNvZGVyLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTgwMmE4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdDIvU2hhcmVkL2d0ay9LZXllZEVuY29kZXIuY3BwCkBAIC0wLDAgKzEsMTM1IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIktleWVkRW5jb2Rlci5o
IgorCisjaW5jbHVkZSA8V2ViQ29yZS9TaGFyZWRCdWZmZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2Vi
S2l0IHsKKworS2V5ZWRFbmNvZGVyOjpLZXllZEVuY29kZXIoKQoreworICAgIGdfdmFyaWFudF9i
dWlsZGVyX2luaXQoJm1fdmFyaWFudEJ1aWxkZXIsIEdfVkFSSUFOVF9UWVBFKCJhe3N2fSIpKTsK
KyAgICBtX3ZhcmlhbnRCdWlsZGVyU3RhY2suYXBwZW5kKCZtX3ZhcmlhbnRCdWlsZGVyKTsKK30K
KworS2V5ZWRFbmNvZGVyOjp+S2V5ZWRFbmNvZGVyKCkKK3sKKyAgICBBU1NFUlQobV92YXJpYW50
QnVpbGRlclN0YWNrLnNpemUoKSA9PSAxKTsKKyAgICBBU1NFUlQobV92YXJpYW50QnVpbGRlclN0
YWNrLmxhc3QoKSA9PSAmbV92YXJpYW50QnVpbGRlcik7CisgICAgQVNTRVJUKG1fYXJyYXlTdGFj
ay5pc0VtcHR5KCkpOworICAgIEFTU0VSVChtX29iamVjdFN0YWNrLmlzRW1wdHkoKSk7Cit9CisK
K3ZvaWQgS2V5ZWRFbmNvZGVyOjplbmNvZGVCeXRlcyhjb25zdCBTdHJpbmcmIGtleSwgY29uc3Qg
dWludDhfdCogYnl0ZXMsIHNpemVfdCBzaXplKQoreworICAgIEdSZWZQdHI8R0J5dGVzPiBnQnl0
ZXMgPSBhZG9wdEdSZWYoZ19ieXRlc19uZXdfc3RhdGljKGJ5dGVzLCBzaXplKSk7CisgICAgZ192
YXJpYW50X2J1aWxkZXJfYWRkKG1fdmFyaWFudEJ1aWxkZXJTdGFjay5sYXN0KCksICJ7c3Z9Iiwg
a2V5LnV0ZjgoKS5kYXRhKCksIGdfdmFyaWFudF9uZXdfZnJvbV9ieXRlcyhHX1ZBUklBTlRfVFlQ
RSgiYXkiKSwgZ0J5dGVzLmdldCgpLCBUUlVFKSk7Cit9CisKK3ZvaWQgS2V5ZWRFbmNvZGVyOjpl
bmNvZGVCb29sKGNvbnN0IFN0cmluZyYga2V5LCBib29sIHZhbHVlKQoreworICAgIGdfdmFyaWFu
dF9idWlsZGVyX2FkZChtX3ZhcmlhbnRCdWlsZGVyU3RhY2subGFzdCgpLCAie3N2fSIsIGtleS51
dGY4KCkuZGF0YSgpLCBnX3ZhcmlhbnRfbmV3X2Jvb2xlYW4odmFsdWUpKTsKK30KKwordm9pZCBL
ZXllZEVuY29kZXI6OmVuY29kZVVJbnQzMihjb25zdCBTdHJpbmcmIGtleSwgdWludDMyX3QgdmFs
dWUpCit7CisgICAgZ192YXJpYW50X2J1aWxkZXJfYWRkKG1fdmFyaWFudEJ1aWxkZXJTdGFjay5s
YXN0KCksICJ7c3Z9Iiwga2V5LnV0ZjgoKS5kYXRhKCksIGdfdmFyaWFudF9uZXdfdWludDMyKHZh
bHVlKSk7Cit9CisKK3ZvaWQgS2V5ZWRFbmNvZGVyOjplbmNvZGVJbnQzMihjb25zdCBTdHJpbmcm
IGtleSwgaW50MzJfdCB2YWx1ZSkKK3sKKyAgICBnX3ZhcmlhbnRfYnVpbGRlcl9hZGQobV92YXJp
YW50QnVpbGRlclN0YWNrLmxhc3QoKSwgIntzdn0iLCBrZXkudXRmOCgpLmRhdGEoKSwgZ192YXJp
YW50X25ld19pbnQzMih2YWx1ZSkpOworfQorCit2b2lkIEtleWVkRW5jb2Rlcjo6ZW5jb2RlSW50
NjQoY29uc3QgU3RyaW5nJiBrZXksIGludDY0X3QgdmFsdWUpCit7CisgICAgZ192YXJpYW50X2J1
aWxkZXJfYWRkKG1fdmFyaWFudEJ1aWxkZXJTdGFjay5sYXN0KCksICJ7c3Z9Iiwga2V5LnV0Zjgo
KS5kYXRhKCksIGdfdmFyaWFudF9uZXdfaW50NjQodmFsdWUpKTsKK30KKwordm9pZCBLZXllZEVu
Y29kZXI6OmVuY29kZUZsb2F0KGNvbnN0IFN0cmluZyYga2V5LCBmbG9hdCB2YWx1ZSkKK3sKKyAg
ICBlbmNvZGVEb3VibGUoa2V5LCB2YWx1ZSk7Cit9CisKK3ZvaWQgS2V5ZWRFbmNvZGVyOjplbmNv
ZGVEb3VibGUoY29uc3QgU3RyaW5nJiBrZXksIGRvdWJsZSB2YWx1ZSkKK3sKKyAgICBnX3Zhcmlh
bnRfYnVpbGRlcl9hZGQobV92YXJpYW50QnVpbGRlclN0YWNrLmxhc3QoKSwgIntzdn0iLCBrZXku
dXRmOCgpLmRhdGEoKSwgZ192YXJpYW50X25ld19kb3VibGUodmFsdWUpKTsKK30KKwordm9pZCBL
ZXllZEVuY29kZXI6OmVuY29kZVN0cmluZyhjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5n
JiB2YWx1ZSkKK3sKKyAgICBnX3ZhcmlhbnRfYnVpbGRlcl9hZGQobV92YXJpYW50QnVpbGRlclN0
YWNrLmxhc3QoKSwgIntzdn0iLCBrZXkudXRmOCgpLmRhdGEoKSwgZ192YXJpYW50X25ld19zdHJp
bmcodmFsdWUudXRmOCgpLmRhdGEoKSkpOworfQorCit2b2lkIEtleWVkRW5jb2Rlcjo6YmVnaW5P
YmplY3QoY29uc3QgU3RyaW5nJiBrZXkpCit7CisgICAgR1JlZlB0cjxHVmFyaWFudEJ1aWxkZXI+
IGJ1aWxkZXIgPSBhZG9wdEdSZWYoZ192YXJpYW50X2J1aWxkZXJfbmV3KEdfVkFSSUFOVF9UWVBF
KCJhYXtzdn0iKSkpOworICAgIG1fb2JqZWN0U3RhY2suYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKGtl
eSwgYnVpbGRlcikpOworICAgIG1fdmFyaWFudEJ1aWxkZXJTdGFjay5hcHBlbmQoYnVpbGRlci5n
ZXQoKSk7Cit9CisKK3ZvaWQgS2V5ZWRFbmNvZGVyOjplbmRPYmplY3QoKQoreworICAgIEdWYXJp
YW50QnVpbGRlciogYnVpbGRlciA9IG1fdmFyaWFudEJ1aWxkZXJTdGFjay50YWtlTGFzdCgpOwor
ICAgIGdfdmFyaWFudF9idWlsZGVyX2FkZChtX3ZhcmlhbnRCdWlsZGVyU3RhY2subGFzdCgpLCAi
e3N2fSIsIG1fb2JqZWN0U3RhY2subGFzdCgpLmZpcnN0LnV0ZjgoKS5kYXRhKCksIGdfdmFyaWFu
dF9idWlsZGVyX2VuZChidWlsZGVyKSk7CisgICAgbV9vYmplY3RTdGFjay5yZW1vdmVMYXN0KCk7
Cit9CisKK3ZvaWQgS2V5ZWRFbmNvZGVyOjpiZWdpbkFycmF5KGNvbnN0IFN0cmluZyYga2V5KQor
eworICAgIG1fYXJyYXlTdGFjay5hcHBlbmQoc3RkOjptYWtlX3BhaXIoa2V5LCBhZG9wdEdSZWYo
Z192YXJpYW50X2J1aWxkZXJfbmV3KEdfVkFSSUFOVF9UWVBFKCJhYXtzdn0iKSkpKSk7Cit9CisK
K3ZvaWQgS2V5ZWRFbmNvZGVyOjpiZWdpbkFycmF5RWxlbWVudCgpCit7CisgICAgbV92YXJpYW50
QnVpbGRlclN0YWNrLmFwcGVuZChnX3ZhcmlhbnRfYnVpbGRlcl9uZXcoR19WQVJJQU5UX1RZUEUo
ImF7c3Z9IikpKTsKK30KKwordm9pZCBLZXllZEVuY29kZXI6OmVuZEFycmF5RWxlbWVudCgpCit7
CisgICAgR1JlZlB0cjxHVmFyaWFudEJ1aWxkZXI+IHZhcmlhbnRCdWlsZGVyID0gYWRvcHRHUmVm
KG1fdmFyaWFudEJ1aWxkZXJTdGFjay50YWtlTGFzdCgpKTsKKyAgICBnX3ZhcmlhbnRfYnVpbGRl
cl9hZGRfdmFsdWUobV9hcnJheVN0YWNrLmxhc3QoKS5zZWNvbmQuZ2V0KCksIGdfdmFyaWFudF9i
dWlsZGVyX2VuZCh2YXJpYW50QnVpbGRlci5nZXQoKSkpOworfQorCit2b2lkIEtleWVkRW5jb2Rl
cjo6ZW5kQXJyYXkoKQoreworICAgIGdfdmFyaWFudF9idWlsZGVyX2FkZChtX3ZhcmlhbnRCdWls
ZGVyU3RhY2subGFzdCgpLCAie3N2fSIsIG1fYXJyYXlTdGFjay5sYXN0KCkuZmlyc3QudXRmOCgp
LmRhdGEoKSwgZ192YXJpYW50X2J1aWxkZXJfZW5kKG1fYXJyYXlTdGFjay5sYXN0KCkuc2Vjb25k
LmdldCgpKSk7CisgICAgbV9hcnJheVN0YWNrLnJlbW92ZUxhc3QoKTsKK30KKworUGFzc1JlZlB0
cjxTaGFyZWRCdWZmZXI+IEtleWVkRW5jb2Rlcjo6ZmluaXNoRW5jb2RpbmcoKQoreworICAgIGdf
YXNzZXJ0KG1fdmFyaWFudEJ1aWxkZXJTdGFjay5sYXN0KCkgPT0gJm1fdmFyaWFudEJ1aWxkZXIp
OworICAgIEdSZWZQdHI8R1ZhcmlhbnQ+IHZhcmlhbnQgPSBnX3ZhcmlhbnRfYnVpbGRlcl9lbmQo
Jm1fdmFyaWFudEJ1aWxkZXIpOworICAgIEdSZWZQdHI8R0J5dGVzPiBkYXRhID0gZ192YXJpYW50
X2dldF9kYXRhX2FzX2J5dGVzKHZhcmlhbnQuZ2V0KCkpOworICAgIHJldHVybiBTaGFyZWRCdWZm
ZXI6OmNyZWF0ZShzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oZ19ieXRlc19nZXRf
ZGF0YShkYXRhLmdldCgpLCBudWxscHRyKSksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihnX2J5dGVz
X2dldF9zaXplKGRhdGEuZ2V0KCkpKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9LZXllZEVuY29kZXIuaCBiL1NvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9ndGsvS2V5ZWRFbmNvZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uMDU2MTg0NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9ndGsvS2V5ZWRFbmNvZGVyLmgKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgS2V5ZWRFbmNvZGVyX2gKKyNkZWZpbmUgS2V5ZWRFbmNvZGVyX2gKKworI2luY2x1
ZGUgPFdlYkNvcmUvS2V5ZWRDb2RpbmcuaD4KKyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIEtl
eWVkRW5jb2RlciBmaW5hbCA6IHB1YmxpYyBXZWJDb3JlOjpLZXllZEVuY29kZXIgeworcHVibGlj
OgorICAgIEtleWVkRW5jb2RlcigpOworICAgIH5LZXllZEVuY29kZXIoKTsKKworICAgIHZpcnR1
YWwgUGFzc1JlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+IGZpbmlzaEVuY29kaW5nKCkgb3Zl
cnJpZGU7CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCB2b2lkIGVuY29kZUJ5dGVzKGNvbnN0IFN0
cmluZyYga2V5LCBjb25zdCB1aW50OF90Kiwgc2l6ZV90KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFs
IHZvaWQgZW5jb2RlQm9vbChjb25zdCBTdHJpbmcmIGtleSwgYm9vbCkgb3ZlcnJpZGU7CisgICAg
dmlydHVhbCB2b2lkIGVuY29kZVVJbnQzMihjb25zdCBTdHJpbmcmIGtleSwgdWludDMyX3QpIG92
ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBlbmNvZGVJbnQzMihjb25zdCBTdHJpbmcmIGtleSwg
aW50MzJfdCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGVuY29kZUludDY0KGNvbnN0IFN0
cmluZyYga2V5LCBpbnQ2NF90KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZW5jb2RlRmxv
YXQoY29uc3QgU3RyaW5nJiBrZXksIGZsb2F0KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQg
ZW5jb2RlRG91YmxlKGNvbnN0IFN0cmluZyYga2V5LCBkb3VibGUpIG92ZXJyaWRlOworICAgIHZp
cnR1YWwgdm9pZCBlbmNvZGVTdHJpbmcoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYp
IG92ZXJyaWRlOworCisgICAgdmlydHVhbCB2b2lkIGJlZ2luT2JqZWN0KGNvbnN0IFN0cmluZyYg
a2V5KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZW5kT2JqZWN0KCkgb3ZlcnJpZGU7CisK
KyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5BcnJheShjb25zdCBTdHJpbmcmIGtleSkgb3ZlcnJpZGU7
CisgICAgdmlydHVhbCB2b2lkIGJlZ2luQXJyYXlFbGVtZW50KCkgb3ZlcnJpZGU7CisgICAgdmly
dHVhbCB2b2lkIGVuZEFycmF5RWxlbWVudCgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBl
bmRBcnJheSgpIG92ZXJyaWRlOworCisgICAgR1ZhcmlhbnRCdWlsZGVyIG1fdmFyaWFudEJ1aWxk
ZXI7CisgICAgVmVjdG9yPEdWYXJpYW50QnVpbGRlciosIDE2PiBtX3ZhcmlhbnRCdWlsZGVyU3Rh
Y2s7CisgICAgVmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmcsIEdSZWZQdHI8R1ZhcmlhbnRCdWlsZGVy
Pj4sIDE2PiBtX2FycmF5U3RhY2s7CisgICAgVmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmcsIEdSZWZQ
dHI8R1ZhcmlhbnRCdWlsZGVyPj4sIDE2PiBtX29iamVjdFN0YWNrOworfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBLZXllZEVuY29kZXJfaApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9Qcm9jZXNzRXhlY3V0YWJsZVBhdGhHdGsuY3BwIGIvU291
cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9Qcm9jZXNzRXhlY3V0YWJsZVBhdGhHdGsuY3BwCmluZGV4
IGU3NTdjYzIuLjViNWI5NDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsv
UHJvY2Vzc0V4ZWN1dGFibGVQYXRoR3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
Z3RrL1Byb2Nlc3NFeGVjdXRhYmxlUGF0aEd0ay5jcHAKQEAgLTc5LDQgKzc5LDExIEBAIFN0cmlu
ZyBleGVjdXRhYmxlUGF0aE9mTmV0d29ya1Byb2Nlc3MoKQogfQogI2VuZGlmCiAKKyNpZiBFTkFC
TEUoREFUQUJBU0VfUFJPQ0VTUykKK1N0cmluZyBleGVjdXRhYmxlUGF0aE9mRGF0YWJhc2VQcm9j
ZXNzKCkKK3sKKyAgICByZXR1cm4gZmluZFdlYktpdFByb2Nlc3MoIldlYktpdERhdGFiYXNlUHJv
Y2VzcyIpOworfQorI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RhdGFiYXNlcy9EYXRhYmFzZVByb2Nlc3NQcm94eS5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRGF0YWJhc2VzL0RhdGFiYXNlUHJvY2Vzc1By
b3h5LmNwcAppbmRleCA0MGM4OWEzLi5jMzNlOTdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvRGF0YWJhc2VzL0RhdGFiYXNlUHJvY2Vzc1Byb3h5LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvRGF0YWJhc2VzL0RhdGFiYXNlUHJvY2Vzc1Byb3h5LmNwcApA
QCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIldlYkNvbnRleHQuaCIKICNpbmNsdWRlICJXZWJP
cmlnaW5EYXRhTWFuYWdlclByb3h5LmgiCiAjaW5jbHVkZSAiV2ViT3JpZ2luRGF0YU1hbmFnZXJQ
cm94eU1lc3NhZ2VzLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgogCiAj
aWYgRU5BQkxFKERBVEFCQVNFX1BST0NFU1MpCiAKQEAgLTEyNiw2ICsxMjcsOCBAQCB2b2lkIERh
dGFiYXNlUHJvY2Vzc1Byb3h5OjpkaWRDcmVhdGVEYXRhYmFzZVRvV2ViUHJvY2Vzc0Nvbm5lY3Rp
b24oY29uc3QgSVBDOjpBdAogCiAjaWYgT1MoREFSV0lOKQogICAgIHJlcGx5LT5zZW5kKElQQzo6
QXR0YWNobWVudChjb25uZWN0aW9uSWRlbnRpZmllci5wb3J0KCksIE1BQ0hfTVNHX1RZUEVfTU9W
RV9TRU5EKSk7CisjZWxpZiBVU0UoVU5JWF9ET01BSU5fU09DS0VUUykKKyAgICByZXBseS0+c2Vu
ZChjb25uZWN0aW9uSWRlbnRpZmllcik7CiAjZWxzZQogICAgIG5vdEltcGxlbWVudGVkKCk7CiAj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9ndGsv
UHJvY2Vzc0xhdW5jaGVyR3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hl
ci9ndGsvUHJvY2Vzc0xhdW5jaGVyR3RrLmNwcAppbmRleCAzNjIzNjVjLi5jMzgwMjAwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvZ3RrL1Byb2Nlc3NMYXVu
Y2hlckd0ay5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL2d0ay9Q
cm9jZXNzTGF1bmNoZXJHdGsuY3BwCkBAIC03OSw2ICs3OSwxMSBAQCB2b2lkIFByb2Nlc3NMYXVu
Y2hlcjo6bGF1bmNoUHJvY2VzcygpCiAgICAgICAgIGV4ZWN1dGFibGVQYXRoID0gZXhlY3V0YWJs
ZVBhdGhPZk5ldHdvcmtQcm9jZXNzKCk7CiAgICAgICAgIGJyZWFrOwogI2VuZGlmCisjaWYgRU5B
QkxFKERBVEFCQVNFX1BST0NFU1MpCisgICAgY2FzZSBEYXRhYmFzZVByb2Nlc3M6CisgICAgICAg
IGV4ZWN1dGFibGVQYXRoID0gZXhlY3V0YWJsZVBhdGhPZkRhdGFiYXNlUHJvY2VzcygpOworICAg
ICAgICBicmVhazsKKyNlbmRpZgogICAgIGRlZmF1bHQ6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvZ3RrL1dlYkNvbnRleHRHdGsuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0
ay9XZWJDb250ZXh0R3RrLmNwcAppbmRleCAwYjUxNjY2Li5kOWI5YmNmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYkNvbnRleHRHdGsuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViQ29udGV4dEd0ay5jcHAKQEAgLTEyMCw4ICsxMjAs
OCBAQCBTdHJpbmcgV2ViQ29udGV4dDo6cGxhdGZvcm1EZWZhdWx0V2ViU1FMRGF0YWJhc2VEaXJl
Y3RvcnkoKQogCiBTdHJpbmcgV2ViQ29udGV4dDo6cGxhdGZvcm1EZWZhdWx0SW5kZXhlZERCRGF0
YWJhc2VEaXJlY3RvcnkoKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIFN0
cmluZygpOworICAgIEdVbmlxdWVQdHI8Z2NoYXI+IGluZGV4ZWREQkRhdGFiYXNlRGlyZWN0b3J5
KGdfYnVpbGRfZmlsZW5hbWUoZ19nZXRfdXNlcl9kYXRhX2RpcigpLCAid2Via2l0Z3RrIiwgImRh
dGFiYXNlcyIsICJpbmRleGVkZGIiLCBudWxscHRyKSk7CisgICAgcmV0dXJuIFdlYkNvcmU6OmZp
bGVuYW1lVG9TdHJpbmcoaW5kZXhlZERCRGF0YWJhc2VEaXJlY3RvcnkuZ2V0KCkpOwogfQogCiBT
dHJpbmcgV2ViQ29udGV4dDo6cGxhdGZvcm1EZWZhdWx0SWNvbkRhdGFiYXNlUGF0aCgpIGNvbnN0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAppbmRleCA0YTI4ZTU2Li4y
NjZmYmQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3Mu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAKQEAgLTEw
NTEsMTEgKzEwNTEsMTMgQEAgdm9pZCBXZWJQcm9jZXNzOjplbnN1cmVXZWJUb0RhdGFiYXNlUHJv
Y2Vzc0Nvbm5lY3Rpb24oKQogCiAjaWYgT1MoREFSV0lOKQogICAgIElQQzo6Q29ubmVjdGlvbjo6
SWRlbnRpZmllciBjb25uZWN0aW9uSWRlbnRpZmllcihlbmNvZGVkQ29ubmVjdGlvbklkZW50aWZp
ZXIucG9ydCgpKTsKLSAgICBpZiAoSVBDOjpDb25uZWN0aW9uOjppZGVudGlmaWVySXNOdWxsKGNv
bm5lY3Rpb25JZGVudGlmaWVyKSkKLSAgICAgICAgcmV0dXJuOworI2VsaWYgVVNFKFVOSVhfRE9N
QUlOX1NPQ0tFVFMpCisgICAgSVBDOjpDb25uZWN0aW9uOjpJZGVudGlmaWVyIGNvbm5lY3Rpb25J
ZGVudGlmaWVyID0gZW5jb2RlZENvbm5lY3Rpb25JZGVudGlmaWVyLnJlbGVhc2VGaWxlRGVzY3Jp
cHRvcigpOwogI2Vsc2UKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICNlbmRpZgorICAgIGlm
IChJUEM6OkNvbm5lY3Rpb246OmlkZW50aWZpZXJJc051bGwoY29ubmVjdGlvbklkZW50aWZpZXIp
KQorICAgICAgICByZXR1cm47CiAgICAgbV93ZWJUb0RhdGFiYXNlUHJvY2Vzc0Nvbm5lY3Rpb24g
PSBXZWJUb0RhdGFiYXNlUHJvY2Vzc0Nvbm5lY3Rpb246OmNyZWF0ZShjb25uZWN0aW9uSWRlbnRp
Zmllcik7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFrZS9PcHRpb25zR1RLLmNtYWtlIGIv
U291cmNlL2NtYWtlL09wdGlvbnNHVEsuY21ha2UKaW5kZXggNDU2Mjk5YS4uMTU2OTA5ZSAxMDA2
NDQKLS0tIGEvU291cmNlL2NtYWtlL09wdGlvbnNHVEsuY21ha2UKKysrIGIvU291cmNlL2NtYWtl
L09wdGlvbnNHVEsuY21ha2UKQEAgLTIxMyw2ICsyMTMsNyBAQCBzZXQoV2ViS2l0Ml9PVVRQVVRf
TkFNRSB3ZWJraXQyZ3RrLSR7V0VCS0lUR1RLX0FQSV9WRVJTSU9OfSkKIHNldChXZWJLaXQyX1dl
YlByb2Nlc3NfT1VUUFVUX05BTUUgV2ViS2l0V2ViUHJvY2VzcykKIHNldChXZWJLaXQyX05ldHdv
cmtQcm9jZXNzX09VVFBVVF9OQU1FIFdlYktpdE5ldHdvcmtQcm9jZXNzKQogc2V0KFdlYktpdDJf
UGx1Z2luUHJvY2Vzc19PVVRQVVRfTkFNRSBXZWJLaXRQbHVnaW5Qcm9jZXNzKQorc2V0KFdlYktp
dDJfRGF0YWJhc2VQcm9jZXNzX09VVFBVVF9OQU1FIFdlYktpdERhdGFiYXNlUHJvY2VzcykKIAog
YWRkX2RlZmluaXRpb25zKC1EQlVJTERJTkdfR1RLX189MSkKIGFkZF9kZWZpbml0aW9ucygtREdF
VFRFWFRfUEFDS0FHRT0iV2ViS2l0MkdUSy0ke1dFQktJVEdUS19BUElfVkVSU0lPTn0iKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>243042</attachid>
            <date>2014-12-10 10:15:12 -0800</date>
            <delta_ts>2014-12-11 02:01:57 -0800</delta_ts>
            <desc>Updated patch</desc>
            <filename>wk2-database-process.diff</filename>
            <type>text/plain</type>
            <size>47806</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCA3ZDAwODQ4Li5kZGJjMDMz
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAK
KzIwMTQtMTItMTAgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgor
CisgICAgICAgIFtHVEtdIEFkZCBpbml0aWFsIGRhdGFiYXNlIHByb2Nlc3Mgc3VwcG9ydAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM5NDkxCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTb3VyY2UvY21h
a2UvT3B0aW9uc0dUSy5jbWFrZTogU2V0IFdlYktpdDJfRGF0YWJhc2VQcm9jZXNzX09VVFBVVF9O
QU1FLgorCiAyMDE0LTEyLTA3ICBBbGJlcnRvIEdhcmNpYSAgPGJlcnRvQGlnYWxpYS5jb20+CiAK
ICAgICAgICAgW0dUS10gV2ViS2l0IGhhcyBhIG5ldyByZXF1aXJlZCBkZXBlbmRlbmN5IG9uIEdu
dVRMUwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZwppbmRleCBjZGFmODRjLi5mZWQ5Njg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDE0LTEy
LTEwICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KKworICAgICAg
ICBbR1RLXSBBZGQgaW5pdGlhbCBkYXRhYmFzZSBwcm9jZXNzIHN1cHBvcnQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzOTQ5MQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBzdXBwb3J0IGZvciB1c2lu
ZyBHUmVmUHRyIHdpdGggR1ZhcmlhbnRCdWlsZGVyLgorCisgICAgICAgICogd3RmL2dvYmplY3Qv
R1JlZlB0ci5jcHA6CisgICAgICAgIChXVEY6OnJlZkdQdHIpOgorICAgICAgICAoV1RGOjpkZXJl
ZkdQdHIpOgorICAgICAgICAqIHd0Zi9nb2JqZWN0L0dSZWZQdHIuaDoKKyAgICAgICAgKiB3dGYv
Z29iamVjdC9HVHlwZWRlZnMuaDoKKwogMjAxNC0xMi0wNyAgQW5kcmVhcyBLbGluZyAgPGFrbGlu
Z0BhcHBsZS5jb20+CiAKICAgICAgICAgVXNlIG1vcmUgUGFzc1JlZiBpbiBBdG9taWNTdHJpbmcu
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dSZWZQdHIuY3BwIGIvU291cmNl
L1dURi93dGYvZ29iamVjdC9HUmVmUHRyLmNwcAppbmRleCAxM2RlMTY2Li4xYWEzY2IwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dSZWZQdHIuY3BwCisrKyBiL1NvdXJjZS9X
VEYvd3RmL2dvYmplY3QvR1JlZlB0ci5jcHAKQEAgLTg5LDYgKzg5LDE4IEBAIHRlbXBsYXRlIDw+
IHZvaWQgZGVyZWZHUHRyKEdWYXJpYW50KiBwdHIpCiAgICAgZ192YXJpYW50X3VucmVmKHB0cik7
CiB9CiAKK3RlbXBsYXRlIDw+IEdWYXJpYW50QnVpbGRlciogcmVmR1B0cihHVmFyaWFudEJ1aWxk
ZXIqIHB0cikKK3sKKyAgICBpZiAocHRyKQorICAgICAgICBnX3ZhcmlhbnRfYnVpbGRlcl9yZWYo
cHRyKTsKKyAgICByZXR1cm4gcHRyOworfQorCit0ZW1wbGF0ZSA8PiB2b2lkIGRlcmVmR1B0cihH
VmFyaWFudEJ1aWxkZXIqIHB0cikKK3sKKyAgICBnX3ZhcmlhbnRfYnVpbGRlcl91bnJlZihwdHIp
OworfQorCiB0ZW1wbGF0ZSA8PiBHU291cmNlKiByZWZHUHRyKEdTb3VyY2UqIHB0cikKIHsKICAg
ICBpZiAocHRyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvZ29iamVjdC9HUmVmUHRyLmgg
Yi9Tb3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dSZWZQdHIuaAppbmRleCAyMTZjMTQ1Li5iZWU2OTc1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dSZWZQdHIuaAorKysgYi9Tb3Vy
Y2UvV1RGL3d0Zi9nb2JqZWN0L0dSZWZQdHIuaApAQCAtMjI1LDYgKzIyNSw4IEBAIHRlbXBsYXRl
IDw+IFdURl9FWFBPUlRfUFJJVkFURSBHTWFpbkxvb3AqIHJlZkdQdHIoR01haW5Mb29wKiBwdHIp
OwogdGVtcGxhdGUgPD4gV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZGVyZWZHUHRyKEdNYWluTG9v
cCogcHRyKTsKIHRlbXBsYXRlIDw+IFdURl9FWFBPUlRfUFJJVkFURSBHVmFyaWFudCogcmVmR1B0
cihHVmFyaWFudCogcHRyKTsKIHRlbXBsYXRlIDw+IFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGRl
cmVmR1B0cihHVmFyaWFudCogcHRyKTsKK3RlbXBsYXRlIDw+IFdURl9FWFBPUlRfUFJJVkFURSBH
VmFyaWFudEJ1aWxkZXIqIHJlZkdQdHIoR1ZhcmlhbnRCdWlsZGVyKiBwdHIpOwordGVtcGxhdGUg
PD4gV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZGVyZWZHUHRyKEdWYXJpYW50QnVpbGRlciogcHRy
KTsKIHRlbXBsYXRlIDw+IFdURl9FWFBPUlRfUFJJVkFURSBHU291cmNlKiByZWZHUHRyKEdTb3Vy
Y2UqIHB0cik7CiB0ZW1wbGF0ZSA8PiBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBkZXJlZkdQdHIo
R1NvdXJjZSogcHRyKTsKIHRlbXBsYXRlIDw+IFdURl9FWFBPUlRfUFJJVkFURSBHUHRyQXJyYXkq
IHJlZkdQdHIoR1B0ckFycmF5Kik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9nb2JqZWN0
L0dUeXBlZGVmcy5oIGIvU291cmNlL1dURi93dGYvZ29iamVjdC9HVHlwZWRlZnMuaAppbmRleCA5
OTkwNzkyLi4zMjI5OGQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dUeXBl
ZGVmcy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL2dvYmplY3QvR1R5cGVkZWZzLmgKQEAgLTYwLDYg
KzYwLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgX0dTb2NrZXRDbGllbnQgR1NvY2tldENsaWVudDsKIHR5
cGVkZWYgc3RydWN0IF9HU29ja2V0Q29ubmVjdGlvbiBHU29ja2V0Q29ubmVjdGlvbjsKIHR5cGVk
ZWYgc3RydWN0IF9HU291cmNlIEdTb3VyY2U7CiB0eXBlZGVmIHN0cnVjdCBfR1ZhcmlhbnQgR1Zh
cmlhbnQ7Cit0eXBlZGVmIHN0cnVjdCBfR1ZhcmlhbnRCdWlsZGVyIEdWYXJpYW50QnVpbGRlcjsK
IHR5cGVkZWYgdW5pb24gX0dka0V2ZW50IEdka0V2ZW50OwogdHlwZWRlZiBzdHJ1Y3QgX0dUaW1l
ciBHVGltZXI7CiB0eXBlZGVmIHN0cnVjdCBfR0tleUZpbGUgR0tleUZpbGU7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5k
ZXggZjg0Mjc4NC4uMDY5YjE3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDE0LTEy
LTEwICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KKworICAgICAg
ICBbR1RLXSBBZGQgaW5pdGlhbCBkYXRhYmFzZSBwcm9jZXNzIHN1cHBvcnQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzOTQ5MQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcGxhdGZvcm0vc3FsL1NRTGl0
ZUZpbGVTeXN0ZW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlRmlsZVN5c3RlbTo6b3Bl
bkRhdGFiYXNlKTogVXNlCisgICAgICAgIFdlYkNvcmU6OmZpbGVTeXN0ZW1SZXByZXNlbnRhdGlv
bigpIGZvciB0aGUgZGF0YWJhZSBmaWxlbmFtZSwKKyAgICAgICAgb3RoZXJ3aXNlIHNxbGl0ZTNf
b3BlbigpIGZhaWxzIHdoZW4gdGhlIGZpbGVuYW1lIGNvbnRhaW5zICIlMkUiLgorCiAyMDE0LTEy
LTA3ICBHd2FuZyBZb29uIEh3YW5nICA8eW9vbkBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtUZXh0
dXJlTWFwcGVyXSBOb3JtYWxpemUgcGF0dGVybiB0cmFuc2Zvcm0gZm9yIHBhdHRlcm4gY29tcG9z
aXRpbmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVGaWxl
U3lzdGVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVt
LmNwcAppbmRleCBlOGNmYjBlLi4zYmMwNTBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vc3FsL1NRTGl0ZUZpbGVTeXN0ZW0uY3BwCkBAIC01MCw3ICs1MCw3IEBAIFNRTGl0ZUZp
bGVTeXN0ZW06OlNRTGl0ZUZpbGVTeXN0ZW0oKQogCiBpbnQgU1FMaXRlRmlsZVN5c3RlbTo6b3Bl
bkRhdGFiYXNlKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIHNxbGl0ZTMqKiBkYXRhYmFzZSwgYm9v
bCkKIHsKLSAgICByZXR1cm4gc3FsaXRlM19vcGVuKGZpbGVuYW1lLnV0ZjgoKS5kYXRhKCksIGRh
dGFiYXNlKTsKKyAgICByZXR1cm4gc3FsaXRlM19vcGVuKGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlv
bihmaWxlbmFtZSkuZGF0YSgpLCBkYXRhYmFzZSk7CiB9CiAKIFN0cmluZyBTUUxpdGVGaWxlU3lz
dGVtOjpnZXRGaWxlTmFtZUZvck5ld0RhdGFiYXNlKGNvbnN0IFN0cmluZyYgZGJEaXIsIGNvbnN0
IFN0cmluZyYsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DTWFrZUxpc3RzLnR4dCBiL1Nv
dXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0CmluZGV4IDEwZjE3ZTMuLmE3NmQ3MDMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQy
L0NNYWtlTGlzdHMudHh0CkBAIC0xLDYgKzEsOSBAQAogc2V0KFdlYktpdDJfSU5DTFVERV9ESVJF
Q1RPUklFUwogICAgICIke0pBVkFTQ1JJUFRDT1JFX0RJUn0vbGxpbnQiCiAgICAgIiR7V0VCS0lU
Ml9ESVJ9IgorICAgICIke1dFQktJVDJfRElSfS9EYXRhYmFzZVByb2Nlc3MiCisgICAgIiR7V0VC
S0lUMl9ESVJ9L0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIiCisgICAgIiR7V0VCS0lUMl9ESVJ9
L0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvc3FsaXRlIgogICAgICIke1dFQktJVDJfRElSfS9O
ZXR3b3JrUHJvY2VzcyIKICAgICAiJHtXRUJLSVQyX0RJUn0vTmV0d29ya1Byb2Nlc3MvRmlsZUFQ
SSIKICAgICAiJHtXRUJLSVQyX0RJUn0vUGxhdGZvcm0iCkBAIC0xMSw2ICsxNCw3IEBAIHNldChX
ZWJLaXQyX0lOQ0xVREVfRElSRUNUT1JJRVMKICAgICAiJHtXRUJLSVQyX0RJUn0vU2hhcmVkL0FQ
SS9jIgogICAgICIke1dFQktJVDJfRElSfS9TaGFyZWQvQXV0aGVudGljYXRpb24iCiAgICAgIiR7
V0VCS0lUMl9ESVJ9L1NoYXJlZC9Db3JlSVBDU3VwcG9ydCIKKyAgICAiJHtXRUJLSVQyX0RJUn0v
U2hhcmVkL0RhdGFiYXNlcyIKICAgICAiJHtXRUJLSVQyX0RJUn0vU2hhcmVkL0RhdGFiYXNlcy9J
bmRleGVkREIiCiAgICAgIiR7V0VCS0lUMl9ESVJ9L1NoYXJlZC9Eb3dubG9hZHMiCiAgICAgIiR7
V0VCS0lUMl9ESVJ9L1NoYXJlZC9GaWxlQVBJIgpAQCAtMjQsNiArMjgsNyBAQCBzZXQoV2ViS2l0
Ml9JTkNMVURFX0RJUkVDVE9SSUVTCiAgICAgIiR7V0VCS0lUMl9ESVJ9L1VJUHJvY2Vzcy9BUEkv
QyIKICAgICAiJHtXRUJLSVQyX0RJUn0vVUlQcm9jZXNzL0FQSS9jcHAiCiAgICAgIiR7V0VCS0lU
Ml9ESVJ9L1VJUHJvY2Vzcy9BdXRoZW50aWNhdGlvbiIKKyAgICAiJHtXRUJLSVQyX0RJUn0vVUlQ
cm9jZXNzL0RhdGFiYXNlcyIKICAgICAiJHtXRUJLSVQyX0RJUn0vVUlQcm9jZXNzL0Rvd25sb2Fk
cyIKICAgICAiJHtXRUJLSVQyX0RJUn0vVUlQcm9jZXNzL0luc3BlY3RvclNlcnZlciIKICAgICAi
JHtXRUJLSVQyX0RJUn0vVUlQcm9jZXNzL0xhdW5jaGVyIgpAQCAtMTQ3LDYgKzE1MiwxNiBAQCBp
ZiAoV1RGX1VTRV8zRF9HUkFQSElDUykKIGVuZGlmICgpCiAKIHNldChXZWJLaXQyX1NPVVJDRVMK
KyAgICBEYXRhYmFzZVByb2Nlc3MvRGF0YWJhc2VUb1dlYlByb2Nlc3NDb25uZWN0aW9uLmNwcAor
ICAgIERhdGFiYXNlUHJvY2Vzcy9EYXRhYmFzZVByb2Nlc3MuY3BwCisgICAgRGF0YWJhc2VQcm9j
ZXNzL0luZGV4ZWREQi9EYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0aW9uLmNwcAorICAgIERhdGFi
YXNlUHJvY2Vzcy9JbmRleGVkREIvSURCU2VyaWFsaXphdGlvbi5jcHAKKyAgICBEYXRhYmFzZVBy
b2Nlc3MvSW5kZXhlZERCL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcAorICAgIERhdGFiYXNlUHJvY2Vz
cy9JbmRleGVkREIvVW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyLmNwcAorICAgIERhdGFiYXNl
UHJvY2Vzcy9JbmRleGVkREIvc3FsaXRlL1NRTGl0ZUlEQkN1cnNvci5jcHAKKyAgICBEYXRhYmFz
ZVByb2Nlc3MvSW5kZXhlZERCL3NxbGl0ZS9TUUxpdGVJREJUcmFuc2FjdGlvbi5jcHAKKyAgICBE
YXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL3NxbGl0ZS9VbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdT
dG9yZVNRTGl0ZS5jcHAKKwogICAgIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzLmNwcAogICAgIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAogICAg
IE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzUGxhdGZvcm1TdHJhdGVnaWVzLmNwcApAQCAt
MTg2LDYgKzIwMSw3IEBAIHNldChXZWJLaXQyX1NPVVJDRVMKICAgICBTaGFyZWQvQVBJVVJMUmVx
dWVzdC5jcHAKICAgICBTaGFyZWQvQVBJVVJMUmVzcG9uc2UuY3BwCiAgICAgU2hhcmVkL0FjdGl2
aXR5QXNzZXJ0aW9uLmNwcAorICAgIFNoYXJlZC9Bc3luY1JlcXVlc3QuY3BwCiAgICAgU2hhcmVk
L0Jsb2JEYXRhRmlsZVJlZmVyZW5jZVdpdGhTYW5kYm94RXh0ZW5zaW9uLmNwcAogICAgIFNoYXJl
ZC9DYWNoZU1vZGVsLmNwcAogICAgIFNoYXJlZC9DaGlsZFByb2Nlc3MuY3BwCkBAIC0yMTgsNiAr
MjM0LDcgQEAgc2V0KFdlYktpdDJfU09VUkNFUwogICAgIFNoYXJlZC9XZWJDb250ZXh0TWVudUl0
ZW0uY3BwCiAgICAgU2hhcmVkL1dlYkNvbnRleHRNZW51SXRlbURhdGEuY3BwCiAgICAgU2hhcmVk
L1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAKKyAgICBTaGFyZWQvV2ViQ3Jvc3NUaHJlYWRDb3Bp
ZXIuY3BwCiAgICAgU2hhcmVkL1dlYkV2ZW50LmNwcAogICAgIFNoYXJlZC9XZWJFdmVudENvbnZl
cnNpb24uY3BwCiAgICAgU2hhcmVkL1dlYkdlb2xvY2F0aW9uUG9zaXRpb24uY3BwCkBAIC0yNjcs
NiArMjg0LDkgQEAgc2V0KFdlYktpdDJfU09VUkNFUwogCiAgICAgU2hhcmVkL0F1dGhlbnRpY2F0
aW9uL0F1dGhlbnRpY2F0aW9uTWFuYWdlci5jcHAKIAorICAgIFNoYXJlZC9EYXRhYmFzZXMvRGF0
YWJhc2VQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcAorICAgIFNoYXJlZC9EYXRhYmFzZXMv
SW5kZXhlZERCL0lEQlV0aWxpdGllcy5jcHAKKwogICAgIFNoYXJlZC9Eb3dubG9hZHMvRG93bmxv
YWQuY3BwCiAgICAgU2hhcmVkL0Rvd25sb2Fkcy9Eb3dubG9hZEF1dGhlbnRpY2F0aW9uQ2xpZW50
LmNwcAogICAgIFNoYXJlZC9Eb3dubG9hZHMvRG93bmxvYWRNYW5hZ2VyLmNwcApAQCAtNDAxLDYg
KzQyMSw4IEBAIHNldChXZWJLaXQyX1NPVVJDRVMKICAgICBVSVByb2Nlc3MvQXV0aGVudGljYXRp
b24vV2ViQ3JlZGVudGlhbC5jcHAKICAgICBVSVByb2Nlc3MvQXV0aGVudGljYXRpb24vV2ViUHJv
dGVjdGlvblNwYWNlLmNwcAogCisgICAgVUlQcm9jZXNzL0RhdGFiYXNlcy9EYXRhYmFzZVByb2Nl
c3NQcm94eS5jcHAKKwogICAgIFVJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eS5jcHAK
ICAgICBVSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuY3BwCiAKQEAgLTQ0Myw2
ICs0NjUsOCBAQCBzZXQoV2ViS2l0Ml9TT1VSQ0VTCiAgICAgV2ViUHJvY2Vzcy9Db29raWVzL1dl
YkNvb2tpZU1hbmFnZXIuY3BwCiAKICAgICBXZWJQcm9jZXNzL0RhdGFiYXNlcy9JbmRleGVkREIv
V2ViSURCRmFjdG9yeUJhY2tlbmQuY3BwCisgICAgV2ViUHJvY2Vzcy9EYXRhYmFzZXMvSW5kZXhl
ZERCL1dlYklEQlNlcnZlckNvbm5lY3Rpb24uY3BwCisgICAgV2ViUHJvY2Vzcy9EYXRhYmFzZXMv
V2ViVG9EYXRhYmFzZVByb2Nlc3NDb25uZWN0aW9uLmNwcAogCiAgICAgV2ViUHJvY2Vzcy9GaWxl
QVBJL0Jsb2JSZWdpc3RyeVByb3h5LmNwcAogCkBAIC01NjksNiArNTkzLDEwIEBAIHNldChXZWJL
aXQyX1NPVVJDRVMKICkKIAogc2V0KFdlYktpdDJfTUVTU0FHRVNfSU5fRklMRVMKKyAgICBEYXRh
YmFzZVByb2Nlc3MvRGF0YWJhc2VUb1dlYlByb2Nlc3NDb25uZWN0aW9uLm1lc3NhZ2VzLmluCisg
ICAgRGF0YWJhc2VQcm9jZXNzL0RhdGFiYXNlUHJvY2Vzcy5tZXNzYWdlcy5pbgorICAgIERhdGFi
YXNlUHJvY2Vzcy9JbmRleGVkREIvRGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbi5tZXNzYWdl
cy5pbgorCiAgICAgTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3Mu
bWVzc2FnZXMuaW4KICAgICBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5tZXNzYWdlcy5p
bgogICAgIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5tZXNzYWdlcy5pbgpA
QCAtNjAzLDYgKzYzMSw4IEBAIHNldChXZWJLaXQyX01FU1NBR0VTX0lOX0ZJTEVTCiAgICAgVUlQ
cm9jZXNzL1dlYlJlc291cmNlQ2FjaGVNYW5hZ2VyUHJveHkubWVzc2FnZXMuaW4KICAgICBVSVBy
b2Nlc3MvV2ViVmlicmF0aW9uUHJveHkubWVzc2FnZXMuaW4KIAorICAgIFVJUHJvY2Vzcy9EYXRh
YmFzZXMvRGF0YWJhc2VQcm9jZXNzUHJveHkubWVzc2FnZXMuaW4KKwogICAgIFVJUHJvY2Vzcy9E
b3dubG9hZHMvRG93bmxvYWRQcm94eS5tZXNzYWdlcy5pbgogCiAgICAgVUlQcm9jZXNzL05ldHdv
cmsvTmV0d29ya1Byb2Nlc3NQcm94eS5tZXNzYWdlcy5pbgpAQCAtNjIzLDYgKzY1Myw4IEBAIHNl
dChXZWJLaXQyX01FU1NBR0VTX0lOX0ZJTEVTCiAKICAgICBXZWJQcm9jZXNzL0Nvb2tpZXMvV2Vi
Q29va2llTWFuYWdlci5tZXNzYWdlcy5pbgogCisgICAgV2ViUHJvY2Vzcy9EYXRhYmFzZXMvSW5k
ZXhlZERCL1dlYklEQlNlcnZlckNvbm5lY3Rpb24ubWVzc2FnZXMuaW4KKwogICAgIFdlYlByb2Nl
c3MvRnVsbFNjcmVlbi9XZWJGdWxsU2NyZWVuTWFuYWdlci5tZXNzYWdlcy5pbgogCiAgICAgV2Vi
UHJvY2Vzcy9HZW9sb2NhdGlvbi9XZWJHZW9sb2NhdGlvbk1hbmFnZXIubWVzc2FnZXMuaW4KQEAg
LTY2Nyw2ICs2OTksMTAgQEAgc2V0KE5ldHdvcmtQcm9jZXNzX0xJQlJBUklFUwogICAgIFdlYktp
dDIKICkKIAorc2V0KERhdGFiYXNlUHJvY2Vzc19MSUJSQVJJRVMKKyAgV2ViS2l0MgorKQorCiBz
ZXQoV2ViS2l0Ml9MSUJSQVJJRVMKICAgICBKYXZhU2NyaXB0Q29yZQogICAgIFdlYkNvcmUKQEAg
LTc0OSw2ICs3ODUsMTkgQEAgaWYgKEVOQUJMRV9QTFVHSU5fUFJPQ0VTUykKICAgICBlbmRpZiAo
KQogZW5kaWYgKCkKIAoraWYgKEVOQUJMRV9EQVRBQkFTRV9QUk9DRVNTKQorICAgIGFkZF9kZWZp
bml0aW9ucygtREVOQUJMRV9EQVRBQkFTRV9QUk9DRVNTPTEpCisgICAgYWRkX2V4ZWN1dGFibGUo
RGF0YWJhc2VQcm9jZXNzICR7RGF0YWJhc2VQcm9jZXNzX1NPVVJDRVN9KQorICAgIGFkZF93ZWJr
aXQyX3ByZWZpeF9oZWFkZXIoRGF0YWJhc2VQcm9jZXNzKQorICAgIHRhcmdldF9saW5rX2xpYnJh
cmllcyhEYXRhYmFzZVByb2Nlc3MgJHtEYXRhYmFzZVByb2Nlc3NfTElCUkFSSUVTfSkKKyAgICBz
ZXRfdGFyZ2V0X3Byb3BlcnRpZXMoRGF0YWJhc2VQcm9jZXNzIFBST1BFUlRJRVMgRk9MREVSICJX
ZWJLaXQiKQorICAgIGluc3RhbGwoVEFSR0VUUyBEYXRhYmFzZVByb2Nlc3MgREVTVElOQVRJT04g
IiR7TElCRVhFQ19JTlNUQUxMX0RJUn0iKQorCisgICAgaWYgKFdlYktpdDJfRGF0YWJhc2VQcm9j
ZXNzX09VVFBVVF9OQU1FKQorICAgICAgICBzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoRGF0YWJhc2VQ
cm9jZXNzIFBST1BFUlRJRVMgT1VUUFVUX05BTUUgJHtXZWJLaXQyX0RhdGFiYXNlUHJvY2Vzc19P
VVRQVVRfTkFNRX0pCisgICAgZW5kaWYgKCkKK2VuZGlmICgpCisKIFBPUFVMQVRFX0xJQlJBUllf
VkVSU0lPTihXRUJLSVQyKQogc2V0X3RhcmdldF9wcm9wZXJ0aWVzKFdlYktpdDIgUFJPUEVSVElF
UyBWRVJTSU9OICR7V0VCS0lUMl9WRVJTSU9OfSBTT1ZFUlNJT04gJHtXRUJLSVQyX1ZFUlNJT05f
TUFKT1J9KQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggMzM0NTQ2MC4uMTMwNjViNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDc2IEBACisyMDE0LTEyLTEwICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFA
aWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBBZGQgaW5pdGlhbCBkYXRhYmFzZSBwcm9jZXNz
IHN1cHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEzOTQ5MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEFkZCBpbml0aWFsIHN1cHBvcnQgZm9yIERhdGFiYXNlUHJvY2VzcywgZGlzYWJsZWQgYnkgZGVm
YXVsdCBmb3IKKyAgICAgICAgbm93LgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6IEFkZCBy
ZXF1aXJlZCBmaWxlcyB0byBjb21waWxhdGlvbi4KKyAgICAgICAgKiBEYXRhYmFzZVByb2Nlc3Mv
RGF0YWJhc2VQcm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RGF0YWJhc2VQcm9jZXNzOjpj
cmVhdGVEYXRhYmFzZVRvV2ViUHJvY2Vzc0Nvbm5lY3Rpb24pOgorICAgICAgICBBZGQgdGhlIHVu
aXggZG9tYWluIHNvY2tldHMgaW1wbGVtZW50YXRpb24uCisgICAgICAgICogRGF0YWJhc2VQcm9j
ZXNzL0VudHJ5UG9pbnQvdW5peC9EYXRhYmFzZVByb2Nlc3NNYWluLmNwcDogQWRkZWQuCisgICAg
ICAgIChtYWluKToKKyAgICAgICAgKiBEYXRhYmFzZVByb2Nlc3MvZ3RrL0RhdGFiYXNlUHJvY2Vz
c01haW5HdGsuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6RGF0YWJhc2VQcm9jZXNzTWFp
blVuaXgpOgorICAgICAgICAqIERhdGFiYXNlUHJvY2Vzcy91bml4L0RhdGFiYXNlUHJvY2Vzc01h
aW5Vbml4Lmg6IEFkZGVkLgorICAgICAgICAqIFBsYXRmb3JtR1RLLmNtYWtlOiBBZGQgcmVxdWly
ZWQgZmlsZXMgdG8gY29tcGlsYXRpb24uCisgICAgICAgICogU2hhcmVkL1Byb2Nlc3NFeGVjdXRh
YmxlUGF0aC5oOgorICAgICAgICAqIFNoYXJlZC9ndGsvS2V5ZWREZWNvZGVyLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJLaXQ6OktleWVkRGVjb2Rlcjo6S2V5ZWREZWNvZGVyKToKKyAgICAgICAg
KFdlYktpdDo6S2V5ZWREZWNvZGVyOjp+S2V5ZWREZWNvZGVyKToKKyAgICAgICAgKFdlYktpdDo6
S2V5ZWREZWNvZGVyOjpidWlsZERpY3Rpb25hcnlGcm9tR1ZhcmlhbnQpOgorICAgICAgICAoV2Vi
S2l0OjpLZXllZERlY29kZXI6OmRlY29kZUJ5dGVzKToKKyAgICAgICAgKFdlYktpdDo6S2V5ZWRE
ZWNvZGVyOjpkZWNvZGVCb29sKToKKyAgICAgICAgKFdlYktpdDo6S2V5ZWREZWNvZGVyOjpkZWNv
ZGVVSW50MzIpOgorICAgICAgICAoV2ViS2l0OjpLZXllZERlY29kZXI6OmRlY29kZUludDMyKToK
KyAgICAgICAgKFdlYktpdDo6S2V5ZWREZWNvZGVyOjpkZWNvZGVJbnQ2NCk6CisgICAgICAgIChX
ZWJLaXQ6OktleWVkRGVjb2Rlcjo6ZGVjb2RlRmxvYXQpOgorICAgICAgICAoV2ViS2l0OjpLZXll
ZERlY29kZXI6OmRlY29kZURvdWJsZSk6CisgICAgICAgIChXZWJLaXQ6OktleWVkRGVjb2Rlcjo6
ZGVjb2RlU3RyaW5nKToKKyAgICAgICAgKFdlYktpdDo6S2V5ZWREZWNvZGVyOjpiZWdpbk9iamVj
dCk6CisgICAgICAgIChXZWJLaXQ6OktleWVkRGVjb2Rlcjo6ZW5kT2JqZWN0KToKKyAgICAgICAg
KFdlYktpdDo6S2V5ZWREZWNvZGVyOjpiZWdpbkFycmF5KToKKyAgICAgICAgKFdlYktpdDo6S2V5
ZWREZWNvZGVyOjpiZWdpbkFycmF5RWxlbWVudCk6CisgICAgICAgIChXZWJLaXQ6OktleWVkRGVj
b2Rlcjo6ZW5kQXJyYXlFbGVtZW50KToKKyAgICAgICAgKFdlYktpdDo6S2V5ZWREZWNvZGVyOjpl
bmRBcnJheSk6CisgICAgICAgICogU2hhcmVkL2d0ay9LZXllZERlY29kZXIuaDogQWRkZWQuCisg
ICAgICAgICogU2hhcmVkL2d0ay9LZXllZEVuY29kZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YktpdDo6S2V5ZWRFbmNvZGVyOjpLZXllZEVuY29kZXIpOgorICAgICAgICAoV2ViS2l0OjpLZXll
ZEVuY29kZXI6On5LZXllZEVuY29kZXIpOgorICAgICAgICAoV2ViS2l0OjpLZXllZEVuY29kZXI6
OmVuY29kZUJ5dGVzKToKKyAgICAgICAgKFdlYktpdDo6S2V5ZWRFbmNvZGVyOjplbmNvZGVCb29s
KToKKyAgICAgICAgKFdlYktpdDo6S2V5ZWRFbmNvZGVyOjplbmNvZGVVSW50MzIpOgorICAgICAg
ICAoV2ViS2l0OjpLZXllZEVuY29kZXI6OmVuY29kZUludDMyKToKKyAgICAgICAgKFdlYktpdDo6
S2V5ZWRFbmNvZGVyOjplbmNvZGVJbnQ2NCk6CisgICAgICAgIChXZWJLaXQ6OktleWVkRW5jb2Rl
cjo6ZW5jb2RlRmxvYXQpOgorICAgICAgICAoV2ViS2l0OjpLZXllZEVuY29kZXI6OmVuY29kZURv
dWJsZSk6CisgICAgICAgIChXZWJLaXQ6OktleWVkRW5jb2Rlcjo6ZW5jb2RlU3RyaW5nKToKKyAg
ICAgICAgKFdlYktpdDo6S2V5ZWRFbmNvZGVyOjpiZWdpbk9iamVjdCk6CisgICAgICAgIChXZWJL
aXQ6OktleWVkRW5jb2Rlcjo6ZW5kT2JqZWN0KToKKyAgICAgICAgKFdlYktpdDo6S2V5ZWRFbmNv
ZGVyOjpiZWdpbkFycmF5KToKKyAgICAgICAgKFdlYktpdDo6S2V5ZWRFbmNvZGVyOjpiZWdpbkFy
cmF5RWxlbWVudCk6CisgICAgICAgIChXZWJLaXQ6OktleWVkRW5jb2Rlcjo6ZW5kQXJyYXlFbGVt
ZW50KToKKyAgICAgICAgKFdlYktpdDo6S2V5ZWRFbmNvZGVyOjplbmRBcnJheSk6CisgICAgICAg
IChXZWJLaXQ6OktleWVkRW5jb2Rlcjo6ZmluaXNoRW5jb2RpbmcpOgorICAgICAgICAqIFNoYXJl
ZC9ndGsvS2V5ZWRFbmNvZGVyLmg6IEFkZGVkLgorICAgICAgICAqIFNoYXJlZC9ndGsvUHJvY2Vz
c0V4ZWN1dGFibGVQYXRoR3RrLmNwcDoKKyAgICAgICAgKFdlYktpdDo6ZXhlY3V0YWJsZVBhdGhP
ZkRhdGFiYXNlUHJvY2Vzcyk6CisgICAgICAgICogVUlQcm9jZXNzL0RhdGFiYXNlcy9EYXRhYmFz
ZVByb2Nlc3NQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRhdGFiYXNlUHJvY2Vzc1Byb3h5
OjpkaWRDcmVhdGVEYXRhYmFzZVRvV2ViUHJvY2Vzc0Nvbm5lY3Rpb24pOgorICAgICAgICBBZGQg
dGhlIHVuaXggZG9tYWluIHNvY2tldHMgaW1wbGVtZW50YXRpb24uCisgICAgICAgICogVUlQcm9j
ZXNzL0xhdW5jaGVyL2d0ay9Qcm9jZXNzTGF1bmNoZXJHdGsuY3BwOgorICAgICAgICAoV2ViS2l0
OjpQcm9jZXNzTGF1bmNoZXI6OmxhdW5jaFByb2Nlc3MpOiBIYW5kbGUgdGhlCisgICAgICAgIERh
dGFiYXNlUHJvY2VzcyB0b28uCisgICAgICAgICogVUlQcm9jZXNzL2d0ay9XZWJDb250ZXh0R3Rr
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGV4dDo6cGxhdGZvcm1EZWZhdWx0SW5kZXhl
ZERCRGF0YWJhc2VEaXJlY3RvcnkpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUHJvY2Vzcy5j
cHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OmVuc3VyZVdlYlRvRGF0YWJhc2VQcm9j
ZXNzQ29ubmVjdGlvbik6IEFkZAorICAgICAgICB0aGUgdW5peCBkb21haW4gc29ja2V0cyBpbXBs
ZW1lbnRhdGlvbi4KKwogMjAxNC0xMi0wNyAgR3dhbmcgWW9vbiBId2FuZyAgPHlvb25AaWdhbGlh
LmNvbT4KIAogICAgICAgICBbQ29vcmRpbmF0ZWRHcmFwaGljc10gQ2hhbmdlIHRoZSBuYW1lc3Bh
Y2Ugb2YgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUgYW5kIENvb3JkaW5hdGVkR3JhcGhpY3NTY2Vu
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0RhdGFiYXNlUHJv
Y2Vzcy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvRGF0YWJhc2VQcm9jZXNz
LmNwcAppbmRleCA1M2IxZTkyLi40MzZlMTNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9E
YXRhYmFzZVByb2Nlc3MvRGF0YWJhc2VQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9E
YXRhYmFzZVByb2Nlc3MvRGF0YWJhc2VQcm9jZXNzLmNwcApAQCAtMzksNiArMzksNyBAQAogI2lu
Y2x1ZGUgIldlYk9yaWdpbkRhdGFNYW5hZ2VyTWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJPcmln
aW5EYXRhTWFuYWdlclByb3h5TWVzc2FnZXMuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0ZpbGVTeXN0
ZW0uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9UZXh0RW5jb2RpbmcuaD4KICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogCkBAIC0x
ODYsNiArMTg3LDE0IEBAIHZvaWQgRGF0YWJhc2VQcm9jZXNzOjpjcmVhdGVEYXRhYmFzZVRvV2Vi
UHJvY2Vzc0Nvbm5lY3Rpb24oKQogCiAgICAgSVBDOjpBdHRhY2htZW50IGNsaWVudFBvcnQobGlz
dGVuaW5nUG9ydCwgTUFDSF9NU0dfVFlQRV9NQUtFX1NFTkQpOwogICAgIHBhcmVudFByb2Nlc3ND
b25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OkRhdGFiYXNlUHJvY2Vzc1Byb3h5OjpEaWRDcmVh
dGVEYXRhYmFzZVRvV2ViUHJvY2Vzc0Nvbm5lY3Rpb24oY2xpZW50UG9ydCksIDApOworI2VsaWYg
VVNFKFVOSVhfRE9NQUlOX1NPQ0tFVFMpCisgICAgSVBDOjpDb25uZWN0aW9uOjpTb2NrZXRQYWly
IHNvY2tldFBhaXIgPSBJUEM6OkNvbm5lY3Rpb246OmNyZWF0ZVBsYXRmb3JtQ29ubmVjdGlvbigp
OworCisgICAgUmVmUHRyPERhdGFiYXNlVG9XZWJQcm9jZXNzQ29ubmVjdGlvbj4gY29ubmVjdGlv
biA9IERhdGFiYXNlVG9XZWJQcm9jZXNzQ29ubmVjdGlvbjo6Y3JlYXRlKHNvY2tldFBhaXIuc2Vy
dmVyKTsKKyAgICBtX2RhdGFiYXNlVG9XZWJQcm9jZXNzQ29ubmVjdGlvbnMuYXBwZW5kKGNvbm5l
Y3Rpb24ucmVsZWFzZSgpKTsKKworICAgIElQQzo6QXR0YWNobWVudCBjbGllbnRTb2NrZXQoc29j
a2V0UGFpci5jbGllbnQpOworICAgIHBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVz
c2FnZXM6OkRhdGFiYXNlUHJvY2Vzc1Byb3h5OjpEaWRDcmVhdGVEYXRhYmFzZVRvV2ViUHJvY2Vz
c0Nvbm5lY3Rpb24oY2xpZW50U29ja2V0KSwgMCk7CiAjZWxzZQogICAgIG5vdEltcGxlbWVudGVk
KCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9F
bnRyeVBvaW50L3VuaXgvRGF0YWJhc2VQcm9jZXNzTWFpbi5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9E
YXRhYmFzZVByb2Nlc3MvRW50cnlQb2ludC91bml4L0RhdGFiYXNlUHJvY2Vzc01haW4uY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyY2Q0NjQKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvRW50cnlQb2ludC91bml4L0RhdGFi
YXNlUHJvY2Vzc01haW4uY3BwCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgIkRhdGFiYXNlUHJvY2Vzc01h
aW5Vbml4LmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKK2ludCBtYWluKGludCBhcmdj
LCBjaGFyKiogYXJndikKK3sKKyAgICByZXR1cm4gRGF0YWJhc2VQcm9jZXNzTWFpblVuaXgoYXJn
YywgYXJndik7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3Mv
Z3RrL0RhdGFiYXNlUHJvY2Vzc01haW5HdGsuY3BwIGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQ
cm9jZXNzL2d0ay9EYXRhYmFzZVByb2Nlc3NNYWluR3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi42NDNjNWNhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dDIvRGF0YWJhc2VQcm9jZXNzL2d0ay9EYXRhYmFzZVByb2Nlc3NNYWluR3RrLmNwcApAQCAtMCww
ICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IElnYWxpYSBTLkwuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJEYXRhYmFzZVByb2Nlc3NNYWluVW5p
eC5oIgorCisjaWYgRU5BQkxFKERBVEFCQVNFX1BST0NFU1MpCisKKyNpbmNsdWRlICJDaGlsZFBy
b2Nlc3NNYWluLmgiCisjaW5jbHVkZSAiRGF0YWJhc2VQcm9jZXNzLmgiCisjaW5jbHVkZSA8Z3Rr
L2d0ay5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7
CisKK2NsYXNzIERhdGFiYXNlUHJvY2Vzc01haW4gZmluYWw6IHB1YmxpYyBDaGlsZFByb2Nlc3NN
YWluQmFzZSB7CitwdWJsaWM6CisgICAgYm9vbCBwbGF0Zm9ybUluaXRpYWxpemUoKSBvdmVycmlk
ZQorICAgIHsKKyAgICAgICAgZ3RrX2luaXQobnVsbHB0ciwgbnVsbHB0cik7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KK307CisKK2ludCBEYXRhYmFzZVByb2Nlc3NNYWluVW5peChpbnQg
YXJnYywgY2hhcioqIGFyZ3YpCit7CisgICAgcmV0dXJuIENoaWxkUHJvY2Vzc01haW48RGF0YWJh
c2VQcm9jZXNzLCBEYXRhYmFzZVByb2Nlc3NNYWluPihhcmdjLCBhcmd2KTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoREFUQUJBU0VfUFJPQ0VTUykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy91bml4L0RhdGFiYXNlUHJv
Y2Vzc01haW5Vbml4LmggYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvdW5peC9EYXRh
YmFzZVByb2Nlc3NNYWluVW5peC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LmMwZDdiZjQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nl
c3MvdW5peC9EYXRhYmFzZVByb2Nlc3NNYWluVW5peC5oCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBEYXRh
YmFzZVByb2Nlc3NNYWluVW5peF9oCisjZGVmaW5lIERhdGFiYXNlUHJvY2Vzc01haW5Vbml4X2gK
KworI2lmIEVOQUJMRShEQVRBQkFTRV9QUk9DRVNTKQorCisjaW5jbHVkZSA8V2ViS2l0L1dLQmFz
ZS5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworZXh0ZXJuICJDIiB7CitXS19FWFBPUlQgaW50
IERhdGFiYXNlUHJvY2Vzc01haW5Vbml4KGludCBhcmdjLCBjaGFyKiogYXJndik7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRGF0YWJhc2VQcm9jZXNzTWFpblVuaXhf
aAorCisjZW5kaWYgLy8gRU5BQkxFKERBVEFCQVNFX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZSBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RL
LmNtYWtlCmluZGV4IDI4MTk3ZGQuLmMzOGQ4N2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1BsYXRmb3JtR1RLLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtl
CkBAIC0xNSw2ICsxNSw4IEBAIGFkZF9kZWZpbml0aW9ucygtRExJQkRJUj0iJHtMSUJfSU5TVEFM
TF9ESVJ9IikKIHNldChXZWJLaXQyX1VTRV9QUkVGSVhfSEVBREVSIE9OKQogCiBsaXN0KEFQUEVO
RCBXZWJLaXQyX1NPVVJDRVMKKyAgICBEYXRhYmFzZVByb2Nlc3MvZ3RrL0RhdGFiYXNlUHJvY2Vz
c01haW5HdGsuY3BwCisKICAgICBOZXR3b3JrUHJvY2Vzcy9ndGsvTmV0d29ya1Byb2Nlc3NNYWlu
R3RrLmNwcAogCiAgICAgTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrUHJvY2Vzc1NvdXAuY3Bw
CkBAIC00OCw2ICs1MCw4IEBAIGxpc3QoQVBQRU5EIFdlYktpdDJfU09VUkNFUwogICAgIFNoYXJl
ZC9jYWlyby9TaGFyZWFibGVCaXRtYXBDYWlyby5jcHAKIAogICAgIFNoYXJlZC9ndGsvQXJndW1l
bnRDb2RlcnNHdGsuY3BwCisgICAgU2hhcmVkL2d0ay9LZXllZEVuY29kZXIuY3BwCisgICAgU2hh
cmVkL2d0ay9LZXllZERlY29kZXIuY3BwCiAgICAgU2hhcmVkL2d0ay9OYXRpdmVXZWJLZXlib2Fy
ZEV2ZW50R3RrLmNwcAogICAgIFNoYXJlZC9ndGsvTmF0aXZlV2ViTW91c2VFdmVudEd0ay5jcHAK
ICAgICBTaGFyZWQvZ3RrL05hdGl2ZVdlYlRvdWNoRXZlbnRHdGsuY3BwCkBAIC03MCw2ICs3NCw4
IEBAIGxpc3QoQVBQRU5EIFdlYktpdDJfU09VUkNFUwogCiAgICAgU2hhcmVkL3VuaXgvQ2hpbGRQ
cm9jZXNzTWFpbi5jcHAKIAorICAgIFVJUHJvY2Vzcy9EYXRhYmFzZXMvZ3RrL0RhdGFiYXNlUHJv
Y2Vzc1Byb3h5R3RrLmNwcAorCiAgICAgVUlQcm9jZXNzL0RlZmF1bHRVbmRvQ29udHJvbGxlci5j
cHAKICAgICBVSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eUltcGwuY3BwCiAKQEAgLTQxNiw2ICs0
MjIsNyBAQCBsaXN0KEFQUEVORCBXZWJLaXQyX0lOQ0xVREVfRElSRUNUT1JJRVMKICAgICAiJHtX
RUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUiCiAgICAgIiR7V0VCQ09SRV9E
SVJ9L3BsYXRmb3JtL25ldHdvcmsvc291cCIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0v
dGV4dC9lbmNoYW50IgorICAgICIke1dFQktJVDJfRElSfS9EYXRhYmFzZVByb2Nlc3MvdW5peCIK
ICAgICAiJHtXRUJLSVQyX0RJUn0vTmV0d29ya1Byb2Nlc3MvZ3RrIgogICAgICIke1dFQktJVDJf
RElSfS9OZXR3b3JrUHJvY2Vzcy91bml4IgogICAgICIke1dFQktJVDJfRElSfS9TaGFyZWQvQVBJ
L2MvZ3RrIgpAQCAtNDY3LDYgKzQ3NCwxMCBAQCBsaXN0KEFQUEVORCBOZXR3b3JrUHJvY2Vzc19T
T1VSQ0VTCiAgICAgTmV0d29ya1Byb2Nlc3MvRW50cnlQb2ludC91bml4L05ldHdvcmtQcm9jZXNz
TWFpbi5jcHAKICkKIAorbGlzdChBUFBFTkQgRGF0YWJhc2VQcm9jZXNzX1NPVVJDRVMKKyAgICBE
YXRhYmFzZVByb2Nlc3MvRW50cnlQb2ludC91bml4L0RhdGFiYXNlUHJvY2Vzc01haW4uY3BwCisp
CisKIGZpbGUoV1JJVEUgJHtDTUFLRV9CSU5BUllfRElSfS90ZXN0X2F0b21pYy5jcHAKICAgICAg
IiNpbmNsdWRlIDxhdG9taWM+XG4iCiAgICAgICJpbnQgbWFpbigpIHsgc3RkOjphdG9taWM8aW50
NjRfdD4gaSgwKTsgaSsrOyByZXR1cm4gMDsgfVxuIikKQEAgLTg5NSw2ICs5MDYsNyBAQCBhZGRf
Y3VzdG9tX2NvbW1hbmQoCiAgICAgICAgICAgICAke1dlYktpdDJfU09VUkNFU30KICAgICAgICAg
ICAgICR7V2ViUHJvY2Vzc19TT1VSQ0VTfQogICAgICAgICAgICAgJHtOZXR3b3JrUHJvY2Vzc19T
T1VSQ0VTfQorICAgICAgICAgICAgJHtEYXRhYmFzZVByb2Nlc3NfU09VUkNFU30KICAgICAgICAg
ICAgICR7UGx1Z2luUHJvY2Vzc0dUSzJfU09VUkNFU30KICAgICAgICAgICAgICR7UGx1Z2luUHJv
Y2Vzc19TT1VSQ0VTfQogICAgICAgICAgICAgJHtXZWJLaXQyX0hFQURFUlN9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvUHJvY2Vzc0V4ZWN1dGFibGVQYXRoLmggYi9Tb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvUHJvY2Vzc0V4ZWN1dGFibGVQYXRoLmgKaW5kZXggZDc4ZWJjZC4uNGZm
ZDExYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1Byb2Nlc3NFeGVjdXRhYmxl
UGF0aC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Qcm9jZXNzRXhlY3V0YWJsZVBhdGgu
aApAQCAtMzUsNyArMzUsOSBAQCBTdHJpbmcgZXhlY3V0YWJsZVBhdGhPZlBsdWdpblByb2Nlc3Mo
KTsKICNpZiBFTkFCTEUoTkVUV09SS19QUk9DRVNTKQogU3RyaW5nIGV4ZWN1dGFibGVQYXRoT2ZO
ZXR3b3JrUHJvY2VzcygpOwogI2VuZGlmCi0KKyNpZiBFTkFCTEUoREFUQUJBU0VfUFJPQ0VTUykK
K1N0cmluZyBleGVjdXRhYmxlUGF0aE9mRGF0YWJhc2VQcm9jZXNzKCk7CisjZW5kaWYKIH0KIAog
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL0tleWVkRGVjb2Rl
ci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL0tleWVkRGVjb2Rlci5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjcyMWJmYwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvS2V5ZWREZWNvZGVyLmNwcApAQCAtMCwwICsxLDE5
MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJLZXllZERl
Y29kZXIuaCIKKworI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdl
YktpdCB7CisKK0tleWVkRGVjb2Rlcjo6S2V5ZWREZWNvZGVyKGNvbnN0IHVpbnQ4X3QqIGRhdGEs
IHNpemVfdCBzaXplKQoreworICAgIEdSZWZQdHI8R0J5dGVzPiBieXRlcyA9IGFkb3B0R1JlZihn
X2J5dGVzX25ldyhkYXRhLCBzaXplKSk7CisgICAgR1JlZlB0cjxHVmFyaWFudD4gdmFyaWFudCA9
IGdfdmFyaWFudF9uZXdfZnJvbV9ieXRlcyhHX1ZBUklBTlRfVFlQRSgiYXtzdn0iKSwgYnl0ZXMu
Z2V0KCksIFRSVUUpOworICAgIEhhc2hNYXA8U3RyaW5nLCBHUmVmUHRyPEdWYXJpYW50Pj4gZGlj
dGlvbmFyeTsKKyAgICBidWlsZERpY3Rpb25hcnlGcm9tR1ZhcmlhbnQodmFyaWFudC5nZXQoKSwg
ZGljdGlvbmFyeSk7CisgICAgbV9kaWN0aW9uYXJ5U3RhY2suYXBwZW5kKFdURjo6bW92ZShkaWN0
aW9uYXJ5KSk7Cit9CisKK0tleWVkRGVjb2Rlcjo6fktleWVkRGVjb2RlcigpCit7CisgICAgQVNT
RVJUKG1fZGljdGlvbmFyeVN0YWNrLnNpemUoKSA9PSAxKTsKKyAgICBBU1NFUlQobV9hcnJheVN0
YWNrLmlzRW1wdHkoKSk7CisgICAgQVNTRVJUKG1fYXJyYXlJbmRleFN0YWNrLmlzRW1wdHkoKSk7
Cit9CisKK3ZvaWQgS2V5ZWREZWNvZGVyOjpidWlsZERpY3Rpb25hcnlGcm9tR1ZhcmlhbnQoR1Zh
cmlhbnQqIHZhcmlhbnQsIEhhc2hNYXA8U3RyaW5nLCBHUmVmUHRyPEdWYXJpYW50Pj4mIGRpY3Rp
b25hcnkpCit7CisgICAgR1ZhcmlhbnRJdGVyIGl0ZXI7CisgICAgZ192YXJpYW50X2l0ZXJfaW5p
dCgmaXRlciwgdmFyaWFudCk7CisgICAgY29uc3QgY2hhcioga2V5OworICAgIEdWYXJpYW50KiB2
YWx1ZTsKKyAgICB3aGlsZSAoZ192YXJpYW50X2l0ZXJfbG9vcCAoJml0ZXIsICJ7JnN2fSIsICZr
ZXksICZ2YWx1ZSkpCisgICAgICAgIGRpY3Rpb25hcnkuc2V0KFN0cmluZzo6ZnJvbVVURjgoa2V5
KSwgdmFsdWUpOworfQorCitib29sIEtleWVkRGVjb2Rlcjo6ZGVjb2RlQnl0ZXMoY29uc3QgU3Ry
aW5nJiBrZXksIGNvbnN0IHVpbnQ4X3QqJiBieXRlcywgc2l6ZV90JiBzaXplKQoreworICAgIEdS
ZWZQdHI8R1ZhcmlhbnQ+IHZhbHVlID0gbV9kaWN0aW9uYXJ5U3RhY2subGFzdCgpLmdldChrZXkp
OworICAgIGlmICghdmFsdWUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHNpemUgPSBn
X3ZhcmlhbnRfZ2V0X3NpemUodmFsdWUuZ2V0KCkpOworICAgIGJ5dGVzID0gc3RhdGljX2Nhc3Q8
Y29uc3QgdWludDhfdCo+KGdfdmFyaWFudF9nZXRfZGF0YSh2YWx1ZS5nZXQoKSkpOworICAgIHJl
dHVybiB0cnVlOworfQorCitib29sIEtleWVkRGVjb2Rlcjo6ZGVjb2RlQm9vbChjb25zdCBTdHJp
bmcmIGtleSwgYm9vbCYgcmVzdWx0KQoreworICAgIEdSZWZQdHI8R1ZhcmlhbnQ+IHZhbHVlID0g
bV9kaWN0aW9uYXJ5U3RhY2subGFzdCgpLmdldChrZXkpOworICAgIGlmICghdmFsdWUpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIHJlc3VsdCA9IGdfdmFyaWFudF9nZXRfYm9vbGVhbih2
YWx1ZS5nZXQoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgS2V5ZWREZWNvZGVyOjpk
ZWNvZGVVSW50MzIoY29uc3QgU3RyaW5nJiBrZXksIHVpbnQzMl90JiByZXN1bHQpCit7CisgICAg
R1JlZlB0cjxHVmFyaWFudD4gdmFsdWUgPSBtX2RpY3Rpb25hcnlTdGFjay5sYXN0KCkuZ2V0KGtl
eSk7CisgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmVzdWx0
ID0gZ192YXJpYW50X2dldF91aW50MzIodmFsdWUuZ2V0KCkpOworICAgIHJldHVybiB0cnVlOwor
fQorCitib29sIEtleWVkRGVjb2Rlcjo6ZGVjb2RlSW50MzIoY29uc3QgU3RyaW5nJiBrZXksIGlu
dDMyX3QmIHJlc3VsdCkKK3sKKyAgICBHUmVmUHRyPEdWYXJpYW50PiB2YWx1ZSA9IG1fZGljdGlv
bmFyeVN0YWNrLmxhc3QoKS5nZXQoa2V5KTsKKyAgICBpZiAoIXZhbHVlKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICByZXN1bHQgPSBnX3ZhcmlhbnRfZ2V0X2ludDMyKHZhbHVlLmdldCgp
KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBLZXllZERlY29kZXI6OmRlY29kZUludDY0
KGNvbnN0IFN0cmluZyYga2V5LCBpbnQ2NF90JiByZXN1bHQpCit7CisgICAgR1JlZlB0cjxHVmFy
aWFudD4gdmFsdWUgPSBtX2RpY3Rpb25hcnlTdGFjay5sYXN0KCkuZ2V0KGtleSk7CisgICAgaWYg
KCF2YWx1ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmVzdWx0ID0gZ192YXJpYW50
X2dldF9pbnQ2NCh2YWx1ZS5nZXQoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgS2V5
ZWREZWNvZGVyOjpkZWNvZGVGbG9hdChjb25zdCBTdHJpbmcmIGtleSwgZmxvYXQmIHJlc3VsdCkK
K3sKKyAgICBHUmVmUHRyPEdWYXJpYW50PiB2YWx1ZSA9IG1fZGljdGlvbmFyeVN0YWNrLmxhc3Qo
KS5nZXQoa2V5KTsKKyAgICBpZiAoIXZhbHVlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICByZXN1bHQgPSBnX3ZhcmlhbnRfZ2V0X2RvdWJsZSh2YWx1ZS5nZXQoKSk7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK2Jvb2wgS2V5ZWREZWNvZGVyOjpkZWNvZGVEb3VibGUoY29uc3QgU3RyaW5n
JiBrZXksIGRvdWJsZSYgcmVzdWx0KQoreworICAgIEdSZWZQdHI8R1ZhcmlhbnQ+IHZhbHVlID0g
bV9kaWN0aW9uYXJ5U3RhY2subGFzdCgpLmdldChrZXkpOworICAgIGlmICghdmFsdWUpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIHJlc3VsdCA9IGdfdmFyaWFudF9nZXRfZG91YmxlKHZh
bHVlLmdldCgpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBLZXllZERlY29kZXI6OmRl
Y29kZVN0cmluZyhjb25zdCBTdHJpbmcmIGtleSwgU3RyaW5nJiByZXN1bHQpCit7CisgICAgR1Jl
ZlB0cjxHVmFyaWFudD4gdmFsdWUgPSBtX2RpY3Rpb25hcnlTdGFjay5sYXN0KCkuZ2V0KGtleSk7
CisgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmVzdWx0ID0g
U3RyaW5nOjpmcm9tVVRGOChnX3ZhcmlhbnRfZ2V0X3N0cmluZyh2YWx1ZS5nZXQoKSwgbnVsbHB0
cikpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEtleWVkRGVjb2Rlcjo6YmVnaW5PYmpl
Y3QoY29uc3QgU3RyaW5nJiBrZXkpCit7CisgICAgR1JlZlB0cjxHVmFyaWFudD4gdmFsdWUgPSBt
X2RpY3Rpb25hcnlTdGFjay5sYXN0KCkuZ2V0KGtleSk7CisgICAgaWYgKCF2YWx1ZSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgSGFzaE1hcDxTdHJpbmcsIEdSZWZQdHI8R1ZhcmlhbnQ+
PiBkaWN0aW9uYXJ5OworICAgIGJ1aWxkRGljdGlvbmFyeUZyb21HVmFyaWFudCh2YWx1ZS5nZXQo
KSwgZGljdGlvbmFyeSk7CisgICAgbV9kaWN0aW9uYXJ5U3RhY2suYXBwZW5kKFdURjo6bW92ZShk
aWN0aW9uYXJ5KSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgS2V5ZWREZWNvZGVyOjpl
bmRPYmplY3QoKQoreworICAgIG1fZGljdGlvbmFyeVN0YWNrLnJlbW92ZUxhc3QoKTsKK30KKwor
Ym9vbCBLZXllZERlY29kZXI6OmJlZ2luQXJyYXkoY29uc3QgU3RyaW5nJiBrZXkpCit7CisgICAg
R1JlZlB0cjxHVmFyaWFudD4gdmFsdWUgPSBtX2RpY3Rpb25hcnlTdGFjay5sYXN0KCkuZ2V0KGtl
eSk7CisgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgbV9hcnJh
eVN0YWNrLmFwcGVuZCh2YWx1ZS5nZXQoKSk7CisgICAgbV9hcnJheUluZGV4U3RhY2suYXBwZW5k
KDApOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEtleWVkRGVjb2Rlcjo6YmVnaW5BcnJh
eUVsZW1lbnQoKQoreworICAgIGlmIChtX2FycmF5SW5kZXhTdGFjay5sYXN0KCkgPj0gZ192YXJp
YW50X25fY2hpbGRyZW4obV9hcnJheVN0YWNrLmxhc3QoKSkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIEdSZWZQdHI8R1ZhcmlhbnQ+IHZhcmlhbnQgPSBhZG9wdEdSZWYoZ192YXJpYW50
X2dldF9jaGlsZF92YWx1ZShtX2FycmF5U3RhY2subGFzdCgpLCBtX2FycmF5SW5kZXhTdGFjay5s
YXN0KCkrKykpOworICAgIEhhc2hNYXA8U3RyaW5nLCBHUmVmUHRyPEdWYXJpYW50Pj4gZGljdGlv
bmFyeTsKKyAgICBidWlsZERpY3Rpb25hcnlGcm9tR1ZhcmlhbnQodmFyaWFudC5nZXQoKSwgZGlj
dGlvbmFyeSk7CisgICAgbV9kaWN0aW9uYXJ5U3RhY2suYXBwZW5kKFdURjo6bW92ZShkaWN0aW9u
YXJ5KSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgS2V5ZWREZWNvZGVyOjplbmRBcnJh
eUVsZW1lbnQoKQoreworICAgIG1fZGljdGlvbmFyeVN0YWNrLnJlbW92ZUxhc3QoKTsKK30KKwor
dm9pZCBLZXllZERlY29kZXI6OmVuZEFycmF5KCkKK3sKKyAgICBtX2FycmF5U3RhY2sucmVtb3Zl
TGFzdCgpOworICAgIG1fYXJyYXlJbmRleFN0YWNrLnJlbW92ZUxhc3QoKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL0tl
eWVkRGVjb2Rlci5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9LZXllZERlY29kZXIuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjQ4NmI5Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9LZXllZERlY29kZXIuaApAQCAtMCwwICsx
LDcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBLZXllZERlY29kZXJfaAorI2RlZmluZSBLZXll
ZERlY29kZXJfaAorCisjaW5jbHVkZSA8V2ViQ29yZS9LZXllZENvZGluZy5oPgorI2luY2x1ZGUg
PGdsaWIuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0
L0dSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBLZXll
ZERlY29kZXIgZmluYWwgOiBwdWJsaWMgV2ViQ29yZTo6S2V5ZWREZWNvZGVyIHsKK3B1YmxpYzoK
KyAgICBLZXllZERlY29kZXIoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90KTsKKyAgICB2aXJ0
dWFsIH5LZXllZERlY29kZXIoKSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIGJv
b2wgZGVjb2RlQnl0ZXMoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IHVpbnQ4X3QqJiwgc2l6ZV90
Jikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIGRlY29kZUJvb2woY29uc3QgU3RyaW5nJiBr
ZXksIGJvb2wmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgZGVjb2RlVUludDMyKGNvbnN0
IFN0cmluZyYga2V5LCB1aW50MzJfdCYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBkZWNv
ZGVJbnQzMihjb25zdCBTdHJpbmcmIGtleSwgaW50MzJfdCYpIG92ZXJyaWRlOworICAgIHZpcnR1
YWwgYm9vbCBkZWNvZGVJbnQ2NChjb25zdCBTdHJpbmcmIGtleSwgaW50NjRfdCYpIG92ZXJyaWRl
OworICAgIHZpcnR1YWwgYm9vbCBkZWNvZGVGbG9hdChjb25zdCBTdHJpbmcmIGtleSwgZmxvYXQm
KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgZGVjb2RlRG91YmxlKGNvbnN0IFN0cmluZyYg
a2V5LCBkb3VibGUmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgZGVjb2RlU3RyaW5nKGNv
bnN0IFN0cmluZyYga2V5LCBTdHJpbmcmKSBvdmVycmlkZTsKKworICAgIHZpcnR1YWwgYm9vbCBi
ZWdpbk9iamVjdChjb25zdCBTdHJpbmcmIGtleSkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lk
IGVuZE9iamVjdCgpIG92ZXJyaWRlOworCisgICAgdmlydHVhbCBib29sIGJlZ2luQXJyYXkoY29u
c3QgU3RyaW5nJiBrZXkpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBiZWdpbkFycmF5RWxl
bWVudCgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBlbmRBcnJheUVsZW1lbnQoKSBvdmVy
cmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZW5kQXJyYXkoKSBvdmVycmlkZTsKKworICAgIHZvaWQg
YnVpbGREaWN0aW9uYXJ5RnJvbUdWYXJpYW50KEdWYXJpYW50KiwgSGFzaE1hcDxTdHJpbmcsIEdS
ZWZQdHI8R1ZhcmlhbnQ+PiYpOworCisgICAgVmVjdG9yPEhhc2hNYXA8U3RyaW5nLCBHUmVmUHRy
PEdWYXJpYW50Pj4+IG1fZGljdGlvbmFyeVN0YWNrOworICAgIFZlY3RvcjxHVmFyaWFudCosIDE2
PiBtX2FycmF5U3RhY2s7CisgICAgVmVjdG9yPHVuc2lnbmVkPiBtX2FycmF5SW5kZXhTdGFjazsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gS2V5ZWREZWNvZGVyX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvS2V5ZWRFbmNvZGVyLmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvS2V5ZWRFbmNvZGVyLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTgwMmE4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdDIvU2hhcmVkL2d0ay9LZXllZEVuY29kZXIuY3BwCkBAIC0wLDAgKzEsMTM1IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIktleWVkRW5jb2Rlci5o
IgorCisjaW5jbHVkZSA8V2ViQ29yZS9TaGFyZWRCdWZmZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2Vi
S2l0IHsKKworS2V5ZWRFbmNvZGVyOjpLZXllZEVuY29kZXIoKQoreworICAgIGdfdmFyaWFudF9i
dWlsZGVyX2luaXQoJm1fdmFyaWFudEJ1aWxkZXIsIEdfVkFSSUFOVF9UWVBFKCJhe3N2fSIpKTsK
KyAgICBtX3ZhcmlhbnRCdWlsZGVyU3RhY2suYXBwZW5kKCZtX3ZhcmlhbnRCdWlsZGVyKTsKK30K
KworS2V5ZWRFbmNvZGVyOjp+S2V5ZWRFbmNvZGVyKCkKK3sKKyAgICBBU1NFUlQobV92YXJpYW50
QnVpbGRlclN0YWNrLnNpemUoKSA9PSAxKTsKKyAgICBBU1NFUlQobV92YXJpYW50QnVpbGRlclN0
YWNrLmxhc3QoKSA9PSAmbV92YXJpYW50QnVpbGRlcik7CisgICAgQVNTRVJUKG1fYXJyYXlTdGFj
ay5pc0VtcHR5KCkpOworICAgIEFTU0VSVChtX29iamVjdFN0YWNrLmlzRW1wdHkoKSk7Cit9CisK
K3ZvaWQgS2V5ZWRFbmNvZGVyOjplbmNvZGVCeXRlcyhjb25zdCBTdHJpbmcmIGtleSwgY29uc3Qg
dWludDhfdCogYnl0ZXMsIHNpemVfdCBzaXplKQoreworICAgIEdSZWZQdHI8R0J5dGVzPiBnQnl0
ZXMgPSBhZG9wdEdSZWYoZ19ieXRlc19uZXdfc3RhdGljKGJ5dGVzLCBzaXplKSk7CisgICAgZ192
YXJpYW50X2J1aWxkZXJfYWRkKG1fdmFyaWFudEJ1aWxkZXJTdGFjay5sYXN0KCksICJ7c3Z9Iiwg
a2V5LnV0ZjgoKS5kYXRhKCksIGdfdmFyaWFudF9uZXdfZnJvbV9ieXRlcyhHX1ZBUklBTlRfVFlQ
RSgiYXkiKSwgZ0J5dGVzLmdldCgpLCBUUlVFKSk7Cit9CisKK3ZvaWQgS2V5ZWRFbmNvZGVyOjpl
bmNvZGVCb29sKGNvbnN0IFN0cmluZyYga2V5LCBib29sIHZhbHVlKQoreworICAgIGdfdmFyaWFu
dF9idWlsZGVyX2FkZChtX3ZhcmlhbnRCdWlsZGVyU3RhY2subGFzdCgpLCAie3N2fSIsIGtleS51
dGY4KCkuZGF0YSgpLCBnX3ZhcmlhbnRfbmV3X2Jvb2xlYW4odmFsdWUpKTsKK30KKwordm9pZCBL
ZXllZEVuY29kZXI6OmVuY29kZVVJbnQzMihjb25zdCBTdHJpbmcmIGtleSwgdWludDMyX3QgdmFs
dWUpCit7CisgICAgZ192YXJpYW50X2J1aWxkZXJfYWRkKG1fdmFyaWFudEJ1aWxkZXJTdGFjay5s
YXN0KCksICJ7c3Z9Iiwga2V5LnV0ZjgoKS5kYXRhKCksIGdfdmFyaWFudF9uZXdfdWludDMyKHZh
bHVlKSk7Cit9CisKK3ZvaWQgS2V5ZWRFbmNvZGVyOjplbmNvZGVJbnQzMihjb25zdCBTdHJpbmcm
IGtleSwgaW50MzJfdCB2YWx1ZSkKK3sKKyAgICBnX3ZhcmlhbnRfYnVpbGRlcl9hZGQobV92YXJp
YW50QnVpbGRlclN0YWNrLmxhc3QoKSwgIntzdn0iLCBrZXkudXRmOCgpLmRhdGEoKSwgZ192YXJp
YW50X25ld19pbnQzMih2YWx1ZSkpOworfQorCit2b2lkIEtleWVkRW5jb2Rlcjo6ZW5jb2RlSW50
NjQoY29uc3QgU3RyaW5nJiBrZXksIGludDY0X3QgdmFsdWUpCit7CisgICAgZ192YXJpYW50X2J1
aWxkZXJfYWRkKG1fdmFyaWFudEJ1aWxkZXJTdGFjay5sYXN0KCksICJ7c3Z9Iiwga2V5LnV0Zjgo
KS5kYXRhKCksIGdfdmFyaWFudF9uZXdfaW50NjQodmFsdWUpKTsKK30KKwordm9pZCBLZXllZEVu
Y29kZXI6OmVuY29kZUZsb2F0KGNvbnN0IFN0cmluZyYga2V5LCBmbG9hdCB2YWx1ZSkKK3sKKyAg
ICBlbmNvZGVEb3VibGUoa2V5LCB2YWx1ZSk7Cit9CisKK3ZvaWQgS2V5ZWRFbmNvZGVyOjplbmNv
ZGVEb3VibGUoY29uc3QgU3RyaW5nJiBrZXksIGRvdWJsZSB2YWx1ZSkKK3sKKyAgICBnX3Zhcmlh
bnRfYnVpbGRlcl9hZGQobV92YXJpYW50QnVpbGRlclN0YWNrLmxhc3QoKSwgIntzdn0iLCBrZXku
dXRmOCgpLmRhdGEoKSwgZ192YXJpYW50X25ld19kb3VibGUodmFsdWUpKTsKK30KKwordm9pZCBL
ZXllZEVuY29kZXI6OmVuY29kZVN0cmluZyhjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5n
JiB2YWx1ZSkKK3sKKyAgICBnX3ZhcmlhbnRfYnVpbGRlcl9hZGQobV92YXJpYW50QnVpbGRlclN0
YWNrLmxhc3QoKSwgIntzdn0iLCBrZXkudXRmOCgpLmRhdGEoKSwgZ192YXJpYW50X25ld19zdHJp
bmcodmFsdWUudXRmOCgpLmRhdGEoKSkpOworfQorCit2b2lkIEtleWVkRW5jb2Rlcjo6YmVnaW5P
YmplY3QoY29uc3QgU3RyaW5nJiBrZXkpCit7CisgICAgR1JlZlB0cjxHVmFyaWFudEJ1aWxkZXI+
IGJ1aWxkZXIgPSBhZG9wdEdSZWYoZ192YXJpYW50X2J1aWxkZXJfbmV3KEdfVkFSSUFOVF9UWVBF
KCJhYXtzdn0iKSkpOworICAgIG1fb2JqZWN0U3RhY2suYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKGtl
eSwgYnVpbGRlcikpOworICAgIG1fdmFyaWFudEJ1aWxkZXJTdGFjay5hcHBlbmQoYnVpbGRlci5n
ZXQoKSk7Cit9CisKK3ZvaWQgS2V5ZWRFbmNvZGVyOjplbmRPYmplY3QoKQoreworICAgIEdWYXJp
YW50QnVpbGRlciogYnVpbGRlciA9IG1fdmFyaWFudEJ1aWxkZXJTdGFjay50YWtlTGFzdCgpOwor
ICAgIGdfdmFyaWFudF9idWlsZGVyX2FkZChtX3ZhcmlhbnRCdWlsZGVyU3RhY2subGFzdCgpLCAi
e3N2fSIsIG1fb2JqZWN0U3RhY2subGFzdCgpLmZpcnN0LnV0ZjgoKS5kYXRhKCksIGdfdmFyaWFu
dF9idWlsZGVyX2VuZChidWlsZGVyKSk7CisgICAgbV9vYmplY3RTdGFjay5yZW1vdmVMYXN0KCk7
Cit9CisKK3ZvaWQgS2V5ZWRFbmNvZGVyOjpiZWdpbkFycmF5KGNvbnN0IFN0cmluZyYga2V5KQor
eworICAgIG1fYXJyYXlTdGFjay5hcHBlbmQoc3RkOjptYWtlX3BhaXIoa2V5LCBhZG9wdEdSZWYo
Z192YXJpYW50X2J1aWxkZXJfbmV3KEdfVkFSSUFOVF9UWVBFKCJhYXtzdn0iKSkpKSk7Cit9CisK
K3ZvaWQgS2V5ZWRFbmNvZGVyOjpiZWdpbkFycmF5RWxlbWVudCgpCit7CisgICAgbV92YXJpYW50
QnVpbGRlclN0YWNrLmFwcGVuZChnX3ZhcmlhbnRfYnVpbGRlcl9uZXcoR19WQVJJQU5UX1RZUEUo
ImF7c3Z9IikpKTsKK30KKwordm9pZCBLZXllZEVuY29kZXI6OmVuZEFycmF5RWxlbWVudCgpCit7
CisgICAgR1JlZlB0cjxHVmFyaWFudEJ1aWxkZXI+IHZhcmlhbnRCdWlsZGVyID0gYWRvcHRHUmVm
KG1fdmFyaWFudEJ1aWxkZXJTdGFjay50YWtlTGFzdCgpKTsKKyAgICBnX3ZhcmlhbnRfYnVpbGRl
cl9hZGRfdmFsdWUobV9hcnJheVN0YWNrLmxhc3QoKS5zZWNvbmQuZ2V0KCksIGdfdmFyaWFudF9i
dWlsZGVyX2VuZCh2YXJpYW50QnVpbGRlci5nZXQoKSkpOworfQorCit2b2lkIEtleWVkRW5jb2Rl
cjo6ZW5kQXJyYXkoKQoreworICAgIGdfdmFyaWFudF9idWlsZGVyX2FkZChtX3ZhcmlhbnRCdWls
ZGVyU3RhY2subGFzdCgpLCAie3N2fSIsIG1fYXJyYXlTdGFjay5sYXN0KCkuZmlyc3QudXRmOCgp
LmRhdGEoKSwgZ192YXJpYW50X2J1aWxkZXJfZW5kKG1fYXJyYXlTdGFjay5sYXN0KCkuc2Vjb25k
LmdldCgpKSk7CisgICAgbV9hcnJheVN0YWNrLnJlbW92ZUxhc3QoKTsKK30KKworUGFzc1JlZlB0
cjxTaGFyZWRCdWZmZXI+IEtleWVkRW5jb2Rlcjo6ZmluaXNoRW5jb2RpbmcoKQoreworICAgIGdf
YXNzZXJ0KG1fdmFyaWFudEJ1aWxkZXJTdGFjay5sYXN0KCkgPT0gJm1fdmFyaWFudEJ1aWxkZXIp
OworICAgIEdSZWZQdHI8R1ZhcmlhbnQ+IHZhcmlhbnQgPSBnX3ZhcmlhbnRfYnVpbGRlcl9lbmQo
Jm1fdmFyaWFudEJ1aWxkZXIpOworICAgIEdSZWZQdHI8R0J5dGVzPiBkYXRhID0gZ192YXJpYW50
X2dldF9kYXRhX2FzX2J5dGVzKHZhcmlhbnQuZ2V0KCkpOworICAgIHJldHVybiBTaGFyZWRCdWZm
ZXI6OmNyZWF0ZShzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oZ19ieXRlc19nZXRf
ZGF0YShkYXRhLmdldCgpLCBudWxscHRyKSksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihnX2J5dGVz
X2dldF9zaXplKGRhdGEuZ2V0KCkpKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9LZXllZEVuY29kZXIuaCBiL1NvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9ndGsvS2V5ZWRFbmNvZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uMDU2MTg0NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9ndGsvS2V5ZWRFbmNvZGVyLmgKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgS2V5ZWRFbmNvZGVyX2gKKyNkZWZpbmUgS2V5ZWRFbmNvZGVyX2gKKworI2luY2x1
ZGUgPFdlYkNvcmUvS2V5ZWRDb2RpbmcuaD4KKyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIEtl
eWVkRW5jb2RlciBmaW5hbCA6IHB1YmxpYyBXZWJDb3JlOjpLZXllZEVuY29kZXIgeworcHVibGlj
OgorICAgIEtleWVkRW5jb2RlcigpOworICAgIH5LZXllZEVuY29kZXIoKTsKKworICAgIHZpcnR1
YWwgUGFzc1JlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+IGZpbmlzaEVuY29kaW5nKCkgb3Zl
cnJpZGU7CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCB2b2lkIGVuY29kZUJ5dGVzKGNvbnN0IFN0
cmluZyYga2V5LCBjb25zdCB1aW50OF90Kiwgc2l6ZV90KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFs
IHZvaWQgZW5jb2RlQm9vbChjb25zdCBTdHJpbmcmIGtleSwgYm9vbCkgb3ZlcnJpZGU7CisgICAg
dmlydHVhbCB2b2lkIGVuY29kZVVJbnQzMihjb25zdCBTdHJpbmcmIGtleSwgdWludDMyX3QpIG92
ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBlbmNvZGVJbnQzMihjb25zdCBTdHJpbmcmIGtleSwg
aW50MzJfdCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGVuY29kZUludDY0KGNvbnN0IFN0
cmluZyYga2V5LCBpbnQ2NF90KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZW5jb2RlRmxv
YXQoY29uc3QgU3RyaW5nJiBrZXksIGZsb2F0KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQg
ZW5jb2RlRG91YmxlKGNvbnN0IFN0cmluZyYga2V5LCBkb3VibGUpIG92ZXJyaWRlOworICAgIHZp
cnR1YWwgdm9pZCBlbmNvZGVTdHJpbmcoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYp
IG92ZXJyaWRlOworCisgICAgdmlydHVhbCB2b2lkIGJlZ2luT2JqZWN0KGNvbnN0IFN0cmluZyYg
a2V5KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZW5kT2JqZWN0KCkgb3ZlcnJpZGU7CisK
KyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5BcnJheShjb25zdCBTdHJpbmcmIGtleSkgb3ZlcnJpZGU7
CisgICAgdmlydHVhbCB2b2lkIGJlZ2luQXJyYXlFbGVtZW50KCkgb3ZlcnJpZGU7CisgICAgdmly
dHVhbCB2b2lkIGVuZEFycmF5RWxlbWVudCgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBl
bmRBcnJheSgpIG92ZXJyaWRlOworCisgICAgR1ZhcmlhbnRCdWlsZGVyIG1fdmFyaWFudEJ1aWxk
ZXI7CisgICAgVmVjdG9yPEdWYXJpYW50QnVpbGRlciosIDE2PiBtX3ZhcmlhbnRCdWlsZGVyU3Rh
Y2s7CisgICAgVmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmcsIEdSZWZQdHI8R1ZhcmlhbnRCdWlsZGVy
Pj4sIDE2PiBtX2FycmF5U3RhY2s7CisgICAgVmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmcsIEdSZWZQ
dHI8R1ZhcmlhbnRCdWlsZGVyPj4sIDE2PiBtX29iamVjdFN0YWNrOworfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBLZXllZEVuY29kZXJfaApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9Qcm9jZXNzRXhlY3V0YWJsZVBhdGhHdGsuY3BwIGIvU291
cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9Qcm9jZXNzRXhlY3V0YWJsZVBhdGhHdGsuY3BwCmluZGV4
IGU3NTdjYzIuLjViNWI5NDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsv
UHJvY2Vzc0V4ZWN1dGFibGVQYXRoR3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
Z3RrL1Byb2Nlc3NFeGVjdXRhYmxlUGF0aEd0ay5jcHAKQEAgLTc5LDQgKzc5LDExIEBAIFN0cmlu
ZyBleGVjdXRhYmxlUGF0aE9mTmV0d29ya1Byb2Nlc3MoKQogfQogI2VuZGlmCiAKKyNpZiBFTkFC
TEUoREFUQUJBU0VfUFJPQ0VTUykKK1N0cmluZyBleGVjdXRhYmxlUGF0aE9mRGF0YWJhc2VQcm9j
ZXNzKCkKK3sKKyAgICByZXR1cm4gZmluZFdlYktpdFByb2Nlc3MoIldlYktpdERhdGFiYXNlUHJv
Y2VzcyIpOworfQorI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RhdGFiYXNlcy9EYXRhYmFzZVByb2Nlc3NQcm94eS5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRGF0YWJhc2VzL0RhdGFiYXNlUHJvY2Vzc1By
b3h5LmNwcAppbmRleCA0MGM4OWEzLi5jMzNlOTdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvRGF0YWJhc2VzL0RhdGFiYXNlUHJvY2Vzc1Byb3h5LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvRGF0YWJhc2VzL0RhdGFiYXNlUHJvY2Vzc1Byb3h5LmNwcApA
QCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIldlYkNvbnRleHQuaCIKICNpbmNsdWRlICJXZWJP
cmlnaW5EYXRhTWFuYWdlclByb3h5LmgiCiAjaW5jbHVkZSAiV2ViT3JpZ2luRGF0YU1hbmFnZXJQ
cm94eU1lc3NhZ2VzLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgogCiAj
aWYgRU5BQkxFKERBVEFCQVNFX1BST0NFU1MpCiAKQEAgLTEyNiw2ICsxMjcsOCBAQCB2b2lkIERh
dGFiYXNlUHJvY2Vzc1Byb3h5OjpkaWRDcmVhdGVEYXRhYmFzZVRvV2ViUHJvY2Vzc0Nvbm5lY3Rp
b24oY29uc3QgSVBDOjpBdAogCiAjaWYgT1MoREFSV0lOKQogICAgIHJlcGx5LT5zZW5kKElQQzo6
QXR0YWNobWVudChjb25uZWN0aW9uSWRlbnRpZmllci5wb3J0KCksIE1BQ0hfTVNHX1RZUEVfTU9W
RV9TRU5EKSk7CisjZWxpZiBVU0UoVU5JWF9ET01BSU5fU09DS0VUUykKKyAgICByZXBseS0+c2Vu
ZChjb25uZWN0aW9uSWRlbnRpZmllcik7CiAjZWxzZQogICAgIG5vdEltcGxlbWVudGVkKCk7CiAj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EYXRhYmFzZXMvZ3Rr
L0RhdGFiYXNlUHJvY2Vzc1Byb3h5R3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9E
YXRhYmFzZXMvZ3RrL0RhdGFiYXNlUHJvY2Vzc1Byb3h5R3RrLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi44M2UyOWY1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0RhdGFiYXNlcy9ndGsvRGF0YWJhc2VQcm9jZXNzUHJveHlHdGsuY3Bw
CkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgSWdhbGlhIFMuTC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRhdGFiYXNlUHJvY2Vz
c1Byb3h5LmgiCisKKyNpZiBFTkFCTEUoREFUQUJBU0VfUFJPQ0VTUykKKworbmFtZXNwYWNlIFdl
YktpdCB7CisKK3ZvaWQgRGF0YWJhc2VQcm9jZXNzUHJveHk6OnBsYXRmb3JtR2V0TGF1bmNoT3B0
aW9ucyhQcm9jZXNzTGF1bmNoZXI6OkxhdW5jaE9wdGlvbnMmKQoreworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShEQVRBQkFTRV9QUk9DRVNTKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL2d0ay9Qcm9jZXNzTGF1bmNo
ZXJHdGsuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL2d0ay9Qcm9jZXNz
TGF1bmNoZXJHdGsuY3BwCmluZGV4IDM2MjM2NWMuLmMzODAyMDAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9ndGsvUHJvY2Vzc0xhdW5jaGVyR3RrLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvZ3RrL1Byb2Nlc3NMYXVuY2hl
ckd0ay5jcHAKQEAgLTc5LDYgKzc5LDExIEBAIHZvaWQgUHJvY2Vzc0xhdW5jaGVyOjpsYXVuY2hQ
cm9jZXNzKCkKICAgICAgICAgZXhlY3V0YWJsZVBhdGggPSBleGVjdXRhYmxlUGF0aE9mTmV0d29y
a1Byb2Nlc3MoKTsKICAgICAgICAgYnJlYWs7CiAjZW5kaWYKKyNpZiBFTkFCTEUoREFUQUJBU0Vf
UFJPQ0VTUykKKyAgICBjYXNlIERhdGFiYXNlUHJvY2VzczoKKyAgICAgICAgZXhlY3V0YWJsZVBh
dGggPSBleGVjdXRhYmxlUGF0aE9mRGF0YWJhc2VQcm9jZXNzKCk7CisgICAgICAgIGJyZWFrOwor
I2VuZGlmCiAgICAgZGVmYXVsdDoKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
ICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2Vi
Q29udGV4dEd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYkNvbnRleHRH
dGsuY3BwCmluZGV4IDBiNTE2NjYuLmQ5YjliY2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9ndGsvV2ViQ29udGV4dEd0ay5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL2d0ay9XZWJDb250ZXh0R3RrLmNwcApAQCAtMTIwLDggKzEyMCw4IEBAIFN0cmluZyBX
ZWJDb250ZXh0OjpwbGF0Zm9ybURlZmF1bHRXZWJTUUxEYXRhYmFzZURpcmVjdG9yeSgpCiAKIFN0
cmluZyBXZWJDb250ZXh0OjpwbGF0Zm9ybURlZmF1bHRJbmRleGVkREJEYXRhYmFzZURpcmVjdG9y
eSgpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gU3RyaW5nKCk7CisgICAg
R1VuaXF1ZVB0cjxnY2hhcj4gaW5kZXhlZERCRGF0YWJhc2VEaXJlY3RvcnkoZ19idWlsZF9maWxl
bmFtZShnX2dldF91c2VyX2RhdGFfZGlyKCksICJ3ZWJraXRndGsiLCAiZGF0YWJhc2VzIiwgImlu
ZGV4ZWRkYiIsIG51bGxwdHIpKTsKKyAgICByZXR1cm4gV2ViQ29yZTo6ZmlsZW5hbWVUb1N0cmlu
ZyhpbmRleGVkREJEYXRhYmFzZURpcmVjdG9yeS5nZXQoKSk7CiB9CiAKIFN0cmluZyBXZWJDb250
ZXh0OjpwbGF0Zm9ybURlZmF1bHRJY29uRGF0YWJhc2VQYXRoKCkgY29uc3QKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCmluZGV4IDRhMjhlNTYuLjI2NmZiZDcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcApAQCAtMTA1MSwxMSArMTA1MSwx
MyBAQCB2b2lkIFdlYlByb2Nlc3M6OmVuc3VyZVdlYlRvRGF0YWJhc2VQcm9jZXNzQ29ubmVjdGlv
bigpCiAKICNpZiBPUyhEQVJXSU4pCiAgICAgSVBDOjpDb25uZWN0aW9uOjpJZGVudGlmaWVyIGNv
bm5lY3Rpb25JZGVudGlmaWVyKGVuY29kZWRDb25uZWN0aW9uSWRlbnRpZmllci5wb3J0KCkpOwot
ICAgIGlmIChJUEM6OkNvbm5lY3Rpb246OmlkZW50aWZpZXJJc051bGwoY29ubmVjdGlvbklkZW50
aWZpZXIpKQotICAgICAgICByZXR1cm47CisjZWxpZiBVU0UoVU5JWF9ET01BSU5fU09DS0VUUykK
KyAgICBJUEM6OkNvbm5lY3Rpb246OklkZW50aWZpZXIgY29ubmVjdGlvbklkZW50aWZpZXIgPSBl
bmNvZGVkQ29ubmVjdGlvbklkZW50aWZpZXIucmVsZWFzZUZpbGVEZXNjcmlwdG9yKCk7CiAjZWxz
ZQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogI2VuZGlmCisgICAgaWYgKElQQzo6Q29ubmVj
dGlvbjo6aWRlbnRpZmllcklzTnVsbChjb25uZWN0aW9uSWRlbnRpZmllcikpCisgICAgICAgIHJl
dHVybjsKICAgICBtX3dlYlRvRGF0YWJhc2VQcm9jZXNzQ29ubmVjdGlvbiA9IFdlYlRvRGF0YWJh
c2VQcm9jZXNzQ29ubmVjdGlvbjo6Y3JlYXRlKGNvbm5lY3Rpb25JZGVudGlmaWVyKTsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL2NtYWtlL09wdGlvbnNHVEsuY21ha2UgYi9Tb3VyY2UvY21ha2Uv
T3B0aW9uc0dUSy5jbWFrZQppbmRleCA0NTYyOTlhLi4xNTY5MDllIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvY21ha2UvT3B0aW9uc0dUSy5jbWFrZQorKysgYi9Tb3VyY2UvY21ha2UvT3B0aW9uc0dUSy5j
bWFrZQpAQCAtMjEzLDYgKzIxMyw3IEBAIHNldChXZWJLaXQyX09VVFBVVF9OQU1FIHdlYmtpdDJn
dGstJHtXRUJLSVRHVEtfQVBJX1ZFUlNJT059KQogc2V0KFdlYktpdDJfV2ViUHJvY2Vzc19PVVRQ
VVRfTkFNRSBXZWJLaXRXZWJQcm9jZXNzKQogc2V0KFdlYktpdDJfTmV0d29ya1Byb2Nlc3NfT1VU
UFVUX05BTUUgV2ViS2l0TmV0d29ya1Byb2Nlc3MpCiBzZXQoV2ViS2l0Ml9QbHVnaW5Qcm9jZXNz
X09VVFBVVF9OQU1FIFdlYktpdFBsdWdpblByb2Nlc3MpCitzZXQoV2ViS2l0Ml9EYXRhYmFzZVBy
b2Nlc3NfT1VUUFVUX05BTUUgV2ViS2l0RGF0YWJhc2VQcm9jZXNzKQogCiBhZGRfZGVmaW5pdGlv
bnMoLURCVUlMRElOR19HVEtfXz0xKQogYWRkX2RlZmluaXRpb25zKC1ER0VUVEVYVF9QQUNLQUdF
PSJXZWJLaXQyR1RLLSR7V0VCS0lUR1RLX0FQSV9WRVJTSU9OfSIpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>243110</attachid>
            <date>2014-12-11 02:01:57 -0800</date>
            <delta_ts>2015-01-22 01:53:49 -0800</delta_ts>
            <desc>Updated patch</desc>
            <filename>wk2-database-process.diff</filename>
            <type>text/plain</type>
            <size>47724</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCA3ZDAwODQ4Li5kZGJjMDMz
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAK
KzIwMTQtMTItMTAgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgor
CisgICAgICAgIFtHVEtdIEFkZCBpbml0aWFsIGRhdGFiYXNlIHByb2Nlc3Mgc3VwcG9ydAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM5NDkxCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTb3VyY2UvY21h
a2UvT3B0aW9uc0dUSy5jbWFrZTogU2V0IFdlYktpdDJfRGF0YWJhc2VQcm9jZXNzX09VVFBVVF9O
QU1FLgorCiAyMDE0LTEyLTA3ICBBbGJlcnRvIEdhcmNpYSAgPGJlcnRvQGlnYWxpYS5jb20+CiAK
ICAgICAgICAgW0dUS10gV2ViS2l0IGhhcyBhIG5ldyByZXF1aXJlZCBkZXBlbmRlbmN5IG9uIEdu
dVRMUwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZwppbmRleCBjZGFmODRjLi5mZWQ5Njg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDE0LTEy
LTEwICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KKworICAgICAg
ICBbR1RLXSBBZGQgaW5pdGlhbCBkYXRhYmFzZSBwcm9jZXNzIHN1cHBvcnQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzOTQ5MQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBzdXBwb3J0IGZvciB1c2lu
ZyBHUmVmUHRyIHdpdGggR1ZhcmlhbnRCdWlsZGVyLgorCisgICAgICAgICogd3RmL2dvYmplY3Qv
R1JlZlB0ci5jcHA6CisgICAgICAgIChXVEY6OnJlZkdQdHIpOgorICAgICAgICAoV1RGOjpkZXJl
ZkdQdHIpOgorICAgICAgICAqIHd0Zi9nb2JqZWN0L0dSZWZQdHIuaDoKKyAgICAgICAgKiB3dGYv
Z29iamVjdC9HVHlwZWRlZnMuaDoKKwogMjAxNC0xMi0wNyAgQW5kcmVhcyBLbGluZyAgPGFrbGlu
Z0BhcHBsZS5jb20+CiAKICAgICAgICAgVXNlIG1vcmUgUGFzc1JlZiBpbiBBdG9taWNTdHJpbmcu
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dSZWZQdHIuY3BwIGIvU291cmNl
L1dURi93dGYvZ29iamVjdC9HUmVmUHRyLmNwcAppbmRleCAxM2RlMTY2Li4xYWEzY2IwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dSZWZQdHIuY3BwCisrKyBiL1NvdXJjZS9X
VEYvd3RmL2dvYmplY3QvR1JlZlB0ci5jcHAKQEAgLTg5LDYgKzg5LDE4IEBAIHRlbXBsYXRlIDw+
IHZvaWQgZGVyZWZHUHRyKEdWYXJpYW50KiBwdHIpCiAgICAgZ192YXJpYW50X3VucmVmKHB0cik7
CiB9CiAKK3RlbXBsYXRlIDw+IEdWYXJpYW50QnVpbGRlciogcmVmR1B0cihHVmFyaWFudEJ1aWxk
ZXIqIHB0cikKK3sKKyAgICBpZiAocHRyKQorICAgICAgICBnX3ZhcmlhbnRfYnVpbGRlcl9yZWYo
cHRyKTsKKyAgICByZXR1cm4gcHRyOworfQorCit0ZW1wbGF0ZSA8PiB2b2lkIGRlcmVmR1B0cihH
VmFyaWFudEJ1aWxkZXIqIHB0cikKK3sKKyAgICBnX3ZhcmlhbnRfYnVpbGRlcl91bnJlZihwdHIp
OworfQorCiB0ZW1wbGF0ZSA8PiBHU291cmNlKiByZWZHUHRyKEdTb3VyY2UqIHB0cikKIHsKICAg
ICBpZiAocHRyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvZ29iamVjdC9HUmVmUHRyLmgg
Yi9Tb3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dSZWZQdHIuaAppbmRleCAyMTZjMTQ1Li5iZWU2OTc1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dSZWZQdHIuaAorKysgYi9Tb3Vy
Y2UvV1RGL3d0Zi9nb2JqZWN0L0dSZWZQdHIuaApAQCAtMjI1LDYgKzIyNSw4IEBAIHRlbXBsYXRl
IDw+IFdURl9FWFBPUlRfUFJJVkFURSBHTWFpbkxvb3AqIHJlZkdQdHIoR01haW5Mb29wKiBwdHIp
OwogdGVtcGxhdGUgPD4gV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZGVyZWZHUHRyKEdNYWluTG9v
cCogcHRyKTsKIHRlbXBsYXRlIDw+IFdURl9FWFBPUlRfUFJJVkFURSBHVmFyaWFudCogcmVmR1B0
cihHVmFyaWFudCogcHRyKTsKIHRlbXBsYXRlIDw+IFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGRl
cmVmR1B0cihHVmFyaWFudCogcHRyKTsKK3RlbXBsYXRlIDw+IFdURl9FWFBPUlRfUFJJVkFURSBH
VmFyaWFudEJ1aWxkZXIqIHJlZkdQdHIoR1ZhcmlhbnRCdWlsZGVyKiBwdHIpOwordGVtcGxhdGUg
PD4gV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZGVyZWZHUHRyKEdWYXJpYW50QnVpbGRlciogcHRy
KTsKIHRlbXBsYXRlIDw+IFdURl9FWFBPUlRfUFJJVkFURSBHU291cmNlKiByZWZHUHRyKEdTb3Vy
Y2UqIHB0cik7CiB0ZW1wbGF0ZSA8PiBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBkZXJlZkdQdHIo
R1NvdXJjZSogcHRyKTsKIHRlbXBsYXRlIDw+IFdURl9FWFBPUlRfUFJJVkFURSBHUHRyQXJyYXkq
IHJlZkdQdHIoR1B0ckFycmF5Kik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9nb2JqZWN0
L0dUeXBlZGVmcy5oIGIvU291cmNlL1dURi93dGYvZ29iamVjdC9HVHlwZWRlZnMuaAppbmRleCA5
OTkwNzkyLi4zMjI5OGQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dUeXBl
ZGVmcy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL2dvYmplY3QvR1R5cGVkZWZzLmgKQEAgLTYwLDYg
KzYwLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgX0dTb2NrZXRDbGllbnQgR1NvY2tldENsaWVudDsKIHR5
cGVkZWYgc3RydWN0IF9HU29ja2V0Q29ubmVjdGlvbiBHU29ja2V0Q29ubmVjdGlvbjsKIHR5cGVk
ZWYgc3RydWN0IF9HU291cmNlIEdTb3VyY2U7CiB0eXBlZGVmIHN0cnVjdCBfR1ZhcmlhbnQgR1Zh
cmlhbnQ7Cit0eXBlZGVmIHN0cnVjdCBfR1ZhcmlhbnRCdWlsZGVyIEdWYXJpYW50QnVpbGRlcjsK
IHR5cGVkZWYgdW5pb24gX0dka0V2ZW50IEdka0V2ZW50OwogdHlwZWRlZiBzdHJ1Y3QgX0dUaW1l
ciBHVGltZXI7CiB0eXBlZGVmIHN0cnVjdCBfR0tleUZpbGUgR0tleUZpbGU7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5k
ZXggZjg0Mjc4NC4uMDY5YjE3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDE0LTEy
LTEwICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KKworICAgICAg
ICBbR1RLXSBBZGQgaW5pdGlhbCBkYXRhYmFzZSBwcm9jZXNzIHN1cHBvcnQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzOTQ5MQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcGxhdGZvcm0vc3FsL1NRTGl0
ZUZpbGVTeXN0ZW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlRmlsZVN5c3RlbTo6b3Bl
bkRhdGFiYXNlKTogVXNlCisgICAgICAgIFdlYkNvcmU6OmZpbGVTeXN0ZW1SZXByZXNlbnRhdGlv
bigpIGZvciB0aGUgZGF0YWJhZSBmaWxlbmFtZSwKKyAgICAgICAgb3RoZXJ3aXNlIHNxbGl0ZTNf
b3BlbigpIGZhaWxzIHdoZW4gdGhlIGZpbGVuYW1lIGNvbnRhaW5zICIlMkUiLgorCiAyMDE0LTEy
LTA3ICBHd2FuZyBZb29uIEh3YW5nICA8eW9vbkBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtUZXh0
dXJlTWFwcGVyXSBOb3JtYWxpemUgcGF0dGVybiB0cmFuc2Zvcm0gZm9yIHBhdHRlcm4gY29tcG9z
aXRpbmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVGaWxl
U3lzdGVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVt
LmNwcAppbmRleCBlOGNmYjBlLi4zYmMwNTBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vc3FsL1NRTGl0ZUZpbGVTeXN0ZW0uY3BwCkBAIC01MCw3ICs1MCw3IEBAIFNRTGl0ZUZp
bGVTeXN0ZW06OlNRTGl0ZUZpbGVTeXN0ZW0oKQogCiBpbnQgU1FMaXRlRmlsZVN5c3RlbTo6b3Bl
bkRhdGFiYXNlKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIHNxbGl0ZTMqKiBkYXRhYmFzZSwgYm9v
bCkKIHsKLSAgICByZXR1cm4gc3FsaXRlM19vcGVuKGZpbGVuYW1lLnV0ZjgoKS5kYXRhKCksIGRh
dGFiYXNlKTsKKyAgICByZXR1cm4gc3FsaXRlM19vcGVuKGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlv
bihmaWxlbmFtZSkuZGF0YSgpLCBkYXRhYmFzZSk7CiB9CiAKIFN0cmluZyBTUUxpdGVGaWxlU3lz
dGVtOjpnZXRGaWxlTmFtZUZvck5ld0RhdGFiYXNlKGNvbnN0IFN0cmluZyYgZGJEaXIsIGNvbnN0
IFN0cmluZyYsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DTWFrZUxpc3RzLnR4dCBiL1Nv
dXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0CmluZGV4IDEwZjE3ZTMuLmE3NmQ3MDMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQy
L0NNYWtlTGlzdHMudHh0CkBAIC0xLDYgKzEsOSBAQAogc2V0KFdlYktpdDJfSU5DTFVERV9ESVJF
Q1RPUklFUwogICAgICIke0pBVkFTQ1JJUFRDT1JFX0RJUn0vbGxpbnQiCiAgICAgIiR7V0VCS0lU
Ml9ESVJ9IgorICAgICIke1dFQktJVDJfRElSfS9EYXRhYmFzZVByb2Nlc3MiCisgICAgIiR7V0VC
S0lUMl9ESVJ9L0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIiCisgICAgIiR7V0VCS0lUMl9ESVJ9
L0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvc3FsaXRlIgogICAgICIke1dFQktJVDJfRElSfS9O
ZXR3b3JrUHJvY2VzcyIKICAgICAiJHtXRUJLSVQyX0RJUn0vTmV0d29ya1Byb2Nlc3MvRmlsZUFQ
SSIKICAgICAiJHtXRUJLSVQyX0RJUn0vUGxhdGZvcm0iCkBAIC0xMSw2ICsxNCw3IEBAIHNldChX
ZWJLaXQyX0lOQ0xVREVfRElSRUNUT1JJRVMKICAgICAiJHtXRUJLSVQyX0RJUn0vU2hhcmVkL0FQ
SS9jIgogICAgICIke1dFQktJVDJfRElSfS9TaGFyZWQvQXV0aGVudGljYXRpb24iCiAgICAgIiR7
V0VCS0lUMl9ESVJ9L1NoYXJlZC9Db3JlSVBDU3VwcG9ydCIKKyAgICAiJHtXRUJLSVQyX0RJUn0v
U2hhcmVkL0RhdGFiYXNlcyIKICAgICAiJHtXRUJLSVQyX0RJUn0vU2hhcmVkL0RhdGFiYXNlcy9J
bmRleGVkREIiCiAgICAgIiR7V0VCS0lUMl9ESVJ9L1NoYXJlZC9Eb3dubG9hZHMiCiAgICAgIiR7
V0VCS0lUMl9ESVJ9L1NoYXJlZC9GaWxlQVBJIgpAQCAtMjQsNiArMjgsNyBAQCBzZXQoV2ViS2l0
Ml9JTkNMVURFX0RJUkVDVE9SSUVTCiAgICAgIiR7V0VCS0lUMl9ESVJ9L1VJUHJvY2Vzcy9BUEkv
QyIKICAgICAiJHtXRUJLSVQyX0RJUn0vVUlQcm9jZXNzL0FQSS9jcHAiCiAgICAgIiR7V0VCS0lU
Ml9ESVJ9L1VJUHJvY2Vzcy9BdXRoZW50aWNhdGlvbiIKKyAgICAiJHtXRUJLSVQyX0RJUn0vVUlQ
cm9jZXNzL0RhdGFiYXNlcyIKICAgICAiJHtXRUJLSVQyX0RJUn0vVUlQcm9jZXNzL0Rvd25sb2Fk
cyIKICAgICAiJHtXRUJLSVQyX0RJUn0vVUlQcm9jZXNzL0luc3BlY3RvclNlcnZlciIKICAgICAi
JHtXRUJLSVQyX0RJUn0vVUlQcm9jZXNzL0xhdW5jaGVyIgpAQCAtMTQ3LDYgKzE1MiwxNiBAQCBp
ZiAoV1RGX1VTRV8zRF9HUkFQSElDUykKIGVuZGlmICgpCiAKIHNldChXZWJLaXQyX1NPVVJDRVMK
KyAgICBEYXRhYmFzZVByb2Nlc3MvRGF0YWJhc2VUb1dlYlByb2Nlc3NDb25uZWN0aW9uLmNwcAor
ICAgIERhdGFiYXNlUHJvY2Vzcy9EYXRhYmFzZVByb2Nlc3MuY3BwCisgICAgRGF0YWJhc2VQcm9j
ZXNzL0luZGV4ZWREQi9EYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0aW9uLmNwcAorICAgIERhdGFi
YXNlUHJvY2Vzcy9JbmRleGVkREIvSURCU2VyaWFsaXphdGlvbi5jcHAKKyAgICBEYXRhYmFzZVBy
b2Nlc3MvSW5kZXhlZERCL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcAorICAgIERhdGFiYXNlUHJvY2Vz
cy9JbmRleGVkREIvVW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyLmNwcAorICAgIERhdGFiYXNl
UHJvY2Vzcy9JbmRleGVkREIvc3FsaXRlL1NRTGl0ZUlEQkN1cnNvci5jcHAKKyAgICBEYXRhYmFz
ZVByb2Nlc3MvSW5kZXhlZERCL3NxbGl0ZS9TUUxpdGVJREJUcmFuc2FjdGlvbi5jcHAKKyAgICBE
YXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL3NxbGl0ZS9VbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdT
dG9yZVNRTGl0ZS5jcHAKKwogICAgIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzLmNwcAogICAgIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAogICAg
IE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzUGxhdGZvcm1TdHJhdGVnaWVzLmNwcApAQCAt
MTg2LDYgKzIwMSw3IEBAIHNldChXZWJLaXQyX1NPVVJDRVMKICAgICBTaGFyZWQvQVBJVVJMUmVx
dWVzdC5jcHAKICAgICBTaGFyZWQvQVBJVVJMUmVzcG9uc2UuY3BwCiAgICAgU2hhcmVkL0FjdGl2
aXR5QXNzZXJ0aW9uLmNwcAorICAgIFNoYXJlZC9Bc3luY1JlcXVlc3QuY3BwCiAgICAgU2hhcmVk
L0Jsb2JEYXRhRmlsZVJlZmVyZW5jZVdpdGhTYW5kYm94RXh0ZW5zaW9uLmNwcAogICAgIFNoYXJl
ZC9DYWNoZU1vZGVsLmNwcAogICAgIFNoYXJlZC9DaGlsZFByb2Nlc3MuY3BwCkBAIC0yMTgsNiAr
MjM0LDcgQEAgc2V0KFdlYktpdDJfU09VUkNFUwogICAgIFNoYXJlZC9XZWJDb250ZXh0TWVudUl0
ZW0uY3BwCiAgICAgU2hhcmVkL1dlYkNvbnRleHRNZW51SXRlbURhdGEuY3BwCiAgICAgU2hhcmVk
L1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAKKyAgICBTaGFyZWQvV2ViQ3Jvc3NUaHJlYWRDb3Bp
ZXIuY3BwCiAgICAgU2hhcmVkL1dlYkV2ZW50LmNwcAogICAgIFNoYXJlZC9XZWJFdmVudENvbnZl
cnNpb24uY3BwCiAgICAgU2hhcmVkL1dlYkdlb2xvY2F0aW9uUG9zaXRpb24uY3BwCkBAIC0yNjcs
NiArMjg0LDkgQEAgc2V0KFdlYktpdDJfU09VUkNFUwogCiAgICAgU2hhcmVkL0F1dGhlbnRpY2F0
aW9uL0F1dGhlbnRpY2F0aW9uTWFuYWdlci5jcHAKIAorICAgIFNoYXJlZC9EYXRhYmFzZXMvRGF0
YWJhc2VQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcAorICAgIFNoYXJlZC9EYXRhYmFzZXMv
SW5kZXhlZERCL0lEQlV0aWxpdGllcy5jcHAKKwogICAgIFNoYXJlZC9Eb3dubG9hZHMvRG93bmxv
YWQuY3BwCiAgICAgU2hhcmVkL0Rvd25sb2Fkcy9Eb3dubG9hZEF1dGhlbnRpY2F0aW9uQ2xpZW50
LmNwcAogICAgIFNoYXJlZC9Eb3dubG9hZHMvRG93bmxvYWRNYW5hZ2VyLmNwcApAQCAtNDAxLDYg
KzQyMSw4IEBAIHNldChXZWJLaXQyX1NPVVJDRVMKICAgICBVSVByb2Nlc3MvQXV0aGVudGljYXRp
b24vV2ViQ3JlZGVudGlhbC5jcHAKICAgICBVSVByb2Nlc3MvQXV0aGVudGljYXRpb24vV2ViUHJv
dGVjdGlvblNwYWNlLmNwcAogCisgICAgVUlQcm9jZXNzL0RhdGFiYXNlcy9EYXRhYmFzZVByb2Nl
c3NQcm94eS5jcHAKKwogICAgIFVJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eS5jcHAK
ICAgICBVSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuY3BwCiAKQEAgLTQ0Myw2
ICs0NjUsOCBAQCBzZXQoV2ViS2l0Ml9TT1VSQ0VTCiAgICAgV2ViUHJvY2Vzcy9Db29raWVzL1dl
YkNvb2tpZU1hbmFnZXIuY3BwCiAKICAgICBXZWJQcm9jZXNzL0RhdGFiYXNlcy9JbmRleGVkREIv
V2ViSURCRmFjdG9yeUJhY2tlbmQuY3BwCisgICAgV2ViUHJvY2Vzcy9EYXRhYmFzZXMvSW5kZXhl
ZERCL1dlYklEQlNlcnZlckNvbm5lY3Rpb24uY3BwCisgICAgV2ViUHJvY2Vzcy9EYXRhYmFzZXMv
V2ViVG9EYXRhYmFzZVByb2Nlc3NDb25uZWN0aW9uLmNwcAogCiAgICAgV2ViUHJvY2Vzcy9GaWxl
QVBJL0Jsb2JSZWdpc3RyeVByb3h5LmNwcAogCkBAIC01NjksNiArNTkzLDEwIEBAIHNldChXZWJL
aXQyX1NPVVJDRVMKICkKIAogc2V0KFdlYktpdDJfTUVTU0FHRVNfSU5fRklMRVMKKyAgICBEYXRh
YmFzZVByb2Nlc3MvRGF0YWJhc2VUb1dlYlByb2Nlc3NDb25uZWN0aW9uLm1lc3NhZ2VzLmluCisg
ICAgRGF0YWJhc2VQcm9jZXNzL0RhdGFiYXNlUHJvY2Vzcy5tZXNzYWdlcy5pbgorICAgIERhdGFi
YXNlUHJvY2Vzcy9JbmRleGVkREIvRGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbi5tZXNzYWdl
cy5pbgorCiAgICAgTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3Mu
bWVzc2FnZXMuaW4KICAgICBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5tZXNzYWdlcy5p
bgogICAgIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5tZXNzYWdlcy5pbgpA
QCAtNjAzLDYgKzYzMSw4IEBAIHNldChXZWJLaXQyX01FU1NBR0VTX0lOX0ZJTEVTCiAgICAgVUlQ
cm9jZXNzL1dlYlJlc291cmNlQ2FjaGVNYW5hZ2VyUHJveHkubWVzc2FnZXMuaW4KICAgICBVSVBy
b2Nlc3MvV2ViVmlicmF0aW9uUHJveHkubWVzc2FnZXMuaW4KIAorICAgIFVJUHJvY2Vzcy9EYXRh
YmFzZXMvRGF0YWJhc2VQcm9jZXNzUHJveHkubWVzc2FnZXMuaW4KKwogICAgIFVJUHJvY2Vzcy9E
b3dubG9hZHMvRG93bmxvYWRQcm94eS5tZXNzYWdlcy5pbgogCiAgICAgVUlQcm9jZXNzL05ldHdv
cmsvTmV0d29ya1Byb2Nlc3NQcm94eS5tZXNzYWdlcy5pbgpAQCAtNjIzLDYgKzY1Myw4IEBAIHNl
dChXZWJLaXQyX01FU1NBR0VTX0lOX0ZJTEVTCiAKICAgICBXZWJQcm9jZXNzL0Nvb2tpZXMvV2Vi
Q29va2llTWFuYWdlci5tZXNzYWdlcy5pbgogCisgICAgV2ViUHJvY2Vzcy9EYXRhYmFzZXMvSW5k
ZXhlZERCL1dlYklEQlNlcnZlckNvbm5lY3Rpb24ubWVzc2FnZXMuaW4KKwogICAgIFdlYlByb2Nl
c3MvRnVsbFNjcmVlbi9XZWJGdWxsU2NyZWVuTWFuYWdlci5tZXNzYWdlcy5pbgogCiAgICAgV2Vi
UHJvY2Vzcy9HZW9sb2NhdGlvbi9XZWJHZW9sb2NhdGlvbk1hbmFnZXIubWVzc2FnZXMuaW4KQEAg
LTY2Nyw2ICs2OTksMTAgQEAgc2V0KE5ldHdvcmtQcm9jZXNzX0xJQlJBUklFUwogICAgIFdlYktp
dDIKICkKIAorc2V0KERhdGFiYXNlUHJvY2Vzc19MSUJSQVJJRVMKKyAgV2ViS2l0MgorKQorCiBz
ZXQoV2ViS2l0Ml9MSUJSQVJJRVMKICAgICBKYXZhU2NyaXB0Q29yZQogICAgIFdlYkNvcmUKQEAg
LTc0OSw2ICs3ODUsMTkgQEAgaWYgKEVOQUJMRV9QTFVHSU5fUFJPQ0VTUykKICAgICBlbmRpZiAo
KQogZW5kaWYgKCkKIAoraWYgKEVOQUJMRV9EQVRBQkFTRV9QUk9DRVNTKQorICAgIGFkZF9kZWZp
bml0aW9ucygtREVOQUJMRV9EQVRBQkFTRV9QUk9DRVNTPTEpCisgICAgYWRkX2V4ZWN1dGFibGUo
RGF0YWJhc2VQcm9jZXNzICR7RGF0YWJhc2VQcm9jZXNzX1NPVVJDRVN9KQorICAgIGFkZF93ZWJr
aXQyX3ByZWZpeF9oZWFkZXIoRGF0YWJhc2VQcm9jZXNzKQorICAgIHRhcmdldF9saW5rX2xpYnJh
cmllcyhEYXRhYmFzZVByb2Nlc3MgJHtEYXRhYmFzZVByb2Nlc3NfTElCUkFSSUVTfSkKKyAgICBz
ZXRfdGFyZ2V0X3Byb3BlcnRpZXMoRGF0YWJhc2VQcm9jZXNzIFBST1BFUlRJRVMgRk9MREVSICJX
ZWJLaXQiKQorICAgIGluc3RhbGwoVEFSR0VUUyBEYXRhYmFzZVByb2Nlc3MgREVTVElOQVRJT04g
IiR7TElCRVhFQ19JTlNUQUxMX0RJUn0iKQorCisgICAgaWYgKFdlYktpdDJfRGF0YWJhc2VQcm9j
ZXNzX09VVFBVVF9OQU1FKQorICAgICAgICBzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoRGF0YWJhc2VQ
cm9jZXNzIFBST1BFUlRJRVMgT1VUUFVUX05BTUUgJHtXZWJLaXQyX0RhdGFiYXNlUHJvY2Vzc19P
VVRQVVRfTkFNRX0pCisgICAgZW5kaWYgKCkKK2VuZGlmICgpCisKIFBPUFVMQVRFX0xJQlJBUllf
VkVSU0lPTihXRUJLSVQyKQogc2V0X3RhcmdldF9wcm9wZXJ0aWVzKFdlYktpdDIgUFJPUEVSVElF
UyBWRVJTSU9OICR7V0VCS0lUMl9WRVJTSU9OfSBTT1ZFUlNJT04gJHtXRUJLSVQyX1ZFUlNJT05f
TUFKT1J9KQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggMzM0NTQ2MC4uMTMwNjViNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDc2IEBACisyMDE0LTEyLTEwICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFA
aWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBBZGQgaW5pdGlhbCBkYXRhYmFzZSBwcm9jZXNz
IHN1cHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEzOTQ5MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEFkZCBpbml0aWFsIHN1cHBvcnQgZm9yIERhdGFiYXNlUHJvY2VzcywgZGlzYWJsZWQgYnkgZGVm
YXVsdCBmb3IKKyAgICAgICAgbm93LgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6IEFkZCBy
ZXF1aXJlZCBmaWxlcyB0byBjb21waWxhdGlvbi4KKyAgICAgICAgKiBEYXRhYmFzZVByb2Nlc3Mv
RGF0YWJhc2VQcm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RGF0YWJhc2VQcm9jZXNzOjpj
cmVhdGVEYXRhYmFzZVRvV2ViUHJvY2Vzc0Nvbm5lY3Rpb24pOgorICAgICAgICBBZGQgdGhlIHVu
aXggZG9tYWluIHNvY2tldHMgaW1wbGVtZW50YXRpb24uCisgICAgICAgICogRGF0YWJhc2VQcm9j
ZXNzL0VudHJ5UG9pbnQvdW5peC9EYXRhYmFzZVByb2Nlc3NNYWluLmNwcDogQWRkZWQuCisgICAg
ICAgIChtYWluKToKKyAgICAgICAgKiBEYXRhYmFzZVByb2Nlc3MvZ3RrL0RhdGFiYXNlUHJvY2Vz
c01haW5HdGsuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6RGF0YWJhc2VQcm9jZXNzTWFp
blVuaXgpOgorICAgICAgICAqIERhdGFiYXNlUHJvY2Vzcy91bml4L0RhdGFiYXNlUHJvY2Vzc01h
aW5Vbml4Lmg6IEFkZGVkLgorICAgICAgICAqIFBsYXRmb3JtR1RLLmNtYWtlOiBBZGQgcmVxdWly
ZWQgZmlsZXMgdG8gY29tcGlsYXRpb24uCisgICAgICAgICogU2hhcmVkL1Byb2Nlc3NFeGVjdXRh
YmxlUGF0aC5oOgorICAgICAgICAqIFNoYXJlZC9ndGsvS2V5ZWREZWNvZGVyLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJLaXQ6OktleWVkRGVjb2Rlcjo6S2V5ZWREZWNvZGVyKToKKyAgICAgICAg
KFdlYktpdDo6S2V5ZWREZWNvZGVyOjp+S2V5ZWREZWNvZGVyKToKKyAgICAgICAgKFdlYktpdDo6
S2V5ZWREZWNvZGVyOjpidWlsZERpY3Rpb25hcnlGcm9tR1ZhcmlhbnQpOgorICAgICAgICAoV2Vi
S2l0OjpLZXllZERlY29kZXI6OmRlY29kZUJ5dGVzKToKKyAgICAgICAgKFdlYktpdDo6S2V5ZWRE
ZWNvZGVyOjpkZWNvZGVCb29sKToKKyAgICAgICAgKFdlYktpdDo6S2V5ZWREZWNvZGVyOjpkZWNv
ZGVVSW50MzIpOgorICAgICAgICAoV2ViS2l0OjpLZXllZERlY29kZXI6OmRlY29kZUludDMyKToK
KyAgICAgICAgKFdlYktpdDo6S2V5ZWREZWNvZGVyOjpkZWNvZGVJbnQ2NCk6CisgICAgICAgIChX
ZWJLaXQ6OktleWVkRGVjb2Rlcjo6ZGVjb2RlRmxvYXQpOgorICAgICAgICAoV2ViS2l0OjpLZXll
ZERlY29kZXI6OmRlY29kZURvdWJsZSk6CisgICAgICAgIChXZWJLaXQ6OktleWVkRGVjb2Rlcjo6
ZGVjb2RlU3RyaW5nKToKKyAgICAgICAgKFdlYktpdDo6S2V5ZWREZWNvZGVyOjpiZWdpbk9iamVj
dCk6CisgICAgICAgIChXZWJLaXQ6OktleWVkRGVjb2Rlcjo6ZW5kT2JqZWN0KToKKyAgICAgICAg
KFdlYktpdDo6S2V5ZWREZWNvZGVyOjpiZWdpbkFycmF5KToKKyAgICAgICAgKFdlYktpdDo6S2V5
ZWREZWNvZGVyOjpiZWdpbkFycmF5RWxlbWVudCk6CisgICAgICAgIChXZWJLaXQ6OktleWVkRGVj
b2Rlcjo6ZW5kQXJyYXlFbGVtZW50KToKKyAgICAgICAgKFdlYktpdDo6S2V5ZWREZWNvZGVyOjpl
bmRBcnJheSk6CisgICAgICAgICogU2hhcmVkL2d0ay9LZXllZERlY29kZXIuaDogQWRkZWQuCisg
ICAgICAgICogU2hhcmVkL2d0ay9LZXllZEVuY29kZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YktpdDo6S2V5ZWRFbmNvZGVyOjpLZXllZEVuY29kZXIpOgorICAgICAgICAoV2ViS2l0OjpLZXll
ZEVuY29kZXI6On5LZXllZEVuY29kZXIpOgorICAgICAgICAoV2ViS2l0OjpLZXllZEVuY29kZXI6
OmVuY29kZUJ5dGVzKToKKyAgICAgICAgKFdlYktpdDo6S2V5ZWRFbmNvZGVyOjplbmNvZGVCb29s
KToKKyAgICAgICAgKFdlYktpdDo6S2V5ZWRFbmNvZGVyOjplbmNvZGVVSW50MzIpOgorICAgICAg
ICAoV2ViS2l0OjpLZXllZEVuY29kZXI6OmVuY29kZUludDMyKToKKyAgICAgICAgKFdlYktpdDo6
S2V5ZWRFbmNvZGVyOjplbmNvZGVJbnQ2NCk6CisgICAgICAgIChXZWJLaXQ6OktleWVkRW5jb2Rl
cjo6ZW5jb2RlRmxvYXQpOgorICAgICAgICAoV2ViS2l0OjpLZXllZEVuY29kZXI6OmVuY29kZURv
dWJsZSk6CisgICAgICAgIChXZWJLaXQ6OktleWVkRW5jb2Rlcjo6ZW5jb2RlU3RyaW5nKToKKyAg
ICAgICAgKFdlYktpdDo6S2V5ZWRFbmNvZGVyOjpiZWdpbk9iamVjdCk6CisgICAgICAgIChXZWJL
aXQ6OktleWVkRW5jb2Rlcjo6ZW5kT2JqZWN0KToKKyAgICAgICAgKFdlYktpdDo6S2V5ZWRFbmNv
ZGVyOjpiZWdpbkFycmF5KToKKyAgICAgICAgKFdlYktpdDo6S2V5ZWRFbmNvZGVyOjpiZWdpbkFy
cmF5RWxlbWVudCk6CisgICAgICAgIChXZWJLaXQ6OktleWVkRW5jb2Rlcjo6ZW5kQXJyYXlFbGVt
ZW50KToKKyAgICAgICAgKFdlYktpdDo6S2V5ZWRFbmNvZGVyOjplbmRBcnJheSk6CisgICAgICAg
IChXZWJLaXQ6OktleWVkRW5jb2Rlcjo6ZmluaXNoRW5jb2RpbmcpOgorICAgICAgICAqIFNoYXJl
ZC9ndGsvS2V5ZWRFbmNvZGVyLmg6IEFkZGVkLgorICAgICAgICAqIFNoYXJlZC9ndGsvUHJvY2Vz
c0V4ZWN1dGFibGVQYXRoR3RrLmNwcDoKKyAgICAgICAgKFdlYktpdDo6ZXhlY3V0YWJsZVBhdGhP
ZkRhdGFiYXNlUHJvY2Vzcyk6CisgICAgICAgICogVUlQcm9jZXNzL0RhdGFiYXNlcy9EYXRhYmFz
ZVByb2Nlc3NQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRhdGFiYXNlUHJvY2Vzc1Byb3h5
OjpkaWRDcmVhdGVEYXRhYmFzZVRvV2ViUHJvY2Vzc0Nvbm5lY3Rpb24pOgorICAgICAgICBBZGQg
dGhlIHVuaXggZG9tYWluIHNvY2tldHMgaW1wbGVtZW50YXRpb24uCisgICAgICAgICogVUlQcm9j
ZXNzL0xhdW5jaGVyL2d0ay9Qcm9jZXNzTGF1bmNoZXJHdGsuY3BwOgorICAgICAgICAoV2ViS2l0
OjpQcm9jZXNzTGF1bmNoZXI6OmxhdW5jaFByb2Nlc3MpOiBIYW5kbGUgdGhlCisgICAgICAgIERh
dGFiYXNlUHJvY2VzcyB0b28uCisgICAgICAgICogVUlQcm9jZXNzL2d0ay9XZWJDb250ZXh0R3Rr
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGV4dDo6cGxhdGZvcm1EZWZhdWx0SW5kZXhl
ZERCRGF0YWJhc2VEaXJlY3RvcnkpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUHJvY2Vzcy5j
cHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OmVuc3VyZVdlYlRvRGF0YWJhc2VQcm9j
ZXNzQ29ubmVjdGlvbik6IEFkZAorICAgICAgICB0aGUgdW5peCBkb21haW4gc29ja2V0cyBpbXBs
ZW1lbnRhdGlvbi4KKwogMjAxNC0xMi0wNyAgR3dhbmcgWW9vbiBId2FuZyAgPHlvb25AaWdhbGlh
LmNvbT4KIAogICAgICAgICBbQ29vcmRpbmF0ZWRHcmFwaGljc10gQ2hhbmdlIHRoZSBuYW1lc3Bh
Y2Ugb2YgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUgYW5kIENvb3JkaW5hdGVkR3JhcGhpY3NTY2Vu
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0RhdGFiYXNlUHJv
Y2Vzcy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvRGF0YWJhc2VQcm9jZXNz
LmNwcAppbmRleCA1M2IxZTkyLi40MzZlMTNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9E
YXRhYmFzZVByb2Nlc3MvRGF0YWJhc2VQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9E
YXRhYmFzZVByb2Nlc3MvRGF0YWJhc2VQcm9jZXNzLmNwcApAQCAtMzksNiArMzksNyBAQAogI2lu
Y2x1ZGUgIldlYk9yaWdpbkRhdGFNYW5hZ2VyTWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJPcmln
aW5EYXRhTWFuYWdlclByb3h5TWVzc2FnZXMuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0ZpbGVTeXN0
ZW0uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9UZXh0RW5jb2RpbmcuaD4KICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogCkBAIC0x
ODYsNiArMTg3LDE0IEBAIHZvaWQgRGF0YWJhc2VQcm9jZXNzOjpjcmVhdGVEYXRhYmFzZVRvV2Vi
UHJvY2Vzc0Nvbm5lY3Rpb24oKQogCiAgICAgSVBDOjpBdHRhY2htZW50IGNsaWVudFBvcnQobGlz
dGVuaW5nUG9ydCwgTUFDSF9NU0dfVFlQRV9NQUtFX1NFTkQpOwogICAgIHBhcmVudFByb2Nlc3ND
b25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OkRhdGFiYXNlUHJvY2Vzc1Byb3h5OjpEaWRDcmVh
dGVEYXRhYmFzZVRvV2ViUHJvY2Vzc0Nvbm5lY3Rpb24oY2xpZW50UG9ydCksIDApOworI2VsaWYg
VVNFKFVOSVhfRE9NQUlOX1NPQ0tFVFMpCisgICAgSVBDOjpDb25uZWN0aW9uOjpTb2NrZXRQYWly
IHNvY2tldFBhaXIgPSBJUEM6OkNvbm5lY3Rpb246OmNyZWF0ZVBsYXRmb3JtQ29ubmVjdGlvbigp
OworCisgICAgUmVmUHRyPERhdGFiYXNlVG9XZWJQcm9jZXNzQ29ubmVjdGlvbj4gY29ubmVjdGlv
biA9IERhdGFiYXNlVG9XZWJQcm9jZXNzQ29ubmVjdGlvbjo6Y3JlYXRlKHNvY2tldFBhaXIuc2Vy
dmVyKTsKKyAgICBtX2RhdGFiYXNlVG9XZWJQcm9jZXNzQ29ubmVjdGlvbnMuYXBwZW5kKGNvbm5l
Y3Rpb24ucmVsZWFzZSgpKTsKKworICAgIElQQzo6QXR0YWNobWVudCBjbGllbnRTb2NrZXQoc29j
a2V0UGFpci5jbGllbnQpOworICAgIHBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVz
c2FnZXM6OkRhdGFiYXNlUHJvY2Vzc1Byb3h5OjpEaWRDcmVhdGVEYXRhYmFzZVRvV2ViUHJvY2Vz
c0Nvbm5lY3Rpb24oY2xpZW50U29ja2V0KSwgMCk7CiAjZWxzZQogICAgIG5vdEltcGxlbWVudGVk
KCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9F
bnRyeVBvaW50L3VuaXgvRGF0YWJhc2VQcm9jZXNzTWFpbi5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9E
YXRhYmFzZVByb2Nlc3MvRW50cnlQb2ludC91bml4L0RhdGFiYXNlUHJvY2Vzc01haW4uY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyY2Q0NjQKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvRW50cnlQb2ludC91bml4L0RhdGFi
YXNlUHJvY2Vzc01haW4uY3BwCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgIkRhdGFiYXNlUHJvY2Vzc01h
aW5Vbml4LmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKK2ludCBtYWluKGludCBhcmdj
LCBjaGFyKiogYXJndikKK3sKKyAgICByZXR1cm4gRGF0YWJhc2VQcm9jZXNzTWFpblVuaXgoYXJn
YywgYXJndik7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3Mv
Z3RrL0RhdGFiYXNlUHJvY2Vzc01haW5HdGsuY3BwIGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQ
cm9jZXNzL2d0ay9EYXRhYmFzZVByb2Nlc3NNYWluR3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi42NDNjNWNhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dDIvRGF0YWJhc2VQcm9jZXNzL2d0ay9EYXRhYmFzZVByb2Nlc3NNYWluR3RrLmNwcApAQCAtMCww
ICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IElnYWxpYSBTLkwuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJEYXRhYmFzZVByb2Nlc3NNYWluVW5p
eC5oIgorCisjaWYgRU5BQkxFKERBVEFCQVNFX1BST0NFU1MpCisKKyNpbmNsdWRlICJDaGlsZFBy
b2Nlc3NNYWluLmgiCisjaW5jbHVkZSAiRGF0YWJhc2VQcm9jZXNzLmgiCisjaW5jbHVkZSA8Z3Rr
L2d0ay5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7
CisKK2NsYXNzIERhdGFiYXNlUHJvY2Vzc01haW4gZmluYWw6IHB1YmxpYyBDaGlsZFByb2Nlc3NN
YWluQmFzZSB7CitwdWJsaWM6CisgICAgYm9vbCBwbGF0Zm9ybUluaXRpYWxpemUoKSBvdmVycmlk
ZQorICAgIHsKKyAgICAgICAgZ3RrX2luaXQobnVsbHB0ciwgbnVsbHB0cik7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KK307CisKK2ludCBEYXRhYmFzZVByb2Nlc3NNYWluVW5peChpbnQg
YXJnYywgY2hhcioqIGFyZ3YpCit7CisgICAgcmV0dXJuIENoaWxkUHJvY2Vzc01haW48RGF0YWJh
c2VQcm9jZXNzLCBEYXRhYmFzZVByb2Nlc3NNYWluPihhcmdjLCBhcmd2KTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoREFUQUJBU0VfUFJPQ0VTUykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy91bml4L0RhdGFiYXNlUHJv
Y2Vzc01haW5Vbml4LmggYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvdW5peC9EYXRh
YmFzZVByb2Nlc3NNYWluVW5peC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LmMwZDdiZjQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nl
c3MvdW5peC9EYXRhYmFzZVByb2Nlc3NNYWluVW5peC5oCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBEYXRh
YmFzZVByb2Nlc3NNYWluVW5peF9oCisjZGVmaW5lIERhdGFiYXNlUHJvY2Vzc01haW5Vbml4X2gK
KworI2lmIEVOQUJMRShEQVRBQkFTRV9QUk9DRVNTKQorCisjaW5jbHVkZSA8V2ViS2l0L1dLQmFz
ZS5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworZXh0ZXJuICJDIiB7CitXS19FWFBPUlQgaW50
IERhdGFiYXNlUHJvY2Vzc01haW5Vbml4KGludCBhcmdjLCBjaGFyKiogYXJndik7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRGF0YWJhc2VQcm9jZXNzTWFpblVuaXhf
aAorCisjZW5kaWYgLy8gRU5BQkxFKERBVEFCQVNFX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZSBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RL
LmNtYWtlCmluZGV4IDI4MTk3ZGQuLmMzOGQ4N2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1BsYXRmb3JtR1RLLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtl
CkBAIC0xNSw2ICsxNSw4IEBAIGFkZF9kZWZpbml0aW9ucygtRExJQkRJUj0iJHtMSUJfSU5TVEFM
TF9ESVJ9IikKIHNldChXZWJLaXQyX1VTRV9QUkVGSVhfSEVBREVSIE9OKQogCiBsaXN0KEFQUEVO
RCBXZWJLaXQyX1NPVVJDRVMKKyAgICBEYXRhYmFzZVByb2Nlc3MvZ3RrL0RhdGFiYXNlUHJvY2Vz
c01haW5HdGsuY3BwCisKICAgICBOZXR3b3JrUHJvY2Vzcy9ndGsvTmV0d29ya1Byb2Nlc3NNYWlu
R3RrLmNwcAogCiAgICAgTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrUHJvY2Vzc1NvdXAuY3Bw
CkBAIC00OCw2ICs1MCw4IEBAIGxpc3QoQVBQRU5EIFdlYktpdDJfU09VUkNFUwogICAgIFNoYXJl
ZC9jYWlyby9TaGFyZWFibGVCaXRtYXBDYWlyby5jcHAKIAogICAgIFNoYXJlZC9ndGsvQXJndW1l
bnRDb2RlcnNHdGsuY3BwCisgICAgU2hhcmVkL2d0ay9LZXllZEVuY29kZXIuY3BwCisgICAgU2hh
cmVkL2d0ay9LZXllZERlY29kZXIuY3BwCiAgICAgU2hhcmVkL2d0ay9OYXRpdmVXZWJLZXlib2Fy
ZEV2ZW50R3RrLmNwcAogICAgIFNoYXJlZC9ndGsvTmF0aXZlV2ViTW91c2VFdmVudEd0ay5jcHAK
ICAgICBTaGFyZWQvZ3RrL05hdGl2ZVdlYlRvdWNoRXZlbnRHdGsuY3BwCkBAIC03MCw2ICs3NCw4
IEBAIGxpc3QoQVBQRU5EIFdlYktpdDJfU09VUkNFUwogCiAgICAgU2hhcmVkL3VuaXgvQ2hpbGRQ
cm9jZXNzTWFpbi5jcHAKIAorICAgIFVJUHJvY2Vzcy9EYXRhYmFzZXMvZ3RrL0RhdGFiYXNlUHJv
Y2Vzc1Byb3h5R3RrLmNwcAorCiAgICAgVUlQcm9jZXNzL0RlZmF1bHRVbmRvQ29udHJvbGxlci5j
cHAKICAgICBVSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eUltcGwuY3BwCiAKQEAgLTQxNiw2ICs0
MjIsNyBAQCBsaXN0KEFQUEVORCBXZWJLaXQyX0lOQ0xVREVfRElSRUNUT1JJRVMKICAgICAiJHtX
RUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUiCiAgICAgIiR7V0VCQ09SRV9E
SVJ9L3BsYXRmb3JtL25ldHdvcmsvc291cCIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0v
dGV4dC9lbmNoYW50IgorICAgICIke1dFQktJVDJfRElSfS9EYXRhYmFzZVByb2Nlc3MvdW5peCIK
ICAgICAiJHtXRUJLSVQyX0RJUn0vTmV0d29ya1Byb2Nlc3MvZ3RrIgogICAgICIke1dFQktJVDJf
RElSfS9OZXR3b3JrUHJvY2Vzcy91bml4IgogICAgICIke1dFQktJVDJfRElSfS9TaGFyZWQvQVBJ
L2MvZ3RrIgpAQCAtNDY3LDYgKzQ3NCwxMCBAQCBsaXN0KEFQUEVORCBOZXR3b3JrUHJvY2Vzc19T
T1VSQ0VTCiAgICAgTmV0d29ya1Byb2Nlc3MvRW50cnlQb2ludC91bml4L05ldHdvcmtQcm9jZXNz
TWFpbi5jcHAKICkKIAorbGlzdChBUFBFTkQgRGF0YWJhc2VQcm9jZXNzX1NPVVJDRVMKKyAgICBE
YXRhYmFzZVByb2Nlc3MvRW50cnlQb2ludC91bml4L0RhdGFiYXNlUHJvY2Vzc01haW4uY3BwCisp
CisKIGZpbGUoV1JJVEUgJHtDTUFLRV9CSU5BUllfRElSfS90ZXN0X2F0b21pYy5jcHAKICAgICAg
IiNpbmNsdWRlIDxhdG9taWM+XG4iCiAgICAgICJpbnQgbWFpbigpIHsgc3RkOjphdG9taWM8aW50
NjRfdD4gaSgwKTsgaSsrOyByZXR1cm4gMDsgfVxuIikKQEAgLTg5NSw2ICs5MDYsNyBAQCBhZGRf
Y3VzdG9tX2NvbW1hbmQoCiAgICAgICAgICAgICAke1dlYktpdDJfU09VUkNFU30KICAgICAgICAg
ICAgICR7V2ViUHJvY2Vzc19TT1VSQ0VTfQogICAgICAgICAgICAgJHtOZXR3b3JrUHJvY2Vzc19T
T1VSQ0VTfQorICAgICAgICAgICAgJHtEYXRhYmFzZVByb2Nlc3NfU09VUkNFU30KICAgICAgICAg
ICAgICR7UGx1Z2luUHJvY2Vzc0dUSzJfU09VUkNFU30KICAgICAgICAgICAgICR7UGx1Z2luUHJv
Y2Vzc19TT1VSQ0VTfQogICAgICAgICAgICAgJHtXZWJLaXQyX0hFQURFUlN9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvUHJvY2Vzc0V4ZWN1dGFibGVQYXRoLmggYi9Tb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvUHJvY2Vzc0V4ZWN1dGFibGVQYXRoLmgKaW5kZXggZDc4ZWJjZC4uNGZm
ZDExYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1Byb2Nlc3NFeGVjdXRhYmxl
UGF0aC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Qcm9jZXNzRXhlY3V0YWJsZVBhdGgu
aApAQCAtMzUsNyArMzUsOSBAQCBTdHJpbmcgZXhlY3V0YWJsZVBhdGhPZlBsdWdpblByb2Nlc3Mo
KTsKICNpZiBFTkFCTEUoTkVUV09SS19QUk9DRVNTKQogU3RyaW5nIGV4ZWN1dGFibGVQYXRoT2ZO
ZXR3b3JrUHJvY2VzcygpOwogI2VuZGlmCi0KKyNpZiBFTkFCTEUoREFUQUJBU0VfUFJPQ0VTUykK
K1N0cmluZyBleGVjdXRhYmxlUGF0aE9mRGF0YWJhc2VQcm9jZXNzKCk7CisjZW5kaWYKIH0KIAog
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL0tleWVkRGVjb2Rl
ci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL0tleWVkRGVjb2Rlci5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODY0YzVmNwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvS2V5ZWREZWNvZGVyLmNwcApAQCAtMCwwICsxLDE5
MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiS2V5ZWREZWNvZGVyLmgiCisKKyNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitLZXllZERlY29k
ZXI6OktleWVkRGVjb2Rlcihjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkKK3sKKyAg
ICBHUmVmUHRyPEdCeXRlcz4gYnl0ZXMgPSBhZG9wdEdSZWYoZ19ieXRlc19uZXcoZGF0YSwgc2l6
ZSkpOworICAgIEdSZWZQdHI8R1ZhcmlhbnQ+IHZhcmlhbnQgPSBnX3ZhcmlhbnRfbmV3X2Zyb21f
Ynl0ZXMoR19WQVJJQU5UX1RZUEUoImF7c3Z9IiksIGJ5dGVzLmdldCgpLCBUUlVFKTsKKyAgICBI
YXNoTWFwPFN0cmluZywgR1JlZlB0cjxHVmFyaWFudD4+IGRpY3Rpb25hcnk7CisgICAgYnVpbGRE
aWN0aW9uYXJ5RnJvbUdWYXJpYW50KHZhcmlhbnQuZ2V0KCksIGRpY3Rpb25hcnkpOworICAgIG1f
ZGljdGlvbmFyeVN0YWNrLmFwcGVuZChXVEY6Om1vdmUoZGljdGlvbmFyeSkpOworfQorCitLZXll
ZERlY29kZXI6On5LZXllZERlY29kZXIoKQoreworICAgIEFTU0VSVChtX2RpY3Rpb25hcnlTdGFj
ay5zaXplKCkgPT0gMSk7CisgICAgQVNTRVJUKG1fYXJyYXlTdGFjay5pc0VtcHR5KCkpOworICAg
IEFTU0VSVChtX2FycmF5SW5kZXhTdGFjay5pc0VtcHR5KCkpOworfQorCit2b2lkIEtleWVkRGVj
b2Rlcjo6YnVpbGREaWN0aW9uYXJ5RnJvbUdWYXJpYW50KEdWYXJpYW50KiB2YXJpYW50LCBIYXNo
TWFwPFN0cmluZywgR1JlZlB0cjxHVmFyaWFudD4+JiBkaWN0aW9uYXJ5KQoreworICAgIEdWYXJp
YW50SXRlciBpdGVyOworICAgIGdfdmFyaWFudF9pdGVyX2luaXQoJml0ZXIsIHZhcmlhbnQpOwor
ICAgIGNvbnN0IGNoYXIqIGtleTsKKyAgICBHVmFyaWFudCogdmFsdWU7CisgICAgd2hpbGUgKGdf
dmFyaWFudF9pdGVyX2xvb3AoJml0ZXIsICJ7JnN2fSIsICZrZXksICZ2YWx1ZSkpCisgICAgICAg
IGRpY3Rpb25hcnkuc2V0KFN0cmluZzo6ZnJvbVVURjgoa2V5KSwgdmFsdWUpOworfQorCitib29s
IEtleWVkRGVjb2Rlcjo6ZGVjb2RlQnl0ZXMoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IHVpbnQ4
X3QqJiBieXRlcywgc2l6ZV90JiBzaXplKQoreworICAgIEdSZWZQdHI8R1ZhcmlhbnQ+IHZhbHVl
ID0gbV9kaWN0aW9uYXJ5U3RhY2subGFzdCgpLmdldChrZXkpOworICAgIGlmICghdmFsdWUpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHNpemUgPSBnX3ZhcmlhbnRfZ2V0X3NpemUodmFs
dWUuZ2V0KCkpOworICAgIGJ5dGVzID0gc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGdfdmFy
aWFudF9nZXRfZGF0YSh2YWx1ZS5nZXQoKSkpOworICAgIHJldHVybiB0cnVlOworfQorCitib29s
IEtleWVkRGVjb2Rlcjo6ZGVjb2RlQm9vbChjb25zdCBTdHJpbmcmIGtleSwgYm9vbCYgcmVzdWx0
KQoreworICAgIEdSZWZQdHI8R1ZhcmlhbnQ+IHZhbHVlID0gbV9kaWN0aW9uYXJ5U3RhY2subGFz
dCgpLmdldChrZXkpOworICAgIGlmICghdmFsdWUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIHJlc3VsdCA9IGdfdmFyaWFudF9nZXRfYm9vbGVhbih2YWx1ZS5nZXQoKSk7CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK2Jvb2wgS2V5ZWREZWNvZGVyOjpkZWNvZGVVSW50MzIoY29uc3QgU3Ry
aW5nJiBrZXksIHVpbnQzMl90JiByZXN1bHQpCit7CisgICAgR1JlZlB0cjxHVmFyaWFudD4gdmFs
dWUgPSBtX2RpY3Rpb25hcnlTdGFjay5sYXN0KCkuZ2V0KGtleSk7CisgICAgaWYgKCF2YWx1ZSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmVzdWx0ID0gZ192YXJpYW50X2dldF91aW50
MzIodmFsdWUuZ2V0KCkpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEtleWVkRGVjb2Rl
cjo6ZGVjb2RlSW50MzIoY29uc3QgU3RyaW5nJiBrZXksIGludDMyX3QmIHJlc3VsdCkKK3sKKyAg
ICBHUmVmUHRyPEdWYXJpYW50PiB2YWx1ZSA9IG1fZGljdGlvbmFyeVN0YWNrLmxhc3QoKS5nZXQo
a2V5KTsKKyAgICBpZiAoIXZhbHVlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXN1
bHQgPSBnX3ZhcmlhbnRfZ2V0X2ludDMyKHZhbHVlLmdldCgpKTsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworYm9vbCBLZXllZERlY29kZXI6OmRlY29kZUludDY0KGNvbnN0IFN0cmluZyYga2V5LCBp
bnQ2NF90JiByZXN1bHQpCit7CisgICAgR1JlZlB0cjxHVmFyaWFudD4gdmFsdWUgPSBtX2RpY3Rp
b25hcnlTdGFjay5sYXN0KCkuZ2V0KGtleSk7CisgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgcmVzdWx0ID0gZ192YXJpYW50X2dldF9pbnQ2NCh2YWx1ZS5nZXQo
KSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgS2V5ZWREZWNvZGVyOjpkZWNvZGVGbG9h
dChjb25zdCBTdHJpbmcmIGtleSwgZmxvYXQmIHJlc3VsdCkKK3sKKyAgICBHUmVmUHRyPEdWYXJp
YW50PiB2YWx1ZSA9IG1fZGljdGlvbmFyeVN0YWNrLmxhc3QoKS5nZXQoa2V5KTsKKyAgICBpZiAo
IXZhbHVlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXN1bHQgPSBnX3ZhcmlhbnRf
Z2V0X2RvdWJsZSh2YWx1ZS5nZXQoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgS2V5
ZWREZWNvZGVyOjpkZWNvZGVEb3VibGUoY29uc3QgU3RyaW5nJiBrZXksIGRvdWJsZSYgcmVzdWx0
KQoreworICAgIEdSZWZQdHI8R1ZhcmlhbnQ+IHZhbHVlID0gbV9kaWN0aW9uYXJ5U3RhY2subGFz
dCgpLmdldChrZXkpOworICAgIGlmICghdmFsdWUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIHJlc3VsdCA9IGdfdmFyaWFudF9nZXRfZG91YmxlKHZhbHVlLmdldCgpKTsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworYm9vbCBLZXllZERlY29kZXI6OmRlY29kZVN0cmluZyhjb25zdCBTdHJp
bmcmIGtleSwgU3RyaW5nJiByZXN1bHQpCit7CisgICAgR1JlZlB0cjxHVmFyaWFudD4gdmFsdWUg
PSBtX2RpY3Rpb25hcnlTdGFjay5sYXN0KCkuZ2V0KGtleSk7CisgICAgaWYgKCF2YWx1ZSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmVzdWx0ID0gU3RyaW5nOjpmcm9tVVRGOChnX3Zh
cmlhbnRfZ2V0X3N0cmluZyh2YWx1ZS5nZXQoKSwgbnVsbHB0cikpOworICAgIHJldHVybiB0cnVl
OworfQorCitib29sIEtleWVkRGVjb2Rlcjo6YmVnaW5PYmplY3QoY29uc3QgU3RyaW5nJiBrZXkp
Cit7CisgICAgR1JlZlB0cjxHVmFyaWFudD4gdmFsdWUgPSBtX2RpY3Rpb25hcnlTdGFjay5sYXN0
KCkuZ2V0KGtleSk7CisgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgSGFzaE1hcDxTdHJpbmcsIEdSZWZQdHI8R1ZhcmlhbnQ+PiBkaWN0aW9uYXJ5OworICAgIGJ1
aWxkRGljdGlvbmFyeUZyb21HVmFyaWFudCh2YWx1ZS5nZXQoKSwgZGljdGlvbmFyeSk7CisgICAg
bV9kaWN0aW9uYXJ5U3RhY2suYXBwZW5kKFdURjo6bW92ZShkaWN0aW9uYXJ5KSk7CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK3ZvaWQgS2V5ZWREZWNvZGVyOjplbmRPYmplY3QoKQoreworICAgIG1f
ZGljdGlvbmFyeVN0YWNrLnJlbW92ZUxhc3QoKTsKK30KKworYm9vbCBLZXllZERlY29kZXI6OmJl
Z2luQXJyYXkoY29uc3QgU3RyaW5nJiBrZXkpCit7CisgICAgR1JlZlB0cjxHVmFyaWFudD4gdmFs
dWUgPSBtX2RpY3Rpb25hcnlTdGFjay5sYXN0KCkuZ2V0KGtleSk7CisgICAgaWYgKCF2YWx1ZSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgbV9hcnJheVN0YWNrLmFwcGVuZCh2YWx1ZS5n
ZXQoKSk7CisgICAgbV9hcnJheUluZGV4U3RhY2suYXBwZW5kKDApOworICAgIHJldHVybiB0cnVl
OworfQorCitib29sIEtleWVkRGVjb2Rlcjo6YmVnaW5BcnJheUVsZW1lbnQoKQoreworICAgIGlm
IChtX2FycmF5SW5kZXhTdGFjay5sYXN0KCkgPj0gZ192YXJpYW50X25fY2hpbGRyZW4obV9hcnJh
eVN0YWNrLmxhc3QoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEdSZWZQdHI8R1Zh
cmlhbnQ+IHZhcmlhbnQgPSBhZG9wdEdSZWYoZ192YXJpYW50X2dldF9jaGlsZF92YWx1ZShtX2Fy
cmF5U3RhY2subGFzdCgpLCBtX2FycmF5SW5kZXhTdGFjay5sYXN0KCkrKykpOworICAgIEhhc2hN
YXA8U3RyaW5nLCBHUmVmUHRyPEdWYXJpYW50Pj4gZGljdGlvbmFyeTsKKyAgICBidWlsZERpY3Rp
b25hcnlGcm9tR1ZhcmlhbnQodmFyaWFudC5nZXQoKSwgZGljdGlvbmFyeSk7CisgICAgbV9kaWN0
aW9uYXJ5U3RhY2suYXBwZW5kKFdURjo6bW92ZShkaWN0aW9uYXJ5KSk7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK3ZvaWQgS2V5ZWREZWNvZGVyOjplbmRBcnJheUVsZW1lbnQoKQoreworICAgIG1f
ZGljdGlvbmFyeVN0YWNrLnJlbW92ZUxhc3QoKTsKK30KKwordm9pZCBLZXllZERlY29kZXI6OmVu
ZEFycmF5KCkKK3sKKyAgICBtX2FycmF5U3RhY2sucmVtb3ZlTGFzdCgpOworICAgIG1fYXJyYXlJ
bmRleFN0YWNrLnJlbW92ZUxhc3QoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL0tleWVkRGVjb2Rlci5oIGIvU291cmNl
L1dlYktpdDIvU2hhcmVkL2d0ay9LZXllZERlY29kZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi4zMGVjYTlmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIv
U2hhcmVkL2d0ay9LZXllZERlY29kZXIuaApAQCAtMCwwICsxLDcwIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE0IElnYWlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBLZXllZERlY29kZXJf
aAorI2RlZmluZSBLZXllZERlY29kZXJfaAorCisjaW5jbHVkZSA8V2ViQ29yZS9LZXllZENvZGlu
Zy5oPgorI2luY2x1ZGUgPGdsaWIuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1
ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNo
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJLaXQg
eworCitjbGFzcyBLZXllZERlY29kZXIgZmluYWwgOiBwdWJsaWMgV2ViQ29yZTo6S2V5ZWREZWNv
ZGVyIHsKK3B1YmxpYzoKKyAgICBLZXllZERlY29kZXIoY29uc3QgdWludDhfdCogZGF0YSwgc2l6
ZV90KTsKKyAgICB2aXJ0dWFsIH5LZXllZERlY29kZXIoKSBvdmVycmlkZTsKKworcHJpdmF0ZToK
KyAgICB2aXJ0dWFsIGJvb2wgZGVjb2RlQnl0ZXMoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IHVp
bnQ4X3QqJiwgc2l6ZV90Jikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIGRlY29kZUJvb2wo
Y29uc3QgU3RyaW5nJiBrZXksIGJvb2wmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgZGVj
b2RlVUludDMyKGNvbnN0IFN0cmluZyYga2V5LCB1aW50MzJfdCYpIG92ZXJyaWRlOworICAgIHZp
cnR1YWwgYm9vbCBkZWNvZGVJbnQzMihjb25zdCBTdHJpbmcmIGtleSwgaW50MzJfdCYpIG92ZXJy
aWRlOworICAgIHZpcnR1YWwgYm9vbCBkZWNvZGVJbnQ2NChjb25zdCBTdHJpbmcmIGtleSwgaW50
NjRfdCYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBkZWNvZGVGbG9hdChjb25zdCBTdHJp
bmcmIGtleSwgZmxvYXQmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgZGVjb2RlRG91Ymxl
KGNvbnN0IFN0cmluZyYga2V5LCBkb3VibGUmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wg
ZGVjb2RlU3RyaW5nKGNvbnN0IFN0cmluZyYga2V5LCBTdHJpbmcmKSBvdmVycmlkZTsKKworICAg
IHZpcnR1YWwgYm9vbCBiZWdpbk9iamVjdChjb25zdCBTdHJpbmcmIGtleSkgb3ZlcnJpZGU7Cisg
ICAgdmlydHVhbCB2b2lkIGVuZE9iamVjdCgpIG92ZXJyaWRlOworCisgICAgdmlydHVhbCBib29s
IGJlZ2luQXJyYXkoY29uc3QgU3RyaW5nJiBrZXkpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9v
bCBiZWdpbkFycmF5RWxlbWVudCgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBlbmRBcnJh
eUVsZW1lbnQoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZW5kQXJyYXkoKSBvdmVycmlk
ZTsKKworICAgIHZvaWQgYnVpbGREaWN0aW9uYXJ5RnJvbUdWYXJpYW50KEdWYXJpYW50KiwgSGFz
aE1hcDxTdHJpbmcsIEdSZWZQdHI8R1ZhcmlhbnQ+PiYpOworCisgICAgVmVjdG9yPEhhc2hNYXA8
U3RyaW5nLCBHUmVmUHRyPEdWYXJpYW50Pj4+IG1fZGljdGlvbmFyeVN0YWNrOworICAgIFZlY3Rv
cjxHVmFyaWFudCosIDE2PiBtX2FycmF5U3RhY2s7CisgICAgVmVjdG9yPHVuc2lnbmVkPiBtX2Fy
cmF5SW5kZXhTdGFjazsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8g
S2V5ZWREZWNvZGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvS2V5
ZWRFbmNvZGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvS2V5ZWRFbmNvZGVyLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTg0MWRkCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9LZXllZEVuY29kZXIuY3BwCkBAIC0w
LDAgKzEsMTM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IElnYWxpYSBTLkwuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJLZXllZEVuY29kZXIuaCIKKwor
I2luY2x1ZGUgPFdlYkNvcmUvU2hhcmVkQnVmZmVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7
CisKK0tleWVkRW5jb2Rlcjo6S2V5ZWRFbmNvZGVyKCkKK3sKKyAgICBnX3ZhcmlhbnRfYnVpbGRl
cl9pbml0KCZtX3ZhcmlhbnRCdWlsZGVyLCBHX1ZBUklBTlRfVFlQRSgiYXtzdn0iKSk7CisgICAg
bV92YXJpYW50QnVpbGRlclN0YWNrLmFwcGVuZCgmbV92YXJpYW50QnVpbGRlcik7Cit9CisKK0tl
eWVkRW5jb2Rlcjo6fktleWVkRW5jb2RlcigpCit7CisgICAgQVNTRVJUKG1fdmFyaWFudEJ1aWxk
ZXJTdGFjay5zaXplKCkgPT0gMSk7CisgICAgQVNTRVJUKG1fdmFyaWFudEJ1aWxkZXJTdGFjay5s
YXN0KCkgPT0gJm1fdmFyaWFudEJ1aWxkZXIpOworICAgIEFTU0VSVChtX2FycmF5U3RhY2suaXNF
bXB0eSgpKTsKKyAgICBBU1NFUlQobV9vYmplY3RTdGFjay5pc0VtcHR5KCkpOworfQorCit2b2lk
IEtleWVkRW5jb2Rlcjo6ZW5jb2RlQnl0ZXMoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IHVpbnQ4
X3QqIGJ5dGVzLCBzaXplX3Qgc2l6ZSkKK3sKKyAgICBHUmVmUHRyPEdCeXRlcz4gZ0J5dGVzID0g
YWRvcHRHUmVmKGdfYnl0ZXNfbmV3X3N0YXRpYyhieXRlcywgc2l6ZSkpOworICAgIGdfdmFyaWFu
dF9idWlsZGVyX2FkZChtX3ZhcmlhbnRCdWlsZGVyU3RhY2subGFzdCgpLCAie3N2fSIsIGtleS51
dGY4KCkuZGF0YSgpLCBnX3ZhcmlhbnRfbmV3X2Zyb21fYnl0ZXMoR19WQVJJQU5UX1RZUEUoImF5
IiksIGdCeXRlcy5nZXQoKSwgVFJVRSkpOworfQorCit2b2lkIEtleWVkRW5jb2Rlcjo6ZW5jb2Rl
Qm9vbChjb25zdCBTdHJpbmcmIGtleSwgYm9vbCB2YWx1ZSkKK3sKKyAgICBnX3ZhcmlhbnRfYnVp
bGRlcl9hZGQobV92YXJpYW50QnVpbGRlclN0YWNrLmxhc3QoKSwgIntzdn0iLCBrZXkudXRmOCgp
LmRhdGEoKSwgZ192YXJpYW50X25ld19ib29sZWFuKHZhbHVlKSk7Cit9CisKK3ZvaWQgS2V5ZWRF
bmNvZGVyOjplbmNvZGVVSW50MzIoY29uc3QgU3RyaW5nJiBrZXksIHVpbnQzMl90IHZhbHVlKQor
eworICAgIGdfdmFyaWFudF9idWlsZGVyX2FkZChtX3ZhcmlhbnRCdWlsZGVyU3RhY2subGFzdCgp
LCAie3N2fSIsIGtleS51dGY4KCkuZGF0YSgpLCBnX3ZhcmlhbnRfbmV3X3VpbnQzMih2YWx1ZSkp
OworfQorCit2b2lkIEtleWVkRW5jb2Rlcjo6ZW5jb2RlSW50MzIoY29uc3QgU3RyaW5nJiBrZXks
IGludDMyX3QgdmFsdWUpCit7CisgICAgZ192YXJpYW50X2J1aWxkZXJfYWRkKG1fdmFyaWFudEJ1
aWxkZXJTdGFjay5sYXN0KCksICJ7c3Z9Iiwga2V5LnV0ZjgoKS5kYXRhKCksIGdfdmFyaWFudF9u
ZXdfaW50MzIodmFsdWUpKTsKK30KKwordm9pZCBLZXllZEVuY29kZXI6OmVuY29kZUludDY0KGNv
bnN0IFN0cmluZyYga2V5LCBpbnQ2NF90IHZhbHVlKQoreworICAgIGdfdmFyaWFudF9idWlsZGVy
X2FkZChtX3ZhcmlhbnRCdWlsZGVyU3RhY2subGFzdCgpLCAie3N2fSIsIGtleS51dGY4KCkuZGF0
YSgpLCBnX3ZhcmlhbnRfbmV3X2ludDY0KHZhbHVlKSk7Cit9CisKK3ZvaWQgS2V5ZWRFbmNvZGVy
OjplbmNvZGVGbG9hdChjb25zdCBTdHJpbmcmIGtleSwgZmxvYXQgdmFsdWUpCit7CisgICAgZW5j
b2RlRG91YmxlKGtleSwgdmFsdWUpOworfQorCit2b2lkIEtleWVkRW5jb2Rlcjo6ZW5jb2RlRG91
YmxlKGNvbnN0IFN0cmluZyYga2V5LCBkb3VibGUgdmFsdWUpCit7CisgICAgZ192YXJpYW50X2J1
aWxkZXJfYWRkKG1fdmFyaWFudEJ1aWxkZXJTdGFjay5sYXN0KCksICJ7c3Z9Iiwga2V5LnV0Zjgo
KS5kYXRhKCksIGdfdmFyaWFudF9uZXdfZG91YmxlKHZhbHVlKSk7Cit9CisKK3ZvaWQgS2V5ZWRF
bmNvZGVyOjplbmNvZGVTdHJpbmcoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFs
dWUpCit7CisgICAgZ192YXJpYW50X2J1aWxkZXJfYWRkKG1fdmFyaWFudEJ1aWxkZXJTdGFjay5s
YXN0KCksICJ7c3Z9Iiwga2V5LnV0ZjgoKS5kYXRhKCksIGdfdmFyaWFudF9uZXdfc3RyaW5nKHZh
bHVlLnV0ZjgoKS5kYXRhKCkpKTsKK30KKwordm9pZCBLZXllZEVuY29kZXI6OmJlZ2luT2JqZWN0
KGNvbnN0IFN0cmluZyYga2V5KQoreworICAgIEdSZWZQdHI8R1ZhcmlhbnRCdWlsZGVyPiBidWls
ZGVyID0gYWRvcHRHUmVmKGdfdmFyaWFudF9idWlsZGVyX25ldyhHX1ZBUklBTlRfVFlQRSgiYWF7
c3Z9IikpKTsKKyAgICBtX29iamVjdFN0YWNrLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihrZXksIGJ1
aWxkZXIpKTsKKyAgICBtX3ZhcmlhbnRCdWlsZGVyU3RhY2suYXBwZW5kKGJ1aWxkZXIuZ2V0KCkp
OworfQorCit2b2lkIEtleWVkRW5jb2Rlcjo6ZW5kT2JqZWN0KCkKK3sKKyAgICBHVmFyaWFudEJ1
aWxkZXIqIGJ1aWxkZXIgPSBtX3ZhcmlhbnRCdWlsZGVyU3RhY2sudGFrZUxhc3QoKTsKKyAgICBn
X3ZhcmlhbnRfYnVpbGRlcl9hZGQobV92YXJpYW50QnVpbGRlclN0YWNrLmxhc3QoKSwgIntzdn0i
LCBtX29iamVjdFN0YWNrLmxhc3QoKS5maXJzdC51dGY4KCkuZGF0YSgpLCBnX3ZhcmlhbnRfYnVp
bGRlcl9lbmQoYnVpbGRlcikpOworICAgIG1fb2JqZWN0U3RhY2sucmVtb3ZlTGFzdCgpOworfQor
Cit2b2lkIEtleWVkRW5jb2Rlcjo6YmVnaW5BcnJheShjb25zdCBTdHJpbmcmIGtleSkKK3sKKyAg
ICBtX2FycmF5U3RhY2suYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKGtleSwgYWRvcHRHUmVmKGdfdmFy
aWFudF9idWlsZGVyX25ldyhHX1ZBUklBTlRfVFlQRSgiYWF7c3Z9IikpKSkpOworfQorCit2b2lk
IEtleWVkRW5jb2Rlcjo6YmVnaW5BcnJheUVsZW1lbnQoKQoreworICAgIG1fdmFyaWFudEJ1aWxk
ZXJTdGFjay5hcHBlbmQoZ192YXJpYW50X2J1aWxkZXJfbmV3KEdfVkFSSUFOVF9UWVBFKCJhe3N2
fSIpKSk7Cit9CisKK3ZvaWQgS2V5ZWRFbmNvZGVyOjplbmRBcnJheUVsZW1lbnQoKQoreworICAg
IEdSZWZQdHI8R1ZhcmlhbnRCdWlsZGVyPiB2YXJpYW50QnVpbGRlciA9IGFkb3B0R1JlZihtX3Zh
cmlhbnRCdWlsZGVyU3RhY2sudGFrZUxhc3QoKSk7CisgICAgZ192YXJpYW50X2J1aWxkZXJfYWRk
X3ZhbHVlKG1fYXJyYXlTdGFjay5sYXN0KCkuc2Vjb25kLmdldCgpLCBnX3ZhcmlhbnRfYnVpbGRl
cl9lbmQodmFyaWFudEJ1aWxkZXIuZ2V0KCkpKTsKK30KKwordm9pZCBLZXllZEVuY29kZXI6OmVu
ZEFycmF5KCkKK3sKKyAgICBnX3ZhcmlhbnRfYnVpbGRlcl9hZGQobV92YXJpYW50QnVpbGRlclN0
YWNrLmxhc3QoKSwgIntzdn0iLCBtX2FycmF5U3RhY2subGFzdCgpLmZpcnN0LnV0ZjgoKS5kYXRh
KCksIGdfdmFyaWFudF9idWlsZGVyX2VuZChtX2FycmF5U3RhY2subGFzdCgpLnNlY29uZC5nZXQo
KSkpOworICAgIG1fYXJyYXlTdGFjay5yZW1vdmVMYXN0KCk7Cit9CisKK1Bhc3NSZWZQdHI8U2hh
cmVkQnVmZmVyPiBLZXllZEVuY29kZXI6OmZpbmlzaEVuY29kaW5nKCkKK3sKKyAgICBnX2Fzc2Vy
dChtX3ZhcmlhbnRCdWlsZGVyU3RhY2subGFzdCgpID09ICZtX3ZhcmlhbnRCdWlsZGVyKTsKKyAg
ICBHUmVmUHRyPEdWYXJpYW50PiB2YXJpYW50ID0gZ192YXJpYW50X2J1aWxkZXJfZW5kKCZtX3Zh
cmlhbnRCdWlsZGVyKTsKKyAgICBHUmVmUHRyPEdCeXRlcz4gZGF0YSA9IGdfdmFyaWFudF9nZXRf
ZGF0YV9hc19ieXRlcyh2YXJpYW50LmdldCgpKTsKKyAgICByZXR1cm4gU2hhcmVkQnVmZmVyOjpj
cmVhdGUoc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGdfYnl0ZXNfZ2V0X2RhdGEo
ZGF0YS5nZXQoKSwgbnVsbHB0cikpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZ19ieXRlc19nZXRf
c2l6ZShkYXRhLmdldCgpKSkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvS2V5ZWRFbmNvZGVyLmggYi9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvZ3RrL0tleWVkRW5jb2Rlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLmRkYzQyZmEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvZ3RrL0tleWVkRW5jb2Rlci5oCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBLZXllZEVuY29kZXJfaAor
I2RlZmluZSBLZXllZEVuY29kZXJfaAorCisjaW5jbHVkZSA8V2ViQ29yZS9LZXllZENvZGluZy5o
PgorI2luY2x1ZGUgPGdsaWIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8
d3RmL2dvYmplY3QvR1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgor
CituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgS2V5ZWRFbmNvZGVyIGZpbmFsIDogcHVibGlj
IFdlYkNvcmU6OktleWVkRW5jb2RlciB7CitwdWJsaWM6CisgICAgS2V5ZWRFbmNvZGVyKCk7Cisg
ICAgfktleWVkRW5jb2RlcigpOworCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvcmU6OlNo
YXJlZEJ1ZmZlcj4gZmluaXNoRW5jb2RpbmcoKSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICB2
aXJ0dWFsIHZvaWQgZW5jb2RlQnl0ZXMoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IHVpbnQ4X3Qq
LCBzaXplX3QpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBlbmNvZGVCb29sKGNvbnN0IFN0
cmluZyYga2V5LCBib29sKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZW5jb2RlVUludDMy
KGNvbnN0IFN0cmluZyYga2V5LCB1aW50MzJfdCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lk
IGVuY29kZUludDMyKGNvbnN0IFN0cmluZyYga2V5LCBpbnQzMl90KSBvdmVycmlkZTsKKyAgICB2
aXJ0dWFsIHZvaWQgZW5jb2RlSW50NjQoY29uc3QgU3RyaW5nJiBrZXksIGludDY0X3QpIG92ZXJy
aWRlOworICAgIHZpcnR1YWwgdm9pZCBlbmNvZGVGbG9hdChjb25zdCBTdHJpbmcmIGtleSwgZmxv
YXQpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBlbmNvZGVEb3VibGUoY29uc3QgU3RyaW5n
JiBrZXksIGRvdWJsZSkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGVuY29kZVN0cmluZyhj
b25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJikgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFs
IHZvaWQgYmVnaW5PYmplY3QoY29uc3QgU3RyaW5nJiBrZXkpIG92ZXJyaWRlOworICAgIHZpcnR1
YWwgdm9pZCBlbmRPYmplY3QoKSBvdmVycmlkZTsKKworICAgIHZpcnR1YWwgdm9pZCBiZWdpbkFy
cmF5KGNvbnN0IFN0cmluZyYga2V5KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5B
cnJheUVsZW1lbnQoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZW5kQXJyYXlFbGVtZW50
KCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGVuZEFycmF5KCkgb3ZlcnJpZGU7CisKKyAg
ICBHVmFyaWFudEJ1aWxkZXIgbV92YXJpYW50QnVpbGRlcjsKKyAgICBWZWN0b3I8R1ZhcmlhbnRC
dWlsZGVyKiwgMTY+IG1fdmFyaWFudEJ1aWxkZXJTdGFjazsKKyAgICBWZWN0b3I8c3RkOjpwYWly
PFN0cmluZywgR1JlZlB0cjxHVmFyaWFudEJ1aWxkZXI+PiwgMTY+IG1fYXJyYXlTdGFjazsKKyAg
ICBWZWN0b3I8c3RkOjpwYWlyPFN0cmluZywgR1JlZlB0cjxHVmFyaWFudEJ1aWxkZXI+PiwgMTY+
IG1fb2JqZWN0U3RhY2s7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8v
IEtleWVkRW5jb2Rlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL1By
b2Nlc3NFeGVjdXRhYmxlUGF0aEd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL1By
b2Nlc3NFeGVjdXRhYmxlUGF0aEd0ay5jcHAKaW5kZXggZTc1N2NjMi4uNWI1Yjk0NyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9Qcm9jZXNzRXhlY3V0YWJsZVBhdGhHdGsu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvUHJvY2Vzc0V4ZWN1dGFibGVQYXRo
R3RrLmNwcApAQCAtNzksNCArNzksMTEgQEAgU3RyaW5nIGV4ZWN1dGFibGVQYXRoT2ZOZXR3b3Jr
UHJvY2VzcygpCiB9CiAjZW5kaWYKIAorI2lmIEVOQUJMRShEQVRBQkFTRV9QUk9DRVNTKQorU3Ry
aW5nIGV4ZWN1dGFibGVQYXRoT2ZEYXRhYmFzZVByb2Nlc3MoKQoreworICAgIHJldHVybiBmaW5k
V2ViS2l0UHJvY2VzcygiV2ViS2l0RGF0YWJhc2VQcm9jZXNzIik7Cit9CisjZW5kaWYKKwogfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
RGF0YWJhc2VzL0RhdGFiYXNlUHJvY2Vzc1Byb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9EYXRhYmFzZXMvRGF0YWJhc2VQcm9jZXNzUHJveHkuY3BwCmluZGV4IDQwYzg5YTMuLmMz
M2U5N2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EYXRhYmFzZXMvRGF0
YWJhc2VQcm9jZXNzUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EYXRh
YmFzZXMvRGF0YWJhc2VQcm9jZXNzUHJveHkuY3BwCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVk
ZSAiV2ViQ29udGV4dC5oIgogI2luY2x1ZGUgIldlYk9yaWdpbkRhdGFNYW5hZ2VyUHJveHkuaCIK
ICNpbmNsdWRlICJXZWJPcmlnaW5EYXRhTWFuYWdlclByb3h5TWVzc2FnZXMuaCIKKyNpbmNsdWRl
IDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CiAKICNpZiBFTkFCTEUoREFUQUJBU0VfUFJPQ0VT
UykKIApAQCAtMTI2LDYgKzEyNyw4IEBAIHZvaWQgRGF0YWJhc2VQcm9jZXNzUHJveHk6OmRpZENy
ZWF0ZURhdGFiYXNlVG9XZWJQcm9jZXNzQ29ubmVjdGlvbihjb25zdCBJUEM6OkF0CiAKICNpZiBP
UyhEQVJXSU4pCiAgICAgcmVwbHktPnNlbmQoSVBDOjpBdHRhY2htZW50KGNvbm5lY3Rpb25JZGVu
dGlmaWVyLnBvcnQoKSwgTUFDSF9NU0dfVFlQRV9NT1ZFX1NFTkQpKTsKKyNlbGlmIFVTRShVTklY
X0RPTUFJTl9TT0NLRVRTKQorICAgIHJlcGx5LT5zZW5kKGNvbm5lY3Rpb25JZGVudGlmaWVyKTsK
ICNlbHNlCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0RhdGFiYXNlcy9ndGsvRGF0YWJhc2VQcm9jZXNzUHJveHlHdGsu
Y3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RhdGFiYXNlcy9ndGsvRGF0YWJhc2VQcm9j
ZXNzUHJveHlHdGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzZTI5
ZjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRGF0YWJhc2Vz
L2d0ay9EYXRhYmFzZVByb2Nlc3NQcm94eUd0ay5jcHAKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNCBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiRGF0YWJhc2VQcm9jZXNzUHJveHkuaCIKKworI2lmIEVOQUJMRShE
QVRBQkFTRV9QUk9DRVNTKQorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordm9pZCBEYXRhYmFzZVBy
b2Nlc3NQcm94eTo6cGxhdGZvcm1HZXRMYXVuY2hPcHRpb25zKFByb2Nlc3NMYXVuY2hlcjo6TGF1
bmNoT3B0aW9ucyYpCit7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8g
RU5BQkxFKERBVEFCQVNFX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvTGF1bmNoZXIvZ3RrL1Byb2Nlc3NMYXVuY2hlckd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvTGF1bmNoZXIvZ3RrL1Byb2Nlc3NMYXVuY2hlckd0ay5jcHAKaW5kZXggMzYy
MzY1Yy4uYzM4MDIwMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5j
aGVyL2d0ay9Qcm9jZXNzTGF1bmNoZXJHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9MYXVuY2hlci9ndGsvUHJvY2Vzc0xhdW5jaGVyR3RrLmNwcApAQCAtNzksNiArNzksMTEg
QEAgdm9pZCBQcm9jZXNzTGF1bmNoZXI6OmxhdW5jaFByb2Nlc3MoKQogICAgICAgICBleGVjdXRh
YmxlUGF0aCA9IGV4ZWN1dGFibGVQYXRoT2ZOZXR3b3JrUHJvY2VzcygpOwogICAgICAgICBicmVh
azsKICNlbmRpZgorI2lmIEVOQUJMRShEQVRBQkFTRV9QUk9DRVNTKQorICAgIGNhc2UgRGF0YWJh
c2VQcm9jZXNzOgorICAgICAgICBleGVjdXRhYmxlUGF0aCA9IGV4ZWN1dGFibGVQYXRoT2ZEYXRh
YmFzZVByb2Nlc3MoKTsKKyAgICAgICAgYnJlYWs7CisjZW5kaWYKICAgICBkZWZhdWx0OgogICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJDb250ZXh0R3RrLmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViQ29udGV4dEd0ay5jcHAKaW5kZXggMGI1MTY2Ni4uZDli
OWJjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJDb250ZXh0
R3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYkNvbnRleHRHdGsu
Y3BwCkBAIC0xMjAsOCArMTIwLDggQEAgU3RyaW5nIFdlYkNvbnRleHQ6OnBsYXRmb3JtRGVmYXVs
dFdlYlNRTERhdGFiYXNlRGlyZWN0b3J5KCkKIAogU3RyaW5nIFdlYkNvbnRleHQ6OnBsYXRmb3Jt
RGVmYXVsdEluZGV4ZWREQkRhdGFiYXNlRGlyZWN0b3J5KCkKIHsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICBHVW5pcXVlUHRyPGdjaGFyPiBpbmRleGVk
REJEYXRhYmFzZURpcmVjdG9yeShnX2J1aWxkX2ZpbGVuYW1lKGdfZ2V0X3VzZXJfZGF0YV9kaXIo
KSwgIndlYmtpdGd0ayIsICJkYXRhYmFzZXMiLCAiaW5kZXhlZGRiIiwgbnVsbHB0cikpOworICAg
IHJldHVybiBXZWJDb3JlOjpmaWxlbmFtZVRvU3RyaW5nKGluZGV4ZWREQkRhdGFiYXNlRGlyZWN0
b3J5LmdldCgpKTsKIH0KIAogU3RyaW5nIFdlYkNvbnRleHQ6OnBsYXRmb3JtRGVmYXVsdEljb25E
YXRhYmFzZVBhdGgoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5j
cHAKaW5kZXggNGEyOGU1Ni4uMjY2ZmJkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlByb2Nlc3MuY3BwCkBAIC0xMDUxLDExICsxMDUxLDEzIEBAIHZvaWQgV2ViUHJvY2Vzczo6ZW5z
dXJlV2ViVG9EYXRhYmFzZVByb2Nlc3NDb25uZWN0aW9uKCkKIAogI2lmIE9TKERBUldJTikKICAg
ICBJUEM6OkNvbm5lY3Rpb246OklkZW50aWZpZXIgY29ubmVjdGlvbklkZW50aWZpZXIoZW5jb2Rl
ZENvbm5lY3Rpb25JZGVudGlmaWVyLnBvcnQoKSk7Ci0gICAgaWYgKElQQzo6Q29ubmVjdGlvbjo6
aWRlbnRpZmllcklzTnVsbChjb25uZWN0aW9uSWRlbnRpZmllcikpCi0gICAgICAgIHJldHVybjsK
KyNlbGlmIFVTRShVTklYX0RPTUFJTl9TT0NLRVRTKQorICAgIElQQzo6Q29ubmVjdGlvbjo6SWRl
bnRpZmllciBjb25uZWN0aW9uSWRlbnRpZmllciA9IGVuY29kZWRDb25uZWN0aW9uSWRlbnRpZmll
ci5yZWxlYXNlRmlsZURlc2NyaXB0b3IoKTsKICNlbHNlCiAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAjZW5kaWYKKyAgICBpZiAoSVBDOjpDb25uZWN0aW9uOjppZGVudGlmaWVySXNOdWxsKGNv
bm5lY3Rpb25JZGVudGlmaWVyKSkKKyAgICAgICAgcmV0dXJuOwogICAgIG1fd2ViVG9EYXRhYmFz
ZVByb2Nlc3NDb25uZWN0aW9uID0gV2ViVG9EYXRhYmFzZVByb2Nlc3NDb25uZWN0aW9uOjpjcmVh
dGUoY29ubmVjdGlvbklkZW50aWZpZXIpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21ha2Uv
T3B0aW9uc0dUSy5jbWFrZSBiL1NvdXJjZS9jbWFrZS9PcHRpb25zR1RLLmNtYWtlCmluZGV4IDQ1
NjI5OWEuLjE1NjkwOWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbWFrZS9PcHRpb25zR1RLLmNtYWtl
CisrKyBiL1NvdXJjZS9jbWFrZS9PcHRpb25zR1RLLmNtYWtlCkBAIC0yMTMsNiArMjEzLDcgQEAg
c2V0KFdlYktpdDJfT1VUUFVUX05BTUUgd2Via2l0Mmd0ay0ke1dFQktJVEdUS19BUElfVkVSU0lP
Tn0pCiBzZXQoV2ViS2l0Ml9XZWJQcm9jZXNzX09VVFBVVF9OQU1FIFdlYktpdFdlYlByb2Nlc3Mp
CiBzZXQoV2ViS2l0Ml9OZXR3b3JrUHJvY2Vzc19PVVRQVVRfTkFNRSBXZWJLaXROZXR3b3JrUHJv
Y2VzcykKIHNldChXZWJLaXQyX1BsdWdpblByb2Nlc3NfT1VUUFVUX05BTUUgV2ViS2l0UGx1Z2lu
UHJvY2VzcykKK3NldChXZWJLaXQyX0RhdGFiYXNlUHJvY2Vzc19PVVRQVVRfTkFNRSBXZWJLaXRE
YXRhYmFzZVByb2Nlc3MpCiAKIGFkZF9kZWZpbml0aW9ucygtREJVSUxESU5HX0dUS19fPTEpCiBh
ZGRfZGVmaW5pdGlvbnMoLURHRVRURVhUX1BBQ0tBR0U9IldlYktpdDJHVEstJHtXRUJLSVRHVEtf
QVBJX1ZFUlNJT059IikK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>243291</attachid>
            <date>2014-12-15 06:13:08 -0800</date>
            <delta_ts>2015-01-22 01:52:51 -0800</delta_ts>
            <desc>Test case for the compiler issue</desc>
            <filename>test.cpp</filename>
            <type>text/plain</type>
            <size>1663</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8ZnVuY3Rpb25hbD4KI2luY2x1ZGUgPG1lbW9y
eT4KCmNsYXNzIFByaW50ZXJCYXNlIHsKcHVibGljOgogICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4g
QXJndW1lbnRzPiB2b2lkIHByaW50KEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50cyk7Cn07Cgp0ZW1w
bGF0ZSA8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgpjbGFzcyBQcmludGVyIDogcHVibGljIFByaW50
ZXJCYXNlIHsKcHVibGljOgogICAgUHJpbnRlcihzdGQ6OmZ1bmN0aW9uPHZvaWQgKEFyZ3VtZW50
cy4uLik+IHByaW50ZXJGdW5jdGlvbikKICAgICAgICA6IG1fcHJpbnRlckZ1bmN0aW9uKHN0ZDo6
bW92ZShwcmludGVyRnVuY3Rpb24pKQogICAgewogICAgfQoKICAgIHZvaWQgcHJpbnQoQXJndW1l
bnRzJiYuLi4gYXJndW1lbnRzKQogICAgewogICAgICAgIG1fcHJpbnRlckZ1bmN0aW9uKHN0ZDo6
Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50cykuLi4pOwogICAgfQpwcml2YXRlOgogICAgc3Rk
OjpmdW5jdGlvbjx2b2lkIChBcmd1bWVudHMuLi4pPiBtX3ByaW50ZXJGdW5jdGlvbjsKfTsKCnRl
bXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4gdm9pZCBQcmludGVyQmFzZTo6cHJpbnQoQXJn
dW1lbnRzJiYuLi4gYXJndW1lbnRzKQp7CiAgICBQcmludGVyPEFyZ3VtZW50cy4uLj4qIHByaW50
ZXIgPSBzdGF0aWNfY2FzdDxQcmludGVyPEFyZ3VtZW50cy4uLj4qPih0aGlzKTsKICAgIHByaW50
ZXItPnByaW50KHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50cykuLi4pOwp9CgpzdGF0
aWMgdm9pZCBwcmludChQcmludGVyPHVpbnQzMl90PiYgcHJpbnRlciwgdWludDMyX3QgbikKewog
ICAgcHJpbnRlci5wcmludChzdGQ6Om1vdmUobikpOyAvLyBUaGlzIGRvZXNuJ3QgYnVpbGQgd2l0
aG91dCB0aGUgbW92ZS4KfQoKc3RhdGljIHZvaWQgcHJpbnQoUHJpbnRlckJhc2UqIHByaW50ZXJC
YXNlLCB1aW50MzJfdCBuKQp7CiAgICBwcmludGVyQmFzZS0+cHJpbnQobik7IC8vIFRoaXMgZG9l
c24ndCB3b3JrLgp9CgpzdGF0aWMgdm9pZCBwcmludE1vdmUoUHJpbnRlckJhc2UqIHByaW50ZXJC
YXNlLCB1aW50MzJfdCBuKQp7CiAgICBwcmludGVyQmFzZS0+cHJpbnQoc3RkOjptb3ZlKG4pKTsg
Ly8gV29ya3MuCn0KCmludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKewogICAgUHJpbnRl
cjx1aW50MzJfdD4gcHJpbnRlcihbXSh1aW50MzJfdCBuKSB7IHN0ZDo6Y291dCA8PCBuIDw8IHN0
ZDo6ZW5kbDsgfSk7CiAgICBwcmludGVyLnByaW50KDEpOyAvLyBXb3Jrcy4KICAgIHByaW50KHBy
aW50ZXIsIDIpOyAvLyBXb3Jrcy4KCiAgICBzdGQ6OnVuaXF1ZV9wdHI8UHJpbnRlckJhc2U+IHBy
aW50ZXIyKG5ldyBQcmludGVyPHVpbnQzMl90PihbXSh1aW50MzJfdCBuKSB7IHN0ZDo6Y291dCA8
PCBuIDw8IHN0ZDo6ZW5kbDsgfSkpOwogICAgcHJpbnRlcjItPnByaW50KDMpOyAvLyBXb3Jrcy4K
ICAgIHByaW50KHByaW50ZXIyLmdldCgpLCA0KTsgLy8gRG9lc24ndCB3b3JrLgogICAgdWludDMy
X3QgZml2ZSA9IDU7CiAgICBwcmludChwcmludGVyMi5nZXQoKSwgZml2ZSk7IC8vIERvZXNuJ3Qg
d29yay4KICAgIHByaW50TW92ZShwcmludGVyMi5nZXQoKSwgNik7IC8vIFdvcmtzLgoKICAgIHJl
dHVybiAwOwp9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>245132</attachid>
            <date>2015-01-22 01:53:49 -0800</date>
            <delta_ts>2015-01-23 02:53:20 -0800</delta_ts>
            <desc>Rebased patch</desc>
            <filename>wk2-database-process.diff</filename>
            <type>text/plain</type>
            <size>48454</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCA5ZjZhZjUzLi5hYjgxMjUx
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAK
KzIwMTQtMTItMTAgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgor
CisgICAgICAgIFtHVEtdIEFkZCBpbml0aWFsIGRhdGFiYXNlIHByb2Nlc3Mgc3VwcG9ydAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM5NDkxCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTb3VyY2UvY21h
a2UvT3B0aW9uc0dUSy5jbWFrZTogU2V0IFdlYktpdDJfRGF0YWJhc2VQcm9jZXNzX09VVFBVVF9O
QU1FLgorCiAyMDE1LTAxLTIxICBDc2FiYSBPc3p0cm9nb27DoWMgIDxvc3N5QHdlYmtpdC5vcmc+
CiAKICAgICAgICAgW0VGTF1bV0syXSBFRkwgTWluaUJyb3dzZXIgZG9lc24ndCBydW4gYmVjYXVz
ZSBzaGFyZWQgbGlicmFyeSBpcyBub3QgZm91bmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKaW5kZXggNDY1N2MwNi4uMjkwOWU0YSAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxOCBAQAorMjAxNC0xMi0xMCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2Fy
Y2lhQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS10gQWRkIGluaXRpYWwgZGF0YWJhc2UgcHJv
Y2VzcyBzdXBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMzk0OTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBBZGQgc3VwcG9ydCBmb3IgdXNpbmcgR1JlZlB0ciB3aXRoIEdWYXJpYW50QnVpbGRlci4K
KworICAgICAgICAqIHd0Zi9nb2JqZWN0L0dSZWZQdHIuY3BwOgorICAgICAgICAoV1RGOjpyZWZH
UHRyKToKKyAgICAgICAgKFdURjo6ZGVyZWZHUHRyKToKKyAgICAgICAgKiB3dGYvZ29iamVjdC9H
UmVmUHRyLmg6CisgICAgICAgICogd3RmL2dvYmplY3QvR1R5cGVkZWZzLmg6CisKIDIwMTUtMDEt
MjEgIENzYWJhIE9zenRyb2dvbsOhYyAgPG9zc3lAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZW1v
dmUgRU5BQkxFKElOU1BFQ1RPUikgaWZkZWYgZ3VhcmRzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L3d0Zi9nb2JqZWN0L0dSZWZQdHIuY3BwIGIvU291cmNlL1dURi93dGYvZ29iamVjdC9HUmVmUHRy
LmNwcAppbmRleCAxM2RlMTY2Li4xYWEzY2IwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9n
b2JqZWN0L0dSZWZQdHIuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL2dvYmplY3QvR1JlZlB0ci5j
cHAKQEAgLTg5LDYgKzg5LDE4IEBAIHRlbXBsYXRlIDw+IHZvaWQgZGVyZWZHUHRyKEdWYXJpYW50
KiBwdHIpCiAgICAgZ192YXJpYW50X3VucmVmKHB0cik7CiB9CiAKK3RlbXBsYXRlIDw+IEdWYXJp
YW50QnVpbGRlciogcmVmR1B0cihHVmFyaWFudEJ1aWxkZXIqIHB0cikKK3sKKyAgICBpZiAocHRy
KQorICAgICAgICBnX3ZhcmlhbnRfYnVpbGRlcl9yZWYocHRyKTsKKyAgICByZXR1cm4gcHRyOwor
fQorCit0ZW1wbGF0ZSA8PiB2b2lkIGRlcmVmR1B0cihHVmFyaWFudEJ1aWxkZXIqIHB0cikKK3sK
KyAgICBnX3ZhcmlhbnRfYnVpbGRlcl91bnJlZihwdHIpOworfQorCiB0ZW1wbGF0ZSA8PiBHU291
cmNlKiByZWZHUHRyKEdTb3VyY2UqIHB0cikKIHsKICAgICBpZiAocHRyKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dURi93dGYvZ29iamVjdC9HUmVmUHRyLmggYi9Tb3VyY2UvV1RGL3d0Zi9nb2JqZWN0
L0dSZWZQdHIuaAppbmRleCAyMTZjMTQ1Li5iZWU2OTc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RG
L3d0Zi9nb2JqZWN0L0dSZWZQdHIuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dSZWZQ
dHIuaApAQCAtMjI1LDYgKzIyNSw4IEBAIHRlbXBsYXRlIDw+IFdURl9FWFBPUlRfUFJJVkFURSBH
TWFpbkxvb3AqIHJlZkdQdHIoR01haW5Mb29wKiBwdHIpOwogdGVtcGxhdGUgPD4gV1RGX0VYUE9S
VF9QUklWQVRFIHZvaWQgZGVyZWZHUHRyKEdNYWluTG9vcCogcHRyKTsKIHRlbXBsYXRlIDw+IFdU
Rl9FWFBPUlRfUFJJVkFURSBHVmFyaWFudCogcmVmR1B0cihHVmFyaWFudCogcHRyKTsKIHRlbXBs
YXRlIDw+IFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGRlcmVmR1B0cihHVmFyaWFudCogcHRyKTsK
K3RlbXBsYXRlIDw+IFdURl9FWFBPUlRfUFJJVkFURSBHVmFyaWFudEJ1aWxkZXIqIHJlZkdQdHIo
R1ZhcmlhbnRCdWlsZGVyKiBwdHIpOwordGVtcGxhdGUgPD4gV1RGX0VYUE9SVF9QUklWQVRFIHZv
aWQgZGVyZWZHUHRyKEdWYXJpYW50QnVpbGRlciogcHRyKTsKIHRlbXBsYXRlIDw+IFdURl9FWFBP
UlRfUFJJVkFURSBHU291cmNlKiByZWZHUHRyKEdTb3VyY2UqIHB0cik7CiB0ZW1wbGF0ZSA8PiBX
VEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBkZXJlZkdQdHIoR1NvdXJjZSogcHRyKTsKIHRlbXBsYXRl
IDw+IFdURl9FWFBPUlRfUFJJVkFURSBHUHRyQXJyYXkqIHJlZkdQdHIoR1B0ckFycmF5Kik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dUeXBlZGVmcy5oIGIvU291cmNlL1dU
Ri93dGYvZ29iamVjdC9HVHlwZWRlZnMuaAppbmRleCA5OTkwNzkyLi4zMjI5OGQ1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dUeXBlZGVmcy5oCisrKyBiL1NvdXJjZS9XVEYv
d3RmL2dvYmplY3QvR1R5cGVkZWZzLmgKQEAgLTYwLDYgKzYwLDcgQEAgdHlwZWRlZiBzdHJ1Y3Qg
X0dTb2NrZXRDbGllbnQgR1NvY2tldENsaWVudDsKIHR5cGVkZWYgc3RydWN0IF9HU29ja2V0Q29u
bmVjdGlvbiBHU29ja2V0Q29ubmVjdGlvbjsKIHR5cGVkZWYgc3RydWN0IF9HU291cmNlIEdTb3Vy
Y2U7CiB0eXBlZGVmIHN0cnVjdCBfR1ZhcmlhbnQgR1ZhcmlhbnQ7Cit0eXBlZGVmIHN0cnVjdCBf
R1ZhcmlhbnRCdWlsZGVyIEdWYXJpYW50QnVpbGRlcjsKIHR5cGVkZWYgdW5pb24gX0dka0V2ZW50
IEdka0V2ZW50OwogdHlwZWRlZiBzdHJ1Y3QgX0dUaW1lciBHVGltZXI7CiB0eXBlZGVmIHN0cnVj
dCBfR0tleUZpbGUgR0tleUZpbGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzY2ZTBmMS4uNDdlOWVlMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDE0LTEyLTEwICBDYXJsb3MgR2FyY2lhIENhbXBv
cyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBBZGQgaW5pdGlhbCBkYXRh
YmFzZSBwcm9jZXNzIHN1cHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEzOTQ5MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogcGxhdGZvcm0vc3FsL1NRTGl0ZUZpbGVTeXN0ZW0uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U1FMaXRlRmlsZVN5c3RlbTo6b3BlbkRhdGFiYXNlKTogVXNlCisgICAgICAg
IFdlYkNvcmU6OmZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbigpIGZvciB0aGUgZGF0YWJhZSBmaWxl
bmFtZSwKKyAgICAgICAgb3RoZXJ3aXNlIHNxbGl0ZTNfb3BlbigpIGZhaWxzIHdoZW4gdGhlIGZp
bGVuYW1lIGNvbnRhaW5zICIlMkUiLgorCiAyMDE1LTAxLTIxICBEYW5pZWwgQmF0ZXMgIDxkYWJh
dGVzQGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggdGhlIGlPUyByZWxlYXNlIGJ1aWxkIGFmdGVy
IDxodHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC8xNzg4Njg+CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5jcHAKaW5kZXggZThjZmIwZS4u
M2JjMDUwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZUZp
bGVTeXN0ZW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVGaWxl
U3lzdGVtLmNwcApAQCAtNTAsNyArNTAsNyBAQCBTUUxpdGVGaWxlU3lzdGVtOjpTUUxpdGVGaWxl
U3lzdGVtKCkKIAogaW50IFNRTGl0ZUZpbGVTeXN0ZW06Om9wZW5EYXRhYmFzZShjb25zdCBTdHJp
bmcmIGZpbGVuYW1lLCBzcWxpdGUzKiogZGF0YWJhc2UsIGJvb2wpCiB7Ci0gICAgcmV0dXJuIHNx
bGl0ZTNfb3BlbihmaWxlbmFtZS51dGY4KCkuZGF0YSgpLCBkYXRhYmFzZSk7CisgICAgcmV0dXJu
IHNxbGl0ZTNfb3BlbihmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oZmlsZW5hbWUpLmRhdGEoKSwg
ZGF0YWJhc2UpOwogfQogCiBTdHJpbmcgU1FMaXRlRmlsZVN5c3RlbTo6Z2V0RmlsZU5hbWVGb3JO
ZXdEYXRhYmFzZShjb25zdCBTdHJpbmcmIGRiRGlyLCBjb25zdCBTdHJpbmcmLApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViS2l0Mi9DTWFrZUxp
c3RzLnR4dAppbmRleCA0MzU2ZDMyLi5jMGM2NWVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9DTWFrZUxpc3RzLnR4dApAQCAt
MSw2ICsxLDkgQEAKIHNldChXZWJLaXQyX0lOQ0xVREVfRElSRUNUT1JJRVMKICAgICAiJHtKQVZB
U0NSSVBUQ09SRV9ESVJ9L2xsaW50IgogICAgICIke1dFQktJVDJfRElSfSIKKyAgICAiJHtXRUJL
SVQyX0RJUn0vRGF0YWJhc2VQcm9jZXNzIgorICAgICIke1dFQktJVDJfRElSfS9EYXRhYmFzZVBy
b2Nlc3MvSW5kZXhlZERCIgorICAgICIke1dFQktJVDJfRElSfS9EYXRhYmFzZVByb2Nlc3MvSW5k
ZXhlZERCL3NxbGl0ZSIKICAgICAiJHtXRUJLSVQyX0RJUn0vTmV0d29ya1Byb2Nlc3MiCiAgICAg
IiR7V0VCS0lUMl9ESVJ9L05ldHdvcmtQcm9jZXNzL0ZpbGVBUEkiCiAgICAgIiR7V0VCS0lUMl9E
SVJ9L05ldHdvcmtQcm9jZXNzL2NhY2hlIgpAQCAtMTIsNiArMTUsNyBAQCBzZXQoV2ViS2l0Ml9J
TkNMVURFX0RJUkVDVE9SSUVTCiAgICAgIiR7V0VCS0lUMl9ESVJ9L1NoYXJlZC9BUEkvYyIKICAg
ICAiJHtXRUJLSVQyX0RJUn0vU2hhcmVkL0F1dGhlbnRpY2F0aW9uIgogICAgICIke1dFQktJVDJf
RElSfS9TaGFyZWQvQ29yZUlQQ1N1cHBvcnQiCisgICAgIiR7V0VCS0lUMl9ESVJ9L1NoYXJlZC9E
YXRhYmFzZXMiCiAgICAgIiR7V0VCS0lUMl9ESVJ9L1NoYXJlZC9EYXRhYmFzZXMvSW5kZXhlZERC
IgogICAgICIke1dFQktJVDJfRElSfS9TaGFyZWQvRG93bmxvYWRzIgogICAgICIke1dFQktJVDJf
RElSfS9TaGFyZWQvRmlsZUFQSSIKQEAgLTI2LDYgKzMwLDcgQEAgc2V0KFdlYktpdDJfSU5DTFVE
RV9ESVJFQ1RPUklFUwogICAgICIke1dFQktJVDJfRElSfS9VSVByb2Nlc3MvQVBJL0MiCiAgICAg
IiR7V0VCS0lUMl9ESVJ9L1VJUHJvY2Vzcy9BUEkvY3BwIgogICAgICIke1dFQktJVDJfRElSfS9V
SVByb2Nlc3MvQXV0aGVudGljYXRpb24iCisgICAgIiR7V0VCS0lUMl9ESVJ9L1VJUHJvY2Vzcy9E
YXRhYmFzZXMiCiAgICAgIiR7V0VCS0lUMl9ESVJ9L1VJUHJvY2Vzcy9Eb3dubG9hZHMiCiAgICAg
IiR7V0VCS0lUMl9ESVJ9L1VJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIiCiAgICAgIiR7V0VCS0lU
Ml9ESVJ9L1VJUHJvY2Vzcy9MYXVuY2hlciIKQEAgLTE0OSw2ICsxNTQsMTYgQEAgaWYgKFdURl9V
U0VfM0RfR1JBUEhJQ1MpCiBlbmRpZiAoKQogCiBzZXQoV2ViS2l0Ml9TT1VSQ0VTCisgICAgRGF0
YWJhc2VQcm9jZXNzL0RhdGFiYXNlVG9XZWJQcm9jZXNzQ29ubmVjdGlvbi5jcHAKKyAgICBEYXRh
YmFzZVByb2Nlc3MvRGF0YWJhc2VQcm9jZXNzLmNwcAorICAgIERhdGFiYXNlUHJvY2Vzcy9JbmRl
eGVkREIvRGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbi5jcHAKKyAgICBEYXRhYmFzZVByb2Nl
c3MvSW5kZXhlZERCL0lEQlNlcmlhbGl6YXRpb24uY3BwCisgICAgRGF0YWJhc2VQcm9jZXNzL0lu
ZGV4ZWREQi9VbmlxdWVJREJEYXRhYmFzZS5jcHAKKyAgICBEYXRhYmFzZVByb2Nlc3MvSW5kZXhl
ZERCL1VuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmllci5jcHAKKyAgICBEYXRhYmFzZVByb2Nlc3Mv
SW5kZXhlZERCL3NxbGl0ZS9TUUxpdGVJREJDdXJzb3IuY3BwCisgICAgRGF0YWJhc2VQcm9jZXNz
L0luZGV4ZWREQi9zcWxpdGUvU1FMaXRlSURCVHJhbnNhY3Rpb24uY3BwCisgICAgRGF0YWJhc2VQ
cm9jZXNzL0luZGV4ZWREQi9zcWxpdGUvVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxp
dGUuY3BwCisKICAgICBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vz
cy5jcHAKICAgICBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKICAgICBOZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc1BsYXRmb3JtU3RyYXRlZ2llcy5jcHAKQEAgLTE5Nyw2ICsy
MTIsNyBAQCBzZXQoV2ViS2l0Ml9TT1VSQ0VTCiAgICAgU2hhcmVkL0FQSS9BUElVUkxSZXNwb25z
ZS5jcHAKIAogICAgIFNoYXJlZC9BY3Rpdml0eUFzc2VydGlvbi5jcHAKKyAgICBTaGFyZWQvQXN5
bmNSZXF1ZXN0LmNwcAogICAgIFNoYXJlZC9CbG9iRGF0YUZpbGVSZWZlcmVuY2VXaXRoU2FuZGJv
eEV4dGVuc2lvbi5jcHAKICAgICBTaGFyZWQvQ2FjaGVNb2RlbC5jcHAKICAgICBTaGFyZWQvQ2hp
bGRQcm9jZXNzLmNwcApAQCAtMjI3LDYgKzI0Myw3IEBAIHNldChXZWJLaXQyX1NPVVJDRVMKICAg
ICBTaGFyZWQvV2ViQ29udGV4dE1lbnVJdGVtLmNwcAogICAgIFNoYXJlZC9XZWJDb250ZXh0TWVu
dUl0ZW1EYXRhLmNwcAogICAgIFNoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCisgICAg
U2hhcmVkL1dlYkNyb3NzVGhyZWFkQ29waWVyLmNwcAogICAgIFNoYXJlZC9XZWJFdmVudC5jcHAK
ICAgICBTaGFyZWQvV2ViRXZlbnRDb252ZXJzaW9uLmNwcAogICAgIFNoYXJlZC9XZWJHZW9sb2Nh
dGlvblBvc2l0aW9uLmNwcApAQCAtMjc2LDYgKzI5Myw5IEBAIHNldChXZWJLaXQyX1NPVVJDRVMK
IAogICAgIFNoYXJlZC9BdXRoZW50aWNhdGlvbi9BdXRoZW50aWNhdGlvbk1hbmFnZXIuY3BwCiAK
KyAgICBTaGFyZWQvRGF0YWJhc2VzL0RhdGFiYXNlUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5j
cHAKKyAgICBTaGFyZWQvRGF0YWJhc2VzL0luZGV4ZWREQi9JREJVdGlsaXRpZXMuY3BwCisKICAg
ICBTaGFyZWQvRG93bmxvYWRzL0Rvd25sb2FkLmNwcAogICAgIFNoYXJlZC9Eb3dubG9hZHMvRG93
bmxvYWRBdXRoZW50aWNhdGlvbkNsaWVudC5jcHAKICAgICBTaGFyZWQvRG93bmxvYWRzL0Rvd25s
b2FkTWFuYWdlci5jcHAKQEAgLTQxNiw2ICs0MzYsOCBAQCBzZXQoV2ViS2l0Ml9TT1VSQ0VTCiAg
ICAgVUlQcm9jZXNzL0F1dGhlbnRpY2F0aW9uL1dlYkNyZWRlbnRpYWwuY3BwCiAgICAgVUlQcm9j
ZXNzL0F1dGhlbnRpY2F0aW9uL1dlYlByb3RlY3Rpb25TcGFjZS5jcHAKIAorICAgIFVJUHJvY2Vz
cy9EYXRhYmFzZXMvRGF0YWJhc2VQcm9jZXNzUHJveHkuY3BwCisKICAgICBVSVByb2Nlc3MvRG93
bmxvYWRzL0Rvd25sb2FkUHJveHkuY3BwCiAgICAgVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9h
ZFByb3h5TWFwLmNwcAogCkBAIC00NTksNiArNDgxLDggQEAgc2V0KFdlYktpdDJfU09VUkNFUwog
CiAgICAgV2ViUHJvY2Vzcy9EYXRhYmFzZXMvV2ViRGF0YWJhc2VQcm92aWRlci5jcHAKICAgICBX
ZWJQcm9jZXNzL0RhdGFiYXNlcy9JbmRleGVkREIvV2ViSURCRmFjdG9yeUJhY2tlbmQuY3BwCisg
ICAgV2ViUHJvY2Vzcy9EYXRhYmFzZXMvSW5kZXhlZERCL1dlYklEQlNlcnZlckNvbm5lY3Rpb24u
Y3BwCisgICAgV2ViUHJvY2Vzcy9EYXRhYmFzZXMvV2ViVG9EYXRhYmFzZVByb2Nlc3NDb25uZWN0
aW9uLmNwcAogCiAgICAgV2ViUHJvY2Vzcy9GaWxlQVBJL0Jsb2JSZWdpc3RyeVByb3h5LmNwcAog
CkBAIC01ODYsNiArNjEwLDEwIEBAIHNldChXZWJLaXQyX1NPVVJDRVMKICkKIAogc2V0KFdlYktp
dDJfTUVTU0FHRVNfSU5fRklMRVMKKyAgICBEYXRhYmFzZVByb2Nlc3MvRGF0YWJhc2VUb1dlYlBy
b2Nlc3NDb25uZWN0aW9uLm1lc3NhZ2VzLmluCisgICAgRGF0YWJhc2VQcm9jZXNzL0RhdGFiYXNl
UHJvY2Vzcy5tZXNzYWdlcy5pbgorICAgIERhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvRGF0YWJh
c2VQcm9jZXNzSURCQ29ubmVjdGlvbi5tZXNzYWdlcy5pbgorCiAgICAgTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4KICAgICBOZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrUHJvY2Vzcy5tZXNzYWdlcy5pbgogICAgIE5ldHdvcmtQcm9jZXNzL05ldHdv
cmtSZXNvdXJjZUxvYWRlci5tZXNzYWdlcy5pbgpAQCAtNjIxLDYgKzY0OSw4IEBAIHNldChXZWJL
aXQyX01FU1NBR0VTX0lOX0ZJTEVTCiAgICAgVUlQcm9jZXNzL1dlYlJlc291cmNlQ2FjaGVNYW5h
Z2VyUHJveHkubWVzc2FnZXMuaW4KICAgICBVSVByb2Nlc3MvV2ViVmlicmF0aW9uUHJveHkubWVz
c2FnZXMuaW4KIAorICAgIFVJUHJvY2Vzcy9EYXRhYmFzZXMvRGF0YWJhc2VQcm9jZXNzUHJveHku
bWVzc2FnZXMuaW4KKwogICAgIFVJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eS5tZXNz
YWdlcy5pbgogCiAgICAgVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5tZXNz
YWdlcy5pbgpAQCAtNjQxLDYgKzY3MSw4IEBAIHNldChXZWJLaXQyX01FU1NBR0VTX0lOX0ZJTEVT
CiAKICAgICBXZWJQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5tZXNzYWdlcy5pbgog
CisgICAgV2ViUHJvY2Vzcy9EYXRhYmFzZXMvSW5kZXhlZERCL1dlYklEQlNlcnZlckNvbm5lY3Rp
b24ubWVzc2FnZXMuaW4KKwogICAgIFdlYlByb2Nlc3MvRnVsbFNjcmVlbi9XZWJGdWxsU2NyZWVu
TWFuYWdlci5tZXNzYWdlcy5pbgogCiAgICAgV2ViUHJvY2Vzcy9HZW9sb2NhdGlvbi9XZWJHZW9s
b2NhdGlvbk1hbmFnZXIubWVzc2FnZXMuaW4KQEAgLTY4NSw2ICs3MTcsMTAgQEAgc2V0KE5ldHdv
cmtQcm9jZXNzX0xJQlJBUklFUwogICAgIFdlYktpdDIKICkKIAorc2V0KERhdGFiYXNlUHJvY2Vz
c19MSUJSQVJJRVMKKyAgV2ViS2l0MgorKQorCiBzZXQoV2ViS2l0Ml9MSUJSQVJJRVMKICAgICBK
YXZhU2NyaXB0Q29yZQogICAgIFdlYkNvcmUKQEAgLTc2Nyw2ICs4MDMsMTkgQEAgaWYgKEVOQUJM
RV9QTFVHSU5fUFJPQ0VTUykKICAgICBlbmRpZiAoKQogZW5kaWYgKCkKIAoraWYgKEVOQUJMRV9E
QVRBQkFTRV9QUk9DRVNTKQorICAgIGFkZF9kZWZpbml0aW9ucygtREVOQUJMRV9EQVRBQkFTRV9Q
Uk9DRVNTPTEpCisgICAgYWRkX2V4ZWN1dGFibGUoRGF0YWJhc2VQcm9jZXNzICR7RGF0YWJhc2VQ
cm9jZXNzX1NPVVJDRVN9KQorICAgIGFkZF93ZWJraXQyX3ByZWZpeF9oZWFkZXIoRGF0YWJhc2VQ
cm9jZXNzKQorICAgIHRhcmdldF9saW5rX2xpYnJhcmllcyhEYXRhYmFzZVByb2Nlc3MgJHtEYXRh
YmFzZVByb2Nlc3NfTElCUkFSSUVTfSkKKyAgICBzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoRGF0YWJh
c2VQcm9jZXNzIFBST1BFUlRJRVMgRk9MREVSICJXZWJLaXQiKQorICAgIGluc3RhbGwoVEFSR0VU
UyBEYXRhYmFzZVByb2Nlc3MgREVTVElOQVRJT04gIiR7TElCRVhFQ19JTlNUQUxMX0RJUn0iKQor
CisgICAgaWYgKFdlYktpdDJfRGF0YWJhc2VQcm9jZXNzX09VVFBVVF9OQU1FKQorICAgICAgICBz
ZXRfdGFyZ2V0X3Byb3BlcnRpZXMoRGF0YWJhc2VQcm9jZXNzIFBST1BFUlRJRVMgT1VUUFVUX05B
TUUgJHtXZWJLaXQyX0RhdGFiYXNlUHJvY2Vzc19PVVRQVVRfTkFNRX0pCisgICAgZW5kaWYgKCkK
K2VuZGlmICgpCisKIFBPUFVMQVRFX0xJQlJBUllfVkVSU0lPTihXRUJLSVQyKQogc2V0X3Rhcmdl
dF9wcm9wZXJ0aWVzKFdlYktpdDIgUFJPUEVSVElFUyBWRVJTSU9OICR7V0VCS0lUMl9WRVJTSU9O
fSBTT1ZFUlNJT04gJHtXRUJLSVQyX1ZFUlNJT05fTUFKT1J9KQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggOTUw
YTY4Ny4uMGVmNDhiYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc2IEBACisyMDE0LTEyLTEwICBD
YXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RL
XSBBZGQgaW5pdGlhbCBkYXRhYmFzZSBwcm9jZXNzIHN1cHBvcnQKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzOTQ5MQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBpbml0aWFsIHN1cHBvcnQgZm9yIERh
dGFiYXNlUHJvY2VzcywgZGlzYWJsZWQgYnkgZGVmYXVsdCBmb3IKKyAgICAgICAgbm93LgorCisg
ICAgICAgICogQ01ha2VMaXN0cy50eHQ6IEFkZCByZXF1aXJlZCBmaWxlcyB0byBjb21waWxhdGlv
bi4KKyAgICAgICAgKiBEYXRhYmFzZVByb2Nlc3MvRGF0YWJhc2VQcm9jZXNzLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6RGF0YWJhc2VQcm9jZXNzOjpjcmVhdGVEYXRhYmFzZVRvV2ViUHJvY2Vzc0Nv
bm5lY3Rpb24pOgorICAgICAgICBBZGQgdGhlIHVuaXggZG9tYWluIHNvY2tldHMgaW1wbGVtZW50
YXRpb24uCisgICAgICAgICogRGF0YWJhc2VQcm9jZXNzL0VudHJ5UG9pbnQvdW5peC9EYXRhYmFz
ZVByb2Nlc3NNYWluLmNwcDogQWRkZWQuCisgICAgICAgIChtYWluKToKKyAgICAgICAgKiBEYXRh
YmFzZVByb2Nlc3MvZ3RrL0RhdGFiYXNlUHJvY2Vzc01haW5HdGsuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYktpdDo6RGF0YWJhc2VQcm9jZXNzTWFpblVuaXgpOgorICAgICAgICAqIERhdGFiYXNl
UHJvY2Vzcy91bml4L0RhdGFiYXNlUHJvY2Vzc01haW5Vbml4Lmg6IEFkZGVkLgorICAgICAgICAq
IFBsYXRmb3JtR1RLLmNtYWtlOiBBZGQgcmVxdWlyZWQgZmlsZXMgdG8gY29tcGlsYXRpb24uCisg
ICAgICAgICogU2hhcmVkL1Byb2Nlc3NFeGVjdXRhYmxlUGF0aC5oOgorICAgICAgICAqIFNoYXJl
ZC9ndGsvS2V5ZWREZWNvZGVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OktleWVkRGVj
b2Rlcjo6S2V5ZWREZWNvZGVyKToKKyAgICAgICAgKFdlYktpdDo6S2V5ZWREZWNvZGVyOjp+S2V5
ZWREZWNvZGVyKToKKyAgICAgICAgKFdlYktpdDo6S2V5ZWREZWNvZGVyOjpidWlsZERpY3Rpb25h
cnlGcm9tR1ZhcmlhbnQpOgorICAgICAgICAoV2ViS2l0OjpLZXllZERlY29kZXI6OmRlY29kZUJ5
dGVzKToKKyAgICAgICAgKFdlYktpdDo6S2V5ZWREZWNvZGVyOjpkZWNvZGVCb29sKToKKyAgICAg
ICAgKFdlYktpdDo6S2V5ZWREZWNvZGVyOjpkZWNvZGVVSW50MzIpOgorICAgICAgICAoV2ViS2l0
OjpLZXllZERlY29kZXI6OmRlY29kZUludDMyKToKKyAgICAgICAgKFdlYktpdDo6S2V5ZWREZWNv
ZGVyOjpkZWNvZGVJbnQ2NCk6CisgICAgICAgIChXZWJLaXQ6OktleWVkRGVjb2Rlcjo6ZGVjb2Rl
RmxvYXQpOgorICAgICAgICAoV2ViS2l0OjpLZXllZERlY29kZXI6OmRlY29kZURvdWJsZSk6Cisg
ICAgICAgIChXZWJLaXQ6OktleWVkRGVjb2Rlcjo6ZGVjb2RlU3RyaW5nKToKKyAgICAgICAgKFdl
YktpdDo6S2V5ZWREZWNvZGVyOjpiZWdpbk9iamVjdCk6CisgICAgICAgIChXZWJLaXQ6OktleWVk
RGVjb2Rlcjo6ZW5kT2JqZWN0KToKKyAgICAgICAgKFdlYktpdDo6S2V5ZWREZWNvZGVyOjpiZWdp
bkFycmF5KToKKyAgICAgICAgKFdlYktpdDo6S2V5ZWREZWNvZGVyOjpiZWdpbkFycmF5RWxlbWVu
dCk6CisgICAgICAgIChXZWJLaXQ6OktleWVkRGVjb2Rlcjo6ZW5kQXJyYXlFbGVtZW50KToKKyAg
ICAgICAgKFdlYktpdDo6S2V5ZWREZWNvZGVyOjplbmRBcnJheSk6CisgICAgICAgICogU2hhcmVk
L2d0ay9LZXllZERlY29kZXIuaDogQWRkZWQuCisgICAgICAgICogU2hhcmVkL2d0ay9LZXllZEVu
Y29kZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6S2V5ZWRFbmNvZGVyOjpLZXllZEVu
Y29kZXIpOgorICAgICAgICAoV2ViS2l0OjpLZXllZEVuY29kZXI6On5LZXllZEVuY29kZXIpOgor
ICAgICAgICAoV2ViS2l0OjpLZXllZEVuY29kZXI6OmVuY29kZUJ5dGVzKToKKyAgICAgICAgKFdl
YktpdDo6S2V5ZWRFbmNvZGVyOjplbmNvZGVCb29sKToKKyAgICAgICAgKFdlYktpdDo6S2V5ZWRF
bmNvZGVyOjplbmNvZGVVSW50MzIpOgorICAgICAgICAoV2ViS2l0OjpLZXllZEVuY29kZXI6OmVu
Y29kZUludDMyKToKKyAgICAgICAgKFdlYktpdDo6S2V5ZWRFbmNvZGVyOjplbmNvZGVJbnQ2NCk6
CisgICAgICAgIChXZWJLaXQ6OktleWVkRW5jb2Rlcjo6ZW5jb2RlRmxvYXQpOgorICAgICAgICAo
V2ViS2l0OjpLZXllZEVuY29kZXI6OmVuY29kZURvdWJsZSk6CisgICAgICAgIChXZWJLaXQ6Oktl
eWVkRW5jb2Rlcjo6ZW5jb2RlU3RyaW5nKToKKyAgICAgICAgKFdlYktpdDo6S2V5ZWRFbmNvZGVy
OjpiZWdpbk9iamVjdCk6CisgICAgICAgIChXZWJLaXQ6OktleWVkRW5jb2Rlcjo6ZW5kT2JqZWN0
KToKKyAgICAgICAgKFdlYktpdDo6S2V5ZWRFbmNvZGVyOjpiZWdpbkFycmF5KToKKyAgICAgICAg
KFdlYktpdDo6S2V5ZWRFbmNvZGVyOjpiZWdpbkFycmF5RWxlbWVudCk6CisgICAgICAgIChXZWJL
aXQ6OktleWVkRW5jb2Rlcjo6ZW5kQXJyYXlFbGVtZW50KToKKyAgICAgICAgKFdlYktpdDo6S2V5
ZWRFbmNvZGVyOjplbmRBcnJheSk6CisgICAgICAgIChXZWJLaXQ6OktleWVkRW5jb2Rlcjo6Zmlu
aXNoRW5jb2RpbmcpOgorICAgICAgICAqIFNoYXJlZC9ndGsvS2V5ZWRFbmNvZGVyLmg6IEFkZGVk
LgorICAgICAgICAqIFNoYXJlZC9ndGsvUHJvY2Vzc0V4ZWN1dGFibGVQYXRoR3RrLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6ZXhlY3V0YWJsZVBhdGhPZkRhdGFiYXNlUHJvY2Vzcyk6CisgICAgICAg
ICogVUlQcm9jZXNzL0RhdGFiYXNlcy9EYXRhYmFzZVByb2Nlc3NQcm94eS5jcHA6CisgICAgICAg
IChXZWJLaXQ6OkRhdGFiYXNlUHJvY2Vzc1Byb3h5OjpkaWRDcmVhdGVEYXRhYmFzZVRvV2ViUHJv
Y2Vzc0Nvbm5lY3Rpb24pOgorICAgICAgICBBZGQgdGhlIHVuaXggZG9tYWluIHNvY2tldHMgaW1w
bGVtZW50YXRpb24uCisgICAgICAgICogVUlQcm9jZXNzL0xhdW5jaGVyL2d0ay9Qcm9jZXNzTGF1
bmNoZXJHdGsuY3BwOgorICAgICAgICAoV2ViS2l0OjpQcm9jZXNzTGF1bmNoZXI6OmxhdW5jaFBy
b2Nlc3MpOiBIYW5kbGUgdGhlCisgICAgICAgIERhdGFiYXNlUHJvY2VzcyB0b28uCisgICAgICAg
ICogVUlQcm9jZXNzL2d0ay9XZWJDb250ZXh0R3RrLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vi
Q29udGV4dDo6cGxhdGZvcm1EZWZhdWx0SW5kZXhlZERCRGF0YWJhc2VEaXJlY3RvcnkpOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBy
b2Nlc3M6OmVuc3VyZVdlYlRvRGF0YWJhc2VQcm9jZXNzQ29ubmVjdGlvbik6IEFkZAorICAgICAg
ICB0aGUgdW5peCBkb21haW4gc29ja2V0cyBpbXBsZW1lbnRhdGlvbi4KKwogMjAxNC0xMS0wNiAg
Q2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dU
S10gVXNlIEFQSTo6Q29udGV4dE1lbnVDbGllbnQgYW5kIEFQSTo6SW5qZWN0ZWRCdW5kbGU6OlBh
Z2VDb250ZXh0TWVudUNsaWVudCBjbGFzc2VzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9E
YXRhYmFzZVByb2Nlc3MvRGF0YWJhc2VQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL0RhdGFi
YXNlUHJvY2Vzcy9EYXRhYmFzZVByb2Nlc3MuY3BwCmluZGV4IDE5MGE1MjMuLjY0ZjU4M2QgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9EYXRhYmFzZVByb2Nlc3Mu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9EYXRhYmFzZVByb2Nlc3Mu
Y3BwCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSAiV2ViT3JpZ2luRGF0YU1hbmFnZXJNZXNz
YWdlcy5oIgogI2luY2x1ZGUgIldlYk9yaWdpbkRhdGFNYW5hZ2VyUHJveHlNZXNzYWdlcy5oIgog
I2luY2x1ZGUgPFdlYkNvcmUvRmlsZVN5c3RlbS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1w
bGVtZW50ZWQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1RleHRFbmNvZGluZy5oPgogI2luY2x1ZGUg
PHd0Zi9NYWluVGhyZWFkLmg+CiAKQEAgLTE4OCw2ICsxODksMTQgQEAgdm9pZCBEYXRhYmFzZVBy
b2Nlc3M6OmNyZWF0ZURhdGFiYXNlVG9XZWJQcm9jZXNzQ29ubmVjdGlvbigpCiAKICAgICBJUEM6
OkF0dGFjaG1lbnQgY2xpZW50UG9ydChsaXN0ZW5pbmdQb3J0LCBNQUNIX01TR19UWVBFX01BS0Vf
U0VORCk7CiAgICAgcGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6RGF0
YWJhc2VQcm9jZXNzUHJveHk6OkRpZENyZWF0ZURhdGFiYXNlVG9XZWJQcm9jZXNzQ29ubmVjdGlv
bihjbGllbnRQb3J0KSwgMCk7CisjZWxpZiBVU0UoVU5JWF9ET01BSU5fU09DS0VUUykKKyAgICBJ
UEM6OkNvbm5lY3Rpb246OlNvY2tldFBhaXIgc29ja2V0UGFpciA9IElQQzo6Q29ubmVjdGlvbjo6
Y3JlYXRlUGxhdGZvcm1Db25uZWN0aW9uKCk7CisKKyAgICBSZWZQdHI8RGF0YWJhc2VUb1dlYlBy
b2Nlc3NDb25uZWN0aW9uPiBjb25uZWN0aW9uID0gRGF0YWJhc2VUb1dlYlByb2Nlc3NDb25uZWN0
aW9uOjpjcmVhdGUoc29ja2V0UGFpci5zZXJ2ZXIpOworICAgIG1fZGF0YWJhc2VUb1dlYlByb2Nl
c3NDb25uZWN0aW9ucy5hcHBlbmQoY29ubmVjdGlvbi5yZWxlYXNlKCkpOworCisgICAgSVBDOjpB
dHRhY2htZW50IGNsaWVudFNvY2tldChzb2NrZXRQYWlyLmNsaWVudCk7CisgICAgcGFyZW50UHJv
Y2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6RGF0YWJhc2VQcm9jZXNzUHJveHk6OkRp
ZENyZWF0ZURhdGFiYXNlVG9XZWJQcm9jZXNzQ29ubmVjdGlvbihjbGllbnRTb2NrZXQpLCAwKTsK
ICNlbHNlCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0VudHJ5UG9pbnQvdW5peC9EYXRhYmFzZVByb2Nlc3NN
YWluLmNwcCBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9FbnRyeVBvaW50L3VuaXgv
RGF0YWJhc2VQcm9jZXNzTWFpbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uMjJjZDQ2NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJv
Y2Vzcy9FbnRyeVBvaW50L3VuaXgvRGF0YWJhc2VQcm9jZXNzTWFpbi5jcHAKQEAgLTAsMCArMSwz
MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiRGF0YWJhc2VQcm9jZXNzTWFpblVuaXguaCIKKwordXNpbmcgbmFtZXNwYWNlIFdl
YktpdDsKKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQoreworICAgIHJldHVybiBE
YXRhYmFzZVByb2Nlc3NNYWluVW5peChhcmdjLCBhcmd2KTsKK30KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvRGF0YWJhc2VQcm9jZXNzSURCQ29u
bmVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL0Rh
dGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb24uY3BwCmluZGV4IDdkNzMzNmEuLjhiZDA2YjMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvRGF0YWJh
c2VQcm9jZXNzSURCQ29ubmVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQ
cm9jZXNzL0luZGV4ZWREQi9EYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0aW9uLmNwcApAQCAtMzcs
NiArMzcsOCBAQAogI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgogI2luY2x1ZGUg
IldlYklEQlNlcnZlckNvbm5lY3Rpb25NZXNzYWdlcy5oIgogI2luY2x1ZGUgPFdlYkNvcmUvSURC
RGF0YWJhc2VNZXRhZGF0YS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSURCSW5kZXhNZXRhZGF0YS5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvSURCT2JqZWN0U3RvcmVNZXRhZGF0YS5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvSURCU2VydmVyQ29ubmVjdGlvbi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSW5kZXhl
ZERCLmg+CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9ndGsv
RGF0YWJhc2VQcm9jZXNzTWFpbkd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nl
c3MvZ3RrL0RhdGFiYXNlUHJvY2Vzc01haW5HdGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjY0M2M1Y2EKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9E
YXRhYmFzZVByb2Nlc3MvZ3RrL0RhdGFiYXNlUHJvY2Vzc01haW5HdGsuY3BwCkBAIC0wLDAgKzEs
NTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRhdGFiYXNlUHJvY2Vzc01haW5Vbml4Lmgi
CisKKyNpZiBFTkFCTEUoREFUQUJBU0VfUFJPQ0VTUykKKworI2luY2x1ZGUgIkNoaWxkUHJvY2Vz
c01haW4uaCIKKyNpbmNsdWRlICJEYXRhYmFzZVByb2Nlc3MuaCIKKyNpbmNsdWRlIDxndGsvZ3Rr
Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKwor
Y2xhc3MgRGF0YWJhc2VQcm9jZXNzTWFpbiBmaW5hbDogcHVibGljIENoaWxkUHJvY2Vzc01haW5C
YXNlIHsKK3B1YmxpYzoKKyAgICBib29sIHBsYXRmb3JtSW5pdGlhbGl6ZSgpIG92ZXJyaWRlCisg
ICAgeworICAgICAgICBndGtfaW5pdChudWxscHRyLCBudWxscHRyKTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorfTsKKworaW50IERhdGFiYXNlUHJvY2Vzc01haW5Vbml4KGludCBhcmdj
LCBjaGFyKiogYXJndikKK3sKKyAgICByZXR1cm4gQ2hpbGRQcm9jZXNzTWFpbjxEYXRhYmFzZVBy
b2Nlc3MsIERhdGFiYXNlUHJvY2Vzc01haW4+KGFyZ2MsIGFyZ3YpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShEQVRBQkFTRV9QUk9DRVNTKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL3VuaXgvRGF0YWJhc2VQcm9jZXNz
TWFpblVuaXguaCBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy91bml4L0RhdGFiYXNl
UHJvY2Vzc01haW5Vbml4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzBk
N2JmNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy91
bml4L0RhdGFiYXNlUHJvY2Vzc01haW5Vbml4LmgKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNCBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIERhdGFiYXNl
UHJvY2Vzc01haW5Vbml4X2gKKyNkZWZpbmUgRGF0YWJhc2VQcm9jZXNzTWFpblVuaXhfaAorCisj
aWYgRU5BQkxFKERBVEFCQVNFX1BST0NFU1MpCisKKyNpbmNsdWRlIDxXZWJLaXQvV0tCYXNlLmg+
CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitleHRlcm4gIkMiIHsKK1dLX0VYUE9SVCBpbnQgRGF0
YWJhc2VQcm9jZXNzTWFpblVuaXgoaW50IGFyZ2MsIGNoYXIqKiBhcmd2KTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBEYXRhYmFzZVByb2Nlc3NNYWluVW5peF9oCisK
KyNlbmRpZiAvLyBFTkFCTEUoREFUQUJBU0VfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtlIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21h
a2UKaW5kZXggYmFiZTI3ZC4uNGI0NDhmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxh
dGZvcm1HVEsuY21ha2UKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21ha2UKQEAg
LTE1LDYgKzE1LDggQEAgYWRkX2RlZmluaXRpb25zKC1ETElCRElSPSIke0xJQl9JTlNUQUxMX0RJ
Un0iKQogc2V0KFdlYktpdDJfVVNFX1BSRUZJWF9IRUFERVIgT04pCiAKIGxpc3QoQVBQRU5EIFdl
YktpdDJfU09VUkNFUworICAgIERhdGFiYXNlUHJvY2Vzcy9ndGsvRGF0YWJhc2VQcm9jZXNzTWFp
bkd0ay5jcHAKKwogICAgIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2VT
b3VwLmNwcAogCiAgICAgTmV0d29ya1Byb2Nlc3MvZ3RrL05ldHdvcmtQcm9jZXNzTWFpbkd0ay5j
cHAKQEAgLTUwLDYgKzUyLDggQEAgbGlzdChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAgICAgU2hh
cmVkL2NhaXJvL1NoYXJlYWJsZUJpdG1hcENhaXJvLmNwcAogCiAgICAgU2hhcmVkL2d0ay9Bcmd1
bWVudENvZGVyc0d0ay5jcHAKKyAgICBTaGFyZWQvZ3RrL0tleWVkRW5jb2Rlci5jcHAKKyAgICBT
aGFyZWQvZ3RrL0tleWVkRGVjb2Rlci5jcHAKICAgICBTaGFyZWQvZ3RrL05hdGl2ZVdlYktleWJv
YXJkRXZlbnRHdGsuY3BwCiAgICAgU2hhcmVkL2d0ay9OYXRpdmVXZWJNb3VzZUV2ZW50R3RrLmNw
cAogICAgIFNoYXJlZC9ndGsvTmF0aXZlV2ViVG91Y2hFdmVudEd0ay5jcHAKQEAgLTcyLDYgKzc2
LDggQEAgbGlzdChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAKICAgICBTaGFyZWQvdW5peC9DaGls
ZFByb2Nlc3NNYWluLmNwcAogCisgICAgVUlQcm9jZXNzL0RhdGFiYXNlcy9ndGsvRGF0YWJhc2VQ
cm9jZXNzUHJveHlHdGsuY3BwCisKICAgICBVSVByb2Nlc3MvRGVmYXVsdFVuZG9Db250cm9sbGVy
LmNwcAogICAgIFVJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5jcHAKIApAQCAtNDMxLDYg
KzQzNyw3IEBAIGxpc3QoQVBQRU5EIFdlYktpdDJfSU5DTFVERV9ESVJFQ1RPUklFUwogICAgICIk
e1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZSIKICAgICAiJHtXRUJDT1JF
X0RJUn0vcGxhdGZvcm0vbmV0d29yay9zb3VwIgogICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9y
bS90ZXh0L2VuY2hhbnQiCisgICAgIiR7V0VCS0lUMl9ESVJ9L0RhdGFiYXNlUHJvY2Vzcy91bml4
IgogICAgICIke1dFQktJVDJfRElSfS9OZXR3b3JrUHJvY2Vzcy9ndGsiCiAgICAgIiR7V0VCS0lU
Ml9ESVJ9L05ldHdvcmtQcm9jZXNzL3VuaXgiCiAgICAgIiR7V0VCS0lUMl9ESVJ9L1NoYXJlZC9B
UEkvYy9ndGsiCkBAIC00ODgsNiArNDk1LDEwIEBAIGxpc3QoQVBQRU5EIE5ldHdvcmtQcm9jZXNz
X1NPVVJDRVMKICAgICBOZXR3b3JrUHJvY2Vzcy9FbnRyeVBvaW50L3VuaXgvTmV0d29ya1Byb2Nl
c3NNYWluLmNwcAogKQogCitsaXN0KEFQUEVORCBEYXRhYmFzZVByb2Nlc3NfU09VUkNFUworICAg
IERhdGFiYXNlUHJvY2Vzcy9FbnRyeVBvaW50L3VuaXgvRGF0YWJhc2VQcm9jZXNzTWFpbi5jcHAK
KykKKwogZmlsZShXUklURSAke0NNQUtFX0JJTkFSWV9ESVJ9L3Rlc3RfYXRvbWljLmNwcAogICAg
ICAiI2luY2x1ZGUgPGF0b21pYz5cbiIKICAgICAgImludCBtYWluKCkgeyBzdGQ6OmF0b21pYzxp
bnQ2NF90PiBpKDApOyBpKys7IHJldHVybiAwOyB9XG4iKQpAQCAtOTUwLDYgKzk2MSw3IEBAIGFk
ZF9jdXN0b21fY29tbWFuZCgKICAgICAgICAgICAgICR7V2ViS2l0Ml9TT1VSQ0VTfQogICAgICAg
ICAgICAgJHtXZWJQcm9jZXNzX1NPVVJDRVN9CiAgICAgICAgICAgICAke05ldHdvcmtQcm9jZXNz
X1NPVVJDRVN9CisgICAgICAgICAgICAke0RhdGFiYXNlUHJvY2Vzc19TT1VSQ0VTfQogICAgICAg
ICAgICAgJHtQbHVnaW5Qcm9jZXNzR1RLMl9TT1VSQ0VTfQogICAgICAgICAgICAgJHtQbHVnaW5Q
cm9jZXNzX1NPVVJDRVN9CiAgICAgICAgICAgICAke1dlYktpdDJfSEVBREVSU30KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Qcm9jZXNzRXhlY3V0YWJsZVBhdGguaCBiL1NvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9Qcm9jZXNzRXhlY3V0YWJsZVBhdGguaAppbmRleCBkNzhlYmNkLi40
ZmZkMTFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvUHJvY2Vzc0V4ZWN1dGFi
bGVQYXRoLmgKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1Byb2Nlc3NFeGVjdXRhYmxlUGF0
aC5oCkBAIC0zNSw3ICszNSw5IEBAIFN0cmluZyBleGVjdXRhYmxlUGF0aE9mUGx1Z2luUHJvY2Vz
cygpOwogI2lmIEVOQUJMRShORVRXT1JLX1BST0NFU1MpCiBTdHJpbmcgZXhlY3V0YWJsZVBhdGhP
Zk5ldHdvcmtQcm9jZXNzKCk7CiAjZW5kaWYKLQorI2lmIEVOQUJMRShEQVRBQkFTRV9QUk9DRVNT
KQorU3RyaW5nIGV4ZWN1dGFibGVQYXRoT2ZEYXRhYmFzZVByb2Nlc3MoKTsKKyNlbmRpZgogfQog
CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvS2V5ZWREZWNv
ZGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvS2V5ZWREZWNvZGVyLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjRjNWY3Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9LZXllZERlY29kZXIuY3BwCkBAIC0wLDAgKzEs
MTkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IElnYWxpYSBTLkwuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJLZXllZERlY29kZXIuaCIKKworI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK0tleWVkRGVj
b2Rlcjo6S2V5ZWREZWNvZGVyKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKQorewor
ICAgIEdSZWZQdHI8R0J5dGVzPiBieXRlcyA9IGFkb3B0R1JlZihnX2J5dGVzX25ldyhkYXRhLCBz
aXplKSk7CisgICAgR1JlZlB0cjxHVmFyaWFudD4gdmFyaWFudCA9IGdfdmFyaWFudF9uZXdfZnJv
bV9ieXRlcyhHX1ZBUklBTlRfVFlQRSgiYXtzdn0iKSwgYnl0ZXMuZ2V0KCksIFRSVUUpOworICAg
IEhhc2hNYXA8U3RyaW5nLCBHUmVmUHRyPEdWYXJpYW50Pj4gZGljdGlvbmFyeTsKKyAgICBidWls
ZERpY3Rpb25hcnlGcm9tR1ZhcmlhbnQodmFyaWFudC5nZXQoKSwgZGljdGlvbmFyeSk7CisgICAg
bV9kaWN0aW9uYXJ5U3RhY2suYXBwZW5kKFdURjo6bW92ZShkaWN0aW9uYXJ5KSk7Cit9CisKK0tl
eWVkRGVjb2Rlcjo6fktleWVkRGVjb2RlcigpCit7CisgICAgQVNTRVJUKG1fZGljdGlvbmFyeVN0
YWNrLnNpemUoKSA9PSAxKTsKKyAgICBBU1NFUlQobV9hcnJheVN0YWNrLmlzRW1wdHkoKSk7Cisg
ICAgQVNTRVJUKG1fYXJyYXlJbmRleFN0YWNrLmlzRW1wdHkoKSk7Cit9CisKK3ZvaWQgS2V5ZWRE
ZWNvZGVyOjpidWlsZERpY3Rpb25hcnlGcm9tR1ZhcmlhbnQoR1ZhcmlhbnQqIHZhcmlhbnQsIEhh
c2hNYXA8U3RyaW5nLCBHUmVmUHRyPEdWYXJpYW50Pj4mIGRpY3Rpb25hcnkpCit7CisgICAgR1Zh
cmlhbnRJdGVyIGl0ZXI7CisgICAgZ192YXJpYW50X2l0ZXJfaW5pdCgmaXRlciwgdmFyaWFudCk7
CisgICAgY29uc3QgY2hhcioga2V5OworICAgIEdWYXJpYW50KiB2YWx1ZTsKKyAgICB3aGlsZSAo
Z192YXJpYW50X2l0ZXJfbG9vcCgmaXRlciwgInsmc3Z9IiwgJmtleSwgJnZhbHVlKSkKKyAgICAg
ICAgZGljdGlvbmFyeS5zZXQoU3RyaW5nOjpmcm9tVVRGOChrZXkpLCB2YWx1ZSk7Cit9CisKK2Jv
b2wgS2V5ZWREZWNvZGVyOjpkZWNvZGVCeXRlcyhjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgdWlu
dDhfdComIGJ5dGVzLCBzaXplX3QmIHNpemUpCit7CisgICAgR1JlZlB0cjxHVmFyaWFudD4gdmFs
dWUgPSBtX2RpY3Rpb25hcnlTdGFjay5sYXN0KCkuZ2V0KGtleSk7CisgICAgaWYgKCF2YWx1ZSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgc2l6ZSA9IGdfdmFyaWFudF9nZXRfc2l6ZSh2
YWx1ZS5nZXQoKSk7CisgICAgYnl0ZXMgPSBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oZ192
YXJpYW50X2dldF9kYXRhKHZhbHVlLmdldCgpKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jv
b2wgS2V5ZWREZWNvZGVyOjpkZWNvZGVCb29sKGNvbnN0IFN0cmluZyYga2V5LCBib29sJiByZXN1
bHQpCit7CisgICAgR1JlZlB0cjxHVmFyaWFudD4gdmFsdWUgPSBtX2RpY3Rpb25hcnlTdGFjay5s
YXN0KCkuZ2V0KGtleSk7CisgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgcmVzdWx0ID0gZ192YXJpYW50X2dldF9ib29sZWFuKHZhbHVlLmdldCgpKTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBLZXllZERlY29kZXI6OmRlY29kZVVJbnQzMihjb25zdCBT
dHJpbmcmIGtleSwgdWludDMyX3QmIHJlc3VsdCkKK3sKKyAgICBHUmVmUHRyPEdWYXJpYW50PiB2
YWx1ZSA9IG1fZGljdGlvbmFyeVN0YWNrLmxhc3QoKS5nZXQoa2V5KTsKKyAgICBpZiAoIXZhbHVl
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXN1bHQgPSBnX3ZhcmlhbnRfZ2V0X3Vp
bnQzMih2YWx1ZS5nZXQoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgS2V5ZWREZWNv
ZGVyOjpkZWNvZGVJbnQzMihjb25zdCBTdHJpbmcmIGtleSwgaW50MzJfdCYgcmVzdWx0KQorewor
ICAgIEdSZWZQdHI8R1ZhcmlhbnQ+IHZhbHVlID0gbV9kaWN0aW9uYXJ5U3RhY2subGFzdCgpLmdl
dChrZXkpOworICAgIGlmICghdmFsdWUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJl
c3VsdCA9IGdfdmFyaWFudF9nZXRfaW50MzIodmFsdWUuZ2V0KCkpOworICAgIHJldHVybiB0cnVl
OworfQorCitib29sIEtleWVkRGVjb2Rlcjo6ZGVjb2RlSW50NjQoY29uc3QgU3RyaW5nJiBrZXks
IGludDY0X3QmIHJlc3VsdCkKK3sKKyAgICBHUmVmUHRyPEdWYXJpYW50PiB2YWx1ZSA9IG1fZGlj
dGlvbmFyeVN0YWNrLmxhc3QoKS5nZXQoa2V5KTsKKyAgICBpZiAoIXZhbHVlKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICByZXN1bHQgPSBnX3ZhcmlhbnRfZ2V0X2ludDY0KHZhbHVlLmdl
dCgpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBLZXllZERlY29kZXI6OmRlY29kZUZs
b2F0KGNvbnN0IFN0cmluZyYga2V5LCBmbG9hdCYgcmVzdWx0KQoreworICAgIEdSZWZQdHI8R1Zh
cmlhbnQ+IHZhbHVlID0gbV9kaWN0aW9uYXJ5U3RhY2subGFzdCgpLmdldChrZXkpOworICAgIGlm
ICghdmFsdWUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJlc3VsdCA9IGdfdmFyaWFu
dF9nZXRfZG91YmxlKHZhbHVlLmdldCgpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBL
ZXllZERlY29kZXI6OmRlY29kZURvdWJsZShjb25zdCBTdHJpbmcmIGtleSwgZG91YmxlJiByZXN1
bHQpCit7CisgICAgR1JlZlB0cjxHVmFyaWFudD4gdmFsdWUgPSBtX2RpY3Rpb25hcnlTdGFjay5s
YXN0KCkuZ2V0KGtleSk7CisgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgcmVzdWx0ID0gZ192YXJpYW50X2dldF9kb3VibGUodmFsdWUuZ2V0KCkpOworICAgIHJl
dHVybiB0cnVlOworfQorCitib29sIEtleWVkRGVjb2Rlcjo6ZGVjb2RlU3RyaW5nKGNvbnN0IFN0
cmluZyYga2V5LCBTdHJpbmcmIHJlc3VsdCkKK3sKKyAgICBHUmVmUHRyPEdWYXJpYW50PiB2YWx1
ZSA9IG1fZGljdGlvbmFyeVN0YWNrLmxhc3QoKS5nZXQoa2V5KTsKKyAgICBpZiAoIXZhbHVlKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXN1bHQgPSBTdHJpbmc6OmZyb21VVEY4KGdf
dmFyaWFudF9nZXRfc3RyaW5nKHZhbHVlLmdldCgpLCBudWxscHRyKSk7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2Jvb2wgS2V5ZWREZWNvZGVyOjpiZWdpbk9iamVjdChjb25zdCBTdHJpbmcmIGtl
eSkKK3sKKyAgICBHUmVmUHRyPEdWYXJpYW50PiB2YWx1ZSA9IG1fZGljdGlvbmFyeVN0YWNrLmxh
c3QoKS5nZXQoa2V5KTsKKyAgICBpZiAoIXZhbHVlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBIYXNoTWFwPFN0cmluZywgR1JlZlB0cjxHVmFyaWFudD4+IGRpY3Rpb25hcnk7CisgICAg
YnVpbGREaWN0aW9uYXJ5RnJvbUdWYXJpYW50KHZhbHVlLmdldCgpLCBkaWN0aW9uYXJ5KTsKKyAg
ICBtX2RpY3Rpb25hcnlTdGFjay5hcHBlbmQoV1RGOjptb3ZlKGRpY3Rpb25hcnkpKTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBLZXllZERlY29kZXI6OmVuZE9iamVjdCgpCit7CisgICAg
bV9kaWN0aW9uYXJ5U3RhY2sucmVtb3ZlTGFzdCgpOworfQorCitib29sIEtleWVkRGVjb2Rlcjo6
YmVnaW5BcnJheShjb25zdCBTdHJpbmcmIGtleSkKK3sKKyAgICBHUmVmUHRyPEdWYXJpYW50PiB2
YWx1ZSA9IG1fZGljdGlvbmFyeVN0YWNrLmxhc3QoKS5nZXQoa2V5KTsKKyAgICBpZiAoIXZhbHVl
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBtX2FycmF5U3RhY2suYXBwZW5kKHZhbHVl
LmdldCgpKTsKKyAgICBtX2FycmF5SW5kZXhTdGFjay5hcHBlbmQoMCk7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2Jvb2wgS2V5ZWREZWNvZGVyOjpiZWdpbkFycmF5RWxlbWVudCgpCit7CisgICAg
aWYgKG1fYXJyYXlJbmRleFN0YWNrLmxhc3QoKSA+PSBnX3ZhcmlhbnRfbl9jaGlsZHJlbihtX2Fy
cmF5U3RhY2subGFzdCgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgR1JlZlB0cjxH
VmFyaWFudD4gdmFyaWFudCA9IGFkb3B0R1JlZihnX3ZhcmlhbnRfZ2V0X2NoaWxkX3ZhbHVlKG1f
YXJyYXlTdGFjay5sYXN0KCksIG1fYXJyYXlJbmRleFN0YWNrLmxhc3QoKSsrKSk7CisgICAgSGFz
aE1hcDxTdHJpbmcsIEdSZWZQdHI8R1ZhcmlhbnQ+PiBkaWN0aW9uYXJ5OworICAgIGJ1aWxkRGlj
dGlvbmFyeUZyb21HVmFyaWFudCh2YXJpYW50LmdldCgpLCBkaWN0aW9uYXJ5KTsKKyAgICBtX2Rp
Y3Rpb25hcnlTdGFjay5hcHBlbmQoV1RGOjptb3ZlKGRpY3Rpb25hcnkpKTsKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwordm9pZCBLZXllZERlY29kZXI6OmVuZEFycmF5RWxlbWVudCgpCit7CisgICAg
bV9kaWN0aW9uYXJ5U3RhY2sucmVtb3ZlTGFzdCgpOworfQorCit2b2lkIEtleWVkRGVjb2Rlcjo6
ZW5kQXJyYXkoKQoreworICAgIG1fYXJyYXlTdGFjay5yZW1vdmVMYXN0KCk7CisgICAgbV9hcnJh
eUluZGV4U3RhY2sucmVtb3ZlTGFzdCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvS2V5ZWREZWNvZGVyLmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL0tleWVkRGVjb2Rlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjMwZWNhOWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvZ3RrL0tleWVkRGVjb2Rlci5oCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgSWdhaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEtleWVkRGVjb2Rl
cl9oCisjZGVmaW5lIEtleWVkRGVjb2Rlcl9oCisKKyNpbmNsdWRlIDxXZWJDb3JlL0tleWVkQ29k
aW5nLmg+CisjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5j
bHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hh
c2guaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYktp
dCB7CisKK2NsYXNzIEtleWVkRGVjb2RlciBmaW5hbCA6IHB1YmxpYyBXZWJDb3JlOjpLZXllZERl
Y29kZXIgeworcHVibGljOgorICAgIEtleWVkRGVjb2Rlcihjb25zdCB1aW50OF90KiBkYXRhLCBz
aXplX3QpOworICAgIHZpcnR1YWwgfktleWVkRGVjb2RlcigpIG92ZXJyaWRlOworCitwcml2YXRl
OgorICAgIHZpcnR1YWwgYm9vbCBkZWNvZGVCeXRlcyhjb25zdCBTdHJpbmcmIGtleSwgY29uc3Qg
dWludDhfdComLCBzaXplX3QmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgZGVjb2RlQm9v
bChjb25zdCBTdHJpbmcmIGtleSwgYm9vbCYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBk
ZWNvZGVVSW50MzIoY29uc3QgU3RyaW5nJiBrZXksIHVpbnQzMl90Jikgb3ZlcnJpZGU7CisgICAg
dmlydHVhbCBib29sIGRlY29kZUludDMyKGNvbnN0IFN0cmluZyYga2V5LCBpbnQzMl90Jikgb3Zl
cnJpZGU7CisgICAgdmlydHVhbCBib29sIGRlY29kZUludDY0KGNvbnN0IFN0cmluZyYga2V5LCBp
bnQ2NF90Jikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIGRlY29kZUZsb2F0KGNvbnN0IFN0
cmluZyYga2V5LCBmbG9hdCYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBkZWNvZGVEb3Vi
bGUoY29uc3QgU3RyaW5nJiBrZXksIGRvdWJsZSYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9v
bCBkZWNvZGVTdHJpbmcoY29uc3QgU3RyaW5nJiBrZXksIFN0cmluZyYpIG92ZXJyaWRlOworCisg
ICAgdmlydHVhbCBib29sIGJlZ2luT2JqZWN0KGNvbnN0IFN0cmluZyYga2V5KSBvdmVycmlkZTsK
KyAgICB2aXJ0dWFsIHZvaWQgZW5kT2JqZWN0KCkgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFsIGJv
b2wgYmVnaW5BcnJheShjb25zdCBTdHJpbmcmIGtleSkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBi
b29sIGJlZ2luQXJyYXlFbGVtZW50KCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGVuZEFy
cmF5RWxlbWVudCgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBlbmRBcnJheSgpIG92ZXJy
aWRlOworCisgICAgdm9pZCBidWlsZERpY3Rpb25hcnlGcm9tR1ZhcmlhbnQoR1ZhcmlhbnQqLCBI
YXNoTWFwPFN0cmluZywgR1JlZlB0cjxHVmFyaWFudD4+Jik7CisKKyAgICBWZWN0b3I8SGFzaE1h
cDxTdHJpbmcsIEdSZWZQdHI8R1ZhcmlhbnQ+Pj4gbV9kaWN0aW9uYXJ5U3RhY2s7CisgICAgVmVj
dG9yPEdWYXJpYW50KiwgMTY+IG1fYXJyYXlTdGFjazsKKyAgICBWZWN0b3I8dW5zaWduZWQ+IG1f
YXJyYXlJbmRleFN0YWNrOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAv
LyBLZXllZERlY29kZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9L
ZXllZEVuY29kZXIuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9LZXllZEVuY29kZXIu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExODQxZGQKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL0tleWVkRW5jb2Rlci5jcHAKQEAg
LTAsMCArMSwxMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgSWdhbGlhIFMuTC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIktleWVkRW5jb2Rlci5oIgor
CisjaW5jbHVkZSA8V2ViQ29yZS9TaGFyZWRCdWZmZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0
IHsKKworS2V5ZWRFbmNvZGVyOjpLZXllZEVuY29kZXIoKQoreworICAgIGdfdmFyaWFudF9idWls
ZGVyX2luaXQoJm1fdmFyaWFudEJ1aWxkZXIsIEdfVkFSSUFOVF9UWVBFKCJhe3N2fSIpKTsKKyAg
ICBtX3ZhcmlhbnRCdWlsZGVyU3RhY2suYXBwZW5kKCZtX3ZhcmlhbnRCdWlsZGVyKTsKK30KKwor
S2V5ZWRFbmNvZGVyOjp+S2V5ZWRFbmNvZGVyKCkKK3sKKyAgICBBU1NFUlQobV92YXJpYW50QnVp
bGRlclN0YWNrLnNpemUoKSA9PSAxKTsKKyAgICBBU1NFUlQobV92YXJpYW50QnVpbGRlclN0YWNr
Lmxhc3QoKSA9PSAmbV92YXJpYW50QnVpbGRlcik7CisgICAgQVNTRVJUKG1fYXJyYXlTdGFjay5p
c0VtcHR5KCkpOworICAgIEFTU0VSVChtX29iamVjdFN0YWNrLmlzRW1wdHkoKSk7Cit9CisKK3Zv
aWQgS2V5ZWRFbmNvZGVyOjplbmNvZGVCeXRlcyhjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgdWlu
dDhfdCogYnl0ZXMsIHNpemVfdCBzaXplKQoreworICAgIEdSZWZQdHI8R0J5dGVzPiBnQnl0ZXMg
PSBhZG9wdEdSZWYoZ19ieXRlc19uZXdfc3RhdGljKGJ5dGVzLCBzaXplKSk7CisgICAgZ192YXJp
YW50X2J1aWxkZXJfYWRkKG1fdmFyaWFudEJ1aWxkZXJTdGFjay5sYXN0KCksICJ7c3Z9Iiwga2V5
LnV0ZjgoKS5kYXRhKCksIGdfdmFyaWFudF9uZXdfZnJvbV9ieXRlcyhHX1ZBUklBTlRfVFlQRSgi
YXkiKSwgZ0J5dGVzLmdldCgpLCBUUlVFKSk7Cit9CisKK3ZvaWQgS2V5ZWRFbmNvZGVyOjplbmNv
ZGVCb29sKGNvbnN0IFN0cmluZyYga2V5LCBib29sIHZhbHVlKQoreworICAgIGdfdmFyaWFudF9i
dWlsZGVyX2FkZChtX3ZhcmlhbnRCdWlsZGVyU3RhY2subGFzdCgpLCAie3N2fSIsIGtleS51dGY4
KCkuZGF0YSgpLCBnX3ZhcmlhbnRfbmV3X2Jvb2xlYW4odmFsdWUpKTsKK30KKwordm9pZCBLZXll
ZEVuY29kZXI6OmVuY29kZVVJbnQzMihjb25zdCBTdHJpbmcmIGtleSwgdWludDMyX3QgdmFsdWUp
Cit7CisgICAgZ192YXJpYW50X2J1aWxkZXJfYWRkKG1fdmFyaWFudEJ1aWxkZXJTdGFjay5sYXN0
KCksICJ7c3Z9Iiwga2V5LnV0ZjgoKS5kYXRhKCksIGdfdmFyaWFudF9uZXdfdWludDMyKHZhbHVl
KSk7Cit9CisKK3ZvaWQgS2V5ZWRFbmNvZGVyOjplbmNvZGVJbnQzMihjb25zdCBTdHJpbmcmIGtl
eSwgaW50MzJfdCB2YWx1ZSkKK3sKKyAgICBnX3ZhcmlhbnRfYnVpbGRlcl9hZGQobV92YXJpYW50
QnVpbGRlclN0YWNrLmxhc3QoKSwgIntzdn0iLCBrZXkudXRmOCgpLmRhdGEoKSwgZ192YXJpYW50
X25ld19pbnQzMih2YWx1ZSkpOworfQorCit2b2lkIEtleWVkRW5jb2Rlcjo6ZW5jb2RlSW50NjQo
Y29uc3QgU3RyaW5nJiBrZXksIGludDY0X3QgdmFsdWUpCit7CisgICAgZ192YXJpYW50X2J1aWxk
ZXJfYWRkKG1fdmFyaWFudEJ1aWxkZXJTdGFjay5sYXN0KCksICJ7c3Z9Iiwga2V5LnV0ZjgoKS5k
YXRhKCksIGdfdmFyaWFudF9uZXdfaW50NjQodmFsdWUpKTsKK30KKwordm9pZCBLZXllZEVuY29k
ZXI6OmVuY29kZUZsb2F0KGNvbnN0IFN0cmluZyYga2V5LCBmbG9hdCB2YWx1ZSkKK3sKKyAgICBl
bmNvZGVEb3VibGUoa2V5LCB2YWx1ZSk7Cit9CisKK3ZvaWQgS2V5ZWRFbmNvZGVyOjplbmNvZGVE
b3VibGUoY29uc3QgU3RyaW5nJiBrZXksIGRvdWJsZSB2YWx1ZSkKK3sKKyAgICBnX3ZhcmlhbnRf
YnVpbGRlcl9hZGQobV92YXJpYW50QnVpbGRlclN0YWNrLmxhc3QoKSwgIntzdn0iLCBrZXkudXRm
OCgpLmRhdGEoKSwgZ192YXJpYW50X25ld19kb3VibGUodmFsdWUpKTsKK30KKwordm9pZCBLZXll
ZEVuY29kZXI6OmVuY29kZVN0cmluZyhjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2
YWx1ZSkKK3sKKyAgICBnX3ZhcmlhbnRfYnVpbGRlcl9hZGQobV92YXJpYW50QnVpbGRlclN0YWNr
Lmxhc3QoKSwgIntzdn0iLCBrZXkudXRmOCgpLmRhdGEoKSwgZ192YXJpYW50X25ld19zdHJpbmco
dmFsdWUudXRmOCgpLmRhdGEoKSkpOworfQorCit2b2lkIEtleWVkRW5jb2Rlcjo6YmVnaW5PYmpl
Y3QoY29uc3QgU3RyaW5nJiBrZXkpCit7CisgICAgR1JlZlB0cjxHVmFyaWFudEJ1aWxkZXI+IGJ1
aWxkZXIgPSBhZG9wdEdSZWYoZ192YXJpYW50X2J1aWxkZXJfbmV3KEdfVkFSSUFOVF9UWVBFKCJh
YXtzdn0iKSkpOworICAgIG1fb2JqZWN0U3RhY2suYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKGtleSwg
YnVpbGRlcikpOworICAgIG1fdmFyaWFudEJ1aWxkZXJTdGFjay5hcHBlbmQoYnVpbGRlci5nZXQo
KSk7Cit9CisKK3ZvaWQgS2V5ZWRFbmNvZGVyOjplbmRPYmplY3QoKQoreworICAgIEdWYXJpYW50
QnVpbGRlciogYnVpbGRlciA9IG1fdmFyaWFudEJ1aWxkZXJTdGFjay50YWtlTGFzdCgpOworICAg
IGdfdmFyaWFudF9idWlsZGVyX2FkZChtX3ZhcmlhbnRCdWlsZGVyU3RhY2subGFzdCgpLCAie3N2
fSIsIG1fb2JqZWN0U3RhY2subGFzdCgpLmZpcnN0LnV0ZjgoKS5kYXRhKCksIGdfdmFyaWFudF9i
dWlsZGVyX2VuZChidWlsZGVyKSk7CisgICAgbV9vYmplY3RTdGFjay5yZW1vdmVMYXN0KCk7Cit9
CisKK3ZvaWQgS2V5ZWRFbmNvZGVyOjpiZWdpbkFycmF5KGNvbnN0IFN0cmluZyYga2V5KQorewor
ICAgIG1fYXJyYXlTdGFjay5hcHBlbmQoc3RkOjptYWtlX3BhaXIoa2V5LCBhZG9wdEdSZWYoZ192
YXJpYW50X2J1aWxkZXJfbmV3KEdfVkFSSUFOVF9UWVBFKCJhYXtzdn0iKSkpKSk7Cit9CisKK3Zv
aWQgS2V5ZWRFbmNvZGVyOjpiZWdpbkFycmF5RWxlbWVudCgpCit7CisgICAgbV92YXJpYW50QnVp
bGRlclN0YWNrLmFwcGVuZChnX3ZhcmlhbnRfYnVpbGRlcl9uZXcoR19WQVJJQU5UX1RZUEUoImF7
c3Z9IikpKTsKK30KKwordm9pZCBLZXllZEVuY29kZXI6OmVuZEFycmF5RWxlbWVudCgpCit7Cisg
ICAgR1JlZlB0cjxHVmFyaWFudEJ1aWxkZXI+IHZhcmlhbnRCdWlsZGVyID0gYWRvcHRHUmVmKG1f
dmFyaWFudEJ1aWxkZXJTdGFjay50YWtlTGFzdCgpKTsKKyAgICBnX3ZhcmlhbnRfYnVpbGRlcl9h
ZGRfdmFsdWUobV9hcnJheVN0YWNrLmxhc3QoKS5zZWNvbmQuZ2V0KCksIGdfdmFyaWFudF9idWls
ZGVyX2VuZCh2YXJpYW50QnVpbGRlci5nZXQoKSkpOworfQorCit2b2lkIEtleWVkRW5jb2Rlcjo6
ZW5kQXJyYXkoKQoreworICAgIGdfdmFyaWFudF9idWlsZGVyX2FkZChtX3ZhcmlhbnRCdWlsZGVy
U3RhY2subGFzdCgpLCAie3N2fSIsIG1fYXJyYXlTdGFjay5sYXN0KCkuZmlyc3QudXRmOCgpLmRh
dGEoKSwgZ192YXJpYW50X2J1aWxkZXJfZW5kKG1fYXJyYXlTdGFjay5sYXN0KCkuc2Vjb25kLmdl
dCgpKSk7CisgICAgbV9hcnJheVN0YWNrLnJlbW92ZUxhc3QoKTsKK30KKworUGFzc1JlZlB0cjxT
aGFyZWRCdWZmZXI+IEtleWVkRW5jb2Rlcjo6ZmluaXNoRW5jb2RpbmcoKQoreworICAgIGdfYXNz
ZXJ0KG1fdmFyaWFudEJ1aWxkZXJTdGFjay5sYXN0KCkgPT0gJm1fdmFyaWFudEJ1aWxkZXIpOwor
ICAgIEdSZWZQdHI8R1ZhcmlhbnQ+IHZhcmlhbnQgPSBnX3ZhcmlhbnRfYnVpbGRlcl9lbmQoJm1f
dmFyaWFudEJ1aWxkZXIpOworICAgIEdSZWZQdHI8R0J5dGVzPiBkYXRhID0gZ192YXJpYW50X2dl
dF9kYXRhX2FzX2J5dGVzKHZhcmlhbnQuZ2V0KCkpOworICAgIHJldHVybiBTaGFyZWRCdWZmZXI6
OmNyZWF0ZShzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oZ19ieXRlc19nZXRfZGF0
YShkYXRhLmdldCgpLCBudWxscHRyKSksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihnX2J5dGVzX2dl
dF9zaXplKGRhdGEuZ2V0KCkpKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9LZXllZEVuY29kZXIuaCBiL1NvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9ndGsvS2V5ZWRFbmNvZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uZGRjNDJmYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1No
YXJlZC9ndGsvS2V5ZWRFbmNvZGVyLmgKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEtleWVkRW5jb2Rlcl9o
CisjZGVmaW5lIEtleWVkRW5jb2Rlcl9oCisKKyNpbmNsdWRlIDxXZWJDb3JlL0tleWVkQ29kaW5n
Lmg+CisjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRl
IDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBLZXllZEVuY29kZXIgZmluYWwgOiBwdWJs
aWMgV2ViQ29yZTo6S2V5ZWRFbmNvZGVyIHsKK3B1YmxpYzoKKyAgICBLZXllZEVuY29kZXIoKTsK
KyAgICB+S2V5ZWRFbmNvZGVyKCk7CisKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViQ29yZTo6
U2hhcmVkQnVmZmVyPiBmaW5pc2hFbmNvZGluZygpIG92ZXJyaWRlOworCitwcml2YXRlOgorICAg
IHZpcnR1YWwgdm9pZCBlbmNvZGVCeXRlcyhjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgdWludDhf
dCosIHNpemVfdCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGVuY29kZUJvb2woY29uc3Qg
U3RyaW5nJiBrZXksIGJvb2wpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBlbmNvZGVVSW50
MzIoY29uc3QgU3RyaW5nJiBrZXksIHVpbnQzMl90KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZv
aWQgZW5jb2RlSW50MzIoY29uc3QgU3RyaW5nJiBrZXksIGludDMyX3QpIG92ZXJyaWRlOworICAg
IHZpcnR1YWwgdm9pZCBlbmNvZGVJbnQ2NChjb25zdCBTdHJpbmcmIGtleSwgaW50NjRfdCkgb3Zl
cnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGVuY29kZUZsb2F0KGNvbnN0IFN0cmluZyYga2V5LCBm
bG9hdCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGVuY29kZURvdWJsZShjb25zdCBTdHJp
bmcmIGtleSwgZG91YmxlKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZW5jb2RlU3RyaW5n
KGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKKworICAgIHZpcnR1
YWwgdm9pZCBiZWdpbk9iamVjdChjb25zdCBTdHJpbmcmIGtleSkgb3ZlcnJpZGU7CisgICAgdmly
dHVhbCB2b2lkIGVuZE9iamVjdCgpIG92ZXJyaWRlOworCisgICAgdmlydHVhbCB2b2lkIGJlZ2lu
QXJyYXkoY29uc3QgU3RyaW5nJiBrZXkpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBiZWdp
bkFycmF5RWxlbWVudCgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBlbmRBcnJheUVsZW1l
bnQoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZW5kQXJyYXkoKSBvdmVycmlkZTsKKwor
ICAgIEdWYXJpYW50QnVpbGRlciBtX3ZhcmlhbnRCdWlsZGVyOworICAgIFZlY3RvcjxHVmFyaWFu
dEJ1aWxkZXIqLCAxNj4gbV92YXJpYW50QnVpbGRlclN0YWNrOworICAgIFZlY3RvcjxzdGQ6OnBh
aXI8U3RyaW5nLCBHUmVmUHRyPEdWYXJpYW50QnVpbGRlcj4+LCAxNj4gbV9hcnJheVN0YWNrOwor
ICAgIFZlY3RvcjxzdGQ6OnBhaXI8U3RyaW5nLCBHUmVmUHRyPEdWYXJpYW50QnVpbGRlcj4+LCAx
Nj4gbV9vYmplY3RTdGFjazsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYg
Ly8gS2V5ZWRFbmNvZGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsv
UHJvY2Vzc0V4ZWN1dGFibGVQYXRoR3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsv
UHJvY2Vzc0V4ZWN1dGFibGVQYXRoR3RrLmNwcAppbmRleCBlNzU3Y2MyLi41YjViOTQ3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL1Byb2Nlc3NFeGVjdXRhYmxlUGF0aEd0
ay5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9Qcm9jZXNzRXhlY3V0YWJsZVBh
dGhHdGsuY3BwCkBAIC03OSw0ICs3OSwxMSBAQCBTdHJpbmcgZXhlY3V0YWJsZVBhdGhPZk5ldHdv
cmtQcm9jZXNzKCkKIH0KICNlbmRpZgogCisjaWYgRU5BQkxFKERBVEFCQVNFX1BST0NFU1MpCitT
dHJpbmcgZXhlY3V0YWJsZVBhdGhPZkRhdGFiYXNlUHJvY2VzcygpCit7CisgICAgcmV0dXJuIGZp
bmRXZWJLaXRQcm9jZXNzKCJXZWJLaXREYXRhYmFzZVByb2Nlc3MiKTsKK30KKyNlbmRpZgorCiB9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9EYXRhYmFzZXMvRGF0YWJhc2VQcm9jZXNzUHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0RhdGFiYXNlcy9EYXRhYmFzZVByb2Nlc3NQcm94eS5jcHAKaW5kZXggNzQ3NTg0Ny4u
YjYzMTlkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RhdGFiYXNlcy9E
YXRhYmFzZVByb2Nlc3NQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Rh
dGFiYXNlcy9EYXRhYmFzZVByb2Nlc3NQcm94eS5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNs
dWRlICJXZWJPcmlnaW5EYXRhTWFuYWdlclByb3h5LmgiCiAjaW5jbHVkZSAiV2ViT3JpZ2luRGF0
YU1hbmFnZXJQcm94eU1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc1Bvb2wuaCIKKyNp
bmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CiAKICNpZiBFTkFCTEUoREFUQUJBU0Vf
UFJPQ0VTUykKIApAQCAtMTE3LDYgKzExOCw4IEBAIHZvaWQgRGF0YWJhc2VQcm9jZXNzUHJveHk6
OmRpZENyZWF0ZURhdGFiYXNlVG9XZWJQcm9jZXNzQ29ubmVjdGlvbihjb25zdCBJUEM6OkF0CiAK
ICNpZiBPUyhEQVJXSU4pCiAgICAgcmVwbHktPnNlbmQoSVBDOjpBdHRhY2htZW50KGNvbm5lY3Rp
b25JZGVudGlmaWVyLnBvcnQoKSwgTUFDSF9NU0dfVFlQRV9NT1ZFX1NFTkQpKTsKKyNlbGlmIFVT
RShVTklYX0RPTUFJTl9TT0NLRVRTKQorICAgIHJlcGx5LT5zZW5kKGNvbm5lY3Rpb25JZGVudGlm
aWVyKTsKICNlbHNlCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RhdGFiYXNlcy9ndGsvRGF0YWJhc2VQcm9jZXNzUHJv
eHlHdGsuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RhdGFiYXNlcy9ndGsvRGF0YWJh
c2VQcm9jZXNzUHJveHlHdGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjgzZTI5ZjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRGF0
YWJhc2VzL2d0ay9EYXRhYmFzZVByb2Nlc3NQcm94eUd0ay5jcHAKQEAgLTAsMCArMSwzOSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRGF0YWJhc2VQcm9jZXNzUHJveHkuaCIKKworI2lmIEVO
QUJMRShEQVRBQkFTRV9QUk9DRVNTKQorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordm9pZCBEYXRh
YmFzZVByb2Nlc3NQcm94eTo6cGxhdGZvcm1HZXRMYXVuY2hPcHRpb25zKFByb2Nlc3NMYXVuY2hl
cjo6TGF1bmNoT3B0aW9ucyYpCit7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5k
aWYgLy8gRU5BQkxFKERBVEFCQVNFX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvTGF1bmNoZXIvZ3RrL1Byb2Nlc3NMYXVuY2hlckd0ay5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvZ3RrL1Byb2Nlc3NMYXVuY2hlckd0ay5jcHAKaW5k
ZXggNjBhYWIxZi4uMDAwZDU0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0xhdW5jaGVyL2d0ay9Qcm9jZXNzTGF1bmNoZXJHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9MYXVuY2hlci9ndGsvUHJvY2Vzc0xhdW5jaGVyR3RrLmNwcApAQCAtNzksNiAr
NzksMTEgQEAgdm9pZCBQcm9jZXNzTGF1bmNoZXI6OmxhdW5jaFByb2Nlc3MoKQogICAgICAgICBl
eGVjdXRhYmxlUGF0aCA9IGV4ZWN1dGFibGVQYXRoT2ZOZXR3b3JrUHJvY2VzcygpOwogICAgICAg
ICBicmVhazsKICNlbmRpZgorI2lmIEVOQUJMRShEQVRBQkFTRV9QUk9DRVNTKQorICAgIGNhc2Ug
RGF0YWJhc2VQcm9jZXNzOgorICAgICAgICBleGVjdXRhYmxlUGF0aCA9IGV4ZWN1dGFibGVQYXRo
T2ZEYXRhYmFzZVByb2Nlc3MoKTsKKyAgICAgICAgYnJlYWs7CisjZW5kaWYKICAgICBkZWZhdWx0
OgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJQcm9jZXNzUG9vbEd0ay5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYlByb2Nlc3NQb29sR3RrLmNwcAppbmRl
eCAxZjg1MmFkLi41Y2E1ZWU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
Z3RrL1dlYlByb2Nlc3NQb29sR3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
Z3RrL1dlYlByb2Nlc3NQb29sR3RrLmNwcApAQCAtMTIwLDggKzEyMCw4IEBAIFN0cmluZyBXZWJQ
cm9jZXNzUG9vbDo6bGVnYWN5UGxhdGZvcm1EZWZhdWx0V2ViU1FMRGF0YWJhc2VEaXJlY3Rvcnko
KQogCiBTdHJpbmcgV2ViUHJvY2Vzc1Bvb2w6OmxlZ2FjeVBsYXRmb3JtRGVmYXVsdEluZGV4ZWRE
QkRhdGFiYXNlRGlyZWN0b3J5KCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVy
biBTdHJpbmcoKTsKKyAgICBHVW5pcXVlUHRyPGdjaGFyPiBpbmRleGVkREJEYXRhYmFzZURpcmVj
dG9yeShnX2J1aWxkX2ZpbGVuYW1lKGdfZ2V0X3VzZXJfZGF0YV9kaXIoKSwgIndlYmtpdGd0ayIs
ICJkYXRhYmFzZXMiLCAiaW5kZXhlZGRiIiwgbnVsbHB0cikpOworICAgIHJldHVybiBXZWJDb3Jl
OjpmaWxlbmFtZVRvU3RyaW5nKGluZGV4ZWREQkRhdGFiYXNlRGlyZWN0b3J5LmdldCgpKTsKIH0K
IAogU3RyaW5nIFdlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybURlZmF1bHRJY29uRGF0YWJhc2VQYXRo
KCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vz
cy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCmluZGV4IDg5
MTNhNGIuLmM4MDJkMDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UHJvY2Vzcy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNw
cApAQCAtMTAzOCwxMSArMTAzOCwxMyBAQCB2b2lkIFdlYlByb2Nlc3M6OmVuc3VyZVdlYlRvRGF0
YWJhc2VQcm9jZXNzQ29ubmVjdGlvbigpCiAKICNpZiBPUyhEQVJXSU4pCiAgICAgSVBDOjpDb25u
ZWN0aW9uOjpJZGVudGlmaWVyIGNvbm5lY3Rpb25JZGVudGlmaWVyKGVuY29kZWRDb25uZWN0aW9u
SWRlbnRpZmllci5wb3J0KCkpOwotICAgIGlmIChJUEM6OkNvbm5lY3Rpb246OmlkZW50aWZpZXJJ
c051bGwoY29ubmVjdGlvbklkZW50aWZpZXIpKQotICAgICAgICByZXR1cm47CisjZWxpZiBVU0Uo
VU5JWF9ET01BSU5fU09DS0VUUykKKyAgICBJUEM6OkNvbm5lY3Rpb246OklkZW50aWZpZXIgY29u
bmVjdGlvbklkZW50aWZpZXIgPSBlbmNvZGVkQ29ubmVjdGlvbklkZW50aWZpZXIucmVsZWFzZUZp
bGVEZXNjcmlwdG9yKCk7CiAjZWxzZQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogI2VuZGlm
CisgICAgaWYgKElQQzo6Q29ubmVjdGlvbjo6aWRlbnRpZmllcklzTnVsbChjb25uZWN0aW9uSWRl
bnRpZmllcikpCisgICAgICAgIHJldHVybjsKICAgICBtX3dlYlRvRGF0YWJhc2VQcm9jZXNzQ29u
bmVjdGlvbiA9IFdlYlRvRGF0YWJhc2VQcm9jZXNzQ29ubmVjdGlvbjo6Y3JlYXRlKGNvbm5lY3Rp
b25JZGVudGlmaWVyKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL2NtYWtlL09wdGlvbnNHVEsu
Y21ha2UgYi9Tb3VyY2UvY21ha2UvT3B0aW9uc0dUSy5jbWFrZQppbmRleCA0Y2VlNGRiLi45Zjg1
Yzg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21ha2UvT3B0aW9uc0dUSy5jbWFrZQorKysgYi9Tb3Vy
Y2UvY21ha2UvT3B0aW9uc0dUSy5jbWFrZQpAQCAtMjE5LDYgKzIxOSw3IEBAIHNldChXZWJLaXQy
X09VVFBVVF9OQU1FIHdlYmtpdDJndGstJHtXRUJLSVRHVEtfQVBJX1ZFUlNJT059KQogc2V0KFdl
YktpdDJfV2ViUHJvY2Vzc19PVVRQVVRfTkFNRSBXZWJLaXRXZWJQcm9jZXNzKQogc2V0KFdlYktp
dDJfTmV0d29ya1Byb2Nlc3NfT1VUUFVUX05BTUUgV2ViS2l0TmV0d29ya1Byb2Nlc3MpCiBzZXQo
V2ViS2l0Ml9QbHVnaW5Qcm9jZXNzX09VVFBVVF9OQU1FIFdlYktpdFBsdWdpblByb2Nlc3MpCitz
ZXQoV2ViS2l0Ml9EYXRhYmFzZVByb2Nlc3NfT1VUUFVUX05BTUUgV2ViS2l0RGF0YWJhc2VQcm9j
ZXNzKQogCiBhZGRfZGVmaW5pdGlvbnMoLURCVUlMRElOR19HVEtfXz0xKQogYWRkX2RlZmluaXRp
b25zKC1ER0VUVEVYVF9QQUNLQUdFPSJXZWJLaXQyR1RLLSR7V0VCS0lUR1RLX0FQSV9WRVJTSU9O
fSIpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>245219</attachid>
            <date>2015-01-23 02:53:20 -0800</date>
            <delta_ts>2015-01-23 06:13:39 -0800</delta_ts>
            <desc>Updated patch</desc>
            <filename>wk2-database-process.diff</filename>
            <type>text/plain</type>
            <size>47862</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCA5ZjZhZjUzLi5hYjgxMjUx
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAK
KzIwMTQtMTItMTAgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgor
CisgICAgICAgIFtHVEtdIEFkZCBpbml0aWFsIGRhdGFiYXNlIHByb2Nlc3Mgc3VwcG9ydAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM5NDkxCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTb3VyY2UvY21h
a2UvT3B0aW9uc0dUSy5jbWFrZTogU2V0IFdlYktpdDJfRGF0YWJhc2VQcm9jZXNzX09VVFBVVF9O
QU1FLgorCiAyMDE1LTAxLTIxICBDc2FiYSBPc3p0cm9nb27DoWMgIDxvc3N5QHdlYmtpdC5vcmc+
CiAKICAgICAgICAgW0VGTF1bV0syXSBFRkwgTWluaUJyb3dzZXIgZG9lc24ndCBydW4gYmVjYXVz
ZSBzaGFyZWQgbGlicmFyeSBpcyBub3QgZm91bmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKaW5kZXggNDY1N2MwNi4uMjkwOWU0YSAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxOCBAQAorMjAxNC0xMi0xMCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2Fy
Y2lhQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS10gQWRkIGluaXRpYWwgZGF0YWJhc2UgcHJv
Y2VzcyBzdXBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMzk0OTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBBZGQgc3VwcG9ydCBmb3IgdXNpbmcgR1JlZlB0ciB3aXRoIEdWYXJpYW50QnVpbGRlci4K
KworICAgICAgICAqIHd0Zi9nb2JqZWN0L0dSZWZQdHIuY3BwOgorICAgICAgICAoV1RGOjpyZWZH
UHRyKToKKyAgICAgICAgKFdURjo6ZGVyZWZHUHRyKToKKyAgICAgICAgKiB3dGYvZ29iamVjdC9H
UmVmUHRyLmg6CisgICAgICAgICogd3RmL2dvYmplY3QvR1R5cGVkZWZzLmg6CisKIDIwMTUtMDEt
MjEgIENzYWJhIE9zenRyb2dvbsOhYyAgPG9zc3lAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZW1v
dmUgRU5BQkxFKElOU1BFQ1RPUikgaWZkZWYgZ3VhcmRzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L3d0Zi9nb2JqZWN0L0dSZWZQdHIuY3BwIGIvU291cmNlL1dURi93dGYvZ29iamVjdC9HUmVmUHRy
LmNwcAppbmRleCAxM2RlMTY2Li5lZWFkZTczIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9n
b2JqZWN0L0dSZWZQdHIuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL2dvYmplY3QvR1JlZlB0ci5j
cHAKQEAgLTg5LDYgKzg5LDE5IEBAIHRlbXBsYXRlIDw+IHZvaWQgZGVyZWZHUHRyKEdWYXJpYW50
KiBwdHIpCiAgICAgZ192YXJpYW50X3VucmVmKHB0cik7CiB9CiAKK3RlbXBsYXRlIDw+IEdWYXJp
YW50QnVpbGRlciogcmVmR1B0cihHVmFyaWFudEJ1aWxkZXIqIHB0cikKK3sKKyAgICBpZiAocHRy
KQorICAgICAgICBnX3ZhcmlhbnRfYnVpbGRlcl9yZWYocHRyKTsKKyAgICByZXR1cm4gcHRyOwor
fQorCit0ZW1wbGF0ZSA8PiB2b2lkIGRlcmVmR1B0cihHVmFyaWFudEJ1aWxkZXIqIHB0cikKK3sK
KyAgICBpZiAocHRyKQorICAgICAgICBnX3ZhcmlhbnRfYnVpbGRlcl91bnJlZihwdHIpOworfQor
CiB0ZW1wbGF0ZSA8PiBHU291cmNlKiByZWZHUHRyKEdTb3VyY2UqIHB0cikKIHsKICAgICBpZiAo
cHRyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvZ29iamVjdC9HUmVmUHRyLmggYi9Tb3Vy
Y2UvV1RGL3d0Zi9nb2JqZWN0L0dSZWZQdHIuaAppbmRleCAyMTZjMTQ1Li5iZWU2OTc1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dSZWZQdHIuaAorKysgYi9Tb3VyY2UvV1RG
L3d0Zi9nb2JqZWN0L0dSZWZQdHIuaApAQCAtMjI1LDYgKzIyNSw4IEBAIHRlbXBsYXRlIDw+IFdU
Rl9FWFBPUlRfUFJJVkFURSBHTWFpbkxvb3AqIHJlZkdQdHIoR01haW5Mb29wKiBwdHIpOwogdGVt
cGxhdGUgPD4gV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZGVyZWZHUHRyKEdNYWluTG9vcCogcHRy
KTsKIHRlbXBsYXRlIDw+IFdURl9FWFBPUlRfUFJJVkFURSBHVmFyaWFudCogcmVmR1B0cihHVmFy
aWFudCogcHRyKTsKIHRlbXBsYXRlIDw+IFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGRlcmVmR1B0
cihHVmFyaWFudCogcHRyKTsKK3RlbXBsYXRlIDw+IFdURl9FWFBPUlRfUFJJVkFURSBHVmFyaWFu
dEJ1aWxkZXIqIHJlZkdQdHIoR1ZhcmlhbnRCdWlsZGVyKiBwdHIpOwordGVtcGxhdGUgPD4gV1RG
X0VYUE9SVF9QUklWQVRFIHZvaWQgZGVyZWZHUHRyKEdWYXJpYW50QnVpbGRlciogcHRyKTsKIHRl
bXBsYXRlIDw+IFdURl9FWFBPUlRfUFJJVkFURSBHU291cmNlKiByZWZHUHRyKEdTb3VyY2UqIHB0
cik7CiB0ZW1wbGF0ZSA8PiBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBkZXJlZkdQdHIoR1NvdXJj
ZSogcHRyKTsKIHRlbXBsYXRlIDw+IFdURl9FWFBPUlRfUFJJVkFURSBHUHRyQXJyYXkqIHJlZkdQ
dHIoR1B0ckFycmF5Kik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dUeXBl
ZGVmcy5oIGIvU291cmNlL1dURi93dGYvZ29iamVjdC9HVHlwZWRlZnMuaAppbmRleCA5OTkwNzky
Li4zMjI5OGQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dUeXBlZGVmcy5o
CisrKyBiL1NvdXJjZS9XVEYvd3RmL2dvYmplY3QvR1R5cGVkZWZzLmgKQEAgLTYwLDYgKzYwLDcg
QEAgdHlwZWRlZiBzdHJ1Y3QgX0dTb2NrZXRDbGllbnQgR1NvY2tldENsaWVudDsKIHR5cGVkZWYg
c3RydWN0IF9HU29ja2V0Q29ubmVjdGlvbiBHU29ja2V0Q29ubmVjdGlvbjsKIHR5cGVkZWYgc3Ry
dWN0IF9HU291cmNlIEdTb3VyY2U7CiB0eXBlZGVmIHN0cnVjdCBfR1ZhcmlhbnQgR1ZhcmlhbnQ7
Cit0eXBlZGVmIHN0cnVjdCBfR1ZhcmlhbnRCdWlsZGVyIEdWYXJpYW50QnVpbGRlcjsKIHR5cGVk
ZWYgdW5pb24gX0dka0V2ZW50IEdka0V2ZW50OwogdHlwZWRlZiBzdHJ1Y3QgX0dUaW1lciBHVGlt
ZXI7CiB0eXBlZGVmIHN0cnVjdCBfR0tleUZpbGUgR0tleUZpbGU7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzY2
ZTBmMS4uNDdlOWVlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDE0LTEyLTEwICBD
YXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RL
XSBBZGQgaW5pdGlhbCBkYXRhYmFzZSBwcm9jZXNzIHN1cHBvcnQKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzOTQ5MQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcGxhdGZvcm0vc3FsL1NRTGl0ZUZpbGVT
eXN0ZW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlRmlsZVN5c3RlbTo6b3BlbkRhdGFi
YXNlKTogVXNlCisgICAgICAgIFdlYkNvcmU6OmZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbigpIGZv
ciB0aGUgZGF0YWJhZSBmaWxlbmFtZSwKKyAgICAgICAgb3RoZXJ3aXNlIHNxbGl0ZTNfb3Blbigp
IGZhaWxzIHdoZW4gdGhlIGZpbGVuYW1lIGNvbnRhaW5zICIlMkUiLgorCiAyMDE1LTAxLTIxICBE
YW5pZWwgQmF0ZXMgIDxkYWJhdGVzQGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggdGhlIGlPUyBy
ZWxlYXNlIGJ1aWxkIGFmdGVyIDxodHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC8xNzg4
Njg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRmlsZVN5
c3RlbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5j
cHAKaW5kZXggZThjZmIwZS4uM2JjMDUwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vc3FsL1NRTGl0ZUZpbGVTeXN0ZW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmNwcApAQCAtNTAsNyArNTAsNyBAQCBTUUxpdGVGaWxl
U3lzdGVtOjpTUUxpdGVGaWxlU3lzdGVtKCkKIAogaW50IFNRTGl0ZUZpbGVTeXN0ZW06Om9wZW5E
YXRhYmFzZShjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBzcWxpdGUzKiogZGF0YWJhc2UsIGJvb2wp
CiB7Ci0gICAgcmV0dXJuIHNxbGl0ZTNfb3BlbihmaWxlbmFtZS51dGY4KCkuZGF0YSgpLCBkYXRh
YmFzZSk7CisgICAgcmV0dXJuIHNxbGl0ZTNfb3BlbihmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24o
ZmlsZW5hbWUpLmRhdGEoKSwgZGF0YWJhc2UpOwogfQogCiBTdHJpbmcgU1FMaXRlRmlsZVN5c3Rl
bTo6Z2V0RmlsZU5hbWVGb3JOZXdEYXRhYmFzZShjb25zdCBTdHJpbmcmIGRiRGlyLCBjb25zdCBT
dHJpbmcmLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ01ha2VMaXN0cy50eHQgYi9Tb3Vy
Y2UvV2ViS2l0Mi9DTWFrZUxpc3RzLnR4dAppbmRleCA0MzU2ZDMyLi5jMGM2NWVkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9D
TWFrZUxpc3RzLnR4dApAQCAtMSw2ICsxLDkgQEAKIHNldChXZWJLaXQyX0lOQ0xVREVfRElSRUNU
T1JJRVMKICAgICAiJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L2xsaW50IgogICAgICIke1dFQktJVDJf
RElSfSIKKyAgICAiJHtXRUJLSVQyX0RJUn0vRGF0YWJhc2VQcm9jZXNzIgorICAgICIke1dFQktJ
VDJfRElSfS9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCIgorICAgICIke1dFQktJVDJfRElSfS9E
YXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL3NxbGl0ZSIKICAgICAiJHtXRUJLSVQyX0RJUn0vTmV0
d29ya1Byb2Nlc3MiCiAgICAgIiR7V0VCS0lUMl9ESVJ9L05ldHdvcmtQcm9jZXNzL0ZpbGVBUEki
CiAgICAgIiR7V0VCS0lUMl9ESVJ9L05ldHdvcmtQcm9jZXNzL2NhY2hlIgpAQCAtMTIsNiArMTUs
NyBAQCBzZXQoV2ViS2l0Ml9JTkNMVURFX0RJUkVDVE9SSUVTCiAgICAgIiR7V0VCS0lUMl9ESVJ9
L1NoYXJlZC9BUEkvYyIKICAgICAiJHtXRUJLSVQyX0RJUn0vU2hhcmVkL0F1dGhlbnRpY2F0aW9u
IgogICAgICIke1dFQktJVDJfRElSfS9TaGFyZWQvQ29yZUlQQ1N1cHBvcnQiCisgICAgIiR7V0VC
S0lUMl9ESVJ9L1NoYXJlZC9EYXRhYmFzZXMiCiAgICAgIiR7V0VCS0lUMl9ESVJ9L1NoYXJlZC9E
YXRhYmFzZXMvSW5kZXhlZERCIgogICAgICIke1dFQktJVDJfRElSfS9TaGFyZWQvRG93bmxvYWRz
IgogICAgICIke1dFQktJVDJfRElSfS9TaGFyZWQvRmlsZUFQSSIKQEAgLTI2LDYgKzMwLDcgQEAg
c2V0KFdlYktpdDJfSU5DTFVERV9ESVJFQ1RPUklFUwogICAgICIke1dFQktJVDJfRElSfS9VSVBy
b2Nlc3MvQVBJL0MiCiAgICAgIiR7V0VCS0lUMl9ESVJ9L1VJUHJvY2Vzcy9BUEkvY3BwIgogICAg
ICIke1dFQktJVDJfRElSfS9VSVByb2Nlc3MvQXV0aGVudGljYXRpb24iCisgICAgIiR7V0VCS0lU
Ml9ESVJ9L1VJUHJvY2Vzcy9EYXRhYmFzZXMiCiAgICAgIiR7V0VCS0lUMl9ESVJ9L1VJUHJvY2Vz
cy9Eb3dubG9hZHMiCiAgICAgIiR7V0VCS0lUMl9ESVJ9L1VJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2
ZXIiCiAgICAgIiR7V0VCS0lUMl9ESVJ9L1VJUHJvY2Vzcy9MYXVuY2hlciIKQEAgLTE0OSw2ICsx
NTQsMTYgQEAgaWYgKFdURl9VU0VfM0RfR1JBUEhJQ1MpCiBlbmRpZiAoKQogCiBzZXQoV2ViS2l0
Ml9TT1VSQ0VTCisgICAgRGF0YWJhc2VQcm9jZXNzL0RhdGFiYXNlVG9XZWJQcm9jZXNzQ29ubmVj
dGlvbi5jcHAKKyAgICBEYXRhYmFzZVByb2Nlc3MvRGF0YWJhc2VQcm9jZXNzLmNwcAorICAgIERh
dGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvRGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbi5jcHAK
KyAgICBEYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL0lEQlNlcmlhbGl6YXRpb24uY3BwCisgICAg
RGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9VbmlxdWVJREJEYXRhYmFzZS5jcHAKKyAgICBEYXRh
YmFzZVByb2Nlc3MvSW5kZXhlZERCL1VuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmllci5jcHAKKyAg
ICBEYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL3NxbGl0ZS9TUUxpdGVJREJDdXJzb3IuY3BwCisg
ICAgRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9zcWxpdGUvU1FMaXRlSURCVHJhbnNhY3Rpb24u
Y3BwCisgICAgRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9zcWxpdGUvVW5pcXVlSURCRGF0YWJh
c2VCYWNraW5nU3RvcmVTUUxpdGUuY3BwCisKICAgICBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29u
bmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAKICAgICBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vz
cy5jcHAKICAgICBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc1BsYXRmb3JtU3RyYXRlZ2ll
cy5jcHAKQEAgLTE5Nyw2ICsyMTIsNyBAQCBzZXQoV2ViS2l0Ml9TT1VSQ0VTCiAgICAgU2hhcmVk
L0FQSS9BUElVUkxSZXNwb25zZS5jcHAKIAogICAgIFNoYXJlZC9BY3Rpdml0eUFzc2VydGlvbi5j
cHAKKyAgICBTaGFyZWQvQXN5bmNSZXF1ZXN0LmNwcAogICAgIFNoYXJlZC9CbG9iRGF0YUZpbGVS
ZWZlcmVuY2VXaXRoU2FuZGJveEV4dGVuc2lvbi5jcHAKICAgICBTaGFyZWQvQ2FjaGVNb2RlbC5j
cHAKICAgICBTaGFyZWQvQ2hpbGRQcm9jZXNzLmNwcApAQCAtMjI3LDYgKzI0Myw3IEBAIHNldChX
ZWJLaXQyX1NPVVJDRVMKICAgICBTaGFyZWQvV2ViQ29udGV4dE1lbnVJdGVtLmNwcAogICAgIFNo
YXJlZC9XZWJDb250ZXh0TWVudUl0ZW1EYXRhLmNwcAogICAgIFNoYXJlZC9XZWJDb3JlQXJndW1l
bnRDb2RlcnMuY3BwCisgICAgU2hhcmVkL1dlYkNyb3NzVGhyZWFkQ29waWVyLmNwcAogICAgIFNo
YXJlZC9XZWJFdmVudC5jcHAKICAgICBTaGFyZWQvV2ViRXZlbnRDb252ZXJzaW9uLmNwcAogICAg
IFNoYXJlZC9XZWJHZW9sb2NhdGlvblBvc2l0aW9uLmNwcApAQCAtMjc2LDYgKzI5Myw5IEBAIHNl
dChXZWJLaXQyX1NPVVJDRVMKIAogICAgIFNoYXJlZC9BdXRoZW50aWNhdGlvbi9BdXRoZW50aWNh
dGlvbk1hbmFnZXIuY3BwCiAKKyAgICBTaGFyZWQvRGF0YWJhc2VzL0RhdGFiYXNlUHJvY2Vzc0Ny
ZWF0aW9uUGFyYW1ldGVycy5jcHAKKyAgICBTaGFyZWQvRGF0YWJhc2VzL0luZGV4ZWREQi9JREJV
dGlsaXRpZXMuY3BwCisKICAgICBTaGFyZWQvRG93bmxvYWRzL0Rvd25sb2FkLmNwcAogICAgIFNo
YXJlZC9Eb3dubG9hZHMvRG93bmxvYWRBdXRoZW50aWNhdGlvbkNsaWVudC5jcHAKICAgICBTaGFy
ZWQvRG93bmxvYWRzL0Rvd25sb2FkTWFuYWdlci5jcHAKQEAgLTQxNiw2ICs0MzYsOCBAQCBzZXQo
V2ViS2l0Ml9TT1VSQ0VTCiAgICAgVUlQcm9jZXNzL0F1dGhlbnRpY2F0aW9uL1dlYkNyZWRlbnRp
YWwuY3BwCiAgICAgVUlQcm9jZXNzL0F1dGhlbnRpY2F0aW9uL1dlYlByb3RlY3Rpb25TcGFjZS5j
cHAKIAorICAgIFVJUHJvY2Vzcy9EYXRhYmFzZXMvRGF0YWJhc2VQcm9jZXNzUHJveHkuY3BwCisK
ICAgICBVSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHkuY3BwCiAgICAgVUlQcm9jZXNz
L0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmNwcAogCkBAIC00NTksNiArNDgxLDggQEAgc2V0
KFdlYktpdDJfU09VUkNFUwogCiAgICAgV2ViUHJvY2Vzcy9EYXRhYmFzZXMvV2ViRGF0YWJhc2VQ
cm92aWRlci5jcHAKICAgICBXZWJQcm9jZXNzL0RhdGFiYXNlcy9JbmRleGVkREIvV2ViSURCRmFj
dG9yeUJhY2tlbmQuY3BwCisgICAgV2ViUHJvY2Vzcy9EYXRhYmFzZXMvSW5kZXhlZERCL1dlYklE
QlNlcnZlckNvbm5lY3Rpb24uY3BwCisgICAgV2ViUHJvY2Vzcy9EYXRhYmFzZXMvV2ViVG9EYXRh
YmFzZVByb2Nlc3NDb25uZWN0aW9uLmNwcAogCiAgICAgV2ViUHJvY2Vzcy9GaWxlQVBJL0Jsb2JS
ZWdpc3RyeVByb3h5LmNwcAogCkBAIC01ODYsNiArNjEwLDEwIEBAIHNldChXZWJLaXQyX1NPVVJD
RVMKICkKIAogc2V0KFdlYktpdDJfTUVTU0FHRVNfSU5fRklMRVMKKyAgICBEYXRhYmFzZVByb2Nl
c3MvRGF0YWJhc2VUb1dlYlByb2Nlc3NDb25uZWN0aW9uLm1lc3NhZ2VzLmluCisgICAgRGF0YWJh
c2VQcm9jZXNzL0RhdGFiYXNlUHJvY2Vzcy5tZXNzYWdlcy5pbgorICAgIERhdGFiYXNlUHJvY2Vz
cy9JbmRleGVkREIvRGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbi5tZXNzYWdlcy5pbgorCiAg
ICAgTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMu
aW4KICAgICBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5tZXNzYWdlcy5pbgogICAgIE5l
dHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5tZXNzYWdlcy5pbgpAQCAtNjIxLDYg
KzY0OSw4IEBAIHNldChXZWJLaXQyX01FU1NBR0VTX0lOX0ZJTEVTCiAgICAgVUlQcm9jZXNzL1dl
YlJlc291cmNlQ2FjaGVNYW5hZ2VyUHJveHkubWVzc2FnZXMuaW4KICAgICBVSVByb2Nlc3MvV2Vi
VmlicmF0aW9uUHJveHkubWVzc2FnZXMuaW4KIAorICAgIFVJUHJvY2Vzcy9EYXRhYmFzZXMvRGF0
YWJhc2VQcm9jZXNzUHJveHkubWVzc2FnZXMuaW4KKwogICAgIFVJUHJvY2Vzcy9Eb3dubG9hZHMv
RG93bmxvYWRQcm94eS5tZXNzYWdlcy5pbgogCiAgICAgVUlQcm9jZXNzL05ldHdvcmsvTmV0d29y
a1Byb2Nlc3NQcm94eS5tZXNzYWdlcy5pbgpAQCAtNjQxLDYgKzY3MSw4IEBAIHNldChXZWJLaXQy
X01FU1NBR0VTX0lOX0ZJTEVTCiAKICAgICBXZWJQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFu
YWdlci5tZXNzYWdlcy5pbgogCisgICAgV2ViUHJvY2Vzcy9EYXRhYmFzZXMvSW5kZXhlZERCL1dl
YklEQlNlcnZlckNvbm5lY3Rpb24ubWVzc2FnZXMuaW4KKwogICAgIFdlYlByb2Nlc3MvRnVsbFNj
cmVlbi9XZWJGdWxsU2NyZWVuTWFuYWdlci5tZXNzYWdlcy5pbgogCiAgICAgV2ViUHJvY2Vzcy9H
ZW9sb2NhdGlvbi9XZWJHZW9sb2NhdGlvbk1hbmFnZXIubWVzc2FnZXMuaW4KQEAgLTY4NSw2ICs3
MTcsMTAgQEAgc2V0KE5ldHdvcmtQcm9jZXNzX0xJQlJBUklFUwogICAgIFdlYktpdDIKICkKIAor
c2V0KERhdGFiYXNlUHJvY2Vzc19MSUJSQVJJRVMKKyAgV2ViS2l0MgorKQorCiBzZXQoV2ViS2l0
Ml9MSUJSQVJJRVMKICAgICBKYXZhU2NyaXB0Q29yZQogICAgIFdlYkNvcmUKQEAgLTc2Nyw2ICs4
MDMsMTkgQEAgaWYgKEVOQUJMRV9QTFVHSU5fUFJPQ0VTUykKICAgICBlbmRpZiAoKQogZW5kaWYg
KCkKIAoraWYgKEVOQUJMRV9EQVRBQkFTRV9QUk9DRVNTKQorICAgIGFkZF9kZWZpbml0aW9ucygt
REVOQUJMRV9EQVRBQkFTRV9QUk9DRVNTPTEpCisgICAgYWRkX2V4ZWN1dGFibGUoRGF0YWJhc2VQ
cm9jZXNzICR7RGF0YWJhc2VQcm9jZXNzX1NPVVJDRVN9KQorICAgIGFkZF93ZWJraXQyX3ByZWZp
eF9oZWFkZXIoRGF0YWJhc2VQcm9jZXNzKQorICAgIHRhcmdldF9saW5rX2xpYnJhcmllcyhEYXRh
YmFzZVByb2Nlc3MgJHtEYXRhYmFzZVByb2Nlc3NfTElCUkFSSUVTfSkKKyAgICBzZXRfdGFyZ2V0
X3Byb3BlcnRpZXMoRGF0YWJhc2VQcm9jZXNzIFBST1BFUlRJRVMgRk9MREVSICJXZWJLaXQiKQor
ICAgIGluc3RhbGwoVEFSR0VUUyBEYXRhYmFzZVByb2Nlc3MgREVTVElOQVRJT04gIiR7TElCRVhF
Q19JTlNUQUxMX0RJUn0iKQorCisgICAgaWYgKFdlYktpdDJfRGF0YWJhc2VQcm9jZXNzX09VVFBV
VF9OQU1FKQorICAgICAgICBzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoRGF0YWJhc2VQcm9jZXNzIFBS
T1BFUlRJRVMgT1VUUFVUX05BTUUgJHtXZWJLaXQyX0RhdGFiYXNlUHJvY2Vzc19PVVRQVVRfTkFN
RX0pCisgICAgZW5kaWYgKCkKK2VuZGlmICgpCisKIFBPUFVMQVRFX0xJQlJBUllfVkVSU0lPTihX
RUJLSVQyKQogc2V0X3RhcmdldF9wcm9wZXJ0aWVzKFdlYktpdDIgUFJPUEVSVElFUyBWRVJTSU9O
ICR7V0VCS0lUMl9WRVJTSU9OfSBTT1ZFUlNJT04gJHtXRUJLSVQyX1ZFUlNJT05fTUFKT1J9KQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cKaW5kZXggOTUwYTY4Ny4uMGVmNDhiYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc2
IEBACisyMDE0LTEyLTEwICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNv
bT4KKworICAgICAgICBbR1RLXSBBZGQgaW5pdGlhbCBkYXRhYmFzZSBwcm9jZXNzIHN1cHBvcnQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzOTQ5MQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBpbml0
aWFsIHN1cHBvcnQgZm9yIERhdGFiYXNlUHJvY2VzcywgZGlzYWJsZWQgYnkgZGVmYXVsdCBmb3IK
KyAgICAgICAgbm93LgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6IEFkZCByZXF1aXJlZCBm
aWxlcyB0byBjb21waWxhdGlvbi4KKyAgICAgICAgKiBEYXRhYmFzZVByb2Nlc3MvRGF0YWJhc2VQ
cm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RGF0YWJhc2VQcm9jZXNzOjpjcmVhdGVEYXRh
YmFzZVRvV2ViUHJvY2Vzc0Nvbm5lY3Rpb24pOgorICAgICAgICBBZGQgdGhlIHVuaXggZG9tYWlu
IHNvY2tldHMgaW1wbGVtZW50YXRpb24uCisgICAgICAgICogRGF0YWJhc2VQcm9jZXNzL0VudHJ5
UG9pbnQvdW5peC9EYXRhYmFzZVByb2Nlc3NNYWluLmNwcDogQWRkZWQuCisgICAgICAgIChtYWlu
KToKKyAgICAgICAgKiBEYXRhYmFzZVByb2Nlc3MvZ3RrL0RhdGFiYXNlUHJvY2Vzc01haW5HdGsu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6RGF0YWJhc2VQcm9jZXNzTWFpblVuaXgpOgor
ICAgICAgICAqIERhdGFiYXNlUHJvY2Vzcy91bml4L0RhdGFiYXNlUHJvY2Vzc01haW5Vbml4Lmg6
IEFkZGVkLgorICAgICAgICAqIFBsYXRmb3JtR1RLLmNtYWtlOiBBZGQgcmVxdWlyZWQgZmlsZXMg
dG8gY29tcGlsYXRpb24uCisgICAgICAgICogU2hhcmVkL1Byb2Nlc3NFeGVjdXRhYmxlUGF0aC5o
OgorICAgICAgICAqIFNoYXJlZC9ndGsvS2V5ZWREZWNvZGVyLmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJLaXQ6OktleWVkRGVjb2Rlcjo6S2V5ZWREZWNvZGVyKToKKyAgICAgICAgKFdlYktpdDo6
S2V5ZWREZWNvZGVyOjp+S2V5ZWREZWNvZGVyKToKKyAgICAgICAgKFdlYktpdDo6S2V5ZWREZWNv
ZGVyOjpidWlsZERpY3Rpb25hcnlGcm9tR1ZhcmlhbnQpOgorICAgICAgICAoV2ViS2l0OjpLZXll
ZERlY29kZXI6OmRlY29kZUJ5dGVzKToKKyAgICAgICAgKFdlYktpdDo6S2V5ZWREZWNvZGVyOjpk
ZWNvZGVCb29sKToKKyAgICAgICAgKFdlYktpdDo6S2V5ZWREZWNvZGVyOjpkZWNvZGVVSW50MzIp
OgorICAgICAgICAoV2ViS2l0OjpLZXllZERlY29kZXI6OmRlY29kZUludDMyKToKKyAgICAgICAg
KFdlYktpdDo6S2V5ZWREZWNvZGVyOjpkZWNvZGVJbnQ2NCk6CisgICAgICAgIChXZWJLaXQ6Oktl
eWVkRGVjb2Rlcjo6ZGVjb2RlRmxvYXQpOgorICAgICAgICAoV2ViS2l0OjpLZXllZERlY29kZXI6
OmRlY29kZURvdWJsZSk6CisgICAgICAgIChXZWJLaXQ6OktleWVkRGVjb2Rlcjo6ZGVjb2RlU3Ry
aW5nKToKKyAgICAgICAgKFdlYktpdDo6S2V5ZWREZWNvZGVyOjpiZWdpbk9iamVjdCk6CisgICAg
ICAgIChXZWJLaXQ6OktleWVkRGVjb2Rlcjo6ZW5kT2JqZWN0KToKKyAgICAgICAgKFdlYktpdDo6
S2V5ZWREZWNvZGVyOjpiZWdpbkFycmF5KToKKyAgICAgICAgKFdlYktpdDo6S2V5ZWREZWNvZGVy
OjpiZWdpbkFycmF5RWxlbWVudCk6CisgICAgICAgIChXZWJLaXQ6OktleWVkRGVjb2Rlcjo6ZW5k
QXJyYXlFbGVtZW50KToKKyAgICAgICAgKFdlYktpdDo6S2V5ZWREZWNvZGVyOjplbmRBcnJheSk6
CisgICAgICAgICogU2hhcmVkL2d0ay9LZXllZERlY29kZXIuaDogQWRkZWQuCisgICAgICAgICog
U2hhcmVkL2d0ay9LZXllZEVuY29kZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6S2V5
ZWRFbmNvZGVyOjpLZXllZEVuY29kZXIpOgorICAgICAgICAoV2ViS2l0OjpLZXllZEVuY29kZXI6
On5LZXllZEVuY29kZXIpOgorICAgICAgICAoV2ViS2l0OjpLZXllZEVuY29kZXI6OmVuY29kZUJ5
dGVzKToKKyAgICAgICAgKFdlYktpdDo6S2V5ZWRFbmNvZGVyOjplbmNvZGVCb29sKToKKyAgICAg
ICAgKFdlYktpdDo6S2V5ZWRFbmNvZGVyOjplbmNvZGVVSW50MzIpOgorICAgICAgICAoV2ViS2l0
OjpLZXllZEVuY29kZXI6OmVuY29kZUludDMyKToKKyAgICAgICAgKFdlYktpdDo6S2V5ZWRFbmNv
ZGVyOjplbmNvZGVJbnQ2NCk6CisgICAgICAgIChXZWJLaXQ6OktleWVkRW5jb2Rlcjo6ZW5jb2Rl
RmxvYXQpOgorICAgICAgICAoV2ViS2l0OjpLZXllZEVuY29kZXI6OmVuY29kZURvdWJsZSk6Cisg
ICAgICAgIChXZWJLaXQ6OktleWVkRW5jb2Rlcjo6ZW5jb2RlU3RyaW5nKToKKyAgICAgICAgKFdl
YktpdDo6S2V5ZWRFbmNvZGVyOjpiZWdpbk9iamVjdCk6CisgICAgICAgIChXZWJLaXQ6OktleWVk
RW5jb2Rlcjo6ZW5kT2JqZWN0KToKKyAgICAgICAgKFdlYktpdDo6S2V5ZWRFbmNvZGVyOjpiZWdp
bkFycmF5KToKKyAgICAgICAgKFdlYktpdDo6S2V5ZWRFbmNvZGVyOjpiZWdpbkFycmF5RWxlbWVu
dCk6CisgICAgICAgIChXZWJLaXQ6OktleWVkRW5jb2Rlcjo6ZW5kQXJyYXlFbGVtZW50KToKKyAg
ICAgICAgKFdlYktpdDo6S2V5ZWRFbmNvZGVyOjplbmRBcnJheSk6CisgICAgICAgIChXZWJLaXQ6
OktleWVkRW5jb2Rlcjo6ZmluaXNoRW5jb2RpbmcpOgorICAgICAgICAqIFNoYXJlZC9ndGsvS2V5
ZWRFbmNvZGVyLmg6IEFkZGVkLgorICAgICAgICAqIFNoYXJlZC9ndGsvUHJvY2Vzc0V4ZWN1dGFi
bGVQYXRoR3RrLmNwcDoKKyAgICAgICAgKFdlYktpdDo6ZXhlY3V0YWJsZVBhdGhPZkRhdGFiYXNl
UHJvY2Vzcyk6CisgICAgICAgICogVUlQcm9jZXNzL0RhdGFiYXNlcy9EYXRhYmFzZVByb2Nlc3NQ
cm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRhdGFiYXNlUHJvY2Vzc1Byb3h5OjpkaWRDcmVh
dGVEYXRhYmFzZVRvV2ViUHJvY2Vzc0Nvbm5lY3Rpb24pOgorICAgICAgICBBZGQgdGhlIHVuaXgg
ZG9tYWluIHNvY2tldHMgaW1wbGVtZW50YXRpb24uCisgICAgICAgICogVUlQcm9jZXNzL0xhdW5j
aGVyL2d0ay9Qcm9jZXNzTGF1bmNoZXJHdGsuY3BwOgorICAgICAgICAoV2ViS2l0OjpQcm9jZXNz
TGF1bmNoZXI6OmxhdW5jaFByb2Nlc3MpOiBIYW5kbGUgdGhlCisgICAgICAgIERhdGFiYXNlUHJv
Y2VzcyB0b28uCisgICAgICAgICogVUlQcm9jZXNzL2d0ay9XZWJDb250ZXh0R3RrLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViQ29udGV4dDo6cGxhdGZvcm1EZWZhdWx0SW5kZXhlZERCRGF0YWJh
c2VEaXJlY3RvcnkpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OmVuc3VyZVdlYlRvRGF0YWJhc2VQcm9jZXNzQ29ubmVj
dGlvbik6IEFkZAorICAgICAgICB0aGUgdW5peCBkb21haW4gc29ja2V0cyBpbXBsZW1lbnRhdGlv
bi4KKwogMjAxNC0xMS0wNiAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5j
b20+CiAKICAgICAgICAgW0dUS10gVXNlIEFQSTo6Q29udGV4dE1lbnVDbGllbnQgYW5kIEFQSTo6
SW5qZWN0ZWRCdW5kbGU6OlBhZ2VDb250ZXh0TWVudUNsaWVudCBjbGFzc2VzCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvRGF0YWJhc2VQcm9jZXNzLmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9EYXRhYmFzZVByb2Nlc3MuY3BwCmluZGV4IDE5
MGE1MjMuLjg1YTkwMDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vz
cy9EYXRhYmFzZVByb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vz
cy9EYXRhYmFzZVByb2Nlc3MuY3BwCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSAiV2ViT3Jp
Z2luRGF0YU1hbmFnZXJNZXNzYWdlcy5oIgogI2luY2x1ZGUgIldlYk9yaWdpbkRhdGFNYW5hZ2Vy
UHJveHlNZXNzYWdlcy5oIgogI2luY2x1ZGUgPFdlYkNvcmUvRmlsZVN5c3RlbS5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1RleHRFbmNv
ZGluZy5oPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAKQEAgLTE4OCw2ICsxODksMTAg
QEAgdm9pZCBEYXRhYmFzZVByb2Nlc3M6OmNyZWF0ZURhdGFiYXNlVG9XZWJQcm9jZXNzQ29ubmVj
dGlvbigpCiAKICAgICBJUEM6OkF0dGFjaG1lbnQgY2xpZW50UG9ydChsaXN0ZW5pbmdQb3J0LCBN
QUNIX01TR19UWVBFX01BS0VfU0VORCk7CiAgICAgcGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+
c2VuZChNZXNzYWdlczo6RGF0YWJhc2VQcm9jZXNzUHJveHk6OkRpZENyZWF0ZURhdGFiYXNlVG9X
ZWJQcm9jZXNzQ29ubmVjdGlvbihjbGllbnRQb3J0KSwgMCk7CisjZWxpZiBVU0UoVU5JWF9ET01B
SU5fU09DS0VUUykKKyAgICBJUEM6OkNvbm5lY3Rpb246OlNvY2tldFBhaXIgc29ja2V0UGFpciA9
IElQQzo6Q29ubmVjdGlvbjo6Y3JlYXRlUGxhdGZvcm1Db25uZWN0aW9uKCk7CisgICAgbV9kYXRh
YmFzZVRvV2ViUHJvY2Vzc0Nvbm5lY3Rpb25zLmFwcGVuZChEYXRhYmFzZVRvV2ViUHJvY2Vzc0Nv
bm5lY3Rpb246OmNyZWF0ZShzb2NrZXRQYWlyLnNlcnZlcikpOworICAgIHBhcmVudFByb2Nlc3ND
b25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OkRhdGFiYXNlUHJvY2Vzc1Byb3h5OjpEaWRDcmVh
dGVEYXRhYmFzZVRvV2ViUHJvY2Vzc0Nvbm5lY3Rpb24oSVBDOjpBdHRhY2htZW50KHNvY2tldFBh
aXIuY2xpZW50KSksIDApOwogI2Vsc2UKICAgICBub3RJbXBsZW1lbnRlZCgpOwogI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvRW50cnlQb2ludC91bml4
L0RhdGFiYXNlUHJvY2Vzc01haW4uY3BwIGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNz
L0VudHJ5UG9pbnQvdW5peC9EYXRhYmFzZVByb2Nlc3NNYWluLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi4xZDU1MjJiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdDIvRGF0YWJhc2VQcm9jZXNzL0VudHJ5UG9pbnQvdW5peC9EYXRhYmFzZVByb2Nlc3NNYWlu
LmNwcApAQCAtMCwwICsxLDMzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IElnYWxpYSBT
LkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJEYXRhYmFzZVByb2Nlc3NNYWluVW5peC5oIgorCit1
c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3Yp
Cit7CisgICAgcmV0dXJuIERhdGFiYXNlUHJvY2Vzc01haW5Vbml4KGFyZ2MsIGFyZ3YpOworfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9EYXRh
YmFzZVByb2Nlc3NJREJDb25uZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJv
Y2Vzcy9JbmRleGVkREIvRGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbi5jcHAKaW5kZXggN2Q3
MzM2YS4uOGJkMDZiMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNz
L0luZGV4ZWREQi9EYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0aW9uLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL0RhdGFiYXNlUHJvY2Vzc0lEQkNvbm5l
Y3Rpb24uY3BwCkBAIC0zNyw2ICszNyw4IEBACiAjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29k
ZXJzLmgiCiAjaW5jbHVkZSAiV2ViSURCU2VydmVyQ29ubmVjdGlvbk1lc3NhZ2VzLmgiCiAjaW5j
bHVkZSA8V2ViQ29yZS9JREJEYXRhYmFzZU1ldGFkYXRhLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9J
REJJbmRleE1ldGFkYXRhLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JREJPYmplY3RTdG9yZU1ldGFk
YXRhLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JREJTZXJ2ZXJDb25uZWN0aW9uLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9JbmRleGVkREIuaD4KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvRGF0
YWJhc2VQcm9jZXNzL2d0ay9EYXRhYmFzZVByb2Nlc3NNYWluR3RrLmNwcCBiL1NvdXJjZS9XZWJL
aXQyL0RhdGFiYXNlUHJvY2Vzcy9ndGsvRGF0YWJhc2VQcm9jZXNzTWFpbkd0ay5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc4YzlmMgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9ndGsvRGF0YWJhc2VQcm9jZXNzTWFpbkd0
ay5jcHAKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBJZ2FsaWEg
Uy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRGF0YWJhc2VQ
cm9jZXNzTWFpblVuaXguaCIKKworI2lmIEVOQUJMRShEQVRBQkFTRV9QUk9DRVNTKQorCisjaW5j
bHVkZSAiQ2hpbGRQcm9jZXNzTWFpbi5oIgorI2luY2x1ZGUgIkRhdGFiYXNlUHJvY2Vzcy5oIgor
I2luY2x1ZGUgPGd0ay9ndGsuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVz
cGFjZSBXZWJLaXQgeworCitjbGFzcyBEYXRhYmFzZVByb2Nlc3NNYWluIGZpbmFsOiBwdWJsaWMg
Q2hpbGRQcm9jZXNzTWFpbkJhc2UgeworcHVibGljOgorICAgIGJvb2wgcGxhdGZvcm1Jbml0aWFs
aXplKCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGd0a19pbml0KG51bGxwdHIsIG51bGxwdHIp
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9OworCitpbnQgRGF0YWJhc2VQcm9jZXNz
TWFpblVuaXgoaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQoreworICAgIHJldHVybiBDaGlsZFByb2Nl
c3NNYWluPERhdGFiYXNlUHJvY2VzcywgRGF0YWJhc2VQcm9jZXNzTWFpbj4oYXJnYywgYXJndik7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKERBVEFCQVNF
X1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvdW5p
eC9EYXRhYmFzZVByb2Nlc3NNYWluVW5peC5oIGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9j
ZXNzL3VuaXgvRGF0YWJhc2VQcm9jZXNzTWFpblVuaXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi4zNjc1ZThkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIv
RGF0YWJhc2VQcm9jZXNzL3VuaXgvRGF0YWJhc2VQcm9jZXNzTWFpblVuaXguaApAQCAtMCwwICsx
LDQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IElnYWxpYSBTLkwuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgRGF0YWJhc2VQcm9jZXNzTWFpblVuaXhfaAorI2RlZmluZSBEYXRhYmFzZVByb2Nl
c3NNYWluVW5peF9oCisKKyNpZiBFTkFCTEUoREFUQUJBU0VfUFJPQ0VTUykKKworI2luY2x1ZGUg
PFdlYktpdC9XS0Jhc2UuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2V4dGVybiAiQyIgewor
V0tfRVhQT1JUIGludCBEYXRhYmFzZVByb2Nlc3NNYWluVW5peChpbnQgYXJnYywgY2hhcioqIGFy
Z3YpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShEQVRB
QkFTRV9QUk9DRVNTKQorCisjZW5kaWYgLy8gRGF0YWJhc2VQcm9jZXNzTWFpblVuaXhfaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21ha2UgYi9Tb3VyY2UvV2ViS2l0
Mi9QbGF0Zm9ybUdUSy5jbWFrZQppbmRleCBiYWJlMjdkLi40YjQ0OGYyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0
Zm9ybUdUSy5jbWFrZQpAQCAtMTUsNiArMTUsOCBAQCBhZGRfZGVmaW5pdGlvbnMoLURMSUJESVI9
IiR7TElCX0lOU1RBTExfRElSfSIpCiBzZXQoV2ViS2l0Ml9VU0VfUFJFRklYX0hFQURFUiBPTikK
IAogbGlzdChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCisgICAgRGF0YWJhc2VQcm9jZXNzL2d0ay9E
YXRhYmFzZVByb2Nlc3NNYWluR3RrLmNwcAorCiAgICAgTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0
d29ya0NhY2hlU3RvcmFnZVNvdXAuY3BwCiAKICAgICBOZXR3b3JrUHJvY2Vzcy9ndGsvTmV0d29y
a1Byb2Nlc3NNYWluR3RrLmNwcApAQCAtNTAsNiArNTIsOCBAQCBsaXN0KEFQUEVORCBXZWJLaXQy
X1NPVVJDRVMKICAgICBTaGFyZWQvY2Fpcm8vU2hhcmVhYmxlQml0bWFwQ2Fpcm8uY3BwCiAKICAg
ICBTaGFyZWQvZ3RrL0FyZ3VtZW50Q29kZXJzR3RrLmNwcAorICAgIFNoYXJlZC9ndGsvS2V5ZWRF
bmNvZGVyLmNwcAorICAgIFNoYXJlZC9ndGsvS2V5ZWREZWNvZGVyLmNwcAogICAgIFNoYXJlZC9n
dGsvTmF0aXZlV2ViS2V5Ym9hcmRFdmVudEd0ay5jcHAKICAgICBTaGFyZWQvZ3RrL05hdGl2ZVdl
Yk1vdXNlRXZlbnRHdGsuY3BwCiAgICAgU2hhcmVkL2d0ay9OYXRpdmVXZWJUb3VjaEV2ZW50R3Rr
LmNwcApAQCAtNzIsNiArNzYsOCBAQCBsaXN0KEFQUEVORCBXZWJLaXQyX1NPVVJDRVMKIAogICAg
IFNoYXJlZC91bml4L0NoaWxkUHJvY2Vzc01haW4uY3BwCiAKKyAgICBVSVByb2Nlc3MvRGF0YWJh
c2VzL2d0ay9EYXRhYmFzZVByb2Nlc3NQcm94eUd0ay5jcHAKKwogICAgIFVJUHJvY2Vzcy9EZWZh
dWx0VW5kb0NvbnRyb2xsZXIuY3BwCiAgICAgVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJbXBs
LmNwcAogCkBAIC00MzEsNiArNDM3LDcgQEAgbGlzdChBUFBFTkQgV2ViS2l0Ml9JTkNMVURFX0RJ
UkVDVE9SSUVTCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBl
IgogICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAiCiAgICAgIiR7V0VC
Q09SRV9ESVJ9L3BsYXRmb3JtL3RleHQvZW5jaGFudCIKKyAgICAiJHtXRUJLSVQyX0RJUn0vRGF0
YWJhc2VQcm9jZXNzL3VuaXgiCiAgICAgIiR7V0VCS0lUMl9ESVJ9L05ldHdvcmtQcm9jZXNzL2d0
ayIKICAgICAiJHtXRUJLSVQyX0RJUn0vTmV0d29ya1Byb2Nlc3MvdW5peCIKICAgICAiJHtXRUJL
SVQyX0RJUn0vU2hhcmVkL0FQSS9jL2d0ayIKQEAgLTQ4OCw2ICs0OTUsMTAgQEAgbGlzdChBUFBF
TkQgTmV0d29ya1Byb2Nlc3NfU09VUkNFUwogICAgIE5ldHdvcmtQcm9jZXNzL0VudHJ5UG9pbnQv
dW5peC9OZXR3b3JrUHJvY2Vzc01haW4uY3BwCiApCiAKK2xpc3QoQVBQRU5EIERhdGFiYXNlUHJv
Y2Vzc19TT1VSQ0VTCisgICAgRGF0YWJhc2VQcm9jZXNzL0VudHJ5UG9pbnQvdW5peC9EYXRhYmFz
ZVByb2Nlc3NNYWluLmNwcAorKQorCiBmaWxlKFdSSVRFICR7Q01BS0VfQklOQVJZX0RJUn0vdGVz
dF9hdG9taWMuY3BwCiAgICAgICIjaW5jbHVkZSA8YXRvbWljPlxuIgogICAgICAiaW50IG1haW4o
KSB7IHN0ZDo6YXRvbWljPGludDY0X3Q+IGkoMCk7IGkrKzsgcmV0dXJuIDA7IH1cbiIpCkBAIC05
NTAsNiArOTYxLDcgQEAgYWRkX2N1c3RvbV9jb21tYW5kKAogICAgICAgICAgICAgJHtXZWJLaXQy
X1NPVVJDRVN9CiAgICAgICAgICAgICAke1dlYlByb2Nlc3NfU09VUkNFU30KICAgICAgICAgICAg
ICR7TmV0d29ya1Byb2Nlc3NfU09VUkNFU30KKyAgICAgICAgICAgICR7RGF0YWJhc2VQcm9jZXNz
X1NPVVJDRVN9CiAgICAgICAgICAgICAke1BsdWdpblByb2Nlc3NHVEsyX1NPVVJDRVN9CiAgICAg
ICAgICAgICAke1BsdWdpblByb2Nlc3NfU09VUkNFU30KICAgICAgICAgICAgICR7V2ViS2l0Ml9I
RUFERVJTfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1Byb2Nlc3NFeGVjdXRh
YmxlUGF0aC5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1Byb2Nlc3NFeGVjdXRhYmxlUGF0aC5o
CmluZGV4IGQ3OGViY2QuLjRmZmQxMWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9Qcm9jZXNzRXhlY3V0YWJsZVBhdGguaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvUHJv
Y2Vzc0V4ZWN1dGFibGVQYXRoLmgKQEAgLTM1LDcgKzM1LDkgQEAgU3RyaW5nIGV4ZWN1dGFibGVQ
YXRoT2ZQbHVnaW5Qcm9jZXNzKCk7CiAjaWYgRU5BQkxFKE5FVFdPUktfUFJPQ0VTUykKIFN0cmlu
ZyBleGVjdXRhYmxlUGF0aE9mTmV0d29ya1Byb2Nlc3MoKTsKICNlbmRpZgotCisjaWYgRU5BQkxF
KERBVEFCQVNFX1BST0NFU1MpCitTdHJpbmcgZXhlY3V0YWJsZVBhdGhPZkRhdGFiYXNlUHJvY2Vz
cygpOworI2VuZGlmCiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hh
cmVkL2d0ay9LZXllZERlY29kZXIuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9LZXll
ZERlY29kZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkMjBkOTAK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL0tleWVkRGVjb2Rl
ci5jcHAKQEAgLTAsMCArMSwxNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgSWdhbGlh
IFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIktleWVkRGVj
b2Rlci5oIgorCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgV2Vi
S2l0IHsKKworS2V5ZWREZWNvZGVyOjpLZXllZERlY29kZXIoY29uc3QgdWludDhfdCogZGF0YSwg
c2l6ZV90IHNpemUpCit7CisgICAgR1JlZlB0cjxHQnl0ZXM+IGJ5dGVzID0gYWRvcHRHUmVmKGdf
Ynl0ZXNfbmV3KGRhdGEsIHNpemUpKTsKKyAgICBHUmVmUHRyPEdWYXJpYW50PiB2YXJpYW50ID0g
Z192YXJpYW50X25ld19mcm9tX2J5dGVzKEdfVkFSSUFOVF9UWVBFKCJhe3N2fSIpLCBieXRlcy5n
ZXQoKSwgVFJVRSk7CisgICAgbV9kaWN0aW9uYXJ5U3RhY2suYXBwZW5kKGRpY3Rpb25hcnlGcm9t
R1ZhcmlhbnQodmFyaWFudC5nZXQoKSkpOworfQorCitLZXllZERlY29kZXI6On5LZXllZERlY29k
ZXIoKQoreworICAgIEFTU0VSVChtX2RpY3Rpb25hcnlTdGFjay5zaXplKCkgPT0gMSk7CisgICAg
QVNTRVJUKG1fYXJyYXlTdGFjay5pc0VtcHR5KCkpOworICAgIEFTU0VSVChtX2FycmF5SW5kZXhT
dGFjay5pc0VtcHR5KCkpOworfQorCitIYXNoTWFwPFN0cmluZywgR1JlZlB0cjxHVmFyaWFudD4+
IEtleWVkRGVjb2Rlcjo6ZGljdGlvbmFyeUZyb21HVmFyaWFudChHVmFyaWFudCogdmFyaWFudCkK
K3sKKyAgICBIYXNoTWFwPFN0cmluZywgR1JlZlB0cjxHVmFyaWFudD4+IGRpY3Rpb25hcnk7Cisg
ICAgR1ZhcmlhbnRJdGVyIGl0ZXI7CisgICAgZ192YXJpYW50X2l0ZXJfaW5pdCgmaXRlciwgdmFy
aWFudCk7CisgICAgY29uc3QgY2hhcioga2V5OworICAgIEdWYXJpYW50KiB2YWx1ZTsKKyAgICB3
aGlsZSAoZ192YXJpYW50X2l0ZXJfbG9vcCgmaXRlciwgInsmc3Z9IiwgJmtleSwgJnZhbHVlKSkK
KyAgICAgICAgZGljdGlvbmFyeS5zZXQoU3RyaW5nOjpmcm9tVVRGOChrZXkpLCB2YWx1ZSk7Cisg
ICAgcmV0dXJuIFdURjo6bW92ZShkaWN0aW9uYXJ5KTsKK30KKworYm9vbCBLZXllZERlY29kZXI6
OmRlY29kZUJ5dGVzKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCB1aW50OF90KiYgYnl0ZXMsIHNp
emVfdCYgc2l6ZSkKK3sKKyAgICBHUmVmUHRyPEdWYXJpYW50PiB2YWx1ZSA9IG1fZGljdGlvbmFy
eVN0YWNrLmxhc3QoKS5nZXQoa2V5KTsKKyAgICBpZiAoIXZhbHVlKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBzaXplID0gZ192YXJpYW50X2dldF9zaXplKHZhbHVlLmdldCgpKTsKKyAg
ICBieXRlcyA9IHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihnX3ZhcmlhbnRfZ2V0X2RhdGEo
dmFsdWUuZ2V0KCkpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgRj4KK2Jvb2wgS2V5ZWREZWNvZGVyOjpkZWNvZGVTaW1wbGVWYWx1ZShjb25z
dCBTdHJpbmcmIGtleSwgVCYgcmVzdWx0LCBGIGdldEZ1bmN0aW9uKQoreworICAgIEdSZWZQdHI8
R1ZhcmlhbnQ+IHZhbHVlID0gbV9kaWN0aW9uYXJ5U3RhY2subGFzdCgpLmdldChrZXkpOworICAg
IGlmICghdmFsdWUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJlc3VsdCA9IGdldEZ1
bmN0aW9uKHZhbHVlLmdldCgpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBLZXllZERl
Y29kZXI6OmRlY29kZUJvb2woY29uc3QgU3RyaW5nJiBrZXksIGJvb2wmIHJlc3VsdCkKK3sKKyAg
ICByZXR1cm4gZGVjb2RlU2ltcGxlVmFsdWUoa2V5LCByZXN1bHQsIGdfdmFyaWFudF9nZXRfYm9v
bGVhbik7Cit9CisKK2Jvb2wgS2V5ZWREZWNvZGVyOjpkZWNvZGVVSW50MzIoY29uc3QgU3RyaW5n
JiBrZXksIHVpbnQzMl90JiByZXN1bHQpCit7CisgICAgcmV0dXJuIGRlY29kZVNpbXBsZVZhbHVl
KGtleSwgcmVzdWx0LCBnX3ZhcmlhbnRfZ2V0X3VpbnQzMik7Cit9CisKK2Jvb2wgS2V5ZWREZWNv
ZGVyOjpkZWNvZGVJbnQzMihjb25zdCBTdHJpbmcmIGtleSwgaW50MzJfdCYgcmVzdWx0KQorewor
ICAgIHJldHVybiBkZWNvZGVTaW1wbGVWYWx1ZShrZXksIHJlc3VsdCwgZ192YXJpYW50X2dldF9p
bnQzMik7Cit9CisKK2Jvb2wgS2V5ZWREZWNvZGVyOjpkZWNvZGVJbnQ2NChjb25zdCBTdHJpbmcm
IGtleSwgaW50NjRfdCYgcmVzdWx0KQoreworICAgIHJldHVybiBkZWNvZGVTaW1wbGVWYWx1ZShr
ZXksIHJlc3VsdCwgZ192YXJpYW50X2dldF9pbnQ2NCk7Cit9CisKK2Jvb2wgS2V5ZWREZWNvZGVy
OjpkZWNvZGVGbG9hdChjb25zdCBTdHJpbmcmIGtleSwgZmxvYXQmIHJlc3VsdCkKK3sKKyAgICBy
ZXR1cm4gZGVjb2RlU2ltcGxlVmFsdWUoa2V5LCByZXN1bHQsIGdfdmFyaWFudF9nZXRfZG91Ymxl
KTsKK30KKworYm9vbCBLZXllZERlY29kZXI6OmRlY29kZURvdWJsZShjb25zdCBTdHJpbmcmIGtl
eSwgZG91YmxlJiByZXN1bHQpCit7CisgICAgcmV0dXJuIGRlY29kZVNpbXBsZVZhbHVlKGtleSwg
cmVzdWx0LCBnX3ZhcmlhbnRfZ2V0X2RvdWJsZSk7Cit9CisKK2Jvb2wgS2V5ZWREZWNvZGVyOjpk
ZWNvZGVTdHJpbmcoY29uc3QgU3RyaW5nJiBrZXksIFN0cmluZyYgcmVzdWx0KQoreworICAgIEdS
ZWZQdHI8R1ZhcmlhbnQ+IHZhbHVlID0gbV9kaWN0aW9uYXJ5U3RhY2subGFzdCgpLmdldChrZXkp
OworICAgIGlmICghdmFsdWUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJlc3VsdCA9
IFN0cmluZzo6ZnJvbVVURjgoZ192YXJpYW50X2dldF9zdHJpbmcodmFsdWUuZ2V0KCksIG51bGxw
dHIpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBLZXllZERlY29kZXI6OmJlZ2luT2Jq
ZWN0KGNvbnN0IFN0cmluZyYga2V5KQoreworICAgIEdSZWZQdHI8R1ZhcmlhbnQ+IHZhbHVlID0g
bV9kaWN0aW9uYXJ5U3RhY2subGFzdCgpLmdldChrZXkpOworICAgIGlmICghdmFsdWUpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIG1fZGljdGlvbmFyeVN0YWNrLmFwcGVuZChkaWN0aW9u
YXJ5RnJvbUdWYXJpYW50KHZhbHVlLmdldCgpKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3Zv
aWQgS2V5ZWREZWNvZGVyOjplbmRPYmplY3QoKQoreworICAgIG1fZGljdGlvbmFyeVN0YWNrLnJl
bW92ZUxhc3QoKTsKK30KKworYm9vbCBLZXllZERlY29kZXI6OmJlZ2luQXJyYXkoY29uc3QgU3Ry
aW5nJiBrZXkpCit7CisgICAgR1JlZlB0cjxHVmFyaWFudD4gdmFsdWUgPSBtX2RpY3Rpb25hcnlT
dGFjay5sYXN0KCkuZ2V0KGtleSk7CisgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgbV9hcnJheVN0YWNrLmFwcGVuZCh2YWx1ZS5nZXQoKSk7CisgICAgbV9hcnJh
eUluZGV4U3RhY2suYXBwZW5kKDApOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEtleWVk
RGVjb2Rlcjo6YmVnaW5BcnJheUVsZW1lbnQoKQoreworICAgIGlmIChtX2FycmF5SW5kZXhTdGFj
ay5sYXN0KCkgPj0gZ192YXJpYW50X25fY2hpbGRyZW4obV9hcnJheVN0YWNrLmxhc3QoKSkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEdSZWZQdHI8R1ZhcmlhbnQ+IHZhcmlhbnQgPSBh
ZG9wdEdSZWYoZ192YXJpYW50X2dldF9jaGlsZF92YWx1ZShtX2FycmF5U3RhY2subGFzdCgpLCBt
X2FycmF5SW5kZXhTdGFjay5sYXN0KCkrKykpOworICAgIG1fZGljdGlvbmFyeVN0YWNrLmFwcGVu
ZChkaWN0aW9uYXJ5RnJvbUdWYXJpYW50KHZhcmlhbnQuZ2V0KCkpKTsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKwordm9pZCBLZXllZERlY29kZXI6OmVuZEFycmF5RWxlbWVudCgpCit7CisgICAgbV9k
aWN0aW9uYXJ5U3RhY2sucmVtb3ZlTGFzdCgpOworfQorCit2b2lkIEtleWVkRGVjb2Rlcjo6ZW5k
QXJyYXkoKQoreworICAgIG1fYXJyYXlTdGFjay5yZW1vdmVMYXN0KCk7CisgICAgbV9hcnJheUlu
ZGV4U3RhY2sucmVtb3ZlTGFzdCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvS2V5ZWREZWNvZGVyLmggYi9Tb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvZ3RrL0tleWVkRGVjb2Rlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjA4M2E3YWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvZ3RrL0tleWVkRGVjb2Rlci5oCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUgSWdhaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEtleWVkRGVjb2Rlcl9o
CisjZGVmaW5lIEtleWVkRGVjb2Rlcl9oCisKKyNpbmNsdWRlIDxXZWJDb3JlL0tleWVkQ29kaW5n
Lmg+CisjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVk
ZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2gu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7
CisKK2NsYXNzIEtleWVkRGVjb2RlciBmaW5hbCA6IHB1YmxpYyBXZWJDb3JlOjpLZXllZERlY29k
ZXIgeworcHVibGljOgorICAgIEtleWVkRGVjb2Rlcihjb25zdCB1aW50OF90KiBkYXRhLCBzaXpl
X3QpOworICAgIHZpcnR1YWwgfktleWVkRGVjb2RlcigpIG92ZXJyaWRlOworCitwcml2YXRlOgor
ICAgIHZpcnR1YWwgYm9vbCBkZWNvZGVCeXRlcyhjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgdWlu
dDhfdComLCBzaXplX3QmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgZGVjb2RlQm9vbChj
b25zdCBTdHJpbmcmIGtleSwgYm9vbCYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBkZWNv
ZGVVSW50MzIoY29uc3QgU3RyaW5nJiBrZXksIHVpbnQzMl90Jikgb3ZlcnJpZGU7CisgICAgdmly
dHVhbCBib29sIGRlY29kZUludDMyKGNvbnN0IFN0cmluZyYga2V5LCBpbnQzMl90Jikgb3ZlcnJp
ZGU7CisgICAgdmlydHVhbCBib29sIGRlY29kZUludDY0KGNvbnN0IFN0cmluZyYga2V5LCBpbnQ2
NF90Jikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIGRlY29kZUZsb2F0KGNvbnN0IFN0cmlu
ZyYga2V5LCBmbG9hdCYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBkZWNvZGVEb3VibGUo
Y29uc3QgU3RyaW5nJiBrZXksIGRvdWJsZSYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBk
ZWNvZGVTdHJpbmcoY29uc3QgU3RyaW5nJiBrZXksIFN0cmluZyYpIG92ZXJyaWRlOworCisgICAg
dmlydHVhbCBib29sIGJlZ2luT2JqZWN0KGNvbnN0IFN0cmluZyYga2V5KSBvdmVycmlkZTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZW5kT2JqZWN0KCkgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFsIGJvb2wg
YmVnaW5BcnJheShjb25zdCBTdHJpbmcmIGtleSkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29s
IGJlZ2luQXJyYXlFbGVtZW50KCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGVuZEFycmF5
RWxlbWVudCgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBlbmRBcnJheSgpIG92ZXJyaWRl
OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRj4gYm9vbCBkZWNvZGVTaW1w
bGVWYWx1ZShjb25zdCBTdHJpbmcmIGtleSwgVCYgcmVzdWx0LCBGIGdldEZ1bmN0aW9uKTsKKyAg
ICBIYXNoTWFwPFN0cmluZywgR1JlZlB0cjxHVmFyaWFudD4+IGRpY3Rpb25hcnlGcm9tR1Zhcmlh
bnQoR1ZhcmlhbnQqKTsKKworICAgIFZlY3RvcjxIYXNoTWFwPFN0cmluZywgR1JlZlB0cjxHVmFy
aWFudD4+PiBtX2RpY3Rpb25hcnlTdGFjazsKKyAgICBWZWN0b3I8R1ZhcmlhbnQqLCAxNj4gbV9h
cnJheVN0YWNrOworICAgIFZlY3Rvcjx1bnNpZ25lZD4gbV9hcnJheUluZGV4U3RhY2s7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEtleWVkRGVjb2Rlcl9oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL0tleWVkRW5jb2Rlci5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL0tleWVkRW5jb2Rlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uZmNkZmQ4ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1NoYXJlZC9ndGsvS2V5ZWRFbmNvZGVyLmNwcApAQCAtMCwwICsxLDEzNSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiS2V5ZWRFbmNvZGVyLmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL1No
YXJlZEJ1ZmZlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKwordXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitLZXllZEVuY29kZXI6Oktl
eWVkRW5jb2RlcigpCit7CisgICAgZ192YXJpYW50X2J1aWxkZXJfaW5pdCgmbV92YXJpYW50QnVp
bGRlciwgR19WQVJJQU5UX1RZUEUoImF7c3Z9IikpOworICAgIG1fdmFyaWFudEJ1aWxkZXJTdGFj
ay5hcHBlbmQoJm1fdmFyaWFudEJ1aWxkZXIpOworfQorCitLZXllZEVuY29kZXI6On5LZXllZEVu
Y29kZXIoKQoreworICAgIEFTU0VSVChtX3ZhcmlhbnRCdWlsZGVyU3RhY2suc2l6ZSgpID09IDEp
OworICAgIEFTU0VSVChtX3ZhcmlhbnRCdWlsZGVyU3RhY2subGFzdCgpID09ICZtX3ZhcmlhbnRC
dWlsZGVyKTsKKyAgICBBU1NFUlQobV9hcnJheVN0YWNrLmlzRW1wdHkoKSk7CisgICAgQVNTRVJU
KG1fb2JqZWN0U3RhY2suaXNFbXB0eSgpKTsKK30KKwordm9pZCBLZXllZEVuY29kZXI6OmVuY29k
ZUJ5dGVzKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCB1aW50OF90KiBieXRlcywgc2l6ZV90IHNp
emUpCit7CisgICAgR1JlZlB0cjxHQnl0ZXM+IGdCeXRlcyA9IGFkb3B0R1JlZihnX2J5dGVzX25l
d19zdGF0aWMoYnl0ZXMsIHNpemUpKTsKKyAgICBnX3ZhcmlhbnRfYnVpbGRlcl9hZGQobV92YXJp
YW50QnVpbGRlclN0YWNrLmxhc3QoKSwgIntzdn0iLCBrZXkudXRmOCgpLmRhdGEoKSwgZ192YXJp
YW50X25ld19mcm9tX2J5dGVzKEdfVkFSSUFOVF9UWVBFKCJheSIpLCBnQnl0ZXMuZ2V0KCksIFRS
VUUpKTsKK30KKwordm9pZCBLZXllZEVuY29kZXI6OmVuY29kZUJvb2woY29uc3QgU3RyaW5nJiBr
ZXksIGJvb2wgdmFsdWUpCit7CisgICAgZ192YXJpYW50X2J1aWxkZXJfYWRkKG1fdmFyaWFudEJ1
aWxkZXJTdGFjay5sYXN0KCksICJ7c3Z9Iiwga2V5LnV0ZjgoKS5kYXRhKCksIGdfdmFyaWFudF9u
ZXdfYm9vbGVhbih2YWx1ZSkpOworfQorCit2b2lkIEtleWVkRW5jb2Rlcjo6ZW5jb2RlVUludDMy
KGNvbnN0IFN0cmluZyYga2V5LCB1aW50MzJfdCB2YWx1ZSkKK3sKKyAgICBnX3ZhcmlhbnRfYnVp
bGRlcl9hZGQobV92YXJpYW50QnVpbGRlclN0YWNrLmxhc3QoKSwgIntzdn0iLCBrZXkudXRmOCgp
LmRhdGEoKSwgZ192YXJpYW50X25ld191aW50MzIodmFsdWUpKTsKK30KKwordm9pZCBLZXllZEVu
Y29kZXI6OmVuY29kZUludDMyKGNvbnN0IFN0cmluZyYga2V5LCBpbnQzMl90IHZhbHVlKQorewor
ICAgIGdfdmFyaWFudF9idWlsZGVyX2FkZChtX3ZhcmlhbnRCdWlsZGVyU3RhY2subGFzdCgpLCAi
e3N2fSIsIGtleS51dGY4KCkuZGF0YSgpLCBnX3ZhcmlhbnRfbmV3X2ludDMyKHZhbHVlKSk7Cit9
CisKK3ZvaWQgS2V5ZWRFbmNvZGVyOjplbmNvZGVJbnQ2NChjb25zdCBTdHJpbmcmIGtleSwgaW50
NjRfdCB2YWx1ZSkKK3sKKyAgICBnX3ZhcmlhbnRfYnVpbGRlcl9hZGQobV92YXJpYW50QnVpbGRl
clN0YWNrLmxhc3QoKSwgIntzdn0iLCBrZXkudXRmOCgpLmRhdGEoKSwgZ192YXJpYW50X25ld19p
bnQ2NCh2YWx1ZSkpOworfQorCit2b2lkIEtleWVkRW5jb2Rlcjo6ZW5jb2RlRmxvYXQoY29uc3Qg
U3RyaW5nJiBrZXksIGZsb2F0IHZhbHVlKQoreworICAgIGVuY29kZURvdWJsZShrZXksIHZhbHVl
KTsKK30KKwordm9pZCBLZXllZEVuY29kZXI6OmVuY29kZURvdWJsZShjb25zdCBTdHJpbmcmIGtl
eSwgZG91YmxlIHZhbHVlKQoreworICAgIGdfdmFyaWFudF9idWlsZGVyX2FkZChtX3ZhcmlhbnRC
dWlsZGVyU3RhY2subGFzdCgpLCAie3N2fSIsIGtleS51dGY4KCkuZGF0YSgpLCBnX3ZhcmlhbnRf
bmV3X2RvdWJsZSh2YWx1ZSkpOworfQorCit2b2lkIEtleWVkRW5jb2Rlcjo6ZW5jb2RlU3RyaW5n
KGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlKQoreworICAgIGdfdmFyaWFu
dF9idWlsZGVyX2FkZChtX3ZhcmlhbnRCdWlsZGVyU3RhY2subGFzdCgpLCAie3N2fSIsIGtleS51
dGY4KCkuZGF0YSgpLCBnX3ZhcmlhbnRfbmV3X3N0cmluZyh2YWx1ZS51dGY4KCkuZGF0YSgpKSk7
Cit9CisKK3ZvaWQgS2V5ZWRFbmNvZGVyOjpiZWdpbk9iamVjdChjb25zdCBTdHJpbmcmIGtleSkK
K3sKKyAgICBHUmVmUHRyPEdWYXJpYW50QnVpbGRlcj4gYnVpbGRlciA9IGFkb3B0R1JlZihnX3Zh
cmlhbnRfYnVpbGRlcl9uZXcoR19WQVJJQU5UX1RZUEUoImFhe3N2fSIpKSk7CisgICAgbV9vYmpl
Y3RTdGFjay5hcHBlbmQoc3RkOjptYWtlX3BhaXIoa2V5LCBidWlsZGVyKSk7CisgICAgbV92YXJp
YW50QnVpbGRlclN0YWNrLmFwcGVuZChidWlsZGVyLmdldCgpKTsKK30KKwordm9pZCBLZXllZEVu
Y29kZXI6OmVuZE9iamVjdCgpCit7CisgICAgR1ZhcmlhbnRCdWlsZGVyKiBidWlsZGVyID0gbV92
YXJpYW50QnVpbGRlclN0YWNrLnRha2VMYXN0KCk7CisgICAgZ192YXJpYW50X2J1aWxkZXJfYWRk
KG1fdmFyaWFudEJ1aWxkZXJTdGFjay5sYXN0KCksICJ7c3Z9IiwgbV9vYmplY3RTdGFjay5sYXN0
KCkuZmlyc3QudXRmOCgpLmRhdGEoKSwgZ192YXJpYW50X2J1aWxkZXJfZW5kKGJ1aWxkZXIpKTsK
KyAgICBtX29iamVjdFN0YWNrLnJlbW92ZUxhc3QoKTsKK30KKwordm9pZCBLZXllZEVuY29kZXI6
OmJlZ2luQXJyYXkoY29uc3QgU3RyaW5nJiBrZXkpCit7CisgICAgbV9hcnJheVN0YWNrLmFwcGVu
ZChzdGQ6Om1ha2VfcGFpcihrZXksIGFkb3B0R1JlZihnX3ZhcmlhbnRfYnVpbGRlcl9uZXcoR19W
QVJJQU5UX1RZUEUoImFhe3N2fSIpKSkpKTsKK30KKwordm9pZCBLZXllZEVuY29kZXI6OmJlZ2lu
QXJyYXlFbGVtZW50KCkKK3sKKyAgICBtX3ZhcmlhbnRCdWlsZGVyU3RhY2suYXBwZW5kKGdfdmFy
aWFudF9idWlsZGVyX25ldyhHX1ZBUklBTlRfVFlQRSgiYXtzdn0iKSkpOworfQorCit2b2lkIEtl
eWVkRW5jb2Rlcjo6ZW5kQXJyYXlFbGVtZW50KCkKK3sKKyAgICBHUmVmUHRyPEdWYXJpYW50QnVp
bGRlcj4gdmFyaWFudEJ1aWxkZXIgPSBhZG9wdEdSZWYobV92YXJpYW50QnVpbGRlclN0YWNrLnRh
a2VMYXN0KCkpOworICAgIGdfdmFyaWFudF9idWlsZGVyX2FkZF92YWx1ZShtX2FycmF5U3RhY2su
bGFzdCgpLnNlY29uZC5nZXQoKSwgZ192YXJpYW50X2J1aWxkZXJfZW5kKHZhcmlhbnRCdWlsZGVy
LmdldCgpKSk7Cit9CisKK3ZvaWQgS2V5ZWRFbmNvZGVyOjplbmRBcnJheSgpCit7CisgICAgZ192
YXJpYW50X2J1aWxkZXJfYWRkKG1fdmFyaWFudEJ1aWxkZXJTdGFjay5sYXN0KCksICJ7c3Z9Iiwg
bV9hcnJheVN0YWNrLmxhc3QoKS5maXJzdC51dGY4KCkuZGF0YSgpLCBnX3ZhcmlhbnRfYnVpbGRl
cl9lbmQobV9hcnJheVN0YWNrLmxhc3QoKS5zZWNvbmQuZ2V0KCkpKTsKKyAgICBtX2FycmF5U3Rh
Y2sucmVtb3ZlTGFzdCgpOworfQorCitQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gS2V5ZWRFbmNv
ZGVyOjpmaW5pc2hFbmNvZGluZygpCit7CisgICAgZ19hc3NlcnQobV92YXJpYW50QnVpbGRlclN0
YWNrLmxhc3QoKSA9PSAmbV92YXJpYW50QnVpbGRlcik7CisgICAgR1JlZlB0cjxHVmFyaWFudD4g
dmFyaWFudCA9IGdfdmFyaWFudF9idWlsZGVyX2VuZCgmbV92YXJpYW50QnVpbGRlcik7CisgICAg
R1JlZlB0cjxHQnl0ZXM+IGRhdGEgPSBnX3ZhcmlhbnRfZ2V0X2RhdGFfYXNfYnl0ZXModmFyaWFu
dC5nZXQoKSk7CisgICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKHN0YXRpY19jYXN0PGNv
bnN0IHVuc2lnbmVkIGNoYXIqPihnX2J5dGVzX2dldF9kYXRhKGRhdGEuZ2V0KCksIG51bGxwdHIp
KSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGdfYnl0ZXNfZ2V0X3NpemUoZGF0YS5nZXQoKSkpKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvZ3RrL0tleWVkRW5jb2Rlci5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9LZXll
ZEVuY29kZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZWEzM2ZkCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9LZXllZEVuY29kZXIu
aApAQCAtMCwwICsxLDcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IElnYWxpYSBTLkwu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZm5kZWYgS2V5ZWRFbmNvZGVyX2gKKyNkZWZpbmUgS2V5ZWRFbmNvZGVy
X2gKKworI2luY2x1ZGUgPFdlYkNvcmUvS2V5ZWRDb2RpbmcuaD4KKyNpbmNsdWRlIDxnbGliLmg+
CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7
CisKK2NsYXNzIEtleWVkRW5jb2RlciBmaW5hbCA6IHB1YmxpYyBXZWJDb3JlOjpLZXllZEVuY29k
ZXIgeworcHVibGljOgorICAgIEtleWVkRW5jb2RlcigpOworICAgIH5LZXllZEVuY29kZXIoKTsK
KworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+IGZpbmlzaEVu
Y29kaW5nKCkgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCB2b2lkIGVuY29kZUJ5
dGVzKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCB1aW50OF90Kiwgc2l6ZV90KSBvdmVycmlkZTsK
KyAgICB2aXJ0dWFsIHZvaWQgZW5jb2RlQm9vbChjb25zdCBTdHJpbmcmIGtleSwgYm9vbCkgb3Zl
cnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGVuY29kZVVJbnQzMihjb25zdCBTdHJpbmcmIGtleSwg
dWludDMyX3QpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBlbmNvZGVJbnQzMihjb25zdCBT
dHJpbmcmIGtleSwgaW50MzJfdCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGVuY29kZUlu
dDY0KGNvbnN0IFN0cmluZyYga2V5LCBpbnQ2NF90KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZv
aWQgZW5jb2RlRmxvYXQoY29uc3QgU3RyaW5nJiBrZXksIGZsb2F0KSBvdmVycmlkZTsKKyAgICB2
aXJ0dWFsIHZvaWQgZW5jb2RlRG91YmxlKGNvbnN0IFN0cmluZyYga2V5LCBkb3VibGUpIG92ZXJy
aWRlOworICAgIHZpcnR1YWwgdm9pZCBlbmNvZGVTdHJpbmcoY29uc3QgU3RyaW5nJiBrZXksIGNv
bnN0IFN0cmluZyYpIG92ZXJyaWRlOworCisgICAgdmlydHVhbCB2b2lkIGJlZ2luT2JqZWN0KGNv
bnN0IFN0cmluZyYga2V5KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZW5kT2JqZWN0KCkg
b3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5BcnJheShjb25zdCBTdHJpbmcmIGtl
eSkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGJlZ2luQXJyYXlFbGVtZW50KCkgb3ZlcnJp
ZGU7CisgICAgdmlydHVhbCB2b2lkIGVuZEFycmF5RWxlbWVudCgpIG92ZXJyaWRlOworICAgIHZp
cnR1YWwgdm9pZCBlbmRBcnJheSgpIG92ZXJyaWRlOworCisgICAgR1ZhcmlhbnRCdWlsZGVyIG1f
dmFyaWFudEJ1aWxkZXI7CisgICAgVmVjdG9yPEdWYXJpYW50QnVpbGRlciosIDE2PiBtX3Zhcmlh
bnRCdWlsZGVyU3RhY2s7CisgICAgVmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmcsIEdSZWZQdHI8R1Zh
cmlhbnRCdWlsZGVyPj4sIDE2PiBtX2FycmF5U3RhY2s7CisgICAgVmVjdG9yPHN0ZDo6cGFpcjxT
dHJpbmcsIEdSZWZQdHI8R1ZhcmlhbnRCdWlsZGVyPj4sIDE2PiBtX29iamVjdFN0YWNrOworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBLZXllZEVuY29kZXJfaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9Qcm9jZXNzRXhlY3V0YWJsZVBhdGhH
dGsuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9Qcm9jZXNzRXhlY3V0YWJsZVBhdGhH
dGsuY3BwCmluZGV4IGU3NTdjYzIuLjViNWI5NDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9ndGsvUHJvY2Vzc0V4ZWN1dGFibGVQYXRoR3RrLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvZ3RrL1Byb2Nlc3NFeGVjdXRhYmxlUGF0aEd0ay5jcHAKQEAgLTc5LDQgKzc5
LDExIEBAIFN0cmluZyBleGVjdXRhYmxlUGF0aE9mTmV0d29ya1Byb2Nlc3MoKQogfQogI2VuZGlm
CiAKKyNpZiBFTkFCTEUoREFUQUJBU0VfUFJPQ0VTUykKK1N0cmluZyBleGVjdXRhYmxlUGF0aE9m
RGF0YWJhc2VQcm9jZXNzKCkKK3sKKyAgICByZXR1cm4gZmluZFdlYktpdFByb2Nlc3MoIldlYktp
dERhdGFiYXNlUHJvY2VzcyIpOworfQorI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RhdGFiYXNlcy9EYXRhYmFzZVBy
b2Nlc3NQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRGF0YWJhc2VzL0RhdGFi
YXNlUHJvY2Vzc1Byb3h5LmNwcAppbmRleCA3NDc1ODQ3Li5iNjMxOWQ4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRGF0YWJhc2VzL0RhdGFiYXNlUHJvY2Vzc1Byb3h5LmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRGF0YWJhc2VzL0RhdGFiYXNlUHJvY2Vz
c1Byb3h5LmNwcApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIldlYk9yaWdpbkRhdGFNYW5h
Z2VyUHJveHkuaCIKICNpbmNsdWRlICJXZWJPcmlnaW5EYXRhTWFuYWdlclByb3h5TWVzc2FnZXMu
aCIKICNpbmNsdWRlICJXZWJQcm9jZXNzUG9vbC5oIgorI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1w
bGVtZW50ZWQuaD4KIAogI2lmIEVOQUJMRShEQVRBQkFTRV9QUk9DRVNTKQogCkBAIC0xMTcsNiAr
MTE4LDggQEAgdm9pZCBEYXRhYmFzZVByb2Nlc3NQcm94eTo6ZGlkQ3JlYXRlRGF0YWJhc2VUb1dl
YlByb2Nlc3NDb25uZWN0aW9uKGNvbnN0IElQQzo6QXQKIAogI2lmIE9TKERBUldJTikKICAgICBy
ZXBseS0+c2VuZChJUEM6OkF0dGFjaG1lbnQoY29ubmVjdGlvbklkZW50aWZpZXIucG9ydCgpLCBN
QUNIX01TR19UWVBFX01PVkVfU0VORCkpOworI2VsaWYgVVNFKFVOSVhfRE9NQUlOX1NPQ0tFVFMp
CisgICAgcmVwbHktPnNlbmQoY29ubmVjdGlvbklkZW50aWZpZXIpOwogI2Vsc2UKICAgICBub3RJ
bXBsZW1lbnRlZCgpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvRGF0YWJhc2VzL2d0ay9EYXRhYmFzZVByb2Nlc3NQcm94eUd0ay5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvRGF0YWJhc2VzL2d0ay9EYXRhYmFzZVByb2Nlc3NQcm94eUd0ay5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2I0ZTZjYQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EYXRhYmFzZXMvZ3RrL0RhdGFiYXNlUHJv
Y2Vzc1Byb3h5R3RrLmNwcApAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJEYXRhYmFzZVByb2Nlc3NQcm94eS5oIgorCisjaWYgRU5BQkxFKERBVEFCQVNFX1BST0NFU1Mp
CisKK25hbWVzcGFjZSBXZWJLaXQgeworCit2b2lkIERhdGFiYXNlUHJvY2Vzc1Byb3h5OjpwbGF0
Zm9ybUdldExhdW5jaE9wdGlvbnMoUHJvY2Vzc0xhdW5jaGVyOjpMYXVuY2hPcHRpb25zJikKK3sK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoREFUQUJBU0Vf
UFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9n
dGsvUHJvY2Vzc0xhdW5jaGVyR3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXVu
Y2hlci9ndGsvUHJvY2Vzc0xhdW5jaGVyR3RrLmNwcAppbmRleCA2MGFhYjFmLi4wMDBkNTQ0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvZ3RrL1Byb2Nlc3NM
YXVuY2hlckd0ay5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL2d0
ay9Qcm9jZXNzTGF1bmNoZXJHdGsuY3BwCkBAIC03OSw2ICs3OSwxMSBAQCB2b2lkIFByb2Nlc3NM
YXVuY2hlcjo6bGF1bmNoUHJvY2VzcygpCiAgICAgICAgIGV4ZWN1dGFibGVQYXRoID0gZXhlY3V0
YWJsZVBhdGhPZk5ldHdvcmtQcm9jZXNzKCk7CiAgICAgICAgIGJyZWFrOwogI2VuZGlmCisjaWYg
RU5BQkxFKERBVEFCQVNFX1BST0NFU1MpCisgICAgY2FzZSBEYXRhYmFzZVByb2Nlc3M6CisgICAg
ICAgIGV4ZWN1dGFibGVQYXRoID0gZXhlY3V0YWJsZVBhdGhPZkRhdGFiYXNlUHJvY2VzcygpOwor
ICAgICAgICBicmVhazsKKyNlbmRpZgogICAgIGRlZmF1bHQ6CiAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvZ3RrL1dlYlByb2Nlc3NQb29sR3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9ndGsvV2ViUHJvY2Vzc1Bvb2xHdGsuY3BwCmluZGV4IDFmODUyYWQuLjVjYTVlZTggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViUHJvY2Vzc1Bvb2xHdGsu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViUHJvY2Vzc1Bvb2xHdGsu
Y3BwCkBAIC0xMjAsOCArMTIwLDggQEAgU3RyaW5nIFdlYlByb2Nlc3NQb29sOjpsZWdhY3lQbGF0
Zm9ybURlZmF1bHRXZWJTUUxEYXRhYmFzZURpcmVjdG9yeSgpCiAKIFN0cmluZyBXZWJQcm9jZXNz
UG9vbDo6bGVnYWN5UGxhdGZvcm1EZWZhdWx0SW5kZXhlZERCRGF0YWJhc2VEaXJlY3RvcnkoKQog
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIFN0cmluZygpOworICAgIEdVbmlx
dWVQdHI8Z2NoYXI+IGluZGV4ZWREQkRhdGFiYXNlRGlyZWN0b3J5KGdfYnVpbGRfZmlsZW5hbWUo
Z19nZXRfdXNlcl9kYXRhX2RpcigpLCAid2Via2l0Z3RrIiwgImRhdGFiYXNlcyIsICJpbmRleGVk
ZGIiLCBudWxscHRyKSk7CisgICAgcmV0dXJuIFdlYkNvcmU6OmZpbGVuYW1lVG9TdHJpbmcoaW5k
ZXhlZERCRGF0YWJhc2VEaXJlY3RvcnkuZ2V0KCkpOwogfQogCiBTdHJpbmcgV2ViUHJvY2Vzc1Bv
b2w6OnBsYXRmb3JtRGVmYXVsdEljb25EYXRhYmFzZVBhdGgoKSBjb25zdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAKaW5kZXggODkxM2E0Yi4uYzgwMmQwMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCkBAIC0xMDM4LDExICsxMDM4LDEz
IEBAIHZvaWQgV2ViUHJvY2Vzczo6ZW5zdXJlV2ViVG9EYXRhYmFzZVByb2Nlc3NDb25uZWN0aW9u
KCkKIAogI2lmIE9TKERBUldJTikKICAgICBJUEM6OkNvbm5lY3Rpb246OklkZW50aWZpZXIgY29u
bmVjdGlvbklkZW50aWZpZXIoZW5jb2RlZENvbm5lY3Rpb25JZGVudGlmaWVyLnBvcnQoKSk7Ci0g
ICAgaWYgKElQQzo6Q29ubmVjdGlvbjo6aWRlbnRpZmllcklzTnVsbChjb25uZWN0aW9uSWRlbnRp
ZmllcikpCi0gICAgICAgIHJldHVybjsKKyNlbGlmIFVTRShVTklYX0RPTUFJTl9TT0NLRVRTKQor
ICAgIElQQzo6Q29ubmVjdGlvbjo6SWRlbnRpZmllciBjb25uZWN0aW9uSWRlbnRpZmllciA9IGVu
Y29kZWRDb25uZWN0aW9uSWRlbnRpZmllci5yZWxlYXNlRmlsZURlc2NyaXB0b3IoKTsKICNlbHNl
CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAjZW5kaWYKKyAgICBpZiAoSVBDOjpDb25uZWN0
aW9uOjppZGVudGlmaWVySXNOdWxsKGNvbm5lY3Rpb25JZGVudGlmaWVyKSkKKyAgICAgICAgcmV0
dXJuOwogICAgIG1fd2ViVG9EYXRhYmFzZVByb2Nlc3NDb25uZWN0aW9uID0gV2ViVG9EYXRhYmFz
ZVByb2Nlc3NDb25uZWN0aW9uOjpjcmVhdGUoY29ubmVjdGlvbklkZW50aWZpZXIpOwogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvY21ha2UvT3B0aW9uc0dUSy5jbWFrZSBiL1NvdXJjZS9jbWFrZS9P
cHRpb25zR1RLLmNtYWtlCmluZGV4IDRjZWU0ZGIuLjlmODVjODcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9jbWFrZS9PcHRpb25zR1RLLmNtYWtlCisrKyBiL1NvdXJjZS9jbWFrZS9PcHRpb25zR1RLLmNt
YWtlCkBAIC0yMTksNiArMjE5LDcgQEAgc2V0KFdlYktpdDJfT1VUUFVUX05BTUUgd2Via2l0Mmd0
ay0ke1dFQktJVEdUS19BUElfVkVSU0lPTn0pCiBzZXQoV2ViS2l0Ml9XZWJQcm9jZXNzX09VVFBV
VF9OQU1FIFdlYktpdFdlYlByb2Nlc3MpCiBzZXQoV2ViS2l0Ml9OZXR3b3JrUHJvY2Vzc19PVVRQ
VVRfTkFNRSBXZWJLaXROZXR3b3JrUHJvY2VzcykKIHNldChXZWJLaXQyX1BsdWdpblByb2Nlc3Nf
T1VUUFVUX05BTUUgV2ViS2l0UGx1Z2luUHJvY2VzcykKK3NldChXZWJLaXQyX0RhdGFiYXNlUHJv
Y2Vzc19PVVRQVVRfTkFNRSBXZWJLaXREYXRhYmFzZVByb2Nlc3MpCiAKIGFkZF9kZWZpbml0aW9u
cygtREJVSUxESU5HX0dUS19fPTEpCiBhZGRfZGVmaW5pdGlvbnMoLURHRVRURVhUX1BBQ0tBR0U9
IldlYktpdDJHVEstJHtXRUJLSVRHVEtfQVBJX1ZFUlNJT059IikK
</data>
<flag name="review"
          id="270165"
          type_id="1"
          status="+"
          setter="svillar"
    />
          </attachment>
      

    </bug>

</bugzilla>