<?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>207497</bug_id>
          
          <creation_ts>2020-02-10 13:16:35 -0800</creation_ts>
          <short_desc>PersistentCoders should use modern decoding syntax</short_desc>
          <delta_ts>2020-04-11 08:44:35 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Template Framework</component>
          <version>WebKit 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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alex Christensen">achristensen</reporter>
          <assigned_to name="Alex Christensen">achristensen</assigned_to>
          <cc>benjamin</cc>
    
    <cc>berto</cc>
    
    <cc>cdumez</cc>
    
    <cc>cgarcia</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>darin</cc>
    
    <cc>dbates</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>don.olmstead</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fujii</cc>
    
    <cc>galpeter</cc>
    
    <cc>gustavo</cc>
    
    <cc>hi</cc>
    
    <cc>japhet</cc>
    
    <cc>joepeck</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>mkwst</cc>
    
    <cc>ross.kirsling</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1617056</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-02-10 13:16:35 -0800</bug_when>
    <thetext>This paves the way for more serialized types that do not have a default constructor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1617059</commentid>
    <comment_count>1</comment_count>
      <attachid>390285</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-02-10 13:18:45 -0800</bug_when>
    <thetext>Created attachment 390285
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1617107</commentid>
    <comment_count>2</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-02-10 14:13:58 -0800</bug_when>
    <thetext>Could someone who works on linux get the linux build working with this change?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1617177</commentid>
    <comment_count>3</comment_count>
      <attachid>390312</attachid>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2020-02-10 16:36:37 -0800</bug_when>
    <thetext>Created attachment 390312
sub-patch for WinCairo

Here&apos;s a diff for making WinCairo green.

One question that arose while doing this:
Is it okay that we don&apos;t write WTF::nullopt when we fail to decode?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1617178</commentid>
    <comment_count>4</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-02-10 16:37:42 -0800</bug_when>
    <thetext>What do you mean?  We usually try to use WTF::nullopt instead of { } because some people think { } is unclear.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1617182</commentid>
    <comment_count>5</comment_count>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2020-02-10 16:40:08 -0800</bug_when>
    <thetext>(In reply to Alex Christensen from comment #4)
&gt; What do you mean?  We usually try to use WTF::nullopt instead of { } because
&gt; some people think { } is unclear.

Oh sorry, too terse. I meant &quot;write (to the out param)&quot;. We can&apos;t (easily) recycle a variable when decoding repeatedly because the previous value will be preserved.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1617230</commentid>
    <comment_count>6</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-02-10 17:42:08 -0800</bug_when>
    <thetext>We are moving from this model:
1. Instantiating a default-constructed value
2. Decode members into the value
3. Return the value by reference

To this model:
1. Decode all members
2. Construct an object with all members

This avoids partially initialized objects and it allows non-default-constructible objects, so we can use UniqueRef and Ref in serialized types.  It&apos;s a slow move, but we&apos;ll get there any year now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1617334</commentid>
    <comment_count>7</comment_count>
      <attachid>390353</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-02-11 04:55:50 -0800</bug_when>
    <thetext>Created attachment 390353
Patch for soup

It builds with this patch, but it doesn&apos;t work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1617384</commentid>
    <comment_count>8</comment_count>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2020-02-11 08:03:50 -0800</bug_when>
    <thetext>(In reply to Carlos Garcia Campos from comment #7)
&gt; Created attachment 390353 [details]
&gt; Patch for soup
&gt; 
&gt; It builds with this patch, but it doesn&apos;t work.

Yeah, I should&apos;ve mentioned the same for WinCairo. All relevant API tests fail, but this is probably not a platform-specific issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1617868</commentid>
    <comment_count>9</comment_count>
      <attachid>390285</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2020-02-11 21:52:09 -0800</bug_when>
    <thetext>Comment on attachment 390285
patch

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

&gt; Source/WebCore/platform/network/ResourceRequestBase.h:363
&gt;  }

How about idea using Optional only for non-default-constructable class?
How about idea adding error state to decoder as well as std::ios_base::iostate?
https://en.cppreference.com/w/cpp/io/ios_base/iostate

Then, ResourceRequestBase::decodeBase can be simplified like the following.

template&lt;class Decoder&gt;
ALWAYS_INLINE void ResourceRequestBase::decodeBase(Decoder&amp; decoder)
{
    String firstPartyForCookies;

    decoder &gt;&gt; m_url;
    decoder &gt;&gt; m_timeoutInterval;
    decoder &gt;&gt; firstPartyForCookies;
    decoder &gt;&gt; m_httpMethod;
    decoder &gt;&gt; m_httpHeaderFields;
    decoder &gt;&gt; m_responseContentDispositionEncodingFallbackArray;
    decoder &gt;&gt; m_cachePolicy;
    decoder &gt;&gt; m_allowCookies;
    decoder &gt;&gt; m_sameSiteDisposition;
    decoder &gt;&gt; m_isTopSite;
    decoder &gt;&gt; m_priority;
    decoder &gt;&gt; m_requester;

    if (decoder.didFail)
        return;

    m_firstPartyForCookies = URL({ }, firstPartyForCookies);
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1617871</commentid>
    <comment_count>10</comment_count>
      <attachid>390285</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2020-02-11 22:09:26 -0800</bug_when>
    <thetext>Comment on attachment 390285
patch

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

&gt; Source/WTF/wtf/persistence/PersistentCoders.h:135
&gt; +        tmp.reserveInitialCapacity(*size);

You added reserveInitialCapacity here.
It is dangerous to allocate memory without check bufferIsLargeEnoughToContain.
Use tryReserveCapacity and check the result.

&gt; Source/WTF/wtf/persistence/PersistentCoders.h:201
&gt; +        tempHashMap.reserveInitialCapacity(static_cast&lt;unsigned&gt;(*hashMapSize));

HashMap should have tryReserveCapacity method.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1640432</commentid>
    <comment_count>11</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-04-10 17:25:34 -0700</bug_when>
    <thetext>I removed my reserveInitialCapacity &quot;optimization&quot;.
We could definitely add a flag to the decoder, but we would still want to decode to Optional&lt;T&gt; in case it fails.  The flag would prevent us from having to check every time we call operator&gt;&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1640433</commentid>
    <comment_count>12</comment_count>
      <attachid>396137</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-04-10 17:27:42 -0700</bug_when>
    <thetext>Created attachment 396137
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1640445</commentid>
    <comment_count>13</comment_count>
      <attachid>396139</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-04-10 17:48:14 -0700</bug_when>
    <thetext>Created attachment 396139
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1640450</commentid>
    <comment_count>14</comment_count>
      <attachid>396141</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-04-10 18:07:12 -0700</bug_when>
    <thetext>Created attachment 396141
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1640461</commentid>
    <comment_count>15</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2020-04-10 19:00:53 -0700</bug_when>
    <thetext>(In reply to Alex Christensen from comment #14)
&gt; Created attachment 396141 [details]
&gt; Patch

Sorry, this need to be rebased after r259917.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1640462</commentid>
    <comment_count>16</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2020-04-10 19:03:20 -0700</bug_when>
    <thetext>(In reply to David Kilzer (:ddkilzer) from comment #15)
&gt; (In reply to Alex Christensen from comment #14)
&gt; &gt; Created attachment 396141 [details]
&gt; &gt; Patch
&gt; 
&gt; Sorry, this need to be rebased after r259917.

Actually...it might be okay.  I don&apos;t think this patch changes the same lines of code that r259917 did.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1640464</commentid>
    <comment_count>17</comment_count>
      <attachid>396141</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2020-04-10 19:19:57 -0700</bug_when>
    <thetext>Comment on attachment 396141
Patch

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

&gt; Source/WebCore/platform/network/ResourceLoadPriority.h:69
&gt; +template&lt;&gt; struct EnumTraits&lt;WebCore::ResourceLoadPriority&gt; {
&gt; +    using values = EnumValues&lt;
&gt; +        WebCore::ResourceLoadPriority,
&gt; +        WebCore::ResourceLoadPriority::VeryLow,
&gt; +        WebCore::ResourceLoadPriority::Low,
&gt; +        WebCore::ResourceLoadPriority::Medium,
&gt; +        WebCore::ResourceLoadPriority::High,
&gt; +        WebCore::ResourceLoadPriority::VeryHigh
&gt; +    &gt;;
&gt; +};

I don&apos;t think MSVC++ likes this syntax:

ResourceRequestCFNet.cpp
C:\cygwin\home\buildbot\worker\Windows-EWS\build\Source\WebCore\platform\network\ResourceLoadPriority.h(60,29): error C2988: unrecognizable template declaration/definition (compiling source file C:\cygwin\home\buildbot\worker\Windows-EWS\build\Source\WebCore\platform\network\cf\ResourceRequestCFNet.cpp) [C:\cygwin\home\buildbot\worker\Windows-EWS\build\WebKitBuild\Release\Source\WebCore\WebCore.vcxproj]
C:\cygwin\home\buildbot\worker\Windows-EWS\build\Source\WebCore\platform\network\ResourceLoadPriority.h(60,29): error C2143: syntax error: missing &apos;;&apos; before &apos;&lt;&apos; (compiling source file C:\cygwin\home\buildbot\worker\Windows-EWS\build\Source\WebCore\platform\network\cf\ResourceRequestCFNet.cpp) [C:\cygwin\home\buildbot\worker\Windows-EWS\build\WebKitBuild\Release\Source\WebCore\WebCore.vcxproj]
C:\cygwin\home\buildbot\worker\Windows-EWS\build\Source\WebCore\platform\network\ResourceLoadPriority.h(60,12): error C2913: explicit specialization; &apos;WTF::EnumTraits&apos; is not a specialization of a class template (compiling source file C:\cygwin\home\buildbot\worker\Windows-EWS\build\Source\WebCore\platform\network\cf\ResourceRequestCFNet.cpp) [C:\cygwin\home\buildbot\worker\Windows-EWS\build\WebKitBuild\Release\Source\WebCore\WebCore.vcxproj]
C:\cygwin\home\buildbot\worker\Windows-EWS\build\Source\WebCore\platform\network\ResourceLoadPriority.h(60,29): error C2059: syntax error: &apos;&lt;&apos; (compiling source file C:\cygwin\home\buildbot\worker\Windows-EWS\build\Source\WebCore\platform\network\cf\ResourceRequestCFNet.cpp) [C:\cygwin\home\buildbot\worker\Windows-EWS\build\WebKitBuild\Release\Source\WebCore\WebCore.vcxproj]
C:\cygwin\home\buildbot\worker\Windows-EWS\build\Source\WebCore\platform\network\ResourceLoadPriority.h(60,61): error C2143: syntax error: missing &apos;;&apos; before &apos;{&apos; (compiling source file C:\cygwin\home\buildbot\worker\Windows-EWS\build\Source\WebCore\platform\network\cf\ResourceRequestCFNet.cpp) [C:\cygwin\home\buildbot\worker\Windows-EWS\build\WebKitBuild\Release\Source\WebCore\WebCore.vcxproj]

&lt;https://ews-build.webkit.org/#/builders/10/builds/14701&gt;

Does MSVC++ not like the type specifier on the enum class?

enum class ResourceLoadPriority : uint8_t {
    [...]
};</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1640466</commentid>
    <comment_count>18</comment_count>
      <attachid>396141</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2020-04-10 19:21:52 -0700</bug_when>
    <thetext>Comment on attachment 396141
Patch

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

&gt;&gt; Source/WebCore/platform/network/ResourceLoadPriority.h:69
&gt;&gt; +};
&gt; 
&gt; I don&apos;t think MSVC++ likes this syntax:
&gt; 
&gt; ResourceRequestCFNet.cpp
&gt; C:\cygwin\home\buildbot\worker\Windows-EWS\build\Source\WebCore\platform\network\ResourceLoadPriority.h(60,29): error C2988: unrecognizable template declaration/definition (compiling source file C:\cygwin\home\buildbot\worker\Windows-EWS\build\Source\WebCore\platform\network\cf\ResourceRequestCFNet.cpp) [C:\cygwin\home\buildbot\worker\Windows-EWS\build\WebKitBuild\Release\Source\WebCore\WebCore.vcxproj]
&gt; C:\cygwin\home\buildbot\worker\Windows-EWS\build\Source\WebCore\platform\network\ResourceLoadPriority.h(60,29): error C2143: syntax error: missing &apos;;&apos; before &apos;&lt;&apos; (compiling source file C:\cygwin\home\buildbot\worker\Windows-EWS\build\Source\WebCore\platform\network\cf\ResourceRequestCFNet.cpp) [C:\cygwin\home\buildbot\worker\Windows-EWS\build\WebKitBuild\Release\Source\WebCore\WebCore.vcxproj]
&gt; C:\cygwin\home\buildbot\worker\Windows-EWS\build\Source\WebCore\platform\network\ResourceLoadPriority.h(60,12): error C2913: explicit specialization; &apos;WTF::EnumTraits&apos; is not a specialization of a class template (compiling source file C:\cygwin\home\buildbot\worker\Windows-EWS\build\Source\WebCore\platform\network\cf\ResourceRequestCFNet.cpp) [C:\cygwin\home\buildbot\worker\Windows-EWS\build\WebKitBuild\Release\Source\WebCore\WebCore.vcxproj]
&gt; C:\cygwin\home\buildbot\worker\Windows-EWS\build\Source\WebCore\platform\network\ResourceLoadPriority.h(60,29): error C2059: syntax error: &apos;&lt;&apos; (compiling source file C:\cygwin\home\buildbot\worker\Windows-EWS\build\Source\WebCore\platform\network\cf\ResourceRequestCFNet.cpp) [C:\cygwin\home\buildbot\worker\Windows-EWS\build\WebKitBuild\Release\Source\WebCore\WebCore.vcxproj]
&gt; C:\cygwin\home\buildbot\worker\Windows-EWS\build\Source\WebCore\platform\network\ResourceLoadPriority.h(60,61): error C2143: syntax error: missing &apos;;&apos; before &apos;{&apos; (compiling source file C:\cygwin\home\buildbot\worker\Windows-EWS\build\Source\WebCore\platform\network\cf\ResourceRequestCFNet.cpp) [C:\cygwin\home\buildbot\worker\Windows-EWS\build\WebKitBuild\Release\Source\WebCore\WebCore.vcxproj]
&gt; 
&gt; &lt;https://ews-build.webkit.org/#/builders/10/builds/14701&gt;
&gt; 
&gt; Does MSVC++ not like the type specifier on the enum class?
&gt; 
&gt; enum class ResourceLoadPriority : uint8_t {
&gt;     [...]
&gt; };

Oh, maybe it needs this preceding it:

template&lt;typename T&gt; struct EnumTraits;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1640478</commentid>
    <comment_count>19</comment_count>
      <attachid>396141</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-04-10 21:30:10 -0700</bug_when>
    <thetext>Comment on attachment 396141
Patch

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

&gt; Source/WebCore/platform/network/ResourceRequestBase.h:419
&gt; +        WebCore::ResourceRequestBase::Requester::ImportScripts

Yes, I need to include EnumTraits.h to fix the Windows build.  I also need to include Ping and Beacon here to fix the tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1640479</commentid>
    <comment_count>20</comment_count>
      <attachid>396148</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-04-10 21:34:03 -0700</bug_when>
    <thetext>Created attachment 396148
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1640484</commentid>
    <comment_count>21</comment_count>
      <attachid>396152</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-04-10 22:13:23 -0700</bug_when>
    <thetext>Created attachment 396152
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1640491</commentid>
    <comment_count>22</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-04-10 23:39:41 -0700</bug_when>
    <thetext>Committed r259922: &lt;https://trac.webkit.org/changeset/259922&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 396152.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1640492</commentid>
    <comment_count>23</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-04-10 23:40:16 -0700</bug_when>
    <thetext>&lt;rdar://problem/61625504&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1640550</commentid>
    <comment_count>24</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-11 08:44:35 -0700</bug_when>
    <thetext>(In reply to Fujii Hironori from comment #9)
&gt; How about idea using Optional only for non-default-constructable class?

I like this idea.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>390285</attachid>
            <date>2020-02-10 13:18:45 -0800</date>
            <delta_ts>2020-04-10 17:27:31 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>73879</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNTYwODEpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDM4IEBACisyMDIwLTAyLTEwICBBbGV4IENocmlzdGVuc2VuICA8
YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUGVyc2lzdGVudENvZGVycyBzaG91
bGQgdXNlIG1vZGVybiBkZWNvZGluZyBzeW50YXgKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNzQ5NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF2ZXMgdGhlIHdheSBmb3IgbW9yZSBzZXJpYWxp
emVkIHR5cGVzIHRoYXQgZG8gbm90IGhhdmUgYSBkZWZhdWx0IGNvbnN0cnVjdG9yLgorCisgICAg
ICAgICogd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRDb2Rlci5oOgorICAgICAgICAoV1RGOjpQ
ZXJzaXN0ZW5jZTo6Q29kZXI6OmVuY29kZSk6CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpD
b2Rlcjo6ZGVjb2RlKToKKyAgICAgICAgKiB3dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudENvZGVy
cy5jcHA6CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpDb2RlcjxBdG9tU3RyaW5nPjo6ZGVj
b2RlKToKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkNvZGVyPENTdHJpbmc+OjpkZWNvZGUp
OgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6ZGVjb2RlU3RyaW5nVGV4dCk6CisgICAgICAg
IChXVEY6OlBlcnNpc3RlbmNlOjpDb2RlcjxTdHJpbmc+OjpkZWNvZGUpOgorICAgICAgICAoV1RG
OjpQZXJzaXN0ZW5jZTo6Q29kZXI8U0hBMTo6RGlnZXN0Pjo6ZGVjb2RlKToKKyAgICAgICAgKiB3
dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudENvZGVycy5oOgorICAgICAgICAoV1RGOjpQZXJzaXN0
ZW5jZTo6Q29kZXI8T3B0aW9uYWw8VD4+OjpkZWNvZGUpOgorICAgICAgICAoV1RGOjpQZXJzaXN0
ZW5jZTo6Q29kZXI8U2Vjb25kcz46OmRlY29kZSk6CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNl
OjpDb2RlcjxXYWxsVGltZT46OmRlY29kZSk6CisgICAgICAgICogd3RmL3BlcnNpc3RlbmNlL1Bl
cnNpc3RlbnREZWNvZGVyLmNwcDoKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXI6
OmRlY29kZU51bWJlcik6CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyOjpvcGVy
YXRvcj4+KToKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXI6OmRlY29kZSk6IERl
bGV0ZWQuCisgICAgICAgICogd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnREZWNvZGVyLmg6Cisg
ICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyOjpvcGVyYXRvcj4+KToKKyAgICAgICAg
KFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXI6OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChX
VEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyOjpkZWNvZGVFbnVtKTogRGVsZXRlZC4KKyAgICAgICAg
KiB3dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudEVuY29kZXIuaDoKKyAgICAgICAgKFdURjo6UGVy
c2lzdGVuY2U6OkVuY29kZXI6Om9wZXJhdG9yPDwpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5j
ZTo6RW5jb2Rlcjo6ZW5jb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6
OkVuY29kZXI6OmVuY29kZUVudW0pOiBEZWxldGVkLgorCiAyMDIwLTAyLTA3ICBBbGV4IENocmlz
dGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgSGFyZGVuIEhhc2hU
YWJsZSBJUEMgZGVjb2RlcnMKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNp
c3RlbnRDb2Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1Bl
cnNpc3RlbnRDb2Rlci5oCShyZXZpc2lvbiAyNTYwODEpCisrKyBTb3VyY2UvV1RGL3d0Zi9wZXJz
aXN0ZW5jZS9QZXJzaXN0ZW50Q29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTIgKzM0LDEy
IEBACiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29kZXIgewogICAgIHN0YXRpYyB2b2lk
IGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBUJiB0KQogICAgIHsKLSAgICAgICAgdC5l
bmNvZGUoZW5jb2Rlcik7CisgICAgICAgIGVuY29kZXIgPDwgdDsKICAgICB9CiAKLSAgICBzdGF0
aWMgYm9vbCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgVCYgdCkKKyAgICBzdGF0aWMgRGVjb2Rl
ciYgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIE9wdGlvbmFsPFQ+JiB0KQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIFQ6OmRlY29kZShkZWNvZGVyLCB0KTsKKyAgICAgICAgcmV0dXJuIGRlY29kZXIg
Pj4gdDsKICAgICB9CiB9OwogCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJz
aXN0ZW50Q29kZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5j
ZS9QZXJzaXN0ZW50Q29kZXJzLmNwcAkocmV2aXNpb24gMjU2MDgxKQorKysgU291cmNlL1dURi93
dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudENvZGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3
LDE0ICszNywxNCBAQAogICAgIGVuY29kZXIgPDwgYXRvbVN0cmluZy5zdHJpbmcoKTsKIH0KIAot
Ym9vbCBDb2RlcjxBdG9tU3RyaW5nPjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIEF0b21TdHJp
bmcmIGF0b21TdHJpbmcpCitPcHRpb25hbDxBdG9tU3RyaW5nPiBDb2RlcjxBdG9tU3RyaW5nPjo6
ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7Ci0gICAgU3RyaW5nIHN0cmluZzsKLSAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKHN0cmluZykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBPcHRp
b25hbDxTdHJpbmc+IHN0cmluZzsKKyAgICBkZWNvZGVyID4+IHN0cmluZzsKKyAgICBpZiAoIXN0
cmluZykKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIGF0b21TdHJpbmcgPSBz
dHJpbmc7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHt7ICpzdHJpbmcgfX07CiB9CiAK
IHZvaWQgQ29kZXI8Q1N0cmluZz46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBDU3Ry
aW5nJiBzdHJpbmcpCkBAIC02MCwyOSArNjAsMjggQEAKICAgICBlbmNvZGVyLmVuY29kZUZpeGVk
TGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihzdHJpbmcuZGF0YSgp
KSwgbGVuZ3RoKTsKIH0KIAotYm9vbCBDb2RlcjxDU3RyaW5nPjo6ZGVjb2RlKERlY29kZXImIGRl
Y29kZXIsIENTdHJpbmcmIHJlc3VsdCkKK09wdGlvbmFsPENTdHJpbmc+IENvZGVyPENTdHJpbmc+
OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIHsKLSAgICB1aW50MzJfdCBsZW5ndGg7Ci0gICAg
aWYgKCFkZWNvZGVyLmRlY29kZShsZW5ndGgpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
T3B0aW9uYWw8dWludDMyX3Q+IGxlbmd0aDsKKyAgICBkZWNvZGVyID4+IGxlbmd0aDsKKyAgICBp
ZiAoIWxlbmd0aCkKKyAgICAgICAgcmV0dXJuICBXVEY6Om51bGxvcHQ7CiAKICAgICBpZiAobGVu
Z3RoID09IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSkgewogICAgICAgICAv
LyBUaGlzIGlzIHRoZSBudWxsIHN0cmluZy4KLSAgICAgICAgcmVzdWx0ID0gQ1N0cmluZygpOwot
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIENTdHJpbmcoKTsKICAgICB9CiAK
ICAgICAvLyBCZWZvcmUgYWxsb2NhdGluZyB0aGUgc3RyaW5nLCBtYWtlIHN1cmUgdGhhdCB0aGUg
ZGVjb2RlciBidWZmZXIgaXMgYmlnIGVub3VnaC4KLSAgICBpZiAoIWRlY29kZXIuYnVmZmVySXNM
YXJnZUVub3VnaFRvQ29udGFpbjxjaGFyPihsZW5ndGgpKQotICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgaWYgKCFkZWNvZGVyLmJ1ZmZlcklzTGFyZ2VFbm91Z2hUb0NvbnRhaW48Y2hhcj4oKmxl
bmd0aCkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICBjaGFyKiBidWZmZXI7
Ci0gICAgQ1N0cmluZyBzdHJpbmcgPSBDU3RyaW5nOjpuZXdVbmluaXRpYWxpemVkKGxlbmd0aCwg
YnVmZmVyKTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJw
cmV0X2Nhc3Q8dWludDhfdCo+KGJ1ZmZlciksIGxlbmd0aCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBDU3RyaW5nIHN0cmluZyA9IENTdHJpbmc6Om5ld1VuaW5pdGlhbGl6ZWQoKmxlbmd0
aCwgYnVmZmVyKTsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50
ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGJ1ZmZlciksICpsZW5ndGgpKQorICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwogCi0gICAgcmVzdWx0ID0gc3RyaW5nOwotICAgIHJldHVybiB0cnVlOwor
ICAgIHJldHVybiBzdHJpbmc7CiB9CiAKIApAQCAtMTA2LDQwICsxMDUsNDAgQEAKIH0KIAogdGVt
cGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1zdGF0aWMgaW5saW5lIGJvb2wgZGVjb2Rl
U3RyaW5nVGV4dChEZWNvZGVyJiBkZWNvZGVyLCB1aW50MzJfdCBsZW5ndGgsIFN0cmluZyYgcmVz
dWx0KQorc3RhdGljIGlubGluZSBPcHRpb25hbDxTdHJpbmc+IGRlY29kZVN0cmluZ1RleHQoRGVj
b2RlciYgZGVjb2RlciwgdWludDMyX3QgbGVuZ3RoKQogewogICAgIC8vIEJlZm9yZSBhbGxvY2F0
aW5nIHRoZSBzdHJpbmcsIG1ha2Ugc3VyZSB0aGF0IHRoZSBkZWNvZGVyIGJ1ZmZlciBpcyBiaWcg
ZW5vdWdoLgogICAgIGlmICghZGVjb2Rlci5idWZmZXJJc0xhcmdlRW5vdWdoVG9Db250YWluPENo
YXJhY3RlclR5cGU+KGxlbmd0aCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIENoYXJhY3RlclR5cGUqIGJ1ZmZlcjsKICAgICBTdHJp
bmcgc3RyaW5nID0gU3RyaW5nOjpjcmVhdGVVbmluaXRpYWxpemVkKGxlbmd0aCwgYnVmZmVyKTsK
ICAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8
dWludDhfdCo+KGJ1ZmZlciksIGxlbmd0aCAqIHNpemVvZihDaGFyYWN0ZXJUeXBlKSkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAKLSAg
ICByZXN1bHQgPSBzdHJpbmc7Ci0gICAgcmV0dXJuIHRydWU7ICAgIAorICAgIHJldHVybiBzdHJp
bmc7CiB9CiAKLWJvb2wgQ29kZXI8U3RyaW5nPjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFN0
cmluZyYgcmVzdWx0KQorT3B0aW9uYWw8U3RyaW5nPiBDb2RlcjxTdHJpbmc+OjpkZWNvZGUoRGVj
b2RlciYgZGVjb2RlcikKIHsKLSAgICB1aW50MzJfdCBsZW5ndGg7Ci0gICAgaWYgKCFkZWNvZGVy
LmRlY29kZShsZW5ndGgpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgT3B0aW9uYWw8dWlu
dDMyX3Q+IGxlbmd0aDsKKyAgICBkZWNvZGVyID4+IGxlbmd0aDsKKyAgICBpZiAoIWxlbmd0aCkK
KyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIGlmIChsZW5ndGggPT0gc3RkOjpu
dW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpKSB7CiAgICAgICAgIC8vIFRoaXMgaXMgdGhl
IG51bGwgc3RyaW5nLgotICAgICAgICByZXN1bHQgPSBTdHJpbmcoKTsKLSAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICB9CiAKLSAgICBib29sIGlzOEJp
dDsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGlzOEJpdCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBPcHRpb25hbDxib29sPiBpczhCaXQ7CisgICAgZGVjb2RlciA+PiBpczhCaXQ7Cisg
ICAgaWYgKCFpczhCaXQpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBpZiAo
aXM4Qml0KQotICAgICAgICByZXR1cm4gZGVjb2RlU3RyaW5nVGV4dDxMQ2hhcj4oZGVjb2Rlciwg
bGVuZ3RoLCByZXN1bHQpOwotICAgIHJldHVybiBkZWNvZGVTdHJpbmdUZXh0PFVDaGFyPihkZWNv
ZGVyLCBsZW5ndGgsIHJlc3VsdCk7CisgICAgaWYgKCppczhCaXQpCisgICAgICAgIHJldHVybiBk
ZWNvZGVTdHJpbmdUZXh0PExDaGFyPihkZWNvZGVyLCAqbGVuZ3RoKTsKKyAgICByZXR1cm4gZGVj
b2RlU3RyaW5nVGV4dDxVQ2hhcj4oZGVjb2RlciwgKmxlbmd0aCk7CiB9CiAKIHZvaWQgQ29kZXI8
U0hBMTo6RGlnZXN0Pjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFNIQTE6OkRpZ2Vz
dCYgZGlnZXN0KQpAQCAtMTQ3LDkgKzE0NiwxMiBAQAogICAgIGVuY29kZXIuZW5jb2RlRml4ZWRM
ZW5ndGhEYXRhKGRpZ2VzdC5kYXRhKCksIHNpemVvZihkaWdlc3QpKTsKIH0KIAotYm9vbCBDb2Rl
cjxTSEExOjpEaWdlc3Q+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgU0hBMTo6RGlnZXN0JiBk
aWdlc3QpCitPcHRpb25hbDxTSEExOjpEaWdlc3Q+IENvZGVyPFNIQTE6OkRpZ2VzdD46OmRlY29k
ZShEZWNvZGVyJiBkZWNvZGVyKQogewotICAgIHJldHVybiBkZWNvZGVyLmRlY29kZUZpeGVkTGVu
Z3RoRGF0YShkaWdlc3QuZGF0YSgpLCBzaXplb2YoZGlnZXN0KSk7CisgICAgU0hBMTo6RGlnZXN0
IHRtcDsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHRtcC5kYXRhKCks
IHNpemVvZih0bXApKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4g
V1RGTW92ZSh0bXApOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9Q
ZXJzaXN0ZW50Q29kZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvcGVyc2lzdGVu
Y2UvUGVyc2lzdGVudENvZGVycy5oCShyZXZpc2lvbiAyNTYwODEpCisrKyBTb3VyY2UvV1RGL3d0
Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50Q29kZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDE5
ICs0NSwxOSBAQAogICAgICAgICBlbmNvZGVyIDw8IHBhaXIuZmlyc3QgPDwgcGFpci5zZWNvbmQ7
CiAgICAgfQogCi0gICAgc3RhdGljIGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIHN0ZDo6
cGFpcjxULCBVPiYgcGFpcikKKyAgICBzdGF0aWMgT3B0aW9uYWw8c3RkOjpwYWlyPFQsIFU+PiBk
ZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKICAgICB7Ci0gICAgICAgIFQgZmlyc3Q7Ci0gICAgICAg
IGlmICghZGVjb2Rlci5kZWNvZGUoZmlyc3QpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICBPcHRpb25hbDxUPiBmaXJzdDsKKyAgICAgICAgZGVjb2RlciA+PiBmaXJzdDsKKyAg
ICAgICAgaWYgKCFmaXJzdCkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAg
ICAgICAgVSBzZWNvbmQ7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoc2Vjb25kKSkKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBwYWlyLmZpcnN0ID0gZmlyc3Q7Ci0g
ICAgICAgIHBhaXIuc2Vjb25kID0gc2Vjb25kOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgT3B0aW9uYWw8VT4gc2Vjb25kOworICAgICAgICBkZWNvZGVyID4+IHNlY29uZDsKKyAgICAg
ICAgaWYgKCFzZWNvbmQpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAg
ICAKKyAgICAgICAgcmV0dXJuIHt7IFdURk1vdmUoKmZpcnN0KSwgV1RGTW92ZSgqc2Vjb25kKSB9
fTsKICAgICB9CiB9OwogCkBAIC03MywyMyArNzMsMjIgQEAKICAgICAgICAgZW5jb2RlciA8PCBv
cHRpb25hbC52YWx1ZSgpOwogICAgIH0KICAgICAKLSAgICBzdGF0aWMgYm9vbCBkZWNvZGUoRGVj
b2RlciYgZGVjb2RlciwgT3B0aW9uYWw8VD4mIG9wdGlvbmFsKQorICAgIHN0YXRpYyBPcHRpb25h
bDxPcHRpb25hbDxUPj4gZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgewotICAgICAgICBi
b29sIGlzRW5nYWdlZDsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShpc0VuZ2FnZWQpKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBPcHRpb25hbDxib29sPiBpc0VuZ2Fn
ZWQ7CisgICAgICAgIGRlY29kZXIgPj4gaXNFbmdhZ2VkOworICAgICAgICBpZiAoIWlzRW5nYWdl
ZCkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICAgICAgaWYgKCEqaXNF
bmdhZ2VkKQorICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsPE9wdGlvbmFsPFQ+PiB7IE9wdGlv
bmFsPFQ+eyBXVEY6Om51bGxvcHQgfSB9OworCisgICAgICAgIE9wdGlvbmFsPFQ+IHZhbHVlOwor
ICAgICAgICBkZWNvZGVyID4+IHZhbHVlOworICAgICAgICBpZiAoIXZhbHVlKQorICAgICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAgICAgCi0gICAgICAgIGlmICghaXNFbmdhZ2Vk
KSB7Ci0gICAgICAgICAgICBvcHRpb25hbCA9IFdURjo6bnVsbG9wdDsKLSAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBUIHZhbHVlOwotICAgICAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgCi0gICAgICAgIG9wdGlvbmFsID0gV1RGTW92ZSh2YWx1ZSk7Ci0gICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICByZXR1cm4gT3B0aW9uYWw8T3B0aW9uYWw8VD4+IHsgT3B0aW9u
YWw8VD57IFdURk1vdmUodmFsdWUpIH0gfTsKICAgICB9CiB9OwogCkBAIC05OSwxOSArOTgsMTkg
QEAKICAgICAgICAgZW5jb2RlciA8PCBwYWlyLmtleSA8PCBwYWlyLnZhbHVlOwogICAgIH0KIAot
ICAgIHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBXVEY6OktleVZhbHVlUGFp
cjxLZXlUeXBlLCBWYWx1ZVR5cGU+JiBwYWlyKQorICAgIHN0YXRpYyBPcHRpb25hbDxXVEY6Oktl
eVZhbHVlUGFpcjxLZXlUeXBlLCBWYWx1ZVR5cGU+PiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikK
ICAgICB7Ci0gICAgICAgIEtleVR5cGUga2V5OwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KGtleSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIE9wdGlvbmFsPEtleVR5
cGU+IGtleTsKKyAgICAgICAgZGVjb2RlciA+PiBrZXk7CisgICAgICAgIGlmICgha2V5KQorICAg
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgICAgICBWYWx1ZVR5cGUgdmFsdWU7
Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICBPcHRpb25hbDxWYWx1ZVR5cGU+IHZhbHVlOworICAgICAgICBkZWNv
ZGVyID4+IHZhbHVlOworICAgICAgICBpZiAoIXZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKIAotICAgICAgICBwYWlyLmtleSA9IGtleTsKLSAgICAgICAgcGFpci52YWx1
ZSA9IHZhbHVlOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIHt7IFdURk1v
dmUoa2V5KSwgV1RGTW92ZSh2YWx1ZSkgfX07CiAgICAgfQogfTsKIApAQCAtMTI1LDI0ICsxMjQs
MjQgQEAKICAgICAgICAgICAgIGVuY29kZXIgPDwgdmVjdG9yW2ldOwogICAgIH0KIAotICAgIHN0
YXRpYyBib29sIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNp
dHk+JiB2ZWN0b3IpCisgICAgc3RhdGljIE9wdGlvbmFsPFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0
eT4+IGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIHsKLSAgICAgICAgdWludDY0X3Qgc2l6
ZTsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShzaXplKSkKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgT3B0aW9uYWw8dWludDY0X3Q+IHNpemU7CisgICAgICAgIGRlY29k
ZXIgPj4gc2l6ZTsKKyAgICAgICAgaWYgKCFzaXplKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKIAogICAgICAgICBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+IHRtcDsKLSAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgICAgIFQgZWxl
bWVudDsKLSAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoZWxlbWVudCkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICB0bXAuYXBw
ZW5kKFdURk1vdmUoZWxlbWVudCkpOworICAgICAgICB0bXAucmVzZXJ2ZUluaXRpYWxDYXBhY2l0
eSgqc2l6ZSk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgKnNpemU7ICsraSkgewor
ICAgICAgICAgICAgT3B0aW9uYWw8VD4gZWxlbWVudDsKKyAgICAgICAgICAgIGRlY29kZXIgPj4g
ZWxlbWVudDsKKyAgICAgICAgICAgIGlmICghZWxlbWVudCkKKyAgICAgICAgICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OworICAgICAgICAgICAgdG1wLnVuY2hlY2tlZEFwcGVuZChXVEZNb3Zl
KCplbGVtZW50KSk7CiAgICAgICAgIH0KIAotICAgICAgICB0bXAuc2hyaW5rVG9GaXQoKTsKLSAg
ICAgICAgdmVjdG9yLnN3YXAodG1wKTsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJl
dHVybiBXVEZNb3ZlKHRtcCk7CiAgICAgfQogfTsKIApAQCAtMTUzLDI3ICsxNTIsMjcgQEAKICAg
ICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDxjb25z
dCB1aW50OF90Kj4odmVjdG9yLmRhdGEoKSksIHZlY3Rvci5zaXplKCkgKiBzaXplb2YoVCkpOwog
ICAgIH0KICAgICAKLSAgICBzdGF0aWMgYm9vbCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgVmVj
dG9yPFQsIGlubGluZUNhcGFjaXR5PiYgdmVjdG9yKQorICAgIHN0YXRpYyBPcHRpb25hbDxWZWN0
b3I8VCwgaW5saW5lQ2FwYWNpdHk+PiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKICAgICB7Ci0g
ICAgICAgIHVpbnQ2NF90IGRlY29kZWRTaXplOwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KGRlY29kZWRTaXplKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgT3B0aW9u
YWw8dWludDY0X3Q+IGRlY29kZWRTaXplOworICAgICAgICBkZWNvZGVyID4+IGRlY29kZWRTaXpl
OworICAgICAgICBpZiAoIWRlY29kZWRTaXplKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKKyAgICAgICAgaWYgKCFpc0luQm91bmRzPHNpemVfdD4oKmRlY29kZWRTaXplKSkKKyAg
ICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICAgICAgYXV0byBzaXplID0gc2Fm
ZUNhc3Q8c2l6ZV90PihkZWNvZGVkU2l6ZSk7CisgICAgICAgIGF1dG8gc2l6ZSA9IHN0YXRpY19j
YXN0PHNpemVfdD4oKmRlY29kZWRTaXplKTsKIAogICAgICAgICAvLyBTaW5jZSB3ZSBrbm93IHRo
ZSB0b3RhbCBzaXplIG9mIHRoZSBlbGVtZW50cywgd2UgY2FuIGFsbG9jYXRlIHRoZSB2ZWN0b3Ig
aW4KICAgICAgICAgLy8gb25lIGZlbGwgc3dvb3AuIEJlZm9yZSBhbGxvY2F0aW5nIHdlIG11c3Qg
aG93ZXZlciBtYWtlIHN1cmUgdGhhdCB0aGUgZGVjb2RlciBidWZmZXIKICAgICAgICAgLy8gaXMg
YmlnIGVub3VnaC4KICAgICAgICAgaWYgKCFkZWNvZGVyLmJ1ZmZlcklzTGFyZ2VFbm91Z2hUb0Nv
bnRhaW48VD4oc2l6ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgICAgIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT4g
dGVtcDsKLSAgICAgICAgdGVtcC5ncm93KHNpemUpOwotCi0gICAgICAgIGRlY29kZXIuZGVjb2Rl
Rml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KHRlbXAuZGF0YSgpKSwg
c2l6ZSAqIHNpemVvZihUKSk7Ci0KLSAgICAgICAgdmVjdG9yLnN3YXAodGVtcCk7Ci0gICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+IHZlY3RvcjsK
KyAgICAgICAgdmVjdG9yLmdyb3coc2l6ZSk7CisgICAgICAgIGRlY29kZXIuZGVjb2RlRml4ZWRM
ZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KHZlY3Rvci5kYXRhKCkpLCBzaXpl
ICogc2l6ZW9mKFQpKTsKKyAgICAgICAgcmV0dXJuIFdURk1vdmUodmVjdG9yKTsKICAgICB9CiB9
OwogCkBAIC0xODksMzAgKzE4OCwzOCBAQAogICAgICAgICAgICAgZW5jb2RlciA8PCAqaXQ7CiAg
ICAgfQogCi0gICAgc3RhdGljIGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIEhhc2hNYXBU
eXBlJiBoYXNoTWFwKQorICAgIHN0YXRpYyBPcHRpb25hbDxIYXNoTWFwVHlwZT4gZGVjb2RlKERl
Y29kZXImIGRlY29kZXIpCiAgICAgewotICAgICAgICB1aW50NjRfdCBoYXNoTWFwU2l6ZTsKLSAg
ICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShoYXNoTWFwU2l6ZSkpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIE9wdGlvbmFsPHVpbnQ2NF90PiBoYXNoTWFwU2l6ZTsKKyAgICAg
ICAgZGVjb2RlciA+PiBoYXNoTWFwU2l6ZTsKKyAgICAgICAgaWYgKCFoYXNoTWFwU2l6ZSkKKyAg
ICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIGlmICghaXNJbkJvdW5kczx1
bnNpZ25lZD4oKmhhc2hNYXBTaXplKSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CiAKICAgICAgICAgSGFzaE1hcFR5cGUgdGVtcEhhc2hNYXA7Ci0gICAgICAgIHRlbXBIYXNoTWFw
LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGhhc2hNYXBTaXpl
KSk7CisgICAgICAgIHRlbXBIYXNoTWFwLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KCpoYXNoTWFwU2l6ZSkpOwogICAgICAgICBmb3IgKHVpbnQ2NF90IGkgPSAw
OyBpIDwgaGFzaE1hcFNpemU7ICsraSkgewotICAgICAgICAgICAgS2V5QXJnIGtleTsKLSAgICAg
ICAgICAgIE1hcHBlZEFyZyB2YWx1ZTsKLSAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUo
a2V5KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKHZhbHVlKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICBPcHRpb25hbDxLZXlBcmc+IGtleTsKKyAgICAgICAgICAgIGRlY29kZXIgPj4ga2V5
OworICAgICAgICAgICAgaWYgKCFrZXkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKIAotICAgICAgICAgICAgaWYgKCF0ZW1wSGFzaE1hcC5hZGQoa2V5LCB2YWx1ZSkuaXNO
ZXdFbnRyeSkgeworICAgICAgICAgICAgT3B0aW9uYWw8TWFwcGVkQXJnPiB2YWx1ZTsKKyAgICAg
ICAgICAgIGRlY29kZXIgPj4gdmFsdWU7CisgICAgICAgICAgICBpZiAoIXZhbHVlKQorICAgICAg
ICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICAgICAgICAgIGlmICghSGFzaE1h
cFR5cGU6OmlzVmFsaWRLZXkoKmtleSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCF0ZW1wSGFzaE1hcC5hZGQoV1RG
TW92ZSgqa2V5KSwgV1RGTW92ZSgqdmFsdWUpKS5pc05ld0VudHJ5KSB7CiAgICAgICAgICAgICAg
ICAgLy8gVGhlIGhhc2ggbWFwIGFscmVhZHkgaGFzIHRoZSBzcGVjaWZpZWQga2V5LCBiYWlsLgot
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgaGFzaE1hcC5z
d2FwKHRlbXBIYXNoTWFwKTsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiBX
VEZNb3ZlKHRlbXBIYXNoTWFwKTsKICAgICB9CiB9OwogCkBAIC0yMjYsMjYgKzIzMywyNSBAQAog
ICAgICAgICAgICAgZW5jb2RlciA8PCAqaXQ7CiAgICAgfQogCi0gICAgc3RhdGljIGJvb2wgZGVj
b2RlKERlY29kZXImIGRlY29kZXIsIEhhc2hTZXRUeXBlJiBoYXNoU2V0KQorICAgIHN0YXRpYyBP
cHRpb25hbDxIYXNoU2V0VHlwZT4gZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgewotICAg
ICAgICB1aW50NjRfdCBoYXNoU2V0U2l6ZTsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZSho
YXNoU2V0U2l6ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIE9wdGlvbmFs
PHVpbnQ2NF90PiBoYXNoU2V0U2l6ZTsKKyAgICAgICAgZGVjb2RlciA+PiBoYXNoU2V0U2l6ZTsK
KyAgICAgICAgaWYgKCFoYXNoU2V0U2l6ZSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CiAKLSAgICAgICAgSGFzaFNldFR5cGUgdGVtcEhhc2hTZXQ7Ci0gICAgICAgIGZvciAodWlu
dDY0X3QgaSA9IDA7IGkgPCBoYXNoU2V0U2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICBLZXlBcmcg
a2V5OwotICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShrZXkpKQotICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgSGFzaFNldFR5cGUgaGFzaFNldDsKKyAgICAgICAg
Zm9yICh1aW50NjRfdCBpID0gMDsgaSA8ICpoYXNoU2V0U2l6ZTsgKytpKSB7CisgICAgICAgICAg
ICBPcHRpb25hbDxLZXlBcmc+IGtleTsKKyAgICAgICAgICAgIGRlY29kZXIgPj4ga2V5OworICAg
ICAgICAgICAgaWYgKCFrZXkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
IAotICAgICAgICAgICAgaWYgKCF0ZW1wSGFzaFNldC5hZGQoa2V5KS5pc05ld0VudHJ5KSB7Ci0g
ICAgICAgICAgICAgICAgLy8gVGhlIGhhc2ggbWFwIGFscmVhZHkgaGFzIHRoZSBzcGVjaWZpZWQg
a2V5LCBiYWlsLgotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGlmICghSGFzaFNldFR5cGU6OmlzVmFsaWRWYWx1ZSgqa2V5KSB8fCAhaGFz
aFNldC5hZGQoa2V5KS5pc05ld0VudHJ5KQorICAgICAgICAgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CiAgICAgICAgIH0KIAotICAgICAgICBoYXNoU2V0LnN3YXAodGVtcEhhc2hTZXQpOwot
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIFdURk1vdmUoaGFzaFNldCk7CiAg
ICAgfQogfTsKIApAQCAtMjU1LDE0ICsyNjEsMTMgQEAKICAgICAgICAgZW5jb2RlciA8PCBzZWNv
bmRzLnZhbHVlKCk7CiAgICAgfQogCi0gICAgc3RhdGljIGJvb2wgZGVjb2RlKERlY29kZXImIGRl
Y29kZXIsIFNlY29uZHMmIHJlc3VsdCkKKyAgICBzdGF0aWMgT3B0aW9uYWw8U2Vjb25kcz4gZGVj
b2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgewotICAgICAgICBkb3VibGUgdmFsdWU7Ci0gICAg
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgICAgIHJlc3VsdCA9IFNlY29uZHModmFsdWUpOwotICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgT3B0aW9uYWw8ZG91YmxlPiB2YWx1ZTsKKyAgICAgICAgZGVjb2RlciA+PiB2
YWx1ZTsKKyAgICAgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CisgICAgICAgIHJldHVybiBTZWNvbmRzKCp2YWx1ZSk7CiAgICAgfQogfTsKIApAQCAtMjcy
LDM1ICsyNzcsMzQgQEAKICAgICAgICAgZW5jb2RlciA8PCB0aW1lLnNlY29uZHNTaW5jZUVwb2No
KCkudmFsdWUoKTsKICAgICB9CiAKLSAgICBzdGF0aWMgYm9vbCBkZWNvZGUoRGVjb2RlciYgZGVj
b2RlciwgV2FsbFRpbWUmIHJlc3VsdCkKKyAgICBzdGF0aWMgT3B0aW9uYWw8V2FsbFRpbWU+IGRl
Y29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIHsKLSAgICAgICAgZG91YmxlIHZhbHVlOwotICAg
ICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgICAgICByZXN1bHQgPSBXYWxsVGltZTo6ZnJvbVJhd1NlY29uZHModmFsdWUpOwot
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgT3B0aW9uYWw8ZG91YmxlPiB2YWx1ZTsKKyAg
ICAgICAgZGVjb2RlciA+PiB2YWx1ZTsKKyAgICAgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIHJldHVybiBXYWxsVGltZTo6ZnJvbVJhd1Nl
Y29uZHMoKnZhbHVlKTsKICAgICB9CiB9OwogCiB0ZW1wbGF0ZTw+IHN0cnVjdCBDb2RlcjxBdG9t
U3RyaW5nPiB7CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGVuY29kZShFbmNv
ZGVyJiwgY29uc3QgQXRvbVN0cmluZyYpOwotICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMg
Ym9vbCBkZWNvZGUoRGVjb2RlciYsIEF0b21TdHJpbmcmKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZB
VEUgc3RhdGljIE9wdGlvbmFsPEF0b21TdHJpbmc+IGRlY29kZShEZWNvZGVyJik7CiB9OwogCiB0
ZW1wbGF0ZTw+IHN0cnVjdCBDb2RlcjxDU3RyaW5nPiB7CiAgICAgV1RGX0VYUE9SVF9QUklWQVRF
IHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiwgY29uc3QgQ1N0cmluZyYpOwotICAgIFdURl9F
WFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBkZWNvZGUoRGVjb2RlciYsIENTdHJpbmcmKTsKKyAg
ICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIE9wdGlvbmFsPENTdHJpbmc+IGRlY29kZShEZWNv
ZGVyJik7CiB9OwogCiB0ZW1wbGF0ZTw+IHN0cnVjdCBDb2RlcjxTdHJpbmc+IHsKICAgICBXVEZf
RVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25zdCBTdHJpbmcm
KTsKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZGVjb2RlKERlY29kZXImLCBT
dHJpbmcmKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIE9wdGlvbmFsPFN0cmluZz4g
ZGVjb2RlKERlY29kZXImKTsKIH07CiAKIHRlbXBsYXRlPD4gc3RydWN0IENvZGVyPFNIQTE6OkRp
Z2VzdD4gewogICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2Rl
ciYsIGNvbnN0IFNIQTE6OkRpZ2VzdCYpOwotICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMg
Ym9vbCBkZWNvZGUoRGVjb2RlciYsIFNIQTE6OkRpZ2VzdCYpOworICAgIFdURl9FWFBPUlRfUFJJ
VkFURSBzdGF0aWMgT3B0aW9uYWw8U0hBMTo6RGlnZXN0PiBkZWNvZGUoRGVjb2RlciYpOwogfTsK
IAogfQpJbmRleDogU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudERlY29kZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRE
ZWNvZGVyLmNwcAkocmV2aXNpb24gMjU2MDgxKQorKysgU291cmNlL1dURi93dGYvcGVyc2lzdGVu
Y2UvUGVyc2lzdGVudERlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw2NSArNTksNjcg
QEAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KLWJvb2wg
RGVjb2Rlcjo6ZGVjb2RlTnVtYmVyKFR5cGUmIHZhbHVlKQordGVtcGxhdGU8dHlwZW5hbWUgVD4K
K0RlY29kZXImIERlY29kZXI6OmRlY29kZU51bWJlcihPcHRpb25hbDxUPiYgb3B0aW9uYWwpCiB7
Ci0gICAgaWYgKCFidWZmZXJJc0xhcmdlRW5vdWdoVG9Db250YWluKHNpemVvZih2YWx1ZSkpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFidWZmZXJJc0xhcmdlRW5vdWdoVG9Db250
YWluKHNpemVvZihUKSkpCisgICAgICAgIHJldHVybiAqdGhpczsKIAotICAgIG1lbWNweSgmdmFs
dWUsIG1fYnVmZmVyUG9zaXRpb24sIHNpemVvZih2YWx1ZSkpOwotICAgIG1fYnVmZmVyUG9zaXRp
b24gKz0gc2l6ZW9mKFR5cGUpOworICAgIFQgdmFsdWU7CisgICAgbWVtY3B5KCZ2YWx1ZSwgbV9i
dWZmZXJQb3NpdGlvbiwgc2l6ZW9mKFQpKTsKKyAgICBtX2J1ZmZlclBvc2l0aW9uICs9IHNpemVv
ZihUKTsKIAogICAgIEVuY29kZXI6OnVwZGF0ZUNoZWNrc3VtRm9yTnVtYmVyKG1fc2hhMSwgdmFs
dWUpOwotICAgIHJldHVybiB0cnVlOworICAgIG9wdGlvbmFsID0gdmFsdWU7CisgICAgcmV0dXJu
ICp0aGlzOwogfQogCi1ib29sIERlY29kZXI6OmRlY29kZShib29sJiByZXN1bHQpCitEZWNvZGVy
JiBEZWNvZGVyOjpvcGVyYXRvcj4+KE9wdGlvbmFsPGJvb2w+JiByZXN1bHQpCiB7CiAgICAgcmV0
dXJuIGRlY29kZU51bWJlcihyZXN1bHQpOwogfQogCi1ib29sIERlY29kZXI6OmRlY29kZSh1aW50
OF90JiByZXN1bHQpCitEZWNvZGVyJiBEZWNvZGVyOjpvcGVyYXRvcj4+KE9wdGlvbmFsPHVpbnQ4
X3Q+JiByZXN1bHQpCiB7CiAgICAgcmV0dXJuIGRlY29kZU51bWJlcihyZXN1bHQpOwogfQogCi1i
b29sIERlY29kZXI6OmRlY29kZSh1aW50MTZfdCYgcmVzdWx0KQorRGVjb2RlciYgRGVjb2Rlcjo6
b3BlcmF0b3I+PihPcHRpb25hbDx1aW50MTZfdD4mIHJlc3VsdCkKIHsKICAgICByZXR1cm4gZGVj
b2RlTnVtYmVyKHJlc3VsdCk7CiB9CiAKLWJvb2wgRGVjb2Rlcjo6ZGVjb2RlKGludDE2X3QmIHJl
c3VsdCkKK0RlY29kZXImIERlY29kZXI6Om9wZXJhdG9yPj4oT3B0aW9uYWw8aW50MTZfdD4mIHJl
c3VsdCkKIHsKICAgICByZXR1cm4gZGVjb2RlTnVtYmVyKHJlc3VsdCk7CiB9CiAKLWJvb2wgRGVj
b2Rlcjo6ZGVjb2RlKHVpbnQzMl90JiByZXN1bHQpCitEZWNvZGVyJiBEZWNvZGVyOjpvcGVyYXRv
cj4+KE9wdGlvbmFsPHVpbnQzMl90PiYgcmVzdWx0KQogewogICAgIHJldHVybiBkZWNvZGVOdW1i
ZXIocmVzdWx0KTsKIH0KIAotYm9vbCBEZWNvZGVyOjpkZWNvZGUodWludDY0X3QmIHJlc3VsdCkK
K0RlY29kZXImIERlY29kZXI6Om9wZXJhdG9yPj4oT3B0aW9uYWw8dWludDY0X3Q+JiByZXN1bHQp
CiB7CiAgICAgcmV0dXJuIGRlY29kZU51bWJlcihyZXN1bHQpOwogfQogCi1ib29sIERlY29kZXI6
OmRlY29kZShpbnQzMl90JiByZXN1bHQpCitEZWNvZGVyJiBEZWNvZGVyOjpvcGVyYXRvcj4+KE9w
dGlvbmFsPGludDMyX3Q+JiByZXN1bHQpCiB7CiAgICAgcmV0dXJuIGRlY29kZU51bWJlcihyZXN1
bHQpOwogfQogCi1ib29sIERlY29kZXI6OmRlY29kZShpbnQ2NF90JiByZXN1bHQpCitEZWNvZGVy
JiBEZWNvZGVyOjpvcGVyYXRvcj4+KE9wdGlvbmFsPGludDY0X3Q+JiByZXN1bHQpCiB7CiAgICAg
cmV0dXJuIGRlY29kZU51bWJlcihyZXN1bHQpOwogfQogCi1ib29sIERlY29kZXI6OmRlY29kZShm
bG9hdCYgcmVzdWx0KQorRGVjb2RlciYgRGVjb2Rlcjo6b3BlcmF0b3I+PihPcHRpb25hbDxmbG9h
dD4mIHJlc3VsdCkKIHsKICAgICByZXR1cm4gZGVjb2RlTnVtYmVyKHJlc3VsdCk7CiB9CiAKLWJv
b2wgRGVjb2Rlcjo6ZGVjb2RlKGRvdWJsZSYgcmVzdWx0KQorRGVjb2RlciYgRGVjb2Rlcjo6b3Bl
cmF0b3I+PihPcHRpb25hbDxkb3VibGU+JiByZXN1bHQpCiB7CiAgICAgcmV0dXJuIGRlY29kZU51
bWJlcihyZXN1bHQpOwogfQpJbmRleDogU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lz
dGVudERlY29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9Q
ZXJzaXN0ZW50RGVjb2Rlci5oCShyZXZpc2lvbiAyNTYwODEpCisrKyBTb3VyY2UvV1RGL3d0Zi9w
ZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RGVjb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw0NCAr
NDUsMzQgQEAKIAogICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29sIGRlY29kZUZpeGVkTGVuZ3Ro
RGF0YSh1aW50OF90Kiwgc2l6ZV90KTsKIAotICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29sIGRl
Y29kZShib29sJik7Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgZGVjb2RlKHVpbnQ4X3Qm
KTsKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBkZWNvZGUodWludDE2X3QmKTsKLSAgICBX
VEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBkZWNvZGUodWludDMyX3QmKTsKLSAgICBXVEZfRVhQT1JU
X1BSSVZBVEUgYm9vbCBkZWNvZGUodWludDY0X3QmKTsKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUg
Ym9vbCBkZWNvZGUoaW50MTZfdCYpOwotICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29sIGRlY29k
ZShpbnQzMl90Jik7Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgZGVjb2RlKGludDY0X3Qm
KTsKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBkZWNvZGUoZmxvYXQmKTsKLSAgICBXVEZf
RVhQT1JUX1BSSVZBVEUgYm9vbCBkZWNvZGUoZG91YmxlJik7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBFPiBhdXRvIGRlY29kZShFJiBlKSAtPiBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfZW51
bTxFPjo6dmFsdWUsIGJvb2w+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRSwgc3RkOjplbmFibGVf
aWZfdDxzdGQ6OmlzX2VudW08RT46OnZhbHVlPiogPSBudWxscHRyPgorICAgIERlY29kZXImIG9w
ZXJhdG9yPj4oT3B0aW9uYWw8RT4mIGUpCiAgICAgewotICAgICAgICB1aW50NjRfdCB2YWx1ZTsK
LSAgICAgICAgaWYgKCFkZWNvZGUodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICBpZiAoIWlzVmFsaWRFbnVtPEU+KHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgICAgICBlID0gc3RhdGljX2Nhc3Q8RT4odmFsdWUpOwotICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgT3B0aW9uYWw8dWludDY0X3Q+IHZhbHVlOworICAgICAgICAqdGhp
cyA+PiB2YWx1ZTsKKyAgICAgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgICAgIHJldHVybiAqdGhp
czsKKyAgICAgICAgaWYgKCFpc1ZhbGlkRW51bTxFPihzdGF0aWNfY2FzdDxFPigqdmFsdWUpKSkK
KyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgZSA9IHN0YXRpY19jYXN0PEU+KCp2
YWx1ZSk7CisgICAgICAgIHJldHVybiAqdGhpczsKICAgICB9CiAKLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBib29sIGRlY29kZUVudW0oVCYgcmVzdWx0KQotICAgIHsKLSAgICAgICAgc3RhdGlj
X2Fzc2VydChzaXplb2YoVCkgPD0gOCwgIkVudW0gdHlwZSBUIG11c3Qgbm90IGJlIGxhcmdlciB0
aGFuIDY0IGJpdHMhIik7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIERlY29kZXImIG9wZXJhdG9y
Pj4oT3B0aW9uYWw8Ym9vbD4mKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgRGVjb2RlciYgb3Bl
cmF0b3I+PihPcHRpb25hbDx1aW50OF90PiYpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBEZWNv
ZGVyJiBvcGVyYXRvcj4+KE9wdGlvbmFsPHVpbnQxNl90PiYpOworICAgIFdURl9FWFBPUlRfUFJJ
VkFURSBEZWNvZGVyJiBvcGVyYXRvcj4+KE9wdGlvbmFsPHVpbnQzMl90PiYpOworICAgIFdURl9F
WFBPUlRfUFJJVkFURSBEZWNvZGVyJiBvcGVyYXRvcj4+KE9wdGlvbmFsPHVpbnQ2NF90PiYpOwor
ICAgIFdURl9FWFBPUlRfUFJJVkFURSBEZWNvZGVyJiBvcGVyYXRvcj4+KE9wdGlvbmFsPGludDE2
X3Q+Jik7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIERlY29kZXImIG9wZXJhdG9yPj4oT3B0aW9u
YWw8aW50MzJfdD4mKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgRGVjb2RlciYgb3BlcmF0b3I+
PihPcHRpb25hbDxpbnQ2NF90PiYpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBEZWNvZGVyJiBv
cGVyYXRvcj4+KE9wdGlvbmFsPGZsb2F0PiYpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBEZWNv
ZGVyJiBvcGVyYXRvcj4+KE9wdGlvbmFsPGRvdWJsZT4mKTsKIAotICAgICAgICB1aW50NjRfdCB2
YWx1ZTsKLSAgICAgICAgaWYgKCFkZWNvZGUodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICAKLSAgICAgICAgcmVzdWx0ID0gc3RhdGljX2Nhc3Q8VD4odmFsdWUpOwot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBh
dXRvIGRlY29kZShUJiB0KSAtPiBzdGQ6OmVuYWJsZV9pZl90PCFzdGQ6OmlzX2VudW08VD46OnZh
bHVlLCBib29sPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHN0ZDo6ZW5hYmxlX2lmX3Q8IXN0
ZDo6aXNfZW51bTxUPjo6dmFsdWU+KiA9IG51bGxwdHI+CisgICAgRGVjb2RlciYgb3BlcmF0b3I+
PihPcHRpb25hbDxUPiYgdCkKICAgICB7Ci0gICAgICAgIHJldHVybiBDb2RlcjxUPjo6ZGVjb2Rl
KCp0aGlzLCB0KTsKKyAgICAgICAgcmV0dXJuICp0aGlzID4+IHQ7CiAgICAgfQogCiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVD4KQEAgLTEwMCw3ICs5MCw3IEBACiAKIHByaXZhdGU6CiAgICAgV1RG
X0VYUE9SVF9QUklWQVRFIGJvb2wgYnVmZmVySXNMYXJnZUVub3VnaFRvQ29udGFpbihzaXplX3Qp
IGNvbnN0OwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+IGJvb2wgZGVjb2RlTnVtYmVyKFR5
cGUmKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBEZWNvZGVyJiBkZWNvZGVOdW1iZXIoT3B0
aW9uYWw8VD4mKTsKIAogICAgIGNvbnN0IHVpbnQ4X3QqIG1fYnVmZmVyOwogICAgIGNvbnN0IHVp
bnQ4X3QqIG1fYnVmZmVyUG9zaXRpb247CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5j
ZS9QZXJzaXN0ZW50RW5jb2Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3BlcnNp
c3RlbmNlL1BlcnNpc3RlbnRFbmNvZGVyLmgJKHJldmlzaW9uIDI1NjA4MSkKKysrIFNvdXJjZS9X
VEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRFbmNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ1LDI5ICs0NSwxNyBAQAogICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGVuY29kZUNoZWNr
c3VtKCk7CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZW5jb2RlRml4ZWRMZW5ndGhEYXRh
KGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpOwogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRT4gYXV0
byBlbmNvZGUoRSB2YWx1ZSkgLT4gc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX2VudW08RT46OnZh
bHVlPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19l
bnVtPFQ+Ojp2YWx1ZT4qID0gbnVsbHB0cj4KKyAgICBFbmNvZGVyJiBvcGVyYXRvcjw8KFQmJiB0
KQogICAgIHsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoRSkgPD0gc2l6ZW9mKHVpbnQ2
NF90KSwgIkVudW0gdHlwZSBtdXN0IG5vdCBiZSBsYXJnZXIgdGhhbiA2NCBiaXRzLiIpOwotCi0g
ICAgICAgIEFTU0VSVChpc1ZhbGlkRW51bTxFPihzdGF0aWNfY2FzdDx1aW50NjRfdD4odmFsdWUp
KSk7Ci0gICAgICAgIGVuY29kZShzdGF0aWNfY2FzdDx1aW50NjRfdD4odmFsdWUpKTsKKyAgICAg
ICAgc3RhdGljX2Fzc2VydChzaXplb2YoVCkgPD0gc2l6ZW9mKHVpbnQ2NF90KSwgIkVudW0gdHlw
ZSBtdXN0IG5vdCBiZSBsYXJnZXIgdGhhbiA2NCBiaXRzLiIpOworICAgICAgICByZXR1cm4gKnRo
aXMgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHQpOwogICAgIH0KIAotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+IHZvaWQgZW5jb2RlRW51bShUIHQpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwg
c3RkOjplbmFibGVfaWZfdDwhc3RkOjppc19lbnVtPFQ+Ojp2YWx1ZT4qID0gbnVsbHB0cj4KKyAg
ICBFbmNvZGVyJiBvcGVyYXRvcjw8KFQmJiB0KQogICAgIHsKLSAgICAgICAgQ09NUElMRV9BU1NF
UlQoc2l6ZW9mKFQpIDw9IHNpemVvZih1aW50NjRfdCksIGVudW1fdHlwZV9tdXN0X25vdF9iZV9s
YXJnZXJfdGhhbl82NF9iaXRzKTsKLQotICAgICAgICBlbmNvZGUoc3RhdGljX2Nhc3Q8dWludDY0
X3Q+KHQpKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBhdXRvIGVuY29kZShj
b25zdCBUJiB0KSAtPiBzdGQ6OmVuYWJsZV9pZl90PCFzdGQ6OmlzX2VudW08VD46OnZhbHVlPgot
ICAgIHsKICAgICAgICAgQ29kZXI8VD46OmVuY29kZSgqdGhpcywgdCk7Ci0gICAgfQotCi0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4gRW5jb2RlciYgb3BlcmF0b3I8PChjb25zdCBUJiB0KQotICAg
IHsKLSAgICAgICAgZW5jb2RlKHQpOwogICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNTYyMDYpCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzMyBAQAorMjAyMC0wMi0xMCAgQWxleCBDaHJp
c3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIFBlcnNpc3RlbnRD
b2RlcnMgc2hvdWxkIHVzZSBtb2Rlcm4gZGVjb2Rpbmcgc3ludGF4CisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDc0OTcKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JGcm9u
dGVuZEhvc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRIb3N0Ojpz
aG93Q2VydGlmaWNhdGUpOgorICAgICAgICAqIGxvYWRlci9GZXRjaE9wdGlvbnMuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkZldGNoT3B0aW9uczo6ZGVjb2RlUGVyc2lzdGVudCk6CisgICAgICAgICog
cGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5UmVzcG9uc2VIZWFkZXJzLmg6CisgICAgICAg
IChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3lSZXNwb25zZUhlYWRlcnM6OmVuY29kZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3lSZXNwb25zZUhl
YWRlcnM6OmRlY29kZSk6CisgICAgICAgICogcGxhdGZvcm0vUGFzdGVib2FyZEN1c3RvbURhdGEu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZEN1c3RvbURhdGE6OmZyb21TaGFyZWRC
dWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VMb2FkUHJpb3JpdHku
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdEJhc2U6OmVuY29kZUJhc2UgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0QmFzZTo6ZGVjb2RlQmFzZSk6CisgICAg
ICAgICogcGxhdGZvcm0vbmV0d29yay9jZi9DZXJ0aWZpY2F0ZUluZm8uaDoKKyAgICAgICAgKFdU
Rjo6UGVyc2lzdGVuY2U6OmRlY29kZUNGRGF0YSk6CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNl
OjpkZWNvZGVTZWNUcnVzdFJlZik6CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpkZWNvZGVD
ZXJ0aWZpY2F0ZUNoYWluKToKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkNvZGVyPFdlYkNv
cmU6OkNlcnRpZmljYXRlSW5mbz46OmVuY29kZSk6CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNl
OjpDb2RlcjxXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8+OjpkZWNvZGUpOgorICAgICAgICAqIHdv
cmtlcnMvc2VydmljZS9zZXJ2ZXIvUmVnaXN0cmF0aW9uRGF0YWJhc2UuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVnaXN0cmF0aW9uRGF0YWJhc2U6OmRvUHVzaENoYW5nZXMpOgorICAgICAgICAo
V2ViQ29yZTo6UmVnaXN0cmF0aW9uRGF0YWJhc2U6OmltcG9ydFJlY29yZHMpOgorCiAyMDIwLTAy
LTEwICBKaWV3ZW4gVGFuICA8amlld2VuX3RhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW1dlYkF1
dGhuXSBNZXJnZSBzb21lIG9mIHRoZSBDVEFQIHJlc3BvbnNlIGRlY29kZXIncyBjb2RlCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0
LmNwcAkocmV2aXNpb24gMjU2MDgxKQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckZyb250ZW5kSG9zdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxNSwxNSArNTE1LDE2IEBA
CiAgICAgaWYgKCFiYXNlNjREZWNvZGUoc2VyaWFsaXplZENlcnRpZmljYXRlLCBkYXRhKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgQ2VydGlmaWNhdGVJbmZvIGNlcnRpZmljYXRlSW5m
bzsKICAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIoZGF0YS5kYXRhKCksIGRh
dGEuc2l6ZSgpKTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGNlcnRpZmljYXRlSW5mbykpCisg
ICAgT3B0aW9uYWw8Q2VydGlmaWNhdGVJbmZvPiBjZXJ0aWZpY2F0ZUluZm87CisgICAgZGVjb2Rl
ciA+PiBjZXJ0aWZpY2F0ZUluZm87CisgICAgaWYgKCFjZXJ0aWZpY2F0ZUluZm8pCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIGlmIChjZXJ0aWZpY2F0ZUluZm8uaXNFbXB0eSgpKQorICAg
IGlmIChjZXJ0aWZpY2F0ZUluZm8tPmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgbV9jbGllbnQtPnNob3dDZXJ0aWZpY2F0ZShjZXJ0aWZpY2F0ZUluZm8pOworICAgIG1f
Y2xpZW50LT5zaG93Q2VydGlmaWNhdGUoKmNlcnRpZmljYXRlSW5mbyk7CiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9GZXRjaE9wdGlvbnMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRmV0Y2hPcHRpb25zLmgJKHJldmlzaW9u
IDI1NjA4MSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9GZXRjaE9wdGlvbnMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTgxLDQ2ICsxODEsNTQgQEAKIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4g
aW5saW5lIGJvb2wgRmV0Y2hPcHRpb25zOjpkZWNvZGVQZXJzaXN0ZW50KERlY29kZXImIGRlY29k
ZXIsIEZldGNoT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBGZXRjaE9wdGlvbnM6OkRlc3RpbmF0
aW9uIGRlc3RpbmF0aW9uOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoZGVzdGluYXRpb24pKQor
ICAgIE9wdGlvbmFsPEZldGNoT3B0aW9uczo6RGVzdGluYXRpb24+IGRlc3RpbmF0aW9uOworICAg
IGRlY29kZXIgPj4gZGVzdGluYXRpb247CisgICAgaWYgKCFkZXN0aW5hdGlvbikKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgRmV0Y2hPcHRpb25zOjpNb2RlIG1vZGU7Ci0gICAgaWYgKCFk
ZWNvZGVyLmRlY29kZShtb2RlKSkKKyAgICBPcHRpb25hbDxGZXRjaE9wdGlvbnM6Ok1vZGU+IG1v
ZGU7CisgICAgZGVjb2RlciA+PiBtb2RlOworICAgIGlmICghbW9kZSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgRmV0Y2hPcHRpb25zOjpDcmVkZW50aWFscyBjcmVkZW50aWFsczsKLSAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKGNyZWRlbnRpYWxzKSkKKyAgICBPcHRpb25hbDxGZXRjaE9w
dGlvbnM6OkNyZWRlbnRpYWxzPiBjcmVkZW50aWFsczsKKyAgICBkZWNvZGVyID4+IGNyZWRlbnRp
YWxzOworICAgIGlmICghY3JlZGVudGlhbHMpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IEZldGNoT3B0aW9uczo6Q2FjaGUgY2FjaGU7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShjYWNo
ZSkpCisgICAgT3B0aW9uYWw8RmV0Y2hPcHRpb25zOjpDYWNoZT4gY2FjaGU7CisgICAgZGVjb2Rl
ciA+PiBjYWNoZTsKKyAgICBpZiAoIWNhY2hlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICBGZXRjaE9wdGlvbnM6OlJlZGlyZWN0IHJlZGlyZWN0OwotICAgIGlmICghZGVjb2Rlci5kZWNv
ZGUocmVkaXJlY3QpKQorICAgIE9wdGlvbmFsPEZldGNoT3B0aW9uczo6UmVkaXJlY3Q+IHJlZGly
ZWN0OworICAgIGRlY29kZXIgPj4gcmVkaXJlY3Q7CisgICAgaWYgKCFyZWRpcmVjdCkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgUmVmZXJyZXJQb2xpY3kgcmVmZXJyZXJQb2xpY3k7Ci0g
ICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZWZlcnJlclBvbGljeSkpCisgICAgT3B0aW9uYWw8UmVm
ZXJyZXJQb2xpY3k+IHJlZmVycmVyUG9saWN5OworICAgIGRlY29kZXIgPj4gcmVmZXJyZXJQb2xp
Y3k7CisgICAgaWYgKCFyZWZlcnJlclBvbGljeSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgU3RyaW5nIGludGVncml0eTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGludGVncml0eSkp
CisgICAgT3B0aW9uYWw8U3RyaW5nPiBpbnRlZ3JpdHk7CisgICAgZGVjb2RlciA+PiBpbnRlZ3Jp
dHk7CisgICAgaWYgKCFpbnRlZ3JpdHkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGJv
b2wga2VlcEFsaXZlOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoa2VlcEFsaXZlKSkKKyAgICBP
cHRpb25hbDxib29sPiBrZWVwQWxpdmU7CisgICAgZGVjb2RlciA+PiBrZWVwQWxpdmU7CisgICAg
aWYgKCFrZWVwQWxpdmUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIG9wdGlvbnMuZGVz
dGluYXRpb24gPSBkZXN0aW5hdGlvbjsKLSAgICBvcHRpb25zLm1vZGUgPSBtb2RlOwotICAgIG9w
dGlvbnMuY3JlZGVudGlhbHMgPSBjcmVkZW50aWFsczsKLSAgICBvcHRpb25zLmNhY2hlID0gY2Fj
aGU7Ci0gICAgb3B0aW9ucy5yZWRpcmVjdCA9IHJlZGlyZWN0OwotICAgIG9wdGlvbnMucmVmZXJy
ZXJQb2xpY3kgPSByZWZlcnJlclBvbGljeTsKLSAgICBvcHRpb25zLmludGVncml0eSA9IFdURk1v
dmUoaW50ZWdyaXR5KTsKLSAgICBvcHRpb25zLmtlZXBBbGl2ZSA9IGtlZXBBbGl2ZTsKKyAgICBv
cHRpb25zLmRlc3RpbmF0aW9uID0gKmRlc3RpbmF0aW9uOworICAgIG9wdGlvbnMubW9kZSA9ICpt
b2RlOworICAgIG9wdGlvbnMuY3JlZGVudGlhbHMgPSAqY3JlZGVudGlhbHM7CisgICAgb3B0aW9u
cy5jYWNoZSA9ICpjYWNoZTsKKyAgICBvcHRpb25zLnJlZGlyZWN0ID0gKnJlZGlyZWN0OworICAg
IG9wdGlvbnMucmVmZXJyZXJQb2xpY3kgPSAqcmVmZXJyZXJQb2xpY3k7CisgICAgb3B0aW9ucy5p
bnRlZ3JpdHkgPSBXVEZNb3ZlKCppbnRlZ3JpdHkpOworICAgIG9wdGlvbnMua2VlcEFsaXZlID0g
KmtlZXBBbGl2ZTsKIAogICAgIHJldHVybiB0cnVlOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5UmVzcG9uc2VIZWFkZXJzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5UmVzcG9u
c2VIZWFkZXJzLmgJKHJldmlzaW9uIDI1NjA4MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvY3Nw
L0NvbnRlbnRTZWN1cml0eVBvbGljeVJlc3BvbnNlSGVhZGVycy5oCSh3b3JraW5nIGNvcHkpCkBA
IC00OCw3ICs0OCw3IEBACiAgICAgQ29udGVudFNlY3VyaXR5UG9saWN5UmVzcG9uc2VIZWFkZXJz
IGlzb2xhdGVkQ29weSgpIGNvbnN0OwogCiAgICAgdGVtcGxhdGUgPGNsYXNzIEVuY29kZXI+IHZv
aWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgRGVjb2Rlcj4g
c3RhdGljIGJvb2wgZGVjb2RlKERlY29kZXImLCBDb250ZW50U2VjdXJpdHlQb2xpY3lSZXNwb25z
ZUhlYWRlcnMmKTsKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFs
PENvbnRlbnRTZWN1cml0eVBvbGljeVJlc3BvbnNlSGVhZGVycz4gZGVjb2RlKERlY29kZXImKTsK
IAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgQ29udGVudFNlY3VyaXR5UG9saWN5OwpAQCAt
NjMsMzIgKzYzLDU0IEBACiAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4obV9o
ZWFkZXJzLnNpemUoKSk7CiAgICAgZm9yIChhdXRvJiBwYWlyIDogbV9oZWFkZXJzKSB7CiAgICAg
ICAgIGVuY29kZXIgPDwgcGFpci5maXJzdDsKLSAgICAgICAgZW5jb2Rlci5lbmNvZGVFbnVtKHBh
aXIuc2Vjb25kKTsKKyAgICAgICAgZW5jb2RlciA8PCBwYWlyLnNlY29uZDsKICAgICB9CiAgICAg
ZW5jb2RlciA8PCBtX2h0dHBTdGF0dXNDb2RlOwogfQogCiB0ZW1wbGF0ZSA8Y2xhc3MgRGVjb2Rl
cj4KLWJvb2wgQ29udGVudFNlY3VyaXR5UG9saWN5UmVzcG9uc2VIZWFkZXJzOjpkZWNvZGUoRGVj
b2RlciYgZGVjb2RlciwgQ29udGVudFNlY3VyaXR5UG9saWN5UmVzcG9uc2VIZWFkZXJzJiBoZWFk
ZXJzKQorT3B0aW9uYWw8Q29udGVudFNlY3VyaXR5UG9saWN5UmVzcG9uc2VIZWFkZXJzPiBDb250
ZW50U2VjdXJpdHlQb2xpY3lSZXNwb25zZUhlYWRlcnM6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVy
KQogewotICAgIHVpbnQ2NF90IGhlYWRlcnNTaXplOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUo
aGVhZGVyc1NpemUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBoZWFkZXJzU2l6ZTsgKytpKSB7Ci0gICAgICAgIFN0cmluZyBoZWFkZXI7Ci0gICAg
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaGVhZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgQ29udGVudFNlY3VyaXR5UG9saWN5SGVhZGVyVHlwZSBoZWFkZXJUeXBlOwot
ICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlRW51bShoZWFkZXJUeXBlKSkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgaGVhZGVycy5tX2hlYWRlcnMuYXBwZW5kKHN0ZDo6bWFr
ZV9wYWlyKGhlYWRlciwgaGVhZGVyVHlwZSkpOworICAgIENvbnRlbnRTZWN1cml0eVBvbGljeVJl
c3BvbnNlSGVhZGVycyBoZWFkZXJzOworCisgICAgT3B0aW9uYWw8dWludDY0X3Q+IGhlYWRlcnNT
aXplOworICAgIGRlY29kZXIgPj4gaGVhZGVyc1NpemU7CisgICAgaWYgKCFoZWFkZXJzU2l6ZSkK
KyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
ICpoZWFkZXJzU2l6ZTsgKytpKSB7CisgICAgICAgIE9wdGlvbmFsPFN0cmluZz4gaGVhZGVyOwor
ICAgICAgICBkZWNvZGVyID4+IGhlYWRlcjsKKyAgICAgICAgaWYgKCFoZWFkZXIpCisgICAgICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICBPcHRpb25hbDxDb250ZW50U2VjdXJp
dHlQb2xpY3lIZWFkZXJUeXBlPiBoZWFkZXJUeXBlOworICAgICAgICBkZWNvZGVyID4+IGhlYWRl
clR5cGU7CisgICAgICAgIGlmICghaGVhZGVyVHlwZSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CisgICAgICAgIGhlYWRlcnMubV9oZWFkZXJzLmFwcGVuZChzdGQ6Om1ha2VfcGFp
cihXVEZNb3ZlKCpoZWFkZXIpLCBXVEZNb3ZlKCpoZWFkZXJUeXBlKSkpOwogICAgIH0KICAgICBo
ZWFkZXJzLm1faGVhZGVycy5zaHJpbmtUb0ZpdCgpOwogCi0gICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShoZWFkZXJzLm1faHR0cFN0YXR1c0NvZGUpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
T3B0aW9uYWw8aW50PiBodHRwU3RhdHVzQ29kZTsKKyAgICBkZWNvZGVyID4+IGh0dHBTdGF0dXND
b2RlOworICAgIGlmICghaHR0cFN0YXR1c0NvZGUpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CisgICAgaGVhZGVycy5tX2h0dHBTdGF0dXNDb2RlID0gKmh0dHBTdGF0dXNDb2RlOwogCi0g
ICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIFdURk1vdmUoaGVhZGVycyk7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPD4gc3RydWN0
IEVudW1UcmFpdHM8V2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5SGVhZGVyVHlwZT4gewor
ICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8CisgICAgICAgIFdlYkNvcmU6OkNvbnRlbnRT
ZWN1cml0eVBvbGljeUhlYWRlclR5cGUsCisgICAgICAgIFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0
eVBvbGljeUhlYWRlclR5cGU6OlJlcG9ydCwKKyAgICAgICAgV2ViQ29yZTo6Q29udGVudFNlY3Vy
aXR5UG9saWN5SGVhZGVyVHlwZTo6RW5mb3JjZSwKKyAgICAgICAgV2ViQ29yZTo6Q29udGVudFNl
Y3VyaXR5UG9saWN5SGVhZGVyVHlwZTo6UHJlZml4ZWRSZXBvcnQsCisgICAgICAgIFdlYkNvcmU6
OkNvbnRlbnRTZWN1cml0eVBvbGljeUhlYWRlclR5cGU6OlByZWZpeGVkRW5mb3JjZQorICAgID47
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1Bhc3RlYm9hcmRDdXN0b21EYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9QYXN0ZWJvYXJkQ3VzdG9tRGF0YS5jcHAJKHJldmlzaW9uIDI1NjA4MSkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmRDdXN0b21EYXRhLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtOTgsMjMgKzk4LDI5IEBACiAKICAgICBQYXN0ZWJvYXJkQ3VzdG9tRGF0YSByZXN1
bHQ7CiAgICAgYXV0byBkZWNvZGVyID0gYnVmZmVyLmRlY29kZXIoKTsKLSAgICB1bnNpZ25lZCB2
ZXJzaW9uOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUodmVyc2lvbikgfHwgdmVyc2lvbiA+IG1h
eFN1cHBvcnRlZERhdGFTZXJpYWxpemF0aW9uVmVyc2lvbk51bWJlcikKKyAgICBPcHRpb25hbDx1
bnNpZ25lZD4gdmVyc2lvbjsKKyAgICBkZWNvZGVyID4+IHZlcnNpb247CisgICAgaWYgKCF2ZXJz
aW9uIHx8ICp2ZXJzaW9uID4gbWF4U3VwcG9ydGVkRGF0YVNlcmlhbGl6YXRpb25WZXJzaW9uTnVt
YmVyKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1
bHQubV9vcmlnaW4pKQorICAgIE9wdGlvbmFsPFN0cmluZz4gb3JpZ2luOworICAgIGRlY29kZXIg
Pj4gb3JpZ2luOworICAgIGlmICghb3JpZ2luKQogICAgICAgICByZXR1cm4geyB9OworICAgIHJl
c3VsdC5tX29yaWdpbiA9IFdURk1vdmUoKm9yaWdpbik7CiAKLSAgICBIYXNoTWFwPFN0cmluZywg
U3RyaW5nPiBzYW1lT3JpZ2luQ3VzdG9tU3RyaW5nRGF0YTsKLSAgICBpZiAoIWRlY29kZXIuZGVj
b2RlKHNhbWVPcmlnaW5DdXN0b21TdHJpbmdEYXRhKSkKKyAgICBPcHRpb25hbDxIYXNoTWFwPFN0
cmluZywgU3RyaW5nPj4gc2FtZU9yaWdpbkN1c3RvbVN0cmluZ0RhdGE7CisgICAgZGVjb2RlciA+
PiBzYW1lT3JpZ2luQ3VzdG9tU3RyaW5nRGF0YTsKKyAgICBpZiAoIXNhbWVPcmlnaW5DdXN0b21T
dHJpbmdEYXRhKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgVmVjdG9yPFN0cmluZz4gb3Jk
ZXJlZFR5cGVzOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUob3JkZXJlZFR5cGVzKSkKKyAgICBP
cHRpb25hbDxWZWN0b3I8U3RyaW5nPj4gb3JkZXJlZFR5cGVzOworICAgIGRlY29kZXIgPj4gb3Jk
ZXJlZFR5cGVzOworICAgIGlmICghb3JkZXJlZFR5cGVzKQogICAgICAgICByZXR1cm4geyB9Owog
Ci0gICAgZm9yIChhdXRvJiB0eXBlIDogb3JkZXJlZFR5cGVzKQotICAgICAgICByZXN1bHQud3Jp
dGVTdHJpbmdJbkN1c3RvbURhdGEodHlwZSwgc2FtZU9yaWdpbkN1c3RvbVN0cmluZ0RhdGEuZ2V0
KHR5cGUpKTsKKyAgICBmb3IgKGF1dG8mIHR5cGUgOiAqb3JkZXJlZFR5cGVzKQorICAgICAgICBy
ZXN1bHQud3JpdGVTdHJpbmdJbkN1c3RvbURhdGEodHlwZSwgc2FtZU9yaWdpbkN1c3RvbVN0cmlu
Z0RhdGEtPmdldCh0eXBlKSk7CiAKICAgICByZXR1cm4gcmVzdWx0OwogfQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUxvYWRQcmlvcml0eS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VMb2FkUHJpb3Jp
dHkuaAkocmV2aXNpb24gMjU2MDgxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9SZXNvdXJjZUxvYWRQcmlvcml0eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw4ICsyMyw3IEBA
CiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBSZXNv
dXJjZUxvYWRQcmlvcml0eV9oCi0jZGVmaW5lIFJlc291cmNlTG9hZFByaW9yaXR5X2gKKyNwcmFn
bWEgb25jZQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTUyLDcgKzUxLDE5IEBACiAgICAg
cmV0dXJuIHByaW9yaXR5ID0gc3RhdGljX2Nhc3Q8UmVzb3VyY2VMb2FkUHJpb3JpdHk+KHN0YXRp
Y19jYXN0PGludD4ocHJpb3JpdHkpIC0gMSk7CiB9CiAKLX0KK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIAotI2VuZGlmCituYW1lc3BhY2UgV1RGIHsKIAordGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRy
YWl0czxXZWJDb3JlOjpSZXNvdXJjZUxvYWRQcmlvcml0eT4geworICAgIHVzaW5nIHZhbHVlcyA9
IEVudW1WYWx1ZXM8CisgICAgICAgIFdlYkNvcmU6OlJlc291cmNlTG9hZFByaW9yaXR5LAorICAg
ICAgICBXZWJDb3JlOjpSZXNvdXJjZUxvYWRQcmlvcml0eTo6VmVyeUxvdywKKyAgICAgICAgV2Vi
Q29yZTo6UmVzb3VyY2VMb2FkUHJpb3JpdHk6OkxvdywKKyAgICAgICAgV2ViQ29yZTo6UmVzb3Vy
Y2VMb2FkUHJpb3JpdHk6Ok1lZGl1bSwKKyAgICAgICAgV2ViQ29yZTo6UmVzb3VyY2VMb2FkUHJp
b3JpdHk6OkhpZ2gsCisgICAgICAgIFdlYkNvcmU6OlJlc291cmNlTG9hZFByaW9yaXR5OjpWZXJ5
SGlnaAorICAgID47Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5oCShy
ZXZpc2lvbiAyNTYwODEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291
cmNlUmVxdWVzdEJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsOCArMjUsNyBAQAogICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KICAqLwogCi0jaWZuZGVmIFJlc291cmNlUmVxdWVzdEJhc2VfaAotI2RlZmluZSBS
ZXNvdXJjZVJlcXVlc3RCYXNlX2gKKyNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiRm9ybURhdGEu
aCIKICNpbmNsdWRlICJGcmFtZUxvYWRlclR5cGVzLmgiCkBAIC0zMyw2ICszMiw3IEBACiAjaW5j
bHVkZSAiSFRUUEhlYWRlck1hcC5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJS
ZXNvdXJjZUxvYWRQcmlvcml0eS5oIgorI2luY2x1ZGUgPHd0Zi9FbnVtVHJhaXRzLmg+CiAjaW5j
bHVkZSA8d3RmL1VSTC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0yNzYsNjQgKzI3Niw4
OCBAQAogICAgIGVuY29kZXIgPDwgbV9odHRwTWV0aG9kOwogICAgIGVuY29kZXIgPDwgbV9odHRw
SGVhZGVyRmllbGRzOwogICAgIGVuY29kZXIgPDwgbV9yZXNwb25zZUNvbnRlbnREaXNwb3NpdGlv
bkVuY29kaW5nRmFsbGJhY2tBcnJheTsKLSAgICBlbmNvZGVyLmVuY29kZUVudW0obV9jYWNoZVBv
bGljeSk7CisgICAgZW5jb2RlciA8PCBtX2NhY2hlUG9saWN5OwogICAgIGVuY29kZXIgPDwgbV9h
bGxvd0Nvb2tpZXM7Ci0gICAgZW5jb2Rlci5lbmNvZGVFbnVtKG1fc2FtZVNpdGVEaXNwb3NpdGlv
bik7CisgICAgZW5jb2RlciA8PCBtX3NhbWVTaXRlRGlzcG9zaXRpb247CiAgICAgZW5jb2RlciA8
PCBtX2lzVG9wU2l0ZTsKLSAgICBlbmNvZGVyLmVuY29kZUVudW0obV9wcmlvcml0eSk7Ci0gICAg
ZW5jb2Rlci5lbmNvZGVFbnVtKG1fcmVxdWVzdGVyKTsKKyAgICBlbmNvZGVyIDw8IG1fcHJpb3Jp
dHk7CisgICAgZW5jb2RlciA8PCBtX3JlcXVlc3RlcjsKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVj
b2Rlcj4KIEFMV0FZU19JTkxJTkUgYm9vbCBSZXNvdXJjZVJlcXVlc3RCYXNlOjpkZWNvZGVCYXNl
KERlY29kZXImIGRlY29kZXIpCiB7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShtX3VybCkpCisg
ICAgT3B0aW9uYWw8VVJMPiB1cmw7CisgICAgZGVjb2RlciA+PiB1cmw7CisgICAgaWYgKCF1cmwp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUobV90aW1l
b3V0SW50ZXJ2YWwpKQorICAgIG1fdXJsID0gV1RGTW92ZSgqdXJsKTsKKyAgICAKKyAgICBPcHRp
b25hbDxkb3VibGU+IHRpbWVvdXRJbnRlcnZhbDsKKyAgICBkZWNvZGVyID4+IHRpbWVvdXRJbnRl
cnZhbDsKKyAgICBpZiAoIXRpbWVvdXRJbnRlcnZhbCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIG1fdGltZW91dEludGVydmFsID0gV1RGTW92ZSgqdGltZW91dEludGVydmFsKTsKIAotICAg
IFN0cmluZyBmaXJzdFBhcnR5Rm9yQ29va2llczsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGZp
cnN0UGFydHlGb3JDb29raWVzKSkKKyAgICBPcHRpb25hbDxTdHJpbmc+IGZpcnN0UGFydHlGb3JD
b29raWVzOworICAgIGRlY29kZXIgPj4gZmlyc3RQYXJ0eUZvckNvb2tpZXM7CisgICAgaWYgKCFm
aXJzdFBhcnR5Rm9yQ29va2llcykKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fZmlyc3RQ
YXJ0eUZvckNvb2tpZXMgPSBVUkwoeyB9LCBmaXJzdFBhcnR5Rm9yQ29va2llcyk7CisgICAgbV9m
aXJzdFBhcnR5Rm9yQ29va2llcyA9IFVSTCh7IH0sICpmaXJzdFBhcnR5Rm9yQ29va2llcyk7CiAK
LSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKG1faHR0cE1ldGhvZCkpCisgICAgT3B0aW9uYWw8U3Ry
aW5nPiBodHRwTWV0aG9kOworICAgIGRlY29kZXIgPj4gaHR0cE1ldGhvZDsKKyAgICBpZiAoIWh0
dHBNZXRob2QpCiAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBtX2h0dHBNZXRob2QgPSBXVEZN
b3ZlKCpodHRwTWV0aG9kKTsKIAotICAgIGlmICghZGVjb2Rlci5kZWNvZGUobV9odHRwSGVhZGVy
RmllbGRzKSkKKyAgICBPcHRpb25hbDxIVFRQSGVhZGVyTWFwPiBmaWVsZHM7CisgICAgZGVjb2Rl
ciA+PiBmaWVsZHM7CisgICAgaWYgKCFmaWVsZHMpCiAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBtX2h0dHBIZWFkZXJGaWVsZHMgPSBXVEZNb3ZlKCpmaWVsZHMpOwogCi0gICAgaWYgKCFkZWNv
ZGVyLmRlY29kZShtX3Jlc3BvbnNlQ29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFja0Fy
cmF5KSkKKyAgICBPcHRpb25hbDxWZWN0b3I8U3RyaW5nPj4gYXJyYXk7CisgICAgZGVjb2RlciA+
PiBhcnJheTsKKyAgICBpZiAoIWFycmF5KQogICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgbV9y
ZXNwb25zZUNvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheSA9IFdURk1vdmUo
KmFycmF5KTsKIAotICAgIFJlc291cmNlUmVxdWVzdENhY2hlUG9saWN5IGNhY2hlUG9saWN5Owot
ICAgIGlmICghZGVjb2Rlci5kZWNvZGVFbnVtKGNhY2hlUG9saWN5KSkKKyAgICBPcHRpb25hbDxS
ZXNvdXJjZVJlcXVlc3RDYWNoZVBvbGljeT4gY2FjaGVQb2xpY3k7CisgICAgZGVjb2RlciA+PiBj
YWNoZVBvbGljeTsKKyAgICBpZiAoIWNhY2hlUG9saWN5KQogICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgbV9jYWNoZVBvbGljeSA9IGNhY2hlUG9saWN5OworICAgIG1fY2FjaGVQb2xpY3kgPSAq
Y2FjaGVQb2xpY3k7CiAKLSAgICBib29sIGFsbG93Q29va2llczsKLSAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlKGFsbG93Q29va2llcykpCisgICAgT3B0aW9uYWw8Ym9vbD4gYWxsb3dDb29raWVzOwor
ICAgIGRlY29kZXIgPj4gYWxsb3dDb29raWVzOworICAgIGlmICghYWxsb3dDb29raWVzKQogICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9hbGxvd0Nvb2tpZXMgPSBhbGxvd0Nvb2tpZXM7Cisg
ICAgbV9hbGxvd0Nvb2tpZXMgPSAqYWxsb3dDb29raWVzOwogCi0gICAgU2FtZVNpdGVEaXNwb3Np
dGlvbiBzYW1lU2l0ZURpc3Bvc2l0aW9uOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGVFbnVtKHNh
bWVTaXRlRGlzcG9zaXRpb24pKQorICAgIE9wdGlvbmFsPFNhbWVTaXRlRGlzcG9zaXRpb24+IHNh
bWVTaXRlRGlzcG9zaXRpb247CisgICAgZGVjb2RlciA+PiBzYW1lU2l0ZURpc3Bvc2l0aW9uOwor
ICAgIGlmICghc2FtZVNpdGVEaXNwb3NpdGlvbikKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IG1fc2FtZVNpdGVEaXNwb3NpdGlvbiA9IHNhbWVTaXRlRGlzcG9zaXRpb247CisgICAgbV9zYW1l
U2l0ZURpc3Bvc2l0aW9uID0gKnNhbWVTaXRlRGlzcG9zaXRpb247CiAKLSAgICBib29sIGlzVG9w
U2l0ZTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGlzVG9wU2l0ZSkpCisgICAgT3B0aW9uYWw8
Ym9vbD4gaXNUb3BTaXRlOworICAgIGRlY29kZXIgPj4gaXNUb3BTaXRlOworICAgIGlmICghaXNU
b3BTaXRlKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9pc1RvcFNpdGUgPSBpc1RvcFNp
dGU7CisgICAgbV9pc1RvcFNpdGUgPSAqaXNUb3BTaXRlOwogCi0gICAgUmVzb3VyY2VMb2FkUHJp
b3JpdHkgcHJpb3JpdHk7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZUVudW0ocHJpb3JpdHkpKQor
ICAgIE9wdGlvbmFsPFJlc291cmNlTG9hZFByaW9yaXR5PiBwcmlvcml0eTsKKyAgICBkZWNvZGVy
ID4+IHByaW9yaXR5OworICAgIGlmICghcHJpb3JpdHkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBtX3ByaW9yaXR5ID0gcHJpb3JpdHk7CisgICAgbV9wcmlvcml0eSA9ICpwcmlvcml0eTsK
IAotICAgIGlmICghZGVjb2Rlci5kZWNvZGVFbnVtKG1fcmVxdWVzdGVyKSkKKyAgICBPcHRpb25h
bDxSZXF1ZXN0ZXI+IHJlcXVlc3RlcjsKKyAgICBkZWNvZGVyID4+IHJlcXVlc3RlcjsKKyAgICBp
ZiAoIXJlcXVlc3RlcikKICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIG1fcmVxdWVzdGVyID0g
KnJlcXVlc3RlcjsKIAogICAgIHJldHVybiB0cnVlOwogfQpAQCAtMzU0LDQgKzM3OCwzOSBAQAog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBSZXNvdXJjZVJlcXVlc3RCYXNl
X2gKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNv
cmU6OlJlc291cmNlUmVxdWVzdENhY2hlUG9saWN5PiB7CisgICAgdXNpbmcgdmFsdWVzID0gRW51
bVZhbHVlczwKKyAgICAgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Q2FjaGVQb2xpY3ksCisg
ICAgICAgIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdENhY2hlUG9saWN5OjpVc2VQcm90b2NvbENh
Y2hlUG9saWN5LAorICAgICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RDYWNoZVBvbGljeTo6
UmVsb2FkSWdub3JpbmdDYWNoZURhdGEsCisgICAgICAgIFdlYkNvcmU6OlJlc291cmNlUmVxdWVz
dENhY2hlUG9saWN5OjpSZXR1cm5DYWNoZURhdGFFbHNlTG9hZCwKKyAgICAgICAgV2ViQ29yZTo6
UmVzb3VyY2VSZXF1ZXN0Q2FjaGVQb2xpY3k6OlJldHVybkNhY2hlRGF0YURvbnRMb2FkLAorICAg
ICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RDYWNoZVBvbGljeTo6RG9Ob3RVc2VBbnlDYWNo
ZSwKKyAgICAgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Q2FjaGVQb2xpY3k6OlJlZnJlc2hB
bnlDYWNoZURhdGEKKyAgICA+OworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxX
ZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RCYXNlOjpTYW1lU2l0ZURpc3Bvc2l0aW9uPiB7CisgICAg
dXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKKyAgICAgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXF1
ZXN0QmFzZTo6U2FtZVNpdGVEaXNwb3NpdGlvbiwKKyAgICAgICAgV2ViQ29yZTo6UmVzb3VyY2VS
ZXF1ZXN0QmFzZTo6U2FtZVNpdGVEaXNwb3NpdGlvbjo6VW5zcGVjaWZpZWQsCisgICAgICAgIFdl
YkNvcmU6OlJlc291cmNlUmVxdWVzdEJhc2U6OlNhbWVTaXRlRGlzcG9zaXRpb246OlNhbWVTaXRl
LAorICAgICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RCYXNlOjpTYW1lU2l0ZURpc3Bvc2l0
aW9uOjpDcm9zc1NpdGUKKyAgICA+OworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0
czxXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RCYXNlOjpSZXF1ZXN0ZXI+IHsKKyAgICB1c2luZyB2
YWx1ZXMgPSBFbnVtVmFsdWVzPAorICAgICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RCYXNl
OjpSZXF1ZXN0ZXIsCisgICAgICAgIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdEJhc2U6OlJlcXVl
c3Rlcjo6VW5zcGVjaWZpZWQsCisgICAgICAgIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdEJhc2U6
OlJlcXVlc3Rlcjo6TWFpbiwKKyAgICAgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0QmFzZTo6
UmVxdWVzdGVyOjpYSFIsCisgICAgICAgIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdEJhc2U6OlJl
cXVlc3Rlcjo6RmV0Y2gsCisgICAgICAgIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdEJhc2U6OlJl
cXVlc3Rlcjo6TWVkaWEsCisgICAgICAgIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdEJhc2U6OlJl
cXVlc3Rlcjo6SW1wb3J0U2NyaXB0cworICAgID47Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvQ2VydGlmaWNhdGVJbmZv
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9DZXJ0
aWZpY2F0ZUluZm8uaAkocmV2aXNpb24gMjU2MDgxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9jZi9DZXJ0aWZpY2F0ZUluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiAr
MjYsNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJDZXJ0aWZpY2F0ZUluZm9CYXNlLmgi
CisjaW5jbHVkZSA8d3RmL0VudW1UcmFpdHMuaD4KICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+
CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi9jZi9UeXBlQ2FzdHNDRi5o
PgpAQCAtMTA5LDE4ICsxMTAsMjEgQEAKICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0
YShieXRlUHRyLCBzdGF0aWNfY2FzdDxzaXplX3Q+KGxlbmd0aCkpOwogfQogCi1zdGF0aWMgYm9v
bCBkZWNvZGVDRkRhdGEoRGVjb2RlciYgZGVjb2RlciwgUmV0YWluUHRyPENGRGF0YVJlZj4mIGRh
dGEpCitzdGF0aWMgT3B0aW9uYWw8UmV0YWluUHRyPENGRGF0YVJlZj4+IGRlY29kZUNGRGF0YShE
ZWNvZGVyJiBkZWNvZGVyKQogewotICAgIHVpbnQ2NF90IHNpemUgPSAwOwotICAgIGlmICghZGVj
b2Rlci5kZWNvZGUoc2l6ZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBPcHRpb25hbDx1
aW50NjRfdD4gc2l6ZTsKKyAgICBkZWNvZGVyID4+IHNpemU7CisgICAgaWYgKCFzaXplKQorICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgVmVjdG9yPHVpbnQ4X3Q+IHZlY3Rvcihz
dGF0aWNfY2FzdDxzaXplX3Q+KHNpemUpKTsKKyAgICBpZiAoVU5MSUtFTFkoIWlzSW5Cb3VuZHM8
c2l6ZV90Pigqc2l6ZSkpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIAorICAg
IFZlY3Rvcjx1aW50OF90PiB2ZWN0b3Ioc3RhdGljX2Nhc3Q8c2l6ZV90Pigqc2l6ZSkpOwogICAg
IGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEodmVjdG9yLmRhdGEoKSwgdmVjdG9y
LnNpemUoKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKIAotICAgIGRhdGEgPSBhZG9wdENGKENGRGF0YUNyZWF0ZShudWxscHRyLCB2ZWN0b3Iu
ZGF0YSgpLCB2ZWN0b3Iuc2l6ZSgpKSk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGFk
b3B0Q0YoQ0ZEYXRhQ3JlYXRlKG51bGxwdHIsIHZlY3Rvci5kYXRhKCksIHZlY3Rvci5zaXplKCkp
KTsKIH0KIAogI2lmIEhBVkUoU0VDX1RSVVNUX1NFUklBTElaQVRJT04pCkBAIC0xMzYsMjUgKzE0
MCwyNSBAQAogICAgIGVuY29kZUNGRGF0YShlbmNvZGVyLCBkYXRhLmdldCgpKTsKIH0KIAotc3Rh
dGljIGJvb2wgZGVjb2RlU2VjVHJ1c3RSZWYoRGVjb2RlciYgZGVjb2RlciwgUmV0YWluUHRyPFNl
Y1RydXN0UmVmPiYgcmVzdWx0KQorc3RhdGljIE9wdGlvbmFsPFJldGFpblB0cjxTZWNUcnVzdFJl
Zj4+IGRlY29kZVNlY1RydXN0UmVmKERlY29kZXImIGRlY29kZXIpCiB7Ci0gICAgYm9vbCBoYXNU
cnVzdDsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGhhc1RydXN0KSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCisgICAgT3B0aW9uYWw8Ym9vbD4gaGFzVHJ1c3Q7CisgICAgZGVjb2RlciA+PiBo
YXNUcnVzdDsKICAgICBpZiAoIWhhc1RydXN0KQotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IHRydXN0
RGF0YTsKLSAgICBpZiAoIWRlY29kZUNGRGF0YShkZWNvZGVyLCB0cnVzdERhdGEpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCEqaGFzVHJ1c3QpCisgICAgICAgIHJldHVybiB7IG51
bGxwdHIgfTsKIAotICAgIGF1dG8gdHJ1c3QgPSBhZG9wdENGKFNlY1RydXN0RGVzZXJpYWxpemUo
dHJ1c3REYXRhLmdldCgpLCBudWxscHRyKSk7CisgICAgYXV0byB0cnVzdERhdGEgPSBkZWNvZGVD
RkRhdGEoZGVjb2Rlcik7CisgICAgaWYgKCF0cnVzdERhdGEpCisgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CisKKyAgICBhdXRvIHRydXN0ID0gYWRvcHRDRihTZWNUcnVzdERlc2VyaWFsaXpl
KHRydXN0RGF0YS0+Z2V0KCksIG51bGxwdHIpKTsKICAgICBpZiAoIXRydXN0KQotICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICByZXN1bHQg
PSBXVEZNb3ZlKHRydXN0KTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gV1RGTW92ZSh0
cnVzdCk7CiB9CiAjZW5kaWYKIApAQCAtMTc1LDI1ICsxNzksMjUgQEAKICAgICB9CiB9CiAKLXN0
YXRpYyBib29sIGRlY29kZUNlcnRpZmljYXRlQ2hhaW4oRGVjb2RlciYgZGVjb2RlciwgUmV0YWlu
UHRyPENGQXJyYXlSZWY+JiBjZXJ0aWZpY2F0ZUNoYWluKQorc3RhdGljIE9wdGlvbmFsPFJldGFp
blB0cjxDRkFycmF5UmVmPj4gZGVjb2RlQ2VydGlmaWNhdGVDaGFpbihEZWNvZGVyJiBkZWNvZGVy
KQogewotICAgIHVpbnQ2NF90IHNpemU7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShzaXplKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIE9wdGlvbmFsPHVpbnQ2NF90PiBzaXplOworICAg
IGRlY29kZXIgPj4gc2l6ZTsKKyAgICBpZiAoIXNpemUpCisgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CiAKICAgICBhdXRvIGFycmF5ID0gYWRvcHRDRihDRkFycmF5Q3JlYXRlTXV0YWJsZSgw
LCAwLCAma0NGVHlwZUFycmF5Q2FsbEJhY2tzKSk7CiAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHNpemU7ICsraSkgewotICAgICAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBkYXRhOwotICAg
ICAgICBpZiAoIWRlY29kZUNGRGF0YShkZWNvZGVyLCBkYXRhKSkKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8ICpzaXplOyArK2kpIHsKKyAgICAg
ICAgYXV0byBkYXRhID0gZGVjb2RlQ0ZEYXRhKGRlY29kZXIpOworICAgICAgICBpZiAoIWRhdGEp
CisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgICAgIGF1dG8gY2VydGlm
aWNhdGUgPSBhZG9wdENGKFNlY0NlcnRpZmljYXRlQ3JlYXRlV2l0aERhdGEoMCwgZGF0YS5nZXQo
KSkpOworICAgICAgICBhdXRvIGNlcnRpZmljYXRlID0gYWRvcHRDRihTZWNDZXJ0aWZpY2F0ZUNy
ZWF0ZVdpdGhEYXRhKDAsIGRhdGEtPmdldCgpKSk7CiAgICAgICAgIENGQXJyYXlBcHBlbmRWYWx1
ZShhcnJheS5nZXQoKSwgY2VydGlmaWNhdGUuZ2V0KCkpOwogICAgIH0KIAotICAgIGNlcnRpZmlj
YXRlQ2hhaW4gPSBXVEZNb3ZlKGFycmF5KTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4g
eyBXVEZNb3ZlKGFycmF5KSB9OwogfQogI2VuZGlmCiAKQEAgLTIwMCw3ICsyMDQsNyBAQAogdGVt
cGxhdGU8PiBzdHJ1Y3QgQ29kZXI8V2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvPiB7CiAgICAgc3Rh
dGljIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFdlYkNvcmU6OkNlcnRpZmlj
YXRlSW5mbyYgY2VydGlmaWNhdGVJbmZvKQogICAgIHsKLSAgICAgICAgZW5jb2Rlci5lbmNvZGVF
bnVtKGNlcnRpZmljYXRlSW5mby50eXBlKCkpOworICAgICAgICBlbmNvZGVyIDw8IGNlcnRpZmlj
YXRlSW5mby50eXBlKCk7CiAKICAgICAgICAgc3dpdGNoIChjZXJ0aWZpY2F0ZUluZm8udHlwZSgp
KSB7CiAjaWYgSEFWRShTRUNfVFJVU1RfU0VSSUFMSVpBVElPTikKQEAgLTIyMCw0MSArMjI0LDUy
IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBzdGF0aWMgYm9vbCBkZWNvZGUoRGVjb2RlciYg
ZGVjb2RlciwgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvJiBjZXJ0aWZpY2F0ZUluZm8pCisgICAg
c3RhdGljIE9wdGlvbmFsPFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbz4gZGVjb2RlKERlY29kZXIm
IGRlY29kZXIpCiAgICAgewotICAgICAgICBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm86OlR5cGUg
Y2VydGlmaWNhdGVJbmZvVHlwZTsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZUVudW0oY2Vy
dGlmaWNhdGVJbmZvVHlwZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIE9w
dGlvbmFsPFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbzo6VHlwZT4gY2VydGlmaWNhdGVJbmZvVHlw
ZTsKKyAgICAgICAgZGVjb2RlciA+PiBjZXJ0aWZpY2F0ZUluZm9UeXBlOworICAgICAgICBpZiAo
IWNlcnRpZmljYXRlSW5mb1R5cGUpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owog
Ci0gICAgICAgIHN3aXRjaCAoY2VydGlmaWNhdGVJbmZvVHlwZSkgeworICAgICAgICBzd2l0Y2gg
KCpjZXJ0aWZpY2F0ZUluZm9UeXBlKSB7CiAjaWYgSEFWRShTRUNfVFJVU1RfU0VSSUFMSVpBVElP
TikKICAgICAgICAgY2FzZSBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm86OlR5cGU6OlRydXN0OiB7
Ci0gICAgICAgICAgICBSZXRhaW5QdHI8U2VjVHJ1c3RSZWY+IHRydXN0OwotICAgICAgICAgICAg
aWYgKCFkZWNvZGVTZWNUcnVzdFJlZihkZWNvZGVyLCB0cnVzdCkpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgYXV0byB0cnVzdCA9IGRlY29kZVNlY1RydXN0UmVm
KGRlY29kZXIpOworICAgICAgICAgICAgaWYgKCF0cnVzdCkKKyAgICAgICAgICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwogCi0gICAgICAgICAgICBjZXJ0aWZpY2F0ZUluZm8gPSBXZWJDb3Jl
OjpDZXJ0aWZpY2F0ZUluZm8oV1RGTW92ZSh0cnVzdCkpOwotICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgICAgICByZXR1cm4gV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvKFdURk1vdmUo
KnRydXN0KSk7CiAgICAgICAgIH0KICNlbmRpZgogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgICAg
ICBjYXNlIFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbzo6VHlwZTo6Q2VydGlmaWNhdGVDaGFpbjog
ewotICAgICAgICAgICAgUmV0YWluUHRyPENGQXJyYXlSZWY+IGNlcnRpZmljYXRlQ2hhaW47Ci0g
ICAgICAgICAgICBpZiAoIWRlY29kZUNlcnRpZmljYXRlQ2hhaW4oZGVjb2RlciwgY2VydGlmaWNh
dGVDaGFpbikpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgYXV0
byBjZXJ0aWZpY2F0ZUNoYWluID0gZGVjb2RlQ2VydGlmaWNhdGVDaGFpbihkZWNvZGVyKTsKKyAg
ICAgICAgICAgIGlmICghY2VydGlmaWNhdGVDaGFpbikKKyAgICAgICAgICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwogCi0gICAgICAgICAgICBjZXJ0aWZpY2F0ZUluZm8gPSBXZWJDb3JlOjpD
ZXJ0aWZpY2F0ZUluZm8oV1RGTW92ZShjZXJ0aWZpY2F0ZUNoYWluKSk7Ci0gICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8o
V1RGTW92ZSgqY2VydGlmaWNhdGVDaGFpbikpOwogICAgICAgICB9CiAjZW5kaWYKICAgICAgICAg
Y2FzZSBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm86OlR5cGU6Ok5vbmU6CiAgICAgICAgICAgICAv
LyBEbyBub3RoaW5nLgotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICByZXR1cm4gV2Vi
Q29yZTo6Q2VydGlmaWNhdGVJbmZvKCk7CiAgICAgICAgIH0KIAotICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXVEY6OlBlcnNpc3RlbmNlCisKK3RlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2Vi
Q29yZTo6Q2VydGlmaWNhdGVJbmZvOjpUeXBlPiB7CisgICAgdXNpbmcgdmFsdWVzID0gRW51bVZh
bHVlczwKKyAgICAgICAgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvOjpUeXBlLAorICAgICAgICBX
ZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm86OlR5cGU6Ok5vbmUsCisgICAgICAgIFdlYkNvcmU6OkNl
cnRpZmljYXRlSW5mbzo6VHlwZTo6Q2VydGlmaWNhdGVDaGFpbgorI2lmIEhBVkUoU0VDX1RSVVNU
X1NFUklBTElaQVRJT04pCisgICAgICAgICwgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvOjpUeXBl
OjpUcnVzdAorI2VuZGlmCisgICAgPjsKK307CisKIH0gLy8gbmFtZXNwYWNlIFdURgpJbmRleDog
U291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9SZWdpc3RyYXRpb25EYXRhYmFz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZl
ci9SZWdpc3RyYXRpb25EYXRhYmFzZS5jcHAJKHJldmlzaW9uIDI1NjA4MSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3dvcmtlcnMvc2VydmljZS9zZXJ2ZXIvUmVnaXN0cmF0aW9uRGF0YWJhc2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNDIsNyArMzQyLDcgQEAKICAgICAgICAgZGF0YS5jb250ZW50U2Vj
dXJpdHlQb2xpY3kuZW5jb2RlKGNzcEVuY29kZXIpOwogCiAgICAgICAgIFdURjo6UGVyc2lzdGVu
Y2U6OkVuY29kZXIgc2NyaXB0UmVzb3VyY2VNYXBFbmNvZGVyOwotICAgICAgICBzY3JpcHRSZXNv
dXJjZU1hcEVuY29kZXIuZW5jb2RlKGRhdGEuc2NyaXB0UmVzb3VyY2VNYXApOworICAgICAgICBz
Y3JpcHRSZXNvdXJjZU1hcEVuY29kZXIgPDwgZGF0YS5zY3JpcHRSZXNvdXJjZU1hcDsKIAogICAg
ICAgICBpZiAoc3FsLmJpbmRUZXh0KDEsIGRhdGEucmVnaXN0cmF0aW9uLmtleS50b0RhdGFiYXNl
S2V5KCkpICE9IFNRTElURV9PSwogICAgICAgICAgICAgfHwgc3FsLmJpbmRUZXh0KDIsIGRhdGEu
cmVnaXN0cmF0aW9uLnNjb3BlVVJMLnByb3RvY29sSG9zdEFuZFBvcnQoKSkgIT0gU1FMSVRFX09L
CkBAIC0zOTEsMTkgKzM5MSwyMyBAQAogICAgICAgICBWZWN0b3I8dWludDhfdD4gY29udGVudFNl
Y3VyaXR5UG9saWN5RGF0YTsKICAgICAgICAgc3FsLmdldENvbHVtbkJsb2JBc1ZlY3Rvcig5LCBj
b250ZW50U2VjdXJpdHlQb2xpY3lEYXRhKTsKICAgICAgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVj
b2RlciBjc3BEZWNvZGVyKGNvbnRlbnRTZWN1cml0eVBvbGljeURhdGEuZGF0YSgpLCBjb250ZW50
U2VjdXJpdHlQb2xpY3lEYXRhLnNpemUoKSk7Ci0gICAgICAgIENvbnRlbnRTZWN1cml0eVBvbGlj
eVJlc3BvbnNlSGVhZGVycyBjb250ZW50U2VjdXJpdHlQb2xpY3k7Ci0gICAgICAgIGlmIChjb250
ZW50U2VjdXJpdHlQb2xpY3lEYXRhLnNpemUoKSAmJiAhQ29udGVudFNlY3VyaXR5UG9saWN5UmVz
cG9uc2VIZWFkZXJzOjpkZWNvZGUoY3NwRGVjb2RlciwgY29udGVudFNlY3VyaXR5UG9saWN5KSkK
LSAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBPcHRpb25hbDxDb250ZW50U2VjdXJpdHlQ
b2xpY3lSZXNwb25zZUhlYWRlcnM+IGNvbnRlbnRTZWN1cml0eVBvbGljeTsKKyAgICAgICAgaWYg
KGNvbnRlbnRTZWN1cml0eVBvbGljeURhdGEuc2l6ZSgpKSB7CisgICAgICAgICAgICBjc3BEZWNv
ZGVyID4+IGNvbnRlbnRTZWN1cml0eVBvbGljeTsKKyAgICAgICAgICAgIGlmICghY29udGVudFNl
Y3VyaXR5UG9saWN5KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CiAKICAg
ICAgICAgYXV0byByZWZlcnJlclBvbGljeSA9IHNxbC5nZXRDb2x1bW5UZXh0KDEwKTsKIAogICAg
ICAgICBWZWN0b3I8dWludDhfdD4gc2NyaXB0UmVzb3VyY2VNYXBEYXRhOwogICAgICAgICBzcWwu
Z2V0Q29sdW1uQmxvYkFzVmVjdG9yKDExLCBzY3JpcHRSZXNvdXJjZU1hcERhdGEpOwotICAgICAg
ICBIYXNoTWFwPFVSTCwgU2VydmljZVdvcmtlckNvbnRleHREYXRhOjpJbXBvcnRlZFNjcmlwdD4g
c2NyaXB0UmVzb3VyY2VNYXA7CisgICAgICAgIE9wdGlvbmFsPEhhc2hNYXA8VVJMLCBTZXJ2aWNl
V29ya2VyQ29udGV4dERhdGE6OkltcG9ydGVkU2NyaXB0Pj4gc2NyaXB0UmVzb3VyY2VNYXA7CiAK
ICAgICAgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBzY3JpcHRSZXNvdXJjZU1hcERlY29k
ZXIoc2NyaXB0UmVzb3VyY2VNYXBEYXRhLmRhdGEoKSwgc2NyaXB0UmVzb3VyY2VNYXBEYXRhLnNp
emUoKSk7CiAgICAgICAgIGlmIChzY3JpcHRSZXNvdXJjZU1hcERhdGEuc2l6ZSgpKSB7Ci0gICAg
ICAgICAgICBpZiAoIXNjcmlwdFJlc291cmNlTWFwRGVjb2Rlci5kZWNvZGUoc2NyaXB0UmVzb3Vy
Y2VNYXApKQorICAgICAgICAgICAgc2NyaXB0UmVzb3VyY2VNYXBEZWNvZGVyID4+IHNjcmlwdFJl
c291cmNlTWFwOworICAgICAgICAgICAgaWYgKCFzY3JpcHRSZXNvdXJjZU1hcCkKICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCkBAIC00MTcsNyArNDIxLDcgQEAKICAgICAg
ICAgYXV0byByZWdpc3RyYXRpb25JZGVudGlmaWVyID0gU2VydmljZVdvcmtlclJlZ2lzdHJhdGlv
bklkZW50aWZpZXI6OmdlbmVyYXRlKCk7CiAgICAgICAgIGF1dG8gc2VydmljZVdvcmtlckRhdGEg
PSBTZXJ2aWNlV29ya2VyRGF0YSB7IHdvcmtlcklkZW50aWZpZXIsIHNjcmlwdFVSTCwgU2Vydmlj
ZVdvcmtlclN0YXRlOjpBY3RpdmF0ZWQsICp3b3JrZXJUeXBlLCByZWdpc3RyYXRpb25JZGVudGlm
aWVyIH07CiAgICAgICAgIGF1dG8gcmVnaXN0cmF0aW9uID0gU2VydmljZVdvcmtlclJlZ2lzdHJh
dGlvbkRhdGEgeyBXVEZNb3ZlKCprZXkpLCByZWdpc3RyYXRpb25JZGVudGlmaWVyLCBVUkwob3Jp
Z2luVVJMLCBzY29wZVBhdGgpLCAqdXBkYXRlVmlhQ2FjaGUsIGxhc3RVcGRhdGVDaGVja1RpbWUs
IFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0LCBXVEZNb3ZlKHNlcnZpY2VXb3JrZXJEYXRhKSB9
OwotICAgICAgICBhdXRvIGNvbnRleHREYXRhID0gU2VydmljZVdvcmtlckNvbnRleHREYXRhIHsg
V1RGOjpudWxsb3B0LCBXVEZNb3ZlKHJlZ2lzdHJhdGlvbiksIHdvcmtlcklkZW50aWZpZXIsIFdU
Rk1vdmUoc2NyaXB0KSwgV1RGTW92ZShjb250ZW50U2VjdXJpdHlQb2xpY3kpLCBXVEZNb3ZlKHJl
ZmVycmVyUG9saWN5KSwgV1RGTW92ZShzY3JpcHRVUkwpLCAqd29ya2VyVHlwZSwgdHJ1ZSwgV1RG
TW92ZShzY3JpcHRSZXNvdXJjZU1hcCkgfTsKKyAgICAgICAgYXV0byBjb250ZXh0RGF0YSA9IFNl
cnZpY2VXb3JrZXJDb250ZXh0RGF0YSB7IFdURjo6bnVsbG9wdCwgV1RGTW92ZShyZWdpc3RyYXRp
b24pLCB3b3JrZXJJZGVudGlmaWVyLCBXVEZNb3ZlKHNjcmlwdCksIFdURk1vdmUoKmNvbnRlbnRT
ZWN1cml0eVBvbGljeSksIFdURk1vdmUocmVmZXJyZXJQb2xpY3kpLCBXVEZNb3ZlKHNjcmlwdFVS
TCksICp3b3JrZXJUeXBlLCB0cnVlLCBXVEZNb3ZlKCpzY3JpcHRSZXNvdXJjZU1hcCkgfTsKIAog
ICAgICAgICBjYWxsT25NYWluVGhyZWFkKFtwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyks
IGNvbnRleHREYXRhID0gY29udGV4dERhdGEuaXNvbGF0ZWRDb3B5KCldKCkgbXV0YWJsZSB7CiAg
ICAgICAgICAgICBwcm90ZWN0ZWRUaGlzLT5hZGRSZWdpc3RyYXRpb25Ub1N0b3JlKFdURk1vdmUo
Y29udGV4dERhdGEpKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNTYwODEpCisrKyBTb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM1IEBACisyMDIwLTAy
LTEwICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAg
ICAgUGVyc2lzdGVudENvZGVycyBzaG91bGQgdXNlIG1vZGVybiBkZWNvZGluZyBzeW50YXgKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNzQ5NworCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogTmV0d29ya1By
b2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGUuY3BwOgorICAgICAgICAoV2ViS2l0
OjpDYWNoZVN0b3JhZ2U6OmRlY29kZURPTUNhY2hlUmVjb3JkKToKKyAgICAgICAgKFdlYktpdDo6
Q2FjaGVTdG9yYWdlOjpDYWNoZTo6ZGVjb2RlUmVjb3JkSGVhZGVyKToKKyAgICAgICAgKiBOZXR3
b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3BwOgorICAgICAgICAo
V2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlczo6cmVhZE9yaWdpbik6CisgICAgICAgIChXZWJL
aXQ6OkNhY2hlU3RvcmFnZTo6ZGVjb2RlQ2FjaGVzTmFtZXMpOgorICAgICAgICAqIE5ldHdvcmtQ
cm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUNvZGVycy5jcHA6CisgICAgICAgIChXVEY6OlBlcnNp
c3RlbmNlOjpDb2RlcjxXZWJDb3JlOjpIVFRQSGVhZGVyTWFwPjo6ZGVjb2RlKToKKyAgICAgICAg
KiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVFbnRyeS5jcHA6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RW50cnk6OmRlY29kZVN0b3JhZ2VSZWNvcmQpOgorICAgICAg
ICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUtleS5jcHA6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6S2V5OjpkZWNvZGUpOgorICAgICAgICAqIE5ldHdvcmtQcm9j
ZXNzL2NhY2hlL05ldHdvcmtDYWNoZUtleS5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2Nh
Y2hlL05ldHdvcmtDYWNoZVN0b3JhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2Fj
aGU6OmRlY29kZVJlY29yZE1ldGFEYXRhKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9OZXR3b3JrQ2FjaGVTdWJyZXNvdXJjZXNFbnRyeS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtDYWNoZTo6U3VicmVzb3VyY2VJbmZvOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrQ2FjaGU6OlN1YnJlc291cmNlSW5mbzo6ZGVjb2RlKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya0NhY2hlOjpTdWJyZXNvdXJjZXNFbnRyeTo6ZGVjb2RlU3RvcmFnZVJlY29y
ZCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3VicmVzb3Vy
Y2VzRW50cnkuaDoKKyAgICAgICAgKiBTaGFyZWQvVXNlckRhdGEuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpVc2VyRGF0YTo6ZGVjb2RlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0FQSUNvbnRl
bnRSdWxlTGlzdFN0b3JlLmNwcDoKKyAgICAgICAgKEFQSTo6ZGVjb2RlQ29udGVudFJ1bGVMaXN0
TWV0YURhdGEpOgorCiAyMDIwLTAyLTA3ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2Vu
QHdlYmtpdC5vcmc+CiAKICAgICAgICAgSGFyZGVuIEhhc2hUYWJsZSBJUEMgZGVjb2RlcnMKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5l
Q2FjaGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGUuY3BwCShyZXZpc2lvbiAyNTYwODEpCisrKyBTb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTU3LDQ1ICs1NTcsODEgQEAKICAgICByZXR1cm4geyByZWNv
cmRJbmZvcm1hdGlvbi5rZXksIHsgfSwgaGVhZGVyLCBib2R5LCB7IH0gfTsKIH0KIAotT3B0aW9u
YWw8Q2FjaGU6OkRlY29kZWRSZWNvcmQ+IENhY2hlOjpkZWNvZGVSZWNvcmRIZWFkZXIoY29uc3Qg
U3RvcmFnZTo6UmVjb3JkJiBzdG9yYWdlKQorc3RhdGljIE9wdGlvbmFsPFdlYkNvcmU6OkRPTUNh
Y2hlRW5naW5lOjpSZWNvcmQ+IGRlY29kZURPTUNhY2hlUmVjb3JkKFdURjo6UGVyc2lzdGVuY2U6
OkRlY29kZXImIGRlY29kZXIpCiB7Ci0gICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNv
ZGVyKHN0b3JhZ2UuaGVhZGVyLmRhdGEoKSwgc3RvcmFnZS5oZWFkZXIuc2l6ZSgpKTsKLQotICAg
IFJlY29yZCByZWNvcmQ7Ci0KLSAgICBkb3VibGUgaW5zZXJ0aW9uVGltZTsKLSAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKGluc2VydGlvblRpbWUpKQorICAgIE9wdGlvbmFsPEZldGNoSGVhZGVyczo6
R3VhcmQ+IHJlcXVlc3RIZWFkZXJzR3VhcmQ7CisgICAgZGVjb2RlciA+PiByZXF1ZXN0SGVhZGVy
c0d1YXJkOworICAgIGlmICghcmVxdWVzdEhlYWRlcnNHdWFyZCkKICAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKLQotICAgIHVpbnQ2NF90IHNpemU7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShzaXplKSkKKyAgICAKKyAgICBSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdDsKKyAgICBpZiAoIXJl
cXVlc3QuZGVjb2RlV2l0aG91dFBsYXRmb3JtRGF0YShkZWNvZGVyKSkKICAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKLQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVjb3JkLnJlcXVlc3RI
ZWFkZXJzR3VhcmQpKQorICAgIAorICAgIEZldGNoT3B0aW9ucyBvcHRpb25zOworICAgIGlmICgh
RmV0Y2hPcHRpb25zOjpkZWNvZGVQZXJzaXN0ZW50KGRlY29kZXIsIG9wdGlvbnMpKQogICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgaWYgKCFyZWNvcmQucmVxdWVzdC5kZWNvZGVX
aXRob3V0UGxhdGZvcm1EYXRhKGRlY29kZXIpKQorICAgIAorICAgIE9wdGlvbmFsPFN0cmluZz4g
cmVmZXJyZXI7CisgICAgZGVjb2RlciA+PiByZWZlcnJlcjsKKyAgICBpZiAoIXJlZmVycmVyKQog
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgaWYgKCFGZXRjaE9wdGlvbnM6OmRl
Y29kZVBlcnNpc3RlbnQoZGVjb2RlciwgcmVjb3JkLm9wdGlvbnMpKQorICAgIAorICAgIE9wdGlv
bmFsPEZldGNoSGVhZGVyczo6R3VhcmQ+IHJlc3BvbnNlSGVhZGVyc0d1YXJkOworICAgIGRlY29k
ZXIgPj4gcmVzcG9uc2VIZWFkZXJzR3VhcmQ7CisgICAgaWYgKCFyZXNwb25zZUhlYWRlcnNHdWFy
ZCkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIGlmICghZGVjb2Rlci5kZWNv
ZGUocmVjb3JkLnJlZmVycmVyKSkKKyAgICBPcHRpb25hbDxSZXNvdXJjZVJlc3BvbnNlPiByZXNw
b25zZTsKKyAgICBkZWNvZGVyID4+IHJlc3BvbnNlOworICAgIGlmICghcmVzcG9uc2UpCiAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgCisgICAgT3B0aW9uYWw8dWludDY0X3Q+IHJl
c3BvbnNlQm9keVNpemU7CisgICAgZGVjb2RlciA+PiByZXNwb25zZUJvZHlTaXplOworICAgIGlm
ICghcmVzcG9uc2VCb2R5U2l6ZSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAg
IGlmICghZGVjb2Rlci5kZWNvZGUocmVjb3JkLnJlc3BvbnNlSGVhZGVyc0d1YXJkKSkKKyAgICBp
ZiAoIWRlY29kZXIudmVyaWZ5Q2hlY2tzdW0oKSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKIAotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVjb3JkLnJlc3BvbnNlKSkKKyAgICByZXR1
cm4ge3sKKyAgICAgICAgMCwKKyAgICAgICAgMCwKKyAgICAgICAgV1RGTW92ZSgqcmVxdWVzdEhl
YWRlcnNHdWFyZCksCisgICAgICAgIFdURk1vdmUocmVxdWVzdCksCisgICAgICAgIFdURk1vdmUo
b3B0aW9ucyksCisgICAgICAgIFdURk1vdmUoKnJlZmVycmVyKSwKKyAgICAgICAgV1RGTW92ZSgq
cmVzcG9uc2VIZWFkZXJzR3VhcmQpLAorICAgICAgICBXVEZNb3ZlKCpyZXNwb25zZSksCisgICAg
ICAgIHsgfSwKKyAgICAgICAgV1RGTW92ZSgqcmVzcG9uc2VCb2R5U2l6ZSkKKyAgICB9fTsKK30K
KworT3B0aW9uYWw8Q2FjaGU6OkRlY29kZWRSZWNvcmQ+IENhY2hlOjpkZWNvZGVSZWNvcmRIZWFk
ZXIoY29uc3QgU3RvcmFnZTo6UmVjb3JkJiBzdG9yYWdlKQoreworICAgIFdURjo6UGVyc2lzdGVu
Y2U6OkRlY29kZXIgZGVjb2RlcihzdG9yYWdlLmhlYWRlci5kYXRhKCksIHN0b3JhZ2UuaGVhZGVy
LnNpemUoKSk7CisKKyAgICBPcHRpb25hbDxkb3VibGU+IGluc2VydGlvblRpbWU7CisgICAgZGVj
b2RlciA+PiBpbnNlcnRpb25UaW1lOworICAgIGlmICghaW5zZXJ0aW9uVGltZSkKICAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVjb3JkLnJl
c3BvbnNlQm9keVNpemUpKQorICAgIE9wdGlvbmFsPHVpbnQ2NF90PiBzaXplOworICAgIGRlY29k
ZXIgPj4gc2l6ZTsKKyAgICBpZiAoIXNpemUpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CiAKLSAgICBpZiAoIWRlY29kZXIudmVyaWZ5Q2hlY2tzdW0oKSkKKyAgICBPcHRpb25hbDxXZWJD
b3JlOjpET01DYWNoZUVuZ2luZTo6UmVjb3JkPiByZWNvcmQgPSBkZWNvZGVET01DYWNoZVJlY29y
ZChkZWNvZGVyKTsKKyAgICBpZiAoIXJlY29yZCkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKIAotICAgIHJldHVybiBEZWNvZGVkUmVjb3JkIHsgaW5zZXJ0aW9uVGltZSwgc2l6ZSwgV1RG
TW92ZShyZWNvcmQpIH07CisgICAgcmV0dXJuIHt7CisgICAgICAgIFdURk1vdmUoKmluc2VydGlv
blRpbWUpLAorICAgICAgICBXVEZNb3ZlKCpzaXplKSwKKyAgICAgICAgV1RGTW92ZSgqcmVjb3Jk
KQorICAgIH19OwogfQogCiBPcHRpb25hbDxSZWNvcmQ+IENhY2hlOjpkZWNvZGUoY29uc3QgU3Rv
cmFnZTo6UmVjb3JkJiBzdG9yYWdlKQpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmNw
cAkocmV2aXNpb24gMjU2MDgxKQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTIsMjMg
KzExMiwyMiBAQAogCiBPcHRpb25hbDxXZWJDb3JlOjpDbGllbnRPcmlnaW4+IENhY2hlczo6cmVh
ZE9yaWdpbihjb25zdCBEYXRhJiBkYXRhKQogewotICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUg
YWJsZSB0byB1c2UgbW9kZXJuIGRlY29kZXJzIGZvciBwZXJzaXN0ZW50IGRhdGEuCi0gICAgV2Vi
Q29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhIHRvcE9yaWdpbiwgY2xpZW50T3JpZ2luOwogICAgIFdU
Rjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgZGVjb2RlcihkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCkp
OwogCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZSh0b3BPcmlnaW4ucHJvdG9jb2wpKQorICAgIE9w
dGlvbmFsPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YT4gdG9wT3JpZ2luOworICAgIGRlY29k
ZXIgPj4gdG9wT3JpZ2luOworICAgIGlmICghdG9wT3JpZ2luKQogICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUodG9wT3JpZ2luLmhvc3QpKQorCisg
ICAgT3B0aW9uYWw8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhPiBjbGllbnRPcmlnaW47Cisg
ICAgZGVjb2RlciA+PiBjbGllbnRPcmlnaW47CisgICAgaWYgKCFjbGllbnRPcmlnaW4pCiAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZSh0b3BPcmln
aW4ucG9ydCkpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgaWYgKCFkZWNvZGVy
LmRlY29kZShjbGllbnRPcmlnaW4ucHJvdG9jb2wpKQotICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoY2xpZW50T3JpZ2luLmhvc3QpKQotICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoY2xpZW50T3Jp
Z2luLnBvcnQpKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIHJldHVybiBXZWJD
b3JlOjpDbGllbnRPcmlnaW4geyBXVEZNb3ZlKHRvcE9yaWdpbiksIFdURk1vdmUoY2xpZW50T3Jp
Z2luKSB9OworCisgICAgcmV0dXJuIHt7CisgICAgICAgIFdURk1vdmUoKnRvcE9yaWdpbiksCisg
ICAgICAgIFdURk1vdmUoKmNsaWVudE9yaWdpbikKKyAgICB9fTsKIH0KIAogdm9pZCBDYWNoZXM6
OmluaXRpYWxpemUoV2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OkNvbXBsZXRpb25DYWxsYmFjayYm
IGNhbGxiYWNrKQpAQCAtNDEwLDIzICs0MDksMjYgQEAKIHN0YXRpYyBpbmxpbmUgRXhwZWN0ZWQ8
VmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4+LCBFcnJvcj4gZGVjb2RlQ2FjaGVzTmFt
ZXMoY29uc3QgRGF0YSYgZGF0YSkKIHsKICAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRl
Y29kZXIoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsKLSAgICB1aW50NjRfdCBjb3VudDsKLSAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKGNvdW50KSkKKyAgICBPcHRpb25hbDx1aW50NjRfdD4gY291
bnQ7CisgICAgZGVjb2RlciA+PiBjb3VudDsKKyAgICBpZiAoIWNvdW50KQogICAgICAgICByZXR1
cm4gbWFrZVVuZXhwZWN0ZWQoRXJyb3I6OlJlYWREaXNrKTsKIAogICAgIFZlY3RvcjxzdGQ6OnBh
aXI8U3RyaW5nLCBTdHJpbmc+PiBuYW1lczsKLSAgICBpZiAoIW5hbWVzLnRyeVJlc2VydmVDYXBh
Y2l0eShjb3VudCkpCisgICAgaWYgKCFuYW1lcy50cnlSZXNlcnZlQ2FwYWNpdHkoKmNvdW50KSkK
ICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEVycm9yOjpSZWFkRGlzayk7CiAKLSAgICBm
b3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgY291bnQ7ICsraW5kZXgpIHsKLSAgICAgICAg
U3RyaW5nIG5hbWU7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUobmFtZSkpCisgICAgZm9y
IChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8ICpjb3VudDsgKytpbmRleCkgeworICAgICAgICBP
cHRpb25hbDxTdHJpbmc+IG5hbWU7CisgICAgICAgIGRlY29kZXIgPj4gbmFtZTsKKyAgICAgICAg
aWYgKCFuYW1lKQogICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEVycm9yOjpSZWFk
RGlzayk7Ci0gICAgICAgIFN0cmluZyB1bmlxdWVOYW1lOwotICAgICAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlKHVuaXF1ZU5hbWUpKQorICAgICAgICBPcHRpb25hbDxTdHJpbmc+IHVuaXF1ZU5hbWU7
CisgICAgICAgIGRlY29kZXIgPj4gdW5pcXVlTmFtZTsKKyAgICAgICAgaWYgKCF1bmlxdWVOYW1l
KQogICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEVycm9yOjpSZWFkRGlzayk7CiAK
LSAgICAgICAgbmFtZXMudW5jaGVja2VkQXBwZW5kKHN0ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4g
eyBXVEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKHVuaXF1ZU5hbWUpIH0pOworICAgICAgICBuYW1lcy51
bmNoZWNrZWRBcHBlbmQoeyBXVEZNb3ZlKCpuYW1lKSwgV1RGTW92ZSgqdW5pcXVlTmFtZSkgfSk7
CiAgICAgfQogICAgIHJldHVybiBuYW1lczsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlQ29kZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUNvZGVycy5jcHAJKHJl
dmlzaW9uIDI1NjA4MSkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0
d29ya0NhY2hlQ29kZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsMTcgKzQyLDIwIEBACiAK
IGJvb2wgQ29kZXI8V2ViQ29yZTo6SFRUUEhlYWRlck1hcD46OmRlY29kZShEZWNvZGVyJiBkZWNv
ZGVyLCBXZWJDb3JlOjpIVFRQSGVhZGVyTWFwJiBoZWFkZXJzKQogewotICAgIHVpbnQ2NF90IGhl
YWRlcnNTaXplOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaGVhZGVyc1NpemUpKQorICAgIE9w
dGlvbmFsPHVpbnQ2NF90PiBoZWFkZXJzU2l6ZTsKKyAgICBkZWNvZGVyID4+IGhlYWRlcnNTaXpl
OworICAgIGlmICghaGVhZGVyc1NpemUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBmb3Ig
KHVpbnQ2NF90IGkgPSAwOyBpIDwgaGVhZGVyc1NpemU7ICsraSkgewotICAgICAgICBTdHJpbmcg
bmFtZTsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShuYW1lKSkKKyAgICBmb3IgKHVpbnQ2
NF90IGkgPSAwOyBpIDwgKmhlYWRlcnNTaXplOyArK2kpIHsKKyAgICAgICAgT3B0aW9uYWw8U3Ry
aW5nPiBuYW1lOworICAgICAgICBkZWNvZGVyID4+IG5hbWU7CisgICAgICAgIGlmICghbmFtZSkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgU3RyaW5nIHZhbHVlOwotICAgICAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKHZhbHVlKSkKKyAgICAgICAgT3B0aW9uYWw8U3RyaW5nPiB2
YWx1ZTsKKyAgICAgICAgZGVjb2RlciA+PiB2YWx1ZTsKKyAgICAgICAgaWYgKCF2YWx1ZSkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaGVhZGVycy5hcHBlbmQobmFtZSwgdmFs
dWUpOworICAgICAgICBoZWFkZXJzLmFwcGVuZChXVEZNb3ZlKCpuYW1lKSwgV1RGTW92ZSgqdmFs
dWUpKTsKICAgICB9CiAgICAgcmV0dXJuIHRydWU7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUVudHJ5LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUVudHJ5LmNwcAko
cmV2aXNpb24gMjU2MDgxKQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9O
ZXR3b3JrQ2FjaGVFbnRyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMiwzMCArMTEyLDQyIEBA
CiAgICAgYXV0byBlbnRyeSA9IG1ha2VVbmlxdWU8RW50cnk+KHN0b3JhZ2VFbnRyeSk7CiAKICAg
ICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIoc3RvcmFnZUVudHJ5LmhlYWRlci5k
YXRhKCksIHN0b3JhZ2VFbnRyeS5oZWFkZXIuc2l6ZSgpKTsKLSAgICBpZiAoIWRlY29kZXIuZGVj
b2RlKGVudHJ5LT5tX3Jlc3BvbnNlKSkKKyAgICBPcHRpb25hbDxXZWJDb3JlOjpSZXNvdXJjZVJl
c3BvbnNlPiByZXNwb25zZTsKKyAgICBkZWNvZGVyID4+IHJlc3BvbnNlOworICAgIGlmICghcmVz
cG9uc2UpCiAgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGVudHJ5LT5tX3Jlc3BvbnNlID0g
V1RGTW92ZSgqcmVzcG9uc2UpOwogICAgIGVudHJ5LT5tX3Jlc3BvbnNlLnNldFNvdXJjZShXZWJD
b3JlOjpSZXNvdXJjZVJlc3BvbnNlOjpTb3VyY2U6OkRpc2tDYWNoZSk7CiAKLSAgICBib29sIGhh
c1ZhcnlpbmdSZXF1ZXN0SGVhZGVyczsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGhhc1Zhcnlp
bmdSZXF1ZXN0SGVhZGVycykpCisgICAgT3B0aW9uYWw8Ym9vbD4gaGFzVmFyeWluZ1JlcXVlc3RI
ZWFkZXJzOworICAgIGRlY29kZXIgPj4gaGFzVmFyeWluZ1JlcXVlc3RIZWFkZXJzOworICAgIGlm
ICghaGFzVmFyeWluZ1JlcXVlc3RIZWFkZXJzKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAot
ICAgIGlmIChoYXNWYXJ5aW5nUmVxdWVzdEhlYWRlcnMpIHsKLSAgICAgICAgaWYgKCFkZWNvZGVy
LmRlY29kZShlbnRyeS0+bV92YXJ5aW5nUmVxdWVzdEhlYWRlcnMpKQorICAgIGlmICgqaGFzVmFy
eWluZ1JlcXVlc3RIZWFkZXJzKSB7CisgICAgICAgIE9wdGlvbmFsPFZlY3RvcjxzdGQ6OnBhaXI8
U3RyaW5nLCBTdHJpbmc+Pj4gdmFyeWluZ1JlcXVlc3RIZWFkZXJzOworICAgICAgICBkZWNvZGVy
ID4+IHZhcnlpbmdSZXF1ZXN0SGVhZGVyczsKKyAgICAgICAgaWYgKCF2YXJ5aW5nUmVxdWVzdEhl
YWRlcnMpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgZW50cnktPm1fdmFy
eWluZ1JlcXVlc3RIZWFkZXJzID0gV1RGTW92ZSgqdmFyeWluZ1JlcXVlc3RIZWFkZXJzKTsKICAg
ICB9CiAKLSAgICBib29sIGlzUmVkaXJlY3Q7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShpc1Jl
ZGlyZWN0KSkKKyAgICBPcHRpb25hbDxib29sPiBpc1JlZGlyZWN0OworICAgIGRlY29kZXIgPj4g
aXNSZWRpcmVjdDsKKyAgICBpZiAoIWlzUmVkaXJlY3QpCiAgICAgICAgIHJldHVybiBudWxscHRy
OwogCi0gICAgaWYgKGlzUmVkaXJlY3QpIHsKKyAgICBpZiAoKmlzUmVkaXJlY3QpIHsKICAgICAg
ICAgZW50cnktPm1fcmVkaXJlY3RSZXF1ZXN0LmVtcGxhY2UoKTsKICAgICAgICAgaWYgKCFlbnRy
eS0+bV9yZWRpcmVjdFJlcXVlc3QtPmRlY29kZVdpdGhvdXRQbGF0Zm9ybURhdGEoZGVjb2Rlcikp
CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICBkZWNvZGVyLmRlY29k
ZShlbnRyeS0+bV9tYXhBZ2VDYXApOworICAgIE9wdGlvbmFsPE9wdGlvbmFsPFNlY29uZHM+PiBt
YXhBZ2VDYXA7CisgICAgZGVjb2RlciA+PiBtYXhBZ2VDYXA7CisgICAgaWYgKCFtYXhBZ2VDYXAp
CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGVudHJ5LT5tX21heEFnZUNhcCA9IFdURk1v
dmUoKm1heEFnZUNhcCk7CiAgICAgCiAgICAgaWYgKCFkZWNvZGVyLnZlcmlmeUNoZWNrc3VtKCkp
IHsKICAgICAgICAgTE9HKE5ldHdvcmtDYWNoZSwgIihOZXR3b3JrUHJvY2VzcykgY2hlY2tzdW0g
dmVyaWZpY2F0aW9uIGZhaWx1cmVcbiIpOwpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVLZXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlS2V5LmNwcAkocmV2aXNpb24gMjU2
MDgxKQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVL
ZXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzMsOSArMTczLDQ3IEBACiAgICAgZW5jb2RlciA8
PCBtX3BhcnRpdGlvbkhhc2g7CiB9CiAKLWJvb2wgS2V5OjpkZWNvZGUoV1RGOjpQZXJzaXN0ZW5j
ZTo6RGVjb2RlciYgZGVjb2RlciwgS2V5JiBrZXkpCitPcHRpb25hbDxLZXk+IEtleTo6ZGVjb2Rl
KFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXImIGRlY29kZXIpCiB7Ci0gICAgcmV0dXJuIGRlY29k
ZXIuZGVjb2RlKGtleS5tX3BhcnRpdGlvbikgJiYgZGVjb2Rlci5kZWNvZGUoa2V5Lm1fdHlwZSkg
JiYgZGVjb2Rlci5kZWNvZGUoa2V5Lm1faWRlbnRpZmllcikgJiYgZGVjb2Rlci5kZWNvZGUoa2V5
Lm1fcmFuZ2UpICYmIGRlY29kZXIuZGVjb2RlKGtleS5tX2hhc2gpICYmIGRlY29kZXIuZGVjb2Rl
KGtleS5tX3BhcnRpdGlvbkhhc2gpOworICAgIEtleSBrZXk7CisgICAgCisgICAgT3B0aW9uYWw8
U3RyaW5nPiBwYXJ0aXRpb247CisgICAgZGVjb2RlciA+PiBwYXJ0aXRpb247CisgICAgaWYgKCFw
YXJ0aXRpb24pCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAga2V5Lm1fcGFydGl0
aW9uID0gV1RGTW92ZSgqcGFydGl0aW9uKTsKKworICAgIE9wdGlvbmFsPFN0cmluZz4gdHlwZTsK
KyAgICBkZWNvZGVyID4+IHR5cGU7CisgICAgaWYgKCF0eXBlKQorICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OworICAgIGtleS5tX3R5cGUgPSBXVEZNb3ZlKCp0eXBlKTsKKworICAgIE9wdGlv
bmFsPFN0cmluZz4gaWRlbnRpZmllcjsKKyAgICBkZWNvZGVyID4+IGlkZW50aWZpZXI7CisgICAg
aWYgKCFpZGVudGlmaWVyKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIGtleS5t
X2lkZW50aWZpZXIgPSBXVEZNb3ZlKCppZGVudGlmaWVyKTsKKworICAgIE9wdGlvbmFsPFN0cmlu
Zz4gcmFuZ2U7CisgICAgZGVjb2RlciA+PiByYW5nZTsKKyAgICBpZiAoIXJhbmdlKQorICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIGtleS5tX3JhbmdlID0gV1RGTW92ZSgqcmFuZ2Up
OworCisgICAgT3B0aW9uYWw8SGFzaFR5cGU+IGhhc2g7CisgICAgZGVjb2RlciA+PiBoYXNoOwor
ICAgIGlmICghaGFzaCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBrZXkubV9o
YXNoID0gV1RGTW92ZSgqaGFzaCk7CisKKyAgICBPcHRpb25hbDxIYXNoVHlwZT4gcGFydGl0aW9u
SGFzaDsKKyAgICBkZWNvZGVyID4+IHBhcnRpdGlvbkhhc2g7CisgICAgaWYgKCFwYXJ0aXRpb25I
YXNoKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIGtleS5tX3BhcnRpdGlvbkhh
c2ggPSBXVEZNb3ZlKCpwYXJ0aXRpb25IYXNoKTsKKworICAgIHJldHVybiB7IFdURk1vdmUoa2V5
KSB9OwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05l
dHdvcmtDYWNoZUtleS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvY2FjaGUvTmV0d29ya0NhY2hlS2V5LmgJKHJldmlzaW9uIDI1NjA4MSkKKysrIFNvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlS2V5LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTgzLDcgKzgzLDcgQEAKICAgICBTdHJpbmcgcGFydGl0aW9uSGFzaEFzU3RyaW5nKCkg
Y29uc3QgeyByZXR1cm4gaGFzaEFzU3RyaW5nKG1fcGFydGl0aW9uSGFzaCk7IH0KIAogICAgIHZv
aWQgZW5jb2RlKFdURjo6UGVyc2lzdGVuY2U6OkVuY29kZXImKSBjb25zdDsKLSAgICBzdGF0aWMg
Ym9vbCBkZWNvZGUoV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciYsIEtleSYpOworICAgIHN0YXRp
YyBPcHRpb25hbDxLZXk+IGRlY29kZShXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyJik7CiAKICAg
ICBib29sIG9wZXJhdG9yPT0oY29uc3QgS2V5JikgY29uc3Q7CiAgICAgYm9vbCBvcGVyYXRvciE9
KGNvbnN0IEtleSYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3Jh
Z2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUv
TmV0d29ya0NhY2hlU3RvcmFnZS5jcHAJKHJldmlzaW9uIDI1NjA4MSkKKysrIFNvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQzMiwyNCArNDMyLDU4IEBACiAgICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7CiAg
ICAgZmlsZURhdGEuYXBwbHkoWyZtZXRhRGF0YSwgJnN1Y2Nlc3NdKGNvbnN0IHVpbnQ4X3QqIGRh
dGEsIHNpemVfdCBzaXplKSB7CiAgICAgICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgZGVj
b2RlcihkYXRhLCBzaXplKTsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShtZXRhRGF0YS5j
YWNoZVN0b3JhZ2VWZXJzaW9uKSkKKyAgICAgICAgCisgICAgICAgIE9wdGlvbmFsPHVuc2lnbmVk
PiBjYWNoZVN0b3JhZ2VWZXJzaW9uOworICAgICAgICBkZWNvZGVyID4+IGNhY2hlU3RvcmFnZVZl
cnNpb247CisgICAgICAgIGlmICghY2FjaGVTdG9yYWdlVmVyc2lvbikKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShtZXRhRGF0YS5rZXkpKQor
ICAgICAgICBtZXRhRGF0YS5jYWNoZVN0b3JhZ2VWZXJzaW9uID0gV1RGTW92ZSgqY2FjaGVTdG9y
YWdlVmVyc2lvbik7CisKKyAgICAgICAgT3B0aW9uYWw8S2V5PiBrZXk7CisgICAgICAgIGRlY29k
ZXIgPj4ga2V5OworICAgICAgICBpZiAoIWtleSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShtZXRhRGF0YS50aW1lU3RhbXApKQorICAgICAg
ICBtZXRhRGF0YS5rZXkgPSBXVEZNb3ZlKCprZXkpOworCisgICAgICAgIE9wdGlvbmFsPFdhbGxU
aW1lPiB0aW1lU3RhbXA7CisgICAgICAgIGRlY29kZXIgPj4gdGltZVN0YW1wOworICAgICAgICBp
ZiAoIXRpbWVTdGFtcCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFk
ZWNvZGVyLmRlY29kZShtZXRhRGF0YS5oZWFkZXJIYXNoKSkKKyAgICAgICAgbWV0YURhdGEudGlt
ZVN0YW1wID0gV1RGTW92ZSgqdGltZVN0YW1wKTsKKworICAgICAgICBPcHRpb25hbDxTSEExOjpE
aWdlc3Q+IGhlYWRlckhhc2g7CisgICAgICAgIGRlY29kZXIgPj4gaGVhZGVySGFzaDsKKyAgICAg
ICAgaWYgKCFoZWFkZXJIYXNoKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKG1ldGFEYXRhLmhlYWRlclNpemUpKQorICAgICAgICBtZXRhRGF0
YS5oZWFkZXJIYXNoID0gV1RGTW92ZSgqaGVhZGVySGFzaCk7CisKKyAgICAgICAgT3B0aW9uYWw8
dWludDY0X3Q+IGhlYWRlclNpemU7CisgICAgICAgIGRlY29kZXIgPj4gaGVhZGVyU2l6ZTsKKyAg
ICAgICAgaWYgKCFoZWFkZXJTaXplKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKG1ldGFEYXRhLmJvZHlIYXNoKSkKKyAgICAgICAgbWV0YURh
dGEuaGVhZGVyU2l6ZSA9IFdURk1vdmUoKmhlYWRlclNpemUpOworCisgICAgICAgIE9wdGlvbmFs
PFNIQTE6OkRpZ2VzdD4gYm9keUhhc2g7CisgICAgICAgIGRlY29kZXIgPj4gYm9keUhhc2g7Cisg
ICAgICAgIGlmICghYm9keUhhc2gpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IGlmICghZGVjb2Rlci5kZWNvZGUobWV0YURhdGEuYm9keVNpemUpKQorICAgICAgICBtZXRhRGF0
YS5ib2R5SGFzaCA9IFdURk1vdmUoKmJvZHlIYXNoKTsKKworICAgICAgICBPcHRpb25hbDx1aW50
NjRfdD4gYm9keVNpemU7CisgICAgICAgIGRlY29kZXIgPj4gYm9keVNpemU7CisgICAgICAgIGlm
ICghYm9keVNpemUpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghZGVj
b2Rlci5kZWNvZGUobWV0YURhdGEuaXNCb2R5SW5saW5lKSkKKyAgICAgICAgbWV0YURhdGEuYm9k
eVNpemUgPSBXVEZNb3ZlKCpib2R5U2l6ZSk7CisKKyAgICAgICAgT3B0aW9uYWw8Ym9vbD4gaXNC
b2R5SW5saW5lOworICAgICAgICBkZWNvZGVyID4+IGlzQm9keUlubGluZTsKKyAgICAgICAgaWYg
KCFpc0JvZHlJbmxpbmUpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIG1ldGFE
YXRhLmlzQm9keUlubGluZSA9IFdURk1vdmUoKmlzQm9keUlubGluZSk7CisKICAgICAgICAgaWYg
KCFkZWNvZGVyLnZlcmlmeUNoZWNrc3VtKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisK
ICAgICAgICAgbWV0YURhdGEuaGVhZGVyT2Zmc2V0ID0gZGVjb2Rlci5jdXJyZW50T2Zmc2V0KCk7
CiAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlOwogICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBT
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN1YnJlc291cmNl
c0VudHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2Nh
Y2hlL05ldHdvcmtDYWNoZVN1YnJlc291cmNlc0VudHJ5LmNwcAkocmV2aXNpb24gMjU2MDgxKQor
KysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdWJyZXNv
dXJjZXNFbnRyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDM3ICs0OSw2NSBAQAogICAgIGVu
Y29kZXIgPDwgbV9pc1NhbWVTaXRlOwogICAgIGVuY29kZXIgPDwgbV9maXJzdFBhcnR5Rm9yQ29v
a2llczsKICAgICBlbmNvZGVyIDw8IG1fcmVxdWVzdEhlYWRlcnM7Ci0gICAgZW5jb2Rlci5lbmNv
ZGVFbnVtKG1fcHJpb3JpdHkpOworICAgIGVuY29kZXIgPDwgbV9wcmlvcml0eTsKIH0KIAotYm9v
bCBTdWJyZXNvdXJjZUluZm86OmRlY29kZShXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyJiBkZWNv
ZGVyLCBTdWJyZXNvdXJjZUluZm8mIGluZm8pCitPcHRpb25hbDxTdWJyZXNvdXJjZUluZm8+IFN1
YnJlc291cmNlSW5mbzo6ZGVjb2RlKFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXImIGRlY29kZXIp
CiB7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShpbmZvLm1fa2V5KSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaW5mby5tX2xhc3RTZWVuKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaW5mby5tX2ZpcnN0U2Vl
bikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KGluZm8ubV9pc1RyYW5zaWVudCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKKyAgICBT
dWJyZXNvdXJjZUluZm8gaW5mbzsKKworICAgIE9wdGlvbmFsPEtleT4ga2V5OworICAgIGRlY29k
ZXIgPj4ga2V5OworICAgIGlmICgha2V5KQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owor
ICAgIGluZm8ubV9rZXkgPSBXVEZNb3ZlKCprZXkpOworCisgICAgT3B0aW9uYWw8V2FsbFRpbWU+
IGxhc3RTZWVuOworICAgIGRlY29kZXIgPj4gbGFzdFNlZW47CisgICAgaWYgKCFsYXN0U2VlbikK
KyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBpbmZvLm1fbGFzdFNlZW4gPSBXVEZN
b3ZlKCpsYXN0U2Vlbik7CisKKyAgICBPcHRpb25hbDxXYWxsVGltZT4gZmlyc3RTZWVuOworICAg
IGRlY29kZXIgPj4gZmlyc3RTZWVuOworICAgIGlmICghZmlyc3RTZWVuKQorICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OworICAgIGluZm8ubV9maXJzdFNlZW4gPSBXVEZNb3ZlKCpmaXJzdFNl
ZW4pOworCisgICAgT3B0aW9uYWw8Ym9vbD4gaXNUcmFuc2llbnQ7CisgICAgZGVjb2RlciA+PiBp
c1RyYW5zaWVudDsKKyAgICBpZiAoIWlzVHJhbnNpZW50KQorICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OworICAgIGluZm8ubV9pc1RyYW5zaWVudCA9IFdURk1vdmUoKmlzVHJhbnNpZW50KTsK
KwogICAgIGlmIChpbmZvLm1faXNUcmFuc2llbnQpCi0gICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICByZXR1cm4geyBXVEZNb3ZlKGluZm8pIH07CiAKLSAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KGluZm8ubV9pc1NhbWVTaXRlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIE9wdGlvbmFs
PGJvb2w+IGlzU2FtZVNpdGU7CisgICAgZGVjb2RlciA+PiBpc1NhbWVTaXRlOworICAgIGlmICgh
aXNTYW1lU2l0ZSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBpbmZvLm1faXNT
YW1lU2l0ZSA9IFdURk1vdmUoKmlzU2FtZVNpdGUpOwogCi0gICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShpbmZvLm1fZmlyc3RQYXJ0eUZvckNvb2tpZXMpKQotICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgT3B0aW9uYWw8VVJMPiBmaXJzdFBhcnR5Rm9yQ29va2llczsKKyAgICBkZWNvZGVyID4+IGZp
cnN0UGFydHlGb3JDb29raWVzOworICAgIGlmICghZmlyc3RQYXJ0eUZvckNvb2tpZXMpCisgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgaW5mby5tX2ZpcnN0UGFydHlGb3JDb29raWVz
ID0gV1RGTW92ZSgqZmlyc3RQYXJ0eUZvckNvb2tpZXMpOwogCi0gICAgaWYgKCFkZWNvZGVyLmRl
Y29kZShpbmZvLm1fcmVxdWVzdEhlYWRlcnMpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
T3B0aW9uYWw8V2ViQ29yZTo6SFRUUEhlYWRlck1hcD4gcmVxdWVzdEhlYWRlcnM7CisgICAgZGVj
b2RlciA+PiByZXF1ZXN0SGVhZGVyczsKKyAgICBpZiAoIXJlcXVlc3RIZWFkZXJzKQorICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIGluZm8ubV9yZXF1ZXN0SGVhZGVycyA9IFdURk1v
dmUoKnJlcXVlc3RIZWFkZXJzKTsKIAotICAgIGlmICghZGVjb2Rlci5kZWNvZGVFbnVtKGluZm8u
bV9wcmlvcml0eSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBPcHRpb25hbDxXZWJDb3Jl
OjpSZXNvdXJjZUxvYWRQcmlvcml0eT4gcHJpb3JpdHk7CisgICAgZGVjb2RlciA+PiBwcmlvcml0
eTsKKyAgICBpZiAoIXByaW9yaXR5KQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAg
IGluZm8ubV9wcmlvcml0eSA9IFdURk1vdmUoKnByaW9yaXR5KTsKICAgICAKLSAgICByZXR1cm4g
dHJ1ZTsKKyAgICByZXR1cm4geyBXVEZNb3ZlKGluZm8pIH07CiB9CiAKIGJvb2wgU3VicmVzb3Vy
Y2VJbmZvOjppc0ZpcnN0UGFydHkoKSBjb25zdApAQCAtMTAzLDggKzEzMSwxMSBAQAogICAgIGF1
dG8gZW50cnkgPSBtYWtlVW5pcXVlPFN1YnJlc291cmNlc0VudHJ5PihzdG9yYWdlRW50cnkpOwog
CiAgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyKHN0b3JhZ2VFbnRyeS5oZWFk
ZXIuZGF0YSgpLCBzdG9yYWdlRW50cnkuaGVhZGVyLnNpemUoKSk7Ci0gICAgaWYgKCFkZWNvZGVy
LmRlY29kZShlbnRyeS0+bV9zdWJyZXNvdXJjZXMpKQorICAgIE9wdGlvbmFsPFZlY3RvcjxTdWJy
ZXNvdXJjZUluZm8+PiBzdWJyZXNvdXJjZXM7CisgICAgZGVjb2RlciA+PiBzdWJyZXNvdXJjZXM7
CisgICAgaWYgKCFzdWJyZXNvdXJjZXMpCiAgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGVu
dHJ5LT5tX3N1YnJlc291cmNlcyA9IFdURk1vdmUoKnN1YnJlc291cmNlcyk7CiAKICAgICBpZiAo
IWRlY29kZXIudmVyaWZ5Q2hlY2tzdW0oKSkgewogICAgICAgICBMT0coTmV0d29ya0NhY2hlLCAi
KE5ldHdvcmtQcm9jZXNzKSBjaGVja3N1bSB2ZXJpZmljYXRpb24gZmFpbHVyZVxuIik7CkluZGV4
OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN1YnJlc291
cmNlc0VudHJ5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9j
YWNoZS9OZXR3b3JrQ2FjaGVTdWJyZXNvdXJjZXNFbnRyeS5oCShyZXZpc2lvbiAyNTYwODEpCisr
KyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN1YnJlc291
cmNlc0VudHJ5LmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAKICAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICB2b2lkIGVuY29kZShXVEY6OlBlcnNpc3Rl
bmNlOjpFbmNvZGVyJikgY29uc3Q7Ci0gICAgc3RhdGljIGJvb2wgZGVjb2RlKFdURjo6UGVyc2lz
dGVuY2U6OkRlY29kZXImLCBTdWJyZXNvdXJjZUluZm8mKTsKKyAgICBzdGF0aWMgT3B0aW9uYWw8
U3VicmVzb3VyY2VJbmZvPiBkZWNvZGUoV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciYpOwogCiAg
ICAgU3VicmVzb3VyY2VJbmZvKCkgPSBkZWZhdWx0OwogICAgIFN1YnJlc291cmNlSW5mbyhjb25z
dCBLZXkmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBTdWJyZXNvdXJj
ZUluZm8qIHByZXZpb3VzSW5mbyk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC9Vc2VyRGF0
YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQvVXNlckRhdGEuY3BwCShy
ZXZpc2lvbiAyNTYwODEpCisrKyBTb3VyY2UvV2ViS2l0L1NoYXJlZC9Vc2VyRGF0YS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM2MywxMCArMzYzLDExIEBACiAgICAgICAgIGJyZWFrOwogCiAgICAg
Y2FzZSBBUEk6Ok9iamVjdDo6VHlwZTo6Q2VydGlmaWNhdGVJbmZvOiB7Ci0gICAgICAgIFdlYkNv
cmU6OkNlcnRpZmljYXRlSW5mbyBjZXJ0aWZpY2F0ZUluZm87Ci0gICAgICAgIGlmICghZGVjb2Rl
ci5kZWNvZGUoY2VydGlmaWNhdGVJbmZvKSkKKyAgICAgICAgT3B0aW9uYWw8V2ViQ29yZTo6Q2Vy
dGlmaWNhdGVJbmZvPiBjZXJ0aWZpY2F0ZUluZm87CisgICAgICAgIGRlY29kZXIgPj4gY2VydGlm
aWNhdGVJbmZvOworICAgICAgICBpZiAoIWNlcnRpZmljYXRlSW5mbykKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgcmVzdWx0ID0gV2ViQ2VydGlmaWNhdGVJbmZvOjpjcmVhdGUo
Y2VydGlmaWNhdGVJbmZvKTsKKyAgICAgICAgcmVzdWx0ID0gV2ViQ2VydGlmaWNhdGVJbmZvOjpj
cmVhdGUoKmNlcnRpZmljYXRlSW5mbyk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApJbmRleDog
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUNvbnRlbnRSdWxlTGlzdFN0b3JlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJQ29udGVudFJ1bGVM
aXN0U3RvcmUuY3BwCShyZXZpc2lvbiAyNTYwODEpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQVBJQ29udGVudFJ1bGVMaXN0U3RvcmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzks
MjAgKzE3OSw0OSBAQAogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIFdURjo6
UGVyc2lzdGVuY2U6OkRlY29kZXIgZGVjb2RlcihkYXRhLCBzaXplKTsKLSAgICAgICAgaWYgKCFk
ZWNvZGVyLmRlY29kZShtZXRhRGF0YS52ZXJzaW9uKSkKKyAgICAgICAgCisgICAgICAgIE9wdGlv
bmFsPHVpbnQzMl90PiB2ZXJzaW9uOworICAgICAgICBkZWNvZGVyID4+IHZlcnNpb247CisgICAg
ICAgIGlmICghdmVyc2lvbikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYg
KCFkZWNvZGVyLmRlY29kZShtZXRhRGF0YS5zb3VyY2VTaXplKSkKKyAgICAgICAgbWV0YURhdGEu
dmVyc2lvbiA9IFdURk1vdmUoKnZlcnNpb24pOworCisgICAgICAgIE9wdGlvbmFsPHVpbnQ2NF90
PiBzb3VyY2VTaXplOworICAgICAgICBkZWNvZGVyID4+IHNvdXJjZVNpemU7CisgICAgICAgIGlm
ICghc291cmNlU2l6ZSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFk
ZWNvZGVyLmRlY29kZShtZXRhRGF0YS5hY3Rpb25zU2l6ZSkpCisgICAgICAgIG1ldGFEYXRhLnNv
dXJjZVNpemUgPSBXVEZNb3ZlKCpzb3VyY2VTaXplKTsKKworICAgICAgICBPcHRpb25hbDx1aW50
NjRfdD4gYWN0aW9uc1NpemU7CisgICAgICAgIGRlY29kZXIgPj4gYWN0aW9uc1NpemU7CisgICAg
ICAgIGlmICghYWN0aW9uc1NpemUpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IGlmICghZGVjb2Rlci5kZWNvZGUobWV0YURhdGEuZmlsdGVyc1dpdGhvdXRDb25kaXRpb25zQnl0
ZWNvZGVTaXplKSkKKyAgICAgICAgbWV0YURhdGEuYWN0aW9uc1NpemUgPSBXVEZNb3ZlKCphY3Rp
b25zU2l6ZSk7CisKKyAgICAgICAgT3B0aW9uYWw8dWludDY0X3Q+IGZpbHRlcnNXaXRob3V0Q29u
ZGl0aW9uc0J5dGVjb2RlU2l6ZTsKKyAgICAgICAgZGVjb2RlciA+PiBmaWx0ZXJzV2l0aG91dENv
bmRpdGlvbnNCeXRlY29kZVNpemU7CisgICAgICAgIGlmICghZmlsdGVyc1dpdGhvdXRDb25kaXRp
b25zQnl0ZWNvZGVTaXplKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKG1ldGFEYXRhLmZpbHRlcnNXaXRoQ29uZGl0aW9uc0J5dGVjb2RlU2l6
ZSkpCisgICAgICAgIG1ldGFEYXRhLmZpbHRlcnNXaXRob3V0Q29uZGl0aW9uc0J5dGVjb2RlU2l6
ZSA9IFdURk1vdmUoKmZpbHRlcnNXaXRob3V0Q29uZGl0aW9uc0J5dGVjb2RlU2l6ZSk7CisKKyAg
ICAgICAgT3B0aW9uYWw8dWludDY0X3Q+IGZpbHRlcnNXaXRoQ29uZGl0aW9uc0J5dGVjb2RlU2l6
ZTsKKyAgICAgICAgZGVjb2RlciA+PiBmaWx0ZXJzV2l0aENvbmRpdGlvbnNCeXRlY29kZVNpemU7
CisgICAgICAgIGlmICghZmlsdGVyc1dpdGhDb25kaXRpb25zQnl0ZWNvZGVTaXplKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKG1ldGFEYXRh
LmNvbmRpdGlvbmVkRmlsdGVyc0J5dGVjb2RlU2l6ZSkpCisgICAgICAgIG1ldGFEYXRhLmZpbHRl
cnNXaXRoQ29uZGl0aW9uc0J5dGVjb2RlU2l6ZSA9IFdURk1vdmUoKmZpbHRlcnNXaXRoQ29uZGl0
aW9uc0J5dGVjb2RlU2l6ZSk7CisKKyAgICAgICAgT3B0aW9uYWw8dWludDY0X3Q+IGNvbmRpdGlv
bmVkRmlsdGVyc0J5dGVjb2RlU2l6ZTsKKyAgICAgICAgZGVjb2RlciA+PiBjb25kaXRpb25lZEZp
bHRlcnNCeXRlY29kZVNpemU7CisgICAgICAgIGlmICghY29uZGl0aW9uZWRGaWx0ZXJzQnl0ZWNv
ZGVTaXplKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlKG1ldGFEYXRhLmNvbmRpdGlvbnNBcHBseU9ubHlUb0RvbWFpbikpCisgICAgICAgIG1l
dGFEYXRhLmNvbmRpdGlvbmVkRmlsdGVyc0J5dGVjb2RlU2l6ZSA9IFdURk1vdmUoKmNvbmRpdGlv
bmVkRmlsdGVyc0J5dGVjb2RlU2l6ZSk7CisKKyAgICAgICAgT3B0aW9uYWw8dWludDMyX3Q+IGNv
bmRpdGlvbnNBcHBseU9ubHlUb0RvbWFpbjsKKyAgICAgICAgZGVjb2RlciA+PiBjb25kaXRpb25z
QXBwbHlPbmx5VG9Eb21haW47CisgICAgICAgIGlmICghY29uZGl0aW9uc0FwcGx5T25seVRvRG9t
YWluKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBtZXRhRGF0YS5jb25kaXRp
b25zQXBwbHlPbmx5VG9Eb21haW4gPSBXVEZNb3ZlKCpjb25kaXRpb25zQXBwbHlPbmx5VG9Eb21h
aW4pOworCiAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>390312</attachid>
            <date>2020-02-10 16:36:37 -0800</date>
            <delta_ts>2020-04-10 17:27:33 -0700</delta_ts>
            <desc>sub-patch for WinCairo</desc>
            <filename>windows.diff</filename>
            <type>text/plain</type>
            <size>8947</size>
            <attacher name="Ross Kirsling">ross.kirsling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dlbmVyaWMvS2V5ZWREZWNvZGVy
R2VuZXJpYy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nZW5lcmljL0tleWVkRGVjb2Rl
ckdlbmVyaWMuY3BwCmluZGV4IGMzZTE2ZWRlZWQyLi5iNTBlOGFjMDlmMyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2VuZXJpYy9LZXllZERlY29kZXJHZW5lcmljLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nZW5lcmljL0tleWVkRGVjb2RlckdlbmVyaWMu
Y3BwCkBAIC00OCwzOSArNDgsMzYgQEAgcHJpdmF0ZToKICAgICBIYXNoTWFwPFN0cmluZywgc3Rk
Ojp1bmlxdWVfcHRyPE5vZGU+PiBtX21hcDsKIH07CiAKLXN0YXRpYyBib29sIHJlYWRTdHJpbmco
V1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciYgZGVjb2RlciwgU3RyaW5nJiByZXN1bHQpCitzdGF0
aWMgT3B0aW9uYWw8U3RyaW5nPiByZWFkU3RyaW5nKFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIm
IGRlY29kZXIpCiB7Ci0gICAgc2l6ZV90IHNpemU7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShz
aXplKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghc2l6ZSkgewotICAgICAgICBy
ZXN1bHQgPSBlbXB0eVN0cmluZygpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAg
ICBWZWN0b3I8dWludDhfdD4gYnVmZmVyKHNpemUpOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGVG
aXhlZExlbmd0aERhdGEoYnVmZmVyLmRhdGEoKSwgc2l6ZSkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICByZXN1bHQgPSBTdHJpbmc6OmZyb21VVEY4KGJ1ZmZlci5kYXRhKCksIHNpemUpOwor
ICAgIE9wdGlvbmFsPHNpemVfdD4gc2l6ZTsKKyAgICBkZWNvZGVyID4+IHNpemU7CisgICAgaWYg
KCFzaXplKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIGlmICghc2l6ZS52YWx1
ZSgpKQorICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKKworICAgIFZlY3Rvcjx1aW50OF90
PiBidWZmZXIoc2l6ZS52YWx1ZSgpKTsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5n
dGhEYXRhKGJ1ZmZlci5kYXRhKCksIHNpemUudmFsdWUoKSkpCisgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CisgICAgYXV0byByZXN1bHQgPSBTdHJpbmc6OmZyb21VVEY4KGJ1ZmZlci5kYXRh
KCksIHNpemUudmFsdWUoKSk7CiAgICAgaWYgKHJlc3VsdC5pc051bGwoKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgcmV0dXJuIHRy
dWU7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXN0YXRp
YyBib29sIHJlYWRTaW1wbGVWYWx1ZShXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyJiBkZWNvZGVy
LCBLZXllZERlY29kZXJHZW5lcmljOjpEaWN0aW9uYXJ5JiBkaWN0aW9uYXJ5KQorc3RhdGljIHZv
aWQgcmVhZFNpbXBsZVZhbHVlKFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXImIGRlY29kZXIsIEtl
eWVkRGVjb2RlckdlbmVyaWM6OkRpY3Rpb25hcnkmIGRpY3Rpb25hcnkpCiB7Ci0gICAgU3RyaW5n
IGtleTsKLSAgICBib29sIG9rID0gcmVhZFN0cmluZyhkZWNvZGVyLCBrZXkpOwotICAgIGlmICgh
b2spCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBUIHZhbHVlOwotICAgIG9rID0gZGVjb2Rl
ci5kZWNvZGUodmFsdWUpOwotICAgIGlmICghb2spCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICBkaWN0aW9uYXJ5LmFkZChrZXksIFdURk1vdmUodmFsdWUpKTsKLSAgICByZXR1cm4gdHJ1ZTsK
KyAgICBhdXRvIGtleSA9IHJlYWRTdHJpbmcoZGVjb2Rlcik7CisgICAgaWYgKCFrZXkpCisgICAg
ICAgIHJldHVybjsKKyAgICBPcHRpb25hbDxUPiB2YWx1ZTsKKyAgICBkZWNvZGVyID4+IHZhbHVl
OworICAgIGlmICghdmFsdWUpCisgICAgICAgIHJldHVybjsKKyAgICBkaWN0aW9uYXJ5LmFkZChr
ZXkudmFsdWUoKSwgV1RGTW92ZSh2YWx1ZS52YWx1ZSgpKSk7CiB9CiAKIHN0ZDo6dW5pcXVlX3B0
cjxLZXllZERlY29kZXI+IEtleWVkRGVjb2Rlcjo6ZGVjb2Rlcihjb25zdCB1aW50OF90KiBkYXRh
LCBzaXplX3Qgc2l6ZSkKQEAgLTkxLDgyICs4OCw4MiBAQCBzdGQ6OnVuaXF1ZV9wdHI8S2V5ZWRE
ZWNvZGVyPiBLZXllZERlY29kZXI6OmRlY29kZXIoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90
CiBLZXllZERlY29kZXJHZW5lcmljOjpLZXllZERlY29kZXJHZW5lcmljKGNvbnN0IHVpbnQ4X3Qq
IGRhdGEsIHNpemVfdCBzaXplKQogewogICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgZGVj
b2RlcihkYXRhLCBzaXplKTsKLSAgICBLZXllZEVuY29kZXJHZW5lcmljOjpUeXBlIHR5cGU7Ci0g
ICAgU3RyaW5nIGtleTsKIAogICAgIG1fcm9vdERpY3Rpb25hcnkgPSBtYWtlVW5pcXVlPERpY3Rp
b25hcnk+KCk7CiAgICAgbV9kaWN0aW9uYXJ5U3RhY2suYXBwZW5kKG1fcm9vdERpY3Rpb25hcnku
Z2V0KCkpOwogCi0gICAgYm9vbCBvayA9IHRydWU7Ci0gICAgd2hpbGUgKG9rICYmIGRlY29kZXIu
ZGVjb2RlRW51bSh0eXBlKSkgewotICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICB3aGlsZSAo
dHJ1ZSkgeworICAgICAgICBPcHRpb25hbDxLZXllZEVuY29kZXJHZW5lcmljOjpUeXBlPiB0eXBl
OworICAgICAgICBkZWNvZGVyID4+IHR5cGU7CisgICAgICAgIGlmICghdHlwZSkKKyAgICAgICAg
ICAgIGJyZWFrOworCisgICAgICAgIHN3aXRjaCAodHlwZS52YWx1ZSgpKSB7CiAgICAgICAgIGNh
c2UgS2V5ZWRFbmNvZGVyR2VuZXJpYzo6VHlwZTo6Qnl0ZXM6IHsKLSAgICAgICAgICAgIG9rID0g
cmVhZFN0cmluZyhkZWNvZGVyLCBrZXkpOwotICAgICAgICAgICAgaWYgKCFvaykKKyAgICAgICAg
ICAgIGF1dG8ga2V5ID0gcmVhZFN0cmluZyhkZWNvZGVyKTsKKyAgICAgICAgICAgIGlmICgha2V5
KQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgc2l6ZV90IHNpemU7Ci0gICAg
ICAgICAgICBvayA9IGRlY29kZXIuZGVjb2RlKHNpemUpOwotICAgICAgICAgICAgaWYgKCFvaykK
KyAgICAgICAgICAgIE9wdGlvbmFsPHNpemVfdD4gc2l6ZTsKKyAgICAgICAgICAgIGRlY29kZXIg
Pj4gc2l6ZTsKKyAgICAgICAgICAgIGlmICghc2l6ZSkKICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIFZlY3Rvcjx1aW50OF90PiBidWZmZXIoc2l6ZSk7Ci0gICAgICAgICAgICBv
ayA9IGRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKGJ1ZmZlci5kYXRhKCksIHNpemUpOwot
ICAgICAgICAgICAgaWYgKCFvaykKKyAgICAgICAgICAgIFZlY3Rvcjx1aW50OF90PiBidWZmZXIo
c2l6ZS52YWx1ZSgpKTsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0
aERhdGEoYnVmZmVyLmRhdGEoKSwgc2l6ZS52YWx1ZSgpKSkKICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIG1fZGljdGlvbmFyeVN0YWNrLmxhc3QoKS0+YWRkKGtleSwgV1RGTW92
ZShidWZmZXIpKTsKKyAgICAgICAgICAgIG1fZGljdGlvbmFyeVN0YWNrLmxhc3QoKS0+YWRkKGtl
eS52YWx1ZSgpLCBXVEZNb3ZlKGJ1ZmZlcikpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICAgICAgY2FzZSBLZXllZEVuY29kZXJHZW5lcmljOjpUeXBlOjpCb29sOgotICAgICAg
ICAgICAgb2sgPSByZWFkU2ltcGxlVmFsdWU8Ym9vbD4oZGVjb2RlciwgKm1fZGljdGlvbmFyeVN0
YWNrLmxhc3QoKSk7CisgICAgICAgICAgICByZWFkU2ltcGxlVmFsdWU8Ym9vbD4oZGVjb2Rlciwg
Km1fZGljdGlvbmFyeVN0YWNrLmxhc3QoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSBLZXllZEVuY29kZXJHZW5lcmljOjpUeXBlOjpVSW50MzI6Ci0gICAgICAgICAgICBvayA9
IHJlYWRTaW1wbGVWYWx1ZTx1aW50MzJfdD4oZGVjb2RlciwgKm1fZGljdGlvbmFyeVN0YWNrLmxh
c3QoKSk7CisgICAgICAgICAgICByZWFkU2ltcGxlVmFsdWU8dWludDMyX3Q+KGRlY29kZXIsICpt
X2RpY3Rpb25hcnlTdGFjay5sYXN0KCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgS2V5ZWRFbmNvZGVyR2VuZXJpYzo6VHlwZTo6VUludDY0OgotICAgICAgICAgICAgb2sgPSBy
ZWFkU2ltcGxlVmFsdWU8dWludDY0X3Q+KGRlY29kZXIsICptX2RpY3Rpb25hcnlTdGFjay5sYXN0
KCkpOworICAgICAgICAgICAgcmVhZFNpbXBsZVZhbHVlPHVpbnQ2NF90PihkZWNvZGVyLCAqbV9k
aWN0aW9uYXJ5U3RhY2subGFzdCgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNl
IEtleWVkRW5jb2RlckdlbmVyaWM6OlR5cGU6OkludDMyOgotICAgICAgICAgICAgb2sgPSByZWFk
U2ltcGxlVmFsdWU8aW50MzJfdD4oZGVjb2RlciwgKm1fZGljdGlvbmFyeVN0YWNrLmxhc3QoKSk7
CisgICAgICAgICAgICByZWFkU2ltcGxlVmFsdWU8aW50MzJfdD4oZGVjb2RlciwgKm1fZGljdGlv
bmFyeVN0YWNrLmxhc3QoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBLZXll
ZEVuY29kZXJHZW5lcmljOjpUeXBlOjpJbnQ2NDoKLSAgICAgICAgICAgIG9rID0gcmVhZFNpbXBs
ZVZhbHVlPGludDY0X3Q+KGRlY29kZXIsICptX2RpY3Rpb25hcnlTdGFjay5sYXN0KCkpOworICAg
ICAgICAgICAgcmVhZFNpbXBsZVZhbHVlPGludDY0X3Q+KGRlY29kZXIsICptX2RpY3Rpb25hcnlT
dGFjay5sYXN0KCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgS2V5ZWRFbmNv
ZGVyR2VuZXJpYzo6VHlwZTo6RmxvYXQ6Ci0gICAgICAgICAgICBvayA9IHJlYWRTaW1wbGVWYWx1
ZTxmbG9hdD4oZGVjb2RlciwgKm1fZGljdGlvbmFyeVN0YWNrLmxhc3QoKSk7CisgICAgICAgICAg
ICByZWFkU2ltcGxlVmFsdWU8ZmxvYXQ+KGRlY29kZXIsICptX2RpY3Rpb25hcnlTdGFjay5sYXN0
KCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgS2V5ZWRFbmNvZGVyR2VuZXJp
Yzo6VHlwZTo6RG91YmxlOgotICAgICAgICAgICAgb2sgPSByZWFkU2ltcGxlVmFsdWU8ZG91Ymxl
PihkZWNvZGVyLCAqbV9kaWN0aW9uYXJ5U3RhY2subGFzdCgpKTsKKyAgICAgICAgICAgIHJlYWRT
aW1wbGVWYWx1ZTxkb3VibGU+KGRlY29kZXIsICptX2RpY3Rpb25hcnlTdGFjay5sYXN0KCkpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgS2V5ZWRFbmNvZGVyR2VuZXJpYzo6VHlw
ZTo6U3RyaW5nOiB7Ci0gICAgICAgICAgICBvayA9IHJlYWRTdHJpbmcoZGVjb2Rlciwga2V5KTsK
LSAgICAgICAgICAgIGlmICghb2spCisgICAgICAgICAgICBhdXRvIGtleSA9IHJlYWRTdHJpbmco
ZGVjb2Rlcik7CisgICAgICAgICAgICBpZiAoIWtleSkKICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIFN0cmluZyB2YWx1ZTsKLSAgICAgICAgICAgIG9rID0gcmVhZFN0cmluZyhk
ZWNvZGVyLCB2YWx1ZSk7Ci0gICAgICAgICAgICBpZiAoIW9rKQorICAgICAgICAgICAgYXV0byB2
YWx1ZSA9IHJlYWRTdHJpbmcoZGVjb2Rlcik7CisgICAgICAgICAgICBpZiAoIXZhbHVlKQogICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgbV9kaWN0aW9uYXJ5U3RhY2subGFzdCgp
LT5hZGQoa2V5LCBXVEZNb3ZlKHZhbHVlKSk7CisgICAgICAgICAgICBtX2RpY3Rpb25hcnlTdGFj
ay5sYXN0KCktPmFkZChrZXkudmFsdWUoKSwgV1RGTW92ZSh2YWx1ZS52YWx1ZSgpKSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEtleWVkRW5jb2RlckdlbmVy
aWM6OlR5cGU6OkJlZ2luT2JqZWN0OiB7Ci0gICAgICAgICAgICBvayA9IHJlYWRTdHJpbmcoZGVj
b2Rlciwga2V5KTsKLSAgICAgICAgICAgIGlmICghb2spCisgICAgICAgICAgICBhdXRvIGtleSA9
IHJlYWRTdHJpbmcoZGVjb2Rlcik7CisgICAgICAgICAgICBpZiAoIWtleSkKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIGF1dG8qIGN1cnJlbnREaWN0aW5hcnkgPSBtX2RpY3Rp
b25hcnlTdGFjay5sYXN0KCk7CiAgICAgICAgICAgICBhdXRvIG5ld0RpY3Rpb25hcnkgPSBtYWtl
VW5pcXVlPERpY3Rpb25hcnk+KCk7CiAgICAgICAgICAgICBtX2RpY3Rpb25hcnlTdGFjay5hcHBl
bmQobmV3RGljdGlvbmFyeS5nZXQoKSk7Ci0gICAgICAgICAgICBjdXJyZW50RGljdGluYXJ5LT5h
ZGQoa2V5LCBXVEZNb3ZlKG5ld0RpY3Rpb25hcnkpKTsKKyAgICAgICAgICAgIGN1cnJlbnREaWN0
aW5hcnktPmFkZChrZXkudmFsdWUoKSwgV1RGTW92ZShuZXdEaWN0aW9uYXJ5KSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEtleWVkRW5jb2RlckdlbmVyaWM6
OlR5cGU6OkVuZE9iamVjdDoKICAgICAgICAgICAgIG1fZGljdGlvbmFyeVN0YWNrLnJlbW92ZUxh
c3QoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEtleWVkRW5jb2RlckdlbmVy
aWM6OlR5cGU6OkJlZ2luQXJyYXk6IHsKLSAgICAgICAgICAgIG9rID0gcmVhZFN0cmluZyhkZWNv
ZGVyLCBrZXkpOwotICAgICAgICAgICAgaWYgKCFvaykKKyAgICAgICAgICAgIGF1dG8ga2V5ID0g
cmVhZFN0cmluZyhkZWNvZGVyKTsKKyAgICAgICAgICAgIGlmICgha2V5KQogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgYXV0byBuZXdBcnJheSA9IG1ha2VVbmlxdWU8QXJyYXk+
KCk7CiAgICAgICAgICAgICBtX2FycmF5U3RhY2suYXBwZW5kKG5ld0FycmF5LmdldCgpKTsKLSAg
ICAgICAgICAgIG1fZGljdGlvbmFyeVN0YWNrLmxhc3QoKS0+YWRkKGtleSwgV1RGTW92ZShuZXdB
cnJheSkpOworICAgICAgICAgICAgbV9kaWN0aW9uYXJ5U3RhY2subGFzdCgpLT5hZGQoa2V5LnZh
bHVlKCksIFdURk1vdmUobmV3QXJyYXkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAgICAgICAgIGNhc2UgS2V5ZWRFbmNvZGVyR2VuZXJpYzo6VHlwZTo6QmVnaW5BcnJheUVsZW1l
bnQ6IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9D
ZXJ0aWZpY2F0ZUluZm8uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9D
ZXJ0aWZpY2F0ZUluZm8uaAppbmRleCAyZmI2ZmVjYjhkOS4uNjliOTgxNTczYjYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DZXJ0aWZpY2F0ZUluZm8u
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ2VydGlmaWNhdGVJ
bmZvLmgKQEAgLTgxLDI3ICs4MSwyOSBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBDb2RlcjxXZWJDb3Jl
OjpDZXJ0aWZpY2F0ZUluZm8+IHsKICAgICAgICAgICAgIGVuY29kZXIgPDwgY2VydGlmaWNhdGU7
CiAgICAgfQogCi0gICAgc3RhdGljIGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFdlYkNv
cmU6OkNlcnRpZmljYXRlSW5mbyYgY2VydGlmaWNhdGVJbmZvKQorICAgIHN0YXRpYyBPcHRpb25h
bDxXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8+IGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAg
IHsKLSAgICAgICAgaW50IHZlcmlmaWNhdGlvbkVycm9yOwotICAgICAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlKHZlcmlmaWNhdGlvbkVycm9yKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgT3B0aW9uYWw8aW50PiB2ZXJpZmljYXRpb25FcnJvcjsKKyAgICAgICAgZGVjb2RlciA+
PiB2ZXJpZmljYXRpb25FcnJvcjsKKyAgICAgICAgaWYgKCF2ZXJpZmljYXRpb25FcnJvcikKKyAg
ICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICAgICAgc2l6ZV90IG51bU9mQ2Vy
dCA9IDA7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUobnVtT2ZDZXJ0KSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgT3B0aW9uYWw8c2l6ZV90PiBudW1PZkNlcnRzOwor
ICAgICAgICBkZWNvZGVyID4+IG51bU9mQ2VydHM7CisgICAgICAgIGlmICghbnVtT2ZDZXJ0cykK
KyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICAgICAgV2ViQ29yZTo6Q2Vy
dGlmaWNhdGVJbmZvOjpDZXJ0aWZpY2F0ZUNoYWluIGNlcnRpZmljYXRlQ2hhaW47Ci0gICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtT2ZDZXJ0OyBpKyspIHsKLSAgICAgICAgICAgIFdl
YkNvcmU6OkNlcnRpZmljYXRlSW5mbzo6Q2VydGlmaWNhdGUgY2VydGlmaWNhdGU7Ci0gICAgICAg
ICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGNlcnRpZmljYXRlKSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtT2ZDZXJ0cy52
YWx1ZSgpOyBpKyspIHsKKyAgICAgICAgICAgIE9wdGlvbmFsPFdlYkNvcmU6OkNlcnRpZmljYXRl
SW5mbzo6Q2VydGlmaWNhdGU+IGNlcnRpZmljYXRlOworICAgICAgICAgICAgZGVjb2RlciA+PiBj
ZXJ0aWZpY2F0ZTsKKyAgICAgICAgICAgIGlmICghY2VydGlmaWNhdGUpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgICAgICAgICAgY2VydGlmaWNhdGVDaGFpbi5h
cHBlbmQoV1RGTW92ZShjZXJ0aWZpY2F0ZSkpOworICAgICAgICAgICAgY2VydGlmaWNhdGVDaGFp
bi5hcHBlbmQoV1RGTW92ZShjZXJ0aWZpY2F0ZS52YWx1ZSgpKSk7CiAgICAgICAgIH0KIAotICAg
ICAgICBjZXJ0aWZpY2F0ZUluZm8gPSBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8odmVyaWZpY2F0
aW9uRXJyb3IsIFdURk1vdmUoY2VydGlmaWNhdGVDaGFpbikpOwotICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyh2ZXJpZmljYXRpb25F
cnJvci52YWx1ZSgpLCBXVEZNb3ZlKGNlcnRpZmljYXRlQ2hhaW4pKTsKICAgICB9CiB9OwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>390353</attachid>
            <date>2020-02-11 04:55:50 -0800</date>
            <delta_ts>2020-04-10 17:27:35 -0700</delta_ts>
            <desc>Patch for soup</desc>
            <filename>wk-persitent-decoders-soup.diff</filename>
            <type>text/plain</type>
            <size>2902</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9DZXJ0aWZp
Y2F0ZUluZm8uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9DZXJ0aWZp
Y2F0ZUluZm8uaAppbmRleCA5MzliYWU1ODBhNy4uNGVhYzRjNzZlZmIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9DZXJ0aWZpY2F0ZUluZm8uaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQ2VydGlmaWNhdGVJbmZvLmgK
QEAgLTc2LDE1ICs3NiwxOCBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBDb2RlcjxHUmVmUHRyPEdCeXRl
QXJyYXk+PiB7CiAgICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGJ5dGVBcnJh
eS0+ZGF0YSwgYnl0ZUFycmF5LT5sZW4pOwogICAgIH0KIAotICAgIHN0YXRpYyBib29sIGRlY29k
ZShEZWNvZGVyICZkZWNvZGVyLCBHUmVmUHRyPEdCeXRlQXJyYXk+JiBieXRlQXJyYXkpCisgICAg
c3RhdGljIE9wdGlvbmFsPEdSZWZQdHI8R0J5dGVBcnJheT4+IGRlY29kZShEZWNvZGVyJiBkZWNv
ZGVyKQogICAgIHsKLSAgICAgICAgdWludDMyX3Qgc2l6ZTsKLSAgICAgICAgaWYgKCFkZWNvZGVy
LmRlY29kZShzaXplKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBieXRl
QXJyYXkgPSBhZG9wdEdSZWYoZ19ieXRlX2FycmF5X3NpemVkX25ldyhzaXplKSk7Ci0gICAgICAg
IGdfYnl0ZV9hcnJheV9zZXRfc2l6ZShieXRlQXJyYXkuZ2V0KCksIHNpemUpOwotICAgICAgICBy
ZXR1cm4gZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoYnl0ZUFycmF5LT5kYXRhLCBzaXpl
KTsKKyAgICAgICAgT3B0aW9uYWw8dWludDMyX3Q+IHNpemU7CisgICAgICAgIGRlY29kZXIgPj4g
c2l6ZTsKKyAgICAgICAgaWYgKCFzaXplKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKKworICAgICAgICBHUmVmUHRyPEdCeXRlQXJyYXk+IGJ5dGVBcnJheSA9IGFkb3B0R1JlZihn
X2J5dGVfYXJyYXlfc2l6ZWRfbmV3KCpzaXplKSk7CisgICAgICAgIGdfYnl0ZV9hcnJheV9zZXRf
c2l6ZShieXRlQXJyYXkuZ2V0KCksICpzaXplKTsKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZUZpeGVkTGVuZ3RoRGF0YShieXRlQXJyYXktPmRhdGEsICpzaXplKSkKKyAgICAgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIHJldHVybiBieXRlQXJyYXk7CiAgICAgfQogfTsK
IApAQCAtMTM5LDI1ICsxNDIsMjkgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgQ29kZXI8V2ViQ29yZTo6
Q2VydGlmaWNhdGVJbmZvPiB7CiAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDMy
X3Q+KGNlcnRpZmljYXRlSW5mby50bHNFcnJvcnMoKSk7CiAgICAgfQogCi0gICAgc3RhdGljIGJv
b2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyYgY2Vy
dGlmaWNhdGVJbmZvKQorICAgIHN0YXRpYyBPcHRpb25hbDxXZWJDb3JlOjpDZXJ0aWZpY2F0ZUlu
Zm8+IGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIHsKLSAgICAgICAgVmVjdG9yPEdSZWZQ
dHI8R0J5dGVBcnJheT4+IGNlcnRpZmljYXRlc0RhdGFMaXN0OwotICAgICAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKGNlcnRpZmljYXRlc0RhdGFMaXN0KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgT3B0aW9uYWw8VmVjdG9yPEdSZWZQdHI8R0J5dGVBcnJheT4+PiBjZXJ0aWZp
Y2F0ZXNEYXRhTGlzdDsKKyAgICAgICAgZGVjb2RlciA+PiBjZXJ0aWZpY2F0ZXNEYXRhTGlzdDsK
KyAgICAgICAgaWYgKCFjZXJ0aWZpY2F0ZXNEYXRhTGlzdCkKKyAgICAgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CiAKLSAgICAgICAgaWYgKGNlcnRpZmljYXRlc0RhdGFMaXN0LmlzRW1wdHko
KSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBhdXRvIGNlcnRpZmljYXRlID0g
Y2VydGlmaWNhdGVGcm9tQ2VydGlmaWNhdGVzRGF0YUxpc3QoY2VydGlmaWNhdGVzRGF0YUxpc3Qp
OworICAgICAgICBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8gY2VydGlmaWNhdGVJbmZvOworICAg
ICAgICBpZiAoY2VydGlmaWNhdGVzRGF0YUxpc3QtPmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJl
dHVybiBjZXJ0aWZpY2F0ZUluZm87CisKKyAgICAgICAgYXV0byBjZXJ0aWZpY2F0ZSA9IGNlcnRp
ZmljYXRlRnJvbUNlcnRpZmljYXRlc0RhdGFMaXN0KGNlcnRpZmljYXRlc0RhdGFMaXN0LnZhbHVl
KCkpOwogICAgICAgICBpZiAoIWNlcnRpZmljYXRlKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAgICAgY2VydGlmaWNhdGVJ
bmZvLnNldENlcnRpZmljYXRlKGNlcnRpZmljYXRlLmdldCgpKTsKIAotICAgICAgICB1aW50MzJf
dCB0bHNFcnJvcnM7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUodGxzRXJyb3JzKSkKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgY2VydGlmaWNhdGVJbmZvLnNldFRMU0Vy
cm9ycyhzdGF0aWNfY2FzdDxHVGxzQ2VydGlmaWNhdGVGbGFncz4odGxzRXJyb3JzKSk7CisgICAg
ICAgIE9wdGlvbmFsPHVpbnQzMl90PiB0bHNFcnJvcnM7CisgICAgICAgIGRlY29kZXIgPj4gdGxz
RXJyb3JzOworICAgICAgICBpZiAoIXRsc0Vycm9ycykKKyAgICAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CisgICAgICAgIGNlcnRpZmljYXRlSW5mby5zZXRUTFNFcnJvcnMoc3RhdGljX2Nh
c3Q8R1Rsc0NlcnRpZmljYXRlRmxhZ3M+KCp0bHNFcnJvcnMpKTsKIAotICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgcmV0dXJuIGNlcnRpZmljYXRlSW5mbzsKICAgICB9CiB9OwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>396137</attachid>
            <date>2020-04-10 17:27:42 -0700</date>
            <delta_ts>2020-04-10 17:48:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207497-20200410172740.patch</filename>
            <type>text/plain</type>
            <size>108878</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNTk4OTgpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDM4IEBACisyMDIwLTA0LTEwICBBbGV4IENocmlzdGVuc2VuICA8
YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUGVyc2lzdGVudENvZGVycyBzaG91
bGQgdXNlIG1vZGVybiBkZWNvZGluZyBzeW50YXgKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNzQ5NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF2ZXMgdGhlIHdheSBmb3IgbW9yZSBzZXJpYWxp
emVkIHR5cGVzIHRoYXQgZG8gbm90IGhhdmUgYSBkZWZhdWx0IGNvbnN0cnVjdG9yLgorCisgICAg
ICAgICogd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRDb2Rlci5oOgorICAgICAgICAoV1RGOjpQ
ZXJzaXN0ZW5jZTo6Q29kZXI6OmVuY29kZSk6CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpD
b2Rlcjo6ZGVjb2RlKToKKyAgICAgICAgKiB3dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudENvZGVy
cy5jcHA6CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpDb2RlcjxBdG9tU3RyaW5nPjo6ZGVj
b2RlKToKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkNvZGVyPENTdHJpbmc+OjpkZWNvZGUp
OgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6ZGVjb2RlU3RyaW5nVGV4dCk6CisgICAgICAg
IChXVEY6OlBlcnNpc3RlbmNlOjpDb2RlcjxTdHJpbmc+OjpkZWNvZGUpOgorICAgICAgICAoV1RG
OjpQZXJzaXN0ZW5jZTo6Q29kZXI8U0hBMTo6RGlnZXN0Pjo6ZGVjb2RlKToKKyAgICAgICAgKiB3
dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudENvZGVycy5oOgorICAgICAgICAoV1RGOjpQZXJzaXN0
ZW5jZTo6Q29kZXI8T3B0aW9uYWw8VD4+OjpkZWNvZGUpOgorICAgICAgICAoV1RGOjpQZXJzaXN0
ZW5jZTo6Q29kZXI8U2Vjb25kcz46OmRlY29kZSk6CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNl
OjpDb2RlcjxXYWxsVGltZT46OmRlY29kZSk6CisgICAgICAgICogd3RmL3BlcnNpc3RlbmNlL1Bl
cnNpc3RlbnREZWNvZGVyLmNwcDoKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXI6
OmRlY29kZU51bWJlcik6CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyOjpvcGVy
YXRvcj4+KToKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXI6OmRlY29kZSk6IERl
bGV0ZWQuCisgICAgICAgICogd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnREZWNvZGVyLmg6Cisg
ICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyOjpvcGVyYXRvcj4+KToKKyAgICAgICAg
KFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXI6OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChX
VEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyOjpkZWNvZGVFbnVtKTogRGVsZXRlZC4KKyAgICAgICAg
KiB3dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudEVuY29kZXIuaDoKKyAgICAgICAgKFdURjo6UGVy
c2lzdGVuY2U6OkVuY29kZXI6Om9wZXJhdG9yPDwpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5j
ZTo6RW5jb2Rlcjo6ZW5jb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6
OkVuY29kZXI6OmVuY29kZUVudW0pOiBEZWxldGVkLgorCiAyMDIwLTA0LTEwICBBbGljaWEgQm95
YSBHYXJjw61hICA8YWJveWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBbV1RGXSBEYXRhTXV0ZXg6
IEFkZCBydW5VbmxvY2tlZCgpCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9VUkwuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL3d0Zi9VUkwuaAkocmV2aXNpb24gMjU5ODk4KQorKysgU291cmNlL1dU
Ri93dGYvVVJMLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0OCwxMCArMjQ4LDExIEBAIGJvb2wgVVJM
OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgVVJMJiAKIHRlbXBsYXRlIDxjbGFzcyBEZWNvZGVy
PgogT3B0aW9uYWw8VVJMPiBVUkw6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogewotICAgIFN0
cmluZyBzdHJpbmc7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShzdHJpbmcpKQorICAgIE9wdGlv
bmFsPFN0cmluZz4gc3RyaW5nOworICAgIGRlY29kZXIgPj4gc3RyaW5nOworICAgIGlmICghc3Ry
aW5nKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIHJldHVybiBVUkwoVVJMKCks
IHN0cmluZyk7CisgICAgcmV0dXJuIFVSTChVUkwoKSwgV1RGTW92ZSgqc3RyaW5nKSk7CiB9CiAK
IFdURl9FWFBPUlRfUFJJVkFURSBib29sIGVxdWFsSWdub3JpbmdGcmFnbWVudElkZW50aWZpZXIo
Y29uc3QgVVJMJiwgY29uc3QgVVJMJik7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5j
ZS9QZXJzaXN0ZW50Q29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0
ZW5jZS9QZXJzaXN0ZW50Q29kZXIuaAkocmV2aXNpb24gMjU5ODk4KQorKysgU291cmNlL1dURi93
dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudENvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDE2
ICszMCwxNiBAQCBuYW1lc3BhY2UgUGVyc2lzdGVuY2UgewogCiBjbGFzcyBEZWNvZGVyOwogY2xh
c3MgRW5jb2RlcjsKLSAgICAKKwogdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvZGVyIHsK
ICAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgVCYgdCkKICAg
ICB7CiAgICAgICAgIHQuZW5jb2RlKGVuY29kZXIpOwogICAgIH0KIAotICAgIHN0YXRpYyBXQVJO
X1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgVCYgdCkKKyAgICBz
dGF0aWMgT3B0aW9uYWw8VD4gZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgewotICAgICAg
ICByZXR1cm4gVDo6ZGVjb2RlKGRlY29kZXIsIHQpOworICAgICAgICByZXR1cm4gVDo6ZGVjb2Rl
KGRlY29kZXIpOwogICAgIH0KIH07CiAKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNl
L1BlcnNpc3RlbnRDb2RlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3BlcnNp
c3RlbmNlL1BlcnNpc3RlbnRDb2RlcnMuY3BwCShyZXZpc2lvbiAyNTk4OTgpCisrKyBTb3VyY2Uv
V1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50Q29kZXJzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzcsMTQgKzM3LDE0IEBAIHZvaWQgQ29kZXI8QXRvbVN0cmluZz46OmVuY29kZShFbmNvZGVy
JiAKICAgICBlbmNvZGVyIDw8IGF0b21TdHJpbmcuc3RyaW5nKCk7CiB9CiAKLWJvb2wgQ29kZXI8
QXRvbVN0cmluZz46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBBdG9tU3RyaW5nJiBhdG9tU3Ry
aW5nKQorT3B0aW9uYWw8QXRvbVN0cmluZz4gQ29kZXI8QXRvbVN0cmluZz46OmRlY29kZShEZWNv
ZGVyJiBkZWNvZGVyKQogewotICAgIFN0cmluZyBzdHJpbmc7Ci0gICAgaWYgKCFkZWNvZGVyLmRl
Y29kZShzdHJpbmcpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgT3B0aW9uYWw8U3RyaW5n
PiBzdHJpbmc7CisgICAgZGVjb2RlciA+PiBzdHJpbmc7CisgICAgaWYgKCFzdHJpbmcpCisgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBhdG9tU3RyaW5nID0gc3RyaW5nOwotICAg
IHJldHVybiB0cnVlOworICAgIHJldHVybiB7eyBXVEZNb3ZlKCpzdHJpbmcpIH19OwogfQogCiB2
b2lkIENvZGVyPENTdHJpbmc+OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgQ1N0cmlu
ZyYgc3RyaW5nKQpAQCAtNjAsMzIgKzYwLDMwIEBAIHZvaWQgQ29kZXI8Q1N0cmluZz46OmVuY29k
ZShFbmNvZGVyJiBlbmMKICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVy
cHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihzdHJpbmcuZGF0YSgpKSwgbGVuZ3RoKTsKIH0KIAot
Ym9vbCBDb2RlcjxDU3RyaW5nPjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIENTdHJpbmcmIHJl
c3VsdCkKK09wdGlvbmFsPENTdHJpbmc+IENvZGVyPENTdHJpbmc+OjpkZWNvZGUoRGVjb2RlciYg
ZGVjb2RlcikKIHsKLSAgICB1aW50MzJfdCBsZW5ndGg7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShsZW5ndGgpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgT3B0aW9uYWw8dWludDMyX3Q+
IGxlbmd0aDsKKyAgICBkZWNvZGVyID4+IGxlbmd0aDsKKyAgICBpZiAoIWxlbmd0aCkKKyAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIGlmIChsZW5ndGggPT0gc3RkOjpudW1lcmlj
X2xpbWl0czx1aW50MzJfdD46Om1heCgpKSB7CiAgICAgICAgIC8vIFRoaXMgaXMgdGhlIG51bGwg
c3RyaW5nLgotICAgICAgICByZXN1bHQgPSBDU3RyaW5nKCk7Ci0gICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICByZXR1cm4gQ1N0cmluZygpOwogICAgIH0KIAogICAgIC8vIEJlZm9yZSBhbGxv
Y2F0aW5nIHRoZSBzdHJpbmcsIG1ha2Ugc3VyZSB0aGF0IHRoZSBkZWNvZGVyIGJ1ZmZlciBpcyBi
aWcgZW5vdWdoLgotICAgIGlmICghZGVjb2Rlci5idWZmZXJJc0xhcmdlRW5vdWdoVG9Db250YWlu
PGNoYXI+KGxlbmd0aCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWRlY29kZXIu
YnVmZmVySXNMYXJnZUVub3VnaFRvQ29udGFpbjxjaGFyPigqbGVuZ3RoKSkKKyAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIGNoYXIqIGJ1ZmZlcjsKLSAgICBDU3RyaW5nIHN0cmlu
ZyA9IENTdHJpbmc6Om5ld1VuaW5pdGlhbGl6ZWQobGVuZ3RoLCBidWZmZXIpOwotICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4o
YnVmZmVyKSwgbGVuZ3RoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIENTdHJpbmcgc3Ry
aW5nID0gQ1N0cmluZzo6bmV3VW5pbml0aWFsaXplZCgqbGVuZ3RoLCBidWZmZXIpOworICAgIGlm
ICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDx1aW50OF90
Kj4oYnVmZmVyKSwgKmxlbmd0aCkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAg
ICByZXN1bHQgPSBzdHJpbmc7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIFdURk1vdmUo
c3RyaW5nKTsKIH0KIAotCiB2b2lkIENvZGVyPFN0cmluZz46OmVuY29kZShFbmNvZGVyJiBlbmNv
ZGVyLCBjb25zdCBTdHJpbmcmIHN0cmluZykKIHsKICAgICAvLyBTcGVjaWFsIGNhc2UgdGhlIG51
bGwgc3RyaW5nLgpAQCAtMTA2LDQwICsxMDQsNDAgQEAgdm9pZCBDb2RlcjxTdHJpbmc+OjplbmNv
ZGUoRW5jb2RlciYgZW5jbwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4K
LXN0YXRpYyBpbmxpbmUgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlU3RyaW5nVGV4dChE
ZWNvZGVyJiBkZWNvZGVyLCB1aW50MzJfdCBsZW5ndGgsIFN0cmluZyYgcmVzdWx0KQorc3RhdGlj
IGlubGluZSBPcHRpb25hbDxTdHJpbmc+IGRlY29kZVN0cmluZ1RleHQoRGVjb2RlciYgZGVjb2Rl
ciwgdWludDMyX3QgbGVuZ3RoKQogewogICAgIC8vIEJlZm9yZSBhbGxvY2F0aW5nIHRoZSBzdHJp
bmcsIG1ha2Ugc3VyZSB0aGF0IHRoZSBkZWNvZGVyIGJ1ZmZlciBpcyBiaWcgZW5vdWdoLgogICAg
IGlmICghZGVjb2Rlci5idWZmZXJJc0xhcmdlRW5vdWdoVG9Db250YWluPENoYXJhY3RlclR5cGU+
KGxlbmd0aCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKIAogICAgIENoYXJhY3RlclR5cGUqIGJ1ZmZlcjsKICAgICBTdHJpbmcgc3RyaW5nID0g
U3RyaW5nOjpjcmVhdGVVbmluaXRpYWxpemVkKGxlbmd0aCwgYnVmZmVyKTsKICAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGJ1
ZmZlciksIGxlbmd0aCAqIHNpemVvZihDaGFyYWN0ZXJUeXBlKSkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAKLSAgICByZXN1bHQgPSBz
dHJpbmc7Ci0gICAgcmV0dXJuIHRydWU7ICAgIAorICAgIHJldHVybiBXVEZNb3ZlKHN0cmluZyk7
CiB9CiAKLWJvb2wgQ29kZXI8U3RyaW5nPjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFN0cmlu
ZyYgcmVzdWx0KQorT3B0aW9uYWw8U3RyaW5nPiBDb2RlcjxTdHJpbmc+OjpkZWNvZGUoRGVjb2Rl
ciYgZGVjb2RlcikKIHsKLSAgICB1aW50MzJfdCBsZW5ndGg7Ci0gICAgaWYgKCFkZWNvZGVyLmRl
Y29kZShsZW5ndGgpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgT3B0aW9uYWw8dWludDMy
X3Q+IGxlbmd0aDsKKyAgICBkZWNvZGVyID4+IGxlbmd0aDsKKyAgICBpZiAoIWxlbmd0aCkKKyAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIGlmIChsZW5ndGggPT0gc3RkOjpudW1l
cmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpKSB7CisgICAgaWYgKCpsZW5ndGggPT0gc3RkOjpu
dW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpKSB7CiAgICAgICAgIC8vIFRoaXMgaXMgdGhl
IG51bGwgc3RyaW5nLgotICAgICAgICByZXN1bHQgPSBTdHJpbmcoKTsKLSAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICB9CiAKLSAgICBib29sIGlzOEJp
dDsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGlzOEJpdCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIGlmIChpczhCaXQpCi0gICAgICAgIHJldHVybiBkZWNvZGVTdHJpbmdUZXh0PExD
aGFyPihkZWNvZGVyLCBsZW5ndGgsIHJlc3VsdCk7Ci0gICAgcmV0dXJuIGRlY29kZVN0cmluZ1Rl
eHQ8VUNoYXI+KGRlY29kZXIsIGxlbmd0aCwgcmVzdWx0KTsKKyAgICBPcHRpb25hbDxib29sPiBp
czhCaXQ7CisgICAgZGVjb2RlciA+PiBpczhCaXQ7CisgICAgaWYgKCFpczhCaXQpCisgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBpZiAoKmlzOEJpdCkKKyAgICAgICAgcmV0dXJu
IGRlY29kZVN0cmluZ1RleHQ8TENoYXI+KGRlY29kZXIsICpsZW5ndGgpOworICAgIHJldHVybiBk
ZWNvZGVTdHJpbmdUZXh0PFVDaGFyPihkZWNvZGVyLCAqbGVuZ3RoKTsKIH0KIAogdm9pZCBDb2Rl
cjxTSEExOjpEaWdlc3Q+OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgU0hBMTo6RGln
ZXN0JiBkaWdlc3QpCkBAIC0xNDcsOSArMTQ1LDEyIEBAIHZvaWQgQ29kZXI8U0hBMTo6RGlnZXN0
Pjo6ZW5jb2RlKEVuY29kZXIKICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShkaWdl
c3QuZGF0YSgpLCBzaXplb2YoZGlnZXN0KSk7CiB9CiAKLWJvb2wgQ29kZXI8U0hBMTo6RGlnZXN0
Pjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFNIQTE6OkRpZ2VzdCYgZGlnZXN0KQorT3B0aW9u
YWw8U0hBMTo6RGlnZXN0PiBDb2RlcjxTSEExOjpEaWdlc3Q+OjpkZWNvZGUoRGVjb2RlciYgZGVj
b2RlcikKIHsKLSAgICByZXR1cm4gZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoZGlnZXN0
LmRhdGEoKSwgc2l6ZW9mKGRpZ2VzdCkpOworICAgIFNIQTE6OkRpZ2VzdCB0bXA7CisgICAgaWYg
KCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YSh0bXAuZGF0YSgpLCBzaXplb2YodG1wKSkp
CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcmV0dXJuIFdURk1vdmUodG1wKTsK
IH0KIAogfQpJbmRleDogU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudENvZGVy
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRD
b2RlcnMuaAkocmV2aXNpb24gMjU5ODk4KQorKysgU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2Uv
UGVyc2lzdGVudENvZGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC00NiwxOSArNDYsMTkgQEAgdGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gc3RydWN0IAogICAgICAgICBlbmNvZGVyIDw8
IHBhaXIuZmlyc3QgPDwgcGFpci5zZWNvbmQ7CiAgICAgfQogCi0gICAgc3RhdGljIFdBUk5fVU5V
U0VEX1JFVFVSTiBib29sIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBzdGQ6OnBhaXI8VCwgVT4m
IHBhaXIpCisgICAgc3RhdGljIE9wdGlvbmFsPHN0ZDo6cGFpcjxULCBVPj4gZGVjb2RlKERlY29k
ZXImIGRlY29kZXIpCiAgICAgewotICAgICAgICBUIGZpcnN0OwotICAgICAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKGZpcnN0KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBV
IHNlY29uZDsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShzZWNvbmQpKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIHBhaXIuZmlyc3QgPSBmaXJzdDsKLSAgICAgICAg
cGFpci5zZWNvbmQgPSBzZWNvbmQ7Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBPcHRp
b25hbDxUPiBmaXJzdDsKKyAgICAgICAgZGVjb2RlciA+PiBmaXJzdDsKKyAgICAgICAgaWYgKCFm
aXJzdCkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICAgICAgT3B0aW9u
YWw8VT4gc2Vjb25kOworICAgICAgICBkZWNvZGVyID4+IHNlY29uZDsKKyAgICAgICAgaWYgKCFz
ZWNvbmQpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgICAgIHJldHVy
biB7eyBXVEZNb3ZlKCpmaXJzdCksIFdURk1vdmUoKnNlY29uZCkgfX07CiAgICAgfQogfTsKIApA
QCAtNzQsMjMgKzc0LDIxIEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb2RlcjxPcHRp
b24KICAgICAgICAgZW5jb2RlciA8PCBvcHRpb25hbC52YWx1ZSgpOwogICAgIH0KICAgICAKLSAg
ICBzdGF0aWMgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIs
IE9wdGlvbmFsPFQ+JiBvcHRpb25hbCkKKyAgICBzdGF0aWMgT3B0aW9uYWw8T3B0aW9uYWw8VD4+
IGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIHsKLSAgICAgICAgYm9vbCBpc0VuZ2FnZWQ7
Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaXNFbmdhZ2VkKSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgCi0gICAgICAgIGlmICghaXNFbmdhZ2VkKSB7Ci0gICAgICAg
ICAgICBvcHRpb25hbCA9IFdURjo6bnVsbG9wdDsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICB9CisgICAgICAgIE9wdGlvbmFsPGJvb2w+IGlzRW5nYWdlZDsKKyAgICAgICAgZGVj
b2RlciA+PiBpc0VuZ2FnZWQ7CisgICAgICAgIGlmICghaXNFbmdhZ2VkKQorICAgICAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgaWYgKCEqaXNFbmdhZ2VkKQorICAgICAgICAg
ICAgcmV0dXJuIE9wdGlvbmFsPE9wdGlvbmFsPFQ+PiB7IE9wdGlvbmFsPFQ+IHsgV1RGOjpudWxs
b3B0IH0gfTsKICAgICAgICAgCi0gICAgICAgIFQgdmFsdWU7Ci0gICAgICAgIGlmICghZGVjb2Rl
ci5kZWNvZGUodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBPcHRp
b25hbDxUPiB2YWx1ZTsKKyAgICAgICAgZGVjb2RlciA+PiB2YWx1ZTsKKyAgICAgICAgaWYgKCF2
YWx1ZSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgIAotICAgICAg
ICBvcHRpb25hbCA9IFdURk1vdmUodmFsdWUpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgcmV0dXJuIE9wdGlvbmFsPE9wdGlvbmFsPFQ+PiB7IE9wdGlvbmFsPFQ+IHsgV1RGTW92ZSgq
dmFsdWUpIH0gfTsKICAgICB9CiB9OwogCkBAIC0xMDAsMTkgKzk4LDE5IEBAIHRlbXBsYXRlPHR5
cGVuYW1lIEtleVR5cGUsIHR5cGVuYW1lIFZhbHUKICAgICAgICAgZW5jb2RlciA8PCBwYWlyLmtl
eSA8PCBwYWlyLnZhbHVlOwogICAgIH0KIAotICAgIHN0YXRpYyBXQVJOX1VOVVNFRF9SRVRVUk4g
Ym9vbCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgV1RGOjpLZXlWYWx1ZVBhaXI8S2V5VHlwZSwg
VmFsdWVUeXBlPiYgcGFpcikKKyAgICBzdGF0aWMgT3B0aW9uYWw8V1RGOjpLZXlWYWx1ZVBhaXI8
S2V5VHlwZSwgVmFsdWVUeXBlPj4gZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgewotICAg
ICAgICBLZXlUeXBlIGtleTsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShrZXkpKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIFZhbHVlVHlwZSB2YWx1ZTsKLSAgICAg
ICAgaWYgKCFkZWNvZGVyLmRlY29kZSh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICAgICAgcGFpci5rZXkgPSBrZXk7Ci0gICAgICAgIHBhaXIudmFsdWUgPSB2YWx1ZTsK
LSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIE9wdGlvbmFsPEtleVR5cGU+IGtleTsKKyAg
ICAgICAgZGVjb2RlciA+PiBrZXk7CisgICAgICAgIGlmICgha2V5KQorICAgICAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKKworICAgICAgICBPcHRpb25hbDxWYWx1ZVR5cGU+IHZhbHVlOwor
ICAgICAgICBkZWNvZGVyID4+dmFsdWU7CisgICAgICAgIGlmICghdmFsdWUpCisgICAgICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgICAgIHJldHVybiB7eyBXVEZNb3ZlKCprZXkp
LCBXVEZNb3ZlKCp2YWx1ZSkgfX07CiAgICAgfQogfTsKIApAQCAtMTI2LDI0ICsxMjQsMjQgQEAg
dGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaQogICAgICAgICAgICAgZW5j
b2RlciA8PCB2ZWN0b3JbaV07CiAgICAgfQogCi0gICAgc3RhdGljIFdBUk5fVU5VU0VEX1JFVFVS
TiBib29sIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+
JiB2ZWN0b3IpCisgICAgc3RhdGljIE9wdGlvbmFsPFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT4+
IGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIHsKLSAgICAgICAgdWludDY0X3Qgc2l6ZTsK
LSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShzaXplKSkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgT3B0aW9uYWw8dWludDY0X3Q+IHNpemU7CisgICAgICAgIGRlY29kZXIg
Pj4gc2l6ZTsKKyAgICAgICAgaWYgKCFzaXplKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKIAogICAgICAgICBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+IHRtcDsKLSAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgICAgIFQgZWxlbWVu
dDsKLSAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoZWxlbWVudCkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICB0bXAuYXBwZW5k
KFdURk1vdmUoZWxlbWVudCkpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8ICpzaXpl
OyArK2kpIHsKKyAgICAgICAgICAgIE9wdGlvbmFsPFQ+IGVsZW1lbnQ7CisgICAgICAgICAgICBk
ZWNvZGVyID4+IGVsZW1lbnQ7CisgICAgICAgICAgICBpZiAoIWVsZW1lbnQpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgICAgIHRtcC5hcHBlbmQoV1RGTW92
ZSgqZWxlbWVudCkpOwogICAgICAgICB9CiAKICAgICAgICAgdG1wLnNocmlua1RvRml0KCk7Ci0g
ICAgICAgIHZlY3Rvci5zd2FwKHRtcCk7Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBy
ZXR1cm4gV1RGTW92ZSh0bXApOwogICAgIH0KIH07CiAKQEAgLTE1NCwzMSArMTUyLDMxIEBAIHRl
bXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2kKICAgICAgICAgZW5jb2Rlci5l
bmNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4odmVj
dG9yLmRhdGEoKSksIHZlY3Rvci5zaXplKCkgKiBzaXplb2YoVCkpOwogICAgIH0KICAgICAKLSAg
ICBzdGF0aWMgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIs
IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT4mIHZlY3RvcikKKyAgICBzdGF0aWMgT3B0aW9uYWw8
VmVjdG9yPFQsIGlubGluZUNhcGFjaXR5Pj4gZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAg
ewotICAgICAgICB1aW50NjRfdCBkZWNvZGVkU2l6ZTsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRl
Y29kZShkZWNvZGVkU2l6ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIE9w
dGlvbmFsPHVpbnQ2NF90PiBkZWNvZGVkU2l6ZTsKKyAgICAgICAgZGVjb2RlciA+PiBkZWNvZGVk
U2l6ZTsKKyAgICAgICAgaWYgKCFkZWNvZGVkU2l6ZSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CiAKLSAgICAgICAgaWYgKCFpc0luQm91bmRzPHNpemVfdD4oZGVjb2RlZFNpemUp
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoIWlzSW5Cb3VuZHM8c2l6
ZV90PigqZGVjb2RlZFNpemUpKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAot
ICAgICAgICBhdXRvIHNpemUgPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGRlY29kZWRTaXplKTsKKyAg
ICAgICAgYXV0byBzaXplID0gc3RhdGljX2Nhc3Q8c2l6ZV90PigqZGVjb2RlZFNpemUpOwogCiAg
ICAgICAgIC8vIFNpbmNlIHdlIGtub3cgdGhlIHRvdGFsIHNpemUgb2YgdGhlIGVsZW1lbnRzLCB3
ZSBjYW4gYWxsb2NhdGUgdGhlIHZlY3RvciBpbgogICAgICAgICAvLyBvbmUgZmVsbCBzd29vcC4g
QmVmb3JlIGFsbG9jYXRpbmcgd2UgbXVzdCBob3dldmVyIG1ha2Ugc3VyZSB0aGF0IHRoZSBkZWNv
ZGVyIGJ1ZmZlcgogICAgICAgICAvLyBpcyBiaWcgZW5vdWdoLgogICAgICAgICBpZiAoIWRlY29k
ZXIuYnVmZmVySXNMYXJnZUVub3VnaFRvQ29udGFpbjxUPihzaXplKSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICAgICAg
VmVjdG9yPFQsIGlubGluZUNhcGFjaXR5PiB0ZW1wOwogICAgICAgICB0ZW1wLmdyb3coc2l6ZSk7
CiAKICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJl
dF9jYXN0PHVpbnQ4X3QqPih0ZW1wLmRhdGEoKSksIHNpemUgKiBzaXplb2YoVCkpKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAot
ICAgICAgICB2ZWN0b3Iuc3dhcCh0ZW1wKTsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IHJldHVybiBXVEZNb3ZlKHRlbXApOwogICAgIH0KIH07CiAKQEAgLTE5NCwzMCArMTkyLDMyIEBA
IHRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGUKICAgICAgICAgICAgIGVu
Y29kZXIgPDwgKml0OwogICAgIH0KIAotICAgIHN0YXRpYyBXQVJOX1VOVVNFRF9SRVRVUk4gYm9v
bCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgSGFzaE1hcFR5cGUmIGhhc2hNYXApCisgICAgc3Rh
dGljIE9wdGlvbmFsPEhhc2hNYXBUeXBlPiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKICAgICB7
Ci0gICAgICAgIHVpbnQ2NF90IGhhc2hNYXBTaXplOwotICAgICAgICBpZiAoIWRlY29kZXIuZGVj
b2RlKGhhc2hNYXBTaXplKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgT3B0
aW9uYWw8dWludDY0X3Q+IGhhc2hNYXBTaXplOworICAgICAgICBkZWNvZGVyID4+IGhhc2hNYXBT
aXplOworICAgICAgICBpZiAoIWhhc2hNYXBTaXplKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKIAogICAgICAgICBIYXNoTWFwVHlwZSB0ZW1wSGFzaE1hcDsKLSAgICAgICAgdGVt
cEhhc2hNYXAucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaGFz
aE1hcFNpemUpKTsKLSAgICAgICAgZm9yICh1aW50NjRfdCBpID0gMDsgaSA8IGhhc2hNYXBTaXpl
OyArK2kpIHsKLSAgICAgICAgICAgIEtleUFyZyBrZXk7Ci0gICAgICAgICAgICBNYXBwZWRBcmcg
dmFsdWU7Ci0gICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGtleSkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZSh2YWx1
ZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB0ZW1wSGFzaE1hcC5y
ZXNlcnZlSW5pdGlhbENhcGFjaXR5KHN0YXRpY19jYXN0PHVuc2lnbmVkPigqaGFzaE1hcFNpemUp
KTsKKyAgICAgICAgZm9yICh1aW50NjRfdCBpID0gMDsgaSA8ICpoYXNoTWFwU2l6ZTsgKytpKSB7
CisgICAgICAgICAgICBPcHRpb25hbDxLZXlBcmc+IGtleTsKKyAgICAgICAgICAgIGRlY29kZXIg
Pj4ga2V5OworICAgICAgICAgICAgaWYgKCFrZXkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKKyAgICAgICAgICAgIE9wdGlvbmFsPE1hcHBlZEFyZz4gdmFsdWU7CisgICAg
ICAgICAgICBkZWNvZGVyID4+IHZhbHVlOworICAgICAgICAgICAgaWYgKCF2YWx1ZSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgICAgICAgICBpZiAoIXRlbXBI
YXNoTWFwLmFkZChrZXksIHZhbHVlKS5pc05ld0VudHJ5KSB7CisgICAgICAgICAgICBpZiAoIXRl
bXBIYXNoTWFwLmFkZChXVEZNb3ZlKCprZXkpLCBXVEZNb3ZlKCp2YWx1ZSkpLmlzTmV3RW50cnkp
IHsKICAgICAgICAgICAgICAgICAvLyBUaGUgaGFzaCBtYXAgYWxyZWFkeSBoYXMgdGhlIHNwZWNp
ZmllZCBrZXksIGJhaWwuCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAot
ICAgICAgICBoYXNoTWFwLnN3YXAodGVtcEhhc2hNYXApOwotICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgcmV0dXJuIFdURk1vdmUodGVtcEhhc2hNYXApOwogICAgIH0KIH07CiAKQEAgLTIz
MSwyNiArMjMxLDI3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgSGFzaEEK
ICAgICAgICAgICAgIGVuY29kZXIgPDwgKml0OwogICAgIH0KIAotICAgIHN0YXRpYyBXQVJOX1VO
VVNFRF9SRVRVUk4gYm9vbCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgSGFzaFNldFR5cGUmIGhh
c2hTZXQpCisgICAgc3RhdGljIE9wdGlvbmFsPEhhc2hTZXRUeXBlPiBkZWNvZGUoRGVjb2RlciYg
ZGVjb2RlcikKICAgICB7Ci0gICAgICAgIHVpbnQ2NF90IGhhc2hTZXRTaXplOwotICAgICAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKGhhc2hTZXRTaXplKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgT3B0aW9uYWw8dWludDY0X3Q+IGhhc2hTZXRTaXplOworICAgICAgICBkZWNv
ZGVyID4+IGhhc2hTZXRTaXplOworICAgICAgICBpZiAoIWhhc2hTZXRTaXplKQorICAgICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgICAgICBIYXNoU2V0VHlwZSB0ZW1wSGFzaFNl
dDsKLSAgICAgICAgZm9yICh1aW50NjRfdCBpID0gMDsgaSA8IGhhc2hTZXRTaXplOyArK2kpIHsK
LSAgICAgICAgICAgIEtleUFyZyBrZXk7Ci0gICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KGtleSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBmb3IgKHVpbnQ2
NF90IGkgPSAwOyBpIDwgKmhhc2hTZXRTaXplOyArK2kpIHsKKyAgICAgICAgICAgIE9wdGlvbmFs
PEtleUFyZz4ga2V5OworICAgICAgICAgICAgZGVjb2RlciA+PiBrZXk7CisgICAgICAgICAgICBp
ZiAoIWtleSkKKyAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgICAg
ICAgICBpZiAoIXRlbXBIYXNoU2V0LmFkZChrZXkpLmlzTmV3RW50cnkpIHsKKyAgICAgICAgICAg
IGlmICghdGVtcEhhc2hTZXQuYWRkKFdURk1vdmUoKmtleSkpLmlzTmV3RW50cnkpIHsKICAgICAg
ICAgICAgICAgICAvLyBUaGUgaGFzaCBtYXAgYWxyZWFkeSBoYXMgdGhlIHNwZWNpZmllZCBrZXks
IGJhaWwuCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBo
YXNoU2V0LnN3YXAodGVtcEhhc2hTZXQpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
cmV0dXJuIFdURk1vdmUodGVtcEhhc2hTZXQpOwogICAgIH0KIH07CiAKQEAgLTI2MCwxNCArMjYx
LDEzIEBAIHRlbXBsYXRlPD4gc3RydWN0IENvZGVyPFNlY29uZHM+IHsKICAgICAgICAgZW5jb2Rl
ciA8PCBzZWNvbmRzLnZhbHVlKCk7CiAgICAgfQogCi0gICAgc3RhdGljIFdBUk5fVU5VU0VEX1JF
VFVSTiBib29sIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBTZWNvbmRzJiByZXN1bHQpCisgICAg
c3RhdGljIE9wdGlvbmFsPFNlY29uZHM+IGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIHsK
LSAgICAgICAgZG91YmxlIHZhbHVlOwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHZhbHVl
KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICByZXN1bHQgPSBTZWNvbmRz
KHZhbHVlKTsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIE9wdGlvbmFsPGRvdWJsZT4g
dmFsdWU7CisgICAgICAgIGRlY29kZXIgPj4gdmFsdWU7CisgICAgICAgIGlmICghdmFsdWUpCisg
ICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICByZXR1cm4gU2Vjb25kcygq
dmFsdWUpOwogICAgIH0KIH07CiAKQEAgLTI3NywzNSArMjc3LDM1IEBAIHRlbXBsYXRlPD4gc3Ry
dWN0IENvZGVyPFdhbGxUaW1lPiB7CiAgICAgICAgIGVuY29kZXIgPDwgdGltZS5zZWNvbmRzU2lu
Y2VFcG9jaCgpLnZhbHVlKCk7CiAgICAgfQogCi0gICAgc3RhdGljIFdBUk5fVU5VU0VEX1JFVFVS
TiBib29sIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBXYWxsVGltZSYgcmVzdWx0KQorICAgIHN0
YXRpYyBPcHRpb25hbDxXYWxsVGltZT4gZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgewot
ICAgICAgICBkb3VibGUgdmFsdWU7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUodmFsdWUp
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBPcHRpb25hbDxkb3VibGU+IHZh
bHVlOworICAgICAgICBkZWNvZGVyID4+IHZhbHVlOworICAgICAgICBpZiAoIXZhbHVlKQorICAg
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgICAgICByZXN1bHQgPSBXYWxsVGlt
ZTo6ZnJvbVJhd1NlY29uZHModmFsdWUpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
cmV0dXJuIFdhbGxUaW1lOjpmcm9tUmF3U2Vjb25kcygqdmFsdWUpOwogICAgIH0KIH07CiAKIHRl
bXBsYXRlPD4gc3RydWN0IENvZGVyPEF0b21TdHJpbmc+IHsKICAgICBXVEZfRVhQT1JUX1BSSVZB
VEUgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25zdCBBdG9tU3RyaW5nJik7Ci0gICAg
V1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVyJiwgQXRvbVN0cmlu
ZyYpIFdBUk5fVU5VU0VEX1JFVFVSTjsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIE9w
dGlvbmFsPEF0b21TdHJpbmc+IGRlY29kZShEZWNvZGVyJik7CiB9OwogCiB0ZW1wbGF0ZTw+IHN0
cnVjdCBDb2RlcjxDU3RyaW5nPiB7CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lk
IGVuY29kZShFbmNvZGVyJiwgY29uc3QgQ1N0cmluZyYpOwotICAgIFdURl9FWFBPUlRfUFJJVkFU
RSBzdGF0aWMgYm9vbCBkZWNvZGUoRGVjb2RlciYsIENTdHJpbmcmKSBXQVJOX1VOVVNFRF9SRVRV
Uk47CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBPcHRpb25hbDxDU3RyaW5nPiBkZWNv
ZGUoRGVjb2RlciYpOwogfTsKIAogdGVtcGxhdGU8PiBzdHJ1Y3QgQ29kZXI8U3RyaW5nPiB7CiAg
ICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiwgY29uc3Qg
U3RyaW5nJik7Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGRlY29kZShEZWNv
ZGVyJiwgU3RyaW5nJikgV0FSTl9VTlVTRURfUkVUVVJOOworICAgIFdURl9FWFBPUlRfUFJJVkFU
RSBzdGF0aWMgT3B0aW9uYWw8U3RyaW5nPiBkZWNvZGUoRGVjb2RlciYpOwogfTsKIAogdGVtcGxh
dGU8PiBzdHJ1Y3QgQ29kZXI8U0hBMTo6RGlnZXN0PiB7CiAgICAgV1RGX0VYUE9SVF9QUklWQVRF
IHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiwgY29uc3QgU0hBMTo6RGlnZXN0Jik7Ci0gICAg
V1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVyJiwgU0hBMTo6RGln
ZXN0JikgV0FSTl9VTlVTRURfUkVUVVJOOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMg
T3B0aW9uYWw8U0hBMTo6RGlnZXN0PiBkZWNvZGUoRGVjb2RlciYpOwogfTsKIAogfQpJbmRleDog
U291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudERlY29kZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnREZWNvZGVyLmNwcAko
cmV2aXNpb24gMjU5ODk4KQorKysgU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVu
dERlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw2NSArNTksNjcgQEAgYm9vbCBEZWNv
ZGVyOjpkZWNvZGVGaXhlZExlbmd0aERhdGEodWludAogICAgIHJldHVybiB0cnVlOwogfQogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgotYm9vbCBEZWNvZGVyOjpkZWNvZGVOdW1iZXIoVHlwZSYg
dmFsdWUpCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorRGVjb2RlciYgRGVjb2Rlcjo6ZGVjb2RlTnVt
YmVyKE9wdGlvbmFsPFQ+JiBvcHRpb25hbCkKIHsKLSAgICBpZiAoIWJ1ZmZlcklzTGFyZ2VFbm91
Z2hUb0NvbnRhaW4oc2l6ZW9mKHZhbHVlKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBp
ZiAoIWJ1ZmZlcklzTGFyZ2VFbm91Z2hUb0NvbnRhaW4oc2l6ZW9mKFQpKSkKKyAgICAgICAgcmV0
dXJuICp0aGlzOwogCi0gICAgbWVtY3B5KCZ2YWx1ZSwgbV9idWZmZXJQb3NpdGlvbiwgc2l6ZW9m
KHZhbHVlKSk7Ci0gICAgbV9idWZmZXJQb3NpdGlvbiArPSBzaXplb2YoVHlwZSk7CisgICAgVCB2
YWx1ZTsKKyAgICBtZW1jcHkoJnZhbHVlLCBtX2J1ZmZlclBvc2l0aW9uLCBzaXplb2YoVCkpOwor
ICAgIG1fYnVmZmVyUG9zaXRpb24gKz0gc2l6ZW9mKFQpOwogCiAgICAgRW5jb2Rlcjo6dXBkYXRl
Q2hlY2tzdW1Gb3JOdW1iZXIobV9zaGExLCB2YWx1ZSk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAg
b3B0aW9uYWwgPSB2YWx1ZTsKKyAgICByZXR1cm4gKnRoaXM7CiB9CiAKLWJvb2wgRGVjb2Rlcjo6
ZGVjb2RlKGJvb2wmIHJlc3VsdCkKK0RlY29kZXImIERlY29kZXI6Om9wZXJhdG9yPj4oT3B0aW9u
YWw8Ym9vbD4mIHJlc3VsdCkKIHsKICAgICByZXR1cm4gZGVjb2RlTnVtYmVyKHJlc3VsdCk7CiB9
CiAKLWJvb2wgRGVjb2Rlcjo6ZGVjb2RlKHVpbnQ4X3QmIHJlc3VsdCkKK0RlY29kZXImIERlY29k
ZXI6Om9wZXJhdG9yPj4oT3B0aW9uYWw8dWludDhfdD4mIHJlc3VsdCkKIHsKICAgICByZXR1cm4g
ZGVjb2RlTnVtYmVyKHJlc3VsdCk7CiB9CiAKLWJvb2wgRGVjb2Rlcjo6ZGVjb2RlKHVpbnQxNl90
JiByZXN1bHQpCitEZWNvZGVyJiBEZWNvZGVyOjpvcGVyYXRvcj4+KE9wdGlvbmFsPHVpbnQxNl90
PiYgcmVzdWx0KQogewogICAgIHJldHVybiBkZWNvZGVOdW1iZXIocmVzdWx0KTsKIH0KIAotYm9v
bCBEZWNvZGVyOjpkZWNvZGUoaW50MTZfdCYgcmVzdWx0KQorRGVjb2RlciYgRGVjb2Rlcjo6b3Bl
cmF0b3I+PihPcHRpb25hbDxpbnQxNl90PiYgcmVzdWx0KQogewogICAgIHJldHVybiBkZWNvZGVO
dW1iZXIocmVzdWx0KTsKIH0KIAotYm9vbCBEZWNvZGVyOjpkZWNvZGUodWludDMyX3QmIHJlc3Vs
dCkKK0RlY29kZXImIERlY29kZXI6Om9wZXJhdG9yPj4oT3B0aW9uYWw8dWludDMyX3Q+JiByZXN1
bHQpCiB7CiAgICAgcmV0dXJuIGRlY29kZU51bWJlcihyZXN1bHQpOwogfQogCi1ib29sIERlY29k
ZXI6OmRlY29kZSh1aW50NjRfdCYgcmVzdWx0KQorRGVjb2RlciYgRGVjb2Rlcjo6b3BlcmF0b3I+
PihPcHRpb25hbDx1aW50NjRfdD4mIHJlc3VsdCkKIHsKICAgICByZXR1cm4gZGVjb2RlTnVtYmVy
KHJlc3VsdCk7CiB9CiAKLWJvb2wgRGVjb2Rlcjo6ZGVjb2RlKGludDMyX3QmIHJlc3VsdCkKK0Rl
Y29kZXImIERlY29kZXI6Om9wZXJhdG9yPj4oT3B0aW9uYWw8aW50MzJfdD4mIHJlc3VsdCkKIHsK
ICAgICByZXR1cm4gZGVjb2RlTnVtYmVyKHJlc3VsdCk7CiB9CiAKLWJvb2wgRGVjb2Rlcjo6ZGVj
b2RlKGludDY0X3QmIHJlc3VsdCkKK0RlY29kZXImIERlY29kZXI6Om9wZXJhdG9yPj4oT3B0aW9u
YWw8aW50NjRfdD4mIHJlc3VsdCkKIHsKICAgICByZXR1cm4gZGVjb2RlTnVtYmVyKHJlc3VsdCk7
CiB9CiAKLWJvb2wgRGVjb2Rlcjo6ZGVjb2RlKGZsb2F0JiByZXN1bHQpCitEZWNvZGVyJiBEZWNv
ZGVyOjpvcGVyYXRvcj4+KE9wdGlvbmFsPGZsb2F0PiYgcmVzdWx0KQogewogICAgIHJldHVybiBk
ZWNvZGVOdW1iZXIocmVzdWx0KTsKIH0KIAotYm9vbCBEZWNvZGVyOjpkZWNvZGUoZG91YmxlJiBy
ZXN1bHQpCitEZWNvZGVyJiBEZWNvZGVyOjpvcGVyYXRvcj4+KE9wdGlvbmFsPGRvdWJsZT4mIHJl
c3VsdCkKIHsKICAgICByZXR1cm4gZGVjb2RlTnVtYmVyKHJlc3VsdCk7CiB9CkluZGV4OiBTb3Vy
Y2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RGVjb2Rlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnREZWNvZGVyLmgJKHJldmlzaW9u
IDI1OTg5OCkKKysrIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnREZWNvZGVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDQ3ICs0NSwzNiBAQCBwdWJsaWM6CiAKICAgICBXVEZf
RVhQT1JUX1BSSVZBVEUgYm9vbCBkZWNvZGVGaXhlZExlbmd0aERhdGEodWludDhfdCosIHNpemVf
dCkgV0FSTl9VTlVTRURfUkVUVVJOOwogCi0gICAgV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgZGVj
b2RlKGJvb2wmKSBXQVJOX1VOVVNFRF9SRVRVUk47Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIGJv
b2wgZGVjb2RlKHVpbnQ4X3QmKSBXQVJOX1VOVVNFRF9SRVRVUk47Ci0gICAgV1RGX0VYUE9SVF9Q
UklWQVRFIGJvb2wgZGVjb2RlKHVpbnQxNl90JikgV0FSTl9VTlVTRURfUkVUVVJOOwotICAgIFdU
Rl9FWFBPUlRfUFJJVkFURSBib29sIGRlY29kZSh1aW50MzJfdCYpIFdBUk5fVU5VU0VEX1JFVFVS
TjsKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBkZWNvZGUodWludDY0X3QmKSBXQVJOX1VO
VVNFRF9SRVRVUk47Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgZGVjb2RlKGludDE2X3Qm
KSBXQVJOX1VOVVNFRF9SRVRVUk47Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgZGVjb2Rl
KGludDMyX3QmKSBXQVJOX1VOVVNFRF9SRVRVUk47Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIGJv
b2wgZGVjb2RlKGludDY0X3QmKSBXQVJOX1VOVVNFRF9SRVRVUk47Ci0gICAgV1RGX0VYUE9SVF9Q
UklWQVRFIGJvb2wgZGVjb2RlKGZsb2F0JikgV0FSTl9VTlVTRURfUkVUVVJOOwotICAgIFdURl9F
WFBPUlRfUFJJVkFURSBib29sIGRlY29kZShkb3VibGUmKSBXQVJOX1VOVVNFRF9SRVRVUk47Ci0K
LSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFPiBXQVJOX1VOVVNFRF9SRVRVUk4KLSAgICBhdXRvIGRl
Y29kZShFJiBlKSAtPiBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfZW51bTxFPjo6dmFsdWUsIGJv
b2w+CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIERlY29kZXImIG9wZXJhdG9yPj4oT3B0aW9uYWw8
Ym9vbD4mKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgRGVjb2RlciYgb3BlcmF0b3I+PihPcHRp
b25hbDx1aW50OF90PiYpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBEZWNvZGVyJiBvcGVyYXRv
cj4+KE9wdGlvbmFsPHVpbnQxNl90PiYpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBEZWNvZGVy
JiBvcGVyYXRvcj4+KE9wdGlvbmFsPHVpbnQzMl90PiYpOworICAgIFdURl9FWFBPUlRfUFJJVkFU
RSBEZWNvZGVyJiBvcGVyYXRvcj4+KE9wdGlvbmFsPHVpbnQ2NF90PiYpOworICAgIFdURl9FWFBP
UlRfUFJJVkFURSBEZWNvZGVyJiBvcGVyYXRvcj4+KE9wdGlvbmFsPGludDE2X3Q+Jik7CisgICAg
V1RGX0VYUE9SVF9QUklWQVRFIERlY29kZXImIG9wZXJhdG9yPj4oT3B0aW9uYWw8aW50MzJfdD4m
KTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgRGVjb2RlciYgb3BlcmF0b3I+PihPcHRpb25hbDxp
bnQ2NF90PiYpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBEZWNvZGVyJiBvcGVyYXRvcj4+KE9w
dGlvbmFsPGZsb2F0PiYpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBEZWNvZGVyJiBvcGVyYXRv
cj4+KE9wdGlvbmFsPGRvdWJsZT4mKTsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBz
dGQ6OmVuYWJsZV9pZl90PCFzdGQ6OmlzX2FyaXRobWV0aWM8dHlwZW5hbWUgc3RkOjpyZW1vdmVf
Y29uc3Q8VD4+Ojp2YWx1ZSAmJiAhc3RkOjppc19lbnVtPFQ+Ojp2YWx1ZT4qID0gbnVsbHB0cj4K
KyAgICBEZWNvZGVyJiBvcGVyYXRvcj4+KE9wdGlvbmFsPFQ+JiByZXN1bHQpCiAgICAgewotICAg
ICAgICB1aW50NjRfdCB2YWx1ZTsKLSAgICAgICAgaWYgKCFkZWNvZGUodmFsdWUpKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIWlzVmFsaWRFbnVtPEU+KHZhbHVlKSkK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBlID0gc3RhdGljX2Nhc3Q8RT4o
dmFsdWUpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmVzdWx0ID0gQ29kZXI8VD46
OmRlY29kZSgqdGhpcyk7CisgICAgICAgIHJldHVybiAqdGhpczsKICAgICB9CiAKLSAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBXQVJOX1VOVVNFRF9SRVRVUk4KLSAgICBib29sIGRlY29kZUVudW0o
VCYgcmVzdWx0KQotICAgIHsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoVCkgPD0gOCwg
IkVudW0gdHlwZSBUIG11c3Qgbm90IGJlIGxhcmdlciB0aGFuIDY0IGJpdHMhIik7Ci0KLSAgICAg
ICAgdWludDY0X3QgdmFsdWU7Ci0gICAgICAgIGlmICghZGVjb2RlKHZhbHVlKSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCi0gICAgICAgIHJlc3VsdCA9IHN0YXRpY19jYXN0
PFQ+KHZhbHVlKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4gV0FSTl9VTlVTRURfUkVUVVJOCi0gICAgYXV0byBkZWNvZGUoVCYgdCkgLT4g
c3RkOjplbmFibGVfaWZfdDwhc3RkOjppc19lbnVtPFQ+Ojp2YWx1ZSwgYm9vbD4KKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBFLCBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfZW51bTxFPjo6dmFsdWU+
KiA9IG51bGxwdHI+CisgICAgRGVjb2RlciYgb3BlcmF0b3I+PihPcHRpb25hbDxFPiYgcmVzdWx0
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIENvZGVyPFQ+OjpkZWNvZGUoKnRoaXMsIHQpOworICAg
ICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihFKSA8PSA4LCAiRW51bSB0eXBlIFQgbXVzdCBub3Qg
YmUgbGFyZ2VyIHRoYW4gNjQgYml0cyEiKTsKKyAgICAgICAgT3B0aW9uYWw8dWludDY0X3Q+IHZh
bHVlOworICAgICAgICAqdGhpcyA+PiB2YWx1ZTsKKyAgICAgICAgaWYgKCF2YWx1ZSkKKyAgICAg
ICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgaWYgKCFpc1ZhbGlkRW51bTxFPigqdmFsdWUp
KQorICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICByZXN1bHQgPSBzdGF0aWNfY2Fz
dDxFPigqdmFsdWUpOworICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQogCiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVD4gV0FSTl9VTlVTRURfUkVUVVJOCkBAIC0xMDMsNyArOTIsNyBAQCBwdWJs
aWM6CiAKIHByaXZhdGU6CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgYnVmZmVySXNMYXJn
ZUVub3VnaFRvQ29udGFpbihzaXplX3QpIGNvbnN0IFdBUk5fVU5VU0VEX1JFVFVSTjsKLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPiBib29sIGRlY29kZU51bWJlcihUeXBlJikgV0FSTl9VTlVT
RURfUkVUVVJOOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+IERlY29kZXImIGRlY29kZU51
bWJlcihPcHRpb25hbDxUeXBlPiYpIFdBUk5fVU5VU0VEX1JFVFVSTjsKIAogICAgIGNvbnN0IHVp
bnQ4X3QqIG1fYnVmZmVyOwogICAgIGNvbnN0IHVpbnQ4X3QqIG1fYnVmZmVyUG9zaXRpb247Cklu
ZGV4OiBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RW5jb2Rlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudEVuY29kZXIu
Y3BwCShyZXZpc2lvbiAyNTk4OTgpCisrKyBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJz
aXN0ZW50RW5jb2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDYyICs2Miw2MyBAQCB2b2lk
IEVuY29kZXI6OmVuY29kZUZpeGVkTGVuZ3RoRGF0YShjb25zCiB9CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIFR5cGU+Ci12b2lkIEVuY29kZXI6OmVuY29kZU51bWJlcihUeXBlIHZhbHVlKQorRW5jb2Rl
ciYgRW5jb2Rlcjo6ZW5jb2RlTnVtYmVyKFR5cGUgdmFsdWUpCiB7CiAgICAgRW5jb2Rlcjo6dXBk
YXRlQ2hlY2tzdW1Gb3JOdW1iZXIobV9zaGExLCB2YWx1ZSk7CiAKICAgICB1aW50OF90KiBidWZm
ZXIgPSBncm93KHNpemVvZihUeXBlKSk7CiAgICAgbWVtY3B5KGJ1ZmZlciwgJnZhbHVlLCBzaXpl
b2YoVHlwZSkpOworICAgIHJldHVybiAqdGhpczsKIH0KIAotdm9pZCBFbmNvZGVyOjplbmNvZGUo
Ym9vbCB2YWx1ZSkKK0VuY29kZXImIEVuY29kZXI6Om9wZXJhdG9yPDwoYm9vbCB2YWx1ZSkKIHsK
LSAgICBlbmNvZGVOdW1iZXIodmFsdWUpOworICAgIHJldHVybiBlbmNvZGVOdW1iZXIodmFsdWUp
OwogfQogCi12b2lkIEVuY29kZXI6OmVuY29kZSh1aW50OF90IHZhbHVlKQorRW5jb2RlciYgRW5j
b2Rlcjo6b3BlcmF0b3I8PCh1aW50OF90IHZhbHVlKQogewotICAgIGVuY29kZU51bWJlcih2YWx1
ZSk7CisgICAgcmV0dXJuIGVuY29kZU51bWJlcih2YWx1ZSk7CiB9CiAKLXZvaWQgRW5jb2Rlcjo6
ZW5jb2RlKHVpbnQxNl90IHZhbHVlKQorRW5jb2RlciYgRW5jb2Rlcjo6b3BlcmF0b3I8PCh1aW50
MTZfdCB2YWx1ZSkKIHsKLSAgICBlbmNvZGVOdW1iZXIodmFsdWUpOworICAgIHJldHVybiBlbmNv
ZGVOdW1iZXIodmFsdWUpOwogfQogCi12b2lkIEVuY29kZXI6OmVuY29kZShpbnQxNl90IHZhbHVl
KQorRW5jb2RlciYgRW5jb2Rlcjo6b3BlcmF0b3I8PChpbnQxNl90IHZhbHVlKQogewotICAgIGVu
Y29kZU51bWJlcih2YWx1ZSk7CisgICAgcmV0dXJuIGVuY29kZU51bWJlcih2YWx1ZSk7CiB9CiAK
LXZvaWQgRW5jb2Rlcjo6ZW5jb2RlKHVpbnQzMl90IHZhbHVlKQorRW5jb2RlciYgRW5jb2Rlcjo6
b3BlcmF0b3I8PCh1aW50MzJfdCB2YWx1ZSkKIHsKLSAgICBlbmNvZGVOdW1iZXIodmFsdWUpOwor
ICAgIHJldHVybiBlbmNvZGVOdW1iZXIodmFsdWUpOwogfQogCi12b2lkIEVuY29kZXI6OmVuY29k
ZSh1aW50NjRfdCB2YWx1ZSkKK0VuY29kZXImIEVuY29kZXI6Om9wZXJhdG9yPDwodWludDY0X3Qg
dmFsdWUpCiB7Ci0gICAgZW5jb2RlTnVtYmVyKHZhbHVlKTsKKyAgICByZXR1cm4gZW5jb2RlTnVt
YmVyKHZhbHVlKTsKIH0KIAotdm9pZCBFbmNvZGVyOjplbmNvZGUoaW50MzJfdCB2YWx1ZSkKK0Vu
Y29kZXImIEVuY29kZXI6Om9wZXJhdG9yPDwoaW50MzJfdCB2YWx1ZSkKIHsKLSAgICBlbmNvZGVO
dW1iZXIodmFsdWUpOworICAgIHJldHVybiBlbmNvZGVOdW1iZXIodmFsdWUpOwogfQogCi12b2lk
IEVuY29kZXI6OmVuY29kZShpbnQ2NF90IHZhbHVlKQorRW5jb2RlciYgRW5jb2Rlcjo6b3BlcmF0
b3I8PChpbnQ2NF90IHZhbHVlKQogewotICAgIGVuY29kZU51bWJlcih2YWx1ZSk7CisgICAgcmV0
dXJuIGVuY29kZU51bWJlcih2YWx1ZSk7CiB9CiAKLXZvaWQgRW5jb2Rlcjo6ZW5jb2RlKGZsb2F0
IHZhbHVlKQorRW5jb2RlciYgRW5jb2Rlcjo6b3BlcmF0b3I8PChmbG9hdCB2YWx1ZSkKIHsKLSAg
ICBlbmNvZGVOdW1iZXIodmFsdWUpOworICAgIHJldHVybiBlbmNvZGVOdW1iZXIodmFsdWUpOwog
fQogCi12b2lkIEVuY29kZXI6OmVuY29kZShkb3VibGUgdmFsdWUpCitFbmNvZGVyJiBFbmNvZGVy
OjpvcGVyYXRvcjw8KGRvdWJsZSB2YWx1ZSkKIHsKLSAgICBlbmNvZGVOdW1iZXIodmFsdWUpOwor
ICAgIHJldHVybiBlbmNvZGVOdW1iZXIodmFsdWUpOwogfQogCiB2b2lkIEVuY29kZXI6OmVuY29k
ZUNoZWNrc3VtKCkKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRF
bmNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lz
dGVudEVuY29kZXIuaAkocmV2aXNpb24gMjU5ODk4KQorKysgU291cmNlL1dURi93dGYvcGVyc2lz
dGVuY2UvUGVyc2lzdGVudEVuY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsMzIgKzQ1LDMx
IEBAIHB1YmxpYzoKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBlbmNvZGVDaGVja3N1bSgp
OwogICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGVuY29kZUZpeGVkTGVuZ3RoRGF0YShjb25z
dCB1aW50OF90Kiwgc2l6ZV90KTsKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEU+IGF1dG8gZW5j
b2RlKEUgdmFsdWUpIC0+IHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19lbnVtPEU+Ojp2YWx1ZT4K
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfZW51bTxU
Pjo6dmFsdWU+KiA9IG51bGxwdHI+CisgICAgRW5jb2RlciYgb3BlcmF0b3I8PChjb25zdCBUJiB0
KQogICAgIHsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoRSkgPD0gc2l6ZW9mKHVpbnQ2
NF90KSwgIkVudW0gdHlwZSBtdXN0IG5vdCBiZSBsYXJnZXIgdGhhbiA2NCBiaXRzLiIpOwotCi0g
ICAgICAgIEFTU0VSVChpc1ZhbGlkRW51bTxFPihzdGF0aWNfY2FzdDx1aW50NjRfdD4odmFsdWUp
KSk7Ci0gICAgICAgIGVuY29kZShzdGF0aWNfY2FzdDx1aW50NjRfdD4odmFsdWUpKTsKLSAgICB9
Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIGVuY29kZUVudW0oVCB0KQotICAgIHsK
LSAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFQpIDw9IHNpemVvZih1aW50NjRfdCksIGVu
dW1fdHlwZV9tdXN0X25vdF9iZV9sYXJnZXJfdGhhbl82NF9iaXRzKTsKLQotICAgICAgICBlbmNv
ZGUoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHQpKTsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzaXpl
b2YoVCkgPD0gc2l6ZW9mKHVpbnQ2NF90KSwgIkVudW0gdHlwZSBtdXN0IG5vdCBiZSBsYXJnZXIg
dGhhbiA2NCBiaXRzLiIpOworICAgICAgICByZXR1cm4gKnRoaXMgPDwgc3RhdGljX2Nhc3Q8dWlu
dDY0X3Q+KHQpOwogICAgIH0KIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGF1dG8gZW5jb2Rl
KGNvbnN0IFQmIHQpIC0+IHN0ZDo6ZW5hYmxlX2lmX3Q8IXN0ZDo6aXNfZW51bTxUPjo6dmFsdWU+
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc3RkOjplbmFibGVfaWZfdDwhc3RkOjppc19lbnVt
PFQ+Ojp2YWx1ZSAmJiAhc3RkOjppc19hcml0aG1ldGljPHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX2Nv
bnN0PFQ+Pjo6dmFsdWU+KiA9IG51bGxwdHI+CisgICAgRW5jb2RlciYgb3BlcmF0b3I8PChjb25z
dCBUJiB0KQogICAgIHsKICAgICAgICAgQ29kZXI8VD46OmVuY29kZSgqdGhpcywgdCk7Ci0gICAg
fQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gRW5jb2RlciYgb3BlcmF0b3I8PChjb25zdCBU
JiB0KQotICAgIHsKLSAgICAgICAgZW5jb2RlKHQpOwogICAgICAgICByZXR1cm4gKnRoaXM7CiAg
ICAgfQogCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIEVuY29kZXImIG9wZXJhdG9yPDwoYm9vbCk7
CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIEVuY29kZXImIG9wZXJhdG9yPDwodWludDhfdCk7Cisg
ICAgV1RGX0VYUE9SVF9QUklWQVRFIEVuY29kZXImIG9wZXJhdG9yPDwodWludDE2X3QpOworICAg
IFdURl9FWFBPUlRfUFJJVkFURSBFbmNvZGVyJiBvcGVyYXRvcjw8KHVpbnQzMl90KTsKKyAgICBX
VEZfRVhQT1JUX1BSSVZBVEUgRW5jb2RlciYgb3BlcmF0b3I8PCh1aW50NjRfdCk7CisgICAgV1RG
X0VYUE9SVF9QUklWQVRFIEVuY29kZXImIG9wZXJhdG9yPDwoaW50MTZfdCk7CisgICAgV1RGX0VY
UE9SVF9QUklWQVRFIEVuY29kZXImIG9wZXJhdG9yPDwoaW50MzJfdCk7CisgICAgV1RGX0VYUE9S
VF9QUklWQVRFIEVuY29kZXImIG9wZXJhdG9yPDwoaW50NjRfdCk7CisgICAgV1RGX0VYUE9SVF9Q
UklWQVRFIEVuY29kZXImIG9wZXJhdG9yPDwoZmxvYXQpOworICAgIFdURl9FWFBPUlRfUFJJVkFU
RSBFbmNvZGVyJiBvcGVyYXRvcjw8KGRvdWJsZSk7CisKICAgICBjb25zdCB1aW50OF90KiBidWZm
ZXIoKSBjb25zdCB7IHJldHVybiBtX2J1ZmZlci5kYXRhKCk7IH0KICAgICBzaXplX3QgYnVmZmVy
U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYnVmZmVyLnNpemUoKTsgfQogCkBAIC04MCwxOCArNzks
OCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSVBDRW5jb2RlciA9IGZh
bHNlOwogCiBwcml2YXRlOgotICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGVuY29kZShib29s
KTsKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBlbmNvZGUodWludDhfdCk7Ci0gICAgV1RG
X0VYUE9SVF9QUklWQVRFIHZvaWQgZW5jb2RlKHVpbnQxNl90KTsKLSAgICBXVEZfRVhQT1JUX1BS
SVZBVEUgdm9pZCBlbmNvZGUodWludDMyX3QpOwotICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lk
IGVuY29kZSh1aW50NjRfdCk7Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZW5jb2RlKGlu
dDE2X3QpOwotICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGVuY29kZShpbnQzMl90KTsKLSAg
ICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBlbmNvZGUoaW50NjRfdCk7Ci0gICAgV1RGX0VYUE9S
VF9QUklWQVRFIHZvaWQgZW5jb2RlKGZsb2F0KTsKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBlbmNvZGUoZG91YmxlKTsKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+IHZvaWQgZW5j
b2RlTnVtYmVyKFR5cGUpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+IEVuY29kZXImIGVu
Y29kZU51bWJlcihUeXBlKTsKIAogICAgIHVpbnQ4X3QqIGdyb3coc2l6ZV90KTsKIApJbmRleDog
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwkocmV2aXNpb24gMjU5ODk4KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzMgQEAKKzIwMjAtMDQtMTAgIEFsZXggQ2hyaXN0ZW5z
ZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBQZXJzaXN0ZW50Q29kZXJz
IHNob3VsZCB1c2UgbW9kZXJuIGRlY29kaW5nIHN5bnRheAorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA3NDk3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRI
b3N0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kSG9zdDo6c2hvd0Nl
cnRpZmljYXRlKToKKyAgICAgICAgKiBsb2FkZXIvRmV0Y2hPcHRpb25zLmg6CisgICAgICAgIChX
ZWJDb3JlOjpGZXRjaE9wdGlvbnM6OmRlY29kZVBlcnNpc3RlbnQpOgorICAgICAgICAqIHBhZ2Uv
Y3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeVJlc3BvbnNlSGVhZGVycy5oOgorICAgICAgICAoV2Vi
Q29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5UmVzcG9uc2VIZWFkZXJzOjplbmNvZGUgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5UmVzcG9uc2VIZWFkZXJz
OjpkZWNvZGUpOgorICAgICAgICAqIHBsYXRmb3JtL1Bhc3RlYm9hcmRDdXN0b21EYXRhLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmRDdXN0b21EYXRhOjpmcm9tU2hhcmVkQnVmZmVy
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlTG9hZFByaW9yaXR5Lmg6Cisg
ICAgICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmg6CisgICAgICAg
IChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RCYXNlOjplbmNvZGVCYXNlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdEJhc2U6OmRlY29kZUJhc2UpOgorICAgICAgICAq
IHBsYXRmb3JtL25ldHdvcmsvY2YvQ2VydGlmaWNhdGVJbmZvLmg6CisgICAgICAgIChXVEY6OlBl
cnNpc3RlbmNlOjpkZWNvZGVDRkRhdGEpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6ZGVj
b2RlU2VjVHJ1c3RSZWYpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6ZGVjb2RlQ2VydGlm
aWNhdGVDaGFpbik6CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpDb2RlcjxXZWJDb3JlOjpD
ZXJ0aWZpY2F0ZUluZm8+OjplbmNvZGUpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6Q29k
ZXI8V2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvPjo6ZGVjb2RlKToKKyAgICAgICAgKiB3b3JrZXJz
L3NlcnZpY2Uvc2VydmVyL1JlZ2lzdHJhdGlvbkRhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlZ2lzdHJhdGlvbkRhdGFiYXNlOjpkb1B1c2hDaGFuZ2VzKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlZ2lzdHJhdGlvbkRhdGFiYXNlOjppbXBvcnRSZWNvcmRzKToKKwogMjAyMC0wNC0xMCAg
QW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgW0NTUyBTaGFkb3cg
UGFydHNdIEJhZCBzdHlsZSBzaGFyaW5nIGJldHdlZW4gc2libGluZyBlbGVtZW50cyB3aXRoIGRp
ZmZlcmVudCBwYXJ0IGF0dHJpYnV0ZXMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwCShyZXZpc2lvbiAyNTk4OTgpCisrKyBT
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjAsNiArNjAsNyBAQAogI2luY2x1ZGUgPHBhbC9zeXN0ZW0vU291bmQuaD4K
ICNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMu
aD4KKyNpbmNsdWRlIDx3dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudERlY29kZXIuaD4KICNpbmNs
dWRlIDx3dGYvdGV4dC9CYXNlNjQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNTc0LDE1
ICs1NzUsMTYgQEAgYm9vbCBJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OnNob3dDZXJ0aWZpYwogICAg
IGlmICghYmFzZTY0RGVjb2RlKHNlcmlhbGl6ZWRDZXJ0aWZpY2F0ZSwgZGF0YSkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIENlcnRpZmljYXRlSW5mbyBjZXJ0aWZpY2F0ZUluZm87CiAg
ICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyKGRhdGEuZGF0YSgpLCBkYXRhLnNp
emUoKSk7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShjZXJ0aWZpY2F0ZUluZm8pKQorICAgIE9w
dGlvbmFsPENlcnRpZmljYXRlSW5mbz4gY2VydGlmaWNhdGVJbmZvOworICAgIGRlY29kZXIgPj4g
Y2VydGlmaWNhdGVJbmZvOworICAgIGlmICghY2VydGlmaWNhdGVJbmZvKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBpZiAoY2VydGlmaWNhdGVJbmZvLmlzRW1wdHkoKSkKKyAgICBpZiAo
Y2VydGlmaWNhdGVJbmZvLT5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IG1fY2xpZW50LT5zaG93Q2VydGlmaWNhdGUoY2VydGlmaWNhdGVJbmZvKTsKKyAgICBtX2NsaWVu
dC0+c2hvd0NlcnRpZmljYXRlKCpjZXJ0aWZpY2F0ZUluZm8pOwogICAgIHJldHVybiB0cnVlOwog
fQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rvck5ldHdv
cmtBZ2VudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50
cy9JbnNwZWN0b3JOZXR3b3JrQWdlbnQuY3BwCShyZXZpc2lvbiAyNTk4OTgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rvck5ldHdvcmtBZ2VudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTk2OSw3ICs5NjksNyBAQCB2b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6
Z2V0U2VyaWFsaXplCiAgICAgfQogCiAgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2RlciBlbmNv
ZGVyOwotICAgIGVuY29kZXIgPDwgY2VydGlmaWNhdGUudmFsdWUoKTsKKyAgICBXVEY6OlBlcnNp
c3RlbmNlOjpDb2RlcjxXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8+OjplbmNvZGUoZW5jb2Rlciwg
Y2VydGlmaWNhdGUudmFsdWUoKSk7CiAgICAgKnNlcmlhbGl6ZWRDZXJ0aWZpY2F0ZSA9IGJhc2U2
NEVuY29kZShlbmNvZGVyLmJ1ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNpemUoKSk7CiB9CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9GZXRjaE9wdGlvbnMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9sb2FkZXIvRmV0Y2hPcHRpb25zLmgJKHJldmlzaW9uIDI1OTg5OCkKKysr
IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9GZXRjaE9wdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAt
MTY3LDcgKzE2Nyw4IEBAIHRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6RmUK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiBpbmxpbmUg
dm9pZCBGZXRjaE9wdGlvbnM6OmVuY29kZVBlcnNpc3RlbnQoRW5jb2RlciYgZW5jb2RlcikgY29u
c3QKK3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+CitpbmxpbmUgdm9pZCBGZXRjaE9wdGlvbnM6OmVu
Y29kZVBlcnNpc3RlbnQoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIHsKICAgICAvLyBDaGFuZ2Vz
IHRvIGVuY29kaW5nIGhlcmUgc2hvdWxkIGJ1bXAgTmV0d29ya0NhY2hlIFN0b3JhZ2UgZm9ybWF0
IHZlcnNpb24uCiAgICAgZW5jb2RlciA8PCBkZXN0aW5hdGlvbjsKQEAgLTE4MCw1OSArMTgxLDcw
IEBAIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IGlubGluZSB2b2lkIEZldGMKICAgICBlbmNvZGVy
IDw8IGtlZXBBbGl2ZTsKIH0KIAotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gaW5saW5lIGJvb2wg
RmV0Y2hPcHRpb25zOjpkZWNvZGVQZXJzaXN0ZW50KERlY29kZXImIGRlY29kZXIsIEZldGNoT3B0
aW9ucyYgb3B0aW9ucykKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+CitpbmxpbmUgV0FSTl9VTlVT
RURfUkVUVVJOIGJvb2wgRmV0Y2hPcHRpb25zOjpkZWNvZGVQZXJzaXN0ZW50KERlY29kZXImIGRl
Y29kZXIsIEZldGNoT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBGZXRjaE9wdGlvbnM6OkRlc3Rp
bmF0aW9uIGRlc3RpbmF0aW9uOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoZGVzdGluYXRpb24p
KQorICAgIE9wdGlvbmFsPEZldGNoT3B0aW9uczo6RGVzdGluYXRpb24+IGRlc3RpbmF0aW9uOwor
ICAgIGRlY29kZXIgPj4gZGVzdGluYXRpb247CisgICAgaWYgKCFkZXN0aW5hdGlvbikKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgRmV0Y2hPcHRpb25zOjpNb2RlIG1vZGU7Ci0gICAgaWYg
KCFkZWNvZGVyLmRlY29kZShtb2RlKSkKKyAgICBPcHRpb25hbDxGZXRjaE9wdGlvbnM6Ok1vZGU+
IG1vZGU7CisgICAgZGVjb2RlciA+PiBtb2RlOworICAgIGlmICghbW9kZSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgRmV0Y2hPcHRpb25zOjpDcmVkZW50aWFscyBjcmVkZW50aWFsczsK
LSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGNyZWRlbnRpYWxzKSkKKyAgICBPcHRpb25hbDxGZXRj
aE9wdGlvbnM6OkNyZWRlbnRpYWxzPiBjcmVkZW50aWFsczsKKyAgICBkZWNvZGVyID4+IGNyZWRl
bnRpYWxzOworICAgIGlmICghY3JlZGVudGlhbHMpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIEZldGNoT3B0aW9uczo6Q2FjaGUgY2FjaGU7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShj
YWNoZSkpCisgICAgT3B0aW9uYWw8RmV0Y2hPcHRpb25zOjpDYWNoZT4gY2FjaGU7CisgICAgZGVj
b2RlciA+PiBjYWNoZTsKKyAgICBpZiAoIWNhY2hlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICBGZXRjaE9wdGlvbnM6OlJlZGlyZWN0IHJlZGlyZWN0OwotICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUocmVkaXJlY3QpKQorICAgIE9wdGlvbmFsPEZldGNoT3B0aW9uczo6UmVkaXJlY3Q+IHJl
ZGlyZWN0OworICAgIGRlY29kZXIgPj4gcmVkaXJlY3Q7CisgICAgaWYgKCFyZWRpcmVjdCkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgUmVmZXJyZXJQb2xpY3kgcmVmZXJyZXJQb2xpY3k7
Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZWZlcnJlclBvbGljeSkpCisgICAgT3B0aW9uYWw8
UmVmZXJyZXJQb2xpY3k+IHJlZmVycmVyUG9saWN5OworICAgIGRlY29kZXIgPj4gcmVmZXJyZXJQ
b2xpY3k7CisgICAgaWYgKCFyZWZlcnJlclBvbGljeSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgU3RyaW5nIGludGVncml0eTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGludGVncml0
eSkpCisgICAgT3B0aW9uYWw8U3RyaW5nPiBpbnRlZ3JpdHk7CisgICAgZGVjb2RlciA+PiBpbnRl
Z3JpdHk7CisgICAgaWYgKCFpbnRlZ3JpdHkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IGJvb2wga2VlcEFsaXZlOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoa2VlcEFsaXZlKSkKKyAg
ICBPcHRpb25hbDxib29sPiBrZWVwQWxpdmU7CisgICAgZGVjb2RlciA+PiBrZWVwQWxpdmU7Cisg
ICAgaWYgKCFrZWVwQWxpdmUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIG9wdGlvbnMu
ZGVzdGluYXRpb24gPSBkZXN0aW5hdGlvbjsKLSAgICBvcHRpb25zLm1vZGUgPSBtb2RlOwotICAg
IG9wdGlvbnMuY3JlZGVudGlhbHMgPSBjcmVkZW50aWFsczsKLSAgICBvcHRpb25zLmNhY2hlID0g
Y2FjaGU7Ci0gICAgb3B0aW9ucy5yZWRpcmVjdCA9IHJlZGlyZWN0OwotICAgIG9wdGlvbnMucmVm
ZXJyZXJQb2xpY3kgPSByZWZlcnJlclBvbGljeTsKLSAgICBvcHRpb25zLmludGVncml0eSA9IFdU
Rk1vdmUoaW50ZWdyaXR5KTsKLSAgICBvcHRpb25zLmtlZXBBbGl2ZSA9IGtlZXBBbGl2ZTsKKyAg
ICBvcHRpb25zLmRlc3RpbmF0aW9uID0gKmRlc3RpbmF0aW9uOworICAgIG9wdGlvbnMubW9kZSA9
ICptb2RlOworICAgIG9wdGlvbnMuY3JlZGVudGlhbHMgPSAqY3JlZGVudGlhbHM7CisgICAgb3B0
aW9ucy5jYWNoZSA9ICpjYWNoZTsKKyAgICBvcHRpb25zLnJlZGlyZWN0ID0gKnJlZGlyZWN0Owor
ICAgIG9wdGlvbnMucmVmZXJyZXJQb2xpY3kgPSAqcmVmZXJyZXJQb2xpY3k7CisgICAgb3B0aW9u
cy5pbnRlZ3JpdHkgPSBXVEZNb3ZlKCppbnRlZ3JpdHkpOworICAgIG9wdGlvbnMua2VlcEFsaXZl
ID0gKmtlZXBBbGl2ZTsKIAogICAgIHJldHVybiB0cnVlOwogfQogCi10ZW1wbGF0ZTxjbGFzcyBF
bmNvZGVyPiBpbmxpbmUgdm9pZCBGZXRjaE9wdGlvbnM6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVy
KSBjb25zdAordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KK2lubGluZSB2b2lkIEZldGNoT3B0aW9u
czo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB7CiAgICAgZW5jb2RlUGVyc2lzdGVu
dChlbmNvZGVyKTsKICAgICBlbmNvZGVyIDw8IGNsaWVudElkZW50aWZpZXIuYXNPcHRpb25hbCgp
OwogfQogCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBpbmxpbmUgT3B0aW9uYWw8RmV0Y2hPcHRp
b25zPiBGZXRjaE9wdGlvbnM6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQordGVtcGxhdGU8Y2xh
c3MgRGVjb2Rlcj4KK2lubGluZSBPcHRpb25hbDxGZXRjaE9wdGlvbnM+IEZldGNoT3B0aW9uczo6
ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7CiAgICAgRmV0Y2hPcHRpb25zIG9wdGlvbnM7CiAg
ICAgaWYgKCFkZWNvZGVQZXJzaXN0ZW50KGRlY29kZXIsIG9wdGlvbnMpKQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGFnZS9TZWN1cml0eU9yaWdpbkRhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luRGF0YS5oCShyZXZpc2lvbiAyNTk4OTgpCisrKyBT
b3VyY2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTUsMTEgKzExNSwxMiBAQCBPcHRpb25hbDxTZWN1cml0eU9yaWdpbkRhdGE+IFNlY3VyaXR5
T3JpCiAgICAgaWYgKCFob3N0KQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIAot
ICAgIE9wdGlvbmFsPHVpbnQxNl90PiBwb3J0OwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocG9y
dCkpCisgICAgT3B0aW9uYWw8T3B0aW9uYWw8dWludDE2X3Q+PiBwb3J0OworICAgIGRlY29kZXIg
Pj4gcG9ydDsKKyAgICBpZiAoIXBvcnQpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAg
ICAgCi0gICAgU2VjdXJpdHlPcmlnaW5EYXRhIGRhdGEgeyBXVEZNb3ZlKCpwcm90b2NvbCksIFdU
Rk1vdmUoKmhvc3QpLCBXVEZNb3ZlKHBvcnQpIH07CisgICAgU2VjdXJpdHlPcmlnaW5EYXRhIGRh
dGEgeyBXVEZNb3ZlKCpwcm90b2NvbCksIFdURk1vdmUoKmhvc3QpLCBXVEZNb3ZlKCpwb3J0KSB9
OwogICAgIGlmIChkYXRhLmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkpCiAgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRT
ZWN1cml0eVBvbGljeVJlc3BvbnNlSGVhZGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeVJlc3BvbnNlSGVhZGVycy5oCShyZXZp
c2lvbiAyNTk4OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQ
b2xpY3lSZXNwb25zZUhlYWRlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBDb250ZW50U2VjdXJpdHlQb2xpY3k7CiBjbGFzcyBS
ZXNvdXJjZVJlc3BvbnNlOwogCi1lbnVtIGNsYXNzIENvbnRlbnRTZWN1cml0eVBvbGljeUhlYWRl
clR5cGUgeworZW51bSBjbGFzcyBDb250ZW50U2VjdXJpdHlQb2xpY3lIZWFkZXJUeXBlIDogYm9v
bCB7CiAgICAgUmVwb3J0LAogICAgIEVuZm9yY2UsCiB9OwpAQCAtNDYsNyArNDYsNyBAQCBwdWJs
aWM6CiAgICAgQ29udGVudFNlY3VyaXR5UG9saWN5UmVzcG9uc2VIZWFkZXJzIGlzb2xhdGVkQ29w
eSgpIGNvbnN0OwogCiAgICAgdGVtcGxhdGUgPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVu
Y29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIGJvb2wg
ZGVjb2RlKERlY29kZXImLCBDb250ZW50U2VjdXJpdHlQb2xpY3lSZXNwb25zZUhlYWRlcnMmKTsK
KyAgICB0ZW1wbGF0ZSA8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPENvbnRlbnRTZWN1
cml0eVBvbGljeVJlc3BvbnNlSGVhZGVycz4gZGVjb2RlKERlY29kZXImKTsKIAogICAgIGVudW0g
RW1wdHlUYWcgeyBFbXB0eSB9OwogICAgIHN0cnVjdCBNYXJrYWJsZVRyYWl0cyB7CkBAIC03OCwz
MiArNzgsNDAgQEAgdm9pZCBDb250ZW50U2VjdXJpdHlQb2xpY3lSZXNwb25zZUhlYWRlcgogICAg
IGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG1faGVhZGVycy5zaXplKCkpOwogICAg
IGZvciAoYXV0byYgcGFpciA6IG1faGVhZGVycykgewogICAgICAgICBlbmNvZGVyIDw8IHBhaXIu
Zmlyc3Q7Ci0gICAgICAgIGVuY29kZXIuZW5jb2RlRW51bShwYWlyLnNlY29uZCk7CisgICAgICAg
IGVuY29kZXIgPDwgcGFpci5zZWNvbmQ7CiAgICAgfQogICAgIGVuY29kZXIgPDwgbV9odHRwU3Rh
dHVzQ29kZTsKIH0KIAogdGVtcGxhdGUgPGNsYXNzIERlY29kZXI+Ci1ib29sIENvbnRlbnRTZWN1
cml0eVBvbGljeVJlc3BvbnNlSGVhZGVyczo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIENvbnRl
bnRTZWN1cml0eVBvbGljeVJlc3BvbnNlSGVhZGVycyYgaGVhZGVycykKK09wdGlvbmFsPENvbnRl
bnRTZWN1cml0eVBvbGljeVJlc3BvbnNlSGVhZGVycz4gQ29udGVudFNlY3VyaXR5UG9saWN5UmVz
cG9uc2VIZWFkZXJzOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIHsKLSAgICB1aW50NjRfdCBo
ZWFkZXJzU2l6ZTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGhlYWRlcnNTaXplKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaGVhZGVyc1NpemU7
ICsraSkgewotICAgICAgICBTdHJpbmcgaGVhZGVyOwotICAgICAgICBpZiAoIWRlY29kZXIuZGVj
b2RlKGhlYWRlcikpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIENvbnRlbnRT
ZWN1cml0eVBvbGljeUhlYWRlclR5cGUgaGVhZGVyVHlwZTsKLSAgICAgICAgaWYgKCFkZWNvZGVy
LmRlY29kZUVudW0oaGVhZGVyVHlwZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIGhlYWRlcnMubV9oZWFkZXJzLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihoZWFkZXIsIGhlYWRl
clR5cGUpKTsKKyAgICBDb250ZW50U2VjdXJpdHlQb2xpY3lSZXNwb25zZUhlYWRlcnMgaGVhZGVy
czsKKworICAgIE9wdGlvbmFsPHVpbnQ2NF90PiBoZWFkZXJzU2l6ZTsKKyAgICBkZWNvZGVyID4+
IGhlYWRlcnNTaXplOworICAgIGlmICghaGVhZGVyc1NpemUpCisgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAqaGVhZGVyc1NpemU7ICsraSkg
eworICAgICAgICBPcHRpb25hbDxTdHJpbmc+IGhlYWRlcjsKKyAgICAgICAgZGVjb2RlciA+PiBo
ZWFkZXI7CisgICAgICAgIGlmICghaGVhZGVyKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKKyAgICAgICAgT3B0aW9uYWw8Q29udGVudFNlY3VyaXR5UG9saWN5SGVhZGVyVHlwZT4g
aGVhZGVyVHlwZTsKKyAgICAgICAgZGVjb2RlciA+PiBoZWFkZXJUeXBlOworICAgICAgICBpZiAo
IWhlYWRlclR5cGUpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICBo
ZWFkZXJzLm1faGVhZGVycy5hcHBlbmQoc3RkOjptYWtlX3BhaXIoV1RGTW92ZSgqaGVhZGVyKSwg
V1RGTW92ZSgqaGVhZGVyVHlwZSkpKTsKICAgICB9CiAgICAgaGVhZGVycy5tX2hlYWRlcnMuc2hy
aW5rVG9GaXQoKTsKIAotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaGVhZGVycy5tX2h0dHBTdGF0
dXNDb2RlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIE9wdGlvbmFsPGludD4gaHR0cFN0
YXR1c0NvZGU7CisgICAgZGVjb2RlciA+PiBodHRwU3RhdHVzQ29kZTsKKyAgICBpZiAoIWh0dHBT
dGF0dXNDb2RlKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIGhlYWRlcnMubV9o
dHRwU3RhdHVzQ29kZSA9ICpodHRwU3RhdHVzQ29kZTsKIAotICAgIHJldHVybiB0cnVlOworICAg
IHJldHVybiBXVEZNb3ZlKGhlYWRlcnMpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QYXN0ZWJvYXJkQ3VzdG9tRGF0YS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGFzdGVib2FyZEN1c3RvbURhdGEu
Y3BwCShyZXZpc2lvbiAyNTk4OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QYXN0ZWJv
YXJkQ3VzdG9tRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk4LDIzICs5OCwyOSBAQCBQYXN0
ZWJvYXJkQ3VzdG9tRGF0YSBQYXN0ZWJvYXJkQ3VzdG9tRGF0CiAKICAgICBQYXN0ZWJvYXJkQ3Vz
dG9tRGF0YSByZXN1bHQ7CiAgICAgYXV0byBkZWNvZGVyID0gYnVmZmVyLmRlY29kZXIoKTsKLSAg
ICB1bnNpZ25lZCB2ZXJzaW9uOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUodmVyc2lvbikgfHwg
dmVyc2lvbiA+IG1heFN1cHBvcnRlZERhdGFTZXJpYWxpemF0aW9uVmVyc2lvbk51bWJlcikKKyAg
ICBPcHRpb25hbDx1bnNpZ25lZD4gdmVyc2lvbjsKKyAgICBkZWNvZGVyID4+IHZlcnNpb247Cisg
ICAgaWYgKCF2ZXJzaW9uIHx8ICp2ZXJzaW9uID4gbWF4U3VwcG9ydGVkRGF0YVNlcmlhbGl6YXRp
b25WZXJzaW9uTnVtYmVyKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgaWYgKCFkZWNvZGVy
LmRlY29kZShyZXN1bHQubV9vcmlnaW4pKQorICAgIE9wdGlvbmFsPFN0cmluZz4gb3JpZ2luOwor
ICAgIGRlY29kZXIgPj4gb3JpZ2luOworICAgIGlmICghb3JpZ2luKQogICAgICAgICByZXR1cm4g
eyB9OworICAgIHJlc3VsdC5tX29yaWdpbiA9IFdURk1vdmUoKm9yaWdpbik7CiAKLSAgICBIYXNo
TWFwPFN0cmluZywgU3RyaW5nPiBzYW1lT3JpZ2luQ3VzdG9tU3RyaW5nRGF0YTsKLSAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKHNhbWVPcmlnaW5DdXN0b21TdHJpbmdEYXRhKSkKKyAgICBPcHRpb25h
bDxIYXNoTWFwPFN0cmluZywgU3RyaW5nPj4gc2FtZU9yaWdpbkN1c3RvbVN0cmluZ0RhdGE7Cisg
ICAgZGVjb2RlciA+PiBzYW1lT3JpZ2luQ3VzdG9tU3RyaW5nRGF0YTsKKyAgICBpZiAoIXNhbWVP
cmlnaW5DdXN0b21TdHJpbmdEYXRhKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgVmVjdG9y
PFN0cmluZz4gb3JkZXJlZFR5cGVzOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUob3JkZXJlZFR5
cGVzKSkKKyAgICBPcHRpb25hbDxWZWN0b3I8U3RyaW5nPj4gb3JkZXJlZFR5cGVzOworICAgIGRl
Y29kZXIgPj4gb3JkZXJlZFR5cGVzOworICAgIGlmICghb3JkZXJlZFR5cGVzKQogICAgICAgICBy
ZXR1cm4geyB9OwogCi0gICAgZm9yIChhdXRvJiB0eXBlIDogb3JkZXJlZFR5cGVzKQotICAgICAg
ICByZXN1bHQud3JpdGVTdHJpbmdJbkN1c3RvbURhdGEodHlwZSwgc2FtZU9yaWdpbkN1c3RvbVN0
cmluZ0RhdGEuZ2V0KHR5cGUpKTsKKyAgICBmb3IgKGF1dG8mIHR5cGUgOiAqb3JkZXJlZFR5cGVz
KQorICAgICAgICByZXN1bHQud3JpdGVTdHJpbmdJbkN1c3RvbURhdGEodHlwZSwgc2FtZU9yaWdp
bkN1c3RvbVN0cmluZ0RhdGEtPmdldCh0eXBlKSk7CiAKICAgICByZXR1cm4gcmVzdWx0OwogfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2VuZXJpYy9LZXllZERlY29kZXJHZW5lcmlj
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nZW5lcmljL0tleWVk
RGVjb2RlckdlbmVyaWMuY3BwCShyZXZpc2lvbiAyNTk4OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9nZW5lcmljL0tleWVkRGVjb2RlckdlbmVyaWMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00OCw0MCArNDgsMzYgQEAgcHJpdmF0ZToKICAgICBIYXNoTWFwPFN0cmluZywgc3RkOjp1bmlx
dWVfcHRyPE5vZGU+PiBtX21hcDsKIH07CiAKLXN0YXRpYyBib29sIHJlYWRTdHJpbmcoV1RGOjpQ
ZXJzaXN0ZW5jZTo6RGVjb2RlciYgZGVjb2RlciwgU3RyaW5nJiByZXN1bHQpCitzdGF0aWMgT3B0
aW9uYWw8U3RyaW5nPiByZWFkU3RyaW5nKFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXImIGRlY29k
ZXIpCiB7Ci0gICAgc2l6ZV90IHNpemU7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShzaXplKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghc2l6ZSkgewotICAgICAgICByZXN1bHQg
PSBlbXB0eVN0cmluZygpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAo
IWRlY29kZXIuYnVmZmVySXNMYXJnZUVub3VnaFRvQ29udGFpbjx1aW50OF90PihzaXplKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFZlY3Rvcjx1aW50OF90PiBidWZmZXIoc2l6ZSk7Ci0g
ICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShidWZmZXIuZGF0YSgpLCBzaXpl
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJlc3VsdCA9IFN0cmluZzo6ZnJvbVVURjgo
YnVmZmVyLmRhdGEoKSwgc2l6ZSk7CisgICAgT3B0aW9uYWw8c2l6ZV90PiBzaXplOworICAgIGRl
Y29kZXIgPj4gc2l6ZTsKKyAgICBpZiAoIXNpemUpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CisgICAgaWYgKCFzaXplLnZhbHVlKCkpCisgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygp
OworCisgICAgVmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZlcihzaXplLnZhbHVlKCkpOworICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoYnVmZmVyLmRhdGEoKSwgc2l6ZS52YWx1ZSgp
KSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBhdXRvIHJlc3VsdCA9IFN0cmlu
Zzo6ZnJvbVVURjgoYnVmZmVyLmRhdGEoKSwgc2l6ZS52YWx1ZSgpKTsKICAgICBpZiAocmVzdWx0
LmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CiAKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgogc3RhdGljIGJvb2wgcmVhZFNpbXBsZVZhbHVlKFdURjo6UGVyc2lz
dGVuY2U6OkRlY29kZXImIGRlY29kZXIsIEtleWVkRGVjb2RlckdlbmVyaWM6OkRpY3Rpb25hcnkm
IGRpY3Rpb25hcnkpCiB7Ci0gICAgU3RyaW5nIGtleTsKLSAgICBib29sIG9rID0gcmVhZFN0cmlu
ZyhkZWNvZGVyLCBrZXkpOwotICAgIGlmICghb2spCisgICAgYXV0byBrZXkgPSByZWFkU3RyaW5n
KGRlY29kZXIpOworICAgIGlmICgha2V5KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgVCB2
YWx1ZTsKLSAgICBvayA9IGRlY29kZXIuZGVjb2RlKHZhbHVlKTsKLSAgICBpZiAoIW9rKQorICAg
IE9wdGlvbmFsPFQ+IHZhbHVlOworICAgIGRlY29kZXIgPj4gdmFsdWU7CisgICAgaWYgKCF2YWx1
ZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGRpY3Rpb25hcnkuYWRkKGtleSwgV1RGTW92
ZSh2YWx1ZSkpOworICAgIGRpY3Rpb25hcnkuYWRkKGtleS52YWx1ZSgpLCBXVEZNb3ZlKHZhbHVl
LnZhbHVlKCkpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtOTMsMzEgKzg5LDM4IEBAIHN0
ZDo6dW5pcXVlX3B0cjxLZXllZERlY29kZXI+IEtleWVkRGVjb2QKIEtleWVkRGVjb2RlckdlbmVy
aWM6OktleWVkRGVjb2RlckdlbmVyaWMoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUp
CiB7CiAgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyKGRhdGEsIHNpemUpOwot
ICAgIEtleWVkRW5jb2RlckdlbmVyaWM6OlR5cGUgdHlwZTsKLSAgICBTdHJpbmcga2V5OwogCiAg
ICAgbV9yb290RGljdGlvbmFyeSA9IG1ha2VVbmlxdWU8RGljdGlvbmFyeT4oKTsKICAgICBtX2Rp
Y3Rpb25hcnlTdGFjay5hcHBlbmQobV9yb290RGljdGlvbmFyeS5nZXQoKSk7CiAKICAgICBib29s
IG9rID0gdHJ1ZTsKLSAgICB3aGlsZSAob2sgJiYgZGVjb2Rlci5kZWNvZGVFbnVtKHR5cGUpKSB7
CisgICAgd2hpbGUgKG9rKSB7CisgICAgICAgIE9wdGlvbmFsPEtleWVkRW5jb2RlckdlbmVyaWM6
OlR5cGU+IHR5cGU7CisgICAgICAgIGRlY29kZXIgPj4gdHlwZTsKKyAgICAgICAgaWYgKCF0eXBl
KQorICAgICAgICAgICAgYnJlYWs7CisKICAgICAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgICAg
IGNhc2UgS2V5ZWRFbmNvZGVyR2VuZXJpYzo6VHlwZTo6Qnl0ZXM6IHsKLSAgICAgICAgICAgIG9r
ID0gcmVhZFN0cmluZyhkZWNvZGVyLCBrZXkpOworICAgICAgICAgICAgYXV0byBrZXkgPSByZWFk
U3RyaW5nKGRlY29kZXIpOworICAgICAgICAgICAgaWYgKCFrZXkpCisgICAgICAgICAgICAgICAg
b2sgPSBmYWxzZTsKICAgICAgICAgICAgIGlmICghb2spCiAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICBzaXplX3Qgc2l6ZTsKLSAgICAgICAgICAgIG9rID0gZGVjb2Rlci5kZWNv
ZGUoc2l6ZSk7CisgICAgICAgICAgICBPcHRpb25hbDxzaXplX3Q+IHNpemU7CisgICAgICAgICAg
ICBkZWNvZGVyID4+IHNpemU7CisgICAgICAgICAgICBpZiAoIXNpemUpCisgICAgICAgICAgICAg
ICAgb2sgPSBmYWxzZTsKICAgICAgICAgICAgIGlmICghb2spCiAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICBvayA9IGRlY29kZXIuYnVmZmVySXNMYXJnZUVub3VnaFRvQ29udGFp
bjx1aW50OF90PihzaXplKTsKKyAgICAgICAgICAgIG9rID0gZGVjb2Rlci5idWZmZXJJc0xhcmdl
RW5vdWdoVG9Db250YWluPHVpbnQ4X3Q+KCpzaXplKTsKICAgICAgICAgICAgIGlmICghb2spCiAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBWZWN0b3I8dWludDhfdD4gYnVmZmVy
KHNpemUpOwotICAgICAgICAgICAgb2sgPSBkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShi
dWZmZXIuZGF0YSgpLCBzaXplKTsKKyAgICAgICAgICAgIFZlY3Rvcjx1aW50OF90PiBidWZmZXIo
KnNpemUpOworICAgICAgICAgICAgb2sgPSBkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShi
dWZmZXIuZGF0YSgpLCAqc2l6ZSk7CiAgICAgICAgICAgICBpZiAoIW9rKQogICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgbV9kaWN0aW9uYXJ5U3RhY2subGFzdCgpLT5hZGQoa2V5
LCBXVEZNb3ZlKGJ1ZmZlcikpOworICAgICAgICAgICAgbV9kaWN0aW9uYXJ5U3RhY2subGFzdCgp
LT5hZGQoKmtleSwgV1RGTW92ZShidWZmZXIpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgIGNhc2UgS2V5ZWRFbmNvZGVyR2VuZXJpYzo6VHlwZTo6Qm9vbDoKQEAgLTE0
MiwyNCArMTQ1LDI5IEBAIEtleWVkRGVjb2RlckdlbmVyaWM6OktleWVkRGVjb2RlckdlbmVyaWMK
ICAgICAgICAgICAgIG9rID0gcmVhZFNpbXBsZVZhbHVlPGRvdWJsZT4oZGVjb2RlciwgKm1fZGlj
dGlvbmFyeVN0YWNrLmxhc3QoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBL
ZXllZEVuY29kZXJHZW5lcmljOjpUeXBlOjpTdHJpbmc6IHsKLSAgICAgICAgICAgIG9rID0gcmVh
ZFN0cmluZyhkZWNvZGVyLCBrZXkpOworICAgICAgICAgICAgYXV0byBrZXkgPSByZWFkU3RyaW5n
KGRlY29kZXIpOworICAgICAgICAgICAgaWYgKCFrZXkpCisgICAgICAgICAgICAgICAgb2sgPSBm
YWxzZTsKICAgICAgICAgICAgIGlmICghb2spCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICBTdHJpbmcgdmFsdWU7Ci0gICAgICAgICAgICBvayA9IHJlYWRTdHJpbmcoZGVjb2Rl
ciwgdmFsdWUpOworICAgICAgICAgICAgYXV0byB2YWx1ZSA9IHJlYWRTdHJpbmcoZGVjb2Rlcik7
CisgICAgICAgICAgICBpZiAoIXZhbHVlKQorICAgICAgICAgICAgICAgIG9rID0gZmFsc2U7CiAg
ICAgICAgICAgICBpZiAoIW9rKQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
bV9kaWN0aW9uYXJ5U3RhY2subGFzdCgpLT5hZGQoa2V5LCBXVEZNb3ZlKHZhbHVlKSk7CisgICAg
ICAgICAgICBtX2RpY3Rpb25hcnlTdGFjay5sYXN0KCktPmFkZCgqa2V5LCBXVEZNb3ZlKCp2YWx1
ZSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBLZXllZEVu
Y29kZXJHZW5lcmljOjpUeXBlOjpCZWdpbk9iamVjdDogewotICAgICAgICAgICAgb2sgPSByZWFk
U3RyaW5nKGRlY29kZXIsIGtleSk7CisgICAgICAgICAgICBhdXRvIGtleSA9IHJlYWRTdHJpbmco
ZGVjb2Rlcik7CisgICAgICAgICAgICBpZiAoIWtleSkKKyAgICAgICAgICAgICAgICBvayA9IGZh
bHNlOwogICAgICAgICAgICAgaWYgKCFvaykKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIGF1dG8qIGN1cnJlbnREaWN0aW5hcnkgPSBtX2RpY3Rpb25hcnlTdGFjay5sYXN0KCk7
CiAgICAgICAgICAgICBhdXRvIG5ld0RpY3Rpb25hcnkgPSBtYWtlVW5pcXVlPERpY3Rpb25hcnk+
KCk7CiAgICAgICAgICAgICBtX2RpY3Rpb25hcnlTdGFjay5hcHBlbmQobmV3RGljdGlvbmFyeS5n
ZXQoKSk7Ci0gICAgICAgICAgICBjdXJyZW50RGljdGluYXJ5LT5hZGQoa2V5LCBXVEZNb3ZlKG5l
d0RpY3Rpb25hcnkpKTsKKyAgICAgICAgICAgIGN1cnJlbnREaWN0aW5hcnktPiphZGQoa2V5LCBX
VEZNb3ZlKG5ld0RpY3Rpb25hcnkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgIGNhc2UgS2V5ZWRFbmNvZGVyR2VuZXJpYzo6VHlwZTo6RW5kT2JqZWN0OgpAQCAtMTY4
LDEyICsxNzYsMTQgQEAgS2V5ZWREZWNvZGVyR2VuZXJpYzo6S2V5ZWREZWNvZGVyR2VuZXJpYwog
ICAgICAgICAgICAgICAgIG9rID0gZmFsc2U7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSBLZXllZEVuY29kZXJHZW5lcmljOjpUeXBlOjpCZWdpbkFycmF5OiB7Ci0gICAgICAgICAg
ICBvayA9IHJlYWRTdHJpbmcoZGVjb2Rlciwga2V5KTsKKyAgICAgICAgICAgIGF1dG8ga2V5ID0g
cmVhZFN0cmluZyhkZWNvZGVyKTsKKyAgICAgICAgICAgIGlmICgha2V5KQorICAgICAgICAgICAg
ICAgIG9rID0gZmFsc2U7CiAgICAgICAgICAgICBpZiAoIW9rKQogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgYXV0byBuZXdBcnJheSA9IG1ha2VVbmlxdWU8QXJyYXk+KCk7CiAg
ICAgICAgICAgICBtX2FycmF5U3RhY2suYXBwZW5kKG5ld0FycmF5LmdldCgpKTsKLSAgICAgICAg
ICAgIG1fZGljdGlvbmFyeVN0YWNrLmxhc3QoKS0+YWRkKGtleSwgV1RGTW92ZShuZXdBcnJheSkp
OworICAgICAgICAgICAgbV9kaWN0aW9uYXJ5U3RhY2subGFzdCgpLT5hZGQoKmtleSwgV1RGTW92
ZShuZXdBcnJheSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2Fz
ZSBLZXllZEVuY29kZXJHZW5lcmljOjpUeXBlOjpCZWdpbkFycmF5RWxlbWVudDogewpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9OZXR3b3JrTG9hZE1ldHJpY3MuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL05ldHdvcmtMb2FkTWV0
cmljcy5oCShyZXZpc2lvbiAyNTk4OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL05ldHdvcmtMb2FkTWV0cmljcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw4ICszMCw3IEBA
CiAjaW5jbHVkZSA8d3RmL0JveC5oPgogI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1
ZGUgPHd0Zi9TZWNvbmRzLmg+Ci0jaW5jbHVkZSA8d3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRE
ZWNvZGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRFbmNvZGVyLmg+
CisjaW5jbHVkZSA8d3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRDb2Rlci5oPgogI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiAjaWYgUExBVEZPUk0oQ09DT0EpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlTG9hZFByaW9yaXR5LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUxvYWRQcmlv
cml0eS5oCShyZXZpc2lvbiAyNTk4OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL1Jlc291cmNlTG9hZFByaW9yaXR5LmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDggKzIzLDcg
QEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIFJl
c291cmNlTG9hZFByaW9yaXR5X2gKLSNkZWZpbmUgUmVzb3VyY2VMb2FkUHJpb3JpdHlfaAorI3By
YWdtYSBvbmNlCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNTQsNyArNTMsMTkgQEAgaW5s
aW5lIFJlc291cmNlTG9hZFByaW9yaXR5JiBvcGVyYXRvci0tKAogICAgIHJldHVybiBwcmlvcml0
eSA9IHN0YXRpY19jYXN0PFJlc291cmNlTG9hZFByaW9yaXR5PihzdGF0aWNfY2FzdDxpbnQ+KHBy
aW9yaXR5KSAtIDEpOwogfQogCi19Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKK25hbWVzcGFj
ZSBXVEYgewogCi0jZW5kaWYKK3RlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6
UmVzb3VyY2VMb2FkUHJpb3JpdHk+IHsKKyAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAor
ICAgICAgICBXZWJDb3JlOjpSZXNvdXJjZUxvYWRQcmlvcml0eSwKKyAgICAgICAgV2ViQ29yZTo6
UmVzb3VyY2VMb2FkUHJpb3JpdHk6OlZlcnlMb3csCisgICAgICAgIFdlYkNvcmU6OlJlc291cmNl
TG9hZFByaW9yaXR5OjpMb3csCisgICAgICAgIFdlYkNvcmU6OlJlc291cmNlTG9hZFByaW9yaXR5
OjpNZWRpdW0sCisgICAgICAgIFdlYkNvcmU6OlJlc291cmNlTG9hZFByaW9yaXR5OjpIaWdoLAor
ICAgICAgICBXZWJDb3JlOjpSZXNvdXJjZUxvYWRQcmlvcml0eTo6VmVyeUhpZ2gKKyAgICA+Owor
fTsKIAorfSAvLyBuYW1lc3BhY2UgV1RGCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuaAkocmV2aXNpb24gMjU5ODk4
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDE0ICsyNSwxNCBAQAogICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAq
LwogCi0jaWZuZGVmIFJlc291cmNlUmVxdWVzdEJhc2VfaAotI2RlZmluZSBSZXNvdXJjZVJlcXVl
c3RCYXNlX2gKKyNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiRm9ybURhdGEuaCIKICNpbmNsdWRl
ICJGcmFtZUxvYWRlclR5cGVzLmgiCiAjaW5jbHVkZSAiSFRUUEhlYWRlck1hcC5oIgogI2luY2x1
ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJSZXNvdXJjZUxvYWRQcmlvcml0eS5oIgorI2luY2x1
ZGUgPHd0Zi9FbnVtVHJhaXRzLmg+CiAjaW5jbHVkZSA8d3RmL1VSTC5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CkBAIC0yODMsNjQgKzI4Myw4OCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgUmVzb3Vy
Y2VSZXF1ZXN0QmFzZTo6CiAgICAgZW5jb2RlciA8PCBtX2h0dHBNZXRob2Q7CiAgICAgZW5jb2Rl
ciA8PCBtX2h0dHBIZWFkZXJGaWVsZHM7CiAgICAgZW5jb2RlciA8PCBtX3Jlc3BvbnNlQ29udGVu
dERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFja0FycmF5OwotICAgIGVuY29kZXIuZW5jb2RlRW51
bShtX2NhY2hlUG9saWN5KTsKKyAgICBlbmNvZGVyIDw8IG1fY2FjaGVQb2xpY3k7CiAgICAgZW5j
b2RlciA8PCBtX2FsbG93Q29va2llczsKLSAgICBlbmNvZGVyLmVuY29kZUVudW0obV9zYW1lU2l0
ZURpc3Bvc2l0aW9uKTsKKyAgICBlbmNvZGVyIDw8IG1fc2FtZVNpdGVEaXNwb3NpdGlvbjsKICAg
ICBlbmNvZGVyIDw8IG1faXNUb3BTaXRlOwotICAgIGVuY29kZXIuZW5jb2RlRW51bShtX3ByaW9y
aXR5KTsKLSAgICBlbmNvZGVyLmVuY29kZUVudW0obV9yZXF1ZXN0ZXIpOworICAgIGVuY29kZXIg
PDwgbV9wcmlvcml0eTsKKyAgICBlbmNvZGVyIDw8IG1fcmVxdWVzdGVyOwogfQogCiB0ZW1wbGF0
ZTxjbGFzcyBEZWNvZGVyPgogQUxXQVlTX0lOTElORSBib29sIFJlc291cmNlUmVxdWVzdEJhc2U6
OmRlY29kZUJhc2UoRGVjb2RlciYgZGVjb2RlcikKIHsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KG1fdXJsKSkKKyAgICBPcHRpb25hbDxVUkw+IHVybDsKKyAgICBkZWNvZGVyID4+IHVybDsKKyAg
ICBpZiAoIXVybCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFkZWNvZGVyLmRl
Y29kZShtX3RpbWVvdXRJbnRlcnZhbCkpCisgICAgbV91cmwgPSBXVEZNb3ZlKCp1cmwpOworICAg
IAorICAgIE9wdGlvbmFsPGRvdWJsZT4gdGltZW91dEludGVydmFsOworICAgIGRlY29kZXIgPj4g
dGltZW91dEludGVydmFsOworICAgIGlmICghdGltZW91dEludGVydmFsKQogICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgbV90aW1lb3V0SW50ZXJ2YWwgPSBXVEZNb3ZlKCp0aW1lb3V0SW50ZXJ2
YWwpOwogCi0gICAgU3RyaW5nIGZpcnN0UGFydHlGb3JDb29raWVzOwotICAgIGlmICghZGVjb2Rl
ci5kZWNvZGUoZmlyc3RQYXJ0eUZvckNvb2tpZXMpKQorICAgIE9wdGlvbmFsPFN0cmluZz4gZmly
c3RQYXJ0eUZvckNvb2tpZXM7CisgICAgZGVjb2RlciA+PiBmaXJzdFBhcnR5Rm9yQ29va2llczsK
KyAgICBpZiAoIWZpcnN0UGFydHlGb3JDb29raWVzKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgbV9maXJzdFBhcnR5Rm9yQ29va2llcyA9IFVSTCh7IH0sIGZpcnN0UGFydHlGb3JDb29raWVz
KTsKKyAgICBtX2ZpcnN0UGFydHlGb3JDb29raWVzID0gVVJMKHsgfSwgKmZpcnN0UGFydHlGb3JD
b29raWVzKTsKIAotICAgIGlmICghZGVjb2Rlci5kZWNvZGUobV9odHRwTWV0aG9kKSkKKyAgICBP
cHRpb25hbDxTdHJpbmc+IGh0dHBNZXRob2Q7CisgICAgZGVjb2RlciA+PiBodHRwTWV0aG9kOwor
ICAgIGlmICghaHR0cE1ldGhvZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIG1faHR0cE1l
dGhvZCA9IFdURk1vdmUoKmh0dHBNZXRob2QpOwogCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZSht
X2h0dHBIZWFkZXJGaWVsZHMpKQorICAgIE9wdGlvbmFsPEhUVFBIZWFkZXJNYXA+IGZpZWxkczsK
KyAgICBkZWNvZGVyID4+IGZpZWxkczsKKyAgICBpZiAoIWZpZWxkcykKICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIG1faHR0cEhlYWRlckZpZWxkcyA9IFdURk1vdmUoKmZpZWxkcyk7CiAKLSAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKG1fcmVzcG9uc2VDb250ZW50RGlzcG9zaXRpb25FbmNvZGlu
Z0ZhbGxiYWNrQXJyYXkpKQorICAgIE9wdGlvbmFsPFZlY3RvcjxTdHJpbmc+PiBhcnJheTsKKyAg
ICBkZWNvZGVyID4+IGFycmF5OworICAgIGlmICghYXJyYXkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBtX3Jlc3BvbnNlQ29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFja0FycmF5
ID0gV1RGTW92ZSgqYXJyYXkpOwogCi0gICAgUmVzb3VyY2VSZXF1ZXN0Q2FjaGVQb2xpY3kgY2Fj
aGVQb2xpY3k7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZUVudW0oY2FjaGVQb2xpY3kpKQorICAg
IE9wdGlvbmFsPFJlc291cmNlUmVxdWVzdENhY2hlUG9saWN5PiBjYWNoZVBvbGljeTsKKyAgICBk
ZWNvZGVyID4+IGNhY2hlUG9saWN5OworICAgIGlmICghY2FjaGVQb2xpY3kpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBtX2NhY2hlUG9saWN5ID0gY2FjaGVQb2xpY3k7CisgICAgbV9jYWNo
ZVBvbGljeSA9ICpjYWNoZVBvbGljeTsKIAotICAgIGJvb2wgYWxsb3dDb29raWVzOwotICAgIGlm
ICghZGVjb2Rlci5kZWNvZGUoYWxsb3dDb29raWVzKSkKKyAgICBPcHRpb25hbDxib29sPiBhbGxv
d0Nvb2tpZXM7CisgICAgZGVjb2RlciA+PiBhbGxvd0Nvb2tpZXM7CisgICAgaWYgKCFhbGxvd0Nv
b2tpZXMpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX2FsbG93Q29va2llcyA9IGFsbG93
Q29va2llczsKKyAgICBtX2FsbG93Q29va2llcyA9ICphbGxvd0Nvb2tpZXM7CiAKLSAgICBTYW1l
U2l0ZURpc3Bvc2l0aW9uIHNhbWVTaXRlRGlzcG9zaXRpb247Ci0gICAgaWYgKCFkZWNvZGVyLmRl
Y29kZUVudW0oc2FtZVNpdGVEaXNwb3NpdGlvbikpCisgICAgT3B0aW9uYWw8U2FtZVNpdGVEaXNw
b3NpdGlvbj4gc2FtZVNpdGVEaXNwb3NpdGlvbjsKKyAgICBkZWNvZGVyID4+IHNhbWVTaXRlRGlz
cG9zaXRpb247CisgICAgaWYgKCFzYW1lU2l0ZURpc3Bvc2l0aW9uKQogICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgbV9zYW1lU2l0ZURpc3Bvc2l0aW9uID0gc2FtZVNpdGVEaXNwb3NpdGlvbjsK
KyAgICBtX3NhbWVTaXRlRGlzcG9zaXRpb24gPSAqc2FtZVNpdGVEaXNwb3NpdGlvbjsKIAotICAg
IGJvb2wgaXNUb3BTaXRlOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaXNUb3BTaXRlKSkKKyAg
ICBPcHRpb25hbDxib29sPiBpc1RvcFNpdGU7CisgICAgZGVjb2RlciA+PiBpc1RvcFNpdGU7Cisg
ICAgaWYgKCFpc1RvcFNpdGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX2lzVG9wU2l0
ZSA9IGlzVG9wU2l0ZTsKKyAgICBtX2lzVG9wU2l0ZSA9ICppc1RvcFNpdGU7CiAKLSAgICBSZXNv
dXJjZUxvYWRQcmlvcml0eSBwcmlvcml0eTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlRW51bShw
cmlvcml0eSkpCisgICAgT3B0aW9uYWw8UmVzb3VyY2VMb2FkUHJpb3JpdHk+IHByaW9yaXR5Owor
ICAgIGRlY29kZXIgPj4gcHJpb3JpdHk7CisgICAgaWYgKCFwcmlvcml0eSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIG1fcHJpb3JpdHkgPSBwcmlvcml0eTsKKyAgICBtX3ByaW9yaXR5ID0g
KnByaW9yaXR5OwogCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZUVudW0obV9yZXF1ZXN0ZXIpKQor
ICAgIE9wdGlvbmFsPFJlcXVlc3Rlcj4gcmVxdWVzdGVyOworICAgIGRlY29kZXIgPj4gcmVxdWVz
dGVyOworICAgIGlmICghcmVxdWVzdGVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgbV9y
ZXF1ZXN0ZXIgPSAqcmVxdWVzdGVyOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0zNjEsNCAr
Mzg1LDM5IEBAIGJvb2wgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6ZGVjb2RlV2l0aG91dFAKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gUmVzb3VyY2VSZXF1ZXN0QmFzZV9oCitu
YW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpS
ZXNvdXJjZVJlcXVlc3RDYWNoZVBvbGljeT4geworICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1
ZXM8CisgICAgICAgIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdENhY2hlUG9saWN5LAorICAgICAg
ICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RDYWNoZVBvbGljeTo6VXNlUHJvdG9jb2xDYWNoZVBv
bGljeSwKKyAgICAgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Q2FjaGVQb2xpY3k6OlJlbG9h
ZElnbm9yaW5nQ2FjaGVEYXRhLAorICAgICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RDYWNo
ZVBvbGljeTo6UmV0dXJuQ2FjaGVEYXRhRWxzZUxvYWQsCisgICAgICAgIFdlYkNvcmU6OlJlc291
cmNlUmVxdWVzdENhY2hlUG9saWN5OjpSZXR1cm5DYWNoZURhdGFEb250TG9hZCwKKyAgICAgICAg
V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Q2FjaGVQb2xpY3k6OkRvTm90VXNlQW55Q2FjaGUsCisg
ICAgICAgIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdENhY2hlUG9saWN5OjpSZWZyZXNoQW55Q2Fj
aGVEYXRhCisgICAgPjsKK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29y
ZTo6UmVzb3VyY2VSZXF1ZXN0QmFzZTo6U2FtZVNpdGVEaXNwb3NpdGlvbj4geworICAgIHVzaW5n
IHZhbHVlcyA9IEVudW1WYWx1ZXM8CisgICAgICAgIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdEJh
c2U6OlNhbWVTaXRlRGlzcG9zaXRpb24sCisgICAgICAgIFdlYkNvcmU6OlJlc291cmNlUmVxdWVz
dEJhc2U6OlNhbWVTaXRlRGlzcG9zaXRpb246OlVuc3BlY2lmaWVkLAorICAgICAgICBXZWJDb3Jl
OjpSZXNvdXJjZVJlcXVlc3RCYXNlOjpTYW1lU2l0ZURpc3Bvc2l0aW9uOjpTYW1lU2l0ZSwKKyAg
ICAgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0QmFzZTo6U2FtZVNpdGVEaXNwb3NpdGlvbjo6
Q3Jvc3NTaXRlCisgICAgPjsKK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0QmFzZTo6UmVxdWVzdGVyPiB7CisgICAgdXNpbmcgdmFsdWVz
ID0gRW51bVZhbHVlczwKKyAgICAgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0QmFzZTo6UmVx
dWVzdGVyLAorICAgICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RCYXNlOjpSZXF1ZXN0ZXI6
OlVuc3BlY2lmaWVkLAorICAgICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RCYXNlOjpSZXF1
ZXN0ZXI6Ok1haW4sCisgICAgICAgIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdEJhc2U6OlJlcXVl
c3Rlcjo6WEhSLAorICAgICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RCYXNlOjpSZXF1ZXN0
ZXI6OkZldGNoLAorICAgICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RCYXNlOjpSZXF1ZXN0
ZXI6Ok1lZGlhLAorICAgICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RCYXNlOjpSZXF1ZXN0
ZXI6OkltcG9ydFNjcmlwdHMKKyAgICA+OworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVzcG9uc2VCYXNlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJl
c3BvbnNlQmFzZS5oCShyZXZpc2lvbiAyNTk4OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL1Jlc291cmNlUmVzcG9uc2VCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5Nyw5
ICsyOTcsOSBAQCB2b2lkIFJlc291cmNlUmVzcG9uc2VCYXNlOjplbmNvZGUoRW5jb2RlCiAKICAg
ICBlbmNvZGVyIDw8IG1faHR0cFN0YXR1c0NvZGU7CiAgICAgZW5jb2RlciA8PCBtX2NlcnRpZmlj
YXRlSW5mbzsKLSAgICBlbmNvZGVyLmVuY29kZUVudW0obV9zb3VyY2UpOwotICAgIGVuY29kZXIu
ZW5jb2RlRW51bShtX3R5cGUpOwotICAgIGVuY29kZXIuZW5jb2RlRW51bShtX3RhaW50aW5nKTsK
KyAgICBlbmNvZGVyIDw8IG1fc291cmNlOworICAgIGVuY29kZXIgPDwgbV90eXBlOworICAgIGVu
Y29kZXIgPDwgbV90YWludGluZzsKICAgICBlbmNvZGVyIDw8IG1faXNSZWRpcmVjdGVkOwogICAg
IFVzZWRMZWdhY3lUTFMgdXNlZExlZ2FjeVRMUyA9IG1fdXNlZExlZ2FjeVRMUzsKICAgICBlbmNv
ZGVyIDw8IHVzZWRMZWdhY3lUTFM7CkBAIC0zMDcsNjggKzMwNywxNjEgQEAgdm9pZCBSZXNvdXJj
ZVJlc3BvbnNlQmFzZTo6ZW5jb2RlKEVuY29kZQogfQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVy
PgotYm9vbCBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFJl
c291cmNlUmVzcG9uc2VCYXNlJiByZXNwb25zZSkKK2Jvb2wgV0FSTl9VTlVTRURfUkVUVVJOIFJl
c291cmNlUmVzcG9uc2VCYXNlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgUmVzb3VyY2VSZXNw
b25zZUJhc2UmIHJlc3BvbnNlKQogewogICAgIEFTU0VSVChyZXNwb25zZS5tX2lzTnVsbCk7Ci0g
ICAgYm9vbCByZXNwb25zZUlzTnVsbDsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3BvbnNl
SXNOdWxsKSkKKyAgICBPcHRpb25hbDxib29sPiByZXNwb25zZUlzTnVsbDsKKyAgICBkZWNvZGVy
ID4+IHJlc3BvbnNlSXNOdWxsOworICAgIGlmICghcmVzcG9uc2VJc051bGwpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBpZiAocmVzcG9uc2VJc051bGwpCisgICAgaWYgKCpyZXNwb25zZUlz
TnVsbCkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICByZXNwb25zZS5tX2lzTnVsbCA9IGZh
bHNlOwogCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXNwb25zZS5tX3VybCkpCisgICAgT3B0
aW9uYWw8VVJMPiB1cmw7CisgICAgZGVjb2RlciA+PiB1cmw7CisgICAgaWYgKCF1cmwpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3BvbnNlLm1fbWlt
ZVR5cGUpKQorICAgIHJlc3BvbnNlLm1fdXJsID0gV1RGTW92ZSgqdXJsKTsKKworICAgIE9wdGlv
bmFsPFN0cmluZz4gbWltZVR5cGU7CisgICAgZGVjb2RlciA+PiBtaW1lVHlwZTsKKyAgICBpZiAo
IW1pbWVUeXBlKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaW50NjRfdCBleHBlY3RlZENv
bnRlbnRMZW5ndGg7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShleHBlY3RlZENvbnRlbnRMZW5n
dGgpKQorICAgIHJlc3BvbnNlLm1fbWltZVR5cGUgPSBXVEZNb3ZlKCptaW1lVHlwZSk7CisKKyAg
ICBPcHRpb25hbDxpbnQ2NF90PiBleHBlY3RlZENvbnRlbnRMZW5ndGg7CisgICAgZGVjb2RlciA+
PiBleHBlY3RlZENvbnRlbnRMZW5ndGg7CisgICAgaWYgKCFleHBlY3RlZENvbnRlbnRMZW5ndGgp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXNwb25zZS5tX2V4cGVjdGVkQ29udGVudExl
bmd0aCA9IGV4cGVjdGVkQ29udGVudExlbmd0aDsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJl
c3BvbnNlLm1fdGV4dEVuY29kaW5nTmFtZSkpCisgICAgcmVzcG9uc2UubV9leHBlY3RlZENvbnRl
bnRMZW5ndGggPSAqZXhwZWN0ZWRDb250ZW50TGVuZ3RoOworCisgICAgT3B0aW9uYWw8QXRvbVN0
cmluZz4gdGV4dEVuY29kaW5nTmFtZTsKKyAgICBkZWNvZGVyID4+IHRleHRFbmNvZGluZ05hbWU7
CisgICAgaWYgKCF0ZXh0RW5jb2RpbmdOYW1lKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
aWYgKCFkZWNvZGVyLmRlY29kZShyZXNwb25zZS5tX2h0dHBTdGF0dXNUZXh0KSkKKyAgICByZXNw
b25zZS5tX3RleHRFbmNvZGluZ05hbWUgPSBXVEZNb3ZlKCp0ZXh0RW5jb2RpbmdOYW1lKTsKKwor
ICAgIE9wdGlvbmFsPEF0b21TdHJpbmc+IGh0dHBTdGF0dXNUZXh0OworICAgIGRlY29kZXIgPj4g
aHR0cFN0YXR1c1RleHQ7CisgICAgaWYgKCFodHRwU3RhdHVzVGV4dCkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzcG9uc2UubV9odHRwVmVyc2lvbikp
CisgICAgcmVzcG9uc2UubV9odHRwU3RhdHVzVGV4dCA9IFdURk1vdmUoKmh0dHBTdGF0dXNUZXh0
KTsKKworICAgIE9wdGlvbmFsPEF0b21TdHJpbmc+IGh0dHBWZXJzaW9uOworICAgIGRlY29kZXIg
Pj4gaHR0cFZlcnNpb247CisgICAgaWYgKCFodHRwVmVyc2lvbikKICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzcG9uc2UubV9odHRwSGVhZGVyRmllbGRz
KSkKKyAgICByZXNwb25zZS5tX2h0dHBWZXJzaW9uID0gV1RGTW92ZSgqaHR0cFZlcnNpb24pOwor
CisgICAgT3B0aW9uYWw8SFRUUEhlYWRlck1hcD4gaHR0cEhlYWRlckZpZWxkczsKKyAgICBkZWNv
ZGVyID4+IGh0dHBIZWFkZXJGaWVsZHM7CisgICAgaWYgKCFodHRwSGVhZGVyRmllbGRzKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgcmVzcG9uc2UubV9odHRwSGVhZGVyRmllbGRzID0gV1RG
TW92ZSgqaHR0cEhlYWRlckZpZWxkcyk7CisKICAgICAvLyBUaGUgbmV0d29ya0xvYWRNZXRyaWNz
IGluZm8gaXMgb25seSBzZW5kIG92ZXIgSVBDIGFuZCBub3Qgc3RvcmVkIGluIGRpc2sgY2FjaGUu
CiAgICAgaWYgY29uc3RleHByIChEZWNvZGVyOjppc0lQQ0RlY29kZXIpIHsKLSAgICAgICAgaWYg
KCFkZWNvZGVyLmRlY29kZShyZXNwb25zZS5tX25ldHdvcmtMb2FkTWV0cmljcykpCisgICAgICAg
IE9wdGlvbmFsPEJveDxOZXR3b3JrTG9hZE1ldHJpY3M+PiBuZXR3b3JrTG9hZE1ldHJpY3M7Cisg
ICAgICAgIGRlY29kZXIgPj4gbmV0d29ya0xvYWRNZXRyaWNzOworICAgICAgICBpZiAoIW5ldHdv
cmtMb2FkTWV0cmljcykKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmVzcG9u
c2UubV9uZXR3b3JrTG9hZE1ldHJpY3MgPSBXVEZNb3ZlKCpuZXR3b3JrTG9hZE1ldHJpY3MpOwog
ICAgIH0KLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3BvbnNlLm1faHR0cFN0YXR1c0NvZGUp
KQorCisgICAgT3B0aW9uYWw8c2hvcnQ+IGh0dHBTdGF0dXNDb2RlOworICAgIGRlY29kZXIgPj4g
aHR0cFN0YXR1c0NvZGU7CisgICAgaWYgKCFodHRwU3RhdHVzQ29kZSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzcG9uc2UubV9jZXJ0aWZpY2F0ZUlu
Zm8pKQorICAgIHJlc3BvbnNlLm1faHR0cFN0YXR1c0NvZGUgPSBXVEZNb3ZlKCpodHRwU3RhdHVz
Q29kZSk7CisKKyAgICBPcHRpb25hbDxPcHRpb25hbDxDZXJ0aWZpY2F0ZUluZm8+PiBjZXJ0aWZp
Y2F0ZUluZm87CisgICAgZGVjb2RlciA+PiBjZXJ0aWZpY2F0ZUluZm87CisgICAgaWYgKCFjZXJ0
aWZpY2F0ZUluZm8pCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBTb3VyY2Ugc291cmNlID0g
U291cmNlOjpVbmtub3duOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGVFbnVtKHNvdXJjZSkpCisg
ICAgcmVzcG9uc2UubV9jZXJ0aWZpY2F0ZUluZm8gPSBXVEZNb3ZlKCpjZXJ0aWZpY2F0ZUluZm8p
OworCisgICAgT3B0aW9uYWw8U291cmNlPiBzb3VyY2U7CisgICAgZGVjb2RlciA+PiBzb3VyY2U7
CisgICAgaWYgKCFzb3VyY2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXNwb25zZS5t
X3NvdXJjZSA9IHNvdXJjZTsKLSAgICBUeXBlIHR5cGUgPSBUeXBlOjpEZWZhdWx0OwotICAgIGlm
ICghZGVjb2Rlci5kZWNvZGVFbnVtKHR5cGUpKQorICAgIHJlc3BvbnNlLm1fc291cmNlID0gV1RG
TW92ZSgqc291cmNlKTsKKworICAgIE9wdGlvbmFsPFR5cGU+IHR5cGU7CisgICAgZGVjb2RlciA+
PiB0eXBlOworICAgIGlmICghdHlwZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJlc3Bv
bnNlLm1fdHlwZSA9IHR5cGU7Ci0gICAgVGFpbnRpbmcgdGFpbnRpbmcgPSBUYWludGluZzo6QmFz
aWM7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZUVudW0odGFpbnRpbmcpKQorICAgIHJlc3BvbnNl
Lm1fdHlwZSA9IFdURk1vdmUoKnR5cGUpOworCisgICAgT3B0aW9uYWw8VGFpbnRpbmc+IHRhaW50
aW5nOworICAgIGRlY29kZXIgPj4gdGFpbnRpbmc7CisgICAgaWYgKCF0YWludGluZykKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIHJlc3BvbnNlLm1fdGFpbnRpbmcgPSB0YWludGluZzsKLSAg
ICBib29sIGlzUmVkaXJlY3RlZCA9IGZhbHNlOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaXNS
ZWRpcmVjdGVkKSkKKyAgICByZXNwb25zZS5tX3RhaW50aW5nID0gV1RGTW92ZSgqdGFpbnRpbmcp
OworCisgICAgT3B0aW9uYWw8Ym9vbD4gaXNSZWRpcmVjdGVkOworICAgIGRlY29kZXIgPj4gaXNS
ZWRpcmVjdGVkOworICAgIGlmICghaXNSZWRpcmVjdGVkKQogICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgcmVzcG9uc2UubV9pc1JlZGlyZWN0ZWQgPSBpc1JlZGlyZWN0ZWQ7Ci0gICAgVXNlZExl
Z2FjeVRMUyB1c2VkTGVnYWN5VExTID0gVXNlZExlZ2FjeVRMUzo6Tm87Ci0gICAgaWYgKCFkZWNv
ZGVyLmRlY29kZSh1c2VkTGVnYWN5VExTKSkKKyAgICByZXNwb25zZS5tX2lzUmVkaXJlY3RlZCA9
IFdURk1vdmUoKmlzUmVkaXJlY3RlZCk7CisKKyAgICBPcHRpb25hbDxVc2VkTGVnYWN5VExTPiB1
c2VkTGVnYWN5VExTOworICAgIGRlY29kZXIgPj4gdXNlZExlZ2FjeVRMUzsKKyAgICBpZiAoIXVz
ZWRMZWdhY3lUTFMpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXNwb25zZS5tX3VzZWRM
ZWdhY3lUTFMgPSB1c2VkTGVnYWN5VExTOwotICAgIGJvb2wgaXNSYW5nZVJlcXVlc3RlZCA9IGZh
bHNlOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaXNSYW5nZVJlcXVlc3RlZCkpCisgICAgcmVz
cG9uc2UubV91c2VkTGVnYWN5VExTID0gV1RGTW92ZSgqdXNlZExlZ2FjeVRMUyk7CisKKyAgICBP
cHRpb25hbDxib29sPiBpc1JhbmdlUmVxdWVzdGVkOworICAgIGRlY29kZXIgPj4gaXNSYW5nZVJl
cXVlc3RlZDsKKyAgICBpZiAoIWlzUmFuZ2VSZXF1ZXN0ZWQpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICByZXNwb25zZS5tX2lzUmFuZ2VSZXF1ZXN0ZWQgPSBpc1JhbmdlUmVxdWVzdGVkOwor
ICAgIHJlc3BvbnNlLm1faXNSYW5nZVJlcXVlc3RlZCA9IFdURk1vdmUoKmlzUmFuZ2VSZXF1ZXN0
ZWQpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
bmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6
UmVzb3VyY2VSZXNwb25zZUJhc2U6OlR5cGU+IHsKKyAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFs
dWVzPAorICAgICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlQmFzZTo6VHlwZSwKKyAgICAg
ICAgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZUJhc2U6OlR5cGU6OkJhc2ljLAorICAgICAgICBX
ZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlQmFzZTo6VHlwZTo6Q29ycywKKyAgICAgICAgV2ViQ29y
ZTo6UmVzb3VyY2VSZXNwb25zZUJhc2U6OlR5cGU6OkRlZmF1bHQsCisgICAgICAgIFdlYkNvcmU6
OlJlc291cmNlUmVzcG9uc2VCYXNlOjpUeXBlOjpFcnJvciwKKyAgICAgICAgV2ViQ29yZTo6UmVz
b3VyY2VSZXNwb25zZUJhc2U6OlR5cGU6Ok9wYXF1ZSwKKyAgICAgICAgV2ViQ29yZTo6UmVzb3Vy
Y2VSZXNwb25zZUJhc2U6OlR5cGU6Ok9wYXF1ZXJlZGlyZWN0CisgICAgPjsKK307CisKK3RlbXBs
YXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZUJhc2U6OlRh
aW50aW5nPiB7CisgICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKKyAgICAgICAgV2ViQ29y
ZTo6UmVzb3VyY2VSZXNwb25zZUJhc2U6OlRhaW50aW5nLAorICAgICAgICBXZWJDb3JlOjpSZXNv
dXJjZVJlc3BvbnNlQmFzZTo6VGFpbnRpbmc6OkJhc2ljLAorICAgICAgICBXZWJDb3JlOjpSZXNv
dXJjZVJlc3BvbnNlQmFzZTo6VGFpbnRpbmc6OkNvcnMsCisgICAgICAgIFdlYkNvcmU6OlJlc291
cmNlUmVzcG9uc2VCYXNlOjpUYWludGluZzo6T3BhcXVlLAorICAgICAgICBXZWJDb3JlOjpSZXNv
dXJjZVJlc3BvbnNlQmFzZTo6VGFpbnRpbmc6Ok9wYXF1ZXJlZGlyZWN0CisgICAgPjsKK307CisK
KwordGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNl
QmFzZTo6U291cmNlPiB7CisgICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKKyAgICAgICAg
V2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZUJhc2U6OlNvdXJjZSwKKyAgICAgICAgV2ViQ29yZTo6
UmVzb3VyY2VSZXNwb25zZUJhc2U6OlNvdXJjZTo6VW5rbm93biwKKyAgICAgICAgV2ViQ29yZTo6
UmVzb3VyY2VSZXNwb25zZUJhc2U6OlNvdXJjZTo6TmV0d29yaywKKyAgICAgICAgV2ViQ29yZTo6
UmVzb3VyY2VSZXNwb25zZUJhc2U6OlNvdXJjZTo6RGlza0NhY2hlLAorICAgICAgICBXZWJDb3Jl
OjpSZXNvdXJjZVJlc3BvbnNlQmFzZTo6U291cmNlOjpEaXNrQ2FjaGVBZnRlclZhbGlkYXRpb24s
CisgICAgICAgIFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2VCYXNlOjpTb3VyY2U6Ok1lbW9yeUNh
Y2hlLAorICAgICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlQmFzZTo6U291cmNlOjpNZW1v
cnlDYWNoZUFmdGVyVmFsaWRhdGlvbiwKKyAgICAgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25z
ZUJhc2U6OlNvdXJjZTo6U2VydmljZVdvcmtlciwKKyAgICAgICAgV2ViQ29yZTo6UmVzb3VyY2VS
ZXNwb25zZUJhc2U6OlNvdXJjZTo6QXBwbGljYXRpb25DYWNoZSwKKyAgICAgICAgV2ViQ29yZTo6
UmVzb3VyY2VSZXNwb25zZUJhc2U6OlNvdXJjZTo6RE9NQ2FjaGUsCisgICAgICAgIFdlYkNvcmU6
OlJlc291cmNlUmVzcG9uc2VCYXNlOjpTb3VyY2U6Okluc3BlY3Rvck92ZXJyaWRlCisgICAgPjsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdURgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9jZi9DZXJ0aWZpY2F0ZUluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0NlcnRpZmljYXRlSW5mby5oCShyZXZpc2lvbiAyNTk4OTgp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0NlcnRpZmljYXRlSW5mby5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxMiArMjYsMTEgQEAKICNwcmFnbWEgb25jZQogCiAjaW5j
bHVkZSAiQ2VydGlmaWNhdGVJbmZvQmFzZS5oIgorI2luY2x1ZGUgPHd0Zi9FbnVtVHJhaXRzLmg+
CiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNp
bmNsdWRlIDx3dGYvY2YvVHlwZUNhc3RzQ0YuaD4KLSNpbmNsdWRlIDx3dGYvcGVyc2lzdGVuY2Uv
UGVyc2lzdGVudENvZGVycy5oPgotI2luY2x1ZGUgPHd0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50
RGVjb2Rlci5oPgotI2luY2x1ZGUgPHd0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RW5jb2Rlci5o
PgorI2luY2x1ZGUgPHd0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50Q29kZXIuaD4KIAogI2lmIFBM
QVRGT1JNKENPQ09BKQogI2luY2x1ZGUgPFNlY3VyaXR5L1NlY0NlcnRpZmljYXRlLmg+CkBAIC05
OCwxNjMgKzk3LDI1IEBAIHByaXZhdGU6CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKIG5hbWVz
cGFjZSBXVEYgewotbmFtZXNwYWNlIFBlcnNpc3RlbmNlIHsKLQotc3RhdGljIHZvaWQgZW5jb2Rl
Q0ZEYXRhKEVuY29kZXImIGVuY29kZXIsIENGRGF0YVJlZiBkYXRhKQotewotICAgIHVpbnQ2NF90
IGxlbmd0aCA9IENGRGF0YUdldExlbmd0aChkYXRhKTsKLSAgICBjb25zdCB1aW50OF90KiBieXRl
UHRyID0gQ0ZEYXRhR2V0Qnl0ZVB0cihkYXRhKTsKLQotICAgIGVuY29kZXIgPDwgbGVuZ3RoOwot
ICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGJ5dGVQdHIsIHN0YXRpY19jYXN0PHNp
emVfdD4obGVuZ3RoKSk7Ci19Ci0KLXN0YXRpYyBib29sIGRlY29kZUNGRGF0YShEZWNvZGVyJiBk
ZWNvZGVyLCBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiYgZGF0YSkKLXsKLSAgICB1aW50NjRfdCBzaXpl
ID0gMDsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHNpemUpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBWZWN0b3I8dWludDhfdD4gdmVjdG9yKHN0YXRpY19jYXN0PHNpemVfdD4oc2l6
ZSkpOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEodmVjdG9yLmRhdGEo
KSwgdmVjdG9yLnNpemUoKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGRhdGEgPSBh
ZG9wdENGKENGRGF0YUNyZWF0ZShudWxscHRyLCB2ZWN0b3IuZGF0YSgpLCB2ZWN0b3Iuc2l6ZSgp
KSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19CiAKK3RlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8
V2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvOjpUeXBlPiB7CisgICAgdXNpbmcgdmFsdWVzID0gRW51
bVZhbHVlczwKKyAgICAgICAgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvOjpUeXBlLAorICAgICAg
ICBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm86OlR5cGU6Ok5vbmUsCisgICAgICAgIFdlYkNvcmU6
OkNlcnRpZmljYXRlSW5mbzo6VHlwZTo6Q2VydGlmaWNhdGVDaGFpbgogI2lmIEhBVkUoU0VDX1RS
VVNUX1NFUklBTElaQVRJT04pCi1zdGF0aWMgdm9pZCBlbmNvZGVTZWNUcnVzdFJlZihFbmNvZGVy
JiBlbmNvZGVyLCBTZWNUcnVzdFJlZiB0cnVzdCkKLXsKLSAgICBhdXRvIGRhdGEgPSBhZG9wdENG
KFNlY1RydXN0U2VyaWFsaXplKHRydXN0LCBudWxscHRyKSk7Ci0gICAgaWYgKCFkYXRhKSB7Ci0g
ICAgICAgIGVuY29kZXIgPDwgZmFsc2U7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBl
bmNvZGVyIDw8IHRydWU7Ci0gICAgZW5jb2RlQ0ZEYXRhKGVuY29kZXIsIGRhdGEuZ2V0KCkpOwot
fQotCi1zdGF0aWMgYm9vbCBkZWNvZGVTZWNUcnVzdFJlZihEZWNvZGVyJiBkZWNvZGVyLCBSZXRh
aW5QdHI8U2VjVHJ1c3RSZWY+JiByZXN1bHQpCi17Ci0gICAgYm9vbCBoYXNUcnVzdDsKLSAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKGhhc1RydXN0KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgaWYgKCFoYXNUcnVzdCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBSZXRhaW5QdHI8
Q0ZEYXRhUmVmPiB0cnVzdERhdGE7Ci0gICAgaWYgKCFkZWNvZGVDRkRhdGEoZGVjb2RlciwgdHJ1
c3REYXRhKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byB0cnVzdCA9IGFkb3B0
Q0YoU2VjVHJ1c3REZXNlcmlhbGl6ZSh0cnVzdERhdGEuZ2V0KCksIG51bGxwdHIpKTsKLSAgICBp
ZiAoIXRydXN0KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXN1bHQgPSBXVEZNb3Zl
KHRydXN0KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KKyAgICAgICAgLCBXZWJDb3JlOjpDZXJ0aWZp
Y2F0ZUluZm86OlR5cGU6OlRydXN0CiAjZW5kaWYKKyAgICA+OworfTsKIAotI2lmIFBMQVRGT1JN
KENPQ09BKQotc3RhdGljIHZvaWQgZW5jb2RlQ2VydGlmaWNhdGVDaGFpbihFbmNvZGVyJiBlbmNv
ZGVyLCBDRkFycmF5UmVmIGNlcnRpZmljYXRlQ2hhaW4pCi17Ci0gICAgQ0ZJbmRleCBzaXplID0g
Q0ZBcnJheUdldENvdW50KGNlcnRpZmljYXRlQ2hhaW4pOwotICAgIFZlY3RvcjxDRlR5cGVSZWYs
IDMyPiB2YWx1ZXMoc2l6ZSk7Ci0KLSAgICBDRkFycmF5R2V0VmFsdWVzKGNlcnRpZmljYXRlQ2hh
aW4sIENGUmFuZ2VNYWtlKDAsIHNpemUpLCB2YWx1ZXMuZGF0YSgpKTsKLQotICAgIGVuY29kZXIg
PDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHNpemUpOwotCi0gICAgZm9yIChDRkluZGV4IGkgPSAw
OyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIEFTU0VSVCh2YWx1ZXNbaV0pOwotICAgICAgICBh
dXRvIGRhdGEgPSBhZG9wdENGKFNlY0NlcnRpZmljYXRlQ29weURhdGEoY2hlY2tlZF9jZl9jYXN0
PFNlY0NlcnRpZmljYXRlUmVmPih2YWx1ZXNbaV0pKSk7Ci0gICAgICAgIGVuY29kZUNGRGF0YShl
bmNvZGVyLCBkYXRhLmdldCgpKTsKLSAgICB9Ci19Ci0KLXN0YXRpYyBib29sIGRlY29kZUNlcnRp
ZmljYXRlQ2hhaW4oRGVjb2RlciYgZGVjb2RlciwgUmV0YWluUHRyPENGQXJyYXlSZWY+JiBjZXJ0
aWZpY2F0ZUNoYWluKQotewotICAgIHVpbnQ2NF90IHNpemU7Ci0gICAgaWYgKCFkZWNvZGVyLmRl
Y29kZShzaXplKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byBhcnJheSA9IGFk
b3B0Q0YoQ0ZBcnJheUNyZWF0ZU11dGFibGUoMCwgMCwgJmtDRlR5cGVBcnJheUNhbGxCYWNrcykp
OwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgUmV0
YWluUHRyPENGRGF0YVJlZj4gZGF0YTsKLSAgICAgICAgaWYgKCFkZWNvZGVDRkRhdGEoZGVjb2Rl
ciwgZGF0YSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgYXV0byBjZXJ0
aWZpY2F0ZSA9IGFkb3B0Q0YoU2VjQ2VydGlmaWNhdGVDcmVhdGVXaXRoRGF0YSgwLCBkYXRhLmdl
dCgpKSk7Ci0gICAgICAgIENGQXJyYXlBcHBlbmRWYWx1ZShhcnJheS5nZXQoKSwgY2VydGlmaWNh
dGUuZ2V0KCkpOwotICAgIH0KLQotICAgIGNlcnRpZmljYXRlQ2hhaW4gPSBXVEZNb3ZlKGFycmF5
KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLSNlbmRpZgorbmFtZXNwYWNlIFBlcnNpc3RlbmNlIHsK
IAogdGVtcGxhdGU8PiBzdHJ1Y3QgQ29kZXI8V2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvPiB7Ci0g
ICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFdlYkNvcmU6OkNl
cnRpZmljYXRlSW5mbyYgY2VydGlmaWNhdGVJbmZvKQotICAgIHsKLSAgICAgICAgZW5jb2Rlci5l
bmNvZGVFbnVtKGNlcnRpZmljYXRlSW5mby50eXBlKCkpOwotCi0gICAgICAgIHN3aXRjaCAoY2Vy
dGlmaWNhdGVJbmZvLnR5cGUoKSkgewotI2lmIEhBVkUoU0VDX1RSVVNUX1NFUklBTElaQVRJT04p
Ci0gICAgICAgIGNhc2UgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvOjpUeXBlOjpUcnVzdDoKLSAg
ICAgICAgICAgIGVuY29kZVNlY1RydXN0UmVmKGVuY29kZXIsIGNlcnRpZmljYXRlSW5mby50cnVz
dCgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotI2VuZGlmCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0g
ICAgICAgIGNhc2UgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvOjpUeXBlOjpDZXJ0aWZpY2F0ZUNo
YWluOiB7Ci0gICAgICAgICAgICBlbmNvZGVDZXJ0aWZpY2F0ZUNoYWluKGVuY29kZXIsIGNlcnRp
ZmljYXRlSW5mby5jZXJ0aWZpY2F0ZUNoYWluKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSNlbmRpZgotICAgICAgICBjYXNlIFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbzo6VHlw
ZTo6Tm9uZToKLSAgICAgICAgICAgIC8vIERvIG5vdGhpbmcuCi0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVyJiBkZWNv
ZGVyLCBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8mIGNlcnRpZmljYXRlSW5mbykKLSAgICB7Ci0g
ICAgICAgIFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbzo6VHlwZSBjZXJ0aWZpY2F0ZUluZm9UeXBl
OwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlRW51bShjZXJ0aWZpY2F0ZUluZm9UeXBlKSkK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBzd2l0Y2ggKGNlcnRpZmljYXRl
SW5mb1R5cGUpIHsKLSNpZiBIQVZFKFNFQ19UUlVTVF9TRVJJQUxJWkFUSU9OKQotICAgICAgICBj
YXNlIFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbzo6VHlwZTo6VHJ1c3Q6IHsKLSAgICAgICAgICAg
IFJldGFpblB0cjxTZWNUcnVzdFJlZj4gdHJ1c3Q7Ci0gICAgICAgICAgICBpZiAoIWRlY29kZVNl
Y1RydXN0UmVmKGRlY29kZXIsIHRydXN0KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICAgICAgICAgIGNlcnRpZmljYXRlSW5mbyA9IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5m
byhXVEZNb3ZlKHRydXN0KSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQot
I2VuZGlmCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgICAgIGNhc2UgV2ViQ29yZTo6Q2VydGlm
aWNhdGVJbmZvOjpUeXBlOjpDZXJ0aWZpY2F0ZUNoYWluOiB7Ci0gICAgICAgICAgICBSZXRhaW5Q
dHI8Q0ZBcnJheVJlZj4gY2VydGlmaWNhdGVDaGFpbjsKLSAgICAgICAgICAgIGlmICghZGVjb2Rl
Q2VydGlmaWNhdGVDaGFpbihkZWNvZGVyLCBjZXJ0aWZpY2F0ZUNoYWluKSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgICAgIGNlcnRpZmljYXRlSW5mbyA9IFdlYkNv
cmU6OkNlcnRpZmljYXRlSW5mbyhXVEZNb3ZlKGNlcnRpZmljYXRlQ2hhaW4pKTsKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0jZW5kaWYKLSAgICAgICAgY2FzZSBXZWJDb3Jl
OjpDZXJ0aWZpY2F0ZUluZm86OlR5cGU6Ok5vbmU6Ci0gICAgICAgICAgICAvLyBEbyBub3RoaW5n
LgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9CisgICAgc3RhdGljIFdFQkNPUkVfRVhQT1JUIHZvaWQgZW5jb2RlKEVuY29kZXImLCBj
b25zdCBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8mKTsKKyAgICBzdGF0aWMgV0VCQ09SRV9FWFBP
UlQgT3B0aW9uYWw8V2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvPiBkZWNvZGUoRGVjb2RlciYpOwog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV1RGOjpQZXJzaXN0ZW5jZQorCiB9IC8vIG5hbWVzcGFjZSBX
VEYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvQ2VydGlmaWNhdGVJ
bmZvQ0ZOZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvY2YvQ2VydGlmaWNhdGVJbmZvQ0ZOZXQuY3BwCShyZXZpc2lvbiAyNTk4OTgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0NlcnRpZmljYXRlSW5mb0NGTmV0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsOSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIkNlcnRpZmljYXRlSW5mby5oIgogCisjaW5jbHVkZSA8d3RmL3BlcnNpc3RlbmNlL1Bl
cnNpc3RlbnREZWNvZGVyLmg+CisjaW5jbHVkZSA8d3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRF
bmNvZGVyLmg+CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogI2lmIFBMQVRGT1JNKENPQ09BKQpA
QCAtMTUzLDMgKzE1NiwxNjUgQEAgT3B0aW9uYWw8Q2VydGlmaWNhdGVJbmZvOjpTdW1tYXJ5SW5m
bz4gQwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKK25hbWVzcGFjZSBXVEYgeworbmFt
ZXNwYWNlIFBlcnNpc3RlbmNlIHsKKworc3RhdGljIHZvaWQgZW5jb2RlQ0ZEYXRhKEVuY29kZXIm
IGVuY29kZXIsIENGRGF0YVJlZiBkYXRhKQoreworICAgIHVpbnQ2NF90IGxlbmd0aCA9IENGRGF0
YUdldExlbmd0aChkYXRhKTsKKyAgICBjb25zdCB1aW50OF90KiBieXRlUHRyID0gQ0ZEYXRhR2V0
Qnl0ZVB0cihkYXRhKTsKKworICAgIGVuY29kZXIgPDwgbGVuZ3RoOworICAgIGVuY29kZXIuZW5j
b2RlRml4ZWRMZW5ndGhEYXRhKGJ5dGVQdHIsIHN0YXRpY19jYXN0PHNpemVfdD4obGVuZ3RoKSk7
Cit9CisKK3N0YXRpYyBPcHRpb25hbDxSZXRhaW5QdHI8Q0ZEYXRhUmVmPj4gZGVjb2RlQ0ZEYXRh
KERlY29kZXImIGRlY29kZXIpCit7CisgICAgT3B0aW9uYWw8dWludDY0X3Q+IHNpemU7CisgICAg
ZGVjb2RlciA+PiBzaXplOworICAgIGlmICghc2l6ZSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKKworICAgIGlmIChVTkxJS0VMWSghaXNJbkJvdW5kczxzaXplX3Q+KCpzaXplKSkpCisg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgCisgICAgVmVjdG9yPHVpbnQ4X3Q+IHZl
Y3RvcihzdGF0aWNfY2FzdDxzaXplX3Q+KCpzaXplKSk7CisgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZUZpeGVkTGVuZ3RoRGF0YSh2ZWN0b3IuZGF0YSgpLCB2ZWN0b3Iuc2l6ZSgpKSkKKyAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIHJldHVybiBhZG9wdENGKENGRGF0YUNyZWF0ZShu
dWxscHRyLCB2ZWN0b3IuZGF0YSgpLCB2ZWN0b3Iuc2l6ZSgpKSk7Cit9CisKKyNpZiBIQVZFKFNF
Q19UUlVTVF9TRVJJQUxJWkFUSU9OKQorc3RhdGljIHZvaWQgZW5jb2RlU2VjVHJ1c3RSZWYoRW5j
b2RlciYgZW5jb2RlciwgU2VjVHJ1c3RSZWYgdHJ1c3QpCit7CisgICAgYXV0byBkYXRhID0gYWRv
cHRDRihTZWNUcnVzdFNlcmlhbGl6ZSh0cnVzdCwgbnVsbHB0cikpOworICAgIGlmICghZGF0YSkg
eworICAgICAgICBlbmNvZGVyIDw8IGZhbHNlOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgZW5jb2RlciA8PCB0cnVlOworICAgIGVuY29kZUNGRGF0YShlbmNvZGVyLCBkYXRhLmdldCgp
KTsKK30KKworc3RhdGljIE9wdGlvbmFsPFJldGFpblB0cjxTZWNUcnVzdFJlZj4+IGRlY29kZVNl
Y1RydXN0UmVmKERlY29kZXImIGRlY29kZXIpCit7CisgICAgT3B0aW9uYWw8Ym9vbD4gaGFzVHJ1
c3Q7CisgICAgZGVjb2RlciA+PiBoYXNUcnVzdDsKKyAgICBpZiAoIWhhc1RydXN0KQorICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgaWYgKCEqaGFzVHJ1c3QpCisgICAgICAgIHJl
dHVybiB7IG51bGxwdHIgfTsKKworICAgIGF1dG8gdHJ1c3REYXRhID0gZGVjb2RlQ0ZEYXRhKGRl
Y29kZXIpOworICAgIGlmICghdHJ1c3REYXRhKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OworCisgICAgYXV0byB0cnVzdCA9IGFkb3B0Q0YoU2VjVHJ1c3REZXNlcmlhbGl6ZSh0cnVzdERh
dGEtPmdldCgpLCBudWxscHRyKSk7CisgICAgaWYgKCF0cnVzdCkKKyAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKKworICAgIHJldHVybiBXVEZNb3ZlKHRydXN0KTsKK30KKyNlbmRpZgorCisj
aWYgUExBVEZPUk0oQ09DT0EpCitzdGF0aWMgdm9pZCBlbmNvZGVDZXJ0aWZpY2F0ZUNoYWluKEVu
Y29kZXImIGVuY29kZXIsIENGQXJyYXlSZWYgY2VydGlmaWNhdGVDaGFpbikKK3sKKyAgICBDRklu
ZGV4IHNpemUgPSBDRkFycmF5R2V0Q291bnQoY2VydGlmaWNhdGVDaGFpbik7CisgICAgVmVjdG9y
PENGVHlwZVJlZiwgMzI+IHZhbHVlcyhzaXplKTsKKworICAgIENGQXJyYXlHZXRWYWx1ZXMoY2Vy
dGlmaWNhdGVDaGFpbiwgQ0ZSYW5nZU1ha2UoMCwgc2l6ZSksIHZhbHVlcy5kYXRhKCkpOworCisg
ICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oc2l6ZSk7CisKKyAgICBmb3IgKENG
SW5kZXggaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgQVNTRVJUKHZhbHVlc1tpXSk7
CisgICAgICAgIGF1dG8gZGF0YSA9IGFkb3B0Q0YoU2VjQ2VydGlmaWNhdGVDb3B5RGF0YShjaGVj
a2VkX2NmX2Nhc3Q8U2VjQ2VydGlmaWNhdGVSZWY+KHZhbHVlc1tpXSkpKTsKKyAgICAgICAgZW5j
b2RlQ0ZEYXRhKGVuY29kZXIsIGRhdGEuZ2V0KCkpOworICAgIH0KK30KKworc3RhdGljIE9wdGlv
bmFsPFJldGFpblB0cjxDRkFycmF5UmVmPj4gZGVjb2RlQ2VydGlmaWNhdGVDaGFpbihEZWNvZGVy
JiBkZWNvZGVyKQoreworICAgIE9wdGlvbmFsPHVpbnQ2NF90PiBzaXplOworICAgIGRlY29kZXIg
Pj4gc2l6ZTsKKyAgICBpZiAoIXNpemUpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisK
KyAgICBhdXRvIGFycmF5ID0gYWRvcHRDRihDRkFycmF5Q3JlYXRlTXV0YWJsZSgwLCAwLCAma0NG
VHlwZUFycmF5Q2FsbEJhY2tzKSk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8ICpzaXpl
OyArK2kpIHsKKyAgICAgICAgYXV0byBkYXRhID0gZGVjb2RlQ0ZEYXRhKGRlY29kZXIpOworICAg
ICAgICBpZiAoIWRhdGEpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAg
ICAgIGF1dG8gY2VydGlmaWNhdGUgPSBhZG9wdENGKFNlY0NlcnRpZmljYXRlQ3JlYXRlV2l0aERh
dGEoMCwgZGF0YS0+Z2V0KCkpKTsKKyAgICAgICAgQ0ZBcnJheUFwcGVuZFZhbHVlKGFycmF5Lmdl
dCgpLCBjZXJ0aWZpY2F0ZS5nZXQoKSk7CisgICAgfQorCisgICAgcmV0dXJuIHsgV1RGTW92ZShh
cnJheSkgfTsKK30KKyNlbmRpZgorCit2b2lkIENvZGVyPFdlYkNvcmU6OkNlcnRpZmljYXRlSW5m
bz46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUlu
Zm8mIGNlcnRpZmljYXRlSW5mbykKK3sKKyAgICBlbmNvZGVyIDw8IGNlcnRpZmljYXRlSW5mby50
eXBlKCk7CisKKyAgICBzd2l0Y2ggKGNlcnRpZmljYXRlSW5mby50eXBlKCkpIHsKKyNpZiBIQVZF
KFNFQ19UUlVTVF9TRVJJQUxJWkFUSU9OKQorICAgIGNhc2UgV2ViQ29yZTo6Q2VydGlmaWNhdGVJ
bmZvOjpUeXBlOjpUcnVzdDoKKyAgICAgICAgZW5jb2RlU2VjVHJ1c3RSZWYoZW5jb2RlciwgY2Vy
dGlmaWNhdGVJbmZvLnRydXN0KCkpOworICAgICAgICBicmVhazsKKyNlbmRpZgorI2lmIFBMQVRG
T1JNKENPQ09BKQorICAgIGNhc2UgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvOjpUeXBlOjpDZXJ0
aWZpY2F0ZUNoYWluOiB7CisgICAgICAgIGVuY29kZUNlcnRpZmljYXRlQ2hhaW4oZW5jb2Rlciwg
Y2VydGlmaWNhdGVJbmZvLmNlcnRpZmljYXRlQ2hhaW4oKSk7CisgICAgICAgIGJyZWFrOworICAg
IH0KKyNlbmRpZgorICAgIGNhc2UgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvOjpUeXBlOjpOb25l
OgorICAgICAgICAvLyBEbyBub3RoaW5nLgorICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK09w
dGlvbmFsPFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbz4gQ29kZXI8V2ViQ29yZTo6Q2VydGlmaWNh
dGVJbmZvPjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCit7CisgICAgT3B0aW9uYWw8V2ViQ29y
ZTo6Q2VydGlmaWNhdGVJbmZvOjpUeXBlPiBjZXJ0aWZpY2F0ZUluZm9UeXBlOworICAgIGRlY29k
ZXIgPj4gY2VydGlmaWNhdGVJbmZvVHlwZTsKKyAgICBpZiAoIWNlcnRpZmljYXRlSW5mb1R5cGUp
CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBzd2l0Y2ggKCpjZXJ0aWZpY2F0
ZUluZm9UeXBlKSB7CisjaWYgSEFWRShTRUNfVFJVU1RfU0VSSUFMSVpBVElPTikKKyAgICBjYXNl
IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbzo6VHlwZTo6VHJ1c3Q6IHsKKyAgICAgICAgYXV0byB0
cnVzdCA9IGRlY29kZVNlY1RydXN0UmVmKGRlY29kZXIpOworICAgICAgICBpZiAoIXRydXN0KQor
ICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgICAgICByZXR1cm4gV2ViQ29y
ZTo6Q2VydGlmaWNhdGVJbmZvKFdURk1vdmUoKnRydXN0KSk7CisgICAgfQorI2VuZGlmCisjaWYg
UExBVEZPUk0oQ09DT0EpCisgICAgY2FzZSBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm86OlR5cGU6
OkNlcnRpZmljYXRlQ2hhaW46IHsKKyAgICAgICAgYXV0byBjZXJ0aWZpY2F0ZUNoYWluID0gZGVj
b2RlQ2VydGlmaWNhdGVDaGFpbihkZWNvZGVyKTsKKyAgICAgICAgaWYgKCFjZXJ0aWZpY2F0ZUNo
YWluKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgICAgICByZXR1cm4g
V2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvKFdURk1vdmUoKmNlcnRpZmljYXRlQ2hhaW4pKTsKKyAg
ICB9CisjZW5kaWYKKyAgICBjYXNlIFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbzo6VHlwZTo6Tm9u
ZToKKyAgICAgICAgLy8gRG8gbm90aGluZy4KKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkNlcnRp
ZmljYXRlSW5mbygpOworICAgIH0KKworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFBlcnNpc3RlbmNlCit9IC8vIG5hbWVzcGFjZSBXVEYKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DZXJ0aWZpY2F0ZUluZm8uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ2VydGlmaWNhdGVJ
bmZvLmgJKHJldmlzaW9uIDI1OTg5OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvY3VybC9DZXJ0aWZpY2F0ZUluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtODIsMjcgKzgyLDI5
IEBAIHRlbXBsYXRlPD4gc3RydWN0IENvZGVyPFdlYkNvcmU6OkNlcnRpZmkKICAgICAgICAgICAg
IGVuY29kZXIgPDwgY2VydGlmaWNhdGU7CiAgICAgfQogCi0gICAgc3RhdGljIGJvb2wgZGVjb2Rl
KERlY29kZXImIGRlY29kZXIsIFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyYgY2VydGlmaWNhdGVJ
bmZvKQorICAgIHN0YXRpYyBPcHRpb25hbDxXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8+IGRlY29k
ZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIHsKLSAgICAgICAgaW50IHZlcmlmaWNhdGlvbkVycm9y
OwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHZlcmlmaWNhdGlvbkVycm9yKSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBzaXplX3QgbnVtT2ZDZXJ0ID0gMDsKLSAg
ICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShudW1PZkNlcnQpKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICBPcHRpb25hbDxpbnQ+IHZlcmlmaWNhdGlvbkVycm9yOworICAgICAg
ICBkZWNvZGVyID4+IHZlcmlmaWNhdGlvbkVycm9yOworICAgICAgICBpZiAoIXZlcmlmaWNhdGlv
bkVycm9yKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgICAgICBPcHRp
b25hbDxzaXplX3Q+IG51bU9mQ2VydHM7CisgICAgICAgIGRlY29kZXIgPj4gbnVtT2ZDZXJ0czsK
KyAgICAgICAgaWYgKCFudW1PZkNlcnRzKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKIAogICAgICAgICBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm86OkNlcnRpZmljYXRlQ2hhaW4g
Y2VydGlmaWNhdGVDaGFpbjsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1PZkNl
cnQ7IGkrKykgewotICAgICAgICAgICAgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvOjpDZXJ0aWZp
Y2F0ZSBjZXJ0aWZpY2F0ZTsKLSAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoY2VydGlm
aWNhdGUpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBudW1PZkNlcnRzLnZhbHVlKCk7IGkrKykgeworICAgICAgICAgICAgT3B0
aW9uYWw8V2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvOjpDZXJ0aWZpY2F0ZT4gY2VydGlmaWNhdGU7
CisgICAgICAgICAgICBkZWNvZGVyID4+IGNlcnRpZmljYXRlOworICAgICAgICAgICAgaWYgKCFj
ZXJ0aWZpY2F0ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAg
ICAgICAgICBjZXJ0aWZpY2F0ZUNoYWluLmFwcGVuZChXVEZNb3ZlKGNlcnRpZmljYXRlKSk7Cisg
ICAgICAgICAgICBjZXJ0aWZpY2F0ZUNoYWluLmFwcGVuZChXVEZNb3ZlKGNlcnRpZmljYXRlLnZh
bHVlKCkpKTsKICAgICAgICAgfQogCi0gICAgICAgIGNlcnRpZmljYXRlSW5mbyA9IFdlYkNvcmU6
OkNlcnRpZmljYXRlSW5mbyh2ZXJpZmljYXRpb25FcnJvciwgV1RGTW92ZShjZXJ0aWZpY2F0ZUNo
YWluKSk7Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4gV2ViQ29yZTo6Q2Vy
dGlmaWNhdGVJbmZvKHZlcmlmaWNhdGlvbkVycm9yLnZhbHVlKCksIFdURk1vdmUoY2VydGlmaWNh
dGVDaGFpbikpOwogICAgIH0KIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvc291cC9DZXJ0aWZpY2F0ZUluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQ2VydGlmaWNhdGVJbmZvLmgJKHJldmlzaW9uIDI1OTg5
OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9DZXJ0aWZpY2F0ZUlu
Zm8uaAkod29ya2luZyBjb3B5KQpAQCAtNzYsMTUgKzc2LDE4IEBAIHRlbXBsYXRlPD4gc3RydWN0
IENvZGVyPEdSZWZQdHI8R0J5dGVBcnIKICAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0
aERhdGEoYnl0ZUFycmF5LT5kYXRhLCBieXRlQXJyYXktPmxlbik7CiAgICAgfQogCi0gICAgc3Rh
dGljIGJvb2wgZGVjb2RlKERlY29kZXIgJmRlY29kZXIsIEdSZWZQdHI8R0J5dGVBcnJheT4mIGJ5
dGVBcnJheSkKKyAgICBzdGF0aWMgT3B0aW9uYWw8R1JlZlB0cjxHQnl0ZUFycmF5Pj4gZGVjb2Rl
KERlY29kZXImIGRlY29kZXIpCiAgICAgewotICAgICAgICB1aW50MzJfdCBzaXplOwotICAgICAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKHNpemUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgICAgIGJ5dGVBcnJheSA9IGFkb3B0R1JlZihnX2J5dGVfYXJyYXlfc2l6ZWRfbmV3KHNp
emUpKTsKLSAgICAgICAgZ19ieXRlX2FycmF5X3NldF9zaXplKGJ5dGVBcnJheS5nZXQoKSwgc2l6
ZSk7Ci0gICAgICAgIHJldHVybiBkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShieXRlQXJy
YXktPmRhdGEsIHNpemUpOworICAgICAgICBPcHRpb25hbDx1aW50MzJfdD4gc2l6ZTsKKyAgICAg
ICAgZGVjb2RlciA+PiBzaXplOworICAgICAgICBpZiAoIXNpemUpCisgICAgICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OworCisgICAgICAgIEdSZWZQdHI8R0J5dGVBcnJheT4gYnl0ZUFycmF5
ID0gYWRvcHRHUmVmKGdfYnl0ZV9hcnJheV9zaXplZF9uZXcoKnNpemUpKTsKKyAgICAgICAgZ19i
eXRlX2FycmF5X3NldF9zaXplKGJ5dGVBcnJheS5nZXQoKSwgKnNpemUpOworICAgICAgICBpZiAo
IWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKGJ5dGVBcnJheS0+ZGF0YSwgKnNpemUpKQor
ICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgcmV0dXJuIGJ5dGVBcnJh
eTsKICAgICB9CiB9OwogCkBAIC0xMzksMjUgKzE0MiwyOSBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBD
b2RlcjxXZWJDb3JlOjpDZXJ0aWZpCiAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWlu
dDMyX3Q+KGNlcnRpZmljYXRlSW5mby50bHNFcnJvcnMoKSk7CiAgICAgfQogCi0gICAgc3RhdGlj
IGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyYg
Y2VydGlmaWNhdGVJbmZvKQorICAgIHN0YXRpYyBPcHRpb25hbDxXZWJDb3JlOjpDZXJ0aWZpY2F0
ZUluZm8+IGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIHsKLSAgICAgICAgVmVjdG9yPEdS
ZWZQdHI8R0J5dGVBcnJheT4+IGNlcnRpZmljYXRlc0RhdGFMaXN0OwotICAgICAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKGNlcnRpZmljYXRlc0RhdGFMaXN0KSkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgT3B0aW9uYWw8VmVjdG9yPEdSZWZQdHI8R0J5dGVBcnJheT4+PiBjZXJ0
aWZpY2F0ZXNEYXRhTGlzdDsKKyAgICAgICAgZGVjb2RlciA+PiBjZXJ0aWZpY2F0ZXNEYXRhTGlz
dDsKKyAgICAgICAgaWYgKCFjZXJ0aWZpY2F0ZXNEYXRhTGlzdCkKKyAgICAgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CisKKyAgICAgICAgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvIGNlcnRp
ZmljYXRlSW5mbzsKKyAgICAgICAgaWYgKGNlcnRpZmljYXRlc0RhdGFMaXN0LT5pc0VtcHR5KCkp
CisgICAgICAgICAgICByZXR1cm4gY2VydGlmaWNhdGVJbmZvOwogCi0gICAgICAgIGlmIChjZXJ0
aWZpY2F0ZXNEYXRhTGlzdC5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgYXV0byBjZXJ0aWZpY2F0ZSA9IGNlcnRpZmljYXRlRnJvbUNlcnRpZmljYXRlc0RhdGFM
aXN0KGNlcnRpZmljYXRlc0RhdGFMaXN0KTsKKyAgICAgICAgYXV0byBjZXJ0aWZpY2F0ZSA9IGNl
cnRpZmljYXRlRnJvbUNlcnRpZmljYXRlc0RhdGFMaXN0KGNlcnRpZmljYXRlc0RhdGFMaXN0LnZh
bHVlKCkpOwogICAgICAgICBpZiAoIWNlcnRpZmljYXRlKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAgICAgY2VydGlmaWNh
dGVJbmZvLnNldENlcnRpZmljYXRlKGNlcnRpZmljYXRlLmdldCgpKTsKIAotICAgICAgICB1aW50
MzJfdCB0bHNFcnJvcnM7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUodGxzRXJyb3JzKSkK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgY2VydGlmaWNhdGVJbmZvLnNldFRM
U0Vycm9ycyhzdGF0aWNfY2FzdDxHVGxzQ2VydGlmaWNhdGVGbGFncz4odGxzRXJyb3JzKSk7Cisg
ICAgICAgIE9wdGlvbmFsPHVpbnQzMl90PiB0bHNFcnJvcnM7CisgICAgICAgIGRlY29kZXIgPj4g
dGxzRXJyb3JzOworICAgICAgICBpZiAoIXRsc0Vycm9ycykKKyAgICAgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CisgICAgICAgIGNlcnRpZmljYXRlSW5mby5zZXRUTFNFcnJvcnMoc3RhdGlj
X2Nhc3Q8R1Rsc0NlcnRpZmljYXRlRmxhZ3M+KCp0bHNFcnJvcnMpKTsKIAotICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGNlcnRpZmljYXRlSW5mbzsKICAgICB9CiB9OwogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2UvU2VydmljZVdvcmtlckNvbnRleHRE
YXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL1NlcnZp
Y2VXb3JrZXJDb250ZXh0RGF0YS5oCShyZXZpc2lvbiAyNTk4OTgpCisrKyBTb3VyY2UvV2ViQ29y
ZS93b3JrZXJzL3NlcnZpY2UvU2VydmljZVdvcmtlckNvbnRleHREYXRhLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTUxLDIwICs1MSwyOCBAQCBzdHJ1Y3QgU2VydmljZVdvcmtlckNvbnRleHREYXRhIHsK
ICAgICAgICAgICAgIGVuY29kZXIgPDwgc2NyaXB0IDw8IHJlc3BvbnNlVVJMIDw8IG1pbWVUeXBl
OwogICAgICAgICB9CiAKLSAgICAgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIGJv
b2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIEltcG9ydGVkU2NyaXB0JiBzY3JpcHQpCisgICAg
ICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxJbXBvcnRlZFNjcmlw
dD4gZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEltcG9y
dGVkU2NyaXB0IGltcG9ydGVkU2NyaXB0OwotICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShpbXBvcnRlZFNjcmlwdC5zY3JpcHQpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShpbXBvcnRlZFNjcmlwdC5yZXNwb25z
ZVVSTCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKGltcG9ydGVkU2NyaXB0Lm1pbWVUeXBlKSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgICAgIHNjcmlwdCA9IFdURk1vdmUoaW1wb3J0ZWRT
Y3JpcHQpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICBPcHRpb25hbDxT
dHJpbmc+IHNjcmlwdDsKKyAgICAgICAgICAgIGRlY29kZXIgPj4gc2NyaXB0OworICAgICAgICAg
ICAgaWYgKCFzY3JpcHQpCisgICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgT3B0aW9uYWw8VVJMPiByZXNwb25zZVVSTDsKKyAgICAg
ICAgICAgIGRlY29kZXIgPj4gcmVzcG9uc2VVUkw7CisgICAgICAgICAgICBpZiAoIXJlc3BvbnNl
VVJMKQorICAgICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIE9wdGlvbmFsPFN0cmluZz4gbWltZVR5cGU7CisgICAgICAgICAgICBkZWNv
ZGVyID4+IG1pbWVUeXBlOworICAgICAgICAgICAgaWYgKCFtaW1lVHlwZSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICAgICAgCisgICAgICAgICAgICByZXR1
cm4ge3sKKyAgICAgICAgICAgICAgICBXVEZNb3ZlKCpzY3JpcHQpLAorICAgICAgICAgICAgICAg
IFdURk1vdmUoKnJlc3BvbnNlVVJMKSwKKyAgICAgICAgICAgICAgICBXVEZNb3ZlKCptaW1lVHlw
ZSkKKyAgICAgICAgICAgIH19OwogICAgICAgICB9CiAgICAgfTsKIApJbmRleDogU291cmNlL1dl
YkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9SZWdpc3RyYXRpb25EYXRhYmFzZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9SZWdpc3Ry
YXRpb25EYXRhYmFzZS5jcHAJKHJldmlzaW9uIDI1OTg5OCkKKysrIFNvdXJjZS9XZWJDb3JlL3dv
cmtlcnMvc2VydmljZS9zZXJ2ZXIvUmVnaXN0cmF0aW9uRGF0YWJhc2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNDIsNyArMzQyLDcgQEAgdm9pZCBSZWdpc3RyYXRpb25EYXRhYmFzZTo6ZG9QdXNo
Q2hhbmdlcwogICAgICAgICBkYXRhLmNvbnRlbnRTZWN1cml0eVBvbGljeS5lbmNvZGUoY3NwRW5j
b2Rlcik7CiAKICAgICAgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2RlciBzY3JpcHRSZXNvdXJj
ZU1hcEVuY29kZXI7Ci0gICAgICAgIHNjcmlwdFJlc291cmNlTWFwRW5jb2Rlci5lbmNvZGUoZGF0
YS5zY3JpcHRSZXNvdXJjZU1hcCk7CisgICAgICAgIHNjcmlwdFJlc291cmNlTWFwRW5jb2RlciA8
PCBkYXRhLnNjcmlwdFJlc291cmNlTWFwOwogCiAgICAgICAgIGlmIChzcWwuYmluZFRleHQoMSwg
ZGF0YS5yZWdpc3RyYXRpb24ua2V5LnRvRGF0YWJhc2VLZXkoKSkgIT0gU1FMSVRFX09LCiAgICAg
ICAgICAgICB8fCBzcWwuYmluZFRleHQoMiwgZGF0YS5yZWdpc3RyYXRpb24uc2NvcGVVUkwucHJv
dG9jb2xIb3N0QW5kUG9ydCgpKSAhPSBTUUxJVEVfT0sKQEAgLTM5MiwxOSArMzkyLDIzIEBAIFN0
cmluZyBSZWdpc3RyYXRpb25EYXRhYmFzZTo6aW1wb3J0UmVjb3IKICAgICAgICAgVmVjdG9yPHVp
bnQ4X3Q+IGNvbnRlbnRTZWN1cml0eVBvbGljeURhdGE7CiAgICAgICAgIHNxbC5nZXRDb2x1bW5C
bG9iQXNWZWN0b3IoOSwgY29udGVudFNlY3VyaXR5UG9saWN5RGF0YSk7CiAgICAgICAgIFdURjo6
UGVyc2lzdGVuY2U6OkRlY29kZXIgY3NwRGVjb2Rlcihjb250ZW50U2VjdXJpdHlQb2xpY3lEYXRh
LmRhdGEoKSwgY29udGVudFNlY3VyaXR5UG9saWN5RGF0YS5zaXplKCkpOwotICAgICAgICBDb250
ZW50U2VjdXJpdHlQb2xpY3lSZXNwb25zZUhlYWRlcnMgY29udGVudFNlY3VyaXR5UG9saWN5Owot
ICAgICAgICBpZiAoY29udGVudFNlY3VyaXR5UG9saWN5RGF0YS5zaXplKCkgJiYgIUNvbnRlbnRT
ZWN1cml0eVBvbGljeVJlc3BvbnNlSGVhZGVyczo6ZGVjb2RlKGNzcERlY29kZXIsIGNvbnRlbnRT
ZWN1cml0eVBvbGljeSkpCi0gICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgT3B0aW9uYWw8
Q29udGVudFNlY3VyaXR5UG9saWN5UmVzcG9uc2VIZWFkZXJzPiBjb250ZW50U2VjdXJpdHlQb2xp
Y3k7CisgICAgICAgIGlmIChjb250ZW50U2VjdXJpdHlQb2xpY3lEYXRhLnNpemUoKSkgeworICAg
ICAgICAgICAgY3NwRGVjb2RlciA+PiBjb250ZW50U2VjdXJpdHlQb2xpY3k7CisgICAgICAgICAg
ICBpZiAoIWNvbnRlbnRTZWN1cml0eVBvbGljeSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgfQogCiAgICAgICAgIGF1dG8gcmVmZXJyZXJQb2xpY3kgPSBzcWwuZ2V0Q29sdW1u
VGV4dCgxMCk7CiAKICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHNjcmlwdFJlc291cmNlTWFwRGF0
YTsKICAgICAgICAgc3FsLmdldENvbHVtbkJsb2JBc1ZlY3RvcigxMSwgc2NyaXB0UmVzb3VyY2VN
YXBEYXRhKTsKLSAgICAgICAgSGFzaE1hcDxVUkwsIFNlcnZpY2VXb3JrZXJDb250ZXh0RGF0YTo6
SW1wb3J0ZWRTY3JpcHQ+IHNjcmlwdFJlc291cmNlTWFwOworICAgICAgICBPcHRpb25hbDxIYXNo
TWFwPFVSTCwgU2VydmljZVdvcmtlckNvbnRleHREYXRhOjpJbXBvcnRlZFNjcmlwdD4+IHNjcmlw
dFJlc291cmNlTWFwOwogCiAgICAgICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgc2NyaXB0
UmVzb3VyY2VNYXBEZWNvZGVyKHNjcmlwdFJlc291cmNlTWFwRGF0YS5kYXRhKCksIHNjcmlwdFJl
c291cmNlTWFwRGF0YS5zaXplKCkpOwogICAgICAgICBpZiAoc2NyaXB0UmVzb3VyY2VNYXBEYXRh
LnNpemUoKSkgewotICAgICAgICAgICAgaWYgKCFzY3JpcHRSZXNvdXJjZU1hcERlY29kZXIuZGVj
b2RlKHNjcmlwdFJlc291cmNlTWFwKSkKKyAgICAgICAgICAgIHNjcmlwdFJlc291cmNlTWFwRGVj
b2RlciA+PiBzY3JpcHRSZXNvdXJjZU1hcDsKKyAgICAgICAgICAgIGlmICghc2NyaXB0UmVzb3Vy
Y2VNYXApCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIApAQCAtNDE4LDcg
KzQyMiw3IEBAIFN0cmluZyBSZWdpc3RyYXRpb25EYXRhYmFzZTo6aW1wb3J0UmVjb3IKICAgICAg
ICAgYXV0byByZWdpc3RyYXRpb25JZGVudGlmaWVyID0gU2VydmljZVdvcmtlclJlZ2lzdHJhdGlv
bklkZW50aWZpZXI6OmdlbmVyYXRlKCk7CiAgICAgICAgIGF1dG8gc2VydmljZVdvcmtlckRhdGEg
PSBTZXJ2aWNlV29ya2VyRGF0YSB7IHdvcmtlcklkZW50aWZpZXIsIHNjcmlwdFVSTCwgU2Vydmlj
ZVdvcmtlclN0YXRlOjpBY3RpdmF0ZWQsICp3b3JrZXJUeXBlLCByZWdpc3RyYXRpb25JZGVudGlm
aWVyIH07CiAgICAgICAgIGF1dG8gcmVnaXN0cmF0aW9uID0gU2VydmljZVdvcmtlclJlZ2lzdHJh
dGlvbkRhdGEgeyBXVEZNb3ZlKCprZXkpLCByZWdpc3RyYXRpb25JZGVudGlmaWVyLCBXVEZNb3Zl
KHNjb3BlVVJMKSwgKnVwZGF0ZVZpYUNhY2hlLCBsYXN0VXBkYXRlQ2hlY2tUaW1lLCBXVEY6Om51
bGxvcHQsIFdURjo6bnVsbG9wdCwgV1RGTW92ZShzZXJ2aWNlV29ya2VyRGF0YSkgfTsKLSAgICAg
ICAgYXV0byBjb250ZXh0RGF0YSA9IFNlcnZpY2VXb3JrZXJDb250ZXh0RGF0YSB7IFdURjo6bnVs
bG9wdCwgV1RGTW92ZShyZWdpc3RyYXRpb24pLCB3b3JrZXJJZGVudGlmaWVyLCBXVEZNb3ZlKHNj
cmlwdCksIFdURk1vdmUoY29udGVudFNlY3VyaXR5UG9saWN5KSwgV1RGTW92ZShyZWZlcnJlclBv
bGljeSksIFdURk1vdmUoc2NyaXB0VVJMKSwgKndvcmtlclR5cGUsIHRydWUsIFdURk1vdmUoc2Ny
aXB0UmVzb3VyY2VNYXApIH07CisgICAgICAgIGF1dG8gY29udGV4dERhdGEgPSBTZXJ2aWNlV29y
a2VyQ29udGV4dERhdGEgeyBXVEY6Om51bGxvcHQsIFdURk1vdmUocmVnaXN0cmF0aW9uKSwgd29y
a2VySWRlbnRpZmllciwgV1RGTW92ZShzY3JpcHQpLCBXVEZNb3ZlKCpjb250ZW50U2VjdXJpdHlQ
b2xpY3kpLCBXVEZNb3ZlKHJlZmVycmVyUG9saWN5KSwgV1RGTW92ZShzY3JpcHRVUkwpLCAqd29y
a2VyVHlwZSwgdHJ1ZSwgV1RGTW92ZSgqc2NyaXB0UmVzb3VyY2VNYXApIH07CiAKICAgICAgICAg
Y2FsbE9uTWFpblRocmVhZChbcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb250ZXh0
RGF0YSA9IGNvbnRleHREYXRhLmlzb2xhdGVkQ29weSgpXSgpIG11dGFibGUgewogICAgICAgICAg
ICAgcHJvdGVjdGVkVGhpcy0+YWRkUmVnaXN0cmF0aW9uVG9TdG9yZShXVEZNb3ZlKGNvbnRleHRE
YXRhKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L0NoYW5nZUxvZwkocmV2aXNpb24gMjU5ODk4KQorKysgU291cmNlL1dlYktpdC9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzNSBAQAorMjAyMC0wNC0xMCAgQWxl
eCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIFBlcnNp
c3RlbnRDb2RlcnMgc2hvdWxkIHVzZSBtb2Rlcm4gZGVjb2Rpbmcgc3ludGF4CisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDc0OTcKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2Nh
Y2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVT
dG9yYWdlOjpkZWNvZGVET01DYWNoZVJlY29yZCk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3Rv
cmFnZTo6Q2FjaGU6OmRlY29kZVJlY29yZEhlYWRlcik6CisgICAgICAgICogTmV0d29ya1Byb2Nl
c3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
Q2FjaGVTdG9yYWdlOjpDYWNoZXM6OnJlYWRPcmlnaW4pOgorICAgICAgICAoV2ViS2l0OjpDYWNo
ZVN0b3JhZ2U6OmRlY29kZUNhY2hlc05hbWVzKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9j
YWNoZS9OZXR3b3JrQ2FjaGVDb2RlcnMuY3BwOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6
Q29kZXI8V2ViQ29yZTo6SFRUUEhlYWRlck1hcD46OmRlY29kZSk6CisgICAgICAgICogTmV0d29y
a1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRW50cnkuY3BwOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrQ2FjaGU6OkVudHJ5OjpkZWNvZGVTdG9yYWdlUmVjb3JkKToKKyAgICAgICAgKiBOZXR3
b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVLZXkuY3BwOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrQ2FjaGU6OktleTo6ZGVjb2RlKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9OZXR3b3JrQ2FjaGVLZXkuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3
b3JrQ2FjaGVTdG9yYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpkZWNv
ZGVSZWNvcmRNZXRhRGF0YSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29y
a0NhY2hlU3VicmVzb3VyY2VzRW50cnkuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2Fj
aGU6OlN1YnJlc291cmNlSW5mbzo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya0NhY2hlOjpTdWJyZXNvdXJjZUluZm86OmRlY29kZSk6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtDYWNoZTo6U3VicmVzb3VyY2VzRW50cnk6OmRlY29kZVN0b3JhZ2VSZWNvcmQpOgorICAg
ICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN1YnJlc291cmNlc0VudHJ5
Lmg6CisgICAgICAgICogU2hhcmVkL1VzZXJEYXRhLmNwcDoKKyAgICAgICAgKFdlYktpdDo6VXNl
ckRhdGE6OmRlY29kZSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9BUElDb250ZW50UnVsZUxp
c3RTdG9yZS5jcHA6CisgICAgICAgIChBUEk6OmRlY29kZUNvbnRlbnRSdWxlTGlzdE1ldGFEYXRh
KToKKwogMjAyMC0wNC0xMCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAg
ICAgIEZpcnN0IHJlbmRlciBhZnRlciBhIHByb2Nlc3Mgc3dhcCBkb2VzIG5vdCB1c2UgYWNjZWxl
cmF0ZWQgcmVuZGVyaW5nCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hl
L0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlLmNwcAkocmV2aXNp
b24gMjU5ODk4KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0
b3JhZ2VFbmdpbmVDYWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3Miw0NSArNTcyLDgwIEBA
IFN0b3JhZ2U6OlJlY29yZCBDYWNoZTo6ZW5jb2RlKGNvbnN0IFJlY28KICAgICByZXR1cm4geyBy
ZWNvcmRJbmZvcm1hdGlvbi5rZXksIHsgfSwgaGVhZGVyLCBib2R5LCB7IH0gfTsKIH0KIAotT3B0
aW9uYWw8Q2FjaGU6OkRlY29kZWRSZWNvcmQ+IENhY2hlOjpkZWNvZGVSZWNvcmRIZWFkZXIoY29u
c3QgU3RvcmFnZTo6UmVjb3JkJiBzdG9yYWdlKQorc3RhdGljIE9wdGlvbmFsPFdlYkNvcmU6OkRP
TUNhY2hlRW5naW5lOjpSZWNvcmQ+IGRlY29kZURPTUNhY2hlUmVjb3JkKFdURjo6UGVyc2lzdGVu
Y2U6OkRlY29kZXImIGRlY29kZXIpCiB7Ci0gICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBk
ZWNvZGVyKHN0b3JhZ2UuaGVhZGVyLmRhdGEoKSwgc3RvcmFnZS5oZWFkZXIuc2l6ZSgpKTsKLQot
ICAgIFJlY29yZCByZWNvcmQ7Ci0KLSAgICBkb3VibGUgaW5zZXJ0aW9uVGltZTsKLSAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKGluc2VydGlvblRpbWUpKQotICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwotCi0gICAgdWludDY0X3Qgc2l6ZTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHNpemUp
KQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShyZWNvcmQucmVxdWVzdEhlYWRlcnNHdWFyZCkpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7Ci0KLSAgICBpZiAoIXJlY29yZC5yZXF1ZXN0LmRlY29kZVdpdGhvdXRQbGF0Zm9ybURhdGEo
ZGVjb2RlcikpCisgICAgT3B0aW9uYWw8RmV0Y2hIZWFkZXJzOjpHdWFyZD4gcmVxdWVzdEhlYWRl
cnNHdWFyZDsKKyAgICBkZWNvZGVyID4+IHJlcXVlc3RIZWFkZXJzR3VhcmQ7CisgICAgaWYgKCFy
ZXF1ZXN0SGVhZGVyc0d1YXJkKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIAor
ICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0OworICAgIGlmICghcmVxdWVzdC5kZWNvZGVXaXRo
b3V0UGxhdGZvcm1EYXRhKGRlY29kZXIpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owor
ICAgIAorICAgIEZldGNoT3B0aW9ucyBvcHRpb25zOworICAgIGlmICghRmV0Y2hPcHRpb25zOjpk
ZWNvZGVQZXJzaXN0ZW50KGRlY29kZXIsIG9wdGlvbnMpKQorICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OworICAgIAorICAgIE9wdGlvbmFsPFN0cmluZz4gcmVmZXJyZXI7CisgICAgZGVjb2Rl
ciA+PiByZWZlcnJlcjsKKyAgICBpZiAoIXJlZmVycmVyKQorICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OworICAgIAorICAgIE9wdGlvbmFsPEZldGNoSGVhZGVyczo6R3VhcmQ+IHJlc3BvbnNl
SGVhZGVyc0d1YXJkOworICAgIGRlY29kZXIgPj4gcmVzcG9uc2VIZWFkZXJzR3VhcmQ7CisgICAg
aWYgKCFyZXNwb25zZUhlYWRlcnNHdWFyZCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
KworICAgIFJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2U7CisgICAgaWYgKCFSZXNvdXJjZVJlc3Bv
bnNlQmFzZTo6ZGVjb2RlKGRlY29kZXIsIHJlc3BvbnNlKSkKKyAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKKyAgICAKKyAgICBPcHRpb25hbDx1aW50NjRfdD4gcmVzcG9uc2VCb2R5U2l6ZTsK
KyAgICBkZWNvZGVyID4+IHJlc3BvbnNlQm9keVNpemU7CisgICAgaWYgKCFyZXNwb25zZUJvZHlT
aXplKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgaWYgKCFGZXRjaE9wdGlv
bnM6OmRlY29kZVBlcnNpc3RlbnQoZGVjb2RlciwgcmVjb3JkLm9wdGlvbnMpKQorICAgIGlmICgh
ZGVjb2Rlci52ZXJpZnlDaGVja3N1bSgpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owog
Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZWNvcmQucmVmZXJyZXIpKQotICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OworICAgIHJldHVybiB7eworICAgICAgICAwLAorICAgICAgICAwLAor
ICAgICAgICBXVEZNb3ZlKCpyZXF1ZXN0SGVhZGVyc0d1YXJkKSwKKyAgICAgICAgV1RGTW92ZShy
ZXF1ZXN0KSwKKyAgICAgICAgV1RGTW92ZShvcHRpb25zKSwKKyAgICAgICAgV1RGTW92ZSgqcmVm
ZXJyZXIpLAorICAgICAgICBXVEZNb3ZlKCpyZXNwb25zZUhlYWRlcnNHdWFyZCksCisgICAgICAg
IFdURk1vdmUocmVzcG9uc2UpLAorICAgICAgICB7IH0sCisgICAgICAgIFdURk1vdmUoKnJlc3Bv
bnNlQm9keVNpemUpCisgICAgfX07Cit9CiAKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlY29y
ZC5yZXNwb25zZUhlYWRlcnNHdWFyZCkpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CitP
cHRpb25hbDxDYWNoZTo6RGVjb2RlZFJlY29yZD4gQ2FjaGU6OmRlY29kZVJlY29yZEhlYWRlcihj
b25zdCBTdG9yYWdlOjpSZWNvcmQmIHN0b3JhZ2UpCit7CisgICAgV1RGOjpQZXJzaXN0ZW5jZTo6
RGVjb2RlciBkZWNvZGVyKHN0b3JhZ2UuaGVhZGVyLmRhdGEoKSwgc3RvcmFnZS5oZWFkZXIuc2l6
ZSgpKTsKIAotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVjb3JkLnJlc3BvbnNlKSkKKyAgICBP
cHRpb25hbDxkb3VibGU+IGluc2VydGlvblRpbWU7CisgICAgZGVjb2RlciA+PiBpbnNlcnRpb25U
aW1lOworICAgIGlmICghaW5zZXJ0aW9uVGltZSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKIAotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVjb3JkLnJlc3BvbnNlQm9keVNpemUpKQor
ICAgIE9wdGlvbmFsPHVpbnQ2NF90PiBzaXplOworICAgIGRlY29kZXIgPj4gc2l6ZTsKKyAgICBp
ZiAoIXNpemUpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBpZiAoIWRlY29k
ZXIudmVyaWZ5Q2hlY2tzdW0oKSkKKyAgICBPcHRpb25hbDxXZWJDb3JlOjpET01DYWNoZUVuZ2lu
ZTo6UmVjb3JkPiByZWNvcmQgPSBkZWNvZGVET01DYWNoZVJlY29yZChkZWNvZGVyKTsKKyAgICBp
ZiAoIXJlY29yZCkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJldHVybiBE
ZWNvZGVkUmVjb3JkIHsgaW5zZXJ0aW9uVGltZSwgc2l6ZSwgV1RGTW92ZShyZWNvcmQpIH07Cisg
ICAgcmV0dXJuIHt7CisgICAgICAgIFdURk1vdmUoKmluc2VydGlvblRpbWUpLAorICAgICAgICBX
VEZNb3ZlKCpzaXplKSwKKyAgICAgICAgV1RGTW92ZSgqcmVjb3JkKQorICAgIH19OwogfQogCiBP
cHRpb25hbDxSZWNvcmQ+IENhY2hlOjpkZWNvZGUoY29uc3QgU3RvcmFnZTo6UmVjb3JkJiBzdG9y
YWdlKQpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3Jh
Z2VFbmdpbmVDYWNoZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmNwcAkocmV2aXNpb24gMjU5ODk4
KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdp
bmVDYWNoZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTIsMjMgKzExMiwyMiBAQCB2b2lkIENh
Y2hlczo6c3RvcmVPcmlnaW4oQ29tcGxldGlvbkNhbGxiCiAKIE9wdGlvbmFsPFdlYkNvcmU6OkNs
aWVudE9yaWdpbj4gQ2FjaGVzOjpyZWFkT3JpZ2luKGNvbnN0IERhdGEmIGRhdGEpCiB7Ci0gICAg
Ly8gRklYTUU6IFdlIHNob3VsZCBiZSBhYmxlIHRvIHVzZSBtb2Rlcm4gZGVjb2RlcnMgZm9yIHBl
cnNpc3RlbnQgZGF0YS4KLSAgICBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEgdG9wT3JpZ2lu
LCBjbGllbnRPcmlnaW47CiAgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyKGRh
dGEuZGF0YSgpLCBkYXRhLnNpemUoKSk7CiAKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHRvcE9y
aWdpbi5wcm90b2NvbCkpCisgICAgT3B0aW9uYWw8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRh
PiB0b3BPcmlnaW47CisgICAgZGVjb2RlciA+PiB0b3BPcmlnaW47CisgICAgaWYgKCF0b3BPcmln
aW4pCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29k
ZSh0b3BPcmlnaW4uaG9zdCkpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgaWYg
KCFkZWNvZGVyLmRlY29kZSh0b3BPcmlnaW4ucG9ydCkpCi0gICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShjbGllbnRPcmlnaW4ucHJvdG9jb2wpKQot
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoY2xp
ZW50T3JpZ2luLmhvc3QpKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUoY2xpZW50T3JpZ2luLnBvcnQpKQorCisgICAgT3B0aW9uYWw8V2ViQ29y
ZTo6U2VjdXJpdHlPcmlnaW5EYXRhPiBjbGllbnRPcmlnaW47CisgICAgZGVjb2RlciA+PiBjbGll
bnRPcmlnaW47CisgICAgaWYgKCFjbGllbnRPcmlnaW4pCiAgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7Ci0gICAgcmV0dXJuIFdlYkNvcmU6OkNsaWVudE9yaWdpbiB7IFdURk1vdmUodG9wT3Jp
Z2luKSwgV1RGTW92ZShjbGllbnRPcmlnaW4pIH07CisKKyAgICByZXR1cm4ge3sKKyAgICAgICAg
V1RGTW92ZSgqdG9wT3JpZ2luKSwKKyAgICAgICAgV1RGTW92ZSgqY2xpZW50T3JpZ2luKQorICAg
IH19OwogfQogCiB2b2lkIENhY2hlczo6aW5pdGlhbGl6ZShXZWJDb3JlOjpET01DYWNoZUVuZ2lu
ZTo6Q29tcGxldGlvbkNhbGxiYWNrJiYgY2FsbGJhY2spCkBAIC00MTEsMjMgKzQxMCwyNiBAQCBz
dGF0aWMgaW5saW5lIERhdGEgZW5jb2RlQ2FjaGVOYW1lcyhjb25zCiBzdGF0aWMgaW5saW5lIEV4
cGVjdGVkPFZlY3RvcjxzdGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+PiwgRXJyb3I+IGRlY29kZUNh
Y2hlc05hbWVzKGNvbnN0IERhdGEmIGRhdGEpCiB7CiAgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVj
b2RlciBkZWNvZGVyKGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSk7Ci0gICAgdWludDY0X3QgY291
bnQ7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShjb3VudCkpCisgICAgT3B0aW9uYWw8dWludDY0
X3Q+IGNvdW50OworICAgIGRlY29kZXIgPj4gY291bnQ7CisgICAgaWYgKCFjb3VudCkKICAgICAg
ICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEVycm9yOjpSZWFkRGlzayk7CiAKICAgICBWZWN0b3I8
c3RkOjpwYWlyPFN0cmluZywgU3RyaW5nPj4gbmFtZXM7Ci0gICAgaWYgKCFuYW1lcy50cnlSZXNl
cnZlQ2FwYWNpdHkoY291bnQpKQorICAgIGlmICghbmFtZXMudHJ5UmVzZXJ2ZUNhcGFjaXR5KCpj
b3VudCkpCiAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChFcnJvcjo6UmVhZERpc2spOwog
Ci0gICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IGNvdW50OyArK2luZGV4KSB7Ci0g
ICAgICAgIFN0cmluZyBuYW1lOwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKG5hbWUpKQor
ICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCAqY291bnQ7ICsraW5kZXgpIHsKKyAg
ICAgICAgT3B0aW9uYWw8U3RyaW5nPiBuYW1lOworICAgICAgICBkZWNvZGVyID4+IG5hbWU7Cisg
ICAgICAgIGlmICghbmFtZSkKICAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChFcnJv
cjo6UmVhZERpc2spOwotICAgICAgICBTdHJpbmcgdW5pcXVlTmFtZTsKLSAgICAgICAgaWYgKCFk
ZWNvZGVyLmRlY29kZSh1bmlxdWVOYW1lKSkKKyAgICAgICAgT3B0aW9uYWw8U3RyaW5nPiB1bmlx
dWVOYW1lOworICAgICAgICBkZWNvZGVyID4+IHVuaXF1ZU5hbWU7CisgICAgICAgIGlmICghdW5p
cXVlTmFtZSkKICAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChFcnJvcjo6UmVhZERp
c2spOwogCi0gICAgICAgIG5hbWVzLnVuY2hlY2tlZEFwcGVuZChzdGQ6OnBhaXI8U3RyaW5nLCBT
dHJpbmc+IHsgV1RGTW92ZShuYW1lKSwgV1RGTW92ZSh1bmlxdWVOYW1lKSB9KTsKKyAgICAgICAg
bmFtZXMudW5jaGVja2VkQXBwZW5kKHsgV1RGTW92ZSgqbmFtZSksIFdURk1vdmUoKnVuaXF1ZU5h
bWUpIH0pOwogICAgIH0KICAgICByZXR1cm4gbmFtZXM7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUNvZGVycy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVDb2RlcnMu
Y3BwCShyZXZpc2lvbiAyNTk4OTgpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2Nh
Y2hlL05ldHdvcmtDYWNoZUNvZGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDIxICs0MCwy
NiBAQCB2b2lkIENvZGVyPFdlYkNvcmU6OkhUVFBIZWFkZXJNYXA+OjplbmNvCiAgICAgfQogfQog
Ci1ib29sIENvZGVyPFdlYkNvcmU6OkhUVFBIZWFkZXJNYXA+OjpkZWNvZGUoRGVjb2RlciYgZGVj
b2RlciwgV2ViQ29yZTo6SFRUUEhlYWRlck1hcCYgaGVhZGVycykKK09wdGlvbmFsPFdlYkNvcmU6
OkhUVFBIZWFkZXJNYXA+IENvZGVyPFdlYkNvcmU6OkhUVFBIZWFkZXJNYXA+OjpkZWNvZGUoRGVj
b2RlciYgZGVjb2RlcikKIHsKLSAgICB1aW50NjRfdCBoZWFkZXJzU2l6ZTsKLSAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKGhlYWRlcnNTaXplKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGZv
ciAodWludDY0X3QgaSA9IDA7IGkgPCBoZWFkZXJzU2l6ZTsgKytpKSB7Ci0gICAgICAgIFN0cmlu
ZyBuYW1lOwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKG5hbWUpKQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICBTdHJpbmcgdmFsdWU7Ci0gICAgICAgIGlmICghZGVjb2Rl
ci5kZWNvZGUodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBoZWFk
ZXJzLmFwcGVuZChuYW1lLCB2YWx1ZSk7CisgICAgT3B0aW9uYWw8dWludDY0X3Q+IGhlYWRlcnNT
aXplOworICAgIGRlY29kZXIgPj4gaGVhZGVyc1NpemU7CisgICAgaWYgKCFoZWFkZXJzU2l6ZSkK
KyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIFdlYkNvcmU6OkhUVFBIZWFkZXJN
YXAgaGVhZGVyczsKKyAgICBmb3IgKHVpbnQ2NF90IGkgPSAwOyBpIDwgKmhlYWRlcnNTaXplOyAr
K2kpIHsKKyAgICAgICAgT3B0aW9uYWw8U3RyaW5nPiBuYW1lOworICAgICAgICBkZWNvZGVyID4+
IG5hbWU7CisgICAgICAgIGlmICghbmFtZSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CisgICAgICAgIE9wdGlvbmFsPFN0cmluZz4gdmFsdWU7CisgICAgICAgIGRlY29kZXIgPj4g
dmFsdWU7CisgICAgICAgIGlmICghdmFsdWUpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OworICAgICAgICBoZWFkZXJzLmFwcGVuZChXVEZNb3ZlKCpuYW1lKSwgV1RGTW92ZSgqdmFs
dWUpKTsKICAgICB9Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIFdURk1vdmUoaGVhZGVy
cyk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0
d29ya0NhY2hlQ29kZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVDb2RlcnMuaAkocmV2aXNpb24gMjU5ODk4KQorKysgU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVDb2RlcnMuaAkod29y
a2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQCBuYW1lc3BhY2UgUGVyc2lzdGVuY2UgewogCiB0
ZW1wbGF0ZTw+IHN0cnVjdCBDb2RlcjxXZWJDb3JlOjpIVFRQSGVhZGVyTWFwPiB7CiAgICAgc3Rh
dGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25zdCBXZWJDb3JlOjpIVFRQSGVhZGVyTWFwJik7
Ci0gICAgc3RhdGljIGJvb2wgZGVjb2RlKERlY29kZXImLCBXZWJDb3JlOjpIVFRQSGVhZGVyTWFw
Jik7CisgICAgc3RhdGljIE9wdGlvbmFsPFdlYkNvcmU6OkhUVFBIZWFkZXJNYXA+IGRlY29kZShE
ZWNvZGVyJik7CiB9OwogCiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2Nh
Y2hlL05ldHdvcmtDYWNoZUVudHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUVudHJ5LmNwcAkocmV2aXNpb24gMjU5ODk4
KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVFbnRy
eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMiwzMSArMTEyLDQxIEBAIHN0ZDo6dW5pcXVlX3B0
cjxFbnRyeT4gRW50cnk6OmRlY29kZVN0b3IKICAgICBhdXRvIGVudHJ5ID0gbWFrZVVuaXF1ZTxF
bnRyeT4oc3RvcmFnZUVudHJ5KTsKIAogICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgZGVj
b2RlcihzdG9yYWdlRW50cnkuaGVhZGVyLmRhdGEoKSwgc3RvcmFnZUVudHJ5LmhlYWRlci5zaXpl
KCkpOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoZW50cnktPm1fcmVzcG9uc2UpKQorICAgIFdl
YkNvcmU6OlJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2U7CisgICAgaWYgKCFXZWJDb3JlOjpSZXNv
dXJjZVJlc3BvbnNlOjpkZWNvZGUoZGVjb2RlciwgcmVzcG9uc2UpKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICBlbnRyeS0+bV9yZXNwb25zZSA9IFdURk1vdmUocmVzcG9uc2UpOwogICAg
IGVudHJ5LT5tX3Jlc3BvbnNlLnNldFNvdXJjZShXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlOjpT
b3VyY2U6OkRpc2tDYWNoZSk7CiAKLSAgICBib29sIGhhc1ZhcnlpbmdSZXF1ZXN0SGVhZGVyczsK
LSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGhhc1ZhcnlpbmdSZXF1ZXN0SGVhZGVycykpCisgICAg
T3B0aW9uYWw8Ym9vbD4gaGFzVmFyeWluZ1JlcXVlc3RIZWFkZXJzOworICAgIGRlY29kZXIgPj4g
aGFzVmFyeWluZ1JlcXVlc3RIZWFkZXJzOworICAgIGlmICghaGFzVmFyeWluZ1JlcXVlc3RIZWFk
ZXJzKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGlmIChoYXNWYXJ5aW5nUmVxdWVz
dEhlYWRlcnMpIHsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShlbnRyeS0+bV92YXJ5aW5n
UmVxdWVzdEhlYWRlcnMpKQorICAgIGlmICgqaGFzVmFyeWluZ1JlcXVlc3RIZWFkZXJzKSB7Cisg
ICAgICAgIE9wdGlvbmFsPFZlY3RvcjxzdGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+Pj4gdmFyeWlu
Z1JlcXVlc3RIZWFkZXJzOworICAgICAgICBkZWNvZGVyID4+IHZhcnlpbmdSZXF1ZXN0SGVhZGVy
czsKKyAgICAgICAgaWYgKCF2YXJ5aW5nUmVxdWVzdEhlYWRlcnMpCiAgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICAgICAgZW50cnktPm1fdmFyeWluZ1JlcXVlc3RIZWFkZXJzID0gV1RG
TW92ZSgqdmFyeWluZ1JlcXVlc3RIZWFkZXJzKTsKICAgICB9CiAKLSAgICBib29sIGlzUmVkaXJl
Y3Q7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShpc1JlZGlyZWN0KSkKKyAgICBPcHRpb25hbDxi
b29sPiBpc1JlZGlyZWN0OworICAgIGRlY29kZXIgPj4gaXNSZWRpcmVjdDsKKyAgICBpZiAoIWlz
UmVkaXJlY3QpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgaWYgKGlzUmVkaXJlY3Qp
IHsKKyAgICBpZiAoKmlzUmVkaXJlY3QpIHsKICAgICAgICAgZW50cnktPm1fcmVkaXJlY3RSZXF1
ZXN0LmVtcGxhY2UoKTsKICAgICAgICAgaWYgKCFlbnRyeS0+bV9yZWRpcmVjdFJlcXVlc3QtPmRl
Y29kZVdpdGhvdXRQbGF0Zm9ybURhdGEoZGVjb2RlcikpCiAgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKICAgICB9CiAKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGVudHJ5LT5tX21heEFnZUNh
cCkpCisgICAgT3B0aW9uYWw8T3B0aW9uYWw8U2Vjb25kcz4+IG1heEFnZUNhcDsKKyAgICBkZWNv
ZGVyID4+IG1heEFnZUNhcDsKKyAgICBpZiAoIW1heEFnZUNhcCkKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgZW50cnktPm1fbWF4QWdlQ2FwID0gV1RGTW92ZSgqbWF4QWdlQ2FwKTsKIAog
ICAgIGlmICghZGVjb2Rlci52ZXJpZnlDaGVja3N1bSgpKSB7CiAgICAgICAgIExPRyhOZXR3b3Jr
Q2FjaGUsICIoTmV0d29ya1Byb2Nlc3MpIGNoZWNrc3VtIHZlcmlmaWNhdGlvbiBmYWlsdXJlXG4i
KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hl
S2V5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hl
L05ldHdvcmtDYWNoZUtleS5jcHAJKHJldmlzaW9uIDI1OTg5OCkKKysrIFNvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlS2V5LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTczLDkgKzE3Myw0NyBAQCB2b2lkIEtleTo6ZW5jb2RlKFdURjo6UGVyc2lzdGVuY2U6OkVu
Y29kCiAgICAgZW5jb2RlciA8PCBtX3BhcnRpdGlvbkhhc2g7CiB9CiAKLWJvb2wgS2V5OjpkZWNv
ZGUoV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciYgZGVjb2RlciwgS2V5JiBrZXkpCitPcHRpb25h
bDxLZXk+IEtleTo6ZGVjb2RlKFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXImIGRlY29kZXIpCiB7
Ci0gICAgcmV0dXJuIGRlY29kZXIuZGVjb2RlKGtleS5tX3BhcnRpdGlvbikgJiYgZGVjb2Rlci5k
ZWNvZGUoa2V5Lm1fdHlwZSkgJiYgZGVjb2Rlci5kZWNvZGUoa2V5Lm1faWRlbnRpZmllcikgJiYg
ZGVjb2Rlci5kZWNvZGUoa2V5Lm1fcmFuZ2UpICYmIGRlY29kZXIuZGVjb2RlKGtleS5tX2hhc2gp
ICYmIGRlY29kZXIuZGVjb2RlKGtleS5tX3BhcnRpdGlvbkhhc2gpOworICAgIEtleSBrZXk7Cisg
ICAgCisgICAgT3B0aW9uYWw8U3RyaW5nPiBwYXJ0aXRpb247CisgICAgZGVjb2RlciA+PiBwYXJ0
aXRpb247CisgICAgaWYgKCFwYXJ0aXRpb24pCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CisgICAga2V5Lm1fcGFydGl0aW9uID0gV1RGTW92ZSgqcGFydGl0aW9uKTsKKworICAgIE9wdGlv
bmFsPFN0cmluZz4gdHlwZTsKKyAgICBkZWNvZGVyID4+IHR5cGU7CisgICAgaWYgKCF0eXBlKQor
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIGtleS5tX3R5cGUgPSBXVEZNb3ZlKCp0
eXBlKTsKKworICAgIE9wdGlvbmFsPFN0cmluZz4gaWRlbnRpZmllcjsKKyAgICBkZWNvZGVyID4+
IGlkZW50aWZpZXI7CisgICAgaWYgKCFpZGVudGlmaWVyKQorICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OworICAgIGtleS5tX2lkZW50aWZpZXIgPSBXVEZNb3ZlKCppZGVudGlmaWVyKTsKKwor
ICAgIE9wdGlvbmFsPFN0cmluZz4gcmFuZ2U7CisgICAgZGVjb2RlciA+PiByYW5nZTsKKyAgICBp
ZiAoIXJhbmdlKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIGtleS5tX3Jhbmdl
ID0gV1RGTW92ZSgqcmFuZ2UpOworCisgICAgT3B0aW9uYWw8SGFzaFR5cGU+IGhhc2g7CisgICAg
ZGVjb2RlciA+PiBoYXNoOworICAgIGlmICghaGFzaCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKKyAgICBrZXkubV9oYXNoID0gV1RGTW92ZSgqaGFzaCk7CisKKyAgICBPcHRpb25hbDxI
YXNoVHlwZT4gcGFydGl0aW9uSGFzaDsKKyAgICBkZWNvZGVyID4+IHBhcnRpdGlvbkhhc2g7Cisg
ICAgaWYgKCFwYXJ0aXRpb25IYXNoKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAg
IGtleS5tX3BhcnRpdGlvbkhhc2ggPSBXVEZNb3ZlKCpwYXJ0aXRpb25IYXNoKTsKKworICAgIHJl
dHVybiB7IFdURk1vdmUoa2V5KSB9OwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUtleS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlS2V5LmgJKHJldmlzaW9uIDI1
OTg5OCkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hl
S2V5LmgJKHdvcmtpbmcgY29weSkKQEAgLTgzLDcgKzgzLDcgQEAgcHVibGljOgogICAgIFN0cmlu
ZyBwYXJ0aXRpb25IYXNoQXNTdHJpbmcoKSBjb25zdCB7IHJldHVybiBoYXNoQXNTdHJpbmcobV9w
YXJ0aXRpb25IYXNoKTsgfQogCiAgICAgdm9pZCBlbmNvZGUoV1RGOjpQZXJzaXN0ZW5jZTo6RW5j
b2RlciYpIGNvbnN0OwotICAgIHN0YXRpYyBib29sIGRlY29kZShXVEY6OlBlcnNpc3RlbmNlOjpE
ZWNvZGVyJiwgS2V5Jik7CisgICAgc3RhdGljIE9wdGlvbmFsPEtleT4gZGVjb2RlKFdURjo6UGVy
c2lzdGVuY2U6OkRlY29kZXImKTsKIAogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBLZXkmKSBj
b25zdDsKICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgS2V5JiBvdGhlcikgY29uc3QgeyByZXR1
cm4gISgqdGhpcyA9PSBvdGhlcik7IH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmNwcAkocmV2aXNp
b24gMjU5ODk4KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3Jr
Q2FjaGVTdG9yYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDM4LDI0ICs0MzgsNTggQEAgc3Rh
dGljIGJvb2wgZGVjb2RlUmVjb3JkTWV0YURhdGEoUmVjb3JkTQogICAgIGJvb2wgc3VjY2VzcyA9
IGZhbHNlOwogICAgIGZpbGVEYXRhLmFwcGx5KFsmbWV0YURhdGEsICZzdWNjZXNzXShjb25zdCB1
aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkgewogICAgICAgICBXVEY6OlBlcnNpc3RlbmNlOjpE
ZWNvZGVyIGRlY29kZXIoZGF0YSwgc2l6ZSk7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUo
bWV0YURhdGEuY2FjaGVTdG9yYWdlVmVyc2lvbikpCisgICAgICAgIAorICAgICAgICBPcHRpb25h
bDx1bnNpZ25lZD4gY2FjaGVTdG9yYWdlVmVyc2lvbjsKKyAgICAgICAgZGVjb2RlciA+PiBjYWNo
ZVN0b3JhZ2VWZXJzaW9uOworICAgICAgICBpZiAoIWNhY2hlU3RvcmFnZVZlcnNpb24pCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUobWV0YURh
dGEua2V5KSkKKyAgICAgICAgbWV0YURhdGEuY2FjaGVTdG9yYWdlVmVyc2lvbiA9IFdURk1vdmUo
KmNhY2hlU3RvcmFnZVZlcnNpb24pOworCisgICAgICAgIE9wdGlvbmFsPEtleT4ga2V5OworICAg
ICAgICBkZWNvZGVyID4+IGtleTsKKyAgICAgICAgaWYgKCFrZXkpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUobWV0YURhdGEudGltZVN0YW1w
KSkKKyAgICAgICAgbWV0YURhdGEua2V5ID0gV1RGTW92ZSgqa2V5KTsKKworICAgICAgICBPcHRp
b25hbDxXYWxsVGltZT4gdGltZVN0YW1wOworICAgICAgICBkZWNvZGVyID4+IHRpbWVTdGFtcDsK
KyAgICAgICAgaWYgKCF0aW1lU3RhbXApCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUobWV0YURhdGEuaGVhZGVySGFzaCkpCisgICAgICAgIG1l
dGFEYXRhLnRpbWVTdGFtcCA9IFdURk1vdmUoKnRpbWVTdGFtcCk7CisKKyAgICAgICAgT3B0aW9u
YWw8U0hBMTo6RGlnZXN0PiBoZWFkZXJIYXNoOworICAgICAgICBkZWNvZGVyID4+IGhlYWRlckhh
c2g7CisgICAgICAgIGlmICghaGVhZGVySGFzaCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShtZXRhRGF0YS5oZWFkZXJTaXplKSkKKyAgICAg
ICAgbWV0YURhdGEuaGVhZGVySGFzaCA9IFdURk1vdmUoKmhlYWRlckhhc2gpOworCisgICAgICAg
IE9wdGlvbmFsPHVpbnQ2NF90PiBoZWFkZXJTaXplOworICAgICAgICBkZWNvZGVyID4+IGhlYWRl
clNpemU7CisgICAgICAgIGlmICghaGVhZGVyU2l6ZSkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShtZXRhRGF0YS5ib2R5SGFzaCkpCisgICAg
ICAgIG1ldGFEYXRhLmhlYWRlclNpemUgPSBXVEZNb3ZlKCpoZWFkZXJTaXplKTsKKworICAgICAg
ICBPcHRpb25hbDxTSEExOjpEaWdlc3Q+IGJvZHlIYXNoOworICAgICAgICBkZWNvZGVyID4+IGJv
ZHlIYXNoOworICAgICAgICBpZiAoIWJvZHlIYXNoKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKG1ldGFEYXRhLmJvZHlTaXplKSkKKyAgICAg
ICAgbWV0YURhdGEuYm9keUhhc2ggPSBXVEZNb3ZlKCpib2R5SGFzaCk7CisKKyAgICAgICAgT3B0
aW9uYWw8dWludDY0X3Q+IGJvZHlTaXplOworICAgICAgICBkZWNvZGVyID4+IGJvZHlTaXplOwor
ICAgICAgICBpZiAoIWJvZHlTaXplKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKG1ldGFEYXRhLmlzQm9keUlubGluZSkpCisgICAgICAgIG1l
dGFEYXRhLmJvZHlTaXplID0gV1RGTW92ZSgqYm9keVNpemUpOworCisgICAgICAgIE9wdGlvbmFs
PGJvb2w+IGlzQm9keUlubGluZTsKKyAgICAgICAgZGVjb2RlciA+PiBpc0JvZHlJbmxpbmU7Cisg
ICAgICAgIGlmICghaXNCb2R5SW5saW5lKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICBtZXRhRGF0YS5pc0JvZHlJbmxpbmUgPSBXVEZNb3ZlKCppc0JvZHlJbmxpbmUpOworCiAg
ICAgICAgIGlmICghZGVjb2Rlci52ZXJpZnlDaGVja3N1bSgpKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworCiAgICAgICAgIG1ldGFEYXRhLmhlYWRlck9mZnNldCA9IGRlY29kZXIuY3VycmVu
dE9mZnNldCgpOwogICAgICAgICBzdWNjZXNzID0gdHJ1ZTsKICAgICAgICAgcmV0dXJuIGZhbHNl
OwpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVT
dWJyZXNvdXJjZXNFbnRyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdWJyZXNvdXJjZXNFbnRyeS5jcHAJKHJldmlzaW9u
IDI1OTg5OCkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0Nh
Y2hlU3VicmVzb3VyY2VzRW50cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSwzNyArNDksNjUg
QEAgdm9pZCBTdWJyZXNvdXJjZUluZm86OmVuY29kZShXVEY6OlBlcnNpcwogICAgIGVuY29kZXIg
PDwgbV9pc1NhbWVTaXRlOwogICAgIGVuY29kZXIgPDwgbV9maXJzdFBhcnR5Rm9yQ29va2llczsK
ICAgICBlbmNvZGVyIDw8IG1fcmVxdWVzdEhlYWRlcnM7Ci0gICAgZW5jb2Rlci5lbmNvZGVFbnVt
KG1fcHJpb3JpdHkpOworICAgIGVuY29kZXIgPDwgbV9wcmlvcml0eTsKIH0KIAotYm9vbCBTdWJy
ZXNvdXJjZUluZm86OmRlY29kZShXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyJiBkZWNvZGVyLCBT
dWJyZXNvdXJjZUluZm8mIGluZm8pCitPcHRpb25hbDxTdWJyZXNvdXJjZUluZm8+IFN1YnJlc291
cmNlSW5mbzo6ZGVjb2RlKFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXImIGRlY29kZXIpCiB7Ci0g
ICAgaWYgKCFkZWNvZGVyLmRlY29kZShpbmZvLm1fa2V5KSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaW5mby5tX2xhc3RTZWVuKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaW5mby5tX2ZpcnN0U2VlbikpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGluZm8u
bV9pc1RyYW5zaWVudCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBpZiAoaW5m
by5tX2lzVHJhbnNpZW50KQotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBTdWJyZXNvdXJjZUlu
Zm8gaW5mbzsKIAotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaW5mby5tX2lzU2FtZVNpdGUpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgT3B0aW9uYWw8S2V5PiBrZXk7CisgICAgZGVjb2Rl
ciA+PiBrZXk7CisgICAgaWYgKCFrZXkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cisg
ICAgaW5mby5tX2tleSA9IFdURk1vdmUoKmtleSk7CisKKyAgICBPcHRpb25hbDxXYWxsVGltZT4g
bGFzdFNlZW47CisgICAgZGVjb2RlciA+PiBsYXN0U2VlbjsKKyAgICBpZiAoIWxhc3RTZWVuKQor
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIGluZm8ubV9sYXN0U2VlbiA9IFdURk1v
dmUoKmxhc3RTZWVuKTsKKworICAgIE9wdGlvbmFsPFdhbGxUaW1lPiBmaXJzdFNlZW47CisgICAg
ZGVjb2RlciA+PiBmaXJzdFNlZW47CisgICAgaWYgKCFmaXJzdFNlZW4pCisgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CisgICAgaW5mby5tX2ZpcnN0U2VlbiA9IFdURk1vdmUoKmZpcnN0U2Vl
bik7CisKKyAgICBPcHRpb25hbDxib29sPiBpc1RyYW5zaWVudDsKKyAgICBkZWNvZGVyID4+IGlz
VHJhbnNpZW50OworICAgIGlmICghaXNUcmFuc2llbnQpCisgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CisgICAgaW5mby5tX2lzVHJhbnNpZW50ID0gV1RGTW92ZSgqaXNUcmFuc2llbnQpOwog
Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShpbmZvLm1fZmlyc3RQYXJ0eUZvckNvb2tpZXMpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGluZm8ubV9y
ZXF1ZXN0SGVhZGVycykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoaW5mby5tX2lz
VHJhbnNpZW50KQorICAgICAgICByZXR1cm4geyBXVEZNb3ZlKGluZm8pIH07CiAKLSAgICBpZiAo
IWRlY29kZXIuZGVjb2RlRW51bShpbmZvLm1fcHJpb3JpdHkpKQotICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgT3B0aW9uYWw8Ym9vbD4gaXNTYW1lU2l0ZTsKKyAgICBkZWNvZGVyID4+IGlzU2Ft
ZVNpdGU7CisgICAgaWYgKCFpc1NhbWVTaXRlKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OworICAgIGluZm8ubV9pc1NhbWVTaXRlID0gV1RGTW92ZSgqaXNTYW1lU2l0ZSk7CisKKyAgICBP
cHRpb25hbDxVUkw+IGZpcnN0UGFydHlGb3JDb29raWVzOworICAgIGRlY29kZXIgPj4gZmlyc3RQ
YXJ0eUZvckNvb2tpZXM7CisgICAgaWYgKCFmaXJzdFBhcnR5Rm9yQ29va2llcykKKyAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBpbmZvLm1fZmlyc3RQYXJ0eUZvckNvb2tpZXMgPSBX
VEZNb3ZlKCpmaXJzdFBhcnR5Rm9yQ29va2llcyk7CisKKyAgICBPcHRpb25hbDxXZWJDb3JlOjpI
VFRQSGVhZGVyTWFwPiByZXF1ZXN0SGVhZGVyczsKKyAgICBkZWNvZGVyID4+IHJlcXVlc3RIZWFk
ZXJzOworICAgIGlmICghcmVxdWVzdEhlYWRlcnMpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CisgICAgaW5mby5tX3JlcXVlc3RIZWFkZXJzID0gV1RGTW92ZSgqcmVxdWVzdEhlYWRlcnMp
OworCisgICAgT3B0aW9uYWw8V2ViQ29yZTo6UmVzb3VyY2VMb2FkUHJpb3JpdHk+IHByaW9yaXR5
OworICAgIGRlY29kZXIgPj4gcHJpb3JpdHk7CisgICAgaWYgKCFwcmlvcml0eSkKKyAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBpbmZvLm1fcHJpb3JpdHkgPSBXVEZNb3ZlKCpwcmlv
cml0eSk7CiAgICAgCi0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHsgV1RGTW92ZShpbmZv
KSB9OwogfQogCiBib29sIFN1YnJlc291cmNlSW5mbzo6aXNGaXJzdFBhcnR5KCkgY29uc3QKQEAg
LTEwMyw4ICsxMzEsMTEgQEAgc3RkOjp1bmlxdWVfcHRyPFN1YnJlc291cmNlc0VudHJ5PiBTdWJy
ZQogICAgIGF1dG8gZW50cnkgPSBtYWtlVW5pcXVlPFN1YnJlc291cmNlc0VudHJ5PihzdG9yYWdl
RW50cnkpOwogCiAgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyKHN0b3JhZ2VF
bnRyeS5oZWFkZXIuZGF0YSgpLCBzdG9yYWdlRW50cnkuaGVhZGVyLnNpemUoKSk7Ci0gICAgaWYg
KCFkZWNvZGVyLmRlY29kZShlbnRyeS0+bV9zdWJyZXNvdXJjZXMpKQorICAgIE9wdGlvbmFsPFZl
Y3RvcjxTdWJyZXNvdXJjZUluZm8+PiBzdWJyZXNvdXJjZXM7CisgICAgZGVjb2RlciA+PiBzdWJy
ZXNvdXJjZXM7CisgICAgaWYgKCFzdWJyZXNvdXJjZXMpCiAgICAgICAgIHJldHVybiBudWxscHRy
OworICAgIGVudHJ5LT5tX3N1YnJlc291cmNlcyA9IFdURk1vdmUoKnN1YnJlc291cmNlcyk7CiAK
ICAgICBpZiAoIWRlY29kZXIudmVyaWZ5Q2hlY2tzdW0oKSkgewogICAgICAgICBMT0coTmV0d29y
a0NhY2hlLCAiKE5ldHdvcmtQcm9jZXNzKSBjaGVja3N1bSB2ZXJpZmljYXRpb24gZmFpbHVyZVxu
Iik7CkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNo
ZVN1YnJlc291cmNlc0VudHJ5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdWJyZXNvdXJjZXNFbnRyeS5oCShyZXZpc2lvbiAy
NTk4OTgpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNo
ZVN1YnJlc291cmNlc0VudHJ5LmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAgY2xh
c3MgU3VicmVzb3VyY2VJbmZvIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1Ymxp
YzoKICAgICB2b2lkIGVuY29kZShXVEY6OlBlcnNpc3RlbmNlOjpFbmNvZGVyJikgY29uc3Q7Ci0g
ICAgc3RhdGljIGJvb2wgZGVjb2RlKFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXImLCBTdWJyZXNv
dXJjZUluZm8mKTsKKyAgICBzdGF0aWMgT3B0aW9uYWw8U3VicmVzb3VyY2VJbmZvPiBkZWNvZGUo
V1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciYpOwogCiAgICAgU3VicmVzb3VyY2VJbmZvKCkgPSBk
ZWZhdWx0OwogICAgIFN1YnJlc291cmNlSW5mbyhjb25zdCBLZXkmLCBjb25zdCBXZWJDb3JlOjpS
ZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBTdWJyZXNvdXJjZUluZm8qIHByZXZpb3VzSW5mbyk7Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC9Vc2VyRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9TaGFyZWQvVXNlckRhdGEuY3BwCShyZXZpc2lvbiAyNTk4OTgpCisrKyBTb3Vy
Y2UvV2ViS2l0L1NoYXJlZC9Vc2VyRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2OSwxMCAr
MzY5LDExIEBAIGJvb2wgVXNlckRhdGE6OmRlY29kZShJUEM6OkRlY29kZXImIGRlY28KICAgICAg
ICAgYnJlYWs7CiAKICAgICBjYXNlIEFQSTo6T2JqZWN0OjpUeXBlOjpDZXJ0aWZpY2F0ZUluZm86
IHsKLSAgICAgICAgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvIGNlcnRpZmljYXRlSW5mbzsKLSAg
ICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShjZXJ0aWZpY2F0ZUluZm8pKQorICAgICAgICBPcHRp
b25hbDxXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8+IGNlcnRpZmljYXRlSW5mbzsKKyAgICAgICAg
ZGVjb2RlciA+PiBjZXJ0aWZpY2F0ZUluZm87CisgICAgICAgIGlmICghY2VydGlmaWNhdGVJbmZv
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICByZXN1bHQgPSBXZWJDZXJ0aWZp
Y2F0ZUluZm86OmNyZWF0ZShjZXJ0aWZpY2F0ZUluZm8pOworICAgICAgICByZXN1bHQgPSBXZWJD
ZXJ0aWZpY2F0ZUluZm86OmNyZWF0ZSgqY2VydGlmaWNhdGVJbmZvKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJQ29udGVudFJ1
bGVMaXN0U3RvcmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9BUElDb250ZW50UnVsZUxpc3RTdG9yZS5jcHAJKHJldmlzaW9uIDI1OTg5OCkKKysrIFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElDb250ZW50UnVsZUxpc3RTdG9yZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE3OSwyMCArMTc5LDQ5IEBAIHN0YXRpYyBPcHRpb25hbDxDb250ZW50UnVs
ZUxpc3RNZXRhRGF0YT4KICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICBXVEY6
OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIoZGF0YSwgc2l6ZSk7Ci0gICAgICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUobWV0YURhdGEudmVyc2lvbikpCisgICAgICAgIAorICAgICAgICBPcHRp
b25hbDx1aW50MzJfdD4gdmVyc2lvbjsKKyAgICAgICAgZGVjb2RlciA+PiB2ZXJzaW9uOworICAg
ICAgICBpZiAoIXZlcnNpb24pCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlm
ICghZGVjb2Rlci5kZWNvZGUobWV0YURhdGEuc291cmNlU2l6ZSkpCisgICAgICAgIG1ldGFEYXRh
LnZlcnNpb24gPSBXVEZNb3ZlKCp2ZXJzaW9uKTsKKworICAgICAgICBPcHRpb25hbDx1aW50NjRf
dD4gc291cmNlU2l6ZTsKKyAgICAgICAgZGVjb2RlciA+PiBzb3VyY2VTaXplOworICAgICAgICBp
ZiAoIXNvdXJjZVNpemUpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUobWV0YURhdGEuYWN0aW9uc1NpemUpKQorICAgICAgICBtZXRhRGF0YS5z
b3VyY2VTaXplID0gV1RGTW92ZSgqc291cmNlU2l6ZSk7CisKKyAgICAgICAgT3B0aW9uYWw8dWlu
dDY0X3Q+IGFjdGlvbnNTaXplOworICAgICAgICBkZWNvZGVyID4+IGFjdGlvbnNTaXplOworICAg
ICAgICBpZiAoIWFjdGlvbnNTaXplKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKG1ldGFEYXRhLmZpbHRlcnNXaXRob3V0Q29uZGl0aW9uc0J5
dGVjb2RlU2l6ZSkpCisgICAgICAgIG1ldGFEYXRhLmFjdGlvbnNTaXplID0gV1RGTW92ZSgqYWN0
aW9uc1NpemUpOworCisgICAgICAgIE9wdGlvbmFsPHVpbnQ2NF90PiBmaWx0ZXJzV2l0aG91dENv
bmRpdGlvbnNCeXRlY29kZVNpemU7CisgICAgICAgIGRlY29kZXIgPj4gZmlsdGVyc1dpdGhvdXRD
b25kaXRpb25zQnl0ZWNvZGVTaXplOworICAgICAgICBpZiAoIWZpbHRlcnNXaXRob3V0Q29uZGl0
aW9uc0J5dGVjb2RlU2l6ZSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYg
KCFkZWNvZGVyLmRlY29kZShtZXRhRGF0YS5maWx0ZXJzV2l0aENvbmRpdGlvbnNCeXRlY29kZVNp
emUpKQorICAgICAgICBtZXRhRGF0YS5maWx0ZXJzV2l0aG91dENvbmRpdGlvbnNCeXRlY29kZVNp
emUgPSBXVEZNb3ZlKCpmaWx0ZXJzV2l0aG91dENvbmRpdGlvbnNCeXRlY29kZVNpemUpOworCisg
ICAgICAgIE9wdGlvbmFsPHVpbnQ2NF90PiBmaWx0ZXJzV2l0aENvbmRpdGlvbnNCeXRlY29kZVNp
emU7CisgICAgICAgIGRlY29kZXIgPj4gZmlsdGVyc1dpdGhDb25kaXRpb25zQnl0ZWNvZGVTaXpl
OworICAgICAgICBpZiAoIWZpbHRlcnNXaXRoQ29uZGl0aW9uc0J5dGVjb2RlU2l6ZSkKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShtZXRhRGF0
YS5jb25kaXRpb25lZEZpbHRlcnNCeXRlY29kZVNpemUpKQorICAgICAgICBtZXRhRGF0YS5maWx0
ZXJzV2l0aENvbmRpdGlvbnNCeXRlY29kZVNpemUgPSBXVEZNb3ZlKCpmaWx0ZXJzV2l0aENvbmRp
dGlvbnNCeXRlY29kZVNpemUpOworCisgICAgICAgIE9wdGlvbmFsPHVpbnQ2NF90PiBjb25kaXRp
b25lZEZpbHRlcnNCeXRlY29kZVNpemU7CisgICAgICAgIGRlY29kZXIgPj4gY29uZGl0aW9uZWRG
aWx0ZXJzQnl0ZWNvZGVTaXplOworICAgICAgICBpZiAoIWNvbmRpdGlvbmVkRmlsdGVyc0J5dGVj
b2RlU2l6ZSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFkZWNvZGVy
LmRlY29kZShtZXRhRGF0YS5jb25kaXRpb25zQXBwbHlPbmx5VG9Eb21haW4pKQorICAgICAgICBt
ZXRhRGF0YS5jb25kaXRpb25lZEZpbHRlcnNCeXRlY29kZVNpemUgPSBXVEZNb3ZlKCpjb25kaXRp
b25lZEZpbHRlcnNCeXRlY29kZVNpemUpOworCisgICAgICAgIE9wdGlvbmFsPHVpbnQzMl90PiBj
b25kaXRpb25zQXBwbHlPbmx5VG9Eb21haW47CisgICAgICAgIGRlY29kZXIgPj4gY29uZGl0aW9u
c0FwcGx5T25seVRvRG9tYWluOworICAgICAgICBpZiAoIWNvbmRpdGlvbnNBcHBseU9ubHlUb0Rv
bWFpbikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgbWV0YURhdGEuY29uZGl0
aW9uc0FwcGx5T25seVRvRG9tYWluID0gV1RGTW92ZSgqY29uZGl0aW9uc0FwcGx5T25seVRvRG9t
YWluKTsKKwogICAgICAgICBzdWNjZXNzID0gdHJ1ZTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIH0pOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>396139</attachid>
            <date>2020-04-10 17:48:14 -0700</date>
            <delta_ts>2020-04-10 18:07:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207497-20200410174813.patch</filename>
            <type>text/plain</type>
            <size>109919</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNTk4OTgpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDM4IEBACisyMDIwLTA0LTEwICBBbGV4IENocmlzdGVuc2VuICA8
YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUGVyc2lzdGVudENvZGVycyBzaG91
bGQgdXNlIG1vZGVybiBkZWNvZGluZyBzeW50YXgKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNzQ5NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF2ZXMgdGhlIHdheSBmb3IgbW9yZSBzZXJpYWxp
emVkIHR5cGVzIHRoYXQgZG8gbm90IGhhdmUgYSBkZWZhdWx0IGNvbnN0cnVjdG9yLgorCisgICAg
ICAgICogd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRDb2Rlci5oOgorICAgICAgICAoV1RGOjpQ
ZXJzaXN0ZW5jZTo6Q29kZXI6OmVuY29kZSk6CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpD
b2Rlcjo6ZGVjb2RlKToKKyAgICAgICAgKiB3dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudENvZGVy
cy5jcHA6CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpDb2RlcjxBdG9tU3RyaW5nPjo6ZGVj
b2RlKToKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkNvZGVyPENTdHJpbmc+OjpkZWNvZGUp
OgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6ZGVjb2RlU3RyaW5nVGV4dCk6CisgICAgICAg
IChXVEY6OlBlcnNpc3RlbmNlOjpDb2RlcjxTdHJpbmc+OjpkZWNvZGUpOgorICAgICAgICAoV1RG
OjpQZXJzaXN0ZW5jZTo6Q29kZXI8U0hBMTo6RGlnZXN0Pjo6ZGVjb2RlKToKKyAgICAgICAgKiB3
dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudENvZGVycy5oOgorICAgICAgICAoV1RGOjpQZXJzaXN0
ZW5jZTo6Q29kZXI8T3B0aW9uYWw8VD4+OjpkZWNvZGUpOgorICAgICAgICAoV1RGOjpQZXJzaXN0
ZW5jZTo6Q29kZXI8U2Vjb25kcz46OmRlY29kZSk6CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNl
OjpDb2RlcjxXYWxsVGltZT46OmRlY29kZSk6CisgICAgICAgICogd3RmL3BlcnNpc3RlbmNlL1Bl
cnNpc3RlbnREZWNvZGVyLmNwcDoKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXI6
OmRlY29kZU51bWJlcik6CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyOjpvcGVy
YXRvcj4+KToKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXI6OmRlY29kZSk6IERl
bGV0ZWQuCisgICAgICAgICogd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnREZWNvZGVyLmg6Cisg
ICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyOjpvcGVyYXRvcj4+KToKKyAgICAgICAg
KFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXI6OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChX
VEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyOjpkZWNvZGVFbnVtKTogRGVsZXRlZC4KKyAgICAgICAg
KiB3dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudEVuY29kZXIuaDoKKyAgICAgICAgKFdURjo6UGVy
c2lzdGVuY2U6OkVuY29kZXI6Om9wZXJhdG9yPDwpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5j
ZTo6RW5jb2Rlcjo6ZW5jb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6
OkVuY29kZXI6OmVuY29kZUVudW0pOiBEZWxldGVkLgorCiAyMDIwLTA0LTEwICBBbGljaWEgQm95
YSBHYXJjw61hICA8YWJveWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBbV1RGXSBEYXRhTXV0ZXg6
IEFkZCBydW5VbmxvY2tlZCgpCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9VUkwuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL3d0Zi9VUkwuaAkocmV2aXNpb24gMjU5ODk4KQorKysgU291cmNlL1dU
Ri93dGYvVVJMLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0OCwxMCArMjQ4LDExIEBAIGJvb2wgVVJM
OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgVVJMJiAKIHRlbXBsYXRlIDxjbGFzcyBEZWNvZGVy
PgogT3B0aW9uYWw8VVJMPiBVUkw6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogewotICAgIFN0
cmluZyBzdHJpbmc7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShzdHJpbmcpKQorICAgIE9wdGlv
bmFsPFN0cmluZz4gc3RyaW5nOworICAgIGRlY29kZXIgPj4gc3RyaW5nOworICAgIGlmICghc3Ry
aW5nKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIHJldHVybiBVUkwoVVJMKCks
IHN0cmluZyk7CisgICAgcmV0dXJuIFVSTChVUkwoKSwgV1RGTW92ZSgqc3RyaW5nKSk7CiB9CiAK
IFdURl9FWFBPUlRfUFJJVkFURSBib29sIGVxdWFsSWdub3JpbmdGcmFnbWVudElkZW50aWZpZXIo
Y29uc3QgVVJMJiwgY29uc3QgVVJMJik7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5j
ZS9QZXJzaXN0ZW50Q29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0
ZW5jZS9QZXJzaXN0ZW50Q29kZXIuaAkocmV2aXNpb24gMjU5ODk4KQorKysgU291cmNlL1dURi93
dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudENvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDE2
ICszMCwxNiBAQCBuYW1lc3BhY2UgUGVyc2lzdGVuY2UgewogCiBjbGFzcyBEZWNvZGVyOwogY2xh
c3MgRW5jb2RlcjsKLSAgICAKKwogdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvZGVyIHsK
ICAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgVCYgdCkKICAg
ICB7CiAgICAgICAgIHQuZW5jb2RlKGVuY29kZXIpOwogICAgIH0KIAotICAgIHN0YXRpYyBXQVJO
X1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgVCYgdCkKKyAgICBz
dGF0aWMgT3B0aW9uYWw8VD4gZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgewotICAgICAg
ICByZXR1cm4gVDo6ZGVjb2RlKGRlY29kZXIsIHQpOworICAgICAgICByZXR1cm4gVDo6ZGVjb2Rl
KGRlY29kZXIpOwogICAgIH0KIH07CiAKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNl
L1BlcnNpc3RlbnRDb2RlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3BlcnNp
c3RlbmNlL1BlcnNpc3RlbnRDb2RlcnMuY3BwCShyZXZpc2lvbiAyNTk4OTgpCisrKyBTb3VyY2Uv
V1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50Q29kZXJzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzcsMTQgKzM3LDE0IEBAIHZvaWQgQ29kZXI8QXRvbVN0cmluZz46OmVuY29kZShFbmNvZGVy
JiAKICAgICBlbmNvZGVyIDw8IGF0b21TdHJpbmcuc3RyaW5nKCk7CiB9CiAKLWJvb2wgQ29kZXI8
QXRvbVN0cmluZz46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBBdG9tU3RyaW5nJiBhdG9tU3Ry
aW5nKQorT3B0aW9uYWw8QXRvbVN0cmluZz4gQ29kZXI8QXRvbVN0cmluZz46OmRlY29kZShEZWNv
ZGVyJiBkZWNvZGVyKQogewotICAgIFN0cmluZyBzdHJpbmc7Ci0gICAgaWYgKCFkZWNvZGVyLmRl
Y29kZShzdHJpbmcpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgT3B0aW9uYWw8U3RyaW5n
PiBzdHJpbmc7CisgICAgZGVjb2RlciA+PiBzdHJpbmc7CisgICAgaWYgKCFzdHJpbmcpCisgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBhdG9tU3RyaW5nID0gc3RyaW5nOwotICAg
IHJldHVybiB0cnVlOworICAgIHJldHVybiB7eyBXVEZNb3ZlKCpzdHJpbmcpIH19OwogfQogCiB2
b2lkIENvZGVyPENTdHJpbmc+OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgQ1N0cmlu
ZyYgc3RyaW5nKQpAQCAtNjAsMzIgKzYwLDMwIEBAIHZvaWQgQ29kZXI8Q1N0cmluZz46OmVuY29k
ZShFbmNvZGVyJiBlbmMKICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVy
cHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihzdHJpbmcuZGF0YSgpKSwgbGVuZ3RoKTsKIH0KIAot
Ym9vbCBDb2RlcjxDU3RyaW5nPjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIENTdHJpbmcmIHJl
c3VsdCkKK09wdGlvbmFsPENTdHJpbmc+IENvZGVyPENTdHJpbmc+OjpkZWNvZGUoRGVjb2RlciYg
ZGVjb2RlcikKIHsKLSAgICB1aW50MzJfdCBsZW5ndGg7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShsZW5ndGgpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgT3B0aW9uYWw8dWludDMyX3Q+
IGxlbmd0aDsKKyAgICBkZWNvZGVyID4+IGxlbmd0aDsKKyAgICBpZiAoIWxlbmd0aCkKKyAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIGlmIChsZW5ndGggPT0gc3RkOjpudW1lcmlj
X2xpbWl0czx1aW50MzJfdD46Om1heCgpKSB7CiAgICAgICAgIC8vIFRoaXMgaXMgdGhlIG51bGwg
c3RyaW5nLgotICAgICAgICByZXN1bHQgPSBDU3RyaW5nKCk7Ci0gICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICByZXR1cm4gQ1N0cmluZygpOwogICAgIH0KIAogICAgIC8vIEJlZm9yZSBhbGxv
Y2F0aW5nIHRoZSBzdHJpbmcsIG1ha2Ugc3VyZSB0aGF0IHRoZSBkZWNvZGVyIGJ1ZmZlciBpcyBi
aWcgZW5vdWdoLgotICAgIGlmICghZGVjb2Rlci5idWZmZXJJc0xhcmdlRW5vdWdoVG9Db250YWlu
PGNoYXI+KGxlbmd0aCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWRlY29kZXIu
YnVmZmVySXNMYXJnZUVub3VnaFRvQ29udGFpbjxjaGFyPigqbGVuZ3RoKSkKKyAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIGNoYXIqIGJ1ZmZlcjsKLSAgICBDU3RyaW5nIHN0cmlu
ZyA9IENTdHJpbmc6Om5ld1VuaW5pdGlhbGl6ZWQobGVuZ3RoLCBidWZmZXIpOwotICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4o
YnVmZmVyKSwgbGVuZ3RoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIENTdHJpbmcgc3Ry
aW5nID0gQ1N0cmluZzo6bmV3VW5pbml0aWFsaXplZCgqbGVuZ3RoLCBidWZmZXIpOworICAgIGlm
ICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDx1aW50OF90
Kj4oYnVmZmVyKSwgKmxlbmd0aCkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAg
ICByZXN1bHQgPSBzdHJpbmc7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIFdURk1vdmUo
c3RyaW5nKTsKIH0KIAotCiB2b2lkIENvZGVyPFN0cmluZz46OmVuY29kZShFbmNvZGVyJiBlbmNv
ZGVyLCBjb25zdCBTdHJpbmcmIHN0cmluZykKIHsKICAgICAvLyBTcGVjaWFsIGNhc2UgdGhlIG51
bGwgc3RyaW5nLgpAQCAtMTA2LDQwICsxMDQsNDAgQEAgdm9pZCBDb2RlcjxTdHJpbmc+OjplbmNv
ZGUoRW5jb2RlciYgZW5jbwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4K
LXN0YXRpYyBpbmxpbmUgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlU3RyaW5nVGV4dChE
ZWNvZGVyJiBkZWNvZGVyLCB1aW50MzJfdCBsZW5ndGgsIFN0cmluZyYgcmVzdWx0KQorc3RhdGlj
IGlubGluZSBPcHRpb25hbDxTdHJpbmc+IGRlY29kZVN0cmluZ1RleHQoRGVjb2RlciYgZGVjb2Rl
ciwgdWludDMyX3QgbGVuZ3RoKQogewogICAgIC8vIEJlZm9yZSBhbGxvY2F0aW5nIHRoZSBzdHJp
bmcsIG1ha2Ugc3VyZSB0aGF0IHRoZSBkZWNvZGVyIGJ1ZmZlciBpcyBiaWcgZW5vdWdoLgogICAg
IGlmICghZGVjb2Rlci5idWZmZXJJc0xhcmdlRW5vdWdoVG9Db250YWluPENoYXJhY3RlclR5cGU+
KGxlbmd0aCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKIAogICAgIENoYXJhY3RlclR5cGUqIGJ1ZmZlcjsKICAgICBTdHJpbmcgc3RyaW5nID0g
U3RyaW5nOjpjcmVhdGVVbmluaXRpYWxpemVkKGxlbmd0aCwgYnVmZmVyKTsKICAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGJ1
ZmZlciksIGxlbmd0aCAqIHNpemVvZihDaGFyYWN0ZXJUeXBlKSkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAKLSAgICByZXN1bHQgPSBz
dHJpbmc7Ci0gICAgcmV0dXJuIHRydWU7ICAgIAorICAgIHJldHVybiBXVEZNb3ZlKHN0cmluZyk7
CiB9CiAKLWJvb2wgQ29kZXI8U3RyaW5nPjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFN0cmlu
ZyYgcmVzdWx0KQorT3B0aW9uYWw8U3RyaW5nPiBDb2RlcjxTdHJpbmc+OjpkZWNvZGUoRGVjb2Rl
ciYgZGVjb2RlcikKIHsKLSAgICB1aW50MzJfdCBsZW5ndGg7Ci0gICAgaWYgKCFkZWNvZGVyLmRl
Y29kZShsZW5ndGgpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgT3B0aW9uYWw8dWludDMy
X3Q+IGxlbmd0aDsKKyAgICBkZWNvZGVyID4+IGxlbmd0aDsKKyAgICBpZiAoIWxlbmd0aCkKKyAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIGlmIChsZW5ndGggPT0gc3RkOjpudW1l
cmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpKSB7CisgICAgaWYgKCpsZW5ndGggPT0gc3RkOjpu
dW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpKSB7CiAgICAgICAgIC8vIFRoaXMgaXMgdGhl
IG51bGwgc3RyaW5nLgotICAgICAgICByZXN1bHQgPSBTdHJpbmcoKTsKLSAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICB9CiAKLSAgICBib29sIGlzOEJp
dDsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGlzOEJpdCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIGlmIChpczhCaXQpCi0gICAgICAgIHJldHVybiBkZWNvZGVTdHJpbmdUZXh0PExD
aGFyPihkZWNvZGVyLCBsZW5ndGgsIHJlc3VsdCk7Ci0gICAgcmV0dXJuIGRlY29kZVN0cmluZ1Rl
eHQ8VUNoYXI+KGRlY29kZXIsIGxlbmd0aCwgcmVzdWx0KTsKKyAgICBPcHRpb25hbDxib29sPiBp
czhCaXQ7CisgICAgZGVjb2RlciA+PiBpczhCaXQ7CisgICAgaWYgKCFpczhCaXQpCisgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBpZiAoKmlzOEJpdCkKKyAgICAgICAgcmV0dXJu
IGRlY29kZVN0cmluZ1RleHQ8TENoYXI+KGRlY29kZXIsICpsZW5ndGgpOworICAgIHJldHVybiBk
ZWNvZGVTdHJpbmdUZXh0PFVDaGFyPihkZWNvZGVyLCAqbGVuZ3RoKTsKIH0KIAogdm9pZCBDb2Rl
cjxTSEExOjpEaWdlc3Q+OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgU0hBMTo6RGln
ZXN0JiBkaWdlc3QpCkBAIC0xNDcsOSArMTQ1LDEyIEBAIHZvaWQgQ29kZXI8U0hBMTo6RGlnZXN0
Pjo6ZW5jb2RlKEVuY29kZXIKICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShkaWdl
c3QuZGF0YSgpLCBzaXplb2YoZGlnZXN0KSk7CiB9CiAKLWJvb2wgQ29kZXI8U0hBMTo6RGlnZXN0
Pjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFNIQTE6OkRpZ2VzdCYgZGlnZXN0KQorT3B0aW9u
YWw8U0hBMTo6RGlnZXN0PiBDb2RlcjxTSEExOjpEaWdlc3Q+OjpkZWNvZGUoRGVjb2RlciYgZGVj
b2RlcikKIHsKLSAgICByZXR1cm4gZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoZGlnZXN0
LmRhdGEoKSwgc2l6ZW9mKGRpZ2VzdCkpOworICAgIFNIQTE6OkRpZ2VzdCB0bXA7CisgICAgaWYg
KCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YSh0bXAuZGF0YSgpLCBzaXplb2YodG1wKSkp
CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcmV0dXJuIFdURk1vdmUodG1wKTsK
IH0KIAogfQpJbmRleDogU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudENvZGVy
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRD
b2RlcnMuaAkocmV2aXNpb24gMjU5ODk4KQorKysgU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2Uv
UGVyc2lzdGVudENvZGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC00NiwxOSArNDYsMTkgQEAgdGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gc3RydWN0IAogICAgICAgICBlbmNvZGVyIDw8
IHBhaXIuZmlyc3QgPDwgcGFpci5zZWNvbmQ7CiAgICAgfQogCi0gICAgc3RhdGljIFdBUk5fVU5V
U0VEX1JFVFVSTiBib29sIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBzdGQ6OnBhaXI8VCwgVT4m
IHBhaXIpCisgICAgc3RhdGljIE9wdGlvbmFsPHN0ZDo6cGFpcjxULCBVPj4gZGVjb2RlKERlY29k
ZXImIGRlY29kZXIpCiAgICAgewotICAgICAgICBUIGZpcnN0OwotICAgICAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKGZpcnN0KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBV
IHNlY29uZDsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShzZWNvbmQpKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIHBhaXIuZmlyc3QgPSBmaXJzdDsKLSAgICAgICAg
cGFpci5zZWNvbmQgPSBzZWNvbmQ7Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBPcHRp
b25hbDxUPiBmaXJzdDsKKyAgICAgICAgZGVjb2RlciA+PiBmaXJzdDsKKyAgICAgICAgaWYgKCFm
aXJzdCkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICAgICAgT3B0aW9u
YWw8VT4gc2Vjb25kOworICAgICAgICBkZWNvZGVyID4+IHNlY29uZDsKKyAgICAgICAgaWYgKCFz
ZWNvbmQpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgICAgIHJldHVy
biB7eyBXVEZNb3ZlKCpmaXJzdCksIFdURk1vdmUoKnNlY29uZCkgfX07CiAgICAgfQogfTsKIApA
QCAtNzQsMjMgKzc0LDIxIEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb2RlcjxPcHRp
b24KICAgICAgICAgZW5jb2RlciA8PCBvcHRpb25hbC52YWx1ZSgpOwogICAgIH0KICAgICAKLSAg
ICBzdGF0aWMgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIs
IE9wdGlvbmFsPFQ+JiBvcHRpb25hbCkKKyAgICBzdGF0aWMgT3B0aW9uYWw8T3B0aW9uYWw8VD4+
IGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIHsKLSAgICAgICAgYm9vbCBpc0VuZ2FnZWQ7
Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaXNFbmdhZ2VkKSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgCi0gICAgICAgIGlmICghaXNFbmdhZ2VkKSB7Ci0gICAgICAg
ICAgICBvcHRpb25hbCA9IFdURjo6bnVsbG9wdDsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICB9CisgICAgICAgIE9wdGlvbmFsPGJvb2w+IGlzRW5nYWdlZDsKKyAgICAgICAgZGVj
b2RlciA+PiBpc0VuZ2FnZWQ7CisgICAgICAgIGlmICghaXNFbmdhZ2VkKQorICAgICAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgaWYgKCEqaXNFbmdhZ2VkKQorICAgICAgICAg
ICAgcmV0dXJuIE9wdGlvbmFsPE9wdGlvbmFsPFQ+PiB7IE9wdGlvbmFsPFQ+IHsgV1RGOjpudWxs
b3B0IH0gfTsKICAgICAgICAgCi0gICAgICAgIFQgdmFsdWU7Ci0gICAgICAgIGlmICghZGVjb2Rl
ci5kZWNvZGUodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBPcHRp
b25hbDxUPiB2YWx1ZTsKKyAgICAgICAgZGVjb2RlciA+PiB2YWx1ZTsKKyAgICAgICAgaWYgKCF2
YWx1ZSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgIAotICAgICAg
ICBvcHRpb25hbCA9IFdURk1vdmUodmFsdWUpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgcmV0dXJuIE9wdGlvbmFsPE9wdGlvbmFsPFQ+PiB7IE9wdGlvbmFsPFQ+IHsgV1RGTW92ZSgq
dmFsdWUpIH0gfTsKICAgICB9CiB9OwogCkBAIC0xMDAsMTkgKzk4LDE5IEBAIHRlbXBsYXRlPHR5
cGVuYW1lIEtleVR5cGUsIHR5cGVuYW1lIFZhbHUKICAgICAgICAgZW5jb2RlciA8PCBwYWlyLmtl
eSA8PCBwYWlyLnZhbHVlOwogICAgIH0KIAotICAgIHN0YXRpYyBXQVJOX1VOVVNFRF9SRVRVUk4g
Ym9vbCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgV1RGOjpLZXlWYWx1ZVBhaXI8S2V5VHlwZSwg
VmFsdWVUeXBlPiYgcGFpcikKKyAgICBzdGF0aWMgT3B0aW9uYWw8V1RGOjpLZXlWYWx1ZVBhaXI8
S2V5VHlwZSwgVmFsdWVUeXBlPj4gZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgewotICAg
ICAgICBLZXlUeXBlIGtleTsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShrZXkpKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIFZhbHVlVHlwZSB2YWx1ZTsKLSAgICAg
ICAgaWYgKCFkZWNvZGVyLmRlY29kZSh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICAgICAgcGFpci5rZXkgPSBrZXk7Ci0gICAgICAgIHBhaXIudmFsdWUgPSB2YWx1ZTsK
LSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIE9wdGlvbmFsPEtleVR5cGU+IGtleTsKKyAg
ICAgICAgZGVjb2RlciA+PiBrZXk7CisgICAgICAgIGlmICgha2V5KQorICAgICAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKKworICAgICAgICBPcHRpb25hbDxWYWx1ZVR5cGU+IHZhbHVlOwor
ICAgICAgICBkZWNvZGVyID4+dmFsdWU7CisgICAgICAgIGlmICghdmFsdWUpCisgICAgICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgICAgIHJldHVybiB7eyBXVEZNb3ZlKCprZXkp
LCBXVEZNb3ZlKCp2YWx1ZSkgfX07CiAgICAgfQogfTsKIApAQCAtMTI2LDI0ICsxMjQsMjQgQEAg
dGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaQogICAgICAgICAgICAgZW5j
b2RlciA8PCB2ZWN0b3JbaV07CiAgICAgfQogCi0gICAgc3RhdGljIFdBUk5fVU5VU0VEX1JFVFVS
TiBib29sIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+
JiB2ZWN0b3IpCisgICAgc3RhdGljIE9wdGlvbmFsPFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT4+
IGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIHsKLSAgICAgICAgdWludDY0X3Qgc2l6ZTsK
LSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShzaXplKSkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgT3B0aW9uYWw8dWludDY0X3Q+IHNpemU7CisgICAgICAgIGRlY29kZXIg
Pj4gc2l6ZTsKKyAgICAgICAgaWYgKCFzaXplKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKIAogICAgICAgICBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+IHRtcDsKLSAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgICAgIFQgZWxlbWVu
dDsKLSAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoZWxlbWVudCkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICB0bXAuYXBwZW5k
KFdURk1vdmUoZWxlbWVudCkpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8ICpzaXpl
OyArK2kpIHsKKyAgICAgICAgICAgIE9wdGlvbmFsPFQ+IGVsZW1lbnQ7CisgICAgICAgICAgICBk
ZWNvZGVyID4+IGVsZW1lbnQ7CisgICAgICAgICAgICBpZiAoIWVsZW1lbnQpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgICAgIHRtcC5hcHBlbmQoV1RGTW92
ZSgqZWxlbWVudCkpOwogICAgICAgICB9CiAKICAgICAgICAgdG1wLnNocmlua1RvRml0KCk7Ci0g
ICAgICAgIHZlY3Rvci5zd2FwKHRtcCk7Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBy
ZXR1cm4gV1RGTW92ZSh0bXApOwogICAgIH0KIH07CiAKQEAgLTE1NCwzMSArMTUyLDMxIEBAIHRl
bXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2kKICAgICAgICAgZW5jb2Rlci5l
bmNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4odmVj
dG9yLmRhdGEoKSksIHZlY3Rvci5zaXplKCkgKiBzaXplb2YoVCkpOwogICAgIH0KICAgICAKLSAg
ICBzdGF0aWMgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIs
IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT4mIHZlY3RvcikKKyAgICBzdGF0aWMgT3B0aW9uYWw8
VmVjdG9yPFQsIGlubGluZUNhcGFjaXR5Pj4gZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAg
ewotICAgICAgICB1aW50NjRfdCBkZWNvZGVkU2l6ZTsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRl
Y29kZShkZWNvZGVkU2l6ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIE9w
dGlvbmFsPHVpbnQ2NF90PiBkZWNvZGVkU2l6ZTsKKyAgICAgICAgZGVjb2RlciA+PiBkZWNvZGVk
U2l6ZTsKKyAgICAgICAgaWYgKCFkZWNvZGVkU2l6ZSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CiAKLSAgICAgICAgaWYgKCFpc0luQm91bmRzPHNpemVfdD4oZGVjb2RlZFNpemUp
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoIWlzSW5Cb3VuZHM8c2l6
ZV90PigqZGVjb2RlZFNpemUpKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAot
ICAgICAgICBhdXRvIHNpemUgPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGRlY29kZWRTaXplKTsKKyAg
ICAgICAgYXV0byBzaXplID0gc3RhdGljX2Nhc3Q8c2l6ZV90PigqZGVjb2RlZFNpemUpOwogCiAg
ICAgICAgIC8vIFNpbmNlIHdlIGtub3cgdGhlIHRvdGFsIHNpemUgb2YgdGhlIGVsZW1lbnRzLCB3
ZSBjYW4gYWxsb2NhdGUgdGhlIHZlY3RvciBpbgogICAgICAgICAvLyBvbmUgZmVsbCBzd29vcC4g
QmVmb3JlIGFsbG9jYXRpbmcgd2UgbXVzdCBob3dldmVyIG1ha2Ugc3VyZSB0aGF0IHRoZSBkZWNv
ZGVyIGJ1ZmZlcgogICAgICAgICAvLyBpcyBiaWcgZW5vdWdoLgogICAgICAgICBpZiAoIWRlY29k
ZXIuYnVmZmVySXNMYXJnZUVub3VnaFRvQ29udGFpbjxUPihzaXplKSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICAgICAg
VmVjdG9yPFQsIGlubGluZUNhcGFjaXR5PiB0ZW1wOwogICAgICAgICB0ZW1wLmdyb3coc2l6ZSk7
CiAKICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJl
dF9jYXN0PHVpbnQ4X3QqPih0ZW1wLmRhdGEoKSksIHNpemUgKiBzaXplb2YoVCkpKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAot
ICAgICAgICB2ZWN0b3Iuc3dhcCh0ZW1wKTsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IHJldHVybiBXVEZNb3ZlKHRlbXApOwogICAgIH0KIH07CiAKQEAgLTE5NCwzMCArMTkyLDMyIEBA
IHRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGUKICAgICAgICAgICAgIGVu
Y29kZXIgPDwgKml0OwogICAgIH0KIAotICAgIHN0YXRpYyBXQVJOX1VOVVNFRF9SRVRVUk4gYm9v
bCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgSGFzaE1hcFR5cGUmIGhhc2hNYXApCisgICAgc3Rh
dGljIE9wdGlvbmFsPEhhc2hNYXBUeXBlPiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKICAgICB7
Ci0gICAgICAgIHVpbnQ2NF90IGhhc2hNYXBTaXplOwotICAgICAgICBpZiAoIWRlY29kZXIuZGVj
b2RlKGhhc2hNYXBTaXplKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgT3B0
aW9uYWw8dWludDY0X3Q+IGhhc2hNYXBTaXplOworICAgICAgICBkZWNvZGVyID4+IGhhc2hNYXBT
aXplOworICAgICAgICBpZiAoIWhhc2hNYXBTaXplKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKIAogICAgICAgICBIYXNoTWFwVHlwZSB0ZW1wSGFzaE1hcDsKLSAgICAgICAgdGVt
cEhhc2hNYXAucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaGFz
aE1hcFNpemUpKTsKLSAgICAgICAgZm9yICh1aW50NjRfdCBpID0gMDsgaSA8IGhhc2hNYXBTaXpl
OyArK2kpIHsKLSAgICAgICAgICAgIEtleUFyZyBrZXk7Ci0gICAgICAgICAgICBNYXBwZWRBcmcg
dmFsdWU7Ci0gICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGtleSkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZSh2YWx1
ZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB0ZW1wSGFzaE1hcC5y
ZXNlcnZlSW5pdGlhbENhcGFjaXR5KHN0YXRpY19jYXN0PHVuc2lnbmVkPigqaGFzaE1hcFNpemUp
KTsKKyAgICAgICAgZm9yICh1aW50NjRfdCBpID0gMDsgaSA8ICpoYXNoTWFwU2l6ZTsgKytpKSB7
CisgICAgICAgICAgICBPcHRpb25hbDxLZXlBcmc+IGtleTsKKyAgICAgICAgICAgIGRlY29kZXIg
Pj4ga2V5OworICAgICAgICAgICAgaWYgKCFrZXkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKKyAgICAgICAgICAgIE9wdGlvbmFsPE1hcHBlZEFyZz4gdmFsdWU7CisgICAg
ICAgICAgICBkZWNvZGVyID4+IHZhbHVlOworICAgICAgICAgICAgaWYgKCF2YWx1ZSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgICAgICAgICBpZiAoIXRlbXBI
YXNoTWFwLmFkZChrZXksIHZhbHVlKS5pc05ld0VudHJ5KSB7CisgICAgICAgICAgICBpZiAoIXRl
bXBIYXNoTWFwLmFkZChXVEZNb3ZlKCprZXkpLCBXVEZNb3ZlKCp2YWx1ZSkpLmlzTmV3RW50cnkp
IHsKICAgICAgICAgICAgICAgICAvLyBUaGUgaGFzaCBtYXAgYWxyZWFkeSBoYXMgdGhlIHNwZWNp
ZmllZCBrZXksIGJhaWwuCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAot
ICAgICAgICBoYXNoTWFwLnN3YXAodGVtcEhhc2hNYXApOwotICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgcmV0dXJuIFdURk1vdmUodGVtcEhhc2hNYXApOwogICAgIH0KIH07CiAKQEAgLTIz
MSwyNiArMjMxLDI3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgSGFzaEEK
ICAgICAgICAgICAgIGVuY29kZXIgPDwgKml0OwogICAgIH0KIAotICAgIHN0YXRpYyBXQVJOX1VO
VVNFRF9SRVRVUk4gYm9vbCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgSGFzaFNldFR5cGUmIGhh
c2hTZXQpCisgICAgc3RhdGljIE9wdGlvbmFsPEhhc2hTZXRUeXBlPiBkZWNvZGUoRGVjb2RlciYg
ZGVjb2RlcikKICAgICB7Ci0gICAgICAgIHVpbnQ2NF90IGhhc2hTZXRTaXplOwotICAgICAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKGhhc2hTZXRTaXplKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgT3B0aW9uYWw8dWludDY0X3Q+IGhhc2hTZXRTaXplOworICAgICAgICBkZWNv
ZGVyID4+IGhhc2hTZXRTaXplOworICAgICAgICBpZiAoIWhhc2hTZXRTaXplKQorICAgICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgICAgICBIYXNoU2V0VHlwZSB0ZW1wSGFzaFNl
dDsKLSAgICAgICAgZm9yICh1aW50NjRfdCBpID0gMDsgaSA8IGhhc2hTZXRTaXplOyArK2kpIHsK
LSAgICAgICAgICAgIEtleUFyZyBrZXk7Ci0gICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KGtleSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBmb3IgKHVpbnQ2
NF90IGkgPSAwOyBpIDwgKmhhc2hTZXRTaXplOyArK2kpIHsKKyAgICAgICAgICAgIE9wdGlvbmFs
PEtleUFyZz4ga2V5OworICAgICAgICAgICAgZGVjb2RlciA+PiBrZXk7CisgICAgICAgICAgICBp
ZiAoIWtleSkKKyAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgICAg
ICAgICBpZiAoIXRlbXBIYXNoU2V0LmFkZChrZXkpLmlzTmV3RW50cnkpIHsKKyAgICAgICAgICAg
IGlmICghdGVtcEhhc2hTZXQuYWRkKFdURk1vdmUoKmtleSkpLmlzTmV3RW50cnkpIHsKICAgICAg
ICAgICAgICAgICAvLyBUaGUgaGFzaCBtYXAgYWxyZWFkeSBoYXMgdGhlIHNwZWNpZmllZCBrZXks
IGJhaWwuCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBo
YXNoU2V0LnN3YXAodGVtcEhhc2hTZXQpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
cmV0dXJuIFdURk1vdmUodGVtcEhhc2hTZXQpOwogICAgIH0KIH07CiAKQEAgLTI2MCwxNCArMjYx
LDEzIEBAIHRlbXBsYXRlPD4gc3RydWN0IENvZGVyPFNlY29uZHM+IHsKICAgICAgICAgZW5jb2Rl
ciA8PCBzZWNvbmRzLnZhbHVlKCk7CiAgICAgfQogCi0gICAgc3RhdGljIFdBUk5fVU5VU0VEX1JF
VFVSTiBib29sIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBTZWNvbmRzJiByZXN1bHQpCisgICAg
c3RhdGljIE9wdGlvbmFsPFNlY29uZHM+IGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIHsK
LSAgICAgICAgZG91YmxlIHZhbHVlOwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHZhbHVl
KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICByZXN1bHQgPSBTZWNvbmRz
KHZhbHVlKTsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIE9wdGlvbmFsPGRvdWJsZT4g
dmFsdWU7CisgICAgICAgIGRlY29kZXIgPj4gdmFsdWU7CisgICAgICAgIGlmICghdmFsdWUpCisg
ICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICByZXR1cm4gU2Vjb25kcygq
dmFsdWUpOwogICAgIH0KIH07CiAKQEAgLTI3NywzNSArMjc3LDM1IEBAIHRlbXBsYXRlPD4gc3Ry
dWN0IENvZGVyPFdhbGxUaW1lPiB7CiAgICAgICAgIGVuY29kZXIgPDwgdGltZS5zZWNvbmRzU2lu
Y2VFcG9jaCgpLnZhbHVlKCk7CiAgICAgfQogCi0gICAgc3RhdGljIFdBUk5fVU5VU0VEX1JFVFVS
TiBib29sIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBXYWxsVGltZSYgcmVzdWx0KQorICAgIHN0
YXRpYyBPcHRpb25hbDxXYWxsVGltZT4gZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgewot
ICAgICAgICBkb3VibGUgdmFsdWU7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUodmFsdWUp
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBPcHRpb25hbDxkb3VibGU+IHZh
bHVlOworICAgICAgICBkZWNvZGVyID4+IHZhbHVlOworICAgICAgICBpZiAoIXZhbHVlKQorICAg
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgICAgICByZXN1bHQgPSBXYWxsVGlt
ZTo6ZnJvbVJhd1NlY29uZHModmFsdWUpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
cmV0dXJuIFdhbGxUaW1lOjpmcm9tUmF3U2Vjb25kcygqdmFsdWUpOwogICAgIH0KIH07CiAKIHRl
bXBsYXRlPD4gc3RydWN0IENvZGVyPEF0b21TdHJpbmc+IHsKICAgICBXVEZfRVhQT1JUX1BSSVZB
VEUgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25zdCBBdG9tU3RyaW5nJik7Ci0gICAg
V1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVyJiwgQXRvbVN0cmlu
ZyYpIFdBUk5fVU5VU0VEX1JFVFVSTjsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIE9w
dGlvbmFsPEF0b21TdHJpbmc+IGRlY29kZShEZWNvZGVyJik7CiB9OwogCiB0ZW1wbGF0ZTw+IHN0
cnVjdCBDb2RlcjxDU3RyaW5nPiB7CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lk
IGVuY29kZShFbmNvZGVyJiwgY29uc3QgQ1N0cmluZyYpOwotICAgIFdURl9FWFBPUlRfUFJJVkFU
RSBzdGF0aWMgYm9vbCBkZWNvZGUoRGVjb2RlciYsIENTdHJpbmcmKSBXQVJOX1VOVVNFRF9SRVRV
Uk47CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBPcHRpb25hbDxDU3RyaW5nPiBkZWNv
ZGUoRGVjb2RlciYpOwogfTsKIAogdGVtcGxhdGU8PiBzdHJ1Y3QgQ29kZXI8U3RyaW5nPiB7CiAg
ICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiwgY29uc3Qg
U3RyaW5nJik7Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGRlY29kZShEZWNv
ZGVyJiwgU3RyaW5nJikgV0FSTl9VTlVTRURfUkVUVVJOOworICAgIFdURl9FWFBPUlRfUFJJVkFU
RSBzdGF0aWMgT3B0aW9uYWw8U3RyaW5nPiBkZWNvZGUoRGVjb2RlciYpOwogfTsKIAogdGVtcGxh
dGU8PiBzdHJ1Y3QgQ29kZXI8U0hBMTo6RGlnZXN0PiB7CiAgICAgV1RGX0VYUE9SVF9QUklWQVRF
IHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiwgY29uc3QgU0hBMTo6RGlnZXN0Jik7Ci0gICAg
V1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVyJiwgU0hBMTo6RGln
ZXN0JikgV0FSTl9VTlVTRURfUkVUVVJOOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMg
T3B0aW9uYWw8U0hBMTo6RGlnZXN0PiBkZWNvZGUoRGVjb2RlciYpOwogfTsKIAogfQpJbmRleDog
U291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudERlY29kZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnREZWNvZGVyLmNwcAko
cmV2aXNpb24gMjU5ODk4KQorKysgU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVu
dERlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw2NSArNTksNjcgQEAgYm9vbCBEZWNv
ZGVyOjpkZWNvZGVGaXhlZExlbmd0aERhdGEodWludAogICAgIHJldHVybiB0cnVlOwogfQogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgotYm9vbCBEZWNvZGVyOjpkZWNvZGVOdW1iZXIoVHlwZSYg
dmFsdWUpCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorRGVjb2RlciYgRGVjb2Rlcjo6ZGVjb2RlTnVt
YmVyKE9wdGlvbmFsPFQ+JiBvcHRpb25hbCkKIHsKLSAgICBpZiAoIWJ1ZmZlcklzTGFyZ2VFbm91
Z2hUb0NvbnRhaW4oc2l6ZW9mKHZhbHVlKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBp
ZiAoIWJ1ZmZlcklzTGFyZ2VFbm91Z2hUb0NvbnRhaW4oc2l6ZW9mKFQpKSkKKyAgICAgICAgcmV0
dXJuICp0aGlzOwogCi0gICAgbWVtY3B5KCZ2YWx1ZSwgbV9idWZmZXJQb3NpdGlvbiwgc2l6ZW9m
KHZhbHVlKSk7Ci0gICAgbV9idWZmZXJQb3NpdGlvbiArPSBzaXplb2YoVHlwZSk7CisgICAgVCB2
YWx1ZTsKKyAgICBtZW1jcHkoJnZhbHVlLCBtX2J1ZmZlclBvc2l0aW9uLCBzaXplb2YoVCkpOwor
ICAgIG1fYnVmZmVyUG9zaXRpb24gKz0gc2l6ZW9mKFQpOwogCiAgICAgRW5jb2Rlcjo6dXBkYXRl
Q2hlY2tzdW1Gb3JOdW1iZXIobV9zaGExLCB2YWx1ZSk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAg
b3B0aW9uYWwgPSB2YWx1ZTsKKyAgICByZXR1cm4gKnRoaXM7CiB9CiAKLWJvb2wgRGVjb2Rlcjo6
ZGVjb2RlKGJvb2wmIHJlc3VsdCkKK0RlY29kZXImIERlY29kZXI6Om9wZXJhdG9yPj4oT3B0aW9u
YWw8Ym9vbD4mIHJlc3VsdCkKIHsKICAgICByZXR1cm4gZGVjb2RlTnVtYmVyKHJlc3VsdCk7CiB9
CiAKLWJvb2wgRGVjb2Rlcjo6ZGVjb2RlKHVpbnQ4X3QmIHJlc3VsdCkKK0RlY29kZXImIERlY29k
ZXI6Om9wZXJhdG9yPj4oT3B0aW9uYWw8dWludDhfdD4mIHJlc3VsdCkKIHsKICAgICByZXR1cm4g
ZGVjb2RlTnVtYmVyKHJlc3VsdCk7CiB9CiAKLWJvb2wgRGVjb2Rlcjo6ZGVjb2RlKHVpbnQxNl90
JiByZXN1bHQpCitEZWNvZGVyJiBEZWNvZGVyOjpvcGVyYXRvcj4+KE9wdGlvbmFsPHVpbnQxNl90
PiYgcmVzdWx0KQogewogICAgIHJldHVybiBkZWNvZGVOdW1iZXIocmVzdWx0KTsKIH0KIAotYm9v
bCBEZWNvZGVyOjpkZWNvZGUoaW50MTZfdCYgcmVzdWx0KQorRGVjb2RlciYgRGVjb2Rlcjo6b3Bl
cmF0b3I+PihPcHRpb25hbDxpbnQxNl90PiYgcmVzdWx0KQogewogICAgIHJldHVybiBkZWNvZGVO
dW1iZXIocmVzdWx0KTsKIH0KIAotYm9vbCBEZWNvZGVyOjpkZWNvZGUodWludDMyX3QmIHJlc3Vs
dCkKK0RlY29kZXImIERlY29kZXI6Om9wZXJhdG9yPj4oT3B0aW9uYWw8dWludDMyX3Q+JiByZXN1
bHQpCiB7CiAgICAgcmV0dXJuIGRlY29kZU51bWJlcihyZXN1bHQpOwogfQogCi1ib29sIERlY29k
ZXI6OmRlY29kZSh1aW50NjRfdCYgcmVzdWx0KQorRGVjb2RlciYgRGVjb2Rlcjo6b3BlcmF0b3I+
PihPcHRpb25hbDx1aW50NjRfdD4mIHJlc3VsdCkKIHsKICAgICByZXR1cm4gZGVjb2RlTnVtYmVy
KHJlc3VsdCk7CiB9CiAKLWJvb2wgRGVjb2Rlcjo6ZGVjb2RlKGludDMyX3QmIHJlc3VsdCkKK0Rl
Y29kZXImIERlY29kZXI6Om9wZXJhdG9yPj4oT3B0aW9uYWw8aW50MzJfdD4mIHJlc3VsdCkKIHsK
ICAgICByZXR1cm4gZGVjb2RlTnVtYmVyKHJlc3VsdCk7CiB9CiAKLWJvb2wgRGVjb2Rlcjo6ZGVj
b2RlKGludDY0X3QmIHJlc3VsdCkKK0RlY29kZXImIERlY29kZXI6Om9wZXJhdG9yPj4oT3B0aW9u
YWw8aW50NjRfdD4mIHJlc3VsdCkKIHsKICAgICByZXR1cm4gZGVjb2RlTnVtYmVyKHJlc3VsdCk7
CiB9CiAKLWJvb2wgRGVjb2Rlcjo6ZGVjb2RlKGZsb2F0JiByZXN1bHQpCitEZWNvZGVyJiBEZWNv
ZGVyOjpvcGVyYXRvcj4+KE9wdGlvbmFsPGZsb2F0PiYgcmVzdWx0KQogewogICAgIHJldHVybiBk
ZWNvZGVOdW1iZXIocmVzdWx0KTsKIH0KIAotYm9vbCBEZWNvZGVyOjpkZWNvZGUoZG91YmxlJiBy
ZXN1bHQpCitEZWNvZGVyJiBEZWNvZGVyOjpvcGVyYXRvcj4+KE9wdGlvbmFsPGRvdWJsZT4mIHJl
c3VsdCkKIHsKICAgICByZXR1cm4gZGVjb2RlTnVtYmVyKHJlc3VsdCk7CiB9CkluZGV4OiBTb3Vy
Y2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RGVjb2Rlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnREZWNvZGVyLmgJKHJldmlzaW9u
IDI1OTg5OCkKKysrIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnREZWNvZGVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDQ3ICs0NSwzNiBAQCBwdWJsaWM6CiAKICAgICBXVEZf
RVhQT1JUX1BSSVZBVEUgYm9vbCBkZWNvZGVGaXhlZExlbmd0aERhdGEodWludDhfdCosIHNpemVf
dCkgV0FSTl9VTlVTRURfUkVUVVJOOwogCi0gICAgV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgZGVj
b2RlKGJvb2wmKSBXQVJOX1VOVVNFRF9SRVRVUk47Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIGJv
b2wgZGVjb2RlKHVpbnQ4X3QmKSBXQVJOX1VOVVNFRF9SRVRVUk47Ci0gICAgV1RGX0VYUE9SVF9Q
UklWQVRFIGJvb2wgZGVjb2RlKHVpbnQxNl90JikgV0FSTl9VTlVTRURfUkVUVVJOOwotICAgIFdU
Rl9FWFBPUlRfUFJJVkFURSBib29sIGRlY29kZSh1aW50MzJfdCYpIFdBUk5fVU5VU0VEX1JFVFVS
TjsKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBkZWNvZGUodWludDY0X3QmKSBXQVJOX1VO
VVNFRF9SRVRVUk47Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgZGVjb2RlKGludDE2X3Qm
KSBXQVJOX1VOVVNFRF9SRVRVUk47Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgZGVjb2Rl
KGludDMyX3QmKSBXQVJOX1VOVVNFRF9SRVRVUk47Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIGJv
b2wgZGVjb2RlKGludDY0X3QmKSBXQVJOX1VOVVNFRF9SRVRVUk47Ci0gICAgV1RGX0VYUE9SVF9Q
UklWQVRFIGJvb2wgZGVjb2RlKGZsb2F0JikgV0FSTl9VTlVTRURfUkVUVVJOOwotICAgIFdURl9F
WFBPUlRfUFJJVkFURSBib29sIGRlY29kZShkb3VibGUmKSBXQVJOX1VOVVNFRF9SRVRVUk47Ci0K
LSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFPiBXQVJOX1VOVVNFRF9SRVRVUk4KLSAgICBhdXRvIGRl
Y29kZShFJiBlKSAtPiBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfZW51bTxFPjo6dmFsdWUsIGJv
b2w+CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIERlY29kZXImIG9wZXJhdG9yPj4oT3B0aW9uYWw8
Ym9vbD4mKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgRGVjb2RlciYgb3BlcmF0b3I+PihPcHRp
b25hbDx1aW50OF90PiYpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBEZWNvZGVyJiBvcGVyYXRv
cj4+KE9wdGlvbmFsPHVpbnQxNl90PiYpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBEZWNvZGVy
JiBvcGVyYXRvcj4+KE9wdGlvbmFsPHVpbnQzMl90PiYpOworICAgIFdURl9FWFBPUlRfUFJJVkFU
RSBEZWNvZGVyJiBvcGVyYXRvcj4+KE9wdGlvbmFsPHVpbnQ2NF90PiYpOworICAgIFdURl9FWFBP
UlRfUFJJVkFURSBEZWNvZGVyJiBvcGVyYXRvcj4+KE9wdGlvbmFsPGludDE2X3Q+Jik7CisgICAg
V1RGX0VYUE9SVF9QUklWQVRFIERlY29kZXImIG9wZXJhdG9yPj4oT3B0aW9uYWw8aW50MzJfdD4m
KTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgRGVjb2RlciYgb3BlcmF0b3I+PihPcHRpb25hbDxp
bnQ2NF90PiYpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBEZWNvZGVyJiBvcGVyYXRvcj4+KE9w
dGlvbmFsPGZsb2F0PiYpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBEZWNvZGVyJiBvcGVyYXRv
cj4+KE9wdGlvbmFsPGRvdWJsZT4mKTsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBz
dGQ6OmVuYWJsZV9pZl90PCFzdGQ6OmlzX2FyaXRobWV0aWM8dHlwZW5hbWUgc3RkOjpyZW1vdmVf
Y29uc3Q8VD4+Ojp2YWx1ZSAmJiAhc3RkOjppc19lbnVtPFQ+Ojp2YWx1ZT4qID0gbnVsbHB0cj4K
KyAgICBEZWNvZGVyJiBvcGVyYXRvcj4+KE9wdGlvbmFsPFQ+JiByZXN1bHQpCiAgICAgewotICAg
ICAgICB1aW50NjRfdCB2YWx1ZTsKLSAgICAgICAgaWYgKCFkZWNvZGUodmFsdWUpKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIWlzVmFsaWRFbnVtPEU+KHZhbHVlKSkK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBlID0gc3RhdGljX2Nhc3Q8RT4o
dmFsdWUpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmVzdWx0ID0gQ29kZXI8VD46
OmRlY29kZSgqdGhpcyk7CisgICAgICAgIHJldHVybiAqdGhpczsKICAgICB9CiAKLSAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBXQVJOX1VOVVNFRF9SRVRVUk4KLSAgICBib29sIGRlY29kZUVudW0o
VCYgcmVzdWx0KQotICAgIHsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoVCkgPD0gOCwg
IkVudW0gdHlwZSBUIG11c3Qgbm90IGJlIGxhcmdlciB0aGFuIDY0IGJpdHMhIik7Ci0KLSAgICAg
ICAgdWludDY0X3QgdmFsdWU7Ci0gICAgICAgIGlmICghZGVjb2RlKHZhbHVlKSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCi0gICAgICAgIHJlc3VsdCA9IHN0YXRpY19jYXN0
PFQ+KHZhbHVlKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4gV0FSTl9VTlVTRURfUkVUVVJOCi0gICAgYXV0byBkZWNvZGUoVCYgdCkgLT4g
c3RkOjplbmFibGVfaWZfdDwhc3RkOjppc19lbnVtPFQ+Ojp2YWx1ZSwgYm9vbD4KKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBFLCBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfZW51bTxFPjo6dmFsdWU+
KiA9IG51bGxwdHI+CisgICAgRGVjb2RlciYgb3BlcmF0b3I+PihPcHRpb25hbDxFPiYgcmVzdWx0
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIENvZGVyPFQ+OjpkZWNvZGUoKnRoaXMsIHQpOworICAg
ICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihFKSA8PSA4LCAiRW51bSB0eXBlIFQgbXVzdCBub3Qg
YmUgbGFyZ2VyIHRoYW4gNjQgYml0cyEiKTsKKyAgICAgICAgT3B0aW9uYWw8dWludDY0X3Q+IHZh
bHVlOworICAgICAgICAqdGhpcyA+PiB2YWx1ZTsKKyAgICAgICAgaWYgKCF2YWx1ZSkKKyAgICAg
ICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgaWYgKCFpc1ZhbGlkRW51bTxFPigqdmFsdWUp
KQorICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICByZXN1bHQgPSBzdGF0aWNfY2Fz
dDxFPigqdmFsdWUpOworICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQogCiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVD4gV0FSTl9VTlVTRURfUkVUVVJOCkBAIC0xMDMsNyArOTIsNyBAQCBwdWJs
aWM6CiAKIHByaXZhdGU6CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgYnVmZmVySXNMYXJn
ZUVub3VnaFRvQ29udGFpbihzaXplX3QpIGNvbnN0IFdBUk5fVU5VU0VEX1JFVFVSTjsKLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPiBib29sIGRlY29kZU51bWJlcihUeXBlJikgV0FSTl9VTlVT
RURfUkVUVVJOOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+IERlY29kZXImIGRlY29kZU51
bWJlcihPcHRpb25hbDxUeXBlPiYpIFdBUk5fVU5VU0VEX1JFVFVSTjsKIAogICAgIGNvbnN0IHVp
bnQ4X3QqIG1fYnVmZmVyOwogICAgIGNvbnN0IHVpbnQ4X3QqIG1fYnVmZmVyUG9zaXRpb247Cklu
ZGV4OiBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RW5jb2Rlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudEVuY29kZXIu
Y3BwCShyZXZpc2lvbiAyNTk4OTgpCisrKyBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJz
aXN0ZW50RW5jb2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDYyICs2Miw2MyBAQCB2b2lk
IEVuY29kZXI6OmVuY29kZUZpeGVkTGVuZ3RoRGF0YShjb25zCiB9CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIFR5cGU+Ci12b2lkIEVuY29kZXI6OmVuY29kZU51bWJlcihUeXBlIHZhbHVlKQorRW5jb2Rl
ciYgRW5jb2Rlcjo6ZW5jb2RlTnVtYmVyKFR5cGUgdmFsdWUpCiB7CiAgICAgRW5jb2Rlcjo6dXBk
YXRlQ2hlY2tzdW1Gb3JOdW1iZXIobV9zaGExLCB2YWx1ZSk7CiAKICAgICB1aW50OF90KiBidWZm
ZXIgPSBncm93KHNpemVvZihUeXBlKSk7CiAgICAgbWVtY3B5KGJ1ZmZlciwgJnZhbHVlLCBzaXpl
b2YoVHlwZSkpOworICAgIHJldHVybiAqdGhpczsKIH0KIAotdm9pZCBFbmNvZGVyOjplbmNvZGUo
Ym9vbCB2YWx1ZSkKK0VuY29kZXImIEVuY29kZXI6Om9wZXJhdG9yPDwoYm9vbCB2YWx1ZSkKIHsK
LSAgICBlbmNvZGVOdW1iZXIodmFsdWUpOworICAgIHJldHVybiBlbmNvZGVOdW1iZXIodmFsdWUp
OwogfQogCi12b2lkIEVuY29kZXI6OmVuY29kZSh1aW50OF90IHZhbHVlKQorRW5jb2RlciYgRW5j
b2Rlcjo6b3BlcmF0b3I8PCh1aW50OF90IHZhbHVlKQogewotICAgIGVuY29kZU51bWJlcih2YWx1
ZSk7CisgICAgcmV0dXJuIGVuY29kZU51bWJlcih2YWx1ZSk7CiB9CiAKLXZvaWQgRW5jb2Rlcjo6
ZW5jb2RlKHVpbnQxNl90IHZhbHVlKQorRW5jb2RlciYgRW5jb2Rlcjo6b3BlcmF0b3I8PCh1aW50
MTZfdCB2YWx1ZSkKIHsKLSAgICBlbmNvZGVOdW1iZXIodmFsdWUpOworICAgIHJldHVybiBlbmNv
ZGVOdW1iZXIodmFsdWUpOwogfQogCi12b2lkIEVuY29kZXI6OmVuY29kZShpbnQxNl90IHZhbHVl
KQorRW5jb2RlciYgRW5jb2Rlcjo6b3BlcmF0b3I8PChpbnQxNl90IHZhbHVlKQogewotICAgIGVu
Y29kZU51bWJlcih2YWx1ZSk7CisgICAgcmV0dXJuIGVuY29kZU51bWJlcih2YWx1ZSk7CiB9CiAK
LXZvaWQgRW5jb2Rlcjo6ZW5jb2RlKHVpbnQzMl90IHZhbHVlKQorRW5jb2RlciYgRW5jb2Rlcjo6
b3BlcmF0b3I8PCh1aW50MzJfdCB2YWx1ZSkKIHsKLSAgICBlbmNvZGVOdW1iZXIodmFsdWUpOwor
ICAgIHJldHVybiBlbmNvZGVOdW1iZXIodmFsdWUpOwogfQogCi12b2lkIEVuY29kZXI6OmVuY29k
ZSh1aW50NjRfdCB2YWx1ZSkKK0VuY29kZXImIEVuY29kZXI6Om9wZXJhdG9yPDwodWludDY0X3Qg
dmFsdWUpCiB7Ci0gICAgZW5jb2RlTnVtYmVyKHZhbHVlKTsKKyAgICByZXR1cm4gZW5jb2RlTnVt
YmVyKHZhbHVlKTsKIH0KIAotdm9pZCBFbmNvZGVyOjplbmNvZGUoaW50MzJfdCB2YWx1ZSkKK0Vu
Y29kZXImIEVuY29kZXI6Om9wZXJhdG9yPDwoaW50MzJfdCB2YWx1ZSkKIHsKLSAgICBlbmNvZGVO
dW1iZXIodmFsdWUpOworICAgIHJldHVybiBlbmNvZGVOdW1iZXIodmFsdWUpOwogfQogCi12b2lk
IEVuY29kZXI6OmVuY29kZShpbnQ2NF90IHZhbHVlKQorRW5jb2RlciYgRW5jb2Rlcjo6b3BlcmF0
b3I8PChpbnQ2NF90IHZhbHVlKQogewotICAgIGVuY29kZU51bWJlcih2YWx1ZSk7CisgICAgcmV0
dXJuIGVuY29kZU51bWJlcih2YWx1ZSk7CiB9CiAKLXZvaWQgRW5jb2Rlcjo6ZW5jb2RlKGZsb2F0
IHZhbHVlKQorRW5jb2RlciYgRW5jb2Rlcjo6b3BlcmF0b3I8PChmbG9hdCB2YWx1ZSkKIHsKLSAg
ICBlbmNvZGVOdW1iZXIodmFsdWUpOworICAgIHJldHVybiBlbmNvZGVOdW1iZXIodmFsdWUpOwog
fQogCi12b2lkIEVuY29kZXI6OmVuY29kZShkb3VibGUgdmFsdWUpCitFbmNvZGVyJiBFbmNvZGVy
OjpvcGVyYXRvcjw8KGRvdWJsZSB2YWx1ZSkKIHsKLSAgICBlbmNvZGVOdW1iZXIodmFsdWUpOwor
ICAgIHJldHVybiBlbmNvZGVOdW1iZXIodmFsdWUpOwogfQogCiB2b2lkIEVuY29kZXI6OmVuY29k
ZUNoZWNrc3VtKCkKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRF
bmNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lz
dGVudEVuY29kZXIuaAkocmV2aXNpb24gMjU5ODk4KQorKysgU291cmNlL1dURi93dGYvcGVyc2lz
dGVuY2UvUGVyc2lzdGVudEVuY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsMzIgKzQ1LDMx
IEBAIHB1YmxpYzoKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBlbmNvZGVDaGVja3N1bSgp
OwogICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGVuY29kZUZpeGVkTGVuZ3RoRGF0YShjb25z
dCB1aW50OF90Kiwgc2l6ZV90KTsKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEU+IGF1dG8gZW5j
b2RlKEUgdmFsdWUpIC0+IHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19lbnVtPEU+Ojp2YWx1ZT4K
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfZW51bTxU
Pjo6dmFsdWU+KiA9IG51bGxwdHI+CisgICAgRW5jb2RlciYgb3BlcmF0b3I8PChjb25zdCBUJiB0
KQogICAgIHsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoRSkgPD0gc2l6ZW9mKHVpbnQ2
NF90KSwgIkVudW0gdHlwZSBtdXN0IG5vdCBiZSBsYXJnZXIgdGhhbiA2NCBiaXRzLiIpOwotCi0g
ICAgICAgIEFTU0VSVChpc1ZhbGlkRW51bTxFPihzdGF0aWNfY2FzdDx1aW50NjRfdD4odmFsdWUp
KSk7Ci0gICAgICAgIGVuY29kZShzdGF0aWNfY2FzdDx1aW50NjRfdD4odmFsdWUpKTsKLSAgICB9
Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIGVuY29kZUVudW0oVCB0KQotICAgIHsK
LSAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFQpIDw9IHNpemVvZih1aW50NjRfdCksIGVu
dW1fdHlwZV9tdXN0X25vdF9iZV9sYXJnZXJfdGhhbl82NF9iaXRzKTsKLQotICAgICAgICBlbmNv
ZGUoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHQpKTsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzaXpl
b2YoVCkgPD0gc2l6ZW9mKHVpbnQ2NF90KSwgIkVudW0gdHlwZSBtdXN0IG5vdCBiZSBsYXJnZXIg
dGhhbiA2NCBiaXRzLiIpOworICAgICAgICByZXR1cm4gKnRoaXMgPDwgc3RhdGljX2Nhc3Q8dWlu
dDY0X3Q+KHQpOwogICAgIH0KIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGF1dG8gZW5jb2Rl
KGNvbnN0IFQmIHQpIC0+IHN0ZDo6ZW5hYmxlX2lmX3Q8IXN0ZDo6aXNfZW51bTxUPjo6dmFsdWU+
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc3RkOjplbmFibGVfaWZfdDwhc3RkOjppc19lbnVt
PFQ+Ojp2YWx1ZSAmJiAhc3RkOjppc19hcml0aG1ldGljPHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX2Nv
bnN0PFQ+Pjo6dmFsdWU+KiA9IG51bGxwdHI+CisgICAgRW5jb2RlciYgb3BlcmF0b3I8PChjb25z
dCBUJiB0KQogICAgIHsKICAgICAgICAgQ29kZXI8VD46OmVuY29kZSgqdGhpcywgdCk7Ci0gICAg
fQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gRW5jb2RlciYgb3BlcmF0b3I8PChjb25zdCBU
JiB0KQotICAgIHsKLSAgICAgICAgZW5jb2RlKHQpOwogICAgICAgICByZXR1cm4gKnRoaXM7CiAg
ICAgfQogCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIEVuY29kZXImIG9wZXJhdG9yPDwoYm9vbCk7
CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIEVuY29kZXImIG9wZXJhdG9yPDwodWludDhfdCk7Cisg
ICAgV1RGX0VYUE9SVF9QUklWQVRFIEVuY29kZXImIG9wZXJhdG9yPDwodWludDE2X3QpOworICAg
IFdURl9FWFBPUlRfUFJJVkFURSBFbmNvZGVyJiBvcGVyYXRvcjw8KHVpbnQzMl90KTsKKyAgICBX
VEZfRVhQT1JUX1BSSVZBVEUgRW5jb2RlciYgb3BlcmF0b3I8PCh1aW50NjRfdCk7CisgICAgV1RG
X0VYUE9SVF9QUklWQVRFIEVuY29kZXImIG9wZXJhdG9yPDwoaW50MTZfdCk7CisgICAgV1RGX0VY
UE9SVF9QUklWQVRFIEVuY29kZXImIG9wZXJhdG9yPDwoaW50MzJfdCk7CisgICAgV1RGX0VYUE9S
VF9QUklWQVRFIEVuY29kZXImIG9wZXJhdG9yPDwoaW50NjRfdCk7CisgICAgV1RGX0VYUE9SVF9Q
UklWQVRFIEVuY29kZXImIG9wZXJhdG9yPDwoZmxvYXQpOworICAgIFdURl9FWFBPUlRfUFJJVkFU
RSBFbmNvZGVyJiBvcGVyYXRvcjw8KGRvdWJsZSk7CisKICAgICBjb25zdCB1aW50OF90KiBidWZm
ZXIoKSBjb25zdCB7IHJldHVybiBtX2J1ZmZlci5kYXRhKCk7IH0KICAgICBzaXplX3QgYnVmZmVy
U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYnVmZmVyLnNpemUoKTsgfQogCkBAIC04MCwxOCArNzks
OCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSVBDRW5jb2RlciA9IGZh
bHNlOwogCiBwcml2YXRlOgotICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGVuY29kZShib29s
KTsKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBlbmNvZGUodWludDhfdCk7Ci0gICAgV1RG
X0VYUE9SVF9QUklWQVRFIHZvaWQgZW5jb2RlKHVpbnQxNl90KTsKLSAgICBXVEZfRVhQT1JUX1BS
SVZBVEUgdm9pZCBlbmNvZGUodWludDMyX3QpOwotICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lk
IGVuY29kZSh1aW50NjRfdCk7Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZW5jb2RlKGlu
dDE2X3QpOwotICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGVuY29kZShpbnQzMl90KTsKLSAg
ICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBlbmNvZGUoaW50NjRfdCk7Ci0gICAgV1RGX0VYUE9S
VF9QUklWQVRFIHZvaWQgZW5jb2RlKGZsb2F0KTsKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBlbmNvZGUoZG91YmxlKTsKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+IHZvaWQgZW5j
b2RlTnVtYmVyKFR5cGUpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+IEVuY29kZXImIGVu
Y29kZU51bWJlcihUeXBlKTsKIAogICAgIHVpbnQ4X3QqIGdyb3coc2l6ZV90KTsKIApJbmRleDog
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwkocmV2aXNpb24gMjU5ODk4KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzMgQEAKKzIwMjAtMDQtMTAgIEFsZXggQ2hyaXN0ZW5z
ZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBQZXJzaXN0ZW50Q29kZXJz
IHNob3VsZCB1c2UgbW9kZXJuIGRlY29kaW5nIHN5bnRheAorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA3NDk3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRI
b3N0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kSG9zdDo6c2hvd0Nl
cnRpZmljYXRlKToKKyAgICAgICAgKiBsb2FkZXIvRmV0Y2hPcHRpb25zLmg6CisgICAgICAgIChX
ZWJDb3JlOjpGZXRjaE9wdGlvbnM6OmRlY29kZVBlcnNpc3RlbnQpOgorICAgICAgICAqIHBhZ2Uv
Y3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeVJlc3BvbnNlSGVhZGVycy5oOgorICAgICAgICAoV2Vi
Q29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5UmVzcG9uc2VIZWFkZXJzOjplbmNvZGUgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5UmVzcG9uc2VIZWFkZXJz
OjpkZWNvZGUpOgorICAgICAgICAqIHBsYXRmb3JtL1Bhc3RlYm9hcmRDdXN0b21EYXRhLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmRDdXN0b21EYXRhOjpmcm9tU2hhcmVkQnVmZmVy
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlTG9hZFByaW9yaXR5Lmg6Cisg
ICAgICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmg6CisgICAgICAg
IChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RCYXNlOjplbmNvZGVCYXNlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdEJhc2U6OmRlY29kZUJhc2UpOgorICAgICAgICAq
IHBsYXRmb3JtL25ldHdvcmsvY2YvQ2VydGlmaWNhdGVJbmZvLmg6CisgICAgICAgIChXVEY6OlBl
cnNpc3RlbmNlOjpkZWNvZGVDRkRhdGEpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6ZGVj
b2RlU2VjVHJ1c3RSZWYpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6ZGVjb2RlQ2VydGlm
aWNhdGVDaGFpbik6CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpDb2RlcjxXZWJDb3JlOjpD
ZXJ0aWZpY2F0ZUluZm8+OjplbmNvZGUpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6Q29k
ZXI8V2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvPjo6ZGVjb2RlKToKKyAgICAgICAgKiB3b3JrZXJz
L3NlcnZpY2Uvc2VydmVyL1JlZ2lzdHJhdGlvbkRhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlZ2lzdHJhdGlvbkRhdGFiYXNlOjpkb1B1c2hDaGFuZ2VzKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlZ2lzdHJhdGlvbkRhdGFiYXNlOjppbXBvcnRSZWNvcmRzKToKKwogMjAyMC0wNC0xMCAg
QW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgW0NTUyBTaGFkb3cg
UGFydHNdIEJhZCBzdHlsZSBzaGFyaW5nIGJldHdlZW4gc2libGluZyBlbGVtZW50cyB3aXRoIGRp
ZmZlcmVudCBwYXJ0IGF0dHJpYnV0ZXMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwCShyZXZpc2lvbiAyNTk4OTgpCisrKyBT
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjAsNiArNjAsNyBAQAogI2luY2x1ZGUgPHBhbC9zeXN0ZW0vU291bmQuaD4K
ICNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMu
aD4KKyNpbmNsdWRlIDx3dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudERlY29kZXIuaD4KICNpbmNs
dWRlIDx3dGYvdGV4dC9CYXNlNjQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNTc0LDE1
ICs1NzUsMTYgQEAgYm9vbCBJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OnNob3dDZXJ0aWZpYwogICAg
IGlmICghYmFzZTY0RGVjb2RlKHNlcmlhbGl6ZWRDZXJ0aWZpY2F0ZSwgZGF0YSkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIENlcnRpZmljYXRlSW5mbyBjZXJ0aWZpY2F0ZUluZm87CiAg
ICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyKGRhdGEuZGF0YSgpLCBkYXRhLnNp
emUoKSk7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShjZXJ0aWZpY2F0ZUluZm8pKQorICAgIE9w
dGlvbmFsPENlcnRpZmljYXRlSW5mbz4gY2VydGlmaWNhdGVJbmZvOworICAgIGRlY29kZXIgPj4g
Y2VydGlmaWNhdGVJbmZvOworICAgIGlmICghY2VydGlmaWNhdGVJbmZvKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBpZiAoY2VydGlmaWNhdGVJbmZvLmlzRW1wdHkoKSkKKyAgICBpZiAo
Y2VydGlmaWNhdGVJbmZvLT5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IG1fY2xpZW50LT5zaG93Q2VydGlmaWNhdGUoY2VydGlmaWNhdGVJbmZvKTsKKyAgICBtX2NsaWVu
dC0+c2hvd0NlcnRpZmljYXRlKCpjZXJ0aWZpY2F0ZUluZm8pOwogICAgIHJldHVybiB0cnVlOwog
fQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rvck5ldHdv
cmtBZ2VudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50
cy9JbnNwZWN0b3JOZXR3b3JrQWdlbnQuY3BwCShyZXZpc2lvbiAyNTk4OTgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rvck5ldHdvcmtBZ2VudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTk2OSw3ICs5NjksNyBAQCB2b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6
Z2V0U2VyaWFsaXplCiAgICAgfQogCiAgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2RlciBlbmNv
ZGVyOwotICAgIGVuY29kZXIgPDwgY2VydGlmaWNhdGUudmFsdWUoKTsKKyAgICBXVEY6OlBlcnNp
c3RlbmNlOjpDb2RlcjxXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8+OjplbmNvZGUoZW5jb2Rlciwg
Y2VydGlmaWNhdGUudmFsdWUoKSk7CiAgICAgKnNlcmlhbGl6ZWRDZXJ0aWZpY2F0ZSA9IGJhc2U2
NEVuY29kZShlbmNvZGVyLmJ1ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNpemUoKSk7CiB9CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9GZXRjaE9wdGlvbnMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9sb2FkZXIvRmV0Y2hPcHRpb25zLmgJKHJldmlzaW9uIDI1OTg5OCkKKysr
IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9GZXRjaE9wdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAt
MTY3LDcgKzE2Nyw4IEBAIHRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6RmUK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiBpbmxpbmUg
dm9pZCBGZXRjaE9wdGlvbnM6OmVuY29kZVBlcnNpc3RlbnQoRW5jb2RlciYgZW5jb2RlcikgY29u
c3QKK3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+CitpbmxpbmUgdm9pZCBGZXRjaE9wdGlvbnM6OmVu
Y29kZVBlcnNpc3RlbnQoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIHsKICAgICAvLyBDaGFuZ2Vz
IHRvIGVuY29kaW5nIGhlcmUgc2hvdWxkIGJ1bXAgTmV0d29ya0NhY2hlIFN0b3JhZ2UgZm9ybWF0
IHZlcnNpb24uCiAgICAgZW5jb2RlciA8PCBkZXN0aW5hdGlvbjsKQEAgLTE4MCw1OSArMTgxLDcw
IEBAIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IGlubGluZSB2b2lkIEZldGMKICAgICBlbmNvZGVy
IDw8IGtlZXBBbGl2ZTsKIH0KIAotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gaW5saW5lIGJvb2wg
RmV0Y2hPcHRpb25zOjpkZWNvZGVQZXJzaXN0ZW50KERlY29kZXImIGRlY29kZXIsIEZldGNoT3B0
aW9ucyYgb3B0aW9ucykKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+CitpbmxpbmUgV0FSTl9VTlVT
RURfUkVUVVJOIGJvb2wgRmV0Y2hPcHRpb25zOjpkZWNvZGVQZXJzaXN0ZW50KERlY29kZXImIGRl
Y29kZXIsIEZldGNoT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBGZXRjaE9wdGlvbnM6OkRlc3Rp
bmF0aW9uIGRlc3RpbmF0aW9uOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoZGVzdGluYXRpb24p
KQorICAgIE9wdGlvbmFsPEZldGNoT3B0aW9uczo6RGVzdGluYXRpb24+IGRlc3RpbmF0aW9uOwor
ICAgIGRlY29kZXIgPj4gZGVzdGluYXRpb247CisgICAgaWYgKCFkZXN0aW5hdGlvbikKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgRmV0Y2hPcHRpb25zOjpNb2RlIG1vZGU7Ci0gICAgaWYg
KCFkZWNvZGVyLmRlY29kZShtb2RlKSkKKyAgICBPcHRpb25hbDxGZXRjaE9wdGlvbnM6Ok1vZGU+
IG1vZGU7CisgICAgZGVjb2RlciA+PiBtb2RlOworICAgIGlmICghbW9kZSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgRmV0Y2hPcHRpb25zOjpDcmVkZW50aWFscyBjcmVkZW50aWFsczsK
LSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGNyZWRlbnRpYWxzKSkKKyAgICBPcHRpb25hbDxGZXRj
aE9wdGlvbnM6OkNyZWRlbnRpYWxzPiBjcmVkZW50aWFsczsKKyAgICBkZWNvZGVyID4+IGNyZWRl
bnRpYWxzOworICAgIGlmICghY3JlZGVudGlhbHMpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIEZldGNoT3B0aW9uczo6Q2FjaGUgY2FjaGU7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShj
YWNoZSkpCisgICAgT3B0aW9uYWw8RmV0Y2hPcHRpb25zOjpDYWNoZT4gY2FjaGU7CisgICAgZGVj
b2RlciA+PiBjYWNoZTsKKyAgICBpZiAoIWNhY2hlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICBGZXRjaE9wdGlvbnM6OlJlZGlyZWN0IHJlZGlyZWN0OwotICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUocmVkaXJlY3QpKQorICAgIE9wdGlvbmFsPEZldGNoT3B0aW9uczo6UmVkaXJlY3Q+IHJl
ZGlyZWN0OworICAgIGRlY29kZXIgPj4gcmVkaXJlY3Q7CisgICAgaWYgKCFyZWRpcmVjdCkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgUmVmZXJyZXJQb2xpY3kgcmVmZXJyZXJQb2xpY3k7
Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZWZlcnJlclBvbGljeSkpCisgICAgT3B0aW9uYWw8
UmVmZXJyZXJQb2xpY3k+IHJlZmVycmVyUG9saWN5OworICAgIGRlY29kZXIgPj4gcmVmZXJyZXJQ
b2xpY3k7CisgICAgaWYgKCFyZWZlcnJlclBvbGljeSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgU3RyaW5nIGludGVncml0eTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGludGVncml0
eSkpCisgICAgT3B0aW9uYWw8U3RyaW5nPiBpbnRlZ3JpdHk7CisgICAgZGVjb2RlciA+PiBpbnRl
Z3JpdHk7CisgICAgaWYgKCFpbnRlZ3JpdHkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IGJvb2wga2VlcEFsaXZlOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoa2VlcEFsaXZlKSkKKyAg
ICBPcHRpb25hbDxib29sPiBrZWVwQWxpdmU7CisgICAgZGVjb2RlciA+PiBrZWVwQWxpdmU7Cisg
ICAgaWYgKCFrZWVwQWxpdmUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIG9wdGlvbnMu
ZGVzdGluYXRpb24gPSBkZXN0aW5hdGlvbjsKLSAgICBvcHRpb25zLm1vZGUgPSBtb2RlOwotICAg
IG9wdGlvbnMuY3JlZGVudGlhbHMgPSBjcmVkZW50aWFsczsKLSAgICBvcHRpb25zLmNhY2hlID0g
Y2FjaGU7Ci0gICAgb3B0aW9ucy5yZWRpcmVjdCA9IHJlZGlyZWN0OwotICAgIG9wdGlvbnMucmVm
ZXJyZXJQb2xpY3kgPSByZWZlcnJlclBvbGljeTsKLSAgICBvcHRpb25zLmludGVncml0eSA9IFdU
Rk1vdmUoaW50ZWdyaXR5KTsKLSAgICBvcHRpb25zLmtlZXBBbGl2ZSA9IGtlZXBBbGl2ZTsKKyAg
ICBvcHRpb25zLmRlc3RpbmF0aW9uID0gKmRlc3RpbmF0aW9uOworICAgIG9wdGlvbnMubW9kZSA9
ICptb2RlOworICAgIG9wdGlvbnMuY3JlZGVudGlhbHMgPSAqY3JlZGVudGlhbHM7CisgICAgb3B0
aW9ucy5jYWNoZSA9ICpjYWNoZTsKKyAgICBvcHRpb25zLnJlZGlyZWN0ID0gKnJlZGlyZWN0Owor
ICAgIG9wdGlvbnMucmVmZXJyZXJQb2xpY3kgPSAqcmVmZXJyZXJQb2xpY3k7CisgICAgb3B0aW9u
cy5pbnRlZ3JpdHkgPSBXVEZNb3ZlKCppbnRlZ3JpdHkpOworICAgIG9wdGlvbnMua2VlcEFsaXZl
ID0gKmtlZXBBbGl2ZTsKIAogICAgIHJldHVybiB0cnVlOwogfQogCi10ZW1wbGF0ZTxjbGFzcyBF
bmNvZGVyPiBpbmxpbmUgdm9pZCBGZXRjaE9wdGlvbnM6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVy
KSBjb25zdAordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KK2lubGluZSB2b2lkIEZldGNoT3B0aW9u
czo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB7CiAgICAgZW5jb2RlUGVyc2lzdGVu
dChlbmNvZGVyKTsKICAgICBlbmNvZGVyIDw8IGNsaWVudElkZW50aWZpZXIuYXNPcHRpb25hbCgp
OwogfQogCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBpbmxpbmUgT3B0aW9uYWw8RmV0Y2hPcHRp
b25zPiBGZXRjaE9wdGlvbnM6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQordGVtcGxhdGU8Y2xh
c3MgRGVjb2Rlcj4KK2lubGluZSBPcHRpb25hbDxGZXRjaE9wdGlvbnM+IEZldGNoT3B0aW9uczo6
ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7CiAgICAgRmV0Y2hPcHRpb25zIG9wdGlvbnM7CiAg
ICAgaWYgKCFkZWNvZGVQZXJzaXN0ZW50KGRlY29kZXIsIG9wdGlvbnMpKQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGFnZS9TZWN1cml0eU9yaWdpbkRhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luRGF0YS5oCShyZXZpc2lvbiAyNTk4OTgpCisrKyBT
b3VyY2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTUsMTEgKzExNSwxMiBAQCBPcHRpb25hbDxTZWN1cml0eU9yaWdpbkRhdGE+IFNlY3VyaXR5
T3JpCiAgICAgaWYgKCFob3N0KQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIAot
ICAgIE9wdGlvbmFsPHVpbnQxNl90PiBwb3J0OwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocG9y
dCkpCisgICAgT3B0aW9uYWw8T3B0aW9uYWw8dWludDE2X3Q+PiBwb3J0OworICAgIGRlY29kZXIg
Pj4gcG9ydDsKKyAgICBpZiAoIXBvcnQpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAg
ICAgCi0gICAgU2VjdXJpdHlPcmlnaW5EYXRhIGRhdGEgeyBXVEZNb3ZlKCpwcm90b2NvbCksIFdU
Rk1vdmUoKmhvc3QpLCBXVEZNb3ZlKHBvcnQpIH07CisgICAgU2VjdXJpdHlPcmlnaW5EYXRhIGRh
dGEgeyBXVEZNb3ZlKCpwcm90b2NvbCksIFdURk1vdmUoKmhvc3QpLCBXVEZNb3ZlKCpwb3J0KSB9
OwogICAgIGlmIChkYXRhLmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkpCiAgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRT
ZWN1cml0eVBvbGljeVJlc3BvbnNlSGVhZGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeVJlc3BvbnNlSGVhZGVycy5oCShyZXZp
c2lvbiAyNTk4OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQ
b2xpY3lSZXNwb25zZUhlYWRlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBDb250ZW50U2VjdXJpdHlQb2xpY3k7CiBjbGFzcyBS
ZXNvdXJjZVJlc3BvbnNlOwogCi1lbnVtIGNsYXNzIENvbnRlbnRTZWN1cml0eVBvbGljeUhlYWRl
clR5cGUgeworZW51bSBjbGFzcyBDb250ZW50U2VjdXJpdHlQb2xpY3lIZWFkZXJUeXBlIDogYm9v
bCB7CiAgICAgUmVwb3J0LAogICAgIEVuZm9yY2UsCiB9OwpAQCAtNDYsNyArNDYsNyBAQCBwdWJs
aWM6CiAgICAgQ29udGVudFNlY3VyaXR5UG9saWN5UmVzcG9uc2VIZWFkZXJzIGlzb2xhdGVkQ29w
eSgpIGNvbnN0OwogCiAgICAgdGVtcGxhdGUgPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVu
Y29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIGJvb2wg
ZGVjb2RlKERlY29kZXImLCBDb250ZW50U2VjdXJpdHlQb2xpY3lSZXNwb25zZUhlYWRlcnMmKTsK
KyAgICB0ZW1wbGF0ZSA8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPENvbnRlbnRTZWN1
cml0eVBvbGljeVJlc3BvbnNlSGVhZGVycz4gZGVjb2RlKERlY29kZXImKTsKIAogICAgIGVudW0g
RW1wdHlUYWcgeyBFbXB0eSB9OwogICAgIHN0cnVjdCBNYXJrYWJsZVRyYWl0cyB7CkBAIC03OCwz
MiArNzgsNDAgQEAgdm9pZCBDb250ZW50U2VjdXJpdHlQb2xpY3lSZXNwb25zZUhlYWRlcgogICAg
IGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG1faGVhZGVycy5zaXplKCkpOwogICAg
IGZvciAoYXV0byYgcGFpciA6IG1faGVhZGVycykgewogICAgICAgICBlbmNvZGVyIDw8IHBhaXIu
Zmlyc3Q7Ci0gICAgICAgIGVuY29kZXIuZW5jb2RlRW51bShwYWlyLnNlY29uZCk7CisgICAgICAg
IGVuY29kZXIgPDwgcGFpci5zZWNvbmQ7CiAgICAgfQogICAgIGVuY29kZXIgPDwgbV9odHRwU3Rh
dHVzQ29kZTsKIH0KIAogdGVtcGxhdGUgPGNsYXNzIERlY29kZXI+Ci1ib29sIENvbnRlbnRTZWN1
cml0eVBvbGljeVJlc3BvbnNlSGVhZGVyczo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIENvbnRl
bnRTZWN1cml0eVBvbGljeVJlc3BvbnNlSGVhZGVycyYgaGVhZGVycykKK09wdGlvbmFsPENvbnRl
bnRTZWN1cml0eVBvbGljeVJlc3BvbnNlSGVhZGVycz4gQ29udGVudFNlY3VyaXR5UG9saWN5UmVz
cG9uc2VIZWFkZXJzOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIHsKLSAgICB1aW50NjRfdCBo
ZWFkZXJzU2l6ZTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGhlYWRlcnNTaXplKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaGVhZGVyc1NpemU7
ICsraSkgewotICAgICAgICBTdHJpbmcgaGVhZGVyOwotICAgICAgICBpZiAoIWRlY29kZXIuZGVj
b2RlKGhlYWRlcikpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIENvbnRlbnRT
ZWN1cml0eVBvbGljeUhlYWRlclR5cGUgaGVhZGVyVHlwZTsKLSAgICAgICAgaWYgKCFkZWNvZGVy
LmRlY29kZUVudW0oaGVhZGVyVHlwZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIGhlYWRlcnMubV9oZWFkZXJzLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihoZWFkZXIsIGhlYWRl
clR5cGUpKTsKKyAgICBDb250ZW50U2VjdXJpdHlQb2xpY3lSZXNwb25zZUhlYWRlcnMgaGVhZGVy
czsKKworICAgIE9wdGlvbmFsPHVpbnQ2NF90PiBoZWFkZXJzU2l6ZTsKKyAgICBkZWNvZGVyID4+
IGhlYWRlcnNTaXplOworICAgIGlmICghaGVhZGVyc1NpemUpCisgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAqaGVhZGVyc1NpemU7ICsraSkg
eworICAgICAgICBPcHRpb25hbDxTdHJpbmc+IGhlYWRlcjsKKyAgICAgICAgZGVjb2RlciA+PiBo
ZWFkZXI7CisgICAgICAgIGlmICghaGVhZGVyKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKKyAgICAgICAgT3B0aW9uYWw8Q29udGVudFNlY3VyaXR5UG9saWN5SGVhZGVyVHlwZT4g
aGVhZGVyVHlwZTsKKyAgICAgICAgZGVjb2RlciA+PiBoZWFkZXJUeXBlOworICAgICAgICBpZiAo
IWhlYWRlclR5cGUpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICBo
ZWFkZXJzLm1faGVhZGVycy5hcHBlbmQoc3RkOjptYWtlX3BhaXIoV1RGTW92ZSgqaGVhZGVyKSwg
V1RGTW92ZSgqaGVhZGVyVHlwZSkpKTsKICAgICB9CiAgICAgaGVhZGVycy5tX2hlYWRlcnMuc2hy
aW5rVG9GaXQoKTsKIAotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaGVhZGVycy5tX2h0dHBTdGF0
dXNDb2RlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIE9wdGlvbmFsPGludD4gaHR0cFN0
YXR1c0NvZGU7CisgICAgZGVjb2RlciA+PiBodHRwU3RhdHVzQ29kZTsKKyAgICBpZiAoIWh0dHBT
dGF0dXNDb2RlKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIGhlYWRlcnMubV9o
dHRwU3RhdHVzQ29kZSA9ICpodHRwU3RhdHVzQ29kZTsKIAotICAgIHJldHVybiB0cnVlOworICAg
IHJldHVybiBXVEZNb3ZlKGhlYWRlcnMpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QYXN0ZWJvYXJkQ3VzdG9tRGF0YS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGFzdGVib2FyZEN1c3RvbURhdGEu
Y3BwCShyZXZpc2lvbiAyNTk4OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QYXN0ZWJv
YXJkQ3VzdG9tRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk4LDIzICs5OCwyOSBAQCBQYXN0
ZWJvYXJkQ3VzdG9tRGF0YSBQYXN0ZWJvYXJkQ3VzdG9tRGF0CiAKICAgICBQYXN0ZWJvYXJkQ3Vz
dG9tRGF0YSByZXN1bHQ7CiAgICAgYXV0byBkZWNvZGVyID0gYnVmZmVyLmRlY29kZXIoKTsKLSAg
ICB1bnNpZ25lZCB2ZXJzaW9uOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUodmVyc2lvbikgfHwg
dmVyc2lvbiA+IG1heFN1cHBvcnRlZERhdGFTZXJpYWxpemF0aW9uVmVyc2lvbk51bWJlcikKKyAg
ICBPcHRpb25hbDx1bnNpZ25lZD4gdmVyc2lvbjsKKyAgICBkZWNvZGVyID4+IHZlcnNpb247Cisg
ICAgaWYgKCF2ZXJzaW9uIHx8ICp2ZXJzaW9uID4gbWF4U3VwcG9ydGVkRGF0YVNlcmlhbGl6YXRp
b25WZXJzaW9uTnVtYmVyKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgaWYgKCFkZWNvZGVy
LmRlY29kZShyZXN1bHQubV9vcmlnaW4pKQorICAgIE9wdGlvbmFsPFN0cmluZz4gb3JpZ2luOwor
ICAgIGRlY29kZXIgPj4gb3JpZ2luOworICAgIGlmICghb3JpZ2luKQogICAgICAgICByZXR1cm4g
eyB9OworICAgIHJlc3VsdC5tX29yaWdpbiA9IFdURk1vdmUoKm9yaWdpbik7CiAKLSAgICBIYXNo
TWFwPFN0cmluZywgU3RyaW5nPiBzYW1lT3JpZ2luQ3VzdG9tU3RyaW5nRGF0YTsKLSAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKHNhbWVPcmlnaW5DdXN0b21TdHJpbmdEYXRhKSkKKyAgICBPcHRpb25h
bDxIYXNoTWFwPFN0cmluZywgU3RyaW5nPj4gc2FtZU9yaWdpbkN1c3RvbVN0cmluZ0RhdGE7Cisg
ICAgZGVjb2RlciA+PiBzYW1lT3JpZ2luQ3VzdG9tU3RyaW5nRGF0YTsKKyAgICBpZiAoIXNhbWVP
cmlnaW5DdXN0b21TdHJpbmdEYXRhKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgVmVjdG9y
PFN0cmluZz4gb3JkZXJlZFR5cGVzOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUob3JkZXJlZFR5
cGVzKSkKKyAgICBPcHRpb25hbDxWZWN0b3I8U3RyaW5nPj4gb3JkZXJlZFR5cGVzOworICAgIGRl
Y29kZXIgPj4gb3JkZXJlZFR5cGVzOworICAgIGlmICghb3JkZXJlZFR5cGVzKQogICAgICAgICBy
ZXR1cm4geyB9OwogCi0gICAgZm9yIChhdXRvJiB0eXBlIDogb3JkZXJlZFR5cGVzKQotICAgICAg
ICByZXN1bHQud3JpdGVTdHJpbmdJbkN1c3RvbURhdGEodHlwZSwgc2FtZU9yaWdpbkN1c3RvbVN0
cmluZ0RhdGEuZ2V0KHR5cGUpKTsKKyAgICBmb3IgKGF1dG8mIHR5cGUgOiAqb3JkZXJlZFR5cGVz
KQorICAgICAgICByZXN1bHQud3JpdGVTdHJpbmdJbkN1c3RvbURhdGEodHlwZSwgc2FtZU9yaWdp
bkN1c3RvbVN0cmluZ0RhdGEtPmdldCh0eXBlKSk7CiAKICAgICByZXR1cm4gcmVzdWx0OwogfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2VuZXJpYy9LZXllZERlY29kZXJHZW5lcmlj
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nZW5lcmljL0tleWVk
RGVjb2RlckdlbmVyaWMuY3BwCShyZXZpc2lvbiAyNTk4OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9nZW5lcmljL0tleWVkRGVjb2RlckdlbmVyaWMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00OCw0MCArNDgsMzYgQEAgcHJpdmF0ZToKICAgICBIYXNoTWFwPFN0cmluZywgc3RkOjp1bmlx
dWVfcHRyPE5vZGU+PiBtX21hcDsKIH07CiAKLXN0YXRpYyBib29sIHJlYWRTdHJpbmcoV1RGOjpQ
ZXJzaXN0ZW5jZTo6RGVjb2RlciYgZGVjb2RlciwgU3RyaW5nJiByZXN1bHQpCitzdGF0aWMgT3B0
aW9uYWw8U3RyaW5nPiByZWFkU3RyaW5nKFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXImIGRlY29k
ZXIpCiB7Ci0gICAgc2l6ZV90IHNpemU7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShzaXplKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghc2l6ZSkgewotICAgICAgICByZXN1bHQg
PSBlbXB0eVN0cmluZygpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAo
IWRlY29kZXIuYnVmZmVySXNMYXJnZUVub3VnaFRvQ29udGFpbjx1aW50OF90PihzaXplKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFZlY3Rvcjx1aW50OF90PiBidWZmZXIoc2l6ZSk7Ci0g
ICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShidWZmZXIuZGF0YSgpLCBzaXpl
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJlc3VsdCA9IFN0cmluZzo6ZnJvbVVURjgo
YnVmZmVyLmRhdGEoKSwgc2l6ZSk7CisgICAgT3B0aW9uYWw8c2l6ZV90PiBzaXplOworICAgIGRl
Y29kZXIgPj4gc2l6ZTsKKyAgICBpZiAoIXNpemUpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CisgICAgaWYgKCFzaXplLnZhbHVlKCkpCisgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygp
OworCisgICAgVmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZlcihzaXplLnZhbHVlKCkpOworICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoYnVmZmVyLmRhdGEoKSwgc2l6ZS52YWx1ZSgp
KSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBhdXRvIHJlc3VsdCA9IFN0cmlu
Zzo6ZnJvbVVURjgoYnVmZmVyLmRhdGEoKSwgc2l6ZS52YWx1ZSgpKTsKICAgICBpZiAocmVzdWx0
LmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CiAKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgogc3RhdGljIGJvb2wgcmVhZFNpbXBsZVZhbHVlKFdURjo6UGVyc2lz
dGVuY2U6OkRlY29kZXImIGRlY29kZXIsIEtleWVkRGVjb2RlckdlbmVyaWM6OkRpY3Rpb25hcnkm
IGRpY3Rpb25hcnkpCiB7Ci0gICAgU3RyaW5nIGtleTsKLSAgICBib29sIG9rID0gcmVhZFN0cmlu
ZyhkZWNvZGVyLCBrZXkpOwotICAgIGlmICghb2spCisgICAgYXV0byBrZXkgPSByZWFkU3RyaW5n
KGRlY29kZXIpOworICAgIGlmICgha2V5KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgVCB2
YWx1ZTsKLSAgICBvayA9IGRlY29kZXIuZGVjb2RlKHZhbHVlKTsKLSAgICBpZiAoIW9rKQorICAg
IE9wdGlvbmFsPFQ+IHZhbHVlOworICAgIGRlY29kZXIgPj4gdmFsdWU7CisgICAgaWYgKCF2YWx1
ZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGRpY3Rpb25hcnkuYWRkKGtleSwgV1RGTW92
ZSh2YWx1ZSkpOworICAgIGRpY3Rpb25hcnkuYWRkKGtleS52YWx1ZSgpLCBXVEZNb3ZlKHZhbHVl
LnZhbHVlKCkpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtOTMsMzEgKzg5LDM4IEBAIHN0
ZDo6dW5pcXVlX3B0cjxLZXllZERlY29kZXI+IEtleWVkRGVjb2QKIEtleWVkRGVjb2RlckdlbmVy
aWM6OktleWVkRGVjb2RlckdlbmVyaWMoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUp
CiB7CiAgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyKGRhdGEsIHNpemUpOwot
ICAgIEtleWVkRW5jb2RlckdlbmVyaWM6OlR5cGUgdHlwZTsKLSAgICBTdHJpbmcga2V5OwogCiAg
ICAgbV9yb290RGljdGlvbmFyeSA9IG1ha2VVbmlxdWU8RGljdGlvbmFyeT4oKTsKICAgICBtX2Rp
Y3Rpb25hcnlTdGFjay5hcHBlbmQobV9yb290RGljdGlvbmFyeS5nZXQoKSk7CiAKICAgICBib29s
IG9rID0gdHJ1ZTsKLSAgICB3aGlsZSAob2sgJiYgZGVjb2Rlci5kZWNvZGVFbnVtKHR5cGUpKSB7
Ci0gICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgIHdoaWxlIChvaykgeworICAgICAgICBPcHRp
b25hbDxLZXllZEVuY29kZXJHZW5lcmljOjpUeXBlPiB0eXBlOworICAgICAgICBkZWNvZGVyID4+
IHR5cGU7CisgICAgICAgIGlmICghdHlwZSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
IHN3aXRjaCAoKnR5cGUpIHsKICAgICAgICAgY2FzZSBLZXllZEVuY29kZXJHZW5lcmljOjpUeXBl
OjpCeXRlczogewotICAgICAgICAgICAgb2sgPSByZWFkU3RyaW5nKGRlY29kZXIsIGtleSk7Cisg
ICAgICAgICAgICBhdXRvIGtleSA9IHJlYWRTdHJpbmcoZGVjb2Rlcik7CisgICAgICAgICAgICBp
ZiAoIWtleSkKKyAgICAgICAgICAgICAgICBvayA9IGZhbHNlOwogICAgICAgICAgICAgaWYgKCFv
aykKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIHNpemVfdCBzaXplOwotICAg
ICAgICAgICAgb2sgPSBkZWNvZGVyLmRlY29kZShzaXplKTsKKyAgICAgICAgICAgIE9wdGlvbmFs
PHNpemVfdD4gc2l6ZTsKKyAgICAgICAgICAgIGRlY29kZXIgPj4gc2l6ZTsKKyAgICAgICAgICAg
IGlmICghc2l6ZSkKKyAgICAgICAgICAgICAgICBvayA9IGZhbHNlOwogICAgICAgICAgICAgaWYg
KCFvaykKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIG9rID0gZGVjb2Rlci5i
dWZmZXJJc0xhcmdlRW5vdWdoVG9Db250YWluPHVpbnQ4X3Q+KHNpemUpOworICAgICAgICAgICAg
b2sgPSBkZWNvZGVyLmJ1ZmZlcklzTGFyZ2VFbm91Z2hUb0NvbnRhaW48dWludDhfdD4oKnNpemUp
OwogICAgICAgICAgICAgaWYgKCFvaykKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIFZlY3Rvcjx1aW50OF90PiBidWZmZXIoc2l6ZSk7Ci0gICAgICAgICAgICBvayA9IGRlY29k
ZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKGJ1ZmZlci5kYXRhKCksIHNpemUpOworICAgICAgICAg
ICAgVmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZlcigqc2l6ZSk7CisgICAgICAgICAgICBvayA9IGRlY29k
ZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKGJ1ZmZlci5kYXRhKCksICpzaXplKTsKICAgICAgICAg
ICAgIGlmICghb2spCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBtX2RpY3Rp
b25hcnlTdGFjay5sYXN0KCktPmFkZChrZXksIFdURk1vdmUoYnVmZmVyKSk7CisgICAgICAgICAg
ICBtX2RpY3Rpb25hcnlTdGFjay5sYXN0KCktPmFkZCgqa2V5LCBXVEZNb3ZlKGJ1ZmZlcikpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBLZXllZEVuY29kZXJH
ZW5lcmljOjpUeXBlOjpCb29sOgpAQCAtMTQyLDI0ICsxNDUsMjkgQEAgS2V5ZWREZWNvZGVyR2Vu
ZXJpYzo6S2V5ZWREZWNvZGVyR2VuZXJpYwogICAgICAgICAgICAgb2sgPSByZWFkU2ltcGxlVmFs
dWU8ZG91YmxlPihkZWNvZGVyLCAqbV9kaWN0aW9uYXJ5U3RhY2subGFzdCgpKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBjYXNlIEtleWVkRW5jb2RlckdlbmVyaWM6OlR5cGU6OlN0cmlu
ZzogewotICAgICAgICAgICAgb2sgPSByZWFkU3RyaW5nKGRlY29kZXIsIGtleSk7CisgICAgICAg
ICAgICBhdXRvIGtleSA9IHJlYWRTdHJpbmcoZGVjb2Rlcik7CisgICAgICAgICAgICBpZiAoIWtl
eSkKKyAgICAgICAgICAgICAgICBvayA9IGZhbHNlOwogICAgICAgICAgICAgaWYgKCFvaykKICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIFN0cmluZyB2YWx1ZTsKLSAgICAgICAg
ICAgIG9rID0gcmVhZFN0cmluZyhkZWNvZGVyLCB2YWx1ZSk7CisgICAgICAgICAgICBhdXRvIHZh
bHVlID0gcmVhZFN0cmluZyhkZWNvZGVyKTsKKyAgICAgICAgICAgIGlmICghdmFsdWUpCisgICAg
ICAgICAgICAgICAgb2sgPSBmYWxzZTsKICAgICAgICAgICAgIGlmICghb2spCiAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBtX2RpY3Rpb25hcnlTdGFjay5sYXN0KCktPmFkZChr
ZXksIFdURk1vdmUodmFsdWUpKTsKKyAgICAgICAgICAgIG1fZGljdGlvbmFyeVN0YWNrLmxhc3Qo
KS0+YWRkKCprZXksIFdURk1vdmUoKnZhbHVlKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgICAgICBjYXNlIEtleWVkRW5jb2RlckdlbmVyaWM6OlR5cGU6OkJlZ2luT2JqZWN0
OiB7Ci0gICAgICAgICAgICBvayA9IHJlYWRTdHJpbmcoZGVjb2Rlciwga2V5KTsKKyAgICAgICAg
ICAgIGF1dG8ga2V5ID0gcmVhZFN0cmluZyhkZWNvZGVyKTsKKyAgICAgICAgICAgIGlmICgha2V5
KQorICAgICAgICAgICAgICAgIG9rID0gZmFsc2U7CiAgICAgICAgICAgICBpZiAoIW9rKQogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgYXV0byogY3VycmVudERpY3RpbmFyeSA9
IG1fZGljdGlvbmFyeVN0YWNrLmxhc3QoKTsKICAgICAgICAgICAgIGF1dG8gbmV3RGljdGlvbmFy
eSA9IG1ha2VVbmlxdWU8RGljdGlvbmFyeT4oKTsKICAgICAgICAgICAgIG1fZGljdGlvbmFyeVN0
YWNrLmFwcGVuZChuZXdEaWN0aW9uYXJ5LmdldCgpKTsKLSAgICAgICAgICAgIGN1cnJlbnREaWN0
aW5hcnktPmFkZChrZXksIFdURk1vdmUobmV3RGljdGlvbmFyeSkpOworICAgICAgICAgICAgY3Vy
cmVudERpY3RpbmFyeS0+KmFkZCgqa2V5LCBXVEZNb3ZlKG5ld0RpY3Rpb25hcnkpKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgS2V5ZWRFbmNvZGVyR2VuZXJp
Yzo6VHlwZTo6RW5kT2JqZWN0OgpAQCAtMTY4LDEyICsxNzYsMTQgQEAgS2V5ZWREZWNvZGVyR2Vu
ZXJpYzo6S2V5ZWREZWNvZGVyR2VuZXJpYwogICAgICAgICAgICAgICAgIG9rID0gZmFsc2U7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBLZXllZEVuY29kZXJHZW5lcmljOjpUeXBl
OjpCZWdpbkFycmF5OiB7Ci0gICAgICAgICAgICBvayA9IHJlYWRTdHJpbmcoZGVjb2Rlciwga2V5
KTsKKyAgICAgICAgICAgIGF1dG8ga2V5ID0gcmVhZFN0cmluZyhkZWNvZGVyKTsKKyAgICAgICAg
ICAgIGlmICgha2V5KQorICAgICAgICAgICAgICAgIG9rID0gZmFsc2U7CiAgICAgICAgICAgICBp
ZiAoIW9rKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgYXV0byBuZXdBcnJh
eSA9IG1ha2VVbmlxdWU8QXJyYXk+KCk7CiAgICAgICAgICAgICBtX2FycmF5U3RhY2suYXBwZW5k
KG5ld0FycmF5LmdldCgpKTsKLSAgICAgICAgICAgIG1fZGljdGlvbmFyeVN0YWNrLmxhc3QoKS0+
YWRkKGtleSwgV1RGTW92ZShuZXdBcnJheSkpOworICAgICAgICAgICAgbV9kaWN0aW9uYXJ5U3Rh
Y2subGFzdCgpLT5hZGQoKmtleSwgV1RGTW92ZShuZXdBcnJheSkpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBLZXllZEVuY29kZXJHZW5lcmljOjpUeXBlOjpC
ZWdpbkFycmF5RWxlbWVudDogewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9OZXR3b3JrTG9hZE1ldHJpY3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL05ldHdvcmtMb2FkTWV0cmljcy5oCShyZXZpc2lvbiAyNTk4OTgpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL05ldHdvcmtMb2FkTWV0cmljcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMCw4ICszMCw3IEBACiAjaW5jbHVkZSA8d3RmL0JveC5oPgogI2luY2x1
ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi9TZWNvbmRzLmg+Ci0jaW5jbHVkZSA8
d3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnREZWNvZGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3BlcnNp
c3RlbmNlL1BlcnNpc3RlbnRFbmNvZGVyLmg+CisjaW5jbHVkZSA8d3RmL3BlcnNpc3RlbmNlL1Bl
cnNpc3RlbnRDb2Rlci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiAjaWYg
UExBVEZPUk0oQ09DT0EpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jl
c291cmNlTG9hZFByaW9yaXR5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9SZXNvdXJjZUxvYWRQcmlvcml0eS5oCShyZXZpc2lvbiAyNTk4OTgpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlTG9hZFByaW9yaXR5LmgJKHdv
cmtpbmcgY29weSkKQEAgLTIzLDggKzIzLDcgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KICAqLwogCi0jaWZuZGVmIFJlc291cmNlTG9hZFByaW9yaXR5X2gKLSNkZWZpbmUg
UmVzb3VyY2VMb2FkUHJpb3JpdHlfaAorI3ByYWdtYSBvbmNlCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIApAQCAtNTQsNyArNTMsMTkgQEAgaW5saW5lIFJlc291cmNlTG9hZFByaW9yaXR5JiBvcGVy
YXRvci0tKAogICAgIHJldHVybiBwcmlvcml0eSA9IHN0YXRpY19jYXN0PFJlc291cmNlTG9hZFBy
aW9yaXR5PihzdGF0aWNfY2FzdDxpbnQ+KHByaW9yaXR5KSAtIDEpOwogfQogCi19Cit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKK25hbWVzcGFjZSBXVEYgewogCi0jZW5kaWYKK3RlbXBsYXRlPD4g
c3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6UmVzb3VyY2VMb2FkUHJpb3JpdHk+IHsKKyAgICB1
c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAorICAgICAgICBXZWJDb3JlOjpSZXNvdXJjZUxvYWRQ
cmlvcml0eSwKKyAgICAgICAgV2ViQ29yZTo6UmVzb3VyY2VMb2FkUHJpb3JpdHk6OlZlcnlMb3cs
CisgICAgICAgIFdlYkNvcmU6OlJlc291cmNlTG9hZFByaW9yaXR5OjpMb3csCisgICAgICAgIFdl
YkNvcmU6OlJlc291cmNlTG9hZFByaW9yaXR5OjpNZWRpdW0sCisgICAgICAgIFdlYkNvcmU6OlJl
c291cmNlTG9hZFByaW9yaXR5OjpIaWdoLAorICAgICAgICBXZWJDb3JlOjpSZXNvdXJjZUxvYWRQ
cmlvcml0eTo6VmVyeUhpZ2gKKyAgICA+OworfTsKIAorfSAvLyBuYW1lc3BhY2UgV1RGCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVx
dWVzdEJhc2UuaAkocmV2aXNpb24gMjU5ODk4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDE0ICsy
NSwxNCBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIFJlc291cmNlUmVxdWVzdEJh
c2VfaAotI2RlZmluZSBSZXNvdXJjZVJlcXVlc3RCYXNlX2gKKyNwcmFnbWEgb25jZQogCiAjaW5j
bHVkZSAiRm9ybURhdGEuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlclR5cGVzLmgiCiAjaW5jbHVk
ZSAiSFRUUEhlYWRlck1hcC5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJSZXNv
dXJjZUxvYWRQcmlvcml0eS5oIgorI2luY2x1ZGUgPHd0Zi9FbnVtVHJhaXRzLmg+CiAjaW5jbHVk
ZSA8d3RmL1VSTC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0yODMsNjQgKzI4Myw4OCBA
QCBBTFdBWVNfSU5MSU5FIHZvaWQgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6CiAgICAgZW5jb2RlciA8
PCBtX2h0dHBNZXRob2Q7CiAgICAgZW5jb2RlciA8PCBtX2h0dHBIZWFkZXJGaWVsZHM7CiAgICAg
ZW5jb2RlciA8PCBtX3Jlc3BvbnNlQ29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFja0Fy
cmF5OwotICAgIGVuY29kZXIuZW5jb2RlRW51bShtX2NhY2hlUG9saWN5KTsKKyAgICBlbmNvZGVy
IDw8IG1fY2FjaGVQb2xpY3k7CiAgICAgZW5jb2RlciA8PCBtX2FsbG93Q29va2llczsKLSAgICBl
bmNvZGVyLmVuY29kZUVudW0obV9zYW1lU2l0ZURpc3Bvc2l0aW9uKTsKKyAgICBlbmNvZGVyIDw8
IG1fc2FtZVNpdGVEaXNwb3NpdGlvbjsKICAgICBlbmNvZGVyIDw8IG1faXNUb3BTaXRlOwotICAg
IGVuY29kZXIuZW5jb2RlRW51bShtX3ByaW9yaXR5KTsKLSAgICBlbmNvZGVyLmVuY29kZUVudW0o
bV9yZXF1ZXN0ZXIpOworICAgIGVuY29kZXIgPDwgbV9wcmlvcml0eTsKKyAgICBlbmNvZGVyIDw8
IG1fcmVxdWVzdGVyOwogfQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgogQUxXQVlTX0lOTElO
RSBib29sIFJlc291cmNlUmVxdWVzdEJhc2U6OmRlY29kZUJhc2UoRGVjb2RlciYgZGVjb2RlcikK
IHsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKG1fdXJsKSkKKyAgICBPcHRpb25hbDxVUkw+IHVy
bDsKKyAgICBkZWNvZGVyID4+IHVybDsKKyAgICBpZiAoIXVybCkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShtX3RpbWVvdXRJbnRlcnZhbCkpCisgICAg
bV91cmwgPSBXVEZNb3ZlKCp1cmwpOworICAgIAorICAgIE9wdGlvbmFsPGRvdWJsZT4gdGltZW91
dEludGVydmFsOworICAgIGRlY29kZXIgPj4gdGltZW91dEludGVydmFsOworICAgIGlmICghdGlt
ZW91dEludGVydmFsKQogICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgbV90aW1lb3V0SW50ZXJ2
YWwgPSBXVEZNb3ZlKCp0aW1lb3V0SW50ZXJ2YWwpOwogCi0gICAgU3RyaW5nIGZpcnN0UGFydHlG
b3JDb29raWVzOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoZmlyc3RQYXJ0eUZvckNvb2tpZXMp
KQorICAgIE9wdGlvbmFsPFN0cmluZz4gZmlyc3RQYXJ0eUZvckNvb2tpZXM7CisgICAgZGVjb2Rl
ciA+PiBmaXJzdFBhcnR5Rm9yQ29va2llczsKKyAgICBpZiAoIWZpcnN0UGFydHlGb3JDb29raWVz
KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9maXJzdFBhcnR5Rm9yQ29va2llcyA9IFVS
TCh7IH0sIGZpcnN0UGFydHlGb3JDb29raWVzKTsKKyAgICBtX2ZpcnN0UGFydHlGb3JDb29raWVz
ID0gVVJMKHsgfSwgKmZpcnN0UGFydHlGb3JDb29raWVzKTsKIAotICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUobV9odHRwTWV0aG9kKSkKKyAgICBPcHRpb25hbDxTdHJpbmc+IGh0dHBNZXRob2Q7Cisg
ICAgZGVjb2RlciA+PiBodHRwTWV0aG9kOworICAgIGlmICghaHR0cE1ldGhvZCkKICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIG1faHR0cE1ldGhvZCA9IFdURk1vdmUoKmh0dHBNZXRob2QpOwog
Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShtX2h0dHBIZWFkZXJGaWVsZHMpKQorICAgIE9wdGlv
bmFsPEhUVFBIZWFkZXJNYXA+IGZpZWxkczsKKyAgICBkZWNvZGVyID4+IGZpZWxkczsKKyAgICBp
ZiAoIWZpZWxkcykKICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIG1faHR0cEhlYWRlckZpZWxk
cyA9IFdURk1vdmUoKmZpZWxkcyk7CiAKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKG1fcmVzcG9u
c2VDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJyYXkpKQorICAgIE9wdGlvbmFs
PFZlY3RvcjxTdHJpbmc+PiBhcnJheTsKKyAgICBkZWNvZGVyID4+IGFycmF5OworICAgIGlmICgh
YXJyYXkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBtX3Jlc3BvbnNlQ29udGVudERpc3Bv
c2l0aW9uRW5jb2RpbmdGYWxsYmFja0FycmF5ID0gV1RGTW92ZSgqYXJyYXkpOwogCi0gICAgUmVz
b3VyY2VSZXF1ZXN0Q2FjaGVQb2xpY3kgY2FjaGVQb2xpY3k7Ci0gICAgaWYgKCFkZWNvZGVyLmRl
Y29kZUVudW0oY2FjaGVQb2xpY3kpKQorICAgIE9wdGlvbmFsPFJlc291cmNlUmVxdWVzdENhY2hl
UG9saWN5PiBjYWNoZVBvbGljeTsKKyAgICBkZWNvZGVyID4+IGNhY2hlUG9saWN5OworICAgIGlm
ICghY2FjaGVQb2xpY3kpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX2NhY2hlUG9saWN5
ID0gY2FjaGVQb2xpY3k7CisgICAgbV9jYWNoZVBvbGljeSA9ICpjYWNoZVBvbGljeTsKIAotICAg
IGJvb2wgYWxsb3dDb29raWVzOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoYWxsb3dDb29raWVz
KSkKKyAgICBPcHRpb25hbDxib29sPiBhbGxvd0Nvb2tpZXM7CisgICAgZGVjb2RlciA+PiBhbGxv
d0Nvb2tpZXM7CisgICAgaWYgKCFhbGxvd0Nvb2tpZXMpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBtX2FsbG93Q29va2llcyA9IGFsbG93Q29va2llczsKKyAgICBtX2FsbG93Q29va2llcyA9
ICphbGxvd0Nvb2tpZXM7CiAKLSAgICBTYW1lU2l0ZURpc3Bvc2l0aW9uIHNhbWVTaXRlRGlzcG9z
aXRpb247Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZUVudW0oc2FtZVNpdGVEaXNwb3NpdGlvbikp
CisgICAgT3B0aW9uYWw8U2FtZVNpdGVEaXNwb3NpdGlvbj4gc2FtZVNpdGVEaXNwb3NpdGlvbjsK
KyAgICBkZWNvZGVyID4+IHNhbWVTaXRlRGlzcG9zaXRpb247CisgICAgaWYgKCFzYW1lU2l0ZURp
c3Bvc2l0aW9uKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9zYW1lU2l0ZURpc3Bvc2l0
aW9uID0gc2FtZVNpdGVEaXNwb3NpdGlvbjsKKyAgICBtX3NhbWVTaXRlRGlzcG9zaXRpb24gPSAq
c2FtZVNpdGVEaXNwb3NpdGlvbjsKIAotICAgIGJvb2wgaXNUb3BTaXRlOwotICAgIGlmICghZGVj
b2Rlci5kZWNvZGUoaXNUb3BTaXRlKSkKKyAgICBPcHRpb25hbDxib29sPiBpc1RvcFNpdGU7Cisg
ICAgZGVjb2RlciA+PiBpc1RvcFNpdGU7CisgICAgaWYgKCFpc1RvcFNpdGUpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBtX2lzVG9wU2l0ZSA9IGlzVG9wU2l0ZTsKKyAgICBtX2lzVG9wU2l0
ZSA9ICppc1RvcFNpdGU7CiAKLSAgICBSZXNvdXJjZUxvYWRQcmlvcml0eSBwcmlvcml0eTsKLSAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlRW51bShwcmlvcml0eSkpCisgICAgT3B0aW9uYWw8UmVzb3Vy
Y2VMb2FkUHJpb3JpdHk+IHByaW9yaXR5OworICAgIGRlY29kZXIgPj4gcHJpb3JpdHk7CisgICAg
aWYgKCFwcmlvcml0eSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fcHJpb3JpdHkgPSBw
cmlvcml0eTsKKyAgICBtX3ByaW9yaXR5ID0gKnByaW9yaXR5OwogCi0gICAgaWYgKCFkZWNvZGVy
LmRlY29kZUVudW0obV9yZXF1ZXN0ZXIpKQorICAgIE9wdGlvbmFsPFJlcXVlc3Rlcj4gcmVxdWVz
dGVyOworICAgIGRlY29kZXIgPj4gcmVxdWVzdGVyOworICAgIGlmICghcmVxdWVzdGVyKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgbV9yZXF1ZXN0ZXIgPSAqcmVxdWVzdGVyOwogCiAgICAg
cmV0dXJuIHRydWU7CiB9CkBAIC0zNjEsNCArMzg1LDM5IEBAIGJvb2wgUmVzb3VyY2VSZXF1ZXN0
QmFzZTo6ZGVjb2RlV2l0aG91dFAKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYg
Ly8gUmVzb3VyY2VSZXF1ZXN0QmFzZV9oCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8PiBz
dHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RDYWNoZVBvbGljeT4gewor
ICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8CisgICAgICAgIFdlYkNvcmU6OlJlc291cmNl
UmVxdWVzdENhY2hlUG9saWN5LAorICAgICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RDYWNo
ZVBvbGljeTo6VXNlUHJvdG9jb2xDYWNoZVBvbGljeSwKKyAgICAgICAgV2ViQ29yZTo6UmVzb3Vy
Y2VSZXF1ZXN0Q2FjaGVQb2xpY3k6OlJlbG9hZElnbm9yaW5nQ2FjaGVEYXRhLAorICAgICAgICBX
ZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RDYWNoZVBvbGljeTo6UmV0dXJuQ2FjaGVEYXRhRWxzZUxv
YWQsCisgICAgICAgIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdENhY2hlUG9saWN5OjpSZXR1cm5D
YWNoZURhdGFEb250TG9hZCwKKyAgICAgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Q2FjaGVQ
b2xpY3k6OkRvTm90VXNlQW55Q2FjaGUsCisgICAgICAgIFdlYkNvcmU6OlJlc291cmNlUmVxdWVz
dENhY2hlUG9saWN5OjpSZWZyZXNoQW55Q2FjaGVEYXRhCisgICAgPjsKK307CisKK3RlbXBsYXRl
PD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0QmFzZTo6U2FtZVNp
dGVEaXNwb3NpdGlvbj4geworICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8CisgICAgICAg
IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdEJhc2U6OlNhbWVTaXRlRGlzcG9zaXRpb24sCisgICAg
ICAgIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdEJhc2U6OlNhbWVTaXRlRGlzcG9zaXRpb246OlVu
c3BlY2lmaWVkLAorICAgICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RCYXNlOjpTYW1lU2l0
ZURpc3Bvc2l0aW9uOjpTYW1lU2l0ZSwKKyAgICAgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0
QmFzZTo6U2FtZVNpdGVEaXNwb3NpdGlvbjo6Q3Jvc3NTaXRlCisgICAgPjsKK307CisKK3RlbXBs
YXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0QmFzZTo6UmVx
dWVzdGVyPiB7CisgICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKKyAgICAgICAgV2ViQ29y
ZTo6UmVzb3VyY2VSZXF1ZXN0QmFzZTo6UmVxdWVzdGVyLAorICAgICAgICBXZWJDb3JlOjpSZXNv
dXJjZVJlcXVlc3RCYXNlOjpSZXF1ZXN0ZXI6OlVuc3BlY2lmaWVkLAorICAgICAgICBXZWJDb3Jl
OjpSZXNvdXJjZVJlcXVlc3RCYXNlOjpSZXF1ZXN0ZXI6Ok1haW4sCisgICAgICAgIFdlYkNvcmU6
OlJlc291cmNlUmVxdWVzdEJhc2U6OlJlcXVlc3Rlcjo6WEhSLAorICAgICAgICBXZWJDb3JlOjpS
ZXNvdXJjZVJlcXVlc3RCYXNlOjpSZXF1ZXN0ZXI6OkZldGNoLAorICAgICAgICBXZWJDb3JlOjpS
ZXNvdXJjZVJlcXVlc3RCYXNlOjpSZXF1ZXN0ZXI6Ok1lZGlhLAorICAgICAgICBXZWJDb3JlOjpS
ZXNvdXJjZVJlcXVlc3RCYXNlOjpSZXF1ZXN0ZXI6OkltcG9ydFNjcmlwdHMKKyAgICA+OworfTsK
KworfSAvLyBuYW1lc3BhY2UgV1RGCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL1Jlc291cmNlUmVzcG9uc2VCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlc3BvbnNlQmFzZS5oCShyZXZpc2lvbiAyNTk4OTgp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVzcG9uc2VCYXNl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5Nyw5ICsyOTcsOSBAQCB2b2lkIFJlc291cmNlUmVzcG9u
c2VCYXNlOjplbmNvZGUoRW5jb2RlCiAKICAgICBlbmNvZGVyIDw8IG1faHR0cFN0YXR1c0NvZGU7
CiAgICAgZW5jb2RlciA8PCBtX2NlcnRpZmljYXRlSW5mbzsKLSAgICBlbmNvZGVyLmVuY29kZUVu
dW0obV9zb3VyY2UpOwotICAgIGVuY29kZXIuZW5jb2RlRW51bShtX3R5cGUpOwotICAgIGVuY29k
ZXIuZW5jb2RlRW51bShtX3RhaW50aW5nKTsKKyAgICBlbmNvZGVyIDw8IG1fc291cmNlOworICAg
IGVuY29kZXIgPDwgbV90eXBlOworICAgIGVuY29kZXIgPDwgbV90YWludGluZzsKICAgICBlbmNv
ZGVyIDw8IG1faXNSZWRpcmVjdGVkOwogICAgIFVzZWRMZWdhY3lUTFMgdXNlZExlZ2FjeVRMUyA9
IG1fdXNlZExlZ2FjeVRMUzsKICAgICBlbmNvZGVyIDw8IHVzZWRMZWdhY3lUTFM7CkBAIC0zMDcs
NjggKzMwNywxNjEgQEAgdm9pZCBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6ZW5jb2RlKEVuY29kZQog
fQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotYm9vbCBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6
ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFJlc291cmNlUmVzcG9uc2VCYXNlJiByZXNwb25zZSkK
K2Jvb2wgV0FSTl9VTlVTRURfUkVUVVJOIFJlc291cmNlUmVzcG9uc2VCYXNlOjpkZWNvZGUoRGVj
b2RlciYgZGVjb2RlciwgUmVzb3VyY2VSZXNwb25zZUJhc2UmIHJlc3BvbnNlKQogewogICAgIEFT
U0VSVChyZXNwb25zZS5tX2lzTnVsbCk7Ci0gICAgYm9vbCByZXNwb25zZUlzTnVsbDsKLSAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKHJlc3BvbnNlSXNOdWxsKSkKKyAgICBPcHRpb25hbDxib29sPiBy
ZXNwb25zZUlzTnVsbDsKKyAgICBkZWNvZGVyID4+IHJlc3BvbnNlSXNOdWxsOworICAgIGlmICgh
cmVzcG9uc2VJc051bGwpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAocmVzcG9uc2VJ
c051bGwpCisgICAgaWYgKCpyZXNwb25zZUlzTnVsbCkKICAgICAgICAgcmV0dXJuIHRydWU7CiAK
ICAgICByZXNwb25zZS5tX2lzTnVsbCA9IGZhbHNlOwogCi0gICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShyZXNwb25zZS5tX3VybCkpCisgICAgT3B0aW9uYWw8VVJMPiB1cmw7CisgICAgZGVjb2RlciA+
PiB1cmw7CisgICAgaWYgKCF1cmwpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKHJlc3BvbnNlLm1fbWltZVR5cGUpKQorICAgIHJlc3BvbnNlLm1fdXJsID0g
V1RGTW92ZSgqdXJsKTsKKworICAgIE9wdGlvbmFsPFN0cmluZz4gbWltZVR5cGU7CisgICAgZGVj
b2RlciA+PiBtaW1lVHlwZTsKKyAgICBpZiAoIW1pbWVUeXBlKQogICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgaW50NjRfdCBleHBlY3RlZENvbnRlbnRMZW5ndGg7Ci0gICAgaWYgKCFkZWNvZGVy
LmRlY29kZShleHBlY3RlZENvbnRlbnRMZW5ndGgpKQorICAgIHJlc3BvbnNlLm1fbWltZVR5cGUg
PSBXVEZNb3ZlKCptaW1lVHlwZSk7CisKKyAgICBPcHRpb25hbDxpbnQ2NF90PiBleHBlY3RlZENv
bnRlbnRMZW5ndGg7CisgICAgZGVjb2RlciA+PiBleHBlY3RlZENvbnRlbnRMZW5ndGg7CisgICAg
aWYgKCFleHBlY3RlZENvbnRlbnRMZW5ndGgpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBy
ZXNwb25zZS5tX2V4cGVjdGVkQ29udGVudExlbmd0aCA9IGV4cGVjdGVkQ29udGVudExlbmd0aDsK
LSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3BvbnNlLm1fdGV4dEVuY29kaW5nTmFtZSkpCisg
ICAgcmVzcG9uc2UubV9leHBlY3RlZENvbnRlbnRMZW5ndGggPSAqZXhwZWN0ZWRDb250ZW50TGVu
Z3RoOworCisgICAgT3B0aW9uYWw8QXRvbVN0cmluZz4gdGV4dEVuY29kaW5nTmFtZTsKKyAgICBk
ZWNvZGVyID4+IHRleHRFbmNvZGluZ05hbWU7CisgICAgaWYgKCF0ZXh0RW5jb2RpbmdOYW1lKQog
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXNwb25zZS5t
X2h0dHBTdGF0dXNUZXh0KSkKKyAgICByZXNwb25zZS5tX3RleHRFbmNvZGluZ05hbWUgPSBXVEZN
b3ZlKCp0ZXh0RW5jb2RpbmdOYW1lKTsKKworICAgIE9wdGlvbmFsPEF0b21TdHJpbmc+IGh0dHBT
dGF0dXNUZXh0OworICAgIGRlY29kZXIgPj4gaHR0cFN0YXR1c1RleHQ7CisgICAgaWYgKCFodHRw
U3RhdHVzVGV4dCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghZGVjb2Rlci5kZWNv
ZGUocmVzcG9uc2UubV9odHRwVmVyc2lvbikpCisgICAgcmVzcG9uc2UubV9odHRwU3RhdHVzVGV4
dCA9IFdURk1vdmUoKmh0dHBTdGF0dXNUZXh0KTsKKworICAgIE9wdGlvbmFsPEF0b21TdHJpbmc+
IGh0dHBWZXJzaW9uOworICAgIGRlY29kZXIgPj4gaHR0cFZlcnNpb247CisgICAgaWYgKCFodHRw
VmVyc2lvbikKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUo
cmVzcG9uc2UubV9odHRwSGVhZGVyRmllbGRzKSkKKyAgICByZXNwb25zZS5tX2h0dHBWZXJzaW9u
ID0gV1RGTW92ZSgqaHR0cFZlcnNpb24pOworCisgICAgT3B0aW9uYWw8SFRUUEhlYWRlck1hcD4g
aHR0cEhlYWRlckZpZWxkczsKKyAgICBkZWNvZGVyID4+IGh0dHBIZWFkZXJGaWVsZHM7CisgICAg
aWYgKCFodHRwSGVhZGVyRmllbGRzKQogICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmVzcG9u
c2UubV9odHRwSGVhZGVyRmllbGRzID0gV1RGTW92ZSgqaHR0cEhlYWRlckZpZWxkcyk7CisKICAg
ICAvLyBUaGUgbmV0d29ya0xvYWRNZXRyaWNzIGluZm8gaXMgb25seSBzZW5kIG92ZXIgSVBDIGFu
ZCBub3Qgc3RvcmVkIGluIGRpc2sgY2FjaGUuCiAgICAgaWYgY29uc3RleHByIChEZWNvZGVyOjpp
c0lQQ0RlY29kZXIpIHsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXNwb25zZS5tX25l
dHdvcmtMb2FkTWV0cmljcykpCisgICAgICAgIE9wdGlvbmFsPEJveDxOZXR3b3JrTG9hZE1ldHJp
Y3M+PiBuZXR3b3JrTG9hZE1ldHJpY3M7CisgICAgICAgIGRlY29kZXIgPj4gbmV0d29ya0xvYWRN
ZXRyaWNzOworICAgICAgICBpZiAoIW5ldHdvcmtMb2FkTWV0cmljcykKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgcmVzcG9uc2UubV9uZXR3b3JrTG9hZE1ldHJpY3MgPSBXVEZN
b3ZlKCpuZXR3b3JrTG9hZE1ldHJpY3MpOwogICAgIH0KLSAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KHJlc3BvbnNlLm1faHR0cFN0YXR1c0NvZGUpKQorCisgICAgT3B0aW9uYWw8c2hvcnQ+IGh0dHBT
dGF0dXNDb2RlOworICAgIGRlY29kZXIgPj4gaHR0cFN0YXR1c0NvZGU7CisgICAgaWYgKCFodHRw
U3RhdHVzQ29kZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghZGVjb2Rlci5kZWNv
ZGUocmVzcG9uc2UubV9jZXJ0aWZpY2F0ZUluZm8pKQorICAgIHJlc3BvbnNlLm1faHR0cFN0YXR1
c0NvZGUgPSBXVEZNb3ZlKCpodHRwU3RhdHVzQ29kZSk7CisKKyAgICBPcHRpb25hbDxPcHRpb25h
bDxDZXJ0aWZpY2F0ZUluZm8+PiBjZXJ0aWZpY2F0ZUluZm87CisgICAgZGVjb2RlciA+PiBjZXJ0
aWZpY2F0ZUluZm87CisgICAgaWYgKCFjZXJ0aWZpY2F0ZUluZm8pCiAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBTb3VyY2Ugc291cmNlID0gU291cmNlOjpVbmtub3duOwotICAgIGlmICghZGVj
b2Rlci5kZWNvZGVFbnVtKHNvdXJjZSkpCisgICAgcmVzcG9uc2UubV9jZXJ0aWZpY2F0ZUluZm8g
PSBXVEZNb3ZlKCpjZXJ0aWZpY2F0ZUluZm8pOworCisgICAgT3B0aW9uYWw8U291cmNlPiBzb3Vy
Y2U7CisgICAgZGVjb2RlciA+PiBzb3VyY2U7CisgICAgaWYgKCFzb3VyY2UpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICByZXNwb25zZS5tX3NvdXJjZSA9IHNvdXJjZTsKLSAgICBUeXBlIHR5
cGUgPSBUeXBlOjpEZWZhdWx0OwotICAgIGlmICghZGVjb2Rlci5kZWNvZGVFbnVtKHR5cGUpKQor
ICAgIHJlc3BvbnNlLm1fc291cmNlID0gV1RGTW92ZSgqc291cmNlKTsKKworICAgIE9wdGlvbmFs
PFR5cGU+IHR5cGU7CisgICAgZGVjb2RlciA+PiB0eXBlOworICAgIGlmICghdHlwZSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIHJlc3BvbnNlLm1fdHlwZSA9IHR5cGU7Ci0gICAgVGFpbnRp
bmcgdGFpbnRpbmcgPSBUYWludGluZzo6QmFzaWM7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZUVu
dW0odGFpbnRpbmcpKQorICAgIHJlc3BvbnNlLm1fdHlwZSA9IFdURk1vdmUoKnR5cGUpOworCisg
ICAgT3B0aW9uYWw8VGFpbnRpbmc+IHRhaW50aW5nOworICAgIGRlY29kZXIgPj4gdGFpbnRpbmc7
CisgICAgaWYgKCF0YWludGluZykKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJlc3BvbnNl
Lm1fdGFpbnRpbmcgPSB0YWludGluZzsKLSAgICBib29sIGlzUmVkaXJlY3RlZCA9IGZhbHNlOwot
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaXNSZWRpcmVjdGVkKSkKKyAgICByZXNwb25zZS5tX3Rh
aW50aW5nID0gV1RGTW92ZSgqdGFpbnRpbmcpOworCisgICAgT3B0aW9uYWw8Ym9vbD4gaXNSZWRp
cmVjdGVkOworICAgIGRlY29kZXIgPj4gaXNSZWRpcmVjdGVkOworICAgIGlmICghaXNSZWRpcmVj
dGVkKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmVzcG9uc2UubV9pc1JlZGlyZWN0ZWQg
PSBpc1JlZGlyZWN0ZWQ7Ci0gICAgVXNlZExlZ2FjeVRMUyB1c2VkTGVnYWN5VExTID0gVXNlZExl
Z2FjeVRMUzo6Tm87Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZSh1c2VkTGVnYWN5VExTKSkKKyAg
ICByZXNwb25zZS5tX2lzUmVkaXJlY3RlZCA9IFdURk1vdmUoKmlzUmVkaXJlY3RlZCk7CisKKyAg
ICBPcHRpb25hbDxVc2VkTGVnYWN5VExTPiB1c2VkTGVnYWN5VExTOworICAgIGRlY29kZXIgPj4g
dXNlZExlZ2FjeVRMUzsKKyAgICBpZiAoIXVzZWRMZWdhY3lUTFMpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICByZXNwb25zZS5tX3VzZWRMZWdhY3lUTFMgPSB1c2VkTGVnYWN5VExTOwotICAg
IGJvb2wgaXNSYW5nZVJlcXVlc3RlZCA9IGZhbHNlOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUo
aXNSYW5nZVJlcXVlc3RlZCkpCisgICAgcmVzcG9uc2UubV91c2VkTGVnYWN5VExTID0gV1RGTW92
ZSgqdXNlZExlZ2FjeVRMUyk7CisKKyAgICBPcHRpb25hbDxib29sPiBpc1JhbmdlUmVxdWVzdGVk
OworICAgIGRlY29kZXIgPj4gaXNSYW5nZVJlcXVlc3RlZDsKKyAgICBpZiAoIWlzUmFuZ2VSZXF1
ZXN0ZWQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXNwb25zZS5tX2lzUmFuZ2VSZXF1
ZXN0ZWQgPSBpc1JhbmdlUmVxdWVzdGVkOworICAgIHJlc3BvbnNlLm1faXNSYW5nZVJlcXVlc3Rl
ZCA9IFdURk1vdmUoKmlzUmFuZ2VSZXF1ZXN0ZWQpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPD4g
c3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZUJhc2U6OlR5cGU+IHsK
KyAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAorICAgICAgICBXZWJDb3JlOjpSZXNvdXJj
ZVJlc3BvbnNlQmFzZTo6VHlwZSwKKyAgICAgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZUJh
c2U6OlR5cGU6OkJhc2ljLAorICAgICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlQmFzZTo6
VHlwZTo6Q29ycywKKyAgICAgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZUJhc2U6OlR5cGU6
OkRlZmF1bHQsCisgICAgICAgIFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2VCYXNlOjpUeXBlOjpF
cnJvciwKKyAgICAgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZUJhc2U6OlR5cGU6Ok9wYXF1
ZSwKKyAgICAgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZUJhc2U6OlR5cGU6Ok9wYXF1ZXJl
ZGlyZWN0CisgICAgPjsKK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29y
ZTo6UmVzb3VyY2VSZXNwb25zZUJhc2U6OlRhaW50aW5nPiB7CisgICAgdXNpbmcgdmFsdWVzID0g
RW51bVZhbHVlczwKKyAgICAgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZUJhc2U6OlRhaW50
aW5nLAorICAgICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlQmFzZTo6VGFpbnRpbmc6OkJh
c2ljLAorICAgICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlQmFzZTo6VGFpbnRpbmc6OkNv
cnMsCisgICAgICAgIFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2VCYXNlOjpUYWludGluZzo6T3Bh
cXVlLAorICAgICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlQmFzZTo6VGFpbnRpbmc6Ok9w
YXF1ZXJlZGlyZWN0CisgICAgPjsKK307CisKKwordGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0
czxXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlQmFzZTo6U291cmNlPiB7CisgICAgdXNpbmcgdmFs
dWVzID0gRW51bVZhbHVlczwKKyAgICAgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZUJhc2U6
OlNvdXJjZSwKKyAgICAgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZUJhc2U6OlNvdXJjZTo6
VW5rbm93biwKKyAgICAgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZUJhc2U6OlNvdXJjZTo6
TmV0d29yaywKKyAgICAgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZUJhc2U6OlNvdXJjZTo6
RGlza0NhY2hlLAorICAgICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlQmFzZTo6U291cmNl
OjpEaXNrQ2FjaGVBZnRlclZhbGlkYXRpb24sCisgICAgICAgIFdlYkNvcmU6OlJlc291cmNlUmVz
cG9uc2VCYXNlOjpTb3VyY2U6Ok1lbW9yeUNhY2hlLAorICAgICAgICBXZWJDb3JlOjpSZXNvdXJj
ZVJlc3BvbnNlQmFzZTo6U291cmNlOjpNZW1vcnlDYWNoZUFmdGVyVmFsaWRhdGlvbiwKKyAgICAg
ICAgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZUJhc2U6OlNvdXJjZTo6U2VydmljZVdvcmtlciwK
KyAgICAgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZUJhc2U6OlNvdXJjZTo6QXBwbGljYXRp
b25DYWNoZSwKKyAgICAgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZUJhc2U6OlNvdXJjZTo6
RE9NQ2FjaGUsCisgICAgICAgIFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2VCYXNlOjpTb3VyY2U6
Okluc3BlY3Rvck92ZXJyaWRlCisgICAgPjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9DZXJ0aWZpY2F0ZUluZm8uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0NlcnRpZmlj
YXRlSW5mby5oCShyZXZpc2lvbiAyNTk4OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2NmL0NlcnRpZmljYXRlSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxMiArMjYs
MTEgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQ2VydGlmaWNhdGVJbmZvQmFzZS5oIgor
I2luY2x1ZGUgPHd0Zi9FbnVtVHJhaXRzLmg+CiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgog
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvY2YvVHlwZUNhc3RzQ0YuaD4K
LSNpbmNsdWRlIDx3dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudENvZGVycy5oPgotI2luY2x1ZGUg
PHd0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RGVjb2Rlci5oPgotI2luY2x1ZGUgPHd0Zi9wZXJz
aXN0ZW5jZS9QZXJzaXN0ZW50RW5jb2Rlci5oPgorI2luY2x1ZGUgPHd0Zi9wZXJzaXN0ZW5jZS9Q
ZXJzaXN0ZW50Q29kZXIuaD4KIAogI2lmIFBMQVRGT1JNKENPQ09BKQogI2luY2x1ZGUgPFNlY3Vy
aXR5L1NlY0NlcnRpZmljYXRlLmg+CkBAIC05OCwxNjMgKzk3LDI1IEBAIHByaXZhdGU6CiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCiAKIG5hbWVzcGFjZSBXVEYgewotbmFtZXNwYWNlIFBlcnNpc3Rl
bmNlIHsKLQotc3RhdGljIHZvaWQgZW5jb2RlQ0ZEYXRhKEVuY29kZXImIGVuY29kZXIsIENGRGF0
YVJlZiBkYXRhKQotewotICAgIHVpbnQ2NF90IGxlbmd0aCA9IENGRGF0YUdldExlbmd0aChkYXRh
KTsKLSAgICBjb25zdCB1aW50OF90KiBieXRlUHRyID0gQ0ZEYXRhR2V0Qnl0ZVB0cihkYXRhKTsK
LQotICAgIGVuY29kZXIgPDwgbGVuZ3RoOwotICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhE
YXRhKGJ5dGVQdHIsIHN0YXRpY19jYXN0PHNpemVfdD4obGVuZ3RoKSk7Ci19Ci0KLXN0YXRpYyBi
b29sIGRlY29kZUNGRGF0YShEZWNvZGVyJiBkZWNvZGVyLCBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiYg
ZGF0YSkKLXsKLSAgICB1aW50NjRfdCBzaXplID0gMDsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KHNpemUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBWZWN0b3I8dWludDhfdD4gdmVj
dG9yKHN0YXRpY19jYXN0PHNpemVfdD4oc2l6ZSkpOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGVG
aXhlZExlbmd0aERhdGEodmVjdG9yLmRhdGEoKSwgdmVjdG9yLnNpemUoKSkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIGRhdGEgPSBhZG9wdENGKENGRGF0YUNyZWF0ZShudWxscHRyLCB2
ZWN0b3IuZGF0YSgpLCB2ZWN0b3Iuc2l6ZSgpKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19CiAKK3Rl
bXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvOjpUeXBl
PiB7CisgICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKKyAgICAgICAgV2ViQ29yZTo6Q2Vy
dGlmaWNhdGVJbmZvOjpUeXBlLAorICAgICAgICBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm86OlR5
cGU6Ok5vbmUsCisgICAgICAgIFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbzo6VHlwZTo6Q2VydGlm
aWNhdGVDaGFpbgogI2lmIEhBVkUoU0VDX1RSVVNUX1NFUklBTElaQVRJT04pCi1zdGF0aWMgdm9p
ZCBlbmNvZGVTZWNUcnVzdFJlZihFbmNvZGVyJiBlbmNvZGVyLCBTZWNUcnVzdFJlZiB0cnVzdCkK
LXsKLSAgICBhdXRvIGRhdGEgPSBhZG9wdENGKFNlY1RydXN0U2VyaWFsaXplKHRydXN0LCBudWxs
cHRyKSk7Ci0gICAgaWYgKCFkYXRhKSB7Ci0gICAgICAgIGVuY29kZXIgPDwgZmFsc2U7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBlbmNvZGVyIDw8IHRydWU7Ci0gICAgZW5jb2RlQ0ZE
YXRhKGVuY29kZXIsIGRhdGEuZ2V0KCkpOwotfQotCi1zdGF0aWMgYm9vbCBkZWNvZGVTZWNUcnVz
dFJlZihEZWNvZGVyJiBkZWNvZGVyLCBSZXRhaW5QdHI8U2VjVHJ1c3RSZWY+JiByZXN1bHQpCi17
Ci0gICAgYm9vbCBoYXNUcnVzdDsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGhhc1RydXN0KSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFoYXNUcnVzdCkKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0KLSAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiB0cnVzdERhdGE7Ci0gICAgaWYg
KCFkZWNvZGVDRkRhdGEoZGVjb2RlciwgdHJ1c3REYXRhKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgYXV0byB0cnVzdCA9IGFkb3B0Q0YoU2VjVHJ1c3REZXNlcmlhbGl6ZSh0cnVzdERh
dGEuZ2V0KCksIG51bGxwdHIpKTsKLSAgICBpZiAoIXRydXN0KQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICByZXN1bHQgPSBXVEZNb3ZlKHRydXN0KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0K
KyAgICAgICAgLCBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm86OlR5cGU6OlRydXN0CiAjZW5kaWYK
KyAgICA+OworfTsKIAotI2lmIFBMQVRGT1JNKENPQ09BKQotc3RhdGljIHZvaWQgZW5jb2RlQ2Vy
dGlmaWNhdGVDaGFpbihFbmNvZGVyJiBlbmNvZGVyLCBDRkFycmF5UmVmIGNlcnRpZmljYXRlQ2hh
aW4pCi17Ci0gICAgQ0ZJbmRleCBzaXplID0gQ0ZBcnJheUdldENvdW50KGNlcnRpZmljYXRlQ2hh
aW4pOwotICAgIFZlY3RvcjxDRlR5cGVSZWYsIDMyPiB2YWx1ZXMoc2l6ZSk7Ci0KLSAgICBDRkFy
cmF5R2V0VmFsdWVzKGNlcnRpZmljYXRlQ2hhaW4sIENGUmFuZ2VNYWtlKDAsIHNpemUpLCB2YWx1
ZXMuZGF0YSgpKTsKLQotICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHNpemUp
OwotCi0gICAgZm9yIChDRkluZGV4IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIEFT
U0VSVCh2YWx1ZXNbaV0pOwotICAgICAgICBhdXRvIGRhdGEgPSBhZG9wdENGKFNlY0NlcnRpZmlj
YXRlQ29weURhdGEoY2hlY2tlZF9jZl9jYXN0PFNlY0NlcnRpZmljYXRlUmVmPih2YWx1ZXNbaV0p
KSk7Ci0gICAgICAgIGVuY29kZUNGRGF0YShlbmNvZGVyLCBkYXRhLmdldCgpKTsKLSAgICB9Ci19
Ci0KLXN0YXRpYyBib29sIGRlY29kZUNlcnRpZmljYXRlQ2hhaW4oRGVjb2RlciYgZGVjb2Rlciwg
UmV0YWluUHRyPENGQXJyYXlSZWY+JiBjZXJ0aWZpY2F0ZUNoYWluKQotewotICAgIHVpbnQ2NF90
IHNpemU7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShzaXplKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgYXV0byBhcnJheSA9IGFkb3B0Q0YoQ0ZBcnJheUNyZWF0ZU11dGFibGUoMCwg
MCwgJmtDRlR5cGVBcnJheUNhbGxCYWNrcykpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBzaXplOyArK2kpIHsKLSAgICAgICAgUmV0YWluUHRyPENGRGF0YVJlZj4gZGF0YTsKLSAgICAg
ICAgaWYgKCFkZWNvZGVDRkRhdGEoZGVjb2RlciwgZGF0YSkpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICAgICAgYXV0byBjZXJ0aWZpY2F0ZSA9IGFkb3B0Q0YoU2VjQ2VydGlmaWNh
dGVDcmVhdGVXaXRoRGF0YSgwLCBkYXRhLmdldCgpKSk7Ci0gICAgICAgIENGQXJyYXlBcHBlbmRW
YWx1ZShhcnJheS5nZXQoKSwgY2VydGlmaWNhdGUuZ2V0KCkpOwotICAgIH0KLQotICAgIGNlcnRp
ZmljYXRlQ2hhaW4gPSBXVEZNb3ZlKGFycmF5KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLSNlbmRp
ZgorbmFtZXNwYWNlIFBlcnNpc3RlbmNlIHsKIAogdGVtcGxhdGU8PiBzdHJ1Y3QgQ29kZXI8V2Vi
Q29yZTo6Q2VydGlmaWNhdGVJbmZvPiB7Ci0gICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXIm
IGVuY29kZXIsIGNvbnN0IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyYgY2VydGlmaWNhdGVJbmZv
KQotICAgIHsKLSAgICAgICAgZW5jb2Rlci5lbmNvZGVFbnVtKGNlcnRpZmljYXRlSW5mby50eXBl
KCkpOwotCi0gICAgICAgIHN3aXRjaCAoY2VydGlmaWNhdGVJbmZvLnR5cGUoKSkgewotI2lmIEhB
VkUoU0VDX1RSVVNUX1NFUklBTElaQVRJT04pCi0gICAgICAgIGNhc2UgV2ViQ29yZTo6Q2VydGlm
aWNhdGVJbmZvOjpUeXBlOjpUcnVzdDoKLSAgICAgICAgICAgIGVuY29kZVNlY1RydXN0UmVmKGVu
Y29kZXIsIGNlcnRpZmljYXRlSW5mby50cnVzdCgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotI2Vu
ZGlmCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgICAgIGNhc2UgV2ViQ29yZTo6Q2VydGlmaWNh
dGVJbmZvOjpUeXBlOjpDZXJ0aWZpY2F0ZUNoYWluOiB7Ci0gICAgICAgICAgICBlbmNvZGVDZXJ0
aWZpY2F0ZUNoYWluKGVuY29kZXIsIGNlcnRpZmljYXRlSW5mby5jZXJ0aWZpY2F0ZUNoYWluKCkp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSNlbmRpZgotICAgICAgICBjYXNlIFdl
YkNvcmU6OkNlcnRpZmljYXRlSW5mbzo6VHlwZTo6Tm9uZToKLSAgICAgICAgICAgIC8vIERvIG5v
dGhpbmcuCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHN0YXRp
YyBib29sIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8m
IGNlcnRpZmljYXRlSW5mbykKLSAgICB7Ci0gICAgICAgIFdlYkNvcmU6OkNlcnRpZmljYXRlSW5m
bzo6VHlwZSBjZXJ0aWZpY2F0ZUluZm9UeXBlOwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
RW51bShjZXJ0aWZpY2F0ZUluZm9UeXBlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgICAgICBzd2l0Y2ggKGNlcnRpZmljYXRlSW5mb1R5cGUpIHsKLSNpZiBIQVZFKFNFQ19UUlVT
VF9TRVJJQUxJWkFUSU9OKQotICAgICAgICBjYXNlIFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbzo6
VHlwZTo6VHJ1c3Q6IHsKLSAgICAgICAgICAgIFJldGFpblB0cjxTZWNUcnVzdFJlZj4gdHJ1c3Q7
Ci0gICAgICAgICAgICBpZiAoIWRlY29kZVNlY1RydXN0UmVmKGRlY29kZXIsIHRydXN0KSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgICAgIGNlcnRpZmljYXRlSW5m
byA9IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyhXVEZNb3ZlKHRydXN0KSk7Ci0gICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotI2VuZGlmCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0g
ICAgICAgIGNhc2UgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvOjpUeXBlOjpDZXJ0aWZpY2F0ZUNo
YWluOiB7Ci0gICAgICAgICAgICBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4gY2VydGlmaWNhdGVDaGFp
bjsKLSAgICAgICAgICAgIGlmICghZGVjb2RlQ2VydGlmaWNhdGVDaGFpbihkZWNvZGVyLCBjZXJ0
aWZpY2F0ZUNoYWluKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAg
ICAgIGNlcnRpZmljYXRlSW5mbyA9IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyhXVEZNb3ZlKGNl
cnRpZmljYXRlQ2hhaW4pKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0j
ZW5kaWYKLSAgICAgICAgY2FzZSBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm86OlR5cGU6Ok5vbmU6
Ci0gICAgICAgICAgICAvLyBEbyBub3RoaW5nLgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9CisgICAgc3RhdGljIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25zdCBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8m
KTsKKyAgICBzdGF0aWMgV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8V2ViQ29yZTo6Q2VydGlmaWNh
dGVJbmZvPiBkZWNvZGUoRGVjb2RlciYpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV1RGOjpQZXJz
aXN0ZW5jZQorCiB9IC8vIG5hbWVzcGFjZSBXVEYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvY2YvQ2VydGlmaWNhdGVJbmZvQ0ZOZXQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvQ2VydGlmaWNhdGVJbmZvQ0ZOZXQuY3Bw
CShyZXZpc2lvbiAyNTk4OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Nm
L0NlcnRpZmljYXRlSW5mb0NGTmV0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsOSBA
QAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkNlcnRpZmljYXRlSW5mby5oIgogCisj
aW5jbHVkZSA8d3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnREZWNvZGVyLmg+CisjaW5jbHVkZSA8
d3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRFbmNvZGVyLmg+CisKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogI2lmIFBMQVRGT1JNKENPQ09BKQpAQCAtMTUzLDMgKzE1NiwxNjUgQEAgT3B0aW9uYWw8
Q2VydGlmaWNhdGVJbmZvOjpTdW1tYXJ5SW5mbz4gQwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKK25hbWVzcGFjZSBXVEYgeworbmFtZXNwYWNlIFBlcnNpc3RlbmNlIHsKKworc3RhdGlj
IHZvaWQgZW5jb2RlQ0ZEYXRhKEVuY29kZXImIGVuY29kZXIsIENGRGF0YVJlZiBkYXRhKQorewor
ICAgIHVpbnQ2NF90IGxlbmd0aCA9IENGRGF0YUdldExlbmd0aChkYXRhKTsKKyAgICBjb25zdCB1
aW50OF90KiBieXRlUHRyID0gQ0ZEYXRhR2V0Qnl0ZVB0cihkYXRhKTsKKworICAgIGVuY29kZXIg
PDwgbGVuZ3RoOworICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGJ5dGVQdHIsIHN0
YXRpY19jYXN0PHNpemVfdD4obGVuZ3RoKSk7Cit9CisKK3N0YXRpYyBPcHRpb25hbDxSZXRhaW5Q
dHI8Q0ZEYXRhUmVmPj4gZGVjb2RlQ0ZEYXRhKERlY29kZXImIGRlY29kZXIpCit7CisgICAgT3B0
aW9uYWw8dWludDY0X3Q+IHNpemU7CisgICAgZGVjb2RlciA+PiBzaXplOworICAgIGlmICghc2l6
ZSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIGlmIChVTkxJS0VMWSghaXNJ
bkJvdW5kczxzaXplX3Q+KCpzaXplKSkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cisg
ICAgCisgICAgVmVjdG9yPHVpbnQ4X3Q+IHZlY3RvcihzdGF0aWNfY2FzdDxzaXplX3Q+KCpzaXpl
KSk7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YSh2ZWN0b3IuZGF0YSgp
LCB2ZWN0b3Iuc2l6ZSgpKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIHJl
dHVybiBhZG9wdENGKENGRGF0YUNyZWF0ZShudWxscHRyLCB2ZWN0b3IuZGF0YSgpLCB2ZWN0b3Iu
c2l6ZSgpKSk7Cit9CisKKyNpZiBIQVZFKFNFQ19UUlVTVF9TRVJJQUxJWkFUSU9OKQorc3RhdGlj
IHZvaWQgZW5jb2RlU2VjVHJ1c3RSZWYoRW5jb2RlciYgZW5jb2RlciwgU2VjVHJ1c3RSZWYgdHJ1
c3QpCit7CisgICAgYXV0byBkYXRhID0gYWRvcHRDRihTZWNUcnVzdFNlcmlhbGl6ZSh0cnVzdCwg
bnVsbHB0cikpOworICAgIGlmICghZGF0YSkgeworICAgICAgICBlbmNvZGVyIDw8IGZhbHNlOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZW5jb2RlciA8PCB0cnVlOworICAgIGVuY29k
ZUNGRGF0YShlbmNvZGVyLCBkYXRhLmdldCgpKTsKK30KKworc3RhdGljIE9wdGlvbmFsPFJldGFp
blB0cjxTZWNUcnVzdFJlZj4+IGRlY29kZVNlY1RydXN0UmVmKERlY29kZXImIGRlY29kZXIpCit7
CisgICAgT3B0aW9uYWw8Ym9vbD4gaGFzVHJ1c3Q7CisgICAgZGVjb2RlciA+PiBoYXNUcnVzdDsK
KyAgICBpZiAoIWhhc1RydXN0KQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAg
aWYgKCEqaGFzVHJ1c3QpCisgICAgICAgIHJldHVybiB7IG51bGxwdHIgfTsKKworICAgIGF1dG8g
dHJ1c3REYXRhID0gZGVjb2RlQ0ZEYXRhKGRlY29kZXIpOworICAgIGlmICghdHJ1c3REYXRhKQor
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgYXV0byB0cnVzdCA9IGFkb3B0Q0Yo
U2VjVHJ1c3REZXNlcmlhbGl6ZSh0cnVzdERhdGEtPmdldCgpLCBudWxscHRyKSk7CisgICAgaWYg
KCF0cnVzdCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIHJldHVybiBXVEZN
b3ZlKHRydXN0KTsKK30KKyNlbmRpZgorCisjaWYgUExBVEZPUk0oQ09DT0EpCitzdGF0aWMgdm9p
ZCBlbmNvZGVDZXJ0aWZpY2F0ZUNoYWluKEVuY29kZXImIGVuY29kZXIsIENGQXJyYXlSZWYgY2Vy
dGlmaWNhdGVDaGFpbikKK3sKKyAgICBDRkluZGV4IHNpemUgPSBDRkFycmF5R2V0Q291bnQoY2Vy
dGlmaWNhdGVDaGFpbik7CisgICAgVmVjdG9yPENGVHlwZVJlZiwgMzI+IHZhbHVlcyhzaXplKTsK
KworICAgIENGQXJyYXlHZXRWYWx1ZXMoY2VydGlmaWNhdGVDaGFpbiwgQ0ZSYW5nZU1ha2UoMCwg
c2l6ZSksIHZhbHVlcy5kYXRhKCkpOworCisgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50
NjRfdD4oc2l6ZSk7CisKKyAgICBmb3IgKENGSW5kZXggaSA9IDA7IGkgPCBzaXplOyArK2kpIHsK
KyAgICAgICAgQVNTRVJUKHZhbHVlc1tpXSk7CisgICAgICAgIGF1dG8gZGF0YSA9IGFkb3B0Q0Yo
U2VjQ2VydGlmaWNhdGVDb3B5RGF0YShjaGVja2VkX2NmX2Nhc3Q8U2VjQ2VydGlmaWNhdGVSZWY+
KHZhbHVlc1tpXSkpKTsKKyAgICAgICAgZW5jb2RlQ0ZEYXRhKGVuY29kZXIsIGRhdGEuZ2V0KCkp
OworICAgIH0KK30KKworc3RhdGljIE9wdGlvbmFsPFJldGFpblB0cjxDRkFycmF5UmVmPj4gZGVj
b2RlQ2VydGlmaWNhdGVDaGFpbihEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIE9wdGlvbmFsPHVp
bnQ2NF90PiBzaXplOworICAgIGRlY29kZXIgPj4gc2l6ZTsKKyAgICBpZiAoIXNpemUpCisgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBhdXRvIGFycmF5ID0gYWRvcHRDRihDRkFy
cmF5Q3JlYXRlTXV0YWJsZSgwLCAwLCAma0NGVHlwZUFycmF5Q2FsbEJhY2tzKSk7CisKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8ICpzaXplOyArK2kpIHsKKyAgICAgICAgYXV0byBkYXRhID0g
ZGVjb2RlQ0ZEYXRhKGRlY29kZXIpOworICAgICAgICBpZiAoIWRhdGEpCisgICAgICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgICAgIGF1dG8gY2VydGlmaWNhdGUgPSBhZG9wdENG
KFNlY0NlcnRpZmljYXRlQ3JlYXRlV2l0aERhdGEoMCwgZGF0YS0+Z2V0KCkpKTsKKyAgICAgICAg
Q0ZBcnJheUFwcGVuZFZhbHVlKGFycmF5LmdldCgpLCBjZXJ0aWZpY2F0ZS5nZXQoKSk7CisgICAg
fQorCisgICAgcmV0dXJuIHsgV1RGTW92ZShhcnJheSkgfTsKK30KKyNlbmRpZgorCit2b2lkIENv
ZGVyPFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbz46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBj
b25zdCBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8mIGNlcnRpZmljYXRlSW5mbykKK3sKKyAgICBl
bmNvZGVyIDw8IGNlcnRpZmljYXRlSW5mby50eXBlKCk7CisKKyAgICBzd2l0Y2ggKGNlcnRpZmlj
YXRlSW5mby50eXBlKCkpIHsKKyNpZiBIQVZFKFNFQ19UUlVTVF9TRVJJQUxJWkFUSU9OKQorICAg
IGNhc2UgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvOjpUeXBlOjpUcnVzdDoKKyAgICAgICAgZW5j
b2RlU2VjVHJ1c3RSZWYoZW5jb2RlciwgY2VydGlmaWNhdGVJbmZvLnRydXN0KCkpOworICAgICAg
ICBicmVhazsKKyNlbmRpZgorI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIGNhc2UgV2ViQ29yZTo6
Q2VydGlmaWNhdGVJbmZvOjpUeXBlOjpDZXJ0aWZpY2F0ZUNoYWluOiB7CisgICAgICAgIGVuY29k
ZUNlcnRpZmljYXRlQ2hhaW4oZW5jb2RlciwgY2VydGlmaWNhdGVJbmZvLmNlcnRpZmljYXRlQ2hh
aW4oKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyNlbmRpZgorICAgIGNhc2UgV2ViQ29yZTo6
Q2VydGlmaWNhdGVJbmZvOjpUeXBlOjpOb25lOgorICAgICAgICAvLyBEbyBub3RoaW5nLgorICAg
ICAgICBicmVhazsKKyAgICB9Cit9CisKK09wdGlvbmFsPFdlYkNvcmU6OkNlcnRpZmljYXRlSW5m
bz4gQ29kZXI8V2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvPjo6ZGVjb2RlKERlY29kZXImIGRlY29k
ZXIpCit7CisgICAgT3B0aW9uYWw8V2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvOjpUeXBlPiBjZXJ0
aWZpY2F0ZUluZm9UeXBlOworICAgIGRlY29kZXIgPj4gY2VydGlmaWNhdGVJbmZvVHlwZTsKKyAg
ICBpZiAoIWNlcnRpZmljYXRlSW5mb1R5cGUpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CisKKyAgICBzd2l0Y2ggKCpjZXJ0aWZpY2F0ZUluZm9UeXBlKSB7CisjaWYgSEFWRShTRUNfVFJV
U1RfU0VSSUFMSVpBVElPTikKKyAgICBjYXNlIFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbzo6VHlw
ZTo6VHJ1c3Q6IHsKKyAgICAgICAgYXV0byB0cnVzdCA9IGRlY29kZVNlY1RydXN0UmVmKGRlY29k
ZXIpOworICAgICAgICBpZiAoIXRydXN0KQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKKworICAgICAgICByZXR1cm4gV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvKFdURk1vdmUoKnRy
dXN0KSk7CisgICAgfQorI2VuZGlmCisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgY2FzZSBXZWJD
b3JlOjpDZXJ0aWZpY2F0ZUluZm86OlR5cGU6OkNlcnRpZmljYXRlQ2hhaW46IHsKKyAgICAgICAg
YXV0byBjZXJ0aWZpY2F0ZUNoYWluID0gZGVjb2RlQ2VydGlmaWNhdGVDaGFpbihkZWNvZGVyKTsK
KyAgICAgICAgaWYgKCFjZXJ0aWZpY2F0ZUNoYWluKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKKworICAgICAgICByZXR1cm4gV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvKFdURk1v
dmUoKmNlcnRpZmljYXRlQ2hhaW4pKTsKKyAgICB9CisjZW5kaWYKKyAgICBjYXNlIFdlYkNvcmU6
OkNlcnRpZmljYXRlSW5mbzo6VHlwZTo6Tm9uZToKKyAgICAgICAgLy8gRG8gbm90aGluZy4KKyAg
ICAgICAgcmV0dXJuIFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbygpOworICAgIH0KKworICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIFBlcnNpc3RlbmNlCit9IC8v
IG5hbWVzcGFjZSBXVEYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3Vy
bC9DZXJ0aWZpY2F0ZUluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2N1cmwvQ2VydGlmaWNhdGVJbmZvLmgJKHJldmlzaW9uIDI1OTg5OCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DZXJ0aWZpY2F0ZUluZm8uaAkod29y
a2luZyBjb3B5KQpAQCAtODIsMjcgKzgyLDI5IEBAIHRlbXBsYXRlPD4gc3RydWN0IENvZGVyPFdl
YkNvcmU6OkNlcnRpZmkKICAgICAgICAgICAgIGVuY29kZXIgPDwgY2VydGlmaWNhdGU7CiAgICAg
fQogCi0gICAgc3RhdGljIGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFdlYkNvcmU6OkNl
cnRpZmljYXRlSW5mbyYgY2VydGlmaWNhdGVJbmZvKQorICAgIHN0YXRpYyBPcHRpb25hbDxXZWJD
b3JlOjpDZXJ0aWZpY2F0ZUluZm8+IGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIHsKLSAg
ICAgICAgaW50IHZlcmlmaWNhdGlvbkVycm9yOwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KHZlcmlmaWNhdGlvbkVycm9yKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAg
ICBzaXplX3QgbnVtT2ZDZXJ0ID0gMDsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShudW1P
ZkNlcnQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBPcHRpb25hbDxpbnQ+
IHZlcmlmaWNhdGlvbkVycm9yOworICAgICAgICBkZWNvZGVyID4+IHZlcmlmaWNhdGlvbkVycm9y
OworICAgICAgICBpZiAoIXZlcmlmaWNhdGlvbkVycm9yKQorICAgICAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKKworICAgICAgICBPcHRpb25hbDxzaXplX3Q+IG51bU9mQ2VydHM7CisgICAg
ICAgIGRlY29kZXIgPj4gbnVtT2ZDZXJ0czsKKyAgICAgICAgaWYgKCFudW1PZkNlcnRzKQorICAg
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgICAgICBXZWJDb3JlOjpDZXJ0aWZp
Y2F0ZUluZm86OkNlcnRpZmljYXRlQ2hhaW4gY2VydGlmaWNhdGVDaGFpbjsKLSAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBudW1PZkNlcnQ7IGkrKykgewotICAgICAgICAgICAgV2ViQ29y
ZTo6Q2VydGlmaWNhdGVJbmZvOjpDZXJ0aWZpY2F0ZSBjZXJ0aWZpY2F0ZTsKLSAgICAgICAgICAg
IGlmICghZGVjb2Rlci5kZWNvZGUoY2VydGlmaWNhdGUpKQotICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1PZkNlcnRzLnZhbHVl
KCk7IGkrKykgeworICAgICAgICAgICAgT3B0aW9uYWw8V2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZv
OjpDZXJ0aWZpY2F0ZT4gY2VydGlmaWNhdGU7CisgICAgICAgICAgICBkZWNvZGVyID4+IGNlcnRp
ZmljYXRlOworICAgICAgICAgICAgaWYgKCFjZXJ0aWZpY2F0ZSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgICAgICAgICBjZXJ0aWZpY2F0ZUNoYWluLmFwcGVu
ZChXVEZNb3ZlKGNlcnRpZmljYXRlKSk7CisgICAgICAgICAgICBjZXJ0aWZpY2F0ZUNoYWluLmFw
cGVuZChXVEZNb3ZlKGNlcnRpZmljYXRlLnZhbHVlKCkpKTsKICAgICAgICAgfQogCi0gICAgICAg
IGNlcnRpZmljYXRlSW5mbyA9IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyh2ZXJpZmljYXRpb25F
cnJvciwgV1RGTW92ZShjZXJ0aWZpY2F0ZUNoYWluKSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICByZXR1cm4gV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvKHZlcmlmaWNhdGlvbkVycm9y
LnZhbHVlKCksIFdURk1vdmUoY2VydGlmaWNhdGVDaGFpbikpOwogICAgIH0KIH07CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9DZXJ0aWZpY2F0ZUluZm8uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQ2VydGlm
aWNhdGVJbmZvLmgJKHJldmlzaW9uIDI1OTg5OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvc291cC9DZXJ0aWZpY2F0ZUluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtNzYsMTUg
Kzc2LDE4IEBAIHRlbXBsYXRlPD4gc3RydWN0IENvZGVyPEdSZWZQdHI8R0J5dGVBcnIKICAgICAg
ICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoYnl0ZUFycmF5LT5kYXRhLCBieXRlQXJy
YXktPmxlbik7CiAgICAgfQogCi0gICAgc3RhdGljIGJvb2wgZGVjb2RlKERlY29kZXIgJmRlY29k
ZXIsIEdSZWZQdHI8R0J5dGVBcnJheT4mIGJ5dGVBcnJheSkKKyAgICBzdGF0aWMgT3B0aW9uYWw8
R1JlZlB0cjxHQnl0ZUFycmF5Pj4gZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgewotICAg
ICAgICB1aW50MzJfdCBzaXplOwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHNpemUpKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGJ5dGVBcnJheSA9IGFkb3B0R1Jl
ZihnX2J5dGVfYXJyYXlfc2l6ZWRfbmV3KHNpemUpKTsKLSAgICAgICAgZ19ieXRlX2FycmF5X3Nl
dF9zaXplKGJ5dGVBcnJheS5nZXQoKSwgc2l6ZSk7Ci0gICAgICAgIHJldHVybiBkZWNvZGVyLmRl
Y29kZUZpeGVkTGVuZ3RoRGF0YShieXRlQXJyYXktPmRhdGEsIHNpemUpOworICAgICAgICBPcHRp
b25hbDx1aW50MzJfdD4gc2l6ZTsKKyAgICAgICAgZGVjb2RlciA+PiBzaXplOworICAgICAgICBp
ZiAoIXNpemUpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgICAgIEdS
ZWZQdHI8R0J5dGVBcnJheT4gYnl0ZUFycmF5ID0gYWRvcHRHUmVmKGdfYnl0ZV9hcnJheV9zaXpl
ZF9uZXcoKnNpemUpKTsKKyAgICAgICAgZ19ieXRlX2FycmF5X3NldF9zaXplKGJ5dGVBcnJheS5n
ZXQoKSwgKnNpemUpOworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRh
KGJ5dGVBcnJheS0+ZGF0YSwgKnNpemUpKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKKyAgICAgICAgcmV0dXJuIGJ5dGVBcnJheTsKICAgICB9CiB9OwogCkBAIC0xMzksMjUgKzE0
MiwyOSBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBDb2RlcjxXZWJDb3JlOjpDZXJ0aWZpCiAgICAgICAg
IGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGNlcnRpZmljYXRlSW5mby50bHNFcnJv
cnMoKSk7CiAgICAgfQogCi0gICAgc3RhdGljIGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIs
IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyYgY2VydGlmaWNhdGVJbmZvKQorICAgIHN0YXRpYyBP
cHRpb25hbDxXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8+IGRlY29kZShEZWNvZGVyJiBkZWNvZGVy
KQogICAgIHsKLSAgICAgICAgVmVjdG9yPEdSZWZQdHI8R0J5dGVBcnJheT4+IGNlcnRpZmljYXRl
c0RhdGFMaXN0OwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGNlcnRpZmljYXRlc0RhdGFM
aXN0KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgT3B0aW9uYWw8VmVjdG9y
PEdSZWZQdHI8R0J5dGVBcnJheT4+PiBjZXJ0aWZpY2F0ZXNEYXRhTGlzdDsKKyAgICAgICAgZGVj
b2RlciA+PiBjZXJ0aWZpY2F0ZXNEYXRhTGlzdDsKKyAgICAgICAgaWYgKCFjZXJ0aWZpY2F0ZXNE
YXRhTGlzdCkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICAgICAgV2Vi
Q29yZTo6Q2VydGlmaWNhdGVJbmZvIGNlcnRpZmljYXRlSW5mbzsKKyAgICAgICAgaWYgKGNlcnRp
ZmljYXRlc0RhdGFMaXN0LT5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gY2VydGlmaWNh
dGVJbmZvOwogCi0gICAgICAgIGlmIChjZXJ0aWZpY2F0ZXNEYXRhTGlzdC5pc0VtcHR5KCkpCi0g
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgYXV0byBjZXJ0aWZpY2F0ZSA9IGNlcnRp
ZmljYXRlRnJvbUNlcnRpZmljYXRlc0RhdGFMaXN0KGNlcnRpZmljYXRlc0RhdGFMaXN0KTsKKyAg
ICAgICAgYXV0byBjZXJ0aWZpY2F0ZSA9IGNlcnRpZmljYXRlRnJvbUNlcnRpZmljYXRlc0RhdGFM
aXN0KGNlcnRpZmljYXRlc0RhdGFMaXN0LnZhbHVlKCkpOwogICAgICAgICBpZiAoIWNlcnRpZmlj
YXRlKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKICAgICAgICAgY2VydGlmaWNhdGVJbmZvLnNldENlcnRpZmljYXRlKGNlcnRpZmlj
YXRlLmdldCgpKTsKIAotICAgICAgICB1aW50MzJfdCB0bHNFcnJvcnM7Ci0gICAgICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUodGxzRXJyb3JzKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgY2VydGlmaWNhdGVJbmZvLnNldFRMU0Vycm9ycyhzdGF0aWNfY2FzdDxHVGxzQ2VydGlm
aWNhdGVGbGFncz4odGxzRXJyb3JzKSk7CisgICAgICAgIE9wdGlvbmFsPHVpbnQzMl90PiB0bHNF
cnJvcnM7CisgICAgICAgIGRlY29kZXIgPj4gdGxzRXJyb3JzOworICAgICAgICBpZiAoIXRsc0Vy
cm9ycykKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIGNlcnRpZmlj
YXRlSW5mby5zZXRUTFNFcnJvcnMoc3RhdGljX2Nhc3Q8R1Rsc0NlcnRpZmljYXRlRmxhZ3M+KCp0
bHNFcnJvcnMpKTsKIAotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGNlcnRp
ZmljYXRlSW5mbzsKICAgICB9CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXNwb25zZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlc3BvbnNlLmgJKHJldmlzaW9uIDI1
OTg5OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJl
c3BvbnNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTkyLDcgKzkyLDcgQEAgdGVtcGxhdGU8Y2xhc3Mg
RW5jb2Rlcj4KIHZvaWQgUmVzb3VyY2VSZXNwb25zZTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIp
IGNvbnN0CiB7CiAgICAgUmVzb3VyY2VSZXNwb25zZUJhc2U6OmVuY29kZShlbmNvZGVyKTsKLSAg
ICBlbmNvZGVyLmVuY29kZUVudW0obV9zb3VwRmxhZ3MpOworICAgIGVuY29kZXIgPDwgc3RhdGlj
X2Nhc3Q8dWludDY0X3Q+KG1fc291cEZsYWdzKTsKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rl
cj4KQEAgLTEwMCw4ICsxMDAsMTIgQEAgYm9vbCBSZXNvdXJjZVJlc3BvbnNlOjpkZWNvZGUoRGVj
b2RlciYgZAogewogICAgIGlmICghUmVzb3VyY2VSZXNwb25zZUJhc2U6OmRlY29kZShkZWNvZGVy
LCByZXNwb25zZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIWRlY29kZXIuZGVj
b2RlRW51bShyZXNwb25zZS5tX3NvdXBGbGFncykpCisgICAgT3B0aW9uYWw8dWludDY0X3Q+IHNv
dXBGbGFnczsKKyAgICBkZWNvZGVyID4+IHNvdXBGbGFnczsKKyAgICBpZiAoIXNvdXBGbGFncykK
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIC8vIEZJWE1FOiBWZXJpZnkgdGhhdCB0aGlzIGlz
IGEgdmFsaWQgdmFsdWUgZm9yIFNvdXBNZXNzYWdlRmxhZ3MuCisgICAgcmVzcG9uc2UubV9zb3Vw
RmxhZ3MgPSBzdGF0aWNfY2FzdDxTb3VwTWVzc2FnZUZsYWdzPigqc291cEZsYWdzKTsKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL1Nl
cnZpY2VXb3JrZXJDb250ZXh0RGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dv
cmtlcnMvc2VydmljZS9TZXJ2aWNlV29ya2VyQ29udGV4dERhdGEuaAkocmV2aXNpb24gMjU5ODk4
KQorKysgU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL1NlcnZpY2VXb3JrZXJDb250ZXh0
RGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSwyMCArNTEsMjggQEAgc3RydWN0IFNlcnZpY2VX
b3JrZXJDb250ZXh0RGF0YSB7CiAgICAgICAgICAgICBlbmNvZGVyIDw8IHNjcmlwdCA8PCByZXNw
b25zZVVSTCA8PCBtaW1lVHlwZTsKICAgICAgICAgfQogCi0gICAgICAgIHRlbXBsYXRlPGNsYXNz
IERlY29kZXI+IHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBJbXBvcnRlZFNj
cmlwdCYgc2NyaXB0KQorICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0
aW9uYWw8SW1wb3J0ZWRTY3JpcHQ+IGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgICAgICB7
Ci0gICAgICAgICAgICBJbXBvcnRlZFNjcmlwdCBpbXBvcnRlZFNjcmlwdDsKLSAgICAgICAgICAg
IGlmICghZGVjb2Rlci5kZWNvZGUoaW1wb3J0ZWRTY3JpcHQuc2NyaXB0KSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaW1w
b3J0ZWRTY3JpcHQucmVzcG9uc2VVUkwpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShpbXBvcnRlZFNjcmlwdC5taW1lVHlw
ZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICBzY3JpcHQg
PSBXVEZNb3ZlKGltcG9ydGVkU2NyaXB0KTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICAgICAgT3B0aW9uYWw8U3RyaW5nPiBzY3JpcHQ7CisgICAgICAgICAgICBkZWNvZGVyID4+
IHNjcmlwdDsKKyAgICAgICAgICAgIGlmICghc2NyaXB0KQorICAgICAgICAgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIE9wdGlvbmFsPFVSTD4g
cmVzcG9uc2VVUkw7CisgICAgICAgICAgICBkZWNvZGVyID4+IHJlc3BvbnNlVVJMOworICAgICAg
ICAgICAgaWYgKCFyZXNwb25zZVVSTCkKKyAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OworICAgICAgICAgICAgCisgICAgICAgICAgICBPcHRpb25hbDxTdHJpbmc+IG1pbWVUeXBl
OworICAgICAgICAgICAgZGVjb2RlciA+PiBtaW1lVHlwZTsKKyAgICAgICAgICAgIGlmICghbWlt
ZVR5cGUpCisgICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgcmV0dXJuIHt7CisgICAgICAgICAgICAgICAgV1RGTW92ZSgqc2NyaXB0
KSwKKyAgICAgICAgICAgICAgICBXVEZNb3ZlKCpyZXNwb25zZVVSTCksCisgICAgICAgICAgICAg
ICAgV1RGTW92ZSgqbWltZVR5cGUpCisgICAgICAgICAgICB9fTsKICAgICAgICAgfQogICAgIH07
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9zZXJ2ZXIvUmVnaXN0cmF0
aW9uRGF0YWJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2Vy
dmljZS9zZXJ2ZXIvUmVnaXN0cmF0aW9uRGF0YWJhc2UuY3BwCShyZXZpc2lvbiAyNTk4OTgpCisr
KyBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1JlZ2lzdHJhdGlvbkRhdGFi
YXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQyLDcgKzM0Miw3IEBAIHZvaWQgUmVnaXN0cmF0
aW9uRGF0YWJhc2U6OmRvUHVzaENoYW5nZXMKICAgICAgICAgZGF0YS5jb250ZW50U2VjdXJpdHlQ
b2xpY3kuZW5jb2RlKGNzcEVuY29kZXIpOwogCiAgICAgICAgIFdURjo6UGVyc2lzdGVuY2U6OkVu
Y29kZXIgc2NyaXB0UmVzb3VyY2VNYXBFbmNvZGVyOwotICAgICAgICBzY3JpcHRSZXNvdXJjZU1h
cEVuY29kZXIuZW5jb2RlKGRhdGEuc2NyaXB0UmVzb3VyY2VNYXApOworICAgICAgICBzY3JpcHRS
ZXNvdXJjZU1hcEVuY29kZXIgPDwgZGF0YS5zY3JpcHRSZXNvdXJjZU1hcDsKIAogICAgICAgICBp
ZiAoc3FsLmJpbmRUZXh0KDEsIGRhdGEucmVnaXN0cmF0aW9uLmtleS50b0RhdGFiYXNlS2V5KCkp
ICE9IFNRTElURV9PSwogICAgICAgICAgICAgfHwgc3FsLmJpbmRUZXh0KDIsIGRhdGEucmVnaXN0
cmF0aW9uLnNjb3BlVVJMLnByb3RvY29sSG9zdEFuZFBvcnQoKSkgIT0gU1FMSVRFX09LCkBAIC0z
OTIsMTkgKzM5MiwyMyBAQCBTdHJpbmcgUmVnaXN0cmF0aW9uRGF0YWJhc2U6OmltcG9ydFJlY29y
CiAgICAgICAgIFZlY3Rvcjx1aW50OF90PiBjb250ZW50U2VjdXJpdHlQb2xpY3lEYXRhOwogICAg
ICAgICBzcWwuZ2V0Q29sdW1uQmxvYkFzVmVjdG9yKDksIGNvbnRlbnRTZWN1cml0eVBvbGljeURh
dGEpOwogICAgICAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGNzcERlY29kZXIoY29udGVu
dFNlY3VyaXR5UG9saWN5RGF0YS5kYXRhKCksIGNvbnRlbnRTZWN1cml0eVBvbGljeURhdGEuc2l6
ZSgpKTsKLSAgICAgICAgQ29udGVudFNlY3VyaXR5UG9saWN5UmVzcG9uc2VIZWFkZXJzIGNvbnRl
bnRTZWN1cml0eVBvbGljeTsKLSAgICAgICAgaWYgKGNvbnRlbnRTZWN1cml0eVBvbGljeURhdGEu
c2l6ZSgpICYmICFDb250ZW50U2VjdXJpdHlQb2xpY3lSZXNwb25zZUhlYWRlcnM6OmRlY29kZShj
c3BEZWNvZGVyLCBjb250ZW50U2VjdXJpdHlQb2xpY3kpKQotICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIE9wdGlvbmFsPENvbnRlbnRTZWN1cml0eVBvbGljeVJlc3BvbnNlSGVhZGVycz4g
Y29udGVudFNlY3VyaXR5UG9saWN5OworICAgICAgICBpZiAoY29udGVudFNlY3VyaXR5UG9saWN5
RGF0YS5zaXplKCkpIHsKKyAgICAgICAgICAgIGNzcERlY29kZXIgPj4gY29udGVudFNlY3VyaXR5
UG9saWN5OworICAgICAgICAgICAgaWYgKCFjb250ZW50U2VjdXJpdHlQb2xpY3kpCisgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KIAogICAgICAgICBhdXRvIHJlZmVycmVyUG9s
aWN5ID0gc3FsLmdldENvbHVtblRleHQoMTApOwogCiAgICAgICAgIFZlY3Rvcjx1aW50OF90PiBz
Y3JpcHRSZXNvdXJjZU1hcERhdGE7CiAgICAgICAgIHNxbC5nZXRDb2x1bW5CbG9iQXNWZWN0b3Io
MTEsIHNjcmlwdFJlc291cmNlTWFwRGF0YSk7Ci0gICAgICAgIEhhc2hNYXA8VVJMLCBTZXJ2aWNl
V29ya2VyQ29udGV4dERhdGE6OkltcG9ydGVkU2NyaXB0PiBzY3JpcHRSZXNvdXJjZU1hcDsKKyAg
ICAgICAgT3B0aW9uYWw8SGFzaE1hcDxVUkwsIFNlcnZpY2VXb3JrZXJDb250ZXh0RGF0YTo6SW1w
b3J0ZWRTY3JpcHQ+PiBzY3JpcHRSZXNvdXJjZU1hcDsKIAogICAgICAgICBXVEY6OlBlcnNpc3Rl
bmNlOjpEZWNvZGVyIHNjcmlwdFJlc291cmNlTWFwRGVjb2RlcihzY3JpcHRSZXNvdXJjZU1hcERh
dGEuZGF0YSgpLCBzY3JpcHRSZXNvdXJjZU1hcERhdGEuc2l6ZSgpKTsKICAgICAgICAgaWYgKHNj
cmlwdFJlc291cmNlTWFwRGF0YS5zaXplKCkpIHsKLSAgICAgICAgICAgIGlmICghc2NyaXB0UmVz
b3VyY2VNYXBEZWNvZGVyLmRlY29kZShzY3JpcHRSZXNvdXJjZU1hcCkpCisgICAgICAgICAgICBz
Y3JpcHRSZXNvdXJjZU1hcERlY29kZXIgPj4gc2NyaXB0UmVzb3VyY2VNYXA7CisgICAgICAgICAg
ICBpZiAoIXNjcmlwdFJlc291cmNlTWFwKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICB9CiAKQEAgLTQxOCw3ICs0MjIsNyBAQCBTdHJpbmcgUmVnaXN0cmF0aW9uRGF0YWJhc2U6
OmltcG9ydFJlY29yCiAgICAgICAgIGF1dG8gcmVnaXN0cmF0aW9uSWRlbnRpZmllciA9IFNlcnZp
Y2VXb3JrZXJSZWdpc3RyYXRpb25JZGVudGlmaWVyOjpnZW5lcmF0ZSgpOwogICAgICAgICBhdXRv
IHNlcnZpY2VXb3JrZXJEYXRhID0gU2VydmljZVdvcmtlckRhdGEgeyB3b3JrZXJJZGVudGlmaWVy
LCBzY3JpcHRVUkwsIFNlcnZpY2VXb3JrZXJTdGF0ZTo6QWN0aXZhdGVkLCAqd29ya2VyVHlwZSwg
cmVnaXN0cmF0aW9uSWRlbnRpZmllciB9OwogICAgICAgICBhdXRvIHJlZ2lzdHJhdGlvbiA9IFNl
cnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EYXRhIHsgV1RGTW92ZSgqa2V5KSwgcmVnaXN0cmF0aW9u
SWRlbnRpZmllciwgV1RGTW92ZShzY29wZVVSTCksICp1cGRhdGVWaWFDYWNoZSwgbGFzdFVwZGF0
ZUNoZWNrVGltZSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQsIFdURk1vdmUoc2VydmljZVdv
cmtlckRhdGEpIH07Ci0gICAgICAgIGF1dG8gY29udGV4dERhdGEgPSBTZXJ2aWNlV29ya2VyQ29u
dGV4dERhdGEgeyBXVEY6Om51bGxvcHQsIFdURk1vdmUocmVnaXN0cmF0aW9uKSwgd29ya2VySWRl
bnRpZmllciwgV1RGTW92ZShzY3JpcHQpLCBXVEZNb3ZlKGNvbnRlbnRTZWN1cml0eVBvbGljeSks
IFdURk1vdmUocmVmZXJyZXJQb2xpY3kpLCBXVEZNb3ZlKHNjcmlwdFVSTCksICp3b3JrZXJUeXBl
LCB0cnVlLCBXVEZNb3ZlKHNjcmlwdFJlc291cmNlTWFwKSB9OworICAgICAgICBhdXRvIGNvbnRl
eHREYXRhID0gU2VydmljZVdvcmtlckNvbnRleHREYXRhIHsgV1RGOjpudWxsb3B0LCBXVEZNb3Zl
KHJlZ2lzdHJhdGlvbiksIHdvcmtlcklkZW50aWZpZXIsIFdURk1vdmUoc2NyaXB0KSwgV1RGTW92
ZSgqY29udGVudFNlY3VyaXR5UG9saWN5KSwgV1RGTW92ZShyZWZlcnJlclBvbGljeSksIFdURk1v
dmUoc2NyaXB0VVJMKSwgKndvcmtlclR5cGUsIHRydWUsIFdURk1vdmUoKnNjcmlwdFJlc291cmNl
TWFwKSB9OwogCiAgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW3Byb3RlY3RlZFRoaXMgPSBtYWtl
UmVmKCp0aGlzKSwgY29udGV4dERhdGEgPSBjb250ZXh0RGF0YS5pc29sYXRlZENvcHkoKV0oKSBt
dXRhYmxlIHsKICAgICAgICAgICAgIHByb3RlY3RlZFRoaXMtPmFkZFJlZ2lzdHJhdGlvblRvU3Rv
cmUoV1RGTW92ZShjb250ZXh0RGF0YSkpOwpJbmRleDogU291cmNlL1dlYktpdC9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1OTg5OCkK
KysrIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzUg
QEAKKzIwMjAtMDQtMTAgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9y
Zz4KKworICAgICAgICBQZXJzaXN0ZW50Q29kZXJzIHNob3VsZCB1c2UgbW9kZXJuIGRlY29kaW5n
IHN5bnRheAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjA3NDk3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZS5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6ZGVjb2RlRE9NQ2FjaGVSZWNvcmQpOgorICAgICAg
ICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlOjpkZWNvZGVSZWNvcmRIZWFkZXIpOgorICAg
ICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5jcHA6
CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGVzOjpyZWFkT3JpZ2luKToKKyAg
ICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpkZWNvZGVDYWNoZXNOYW1lcyk6CisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlQ29kZXJzLmNwcDoKKyAgICAgICAg
KFdURjo6UGVyc2lzdGVuY2U6OkNvZGVyPFdlYkNvcmU6OkhUVFBIZWFkZXJNYXA+OjpkZWNvZGUp
OgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUVudHJ5LmNwcDoK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpFbnRyeTo6ZGVjb2RlU3RvcmFnZVJlY29y
ZCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlS2V5LmNwcDoK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpLZXk6OmRlY29kZSk6CisgICAgICAgICog
TmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlS2V5Lmg6CisgICAgICAgICogTmV0d29y
a1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtDYWNoZTo6ZGVjb2RlUmVjb3JkTWV0YURhdGEpOgorICAgICAgICAqIE5ldHdvcmtQ
cm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN1YnJlc291cmNlc0VudHJ5LmNwcDoKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya0NhY2hlOjpTdWJyZXNvdXJjZUluZm86OmVuY29kZSBjb25zdCk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6U3VicmVzb3VyY2VJbmZvOjpkZWNvZGUpOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OlN1YnJlc291cmNlc0VudHJ5OjpkZWNvZGVT
dG9yYWdlUmVjb3JkKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2Fj
aGVTdWJyZXNvdXJjZXNFbnRyeS5oOgorICAgICAgICAqIFNoYXJlZC9Vc2VyRGF0YS5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OlVzZXJEYXRhOjpkZWNvZGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvQVBJQ29udGVudFJ1bGVMaXN0U3RvcmUuY3BwOgorICAgICAgICAoQVBJOjpkZWNvZGVDb250
ZW50UnVsZUxpc3RNZXRhRGF0YSk6CisKIDIwMjAtMDQtMTAgIENocmlzIER1bWV6ICA8Y2R1bWV6
QGFwcGxlLmNvbT4KIAogICAgICAgICBGaXJzdCByZW5kZXIgYWZ0ZXIgYSBwcm9jZXNzIHN3YXAg
ZG9lcyBub3QgdXNlIGFjY2VsZXJhdGVkIHJlbmRlcmluZwpJbmRleDogU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdp
bmVDYWNoZS5jcHAJKHJldmlzaW9uIDI1OTg5OCkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01NzIsNDUgKzU3Miw4MCBAQCBTdG9yYWdlOjpSZWNvcmQgQ2FjaGU6OmVuY29kZShjb25zdCBS
ZWNvCiAgICAgcmV0dXJuIHsgcmVjb3JkSW5mb3JtYXRpb24ua2V5LCB7IH0sIGhlYWRlciwgYm9k
eSwgeyB9IH07CiB9CiAKLU9wdGlvbmFsPENhY2hlOjpEZWNvZGVkUmVjb3JkPiBDYWNoZTo6ZGVj
b2RlUmVjb3JkSGVhZGVyKGNvbnN0IFN0b3JhZ2U6OlJlY29yZCYgc3RvcmFnZSkKK3N0YXRpYyBP
cHRpb25hbDxXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6UmVjb3JkPiBkZWNvZGVET01DYWNoZVJl
Y29yZChXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyJiBkZWNvZGVyKQogewotICAgIFdURjo6UGVy
c2lzdGVuY2U6OkRlY29kZXIgZGVjb2RlcihzdG9yYWdlLmhlYWRlci5kYXRhKCksIHN0b3JhZ2Uu
aGVhZGVyLnNpemUoKSk7Ci0KLSAgICBSZWNvcmQgcmVjb3JkOwotCi0gICAgZG91YmxlIGluc2Vy
dGlvblRpbWU7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShpbnNlcnRpb25UaW1lKSkKLSAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIHVpbnQ2NF90IHNpemU7Ci0gICAgaWYgKCFk
ZWNvZGVyLmRlY29kZShzaXplKSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAg
IGlmICghZGVjb2Rlci5kZWNvZGUocmVjb3JkLnJlcXVlc3RIZWFkZXJzR3VhcmQpKQotICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgaWYgKCFyZWNvcmQucmVxdWVzdC5kZWNvZGVX
aXRob3V0UGxhdGZvcm1EYXRhKGRlY29kZXIpKQorICAgIE9wdGlvbmFsPEZldGNoSGVhZGVyczo6
R3VhcmQ+IHJlcXVlc3RIZWFkZXJzR3VhcmQ7CisgICAgZGVjb2RlciA+PiByZXF1ZXN0SGVhZGVy
c0d1YXJkOworICAgIGlmICghcmVxdWVzdEhlYWRlcnNHdWFyZCkKKyAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKKyAgICAKKyAgICBSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdDsKKyAgICBpZiAo
IXJlcXVlc3QuZGVjb2RlV2l0aG91dFBsYXRmb3JtRGF0YShkZWNvZGVyKSkKKyAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKKyAgICAKKyAgICBGZXRjaE9wdGlvbnMgb3B0aW9uczsKKyAgICBp
ZiAoIUZldGNoT3B0aW9uczo6ZGVjb2RlUGVyc2lzdGVudChkZWNvZGVyLCBvcHRpb25zKSkKKyAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAKKyAgICBPcHRpb25hbDxTdHJpbmc+IHJl
ZmVycmVyOworICAgIGRlY29kZXIgPj4gcmVmZXJyZXI7CisgICAgaWYgKCFyZWZlcnJlcikKKyAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAKKyAgICBPcHRpb25hbDxGZXRjaEhlYWRl
cnM6Okd1YXJkPiByZXNwb25zZUhlYWRlcnNHdWFyZDsKKyAgICBkZWNvZGVyID4+IHJlc3BvbnNl
SGVhZGVyc0d1YXJkOworICAgIGlmICghcmVzcG9uc2VIZWFkZXJzR3VhcmQpCisgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlOworICAg
IGlmICghUmVzb3VyY2VSZXNwb25zZTo6ZGVjb2RlKGRlY29kZXIsIHJlc3BvbnNlKSkKKyAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAKKyAgICBPcHRpb25hbDx1aW50NjRfdD4gcmVz
cG9uc2VCb2R5U2l6ZTsKKyAgICBkZWNvZGVyID4+IHJlc3BvbnNlQm9keVNpemU7CisgICAgaWYg
KCFyZXNwb25zZUJvZHlTaXplKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAg
aWYgKCFGZXRjaE9wdGlvbnM6OmRlY29kZVBlcnNpc3RlbnQoZGVjb2RlciwgcmVjb3JkLm9wdGlv
bnMpKQorICAgIGlmICghZGVjb2Rlci52ZXJpZnlDaGVja3N1bSgpKQogICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwogCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZWNvcmQucmVmZXJyZXIp
KQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJldHVybiB7eworICAgICAgICAw
LAorICAgICAgICAwLAorICAgICAgICBXVEZNb3ZlKCpyZXF1ZXN0SGVhZGVyc0d1YXJkKSwKKyAg
ICAgICAgV1RGTW92ZShyZXF1ZXN0KSwKKyAgICAgICAgV1RGTW92ZShvcHRpb25zKSwKKyAgICAg
ICAgV1RGTW92ZSgqcmVmZXJyZXIpLAorICAgICAgICBXVEZNb3ZlKCpyZXNwb25zZUhlYWRlcnNH
dWFyZCksCisgICAgICAgIFdURk1vdmUocmVzcG9uc2UpLAorICAgICAgICB7IH0sCisgICAgICAg
IFdURk1vdmUoKnJlc3BvbnNlQm9keVNpemUpCisgICAgfX07Cit9CiAKLSAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKHJlY29yZC5yZXNwb25zZUhlYWRlcnNHdWFyZCkpCi0gICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CitPcHRpb25hbDxDYWNoZTo6RGVjb2RlZFJlY29yZD4gQ2FjaGU6OmRlY29k
ZVJlY29yZEhlYWRlcihjb25zdCBTdG9yYWdlOjpSZWNvcmQmIHN0b3JhZ2UpCit7CisgICAgV1RG
OjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyKHN0b3JhZ2UuaGVhZGVyLmRhdGEoKSwgc3Rv
cmFnZS5oZWFkZXIuc2l6ZSgpKTsKIAotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVjb3JkLnJl
c3BvbnNlKSkKKyAgICBPcHRpb25hbDxkb3VibGU+IGluc2VydGlvblRpbWU7CisgICAgZGVjb2Rl
ciA+PiBpbnNlcnRpb25UaW1lOworICAgIGlmICghaW5zZXJ0aW9uVGltZSkKICAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVjb3JkLnJlc3Bv
bnNlQm9keVNpemUpKQorICAgIE9wdGlvbmFsPHVpbnQ2NF90PiBzaXplOworICAgIGRlY29kZXIg
Pj4gc2l6ZTsKKyAgICBpZiAoIXNpemUpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAK
LSAgICBpZiAoIWRlY29kZXIudmVyaWZ5Q2hlY2tzdW0oKSkKKyAgICBPcHRpb25hbDxXZWJDb3Jl
OjpET01DYWNoZUVuZ2luZTo6UmVjb3JkPiByZWNvcmQgPSBkZWNvZGVET01DYWNoZVJlY29yZChk
ZWNvZGVyKTsKKyAgICBpZiAoIXJlY29yZCkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
IAotICAgIHJldHVybiBEZWNvZGVkUmVjb3JkIHsgaW5zZXJ0aW9uVGltZSwgc2l6ZSwgV1RGTW92
ZShyZWNvcmQpIH07CisgICAgcmV0dXJuIHt7CisgICAgICAgIFdURk1vdmUoKmluc2VydGlvblRp
bWUpLAorICAgICAgICBXVEZNb3ZlKCpzaXplKSwKKyAgICAgICAgV1RGTW92ZSgqcmVjb3JkKQor
ICAgIH19OwogfQogCiBPcHRpb25hbDxSZWNvcmQ+IENhY2hlOjpkZWNvZGUoY29uc3QgU3RvcmFn
ZTo6UmVjb3JkJiBzdG9yYWdlKQpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9j
YWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmNwcAko
cmV2aXNpb24gMjU5ODk4KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9D
YWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTIsMjMgKzEx
MiwyMiBAQCB2b2lkIENhY2hlczo6c3RvcmVPcmlnaW4oQ29tcGxldGlvbkNhbGxiCiAKIE9wdGlv
bmFsPFdlYkNvcmU6OkNsaWVudE9yaWdpbj4gQ2FjaGVzOjpyZWFkT3JpZ2luKGNvbnN0IERhdGEm
IGRhdGEpCiB7Ci0gICAgLy8gRklYTUU6IFdlIHNob3VsZCBiZSBhYmxlIHRvIHVzZSBtb2Rlcm4g
ZGVjb2RlcnMgZm9yIHBlcnNpc3RlbnQgZGF0YS4KLSAgICBXZWJDb3JlOjpTZWN1cml0eU9yaWdp
bkRhdGEgdG9wT3JpZ2luLCBjbGllbnRPcmlnaW47CiAgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVj
b2RlciBkZWNvZGVyKGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSk7CiAKLSAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKHRvcE9yaWdpbi5wcm90b2NvbCkpCisgICAgT3B0aW9uYWw8V2ViQ29yZTo6U2Vj
dXJpdHlPcmlnaW5EYXRhPiB0b3BPcmlnaW47CisgICAgZGVjb2RlciA+PiB0b3BPcmlnaW47Cisg
ICAgaWYgKCF0b3BPcmlnaW4pCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgaWYg
KCFkZWNvZGVyLmRlY29kZSh0b3BPcmlnaW4uaG9zdCkpCi0gICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZSh0b3BPcmlnaW4ucG9ydCkpCi0gICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShjbGllbnRPcmln
aW4ucHJvdG9jb2wpKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIGlmICghZGVj
b2Rlci5kZWNvZGUoY2xpZW50T3JpZ2luLmhvc3QpKQotICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoY2xpZW50T3JpZ2luLnBvcnQpKQorCisgICAg
T3B0aW9uYWw8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhPiBjbGllbnRPcmlnaW47CisgICAg
ZGVjb2RlciA+PiBjbGllbnRPcmlnaW47CisgICAgaWYgKCFjbGllbnRPcmlnaW4pCiAgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgcmV0dXJuIFdlYkNvcmU6OkNsaWVudE9yaWdpbiB7
IFdURk1vdmUodG9wT3JpZ2luKSwgV1RGTW92ZShjbGllbnRPcmlnaW4pIH07CisKKyAgICByZXR1
cm4ge3sKKyAgICAgICAgV1RGTW92ZSgqdG9wT3JpZ2luKSwKKyAgICAgICAgV1RGTW92ZSgqY2xp
ZW50T3JpZ2luKQorICAgIH19OwogfQogCiB2b2lkIENhY2hlczo6aW5pdGlhbGl6ZShXZWJDb3Jl
OjpET01DYWNoZUVuZ2luZTo6Q29tcGxldGlvbkNhbGxiYWNrJiYgY2FsbGJhY2spCkBAIC00MTEs
MjMgKzQxMCwyNiBAQCBzdGF0aWMgaW5saW5lIERhdGEgZW5jb2RlQ2FjaGVOYW1lcyhjb25zCiBz
dGF0aWMgaW5saW5lIEV4cGVjdGVkPFZlY3RvcjxzdGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+Piwg
RXJyb3I+IGRlY29kZUNhY2hlc05hbWVzKGNvbnN0IERhdGEmIGRhdGEpCiB7CiAgICAgV1RGOjpQ
ZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyKGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSk7Ci0g
ICAgdWludDY0X3QgY291bnQ7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShjb3VudCkpCisgICAg
T3B0aW9uYWw8dWludDY0X3Q+IGNvdW50OworICAgIGRlY29kZXIgPj4gY291bnQ7CisgICAgaWYg
KCFjb3VudCkKICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEVycm9yOjpSZWFkRGlzayk7
CiAKICAgICBWZWN0b3I8c3RkOjpwYWlyPFN0cmluZywgU3RyaW5nPj4gbmFtZXM7Ci0gICAgaWYg
KCFuYW1lcy50cnlSZXNlcnZlQ2FwYWNpdHkoY291bnQpKQorICAgIGlmICghbmFtZXMudHJ5UmVz
ZXJ2ZUNhcGFjaXR5KCpjb3VudCkpCiAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChFcnJv
cjo6UmVhZERpc2spOwogCi0gICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IGNvdW50
OyArK2luZGV4KSB7Ci0gICAgICAgIFN0cmluZyBuYW1lOwotICAgICAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlKG5hbWUpKQorICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCAqY291bnQ7
ICsraW5kZXgpIHsKKyAgICAgICAgT3B0aW9uYWw8U3RyaW5nPiBuYW1lOworICAgICAgICBkZWNv
ZGVyID4+IG5hbWU7CisgICAgICAgIGlmICghbmFtZSkKICAgICAgICAgICAgIHJldHVybiBtYWtl
VW5leHBlY3RlZChFcnJvcjo6UmVhZERpc2spOwotICAgICAgICBTdHJpbmcgdW5pcXVlTmFtZTsK
LSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZSh1bmlxdWVOYW1lKSkKKyAgICAgICAgT3B0aW9u
YWw8U3RyaW5nPiB1bmlxdWVOYW1lOworICAgICAgICBkZWNvZGVyID4+IHVuaXF1ZU5hbWU7Cisg
ICAgICAgIGlmICghdW5pcXVlTmFtZSkKICAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZChFcnJvcjo6UmVhZERpc2spOwogCi0gICAgICAgIG5hbWVzLnVuY2hlY2tlZEFwcGVuZChzdGQ6
OnBhaXI8U3RyaW5nLCBTdHJpbmc+IHsgV1RGTW92ZShuYW1lKSwgV1RGTW92ZSh1bmlxdWVOYW1l
KSB9KTsKKyAgICAgICAgbmFtZXMudW5jaGVja2VkQXBwZW5kKHsgV1RGTW92ZSgqbmFtZSksIFdU
Rk1vdmUoKnVuaXF1ZU5hbWUpIH0pOwogICAgIH0KICAgICByZXR1cm4gbmFtZXM7CiB9CkluZGV4
OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUNvZGVycy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3
b3JrQ2FjaGVDb2RlcnMuY3BwCShyZXZpc2lvbiAyNTk4OTgpCisrKyBTb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUNvZGVycy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQwLDIxICs0MCwyNiBAQCB2b2lkIENvZGVyPFdlYkNvcmU6OkhUVFBIZWFkZXJNYXA+Ojpl
bmNvCiAgICAgfQogfQogCi1ib29sIENvZGVyPFdlYkNvcmU6OkhUVFBIZWFkZXJNYXA+OjpkZWNv
ZGUoRGVjb2RlciYgZGVjb2RlciwgV2ViQ29yZTo6SFRUUEhlYWRlck1hcCYgaGVhZGVycykKK09w
dGlvbmFsPFdlYkNvcmU6OkhUVFBIZWFkZXJNYXA+IENvZGVyPFdlYkNvcmU6OkhUVFBIZWFkZXJN
YXA+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIHsKLSAgICB1aW50NjRfdCBoZWFkZXJzU2l6
ZTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGhlYWRlcnNTaXplKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIGZvciAodWludDY0X3QgaSA9IDA7IGkgPCBoZWFkZXJzU2l6ZTsgKytpKSB7
Ci0gICAgICAgIFN0cmluZyBuYW1lOwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKG5hbWUp
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBTdHJpbmcgdmFsdWU7Ci0gICAg
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICBoZWFkZXJzLmFwcGVuZChuYW1lLCB2YWx1ZSk7CisgICAgT3B0aW9uYWw8dWlu
dDY0X3Q+IGhlYWRlcnNTaXplOworICAgIGRlY29kZXIgPj4gaGVhZGVyc1NpemU7CisgICAgaWYg
KCFoZWFkZXJzU2l6ZSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIFdlYkNv
cmU6OkhUVFBIZWFkZXJNYXAgaGVhZGVyczsKKyAgICBmb3IgKHVpbnQ2NF90IGkgPSAwOyBpIDwg
KmhlYWRlcnNTaXplOyArK2kpIHsKKyAgICAgICAgT3B0aW9uYWw8U3RyaW5nPiBuYW1lOworICAg
ICAgICBkZWNvZGVyID4+IG5hbWU7CisgICAgICAgIGlmICghbmFtZSkKKyAgICAgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIE9wdGlvbmFsPFN0cmluZz4gdmFsdWU7CisgICAg
ICAgIGRlY29kZXIgPj4gdmFsdWU7CisgICAgICAgIGlmICghdmFsdWUpCisgICAgICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICBoZWFkZXJzLmFwcGVuZChXVEZNb3ZlKCpuYW1l
KSwgV1RGTW92ZSgqdmFsdWUpKTsKICAgICB9Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJu
IFdURk1vdmUoaGVhZGVycyk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlQ29kZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVDb2RlcnMuaAkocmV2aXNpb24g
MjU5ODk4KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2Fj
aGVDb2RlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQCBuYW1lc3BhY2UgUGVy
c2lzdGVuY2UgewogCiB0ZW1wbGF0ZTw+IHN0cnVjdCBDb2RlcjxXZWJDb3JlOjpIVFRQSGVhZGVy
TWFwPiB7CiAgICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25zdCBXZWJDb3JlOjpI
VFRQSGVhZGVyTWFwJik7Ci0gICAgc3RhdGljIGJvb2wgZGVjb2RlKERlY29kZXImLCBXZWJDb3Jl
OjpIVFRQSGVhZGVyTWFwJik7CisgICAgc3RhdGljIE9wdGlvbmFsPFdlYkNvcmU6OkhUVFBIZWFk
ZXJNYXA+IGRlY29kZShEZWNvZGVyJik7CiB9OwogCiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUVudHJ5LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUVudHJ5LmNwcAko
cmV2aXNpb24gMjU5ODk4KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9O
ZXR3b3JrQ2FjaGVFbnRyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMiwzMSArMTEyLDQxIEBA
IHN0ZDo6dW5pcXVlX3B0cjxFbnRyeT4gRW50cnk6OmRlY29kZVN0b3IKICAgICBhdXRvIGVudHJ5
ID0gbWFrZVVuaXF1ZTxFbnRyeT4oc3RvcmFnZUVudHJ5KTsKIAogICAgIFdURjo6UGVyc2lzdGVu
Y2U6OkRlY29kZXIgZGVjb2RlcihzdG9yYWdlRW50cnkuaGVhZGVyLmRhdGEoKSwgc3RvcmFnZUVu
dHJ5LmhlYWRlci5zaXplKCkpOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoZW50cnktPm1fcmVz
cG9uc2UpKQorICAgIFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2U7CisgICAgaWYg
KCFXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlOjpkZWNvZGUoZGVjb2RlciwgcmVzcG9uc2UpKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBlbnRyeS0+bV9yZXNwb25zZSA9IFdURk1vdmUo
cmVzcG9uc2UpOwogICAgIGVudHJ5LT5tX3Jlc3BvbnNlLnNldFNvdXJjZShXZWJDb3JlOjpSZXNv
dXJjZVJlc3BvbnNlOjpTb3VyY2U6OkRpc2tDYWNoZSk7CiAKLSAgICBib29sIGhhc1ZhcnlpbmdS
ZXF1ZXN0SGVhZGVyczsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGhhc1ZhcnlpbmdSZXF1ZXN0
SGVhZGVycykpCisgICAgT3B0aW9uYWw8Ym9vbD4gaGFzVmFyeWluZ1JlcXVlc3RIZWFkZXJzOwor
ICAgIGRlY29kZXIgPj4gaGFzVmFyeWluZ1JlcXVlc3RIZWFkZXJzOworICAgIGlmICghaGFzVmFy
eWluZ1JlcXVlc3RIZWFkZXJzKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGlmICho
YXNWYXJ5aW5nUmVxdWVzdEhlYWRlcnMpIHsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShl
bnRyeS0+bV92YXJ5aW5nUmVxdWVzdEhlYWRlcnMpKQorICAgIGlmICgqaGFzVmFyeWluZ1JlcXVl
c3RIZWFkZXJzKSB7CisgICAgICAgIE9wdGlvbmFsPFZlY3RvcjxzdGQ6OnBhaXI8U3RyaW5nLCBT
dHJpbmc+Pj4gdmFyeWluZ1JlcXVlc3RIZWFkZXJzOworICAgICAgICBkZWNvZGVyID4+IHZhcnlp
bmdSZXF1ZXN0SGVhZGVyczsKKyAgICAgICAgaWYgKCF2YXJ5aW5nUmVxdWVzdEhlYWRlcnMpCiAg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgZW50cnktPm1fdmFyeWluZ1JlcXVl
c3RIZWFkZXJzID0gV1RGTW92ZSgqdmFyeWluZ1JlcXVlc3RIZWFkZXJzKTsKICAgICB9CiAKLSAg
ICBib29sIGlzUmVkaXJlY3Q7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShpc1JlZGlyZWN0KSkK
KyAgICBPcHRpb25hbDxib29sPiBpc1JlZGlyZWN0OworICAgIGRlY29kZXIgPj4gaXNSZWRpcmVj
dDsKKyAgICBpZiAoIWlzUmVkaXJlY3QpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAg
aWYgKGlzUmVkaXJlY3QpIHsKKyAgICBpZiAoKmlzUmVkaXJlY3QpIHsKICAgICAgICAgZW50cnkt
Pm1fcmVkaXJlY3RSZXF1ZXN0LmVtcGxhY2UoKTsKICAgICAgICAgaWYgKCFlbnRyeS0+bV9yZWRp
cmVjdFJlcXVlc3QtPmRlY29kZVdpdGhvdXRQbGF0Zm9ybURhdGEoZGVjb2RlcikpCiAgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGVu
dHJ5LT5tX21heEFnZUNhcCkpCisgICAgT3B0aW9uYWw8T3B0aW9uYWw8U2Vjb25kcz4+IG1heEFn
ZUNhcDsKKyAgICBkZWNvZGVyID4+IG1heEFnZUNhcDsKKyAgICBpZiAoIW1heEFnZUNhcCkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgZW50cnktPm1fbWF4QWdlQ2FwID0gV1RGTW92ZSgq
bWF4QWdlQ2FwKTsKIAogICAgIGlmICghZGVjb2Rlci52ZXJpZnlDaGVja3N1bSgpKSB7CiAgICAg
ICAgIExPRyhOZXR3b3JrQ2FjaGUsICIoTmV0d29ya1Byb2Nlc3MpIGNoZWNrc3VtIHZlcmlmaWNh
dGlvbiBmYWlsdXJlXG4iKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvTmV0d29ya0NhY2hlS2V5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUtleS5jcHAJKHJldmlzaW9uIDI1OTg5OCkKKysr
IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlS2V5LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTczLDkgKzE3Myw0NyBAQCB2b2lkIEtleTo6ZW5jb2RlKFdURjo6
UGVyc2lzdGVuY2U6OkVuY29kCiAgICAgZW5jb2RlciA8PCBtX3BhcnRpdGlvbkhhc2g7CiB9CiAK
LWJvb2wgS2V5OjpkZWNvZGUoV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciYgZGVjb2RlciwgS2V5
JiBrZXkpCitPcHRpb25hbDxLZXk+IEtleTo6ZGVjb2RlKFdURjo6UGVyc2lzdGVuY2U6OkRlY29k
ZXImIGRlY29kZXIpCiB7Ci0gICAgcmV0dXJuIGRlY29kZXIuZGVjb2RlKGtleS5tX3BhcnRpdGlv
bikgJiYgZGVjb2Rlci5kZWNvZGUoa2V5Lm1fdHlwZSkgJiYgZGVjb2Rlci5kZWNvZGUoa2V5Lm1f
aWRlbnRpZmllcikgJiYgZGVjb2Rlci5kZWNvZGUoa2V5Lm1fcmFuZ2UpICYmIGRlY29kZXIuZGVj
b2RlKGtleS5tX2hhc2gpICYmIGRlY29kZXIuZGVjb2RlKGtleS5tX3BhcnRpdGlvbkhhc2gpOwor
ICAgIEtleSBrZXk7CisgICAgCisgICAgT3B0aW9uYWw8U3RyaW5nPiBwYXJ0aXRpb247CisgICAg
ZGVjb2RlciA+PiBwYXJ0aXRpb247CisgICAgaWYgKCFwYXJ0aXRpb24pCisgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CisgICAga2V5Lm1fcGFydGl0aW9uID0gV1RGTW92ZSgqcGFydGl0aW9u
KTsKKworICAgIE9wdGlvbmFsPFN0cmluZz4gdHlwZTsKKyAgICBkZWNvZGVyID4+IHR5cGU7Cisg
ICAgaWYgKCF0eXBlKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIGtleS5tX3R5
cGUgPSBXVEZNb3ZlKCp0eXBlKTsKKworICAgIE9wdGlvbmFsPFN0cmluZz4gaWRlbnRpZmllcjsK
KyAgICBkZWNvZGVyID4+IGlkZW50aWZpZXI7CisgICAgaWYgKCFpZGVudGlmaWVyKQorICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIGtleS5tX2lkZW50aWZpZXIgPSBXVEZNb3ZlKCpp
ZGVudGlmaWVyKTsKKworICAgIE9wdGlvbmFsPFN0cmluZz4gcmFuZ2U7CisgICAgZGVjb2RlciA+
PiByYW5nZTsKKyAgICBpZiAoIXJhbmdlKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owor
ICAgIGtleS5tX3JhbmdlID0gV1RGTW92ZSgqcmFuZ2UpOworCisgICAgT3B0aW9uYWw8SGFzaFR5
cGU+IGhhc2g7CisgICAgZGVjb2RlciA+PiBoYXNoOworICAgIGlmICghaGFzaCkKKyAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBrZXkubV9oYXNoID0gV1RGTW92ZSgqaGFzaCk7CisK
KyAgICBPcHRpb25hbDxIYXNoVHlwZT4gcGFydGl0aW9uSGFzaDsKKyAgICBkZWNvZGVyID4+IHBh
cnRpdGlvbkhhc2g7CisgICAgaWYgKCFwYXJ0aXRpb25IYXNoKQorICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OworICAgIGtleS5tX3BhcnRpdGlvbkhhc2ggPSBXVEZNb3ZlKCpwYXJ0aXRpb25I
YXNoKTsKKworICAgIHJldHVybiB7IFdURk1vdmUoa2V5KSB9OwogfQogCiB9CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUtleS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlS2V5
LmgJKHJldmlzaW9uIDI1OTg5OCkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvTmV0d29ya0NhY2hlS2V5LmgJKHdvcmtpbmcgY29weSkKQEAgLTgzLDcgKzgzLDcgQEAgcHVi
bGljOgogICAgIFN0cmluZyBwYXJ0aXRpb25IYXNoQXNTdHJpbmcoKSBjb25zdCB7IHJldHVybiBo
YXNoQXNTdHJpbmcobV9wYXJ0aXRpb25IYXNoKTsgfQogCiAgICAgdm9pZCBlbmNvZGUoV1RGOjpQ
ZXJzaXN0ZW5jZTo6RW5jb2RlciYpIGNvbnN0OwotICAgIHN0YXRpYyBib29sIGRlY29kZShXVEY6
OlBlcnNpc3RlbmNlOjpEZWNvZGVyJiwgS2V5Jik7CisgICAgc3RhdGljIE9wdGlvbmFsPEtleT4g
ZGVjb2RlKFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXImKTsKIAogICAgIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBLZXkmKSBjb25zdDsKICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgS2V5JiBvdGhl
cikgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7IH0KSW5kZXg6IFNvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9y
YWdlLmNwcAkocmV2aXNpb24gMjU5ODk4KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDM4LDI0
ICs0MzgsNTggQEAgc3RhdGljIGJvb2wgZGVjb2RlUmVjb3JkTWV0YURhdGEoUmVjb3JkTQogICAg
IGJvb2wgc3VjY2VzcyA9IGZhbHNlOwogICAgIGZpbGVEYXRhLmFwcGx5KFsmbWV0YURhdGEsICZz
dWNjZXNzXShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkgewogICAgICAgICBXVEY6
OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIoZGF0YSwgc2l6ZSk7Ci0gICAgICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUobWV0YURhdGEuY2FjaGVTdG9yYWdlVmVyc2lvbikpCisgICAgICAgIAor
ICAgICAgICBPcHRpb25hbDx1bnNpZ25lZD4gY2FjaGVTdG9yYWdlVmVyc2lvbjsKKyAgICAgICAg
ZGVjb2RlciA+PiBjYWNoZVN0b3JhZ2VWZXJzaW9uOworICAgICAgICBpZiAoIWNhY2hlU3RvcmFn
ZVZlcnNpb24pCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghZGVjb2Rl
ci5kZWNvZGUobWV0YURhdGEua2V5KSkKKyAgICAgICAgbWV0YURhdGEuY2FjaGVTdG9yYWdlVmVy
c2lvbiA9IFdURk1vdmUoKmNhY2hlU3RvcmFnZVZlcnNpb24pOworCisgICAgICAgIE9wdGlvbmFs
PEtleT4ga2V5OworICAgICAgICBkZWNvZGVyID4+IGtleTsKKyAgICAgICAgaWYgKCFrZXkpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUobWV0
YURhdGEudGltZVN0YW1wKSkKKyAgICAgICAgbWV0YURhdGEua2V5ID0gV1RGTW92ZSgqa2V5KTsK
KworICAgICAgICBPcHRpb25hbDxXYWxsVGltZT4gdGltZVN0YW1wOworICAgICAgICBkZWNvZGVy
ID4+IHRpbWVTdGFtcDsKKyAgICAgICAgaWYgKCF0aW1lU3RhbXApCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUobWV0YURhdGEuaGVhZGVySGFz
aCkpCisgICAgICAgIG1ldGFEYXRhLnRpbWVTdGFtcCA9IFdURk1vdmUoKnRpbWVTdGFtcCk7CisK
KyAgICAgICAgT3B0aW9uYWw8U0hBMTo6RGlnZXN0PiBoZWFkZXJIYXNoOworICAgICAgICBkZWNv
ZGVyID4+IGhlYWRlckhhc2g7CisgICAgICAgIGlmICghaGVhZGVySGFzaCkKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShtZXRhRGF0YS5oZWFk
ZXJTaXplKSkKKyAgICAgICAgbWV0YURhdGEuaGVhZGVySGFzaCA9IFdURk1vdmUoKmhlYWRlckhh
c2gpOworCisgICAgICAgIE9wdGlvbmFsPHVpbnQ2NF90PiBoZWFkZXJTaXplOworICAgICAgICBk
ZWNvZGVyID4+IGhlYWRlclNpemU7CisgICAgICAgIGlmICghaGVhZGVyU2l6ZSkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShtZXRhRGF0YS5i
b2R5SGFzaCkpCisgICAgICAgIG1ldGFEYXRhLmhlYWRlclNpemUgPSBXVEZNb3ZlKCpoZWFkZXJT
aXplKTsKKworICAgICAgICBPcHRpb25hbDxTSEExOjpEaWdlc3Q+IGJvZHlIYXNoOworICAgICAg
ICBkZWNvZGVyID4+IGJvZHlIYXNoOworICAgICAgICBpZiAoIWJvZHlIYXNoKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKG1ldGFEYXRhLmJv
ZHlTaXplKSkKKyAgICAgICAgbWV0YURhdGEuYm9keUhhc2ggPSBXVEZNb3ZlKCpib2R5SGFzaCk7
CisKKyAgICAgICAgT3B0aW9uYWw8dWludDY0X3Q+IGJvZHlTaXplOworICAgICAgICBkZWNvZGVy
ID4+IGJvZHlTaXplOworICAgICAgICBpZiAoIWJvZHlTaXplKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKG1ldGFEYXRhLmlzQm9keUlubGlu
ZSkpCisgICAgICAgIG1ldGFEYXRhLmJvZHlTaXplID0gV1RGTW92ZSgqYm9keVNpemUpOworCisg
ICAgICAgIE9wdGlvbmFsPGJvb2w+IGlzQm9keUlubGluZTsKKyAgICAgICAgZGVjb2RlciA+PiBp
c0JvZHlJbmxpbmU7CisgICAgICAgIGlmICghaXNCb2R5SW5saW5lKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICBtZXRhRGF0YS5pc0JvZHlJbmxpbmUgPSBXVEZNb3ZlKCppc0Jv
ZHlJbmxpbmUpOworCiAgICAgICAgIGlmICghZGVjb2Rlci52ZXJpZnlDaGVja3N1bSgpKQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgICAgIG1ldGFEYXRhLmhlYWRlck9mZnNldCA9
IGRlY29kZXIuY3VycmVudE9mZnNldCgpOwogICAgICAgICBzdWNjZXNzID0gdHJ1ZTsKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9OZXR3b3JrQ2FjaGVTdWJyZXNvdXJjZXNFbnRyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdWJyZXNvdXJjZXNFbnRy
eS5jcHAJKHJldmlzaW9uIDI1OTg5OCkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
Y2FjaGUvTmV0d29ya0NhY2hlU3VicmVzb3VyY2VzRW50cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00OSwzNyArNDksNjUgQEAgdm9pZCBTdWJyZXNvdXJjZUluZm86OmVuY29kZShXVEY6OlBlcnNp
cwogICAgIGVuY29kZXIgPDwgbV9pc1NhbWVTaXRlOwogICAgIGVuY29kZXIgPDwgbV9maXJzdFBh
cnR5Rm9yQ29va2llczsKICAgICBlbmNvZGVyIDw8IG1fcmVxdWVzdEhlYWRlcnM7Ci0gICAgZW5j
b2Rlci5lbmNvZGVFbnVtKG1fcHJpb3JpdHkpOworICAgIGVuY29kZXIgPDwgbV9wcmlvcml0eTsK
IH0KIAotYm9vbCBTdWJyZXNvdXJjZUluZm86OmRlY29kZShXVEY6OlBlcnNpc3RlbmNlOjpEZWNv
ZGVyJiBkZWNvZGVyLCBTdWJyZXNvdXJjZUluZm8mIGluZm8pCitPcHRpb25hbDxTdWJyZXNvdXJj
ZUluZm8+IFN1YnJlc291cmNlSW5mbzo6ZGVjb2RlKFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIm
IGRlY29kZXIpCiB7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShpbmZvLm1fa2V5KSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaW5mby5tX2xhc3RTZWVu
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaW5mby5t
X2ZpcnN0U2VlbikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKGluZm8ubV9pc1RyYW5zaWVudCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAKLSAgICBpZiAoaW5mby5tX2lzVHJhbnNpZW50KQotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICBTdWJyZXNvdXJjZUluZm8gaW5mbzsKIAotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaW5mby5t
X2lzU2FtZVNpdGUpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgT3B0aW9uYWw8S2V5PiBr
ZXk7CisgICAgZGVjb2RlciA+PiBrZXk7CisgICAgaWYgKCFrZXkpCisgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CisgICAgaW5mby5tX2tleSA9IFdURk1vdmUoKmtleSk7CisKKyAgICBPcHRp
b25hbDxXYWxsVGltZT4gbGFzdFNlZW47CisgICAgZGVjb2RlciA+PiBsYXN0U2VlbjsKKyAgICBp
ZiAoIWxhc3RTZWVuKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIGluZm8ubV9s
YXN0U2VlbiA9IFdURk1vdmUoKmxhc3RTZWVuKTsKKworICAgIE9wdGlvbmFsPFdhbGxUaW1lPiBm
aXJzdFNlZW47CisgICAgZGVjb2RlciA+PiBmaXJzdFNlZW47CisgICAgaWYgKCFmaXJzdFNlZW4p
CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgaW5mby5tX2ZpcnN0U2VlbiA9IFdU
Rk1vdmUoKmZpcnN0U2Vlbik7CisKKyAgICBPcHRpb25hbDxib29sPiBpc1RyYW5zaWVudDsKKyAg
ICBkZWNvZGVyID4+IGlzVHJhbnNpZW50OworICAgIGlmICghaXNUcmFuc2llbnQpCisgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgaW5mby5tX2lzVHJhbnNpZW50ID0gV1RGTW92ZSgq
aXNUcmFuc2llbnQpOwogCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShpbmZvLm1fZmlyc3RQYXJ0
eUZvckNvb2tpZXMpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlKGluZm8ubV9yZXF1ZXN0SGVhZGVycykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBpZiAoaW5mby5tX2lzVHJhbnNpZW50KQorICAgICAgICByZXR1cm4geyBXVEZNb3ZlKGluZm8p
IH07CiAKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlRW51bShpbmZvLm1fcHJpb3JpdHkpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgT3B0aW9uYWw8Ym9vbD4gaXNTYW1lU2l0ZTsKKyAgICBk
ZWNvZGVyID4+IGlzU2FtZVNpdGU7CisgICAgaWYgKCFpc1NhbWVTaXRlKQorICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OworICAgIGluZm8ubV9pc1NhbWVTaXRlID0gV1RGTW92ZSgqaXNTYW1l
U2l0ZSk7CisKKyAgICBPcHRpb25hbDxVUkw+IGZpcnN0UGFydHlGb3JDb29raWVzOworICAgIGRl
Y29kZXIgPj4gZmlyc3RQYXJ0eUZvckNvb2tpZXM7CisgICAgaWYgKCFmaXJzdFBhcnR5Rm9yQ29v
a2llcykKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBpbmZvLm1fZmlyc3RQYXJ0
eUZvckNvb2tpZXMgPSBXVEZNb3ZlKCpmaXJzdFBhcnR5Rm9yQ29va2llcyk7CisKKyAgICBPcHRp
b25hbDxXZWJDb3JlOjpIVFRQSGVhZGVyTWFwPiByZXF1ZXN0SGVhZGVyczsKKyAgICBkZWNvZGVy
ID4+IHJlcXVlc3RIZWFkZXJzOworICAgIGlmICghcmVxdWVzdEhlYWRlcnMpCisgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CisgICAgaW5mby5tX3JlcXVlc3RIZWFkZXJzID0gV1RGTW92ZSgq
cmVxdWVzdEhlYWRlcnMpOworCisgICAgT3B0aW9uYWw8V2ViQ29yZTo6UmVzb3VyY2VMb2FkUHJp
b3JpdHk+IHByaW9yaXR5OworICAgIGRlY29kZXIgPj4gcHJpb3JpdHk7CisgICAgaWYgKCFwcmlv
cml0eSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBpbmZvLm1fcHJpb3JpdHkg
PSBXVEZNb3ZlKCpwcmlvcml0eSk7CiAgICAgCi0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJu
IHsgV1RGTW92ZShpbmZvKSB9OwogfQogCiBib29sIFN1YnJlc291cmNlSW5mbzo6aXNGaXJzdFBh
cnR5KCkgY29uc3QKQEAgLTEwMyw4ICsxMzEsMTEgQEAgc3RkOjp1bmlxdWVfcHRyPFN1YnJlc291
cmNlc0VudHJ5PiBTdWJyZQogICAgIGF1dG8gZW50cnkgPSBtYWtlVW5pcXVlPFN1YnJlc291cmNl
c0VudHJ5PihzdG9yYWdlRW50cnkpOwogCiAgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBk
ZWNvZGVyKHN0b3JhZ2VFbnRyeS5oZWFkZXIuZGF0YSgpLCBzdG9yYWdlRW50cnkuaGVhZGVyLnNp
emUoKSk7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShlbnRyeS0+bV9zdWJyZXNvdXJjZXMpKQor
ICAgIE9wdGlvbmFsPFZlY3RvcjxTdWJyZXNvdXJjZUluZm8+PiBzdWJyZXNvdXJjZXM7CisgICAg
ZGVjb2RlciA+PiBzdWJyZXNvdXJjZXM7CisgICAgaWYgKCFzdWJyZXNvdXJjZXMpCiAgICAgICAg
IHJldHVybiBudWxscHRyOworICAgIGVudHJ5LT5tX3N1YnJlc291cmNlcyA9IFdURk1vdmUoKnN1
YnJlc291cmNlcyk7CiAKICAgICBpZiAoIWRlY29kZXIudmVyaWZ5Q2hlY2tzdW0oKSkgewogICAg
ICAgICBMT0coTmV0d29ya0NhY2hlLCAiKE5ldHdvcmtQcm9jZXNzKSBjaGVja3N1bSB2ZXJpZmlj
YXRpb24gZmFpbHVyZVxuIik7CkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2Nh
Y2hlL05ldHdvcmtDYWNoZVN1YnJlc291cmNlc0VudHJ5LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdWJyZXNvdXJjZXNFbnRy
eS5oCShyZXZpc2lvbiAyNTk4OTgpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2Nh
Y2hlL05ldHdvcmtDYWNoZVN1YnJlc291cmNlc0VudHJ5LmgJKHdvcmtpbmcgY29weSkKQEAgLTM5
LDcgKzM5LDcgQEAgY2xhc3MgU3VicmVzb3VyY2VJbmZvIHsKICAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKIHB1YmxpYzoKICAgICB2b2lkIGVuY29kZShXVEY6OlBlcnNpc3RlbmNlOjpFbmNv
ZGVyJikgY29uc3Q7Ci0gICAgc3RhdGljIGJvb2wgZGVjb2RlKFdURjo6UGVyc2lzdGVuY2U6OkRl
Y29kZXImLCBTdWJyZXNvdXJjZUluZm8mKTsKKyAgICBzdGF0aWMgT3B0aW9uYWw8U3VicmVzb3Vy
Y2VJbmZvPiBkZWNvZGUoV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciYpOwogCiAgICAgU3VicmVz
b3VyY2VJbmZvKCkgPSBkZWZhdWx0OwogICAgIFN1YnJlc291cmNlSW5mbyhjb25zdCBLZXkmLCBj
b25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBTdWJyZXNvdXJjZUluZm8qIHBy
ZXZpb3VzSW5mbyk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC9Vc2VyRGF0YS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQvVXNlckRhdGEuY3BwCShyZXZpc2lvbiAy
NTk4OTgpCisrKyBTb3VyY2UvV2ViS2l0L1NoYXJlZC9Vc2VyRGF0YS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM2OSwxMCArMzY5LDExIEBAIGJvb2wgVXNlckRhdGE6OmRlY29kZShJUEM6OkRlY29k
ZXImIGRlY28KICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEFQSTo6T2JqZWN0OjpUeXBlOjpD
ZXJ0aWZpY2F0ZUluZm86IHsKLSAgICAgICAgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvIGNlcnRp
ZmljYXRlSW5mbzsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShjZXJ0aWZpY2F0ZUluZm8p
KQorICAgICAgICBPcHRpb25hbDxXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8+IGNlcnRpZmljYXRl
SW5mbzsKKyAgICAgICAgZGVjb2RlciA+PiBjZXJ0aWZpY2F0ZUluZm87CisgICAgICAgIGlmICgh
Y2VydGlmaWNhdGVJbmZvKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICByZXN1
bHQgPSBXZWJDZXJ0aWZpY2F0ZUluZm86OmNyZWF0ZShjZXJ0aWZpY2F0ZUluZm8pOworICAgICAg
ICByZXN1bHQgPSBXZWJDZXJ0aWZpY2F0ZUluZm86OmNyZWF0ZSgqY2VydGlmaWNhdGVJbmZvKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQVBJQ29udGVudFJ1bGVMaXN0U3RvcmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9BUElDb250ZW50UnVsZUxpc3RTdG9yZS5jcHAJKHJldmlzaW9uIDI1
OTg5OCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElDb250ZW50UnVsZUxpc3RT
dG9yZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3OSwyMCArMTc5LDQ5IEBAIHN0YXRpYyBPcHRp
b25hbDxDb250ZW50UnVsZUxpc3RNZXRhRGF0YT4KICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
IAogICAgICAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIoZGF0YSwgc2l6ZSk7
Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUobWV0YURhdGEudmVyc2lvbikpCisgICAgICAg
IAorICAgICAgICBPcHRpb25hbDx1aW50MzJfdD4gdmVyc2lvbjsKKyAgICAgICAgZGVjb2RlciA+
PiB2ZXJzaW9uOworICAgICAgICBpZiAoIXZlcnNpb24pCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUobWV0YURhdGEuc291cmNlU2l6ZSkpCisg
ICAgICAgIG1ldGFEYXRhLnZlcnNpb24gPSBXVEZNb3ZlKCp2ZXJzaW9uKTsKKworICAgICAgICBP
cHRpb25hbDx1aW50NjRfdD4gc291cmNlU2l6ZTsKKyAgICAgICAgZGVjb2RlciA+PiBzb3VyY2VT
aXplOworICAgICAgICBpZiAoIXNvdXJjZVNpemUpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUobWV0YURhdGEuYWN0aW9uc1NpemUpKQorICAg
ICAgICBtZXRhRGF0YS5zb3VyY2VTaXplID0gV1RGTW92ZSgqc291cmNlU2l6ZSk7CisKKyAgICAg
ICAgT3B0aW9uYWw8dWludDY0X3Q+IGFjdGlvbnNTaXplOworICAgICAgICBkZWNvZGVyID4+IGFj
dGlvbnNTaXplOworICAgICAgICBpZiAoIWFjdGlvbnNTaXplKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKG1ldGFEYXRhLmZpbHRlcnNXaXRo
b3V0Q29uZGl0aW9uc0J5dGVjb2RlU2l6ZSkpCisgICAgICAgIG1ldGFEYXRhLmFjdGlvbnNTaXpl
ID0gV1RGTW92ZSgqYWN0aW9uc1NpemUpOworCisgICAgICAgIE9wdGlvbmFsPHVpbnQ2NF90PiBm
aWx0ZXJzV2l0aG91dENvbmRpdGlvbnNCeXRlY29kZVNpemU7CisgICAgICAgIGRlY29kZXIgPj4g
ZmlsdGVyc1dpdGhvdXRDb25kaXRpb25zQnl0ZWNvZGVTaXplOworICAgICAgICBpZiAoIWZpbHRl
cnNXaXRob3V0Q29uZGl0aW9uc0J5dGVjb2RlU2l6ZSkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShtZXRhRGF0YS5maWx0ZXJzV2l0aENvbmRp
dGlvbnNCeXRlY29kZVNpemUpKQorICAgICAgICBtZXRhRGF0YS5maWx0ZXJzV2l0aG91dENvbmRp
dGlvbnNCeXRlY29kZVNpemUgPSBXVEZNb3ZlKCpmaWx0ZXJzV2l0aG91dENvbmRpdGlvbnNCeXRl
Y29kZVNpemUpOworCisgICAgICAgIE9wdGlvbmFsPHVpbnQ2NF90PiBmaWx0ZXJzV2l0aENvbmRp
dGlvbnNCeXRlY29kZVNpemU7CisgICAgICAgIGRlY29kZXIgPj4gZmlsdGVyc1dpdGhDb25kaXRp
b25zQnl0ZWNvZGVTaXplOworICAgICAgICBpZiAoIWZpbHRlcnNXaXRoQ29uZGl0aW9uc0J5dGVj
b2RlU2l6ZSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFkZWNvZGVy
LmRlY29kZShtZXRhRGF0YS5jb25kaXRpb25lZEZpbHRlcnNCeXRlY29kZVNpemUpKQorICAgICAg
ICBtZXRhRGF0YS5maWx0ZXJzV2l0aENvbmRpdGlvbnNCeXRlY29kZVNpemUgPSBXVEZNb3ZlKCpm
aWx0ZXJzV2l0aENvbmRpdGlvbnNCeXRlY29kZVNpemUpOworCisgICAgICAgIE9wdGlvbmFsPHVp
bnQ2NF90PiBjb25kaXRpb25lZEZpbHRlcnNCeXRlY29kZVNpemU7CisgICAgICAgIGRlY29kZXIg
Pj4gY29uZGl0aW9uZWRGaWx0ZXJzQnl0ZWNvZGVTaXplOworICAgICAgICBpZiAoIWNvbmRpdGlv
bmVkRmlsdGVyc0J5dGVjb2RlU2l6ZSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgaWYgKCFkZWNvZGVyLmRlY29kZShtZXRhRGF0YS5jb25kaXRpb25zQXBwbHlPbmx5VG9Eb21h
aW4pKQorICAgICAgICBtZXRhRGF0YS5jb25kaXRpb25lZEZpbHRlcnNCeXRlY29kZVNpemUgPSBX
VEZNb3ZlKCpjb25kaXRpb25lZEZpbHRlcnNCeXRlY29kZVNpemUpOworCisgICAgICAgIE9wdGlv
bmFsPHVpbnQzMl90PiBjb25kaXRpb25zQXBwbHlPbmx5VG9Eb21haW47CisgICAgICAgIGRlY29k
ZXIgPj4gY29uZGl0aW9uc0FwcGx5T25seVRvRG9tYWluOworICAgICAgICBpZiAoIWNvbmRpdGlv
bnNBcHBseU9ubHlUb0RvbWFpbikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
bWV0YURhdGEuY29uZGl0aW9uc0FwcGx5T25seVRvRG9tYWluID0gV1RGTW92ZSgqY29uZGl0aW9u
c0FwcGx5T25seVRvRG9tYWluKTsKKwogICAgICAgICBzdWNjZXNzID0gdHJ1ZTsKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0pOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>396141</attachid>
            <date>2020-04-10 18:07:12 -0700</date>
            <delta_ts>2020-04-10 21:34:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207497-20200410180711.patch</filename>
            <type>text/plain</type>
            <size>109918</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNTk4OTgpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDM4IEBACisyMDIwLTA0LTEwICBBbGV4IENocmlzdGVuc2VuICA8
YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUGVyc2lzdGVudENvZGVycyBzaG91
bGQgdXNlIG1vZGVybiBkZWNvZGluZyBzeW50YXgKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNzQ5NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF2ZXMgdGhlIHdheSBmb3IgbW9yZSBzZXJpYWxp
emVkIHR5cGVzIHRoYXQgZG8gbm90IGhhdmUgYSBkZWZhdWx0IGNvbnN0cnVjdG9yLgorCisgICAg
ICAgICogd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRDb2Rlci5oOgorICAgICAgICAoV1RGOjpQ
ZXJzaXN0ZW5jZTo6Q29kZXI6OmVuY29kZSk6CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpD
b2Rlcjo6ZGVjb2RlKToKKyAgICAgICAgKiB3dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudENvZGVy
cy5jcHA6CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpDb2RlcjxBdG9tU3RyaW5nPjo6ZGVj
b2RlKToKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkNvZGVyPENTdHJpbmc+OjpkZWNvZGUp
OgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6ZGVjb2RlU3RyaW5nVGV4dCk6CisgICAgICAg
IChXVEY6OlBlcnNpc3RlbmNlOjpDb2RlcjxTdHJpbmc+OjpkZWNvZGUpOgorICAgICAgICAoV1RG
OjpQZXJzaXN0ZW5jZTo6Q29kZXI8U0hBMTo6RGlnZXN0Pjo6ZGVjb2RlKToKKyAgICAgICAgKiB3
dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudENvZGVycy5oOgorICAgICAgICAoV1RGOjpQZXJzaXN0
ZW5jZTo6Q29kZXI8T3B0aW9uYWw8VD4+OjpkZWNvZGUpOgorICAgICAgICAoV1RGOjpQZXJzaXN0
ZW5jZTo6Q29kZXI8U2Vjb25kcz46OmRlY29kZSk6CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNl
OjpDb2RlcjxXYWxsVGltZT46OmRlY29kZSk6CisgICAgICAgICogd3RmL3BlcnNpc3RlbmNlL1Bl
cnNpc3RlbnREZWNvZGVyLmNwcDoKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXI6
OmRlY29kZU51bWJlcik6CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyOjpvcGVy
YXRvcj4+KToKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXI6OmRlY29kZSk6IERl
bGV0ZWQuCisgICAgICAgICogd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnREZWNvZGVyLmg6Cisg
ICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyOjpvcGVyYXRvcj4+KToKKyAgICAgICAg
KFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXI6OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChX
VEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyOjpkZWNvZGVFbnVtKTogRGVsZXRlZC4KKyAgICAgICAg
KiB3dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudEVuY29kZXIuaDoKKyAgICAgICAgKFdURjo6UGVy
c2lzdGVuY2U6OkVuY29kZXI6Om9wZXJhdG9yPDwpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5j
ZTo6RW5jb2Rlcjo6ZW5jb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6
OkVuY29kZXI6OmVuY29kZUVudW0pOiBEZWxldGVkLgorCiAyMDIwLTA0LTEwICBBbGljaWEgQm95
YSBHYXJjw61hICA8YWJveWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBbV1RGXSBEYXRhTXV0ZXg6
IEFkZCBydW5VbmxvY2tlZCgpCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9VUkwuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL3d0Zi9VUkwuaAkocmV2aXNpb24gMjU5ODk4KQorKysgU291cmNlL1dU
Ri93dGYvVVJMLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0OCwxMCArMjQ4LDExIEBAIGJvb2wgVVJM
OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgVVJMJiAKIHRlbXBsYXRlIDxjbGFzcyBEZWNvZGVy
PgogT3B0aW9uYWw8VVJMPiBVUkw6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogewotICAgIFN0
cmluZyBzdHJpbmc7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShzdHJpbmcpKQorICAgIE9wdGlv
bmFsPFN0cmluZz4gc3RyaW5nOworICAgIGRlY29kZXIgPj4gc3RyaW5nOworICAgIGlmICghc3Ry
aW5nKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIHJldHVybiBVUkwoVVJMKCks
IHN0cmluZyk7CisgICAgcmV0dXJuIFVSTChVUkwoKSwgV1RGTW92ZSgqc3RyaW5nKSk7CiB9CiAK
IFdURl9FWFBPUlRfUFJJVkFURSBib29sIGVxdWFsSWdub3JpbmdGcmFnbWVudElkZW50aWZpZXIo
Y29uc3QgVVJMJiwgY29uc3QgVVJMJik7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5j
ZS9QZXJzaXN0ZW50Q29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0
ZW5jZS9QZXJzaXN0ZW50Q29kZXIuaAkocmV2aXNpb24gMjU5ODk4KQorKysgU291cmNlL1dURi93
dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudENvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDE2
ICszMCwxNiBAQCBuYW1lc3BhY2UgUGVyc2lzdGVuY2UgewogCiBjbGFzcyBEZWNvZGVyOwogY2xh
c3MgRW5jb2RlcjsKLSAgICAKKwogdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvZGVyIHsK
ICAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgVCYgdCkKICAg
ICB7CiAgICAgICAgIHQuZW5jb2RlKGVuY29kZXIpOwogICAgIH0KIAotICAgIHN0YXRpYyBXQVJO
X1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgVCYgdCkKKyAgICBz
dGF0aWMgT3B0aW9uYWw8VD4gZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgewotICAgICAg
ICByZXR1cm4gVDo6ZGVjb2RlKGRlY29kZXIsIHQpOworICAgICAgICByZXR1cm4gVDo6ZGVjb2Rl
KGRlY29kZXIpOwogICAgIH0KIH07CiAKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNl
L1BlcnNpc3RlbnRDb2RlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3BlcnNp
c3RlbmNlL1BlcnNpc3RlbnRDb2RlcnMuY3BwCShyZXZpc2lvbiAyNTk4OTgpCisrKyBTb3VyY2Uv
V1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50Q29kZXJzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzcsMTQgKzM3LDE0IEBAIHZvaWQgQ29kZXI8QXRvbVN0cmluZz46OmVuY29kZShFbmNvZGVy
JiAKICAgICBlbmNvZGVyIDw8IGF0b21TdHJpbmcuc3RyaW5nKCk7CiB9CiAKLWJvb2wgQ29kZXI8
QXRvbVN0cmluZz46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBBdG9tU3RyaW5nJiBhdG9tU3Ry
aW5nKQorT3B0aW9uYWw8QXRvbVN0cmluZz4gQ29kZXI8QXRvbVN0cmluZz46OmRlY29kZShEZWNv
ZGVyJiBkZWNvZGVyKQogewotICAgIFN0cmluZyBzdHJpbmc7Ci0gICAgaWYgKCFkZWNvZGVyLmRl
Y29kZShzdHJpbmcpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgT3B0aW9uYWw8U3RyaW5n
PiBzdHJpbmc7CisgICAgZGVjb2RlciA+PiBzdHJpbmc7CisgICAgaWYgKCFzdHJpbmcpCisgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBhdG9tU3RyaW5nID0gc3RyaW5nOwotICAg
IHJldHVybiB0cnVlOworICAgIHJldHVybiB7eyBXVEZNb3ZlKCpzdHJpbmcpIH19OwogfQogCiB2
b2lkIENvZGVyPENTdHJpbmc+OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgQ1N0cmlu
ZyYgc3RyaW5nKQpAQCAtNjAsMzIgKzYwLDMwIEBAIHZvaWQgQ29kZXI8Q1N0cmluZz46OmVuY29k
ZShFbmNvZGVyJiBlbmMKICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVy
cHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihzdHJpbmcuZGF0YSgpKSwgbGVuZ3RoKTsKIH0KIAot
Ym9vbCBDb2RlcjxDU3RyaW5nPjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIENTdHJpbmcmIHJl
c3VsdCkKK09wdGlvbmFsPENTdHJpbmc+IENvZGVyPENTdHJpbmc+OjpkZWNvZGUoRGVjb2RlciYg
ZGVjb2RlcikKIHsKLSAgICB1aW50MzJfdCBsZW5ndGg7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShsZW5ndGgpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgT3B0aW9uYWw8dWludDMyX3Q+
IGxlbmd0aDsKKyAgICBkZWNvZGVyID4+IGxlbmd0aDsKKyAgICBpZiAoIWxlbmd0aCkKKyAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIGlmIChsZW5ndGggPT0gc3RkOjpudW1lcmlj
X2xpbWl0czx1aW50MzJfdD46Om1heCgpKSB7CiAgICAgICAgIC8vIFRoaXMgaXMgdGhlIG51bGwg
c3RyaW5nLgotICAgICAgICByZXN1bHQgPSBDU3RyaW5nKCk7Ci0gICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICByZXR1cm4gQ1N0cmluZygpOwogICAgIH0KIAogICAgIC8vIEJlZm9yZSBhbGxv
Y2F0aW5nIHRoZSBzdHJpbmcsIG1ha2Ugc3VyZSB0aGF0IHRoZSBkZWNvZGVyIGJ1ZmZlciBpcyBi
aWcgZW5vdWdoLgotICAgIGlmICghZGVjb2Rlci5idWZmZXJJc0xhcmdlRW5vdWdoVG9Db250YWlu
PGNoYXI+KGxlbmd0aCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWRlY29kZXIu
YnVmZmVySXNMYXJnZUVub3VnaFRvQ29udGFpbjxjaGFyPigqbGVuZ3RoKSkKKyAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIGNoYXIqIGJ1ZmZlcjsKLSAgICBDU3RyaW5nIHN0cmlu
ZyA9IENTdHJpbmc6Om5ld1VuaW5pdGlhbGl6ZWQobGVuZ3RoLCBidWZmZXIpOwotICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4o
YnVmZmVyKSwgbGVuZ3RoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIENTdHJpbmcgc3Ry
aW5nID0gQ1N0cmluZzo6bmV3VW5pbml0aWFsaXplZCgqbGVuZ3RoLCBidWZmZXIpOworICAgIGlm
ICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDx1aW50OF90
Kj4oYnVmZmVyKSwgKmxlbmd0aCkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAg
ICByZXN1bHQgPSBzdHJpbmc7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIFdURk1vdmUo
c3RyaW5nKTsKIH0KIAotCiB2b2lkIENvZGVyPFN0cmluZz46OmVuY29kZShFbmNvZGVyJiBlbmNv
ZGVyLCBjb25zdCBTdHJpbmcmIHN0cmluZykKIHsKICAgICAvLyBTcGVjaWFsIGNhc2UgdGhlIG51
bGwgc3RyaW5nLgpAQCAtMTA2LDQwICsxMDQsNDAgQEAgdm9pZCBDb2RlcjxTdHJpbmc+OjplbmNv
ZGUoRW5jb2RlciYgZW5jbwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4K
LXN0YXRpYyBpbmxpbmUgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlU3RyaW5nVGV4dChE
ZWNvZGVyJiBkZWNvZGVyLCB1aW50MzJfdCBsZW5ndGgsIFN0cmluZyYgcmVzdWx0KQorc3RhdGlj
IGlubGluZSBPcHRpb25hbDxTdHJpbmc+IGRlY29kZVN0cmluZ1RleHQoRGVjb2RlciYgZGVjb2Rl
ciwgdWludDMyX3QgbGVuZ3RoKQogewogICAgIC8vIEJlZm9yZSBhbGxvY2F0aW5nIHRoZSBzdHJp
bmcsIG1ha2Ugc3VyZSB0aGF0IHRoZSBkZWNvZGVyIGJ1ZmZlciBpcyBiaWcgZW5vdWdoLgogICAg
IGlmICghZGVjb2Rlci5idWZmZXJJc0xhcmdlRW5vdWdoVG9Db250YWluPENoYXJhY3RlclR5cGU+
KGxlbmd0aCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKIAogICAgIENoYXJhY3RlclR5cGUqIGJ1ZmZlcjsKICAgICBTdHJpbmcgc3RyaW5nID0g
U3RyaW5nOjpjcmVhdGVVbmluaXRpYWxpemVkKGxlbmd0aCwgYnVmZmVyKTsKICAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGJ1
ZmZlciksIGxlbmd0aCAqIHNpemVvZihDaGFyYWN0ZXJUeXBlKSkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAKLSAgICByZXN1bHQgPSBz
dHJpbmc7Ci0gICAgcmV0dXJuIHRydWU7ICAgIAorICAgIHJldHVybiBXVEZNb3ZlKHN0cmluZyk7
CiB9CiAKLWJvb2wgQ29kZXI8U3RyaW5nPjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFN0cmlu
ZyYgcmVzdWx0KQorT3B0aW9uYWw8U3RyaW5nPiBDb2RlcjxTdHJpbmc+OjpkZWNvZGUoRGVjb2Rl
ciYgZGVjb2RlcikKIHsKLSAgICB1aW50MzJfdCBsZW5ndGg7Ci0gICAgaWYgKCFkZWNvZGVyLmRl
Y29kZShsZW5ndGgpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgT3B0aW9uYWw8dWludDMy
X3Q+IGxlbmd0aDsKKyAgICBkZWNvZGVyID4+IGxlbmd0aDsKKyAgICBpZiAoIWxlbmd0aCkKKyAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIGlmIChsZW5ndGggPT0gc3RkOjpudW1l
cmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpKSB7CisgICAgaWYgKCpsZW5ndGggPT0gc3RkOjpu
dW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpKSB7CiAgICAgICAgIC8vIFRoaXMgaXMgdGhl
IG51bGwgc3RyaW5nLgotICAgICAgICByZXN1bHQgPSBTdHJpbmcoKTsKLSAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICB9CiAKLSAgICBib29sIGlzOEJp
dDsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGlzOEJpdCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIGlmIChpczhCaXQpCi0gICAgICAgIHJldHVybiBkZWNvZGVTdHJpbmdUZXh0PExD
aGFyPihkZWNvZGVyLCBsZW5ndGgsIHJlc3VsdCk7Ci0gICAgcmV0dXJuIGRlY29kZVN0cmluZ1Rl
eHQ8VUNoYXI+KGRlY29kZXIsIGxlbmd0aCwgcmVzdWx0KTsKKyAgICBPcHRpb25hbDxib29sPiBp
czhCaXQ7CisgICAgZGVjb2RlciA+PiBpczhCaXQ7CisgICAgaWYgKCFpczhCaXQpCisgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBpZiAoKmlzOEJpdCkKKyAgICAgICAgcmV0dXJu
IGRlY29kZVN0cmluZ1RleHQ8TENoYXI+KGRlY29kZXIsICpsZW5ndGgpOworICAgIHJldHVybiBk
ZWNvZGVTdHJpbmdUZXh0PFVDaGFyPihkZWNvZGVyLCAqbGVuZ3RoKTsKIH0KIAogdm9pZCBDb2Rl
cjxTSEExOjpEaWdlc3Q+OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgU0hBMTo6RGln
ZXN0JiBkaWdlc3QpCkBAIC0xNDcsOSArMTQ1LDEyIEBAIHZvaWQgQ29kZXI8U0hBMTo6RGlnZXN0
Pjo6ZW5jb2RlKEVuY29kZXIKICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShkaWdl
c3QuZGF0YSgpLCBzaXplb2YoZGlnZXN0KSk7CiB9CiAKLWJvb2wgQ29kZXI8U0hBMTo6RGlnZXN0
Pjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFNIQTE6OkRpZ2VzdCYgZGlnZXN0KQorT3B0aW9u
YWw8U0hBMTo6RGlnZXN0PiBDb2RlcjxTSEExOjpEaWdlc3Q+OjpkZWNvZGUoRGVjb2RlciYgZGVj
b2RlcikKIHsKLSAgICByZXR1cm4gZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoZGlnZXN0
LmRhdGEoKSwgc2l6ZW9mKGRpZ2VzdCkpOworICAgIFNIQTE6OkRpZ2VzdCB0bXA7CisgICAgaWYg
KCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YSh0bXAuZGF0YSgpLCBzaXplb2YodG1wKSkp
CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcmV0dXJuIFdURk1vdmUodG1wKTsK
IH0KIAogfQpJbmRleDogU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudENvZGVy
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRD
b2RlcnMuaAkocmV2aXNpb24gMjU5ODk4KQorKysgU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2Uv
UGVyc2lzdGVudENvZGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC00NiwxOSArNDYsMTkgQEAgdGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gc3RydWN0IAogICAgICAgICBlbmNvZGVyIDw8
IHBhaXIuZmlyc3QgPDwgcGFpci5zZWNvbmQ7CiAgICAgfQogCi0gICAgc3RhdGljIFdBUk5fVU5V
U0VEX1JFVFVSTiBib29sIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBzdGQ6OnBhaXI8VCwgVT4m
IHBhaXIpCisgICAgc3RhdGljIE9wdGlvbmFsPHN0ZDo6cGFpcjxULCBVPj4gZGVjb2RlKERlY29k
ZXImIGRlY29kZXIpCiAgICAgewotICAgICAgICBUIGZpcnN0OwotICAgICAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKGZpcnN0KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBV
IHNlY29uZDsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShzZWNvbmQpKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIHBhaXIuZmlyc3QgPSBmaXJzdDsKLSAgICAgICAg
cGFpci5zZWNvbmQgPSBzZWNvbmQ7Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBPcHRp
b25hbDxUPiBmaXJzdDsKKyAgICAgICAgZGVjb2RlciA+PiBmaXJzdDsKKyAgICAgICAgaWYgKCFm
aXJzdCkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICAgICAgT3B0aW9u
YWw8VT4gc2Vjb25kOworICAgICAgICBkZWNvZGVyID4+IHNlY29uZDsKKyAgICAgICAgaWYgKCFz
ZWNvbmQpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgICAgIHJldHVy
biB7eyBXVEZNb3ZlKCpmaXJzdCksIFdURk1vdmUoKnNlY29uZCkgfX07CiAgICAgfQogfTsKIApA
QCAtNzQsMjMgKzc0LDIxIEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb2RlcjxPcHRp
b24KICAgICAgICAgZW5jb2RlciA8PCBvcHRpb25hbC52YWx1ZSgpOwogICAgIH0KICAgICAKLSAg
ICBzdGF0aWMgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIs
IE9wdGlvbmFsPFQ+JiBvcHRpb25hbCkKKyAgICBzdGF0aWMgT3B0aW9uYWw8T3B0aW9uYWw8VD4+
IGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIHsKLSAgICAgICAgYm9vbCBpc0VuZ2FnZWQ7
Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaXNFbmdhZ2VkKSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgCi0gICAgICAgIGlmICghaXNFbmdhZ2VkKSB7Ci0gICAgICAg
ICAgICBvcHRpb25hbCA9IFdURjo6bnVsbG9wdDsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICB9CisgICAgICAgIE9wdGlvbmFsPGJvb2w+IGlzRW5nYWdlZDsKKyAgICAgICAgZGVj
b2RlciA+PiBpc0VuZ2FnZWQ7CisgICAgICAgIGlmICghaXNFbmdhZ2VkKQorICAgICAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgaWYgKCEqaXNFbmdhZ2VkKQorICAgICAgICAg
ICAgcmV0dXJuIE9wdGlvbmFsPE9wdGlvbmFsPFQ+PiB7IE9wdGlvbmFsPFQ+IHsgV1RGOjpudWxs
b3B0IH0gfTsKICAgICAgICAgCi0gICAgICAgIFQgdmFsdWU7Ci0gICAgICAgIGlmICghZGVjb2Rl
ci5kZWNvZGUodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBPcHRp
b25hbDxUPiB2YWx1ZTsKKyAgICAgICAgZGVjb2RlciA+PiB2YWx1ZTsKKyAgICAgICAgaWYgKCF2
YWx1ZSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgIAotICAgICAg
ICBvcHRpb25hbCA9IFdURk1vdmUodmFsdWUpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgcmV0dXJuIE9wdGlvbmFsPE9wdGlvbmFsPFQ+PiB7IE9wdGlvbmFsPFQ+IHsgV1RGTW92ZSgq
dmFsdWUpIH0gfTsKICAgICB9CiB9OwogCkBAIC0xMDAsMTkgKzk4LDE5IEBAIHRlbXBsYXRlPHR5
cGVuYW1lIEtleVR5cGUsIHR5cGVuYW1lIFZhbHUKICAgICAgICAgZW5jb2RlciA8PCBwYWlyLmtl
eSA8PCBwYWlyLnZhbHVlOwogICAgIH0KIAotICAgIHN0YXRpYyBXQVJOX1VOVVNFRF9SRVRVUk4g
Ym9vbCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgV1RGOjpLZXlWYWx1ZVBhaXI8S2V5VHlwZSwg
VmFsdWVUeXBlPiYgcGFpcikKKyAgICBzdGF0aWMgT3B0aW9uYWw8V1RGOjpLZXlWYWx1ZVBhaXI8
S2V5VHlwZSwgVmFsdWVUeXBlPj4gZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgewotICAg
ICAgICBLZXlUeXBlIGtleTsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShrZXkpKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIFZhbHVlVHlwZSB2YWx1ZTsKLSAgICAg
ICAgaWYgKCFkZWNvZGVyLmRlY29kZSh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICAgICAgcGFpci5rZXkgPSBrZXk7Ci0gICAgICAgIHBhaXIudmFsdWUgPSB2YWx1ZTsK
LSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIE9wdGlvbmFsPEtleVR5cGU+IGtleTsKKyAg
ICAgICAgZGVjb2RlciA+PiBrZXk7CisgICAgICAgIGlmICgha2V5KQorICAgICAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKKworICAgICAgICBPcHRpb25hbDxWYWx1ZVR5cGU+IHZhbHVlOwor
ICAgICAgICBkZWNvZGVyID4+dmFsdWU7CisgICAgICAgIGlmICghdmFsdWUpCisgICAgICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgICAgIHJldHVybiB7eyBXVEZNb3ZlKCprZXkp
LCBXVEZNb3ZlKCp2YWx1ZSkgfX07CiAgICAgfQogfTsKIApAQCAtMTI2LDI0ICsxMjQsMjQgQEAg
dGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaQogICAgICAgICAgICAgZW5j
b2RlciA8PCB2ZWN0b3JbaV07CiAgICAgfQogCi0gICAgc3RhdGljIFdBUk5fVU5VU0VEX1JFVFVS
TiBib29sIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+
JiB2ZWN0b3IpCisgICAgc3RhdGljIE9wdGlvbmFsPFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT4+
IGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIHsKLSAgICAgICAgdWludDY0X3Qgc2l6ZTsK
LSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShzaXplKSkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgT3B0aW9uYWw8dWludDY0X3Q+IHNpemU7CisgICAgICAgIGRlY29kZXIg
Pj4gc2l6ZTsKKyAgICAgICAgaWYgKCFzaXplKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKIAogICAgICAgICBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+IHRtcDsKLSAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgICAgIFQgZWxlbWVu
dDsKLSAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoZWxlbWVudCkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICB0bXAuYXBwZW5k
KFdURk1vdmUoZWxlbWVudCkpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8ICpzaXpl
OyArK2kpIHsKKyAgICAgICAgICAgIE9wdGlvbmFsPFQ+IGVsZW1lbnQ7CisgICAgICAgICAgICBk
ZWNvZGVyID4+IGVsZW1lbnQ7CisgICAgICAgICAgICBpZiAoIWVsZW1lbnQpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgICAgIHRtcC5hcHBlbmQoV1RGTW92
ZSgqZWxlbWVudCkpOwogICAgICAgICB9CiAKICAgICAgICAgdG1wLnNocmlua1RvRml0KCk7Ci0g
ICAgICAgIHZlY3Rvci5zd2FwKHRtcCk7Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBy
ZXR1cm4gV1RGTW92ZSh0bXApOwogICAgIH0KIH07CiAKQEAgLTE1NCwzMSArMTUyLDMxIEBAIHRl
bXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2kKICAgICAgICAgZW5jb2Rlci5l
bmNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4odmVj
dG9yLmRhdGEoKSksIHZlY3Rvci5zaXplKCkgKiBzaXplb2YoVCkpOwogICAgIH0KICAgICAKLSAg
ICBzdGF0aWMgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIs
IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT4mIHZlY3RvcikKKyAgICBzdGF0aWMgT3B0aW9uYWw8
VmVjdG9yPFQsIGlubGluZUNhcGFjaXR5Pj4gZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAg
ewotICAgICAgICB1aW50NjRfdCBkZWNvZGVkU2l6ZTsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRl
Y29kZShkZWNvZGVkU2l6ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIE9w
dGlvbmFsPHVpbnQ2NF90PiBkZWNvZGVkU2l6ZTsKKyAgICAgICAgZGVjb2RlciA+PiBkZWNvZGVk
U2l6ZTsKKyAgICAgICAgaWYgKCFkZWNvZGVkU2l6ZSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CiAKLSAgICAgICAgaWYgKCFpc0luQm91bmRzPHNpemVfdD4oZGVjb2RlZFNpemUp
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoIWlzSW5Cb3VuZHM8c2l6
ZV90PigqZGVjb2RlZFNpemUpKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAot
ICAgICAgICBhdXRvIHNpemUgPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGRlY29kZWRTaXplKTsKKyAg
ICAgICAgYXV0byBzaXplID0gc3RhdGljX2Nhc3Q8c2l6ZV90PigqZGVjb2RlZFNpemUpOwogCiAg
ICAgICAgIC8vIFNpbmNlIHdlIGtub3cgdGhlIHRvdGFsIHNpemUgb2YgdGhlIGVsZW1lbnRzLCB3
ZSBjYW4gYWxsb2NhdGUgdGhlIHZlY3RvciBpbgogICAgICAgICAvLyBvbmUgZmVsbCBzd29vcC4g
QmVmb3JlIGFsbG9jYXRpbmcgd2UgbXVzdCBob3dldmVyIG1ha2Ugc3VyZSB0aGF0IHRoZSBkZWNv
ZGVyIGJ1ZmZlcgogICAgICAgICAvLyBpcyBiaWcgZW5vdWdoLgogICAgICAgICBpZiAoIWRlY29k
ZXIuYnVmZmVySXNMYXJnZUVub3VnaFRvQ29udGFpbjxUPihzaXplKSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICAgICAg
VmVjdG9yPFQsIGlubGluZUNhcGFjaXR5PiB0ZW1wOwogICAgICAgICB0ZW1wLmdyb3coc2l6ZSk7
CiAKICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJl
dF9jYXN0PHVpbnQ4X3QqPih0ZW1wLmRhdGEoKSksIHNpemUgKiBzaXplb2YoVCkpKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAot
ICAgICAgICB2ZWN0b3Iuc3dhcCh0ZW1wKTsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IHJldHVybiBXVEZNb3ZlKHRlbXApOwogICAgIH0KIH07CiAKQEAgLTE5NCwzMCArMTkyLDMyIEBA
IHRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGUKICAgICAgICAgICAgIGVu
Y29kZXIgPDwgKml0OwogICAgIH0KIAotICAgIHN0YXRpYyBXQVJOX1VOVVNFRF9SRVRVUk4gYm9v
bCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgSGFzaE1hcFR5cGUmIGhhc2hNYXApCisgICAgc3Rh
dGljIE9wdGlvbmFsPEhhc2hNYXBUeXBlPiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKICAgICB7
Ci0gICAgICAgIHVpbnQ2NF90IGhhc2hNYXBTaXplOwotICAgICAgICBpZiAoIWRlY29kZXIuZGVj
b2RlKGhhc2hNYXBTaXplKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgT3B0
aW9uYWw8dWludDY0X3Q+IGhhc2hNYXBTaXplOworICAgICAgICBkZWNvZGVyID4+IGhhc2hNYXBT
aXplOworICAgICAgICBpZiAoIWhhc2hNYXBTaXplKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKIAogICAgICAgICBIYXNoTWFwVHlwZSB0ZW1wSGFzaE1hcDsKLSAgICAgICAgdGVt
cEhhc2hNYXAucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaGFz
aE1hcFNpemUpKTsKLSAgICAgICAgZm9yICh1aW50NjRfdCBpID0gMDsgaSA8IGhhc2hNYXBTaXpl
OyArK2kpIHsKLSAgICAgICAgICAgIEtleUFyZyBrZXk7Ci0gICAgICAgICAgICBNYXBwZWRBcmcg
dmFsdWU7Ci0gICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGtleSkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZSh2YWx1
ZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB0ZW1wSGFzaE1hcC5y
ZXNlcnZlSW5pdGlhbENhcGFjaXR5KHN0YXRpY19jYXN0PHVuc2lnbmVkPigqaGFzaE1hcFNpemUp
KTsKKyAgICAgICAgZm9yICh1aW50NjRfdCBpID0gMDsgaSA8ICpoYXNoTWFwU2l6ZTsgKytpKSB7
CisgICAgICAgICAgICBPcHRpb25hbDxLZXlBcmc+IGtleTsKKyAgICAgICAgICAgIGRlY29kZXIg
Pj4ga2V5OworICAgICAgICAgICAgaWYgKCFrZXkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKKyAgICAgICAgICAgIE9wdGlvbmFsPE1hcHBlZEFyZz4gdmFsdWU7CisgICAg
ICAgICAgICBkZWNvZGVyID4+IHZhbHVlOworICAgICAgICAgICAgaWYgKCF2YWx1ZSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgICAgICAgICBpZiAoIXRlbXBI
YXNoTWFwLmFkZChrZXksIHZhbHVlKS5pc05ld0VudHJ5KSB7CisgICAgICAgICAgICBpZiAoIXRl
bXBIYXNoTWFwLmFkZChXVEZNb3ZlKCprZXkpLCBXVEZNb3ZlKCp2YWx1ZSkpLmlzTmV3RW50cnkp
IHsKICAgICAgICAgICAgICAgICAvLyBUaGUgaGFzaCBtYXAgYWxyZWFkeSBoYXMgdGhlIHNwZWNp
ZmllZCBrZXksIGJhaWwuCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAot
ICAgICAgICBoYXNoTWFwLnN3YXAodGVtcEhhc2hNYXApOwotICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgcmV0dXJuIFdURk1vdmUodGVtcEhhc2hNYXApOwogICAgIH0KIH07CiAKQEAgLTIz
MSwyNiArMjMxLDI3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgSGFzaEEK
ICAgICAgICAgICAgIGVuY29kZXIgPDwgKml0OwogICAgIH0KIAotICAgIHN0YXRpYyBXQVJOX1VO
VVNFRF9SRVRVUk4gYm9vbCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgSGFzaFNldFR5cGUmIGhh
c2hTZXQpCisgICAgc3RhdGljIE9wdGlvbmFsPEhhc2hTZXRUeXBlPiBkZWNvZGUoRGVjb2RlciYg
ZGVjb2RlcikKICAgICB7Ci0gICAgICAgIHVpbnQ2NF90IGhhc2hTZXRTaXplOwotICAgICAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKGhhc2hTZXRTaXplKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgT3B0aW9uYWw8dWludDY0X3Q+IGhhc2hTZXRTaXplOworICAgICAgICBkZWNv
ZGVyID4+IGhhc2hTZXRTaXplOworICAgICAgICBpZiAoIWhhc2hTZXRTaXplKQorICAgICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgICAgICBIYXNoU2V0VHlwZSB0ZW1wSGFzaFNl
dDsKLSAgICAgICAgZm9yICh1aW50NjRfdCBpID0gMDsgaSA8IGhhc2hTZXRTaXplOyArK2kpIHsK
LSAgICAgICAgICAgIEtleUFyZyBrZXk7Ci0gICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KGtleSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBmb3IgKHVpbnQ2
NF90IGkgPSAwOyBpIDwgKmhhc2hTZXRTaXplOyArK2kpIHsKKyAgICAgICAgICAgIE9wdGlvbmFs
PEtleUFyZz4ga2V5OworICAgICAgICAgICAgZGVjb2RlciA+PiBrZXk7CisgICAgICAgICAgICBp
ZiAoIWtleSkKKyAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgICAg
ICAgICBpZiAoIXRlbXBIYXNoU2V0LmFkZChrZXkpLmlzTmV3RW50cnkpIHsKKyAgICAgICAgICAg
IGlmICghdGVtcEhhc2hTZXQuYWRkKFdURk1vdmUoKmtleSkpLmlzTmV3RW50cnkpIHsKICAgICAg
ICAgICAgICAgICAvLyBUaGUgaGFzaCBtYXAgYWxyZWFkeSBoYXMgdGhlIHNwZWNpZmllZCBrZXks
IGJhaWwuCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBo
YXNoU2V0LnN3YXAodGVtcEhhc2hTZXQpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
cmV0dXJuIFdURk1vdmUodGVtcEhhc2hTZXQpOwogICAgIH0KIH07CiAKQEAgLTI2MCwxNCArMjYx
LDEzIEBAIHRlbXBsYXRlPD4gc3RydWN0IENvZGVyPFNlY29uZHM+IHsKICAgICAgICAgZW5jb2Rl
ciA8PCBzZWNvbmRzLnZhbHVlKCk7CiAgICAgfQogCi0gICAgc3RhdGljIFdBUk5fVU5VU0VEX1JF
VFVSTiBib29sIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBTZWNvbmRzJiByZXN1bHQpCisgICAg
c3RhdGljIE9wdGlvbmFsPFNlY29uZHM+IGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIHsK
LSAgICAgICAgZG91YmxlIHZhbHVlOwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHZhbHVl
KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICByZXN1bHQgPSBTZWNvbmRz
KHZhbHVlKTsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIE9wdGlvbmFsPGRvdWJsZT4g
dmFsdWU7CisgICAgICAgIGRlY29kZXIgPj4gdmFsdWU7CisgICAgICAgIGlmICghdmFsdWUpCisg
ICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICByZXR1cm4gU2Vjb25kcygq
dmFsdWUpOwogICAgIH0KIH07CiAKQEAgLTI3NywzNSArMjc3LDM1IEBAIHRlbXBsYXRlPD4gc3Ry
dWN0IENvZGVyPFdhbGxUaW1lPiB7CiAgICAgICAgIGVuY29kZXIgPDwgdGltZS5zZWNvbmRzU2lu
Y2VFcG9jaCgpLnZhbHVlKCk7CiAgICAgfQogCi0gICAgc3RhdGljIFdBUk5fVU5VU0VEX1JFVFVS
TiBib29sIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBXYWxsVGltZSYgcmVzdWx0KQorICAgIHN0
YXRpYyBPcHRpb25hbDxXYWxsVGltZT4gZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgewot
ICAgICAgICBkb3VibGUgdmFsdWU7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUodmFsdWUp
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBPcHRpb25hbDxkb3VibGU+IHZh
bHVlOworICAgICAgICBkZWNvZGVyID4+IHZhbHVlOworICAgICAgICBpZiAoIXZhbHVlKQorICAg
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgICAgICByZXN1bHQgPSBXYWxsVGlt
ZTo6ZnJvbVJhd1NlY29uZHModmFsdWUpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
cmV0dXJuIFdhbGxUaW1lOjpmcm9tUmF3U2Vjb25kcygqdmFsdWUpOwogICAgIH0KIH07CiAKIHRl
bXBsYXRlPD4gc3RydWN0IENvZGVyPEF0b21TdHJpbmc+IHsKICAgICBXVEZfRVhQT1JUX1BSSVZB
VEUgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25zdCBBdG9tU3RyaW5nJik7Ci0gICAg
V1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVyJiwgQXRvbVN0cmlu
ZyYpIFdBUk5fVU5VU0VEX1JFVFVSTjsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIE9w
dGlvbmFsPEF0b21TdHJpbmc+IGRlY29kZShEZWNvZGVyJik7CiB9OwogCiB0ZW1wbGF0ZTw+IHN0
cnVjdCBDb2RlcjxDU3RyaW5nPiB7CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lk
IGVuY29kZShFbmNvZGVyJiwgY29uc3QgQ1N0cmluZyYpOwotICAgIFdURl9FWFBPUlRfUFJJVkFU
RSBzdGF0aWMgYm9vbCBkZWNvZGUoRGVjb2RlciYsIENTdHJpbmcmKSBXQVJOX1VOVVNFRF9SRVRV
Uk47CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBPcHRpb25hbDxDU3RyaW5nPiBkZWNv
ZGUoRGVjb2RlciYpOwogfTsKIAogdGVtcGxhdGU8PiBzdHJ1Y3QgQ29kZXI8U3RyaW5nPiB7CiAg
ICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiwgY29uc3Qg
U3RyaW5nJik7Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGRlY29kZShEZWNv
ZGVyJiwgU3RyaW5nJikgV0FSTl9VTlVTRURfUkVUVVJOOworICAgIFdURl9FWFBPUlRfUFJJVkFU
RSBzdGF0aWMgT3B0aW9uYWw8U3RyaW5nPiBkZWNvZGUoRGVjb2RlciYpOwogfTsKIAogdGVtcGxh
dGU8PiBzdHJ1Y3QgQ29kZXI8U0hBMTo6RGlnZXN0PiB7CiAgICAgV1RGX0VYUE9SVF9QUklWQVRF
IHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiwgY29uc3QgU0hBMTo6RGlnZXN0Jik7Ci0gICAg
V1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVyJiwgU0hBMTo6RGln
ZXN0JikgV0FSTl9VTlVTRURfUkVUVVJOOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMg
T3B0aW9uYWw8U0hBMTo6RGlnZXN0PiBkZWNvZGUoRGVjb2RlciYpOwogfTsKIAogfQpJbmRleDog
U291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudERlY29kZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnREZWNvZGVyLmNwcAko
cmV2aXNpb24gMjU5ODk4KQorKysgU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVu
dERlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw2NSArNTksNjcgQEAgYm9vbCBEZWNv
ZGVyOjpkZWNvZGVGaXhlZExlbmd0aERhdGEodWludAogICAgIHJldHVybiB0cnVlOwogfQogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgotYm9vbCBEZWNvZGVyOjpkZWNvZGVOdW1iZXIoVHlwZSYg
dmFsdWUpCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorRGVjb2RlciYgRGVjb2Rlcjo6ZGVjb2RlTnVt
YmVyKE9wdGlvbmFsPFQ+JiBvcHRpb25hbCkKIHsKLSAgICBpZiAoIWJ1ZmZlcklzTGFyZ2VFbm91
Z2hUb0NvbnRhaW4oc2l6ZW9mKHZhbHVlKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBp
ZiAoIWJ1ZmZlcklzTGFyZ2VFbm91Z2hUb0NvbnRhaW4oc2l6ZW9mKFQpKSkKKyAgICAgICAgcmV0
dXJuICp0aGlzOwogCi0gICAgbWVtY3B5KCZ2YWx1ZSwgbV9idWZmZXJQb3NpdGlvbiwgc2l6ZW9m
KHZhbHVlKSk7Ci0gICAgbV9idWZmZXJQb3NpdGlvbiArPSBzaXplb2YoVHlwZSk7CisgICAgVCB2
YWx1ZTsKKyAgICBtZW1jcHkoJnZhbHVlLCBtX2J1ZmZlclBvc2l0aW9uLCBzaXplb2YoVCkpOwor
ICAgIG1fYnVmZmVyUG9zaXRpb24gKz0gc2l6ZW9mKFQpOwogCiAgICAgRW5jb2Rlcjo6dXBkYXRl
Q2hlY2tzdW1Gb3JOdW1iZXIobV9zaGExLCB2YWx1ZSk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAg
b3B0aW9uYWwgPSB2YWx1ZTsKKyAgICByZXR1cm4gKnRoaXM7CiB9CiAKLWJvb2wgRGVjb2Rlcjo6
ZGVjb2RlKGJvb2wmIHJlc3VsdCkKK0RlY29kZXImIERlY29kZXI6Om9wZXJhdG9yPj4oT3B0aW9u
YWw8Ym9vbD4mIHJlc3VsdCkKIHsKICAgICByZXR1cm4gZGVjb2RlTnVtYmVyKHJlc3VsdCk7CiB9
CiAKLWJvb2wgRGVjb2Rlcjo6ZGVjb2RlKHVpbnQ4X3QmIHJlc3VsdCkKK0RlY29kZXImIERlY29k
ZXI6Om9wZXJhdG9yPj4oT3B0aW9uYWw8dWludDhfdD4mIHJlc3VsdCkKIHsKICAgICByZXR1cm4g
ZGVjb2RlTnVtYmVyKHJlc3VsdCk7CiB9CiAKLWJvb2wgRGVjb2Rlcjo6ZGVjb2RlKHVpbnQxNl90
JiByZXN1bHQpCitEZWNvZGVyJiBEZWNvZGVyOjpvcGVyYXRvcj4+KE9wdGlvbmFsPHVpbnQxNl90
PiYgcmVzdWx0KQogewogICAgIHJldHVybiBkZWNvZGVOdW1iZXIocmVzdWx0KTsKIH0KIAotYm9v
bCBEZWNvZGVyOjpkZWNvZGUoaW50MTZfdCYgcmVzdWx0KQorRGVjb2RlciYgRGVjb2Rlcjo6b3Bl
cmF0b3I+PihPcHRpb25hbDxpbnQxNl90PiYgcmVzdWx0KQogewogICAgIHJldHVybiBkZWNvZGVO
dW1iZXIocmVzdWx0KTsKIH0KIAotYm9vbCBEZWNvZGVyOjpkZWNvZGUodWludDMyX3QmIHJlc3Vs
dCkKK0RlY29kZXImIERlY29kZXI6Om9wZXJhdG9yPj4oT3B0aW9uYWw8dWludDMyX3Q+JiByZXN1
bHQpCiB7CiAgICAgcmV0dXJuIGRlY29kZU51bWJlcihyZXN1bHQpOwogfQogCi1ib29sIERlY29k
ZXI6OmRlY29kZSh1aW50NjRfdCYgcmVzdWx0KQorRGVjb2RlciYgRGVjb2Rlcjo6b3BlcmF0b3I+
PihPcHRpb25hbDx1aW50NjRfdD4mIHJlc3VsdCkKIHsKICAgICByZXR1cm4gZGVjb2RlTnVtYmVy
KHJlc3VsdCk7CiB9CiAKLWJvb2wgRGVjb2Rlcjo6ZGVjb2RlKGludDMyX3QmIHJlc3VsdCkKK0Rl
Y29kZXImIERlY29kZXI6Om9wZXJhdG9yPj4oT3B0aW9uYWw8aW50MzJfdD4mIHJlc3VsdCkKIHsK
ICAgICByZXR1cm4gZGVjb2RlTnVtYmVyKHJlc3VsdCk7CiB9CiAKLWJvb2wgRGVjb2Rlcjo6ZGVj
b2RlKGludDY0X3QmIHJlc3VsdCkKK0RlY29kZXImIERlY29kZXI6Om9wZXJhdG9yPj4oT3B0aW9u
YWw8aW50NjRfdD4mIHJlc3VsdCkKIHsKICAgICByZXR1cm4gZGVjb2RlTnVtYmVyKHJlc3VsdCk7
CiB9CiAKLWJvb2wgRGVjb2Rlcjo6ZGVjb2RlKGZsb2F0JiByZXN1bHQpCitEZWNvZGVyJiBEZWNv
ZGVyOjpvcGVyYXRvcj4+KE9wdGlvbmFsPGZsb2F0PiYgcmVzdWx0KQogewogICAgIHJldHVybiBk
ZWNvZGVOdW1iZXIocmVzdWx0KTsKIH0KIAotYm9vbCBEZWNvZGVyOjpkZWNvZGUoZG91YmxlJiBy
ZXN1bHQpCitEZWNvZGVyJiBEZWNvZGVyOjpvcGVyYXRvcj4+KE9wdGlvbmFsPGRvdWJsZT4mIHJl
c3VsdCkKIHsKICAgICByZXR1cm4gZGVjb2RlTnVtYmVyKHJlc3VsdCk7CiB9CkluZGV4OiBTb3Vy
Y2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RGVjb2Rlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnREZWNvZGVyLmgJKHJldmlzaW9u
IDI1OTg5OCkKKysrIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnREZWNvZGVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDQ3ICs0NSwzNiBAQCBwdWJsaWM6CiAKICAgICBXVEZf
RVhQT1JUX1BSSVZBVEUgYm9vbCBkZWNvZGVGaXhlZExlbmd0aERhdGEodWludDhfdCosIHNpemVf
dCkgV0FSTl9VTlVTRURfUkVUVVJOOwogCi0gICAgV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgZGVj
b2RlKGJvb2wmKSBXQVJOX1VOVVNFRF9SRVRVUk47Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIGJv
b2wgZGVjb2RlKHVpbnQ4X3QmKSBXQVJOX1VOVVNFRF9SRVRVUk47Ci0gICAgV1RGX0VYUE9SVF9Q
UklWQVRFIGJvb2wgZGVjb2RlKHVpbnQxNl90JikgV0FSTl9VTlVTRURfUkVUVVJOOwotICAgIFdU
Rl9FWFBPUlRfUFJJVkFURSBib29sIGRlY29kZSh1aW50MzJfdCYpIFdBUk5fVU5VU0VEX1JFVFVS
TjsKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBkZWNvZGUodWludDY0X3QmKSBXQVJOX1VO
VVNFRF9SRVRVUk47Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgZGVjb2RlKGludDE2X3Qm
KSBXQVJOX1VOVVNFRF9SRVRVUk47Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgZGVjb2Rl
KGludDMyX3QmKSBXQVJOX1VOVVNFRF9SRVRVUk47Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIGJv
b2wgZGVjb2RlKGludDY0X3QmKSBXQVJOX1VOVVNFRF9SRVRVUk47Ci0gICAgV1RGX0VYUE9SVF9Q
UklWQVRFIGJvb2wgZGVjb2RlKGZsb2F0JikgV0FSTl9VTlVTRURfUkVUVVJOOwotICAgIFdURl9F
WFBPUlRfUFJJVkFURSBib29sIGRlY29kZShkb3VibGUmKSBXQVJOX1VOVVNFRF9SRVRVUk47Ci0K
LSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFPiBXQVJOX1VOVVNFRF9SRVRVUk4KLSAgICBhdXRvIGRl
Y29kZShFJiBlKSAtPiBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfZW51bTxFPjo6dmFsdWUsIGJv
b2w+CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIERlY29kZXImIG9wZXJhdG9yPj4oT3B0aW9uYWw8
Ym9vbD4mKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgRGVjb2RlciYgb3BlcmF0b3I+PihPcHRp
b25hbDx1aW50OF90PiYpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBEZWNvZGVyJiBvcGVyYXRv
cj4+KE9wdGlvbmFsPHVpbnQxNl90PiYpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBEZWNvZGVy
JiBvcGVyYXRvcj4+KE9wdGlvbmFsPHVpbnQzMl90PiYpOworICAgIFdURl9FWFBPUlRfUFJJVkFU
RSBEZWNvZGVyJiBvcGVyYXRvcj4+KE9wdGlvbmFsPHVpbnQ2NF90PiYpOworICAgIFdURl9FWFBP
UlRfUFJJVkFURSBEZWNvZGVyJiBvcGVyYXRvcj4+KE9wdGlvbmFsPGludDE2X3Q+Jik7CisgICAg
V1RGX0VYUE9SVF9QUklWQVRFIERlY29kZXImIG9wZXJhdG9yPj4oT3B0aW9uYWw8aW50MzJfdD4m
KTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgRGVjb2RlciYgb3BlcmF0b3I+PihPcHRpb25hbDxp
bnQ2NF90PiYpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBEZWNvZGVyJiBvcGVyYXRvcj4+KE9w
dGlvbmFsPGZsb2F0PiYpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBEZWNvZGVyJiBvcGVyYXRv
cj4+KE9wdGlvbmFsPGRvdWJsZT4mKTsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBz
dGQ6OmVuYWJsZV9pZl90PCFzdGQ6OmlzX2FyaXRobWV0aWM8dHlwZW5hbWUgc3RkOjpyZW1vdmVf
Y29uc3Q8VD4+Ojp2YWx1ZSAmJiAhc3RkOjppc19lbnVtPFQ+Ojp2YWx1ZT4qID0gbnVsbHB0cj4K
KyAgICBEZWNvZGVyJiBvcGVyYXRvcj4+KE9wdGlvbmFsPFQ+JiByZXN1bHQpCiAgICAgewotICAg
ICAgICB1aW50NjRfdCB2YWx1ZTsKLSAgICAgICAgaWYgKCFkZWNvZGUodmFsdWUpKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIWlzVmFsaWRFbnVtPEU+KHZhbHVlKSkK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBlID0gc3RhdGljX2Nhc3Q8RT4o
dmFsdWUpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmVzdWx0ID0gQ29kZXI8VD46
OmRlY29kZSgqdGhpcyk7CisgICAgICAgIHJldHVybiAqdGhpczsKICAgICB9CiAKLSAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBXQVJOX1VOVVNFRF9SRVRVUk4KLSAgICBib29sIGRlY29kZUVudW0o
VCYgcmVzdWx0KQotICAgIHsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoVCkgPD0gOCwg
IkVudW0gdHlwZSBUIG11c3Qgbm90IGJlIGxhcmdlciB0aGFuIDY0IGJpdHMhIik7Ci0KLSAgICAg
ICAgdWludDY0X3QgdmFsdWU7Ci0gICAgICAgIGlmICghZGVjb2RlKHZhbHVlKSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCi0gICAgICAgIHJlc3VsdCA9IHN0YXRpY19jYXN0
PFQ+KHZhbHVlKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4gV0FSTl9VTlVTRURfUkVUVVJOCi0gICAgYXV0byBkZWNvZGUoVCYgdCkgLT4g
c3RkOjplbmFibGVfaWZfdDwhc3RkOjppc19lbnVtPFQ+Ojp2YWx1ZSwgYm9vbD4KKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBFLCBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfZW51bTxFPjo6dmFsdWU+
KiA9IG51bGxwdHI+CisgICAgRGVjb2RlciYgb3BlcmF0b3I+PihPcHRpb25hbDxFPiYgcmVzdWx0
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIENvZGVyPFQ+OjpkZWNvZGUoKnRoaXMsIHQpOworICAg
ICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihFKSA8PSA4LCAiRW51bSB0eXBlIFQgbXVzdCBub3Qg
YmUgbGFyZ2VyIHRoYW4gNjQgYml0cyEiKTsKKyAgICAgICAgT3B0aW9uYWw8dWludDY0X3Q+IHZh
bHVlOworICAgICAgICAqdGhpcyA+PiB2YWx1ZTsKKyAgICAgICAgaWYgKCF2YWx1ZSkKKyAgICAg
ICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgaWYgKCFpc1ZhbGlkRW51bTxFPigqdmFsdWUp
KQorICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICByZXN1bHQgPSBzdGF0aWNfY2Fz
dDxFPigqdmFsdWUpOworICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQogCiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVD4gV0FSTl9VTlVTRURfUkVUVVJOCkBAIC0xMDMsNyArOTIsNyBAQCBwdWJs
aWM6CiAKIHByaXZhdGU6CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgYnVmZmVySXNMYXJn
ZUVub3VnaFRvQ29udGFpbihzaXplX3QpIGNvbnN0IFdBUk5fVU5VU0VEX1JFVFVSTjsKLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPiBib29sIGRlY29kZU51bWJlcihUeXBlJikgV0FSTl9VTlVT
RURfUkVUVVJOOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+IERlY29kZXImIGRlY29kZU51
bWJlcihPcHRpb25hbDxUeXBlPiYpIFdBUk5fVU5VU0VEX1JFVFVSTjsKIAogICAgIGNvbnN0IHVp
bnQ4X3QqIG1fYnVmZmVyOwogICAgIGNvbnN0IHVpbnQ4X3QqIG1fYnVmZmVyUG9zaXRpb247Cklu
ZGV4OiBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RW5jb2Rlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudEVuY29kZXIu
Y3BwCShyZXZpc2lvbiAyNTk4OTgpCisrKyBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJz
aXN0ZW50RW5jb2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDYyICs2Miw2MyBAQCB2b2lk
IEVuY29kZXI6OmVuY29kZUZpeGVkTGVuZ3RoRGF0YShjb25zCiB9CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIFR5cGU+Ci12b2lkIEVuY29kZXI6OmVuY29kZU51bWJlcihUeXBlIHZhbHVlKQorRW5jb2Rl
ciYgRW5jb2Rlcjo6ZW5jb2RlTnVtYmVyKFR5cGUgdmFsdWUpCiB7CiAgICAgRW5jb2Rlcjo6dXBk
YXRlQ2hlY2tzdW1Gb3JOdW1iZXIobV9zaGExLCB2YWx1ZSk7CiAKICAgICB1aW50OF90KiBidWZm
ZXIgPSBncm93KHNpemVvZihUeXBlKSk7CiAgICAgbWVtY3B5KGJ1ZmZlciwgJnZhbHVlLCBzaXpl
b2YoVHlwZSkpOworICAgIHJldHVybiAqdGhpczsKIH0KIAotdm9pZCBFbmNvZGVyOjplbmNvZGUo
Ym9vbCB2YWx1ZSkKK0VuY29kZXImIEVuY29kZXI6Om9wZXJhdG9yPDwoYm9vbCB2YWx1ZSkKIHsK
LSAgICBlbmNvZGVOdW1iZXIodmFsdWUpOworICAgIHJldHVybiBlbmNvZGVOdW1iZXIodmFsdWUp
OwogfQogCi12b2lkIEVuY29kZXI6OmVuY29kZSh1aW50OF90IHZhbHVlKQorRW5jb2RlciYgRW5j
b2Rlcjo6b3BlcmF0b3I8PCh1aW50OF90IHZhbHVlKQogewotICAgIGVuY29kZU51bWJlcih2YWx1
ZSk7CisgICAgcmV0dXJuIGVuY29kZU51bWJlcih2YWx1ZSk7CiB9CiAKLXZvaWQgRW5jb2Rlcjo6
ZW5jb2RlKHVpbnQxNl90IHZhbHVlKQorRW5jb2RlciYgRW5jb2Rlcjo6b3BlcmF0b3I8PCh1aW50
MTZfdCB2YWx1ZSkKIHsKLSAgICBlbmNvZGVOdW1iZXIodmFsdWUpOworICAgIHJldHVybiBlbmNv
ZGVOdW1iZXIodmFsdWUpOwogfQogCi12b2lkIEVuY29kZXI6OmVuY29kZShpbnQxNl90IHZhbHVl
KQorRW5jb2RlciYgRW5jb2Rlcjo6b3BlcmF0b3I8PChpbnQxNl90IHZhbHVlKQogewotICAgIGVu
Y29kZU51bWJlcih2YWx1ZSk7CisgICAgcmV0dXJuIGVuY29kZU51bWJlcih2YWx1ZSk7CiB9CiAK
LXZvaWQgRW5jb2Rlcjo6ZW5jb2RlKHVpbnQzMl90IHZhbHVlKQorRW5jb2RlciYgRW5jb2Rlcjo6
b3BlcmF0b3I8PCh1aW50MzJfdCB2YWx1ZSkKIHsKLSAgICBlbmNvZGVOdW1iZXIodmFsdWUpOwor
ICAgIHJldHVybiBlbmNvZGVOdW1iZXIodmFsdWUpOwogfQogCi12b2lkIEVuY29kZXI6OmVuY29k
ZSh1aW50NjRfdCB2YWx1ZSkKK0VuY29kZXImIEVuY29kZXI6Om9wZXJhdG9yPDwodWludDY0X3Qg
dmFsdWUpCiB7Ci0gICAgZW5jb2RlTnVtYmVyKHZhbHVlKTsKKyAgICByZXR1cm4gZW5jb2RlTnVt
YmVyKHZhbHVlKTsKIH0KIAotdm9pZCBFbmNvZGVyOjplbmNvZGUoaW50MzJfdCB2YWx1ZSkKK0Vu
Y29kZXImIEVuY29kZXI6Om9wZXJhdG9yPDwoaW50MzJfdCB2YWx1ZSkKIHsKLSAgICBlbmNvZGVO
dW1iZXIodmFsdWUpOworICAgIHJldHVybiBlbmNvZGVOdW1iZXIodmFsdWUpOwogfQogCi12b2lk
IEVuY29kZXI6OmVuY29kZShpbnQ2NF90IHZhbHVlKQorRW5jb2RlciYgRW5jb2Rlcjo6b3BlcmF0
b3I8PChpbnQ2NF90IHZhbHVlKQogewotICAgIGVuY29kZU51bWJlcih2YWx1ZSk7CisgICAgcmV0
dXJuIGVuY29kZU51bWJlcih2YWx1ZSk7CiB9CiAKLXZvaWQgRW5jb2Rlcjo6ZW5jb2RlKGZsb2F0
IHZhbHVlKQorRW5jb2RlciYgRW5jb2Rlcjo6b3BlcmF0b3I8PChmbG9hdCB2YWx1ZSkKIHsKLSAg
ICBlbmNvZGVOdW1iZXIodmFsdWUpOworICAgIHJldHVybiBlbmNvZGVOdW1iZXIodmFsdWUpOwog
fQogCi12b2lkIEVuY29kZXI6OmVuY29kZShkb3VibGUgdmFsdWUpCitFbmNvZGVyJiBFbmNvZGVy
OjpvcGVyYXRvcjw8KGRvdWJsZSB2YWx1ZSkKIHsKLSAgICBlbmNvZGVOdW1iZXIodmFsdWUpOwor
ICAgIHJldHVybiBlbmNvZGVOdW1iZXIodmFsdWUpOwogfQogCiB2b2lkIEVuY29kZXI6OmVuY29k
ZUNoZWNrc3VtKCkKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRF
bmNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lz
dGVudEVuY29kZXIuaAkocmV2aXNpb24gMjU5ODk4KQorKysgU291cmNlL1dURi93dGYvcGVyc2lz
dGVuY2UvUGVyc2lzdGVudEVuY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsMzIgKzQ1LDMx
IEBAIHB1YmxpYzoKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBlbmNvZGVDaGVja3N1bSgp
OwogICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGVuY29kZUZpeGVkTGVuZ3RoRGF0YShjb25z
dCB1aW50OF90Kiwgc2l6ZV90KTsKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEU+IGF1dG8gZW5j
b2RlKEUgdmFsdWUpIC0+IHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19lbnVtPEU+Ojp2YWx1ZT4K
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfZW51bTxU
Pjo6dmFsdWU+KiA9IG51bGxwdHI+CisgICAgRW5jb2RlciYgb3BlcmF0b3I8PChjb25zdCBUJiB0
KQogICAgIHsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoRSkgPD0gc2l6ZW9mKHVpbnQ2
NF90KSwgIkVudW0gdHlwZSBtdXN0IG5vdCBiZSBsYXJnZXIgdGhhbiA2NCBiaXRzLiIpOwotCi0g
ICAgICAgIEFTU0VSVChpc1ZhbGlkRW51bTxFPihzdGF0aWNfY2FzdDx1aW50NjRfdD4odmFsdWUp
KSk7Ci0gICAgICAgIGVuY29kZShzdGF0aWNfY2FzdDx1aW50NjRfdD4odmFsdWUpKTsKLSAgICB9
Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIGVuY29kZUVudW0oVCB0KQotICAgIHsK
LSAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFQpIDw9IHNpemVvZih1aW50NjRfdCksIGVu
dW1fdHlwZV9tdXN0X25vdF9iZV9sYXJnZXJfdGhhbl82NF9iaXRzKTsKLQotICAgICAgICBlbmNv
ZGUoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHQpKTsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzaXpl
b2YoVCkgPD0gc2l6ZW9mKHVpbnQ2NF90KSwgIkVudW0gdHlwZSBtdXN0IG5vdCBiZSBsYXJnZXIg
dGhhbiA2NCBiaXRzLiIpOworICAgICAgICByZXR1cm4gKnRoaXMgPDwgc3RhdGljX2Nhc3Q8dWlu
dDY0X3Q+KHQpOwogICAgIH0KIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGF1dG8gZW5jb2Rl
KGNvbnN0IFQmIHQpIC0+IHN0ZDo6ZW5hYmxlX2lmX3Q8IXN0ZDo6aXNfZW51bTxUPjo6dmFsdWU+
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc3RkOjplbmFibGVfaWZfdDwhc3RkOjppc19lbnVt
PFQ+Ojp2YWx1ZSAmJiAhc3RkOjppc19hcml0aG1ldGljPHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX2Nv
bnN0PFQ+Pjo6dmFsdWU+KiA9IG51bGxwdHI+CisgICAgRW5jb2RlciYgb3BlcmF0b3I8PChjb25z
dCBUJiB0KQogICAgIHsKICAgICAgICAgQ29kZXI8VD46OmVuY29kZSgqdGhpcywgdCk7Ci0gICAg
fQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gRW5jb2RlciYgb3BlcmF0b3I8PChjb25zdCBU
JiB0KQotICAgIHsKLSAgICAgICAgZW5jb2RlKHQpOwogICAgICAgICByZXR1cm4gKnRoaXM7CiAg
ICAgfQogCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIEVuY29kZXImIG9wZXJhdG9yPDwoYm9vbCk7
CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIEVuY29kZXImIG9wZXJhdG9yPDwodWludDhfdCk7Cisg
ICAgV1RGX0VYUE9SVF9QUklWQVRFIEVuY29kZXImIG9wZXJhdG9yPDwodWludDE2X3QpOworICAg
IFdURl9FWFBPUlRfUFJJVkFURSBFbmNvZGVyJiBvcGVyYXRvcjw8KHVpbnQzMl90KTsKKyAgICBX
VEZfRVhQT1JUX1BSSVZBVEUgRW5jb2RlciYgb3BlcmF0b3I8PCh1aW50NjRfdCk7CisgICAgV1RG
X0VYUE9SVF9QUklWQVRFIEVuY29kZXImIG9wZXJhdG9yPDwoaW50MTZfdCk7CisgICAgV1RGX0VY
UE9SVF9QUklWQVRFIEVuY29kZXImIG9wZXJhdG9yPDwoaW50MzJfdCk7CisgICAgV1RGX0VYUE9S
VF9QUklWQVRFIEVuY29kZXImIG9wZXJhdG9yPDwoaW50NjRfdCk7CisgICAgV1RGX0VYUE9SVF9Q
UklWQVRFIEVuY29kZXImIG9wZXJhdG9yPDwoZmxvYXQpOworICAgIFdURl9FWFBPUlRfUFJJVkFU
RSBFbmNvZGVyJiBvcGVyYXRvcjw8KGRvdWJsZSk7CisKICAgICBjb25zdCB1aW50OF90KiBidWZm
ZXIoKSBjb25zdCB7IHJldHVybiBtX2J1ZmZlci5kYXRhKCk7IH0KICAgICBzaXplX3QgYnVmZmVy
U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYnVmZmVyLnNpemUoKTsgfQogCkBAIC04MCwxOCArNzks
OCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSVBDRW5jb2RlciA9IGZh
bHNlOwogCiBwcml2YXRlOgotICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGVuY29kZShib29s
KTsKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBlbmNvZGUodWludDhfdCk7Ci0gICAgV1RG
X0VYUE9SVF9QUklWQVRFIHZvaWQgZW5jb2RlKHVpbnQxNl90KTsKLSAgICBXVEZfRVhQT1JUX1BS
SVZBVEUgdm9pZCBlbmNvZGUodWludDMyX3QpOwotICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lk
IGVuY29kZSh1aW50NjRfdCk7Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZW5jb2RlKGlu
dDE2X3QpOwotICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGVuY29kZShpbnQzMl90KTsKLSAg
ICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBlbmNvZGUoaW50NjRfdCk7Ci0gICAgV1RGX0VYUE9S
VF9QUklWQVRFIHZvaWQgZW5jb2RlKGZsb2F0KTsKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBlbmNvZGUoZG91YmxlKTsKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+IHZvaWQgZW5j
b2RlTnVtYmVyKFR5cGUpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+IEVuY29kZXImIGVu
Y29kZU51bWJlcihUeXBlKTsKIAogICAgIHVpbnQ4X3QqIGdyb3coc2l6ZV90KTsKIApJbmRleDog
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwkocmV2aXNpb24gMjU5ODk4KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzMgQEAKKzIwMjAtMDQtMTAgIEFsZXggQ2hyaXN0ZW5z
ZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBQZXJzaXN0ZW50Q29kZXJz
IHNob3VsZCB1c2UgbW9kZXJuIGRlY29kaW5nIHN5bnRheAorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA3NDk3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRI
b3N0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kSG9zdDo6c2hvd0Nl
cnRpZmljYXRlKToKKyAgICAgICAgKiBsb2FkZXIvRmV0Y2hPcHRpb25zLmg6CisgICAgICAgIChX
ZWJDb3JlOjpGZXRjaE9wdGlvbnM6OmRlY29kZVBlcnNpc3RlbnQpOgorICAgICAgICAqIHBhZ2Uv
Y3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeVJlc3BvbnNlSGVhZGVycy5oOgorICAgICAgICAoV2Vi
Q29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5UmVzcG9uc2VIZWFkZXJzOjplbmNvZGUgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5UmVzcG9uc2VIZWFkZXJz
OjpkZWNvZGUpOgorICAgICAgICAqIHBsYXRmb3JtL1Bhc3RlYm9hcmRDdXN0b21EYXRhLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmRDdXN0b21EYXRhOjpmcm9tU2hhcmVkQnVmZmVy
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlTG9hZFByaW9yaXR5Lmg6Cisg
ICAgICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmg6CisgICAgICAg
IChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RCYXNlOjplbmNvZGVCYXNlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdEJhc2U6OmRlY29kZUJhc2UpOgorICAgICAgICAq
IHBsYXRmb3JtL25ldHdvcmsvY2YvQ2VydGlmaWNhdGVJbmZvLmg6CisgICAgICAgIChXVEY6OlBl
cnNpc3RlbmNlOjpkZWNvZGVDRkRhdGEpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6ZGVj
b2RlU2VjVHJ1c3RSZWYpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6ZGVjb2RlQ2VydGlm
aWNhdGVDaGFpbik6CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpDb2RlcjxXZWJDb3JlOjpD
ZXJ0aWZpY2F0ZUluZm8+OjplbmNvZGUpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6Q29k
ZXI8V2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvPjo6ZGVjb2RlKToKKyAgICAgICAgKiB3b3JrZXJz
L3NlcnZpY2Uvc2VydmVyL1JlZ2lzdHJhdGlvbkRhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlZ2lzdHJhdGlvbkRhdGFiYXNlOjpkb1B1c2hDaGFuZ2VzKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlZ2lzdHJhdGlvbkRhdGFiYXNlOjppbXBvcnRSZWNvcmRzKToKKwogMjAyMC0wNC0xMCAg
QW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgW0NTUyBTaGFkb3cg
UGFydHNdIEJhZCBzdHlsZSBzaGFyaW5nIGJldHdlZW4gc2libGluZyBlbGVtZW50cyB3aXRoIGRp
ZmZlcmVudCBwYXJ0IGF0dHJpYnV0ZXMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwCShyZXZpc2lvbiAyNTk4OTgpCisrKyBT
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjAsNiArNjAsNyBAQAogI2luY2x1ZGUgPHBhbC9zeXN0ZW0vU291bmQuaD4K
ICNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMu
aD4KKyNpbmNsdWRlIDx3dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudERlY29kZXIuaD4KICNpbmNs
dWRlIDx3dGYvdGV4dC9CYXNlNjQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNTc0LDE1
ICs1NzUsMTYgQEAgYm9vbCBJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OnNob3dDZXJ0aWZpYwogICAg
IGlmICghYmFzZTY0RGVjb2RlKHNlcmlhbGl6ZWRDZXJ0aWZpY2F0ZSwgZGF0YSkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIENlcnRpZmljYXRlSW5mbyBjZXJ0aWZpY2F0ZUluZm87CiAg
ICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyKGRhdGEuZGF0YSgpLCBkYXRhLnNp
emUoKSk7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShjZXJ0aWZpY2F0ZUluZm8pKQorICAgIE9w
dGlvbmFsPENlcnRpZmljYXRlSW5mbz4gY2VydGlmaWNhdGVJbmZvOworICAgIGRlY29kZXIgPj4g
Y2VydGlmaWNhdGVJbmZvOworICAgIGlmICghY2VydGlmaWNhdGVJbmZvKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBpZiAoY2VydGlmaWNhdGVJbmZvLmlzRW1wdHkoKSkKKyAgICBpZiAo
Y2VydGlmaWNhdGVJbmZvLT5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IG1fY2xpZW50LT5zaG93Q2VydGlmaWNhdGUoY2VydGlmaWNhdGVJbmZvKTsKKyAgICBtX2NsaWVu
dC0+c2hvd0NlcnRpZmljYXRlKCpjZXJ0aWZpY2F0ZUluZm8pOwogICAgIHJldHVybiB0cnVlOwog
fQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rvck5ldHdv
cmtBZ2VudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50
cy9JbnNwZWN0b3JOZXR3b3JrQWdlbnQuY3BwCShyZXZpc2lvbiAyNTk4OTgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rvck5ldHdvcmtBZ2VudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTk2OSw3ICs5NjksNyBAQCB2b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6
Z2V0U2VyaWFsaXplCiAgICAgfQogCiAgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2RlciBlbmNv
ZGVyOwotICAgIGVuY29kZXIgPDwgY2VydGlmaWNhdGUudmFsdWUoKTsKKyAgICBXVEY6OlBlcnNp
c3RlbmNlOjpDb2RlcjxXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8+OjplbmNvZGUoZW5jb2Rlciwg
Y2VydGlmaWNhdGUudmFsdWUoKSk7CiAgICAgKnNlcmlhbGl6ZWRDZXJ0aWZpY2F0ZSA9IGJhc2U2
NEVuY29kZShlbmNvZGVyLmJ1ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNpemUoKSk7CiB9CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9GZXRjaE9wdGlvbnMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9sb2FkZXIvRmV0Y2hPcHRpb25zLmgJKHJldmlzaW9uIDI1OTg5OCkKKysr
IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9GZXRjaE9wdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAt
MTY3LDcgKzE2Nyw4IEBAIHRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6RmUK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiBpbmxpbmUg
dm9pZCBGZXRjaE9wdGlvbnM6OmVuY29kZVBlcnNpc3RlbnQoRW5jb2RlciYgZW5jb2RlcikgY29u
c3QKK3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+CitpbmxpbmUgdm9pZCBGZXRjaE9wdGlvbnM6OmVu
Y29kZVBlcnNpc3RlbnQoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIHsKICAgICAvLyBDaGFuZ2Vz
IHRvIGVuY29kaW5nIGhlcmUgc2hvdWxkIGJ1bXAgTmV0d29ya0NhY2hlIFN0b3JhZ2UgZm9ybWF0
IHZlcnNpb24uCiAgICAgZW5jb2RlciA8PCBkZXN0aW5hdGlvbjsKQEAgLTE4MCw1OSArMTgxLDcw
IEBAIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IGlubGluZSB2b2lkIEZldGMKICAgICBlbmNvZGVy
IDw8IGtlZXBBbGl2ZTsKIH0KIAotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gaW5saW5lIGJvb2wg
RmV0Y2hPcHRpb25zOjpkZWNvZGVQZXJzaXN0ZW50KERlY29kZXImIGRlY29kZXIsIEZldGNoT3B0
aW9ucyYgb3B0aW9ucykKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+CitpbmxpbmUgV0FSTl9VTlVT
RURfUkVUVVJOIGJvb2wgRmV0Y2hPcHRpb25zOjpkZWNvZGVQZXJzaXN0ZW50KERlY29kZXImIGRl
Y29kZXIsIEZldGNoT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBGZXRjaE9wdGlvbnM6OkRlc3Rp
bmF0aW9uIGRlc3RpbmF0aW9uOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoZGVzdGluYXRpb24p
KQorICAgIE9wdGlvbmFsPEZldGNoT3B0aW9uczo6RGVzdGluYXRpb24+IGRlc3RpbmF0aW9uOwor
ICAgIGRlY29kZXIgPj4gZGVzdGluYXRpb247CisgICAgaWYgKCFkZXN0aW5hdGlvbikKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgRmV0Y2hPcHRpb25zOjpNb2RlIG1vZGU7Ci0gICAgaWYg
KCFkZWNvZGVyLmRlY29kZShtb2RlKSkKKyAgICBPcHRpb25hbDxGZXRjaE9wdGlvbnM6Ok1vZGU+
IG1vZGU7CisgICAgZGVjb2RlciA+PiBtb2RlOworICAgIGlmICghbW9kZSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgRmV0Y2hPcHRpb25zOjpDcmVkZW50aWFscyBjcmVkZW50aWFsczsK
LSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGNyZWRlbnRpYWxzKSkKKyAgICBPcHRpb25hbDxGZXRj
aE9wdGlvbnM6OkNyZWRlbnRpYWxzPiBjcmVkZW50aWFsczsKKyAgICBkZWNvZGVyID4+IGNyZWRl
bnRpYWxzOworICAgIGlmICghY3JlZGVudGlhbHMpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIEZldGNoT3B0aW9uczo6Q2FjaGUgY2FjaGU7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShj
YWNoZSkpCisgICAgT3B0aW9uYWw8RmV0Y2hPcHRpb25zOjpDYWNoZT4gY2FjaGU7CisgICAgZGVj
b2RlciA+PiBjYWNoZTsKKyAgICBpZiAoIWNhY2hlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICBGZXRjaE9wdGlvbnM6OlJlZGlyZWN0IHJlZGlyZWN0OwotICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUocmVkaXJlY3QpKQorICAgIE9wdGlvbmFsPEZldGNoT3B0aW9uczo6UmVkaXJlY3Q+IHJl
ZGlyZWN0OworICAgIGRlY29kZXIgPj4gcmVkaXJlY3Q7CisgICAgaWYgKCFyZWRpcmVjdCkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgUmVmZXJyZXJQb2xpY3kgcmVmZXJyZXJQb2xpY3k7
Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZWZlcnJlclBvbGljeSkpCisgICAgT3B0aW9uYWw8
UmVmZXJyZXJQb2xpY3k+IHJlZmVycmVyUG9saWN5OworICAgIGRlY29kZXIgPj4gcmVmZXJyZXJQ
b2xpY3k7CisgICAgaWYgKCFyZWZlcnJlclBvbGljeSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgU3RyaW5nIGludGVncml0eTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGludGVncml0
eSkpCisgICAgT3B0aW9uYWw8U3RyaW5nPiBpbnRlZ3JpdHk7CisgICAgZGVjb2RlciA+PiBpbnRl
Z3JpdHk7CisgICAgaWYgKCFpbnRlZ3JpdHkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IGJvb2wga2VlcEFsaXZlOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoa2VlcEFsaXZlKSkKKyAg
ICBPcHRpb25hbDxib29sPiBrZWVwQWxpdmU7CisgICAgZGVjb2RlciA+PiBrZWVwQWxpdmU7Cisg
ICAgaWYgKCFrZWVwQWxpdmUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIG9wdGlvbnMu
ZGVzdGluYXRpb24gPSBkZXN0aW5hdGlvbjsKLSAgICBvcHRpb25zLm1vZGUgPSBtb2RlOwotICAg
IG9wdGlvbnMuY3JlZGVudGlhbHMgPSBjcmVkZW50aWFsczsKLSAgICBvcHRpb25zLmNhY2hlID0g
Y2FjaGU7Ci0gICAgb3B0aW9ucy5yZWRpcmVjdCA9IHJlZGlyZWN0OwotICAgIG9wdGlvbnMucmVm
ZXJyZXJQb2xpY3kgPSByZWZlcnJlclBvbGljeTsKLSAgICBvcHRpb25zLmludGVncml0eSA9IFdU
Rk1vdmUoaW50ZWdyaXR5KTsKLSAgICBvcHRpb25zLmtlZXBBbGl2ZSA9IGtlZXBBbGl2ZTsKKyAg
ICBvcHRpb25zLmRlc3RpbmF0aW9uID0gKmRlc3RpbmF0aW9uOworICAgIG9wdGlvbnMubW9kZSA9
ICptb2RlOworICAgIG9wdGlvbnMuY3JlZGVudGlhbHMgPSAqY3JlZGVudGlhbHM7CisgICAgb3B0
aW9ucy5jYWNoZSA9ICpjYWNoZTsKKyAgICBvcHRpb25zLnJlZGlyZWN0ID0gKnJlZGlyZWN0Owor
ICAgIG9wdGlvbnMucmVmZXJyZXJQb2xpY3kgPSAqcmVmZXJyZXJQb2xpY3k7CisgICAgb3B0aW9u
cy5pbnRlZ3JpdHkgPSBXVEZNb3ZlKCppbnRlZ3JpdHkpOworICAgIG9wdGlvbnMua2VlcEFsaXZl
ID0gKmtlZXBBbGl2ZTsKIAogICAgIHJldHVybiB0cnVlOwogfQogCi10ZW1wbGF0ZTxjbGFzcyBF
bmNvZGVyPiBpbmxpbmUgdm9pZCBGZXRjaE9wdGlvbnM6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVy
KSBjb25zdAordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KK2lubGluZSB2b2lkIEZldGNoT3B0aW9u
czo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB7CiAgICAgZW5jb2RlUGVyc2lzdGVu
dChlbmNvZGVyKTsKICAgICBlbmNvZGVyIDw8IGNsaWVudElkZW50aWZpZXIuYXNPcHRpb25hbCgp
OwogfQogCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBpbmxpbmUgT3B0aW9uYWw8RmV0Y2hPcHRp
b25zPiBGZXRjaE9wdGlvbnM6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQordGVtcGxhdGU8Y2xh
c3MgRGVjb2Rlcj4KK2lubGluZSBPcHRpb25hbDxGZXRjaE9wdGlvbnM+IEZldGNoT3B0aW9uczo6
ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7CiAgICAgRmV0Y2hPcHRpb25zIG9wdGlvbnM7CiAg
ICAgaWYgKCFkZWNvZGVQZXJzaXN0ZW50KGRlY29kZXIsIG9wdGlvbnMpKQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGFnZS9TZWN1cml0eU9yaWdpbkRhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luRGF0YS5oCShyZXZpc2lvbiAyNTk4OTgpCisrKyBT
b3VyY2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTUsMTEgKzExNSwxMiBAQCBPcHRpb25hbDxTZWN1cml0eU9yaWdpbkRhdGE+IFNlY3VyaXR5
T3JpCiAgICAgaWYgKCFob3N0KQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIAot
ICAgIE9wdGlvbmFsPHVpbnQxNl90PiBwb3J0OwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocG9y
dCkpCisgICAgT3B0aW9uYWw8T3B0aW9uYWw8dWludDE2X3Q+PiBwb3J0OworICAgIGRlY29kZXIg
Pj4gcG9ydDsKKyAgICBpZiAoIXBvcnQpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAg
ICAgCi0gICAgU2VjdXJpdHlPcmlnaW5EYXRhIGRhdGEgeyBXVEZNb3ZlKCpwcm90b2NvbCksIFdU
Rk1vdmUoKmhvc3QpLCBXVEZNb3ZlKHBvcnQpIH07CisgICAgU2VjdXJpdHlPcmlnaW5EYXRhIGRh
dGEgeyBXVEZNb3ZlKCpwcm90b2NvbCksIFdURk1vdmUoKmhvc3QpLCBXVEZNb3ZlKCpwb3J0KSB9
OwogICAgIGlmIChkYXRhLmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkpCiAgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRT
ZWN1cml0eVBvbGljeVJlc3BvbnNlSGVhZGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeVJlc3BvbnNlSGVhZGVycy5oCShyZXZp
c2lvbiAyNTk4OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQ
b2xpY3lSZXNwb25zZUhlYWRlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBDb250ZW50U2VjdXJpdHlQb2xpY3k7CiBjbGFzcyBS
ZXNvdXJjZVJlc3BvbnNlOwogCi1lbnVtIGNsYXNzIENvbnRlbnRTZWN1cml0eVBvbGljeUhlYWRl
clR5cGUgeworZW51bSBjbGFzcyBDb250ZW50U2VjdXJpdHlQb2xpY3lIZWFkZXJUeXBlIDogYm9v
bCB7CiAgICAgUmVwb3J0LAogICAgIEVuZm9yY2UsCiB9OwpAQCAtNDYsNyArNDYsNyBAQCBwdWJs
aWM6CiAgICAgQ29udGVudFNlY3VyaXR5UG9saWN5UmVzcG9uc2VIZWFkZXJzIGlzb2xhdGVkQ29w
eSgpIGNvbnN0OwogCiAgICAgdGVtcGxhdGUgPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVu
Y29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIGJvb2wg
ZGVjb2RlKERlY29kZXImLCBDb250ZW50U2VjdXJpdHlQb2xpY3lSZXNwb25zZUhlYWRlcnMmKTsK
KyAgICB0ZW1wbGF0ZSA8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPENvbnRlbnRTZWN1
cml0eVBvbGljeVJlc3BvbnNlSGVhZGVycz4gZGVjb2RlKERlY29kZXImKTsKIAogICAgIGVudW0g
RW1wdHlUYWcgeyBFbXB0eSB9OwogICAgIHN0cnVjdCBNYXJrYWJsZVRyYWl0cyB7CkBAIC03OCwz
MiArNzgsNDAgQEAgdm9pZCBDb250ZW50U2VjdXJpdHlQb2xpY3lSZXNwb25zZUhlYWRlcgogICAg
IGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG1faGVhZGVycy5zaXplKCkpOwogICAg
IGZvciAoYXV0byYgcGFpciA6IG1faGVhZGVycykgewogICAgICAgICBlbmNvZGVyIDw8IHBhaXIu
Zmlyc3Q7Ci0gICAgICAgIGVuY29kZXIuZW5jb2RlRW51bShwYWlyLnNlY29uZCk7CisgICAgICAg
IGVuY29kZXIgPDwgcGFpci5zZWNvbmQ7CiAgICAgfQogICAgIGVuY29kZXIgPDwgbV9odHRwU3Rh
dHVzQ29kZTsKIH0KIAogdGVtcGxhdGUgPGNsYXNzIERlY29kZXI+Ci1ib29sIENvbnRlbnRTZWN1
cml0eVBvbGljeVJlc3BvbnNlSGVhZGVyczo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIENvbnRl
bnRTZWN1cml0eVBvbGljeVJlc3BvbnNlSGVhZGVycyYgaGVhZGVycykKK09wdGlvbmFsPENvbnRl
bnRTZWN1cml0eVBvbGljeVJlc3BvbnNlSGVhZGVycz4gQ29udGVudFNlY3VyaXR5UG9saWN5UmVz
cG9uc2VIZWFkZXJzOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIHsKLSAgICB1aW50NjRfdCBo
ZWFkZXJzU2l6ZTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGhlYWRlcnNTaXplKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaGVhZGVyc1NpemU7
ICsraSkgewotICAgICAgICBTdHJpbmcgaGVhZGVyOwotICAgICAgICBpZiAoIWRlY29kZXIuZGVj
b2RlKGhlYWRlcikpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIENvbnRlbnRT
ZWN1cml0eVBvbGljeUhlYWRlclR5cGUgaGVhZGVyVHlwZTsKLSAgICAgICAgaWYgKCFkZWNvZGVy
LmRlY29kZUVudW0oaGVhZGVyVHlwZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIGhlYWRlcnMubV9oZWFkZXJzLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihoZWFkZXIsIGhlYWRl
clR5cGUpKTsKKyAgICBDb250ZW50U2VjdXJpdHlQb2xpY3lSZXNwb25zZUhlYWRlcnMgaGVhZGVy
czsKKworICAgIE9wdGlvbmFsPHVpbnQ2NF90PiBoZWFkZXJzU2l6ZTsKKyAgICBkZWNvZGVyID4+
IGhlYWRlcnNTaXplOworICAgIGlmICghaGVhZGVyc1NpemUpCisgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAqaGVhZGVyc1NpemU7ICsraSkg
eworICAgICAgICBPcHRpb25hbDxTdHJpbmc+IGhlYWRlcjsKKyAgICAgICAgZGVjb2RlciA+PiBo
ZWFkZXI7CisgICAgICAgIGlmICghaGVhZGVyKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKKyAgICAgICAgT3B0aW9uYWw8Q29udGVudFNlY3VyaXR5UG9saWN5SGVhZGVyVHlwZT4g
aGVhZGVyVHlwZTsKKyAgICAgICAgZGVjb2RlciA+PiBoZWFkZXJUeXBlOworICAgICAgICBpZiAo
IWhlYWRlclR5cGUpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICBo
ZWFkZXJzLm1faGVhZGVycy5hcHBlbmQoc3RkOjptYWtlX3BhaXIoV1RGTW92ZSgqaGVhZGVyKSwg
V1RGTW92ZSgqaGVhZGVyVHlwZSkpKTsKICAgICB9CiAgICAgaGVhZGVycy5tX2hlYWRlcnMuc2hy
aW5rVG9GaXQoKTsKIAotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaGVhZGVycy5tX2h0dHBTdGF0
dXNDb2RlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIE9wdGlvbmFsPGludD4gaHR0cFN0
YXR1c0NvZGU7CisgICAgZGVjb2RlciA+PiBodHRwU3RhdHVzQ29kZTsKKyAgICBpZiAoIWh0dHBT
dGF0dXNDb2RlKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIGhlYWRlcnMubV9o
dHRwU3RhdHVzQ29kZSA9ICpodHRwU3RhdHVzQ29kZTsKIAotICAgIHJldHVybiB0cnVlOworICAg
IHJldHVybiBXVEZNb3ZlKGhlYWRlcnMpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QYXN0ZWJvYXJkQ3VzdG9tRGF0YS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGFzdGVib2FyZEN1c3RvbURhdGEu
Y3BwCShyZXZpc2lvbiAyNTk4OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QYXN0ZWJv
YXJkQ3VzdG9tRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk4LDIzICs5OCwyOSBAQCBQYXN0
ZWJvYXJkQ3VzdG9tRGF0YSBQYXN0ZWJvYXJkQ3VzdG9tRGF0CiAKICAgICBQYXN0ZWJvYXJkQ3Vz
dG9tRGF0YSByZXN1bHQ7CiAgICAgYXV0byBkZWNvZGVyID0gYnVmZmVyLmRlY29kZXIoKTsKLSAg
ICB1bnNpZ25lZCB2ZXJzaW9uOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUodmVyc2lvbikgfHwg
dmVyc2lvbiA+IG1heFN1cHBvcnRlZERhdGFTZXJpYWxpemF0aW9uVmVyc2lvbk51bWJlcikKKyAg
ICBPcHRpb25hbDx1bnNpZ25lZD4gdmVyc2lvbjsKKyAgICBkZWNvZGVyID4+IHZlcnNpb247Cisg
ICAgaWYgKCF2ZXJzaW9uIHx8ICp2ZXJzaW9uID4gbWF4U3VwcG9ydGVkRGF0YVNlcmlhbGl6YXRp
b25WZXJzaW9uTnVtYmVyKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgaWYgKCFkZWNvZGVy
LmRlY29kZShyZXN1bHQubV9vcmlnaW4pKQorICAgIE9wdGlvbmFsPFN0cmluZz4gb3JpZ2luOwor
ICAgIGRlY29kZXIgPj4gb3JpZ2luOworICAgIGlmICghb3JpZ2luKQogICAgICAgICByZXR1cm4g
eyB9OworICAgIHJlc3VsdC5tX29yaWdpbiA9IFdURk1vdmUoKm9yaWdpbik7CiAKLSAgICBIYXNo
TWFwPFN0cmluZywgU3RyaW5nPiBzYW1lT3JpZ2luQ3VzdG9tU3RyaW5nRGF0YTsKLSAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKHNhbWVPcmlnaW5DdXN0b21TdHJpbmdEYXRhKSkKKyAgICBPcHRpb25h
bDxIYXNoTWFwPFN0cmluZywgU3RyaW5nPj4gc2FtZU9yaWdpbkN1c3RvbVN0cmluZ0RhdGE7Cisg
ICAgZGVjb2RlciA+PiBzYW1lT3JpZ2luQ3VzdG9tU3RyaW5nRGF0YTsKKyAgICBpZiAoIXNhbWVP
cmlnaW5DdXN0b21TdHJpbmdEYXRhKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgVmVjdG9y
PFN0cmluZz4gb3JkZXJlZFR5cGVzOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUob3JkZXJlZFR5
cGVzKSkKKyAgICBPcHRpb25hbDxWZWN0b3I8U3RyaW5nPj4gb3JkZXJlZFR5cGVzOworICAgIGRl
Y29kZXIgPj4gb3JkZXJlZFR5cGVzOworICAgIGlmICghb3JkZXJlZFR5cGVzKQogICAgICAgICBy
ZXR1cm4geyB9OwogCi0gICAgZm9yIChhdXRvJiB0eXBlIDogb3JkZXJlZFR5cGVzKQotICAgICAg
ICByZXN1bHQud3JpdGVTdHJpbmdJbkN1c3RvbURhdGEodHlwZSwgc2FtZU9yaWdpbkN1c3RvbVN0
cmluZ0RhdGEuZ2V0KHR5cGUpKTsKKyAgICBmb3IgKGF1dG8mIHR5cGUgOiAqb3JkZXJlZFR5cGVz
KQorICAgICAgICByZXN1bHQud3JpdGVTdHJpbmdJbkN1c3RvbURhdGEodHlwZSwgc2FtZU9yaWdp
bkN1c3RvbVN0cmluZ0RhdGEtPmdldCh0eXBlKSk7CiAKICAgICByZXR1cm4gcmVzdWx0OwogfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2VuZXJpYy9LZXllZERlY29kZXJHZW5lcmlj
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nZW5lcmljL0tleWVk
RGVjb2RlckdlbmVyaWMuY3BwCShyZXZpc2lvbiAyNTk4OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9nZW5lcmljL0tleWVkRGVjb2RlckdlbmVyaWMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00OCw0MCArNDgsMzYgQEAgcHJpdmF0ZToKICAgICBIYXNoTWFwPFN0cmluZywgc3RkOjp1bmlx
dWVfcHRyPE5vZGU+PiBtX21hcDsKIH07CiAKLXN0YXRpYyBib29sIHJlYWRTdHJpbmcoV1RGOjpQ
ZXJzaXN0ZW5jZTo6RGVjb2RlciYgZGVjb2RlciwgU3RyaW5nJiByZXN1bHQpCitzdGF0aWMgT3B0
aW9uYWw8U3RyaW5nPiByZWFkU3RyaW5nKFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXImIGRlY29k
ZXIpCiB7Ci0gICAgc2l6ZV90IHNpemU7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShzaXplKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghc2l6ZSkgewotICAgICAgICByZXN1bHQg
PSBlbXB0eVN0cmluZygpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAo
IWRlY29kZXIuYnVmZmVySXNMYXJnZUVub3VnaFRvQ29udGFpbjx1aW50OF90PihzaXplKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFZlY3Rvcjx1aW50OF90PiBidWZmZXIoc2l6ZSk7Ci0g
ICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShidWZmZXIuZGF0YSgpLCBzaXpl
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJlc3VsdCA9IFN0cmluZzo6ZnJvbVVURjgo
YnVmZmVyLmRhdGEoKSwgc2l6ZSk7CisgICAgT3B0aW9uYWw8c2l6ZV90PiBzaXplOworICAgIGRl
Y29kZXIgPj4gc2l6ZTsKKyAgICBpZiAoIXNpemUpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CisgICAgaWYgKCFzaXplLnZhbHVlKCkpCisgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygp
OworCisgICAgVmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZlcihzaXplLnZhbHVlKCkpOworICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoYnVmZmVyLmRhdGEoKSwgc2l6ZS52YWx1ZSgp
KSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBhdXRvIHJlc3VsdCA9IFN0cmlu
Zzo6ZnJvbVVURjgoYnVmZmVyLmRhdGEoKSwgc2l6ZS52YWx1ZSgpKTsKICAgICBpZiAocmVzdWx0
LmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CiAKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgogc3RhdGljIGJvb2wgcmVhZFNpbXBsZVZhbHVlKFdURjo6UGVyc2lz
dGVuY2U6OkRlY29kZXImIGRlY29kZXIsIEtleWVkRGVjb2RlckdlbmVyaWM6OkRpY3Rpb25hcnkm
IGRpY3Rpb25hcnkpCiB7Ci0gICAgU3RyaW5nIGtleTsKLSAgICBib29sIG9rID0gcmVhZFN0cmlu
ZyhkZWNvZGVyLCBrZXkpOwotICAgIGlmICghb2spCisgICAgYXV0byBrZXkgPSByZWFkU3RyaW5n
KGRlY29kZXIpOworICAgIGlmICgha2V5KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgVCB2
YWx1ZTsKLSAgICBvayA9IGRlY29kZXIuZGVjb2RlKHZhbHVlKTsKLSAgICBpZiAoIW9rKQorICAg
IE9wdGlvbmFsPFQ+IHZhbHVlOworICAgIGRlY29kZXIgPj4gdmFsdWU7CisgICAgaWYgKCF2YWx1
ZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGRpY3Rpb25hcnkuYWRkKGtleSwgV1RGTW92
ZSh2YWx1ZSkpOworICAgIGRpY3Rpb25hcnkuYWRkKGtleS52YWx1ZSgpLCBXVEZNb3ZlKHZhbHVl
LnZhbHVlKCkpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtOTMsMzEgKzg5LDM4IEBAIHN0
ZDo6dW5pcXVlX3B0cjxLZXllZERlY29kZXI+IEtleWVkRGVjb2QKIEtleWVkRGVjb2RlckdlbmVy
aWM6OktleWVkRGVjb2RlckdlbmVyaWMoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUp
CiB7CiAgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyKGRhdGEsIHNpemUpOwot
ICAgIEtleWVkRW5jb2RlckdlbmVyaWM6OlR5cGUgdHlwZTsKLSAgICBTdHJpbmcga2V5OwogCiAg
ICAgbV9yb290RGljdGlvbmFyeSA9IG1ha2VVbmlxdWU8RGljdGlvbmFyeT4oKTsKICAgICBtX2Rp
Y3Rpb25hcnlTdGFjay5hcHBlbmQobV9yb290RGljdGlvbmFyeS5nZXQoKSk7CiAKICAgICBib29s
IG9rID0gdHJ1ZTsKLSAgICB3aGlsZSAob2sgJiYgZGVjb2Rlci5kZWNvZGVFbnVtKHR5cGUpKSB7
Ci0gICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgIHdoaWxlIChvaykgeworICAgICAgICBPcHRp
b25hbDxLZXllZEVuY29kZXJHZW5lcmljOjpUeXBlPiB0eXBlOworICAgICAgICBkZWNvZGVyID4+
IHR5cGU7CisgICAgICAgIGlmICghdHlwZSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
IHN3aXRjaCAoKnR5cGUpIHsKICAgICAgICAgY2FzZSBLZXllZEVuY29kZXJHZW5lcmljOjpUeXBl
OjpCeXRlczogewotICAgICAgICAgICAgb2sgPSByZWFkU3RyaW5nKGRlY29kZXIsIGtleSk7Cisg
ICAgICAgICAgICBhdXRvIGtleSA9IHJlYWRTdHJpbmcoZGVjb2Rlcik7CisgICAgICAgICAgICBp
ZiAoIWtleSkKKyAgICAgICAgICAgICAgICBvayA9IGZhbHNlOwogICAgICAgICAgICAgaWYgKCFv
aykKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIHNpemVfdCBzaXplOwotICAg
ICAgICAgICAgb2sgPSBkZWNvZGVyLmRlY29kZShzaXplKTsKKyAgICAgICAgICAgIE9wdGlvbmFs
PHNpemVfdD4gc2l6ZTsKKyAgICAgICAgICAgIGRlY29kZXIgPj4gc2l6ZTsKKyAgICAgICAgICAg
IGlmICghc2l6ZSkKKyAgICAgICAgICAgICAgICBvayA9IGZhbHNlOwogICAgICAgICAgICAgaWYg
KCFvaykKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIG9rID0gZGVjb2Rlci5i
dWZmZXJJc0xhcmdlRW5vdWdoVG9Db250YWluPHVpbnQ4X3Q+KHNpemUpOworICAgICAgICAgICAg
b2sgPSBkZWNvZGVyLmJ1ZmZlcklzTGFyZ2VFbm91Z2hUb0NvbnRhaW48dWludDhfdD4oKnNpemUp
OwogICAgICAgICAgICAgaWYgKCFvaykKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIFZlY3Rvcjx1aW50OF90PiBidWZmZXIoc2l6ZSk7Ci0gICAgICAgICAgICBvayA9IGRlY29k
ZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKGJ1ZmZlci5kYXRhKCksIHNpemUpOworICAgICAgICAg
ICAgVmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZlcigqc2l6ZSk7CisgICAgICAgICAgICBvayA9IGRlY29k
ZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKGJ1ZmZlci5kYXRhKCksICpzaXplKTsKICAgICAgICAg
ICAgIGlmICghb2spCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBtX2RpY3Rp
b25hcnlTdGFjay5sYXN0KCktPmFkZChrZXksIFdURk1vdmUoYnVmZmVyKSk7CisgICAgICAgICAg
ICBtX2RpY3Rpb25hcnlTdGFjay5sYXN0KCktPmFkZCgqa2V5LCBXVEZNb3ZlKGJ1ZmZlcikpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBLZXllZEVuY29kZXJH
ZW5lcmljOjpUeXBlOjpCb29sOgpAQCAtMTQyLDI0ICsxNDUsMjkgQEAgS2V5ZWREZWNvZGVyR2Vu
ZXJpYzo6S2V5ZWREZWNvZGVyR2VuZXJpYwogICAgICAgICAgICAgb2sgPSByZWFkU2ltcGxlVmFs
dWU8ZG91YmxlPihkZWNvZGVyLCAqbV9kaWN0aW9uYXJ5U3RhY2subGFzdCgpKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBjYXNlIEtleWVkRW5jb2RlckdlbmVyaWM6OlR5cGU6OlN0cmlu
ZzogewotICAgICAgICAgICAgb2sgPSByZWFkU3RyaW5nKGRlY29kZXIsIGtleSk7CisgICAgICAg
ICAgICBhdXRvIGtleSA9IHJlYWRTdHJpbmcoZGVjb2Rlcik7CisgICAgICAgICAgICBpZiAoIWtl
eSkKKyAgICAgICAgICAgICAgICBvayA9IGZhbHNlOwogICAgICAgICAgICAgaWYgKCFvaykKICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIFN0cmluZyB2YWx1ZTsKLSAgICAgICAg
ICAgIG9rID0gcmVhZFN0cmluZyhkZWNvZGVyLCB2YWx1ZSk7CisgICAgICAgICAgICBhdXRvIHZh
bHVlID0gcmVhZFN0cmluZyhkZWNvZGVyKTsKKyAgICAgICAgICAgIGlmICghdmFsdWUpCisgICAg
ICAgICAgICAgICAgb2sgPSBmYWxzZTsKICAgICAgICAgICAgIGlmICghb2spCiAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBtX2RpY3Rpb25hcnlTdGFjay5sYXN0KCktPmFkZChr
ZXksIFdURk1vdmUodmFsdWUpKTsKKyAgICAgICAgICAgIG1fZGljdGlvbmFyeVN0YWNrLmxhc3Qo
KS0+YWRkKCprZXksIFdURk1vdmUoKnZhbHVlKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgICAgICBjYXNlIEtleWVkRW5jb2RlckdlbmVyaWM6OlR5cGU6OkJlZ2luT2JqZWN0
OiB7Ci0gICAgICAgICAgICBvayA9IHJlYWRTdHJpbmcoZGVjb2Rlciwga2V5KTsKKyAgICAgICAg
ICAgIGF1dG8ga2V5ID0gcmVhZFN0cmluZyhkZWNvZGVyKTsKKyAgICAgICAgICAgIGlmICgha2V5
KQorICAgICAgICAgICAgICAgIG9rID0gZmFsc2U7CiAgICAgICAgICAgICBpZiAoIW9rKQogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgYXV0byogY3VycmVudERpY3RpbmFyeSA9
IG1fZGljdGlvbmFyeVN0YWNrLmxhc3QoKTsKICAgICAgICAgICAgIGF1dG8gbmV3RGljdGlvbmFy
eSA9IG1ha2VVbmlxdWU8RGljdGlvbmFyeT4oKTsKICAgICAgICAgICAgIG1fZGljdGlvbmFyeVN0
YWNrLmFwcGVuZChuZXdEaWN0aW9uYXJ5LmdldCgpKTsKLSAgICAgICAgICAgIGN1cnJlbnREaWN0
aW5hcnktPmFkZChrZXksIFdURk1vdmUobmV3RGljdGlvbmFyeSkpOworICAgICAgICAgICAgY3Vy
cmVudERpY3RpbmFyeS0+YWRkKCprZXksIFdURk1vdmUobmV3RGljdGlvbmFyeSkpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBLZXllZEVuY29kZXJHZW5lcmlj
OjpUeXBlOjpFbmRPYmplY3Q6CkBAIC0xNjgsMTIgKzE3NiwxNCBAQCBLZXllZERlY29kZXJHZW5l
cmljOjpLZXllZERlY29kZXJHZW5lcmljCiAgICAgICAgICAgICAgICAgb2sgPSBmYWxzZTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEtleWVkRW5jb2RlckdlbmVyaWM6OlR5cGU6
OkJlZ2luQXJyYXk6IHsKLSAgICAgICAgICAgIG9rID0gcmVhZFN0cmluZyhkZWNvZGVyLCBrZXkp
OworICAgICAgICAgICAgYXV0byBrZXkgPSByZWFkU3RyaW5nKGRlY29kZXIpOworICAgICAgICAg
ICAgaWYgKCFrZXkpCisgICAgICAgICAgICAgICAgb2sgPSBmYWxzZTsKICAgICAgICAgICAgIGlm
ICghb2spCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBhdXRvIG5ld0FycmF5
ID0gbWFrZVVuaXF1ZTxBcnJheT4oKTsKICAgICAgICAgICAgIG1fYXJyYXlTdGFjay5hcHBlbmQo
bmV3QXJyYXkuZ2V0KCkpOwotICAgICAgICAgICAgbV9kaWN0aW9uYXJ5U3RhY2subGFzdCgpLT5h
ZGQoa2V5LCBXVEZNb3ZlKG5ld0FycmF5KSk7CisgICAgICAgICAgICBtX2RpY3Rpb25hcnlTdGFj
ay5sYXN0KCktPmFkZCgqa2V5LCBXVEZNb3ZlKG5ld0FycmF5KSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICBjYXNlIEtleWVkRW5jb2RlckdlbmVyaWM6OlR5cGU6OkJl
Z2luQXJyYXlFbGVtZW50OiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L05ldHdvcmtMb2FkTWV0cmljcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvTmV0d29ya0xvYWRNZXRyaWNzLmgJKHJldmlzaW9uIDI1OTg5OCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvTmV0d29ya0xvYWRNZXRyaWNzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMwLDggKzMwLDcgQEAKICNpbmNsdWRlIDx3dGYvQm94Lmg+CiAjaW5jbHVk
ZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL1NlY29uZHMuaD4KLSNpbmNsdWRlIDx3
dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudERlY29kZXIuaD4KLSNpbmNsdWRlIDx3dGYvcGVyc2lz
dGVuY2UvUGVyc2lzdGVudEVuY29kZXIuaD4KKyNpbmNsdWRlIDx3dGYvcGVyc2lzdGVuY2UvUGVy
c2lzdGVudENvZGVyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKICNpZiBQ
TEFURk9STShDT0NPQSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVz
b3VyY2VMb2FkUHJpb3JpdHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL1Jlc291cmNlTG9hZFByaW9yaXR5LmgJKHJldmlzaW9uIDI1OTg5OCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VMb2FkUHJpb3JpdHkuaAkod29y
a2luZyBjb3B5KQpAQCAtMjMsOCArMjMsNyBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgogICovCiAKLSNpZm5kZWYgUmVzb3VyY2VMb2FkUHJpb3JpdHlfaAotI2RlZmluZSBS
ZXNvdXJjZUxvYWRQcmlvcml0eV9oCisjcHJhZ21hIG9uY2UKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCkBAIC01NCw3ICs1MywxOSBAQCBpbmxpbmUgUmVzb3VyY2VMb2FkUHJpb3JpdHkmIG9wZXJh
dG9yLS0oCiAgICAgcmV0dXJuIHByaW9yaXR5ID0gc3RhdGljX2Nhc3Q8UmVzb3VyY2VMb2FkUHJp
b3JpdHk+KHN0YXRpY19jYXN0PGludD4ocHJpb3JpdHkpIC0gMSk7CiB9CiAKLX0KK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworbmFtZXNwYWNlIFdURiB7CiAKLSNlbmRpZgordGVtcGxhdGU8PiBz
dHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpSZXNvdXJjZUxvYWRQcmlvcml0eT4geworICAgIHVz
aW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8CisgICAgICAgIFdlYkNvcmU6OlJlc291cmNlTG9hZFBy
aW9yaXR5LAorICAgICAgICBXZWJDb3JlOjpSZXNvdXJjZUxvYWRQcmlvcml0eTo6VmVyeUxvdywK
KyAgICAgICAgV2ViQ29yZTo6UmVzb3VyY2VMb2FkUHJpb3JpdHk6OkxvdywKKyAgICAgICAgV2Vi
Q29yZTo6UmVzb3VyY2VMb2FkUHJpb3JpdHk6Ok1lZGl1bSwKKyAgICAgICAgV2ViQ29yZTo6UmVz
b3VyY2VMb2FkUHJpb3JpdHk6OkhpZ2gsCisgICAgICAgIFdlYkNvcmU6OlJlc291cmNlTG9hZFBy
aW9yaXR5OjpWZXJ5SGlnaAorICAgID47Cit9OwogCit9IC8vIG5hbWVzcGFjZSBXVEYKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1
ZXN0QmFzZS5oCShyZXZpc2lvbiAyNTk4OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsMTQgKzI1
LDE0IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgUmVzb3VyY2VSZXF1ZXN0QmFz
ZV9oCi0jZGVmaW5lIFJlc291cmNlUmVxdWVzdEJhc2VfaAorI3ByYWdtYSBvbmNlCiAKICNpbmNs
dWRlICJGb3JtRGF0YS5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyVHlwZXMuaCIKICNpbmNsdWRl
ICJIVFRQSGVhZGVyTWFwLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIlJlc291
cmNlTG9hZFByaW9yaXR5LmgiCisjaW5jbHVkZSA8d3RmL0VudW1UcmFpdHMuaD4KICNpbmNsdWRl
IDx3dGYvVVJMLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTI4Myw2NCArMjgzLDg4IEBA
IEFMV0FZU19JTkxJTkUgdm9pZCBSZXNvdXJjZVJlcXVlc3RCYXNlOjoKICAgICBlbmNvZGVyIDw8
IG1faHR0cE1ldGhvZDsKICAgICBlbmNvZGVyIDw8IG1faHR0cEhlYWRlckZpZWxkczsKICAgICBl
bmNvZGVyIDw8IG1fcmVzcG9uc2VDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJy
YXk7Ci0gICAgZW5jb2Rlci5lbmNvZGVFbnVtKG1fY2FjaGVQb2xpY3kpOworICAgIGVuY29kZXIg
PDwgbV9jYWNoZVBvbGljeTsKICAgICBlbmNvZGVyIDw8IG1fYWxsb3dDb29raWVzOwotICAgIGVu
Y29kZXIuZW5jb2RlRW51bShtX3NhbWVTaXRlRGlzcG9zaXRpb24pOworICAgIGVuY29kZXIgPDwg
bV9zYW1lU2l0ZURpc3Bvc2l0aW9uOwogICAgIGVuY29kZXIgPDwgbV9pc1RvcFNpdGU7Ci0gICAg
ZW5jb2Rlci5lbmNvZGVFbnVtKG1fcHJpb3JpdHkpOwotICAgIGVuY29kZXIuZW5jb2RlRW51bSht
X3JlcXVlc3Rlcik7CisgICAgZW5jb2RlciA8PCBtX3ByaW9yaXR5OworICAgIGVuY29kZXIgPDwg
bV9yZXF1ZXN0ZXI7CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+CiBBTFdBWVNfSU5MSU5F
IGJvb2wgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6ZGVjb2RlQmFzZShEZWNvZGVyJiBkZWNvZGVyKQog
ewotICAgIGlmICghZGVjb2Rlci5kZWNvZGUobV91cmwpKQorICAgIE9wdGlvbmFsPFVSTD4gdXJs
OworICAgIGRlY29kZXIgPj4gdXJsOworICAgIGlmICghdXJsKQogICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKG1fdGltZW91dEludGVydmFsKSkKKyAgICBt
X3VybCA9IFdURk1vdmUoKnVybCk7CisgICAgCisgICAgT3B0aW9uYWw8ZG91YmxlPiB0aW1lb3V0
SW50ZXJ2YWw7CisgICAgZGVjb2RlciA+PiB0aW1lb3V0SW50ZXJ2YWw7CisgICAgaWYgKCF0aW1l
b3V0SW50ZXJ2YWwpCiAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBtX3RpbWVvdXRJbnRlcnZh
bCA9IFdURk1vdmUoKnRpbWVvdXRJbnRlcnZhbCk7CiAKLSAgICBTdHJpbmcgZmlyc3RQYXJ0eUZv
ckNvb2tpZXM7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShmaXJzdFBhcnR5Rm9yQ29va2llcykp
CisgICAgT3B0aW9uYWw8U3RyaW5nPiBmaXJzdFBhcnR5Rm9yQ29va2llczsKKyAgICBkZWNvZGVy
ID4+IGZpcnN0UGFydHlGb3JDb29raWVzOworICAgIGlmICghZmlyc3RQYXJ0eUZvckNvb2tpZXMp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX2ZpcnN0UGFydHlGb3JDb29raWVzID0gVVJM
KHsgfSwgZmlyc3RQYXJ0eUZvckNvb2tpZXMpOworICAgIG1fZmlyc3RQYXJ0eUZvckNvb2tpZXMg
PSBVUkwoeyB9LCAqZmlyc3RQYXJ0eUZvckNvb2tpZXMpOwogCi0gICAgaWYgKCFkZWNvZGVyLmRl
Y29kZShtX2h0dHBNZXRob2QpKQorICAgIE9wdGlvbmFsPFN0cmluZz4gaHR0cE1ldGhvZDsKKyAg
ICBkZWNvZGVyID4+IGh0dHBNZXRob2Q7CisgICAgaWYgKCFodHRwTWV0aG9kKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgbV9odHRwTWV0aG9kID0gV1RGTW92ZSgqaHR0cE1ldGhvZCk7CiAK
LSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKG1faHR0cEhlYWRlckZpZWxkcykpCisgICAgT3B0aW9u
YWw8SFRUUEhlYWRlck1hcD4gZmllbGRzOworICAgIGRlY29kZXIgPj4gZmllbGRzOworICAgIGlm
ICghZmllbGRzKQogICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgbV9odHRwSGVhZGVyRmllbGRz
ID0gV1RGTW92ZSgqZmllbGRzKTsKIAotICAgIGlmICghZGVjb2Rlci5kZWNvZGUobV9yZXNwb25z
ZUNvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheSkpCisgICAgT3B0aW9uYWw8
VmVjdG9yPFN0cmluZz4+IGFycmF5OworICAgIGRlY29kZXIgPj4gYXJyYXk7CisgICAgaWYgKCFh
cnJheSkKICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIG1fcmVzcG9uc2VDb250ZW50RGlzcG9z
aXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJyYXkgPSBXVEZNb3ZlKCphcnJheSk7CiAKLSAgICBSZXNv
dXJjZVJlcXVlc3RDYWNoZVBvbGljeSBjYWNoZVBvbGljeTsKLSAgICBpZiAoIWRlY29kZXIuZGVj
b2RlRW51bShjYWNoZVBvbGljeSkpCisgICAgT3B0aW9uYWw8UmVzb3VyY2VSZXF1ZXN0Q2FjaGVQ
b2xpY3k+IGNhY2hlUG9saWN5OworICAgIGRlY29kZXIgPj4gY2FjaGVQb2xpY3k7CisgICAgaWYg
KCFjYWNoZVBvbGljeSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fY2FjaGVQb2xpY3kg
PSBjYWNoZVBvbGljeTsKKyAgICBtX2NhY2hlUG9saWN5ID0gKmNhY2hlUG9saWN5OwogCi0gICAg
Ym9vbCBhbGxvd0Nvb2tpZXM7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShhbGxvd0Nvb2tpZXMp
KQorICAgIE9wdGlvbmFsPGJvb2w+IGFsbG93Q29va2llczsKKyAgICBkZWNvZGVyID4+IGFsbG93
Q29va2llczsKKyAgICBpZiAoIWFsbG93Q29va2llcykKICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIG1fYWxsb3dDb29raWVzID0gYWxsb3dDb29raWVzOworICAgIG1fYWxsb3dDb29raWVzID0g
KmFsbG93Q29va2llczsKIAotICAgIFNhbWVTaXRlRGlzcG9zaXRpb24gc2FtZVNpdGVEaXNwb3Np
dGlvbjsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlRW51bShzYW1lU2l0ZURpc3Bvc2l0aW9uKSkK
KyAgICBPcHRpb25hbDxTYW1lU2l0ZURpc3Bvc2l0aW9uPiBzYW1lU2l0ZURpc3Bvc2l0aW9uOwor
ICAgIGRlY29kZXIgPj4gc2FtZVNpdGVEaXNwb3NpdGlvbjsKKyAgICBpZiAoIXNhbWVTaXRlRGlz
cG9zaXRpb24pCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX3NhbWVTaXRlRGlzcG9zaXRp
b24gPSBzYW1lU2l0ZURpc3Bvc2l0aW9uOworICAgIG1fc2FtZVNpdGVEaXNwb3NpdGlvbiA9ICpz
YW1lU2l0ZURpc3Bvc2l0aW9uOwogCi0gICAgYm9vbCBpc1RvcFNpdGU7Ci0gICAgaWYgKCFkZWNv
ZGVyLmRlY29kZShpc1RvcFNpdGUpKQorICAgIE9wdGlvbmFsPGJvb2w+IGlzVG9wU2l0ZTsKKyAg
ICBkZWNvZGVyID4+IGlzVG9wU2l0ZTsKKyAgICBpZiAoIWlzVG9wU2l0ZSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIG1faXNUb3BTaXRlID0gaXNUb3BTaXRlOworICAgIG1faXNUb3BTaXRl
ID0gKmlzVG9wU2l0ZTsKIAotICAgIFJlc291cmNlTG9hZFByaW9yaXR5IHByaW9yaXR5OwotICAg
IGlmICghZGVjb2Rlci5kZWNvZGVFbnVtKHByaW9yaXR5KSkKKyAgICBPcHRpb25hbDxSZXNvdXJj
ZUxvYWRQcmlvcml0eT4gcHJpb3JpdHk7CisgICAgZGVjb2RlciA+PiBwcmlvcml0eTsKKyAgICBp
ZiAoIXByaW9yaXR5KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9wcmlvcml0eSA9IHBy
aW9yaXR5OworICAgIG1fcHJpb3JpdHkgPSAqcHJpb3JpdHk7CiAKLSAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlRW51bShtX3JlcXVlc3RlcikpCisgICAgT3B0aW9uYWw8UmVxdWVzdGVyPiByZXF1ZXN0
ZXI7CisgICAgZGVjb2RlciA+PiByZXF1ZXN0ZXI7CisgICAgaWYgKCFyZXF1ZXN0ZXIpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBtX3JlcXVlc3RlciA9ICpyZXF1ZXN0ZXI7CiAKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KQEAgLTM2MSw0ICszODUsMzkgQEAgYm9vbCBSZXNvdXJjZVJlcXVlc3RC
YXNlOjpkZWNvZGVXaXRob3V0UAogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAv
LyBSZXNvdXJjZVJlcXVlc3RCYXNlX2gKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTw+IHN0
cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdENhY2hlUG9saWN5PiB7Cisg
ICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKKyAgICAgICAgV2ViQ29yZTo6UmVzb3VyY2VS
ZXF1ZXN0Q2FjaGVQb2xpY3ksCisgICAgICAgIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdENhY2hl
UG9saWN5OjpVc2VQcm90b2NvbENhY2hlUG9saWN5LAorICAgICAgICBXZWJDb3JlOjpSZXNvdXJj
ZVJlcXVlc3RDYWNoZVBvbGljeTo6UmVsb2FkSWdub3JpbmdDYWNoZURhdGEsCisgICAgICAgIFdl
YkNvcmU6OlJlc291cmNlUmVxdWVzdENhY2hlUG9saWN5OjpSZXR1cm5DYWNoZURhdGFFbHNlTG9h
ZCwKKyAgICAgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Q2FjaGVQb2xpY3k6OlJldHVybkNh
Y2hlRGF0YURvbnRMb2FkLAorICAgICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RDYWNoZVBv
bGljeTo6RG9Ob3RVc2VBbnlDYWNoZSwKKyAgICAgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0
Q2FjaGVQb2xpY3k6OlJlZnJlc2hBbnlDYWNoZURhdGEKKyAgICA+OworfTsKKwordGVtcGxhdGU8
PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RCYXNlOjpTYW1lU2l0
ZURpc3Bvc2l0aW9uPiB7CisgICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKKyAgICAgICAg
V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0QmFzZTo6U2FtZVNpdGVEaXNwb3NpdGlvbiwKKyAgICAg
ICAgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0QmFzZTo6U2FtZVNpdGVEaXNwb3NpdGlvbjo6VW5z
cGVjaWZpZWQsCisgICAgICAgIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdEJhc2U6OlNhbWVTaXRl
RGlzcG9zaXRpb246OlNhbWVTaXRlLAorICAgICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RC
YXNlOjpTYW1lU2l0ZURpc3Bvc2l0aW9uOjpDcm9zc1NpdGUKKyAgICA+OworfTsKKwordGVtcGxh
dGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RCYXNlOjpSZXF1
ZXN0ZXI+IHsKKyAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAorICAgICAgICBXZWJDb3Jl
OjpSZXNvdXJjZVJlcXVlc3RCYXNlOjpSZXF1ZXN0ZXIsCisgICAgICAgIFdlYkNvcmU6OlJlc291
cmNlUmVxdWVzdEJhc2U6OlJlcXVlc3Rlcjo6VW5zcGVjaWZpZWQsCisgICAgICAgIFdlYkNvcmU6
OlJlc291cmNlUmVxdWVzdEJhc2U6OlJlcXVlc3Rlcjo6TWFpbiwKKyAgICAgICAgV2ViQ29yZTo6
UmVzb3VyY2VSZXF1ZXN0QmFzZTo6UmVxdWVzdGVyOjpYSFIsCisgICAgICAgIFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdEJhc2U6OlJlcXVlc3Rlcjo6RmV0Y2gsCisgICAgICAgIFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdEJhc2U6OlJlcXVlc3Rlcjo6TWVkaWEsCisgICAgICAgIFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdEJhc2U6OlJlcXVlc3Rlcjo6SW1wb3J0U2NyaXB0cworICAgID47Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXVEYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvUmVzb3VyY2VSZXNwb25zZUJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVzcG9uc2VCYXNlLmgJKHJldmlzaW9uIDI1OTg5OCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXNwb25zZUJhc2Uu
aAkod29ya2luZyBjb3B5KQpAQCAtMjk3LDkgKzI5Nyw5IEBAIHZvaWQgUmVzb3VyY2VSZXNwb25z
ZUJhc2U6OmVuY29kZShFbmNvZGUKIAogICAgIGVuY29kZXIgPDwgbV9odHRwU3RhdHVzQ29kZTsK
ICAgICBlbmNvZGVyIDw8IG1fY2VydGlmaWNhdGVJbmZvOwotICAgIGVuY29kZXIuZW5jb2RlRW51
bShtX3NvdXJjZSk7Ci0gICAgZW5jb2Rlci5lbmNvZGVFbnVtKG1fdHlwZSk7Ci0gICAgZW5jb2Rl
ci5lbmNvZGVFbnVtKG1fdGFpbnRpbmcpOworICAgIGVuY29kZXIgPDwgbV9zb3VyY2U7CisgICAg
ZW5jb2RlciA8PCBtX3R5cGU7CisgICAgZW5jb2RlciA8PCBtX3RhaW50aW5nOwogICAgIGVuY29k
ZXIgPDwgbV9pc1JlZGlyZWN0ZWQ7CiAgICAgVXNlZExlZ2FjeVRMUyB1c2VkTGVnYWN5VExTID0g
bV91c2VkTGVnYWN5VExTOwogICAgIGVuY29kZXIgPDwgdXNlZExlZ2FjeVRMUzsKQEAgLTMwNyw2
OCArMzA3LDE2MSBAQCB2b2lkIFJlc291cmNlUmVzcG9uc2VCYXNlOjplbmNvZGUoRW5jb2RlCiB9
CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1ib29sIFJlc291cmNlUmVzcG9uc2VCYXNlOjpk
ZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgUmVzb3VyY2VSZXNwb25zZUJhc2UmIHJlc3BvbnNlKQor
Ym9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gUmVzb3VyY2VSZXNwb25zZUJhc2U6OmRlY29kZShEZWNv
ZGVyJiBkZWNvZGVyLCBSZXNvdXJjZVJlc3BvbnNlQmFzZSYgcmVzcG9uc2UpCiB7CiAgICAgQVNT
RVJUKHJlc3BvbnNlLm1faXNOdWxsKTsKLSAgICBib29sIHJlc3BvbnNlSXNOdWxsOwotICAgIGlm
ICghZGVjb2Rlci5kZWNvZGUocmVzcG9uc2VJc051bGwpKQorICAgIE9wdGlvbmFsPGJvb2w+IHJl
c3BvbnNlSXNOdWxsOworICAgIGRlY29kZXIgPj4gcmVzcG9uc2VJc051bGw7CisgICAgaWYgKCFy
ZXNwb25zZUlzTnVsbCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChyZXNwb25zZUlz
TnVsbCkKKyAgICBpZiAoKnJlc3BvbnNlSXNOdWxsKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAog
ICAgIHJlc3BvbnNlLm1faXNOdWxsID0gZmFsc2U7CiAKLSAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KHJlc3BvbnNlLm1fdXJsKSkKKyAgICBPcHRpb25hbDxVUkw+IHVybDsKKyAgICBkZWNvZGVyID4+
IHVybDsKKyAgICBpZiAoIXVybCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghZGVj
b2Rlci5kZWNvZGUocmVzcG9uc2UubV9taW1lVHlwZSkpCisgICAgcmVzcG9uc2UubV91cmwgPSBX
VEZNb3ZlKCp1cmwpOworCisgICAgT3B0aW9uYWw8U3RyaW5nPiBtaW1lVHlwZTsKKyAgICBkZWNv
ZGVyID4+IG1pbWVUeXBlOworICAgIGlmICghbWltZVR5cGUpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBpbnQ2NF90IGV4cGVjdGVkQ29udGVudExlbmd0aDsKLSAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlKGV4cGVjdGVkQ29udGVudExlbmd0aCkpCisgICAgcmVzcG9uc2UubV9taW1lVHlwZSA9
IFdURk1vdmUoKm1pbWVUeXBlKTsKKworICAgIE9wdGlvbmFsPGludDY0X3Q+IGV4cGVjdGVkQ29u
dGVudExlbmd0aDsKKyAgICBkZWNvZGVyID4+IGV4cGVjdGVkQ29udGVudExlbmd0aDsKKyAgICBp
ZiAoIWV4cGVjdGVkQ29udGVudExlbmd0aCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJl
c3BvbnNlLm1fZXhwZWN0ZWRDb250ZW50TGVuZ3RoID0gZXhwZWN0ZWRDb250ZW50TGVuZ3RoOwot
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzcG9uc2UubV90ZXh0RW5jb2RpbmdOYW1lKSkKKyAg
ICByZXNwb25zZS5tX2V4cGVjdGVkQ29udGVudExlbmd0aCA9ICpleHBlY3RlZENvbnRlbnRMZW5n
dGg7CisKKyAgICBPcHRpb25hbDxBdG9tU3RyaW5nPiB0ZXh0RW5jb2RpbmdOYW1lOworICAgIGRl
Y29kZXIgPj4gdGV4dEVuY29kaW5nTmFtZTsKKyAgICBpZiAoIXRleHRFbmNvZGluZ05hbWUpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3BvbnNlLm1f
aHR0cFN0YXR1c1RleHQpKQorICAgIHJlc3BvbnNlLm1fdGV4dEVuY29kaW5nTmFtZSA9IFdURk1v
dmUoKnRleHRFbmNvZGluZ05hbWUpOworCisgICAgT3B0aW9uYWw8QXRvbVN0cmluZz4gaHR0cFN0
YXR1c1RleHQ7CisgICAgZGVjb2RlciA+PiBodHRwU3RhdHVzVGV4dDsKKyAgICBpZiAoIWh0dHBT
dGF0dXNUZXh0KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShyZXNwb25zZS5tX2h0dHBWZXJzaW9uKSkKKyAgICByZXNwb25zZS5tX2h0dHBTdGF0dXNUZXh0
ID0gV1RGTW92ZSgqaHR0cFN0YXR1c1RleHQpOworCisgICAgT3B0aW9uYWw8QXRvbVN0cmluZz4g
aHR0cFZlcnNpb247CisgICAgZGVjb2RlciA+PiBodHRwVmVyc2lvbjsKKyAgICBpZiAoIWh0dHBW
ZXJzaW9uKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShy
ZXNwb25zZS5tX2h0dHBIZWFkZXJGaWVsZHMpKQorICAgIHJlc3BvbnNlLm1faHR0cFZlcnNpb24g
PSBXVEZNb3ZlKCpodHRwVmVyc2lvbik7CisKKyAgICBPcHRpb25hbDxIVFRQSGVhZGVyTWFwPiBo
dHRwSGVhZGVyRmllbGRzOworICAgIGRlY29kZXIgPj4gaHR0cEhlYWRlckZpZWxkczsKKyAgICBp
ZiAoIWh0dHBIZWFkZXJGaWVsZHMpCiAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXNwb25z
ZS5tX2h0dHBIZWFkZXJGaWVsZHMgPSBXVEZNb3ZlKCpodHRwSGVhZGVyRmllbGRzKTsKKwogICAg
IC8vIFRoZSBuZXR3b3JrTG9hZE1ldHJpY3MgaW5mbyBpcyBvbmx5IHNlbmQgb3ZlciBJUEMgYW5k
IG5vdCBzdG9yZWQgaW4gZGlzayBjYWNoZS4KICAgICBpZiBjb25zdGV4cHIgKERlY29kZXI6Omlz
SVBDRGVjb2RlcikgewotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3BvbnNlLm1fbmV0
d29ya0xvYWRNZXRyaWNzKSkKKyAgICAgICAgT3B0aW9uYWw8Qm94PE5ldHdvcmtMb2FkTWV0cmlj
cz4+IG5ldHdvcmtMb2FkTWV0cmljczsKKyAgICAgICAgZGVjb2RlciA+PiBuZXR3b3JrTG9hZE1l
dHJpY3M7CisgICAgICAgIGlmICghbmV0d29ya0xvYWRNZXRyaWNzKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICByZXNwb25zZS5tX25ldHdvcmtMb2FkTWV0cmljcyA9IFdURk1v
dmUoKm5ldHdvcmtMb2FkTWV0cmljcyk7CiAgICAgfQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUo
cmVzcG9uc2UubV9odHRwU3RhdHVzQ29kZSkpCisKKyAgICBPcHRpb25hbDxzaG9ydD4gaHR0cFN0
YXR1c0NvZGU7CisgICAgZGVjb2RlciA+PiBodHRwU3RhdHVzQ29kZTsKKyAgICBpZiAoIWh0dHBT
dGF0dXNDb2RlKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShyZXNwb25zZS5tX2NlcnRpZmljYXRlSW5mbykpCisgICAgcmVzcG9uc2UubV9odHRwU3RhdHVz
Q29kZSA9IFdURk1vdmUoKmh0dHBTdGF0dXNDb2RlKTsKKworICAgIE9wdGlvbmFsPE9wdGlvbmFs
PENlcnRpZmljYXRlSW5mbz4+IGNlcnRpZmljYXRlSW5mbzsKKyAgICBkZWNvZGVyID4+IGNlcnRp
ZmljYXRlSW5mbzsKKyAgICBpZiAoIWNlcnRpZmljYXRlSW5mbykKICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIFNvdXJjZSBzb3VyY2UgPSBTb3VyY2U6OlVua25vd247Ci0gICAgaWYgKCFkZWNv
ZGVyLmRlY29kZUVudW0oc291cmNlKSkKKyAgICByZXNwb25zZS5tX2NlcnRpZmljYXRlSW5mbyA9
IFdURk1vdmUoKmNlcnRpZmljYXRlSW5mbyk7CisKKyAgICBPcHRpb25hbDxTb3VyY2U+IHNvdXJj
ZTsKKyAgICBkZWNvZGVyID4+IHNvdXJjZTsKKyAgICBpZiAoIXNvdXJjZSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIHJlc3BvbnNlLm1fc291cmNlID0gc291cmNlOwotICAgIFR5cGUgdHlw
ZSA9IFR5cGU6OkRlZmF1bHQ7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZUVudW0odHlwZSkpCisg
ICAgcmVzcG9uc2UubV9zb3VyY2UgPSBXVEZNb3ZlKCpzb3VyY2UpOworCisgICAgT3B0aW9uYWw8
VHlwZT4gdHlwZTsKKyAgICBkZWNvZGVyID4+IHR5cGU7CisgICAgaWYgKCF0eXBlKQogICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgcmVzcG9uc2UubV90eXBlID0gdHlwZTsKLSAgICBUYWludGlu
ZyB0YWludGluZyA9IFRhaW50aW5nOjpCYXNpYzsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlRW51
bSh0YWludGluZykpCisgICAgcmVzcG9uc2UubV90eXBlID0gV1RGTW92ZSgqdHlwZSk7CisKKyAg
ICBPcHRpb25hbDxUYWludGluZz4gdGFpbnRpbmc7CisgICAgZGVjb2RlciA+PiB0YWludGluZzsK
KyAgICBpZiAoIXRhaW50aW5nKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmVzcG9uc2Uu
bV90YWludGluZyA9IHRhaW50aW5nOwotICAgIGJvb2wgaXNSZWRpcmVjdGVkID0gZmFsc2U7Ci0g
ICAgaWYgKCFkZWNvZGVyLmRlY29kZShpc1JlZGlyZWN0ZWQpKQorICAgIHJlc3BvbnNlLm1fdGFp
bnRpbmcgPSBXVEZNb3ZlKCp0YWludGluZyk7CisKKyAgICBPcHRpb25hbDxib29sPiBpc1JlZGly
ZWN0ZWQ7CisgICAgZGVjb2RlciA+PiBpc1JlZGlyZWN0ZWQ7CisgICAgaWYgKCFpc1JlZGlyZWN0
ZWQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXNwb25zZS5tX2lzUmVkaXJlY3RlZCA9
IGlzUmVkaXJlY3RlZDsKLSAgICBVc2VkTGVnYWN5VExTIHVzZWRMZWdhY3lUTFMgPSBVc2VkTGVn
YWN5VExTOjpObzsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHVzZWRMZWdhY3lUTFMpKQorICAg
IHJlc3BvbnNlLm1faXNSZWRpcmVjdGVkID0gV1RGTW92ZSgqaXNSZWRpcmVjdGVkKTsKKworICAg
IE9wdGlvbmFsPFVzZWRMZWdhY3lUTFM+IHVzZWRMZWdhY3lUTFM7CisgICAgZGVjb2RlciA+PiB1
c2VkTGVnYWN5VExTOworICAgIGlmICghdXNlZExlZ2FjeVRMUykKICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIHJlc3BvbnNlLm1fdXNlZExlZ2FjeVRMUyA9IHVzZWRMZWdhY3lUTFM7Ci0gICAg
Ym9vbCBpc1JhbmdlUmVxdWVzdGVkID0gZmFsc2U7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShp
c1JhbmdlUmVxdWVzdGVkKSkKKyAgICByZXNwb25zZS5tX3VzZWRMZWdhY3lUTFMgPSBXVEZNb3Zl
KCp1c2VkTGVnYWN5VExTKTsKKworICAgIE9wdGlvbmFsPGJvb2w+IGlzUmFuZ2VSZXF1ZXN0ZWQ7
CisgICAgZGVjb2RlciA+PiBpc1JhbmdlUmVxdWVzdGVkOworICAgIGlmICghaXNSYW5nZVJlcXVl
c3RlZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJlc3BvbnNlLm1faXNSYW5nZVJlcXVl
c3RlZCA9IGlzUmFuZ2VSZXF1ZXN0ZWQ7CisgICAgcmVzcG9uc2UubV9pc1JhbmdlUmVxdWVzdGVk
ID0gV1RGTW92ZSgqaXNSYW5nZVJlcXVlc3RlZCk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8PiBz
dHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlQmFzZTo6VHlwZT4gewor
ICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8CisgICAgICAgIFdlYkNvcmU6OlJlc291cmNl
UmVzcG9uc2VCYXNlOjpUeXBlLAorICAgICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlQmFz
ZTo6VHlwZTo6QmFzaWMsCisgICAgICAgIFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2VCYXNlOjpU
eXBlOjpDb3JzLAorICAgICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlQmFzZTo6VHlwZTo6
RGVmYXVsdCwKKyAgICAgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZUJhc2U6OlR5cGU6OkVy
cm9yLAorICAgICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlQmFzZTo6VHlwZTo6T3BhcXVl
LAorICAgICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlQmFzZTo6VHlwZTo6T3BhcXVlcmVk
aXJlY3QKKyAgICA+OworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3Jl
OjpSZXNvdXJjZVJlc3BvbnNlQmFzZTo6VGFpbnRpbmc+IHsKKyAgICB1c2luZyB2YWx1ZXMgPSBF
bnVtVmFsdWVzPAorICAgICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlQmFzZTo6VGFpbnRp
bmcsCisgICAgICAgIFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2VCYXNlOjpUYWludGluZzo6QmFz
aWMsCisgICAgICAgIFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2VCYXNlOjpUYWludGluZzo6Q29y
cywKKyAgICAgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZUJhc2U6OlRhaW50aW5nOjpPcGFx
dWUsCisgICAgICAgIFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2VCYXNlOjpUYWludGluZzo6T3Bh
cXVlcmVkaXJlY3QKKyAgICA+OworfTsKKworCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRz
PFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2VCYXNlOjpTb3VyY2U+IHsKKyAgICB1c2luZyB2YWx1
ZXMgPSBFbnVtVmFsdWVzPAorICAgICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlQmFzZTo6
U291cmNlLAorICAgICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlQmFzZTo6U291cmNlOjpV
bmtub3duLAorICAgICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlQmFzZTo6U291cmNlOjpO
ZXR3b3JrLAorICAgICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlQmFzZTo6U291cmNlOjpE
aXNrQ2FjaGUsCisgICAgICAgIFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2VCYXNlOjpTb3VyY2U6
OkRpc2tDYWNoZUFmdGVyVmFsaWRhdGlvbiwKKyAgICAgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXNw
b25zZUJhc2U6OlNvdXJjZTo6TWVtb3J5Q2FjaGUsCisgICAgICAgIFdlYkNvcmU6OlJlc291cmNl
UmVzcG9uc2VCYXNlOjpTb3VyY2U6Ok1lbW9yeUNhY2hlQWZ0ZXJWYWxpZGF0aW9uLAorICAgICAg
ICBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlQmFzZTo6U291cmNlOjpTZXJ2aWNlV29ya2VyLAor
ICAgICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlQmFzZTo6U291cmNlOjpBcHBsaWNhdGlv
bkNhY2hlLAorICAgICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlQmFzZTo6U291cmNlOjpE
T01DYWNoZSwKKyAgICAgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZUJhc2U6OlNvdXJjZTo6
SW5zcGVjdG9yT3ZlcnJpZGUKKyAgICA+OworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0NlcnRpZmljYXRlSW5mby5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvQ2VydGlmaWNh
dGVJbmZvLmgJKHJldmlzaW9uIDI1OTg5OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvY2YvQ2VydGlmaWNhdGVJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDEyICsyNiwx
MSBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJDZXJ0aWZpY2F0ZUluZm9CYXNlLmgiCisj
aW5jbHVkZSA8d3RmL0VudW1UcmFpdHMuaD4KICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi9jZi9UeXBlQ2FzdHNDRi5oPgot
I2luY2x1ZGUgPHd0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50Q29kZXJzLmg+Ci0jaW5jbHVkZSA8
d3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnREZWNvZGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3BlcnNp
c3RlbmNlL1BlcnNpc3RlbnRFbmNvZGVyLmg+CisjaW5jbHVkZSA8d3RmL3BlcnNpc3RlbmNlL1Bl
cnNpc3RlbnRDb2Rlci5oPgogCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAjaW5jbHVkZSA8U2VjdXJp
dHkvU2VjQ2VydGlmaWNhdGUuaD4KQEAgLTk4LDE2MyArOTcsMjUgQEAgcHJpdmF0ZToKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIAogbmFtZXNwYWNlIFdURiB7Ci1uYW1lc3BhY2UgUGVyc2lzdGVu
Y2UgewotCi1zdGF0aWMgdm9pZCBlbmNvZGVDRkRhdGEoRW5jb2RlciYgZW5jb2RlciwgQ0ZEYXRh
UmVmIGRhdGEpCi17Ci0gICAgdWludDY0X3QgbGVuZ3RoID0gQ0ZEYXRhR2V0TGVuZ3RoKGRhdGEp
OwotICAgIGNvbnN0IHVpbnQ4X3QqIGJ5dGVQdHIgPSBDRkRhdGFHZXRCeXRlUHRyKGRhdGEpOwot
Ci0gICAgZW5jb2RlciA8PCBsZW5ndGg7Ci0gICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERh
dGEoYnl0ZVB0ciwgc3RhdGljX2Nhc3Q8c2l6ZV90PihsZW5ndGgpKTsKLX0KLQotc3RhdGljIGJv
b2wgZGVjb2RlQ0ZEYXRhKERlY29kZXImIGRlY29kZXIsIFJldGFpblB0cjxDRkRhdGFSZWY+JiBk
YXRhKQotewotICAgIHVpbnQ2NF90IHNpemUgPSAwOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUo
c2l6ZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFZlY3Rvcjx1aW50OF90PiB2ZWN0
b3Ioc3RhdGljX2Nhc3Q8c2l6ZV90PihzaXplKSk7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZUZp
eGVkTGVuZ3RoRGF0YSh2ZWN0b3IuZGF0YSgpLCB2ZWN0b3Iuc2l6ZSgpKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgZGF0YSA9IGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlKG51bGxwdHIsIHZl
Y3Rvci5kYXRhKCksIHZlY3Rvci5zaXplKCkpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KIAordGVt
cGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm86OlR5cGU+
IHsKKyAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAorICAgICAgICBXZWJDb3JlOjpDZXJ0
aWZpY2F0ZUluZm86OlR5cGUsCisgICAgICAgIFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbzo6VHlw
ZTo6Tm9uZSwKKyAgICAgICAgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvOjpUeXBlOjpDZXJ0aWZp
Y2F0ZUNoYWluCiAjaWYgSEFWRShTRUNfVFJVU1RfU0VSSUFMSVpBVElPTikKLXN0YXRpYyB2b2lk
IGVuY29kZVNlY1RydXN0UmVmKEVuY29kZXImIGVuY29kZXIsIFNlY1RydXN0UmVmIHRydXN0KQot
ewotICAgIGF1dG8gZGF0YSA9IGFkb3B0Q0YoU2VjVHJ1c3RTZXJpYWxpemUodHJ1c3QsIG51bGxw
dHIpKTsKLSAgICBpZiAoIWRhdGEpIHsKLSAgICAgICAgZW5jb2RlciA8PCBmYWxzZTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIGVuY29kZXIgPDwgdHJ1ZTsKLSAgICBlbmNvZGVDRkRh
dGEoZW5jb2RlciwgZGF0YS5nZXQoKSk7Ci19Ci0KLXN0YXRpYyBib29sIGRlY29kZVNlY1RydXN0
UmVmKERlY29kZXImIGRlY29kZXIsIFJldGFpblB0cjxTZWNUcnVzdFJlZj4mIHJlc3VsdCkKLXsK
LSAgICBib29sIGhhc1RydXN0OwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaGFzVHJ1c3QpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWhhc1RydXN0KQotICAgICAgICByZXR1
cm4gdHJ1ZTsKLQotICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IHRydXN0RGF0YTsKLSAgICBpZiAo
IWRlY29kZUNGRGF0YShkZWNvZGVyLCB0cnVzdERhdGEpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBhdXRvIHRydXN0ID0gYWRvcHRDRihTZWNUcnVzdERlc2VyaWFsaXplKHRydXN0RGF0
YS5nZXQoKSwgbnVsbHB0cikpOwotICAgIGlmICghdHJ1c3QpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIHJlc3VsdCA9IFdURk1vdmUodHJ1c3QpOwotICAgIHJldHVybiB0cnVlOwotfQor
ICAgICAgICAsIFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbzo6VHlwZTo6VHJ1c3QKICNlbmRpZgor
ICAgID47Cit9OwogCi0jaWYgUExBVEZPUk0oQ09DT0EpCi1zdGF0aWMgdm9pZCBlbmNvZGVDZXJ0
aWZpY2F0ZUNoYWluKEVuY29kZXImIGVuY29kZXIsIENGQXJyYXlSZWYgY2VydGlmaWNhdGVDaGFp
bikKLXsKLSAgICBDRkluZGV4IHNpemUgPSBDRkFycmF5R2V0Q291bnQoY2VydGlmaWNhdGVDaGFp
bik7Ci0gICAgVmVjdG9yPENGVHlwZVJlZiwgMzI+IHZhbHVlcyhzaXplKTsKLQotICAgIENGQXJy
YXlHZXRWYWx1ZXMoY2VydGlmaWNhdGVDaGFpbiwgQ0ZSYW5nZU1ha2UoMCwgc2l6ZSksIHZhbHVl
cy5kYXRhKCkpOwotCi0gICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oc2l6ZSk7
Ci0KLSAgICBmb3IgKENGSW5kZXggaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgQVNT
RVJUKHZhbHVlc1tpXSk7Ci0gICAgICAgIGF1dG8gZGF0YSA9IGFkb3B0Q0YoU2VjQ2VydGlmaWNh
dGVDb3B5RGF0YShjaGVja2VkX2NmX2Nhc3Q8U2VjQ2VydGlmaWNhdGVSZWY+KHZhbHVlc1tpXSkp
KTsKLSAgICAgICAgZW5jb2RlQ0ZEYXRhKGVuY29kZXIsIGRhdGEuZ2V0KCkpOwotICAgIH0KLX0K
LQotc3RhdGljIGJvb2wgZGVjb2RlQ2VydGlmaWNhdGVDaGFpbihEZWNvZGVyJiBkZWNvZGVyLCBS
ZXRhaW5QdHI8Q0ZBcnJheVJlZj4mIGNlcnRpZmljYXRlQ2hhaW4pCi17Ci0gICAgdWludDY0X3Qg
c2l6ZTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHNpemUpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBhdXRvIGFycmF5ID0gYWRvcHRDRihDRkFycmF5Q3JlYXRlTXV0YWJsZSgwLCAw
LCAma0NGVHlwZUFycmF5Q2FsbEJhY2tzKSk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHNpemU7ICsraSkgewotICAgICAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBkYXRhOwotICAgICAg
ICBpZiAoIWRlY29kZUNGRGF0YShkZWNvZGVyLCBkYXRhKSkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgICAgICBhdXRvIGNlcnRpZmljYXRlID0gYWRvcHRDRihTZWNDZXJ0aWZpY2F0
ZUNyZWF0ZVdpdGhEYXRhKDAsIGRhdGEuZ2V0KCkpKTsKLSAgICAgICAgQ0ZBcnJheUFwcGVuZFZh
bHVlKGFycmF5LmdldCgpLCBjZXJ0aWZpY2F0ZS5nZXQoKSk7Ci0gICAgfQotCi0gICAgY2VydGlm
aWNhdGVDaGFpbiA9IFdURk1vdmUoYXJyYXkpOwotICAgIHJldHVybiB0cnVlOwotfQotI2VuZGlm
CituYW1lc3BhY2UgUGVyc2lzdGVuY2UgewogCiB0ZW1wbGF0ZTw+IHN0cnVjdCBDb2RlcjxXZWJD
b3JlOjpDZXJ0aWZpY2F0ZUluZm8+IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYg
ZW5jb2RlciwgY29uc3QgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvJiBjZXJ0aWZpY2F0ZUluZm8p
Ci0gICAgewotICAgICAgICBlbmNvZGVyLmVuY29kZUVudW0oY2VydGlmaWNhdGVJbmZvLnR5cGUo
KSk7Ci0KLSAgICAgICAgc3dpdGNoIChjZXJ0aWZpY2F0ZUluZm8udHlwZSgpKSB7Ci0jaWYgSEFW
RShTRUNfVFJVU1RfU0VSSUFMSVpBVElPTikKLSAgICAgICAgY2FzZSBXZWJDb3JlOjpDZXJ0aWZp
Y2F0ZUluZm86OlR5cGU6OlRydXN0OgotICAgICAgICAgICAgZW5jb2RlU2VjVHJ1c3RSZWYoZW5j
b2RlciwgY2VydGlmaWNhdGVJbmZvLnRydXN0KCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0jZW5k
aWYKLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICAgICAgY2FzZSBXZWJDb3JlOjpDZXJ0aWZpY2F0
ZUluZm86OlR5cGU6OkNlcnRpZmljYXRlQ2hhaW46IHsKLSAgICAgICAgICAgIGVuY29kZUNlcnRp
ZmljYXRlQ2hhaW4oZW5jb2RlciwgY2VydGlmaWNhdGVJbmZvLmNlcnRpZmljYXRlQ2hhaW4oKSk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotI2VuZGlmCi0gICAgICAgIGNhc2UgV2Vi
Q29yZTo6Q2VydGlmaWNhdGVJbmZvOjpUeXBlOjpOb25lOgotICAgICAgICAgICAgLy8gRG8gbm90
aGluZy4KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3RhdGlj
IGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyYg
Y2VydGlmaWNhdGVJbmZvKQotICAgIHsKLSAgICAgICAgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZv
OjpUeXBlIGNlcnRpZmljYXRlSW5mb1R5cGU7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGVF
bnVtKGNlcnRpZmljYXRlSW5mb1R5cGUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgICAgIHN3aXRjaCAoY2VydGlmaWNhdGVJbmZvVHlwZSkgewotI2lmIEhBVkUoU0VDX1RSVVNU
X1NFUklBTElaQVRJT04pCi0gICAgICAgIGNhc2UgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvOjpU
eXBlOjpUcnVzdDogewotICAgICAgICAgICAgUmV0YWluUHRyPFNlY1RydXN0UmVmPiB0cnVzdDsK
LSAgICAgICAgICAgIGlmICghZGVjb2RlU2VjVHJ1c3RSZWYoZGVjb2RlciwgdHJ1c3QpKQotICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgY2VydGlmaWNhdGVJbmZv
ID0gV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvKFdURk1vdmUodHJ1c3QpKTsKLSAgICAgICAgICAg
IHJldHVybiB0cnVlOwotICAgICAgICB9Ci0jZW5kaWYKLSNpZiBQTEFURk9STShDT0NPQSkKLSAg
ICAgICAgY2FzZSBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm86OlR5cGU6OkNlcnRpZmljYXRlQ2hh
aW46IHsKLSAgICAgICAgICAgIFJldGFpblB0cjxDRkFycmF5UmVmPiBjZXJ0aWZpY2F0ZUNoYWlu
OwotICAgICAgICAgICAgaWYgKCFkZWNvZGVDZXJ0aWZpY2F0ZUNoYWluKGRlY29kZXIsIGNlcnRp
ZmljYXRlQ2hhaW4pKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAg
ICAgY2VydGlmaWNhdGVJbmZvID0gV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvKFdURk1vdmUoY2Vy
dGlmaWNhdGVDaGFpbikpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSNl
bmRpZgotICAgICAgICBjYXNlIFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbzo6VHlwZTo6Tm9uZToK
LSAgICAgICAgICAgIC8vIERvIG5vdGhpbmcuCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KKyAgICBzdGF0aWMgV0VCQ09SRV9FWFBP
UlQgdm9pZCBlbmNvZGUoRW5jb2RlciYsIGNvbnN0IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyYp
OworICAgIHN0YXRpYyBXRUJDT1JFX0VYUE9SVCBPcHRpb25hbDxXZWJDb3JlOjpDZXJ0aWZpY2F0
ZUluZm8+IGRlY29kZShEZWNvZGVyJik7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXVEY6OlBlcnNp
c3RlbmNlCisKIH0gLy8gbmFtZXNwYWNlIFdURgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9jZi9DZXJ0aWZpY2F0ZUluZm9DRk5ldC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9DZXJ0aWZpY2F0ZUluZm9DRk5ldC5jcHAJ
KHJldmlzaW9uIDI1OTg5OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2Yv
Q2VydGlmaWNhdGVJbmZvQ0ZOZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw5IEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ2VydGlmaWNhdGVJbmZvLmgiCiAKKyNp
bmNsdWRlIDx3dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudERlY29kZXIuaD4KKyNpbmNsdWRlIDx3
dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudEVuY29kZXIuaD4KKwogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiAjaWYgUExBVEZPUk0oQ09DT0EpCkBAIC0xNTMsMyArMTU2LDE2NSBAQCBPcHRpb25hbDxD
ZXJ0aWZpY2F0ZUluZm86OlN1bW1hcnlJbmZvPiBDCiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworbmFtZXNwYWNlIFdURiB7CituYW1lc3BhY2UgUGVyc2lzdGVuY2UgeworCitzdGF0aWMg
dm9pZCBlbmNvZGVDRkRhdGEoRW5jb2RlciYgZW5jb2RlciwgQ0ZEYXRhUmVmIGRhdGEpCit7Cisg
ICAgdWludDY0X3QgbGVuZ3RoID0gQ0ZEYXRhR2V0TGVuZ3RoKGRhdGEpOworICAgIGNvbnN0IHVp
bnQ4X3QqIGJ5dGVQdHIgPSBDRkRhdGFHZXRCeXRlUHRyKGRhdGEpOworCisgICAgZW5jb2RlciA8
PCBsZW5ndGg7CisgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoYnl0ZVB0ciwgc3Rh
dGljX2Nhc3Q8c2l6ZV90PihsZW5ndGgpKTsKK30KKworc3RhdGljIE9wdGlvbmFsPFJldGFpblB0
cjxDRkRhdGFSZWY+PiBkZWNvZGVDRkRhdGEoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBPcHRp
b25hbDx1aW50NjRfdD4gc2l6ZTsKKyAgICBkZWNvZGVyID4+IHNpemU7CisgICAgaWYgKCFzaXpl
KQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgaWYgKFVOTElLRUxZKCFpc0lu
Qm91bmRzPHNpemVfdD4oKnNpemUpKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAg
ICAKKyAgICBWZWN0b3I8dWludDhfdD4gdmVjdG9yKHN0YXRpY19jYXN0PHNpemVfdD4oKnNpemUp
KTsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHZlY3Rvci5kYXRhKCks
IHZlY3Rvci5zaXplKCkpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgcmV0
dXJuIGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlKG51bGxwdHIsIHZlY3Rvci5kYXRhKCksIHZlY3Rvci5z
aXplKCkpKTsKK30KKworI2lmIEhBVkUoU0VDX1RSVVNUX1NFUklBTElaQVRJT04pCitzdGF0aWMg
dm9pZCBlbmNvZGVTZWNUcnVzdFJlZihFbmNvZGVyJiBlbmNvZGVyLCBTZWNUcnVzdFJlZiB0cnVz
dCkKK3sKKyAgICBhdXRvIGRhdGEgPSBhZG9wdENGKFNlY1RydXN0U2VyaWFsaXplKHRydXN0LCBu
dWxscHRyKSk7CisgICAgaWYgKCFkYXRhKSB7CisgICAgICAgIGVuY29kZXIgPDwgZmFsc2U7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBlbmNvZGVyIDw8IHRydWU7CisgICAgZW5jb2Rl
Q0ZEYXRhKGVuY29kZXIsIGRhdGEuZ2V0KCkpOworfQorCitzdGF0aWMgT3B0aW9uYWw8UmV0YWlu
UHRyPFNlY1RydXN0UmVmPj4gZGVjb2RlU2VjVHJ1c3RSZWYoRGVjb2RlciYgZGVjb2RlcikKK3sK
KyAgICBPcHRpb25hbDxib29sPiBoYXNUcnVzdDsKKyAgICBkZWNvZGVyID4+IGhhc1RydXN0Owor
ICAgIGlmICghaGFzVHJ1c3QpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBp
ZiAoISpoYXNUcnVzdCkKKyAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciB9OworCisgICAgYXV0byB0
cnVzdERhdGEgPSBkZWNvZGVDRkRhdGEoZGVjb2Rlcik7CisgICAgaWYgKCF0cnVzdERhdGEpCisg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBhdXRvIHRydXN0ID0gYWRvcHRDRihT
ZWNUcnVzdERlc2VyaWFsaXplKHRydXN0RGF0YS0+Z2V0KCksIG51bGxwdHIpKTsKKyAgICBpZiAo
IXRydXN0KQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgcmV0dXJuIFdURk1v
dmUodHJ1c3QpOworfQorI2VuZGlmCisKKyNpZiBQTEFURk9STShDT0NPQSkKK3N0YXRpYyB2b2lk
IGVuY29kZUNlcnRpZmljYXRlQ2hhaW4oRW5jb2RlciYgZW5jb2RlciwgQ0ZBcnJheVJlZiBjZXJ0
aWZpY2F0ZUNoYWluKQoreworICAgIENGSW5kZXggc2l6ZSA9IENGQXJyYXlHZXRDb3VudChjZXJ0
aWZpY2F0ZUNoYWluKTsKKyAgICBWZWN0b3I8Q0ZUeXBlUmVmLCAzMj4gdmFsdWVzKHNpemUpOwor
CisgICAgQ0ZBcnJheUdldFZhbHVlcyhjZXJ0aWZpY2F0ZUNoYWluLCBDRlJhbmdlTWFrZSgwLCBz
aXplKSwgdmFsdWVzLmRhdGEoKSk7CisKKyAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHVpbnQ2
NF90PihzaXplKTsKKworICAgIGZvciAoQ0ZJbmRleCBpID0gMDsgaSA8IHNpemU7ICsraSkgewor
ICAgICAgICBBU1NFUlQodmFsdWVzW2ldKTsKKyAgICAgICAgYXV0byBkYXRhID0gYWRvcHRDRihT
ZWNDZXJ0aWZpY2F0ZUNvcHlEYXRhKGNoZWNrZWRfY2ZfY2FzdDxTZWNDZXJ0aWZpY2F0ZVJlZj4o
dmFsdWVzW2ldKSkpOworICAgICAgICBlbmNvZGVDRkRhdGEoZW5jb2RlciwgZGF0YS5nZXQoKSk7
CisgICAgfQorfQorCitzdGF0aWMgT3B0aW9uYWw8UmV0YWluUHRyPENGQXJyYXlSZWY+PiBkZWNv
ZGVDZXJ0aWZpY2F0ZUNoYWluKERlY29kZXImIGRlY29kZXIpCit7CisgICAgT3B0aW9uYWw8dWlu
dDY0X3Q+IHNpemU7CisgICAgZGVjb2RlciA+PiBzaXplOworICAgIGlmICghc2l6ZSkKKyAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIGF1dG8gYXJyYXkgPSBhZG9wdENGKENGQXJy
YXlDcmVhdGVNdXRhYmxlKDAsIDAsICZrQ0ZUeXBlQXJyYXlDYWxsQmFja3MpKTsKKworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgKnNpemU7ICsraSkgeworICAgICAgICBhdXRvIGRhdGEgPSBk
ZWNvZGVDRkRhdGEoZGVjb2Rlcik7CisgICAgICAgIGlmICghZGF0YSkKKyAgICAgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICAgICAgYXV0byBjZXJ0aWZpY2F0ZSA9IGFkb3B0Q0Yo
U2VjQ2VydGlmaWNhdGVDcmVhdGVXaXRoRGF0YSgwLCBkYXRhLT5nZXQoKSkpOworICAgICAgICBD
RkFycmF5QXBwZW5kVmFsdWUoYXJyYXkuZ2V0KCksIGNlcnRpZmljYXRlLmdldCgpKTsKKyAgICB9
CisKKyAgICByZXR1cm4geyBXVEZNb3ZlKGFycmF5KSB9OworfQorI2VuZGlmCisKK3ZvaWQgQ29k
ZXI8V2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvPjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNv
bnN0IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyYgY2VydGlmaWNhdGVJbmZvKQoreworICAgIGVu
Y29kZXIgPDwgY2VydGlmaWNhdGVJbmZvLnR5cGUoKTsKKworICAgIHN3aXRjaCAoY2VydGlmaWNh
dGVJbmZvLnR5cGUoKSkgeworI2lmIEhBVkUoU0VDX1RSVVNUX1NFUklBTElaQVRJT04pCisgICAg
Y2FzZSBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm86OlR5cGU6OlRydXN0OgorICAgICAgICBlbmNv
ZGVTZWNUcnVzdFJlZihlbmNvZGVyLCBjZXJ0aWZpY2F0ZUluZm8udHJ1c3QoKSk7CisgICAgICAg
IGJyZWFrOworI2VuZGlmCisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgY2FzZSBXZWJDb3JlOjpD
ZXJ0aWZpY2F0ZUluZm86OlR5cGU6OkNlcnRpZmljYXRlQ2hhaW46IHsKKyAgICAgICAgZW5jb2Rl
Q2VydGlmaWNhdGVDaGFpbihlbmNvZGVyLCBjZXJ0aWZpY2F0ZUluZm8uY2VydGlmaWNhdGVDaGFp
bigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorI2VuZGlmCisgICAgY2FzZSBXZWJDb3JlOjpD
ZXJ0aWZpY2F0ZUluZm86OlR5cGU6Ok5vbmU6CisgICAgICAgIC8vIERvIG5vdGhpbmcuCisgICAg
ICAgIGJyZWFrOworICAgIH0KK30KKworT3B0aW9uYWw8V2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZv
PiBDb2RlcjxXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2Rl
cikKK3sKKyAgICBPcHRpb25hbDxXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm86OlR5cGU+IGNlcnRp
ZmljYXRlSW5mb1R5cGU7CisgICAgZGVjb2RlciA+PiBjZXJ0aWZpY2F0ZUluZm9UeXBlOworICAg
IGlmICghY2VydGlmaWNhdGVJbmZvVHlwZSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
KworICAgIHN3aXRjaCAoKmNlcnRpZmljYXRlSW5mb1R5cGUpIHsKKyNpZiBIQVZFKFNFQ19UUlVT
VF9TRVJJQUxJWkFUSU9OKQorICAgIGNhc2UgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvOjpUeXBl
OjpUcnVzdDogeworICAgICAgICBhdXRvIHRydXN0ID0gZGVjb2RlU2VjVHJ1c3RSZWYoZGVjb2Rl
cik7CisgICAgICAgIGlmICghdHJ1c3QpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OworCisgICAgICAgIHJldHVybiBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8oV1RGTW92ZSgqdHJ1
c3QpKTsKKyAgICB9CisjZW5kaWYKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBjYXNlIFdlYkNv
cmU6OkNlcnRpZmljYXRlSW5mbzo6VHlwZTo6Q2VydGlmaWNhdGVDaGFpbjogeworICAgICAgICBh
dXRvIGNlcnRpZmljYXRlQ2hhaW4gPSBkZWNvZGVDZXJ0aWZpY2F0ZUNoYWluKGRlY29kZXIpOwor
ICAgICAgICBpZiAoIWNlcnRpZmljYXRlQ2hhaW4pCisgICAgICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OworCisgICAgICAgIHJldHVybiBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8oV1RGTW92
ZSgqY2VydGlmaWNhdGVDaGFpbikpOworICAgIH0KKyNlbmRpZgorICAgIGNhc2UgV2ViQ29yZTo6
Q2VydGlmaWNhdGVJbmZvOjpUeXBlOjpOb25lOgorICAgICAgICAvLyBEbyBub3RoaW5nLgorICAg
ICAgICByZXR1cm4gV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvKCk7CisgICAgfQorCisgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKK30KKworfSAvLyBuYW1lc3BhY2UgUGVyc2lzdGVuY2UKK30gLy8g
bmFtZXNwYWNlIFdURgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJs
L0NlcnRpZmljYXRlSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvY3VybC9DZXJ0aWZpY2F0ZUluZm8uaAkocmV2aXNpb24gMjU5ODk4KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0NlcnRpZmljYXRlSW5mby5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC04MiwyNyArODIsMjkgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgQ29kZXI8V2Vi
Q29yZTo6Q2VydGlmaQogICAgICAgICAgICAgZW5jb2RlciA8PCBjZXJ0aWZpY2F0ZTsKICAgICB9
CiAKLSAgICBzdGF0aWMgYm9vbCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgV2ViQ29yZTo6Q2Vy
dGlmaWNhdGVJbmZvJiBjZXJ0aWZpY2F0ZUluZm8pCisgICAgc3RhdGljIE9wdGlvbmFsPFdlYkNv
cmU6OkNlcnRpZmljYXRlSW5mbz4gZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgewotICAg
ICAgICBpbnQgdmVyaWZpY2F0aW9uRXJyb3I7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUo
dmVyaWZpY2F0aW9uRXJyb3IpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAg
IHNpemVfdCBudW1PZkNlcnQgPSAwOwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKG51bU9m
Q2VydCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIE9wdGlvbmFsPGludD4g
dmVyaWZpY2F0aW9uRXJyb3I7CisgICAgICAgIGRlY29kZXIgPj4gdmVyaWZpY2F0aW9uRXJyb3I7
CisgICAgICAgIGlmICghdmVyaWZpY2F0aW9uRXJyb3IpCisgICAgICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OworCisgICAgICAgIE9wdGlvbmFsPHNpemVfdD4gbnVtT2ZDZXJ0czsKKyAgICAg
ICAgZGVjb2RlciA+PiBudW1PZkNlcnRzOworICAgICAgICBpZiAoIW51bU9mQ2VydHMpCisgICAg
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgICAgIFdlYkNvcmU6OkNlcnRpZmlj
YXRlSW5mbzo6Q2VydGlmaWNhdGVDaGFpbiBjZXJ0aWZpY2F0ZUNoYWluOwotICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG51bU9mQ2VydDsgaSsrKSB7Ci0gICAgICAgICAgICBXZWJDb3Jl
OjpDZXJ0aWZpY2F0ZUluZm86OkNlcnRpZmljYXRlIGNlcnRpZmljYXRlOwotICAgICAgICAgICAg
aWYgKCFkZWNvZGVyLmRlY29kZShjZXJ0aWZpY2F0ZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bU9mQ2VydHMudmFsdWUo
KTsgaSsrKSB7CisgICAgICAgICAgICBPcHRpb25hbDxXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm86
OkNlcnRpZmljYXRlPiBjZXJ0aWZpY2F0ZTsKKyAgICAgICAgICAgIGRlY29kZXIgPj4gY2VydGlm
aWNhdGU7CisgICAgICAgICAgICBpZiAoIWNlcnRpZmljYXRlKQorICAgICAgICAgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICAgICAgICAgIGNlcnRpZmljYXRlQ2hhaW4uYXBwZW5k
KFdURk1vdmUoY2VydGlmaWNhdGUpKTsKKyAgICAgICAgICAgIGNlcnRpZmljYXRlQ2hhaW4uYXBw
ZW5kKFdURk1vdmUoY2VydGlmaWNhdGUudmFsdWUoKSkpOwogICAgICAgICB9CiAKLSAgICAgICAg
Y2VydGlmaWNhdGVJbmZvID0gV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvKHZlcmlmaWNhdGlvbkVy
cm9yLCBXVEZNb3ZlKGNlcnRpZmljYXRlQ2hhaW4pKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIHJldHVybiBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8odmVyaWZpY2F0aW9uRXJyb3Iu
dmFsdWUoKSwgV1RGTW92ZShjZXJ0aWZpY2F0ZUNoYWluKSk7CiAgICAgfQogfTsKIApJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL0NlcnRpZmljYXRlSW5mby5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9DZXJ0aWZp
Y2F0ZUluZm8uaAkocmV2aXNpb24gMjU5ODk4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9zb3VwL0NlcnRpZmljYXRlSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC03NiwxNSAr
NzYsMTggQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgQ29kZXI8R1JlZlB0cjxHQnl0ZUFycgogICAgICAg
ICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShieXRlQXJyYXktPmRhdGEsIGJ5dGVBcnJh
eS0+bGVuKTsKICAgICB9CiAKLSAgICBzdGF0aWMgYm9vbCBkZWNvZGUoRGVjb2RlciAmZGVjb2Rl
ciwgR1JlZlB0cjxHQnl0ZUFycmF5PiYgYnl0ZUFycmF5KQorICAgIHN0YXRpYyBPcHRpb25hbDxH
UmVmUHRyPEdCeXRlQXJyYXk+PiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKICAgICB7Ci0gICAg
ICAgIHVpbnQzMl90IHNpemU7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoc2l6ZSkpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgYnl0ZUFycmF5ID0gYWRvcHRHUmVm
KGdfYnl0ZV9hcnJheV9zaXplZF9uZXcoc2l6ZSkpOwotICAgICAgICBnX2J5dGVfYXJyYXlfc2V0
X3NpemUoYnl0ZUFycmF5LmdldCgpLCBzaXplKTsKLSAgICAgICAgcmV0dXJuIGRlY29kZXIuZGVj
b2RlRml4ZWRMZW5ndGhEYXRhKGJ5dGVBcnJheS0+ZGF0YSwgc2l6ZSk7CisgICAgICAgIE9wdGlv
bmFsPHVpbnQzMl90PiBzaXplOworICAgICAgICBkZWNvZGVyID4+IHNpemU7CisgICAgICAgIGlm
ICghc2l6ZSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICAgICAgR1Jl
ZlB0cjxHQnl0ZUFycmF5PiBieXRlQXJyYXkgPSBhZG9wdEdSZWYoZ19ieXRlX2FycmF5X3NpemVk
X25ldygqc2l6ZSkpOworICAgICAgICBnX2J5dGVfYXJyYXlfc2V0X3NpemUoYnl0ZUFycmF5Lmdl
dCgpLCAqc2l6ZSk7CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEo
Ynl0ZUFycmF5LT5kYXRhLCAqc2l6ZSkpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OworICAgICAgICByZXR1cm4gYnl0ZUFycmF5OwogICAgIH0KIH07CiAKQEAgLTEzOSwyNSArMTQy
LDI5IEBAIHRlbXBsYXRlPD4gc3RydWN0IENvZGVyPFdlYkNvcmU6OkNlcnRpZmkKICAgICAgICAg
ZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oY2VydGlmaWNhdGVJbmZvLnRsc0Vycm9y
cygpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgYm9vbCBkZWNvZGUoRGVjb2RlciYgZGVjb2Rlciwg
V2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvJiBjZXJ0aWZpY2F0ZUluZm8pCisgICAgc3RhdGljIE9w
dGlvbmFsPFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbz4gZGVjb2RlKERlY29kZXImIGRlY29kZXIp
CiAgICAgewotICAgICAgICBWZWN0b3I8R1JlZlB0cjxHQnl0ZUFycmF5Pj4gY2VydGlmaWNhdGVz
RGF0YUxpc3Q7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoY2VydGlmaWNhdGVzRGF0YUxp
c3QpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBPcHRpb25hbDxWZWN0b3I8
R1JlZlB0cjxHQnl0ZUFycmF5Pj4+IGNlcnRpZmljYXRlc0RhdGFMaXN0OworICAgICAgICBkZWNv
ZGVyID4+IGNlcnRpZmljYXRlc0RhdGFMaXN0OworICAgICAgICBpZiAoIWNlcnRpZmljYXRlc0Rh
dGFMaXN0KQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgICAgICBXZWJD
b3JlOjpDZXJ0aWZpY2F0ZUluZm8gY2VydGlmaWNhdGVJbmZvOworICAgICAgICBpZiAoY2VydGlm
aWNhdGVzRGF0YUxpc3QtPmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBjZXJ0aWZpY2F0
ZUluZm87CiAKLSAgICAgICAgaWYgKGNlcnRpZmljYXRlc0RhdGFMaXN0LmlzRW1wdHkoKSkKLSAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBhdXRvIGNlcnRpZmljYXRlID0gY2VydGlm
aWNhdGVGcm9tQ2VydGlmaWNhdGVzRGF0YUxpc3QoY2VydGlmaWNhdGVzRGF0YUxpc3QpOworICAg
ICAgICBhdXRvIGNlcnRpZmljYXRlID0gY2VydGlmaWNhdGVGcm9tQ2VydGlmaWNhdGVzRGF0YUxp
c3QoY2VydGlmaWNhdGVzRGF0YUxpc3QudmFsdWUoKSk7CiAgICAgICAgIGlmICghY2VydGlmaWNh
dGUpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwogICAgICAgICBjZXJ0aWZpY2F0ZUluZm8uc2V0Q2VydGlmaWNhdGUoY2VydGlmaWNh
dGUuZ2V0KCkpOwogCi0gICAgICAgIHVpbnQzMl90IHRsc0Vycm9yczsKLSAgICAgICAgaWYgKCFk
ZWNvZGVyLmRlY29kZSh0bHNFcnJvcnMpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICBjZXJ0aWZpY2F0ZUluZm8uc2V0VExTRXJyb3JzKHN0YXRpY19jYXN0PEdUbHNDZXJ0aWZp
Y2F0ZUZsYWdzPih0bHNFcnJvcnMpKTsKKyAgICAgICAgT3B0aW9uYWw8dWludDMyX3Q+IHRsc0Vy
cm9yczsKKyAgICAgICAgZGVjb2RlciA+PiB0bHNFcnJvcnM7CisgICAgICAgIGlmICghdGxzRXJy
b3JzKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgY2VydGlmaWNh
dGVJbmZvLnNldFRMU0Vycm9ycyhzdGF0aWNfY2FzdDxHVGxzQ2VydGlmaWNhdGVGbGFncz4oKnRs
c0Vycm9ycykpOwogCi0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4gY2VydGlm
aWNhdGVJbmZvOwogICAgIH0KIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvc291cC9SZXNvdXJjZVJlc3BvbnNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlUmVzcG9uc2UuaAkocmV2aXNpb24gMjU5
ODk4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlUmVz
cG9uc2UuaAkod29ya2luZyBjb3B5KQpAQCAtOTIsNyArOTIsNyBAQCB0ZW1wbGF0ZTxjbGFzcyBF
bmNvZGVyPgogdm9pZCBSZXNvdXJjZVJlc3BvbnNlOjplbmNvZGUoRW5jb2RlciYgZW5jb2Rlcikg
Y29uc3QKIHsKICAgICBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6ZW5jb2RlKGVuY29kZXIpOwotICAg
IGVuY29kZXIuZW5jb2RlRW51bShtX3NvdXBGbGFncyk7CisgICAgZW5jb2RlciA8PCBzdGF0aWNf
Y2FzdDx1aW50NjRfdD4obV9zb3VwRmxhZ3MpOwogfQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVy
PgpAQCAtMTAwLDggKzEwMCwxMiBAQCBib29sIFJlc291cmNlUmVzcG9uc2U6OmRlY29kZShEZWNv
ZGVyJiBkCiB7CiAgICAgaWYgKCFSZXNvdXJjZVJlc3BvbnNlQmFzZTo6ZGVjb2RlKGRlY29kZXIs
IHJlc3BvbnNlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghZGVjb2Rlci5kZWNv
ZGVFbnVtKHJlc3BvbnNlLm1fc291cEZsYWdzKSkKKyAgICBPcHRpb25hbDx1aW50NjRfdD4gc291
cEZsYWdzOworICAgIGRlY29kZXIgPj4gc291cEZsYWdzOworICAgIGlmICghc291cEZsYWdzKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgLy8gRklYTUU6IFZlcmlmeSB0aGF0IHRoaXMgaXMg
YSB2YWxpZCB2YWx1ZSBmb3IgU291cE1lc3NhZ2VGbGFncy4KKyAgICByZXNwb25zZS5tX3NvdXBG
bGFncyA9IHN0YXRpY19jYXN0PFNvdXBNZXNzYWdlRmxhZ3M+KCpzb3VwRmxhZ3MpOwogICAgIHJl
dHVybiB0cnVlOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2UvU2Vy
dmljZVdvcmtlckNvbnRleHREYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd29y
a2Vycy9zZXJ2aWNlL1NlcnZpY2VXb3JrZXJDb250ZXh0RGF0YS5oCShyZXZpc2lvbiAyNTk4OTgp
CisrKyBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2UvU2VydmljZVdvcmtlckNvbnRleHRE
YXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDIwICs1MSwyOCBAQCBzdHJ1Y3QgU2VydmljZVdv
cmtlckNvbnRleHREYXRhIHsKICAgICAgICAgICAgIGVuY29kZXIgPDwgc2NyaXB0IDw8IHJlc3Bv
bnNlVVJMIDw8IG1pbWVUeXBlOwogICAgICAgICB9CiAKLSAgICAgICAgdGVtcGxhdGU8Y2xhc3Mg
RGVjb2Rlcj4gc3RhdGljIGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIEltcG9ydGVkU2Ny
aXB0JiBzY3JpcHQpCisgICAgICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRp
b25hbDxJbXBvcnRlZFNjcmlwdD4gZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgICAgIHsK
LSAgICAgICAgICAgIEltcG9ydGVkU2NyaXB0IGltcG9ydGVkU2NyaXB0OwotICAgICAgICAgICAg
aWYgKCFkZWNvZGVyLmRlY29kZShpbXBvcnRlZFNjcmlwdC5zY3JpcHQpKQotICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShpbXBv
cnRlZFNjcmlwdC5yZXNwb25zZVVSTCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGltcG9ydGVkU2NyaXB0Lm1pbWVUeXBl
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgICAgIHNjcmlwdCA9
IFdURk1vdmUoaW1wb3J0ZWRTY3JpcHQpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgICAgICBPcHRpb25hbDxTdHJpbmc+IHNjcmlwdDsKKyAgICAgICAgICAgIGRlY29kZXIgPj4g
c2NyaXB0OworICAgICAgICAgICAgaWYgKCFzY3JpcHQpCisgICAgICAgICAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgT3B0aW9uYWw8VVJMPiBy
ZXNwb25zZVVSTDsKKyAgICAgICAgICAgIGRlY29kZXIgPj4gcmVzcG9uc2VVUkw7CisgICAgICAg
ICAgICBpZiAoIXJlc3BvbnNlVVJMKQorICAgICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIE9wdGlvbmFsPFN0cmluZz4gbWltZVR5cGU7
CisgICAgICAgICAgICBkZWNvZGVyID4+IG1pbWVUeXBlOworICAgICAgICAgICAgaWYgKCFtaW1l
VHlwZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICAgICAg
CisgICAgICAgICAgICByZXR1cm4ge3sKKyAgICAgICAgICAgICAgICBXVEZNb3ZlKCpzY3JpcHQp
LAorICAgICAgICAgICAgICAgIFdURk1vdmUoKnJlc3BvbnNlVVJMKSwKKyAgICAgICAgICAgICAg
ICBXVEZNb3ZlKCptaW1lVHlwZSkKKyAgICAgICAgICAgIH19OwogICAgICAgICB9CiAgICAgfTsK
IApJbmRleDogU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9SZWdpc3RyYXRp
b25EYXRhYmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2
aWNlL3NlcnZlci9SZWdpc3RyYXRpb25EYXRhYmFzZS5jcHAJKHJldmlzaW9uIDI1OTg5OCkKKysr
IFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9zZXJ2ZXIvUmVnaXN0cmF0aW9uRGF0YWJh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDIsNyArMzQyLDcgQEAgdm9pZCBSZWdpc3RyYXRp
b25EYXRhYmFzZTo6ZG9QdXNoQ2hhbmdlcwogICAgICAgICBkYXRhLmNvbnRlbnRTZWN1cml0eVBv
bGljeS5lbmNvZGUoY3NwRW5jb2Rlcik7CiAKICAgICAgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RW5j
b2RlciBzY3JpcHRSZXNvdXJjZU1hcEVuY29kZXI7Ci0gICAgICAgIHNjcmlwdFJlc291cmNlTWFw
RW5jb2Rlci5lbmNvZGUoZGF0YS5zY3JpcHRSZXNvdXJjZU1hcCk7CisgICAgICAgIHNjcmlwdFJl
c291cmNlTWFwRW5jb2RlciA8PCBkYXRhLnNjcmlwdFJlc291cmNlTWFwOwogCiAgICAgICAgIGlm
IChzcWwuYmluZFRleHQoMSwgZGF0YS5yZWdpc3RyYXRpb24ua2V5LnRvRGF0YWJhc2VLZXkoKSkg
IT0gU1FMSVRFX09LCiAgICAgICAgICAgICB8fCBzcWwuYmluZFRleHQoMiwgZGF0YS5yZWdpc3Ry
YXRpb24uc2NvcGVVUkwucHJvdG9jb2xIb3N0QW5kUG9ydCgpKSAhPSBTUUxJVEVfT0sKQEAgLTM5
MiwxOSArMzkyLDIzIEBAIFN0cmluZyBSZWdpc3RyYXRpb25EYXRhYmFzZTo6aW1wb3J0UmVjb3IK
ICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGNvbnRlbnRTZWN1cml0eVBvbGljeURhdGE7CiAgICAg
ICAgIHNxbC5nZXRDb2x1bW5CbG9iQXNWZWN0b3IoOSwgY29udGVudFNlY3VyaXR5UG9saWN5RGF0
YSk7CiAgICAgICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgY3NwRGVjb2Rlcihjb250ZW50
U2VjdXJpdHlQb2xpY3lEYXRhLmRhdGEoKSwgY29udGVudFNlY3VyaXR5UG9saWN5RGF0YS5zaXpl
KCkpOwotICAgICAgICBDb250ZW50U2VjdXJpdHlQb2xpY3lSZXNwb25zZUhlYWRlcnMgY29udGVu
dFNlY3VyaXR5UG9saWN5OwotICAgICAgICBpZiAoY29udGVudFNlY3VyaXR5UG9saWN5RGF0YS5z
aXplKCkgJiYgIUNvbnRlbnRTZWN1cml0eVBvbGljeVJlc3BvbnNlSGVhZGVyczo6ZGVjb2RlKGNz
cERlY29kZXIsIGNvbnRlbnRTZWN1cml0eVBvbGljeSkpCi0gICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgT3B0aW9uYWw8Q29udGVudFNlY3VyaXR5UG9saWN5UmVzcG9uc2VIZWFkZXJzPiBj
b250ZW50U2VjdXJpdHlQb2xpY3k7CisgICAgICAgIGlmIChjb250ZW50U2VjdXJpdHlQb2xpY3lE
YXRhLnNpemUoKSkgeworICAgICAgICAgICAgY3NwRGVjb2RlciA+PiBjb250ZW50U2VjdXJpdHlQ
b2xpY3k7CisgICAgICAgICAgICBpZiAoIWNvbnRlbnRTZWN1cml0eVBvbGljeSkKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQogCiAgICAgICAgIGF1dG8gcmVmZXJyZXJQb2xp
Y3kgPSBzcWwuZ2V0Q29sdW1uVGV4dCgxMCk7CiAKICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHNj
cmlwdFJlc291cmNlTWFwRGF0YTsKICAgICAgICAgc3FsLmdldENvbHVtbkJsb2JBc1ZlY3Rvcigx
MSwgc2NyaXB0UmVzb3VyY2VNYXBEYXRhKTsKLSAgICAgICAgSGFzaE1hcDxVUkwsIFNlcnZpY2VX
b3JrZXJDb250ZXh0RGF0YTo6SW1wb3J0ZWRTY3JpcHQ+IHNjcmlwdFJlc291cmNlTWFwOworICAg
ICAgICBPcHRpb25hbDxIYXNoTWFwPFVSTCwgU2VydmljZVdvcmtlckNvbnRleHREYXRhOjpJbXBv
cnRlZFNjcmlwdD4+IHNjcmlwdFJlc291cmNlTWFwOwogCiAgICAgICAgIFdURjo6UGVyc2lzdGVu
Y2U6OkRlY29kZXIgc2NyaXB0UmVzb3VyY2VNYXBEZWNvZGVyKHNjcmlwdFJlc291cmNlTWFwRGF0
YS5kYXRhKCksIHNjcmlwdFJlc291cmNlTWFwRGF0YS5zaXplKCkpOwogICAgICAgICBpZiAoc2Ny
aXB0UmVzb3VyY2VNYXBEYXRhLnNpemUoKSkgewotICAgICAgICAgICAgaWYgKCFzY3JpcHRSZXNv
dXJjZU1hcERlY29kZXIuZGVjb2RlKHNjcmlwdFJlc291cmNlTWFwKSkKKyAgICAgICAgICAgIHNj
cmlwdFJlc291cmNlTWFwRGVjb2RlciA+PiBzY3JpcHRSZXNvdXJjZU1hcDsKKyAgICAgICAgICAg
IGlmICghc2NyaXB0UmVzb3VyY2VNYXApCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgIH0KIApAQCAtNDE4LDcgKzQyMiw3IEBAIFN0cmluZyBSZWdpc3RyYXRpb25EYXRhYmFzZTo6
aW1wb3J0UmVjb3IKICAgICAgICAgYXV0byByZWdpc3RyYXRpb25JZGVudGlmaWVyID0gU2Vydmlj
ZVdvcmtlclJlZ2lzdHJhdGlvbklkZW50aWZpZXI6OmdlbmVyYXRlKCk7CiAgICAgICAgIGF1dG8g
c2VydmljZVdvcmtlckRhdGEgPSBTZXJ2aWNlV29ya2VyRGF0YSB7IHdvcmtlcklkZW50aWZpZXIs
IHNjcmlwdFVSTCwgU2VydmljZVdvcmtlclN0YXRlOjpBY3RpdmF0ZWQsICp3b3JrZXJUeXBlLCBy
ZWdpc3RyYXRpb25JZGVudGlmaWVyIH07CiAgICAgICAgIGF1dG8gcmVnaXN0cmF0aW9uID0gU2Vy
dmljZVdvcmtlclJlZ2lzdHJhdGlvbkRhdGEgeyBXVEZNb3ZlKCprZXkpLCByZWdpc3RyYXRpb25J
ZGVudGlmaWVyLCBXVEZNb3ZlKHNjb3BlVVJMKSwgKnVwZGF0ZVZpYUNhY2hlLCBsYXN0VXBkYXRl
Q2hlY2tUaW1lLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCwgV1RGTW92ZShzZXJ2aWNlV29y
a2VyRGF0YSkgfTsKLSAgICAgICAgYXV0byBjb250ZXh0RGF0YSA9IFNlcnZpY2VXb3JrZXJDb250
ZXh0RGF0YSB7IFdURjo6bnVsbG9wdCwgV1RGTW92ZShyZWdpc3RyYXRpb24pLCB3b3JrZXJJZGVu
dGlmaWVyLCBXVEZNb3ZlKHNjcmlwdCksIFdURk1vdmUoY29udGVudFNlY3VyaXR5UG9saWN5KSwg
V1RGTW92ZShyZWZlcnJlclBvbGljeSksIFdURk1vdmUoc2NyaXB0VVJMKSwgKndvcmtlclR5cGUs
IHRydWUsIFdURk1vdmUoc2NyaXB0UmVzb3VyY2VNYXApIH07CisgICAgICAgIGF1dG8gY29udGV4
dERhdGEgPSBTZXJ2aWNlV29ya2VyQ29udGV4dERhdGEgeyBXVEY6Om51bGxvcHQsIFdURk1vdmUo
cmVnaXN0cmF0aW9uKSwgd29ya2VySWRlbnRpZmllciwgV1RGTW92ZShzY3JpcHQpLCBXVEZNb3Zl
KCpjb250ZW50U2VjdXJpdHlQb2xpY3kpLCBXVEZNb3ZlKHJlZmVycmVyUG9saWN5KSwgV1RGTW92
ZShzY3JpcHRVUkwpLCAqd29ya2VyVHlwZSwgdHJ1ZSwgV1RGTW92ZSgqc2NyaXB0UmVzb3VyY2VN
YXApIH07CiAKICAgICAgICAgY2FsbE9uTWFpblRocmVhZChbcHJvdGVjdGVkVGhpcyA9IG1ha2VS
ZWYoKnRoaXMpLCBjb250ZXh0RGF0YSA9IGNvbnRleHREYXRhLmlzb2xhdGVkQ29weSgpXSgpIG11
dGFibGUgewogICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+YWRkUmVnaXN0cmF0aW9uVG9TdG9y
ZShXVEZNb3ZlKGNvbnRleHREYXRhKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkocmV2aXNpb24gMjU5ODk4KQor
KysgU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzNSBA
QAorMjAyMC0wNC0xMCAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3Jn
PgorCisgICAgICAgIFBlcnNpc3RlbnRDb2RlcnMgc2hvdWxkIHVzZSBtb2Rlcm4gZGVjb2Rpbmcg
c3ludGF4CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MDc0OTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IE5ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpkZWNvZGVET01DYWNoZVJlY29yZCk6CisgICAgICAg
IChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGU6OmRlY29kZVJlY29yZEhlYWRlcik6CisgICAg
ICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZXM6OnJlYWRPcmlnaW4pOgorICAg
ICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OmRlY29kZUNhY2hlc05hbWVzKToKKyAgICAgICAg
KiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVDb2RlcnMuY3BwOgorICAgICAgICAo
V1RGOjpQZXJzaXN0ZW5jZTo6Q29kZXI8V2ViQ29yZTo6SFRUUEhlYWRlck1hcD46OmRlY29kZSk6
CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRW50cnkuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkVudHJ5OjpkZWNvZGVTdG9yYWdlUmVjb3Jk
KToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVLZXkuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OktleTo6ZGVjb2RlKToKKyAgICAgICAgKiBO
ZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVLZXkuaDoKKyAgICAgICAgKiBOZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya0NhY2hlOjpkZWNvZGVSZWNvcmRNZXRhRGF0YSk6CisgICAgICAgICogTmV0d29ya1By
b2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3VicmVzb3VyY2VzRW50cnkuY3BwOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrQ2FjaGU6OlN1YnJlc291cmNlSW5mbzo6ZW5jb2RlIGNvbnN0KToKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpTdWJyZXNvdXJjZUluZm86OmRlY29kZSk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6U3VicmVzb3VyY2VzRW50cnk6OmRlY29kZVN0
b3JhZ2VSZWNvcmQpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNo
ZVN1YnJlc291cmNlc0VudHJ5Lmg6CisgICAgICAgICogU2hhcmVkL1VzZXJEYXRhLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6VXNlckRhdGE6OmRlY29kZSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9BUElDb250ZW50UnVsZUxpc3RTdG9yZS5jcHA6CisgICAgICAgIChBUEk6OmRlY29kZUNvbnRl
bnRSdWxlTGlzdE1ldGFEYXRhKToKKwogMjAyMC0wNC0xMCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpA
YXBwbGUuY29tPgogCiAgICAgICAgIEZpcnN0IHJlbmRlciBhZnRlciBhIHByb2Nlc3Mgc3dhcCBk
b2VzIG5vdCB1c2UgYWNjZWxlcmF0ZWQgcmVuZGVyaW5nCkluZGV4OiBTb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2lu
ZUNhY2hlLmNwcAkocmV2aXNpb24gMjU5ODk4KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTU3Miw0NSArNTcyLDgwIEBAIFN0b3JhZ2U6OlJlY29yZCBDYWNoZTo6ZW5jb2RlKGNvbnN0IFJl
Y28KICAgICByZXR1cm4geyByZWNvcmRJbmZvcm1hdGlvbi5rZXksIHsgfSwgaGVhZGVyLCBib2R5
LCB7IH0gfTsKIH0KIAotT3B0aW9uYWw8Q2FjaGU6OkRlY29kZWRSZWNvcmQ+IENhY2hlOjpkZWNv
ZGVSZWNvcmRIZWFkZXIoY29uc3QgU3RvcmFnZTo6UmVjb3JkJiBzdG9yYWdlKQorc3RhdGljIE9w
dGlvbmFsPFdlYkNvcmU6OkRPTUNhY2hlRW5naW5lOjpSZWNvcmQ+IGRlY29kZURPTUNhY2hlUmVj
b3JkKFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXImIGRlY29kZXIpCiB7Ci0gICAgV1RGOjpQZXJz
aXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyKHN0b3JhZ2UuaGVhZGVyLmRhdGEoKSwgc3RvcmFnZS5o
ZWFkZXIuc2l6ZSgpKTsKLQotICAgIFJlY29yZCByZWNvcmQ7Ci0KLSAgICBkb3VibGUgaW5zZXJ0
aW9uVGltZTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGluc2VydGlvblRpbWUpKQotICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgdWludDY0X3Qgc2l6ZTsKLSAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKHNpemUpKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAg
aWYgKCFkZWNvZGVyLmRlY29kZShyZWNvcmQucmVxdWVzdEhlYWRlcnNHdWFyZCkpCi0gICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICBpZiAoIXJlY29yZC5yZXF1ZXN0LmRlY29kZVdp
dGhvdXRQbGF0Zm9ybURhdGEoZGVjb2RlcikpCisgICAgT3B0aW9uYWw8RmV0Y2hIZWFkZXJzOjpH
dWFyZD4gcmVxdWVzdEhlYWRlcnNHdWFyZDsKKyAgICBkZWNvZGVyID4+IHJlcXVlc3RIZWFkZXJz
R3VhcmQ7CisgICAgaWYgKCFyZXF1ZXN0SGVhZGVyc0d1YXJkKQorICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OworICAgIAorICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0OworICAgIGlmICgh
cmVxdWVzdC5kZWNvZGVXaXRob3V0UGxhdGZvcm1EYXRhKGRlY29kZXIpKQorICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OworICAgIAorICAgIEZldGNoT3B0aW9ucyBvcHRpb25zOworICAgIGlm
ICghRmV0Y2hPcHRpb25zOjpkZWNvZGVQZXJzaXN0ZW50KGRlY29kZXIsIG9wdGlvbnMpKQorICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIAorICAgIE9wdGlvbmFsPFN0cmluZz4gcmVm
ZXJyZXI7CisgICAgZGVjb2RlciA+PiByZWZlcnJlcjsKKyAgICBpZiAoIXJlZmVycmVyKQorICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIAorICAgIE9wdGlvbmFsPEZldGNoSGVhZGVy
czo6R3VhcmQ+IHJlc3BvbnNlSGVhZGVyc0d1YXJkOworICAgIGRlY29kZXIgPj4gcmVzcG9uc2VI
ZWFkZXJzR3VhcmQ7CisgICAgaWYgKCFyZXNwb25zZUhlYWRlcnNHdWFyZCkKKyAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKKworICAgIFJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2U7CisgICAg
aWYgKCFSZXNvdXJjZVJlc3BvbnNlOjpkZWNvZGUoZGVjb2RlciwgcmVzcG9uc2UpKQorICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIAorICAgIE9wdGlvbmFsPHVpbnQ2NF90PiByZXNw
b25zZUJvZHlTaXplOworICAgIGRlY29kZXIgPj4gcmVzcG9uc2VCb2R5U2l6ZTsKKyAgICBpZiAo
IXJlc3BvbnNlQm9keVNpemUpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBp
ZiAoIUZldGNoT3B0aW9uczo6ZGVjb2RlUGVyc2lzdGVudChkZWNvZGVyLCByZWNvcmQub3B0aW9u
cykpCisgICAgaWYgKCFkZWNvZGVyLnZlcmlmeUNoZWNrc3VtKCkpCiAgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CiAKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlY29yZC5yZWZlcnJlcikp
Ci0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcmV0dXJuIHt7CisgICAgICAgIDAs
CisgICAgICAgIDAsCisgICAgICAgIFdURk1vdmUoKnJlcXVlc3RIZWFkZXJzR3VhcmQpLAorICAg
ICAgICBXVEZNb3ZlKHJlcXVlc3QpLAorICAgICAgICBXVEZNb3ZlKG9wdGlvbnMpLAorICAgICAg
ICBXVEZNb3ZlKCpyZWZlcnJlciksCisgICAgICAgIFdURk1vdmUoKnJlc3BvbnNlSGVhZGVyc0d1
YXJkKSwKKyAgICAgICAgV1RGTW92ZShyZXNwb25zZSksCisgICAgICAgIHsgfSwKKyAgICAgICAg
V1RGTW92ZSgqcmVzcG9uc2VCb2R5U2l6ZSkKKyAgICB9fTsKK30KIAotICAgIGlmICghZGVjb2Rl
ci5kZWNvZGUocmVjb3JkLnJlc3BvbnNlSGVhZGVyc0d1YXJkKSkKLSAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKK09wdGlvbmFsPENhY2hlOjpEZWNvZGVkUmVjb3JkPiBDYWNoZTo6ZGVjb2Rl
UmVjb3JkSGVhZGVyKGNvbnN0IFN0b3JhZ2U6OlJlY29yZCYgc3RvcmFnZSkKK3sKKyAgICBXVEY6
OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIoc3RvcmFnZS5oZWFkZXIuZGF0YSgpLCBzdG9y
YWdlLmhlYWRlci5zaXplKCkpOwogCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZWNvcmQucmVz
cG9uc2UpKQorICAgIE9wdGlvbmFsPGRvdWJsZT4gaW5zZXJ0aW9uVGltZTsKKyAgICBkZWNvZGVy
ID4+IGluc2VydGlvblRpbWU7CisgICAgaWYgKCFpbnNlcnRpb25UaW1lKQogICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwogCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZWNvcmQucmVzcG9u
c2VCb2R5U2l6ZSkpCisgICAgT3B0aW9uYWw8dWludDY0X3Q+IHNpemU7CisgICAgZGVjb2RlciA+
PiBzaXplOworICAgIGlmICghc2l6ZSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAot
ICAgIGlmICghZGVjb2Rlci52ZXJpZnlDaGVja3N1bSgpKQorICAgIE9wdGlvbmFsPFdlYkNvcmU6
OkRPTUNhY2hlRW5naW5lOjpSZWNvcmQ+IHJlY29yZCA9IGRlY29kZURPTUNhY2hlUmVjb3JkKGRl
Y29kZXIpOworICAgIGlmICghcmVjb3JkKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owog
Ci0gICAgcmV0dXJuIERlY29kZWRSZWNvcmQgeyBpbnNlcnRpb25UaW1lLCBzaXplLCBXVEZNb3Zl
KHJlY29yZCkgfTsKKyAgICByZXR1cm4ge3sKKyAgICAgICAgV1RGTW92ZSgqaW5zZXJ0aW9uVGlt
ZSksCisgICAgICAgIFdURk1vdmUoKnNpemUpLAorICAgICAgICBXVEZNb3ZlKCpyZWNvcmQpCisg
ICAgfX07CiB9CiAKIE9wdGlvbmFsPFJlY29yZD4gQ2FjaGU6OmRlY29kZShjb25zdCBTdG9yYWdl
OjpSZWNvcmQmIHN0b3JhZ2UpCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2Nh
Y2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3BwCShy
ZXZpc2lvbiAyNTk4OTgpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0Nh
Y2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMiwyMyArMTEy
LDIyIEBAIHZvaWQgQ2FjaGVzOjpzdG9yZU9yaWdpbihDb21wbGV0aW9uQ2FsbGIKIAogT3B0aW9u
YWw8V2ViQ29yZTo6Q2xpZW50T3JpZ2luPiBDYWNoZXM6OnJlYWRPcmlnaW4oY29uc3QgRGF0YSYg
ZGF0YSkKIHsKLSAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGFibGUgdG8gdXNlIG1vZGVybiBk
ZWNvZGVycyBmb3IgcGVyc2lzdGVudCBkYXRhLgotICAgIFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2lu
RGF0YSB0b3BPcmlnaW4sIGNsaWVudE9yaWdpbjsKICAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNv
ZGVyIGRlY29kZXIoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsKIAotICAgIGlmICghZGVjb2Rl
ci5kZWNvZGUodG9wT3JpZ2luLnByb3RvY29sKSkKKyAgICBPcHRpb25hbDxXZWJDb3JlOjpTZWN1
cml0eU9yaWdpbkRhdGE+IHRvcE9yaWdpbjsKKyAgICBkZWNvZGVyID4+IHRvcE9yaWdpbjsKKyAg
ICBpZiAoIXRvcE9yaWdpbikKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKHRvcE9yaWdpbi5ob3N0KSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHRvcE9yaWdpbi5wb3J0KSkKLSAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGNsaWVudE9yaWdp
bi5wcm90b2NvbCkpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgaWYgKCFkZWNv
ZGVyLmRlY29kZShjbGllbnRPcmlnaW4uaG9zdCkpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShjbGllbnRPcmlnaW4ucG9ydCkpCisKKyAgICBP
cHRpb25hbDxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+IGNsaWVudE9yaWdpbjsKKyAgICBk
ZWNvZGVyID4+IGNsaWVudE9yaWdpbjsKKyAgICBpZiAoIWNsaWVudE9yaWdpbikKICAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICByZXR1cm4gV2ViQ29yZTo6Q2xpZW50T3JpZ2luIHsg
V1RGTW92ZSh0b3BPcmlnaW4pLCBXVEZNb3ZlKGNsaWVudE9yaWdpbikgfTsKKworICAgIHJldHVy
biB7eworICAgICAgICBXVEZNb3ZlKCp0b3BPcmlnaW4pLAorICAgICAgICBXVEZNb3ZlKCpjbGll
bnRPcmlnaW4pCisgICAgfX07CiB9CiAKIHZvaWQgQ2FjaGVzOjppbml0aWFsaXplKFdlYkNvcmU6
OkRPTUNhY2hlRW5naW5lOjpDb21wbGV0aW9uQ2FsbGJhY2smJiBjYWxsYmFjaykKQEAgLTQxMSwy
MyArNDEwLDI2IEBAIHN0YXRpYyBpbmxpbmUgRGF0YSBlbmNvZGVDYWNoZU5hbWVzKGNvbnMKIHN0
YXRpYyBpbmxpbmUgRXhwZWN0ZWQ8VmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4+LCBF
cnJvcj4gZGVjb2RlQ2FjaGVzTmFtZXMoY29uc3QgRGF0YSYgZGF0YSkKIHsKICAgICBXVEY6OlBl
cnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsKLSAg
ICB1aW50NjRfdCBjb3VudDsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGNvdW50KSkKKyAgICBP
cHRpb25hbDx1aW50NjRfdD4gY291bnQ7CisgICAgZGVjb2RlciA+PiBjb3VudDsKKyAgICBpZiAo
IWNvdW50KQogICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoRXJyb3I6OlJlYWREaXNrKTsK
IAogICAgIFZlY3RvcjxzdGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+PiBuYW1lczsKLSAgICBpZiAo
IW5hbWVzLnRyeVJlc2VydmVDYXBhY2l0eShjb3VudCkpCisgICAgaWYgKCFuYW1lcy50cnlSZXNl
cnZlQ2FwYWNpdHkoKmNvdW50KSkKICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEVycm9y
OjpSZWFkRGlzayk7CiAKLSAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgY291bnQ7
ICsraW5kZXgpIHsKLSAgICAgICAgU3RyaW5nIG5hbWU7Ci0gICAgICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUobmFtZSkpCisgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8ICpjb3VudDsg
KytpbmRleCkgeworICAgICAgICBPcHRpb25hbDxTdHJpbmc+IG5hbWU7CisgICAgICAgIGRlY29k
ZXIgPj4gbmFtZTsKKyAgICAgICAgaWYgKCFuYW1lKQogICAgICAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKEVycm9yOjpSZWFkRGlzayk7Ci0gICAgICAgIFN0cmluZyB1bmlxdWVOYW1lOwot
ICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHVuaXF1ZU5hbWUpKQorICAgICAgICBPcHRpb25h
bDxTdHJpbmc+IHVuaXF1ZU5hbWU7CisgICAgICAgIGRlY29kZXIgPj4gdW5pcXVlTmFtZTsKKyAg
ICAgICAgaWYgKCF1bmlxdWVOYW1lKQogICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVk
KEVycm9yOjpSZWFkRGlzayk7CiAKLSAgICAgICAgbmFtZXMudW5jaGVja2VkQXBwZW5kKHN0ZDo6
cGFpcjxTdHJpbmcsIFN0cmluZz4geyBXVEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKHVuaXF1ZU5hbWUp
IH0pOworICAgICAgICBuYW1lcy51bmNoZWNrZWRBcHBlbmQoeyBXVEZNb3ZlKCpuYW1lKSwgV1RG
TW92ZSgqdW5pcXVlTmFtZSkgfSk7CiAgICAgfQogICAgIHJldHVybiBuYW1lczsKIH0KSW5kZXg6
IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlQ29kZXJzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdv
cmtDYWNoZUNvZGVycy5jcHAJKHJldmlzaW9uIDI1OTg5OCkKKysrIFNvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlQ29kZXJzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDAsMjEgKzQwLDI2IEBAIHZvaWQgQ29kZXI8V2ViQ29yZTo6SFRUUEhlYWRlck1hcD46OmVu
Y28KICAgICB9CiB9CiAKLWJvb2wgQ29kZXI8V2ViQ29yZTo6SFRUUEhlYWRlck1hcD46OmRlY29k
ZShEZWNvZGVyJiBkZWNvZGVyLCBXZWJDb3JlOjpIVFRQSGVhZGVyTWFwJiBoZWFkZXJzKQorT3B0
aW9uYWw8V2ViQ29yZTo6SFRUUEhlYWRlck1hcD4gQ29kZXI8V2ViQ29yZTo6SFRUUEhlYWRlck1h
cD46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogewotICAgIHVpbnQ2NF90IGhlYWRlcnNTaXpl
OwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaGVhZGVyc1NpemUpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgZm9yICh1aW50NjRfdCBpID0gMDsgaSA8IGhlYWRlcnNTaXplOyArK2kpIHsK
LSAgICAgICAgU3RyaW5nIG5hbWU7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUobmFtZSkp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIFN0cmluZyB2YWx1ZTsKLSAgICAg
ICAgaWYgKCFkZWNvZGVyLmRlY29kZSh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIGhlYWRlcnMuYXBwZW5kKG5hbWUsIHZhbHVlKTsKKyAgICBPcHRpb25hbDx1aW50
NjRfdD4gaGVhZGVyc1NpemU7CisgICAgZGVjb2RlciA+PiBoZWFkZXJzU2l6ZTsKKyAgICBpZiAo
IWhlYWRlcnNTaXplKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgV2ViQ29y
ZTo6SFRUUEhlYWRlck1hcCBoZWFkZXJzOworICAgIGZvciAodWludDY0X3QgaSA9IDA7IGkgPCAq
aGVhZGVyc1NpemU7ICsraSkgeworICAgICAgICBPcHRpb25hbDxTdHJpbmc+IG5hbWU7CisgICAg
ICAgIGRlY29kZXIgPj4gbmFtZTsKKyAgICAgICAgaWYgKCFuYW1lKQorICAgICAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgT3B0aW9uYWw8U3RyaW5nPiB2YWx1ZTsKKyAgICAg
ICAgZGVjb2RlciA+PiB2YWx1ZTsKKyAgICAgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIGhlYWRlcnMuYXBwZW5kKFdURk1vdmUoKm5hbWUp
LCBXVEZNb3ZlKCp2YWx1ZSkpOwogICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4g
V1RGTW92ZShoZWFkZXJzKTsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVDb2RlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUNvZGVycy5oCShyZXZpc2lvbiAy
NTk4OTgpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNo
ZUNvZGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBAIG5hbWVzcGFjZSBQZXJz
aXN0ZW5jZSB7CiAKIHRlbXBsYXRlPD4gc3RydWN0IENvZGVyPFdlYkNvcmU6OkhUVFBIZWFkZXJN
YXA+IHsKICAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYsIGNvbnN0IFdlYkNvcmU6OkhU
VFBIZWFkZXJNYXAmKTsKLSAgICBzdGF0aWMgYm9vbCBkZWNvZGUoRGVjb2RlciYsIFdlYkNvcmU6
OkhUVFBIZWFkZXJNYXAmKTsKKyAgICBzdGF0aWMgT3B0aW9uYWw8V2ViQ29yZTo6SFRUUEhlYWRl
ck1hcD4gZGVjb2RlKERlY29kZXImKTsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRW50cnkuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRW50cnkuY3BwCShy
ZXZpc2lvbiAyNTk4OTgpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05l
dHdvcmtDYWNoZUVudHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEyLDMxICsxMTIsNDEgQEAg
c3RkOjp1bmlxdWVfcHRyPEVudHJ5PiBFbnRyeTo6ZGVjb2RlU3RvcgogICAgIGF1dG8gZW50cnkg
PSBtYWtlVW5pcXVlPEVudHJ5PihzdG9yYWdlRW50cnkpOwogCiAgICAgV1RGOjpQZXJzaXN0ZW5j
ZTo6RGVjb2RlciBkZWNvZGVyKHN0b3JhZ2VFbnRyeS5oZWFkZXIuZGF0YSgpLCBzdG9yYWdlRW50
cnkuaGVhZGVyLnNpemUoKSk7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShlbnRyeS0+bV9yZXNw
b25zZSkpCisgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSByZXNwb25zZTsKKyAgICBpZiAo
IVdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2U6OmRlY29kZShkZWNvZGVyLCByZXNwb25zZSkpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgIGVudHJ5LT5tX3Jlc3BvbnNlID0gV1RGTW92ZShy
ZXNwb25zZSk7CiAgICAgZW50cnktPm1fcmVzcG9uc2Uuc2V0U291cmNlKFdlYkNvcmU6OlJlc291
cmNlUmVzcG9uc2U6OlNvdXJjZTo6RGlza0NhY2hlKTsKIAotICAgIGJvb2wgaGFzVmFyeWluZ1Jl
cXVlc3RIZWFkZXJzOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaGFzVmFyeWluZ1JlcXVlc3RI
ZWFkZXJzKSkKKyAgICBPcHRpb25hbDxib29sPiBoYXNWYXJ5aW5nUmVxdWVzdEhlYWRlcnM7Cisg
ICAgZGVjb2RlciA+PiBoYXNWYXJ5aW5nUmVxdWVzdEhlYWRlcnM7CisgICAgaWYgKCFoYXNWYXJ5
aW5nUmVxdWVzdEhlYWRlcnMpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgaWYgKGhh
c1ZhcnlpbmdSZXF1ZXN0SGVhZGVycykgewotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGVu
dHJ5LT5tX3ZhcnlpbmdSZXF1ZXN0SGVhZGVycykpCisgICAgaWYgKCpoYXNWYXJ5aW5nUmVxdWVz
dEhlYWRlcnMpIHsKKyAgICAgICAgT3B0aW9uYWw8VmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmcsIFN0
cmluZz4+PiB2YXJ5aW5nUmVxdWVzdEhlYWRlcnM7CisgICAgICAgIGRlY29kZXIgPj4gdmFyeWlu
Z1JlcXVlc3RIZWFkZXJzOworICAgICAgICBpZiAoIXZhcnlpbmdSZXF1ZXN0SGVhZGVycykKICAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICBlbnRyeS0+bV92YXJ5aW5nUmVxdWVz
dEhlYWRlcnMgPSBXVEZNb3ZlKCp2YXJ5aW5nUmVxdWVzdEhlYWRlcnMpOwogICAgIH0KIAotICAg
IGJvb2wgaXNSZWRpcmVjdDsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGlzUmVkaXJlY3QpKQor
ICAgIE9wdGlvbmFsPGJvb2w+IGlzUmVkaXJlY3Q7CisgICAgZGVjb2RlciA+PiBpc1JlZGlyZWN0
OworICAgIGlmICghaXNSZWRpcmVjdCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBp
ZiAoaXNSZWRpcmVjdCkgeworICAgIGlmICgqaXNSZWRpcmVjdCkgewogICAgICAgICBlbnRyeS0+
bV9yZWRpcmVjdFJlcXVlc3QuZW1wbGFjZSgpOwogICAgICAgICBpZiAoIWVudHJ5LT5tX3JlZGly
ZWN0UmVxdWVzdC0+ZGVjb2RlV2l0aG91dFBsYXRmb3JtRGF0YShkZWNvZGVyKSkKICAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoZW50
cnktPm1fbWF4QWdlQ2FwKSkKKyAgICBPcHRpb25hbDxPcHRpb25hbDxTZWNvbmRzPj4gbWF4QWdl
Q2FwOworICAgIGRlY29kZXIgPj4gbWF4QWdlQ2FwOworICAgIGlmICghbWF4QWdlQ2FwKQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBlbnRyeS0+bV9tYXhBZ2VDYXAgPSBXVEZNb3ZlKCpt
YXhBZ2VDYXApOwogCiAgICAgaWYgKCFkZWNvZGVyLnZlcmlmeUNoZWNrc3VtKCkpIHsKICAgICAg
ICAgTE9HKE5ldHdvcmtDYWNoZSwgIihOZXR3b3JrUHJvY2VzcykgY2hlY2tzdW0gdmVyaWZpY2F0
aW9uIGZhaWx1cmVcbiIpOwpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9OZXR3b3JrQ2FjaGVLZXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlS2V5LmNwcAkocmV2aXNpb24gMjU5ODk4KQorKysg
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVLZXkuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNzMsOSArMTczLDQ3IEBAIHZvaWQgS2V5OjplbmNvZGUoV1RGOjpQ
ZXJzaXN0ZW5jZTo6RW5jb2QKICAgICBlbmNvZGVyIDw8IG1fcGFydGl0aW9uSGFzaDsKIH0KIAot
Ym9vbCBLZXk6OmRlY29kZShXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyJiBkZWNvZGVyLCBLZXkm
IGtleSkKK09wdGlvbmFsPEtleT4gS2V5OjpkZWNvZGUoV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2Rl
ciYgZGVjb2RlcikKIHsKLSAgICByZXR1cm4gZGVjb2Rlci5kZWNvZGUoa2V5Lm1fcGFydGl0aW9u
KSAmJiBkZWNvZGVyLmRlY29kZShrZXkubV90eXBlKSAmJiBkZWNvZGVyLmRlY29kZShrZXkubV9p
ZGVudGlmaWVyKSAmJiBkZWNvZGVyLmRlY29kZShrZXkubV9yYW5nZSkgJiYgZGVjb2Rlci5kZWNv
ZGUoa2V5Lm1faGFzaCkgJiYgZGVjb2Rlci5kZWNvZGUoa2V5Lm1fcGFydGl0aW9uSGFzaCk7Cisg
ICAgS2V5IGtleTsKKyAgICAKKyAgICBPcHRpb25hbDxTdHJpbmc+IHBhcnRpdGlvbjsKKyAgICBk
ZWNvZGVyID4+IHBhcnRpdGlvbjsKKyAgICBpZiAoIXBhcnRpdGlvbikKKyAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKKyAgICBrZXkubV9wYXJ0aXRpb24gPSBXVEZNb3ZlKCpwYXJ0aXRpb24p
OworCisgICAgT3B0aW9uYWw8U3RyaW5nPiB0eXBlOworICAgIGRlY29kZXIgPj4gdHlwZTsKKyAg
ICBpZiAoIXR5cGUpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAga2V5Lm1fdHlw
ZSA9IFdURk1vdmUoKnR5cGUpOworCisgICAgT3B0aW9uYWw8U3RyaW5nPiBpZGVudGlmaWVyOwor
ICAgIGRlY29kZXIgPj4gaWRlbnRpZmllcjsKKyAgICBpZiAoIWlkZW50aWZpZXIpCisgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAga2V5Lm1faWRlbnRpZmllciA9IFdURk1vdmUoKmlk
ZW50aWZpZXIpOworCisgICAgT3B0aW9uYWw8U3RyaW5nPiByYW5nZTsKKyAgICBkZWNvZGVyID4+
IHJhbmdlOworICAgIGlmICghcmFuZ2UpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cisg
ICAga2V5Lm1fcmFuZ2UgPSBXVEZNb3ZlKCpyYW5nZSk7CisKKyAgICBPcHRpb25hbDxIYXNoVHlw
ZT4gaGFzaDsKKyAgICBkZWNvZGVyID4+IGhhc2g7CisgICAgaWYgKCFoYXNoKQorICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OworICAgIGtleS5tX2hhc2ggPSBXVEZNb3ZlKCpoYXNoKTsKKwor
ICAgIE9wdGlvbmFsPEhhc2hUeXBlPiBwYXJ0aXRpb25IYXNoOworICAgIGRlY29kZXIgPj4gcGFy
dGl0aW9uSGFzaDsKKyAgICBpZiAoIXBhcnRpdGlvbkhhc2gpCisgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CisgICAga2V5Lm1fcGFydGl0aW9uSGFzaCA9IFdURk1vdmUoKnBhcnRpdGlvbkhh
c2gpOworCisgICAgcmV0dXJuIHsgV1RGTW92ZShrZXkpIH07CiB9CiAKIH0KSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlS2V5LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVLZXku
aAkocmV2aXNpb24gMjU5ODk4KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9OZXR3b3JrQ2FjaGVLZXkuaAkod29ya2luZyBjb3B5KQpAQCAtODMsNyArODMsNyBAQCBwdWJs
aWM6CiAgICAgU3RyaW5nIHBhcnRpdGlvbkhhc2hBc1N0cmluZygpIGNvbnN0IHsgcmV0dXJuIGhh
c2hBc1N0cmluZyhtX3BhcnRpdGlvbkhhc2gpOyB9CiAKICAgICB2b2lkIGVuY29kZShXVEY6OlBl
cnNpc3RlbmNlOjpFbmNvZGVyJikgY29uc3Q7Ci0gICAgc3RhdGljIGJvb2wgZGVjb2RlKFdURjo6
UGVyc2lzdGVuY2U6OkRlY29kZXImLCBLZXkmKTsKKyAgICBzdGF0aWMgT3B0aW9uYWw8S2V5PiBk
ZWNvZGUoV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciYpOwogCiAgICAgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IEtleSYpIGNvbnN0OwogICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBLZXkmIG90aGVy
KSBjb25zdCB7IHJldHVybiAhKCp0aGlzID09IG90aGVyKTsgfQpJbmRleDogU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3Jh
Z2UuY3BwCShyZXZpc2lvbiAyNTk4OTgpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MzgsMjQg
KzQzOCw1OCBAQCBzdGF0aWMgYm9vbCBkZWNvZGVSZWNvcmRNZXRhRGF0YShSZWNvcmRNCiAgICAg
Ym9vbCBzdWNjZXNzID0gZmFsc2U7CiAgICAgZmlsZURhdGEuYXBwbHkoWyZtZXRhRGF0YSwgJnN1
Y2Nlc3NdKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKSB7CiAgICAgICAgIFdURjo6
UGVyc2lzdGVuY2U6OkRlY29kZXIgZGVjb2RlcihkYXRhLCBzaXplKTsKLSAgICAgICAgaWYgKCFk
ZWNvZGVyLmRlY29kZShtZXRhRGF0YS5jYWNoZVN0b3JhZ2VWZXJzaW9uKSkKKyAgICAgICAgCisg
ICAgICAgIE9wdGlvbmFsPHVuc2lnbmVkPiBjYWNoZVN0b3JhZ2VWZXJzaW9uOworICAgICAgICBk
ZWNvZGVyID4+IGNhY2hlU3RvcmFnZVZlcnNpb247CisgICAgICAgIGlmICghY2FjaGVTdG9yYWdl
VmVyc2lvbikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFkZWNvZGVy
LmRlY29kZShtZXRhRGF0YS5rZXkpKQorICAgICAgICBtZXRhRGF0YS5jYWNoZVN0b3JhZ2VWZXJz
aW9uID0gV1RGTW92ZSgqY2FjaGVTdG9yYWdlVmVyc2lvbik7CisKKyAgICAgICAgT3B0aW9uYWw8
S2V5PiBrZXk7CisgICAgICAgIGRlY29kZXIgPj4ga2V5OworICAgICAgICBpZiAoIWtleSkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShtZXRh
RGF0YS50aW1lU3RhbXApKQorICAgICAgICBtZXRhRGF0YS5rZXkgPSBXVEZNb3ZlKCprZXkpOwor
CisgICAgICAgIE9wdGlvbmFsPFdhbGxUaW1lPiB0aW1lU3RhbXA7CisgICAgICAgIGRlY29kZXIg
Pj4gdGltZVN0YW1wOworICAgICAgICBpZiAoIXRpbWVTdGFtcCkKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShtZXRhRGF0YS5oZWFkZXJIYXNo
KSkKKyAgICAgICAgbWV0YURhdGEudGltZVN0YW1wID0gV1RGTW92ZSgqdGltZVN0YW1wKTsKKwor
ICAgICAgICBPcHRpb25hbDxTSEExOjpEaWdlc3Q+IGhlYWRlckhhc2g7CisgICAgICAgIGRlY29k
ZXIgPj4gaGVhZGVySGFzaDsKKyAgICAgICAgaWYgKCFoZWFkZXJIYXNoKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKG1ldGFEYXRhLmhlYWRl
clNpemUpKQorICAgICAgICBtZXRhRGF0YS5oZWFkZXJIYXNoID0gV1RGTW92ZSgqaGVhZGVySGFz
aCk7CisKKyAgICAgICAgT3B0aW9uYWw8dWludDY0X3Q+IGhlYWRlclNpemU7CisgICAgICAgIGRl
Y29kZXIgPj4gaGVhZGVyU2l6ZTsKKyAgICAgICAgaWYgKCFoZWFkZXJTaXplKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKG1ldGFEYXRhLmJv
ZHlIYXNoKSkKKyAgICAgICAgbWV0YURhdGEuaGVhZGVyU2l6ZSA9IFdURk1vdmUoKmhlYWRlclNp
emUpOworCisgICAgICAgIE9wdGlvbmFsPFNIQTE6OkRpZ2VzdD4gYm9keUhhc2g7CisgICAgICAg
IGRlY29kZXIgPj4gYm9keUhhc2g7CisgICAgICAgIGlmICghYm9keUhhc2gpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUobWV0YURhdGEuYm9k
eVNpemUpKQorICAgICAgICBtZXRhRGF0YS5ib2R5SGFzaCA9IFdURk1vdmUoKmJvZHlIYXNoKTsK
KworICAgICAgICBPcHRpb25hbDx1aW50NjRfdD4gYm9keVNpemU7CisgICAgICAgIGRlY29kZXIg
Pj4gYm9keVNpemU7CisgICAgICAgIGlmICghYm9keVNpemUpCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUobWV0YURhdGEuaXNCb2R5SW5saW5l
KSkKKyAgICAgICAgbWV0YURhdGEuYm9keVNpemUgPSBXVEZNb3ZlKCpib2R5U2l6ZSk7CisKKyAg
ICAgICAgT3B0aW9uYWw8Ym9vbD4gaXNCb2R5SW5saW5lOworICAgICAgICBkZWNvZGVyID4+IGlz
Qm9keUlubGluZTsKKyAgICAgICAgaWYgKCFpc0JvZHlJbmxpbmUpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIG1ldGFEYXRhLmlzQm9keUlubGluZSA9IFdURk1vdmUoKmlzQm9k
eUlubGluZSk7CisKICAgICAgICAgaWYgKCFkZWNvZGVyLnZlcmlmeUNoZWNrc3VtKCkpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICAgICAgbWV0YURhdGEuaGVhZGVyT2Zmc2V0ID0g
ZGVjb2Rlci5jdXJyZW50T2Zmc2V0KCk7CiAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlOwogICAgICAg
ICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hl
L05ldHdvcmtDYWNoZVN1YnJlc291cmNlc0VudHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN1YnJlc291cmNlc0VudHJ5
LmNwcAkocmV2aXNpb24gMjU5ODk4KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9j
YWNoZS9OZXR3b3JrQ2FjaGVTdWJyZXNvdXJjZXNFbnRyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ5LDM3ICs0OSw2NSBAQCB2b2lkIFN1YnJlc291cmNlSW5mbzo6ZW5jb2RlKFdURjo6UGVyc2lz
CiAgICAgZW5jb2RlciA8PCBtX2lzU2FtZVNpdGU7CiAgICAgZW5jb2RlciA8PCBtX2ZpcnN0UGFy
dHlGb3JDb29raWVzOwogICAgIGVuY29kZXIgPDwgbV9yZXF1ZXN0SGVhZGVyczsKLSAgICBlbmNv
ZGVyLmVuY29kZUVudW0obV9wcmlvcml0eSk7CisgICAgZW5jb2RlciA8PCBtX3ByaW9yaXR5Owog
fQogCi1ib29sIFN1YnJlc291cmNlSW5mbzo6ZGVjb2RlKFdURjo6UGVyc2lzdGVuY2U6OkRlY29k
ZXImIGRlY29kZXIsIFN1YnJlc291cmNlSW5mbyYgaW5mbykKK09wdGlvbmFsPFN1YnJlc291cmNl
SW5mbz4gU3VicmVzb3VyY2VJbmZvOjpkZWNvZGUoV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciYg
ZGVjb2RlcikKIHsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGluZm8ubV9rZXkpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShpbmZvLm1fbGFzdFNlZW4p
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShpbmZvLm1f
Zmlyc3RTZWVuKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIGlmICghZGVjb2Rl
ci5kZWNvZGUoaW5mby5tX2lzVHJhbnNpZW50KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IAotICAgIGlmIChpbmZvLm1faXNUcmFuc2llbnQpCi0gICAgICAgIHJldHVybiB0cnVlOworICAg
IFN1YnJlc291cmNlSW5mbyBpbmZvOwogCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShpbmZvLm1f
aXNTYW1lU2l0ZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBPcHRpb25hbDxLZXk+IGtl
eTsKKyAgICBkZWNvZGVyID4+IGtleTsKKyAgICBpZiAoIWtleSkKKyAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKKyAgICBpbmZvLm1fa2V5ID0gV1RGTW92ZSgqa2V5KTsKKworICAgIE9wdGlv
bmFsPFdhbGxUaW1lPiBsYXN0U2VlbjsKKyAgICBkZWNvZGVyID4+IGxhc3RTZWVuOworICAgIGlm
ICghbGFzdFNlZW4pCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgaW5mby5tX2xh
c3RTZWVuID0gV1RGTW92ZSgqbGFzdFNlZW4pOworCisgICAgT3B0aW9uYWw8V2FsbFRpbWU+IGZp
cnN0U2VlbjsKKyAgICBkZWNvZGVyID4+IGZpcnN0U2VlbjsKKyAgICBpZiAoIWZpcnN0U2VlbikK
KyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBpbmZvLm1fZmlyc3RTZWVuID0gV1RG
TW92ZSgqZmlyc3RTZWVuKTsKKworICAgIE9wdGlvbmFsPGJvb2w+IGlzVHJhbnNpZW50OworICAg
IGRlY29kZXIgPj4gaXNUcmFuc2llbnQ7CisgICAgaWYgKCFpc1RyYW5zaWVudCkKKyAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBpbmZvLm1faXNUcmFuc2llbnQgPSBXVEZNb3ZlKCpp
c1RyYW5zaWVudCk7CiAKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGluZm8ubV9maXJzdFBhcnR5
Rm9yQ29va2llcykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUoaW5mby5tX3JlcXVlc3RIZWFkZXJzKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IGlmIChpbmZvLm1faXNUcmFuc2llbnQpCisgICAgICAgIHJldHVybiB7IFdURk1vdmUoaW5mbykg
fTsKIAotICAgIGlmICghZGVjb2Rlci5kZWNvZGVFbnVtKGluZm8ubV9wcmlvcml0eSkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBPcHRpb25hbDxib29sPiBpc1NhbWVTaXRlOworICAgIGRl
Y29kZXIgPj4gaXNTYW1lU2l0ZTsKKyAgICBpZiAoIWlzU2FtZVNpdGUpCisgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CisgICAgaW5mby5tX2lzU2FtZVNpdGUgPSBXVEZNb3ZlKCppc1NhbWVT
aXRlKTsKKworICAgIE9wdGlvbmFsPFVSTD4gZmlyc3RQYXJ0eUZvckNvb2tpZXM7CisgICAgZGVj
b2RlciA+PiBmaXJzdFBhcnR5Rm9yQ29va2llczsKKyAgICBpZiAoIWZpcnN0UGFydHlGb3JDb29r
aWVzKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIGluZm8ubV9maXJzdFBhcnR5
Rm9yQ29va2llcyA9IFdURk1vdmUoKmZpcnN0UGFydHlGb3JDb29raWVzKTsKKworICAgIE9wdGlv
bmFsPFdlYkNvcmU6OkhUVFBIZWFkZXJNYXA+IHJlcXVlc3RIZWFkZXJzOworICAgIGRlY29kZXIg
Pj4gcmVxdWVzdEhlYWRlcnM7CisgICAgaWYgKCFyZXF1ZXN0SGVhZGVycykKKyAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKKyAgICBpbmZvLm1fcmVxdWVzdEhlYWRlcnMgPSBXVEZNb3ZlKCpy
ZXF1ZXN0SGVhZGVycyk7CisKKyAgICBPcHRpb25hbDxXZWJDb3JlOjpSZXNvdXJjZUxvYWRQcmlv
cml0eT4gcHJpb3JpdHk7CisgICAgZGVjb2RlciA+PiBwcmlvcml0eTsKKyAgICBpZiAoIXByaW9y
aXR5KQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIGluZm8ubV9wcmlvcml0eSA9
IFdURk1vdmUoKnByaW9yaXR5KTsKICAgICAKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4g
eyBXVEZNb3ZlKGluZm8pIH07CiB9CiAKIGJvb2wgU3VicmVzb3VyY2VJbmZvOjppc0ZpcnN0UGFy
dHkoKSBjb25zdApAQCAtMTAzLDggKzEzMSwxMSBAQCBzdGQ6OnVuaXF1ZV9wdHI8U3VicmVzb3Vy
Y2VzRW50cnk+IFN1YnJlCiAgICAgYXV0byBlbnRyeSA9IG1ha2VVbmlxdWU8U3VicmVzb3VyY2Vz
RW50cnk+KHN0b3JhZ2VFbnRyeSk7CiAKICAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRl
Y29kZXIoc3RvcmFnZUVudHJ5LmhlYWRlci5kYXRhKCksIHN0b3JhZ2VFbnRyeS5oZWFkZXIuc2l6
ZSgpKTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGVudHJ5LT5tX3N1YnJlc291cmNlcykpCisg
ICAgT3B0aW9uYWw8VmVjdG9yPFN1YnJlc291cmNlSW5mbz4+IHN1YnJlc291cmNlczsKKyAgICBk
ZWNvZGVyID4+IHN1YnJlc291cmNlczsKKyAgICBpZiAoIXN1YnJlc291cmNlcykKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgZW50cnktPm1fc3VicmVzb3VyY2VzID0gV1RGTW92ZSgqc3Vi
cmVzb3VyY2VzKTsKIAogICAgIGlmICghZGVjb2Rlci52ZXJpZnlDaGVja3N1bSgpKSB7CiAgICAg
ICAgIExPRyhOZXR3b3JrQ2FjaGUsICIoTmV0d29ya1Byb2Nlc3MpIGNoZWNrc3VtIHZlcmlmaWNh
dGlvbiBmYWlsdXJlXG4iKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvTmV0d29ya0NhY2hlU3VicmVzb3VyY2VzRW50cnkuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN1YnJlc291cmNlc0VudHJ5
LmgJKHJldmlzaW9uIDI1OTg5OCkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvTmV0d29ya0NhY2hlU3VicmVzb3VyY2VzRW50cnkuaAkod29ya2luZyBjb3B5KQpAQCAtMzks
NyArMzksNyBAQCBjbGFzcyBTdWJyZXNvdXJjZUluZm8gewogICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOwogcHVibGljOgogICAgIHZvaWQgZW5jb2RlKFdURjo6UGVyc2lzdGVuY2U6OkVuY29k
ZXImKSBjb25zdDsKLSAgICBzdGF0aWMgYm9vbCBkZWNvZGUoV1RGOjpQZXJzaXN0ZW5jZTo6RGVj
b2RlciYsIFN1YnJlc291cmNlSW5mbyYpOworICAgIHN0YXRpYyBPcHRpb25hbDxTdWJyZXNvdXJj
ZUluZm8+IGRlY29kZShXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyJik7CiAKICAgICBTdWJyZXNv
dXJjZUluZm8oKSA9IGRlZmF1bHQ7CiAgICAgU3VicmVzb3VyY2VJbmZvKGNvbnN0IEtleSYsIGNv
bnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFN1YnJlc291cmNlSW5mbyogcHJl
dmlvdXNJbmZvKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVkL1VzZXJEYXRhLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9Vc2VyRGF0YS5jcHAJKHJldmlzaW9uIDI1
OTg5OCkKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1VzZXJEYXRhLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzY5LDEwICszNjksMTEgQEAgYm9vbCBVc2VyRGF0YTo6ZGVjb2RlKElQQzo6RGVjb2Rl
ciYgZGVjbwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgQVBJOjpPYmplY3Q6OlR5cGU6OkNl
cnRpZmljYXRlSW5mbzogewotICAgICAgICBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8gY2VydGlm
aWNhdGVJbmZvOwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGNlcnRpZmljYXRlSW5mbykp
CisgICAgICAgIE9wdGlvbmFsPFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbz4gY2VydGlmaWNhdGVJ
bmZvOworICAgICAgICBkZWNvZGVyID4+IGNlcnRpZmljYXRlSW5mbzsKKyAgICAgICAgaWYgKCFj
ZXJ0aWZpY2F0ZUluZm8pCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJlc3Vs
dCA9IFdlYkNlcnRpZmljYXRlSW5mbzo6Y3JlYXRlKGNlcnRpZmljYXRlSW5mbyk7CisgICAgICAg
IHJlc3VsdCA9IFdlYkNlcnRpZmljYXRlSW5mbzo6Y3JlYXRlKCpjZXJ0aWZpY2F0ZUluZm8pOwog
ICAgICAgICBicmVhazsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9BUElDb250ZW50UnVsZUxpc3RTdG9yZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0FQSUNvbnRlbnRSdWxlTGlzdFN0b3JlLmNwcAkocmV2aXNpb24gMjU5
ODk4KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUNvbnRlbnRSdWxlTGlzdFN0
b3JlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc5LDIwICsxNzksNDkgQEAgc3RhdGljIE9wdGlv
bmFsPENvbnRlbnRSdWxlTGlzdE1ldGFEYXRhPgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgZGVjb2RlcihkYXRhLCBzaXplKTsK
LSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShtZXRhRGF0YS52ZXJzaW9uKSkKKyAgICAgICAg
CisgICAgICAgIE9wdGlvbmFsPHVpbnQzMl90PiB2ZXJzaW9uOworICAgICAgICBkZWNvZGVyID4+
IHZlcnNpb247CisgICAgICAgIGlmICghdmVyc2lvbikKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShtZXRhRGF0YS5zb3VyY2VTaXplKSkKKyAg
ICAgICAgbWV0YURhdGEudmVyc2lvbiA9IFdURk1vdmUoKnZlcnNpb24pOworCisgICAgICAgIE9w
dGlvbmFsPHVpbnQ2NF90PiBzb3VyY2VTaXplOworICAgICAgICBkZWNvZGVyID4+IHNvdXJjZVNp
emU7CisgICAgICAgIGlmICghc291cmNlU2l6ZSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShtZXRhRGF0YS5hY3Rpb25zU2l6ZSkpCisgICAg
ICAgIG1ldGFEYXRhLnNvdXJjZVNpemUgPSBXVEZNb3ZlKCpzb3VyY2VTaXplKTsKKworICAgICAg
ICBPcHRpb25hbDx1aW50NjRfdD4gYWN0aW9uc1NpemU7CisgICAgICAgIGRlY29kZXIgPj4gYWN0
aW9uc1NpemU7CisgICAgICAgIGlmICghYWN0aW9uc1NpemUpCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUobWV0YURhdGEuZmlsdGVyc1dpdGhv
dXRDb25kaXRpb25zQnl0ZWNvZGVTaXplKSkKKyAgICAgICAgbWV0YURhdGEuYWN0aW9uc1NpemUg
PSBXVEZNb3ZlKCphY3Rpb25zU2l6ZSk7CisKKyAgICAgICAgT3B0aW9uYWw8dWludDY0X3Q+IGZp
bHRlcnNXaXRob3V0Q29uZGl0aW9uc0J5dGVjb2RlU2l6ZTsKKyAgICAgICAgZGVjb2RlciA+PiBm
aWx0ZXJzV2l0aG91dENvbmRpdGlvbnNCeXRlY29kZVNpemU7CisgICAgICAgIGlmICghZmlsdGVy
c1dpdGhvdXRDb25kaXRpb25zQnl0ZWNvZGVTaXplKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKG1ldGFEYXRhLmZpbHRlcnNXaXRoQ29uZGl0
aW9uc0J5dGVjb2RlU2l6ZSkpCisgICAgICAgIG1ldGFEYXRhLmZpbHRlcnNXaXRob3V0Q29uZGl0
aW9uc0J5dGVjb2RlU2l6ZSA9IFdURk1vdmUoKmZpbHRlcnNXaXRob3V0Q29uZGl0aW9uc0J5dGVj
b2RlU2l6ZSk7CisKKyAgICAgICAgT3B0aW9uYWw8dWludDY0X3Q+IGZpbHRlcnNXaXRoQ29uZGl0
aW9uc0J5dGVjb2RlU2l6ZTsKKyAgICAgICAgZGVjb2RlciA+PiBmaWx0ZXJzV2l0aENvbmRpdGlv
bnNCeXRlY29kZVNpemU7CisgICAgICAgIGlmICghZmlsdGVyc1dpdGhDb25kaXRpb25zQnl0ZWNv
ZGVTaXplKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlKG1ldGFEYXRhLmNvbmRpdGlvbmVkRmlsdGVyc0J5dGVjb2RlU2l6ZSkpCisgICAgICAg
IG1ldGFEYXRhLmZpbHRlcnNXaXRoQ29uZGl0aW9uc0J5dGVjb2RlU2l6ZSA9IFdURk1vdmUoKmZp
bHRlcnNXaXRoQ29uZGl0aW9uc0J5dGVjb2RlU2l6ZSk7CisKKyAgICAgICAgT3B0aW9uYWw8dWlu
dDY0X3Q+IGNvbmRpdGlvbmVkRmlsdGVyc0J5dGVjb2RlU2l6ZTsKKyAgICAgICAgZGVjb2RlciA+
PiBjb25kaXRpb25lZEZpbHRlcnNCeXRlY29kZVNpemU7CisgICAgICAgIGlmICghY29uZGl0aW9u
ZWRGaWx0ZXJzQnl0ZWNvZGVTaXplKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKG1ldGFEYXRhLmNvbmRpdGlvbnNBcHBseU9ubHlUb0RvbWFp
bikpCisgICAgICAgIG1ldGFEYXRhLmNvbmRpdGlvbmVkRmlsdGVyc0J5dGVjb2RlU2l6ZSA9IFdU
Rk1vdmUoKmNvbmRpdGlvbmVkRmlsdGVyc0J5dGVjb2RlU2l6ZSk7CisKKyAgICAgICAgT3B0aW9u
YWw8dWludDMyX3Q+IGNvbmRpdGlvbnNBcHBseU9ubHlUb0RvbWFpbjsKKyAgICAgICAgZGVjb2Rl
ciA+PiBjb25kaXRpb25zQXBwbHlPbmx5VG9Eb21haW47CisgICAgICAgIGlmICghY29uZGl0aW9u
c0FwcGx5T25seVRvRG9tYWluKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBt
ZXRhRGF0YS5jb25kaXRpb25zQXBwbHlPbmx5VG9Eb21haW4gPSBXVEZNb3ZlKCpjb25kaXRpb25z
QXBwbHlPbmx5VG9Eb21haW4pOworCiAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlOwogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>396148</attachid>
            <date>2020-04-10 21:34:03 -0700</date>
            <delta_ts>2020-04-10 22:13:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207497-20200410213402.patch</filename>
            <type>text/plain</type>
            <size>110222</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNTk4OTgpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDM4IEBACisyMDIwLTA0LTEwICBBbGV4IENocmlzdGVuc2VuICA8
YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUGVyc2lzdGVudENvZGVycyBzaG91
bGQgdXNlIG1vZGVybiBkZWNvZGluZyBzeW50YXgKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNzQ5NworCisgICAgICAgIFJldmlld2VkIGJ5IERhcmlu
IEFkbGVyLgorCisgICAgICAgIFRoaXMgcGF2ZXMgdGhlIHdheSBmb3IgbW9yZSBzZXJpYWxpemVk
IHR5cGVzIHRoYXQgZG8gbm90IGhhdmUgYSBkZWZhdWx0IGNvbnN0cnVjdG9yLgorCisgICAgICAg
ICogd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRDb2Rlci5oOgorICAgICAgICAoV1RGOjpQZXJz
aXN0ZW5jZTo6Q29kZXI6OmVuY29kZSk6CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpDb2Rl
cjo6ZGVjb2RlKToKKyAgICAgICAgKiB3dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudENvZGVycy5j
cHA6CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpDb2RlcjxBdG9tU3RyaW5nPjo6ZGVjb2Rl
KToKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkNvZGVyPENTdHJpbmc+OjpkZWNvZGUpOgor
ICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6ZGVjb2RlU3RyaW5nVGV4dCk6CisgICAgICAgIChX
VEY6OlBlcnNpc3RlbmNlOjpDb2RlcjxTdHJpbmc+OjpkZWNvZGUpOgorICAgICAgICAoV1RGOjpQ
ZXJzaXN0ZW5jZTo6Q29kZXI8U0hBMTo6RGlnZXN0Pjo6ZGVjb2RlKToKKyAgICAgICAgKiB3dGYv
cGVyc2lzdGVuY2UvUGVyc2lzdGVudENvZGVycy5oOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5j
ZTo6Q29kZXI8T3B0aW9uYWw8VD4+OjpkZWNvZGUpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5j
ZTo6Q29kZXI8U2Vjb25kcz46OmRlY29kZSk6CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpD
b2RlcjxXYWxsVGltZT46OmRlY29kZSk6CisgICAgICAgICogd3RmL3BlcnNpc3RlbmNlL1BlcnNp
c3RlbnREZWNvZGVyLmNwcDoKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXI6OmRl
Y29kZU51bWJlcik6CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyOjpvcGVyYXRv
cj4+KToKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXI6OmRlY29kZSk6IERlbGV0
ZWQuCisgICAgICAgICogd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnREZWNvZGVyLmg6CisgICAg
ICAgIChXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyOjpvcGVyYXRvcj4+KToKKyAgICAgICAgKFdU
Rjo6UGVyc2lzdGVuY2U6OkRlY29kZXI6OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6
OlBlcnNpc3RlbmNlOjpEZWNvZGVyOjpkZWNvZGVFbnVtKTogRGVsZXRlZC4KKyAgICAgICAgKiB3
dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudEVuY29kZXIuaDoKKyAgICAgICAgKFdURjo6UGVyc2lz
dGVuY2U6OkVuY29kZXI6Om9wZXJhdG9yPDwpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6
RW5jb2Rlcjo6ZW5jb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkVu
Y29kZXI6OmVuY29kZUVudW0pOiBEZWxldGVkLgorCiAyMDIwLTA0LTEwICBBbGljaWEgQm95YSBH
YXJjw61hICA8YWJveWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBbV1RGXSBEYXRhTXV0ZXg6IEFk
ZCBydW5VbmxvY2tlZCgpCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9VUkwuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV1RGL3d0Zi9VUkwuaAkocmV2aXNpb24gMjU5ODk4KQorKysgU291cmNlL1dURi93
dGYvVVJMLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0OCwxMCArMjQ4LDExIEBAIGJvb2wgVVJMOjpk
ZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgVVJMJiAKIHRlbXBsYXRlIDxjbGFzcyBEZWNvZGVyPgog
T3B0aW9uYWw8VVJMPiBVUkw6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogewotICAgIFN0cmlu
ZyBzdHJpbmc7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShzdHJpbmcpKQorICAgIE9wdGlvbmFs
PFN0cmluZz4gc3RyaW5nOworICAgIGRlY29kZXIgPj4gc3RyaW5nOworICAgIGlmICghc3RyaW5n
KQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIHJldHVybiBVUkwoVVJMKCksIHN0
cmluZyk7CisgICAgcmV0dXJuIFVSTChVUkwoKSwgV1RGTW92ZSgqc3RyaW5nKSk7CiB9CiAKIFdU
Rl9FWFBPUlRfUFJJVkFURSBib29sIGVxdWFsSWdub3JpbmdGcmFnbWVudElkZW50aWZpZXIoY29u
c3QgVVJMJiwgY29uc3QgVVJMJik7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9Q
ZXJzaXN0ZW50Q29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5j
ZS9QZXJzaXN0ZW50Q29kZXIuaAkocmV2aXNpb24gMjU5ODk4KQorKysgU291cmNlL1dURi93dGYv
cGVyc2lzdGVuY2UvUGVyc2lzdGVudENvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDE2ICsz
MCwxNiBAQCBuYW1lc3BhY2UgUGVyc2lzdGVuY2UgewogCiBjbGFzcyBEZWNvZGVyOwogY2xhc3Mg
RW5jb2RlcjsKLSAgICAKKwogdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvZGVyIHsKICAg
ICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgVCYgdCkKICAgICB7
CiAgICAgICAgIHQuZW5jb2RlKGVuY29kZXIpOwogICAgIH0KIAotICAgIHN0YXRpYyBXQVJOX1VO
VVNFRF9SRVRVUk4gYm9vbCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgVCYgdCkKKyAgICBzdGF0
aWMgT3B0aW9uYWw8VD4gZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgewotICAgICAgICBy
ZXR1cm4gVDo6ZGVjb2RlKGRlY29kZXIsIHQpOworICAgICAgICByZXR1cm4gVDo6ZGVjb2RlKGRl
Y29kZXIpOwogICAgIH0KIH07CiAKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1Bl
cnNpc3RlbnRDb2RlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3Rl
bmNlL1BlcnNpc3RlbnRDb2RlcnMuY3BwCShyZXZpc2lvbiAyNTk4OTgpCisrKyBTb3VyY2UvV1RG
L3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50Q29kZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzcsMTQgKzM3LDE0IEBAIHZvaWQgQ29kZXI8QXRvbVN0cmluZz46OmVuY29kZShFbmNvZGVyJiAK
ICAgICBlbmNvZGVyIDw8IGF0b21TdHJpbmcuc3RyaW5nKCk7CiB9CiAKLWJvb2wgQ29kZXI8QXRv
bVN0cmluZz46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBBdG9tU3RyaW5nJiBhdG9tU3RyaW5n
KQorT3B0aW9uYWw8QXRvbVN0cmluZz4gQ29kZXI8QXRvbVN0cmluZz46OmRlY29kZShEZWNvZGVy
JiBkZWNvZGVyKQogewotICAgIFN0cmluZyBzdHJpbmc7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShzdHJpbmcpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgT3B0aW9uYWw8U3RyaW5nPiBz
dHJpbmc7CisgICAgZGVjb2RlciA+PiBzdHJpbmc7CisgICAgaWYgKCFzdHJpbmcpCisgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBhdG9tU3RyaW5nID0gc3RyaW5nOwotICAgIHJl
dHVybiB0cnVlOworICAgIHJldHVybiB7eyBXVEZNb3ZlKCpzdHJpbmcpIH19OwogfQogCiB2b2lk
IENvZGVyPENTdHJpbmc+OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgQ1N0cmluZyYg
c3RyaW5nKQpAQCAtNjAsMzIgKzYwLDMwIEBAIHZvaWQgQ29kZXI8Q1N0cmluZz46OmVuY29kZShF
bmNvZGVyJiBlbmMKICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJl
dF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihzdHJpbmcuZGF0YSgpKSwgbGVuZ3RoKTsKIH0KIAotYm9v
bCBDb2RlcjxDU3RyaW5nPjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIENTdHJpbmcmIHJlc3Vs
dCkKK09wdGlvbmFsPENTdHJpbmc+IENvZGVyPENTdHJpbmc+OjpkZWNvZGUoRGVjb2RlciYgZGVj
b2RlcikKIHsKLSAgICB1aW50MzJfdCBsZW5ndGg7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShs
ZW5ndGgpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgT3B0aW9uYWw8dWludDMyX3Q+IGxl
bmd0aDsKKyAgICBkZWNvZGVyID4+IGxlbmd0aDsKKyAgICBpZiAoIWxlbmd0aCkKKyAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIGlmIChsZW5ndGggPT0gc3RkOjpudW1lcmljX2xp
bWl0czx1aW50MzJfdD46Om1heCgpKSB7CiAgICAgICAgIC8vIFRoaXMgaXMgdGhlIG51bGwgc3Ry
aW5nLgotICAgICAgICByZXN1bHQgPSBDU3RyaW5nKCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICByZXR1cm4gQ1N0cmluZygpOwogICAgIH0KIAogICAgIC8vIEJlZm9yZSBhbGxvY2F0
aW5nIHRoZSBzdHJpbmcsIG1ha2Ugc3VyZSB0aGF0IHRoZSBkZWNvZGVyIGJ1ZmZlciBpcyBiaWcg
ZW5vdWdoLgotICAgIGlmICghZGVjb2Rlci5idWZmZXJJc0xhcmdlRW5vdWdoVG9Db250YWluPGNo
YXI+KGxlbmd0aCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWRlY29kZXIuYnVm
ZmVySXNMYXJnZUVub3VnaFRvQ29udGFpbjxjaGFyPigqbGVuZ3RoKSkKKyAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKIAogICAgIGNoYXIqIGJ1ZmZlcjsKLSAgICBDU3RyaW5nIHN0cmluZyA9
IENTdHJpbmc6Om5ld1VuaW5pdGlhbGl6ZWQobGVuZ3RoLCBidWZmZXIpOwotICAgIGlmICghZGVj
b2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oYnVm
ZmVyKSwgbGVuZ3RoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIENTdHJpbmcgc3RyaW5n
ID0gQ1N0cmluZzo6bmV3VW5pbml0aWFsaXplZCgqbGVuZ3RoLCBidWZmZXIpOworICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4o
YnVmZmVyKSwgKmxlbmd0aCkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBy
ZXN1bHQgPSBzdHJpbmc7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIFdURk1vdmUoc3Ry
aW5nKTsKIH0KIAotCiB2b2lkIENvZGVyPFN0cmluZz46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVy
LCBjb25zdCBTdHJpbmcmIHN0cmluZykKIHsKICAgICAvLyBTcGVjaWFsIGNhc2UgdGhlIG51bGwg
c3RyaW5nLgpAQCAtMTA2LDQwICsxMDQsNDAgQEAgdm9pZCBDb2RlcjxTdHJpbmc+OjplbmNvZGUo
RW5jb2RlciYgZW5jbwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLXN0
YXRpYyBpbmxpbmUgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlU3RyaW5nVGV4dChEZWNv
ZGVyJiBkZWNvZGVyLCB1aW50MzJfdCBsZW5ndGgsIFN0cmluZyYgcmVzdWx0KQorc3RhdGljIGlu
bGluZSBPcHRpb25hbDxTdHJpbmc+IGRlY29kZVN0cmluZ1RleHQoRGVjb2RlciYgZGVjb2Rlciwg
dWludDMyX3QgbGVuZ3RoKQogewogICAgIC8vIEJlZm9yZSBhbGxvY2F0aW5nIHRoZSBzdHJpbmcs
IG1ha2Ugc3VyZSB0aGF0IHRoZSBkZWNvZGVyIGJ1ZmZlciBpcyBiaWcgZW5vdWdoLgogICAgIGlm
ICghZGVjb2Rlci5idWZmZXJJc0xhcmdlRW5vdWdoVG9Db250YWluPENoYXJhY3RlclR5cGU+KGxl
bmd0aCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKIAogICAgIENoYXJhY3RlclR5cGUqIGJ1ZmZlcjsKICAgICBTdHJpbmcgc3RyaW5nID0gU3Ry
aW5nOjpjcmVhdGVVbmluaXRpYWxpemVkKGxlbmd0aCwgYnVmZmVyKTsKICAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGJ1ZmZl
ciksIGxlbmd0aCAqIHNpemVvZihDaGFyYWN0ZXJUeXBlKSkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAKLSAgICByZXN1bHQgPSBzdHJp
bmc7Ci0gICAgcmV0dXJuIHRydWU7ICAgIAorICAgIHJldHVybiBXVEZNb3ZlKHN0cmluZyk7CiB9
CiAKLWJvb2wgQ29kZXI8U3RyaW5nPjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFN0cmluZyYg
cmVzdWx0KQorT3B0aW9uYWw8U3RyaW5nPiBDb2RlcjxTdHJpbmc+OjpkZWNvZGUoRGVjb2RlciYg
ZGVjb2RlcikKIHsKLSAgICB1aW50MzJfdCBsZW5ndGg7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShsZW5ndGgpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgT3B0aW9uYWw8dWludDMyX3Q+
IGxlbmd0aDsKKyAgICBkZWNvZGVyID4+IGxlbmd0aDsKKyAgICBpZiAoIWxlbmd0aCkKKyAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIGlmIChsZW5ndGggPT0gc3RkOjpudW1lcmlj
X2xpbWl0czx1aW50MzJfdD46Om1heCgpKSB7CisgICAgaWYgKCpsZW5ndGggPT0gc3RkOjpudW1l
cmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpKSB7CiAgICAgICAgIC8vIFRoaXMgaXMgdGhlIG51
bGwgc3RyaW5nLgotICAgICAgICByZXN1bHQgPSBTdHJpbmcoKTsKLSAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICB9CiAKLSAgICBib29sIGlzOEJpdDsK
LSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGlzOEJpdCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIGlmIChpczhCaXQpCi0gICAgICAgIHJldHVybiBkZWNvZGVTdHJpbmdUZXh0PExDaGFy
PihkZWNvZGVyLCBsZW5ndGgsIHJlc3VsdCk7Ci0gICAgcmV0dXJuIGRlY29kZVN0cmluZ1RleHQ8
VUNoYXI+KGRlY29kZXIsIGxlbmd0aCwgcmVzdWx0KTsKKyAgICBPcHRpb25hbDxib29sPiBpczhC
aXQ7CisgICAgZGVjb2RlciA+PiBpczhCaXQ7CisgICAgaWYgKCFpczhCaXQpCisgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBpZiAoKmlzOEJpdCkKKyAgICAgICAgcmV0dXJuIGRl
Y29kZVN0cmluZ1RleHQ8TENoYXI+KGRlY29kZXIsICpsZW5ndGgpOworICAgIHJldHVybiBkZWNv
ZGVTdHJpbmdUZXh0PFVDaGFyPihkZWNvZGVyLCAqbGVuZ3RoKTsKIH0KIAogdm9pZCBDb2RlcjxT
SEExOjpEaWdlc3Q+OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgU0hBMTo6RGlnZXN0
JiBkaWdlc3QpCkBAIC0xNDcsOSArMTQ1LDEyIEBAIHZvaWQgQ29kZXI8U0hBMTo6RGlnZXN0Pjo6
ZW5jb2RlKEVuY29kZXIKICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShkaWdlc3Qu
ZGF0YSgpLCBzaXplb2YoZGlnZXN0KSk7CiB9CiAKLWJvb2wgQ29kZXI8U0hBMTo6RGlnZXN0Pjo6
ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFNIQTE6OkRpZ2VzdCYgZGlnZXN0KQorT3B0aW9uYWw8
U0hBMTo6RGlnZXN0PiBDb2RlcjxTSEExOjpEaWdlc3Q+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2Rl
cikKIHsKLSAgICByZXR1cm4gZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoZGlnZXN0LmRh
dGEoKSwgc2l6ZW9mKGRpZ2VzdCkpOworICAgIFNIQTE6OkRpZ2VzdCB0bXA7CisgICAgaWYgKCFk
ZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YSh0bXAuZGF0YSgpLCBzaXplb2YodG1wKSkpCisg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcmV0dXJuIFdURk1vdmUodG1wKTsKIH0K
IAogfQpJbmRleDogU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudENvZGVycy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRDb2Rl
cnMuaAkocmV2aXNpb24gMjU5ODk4KQorKysgU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVy
c2lzdGVudENvZGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC00NiwxOSArNDYsMTkgQEAgdGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gc3RydWN0IAogICAgICAgICBlbmNvZGVyIDw8IHBh
aXIuZmlyc3QgPDwgcGFpci5zZWNvbmQ7CiAgICAgfQogCi0gICAgc3RhdGljIFdBUk5fVU5VU0VE
X1JFVFVSTiBib29sIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBzdGQ6OnBhaXI8VCwgVT4mIHBh
aXIpCisgICAgc3RhdGljIE9wdGlvbmFsPHN0ZDo6cGFpcjxULCBVPj4gZGVjb2RlKERlY29kZXIm
IGRlY29kZXIpCiAgICAgewotICAgICAgICBUIGZpcnN0OwotICAgICAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlKGZpcnN0KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBVIHNl
Y29uZDsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShzZWNvbmQpKQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgICAgIHBhaXIuZmlyc3QgPSBmaXJzdDsKLSAgICAgICAgcGFp
ci5zZWNvbmQgPSBzZWNvbmQ7Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBPcHRpb25h
bDxUPiBmaXJzdDsKKyAgICAgICAgZGVjb2RlciA+PiBmaXJzdDsKKyAgICAgICAgaWYgKCFmaXJz
dCkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICAgICAgT3B0aW9uYWw8
VT4gc2Vjb25kOworICAgICAgICBkZWNvZGVyID4+IHNlY29uZDsKKyAgICAgICAgaWYgKCFzZWNv
bmQpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgICAgIHJldHVybiB7
eyBXVEZNb3ZlKCpmaXJzdCksIFdURk1vdmUoKnNlY29uZCkgfX07CiAgICAgfQogfTsKIApAQCAt
NzQsMjMgKzc0LDIxIEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb2RlcjxPcHRpb24K
ICAgICAgICAgZW5jb2RlciA8PCBvcHRpb25hbC52YWx1ZSgpOwogICAgIH0KICAgICAKLSAgICBz
dGF0aWMgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIE9w
dGlvbmFsPFQ+JiBvcHRpb25hbCkKKyAgICBzdGF0aWMgT3B0aW9uYWw8T3B0aW9uYWw8VD4+IGRl
Y29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIHsKLSAgICAgICAgYm9vbCBpc0VuZ2FnZWQ7Ci0g
ICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaXNFbmdhZ2VkKSkKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgCi0gICAgICAgIGlmICghaXNFbmdhZ2VkKSB7Ci0gICAgICAgICAg
ICBvcHRpb25hbCA9IFdURjo6bnVsbG9wdDsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICB9CisgICAgICAgIE9wdGlvbmFsPGJvb2w+IGlzRW5nYWdlZDsKKyAgICAgICAgZGVjb2Rl
ciA+PiBpc0VuZ2FnZWQ7CisgICAgICAgIGlmICghaXNFbmdhZ2VkKQorICAgICAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgaWYgKCEqaXNFbmdhZ2VkKQorICAgICAgICAgICAg
cmV0dXJuIE9wdGlvbmFsPE9wdGlvbmFsPFQ+PiB7IE9wdGlvbmFsPFQ+IHsgV1RGOjpudWxsb3B0
IH0gfTsKICAgICAgICAgCi0gICAgICAgIFQgdmFsdWU7Ci0gICAgICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBPcHRpb25h
bDxUPiB2YWx1ZTsKKyAgICAgICAgZGVjb2RlciA+PiB2YWx1ZTsKKyAgICAgICAgaWYgKCF2YWx1
ZSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgIAotICAgICAgICBv
cHRpb25hbCA9IFdURk1vdmUodmFsdWUpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
cmV0dXJuIE9wdGlvbmFsPE9wdGlvbmFsPFQ+PiB7IE9wdGlvbmFsPFQ+IHsgV1RGTW92ZSgqdmFs
dWUpIH0gfTsKICAgICB9CiB9OwogCkBAIC0xMDAsMTkgKzk4LDE5IEBAIHRlbXBsYXRlPHR5cGVu
YW1lIEtleVR5cGUsIHR5cGVuYW1lIFZhbHUKICAgICAgICAgZW5jb2RlciA8PCBwYWlyLmtleSA8
PCBwYWlyLnZhbHVlOwogICAgIH0KIAotICAgIHN0YXRpYyBXQVJOX1VOVVNFRF9SRVRVUk4gYm9v
bCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgV1RGOjpLZXlWYWx1ZVBhaXI8S2V5VHlwZSwgVmFs
dWVUeXBlPiYgcGFpcikKKyAgICBzdGF0aWMgT3B0aW9uYWw8V1RGOjpLZXlWYWx1ZVBhaXI8S2V5
VHlwZSwgVmFsdWVUeXBlPj4gZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgewotICAgICAg
ICBLZXlUeXBlIGtleTsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShrZXkpKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIFZhbHVlVHlwZSB2YWx1ZTsKLSAgICAgICAg
aWYgKCFkZWNvZGVyLmRlY29kZSh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICAgICAgcGFpci5rZXkgPSBrZXk7Ci0gICAgICAgIHBhaXIudmFsdWUgPSB2YWx1ZTsKLSAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIE9wdGlvbmFsPEtleVR5cGU+IGtleTsKKyAgICAg
ICAgZGVjb2RlciA+PiBrZXk7CisgICAgICAgIGlmICgha2V5KQorICAgICAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKKworICAgICAgICBPcHRpb25hbDxWYWx1ZVR5cGU+IHZhbHVlOworICAg
ICAgICBkZWNvZGVyID4+dmFsdWU7CisgICAgICAgIGlmICghdmFsdWUpCisgICAgICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgICAgIHJldHVybiB7eyBXVEZNb3ZlKCprZXkpLCBX
VEZNb3ZlKCp2YWx1ZSkgfX07CiAgICAgfQogfTsKIApAQCAtMTI2LDI0ICsxMjQsMjQgQEAgdGVt
cGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaQogICAgICAgICAgICAgZW5jb2Rl
ciA8PCB2ZWN0b3JbaV07CiAgICAgfQogCi0gICAgc3RhdGljIFdBUk5fVU5VU0VEX1JFVFVSTiBi
b29sIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+JiB2
ZWN0b3IpCisgICAgc3RhdGljIE9wdGlvbmFsPFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT4+IGRl
Y29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIHsKLSAgICAgICAgdWludDY0X3Qgc2l6ZTsKLSAg
ICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShzaXplKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgT3B0aW9uYWw8dWludDY0X3Q+IHNpemU7CisgICAgICAgIGRlY29kZXIgPj4g
c2l6ZTsKKyAgICAgICAgaWYgKCFzaXplKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKIAogICAgICAgICBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+IHRtcDsKLSAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgICAgIFQgZWxlbWVudDsK
LSAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoZWxlbWVudCkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICB0bXAuYXBwZW5kKFdU
Rk1vdmUoZWxlbWVudCkpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8ICpzaXplOyAr
K2kpIHsKKyAgICAgICAgICAgIE9wdGlvbmFsPFQ+IGVsZW1lbnQ7CisgICAgICAgICAgICBkZWNv
ZGVyID4+IGVsZW1lbnQ7CisgICAgICAgICAgICBpZiAoIWVsZW1lbnQpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgICAgIHRtcC5hcHBlbmQoV1RGTW92ZSgq
ZWxlbWVudCkpOwogICAgICAgICB9CiAKICAgICAgICAgdG1wLnNocmlua1RvRml0KCk7Ci0gICAg
ICAgIHZlY3Rvci5zd2FwKHRtcCk7Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1
cm4gV1RGTW92ZSh0bXApOwogICAgIH0KIH07CiAKQEAgLTE1NCwzMSArMTUyLDMxIEBAIHRlbXBs
YXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2kKICAgICAgICAgZW5jb2Rlci5lbmNv
ZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4odmVjdG9y
LmRhdGEoKSksIHZlY3Rvci5zaXplKCkgKiBzaXplb2YoVCkpOwogICAgIH0KICAgICAKLSAgICBz
dGF0aWMgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFZl
Y3RvcjxULCBpbmxpbmVDYXBhY2l0eT4mIHZlY3RvcikKKyAgICBzdGF0aWMgT3B0aW9uYWw8VmVj
dG9yPFQsIGlubGluZUNhcGFjaXR5Pj4gZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgewot
ICAgICAgICB1aW50NjRfdCBkZWNvZGVkU2l6ZTsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShkZWNvZGVkU2l6ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIE9wdGlv
bmFsPHVpbnQ2NF90PiBkZWNvZGVkU2l6ZTsKKyAgICAgICAgZGVjb2RlciA+PiBkZWNvZGVkU2l6
ZTsKKyAgICAgICAgaWYgKCFkZWNvZGVkU2l6ZSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CiAKLSAgICAgICAgaWYgKCFpc0luQm91bmRzPHNpemVfdD4oZGVjb2RlZFNpemUpKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoIWlzSW5Cb3VuZHM8c2l6ZV90
PigqZGVjb2RlZFNpemUpKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAg
ICAgICBhdXRvIHNpemUgPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGRlY29kZWRTaXplKTsKKyAgICAg
ICAgYXV0byBzaXplID0gc3RhdGljX2Nhc3Q8c2l6ZV90PigqZGVjb2RlZFNpemUpOwogCiAgICAg
ICAgIC8vIFNpbmNlIHdlIGtub3cgdGhlIHRvdGFsIHNpemUgb2YgdGhlIGVsZW1lbnRzLCB3ZSBj
YW4gYWxsb2NhdGUgdGhlIHZlY3RvciBpbgogICAgICAgICAvLyBvbmUgZmVsbCBzd29vcC4gQmVm
b3JlIGFsbG9jYXRpbmcgd2UgbXVzdCBob3dldmVyIG1ha2Ugc3VyZSB0aGF0IHRoZSBkZWNvZGVy
IGJ1ZmZlcgogICAgICAgICAvLyBpcyBiaWcgZW5vdWdoLgogICAgICAgICBpZiAoIWRlY29kZXIu
YnVmZmVySXNMYXJnZUVub3VnaFRvQ29udGFpbjxUPihzaXplKSkKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICAgICAgVmVj
dG9yPFQsIGlubGluZUNhcGFjaXR5PiB0ZW1wOwogICAgICAgICB0ZW1wLmdyb3coc2l6ZSk7CiAK
ICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9j
YXN0PHVpbnQ4X3QqPih0ZW1wLmRhdGEoKSksIHNpemUgKiBzaXplb2YoVCkpKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAg
ICAgICB2ZWN0b3Iuc3dhcCh0ZW1wKTsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJl
dHVybiBXVEZNb3ZlKHRlbXApOwogICAgIH0KIH07CiAKQEAgLTE5NCwzMCArMTkyLDMyIEBAIHRl
bXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGUKICAgICAgICAgICAgIGVuY29k
ZXIgPDwgKml0OwogICAgIH0KIAotICAgIHN0YXRpYyBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBk
ZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgSGFzaE1hcFR5cGUmIGhhc2hNYXApCisgICAgc3RhdGlj
IE9wdGlvbmFsPEhhc2hNYXBUeXBlPiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKICAgICB7Ci0g
ICAgICAgIHVpbnQ2NF90IGhhc2hNYXBTaXplOwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KGhhc2hNYXBTaXplKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgT3B0aW9u
YWw8dWludDY0X3Q+IGhhc2hNYXBTaXplOworICAgICAgICBkZWNvZGVyID4+IGhhc2hNYXBTaXpl
OworICAgICAgICBpZiAoIWhhc2hNYXBTaXplKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKIAogICAgICAgICBIYXNoTWFwVHlwZSB0ZW1wSGFzaE1hcDsKLSAgICAgICAgdGVtcEhh
c2hNYXAucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaGFzaE1h
cFNpemUpKTsKLSAgICAgICAgZm9yICh1aW50NjRfdCBpID0gMDsgaSA8IGhhc2hNYXBTaXplOyAr
K2kpIHsKLSAgICAgICAgICAgIEtleUFyZyBrZXk7Ci0gICAgICAgICAgICBNYXBwZWRBcmcgdmFs
dWU7Ci0gICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGtleSkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZSh2YWx1ZSkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB0ZW1wSGFzaE1hcC5yZXNl
cnZlSW5pdGlhbENhcGFjaXR5KHN0YXRpY19jYXN0PHVuc2lnbmVkPigqaGFzaE1hcFNpemUpKTsK
KyAgICAgICAgZm9yICh1aW50NjRfdCBpID0gMDsgaSA8ICpoYXNoTWFwU2l6ZTsgKytpKSB7Cisg
ICAgICAgICAgICBPcHRpb25hbDxLZXlBcmc+IGtleTsKKyAgICAgICAgICAgIGRlY29kZXIgPj4g
a2V5OworICAgICAgICAgICAgaWYgKCFrZXkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKKyAgICAgICAgICAgIE9wdGlvbmFsPE1hcHBlZEFyZz4gdmFsdWU7CisgICAgICAg
ICAgICBkZWNvZGVyID4+IHZhbHVlOworICAgICAgICAgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgICAgICAgICBpZiAoIXRlbXBIYXNo
TWFwLmFkZChrZXksIHZhbHVlKS5pc05ld0VudHJ5KSB7CisgICAgICAgICAgICBpZiAoIXRlbXBI
YXNoTWFwLmFkZChXVEZNb3ZlKCprZXkpLCBXVEZNb3ZlKCp2YWx1ZSkpLmlzTmV3RW50cnkpIHsK
ICAgICAgICAgICAgICAgICAvLyBUaGUgaGFzaCBtYXAgYWxyZWFkeSBoYXMgdGhlIHNwZWNpZmll
ZCBrZXksIGJhaWwuCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAg
ICAgICBoYXNoTWFwLnN3YXAodGVtcEhhc2hNYXApOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgcmV0dXJuIFdURk1vdmUodGVtcEhhc2hNYXApOwogICAgIH0KIH07CiAKQEAgLTIzMSwy
NiArMjMxLDI3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgSGFzaEEKICAg
ICAgICAgICAgIGVuY29kZXIgPDwgKml0OwogICAgIH0KIAotICAgIHN0YXRpYyBXQVJOX1VOVVNF
RF9SRVRVUk4gYm9vbCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgSGFzaFNldFR5cGUmIGhhc2hT
ZXQpCisgICAgc3RhdGljIE9wdGlvbmFsPEhhc2hTZXRUeXBlPiBkZWNvZGUoRGVjb2RlciYgZGVj
b2RlcikKICAgICB7Ci0gICAgICAgIHVpbnQ2NF90IGhhc2hTZXRTaXplOwotICAgICAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKGhhc2hTZXRTaXplKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgT3B0aW9uYWw8dWludDY0X3Q+IGhhc2hTZXRTaXplOworICAgICAgICBkZWNvZGVy
ID4+IGhhc2hTZXRTaXplOworICAgICAgICBpZiAoIWhhc2hTZXRTaXplKQorICAgICAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgICAgICBIYXNoU2V0VHlwZSB0ZW1wSGFzaFNldDsK
LSAgICAgICAgZm9yICh1aW50NjRfdCBpID0gMDsgaSA8IGhhc2hTZXRTaXplOyArK2kpIHsKLSAg
ICAgICAgICAgIEtleUFyZyBrZXk7Ci0gICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGtl
eSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBmb3IgKHVpbnQ2NF90
IGkgPSAwOyBpIDwgKmhhc2hTZXRTaXplOyArK2kpIHsKKyAgICAgICAgICAgIE9wdGlvbmFsPEtl
eUFyZz4ga2V5OworICAgICAgICAgICAgZGVjb2RlciA+PiBrZXk7CisgICAgICAgICAgICBpZiAo
IWtleSkKKyAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgICAgICAg
ICBpZiAoIXRlbXBIYXNoU2V0LmFkZChrZXkpLmlzTmV3RW50cnkpIHsKKyAgICAgICAgICAgIGlm
ICghdGVtcEhhc2hTZXQuYWRkKFdURk1vdmUoKmtleSkpLmlzTmV3RW50cnkpIHsKICAgICAgICAg
ICAgICAgICAvLyBUaGUgaGFzaCBtYXAgYWxyZWFkeSBoYXMgdGhlIHNwZWNpZmllZCBrZXksIGJh
aWwuCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBoYXNo
U2V0LnN3YXAodGVtcEhhc2hTZXQpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0
dXJuIFdURk1vdmUodGVtcEhhc2hTZXQpOwogICAgIH0KIH07CiAKQEAgLTI2MCwxNCArMjYxLDEz
IEBAIHRlbXBsYXRlPD4gc3RydWN0IENvZGVyPFNlY29uZHM+IHsKICAgICAgICAgZW5jb2RlciA8
PCBzZWNvbmRzLnZhbHVlKCk7CiAgICAgfQogCi0gICAgc3RhdGljIFdBUk5fVU5VU0VEX1JFVFVS
TiBib29sIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBTZWNvbmRzJiByZXN1bHQpCisgICAgc3Rh
dGljIE9wdGlvbmFsPFNlY29uZHM+IGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIHsKLSAg
ICAgICAgZG91YmxlIHZhbHVlOwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHZhbHVlKSkK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICByZXN1bHQgPSBTZWNvbmRzKHZh
bHVlKTsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIE9wdGlvbmFsPGRvdWJsZT4gdmFs
dWU7CisgICAgICAgIGRlY29kZXIgPj4gdmFsdWU7CisgICAgICAgIGlmICghdmFsdWUpCisgICAg
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICByZXR1cm4gU2Vjb25kcygqdmFs
dWUpOwogICAgIH0KIH07CiAKQEAgLTI3NywzNSArMjc3LDM1IEBAIHRlbXBsYXRlPD4gc3RydWN0
IENvZGVyPFdhbGxUaW1lPiB7CiAgICAgICAgIGVuY29kZXIgPDwgdGltZS5zZWNvbmRzU2luY2VF
cG9jaCgpLnZhbHVlKCk7CiAgICAgfQogCi0gICAgc3RhdGljIFdBUk5fVU5VU0VEX1JFVFVSTiBi
b29sIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBXYWxsVGltZSYgcmVzdWx0KQorICAgIHN0YXRp
YyBPcHRpb25hbDxXYWxsVGltZT4gZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgewotICAg
ICAgICBkb3VibGUgdmFsdWU7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUodmFsdWUpKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBPcHRpb25hbDxkb3VibGU+IHZhbHVl
OworICAgICAgICBkZWNvZGVyID4+IHZhbHVlOworICAgICAgICBpZiAoIXZhbHVlKQorICAgICAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgICAgICByZXN1bHQgPSBXYWxsVGltZTo6
ZnJvbVJhd1NlY29uZHModmFsdWUpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0
dXJuIFdhbGxUaW1lOjpmcm9tUmF3U2Vjb25kcygqdmFsdWUpOwogICAgIH0KIH07CiAKIHRlbXBs
YXRlPD4gc3RydWN0IENvZGVyPEF0b21TdHJpbmc+IHsKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUg
c3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25zdCBBdG9tU3RyaW5nJik7Ci0gICAgV1RG
X0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVyJiwgQXRvbVN0cmluZyYp
IFdBUk5fVU5VU0VEX1JFVFVSTjsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIE9wdGlv
bmFsPEF0b21TdHJpbmc+IGRlY29kZShEZWNvZGVyJik7CiB9OwogCiB0ZW1wbGF0ZTw+IHN0cnVj
dCBDb2RlcjxDU3RyaW5nPiB7CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGVu
Y29kZShFbmNvZGVyJiwgY29uc3QgQ1N0cmluZyYpOwotICAgIFdURl9FWFBPUlRfUFJJVkFURSBz
dGF0aWMgYm9vbCBkZWNvZGUoRGVjb2RlciYsIENTdHJpbmcmKSBXQVJOX1VOVVNFRF9SRVRVUk47
CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBPcHRpb25hbDxDU3RyaW5nPiBkZWNvZGUo
RGVjb2RlciYpOwogfTsKIAogdGVtcGxhdGU8PiBzdHJ1Y3QgQ29kZXI8U3RyaW5nPiB7CiAgICAg
V1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiwgY29uc3QgU3Ry
aW5nJik7Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVy
JiwgU3RyaW5nJikgV0FSTl9VTlVTRURfUkVUVVJOOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBz
dGF0aWMgT3B0aW9uYWw8U3RyaW5nPiBkZWNvZGUoRGVjb2RlciYpOwogfTsKIAogdGVtcGxhdGU8
PiBzdHJ1Y3QgQ29kZXI8U0hBMTo6RGlnZXN0PiB7CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0
YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiwgY29uc3QgU0hBMTo6RGlnZXN0Jik7Ci0gICAgV1RG
X0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVyJiwgU0hBMTo6RGlnZXN0
JikgV0FSTl9VTlVTRURfUkVUVVJOOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgT3B0
aW9uYWw8U0hBMTo6RGlnZXN0PiBkZWNvZGUoRGVjb2RlciYpOwogfTsKIAogfQpJbmRleDogU291
cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudERlY29kZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnREZWNvZGVyLmNwcAkocmV2
aXNpb24gMjU5ODk4KQorKysgU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudERl
Y29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw2NSArNTksNjcgQEAgYm9vbCBEZWNvZGVy
OjpkZWNvZGVGaXhlZExlbmd0aERhdGEodWludAogICAgIHJldHVybiB0cnVlOwogfQogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBUeXBlPgotYm9vbCBEZWNvZGVyOjpkZWNvZGVOdW1iZXIoVHlwZSYgdmFs
dWUpCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorRGVjb2RlciYgRGVjb2Rlcjo6ZGVjb2RlTnVtYmVy
KE9wdGlvbmFsPFQ+JiBvcHRpb25hbCkKIHsKLSAgICBpZiAoIWJ1ZmZlcklzTGFyZ2VFbm91Z2hU
b0NvbnRhaW4oc2l6ZW9mKHZhbHVlKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAo
IWJ1ZmZlcklzTGFyZ2VFbm91Z2hUb0NvbnRhaW4oc2l6ZW9mKFQpKSkKKyAgICAgICAgcmV0dXJu
ICp0aGlzOwogCi0gICAgbWVtY3B5KCZ2YWx1ZSwgbV9idWZmZXJQb3NpdGlvbiwgc2l6ZW9mKHZh
bHVlKSk7Ci0gICAgbV9idWZmZXJQb3NpdGlvbiArPSBzaXplb2YoVHlwZSk7CisgICAgVCB2YWx1
ZTsKKyAgICBtZW1jcHkoJnZhbHVlLCBtX2J1ZmZlclBvc2l0aW9uLCBzaXplb2YoVCkpOworICAg
IG1fYnVmZmVyUG9zaXRpb24gKz0gc2l6ZW9mKFQpOwogCiAgICAgRW5jb2Rlcjo6dXBkYXRlQ2hl
Y2tzdW1Gb3JOdW1iZXIobV9zaGExLCB2YWx1ZSk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgb3B0
aW9uYWwgPSB2YWx1ZTsKKyAgICByZXR1cm4gKnRoaXM7CiB9CiAKLWJvb2wgRGVjb2Rlcjo6ZGVj
b2RlKGJvb2wmIHJlc3VsdCkKK0RlY29kZXImIERlY29kZXI6Om9wZXJhdG9yPj4oT3B0aW9uYWw8
Ym9vbD4mIHJlc3VsdCkKIHsKICAgICByZXR1cm4gZGVjb2RlTnVtYmVyKHJlc3VsdCk7CiB9CiAK
LWJvb2wgRGVjb2Rlcjo6ZGVjb2RlKHVpbnQ4X3QmIHJlc3VsdCkKK0RlY29kZXImIERlY29kZXI6
Om9wZXJhdG9yPj4oT3B0aW9uYWw8dWludDhfdD4mIHJlc3VsdCkKIHsKICAgICByZXR1cm4gZGVj
b2RlTnVtYmVyKHJlc3VsdCk7CiB9CiAKLWJvb2wgRGVjb2Rlcjo6ZGVjb2RlKHVpbnQxNl90JiBy
ZXN1bHQpCitEZWNvZGVyJiBEZWNvZGVyOjpvcGVyYXRvcj4+KE9wdGlvbmFsPHVpbnQxNl90PiYg
cmVzdWx0KQogewogICAgIHJldHVybiBkZWNvZGVOdW1iZXIocmVzdWx0KTsKIH0KIAotYm9vbCBE
ZWNvZGVyOjpkZWNvZGUoaW50MTZfdCYgcmVzdWx0KQorRGVjb2RlciYgRGVjb2Rlcjo6b3BlcmF0
b3I+PihPcHRpb25hbDxpbnQxNl90PiYgcmVzdWx0KQogewogICAgIHJldHVybiBkZWNvZGVOdW1i
ZXIocmVzdWx0KTsKIH0KIAotYm9vbCBEZWNvZGVyOjpkZWNvZGUodWludDMyX3QmIHJlc3VsdCkK
K0RlY29kZXImIERlY29kZXI6Om9wZXJhdG9yPj4oT3B0aW9uYWw8dWludDMyX3Q+JiByZXN1bHQp
CiB7CiAgICAgcmV0dXJuIGRlY29kZU51bWJlcihyZXN1bHQpOwogfQogCi1ib29sIERlY29kZXI6
OmRlY29kZSh1aW50NjRfdCYgcmVzdWx0KQorRGVjb2RlciYgRGVjb2Rlcjo6b3BlcmF0b3I+PihP
cHRpb25hbDx1aW50NjRfdD4mIHJlc3VsdCkKIHsKICAgICByZXR1cm4gZGVjb2RlTnVtYmVyKHJl
c3VsdCk7CiB9CiAKLWJvb2wgRGVjb2Rlcjo6ZGVjb2RlKGludDMyX3QmIHJlc3VsdCkKK0RlY29k
ZXImIERlY29kZXI6Om9wZXJhdG9yPj4oT3B0aW9uYWw8aW50MzJfdD4mIHJlc3VsdCkKIHsKICAg
ICByZXR1cm4gZGVjb2RlTnVtYmVyKHJlc3VsdCk7CiB9CiAKLWJvb2wgRGVjb2Rlcjo6ZGVjb2Rl
KGludDY0X3QmIHJlc3VsdCkKK0RlY29kZXImIERlY29kZXI6Om9wZXJhdG9yPj4oT3B0aW9uYWw8
aW50NjRfdD4mIHJlc3VsdCkKIHsKICAgICByZXR1cm4gZGVjb2RlTnVtYmVyKHJlc3VsdCk7CiB9
CiAKLWJvb2wgRGVjb2Rlcjo6ZGVjb2RlKGZsb2F0JiByZXN1bHQpCitEZWNvZGVyJiBEZWNvZGVy
OjpvcGVyYXRvcj4+KE9wdGlvbmFsPGZsb2F0PiYgcmVzdWx0KQogewogICAgIHJldHVybiBkZWNv
ZGVOdW1iZXIocmVzdWx0KTsKIH0KIAotYm9vbCBEZWNvZGVyOjpkZWNvZGUoZG91YmxlJiByZXN1
bHQpCitEZWNvZGVyJiBEZWNvZGVyOjpvcGVyYXRvcj4+KE9wdGlvbmFsPGRvdWJsZT4mIHJlc3Vs
dCkKIHsKICAgICByZXR1cm4gZGVjb2RlTnVtYmVyKHJlc3VsdCk7CiB9CkluZGV4OiBTb3VyY2Uv
V1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RGVjb2Rlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnREZWNvZGVyLmgJKHJldmlzaW9uIDI1
OTg5OCkKKysrIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnREZWNvZGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ1LDQ3ICs0NSwzNiBAQCBwdWJsaWM6CiAKICAgICBXVEZfRVhQ
T1JUX1BSSVZBVEUgYm9vbCBkZWNvZGVGaXhlZExlbmd0aERhdGEodWludDhfdCosIHNpemVfdCkg
V0FSTl9VTlVTRURfUkVUVVJOOwogCi0gICAgV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgZGVjb2Rl
KGJvb2wmKSBXQVJOX1VOVVNFRF9SRVRVUk47Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wg
ZGVjb2RlKHVpbnQ4X3QmKSBXQVJOX1VOVVNFRF9SRVRVUk47Ci0gICAgV1RGX0VYUE9SVF9QUklW
QVRFIGJvb2wgZGVjb2RlKHVpbnQxNl90JikgV0FSTl9VTlVTRURfUkVUVVJOOwotICAgIFdURl9F
WFBPUlRfUFJJVkFURSBib29sIGRlY29kZSh1aW50MzJfdCYpIFdBUk5fVU5VU0VEX1JFVFVSTjsK
LSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBkZWNvZGUodWludDY0X3QmKSBXQVJOX1VOVVNF
RF9SRVRVUk47Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgZGVjb2RlKGludDE2X3QmKSBX
QVJOX1VOVVNFRF9SRVRVUk47Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgZGVjb2RlKGlu
dDMyX3QmKSBXQVJOX1VOVVNFRF9SRVRVUk47Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wg
ZGVjb2RlKGludDY0X3QmKSBXQVJOX1VOVVNFRF9SRVRVUk47Ci0gICAgV1RGX0VYUE9SVF9QUklW
QVRFIGJvb2wgZGVjb2RlKGZsb2F0JikgV0FSTl9VTlVTRURfUkVUVVJOOwotICAgIFdURl9FWFBP
UlRfUFJJVkFURSBib29sIGRlY29kZShkb3VibGUmKSBXQVJOX1VOVVNFRF9SRVRVUk47CisgICAg
V1RGX0VYUE9SVF9QUklWQVRFIERlY29kZXImIG9wZXJhdG9yPj4oT3B0aW9uYWw8Ym9vbD4mKTsK
KyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgRGVjb2RlciYgb3BlcmF0b3I+PihPcHRpb25hbDx1aW50
OF90PiYpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBEZWNvZGVyJiBvcGVyYXRvcj4+KE9wdGlv
bmFsPHVpbnQxNl90PiYpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBEZWNvZGVyJiBvcGVyYXRv
cj4+KE9wdGlvbmFsPHVpbnQzMl90PiYpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBEZWNvZGVy
JiBvcGVyYXRvcj4+KE9wdGlvbmFsPHVpbnQ2NF90PiYpOworICAgIFdURl9FWFBPUlRfUFJJVkFU
RSBEZWNvZGVyJiBvcGVyYXRvcj4+KE9wdGlvbmFsPGludDE2X3Q+Jik7CisgICAgV1RGX0VYUE9S
VF9QUklWQVRFIERlY29kZXImIG9wZXJhdG9yPj4oT3B0aW9uYWw8aW50MzJfdD4mKTsKKyAgICBX
VEZfRVhQT1JUX1BSSVZBVEUgRGVjb2RlciYgb3BlcmF0b3I+PihPcHRpb25hbDxpbnQ2NF90PiYp
OworICAgIFdURl9FWFBPUlRfUFJJVkFURSBEZWNvZGVyJiBvcGVyYXRvcj4+KE9wdGlvbmFsPGZs
b2F0PiYpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBEZWNvZGVyJiBvcGVyYXRvcj4+KE9wdGlv
bmFsPGRvdWJsZT4mKTsKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEU+IFdBUk5fVU5VU0VEX1JF
VFVSTgotICAgIGF1dG8gZGVjb2RlKEUmIGUpIC0+IHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19l
bnVtPEU+Ojp2YWx1ZSwgYm9vbD4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzdGQ6OmVuYWJs
ZV9pZl90PCFzdGQ6OmlzX2FyaXRobWV0aWM8dHlwZW5hbWUgc3RkOjpyZW1vdmVfY29uc3Q8VD4+
Ojp2YWx1ZSAmJiAhc3RkOjppc19lbnVtPFQ+Ojp2YWx1ZT4qID0gbnVsbHB0cj4KKyAgICBEZWNv
ZGVyJiBvcGVyYXRvcj4+KE9wdGlvbmFsPFQ+JiByZXN1bHQpCiAgICAgewotICAgICAgICB1aW50
NjRfdCB2YWx1ZTsKLSAgICAgICAgaWYgKCFkZWNvZGUodmFsdWUpKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICBpZiAoIWlzVmFsaWRFbnVtPEU+KHZhbHVlKSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBlID0gc3RhdGljX2Nhc3Q8RT4odmFsdWUpOwot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBX
QVJOX1VOVVNFRF9SRVRVUk4KLSAgICBib29sIGRlY29kZUVudW0oVCYgcmVzdWx0KQotICAgIHsK
LSAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoVCkgPD0gOCwgIkVudW0gdHlwZSBUIG11c3Qg
bm90IGJlIGxhcmdlciB0aGFuIDY0IGJpdHMhIik7Ci0KLSAgICAgICAgdWludDY0X3QgdmFsdWU7
Ci0gICAgICAgIGlmICghZGVjb2RlKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgCi0gICAgICAgIHJlc3VsdCA9IHN0YXRpY19jYXN0PFQ+KHZhbHVlKTsKLSAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJlc3VsdCA9IENvZGVyPFQ+OjpkZWNvZGUoKnRoaXMp
OworICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
VD4gV0FSTl9VTlVTRURfUkVUVVJOCi0gICAgYXV0byBkZWNvZGUoVCYgdCkgLT4gc3RkOjplbmFi
bGVfaWZfdDwhc3RkOjppc19lbnVtPFQ+Ojp2YWx1ZSwgYm9vbD4KKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBFLCBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfZW51bTxFPjo6dmFsdWU+KiA9IG51bGxw
dHI+CisgICAgRGVjb2RlciYgb3BlcmF0b3I+PihPcHRpb25hbDxFPiYgcmVzdWx0KQogICAgIHsK
LSAgICAgICAgcmV0dXJuIENvZGVyPFQ+OjpkZWNvZGUoKnRoaXMsIHQpOworICAgICAgICBzdGF0
aWNfYXNzZXJ0KHNpemVvZihFKSA8PSA4LCAiRW51bSB0eXBlIFQgbXVzdCBub3QgYmUgbGFyZ2Vy
IHRoYW4gNjQgYml0cyEiKTsKKyAgICAgICAgT3B0aW9uYWw8dWludDY0X3Q+IHZhbHVlOworICAg
ICAgICAqdGhpcyA+PiB2YWx1ZTsKKyAgICAgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgICAgIHJl
dHVybiAqdGhpczsKKyAgICAgICAgaWYgKCFpc1ZhbGlkRW51bTxFPigqdmFsdWUpKQorICAgICAg
ICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICByZXN1bHQgPSBzdGF0aWNfY2FzdDxFPigqdmFs
dWUpOworICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4gV0FSTl9VTlVTRURfUkVUVVJOCkBAIC0xMDMsNyArOTIsNyBAQCBwdWJsaWM6CiAKIHBy
aXZhdGU6CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgYnVmZmVySXNMYXJnZUVub3VnaFRv
Q29udGFpbihzaXplX3QpIGNvbnN0IFdBUk5fVU5VU0VEX1JFVFVSTjsKLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBUeXBlPiBib29sIGRlY29kZU51bWJlcihUeXBlJikgV0FSTl9VTlVTRURfUkVUVVJO
OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+IERlY29kZXImIGRlY29kZU51bWJlcihPcHRp
b25hbDxUeXBlPiYpIFdBUk5fVU5VU0VEX1JFVFVSTjsKIAogICAgIGNvbnN0IHVpbnQ4X3QqIG1f
YnVmZmVyOwogICAgIGNvbnN0IHVpbnQ4X3QqIG1fYnVmZmVyUG9zaXRpb247CkluZGV4OiBTb3Vy
Y2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RW5jb2Rlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudEVuY29kZXIuY3BwCShyZXZp
c2lvbiAyNTk4OTgpCisrKyBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RW5j
b2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDYyICs2Miw2MyBAQCB2b2lkIEVuY29kZXI6
OmVuY29kZUZpeGVkTGVuZ3RoRGF0YShjb25zCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+
Ci12b2lkIEVuY29kZXI6OmVuY29kZU51bWJlcihUeXBlIHZhbHVlKQorRW5jb2RlciYgRW5jb2Rl
cjo6ZW5jb2RlTnVtYmVyKFR5cGUgdmFsdWUpCiB7CiAgICAgRW5jb2Rlcjo6dXBkYXRlQ2hlY2tz
dW1Gb3JOdW1iZXIobV9zaGExLCB2YWx1ZSk7CiAKICAgICB1aW50OF90KiBidWZmZXIgPSBncm93
KHNpemVvZihUeXBlKSk7CiAgICAgbWVtY3B5KGJ1ZmZlciwgJnZhbHVlLCBzaXplb2YoVHlwZSkp
OworICAgIHJldHVybiAqdGhpczsKIH0KIAotdm9pZCBFbmNvZGVyOjplbmNvZGUoYm9vbCB2YWx1
ZSkKK0VuY29kZXImIEVuY29kZXI6Om9wZXJhdG9yPDwoYm9vbCB2YWx1ZSkKIHsKLSAgICBlbmNv
ZGVOdW1iZXIodmFsdWUpOworICAgIHJldHVybiBlbmNvZGVOdW1iZXIodmFsdWUpOwogfQogCi12
b2lkIEVuY29kZXI6OmVuY29kZSh1aW50OF90IHZhbHVlKQorRW5jb2RlciYgRW5jb2Rlcjo6b3Bl
cmF0b3I8PCh1aW50OF90IHZhbHVlKQogewotICAgIGVuY29kZU51bWJlcih2YWx1ZSk7CisgICAg
cmV0dXJuIGVuY29kZU51bWJlcih2YWx1ZSk7CiB9CiAKLXZvaWQgRW5jb2Rlcjo6ZW5jb2RlKHVp
bnQxNl90IHZhbHVlKQorRW5jb2RlciYgRW5jb2Rlcjo6b3BlcmF0b3I8PCh1aW50MTZfdCB2YWx1
ZSkKIHsKLSAgICBlbmNvZGVOdW1iZXIodmFsdWUpOworICAgIHJldHVybiBlbmNvZGVOdW1iZXIo
dmFsdWUpOwogfQogCi12b2lkIEVuY29kZXI6OmVuY29kZShpbnQxNl90IHZhbHVlKQorRW5jb2Rl
ciYgRW5jb2Rlcjo6b3BlcmF0b3I8PChpbnQxNl90IHZhbHVlKQogewotICAgIGVuY29kZU51bWJl
cih2YWx1ZSk7CisgICAgcmV0dXJuIGVuY29kZU51bWJlcih2YWx1ZSk7CiB9CiAKLXZvaWQgRW5j
b2Rlcjo6ZW5jb2RlKHVpbnQzMl90IHZhbHVlKQorRW5jb2RlciYgRW5jb2Rlcjo6b3BlcmF0b3I8
PCh1aW50MzJfdCB2YWx1ZSkKIHsKLSAgICBlbmNvZGVOdW1iZXIodmFsdWUpOworICAgIHJldHVy
biBlbmNvZGVOdW1iZXIodmFsdWUpOwogfQogCi12b2lkIEVuY29kZXI6OmVuY29kZSh1aW50NjRf
dCB2YWx1ZSkKK0VuY29kZXImIEVuY29kZXI6Om9wZXJhdG9yPDwodWludDY0X3QgdmFsdWUpCiB7
Ci0gICAgZW5jb2RlTnVtYmVyKHZhbHVlKTsKKyAgICByZXR1cm4gZW5jb2RlTnVtYmVyKHZhbHVl
KTsKIH0KIAotdm9pZCBFbmNvZGVyOjplbmNvZGUoaW50MzJfdCB2YWx1ZSkKK0VuY29kZXImIEVu
Y29kZXI6Om9wZXJhdG9yPDwoaW50MzJfdCB2YWx1ZSkKIHsKLSAgICBlbmNvZGVOdW1iZXIodmFs
dWUpOworICAgIHJldHVybiBlbmNvZGVOdW1iZXIodmFsdWUpOwogfQogCi12b2lkIEVuY29kZXI6
OmVuY29kZShpbnQ2NF90IHZhbHVlKQorRW5jb2RlciYgRW5jb2Rlcjo6b3BlcmF0b3I8PChpbnQ2
NF90IHZhbHVlKQogewotICAgIGVuY29kZU51bWJlcih2YWx1ZSk7CisgICAgcmV0dXJuIGVuY29k
ZU51bWJlcih2YWx1ZSk7CiB9CiAKLXZvaWQgRW5jb2Rlcjo6ZW5jb2RlKGZsb2F0IHZhbHVlKQor
RW5jb2RlciYgRW5jb2Rlcjo6b3BlcmF0b3I8PChmbG9hdCB2YWx1ZSkKIHsKLSAgICBlbmNvZGVO
dW1iZXIodmFsdWUpOworICAgIHJldHVybiBlbmNvZGVOdW1iZXIodmFsdWUpOwogfQogCi12b2lk
IEVuY29kZXI6OmVuY29kZShkb3VibGUgdmFsdWUpCitFbmNvZGVyJiBFbmNvZGVyOjpvcGVyYXRv
cjw8KGRvdWJsZSB2YWx1ZSkKIHsKLSAgICBlbmNvZGVOdW1iZXIodmFsdWUpOworICAgIHJldHVy
biBlbmNvZGVOdW1iZXIodmFsdWUpOwogfQogCiB2b2lkIEVuY29kZXI6OmVuY29kZUNoZWNrc3Vt
KCkKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRFbmNvZGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudEVuY29k
ZXIuaAkocmV2aXNpb24gMjU5ODk4KQorKysgU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVy
c2lzdGVudEVuY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsMzIgKzQ1LDMxIEBAIHB1Ymxp
YzoKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBlbmNvZGVDaGVja3N1bSgpOwogICAgIFdU
Rl9FWFBPUlRfUFJJVkFURSB2b2lkIGVuY29kZUZpeGVkTGVuZ3RoRGF0YShjb25zdCB1aW50OF90
Kiwgc2l6ZV90KTsKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEU+IGF1dG8gZW5jb2RlKEUgdmFs
dWUpIC0+IHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19lbnVtPEU+Ojp2YWx1ZT4KKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBULCBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfZW51bTxUPjo6dmFsdWU+
KiA9IG51bGxwdHI+CisgICAgRW5jb2RlciYgb3BlcmF0b3I8PChjb25zdCBUJiB0KQogICAgIHsK
LSAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoRSkgPD0gc2l6ZW9mKHVpbnQ2NF90KSwgIkVu
dW0gdHlwZSBtdXN0IG5vdCBiZSBsYXJnZXIgdGhhbiA2NCBiaXRzLiIpOwotCi0gICAgICAgIEFT
U0VSVChpc1ZhbGlkRW51bTxFPihzdGF0aWNfY2FzdDx1aW50NjRfdD4odmFsdWUpKSk7Ci0gICAg
ICAgIGVuY29kZShzdGF0aWNfY2FzdDx1aW50NjRfdD4odmFsdWUpKTsKLSAgICB9Ci0KLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIGVuY29kZUVudW0oVCB0KQotICAgIHsKLSAgICAgICAg
Q09NUElMRV9BU1NFUlQoc2l6ZW9mKFQpIDw9IHNpemVvZih1aW50NjRfdCksIGVudW1fdHlwZV9t
dXN0X25vdF9iZV9sYXJnZXJfdGhhbl82NF9iaXRzKTsKLQotICAgICAgICBlbmNvZGUoc3RhdGlj
X2Nhc3Q8dWludDY0X3Q+KHQpKTsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoVCkgPD0g
c2l6ZW9mKHVpbnQ2NF90KSwgIkVudW0gdHlwZSBtdXN0IG5vdCBiZSBsYXJnZXIgdGhhbiA2NCBi
aXRzLiIpOworICAgICAgICByZXR1cm4gKnRoaXMgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHQp
OwogICAgIH0KIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGF1dG8gZW5jb2RlKGNvbnN0IFQm
IHQpIC0+IHN0ZDo6ZW5hYmxlX2lmX3Q8IXN0ZDo6aXNfZW51bTxUPjo6dmFsdWU+CisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVCwgc3RkOjplbmFibGVfaWZfdDwhc3RkOjppc19lbnVtPFQ+Ojp2YWx1
ZSAmJiAhc3RkOjppc19hcml0aG1ldGljPHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX2NvbnN0PFQ+Pjo6
dmFsdWU+KiA9IG51bGxwdHI+CisgICAgRW5jb2RlciYgb3BlcmF0b3I8PChjb25zdCBUJiB0KQog
ICAgIHsKICAgICAgICAgQ29kZXI8VD46OmVuY29kZSgqdGhpcywgdCk7Ci0gICAgfQotCi0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4gRW5jb2RlciYgb3BlcmF0b3I8PChjb25zdCBUJiB0KQotICAg
IHsKLSAgICAgICAgZW5jb2RlKHQpOwogICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQogCisg
ICAgV1RGX0VYUE9SVF9QUklWQVRFIEVuY29kZXImIG9wZXJhdG9yPDwoYm9vbCk7CisgICAgV1RG
X0VYUE9SVF9QUklWQVRFIEVuY29kZXImIG9wZXJhdG9yPDwodWludDhfdCk7CisgICAgV1RGX0VY
UE9SVF9QUklWQVRFIEVuY29kZXImIG9wZXJhdG9yPDwodWludDE2X3QpOworICAgIFdURl9FWFBP
UlRfUFJJVkFURSBFbmNvZGVyJiBvcGVyYXRvcjw8KHVpbnQzMl90KTsKKyAgICBXVEZfRVhQT1JU
X1BSSVZBVEUgRW5jb2RlciYgb3BlcmF0b3I8PCh1aW50NjRfdCk7CisgICAgV1RGX0VYUE9SVF9Q
UklWQVRFIEVuY29kZXImIG9wZXJhdG9yPDwoaW50MTZfdCk7CisgICAgV1RGX0VYUE9SVF9QUklW
QVRFIEVuY29kZXImIG9wZXJhdG9yPDwoaW50MzJfdCk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRF
IEVuY29kZXImIG9wZXJhdG9yPDwoaW50NjRfdCk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIEVu
Y29kZXImIG9wZXJhdG9yPDwoZmxvYXQpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBFbmNvZGVy
JiBvcGVyYXRvcjw8KGRvdWJsZSk7CisKICAgICBjb25zdCB1aW50OF90KiBidWZmZXIoKSBjb25z
dCB7IHJldHVybiBtX2J1ZmZlci5kYXRhKCk7IH0KICAgICBzaXplX3QgYnVmZmVyU2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fYnVmZmVyLnNpemUoKTsgfQogCkBAIC04MCwxOCArNzksOCBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSVBDRW5jb2RlciA9IGZhbHNlOwogCiBw
cml2YXRlOgotICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGVuY29kZShib29sKTsKLSAgICBX
VEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBlbmNvZGUodWludDhfdCk7Ci0gICAgV1RGX0VYUE9SVF9Q
UklWQVRFIHZvaWQgZW5jb2RlKHVpbnQxNl90KTsKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBlbmNvZGUodWludDMyX3QpOwotICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGVuY29kZSh1
aW50NjRfdCk7Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZW5jb2RlKGludDE2X3QpOwot
ICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGVuY29kZShpbnQzMl90KTsKLSAgICBXVEZfRVhQ
T1JUX1BSSVZBVEUgdm9pZCBlbmNvZGUoaW50NjRfdCk7Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRF
IHZvaWQgZW5jb2RlKGZsb2F0KTsKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBlbmNvZGUo
ZG91YmxlKTsKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+IHZvaWQgZW5jb2RlTnVtYmVy
KFR5cGUpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+IEVuY29kZXImIGVuY29kZU51bWJl
cihUeXBlKTsKIAogICAgIHVpbnQ4X3QqIGdyb3coc2l6ZV90KTsKIApJbmRleDogU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwko
cmV2aXNpb24gMjU5ODk4KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMzMgQEAKKzIwMjAtMDQtMTAgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hy
aXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBQZXJzaXN0ZW50Q29kZXJzIHNob3VsZCB1
c2UgbW9kZXJuIGRlY29kaW5nIHN5bnRheAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjA3NDk3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRs
ZXIuCisKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kSG9zdDo6c2hvd0NlcnRpZmljYXRlKToK
KyAgICAgICAgKiBsb2FkZXIvRmV0Y2hPcHRpb25zLmg6CisgICAgICAgIChXZWJDb3JlOjpGZXRj
aE9wdGlvbnM6OmRlY29kZVBlcnNpc3RlbnQpOgorICAgICAgICAqIHBhZ2UvY3NwL0NvbnRlbnRT
ZWN1cml0eVBvbGljeVJlc3BvbnNlSGVhZGVycy5oOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVu
dFNlY3VyaXR5UG9saWN5UmVzcG9uc2VIZWFkZXJzOjplbmNvZGUgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5UmVzcG9uc2VIZWFkZXJzOjpkZWNvZGUpOgor
ICAgICAgICAqIHBsYXRmb3JtL1Bhc3RlYm9hcmRDdXN0b21EYXRhLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlBhc3RlYm9hcmRDdXN0b21EYXRhOjpmcm9tU2hhcmVkQnVmZmVyKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlTG9hZFByaW9yaXR5Lmg6CisgICAgICAgICogcGxh
dGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmg6CisgICAgICAgIChXZWJDb3JlOjpS
ZXNvdXJjZVJlcXVlc3RCYXNlOjplbmNvZGVCYXNlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlc291cmNlUmVxdWVzdEJhc2U6OmRlY29kZUJhc2UpOgorICAgICAgICAqIHBsYXRmb3JtL25l
dHdvcmsvY2YvQ2VydGlmaWNhdGVJbmZvLmg6CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpk
ZWNvZGVDRkRhdGEpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6ZGVjb2RlU2VjVHJ1c3RS
ZWYpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6ZGVjb2RlQ2VydGlmaWNhdGVDaGFpbik6
CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpDb2RlcjxXZWJDb3JlOjpDZXJ0aWZpY2F0ZUlu
Zm8+OjplbmNvZGUpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6Q29kZXI8V2ViQ29yZTo6
Q2VydGlmaWNhdGVJbmZvPjo6ZGVjb2RlKToKKyAgICAgICAgKiB3b3JrZXJzL3NlcnZpY2Uvc2Vy
dmVyL1JlZ2lzdHJhdGlvbkRhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lzdHJh
dGlvbkRhdGFiYXNlOjpkb1B1c2hDaGFuZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lzdHJh
dGlvbkRhdGFiYXNlOjppbXBvcnRSZWNvcmRzKToKKwogMjAyMC0wNC0xMCAgQW50dGkgS29pdmlz
dG8gIDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgW0NTUyBTaGFkb3cgUGFydHNdIEJhZCBz
dHlsZSBzaGFyaW5nIGJldHdlZW4gc2libGluZyBlbGVtZW50cyB3aXRoIGRpZmZlcmVudCBwYXJ0
IGF0dHJpYnV0ZXMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9u
dGVuZEhvc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JGcm9udGVuZEhvc3QuY3BwCShyZXZpc2lvbiAyNTk4OTgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjAsNiArNjAsNyBAQAogI2luY2x1ZGUgPHBhbC9zeXN0ZW0vU291bmQuaD4KICNpbmNsdWRlIDx3
dGYvSlNPTlZhbHVlcy5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKyNpbmNsdWRl
IDx3dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudERlY29kZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9CYXNlNjQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNTc0LDE1ICs1NzUsMTYgQEAg
Ym9vbCBJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OnNob3dDZXJ0aWZpYwogICAgIGlmICghYmFzZTY0
RGVjb2RlKHNlcmlhbGl6ZWRDZXJ0aWZpY2F0ZSwgZGF0YSkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIENlcnRpZmljYXRlSW5mbyBjZXJ0aWZpY2F0ZUluZm87CiAgICAgV1RGOjpQZXJz
aXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyKGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSk7Ci0gICAg
aWYgKCFkZWNvZGVyLmRlY29kZShjZXJ0aWZpY2F0ZUluZm8pKQorICAgIE9wdGlvbmFsPENlcnRp
ZmljYXRlSW5mbz4gY2VydGlmaWNhdGVJbmZvOworICAgIGRlY29kZXIgPj4gY2VydGlmaWNhdGVJ
bmZvOworICAgIGlmICghY2VydGlmaWNhdGVJbmZvKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICBpZiAoY2VydGlmaWNhdGVJbmZvLmlzRW1wdHkoKSkKKyAgICBpZiAoY2VydGlmaWNhdGVJ
bmZvLT5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIG1fY2xpZW50LT5z
aG93Q2VydGlmaWNhdGUoY2VydGlmaWNhdGVJbmZvKTsKKyAgICBtX2NsaWVudC0+c2hvd0NlcnRp
ZmljYXRlKCpjZXJ0aWZpY2F0ZUluZm8pOwogICAgIHJldHVybiB0cnVlOwogfQogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rvck5ldHdvcmtBZ2VudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JO
ZXR3b3JrQWdlbnQuY3BwCShyZXZpc2lvbiAyNTk4OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvYWdlbnRzL0luc3BlY3Rvck5ldHdvcmtBZ2VudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTk2OSw3ICs5NjksNyBAQCB2b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6Z2V0U2VyaWFsaXpl
CiAgICAgfQogCiAgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2RlciBlbmNvZGVyOwotICAgIGVu
Y29kZXIgPDwgY2VydGlmaWNhdGUudmFsdWUoKTsKKyAgICBXVEY6OlBlcnNpc3RlbmNlOjpDb2Rl
cjxXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8+OjplbmNvZGUoZW5jb2RlciwgY2VydGlmaWNhdGUu
dmFsdWUoKSk7CiAgICAgKnNlcmlhbGl6ZWRDZXJ0aWZpY2F0ZSA9IGJhc2U2NEVuY29kZShlbmNv
ZGVyLmJ1ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNpemUoKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2xvYWRlci9GZXRjaE9wdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvRmV0Y2hPcHRpb25zLmgJKHJldmlzaW9uIDI1OTg5OCkKKysrIFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9GZXRjaE9wdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTY3LDcgKzE2Nyw4
IEBAIHRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6RmUKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiBpbmxpbmUgdm9pZCBGZXRjaE9w
dGlvbnM6OmVuY29kZVBlcnNpc3RlbnQoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3RlbXBsYXRl
PGNsYXNzIEVuY29kZXI+CitpbmxpbmUgdm9pZCBGZXRjaE9wdGlvbnM6OmVuY29kZVBlcnNpc3Rl
bnQoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIHsKICAgICAvLyBDaGFuZ2VzIHRvIGVuY29kaW5n
IGhlcmUgc2hvdWxkIGJ1bXAgTmV0d29ya0NhY2hlIFN0b3JhZ2UgZm9ybWF0IHZlcnNpb24uCiAg
ICAgZW5jb2RlciA8PCBkZXN0aW5hdGlvbjsKQEAgLTE4MCw1OSArMTgxLDcwIEBAIHRlbXBsYXRl
PGNsYXNzIEVuY29kZXI+IGlubGluZSB2b2lkIEZldGMKICAgICBlbmNvZGVyIDw8IGtlZXBBbGl2
ZTsKIH0KIAotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gaW5saW5lIGJvb2wgRmV0Y2hPcHRpb25z
OjpkZWNvZGVQZXJzaXN0ZW50KERlY29kZXImIGRlY29kZXIsIEZldGNoT3B0aW9ucyYgb3B0aW9u
cykKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+CitpbmxpbmUgV0FSTl9VTlVTRURfUkVUVVJOIGJv
b2wgRmV0Y2hPcHRpb25zOjpkZWNvZGVQZXJzaXN0ZW50KERlY29kZXImIGRlY29kZXIsIEZldGNo
T3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBGZXRjaE9wdGlvbnM6OkRlc3RpbmF0aW9uIGRlc3Rp
bmF0aW9uOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoZGVzdGluYXRpb24pKQorICAgIE9wdGlv
bmFsPEZldGNoT3B0aW9uczo6RGVzdGluYXRpb24+IGRlc3RpbmF0aW9uOworICAgIGRlY29kZXIg
Pj4gZGVzdGluYXRpb247CisgICAgaWYgKCFkZXN0aW5hdGlvbikKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgRmV0Y2hPcHRpb25zOjpNb2RlIG1vZGU7Ci0gICAgaWYgKCFkZWNvZGVyLmRl
Y29kZShtb2RlKSkKKyAgICBPcHRpb25hbDxGZXRjaE9wdGlvbnM6Ok1vZGU+IG1vZGU7CisgICAg
ZGVjb2RlciA+PiBtb2RlOworICAgIGlmICghbW9kZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgRmV0Y2hPcHRpb25zOjpDcmVkZW50aWFscyBjcmVkZW50aWFsczsKLSAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKGNyZWRlbnRpYWxzKSkKKyAgICBPcHRpb25hbDxGZXRjaE9wdGlvbnM6OkNy
ZWRlbnRpYWxzPiBjcmVkZW50aWFsczsKKyAgICBkZWNvZGVyID4+IGNyZWRlbnRpYWxzOworICAg
IGlmICghY3JlZGVudGlhbHMpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEZldGNoT3B0
aW9uczo6Q2FjaGUgY2FjaGU7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShjYWNoZSkpCisgICAg
T3B0aW9uYWw8RmV0Y2hPcHRpb25zOjpDYWNoZT4gY2FjaGU7CisgICAgZGVjb2RlciA+PiBjYWNo
ZTsKKyAgICBpZiAoIWNhY2hlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBGZXRjaE9w
dGlvbnM6OlJlZGlyZWN0IHJlZGlyZWN0OwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVkaXJl
Y3QpKQorICAgIE9wdGlvbmFsPEZldGNoT3B0aW9uczo6UmVkaXJlY3Q+IHJlZGlyZWN0OworICAg
IGRlY29kZXIgPj4gcmVkaXJlY3Q7CisgICAgaWYgKCFyZWRpcmVjdCkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgUmVmZXJyZXJQb2xpY3kgcmVmZXJyZXJQb2xpY3k7Ci0gICAgaWYgKCFk
ZWNvZGVyLmRlY29kZShyZWZlcnJlclBvbGljeSkpCisgICAgT3B0aW9uYWw8UmVmZXJyZXJQb2xp
Y3k+IHJlZmVycmVyUG9saWN5OworICAgIGRlY29kZXIgPj4gcmVmZXJyZXJQb2xpY3k7CisgICAg
aWYgKCFyZWZlcnJlclBvbGljeSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgU3RyaW5n
IGludGVncml0eTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGludGVncml0eSkpCisgICAgT3B0
aW9uYWw8U3RyaW5nPiBpbnRlZ3JpdHk7CisgICAgZGVjb2RlciA+PiBpbnRlZ3JpdHk7CisgICAg
aWYgKCFpbnRlZ3JpdHkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGJvb2wga2VlcEFs
aXZlOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoa2VlcEFsaXZlKSkKKyAgICBPcHRpb25hbDxi
b29sPiBrZWVwQWxpdmU7CisgICAgZGVjb2RlciA+PiBrZWVwQWxpdmU7CisgICAgaWYgKCFrZWVw
QWxpdmUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIG9wdGlvbnMuZGVzdGluYXRpb24g
PSBkZXN0aW5hdGlvbjsKLSAgICBvcHRpb25zLm1vZGUgPSBtb2RlOwotICAgIG9wdGlvbnMuY3Jl
ZGVudGlhbHMgPSBjcmVkZW50aWFsczsKLSAgICBvcHRpb25zLmNhY2hlID0gY2FjaGU7Ci0gICAg
b3B0aW9ucy5yZWRpcmVjdCA9IHJlZGlyZWN0OwotICAgIG9wdGlvbnMucmVmZXJyZXJQb2xpY3kg
PSByZWZlcnJlclBvbGljeTsKLSAgICBvcHRpb25zLmludGVncml0eSA9IFdURk1vdmUoaW50ZWdy
aXR5KTsKLSAgICBvcHRpb25zLmtlZXBBbGl2ZSA9IGtlZXBBbGl2ZTsKKyAgICBvcHRpb25zLmRl
c3RpbmF0aW9uID0gKmRlc3RpbmF0aW9uOworICAgIG9wdGlvbnMubW9kZSA9ICptb2RlOworICAg
IG9wdGlvbnMuY3JlZGVudGlhbHMgPSAqY3JlZGVudGlhbHM7CisgICAgb3B0aW9ucy5jYWNoZSA9
ICpjYWNoZTsKKyAgICBvcHRpb25zLnJlZGlyZWN0ID0gKnJlZGlyZWN0OworICAgIG9wdGlvbnMu
cmVmZXJyZXJQb2xpY3kgPSAqcmVmZXJyZXJQb2xpY3k7CisgICAgb3B0aW9ucy5pbnRlZ3JpdHkg
PSBXVEZNb3ZlKCppbnRlZ3JpdHkpOworICAgIG9wdGlvbnMua2VlcEFsaXZlID0gKmtlZXBBbGl2
ZTsKIAogICAgIHJldHVybiB0cnVlOwogfQogCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiBpbmxp
bmUgdm9pZCBGZXRjaE9wdGlvbnM6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAordGVt
cGxhdGU8Y2xhc3MgRW5jb2Rlcj4KK2lubGluZSB2b2lkIEZldGNoT3B0aW9uczo6ZW5jb2RlKEVu
Y29kZXImIGVuY29kZXIpIGNvbnN0CiB7CiAgICAgZW5jb2RlUGVyc2lzdGVudChlbmNvZGVyKTsK
ICAgICBlbmNvZGVyIDw8IGNsaWVudElkZW50aWZpZXIuYXNPcHRpb25hbCgpOwogfQogCi10ZW1w
bGF0ZTxjbGFzcyBEZWNvZGVyPiBpbmxpbmUgT3B0aW9uYWw8RmV0Y2hPcHRpb25zPiBGZXRjaE9w
dGlvbnM6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4K
K2lubGluZSBPcHRpb25hbDxGZXRjaE9wdGlvbnM+IEZldGNoT3B0aW9uczo6ZGVjb2RlKERlY29k
ZXImIGRlY29kZXIpCiB7CiAgICAgRmV0Y2hPcHRpb25zIG9wdGlvbnM7CiAgICAgaWYgKCFkZWNv
ZGVQZXJzaXN0ZW50KGRlY29kZXIsIG9wdGlvbnMpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFn
ZS9TZWN1cml0eU9yaWdpbkRhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdl
L1NlY3VyaXR5T3JpZ2luRGF0YS5oCShyZXZpc2lvbiAyNTk4OTgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wYWdlL1NlY3VyaXR5T3JpZ2luRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTUsMTEgKzEx
NSwxMiBAQCBPcHRpb25hbDxTZWN1cml0eU9yaWdpbkRhdGE+IFNlY3VyaXR5T3JpCiAgICAgaWYg
KCFob3N0KQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIAotICAgIE9wdGlvbmFs
PHVpbnQxNl90PiBwb3J0OwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocG9ydCkpCisgICAgT3B0
aW9uYWw8T3B0aW9uYWw8dWludDE2X3Q+PiBwb3J0OworICAgIGRlY29kZXIgPj4gcG9ydDsKKyAg
ICBpZiAoIXBvcnQpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgCi0gICAgU2Vj
dXJpdHlPcmlnaW5EYXRhIGRhdGEgeyBXVEZNb3ZlKCpwcm90b2NvbCksIFdURk1vdmUoKmhvc3Qp
LCBXVEZNb3ZlKHBvcnQpIH07CisgICAgU2VjdXJpdHlPcmlnaW5EYXRhIGRhdGEgeyBXVEZNb3Zl
KCpwcm90b2NvbCksIFdURk1vdmUoKmhvc3QpLCBXVEZNb3ZlKCpwb3J0KSB9OwogICAgIGlmIChk
YXRhLmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGlj
eVJlc3BvbnNlSGVhZGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvY3Nw
L0NvbnRlbnRTZWN1cml0eVBvbGljeVJlc3BvbnNlSGVhZGVycy5oCShyZXZpc2lvbiAyNTk4OTgp
CisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lSZXNwb25z
ZUhlYWRlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiBjbGFzcyBDb250ZW50U2VjdXJpdHlQb2xpY3k7CiBjbGFzcyBSZXNvdXJjZVJlc3Bv
bnNlOwogCi1lbnVtIGNsYXNzIENvbnRlbnRTZWN1cml0eVBvbGljeUhlYWRlclR5cGUgeworZW51
bSBjbGFzcyBDb250ZW50U2VjdXJpdHlQb2xpY3lIZWFkZXJUeXBlIDogYm9vbCB7CiAgICAgUmVw
b3J0LAogICAgIEVuZm9yY2UsCiB9OwpAQCAtNDYsNyArNDYsNyBAQCBwdWJsaWM6CiAgICAgQ29u
dGVudFNlY3VyaXR5UG9saWN5UmVzcG9uc2VIZWFkZXJzIGlzb2xhdGVkQ29weSgpIGNvbnN0Owog
CiAgICAgdGVtcGxhdGUgPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25z
dDsKLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIGJvb2wgZGVjb2RlKERlY29k
ZXImLCBDb250ZW50U2VjdXJpdHlQb2xpY3lSZXNwb25zZUhlYWRlcnMmKTsKKyAgICB0ZW1wbGF0
ZSA8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPENvbnRlbnRTZWN1cml0eVBvbGljeVJl
c3BvbnNlSGVhZGVycz4gZGVjb2RlKERlY29kZXImKTsKIAogICAgIGVudW0gRW1wdHlUYWcgeyBF
bXB0eSB9OwogICAgIHN0cnVjdCBNYXJrYWJsZVRyYWl0cyB7CkBAIC03OCwzMiArNzgsNDAgQEAg
dm9pZCBDb250ZW50U2VjdXJpdHlQb2xpY3lSZXNwb25zZUhlYWRlcgogICAgIGVuY29kZXIgPDwg
c3RhdGljX2Nhc3Q8dWludDY0X3Q+KG1faGVhZGVycy5zaXplKCkpOwogICAgIGZvciAoYXV0byYg
cGFpciA6IG1faGVhZGVycykgewogICAgICAgICBlbmNvZGVyIDw8IHBhaXIuZmlyc3Q7Ci0gICAg
ICAgIGVuY29kZXIuZW5jb2RlRW51bShwYWlyLnNlY29uZCk7CisgICAgICAgIGVuY29kZXIgPDwg
cGFpci5zZWNvbmQ7CiAgICAgfQogICAgIGVuY29kZXIgPDwgbV9odHRwU3RhdHVzQ29kZTsKIH0K
IAogdGVtcGxhdGUgPGNsYXNzIERlY29kZXI+Ci1ib29sIENvbnRlbnRTZWN1cml0eVBvbGljeVJl
c3BvbnNlSGVhZGVyczo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIENvbnRlbnRTZWN1cml0eVBv
bGljeVJlc3BvbnNlSGVhZGVycyYgaGVhZGVycykKK09wdGlvbmFsPENvbnRlbnRTZWN1cml0eVBv
bGljeVJlc3BvbnNlSGVhZGVycz4gQ29udGVudFNlY3VyaXR5UG9saWN5UmVzcG9uc2VIZWFkZXJz
OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIHsKLSAgICB1aW50NjRfdCBoZWFkZXJzU2l6ZTsK
LSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGhlYWRlcnNTaXplKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaGVhZGVyc1NpemU7ICsraSkgewotICAg
ICAgICBTdHJpbmcgaGVhZGVyOwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGhlYWRlcikp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIENvbnRlbnRTZWN1cml0eVBvbGlj
eUhlYWRlclR5cGUgaGVhZGVyVHlwZTsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZUVudW0o
aGVhZGVyVHlwZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGhlYWRlcnMu
bV9oZWFkZXJzLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihoZWFkZXIsIGhlYWRlclR5cGUpKTsKKyAg
ICBDb250ZW50U2VjdXJpdHlQb2xpY3lSZXNwb25zZUhlYWRlcnMgaGVhZGVyczsKKworICAgIE9w
dGlvbmFsPHVpbnQ2NF90PiBoZWFkZXJzU2l6ZTsKKyAgICBkZWNvZGVyID4+IGhlYWRlcnNTaXpl
OworICAgIGlmICghaGVhZGVyc1NpemUpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAqaGVhZGVyc1NpemU7ICsraSkgeworICAgICAgICBP
cHRpb25hbDxTdHJpbmc+IGhlYWRlcjsKKyAgICAgICAgZGVjb2RlciA+PiBoZWFkZXI7CisgICAg
ICAgIGlmICghaGVhZGVyKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAg
ICAgT3B0aW9uYWw8Q29udGVudFNlY3VyaXR5UG9saWN5SGVhZGVyVHlwZT4gaGVhZGVyVHlwZTsK
KyAgICAgICAgZGVjb2RlciA+PiBoZWFkZXJUeXBlOworICAgICAgICBpZiAoIWhlYWRlclR5cGUp
CisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICBoZWFkZXJzLm1faGVh
ZGVycy5hcHBlbmQoc3RkOjptYWtlX3BhaXIoV1RGTW92ZSgqaGVhZGVyKSwgV1RGTW92ZSgqaGVh
ZGVyVHlwZSkpKTsKICAgICB9CiAgICAgaGVhZGVycy5tX2hlYWRlcnMuc2hyaW5rVG9GaXQoKTsK
IAotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaGVhZGVycy5tX2h0dHBTdGF0dXNDb2RlKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIE9wdGlvbmFsPGludD4gaHR0cFN0YXR1c0NvZGU7Cisg
ICAgZGVjb2RlciA+PiBodHRwU3RhdHVzQ29kZTsKKyAgICBpZiAoIWh0dHBTdGF0dXNDb2RlKQor
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIGhlYWRlcnMubV9odHRwU3RhdHVzQ29k
ZSA9ICpodHRwU3RhdHVzQ29kZTsKIAotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBXVEZN
b3ZlKGhlYWRlcnMpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9QYXN0ZWJvYXJkQ3VzdG9tRGF0YS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGFzdGVib2FyZEN1c3RvbURhdGEuY3BwCShyZXZpc2lv
biAyNTk4OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QYXN0ZWJvYXJkQ3VzdG9tRGF0
YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk4LDIzICs5OCwyOSBAQCBQYXN0ZWJvYXJkQ3VzdG9t
RGF0YSBQYXN0ZWJvYXJkQ3VzdG9tRGF0CiAKICAgICBQYXN0ZWJvYXJkQ3VzdG9tRGF0YSByZXN1
bHQ7CiAgICAgYXV0byBkZWNvZGVyID0gYnVmZmVyLmRlY29kZXIoKTsKLSAgICB1bnNpZ25lZCB2
ZXJzaW9uOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUodmVyc2lvbikgfHwgdmVyc2lvbiA+IG1h
eFN1cHBvcnRlZERhdGFTZXJpYWxpemF0aW9uVmVyc2lvbk51bWJlcikKKyAgICBPcHRpb25hbDx1
bnNpZ25lZD4gdmVyc2lvbjsKKyAgICBkZWNvZGVyID4+IHZlcnNpb247CisgICAgaWYgKCF2ZXJz
aW9uIHx8ICp2ZXJzaW9uID4gbWF4U3VwcG9ydGVkRGF0YVNlcmlhbGl6YXRpb25WZXJzaW9uTnVt
YmVyKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1
bHQubV9vcmlnaW4pKQorICAgIE9wdGlvbmFsPFN0cmluZz4gb3JpZ2luOworICAgIGRlY29kZXIg
Pj4gb3JpZ2luOworICAgIGlmICghb3JpZ2luKQogICAgICAgICByZXR1cm4geyB9OworICAgIHJl
c3VsdC5tX29yaWdpbiA9IFdURk1vdmUoKm9yaWdpbik7CiAKLSAgICBIYXNoTWFwPFN0cmluZywg
U3RyaW5nPiBzYW1lT3JpZ2luQ3VzdG9tU3RyaW5nRGF0YTsKLSAgICBpZiAoIWRlY29kZXIuZGVj
b2RlKHNhbWVPcmlnaW5DdXN0b21TdHJpbmdEYXRhKSkKKyAgICBPcHRpb25hbDxIYXNoTWFwPFN0
cmluZywgU3RyaW5nPj4gc2FtZU9yaWdpbkN1c3RvbVN0cmluZ0RhdGE7CisgICAgZGVjb2RlciA+
PiBzYW1lT3JpZ2luQ3VzdG9tU3RyaW5nRGF0YTsKKyAgICBpZiAoIXNhbWVPcmlnaW5DdXN0b21T
dHJpbmdEYXRhKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgVmVjdG9yPFN0cmluZz4gb3Jk
ZXJlZFR5cGVzOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUob3JkZXJlZFR5cGVzKSkKKyAgICBP
cHRpb25hbDxWZWN0b3I8U3RyaW5nPj4gb3JkZXJlZFR5cGVzOworICAgIGRlY29kZXIgPj4gb3Jk
ZXJlZFR5cGVzOworICAgIGlmICghb3JkZXJlZFR5cGVzKQogICAgICAgICByZXR1cm4geyB9Owog
Ci0gICAgZm9yIChhdXRvJiB0eXBlIDogb3JkZXJlZFR5cGVzKQotICAgICAgICByZXN1bHQud3Jp
dGVTdHJpbmdJbkN1c3RvbURhdGEodHlwZSwgc2FtZU9yaWdpbkN1c3RvbVN0cmluZ0RhdGEuZ2V0
KHR5cGUpKTsKKyAgICBmb3IgKGF1dG8mIHR5cGUgOiAqb3JkZXJlZFR5cGVzKQorICAgICAgICBy
ZXN1bHQud3JpdGVTdHJpbmdJbkN1c3RvbURhdGEodHlwZSwgc2FtZU9yaWdpbkN1c3RvbVN0cmlu
Z0RhdGEtPmdldCh0eXBlKSk7CiAKICAgICByZXR1cm4gcmVzdWx0OwogfQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ2VuZXJpYy9LZXllZERlY29kZXJHZW5lcmljLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nZW5lcmljL0tleWVkRGVjb2RlckdlbmVy
aWMuY3BwCShyZXZpc2lvbiAyNTk4OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nZW5l
cmljL0tleWVkRGVjb2RlckdlbmVyaWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCw0MCArNDgs
MzYgQEAgcHJpdmF0ZToKICAgICBIYXNoTWFwPFN0cmluZywgc3RkOjp1bmlxdWVfcHRyPE5vZGU+
PiBtX21hcDsKIH07CiAKLXN0YXRpYyBib29sIHJlYWRTdHJpbmcoV1RGOjpQZXJzaXN0ZW5jZTo6
RGVjb2RlciYgZGVjb2RlciwgU3RyaW5nJiByZXN1bHQpCitzdGF0aWMgT3B0aW9uYWw8U3RyaW5n
PiByZWFkU3RyaW5nKFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXImIGRlY29kZXIpCiB7Ci0gICAg
c2l6ZV90IHNpemU7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShzaXplKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIGlmICghc2l6ZSkgewotICAgICAgICByZXN1bHQgPSBlbXB0eVN0cmlu
ZygpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAoIWRlY29kZXIuYnVm
ZmVySXNMYXJnZUVub3VnaFRvQ29udGFpbjx1aW50OF90PihzaXplKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIFZlY3Rvcjx1aW50OF90PiBidWZmZXIoc2l6ZSk7Ci0gICAgaWYgKCFkZWNv
ZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShidWZmZXIuZGF0YSgpLCBzaXplKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIHJlc3VsdCA9IFN0cmluZzo6ZnJvbVVURjgoYnVmZmVyLmRhdGEo
KSwgc2l6ZSk7CisgICAgT3B0aW9uYWw8c2l6ZV90PiBzaXplOworICAgIGRlY29kZXIgPj4gc2l6
ZTsKKyAgICBpZiAoIXNpemUpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgaWYg
KCFzaXplLnZhbHVlKCkpCisgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOworCisgICAgVmVj
dG9yPHVpbnQ4X3Q+IGJ1ZmZlcihzaXplLnZhbHVlKCkpOworICAgIGlmICghZGVjb2Rlci5kZWNv
ZGVGaXhlZExlbmd0aERhdGEoYnVmZmVyLmRhdGEoKSwgc2l6ZS52YWx1ZSgpKSkKKyAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBhdXRvIHJlc3VsdCA9IFN0cmluZzo6ZnJvbVVURjgo
YnVmZmVyLmRhdGEoKSwgc2l6ZS52YWx1ZSgpKTsKICAgICBpZiAocmVzdWx0LmlzTnVsbCgpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAg
ICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgogc3RhdGljIGJvb2wgcmVhZFNpbXBsZVZhbHVlKFdURjo6UGVyc2lzdGVuY2U6OkRlY29k
ZXImIGRlY29kZXIsIEtleWVkRGVjb2RlckdlbmVyaWM6OkRpY3Rpb25hcnkmIGRpY3Rpb25hcnkp
CiB7Ci0gICAgU3RyaW5nIGtleTsKLSAgICBib29sIG9rID0gcmVhZFN0cmluZyhkZWNvZGVyLCBr
ZXkpOwotICAgIGlmICghb2spCisgICAgYXV0byBrZXkgPSByZWFkU3RyaW5nKGRlY29kZXIpOwor
ICAgIGlmICgha2V5KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgVCB2YWx1ZTsKLSAgICBv
ayA9IGRlY29kZXIuZGVjb2RlKHZhbHVlKTsKLSAgICBpZiAoIW9rKQorICAgIE9wdGlvbmFsPFQ+
IHZhbHVlOworICAgIGRlY29kZXIgPj4gdmFsdWU7CisgICAgaWYgKCF2YWx1ZSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIGRpY3Rpb25hcnkuYWRkKGtleSwgV1RGTW92ZSh2YWx1ZSkpOwor
ICAgIGRpY3Rpb25hcnkuYWRkKGtleS52YWx1ZSgpLCBXVEZNb3ZlKHZhbHVlLnZhbHVlKCkpKTsK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtOTMsMzEgKzg5LDM4IEBAIHN0ZDo6dW5pcXVlX3B0
cjxLZXllZERlY29kZXI+IEtleWVkRGVjb2QKIEtleWVkRGVjb2RlckdlbmVyaWM6OktleWVkRGVj
b2RlckdlbmVyaWMoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpCiB7CiAgICAgV1RG
OjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyKGRhdGEsIHNpemUpOwotICAgIEtleWVkRW5j
b2RlckdlbmVyaWM6OlR5cGUgdHlwZTsKLSAgICBTdHJpbmcga2V5OwogCiAgICAgbV9yb290RGlj
dGlvbmFyeSA9IG1ha2VVbmlxdWU8RGljdGlvbmFyeT4oKTsKICAgICBtX2RpY3Rpb25hcnlTdGFj
ay5hcHBlbmQobV9yb290RGljdGlvbmFyeS5nZXQoKSk7CiAKICAgICBib29sIG9rID0gdHJ1ZTsK
LSAgICB3aGlsZSAob2sgJiYgZGVjb2Rlci5kZWNvZGVFbnVtKHR5cGUpKSB7Ci0gICAgICAgIHN3
aXRjaCAodHlwZSkgeworICAgIHdoaWxlIChvaykgeworICAgICAgICBPcHRpb25hbDxLZXllZEVu
Y29kZXJHZW5lcmljOjpUeXBlPiB0eXBlOworICAgICAgICBkZWNvZGVyID4+IHR5cGU7CisgICAg
ICAgIGlmICghdHlwZSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIHN3aXRjaCAoKnR5
cGUpIHsKICAgICAgICAgY2FzZSBLZXllZEVuY29kZXJHZW5lcmljOjpUeXBlOjpCeXRlczogewot
ICAgICAgICAgICAgb2sgPSByZWFkU3RyaW5nKGRlY29kZXIsIGtleSk7CisgICAgICAgICAgICBh
dXRvIGtleSA9IHJlYWRTdHJpbmcoZGVjb2Rlcik7CisgICAgICAgICAgICBpZiAoIWtleSkKKyAg
ICAgICAgICAgICAgICBvayA9IGZhbHNlOwogICAgICAgICAgICAgaWYgKCFvaykKICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIHNpemVfdCBzaXplOwotICAgICAgICAgICAgb2sg
PSBkZWNvZGVyLmRlY29kZShzaXplKTsKKyAgICAgICAgICAgIE9wdGlvbmFsPHNpemVfdD4gc2l6
ZTsKKyAgICAgICAgICAgIGRlY29kZXIgPj4gc2l6ZTsKKyAgICAgICAgICAgIGlmICghc2l6ZSkK
KyAgICAgICAgICAgICAgICBvayA9IGZhbHNlOwogICAgICAgICAgICAgaWYgKCFvaykKICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIG9rID0gZGVjb2Rlci5idWZmZXJJc0xhcmdl
RW5vdWdoVG9Db250YWluPHVpbnQ4X3Q+KHNpemUpOworICAgICAgICAgICAgb2sgPSBkZWNvZGVy
LmJ1ZmZlcklzTGFyZ2VFbm91Z2hUb0NvbnRhaW48dWludDhfdD4oKnNpemUpOwogICAgICAgICAg
ICAgaWYgKCFvaykKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIFZlY3Rvcjx1
aW50OF90PiBidWZmZXIoc2l6ZSk7Ci0gICAgICAgICAgICBvayA9IGRlY29kZXIuZGVjb2RlRml4
ZWRMZW5ndGhEYXRhKGJ1ZmZlci5kYXRhKCksIHNpemUpOworICAgICAgICAgICAgVmVjdG9yPHVp
bnQ4X3Q+IGJ1ZmZlcigqc2l6ZSk7CisgICAgICAgICAgICBvayA9IGRlY29kZXIuZGVjb2RlRml4
ZWRMZW5ndGhEYXRhKGJ1ZmZlci5kYXRhKCksICpzaXplKTsKICAgICAgICAgICAgIGlmICghb2sp
CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBtX2RpY3Rpb25hcnlTdGFjay5s
YXN0KCktPmFkZChrZXksIFdURk1vdmUoYnVmZmVyKSk7CisgICAgICAgICAgICBtX2RpY3Rpb25h
cnlTdGFjay5sYXN0KCktPmFkZCgqa2V5LCBXVEZNb3ZlKGJ1ZmZlcikpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBLZXllZEVuY29kZXJHZW5lcmljOjpUeXBl
OjpCb29sOgpAQCAtMTQyLDI0ICsxNDUsMjkgQEAgS2V5ZWREZWNvZGVyR2VuZXJpYzo6S2V5ZWRE
ZWNvZGVyR2VuZXJpYwogICAgICAgICAgICAgb2sgPSByZWFkU2ltcGxlVmFsdWU8ZG91YmxlPihk
ZWNvZGVyLCAqbV9kaWN0aW9uYXJ5U3RhY2subGFzdCgpKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBjYXNlIEtleWVkRW5jb2RlckdlbmVyaWM6OlR5cGU6OlN0cmluZzogewotICAgICAg
ICAgICAgb2sgPSByZWFkU3RyaW5nKGRlY29kZXIsIGtleSk7CisgICAgICAgICAgICBhdXRvIGtl
eSA9IHJlYWRTdHJpbmcoZGVjb2Rlcik7CisgICAgICAgICAgICBpZiAoIWtleSkKKyAgICAgICAg
ICAgICAgICBvayA9IGZhbHNlOwogICAgICAgICAgICAgaWYgKCFvaykKICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIFN0cmluZyB2YWx1ZTsKLSAgICAgICAgICAgIG9rID0gcmVh
ZFN0cmluZyhkZWNvZGVyLCB2YWx1ZSk7CisgICAgICAgICAgICBhdXRvIHZhbHVlID0gcmVhZFN0
cmluZyhkZWNvZGVyKTsKKyAgICAgICAgICAgIGlmICghdmFsdWUpCisgICAgICAgICAgICAgICAg
b2sgPSBmYWxzZTsKICAgICAgICAgICAgIGlmICghb2spCiAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICBtX2RpY3Rpb25hcnlTdGFjay5sYXN0KCktPmFkZChrZXksIFdURk1vdmUo
dmFsdWUpKTsKKyAgICAgICAgICAgIG1fZGljdGlvbmFyeVN0YWNrLmxhc3QoKS0+YWRkKCprZXks
IFdURk1vdmUoKnZhbHVlKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAg
ICBjYXNlIEtleWVkRW5jb2RlckdlbmVyaWM6OlR5cGU6OkJlZ2luT2JqZWN0OiB7Ci0gICAgICAg
ICAgICBvayA9IHJlYWRTdHJpbmcoZGVjb2Rlciwga2V5KTsKKyAgICAgICAgICAgIGF1dG8ga2V5
ID0gcmVhZFN0cmluZyhkZWNvZGVyKTsKKyAgICAgICAgICAgIGlmICgha2V5KQorICAgICAgICAg
ICAgICAgIG9rID0gZmFsc2U7CiAgICAgICAgICAgICBpZiAoIW9rKQogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgYXV0byogY3VycmVudERpY3RpbmFyeSA9IG1fZGljdGlvbmFy
eVN0YWNrLmxhc3QoKTsKICAgICAgICAgICAgIGF1dG8gbmV3RGljdGlvbmFyeSA9IG1ha2VVbmlx
dWU8RGljdGlvbmFyeT4oKTsKICAgICAgICAgICAgIG1fZGljdGlvbmFyeVN0YWNrLmFwcGVuZChu
ZXdEaWN0aW9uYXJ5LmdldCgpKTsKLSAgICAgICAgICAgIGN1cnJlbnREaWN0aW5hcnktPmFkZChr
ZXksIFdURk1vdmUobmV3RGljdGlvbmFyeSkpOworICAgICAgICAgICAgY3VycmVudERpY3RpbmFy
eS0+YWRkKCprZXksIFdURk1vdmUobmV3RGljdGlvbmFyeSkpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBLZXllZEVuY29kZXJHZW5lcmljOjpUeXBlOjpFbmRP
YmplY3Q6CkBAIC0xNjgsMTIgKzE3NiwxNCBAQCBLZXllZERlY29kZXJHZW5lcmljOjpLZXllZERl
Y29kZXJHZW5lcmljCiAgICAgICAgICAgICAgICAgb2sgPSBmYWxzZTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBjYXNlIEtleWVkRW5jb2RlckdlbmVyaWM6OlR5cGU6OkJlZ2luQXJyYXk6
IHsKLSAgICAgICAgICAgIG9rID0gcmVhZFN0cmluZyhkZWNvZGVyLCBrZXkpOworICAgICAgICAg
ICAgYXV0byBrZXkgPSByZWFkU3RyaW5nKGRlY29kZXIpOworICAgICAgICAgICAgaWYgKCFrZXkp
CisgICAgICAgICAgICAgICAgb2sgPSBmYWxzZTsKICAgICAgICAgICAgIGlmICghb2spCiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBhdXRvIG5ld0FycmF5ID0gbWFrZVVuaXF1
ZTxBcnJheT4oKTsKICAgICAgICAgICAgIG1fYXJyYXlTdGFjay5hcHBlbmQobmV3QXJyYXkuZ2V0
KCkpOwotICAgICAgICAgICAgbV9kaWN0aW9uYXJ5U3RhY2subGFzdCgpLT5hZGQoa2V5LCBXVEZN
b3ZlKG5ld0FycmF5KSk7CisgICAgICAgICAgICBtX2RpY3Rpb25hcnlTdGFjay5sYXN0KCktPmFk
ZCgqa2V5LCBXVEZNb3ZlKG5ld0FycmF5KSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgICAgICBjYXNlIEtleWVkRW5jb2RlckdlbmVyaWM6OlR5cGU6OkJlZ2luQXJyYXlFbGVt
ZW50OiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL05ldHdvcmtMb2Fk
TWV0cmljcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
TmV0d29ya0xvYWRNZXRyaWNzLmgJKHJldmlzaW9uIDI1OTg5OCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvTmV0d29ya0xvYWRNZXRyaWNzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTMwLDggKzMwLDcgQEAKICNpbmNsdWRlIDx3dGYvQm94Lmg+CiAjaW5jbHVkZSA8d3RmL09wdGlv
bmFsLmg+CiAjaW5jbHVkZSA8d3RmL1NlY29uZHMuaD4KLSNpbmNsdWRlIDx3dGYvcGVyc2lzdGVu
Y2UvUGVyc2lzdGVudERlY29kZXIuaD4KLSNpbmNsdWRlIDx3dGYvcGVyc2lzdGVuY2UvUGVyc2lz
dGVudEVuY29kZXIuaD4KKyNpbmNsdWRlIDx3dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudENvZGVy
Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKICNpZiBQTEFURk9STShDT0NP
QSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VMb2FkUHJp
b3JpdHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jl
c291cmNlTG9hZFByaW9yaXR5LmgJKHJldmlzaW9uIDI1OTg5OCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VMb2FkUHJpb3JpdHkuaAkod29ya2luZyBjb3B5KQpA
QCAtMjMsOCArMjMsNyBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICov
CiAKLSNpZm5kZWYgUmVzb3VyY2VMb2FkUHJpb3JpdHlfaAotI2RlZmluZSBSZXNvdXJjZUxvYWRQ
cmlvcml0eV9oCisjcHJhZ21hIG9uY2UKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC01NCw3
ICs1MywxOSBAQCBpbmxpbmUgUmVzb3VyY2VMb2FkUHJpb3JpdHkmIG9wZXJhdG9yLS0oCiAgICAg
cmV0dXJuIHByaW9yaXR5ID0gc3RhdGljX2Nhc3Q8UmVzb3VyY2VMb2FkUHJpb3JpdHk+KHN0YXRp
Y19jYXN0PGludD4ocHJpb3JpdHkpIC0gMSk7CiB9CiAKLX0KK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworbmFtZXNwYWNlIFdURiB7CiAKLSNlbmRpZgordGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRy
YWl0czxXZWJDb3JlOjpSZXNvdXJjZUxvYWRQcmlvcml0eT4geworICAgIHVzaW5nIHZhbHVlcyA9
IEVudW1WYWx1ZXM8CisgICAgICAgIFdlYkNvcmU6OlJlc291cmNlTG9hZFByaW9yaXR5LAorICAg
ICAgICBXZWJDb3JlOjpSZXNvdXJjZUxvYWRQcmlvcml0eTo6VmVyeUxvdywKKyAgICAgICAgV2Vi
Q29yZTo6UmVzb3VyY2VMb2FkUHJpb3JpdHk6OkxvdywKKyAgICAgICAgV2ViQ29yZTo6UmVzb3Vy
Y2VMb2FkUHJpb3JpdHk6Ok1lZGl1bSwKKyAgICAgICAgV2ViQ29yZTo6UmVzb3VyY2VMb2FkUHJp
b3JpdHk6OkhpZ2gsCisgICAgICAgIFdlYkNvcmU6OlJlc291cmNlTG9hZFByaW9yaXR5OjpWZXJ5
SGlnaAorICAgID47Cit9OwogCit9IC8vIG5hbWVzcGFjZSBXVEYKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5oCShy
ZXZpc2lvbiAyNTk4OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291
cmNlUmVxdWVzdEJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsMTQgKzI1LDE0IEBACiAgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgUmVzb3VyY2VSZXF1ZXN0QmFzZV9oCi0jZGVmaW5l
IFJlc291cmNlUmVxdWVzdEJhc2VfaAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJGb3JtRGF0
YS5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyVHlwZXMuaCIKICNpbmNsdWRlICJIVFRQSGVhZGVy
TWFwLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIlJlc291cmNlTG9hZFByaW9y
aXR5LmgiCisjaW5jbHVkZSA8d3RmL0VudW1UcmFpdHMuaD4KICNpbmNsdWRlIDx3dGYvVVJMLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTI4Myw2NCArMjgzLDg4IEBAIEFMV0FZU19JTkxJ
TkUgdm9pZCBSZXNvdXJjZVJlcXVlc3RCYXNlOjoKICAgICBlbmNvZGVyIDw8IG1faHR0cE1ldGhv
ZDsKICAgICBlbmNvZGVyIDw8IG1faHR0cEhlYWRlckZpZWxkczsKICAgICBlbmNvZGVyIDw8IG1f
cmVzcG9uc2VDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJyYXk7Ci0gICAgZW5j
b2Rlci5lbmNvZGVFbnVtKG1fY2FjaGVQb2xpY3kpOworICAgIGVuY29kZXIgPDwgbV9jYWNoZVBv
bGljeTsKICAgICBlbmNvZGVyIDw8IG1fYWxsb3dDb29raWVzOwotICAgIGVuY29kZXIuZW5jb2Rl
RW51bShtX3NhbWVTaXRlRGlzcG9zaXRpb24pOworICAgIGVuY29kZXIgPDwgbV9zYW1lU2l0ZURp
c3Bvc2l0aW9uOwogICAgIGVuY29kZXIgPDwgbV9pc1RvcFNpdGU7Ci0gICAgZW5jb2Rlci5lbmNv
ZGVFbnVtKG1fcHJpb3JpdHkpOwotICAgIGVuY29kZXIuZW5jb2RlRW51bShtX3JlcXVlc3Rlcik7
CisgICAgZW5jb2RlciA8PCBtX3ByaW9yaXR5OworICAgIGVuY29kZXIgPDwgbV9yZXF1ZXN0ZXI7
CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+CiBBTFdBWVNfSU5MSU5FIGJvb2wgUmVzb3Vy
Y2VSZXF1ZXN0QmFzZTo6ZGVjb2RlQmFzZShEZWNvZGVyJiBkZWNvZGVyKQogewotICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUobV91cmwpKQorICAgIE9wdGlvbmFsPFVSTD4gdXJsOworICAgIGRlY29k
ZXIgPj4gdXJsOworICAgIGlmICghdXJsKQogICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgbV91
cmwgPSBXVEZNb3ZlKCp1cmwpOwogCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShtX3RpbWVvdXRJ
bnRlcnZhbCkpCisgICAgT3B0aW9uYWw8ZG91YmxlPiB0aW1lb3V0SW50ZXJ2YWw7CisgICAgZGVj
b2RlciA+PiB0aW1lb3V0SW50ZXJ2YWw7CisgICAgaWYgKCF0aW1lb3V0SW50ZXJ2YWwpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBtX3RpbWVvdXRJbnRlcnZhbCA9IFdURk1vdmUoKnRpbWVv
dXRJbnRlcnZhbCk7CiAKLSAgICBTdHJpbmcgZmlyc3RQYXJ0eUZvckNvb2tpZXM7Ci0gICAgaWYg
KCFkZWNvZGVyLmRlY29kZShmaXJzdFBhcnR5Rm9yQ29va2llcykpCisgICAgT3B0aW9uYWw8U3Ry
aW5nPiBmaXJzdFBhcnR5Rm9yQ29va2llczsKKyAgICBkZWNvZGVyID4+IGZpcnN0UGFydHlGb3JD
b29raWVzOworICAgIGlmICghZmlyc3RQYXJ0eUZvckNvb2tpZXMpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBtX2ZpcnN0UGFydHlGb3JDb29raWVzID0gVVJMKHsgfSwgZmlyc3RQYXJ0eUZv
ckNvb2tpZXMpOworICAgIG1fZmlyc3RQYXJ0eUZvckNvb2tpZXMgPSBVUkwoeyB9LCAqZmlyc3RQ
YXJ0eUZvckNvb2tpZXMpOwogCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShtX2h0dHBNZXRob2Qp
KQorICAgIE9wdGlvbmFsPFN0cmluZz4gaHR0cE1ldGhvZDsKKyAgICBkZWNvZGVyID4+IGh0dHBN
ZXRob2Q7CisgICAgaWYgKCFodHRwTWV0aG9kKQogICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
bV9odHRwTWV0aG9kID0gV1RGTW92ZSgqaHR0cE1ldGhvZCk7CiAKLSAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlKG1faHR0cEhlYWRlckZpZWxkcykpCisgICAgT3B0aW9uYWw8SFRUUEhlYWRlck1hcD4g
ZmllbGRzOworICAgIGRlY29kZXIgPj4gZmllbGRzOworICAgIGlmICghZmllbGRzKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgbV9odHRwSGVhZGVyRmllbGRzID0gV1RGTW92ZSgqZmllbGRz
KTsKIAotICAgIGlmICghZGVjb2Rlci5kZWNvZGUobV9yZXNwb25zZUNvbnRlbnREaXNwb3NpdGlv
bkVuY29kaW5nRmFsbGJhY2tBcnJheSkpCisgICAgT3B0aW9uYWw8VmVjdG9yPFN0cmluZz4+IGFy
cmF5OworICAgIGRlY29kZXIgPj4gYXJyYXk7CisgICAgaWYgKCFhcnJheSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIG1fcmVzcG9uc2VDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxi
YWNrQXJyYXkgPSBXVEZNb3ZlKCphcnJheSk7CiAKLSAgICBSZXNvdXJjZVJlcXVlc3RDYWNoZVBv
bGljeSBjYWNoZVBvbGljeTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlRW51bShjYWNoZVBvbGlj
eSkpCisgICAgT3B0aW9uYWw8UmVzb3VyY2VSZXF1ZXN0Q2FjaGVQb2xpY3k+IGNhY2hlUG9saWN5
OworICAgIGRlY29kZXIgPj4gY2FjaGVQb2xpY3k7CisgICAgaWYgKCFjYWNoZVBvbGljeSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fY2FjaGVQb2xpY3kgPSBjYWNoZVBvbGljeTsKKyAg
ICBtX2NhY2hlUG9saWN5ID0gKmNhY2hlUG9saWN5OwogCi0gICAgYm9vbCBhbGxvd0Nvb2tpZXM7
Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShhbGxvd0Nvb2tpZXMpKQorICAgIE9wdGlvbmFsPGJv
b2w+IGFsbG93Q29va2llczsKKyAgICBkZWNvZGVyID4+IGFsbG93Q29va2llczsKKyAgICBpZiAo
IWFsbG93Q29va2llcykKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fYWxsb3dDb29raWVz
ID0gYWxsb3dDb29raWVzOworICAgIG1fYWxsb3dDb29raWVzID0gKmFsbG93Q29va2llczsKIAot
ICAgIFNhbWVTaXRlRGlzcG9zaXRpb24gc2FtZVNpdGVEaXNwb3NpdGlvbjsKLSAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlRW51bShzYW1lU2l0ZURpc3Bvc2l0aW9uKSkKKyAgICBPcHRpb25hbDxTYW1l
U2l0ZURpc3Bvc2l0aW9uPiBzYW1lU2l0ZURpc3Bvc2l0aW9uOworICAgIGRlY29kZXIgPj4gc2Ft
ZVNpdGVEaXNwb3NpdGlvbjsKKyAgICBpZiAoIXNhbWVTaXRlRGlzcG9zaXRpb24pCiAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBtX3NhbWVTaXRlRGlzcG9zaXRpb24gPSBzYW1lU2l0ZURpc3Bv
c2l0aW9uOworICAgIG1fc2FtZVNpdGVEaXNwb3NpdGlvbiA9ICpzYW1lU2l0ZURpc3Bvc2l0aW9u
OwogCi0gICAgYm9vbCBpc1RvcFNpdGU7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShpc1RvcFNp
dGUpKQorICAgIE9wdGlvbmFsPGJvb2w+IGlzVG9wU2l0ZTsKKyAgICBkZWNvZGVyID4+IGlzVG9w
U2l0ZTsKKyAgICBpZiAoIWlzVG9wU2l0ZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1f
aXNUb3BTaXRlID0gaXNUb3BTaXRlOworICAgIG1faXNUb3BTaXRlID0gKmlzVG9wU2l0ZTsKIAot
ICAgIFJlc291cmNlTG9hZFByaW9yaXR5IHByaW9yaXR5OwotICAgIGlmICghZGVjb2Rlci5kZWNv
ZGVFbnVtKHByaW9yaXR5KSkKKyAgICBPcHRpb25hbDxSZXNvdXJjZUxvYWRQcmlvcml0eT4gcHJp
b3JpdHk7CisgICAgZGVjb2RlciA+PiBwcmlvcml0eTsKKyAgICBpZiAoIXByaW9yaXR5KQogICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9wcmlvcml0eSA9IHByaW9yaXR5OworICAgIG1fcHJp
b3JpdHkgPSAqcHJpb3JpdHk7CiAKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlRW51bShtX3JlcXVl
c3RlcikpCisgICAgT3B0aW9uYWw8UmVxdWVzdGVyPiByZXF1ZXN0ZXI7CisgICAgZGVjb2RlciA+
PiByZXF1ZXN0ZXI7CisgICAgaWYgKCFyZXF1ZXN0ZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBtX3JlcXVlc3RlciA9ICpyZXF1ZXN0ZXI7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAg
LTM2MSw0ICszODUsNDEgQEAgYm9vbCBSZXNvdXJjZVJlcXVlc3RCYXNlOjpkZWNvZGVXaXRob3V0
UAogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBSZXNvdXJjZVJlcXVlc3RC
YXNlX2gKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdl
YkNvcmU6OlJlc291cmNlUmVxdWVzdENhY2hlUG9saWN5PiB7CisgICAgdXNpbmcgdmFsdWVzID0g
RW51bVZhbHVlczwKKyAgICAgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Q2FjaGVQb2xpY3ks
CisgICAgICAgIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdENhY2hlUG9saWN5OjpVc2VQcm90b2Nv
bENhY2hlUG9saWN5LAorICAgICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RDYWNoZVBvbGlj
eTo6UmVsb2FkSWdub3JpbmdDYWNoZURhdGEsCisgICAgICAgIFdlYkNvcmU6OlJlc291cmNlUmVx
dWVzdENhY2hlUG9saWN5OjpSZXR1cm5DYWNoZURhdGFFbHNlTG9hZCwKKyAgICAgICAgV2ViQ29y
ZTo6UmVzb3VyY2VSZXF1ZXN0Q2FjaGVQb2xpY3k6OlJldHVybkNhY2hlRGF0YURvbnRMb2FkLAor
ICAgICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RDYWNoZVBvbGljeTo6RG9Ob3RVc2VBbnlD
YWNoZSwKKyAgICAgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Q2FjaGVQb2xpY3k6OlJlZnJl
c2hBbnlDYWNoZURhdGEKKyAgICA+OworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0
czxXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RCYXNlOjpTYW1lU2l0ZURpc3Bvc2l0aW9uPiB7Cisg
ICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKKyAgICAgICAgV2ViQ29yZTo6UmVzb3VyY2VS
ZXF1ZXN0QmFzZTo6U2FtZVNpdGVEaXNwb3NpdGlvbiwKKyAgICAgICAgV2ViQ29yZTo6UmVzb3Vy
Y2VSZXF1ZXN0QmFzZTo6U2FtZVNpdGVEaXNwb3NpdGlvbjo6VW5zcGVjaWZpZWQsCisgICAgICAg
IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdEJhc2U6OlNhbWVTaXRlRGlzcG9zaXRpb246OlNhbWVT
aXRlLAorICAgICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RCYXNlOjpTYW1lU2l0ZURpc3Bv
c2l0aW9uOjpDcm9zc1NpdGUKKyAgICA+OworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRy
YWl0czxXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RCYXNlOjpSZXF1ZXN0ZXI+IHsKKyAgICB1c2lu
ZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAorICAgICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RC
YXNlOjpSZXF1ZXN0ZXIsCisgICAgICAgIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdEJhc2U6OlJl
cXVlc3Rlcjo6VW5zcGVjaWZpZWQsCisgICAgICAgIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdEJh
c2U6OlJlcXVlc3Rlcjo6TWFpbiwKKyAgICAgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0QmFz
ZTo6UmVxdWVzdGVyOjpYSFIsCisgICAgICAgIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdEJhc2U6
OlJlcXVlc3Rlcjo6RmV0Y2gsCisgICAgICAgIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdEJhc2U6
OlJlcXVlc3Rlcjo6TWVkaWEsCisgICAgICAgIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdEJhc2U6
OlJlcXVlc3Rlcjo6SW1wb3J0U2NyaXB0cywKKyAgICAgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXF1
ZXN0QmFzZTo6UmVxdWVzdGVyOjpQaW5nLAorICAgICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVl
c3RCYXNlOjpSZXF1ZXN0ZXI6OkJlYWNvbgorICAgID47Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
VEYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXNwb25z
ZUJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jl
c291cmNlUmVzcG9uc2VCYXNlLmgJKHJldmlzaW9uIDI1OTg5OCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXNwb25zZUJhc2UuaAkod29ya2luZyBjb3B5KQpA
QCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIk5ldHdvcmtMb2FkTWV0cmljcy5oIgogI2luY2x1
ZGUgIlBhcnNlZENvbnRlbnRSYW5nZS5oIgogI2luY2x1ZGUgPHd0Zi9Cb3guaD4KKyNpbmNsdWRl
IDx3dGYvRW51bVRyYWl0cy5oPgogI2luY2x1ZGUgPHd0Zi9NYXJrYWJsZS5oPgogI2luY2x1ZGUg
PHd0Zi9VUkwuaD4KICNpbmNsdWRlIDx3dGYvV2FsbFRpbWUuaD4KQEAgLTI5Nyw5ICsyOTgsOSBA
QCB2b2lkIFJlc291cmNlUmVzcG9uc2VCYXNlOjplbmNvZGUoRW5jb2RlCiAKICAgICBlbmNvZGVy
IDw8IG1faHR0cFN0YXR1c0NvZGU7CiAgICAgZW5jb2RlciA8PCBtX2NlcnRpZmljYXRlSW5mbzsK
LSAgICBlbmNvZGVyLmVuY29kZUVudW0obV9zb3VyY2UpOwotICAgIGVuY29kZXIuZW5jb2RlRW51
bShtX3R5cGUpOwotICAgIGVuY29kZXIuZW5jb2RlRW51bShtX3RhaW50aW5nKTsKKyAgICBlbmNv
ZGVyIDw8IG1fc291cmNlOworICAgIGVuY29kZXIgPDwgbV90eXBlOworICAgIGVuY29kZXIgPDwg
bV90YWludGluZzsKICAgICBlbmNvZGVyIDw8IG1faXNSZWRpcmVjdGVkOwogICAgIFVzZWRMZWdh
Y3lUTFMgdXNlZExlZ2FjeVRMUyA9IG1fdXNlZExlZ2FjeVRMUzsKICAgICBlbmNvZGVyIDw8IHVz
ZWRMZWdhY3lUTFM7CkBAIC0zMDcsNjggKzMwOCwxNjEgQEAgdm9pZCBSZXNvdXJjZVJlc3BvbnNl
QmFzZTo6ZW5jb2RlKEVuY29kZQogfQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotYm9vbCBS
ZXNvdXJjZVJlc3BvbnNlQmFzZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFJlc291cmNlUmVz
cG9uc2VCYXNlJiByZXNwb25zZSkKK2Jvb2wgV0FSTl9VTlVTRURfUkVUVVJOIFJlc291cmNlUmVz
cG9uc2VCYXNlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgUmVzb3VyY2VSZXNwb25zZUJhc2Um
IHJlc3BvbnNlKQogewogICAgIEFTU0VSVChyZXNwb25zZS5tX2lzTnVsbCk7Ci0gICAgYm9vbCBy
ZXNwb25zZUlzTnVsbDsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3BvbnNlSXNOdWxsKSkK
KyAgICBPcHRpb25hbDxib29sPiByZXNwb25zZUlzTnVsbDsKKyAgICBkZWNvZGVyID4+IHJlc3Bv
bnNlSXNOdWxsOworICAgIGlmICghcmVzcG9uc2VJc051bGwpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBpZiAocmVzcG9uc2VJc051bGwpCisgICAgaWYgKCpyZXNwb25zZUlzTnVsbCkKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAKICAgICByZXNwb25zZS5tX2lzTnVsbCA9IGZhbHNlOwogCi0g
ICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXNwb25zZS5tX3VybCkpCisgICAgT3B0aW9uYWw8VVJM
PiB1cmw7CisgICAgZGVjb2RlciA+PiB1cmw7CisgICAgaWYgKCF1cmwpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3BvbnNlLm1fbWltZVR5cGUpKQor
ICAgIHJlc3BvbnNlLm1fdXJsID0gV1RGTW92ZSgqdXJsKTsKKworICAgIE9wdGlvbmFsPFN0cmlu
Zz4gbWltZVR5cGU7CisgICAgZGVjb2RlciA+PiBtaW1lVHlwZTsKKyAgICBpZiAoIW1pbWVUeXBl
KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaW50NjRfdCBleHBlY3RlZENvbnRlbnRMZW5n
dGg7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShleHBlY3RlZENvbnRlbnRMZW5ndGgpKQorICAg
IHJlc3BvbnNlLm1fbWltZVR5cGUgPSBXVEZNb3ZlKCptaW1lVHlwZSk7CisKKyAgICBPcHRpb25h
bDxpbnQ2NF90PiBleHBlY3RlZENvbnRlbnRMZW5ndGg7CisgICAgZGVjb2RlciA+PiBleHBlY3Rl
ZENvbnRlbnRMZW5ndGg7CisgICAgaWYgKCFleHBlY3RlZENvbnRlbnRMZW5ndGgpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICByZXNwb25zZS5tX2V4cGVjdGVkQ29udGVudExlbmd0aCA9IGV4
cGVjdGVkQ29udGVudExlbmd0aDsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3BvbnNlLm1f
dGV4dEVuY29kaW5nTmFtZSkpCisgICAgcmVzcG9uc2UubV9leHBlY3RlZENvbnRlbnRMZW5ndGgg
PSAqZXhwZWN0ZWRDb250ZW50TGVuZ3RoOworCisgICAgT3B0aW9uYWw8QXRvbVN0cmluZz4gdGV4
dEVuY29kaW5nTmFtZTsKKyAgICBkZWNvZGVyID4+IHRleHRFbmNvZGluZ05hbWU7CisgICAgaWYg
KCF0ZXh0RW5jb2RpbmdOYW1lKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFkZWNv
ZGVyLmRlY29kZShyZXNwb25zZS5tX2h0dHBTdGF0dXNUZXh0KSkKKyAgICByZXNwb25zZS5tX3Rl
eHRFbmNvZGluZ05hbWUgPSBXVEZNb3ZlKCp0ZXh0RW5jb2RpbmdOYW1lKTsKKworICAgIE9wdGlv
bmFsPEF0b21TdHJpbmc+IGh0dHBTdGF0dXNUZXh0OworICAgIGRlY29kZXIgPj4gaHR0cFN0YXR1
c1RleHQ7CisgICAgaWYgKCFodHRwU3RhdHVzVGV4dCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzcG9uc2UubV9odHRwVmVyc2lvbikpCisgICAgcmVz
cG9uc2UubV9odHRwU3RhdHVzVGV4dCA9IFdURk1vdmUoKmh0dHBTdGF0dXNUZXh0KTsKKworICAg
IE9wdGlvbmFsPEF0b21TdHJpbmc+IGh0dHBWZXJzaW9uOworICAgIGRlY29kZXIgPj4gaHR0cFZl
cnNpb247CisgICAgaWYgKCFodHRwVmVyc2lvbikKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IGlmICghZGVjb2Rlci5kZWNvZGUocmVzcG9uc2UubV9odHRwSGVhZGVyRmllbGRzKSkKKyAgICBy
ZXNwb25zZS5tX2h0dHBWZXJzaW9uID0gV1RGTW92ZSgqaHR0cFZlcnNpb24pOworCisgICAgT3B0
aW9uYWw8SFRUUEhlYWRlck1hcD4gaHR0cEhlYWRlckZpZWxkczsKKyAgICBkZWNvZGVyID4+IGh0
dHBIZWFkZXJGaWVsZHM7CisgICAgaWYgKCFodHRwSGVhZGVyRmllbGRzKQogICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgcmVzcG9uc2UubV9odHRwSGVhZGVyRmllbGRzID0gV1RGTW92ZSgqaHR0
cEhlYWRlckZpZWxkcyk7CisKICAgICAvLyBUaGUgbmV0d29ya0xvYWRNZXRyaWNzIGluZm8gaXMg
b25seSBzZW5kIG92ZXIgSVBDIGFuZCBub3Qgc3RvcmVkIGluIGRpc2sgY2FjaGUuCiAgICAgaWYg
Y29uc3RleHByIChEZWNvZGVyOjppc0lQQ0RlY29kZXIpIHsKLSAgICAgICAgaWYgKCFkZWNvZGVy
LmRlY29kZShyZXNwb25zZS5tX25ldHdvcmtMb2FkTWV0cmljcykpCisgICAgICAgIE9wdGlvbmFs
PEJveDxOZXR3b3JrTG9hZE1ldHJpY3M+PiBuZXR3b3JrTG9hZE1ldHJpY3M7CisgICAgICAgIGRl
Y29kZXIgPj4gbmV0d29ya0xvYWRNZXRyaWNzOworICAgICAgICBpZiAoIW5ldHdvcmtMb2FkTWV0
cmljcykKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmVzcG9uc2UubV9uZXR3
b3JrTG9hZE1ldHJpY3MgPSBXVEZNb3ZlKCpuZXR3b3JrTG9hZE1ldHJpY3MpOwogICAgIH0KLSAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3BvbnNlLm1faHR0cFN0YXR1c0NvZGUpKQorCisgICAg
T3B0aW9uYWw8c2hvcnQ+IGh0dHBTdGF0dXNDb2RlOworICAgIGRlY29kZXIgPj4gaHR0cFN0YXR1
c0NvZGU7CisgICAgaWYgKCFodHRwU3RhdHVzQ29kZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzcG9uc2UubV9jZXJ0aWZpY2F0ZUluZm8pKQorICAg
IHJlc3BvbnNlLm1faHR0cFN0YXR1c0NvZGUgPSBXVEZNb3ZlKCpodHRwU3RhdHVzQ29kZSk7CisK
KyAgICBPcHRpb25hbDxPcHRpb25hbDxDZXJ0aWZpY2F0ZUluZm8+PiBjZXJ0aWZpY2F0ZUluZm87
CisgICAgZGVjb2RlciA+PiBjZXJ0aWZpY2F0ZUluZm87CisgICAgaWYgKCFjZXJ0aWZpY2F0ZUlu
Zm8pCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBTb3VyY2Ugc291cmNlID0gU291cmNlOjpV
bmtub3duOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGVFbnVtKHNvdXJjZSkpCisgICAgcmVzcG9u
c2UubV9jZXJ0aWZpY2F0ZUluZm8gPSBXVEZNb3ZlKCpjZXJ0aWZpY2F0ZUluZm8pOworCisgICAg
T3B0aW9uYWw8U291cmNlPiBzb3VyY2U7CisgICAgZGVjb2RlciA+PiBzb3VyY2U7CisgICAgaWYg
KCFzb3VyY2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXNwb25zZS5tX3NvdXJjZSA9
IHNvdXJjZTsKLSAgICBUeXBlIHR5cGUgPSBUeXBlOjpEZWZhdWx0OwotICAgIGlmICghZGVjb2Rl
ci5kZWNvZGVFbnVtKHR5cGUpKQorICAgIHJlc3BvbnNlLm1fc291cmNlID0gV1RGTW92ZSgqc291
cmNlKTsKKworICAgIE9wdGlvbmFsPFR5cGU+IHR5cGU7CisgICAgZGVjb2RlciA+PiB0eXBlOwor
ICAgIGlmICghdHlwZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJlc3BvbnNlLm1fdHlw
ZSA9IHR5cGU7Ci0gICAgVGFpbnRpbmcgdGFpbnRpbmcgPSBUYWludGluZzo6QmFzaWM7Ci0gICAg
aWYgKCFkZWNvZGVyLmRlY29kZUVudW0odGFpbnRpbmcpKQorICAgIHJlc3BvbnNlLm1fdHlwZSA9
IFdURk1vdmUoKnR5cGUpOworCisgICAgT3B0aW9uYWw8VGFpbnRpbmc+IHRhaW50aW5nOworICAg
IGRlY29kZXIgPj4gdGFpbnRpbmc7CisgICAgaWYgKCF0YWludGluZykKICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIHJlc3BvbnNlLm1fdGFpbnRpbmcgPSB0YWludGluZzsKLSAgICBib29sIGlz
UmVkaXJlY3RlZCA9IGZhbHNlOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaXNSZWRpcmVjdGVk
KSkKKyAgICByZXNwb25zZS5tX3RhaW50aW5nID0gV1RGTW92ZSgqdGFpbnRpbmcpOworCisgICAg
T3B0aW9uYWw8Ym9vbD4gaXNSZWRpcmVjdGVkOworICAgIGRlY29kZXIgPj4gaXNSZWRpcmVjdGVk
OworICAgIGlmICghaXNSZWRpcmVjdGVkKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmVz
cG9uc2UubV9pc1JlZGlyZWN0ZWQgPSBpc1JlZGlyZWN0ZWQ7Ci0gICAgVXNlZExlZ2FjeVRMUyB1
c2VkTGVnYWN5VExTID0gVXNlZExlZ2FjeVRMUzo6Tm87Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29k
ZSh1c2VkTGVnYWN5VExTKSkKKyAgICByZXNwb25zZS5tX2lzUmVkaXJlY3RlZCA9IFdURk1vdmUo
KmlzUmVkaXJlY3RlZCk7CisKKyAgICBPcHRpb25hbDxVc2VkTGVnYWN5VExTPiB1c2VkTGVnYWN5
VExTOworICAgIGRlY29kZXIgPj4gdXNlZExlZ2FjeVRMUzsKKyAgICBpZiAoIXVzZWRMZWdhY3lU
TFMpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXNwb25zZS5tX3VzZWRMZWdhY3lUTFMg
PSB1c2VkTGVnYWN5VExTOwotICAgIGJvb2wgaXNSYW5nZVJlcXVlc3RlZCA9IGZhbHNlOwotICAg
IGlmICghZGVjb2Rlci5kZWNvZGUoaXNSYW5nZVJlcXVlc3RlZCkpCisgICAgcmVzcG9uc2UubV91
c2VkTGVnYWN5VExTID0gV1RGTW92ZSgqdXNlZExlZ2FjeVRMUyk7CisKKyAgICBPcHRpb25hbDxi
b29sPiBpc1JhbmdlUmVxdWVzdGVkOworICAgIGRlY29kZXIgPj4gaXNSYW5nZVJlcXVlc3RlZDsK
KyAgICBpZiAoIWlzUmFuZ2VSZXF1ZXN0ZWQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBy
ZXNwb25zZS5tX2lzUmFuZ2VSZXF1ZXN0ZWQgPSBpc1JhbmdlUmVxdWVzdGVkOworICAgIHJlc3Bv
bnNlLm1faXNSYW5nZVJlcXVlc3RlZCA9IFdURk1vdmUoKmlzUmFuZ2VSZXF1ZXN0ZWQpOwogCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworbmFtZXNwYWNl
IFdURiB7CisKK3RlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6UmVzb3VyY2VS
ZXNwb25zZUJhc2U6OlR5cGU+IHsKKyAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAorICAg
ICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlQmFzZTo6VHlwZSwKKyAgICAgICAgV2ViQ29y
ZTo6UmVzb3VyY2VSZXNwb25zZUJhc2U6OlR5cGU6OkJhc2ljLAorICAgICAgICBXZWJDb3JlOjpS
ZXNvdXJjZVJlc3BvbnNlQmFzZTo6VHlwZTo6Q29ycywKKyAgICAgICAgV2ViQ29yZTo6UmVzb3Vy
Y2VSZXNwb25zZUJhc2U6OlR5cGU6OkRlZmF1bHQsCisgICAgICAgIFdlYkNvcmU6OlJlc291cmNl
UmVzcG9uc2VCYXNlOjpUeXBlOjpFcnJvciwKKyAgICAgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXNw
b25zZUJhc2U6OlR5cGU6Ok9wYXF1ZSwKKyAgICAgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25z
ZUJhc2U6OlR5cGU6Ok9wYXF1ZXJlZGlyZWN0CisgICAgPjsKK307CisKK3RlbXBsYXRlPD4gc3Ry
dWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZUJhc2U6OlRhaW50aW5nPiB7
CisgICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKKyAgICAgICAgV2ViQ29yZTo6UmVzb3Vy
Y2VSZXNwb25zZUJhc2U6OlRhaW50aW5nLAorICAgICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlc3Bv
bnNlQmFzZTo6VGFpbnRpbmc6OkJhc2ljLAorICAgICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlc3Bv
bnNlQmFzZTo6VGFpbnRpbmc6OkNvcnMsCisgICAgICAgIFdlYkNvcmU6OlJlc291cmNlUmVzcG9u
c2VCYXNlOjpUYWludGluZzo6T3BhcXVlLAorICAgICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlc3Bv
bnNlQmFzZTo6VGFpbnRpbmc6Ok9wYXF1ZXJlZGlyZWN0CisgICAgPjsKK307CisKKwordGVtcGxh
dGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlQmFzZTo6U291
cmNlPiB7CisgICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKKyAgICAgICAgV2ViQ29yZTo6
UmVzb3VyY2VSZXNwb25zZUJhc2U6OlNvdXJjZSwKKyAgICAgICAgV2ViQ29yZTo6UmVzb3VyY2VS
ZXNwb25zZUJhc2U6OlNvdXJjZTo6VW5rbm93biwKKyAgICAgICAgV2ViQ29yZTo6UmVzb3VyY2VS
ZXNwb25zZUJhc2U6OlNvdXJjZTo6TmV0d29yaywKKyAgICAgICAgV2ViQ29yZTo6UmVzb3VyY2VS
ZXNwb25zZUJhc2U6OlNvdXJjZTo6RGlza0NhY2hlLAorICAgICAgICBXZWJDb3JlOjpSZXNvdXJj
ZVJlc3BvbnNlQmFzZTo6U291cmNlOjpEaXNrQ2FjaGVBZnRlclZhbGlkYXRpb24sCisgICAgICAg
IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2VCYXNlOjpTb3VyY2U6Ok1lbW9yeUNhY2hlLAorICAg
ICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlQmFzZTo6U291cmNlOjpNZW1vcnlDYWNoZUFm
dGVyVmFsaWRhdGlvbiwKKyAgICAgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZUJhc2U6OlNv
dXJjZTo6U2VydmljZVdvcmtlciwKKyAgICAgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZUJh
c2U6OlNvdXJjZTo6QXBwbGljYXRpb25DYWNoZSwKKyAgICAgICAgV2ViQ29yZTo6UmVzb3VyY2VS
ZXNwb25zZUJhc2U6OlNvdXJjZTo6RE9NQ2FjaGUsCisgICAgICAgIFdlYkNvcmU6OlJlc291cmNl
UmVzcG9uc2VCYXNlOjpTb3VyY2U6Okluc3BlY3Rvck92ZXJyaWRlCisgICAgPjsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdURgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9j
Zi9DZXJ0aWZpY2F0ZUluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2NmL0NlcnRpZmljYXRlSW5mby5oCShyZXZpc2lvbiAyNTk4OTgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0NlcnRpZmljYXRlSW5mby5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yNiwxMiArMjYsMTEgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQ2Vy
dGlmaWNhdGVJbmZvQmFzZS5oIgorI2luY2x1ZGUgPHd0Zi9FbnVtVHJhaXRzLmg+CiAjaW5jbHVk
ZSA8d3RmL1JldGFpblB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3
dGYvY2YvVHlwZUNhc3RzQ0YuaD4KLSNpbmNsdWRlIDx3dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVu
dENvZGVycy5oPgotI2luY2x1ZGUgPHd0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RGVjb2Rlci5o
PgotI2luY2x1ZGUgPHd0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RW5jb2Rlci5oPgorI2luY2x1
ZGUgPHd0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50Q29kZXIuaD4KIAogI2lmIFBMQVRGT1JNKENP
Q09BKQogI2luY2x1ZGUgPFNlY3VyaXR5L1NlY0NlcnRpZmljYXRlLmg+CkBAIC05OCwxNjMgKzk3
LDI1IEBAIHByaXZhdGU6CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKIG5hbWVzcGFjZSBXVEYg
ewotbmFtZXNwYWNlIFBlcnNpc3RlbmNlIHsKLQotc3RhdGljIHZvaWQgZW5jb2RlQ0ZEYXRhKEVu
Y29kZXImIGVuY29kZXIsIENGRGF0YVJlZiBkYXRhKQotewotICAgIHVpbnQ2NF90IGxlbmd0aCA9
IENGRGF0YUdldExlbmd0aChkYXRhKTsKLSAgICBjb25zdCB1aW50OF90KiBieXRlUHRyID0gQ0ZE
YXRhR2V0Qnl0ZVB0cihkYXRhKTsKLQotICAgIGVuY29kZXIgPDwgbGVuZ3RoOwotICAgIGVuY29k
ZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGJ5dGVQdHIsIHN0YXRpY19jYXN0PHNpemVfdD4obGVu
Z3RoKSk7Ci19Ci0KLXN0YXRpYyBib29sIGRlY29kZUNGRGF0YShEZWNvZGVyJiBkZWNvZGVyLCBS
ZXRhaW5QdHI8Q0ZEYXRhUmVmPiYgZGF0YSkKLXsKLSAgICB1aW50NjRfdCBzaXplID0gMDsKLSAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKHNpemUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBWZWN0b3I8dWludDhfdD4gdmVjdG9yKHN0YXRpY19jYXN0PHNpemVfdD4oc2l6ZSkpOwotICAg
IGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEodmVjdG9yLmRhdGEoKSwgdmVjdG9y
LnNpemUoKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGRhdGEgPSBhZG9wdENGKENG
RGF0YUNyZWF0ZShudWxscHRyLCB2ZWN0b3IuZGF0YSgpLCB2ZWN0b3Iuc2l6ZSgpKSk7Ci0gICAg
cmV0dXJuIHRydWU7Ci19CiAKK3RlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6
Q2VydGlmaWNhdGVJbmZvOjpUeXBlPiB7CisgICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwK
KyAgICAgICAgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvOjpUeXBlLAorICAgICAgICBXZWJDb3Jl
OjpDZXJ0aWZpY2F0ZUluZm86OlR5cGU6Ok5vbmUsCisgICAgICAgIFdlYkNvcmU6OkNlcnRpZmlj
YXRlSW5mbzo6VHlwZTo6Q2VydGlmaWNhdGVDaGFpbgogI2lmIEhBVkUoU0VDX1RSVVNUX1NFUklB
TElaQVRJT04pCi1zdGF0aWMgdm9pZCBlbmNvZGVTZWNUcnVzdFJlZihFbmNvZGVyJiBlbmNvZGVy
LCBTZWNUcnVzdFJlZiB0cnVzdCkKLXsKLSAgICBhdXRvIGRhdGEgPSBhZG9wdENGKFNlY1RydXN0
U2VyaWFsaXplKHRydXN0LCBudWxscHRyKSk7Ci0gICAgaWYgKCFkYXRhKSB7Ci0gICAgICAgIGVu
Y29kZXIgPDwgZmFsc2U7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBlbmNvZGVyIDw8
IHRydWU7Ci0gICAgZW5jb2RlQ0ZEYXRhKGVuY29kZXIsIGRhdGEuZ2V0KCkpOwotfQotCi1zdGF0
aWMgYm9vbCBkZWNvZGVTZWNUcnVzdFJlZihEZWNvZGVyJiBkZWNvZGVyLCBSZXRhaW5QdHI8U2Vj
VHJ1c3RSZWY+JiByZXN1bHQpCi17Ci0gICAgYm9vbCBoYXNUcnVzdDsKLSAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKGhhc1RydXN0KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFo
YXNUcnVzdCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVm
PiB0cnVzdERhdGE7Ci0gICAgaWYgKCFkZWNvZGVDRkRhdGEoZGVjb2RlciwgdHJ1c3REYXRhKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byB0cnVzdCA9IGFkb3B0Q0YoU2VjVHJ1
c3REZXNlcmlhbGl6ZSh0cnVzdERhdGEuZ2V0KCksIG51bGxwdHIpKTsKLSAgICBpZiAoIXRydXN0
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXN1bHQgPSBXVEZNb3ZlKHRydXN0KTsK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KKyAgICAgICAgLCBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm86
OlR5cGU6OlRydXN0CiAjZW5kaWYKKyAgICA+OworfTsKIAotI2lmIFBMQVRGT1JNKENPQ09BKQot
c3RhdGljIHZvaWQgZW5jb2RlQ2VydGlmaWNhdGVDaGFpbihFbmNvZGVyJiBlbmNvZGVyLCBDRkFy
cmF5UmVmIGNlcnRpZmljYXRlQ2hhaW4pCi17Ci0gICAgQ0ZJbmRleCBzaXplID0gQ0ZBcnJheUdl
dENvdW50KGNlcnRpZmljYXRlQ2hhaW4pOwotICAgIFZlY3RvcjxDRlR5cGVSZWYsIDMyPiB2YWx1
ZXMoc2l6ZSk7Ci0KLSAgICBDRkFycmF5R2V0VmFsdWVzKGNlcnRpZmljYXRlQ2hhaW4sIENGUmFu
Z2VNYWtlKDAsIHNpemUpLCB2YWx1ZXMuZGF0YSgpKTsKLQotICAgIGVuY29kZXIgPDwgc3RhdGlj
X2Nhc3Q8dWludDY0X3Q+KHNpemUpOwotCi0gICAgZm9yIChDRkluZGV4IGkgPSAwOyBpIDwgc2l6
ZTsgKytpKSB7Ci0gICAgICAgIEFTU0VSVCh2YWx1ZXNbaV0pOwotICAgICAgICBhdXRvIGRhdGEg
PSBhZG9wdENGKFNlY0NlcnRpZmljYXRlQ29weURhdGEoY2hlY2tlZF9jZl9jYXN0PFNlY0NlcnRp
ZmljYXRlUmVmPih2YWx1ZXNbaV0pKSk7Ci0gICAgICAgIGVuY29kZUNGRGF0YShlbmNvZGVyLCBk
YXRhLmdldCgpKTsKLSAgICB9Ci19Ci0KLXN0YXRpYyBib29sIGRlY29kZUNlcnRpZmljYXRlQ2hh
aW4oRGVjb2RlciYgZGVjb2RlciwgUmV0YWluUHRyPENGQXJyYXlSZWY+JiBjZXJ0aWZpY2F0ZUNo
YWluKQotewotICAgIHVpbnQ2NF90IHNpemU7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShzaXpl
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byBhcnJheSA9IGFkb3B0Q0YoQ0ZB
cnJheUNyZWF0ZU11dGFibGUoMCwgMCwgJmtDRlR5cGVBcnJheUNhbGxCYWNrcykpOwotCi0gICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgUmV0YWluUHRyPENG
RGF0YVJlZj4gZGF0YTsKLSAgICAgICAgaWYgKCFkZWNvZGVDRkRhdGEoZGVjb2RlciwgZGF0YSkp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgYXV0byBjZXJ0aWZpY2F0ZSA9
IGFkb3B0Q0YoU2VjQ2VydGlmaWNhdGVDcmVhdGVXaXRoRGF0YSgwLCBkYXRhLmdldCgpKSk7Ci0g
ICAgICAgIENGQXJyYXlBcHBlbmRWYWx1ZShhcnJheS5nZXQoKSwgY2VydGlmaWNhdGUuZ2V0KCkp
OwotICAgIH0KLQotICAgIGNlcnRpZmljYXRlQ2hhaW4gPSBXVEZNb3ZlKGFycmF5KTsKLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLSNlbmRpZgorbmFtZXNwYWNlIFBlcnNpc3RlbmNlIHsKIAogdGVtcGxh
dGU8PiBzdHJ1Y3QgQ29kZXI8V2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvPiB7Ci0gICAgc3RhdGlj
IHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFdlYkNvcmU6OkNlcnRpZmljYXRl
SW5mbyYgY2VydGlmaWNhdGVJbmZvKQotICAgIHsKLSAgICAgICAgZW5jb2Rlci5lbmNvZGVFbnVt
KGNlcnRpZmljYXRlSW5mby50eXBlKCkpOwotCi0gICAgICAgIHN3aXRjaCAoY2VydGlmaWNhdGVJ
bmZvLnR5cGUoKSkgewotI2lmIEhBVkUoU0VDX1RSVVNUX1NFUklBTElaQVRJT04pCi0gICAgICAg
IGNhc2UgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvOjpUeXBlOjpUcnVzdDoKLSAgICAgICAgICAg
IGVuY29kZVNlY1RydXN0UmVmKGVuY29kZXIsIGNlcnRpZmljYXRlSW5mby50cnVzdCgpKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotI2VuZGlmCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgICAgIGNh
c2UgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvOjpUeXBlOjpDZXJ0aWZpY2F0ZUNoYWluOiB7Ci0g
ICAgICAgICAgICBlbmNvZGVDZXJ0aWZpY2F0ZUNoYWluKGVuY29kZXIsIGNlcnRpZmljYXRlSW5m
by5jZXJ0aWZpY2F0ZUNoYWluKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSNl
bmRpZgotICAgICAgICBjYXNlIFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbzo6VHlwZTo6Tm9uZToK
LSAgICAgICAgICAgIC8vIERvIG5vdGhpbmcuCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBXZWJD
b3JlOjpDZXJ0aWZpY2F0ZUluZm8mIGNlcnRpZmljYXRlSW5mbykKLSAgICB7Ci0gICAgICAgIFdl
YkNvcmU6OkNlcnRpZmljYXRlSW5mbzo6VHlwZSBjZXJ0aWZpY2F0ZUluZm9UeXBlOwotICAgICAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlRW51bShjZXJ0aWZpY2F0ZUluZm9UeXBlKSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBzd2l0Y2ggKGNlcnRpZmljYXRlSW5mb1R5cGUp
IHsKLSNpZiBIQVZFKFNFQ19UUlVTVF9TRVJJQUxJWkFUSU9OKQotICAgICAgICBjYXNlIFdlYkNv
cmU6OkNlcnRpZmljYXRlSW5mbzo6VHlwZTo6VHJ1c3Q6IHsKLSAgICAgICAgICAgIFJldGFpblB0
cjxTZWNUcnVzdFJlZj4gdHJ1c3Q7Ci0gICAgICAgICAgICBpZiAoIWRlY29kZVNlY1RydXN0UmVm
KGRlY29kZXIsIHRydXN0KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAg
ICAgICAgIGNlcnRpZmljYXRlSW5mbyA9IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyhXVEZNb3Zl
KHRydXN0KSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotI2VuZGlmCi0j
aWYgUExBVEZPUk0oQ09DT0EpCi0gICAgICAgIGNhc2UgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZv
OjpUeXBlOjpDZXJ0aWZpY2F0ZUNoYWluOiB7Ci0gICAgICAgICAgICBSZXRhaW5QdHI8Q0ZBcnJh
eVJlZj4gY2VydGlmaWNhdGVDaGFpbjsKLSAgICAgICAgICAgIGlmICghZGVjb2RlQ2VydGlmaWNh
dGVDaGFpbihkZWNvZGVyLCBjZXJ0aWZpY2F0ZUNoYWluKSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICAgICAgICAgIGNlcnRpZmljYXRlSW5mbyA9IFdlYkNvcmU6OkNlcnRp
ZmljYXRlSW5mbyhXVEZNb3ZlKGNlcnRpZmljYXRlQ2hhaW4pKTsKLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICB9Ci0jZW5kaWYKLSAgICAgICAgY2FzZSBXZWJDb3JlOjpDZXJ0aWZp
Y2F0ZUluZm86OlR5cGU6Ok5vbmU6Ci0gICAgICAgICAgICAvLyBEbyBub3RoaW5nLgotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Cisg
ICAgc3RhdGljIFdFQkNPUkVfRVhQT1JUIHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25zdCBXZWJD
b3JlOjpDZXJ0aWZpY2F0ZUluZm8mKTsKKyAgICBzdGF0aWMgV0VCQ09SRV9FWFBPUlQgT3B0aW9u
YWw8V2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvPiBkZWNvZGUoRGVjb2RlciYpOwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV1RGOjpQZXJzaXN0ZW5jZQorCiB9IC8vIG5hbWVzcGFjZSBXVEYKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvQ2VydGlmaWNhdGVJbmZvQ0ZOZXQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvQ2Vy
dGlmaWNhdGVJbmZvQ0ZOZXQuY3BwCShyZXZpc2lvbiAyNTk4OTgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0NlcnRpZmljYXRlSW5mb0NGTmV0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjYsNiArMjYsOSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkNl
cnRpZmljYXRlSW5mby5oIgogCisjaW5jbHVkZSA8d3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRE
ZWNvZGVyLmg+CisjaW5jbHVkZSA8d3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRFbmNvZGVyLmg+
CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogI2lmIFBMQVRGT1JNKENPQ09BKQpAQCAtMTUzLDMg
KzE1NiwxNjUgQEAgT3B0aW9uYWw8Q2VydGlmaWNhdGVJbmZvOjpTdW1tYXJ5SW5mbz4gQwogfQog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKK25hbWVzcGFjZSBXVEYgeworbmFtZXNwYWNlIFBl
cnNpc3RlbmNlIHsKKworc3RhdGljIHZvaWQgZW5jb2RlQ0ZEYXRhKEVuY29kZXImIGVuY29kZXIs
IENGRGF0YVJlZiBkYXRhKQoreworICAgIHVpbnQ2NF90IGxlbmd0aCA9IENGRGF0YUdldExlbmd0
aChkYXRhKTsKKyAgICBjb25zdCB1aW50OF90KiBieXRlUHRyID0gQ0ZEYXRhR2V0Qnl0ZVB0cihk
YXRhKTsKKworICAgIGVuY29kZXIgPDwgbGVuZ3RoOworICAgIGVuY29kZXIuZW5jb2RlRml4ZWRM
ZW5ndGhEYXRhKGJ5dGVQdHIsIHN0YXRpY19jYXN0PHNpemVfdD4obGVuZ3RoKSk7Cit9CisKK3N0
YXRpYyBPcHRpb25hbDxSZXRhaW5QdHI8Q0ZEYXRhUmVmPj4gZGVjb2RlQ0ZEYXRhKERlY29kZXIm
IGRlY29kZXIpCit7CisgICAgT3B0aW9uYWw8dWludDY0X3Q+IHNpemU7CisgICAgZGVjb2RlciA+
PiBzaXplOworICAgIGlmICghc2l6ZSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKwor
ICAgIGlmIChVTkxJS0VMWSghaXNJbkJvdW5kczxzaXplX3Q+KCpzaXplKSkpCisgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CisgICAgCisgICAgVmVjdG9yPHVpbnQ4X3Q+IHZlY3RvcihzdGF0
aWNfY2FzdDxzaXplX3Q+KCpzaXplKSk7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVu
Z3RoRGF0YSh2ZWN0b3IuZGF0YSgpLCB2ZWN0b3Iuc2l6ZSgpKSkKKyAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKKworICAgIHJldHVybiBhZG9wdENGKENGRGF0YUNyZWF0ZShudWxscHRyLCB2
ZWN0b3IuZGF0YSgpLCB2ZWN0b3Iuc2l6ZSgpKSk7Cit9CisKKyNpZiBIQVZFKFNFQ19UUlVTVF9T
RVJJQUxJWkFUSU9OKQorc3RhdGljIHZvaWQgZW5jb2RlU2VjVHJ1c3RSZWYoRW5jb2RlciYgZW5j
b2RlciwgU2VjVHJ1c3RSZWYgdHJ1c3QpCit7CisgICAgYXV0byBkYXRhID0gYWRvcHRDRihTZWNU
cnVzdFNlcmlhbGl6ZSh0cnVzdCwgbnVsbHB0cikpOworICAgIGlmICghZGF0YSkgeworICAgICAg
ICBlbmNvZGVyIDw8IGZhbHNlOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZW5jb2Rl
ciA8PCB0cnVlOworICAgIGVuY29kZUNGRGF0YShlbmNvZGVyLCBkYXRhLmdldCgpKTsKK30KKwor
c3RhdGljIE9wdGlvbmFsPFJldGFpblB0cjxTZWNUcnVzdFJlZj4+IGRlY29kZVNlY1RydXN0UmVm
KERlY29kZXImIGRlY29kZXIpCit7CisgICAgT3B0aW9uYWw8Ym9vbD4gaGFzVHJ1c3Q7CisgICAg
ZGVjb2RlciA+PiBoYXNUcnVzdDsKKyAgICBpZiAoIWhhc1RydXN0KQorICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OworCisgICAgaWYgKCEqaGFzVHJ1c3QpCisgICAgICAgIHJldHVybiB7IG51
bGxwdHIgfTsKKworICAgIGF1dG8gdHJ1c3REYXRhID0gZGVjb2RlQ0ZEYXRhKGRlY29kZXIpOwor
ICAgIGlmICghdHJ1c3REYXRhKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAg
YXV0byB0cnVzdCA9IGFkb3B0Q0YoU2VjVHJ1c3REZXNlcmlhbGl6ZSh0cnVzdERhdGEtPmdldCgp
LCBudWxscHRyKSk7CisgICAgaWYgKCF0cnVzdCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKKworICAgIHJldHVybiBXVEZNb3ZlKHRydXN0KTsKK30KKyNlbmRpZgorCisjaWYgUExBVEZP
Uk0oQ09DT0EpCitzdGF0aWMgdm9pZCBlbmNvZGVDZXJ0aWZpY2F0ZUNoYWluKEVuY29kZXImIGVu
Y29kZXIsIENGQXJyYXlSZWYgY2VydGlmaWNhdGVDaGFpbikKK3sKKyAgICBDRkluZGV4IHNpemUg
PSBDRkFycmF5R2V0Q291bnQoY2VydGlmaWNhdGVDaGFpbik7CisgICAgVmVjdG9yPENGVHlwZVJl
ZiwgMzI+IHZhbHVlcyhzaXplKTsKKworICAgIENGQXJyYXlHZXRWYWx1ZXMoY2VydGlmaWNhdGVD
aGFpbiwgQ0ZSYW5nZU1ha2UoMCwgc2l6ZSksIHZhbHVlcy5kYXRhKCkpOworCisgICAgZW5jb2Rl
ciA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oc2l6ZSk7CisKKyAgICBmb3IgKENGSW5kZXggaSA9
IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgQVNTRVJUKHZhbHVlc1tpXSk7CisgICAgICAg
IGF1dG8gZGF0YSA9IGFkb3B0Q0YoU2VjQ2VydGlmaWNhdGVDb3B5RGF0YShjaGVja2VkX2NmX2Nh
c3Q8U2VjQ2VydGlmaWNhdGVSZWY+KHZhbHVlc1tpXSkpKTsKKyAgICAgICAgZW5jb2RlQ0ZEYXRh
KGVuY29kZXIsIGRhdGEuZ2V0KCkpOworICAgIH0KK30KKworc3RhdGljIE9wdGlvbmFsPFJldGFp
blB0cjxDRkFycmF5UmVmPj4gZGVjb2RlQ2VydGlmaWNhdGVDaGFpbihEZWNvZGVyJiBkZWNvZGVy
KQoreworICAgIE9wdGlvbmFsPHVpbnQ2NF90PiBzaXplOworICAgIGRlY29kZXIgPj4gc2l6ZTsK
KyAgICBpZiAoIXNpemUpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBhdXRv
IGFycmF5ID0gYWRvcHRDRihDRkFycmF5Q3JlYXRlTXV0YWJsZSgwLCAwLCAma0NGVHlwZUFycmF5
Q2FsbEJhY2tzKSk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8ICpzaXplOyArK2kpIHsK
KyAgICAgICAgYXV0byBkYXRhID0gZGVjb2RlQ0ZEYXRhKGRlY29kZXIpOworICAgICAgICBpZiAo
IWRhdGEpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgICAgIGF1dG8g
Y2VydGlmaWNhdGUgPSBhZG9wdENGKFNlY0NlcnRpZmljYXRlQ3JlYXRlV2l0aERhdGEoMCwgZGF0
YS0+Z2V0KCkpKTsKKyAgICAgICAgQ0ZBcnJheUFwcGVuZFZhbHVlKGFycmF5LmdldCgpLCBjZXJ0
aWZpY2F0ZS5nZXQoKSk7CisgICAgfQorCisgICAgcmV0dXJuIHsgV1RGTW92ZShhcnJheSkgfTsK
K30KKyNlbmRpZgorCit2b2lkIENvZGVyPFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbz46OmVuY29k
ZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8mIGNlcnRp
ZmljYXRlSW5mbykKK3sKKyAgICBlbmNvZGVyIDw8IGNlcnRpZmljYXRlSW5mby50eXBlKCk7CisK
KyAgICBzd2l0Y2ggKGNlcnRpZmljYXRlSW5mby50eXBlKCkpIHsKKyNpZiBIQVZFKFNFQ19UUlVT
VF9TRVJJQUxJWkFUSU9OKQorICAgIGNhc2UgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvOjpUeXBl
OjpUcnVzdDoKKyAgICAgICAgZW5jb2RlU2VjVHJ1c3RSZWYoZW5jb2RlciwgY2VydGlmaWNhdGVJ
bmZvLnRydXN0KCkpOworICAgICAgICBicmVhazsKKyNlbmRpZgorI2lmIFBMQVRGT1JNKENPQ09B
KQorICAgIGNhc2UgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvOjpUeXBlOjpDZXJ0aWZpY2F0ZUNo
YWluOiB7CisgICAgICAgIGVuY29kZUNlcnRpZmljYXRlQ2hhaW4oZW5jb2RlciwgY2VydGlmaWNh
dGVJbmZvLmNlcnRpZmljYXRlQ2hhaW4oKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyNlbmRp
ZgorICAgIGNhc2UgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvOjpUeXBlOjpOb25lOgorICAgICAg
ICAvLyBEbyBub3RoaW5nLgorICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK09wdGlvbmFsPFdl
YkNvcmU6OkNlcnRpZmljYXRlSW5mbz4gQ29kZXI8V2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvPjo6
ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCit7CisgICAgT3B0aW9uYWw8V2ViQ29yZTo6Q2VydGlm
aWNhdGVJbmZvOjpUeXBlPiBjZXJ0aWZpY2F0ZUluZm9UeXBlOworICAgIGRlY29kZXIgPj4gY2Vy
dGlmaWNhdGVJbmZvVHlwZTsKKyAgICBpZiAoIWNlcnRpZmljYXRlSW5mb1R5cGUpCisgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBzd2l0Y2ggKCpjZXJ0aWZpY2F0ZUluZm9UeXBl
KSB7CisjaWYgSEFWRShTRUNfVFJVU1RfU0VSSUFMSVpBVElPTikKKyAgICBjYXNlIFdlYkNvcmU6
OkNlcnRpZmljYXRlSW5mbzo6VHlwZTo6VHJ1c3Q6IHsKKyAgICAgICAgYXV0byB0cnVzdCA9IGRl
Y29kZVNlY1RydXN0UmVmKGRlY29kZXIpOworICAgICAgICBpZiAoIXRydXN0KQorICAgICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgICAgICByZXR1cm4gV2ViQ29yZTo6Q2VydGlm
aWNhdGVJbmZvKFdURk1vdmUoKnRydXN0KSk7CisgICAgfQorI2VuZGlmCisjaWYgUExBVEZPUk0o
Q09DT0EpCisgICAgY2FzZSBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm86OlR5cGU6OkNlcnRpZmlj
YXRlQ2hhaW46IHsKKyAgICAgICAgYXV0byBjZXJ0aWZpY2F0ZUNoYWluID0gZGVjb2RlQ2VydGlm
aWNhdGVDaGFpbihkZWNvZGVyKTsKKyAgICAgICAgaWYgKCFjZXJ0aWZpY2F0ZUNoYWluKQorICAg
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgICAgICByZXR1cm4gV2ViQ29yZTo6
Q2VydGlmaWNhdGVJbmZvKFdURk1vdmUoKmNlcnRpZmljYXRlQ2hhaW4pKTsKKyAgICB9CisjZW5k
aWYKKyAgICBjYXNlIFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbzo6VHlwZTo6Tm9uZToKKyAgICAg
ICAgLy8gRG8gbm90aGluZy4KKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkNlcnRpZmljYXRlSW5m
bygpOworICAgIH0KKworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFBlcnNpc3RlbmNlCit9IC8vIG5hbWVzcGFjZSBXVEYKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvY3VybC9DZXJ0aWZpY2F0ZUluZm8uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ2VydGlmaWNhdGVJbmZvLmgJKHJl
dmlzaW9uIDI1OTg5OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9D
ZXJ0aWZpY2F0ZUluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtODIsMjcgKzgyLDI5IEBAIHRlbXBs
YXRlPD4gc3RydWN0IENvZGVyPFdlYkNvcmU6OkNlcnRpZmkKICAgICAgICAgICAgIGVuY29kZXIg
PDwgY2VydGlmaWNhdGU7CiAgICAgfQogCi0gICAgc3RhdGljIGJvb2wgZGVjb2RlKERlY29kZXIm
IGRlY29kZXIsIFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyYgY2VydGlmaWNhdGVJbmZvKQorICAg
IHN0YXRpYyBPcHRpb25hbDxXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8+IGRlY29kZShEZWNvZGVy
JiBkZWNvZGVyKQogICAgIHsKLSAgICAgICAgaW50IHZlcmlmaWNhdGlvbkVycm9yOwotICAgICAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKHZlcmlmaWNhdGlvbkVycm9yKSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgICAgICBzaXplX3QgbnVtT2ZDZXJ0ID0gMDsKLSAgICAgICAgaWYg
KCFkZWNvZGVyLmRlY29kZShudW1PZkNlcnQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICBPcHRpb25hbDxpbnQ+IHZlcmlmaWNhdGlvbkVycm9yOworICAgICAgICBkZWNvZGVy
ID4+IHZlcmlmaWNhdGlvbkVycm9yOworICAgICAgICBpZiAoIXZlcmlmaWNhdGlvbkVycm9yKQor
ICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgICAgICBPcHRpb25hbDxzaXpl
X3Q+IG51bU9mQ2VydHM7CisgICAgICAgIGRlY29kZXIgPj4gbnVtT2ZDZXJ0czsKKyAgICAgICAg
aWYgKCFudW1PZkNlcnRzKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAg
ICAgICBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm86OkNlcnRpZmljYXRlQ2hhaW4gY2VydGlmaWNh
dGVDaGFpbjsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1PZkNlcnQ7IGkrKykg
ewotICAgICAgICAgICAgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvOjpDZXJ0aWZpY2F0ZSBjZXJ0
aWZpY2F0ZTsKLSAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoY2VydGlmaWNhdGUpKQot
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBudW1PZkNlcnRzLnZhbHVlKCk7IGkrKykgeworICAgICAgICAgICAgT3B0aW9uYWw8V2Vi
Q29yZTo6Q2VydGlmaWNhdGVJbmZvOjpDZXJ0aWZpY2F0ZT4gY2VydGlmaWNhdGU7CisgICAgICAg
ICAgICBkZWNvZGVyID4+IGNlcnRpZmljYXRlOworICAgICAgICAgICAgaWYgKCFjZXJ0aWZpY2F0
ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgICAgICAgICBj
ZXJ0aWZpY2F0ZUNoYWluLmFwcGVuZChXVEZNb3ZlKGNlcnRpZmljYXRlKSk7CisgICAgICAgICAg
ICBjZXJ0aWZpY2F0ZUNoYWluLmFwcGVuZChXVEZNb3ZlKGNlcnRpZmljYXRlLnZhbHVlKCkpKTsK
ICAgICAgICAgfQogCi0gICAgICAgIGNlcnRpZmljYXRlSW5mbyA9IFdlYkNvcmU6OkNlcnRpZmlj
YXRlSW5mbyh2ZXJpZmljYXRpb25FcnJvciwgV1RGTW92ZShjZXJ0aWZpY2F0ZUNoYWluKSk7Ci0g
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4gV2ViQ29yZTo6Q2VydGlmaWNhdGVJ
bmZvKHZlcmlmaWNhdGlvbkVycm9yLnZhbHVlKCksIFdURk1vdmUoY2VydGlmaWNhdGVDaGFpbikp
OwogICAgIH0KIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291
cC9DZXJ0aWZpY2F0ZUluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL3NvdXAvQ2VydGlmaWNhdGVJbmZvLmgJKHJldmlzaW9uIDI1OTg5OCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9DZXJ0aWZpY2F0ZUluZm8uaAkod29y
a2luZyBjb3B5KQpAQCAtNzYsMTUgKzc2LDE4IEBAIHRlbXBsYXRlPD4gc3RydWN0IENvZGVyPEdS
ZWZQdHI8R0J5dGVBcnIKICAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoYnl0
ZUFycmF5LT5kYXRhLCBieXRlQXJyYXktPmxlbik7CiAgICAgfQogCi0gICAgc3RhdGljIGJvb2wg
ZGVjb2RlKERlY29kZXIgJmRlY29kZXIsIEdSZWZQdHI8R0J5dGVBcnJheT4mIGJ5dGVBcnJheSkK
KyAgICBzdGF0aWMgT3B0aW9uYWw8R1JlZlB0cjxHQnl0ZUFycmF5Pj4gZGVjb2RlKERlY29kZXIm
IGRlY29kZXIpCiAgICAgewotICAgICAgICB1aW50MzJfdCBzaXplOwotICAgICAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKHNpemUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAg
IGJ5dGVBcnJheSA9IGFkb3B0R1JlZihnX2J5dGVfYXJyYXlfc2l6ZWRfbmV3KHNpemUpKTsKLSAg
ICAgICAgZ19ieXRlX2FycmF5X3NldF9zaXplKGJ5dGVBcnJheS5nZXQoKSwgc2l6ZSk7Ci0gICAg
ICAgIHJldHVybiBkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShieXRlQXJyYXktPmRhdGEs
IHNpemUpOworICAgICAgICBPcHRpb25hbDx1aW50MzJfdD4gc2l6ZTsKKyAgICAgICAgZGVjb2Rl
ciA+PiBzaXplOworICAgICAgICBpZiAoIXNpemUpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OworCisgICAgICAgIEdSZWZQdHI8R0J5dGVBcnJheT4gYnl0ZUFycmF5ID0gYWRvcHRH
UmVmKGdfYnl0ZV9hcnJheV9zaXplZF9uZXcoKnNpemUpKTsKKyAgICAgICAgZ19ieXRlX2FycmF5
X3NldF9zaXplKGJ5dGVBcnJheS5nZXQoKSwgKnNpemUpOworICAgICAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlRml4ZWRMZW5ndGhEYXRhKGJ5dGVBcnJheS0+ZGF0YSwgKnNpemUpKQorICAgICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgcmV0dXJuIGJ5dGVBcnJheTsKICAgICB9
CiB9OwogCkBAIC0xMzksMjUgKzE0MiwyOSBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBDb2RlcjxXZWJD
b3JlOjpDZXJ0aWZpCiAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGNl
cnRpZmljYXRlSW5mby50bHNFcnJvcnMoKSk7CiAgICAgfQogCi0gICAgc3RhdGljIGJvb2wgZGVj
b2RlKERlY29kZXImIGRlY29kZXIsIFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyYgY2VydGlmaWNh
dGVJbmZvKQorICAgIHN0YXRpYyBPcHRpb25hbDxXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8+IGRl
Y29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIHsKLSAgICAgICAgVmVjdG9yPEdSZWZQdHI8R0J5
dGVBcnJheT4+IGNlcnRpZmljYXRlc0RhdGFMaXN0OwotICAgICAgICBpZiAoIWRlY29kZXIuZGVj
b2RlKGNlcnRpZmljYXRlc0RhdGFMaXN0KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgT3B0aW9uYWw8VmVjdG9yPEdSZWZQdHI8R0J5dGVBcnJheT4+PiBjZXJ0aWZpY2F0ZXNE
YXRhTGlzdDsKKyAgICAgICAgZGVjb2RlciA+PiBjZXJ0aWZpY2F0ZXNEYXRhTGlzdDsKKyAgICAg
ICAgaWYgKCFjZXJ0aWZpY2F0ZXNEYXRhTGlzdCkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CisKKyAgICAgICAgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvIGNlcnRpZmljYXRlSW5m
bzsKKyAgICAgICAgaWYgKGNlcnRpZmljYXRlc0RhdGFMaXN0LT5pc0VtcHR5KCkpCisgICAgICAg
ICAgICByZXR1cm4gY2VydGlmaWNhdGVJbmZvOwogCi0gICAgICAgIGlmIChjZXJ0aWZpY2F0ZXNE
YXRhTGlzdC5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgYXV0
byBjZXJ0aWZpY2F0ZSA9IGNlcnRpZmljYXRlRnJvbUNlcnRpZmljYXRlc0RhdGFMaXN0KGNlcnRp
ZmljYXRlc0RhdGFMaXN0KTsKKyAgICAgICAgYXV0byBjZXJ0aWZpY2F0ZSA9IGNlcnRpZmljYXRl
RnJvbUNlcnRpZmljYXRlc0RhdGFMaXN0KGNlcnRpZmljYXRlc0RhdGFMaXN0LnZhbHVlKCkpOwog
ICAgICAgICBpZiAoIWNlcnRpZmljYXRlKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAgICAgY2VydGlmaWNhdGVJbmZvLnNl
dENlcnRpZmljYXRlKGNlcnRpZmljYXRlLmdldCgpKTsKIAotICAgICAgICB1aW50MzJfdCB0bHNF
cnJvcnM7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUodGxzRXJyb3JzKSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgY2VydGlmaWNhdGVJbmZvLnNldFRMU0Vycm9ycyhz
dGF0aWNfY2FzdDxHVGxzQ2VydGlmaWNhdGVGbGFncz4odGxzRXJyb3JzKSk7CisgICAgICAgIE9w
dGlvbmFsPHVpbnQzMl90PiB0bHNFcnJvcnM7CisgICAgICAgIGRlY29kZXIgPj4gdGxzRXJyb3Jz
OworICAgICAgICBpZiAoIXRsc0Vycm9ycykKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CisgICAgICAgIGNlcnRpZmljYXRlSW5mby5zZXRUTFNFcnJvcnMoc3RhdGljX2Nhc3Q8R1Rs
c0NlcnRpZmljYXRlRmxhZ3M+KCp0bHNFcnJvcnMpKTsKIAotICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgcmV0dXJuIGNlcnRpZmljYXRlSW5mbzsKICAgICB9CiB9OwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXNwb25zZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJl
c3BvbnNlLmgJKHJldmlzaW9uIDI1OTg5OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvc291cC9SZXNvdXJjZVJlc3BvbnNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTkyLDcgKzky
LDcgQEAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KIHZvaWQgUmVzb3VyY2VSZXNwb25zZTo6ZW5j
b2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB7CiAgICAgUmVzb3VyY2VSZXNwb25zZUJhc2U6
OmVuY29kZShlbmNvZGVyKTsKLSAgICBlbmNvZGVyLmVuY29kZUVudW0obV9zb3VwRmxhZ3MpOwor
ICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG1fc291cEZsYWdzKTsKIH0KIAog
dGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KQEAgLTEwMCw4ICsxMDAsMTIgQEAgYm9vbCBSZXNvdXJj
ZVJlc3BvbnNlOjpkZWNvZGUoRGVjb2RlciYgZAogewogICAgIGlmICghUmVzb3VyY2VSZXNwb25z
ZUJhc2U6OmRlY29kZShkZWNvZGVyLCByZXNwb25zZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBpZiAoIWRlY29kZXIuZGVjb2RlRW51bShyZXNwb25zZS5tX3NvdXBGbGFncykpCisgICAg
T3B0aW9uYWw8dWludDY0X3Q+IHNvdXBGbGFnczsKKyAgICBkZWNvZGVyID4+IHNvdXBGbGFnczsK
KyAgICBpZiAoIXNvdXBGbGFncykKICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIC8vIEZJWE1F
OiBWZXJpZnkgdGhhdCB0aGlzIGlzIGEgdmFsaWQgdmFsdWUgZm9yIFNvdXBNZXNzYWdlRmxhZ3Mu
CisgICAgcmVzcG9uc2UubV9zb3VwRmxhZ3MgPSBzdGF0aWNfY2FzdDxTb3VwTWVzc2FnZUZsYWdz
Pigqc291cEZsYWdzKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogU291cmNlL1dlYkNv
cmUvd29ya2Vycy9zZXJ2aWNlL1NlcnZpY2VXb3JrZXJDb250ZXh0RGF0YS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9TZXJ2aWNlV29ya2VyQ29udGV4dERh
dGEuaAkocmV2aXNpb24gMjU5ODk4KQorKysgU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNl
L1NlcnZpY2VXb3JrZXJDb250ZXh0RGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSwyMCArNTEs
MjggQEAgc3RydWN0IFNlcnZpY2VXb3JrZXJDb250ZXh0RGF0YSB7CiAgICAgICAgICAgICBlbmNv
ZGVyIDw8IHNjcmlwdCA8PCByZXNwb25zZVVSTCA8PCBtaW1lVHlwZTsKICAgICAgICAgfQogCi0g
ICAgICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVy
JiBkZWNvZGVyLCBJbXBvcnRlZFNjcmlwdCYgc2NyaXB0KQorICAgICAgICB0ZW1wbGF0ZTxjbGFz
cyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8SW1wb3J0ZWRTY3JpcHQ+IGRlY29kZShEZWNvZGVy
JiBkZWNvZGVyKQogICAgICAgICB7Ci0gICAgICAgICAgICBJbXBvcnRlZFNjcmlwdCBpbXBvcnRl
ZFNjcmlwdDsKLSAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaW1wb3J0ZWRTY3JpcHQu
c2NyaXB0KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgICAgIGlm
ICghZGVjb2Rlci5kZWNvZGUoaW1wb3J0ZWRTY3JpcHQucmVzcG9uc2VVUkwpKQotICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShp
bXBvcnRlZFNjcmlwdC5taW1lVHlwZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgICAgICAgICBzY3JpcHQgPSBXVEZNb3ZlKGltcG9ydGVkU2NyaXB0KTsKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgT3B0aW9uYWw8U3RyaW5nPiBzY3JpcHQ7Cisg
ICAgICAgICAgICBkZWNvZGVyID4+IHNjcmlwdDsKKyAgICAgICAgICAgIGlmICghc2NyaXB0KQor
ICAgICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIE9wdGlvbmFsPFVSTD4gcmVzcG9uc2VVUkw7CisgICAgICAgICAgICBkZWNvZGVyID4+
IHJlc3BvbnNlVVJMOworICAgICAgICAgICAgaWYgKCFyZXNwb25zZVVSTCkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICAgICAgCisgICAgICAgICAgICBPcHRp
b25hbDxTdHJpbmc+IG1pbWVUeXBlOworICAgICAgICAgICAgZGVjb2RlciA+PiBtaW1lVHlwZTsK
KyAgICAgICAgICAgIGlmICghbWltZVR5cGUpCisgICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgcmV0dXJuIHt7CisgICAgICAgICAg
ICAgICAgV1RGTW92ZSgqc2NyaXB0KSwKKyAgICAgICAgICAgICAgICBXVEZNb3ZlKCpyZXNwb25z
ZVVSTCksCisgICAgICAgICAgICAgICAgV1RGTW92ZSgqbWltZVR5cGUpCisgICAgICAgICAgICB9
fTsKICAgICAgICAgfQogICAgIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2Vy
dmljZS9zZXJ2ZXIvUmVnaXN0cmF0aW9uRGF0YWJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9zZXJ2ZXIvUmVnaXN0cmF0aW9uRGF0YWJhc2UuY3Bw
CShyZXZpc2lvbiAyNTk4OTgpCisrKyBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2Uvc2Vy
dmVyL1JlZ2lzdHJhdGlvbkRhdGFiYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQyLDcgKzM0
Miw3IEBAIHZvaWQgUmVnaXN0cmF0aW9uRGF0YWJhc2U6OmRvUHVzaENoYW5nZXMKICAgICAgICAg
ZGF0YS5jb250ZW50U2VjdXJpdHlQb2xpY3kuZW5jb2RlKGNzcEVuY29kZXIpOwogCiAgICAgICAg
IFdURjo6UGVyc2lzdGVuY2U6OkVuY29kZXIgc2NyaXB0UmVzb3VyY2VNYXBFbmNvZGVyOwotICAg
ICAgICBzY3JpcHRSZXNvdXJjZU1hcEVuY29kZXIuZW5jb2RlKGRhdGEuc2NyaXB0UmVzb3VyY2VN
YXApOworICAgICAgICBzY3JpcHRSZXNvdXJjZU1hcEVuY29kZXIgPDwgZGF0YS5zY3JpcHRSZXNv
dXJjZU1hcDsKIAogICAgICAgICBpZiAoc3FsLmJpbmRUZXh0KDEsIGRhdGEucmVnaXN0cmF0aW9u
LmtleS50b0RhdGFiYXNlS2V5KCkpICE9IFNRTElURV9PSwogICAgICAgICAgICAgfHwgc3FsLmJp
bmRUZXh0KDIsIGRhdGEucmVnaXN0cmF0aW9uLnNjb3BlVVJMLnByb3RvY29sSG9zdEFuZFBvcnQo
KSkgIT0gU1FMSVRFX09LCkBAIC0zOTIsMTkgKzM5MiwyMyBAQCBTdHJpbmcgUmVnaXN0cmF0aW9u
RGF0YWJhc2U6OmltcG9ydFJlY29yCiAgICAgICAgIFZlY3Rvcjx1aW50OF90PiBjb250ZW50U2Vj
dXJpdHlQb2xpY3lEYXRhOwogICAgICAgICBzcWwuZ2V0Q29sdW1uQmxvYkFzVmVjdG9yKDksIGNv
bnRlbnRTZWN1cml0eVBvbGljeURhdGEpOwogICAgICAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNv
ZGVyIGNzcERlY29kZXIoY29udGVudFNlY3VyaXR5UG9saWN5RGF0YS5kYXRhKCksIGNvbnRlbnRT
ZWN1cml0eVBvbGljeURhdGEuc2l6ZSgpKTsKLSAgICAgICAgQ29udGVudFNlY3VyaXR5UG9saWN5
UmVzcG9uc2VIZWFkZXJzIGNvbnRlbnRTZWN1cml0eVBvbGljeTsKLSAgICAgICAgaWYgKGNvbnRl
bnRTZWN1cml0eVBvbGljeURhdGEuc2l6ZSgpICYmICFDb250ZW50U2VjdXJpdHlQb2xpY3lSZXNw
b25zZUhlYWRlcnM6OmRlY29kZShjc3BEZWNvZGVyLCBjb250ZW50U2VjdXJpdHlQb2xpY3kpKQot
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIE9wdGlvbmFsPENvbnRlbnRTZWN1cml0eVBv
bGljeVJlc3BvbnNlSGVhZGVycz4gY29udGVudFNlY3VyaXR5UG9saWN5OworICAgICAgICBpZiAo
Y29udGVudFNlY3VyaXR5UG9saWN5RGF0YS5zaXplKCkpIHsKKyAgICAgICAgICAgIGNzcERlY29k
ZXIgPj4gY29udGVudFNlY3VyaXR5UG9saWN5OworICAgICAgICAgICAgaWYgKCFjb250ZW50U2Vj
dXJpdHlQb2xpY3kpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KIAogICAg
ICAgICBhdXRvIHJlZmVycmVyUG9saWN5ID0gc3FsLmdldENvbHVtblRleHQoMTApOwogCiAgICAg
ICAgIFZlY3Rvcjx1aW50OF90PiBzY3JpcHRSZXNvdXJjZU1hcERhdGE7CiAgICAgICAgIHNxbC5n
ZXRDb2x1bW5CbG9iQXNWZWN0b3IoMTEsIHNjcmlwdFJlc291cmNlTWFwRGF0YSk7Ci0gICAgICAg
IEhhc2hNYXA8VVJMLCBTZXJ2aWNlV29ya2VyQ29udGV4dERhdGE6OkltcG9ydGVkU2NyaXB0PiBz
Y3JpcHRSZXNvdXJjZU1hcDsKKyAgICAgICAgT3B0aW9uYWw8SGFzaE1hcDxVUkwsIFNlcnZpY2VX
b3JrZXJDb250ZXh0RGF0YTo6SW1wb3J0ZWRTY3JpcHQ+PiBzY3JpcHRSZXNvdXJjZU1hcDsKIAog
ICAgICAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIHNjcmlwdFJlc291cmNlTWFwRGVjb2Rl
cihzY3JpcHRSZXNvdXJjZU1hcERhdGEuZGF0YSgpLCBzY3JpcHRSZXNvdXJjZU1hcERhdGEuc2l6
ZSgpKTsKICAgICAgICAgaWYgKHNjcmlwdFJlc291cmNlTWFwRGF0YS5zaXplKCkpIHsKLSAgICAg
ICAgICAgIGlmICghc2NyaXB0UmVzb3VyY2VNYXBEZWNvZGVyLmRlY29kZShzY3JpcHRSZXNvdXJj
ZU1hcCkpCisgICAgICAgICAgICBzY3JpcHRSZXNvdXJjZU1hcERlY29kZXIgPj4gc2NyaXB0UmVz
b3VyY2VNYXA7CisgICAgICAgICAgICBpZiAoIXNjcmlwdFJlc291cmNlTWFwKQogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKQEAgLTQxOCw3ICs0MjIsNyBAQCBTdHJpbmcg
UmVnaXN0cmF0aW9uRGF0YWJhc2U6OmltcG9ydFJlY29yCiAgICAgICAgIGF1dG8gcmVnaXN0cmF0
aW9uSWRlbnRpZmllciA9IFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25JZGVudGlmaWVyOjpnZW5l
cmF0ZSgpOwogICAgICAgICBhdXRvIHNlcnZpY2VXb3JrZXJEYXRhID0gU2VydmljZVdvcmtlckRh
dGEgeyB3b3JrZXJJZGVudGlmaWVyLCBzY3JpcHRVUkwsIFNlcnZpY2VXb3JrZXJTdGF0ZTo6QWN0
aXZhdGVkLCAqd29ya2VyVHlwZSwgcmVnaXN0cmF0aW9uSWRlbnRpZmllciB9OwogICAgICAgICBh
dXRvIHJlZ2lzdHJhdGlvbiA9IFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EYXRhIHsgV1RGTW92
ZSgqa2V5KSwgcmVnaXN0cmF0aW9uSWRlbnRpZmllciwgV1RGTW92ZShzY29wZVVSTCksICp1cGRh
dGVWaWFDYWNoZSwgbGFzdFVwZGF0ZUNoZWNrVGltZSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxv
cHQsIFdURk1vdmUoc2VydmljZVdvcmtlckRhdGEpIH07Ci0gICAgICAgIGF1dG8gY29udGV4dERh
dGEgPSBTZXJ2aWNlV29ya2VyQ29udGV4dERhdGEgeyBXVEY6Om51bGxvcHQsIFdURk1vdmUocmVn
aXN0cmF0aW9uKSwgd29ya2VySWRlbnRpZmllciwgV1RGTW92ZShzY3JpcHQpLCBXVEZNb3ZlKGNv
bnRlbnRTZWN1cml0eVBvbGljeSksIFdURk1vdmUocmVmZXJyZXJQb2xpY3kpLCBXVEZNb3ZlKHNj
cmlwdFVSTCksICp3b3JrZXJUeXBlLCB0cnVlLCBXVEZNb3ZlKHNjcmlwdFJlc291cmNlTWFwKSB9
OworICAgICAgICBhdXRvIGNvbnRleHREYXRhID0gU2VydmljZVdvcmtlckNvbnRleHREYXRhIHsg
V1RGOjpudWxsb3B0LCBXVEZNb3ZlKHJlZ2lzdHJhdGlvbiksIHdvcmtlcklkZW50aWZpZXIsIFdU
Rk1vdmUoc2NyaXB0KSwgV1RGTW92ZSgqY29udGVudFNlY3VyaXR5UG9saWN5KSwgV1RGTW92ZShy
ZWZlcnJlclBvbGljeSksIFdURk1vdmUoc2NyaXB0VVJMKSwgKndvcmtlclR5cGUsIHRydWUsIFdU
Rk1vdmUoKnNjcmlwdFJlc291cmNlTWFwKSB9OwogCiAgICAgICAgIGNhbGxPbk1haW5UaHJlYWQo
W3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29udGV4dERhdGEgPSBjb250ZXh0RGF0
YS5pc29sYXRlZENvcHkoKV0oKSBtdXRhYmxlIHsKICAgICAgICAgICAgIHByb3RlY3RlZFRoaXMt
PmFkZFJlZ2lzdHJhdGlvblRvU3RvcmUoV1RGTW92ZShjb250ZXh0RGF0YSkpOwpJbmRleDogU291
cmNlL1dlYktpdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cJKHJldmlzaW9uIDI1OTg5OCkKKysrIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMzUgQEAKKzIwMjAtMDQtMTAgIEFsZXggQ2hyaXN0ZW5zZW4gIDxh
Y2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBQZXJzaXN0ZW50Q29kZXJzIHNob3Vs
ZCB1c2UgbW9kZXJuIGRlY29kaW5nIHN5bnRheAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA3NDk3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4g
QWRsZXIuCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdp
bmVDYWNoZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6ZGVjb2RlRE9NQ2Fj
aGVSZWNvcmQpOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlOjpkZWNvZGVS
ZWNvcmRIZWFkZXIpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFn
ZUVuZ2luZUNhY2hlcy5jcHA6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGVz
OjpyZWFkT3JpZ2luKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpkZWNvZGVDYWNo
ZXNOYW1lcyk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlQ29k
ZXJzLmNwcDoKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkNvZGVyPFdlYkNvcmU6OkhUVFBI
ZWFkZXJNYXA+OjpkZWNvZGUpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdv
cmtDYWNoZUVudHJ5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpFbnRyeTo6
ZGVjb2RlU3RvcmFnZVJlY29yZCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0
d29ya0NhY2hlS2V5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpLZXk6OmRl
Y29kZSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlS2V5Lmg6
CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5jcHA6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6ZGVjb2RlUmVjb3JkTWV0YURhdGEpOgor
ICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN1YnJlc291cmNlc0Vu
dHJ5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpTdWJyZXNvdXJjZUluZm86
OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6U3VicmVzb3Vy
Y2VJbmZvOjpkZWNvZGUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OlN1YnJlc291
cmNlc0VudHJ5OjpkZWNvZGVTdG9yYWdlUmVjb3JkKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vz
cy9jYWNoZS9OZXR3b3JrQ2FjaGVTdWJyZXNvdXJjZXNFbnRyeS5oOgorICAgICAgICAqIFNoYXJl
ZC9Vc2VyRGF0YS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlVzZXJEYXRhOjpkZWNvZGUpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJQ29udGVudFJ1bGVMaXN0U3RvcmUuY3BwOgorICAgICAg
ICAoQVBJOjpkZWNvZGVDb250ZW50UnVsZUxpc3RNZXRhRGF0YSk6CisKIDIwMjAtMDQtMTAgIENo
cmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBGaXJzdCByZW5kZXIgYWZ0
ZXIgYSBwcm9jZXNzIHN3YXAgZG9lcyBub3QgdXNlIGFjY2VsZXJhdGVkIHJlbmRlcmluZwpJbmRl
eDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVD
YWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZS5jcHAJKHJldmlzaW9uIDI1OTg5OCkKKysrIFNvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01NzIsNDUgKzU3Miw4MCBAQCBTdG9yYWdlOjpSZWNvcmQgQ2Fj
aGU6OmVuY29kZShjb25zdCBSZWNvCiAgICAgcmV0dXJuIHsgcmVjb3JkSW5mb3JtYXRpb24ua2V5
LCB7IH0sIGhlYWRlciwgYm9keSwgeyB9IH07CiB9CiAKLU9wdGlvbmFsPENhY2hlOjpEZWNvZGVk
UmVjb3JkPiBDYWNoZTo6ZGVjb2RlUmVjb3JkSGVhZGVyKGNvbnN0IFN0b3JhZ2U6OlJlY29yZCYg
c3RvcmFnZSkKK3N0YXRpYyBPcHRpb25hbDxXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6UmVjb3Jk
PiBkZWNvZGVET01DYWNoZVJlY29yZChXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyJiBkZWNvZGVy
KQogewotICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgZGVjb2RlcihzdG9yYWdlLmhlYWRl
ci5kYXRhKCksIHN0b3JhZ2UuaGVhZGVyLnNpemUoKSk7Ci0KLSAgICBSZWNvcmQgcmVjb3JkOwot
Ci0gICAgZG91YmxlIGluc2VydGlvblRpbWU7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShpbnNl
cnRpb25UaW1lKSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIHVpbnQ2NF90
IHNpemU7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShzaXplKSkKLSAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKLQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVjb3JkLnJlcXVlc3RIZWFk
ZXJzR3VhcmQpKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgaWYgKCFyZWNv
cmQucmVxdWVzdC5kZWNvZGVXaXRob3V0UGxhdGZvcm1EYXRhKGRlY29kZXIpKQorICAgIE9wdGlv
bmFsPEZldGNoSGVhZGVyczo6R3VhcmQ+IHJlcXVlc3RIZWFkZXJzR3VhcmQ7CisgICAgZGVjb2Rl
ciA+PiByZXF1ZXN0SGVhZGVyc0d1YXJkOworICAgIGlmICghcmVxdWVzdEhlYWRlcnNHdWFyZCkK
KyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAKKyAgICBSZXNvdXJjZVJlcXVlc3Qg
cmVxdWVzdDsKKyAgICBpZiAoIXJlcXVlc3QuZGVjb2RlV2l0aG91dFBsYXRmb3JtRGF0YShkZWNv
ZGVyKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAKKyAgICBGZXRjaE9wdGlv
bnMgb3B0aW9uczsKKyAgICBpZiAoIUZldGNoT3B0aW9uczo6ZGVjb2RlUGVyc2lzdGVudChkZWNv
ZGVyLCBvcHRpb25zKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAKKyAgICBP
cHRpb25hbDxTdHJpbmc+IHJlZmVycmVyOworICAgIGRlY29kZXIgPj4gcmVmZXJyZXI7CisgICAg
aWYgKCFyZWZlcnJlcikKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAKKyAgICBP
cHRpb25hbDxGZXRjaEhlYWRlcnM6Okd1YXJkPiByZXNwb25zZUhlYWRlcnNHdWFyZDsKKyAgICBk
ZWNvZGVyID4+IHJlc3BvbnNlSGVhZGVyc0d1YXJkOworICAgIGlmICghcmVzcG9uc2VIZWFkZXJz
R3VhcmQpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBSZXNvdXJjZVJlc3Bv
bnNlIHJlc3BvbnNlOworICAgIGlmICghUmVzb3VyY2VSZXNwb25zZTo6ZGVjb2RlKGRlY29kZXIs
IHJlc3BvbnNlKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAKKyAgICBPcHRp
b25hbDx1aW50NjRfdD4gcmVzcG9uc2VCb2R5U2l6ZTsKKyAgICBkZWNvZGVyID4+IHJlc3BvbnNl
Qm9keVNpemU7CisgICAgaWYgKCFyZXNwb25zZUJvZHlTaXplKQogICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwogCi0gICAgaWYgKCFGZXRjaE9wdGlvbnM6OmRlY29kZVBlcnNpc3RlbnQoZGVj
b2RlciwgcmVjb3JkLm9wdGlvbnMpKQorICAgIGlmICghZGVjb2Rlci52ZXJpZnlDaGVja3N1bSgp
KQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShyZWNvcmQucmVmZXJyZXIpKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJl
dHVybiB7eworICAgICAgICAwLAorICAgICAgICAwLAorICAgICAgICBXVEZNb3ZlKCpyZXF1ZXN0
SGVhZGVyc0d1YXJkKSwKKyAgICAgICAgV1RGTW92ZShyZXF1ZXN0KSwKKyAgICAgICAgV1RGTW92
ZShvcHRpb25zKSwKKyAgICAgICAgV1RGTW92ZSgqcmVmZXJyZXIpLAorICAgICAgICBXVEZNb3Zl
KCpyZXNwb25zZUhlYWRlcnNHdWFyZCksCisgICAgICAgIFdURk1vdmUocmVzcG9uc2UpLAorICAg
ICAgICB7IH0sCisgICAgICAgIFdURk1vdmUoKnJlc3BvbnNlQm9keVNpemUpCisgICAgfX07Cit9
CiAKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlY29yZC5yZXNwb25zZUhlYWRlcnNHdWFyZCkp
Ci0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CitPcHRpb25hbDxDYWNoZTo6RGVjb2RlZFJl
Y29yZD4gQ2FjaGU6OmRlY29kZVJlY29yZEhlYWRlcihjb25zdCBTdG9yYWdlOjpSZWNvcmQmIHN0
b3JhZ2UpCit7CisgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyKHN0b3JhZ2Uu
aGVhZGVyLmRhdGEoKSwgc3RvcmFnZS5oZWFkZXIuc2l6ZSgpKTsKIAotICAgIGlmICghZGVjb2Rl
ci5kZWNvZGUocmVjb3JkLnJlc3BvbnNlKSkKKyAgICBPcHRpb25hbDxkb3VibGU+IGluc2VydGlv
blRpbWU7CisgICAgZGVjb2RlciA+PiBpbnNlcnRpb25UaW1lOworICAgIGlmICghaW5zZXJ0aW9u
VGltZSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUocmVjb3JkLnJlc3BvbnNlQm9keVNpemUpKQorICAgIE9wdGlvbmFsPHVpbnQ2NF90PiBz
aXplOworICAgIGRlY29kZXIgPj4gc2l6ZTsKKyAgICBpZiAoIXNpemUpCiAgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiAKLSAgICBpZiAoIWRlY29kZXIudmVyaWZ5Q2hlY2tzdW0oKSkKKyAg
ICBPcHRpb25hbDxXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6UmVjb3JkPiByZWNvcmQgPSBkZWNv
ZGVET01DYWNoZVJlY29yZChkZWNvZGVyKTsKKyAgICBpZiAoIXJlY29yZCkKICAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJldHVybiBEZWNvZGVkUmVjb3JkIHsgaW5zZXJ0aW9u
VGltZSwgc2l6ZSwgV1RGTW92ZShyZWNvcmQpIH07CisgICAgcmV0dXJuIHt7CisgICAgICAgIFdU
Rk1vdmUoKmluc2VydGlvblRpbWUpLAorICAgICAgICBXVEZNb3ZlKCpzaXplKSwKKyAgICAgICAg
V1RGTW92ZSgqcmVjb3JkKQorICAgIH19OwogfQogCiBPcHRpb25hbDxSZWNvcmQ+IENhY2hlOjpk
ZWNvZGUoY29uc3QgU3RvcmFnZTo6UmVjb3JkJiBzdG9yYWdlKQpJbmRleDogU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdl
RW5naW5lQ2FjaGVzLmNwcAkocmV2aXNpb24gMjU5ODk4KQorKysgU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMTIsMjMgKzExMiwyMiBAQCB2b2lkIENhY2hlczo6c3RvcmVPcmlnaW4oQ29tcGxl
dGlvbkNhbGxiCiAKIE9wdGlvbmFsPFdlYkNvcmU6OkNsaWVudE9yaWdpbj4gQ2FjaGVzOjpyZWFk
T3JpZ2luKGNvbnN0IERhdGEmIGRhdGEpCiB7Ci0gICAgLy8gRklYTUU6IFdlIHNob3VsZCBiZSBh
YmxlIHRvIHVzZSBtb2Rlcm4gZGVjb2RlcnMgZm9yIHBlcnNpc3RlbnQgZGF0YS4KLSAgICBXZWJD
b3JlOjpTZWN1cml0eU9yaWdpbkRhdGEgdG9wT3JpZ2luLCBjbGllbnRPcmlnaW47CiAgICAgV1RG
OjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyKGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSk7
CiAKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHRvcE9yaWdpbi5wcm90b2NvbCkpCisgICAgT3B0
aW9uYWw8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhPiB0b3BPcmlnaW47CisgICAgZGVjb2Rl
ciA+PiB0b3BPcmlnaW47CisgICAgaWYgKCF0b3BPcmlnaW4pCiAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZSh0b3BPcmlnaW4uaG9zdCkpCi0gICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZSh0b3BPcmln
aW4ucG9ydCkpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgaWYgKCFkZWNvZGVy
LmRlY29kZShjbGllbnRPcmlnaW4ucHJvdG9jb2wpKQotICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoY2xpZW50T3JpZ2luLmhvc3QpKQotICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoY2xpZW50T3Jp
Z2luLnBvcnQpKQorCisgICAgT3B0aW9uYWw8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhPiBj
bGllbnRPcmlnaW47CisgICAgZGVjb2RlciA+PiBjbGllbnRPcmlnaW47CisgICAgaWYgKCFjbGll
bnRPcmlnaW4pCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgcmV0dXJuIFdlYkNv
cmU6OkNsaWVudE9yaWdpbiB7IFdURk1vdmUodG9wT3JpZ2luKSwgV1RGTW92ZShjbGllbnRPcmln
aW4pIH07CisKKyAgICByZXR1cm4ge3sKKyAgICAgICAgV1RGTW92ZSgqdG9wT3JpZ2luKSwKKyAg
ICAgICAgV1RGTW92ZSgqY2xpZW50T3JpZ2luKQorICAgIH19OwogfQogCiB2b2lkIENhY2hlczo6
aW5pdGlhbGl6ZShXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6Q29tcGxldGlvbkNhbGxiYWNrJiYg
Y2FsbGJhY2spCkBAIC00MTEsMjMgKzQxMCwyNiBAQCBzdGF0aWMgaW5saW5lIERhdGEgZW5jb2Rl
Q2FjaGVOYW1lcyhjb25zCiBzdGF0aWMgaW5saW5lIEV4cGVjdGVkPFZlY3RvcjxzdGQ6OnBhaXI8
U3RyaW5nLCBTdHJpbmc+PiwgRXJyb3I+IGRlY29kZUNhY2hlc05hbWVzKGNvbnN0IERhdGEmIGRh
dGEpCiB7CiAgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyKGRhdGEuZGF0YSgp
LCBkYXRhLnNpemUoKSk7Ci0gICAgdWludDY0X3QgY291bnQ7Ci0gICAgaWYgKCFkZWNvZGVyLmRl
Y29kZShjb3VudCkpCisgICAgT3B0aW9uYWw8dWludDY0X3Q+IGNvdW50OworICAgIGRlY29kZXIg
Pj4gY291bnQ7CisgICAgaWYgKCFjb3VudCkKICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVk
KEVycm9yOjpSZWFkRGlzayk7CiAKICAgICBWZWN0b3I8c3RkOjpwYWlyPFN0cmluZywgU3RyaW5n
Pj4gbmFtZXM7Ci0gICAgaWYgKCFuYW1lcy50cnlSZXNlcnZlQ2FwYWNpdHkoY291bnQpKQorICAg
IGlmICghbmFtZXMudHJ5UmVzZXJ2ZUNhcGFjaXR5KCpjb3VudCkpCiAgICAgICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZChFcnJvcjo6UmVhZERpc2spOwogCi0gICAgZm9yIChzaXplX3QgaW5kZXgg
PSAwOyBpbmRleCA8IGNvdW50OyArK2luZGV4KSB7Ci0gICAgICAgIFN0cmluZyBuYW1lOwotICAg
ICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKG5hbWUpKQorICAgIGZvciAoc2l6ZV90IGluZGV4ID0g
MDsgaW5kZXggPCAqY291bnQ7ICsraW5kZXgpIHsKKyAgICAgICAgT3B0aW9uYWw8U3RyaW5nPiBu
YW1lOworICAgICAgICBkZWNvZGVyID4+IG5hbWU7CisgICAgICAgIGlmICghbmFtZSkKICAgICAg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChFcnJvcjo6UmVhZERpc2spOwotICAgICAgICBT
dHJpbmcgdW5pcXVlTmFtZTsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZSh1bmlxdWVOYW1l
KSkKKyAgICAgICAgT3B0aW9uYWw8U3RyaW5nPiB1bmlxdWVOYW1lOworICAgICAgICBkZWNvZGVy
ID4+IHVuaXF1ZU5hbWU7CisgICAgICAgIGlmICghdW5pcXVlTmFtZSkKICAgICAgICAgICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZChFcnJvcjo6UmVhZERpc2spOwogCi0gICAgICAgIG5hbWVzLnVu
Y2hlY2tlZEFwcGVuZChzdGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+IHsgV1RGTW92ZShuYW1lKSwg
V1RGTW92ZSh1bmlxdWVOYW1lKSB9KTsKKyAgICAgICAgbmFtZXMudW5jaGVja2VkQXBwZW5kKHsg
V1RGTW92ZSgqbmFtZSksIFdURk1vdmUoKnVuaXF1ZU5hbWUpIH0pOwogICAgIH0KICAgICByZXR1
cm4gbmFtZXM7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05l
dHdvcmtDYWNoZUNvZGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVDb2RlcnMuY3BwCShyZXZpc2lvbiAyNTk4OTgpCisr
KyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUNvZGVycy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDIxICs0MCwyNiBAQCB2b2lkIENvZGVyPFdlYkNvcmU6
OkhUVFBIZWFkZXJNYXA+OjplbmNvCiAgICAgfQogfQogCi1ib29sIENvZGVyPFdlYkNvcmU6OkhU
VFBIZWFkZXJNYXA+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgV2ViQ29yZTo6SFRUUEhlYWRl
ck1hcCYgaGVhZGVycykKK09wdGlvbmFsPFdlYkNvcmU6OkhUVFBIZWFkZXJNYXA+IENvZGVyPFdl
YkNvcmU6OkhUVFBIZWFkZXJNYXA+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIHsKLSAgICB1
aW50NjRfdCBoZWFkZXJzU2l6ZTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGhlYWRlcnNTaXpl
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGZvciAodWludDY0X3QgaSA9IDA7IGkgPCBo
ZWFkZXJzU2l6ZTsgKytpKSB7Ci0gICAgICAgIFN0cmluZyBuYW1lOwotICAgICAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKG5hbWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBT
dHJpbmcgdmFsdWU7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUodmFsdWUpKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBoZWFkZXJzLmFwcGVuZChuYW1lLCB2YWx1ZSk7
CisgICAgT3B0aW9uYWw8dWludDY0X3Q+IGhlYWRlcnNTaXplOworICAgIGRlY29kZXIgPj4gaGVh
ZGVyc1NpemU7CisgICAgaWYgKCFoZWFkZXJzU2l6ZSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKKworICAgIFdlYkNvcmU6OkhUVFBIZWFkZXJNYXAgaGVhZGVyczsKKyAgICBmb3IgKHVp
bnQ2NF90IGkgPSAwOyBpIDwgKmhlYWRlcnNTaXplOyArK2kpIHsKKyAgICAgICAgT3B0aW9uYWw8
U3RyaW5nPiBuYW1lOworICAgICAgICBkZWNvZGVyID4+IG5hbWU7CisgICAgICAgIGlmICghbmFt
ZSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIE9wdGlvbmFsPFN0
cmluZz4gdmFsdWU7CisgICAgICAgIGRlY29kZXIgPj4gdmFsdWU7CisgICAgICAgIGlmICghdmFs
dWUpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICBoZWFkZXJzLmFw
cGVuZChXVEZNb3ZlKCpuYW1lKSwgV1RGTW92ZSgqdmFsdWUpKTsKICAgICB9Ci0gICAgcmV0dXJu
IHRydWU7CisgICAgcmV0dXJuIFdURk1vdmUoaGVhZGVycyk7CiB9CiAKIH0KSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlQ29kZXJzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVD
b2RlcnMuaAkocmV2aXNpb24gMjU5ODk4KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9jYWNoZS9OZXR3b3JrQ2FjaGVDb2RlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYs
NyBAQCBuYW1lc3BhY2UgUGVyc2lzdGVuY2UgewogCiB0ZW1wbGF0ZTw+IHN0cnVjdCBDb2RlcjxX
ZWJDb3JlOjpIVFRQSGVhZGVyTWFwPiB7CiAgICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXIm
LCBjb25zdCBXZWJDb3JlOjpIVFRQSGVhZGVyTWFwJik7Ci0gICAgc3RhdGljIGJvb2wgZGVjb2Rl
KERlY29kZXImLCBXZWJDb3JlOjpIVFRQSGVhZGVyTWFwJik7CisgICAgc3RhdGljIE9wdGlvbmFs
PFdlYkNvcmU6OkhUVFBIZWFkZXJNYXA+IGRlY29kZShEZWNvZGVyJik7CiB9OwogCiB9CkluZGV4
OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUVudHJ5LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdv
cmtDYWNoZUVudHJ5LmNwcAkocmV2aXNpb24gMjU5ODk4KQorKysgU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVFbnRyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTExMiwzMSArMTEyLDQxIEBAIHN0ZDo6dW5pcXVlX3B0cjxFbnRyeT4gRW50cnk6OmRlY29kZVN0
b3IKICAgICBhdXRvIGVudHJ5ID0gbWFrZVVuaXF1ZTxFbnRyeT4oc3RvcmFnZUVudHJ5KTsKIAog
ICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgZGVjb2RlcihzdG9yYWdlRW50cnkuaGVhZGVy
LmRhdGEoKSwgc3RvcmFnZUVudHJ5LmhlYWRlci5zaXplKCkpOwotICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUoZW50cnktPm1fcmVzcG9uc2UpKQorICAgIFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2Ug
cmVzcG9uc2U7CisgICAgaWYgKCFXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlOjpkZWNvZGUoZGVj
b2RlciwgcmVzcG9uc2UpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBlbnRyeS0+bV9y
ZXNwb25zZSA9IFdURk1vdmUocmVzcG9uc2UpOwogICAgIGVudHJ5LT5tX3Jlc3BvbnNlLnNldFNv
dXJjZShXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlOjpTb3VyY2U6OkRpc2tDYWNoZSk7CiAKLSAg
ICBib29sIGhhc1ZhcnlpbmdSZXF1ZXN0SGVhZGVyczsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KGhhc1ZhcnlpbmdSZXF1ZXN0SGVhZGVycykpCisgICAgT3B0aW9uYWw8Ym9vbD4gaGFzVmFyeWlu
Z1JlcXVlc3RIZWFkZXJzOworICAgIGRlY29kZXIgPj4gaGFzVmFyeWluZ1JlcXVlc3RIZWFkZXJz
OworICAgIGlmICghaGFzVmFyeWluZ1JlcXVlc3RIZWFkZXJzKQogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKIAotICAgIGlmIChoYXNWYXJ5aW5nUmVxdWVzdEhlYWRlcnMpIHsKLSAgICAgICAgaWYg
KCFkZWNvZGVyLmRlY29kZShlbnRyeS0+bV92YXJ5aW5nUmVxdWVzdEhlYWRlcnMpKQorICAgIGlm
ICgqaGFzVmFyeWluZ1JlcXVlc3RIZWFkZXJzKSB7CisgICAgICAgIE9wdGlvbmFsPFZlY3Rvcjxz
dGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+Pj4gdmFyeWluZ1JlcXVlc3RIZWFkZXJzOworICAgICAg
ICBkZWNvZGVyID4+IHZhcnlpbmdSZXF1ZXN0SGVhZGVyczsKKyAgICAgICAgaWYgKCF2YXJ5aW5n
UmVxdWVzdEhlYWRlcnMpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgZW50
cnktPm1fdmFyeWluZ1JlcXVlc3RIZWFkZXJzID0gV1RGTW92ZSgqdmFyeWluZ1JlcXVlc3RIZWFk
ZXJzKTsKICAgICB9CiAKLSAgICBib29sIGlzUmVkaXJlY3Q7Ci0gICAgaWYgKCFkZWNvZGVyLmRl
Y29kZShpc1JlZGlyZWN0KSkKKyAgICBPcHRpb25hbDxib29sPiBpc1JlZGlyZWN0OworICAgIGRl
Y29kZXIgPj4gaXNSZWRpcmVjdDsKKyAgICBpZiAoIWlzUmVkaXJlY3QpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwogCi0gICAgaWYgKGlzUmVkaXJlY3QpIHsKKyAgICBpZiAoKmlzUmVkaXJlY3Qp
IHsKICAgICAgICAgZW50cnktPm1fcmVkaXJlY3RSZXF1ZXN0LmVtcGxhY2UoKTsKICAgICAgICAg
aWYgKCFlbnRyeS0+bV9yZWRpcmVjdFJlcXVlc3QtPmRlY29kZVdpdGhvdXRQbGF0Zm9ybURhdGEo
ZGVjb2RlcikpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKGVudHJ5LT5tX21heEFnZUNhcCkpCisgICAgT3B0aW9uYWw8T3B0aW9u
YWw8U2Vjb25kcz4+IG1heEFnZUNhcDsKKyAgICBkZWNvZGVyID4+IG1heEFnZUNhcDsKKyAgICBp
ZiAoIW1heEFnZUNhcCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgZW50cnktPm1fbWF4
QWdlQ2FwID0gV1RGTW92ZSgqbWF4QWdlQ2FwKTsKIAogICAgIGlmICghZGVjb2Rlci52ZXJpZnlD
aGVja3N1bSgpKSB7CiAgICAgICAgIExPRyhOZXR3b3JrQ2FjaGUsICIoTmV0d29ya1Byb2Nlc3Mp
IGNoZWNrc3VtIHZlcmlmaWNhdGlvbiBmYWlsdXJlXG4iKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlS2V5LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUtleS5jcHAJKHJl
dmlzaW9uIDI1OTg5OCkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0
d29ya0NhY2hlS2V5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTczLDkgKzE3Myw0NyBAQCB2b2lk
IEtleTo6ZW5jb2RlKFdURjo6UGVyc2lzdGVuY2U6OkVuY29kCiAgICAgZW5jb2RlciA8PCBtX3Bh
cnRpdGlvbkhhc2g7CiB9CiAKLWJvb2wgS2V5OjpkZWNvZGUoV1RGOjpQZXJzaXN0ZW5jZTo6RGVj
b2RlciYgZGVjb2RlciwgS2V5JiBrZXkpCitPcHRpb25hbDxLZXk+IEtleTo6ZGVjb2RlKFdURjo6
UGVyc2lzdGVuY2U6OkRlY29kZXImIGRlY29kZXIpCiB7Ci0gICAgcmV0dXJuIGRlY29kZXIuZGVj
b2RlKGtleS5tX3BhcnRpdGlvbikgJiYgZGVjb2Rlci5kZWNvZGUoa2V5Lm1fdHlwZSkgJiYgZGVj
b2Rlci5kZWNvZGUoa2V5Lm1faWRlbnRpZmllcikgJiYgZGVjb2Rlci5kZWNvZGUoa2V5Lm1fcmFu
Z2UpICYmIGRlY29kZXIuZGVjb2RlKGtleS5tX2hhc2gpICYmIGRlY29kZXIuZGVjb2RlKGtleS5t
X3BhcnRpdGlvbkhhc2gpOworICAgIEtleSBrZXk7CisgICAgCisgICAgT3B0aW9uYWw8U3RyaW5n
PiBwYXJ0aXRpb247CisgICAgZGVjb2RlciA+PiBwYXJ0aXRpb247CisgICAgaWYgKCFwYXJ0aXRp
b24pCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAga2V5Lm1fcGFydGl0aW9uID0g
V1RGTW92ZSgqcGFydGl0aW9uKTsKKworICAgIE9wdGlvbmFsPFN0cmluZz4gdHlwZTsKKyAgICBk
ZWNvZGVyID4+IHR5cGU7CisgICAgaWYgKCF0eXBlKQorICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OworICAgIGtleS5tX3R5cGUgPSBXVEZNb3ZlKCp0eXBlKTsKKworICAgIE9wdGlvbmFsPFN0
cmluZz4gaWRlbnRpZmllcjsKKyAgICBkZWNvZGVyID4+IGlkZW50aWZpZXI7CisgICAgaWYgKCFp
ZGVudGlmaWVyKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIGtleS5tX2lkZW50
aWZpZXIgPSBXVEZNb3ZlKCppZGVudGlmaWVyKTsKKworICAgIE9wdGlvbmFsPFN0cmluZz4gcmFu
Z2U7CisgICAgZGVjb2RlciA+PiByYW5nZTsKKyAgICBpZiAoIXJhbmdlKQorICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OworICAgIGtleS5tX3JhbmdlID0gV1RGTW92ZSgqcmFuZ2UpOworCisg
ICAgT3B0aW9uYWw8SGFzaFR5cGU+IGhhc2g7CisgICAgZGVjb2RlciA+PiBoYXNoOworICAgIGlm
ICghaGFzaCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBrZXkubV9oYXNoID0g
V1RGTW92ZSgqaGFzaCk7CisKKyAgICBPcHRpb25hbDxIYXNoVHlwZT4gcGFydGl0aW9uSGFzaDsK
KyAgICBkZWNvZGVyID4+IHBhcnRpdGlvbkhhc2g7CisgICAgaWYgKCFwYXJ0aXRpb25IYXNoKQor
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIGtleS5tX3BhcnRpdGlvbkhhc2ggPSBX
VEZNb3ZlKCpwYXJ0aXRpb25IYXNoKTsKKworICAgIHJldHVybiB7IFdURk1vdmUoa2V5KSB9Owog
fQogCiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtD
YWNoZUtleS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvTmV0d29ya0NhY2hlS2V5LmgJKHJldmlzaW9uIDI1OTg5OCkKKysrIFNvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlS2V5LmgJKHdvcmtpbmcgY29weSkKQEAg
LTgzLDcgKzgzLDcgQEAgcHVibGljOgogICAgIFN0cmluZyBwYXJ0aXRpb25IYXNoQXNTdHJpbmco
KSBjb25zdCB7IHJldHVybiBoYXNoQXNTdHJpbmcobV9wYXJ0aXRpb25IYXNoKTsgfQogCiAgICAg
dm9pZCBlbmNvZGUoV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2RlciYpIGNvbnN0OwotICAgIHN0YXRp
YyBib29sIGRlY29kZShXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyJiwgS2V5Jik7CisgICAgc3Rh
dGljIE9wdGlvbmFsPEtleT4gZGVjb2RlKFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXImKTsKIAog
ICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBLZXkmKSBjb25zdDsKICAgICBib29sIG9wZXJhdG9y
IT0oY29uc3QgS2V5JiBvdGhlcikgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7IH0K
SW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3Rv
cmFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmNwcAkocmV2aXNpb24gMjU5ODk4KQorKysgU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDM4LDI0ICs0MzgsNTggQEAgc3RhdGljIGJvb2wgZGVjb2RlUmVjb3JkTWV0
YURhdGEoUmVjb3JkTQogICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOwogICAgIGZpbGVEYXRhLmFw
cGx5KFsmbWV0YURhdGEsICZzdWNjZXNzXShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6
ZSkgewogICAgICAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIoZGF0YSwgc2l6
ZSk7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUobWV0YURhdGEuY2FjaGVTdG9yYWdlVmVy
c2lvbikpCisgICAgICAgIAorICAgICAgICBPcHRpb25hbDx1bnNpZ25lZD4gY2FjaGVTdG9yYWdl
VmVyc2lvbjsKKyAgICAgICAgZGVjb2RlciA+PiBjYWNoZVN0b3JhZ2VWZXJzaW9uOworICAgICAg
ICBpZiAoIWNhY2hlU3RvcmFnZVZlcnNpb24pCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUobWV0YURhdGEua2V5KSkKKyAgICAgICAgbWV0YURh
dGEuY2FjaGVTdG9yYWdlVmVyc2lvbiA9IFdURk1vdmUoKmNhY2hlU3RvcmFnZVZlcnNpb24pOwor
CisgICAgICAgIE9wdGlvbmFsPEtleT4ga2V5OworICAgICAgICBkZWNvZGVyID4+IGtleTsKKyAg
ICAgICAgaWYgKCFrZXkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUobWV0YURhdGEudGltZVN0YW1wKSkKKyAgICAgICAgbWV0YURhdGEua2V5
ID0gV1RGTW92ZSgqa2V5KTsKKworICAgICAgICBPcHRpb25hbDxXYWxsVGltZT4gdGltZVN0YW1w
OworICAgICAgICBkZWNvZGVyID4+IHRpbWVTdGFtcDsKKyAgICAgICAgaWYgKCF0aW1lU3RhbXAp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUo
bWV0YURhdGEuaGVhZGVySGFzaCkpCisgICAgICAgIG1ldGFEYXRhLnRpbWVTdGFtcCA9IFdURk1v
dmUoKnRpbWVTdGFtcCk7CisKKyAgICAgICAgT3B0aW9uYWw8U0hBMTo6RGlnZXN0PiBoZWFkZXJI
YXNoOworICAgICAgICBkZWNvZGVyID4+IGhlYWRlckhhc2g7CisgICAgICAgIGlmICghaGVhZGVy
SGFzaCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRl
Y29kZShtZXRhRGF0YS5oZWFkZXJTaXplKSkKKyAgICAgICAgbWV0YURhdGEuaGVhZGVySGFzaCA9
IFdURk1vdmUoKmhlYWRlckhhc2gpOworCisgICAgICAgIE9wdGlvbmFsPHVpbnQ2NF90PiBoZWFk
ZXJTaXplOworICAgICAgICBkZWNvZGVyID4+IGhlYWRlclNpemU7CisgICAgICAgIGlmICghaGVh
ZGVyU2l6ZSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFkZWNvZGVy
LmRlY29kZShtZXRhRGF0YS5ib2R5SGFzaCkpCisgICAgICAgIG1ldGFEYXRhLmhlYWRlclNpemUg
PSBXVEZNb3ZlKCpoZWFkZXJTaXplKTsKKworICAgICAgICBPcHRpb25hbDxTSEExOjpEaWdlc3Q+
IGJvZHlIYXNoOworICAgICAgICBkZWNvZGVyID4+IGJvZHlIYXNoOworICAgICAgICBpZiAoIWJv
ZHlIYXNoKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlKG1ldGFEYXRhLmJvZHlTaXplKSkKKyAgICAgICAgbWV0YURhdGEuYm9keUhhc2ggPSBX
VEZNb3ZlKCpib2R5SGFzaCk7CisKKyAgICAgICAgT3B0aW9uYWw8dWludDY0X3Q+IGJvZHlTaXpl
OworICAgICAgICBkZWNvZGVyID4+IGJvZHlTaXplOworICAgICAgICBpZiAoIWJvZHlTaXplKQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKG1l
dGFEYXRhLmlzQm9keUlubGluZSkpCisgICAgICAgIG1ldGFEYXRhLmJvZHlTaXplID0gV1RGTW92
ZSgqYm9keVNpemUpOworCisgICAgICAgIE9wdGlvbmFsPGJvb2w+IGlzQm9keUlubGluZTsKKyAg
ICAgICAgZGVjb2RlciA+PiBpc0JvZHlJbmxpbmU7CisgICAgICAgIGlmICghaXNCb2R5SW5saW5l
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBtZXRhRGF0YS5pc0JvZHlJbmxp
bmUgPSBXVEZNb3ZlKCppc0JvZHlJbmxpbmUpOworCiAgICAgICAgIGlmICghZGVjb2Rlci52ZXJp
ZnlDaGVja3N1bSgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgICAgIG1ldGFE
YXRhLmhlYWRlck9mZnNldCA9IGRlY29kZXIuY3VycmVudE9mZnNldCgpOwogICAgICAgICBzdWNj
ZXNzID0gdHJ1ZTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdWJyZXNvdXJjZXNFbnRyeS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2Fj
aGVTdWJyZXNvdXJjZXNFbnRyeS5jcHAJKHJldmlzaW9uIDI1OTg5OCkKKysrIFNvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3VicmVzb3VyY2VzRW50cnkuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00OSwzNyArNDksNjUgQEAgdm9pZCBTdWJyZXNvdXJjZUluZm86
OmVuY29kZShXVEY6OlBlcnNpcwogICAgIGVuY29kZXIgPDwgbV9pc1NhbWVTaXRlOwogICAgIGVu
Y29kZXIgPDwgbV9maXJzdFBhcnR5Rm9yQ29va2llczsKICAgICBlbmNvZGVyIDw8IG1fcmVxdWVz
dEhlYWRlcnM7Ci0gICAgZW5jb2Rlci5lbmNvZGVFbnVtKG1fcHJpb3JpdHkpOworICAgIGVuY29k
ZXIgPDwgbV9wcmlvcml0eTsKIH0KIAotYm9vbCBTdWJyZXNvdXJjZUluZm86OmRlY29kZShXVEY6
OlBlcnNpc3RlbmNlOjpEZWNvZGVyJiBkZWNvZGVyLCBTdWJyZXNvdXJjZUluZm8mIGluZm8pCitP
cHRpb25hbDxTdWJyZXNvdXJjZUluZm8+IFN1YnJlc291cmNlSW5mbzo6ZGVjb2RlKFdURjo6UGVy
c2lzdGVuY2U6OkRlY29kZXImIGRlY29kZXIpCiB7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShp
bmZvLm1fa2V5KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghZGVjb2Rlci5kZWNv
ZGUoaW5mby5tX2xhc3RTZWVuKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghZGVj
b2Rlci5kZWNvZGUoaW5mby5tX2ZpcnN0U2VlbikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGluZm8ubV9pc1RyYW5zaWVudCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBpZiAoaW5mby5tX2lzVHJhbnNpZW50KQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICBTdWJyZXNvdXJjZUluZm8gaW5mbzsKIAotICAgIGlmICghZGVj
b2Rlci5kZWNvZGUoaW5mby5tX2lzU2FtZVNpdGUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgT3B0aW9uYWw8S2V5PiBrZXk7CisgICAgZGVjb2RlciA+PiBrZXk7CisgICAgaWYgKCFrZXkp
CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgaW5mby5tX2tleSA9IFdURk1vdmUo
KmtleSk7CisKKyAgICBPcHRpb25hbDxXYWxsVGltZT4gbGFzdFNlZW47CisgICAgZGVjb2RlciA+
PiBsYXN0U2VlbjsKKyAgICBpZiAoIWxhc3RTZWVuKQorICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OworICAgIGluZm8ubV9sYXN0U2VlbiA9IFdURk1vdmUoKmxhc3RTZWVuKTsKKworICAgIE9w
dGlvbmFsPFdhbGxUaW1lPiBmaXJzdFNlZW47CisgICAgZGVjb2RlciA+PiBmaXJzdFNlZW47Cisg
ICAgaWYgKCFmaXJzdFNlZW4pCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgaW5m
by5tX2ZpcnN0U2VlbiA9IFdURk1vdmUoKmZpcnN0U2Vlbik7CisKKyAgICBPcHRpb25hbDxib29s
PiBpc1RyYW5zaWVudDsKKyAgICBkZWNvZGVyID4+IGlzVHJhbnNpZW50OworICAgIGlmICghaXNU
cmFuc2llbnQpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgaW5mby5tX2lzVHJh
bnNpZW50ID0gV1RGTW92ZSgqaXNUcmFuc2llbnQpOwogCi0gICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShpbmZvLm1fZmlyc3RQYXJ0eUZvckNvb2tpZXMpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGluZm8ubV9yZXF1ZXN0SGVhZGVycykpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBpZiAoaW5mby5tX2lzVHJhbnNpZW50KQorICAgICAgICByZXR1
cm4geyBXVEZNb3ZlKGluZm8pIH07CiAKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlRW51bShpbmZv
Lm1fcHJpb3JpdHkpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgT3B0aW9uYWw8Ym9vbD4g
aXNTYW1lU2l0ZTsKKyAgICBkZWNvZGVyID4+IGlzU2FtZVNpdGU7CisgICAgaWYgKCFpc1NhbWVT
aXRlKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIGluZm8ubV9pc1NhbWVTaXRl
ID0gV1RGTW92ZSgqaXNTYW1lU2l0ZSk7CisKKyAgICBPcHRpb25hbDxVUkw+IGZpcnN0UGFydHlG
b3JDb29raWVzOworICAgIGRlY29kZXIgPj4gZmlyc3RQYXJ0eUZvckNvb2tpZXM7CisgICAgaWYg
KCFmaXJzdFBhcnR5Rm9yQ29va2llcykKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAg
ICBpbmZvLm1fZmlyc3RQYXJ0eUZvckNvb2tpZXMgPSBXVEZNb3ZlKCpmaXJzdFBhcnR5Rm9yQ29v
a2llcyk7CisKKyAgICBPcHRpb25hbDxXZWJDb3JlOjpIVFRQSGVhZGVyTWFwPiByZXF1ZXN0SGVh
ZGVyczsKKyAgICBkZWNvZGVyID4+IHJlcXVlc3RIZWFkZXJzOworICAgIGlmICghcmVxdWVzdEhl
YWRlcnMpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgaW5mby5tX3JlcXVlc3RI
ZWFkZXJzID0gV1RGTW92ZSgqcmVxdWVzdEhlYWRlcnMpOworCisgICAgT3B0aW9uYWw8V2ViQ29y
ZTo6UmVzb3VyY2VMb2FkUHJpb3JpdHk+IHByaW9yaXR5OworICAgIGRlY29kZXIgPj4gcHJpb3Jp
dHk7CisgICAgaWYgKCFwcmlvcml0eSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAg
ICBpbmZvLm1fcHJpb3JpdHkgPSBXVEZNb3ZlKCpwcmlvcml0eSk7CiAgICAgCi0gICAgcmV0dXJu
IHRydWU7CisgICAgcmV0dXJuIHsgV1RGTW92ZShpbmZvKSB9OwogfQogCiBib29sIFN1YnJlc291
cmNlSW5mbzo6aXNGaXJzdFBhcnR5KCkgY29uc3QKQEAgLTEwMyw4ICsxMzEsMTEgQEAgc3RkOjp1
bmlxdWVfcHRyPFN1YnJlc291cmNlc0VudHJ5PiBTdWJyZQogICAgIGF1dG8gZW50cnkgPSBtYWtl
VW5pcXVlPFN1YnJlc291cmNlc0VudHJ5PihzdG9yYWdlRW50cnkpOwogCiAgICAgV1RGOjpQZXJz
aXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyKHN0b3JhZ2VFbnRyeS5oZWFkZXIuZGF0YSgpLCBzdG9y
YWdlRW50cnkuaGVhZGVyLnNpemUoKSk7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShlbnRyeS0+
bV9zdWJyZXNvdXJjZXMpKQorICAgIE9wdGlvbmFsPFZlY3RvcjxTdWJyZXNvdXJjZUluZm8+PiBz
dWJyZXNvdXJjZXM7CisgICAgZGVjb2RlciA+PiBzdWJyZXNvdXJjZXM7CisgICAgaWYgKCFzdWJy
ZXNvdXJjZXMpCiAgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGVudHJ5LT5tX3N1YnJlc291
cmNlcyA9IFdURk1vdmUoKnN1YnJlc291cmNlcyk7CiAKICAgICBpZiAoIWRlY29kZXIudmVyaWZ5
Q2hlY2tzdW0oKSkgewogICAgICAgICBMT0coTmV0d29ya0NhY2hlLCAiKE5ldHdvcmtQcm9jZXNz
KSBjaGVja3N1bSB2ZXJpZmljYXRpb24gZmFpbHVyZVxuIik7CkluZGV4OiBTb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN1YnJlc291cmNlc0VudHJ5LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2Fj
aGVTdWJyZXNvdXJjZXNFbnRyeS5oCShyZXZpc2lvbiAyNTk4OTgpCisrKyBTb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN1YnJlc291cmNlc0VudHJ5LmgJKHdv
cmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAgY2xhc3MgU3VicmVzb3VyY2VJbmZvIHsKICAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICB2b2lkIGVuY29kZShXVEY6
OlBlcnNpc3RlbmNlOjpFbmNvZGVyJikgY29uc3Q7Ci0gICAgc3RhdGljIGJvb2wgZGVjb2RlKFdU
Rjo6UGVyc2lzdGVuY2U6OkRlY29kZXImLCBTdWJyZXNvdXJjZUluZm8mKTsKKyAgICBzdGF0aWMg
T3B0aW9uYWw8U3VicmVzb3VyY2VJbmZvPiBkZWNvZGUoV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2Rl
ciYpOwogCiAgICAgU3VicmVzb3VyY2VJbmZvKCkgPSBkZWZhdWx0OwogICAgIFN1YnJlc291cmNl
SW5mbyhjb25zdCBLZXkmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBT
dWJyZXNvdXJjZUluZm8qIHByZXZpb3VzSW5mbyk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJl
ZC9Vc2VyRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQvVXNlckRh
dGEuY3BwCShyZXZpc2lvbiAyNTk4OTgpCisrKyBTb3VyY2UvV2ViS2l0L1NoYXJlZC9Vc2VyRGF0
YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2OSwxMCArMzY5LDExIEBAIGJvb2wgVXNlckRhdGE6
OmRlY29kZShJUEM6OkRlY29kZXImIGRlY28KICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEFQ
STo6T2JqZWN0OjpUeXBlOjpDZXJ0aWZpY2F0ZUluZm86IHsKLSAgICAgICAgV2ViQ29yZTo6Q2Vy
dGlmaWNhdGVJbmZvIGNlcnRpZmljYXRlSW5mbzsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShjZXJ0aWZpY2F0ZUluZm8pKQorICAgICAgICBPcHRpb25hbDxXZWJDb3JlOjpDZXJ0aWZpY2F0
ZUluZm8+IGNlcnRpZmljYXRlSW5mbzsKKyAgICAgICAgZGVjb2RlciA+PiBjZXJ0aWZpY2F0ZUlu
Zm87CisgICAgICAgIGlmICghY2VydGlmaWNhdGVJbmZvKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICByZXN1bHQgPSBXZWJDZXJ0aWZpY2F0ZUluZm86OmNyZWF0ZShjZXJ0aWZp
Y2F0ZUluZm8pOworICAgICAgICByZXN1bHQgPSBXZWJDZXJ0aWZpY2F0ZUluZm86OmNyZWF0ZSgq
Y2VydGlmaWNhdGVJbmZvKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJQ29udGVudFJ1bGVMaXN0U3RvcmUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElDb250ZW50UnVsZUxpc3RTdG9y
ZS5jcHAJKHJldmlzaW9uIDI1OTg5OCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9B
UElDb250ZW50UnVsZUxpc3RTdG9yZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3OSwyMCArMTc5
LDQ5IEBAIHN0YXRpYyBPcHRpb25hbDxDb250ZW50UnVsZUxpc3RNZXRhRGF0YT4KICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRl
Y29kZXIoZGF0YSwgc2l6ZSk7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUobWV0YURhdGEu
dmVyc2lvbikpCisgICAgICAgIAorICAgICAgICBPcHRpb25hbDx1aW50MzJfdD4gdmVyc2lvbjsK
KyAgICAgICAgZGVjb2RlciA+PiB2ZXJzaW9uOworICAgICAgICBpZiAoIXZlcnNpb24pCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUobWV0YURh
dGEuc291cmNlU2l6ZSkpCisgICAgICAgIG1ldGFEYXRhLnZlcnNpb24gPSBXVEZNb3ZlKCp2ZXJz
aW9uKTsKKworICAgICAgICBPcHRpb25hbDx1aW50NjRfdD4gc291cmNlU2l6ZTsKKyAgICAgICAg
ZGVjb2RlciA+PiBzb3VyY2VTaXplOworICAgICAgICBpZiAoIXNvdXJjZVNpemUpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUobWV0YURhdGEu
YWN0aW9uc1NpemUpKQorICAgICAgICBtZXRhRGF0YS5zb3VyY2VTaXplID0gV1RGTW92ZSgqc291
cmNlU2l6ZSk7CisKKyAgICAgICAgT3B0aW9uYWw8dWludDY0X3Q+IGFjdGlvbnNTaXplOworICAg
ICAgICBkZWNvZGVyID4+IGFjdGlvbnNTaXplOworICAgICAgICBpZiAoIWFjdGlvbnNTaXplKQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKG1l
dGFEYXRhLmZpbHRlcnNXaXRob3V0Q29uZGl0aW9uc0J5dGVjb2RlU2l6ZSkpCisgICAgICAgIG1l
dGFEYXRhLmFjdGlvbnNTaXplID0gV1RGTW92ZSgqYWN0aW9uc1NpemUpOworCisgICAgICAgIE9w
dGlvbmFsPHVpbnQ2NF90PiBmaWx0ZXJzV2l0aG91dENvbmRpdGlvbnNCeXRlY29kZVNpemU7Cisg
ICAgICAgIGRlY29kZXIgPj4gZmlsdGVyc1dpdGhvdXRDb25kaXRpb25zQnl0ZWNvZGVTaXplOwor
ICAgICAgICBpZiAoIWZpbHRlcnNXaXRob3V0Q29uZGl0aW9uc0J5dGVjb2RlU2l6ZSkKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShtZXRhRGF0
YS5maWx0ZXJzV2l0aENvbmRpdGlvbnNCeXRlY29kZVNpemUpKQorICAgICAgICBtZXRhRGF0YS5m
aWx0ZXJzV2l0aG91dENvbmRpdGlvbnNCeXRlY29kZVNpemUgPSBXVEZNb3ZlKCpmaWx0ZXJzV2l0
aG91dENvbmRpdGlvbnNCeXRlY29kZVNpemUpOworCisgICAgICAgIE9wdGlvbmFsPHVpbnQ2NF90
PiBmaWx0ZXJzV2l0aENvbmRpdGlvbnNCeXRlY29kZVNpemU7CisgICAgICAgIGRlY29kZXIgPj4g
ZmlsdGVyc1dpdGhDb25kaXRpb25zQnl0ZWNvZGVTaXplOworICAgICAgICBpZiAoIWZpbHRlcnNX
aXRoQ29uZGl0aW9uc0J5dGVjb2RlU2l6ZSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShtZXRhRGF0YS5jb25kaXRpb25lZEZpbHRlcnNCeXRl
Y29kZVNpemUpKQorICAgICAgICBtZXRhRGF0YS5maWx0ZXJzV2l0aENvbmRpdGlvbnNCeXRlY29k
ZVNpemUgPSBXVEZNb3ZlKCpmaWx0ZXJzV2l0aENvbmRpdGlvbnNCeXRlY29kZVNpemUpOworCisg
ICAgICAgIE9wdGlvbmFsPHVpbnQ2NF90PiBjb25kaXRpb25lZEZpbHRlcnNCeXRlY29kZVNpemU7
CisgICAgICAgIGRlY29kZXIgPj4gY29uZGl0aW9uZWRGaWx0ZXJzQnl0ZWNvZGVTaXplOworICAg
ICAgICBpZiAoIWNvbmRpdGlvbmVkRmlsdGVyc0J5dGVjb2RlU2l6ZSkKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShtZXRhRGF0YS5jb25kaXRp
b25zQXBwbHlPbmx5VG9Eb21haW4pKQorICAgICAgICBtZXRhRGF0YS5jb25kaXRpb25lZEZpbHRl
cnNCeXRlY29kZVNpemUgPSBXVEZNb3ZlKCpjb25kaXRpb25lZEZpbHRlcnNCeXRlY29kZVNpemUp
OworCisgICAgICAgIE9wdGlvbmFsPHVpbnQzMl90PiBjb25kaXRpb25zQXBwbHlPbmx5VG9Eb21h
aW47CisgICAgICAgIGRlY29kZXIgPj4gY29uZGl0aW9uc0FwcGx5T25seVRvRG9tYWluOworICAg
ICAgICBpZiAoIWNvbmRpdGlvbnNBcHBseU9ubHlUb0RvbWFpbikKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgbWV0YURhdGEuY29uZGl0aW9uc0FwcGx5T25seVRvRG9tYWluID0g
V1RGTW92ZSgqY29uZGl0aW9uc0FwcGx5T25seVRvRG9tYWluKTsKKwogICAgICAgICBzdWNjZXNz
ID0gdHJ1ZTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0pOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>396152</attachid>
            <date>2020-04-10 22:13:23 -0700</date>
            <delta_ts>2020-04-10 23:39:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207497-20200410221322.patch</filename>
            <type>text/plain</type>
            <size>110253</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNTk4OTgpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDM4IEBACisyMDIwLTA0LTEwICBBbGV4IENocmlzdGVuc2VuICA8
YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUGVyc2lzdGVudENvZGVycyBzaG91
bGQgdXNlIG1vZGVybiBkZWNvZGluZyBzeW50YXgKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNzQ5NworCisgICAgICAgIFJldmlld2VkIGJ5IERhcmlu
IEFkbGVyLgorCisgICAgICAgIFRoaXMgcGF2ZXMgdGhlIHdheSBmb3IgbW9yZSBzZXJpYWxpemVk
IHR5cGVzIHRoYXQgZG8gbm90IGhhdmUgYSBkZWZhdWx0IGNvbnN0cnVjdG9yLgorCisgICAgICAg
ICogd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRDb2Rlci5oOgorICAgICAgICAoV1RGOjpQZXJz
aXN0ZW5jZTo6Q29kZXI6OmVuY29kZSk6CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpDb2Rl
cjo6ZGVjb2RlKToKKyAgICAgICAgKiB3dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudENvZGVycy5j
cHA6CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpDb2RlcjxBdG9tU3RyaW5nPjo6ZGVjb2Rl
KToKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkNvZGVyPENTdHJpbmc+OjpkZWNvZGUpOgor
ICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6ZGVjb2RlU3RyaW5nVGV4dCk6CisgICAgICAgIChX
VEY6OlBlcnNpc3RlbmNlOjpDb2RlcjxTdHJpbmc+OjpkZWNvZGUpOgorICAgICAgICAoV1RGOjpQ
ZXJzaXN0ZW5jZTo6Q29kZXI8U0hBMTo6RGlnZXN0Pjo6ZGVjb2RlKToKKyAgICAgICAgKiB3dGYv
cGVyc2lzdGVuY2UvUGVyc2lzdGVudENvZGVycy5oOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5j
ZTo6Q29kZXI8T3B0aW9uYWw8VD4+OjpkZWNvZGUpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5j
ZTo6Q29kZXI8U2Vjb25kcz46OmRlY29kZSk6CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpD
b2RlcjxXYWxsVGltZT46OmRlY29kZSk6CisgICAgICAgICogd3RmL3BlcnNpc3RlbmNlL1BlcnNp
c3RlbnREZWNvZGVyLmNwcDoKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXI6OmRl
Y29kZU51bWJlcik6CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyOjpvcGVyYXRv
cj4+KToKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXI6OmRlY29kZSk6IERlbGV0
ZWQuCisgICAgICAgICogd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnREZWNvZGVyLmg6CisgICAg
ICAgIChXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyOjpvcGVyYXRvcj4+KToKKyAgICAgICAgKFdU
Rjo6UGVyc2lzdGVuY2U6OkRlY29kZXI6OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6
OlBlcnNpc3RlbmNlOjpEZWNvZGVyOjpkZWNvZGVFbnVtKTogRGVsZXRlZC4KKyAgICAgICAgKiB3
dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudEVuY29kZXIuaDoKKyAgICAgICAgKFdURjo6UGVyc2lz
dGVuY2U6OkVuY29kZXI6Om9wZXJhdG9yPDwpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6
RW5jb2Rlcjo6ZW5jb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkVu
Y29kZXI6OmVuY29kZUVudW0pOiBEZWxldGVkLgorCiAyMDIwLTA0LTEwICBBbGljaWEgQm95YSBH
YXJjw61hICA8YWJveWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBbV1RGXSBEYXRhTXV0ZXg6IEFk
ZCBydW5VbmxvY2tlZCgpCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9VUkwuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV1RGL3d0Zi9VUkwuaAkocmV2aXNpb24gMjU5ODk4KQorKysgU291cmNlL1dURi93
dGYvVVJMLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0OCwxMCArMjQ4LDExIEBAIGJvb2wgVVJMOjpk
ZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgVVJMJiAKIHRlbXBsYXRlIDxjbGFzcyBEZWNvZGVyPgog
T3B0aW9uYWw8VVJMPiBVUkw6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogewotICAgIFN0cmlu
ZyBzdHJpbmc7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShzdHJpbmcpKQorICAgIE9wdGlvbmFs
PFN0cmluZz4gc3RyaW5nOworICAgIGRlY29kZXIgPj4gc3RyaW5nOworICAgIGlmICghc3RyaW5n
KQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIHJldHVybiBVUkwoVVJMKCksIHN0
cmluZyk7CisgICAgcmV0dXJuIFVSTChVUkwoKSwgV1RGTW92ZSgqc3RyaW5nKSk7CiB9CiAKIFdU
Rl9FWFBPUlRfUFJJVkFURSBib29sIGVxdWFsSWdub3JpbmdGcmFnbWVudElkZW50aWZpZXIoY29u
c3QgVVJMJiwgY29uc3QgVVJMJik7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9Q
ZXJzaXN0ZW50Q29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5j
ZS9QZXJzaXN0ZW50Q29kZXIuaAkocmV2aXNpb24gMjU5ODk4KQorKysgU291cmNlL1dURi93dGYv
cGVyc2lzdGVuY2UvUGVyc2lzdGVudENvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDE2ICsz
MCwxNiBAQCBuYW1lc3BhY2UgUGVyc2lzdGVuY2UgewogCiBjbGFzcyBEZWNvZGVyOwogY2xhc3Mg
RW5jb2RlcjsKLSAgICAKKwogdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvZGVyIHsKICAg
ICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgVCYgdCkKICAgICB7
CiAgICAgICAgIHQuZW5jb2RlKGVuY29kZXIpOwogICAgIH0KIAotICAgIHN0YXRpYyBXQVJOX1VO
VVNFRF9SRVRVUk4gYm9vbCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgVCYgdCkKKyAgICBzdGF0
aWMgT3B0aW9uYWw8VD4gZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgewotICAgICAgICBy
ZXR1cm4gVDo6ZGVjb2RlKGRlY29kZXIsIHQpOworICAgICAgICByZXR1cm4gVDo6ZGVjb2RlKGRl
Y29kZXIpOwogICAgIH0KIH07CiAKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1Bl
cnNpc3RlbnRDb2RlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3Rl
bmNlL1BlcnNpc3RlbnRDb2RlcnMuY3BwCShyZXZpc2lvbiAyNTk4OTgpCisrKyBTb3VyY2UvV1RG
L3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50Q29kZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzcsMTQgKzM3LDE0IEBAIHZvaWQgQ29kZXI8QXRvbVN0cmluZz46OmVuY29kZShFbmNvZGVyJiAK
ICAgICBlbmNvZGVyIDw8IGF0b21TdHJpbmcuc3RyaW5nKCk7CiB9CiAKLWJvb2wgQ29kZXI8QXRv
bVN0cmluZz46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBBdG9tU3RyaW5nJiBhdG9tU3RyaW5n
KQorT3B0aW9uYWw8QXRvbVN0cmluZz4gQ29kZXI8QXRvbVN0cmluZz46OmRlY29kZShEZWNvZGVy
JiBkZWNvZGVyKQogewotICAgIFN0cmluZyBzdHJpbmc7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShzdHJpbmcpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgT3B0aW9uYWw8U3RyaW5nPiBz
dHJpbmc7CisgICAgZGVjb2RlciA+PiBzdHJpbmc7CisgICAgaWYgKCFzdHJpbmcpCisgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBhdG9tU3RyaW5nID0gc3RyaW5nOwotICAgIHJl
dHVybiB0cnVlOworICAgIHJldHVybiB7eyBXVEZNb3ZlKCpzdHJpbmcpIH19OwogfQogCiB2b2lk
IENvZGVyPENTdHJpbmc+OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgQ1N0cmluZyYg
c3RyaW5nKQpAQCAtNjAsMzIgKzYwLDMwIEBAIHZvaWQgQ29kZXI8Q1N0cmluZz46OmVuY29kZShF
bmNvZGVyJiBlbmMKICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJl
dF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihzdHJpbmcuZGF0YSgpKSwgbGVuZ3RoKTsKIH0KIAotYm9v
bCBDb2RlcjxDU3RyaW5nPjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIENTdHJpbmcmIHJlc3Vs
dCkKK09wdGlvbmFsPENTdHJpbmc+IENvZGVyPENTdHJpbmc+OjpkZWNvZGUoRGVjb2RlciYgZGVj
b2RlcikKIHsKLSAgICB1aW50MzJfdCBsZW5ndGg7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShs
ZW5ndGgpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgT3B0aW9uYWw8dWludDMyX3Q+IGxl
bmd0aDsKKyAgICBkZWNvZGVyID4+IGxlbmd0aDsKKyAgICBpZiAoIWxlbmd0aCkKKyAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIGlmIChsZW5ndGggPT0gc3RkOjpudW1lcmljX2xp
bWl0czx1aW50MzJfdD46Om1heCgpKSB7CiAgICAgICAgIC8vIFRoaXMgaXMgdGhlIG51bGwgc3Ry
aW5nLgotICAgICAgICByZXN1bHQgPSBDU3RyaW5nKCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICByZXR1cm4gQ1N0cmluZygpOwogICAgIH0KIAogICAgIC8vIEJlZm9yZSBhbGxvY2F0
aW5nIHRoZSBzdHJpbmcsIG1ha2Ugc3VyZSB0aGF0IHRoZSBkZWNvZGVyIGJ1ZmZlciBpcyBiaWcg
ZW5vdWdoLgotICAgIGlmICghZGVjb2Rlci5idWZmZXJJc0xhcmdlRW5vdWdoVG9Db250YWluPGNo
YXI+KGxlbmd0aCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWRlY29kZXIuYnVm
ZmVySXNMYXJnZUVub3VnaFRvQ29udGFpbjxjaGFyPigqbGVuZ3RoKSkKKyAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKIAogICAgIGNoYXIqIGJ1ZmZlcjsKLSAgICBDU3RyaW5nIHN0cmluZyA9
IENTdHJpbmc6Om5ld1VuaW5pdGlhbGl6ZWQobGVuZ3RoLCBidWZmZXIpOwotICAgIGlmICghZGVj
b2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oYnVm
ZmVyKSwgbGVuZ3RoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIENTdHJpbmcgc3RyaW5n
ID0gQ1N0cmluZzo6bmV3VW5pbml0aWFsaXplZCgqbGVuZ3RoLCBidWZmZXIpOworICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4o
YnVmZmVyKSwgKmxlbmd0aCkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBy
ZXN1bHQgPSBzdHJpbmc7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIFdURk1vdmUoc3Ry
aW5nKTsKIH0KIAotCiB2b2lkIENvZGVyPFN0cmluZz46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVy
LCBjb25zdCBTdHJpbmcmIHN0cmluZykKIHsKICAgICAvLyBTcGVjaWFsIGNhc2UgdGhlIG51bGwg
c3RyaW5nLgpAQCAtMTA2LDQwICsxMDQsNDAgQEAgdm9pZCBDb2RlcjxTdHJpbmc+OjplbmNvZGUo
RW5jb2RlciYgZW5jbwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLXN0
YXRpYyBpbmxpbmUgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlU3RyaW5nVGV4dChEZWNv
ZGVyJiBkZWNvZGVyLCB1aW50MzJfdCBsZW5ndGgsIFN0cmluZyYgcmVzdWx0KQorc3RhdGljIGlu
bGluZSBPcHRpb25hbDxTdHJpbmc+IGRlY29kZVN0cmluZ1RleHQoRGVjb2RlciYgZGVjb2Rlciwg
dWludDMyX3QgbGVuZ3RoKQogewogICAgIC8vIEJlZm9yZSBhbGxvY2F0aW5nIHRoZSBzdHJpbmcs
IG1ha2Ugc3VyZSB0aGF0IHRoZSBkZWNvZGVyIGJ1ZmZlciBpcyBiaWcgZW5vdWdoLgogICAgIGlm
ICghZGVjb2Rlci5idWZmZXJJc0xhcmdlRW5vdWdoVG9Db250YWluPENoYXJhY3RlclR5cGU+KGxl
bmd0aCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKIAogICAgIENoYXJhY3RlclR5cGUqIGJ1ZmZlcjsKICAgICBTdHJpbmcgc3RyaW5nID0gU3Ry
aW5nOjpjcmVhdGVVbmluaXRpYWxpemVkKGxlbmd0aCwgYnVmZmVyKTsKICAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGJ1ZmZl
ciksIGxlbmd0aCAqIHNpemVvZihDaGFyYWN0ZXJUeXBlKSkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAKLSAgICByZXN1bHQgPSBzdHJp
bmc7Ci0gICAgcmV0dXJuIHRydWU7ICAgIAorICAgIHJldHVybiBXVEZNb3ZlKHN0cmluZyk7CiB9
CiAKLWJvb2wgQ29kZXI8U3RyaW5nPjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFN0cmluZyYg
cmVzdWx0KQorT3B0aW9uYWw8U3RyaW5nPiBDb2RlcjxTdHJpbmc+OjpkZWNvZGUoRGVjb2RlciYg
ZGVjb2RlcikKIHsKLSAgICB1aW50MzJfdCBsZW5ndGg7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShsZW5ndGgpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgT3B0aW9uYWw8dWludDMyX3Q+
IGxlbmd0aDsKKyAgICBkZWNvZGVyID4+IGxlbmd0aDsKKyAgICBpZiAoIWxlbmd0aCkKKyAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIGlmIChsZW5ndGggPT0gc3RkOjpudW1lcmlj
X2xpbWl0czx1aW50MzJfdD46Om1heCgpKSB7CisgICAgaWYgKCpsZW5ndGggPT0gc3RkOjpudW1l
cmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpKSB7CiAgICAgICAgIC8vIFRoaXMgaXMgdGhlIG51
bGwgc3RyaW5nLgotICAgICAgICByZXN1bHQgPSBTdHJpbmcoKTsKLSAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICB9CiAKLSAgICBib29sIGlzOEJpdDsK
LSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGlzOEJpdCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIGlmIChpczhCaXQpCi0gICAgICAgIHJldHVybiBkZWNvZGVTdHJpbmdUZXh0PExDaGFy
PihkZWNvZGVyLCBsZW5ndGgsIHJlc3VsdCk7Ci0gICAgcmV0dXJuIGRlY29kZVN0cmluZ1RleHQ8
VUNoYXI+KGRlY29kZXIsIGxlbmd0aCwgcmVzdWx0KTsKKyAgICBPcHRpb25hbDxib29sPiBpczhC
aXQ7CisgICAgZGVjb2RlciA+PiBpczhCaXQ7CisgICAgaWYgKCFpczhCaXQpCisgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBpZiAoKmlzOEJpdCkKKyAgICAgICAgcmV0dXJuIGRl
Y29kZVN0cmluZ1RleHQ8TENoYXI+KGRlY29kZXIsICpsZW5ndGgpOworICAgIHJldHVybiBkZWNv
ZGVTdHJpbmdUZXh0PFVDaGFyPihkZWNvZGVyLCAqbGVuZ3RoKTsKIH0KIAogdm9pZCBDb2RlcjxT
SEExOjpEaWdlc3Q+OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgU0hBMTo6RGlnZXN0
JiBkaWdlc3QpCkBAIC0xNDcsOSArMTQ1LDEyIEBAIHZvaWQgQ29kZXI8U0hBMTo6RGlnZXN0Pjo6
ZW5jb2RlKEVuY29kZXIKICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShkaWdlc3Qu
ZGF0YSgpLCBzaXplb2YoZGlnZXN0KSk7CiB9CiAKLWJvb2wgQ29kZXI8U0hBMTo6RGlnZXN0Pjo6
ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFNIQTE6OkRpZ2VzdCYgZGlnZXN0KQorT3B0aW9uYWw8
U0hBMTo6RGlnZXN0PiBDb2RlcjxTSEExOjpEaWdlc3Q+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2Rl
cikKIHsKLSAgICByZXR1cm4gZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoZGlnZXN0LmRh
dGEoKSwgc2l6ZW9mKGRpZ2VzdCkpOworICAgIFNIQTE6OkRpZ2VzdCB0bXA7CisgICAgaWYgKCFk
ZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YSh0bXAuZGF0YSgpLCBzaXplb2YodG1wKSkpCisg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcmV0dXJuIFdURk1vdmUodG1wKTsKIH0K
IAogfQpJbmRleDogU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudENvZGVycy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRDb2Rl
cnMuaAkocmV2aXNpb24gMjU5ODk4KQorKysgU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVy
c2lzdGVudENvZGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC00NiwxOSArNDYsMTkgQEAgdGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gc3RydWN0IAogICAgICAgICBlbmNvZGVyIDw8IHBh
aXIuZmlyc3QgPDwgcGFpci5zZWNvbmQ7CiAgICAgfQogCi0gICAgc3RhdGljIFdBUk5fVU5VU0VE
X1JFVFVSTiBib29sIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBzdGQ6OnBhaXI8VCwgVT4mIHBh
aXIpCisgICAgc3RhdGljIE9wdGlvbmFsPHN0ZDo6cGFpcjxULCBVPj4gZGVjb2RlKERlY29kZXIm
IGRlY29kZXIpCiAgICAgewotICAgICAgICBUIGZpcnN0OwotICAgICAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlKGZpcnN0KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBVIHNl
Y29uZDsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShzZWNvbmQpKQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgICAgIHBhaXIuZmlyc3QgPSBmaXJzdDsKLSAgICAgICAgcGFp
ci5zZWNvbmQgPSBzZWNvbmQ7Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBPcHRpb25h
bDxUPiBmaXJzdDsKKyAgICAgICAgZGVjb2RlciA+PiBmaXJzdDsKKyAgICAgICAgaWYgKCFmaXJz
dCkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICAgICAgT3B0aW9uYWw8
VT4gc2Vjb25kOworICAgICAgICBkZWNvZGVyID4+IHNlY29uZDsKKyAgICAgICAgaWYgKCFzZWNv
bmQpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgICAgIHJldHVybiB7
eyBXVEZNb3ZlKCpmaXJzdCksIFdURk1vdmUoKnNlY29uZCkgfX07CiAgICAgfQogfTsKIApAQCAt
NzQsMjMgKzc0LDIxIEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb2RlcjxPcHRpb24K
ICAgICAgICAgZW5jb2RlciA8PCBvcHRpb25hbC52YWx1ZSgpOwogICAgIH0KICAgICAKLSAgICBz
dGF0aWMgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIE9w
dGlvbmFsPFQ+JiBvcHRpb25hbCkKKyAgICBzdGF0aWMgT3B0aW9uYWw8T3B0aW9uYWw8VD4+IGRl
Y29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIHsKLSAgICAgICAgYm9vbCBpc0VuZ2FnZWQ7Ci0g
ICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaXNFbmdhZ2VkKSkKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgCi0gICAgICAgIGlmICghaXNFbmdhZ2VkKSB7Ci0gICAgICAgICAg
ICBvcHRpb25hbCA9IFdURjo6bnVsbG9wdDsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICB9CisgICAgICAgIE9wdGlvbmFsPGJvb2w+IGlzRW5nYWdlZDsKKyAgICAgICAgZGVjb2Rl
ciA+PiBpc0VuZ2FnZWQ7CisgICAgICAgIGlmICghaXNFbmdhZ2VkKQorICAgICAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgaWYgKCEqaXNFbmdhZ2VkKQorICAgICAgICAgICAg
cmV0dXJuIE9wdGlvbmFsPE9wdGlvbmFsPFQ+PiB7IE9wdGlvbmFsPFQ+IHsgV1RGOjpudWxsb3B0
IH0gfTsKICAgICAgICAgCi0gICAgICAgIFQgdmFsdWU7Ci0gICAgICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBPcHRpb25h
bDxUPiB2YWx1ZTsKKyAgICAgICAgZGVjb2RlciA+PiB2YWx1ZTsKKyAgICAgICAgaWYgKCF2YWx1
ZSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgIAotICAgICAgICBv
cHRpb25hbCA9IFdURk1vdmUodmFsdWUpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
cmV0dXJuIE9wdGlvbmFsPE9wdGlvbmFsPFQ+PiB7IE9wdGlvbmFsPFQ+IHsgV1RGTW92ZSgqdmFs
dWUpIH0gfTsKICAgICB9CiB9OwogCkBAIC0xMDAsMTkgKzk4LDE5IEBAIHRlbXBsYXRlPHR5cGVu
YW1lIEtleVR5cGUsIHR5cGVuYW1lIFZhbHUKICAgICAgICAgZW5jb2RlciA8PCBwYWlyLmtleSA8
PCBwYWlyLnZhbHVlOwogICAgIH0KIAotICAgIHN0YXRpYyBXQVJOX1VOVVNFRF9SRVRVUk4gYm9v
bCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgV1RGOjpLZXlWYWx1ZVBhaXI8S2V5VHlwZSwgVmFs
dWVUeXBlPiYgcGFpcikKKyAgICBzdGF0aWMgT3B0aW9uYWw8V1RGOjpLZXlWYWx1ZVBhaXI8S2V5
VHlwZSwgVmFsdWVUeXBlPj4gZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgewotICAgICAg
ICBLZXlUeXBlIGtleTsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShrZXkpKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIFZhbHVlVHlwZSB2YWx1ZTsKLSAgICAgICAg
aWYgKCFkZWNvZGVyLmRlY29kZSh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICAgICAgcGFpci5rZXkgPSBrZXk7Ci0gICAgICAgIHBhaXIudmFsdWUgPSB2YWx1ZTsKLSAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIE9wdGlvbmFsPEtleVR5cGU+IGtleTsKKyAgICAg
ICAgZGVjb2RlciA+PiBrZXk7CisgICAgICAgIGlmICgha2V5KQorICAgICAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKKworICAgICAgICBPcHRpb25hbDxWYWx1ZVR5cGU+IHZhbHVlOworICAg
ICAgICBkZWNvZGVyID4+dmFsdWU7CisgICAgICAgIGlmICghdmFsdWUpCisgICAgICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgICAgIHJldHVybiB7eyBXVEZNb3ZlKCprZXkpLCBX
VEZNb3ZlKCp2YWx1ZSkgfX07CiAgICAgfQogfTsKIApAQCAtMTI2LDI0ICsxMjQsMjQgQEAgdGVt
cGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaQogICAgICAgICAgICAgZW5jb2Rl
ciA8PCB2ZWN0b3JbaV07CiAgICAgfQogCi0gICAgc3RhdGljIFdBUk5fVU5VU0VEX1JFVFVSTiBi
b29sIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+JiB2
ZWN0b3IpCisgICAgc3RhdGljIE9wdGlvbmFsPFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT4+IGRl
Y29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIHsKLSAgICAgICAgdWludDY0X3Qgc2l6ZTsKLSAg
ICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShzaXplKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgT3B0aW9uYWw8dWludDY0X3Q+IHNpemU7CisgICAgICAgIGRlY29kZXIgPj4g
c2l6ZTsKKyAgICAgICAgaWYgKCFzaXplKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKIAogICAgICAgICBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+IHRtcDsKLSAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgICAgIFQgZWxlbWVudDsK
LSAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoZWxlbWVudCkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICB0bXAuYXBwZW5kKFdU
Rk1vdmUoZWxlbWVudCkpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8ICpzaXplOyAr
K2kpIHsKKyAgICAgICAgICAgIE9wdGlvbmFsPFQ+IGVsZW1lbnQ7CisgICAgICAgICAgICBkZWNv
ZGVyID4+IGVsZW1lbnQ7CisgICAgICAgICAgICBpZiAoIWVsZW1lbnQpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgICAgIHRtcC5hcHBlbmQoV1RGTW92ZSgq
ZWxlbWVudCkpOwogICAgICAgICB9CiAKICAgICAgICAgdG1wLnNocmlua1RvRml0KCk7Ci0gICAg
ICAgIHZlY3Rvci5zd2FwKHRtcCk7Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1
cm4gV1RGTW92ZSh0bXApOwogICAgIH0KIH07CiAKQEAgLTE1NCwzMSArMTUyLDMxIEBAIHRlbXBs
YXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2kKICAgICAgICAgZW5jb2Rlci5lbmNv
ZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4odmVjdG9y
LmRhdGEoKSksIHZlY3Rvci5zaXplKCkgKiBzaXplb2YoVCkpOwogICAgIH0KICAgICAKLSAgICBz
dGF0aWMgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFZl
Y3RvcjxULCBpbmxpbmVDYXBhY2l0eT4mIHZlY3RvcikKKyAgICBzdGF0aWMgT3B0aW9uYWw8VmVj
dG9yPFQsIGlubGluZUNhcGFjaXR5Pj4gZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgewot
ICAgICAgICB1aW50NjRfdCBkZWNvZGVkU2l6ZTsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShkZWNvZGVkU2l6ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIE9wdGlv
bmFsPHVpbnQ2NF90PiBkZWNvZGVkU2l6ZTsKKyAgICAgICAgZGVjb2RlciA+PiBkZWNvZGVkU2l6
ZTsKKyAgICAgICAgaWYgKCFkZWNvZGVkU2l6ZSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CiAKLSAgICAgICAgaWYgKCFpc0luQm91bmRzPHNpemVfdD4oZGVjb2RlZFNpemUpKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoIWlzSW5Cb3VuZHM8c2l6ZV90
PigqZGVjb2RlZFNpemUpKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAg
ICAgICBhdXRvIHNpemUgPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGRlY29kZWRTaXplKTsKKyAgICAg
ICAgYXV0byBzaXplID0gc3RhdGljX2Nhc3Q8c2l6ZV90PigqZGVjb2RlZFNpemUpOwogCiAgICAg
ICAgIC8vIFNpbmNlIHdlIGtub3cgdGhlIHRvdGFsIHNpemUgb2YgdGhlIGVsZW1lbnRzLCB3ZSBj
YW4gYWxsb2NhdGUgdGhlIHZlY3RvciBpbgogICAgICAgICAvLyBvbmUgZmVsbCBzd29vcC4gQmVm
b3JlIGFsbG9jYXRpbmcgd2UgbXVzdCBob3dldmVyIG1ha2Ugc3VyZSB0aGF0IHRoZSBkZWNvZGVy
IGJ1ZmZlcgogICAgICAgICAvLyBpcyBiaWcgZW5vdWdoLgogICAgICAgICBpZiAoIWRlY29kZXIu
YnVmZmVySXNMYXJnZUVub3VnaFRvQ29udGFpbjxUPihzaXplKSkKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICAgICAgVmVj
dG9yPFQsIGlubGluZUNhcGFjaXR5PiB0ZW1wOwogICAgICAgICB0ZW1wLmdyb3coc2l6ZSk7CiAK
ICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9j
YXN0PHVpbnQ4X3QqPih0ZW1wLmRhdGEoKSksIHNpemUgKiBzaXplb2YoVCkpKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAg
ICAgICB2ZWN0b3Iuc3dhcCh0ZW1wKTsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJl
dHVybiBXVEZNb3ZlKHRlbXApOwogICAgIH0KIH07CiAKQEAgLTE5NCwzMCArMTkyLDMyIEBAIHRl
bXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGUKICAgICAgICAgICAgIGVuY29k
ZXIgPDwgKml0OwogICAgIH0KIAotICAgIHN0YXRpYyBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBk
ZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgSGFzaE1hcFR5cGUmIGhhc2hNYXApCisgICAgc3RhdGlj
IE9wdGlvbmFsPEhhc2hNYXBUeXBlPiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKICAgICB7Ci0g
ICAgICAgIHVpbnQ2NF90IGhhc2hNYXBTaXplOwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KGhhc2hNYXBTaXplKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgT3B0aW9u
YWw8dWludDY0X3Q+IGhhc2hNYXBTaXplOworICAgICAgICBkZWNvZGVyID4+IGhhc2hNYXBTaXpl
OworICAgICAgICBpZiAoIWhhc2hNYXBTaXplKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKIAogICAgICAgICBIYXNoTWFwVHlwZSB0ZW1wSGFzaE1hcDsKLSAgICAgICAgdGVtcEhh
c2hNYXAucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaGFzaE1h
cFNpemUpKTsKLSAgICAgICAgZm9yICh1aW50NjRfdCBpID0gMDsgaSA8IGhhc2hNYXBTaXplOyAr
K2kpIHsKLSAgICAgICAgICAgIEtleUFyZyBrZXk7Ci0gICAgICAgICAgICBNYXBwZWRBcmcgdmFs
dWU7Ci0gICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGtleSkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZSh2YWx1ZSkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB0ZW1wSGFzaE1hcC5yZXNl
cnZlSW5pdGlhbENhcGFjaXR5KHN0YXRpY19jYXN0PHVuc2lnbmVkPigqaGFzaE1hcFNpemUpKTsK
KyAgICAgICAgZm9yICh1aW50NjRfdCBpID0gMDsgaSA8ICpoYXNoTWFwU2l6ZTsgKytpKSB7Cisg
ICAgICAgICAgICBPcHRpb25hbDxLZXlBcmc+IGtleTsKKyAgICAgICAgICAgIGRlY29kZXIgPj4g
a2V5OworICAgICAgICAgICAgaWYgKCFrZXkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKKyAgICAgICAgICAgIE9wdGlvbmFsPE1hcHBlZEFyZz4gdmFsdWU7CisgICAgICAg
ICAgICBkZWNvZGVyID4+IHZhbHVlOworICAgICAgICAgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgICAgICAgICBpZiAoIXRlbXBIYXNo
TWFwLmFkZChrZXksIHZhbHVlKS5pc05ld0VudHJ5KSB7CisgICAgICAgICAgICBpZiAoIXRlbXBI
YXNoTWFwLmFkZChXVEZNb3ZlKCprZXkpLCBXVEZNb3ZlKCp2YWx1ZSkpLmlzTmV3RW50cnkpIHsK
ICAgICAgICAgICAgICAgICAvLyBUaGUgaGFzaCBtYXAgYWxyZWFkeSBoYXMgdGhlIHNwZWNpZmll
ZCBrZXksIGJhaWwuCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAg
ICAgICBoYXNoTWFwLnN3YXAodGVtcEhhc2hNYXApOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgcmV0dXJuIFdURk1vdmUodGVtcEhhc2hNYXApOwogICAgIH0KIH07CiAKQEAgLTIzMSwy
NiArMjMxLDI3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgSGFzaEEKICAg
ICAgICAgICAgIGVuY29kZXIgPDwgKml0OwogICAgIH0KIAotICAgIHN0YXRpYyBXQVJOX1VOVVNF
RF9SRVRVUk4gYm9vbCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgSGFzaFNldFR5cGUmIGhhc2hT
ZXQpCisgICAgc3RhdGljIE9wdGlvbmFsPEhhc2hTZXRUeXBlPiBkZWNvZGUoRGVjb2RlciYgZGVj
b2RlcikKICAgICB7Ci0gICAgICAgIHVpbnQ2NF90IGhhc2hTZXRTaXplOwotICAgICAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKGhhc2hTZXRTaXplKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgT3B0aW9uYWw8dWludDY0X3Q+IGhhc2hTZXRTaXplOworICAgICAgICBkZWNvZGVy
ID4+IGhhc2hTZXRTaXplOworICAgICAgICBpZiAoIWhhc2hTZXRTaXplKQorICAgICAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgICAgICBIYXNoU2V0VHlwZSB0ZW1wSGFzaFNldDsK
LSAgICAgICAgZm9yICh1aW50NjRfdCBpID0gMDsgaSA8IGhhc2hTZXRTaXplOyArK2kpIHsKLSAg
ICAgICAgICAgIEtleUFyZyBrZXk7Ci0gICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGtl
eSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBmb3IgKHVpbnQ2NF90
IGkgPSAwOyBpIDwgKmhhc2hTZXRTaXplOyArK2kpIHsKKyAgICAgICAgICAgIE9wdGlvbmFsPEtl
eUFyZz4ga2V5OworICAgICAgICAgICAgZGVjb2RlciA+PiBrZXk7CisgICAgICAgICAgICBpZiAo
IWtleSkKKyAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgICAgICAg
ICBpZiAoIXRlbXBIYXNoU2V0LmFkZChrZXkpLmlzTmV3RW50cnkpIHsKKyAgICAgICAgICAgIGlm
ICghdGVtcEhhc2hTZXQuYWRkKFdURk1vdmUoKmtleSkpLmlzTmV3RW50cnkpIHsKICAgICAgICAg
ICAgICAgICAvLyBUaGUgaGFzaCBtYXAgYWxyZWFkeSBoYXMgdGhlIHNwZWNpZmllZCBrZXksIGJh
aWwuCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBoYXNo
U2V0LnN3YXAodGVtcEhhc2hTZXQpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0
dXJuIFdURk1vdmUodGVtcEhhc2hTZXQpOwogICAgIH0KIH07CiAKQEAgLTI2MCwxNCArMjYxLDEz
IEBAIHRlbXBsYXRlPD4gc3RydWN0IENvZGVyPFNlY29uZHM+IHsKICAgICAgICAgZW5jb2RlciA8
PCBzZWNvbmRzLnZhbHVlKCk7CiAgICAgfQogCi0gICAgc3RhdGljIFdBUk5fVU5VU0VEX1JFVFVS
TiBib29sIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBTZWNvbmRzJiByZXN1bHQpCisgICAgc3Rh
dGljIE9wdGlvbmFsPFNlY29uZHM+IGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIHsKLSAg
ICAgICAgZG91YmxlIHZhbHVlOwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHZhbHVlKSkK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICByZXN1bHQgPSBTZWNvbmRzKHZh
bHVlKTsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIE9wdGlvbmFsPGRvdWJsZT4gdmFs
dWU7CisgICAgICAgIGRlY29kZXIgPj4gdmFsdWU7CisgICAgICAgIGlmICghdmFsdWUpCisgICAg
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICByZXR1cm4gU2Vjb25kcygqdmFs
dWUpOwogICAgIH0KIH07CiAKQEAgLTI3NywzNSArMjc3LDM1IEBAIHRlbXBsYXRlPD4gc3RydWN0
IENvZGVyPFdhbGxUaW1lPiB7CiAgICAgICAgIGVuY29kZXIgPDwgdGltZS5zZWNvbmRzU2luY2VF
cG9jaCgpLnZhbHVlKCk7CiAgICAgfQogCi0gICAgc3RhdGljIFdBUk5fVU5VU0VEX1JFVFVSTiBi
b29sIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBXYWxsVGltZSYgcmVzdWx0KQorICAgIHN0YXRp
YyBPcHRpb25hbDxXYWxsVGltZT4gZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgewotICAg
ICAgICBkb3VibGUgdmFsdWU7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUodmFsdWUpKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBPcHRpb25hbDxkb3VibGU+IHZhbHVl
OworICAgICAgICBkZWNvZGVyID4+IHZhbHVlOworICAgICAgICBpZiAoIXZhbHVlKQorICAgICAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgICAgICByZXN1bHQgPSBXYWxsVGltZTo6
ZnJvbVJhd1NlY29uZHModmFsdWUpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0
dXJuIFdhbGxUaW1lOjpmcm9tUmF3U2Vjb25kcygqdmFsdWUpOwogICAgIH0KIH07CiAKIHRlbXBs
YXRlPD4gc3RydWN0IENvZGVyPEF0b21TdHJpbmc+IHsKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUg
c3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25zdCBBdG9tU3RyaW5nJik7Ci0gICAgV1RG
X0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVyJiwgQXRvbVN0cmluZyYp
IFdBUk5fVU5VU0VEX1JFVFVSTjsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIE9wdGlv
bmFsPEF0b21TdHJpbmc+IGRlY29kZShEZWNvZGVyJik7CiB9OwogCiB0ZW1wbGF0ZTw+IHN0cnVj
dCBDb2RlcjxDU3RyaW5nPiB7CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGVu
Y29kZShFbmNvZGVyJiwgY29uc3QgQ1N0cmluZyYpOwotICAgIFdURl9FWFBPUlRfUFJJVkFURSBz
dGF0aWMgYm9vbCBkZWNvZGUoRGVjb2RlciYsIENTdHJpbmcmKSBXQVJOX1VOVVNFRF9SRVRVUk47
CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBPcHRpb25hbDxDU3RyaW5nPiBkZWNvZGUo
RGVjb2RlciYpOwogfTsKIAogdGVtcGxhdGU8PiBzdHJ1Y3QgQ29kZXI8U3RyaW5nPiB7CiAgICAg
V1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiwgY29uc3QgU3Ry
aW5nJik7Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVy
JiwgU3RyaW5nJikgV0FSTl9VTlVTRURfUkVUVVJOOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBz
dGF0aWMgT3B0aW9uYWw8U3RyaW5nPiBkZWNvZGUoRGVjb2RlciYpOwogfTsKIAogdGVtcGxhdGU8
PiBzdHJ1Y3QgQ29kZXI8U0hBMTo6RGlnZXN0PiB7CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0
YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiwgY29uc3QgU0hBMTo6RGlnZXN0Jik7Ci0gICAgV1RG
X0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVyJiwgU0hBMTo6RGlnZXN0
JikgV0FSTl9VTlVTRURfUkVUVVJOOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgT3B0
aW9uYWw8U0hBMTo6RGlnZXN0PiBkZWNvZGUoRGVjb2RlciYpOwogfTsKIAogfQpJbmRleDogU291
cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudERlY29kZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnREZWNvZGVyLmNwcAkocmV2
aXNpb24gMjU5ODk4KQorKysgU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudERl
Y29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw2NSArNTksNjcgQEAgYm9vbCBEZWNvZGVy
OjpkZWNvZGVGaXhlZExlbmd0aERhdGEodWludAogICAgIHJldHVybiB0cnVlOwogfQogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBUeXBlPgotYm9vbCBEZWNvZGVyOjpkZWNvZGVOdW1iZXIoVHlwZSYgdmFs
dWUpCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorRGVjb2RlciYgRGVjb2Rlcjo6ZGVjb2RlTnVtYmVy
KE9wdGlvbmFsPFQ+JiBvcHRpb25hbCkKIHsKLSAgICBpZiAoIWJ1ZmZlcklzTGFyZ2VFbm91Z2hU
b0NvbnRhaW4oc2l6ZW9mKHZhbHVlKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAo
IWJ1ZmZlcklzTGFyZ2VFbm91Z2hUb0NvbnRhaW4oc2l6ZW9mKFQpKSkKKyAgICAgICAgcmV0dXJu
ICp0aGlzOwogCi0gICAgbWVtY3B5KCZ2YWx1ZSwgbV9idWZmZXJQb3NpdGlvbiwgc2l6ZW9mKHZh
bHVlKSk7Ci0gICAgbV9idWZmZXJQb3NpdGlvbiArPSBzaXplb2YoVHlwZSk7CisgICAgVCB2YWx1
ZTsKKyAgICBtZW1jcHkoJnZhbHVlLCBtX2J1ZmZlclBvc2l0aW9uLCBzaXplb2YoVCkpOworICAg
IG1fYnVmZmVyUG9zaXRpb24gKz0gc2l6ZW9mKFQpOwogCiAgICAgRW5jb2Rlcjo6dXBkYXRlQ2hl
Y2tzdW1Gb3JOdW1iZXIobV9zaGExLCB2YWx1ZSk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgb3B0
aW9uYWwgPSB2YWx1ZTsKKyAgICByZXR1cm4gKnRoaXM7CiB9CiAKLWJvb2wgRGVjb2Rlcjo6ZGVj
b2RlKGJvb2wmIHJlc3VsdCkKK0RlY29kZXImIERlY29kZXI6Om9wZXJhdG9yPj4oT3B0aW9uYWw8
Ym9vbD4mIHJlc3VsdCkKIHsKICAgICByZXR1cm4gZGVjb2RlTnVtYmVyKHJlc3VsdCk7CiB9CiAK
LWJvb2wgRGVjb2Rlcjo6ZGVjb2RlKHVpbnQ4X3QmIHJlc3VsdCkKK0RlY29kZXImIERlY29kZXI6
Om9wZXJhdG9yPj4oT3B0aW9uYWw8dWludDhfdD4mIHJlc3VsdCkKIHsKICAgICByZXR1cm4gZGVj
b2RlTnVtYmVyKHJlc3VsdCk7CiB9CiAKLWJvb2wgRGVjb2Rlcjo6ZGVjb2RlKHVpbnQxNl90JiBy
ZXN1bHQpCitEZWNvZGVyJiBEZWNvZGVyOjpvcGVyYXRvcj4+KE9wdGlvbmFsPHVpbnQxNl90PiYg
cmVzdWx0KQogewogICAgIHJldHVybiBkZWNvZGVOdW1iZXIocmVzdWx0KTsKIH0KIAotYm9vbCBE
ZWNvZGVyOjpkZWNvZGUoaW50MTZfdCYgcmVzdWx0KQorRGVjb2RlciYgRGVjb2Rlcjo6b3BlcmF0
b3I+PihPcHRpb25hbDxpbnQxNl90PiYgcmVzdWx0KQogewogICAgIHJldHVybiBkZWNvZGVOdW1i
ZXIocmVzdWx0KTsKIH0KIAotYm9vbCBEZWNvZGVyOjpkZWNvZGUodWludDMyX3QmIHJlc3VsdCkK
K0RlY29kZXImIERlY29kZXI6Om9wZXJhdG9yPj4oT3B0aW9uYWw8dWludDMyX3Q+JiByZXN1bHQp
CiB7CiAgICAgcmV0dXJuIGRlY29kZU51bWJlcihyZXN1bHQpOwogfQogCi1ib29sIERlY29kZXI6
OmRlY29kZSh1aW50NjRfdCYgcmVzdWx0KQorRGVjb2RlciYgRGVjb2Rlcjo6b3BlcmF0b3I+PihP
cHRpb25hbDx1aW50NjRfdD4mIHJlc3VsdCkKIHsKICAgICByZXR1cm4gZGVjb2RlTnVtYmVyKHJl
c3VsdCk7CiB9CiAKLWJvb2wgRGVjb2Rlcjo6ZGVjb2RlKGludDMyX3QmIHJlc3VsdCkKK0RlY29k
ZXImIERlY29kZXI6Om9wZXJhdG9yPj4oT3B0aW9uYWw8aW50MzJfdD4mIHJlc3VsdCkKIHsKICAg
ICByZXR1cm4gZGVjb2RlTnVtYmVyKHJlc3VsdCk7CiB9CiAKLWJvb2wgRGVjb2Rlcjo6ZGVjb2Rl
KGludDY0X3QmIHJlc3VsdCkKK0RlY29kZXImIERlY29kZXI6Om9wZXJhdG9yPj4oT3B0aW9uYWw8
aW50NjRfdD4mIHJlc3VsdCkKIHsKICAgICByZXR1cm4gZGVjb2RlTnVtYmVyKHJlc3VsdCk7CiB9
CiAKLWJvb2wgRGVjb2Rlcjo6ZGVjb2RlKGZsb2F0JiByZXN1bHQpCitEZWNvZGVyJiBEZWNvZGVy
OjpvcGVyYXRvcj4+KE9wdGlvbmFsPGZsb2F0PiYgcmVzdWx0KQogewogICAgIHJldHVybiBkZWNv
ZGVOdW1iZXIocmVzdWx0KTsKIH0KIAotYm9vbCBEZWNvZGVyOjpkZWNvZGUoZG91YmxlJiByZXN1
bHQpCitEZWNvZGVyJiBEZWNvZGVyOjpvcGVyYXRvcj4+KE9wdGlvbmFsPGRvdWJsZT4mIHJlc3Vs
dCkKIHsKICAgICByZXR1cm4gZGVjb2RlTnVtYmVyKHJlc3VsdCk7CiB9CkluZGV4OiBTb3VyY2Uv
V1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RGVjb2Rlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnREZWNvZGVyLmgJKHJldmlzaW9uIDI1
OTg5OCkKKysrIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnREZWNvZGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ1LDQ3ICs0NSwzNiBAQCBwdWJsaWM6CiAKICAgICBXVEZfRVhQ
T1JUX1BSSVZBVEUgYm9vbCBkZWNvZGVGaXhlZExlbmd0aERhdGEodWludDhfdCosIHNpemVfdCkg
V0FSTl9VTlVTRURfUkVUVVJOOwogCi0gICAgV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgZGVjb2Rl
KGJvb2wmKSBXQVJOX1VOVVNFRF9SRVRVUk47Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wg
ZGVjb2RlKHVpbnQ4X3QmKSBXQVJOX1VOVVNFRF9SRVRVUk47Ci0gICAgV1RGX0VYUE9SVF9QUklW
QVRFIGJvb2wgZGVjb2RlKHVpbnQxNl90JikgV0FSTl9VTlVTRURfUkVUVVJOOwotICAgIFdURl9F
WFBPUlRfUFJJVkFURSBib29sIGRlY29kZSh1aW50MzJfdCYpIFdBUk5fVU5VU0VEX1JFVFVSTjsK
LSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBkZWNvZGUodWludDY0X3QmKSBXQVJOX1VOVVNF
RF9SRVRVUk47Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgZGVjb2RlKGludDE2X3QmKSBX
QVJOX1VOVVNFRF9SRVRVUk47Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgZGVjb2RlKGlu
dDMyX3QmKSBXQVJOX1VOVVNFRF9SRVRVUk47Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wg
ZGVjb2RlKGludDY0X3QmKSBXQVJOX1VOVVNFRF9SRVRVUk47Ci0gICAgV1RGX0VYUE9SVF9QUklW
QVRFIGJvb2wgZGVjb2RlKGZsb2F0JikgV0FSTl9VTlVTRURfUkVUVVJOOwotICAgIFdURl9FWFBP
UlRfUFJJVkFURSBib29sIGRlY29kZShkb3VibGUmKSBXQVJOX1VOVVNFRF9SRVRVUk47CisgICAg
V1RGX0VYUE9SVF9QUklWQVRFIERlY29kZXImIG9wZXJhdG9yPj4oT3B0aW9uYWw8Ym9vbD4mKTsK
KyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgRGVjb2RlciYgb3BlcmF0b3I+PihPcHRpb25hbDx1aW50
OF90PiYpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBEZWNvZGVyJiBvcGVyYXRvcj4+KE9wdGlv
bmFsPHVpbnQxNl90PiYpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBEZWNvZGVyJiBvcGVyYXRv
cj4+KE9wdGlvbmFsPHVpbnQzMl90PiYpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBEZWNvZGVy
JiBvcGVyYXRvcj4+KE9wdGlvbmFsPHVpbnQ2NF90PiYpOworICAgIFdURl9FWFBPUlRfUFJJVkFU
RSBEZWNvZGVyJiBvcGVyYXRvcj4+KE9wdGlvbmFsPGludDE2X3Q+Jik7CisgICAgV1RGX0VYUE9S
VF9QUklWQVRFIERlY29kZXImIG9wZXJhdG9yPj4oT3B0aW9uYWw8aW50MzJfdD4mKTsKKyAgICBX
VEZfRVhQT1JUX1BSSVZBVEUgRGVjb2RlciYgb3BlcmF0b3I+PihPcHRpb25hbDxpbnQ2NF90PiYp
OworICAgIFdURl9FWFBPUlRfUFJJVkFURSBEZWNvZGVyJiBvcGVyYXRvcj4+KE9wdGlvbmFsPGZs
b2F0PiYpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBEZWNvZGVyJiBvcGVyYXRvcj4+KE9wdGlv
bmFsPGRvdWJsZT4mKTsKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEU+IFdBUk5fVU5VU0VEX1JF
VFVSTgotICAgIGF1dG8gZGVjb2RlKEUmIGUpIC0+IHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19l
bnVtPEU+Ojp2YWx1ZSwgYm9vbD4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzdGQ6OmVuYWJs
ZV9pZl90PCFzdGQ6OmlzX2FyaXRobWV0aWM8dHlwZW5hbWUgc3RkOjpyZW1vdmVfY29uc3Q8VD4+
Ojp2YWx1ZSAmJiAhc3RkOjppc19lbnVtPFQ+Ojp2YWx1ZT4qID0gbnVsbHB0cj4KKyAgICBEZWNv
ZGVyJiBvcGVyYXRvcj4+KE9wdGlvbmFsPFQ+JiByZXN1bHQpCiAgICAgewotICAgICAgICB1aW50
NjRfdCB2YWx1ZTsKLSAgICAgICAgaWYgKCFkZWNvZGUodmFsdWUpKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICBpZiAoIWlzVmFsaWRFbnVtPEU+KHZhbHVlKSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBlID0gc3RhdGljX2Nhc3Q8RT4odmFsdWUpOwot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBX
QVJOX1VOVVNFRF9SRVRVUk4KLSAgICBib29sIGRlY29kZUVudW0oVCYgcmVzdWx0KQotICAgIHsK
LSAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoVCkgPD0gOCwgIkVudW0gdHlwZSBUIG11c3Qg
bm90IGJlIGxhcmdlciB0aGFuIDY0IGJpdHMhIik7Ci0KLSAgICAgICAgdWludDY0X3QgdmFsdWU7
Ci0gICAgICAgIGlmICghZGVjb2RlKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgCi0gICAgICAgIHJlc3VsdCA9IHN0YXRpY19jYXN0PFQ+KHZhbHVlKTsKLSAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJlc3VsdCA9IENvZGVyPFQ+OjpkZWNvZGUoKnRoaXMp
OworICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
VD4gV0FSTl9VTlVTRURfUkVUVVJOCi0gICAgYXV0byBkZWNvZGUoVCYgdCkgLT4gc3RkOjplbmFi
bGVfaWZfdDwhc3RkOjppc19lbnVtPFQ+Ojp2YWx1ZSwgYm9vbD4KKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBFLCBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfZW51bTxFPjo6dmFsdWU+KiA9IG51bGxw
dHI+CisgICAgRGVjb2RlciYgb3BlcmF0b3I+PihPcHRpb25hbDxFPiYgcmVzdWx0KQogICAgIHsK
LSAgICAgICAgcmV0dXJuIENvZGVyPFQ+OjpkZWNvZGUoKnRoaXMsIHQpOworICAgICAgICBzdGF0
aWNfYXNzZXJ0KHNpemVvZihFKSA8PSA4LCAiRW51bSB0eXBlIFQgbXVzdCBub3QgYmUgbGFyZ2Vy
IHRoYW4gNjQgYml0cyEiKTsKKyAgICAgICAgT3B0aW9uYWw8dWludDY0X3Q+IHZhbHVlOworICAg
ICAgICAqdGhpcyA+PiB2YWx1ZTsKKyAgICAgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgICAgIHJl
dHVybiAqdGhpczsKKyAgICAgICAgaWYgKCFpc1ZhbGlkRW51bTxFPigqdmFsdWUpKQorICAgICAg
ICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICByZXN1bHQgPSBzdGF0aWNfY2FzdDxFPigqdmFs
dWUpOworICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4gV0FSTl9VTlVTRURfUkVUVVJOCkBAIC0xMDMsNyArOTIsNyBAQCBwdWJsaWM6CiAKIHBy
aXZhdGU6CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgYnVmZmVySXNMYXJnZUVub3VnaFRv
Q29udGFpbihzaXplX3QpIGNvbnN0IFdBUk5fVU5VU0VEX1JFVFVSTjsKLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBUeXBlPiBib29sIGRlY29kZU51bWJlcihUeXBlJikgV0FSTl9VTlVTRURfUkVUVVJO
OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+IERlY29kZXImIGRlY29kZU51bWJlcihPcHRp
b25hbDxUeXBlPiYpIFdBUk5fVU5VU0VEX1JFVFVSTjsKIAogICAgIGNvbnN0IHVpbnQ4X3QqIG1f
YnVmZmVyOwogICAgIGNvbnN0IHVpbnQ4X3QqIG1fYnVmZmVyUG9zaXRpb247CkluZGV4OiBTb3Vy
Y2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RW5jb2Rlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudEVuY29kZXIuY3BwCShyZXZp
c2lvbiAyNTk4OTgpCisrKyBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RW5j
b2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDYyICs2Miw2MyBAQCB2b2lkIEVuY29kZXI6
OmVuY29kZUZpeGVkTGVuZ3RoRGF0YShjb25zCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+
Ci12b2lkIEVuY29kZXI6OmVuY29kZU51bWJlcihUeXBlIHZhbHVlKQorRW5jb2RlciYgRW5jb2Rl
cjo6ZW5jb2RlTnVtYmVyKFR5cGUgdmFsdWUpCiB7CiAgICAgRW5jb2Rlcjo6dXBkYXRlQ2hlY2tz
dW1Gb3JOdW1iZXIobV9zaGExLCB2YWx1ZSk7CiAKICAgICB1aW50OF90KiBidWZmZXIgPSBncm93
KHNpemVvZihUeXBlKSk7CiAgICAgbWVtY3B5KGJ1ZmZlciwgJnZhbHVlLCBzaXplb2YoVHlwZSkp
OworICAgIHJldHVybiAqdGhpczsKIH0KIAotdm9pZCBFbmNvZGVyOjplbmNvZGUoYm9vbCB2YWx1
ZSkKK0VuY29kZXImIEVuY29kZXI6Om9wZXJhdG9yPDwoYm9vbCB2YWx1ZSkKIHsKLSAgICBlbmNv
ZGVOdW1iZXIodmFsdWUpOworICAgIHJldHVybiBlbmNvZGVOdW1iZXIodmFsdWUpOwogfQogCi12
b2lkIEVuY29kZXI6OmVuY29kZSh1aW50OF90IHZhbHVlKQorRW5jb2RlciYgRW5jb2Rlcjo6b3Bl
cmF0b3I8PCh1aW50OF90IHZhbHVlKQogewotICAgIGVuY29kZU51bWJlcih2YWx1ZSk7CisgICAg
cmV0dXJuIGVuY29kZU51bWJlcih2YWx1ZSk7CiB9CiAKLXZvaWQgRW5jb2Rlcjo6ZW5jb2RlKHVp
bnQxNl90IHZhbHVlKQorRW5jb2RlciYgRW5jb2Rlcjo6b3BlcmF0b3I8PCh1aW50MTZfdCB2YWx1
ZSkKIHsKLSAgICBlbmNvZGVOdW1iZXIodmFsdWUpOworICAgIHJldHVybiBlbmNvZGVOdW1iZXIo
dmFsdWUpOwogfQogCi12b2lkIEVuY29kZXI6OmVuY29kZShpbnQxNl90IHZhbHVlKQorRW5jb2Rl
ciYgRW5jb2Rlcjo6b3BlcmF0b3I8PChpbnQxNl90IHZhbHVlKQogewotICAgIGVuY29kZU51bWJl
cih2YWx1ZSk7CisgICAgcmV0dXJuIGVuY29kZU51bWJlcih2YWx1ZSk7CiB9CiAKLXZvaWQgRW5j
b2Rlcjo6ZW5jb2RlKHVpbnQzMl90IHZhbHVlKQorRW5jb2RlciYgRW5jb2Rlcjo6b3BlcmF0b3I8
PCh1aW50MzJfdCB2YWx1ZSkKIHsKLSAgICBlbmNvZGVOdW1iZXIodmFsdWUpOworICAgIHJldHVy
biBlbmNvZGVOdW1iZXIodmFsdWUpOwogfQogCi12b2lkIEVuY29kZXI6OmVuY29kZSh1aW50NjRf
dCB2YWx1ZSkKK0VuY29kZXImIEVuY29kZXI6Om9wZXJhdG9yPDwodWludDY0X3QgdmFsdWUpCiB7
Ci0gICAgZW5jb2RlTnVtYmVyKHZhbHVlKTsKKyAgICByZXR1cm4gZW5jb2RlTnVtYmVyKHZhbHVl
KTsKIH0KIAotdm9pZCBFbmNvZGVyOjplbmNvZGUoaW50MzJfdCB2YWx1ZSkKK0VuY29kZXImIEVu
Y29kZXI6Om9wZXJhdG9yPDwoaW50MzJfdCB2YWx1ZSkKIHsKLSAgICBlbmNvZGVOdW1iZXIodmFs
dWUpOworICAgIHJldHVybiBlbmNvZGVOdW1iZXIodmFsdWUpOwogfQogCi12b2lkIEVuY29kZXI6
OmVuY29kZShpbnQ2NF90IHZhbHVlKQorRW5jb2RlciYgRW5jb2Rlcjo6b3BlcmF0b3I8PChpbnQ2
NF90IHZhbHVlKQogewotICAgIGVuY29kZU51bWJlcih2YWx1ZSk7CisgICAgcmV0dXJuIGVuY29k
ZU51bWJlcih2YWx1ZSk7CiB9CiAKLXZvaWQgRW5jb2Rlcjo6ZW5jb2RlKGZsb2F0IHZhbHVlKQor
RW5jb2RlciYgRW5jb2Rlcjo6b3BlcmF0b3I8PChmbG9hdCB2YWx1ZSkKIHsKLSAgICBlbmNvZGVO
dW1iZXIodmFsdWUpOworICAgIHJldHVybiBlbmNvZGVOdW1iZXIodmFsdWUpOwogfQogCi12b2lk
IEVuY29kZXI6OmVuY29kZShkb3VibGUgdmFsdWUpCitFbmNvZGVyJiBFbmNvZGVyOjpvcGVyYXRv
cjw8KGRvdWJsZSB2YWx1ZSkKIHsKLSAgICBlbmNvZGVOdW1iZXIodmFsdWUpOworICAgIHJldHVy
biBlbmNvZGVOdW1iZXIodmFsdWUpOwogfQogCiB2b2lkIEVuY29kZXI6OmVuY29kZUNoZWNrc3Vt
KCkKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRFbmNvZGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudEVuY29k
ZXIuaAkocmV2aXNpb24gMjU5ODk4KQorKysgU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVy
c2lzdGVudEVuY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsMzIgKzQ1LDMxIEBAIHB1Ymxp
YzoKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBlbmNvZGVDaGVja3N1bSgpOwogICAgIFdU
Rl9FWFBPUlRfUFJJVkFURSB2b2lkIGVuY29kZUZpeGVkTGVuZ3RoRGF0YShjb25zdCB1aW50OF90
Kiwgc2l6ZV90KTsKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEU+IGF1dG8gZW5jb2RlKEUgdmFs
dWUpIC0+IHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19lbnVtPEU+Ojp2YWx1ZT4KKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBULCBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfZW51bTxUPjo6dmFsdWU+
KiA9IG51bGxwdHI+CisgICAgRW5jb2RlciYgb3BlcmF0b3I8PChjb25zdCBUJiB0KQogICAgIHsK
LSAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoRSkgPD0gc2l6ZW9mKHVpbnQ2NF90KSwgIkVu
dW0gdHlwZSBtdXN0IG5vdCBiZSBsYXJnZXIgdGhhbiA2NCBiaXRzLiIpOwotCi0gICAgICAgIEFT
U0VSVChpc1ZhbGlkRW51bTxFPihzdGF0aWNfY2FzdDx1aW50NjRfdD4odmFsdWUpKSk7Ci0gICAg
ICAgIGVuY29kZShzdGF0aWNfY2FzdDx1aW50NjRfdD4odmFsdWUpKTsKLSAgICB9Ci0KLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIGVuY29kZUVudW0oVCB0KQotICAgIHsKLSAgICAgICAg
Q09NUElMRV9BU1NFUlQoc2l6ZW9mKFQpIDw9IHNpemVvZih1aW50NjRfdCksIGVudW1fdHlwZV9t
dXN0X25vdF9iZV9sYXJnZXJfdGhhbl82NF9iaXRzKTsKLQotICAgICAgICBlbmNvZGUoc3RhdGlj
X2Nhc3Q8dWludDY0X3Q+KHQpKTsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoVCkgPD0g
c2l6ZW9mKHVpbnQ2NF90KSwgIkVudW0gdHlwZSBtdXN0IG5vdCBiZSBsYXJnZXIgdGhhbiA2NCBi
aXRzLiIpOworICAgICAgICByZXR1cm4gKnRoaXMgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHQp
OwogICAgIH0KIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGF1dG8gZW5jb2RlKGNvbnN0IFQm
IHQpIC0+IHN0ZDo6ZW5hYmxlX2lmX3Q8IXN0ZDo6aXNfZW51bTxUPjo6dmFsdWU+CisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVCwgc3RkOjplbmFibGVfaWZfdDwhc3RkOjppc19lbnVtPFQ+Ojp2YWx1
ZSAmJiAhc3RkOjppc19hcml0aG1ldGljPHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX2NvbnN0PFQ+Pjo6
dmFsdWU+KiA9IG51bGxwdHI+CisgICAgRW5jb2RlciYgb3BlcmF0b3I8PChjb25zdCBUJiB0KQog
ICAgIHsKICAgICAgICAgQ29kZXI8VD46OmVuY29kZSgqdGhpcywgdCk7Ci0gICAgfQotCi0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4gRW5jb2RlciYgb3BlcmF0b3I8PChjb25zdCBUJiB0KQotICAg
IHsKLSAgICAgICAgZW5jb2RlKHQpOwogICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQogCisg
ICAgV1RGX0VYUE9SVF9QUklWQVRFIEVuY29kZXImIG9wZXJhdG9yPDwoYm9vbCk7CisgICAgV1RG
X0VYUE9SVF9QUklWQVRFIEVuY29kZXImIG9wZXJhdG9yPDwodWludDhfdCk7CisgICAgV1RGX0VY
UE9SVF9QUklWQVRFIEVuY29kZXImIG9wZXJhdG9yPDwodWludDE2X3QpOworICAgIFdURl9FWFBP
UlRfUFJJVkFURSBFbmNvZGVyJiBvcGVyYXRvcjw8KHVpbnQzMl90KTsKKyAgICBXVEZfRVhQT1JU
X1BSSVZBVEUgRW5jb2RlciYgb3BlcmF0b3I8PCh1aW50NjRfdCk7CisgICAgV1RGX0VYUE9SVF9Q
UklWQVRFIEVuY29kZXImIG9wZXJhdG9yPDwoaW50MTZfdCk7CisgICAgV1RGX0VYUE9SVF9QUklW
QVRFIEVuY29kZXImIG9wZXJhdG9yPDwoaW50MzJfdCk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRF
IEVuY29kZXImIG9wZXJhdG9yPDwoaW50NjRfdCk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIEVu
Y29kZXImIG9wZXJhdG9yPDwoZmxvYXQpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBFbmNvZGVy
JiBvcGVyYXRvcjw8KGRvdWJsZSk7CisKICAgICBjb25zdCB1aW50OF90KiBidWZmZXIoKSBjb25z
dCB7IHJldHVybiBtX2J1ZmZlci5kYXRhKCk7IH0KICAgICBzaXplX3QgYnVmZmVyU2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fYnVmZmVyLnNpemUoKTsgfQogCkBAIC04MCwxOCArNzksOCBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSVBDRW5jb2RlciA9IGZhbHNlOwogCiBw
cml2YXRlOgotICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGVuY29kZShib29sKTsKLSAgICBX
VEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBlbmNvZGUodWludDhfdCk7Ci0gICAgV1RGX0VYUE9SVF9Q
UklWQVRFIHZvaWQgZW5jb2RlKHVpbnQxNl90KTsKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBlbmNvZGUodWludDMyX3QpOwotICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGVuY29kZSh1
aW50NjRfdCk7Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZW5jb2RlKGludDE2X3QpOwot
ICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGVuY29kZShpbnQzMl90KTsKLSAgICBXVEZfRVhQ
T1JUX1BSSVZBVEUgdm9pZCBlbmNvZGUoaW50NjRfdCk7Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRF
IHZvaWQgZW5jb2RlKGZsb2F0KTsKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBlbmNvZGUo
ZG91YmxlKTsKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+IHZvaWQgZW5jb2RlTnVtYmVy
KFR5cGUpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+IEVuY29kZXImIGVuY29kZU51bWJl
cihUeXBlKTsKIAogICAgIHVpbnQ4X3QqIGdyb3coc2l6ZV90KTsKIApJbmRleDogU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwko
cmV2aXNpb24gMjU5ODk4KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMzMgQEAKKzIwMjAtMDQtMTAgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hy
aXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBQZXJzaXN0ZW50Q29kZXJzIHNob3VsZCB1
c2UgbW9kZXJuIGRlY29kaW5nIHN5bnRheAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjA3NDk3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRs
ZXIuCisKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kSG9zdDo6c2hvd0NlcnRpZmljYXRlKToK
KyAgICAgICAgKiBsb2FkZXIvRmV0Y2hPcHRpb25zLmg6CisgICAgICAgIChXZWJDb3JlOjpGZXRj
aE9wdGlvbnM6OmRlY29kZVBlcnNpc3RlbnQpOgorICAgICAgICAqIHBhZ2UvY3NwL0NvbnRlbnRT
ZWN1cml0eVBvbGljeVJlc3BvbnNlSGVhZGVycy5oOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVu
dFNlY3VyaXR5UG9saWN5UmVzcG9uc2VIZWFkZXJzOjplbmNvZGUgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5UmVzcG9uc2VIZWFkZXJzOjpkZWNvZGUpOgor
ICAgICAgICAqIHBsYXRmb3JtL1Bhc3RlYm9hcmRDdXN0b21EYXRhLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlBhc3RlYm9hcmRDdXN0b21EYXRhOjpmcm9tU2hhcmVkQnVmZmVyKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlTG9hZFByaW9yaXR5Lmg6CisgICAgICAgICogcGxh
dGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmg6CisgICAgICAgIChXZWJDb3JlOjpS
ZXNvdXJjZVJlcXVlc3RCYXNlOjplbmNvZGVCYXNlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlc291cmNlUmVxdWVzdEJhc2U6OmRlY29kZUJhc2UpOgorICAgICAgICAqIHBsYXRmb3JtL25l
dHdvcmsvY2YvQ2VydGlmaWNhdGVJbmZvLmg6CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpk
ZWNvZGVDRkRhdGEpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6ZGVjb2RlU2VjVHJ1c3RS
ZWYpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6ZGVjb2RlQ2VydGlmaWNhdGVDaGFpbik6
CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpDb2RlcjxXZWJDb3JlOjpDZXJ0aWZpY2F0ZUlu
Zm8+OjplbmNvZGUpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6Q29kZXI8V2ViQ29yZTo6
Q2VydGlmaWNhdGVJbmZvPjo6ZGVjb2RlKToKKyAgICAgICAgKiB3b3JrZXJzL3NlcnZpY2Uvc2Vy
dmVyL1JlZ2lzdHJhdGlvbkRhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lzdHJh
dGlvbkRhdGFiYXNlOjpkb1B1c2hDaGFuZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lzdHJh
dGlvbkRhdGFiYXNlOjppbXBvcnRSZWNvcmRzKToKKwogMjAyMC0wNC0xMCAgQW50dGkgS29pdmlz
dG8gIDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgW0NTUyBTaGFkb3cgUGFydHNdIEJhZCBz
dHlsZSBzaGFyaW5nIGJldHdlZW4gc2libGluZyBlbGVtZW50cyB3aXRoIGRpZmZlcmVudCBwYXJ0
IGF0dHJpYnV0ZXMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9u
dGVuZEhvc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JGcm9udGVuZEhvc3QuY3BwCShyZXZpc2lvbiAyNTk4OTgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjAsNiArNjAsNyBAQAogI2luY2x1ZGUgPHBhbC9zeXN0ZW0vU291bmQuaD4KICNpbmNsdWRlIDx3
dGYvSlNPTlZhbHVlcy5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKyNpbmNsdWRl
IDx3dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudERlY29kZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9CYXNlNjQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNTc0LDE1ICs1NzUsMTYgQEAg
Ym9vbCBJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OnNob3dDZXJ0aWZpYwogICAgIGlmICghYmFzZTY0
RGVjb2RlKHNlcmlhbGl6ZWRDZXJ0aWZpY2F0ZSwgZGF0YSkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIENlcnRpZmljYXRlSW5mbyBjZXJ0aWZpY2F0ZUluZm87CiAgICAgV1RGOjpQZXJz
aXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyKGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSk7Ci0gICAg
aWYgKCFkZWNvZGVyLmRlY29kZShjZXJ0aWZpY2F0ZUluZm8pKQorICAgIE9wdGlvbmFsPENlcnRp
ZmljYXRlSW5mbz4gY2VydGlmaWNhdGVJbmZvOworICAgIGRlY29kZXIgPj4gY2VydGlmaWNhdGVJ
bmZvOworICAgIGlmICghY2VydGlmaWNhdGVJbmZvKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICBpZiAoY2VydGlmaWNhdGVJbmZvLmlzRW1wdHkoKSkKKyAgICBpZiAoY2VydGlmaWNhdGVJ
bmZvLT5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIG1fY2xpZW50LT5z
aG93Q2VydGlmaWNhdGUoY2VydGlmaWNhdGVJbmZvKTsKKyAgICBtX2NsaWVudC0+c2hvd0NlcnRp
ZmljYXRlKCpjZXJ0aWZpY2F0ZUluZm8pOwogICAgIHJldHVybiB0cnVlOwogfQogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rvck5ldHdvcmtBZ2VudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JO
ZXR3b3JrQWdlbnQuY3BwCShyZXZpc2lvbiAyNTk4OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvYWdlbnRzL0luc3BlY3Rvck5ldHdvcmtBZ2VudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTk2OSw3ICs5NjksNyBAQCB2b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6Z2V0U2VyaWFsaXpl
CiAgICAgfQogCiAgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2RlciBlbmNvZGVyOwotICAgIGVu
Y29kZXIgPDwgY2VydGlmaWNhdGUudmFsdWUoKTsKKyAgICBXVEY6OlBlcnNpc3RlbmNlOjpDb2Rl
cjxXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8+OjplbmNvZGUoZW5jb2RlciwgY2VydGlmaWNhdGUu
dmFsdWUoKSk7CiAgICAgKnNlcmlhbGl6ZWRDZXJ0aWZpY2F0ZSA9IGJhc2U2NEVuY29kZShlbmNv
ZGVyLmJ1ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNpemUoKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2xvYWRlci9GZXRjaE9wdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvRmV0Y2hPcHRpb25zLmgJKHJldmlzaW9uIDI1OTg5OCkKKysrIFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9GZXRjaE9wdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTY3LDcgKzE2Nyw4
IEBAIHRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6RmUKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiBpbmxpbmUgdm9pZCBGZXRjaE9w
dGlvbnM6OmVuY29kZVBlcnNpc3RlbnQoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3RlbXBsYXRl
PGNsYXNzIEVuY29kZXI+CitpbmxpbmUgdm9pZCBGZXRjaE9wdGlvbnM6OmVuY29kZVBlcnNpc3Rl
bnQoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIHsKICAgICAvLyBDaGFuZ2VzIHRvIGVuY29kaW5n
IGhlcmUgc2hvdWxkIGJ1bXAgTmV0d29ya0NhY2hlIFN0b3JhZ2UgZm9ybWF0IHZlcnNpb24uCiAg
ICAgZW5jb2RlciA8PCBkZXN0aW5hdGlvbjsKQEAgLTE4MCw1OSArMTgxLDcwIEBAIHRlbXBsYXRl
PGNsYXNzIEVuY29kZXI+IGlubGluZSB2b2lkIEZldGMKICAgICBlbmNvZGVyIDw8IGtlZXBBbGl2
ZTsKIH0KIAotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gaW5saW5lIGJvb2wgRmV0Y2hPcHRpb25z
OjpkZWNvZGVQZXJzaXN0ZW50KERlY29kZXImIGRlY29kZXIsIEZldGNoT3B0aW9ucyYgb3B0aW9u
cykKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+CitpbmxpbmUgV0FSTl9VTlVTRURfUkVUVVJOIGJv
b2wgRmV0Y2hPcHRpb25zOjpkZWNvZGVQZXJzaXN0ZW50KERlY29kZXImIGRlY29kZXIsIEZldGNo
T3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBGZXRjaE9wdGlvbnM6OkRlc3RpbmF0aW9uIGRlc3Rp
bmF0aW9uOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoZGVzdGluYXRpb24pKQorICAgIE9wdGlv
bmFsPEZldGNoT3B0aW9uczo6RGVzdGluYXRpb24+IGRlc3RpbmF0aW9uOworICAgIGRlY29kZXIg
Pj4gZGVzdGluYXRpb247CisgICAgaWYgKCFkZXN0aW5hdGlvbikKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgRmV0Y2hPcHRpb25zOjpNb2RlIG1vZGU7Ci0gICAgaWYgKCFkZWNvZGVyLmRl
Y29kZShtb2RlKSkKKyAgICBPcHRpb25hbDxGZXRjaE9wdGlvbnM6Ok1vZGU+IG1vZGU7CisgICAg
ZGVjb2RlciA+PiBtb2RlOworICAgIGlmICghbW9kZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgRmV0Y2hPcHRpb25zOjpDcmVkZW50aWFscyBjcmVkZW50aWFsczsKLSAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKGNyZWRlbnRpYWxzKSkKKyAgICBPcHRpb25hbDxGZXRjaE9wdGlvbnM6OkNy
ZWRlbnRpYWxzPiBjcmVkZW50aWFsczsKKyAgICBkZWNvZGVyID4+IGNyZWRlbnRpYWxzOworICAg
IGlmICghY3JlZGVudGlhbHMpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEZldGNoT3B0
aW9uczo6Q2FjaGUgY2FjaGU7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShjYWNoZSkpCisgICAg
T3B0aW9uYWw8RmV0Y2hPcHRpb25zOjpDYWNoZT4gY2FjaGU7CisgICAgZGVjb2RlciA+PiBjYWNo
ZTsKKyAgICBpZiAoIWNhY2hlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBGZXRjaE9w
dGlvbnM6OlJlZGlyZWN0IHJlZGlyZWN0OwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVkaXJl
Y3QpKQorICAgIE9wdGlvbmFsPEZldGNoT3B0aW9uczo6UmVkaXJlY3Q+IHJlZGlyZWN0OworICAg
IGRlY29kZXIgPj4gcmVkaXJlY3Q7CisgICAgaWYgKCFyZWRpcmVjdCkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgUmVmZXJyZXJQb2xpY3kgcmVmZXJyZXJQb2xpY3k7Ci0gICAgaWYgKCFk
ZWNvZGVyLmRlY29kZShyZWZlcnJlclBvbGljeSkpCisgICAgT3B0aW9uYWw8UmVmZXJyZXJQb2xp
Y3k+IHJlZmVycmVyUG9saWN5OworICAgIGRlY29kZXIgPj4gcmVmZXJyZXJQb2xpY3k7CisgICAg
aWYgKCFyZWZlcnJlclBvbGljeSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgU3RyaW5n
IGludGVncml0eTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGludGVncml0eSkpCisgICAgT3B0
aW9uYWw8U3RyaW5nPiBpbnRlZ3JpdHk7CisgICAgZGVjb2RlciA+PiBpbnRlZ3JpdHk7CisgICAg
aWYgKCFpbnRlZ3JpdHkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGJvb2wga2VlcEFs
aXZlOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoa2VlcEFsaXZlKSkKKyAgICBPcHRpb25hbDxi
b29sPiBrZWVwQWxpdmU7CisgICAgZGVjb2RlciA+PiBrZWVwQWxpdmU7CisgICAgaWYgKCFrZWVw
QWxpdmUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIG9wdGlvbnMuZGVzdGluYXRpb24g
PSBkZXN0aW5hdGlvbjsKLSAgICBvcHRpb25zLm1vZGUgPSBtb2RlOwotICAgIG9wdGlvbnMuY3Jl
ZGVudGlhbHMgPSBjcmVkZW50aWFsczsKLSAgICBvcHRpb25zLmNhY2hlID0gY2FjaGU7Ci0gICAg
b3B0aW9ucy5yZWRpcmVjdCA9IHJlZGlyZWN0OwotICAgIG9wdGlvbnMucmVmZXJyZXJQb2xpY3kg
PSByZWZlcnJlclBvbGljeTsKLSAgICBvcHRpb25zLmludGVncml0eSA9IFdURk1vdmUoaW50ZWdy
aXR5KTsKLSAgICBvcHRpb25zLmtlZXBBbGl2ZSA9IGtlZXBBbGl2ZTsKKyAgICBvcHRpb25zLmRl
c3RpbmF0aW9uID0gKmRlc3RpbmF0aW9uOworICAgIG9wdGlvbnMubW9kZSA9ICptb2RlOworICAg
IG9wdGlvbnMuY3JlZGVudGlhbHMgPSAqY3JlZGVudGlhbHM7CisgICAgb3B0aW9ucy5jYWNoZSA9
ICpjYWNoZTsKKyAgICBvcHRpb25zLnJlZGlyZWN0ID0gKnJlZGlyZWN0OworICAgIG9wdGlvbnMu
cmVmZXJyZXJQb2xpY3kgPSAqcmVmZXJyZXJQb2xpY3k7CisgICAgb3B0aW9ucy5pbnRlZ3JpdHkg
PSBXVEZNb3ZlKCppbnRlZ3JpdHkpOworICAgIG9wdGlvbnMua2VlcEFsaXZlID0gKmtlZXBBbGl2
ZTsKIAogICAgIHJldHVybiB0cnVlOwogfQogCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiBpbmxp
bmUgdm9pZCBGZXRjaE9wdGlvbnM6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAordGVt
cGxhdGU8Y2xhc3MgRW5jb2Rlcj4KK2lubGluZSB2b2lkIEZldGNoT3B0aW9uczo6ZW5jb2RlKEVu
Y29kZXImIGVuY29kZXIpIGNvbnN0CiB7CiAgICAgZW5jb2RlUGVyc2lzdGVudChlbmNvZGVyKTsK
ICAgICBlbmNvZGVyIDw8IGNsaWVudElkZW50aWZpZXIuYXNPcHRpb25hbCgpOwogfQogCi10ZW1w
bGF0ZTxjbGFzcyBEZWNvZGVyPiBpbmxpbmUgT3B0aW9uYWw8RmV0Y2hPcHRpb25zPiBGZXRjaE9w
dGlvbnM6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4K
K2lubGluZSBPcHRpb25hbDxGZXRjaE9wdGlvbnM+IEZldGNoT3B0aW9uczo6ZGVjb2RlKERlY29k
ZXImIGRlY29kZXIpCiB7CiAgICAgRmV0Y2hPcHRpb25zIG9wdGlvbnM7CiAgICAgaWYgKCFkZWNv
ZGVQZXJzaXN0ZW50KGRlY29kZXIsIG9wdGlvbnMpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFn
ZS9TZWN1cml0eU9yaWdpbkRhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdl
L1NlY3VyaXR5T3JpZ2luRGF0YS5oCShyZXZpc2lvbiAyNTk4OTgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wYWdlL1NlY3VyaXR5T3JpZ2luRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTUsMTEgKzEx
NSwxMiBAQCBPcHRpb25hbDxTZWN1cml0eU9yaWdpbkRhdGE+IFNlY3VyaXR5T3JpCiAgICAgaWYg
KCFob3N0KQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIAotICAgIE9wdGlvbmFs
PHVpbnQxNl90PiBwb3J0OwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocG9ydCkpCisgICAgT3B0
aW9uYWw8T3B0aW9uYWw8dWludDE2X3Q+PiBwb3J0OworICAgIGRlY29kZXIgPj4gcG9ydDsKKyAg
ICBpZiAoIXBvcnQpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgCi0gICAgU2Vj
dXJpdHlPcmlnaW5EYXRhIGRhdGEgeyBXVEZNb3ZlKCpwcm90b2NvbCksIFdURk1vdmUoKmhvc3Qp
LCBXVEZNb3ZlKHBvcnQpIH07CisgICAgU2VjdXJpdHlPcmlnaW5EYXRhIGRhdGEgeyBXVEZNb3Zl
KCpwcm90b2NvbCksIFdURk1vdmUoKmhvc3QpLCBXVEZNb3ZlKCpwb3J0KSB9OwogICAgIGlmIChk
YXRhLmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGlj
eVJlc3BvbnNlSGVhZGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvY3Nw
L0NvbnRlbnRTZWN1cml0eVBvbGljeVJlc3BvbnNlSGVhZGVycy5oCShyZXZpc2lvbiAyNTk4OTgp
CisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lSZXNwb25z
ZUhlYWRlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiBjbGFzcyBDb250ZW50U2VjdXJpdHlQb2xpY3k7CiBjbGFzcyBSZXNvdXJjZVJlc3Bv
bnNlOwogCi1lbnVtIGNsYXNzIENvbnRlbnRTZWN1cml0eVBvbGljeUhlYWRlclR5cGUgeworZW51
bSBjbGFzcyBDb250ZW50U2VjdXJpdHlQb2xpY3lIZWFkZXJUeXBlIDogYm9vbCB7CiAgICAgUmVw
b3J0LAogICAgIEVuZm9yY2UsCiB9OwpAQCAtNDYsNyArNDYsNyBAQCBwdWJsaWM6CiAgICAgQ29u
dGVudFNlY3VyaXR5UG9saWN5UmVzcG9uc2VIZWFkZXJzIGlzb2xhdGVkQ29weSgpIGNvbnN0Owog
CiAgICAgdGVtcGxhdGUgPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25z
dDsKLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIGJvb2wgZGVjb2RlKERlY29k
ZXImLCBDb250ZW50U2VjdXJpdHlQb2xpY3lSZXNwb25zZUhlYWRlcnMmKTsKKyAgICB0ZW1wbGF0
ZSA8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPENvbnRlbnRTZWN1cml0eVBvbGljeVJl
c3BvbnNlSGVhZGVycz4gZGVjb2RlKERlY29kZXImKTsKIAogICAgIGVudW0gRW1wdHlUYWcgeyBF
bXB0eSB9OwogICAgIHN0cnVjdCBNYXJrYWJsZVRyYWl0cyB7CkBAIC03OCwzMiArNzgsNDAgQEAg
dm9pZCBDb250ZW50U2VjdXJpdHlQb2xpY3lSZXNwb25zZUhlYWRlcgogICAgIGVuY29kZXIgPDwg
c3RhdGljX2Nhc3Q8dWludDY0X3Q+KG1faGVhZGVycy5zaXplKCkpOwogICAgIGZvciAoYXV0byYg
cGFpciA6IG1faGVhZGVycykgewogICAgICAgICBlbmNvZGVyIDw8IHBhaXIuZmlyc3Q7Ci0gICAg
ICAgIGVuY29kZXIuZW5jb2RlRW51bShwYWlyLnNlY29uZCk7CisgICAgICAgIGVuY29kZXIgPDwg
cGFpci5zZWNvbmQ7CiAgICAgfQogICAgIGVuY29kZXIgPDwgbV9odHRwU3RhdHVzQ29kZTsKIH0K
IAogdGVtcGxhdGUgPGNsYXNzIERlY29kZXI+Ci1ib29sIENvbnRlbnRTZWN1cml0eVBvbGljeVJl
c3BvbnNlSGVhZGVyczo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIENvbnRlbnRTZWN1cml0eVBv
bGljeVJlc3BvbnNlSGVhZGVycyYgaGVhZGVycykKK09wdGlvbmFsPENvbnRlbnRTZWN1cml0eVBv
bGljeVJlc3BvbnNlSGVhZGVycz4gQ29udGVudFNlY3VyaXR5UG9saWN5UmVzcG9uc2VIZWFkZXJz
OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIHsKLSAgICB1aW50NjRfdCBoZWFkZXJzU2l6ZTsK
LSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGhlYWRlcnNTaXplKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaGVhZGVyc1NpemU7ICsraSkgewotICAg
ICAgICBTdHJpbmcgaGVhZGVyOwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGhlYWRlcikp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIENvbnRlbnRTZWN1cml0eVBvbGlj
eUhlYWRlclR5cGUgaGVhZGVyVHlwZTsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZUVudW0o
aGVhZGVyVHlwZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGhlYWRlcnMu
bV9oZWFkZXJzLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihoZWFkZXIsIGhlYWRlclR5cGUpKTsKKyAg
ICBDb250ZW50U2VjdXJpdHlQb2xpY3lSZXNwb25zZUhlYWRlcnMgaGVhZGVyczsKKworICAgIE9w
dGlvbmFsPHVpbnQ2NF90PiBoZWFkZXJzU2l6ZTsKKyAgICBkZWNvZGVyID4+IGhlYWRlcnNTaXpl
OworICAgIGlmICghaGVhZGVyc1NpemUpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAqaGVhZGVyc1NpemU7ICsraSkgeworICAgICAgICBP
cHRpb25hbDxTdHJpbmc+IGhlYWRlcjsKKyAgICAgICAgZGVjb2RlciA+PiBoZWFkZXI7CisgICAg
ICAgIGlmICghaGVhZGVyKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAg
ICAgT3B0aW9uYWw8Q29udGVudFNlY3VyaXR5UG9saWN5SGVhZGVyVHlwZT4gaGVhZGVyVHlwZTsK
KyAgICAgICAgZGVjb2RlciA+PiBoZWFkZXJUeXBlOworICAgICAgICBpZiAoIWhlYWRlclR5cGUp
CisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICBoZWFkZXJzLm1faGVh
ZGVycy5hcHBlbmQoc3RkOjptYWtlX3BhaXIoV1RGTW92ZSgqaGVhZGVyKSwgV1RGTW92ZSgqaGVh
ZGVyVHlwZSkpKTsKICAgICB9CiAgICAgaGVhZGVycy5tX2hlYWRlcnMuc2hyaW5rVG9GaXQoKTsK
IAotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaGVhZGVycy5tX2h0dHBTdGF0dXNDb2RlKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIE9wdGlvbmFsPGludD4gaHR0cFN0YXR1c0NvZGU7Cisg
ICAgZGVjb2RlciA+PiBodHRwU3RhdHVzQ29kZTsKKyAgICBpZiAoIWh0dHBTdGF0dXNDb2RlKQor
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIGhlYWRlcnMubV9odHRwU3RhdHVzQ29k
ZSA9ICpodHRwU3RhdHVzQ29kZTsKIAotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBXVEZN
b3ZlKGhlYWRlcnMpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9QYXN0ZWJvYXJkQ3VzdG9tRGF0YS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGFzdGVib2FyZEN1c3RvbURhdGEuY3BwCShyZXZpc2lv
biAyNTk4OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QYXN0ZWJvYXJkQ3VzdG9tRGF0
YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk4LDIzICs5OCwyOSBAQCBQYXN0ZWJvYXJkQ3VzdG9t
RGF0YSBQYXN0ZWJvYXJkQ3VzdG9tRGF0CiAKICAgICBQYXN0ZWJvYXJkQ3VzdG9tRGF0YSByZXN1
bHQ7CiAgICAgYXV0byBkZWNvZGVyID0gYnVmZmVyLmRlY29kZXIoKTsKLSAgICB1bnNpZ25lZCB2
ZXJzaW9uOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUodmVyc2lvbikgfHwgdmVyc2lvbiA+IG1h
eFN1cHBvcnRlZERhdGFTZXJpYWxpemF0aW9uVmVyc2lvbk51bWJlcikKKyAgICBPcHRpb25hbDx1
bnNpZ25lZD4gdmVyc2lvbjsKKyAgICBkZWNvZGVyID4+IHZlcnNpb247CisgICAgaWYgKCF2ZXJz
aW9uIHx8ICp2ZXJzaW9uID4gbWF4U3VwcG9ydGVkRGF0YVNlcmlhbGl6YXRpb25WZXJzaW9uTnVt
YmVyKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1
bHQubV9vcmlnaW4pKQorICAgIE9wdGlvbmFsPFN0cmluZz4gb3JpZ2luOworICAgIGRlY29kZXIg
Pj4gb3JpZ2luOworICAgIGlmICghb3JpZ2luKQogICAgICAgICByZXR1cm4geyB9OworICAgIHJl
c3VsdC5tX29yaWdpbiA9IFdURk1vdmUoKm9yaWdpbik7CiAKLSAgICBIYXNoTWFwPFN0cmluZywg
U3RyaW5nPiBzYW1lT3JpZ2luQ3VzdG9tU3RyaW5nRGF0YTsKLSAgICBpZiAoIWRlY29kZXIuZGVj
b2RlKHNhbWVPcmlnaW5DdXN0b21TdHJpbmdEYXRhKSkKKyAgICBPcHRpb25hbDxIYXNoTWFwPFN0
cmluZywgU3RyaW5nPj4gc2FtZU9yaWdpbkN1c3RvbVN0cmluZ0RhdGE7CisgICAgZGVjb2RlciA+
PiBzYW1lT3JpZ2luQ3VzdG9tU3RyaW5nRGF0YTsKKyAgICBpZiAoIXNhbWVPcmlnaW5DdXN0b21T
dHJpbmdEYXRhKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgVmVjdG9yPFN0cmluZz4gb3Jk
ZXJlZFR5cGVzOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUob3JkZXJlZFR5cGVzKSkKKyAgICBP
cHRpb25hbDxWZWN0b3I8U3RyaW5nPj4gb3JkZXJlZFR5cGVzOworICAgIGRlY29kZXIgPj4gb3Jk
ZXJlZFR5cGVzOworICAgIGlmICghb3JkZXJlZFR5cGVzKQogICAgICAgICByZXR1cm4geyB9Owog
Ci0gICAgZm9yIChhdXRvJiB0eXBlIDogb3JkZXJlZFR5cGVzKQotICAgICAgICByZXN1bHQud3Jp
dGVTdHJpbmdJbkN1c3RvbURhdGEodHlwZSwgc2FtZU9yaWdpbkN1c3RvbVN0cmluZ0RhdGEuZ2V0
KHR5cGUpKTsKKyAgICBmb3IgKGF1dG8mIHR5cGUgOiAqb3JkZXJlZFR5cGVzKQorICAgICAgICBy
ZXN1bHQud3JpdGVTdHJpbmdJbkN1c3RvbURhdGEodHlwZSwgc2FtZU9yaWdpbkN1c3RvbVN0cmlu
Z0RhdGEtPmdldCh0eXBlKSk7CiAKICAgICByZXR1cm4gcmVzdWx0OwogfQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ2VuZXJpYy9LZXllZERlY29kZXJHZW5lcmljLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nZW5lcmljL0tleWVkRGVjb2RlckdlbmVy
aWMuY3BwCShyZXZpc2lvbiAyNTk4OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nZW5l
cmljL0tleWVkRGVjb2RlckdlbmVyaWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCw0MCArNDgs
MzYgQEAgcHJpdmF0ZToKICAgICBIYXNoTWFwPFN0cmluZywgc3RkOjp1bmlxdWVfcHRyPE5vZGU+
PiBtX21hcDsKIH07CiAKLXN0YXRpYyBib29sIHJlYWRTdHJpbmcoV1RGOjpQZXJzaXN0ZW5jZTo6
RGVjb2RlciYgZGVjb2RlciwgU3RyaW5nJiByZXN1bHQpCitzdGF0aWMgT3B0aW9uYWw8U3RyaW5n
PiByZWFkU3RyaW5nKFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXImIGRlY29kZXIpCiB7Ci0gICAg
c2l6ZV90IHNpemU7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShzaXplKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIGlmICghc2l6ZSkgewotICAgICAgICByZXN1bHQgPSBlbXB0eVN0cmlu
ZygpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAoIWRlY29kZXIuYnVm
ZmVySXNMYXJnZUVub3VnaFRvQ29udGFpbjx1aW50OF90PihzaXplKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIFZlY3Rvcjx1aW50OF90PiBidWZmZXIoc2l6ZSk7Ci0gICAgaWYgKCFkZWNv
ZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShidWZmZXIuZGF0YSgpLCBzaXplKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIHJlc3VsdCA9IFN0cmluZzo6ZnJvbVVURjgoYnVmZmVyLmRhdGEo
KSwgc2l6ZSk7CisgICAgT3B0aW9uYWw8c2l6ZV90PiBzaXplOworICAgIGRlY29kZXIgPj4gc2l6
ZTsKKyAgICBpZiAoIXNpemUpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgaWYg
KCFzaXplLnZhbHVlKCkpCisgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOworCisgICAgVmVj
dG9yPHVpbnQ4X3Q+IGJ1ZmZlcihzaXplLnZhbHVlKCkpOworICAgIGlmICghZGVjb2Rlci5kZWNv
ZGVGaXhlZExlbmd0aERhdGEoYnVmZmVyLmRhdGEoKSwgc2l6ZS52YWx1ZSgpKSkKKyAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBhdXRvIHJlc3VsdCA9IFN0cmluZzo6ZnJvbVVURjgo
YnVmZmVyLmRhdGEoKSwgc2l6ZS52YWx1ZSgpKTsKICAgICBpZiAocmVzdWx0LmlzTnVsbCgpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAg
ICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgogc3RhdGljIGJvb2wgcmVhZFNpbXBsZVZhbHVlKFdURjo6UGVyc2lzdGVuY2U6OkRlY29k
ZXImIGRlY29kZXIsIEtleWVkRGVjb2RlckdlbmVyaWM6OkRpY3Rpb25hcnkmIGRpY3Rpb25hcnkp
CiB7Ci0gICAgU3RyaW5nIGtleTsKLSAgICBib29sIG9rID0gcmVhZFN0cmluZyhkZWNvZGVyLCBr
ZXkpOwotICAgIGlmICghb2spCisgICAgYXV0byBrZXkgPSByZWFkU3RyaW5nKGRlY29kZXIpOwor
ICAgIGlmICgha2V5KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgVCB2YWx1ZTsKLSAgICBv
ayA9IGRlY29kZXIuZGVjb2RlKHZhbHVlKTsKLSAgICBpZiAoIW9rKQorICAgIE9wdGlvbmFsPFQ+
IHZhbHVlOworICAgIGRlY29kZXIgPj4gdmFsdWU7CisgICAgaWYgKCF2YWx1ZSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIGRpY3Rpb25hcnkuYWRkKGtleSwgV1RGTW92ZSh2YWx1ZSkpOwor
ICAgIGRpY3Rpb25hcnkuYWRkKGtleS52YWx1ZSgpLCBXVEZNb3ZlKHZhbHVlLnZhbHVlKCkpKTsK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtOTMsMzEgKzg5LDM4IEBAIHN0ZDo6dW5pcXVlX3B0
cjxLZXllZERlY29kZXI+IEtleWVkRGVjb2QKIEtleWVkRGVjb2RlckdlbmVyaWM6OktleWVkRGVj
b2RlckdlbmVyaWMoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpCiB7CiAgICAgV1RG
OjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyKGRhdGEsIHNpemUpOwotICAgIEtleWVkRW5j
b2RlckdlbmVyaWM6OlR5cGUgdHlwZTsKLSAgICBTdHJpbmcga2V5OwogCiAgICAgbV9yb290RGlj
dGlvbmFyeSA9IG1ha2VVbmlxdWU8RGljdGlvbmFyeT4oKTsKICAgICBtX2RpY3Rpb25hcnlTdGFj
ay5hcHBlbmQobV9yb290RGljdGlvbmFyeS5nZXQoKSk7CiAKICAgICBib29sIG9rID0gdHJ1ZTsK
LSAgICB3aGlsZSAob2sgJiYgZGVjb2Rlci5kZWNvZGVFbnVtKHR5cGUpKSB7Ci0gICAgICAgIHN3
aXRjaCAodHlwZSkgeworICAgIHdoaWxlIChvaykgeworICAgICAgICBPcHRpb25hbDxLZXllZEVu
Y29kZXJHZW5lcmljOjpUeXBlPiB0eXBlOworICAgICAgICBkZWNvZGVyID4+IHR5cGU7CisgICAg
ICAgIGlmICghdHlwZSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIHN3aXRjaCAoKnR5
cGUpIHsKICAgICAgICAgY2FzZSBLZXllZEVuY29kZXJHZW5lcmljOjpUeXBlOjpCeXRlczogewot
ICAgICAgICAgICAgb2sgPSByZWFkU3RyaW5nKGRlY29kZXIsIGtleSk7CisgICAgICAgICAgICBh
dXRvIGtleSA9IHJlYWRTdHJpbmcoZGVjb2Rlcik7CisgICAgICAgICAgICBpZiAoIWtleSkKKyAg
ICAgICAgICAgICAgICBvayA9IGZhbHNlOwogICAgICAgICAgICAgaWYgKCFvaykKICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIHNpemVfdCBzaXplOwotICAgICAgICAgICAgb2sg
PSBkZWNvZGVyLmRlY29kZShzaXplKTsKKyAgICAgICAgICAgIE9wdGlvbmFsPHNpemVfdD4gc2l6
ZTsKKyAgICAgICAgICAgIGRlY29kZXIgPj4gc2l6ZTsKKyAgICAgICAgICAgIGlmICghc2l6ZSkK
KyAgICAgICAgICAgICAgICBvayA9IGZhbHNlOwogICAgICAgICAgICAgaWYgKCFvaykKICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIG9rID0gZGVjb2Rlci5idWZmZXJJc0xhcmdl
RW5vdWdoVG9Db250YWluPHVpbnQ4X3Q+KHNpemUpOworICAgICAgICAgICAgb2sgPSBkZWNvZGVy
LmJ1ZmZlcklzTGFyZ2VFbm91Z2hUb0NvbnRhaW48dWludDhfdD4oKnNpemUpOwogICAgICAgICAg
ICAgaWYgKCFvaykKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIFZlY3Rvcjx1
aW50OF90PiBidWZmZXIoc2l6ZSk7Ci0gICAgICAgICAgICBvayA9IGRlY29kZXIuZGVjb2RlRml4
ZWRMZW5ndGhEYXRhKGJ1ZmZlci5kYXRhKCksIHNpemUpOworICAgICAgICAgICAgVmVjdG9yPHVp
bnQ4X3Q+IGJ1ZmZlcigqc2l6ZSk7CisgICAgICAgICAgICBvayA9IGRlY29kZXIuZGVjb2RlRml4
ZWRMZW5ndGhEYXRhKGJ1ZmZlci5kYXRhKCksICpzaXplKTsKICAgICAgICAgICAgIGlmICghb2sp
CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBtX2RpY3Rpb25hcnlTdGFjay5s
YXN0KCktPmFkZChrZXksIFdURk1vdmUoYnVmZmVyKSk7CisgICAgICAgICAgICBtX2RpY3Rpb25h
cnlTdGFjay5sYXN0KCktPmFkZCgqa2V5LCBXVEZNb3ZlKGJ1ZmZlcikpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBLZXllZEVuY29kZXJHZW5lcmljOjpUeXBl
OjpCb29sOgpAQCAtMTQyLDI0ICsxNDUsMjkgQEAgS2V5ZWREZWNvZGVyR2VuZXJpYzo6S2V5ZWRE
ZWNvZGVyR2VuZXJpYwogICAgICAgICAgICAgb2sgPSByZWFkU2ltcGxlVmFsdWU8ZG91YmxlPihk
ZWNvZGVyLCAqbV9kaWN0aW9uYXJ5U3RhY2subGFzdCgpKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBjYXNlIEtleWVkRW5jb2RlckdlbmVyaWM6OlR5cGU6OlN0cmluZzogewotICAgICAg
ICAgICAgb2sgPSByZWFkU3RyaW5nKGRlY29kZXIsIGtleSk7CisgICAgICAgICAgICBhdXRvIGtl
eSA9IHJlYWRTdHJpbmcoZGVjb2Rlcik7CisgICAgICAgICAgICBpZiAoIWtleSkKKyAgICAgICAg
ICAgICAgICBvayA9IGZhbHNlOwogICAgICAgICAgICAgaWYgKCFvaykKICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIFN0cmluZyB2YWx1ZTsKLSAgICAgICAgICAgIG9rID0gcmVh
ZFN0cmluZyhkZWNvZGVyLCB2YWx1ZSk7CisgICAgICAgICAgICBhdXRvIHZhbHVlID0gcmVhZFN0
cmluZyhkZWNvZGVyKTsKKyAgICAgICAgICAgIGlmICghdmFsdWUpCisgICAgICAgICAgICAgICAg
b2sgPSBmYWxzZTsKICAgICAgICAgICAgIGlmICghb2spCiAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICBtX2RpY3Rpb25hcnlTdGFjay5sYXN0KCktPmFkZChrZXksIFdURk1vdmUo
dmFsdWUpKTsKKyAgICAgICAgICAgIG1fZGljdGlvbmFyeVN0YWNrLmxhc3QoKS0+YWRkKCprZXks
IFdURk1vdmUoKnZhbHVlKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAg
ICBjYXNlIEtleWVkRW5jb2RlckdlbmVyaWM6OlR5cGU6OkJlZ2luT2JqZWN0OiB7Ci0gICAgICAg
ICAgICBvayA9IHJlYWRTdHJpbmcoZGVjb2Rlciwga2V5KTsKKyAgICAgICAgICAgIGF1dG8ga2V5
ID0gcmVhZFN0cmluZyhkZWNvZGVyKTsKKyAgICAgICAgICAgIGlmICgha2V5KQorICAgICAgICAg
ICAgICAgIG9rID0gZmFsc2U7CiAgICAgICAgICAgICBpZiAoIW9rKQogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgYXV0byogY3VycmVudERpY3RpbmFyeSA9IG1fZGljdGlvbmFy
eVN0YWNrLmxhc3QoKTsKICAgICAgICAgICAgIGF1dG8gbmV3RGljdGlvbmFyeSA9IG1ha2VVbmlx
dWU8RGljdGlvbmFyeT4oKTsKICAgICAgICAgICAgIG1fZGljdGlvbmFyeVN0YWNrLmFwcGVuZChu
ZXdEaWN0aW9uYXJ5LmdldCgpKTsKLSAgICAgICAgICAgIGN1cnJlbnREaWN0aW5hcnktPmFkZChr
ZXksIFdURk1vdmUobmV3RGljdGlvbmFyeSkpOworICAgICAgICAgICAgY3VycmVudERpY3RpbmFy
eS0+YWRkKCprZXksIFdURk1vdmUobmV3RGljdGlvbmFyeSkpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBLZXllZEVuY29kZXJHZW5lcmljOjpUeXBlOjpFbmRP
YmplY3Q6CkBAIC0xNjgsMTIgKzE3NiwxNCBAQCBLZXllZERlY29kZXJHZW5lcmljOjpLZXllZERl
Y29kZXJHZW5lcmljCiAgICAgICAgICAgICAgICAgb2sgPSBmYWxzZTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBjYXNlIEtleWVkRW5jb2RlckdlbmVyaWM6OlR5cGU6OkJlZ2luQXJyYXk6
IHsKLSAgICAgICAgICAgIG9rID0gcmVhZFN0cmluZyhkZWNvZGVyLCBrZXkpOworICAgICAgICAg
ICAgYXV0byBrZXkgPSByZWFkU3RyaW5nKGRlY29kZXIpOworICAgICAgICAgICAgaWYgKCFrZXkp
CisgICAgICAgICAgICAgICAgb2sgPSBmYWxzZTsKICAgICAgICAgICAgIGlmICghb2spCiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBhdXRvIG5ld0FycmF5ID0gbWFrZVVuaXF1
ZTxBcnJheT4oKTsKICAgICAgICAgICAgIG1fYXJyYXlTdGFjay5hcHBlbmQobmV3QXJyYXkuZ2V0
KCkpOwotICAgICAgICAgICAgbV9kaWN0aW9uYXJ5U3RhY2subGFzdCgpLT5hZGQoa2V5LCBXVEZN
b3ZlKG5ld0FycmF5KSk7CisgICAgICAgICAgICBtX2RpY3Rpb25hcnlTdGFjay5sYXN0KCktPmFk
ZCgqa2V5LCBXVEZNb3ZlKG5ld0FycmF5KSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgICAgICBjYXNlIEtleWVkRW5jb2RlckdlbmVyaWM6OlR5cGU6OkJlZ2luQXJyYXlFbGVt
ZW50OiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL05ldHdvcmtMb2Fk
TWV0cmljcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
TmV0d29ya0xvYWRNZXRyaWNzLmgJKHJldmlzaW9uIDI1OTg5OCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvTmV0d29ya0xvYWRNZXRyaWNzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTMwLDggKzMwLDcgQEAKICNpbmNsdWRlIDx3dGYvQm94Lmg+CiAjaW5jbHVkZSA8d3RmL09wdGlv
bmFsLmg+CiAjaW5jbHVkZSA8d3RmL1NlY29uZHMuaD4KLSNpbmNsdWRlIDx3dGYvcGVyc2lzdGVu
Y2UvUGVyc2lzdGVudERlY29kZXIuaD4KLSNpbmNsdWRlIDx3dGYvcGVyc2lzdGVuY2UvUGVyc2lz
dGVudEVuY29kZXIuaD4KKyNpbmNsdWRlIDx3dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudENvZGVy
Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKICNpZiBQTEFURk9STShDT0NP
QSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VMb2FkUHJp
b3JpdHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jl
c291cmNlTG9hZFByaW9yaXR5LmgJKHJldmlzaW9uIDI1OTg5OCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VMb2FkUHJpb3JpdHkuaAkod29ya2luZyBjb3B5KQpA
QCAtMjMsOCArMjMsOSBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICov
CiAKLSNpZm5kZWYgUmVzb3VyY2VMb2FkUHJpb3JpdHlfaAotI2RlZmluZSBSZXNvdXJjZUxvYWRQ
cmlvcml0eV9oCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9FbnVtVHJhaXRzLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNTQsNyArNTUsMTkgQEAgaW5saW5lIFJlc291cmNl
TG9hZFByaW9yaXR5JiBvcGVyYXRvci0tKAogICAgIHJldHVybiBwcmlvcml0eSA9IHN0YXRpY19j
YXN0PFJlc291cmNlTG9hZFByaW9yaXR5PihzdGF0aWNfY2FzdDxpbnQ+KHByaW9yaXR5KSAtIDEp
OwogfQogCi19Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZgorbmFtZXNwYWNlIFdU
RiB7CisKK3RlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6UmVzb3VyY2VMb2Fk
UHJpb3JpdHk+IHsKKyAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAorICAgICAgICBXZWJD
b3JlOjpSZXNvdXJjZUxvYWRQcmlvcml0eSwKKyAgICAgICAgV2ViQ29yZTo6UmVzb3VyY2VMb2Fk
UHJpb3JpdHk6OlZlcnlMb3csCisgICAgICAgIFdlYkNvcmU6OlJlc291cmNlTG9hZFByaW9yaXR5
OjpMb3csCisgICAgICAgIFdlYkNvcmU6OlJlc291cmNlTG9hZFByaW9yaXR5OjpNZWRpdW0sCisg
ICAgICAgIFdlYkNvcmU6OlJlc291cmNlTG9hZFByaW9yaXR5OjpIaWdoLAorICAgICAgICBXZWJD
b3JlOjpSZXNvdXJjZUxvYWRQcmlvcml0eTo6VmVyeUhpZ2gKKyAgICA+OworfTsKIAorfSAvLyBu
YW1lc3BhY2UgV1RGCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291
cmNlUmVxdWVzdEJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuaAkocmV2aXNpb24gMjU5ODk4KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI1LDE0ICsyNSwxNCBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVm
IFJlc291cmNlUmVxdWVzdEJhc2VfaAotI2RlZmluZSBSZXNvdXJjZVJlcXVlc3RCYXNlX2gKKyNw
cmFnbWEgb25jZQogCiAjaW5jbHVkZSAiRm9ybURhdGEuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRl
clR5cGVzLmgiCiAjaW5jbHVkZSAiSFRUUEhlYWRlck1hcC5oIgogI2luY2x1ZGUgIkludFJlY3Qu
aCIKICNpbmNsdWRlICJSZXNvdXJjZUxvYWRQcmlvcml0eS5oIgorI2luY2x1ZGUgPHd0Zi9FbnVt
VHJhaXRzLmg+CiAjaW5jbHVkZSA8d3RmL1VSTC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBA
IC0yODMsNjQgKzI4Myw4OCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgUmVzb3VyY2VSZXF1ZXN0QmFz
ZTo6CiAgICAgZW5jb2RlciA8PCBtX2h0dHBNZXRob2Q7CiAgICAgZW5jb2RlciA8PCBtX2h0dHBI
ZWFkZXJGaWVsZHM7CiAgICAgZW5jb2RlciA8PCBtX3Jlc3BvbnNlQ29udGVudERpc3Bvc2l0aW9u
RW5jb2RpbmdGYWxsYmFja0FycmF5OwotICAgIGVuY29kZXIuZW5jb2RlRW51bShtX2NhY2hlUG9s
aWN5KTsKKyAgICBlbmNvZGVyIDw8IG1fY2FjaGVQb2xpY3k7CiAgICAgZW5jb2RlciA8PCBtX2Fs
bG93Q29va2llczsKLSAgICBlbmNvZGVyLmVuY29kZUVudW0obV9zYW1lU2l0ZURpc3Bvc2l0aW9u
KTsKKyAgICBlbmNvZGVyIDw8IG1fc2FtZVNpdGVEaXNwb3NpdGlvbjsKICAgICBlbmNvZGVyIDw8
IG1faXNUb3BTaXRlOwotICAgIGVuY29kZXIuZW5jb2RlRW51bShtX3ByaW9yaXR5KTsKLSAgICBl
bmNvZGVyLmVuY29kZUVudW0obV9yZXF1ZXN0ZXIpOworICAgIGVuY29kZXIgPDwgbV9wcmlvcml0
eTsKKyAgICBlbmNvZGVyIDw8IG1fcmVxdWVzdGVyOwogfQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNv
ZGVyPgogQUxXQVlTX0lOTElORSBib29sIFJlc291cmNlUmVxdWVzdEJhc2U6OmRlY29kZUJhc2Uo
RGVjb2RlciYgZGVjb2RlcikKIHsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKG1fdXJsKSkKKyAg
ICBPcHRpb25hbDxVUkw+IHVybDsKKyAgICBkZWNvZGVyID4+IHVybDsKKyAgICBpZiAoIXVybCkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIG1fdXJsID0gV1RGTW92ZSgqdXJsKTsKIAotICAg
IGlmICghZGVjb2Rlci5kZWNvZGUobV90aW1lb3V0SW50ZXJ2YWwpKQorICAgIE9wdGlvbmFsPGRv
dWJsZT4gdGltZW91dEludGVydmFsOworICAgIGRlY29kZXIgPj4gdGltZW91dEludGVydmFsOwor
ICAgIGlmICghdGltZW91dEludGVydmFsKQogICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgbV90
aW1lb3V0SW50ZXJ2YWwgPSBXVEZNb3ZlKCp0aW1lb3V0SW50ZXJ2YWwpOwogCi0gICAgU3RyaW5n
IGZpcnN0UGFydHlGb3JDb29raWVzOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoZmlyc3RQYXJ0
eUZvckNvb2tpZXMpKQorICAgIE9wdGlvbmFsPFN0cmluZz4gZmlyc3RQYXJ0eUZvckNvb2tpZXM7
CisgICAgZGVjb2RlciA+PiBmaXJzdFBhcnR5Rm9yQ29va2llczsKKyAgICBpZiAoIWZpcnN0UGFy
dHlGb3JDb29raWVzKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9maXJzdFBhcnR5Rm9y
Q29va2llcyA9IFVSTCh7IH0sIGZpcnN0UGFydHlGb3JDb29raWVzKTsKKyAgICBtX2ZpcnN0UGFy
dHlGb3JDb29raWVzID0gVVJMKHsgfSwgKmZpcnN0UGFydHlGb3JDb29raWVzKTsKIAotICAgIGlm
ICghZGVjb2Rlci5kZWNvZGUobV9odHRwTWV0aG9kKSkKKyAgICBPcHRpb25hbDxTdHJpbmc+IGh0
dHBNZXRob2Q7CisgICAgZGVjb2RlciA+PiBodHRwTWV0aG9kOworICAgIGlmICghaHR0cE1ldGhv
ZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIG1faHR0cE1ldGhvZCA9IFdURk1vdmUoKmh0
dHBNZXRob2QpOwogCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShtX2h0dHBIZWFkZXJGaWVsZHMp
KQorICAgIE9wdGlvbmFsPEhUVFBIZWFkZXJNYXA+IGZpZWxkczsKKyAgICBkZWNvZGVyID4+IGZp
ZWxkczsKKyAgICBpZiAoIWZpZWxkcykKICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIG1faHR0
cEhlYWRlckZpZWxkcyA9IFdURk1vdmUoKmZpZWxkcyk7CiAKLSAgICBpZiAoIWRlY29kZXIuZGVj
b2RlKG1fcmVzcG9uc2VDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJyYXkpKQor
ICAgIE9wdGlvbmFsPFZlY3RvcjxTdHJpbmc+PiBhcnJheTsKKyAgICBkZWNvZGVyID4+IGFycmF5
OworICAgIGlmICghYXJyYXkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBtX3Jlc3BvbnNl
Q29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFja0FycmF5ID0gV1RGTW92ZSgqYXJyYXkp
OwogCi0gICAgUmVzb3VyY2VSZXF1ZXN0Q2FjaGVQb2xpY3kgY2FjaGVQb2xpY3k7Ci0gICAgaWYg
KCFkZWNvZGVyLmRlY29kZUVudW0oY2FjaGVQb2xpY3kpKQorICAgIE9wdGlvbmFsPFJlc291cmNl
UmVxdWVzdENhY2hlUG9saWN5PiBjYWNoZVBvbGljeTsKKyAgICBkZWNvZGVyID4+IGNhY2hlUG9s
aWN5OworICAgIGlmICghY2FjaGVQb2xpY3kpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBt
X2NhY2hlUG9saWN5ID0gY2FjaGVQb2xpY3k7CisgICAgbV9jYWNoZVBvbGljeSA9ICpjYWNoZVBv
bGljeTsKIAotICAgIGJvb2wgYWxsb3dDb29raWVzOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUo
YWxsb3dDb29raWVzKSkKKyAgICBPcHRpb25hbDxib29sPiBhbGxvd0Nvb2tpZXM7CisgICAgZGVj
b2RlciA+PiBhbGxvd0Nvb2tpZXM7CisgICAgaWYgKCFhbGxvd0Nvb2tpZXMpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBtX2FsbG93Q29va2llcyA9IGFsbG93Q29va2llczsKKyAgICBtX2Fs
bG93Q29va2llcyA9ICphbGxvd0Nvb2tpZXM7CiAKLSAgICBTYW1lU2l0ZURpc3Bvc2l0aW9uIHNh
bWVTaXRlRGlzcG9zaXRpb247Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZUVudW0oc2FtZVNpdGVE
aXNwb3NpdGlvbikpCisgICAgT3B0aW9uYWw8U2FtZVNpdGVEaXNwb3NpdGlvbj4gc2FtZVNpdGVE
aXNwb3NpdGlvbjsKKyAgICBkZWNvZGVyID4+IHNhbWVTaXRlRGlzcG9zaXRpb247CisgICAgaWYg
KCFzYW1lU2l0ZURpc3Bvc2l0aW9uKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9zYW1l
U2l0ZURpc3Bvc2l0aW9uID0gc2FtZVNpdGVEaXNwb3NpdGlvbjsKKyAgICBtX3NhbWVTaXRlRGlz
cG9zaXRpb24gPSAqc2FtZVNpdGVEaXNwb3NpdGlvbjsKIAotICAgIGJvb2wgaXNUb3BTaXRlOwot
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaXNUb3BTaXRlKSkKKyAgICBPcHRpb25hbDxib29sPiBp
c1RvcFNpdGU7CisgICAgZGVjb2RlciA+PiBpc1RvcFNpdGU7CisgICAgaWYgKCFpc1RvcFNpdGUp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX2lzVG9wU2l0ZSA9IGlzVG9wU2l0ZTsKKyAg
ICBtX2lzVG9wU2l0ZSA9ICppc1RvcFNpdGU7CiAKLSAgICBSZXNvdXJjZUxvYWRQcmlvcml0eSBw
cmlvcml0eTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlRW51bShwcmlvcml0eSkpCisgICAgT3B0
aW9uYWw8UmVzb3VyY2VMb2FkUHJpb3JpdHk+IHByaW9yaXR5OworICAgIGRlY29kZXIgPj4gcHJp
b3JpdHk7CisgICAgaWYgKCFwcmlvcml0eSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1f
cHJpb3JpdHkgPSBwcmlvcml0eTsKKyAgICBtX3ByaW9yaXR5ID0gKnByaW9yaXR5OwogCi0gICAg
aWYgKCFkZWNvZGVyLmRlY29kZUVudW0obV9yZXF1ZXN0ZXIpKQorICAgIE9wdGlvbmFsPFJlcXVl
c3Rlcj4gcmVxdWVzdGVyOworICAgIGRlY29kZXIgPj4gcmVxdWVzdGVyOworICAgIGlmICghcmVx
dWVzdGVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgbV9yZXF1ZXN0ZXIgPSAqcmVxdWVz
dGVyOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0zNjEsNCArMzg1LDQxIEBAIGJvb2wgUmVz
b3VyY2VSZXF1ZXN0QmFzZTo6ZGVjb2RlV2l0aG91dFAKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCi0jZW5kaWYgLy8gUmVzb3VyY2VSZXF1ZXN0QmFzZV9oCituYW1lc3BhY2UgV1RGIHsKKwor
dGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RDYWNo
ZVBvbGljeT4geworICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8CisgICAgICAgIFdlYkNv
cmU6OlJlc291cmNlUmVxdWVzdENhY2hlUG9saWN5LAorICAgICAgICBXZWJDb3JlOjpSZXNvdXJj
ZVJlcXVlc3RDYWNoZVBvbGljeTo6VXNlUHJvdG9jb2xDYWNoZVBvbGljeSwKKyAgICAgICAgV2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0Q2FjaGVQb2xpY3k6OlJlbG9hZElnbm9yaW5nQ2FjaGVEYXRh
LAorICAgICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RDYWNoZVBvbGljeTo6UmV0dXJuQ2Fj
aGVEYXRhRWxzZUxvYWQsCisgICAgICAgIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdENhY2hlUG9s
aWN5OjpSZXR1cm5DYWNoZURhdGFEb250TG9hZCwKKyAgICAgICAgV2ViQ29yZTo6UmVzb3VyY2VS
ZXF1ZXN0Q2FjaGVQb2xpY3k6OkRvTm90VXNlQW55Q2FjaGUsCisgICAgICAgIFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdENhY2hlUG9saWN5OjpSZWZyZXNoQW55Q2FjaGVEYXRhCisgICAgPjsKK307
CisKK3RlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0
QmFzZTo6U2FtZVNpdGVEaXNwb3NpdGlvbj4geworICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1
ZXM8CisgICAgICAgIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdEJhc2U6OlNhbWVTaXRlRGlzcG9z
aXRpb24sCisgICAgICAgIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdEJhc2U6OlNhbWVTaXRlRGlz
cG9zaXRpb246OlVuc3BlY2lmaWVkLAorICAgICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RC
YXNlOjpTYW1lU2l0ZURpc3Bvc2l0aW9uOjpTYW1lU2l0ZSwKKyAgICAgICAgV2ViQ29yZTo6UmVz
b3VyY2VSZXF1ZXN0QmFzZTo6U2FtZVNpdGVEaXNwb3NpdGlvbjo6Q3Jvc3NTaXRlCisgICAgPjsK
K307CisKK3RlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6UmVzb3VyY2VSZXF1
ZXN0QmFzZTo6UmVxdWVzdGVyPiB7CisgICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKKyAg
ICAgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0QmFzZTo6UmVxdWVzdGVyLAorICAgICAgICBX
ZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RCYXNlOjpSZXF1ZXN0ZXI6OlVuc3BlY2lmaWVkLAorICAg
ICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RCYXNlOjpSZXF1ZXN0ZXI6Ok1haW4sCisgICAg
ICAgIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdEJhc2U6OlJlcXVlc3Rlcjo6WEhSLAorICAgICAg
ICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RCYXNlOjpSZXF1ZXN0ZXI6OkZldGNoLAorICAgICAg
ICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RCYXNlOjpSZXF1ZXN0ZXI6Ok1lZGlhLAorICAgICAg
ICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RCYXNlOjpSZXF1ZXN0ZXI6OkltcG9ydFNjcmlwdHMs
CisgICAgICAgIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdEJhc2U6OlJlcXVlc3Rlcjo6UGluZywK
KyAgICAgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0QmFzZTo6UmVxdWVzdGVyOjpCZWFjb24K
KyAgICA+OworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVzcG9uc2VCYXNlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlc3BvbnNlQmFzZS5oCShyZXZp
c2lvbiAyNTk4OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNl
UmVzcG9uc2VCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRl
ICJOZXR3b3JrTG9hZE1ldHJpY3MuaCIKICNpbmNsdWRlICJQYXJzZWRDb250ZW50UmFuZ2UuaCIK
ICNpbmNsdWRlIDx3dGYvQm94Lmg+CisjaW5jbHVkZSA8d3RmL0VudW1UcmFpdHMuaD4KICNpbmNs
dWRlIDx3dGYvTWFya2FibGUuaD4KICNpbmNsdWRlIDx3dGYvVVJMLmg+CiAjaW5jbHVkZSA8d3Rm
L1dhbGxUaW1lLmg+CkBAIC0yOTcsOSArMjk4LDkgQEAgdm9pZCBSZXNvdXJjZVJlc3BvbnNlQmFz
ZTo6ZW5jb2RlKEVuY29kZQogCiAgICAgZW5jb2RlciA8PCBtX2h0dHBTdGF0dXNDb2RlOwogICAg
IGVuY29kZXIgPDwgbV9jZXJ0aWZpY2F0ZUluZm87Ci0gICAgZW5jb2Rlci5lbmNvZGVFbnVtKG1f
c291cmNlKTsKLSAgICBlbmNvZGVyLmVuY29kZUVudW0obV90eXBlKTsKLSAgICBlbmNvZGVyLmVu
Y29kZUVudW0obV90YWludGluZyk7CisgICAgZW5jb2RlciA8PCBtX3NvdXJjZTsKKyAgICBlbmNv
ZGVyIDw8IG1fdHlwZTsKKyAgICBlbmNvZGVyIDw8IG1fdGFpbnRpbmc7CiAgICAgZW5jb2RlciA8
PCBtX2lzUmVkaXJlY3RlZDsKICAgICBVc2VkTGVnYWN5VExTIHVzZWRMZWdhY3lUTFMgPSBtX3Vz
ZWRMZWdhY3lUTFM7CiAgICAgZW5jb2RlciA8PCB1c2VkTGVnYWN5VExTOwpAQCAtMzA3LDY4ICsz
MDgsMTYxIEBAIHZvaWQgUmVzb3VyY2VSZXNwb25zZUJhc2U6OmVuY29kZShFbmNvZGUKIH0KIAog
dGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLWJvb2wgUmVzb3VyY2VSZXNwb25zZUJhc2U6OmRlY29k
ZShEZWNvZGVyJiBkZWNvZGVyLCBSZXNvdXJjZVJlc3BvbnNlQmFzZSYgcmVzcG9uc2UpCitib29s
IFdBUk5fVU5VU0VEX1JFVFVSTiBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6ZGVjb2RlKERlY29kZXIm
IGRlY29kZXIsIFJlc291cmNlUmVzcG9uc2VCYXNlJiByZXNwb25zZSkKIHsKICAgICBBU1NFUlQo
cmVzcG9uc2UubV9pc051bGwpOwotICAgIGJvb2wgcmVzcG9uc2VJc051bGw7Ci0gICAgaWYgKCFk
ZWNvZGVyLmRlY29kZShyZXNwb25zZUlzTnVsbCkpCisgICAgT3B0aW9uYWw8Ym9vbD4gcmVzcG9u
c2VJc051bGw7CisgICAgZGVjb2RlciA+PiByZXNwb25zZUlzTnVsbDsKKyAgICBpZiAoIXJlc3Bv
bnNlSXNOdWxsKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKHJlc3BvbnNlSXNOdWxs
KQorICAgIGlmICgqcmVzcG9uc2VJc051bGwpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAg
cmVzcG9uc2UubV9pc051bGwgPSBmYWxzZTsKIAotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVz
cG9uc2UubV91cmwpKQorICAgIE9wdGlvbmFsPFVSTD4gdXJsOworICAgIGRlY29kZXIgPj4gdXJs
OworICAgIGlmICghdXJsKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFkZWNvZGVy
LmRlY29kZShyZXNwb25zZS5tX21pbWVUeXBlKSkKKyAgICByZXNwb25zZS5tX3VybCA9IFdURk1v
dmUoKnVybCk7CisKKyAgICBPcHRpb25hbDxTdHJpbmc+IG1pbWVUeXBlOworICAgIGRlY29kZXIg
Pj4gbWltZVR5cGU7CisgICAgaWYgKCFtaW1lVHlwZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIGludDY0X3QgZXhwZWN0ZWRDb250ZW50TGVuZ3RoOwotICAgIGlmICghZGVjb2Rlci5kZWNv
ZGUoZXhwZWN0ZWRDb250ZW50TGVuZ3RoKSkKKyAgICByZXNwb25zZS5tX21pbWVUeXBlID0gV1RG
TW92ZSgqbWltZVR5cGUpOworCisgICAgT3B0aW9uYWw8aW50NjRfdD4gZXhwZWN0ZWRDb250ZW50
TGVuZ3RoOworICAgIGRlY29kZXIgPj4gZXhwZWN0ZWRDb250ZW50TGVuZ3RoOworICAgIGlmICgh
ZXhwZWN0ZWRDb250ZW50TGVuZ3RoKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmVzcG9u
c2UubV9leHBlY3RlZENvbnRlbnRMZW5ndGggPSBleHBlY3RlZENvbnRlbnRMZW5ndGg7Ci0gICAg
aWYgKCFkZWNvZGVyLmRlY29kZShyZXNwb25zZS5tX3RleHRFbmNvZGluZ05hbWUpKQorICAgIHJl
c3BvbnNlLm1fZXhwZWN0ZWRDb250ZW50TGVuZ3RoID0gKmV4cGVjdGVkQ29udGVudExlbmd0aDsK
KworICAgIE9wdGlvbmFsPEF0b21TdHJpbmc+IHRleHRFbmNvZGluZ05hbWU7CisgICAgZGVjb2Rl
ciA+PiB0ZXh0RW5jb2RpbmdOYW1lOworICAgIGlmICghdGV4dEVuY29kaW5nTmFtZSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzcG9uc2UubV9odHRw
U3RhdHVzVGV4dCkpCisgICAgcmVzcG9uc2UubV90ZXh0RW5jb2RpbmdOYW1lID0gV1RGTW92ZSgq
dGV4dEVuY29kaW5nTmFtZSk7CisKKyAgICBPcHRpb25hbDxBdG9tU3RyaW5nPiBodHRwU3RhdHVz
VGV4dDsKKyAgICBkZWNvZGVyID4+IGh0dHBTdGF0dXNUZXh0OworICAgIGlmICghaHR0cFN0YXR1
c1RleHQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJl
c3BvbnNlLm1faHR0cFZlcnNpb24pKQorICAgIHJlc3BvbnNlLm1faHR0cFN0YXR1c1RleHQgPSBX
VEZNb3ZlKCpodHRwU3RhdHVzVGV4dCk7CisKKyAgICBPcHRpb25hbDxBdG9tU3RyaW5nPiBodHRw
VmVyc2lvbjsKKyAgICBkZWNvZGVyID4+IGh0dHBWZXJzaW9uOworICAgIGlmICghaHR0cFZlcnNp
b24pCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3Bv
bnNlLm1faHR0cEhlYWRlckZpZWxkcykpCisgICAgcmVzcG9uc2UubV9odHRwVmVyc2lvbiA9IFdU
Rk1vdmUoKmh0dHBWZXJzaW9uKTsKKworICAgIE9wdGlvbmFsPEhUVFBIZWFkZXJNYXA+IGh0dHBI
ZWFkZXJGaWVsZHM7CisgICAgZGVjb2RlciA+PiBodHRwSGVhZGVyRmllbGRzOworICAgIGlmICgh
aHR0cEhlYWRlckZpZWxkcykKICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJlc3BvbnNlLm1f
aHR0cEhlYWRlckZpZWxkcyA9IFdURk1vdmUoKmh0dHBIZWFkZXJGaWVsZHMpOworCiAgICAgLy8g
VGhlIG5ldHdvcmtMb2FkTWV0cmljcyBpbmZvIGlzIG9ubHkgc2VuZCBvdmVyIElQQyBhbmQgbm90
IHN0b3JlZCBpbiBkaXNrIGNhY2hlLgogICAgIGlmIGNvbnN0ZXhwciAoRGVjb2Rlcjo6aXNJUENE
ZWNvZGVyKSB7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzcG9uc2UubV9uZXR3b3Jr
TG9hZE1ldHJpY3MpKQorICAgICAgICBPcHRpb25hbDxCb3g8TmV0d29ya0xvYWRNZXRyaWNzPj4g
bmV0d29ya0xvYWRNZXRyaWNzOworICAgICAgICBkZWNvZGVyID4+IG5ldHdvcmtMb2FkTWV0cmlj
czsKKyAgICAgICAgaWYgKCFuZXR3b3JrTG9hZE1ldHJpY3MpCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIHJlc3BvbnNlLm1fbmV0d29ya0xvYWRNZXRyaWNzID0gV1RGTW92ZSgq
bmV0d29ya0xvYWRNZXRyaWNzKTsKICAgICB9Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXNw
b25zZS5tX2h0dHBTdGF0dXNDb2RlKSkKKworICAgIE9wdGlvbmFsPHNob3J0PiBodHRwU3RhdHVz
Q29kZTsKKyAgICBkZWNvZGVyID4+IGh0dHBTdGF0dXNDb2RlOworICAgIGlmICghaHR0cFN0YXR1
c0NvZGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJl
c3BvbnNlLm1fY2VydGlmaWNhdGVJbmZvKSkKKyAgICByZXNwb25zZS5tX2h0dHBTdGF0dXNDb2Rl
ID0gV1RGTW92ZSgqaHR0cFN0YXR1c0NvZGUpOworCisgICAgT3B0aW9uYWw8T3B0aW9uYWw8Q2Vy
dGlmaWNhdGVJbmZvPj4gY2VydGlmaWNhdGVJbmZvOworICAgIGRlY29kZXIgPj4gY2VydGlmaWNh
dGVJbmZvOworICAgIGlmICghY2VydGlmaWNhdGVJbmZvKQogICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgU291cmNlIHNvdXJjZSA9IFNvdXJjZTo6VW5rbm93bjsKLSAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlRW51bShzb3VyY2UpKQorICAgIHJlc3BvbnNlLm1fY2VydGlmaWNhdGVJbmZvID0gV1RG
TW92ZSgqY2VydGlmaWNhdGVJbmZvKTsKKworICAgIE9wdGlvbmFsPFNvdXJjZT4gc291cmNlOwor
ICAgIGRlY29kZXIgPj4gc291cmNlOworICAgIGlmICghc291cmNlKQogICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgcmVzcG9uc2UubV9zb3VyY2UgPSBzb3VyY2U7Ci0gICAgVHlwZSB0eXBlID0g
VHlwZTo6RGVmYXVsdDsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlRW51bSh0eXBlKSkKKyAgICBy
ZXNwb25zZS5tX3NvdXJjZSA9IFdURk1vdmUoKnNvdXJjZSk7CisKKyAgICBPcHRpb25hbDxUeXBl
PiB0eXBlOworICAgIGRlY29kZXIgPj4gdHlwZTsKKyAgICBpZiAoIXR5cGUpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICByZXNwb25zZS5tX3R5cGUgPSB0eXBlOwotICAgIFRhaW50aW5nIHRh
aW50aW5nID0gVGFpbnRpbmc6OkJhc2ljOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGVFbnVtKHRh
aW50aW5nKSkKKyAgICByZXNwb25zZS5tX3R5cGUgPSBXVEZNb3ZlKCp0eXBlKTsKKworICAgIE9w
dGlvbmFsPFRhaW50aW5nPiB0YWludGluZzsKKyAgICBkZWNvZGVyID4+IHRhaW50aW5nOworICAg
IGlmICghdGFpbnRpbmcpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXNwb25zZS5tX3Rh
aW50aW5nID0gdGFpbnRpbmc7Ci0gICAgYm9vbCBpc1JlZGlyZWN0ZWQgPSBmYWxzZTsKLSAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKGlzUmVkaXJlY3RlZCkpCisgICAgcmVzcG9uc2UubV90YWludGlu
ZyA9IFdURk1vdmUoKnRhaW50aW5nKTsKKworICAgIE9wdGlvbmFsPGJvb2w+IGlzUmVkaXJlY3Rl
ZDsKKyAgICBkZWNvZGVyID4+IGlzUmVkaXJlY3RlZDsKKyAgICBpZiAoIWlzUmVkaXJlY3RlZCkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJlc3BvbnNlLm1faXNSZWRpcmVjdGVkID0gaXNS
ZWRpcmVjdGVkOwotICAgIFVzZWRMZWdhY3lUTFMgdXNlZExlZ2FjeVRMUyA9IFVzZWRMZWdhY3lU
TFM6Ok5vOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUodXNlZExlZ2FjeVRMUykpCisgICAgcmVz
cG9uc2UubV9pc1JlZGlyZWN0ZWQgPSBXVEZNb3ZlKCppc1JlZGlyZWN0ZWQpOworCisgICAgT3B0
aW9uYWw8VXNlZExlZ2FjeVRMUz4gdXNlZExlZ2FjeVRMUzsKKyAgICBkZWNvZGVyID4+IHVzZWRM
ZWdhY3lUTFM7CisgICAgaWYgKCF1c2VkTGVnYWN5VExTKQogICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgcmVzcG9uc2UubV91c2VkTGVnYWN5VExTID0gdXNlZExlZ2FjeVRMUzsKLSAgICBib29s
IGlzUmFuZ2VSZXF1ZXN0ZWQgPSBmYWxzZTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGlzUmFu
Z2VSZXF1ZXN0ZWQpKQorICAgIHJlc3BvbnNlLm1fdXNlZExlZ2FjeVRMUyA9IFdURk1vdmUoKnVz
ZWRMZWdhY3lUTFMpOworCisgICAgT3B0aW9uYWw8Ym9vbD4gaXNSYW5nZVJlcXVlc3RlZDsKKyAg
ICBkZWNvZGVyID4+IGlzUmFuZ2VSZXF1ZXN0ZWQ7CisgICAgaWYgKCFpc1JhbmdlUmVxdWVzdGVk
KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmVzcG9uc2UubV9pc1JhbmdlUmVxdWVzdGVk
ID0gaXNSYW5nZVJlcXVlc3RlZDsKKyAgICByZXNwb25zZS5tX2lzUmFuZ2VSZXF1ZXN0ZWQgPSBX
VEZNb3ZlKCppc1JhbmdlUmVxdWVzdGVkKTsKIAogICAgIHJldHVybiB0cnVlOwogfQogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTw+IHN0cnVj
dCBFbnVtVHJhaXRzPFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2VCYXNlOjpUeXBlPiB7CisgICAg
dXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKKyAgICAgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXNw
b25zZUJhc2U6OlR5cGUsCisgICAgICAgIFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2VCYXNlOjpU
eXBlOjpCYXNpYywKKyAgICAgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZUJhc2U6OlR5cGU6
OkNvcnMsCisgICAgICAgIFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2VCYXNlOjpUeXBlOjpEZWZh
dWx0LAorICAgICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlQmFzZTo6VHlwZTo6RXJyb3Is
CisgICAgICAgIFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2VCYXNlOjpUeXBlOjpPcGFxdWUsCisg
ICAgICAgIFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2VCYXNlOjpUeXBlOjpPcGFxdWVyZWRpcmVj
dAorICAgID47Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OlJl
c291cmNlUmVzcG9uc2VCYXNlOjpUYWludGluZz4geworICAgIHVzaW5nIHZhbHVlcyA9IEVudW1W
YWx1ZXM8CisgICAgICAgIFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2VCYXNlOjpUYWludGluZywK
KyAgICAgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZUJhc2U6OlRhaW50aW5nOjpCYXNpYywK
KyAgICAgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZUJhc2U6OlRhaW50aW5nOjpDb3JzLAor
ICAgICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlQmFzZTo6VGFpbnRpbmc6Ok9wYXF1ZSwK
KyAgICAgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZUJhc2U6OlRhaW50aW5nOjpPcGFxdWVy
ZWRpcmVjdAorICAgID47Cit9OworCisKK3RlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2Vi
Q29yZTo6UmVzb3VyY2VSZXNwb25zZUJhc2U6OlNvdXJjZT4geworICAgIHVzaW5nIHZhbHVlcyA9
IEVudW1WYWx1ZXM8CisgICAgICAgIFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2VCYXNlOjpTb3Vy
Y2UsCisgICAgICAgIFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2VCYXNlOjpTb3VyY2U6OlVua25v
d24sCisgICAgICAgIFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2VCYXNlOjpTb3VyY2U6Ok5ldHdv
cmssCisgICAgICAgIFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2VCYXNlOjpTb3VyY2U6OkRpc2tD
YWNoZSwKKyAgICAgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZUJhc2U6OlNvdXJjZTo6RGlz
a0NhY2hlQWZ0ZXJWYWxpZGF0aW9uLAorICAgICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNl
QmFzZTo6U291cmNlOjpNZW1vcnlDYWNoZSwKKyAgICAgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXNw
b25zZUJhc2U6OlNvdXJjZTo6TWVtb3J5Q2FjaGVBZnRlclZhbGlkYXRpb24sCisgICAgICAgIFdl
YkNvcmU6OlJlc291cmNlUmVzcG9uc2VCYXNlOjpTb3VyY2U6OlNlcnZpY2VXb3JrZXIsCisgICAg
ICAgIFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2VCYXNlOjpTb3VyY2U6OkFwcGxpY2F0aW9uQ2Fj
aGUsCisgICAgICAgIFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2VCYXNlOjpTb3VyY2U6OkRPTUNh
Y2hlLAorICAgICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlQmFzZTo6U291cmNlOjpJbnNw
ZWN0b3JPdmVycmlkZQorICAgID47Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvQ2VydGlmaWNhdGVJbmZvLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9DZXJ0aWZpY2F0ZUlu
Zm8uaAkocmV2aXNpb24gMjU5ODk4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9jZi9DZXJ0aWZpY2F0ZUluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTIgKzI2LDExIEBA
CiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkNlcnRpZmljYXRlSW5mb0Jhc2UuaCIKKyNpbmNs
dWRlIDx3dGYvRW51bVRyYWl0cy5oPgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KICNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL2NmL1R5cGVDYXN0c0NGLmg+Ci0jaW5j
bHVkZSA8d3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRDb2RlcnMuaD4KLSNpbmNsdWRlIDx3dGYv
cGVyc2lzdGVuY2UvUGVyc2lzdGVudERlY29kZXIuaD4KLSNpbmNsdWRlIDx3dGYvcGVyc2lzdGVu
Y2UvUGVyc2lzdGVudEVuY29kZXIuaD4KKyNpbmNsdWRlIDx3dGYvcGVyc2lzdGVuY2UvUGVyc2lz
dGVudENvZGVyLmg+CiAKICNpZiBQTEFURk9STShDT0NPQSkKICNpbmNsdWRlIDxTZWN1cml0eS9T
ZWNDZXJ0aWZpY2F0ZS5oPgpAQCAtOTgsMTYzICs5NywyNSBAQCBwcml2YXRlOgogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQogCiBuYW1lc3BhY2UgV1RGIHsKLW5hbWVzcGFjZSBQZXJzaXN0ZW5jZSB7
Ci0KLXN0YXRpYyB2b2lkIGVuY29kZUNGRGF0YShFbmNvZGVyJiBlbmNvZGVyLCBDRkRhdGFSZWYg
ZGF0YSkKLXsKLSAgICB1aW50NjRfdCBsZW5ndGggPSBDRkRhdGFHZXRMZW5ndGgoZGF0YSk7Ci0g
ICAgY29uc3QgdWludDhfdCogYnl0ZVB0ciA9IENGRGF0YUdldEJ5dGVQdHIoZGF0YSk7Ci0KLSAg
ICBlbmNvZGVyIDw8IGxlbmd0aDsKLSAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShi
eXRlUHRyLCBzdGF0aWNfY2FzdDxzaXplX3Q+KGxlbmd0aCkpOwotfQotCi1zdGF0aWMgYm9vbCBk
ZWNvZGVDRkRhdGEoRGVjb2RlciYgZGVjb2RlciwgUmV0YWluUHRyPENGRGF0YVJlZj4mIGRhdGEp
Ci17Ci0gICAgdWludDY0X3Qgc2l6ZSA9IDA7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShzaXpl
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgVmVjdG9yPHVpbnQ4X3Q+IHZlY3Rvcihz
dGF0aWNfY2FzdDxzaXplX3Q+KHNpemUpKTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRM
ZW5ndGhEYXRhKHZlY3Rvci5kYXRhKCksIHZlY3Rvci5zaXplKCkpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBkYXRhID0gYWRvcHRDRihDRkRhdGFDcmVhdGUobnVsbHB0ciwgdmVjdG9y
LmRhdGEoKSwgdmVjdG9yLnNpemUoKSkpOwotICAgIHJldHVybiB0cnVlOwotfQogCit0ZW1wbGF0
ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbzo6VHlwZT4gewor
ICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8CisgICAgICAgIFdlYkNvcmU6OkNlcnRpZmlj
YXRlSW5mbzo6VHlwZSwKKyAgICAgICAgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvOjpUeXBlOjpO
b25lLAorICAgICAgICBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm86OlR5cGU6OkNlcnRpZmljYXRl
Q2hhaW4KICNpZiBIQVZFKFNFQ19UUlVTVF9TRVJJQUxJWkFUSU9OKQotc3RhdGljIHZvaWQgZW5j
b2RlU2VjVHJ1c3RSZWYoRW5jb2RlciYgZW5jb2RlciwgU2VjVHJ1c3RSZWYgdHJ1c3QpCi17Ci0g
ICAgYXV0byBkYXRhID0gYWRvcHRDRihTZWNUcnVzdFNlcmlhbGl6ZSh0cnVzdCwgbnVsbHB0cikp
OwotICAgIGlmICghZGF0YSkgewotICAgICAgICBlbmNvZGVyIDw8IGZhbHNlOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgZW5jb2RlciA8PCB0cnVlOwotICAgIGVuY29kZUNGRGF0YShl
bmNvZGVyLCBkYXRhLmdldCgpKTsKLX0KLQotc3RhdGljIGJvb2wgZGVjb2RlU2VjVHJ1c3RSZWYo
RGVjb2RlciYgZGVjb2RlciwgUmV0YWluUHRyPFNlY1RydXN0UmVmPiYgcmVzdWx0KQotewotICAg
IGJvb2wgaGFzVHJ1c3Q7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShoYXNUcnVzdCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghaGFzVHJ1c3QpCi0gICAgICAgIHJldHVybiB0
cnVlOwotCi0gICAgUmV0YWluUHRyPENGRGF0YVJlZj4gdHJ1c3REYXRhOwotICAgIGlmICghZGVj
b2RlQ0ZEYXRhKGRlY29kZXIsIHRydXN0RGF0YSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIGF1dG8gdHJ1c3QgPSBhZG9wdENGKFNlY1RydXN0RGVzZXJpYWxpemUodHJ1c3REYXRhLmdl
dCgpLCBudWxscHRyKSk7Ci0gICAgaWYgKCF0cnVzdCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgcmVzdWx0ID0gV1RGTW92ZSh0cnVzdCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19CisgICAg
ICAgICwgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvOjpUeXBlOjpUcnVzdAogI2VuZGlmCisgICAg
PjsKK307CiAKLSNpZiBQTEFURk9STShDT0NPQSkKLXN0YXRpYyB2b2lkIGVuY29kZUNlcnRpZmlj
YXRlQ2hhaW4oRW5jb2RlciYgZW5jb2RlciwgQ0ZBcnJheVJlZiBjZXJ0aWZpY2F0ZUNoYWluKQot
ewotICAgIENGSW5kZXggc2l6ZSA9IENGQXJyYXlHZXRDb3VudChjZXJ0aWZpY2F0ZUNoYWluKTsK
LSAgICBWZWN0b3I8Q0ZUeXBlUmVmLCAzMj4gdmFsdWVzKHNpemUpOwotCi0gICAgQ0ZBcnJheUdl
dFZhbHVlcyhjZXJ0aWZpY2F0ZUNoYWluLCBDRlJhbmdlTWFrZSgwLCBzaXplKSwgdmFsdWVzLmRh
dGEoKSk7Ci0KLSAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHVpbnQ2NF90PihzaXplKTsKLQot
ICAgIGZvciAoQ0ZJbmRleCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBBU1NFUlQo
dmFsdWVzW2ldKTsKLSAgICAgICAgYXV0byBkYXRhID0gYWRvcHRDRihTZWNDZXJ0aWZpY2F0ZUNv
cHlEYXRhKGNoZWNrZWRfY2ZfY2FzdDxTZWNDZXJ0aWZpY2F0ZVJlZj4odmFsdWVzW2ldKSkpOwot
ICAgICAgICBlbmNvZGVDRkRhdGEoZW5jb2RlciwgZGF0YS5nZXQoKSk7Ci0gICAgfQotfQotCi1z
dGF0aWMgYm9vbCBkZWNvZGVDZXJ0aWZpY2F0ZUNoYWluKERlY29kZXImIGRlY29kZXIsIFJldGFp
blB0cjxDRkFycmF5UmVmPiYgY2VydGlmaWNhdGVDaGFpbikKLXsKLSAgICB1aW50NjRfdCBzaXpl
OwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoc2l6ZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIGF1dG8gYXJyYXkgPSBhZG9wdENGKENGQXJyYXlDcmVhdGVNdXRhYmxlKDAsIDAsICZr
Q0ZUeXBlQXJyYXlDYWxsQmFja3MpKTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6
ZTsgKytpKSB7Ci0gICAgICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IGRhdGE7Ci0gICAgICAgIGlm
ICghZGVjb2RlQ0ZEYXRhKGRlY29kZXIsIGRhdGEpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgICAgIGF1dG8gY2VydGlmaWNhdGUgPSBhZG9wdENGKFNlY0NlcnRpZmljYXRlQ3Jl
YXRlV2l0aERhdGEoMCwgZGF0YS5nZXQoKSkpOwotICAgICAgICBDRkFycmF5QXBwZW5kVmFsdWUo
YXJyYXkuZ2V0KCksIGNlcnRpZmljYXRlLmdldCgpKTsKLSAgICB9Ci0KLSAgICBjZXJ0aWZpY2F0
ZUNoYWluID0gV1RGTW92ZShhcnJheSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0jZW5kaWYKK25h
bWVzcGFjZSBQZXJzaXN0ZW5jZSB7CiAKIHRlbXBsYXRlPD4gc3RydWN0IENvZGVyPFdlYkNvcmU6
OkNlcnRpZmljYXRlSW5mbz4gewotICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNv
ZGVyLCBjb25zdCBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8mIGNlcnRpZmljYXRlSW5mbykKLSAg
ICB7Ci0gICAgICAgIGVuY29kZXIuZW5jb2RlRW51bShjZXJ0aWZpY2F0ZUluZm8udHlwZSgpKTsK
LQotICAgICAgICBzd2l0Y2ggKGNlcnRpZmljYXRlSW5mby50eXBlKCkpIHsKLSNpZiBIQVZFKFNF
Q19UUlVTVF9TRVJJQUxJWkFUSU9OKQotICAgICAgICBjYXNlIFdlYkNvcmU6OkNlcnRpZmljYXRl
SW5mbzo6VHlwZTo6VHJ1c3Q6Ci0gICAgICAgICAgICBlbmNvZGVTZWNUcnVzdFJlZihlbmNvZGVy
LCBjZXJ0aWZpY2F0ZUluZm8udHJ1c3QoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSNlbmRpZgot
I2lmIFBMQVRGT1JNKENPQ09BKQotICAgICAgICBjYXNlIFdlYkNvcmU6OkNlcnRpZmljYXRlSW5m
bzo6VHlwZTo6Q2VydGlmaWNhdGVDaGFpbjogewotICAgICAgICAgICAgZW5jb2RlQ2VydGlmaWNh
dGVDaGFpbihlbmNvZGVyLCBjZXJ0aWZpY2F0ZUluZm8uY2VydGlmaWNhdGVDaGFpbigpKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0jZW5kaWYKLSAgICAgICAgY2FzZSBXZWJDb3Jl
OjpDZXJ0aWZpY2F0ZUluZm86OlR5cGU6Ok5vbmU6Ci0gICAgICAgICAgICAvLyBEbyBub3RoaW5n
LgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzdGF0aWMgYm9v
bCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvJiBjZXJ0
aWZpY2F0ZUluZm8pCi0gICAgewotICAgICAgICBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm86OlR5
cGUgY2VydGlmaWNhdGVJbmZvVHlwZTsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZUVudW0o
Y2VydGlmaWNhdGVJbmZvVHlwZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAg
ICAgc3dpdGNoIChjZXJ0aWZpY2F0ZUluZm9UeXBlKSB7Ci0jaWYgSEFWRShTRUNfVFJVU1RfU0VS
SUFMSVpBVElPTikKLSAgICAgICAgY2FzZSBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm86OlR5cGU6
OlRydXN0OiB7Ci0gICAgICAgICAgICBSZXRhaW5QdHI8U2VjVHJ1c3RSZWY+IHRydXN0OwotICAg
ICAgICAgICAgaWYgKCFkZWNvZGVTZWNUcnVzdFJlZihkZWNvZGVyLCB0cnVzdCkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICBjZXJ0aWZpY2F0ZUluZm8gPSBX
ZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8oV1RGTW92ZSh0cnVzdCkpOwotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgIH0KLSNlbmRpZgotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgICAg
ICBjYXNlIFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbzo6VHlwZTo6Q2VydGlmaWNhdGVDaGFpbjog
ewotICAgICAgICAgICAgUmV0YWluUHRyPENGQXJyYXlSZWY+IGNlcnRpZmljYXRlQ2hhaW47Ci0g
ICAgICAgICAgICBpZiAoIWRlY29kZUNlcnRpZmljYXRlQ2hhaW4oZGVjb2RlciwgY2VydGlmaWNh
dGVDaGFpbikpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICBj
ZXJ0aWZpY2F0ZUluZm8gPSBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8oV1RGTW92ZShjZXJ0aWZp
Y2F0ZUNoYWluKSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotI2VuZGlm
Ci0gICAgICAgIGNhc2UgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvOjpUeXBlOjpOb25lOgotICAg
ICAgICAgICAgLy8gRG8gbm90aGluZy4KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0K
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQorICAgIHN0YXRpYyBXRUJDT1JFX0VYUE9SVCB2
b2lkIGVuY29kZShFbmNvZGVyJiwgY29uc3QgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvJik7Cisg
ICAgc3RhdGljIFdFQkNPUkVfRVhQT1JUIE9wdGlvbmFsPFdlYkNvcmU6OkNlcnRpZmljYXRlSW5m
bz4gZGVjb2RlKERlY29kZXImKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdURjo6UGVyc2lzdGVu
Y2UKKwogfSAvLyBuYW1lc3BhY2UgV1RGCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2NmL0NlcnRpZmljYXRlSW5mb0NGTmV0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0NlcnRpZmljYXRlSW5mb0NGTmV0LmNwcAkocmV2
aXNpb24gMjU5ODk4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9DZXJ0
aWZpY2F0ZUluZm9DRk5ldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDkgQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJDZXJ0aWZpY2F0ZUluZm8uaCIKIAorI2luY2x1
ZGUgPHd0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RGVjb2Rlci5oPgorI2luY2x1ZGUgPHd0Zi9w
ZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RW5jb2Rlci5oPgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
ICNpZiBQTEFURk9STShDT0NPQSkKQEAgLTE1MywzICsxNTYsMTY1IEBAIE9wdGlvbmFsPENlcnRp
ZmljYXRlSW5mbzo6U3VtbWFyeUluZm8+IEMKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CituYW1lc3BhY2UgV1RGIHsKK25hbWVzcGFjZSBQZXJzaXN0ZW5jZSB7CisKK3N0YXRpYyB2b2lk
IGVuY29kZUNGRGF0YShFbmNvZGVyJiBlbmNvZGVyLCBDRkRhdGFSZWYgZGF0YSkKK3sKKyAgICB1
aW50NjRfdCBsZW5ndGggPSBDRkRhdGFHZXRMZW5ndGgoZGF0YSk7CisgICAgY29uc3QgdWludDhf
dCogYnl0ZVB0ciA9IENGRGF0YUdldEJ5dGVQdHIoZGF0YSk7CisKKyAgICBlbmNvZGVyIDw8IGxl
bmd0aDsKKyAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShieXRlUHRyLCBzdGF0aWNf
Y2FzdDxzaXplX3Q+KGxlbmd0aCkpOworfQorCitzdGF0aWMgT3B0aW9uYWw8UmV0YWluUHRyPENG
RGF0YVJlZj4+IGRlY29kZUNGRGF0YShEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIE9wdGlvbmFs
PHVpbnQ2NF90PiBzaXplOworICAgIGRlY29kZXIgPj4gc2l6ZTsKKyAgICBpZiAoIXNpemUpCisg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBpZiAoVU5MSUtFTFkoIWlzSW5Cb3Vu
ZHM8c2l6ZV90Pigqc2l6ZSkpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIAor
ICAgIFZlY3Rvcjx1aW50OF90PiB2ZWN0b3Ioc3RhdGljX2Nhc3Q8c2l6ZV90Pigqc2l6ZSkpOwor
ICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEodmVjdG9yLmRhdGEoKSwgdmVj
dG9yLnNpemUoKSkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICByZXR1cm4g
YWRvcHRDRihDRkRhdGFDcmVhdGUobnVsbHB0ciwgdmVjdG9yLmRhdGEoKSwgdmVjdG9yLnNpemUo
KSkpOworfQorCisjaWYgSEFWRShTRUNfVFJVU1RfU0VSSUFMSVpBVElPTikKK3N0YXRpYyB2b2lk
IGVuY29kZVNlY1RydXN0UmVmKEVuY29kZXImIGVuY29kZXIsIFNlY1RydXN0UmVmIHRydXN0KQor
eworICAgIGF1dG8gZGF0YSA9IGFkb3B0Q0YoU2VjVHJ1c3RTZXJpYWxpemUodHJ1c3QsIG51bGxw
dHIpKTsKKyAgICBpZiAoIWRhdGEpIHsKKyAgICAgICAgZW5jb2RlciA8PCBmYWxzZTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGVuY29kZXIgPDwgdHJ1ZTsKKyAgICBlbmNvZGVDRkRh
dGEoZW5jb2RlciwgZGF0YS5nZXQoKSk7Cit9CisKK3N0YXRpYyBPcHRpb25hbDxSZXRhaW5QdHI8
U2VjVHJ1c3RSZWY+PiBkZWNvZGVTZWNUcnVzdFJlZihEZWNvZGVyJiBkZWNvZGVyKQoreworICAg
IE9wdGlvbmFsPGJvb2w+IGhhc1RydXN0OworICAgIGRlY29kZXIgPj4gaGFzVHJ1c3Q7CisgICAg
aWYgKCFoYXNUcnVzdCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIGlmICgh
Kmhhc1RydXN0KQorICAgICAgICByZXR1cm4geyBudWxscHRyIH07CisKKyAgICBhdXRvIHRydXN0
RGF0YSA9IGRlY29kZUNGRGF0YShkZWNvZGVyKTsKKyAgICBpZiAoIXRydXN0RGF0YSkKKyAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIGF1dG8gdHJ1c3QgPSBhZG9wdENGKFNlY1Ry
dXN0RGVzZXJpYWxpemUodHJ1c3REYXRhLT5nZXQoKSwgbnVsbHB0cikpOworICAgIGlmICghdHJ1
c3QpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICByZXR1cm4gV1RGTW92ZSh0
cnVzdCk7Cit9CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKENPQ09BKQorc3RhdGljIHZvaWQgZW5j
b2RlQ2VydGlmaWNhdGVDaGFpbihFbmNvZGVyJiBlbmNvZGVyLCBDRkFycmF5UmVmIGNlcnRpZmlj
YXRlQ2hhaW4pCit7CisgICAgQ0ZJbmRleCBzaXplID0gQ0ZBcnJheUdldENvdW50KGNlcnRpZmlj
YXRlQ2hhaW4pOworICAgIFZlY3RvcjxDRlR5cGVSZWYsIDMyPiB2YWx1ZXMoc2l6ZSk7CisKKyAg
ICBDRkFycmF5R2V0VmFsdWVzKGNlcnRpZmljYXRlQ2hhaW4sIENGUmFuZ2VNYWtlKDAsIHNpemUp
LCB2YWx1ZXMuZGF0YSgpKTsKKworICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+
KHNpemUpOworCisgICAgZm9yIChDRkluZGV4IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAg
ICAgIEFTU0VSVCh2YWx1ZXNbaV0pOworICAgICAgICBhdXRvIGRhdGEgPSBhZG9wdENGKFNlY0Nl
cnRpZmljYXRlQ29weURhdGEoY2hlY2tlZF9jZl9jYXN0PFNlY0NlcnRpZmljYXRlUmVmPih2YWx1
ZXNbaV0pKSk7CisgICAgICAgIGVuY29kZUNGRGF0YShlbmNvZGVyLCBkYXRhLmdldCgpKTsKKyAg
ICB9Cit9CisKK3N0YXRpYyBPcHRpb25hbDxSZXRhaW5QdHI8Q0ZBcnJheVJlZj4+IGRlY29kZUNl
cnRpZmljYXRlQ2hhaW4oRGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBPcHRpb25hbDx1aW50NjRf
dD4gc2l6ZTsKKyAgICBkZWNvZGVyID4+IHNpemU7CisgICAgaWYgKCFzaXplKQorICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgYXV0byBhcnJheSA9IGFkb3B0Q0YoQ0ZBcnJheUNy
ZWF0ZU11dGFibGUoMCwgMCwgJmtDRlR5cGVBcnJheUNhbGxCYWNrcykpOworCisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCAqc2l6ZTsgKytpKSB7CisgICAgICAgIGF1dG8gZGF0YSA9IGRlY29k
ZUNGRGF0YShkZWNvZGVyKTsKKyAgICAgICAgaWYgKCFkYXRhKQorICAgICAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKKworICAgICAgICBhdXRvIGNlcnRpZmljYXRlID0gYWRvcHRDRihTZWND
ZXJ0aWZpY2F0ZUNyZWF0ZVdpdGhEYXRhKDAsIGRhdGEtPmdldCgpKSk7CisgICAgICAgIENGQXJy
YXlBcHBlbmRWYWx1ZShhcnJheS5nZXQoKSwgY2VydGlmaWNhdGUuZ2V0KCkpOworICAgIH0KKwor
ICAgIHJldHVybiB7IFdURk1vdmUoYXJyYXkpIH07Cit9CisjZW5kaWYKKwordm9pZCBDb2RlcjxX
ZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8+OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3Qg
V2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvJiBjZXJ0aWZpY2F0ZUluZm8pCit7CisgICAgZW5jb2Rl
ciA8PCBjZXJ0aWZpY2F0ZUluZm8udHlwZSgpOworCisgICAgc3dpdGNoIChjZXJ0aWZpY2F0ZUlu
Zm8udHlwZSgpKSB7CisjaWYgSEFWRShTRUNfVFJVU1RfU0VSSUFMSVpBVElPTikKKyAgICBjYXNl
IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbzo6VHlwZTo6VHJ1c3Q6CisgICAgICAgIGVuY29kZVNl
Y1RydXN0UmVmKGVuY29kZXIsIGNlcnRpZmljYXRlSW5mby50cnVzdCgpKTsKKyAgICAgICAgYnJl
YWs7CisjZW5kaWYKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBjYXNlIFdlYkNvcmU6OkNlcnRp
ZmljYXRlSW5mbzo6VHlwZTo6Q2VydGlmaWNhdGVDaGFpbjogeworICAgICAgICBlbmNvZGVDZXJ0
aWZpY2F0ZUNoYWluKGVuY29kZXIsIGNlcnRpZmljYXRlSW5mby5jZXJ0aWZpY2F0ZUNoYWluKCkp
OworICAgICAgICBicmVhazsKKyAgICB9CisjZW5kaWYKKyAgICBjYXNlIFdlYkNvcmU6OkNlcnRp
ZmljYXRlSW5mbzo6VHlwZTo6Tm9uZToKKyAgICAgICAgLy8gRG8gbm90aGluZy4KKyAgICAgICAg
YnJlYWs7CisgICAgfQorfQorCitPcHRpb25hbDxXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8+IENv
ZGVyPFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbz46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQor
eworICAgIE9wdGlvbmFsPFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbzo6VHlwZT4gY2VydGlmaWNh
dGVJbmZvVHlwZTsKKyAgICBkZWNvZGVyID4+IGNlcnRpZmljYXRlSW5mb1R5cGU7CisgICAgaWYg
KCFjZXJ0aWZpY2F0ZUluZm9UeXBlKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisg
ICAgc3dpdGNoICgqY2VydGlmaWNhdGVJbmZvVHlwZSkgeworI2lmIEhBVkUoU0VDX1RSVVNUX1NF
UklBTElaQVRJT04pCisgICAgY2FzZSBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm86OlR5cGU6OlRy
dXN0OiB7CisgICAgICAgIGF1dG8gdHJ1c3QgPSBkZWNvZGVTZWNUcnVzdFJlZihkZWNvZGVyKTsK
KyAgICAgICAgaWYgKCF0cnVzdCkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisK
KyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyhXVEZNb3ZlKCp0cnVzdCkp
OworICAgIH0KKyNlbmRpZgorI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIGNhc2UgV2ViQ29yZTo6
Q2VydGlmaWNhdGVJbmZvOjpUeXBlOjpDZXJ0aWZpY2F0ZUNoYWluOiB7CisgICAgICAgIGF1dG8g
Y2VydGlmaWNhdGVDaGFpbiA9IGRlY29kZUNlcnRpZmljYXRlQ2hhaW4oZGVjb2Rlcik7CisgICAg
ICAgIGlmICghY2VydGlmaWNhdGVDaGFpbikKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CisKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyhXVEZNb3ZlKCpj
ZXJ0aWZpY2F0ZUNoYWluKSk7CisgICAgfQorI2VuZGlmCisgICAgY2FzZSBXZWJDb3JlOjpDZXJ0
aWZpY2F0ZUluZm86OlR5cGU6Ok5vbmU6CisgICAgICAgIC8vIERvIG5vdGhpbmcuCisgICAgICAg
IHJldHVybiBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8oKTsKKyAgICB9CisKKyAgICByZXR1cm4g
V1RGOjpudWxsb3B0OworfQorCit9IC8vIG5hbWVzcGFjZSBQZXJzaXN0ZW5jZQorfSAvLyBuYW1l
c3BhY2UgV1RGCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ2Vy
dGlmaWNhdGVJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9jdXJsL0NlcnRpZmljYXRlSW5mby5oCShyZXZpc2lvbiAyNTk4OTgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ2VydGlmaWNhdGVJbmZvLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTgyLDI3ICs4MiwyOSBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBDb2RlcjxXZWJDb3Jl
OjpDZXJ0aWZpCiAgICAgICAgICAgICBlbmNvZGVyIDw8IGNlcnRpZmljYXRlOwogICAgIH0KIAot
ICAgIHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBXZWJDb3JlOjpDZXJ0aWZp
Y2F0ZUluZm8mIGNlcnRpZmljYXRlSW5mbykKKyAgICBzdGF0aWMgT3B0aW9uYWw8V2ViQ29yZTo6
Q2VydGlmaWNhdGVJbmZvPiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKICAgICB7Ci0gICAgICAg
IGludCB2ZXJpZmljYXRpb25FcnJvcjsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZSh2ZXJp
ZmljYXRpb25FcnJvcikpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgc2l6
ZV90IG51bU9mQ2VydCA9IDA7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUobnVtT2ZDZXJ0
KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgT3B0aW9uYWw8aW50PiB2ZXJp
ZmljYXRpb25FcnJvcjsKKyAgICAgICAgZGVjb2RlciA+PiB2ZXJpZmljYXRpb25FcnJvcjsKKyAg
ICAgICAgaWYgKCF2ZXJpZmljYXRpb25FcnJvcikKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CisKKyAgICAgICAgT3B0aW9uYWw8c2l6ZV90PiBudW1PZkNlcnRzOworICAgICAgICBk
ZWNvZGVyID4+IG51bU9mQ2VydHM7CisgICAgICAgIGlmICghbnVtT2ZDZXJ0cykKKyAgICAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICAgICAgV2ViQ29yZTo6Q2VydGlmaWNhdGVJ
bmZvOjpDZXJ0aWZpY2F0ZUNoYWluIGNlcnRpZmljYXRlQ2hhaW47Ci0gICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbnVtT2ZDZXJ0OyBpKyspIHsKLSAgICAgICAgICAgIFdlYkNvcmU6OkNl
cnRpZmljYXRlSW5mbzo6Q2VydGlmaWNhdGUgY2VydGlmaWNhdGU7Ci0gICAgICAgICAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKGNlcnRpZmljYXRlKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtT2ZDZXJ0cy52YWx1ZSgpOyBp
KyspIHsKKyAgICAgICAgICAgIE9wdGlvbmFsPFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbzo6Q2Vy
dGlmaWNhdGU+IGNlcnRpZmljYXRlOworICAgICAgICAgICAgZGVjb2RlciA+PiBjZXJ0aWZpY2F0
ZTsKKyAgICAgICAgICAgIGlmICghY2VydGlmaWNhdGUpCisgICAgICAgICAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKIAotICAgICAgICAgICAgY2VydGlmaWNhdGVDaGFpbi5hcHBlbmQoV1RG
TW92ZShjZXJ0aWZpY2F0ZSkpOworICAgICAgICAgICAgY2VydGlmaWNhdGVDaGFpbi5hcHBlbmQo
V1RGTW92ZShjZXJ0aWZpY2F0ZS52YWx1ZSgpKSk7CiAgICAgICAgIH0KIAotICAgICAgICBjZXJ0
aWZpY2F0ZUluZm8gPSBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8odmVyaWZpY2F0aW9uRXJyb3Is
IFdURk1vdmUoY2VydGlmaWNhdGVDaGFpbikpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgcmV0dXJuIFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyh2ZXJpZmljYXRpb25FcnJvci52YWx1
ZSgpLCBXVEZNb3ZlKGNlcnRpZmljYXRlQ2hhaW4pKTsKICAgICB9CiB9OwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQ2VydGlmaWNhdGVJbmZvLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL0NlcnRpZmljYXRl
SW5mby5oCShyZXZpc2lvbiAyNTk4OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL3NvdXAvQ2VydGlmaWNhdGVJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTc2LDE1ICs3Niwx
OCBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBDb2RlcjxHUmVmUHRyPEdCeXRlQXJyCiAgICAgICAgIGVu
Y29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGJ5dGVBcnJheS0+ZGF0YSwgYnl0ZUFycmF5LT5s
ZW4pOwogICAgIH0KIAotICAgIHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVyICZkZWNvZGVyLCBH
UmVmUHRyPEdCeXRlQXJyYXk+JiBieXRlQXJyYXkpCisgICAgc3RhdGljIE9wdGlvbmFsPEdSZWZQ
dHI8R0J5dGVBcnJheT4+IGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIHsKLSAgICAgICAg
dWludDMyX3Qgc2l6ZTsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShzaXplKSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBieXRlQXJyYXkgPSBhZG9wdEdSZWYoZ19i
eXRlX2FycmF5X3NpemVkX25ldyhzaXplKSk7Ci0gICAgICAgIGdfYnl0ZV9hcnJheV9zZXRfc2l6
ZShieXRlQXJyYXkuZ2V0KCksIHNpemUpOwotICAgICAgICByZXR1cm4gZGVjb2Rlci5kZWNvZGVG
aXhlZExlbmd0aERhdGEoYnl0ZUFycmF5LT5kYXRhLCBzaXplKTsKKyAgICAgICAgT3B0aW9uYWw8
dWludDMyX3Q+IHNpemU7CisgICAgICAgIGRlY29kZXIgPj4gc2l6ZTsKKyAgICAgICAgaWYgKCFz
aXplKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgICAgICBHUmVmUHRy
PEdCeXRlQXJyYXk+IGJ5dGVBcnJheSA9IGFkb3B0R1JlZihnX2J5dGVfYXJyYXlfc2l6ZWRfbmV3
KCpzaXplKSk7CisgICAgICAgIGdfYnl0ZV9hcnJheV9zZXRfc2l6ZShieXRlQXJyYXkuZ2V0KCks
ICpzaXplKTsKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShieXRl
QXJyYXktPmRhdGEsICpzaXplKSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cisg
ICAgICAgIHJldHVybiBieXRlQXJyYXk7CiAgICAgfQogfTsKIApAQCAtMTM5LDI1ICsxNDIsMjkg
QEAgdGVtcGxhdGU8PiBzdHJ1Y3QgQ29kZXI8V2ViQ29yZTo6Q2VydGlmaQogICAgICAgICBlbmNv
ZGVyIDw8IHN0YXRpY19jYXN0PHVpbnQzMl90PihjZXJ0aWZpY2F0ZUluZm8udGxzRXJyb3JzKCkp
OwogICAgIH0KIAotICAgIHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBXZWJD
b3JlOjpDZXJ0aWZpY2F0ZUluZm8mIGNlcnRpZmljYXRlSW5mbykKKyAgICBzdGF0aWMgT3B0aW9u
YWw8V2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvPiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKICAg
ICB7Ci0gICAgICAgIFZlY3RvcjxHUmVmUHRyPEdCeXRlQXJyYXk+PiBjZXJ0aWZpY2F0ZXNEYXRh
TGlzdDsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShjZXJ0aWZpY2F0ZXNEYXRhTGlzdCkp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIE9wdGlvbmFsPFZlY3RvcjxHUmVm
UHRyPEdCeXRlQXJyYXk+Pj4gY2VydGlmaWNhdGVzRGF0YUxpc3Q7CisgICAgICAgIGRlY29kZXIg
Pj4gY2VydGlmaWNhdGVzRGF0YUxpc3Q7CisgICAgICAgIGlmICghY2VydGlmaWNhdGVzRGF0YUxp
c3QpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgICAgIFdlYkNvcmU6
OkNlcnRpZmljYXRlSW5mbyBjZXJ0aWZpY2F0ZUluZm87CisgICAgICAgIGlmIChjZXJ0aWZpY2F0
ZXNEYXRhTGlzdC0+aXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIGNlcnRpZmljYXRlSW5m
bzsKIAotICAgICAgICBpZiAoY2VydGlmaWNhdGVzRGF0YUxpc3QuaXNFbXB0eSgpKQotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGF1dG8gY2VydGlmaWNhdGUgPSBjZXJ0aWZpY2F0
ZUZyb21DZXJ0aWZpY2F0ZXNEYXRhTGlzdChjZXJ0aWZpY2F0ZXNEYXRhTGlzdCk7CisgICAgICAg
IGF1dG8gY2VydGlmaWNhdGUgPSBjZXJ0aWZpY2F0ZUZyb21DZXJ0aWZpY2F0ZXNEYXRhTGlzdChj
ZXJ0aWZpY2F0ZXNEYXRhTGlzdC52YWx1ZSgpKTsKICAgICAgICAgaWYgKCFjZXJ0aWZpY2F0ZSkK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CiAgICAgICAgIGNlcnRpZmljYXRlSW5mby5zZXRDZXJ0aWZpY2F0ZShjZXJ0aWZpY2F0ZS5n
ZXQoKSk7CiAKLSAgICAgICAgdWludDMyX3QgdGxzRXJyb3JzOwotICAgICAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKHRsc0Vycm9ycykpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IGNlcnRpZmljYXRlSW5mby5zZXRUTFNFcnJvcnMoc3RhdGljX2Nhc3Q8R1Rsc0NlcnRpZmljYXRl
RmxhZ3M+KHRsc0Vycm9ycykpOworICAgICAgICBPcHRpb25hbDx1aW50MzJfdD4gdGxzRXJyb3Jz
OworICAgICAgICBkZWNvZGVyID4+IHRsc0Vycm9yczsKKyAgICAgICAgaWYgKCF0bHNFcnJvcnMp
CisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICBjZXJ0aWZpY2F0ZUlu
Zm8uc2V0VExTRXJyb3JzKHN0YXRpY19jYXN0PEdUbHNDZXJ0aWZpY2F0ZUZsYWdzPigqdGxzRXJy
b3JzKSk7CiAKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiBjZXJ0aWZpY2F0
ZUluZm87CiAgICAgfQogfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9zb3VwL1Jlc291cmNlUmVzcG9uc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXNwb25zZS5oCShyZXZpc2lvbiAyNTk4OTgp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXNwb25z
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC05Miw3ICs5Miw3IEBAIHRlbXBsYXRlPGNsYXNzIEVuY29k
ZXI+CiB2b2lkIFJlc291cmNlUmVzcG9uc2U6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25z
dAogewogICAgIFJlc291cmNlUmVzcG9uc2VCYXNlOjplbmNvZGUoZW5jb2Rlcik7Ci0gICAgZW5j
b2Rlci5lbmNvZGVFbnVtKG1fc291cEZsYWdzKTsKKyAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0
PHVpbnQ2NF90PihtX3NvdXBGbGFncyk7CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+CkBA
IC0xMDAsOCArMTAwLDEyIEBAIGJvb2wgUmVzb3VyY2VSZXNwb25zZTo6ZGVjb2RlKERlY29kZXIm
IGQKIHsKICAgICBpZiAoIVJlc291cmNlUmVzcG9uc2VCYXNlOjpkZWNvZGUoZGVjb2RlciwgcmVz
cG9uc2UpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZUVu
dW0ocmVzcG9uc2UubV9zb3VwRmxhZ3MpKQorICAgIE9wdGlvbmFsPHVpbnQ2NF90PiBzb3VwRmxh
Z3M7CisgICAgZGVjb2RlciA+PiBzb3VwRmxhZ3M7CisgICAgaWYgKCFzb3VwRmxhZ3MpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAvLyBGSVhNRTogVmVyaWZ5IHRoYXQgdGhpcyBpcyBhIHZh
bGlkIHZhbHVlIGZvciBTb3VwTWVzc2FnZUZsYWdzLgorICAgIHJlc3BvbnNlLm1fc291cEZsYWdz
ID0gc3RhdGljX2Nhc3Q8U291cE1lc3NhZ2VGbGFncz4oKnNvdXBGbGFncyk7CiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9TZXJ2aWNl
V29ya2VyQ29udGV4dERhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93b3JrZXJz
L3NlcnZpY2UvU2VydmljZVdvcmtlckNvbnRleHREYXRhLmgJKHJldmlzaW9uIDI1OTg5OCkKKysr
IFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9TZXJ2aWNlV29ya2VyQ29udGV4dERhdGEu
aAkod29ya2luZyBjb3B5KQpAQCAtNTEsMjAgKzUxLDI4IEBAIHN0cnVjdCBTZXJ2aWNlV29ya2Vy
Q29udGV4dERhdGEgewogICAgICAgICAgICAgZW5jb2RlciA8PCBzY3JpcHQgPDwgcmVzcG9uc2VV
UkwgPDwgbWltZVR5cGU7CiAgICAgICAgIH0KIAotICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNv
ZGVyPiBzdGF0aWMgYm9vbCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgSW1wb3J0ZWRTY3JpcHQm
IHNjcmlwdCkKKyAgICAgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFs
PEltcG9ydGVkU2NyaXB0PiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKICAgICAgICAgewotICAg
ICAgICAgICAgSW1wb3J0ZWRTY3JpcHQgaW1wb3J0ZWRTY3JpcHQ7Ci0gICAgICAgICAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKGltcG9ydGVkU2NyaXB0LnNjcmlwdCkpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGltcG9ydGVk
U2NyaXB0LnJlc3BvbnNlVVJMKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaW1wb3J0ZWRTY3JpcHQubWltZVR5cGUpKQot
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgc2NyaXB0ID0gV1RG
TW92ZShpbXBvcnRlZFNjcmlwdCk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
ICAgIE9wdGlvbmFsPFN0cmluZz4gc2NyaXB0OworICAgICAgICAgICAgZGVjb2RlciA+PiBzY3Jp
cHQ7CisgICAgICAgICAgICBpZiAoIXNjcmlwdCkKKyAgICAgICAgICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OworICAgICAgICAgICAgCisgICAgICAgICAgICBPcHRpb25hbDxVUkw+IHJlc3Bv
bnNlVVJMOworICAgICAgICAgICAgZGVjb2RlciA+PiByZXNwb25zZVVSTDsKKyAgICAgICAgICAg
IGlmICghcmVzcG9uc2VVUkwpCisgICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgT3B0aW9uYWw8U3RyaW5nPiBtaW1lVHlwZTsKKyAg
ICAgICAgICAgIGRlY29kZXIgPj4gbWltZVR5cGU7CisgICAgICAgICAgICBpZiAoIW1pbWVUeXBl
KQorICAgICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIHJldHVybiB7eworICAgICAgICAgICAgICAgIFdURk1vdmUoKnNjcmlwdCksCisg
ICAgICAgICAgICAgICAgV1RGTW92ZSgqcmVzcG9uc2VVUkwpLAorICAgICAgICAgICAgICAgIFdU
Rk1vdmUoKm1pbWVUeXBlKQorICAgICAgICAgICAgfX07CiAgICAgICAgIH0KICAgICB9OwogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1JlZ2lzdHJhdGlvbkRh
dGFiYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2Uv
c2VydmVyL1JlZ2lzdHJhdGlvbkRhdGFiYXNlLmNwcAkocmV2aXNpb24gMjU5ODk4KQorKysgU291
cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9SZWdpc3RyYXRpb25EYXRhYmFzZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM0Miw3ICszNDIsNyBAQCB2b2lkIFJlZ2lzdHJhdGlvbkRh
dGFiYXNlOjpkb1B1c2hDaGFuZ2VzCiAgICAgICAgIGRhdGEuY29udGVudFNlY3VyaXR5UG9saWN5
LmVuY29kZShjc3BFbmNvZGVyKTsKIAogICAgICAgICBXVEY6OlBlcnNpc3RlbmNlOjpFbmNvZGVy
IHNjcmlwdFJlc291cmNlTWFwRW5jb2RlcjsKLSAgICAgICAgc2NyaXB0UmVzb3VyY2VNYXBFbmNv
ZGVyLmVuY29kZShkYXRhLnNjcmlwdFJlc291cmNlTWFwKTsKKyAgICAgICAgc2NyaXB0UmVzb3Vy
Y2VNYXBFbmNvZGVyIDw8IGRhdGEuc2NyaXB0UmVzb3VyY2VNYXA7CiAKICAgICAgICAgaWYgKHNx
bC5iaW5kVGV4dCgxLCBkYXRhLnJlZ2lzdHJhdGlvbi5rZXkudG9EYXRhYmFzZUtleSgpKSAhPSBT
UUxJVEVfT0sKICAgICAgICAgICAgIHx8IHNxbC5iaW5kVGV4dCgyLCBkYXRhLnJlZ2lzdHJhdGlv
bi5zY29wZVVSTC5wcm90b2NvbEhvc3RBbmRQb3J0KCkpICE9IFNRTElURV9PSwpAQCAtMzkyLDE5
ICszOTIsMjMgQEAgU3RyaW5nIFJlZ2lzdHJhdGlvbkRhdGFiYXNlOjppbXBvcnRSZWNvcgogICAg
ICAgICBWZWN0b3I8dWludDhfdD4gY29udGVudFNlY3VyaXR5UG9saWN5RGF0YTsKICAgICAgICAg
c3FsLmdldENvbHVtbkJsb2JBc1ZlY3Rvcig5LCBjb250ZW50U2VjdXJpdHlQb2xpY3lEYXRhKTsK
ICAgICAgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBjc3BEZWNvZGVyKGNvbnRlbnRTZWN1
cml0eVBvbGljeURhdGEuZGF0YSgpLCBjb250ZW50U2VjdXJpdHlQb2xpY3lEYXRhLnNpemUoKSk7
Ci0gICAgICAgIENvbnRlbnRTZWN1cml0eVBvbGljeVJlc3BvbnNlSGVhZGVycyBjb250ZW50U2Vj
dXJpdHlQb2xpY3k7Ci0gICAgICAgIGlmIChjb250ZW50U2VjdXJpdHlQb2xpY3lEYXRhLnNpemUo
KSAmJiAhQ29udGVudFNlY3VyaXR5UG9saWN5UmVzcG9uc2VIZWFkZXJzOjpkZWNvZGUoY3NwRGVj
b2RlciwgY29udGVudFNlY3VyaXR5UG9saWN5KSkKLSAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICBPcHRpb25hbDxDb250ZW50U2VjdXJpdHlQb2xpY3lSZXNwb25zZUhlYWRlcnM+IGNvbnRl
bnRTZWN1cml0eVBvbGljeTsKKyAgICAgICAgaWYgKGNvbnRlbnRTZWN1cml0eVBvbGljeURhdGEu
c2l6ZSgpKSB7CisgICAgICAgICAgICBjc3BEZWNvZGVyID4+IGNvbnRlbnRTZWN1cml0eVBvbGlj
eTsKKyAgICAgICAgICAgIGlmICghY29udGVudFNlY3VyaXR5UG9saWN5KQorICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICB9CiAKICAgICAgICAgYXV0byByZWZlcnJlclBvbGljeSA9
IHNxbC5nZXRDb2x1bW5UZXh0KDEwKTsKIAogICAgICAgICBWZWN0b3I8dWludDhfdD4gc2NyaXB0
UmVzb3VyY2VNYXBEYXRhOwogICAgICAgICBzcWwuZ2V0Q29sdW1uQmxvYkFzVmVjdG9yKDExLCBz
Y3JpcHRSZXNvdXJjZU1hcERhdGEpOwotICAgICAgICBIYXNoTWFwPFVSTCwgU2VydmljZVdvcmtl
ckNvbnRleHREYXRhOjpJbXBvcnRlZFNjcmlwdD4gc2NyaXB0UmVzb3VyY2VNYXA7CisgICAgICAg
IE9wdGlvbmFsPEhhc2hNYXA8VVJMLCBTZXJ2aWNlV29ya2VyQ29udGV4dERhdGE6OkltcG9ydGVk
U2NyaXB0Pj4gc2NyaXB0UmVzb3VyY2VNYXA7CiAKICAgICAgICAgV1RGOjpQZXJzaXN0ZW5jZTo6
RGVjb2RlciBzY3JpcHRSZXNvdXJjZU1hcERlY29kZXIoc2NyaXB0UmVzb3VyY2VNYXBEYXRhLmRh
dGEoKSwgc2NyaXB0UmVzb3VyY2VNYXBEYXRhLnNpemUoKSk7CiAgICAgICAgIGlmIChzY3JpcHRS
ZXNvdXJjZU1hcERhdGEuc2l6ZSgpKSB7Ci0gICAgICAgICAgICBpZiAoIXNjcmlwdFJlc291cmNl
TWFwRGVjb2Rlci5kZWNvZGUoc2NyaXB0UmVzb3VyY2VNYXApKQorICAgICAgICAgICAgc2NyaXB0
UmVzb3VyY2VNYXBEZWNvZGVyID4+IHNjcmlwdFJlc291cmNlTWFwOworICAgICAgICAgICAgaWYg
KCFzY3JpcHRSZXNvdXJjZU1hcCkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
fQogCkBAIC00MTgsNyArNDIyLDcgQEAgU3RyaW5nIFJlZ2lzdHJhdGlvbkRhdGFiYXNlOjppbXBv
cnRSZWNvcgogICAgICAgICBhdXRvIHJlZ2lzdHJhdGlvbklkZW50aWZpZXIgPSBTZXJ2aWNlV29y
a2VyUmVnaXN0cmF0aW9uSWRlbnRpZmllcjo6Z2VuZXJhdGUoKTsKICAgICAgICAgYXV0byBzZXJ2
aWNlV29ya2VyRGF0YSA9IFNlcnZpY2VXb3JrZXJEYXRhIHsgd29ya2VySWRlbnRpZmllciwgc2Ny
aXB0VVJMLCBTZXJ2aWNlV29ya2VyU3RhdGU6OkFjdGl2YXRlZCwgKndvcmtlclR5cGUsIHJlZ2lz
dHJhdGlvbklkZW50aWZpZXIgfTsKICAgICAgICAgYXV0byByZWdpc3RyYXRpb24gPSBTZXJ2aWNl
V29ya2VyUmVnaXN0cmF0aW9uRGF0YSB7IFdURk1vdmUoKmtleSksIHJlZ2lzdHJhdGlvbklkZW50
aWZpZXIsIFdURk1vdmUoc2NvcGVVUkwpLCAqdXBkYXRlVmlhQ2FjaGUsIGxhc3RVcGRhdGVDaGVj
a1RpbWUsIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0LCBXVEZNb3ZlKHNlcnZpY2VXb3JrZXJE
YXRhKSB9OwotICAgICAgICBhdXRvIGNvbnRleHREYXRhID0gU2VydmljZVdvcmtlckNvbnRleHRE
YXRhIHsgV1RGOjpudWxsb3B0LCBXVEZNb3ZlKHJlZ2lzdHJhdGlvbiksIHdvcmtlcklkZW50aWZp
ZXIsIFdURk1vdmUoc2NyaXB0KSwgV1RGTW92ZShjb250ZW50U2VjdXJpdHlQb2xpY3kpLCBXVEZN
b3ZlKHJlZmVycmVyUG9saWN5KSwgV1RGTW92ZShzY3JpcHRVUkwpLCAqd29ya2VyVHlwZSwgdHJ1
ZSwgV1RGTW92ZShzY3JpcHRSZXNvdXJjZU1hcCkgfTsKKyAgICAgICAgYXV0byBjb250ZXh0RGF0
YSA9IFNlcnZpY2VXb3JrZXJDb250ZXh0RGF0YSB7IFdURjo6bnVsbG9wdCwgV1RGTW92ZShyZWdp
c3RyYXRpb24pLCB3b3JrZXJJZGVudGlmaWVyLCBXVEZNb3ZlKHNjcmlwdCksIFdURk1vdmUoKmNv
bnRlbnRTZWN1cml0eVBvbGljeSksIFdURk1vdmUocmVmZXJyZXJQb2xpY3kpLCBXVEZNb3ZlKHNj
cmlwdFVSTCksICp3b3JrZXJUeXBlLCB0cnVlLCBXVEZNb3ZlKCpzY3JpcHRSZXNvdXJjZU1hcCkg
fTsKIAogICAgICAgICBjYWxsT25NYWluVGhyZWFkKFtwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigq
dGhpcyksIGNvbnRleHREYXRhID0gY29udGV4dERhdGEuaXNvbGF0ZWRDb3B5KCldKCkgbXV0YWJs
ZSB7CiAgICAgICAgICAgICBwcm90ZWN0ZWRUaGlzLT5hZGRSZWdpc3RyYXRpb25Ub1N0b3JlKFdU
Rk1vdmUoY29udGV4dERhdGEpKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNTk4OTgpCisrKyBT
b3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM1IEBACisy
MDIwLTA0LTEwICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisK
KyAgICAgICAgUGVyc2lzdGVudENvZGVycyBzaG91bGQgdXNlIG1vZGVybiBkZWNvZGluZyBzeW50
YXgKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNzQ5
NworCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAgICAgICogTmV0d29y
a1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGUuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpDYWNoZVN0b3JhZ2U6OmRlY29kZURPTUNhY2hlUmVjb3JkKToKKyAgICAgICAgKFdlYktp
dDo6Q2FjaGVTdG9yYWdlOjpDYWNoZTo6ZGVjb2RlUmVjb3JkSGVhZGVyKToKKyAgICAgICAgKiBO
ZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlczo6cmVhZE9yaWdpbik6CisgICAgICAgIChX
ZWJLaXQ6OkNhY2hlU3RvcmFnZTo6ZGVjb2RlQ2FjaGVzTmFtZXMpOgorICAgICAgICAqIE5ldHdv
cmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUNvZGVycy5jcHA6CisgICAgICAgIChXVEY6OlBl
cnNpc3RlbmNlOjpDb2RlcjxXZWJDb3JlOjpIVFRQSGVhZGVyTWFwPjo6ZGVjb2RlKToKKyAgICAg
ICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVFbnRyeS5jcHA6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RW50cnk6OmRlY29kZVN0b3JhZ2VSZWNvcmQpOgorICAg
ICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUtleS5jcHA6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6S2V5OjpkZWNvZGUpOgorICAgICAgICAqIE5ldHdvcmtQ
cm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUtleS5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNz
L2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
Q2FjaGU6OmRlY29kZVJlY29yZE1ldGFEYXRhKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9j
YWNoZS9OZXR3b3JrQ2FjaGVTdWJyZXNvdXJjZXNFbnRyeS5jcHA6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtDYWNoZTo6U3VicmVzb3VyY2VJbmZvOjplbmNvZGUgY29uc3QpOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrQ2FjaGU6OlN1YnJlc291cmNlSW5mbzo6ZGVjb2RlKToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya0NhY2hlOjpTdWJyZXNvdXJjZXNFbnRyeTo6ZGVjb2RlU3RvcmFnZVJl
Y29yZCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3VicmVz
b3VyY2VzRW50cnkuaDoKKyAgICAgICAgKiBTaGFyZWQvVXNlckRhdGEuY3BwOgorICAgICAgICAo
V2ViS2l0OjpVc2VyRGF0YTo6ZGVjb2RlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0FQSUNv
bnRlbnRSdWxlTGlzdFN0b3JlLmNwcDoKKyAgICAgICAgKEFQSTo6ZGVjb2RlQ29udGVudFJ1bGVM
aXN0TWV0YURhdGEpOgorCiAyMDIwLTA0LTEwICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5j
b20+CiAKICAgICAgICAgRmlyc3QgcmVuZGVyIGFmdGVyIGEgcHJvY2VzcyBzd2FwIGRvZXMgbm90
IHVzZSBhY2NlbGVyYXRlZCByZW5kZXJpbmcKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGUu
Y3BwCShyZXZpc2lvbiAyNTk4OTgpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2Nh
Y2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcyLDQ1
ICs1NzIsODAgQEAgU3RvcmFnZTo6UmVjb3JkIENhY2hlOjplbmNvZGUoY29uc3QgUmVjbwogICAg
IHJldHVybiB7IHJlY29yZEluZm9ybWF0aW9uLmtleSwgeyB9LCBoZWFkZXIsIGJvZHksIHsgfSB9
OwogfQogCi1PcHRpb25hbDxDYWNoZTo6RGVjb2RlZFJlY29yZD4gQ2FjaGU6OmRlY29kZVJlY29y
ZEhlYWRlcihjb25zdCBTdG9yYWdlOjpSZWNvcmQmIHN0b3JhZ2UpCitzdGF0aWMgT3B0aW9uYWw8
V2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OlJlY29yZD4gZGVjb2RlRE9NQ2FjaGVSZWNvcmQoV1RG
OjpQZXJzaXN0ZW5jZTo6RGVjb2RlciYgZGVjb2RlcikKIHsKLSAgICBXVEY6OlBlcnNpc3RlbmNl
OjpEZWNvZGVyIGRlY29kZXIoc3RvcmFnZS5oZWFkZXIuZGF0YSgpLCBzdG9yYWdlLmhlYWRlci5z
aXplKCkpOwotCi0gICAgUmVjb3JkIHJlY29yZDsKLQotICAgIGRvdWJsZSBpbnNlcnRpb25UaW1l
OwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaW5zZXJ0aW9uVGltZSkpCi0gICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7Ci0KLSAgICB1aW50NjRfdCBzaXplOwotICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUoc2l6ZSkpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKHJlY29yZC5yZXF1ZXN0SGVhZGVyc0d1YXJkKSkKLSAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKLQotICAgIGlmICghcmVjb3JkLnJlcXVlc3QuZGVjb2RlV2l0aG91dFBs
YXRmb3JtRGF0YShkZWNvZGVyKSkKKyAgICBPcHRpb25hbDxGZXRjaEhlYWRlcnM6Okd1YXJkPiBy
ZXF1ZXN0SGVhZGVyc0d1YXJkOworICAgIGRlY29kZXIgPj4gcmVxdWVzdEhlYWRlcnNHdWFyZDsK
KyAgICBpZiAoIXJlcXVlc3RIZWFkZXJzR3VhcmQpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CisgICAgCisgICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3Q7CisgICAgaWYgKCFyZXF1ZXN0
LmRlY29kZVdpdGhvdXRQbGF0Zm9ybURhdGEoZGVjb2RlcikpCisgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CisgICAgCisgICAgRmV0Y2hPcHRpb25zIG9wdGlvbnM7CisgICAgaWYgKCFGZXRj
aE9wdGlvbnM6OmRlY29kZVBlcnNpc3RlbnQoZGVjb2Rlciwgb3B0aW9ucykpCisgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CisgICAgCisgICAgT3B0aW9uYWw8U3RyaW5nPiByZWZlcnJlcjsK
KyAgICBkZWNvZGVyID4+IHJlZmVycmVyOworICAgIGlmICghcmVmZXJyZXIpCisgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CisgICAgCisgICAgT3B0aW9uYWw8RmV0Y2hIZWFkZXJzOjpHdWFy
ZD4gcmVzcG9uc2VIZWFkZXJzR3VhcmQ7CisgICAgZGVjb2RlciA+PiByZXNwb25zZUhlYWRlcnNH
dWFyZDsKKyAgICBpZiAoIXJlc3BvbnNlSGVhZGVyc0d1YXJkKQorICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OworCisgICAgUmVzb3VyY2VSZXNwb25zZSByZXNwb25zZTsKKyAgICBpZiAoIVJl
c291cmNlUmVzcG9uc2U6OmRlY29kZShkZWNvZGVyLCByZXNwb25zZSkpCisgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CisgICAgCisgICAgT3B0aW9uYWw8dWludDY0X3Q+IHJlc3BvbnNlQm9k
eVNpemU7CisgICAgZGVjb2RlciA+PiByZXNwb25zZUJvZHlTaXplOworICAgIGlmICghcmVzcG9u
c2VCb2R5U2l6ZSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIGlmICghRmV0
Y2hPcHRpb25zOjpkZWNvZGVQZXJzaXN0ZW50KGRlY29kZXIsIHJlY29yZC5vcHRpb25zKSkKKyAg
ICBpZiAoIWRlY29kZXIudmVyaWZ5Q2hlY2tzdW0oKSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKIAotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVjb3JkLnJlZmVycmVyKSkKLSAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4ge3sKKyAgICAgICAgMCwKKyAgICAg
ICAgMCwKKyAgICAgICAgV1RGTW92ZSgqcmVxdWVzdEhlYWRlcnNHdWFyZCksCisgICAgICAgIFdU
Rk1vdmUocmVxdWVzdCksCisgICAgICAgIFdURk1vdmUob3B0aW9ucyksCisgICAgICAgIFdURk1v
dmUoKnJlZmVycmVyKSwKKyAgICAgICAgV1RGTW92ZSgqcmVzcG9uc2VIZWFkZXJzR3VhcmQpLAor
ICAgICAgICBXVEZNb3ZlKHJlc3BvbnNlKSwKKyAgICAgICAgeyB9LAorICAgICAgICBXVEZNb3Zl
KCpyZXNwb25zZUJvZHlTaXplKQorICAgIH19OworfQogCi0gICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShyZWNvcmQucmVzcG9uc2VIZWFkZXJzR3VhcmQpKQotICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OworT3B0aW9uYWw8Q2FjaGU6OkRlY29kZWRSZWNvcmQ+IENhY2hlOjpkZWNvZGVSZWNvcmRI
ZWFkZXIoY29uc3QgU3RvcmFnZTo6UmVjb3JkJiBzdG9yYWdlKQoreworICAgIFdURjo6UGVyc2lz
dGVuY2U6OkRlY29kZXIgZGVjb2RlcihzdG9yYWdlLmhlYWRlci5kYXRhKCksIHN0b3JhZ2UuaGVh
ZGVyLnNpemUoKSk7CiAKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlY29yZC5yZXNwb25zZSkp
CisgICAgT3B0aW9uYWw8ZG91YmxlPiBpbnNlcnRpb25UaW1lOworICAgIGRlY29kZXIgPj4gaW5z
ZXJ0aW9uVGltZTsKKyAgICBpZiAoIWluc2VydGlvblRpbWUpCiAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CiAKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlY29yZC5yZXNwb25zZUJvZHlT
aXplKSkKKyAgICBPcHRpb25hbDx1aW50NjRfdD4gc2l6ZTsKKyAgICBkZWNvZGVyID4+IHNpemU7
CisgICAgaWYgKCFzaXplKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgaWYg
KCFkZWNvZGVyLnZlcmlmeUNoZWNrc3VtKCkpCisgICAgT3B0aW9uYWw8V2ViQ29yZTo6RE9NQ2Fj
aGVFbmdpbmU6OlJlY29yZD4gcmVjb3JkID0gZGVjb2RlRE9NQ2FjaGVSZWNvcmQoZGVjb2Rlcik7
CisgICAgaWYgKCFyZWNvcmQpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBy
ZXR1cm4gRGVjb2RlZFJlY29yZCB7IGluc2VydGlvblRpbWUsIHNpemUsIFdURk1vdmUocmVjb3Jk
KSB9OworICAgIHJldHVybiB7eworICAgICAgICBXVEZNb3ZlKCppbnNlcnRpb25UaW1lKSwKKyAg
ICAgICAgV1RGTW92ZSgqc2l6ZSksCisgICAgICAgIFdURk1vdmUoKnJlY29yZCkKKyAgICB9fTsK
IH0KIAogT3B0aW9uYWw8UmVjb3JkPiBDYWNoZTo6ZGVjb2RlKGNvbnN0IFN0b3JhZ2U6OlJlY29y
ZCYgc3RvcmFnZSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2Fj
aGVTdG9yYWdlRW5naW5lQ2FjaGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5jcHAJKHJldmlzaW9u
IDI1OTg5OCkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9y
YWdlRW5naW5lQ2FjaGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEyLDIzICsxMTIsMjIgQEAg
dm9pZCBDYWNoZXM6OnN0b3JlT3JpZ2luKENvbXBsZXRpb25DYWxsYgogCiBPcHRpb25hbDxXZWJD
b3JlOjpDbGllbnRPcmlnaW4+IENhY2hlczo6cmVhZE9yaWdpbihjb25zdCBEYXRhJiBkYXRhKQog
ewotICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgYWJsZSB0byB1c2UgbW9kZXJuIGRlY29kZXJz
IGZvciBwZXJzaXN0ZW50IGRhdGEuCi0gICAgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhIHRv
cE9yaWdpbiwgY2xpZW50T3JpZ2luOwogICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgZGVj
b2RlcihkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCkpOwogCi0gICAgaWYgKCFkZWNvZGVyLmRlY29k
ZSh0b3BPcmlnaW4ucHJvdG9jb2wpKQorICAgIE9wdGlvbmFsPFdlYkNvcmU6OlNlY3VyaXR5T3Jp
Z2luRGF0YT4gdG9wT3JpZ2luOworICAgIGRlY29kZXIgPj4gdG9wT3JpZ2luOworICAgIGlmICgh
dG9wT3JpZ2luKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIGlmICghZGVjb2Rl
ci5kZWNvZGUodG9wT3JpZ2luLmhvc3QpKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owot
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUodG9wT3JpZ2luLnBvcnQpKQotICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoY2xpZW50T3JpZ2luLnByb3Rv
Y29sKSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICBpZiAoIWRlY29kZXIuZGVj
b2RlKGNsaWVudE9yaWdpbi5ob3N0KSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKGNsaWVudE9yaWdpbi5wb3J0KSkKKworICAgIE9wdGlvbmFs
PFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YT4gY2xpZW50T3JpZ2luOworICAgIGRlY29kZXIg
Pj4gY2xpZW50T3JpZ2luOworICAgIGlmICghY2xpZW50T3JpZ2luKQogICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwotICAgIHJldHVybiBXZWJDb3JlOjpDbGllbnRPcmlnaW4geyBXVEZNb3Zl
KHRvcE9yaWdpbiksIFdURk1vdmUoY2xpZW50T3JpZ2luKSB9OworCisgICAgcmV0dXJuIHt7Cisg
ICAgICAgIFdURk1vdmUoKnRvcE9yaWdpbiksCisgICAgICAgIFdURk1vdmUoKmNsaWVudE9yaWdp
bikKKyAgICB9fTsKIH0KIAogdm9pZCBDYWNoZXM6OmluaXRpYWxpemUoV2ViQ29yZTo6RE9NQ2Fj
aGVFbmdpbmU6OkNvbXBsZXRpb25DYWxsYmFjayYmIGNhbGxiYWNrKQpAQCAtNDExLDIzICs0MTAs
MjYgQEAgc3RhdGljIGlubGluZSBEYXRhIGVuY29kZUNhY2hlTmFtZXMoY29ucwogc3RhdGljIGlu
bGluZSBFeHBlY3RlZDxWZWN0b3I8c3RkOjpwYWlyPFN0cmluZywgU3RyaW5nPj4sIEVycm9yPiBk
ZWNvZGVDYWNoZXNOYW1lcyhjb25zdCBEYXRhJiBkYXRhKQogewogICAgIFdURjo6UGVyc2lzdGVu
Y2U6OkRlY29kZXIgZGVjb2RlcihkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCkpOwotICAgIHVpbnQ2
NF90IGNvdW50OwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoY291bnQpKQorICAgIE9wdGlvbmFs
PHVpbnQ2NF90PiBjb3VudDsKKyAgICBkZWNvZGVyID4+IGNvdW50OworICAgIGlmICghY291bnQp
CiAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChFcnJvcjo6UmVhZERpc2spOwogCiAgICAg
VmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4+IG5hbWVzOwotICAgIGlmICghbmFtZXMu
dHJ5UmVzZXJ2ZUNhcGFjaXR5KGNvdW50KSkKKyAgICBpZiAoIW5hbWVzLnRyeVJlc2VydmVDYXBh
Y2l0eSgqY291bnQpKQogICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoRXJyb3I6OlJlYWRE
aXNrKTsKIAotICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBjb3VudDsgKytpbmRl
eCkgewotICAgICAgICBTdHJpbmcgbmFtZTsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShu
YW1lKSkKKyAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgKmNvdW50OyArK2luZGV4
KSB7CisgICAgICAgIE9wdGlvbmFsPFN0cmluZz4gbmFtZTsKKyAgICAgICAgZGVjb2RlciA+PiBu
YW1lOworICAgICAgICBpZiAoIW5hbWUpCiAgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0
ZWQoRXJyb3I6OlJlYWREaXNrKTsKLSAgICAgICAgU3RyaW5nIHVuaXF1ZU5hbWU7Ci0gICAgICAg
IGlmICghZGVjb2Rlci5kZWNvZGUodW5pcXVlTmFtZSkpCisgICAgICAgIE9wdGlvbmFsPFN0cmlu
Zz4gdW5pcXVlTmFtZTsKKyAgICAgICAgZGVjb2RlciA+PiB1bmlxdWVOYW1lOworICAgICAgICBp
ZiAoIXVuaXF1ZU5hbWUpCiAgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoRXJyb3I6
OlJlYWREaXNrKTsKIAotICAgICAgICBuYW1lcy51bmNoZWNrZWRBcHBlbmQoc3RkOjpwYWlyPFN0
cmluZywgU3RyaW5nPiB7IFdURk1vdmUobmFtZSksIFdURk1vdmUodW5pcXVlTmFtZSkgfSk7Cisg
ICAgICAgIG5hbWVzLnVuY2hlY2tlZEFwcGVuZCh7IFdURk1vdmUoKm5hbWUpLCBXVEZNb3ZlKCp1
bmlxdWVOYW1lKSB9KTsKICAgICB9CiAgICAgcmV0dXJuIG5hbWVzOwogfQpJbmRleDogU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVDb2RlcnMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hl
Q29kZXJzLmNwcAkocmV2aXNpb24gMjU5ODk4KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVDb2RlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCwy
MSArNDAsMjYgQEAgdm9pZCBDb2RlcjxXZWJDb3JlOjpIVFRQSGVhZGVyTWFwPjo6ZW5jbwogICAg
IH0KIH0KIAotYm9vbCBDb2RlcjxXZWJDb3JlOjpIVFRQSGVhZGVyTWFwPjo6ZGVjb2RlKERlY29k
ZXImIGRlY29kZXIsIFdlYkNvcmU6OkhUVFBIZWFkZXJNYXAmIGhlYWRlcnMpCitPcHRpb25hbDxX
ZWJDb3JlOjpIVFRQSGVhZGVyTWFwPiBDb2RlcjxXZWJDb3JlOjpIVFRQSGVhZGVyTWFwPjo6ZGVj
b2RlKERlY29kZXImIGRlY29kZXIpCiB7Ci0gICAgdWludDY0X3QgaGVhZGVyc1NpemU7Ci0gICAg
aWYgKCFkZWNvZGVyLmRlY29kZShoZWFkZXJzU2l6ZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBmb3IgKHVpbnQ2NF90IGkgPSAwOyBpIDwgaGVhZGVyc1NpemU7ICsraSkgewotICAgICAg
ICBTdHJpbmcgbmFtZTsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShuYW1lKSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgU3RyaW5nIHZhbHVlOwotICAgICAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgaGVhZGVycy5hcHBlbmQobmFtZSwgdmFsdWUpOworICAgIE9wdGlvbmFsPHVpbnQ2NF90PiBo
ZWFkZXJzU2l6ZTsKKyAgICBkZWNvZGVyID4+IGhlYWRlcnNTaXplOworICAgIGlmICghaGVhZGVy
c1NpemUpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBXZWJDb3JlOjpIVFRQ
SGVhZGVyTWFwIGhlYWRlcnM7CisgICAgZm9yICh1aW50NjRfdCBpID0gMDsgaSA8ICpoZWFkZXJz
U2l6ZTsgKytpKSB7CisgICAgICAgIE9wdGlvbmFsPFN0cmluZz4gbmFtZTsKKyAgICAgICAgZGVj
b2RlciA+PiBuYW1lOworICAgICAgICBpZiAoIW5hbWUpCisgICAgICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OworICAgICAgICBPcHRpb25hbDxTdHJpbmc+IHZhbHVlOworICAgICAgICBkZWNv
ZGVyID4+IHZhbHVlOworICAgICAgICBpZiAoIXZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKKyAgICAgICAgaGVhZGVycy5hcHBlbmQoV1RGTW92ZSgqbmFtZSksIFdURk1v
dmUoKnZhbHVlKSk7CiAgICAgfQotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBXVEZNb3Zl
KGhlYWRlcnMpOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2Nh
Y2hlL05ldHdvcmtDYWNoZUNvZGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlQ29kZXJzLmgJKHJldmlzaW9uIDI1OTg5OCkK
KysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlQ29kZXJz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAgbmFtZXNwYWNlIFBlcnNpc3RlbmNl
IHsKIAogdGVtcGxhdGU8PiBzdHJ1Y3QgQ29kZXI8V2ViQ29yZTo6SFRUUEhlYWRlck1hcD4gewog
ICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiwgY29uc3QgV2ViQ29yZTo6SFRUUEhlYWRl
ck1hcCYpOwotICAgIHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVyJiwgV2ViQ29yZTo6SFRUUEhl
YWRlck1hcCYpOworICAgIHN0YXRpYyBPcHRpb25hbDxXZWJDb3JlOjpIVFRQSGVhZGVyTWFwPiBk
ZWNvZGUoRGVjb2RlciYpOwogfTsKIAogfQpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVFbnRyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVFbnRyeS5jcHAJKHJldmlzaW9u
IDI1OTg5OCkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0Nh
Y2hlRW50cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTIsMzEgKzExMiw0MSBAQCBzdGQ6OnVu
aXF1ZV9wdHI8RW50cnk+IEVudHJ5OjpkZWNvZGVTdG9yCiAgICAgYXV0byBlbnRyeSA9IG1ha2VV
bmlxdWU8RW50cnk+KHN0b3JhZ2VFbnRyeSk7CiAKICAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNv
ZGVyIGRlY29kZXIoc3RvcmFnZUVudHJ5LmhlYWRlci5kYXRhKCksIHN0b3JhZ2VFbnRyeS5oZWFk
ZXIuc2l6ZSgpKTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGVudHJ5LT5tX3Jlc3BvbnNlKSkK
KyAgICBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlOworICAgIGlmICghV2ViQ29y
ZTo6UmVzb3VyY2VSZXNwb25zZTo6ZGVjb2RlKGRlY29kZXIsIHJlc3BvbnNlKSkKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgZW50cnktPm1fcmVzcG9uc2UgPSBXVEZNb3ZlKHJlc3BvbnNl
KTsKICAgICBlbnRyeS0+bV9yZXNwb25zZS5zZXRTb3VyY2UoV2ViQ29yZTo6UmVzb3VyY2VSZXNw
b25zZTo6U291cmNlOjpEaXNrQ2FjaGUpOwogCi0gICAgYm9vbCBoYXNWYXJ5aW5nUmVxdWVzdEhl
YWRlcnM7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShoYXNWYXJ5aW5nUmVxdWVzdEhlYWRlcnMp
KQorICAgIE9wdGlvbmFsPGJvb2w+IGhhc1ZhcnlpbmdSZXF1ZXN0SGVhZGVyczsKKyAgICBkZWNv
ZGVyID4+IGhhc1ZhcnlpbmdSZXF1ZXN0SGVhZGVyczsKKyAgICBpZiAoIWhhc1ZhcnlpbmdSZXF1
ZXN0SGVhZGVycykKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBpZiAoaGFzVmFyeWlu
Z1JlcXVlc3RIZWFkZXJzKSB7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoZW50cnktPm1f
dmFyeWluZ1JlcXVlc3RIZWFkZXJzKSkKKyAgICBpZiAoKmhhc1ZhcnlpbmdSZXF1ZXN0SGVhZGVy
cykgeworICAgICAgICBPcHRpb25hbDxWZWN0b3I8c3RkOjpwYWlyPFN0cmluZywgU3RyaW5nPj4+
IHZhcnlpbmdSZXF1ZXN0SGVhZGVyczsKKyAgICAgICAgZGVjb2RlciA+PiB2YXJ5aW5nUmVxdWVz
dEhlYWRlcnM7CisgICAgICAgIGlmICghdmFyeWluZ1JlcXVlc3RIZWFkZXJzKQogICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIGVudHJ5LT5tX3ZhcnlpbmdSZXF1ZXN0SGVhZGVy
cyA9IFdURk1vdmUoKnZhcnlpbmdSZXF1ZXN0SGVhZGVycyk7CiAgICAgfQogCi0gICAgYm9vbCBp
c1JlZGlyZWN0OwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaXNSZWRpcmVjdCkpCisgICAgT3B0
aW9uYWw8Ym9vbD4gaXNSZWRpcmVjdDsKKyAgICBkZWNvZGVyID4+IGlzUmVkaXJlY3Q7CisgICAg
aWYgKCFpc1JlZGlyZWN0KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGlmIChpc1Jl
ZGlyZWN0KSB7CisgICAgaWYgKCppc1JlZGlyZWN0KSB7CiAgICAgICAgIGVudHJ5LT5tX3JlZGly
ZWN0UmVxdWVzdC5lbXBsYWNlKCk7CiAgICAgICAgIGlmICghZW50cnktPm1fcmVkaXJlY3RSZXF1
ZXN0LT5kZWNvZGVXaXRob3V0UGxhdGZvcm1EYXRhKGRlY29kZXIpKQogICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgfQogCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShlbnRyeS0+bV9t
YXhBZ2VDYXApKQorICAgIE9wdGlvbmFsPE9wdGlvbmFsPFNlY29uZHM+PiBtYXhBZ2VDYXA7Cisg
ICAgZGVjb2RlciA+PiBtYXhBZ2VDYXA7CisgICAgaWYgKCFtYXhBZ2VDYXApCiAgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIGVudHJ5LT5tX21heEFnZUNhcCA9IFdURk1vdmUoKm1heEFnZUNh
cCk7CiAKICAgICBpZiAoIWRlY29kZXIudmVyaWZ5Q2hlY2tzdW0oKSkgewogICAgICAgICBMT0co
TmV0d29ya0NhY2hlLCAiKE5ldHdvcmtQcm9jZXNzKSBjaGVja3N1bSB2ZXJpZmljYXRpb24gZmFp
bHVyZVxuIik7CkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdv
cmtDYWNoZUtleS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9jYWNoZS9OZXR3b3JrQ2FjaGVLZXkuY3BwCShyZXZpc2lvbiAyNTk4OTgpCisrKyBTb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUtleS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE3Myw5ICsxNzMsNDcgQEAgdm9pZCBLZXk6OmVuY29kZShXVEY6OlBlcnNpc3Rl
bmNlOjpFbmNvZAogICAgIGVuY29kZXIgPDwgbV9wYXJ0aXRpb25IYXNoOwogfQogCi1ib29sIEtl
eTo6ZGVjb2RlKFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXImIGRlY29kZXIsIEtleSYga2V5KQor
T3B0aW9uYWw8S2V5PiBLZXk6OmRlY29kZShXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyJiBkZWNv
ZGVyKQogewotICAgIHJldHVybiBkZWNvZGVyLmRlY29kZShrZXkubV9wYXJ0aXRpb24pICYmIGRl
Y29kZXIuZGVjb2RlKGtleS5tX3R5cGUpICYmIGRlY29kZXIuZGVjb2RlKGtleS5tX2lkZW50aWZp
ZXIpICYmIGRlY29kZXIuZGVjb2RlKGtleS5tX3JhbmdlKSAmJiBkZWNvZGVyLmRlY29kZShrZXku
bV9oYXNoKSAmJiBkZWNvZGVyLmRlY29kZShrZXkubV9wYXJ0aXRpb25IYXNoKTsKKyAgICBLZXkg
a2V5OworICAgIAorICAgIE9wdGlvbmFsPFN0cmluZz4gcGFydGl0aW9uOworICAgIGRlY29kZXIg
Pj4gcGFydGl0aW9uOworICAgIGlmICghcGFydGl0aW9uKQorICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OworICAgIGtleS5tX3BhcnRpdGlvbiA9IFdURk1vdmUoKnBhcnRpdGlvbik7CisKKyAg
ICBPcHRpb25hbDxTdHJpbmc+IHR5cGU7CisgICAgZGVjb2RlciA+PiB0eXBlOworICAgIGlmICgh
dHlwZSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBrZXkubV90eXBlID0gV1RG
TW92ZSgqdHlwZSk7CisKKyAgICBPcHRpb25hbDxTdHJpbmc+IGlkZW50aWZpZXI7CisgICAgZGVj
b2RlciA+PiBpZGVudGlmaWVyOworICAgIGlmICghaWRlbnRpZmllcikKKyAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKKyAgICBrZXkubV9pZGVudGlmaWVyID0gV1RGTW92ZSgqaWRlbnRpZmll
cik7CisKKyAgICBPcHRpb25hbDxTdHJpbmc+IHJhbmdlOworICAgIGRlY29kZXIgPj4gcmFuZ2U7
CisgICAgaWYgKCFyYW5nZSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBrZXku
bV9yYW5nZSA9IFdURk1vdmUoKnJhbmdlKTsKKworICAgIE9wdGlvbmFsPEhhc2hUeXBlPiBoYXNo
OworICAgIGRlY29kZXIgPj4gaGFzaDsKKyAgICBpZiAoIWhhc2gpCisgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CisgICAga2V5Lm1faGFzaCA9IFdURk1vdmUoKmhhc2gpOworCisgICAgT3B0
aW9uYWw8SGFzaFR5cGU+IHBhcnRpdGlvbkhhc2g7CisgICAgZGVjb2RlciA+PiBwYXJ0aXRpb25I
YXNoOworICAgIGlmICghcGFydGl0aW9uSGFzaCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKKyAgICBrZXkubV9wYXJ0aXRpb25IYXNoID0gV1RGTW92ZSgqcGFydGl0aW9uSGFzaCk7CisK
KyAgICByZXR1cm4geyBXVEZNb3ZlKGtleSkgfTsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVLZXkuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUtleS5oCShyZXZp
c2lvbiAyNTk4OTgpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdv
cmtDYWNoZUtleS5oCSh3b3JraW5nIGNvcHkpCkBAIC04Myw3ICs4Myw3IEBAIHB1YmxpYzoKICAg
ICBTdHJpbmcgcGFydGl0aW9uSGFzaEFzU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gaGFzaEFzU3Ry
aW5nKG1fcGFydGl0aW9uSGFzaCk7IH0KIAogICAgIHZvaWQgZW5jb2RlKFdURjo6UGVyc2lzdGVu
Y2U6OkVuY29kZXImKSBjb25zdDsKLSAgICBzdGF0aWMgYm9vbCBkZWNvZGUoV1RGOjpQZXJzaXN0
ZW5jZTo6RGVjb2RlciYsIEtleSYpOworICAgIHN0YXRpYyBPcHRpb25hbDxLZXk+IGRlY29kZShX
VEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyJik7CiAKICAgICBib29sIG9wZXJhdG9yPT0oY29uc3Qg
S2V5JikgY29uc3Q7CiAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEtleSYgb3RoZXIpIGNvbnN0
IHsgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5jcHAJ
KHJldmlzaW9uIDI1OTg5OCkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUv
TmV0d29ya0NhY2hlU3RvcmFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzOCwyNCArNDM4LDU4
IEBAIHN0YXRpYyBib29sIGRlY29kZVJlY29yZE1ldGFEYXRhKFJlY29yZE0KICAgICBib29sIHN1
Y2Nlc3MgPSBmYWxzZTsKICAgICBmaWxlRGF0YS5hcHBseShbJm1ldGFEYXRhLCAmc3VjY2Vzc10o
Y29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpIHsKICAgICAgICAgV1RGOjpQZXJzaXN0
ZW5jZTo6RGVjb2RlciBkZWNvZGVyKGRhdGEsIHNpemUpOwotICAgICAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlKG1ldGFEYXRhLmNhY2hlU3RvcmFnZVZlcnNpb24pKQorICAgICAgICAKKyAgICAgICAg
T3B0aW9uYWw8dW5zaWduZWQ+IGNhY2hlU3RvcmFnZVZlcnNpb247CisgICAgICAgIGRlY29kZXIg
Pj4gY2FjaGVTdG9yYWdlVmVyc2lvbjsKKyAgICAgICAgaWYgKCFjYWNoZVN0b3JhZ2VWZXJzaW9u
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KG1ldGFEYXRhLmtleSkpCisgICAgICAgIG1ldGFEYXRhLmNhY2hlU3RvcmFnZVZlcnNpb24gPSBX
VEZNb3ZlKCpjYWNoZVN0b3JhZ2VWZXJzaW9uKTsKKworICAgICAgICBPcHRpb25hbDxLZXk+IGtl
eTsKKyAgICAgICAgZGVjb2RlciA+PiBrZXk7CisgICAgICAgIGlmICgha2V5KQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKG1ldGFEYXRhLnRp
bWVTdGFtcCkpCisgICAgICAgIG1ldGFEYXRhLmtleSA9IFdURk1vdmUoKmtleSk7CisKKyAgICAg
ICAgT3B0aW9uYWw8V2FsbFRpbWU+IHRpbWVTdGFtcDsKKyAgICAgICAgZGVjb2RlciA+PiB0aW1l
U3RhbXA7CisgICAgICAgIGlmICghdGltZVN0YW1wKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKG1ldGFEYXRhLmhlYWRlckhhc2gpKQorICAg
ICAgICBtZXRhRGF0YS50aW1lU3RhbXAgPSBXVEZNb3ZlKCp0aW1lU3RhbXApOworCisgICAgICAg
IE9wdGlvbmFsPFNIQTE6OkRpZ2VzdD4gaGVhZGVySGFzaDsKKyAgICAgICAgZGVjb2RlciA+PiBo
ZWFkZXJIYXNoOworICAgICAgICBpZiAoIWhlYWRlckhhc2gpCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUobWV0YURhdGEuaGVhZGVyU2l6ZSkp
CisgICAgICAgIG1ldGFEYXRhLmhlYWRlckhhc2ggPSBXVEZNb3ZlKCpoZWFkZXJIYXNoKTsKKwor
ICAgICAgICBPcHRpb25hbDx1aW50NjRfdD4gaGVhZGVyU2l6ZTsKKyAgICAgICAgZGVjb2RlciA+
PiBoZWFkZXJTaXplOworICAgICAgICBpZiAoIWhlYWRlclNpemUpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUobWV0YURhdGEuYm9keUhhc2gp
KQorICAgICAgICBtZXRhRGF0YS5oZWFkZXJTaXplID0gV1RGTW92ZSgqaGVhZGVyU2l6ZSk7CisK
KyAgICAgICAgT3B0aW9uYWw8U0hBMTo6RGlnZXN0PiBib2R5SGFzaDsKKyAgICAgICAgZGVjb2Rl
ciA+PiBib2R5SGFzaDsKKyAgICAgICAgaWYgKCFib2R5SGFzaCkKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShtZXRhRGF0YS5ib2R5U2l6ZSkp
CisgICAgICAgIG1ldGFEYXRhLmJvZHlIYXNoID0gV1RGTW92ZSgqYm9keUhhc2gpOworCisgICAg
ICAgIE9wdGlvbmFsPHVpbnQ2NF90PiBib2R5U2l6ZTsKKyAgICAgICAgZGVjb2RlciA+PiBib2R5
U2l6ZTsKKyAgICAgICAgaWYgKCFib2R5U2l6ZSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShtZXRhRGF0YS5pc0JvZHlJbmxpbmUpKQorICAg
ICAgICBtZXRhRGF0YS5ib2R5U2l6ZSA9IFdURk1vdmUoKmJvZHlTaXplKTsKKworICAgICAgICBP
cHRpb25hbDxib29sPiBpc0JvZHlJbmxpbmU7CisgICAgICAgIGRlY29kZXIgPj4gaXNCb2R5SW5s
aW5lOworICAgICAgICBpZiAoIWlzQm9keUlubGluZSkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgbWV0YURhdGEuaXNCb2R5SW5saW5lID0gV1RGTW92ZSgqaXNCb2R5SW5saW5l
KTsKKwogICAgICAgICBpZiAoIWRlY29kZXIudmVyaWZ5Q2hlY2tzdW0oKSkKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKwogICAgICAgICBtZXRhRGF0YS5oZWFkZXJPZmZzZXQgPSBkZWNvZGVy
LmN1cnJlbnRPZmZzZXQoKTsKICAgICAgICAgc3VjY2VzcyA9IHRydWU7CiAgICAgICAgIHJldHVy
biBmYWxzZTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29y
a0NhY2hlU3VicmVzb3VyY2VzRW50cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3VicmVzb3VyY2VzRW50cnkuY3BwCShy
ZXZpc2lvbiAyNTk4OTgpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05l
dHdvcmtDYWNoZVN1YnJlc291cmNlc0VudHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksMzcg
KzQ5LDY1IEBAIHZvaWQgU3VicmVzb3VyY2VJbmZvOjplbmNvZGUoV1RGOjpQZXJzaXMKICAgICBl
bmNvZGVyIDw8IG1faXNTYW1lU2l0ZTsKICAgICBlbmNvZGVyIDw8IG1fZmlyc3RQYXJ0eUZvckNv
b2tpZXM7CiAgICAgZW5jb2RlciA8PCBtX3JlcXVlc3RIZWFkZXJzOwotICAgIGVuY29kZXIuZW5j
b2RlRW51bShtX3ByaW9yaXR5KTsKKyAgICBlbmNvZGVyIDw8IG1fcHJpb3JpdHk7CiB9CiAKLWJv
b2wgU3VicmVzb3VyY2VJbmZvOjpkZWNvZGUoV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciYgZGVj
b2RlciwgU3VicmVzb3VyY2VJbmZvJiBpbmZvKQorT3B0aW9uYWw8U3VicmVzb3VyY2VJbmZvPiBT
dWJyZXNvdXJjZUluZm86OmRlY29kZShXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyJiBkZWNvZGVy
KQogewotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaW5mby5tX2tleSkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGluZm8ubV9sYXN0U2VlbikpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGluZm8ubV9maXJzdFNl
ZW4pKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShpbmZvLm1faXNUcmFuc2llbnQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAg
aWYgKGluZm8ubV9pc1RyYW5zaWVudCkKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgU3VicmVz
b3VyY2VJbmZvIGluZm87CiAKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGluZm8ubV9pc1NhbWVT
aXRlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIE9wdGlvbmFsPEtleT4ga2V5OworICAg
IGRlY29kZXIgPj4ga2V5OworICAgIGlmICgha2V5KQorICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OworICAgIGluZm8ubV9rZXkgPSBXVEZNb3ZlKCprZXkpOworCisgICAgT3B0aW9uYWw8V2Fs
bFRpbWU+IGxhc3RTZWVuOworICAgIGRlY29kZXIgPj4gbGFzdFNlZW47CisgICAgaWYgKCFsYXN0
U2VlbikKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBpbmZvLm1fbGFzdFNlZW4g
PSBXVEZNb3ZlKCpsYXN0U2Vlbik7CisKKyAgICBPcHRpb25hbDxXYWxsVGltZT4gZmlyc3RTZWVu
OworICAgIGRlY29kZXIgPj4gZmlyc3RTZWVuOworICAgIGlmICghZmlyc3RTZWVuKQorICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIGluZm8ubV9maXJzdFNlZW4gPSBXVEZNb3ZlKCpm
aXJzdFNlZW4pOworCisgICAgT3B0aW9uYWw8Ym9vbD4gaXNUcmFuc2llbnQ7CisgICAgZGVjb2Rl
ciA+PiBpc1RyYW5zaWVudDsKKyAgICBpZiAoIWlzVHJhbnNpZW50KQorICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OworICAgIGluZm8ubV9pc1RyYW5zaWVudCA9IFdURk1vdmUoKmlzVHJhbnNp
ZW50KTsKIAotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaW5mby5tX2ZpcnN0UGFydHlGb3JDb29r
aWVzKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShp
bmZvLm1fcmVxdWVzdEhlYWRlcnMpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGlu
Zm8ubV9pc1RyYW5zaWVudCkKKyAgICAgICAgcmV0dXJuIHsgV1RGTW92ZShpbmZvKSB9OwogCi0g
ICAgaWYgKCFkZWNvZGVyLmRlY29kZUVudW0oaW5mby5tX3ByaW9yaXR5KSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIE9wdGlvbmFsPGJvb2w+IGlzU2FtZVNpdGU7CisgICAgZGVjb2RlciA+
PiBpc1NhbWVTaXRlOworICAgIGlmICghaXNTYW1lU2l0ZSkKKyAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKKyAgICBpbmZvLm1faXNTYW1lU2l0ZSA9IFdURk1vdmUoKmlzU2FtZVNpdGUpOwor
CisgICAgT3B0aW9uYWw8VVJMPiBmaXJzdFBhcnR5Rm9yQ29va2llczsKKyAgICBkZWNvZGVyID4+
IGZpcnN0UGFydHlGb3JDb29raWVzOworICAgIGlmICghZmlyc3RQYXJ0eUZvckNvb2tpZXMpCisg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgaW5mby5tX2ZpcnN0UGFydHlGb3JDb29r
aWVzID0gV1RGTW92ZSgqZmlyc3RQYXJ0eUZvckNvb2tpZXMpOworCisgICAgT3B0aW9uYWw8V2Vi
Q29yZTo6SFRUUEhlYWRlck1hcD4gcmVxdWVzdEhlYWRlcnM7CisgICAgZGVjb2RlciA+PiByZXF1
ZXN0SGVhZGVyczsKKyAgICBpZiAoIXJlcXVlc3RIZWFkZXJzKQorICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OworICAgIGluZm8ubV9yZXF1ZXN0SGVhZGVycyA9IFdURk1vdmUoKnJlcXVlc3RI
ZWFkZXJzKTsKKworICAgIE9wdGlvbmFsPFdlYkNvcmU6OlJlc291cmNlTG9hZFByaW9yaXR5PiBw
cmlvcml0eTsKKyAgICBkZWNvZGVyID4+IHByaW9yaXR5OworICAgIGlmICghcHJpb3JpdHkpCisg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgaW5mby5tX3ByaW9yaXR5ID0gV1RGTW92
ZSgqcHJpb3JpdHkpOwogICAgIAotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiB7IFdURk1v
dmUoaW5mbykgfTsKIH0KIAogYm9vbCBTdWJyZXNvdXJjZUluZm86OmlzRmlyc3RQYXJ0eSgpIGNv
bnN0CkBAIC0xMDMsOCArMTMxLDExIEBAIHN0ZDo6dW5pcXVlX3B0cjxTdWJyZXNvdXJjZXNFbnRy
eT4gU3VicmUKICAgICBhdXRvIGVudHJ5ID0gbWFrZVVuaXF1ZTxTdWJyZXNvdXJjZXNFbnRyeT4o
c3RvcmFnZUVudHJ5KTsKIAogICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgZGVjb2Rlcihz
dG9yYWdlRW50cnkuaGVhZGVyLmRhdGEoKSwgc3RvcmFnZUVudHJ5LmhlYWRlci5zaXplKCkpOwot
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUoZW50cnktPm1fc3VicmVzb3VyY2VzKSkKKyAgICBPcHRp
b25hbDxWZWN0b3I8U3VicmVzb3VyY2VJbmZvPj4gc3VicmVzb3VyY2VzOworICAgIGRlY29kZXIg
Pj4gc3VicmVzb3VyY2VzOworICAgIGlmICghc3VicmVzb3VyY2VzKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICBlbnRyeS0+bV9zdWJyZXNvdXJjZXMgPSBXVEZNb3ZlKCpzdWJyZXNvdXJj
ZXMpOwogCiAgICAgaWYgKCFkZWNvZGVyLnZlcmlmeUNoZWNrc3VtKCkpIHsKICAgICAgICAgTE9H
KE5ldHdvcmtDYWNoZSwgIihOZXR3b3JrUHJvY2VzcykgY2hlY2tzdW0gdmVyaWZpY2F0aW9uIGZh
aWx1cmVcbiIpOwpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3
b3JrQ2FjaGVTdWJyZXNvdXJjZXNFbnRyeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3VicmVzb3VyY2VzRW50cnkuaAkocmV2
aXNpb24gMjU5ODk4KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3
b3JrQ2FjaGVTdWJyZXNvdXJjZXNFbnRyeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3
IEBAIGNsYXNzIFN1YnJlc291cmNlSW5mbyB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CiBwdWJsaWM6CiAgICAgdm9pZCBlbmNvZGUoV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2RlciYpIGNv
bnN0OwotICAgIHN0YXRpYyBib29sIGRlY29kZShXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyJiwg
U3VicmVzb3VyY2VJbmZvJik7CisgICAgc3RhdGljIE9wdGlvbmFsPFN1YnJlc291cmNlSW5mbz4g
ZGVjb2RlKFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXImKTsKIAogICAgIFN1YnJlc291cmNlSW5m
bygpID0gZGVmYXVsdDsKICAgICBTdWJyZXNvdXJjZUluZm8oY29uc3QgS2V5JiwgY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgU3VicmVzb3VyY2VJbmZvKiBwcmV2aW91c0lu
Zm8pOwpJbmRleDogU291cmNlL1dlYktpdC9TaGFyZWQvVXNlckRhdGEuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1VzZXJEYXRhLmNwcAkocmV2aXNpb24gMjU5ODk4KQor
KysgU291cmNlL1dlYktpdC9TaGFyZWQvVXNlckRhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NjksMTAgKzM2OSwxMSBAQCBib29sIFVzZXJEYXRhOjpkZWNvZGUoSVBDOjpEZWNvZGVyJiBkZWNv
CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBBUEk6Ok9iamVjdDo6VHlwZTo6Q2VydGlmaWNh
dGVJbmZvOiB7Ci0gICAgICAgIFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyBjZXJ0aWZpY2F0ZUlu
Zm87Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoY2VydGlmaWNhdGVJbmZvKSkKKyAgICAg
ICAgT3B0aW9uYWw8V2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvPiBjZXJ0aWZpY2F0ZUluZm87Cisg
ICAgICAgIGRlY29kZXIgPj4gY2VydGlmaWNhdGVJbmZvOworICAgICAgICBpZiAoIWNlcnRpZmlj
YXRlSW5mbykKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmVzdWx0ID0gV2Vi
Q2VydGlmaWNhdGVJbmZvOjpjcmVhdGUoY2VydGlmaWNhdGVJbmZvKTsKKyAgICAgICAgcmVzdWx0
ID0gV2ViQ2VydGlmaWNhdGVJbmZvOjpjcmVhdGUoKmNlcnRpZmljYXRlSW5mbyk7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUNv
bnRlbnRSdWxlTGlzdFN0b3JlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQVBJQ29udGVudFJ1bGVMaXN0U3RvcmUuY3BwCShyZXZpc2lvbiAyNTk4OTgpCisr
KyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJQ29udGVudFJ1bGVMaXN0U3RvcmUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNzksMjAgKzE3OSw0OSBAQCBzdGF0aWMgT3B0aW9uYWw8Q29u
dGVudFJ1bGVMaXN0TWV0YURhdGE+CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAg
ICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyKGRhdGEsIHNpemUpOwotICAgICAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKG1ldGFEYXRhLnZlcnNpb24pKQorICAgICAgICAKKyAgICAg
ICAgT3B0aW9uYWw8dWludDMyX3Q+IHZlcnNpb247CisgICAgICAgIGRlY29kZXIgPj4gdmVyc2lv
bjsKKyAgICAgICAgaWYgKCF2ZXJzaW9uKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKG1ldGFEYXRhLnNvdXJjZVNpemUpKQorICAgICAgICBt
ZXRhRGF0YS52ZXJzaW9uID0gV1RGTW92ZSgqdmVyc2lvbik7CisKKyAgICAgICAgT3B0aW9uYWw8
dWludDY0X3Q+IHNvdXJjZVNpemU7CisgICAgICAgIGRlY29kZXIgPj4gc291cmNlU2l6ZTsKKyAg
ICAgICAgaWYgKCFzb3VyY2VTaXplKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKG1ldGFEYXRhLmFjdGlvbnNTaXplKSkKKyAgICAgICAgbWV0
YURhdGEuc291cmNlU2l6ZSA9IFdURk1vdmUoKnNvdXJjZVNpemUpOworCisgICAgICAgIE9wdGlv
bmFsPHVpbnQ2NF90PiBhY3Rpb25zU2l6ZTsKKyAgICAgICAgZGVjb2RlciA+PiBhY3Rpb25zU2l6
ZTsKKyAgICAgICAgaWYgKCFhY3Rpb25zU2l6ZSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShtZXRhRGF0YS5maWx0ZXJzV2l0aG91dENvbmRp
dGlvbnNCeXRlY29kZVNpemUpKQorICAgICAgICBtZXRhRGF0YS5hY3Rpb25zU2l6ZSA9IFdURk1v
dmUoKmFjdGlvbnNTaXplKTsKKworICAgICAgICBPcHRpb25hbDx1aW50NjRfdD4gZmlsdGVyc1dp
dGhvdXRDb25kaXRpb25zQnl0ZWNvZGVTaXplOworICAgICAgICBkZWNvZGVyID4+IGZpbHRlcnNX
aXRob3V0Q29uZGl0aW9uc0J5dGVjb2RlU2l6ZTsKKyAgICAgICAgaWYgKCFmaWx0ZXJzV2l0aG91
dENvbmRpdGlvbnNCeXRlY29kZVNpemUpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUobWV0YURhdGEuZmlsdGVyc1dpdGhDb25kaXRpb25zQnl0
ZWNvZGVTaXplKSkKKyAgICAgICAgbWV0YURhdGEuZmlsdGVyc1dpdGhvdXRDb25kaXRpb25zQnl0
ZWNvZGVTaXplID0gV1RGTW92ZSgqZmlsdGVyc1dpdGhvdXRDb25kaXRpb25zQnl0ZWNvZGVTaXpl
KTsKKworICAgICAgICBPcHRpb25hbDx1aW50NjRfdD4gZmlsdGVyc1dpdGhDb25kaXRpb25zQnl0
ZWNvZGVTaXplOworICAgICAgICBkZWNvZGVyID4+IGZpbHRlcnNXaXRoQ29uZGl0aW9uc0J5dGVj
b2RlU2l6ZTsKKyAgICAgICAgaWYgKCFmaWx0ZXJzV2l0aENvbmRpdGlvbnNCeXRlY29kZVNpemUp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUo
bWV0YURhdGEuY29uZGl0aW9uZWRGaWx0ZXJzQnl0ZWNvZGVTaXplKSkKKyAgICAgICAgbWV0YURh
dGEuZmlsdGVyc1dpdGhDb25kaXRpb25zQnl0ZWNvZGVTaXplID0gV1RGTW92ZSgqZmlsdGVyc1dp
dGhDb25kaXRpb25zQnl0ZWNvZGVTaXplKTsKKworICAgICAgICBPcHRpb25hbDx1aW50NjRfdD4g
Y29uZGl0aW9uZWRGaWx0ZXJzQnl0ZWNvZGVTaXplOworICAgICAgICBkZWNvZGVyID4+IGNvbmRp
dGlvbmVkRmlsdGVyc0J5dGVjb2RlU2l6ZTsKKyAgICAgICAgaWYgKCFjb25kaXRpb25lZEZpbHRl
cnNCeXRlY29kZVNpemUpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUobWV0YURhdGEuY29uZGl0aW9uc0FwcGx5T25seVRvRG9tYWluKSkKKyAg
ICAgICAgbWV0YURhdGEuY29uZGl0aW9uZWRGaWx0ZXJzQnl0ZWNvZGVTaXplID0gV1RGTW92ZSgq
Y29uZGl0aW9uZWRGaWx0ZXJzQnl0ZWNvZGVTaXplKTsKKworICAgICAgICBPcHRpb25hbDx1aW50
MzJfdD4gY29uZGl0aW9uc0FwcGx5T25seVRvRG9tYWluOworICAgICAgICBkZWNvZGVyID4+IGNv
bmRpdGlvbnNBcHBseU9ubHlUb0RvbWFpbjsKKyAgICAgICAgaWYgKCFjb25kaXRpb25zQXBwbHlP
bmx5VG9Eb21haW4pCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIG1ldGFEYXRh
LmNvbmRpdGlvbnNBcHBseU9ubHlUb0RvbWFpbiA9IFdURk1vdmUoKmNvbmRpdGlvbnNBcHBseU9u
bHlUb0RvbWFpbik7CisKICAgICAgICAgc3VjY2VzcyA9IHRydWU7CiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9KTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>