<?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>157596</bug_id>
          
          <creation_ts>2016-05-11 16:47:35 -0700</creation_ts>
          <short_desc>Remove all uses of PassRefPtr in WTF</short_desc>
          <delta_ts>2016-06-07 18:29:56 -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="Keith Rollin">krollin</reporter>
          <assigned_to name="Keith Rollin">krollin</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kangil.han</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1192150</commentid>
    <comment_count>0</comment_count>
    <who name="Keith Rollin">krollin</who>
    <bug_when>2016-05-11 16:47:35 -0700</bug_when>
    <thetext>Remove all uses of PassRefPtr in WTF.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1192152</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2016-05-11 16:53:17 -0700</bug_when>
    <thetext>&lt;rdar://problem/26234391&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1196428</commentid>
    <comment_count>2</comment_count>
      <attachid>279796</attachid>
    <who name="Keith Rollin">krollin</who>
    <bug_when>2016-05-25 13:01:41 -0700</bug_when>
    <thetext>Created attachment 279796
Patch

This removes most uses of PassRefPtr in WTF, but leaves some behind for compatibility with modules that have not yet been converted.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1196430</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-05-25 13:04:01 -0700</bug_when>
    <thetext>Attachment 279796 did not pass style-queue:


ERROR: Source/WTF/wtf/Functional.h:701:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/Functional.h:706:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 2 in 24 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1196444</commentid>
    <comment_count>4</comment_count>
      <attachid>279796</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-05-25 13:42:28 -0700</bug_when>
    <thetext>Comment on attachment 279796
Patch

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

&gt; Source/JavaScriptCore/runtime/JSString.cpp:255
&gt;          if (RefPtr&lt;StringImpl&gt; newImpl = StringImpl::tryCreateUninitialized(m_length, buffer)) {

Could use auto

&gt; Source/JavaScriptCore/runtime/JSString.cpp:269
&gt;      if (RefPtr&lt;StringImpl&gt; newImpl = StringImpl::tryCreateUninitialized(m_length, buffer)) {

Could use auto

&gt; Source/JavaScriptCore/runtime/JSString.h:96
&gt; +        , m_value(adoptRef(*value.leakRef()))

How is this better? Why is JSString still taking a PassRefPtr in? If it is too much refactoring to update this constructor declaration then I think we should not make this change either.
Note that based on the call sites, it looks like this constructor should eventually take a Ref&lt;StringImpl&gt;&amp;&amp;

&gt; Source/JavaScriptCore/runtime/StringConstructor.cpp:78
&gt; +    Ref&lt;StringImpl&gt; impl = StringImpl::createUninitialized(length, buf);

should use auto

&gt; Source/JavaScriptCore/runtime/StringPrototype.cpp:-327
&gt; -        return jsString(exec, impl.release());

Could use auto for impl earlier in this function.

&gt; Source/JavaScriptCore/runtime/StringPrototype.cpp:345
&gt; +    return jsString(exec, WTFMove(impl));

Could use auto for impl earlier in this function.

&gt; Source/JavaScriptCore/runtime/StringPrototype.cpp:-400
&gt; -        return jsString(exec, impl.release());

Could use auto for impl earlier in this function.

&gt; Source/JavaScriptCore/runtime/StringPrototype.cpp:431
&gt; +    return jsString(exec, WTFMove(impl));

Could use auto for impl earlier in this function.

&gt; Source/JavaScriptCore/runtime/StringPrototype.cpp:765
&gt; +    return jsString(exec, WTFMove(impl));

Could use auto for impl earlier in this function.

&gt; Source/JavaScriptCore/runtime/StringPrototype.cpp:-778
&gt; -    return jsString(&amp;exec, impl.release());

Could use auto for impl earlier in this function.

&gt; Source/JavaScriptCore/runtime/StringPrototype.cpp:1580
&gt; +        RefPtr&lt;StringImpl&gt; impl = StringImpl::tryCreateUninitialized(bufferSize, buffer);

Should use auto

&gt; Source/JavaScriptCore/runtime/StringPrototype.cpp:1649
&gt; +    RefPtr&lt;StringImpl&gt; impl = StringImpl::tryCreateUninitialized(bufferSize, buffer);

should use auto

&gt; Source/JavaScriptCore/runtime/StringPrototype.cpp:1895
&gt; +    return jsString(exec, WTFMove(impl));

Could use auto for impl earlier in this function.

&gt; Source/WTF/wtf/Functional.h:27
&gt;  #define WTF_Functional_h

This whole header is unused and about to get removed by Anders so I don&apos;t think we should modify it in this patch.

&gt; Source/WTF/wtf/ParallelJobsGeneric.h:69
&gt; +        static RefPtr&lt;ThreadPrivate&gt; create()

Should return a Ref&lt;&gt;, not a RefPtr&lt;&gt;.

&gt; Source/WTF/wtf/text/StringImpl.cpp:207
&gt; +inline Ref&lt;StringImpl&gt; StringImpl::reallocateInternal(RefPtr&lt;StringImpl&gt;&amp;&amp; originalString, unsigned length, CharType*&amp; data)

Looks like this should take a Ref&lt;&gt;&amp;&amp; in, not a RefPtr&lt;&gt;&amp;&amp;.

&gt; Source/WTF/wtf/text/StringImpl.cpp:228
&gt; +Ref&lt;StringImpl&gt; StringImpl::reallocate(RefPtr&lt;StringImpl&gt;&amp;&amp; originalString, unsigned length, LChar*&amp; data)

Looks like this should take a Ref&lt;&gt;&amp;&amp; in, not a RefPtr&lt;&gt;&amp;&amp;.

&gt; Source/WTF/wtf/text/StringImpl.cpp:235
&gt; +Ref&lt;StringImpl&gt; StringImpl::reallocate(RefPtr&lt;StringImpl&gt;&amp;&amp; originalString, unsigned length, UChar*&amp; data)

Looks like this should take a Ref&lt;&gt;&amp;&amp; in, not a RefPtr&lt;&gt;&amp;&amp;.

&gt; Source/WTF/wtf/text/StringImpl.cpp:296
&gt; +Ref&lt;SymbolImpl&gt; StringImpl::createSymbol(StringImpl* rep)

Looks like this should take a StringImpl&amp; in as it cannot be null.

&gt; Source/WTF/wtf/text/StringImpl.h:268
&gt; +    StringImpl(const LChar* characters, unsigned length, StringImpl* base)

Should probably take a Ref&lt;&gt;&amp;&amp; in? Looks like base cannot be null, also, we do transfer ownership.

&gt; Source/WTF/wtf/text/StringImpl.h:279
&gt; +        substringBuffer() = &amp;Ref&lt;StringImpl&gt;(*base).leakRef();

:S

&gt; Source/WTF/wtf/text/StringImpl.h:285
&gt; +    StringImpl(const UChar* characters, unsigned length, StringImpl* base)

ditto.

&gt; Source/WTF/wtf/text/StringImpl.h:296
&gt; +        substringBuffer() = &amp;Ref&lt;StringImpl&gt;(*base).leakRef();

:S

&gt; Source/WTF/wtf/text/StringImpl.h:303
&gt; +    StringImpl(CreateSymbolTag, const LChar* characters, unsigned length, StringImpl* base)

ditto, I&apos;ll stop commenting on these in this file.

&gt; Source/WTF/wtf/text/StringImpl.h:313
&gt; +        substringBuffer() = &amp;Ref&lt;StringImpl&gt;(*base).leakRef();

:S

&gt; Tools/TestWebKitAPI/Tests/WTF/Functional.cpp:154
&gt;  

This whole file is about to get dropped.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1196578</commentid>
    <comment_count>5</comment_count>
    <who name="Keith Rollin">krollin</who>
    <bug_when>2016-05-25 17:27:38 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Comment on attachment 279796 [details]

All comments accepted unless otherwise noted below.

&gt; &gt; Source/JavaScriptCore/runtime/JSString.h:96
&gt; &gt; +        , m_value(adoptRef(*value.leakRef()))
&gt; 
&gt; How is this better? Why is JSString still taking a PassRefPtr in? If it is
&gt; too much refactoring to update this constructor declaration then I think we
&gt; should not make this change either.
&gt; Note that based on the call sites, it looks like this constructor should
&gt; eventually take a Ref&lt;StringImpl&gt;&amp;&amp;

This is better because it compiles. :-)  m_value is a String. The previous code was initializing it with a PassRefPtr. I removed that constructor from String, and so had to munge types in order to invoke a constructor that worked.

I think you&apos;re suggesting that JSString should be changed to no longer accept a PassRefPtr? If so, that&apos;s outside the scope of this change. Making such a change would propagate out through JSC and make this patch larger (if not outright huge).

If you&apos;re suggesting that String should continue to have a constructor that takes a PassRefPtr, I&apos;m not sure I agree with that. It&apos;s not apparent to me that we need to keep that constructor for backward compatibility when we can instead make the call sites conform to the lack of the c&apos;tor that takes the PassRefPtr. The result is a clean String interface.

&gt; &gt; Source/WTF/wtf/ParallelJobsGeneric.h:69
&gt; &gt; +        static RefPtr&lt;ThreadPrivate&gt; create()
&gt; 
&gt; Should return a Ref&lt;&gt;, not a RefPtr&lt;&gt;.

The result of this function is stored in containers of type Vector&lt;RefPtr&lt;&gt;&gt; (s_threadPool and m_threads), so I thought it a good idea to keep the types the same and reduce churn, as well as avoid changes to other code that references these containers expecting a RefPtr and not a Ref.

&gt; &gt; Source/WTF/wtf/text/StringImpl.cpp:207
&gt; &gt; +inline Ref&lt;StringImpl&gt; StringImpl::reallocateInternal(RefPtr&lt;StringImpl&gt;&amp;&amp; originalString, unsigned length, CharType*&amp; data)
&gt; 
&gt; Looks like this should take a Ref&lt;&gt;&amp;&amp; in, not a RefPtr&lt;&gt;&amp;&amp;.
&gt; 
&gt; &gt; Source/WTF/wtf/text/StringImpl.cpp:228
&gt; &gt; +Ref&lt;StringImpl&gt; StringImpl::reallocate(RefPtr&lt;StringImpl&gt;&amp;&amp; originalString, unsigned length, LChar*&amp; data)
&gt; 
&gt; Looks like this should take a Ref&lt;&gt;&amp;&amp; in, not a RefPtr&lt;&gt;&amp;&amp;.
&gt; 
&gt; &gt; Source/WTF/wtf/text/StringImpl.cpp:235
&gt; &gt; +Ref&lt;StringImpl&gt; StringImpl::reallocate(RefPtr&lt;StringImpl&gt;&amp;&amp; originalString, unsigned length, UChar*&amp; data)
&gt; 
&gt; Looks like this should take a Ref&lt;&gt;&amp;&amp; in, not a RefPtr&lt;&gt;&amp;&amp;.

I&apos;m not sure. For instance, StringBuilder calls reallocate() passing in the StringImpl in its m_buffer data member. m_buffer is a RefPtr, meaning that its StringImpl can be nullptr, which I don&apos;t believe is OK to put into a Ref&lt;&gt;.

&gt; &gt; Source/WTF/wtf/text/StringImpl.h:268
&gt; &gt; +    StringImpl(const LChar* characters, unsigned length, StringImpl* base)
&gt; 
&gt; Should probably take a Ref&lt;&gt;&amp;&amp; in? Looks like base cannot be null, also, we
&gt; do transfer ownership.
&gt; 
&gt; &gt; Source/WTF/wtf/text/StringImpl.h:279
&gt; &gt; +        substringBuffer() = &amp;Ref&lt;StringImpl&gt;(*base).leakRef();
&gt; 
&gt; :S
&gt; 
&gt; &gt; Source/WTF/wtf/text/StringImpl.h:285
&gt; &gt; +    StringImpl(const UChar* characters, unsigned length, StringImpl* base)
&gt; 
&gt; ditto.
&gt; 
&gt; &gt; Source/WTF/wtf/text/StringImpl.h:296
&gt; &gt; +        substringBuffer() = &amp;Ref&lt;StringImpl&gt;(*base).leakRef();
&gt; 
&gt; :S
&gt; 
&gt; &gt; Source/WTF/wtf/text/StringImpl.h:303
&gt; &gt; +    StringImpl(CreateSymbolTag, const LChar* characters, unsigned length, StringImpl* base)
&gt; 
&gt; ditto, I&apos;ll stop commenting on these in this file.
&gt; 
&gt; &gt; Source/WTF/wtf/text/StringImpl.h:313
&gt; &gt; +        substringBuffer() = &amp;Ref&lt;StringImpl&gt;(*base).leakRef();
&gt; 
&gt; :S

While StringImpl assumes ownership, it&apos;s not apparent to me that ownership is transferred. That is, it seems to me that ownership can be shared. See, for example, createSubstringSharingImpl, where it looks like ownerRep can continue to be owned by something else. In that case, my understanding is that Ref&lt;&gt;&amp;&amp; is not correct here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1196580</commentid>
    <comment_count>6</comment_count>
      <attachid>279843</attachid>
    <who name="Keith Rollin">krollin</who>
    <bug_when>2016-05-25 17:29:48 -0700</bug_when>
    <thetext>Created attachment 279843
Patch

Updated for Chris&apos;s comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1196592</commentid>
    <comment_count>7</comment_count>
      <attachid>279796</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-05-25 18:32:08 -0700</bug_when>
    <thetext>Comment on attachment 279796
Patch

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

&gt;&gt;&gt; Source/JavaScriptCore/runtime/JSString.h:96
&gt;&gt;&gt; +        , m_value(adoptRef(*value.leakRef()))
&gt;&gt; 
&gt;&gt; How is this better? Why is JSString still taking a PassRefPtr in? If it is too much refactoring to update this constructor declaration then I think we should not make this change either.
&gt;&gt; Note that based on the call sites, it looks like this constructor should eventually take a Ref&lt;StringImpl&gt;&amp;&amp;
&gt; 
&gt; This is better because it compiles. :-)  m_value is a String. The previous code was initializing it with a PassRefPtr. I removed that constructor from String, and so had to munge types in order to invoke a constructor that worked.
&gt; 
&gt; I think you&apos;re suggesting that JSString should be changed to no longer accept a PassRefPtr? If so, that&apos;s outside the scope of this change. Making such a change would propagate out through JSC and make this patch larger (if not outright huge).
&gt; 
&gt; If you&apos;re suggesting that String should continue to have a constructor that takes a PassRefPtr, I&apos;m not sure I agree with that. It&apos;s not apparent to me that we need to keep that constructor for backward compatibility when we can instead make the call sites conform to the lack of the c&apos;tor that takes the PassRefPtr. The result is a clean String interface.

Then I would rather we construct a RefPtr&lt;&gt; from the PassRefPtr&lt;&gt; and call the String(RefPtr&lt;&gt;&amp;&amp;) constructor. PassRefPtr does not guarantee this is never called with nullptr.

&gt;&gt;&gt; Source/WTF/wtf/ParallelJobsGeneric.h:69
&gt;&gt;&gt; +        static RefPtr&lt;ThreadPrivate&gt; create()
&gt;&gt; 
&gt;&gt; Should return a Ref&lt;&gt;, not a RefPtr&lt;&gt;.
&gt; 
&gt; The result of this function is stored in containers of type Vector&lt;RefPtr&lt;&gt;&gt; (s_threadPool and m_threads), so I thought it a good idea to keep the types the same and reduce churn, as well as avoid changes to other code that references these containers expecting a RefPtr and not a Ref.

I still think this should return a Ref&lt;&gt;. There is no churn when converting a Ref&lt;&gt;&amp;&amp; into a RefPtr&lt;&gt; and the conversion is implicit.

&gt;&gt;&gt; Source/WTF/wtf/text/StringImpl.cpp:207
&gt;&gt;&gt; +inline Ref&lt;StringImpl&gt; StringImpl::reallocateInternal(RefPtr&lt;StringImpl&gt;&amp;&amp; originalString, unsigned length, CharType*&amp; data)
&gt;&gt; 
&gt;&gt; Looks like this should take a Ref&lt;&gt;&amp;&amp; in, not a RefPtr&lt;&gt;&amp;&amp;.
&gt; 
&gt; I&apos;m not sure. For instance, StringBuilder calls reallocate() passing in the StringImpl in its m_buffer data member. m_buffer is a RefPtr, meaning that its StringImpl can be nullptr, which I don&apos;t believe is OK to put into a Ref&lt;&gt;.

The first thing this function does is dereference originalString. If it could be null, we would already crash.

&gt;&gt;&gt; Source/WTF/wtf/text/StringImpl.h:268
&gt;&gt;&gt; +    StringImpl(const LChar* characters, unsigned length, StringImpl* base)
&gt;&gt; 
&gt;&gt; Should probably take a Ref&lt;&gt;&amp;&amp; in? Looks like base cannot be null, also, we do transfer ownership.
&gt; 
&gt; While StringImpl assumes ownership, it&apos;s not apparent to me that ownership is transferred. That is, it seems to me that ownership can be shared. See, for example, createSubstringSharingImpl, where it looks like ownerRep can continue to be owned by something else. In that case, my understanding is that Ref&lt;&gt;&amp;&amp; is not correct here.

Ownership is transferred in the sense that the implementation is calling leakRef() on it and is therefore holding a reference to the StringImpl. If a call site needs to keep holding a Ref&lt;&gt;, then you can call copyRef().
Note that passing a raw pointer here is a bit sad because:
1. It can never be null (The implementation dereferences it without null check)
2. You anyway construct a Ref&lt;&gt; below, so your not avoiding any refcounting churn. The fact is that the constructor wants to increment the refcount.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1196593</commentid>
    <comment_count>8</comment_count>
      <attachid>279843</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-05-25 18:32:28 -0700</bug_when>
    <thetext>Comment on attachment 279843
Patch

See comments on previous patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1196596</commentid>
    <comment_count>9</comment_count>
      <attachid>279843</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-05-25 18:38:20 -0700</bug_when>
    <thetext>Comment on attachment 279843
Patch

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

&gt; Tools/TestWebKitAPI/Tests/WTF/StringImpl.cpp:529
&gt; +    RefPtr&lt;StringImpl&gt; reference = StringImpl::createSymbol(*original.get());

Here and below: *original is sufficient. You don&apos;t need the .get().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1196597</commentid>
    <comment_count>10</comment_count>
      <attachid>279843</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-05-25 18:41:48 -0700</bug_when>
    <thetext>Comment on attachment 279843
Patch

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

&gt; Source/WTF/wtf/text/StringImpl.h:355
&gt; +    static ALWAYS_INLINE Ref&lt;StringImpl&gt; createSubstringSharingImpl(StringImpl* rep, unsigned offset, unsigned length)

I apparently failed to mention it on the previous patch but this should not be a raw pointer as it cannot be null (the implementation dereferences it without null check). Should probably be a StringImpl&amp;.

&gt; Source/WTF/wtf/text/StringImpl.h:363
&gt; +        auto ownerRep = ((rep-&gt;bufferOwnership() == BufferSubstring) ? rep-&gt;substringBuffer() : rep);

I believe we prefer auto* when it is a raw pointer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1196616</commentid>
    <comment_count>11</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-05-25 19:28:25 -0700</bug_when>
    <thetext>I think moving the std::functions around does not help because I believe a copy is made anyway when initially constructing the std::function from the lambda, which causes the captured variables to be copied.

From http://en.cppreference.com/w/cpp/utility/functional/function/function:
template&lt; class F &gt; function( F f );
-&gt; Initializes the target with a copy of f.

I think we need to use something else than an std::function for RunLoop / WorkQueue&apos;s dispatch() parameter to avoid problems.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1196754</commentid>
    <comment_count>12</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-05-26 09:51:38 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; I think moving the std::functions around does not help because I believe a
&gt; copy is made anyway when initially constructing the std::function from the
&gt; lambda, which causes the captured variables to be copied.
&gt; 
&gt; From http://en.cppreference.com/w/cpp/utility/functional/function/function:
&gt; template&lt; class F &gt; function( F f );
&gt; -&gt; Initializes the target with a copy of f.
&gt; 
&gt; I think we need to use something else than an std::function for RunLoop /
&gt; WorkQueue&apos;s dispatch() parameter to avoid problems.

Oops wrong bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1197111</commentid>
    <comment_count>13</comment_count>
      <attachid>279971</attachid>
    <who name="Keith Rollin">krollin</who>
    <bug_when>2016-05-27 10:33:19 -0700</bug_when>
    <thetext>Created attachment 279971
Patch

Implemented all suggested changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1197115</commentid>
    <comment_count>14</comment_count>
      <attachid>279971</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-05-27 11:00:24 -0700</bug_when>
    <thetext>Comment on attachment 279971
Patch

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

&gt; Source/WTF/wtf/text/StringBuilder.cpp:62
&gt; +        m_string = StringImpl::createSubstringSharingImpl(*m_buffer.get(), 0, m_length);

The .get() here is redundant.

&gt; Source/WTF/wtf/text/StringImpl.cpp:305
&gt; +        return adoptRef(static_cast&lt;SymbolImpl&amp;&gt;(*new (NotNull, stringImpl) StringImpl(CreateSymbol, rep.m_data8, rep.length(), Ref&lt;StringImpl&gt;(*ownerRep))));

To we really need the explicit Ref&lt;StringImpl&gt;() ? Doesn&apos;t *ownerRep just work?

&gt; Source/WTF/wtf/text/StringImpl.cpp:306
&gt; +    return adoptRef(static_cast&lt;SymbolImpl&amp;&gt;(*new (NotNull, stringImpl) StringImpl(CreateSymbol, rep.m_data16, rep.length(), Ref&lt;StringImpl&gt;(*ownerRep))));

Ditto.

&gt; Source/WTF/wtf/text/StringImpl.h:367
&gt; +            return adoptRef(*new (NotNull, stringImpl) StringImpl(rep.m_data8 + offset, length, Ref&lt;StringImpl&gt;(*ownerRep)));

Explicit Ref&lt;&gt;() really needed?

&gt; Source/WTF/wtf/text/StringImpl.h:368
&gt; +        return adoptRef(*new (NotNull, stringImpl) StringImpl(rep.m_data16 + offset, length, Ref&lt;StringImpl&gt;(*ownerRep)));

Ditto.

&gt; Source/WTF/wtf/text/StringImpl.h:413
&gt; +    // Reallocate the StringImpl. The originalString must be only owned by the RefPtr,

Ref?

&gt; Source/WTF/wtf/text/WTFString.cpp:335
&gt; +    return String(StringImpl::createSubstringSharingImpl(*m_impl.get(), offset, length));

.get() is redundant.

&gt; Source/WebCore/xml/XPathGrammar.y:180
&gt; +        String nametest = adoptRef(*$1);

Why are this needed? Constructing a String from a RefPtr&lt;StringImpl&gt;&amp;&amp; should be fine, no?

&gt; Tools/TestWebKitAPI/Tests/WTF/StringImpl.cpp:157
&gt; +static Ref&lt;StringImpl&gt; stringFromUTF8(const char* characters)

Please use auto at the call sites.

&gt; Tools/TestWebKitAPI/Tests/WTF/StringImpl.cpp:159
&gt; +    return adoptRef(*String::fromUTF8(characters).releaseImpl());

Return String::fromUTF8(characters).releaseImpl().releaseNonNull() may be nicer

&gt; Tools/TestWebKitAPI/Tests/WTF/StringImpl.cpp:528
&gt;      RefPtr&lt;StringImpl&gt; original = stringFromUTF8(&quot;original&quot;);

Should use auto

&gt; Tools/TestWebKitAPI/Tests/WTF/StringImpl.cpp:529
&gt; +    RefPtr&lt;StringImpl&gt; reference = StringImpl::createSymbol(*original);

You will not need the star after using auto above.

&gt; Tools/TestWebKitAPI/Tests/WTF/StringImpl.cpp:538
&gt;      RefPtr&lt;StringImpl&gt; empty = stringFromUTF8(&quot;&quot;);

Should use auto.

&gt; Tools/TestWebKitAPI/Tests/WTF/StringImpl.cpp:539
&gt; +    RefPtr&lt;StringImpl&gt; emptyReference = StringImpl::createSymbol(*empty);

You will not need the star after using auto above.

&gt; Tools/TestWebKitAPI/Tests/WTF/StringImpl.cpp:552
&gt;      RefPtr&lt;StringImpl&gt; original = stringFromUTF8(&quot;original&quot;);

Should use auto

&gt; Tools/TestWebKitAPI/Tests/WTF/StringImpl.cpp:553
&gt; +    RefPtr&lt;StringImpl&gt; reference = StringImpl::createSymbol(*original);

You will not need the star after using auto above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1199000</commentid>
    <comment_count>15</comment_count>
      <attachid>280454</attachid>
    <who name="Keith Rollin">krollin</who>
    <bug_when>2016-06-03 12:39:22 -0700</bug_when>
    <thetext>Created attachment 280454
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1199001</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-06-03 12:40:35 -0700</bug_when>
    <thetext>Attachment 280454 did not pass style-queue:


ERROR: Source/WTF/wtf/RefPtr.h:107:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
Total errors found: 1 in 32 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1199039</commentid>
    <comment_count>17</comment_count>
      <attachid>280454</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-06-03 14:29:39 -0700</bug_when>
    <thetext>Comment on attachment 280454
Patch

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

R=me with nits.

&gt; Source/WTF/wtf/MetaAllocator.cpp:189
&gt; +    auto handle = adoptRef(new MetaAllocatorHandle(this, start, sizeInBytes, ownerUID));

adoptRef(*new ...);

&gt; Source/WTF/wtf/MetaAllocator.cpp:192
&gt; +        m_tracker-&gt;notify(handle.get());

Handle.ptr()

&gt; Source/WTF/wtf/MetaAllocator.cpp:194
&gt; +    return handle;

Return WTFMove(handle);

&gt; Source/WTF/wtf/PassRefPtr.h:145
&gt; +        return PassRefPtr&lt;T&gt;(static_cast&lt;T*&gt;(p.get()));

This is a potential perf regression. This should keep calling leakRef() and adopting. Just keep the constructor that takes an AdoptTag and call it here.

&gt; Source/WTF/wtf/RefPtr.h:68
&gt; +    RefPtr&lt;T&gt; release() { RefPtr&lt;T&gt; tmp = adoptRef(m_ptr); m_ptr = nullptr; return tmp; }

Can you please add a FIXME comment to say that we should eventually drop this and update the call sites to use WTFMove()?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1200262</commentid>
    <comment_count>18</comment_count>
      <attachid>280751</attachid>
    <who name="Keith Rollin">krollin</who>
    <bug_when>2016-06-07 17:57:36 -0700</bug_when>
    <thetext>Created attachment 280751
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1200267</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-06-07 18:02:04 -0700</bug_when>
    <thetext>Attachment 280751 did not pass style-queue:


ERROR: Source/WTF/wtf/RefPtr.h:108:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
Total errors found: 1 in 32 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1200279</commentid>
    <comment_count>20</comment_count>
      <attachid>280751</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-06-07 18:29:50 -0700</bug_when>
    <thetext>Comment on attachment 280751
Patch

Clearing flags on attachment: 280751

Committed r201782: &lt;http://trac.webkit.org/changeset/201782&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1200280</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-06-07 18:29:56 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>279796</attachid>
            <date>2016-05-25 13:01:41 -0700</date>
            <delta_ts>2016-05-25 17:29:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-157596-20160525130249.patch</filename>
            <type>text/plain</type>
            <size>53123</size>
            <attacher name="Keith Rollin">krollin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAxMzg3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBm
NDMwNjBmMDUxYjAxMGFkZTY2OTQyNjRjOWVkNzZhNmRlNjY3YjRhLi5lNjQ0NjE3YzAyMmZiOTIz
NTU1Mjk5NDE4ZDIyYWIwZDE2NDNlMzA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyOSBAQAorMjAxNi0wNS0xOSAgS2VpdGggUm9sbGluICA8a3JvbGxpbkBhcHBsZS5jb20+
CisKKyAgICAgICAgUmVtb3ZlIGFsbCB1c2VzIG9mIFBhc3NSZWZQdHIgaW4gV1RGCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTc1OTYKKyAgICAgICAg
PHJkYXI6Ly9wcm9ibGVtLzI2MjM0MzkxPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFVwZGF0ZSBjYWxscyB0byBpbnRlcmZhY2VzIHRoYXQgbm8gbG9u
Z2VyIHRha2Ugb3IgcmV0dXJuIFBhc3NSZWZQdHJzLgorCisgICAgICAgICogcnVudGltZS9KU1N0
cmluZy5jcHA6CisgICAgICAgIChKU0M6OkpTUm9wZVN0cmluZzo6cmVzb2x2ZVJvcGUpOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNTdHJpbmcuaDoKKyAgICAgICAgKEpTQzo6SlNTdHJpbmc6OkpTU3Ry
aW5nKToKKyAgICAgICAgKiBydW50aW1lL1NtYWxsU3RyaW5ncy5jcHA6CisgICAgICAgIChKU0M6
OlNtYWxsU3RyaW5nc1N0b3JhZ2U6OlNtYWxsU3RyaW5nc1N0b3JhZ2UpOgorICAgICAgICAqIHJ1
bnRpbWUvU3RyaW5nQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpzdHJpbmdGcm9tQ2hh
ckNvZGVTbG93Q2FzZSk6CisgICAgICAgICogcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwOgor
ICAgICAgICAoSlNDOjpqc1NwbGljZVN1YnN0cmluZ3MpOgorICAgICAgICAoSlNDOjpqc1NwbGlj
ZVN1YnN0cmluZ3NXaXRoU2VwYXJhdG9ycyk6CisgICAgICAgIChKU0M6OnJlcGVhdENoYXJhY3Rl
cik6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY0ZvbnRzaXplKToKKyAgICAgICAgKEpT
Qzo6c3RyaW5nUHJvdG9GdW5jTGluayk6CisgICAgICAgIChKU0M6Om5vcm1hbGl6ZSk6CisKIDIw
MTYtMDUtMjUgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAg
ICAgICAgIFJFR1JFU1NJT04ocjIwMTA2Nik6IFtHVEtdIFNldmVyYWwgaW50bCB0ZXN0cyBzdGFy
dGVkIHRvIGZhaWwgaW4gR1RLKyBib3QgYWZ0ZXIgcjIwMTA2NgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwppbmRleCBhYzljZjIxODg5ZjA5
MjUxOWY1MDgwNTY2OTFlMDNkM2FhYTg5MDVhLi4xYzFmY2NjODJmY2ZkODVmNzlhOTYyZmFlYWEz
NzNmOWMwZjc0NDMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYyIEBACisyMDE2LTA1LTE5ICBLZWl0aCBSb2xs
aW4gIDxrcm9sbGluQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgYWxsIHVzZXMgb2YgUGFz
c1JlZlB0ciBpbiBXVEYKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE1NzU5NgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMjYyMzQzOTE+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVtb3ZlL3VwZGF0ZSBt
b3N0IGludGVyZmFjZXMgdGhhdCB0YWtlIG9yIHJldHVybiBQYXNzUmVmUHRycy4KKyAgICAgICAg
UmVtYWluaW5nIHJlZmVyZW5jZXMgaW5jbHVkZSB0aG9zZSBpbiBub24tQ29jb2EgaW1wbGVtZW50
YXRpb25zIGFuZAorICAgICAgICB0aG9zZSByZXF1aXJlZCBmb3IgY29udGludWVkIGNvbXBhdGli
aWxpdHkgd2l0aCBtb2R1bGVzIHRoYXQgc3RpbGwgdXNlCisgICAgICAgIFBhc3NSZWZQdHJzIChz
cGVjaWZpY2FsbHk6IEZvcndhcmQuaCwgUmVmUHRyIGludGVyb3BlcmFiaWxpdHksCisgICAgICAg
IFNpemVMaW1pdHMuaCwgV29ya1F1ZXVlIChXaW5kb3dzKSBEaXNwYXRjaFF1ZXVlRWZsLAorICAg
ICAgICBEaXNwYXRjaFdvcmtJdGVtRWZsLCBhbmQgUGFzc1JlZlB0ciBpdHNlbGYpLgorCisgICAg
ICAgIFVwZGF0ZSBjYWxscyB0byBpbnRlcmZhY2VzIHRoYXQgbm8gbG9uZ2VyIHRha2Ugb3IgcmV0
dXJuIFBhc3NSZWZQdHJzLgorCisgICAgICAgICogd3RmL0Z1bmN0aW9uYWwuaDoKKyAgICAgICAg
KFdURjo6UGFyYW1TdG9yYWdlVHJhaXRzPFJlZjxUPj46OndyYXApOgorICAgICAgICAoV1RGOjpQ
YXJhbVN0b3JhZ2VUcmFpdHM8UmVmPFQ+Pjo6dW53cmFwKToKKyAgICAgICAgKFdURjo6UGFyYW1T
dG9yYWdlVHJhaXRzPFJlZlB0cjxUPj46OndyYXApOgorICAgICAgICAoV1RGOjpGdW5jdGlvbkJh
c2U6OkZ1bmN0aW9uQmFzZSk6CisgICAgICAgIChXVEY6OkZ1bmN0aW9uQmFzZTo6aW1wbCk6Cisg
ICAgICAgIChXVEY6OmJpbmQpOgorICAgICAgICAqIHd0Zi9NZXRhQWxsb2NhdG9yLmNwcDoKKyAg
ICAgICAgKFdURjo6TWV0YUFsbG9jYXRvcjo6YWxsb2NhdGUpOgorICAgICAgICAqIHd0Zi9NZXRh
QWxsb2NhdG9yLmg6CisgICAgICAgICogd3RmL1BhcmFsbGVsSm9ic0dlbmVyaWMuaDoKKyAgICAg
ICAgKFdURjo6UGFyYWxsZWxFbnZpcm9ubWVudDo6VGhyZWFkUHJpdmF0ZTo6Y3JlYXRlKToKKyAg
ICAgICAgKiB3dGYvdGV4dC9BdG9taWNTdHJpbmdJbXBsLmNwcDoKKyAgICAgICAgKFdURjo6SGFz
aEFuZFVURjhDaGFyYWN0ZXJzVHJhbnNsYXRvcjo6dHJhbnNsYXRlKToKKyAgICAgICAgKiB3dGYv
dGV4dC9DU3RyaW5nLmNwcDoKKyAgICAgICAgKFdURjo6Q1N0cmluZ0J1ZmZlcjo6Y3JlYXRlVW5p
bml0aWFsaXplZCk6CisgICAgICAgICogd3RmL3RleHQvQ1N0cmluZy5oOgorICAgICAgICAqIHd0
Zi90ZXh0L1N0cmluZ0J1aWxkZXIuY3BwOgorICAgICAgICAoV1RGOjpTdHJpbmdCdWlsZGVyOjpy
ZWlmeVN0cmluZyk6CisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6OnJlYWxsb2NhdGVCdWZm
ZXI8TENoYXI+KToKKyAgICAgICAgKFdURjo6U3RyaW5nQnVpbGRlcjo6cmVhbGxvY2F0ZUJ1ZmZl
cjxVQ2hhcj4pOgorICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ0ltcGwuY3BwOgorICAgICAgICAo
V1RGOjpTdHJpbmdJbXBsOjpyZWFsbG9jYXRlSW50ZXJuYWwpOgorICAgICAgICAoV1RGOjpTdHJp
bmdJbXBsOjpyZWFsbG9jYXRlKToKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6Y3JlYXRlOEJp
dElmUG9zc2libGUpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpjcmVhdGVTeW1ib2wpOgor
ICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpjb252ZXJ0VG9Mb3dlcmNhc2VXaXRob3V0TG9jYWxl
KToKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6Y29udmVydFRvVXBwZXJjYXNlV2l0aG91dExv
Y2FsZSk6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OmNvbnZlcnRUb0xvd2VyY2FzZVdpdGhM
b2NhbGUpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpjb252ZXJ0VG9VcHBlcmNhc2VXaXRo
TG9jYWxlKToKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6Y29udmVydEFTQ0lJQ2FzZSk6Cisg
ICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgICogd3Rm
L3RleHQvU3RyaW5nSW1wbC5oOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpTdHJpbmdJbXBs
KToKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6Y3JlYXRlU3Vic3RyaW5nU2hhcmluZ0ltcGwp
OgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjp0cnlDcmVhdGVVbmluaXRpYWxpemVkKToKKyAg
ICAgICAgKiB3dGYvdGV4dC9XVEZTdHJpbmcuY3BwOgorICAgICAgICAoV1RGOjpTdHJpbmc6OnN1
YnN0cmluZ1NoYXJpbmdJbXBsKToKKyAgICAgICAgKiB3dGYvdGV4dC9XVEZTdHJpbmcuaDoKKyAg
ICAgICAgKFdURjo6U3RyaW5nOjpTdHJpbmcpOiBEZWxldGVkLgorICAgICAgICAqIHd0Zi90ZXh0
L2NmL1N0cmluZ0ltcGxDRi5jcHA6CisKIDIwMTYtMDUtMjQgIEtlaXRoIE1pbGxlciAgPGtlaXRo
X21pbGxlckBhcHBsZS5jb20+CiAKICAgICAgICAgTExJbnQgc2hvdWxkIGJlIGFibGUgdG8gY2Fj
aGUgcHJvdG90eXBlIGxvYWRzIGZvciB2YWx1ZXMgaW4gR2V0QnlJZApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGE2
M2YwMDlkN2Y2OTdiNjFkZDVkMzEyODk1YzljYTBiOTkyMjgyZmUuLmUyN2U1NzA4ODEwNGZhN2Fh
OTJmNzA4OWRkYjRjNTVhZWRhZTY4OTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAx
Ni0wNS0xOSAgS2VpdGggUm9sbGluICA8a3JvbGxpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVt
b3ZlIGFsbCB1c2VzIG9mIFBhc3NSZWZQdHIgaW4gV1RGCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTc1OTYKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVt
LzI2MjM0MzkxPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFVwZGF0ZSBjYWxscyB0byBpbnRlcmZhY2VzIHRoYXQgbm8gbG9uZ2VyIHRha2Ugb3IgcmV0
dXJuIFBhc3NSZWZQdHJzLgorCisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkRvY3VtZW50OjpkaXNwbGF5U3RyaW5nTW9kaWZpZWRCeUVuY29kaW5nKToKKyAg
ICAgICAgKiB4bWwvWFBhdGhHcmFtbWFyLnk6CisKIDIwMTYtMDUtMjUgIE5hZWwgT3VlZHJhb2dv
ICA8bmFlbC5vdWVkcmFvZ29AY3JmLmNhbm9uLmZyPgogCiAgICAgICAgIFJlbW92ZSB1bnVzZWQg
c2xvdEJhc2UgcGFyYW1ldGVyIGluIGJpbmRpbmdzIGdlbmVyYXRvcgpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuY3BwCmluZGV4IGFkOGE2N2E0NTcxOGVhN2U2YTE0ZDhj
YTU2YjA1MjcxOTg4ZThmNmUuLjhhNjAyZmU1OGZiMDkyYjAxNDdlZWM4ZmU5NWUxYjQ4ZTUxNWRk
OGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5jcHAKQEAgLTI1
NCw3ICsyNTQsNyBAQCB2b2lkIEpTUm9wZVN0cmluZzo6cmVzb2x2ZVJvcGUoRXhlY1N0YXRlKiBl
eGVjKSBjb25zdAogICAgICAgICBMQ2hhciogYnVmZmVyOwogICAgICAgICBpZiAoUmVmUHRyPFN0
cmluZ0ltcGw+IG5ld0ltcGwgPSBTdHJpbmdJbXBsOjp0cnlDcmVhdGVVbmluaXRpYWxpemVkKG1f
bGVuZ3RoLCBidWZmZXIpKSB7CiAgICAgICAgICAgICBIZWFwOjpoZWFwKHRoaXMpLT5yZXBvcnRF
eHRyYU1lbW9yeUFsbG9jYXRlZChuZXdJbXBsLT5jb3N0KCkpOwotICAgICAgICAgICAgbV92YWx1
ZSA9IG5ld0ltcGwucmVsZWFzZSgpOworICAgICAgICAgICAgbV92YWx1ZSA9IFdURk1vdmUobmV3
SW1wbCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBvdXRPZk1lbW9yeShleGVjKTsK
ICAgICAgICAgICAgIHJldHVybjsKQEAgLTI2OCw3ICsyNjgsNyBAQCB2b2lkIEpTUm9wZVN0cmlu
Zzo6cmVzb2x2ZVJvcGUoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogICAgIFVDaGFyKiBidWZmZXI7
CiAgICAgaWYgKFJlZlB0cjxTdHJpbmdJbXBsPiBuZXdJbXBsID0gU3RyaW5nSW1wbDo6dHJ5Q3Jl
YXRlVW5pbml0aWFsaXplZChtX2xlbmd0aCwgYnVmZmVyKSkgewogICAgICAgICBIZWFwOjpoZWFw
KHRoaXMpLT5yZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZChuZXdJbXBsLT5jb3N0KCkpOwotICAg
ICAgICBtX3ZhbHVlID0gbmV3SW1wbC5yZWxlYXNlKCk7CisgICAgICAgIG1fdmFsdWUgPSBXVEZN
b3ZlKG5ld0ltcGwpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIG91dE9mTWVtb3J5KGV4ZWMpOwog
ICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1N0cmluZy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaApp
bmRleCA2MDgyZjY3YjA0YzE4MTgxMTk0MDgyMzRkYzVhZGMwZjRmYmIyNjU3Li5jYmI5ZDBmOTFh
ZjVjZTdiM2ExZWNmOTZjM2Y0Y2ZhZWMyNzVlYzMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTU3RyaW5nLmgKQEAgLTkzLDcgKzkzLDcgQEAgcHJpdmF0ZToKICAgICBKU1N0cmlu
ZyhWTSYgdm0sIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gdmFsdWUpCiAgICAgICAgIDogSlNDZWxs
KHZtLCB2bS5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpCiAgICAgICAgICwgbV9mbGFncygwKQotICAg
ICAgICAsIG1fdmFsdWUodmFsdWUpCisgICAgICAgICwgbV92YWx1ZShhZG9wdFJlZigqdmFsdWUu
bGVha1JlZigpKSkKICAgICB7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TbWFsbFN0cmluZ3MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU21hbGxTdHJpbmdzLmNwcAppbmRleCA5NDc1MTg2MDdiODhiNjc3ZThkMWY1ZWViZTNk
MTc2NTdiMjRhMzFkLi4yZDI3OGYwZDg2ZTdlNWYwMTI5ZjVhYTg4NGU5NjJjYjZmMWVhOTZkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TbWFsbFN0cmluZ3MuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NtYWxsU3RyaW5ncy5jcHAKQEAg
LTU3LDcgKzU3LDcgQEAgU21hbGxTdHJpbmdzU3RvcmFnZTo6U21hbGxTdHJpbmdzU3RvcmFnZSgp
CiAgICAgUmVmUHRyPFN0cmluZ0ltcGw+IGJhc2VTdHJpbmcgPSBTdHJpbmdJbXBsOjpjcmVhdGVV
bmluaXRpYWxpemVkKHNpbmdsZUNoYXJhY3RlclN0cmluZ0NvdW50LCBjaGFyYWN0ZXJCdWZmZXIp
OwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaW5nbGVDaGFyYWN0ZXJTdHJpbmdDb3Vu
dDsgKytpKSB7CiAgICAgICAgIGNoYXJhY3RlckJ1ZmZlcltpXSA9IGk7Ci0gICAgICAgIG1fcmVw
c1tpXSA9IEF0b21pY1N0cmluZ0ltcGw6OmFkZChQYXNzUmVmUHRyPFN0cmluZ0ltcGw+KFN0cmlu
Z0ltcGw6OmNyZWF0ZVN1YnN0cmluZ1NoYXJpbmdJbXBsKGJhc2VTdHJpbmcsIGksIDEpKS5nZXQo
KSk7CisgICAgICAgIG1fcmVwc1tpXSA9IEF0b21pY1N0cmluZ0ltcGw6OmFkZChTdHJpbmdJbXBs
OjpjcmVhdGVTdWJzdHJpbmdTaGFyaW5nSW1wbChiYXNlU3RyaW5nLmdldCgpLCBpLCAxKS5wdHIo
KSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJpbmdDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dHJpbmdDb25zdHJ1Y3Rvci5jcHAKaW5kZXggM2Q1OTQyNzcyZmZmNWY1NjA0YzMxYjAwYzg4OGUx
MjE3YmE5YWQwYS4uNzlhNGNhODBmYjA3ZmZlZTdhMmEwNGVhNjFhMzUxNDVhMWJmMTFlNyAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nQ29uc3RydWN0b3Iu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ0NvbnN0cnVjdG9y
LmNwcApAQCAtNzUsMTAgKzc1LDEwIEBAIHN0YXRpYyBORVZFUl9JTkxJTkUgSlNWYWx1ZSBzdHJp
bmdGcm9tQ2hhckNvZGVTbG93Q2FzZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgdW5zaWduZWQg
bGVuZ3RoID0gZXhlYy0+YXJndW1lbnRDb3VudCgpOwogICAgIFVDaGFyKiBidWY7Ci0gICAgUGFz
c1JlZlB0cjxTdHJpbmdJbXBsPiBpbXBsID0gU3RyaW5nSW1wbDo6Y3JlYXRlVW5pbml0aWFsaXpl
ZChsZW5ndGgsIGJ1Zik7CisgICAgUmVmPFN0cmluZ0ltcGw+IGltcGwgPSBTdHJpbmdJbXBsOjpj
cmVhdGVVbmluaXRpYWxpemVkKGxlbmd0aCwgYnVmKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbGVuZ3RoOyArK2kpCiAgICAgICAgIGJ1ZltpXSA9IHN0YXRpY19jYXN0PFVDaGFyPihl
eGVjLT51bmNoZWNrZWRBcmd1bWVudChpKS50b1VJbnQzMihleGVjKSk7Ci0gICAgcmV0dXJuIGpz
U3RyaW5nKGV4ZWMsIGltcGwpOworICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBXVEZNb3ZlKGlt
cGwpKTsKIH0KIAogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nRnJv
bUNoYXJDb2RlKEV4ZWNTdGF0ZSogZXhlYykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwCmluZGV4IGFlZjM0M2JhZGI4ZjAyMzNhNzQ4YTBm
ZGUwM2JkODc0MGJkNDZiODIuLjQzOWQ0MjdiZTM4YjdlYzZlNDBiYzhkMGY1YjQwZTgyZWZhM2Nh
OGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3Rv
dHlwZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90
eXBlLmNwcApAQCAtMzI0LDcgKzMyNCw3IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFsdWUg
anNTcGxpY2VTdWJzdHJpbmdzKEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcqIHNvdXJjCiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgaW1w
bC5yZWxlYXNlKCkpOworICAgICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgV1RGTW92ZShpbXBs
KSk7CiAgICAgfQogCiAgICAgVUNoYXIqIGJ1ZmZlcjsKQEAgLTM0Miw3ICszNDIsNyBAQCBzdGF0
aWMgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGpzU3BsaWNlU3Vic3RyaW5ncyhFeGVjU3RhdGUqIGV4
ZWMsIEpTU3RyaW5nKiBzb3VyYwogICAgICAgICB9CiAgICAgfQogCi0gICAgcmV0dXJuIGpzU3Ry
aW5nKGV4ZWMsIGltcGwucmVsZWFzZSgpKTsKKyAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgV1RG
TW92ZShpbXBsKSk7CiB9CiAKIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFsdWUganNTcGxpY2VT
dWJzdHJpbmdzV2l0aFNlcGFyYXRvcnMoRXhlY1N0YXRlKiBleGVjLCBKU1N0cmluZyogc291cmNl
VmFsLCBjb25zdCBTdHJpbmcmIHNvdXJjZSwgY29uc3QgU3RyaW5nUmFuZ2UqIHN1YnN0cmluZ1Jh
bmdlcywgaW50IHJhbmdlQ291bnQsIGNvbnN0IFN0cmluZyogc2VwYXJhdG9ycywgaW50IHNlcGFy
YXRvckNvdW50KQpAQCAtMzk3LDcgKzM5Nyw3IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFs
dWUganNTcGxpY2VTdWJzdHJpbmdzV2l0aFNlcGFyYXRvcnMoRXhlY1N0YXRlKiBleGVjLCBKCiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0gICAgICAgIAogCi0gICAgICAgIHJldHVybiBqc1N0cmlu
ZyhleGVjLCBpbXBsLnJlbGVhc2UoKSk7CisgICAgICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBX
VEZNb3ZlKGltcGwpKTsKICAgICB9CiAKICAgICBVQ2hhciogYnVmZmVyOwpAQCAtNDI4LDcgKzQy
OCw3IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFsdWUganNTcGxpY2VTdWJzdHJpbmdzV2l0
aFNlcGFyYXRvcnMoRXhlY1N0YXRlKiBleGVjLCBKCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBy
ZXR1cm4ganNTdHJpbmcoZXhlYywgaW1wbC5yZWxlYXNlKCkpOworICAgIHJldHVybiBqc1N0cmlu
ZyhleGVjLCBXVEZNb3ZlKGltcGwpKTsKIH0KIAogc3RhdGljIEFMV0FZU19JTkxJTkUgRW5jb2Rl
ZEpTVmFsdWUgcmVtb3ZlVXNpbmdSZWdFeHBTZWFyY2goVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMs
IEpTU3RyaW5nKiBzdHJpbmcsIGNvbnN0IFN0cmluZyYgc291cmNlLCBSZWdFeHAqIHJlZ0V4cCkK
QEAgLTc2Miw3ICs3NjIsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUgcmVwZWF0Q2hhcmFjdGVy
KEV4ZWNTdGF0ZSogZXhlYywgQ2hhcmFjdGVyVHlwZSBjaGFyYWN0ZXIsCiAKICAgICBzdGQ6OmZp
bGxfbihidWZmZXIsIHJlcGVhdENvdW50LCBjaGFyYWN0ZXIpOwogCi0gICAgcmV0dXJuIGpzU3Ry
aW5nKGV4ZWMsIGltcGwucmVsZWFzZSgpKTsKKyAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgV1RG
TW92ZShpbXBsKSk7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgpAQCAt
Nzc1LDcgKzc3NSw3IEBAIHN0YXRpYyBpbmxpbmUgSlNTdHJpbmcqIHJlcGVhdENoYXJhY3RlcihF
eGVjU3RhdGUmIGV4ZWMsIENoYXJhY3RlclR5cGUgY2hhcmFjdGVyCiAKICAgICBzdGQ6OmZpbGxf
bihidWZmZXIsIHJlcGVhdENvdW50LCBjaGFyYWN0ZXIpOwogCi0gICAgcmV0dXJuIGpzU3RyaW5n
KCZleGVjLCBpbXBsLnJlbGVhc2UoKSk7CisgICAgcmV0dXJuIGpzU3RyaW5nKCZleGVjLCBXVEZN
b3ZlKGltcGwpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90
b0Z1bmNSZXBlYXRDaGFyYWN0ZXIoRXhlY1N0YXRlKiBleGVjKQpAQCAtMTU3Nyw3ICsxNTc3LDcg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNGb250c2l6ZShF
eGVjU3RhdGUqIGV4ZWMpCiAgICAgICAgIHVuc2lnbmVkIGJ1ZmZlclNpemUgPSAyMiArIHN0cmlu
Z1NpemU7CiAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgaGF2ZSBhbiA4LWJpdCB2ZXJzaW9u
IG9mIHRoaXMgY29kZSBwYXRoIHRvbz8gT3IgbWF5YmUgb25seSBhbiA4LWJpdCB2ZXJzaW9uPwog
ICAgICAgICBVQ2hhciogYnVmZmVyOwotICAgICAgICBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGlt
cGwgPSBTdHJpbmdJbXBsOjp0cnlDcmVhdGVVbmluaXRpYWxpemVkKGJ1ZmZlclNpemUsIGJ1ZmZl
cik7CisgICAgICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBpbXBsID0gU3RyaW5nSW1wbDo6dHJ5Q3Jl
YXRlVW5pbml0aWFsaXplZChidWZmZXJTaXplLCBidWZmZXIpOwogICAgICAgICBpZiAoIWltcGwp
CiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAg
ICAgICBidWZmZXJbMF0gPSAnPCc7CkBAIC0xNjAzLDcgKzE2MDMsNyBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0ZvbnRzaXplKEV4ZWNTdGF0ZSogZXhlYykK
ICAgICAgICAgYnVmZmVyWzE5ICsgc3RyaW5nU2l6ZV0gPSAnbic7CiAgICAgICAgIGJ1ZmZlclsy
MCArIHN0cmluZ1NpemVdID0gJ3QnOwogICAgICAgICBidWZmZXJbMjEgKyBzdHJpbmdTaXplXSA9
ICc+JzsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc05vbnRyaXZpYWxTdHJpbmco
ZXhlYywgaW1wbCkpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTm9udHJpdmlh
bFN0cmluZyhleGVjLCBXVEZNb3ZlKGltcGwpKSk7CiAgICAgfQogCiAgICAgU3RyaW5nIGZvbnRT
aXplID0gYTAudG9XVEZTdHJpbmcoZXhlYyk7CkBAIC0xNjQ2LDcgKzE2NDYsNyBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0xpbmsoRXhlY1N0YXRlKiBleGVj
KQogICAgIHVuc2lnbmVkIGJ1ZmZlclNpemUgPSAxNSArIGxpbmtUZXh0U2l6ZSArIHN0cmluZ1Np
emU7CiAgICAgLy8gRklYTUU6IFNob3VsZCB3ZSBoYXZlIGFuIDgtYml0IHZlcnNpb24gb2YgdGhp
cyBjb2RlIHBhdGggdG9vPyBPciBtYXliZSBvbmx5IGFuIDgtYml0IHZlcnNpb24/CiAgICAgVUNo
YXIqIGJ1ZmZlcjsKLSAgICBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGltcGwgPSBTdHJpbmdJbXBs
Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKGJ1ZmZlclNpemUsIGJ1ZmZlcik7CisgICAgUmVmUHRy
PFN0cmluZ0ltcGw+IGltcGwgPSBTdHJpbmdJbXBsOjp0cnlDcmVhdGVVbmluaXRpYWxpemVkKGJ1
ZmZlclNpemUsIGJ1ZmZlcik7CiAgICAgaWYgKCFpbXBsKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGJ1ZmZlclswXSA9ICc8JzsKQEAgLTE2NjYs
NyArMTY2Niw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5j
TGluayhFeGVjU3RhdGUqIGV4ZWMpCiAgICAgYnVmZmVyWzEyICsgbGlua1RleHRTaXplICsgc3Ry
aW5nU2l6ZV0gPSAnLyc7CiAgICAgYnVmZmVyWzEzICsgbGlua1RleHRTaXplICsgc3RyaW5nU2l6
ZV0gPSAnYSc7CiAgICAgYnVmZmVyWzE0ICsgbGlua1RleHRTaXplICsgc3RyaW5nU2l6ZV0gPSAn
Pic7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywg
aW1wbCkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOb250cml2aWFsU3RyaW5nKGV4
ZWMsIFdURk1vdmUoaW1wbCkpKTsKIH0KIAogZW51bSB7CkBAIC0xODkyLDcgKzE4OTIsNyBAQCBz
dGF0aWMgSlNWYWx1ZSBub3JtYWxpemUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBVQ2hhciogc291
cmNlLCBzaXplX3Qgc291cmNlTGVuZwogICAgIGlmIChVX0ZBSUxVUkUoc3RhdHVzKSkKICAgICAg
ICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMpOwogCi0gICAgcmV0dXJuIGpzU3RyaW5nKGV4
ZWMsIGltcGwucmVsZWFzZSgpKTsKKyAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgV1RGTW92ZShp
bXBsKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5j
Tm9ybWFsaXplKEV4ZWNTdGF0ZSogZXhlYykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0Z1
bmN0aW9uYWwuaCBiL1NvdXJjZS9XVEYvd3RmL0Z1bmN0aW9uYWwuaAppbmRleCA0NWNhOTQxMWI4
ZTM2NTY4M2I5YmI1NTcxNTVmMjZhODg0YmE5MzAyLi5kYTJlYzkxMGE5MTdhZjNlNjhlOGMxY2E3
YzU5YTllZWEwYmMzNDg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9GdW5jdGlvbmFsLmgK
KysrIGIvU291cmNlL1dURi93dGYvRnVuY3Rpb25hbC5oCkBAIC0yNyw3ICsyNyw2IEBACiAjZGVm
aW5lIFdURl9GdW5jdGlvbmFsX2gKIAogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW5j
bHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVk
ZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4K
QEAgLTYyLDE1ICs2MSwxNSBAQCBjbGFzcyBIYXNSZWZBbmREZXJlZiB7CiAgICAgVHlwZUNoZWNr
ZXIgeyB9OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgTm9UeXBlIHJl
ZkNoZWNrKFUqLCBUeXBlQ2hlY2tlcjx2b2lkIChCYXNlTWl4aW46OiopKCksICZVOjpyZWY+KiA9
IDApOworICAgIHN0YXRpYyBOb1R5cGUgcmVmQ2hlY2soVSosIFR5cGVDaGVja2VyPHZvaWQgKEJh
c2VNaXhpbjo6KikoKSwgJlU6OnJlZj4qID0gbnVsbHB0cik7CiAgICAgc3RhdGljIFllc1R5cGUg
cmVmQ2hlY2soLi4uKTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIE5v
VHlwZSBkZXJlZkNoZWNrKFUqLCBUeXBlQ2hlY2tlcjx2b2lkIChCYXNlTWl4aW46OiopKCksICZV
OjpkZXJlZj4qID0gMCk7CisgICAgc3RhdGljIE5vVHlwZSBkZXJlZkNoZWNrKFUqLCBUeXBlQ2hl
Y2tlcjx2b2lkIChCYXNlTWl4aW46OiopKCksICZVOjpkZXJlZj4qID0gbnVsbHB0cik7CiAgICAg
c3RhdGljIFllc1R5cGUgZGVyZWZDaGVjayguLi4pOwogCiBwdWJsaWM6Ci0gICAgc3RhdGljIGNv
bnN0IGJvb2wgdmFsdWUgPSBzaXplb2YocmVmQ2hlY2soc3RhdGljX2Nhc3Q8QmFzZSo+KDApKSkg
PT0gc2l6ZW9mKFllc1R5cGUpICYmIHNpemVvZihkZXJlZkNoZWNrKHN0YXRpY19jYXN0PEJhc2Uq
PigwKSkpID09IHNpemVvZihZZXNUeXBlKTsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9
IHNpemVvZihyZWZDaGVjayhzdGF0aWNfY2FzdDxCYXNlKj4obnVsbHB0cikpKSA9PSBzaXplb2Yo
WWVzVHlwZSkgJiYgc2l6ZW9mKGRlcmVmQ2hlY2soc3RhdGljX2Nhc3Q8QmFzZSo+KG51bGxwdHIp
KSkgPT0gc2l6ZW9mKFllc1R5cGUpOwogfTsKIAogLy8gQSBGdW5jdGlvbldyYXBwZXIgaXMgYSBj
bGFzcyB0ZW1wbGF0ZSB0aGF0IGNhbiB3cmFwIGEgZnVuY3Rpb24gcG9pbnRlciBvciBhIG1lbWJl
ciBmdW5jdGlvbiBwb2ludGVyIGFuZApAQCAtNDE5LDE3ICs0MTgsMTkgQEAgdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gc3RydWN0IFBhcmFtU3RvcmFnZVRyYWl0cyB7CiAgICAgc3RhdGljIGNvbnN0IFQm
IHVud3JhcChjb25zdCBTdG9yYWdlVHlwZSYgdmFsdWUpIHsgcmV0dXJuIHZhbHVlOyB9CiB9Owog
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgUGFyYW1TdG9yYWdlVHJhaXRzPFBhc3NSZWZQ
dHI8VD4+IHsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBQYXJhbVN0b3JhZ2VUcmFpdHM8
UmVmPFQ+PiB7CiAgICAgdHlwZWRlZiBSZWZQdHI8VD4gU3RvcmFnZVR5cGU7CiAKLSAgICBzdGF0
aWMgU3RvcmFnZVR5cGUgd3JhcChQYXNzUmVmUHRyPFQ+IHZhbHVlKSB7IHJldHVybiB2YWx1ZTsg
fQotICAgIHN0YXRpYyBUKiB1bndyYXAoY29uc3QgU3RvcmFnZVR5cGUmIHZhbHVlKSB7IHJldHVy
biB2YWx1ZS5nZXQoKTsgfQorICAgIHN0YXRpYyBTdG9yYWdlVHlwZSB3cmFwKFJlZjxUPiB2YWx1
ZSkgeyByZXR1cm4gdmFsdWUucHRyKCk7IH0KKyAgICBzdGF0aWMgU3RvcmFnZVR5cGUgd3JhcChS
ZWY8VD4mJiB2YWx1ZSkgeyByZXR1cm4gV1RGTW92ZSh2YWx1ZSk7IH0KKyAgICBzdGF0aWMgVCog
dW53cmFwKGNvbnN0IFN0b3JhZ2VUeXBlJiB2YWx1ZSkgeyByZXR1cm4gdmFsdWUucHRyKCk7IH0K
IH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBQYXJhbVN0b3JhZ2VUcmFpdHM8UmVm
UHRyPFQ+PiB7CiAgICAgdHlwZWRlZiBSZWZQdHI8VD4gU3RvcmFnZVR5cGU7CiAKLSAgICBzdGF0
aWMgU3RvcmFnZVR5cGUgd3JhcChSZWZQdHI8VD4gdmFsdWUpIHsgcmV0dXJuIHZhbHVlLnJlbGVh
c2UoKTsgfQorICAgIHN0YXRpYyBTdG9yYWdlVHlwZSB3cmFwKFJlZlB0cjxUPiB2YWx1ZSkgeyBy
ZXR1cm4gdmFsdWU7IH0KKyAgICBzdGF0aWMgU3RvcmFnZVR5cGUgd3JhcChSZWZQdHI8VD4mJiB2
YWx1ZSkgeyByZXR1cm4gV1RGTW92ZSh2YWx1ZSk7IH0KICAgICBzdGF0aWMgVCogdW53cmFwKGNv
bnN0IFN0b3JhZ2VUeXBlJiB2YWx1ZSkgeyByZXR1cm4gdmFsdWUuZ2V0KCk7IH0KIH07CiAKQEAg
LTY2OCwxMyArNjY5LDE4IEBAIHByb3RlY3RlZDoKICAgICB7CiAgICAgfQogCi0gICAgZXhwbGlj
aXQgRnVuY3Rpb25CYXNlKFBhc3NSZWZQdHI8RnVuY3Rpb25JbXBsQmFzZT4gaW1wbCkKKyAgICBl
eHBsaWNpdCBGdW5jdGlvbkJhc2UoUmVmUHRyPEZ1bmN0aW9uSW1wbEJhc2U+JiBpbXBsKQogICAg
ICAgICA6IG1faW1wbChpbXBsKQogICAgIHsKICAgICB9CiAKKyAgICBleHBsaWNpdCBGdW5jdGlv
bkJhc2UoUmVmPEZ1bmN0aW9uSW1wbEJhc2U+JiYgaW1wbCkKKyAgICAgICAgOiBtX2ltcGwoV1RG
TW92ZShpbXBsKSkKKyAgICB7CisgICAgfQorCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rp
b25UeXBlPiBGdW5jdGlvbkltcGw8RnVuY3Rpb25UeXBlPiogaW1wbCgpIGNvbnN0Ci0gICAgeyAK
KyAgICB7CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxGdW5jdGlvbkltcGw8RnVuY3Rpb25U
eXBlPio+KG1faW1wbC5nZXQoKSk7CiAgICAgfQogCkBAIC02OTIsMTEgKzY5OCwxNiBAQCBwdWJs
aWM6CiAgICAgewogICAgIH0KIAotICAgIEZ1bmN0aW9uKFBhc3NSZWZQdHI8RnVuY3Rpb25JbXBs
PFIgKCk+PiBpbXBsKQorICAgIEZ1bmN0aW9uKFJlZlB0cjxGdW5jdGlvbkltcGw8UiAoKT4+JiBp
bXBsKQogICAgICAgICA6IEZ1bmN0aW9uQmFzZShpbXBsKQogICAgIHsKICAgICB9CiAKKyAgICBG
dW5jdGlvbihSZWY8RnVuY3Rpb25JbXBsPFIgKCk+PiYmIGltcGwpCisgICAgICAgIDogRnVuY3Rp
b25CYXNlKFdURk1vdmUoaW1wbCkpCisgICAgeworICAgIH0KKwogICAgIFIgb3BlcmF0b3IoKSgp
IGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoIWlzTnVsbCgpKTsKQEAgLTczNSw0MyArNzQ2
LDQzIEBAIHB1YmxpYzoKIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0aW9uVHlwZT4KIEZ1bmN0aW9u
PHR5cGVuYW1lIEZ1bmN0aW9uV3JhcHBlcjxGdW5jdGlvblR5cGU+OjpSZXN1bHRUeXBlICgpPiBi
aW5kKEZ1bmN0aW9uVHlwZSBmdW5jdGlvbikKIHsKLSAgICByZXR1cm4gRnVuY3Rpb248dHlwZW5h
bWUgRnVuY3Rpb25XcmFwcGVyPEZ1bmN0aW9uVHlwZT46OlJlc3VsdFR5cGUgKCk+KGFkb3B0UmVm
KG5ldyBCb3VuZEZ1bmN0aW9uSW1wbDxGdW5jdGlvbldyYXBwZXI8RnVuY3Rpb25UeXBlPiwgdHlw
ZW5hbWUgRnVuY3Rpb25XcmFwcGVyPEZ1bmN0aW9uVHlwZT46OlJlc3VsdFR5cGUgKCk+KEZ1bmN0
aW9uV3JhcHBlcjxGdW5jdGlvblR5cGU+KGZ1bmN0aW9uKSkpKTsKKyAgICByZXR1cm4gRnVuY3Rp
b248dHlwZW5hbWUgRnVuY3Rpb25XcmFwcGVyPEZ1bmN0aW9uVHlwZT46OlJlc3VsdFR5cGUgKCk+
KGFkb3B0UmVmKCpuZXcgQm91bmRGdW5jdGlvbkltcGw8RnVuY3Rpb25XcmFwcGVyPEZ1bmN0aW9u
VHlwZT4sIHR5cGVuYW1lIEZ1bmN0aW9uV3JhcHBlcjxGdW5jdGlvblR5cGU+OjpSZXN1bHRUeXBl
ICgpPihGdW5jdGlvbldyYXBwZXI8RnVuY3Rpb25UeXBlPihmdW5jdGlvbikpKSk7CiB9CiAKIHRl
bXBsYXRlPHR5cGVuYW1lIEZ1bmN0aW9uVHlwZSwgdHlwZW5hbWUgQTE+CiBGdW5jdGlvbjx0eXBl
bmFtZSBGdW5jdGlvbldyYXBwZXI8RnVuY3Rpb25UeXBlPjo6UmVzdWx0VHlwZSAoKT4gYmluZChG
dW5jdGlvblR5cGUgZnVuY3Rpb24sIGNvbnN0IEExJiBhMSkKIHsKLSAgICByZXR1cm4gRnVuY3Rp
b248dHlwZW5hbWUgRnVuY3Rpb25XcmFwcGVyPEZ1bmN0aW9uVHlwZT46OlJlc3VsdFR5cGUgKCk+
KGFkb3B0UmVmKG5ldyBCb3VuZEZ1bmN0aW9uSW1wbDxGdW5jdGlvbldyYXBwZXI8RnVuY3Rpb25U
eXBlPiwgdHlwZW5hbWUgRnVuY3Rpb25XcmFwcGVyPEZ1bmN0aW9uVHlwZT46OlJlc3VsdFR5cGUg
KEExKT4oRnVuY3Rpb25XcmFwcGVyPEZ1bmN0aW9uVHlwZT4oZnVuY3Rpb24pLCBhMSkpKTsKKyAg
ICByZXR1cm4gRnVuY3Rpb248dHlwZW5hbWUgRnVuY3Rpb25XcmFwcGVyPEZ1bmN0aW9uVHlwZT46
OlJlc3VsdFR5cGUgKCk+KGFkb3B0UmVmKCpuZXcgQm91bmRGdW5jdGlvbkltcGw8RnVuY3Rpb25X
cmFwcGVyPEZ1bmN0aW9uVHlwZT4sIHR5cGVuYW1lIEZ1bmN0aW9uV3JhcHBlcjxGdW5jdGlvblR5
cGU+OjpSZXN1bHRUeXBlIChBMSk+KEZ1bmN0aW9uV3JhcHBlcjxGdW5jdGlvblR5cGU+KGZ1bmN0
aW9uKSwgYTEpKSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0aW9uVHlwZSwgdHlwZW5h
bWUgQTEsIHR5cGVuYW1lIEEyPgogRnVuY3Rpb248dHlwZW5hbWUgRnVuY3Rpb25XcmFwcGVyPEZ1
bmN0aW9uVHlwZT46OlJlc3VsdFR5cGUgKCk+IGJpbmQoRnVuY3Rpb25UeXBlIGZ1bmN0aW9uLCBj
b25zdCBBMSYgYTEsIGNvbnN0IEEyJiBhMikKIHsKLSAgICByZXR1cm4gRnVuY3Rpb248dHlwZW5h
bWUgRnVuY3Rpb25XcmFwcGVyPEZ1bmN0aW9uVHlwZT46OlJlc3VsdFR5cGUgKCk+KGFkb3B0UmVm
KG5ldyBCb3VuZEZ1bmN0aW9uSW1wbDxGdW5jdGlvbldyYXBwZXI8RnVuY3Rpb25UeXBlPiwgdHlw
ZW5hbWUgRnVuY3Rpb25XcmFwcGVyPEZ1bmN0aW9uVHlwZT46OlJlc3VsdFR5cGUgKEExLCBBMik+
KEZ1bmN0aW9uV3JhcHBlcjxGdW5jdGlvblR5cGU+KGZ1bmN0aW9uKSwgYTEsIGEyKSkpOworICAg
IHJldHVybiBGdW5jdGlvbjx0eXBlbmFtZSBGdW5jdGlvbldyYXBwZXI8RnVuY3Rpb25UeXBlPjo6
UmVzdWx0VHlwZSAoKT4oYWRvcHRSZWYoKm5ldyBCb3VuZEZ1bmN0aW9uSW1wbDxGdW5jdGlvbldy
YXBwZXI8RnVuY3Rpb25UeXBlPiwgdHlwZW5hbWUgRnVuY3Rpb25XcmFwcGVyPEZ1bmN0aW9uVHlw
ZT46OlJlc3VsdFR5cGUgKEExLCBBMik+KEZ1bmN0aW9uV3JhcHBlcjxGdW5jdGlvblR5cGU+KGZ1
bmN0aW9uKSwgYTEsIGEyKSkpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdGlvblR5cGUs
IHR5cGVuYW1lIEExLCB0eXBlbmFtZSBBMiwgdHlwZW5hbWUgQTM+CiBGdW5jdGlvbjx0eXBlbmFt
ZSBGdW5jdGlvbldyYXBwZXI8RnVuY3Rpb25UeXBlPjo6UmVzdWx0VHlwZSAoKT4gYmluZChGdW5j
dGlvblR5cGUgZnVuY3Rpb24sIGNvbnN0IEExJiBhMSwgY29uc3QgQTImIGEyLCBjb25zdCBBMyYg
YTMpCiB7Ci0gICAgcmV0dXJuIEZ1bmN0aW9uPHR5cGVuYW1lIEZ1bmN0aW9uV3JhcHBlcjxGdW5j
dGlvblR5cGU+OjpSZXN1bHRUeXBlICgpPihhZG9wdFJlZihuZXcgQm91bmRGdW5jdGlvbkltcGw8
RnVuY3Rpb25XcmFwcGVyPEZ1bmN0aW9uVHlwZT4sIHR5cGVuYW1lIEZ1bmN0aW9uV3JhcHBlcjxG
dW5jdGlvblR5cGU+OjpSZXN1bHRUeXBlIChBMSwgQTIsIEEzKT4oRnVuY3Rpb25XcmFwcGVyPEZ1
bmN0aW9uVHlwZT4oZnVuY3Rpb24pLCBhMSwgYTIsIGEzKSkpOworICAgIHJldHVybiBGdW5jdGlv
bjx0eXBlbmFtZSBGdW5jdGlvbldyYXBwZXI8RnVuY3Rpb25UeXBlPjo6UmVzdWx0VHlwZSAoKT4o
YWRvcHRSZWYoKm5ldyBCb3VuZEZ1bmN0aW9uSW1wbDxGdW5jdGlvbldyYXBwZXI8RnVuY3Rpb25U
eXBlPiwgdHlwZW5hbWUgRnVuY3Rpb25XcmFwcGVyPEZ1bmN0aW9uVHlwZT46OlJlc3VsdFR5cGUg
KEExLCBBMiwgQTMpPihGdW5jdGlvbldyYXBwZXI8RnVuY3Rpb25UeXBlPihmdW5jdGlvbiksIGEx
LCBhMiwgYTMpKSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0aW9uVHlwZSwgdHlwZW5h
bWUgQTEsIHR5cGVuYW1lIEEyLCB0eXBlbmFtZSBBMywgdHlwZW5hbWUgQTQ+CiBGdW5jdGlvbjx0
eXBlbmFtZSBGdW5jdGlvbldyYXBwZXI8RnVuY3Rpb25UeXBlPjo6UmVzdWx0VHlwZSAoKT4gYmlu
ZChGdW5jdGlvblR5cGUgZnVuY3Rpb24sIGNvbnN0IEExJiBhMSwgY29uc3QgQTImIGEyLCBjb25z
dCBBMyYgYTMsIGNvbnN0IEE0JiBhNCkKIHsKLSAgICByZXR1cm4gRnVuY3Rpb248dHlwZW5hbWUg
RnVuY3Rpb25XcmFwcGVyPEZ1bmN0aW9uVHlwZT46OlJlc3VsdFR5cGUgKCk+KGFkb3B0UmVmKG5l
dyBCb3VuZEZ1bmN0aW9uSW1wbDxGdW5jdGlvbldyYXBwZXI8RnVuY3Rpb25UeXBlPiwgdHlwZW5h
bWUgRnVuY3Rpb25XcmFwcGVyPEZ1bmN0aW9uVHlwZT46OlJlc3VsdFR5cGUgKEExLCBBMiwgQTMs
IEE0KT4oRnVuY3Rpb25XcmFwcGVyPEZ1bmN0aW9uVHlwZT4oZnVuY3Rpb24pLCBhMSwgYTIsIGEz
LCBhNCkpKTsKKyAgICByZXR1cm4gRnVuY3Rpb248dHlwZW5hbWUgRnVuY3Rpb25XcmFwcGVyPEZ1
bmN0aW9uVHlwZT46OlJlc3VsdFR5cGUgKCk+KGFkb3B0UmVmKCpuZXcgQm91bmRGdW5jdGlvbklt
cGw8RnVuY3Rpb25XcmFwcGVyPEZ1bmN0aW9uVHlwZT4sIHR5cGVuYW1lIEZ1bmN0aW9uV3JhcHBl
cjxGdW5jdGlvblR5cGU+OjpSZXN1bHRUeXBlIChBMSwgQTIsIEEzLCBBNCk+KEZ1bmN0aW9uV3Jh
cHBlcjxGdW5jdGlvblR5cGU+KGZ1bmN0aW9uKSwgYTEsIGEyLCBhMywgYTQpKSk7CiB9CiAKIHRl
bXBsYXRlPHR5cGVuYW1lIEZ1bmN0aW9uVHlwZSwgdHlwZW5hbWUgQTEsIHR5cGVuYW1lIEEyLCB0
eXBlbmFtZSBBMywgdHlwZW5hbWUgQTQsIHR5cGVuYW1lIEE1PgogRnVuY3Rpb248dHlwZW5hbWUg
RnVuY3Rpb25XcmFwcGVyPEZ1bmN0aW9uVHlwZT46OlJlc3VsdFR5cGUgKCk+IGJpbmQoRnVuY3Rp
b25UeXBlIGZ1bmN0aW9uLCBjb25zdCBBMSYgYTEsIGNvbnN0IEEyJiBhMiwgY29uc3QgQTMmIGEz
LCBjb25zdCBBNCYgYTQsIGNvbnN0IEE1JiBhNSkKIHsKLSAgICByZXR1cm4gRnVuY3Rpb248dHlw
ZW5hbWUgRnVuY3Rpb25XcmFwcGVyPEZ1bmN0aW9uVHlwZT46OlJlc3VsdFR5cGUgKCk+KGFkb3B0
UmVmKG5ldyBCb3VuZEZ1bmN0aW9uSW1wbDxGdW5jdGlvbldyYXBwZXI8RnVuY3Rpb25UeXBlPiwg
dHlwZW5hbWUgRnVuY3Rpb25XcmFwcGVyPEZ1bmN0aW9uVHlwZT46OlJlc3VsdFR5cGUgKEExLCBB
MiwgQTMsIEE0LCBBNSk+KEZ1bmN0aW9uV3JhcHBlcjxGdW5jdGlvblR5cGU+KGZ1bmN0aW9uKSwg
YTEsIGEyLCBhMywgYTQsIGE1KSkpOworICAgIHJldHVybiBGdW5jdGlvbjx0eXBlbmFtZSBGdW5j
dGlvbldyYXBwZXI8RnVuY3Rpb25UeXBlPjo6UmVzdWx0VHlwZSAoKT4oYWRvcHRSZWYoKm5ldyBC
b3VuZEZ1bmN0aW9uSW1wbDxGdW5jdGlvbldyYXBwZXI8RnVuY3Rpb25UeXBlPiwgdHlwZW5hbWUg
RnVuY3Rpb25XcmFwcGVyPEZ1bmN0aW9uVHlwZT46OlJlc3VsdFR5cGUgKEExLCBBMiwgQTMsIEE0
LCBBNSk+KEZ1bmN0aW9uV3JhcHBlcjxGdW5jdGlvblR5cGU+KGZ1bmN0aW9uKSwgYTEsIGEyLCBh
MywgYTQsIGE1KSkpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdGlvblR5cGUsIHR5cGVu
YW1lIEExLCB0eXBlbmFtZSBBMiwgdHlwZW5hbWUgQTMsIHR5cGVuYW1lIEE0LCB0eXBlbmFtZSBB
NSwgdHlwZW5hbWUgQTY+CiBGdW5jdGlvbjx0eXBlbmFtZSBGdW5jdGlvbldyYXBwZXI8RnVuY3Rp
b25UeXBlPjo6UmVzdWx0VHlwZSAoKT4gYmluZChGdW5jdGlvblR5cGUgZnVuY3Rpb24sIGNvbnN0
IEExJiBhMSwgY29uc3QgQTImIGEyLCBjb25zdCBBMyYgYTMsIGNvbnN0IEE0JiBhNCwgY29uc3Qg
QTUmIGE1LCBjb25zdCBBNiYgYTYpCiB7Ci0gICAgcmV0dXJuIEZ1bmN0aW9uPHR5cGVuYW1lIEZ1
bmN0aW9uV3JhcHBlcjxGdW5jdGlvblR5cGU+OjpSZXN1bHRUeXBlICgpPihhZG9wdFJlZihuZXcg
Qm91bmRGdW5jdGlvbkltcGw8RnVuY3Rpb25XcmFwcGVyPEZ1bmN0aW9uVHlwZT4sIHR5cGVuYW1l
IEZ1bmN0aW9uV3JhcHBlcjxGdW5jdGlvblR5cGU+OjpSZXN1bHRUeXBlIChBMSwgQTIsIEEzLCBB
NCwgQTUsIEE2KT4oRnVuY3Rpb25XcmFwcGVyPEZ1bmN0aW9uVHlwZT4oZnVuY3Rpb24pLCBhMSwg
YTIsIGEzLCBhNCwgYTUsIGE2KSkpOworICAgIHJldHVybiBGdW5jdGlvbjx0eXBlbmFtZSBGdW5j
dGlvbldyYXBwZXI8RnVuY3Rpb25UeXBlPjo6UmVzdWx0VHlwZSAoKT4oYWRvcHRSZWYoKm5ldyBC
b3VuZEZ1bmN0aW9uSW1wbDxGdW5jdGlvbldyYXBwZXI8RnVuY3Rpb25UeXBlPiwgdHlwZW5hbWUg
RnVuY3Rpb25XcmFwcGVyPEZ1bmN0aW9uVHlwZT46OlJlc3VsdFR5cGUgKEExLCBBMiwgQTMsIEE0
LCBBNSwgQTYpPihGdW5jdGlvbldyYXBwZXI8RnVuY3Rpb25UeXBlPihmdW5jdGlvbiksIGExLCBh
MiwgYTMsIGE0LCBhNSwgYTYpKSk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3Rm
L01ldGFBbGxvY2F0b3IuY3BwIGIvU291cmNlL1dURi93dGYvTWV0YUFsbG9jYXRvci5jcHAKaW5k
ZXggZGQwNjU5MjA1OGYyZDIxOGU5NzZiNDY0ZmMyMzk4YmIwNTk3MDYyOS4uNmU0NGI2NzI0YjI4
M2RkNGM3NmQxNmVlNDQ4Yzc4MzA1MmU4MmZhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYv
TWV0YUFsbG9jYXRvci5jcHAKKysrIGIvU291cmNlL1dURi93dGYvTWV0YUFsbG9jYXRvci5jcHAK
QEAgLTE0OCwxMiArMTQ4LDEyIEBAIE1ldGFBbGxvY2F0b3I6Ok1ldGFBbGxvY2F0b3Ioc2l6ZV90
IGFsbG9jYXRpb25HcmFudWxlLCBzaXplX3QgcGFnZVNpemUpCiAgICAgQVNTRVJUKHN0YXRpY19j
YXN0PHNpemVfdD4oMSkgPDwgbV9sb2dBbGxvY2F0aW9uR3JhbnVsZSA9PSBtX2FsbG9jYXRpb25H
cmFudWxlKTsKIH0KIAotUGFzc1JlZlB0cjxNZXRhQWxsb2NhdG9ySGFuZGxlPiBNZXRhQWxsb2Nh
dG9yOjphbGxvY2F0ZShzaXplX3Qgc2l6ZUluQnl0ZXMsIHZvaWQqIG93bmVyVUlEKQorUmVmUHRy
PE1ldGFBbGxvY2F0b3JIYW5kbGU+IE1ldGFBbGxvY2F0b3I6OmFsbG9jYXRlKHNpemVfdCBzaXpl
SW5CeXRlcywgdm9pZCogb3duZXJVSUQpCiB7CiAgICAgTG9ja0hvbGRlciBsb2NrZXIoJm1fbG9j
ayk7CiAKICAgICBpZiAoIXNpemVJbkJ5dGVzKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgCiAgICAgc2l6ZUluQnl0ZXMgPSByb3VuZFVwKHNpemVJbkJ5
dGVzKTsKICAgICAKQEAgLTE2NCw3ICsxNjQsNyBAQCBQYXNzUmVmUHRyPE1ldGFBbGxvY2F0b3JI
YW5kbGU+IE1ldGFBbGxvY2F0b3I6OmFsbG9jYXRlKHNpemVfdCBzaXplSW5CeXRlcywgdm9pZAog
ICAgICAgICAKICAgICAgICAgc3RhcnQgPSBhbGxvY2F0ZU5ld1NwYWNlKG51bWJlck9mUGFnZXMp
OwogICAgICAgICBpZiAoIXN0YXJ0KQotICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgCiAgICAgICAgIEFTU0VSVChudW1iZXJPZlBhZ2Vz
ID49IHJlcXVlc3RlZE51bWJlck9mUGFnZXMpOwogICAgICAgICAKQEAgLTE4NiwxMiArMTg2LDEy
IEBAIFBhc3NSZWZQdHI8TWV0YUFsbG9jYXRvckhhbmRsZT4gTWV0YUFsbG9jYXRvcjo6YWxsb2Nh
dGUoc2l6ZV90IHNpemVJbkJ5dGVzLCB2b2lkCiAgICAgbV9udW1BbGxvY2F0aW9ucysrOwogI2Vu
ZGlmCiAKLSAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBoYW5kbGUgPSBuZXcgTWV0YUFsbG9jYXRv
ckhhbmRsZSh0aGlzLCBzdGFydCwgc2l6ZUluQnl0ZXMsIG93bmVyVUlEKTsKKyAgICBhdXRvIGhh
bmRsZSA9IGFkb3B0UmVmKCpuZXcgTWV0YUFsbG9jYXRvckhhbmRsZSh0aGlzLCBzdGFydCwgc2l6
ZUluQnl0ZXMsIG93bmVyVUlEKSk7CiAKICAgICBpZiAoVU5MSUtFTFkoISFtX3RyYWNrZXIpKQot
ICAgICAgICBtX3RyYWNrZXItPm5vdGlmeShoYW5kbGUpOworICAgICAgICBtX3RyYWNrZXItPm5v
dGlmeShoYW5kbGUucHRyKCkpOwogCi0gICAgcmV0dXJuIGFkb3B0UmVmKGhhbmRsZSk7CisgICAg
cmV0dXJuIFdURk1vdmUoaGFuZGxlKTsKIH0KIAogTWV0YUFsbG9jYXRvcjo6U3RhdGlzdGljcyBN
ZXRhQWxsb2NhdG9yOjpjdXJyZW50U3RhdGlzdGljcygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L3d0Zi9NZXRhQWxsb2NhdG9yLmggYi9Tb3VyY2UvV1RGL3d0Zi9NZXRhQWxsb2NhdG9yLmgKaW5k
ZXggOWRkMzc1Y2FkNTRlY2EzMGVmN2E0ZWY5ZDcyMjA0NDc5YzFjMGQ2My4uODczOTAxYmRlNmUx
ZjkwYjQ3MWJkMTNhN2U4NjlkNzcxYjJjMDIwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYv
TWV0YUFsbG9jYXRvci5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0b3IuaApAQCAt
NjgsNyArNjgsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZpcnR1
YWwgfk1ldGFBbGxvY2F0b3IoKTsKICAgICAKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgUGFzc1Jl
ZlB0cjxNZXRhQWxsb2NhdG9ySGFuZGxlPiBhbGxvY2F0ZShzaXplX3Qgc2l6ZUluQnl0ZXMsIHZv
aWQqIG93bmVyVUlEKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgUmVmUHRyPE1ldGFBbGxvY2F0
b3JIYW5kbGU+IGFsbG9jYXRlKHNpemVfdCBzaXplSW5CeXRlcywgdm9pZCogb3duZXJVSUQpOwog
CiAgICAgdm9pZCB0cmFja0FsbG9jYXRpb25zKE1ldGFBbGxvY2F0b3JUcmFja2VyKiB0cmFja2Vy
KQogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1BhcmFsbGVsSm9ic0dlbmVyaWMu
aCBiL1NvdXJjZS9XVEYvd3RmL1BhcmFsbGVsSm9ic0dlbmVyaWMuaAppbmRleCAzZTJlMjlkNjFh
YTU5Y2FmMWMyYWQ1OGEyN2QzZDkyNTI5ZDBkZDg0Li45ZmRkODhmMzJhY2VjODJhNDI0ZDg5NmZi
YzUyMmYzMDFmNmM1YWY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9QYXJhbGxlbEpvYnNH
ZW5lcmljLmgKKysrIGIvU291cmNlL1dURi93dGYvUGFyYWxsZWxKb2JzR2VuZXJpYy5oCkBAIC02
Niw3ICs2Niw3IEBAIHB1YmxpYzoKIAogICAgICAgICB2b2lkIHdhaXRGb3JGaW5pc2goKTsKIAot
ICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxUaHJlYWRQcml2YXRlPiBjcmVhdGUoKQorICAgICAg
ICBzdGF0aWMgUmVmUHRyPFRocmVhZFByaXZhdGU+IGNyZWF0ZSgpCiAgICAgICAgIHsKICAgICAg
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGhyZWFkUHJpdmF0ZSgpKTsKICAgICAgICAgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9BdG9taWNTdHJpbmdJbXBsLmNwcCBiL1Nv
dXJjZS9XVEYvd3RmL3RleHQvQXRvbWljU3RyaW5nSW1wbC5jcHAKaW5kZXggOTA5NTMzYzk5MDhm
ZTYwMGQxZThiOWU3MDNiY2Q4ZTM0ODM5OTI3Yy4uMDI2NmNmM2U5NGFhOTFiMzMyZWE1ZGRlYTlj
ODdiODEyMmM5OWVhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9BdG9taWNTdHJp
bmdJbXBsLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21pY1N0cmluZ0ltcGwuY3Bw
CkBAIC0yMTksNyArMjE5LDcgQEAgc3RydWN0IEhhc2hBbmRVVEY4Q2hhcmFjdGVyc1RyYW5zbGF0
b3IgewogICAgIHN0YXRpYyB2b2lkIHRyYW5zbGF0ZShTdHJpbmdJbXBsKiYgbG9jYXRpb24sIGNv
bnN0IEhhc2hBbmRVVEY4Q2hhcmFjdGVycyYgYnVmZmVyLCB1bnNpZ25lZCBoYXNoKQogICAgIHsK
ICAgICAgICAgVUNoYXIqIHRhcmdldDsKLSAgICAgICAgUmVmUHRyPFN0cmluZ0ltcGw+IG5ld1N0
cmluZyA9IFN0cmluZ0ltcGw6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoYnVmZmVyLnV0ZjE2TGVuZ3Ro
LCB0YXJnZXQpOworICAgICAgICBhdXRvIG5ld1N0cmluZyA9IFN0cmluZ0ltcGw6OmNyZWF0ZVVu
aW5pdGlhbGl6ZWQoYnVmZmVyLnV0ZjE2TGVuZ3RoLCB0YXJnZXQpOwogCiAgICAgICAgIGJvb2wg
aXNBbGxBU0NJSTsKICAgICAgICAgY29uc3QgY2hhciogc291cmNlID0gYnVmZmVyLmNoYXJhY3Rl
cnM7CkBAIC0yMjksNyArMjI5LDcgQEAgc3RydWN0IEhhc2hBbmRVVEY4Q2hhcmFjdGVyc1RyYW5z
bGF0b3IgewogICAgICAgICBpZiAoaXNBbGxBU0NJSSkKICAgICAgICAgICAgIG5ld1N0cmluZyA9
IFN0cmluZ0ltcGw6OmNyZWF0ZShidWZmZXIuY2hhcmFjdGVycywgYnVmZmVyLmxlbmd0aCk7CiAK
LSAgICAgICAgbG9jYXRpb24gPSBuZXdTdHJpbmcubGVha1JlZigpOworICAgICAgICBsb2NhdGlv
biA9ICZuZXdTdHJpbmcubGVha1JlZigpOwogICAgICAgICBsb2NhdGlvbi0+c2V0SGFzaChoYXNo
KTsKICAgICAgICAgbG9jYXRpb24tPnNldElzQXRvbWljKHRydWUpOwogICAgIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvQ1N0cmluZy5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0
L0NTdHJpbmcuY3BwCmluZGV4IGQxZjE4NmI0YWYyNGIyMDVjNmU2YTliYWY4ZjFiODBkYzdkNmQ0
ZGIuLjIxYjM3ZWJhOGMyNTQzOTZmZjFmYmZjMTA1Y2YzMzgzZDQ2MGE4MjQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XVEYvd3RmL3RleHQvQ1N0cmluZy5jcHAKKysrIGIvU291cmNlL1dURi93dGYvdGV4
dC9DU3RyaW5nLmNwcApAQCAtMzIsMTQgKzMyLDE0IEBACiAKIG5hbWVzcGFjZSBXVEYgewogCi1Q
YXNzUmVmUHRyPENTdHJpbmdCdWZmZXI+IENTdHJpbmdCdWZmZXI6OmNyZWF0ZVVuaW5pdGlhbGl6
ZWQoc2l6ZV90IGxlbmd0aCkKK1JlZjxDU3RyaW5nQnVmZmVyPiBDU3RyaW5nQnVmZmVyOjpjcmVh
dGVVbmluaXRpYWxpemVkKHNpemVfdCBsZW5ndGgpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQobGVu
Z3RoIDwgKHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSAtIHNpemVvZihDU3Ry
aW5nQnVmZmVyKSkpOwogCiAgICAgLy8gVGhlICsxIGlzIGZvciB0aGUgdGVybWluYXRpbmcgbnVs
bCBjaGFyYWN0ZXIuCiAgICAgc2l6ZV90IHNpemUgPSBzaXplb2YoQ1N0cmluZ0J1ZmZlcikgKyBs
ZW5ndGggKyAxOwogICAgIENTdHJpbmdCdWZmZXIqIHN0cmluZ0J1ZmZlciA9IHN0YXRpY19jYXN0
PENTdHJpbmdCdWZmZXIqPihmYXN0TWFsbG9jKHNpemUpKTsKLSAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IChOb3ROdWxsLCBzdHJpbmdCdWZmZXIpIENTdHJpbmdCdWZmZXIobGVuZ3RoKSk7CisgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgKE5vdE51bGwsIHN0cmluZ0J1ZmZlcikgQ1N0cmluZ0J1ZmZl
cihsZW5ndGgpKTsKIH0KIAogQ1N0cmluZzo6Q1N0cmluZyhjb25zdCBjaGFyKiBzdHIpCkBAIC03
Niw3ICs3Niw3IEBAIGNoYXIqIENTdHJpbmc6Om11dGFibGVEYXRhKCkKICAgICAgICAgcmV0dXJu
IDA7CiAgICAgcmV0dXJuIG1fYnVmZmVyLT5tdXRhYmxlRGF0YSgpOwogfQotICAgIAorCiBDU3Ry
aW5nIENTdHJpbmc6Om5ld1VuaW5pdGlhbGl6ZWQoc2l6ZV90IGxlbmd0aCwgY2hhciomIGNoYXJh
Y3RlckJ1ZmZlcikKIHsKICAgICBDU3RyaW5nIHJlc3VsdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
VEYvd3RmL3RleHQvQ1N0cmluZy5oIGIvU291cmNlL1dURi93dGYvdGV4dC9DU3RyaW5nLmgKaW5k
ZXggMjlkM2IwZWYxYjY5ZDdhNGI3MjA2ZGEwYzhiZmY4MjUwZGRhZmFlNy4uNGQ4ZDgwMzk5YzY5
MDBiMTMzZTcxNWM0MzA3ZDhkNDI0MzgzZDZmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYv
dGV4dC9DU3RyaW5nLmgKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9DU3RyaW5nLmgKQEAgLTI4
LDcgKzI4LDcgQEAKIAogI2luY2x1ZGUgPHd0Zi9IYXNoRnVuY3Rpb25zLmg+CiAjaW5jbHVkZSA8
d3RmL0hhc2hUcmFpdHMuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUg
PHd0Zi9SZWYuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCiBuYW1lc3BhY2UgV1RG
IHsKQEAgLTQzLDcgKzQzLDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3Mg
Q1N0cmluZzsKIAotICAgIHN0YXRpYyBQYXNzUmVmUHRyPENTdHJpbmdCdWZmZXI+IGNyZWF0ZVVu
aW5pdGlhbGl6ZWQoc2l6ZV90IGxlbmd0aCk7CisgICAgc3RhdGljIFJlZjxDU3RyaW5nQnVmZmVy
PiBjcmVhdGVVbmluaXRpYWxpemVkKHNpemVfdCBsZW5ndGgpOwogCiAgICAgQ1N0cmluZ0J1ZmZl
cihzaXplX3QgbGVuZ3RoKSA6IG1fbGVuZ3RoKGxlbmd0aCkgeyB9CiAgICAgY2hhciogbXV0YWJs
ZURhdGEoKSB7IHJldHVybiByZWludGVycHJldF9jYXN0X3B0cjxjaGFyKj4odGhpcyArIDEpOyB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuY3BwIGIvU291
cmNlL1dURi93dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmNwcAppbmRleCAxZDZhZTYyMWQxODk2MWVj
OTEzY2Q3ZGRjMzAwZWJhM2JlZGZiOGM1Li5kNTQzYmE0YzA3ZDY3NDEyY2IzYjI1ODc1MWJmZjNj
NzljZTc1YmY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0J1aWxkZXIu
Y3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nQnVpbGRlci5jcHAKQEAgLTU5LDcg
KzU5LDcgQEAgdm9pZCBTdHJpbmdCdWlsZGVyOjpyZWlmeVN0cmluZygpIGNvbnN0CiAgICAgaWYg
KG1fbGVuZ3RoID09IG1fYnVmZmVyLT5sZW5ndGgoKSkKICAgICAgICAgbV9zdHJpbmcgPSBtX2J1
ZmZlci5nZXQoKTsKICAgICBlbHNlCi0gICAgICAgIG1fc3RyaW5nID0gU3RyaW5nSW1wbDo6Y3Jl
YXRlU3Vic3RyaW5nU2hhcmluZ0ltcGwobV9idWZmZXIsIDAsIG1fbGVuZ3RoKTsKKyAgICAgICAg
bV9zdHJpbmcgPSBTdHJpbmdJbXBsOjpjcmVhdGVTdWJzdHJpbmdTaGFyaW5nSW1wbChtX2J1ZmZl
ci5nZXQoKSwgMCwgbV9sZW5ndGgpOwogfQogCiB2b2lkIFN0cmluZ0J1aWxkZXI6OnJlc2l6ZSh1
bnNpZ25lZCBuZXdTaXplKQpAQCAtMTQ3LDcgKzE0Nyw3IEBAIHZvaWQgU3RyaW5nQnVpbGRlcjo6
cmVhbGxvY2F0ZUJ1ZmZlcjxMQ2hhcj4odW5zaWduZWQgcmVxdWlyZWRMZW5ndGgpCiAgICAgQVNT
RVJUKG1fYnVmZmVyLT5pczhCaXQoKSk7CiAgICAgCiAgICAgaWYgKG1fYnVmZmVyLT5oYXNPbmVS
ZWYoKSkKLSAgICAgICAgbV9idWZmZXIgPSBTdHJpbmdJbXBsOjpyZWFsbG9jYXRlKG1fYnVmZmVy
LnJlbGVhc2UoKSwgcmVxdWlyZWRMZW5ndGgsIG1fYnVmZmVyQ2hhcmFjdGVyczgpOworICAgICAg
ICBtX2J1ZmZlciA9IFN0cmluZ0ltcGw6OnJlYWxsb2NhdGUoV1RGTW92ZShtX2J1ZmZlciksIHJl
cXVpcmVkTGVuZ3RoLCBtX2J1ZmZlckNoYXJhY3RlcnM4KTsKICAgICBlbHNlCiAgICAgICAgIGFs
bG9jYXRlQnVmZmVyKG1fYnVmZmVyLT5jaGFyYWN0ZXJzOCgpLCByZXF1aXJlZExlbmd0aCk7CiB9
CkBAIC0xNjIsNyArMTYyLDcgQEAgdm9pZCBTdHJpbmdCdWlsZGVyOjpyZWFsbG9jYXRlQnVmZmVy
PFVDaGFyPih1bnNpZ25lZCByZXF1aXJlZExlbmd0aCkKICAgICBpZiAobV9idWZmZXItPmlzOEJp
dCgpKQogICAgICAgICBhbGxvY2F0ZUJ1ZmZlclVwQ29udmVydChtX2J1ZmZlci0+Y2hhcmFjdGVy
czgoKSwgcmVxdWlyZWRMZW5ndGgpOwogICAgIGVsc2UgaWYgKG1fYnVmZmVyLT5oYXNPbmVSZWYo
KSkKLSAgICAgICAgbV9idWZmZXIgPSBTdHJpbmdJbXBsOjpyZWFsbG9jYXRlKG1fYnVmZmVyLnJl
bGVhc2UoKSwgcmVxdWlyZWRMZW5ndGgsIG1fYnVmZmVyQ2hhcmFjdGVyczE2KTsKKyAgICAgICAg
bV9idWZmZXIgPSBTdHJpbmdJbXBsOjpyZWFsbG9jYXRlKFdURk1vdmUobV9idWZmZXIpLCByZXF1
aXJlZExlbmd0aCwgbV9idWZmZXJDaGFyYWN0ZXJzMTYpOwogICAgIGVsc2UKICAgICAgICAgYWxs
b2NhdGVCdWZmZXIobV9idWZmZXItPmNoYXJhY3RlcnMxNigpLCByZXF1aXJlZExlbmd0aCk7CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuY3BwIGIvU291cmNl
L1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmNwcAppbmRleCBmYzE2Mjc0ZWMwNGJlNzRjYzJiZjlm
MGY0OTFhMjIzMjRlMzc4ZDMyLi42MjAxYWE2NDY0ODY2N2U0OTU2NjQ4YzEzZGY0OWQ1NjlmODFm
ZmQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuY3BwCisrKyBi
L1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5jcHAKQEAgLTIwNCw4ICsyMDQsOCBAQCBS
ZWY8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6Y3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBs
ZW5ndGgsIFVDaGFyKiYgZGF0YSkKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJUeXBlPgot
aW5saW5lIFJlZjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpyZWFsbG9jYXRlSW50ZXJuYWwoUGFz
c1JlZlB0cjxTdHJpbmdJbXBsPiBvcmlnaW5hbFN0cmluZywgdW5zaWduZWQgbGVuZ3RoLCBDaGFy
VHlwZSomIGRhdGEpCi17ICAgCitpbmxpbmUgUmVmPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OnJl
YWxsb2NhdGVJbnRlcm5hbChSZWZQdHI8U3RyaW5nSW1wbD4mJiBvcmlnaW5hbFN0cmluZywgdW5z
aWduZWQgbGVuZ3RoLCBDaGFyVHlwZSomIGRhdGEpCit7CiAgICAgQVNTRVJUKG9yaWdpbmFsU3Ry
aW5nLT5oYXNPbmVSZWYoKSk7CiAgICAgQVNTRVJUKG9yaWdpbmFsU3RyaW5nLT5idWZmZXJPd25l
cnNoaXAoKSA9PSBCdWZmZXJJbnRlcm5hbCk7CiAKQEAgLTIyNSwxNiArMjI1LDE4IEBAIGlubGlu
ZSBSZWY8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6cmVhbGxvY2F0ZUludGVybmFsKFBhc3NSZWZQ
dHI8U3RyaW5nSW1wbD4gb3JpCiAgICAgcmV0dXJuIGNvbnN0cnVjdEludGVybmFsPENoYXJUeXBl
PihzdHJpbmcsIGxlbmd0aCk7CiB9CiAKLVJlZjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpyZWFs
bG9jYXRlKFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gb3JpZ2luYWxTdHJpbmcsIHVuc2lnbmVkIGxl
bmd0aCwgTENoYXIqJiBkYXRhKQorUmVmPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OnJlYWxsb2Nh
dGUoUmVmUHRyPFN0cmluZ0ltcGw+JiYgb3JpZ2luYWxTdHJpbmcsIHVuc2lnbmVkIGxlbmd0aCwg
TENoYXIqJiBkYXRhKQogeworICAgIEFTU0VSVChvcmlnaW5hbFN0cmluZyk7CiAgICAgQVNTRVJU
KG9yaWdpbmFsU3RyaW5nLT5pczhCaXQoKSk7Ci0gICAgcmV0dXJuIHJlYWxsb2NhdGVJbnRlcm5h
bChvcmlnaW5hbFN0cmluZywgbGVuZ3RoLCBkYXRhKTsKKyAgICByZXR1cm4gcmVhbGxvY2F0ZUlu
dGVybmFsKFdURk1vdmUob3JpZ2luYWxTdHJpbmcpLCBsZW5ndGgsIGRhdGEpOwogfQogCi1SZWY8
U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6cmVhbGxvY2F0ZShQYXNzUmVmUHRyPFN0cmluZ0ltcGw+
IG9yaWdpbmFsU3RyaW5nLCB1bnNpZ25lZCBsZW5ndGgsIFVDaGFyKiYgZGF0YSkKK1JlZjxTdHJp
bmdJbXBsPiBTdHJpbmdJbXBsOjpyZWFsbG9jYXRlKFJlZlB0cjxTdHJpbmdJbXBsPiYmIG9yaWdp
bmFsU3RyaW5nLCB1bnNpZ25lZCBsZW5ndGgsIFVDaGFyKiYgZGF0YSkKIHsKKyAgICBBU1NFUlQo
b3JpZ2luYWxTdHJpbmcpOwogICAgIEFTU0VSVCghb3JpZ2luYWxTdHJpbmctPmlzOEJpdCgpKTsK
LSAgICByZXR1cm4gcmVhbGxvY2F0ZUludGVybmFsKG9yaWdpbmFsU3RyaW5nLCBsZW5ndGgsIGRh
dGEpOworICAgIHJldHVybiByZWFsbG9jYXRlSW50ZXJuYWwoV1RGTW92ZShvcmlnaW5hbFN0cmlu
ZyksIGxlbmd0aCwgZGF0YSk7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyVHlwZT4KQEAg
LTI2NSw3ICsyNjcsNyBAQCBSZWY8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6Y3JlYXRlOEJpdElm
UG9zc2libGUoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbgogICAgICAgICByZXR1cm4g
KmVtcHR5KCk7CiAKICAgICBMQ2hhciogZGF0YTsKLSAgICBSZWZQdHI8U3RyaW5nSW1wbD4gc3Ry
aW5nID0gY3JlYXRlVW5pbml0aWFsaXplZEludGVybmFsTm9uRW1wdHkobGVuZ3RoLCBkYXRhKTsK
KyAgICBhdXRvIHN0cmluZyA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWRJbnRlcm5hbE5vbkVtcHR5KGxl
bmd0aCwgZGF0YSk7CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7
CiAgICAgICAgIGlmIChjaGFyYWN0ZXJzW2ldICYgMHhmZjAwKQpAQCAtMjczLDcgKzI3NSw3IEBA
IFJlZjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpjcmVhdGU4Qml0SWZQb3NzaWJsZShjb25zdCBV
Q2hhciogY2hhcmFjdGVycywgdW5zaWduCiAgICAgICAgIGRhdGFbaV0gPSBzdGF0aWNfY2FzdDxM
Q2hhcj4oY2hhcmFjdGVyc1tpXSk7CiAgICAgfQogCi0gICAgcmV0dXJuIHN0cmluZy5yZWxlYXNl
Tm9uTnVsbCgpOworICAgIHJldHVybiBzdHJpbmc7CiB9CiAKIFJlZjxTdHJpbmdJbXBsPiBTdHJp
bmdJbXBsOjpjcmVhdGU4Qml0SWZQb3NzaWJsZShjb25zdCBVQ2hhciogc3RyaW5nKQpAQCAtMjkx
LDkgKzI5Myw5IEBAIFJlZjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpjcmVhdGUoY29uc3QgTENo
YXIqIHN0cmluZykKICAgICByZXR1cm4gY3JlYXRlKHN0cmluZywgbGVuZ3RoKTsKIH0KIAotUmVm
PFN5bWJvbEltcGw+IFN0cmluZ0ltcGw6OmNyZWF0ZVN5bWJvbChQYXNzUmVmUHRyPFN0cmluZ0lt
cGw+IHJlcCkKK1JlZjxTeW1ib2xJbXBsPiBTdHJpbmdJbXBsOjpjcmVhdGVTeW1ib2woU3RyaW5n
SW1wbCogcmVwKQogewotICAgIFN0cmluZ0ltcGwqIG93bmVyUmVwID0gKHJlcC0+YnVmZmVyT3du
ZXJzaGlwKCkgPT0gQnVmZmVyU3Vic3RyaW5nKSA/IHJlcC0+c3Vic3RyaW5nQnVmZmVyKCkgOiBy
ZXAuZ2V0KCk7CisgICAgU3RyaW5nSW1wbCogb3duZXJSZXAgPSAocmVwLT5idWZmZXJPd25lcnNo
aXAoKSA9PSBCdWZmZXJTdWJzdHJpbmcpID8gcmVwLT5zdWJzdHJpbmdCdWZmZXIoKSA6IHJlcDsK
IAogICAgIC8vIFdlIGFsbG9jYXRlIGEgYnVmZmVyIHRoYXQgY29udGFpbnMKICAgICAvLyAxLiB0
aGUgU3RyaW5nSW1wbCBzdHJ1Y3QKQEAgLTQyNywxOSArNDI5LDE5IEBAIFNsb3dQYXRoOgogCiAg
ICAgLy8gRG8gYSBzbG93ZXIgaW1wbGVtZW50YXRpb24gZm9yIGNhc2VzIHRoYXQgaW5jbHVkZSBu
b24tQVNDSUkgY2hhcmFjdGVycy4KICAgICBVQ2hhciogZGF0YTE2OwotICAgIFJlZlB0cjxTdHJp
bmdJbXBsPiBuZXdJbXBsID0gY3JlYXRlVW5pbml0aWFsaXplZEludGVybmFsTm9uRW1wdHkobV9s
ZW5ndGgsIGRhdGExNik7CisgICAgYXV0byBuZXdJbXBsID0gY3JlYXRlVW5pbml0aWFsaXplZElu
dGVybmFsTm9uRW1wdHkobV9sZW5ndGgsIGRhdGExNik7CiAKICAgICBVRXJyb3JDb2RlIHN0YXR1
cyA9IFVfWkVST19FUlJPUjsKICAgICBpbnQzMl90IHJlYWxMZW5ndGggPSB1X3N0clRvTG93ZXIo
ZGF0YTE2LCBsZW5ndGgsIG1fZGF0YTE2LCBtX2xlbmd0aCwgIiIsICZzdGF0dXMpOwogICAgIGlm
IChVX1NVQ0NFU1Moc3RhdHVzKSAmJiByZWFsTGVuZ3RoID09IGxlbmd0aCkKLSAgICAgICAgcmV0
dXJuIG5ld0ltcGwucmVsZWFzZU5vbk51bGwoKTsKKyAgICAgICAgcmV0dXJuIG5ld0ltcGw7CiAK
ICAgICBuZXdJbXBsID0gY3JlYXRlVW5pbml0aWFsaXplZChyZWFsTGVuZ3RoLCBkYXRhMTYpOwog
ICAgIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKICAgICB1X3N0clRvTG93ZXIoZGF0YTE2LCByZWFs
TGVuZ3RoLCBtX2RhdGExNiwgbV9sZW5ndGgsICIiLCAmc3RhdHVzKTsKICAgICBpZiAoVV9GQUlM
VVJFKHN0YXR1cykpCiAgICAgICAgIHJldHVybiAqdGhpczsKLSAgICByZXR1cm4gbmV3SW1wbC5y
ZWxlYXNlTm9uTnVsbCgpOworICAgIHJldHVybiBuZXdJbXBsOwogfQogCiBSZWY8U3RyaW5nSW1w
bD4gU3RyaW5nSW1wbDo6Y29udmVydFRvVXBwZXJjYXNlV2l0aG91dExvY2FsZSgpCkBAIC00NTUs
NyArNDU3LDcgQEAgUmVmPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OmNvbnZlcnRUb1VwcGVyY2Fz
ZVdpdGhvdXRMb2NhbGUoKQogCiAgICAgaWYgKGlzOEJpdCgpKSB7CiAgICAgICAgIExDaGFyKiBk
YXRhODsKLSAgICAgICAgUmVmUHRyPFN0cmluZ0ltcGw+IG5ld0ltcGwgPSBjcmVhdGVVbmluaXRp
YWxpemVkKG1fbGVuZ3RoLCBkYXRhOCk7CisgICAgICAgIGF1dG8gbmV3SW1wbCA9IGNyZWF0ZVVu
aW5pdGlhbGl6ZWQobV9sZW5ndGgsIGRhdGE4KTsKICAgICAgICAgCiAgICAgICAgIC8vIERvIGEg
ZmFzdGVyIGxvb3AgZm9yIHRoZSBjYXNlIHdoZXJlIGFsbCB0aGUgY2hhcmFjdGVycyBhcmUgQVND
SUkuCiAgICAgICAgIHVuc2lnbmVkIG9yZWQgPSAwOwpAQCAtNDcyLDcgKzQ3NCw3IEBAIFJlZjxT
dHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpjb252ZXJ0VG9VcHBlcmNhc2VXaXRob3V0TG9jYWxlKCkK
ICNlbmRpZgogICAgICAgICB9CiAgICAgICAgIGlmICghKG9yZWQgJiB+MHg3RikpCi0gICAgICAg
ICAgICByZXR1cm4gbmV3SW1wbC5yZWxlYXNlTm9uTnVsbCgpOworICAgICAgICAgICAgcmV0dXJu
IG5ld0ltcGw7CiAKICAgICAgICAgLy8gRG8gYSBzbG93ZXIgaW1wbGVtZW50YXRpb24gZm9yIGNh
c2VzIHRoYXQgaW5jbHVkZSBub24tQVNDSUkgTGF0aW4tMSBjaGFyYWN0ZXJzLgogICAgICAgICBp
bnQgbnVtYmVyU2hhcnBTQ2hhcmFjdGVycyA9IDA7CkBAIC00OTQsNyArNDk2LDcgQEAgUmVmPFN0
cmluZ0ltcGw+IFN0cmluZ0ltcGw6OmNvbnZlcnRUb1VwcGVyY2FzZVdpdGhvdXRMb2NhbGUoKQog
ICAgICAgICB9CiAKICAgICAgICAgaWYgKCFudW1iZXJTaGFycFNDaGFyYWN0ZXJzKQotICAgICAg
ICAgICAgcmV0dXJuIG5ld0ltcGwucmVsZWFzZU5vbk51bGwoKTsKKyAgICAgICAgICAgIHJldHVy
biBuZXdJbXBsOwogCiAgICAgICAgIC8vIFdlIGhhdmUgbnVtYmVyU1NDaGFyYWN0ZXJzIHNoYXJw
LXMgY2hhcmFjdGVycywgYnV0IG5vbmUgb2YgdGhlIG90aGVyIHNwZWNpYWwgY2hhcmFjdGVycy4K
ICAgICAgICAgbmV3SW1wbCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQobV9sZW5ndGggKyBudW1iZXJT
aGFycFNDaGFyYWN0ZXJzLCBkYXRhOCk7CkBAIC01MTIsNyArNTE0LDcgQEAgUmVmPFN0cmluZ0lt
cGw+IFN0cmluZ0ltcGw6OmNvbnZlcnRUb1VwcGVyY2FzZVdpdGhvdXRMb2NhbGUoKQogICAgICAg
ICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgcmV0dXJuIG5ld0ltcGwucmVsZWFzZU5vbk51
bGwoKTsKKyAgICAgICAgcmV0dXJuIG5ld0ltcGw7CiAgICAgfQogCiB1cGNvbnZlcnQ6CkBAIC01
MjAsNyArNTIyLDcgQEAgdXBjb252ZXJ0OgogICAgIGNvbnN0IFVDaGFyKiBzb3VyY2UxNiA9IHVw
Y29udmVydGVkQ2hhcmFjdGVyczsKIAogICAgIFVDaGFyKiBkYXRhMTY7Ci0gICAgUmVmUHRyPFN0
cmluZ0ltcGw+IG5ld0ltcGwgPSBjcmVhdGVVbmluaXRpYWxpemVkKG1fbGVuZ3RoLCBkYXRhMTYp
OworICAgIGF1dG8gbmV3SW1wbCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQobV9sZW5ndGgsIGRhdGEx
Nik7CiAgICAgCiAgICAgLy8gRG8gYSBmYXN0ZXIgbG9vcCBmb3IgdGhlIGNhc2Ugd2hlcmUgYWxs
IHRoZSBjaGFyYWN0ZXJzIGFyZSBBU0NJSS4KICAgICB1bnNpZ25lZCBvcmVkID0gMDsKQEAgLTUz
MCwxOSArNTMyLDE5IEBAIHVwY29udmVydDoKICAgICAgICAgZGF0YTE2W2ldID0gdG9BU0NJSVVw
cGVyKGMpOwogICAgIH0KICAgICBpZiAoIShvcmVkICYgfjB4N0YpKQotICAgICAgICByZXR1cm4g
bmV3SW1wbC5yZWxlYXNlTm9uTnVsbCgpOworICAgICAgICByZXR1cm4gbmV3SW1wbDsKIAogICAg
IC8vIERvIGEgc2xvd2VyIGltcGxlbWVudGF0aW9uIGZvciBjYXNlcyB0aGF0IGluY2x1ZGUgbm9u
LUFTQ0lJIGNoYXJhY3RlcnMuCiAgICAgVUVycm9yQ29kZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7
CiAgICAgaW50MzJfdCByZWFsTGVuZ3RoID0gdV9zdHJUb1VwcGVyKGRhdGExNiwgbGVuZ3RoLCBz
b3VyY2UxNiwgbV9sZW5ndGgsICIiLCAmc3RhdHVzKTsKICAgICBpZiAoVV9TVUNDRVNTKHN0YXR1
cykgJiYgcmVhbExlbmd0aCA9PSBsZW5ndGgpCi0gICAgICAgIHJldHVybiBuZXdJbXBsLnJlbGVh
c2VOb25OdWxsKCk7CisgICAgICAgIHJldHVybiBuZXdJbXBsOwogICAgIG5ld0ltcGwgPSBjcmVh
dGVVbmluaXRpYWxpemVkKHJlYWxMZW5ndGgsIGRhdGExNik7CiAgICAgc3RhdHVzID0gVV9aRVJP
X0VSUk9SOwogICAgIHVfc3RyVG9VcHBlcihkYXRhMTYsIHJlYWxMZW5ndGgsIHNvdXJjZTE2LCBt
X2xlbmd0aCwgIiIsICZzdGF0dXMpOwogICAgIGlmIChVX0ZBSUxVUkUoc3RhdHVzKSkKICAgICAg
ICAgcmV0dXJuICp0aGlzOwotICAgIHJldHVybiBuZXdJbXBsLnJlbGVhc2VOb25OdWxsKCk7Cisg
ICAgcmV0dXJuIG5ld0ltcGw7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBuZWVkc1R1cmtpc2hD
YXNpbmdSdWxlcyhjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsZUlkZW50aWZpZXIpCkBAIC01Nzgs
MTcgKzU4MCwxNyBAQCBSZWY8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6Y29udmVydFRvTG93ZXJj
YXNlV2l0aExvY2FsZShjb25zdCBBdG9taWNTdHJpbmcmIGxvYwogICAgIGF1dG8gdXBjb252ZXJ0
ZWRDaGFyYWN0ZXJzID0gU3RyaW5nVmlldygqdGhpcykudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7
CiAgICAgY29uc3QgVUNoYXIqIHNvdXJjZTE2ID0gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzOwogICAg
IFVDaGFyKiBkYXRhMTY7Ci0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IG5ld1N0cmluZyA9IGNyZWF0
ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBkYXRhMTYpOworICAgIGF1dG8gbmV3U3RyaW5nID0gY3Jl
YXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGRhdGExNik7CiAgICAgVUVycm9yQ29kZSBzdGF0dXMg
PSBVX1pFUk9fRVJST1I7CiAgICAgaW50IHJlYWxMZW5ndGggPSB1X3N0clRvTG93ZXIoZGF0YTE2
LCBsZW5ndGgsIHNvdXJjZTE2LCBsZW5ndGgsICJ0ciIsICZzdGF0dXMpOwogICAgIGlmIChVX1NV
Q0NFU1Moc3RhdHVzKSAmJiByZWFsTGVuZ3RoID09IGxlbmd0aCkKLSAgICAgICAgcmV0dXJuIG5l
d1N0cmluZy5yZWxlYXNlTm9uTnVsbCgpOworICAgICAgICByZXR1cm4gbmV3U3RyaW5nOwogICAg
IG5ld1N0cmluZyA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQocmVhbExlbmd0aCwgZGF0YTE2KTsKICAg
ICBzdGF0dXMgPSBVX1pFUk9fRVJST1I7CiAgICAgdV9zdHJUb0xvd2VyKGRhdGExNiwgcmVhbExl
bmd0aCwgc291cmNlMTYsIGxlbmd0aCwgInRyIiwgJnN0YXR1cyk7CiAgICAgaWYgKFVfRkFJTFVS
RShzdGF0dXMpKQogICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgcmV0dXJuIG5ld1N0cmluZy5y
ZWxlYXNlTm9uTnVsbCgpOworICAgIHJldHVybiBuZXdTdHJpbmc7CiB9CiAKIFJlZjxTdHJpbmdJ
bXBsPiBTdHJpbmdJbXBsOjpjb252ZXJ0VG9VcHBlcmNhc2VXaXRoTG9jYWxlKGNvbnN0IEF0b21p
Y1N0cmluZyYgbG9jYWxlSWRlbnRpZmllcikKQEAgLTYwOSwxNyArNjExLDE3IEBAIFJlZjxTdHJp
bmdJbXBsPiBTdHJpbmdJbXBsOjpjb252ZXJ0VG9VcHBlcmNhc2VXaXRoTG9jYWxlKGNvbnN0IEF0
b21pY1N0cmluZyYgbG9jCiAgICAgYXV0byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBTdHJpbmdW
aWV3KCp0aGlzKS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKICAgICBjb25zdCBVQ2hhciogc291
cmNlMTYgPSB1cGNvbnZlcnRlZENoYXJhY3RlcnM7CiAgICAgVUNoYXIqIGRhdGExNjsKLSAgICBS
ZWZQdHI8U3RyaW5nSW1wbD4gbmV3U3RyaW5nID0gY3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgs
IGRhdGExNik7CisgICAgYXV0byBuZXdTdHJpbmcgPSBjcmVhdGVVbmluaXRpYWxpemVkKGxlbmd0
aCwgZGF0YTE2KTsKICAgICBVRXJyb3JDb2RlIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKICAgICBp
bnQgcmVhbExlbmd0aCA9IHVfc3RyVG9VcHBlcihkYXRhMTYsIGxlbmd0aCwgc291cmNlMTYsIGxl
bmd0aCwgInRyIiwgJnN0YXR1cyk7CiAgICAgaWYgKFVfU1VDQ0VTUyhzdGF0dXMpICYmIHJlYWxM
ZW5ndGggPT0gbGVuZ3RoKQotICAgICAgICByZXR1cm4gbmV3U3RyaW5nLnJlbGVhc2VOb25OdWxs
KCk7CisgICAgICAgIHJldHVybiBuZXdTdHJpbmc7CiAgICAgbmV3U3RyaW5nID0gY3JlYXRlVW5p
bml0aWFsaXplZChyZWFsTGVuZ3RoLCBkYXRhMTYpOwogICAgIHN0YXR1cyA9IFVfWkVST19FUlJP
UjsKICAgICB1X3N0clRvVXBwZXIoZGF0YTE2LCByZWFsTGVuZ3RoLCBzb3VyY2UxNiwgbGVuZ3Ro
LCAidHIiLCAmc3RhdHVzKTsKICAgICBpZiAoVV9GQUlMVVJFKHN0YXR1cykpCiAgICAgICAgIHJl
dHVybiAqdGhpczsKLSAgICByZXR1cm4gbmV3U3RyaW5nLnJlbGVhc2VOb25OdWxsKCk7CisgICAg
cmV0dXJuIG5ld1N0cmluZzsKIH0KIAogUmVmPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OmZvbGRD
YXNlKCkKQEAgLTcyMSw3ICs3MjMsNyBAQCBBTFdBWVNfSU5MSU5FIFJlZjxTdHJpbmdJbXBsPiBT
dHJpbmdJbXBsOjpjb252ZXJ0QVNDSUlDYXNlKFN0cmluZ0ltcGwmIGltcGwsIGNvbgogCiBTbG93
UGF0aDoKICAgICBDaGFyYWN0ZXJUeXBlKiBuZXdEYXRhOwotICAgIFJlZjxTdHJpbmdJbXBsPiBu
ZXdJbXBsID0gY3JlYXRlVW5pbml0aWFsaXplZEludGVybmFsTm9uRW1wdHkobGVuZ3RoLCBuZXdE
YXRhKTsKKyAgICBhdXRvIG5ld0ltcGwgPSBjcmVhdGVVbmluaXRpYWxpemVkSW50ZXJuYWxOb25F
bXB0eShsZW5ndGgsIG5ld0RhdGEpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmYWls
aW5nSW5kZXg7ICsraSkKICAgICAgICAgbmV3RGF0YVtpXSA9IGRhdGFbaV07CiAgICAgZm9yICh1
bnNpZ25lZCBpID0gZmFpbGluZ0luZGV4OyBpIDwgbGVuZ3RoOyArK2kpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuaCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3Ry
aW5nSW1wbC5oCmluZGV4IDRhNjlkZGM5NGNlYjkxMTNiYzRjNmU1Y2IwMjM3ZDkwZDQ4YjdjYTUu
LjJlZTRiZWNmOTcwOWUxYTNjZDdjZmEzMjlhMzc2YTQzMGY0Y2Y0MzIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQv
U3RyaW5nSW1wbC5oCkBAIC0yNjUsNyArMjY1LDcgQEAgcHJpdmF0ZToKICAgICB9CiAKICAgICAv
LyBVc2VkIHRvIGNyZWF0ZSBuZXcgc3RyaW5ncyB0aGF0IGFyZSBhIHN1YnN0cmluZyBvZiBhbiBl
eGlzdGluZyA4LWJpdCBTdHJpbmdJbXBsIChCdWZmZXJTdWJzdHJpbmcpCi0gICAgU3RyaW5nSW1w
bChjb25zdCBMQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoLCBQYXNzUmVmUHRyPFN0
cmluZ0ltcGw+IGJhc2UpCisgICAgU3RyaW5nSW1wbChjb25zdCBMQ2hhciogY2hhcmFjdGVycywg
dW5zaWduZWQgbGVuZ3RoLCBTdHJpbmdJbXBsKiBiYXNlKQogICAgICAgICA6IG1fcmVmQ291bnQo
c19yZWZDb3VudEluY3JlbWVudCkKICAgICAgICAgLCBtX2xlbmd0aChsZW5ndGgpCiAgICAgICAg
ICwgbV9kYXRhOChjaGFyYWN0ZXJzKQpAQCAtMjc2LDEzICsyNzYsMTMgQEAgcHJpdmF0ZToKICAg
ICAgICAgQVNTRVJUKG1fbGVuZ3RoKTsKICAgICAgICAgQVNTRVJUKGJhc2UtPmJ1ZmZlck93bmVy
c2hpcCgpICE9IEJ1ZmZlclN1YnN0cmluZyk7CiAKLSAgICAgICAgc3Vic3RyaW5nQnVmZmVyKCkg
PSBiYXNlLmxlYWtSZWYoKTsKKyAgICAgICAgc3Vic3RyaW5nQnVmZmVyKCkgPSAmUmVmPFN0cmlu
Z0ltcGw+KCpiYXNlKS5sZWFrUmVmKCk7CiAKICAgICAgICAgU1RSSU5HX1NUQVRTX0FERF84QklU
X1NUUklORzIobV9sZW5ndGgsIHRydWUpOwogICAgIH0KIAogICAgIC8vIFVzZWQgdG8gY3JlYXRl
IG5ldyBzdHJpbmdzIHRoYXQgYXJlIGEgc3Vic3RyaW5nIG9mIGFuIGV4aXN0aW5nIDE2LWJpdCBT
dHJpbmdJbXBsIChCdWZmZXJTdWJzdHJpbmcpCi0gICAgU3RyaW5nSW1wbChjb25zdCBVQ2hhciog
Y2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoLCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGJhc2Up
CisgICAgU3RyaW5nSW1wbChjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3Ro
LCBTdHJpbmdJbXBsKiBiYXNlKQogICAgICAgICA6IG1fcmVmQ291bnQoc19yZWZDb3VudEluY3Jl
bWVudCkKICAgICAgICAgLCBtX2xlbmd0aChsZW5ndGgpCiAgICAgICAgICwgbV9kYXRhMTYoY2hh
cmFjdGVycykKQEAgLTI5MywxNCArMjkzLDE0IEBAIHByaXZhdGU6CiAgICAgICAgIEFTU0VSVCht
X2xlbmd0aCk7CiAgICAgICAgIEFTU0VSVChiYXNlLT5idWZmZXJPd25lcnNoaXAoKSAhPSBCdWZm
ZXJTdWJzdHJpbmcpOwogCi0gICAgICAgIHN1YnN0cmluZ0J1ZmZlcigpID0gYmFzZS5sZWFrUmVm
KCk7CisgICAgICAgIHN1YnN0cmluZ0J1ZmZlcigpID0gJlJlZjxTdHJpbmdJbXBsPigqYmFzZSku
bGVha1JlZigpOwogCiAgICAgICAgIFNUUklOR19TVEFUU19BRERfMTZCSVRfU1RSSU5HMihtX2xl
bmd0aCwgdHJ1ZSk7CiAgICAgfQogCiAgICAgZW51bSBDcmVhdGVTeW1ib2xUYWcgeyBDcmVhdGVT
eW1ib2wgfTsKICAgICAvLyBVc2VkIHRvIGNyZWF0ZSBuZXcgc3ltYm9sIHN0cmluZ3MgdGhhdCBo
b2xkcyBleGlzdGluZyA4LWJpdCBbW0Rlc2NyaXB0aW9uXV0gc3RyaW5nIGFzIGEgc3Vic3RyaW5n
IGJ1ZmZlciAoQnVmZmVyU3Vic3RyaW5nKS4KLSAgICBTdHJpbmdJbXBsKENyZWF0ZVN5bWJvbFRh
ZywgY29uc3QgTENoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgUGFzc1JlZlB0cjxT
dHJpbmdJbXBsPiBiYXNlKQorICAgIFN0cmluZ0ltcGwoQ3JlYXRlU3ltYm9sVGFnLCBjb25zdCBM
Q2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoLCBTdHJpbmdJbXBsKiBiYXNlKQogICAg
ICAgICA6IG1fcmVmQ291bnQoc19yZWZDb3VudEluY3JlbWVudCkKICAgICAgICAgLCBtX2xlbmd0
aChsZW5ndGgpCiAgICAgICAgICwgbV9kYXRhOChjaGFyYWN0ZXJzKQpAQCAtMzEwLDcgKzMxMCw3
IEBAIHByaXZhdGU6CiAgICAgICAgIEFTU0VSVChtX2RhdGE4KTsKICAgICAgICAgQVNTRVJUKGJh
c2UtPmJ1ZmZlck93bmVyc2hpcCgpICE9IEJ1ZmZlclN1YnN0cmluZyk7CiAKLSAgICAgICAgc3Vi
c3RyaW5nQnVmZmVyKCkgPSBiYXNlLmxlYWtSZWYoKTsKKyAgICAgICAgc3Vic3RyaW5nQnVmZmVy
KCkgPSAmUmVmPFN0cmluZ0ltcGw+KCpiYXNlKS5sZWFrUmVmKCk7CiAgICAgICAgIHN5bWJvbFJl
Z2lzdHJ5KCkgPSBudWxscHRyOwogICAgICAgICBoYXNoRm9yU3ltYm9sKCkgPSBuZXh0SGFzaEZv
clN5bWJvbCgpOwogCkBAIC0zMTgsNyArMzE4LDcgQEAgcHJpdmF0ZToKICAgICB9CiAKICAgICAv
LyBVc2VkIHRvIGNyZWF0ZSBuZXcgc3ltYm9sIHN0cmluZ3MgdGhhdCBob2xkcyBleGlzdGluZyAx
Ni1iaXQgW1tEZXNjcmlwdGlvbl1dIHN0cmluZyBhcyBhIHN1YnN0cmluZyBidWZmZXIgKEJ1ZmZl
clN1YnN0cmluZykuCi0gICAgU3RyaW5nSW1wbChDcmVhdGVTeW1ib2xUYWcsIGNvbnN0IFVDaGFy
KiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gYmFz
ZSkKKyAgICBTdHJpbmdJbXBsKENyZWF0ZVN5bWJvbFRhZywgY29uc3QgVUNoYXIqIGNoYXJhY3Rl
cnMsIHVuc2lnbmVkIGxlbmd0aCwgU3RyaW5nSW1wbCogYmFzZSkKICAgICAgICAgOiBtX3JlZkNv
dW50KHNfcmVmQ291bnRJbmNyZW1lbnQpCiAgICAgICAgICwgbV9sZW5ndGgobGVuZ3RoKQogICAg
ICAgICAsIG1fZGF0YTE2KGNoYXJhY3RlcnMpCkBAIC0zMjgsNyArMzI4LDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgQVNTRVJUKG1fZGF0YTE2KTsKICAgICAgICAgQVNTRVJUKGJhc2UtPmJ1ZmZlck93
bmVyc2hpcCgpICE9IEJ1ZmZlclN1YnN0cmluZyk7CiAKLSAgICAgICAgc3Vic3RyaW5nQnVmZmVy
KCkgPSBiYXNlLmxlYWtSZWYoKTsKKyAgICAgICAgc3Vic3RyaW5nQnVmZmVyKCkgPSAmUmVmPFN0
cmluZ0ltcGw+KCpiYXNlKS5sZWFrUmVmKCk7CiAgICAgICAgIHN5bWJvbFJlZ2lzdHJ5KCkgPSBu
dWxscHRyOwogICAgICAgICBoYXNoRm9yU3ltYm9sKCkgPSBuZXh0SGFzaEZvclN5bWJvbCgpOwog
CkBAIC0zNTIsNyArMzUyLDcgQEAgcHVibGljOgogICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBz
dGF0aWMgUmVmPFN0cmluZ0ltcGw+IGNyZWF0ZShjb25zdCBMQ2hhciopOwogICAgIEFMV0FZU19J
TkxJTkUgc3RhdGljIFJlZjxTdHJpbmdJbXBsPiBjcmVhdGUoY29uc3QgY2hhciogcykgeyByZXR1
cm4gY3JlYXRlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihzKSk7IH0KIAotICAgIHN0
YXRpYyBBTFdBWVNfSU5MSU5FIFJlZjxTdHJpbmdJbXBsPiBjcmVhdGVTdWJzdHJpbmdTaGFyaW5n
SW1wbChQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IHJlcCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25l
ZCBsZW5ndGgpCisgICAgc3RhdGljIEFMV0FZU19JTkxJTkUgUmVmPFN0cmluZ0ltcGw+IGNyZWF0
ZVN1YnN0cmluZ1NoYXJpbmdJbXBsKFN0cmluZ0ltcGwqIHJlcCwgdW5zaWduZWQgb2Zmc2V0LCB1
bnNpZ25lZCBsZW5ndGgpCiAgICAgewogICAgICAgICBBU1NFUlQocmVwKTsKICAgICAgICAgQVNT
RVJUKGxlbmd0aCA8PSByZXAtPmxlbmd0aCgpKTsKQEAgLTM2MCw3ICszNjAsNyBAQCBwdWJsaWM6
CiAgICAgICAgIGlmICghbGVuZ3RoKQogICAgICAgICAgICAgcmV0dXJuICplbXB0eSgpOwogCi0g
ICAgICAgIFN0cmluZ0ltcGwqIG93bmVyUmVwID0gKHJlcC0+YnVmZmVyT3duZXJzaGlwKCkgPT0g
QnVmZmVyU3Vic3RyaW5nKSA/IHJlcC0+c3Vic3RyaW5nQnVmZmVyKCkgOiByZXAuZ2V0KCk7Cisg
ICAgICAgIGF1dG8gb3duZXJSZXAgPSAoKHJlcC0+YnVmZmVyT3duZXJzaGlwKCkgPT0gQnVmZmVy
U3Vic3RyaW5nKSA/IHJlcC0+c3Vic3RyaW5nQnVmZmVyKCkgOiByZXApOwogCiAgICAgICAgIC8v
IFdlIGFsbG9jYXRlIGEgYnVmZmVyIHRoYXQgY29udGFpbnMgYm90aCB0aGUgU3RyaW5nSW1wbCBz
dHJ1Y3QgYXMgd2VsbCBhcyB0aGUgcG9pbnRlciB0byB0aGUgb3duZXIgc3RyaW5nLgogICAgICAg
ICBTdHJpbmdJbXBsKiBzdHJpbmdJbXBsID0gc3RhdGljX2Nhc3Q8U3RyaW5nSW1wbCo+KGZhc3RN
YWxsb2MoYWxsb2NhdGlvblNpemU8U3RyaW5nSW1wbCo+KDEpKSk7CkBAIC0zODcsNyArMzg3LDcg
QEAgcHVibGljOgogCiAgICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIHN0YXRpYyBSZWY8U3RyaW5n
SW1wbD4gY3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgsIExDaGFyKiYgZGF0YSk7
CiAgICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIHN0YXRpYyBSZWY8U3RyaW5nSW1wbD4gY3JlYXRl
VW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgsIFVDaGFyKiYgZGF0YSk7Ci0gICAgdGVtcGxh
dGUgPHR5cGVuYW1lIFQ+IHN0YXRpYyBBTFdBWVNfSU5MSU5FIFBhc3NSZWZQdHI8U3RyaW5nSW1w
bD4gdHJ5Q3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgsIFQqJiBvdXRwdXQpCisg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHN0YXRpYyBBTFdBWVNfSU5MSU5FIFJlZlB0cjxTdHJp
bmdJbXBsPiB0cnlDcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0aCwgVComIG91dHB1
dCkKICAgICB7CiAgICAgICAgIGlmICghbGVuZ3RoKSB7CiAgICAgICAgICAgICBvdXRwdXQgPSAw
OwpAQCAtMzk2LDEyICszOTYsMTIgQEAgcHVibGljOgogCiAgICAgICAgIGlmIChsZW5ndGggPiAo
KHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSAtIHNpemVvZihTdHJpbmdJbXBs
KSkgLyBzaXplb2YoVCkpKSB7CiAgICAgICAgICAgICBvdXRwdXQgPSAwOwotICAgICAgICAgICAg
cmV0dXJuIDA7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgfQogICAgICAg
ICBTdHJpbmdJbXBsKiByZXN1bHRJbXBsOwogICAgICAgICBpZiAoIXRyeUZhc3RNYWxsb2MoYWxs
b2NhdGlvblNpemU8VD4obGVuZ3RoKSkuZ2V0VmFsdWUocmVzdWx0SW1wbCkpIHsKICAgICAgICAg
ICAgIG91dHB1dCA9IDA7Ci0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVy
biBudWxscHRyOwogICAgICAgICB9CiAgICAgICAgIG91dHB1dCA9IHJlc3VsdEltcGwtPnRhaWxQ
b2ludGVyPFQ+KCk7CiAKQEAgLTQwOSwxMyArNDA5LDEzIEBAIHB1YmxpYzoKICAgICB9CiAKICAg
ICBXVEZfRVhQT1JUX1NUUklOR19BUEkgc3RhdGljIFJlZjxTeW1ib2xJbXBsPiBjcmVhdGVOdWxs
U3ltYm9sKCk7Ci0gICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIHN0YXRpYyBSZWY8U3ltYm9sSW1w
bD4gY3JlYXRlU3ltYm9sKFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gcmVwKTsKKyAgICBXVEZfRVhQ
T1JUX1NUUklOR19BUEkgc3RhdGljIFJlZjxTeW1ib2xJbXBsPiBjcmVhdGVTeW1ib2woU3RyaW5n
SW1wbCogcmVwKTsKIAotICAgIC8vIFJlYWxsb2NhdGUgdGhlIFN0cmluZ0ltcGwuIFRoZSBvcmln
aW5hbFN0cmluZyBtdXN0IGJlIG9ubHkgb3duZWQgYnkgdGhlIFBhc3NSZWZQdHIsCisgICAgLy8g
UmVhbGxvY2F0ZSB0aGUgU3RyaW5nSW1wbC4gVGhlIG9yaWdpbmFsU3RyaW5nIG11c3QgYmUgb25s
eSBvd25lZCBieSB0aGUgUmVmUHRyLAogICAgIC8vIGFuZCB0aGUgYnVmZmVyIG93bmVyc2hpcCBt
dXN0IGJlIEJ1ZmZlckludGVybmFsLiBKdXN0IGxpa2UgdGhlIGlucHV0IHBvaW50ZXIgb2YgcmVh
bGxvYygpLAogICAgIC8vIHRoZSBvcmlnaW5hbFN0cmluZyBjYW4ndCBiZSB1c2VkIGFmdGVyIHRo
aXMgZnVuY3Rpb24uCi0gICAgc3RhdGljIFJlZjxTdHJpbmdJbXBsPiByZWFsbG9jYXRlKFBhc3NS
ZWZQdHI8U3RyaW5nSW1wbD4gb3JpZ2luYWxTdHJpbmcsIHVuc2lnbmVkIGxlbmd0aCwgTENoYXIq
JiBkYXRhKTsKLSAgICBzdGF0aWMgUmVmPFN0cmluZ0ltcGw+IHJlYWxsb2NhdGUoUGFzc1JlZlB0
cjxTdHJpbmdJbXBsPiBvcmlnaW5hbFN0cmluZywgdW5zaWduZWQgbGVuZ3RoLCBVQ2hhciomIGRh
dGEpOworICAgIHN0YXRpYyBSZWY8U3RyaW5nSW1wbD4gcmVhbGxvY2F0ZShSZWZQdHI8U3RyaW5n
SW1wbD4mJiBvcmlnaW5hbFN0cmluZywgdW5zaWduZWQgbGVuZ3RoLCBMQ2hhciomIGRhdGEpOwor
ICAgIHN0YXRpYyBSZWY8U3RyaW5nSW1wbD4gcmVhbGxvY2F0ZShSZWZQdHI8U3RyaW5nSW1wbD4m
JiBvcmlnaW5hbFN0cmluZywgdW5zaWduZWQgbGVuZ3RoLCBVQ2hhciomIGRhdGEpOwogCiAgICAg
c3RhdGljIHVuc2lnbmVkIGZsYWdzT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0
cmluZ0ltcGwsIG1faGFzaEFuZEZsYWdzKTsgfQogICAgIHN0YXRpYyB1bnNpZ25lZCBmbGFnSXM4
Qml0KCkgeyByZXR1cm4gc19oYXNoRmxhZzhCaXRCdWZmZXI7IH0KQEAgLTg2MCw3ICs4NjAsNyBA
QCBwcml2YXRlOgogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyVHlwZT4gc3RhdGljIFJlZjxT
dHJpbmdJbXBsPiBjb25zdHJ1Y3RJbnRlcm5hbChTdHJpbmdJbXBsKiwgdW5zaWduZWQpOwogICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyVHlwZT4gc3RhdGljIFJlZjxTdHJpbmdJbXBsPiBjcmVh
dGVVbmluaXRpYWxpemVkSW50ZXJuYWwodW5zaWduZWQsIENoYXJUeXBlKiYpOwogICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBDaGFyVHlwZT4gc3RhdGljIFJlZjxTdHJpbmdJbXBsPiBjcmVhdGVVbmlu
aXRpYWxpemVkSW50ZXJuYWxOb25FbXB0eSh1bnNpZ25lZCwgQ2hhclR5cGUqJik7Ci0gICAgdGVt
cGxhdGUgPHR5cGVuYW1lIENoYXJUeXBlPiBzdGF0aWMgUmVmPFN0cmluZ0ltcGw+IHJlYWxsb2Nh
dGVJbnRlcm5hbChQYXNzUmVmUHRyPFN0cmluZ0ltcGw+LCB1bnNpZ25lZCwgQ2hhclR5cGUqJik7
CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJUeXBlPiBzdGF0aWMgUmVmPFN0cmluZ0ltcGw+
IHJlYWxsb2NhdGVJbnRlcm5hbChSZWZQdHI8U3RyaW5nSW1wbD4mJiwgdW5zaWduZWQsIENoYXJU
eXBlKiYpOwogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyVHlwZT4gc3RhdGljIFJlZjxTdHJp
bmdJbXBsPiBjcmVhdGVJbnRlcm5hbChjb25zdCBDaGFyVHlwZSosIHVuc2lnbmVkKTsKICAgICBX
VEZfRVhQT1JUX1BSSVZBVEUgTkVWRVJfSU5MSU5FIHVuc2lnbmVkIGhhc2hTbG93Q2FzZSgpIGNv
bnN0OwogICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgdW5zaWduZWQgbmV4dEhhc2hGb3JT
eW1ib2woKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmNwcCBi
L1NvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmNwcAppbmRleCBmMzFhYWM3NmMyNDg4MDRh
NzNlNWY0MDM5NzlkOTRmM2I4OTBhMzdlLi5mNGExZmVkOTYxN2ViOTg5MWEzODBiN2FmZGI2YzNk
NTYwMTA4NmQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5jcHAK
KysrIGIvU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcuY3BwCkBAIC0zMzIsNyArMzMyLDcg
QEAgU3RyaW5nIFN0cmluZzo6c3Vic3RyaW5nU2hhcmluZ0ltcGwodW5zaWduZWQgb2Zmc2V0LCB1
bnNpZ25lZCBsZW5ndGgpIGNvbnN0CiAKICAgICBpZiAoIW9mZnNldCAmJiBsZW5ndGggPT0gc3Ry
aW5nTGVuZ3RoKQogICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgcmV0dXJuIFN0cmluZyhTdHJp
bmdJbXBsOjpjcmVhdGVTdWJzdHJpbmdTaGFyaW5nSW1wbChtX2ltcGwsIG9mZnNldCwgbGVuZ3Ro
KSk7CisgICAgcmV0dXJuIFN0cmluZyhTdHJpbmdJbXBsOjpjcmVhdGVTdWJzdHJpbmdTaGFyaW5n
SW1wbChtX2ltcGwuZ2V0KCksIG9mZnNldCwgbGVuZ3RoKSk7CiB9CiAKIFN0cmluZyBTdHJpbmc6
OmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYv
d3RmL3RleHQvV1RGU3RyaW5nLmggYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5oCmlu
ZGV4IGVmNjIxZmM0MTMzNDllNjk2ZDc1YWZmYTczOThiYjAxMzU2MDliOWUuLmVjZGVkODg2MGU3
MzJlMzE3NzVlYzAwZDRiY2RjOTY2ZmNlMGJjMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3Rm
L3RleHQvV1RGU3RyaW5nLmgKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcuaApA
QCAtMTA3LDcgKzEwNyw2IEBAIHB1YmxpYzoKICAgICAvLyBDb25zdHJ1Y3QgYSBzdHJpbmcgcmVm
ZXJlbmNpbmcgYW4gZXhpc3RpbmcgU3RyaW5nSW1wbC4KICAgICBTdHJpbmcoU3RyaW5nSW1wbCYp
OwogICAgIFN0cmluZyhTdHJpbmdJbXBsKik7Ci0gICAgU3RyaW5nKFBhc3NSZWZQdHI8U3RyaW5n
SW1wbD4pOwogICAgIFN0cmluZyhSZWY8U3RyaW5nSW1wbD4mJik7CiAgICAgU3RyaW5nKFJlZlB0
cjxTdHJpbmdJbXBsPiYmKTsKIApAQCAtNTMxLDExICs1MzAsNiBAQCBpbmxpbmUgU3RyaW5nOjpT
dHJpbmcoU3RyaW5nSW1wbCogaW1wbCkKIHsKIH0KIAotaW5saW5lIFN0cmluZzo6U3RyaW5nKFBh
c3NSZWZQdHI8U3RyaW5nSW1wbD4gaW1wbCkKLSAgICA6IG1faW1wbChpbXBsKQotewotfQotCiBp
bmxpbmUgU3RyaW5nOjpTdHJpbmcoUmVmPFN0cmluZ0ltcGw+JiYgaW1wbCkKICAgICA6IG1faW1w
bChXVEZNb3ZlKGltcGwpKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9jZi9T
dHJpbmdJbXBsQ0YuY3BwIGIvU291cmNlL1dURi93dGYvdGV4dC9jZi9TdHJpbmdJbXBsQ0YuY3Bw
CmluZGV4IDdiYWQ5YTdkMTJkZjRiYWVhYmNmODdlMDhlZmRiNGU5ODQ2ZjhjNDcuLjUzZjQ5ODM4
M2ZhYzg5Y2QwMDQxMzFjZmJjMDYyNDI1NjE3ODljZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYv
d3RmL3RleHQvY2YvU3RyaW5nSW1wbENGLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L2Nm
L1N0cmluZ0ltcGxDRi5jcHAKQEAgLTI1LDcgKzI1LDYgQEAKIAogI2luY2x1ZGUgPENvcmVGb3Vu
ZGF0aW9uL0NvcmVGb3VuZGF0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KLSNp
bmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KICNp
bmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Eb2N1bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCmluZGV4IDZm
MzNmMjM0ZGI3ODFjZWI2Y2QxODNkZjVkZmZhNDg0MDkxNmQ0NzUuLjc3ZThmMTI0YjY4MmNjOWE2
NjdhZWVhYjY3N2VjZmMyZWU3ZmY0OGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9E
b2N1bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcApAQCAtNTQ4
MCw3ICs1NDgwLDcgQEAgdm9pZCBEb2N1bWVudDo6d2luZG93U2NyZWVuRGlkQ2hhbmdlKFBsYXRm
b3JtRGlzcGxheUlEIGRpc3BsYXlJRCkKIFN0cmluZyBEb2N1bWVudDo6ZGlzcGxheVN0cmluZ01v
ZGlmaWVkQnlFbmNvZGluZyhjb25zdCBTdHJpbmcmIHN0cikgY29uc3QKIHsKICAgICBpZiAobV9k
ZWNvZGVyKQotICAgICAgICByZXR1cm4gbV9kZWNvZGVyLT5lbmNvZGluZygpLmRpc3BsYXlTdHJp
bmcoc3RyLmltcGwoKSk7CisgICAgICAgIHJldHVybiBtX2RlY29kZXItPmVuY29kaW5nKCkuZGlz
cGxheVN0cmluZyhzdHIuaW1wbCgpKS5nZXQoKTsKICAgICByZXR1cm4gc3RyOwogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhHcmFtbWFyLnkgYi9Tb3VyY2UvV2ViQ29y
ZS94bWwvWFBhdGhHcmFtbWFyLnkKaW5kZXggMzU2ZTExODg5ZWRmNzc2NTg3YmZjYWMxMTY0Yzdm
MWE2NmQzM2M5NC4uYmY0MzM4NjcyZjJhMzIwZTcyYzg2MjEyYjI2NjIwYTU3NmFlNzk1NCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUveG1sL1hQYXRoR3JhbW1hci55CisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3htbC9YUGF0aEdyYW1tYXIueQpAQCAtMTc3LDcgKzE3Nyw3IEBAIFN0ZXA6CiAgICAg
fAogICAgIE5BTUVURVNUIE9wdGlvbmFsUHJlZGljYXRlTGlzdAogICAgIHsKLSAgICAgICAgU3Ry
aW5nIG5hbWV0ZXN0ID0gYWRvcHRSZWYoJDEpOworICAgICAgICBTdHJpbmcgbmFtZXRlc3QgPSBh
ZG9wdFJlZigqJDEpOwogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8VmVjdG9yPHN0ZDo6dW5pcXVl
X3B0cjxFeHByZXNzaW9uPj4+IHByZWRpY2F0ZUxpc3QoJDIpOwogCiAgICAgICAgIFN0cmluZyBs
b2NhbE5hbWU7CkBAIC0yMDYsNyArMjA2LDcgQEAgU3RlcDoKICAgICB8CiAgICAgQXhpc1NwZWNp
ZmllciBOQU1FVEVTVCBPcHRpb25hbFByZWRpY2F0ZUxpc3QKICAgICB7Ci0gICAgICAgIFN0cmlu
ZyBuYW1ldGVzdCA9IGFkb3B0UmVmKCQyKTsKKyAgICAgICAgU3RyaW5nIG5hbWV0ZXN0ID0gYWRv
cHRSZWYoKiQyKTsKICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFZlY3RvcjxzdGQ6OnVuaXF1ZV9w
dHI8RXhwcmVzc2lvbj4+PiBwcmVkaWNhdGVMaXN0KCQzKTsKIAogICAgICAgICBTdHJpbmcgbG9j
YWxOYW1lOwpAQCAtMjU3LDcgKzI1Nyw3IEBAIE5vZGVUZXN0OgogICAgIHwKICAgICBQSSAnKCcg
TElURVJBTCAnKScKICAgICB7Ci0gICAgICAgIFN0cmluZyBsaXRlcmFsID0gYWRvcHRSZWYoJDMp
OworICAgICAgICBTdHJpbmcgbGl0ZXJhbCA9IGFkb3B0UmVmKCokMyk7CiAgICAgICAgICQkID0g
bmV3IFN0ZXA6Ok5vZGVUZXN0KFN0ZXA6Ok5vZGVUZXN0OjpQcm9jZXNzaW5nSW5zdHJ1Y3Rpb25O
b2RlVGVzdCwgbGl0ZXJhbC5zdHJpcFdoaXRlU3BhY2UoKSk7CiAgICAgfQogICAgIDsKQEAgLTMx
NCw3ICszMTQsNyBAQCBBYmJyZXZpYXRlZFN0ZXA6CiBQcmltYXJ5RXhwcjoKICAgICBWQVJJQUJM
RVJFRkVSRU5DRQogICAgIHsKLSAgICAgICAgU3RyaW5nIG5hbWUgPSBhZG9wdFJlZigkMSk7Cisg
ICAgICAgIFN0cmluZyBuYW1lID0gYWRvcHRSZWYoKiQxKTsKICAgICAgICAgJCQgPSBuZXcgVmFy
aWFibGVSZWZlcmVuY2UobmFtZSk7CiAgICAgfQogICAgIHwKQEAgLTMyNSwxMyArMzI1LDEzIEBA
IFByaW1hcnlFeHByOgogICAgIHwKICAgICBMSVRFUkFMCiAgICAgewotICAgICAgICBTdHJpbmcg
bGl0ZXJhbCA9IGFkb3B0UmVmKCQxKTsKKyAgICAgICAgU3RyaW5nIGxpdGVyYWwgPSBhZG9wdFJl
ZigqJDEpOwogICAgICAgICAkJCA9IG5ldyBTdHJpbmdFeHByZXNzaW9uKFdURk1vdmUobGl0ZXJh
bCkpOwogICAgIH0KICAgICB8CiAgICAgTlVNQkVSCiAgICAgewotICAgICAgICBTdHJpbmcgbnVt
ZXJhbCA9IGFkb3B0UmVmKCQxKTsKKyAgICAgICAgU3RyaW5nIG51bWVyYWwgPSBhZG9wdFJlZigq
JDEpOwogICAgICAgICAkJCA9IG5ldyBOdW1iZXIobnVtZXJhbC50b0RvdWJsZSgpKTsKICAgICB9
CiAgICAgfApAQCAtMzQxLDcgKzM0MSw3IEBAIFByaW1hcnlFeHByOgogRnVuY3Rpb25DYWxsOgog
ICAgIEZVTkNUSU9OTkFNRSAnKCcgJyknCiAgICAgewotICAgICAgICBTdHJpbmcgbmFtZSA9IGFk
b3B0UmVmKCQxKTsKKyAgICAgICAgU3RyaW5nIG5hbWUgPSBhZG9wdFJlZigqJDEpOwogICAgICAg
ICAkJCA9IFhQYXRoOjpGdW5jdGlvbjo6Y3JlYXRlKG5hbWUpLnJlbGVhc2UoKTsKICAgICAgICAg
aWYgKCEkJCkKICAgICAgICAgICAgIFlZQUJPUlQ7CkBAIC0zNDksNyArMzQ5LDcgQEAgRnVuY3Rp
b25DYWxsOgogICAgIHwKICAgICBGVU5DVElPTk5BTUUgJygnIEFyZ3VtZW50TGlzdCAnKScKICAg
ICB7Ci0gICAgICAgIFN0cmluZyBuYW1lID0gYWRvcHRSZWYoJDEpOworICAgICAgICBTdHJpbmcg
bmFtZSA9IGFkb3B0UmVmKCokMSk7CiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxWZWN0b3I8c3Rk
Ojp1bmlxdWVfcHRyPEV4cHJlc3Npb24+Pj4gYXJndW1lbnRMaXN0KCQzKTsKICAgICAgICAgJCQg
PSBYUGF0aDo6RnVuY3Rpb246OmNyZWF0ZShuYW1lLCBXVEZNb3ZlKCphcmd1bWVudExpc3QpKS5y
ZWxlYXNlKCk7CiAgICAgICAgIGlmICghJCQpCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYjlhYjM1OTM0MDFkYjhmZGRiNDRlNTQ0YWYyMGIzNzcz
YWIxNTYxMS4uNWFkN2VmOTYyNTVkYzRjNTU0YTM0MzlhYWJhYWI1ZjI4NzU4N2Q1MCAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5
IEBACisyMDE2LTA1LTE5ICBLZWl0aCBSb2xsaW4gIDxrcm9sbGluQGFwcGxlLmNvbT4KKworICAg
ICAgICBSZW1vdmUgYWxsIHVzZXMgb2YgUGFzc1JlZlB0ciBpbiBXVEYKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NzU5NgorICAgICAgICA8cmRhcjov
L3Byb2JsZW0vMjYyMzQzOTE+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgVXBkYXRlIGNhbGxzIHRvIGludGVyZmFjZXMgdGhhdCBubyBsb25nZXIgdGFr
ZSBvciByZXR1cm4gUGFzc1JlZlB0cnMuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dURi9GdW5jdGlvbmFsLmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6Ok51bWJlcjo6Y3Jl
YXRlKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOiBEZWxldGVkLgorICAgICAgICAq
IFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1N0cmluZ0ltcGwuY3BwOgorICAgICAgICAoVGVzdFdl
YktpdEFQSTo6VEVTVCk6CisKIDIwMTYtMDUtMjQgIEFha2FzaCBKYWluICA8YWFrYXNoX2phaW5A
YXBwbGUuY29tPgogCiAgICAgICAgIFJlb3JnYW5pemUgZGFzaGJvYXJkIGNvZGU6IG1vdmUgY29k
ZSBmcm9tIF90aW1lSW50ZXJ2YWxTdHJpbmcgdG8gYmFzZSBjbGFzcwpkaWZmIC0tZ2l0IGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvRnVuY3Rpb25hbC5jcHAgYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dURi9GdW5jdGlvbmFsLmNwcAppbmRleCBjZjhjM2MzOWM3MWRhNzgwYmU2
ZTY0MjY4MzgxZTYzNWMyY2QxNmEzLi4xNjgwNTYzZDgzZWFmY2Y1MDk1MTVmYzVkODFjY2RiYzkz
N2RmMzEzIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9GdW5jdGlv
bmFsLmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9GdW5jdGlvbmFsLmNw
cApAQCAtMTU0LDkgKzE1NCw5IEBAIFRFU1QoRnVuY3Rpb25hbFRlc3QsIE1lbWJlckZ1bmN0aW9u
QmluZFJlZkRlcmVmKQogCiBjbGFzcyBOdW1iZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxOdW1iZXI+
IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxOdW1iZXI+IGNyZWF0ZShpbnQgdmFs
dWUpCisgICAgc3RhdGljIFJlZlB0cjxOdW1iZXI+IGNyZWF0ZShpbnQgdmFsdWUpCiAgICAgewot
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE51bWJlcih2YWx1ZSkpOworICAgICAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBOdW1iZXIodmFsdWUpKTsKICAgICB9CiAKICAgICB+TnVtYmVyKCkK
QEAgLTE4OCwxMSArMTg4LDYgQEAgVEVTVChGdW5jdGlvbmFsVGVzdCwgUmVmQ291bnRlZFN0b3Jh
Z2UpCiAKICAgICBGdW5jdGlvbjxpbnQgKCk+IG11bHRpcGx5Rm91ckJ5VHdvRnVuY3Rpb24gPSBi
aW5kKG11bHRpcGx5TnVtYmVyQnlUd28sIE51bWJlcjo6Y3JlYXRlKDQpKTsKICAgICBBU1NFUlRf
RVEoOCwgbXVsdGlwbHlGb3VyQnlUd29GdW5jdGlvbigpKTsKLQotICAgIFJlZlB0cjxOdW1iZXI+
IHNpeCA9IE51bWJlcjo6Y3JlYXRlKDYpOwotICAgIEZ1bmN0aW9uPGludCAoKT4gbXVsdGlwbHlT
aXhCeVR3b0Z1bmN0aW9uID0gYmluZChtdWx0aXBseU51bWJlckJ5VHdvLCBzaXgucmVsZWFzZSgp
KTsKLSAgICBBU1NFUlRfRkFMU0Uoc2l4KTsKLSAgICBBU1NFUlRfRVEoMTIsIG11bHRpcGx5U2l4
QnlUd29GdW5jdGlvbigpKTsKIH0KIAogbmFtZXNwYWNlIFJlZkFuZERlcmVmVGVzdHMgewpkaWZm
IC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvU3RyaW5nSW1wbC5jcHAgYi9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9TdHJpbmdJbXBsLmNwcAppbmRleCA4Y2Q2YzA5
Y2ZiNWMyNGY3OWE2MjM4NzY1NDNhZjM3OTEzOTgyMjZmLi5mM2UzNWI4MjYyMzU4OWI4MzlmYjA4
Yzk1MGQwMzlmYzViMmZmMjM5IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dURi9TdHJpbmdJbXBsLmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9T
dHJpbmdJbXBsLmNwcApAQCAtNTI2LDcgKzUyNiw3IEBAIFRFU1QoV1RGLCBTdHJpbmdJbXBsQ3Jl
YXRlTnVsbFN5bWJvbCkKIFRFU1QoV1RGLCBTdHJpbmdJbXBsQ3JlYXRlU3ltYm9sKQogewogICAg
IFJlZlB0cjxTdHJpbmdJbXBsPiBvcmlnaW5hbCA9IHN0cmluZ0Zyb21VVEY4KCJvcmlnaW5hbCIp
OwotICAgIFJlZlB0cjxTdHJpbmdJbXBsPiByZWZlcmVuY2UgPSBTdHJpbmdJbXBsOjpjcmVhdGVT
eW1ib2wob3JpZ2luYWwpOworICAgIFJlZlB0cjxTdHJpbmdJbXBsPiByZWZlcmVuY2UgPSBTdHJp
bmdJbXBsOjpjcmVhdGVTeW1ib2wob3JpZ2luYWwuZ2V0KCkpOwogICAgIEFTU0VSVF9UUlVFKHJl
ZmVyZW5jZS0+aXNTeW1ib2woKSk7CiAgICAgQVNTRVJUX0ZBTFNFKHJlZmVyZW5jZS0+aXNOdWxs
U3ltYm9sKCkpOwogICAgIEFTU0VSVF9GQUxTRShyZWZlcmVuY2UtPmlzQXRvbWljKCkpOwpAQCAt
NTM2LDcgKzUzNiw3IEBAIFRFU1QoV1RGLCBTdHJpbmdJbXBsQ3JlYXRlU3ltYm9sKQogICAgIEFT
U0VSVF9UUlVFKGVxdWFsKHJlZmVyZW5jZS5nZXQoKSwgIm9yaWdpbmFsIikpOwogCiAgICAgUmVm
UHRyPFN0cmluZ0ltcGw+IGVtcHR5ID0gc3RyaW5nRnJvbVVURjgoIiIpOwotICAgIFJlZlB0cjxT
dHJpbmdJbXBsPiBlbXB0eVJlZmVyZW5jZSA9IFN0cmluZ0ltcGw6OmNyZWF0ZVN5bWJvbChlbXB0
eSk7CisgICAgUmVmUHRyPFN0cmluZ0ltcGw+IGVtcHR5UmVmZXJlbmNlID0gU3RyaW5nSW1wbDo6
Y3JlYXRlU3ltYm9sKGVtcHR5LmdldCgpKTsKICAgICBBU1NFUlRfVFJVRShlbXB0eVJlZmVyZW5j
ZS0+aXNTeW1ib2woKSk7CiAgICAgQVNTRVJUX0ZBTFNFKGVtcHR5UmVmZXJlbmNlLT5pc051bGxT
eW1ib2woKSk7CiAgICAgQVNTRVJUX0ZBTFNFKGVtcHR5UmVmZXJlbmNlLT5pc0F0b21pYygpKTsK
QEAgLTU1MCw3ICs1NTAsNyBAQCBURVNUKFdURiwgU3RyaW5nSW1wbENyZWF0ZVN5bWJvbCkKIFRF
U1QoV1RGLCBTdHJpbmdJbXBsU3ltYm9sVG9BdG9taWNTdHJpbmcpCiB7CiAgICAgUmVmUHRyPFN0
cmluZ0ltcGw+IG9yaWdpbmFsID0gc3RyaW5nRnJvbVVURjgoIm9yaWdpbmFsIik7Ci0gICAgUmVm
UHRyPFN0cmluZ0ltcGw+IHJlZmVyZW5jZSA9IFN0cmluZ0ltcGw6OmNyZWF0ZVN5bWJvbChvcmln
aW5hbCk7CisgICAgUmVmUHRyPFN0cmluZ0ltcGw+IHJlZmVyZW5jZSA9IFN0cmluZ0ltcGw6OmNy
ZWF0ZVN5bWJvbChvcmlnaW5hbC5nZXQoKSk7CiAgICAgQVNTRVJUX1RSVUUocmVmZXJlbmNlLT5p
c1N5bWJvbCgpKTsKICAgICBBU1NFUlRfRkFMU0UocmVmZXJlbmNlLT5pc0F0b21pYygpKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>279843</attachid>
            <date>2016-05-25 17:29:48 -0700</date>
            <delta_ts>2016-05-27 10:33:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-157596-20160525173056.patch</filename>
            <type>text/plain</type>
            <size>48348</size>
            <attacher name="Keith Rollin">krollin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAxMzg3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBm
NDMwNjBmMDUxYjAxMGFkZTY2OTQyNjRjOWVkNzZhNmRlNjY3YjRhLi4yMWI5YjI0ODZiYTBhODE5
YTcxZGZlODk4YzFmZjJjMTkzN2NiNzk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzMSBAQAorMjAxNi0wNS0xOSAgS2VpdGggUm9sbGluICA8a3JvbGxpbkBhcHBsZS5jb20+
CisKKyAgICAgICAgUmVtb3ZlIGFsbCB1c2VzIG9mIFBhc3NSZWZQdHIgaW4gV1RGCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTc1OTYKKyAgICAgICAg
PHJkYXI6Ly9wcm9ibGVtLzI2MjM0MzkxPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFVwZGF0ZSBjYWxscyB0byBpbnRlcmZhY2VzIHRoYXQgbm8gbG9u
Z2VyIHRha2Ugb3IgcmV0dXJuIFBhc3NSZWZQdHJzLgorCisgICAgICAgICogcnVudGltZS9KU1N0
cmluZy5jcHA6CisgICAgICAgIChKU0M6OkpTUm9wZVN0cmluZzo6cmVzb2x2ZVJvcGUpOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNTdHJpbmcuaDoKKyAgICAgICAgKEpTQzo6SlNTdHJpbmc6OkpTU3Ry
aW5nKToKKyAgICAgICAgKiBydW50aW1lL1ByaXZhdGVOYW1lLmg6CisgICAgICAgIChKU0M6OlBy
aXZhdGVOYW1lOjpQcml2YXRlTmFtZSk6CisgICAgICAgICogcnVudGltZS9TbWFsbFN0cmluZ3Mu
Y3BwOgorICAgICAgICAoSlNDOjpTbWFsbFN0cmluZ3NTdG9yYWdlOjpTbWFsbFN0cmluZ3NTdG9y
YWdlKToKKyAgICAgICAgKiBydW50aW1lL1N0cmluZ0NvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAg
KEpTQzo6c3RyaW5nRnJvbUNoYXJDb2RlU2xvd0Nhc2UpOgorICAgICAgICAqIHJ1bnRpbWUvU3Ry
aW5nUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6anNTcGxpY2VTdWJzdHJpbmdzKToKKyAg
ICAgICAgKEpTQzo6anNTcGxpY2VTdWJzdHJpbmdzV2l0aFNlcGFyYXRvcnMpOgorICAgICAgICAo
SlNDOjpyZXBlYXRDaGFyYWN0ZXIpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNGb250
c2l6ZSk6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY0xpbmspOgorICAgICAgICAoSlND
Ojpub3JtYWxpemUpOgorCiAyMDE2LTA1LTI1ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJj
aWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OKHIyMDEwNjYpOiBbR1RLXSBTZXZl
cmFsIGludGwgdGVzdHMgc3RhcnRlZCB0byBmYWlsIGluIEdUSysgYm90IGFmdGVyIHIyMDEwNjYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
aW5kZXggYWM5Y2YyMTg4OWYwOTI1MTlmNTA4MDU2NjkxZTAzZDNhYWE4OTA1YS4uNWQ2M2U2ZDVi
MjE1ZDY0ODQ5OWI1YjI1ZWVmYmVjYzI0NjA3NTA1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1OCBAQAorMjAx
Ni0wNS0xOSAgS2VpdGggUm9sbGluICA8a3JvbGxpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVt
b3ZlIGFsbCB1c2VzIG9mIFBhc3NSZWZQdHIgaW4gV1RGCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTc1OTYKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVt
LzI2MjM0MzkxPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFJlbW92ZS91cGRhdGUgbW9zdCBpbnRlcmZhY2VzIHRoYXQgdGFrZSBvciByZXR1cm4gUGFz
c1JlZlB0cnMuCisgICAgICAgIFJlbWFpbmluZyByZWZlcmVuY2VzIGluY2x1ZGUgdGhvc2UgaW4g
bm9uLUNvY29hIGltcGxlbWVudGF0aW9ucyBhbmQKKyAgICAgICAgdGhvc2UgcmVxdWlyZWQgZm9y
IGNvbnRpbnVlZCBjb21wYXRpYmlsaXR5IHdpdGggbW9kdWxlcyB0aGF0IHN0aWxsIHVzZQorICAg
ICAgICBQYXNzUmVmUHRycyAoc3BlY2lmaWNhbGx5OiBGb3J3YXJkLmgsIFJlZlB0ciBpbnRlcm9w
ZXJhYmlsaXR5LAorICAgICAgICBTaXplTGltaXRzLmgsIFdvcmtRdWV1ZSAoV2luZG93cykgRGlz
cGF0Y2hRdWV1ZUVmbCwKKyAgICAgICAgRGlzcGF0Y2hXb3JrSXRlbUVmbCwgYW5kIFBhc3NSZWZQ
dHIgaXRzZWxmKS4KKworICAgICAgICBVcGRhdGUgY2FsbHMgdG8gaW50ZXJmYWNlcyB0aGF0IG5v
IGxvbmdlciB0YWtlIG9yIHJldHVybiBQYXNzUmVmUHRycy4KKworICAgICAgICAqIHd0Zi9NZXRh
QWxsb2NhdG9yLmNwcDoKKyAgICAgICAgKFdURjo6TWV0YUFsbG9jYXRvcjo6YWxsb2NhdGUpOgor
ICAgICAgICAqIHd0Zi9NZXRhQWxsb2NhdG9yLmg6CisgICAgICAgICogd3RmL1BhcmFsbGVsSm9i
c0dlbmVyaWMuaDoKKyAgICAgICAgKFdURjo6UGFyYWxsZWxFbnZpcm9ubWVudDo6VGhyZWFkUHJp
dmF0ZTo6Y3JlYXRlKToKKyAgICAgICAgKiB3dGYvdGV4dC9BdG9taWNTdHJpbmdJbXBsLmNwcDoK
KyAgICAgICAgKFdURjo6SGFzaEFuZFVURjhDaGFyYWN0ZXJzVHJhbnNsYXRvcjo6dHJhbnNsYXRl
KToKKyAgICAgICAgKiB3dGYvdGV4dC9DU3RyaW5nLmNwcDoKKyAgICAgICAgKFdURjo6Q1N0cmlu
Z0J1ZmZlcjo6Y3JlYXRlVW5pbml0aWFsaXplZCk6CisgICAgICAgICogd3RmL3RleHQvQ1N0cmlu
Zy5oOgorICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuY3BwOgorICAgICAgICAoV1RG
OjpTdHJpbmdCdWlsZGVyOjpyZWlmeVN0cmluZyk6CisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxk
ZXI6OnJlYWxsb2NhdGVCdWZmZXI8TENoYXI+KToKKyAgICAgICAgKFdURjo6U3RyaW5nQnVpbGRl
cjo6cmVhbGxvY2F0ZUJ1ZmZlcjxVQ2hhcj4pOgorICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ0lt
cGwuY3BwOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpyZWFsbG9jYXRlSW50ZXJuYWwpOgor
ICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpyZWFsbG9jYXRlKToKKyAgICAgICAgKFdURjo6U3Ry
aW5nSW1wbDo6Y3JlYXRlOEJpdElmUG9zc2libGUpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBs
OjpjcmVhdGVTeW1ib2wpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpjcmVhdGVOdWxsU3lt
Ym9sKToKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6Y29udmVydFRvTG93ZXJjYXNlV2l0aG91
dExvY2FsZSk6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OmNvbnZlcnRUb1VwcGVyY2FzZVdp
dGhvdXRMb2NhbGUpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpjb252ZXJ0VG9Mb3dlcmNh
c2VXaXRoTG9jYWxlKToKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6Y29udmVydFRvVXBwZXJj
YXNlV2l0aExvY2FsZSk6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OmNvbnZlcnRBU0NJSUNh
c2UpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAg
ICAqIHd0Zi90ZXh0L1N0cmluZ0ltcGwuaDoKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6U3Ry
aW5nSW1wbCk6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OmNyZWF0ZVN1YnN0cmluZ1NoYXJp
bmdJbXBsKToKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6dHJ5Q3JlYXRlVW5pbml0aWFsaXpl
ZCk6CisgICAgICAgICogd3RmL3RleHQvU3ltYm9sUmVnaXN0cnkuY3BwOgorICAgICAgICAoV1RG
OjpTeW1ib2xSZWdpc3RyeTo6c3ltYm9sRm9yS2V5KToKKyAgICAgICAgKiB3dGYvdGV4dC9XVEZT
dHJpbmcuY3BwOgorICAgICAgICAoV1RGOjpTdHJpbmc6OnN1YnN0cmluZ1NoYXJpbmdJbXBsKToK
KyAgICAgICAgKiB3dGYvdGV4dC9XVEZTdHJpbmcuaDoKKyAgICAgICAgKFdURjo6U3RyaW5nOjpT
dHJpbmcpOiBEZWxldGVkLgorICAgICAgICAqIHd0Zi90ZXh0L2NmL1N0cmluZ0ltcGxDRi5jcHA6
CisKIDIwMTYtMDUtMjQgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBsZS5jb20+CiAK
ICAgICAgICAgTExJbnQgc2hvdWxkIGJlIGFibGUgdG8gY2FjaGUgcHJvdG90eXBlIGxvYWRzIGZv
ciB2YWx1ZXMgaW4gR2V0QnlJZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
IGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGE2M2YwMDlkN2Y2OTdiNjFkZDVkMzEy
ODk1YzljYTBiOTkyMjgyZmUuLmUyN2U1NzA4ODEwNGZhN2FhOTJmNzA4OWRkYjRjNTVhZWRhZTY4
OTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAxNi0wNS0xOSAgS2VpdGggUm9sbGlu
ICA8a3JvbGxpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIGFsbCB1c2VzIG9mIFBhc3NS
ZWZQdHIgaW4gV1RGCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNTc1OTYKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzI2MjM0MzkxPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVwZGF0ZSBjYWxscyB0byBp
bnRlcmZhY2VzIHRoYXQgbm8gbG9uZ2VyIHRha2Ugb3IgcmV0dXJuIFBhc3NSZWZQdHJzLgorCisg
ICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojpk
aXNwbGF5U3RyaW5nTW9kaWZpZWRCeUVuY29kaW5nKToKKyAgICAgICAgKiB4bWwvWFBhdGhHcmFt
bWFyLnk6CisKIDIwMTYtMDUtMjUgIE5hZWwgT3VlZHJhb2dvICA8bmFlbC5vdWVkcmFvZ29AY3Jm
LmNhbm9uLmZyPgogCiAgICAgICAgIFJlbW92ZSB1bnVzZWQgc2xvdEJhc2UgcGFyYW1ldGVyIGlu
IGJpbmRpbmdzIGdlbmVyYXRvcgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNTdHJpbmcuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJp
bmcuY3BwCmluZGV4IGFkOGE2N2E0NTcxOGVhN2U2YTE0ZDhjYTU2YjA1MjcxOTg4ZThmNmUuLjRm
NjAzNzRhNTQ0YjNmMTMzNWVkNDQ4ZjU2MDNlMDkxMTNmMmE3OWUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5jcHAKQEAgLTI1Miw5ICsyNTIsOSBAQCB2b2lkIEpT
Um9wZVN0cmluZzo6cmVzb2x2ZVJvcGUoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogICAgIAogICAg
IGlmIChpczhCaXQoKSkgewogICAgICAgICBMQ2hhciogYnVmZmVyOwotICAgICAgICBpZiAoUmVm
UHRyPFN0cmluZ0ltcGw+IG5ld0ltcGwgPSBTdHJpbmdJbXBsOjp0cnlDcmVhdGVVbmluaXRpYWxp
emVkKG1fbGVuZ3RoLCBidWZmZXIpKSB7CisgICAgICAgIGlmIChhdXRvIG5ld0ltcGwgPSBTdHJp
bmdJbXBsOjp0cnlDcmVhdGVVbmluaXRpYWxpemVkKG1fbGVuZ3RoLCBidWZmZXIpKSB7CiAgICAg
ICAgICAgICBIZWFwOjpoZWFwKHRoaXMpLT5yZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZChuZXdJ
bXBsLT5jb3N0KCkpOwotICAgICAgICAgICAgbV92YWx1ZSA9IG5ld0ltcGwucmVsZWFzZSgpOwor
ICAgICAgICAgICAgbV92YWx1ZSA9IFdURk1vdmUobmV3SW1wbCk7CiAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICBvdXRPZk1lbW9yeShleGVjKTsKICAgICAgICAgICAgIHJldHVybjsKQEAg
LTI2Niw5ICsyNjYsOSBAQCB2b2lkIEpTUm9wZVN0cmluZzo6cmVzb2x2ZVJvcGUoRXhlY1N0YXRl
KiBleGVjKSBjb25zdAogICAgIH0KIAogICAgIFVDaGFyKiBidWZmZXI7Ci0gICAgaWYgKFJlZlB0
cjxTdHJpbmdJbXBsPiBuZXdJbXBsID0gU3RyaW5nSW1wbDo6dHJ5Q3JlYXRlVW5pbml0aWFsaXpl
ZChtX2xlbmd0aCwgYnVmZmVyKSkgeworICAgIGlmIChhdXRvIG5ld0ltcGwgPSBTdHJpbmdJbXBs
Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKG1fbGVuZ3RoLCBidWZmZXIpKSB7CiAgICAgICAgIEhl
YXA6OmhlYXAodGhpcyktPnJlcG9ydEV4dHJhTWVtb3J5QWxsb2NhdGVkKG5ld0ltcGwtPmNvc3Qo
KSk7Ci0gICAgICAgIG1fdmFsdWUgPSBuZXdJbXBsLnJlbGVhc2UoKTsKKyAgICAgICAgbV92YWx1
ZSA9IFdURk1vdmUobmV3SW1wbCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgb3V0T2ZNZW1vcnko
ZXhlYyk7CiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTU3RyaW5nLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0
cmluZy5oCmluZGV4IDYwODJmNjdiMDRjMTgxODExOTQwODIzNGRjNWFkYzBmNGZiYjI2NTcuLmNi
YjlkMGY5MWFmNWNlN2IzYTFlY2Y5NmMzZjRjZmFlYzI3NWVjMzAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaApAQCAtOTMsNyArOTMsNyBAQCBwcml2YXRlOgogICAg
IEpTU3RyaW5nKFZNJiB2bSwgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiB2YWx1ZSkKICAgICAgICAg
OiBKU0NlbGwodm0sIHZtLnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkKICAgICAgICAgLCBtX2ZsYWdz
KDApCi0gICAgICAgICwgbV92YWx1ZSh2YWx1ZSkKKyAgICAgICAgLCBtX3ZhbHVlKGFkb3B0UmVm
KCp2YWx1ZS5sZWFrUmVmKCkpKQogICAgIHsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1ByaXZhdGVOYW1lLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Qcml2YXRlTmFtZS5oCmluZGV4IDg1YzEzOWUwZDlhNWViNGViYjU5MTk5NGE5
NjNkOTRjOTRhNzk1NDcuLmYwYmM2MGRhM2ExYzI1NmU5MjI5MzQ1YTg0NDhjNWY4YmNiNjU0Y2Ig
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ByaXZhdGVOYW1lLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJpdmF0ZU5hbWUuaApAQCAtNDQs
NyArNDQsNyBAQCBwdWJsaWM6CiAKICAgICBlbnVtIERlc2NyaXB0aW9uVGFnIHsgRGVzY3JpcHRp
b24gfTsKICAgICBleHBsaWNpdCBQcml2YXRlTmFtZShEZXNjcmlwdGlvblRhZywgY29uc3QgU3Ry
aW5nJiBkZXNjcmlwdGlvbikKLSAgICAgICAgOiBtX3VpZChTdHJpbmdJbXBsOjpjcmVhdGVTeW1i
b2woZGVzY3JpcHRpb24uaW1wbCgpKSkKKyAgICAgICAgOiBtX3VpZChTdHJpbmdJbXBsOjpjcmVh
dGVTeW1ib2woKmRlc2NyaXB0aW9uLmltcGwoKSkpCiAgICAgewogICAgIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU21hbGxTdHJpbmdzLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NtYWxsU3RyaW5ncy5jcHAKaW5kZXggOTQ3NTE4NjA3
Yjg4YjY3N2U4ZDFmNWVlYmUzZDE3NjU3YjI0YTMxZC4uMmQyNzhmMGQ4NmU3ZTVmMDEyOWY1YWE4
ODRlOTYyY2I2ZjFlYTk2ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU21hbGxTdHJpbmdzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
bWFsbFN0cmluZ3MuY3BwCkBAIC01Nyw3ICs1Nyw3IEBAIFNtYWxsU3RyaW5nc1N0b3JhZ2U6OlNt
YWxsU3RyaW5nc1N0b3JhZ2UoKQogICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBiYXNlU3RyaW5nID0g
U3RyaW5nSW1wbDo6Y3JlYXRlVW5pbml0aWFsaXplZChzaW5nbGVDaGFyYWN0ZXJTdHJpbmdDb3Vu
dCwgY2hhcmFjdGVyQnVmZmVyKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2luZ2xl
Q2hhcmFjdGVyU3RyaW5nQ291bnQ7ICsraSkgewogICAgICAgICBjaGFyYWN0ZXJCdWZmZXJbaV0g
PSBpOwotICAgICAgICBtX3JlcHNbaV0gPSBBdG9taWNTdHJpbmdJbXBsOjphZGQoUGFzc1JlZlB0
cjxTdHJpbmdJbXBsPihTdHJpbmdJbXBsOjpjcmVhdGVTdWJzdHJpbmdTaGFyaW5nSW1wbChiYXNl
U3RyaW5nLCBpLCAxKSkuZ2V0KCkpOworICAgICAgICBtX3JlcHNbaV0gPSBBdG9taWNTdHJpbmdJ
bXBsOjphZGQoU3RyaW5nSW1wbDo6Y3JlYXRlU3Vic3RyaW5nU2hhcmluZ0ltcGwoYmFzZVN0cmlu
Zy5nZXQoKSwgaSwgMSkucHRyKCkpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nQ29uc3RydWN0b3IuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nQ29uc3RydWN0b3IuY3BwCmluZGV4IDNkNTk0Mjc3MmZm
ZjVmNTYwNGMzMWIwMGM4ODhlMTIxN2JhOWFkMGEuLjBkMmE3NDU4YzYwM2Q0MWZmNmJiNGFkNzMz
M2JkNzQzYWYwMzk4NDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cmluZ0NvbnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJpbmdDb25zdHJ1Y3Rvci5jcHAKQEAgLTc1LDEwICs3NSwxMCBAQCBzdGF0aWMgTkVWRVJf
SU5MSU5FIEpTVmFsdWUgc3RyaW5nRnJvbUNoYXJDb2RlU2xvd0Nhc2UoRXhlY1N0YXRlKiBleGVj
KQogewogICAgIHVuc2lnbmVkIGxlbmd0aCA9IGV4ZWMtPmFyZ3VtZW50Q291bnQoKTsKICAgICBV
Q2hhciogYnVmOwotICAgIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gaW1wbCA9IFN0cmluZ0ltcGw6
OmNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBidWYpOworICAgIGF1dG8gaW1wbCA9IFN0cmlu
Z0ltcGw6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBidWYpOwogICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKICAgICAgICAgYnVmW2ldID0gc3RhdGljX2Nhc3Q8
VUNoYXI+KGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KGkpLnRvVUludDMyKGV4ZWMpKTsKLSAgICBy
ZXR1cm4ganNTdHJpbmcoZXhlYywgaW1wbCk7CisgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIFdU
Rk1vdmUoaW1wbCkpOwogfQogCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBz
dHJpbmdGcm9tQ2hhckNvZGUoRXhlY1N0YXRlKiBleGVjKQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAKaW5kZXggYWVmMzQzYmFkYjhmMDIz
M2E3NDhhMGZkZTAzYmQ4NzQwYmQ0NmI4Mi4uOWQ5ZmYzYTg3ZWFhMTlhNzkyNDU3NjM5NjA0YzVl
NDM4NTQzYTllNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Ry
aW5nUHJvdG90eXBlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJp
bmdQcm90b3R5cGUuY3BwCkBAIC0zMTIsNyArMzEyLDcgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUg
SlNWYWx1ZSBqc1NwbGljZVN1YnN0cmluZ3MoRXhlY1N0YXRlKiBleGVjLCBKU1N0cmluZyogc291
cmMKICAgICBpZiAoc291cmNlLmlzOEJpdCgpKSB7CiAgICAgICAgIExDaGFyKiBidWZmZXI7CiAg
ICAgICAgIGNvbnN0IExDaGFyKiBzb3VyY2VEYXRhID0gc291cmNlLmNoYXJhY3RlcnM4KCk7Ci0g
ICAgICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBpbXBsID0gU3RyaW5nSW1wbDo6dHJ5Q3JlYXRlVW5p
bml0aWFsaXplZCh0b3RhbExlbmd0aCwgYnVmZmVyKTsKKyAgICAgICAgYXV0byBpbXBsID0gU3Ry
aW5nSW1wbDo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZCh0b3RhbExlbmd0aCwgYnVmZmVyKTsKICAg
ICAgICAgaWYgKCFpbXBsKQogICAgICAgICAgICAgcmV0dXJuIHRocm93T3V0T2ZNZW1vcnlFcnJv
cihleGVjKTsKIApAQCAtMzI0LDEzICszMjQsMTMgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgSlNW
YWx1ZSBqc1NwbGljZVN1YnN0cmluZ3MoRXhlY1N0YXRlKiBleGVjLCBKU1N0cmluZyogc291cmMK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIHJldHVybiBqc1N0cmluZyhleGVj
LCBpbXBsLnJlbGVhc2UoKSk7CisgICAgICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBXVEZNb3Zl
KGltcGwpKTsKICAgICB9CiAKICAgICBVQ2hhciogYnVmZmVyOwogICAgIGNvbnN0IFVDaGFyKiBz
b3VyY2VEYXRhID0gc291cmNlLmNoYXJhY3RlcnMxNigpOwogCi0gICAgUmVmUHRyPFN0cmluZ0lt
cGw+IGltcGwgPSBTdHJpbmdJbXBsOjp0cnlDcmVhdGVVbmluaXRpYWxpemVkKHRvdGFsTGVuZ3Ro
LCBidWZmZXIpOworICAgIGF1dG8gaW1wbCA9IFN0cmluZ0ltcGw6OnRyeUNyZWF0ZVVuaW5pdGlh
bGl6ZWQodG90YWxMZW5ndGgsIGJ1ZmZlcik7CiAgICAgaWYgKCFpbXBsKQogICAgICAgICByZXR1
cm4gdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOwogCkBAIC0zNDIsNyArMzQyLDcgQEAgc3Rh
dGljIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBqc1NwbGljZVN1YnN0cmluZ3MoRXhlY1N0YXRlKiBl
eGVjLCBKU1N0cmluZyogc291cmMKICAgICAgICAgfQogICAgIH0KIAotICAgIHJldHVybiBqc1N0
cmluZyhleGVjLCBpbXBsLnJlbGVhc2UoKSk7CisgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIFdU
Rk1vdmUoaW1wbCkpOwogfQogCiBzdGF0aWMgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGpzU3BsaWNl
U3Vic3RyaW5nc1dpdGhTZXBhcmF0b3JzKEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcqIHNvdXJj
ZVZhbCwgY29uc3QgU3RyaW5nJiBzb3VyY2UsIGNvbnN0IFN0cmluZ1JhbmdlKiBzdWJzdHJpbmdS
YW5nZXMsIGludCByYW5nZUNvdW50LCBjb25zdCBTdHJpbmcqIHNlcGFyYXRvcnMsIGludCBzZXBh
cmF0b3JDb3VudCkKQEAgLTM3Niw3ICszNzYsNyBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBKU1Zh
bHVlIGpzU3BsaWNlU3Vic3RyaW5nc1dpdGhTZXBhcmF0b3JzKEV4ZWNTdGF0ZSogZXhlYywgSgog
ICAgICAgICBMQ2hhciogYnVmZmVyOwogICAgICAgICBjb25zdCBMQ2hhciogc291cmNlRGF0YSA9
IHNvdXJjZS5jaGFyYWN0ZXJzOCgpOwogCi0gICAgICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBpbXBs
ID0gU3RyaW5nSW1wbDo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZCh0b3RhbExlbmd0aC51bnNhZmVH
ZXQoKSwgYnVmZmVyKTsKKyAgICAgICAgYXV0byBpbXBsID0gU3RyaW5nSW1wbDo6dHJ5Q3JlYXRl
VW5pbml0aWFsaXplZCh0b3RhbExlbmd0aC51bnNhZmVHZXQoKSwgYnVmZmVyKTsKICAgICAgICAg
aWYgKCFpbXBsKQogICAgICAgICAgICAgcmV0dXJuIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVj
KTsKIApAQCAtMzk3LDExICszOTcsMTEgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBq
c1NwbGljZVN1YnN0cmluZ3NXaXRoU2VwYXJhdG9ycyhFeGVjU3RhdGUqIGV4ZWMsIEoKICAgICAg
ICAgICAgIH0KICAgICAgICAgfSAgICAgICAgCiAKLSAgICAgICAgcmV0dXJuIGpzU3RyaW5nKGV4
ZWMsIGltcGwucmVsZWFzZSgpKTsKKyAgICAgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIFdURk1v
dmUoaW1wbCkpOwogICAgIH0KIAogICAgIFVDaGFyKiBidWZmZXI7Ci0gICAgUmVmUHRyPFN0cmlu
Z0ltcGw+IGltcGwgPSBTdHJpbmdJbXBsOjp0cnlDcmVhdGVVbmluaXRpYWxpemVkKHRvdGFsTGVu
Z3RoLnVuc2FmZUdldCgpLCBidWZmZXIpOworICAgIGF1dG8gaW1wbCA9IFN0cmluZ0ltcGw6OnRy
eUNyZWF0ZVVuaW5pdGlhbGl6ZWQodG90YWxMZW5ndGgudW5zYWZlR2V0KCksIGJ1ZmZlcik7CiAg
ICAgaWYgKCFpbXBsKQogICAgICAgICByZXR1cm4gdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMp
OwogCkBAIC00MjgsNyArNDI4LDcgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBqc1Nw
bGljZVN1YnN0cmluZ3NXaXRoU2VwYXJhdG9ycyhFeGVjU3RhdGUqIGV4ZWMsIEoKICAgICAgICAg
fQogICAgIH0KIAotICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBpbXBsLnJlbGVhc2UoKSk7Cisg
ICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIFdURk1vdmUoaW1wbCkpOwogfQogCiBzdGF0aWMgQUxX
QVlTX0lOTElORSBFbmNvZGVkSlNWYWx1ZSByZW1vdmVVc2luZ1JlZ0V4cFNlYXJjaChWTSYgdm0s
IEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcqIHN0cmluZywgY29uc3QgU3RyaW5nJiBzb3VyY2Us
IFJlZ0V4cCogcmVnRXhwKQpAQCAtNzU2LDI2ICs3NTYsMjYgQEAgdGVtcGxhdGUgPHR5cGVuYW1l
IENoYXJhY3RlclR5cGU+CiBzdGF0aWMgaW5saW5lIEpTVmFsdWUgcmVwZWF0Q2hhcmFjdGVyKEV4
ZWNTdGF0ZSogZXhlYywgQ2hhcmFjdGVyVHlwZSBjaGFyYWN0ZXIsIHVuc2lnbmVkIHJlcGVhdENv
dW50KQogewogICAgIENoYXJhY3RlclR5cGUqIGJ1ZmZlciA9IG51bGxwdHI7Ci0gICAgUmVmUHRy
PFN0cmluZ0ltcGw+IGltcGwgPSBTdHJpbmdJbXBsOjp0cnlDcmVhdGVVbmluaXRpYWxpemVkKHJl
cGVhdENvdW50LCBidWZmZXIpOworICAgIGF1dG8gaW1wbCA9IFN0cmluZ0ltcGw6OnRyeUNyZWF0
ZVVuaW5pdGlhbGl6ZWQocmVwZWF0Q291bnQsIGJ1ZmZlcik7CiAgICAgaWYgKCFpbXBsKQogICAg
ICAgICByZXR1cm4gdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOwogCiAgICAgc3RkOjpmaWxs
X24oYnVmZmVyLCByZXBlYXRDb3VudCwgY2hhcmFjdGVyKTsKIAotICAgIHJldHVybiBqc1N0cmlu
ZyhleGVjLCBpbXBsLnJlbGVhc2UoKSk7CisgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIFdURk1v
dmUoaW1wbCkpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KIHN0YXRp
YyBpbmxpbmUgSlNTdHJpbmcqIHJlcGVhdENoYXJhY3RlcihFeGVjU3RhdGUmIGV4ZWMsIENoYXJh
Y3RlclR5cGUgY2hhcmFjdGVyLCB1bnNpZ25lZCByZXBlYXRDb3VudCkKIHsKICAgICBDaGFyYWN0
ZXJUeXBlKiBidWZmZXIgPSBudWxscHRyOwotICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBpbXBsID0g
U3RyaW5nSW1wbDo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChyZXBlYXRDb3VudCwgYnVmZmVyKTsK
KyAgICBhdXRvIGltcGwgPSBTdHJpbmdJbXBsOjp0cnlDcmVhdGVVbmluaXRpYWxpemVkKHJlcGVh
dENvdW50LCBidWZmZXIpOwogICAgIGlmICghaW1wbCkKICAgICAgICAgcmV0dXJuIHRocm93T3V0
T2ZNZW1vcnlFcnJvcigmZXhlYyksIG51bGxwdHI7CiAKICAgICBzdGQ6OmZpbGxfbihidWZmZXIs
IHJlcGVhdENvdW50LCBjaGFyYWN0ZXIpOwogCi0gICAgcmV0dXJuIGpzU3RyaW5nKCZleGVjLCBp
bXBsLnJlbGVhc2UoKSk7CisgICAgcmV0dXJuIGpzU3RyaW5nKCZleGVjLCBXVEZNb3ZlKGltcGwp
KTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNSZXBl
YXRDaGFyYWN0ZXIoRXhlY1N0YXRlKiBleGVjKQpAQCAtMTU3Nyw3ICsxNTc3LDcgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNGb250c2l6ZShFeGVjU3RhdGUq
IGV4ZWMpCiAgICAgICAgIHVuc2lnbmVkIGJ1ZmZlclNpemUgPSAyMiArIHN0cmluZ1NpemU7CiAg
ICAgICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgaGF2ZSBhbiA4LWJpdCB2ZXJzaW9uIG9mIHRoaXMg
Y29kZSBwYXRoIHRvbz8gT3IgbWF5YmUgb25seSBhbiA4LWJpdCB2ZXJzaW9uPwogICAgICAgICBV
Q2hhciogYnVmZmVyOwotICAgICAgICBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGltcGwgPSBTdHJp
bmdJbXBsOjp0cnlDcmVhdGVVbmluaXRpYWxpemVkKGJ1ZmZlclNpemUsIGJ1ZmZlcik7CisgICAg
ICAgIGF1dG8gaW1wbCA9IFN0cmluZ0ltcGw6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoYnVmZmVy
U2l6ZSwgYnVmZmVyKTsKICAgICAgICAgaWYgKCFpbXBsKQogICAgICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgYnVmZmVyWzBdID0gJzwnOwpA
QCAtMTYwMyw3ICsxNjAzLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQ
cm90b0Z1bmNGb250c2l6ZShFeGVjU3RhdGUqIGV4ZWMpCiAgICAgICAgIGJ1ZmZlclsxOSArIHN0
cmluZ1NpemVdID0gJ24nOwogICAgICAgICBidWZmZXJbMjAgKyBzdHJpbmdTaXplXSA9ICd0JzsK
ICAgICAgICAgYnVmZmVyWzIxICsgc3RyaW5nU2l6ZV0gPSAnPic7Ci0gICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNOb250cml2aWFsU3RyaW5nKGV4ZWMsIGltcGwpKTsKKyAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywgV1RGTW92ZShp
bXBsKSkpOwogICAgIH0KIAogICAgIFN0cmluZyBmb250U2l6ZSA9IGEwLnRvV1RGU3RyaW5nKGV4
ZWMpOwpAQCAtMTY0Niw3ICsxNjQ2LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBz
dHJpbmdQcm90b0Z1bmNMaW5rKEV4ZWNTdGF0ZSogZXhlYykKICAgICB1bnNpZ25lZCBidWZmZXJT
aXplID0gMTUgKyBsaW5rVGV4dFNpemUgKyBzdHJpbmdTaXplOwogICAgIC8vIEZJWE1FOiBTaG91
bGQgd2UgaGF2ZSBhbiA4LWJpdCB2ZXJzaW9uIG9mIHRoaXMgY29kZSBwYXRoIHRvbz8gT3IgbWF5
YmUgb25seSBhbiA4LWJpdCB2ZXJzaW9uPwogICAgIFVDaGFyKiBidWZmZXI7Ci0gICAgUGFzc1Jl
ZlB0cjxTdHJpbmdJbXBsPiBpbXBsID0gU3RyaW5nSW1wbDo6dHJ5Q3JlYXRlVW5pbml0aWFsaXpl
ZChidWZmZXJTaXplLCBidWZmZXIpOworICAgIGF1dG8gaW1wbCA9IFN0cmluZ0ltcGw6OnRyeUNy
ZWF0ZVVuaW5pdGlhbGl6ZWQoYnVmZmVyU2l6ZSwgYnVmZmVyKTsKICAgICBpZiAoIWltcGwpCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYnVmZmVy
WzBdID0gJzwnOwpAQCAtMTY2Niw3ICsxNjY2LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBzdHJpbmdQcm90b0Z1bmNMaW5rKEV4ZWNTdGF0ZSogZXhlYykKICAgICBidWZmZXJbMTIg
KyBsaW5rVGV4dFNpemUgKyBzdHJpbmdTaXplXSA9ICcvJzsKICAgICBidWZmZXJbMTMgKyBsaW5r
VGV4dFNpemUgKyBzdHJpbmdTaXplXSA9ICdhJzsKICAgICBidWZmZXJbMTQgKyBsaW5rVGV4dFNp
emUgKyBzdHJpbmdTaXplXSA9ICc+JzsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTm9u
dHJpdmlhbFN0cmluZyhleGVjLCBpbXBsKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c05vbnRyaXZpYWxTdHJpbmcoZXhlYywgV1RGTW92ZShpbXBsKSkpOwogfQogCiBlbnVtIHsKQEAg
LTE4ODMsNyArMTg4Myw3IEBAIHN0YXRpYyBKU1ZhbHVlIG5vcm1hbGl6ZShFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IFVDaGFyKiBzb3VyY2UsIHNpemVfdCBzb3VyY2VMZW5nCiAgICAgfQogCiAgICAg
VUNoYXIqIGJ1ZmZlciA9IG51bGxwdHI7Ci0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IGltcGwgPSBT
dHJpbmdJbXBsOjp0cnlDcmVhdGVVbmluaXRpYWxpemVkKG5vcm1hbGl6ZWRTdHJpbmdMZW5ndGgs
IGJ1ZmZlcik7CisgICAgYXV0byBpbXBsID0gU3RyaW5nSW1wbDo6dHJ5Q3JlYXRlVW5pbml0aWFs
aXplZChub3JtYWxpemVkU3RyaW5nTGVuZ3RoLCBidWZmZXIpOwogICAgIGlmICghaW1wbCkKICAg
ICAgICAgcmV0dXJuIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKIApAQCAtMTg5Miw3ICsx
ODkyLDcgQEAgc3RhdGljIEpTVmFsdWUgbm9ybWFsaXplKEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
VUNoYXIqIHNvdXJjZSwgc2l6ZV90IHNvdXJjZUxlbmcKICAgICBpZiAoVV9GQUlMVVJFKHN0YXR1
cykpCiAgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjKTsKIAotICAgIHJldHVybiBq
c1N0cmluZyhleGVjLCBpbXBsLnJlbGVhc2UoKSk7CisgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMs
IFdURk1vdmUoaW1wbCkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmlu
Z1Byb3RvRnVuY05vcm1hbGl6ZShFeGVjU3RhdGUqIGV4ZWMpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V1RGL3d0Zi9NZXRhQWxsb2NhdG9yLmNwcCBiL1NvdXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0b3Iu
Y3BwCmluZGV4IGRkMDY1OTIwNThmMmQyMThlOTc2YjQ2NGZjMjM5OGJiMDU5NzA2MjkuLjZlNDRi
NjcyNGIyODNkZDRjNzZkMTZlZTQ0OGM3ODMwNTJlODJmYTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
VEYvd3RmL01ldGFBbGxvY2F0b3IuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0
b3IuY3BwCkBAIC0xNDgsMTIgKzE0OCwxMiBAQCBNZXRhQWxsb2NhdG9yOjpNZXRhQWxsb2NhdG9y
KHNpemVfdCBhbGxvY2F0aW9uR3JhbnVsZSwgc2l6ZV90IHBhZ2VTaXplKQogICAgIEFTU0VSVChz
dGF0aWNfY2FzdDxzaXplX3Q+KDEpIDw8IG1fbG9nQWxsb2NhdGlvbkdyYW51bGUgPT0gbV9hbGxv
Y2F0aW9uR3JhbnVsZSk7CiB9CiAKLVBhc3NSZWZQdHI8TWV0YUFsbG9jYXRvckhhbmRsZT4gTWV0
YUFsbG9jYXRvcjo6YWxsb2NhdGUoc2l6ZV90IHNpemVJbkJ5dGVzLCB2b2lkKiBvd25lclVJRCkK
K1JlZlB0cjxNZXRhQWxsb2NhdG9ySGFuZGxlPiBNZXRhQWxsb2NhdG9yOjphbGxvY2F0ZShzaXpl
X3Qgc2l6ZUluQnl0ZXMsIHZvaWQqIG93bmVyVUlEKQogewogICAgIExvY2tIb2xkZXIgbG9ja2Vy
KCZtX2xvY2spOwogCiAgICAgaWYgKCFzaXplSW5CeXRlcykKLSAgICAgICAgcmV0dXJuIDA7Cisg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgIAogICAgIHNpemVJbkJ5dGVzID0gcm91bmRVcChz
aXplSW5CeXRlcyk7CiAgICAgCkBAIC0xNjQsNyArMTY0LDcgQEAgUGFzc1JlZlB0cjxNZXRhQWxs
b2NhdG9ySGFuZGxlPiBNZXRhQWxsb2NhdG9yOjphbGxvY2F0ZShzaXplX3Qgc2l6ZUluQnl0ZXMs
IHZvaWQKICAgICAgICAgCiAgICAgICAgIHN0YXJ0ID0gYWxsb2NhdGVOZXdTcGFjZShudW1iZXJP
ZlBhZ2VzKTsKICAgICAgICAgaWYgKCFzdGFydCkKLSAgICAgICAgICAgIHJldHVybiAwOworICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIAogICAgICAgICBBU1NFUlQobnVtYmVy
T2ZQYWdlcyA+PSByZXF1ZXN0ZWROdW1iZXJPZlBhZ2VzKTsKICAgICAgICAgCkBAIC0xODYsMTIg
KzE4NiwxMiBAQCBQYXNzUmVmUHRyPE1ldGFBbGxvY2F0b3JIYW5kbGU+IE1ldGFBbGxvY2F0b3I6
OmFsbG9jYXRlKHNpemVfdCBzaXplSW5CeXRlcywgdm9pZAogICAgIG1fbnVtQWxsb2NhdGlvbnMr
KzsKICNlbmRpZgogCi0gICAgTWV0YUFsbG9jYXRvckhhbmRsZSogaGFuZGxlID0gbmV3IE1ldGFB
bGxvY2F0b3JIYW5kbGUodGhpcywgc3RhcnQsIHNpemVJbkJ5dGVzLCBvd25lclVJRCk7CisgICAg
YXV0byBoYW5kbGUgPSBhZG9wdFJlZigqbmV3IE1ldGFBbGxvY2F0b3JIYW5kbGUodGhpcywgc3Rh
cnQsIHNpemVJbkJ5dGVzLCBvd25lclVJRCkpOwogCiAgICAgaWYgKFVOTElLRUxZKCEhbV90cmFj
a2VyKSkKLSAgICAgICAgbV90cmFja2VyLT5ub3RpZnkoaGFuZGxlKTsKKyAgICAgICAgbV90cmFj
a2VyLT5ub3RpZnkoaGFuZGxlLnB0cigpKTsKIAotICAgIHJldHVybiBhZG9wdFJlZihoYW5kbGUp
OworICAgIHJldHVybiBXVEZNb3ZlKGhhbmRsZSk7CiB9CiAKIE1ldGFBbGxvY2F0b3I6OlN0YXRp
c3RpY3MgTWV0YUFsbG9jYXRvcjo6Y3VycmVudFN0YXRpc3RpY3MoKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi93dGYvTWV0YUFsbG9jYXRvci5oIGIvU291cmNlL1dURi93dGYvTWV0YUFsbG9jYXRv
ci5oCmluZGV4IDlkZDM3NWNhZDU0ZWNhMzBlZjdhNGVmOWQ3MjIwNDQ3OWMxYzBkNjMuLjg3Mzkw
MWJkZTZlMWY5MGI0NzFiZDEzYTdlODY5ZDc3MWIyYzAyMDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
VEYvd3RmL01ldGFBbGxvY2F0b3IuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9NZXRhQWxsb2NhdG9y
LmgKQEAgLTY4LDcgKzY4LDcgQEAgcHVibGljOgogICAgIAogICAgIFdURl9FWFBPUlRfUFJJVkFU
RSB2aXJ0dWFsIH5NZXRhQWxsb2NhdG9yKCk7CiAgICAgCi0gICAgV1RGX0VYUE9SVF9QUklWQVRF
IFBhc3NSZWZQdHI8TWV0YUFsbG9jYXRvckhhbmRsZT4gYWxsb2NhdGUoc2l6ZV90IHNpemVJbkJ5
dGVzLCB2b2lkKiBvd25lclVJRCk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIFJlZlB0cjxNZXRh
QWxsb2NhdG9ySGFuZGxlPiBhbGxvY2F0ZShzaXplX3Qgc2l6ZUluQnl0ZXMsIHZvaWQqIG93bmVy
VUlEKTsKIAogICAgIHZvaWQgdHJhY2tBbGxvY2F0aW9ucyhNZXRhQWxsb2NhdG9yVHJhY2tlciog
dHJhY2tlcikKICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9QYXJhbGxlbEpvYnNH
ZW5lcmljLmggYi9Tb3VyY2UvV1RGL3d0Zi9QYXJhbGxlbEpvYnNHZW5lcmljLmgKaW5kZXggM2Uy
ZTI5ZDYxYWE1OWNhZjFjMmFkNThhMjdkM2Q5MjUyOWQwZGQ4NC4uOWZkZDg4ZjMyYWNlYzgyYTQy
NGQ4OTZmYmM1MjJmMzAxZjZjNWFmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvUGFyYWxs
ZWxKb2JzR2VuZXJpYy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1BhcmFsbGVsSm9ic0dlbmVyaWMu
aApAQCAtNjYsNyArNjYsNyBAQCBwdWJsaWM6CiAKICAgICAgICAgdm9pZCB3YWl0Rm9yRmluaXNo
KCk7CiAKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8VGhyZWFkUHJpdmF0ZT4gY3JlYXRlKCkK
KyAgICAgICAgc3RhdGljIFJlZlB0cjxUaHJlYWRQcml2YXRlPiBjcmVhdGUoKQogICAgICAgICB7
CiAgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRocmVhZFByaXZhdGUoKSk7CiAgICAg
ICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvQXRvbWljU3RyaW5nSW1wbC5j
cHAgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21pY1N0cmluZ0ltcGwuY3BwCmluZGV4IDkwOTUz
M2M5OTA4ZmU2MDBkMWU4YjllNzAzYmNkOGUzNDgzOTkyN2MuLjAyNjZjZjNlOTRhYTkxYjMzMmVh
NWRkZWE5Yzg3YjgxMjJjOTllYWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvQXRv
bWljU3RyaW5nSW1wbC5jcHAKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9BdG9taWNTdHJpbmdJ
bXBsLmNwcApAQCAtMjE5LDcgKzIxOSw3IEBAIHN0cnVjdCBIYXNoQW5kVVRGOENoYXJhY3RlcnNU
cmFuc2xhdG9yIHsKICAgICBzdGF0aWMgdm9pZCB0cmFuc2xhdGUoU3RyaW5nSW1wbComIGxvY2F0
aW9uLCBjb25zdCBIYXNoQW5kVVRGOENoYXJhY3RlcnMmIGJ1ZmZlciwgdW5zaWduZWQgaGFzaCkK
ICAgICB7CiAgICAgICAgIFVDaGFyKiB0YXJnZXQ7Ci0gICAgICAgIFJlZlB0cjxTdHJpbmdJbXBs
PiBuZXdTdHJpbmcgPSBTdHJpbmdJbXBsOjpjcmVhdGVVbmluaXRpYWxpemVkKGJ1ZmZlci51dGYx
Nkxlbmd0aCwgdGFyZ2V0KTsKKyAgICAgICAgYXV0byBuZXdTdHJpbmcgPSBTdHJpbmdJbXBsOjpj
cmVhdGVVbmluaXRpYWxpemVkKGJ1ZmZlci51dGYxNkxlbmd0aCwgdGFyZ2V0KTsKIAogICAgICAg
ICBib29sIGlzQWxsQVNDSUk7CiAgICAgICAgIGNvbnN0IGNoYXIqIHNvdXJjZSA9IGJ1ZmZlci5j
aGFyYWN0ZXJzOwpAQCAtMjI5LDcgKzIyOSw3IEBAIHN0cnVjdCBIYXNoQW5kVVRGOENoYXJhY3Rl
cnNUcmFuc2xhdG9yIHsKICAgICAgICAgaWYgKGlzQWxsQVNDSUkpCiAgICAgICAgICAgICBuZXdT
dHJpbmcgPSBTdHJpbmdJbXBsOjpjcmVhdGUoYnVmZmVyLmNoYXJhY3RlcnMsIGJ1ZmZlci5sZW5n
dGgpOwogCi0gICAgICAgIGxvY2F0aW9uID0gbmV3U3RyaW5nLmxlYWtSZWYoKTsKKyAgICAgICAg
bG9jYXRpb24gPSAmbmV3U3RyaW5nLmxlYWtSZWYoKTsKICAgICAgICAgbG9jYXRpb24tPnNldEhh
c2goaGFzaCk7CiAgICAgICAgIGxvY2F0aW9uLT5zZXRJc0F0b21pYyh0cnVlKTsKICAgICB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0NTdHJpbmcuY3BwIGIvU291cmNlL1dURi93
dGYvdGV4dC9DU3RyaW5nLmNwcAppbmRleCBkMWYxODZiNGFmMjRiMjA1YzZlNmE5YmFmOGYxYjgw
ZGM3ZDZkNGRiLi4yMWIzN2ViYThjMjU0Mzk2ZmYxZmJmYzEwNWNmMzM4M2Q0NjBhODI0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0NTdHJpbmcuY3BwCisrKyBiL1NvdXJjZS9XVEYv
d3RmL3RleHQvQ1N0cmluZy5jcHAKQEAgLTMyLDE0ICszMiwxNCBAQAogCiBuYW1lc3BhY2UgV1RG
IHsKIAotUGFzc1JlZlB0cjxDU3RyaW5nQnVmZmVyPiBDU3RyaW5nQnVmZmVyOjpjcmVhdGVVbmlu
aXRpYWxpemVkKHNpemVfdCBsZW5ndGgpCitSZWY8Q1N0cmluZ0J1ZmZlcj4gQ1N0cmluZ0J1ZmZl
cjo6Y3JlYXRlVW5pbml0aWFsaXplZChzaXplX3QgbGVuZ3RoKQogewogICAgIFJFTEVBU0VfQVNT
RVJUKGxlbmd0aCA8IChzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgLSBzaXpl
b2YoQ1N0cmluZ0J1ZmZlcikpKTsKIAogICAgIC8vIFRoZSArMSBpcyBmb3IgdGhlIHRlcm1pbmF0
aW5nIG51bGwgY2hhcmFjdGVyLgogICAgIHNpemVfdCBzaXplID0gc2l6ZW9mKENTdHJpbmdCdWZm
ZXIpICsgbGVuZ3RoICsgMTsKICAgICBDU3RyaW5nQnVmZmVyKiBzdHJpbmdCdWZmZXIgPSBzdGF0
aWNfY2FzdDxDU3RyaW5nQnVmZmVyKj4oZmFzdE1hbGxvYyhzaXplKSk7Ci0gICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyAoTm90TnVsbCwgc3RyaW5nQnVmZmVyKSBDU3RyaW5nQnVmZmVyKGxlbmd0aCkp
OworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IChOb3ROdWxsLCBzdHJpbmdCdWZmZXIpIENTdHJp
bmdCdWZmZXIobGVuZ3RoKSk7CiB9CiAKIENTdHJpbmc6OkNTdHJpbmcoY29uc3QgY2hhciogc3Ry
KQpAQCAtNzYsNyArNzYsNyBAQCBjaGFyKiBDU3RyaW5nOjptdXRhYmxlRGF0YSgpCiAgICAgICAg
IHJldHVybiAwOwogICAgIHJldHVybiBtX2J1ZmZlci0+bXV0YWJsZURhdGEoKTsKIH0KLSAgICAK
KwogQ1N0cmluZyBDU3RyaW5nOjpuZXdVbmluaXRpYWxpemVkKHNpemVfdCBsZW5ndGgsIGNoYXIq
JiBjaGFyYWN0ZXJCdWZmZXIpCiB7CiAgICAgQ1N0cmluZyByZXN1bHQ7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL3d0Zi90ZXh0L0NTdHJpbmcuaCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvQ1N0cmlu
Zy5oCmluZGV4IDI5ZDNiMGVmMWI2OWQ3YTRiNzIwNmRhMGM4YmZmODI1MGRkYWZhZTcuLjRkOGQ4
MDM5OWM2OTAwYjEzM2U3MTVjNDMwN2Q4ZDQyNDM4M2Q2ZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
VEYvd3RmL3RleHQvQ1N0cmluZy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvQ1N0cmluZy5o
CkBAIC0yOCw3ICsyOCw3IEBACiAKICNpbmNsdWRlIDx3dGYvSGFzaEZ1bmN0aW9ucy5oPgogI2lu
Y2x1ZGUgPHd0Zi9IYXNoVHJhaXRzLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNp
bmNsdWRlIDx3dGYvUmVmLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KIAogbmFtZXNw
YWNlIFdURiB7CkBAIC00Myw3ICs0Myw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgZnJpZW5k
IGNsYXNzIENTdHJpbmc7CiAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxDU3RyaW5nQnVmZmVyPiBj
cmVhdGVVbmluaXRpYWxpemVkKHNpemVfdCBsZW5ndGgpOworICAgIHN0YXRpYyBSZWY8Q1N0cmlu
Z0J1ZmZlcj4gY3JlYXRlVW5pbml0aWFsaXplZChzaXplX3QgbGVuZ3RoKTsKIAogICAgIENTdHJp
bmdCdWZmZXIoc2l6ZV90IGxlbmd0aCkgOiBtX2xlbmd0aChsZW5ndGgpIHsgfQogICAgIGNoYXIq
IG11dGFibGVEYXRhKCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdF9wdHI8Y2hhcio+KHRoaXMg
KyAxKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmNw
cCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nQnVpbGRlci5jcHAKaW5kZXggMWQ2YWU2MjFk
MTg5NjFlYzkxM2NkN2RkYzMwMGViYTNiZWRmYjhjNS4uZDU0M2JhNGMwN2Q2NzQxMmNiM2IyNTg3
NTFiZmYzYzc5Y2U3NWJmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdC
dWlsZGVyLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuY3BwCkBA
IC01OSw3ICs1OSw3IEBAIHZvaWQgU3RyaW5nQnVpbGRlcjo6cmVpZnlTdHJpbmcoKSBjb25zdAog
ICAgIGlmIChtX2xlbmd0aCA9PSBtX2J1ZmZlci0+bGVuZ3RoKCkpCiAgICAgICAgIG1fc3RyaW5n
ID0gbV9idWZmZXIuZ2V0KCk7CiAgICAgZWxzZQotICAgICAgICBtX3N0cmluZyA9IFN0cmluZ0lt
cGw6OmNyZWF0ZVN1YnN0cmluZ1NoYXJpbmdJbXBsKG1fYnVmZmVyLCAwLCBtX2xlbmd0aCk7Cisg
ICAgICAgIG1fc3RyaW5nID0gU3RyaW5nSW1wbDo6Y3JlYXRlU3Vic3RyaW5nU2hhcmluZ0ltcGwo
bV9idWZmZXIuZ2V0KCksIDAsIG1fbGVuZ3RoKTsKIH0KIAogdm9pZCBTdHJpbmdCdWlsZGVyOjpy
ZXNpemUodW5zaWduZWQgbmV3U2l6ZSkKQEAgLTE0Nyw3ICsxNDcsNyBAQCB2b2lkIFN0cmluZ0J1
aWxkZXI6OnJlYWxsb2NhdGVCdWZmZXI8TENoYXI+KHVuc2lnbmVkIHJlcXVpcmVkTGVuZ3RoKQog
ICAgIEFTU0VSVChtX2J1ZmZlci0+aXM4Qml0KCkpOwogICAgIAogICAgIGlmIChtX2J1ZmZlci0+
aGFzT25lUmVmKCkpCi0gICAgICAgIG1fYnVmZmVyID0gU3RyaW5nSW1wbDo6cmVhbGxvY2F0ZSht
X2J1ZmZlci5yZWxlYXNlKCksIHJlcXVpcmVkTGVuZ3RoLCBtX2J1ZmZlckNoYXJhY3RlcnM4KTsK
KyAgICAgICAgbV9idWZmZXIgPSBTdHJpbmdJbXBsOjpyZWFsbG9jYXRlKFdURk1vdmUobV9idWZm
ZXIpLCByZXF1aXJlZExlbmd0aCwgbV9idWZmZXJDaGFyYWN0ZXJzOCk7CiAgICAgZWxzZQogICAg
ICAgICBhbGxvY2F0ZUJ1ZmZlcihtX2J1ZmZlci0+Y2hhcmFjdGVyczgoKSwgcmVxdWlyZWRMZW5n
dGgpOwogfQpAQCAtMTYyLDcgKzE2Miw3IEBAIHZvaWQgU3RyaW5nQnVpbGRlcjo6cmVhbGxvY2F0
ZUJ1ZmZlcjxVQ2hhcj4odW5zaWduZWQgcmVxdWlyZWRMZW5ndGgpCiAgICAgaWYgKG1fYnVmZmVy
LT5pczhCaXQoKSkKICAgICAgICAgYWxsb2NhdGVCdWZmZXJVcENvbnZlcnQobV9idWZmZXItPmNo
YXJhY3RlcnM4KCksIHJlcXVpcmVkTGVuZ3RoKTsKICAgICBlbHNlIGlmIChtX2J1ZmZlci0+aGFz
T25lUmVmKCkpCi0gICAgICAgIG1fYnVmZmVyID0gU3RyaW5nSW1wbDo6cmVhbGxvY2F0ZShtX2J1
ZmZlci5yZWxlYXNlKCksIHJlcXVpcmVkTGVuZ3RoLCBtX2J1ZmZlckNoYXJhY3RlcnMxNik7Cisg
ICAgICAgIG1fYnVmZmVyID0gU3RyaW5nSW1wbDo6cmVhbGxvY2F0ZShXVEZNb3ZlKG1fYnVmZmVy
KSwgcmVxdWlyZWRMZW5ndGgsIG1fYnVmZmVyQ2hhcmFjdGVyczE2KTsKICAgICBlbHNlCiAgICAg
ICAgIGFsbG9jYXRlQnVmZmVyKG1fYnVmZmVyLT5jaGFyYWN0ZXJzMTYoKSwgcmVxdWlyZWRMZW5n
dGgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmNwcCBi
L1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5jcHAKaW5kZXggZmMxNjI3NGVjMDRiZTc0
Y2MyYmY5ZjBmNDkxYTIyMzI0ZTM3OGQzMi4uZDYyNjk5YTdiZTUwMjRhOTk2NjI5ZDVjYWUwZjBm
NjA1MGM4NjcyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmNw
cAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuY3BwCkBAIC0yMDQsOCArMjA0
LDggQEAgUmVmPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5z
aWduZWQgbGVuZ3RoLCBVQ2hhciomIGRhdGEpCiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFy
VHlwZT4KLWlubGluZSBSZWY8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6cmVhbGxvY2F0ZUludGVy
bmFsKFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gb3JpZ2luYWxTdHJpbmcsIHVuc2lnbmVkIGxlbmd0
aCwgQ2hhclR5cGUqJiBkYXRhKQoteyAgIAoraW5saW5lIFJlZjxTdHJpbmdJbXBsPiBTdHJpbmdJ
bXBsOjpyZWFsbG9jYXRlSW50ZXJuYWwoUmVmUHRyPFN0cmluZ0ltcGw+JiYgb3JpZ2luYWxTdHJp
bmcsIHVuc2lnbmVkIGxlbmd0aCwgQ2hhclR5cGUqJiBkYXRhKQorewogICAgIEFTU0VSVChvcmln
aW5hbFN0cmluZy0+aGFzT25lUmVmKCkpOwogICAgIEFTU0VSVChvcmlnaW5hbFN0cmluZy0+YnVm
ZmVyT3duZXJzaGlwKCkgPT0gQnVmZmVySW50ZXJuYWwpOwogCkBAIC0yMjUsMTYgKzIyNSwxOCBA
QCBpbmxpbmUgUmVmPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OnJlYWxsb2NhdGVJbnRlcm5hbChQ
YXNzUmVmUHRyPFN0cmluZ0ltcGw+IG9yaQogICAgIHJldHVybiBjb25zdHJ1Y3RJbnRlcm5hbDxD
aGFyVHlwZT4oc3RyaW5nLCBsZW5ndGgpOwogfQogCi1SZWY8U3RyaW5nSW1wbD4gU3RyaW5nSW1w
bDo6cmVhbGxvY2F0ZShQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IG9yaWdpbmFsU3RyaW5nLCB1bnNp
Z25lZCBsZW5ndGgsIExDaGFyKiYgZGF0YSkKK1JlZjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpy
ZWFsbG9jYXRlKFJlZlB0cjxTdHJpbmdJbXBsPiYmIG9yaWdpbmFsU3RyaW5nLCB1bnNpZ25lZCBs
ZW5ndGgsIExDaGFyKiYgZGF0YSkKIHsKKyAgICBBU1NFUlQob3JpZ2luYWxTdHJpbmcpOwogICAg
IEFTU0VSVChvcmlnaW5hbFN0cmluZy0+aXM4Qml0KCkpOwotICAgIHJldHVybiByZWFsbG9jYXRl
SW50ZXJuYWwob3JpZ2luYWxTdHJpbmcsIGxlbmd0aCwgZGF0YSk7CisgICAgcmV0dXJuIHJlYWxs
b2NhdGVJbnRlcm5hbChXVEZNb3ZlKG9yaWdpbmFsU3RyaW5nKSwgbGVuZ3RoLCBkYXRhKTsKIH0K
IAotUmVmPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OnJlYWxsb2NhdGUoUGFzc1JlZlB0cjxTdHJp
bmdJbXBsPiBvcmlnaW5hbFN0cmluZywgdW5zaWduZWQgbGVuZ3RoLCBVQ2hhciomIGRhdGEpCitS
ZWY8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6cmVhbGxvY2F0ZShSZWZQdHI8U3RyaW5nSW1wbD4m
JiBvcmlnaW5hbFN0cmluZywgdW5zaWduZWQgbGVuZ3RoLCBVQ2hhciomIGRhdGEpCiB7CisgICAg
QVNTRVJUKG9yaWdpbmFsU3RyaW5nKTsKICAgICBBU1NFUlQoIW9yaWdpbmFsU3RyaW5nLT5pczhC
aXQoKSk7Ci0gICAgcmV0dXJuIHJlYWxsb2NhdGVJbnRlcm5hbChvcmlnaW5hbFN0cmluZywgbGVu
Z3RoLCBkYXRhKTsKKyAgICByZXR1cm4gcmVhbGxvY2F0ZUludGVybmFsKFdURk1vdmUob3JpZ2lu
YWxTdHJpbmcpLCBsZW5ndGgsIGRhdGEpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhclR5
cGU+CkBAIC0yNjUsNyArMjY3LDcgQEAgUmVmPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OmNyZWF0
ZThCaXRJZlBvc3NpYmxlKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ24KICAgICAgICAg
cmV0dXJuICplbXB0eSgpOwogCiAgICAgTENoYXIqIGRhdGE7Ci0gICAgUmVmUHRyPFN0cmluZ0lt
cGw+IHN0cmluZyA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWRJbnRlcm5hbE5vbkVtcHR5KGxlbmd0aCwg
ZGF0YSk7CisgICAgYXV0byBzdHJpbmcgPSBjcmVhdGVVbmluaXRpYWxpemVkSW50ZXJuYWxOb25F
bXB0eShsZW5ndGgsIGRhdGEpOwogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7
ICsraSkgewogICAgICAgICBpZiAoY2hhcmFjdGVyc1tpXSAmIDB4ZmYwMCkKQEAgLTI3Myw3ICsy
NzUsNyBAQCBSZWY8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6Y3JlYXRlOEJpdElmUG9zc2libGUo
Y29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbgogICAgICAgICBkYXRhW2ldID0gc3RhdGlj
X2Nhc3Q8TENoYXI+KGNoYXJhY3RlcnNbaV0pOwogICAgIH0KIAotICAgIHJldHVybiBzdHJpbmcu
cmVsZWFzZU5vbk51bGwoKTsKKyAgICByZXR1cm4gc3RyaW5nOwogfQogCiBSZWY8U3RyaW5nSW1w
bD4gU3RyaW5nSW1wbDo6Y3JlYXRlOEJpdElmUG9zc2libGUoY29uc3QgVUNoYXIqIHN0cmluZykK
QEAgLTI5MSw5ICsyOTMsOSBAQCBSZWY8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6Y3JlYXRlKGNv
bnN0IExDaGFyKiBzdHJpbmcpCiAgICAgcmV0dXJuIGNyZWF0ZShzdHJpbmcsIGxlbmd0aCk7CiB9
CiAKLVJlZjxTeW1ib2xJbXBsPiBTdHJpbmdJbXBsOjpjcmVhdGVTeW1ib2woUGFzc1JlZlB0cjxT
dHJpbmdJbXBsPiByZXApCitSZWY8U3ltYm9sSW1wbD4gU3RyaW5nSW1wbDo6Y3JlYXRlU3ltYm9s
KFN0cmluZ0ltcGwmIHJlcCkKIHsKLSAgICBTdHJpbmdJbXBsKiBvd25lclJlcCA9IChyZXAtPmJ1
ZmZlck93bmVyc2hpcCgpID09IEJ1ZmZlclN1YnN0cmluZykgPyByZXAtPnN1YnN0cmluZ0J1ZmZl
cigpIDogcmVwLmdldCgpOworICAgIFN0cmluZ0ltcGwqIG93bmVyUmVwID0gKHJlcC5idWZmZXJP
d25lcnNoaXAoKSA9PSBCdWZmZXJTdWJzdHJpbmcpID8gcmVwLnN1YnN0cmluZ0J1ZmZlcigpIDog
JnJlcDsKIAogICAgIC8vIFdlIGFsbG9jYXRlIGEgYnVmZmVyIHRoYXQgY29udGFpbnMKICAgICAv
LyAxLiB0aGUgU3RyaW5nSW1wbCBzdHJ1Y3QKQEAgLTMwMSwxNCArMzAzLDE0IEBAIFJlZjxTeW1i
b2xJbXBsPiBTdHJpbmdJbXBsOjpjcmVhdGVTeW1ib2woUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBy
ZXApCiAgICAgLy8gMy4gdGhlIHBvaW50ZXIgdG8gdGhlIHN5bWJvbCByZWdpc3RyeQogICAgIC8v
IDQuIHRoZSBwbGFjZWhvbGRlciBmb3Igc3ltYm9sIGF3YXJlIGhhc2ggdmFsdWUgKGFsbG9jYXRl
ZCBzaXplIGlzIHBvaW50ZXIgc2l6ZSwgYnV0IG9ubHkgNCBieXRlcyBhcmUgdXNlZCkKICAgICBT
dHJpbmdJbXBsKiBzdHJpbmdJbXBsID0gc3RhdGljX2Nhc3Q8U3RyaW5nSW1wbCo+KGZhc3RNYWxs
b2MoYWxsb2NhdGlvblNpemU8U3RyaW5nSW1wbCo+KDMpKSk7Ci0gICAgaWYgKHJlcC0+aXM4Qml0
KCkpCi0gICAgICAgIHJldHVybiBhZG9wdFJlZihzdGF0aWNfY2FzdDxTeW1ib2xJbXBsJj4oKm5l
dyAoTm90TnVsbCwgc3RyaW5nSW1wbCkgU3RyaW5nSW1wbChDcmVhdGVTeW1ib2wsIHJlcC0+bV9k
YXRhOCwgcmVwLT5sZW5ndGgoKSwgb3duZXJSZXApKSk7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKHN0
YXRpY19jYXN0PFN5bWJvbEltcGwmPigqbmV3IChOb3ROdWxsLCBzdHJpbmdJbXBsKSBTdHJpbmdJ
bXBsKENyZWF0ZVN5bWJvbCwgcmVwLT5tX2RhdGExNiwgcmVwLT5sZW5ndGgoKSwgb3duZXJSZXAp
KSk7CisgICAgaWYgKHJlcC5pczhCaXQoKSkKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKHN0YXRp
Y19jYXN0PFN5bWJvbEltcGwmPigqbmV3IChOb3ROdWxsLCBzdHJpbmdJbXBsKSBTdHJpbmdJbXBs
KENyZWF0ZVN5bWJvbCwgcmVwLm1fZGF0YTgsIHJlcC5sZW5ndGgoKSwgb3duZXJSZXApKSk7Cisg
ICAgcmV0dXJuIGFkb3B0UmVmKHN0YXRpY19jYXN0PFN5bWJvbEltcGwmPigqbmV3IChOb3ROdWxs
LCBzdHJpbmdJbXBsKSBTdHJpbmdJbXBsKENyZWF0ZVN5bWJvbCwgcmVwLm1fZGF0YTE2LCByZXAu
bGVuZ3RoKCksIG93bmVyUmVwKSkpOwogfQogCiBSZWY8U3ltYm9sSW1wbD4gU3RyaW5nSW1wbDo6
Y3JlYXRlTnVsbFN5bWJvbCgpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZVN5bWJvbChudWxsKCkpOwor
ICAgIHJldHVybiBjcmVhdGVTeW1ib2woKm51bGwoKSk7CiB9CiAKIGJvb2wgU3RyaW5nSW1wbDo6
Y29udGFpbnNPbmx5V2hpdGVzcGFjZSgpCkBAIC00MjcsMTkgKzQyOSwxOSBAQCBTbG93UGF0aDoK
IAogICAgIC8vIERvIGEgc2xvd2VyIGltcGxlbWVudGF0aW9uIGZvciBjYXNlcyB0aGF0IGluY2x1
ZGUgbm9uLUFTQ0lJIGNoYXJhY3RlcnMuCiAgICAgVUNoYXIqIGRhdGExNjsKLSAgICBSZWZQdHI8
U3RyaW5nSW1wbD4gbmV3SW1wbCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWRJbnRlcm5hbE5vbkVtcHR5
KG1fbGVuZ3RoLCBkYXRhMTYpOworICAgIGF1dG8gbmV3SW1wbCA9IGNyZWF0ZVVuaW5pdGlhbGl6
ZWRJbnRlcm5hbE5vbkVtcHR5KG1fbGVuZ3RoLCBkYXRhMTYpOwogCiAgICAgVUVycm9yQ29kZSBz
dGF0dXMgPSBVX1pFUk9fRVJST1I7CiAgICAgaW50MzJfdCByZWFsTGVuZ3RoID0gdV9zdHJUb0xv
d2VyKGRhdGExNiwgbGVuZ3RoLCBtX2RhdGExNiwgbV9sZW5ndGgsICIiLCAmc3RhdHVzKTsKICAg
ICBpZiAoVV9TVUNDRVNTKHN0YXR1cykgJiYgcmVhbExlbmd0aCA9PSBsZW5ndGgpCi0gICAgICAg
IHJldHVybiBuZXdJbXBsLnJlbGVhc2VOb25OdWxsKCk7CisgICAgICAgIHJldHVybiBuZXdJbXBs
OwogCiAgICAgbmV3SW1wbCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQocmVhbExlbmd0aCwgZGF0YTE2
KTsKICAgICBzdGF0dXMgPSBVX1pFUk9fRVJST1I7CiAgICAgdV9zdHJUb0xvd2VyKGRhdGExNiwg
cmVhbExlbmd0aCwgbV9kYXRhMTYsIG1fbGVuZ3RoLCAiIiwgJnN0YXR1cyk7CiAgICAgaWYgKFVf
RkFJTFVSRShzdGF0dXMpKQogICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgcmV0dXJuIG5ld0lt
cGwucmVsZWFzZU5vbk51bGwoKTsKKyAgICByZXR1cm4gbmV3SW1wbDsKIH0KIAogUmVmPFN0cmlu
Z0ltcGw+IFN0cmluZ0ltcGw6OmNvbnZlcnRUb1VwcGVyY2FzZVdpdGhvdXRMb2NhbGUoKQpAQCAt
NDU1LDcgKzQ1Nyw3IEBAIFJlZjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpjb252ZXJ0VG9VcHBl
cmNhc2VXaXRob3V0TG9jYWxlKCkKIAogICAgIGlmIChpczhCaXQoKSkgewogICAgICAgICBMQ2hh
ciogZGF0YTg7Ci0gICAgICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBuZXdJbXBsID0gY3JlYXRlVW5p
bml0aWFsaXplZChtX2xlbmd0aCwgZGF0YTgpOworICAgICAgICBhdXRvIG5ld0ltcGwgPSBjcmVh
dGVVbmluaXRpYWxpemVkKG1fbGVuZ3RoLCBkYXRhOCk7CiAgICAgICAgIAogICAgICAgICAvLyBE
byBhIGZhc3RlciBsb29wIGZvciB0aGUgY2FzZSB3aGVyZSBhbGwgdGhlIGNoYXJhY3RlcnMgYXJl
IEFTQ0lJLgogICAgICAgICB1bnNpZ25lZCBvcmVkID0gMDsKQEAgLTQ3Miw3ICs0NzQsNyBAQCBS
ZWY8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6Y29udmVydFRvVXBwZXJjYXNlV2l0aG91dExvY2Fs
ZSgpCiAjZW5kaWYKICAgICAgICAgfQogICAgICAgICBpZiAoIShvcmVkICYgfjB4N0YpKQotICAg
ICAgICAgICAgcmV0dXJuIG5ld0ltcGwucmVsZWFzZU5vbk51bGwoKTsKKyAgICAgICAgICAgIHJl
dHVybiBuZXdJbXBsOwogCiAgICAgICAgIC8vIERvIGEgc2xvd2VyIGltcGxlbWVudGF0aW9uIGZv
ciBjYXNlcyB0aGF0IGluY2x1ZGUgbm9uLUFTQ0lJIExhdGluLTEgY2hhcmFjdGVycy4KICAgICAg
ICAgaW50IG51bWJlclNoYXJwU0NoYXJhY3RlcnMgPSAwOwpAQCAtNDk0LDcgKzQ5Niw3IEBAIFJl
ZjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpjb252ZXJ0VG9VcHBlcmNhc2VXaXRob3V0TG9jYWxl
KCkKICAgICAgICAgfQogCiAgICAgICAgIGlmICghbnVtYmVyU2hhcnBTQ2hhcmFjdGVycykKLSAg
ICAgICAgICAgIHJldHVybiBuZXdJbXBsLnJlbGVhc2VOb25OdWxsKCk7CisgICAgICAgICAgICBy
ZXR1cm4gbmV3SW1wbDsKIAogICAgICAgICAvLyBXZSBoYXZlIG51bWJlclNTQ2hhcmFjdGVycyBz
aGFycC1zIGNoYXJhY3RlcnMsIGJ1dCBub25lIG9mIHRoZSBvdGhlciBzcGVjaWFsIGNoYXJhY3Rl
cnMuCiAgICAgICAgIG5ld0ltcGwgPSBjcmVhdGVVbmluaXRpYWxpemVkKG1fbGVuZ3RoICsgbnVt
YmVyU2hhcnBTQ2hhcmFjdGVycywgZGF0YTgpOwpAQCAtNTEyLDcgKzUxNCw3IEBAIFJlZjxTdHJp
bmdJbXBsPiBTdHJpbmdJbXBsOjpjb252ZXJ0VG9VcHBlcmNhc2VXaXRob3V0TG9jYWxlKCkKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIHJldHVybiBuZXdJbXBsLnJlbGVhc2VO
b25OdWxsKCk7CisgICAgICAgIHJldHVybiBuZXdJbXBsOwogICAgIH0KIAogdXBjb252ZXJ0OgpA
QCAtNTIwLDcgKzUyMiw3IEBAIHVwY29udmVydDoKICAgICBjb25zdCBVQ2hhciogc291cmNlMTYg
PSB1cGNvbnZlcnRlZENoYXJhY3RlcnM7CiAKICAgICBVQ2hhciogZGF0YTE2OwotICAgIFJlZlB0
cjxTdHJpbmdJbXBsPiBuZXdJbXBsID0gY3JlYXRlVW5pbml0aWFsaXplZChtX2xlbmd0aCwgZGF0
YTE2KTsKKyAgICBhdXRvIG5ld0ltcGwgPSBjcmVhdGVVbmluaXRpYWxpemVkKG1fbGVuZ3RoLCBk
YXRhMTYpOwogICAgIAogICAgIC8vIERvIGEgZmFzdGVyIGxvb3AgZm9yIHRoZSBjYXNlIHdoZXJl
IGFsbCB0aGUgY2hhcmFjdGVycyBhcmUgQVNDSUkuCiAgICAgdW5zaWduZWQgb3JlZCA9IDA7CkBA
IC01MzAsMTkgKzUzMiwxOSBAQCB1cGNvbnZlcnQ6CiAgICAgICAgIGRhdGExNltpXSA9IHRvQVND
SUlVcHBlcihjKTsKICAgICB9CiAgICAgaWYgKCEob3JlZCAmIH4weDdGKSkKLSAgICAgICAgcmV0
dXJuIG5ld0ltcGwucmVsZWFzZU5vbk51bGwoKTsKKyAgICAgICAgcmV0dXJuIG5ld0ltcGw7CiAK
ICAgICAvLyBEbyBhIHNsb3dlciBpbXBsZW1lbnRhdGlvbiBmb3IgY2FzZXMgdGhhdCBpbmNsdWRl
IG5vbi1BU0NJSSBjaGFyYWN0ZXJzLgogICAgIFVFcnJvckNvZGUgc3RhdHVzID0gVV9aRVJPX0VS
Uk9SOwogICAgIGludDMyX3QgcmVhbExlbmd0aCA9IHVfc3RyVG9VcHBlcihkYXRhMTYsIGxlbmd0
aCwgc291cmNlMTYsIG1fbGVuZ3RoLCAiIiwgJnN0YXR1cyk7CiAgICAgaWYgKFVfU1VDQ0VTUyhz
dGF0dXMpICYmIHJlYWxMZW5ndGggPT0gbGVuZ3RoKQotICAgICAgICByZXR1cm4gbmV3SW1wbC5y
ZWxlYXNlTm9uTnVsbCgpOworICAgICAgICByZXR1cm4gbmV3SW1wbDsKICAgICBuZXdJbXBsID0g
Y3JlYXRlVW5pbml0aWFsaXplZChyZWFsTGVuZ3RoLCBkYXRhMTYpOwogICAgIHN0YXR1cyA9IFVf
WkVST19FUlJPUjsKICAgICB1X3N0clRvVXBwZXIoZGF0YTE2LCByZWFsTGVuZ3RoLCBzb3VyY2Ux
NiwgbV9sZW5ndGgsICIiLCAmc3RhdHVzKTsKICAgICBpZiAoVV9GQUlMVVJFKHN0YXR1cykpCiAg
ICAgICAgIHJldHVybiAqdGhpczsKLSAgICByZXR1cm4gbmV3SW1wbC5yZWxlYXNlTm9uTnVsbCgp
OworICAgIHJldHVybiBuZXdJbXBsOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgbmVlZHNUdXJr
aXNoQ2FzaW5nUnVsZXMoY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbGVJZGVudGlmaWVyKQpAQCAt
NTc4LDE3ICs1ODAsMTcgQEAgUmVmPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OmNvbnZlcnRUb0xv
d2VyY2FzZVdpdGhMb2NhbGUoY29uc3QgQXRvbWljU3RyaW5nJiBsb2MKICAgICBhdXRvIHVwY29u
dmVydGVkQ2hhcmFjdGVycyA9IFN0cmluZ1ZpZXcoKnRoaXMpLnVwY29udmVydGVkQ2hhcmFjdGVy
cygpOwogICAgIGNvbnN0IFVDaGFyKiBzb3VyY2UxNiA9IHVwY29udmVydGVkQ2hhcmFjdGVyczsK
ICAgICBVQ2hhciogZGF0YTE2OwotICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBuZXdTdHJpbmcgPSBj
cmVhdGVVbmluaXRpYWxpemVkKGxlbmd0aCwgZGF0YTE2KTsKKyAgICBhdXRvIG5ld1N0cmluZyA9
IGNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBkYXRhMTYpOwogICAgIFVFcnJvckNvZGUgc3Rh
dHVzID0gVV9aRVJPX0VSUk9SOwogICAgIGludCByZWFsTGVuZ3RoID0gdV9zdHJUb0xvd2VyKGRh
dGExNiwgbGVuZ3RoLCBzb3VyY2UxNiwgbGVuZ3RoLCAidHIiLCAmc3RhdHVzKTsKICAgICBpZiAo
VV9TVUNDRVNTKHN0YXR1cykgJiYgcmVhbExlbmd0aCA9PSBsZW5ndGgpCi0gICAgICAgIHJldHVy
biBuZXdTdHJpbmcucmVsZWFzZU5vbk51bGwoKTsKKyAgICAgICAgcmV0dXJuIG5ld1N0cmluZzsK
ICAgICBuZXdTdHJpbmcgPSBjcmVhdGVVbmluaXRpYWxpemVkKHJlYWxMZW5ndGgsIGRhdGExNik7
CiAgICAgc3RhdHVzID0gVV9aRVJPX0VSUk9SOwogICAgIHVfc3RyVG9Mb3dlcihkYXRhMTYsIHJl
YWxMZW5ndGgsIHNvdXJjZTE2LCBsZW5ndGgsICJ0ciIsICZzdGF0dXMpOwogICAgIGlmIChVX0ZB
SUxVUkUoc3RhdHVzKSkKICAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIHJldHVybiBuZXdTdHJp
bmcucmVsZWFzZU5vbk51bGwoKTsKKyAgICByZXR1cm4gbmV3U3RyaW5nOwogfQogCiBSZWY8U3Ry
aW5nSW1wbD4gU3RyaW5nSW1wbDo6Y29udmVydFRvVXBwZXJjYXNlV2l0aExvY2FsZShjb25zdCBB
dG9taWNTdHJpbmcmIGxvY2FsZUlkZW50aWZpZXIpCkBAIC02MDksMTcgKzYxMSwxNyBAQCBSZWY8
U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6Y29udmVydFRvVXBwZXJjYXNlV2l0aExvY2FsZShjb25z
dCBBdG9taWNTdHJpbmcmIGxvYwogICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gU3Ry
aW5nVmlldygqdGhpcykudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7CiAgICAgY29uc3QgVUNoYXIq
IHNvdXJjZTE2ID0gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzOwogICAgIFVDaGFyKiBkYXRhMTY7Ci0g
ICAgUmVmUHRyPFN0cmluZ0ltcGw+IG5ld1N0cmluZyA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVu
Z3RoLCBkYXRhMTYpOworICAgIGF1dG8gbmV3U3RyaW5nID0gY3JlYXRlVW5pbml0aWFsaXplZChs
ZW5ndGgsIGRhdGExNik7CiAgICAgVUVycm9yQ29kZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7CiAg
ICAgaW50IHJlYWxMZW5ndGggPSB1X3N0clRvVXBwZXIoZGF0YTE2LCBsZW5ndGgsIHNvdXJjZTE2
LCBsZW5ndGgsICJ0ciIsICZzdGF0dXMpOwogICAgIGlmIChVX1NVQ0NFU1Moc3RhdHVzKSAmJiBy
ZWFsTGVuZ3RoID09IGxlbmd0aCkKLSAgICAgICAgcmV0dXJuIG5ld1N0cmluZy5yZWxlYXNlTm9u
TnVsbCgpOworICAgICAgICByZXR1cm4gbmV3U3RyaW5nOwogICAgIG5ld1N0cmluZyA9IGNyZWF0
ZVVuaW5pdGlhbGl6ZWQocmVhbExlbmd0aCwgZGF0YTE2KTsKICAgICBzdGF0dXMgPSBVX1pFUk9f
RVJST1I7CiAgICAgdV9zdHJUb1VwcGVyKGRhdGExNiwgcmVhbExlbmd0aCwgc291cmNlMTYsIGxl
bmd0aCwgInRyIiwgJnN0YXR1cyk7CiAgICAgaWYgKFVfRkFJTFVSRShzdGF0dXMpKQogICAgICAg
ICByZXR1cm4gKnRoaXM7Ci0gICAgcmV0dXJuIG5ld1N0cmluZy5yZWxlYXNlTm9uTnVsbCgpOwor
ICAgIHJldHVybiBuZXdTdHJpbmc7CiB9CiAKIFJlZjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpm
b2xkQ2FzZSgpCkBAIC03MjEsNyArNzIzLDcgQEAgQUxXQVlTX0lOTElORSBSZWY8U3RyaW5nSW1w
bD4gU3RyaW5nSW1wbDo6Y29udmVydEFTQ0lJQ2FzZShTdHJpbmdJbXBsJiBpbXBsLCBjb24KIAog
U2xvd1BhdGg6CiAgICAgQ2hhcmFjdGVyVHlwZSogbmV3RGF0YTsKLSAgICBSZWY8U3RyaW5nSW1w
bD4gbmV3SW1wbCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWRJbnRlcm5hbE5vbkVtcHR5KGxlbmd0aCwg
bmV3RGF0YSk7CisgICAgYXV0byBuZXdJbXBsID0gY3JlYXRlVW5pbml0aWFsaXplZEludGVybmFs
Tm9uRW1wdHkobGVuZ3RoLCBuZXdEYXRhKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
ZmFpbGluZ0luZGV4OyArK2kpCiAgICAgICAgIG5ld0RhdGFbaV0gPSBkYXRhW2ldOwogICAgIGZv
ciAodW5zaWduZWQgaSA9IGZhaWxpbmdJbmRleDsgaSA8IGxlbmd0aDsgKytpKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmggYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0
L1N0cmluZ0ltcGwuaAppbmRleCA0YTY5ZGRjOTRjZWI5MTEzYmM0YzZlNWNiMDIzN2Q5MGQ0OGI3
Y2E1Li41MWUyYmI3NDc1NWFkZThhMjBkNWRiYzdiMTg3Nzc3NTkwODYyZWMxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90
ZXh0L1N0cmluZ0ltcGwuaApAQCAtMjY1LDcgKzI2NSw3IEBAIHByaXZhdGU6CiAgICAgfQogCiAg
ICAgLy8gVXNlZCB0byBjcmVhdGUgbmV3IHN0cmluZ3MgdGhhdCBhcmUgYSBzdWJzdHJpbmcgb2Yg
YW4gZXhpc3RpbmcgOC1iaXQgU3RyaW5nSW1wbCAoQnVmZmVyU3Vic3RyaW5nKQotICAgIFN0cmlu
Z0ltcGwoY29uc3QgTENoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgUGFzc1JlZlB0
cjxTdHJpbmdJbXBsPiBiYXNlKQorICAgIFN0cmluZ0ltcGwoY29uc3QgTENoYXIqIGNoYXJhY3Rl
cnMsIHVuc2lnbmVkIGxlbmd0aCwgU3RyaW5nSW1wbCogYmFzZSkKICAgICAgICAgOiBtX3JlZkNv
dW50KHNfcmVmQ291bnRJbmNyZW1lbnQpCiAgICAgICAgICwgbV9sZW5ndGgobGVuZ3RoKQogICAg
ICAgICAsIG1fZGF0YTgoY2hhcmFjdGVycykKQEAgLTI3NiwxMyArMjc2LDEzIEBAIHByaXZhdGU6
CiAgICAgICAgIEFTU0VSVChtX2xlbmd0aCk7CiAgICAgICAgIEFTU0VSVChiYXNlLT5idWZmZXJP
d25lcnNoaXAoKSAhPSBCdWZmZXJTdWJzdHJpbmcpOwogCi0gICAgICAgIHN1YnN0cmluZ0J1ZmZl
cigpID0gYmFzZS5sZWFrUmVmKCk7CisgICAgICAgIHN1YnN0cmluZ0J1ZmZlcigpID0gJlJlZjxT
dHJpbmdJbXBsPigqYmFzZSkubGVha1JlZigpOwogCiAgICAgICAgIFNUUklOR19TVEFUU19BRERf
OEJJVF9TVFJJTkcyKG1fbGVuZ3RoLCB0cnVlKTsKICAgICB9CiAKICAgICAvLyBVc2VkIHRvIGNy
ZWF0ZSBuZXcgc3RyaW5ncyB0aGF0IGFyZSBhIHN1YnN0cmluZyBvZiBhbiBleGlzdGluZyAxNi1i
aXQgU3RyaW5nSW1wbCAoQnVmZmVyU3Vic3RyaW5nKQotICAgIFN0cmluZ0ltcGwoY29uc3QgVUNo
YXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBi
YXNlKQorICAgIFN0cmluZ0ltcGwoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxl
bmd0aCwgU3RyaW5nSW1wbCogYmFzZSkKICAgICAgICAgOiBtX3JlZkNvdW50KHNfcmVmQ291bnRJ
bmNyZW1lbnQpCiAgICAgICAgICwgbV9sZW5ndGgobGVuZ3RoKQogICAgICAgICAsIG1fZGF0YTE2
KGNoYXJhY3RlcnMpCkBAIC0yOTMsMTQgKzI5MywxNCBAQCBwcml2YXRlOgogICAgICAgICBBU1NF
UlQobV9sZW5ndGgpOwogICAgICAgICBBU1NFUlQoYmFzZS0+YnVmZmVyT3duZXJzaGlwKCkgIT0g
QnVmZmVyU3Vic3RyaW5nKTsKIAotICAgICAgICBzdWJzdHJpbmdCdWZmZXIoKSA9IGJhc2UubGVh
a1JlZigpOworICAgICAgICBzdWJzdHJpbmdCdWZmZXIoKSA9ICZSZWY8U3RyaW5nSW1wbD4oKmJh
c2UpLmxlYWtSZWYoKTsKIAogICAgICAgICBTVFJJTkdfU1RBVFNfQUREXzE2QklUX1NUUklORzIo
bV9sZW5ndGgsIHRydWUpOwogICAgIH0KIAogICAgIGVudW0gQ3JlYXRlU3ltYm9sVGFnIHsgQ3Jl
YXRlU3ltYm9sIH07CiAgICAgLy8gVXNlZCB0byBjcmVhdGUgbmV3IHN5bWJvbCBzdHJpbmdzIHRo
YXQgaG9sZHMgZXhpc3RpbmcgOC1iaXQgW1tEZXNjcmlwdGlvbl1dIHN0cmluZyBhcyBhIHN1YnN0
cmluZyBidWZmZXIgKEJ1ZmZlclN1YnN0cmluZykuCi0gICAgU3RyaW5nSW1wbChDcmVhdGVTeW1i
b2xUYWcsIGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIFBhc3NSZWZQ
dHI8U3RyaW5nSW1wbD4gYmFzZSkKKyAgICBTdHJpbmdJbXBsKENyZWF0ZVN5bWJvbFRhZywgY29u
c3QgTENoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgU3RyaW5nSW1wbCogYmFzZSkK
ICAgICAgICAgOiBtX3JlZkNvdW50KHNfcmVmQ291bnRJbmNyZW1lbnQpCiAgICAgICAgICwgbV9s
ZW5ndGgobGVuZ3RoKQogICAgICAgICAsIG1fZGF0YTgoY2hhcmFjdGVycykKQEAgLTMxMCw3ICsz
MTAsNyBAQCBwcml2YXRlOgogICAgICAgICBBU1NFUlQobV9kYXRhOCk7CiAgICAgICAgIEFTU0VS
VChiYXNlLT5idWZmZXJPd25lcnNoaXAoKSAhPSBCdWZmZXJTdWJzdHJpbmcpOwogCi0gICAgICAg
IHN1YnN0cmluZ0J1ZmZlcigpID0gYmFzZS5sZWFrUmVmKCk7CisgICAgICAgIHN1YnN0cmluZ0J1
ZmZlcigpID0gJlJlZjxTdHJpbmdJbXBsPigqYmFzZSkubGVha1JlZigpOwogICAgICAgICBzeW1i
b2xSZWdpc3RyeSgpID0gbnVsbHB0cjsKICAgICAgICAgaGFzaEZvclN5bWJvbCgpID0gbmV4dEhh
c2hGb3JTeW1ib2woKTsKIApAQCAtMzE4LDcgKzMxOCw3IEBAIHByaXZhdGU6CiAgICAgfQogCiAg
ICAgLy8gVXNlZCB0byBjcmVhdGUgbmV3IHN5bWJvbCBzdHJpbmdzIHRoYXQgaG9sZHMgZXhpc3Rp
bmcgMTYtYml0IFtbRGVzY3JpcHRpb25dXSBzdHJpbmcgYXMgYSBzdWJzdHJpbmcgYnVmZmVyIChC
dWZmZXJTdWJzdHJpbmcpLgotICAgIFN0cmluZ0ltcGwoQ3JlYXRlU3ltYm9sVGFnLCBjb25zdCBV
Q2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoLCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+
IGJhc2UpCisgICAgU3RyaW5nSW1wbChDcmVhdGVTeW1ib2xUYWcsIGNvbnN0IFVDaGFyKiBjaGFy
YWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIFN0cmluZ0ltcGwqIGJhc2UpCiAgICAgICAgIDogbV9y
ZWZDb3VudChzX3JlZkNvdW50SW5jcmVtZW50KQogICAgICAgICAsIG1fbGVuZ3RoKGxlbmd0aCkK
ICAgICAgICAgLCBtX2RhdGExNihjaGFyYWN0ZXJzKQpAQCAtMzI4LDcgKzMyOCw3IEBAIHByaXZh
dGU6CiAgICAgICAgIEFTU0VSVChtX2RhdGExNik7CiAgICAgICAgIEFTU0VSVChiYXNlLT5idWZm
ZXJPd25lcnNoaXAoKSAhPSBCdWZmZXJTdWJzdHJpbmcpOwogCi0gICAgICAgIHN1YnN0cmluZ0J1
ZmZlcigpID0gYmFzZS5sZWFrUmVmKCk7CisgICAgICAgIHN1YnN0cmluZ0J1ZmZlcigpID0gJlJl
ZjxTdHJpbmdJbXBsPigqYmFzZSkubGVha1JlZigpOwogICAgICAgICBzeW1ib2xSZWdpc3RyeSgp
ID0gbnVsbHB0cjsKICAgICAgICAgaGFzaEZvclN5bWJvbCgpID0gbmV4dEhhc2hGb3JTeW1ib2wo
KTsKIApAQCAtMzUyLDcgKzM1Miw3IEBAIHB1YmxpYzoKICAgICBXVEZfRVhQT1JUX1NUUklOR19B
UEkgc3RhdGljIFJlZjxTdHJpbmdJbXBsPiBjcmVhdGUoY29uc3QgTENoYXIqKTsKICAgICBBTFdB
WVNfSU5MSU5FIHN0YXRpYyBSZWY8U3RyaW5nSW1wbD4gY3JlYXRlKGNvbnN0IGNoYXIqIHMpIHsg
cmV0dXJuIGNyZWF0ZShyZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4ocykpOyB9CiAKLSAg
ICBzdGF0aWMgQUxXQVlTX0lOTElORSBSZWY8U3RyaW5nSW1wbD4gY3JlYXRlU3Vic3RyaW5nU2hh
cmluZ0ltcGwoUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiByZXAsIHVuc2lnbmVkIG9mZnNldCwgdW5z
aWduZWQgbGVuZ3RoKQorICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5FIFJlZjxTdHJpbmdJbXBsPiBj
cmVhdGVTdWJzdHJpbmdTaGFyaW5nSW1wbChTdHJpbmdJbXBsKiByZXAsIHVuc2lnbmVkIG9mZnNl
dCwgdW5zaWduZWQgbGVuZ3RoKQogICAgIHsKICAgICAgICAgQVNTRVJUKHJlcCk7CiAgICAgICAg
IEFTU0VSVChsZW5ndGggPD0gcmVwLT5sZW5ndGgoKSk7CkBAIC0zNjAsNyArMzYwLDcgQEAgcHVi
bGljOgogICAgICAgICBpZiAoIWxlbmd0aCkKICAgICAgICAgICAgIHJldHVybiAqZW1wdHkoKTsK
IAotICAgICAgICBTdHJpbmdJbXBsKiBvd25lclJlcCA9IChyZXAtPmJ1ZmZlck93bmVyc2hpcCgp
ID09IEJ1ZmZlclN1YnN0cmluZykgPyByZXAtPnN1YnN0cmluZ0J1ZmZlcigpIDogcmVwLmdldCgp
OworICAgICAgICBhdXRvIG93bmVyUmVwID0gKChyZXAtPmJ1ZmZlck93bmVyc2hpcCgpID09IEJ1
ZmZlclN1YnN0cmluZykgPyByZXAtPnN1YnN0cmluZ0J1ZmZlcigpIDogcmVwKTsKIAogICAgICAg
ICAvLyBXZSBhbGxvY2F0ZSBhIGJ1ZmZlciB0aGF0IGNvbnRhaW5zIGJvdGggdGhlIFN0cmluZ0lt
cGwgc3RydWN0IGFzIHdlbGwgYXMgdGhlIHBvaW50ZXIgdG8gdGhlIG93bmVyIHN0cmluZy4KICAg
ICAgICAgU3RyaW5nSW1wbCogc3RyaW5nSW1wbCA9IHN0YXRpY19jYXN0PFN0cmluZ0ltcGwqPihm
YXN0TWFsbG9jKGFsbG9jYXRpb25TaXplPFN0cmluZ0ltcGwqPigxKSkpOwpAQCAtMzg3LDcgKzM4
Nyw3IEBAIHB1YmxpYzoKIAogICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBzdGF0aWMgUmVmPFN0
cmluZ0ltcGw+IGNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoLCBMQ2hhciomIGRh
dGEpOwogICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBzdGF0aWMgUmVmPFN0cmluZ0ltcGw+IGNy
ZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoLCBVQ2hhciomIGRhdGEpOwotICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBUPiBzdGF0aWMgQUxXQVlTX0lOTElORSBQYXNzUmVmUHRyPFN0cmlu
Z0ltcGw+IHRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoLCBUKiYgb3V0cHV0
KQorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdGF0aWMgQUxXQVlTX0lOTElORSBSZWZQdHI8
U3RyaW5nSW1wbD4gdHJ5Q3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgsIFQqJiBv
dXRwdXQpCiAgICAgewogICAgICAgICBpZiAoIWxlbmd0aCkgewogICAgICAgICAgICAgb3V0cHV0
ID0gMDsKQEAgLTM5NiwxMiArMzk2LDEyIEBAIHB1YmxpYzoKIAogICAgICAgICBpZiAobGVuZ3Ro
ID4gKChzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgLSBzaXplb2YoU3RyaW5n
SW1wbCkpIC8gc2l6ZW9mKFQpKSkgewogICAgICAgICAgICAgb3V0cHV0ID0gMDsKLSAgICAgICAg
ICAgIHJldHVybiAwOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIH0KICAg
ICAgICAgU3RyaW5nSW1wbCogcmVzdWx0SW1wbDsKICAgICAgICAgaWYgKCF0cnlGYXN0TWFsbG9j
KGFsbG9jYXRpb25TaXplPFQ+KGxlbmd0aCkpLmdldFZhbHVlKHJlc3VsdEltcGwpKSB7CiAgICAg
ICAgICAgICBvdXRwdXQgPSAwOwotICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICAgICAgfQogICAgICAgICBvdXRwdXQgPSByZXN1bHRJbXBsLT50
YWlsUG9pbnRlcjxUPigpOwogCkBAIC00MDksMTMgKzQwOSwxMyBAQCBwdWJsaWM6CiAgICAgfQog
CiAgICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIHN0YXRpYyBSZWY8U3ltYm9sSW1wbD4gY3JlYXRl
TnVsbFN5bWJvbCgpOwotICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBzdGF0aWMgUmVmPFN5bWJv
bEltcGw+IGNyZWF0ZVN5bWJvbChQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IHJlcCk7CisgICAgV1RG
X0VYUE9SVF9TVFJJTkdfQVBJIHN0YXRpYyBSZWY8U3ltYm9sSW1wbD4gY3JlYXRlU3ltYm9sKFN0
cmluZ0ltcGwmIHJlcCk7CiAKLSAgICAvLyBSZWFsbG9jYXRlIHRoZSBTdHJpbmdJbXBsLiBUaGUg
b3JpZ2luYWxTdHJpbmcgbXVzdCBiZSBvbmx5IG93bmVkIGJ5IHRoZSBQYXNzUmVmUHRyLAorICAg
IC8vIFJlYWxsb2NhdGUgdGhlIFN0cmluZ0ltcGwuIFRoZSBvcmlnaW5hbFN0cmluZyBtdXN0IGJl
IG9ubHkgb3duZWQgYnkgdGhlIFJlZlB0ciwKICAgICAvLyBhbmQgdGhlIGJ1ZmZlciBvd25lcnNo
aXAgbXVzdCBiZSBCdWZmZXJJbnRlcm5hbC4gSnVzdCBsaWtlIHRoZSBpbnB1dCBwb2ludGVyIG9m
IHJlYWxsb2MoKSwKICAgICAvLyB0aGUgb3JpZ2luYWxTdHJpbmcgY2FuJ3QgYmUgdXNlZCBhZnRl
ciB0aGlzIGZ1bmN0aW9uLgotICAgIHN0YXRpYyBSZWY8U3RyaW5nSW1wbD4gcmVhbGxvY2F0ZShQ
YXNzUmVmUHRyPFN0cmluZ0ltcGw+IG9yaWdpbmFsU3RyaW5nLCB1bnNpZ25lZCBsZW5ndGgsIExD
aGFyKiYgZGF0YSk7Ci0gICAgc3RhdGljIFJlZjxTdHJpbmdJbXBsPiByZWFsbG9jYXRlKFBhc3NS
ZWZQdHI8U3RyaW5nSW1wbD4gb3JpZ2luYWxTdHJpbmcsIHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIq
JiBkYXRhKTsKKyAgICBzdGF0aWMgUmVmPFN0cmluZ0ltcGw+IHJlYWxsb2NhdGUoUmVmUHRyPFN0
cmluZ0ltcGw+JiYgb3JpZ2luYWxTdHJpbmcsIHVuc2lnbmVkIGxlbmd0aCwgTENoYXIqJiBkYXRh
KTsKKyAgICBzdGF0aWMgUmVmPFN0cmluZ0ltcGw+IHJlYWxsb2NhdGUoUmVmUHRyPFN0cmluZ0lt
cGw+JiYgb3JpZ2luYWxTdHJpbmcsIHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIqJiBkYXRhKTsKIAog
ICAgIHN0YXRpYyB1bnNpZ25lZCBmbGFnc09mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRP
RihTdHJpbmdJbXBsLCBtX2hhc2hBbmRGbGFncyk7IH0KICAgICBzdGF0aWMgdW5zaWduZWQgZmxh
Z0lzOEJpdCgpIHsgcmV0dXJuIHNfaGFzaEZsYWc4Qml0QnVmZmVyOyB9CkBAIC04NjAsNyArODYw
LDcgQEAgcHJpdmF0ZToKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhclR5cGU+IHN0YXRpYyBS
ZWY8U3RyaW5nSW1wbD4gY29uc3RydWN0SW50ZXJuYWwoU3RyaW5nSW1wbCosIHVuc2lnbmVkKTsK
ICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhclR5cGU+IHN0YXRpYyBSZWY8U3RyaW5nSW1wbD4g
Y3JlYXRlVW5pbml0aWFsaXplZEludGVybmFsKHVuc2lnbmVkLCBDaGFyVHlwZSomKTsKICAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhclR5cGU+IHN0YXRpYyBSZWY8U3RyaW5nSW1wbD4gY3JlYXRl
VW5pbml0aWFsaXplZEludGVybmFsTm9uRW1wdHkodW5zaWduZWQsIENoYXJUeXBlKiYpOwotICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyVHlwZT4gc3RhdGljIFJlZjxTdHJpbmdJbXBsPiByZWFs
bG9jYXRlSW50ZXJuYWwoUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiwgdW5zaWduZWQsIENoYXJUeXBl
KiYpOworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyVHlwZT4gc3RhdGljIFJlZjxTdHJpbmdJ
bXBsPiByZWFsbG9jYXRlSW50ZXJuYWwoUmVmUHRyPFN0cmluZ0ltcGw+JiYsIHVuc2lnbmVkLCBD
aGFyVHlwZSomKTsKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhclR5cGU+IHN0YXRpYyBSZWY8
U3RyaW5nSW1wbD4gY3JlYXRlSW50ZXJuYWwoY29uc3QgQ2hhclR5cGUqLCB1bnNpZ25lZCk7CiAg
ICAgV1RGX0VYUE9SVF9QUklWQVRFIE5FVkVSX0lOTElORSB1bnNpZ25lZCBoYXNoU2xvd0Nhc2Uo
KSBjb25zdDsKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHVuc2lnbmVkIG5leHRIYXNo
Rm9yU3ltYm9sKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N5bWJvbFJlZ2lz
dHJ5LmNwcCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3ltYm9sUmVnaXN0cnkuY3BwCmluZGV4IGFh
ZDEzNWYzZjY5YmFjNjYzZDg2N2M3NjQ4NGNhZGUzZDFlYzQxNWIuLjc4ZjgyNjNjYjBlZmFhMGVm
NGNkYmQ4YTA4MGExMDkxZTBjMWEyMDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQv
U3ltYm9sUmVnaXN0cnkuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3ltYm9sUmVnaXN0
cnkuY3BwCkBAIC00MCw3ICs0MCw3IEBAIFJlZjxTeW1ib2xJbXBsPiBTeW1ib2xSZWdpc3RyeTo6
c3ltYm9sRm9yS2V5KGNvbnN0IFN0cmluZyYgcmVwKQogICAgIGlmICghYWRkUmVzdWx0LmlzTmV3
RW50cnkpCiAgICAgICAgIHJldHVybiAqc3RhdGljX2Nhc3Q8U3ltYm9sSW1wbCo+KGFkZFJlc3Vs
dC5pdGVyYXRvci0+aW1wbCgpKTsKIAotICAgIFJlZjxTeW1ib2xJbXBsPiBzeW1ib2wgPSBTdHJp
bmdJbXBsOjpjcmVhdGVTeW1ib2wocmVwLmltcGwoKSk7CisgICAgUmVmPFN5bWJvbEltcGw+IHN5
bWJvbCA9IFN0cmluZ0ltcGw6OmNyZWF0ZVN5bWJvbCgqcmVwLmltcGwoKSk7CiAgICAgc3ltYm9s
LT5zeW1ib2xSZWdpc3RyeSgpID0gdGhpczsKICAgICAqYWRkUmVzdWx0Lml0ZXJhdG9yID0gU3lt
Ym9sUmVnaXN0cnlLZXkoJnN5bWJvbC5nZXQoKSk7CiAgICAgcmV0dXJuIHN5bWJvbDsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmNwcCBiL1NvdXJjZS9XVEYvd3Rm
L3RleHQvV1RGU3RyaW5nLmNwcAppbmRleCBmMzFhYWM3NmMyNDg4MDRhNzNlNWY0MDM5NzlkOTRm
M2I4OTBhMzdlLi5mNGExZmVkOTYxN2ViOTg5MWEzODBiN2FmZGI2YzNkNTYwMTA4NmQ1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5jcHAKKysrIGIvU291cmNlL1dU
Ri93dGYvdGV4dC9XVEZTdHJpbmcuY3BwCkBAIC0zMzIsNyArMzMyLDcgQEAgU3RyaW5nIFN0cmlu
Zzo6c3Vic3RyaW5nU2hhcmluZ0ltcGwodW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgp
IGNvbnN0CiAKICAgICBpZiAoIW9mZnNldCAmJiBsZW5ndGggPT0gc3RyaW5nTGVuZ3RoKQogICAg
ICAgICByZXR1cm4gKnRoaXM7Ci0gICAgcmV0dXJuIFN0cmluZyhTdHJpbmdJbXBsOjpjcmVhdGVT
dWJzdHJpbmdTaGFyaW5nSW1wbChtX2ltcGwsIG9mZnNldCwgbGVuZ3RoKSk7CisgICAgcmV0dXJu
IFN0cmluZyhTdHJpbmdJbXBsOjpjcmVhdGVTdWJzdHJpbmdTaGFyaW5nSW1wbChtX2ltcGwuZ2V0
KCksIG9mZnNldCwgbGVuZ3RoKSk7CiB9CiAKIFN0cmluZyBTdHJpbmc6OmNvbnZlcnRUb0FTQ0lJ
TG93ZXJjYXNlKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3Ry
aW5nLmggYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5oCmluZGV4IGVmNjIxZmM0MTMz
NDllNjk2ZDc1YWZmYTczOThiYjAxMzU2MDliOWUuLmVjZGVkODg2MGU3MzJlMzE3NzVlYzAwZDRi
Y2RjOTY2ZmNlMGJjMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5n
LmgKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcuaApAQCAtMTA3LDcgKzEwNyw2
IEBAIHB1YmxpYzoKICAgICAvLyBDb25zdHJ1Y3QgYSBzdHJpbmcgcmVmZXJlbmNpbmcgYW4gZXhp
c3RpbmcgU3RyaW5nSW1wbC4KICAgICBTdHJpbmcoU3RyaW5nSW1wbCYpOwogICAgIFN0cmluZyhT
dHJpbmdJbXBsKik7Ci0gICAgU3RyaW5nKFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4pOwogICAgIFN0
cmluZyhSZWY8U3RyaW5nSW1wbD4mJik7CiAgICAgU3RyaW5nKFJlZlB0cjxTdHJpbmdJbXBsPiYm
KTsKIApAQCAtNTMxLDExICs1MzAsNiBAQCBpbmxpbmUgU3RyaW5nOjpTdHJpbmcoU3RyaW5nSW1w
bCogaW1wbCkKIHsKIH0KIAotaW5saW5lIFN0cmluZzo6U3RyaW5nKFBhc3NSZWZQdHI8U3RyaW5n
SW1wbD4gaW1wbCkKLSAgICA6IG1faW1wbChpbXBsKQotewotfQotCiBpbmxpbmUgU3RyaW5nOjpT
dHJpbmcoUmVmPFN0cmluZ0ltcGw+JiYgaW1wbCkKICAgICA6IG1faW1wbChXVEZNb3ZlKGltcGwp
KQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9jZi9TdHJpbmdJbXBsQ0YuY3Bw
IGIvU291cmNlL1dURi93dGYvdGV4dC9jZi9TdHJpbmdJbXBsQ0YuY3BwCmluZGV4IDdiYWQ5YTdk
MTJkZjRiYWVhYmNmODdlMDhlZmRiNGU5ODQ2ZjhjNDcuLjUzZjQ5ODM4M2ZhYzg5Y2QwMDQxMzFj
ZmJjMDYyNDI1NjE3ODljZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvY2YvU3Ry
aW5nSW1wbENGLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L2NmL1N0cmluZ0ltcGxDRi5j
cHAKQEAgLTI1LDcgKzI1LDYgQEAKIAogI2luY2x1ZGUgPENvcmVGb3VuZGF0aW9uL0NvcmVGb3Vu
ZGF0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KLSNpbmNsdWRlIDx3dGYvUGFz
c1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KICNpbmNsdWRlIDx3dGYvVGhy
ZWFkaW5nLmg+CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCmluZGV4IDZmMzNmMjM0ZGI3ODFjZWI2
Y2QxODNkZjVkZmZhNDg0MDkxNmQ0NzUuLjc3ZThmMTI0YjY4MmNjOWE2NjdhZWVhYjY3N2VjZmMy
ZWU3ZmY0OGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcApAQCAtNTQ4MCw3ICs1NDgwLDcgQEAg
dm9pZCBEb2N1bWVudDo6d2luZG93U2NyZWVuRGlkQ2hhbmdlKFBsYXRmb3JtRGlzcGxheUlEIGRp
c3BsYXlJRCkKIFN0cmluZyBEb2N1bWVudDo6ZGlzcGxheVN0cmluZ01vZGlmaWVkQnlFbmNvZGlu
Zyhjb25zdCBTdHJpbmcmIHN0cikgY29uc3QKIHsKICAgICBpZiAobV9kZWNvZGVyKQotICAgICAg
ICByZXR1cm4gbV9kZWNvZGVyLT5lbmNvZGluZygpLmRpc3BsYXlTdHJpbmcoc3RyLmltcGwoKSk7
CisgICAgICAgIHJldHVybiBtX2RlY29kZXItPmVuY29kaW5nKCkuZGlzcGxheVN0cmluZyhzdHIu
aW1wbCgpKS5nZXQoKTsKICAgICByZXR1cm4gc3RyOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS94bWwvWFBhdGhHcmFtbWFyLnkgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhHcmFt
bWFyLnkKaW5kZXggMzU2ZTExODg5ZWRmNzc2NTg3YmZjYWMxMTY0YzdmMWE2NmQzM2M5NC4uYmY0
MzM4NjcyZjJhMzIwZTcyYzg2MjEyYjI2NjIwYTU3NmFlNzk1NCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUveG1sL1hQYXRoR3JhbW1hci55CisrKyBiL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0
aEdyYW1tYXIueQpAQCAtMTc3LDcgKzE3Nyw3IEBAIFN0ZXA6CiAgICAgfAogICAgIE5BTUVURVNU
IE9wdGlvbmFsUHJlZGljYXRlTGlzdAogICAgIHsKLSAgICAgICAgU3RyaW5nIG5hbWV0ZXN0ID0g
YWRvcHRSZWYoJDEpOworICAgICAgICBTdHJpbmcgbmFtZXRlc3QgPSBhZG9wdFJlZigqJDEpOwog
ICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8VmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxFeHByZXNzaW9u
Pj4+IHByZWRpY2F0ZUxpc3QoJDIpOwogCiAgICAgICAgIFN0cmluZyBsb2NhbE5hbWU7CkBAIC0y
MDYsNyArMjA2LDcgQEAgU3RlcDoKICAgICB8CiAgICAgQXhpc1NwZWNpZmllciBOQU1FVEVTVCBP
cHRpb25hbFByZWRpY2F0ZUxpc3QKICAgICB7Ci0gICAgICAgIFN0cmluZyBuYW1ldGVzdCA9IGFk
b3B0UmVmKCQyKTsKKyAgICAgICAgU3RyaW5nIG5hbWV0ZXN0ID0gYWRvcHRSZWYoKiQyKTsKICAg
ICAgICAgc3RkOjp1bmlxdWVfcHRyPFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8RXhwcmVzc2lvbj4+
PiBwcmVkaWNhdGVMaXN0KCQzKTsKIAogICAgICAgICBTdHJpbmcgbG9jYWxOYW1lOwpAQCAtMjU3
LDcgKzI1Nyw3IEBAIE5vZGVUZXN0OgogICAgIHwKICAgICBQSSAnKCcgTElURVJBTCAnKScKICAg
ICB7Ci0gICAgICAgIFN0cmluZyBsaXRlcmFsID0gYWRvcHRSZWYoJDMpOworICAgICAgICBTdHJp
bmcgbGl0ZXJhbCA9IGFkb3B0UmVmKCokMyk7CiAgICAgICAgICQkID0gbmV3IFN0ZXA6Ok5vZGVU
ZXN0KFN0ZXA6Ok5vZGVUZXN0OjpQcm9jZXNzaW5nSW5zdHJ1Y3Rpb25Ob2RlVGVzdCwgbGl0ZXJh
bC5zdHJpcFdoaXRlU3BhY2UoKSk7CiAgICAgfQogICAgIDsKQEAgLTMxNCw3ICszMTQsNyBAQCBB
YmJyZXZpYXRlZFN0ZXA6CiBQcmltYXJ5RXhwcjoKICAgICBWQVJJQUJMRVJFRkVSRU5DRQogICAg
IHsKLSAgICAgICAgU3RyaW5nIG5hbWUgPSBhZG9wdFJlZigkMSk7CisgICAgICAgIFN0cmluZyBu
YW1lID0gYWRvcHRSZWYoKiQxKTsKICAgICAgICAgJCQgPSBuZXcgVmFyaWFibGVSZWZlcmVuY2Uo
bmFtZSk7CiAgICAgfQogICAgIHwKQEAgLTMyNSwxMyArMzI1LDEzIEBAIFByaW1hcnlFeHByOgog
ICAgIHwKICAgICBMSVRFUkFMCiAgICAgewotICAgICAgICBTdHJpbmcgbGl0ZXJhbCA9IGFkb3B0
UmVmKCQxKTsKKyAgICAgICAgU3RyaW5nIGxpdGVyYWwgPSBhZG9wdFJlZigqJDEpOwogICAgICAg
ICAkJCA9IG5ldyBTdHJpbmdFeHByZXNzaW9uKFdURk1vdmUobGl0ZXJhbCkpOwogICAgIH0KICAg
ICB8CiAgICAgTlVNQkVSCiAgICAgewotICAgICAgICBTdHJpbmcgbnVtZXJhbCA9IGFkb3B0UmVm
KCQxKTsKKyAgICAgICAgU3RyaW5nIG51bWVyYWwgPSBhZG9wdFJlZigqJDEpOwogICAgICAgICAk
JCA9IG5ldyBOdW1iZXIobnVtZXJhbC50b0RvdWJsZSgpKTsKICAgICB9CiAgICAgfApAQCAtMzQx
LDcgKzM0MSw3IEBAIFByaW1hcnlFeHByOgogRnVuY3Rpb25DYWxsOgogICAgIEZVTkNUSU9OTkFN
RSAnKCcgJyknCiAgICAgewotICAgICAgICBTdHJpbmcgbmFtZSA9IGFkb3B0UmVmKCQxKTsKKyAg
ICAgICAgU3RyaW5nIG5hbWUgPSBhZG9wdFJlZigqJDEpOwogICAgICAgICAkJCA9IFhQYXRoOjpG
dW5jdGlvbjo6Y3JlYXRlKG5hbWUpLnJlbGVhc2UoKTsKICAgICAgICAgaWYgKCEkJCkKICAgICAg
ICAgICAgIFlZQUJPUlQ7CkBAIC0zNDksNyArMzQ5LDcgQEAgRnVuY3Rpb25DYWxsOgogICAgIHwK
ICAgICBGVU5DVElPTk5BTUUgJygnIEFyZ3VtZW50TGlzdCAnKScKICAgICB7Ci0gICAgICAgIFN0
cmluZyBuYW1lID0gYWRvcHRSZWYoJDEpOworICAgICAgICBTdHJpbmcgbmFtZSA9IGFkb3B0UmVm
KCokMSk7CiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEV4
cHJlc3Npb24+Pj4gYXJndW1lbnRMaXN0KCQzKTsKICAgICAgICAgJCQgPSBYUGF0aDo6RnVuY3Rp
b246OmNyZWF0ZShuYW1lLCBXVEZNb3ZlKCphcmd1bWVudExpc3QpKS5yZWxlYXNlKCk7CiAgICAg
ICAgIGlmICghJCQpCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VM
b2cKaW5kZXggYjlhYjM1OTM0MDFkYjhmZGRiNDRlNTQ0YWYyMGIzNzczYWIxNTYxMS4uOWYxOWIx
YTQzNTcwZjIzYzQ0YTdmNTg2NGUzYzRkODBjMTRjOTJmMyAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hh
bmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDE2LTA1LTE5
ICBLZWl0aCBSb2xsaW4gIDxrcm9sbGluQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgYWxs
IHVzZXMgb2YgUGFzc1JlZlB0ciBpbiBXVEYKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE1NzU5NgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMjYyMzQz
OTE+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXBk
YXRlIGNhbGxzIHRvIGludGVyZmFjZXMgdGhhdCBubyBsb25nZXIgdGFrZSBvciByZXR1cm4gUGFz
c1JlZlB0cnMuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9TdHJpbmdJbXBs
LmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorCiAyMDE2LTA1LTI0ICBBYWth
c2ggSmFpbiAgPGFha2FzaF9qYWluQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW9yZ2FuaXplIGRh
c2hib2FyZCBjb2RlOiBtb3ZlIGNvZGUgZnJvbSBfdGltZUludGVydmFsU3RyaW5nIHRvIGJhc2Ug
Y2xhc3MKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1N0cmluZ0lt
cGwuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvU3RyaW5nSW1wbC5jcHAKaW5k
ZXggOGNkNmMwOWNmYjVjMjRmNzlhNjIzODc2NTQzYWYzNzkxMzk4MjI2Zi4uYmM3YTgyZGJmZGEz
ZjE1ZTIxM2M2ZmE1ODg5NTczM2Q0NTI4YmFiYSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XVEYvU3RyaW5nSW1wbC5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XVEYvU3RyaW5nSW1wbC5jcHAKQEAgLTUyNiw3ICs1MjYsNyBAQCBURVNUKFdURiwgU3Ry
aW5nSW1wbENyZWF0ZU51bGxTeW1ib2wpCiBURVNUKFdURiwgU3RyaW5nSW1wbENyZWF0ZVN5bWJv
bCkKIHsKICAgICBSZWZQdHI8U3RyaW5nSW1wbD4gb3JpZ2luYWwgPSBzdHJpbmdGcm9tVVRGOCgi
b3JpZ2luYWwiKTsKLSAgICBSZWZQdHI8U3RyaW5nSW1wbD4gcmVmZXJlbmNlID0gU3RyaW5nSW1w
bDo6Y3JlYXRlU3ltYm9sKG9yaWdpbmFsKTsKKyAgICBSZWZQdHI8U3RyaW5nSW1wbD4gcmVmZXJl
bmNlID0gU3RyaW5nSW1wbDo6Y3JlYXRlU3ltYm9sKCpvcmlnaW5hbC5nZXQoKSk7CiAgICAgQVNT
RVJUX1RSVUUocmVmZXJlbmNlLT5pc1N5bWJvbCgpKTsKICAgICBBU1NFUlRfRkFMU0UocmVmZXJl
bmNlLT5pc051bGxTeW1ib2woKSk7CiAgICAgQVNTRVJUX0ZBTFNFKHJlZmVyZW5jZS0+aXNBdG9t
aWMoKSk7CkBAIC01MzYsNyArNTM2LDcgQEAgVEVTVChXVEYsIFN0cmluZ0ltcGxDcmVhdGVTeW1i
b2wpCiAgICAgQVNTRVJUX1RSVUUoZXF1YWwocmVmZXJlbmNlLmdldCgpLCAib3JpZ2luYWwiKSk7
CiAKICAgICBSZWZQdHI8U3RyaW5nSW1wbD4gZW1wdHkgPSBzdHJpbmdGcm9tVVRGOCgiIik7Ci0g
ICAgUmVmUHRyPFN0cmluZ0ltcGw+IGVtcHR5UmVmZXJlbmNlID0gU3RyaW5nSW1wbDo6Y3JlYXRl
U3ltYm9sKGVtcHR5KTsKKyAgICBSZWZQdHI8U3RyaW5nSW1wbD4gZW1wdHlSZWZlcmVuY2UgPSBT
dHJpbmdJbXBsOjpjcmVhdGVTeW1ib2woKmVtcHR5LmdldCgpKTsKICAgICBBU1NFUlRfVFJVRShl
bXB0eVJlZmVyZW5jZS0+aXNTeW1ib2woKSk7CiAgICAgQVNTRVJUX0ZBTFNFKGVtcHR5UmVmZXJl
bmNlLT5pc051bGxTeW1ib2woKSk7CiAgICAgQVNTRVJUX0ZBTFNFKGVtcHR5UmVmZXJlbmNlLT5p
c0F0b21pYygpKTsKQEAgLTU1MCw3ICs1NTAsNyBAQCBURVNUKFdURiwgU3RyaW5nSW1wbENyZWF0
ZVN5bWJvbCkKIFRFU1QoV1RGLCBTdHJpbmdJbXBsU3ltYm9sVG9BdG9taWNTdHJpbmcpCiB7CiAg
ICAgUmVmUHRyPFN0cmluZ0ltcGw+IG9yaWdpbmFsID0gc3RyaW5nRnJvbVVURjgoIm9yaWdpbmFs
Iik7Ci0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IHJlZmVyZW5jZSA9IFN0cmluZ0ltcGw6OmNyZWF0
ZVN5bWJvbChvcmlnaW5hbCk7CisgICAgUmVmUHRyPFN0cmluZ0ltcGw+IHJlZmVyZW5jZSA9IFN0
cmluZ0ltcGw6OmNyZWF0ZVN5bWJvbCgqb3JpZ2luYWwuZ2V0KCkpOwogICAgIEFTU0VSVF9UUlVF
KHJlZmVyZW5jZS0+aXNTeW1ib2woKSk7CiAgICAgQVNTRVJUX0ZBTFNFKHJlZmVyZW5jZS0+aXNB
dG9taWMoKSk7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>279971</attachid>
            <date>2016-05-27 10:33:19 -0700</date>
            <delta_ts>2016-06-03 12:39:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-157596-20160527103429.patch</filename>
            <type>text/plain</type>
            <size>55150</size>
            <attacher name="Keith Rollin">krollin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAxMzg3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBm
NDMwNjBmMDUxYjAxMGFkZTY2OTQyNjRjOWVkNzZhNmRlNjY3YjRhLi41NGRlM2RkMWMwNzM0ZDEy
MWUzODc1NTZlZTA0NjI0ZGFkMzdiYjQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzMyBAQAorMjAxNi0wNS0yNyAgS2VpdGggUm9sbGluICA8a3JvbGxpbkBhcHBsZS5jb20+
CisKKyAgICAgICAgUmVtb3ZlIGFsbCB1c2VzIG9mIFBhc3NSZWZQdHIgaW4gV1RGCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTc1OTYKKyAgICAgICAg
PHJkYXI6Ly9wcm9ibGVtLzI2MjM0MzkxPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFVwZGF0ZSBjYWxscyB0byBpbnRlcmZhY2VzIHRoYXQgbm8gbG9u
Z2VyIHRha2Ugb3IgcmV0dXJuIFBhc3NSZWZQdHJzLgorCisgICAgICAgICogcnVudGltZS9KU1N0
cmluZy5jcHA6CisgICAgICAgIChKU0M6OkpTUm9wZVN0cmluZzo6cmVzb2x2ZVJvcGUpOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNTdHJpbmcuaDoKKyAgICAgICAgKEpTQzo6SlNTdHJpbmc6OkpTU3Ry
aW5nKToKKyAgICAgICAgKEpTQzo6anNTdWJzdHJpbmcpOgorICAgICAgICAqIHJ1bnRpbWUvUHJp
dmF0ZU5hbWUuaDoKKyAgICAgICAgKEpTQzo6UHJpdmF0ZU5hbWU6OlByaXZhdGVOYW1lKToKKyAg
ICAgICAgKiBydW50aW1lL1NtYWxsU3RyaW5ncy5jcHA6CisgICAgICAgIChKU0M6OlNtYWxsU3Ry
aW5nc1N0b3JhZ2U6OlNtYWxsU3RyaW5nc1N0b3JhZ2UpOgorICAgICAgICAqIHJ1bnRpbWUvU3Ry
aW5nQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpzdHJpbmdGcm9tQ2hhckNvZGVTbG93
Q2FzZSk6CisgICAgICAgICogcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwOgorICAgICAgICAo
SlNDOjpqc1NwbGljZVN1YnN0cmluZ3MpOgorICAgICAgICAoSlNDOjpqc1NwbGljZVN1YnN0cmlu
Z3NXaXRoU2VwYXJhdG9ycyk6CisgICAgICAgIChKU0M6OnJlcGxhY2VVc2luZ1N0cmluZ1NlYXJj
aCk6CisgICAgICAgIChKU0M6OnJlcGVhdENoYXJhY3Rlcik6CisgICAgICAgIChKU0M6OnN0cmlu
Z1Byb3RvRnVuY0ZvbnRzaXplKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jTGluayk6
CisgICAgICAgIChKU0M6Om5vcm1hbGl6ZSk6CisKIDIwMTYtMDUtMjUgIENhcmxvcyBHYXJjaWEg
Q2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04ocjIwMTA2
Nik6IFtHVEtdIFNldmVyYWwgaW50bCB0ZXN0cyBzdGFydGVkIHRvIGZhaWwgaW4gR1RLKyBib3Qg
YWZ0ZXIgcjIwMTA2NgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V1RGL0NoYW5nZUxvZwppbmRleCBhYzljZjIxODg5ZjA5MjUxOWY1MDgwNTY2OTFlMDNkM2FhYTg5
MDVhLi5hOGM1ZmYxNjgyOTFmMzQ4MDBkZDEzYmJlMTViYmFkNmU0MTVkMDk5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV1RGL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDYwIEBACisyMDE2LTA1LTI3ICBLZWl0aCBSb2xsaW4gIDxrcm9sbGluQGFwcGxlLmNvbT4K
KworICAgICAgICBSZW1vdmUgYWxsIHVzZXMgb2YgUGFzc1JlZlB0ciBpbiBXVEYKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NzU5NgorICAgICAgICA8
cmRhcjovL3Byb2JsZW0vMjYyMzQzOTE+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgUmVtb3ZlL3VwZGF0ZSBtb3N0IGludGVyZmFjZXMgdGhhdCB0YWtl
IG9yIHJldHVybiBQYXNzUmVmUHRycy4KKyAgICAgICAgUmVtYWluaW5nIHJlZmVyZW5jZXMgaW5j
bHVkZSB0aG9zZSBpbiBub24tQ29jb2EgaW1wbGVtZW50YXRpb25zIGFuZAorICAgICAgICB0aG9z
ZSByZXF1aXJlZCBmb3IgY29udGludWVkIGNvbXBhdGliaWxpdHkgd2l0aCBtb2R1bGVzIHRoYXQg
c3RpbGwgdXNlCisgICAgICAgIFBhc3NSZWZQdHJzIChzcGVjaWZpY2FsbHk6IEZvcndhcmQuaCwg
UmVmUHRyIGludGVyb3BlcmFiaWxpdHksCisgICAgICAgIFNpemVMaW1pdHMuaCwgV29ya1F1ZXVl
IChXaW5kb3dzKSBEaXNwYXRjaFF1ZXVlRWZsLAorICAgICAgICBEaXNwYXRjaFdvcmtJdGVtRWZs
LCBhbmQgUGFzc1JlZlB0ciBpdHNlbGYpLgorCisgICAgICAgIFVwZGF0ZSBjYWxscyB0byBpbnRl
cmZhY2VzIHRoYXQgbm8gbG9uZ2VyIHRha2Ugb3IgcmV0dXJuIFBhc3NSZWZQdHJzLgorCisgICAg
ICAgICogd3RmL01ldGFBbGxvY2F0b3IuY3BwOgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9y
OjphbGxvY2F0ZSk6CisgICAgICAgICogd3RmL01ldGFBbGxvY2F0b3IuaDoKKyAgICAgICAgKiB3
dGYvUGFyYWxsZWxKb2JzR2VuZXJpYy5oOgorICAgICAgICAoV1RGOjpQYXJhbGxlbEVudmlyb25t
ZW50OjpUaHJlYWRQcml2YXRlOjpjcmVhdGUpOgorICAgICAgICAqIHd0Zi90ZXh0L0F0b21pY1N0
cmluZ0ltcGwuY3BwOgorICAgICAgICAoV1RGOjpIYXNoQW5kVVRGOENoYXJhY3RlcnNUcmFuc2xh
dG9yOjp0cmFuc2xhdGUpOgorICAgICAgICAoV1RGOjpTdWJzdHJpbmdUcmFuc2xhdG9yOjp0cmFu
c2xhdGUpOgorICAgICAgICAqIHd0Zi90ZXh0L0NTdHJpbmcuY3BwOgorICAgICAgICAoV1RGOjpD
U3RyaW5nQnVmZmVyOjpjcmVhdGVVbmluaXRpYWxpemVkKToKKyAgICAgICAgKiB3dGYvdGV4dC9D
U3RyaW5nLmg6CisgICAgICAgICogd3RmL3RleHQvU3RyaW5nQnVpbGRlci5jcHA6CisgICAgICAg
IChXVEY6OlN0cmluZ0J1aWxkZXI6OnJlaWZ5U3RyaW5nKToKKyAgICAgICAgKFdURjo6U3RyaW5n
QnVpbGRlcjo6cmVzaXplKToKKyAgICAgICAgKFdURjo6U3RyaW5nQnVpbGRlcjo6cmVhbGxvY2F0
ZUJ1ZmZlcjxMQ2hhcj4pOgorICAgICAgICAoV1RGOjpTdHJpbmdCdWlsZGVyOjpyZWFsbG9jYXRl
QnVmZmVyPFVDaGFyPik6CisgICAgICAgICogd3RmL3RleHQvU3RyaW5nSW1wbC5jcHA6CisgICAg
ICAgIChXVEY6OlN0cmluZ0ltcGw6OnJlYWxsb2NhdGVJbnRlcm5hbCk6CisgICAgICAgIChXVEY6
OlN0cmluZ0ltcGw6OnJlYWxsb2NhdGUpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpjcmVh
dGU4Qml0SWZQb3NzaWJsZSk6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OmNyZWF0ZVN5bWJv
bCk6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OmNyZWF0ZU51bGxTeW1ib2wpOgorICAgICAg
ICAoV1RGOjpTdHJpbmdJbXBsOjpjb252ZXJ0VG9Mb3dlcmNhc2VXaXRob3V0TG9jYWxlKToKKyAg
ICAgICAgKFdURjo6U3RyaW5nSW1wbDo6Y29udmVydFRvVXBwZXJjYXNlV2l0aG91dExvY2FsZSk6
CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OmNvbnZlcnRUb0xvd2VyY2FzZVdpdGhMb2NhbGUp
OgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpjb252ZXJ0VG9VcHBlcmNhc2VXaXRoTG9jYWxl
KToKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6Y29udmVydEFTQ0lJQ2FzZSk6CisgICAgICAg
ICogd3RmL3RleHQvU3RyaW5nSW1wbC5oOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpTdHJp
bmdJbXBsKToKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6Y3JlYXRlU3Vic3RyaW5nU2hhcmlu
Z0ltcGwpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjp0cnlDcmVhdGVVbmluaXRpYWxpemVk
KToKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6ZXh0cmFjdEZvbGRlZFN0cmluZ0luU3ltYm9s
KToKKyAgICAgICAgKiB3dGYvdGV4dC9TeW1ib2xSZWdpc3RyeS5jcHA6CisgICAgICAgIChXVEY6
OlN5bWJvbFJlZ2lzdHJ5OjpzeW1ib2xGb3JLZXkpOgorICAgICAgICAqIHd0Zi90ZXh0L1dURlN0
cmluZy5jcHA6CisgICAgICAgIChXVEY6OlN0cmluZzo6c3Vic3RyaW5nU2hhcmluZ0ltcGwpOgor
ICAgICAgICAqIHd0Zi90ZXh0L1dURlN0cmluZy5oOgorICAgICAgICAoV1RGOjpTdHJpbmc6OlN0
cmluZyk6IERlbGV0ZWQuCisgICAgICAgICogd3RmL3RleHQvY2YvU3RyaW5nSW1wbENGLmNwcDoK
KwogMjAxNi0wNS0yNCAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxlLmNvbT4KIAog
ICAgICAgICBMTEludCBzaG91bGQgYmUgYWJsZSB0byBjYWNoZSBwcm90b3R5cGUgbG9hZHMgZm9y
IHZhbHVlcyBpbiBHZXRCeUlkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTYzZjAwOWQ3ZjY5N2I2MWRkNWQzMTI4
OTVjOWNhMGI5OTIyODJmZS4uN2MyYzI5MmEyMjllOTkxOGI4NWUxODZkYWEzNzc2ZTA4ZjY4YzI1
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDE2LTA1LTI3ICBLZWl0aCBSb2xsaW4g
IDxrcm9sbGluQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgYWxsIHVzZXMgb2YgUGFzc1Jl
ZlB0ciBpbiBXVEYKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE1NzU5NgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMjYyMzQzOTE+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXBkYXRlIGNhbGxzIHRvIGlu
dGVyZmFjZXMgdGhhdCBubyBsb25nZXIgdGFrZSBvciByZXR1cm4gUGFzc1JlZlB0cnMuCisKKyAg
ICAgICAgTm8gbmV3IHRlc3RzOiBubyBuZXcgZnVuY3Rpb25hbGl0eSBzbyBjaGFuZ2VzIGFyZSBj
b3ZlcmVkIGJ5IGV4aXN0aW5nCisgICAgICAgIHRlc3RzLgorCisgICAgICAgICogY3NzL0NTU1By
aW1pdGl2ZVZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1ByaW1pdGl2ZVZhbHVlOjpm
b3JtYXROdW1iZXJWYWx1ZSk6CisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkRvY3VtZW50OjpkaXNwbGF5U3RyaW5nTW9kaWZpZWRCeUVuY29kaW5nKToKKyAg
ICAgICAgKiB4bWwvWFBhdGhHcmFtbWFyLnk6CisKIDIwMTYtMDUtMjUgIE5hZWwgT3VlZHJhb2dv
ICA8bmFlbC5vdWVkcmFvZ29AY3JmLmNhbm9uLmZyPgogCiAgICAgICAgIFJlbW92ZSB1bnVzZWQg
c2xvdEJhc2UgcGFyYW1ldGVyIGluIGJpbmRpbmdzIGdlbmVyYXRvcgpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuY3BwCmluZGV4IGFkOGE2N2E0NTcxOGVhN2U2YTE0ZDhj
YTU2YjA1MjcxOTg4ZThmNmUuLjRmNjAzNzRhNTQ0YjNmMTMzNWVkNDQ4ZjU2MDNlMDkxMTNmMmE3
OWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5jcHAKQEAgLTI1
Miw5ICsyNTIsOSBAQCB2b2lkIEpTUm9wZVN0cmluZzo6cmVzb2x2ZVJvcGUoRXhlY1N0YXRlKiBl
eGVjKSBjb25zdAogICAgIAogICAgIGlmIChpczhCaXQoKSkgewogICAgICAgICBMQ2hhciogYnVm
ZmVyOwotICAgICAgICBpZiAoUmVmUHRyPFN0cmluZ0ltcGw+IG5ld0ltcGwgPSBTdHJpbmdJbXBs
Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKG1fbGVuZ3RoLCBidWZmZXIpKSB7CisgICAgICAgIGlm
IChhdXRvIG5ld0ltcGwgPSBTdHJpbmdJbXBsOjp0cnlDcmVhdGVVbmluaXRpYWxpemVkKG1fbGVu
Z3RoLCBidWZmZXIpKSB7CiAgICAgICAgICAgICBIZWFwOjpoZWFwKHRoaXMpLT5yZXBvcnRFeHRy
YU1lbW9yeUFsbG9jYXRlZChuZXdJbXBsLT5jb3N0KCkpOwotICAgICAgICAgICAgbV92YWx1ZSA9
IG5ld0ltcGwucmVsZWFzZSgpOworICAgICAgICAgICAgbV92YWx1ZSA9IFdURk1vdmUobmV3SW1w
bCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBvdXRPZk1lbW9yeShleGVjKTsKICAg
ICAgICAgICAgIHJldHVybjsKQEAgLTI2Niw5ICsyNjYsOSBAQCB2b2lkIEpTUm9wZVN0cmluZzo6
cmVzb2x2ZVJvcGUoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogICAgIH0KIAogICAgIFVDaGFyKiBi
dWZmZXI7Ci0gICAgaWYgKFJlZlB0cjxTdHJpbmdJbXBsPiBuZXdJbXBsID0gU3RyaW5nSW1wbDo6
dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChtX2xlbmd0aCwgYnVmZmVyKSkgeworICAgIGlmIChhdXRv
IG5ld0ltcGwgPSBTdHJpbmdJbXBsOjp0cnlDcmVhdGVVbmluaXRpYWxpemVkKG1fbGVuZ3RoLCBi
dWZmZXIpKSB7CiAgICAgICAgIEhlYXA6OmhlYXAodGhpcyktPnJlcG9ydEV4dHJhTWVtb3J5QWxs
b2NhdGVkKG5ld0ltcGwtPmNvc3QoKSk7Ci0gICAgICAgIG1fdmFsdWUgPSBuZXdJbXBsLnJlbGVh
c2UoKTsKKyAgICAgICAgbV92YWx1ZSA9IFdURk1vdmUobmV3SW1wbCk7CiAgICAgfSBlbHNlIHsK
ICAgICAgICAgb3V0T2ZNZW1vcnkoZXhlYyk7CiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5oCmluZGV4IDYwODJmNjdiMDRjMTgxODExOTQwODIz
NGRjNWFkYzBmNGZiYjI2NTcuLjI3YzJlYjJjOWNhYzQ5ZTA5MGY2NWE1NjQ3MWFjNGMzNTRmZmY1
NDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaApAQCAtOTMsNyAr
OTMsNyBAQCBwcml2YXRlOgogICAgIEpTU3RyaW5nKFZNJiB2bSwgUGFzc1JlZlB0cjxTdHJpbmdJ
bXBsPiB2YWx1ZSkKICAgICAgICAgOiBKU0NlbGwodm0sIHZtLnN0cmluZ1N0cnVjdHVyZS5nZXQo
KSkKICAgICAgICAgLCBtX2ZsYWdzKDApCi0gICAgICAgICwgbV92YWx1ZSh2YWx1ZSkKKyAgICAg
ICAgLCBtX3ZhbHVlKFJlZlB0cjxTdHJpbmdJbXBsPih2YWx1ZSkpCiAgICAgewogICAgIH0KIApA
QCAtNjAzLDcgKzYwMyw3IEBAIGlubGluZSBKU1N0cmluZyoganNTdWJzdHJpbmcoVk0qIHZtLCBj
b25zdCBTdHJpbmcmIHMsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQKICAgICAgICAgaWYgKGMg
PD0gbWF4U2luZ2xlQ2hhcmFjdGVyU3RyaW5nKQogICAgICAgICAgICAgcmV0dXJuIHZtLT5zbWFs
bFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVyU3RyaW5nKGMpOwogICAgIH0KLSAgICByZXR1cm4gSlNT
dHJpbmc6OmNyZWF0ZUhhc090aGVyT3duZXIoKnZtLCBTdHJpbmdJbXBsOjpjcmVhdGVTdWJzdHJp
bmdTaGFyaW5nSW1wbChzLmltcGwoKSwgb2Zmc2V0LCBsZW5ndGgpKTsKKyAgICByZXR1cm4gSlNT
dHJpbmc6OmNyZWF0ZUhhc090aGVyT3duZXIoKnZtLCBTdHJpbmdJbXBsOjpjcmVhdGVTdWJzdHJp
bmdTaGFyaW5nSW1wbCgqcy5pbXBsKCksIG9mZnNldCwgbGVuZ3RoKSk7CiB9CiAKIGlubGluZSBK
U1N0cmluZyoganNPd25lZFN0cmluZyhWTSogdm0sIGNvbnN0IFN0cmluZyYgcykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ByaXZhdGVOYW1lLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcml2YXRlTmFtZS5oCmluZGV4IDg1YzEzOWUwZDlhNWVi
NGViYjU5MTk5NGE5NjNkOTRjOTRhNzk1NDcuLmYwYmM2MGRhM2ExYzI1NmU5MjI5MzQ1YTg0NDhj
NWY4YmNiNjU0Y2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1By
aXZhdGVOYW1lLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJpdmF0ZU5h
bWUuaApAQCAtNDQsNyArNDQsNyBAQCBwdWJsaWM6CiAKICAgICBlbnVtIERlc2NyaXB0aW9uVGFn
IHsgRGVzY3JpcHRpb24gfTsKICAgICBleHBsaWNpdCBQcml2YXRlTmFtZShEZXNjcmlwdGlvblRh
ZywgY29uc3QgU3RyaW5nJiBkZXNjcmlwdGlvbikKLSAgICAgICAgOiBtX3VpZChTdHJpbmdJbXBs
OjpjcmVhdGVTeW1ib2woZGVzY3JpcHRpb24uaW1wbCgpKSkKKyAgICAgICAgOiBtX3VpZChTdHJp
bmdJbXBsOjpjcmVhdGVTeW1ib2woKmRlc2NyaXB0aW9uLmltcGwoKSkpCiAgICAgewogICAgIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU21hbGxTdHJpbmdz
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NtYWxsU3RyaW5ncy5jcHAKaW5k
ZXggOTQ3NTE4NjA3Yjg4YjY3N2U4ZDFmNWVlYmUzZDE3NjU3YjI0YTMxZC4uMTA1YzBlZmMzMDky
OWY2OTVhNGQxNzQwY2UzZTUwOTFlZTgwNmNlYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU21hbGxTdHJpbmdzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TbWFsbFN0cmluZ3MuY3BwCkBAIC01NCwxMCArNTQsMTAgQEAgcHJpdmF0ZToK
IFNtYWxsU3RyaW5nc1N0b3JhZ2U6OlNtYWxsU3RyaW5nc1N0b3JhZ2UoKQogewogICAgIExDaGFy
KiBjaGFyYWN0ZXJCdWZmZXIgPSAwOwotICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBiYXNlU3RyaW5n
ID0gU3RyaW5nSW1wbDo6Y3JlYXRlVW5pbml0aWFsaXplZChzaW5nbGVDaGFyYWN0ZXJTdHJpbmdD
b3VudCwgY2hhcmFjdGVyQnVmZmVyKTsKKyAgICBhdXRvIGJhc2VTdHJpbmcgPSBTdHJpbmdJbXBs
OjpjcmVhdGVVbmluaXRpYWxpemVkKHNpbmdsZUNoYXJhY3RlclN0cmluZ0NvdW50LCBjaGFyYWN0
ZXJCdWZmZXIpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaW5nbGVDaGFyYWN0ZXJT
dHJpbmdDb3VudDsgKytpKSB7CiAgICAgICAgIGNoYXJhY3RlckJ1ZmZlcltpXSA9IGk7Ci0gICAg
ICAgIG1fcmVwc1tpXSA9IEF0b21pY1N0cmluZ0ltcGw6OmFkZChQYXNzUmVmUHRyPFN0cmluZ0lt
cGw+KFN0cmluZ0ltcGw6OmNyZWF0ZVN1YnN0cmluZ1NoYXJpbmdJbXBsKGJhc2VTdHJpbmcsIGks
IDEpKS5nZXQoKSk7CisgICAgICAgIG1fcmVwc1tpXSA9IEF0b21pY1N0cmluZ0ltcGw6OmFkZChT
dHJpbmdJbXBsOjpjcmVhdGVTdWJzdHJpbmdTaGFyaW5nSW1wbChiYXNlU3RyaW5nLmdldCgpLCBp
LCAxKS5wdHIoKSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TdHJpbmdDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJpbmdDb25zdHJ1Y3Rvci5jcHAKaW5kZXggM2Q1OTQyNzcyZmZmNWY1NjA0YzMx
YjAwYzg4OGUxMjE3YmE5YWQwYS4uMGQyYTc0NThjNjAzZDQxZmY2YmI0YWQ3MzMzYmQ3NDNhZjAz
OTg0NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nQ29u
c3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ0Nv
bnN0cnVjdG9yLmNwcApAQCAtNzUsMTAgKzc1LDEwIEBAIHN0YXRpYyBORVZFUl9JTkxJTkUgSlNW
YWx1ZSBzdHJpbmdGcm9tQ2hhckNvZGVTbG93Q2FzZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAg
dW5zaWduZWQgbGVuZ3RoID0gZXhlYy0+YXJndW1lbnRDb3VudCgpOwogICAgIFVDaGFyKiBidWY7
Ci0gICAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBpbXBsID0gU3RyaW5nSW1wbDo6Y3JlYXRlVW5p
bml0aWFsaXplZChsZW5ndGgsIGJ1Zik7CisgICAgYXV0byBpbXBsID0gU3RyaW5nSW1wbDo6Y3Jl
YXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGJ1Zik7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGxlbmd0aDsgKytpKQogICAgICAgICBidWZbaV0gPSBzdGF0aWNfY2FzdDxVQ2hhcj4oZXhl
Yy0+dW5jaGVja2VkQXJndW1lbnQoaSkudG9VSW50MzIoZXhlYykpOwotICAgIHJldHVybiBqc1N0
cmluZyhleGVjLCBpbXBsKTsKKyAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgV1RGTW92ZShpbXBs
KSk7CiB9CiAKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ0Zyb21D
aGFyQ29kZShFeGVjU3RhdGUqIGV4ZWMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAppbmRleCBhZWYzNDNiYWRiOGYwMjMzYTc0OGEwZmRl
MDNiZDg3NDBiZDQ2YjgyLi45MjVmZDgzNmU2M2ExNWUyN2MwYjgyZWJhNDZmNGRmNTU1ZWViNDNl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5
cGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlw
ZS5jcHAKQEAgLTI5OSw3ICsyOTksNyBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGpz
U3BsaWNlU3Vic3RyaW5ncyhFeGVjU3RhdGUqIGV4ZWMsIEpTU3RyaW5nKiBzb3VyYwogICAgICAg
ICBpZiAocG9zaXRpb24gPD0gMCAmJiBsZW5ndGggPj0gc291cmNlU2l6ZSkKICAgICAgICAgICAg
IHJldHVybiBzb3VyY2VWYWw7CiAgICAgICAgIC8vIFdlIGNvdWxkIGNhbGwgU3RyaW5nOjpzdWJz
dHJpbmdTaGFyaW5nSW1wbCgpLCBidXQgdGhpcyB3b3VsZCByZXN1bHQgaW4gcmVkdW5kYW50IGNo
ZWNrcy4KLSAgICAgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIFN0cmluZ0ltcGw6OmNyZWF0ZVN1
YnN0cmluZ1NoYXJpbmdJbXBsKHNvdXJjZS5pbXBsKCksIHN0ZDo6bWF4KDAsIHBvc2l0aW9uKSwg
c3RkOjptaW4oc291cmNlU2l6ZSwgbGVuZ3RoKSkpOworICAgICAgICByZXR1cm4ganNTdHJpbmco
ZXhlYywgU3RyaW5nSW1wbDo6Y3JlYXRlU3Vic3RyaW5nU2hhcmluZ0ltcGwoKnNvdXJjZS5pbXBs
KCksIHN0ZDo6bWF4KDAsIHBvc2l0aW9uKSwgc3RkOjptaW4oc291cmNlU2l6ZSwgbGVuZ3RoKSkp
OwogICAgIH0KIAogICAgIGludCB0b3RhbExlbmd0aCA9IDA7CkBAIC0zMTIsNyArMzEyLDcgQEAg
c3RhdGljIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBqc1NwbGljZVN1YnN0cmluZ3MoRXhlY1N0YXRl
KiBleGVjLCBKU1N0cmluZyogc291cmMKICAgICBpZiAoc291cmNlLmlzOEJpdCgpKSB7CiAgICAg
ICAgIExDaGFyKiBidWZmZXI7CiAgICAgICAgIGNvbnN0IExDaGFyKiBzb3VyY2VEYXRhID0gc291
cmNlLmNoYXJhY3RlcnM4KCk7Ci0gICAgICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBpbXBsID0gU3Ry
aW5nSW1wbDo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZCh0b3RhbExlbmd0aCwgYnVmZmVyKTsKKyAg
ICAgICAgYXV0byBpbXBsID0gU3RyaW5nSW1wbDo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZCh0b3Rh
bExlbmd0aCwgYnVmZmVyKTsKICAgICAgICAgaWYgKCFpbXBsKQogICAgICAgICAgICAgcmV0dXJu
IHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKIApAQCAtMzI0LDEzICszMjQsMTMgQEAgc3Rh
dGljIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBqc1NwbGljZVN1YnN0cmluZ3MoRXhlY1N0YXRlKiBl
eGVjLCBKU1N0cmluZyogc291cmMKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAg
IHJldHVybiBqc1N0cmluZyhleGVjLCBpbXBsLnJlbGVhc2UoKSk7CisgICAgICAgIHJldHVybiBq
c1N0cmluZyhleGVjLCBXVEZNb3ZlKGltcGwpKTsKICAgICB9CiAKICAgICBVQ2hhciogYnVmZmVy
OwogICAgIGNvbnN0IFVDaGFyKiBzb3VyY2VEYXRhID0gc291cmNlLmNoYXJhY3RlcnMxNigpOwog
Ci0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IGltcGwgPSBTdHJpbmdJbXBsOjp0cnlDcmVhdGVVbmlu
aXRpYWxpemVkKHRvdGFsTGVuZ3RoLCBidWZmZXIpOworICAgIGF1dG8gaW1wbCA9IFN0cmluZ0lt
cGw6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQodG90YWxMZW5ndGgsIGJ1ZmZlcik7CiAgICAgaWYg
KCFpbXBsKQogICAgICAgICByZXR1cm4gdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOwogCkBA
IC0zNDIsNyArMzQyLDcgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBqc1NwbGljZVN1
YnN0cmluZ3MoRXhlY1N0YXRlKiBleGVjLCBKU1N0cmluZyogc291cmMKICAgICAgICAgfQogICAg
IH0KIAotICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBpbXBsLnJlbGVhc2UoKSk7CisgICAgcmV0
dXJuIGpzU3RyaW5nKGV4ZWMsIFdURk1vdmUoaW1wbCkpOwogfQogCiBzdGF0aWMgQUxXQVlTX0lO
TElORSBKU1ZhbHVlIGpzU3BsaWNlU3Vic3RyaW5nc1dpdGhTZXBhcmF0b3JzKEV4ZWNTdGF0ZSog
ZXhlYywgSlNTdHJpbmcqIHNvdXJjZVZhbCwgY29uc3QgU3RyaW5nJiBzb3VyY2UsIGNvbnN0IFN0
cmluZ1JhbmdlKiBzdWJzdHJpbmdSYW5nZXMsIGludCByYW5nZUNvdW50LCBjb25zdCBTdHJpbmcq
IHNlcGFyYXRvcnMsIGludCBzZXBhcmF0b3JDb3VudCkKQEAgLTM1NCw3ICszNTQsNyBAQCBzdGF0
aWMgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGpzU3BsaWNlU3Vic3RyaW5nc1dpdGhTZXBhcmF0b3Jz
KEV4ZWNTdGF0ZSogZXhlYywgSgogICAgICAgICBpZiAocG9zaXRpb24gPD0gMCAmJiBsZW5ndGgg
Pj0gc291cmNlU2l6ZSkKICAgICAgICAgICAgIHJldHVybiBzb3VyY2VWYWw7CiAgICAgICAgIC8v
IFdlIGNvdWxkIGNhbGwgU3RyaW5nOjpzdWJzdHJpbmdTaGFyaW5nSW1wbCgpLCBidXQgdGhpcyB3
b3VsZCByZXN1bHQgaW4gcmVkdW5kYW50IGNoZWNrcy4KLSAgICAgICAgcmV0dXJuIGpzU3RyaW5n
KGV4ZWMsIFN0cmluZ0ltcGw6OmNyZWF0ZVN1YnN0cmluZ1NoYXJpbmdJbXBsKHNvdXJjZS5pbXBs
KCksIHN0ZDo6bWF4KDAsIHBvc2l0aW9uKSwgc3RkOjptaW4oc291cmNlU2l6ZSwgbGVuZ3RoKSkp
OworICAgICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgU3RyaW5nSW1wbDo6Y3JlYXRlU3Vic3Ry
aW5nU2hhcmluZ0ltcGwoKnNvdXJjZS5pbXBsKCksIHN0ZDo6bWF4KDAsIHBvc2l0aW9uKSwgc3Rk
OjptaW4oc291cmNlU2l6ZSwgbGVuZ3RoKSkpOwogICAgIH0KIAogICAgIENoZWNrZWQ8aW50LCBS
ZWNvcmRPdmVyZmxvdz4gdG90YWxMZW5ndGggPSAwOwpAQCAtMzc2LDcgKzM3Niw3IEBAIHN0YXRp
YyBBTFdBWVNfSU5MSU5FIEpTVmFsdWUganNTcGxpY2VTdWJzdHJpbmdzV2l0aFNlcGFyYXRvcnMo
RXhlY1N0YXRlKiBleGVjLCBKCiAgICAgICAgIExDaGFyKiBidWZmZXI7CiAgICAgICAgIGNvbnN0
IExDaGFyKiBzb3VyY2VEYXRhID0gc291cmNlLmNoYXJhY3RlcnM4KCk7CiAKLSAgICAgICAgUmVm
UHRyPFN0cmluZ0ltcGw+IGltcGwgPSBTdHJpbmdJbXBsOjp0cnlDcmVhdGVVbmluaXRpYWxpemVk
KHRvdGFsTGVuZ3RoLnVuc2FmZUdldCgpLCBidWZmZXIpOworICAgICAgICBhdXRvIGltcGwgPSBT
dHJpbmdJbXBsOjp0cnlDcmVhdGVVbmluaXRpYWxpemVkKHRvdGFsTGVuZ3RoLnVuc2FmZUdldCgp
LCBidWZmZXIpOwogICAgICAgICBpZiAoIWltcGwpCiAgICAgICAgICAgICByZXR1cm4gdGhyb3dP
dXRPZk1lbW9yeUVycm9yKGV4ZWMpOwogCkBAIC0zOTcsMTEgKzM5NywxMSBAQCBzdGF0aWMgQUxX
QVlTX0lOTElORSBKU1ZhbHVlIGpzU3BsaWNlU3Vic3RyaW5nc1dpdGhTZXBhcmF0b3JzKEV4ZWNT
dGF0ZSogZXhlYywgSgogICAgICAgICAgICAgfQogICAgICAgICB9ICAgICAgICAKIAotICAgICAg
ICByZXR1cm4ganNTdHJpbmcoZXhlYywgaW1wbC5yZWxlYXNlKCkpOworICAgICAgICByZXR1cm4g
anNTdHJpbmcoZXhlYywgV1RGTW92ZShpbXBsKSk7CiAgICAgfQogCiAgICAgVUNoYXIqIGJ1ZmZl
cjsKLSAgICBSZWZQdHI8U3RyaW5nSW1wbD4gaW1wbCA9IFN0cmluZ0ltcGw6OnRyeUNyZWF0ZVVu
aW5pdGlhbGl6ZWQodG90YWxMZW5ndGgudW5zYWZlR2V0KCksIGJ1ZmZlcik7CisgICAgYXV0byBp
bXBsID0gU3RyaW5nSW1wbDo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZCh0b3RhbExlbmd0aC51bnNh
ZmVHZXQoKSwgYnVmZmVyKTsKICAgICBpZiAoIWltcGwpCiAgICAgICAgIHJldHVybiB0aHJvd091
dE9mTWVtb3J5RXJyb3IoZXhlYyk7CiAKQEAgLTQyOCw3ICs0MjgsNyBAQCBzdGF0aWMgQUxXQVlT
X0lOTElORSBKU1ZhbHVlIGpzU3BsaWNlU3Vic3RyaW5nc1dpdGhTZXBhcmF0b3JzKEV4ZWNTdGF0
ZSogZXhlYywgSgogICAgICAgICB9CiAgICAgfQogCi0gICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMs
IGltcGwucmVsZWFzZSgpKTsKKyAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgV1RGTW92ZShpbXBs
KSk7CiB9CiAKIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEVuY29kZWRKU1ZhbHVlIHJlbW92ZVVzaW5n
UmVnRXhwU2VhcmNoKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKU1N0cmluZyogc3RyaW5nLCBj
b25zdCBTdHJpbmcmIHNvdXJjZSwgUmVnRXhwKiByZWdFeHApCkBAIC03MjcsMTQgKzcyNywxNCBA
QCBzdGF0aWMgQUxXQVlTX0lOTElORSBFbmNvZGVkSlNWYWx1ZSByZXBsYWNlVXNpbmdTdHJpbmdT
ZWFyY2goVk0mLCBFeGVjU3RhdGUqIGV4ZQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogCiAgICAgU3RyaW5nSW1wbCogc3RyaW5nSW1wbCA9IHN0cmluZy5p
bXBsKCk7Ci0gICAgU3RyaW5nIGxlZnRQYXJ0KFN0cmluZ0ltcGw6OmNyZWF0ZVN1YnN0cmluZ1No
YXJpbmdJbXBsKHN0cmluZ0ltcGwsIDAsIG1hdGNoU3RhcnQpKTsKKyAgICBTdHJpbmcgbGVmdFBh
cnQoU3RyaW5nSW1wbDo6Y3JlYXRlU3Vic3RyaW5nU2hhcmluZ0ltcGwoKnN0cmluZ0ltcGwsIDAs
IG1hdGNoU3RhcnQpKTsKIAogICAgIHNpemVfdCBtYXRjaEVuZCA9IG1hdGNoU3RhcnQgKyBzZWFy
Y2hTdHJpbmcuaW1wbCgpLT5sZW5ndGgoKTsKICAgICBpbnQgb3ZlY3RvclsyXSA9IHsgc3RhdGlj
X2Nhc3Q8aW50PihtYXRjaFN0YXJ0KSwgIHN0YXRpY19jYXN0PGludD4obWF0Y2hFbmQpfTsKICAg
ICBTdHJpbmcgbWlkZGxlUGFydCA9IHN1YnN0aXR1dGVCYWNrcmVmZXJlbmNlcyhyZXBsYWNlU3Ry
aW5nLCBzdHJpbmcsIG92ZWN0b3IsIDApOwogCiAgICAgc2l6ZV90IGxlZnRMZW5ndGggPSBzdHJp
bmdJbXBsLT5sZW5ndGgoKSAtIG1hdGNoRW5kOwotICAgIFN0cmluZyByaWdodFBhcnQoU3RyaW5n
SW1wbDo6Y3JlYXRlU3Vic3RyaW5nU2hhcmluZ0ltcGwoc3RyaW5nSW1wbCwgbWF0Y2hFbmQsIGxl
ZnRMZW5ndGgpKTsKKyAgICBTdHJpbmcgcmlnaHRQYXJ0KFN0cmluZ0ltcGw6OmNyZWF0ZVN1YnN0
cmluZ1NoYXJpbmdJbXBsKCpzdHJpbmdJbXBsLCBtYXRjaEVuZCwgbGVmdExlbmd0aCkpOwogICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNDOjpqc1N0cmluZyhleGVjLCBsZWZ0UGFydCwgbWlk
ZGxlUGFydCwgcmlnaHRQYXJ0KSk7CiB9CiAKQEAgLTc1NiwyNiArNzU2LDI2IEBAIHRlbXBsYXRl
IDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgogc3RhdGljIGlubGluZSBKU1ZhbHVlIHJlcGVhdENo
YXJhY3RlcihFeGVjU3RhdGUqIGV4ZWMsIENoYXJhY3RlclR5cGUgY2hhcmFjdGVyLCB1bnNpZ25l
ZCByZXBlYXRDb3VudCkKIHsKICAgICBDaGFyYWN0ZXJUeXBlKiBidWZmZXIgPSBudWxscHRyOwot
ICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBpbXBsID0gU3RyaW5nSW1wbDo6dHJ5Q3JlYXRlVW5pbml0
aWFsaXplZChyZXBlYXRDb3VudCwgYnVmZmVyKTsKKyAgICBhdXRvIGltcGwgPSBTdHJpbmdJbXBs
Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKHJlcGVhdENvdW50LCBidWZmZXIpOwogICAgIGlmICgh
aW1wbCkKICAgICAgICAgcmV0dXJuIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKIAogICAg
IHN0ZDo6ZmlsbF9uKGJ1ZmZlciwgcmVwZWF0Q291bnQsIGNoYXJhY3Rlcik7CiAKLSAgICByZXR1
cm4ganNTdHJpbmcoZXhlYywgaW1wbC5yZWxlYXNlKCkpOworICAgIHJldHVybiBqc1N0cmluZyhl
eGVjLCBXVEZNb3ZlKGltcGwpKTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5
cGU+CiBzdGF0aWMgaW5saW5lIEpTU3RyaW5nKiByZXBlYXRDaGFyYWN0ZXIoRXhlY1N0YXRlJiBl
eGVjLCBDaGFyYWN0ZXJUeXBlIGNoYXJhY3RlciwgdW5zaWduZWQgcmVwZWF0Q291bnQpCiB7CiAg
ICAgQ2hhcmFjdGVyVHlwZSogYnVmZmVyID0gbnVsbHB0cjsKLSAgICBSZWZQdHI8U3RyaW5nSW1w
bD4gaW1wbCA9IFN0cmluZ0ltcGw6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQocmVwZWF0Q291bnQs
IGJ1ZmZlcik7CisgICAgYXV0byBpbXBsID0gU3RyaW5nSW1wbDo6dHJ5Q3JlYXRlVW5pbml0aWFs
aXplZChyZXBlYXRDb3VudCwgYnVmZmVyKTsKICAgICBpZiAoIWltcGwpCiAgICAgICAgIHJldHVy
biB0aHJvd091dE9mTWVtb3J5RXJyb3IoJmV4ZWMpLCBudWxscHRyOwogCiAgICAgc3RkOjpmaWxs
X24oYnVmZmVyLCByZXBlYXRDb3VudCwgY2hhcmFjdGVyKTsKIAotICAgIHJldHVybiBqc1N0cmlu
ZygmZXhlYywgaW1wbC5yZWxlYXNlKCkpOworICAgIHJldHVybiBqc1N0cmluZygmZXhlYywgV1RG
TW92ZShpbXBsKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJv
dG9GdW5jUmVwZWF0Q2hhcmFjdGVyKEV4ZWNTdGF0ZSogZXhlYykKQEAgLTE1NzcsNyArMTU3Nyw3
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jRm9udHNpemUo
RXhlY1N0YXRlKiBleGVjKQogICAgICAgICB1bnNpZ25lZCBidWZmZXJTaXplID0gMjIgKyBzdHJp
bmdTaXplOwogICAgICAgICAvLyBGSVhNRTogU2hvdWxkIHdlIGhhdmUgYW4gOC1iaXQgdmVyc2lv
biBvZiB0aGlzIGNvZGUgcGF0aCB0b28/IE9yIG1heWJlIG9ubHkgYW4gOC1iaXQgdmVyc2lvbj8K
ICAgICAgICAgVUNoYXIqIGJ1ZmZlcjsKLSAgICAgICAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBp
bXBsID0gU3RyaW5nSW1wbDo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChidWZmZXJTaXplLCBidWZm
ZXIpOworICAgICAgICBhdXRvIGltcGwgPSBTdHJpbmdJbXBsOjp0cnlDcmVhdGVVbmluaXRpYWxp
emVkKGJ1ZmZlclNpemUsIGJ1ZmZlcik7CiAgICAgICAgIGlmICghaW1wbCkKICAgICAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgICAgIGJ1ZmZlclsw
XSA9ICc8JzsKQEAgLTE2MDMsNyArMTYwMyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgc3RyaW5nUHJvdG9GdW5jRm9udHNpemUoRXhlY1N0YXRlKiBleGVjKQogICAgICAgICBidWZm
ZXJbMTkgKyBzdHJpbmdTaXplXSA9ICduJzsKICAgICAgICAgYnVmZmVyWzIwICsgc3RyaW5nU2l6
ZV0gPSAndCc7CiAgICAgICAgIGJ1ZmZlclsyMSArIHN0cmluZ1NpemVdID0gJz4nOwotICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCBpbXBsKSk7
CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOb250cml2aWFsU3RyaW5nKGV4ZWMs
IFdURk1vdmUoaW1wbCkpKTsKICAgICB9CiAKICAgICBTdHJpbmcgZm9udFNpemUgPSBhMC50b1dU
RlN0cmluZyhleGVjKTsKQEAgLTE2NDYsNyArMTY0Niw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jTGluayhFeGVjU3RhdGUqIGV4ZWMpCiAgICAgdW5zaWdu
ZWQgYnVmZmVyU2l6ZSA9IDE1ICsgbGlua1RleHRTaXplICsgc3RyaW5nU2l6ZTsKICAgICAvLyBG
SVhNRTogU2hvdWxkIHdlIGhhdmUgYW4gOC1iaXQgdmVyc2lvbiBvZiB0aGlzIGNvZGUgcGF0aCB0
b28/IE9yIG1heWJlIG9ubHkgYW4gOC1iaXQgdmVyc2lvbj8KICAgICBVQ2hhciogYnVmZmVyOwot
ICAgIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gaW1wbCA9IFN0cmluZ0ltcGw6OnRyeUNyZWF0ZVVu
aW5pdGlhbGl6ZWQoYnVmZmVyU2l6ZSwgYnVmZmVyKTsKKyAgICBhdXRvIGltcGwgPSBTdHJpbmdJ
bXBsOjp0cnlDcmVhdGVVbmluaXRpYWxpemVkKGJ1ZmZlclNpemUsIGJ1ZmZlcik7CiAgICAgaWYg
KCFpbXBsKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwog
ICAgIGJ1ZmZlclswXSA9ICc8JzsKQEAgLTE2NjYsNyArMTY2Niw3IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jTGluayhFeGVjU3RhdGUqIGV4ZWMpCiAgICAg
YnVmZmVyWzEyICsgbGlua1RleHRTaXplICsgc3RyaW5nU2l6ZV0gPSAnLyc7CiAgICAgYnVmZmVy
WzEzICsgbGlua1RleHRTaXplICsgc3RyaW5nU2l6ZV0gPSAnYSc7CiAgICAgYnVmZmVyWzE0ICsg
bGlua1RleHRTaXplICsgc3RyaW5nU2l6ZV0gPSAnPic7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywgaW1wbCkpOworICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNOb250cml2aWFsU3RyaW5nKGV4ZWMsIFdURk1vdmUoaW1wbCkpKTsKIH0KIAog
ZW51bSB7CkBAIC0xODgzLDcgKzE4ODMsNyBAQCBzdGF0aWMgSlNWYWx1ZSBub3JtYWxpemUoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBVQ2hhciogc291cmNlLCBzaXplX3Qgc291cmNlTGVuZwogICAg
IH0KIAogICAgIFVDaGFyKiBidWZmZXIgPSBudWxscHRyOwotICAgIFJlZlB0cjxTdHJpbmdJbXBs
PiBpbXBsID0gU3RyaW5nSW1wbDo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChub3JtYWxpemVkU3Ry
aW5nTGVuZ3RoLCBidWZmZXIpOworICAgIGF1dG8gaW1wbCA9IFN0cmluZ0ltcGw6OnRyeUNyZWF0
ZVVuaW5pdGlhbGl6ZWQobm9ybWFsaXplZFN0cmluZ0xlbmd0aCwgYnVmZmVyKTsKICAgICBpZiAo
IWltcGwpCiAgICAgICAgIHJldHVybiB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7CiAKQEAg
LTE4OTIsNyArMTg5Miw3IEBAIHN0YXRpYyBKU1ZhbHVlIG5vcm1hbGl6ZShFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IFVDaGFyKiBzb3VyY2UsIHNpemVfdCBzb3VyY2VMZW5nCiAgICAgaWYgKFVfRkFJ
TFVSRShzdGF0dXMpKQogICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7CiAKLSAg
ICByZXR1cm4ganNTdHJpbmcoZXhlYywgaW1wbC5yZWxlYXNlKCkpOworICAgIHJldHVybiBqc1N0
cmluZyhleGVjLCBXVEZNb3ZlKGltcGwpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBzdHJpbmdQcm90b0Z1bmNOb3JtYWxpemUoRXhlY1N0YXRlKiBleGVjKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dURi93dGYvTWV0YUFsbG9jYXRvci5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9NZXRh
QWxsb2NhdG9yLmNwcAppbmRleCBkZDA2NTkyMDU4ZjJkMjE4ZTk3NmI0NjRmYzIzOThiYjA1OTcw
NjI5Li42ZTQ0YjY3MjRiMjgzZGQ0Yzc2ZDE2ZWU0NDhjNzgzMDUyZTgyZmEzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV1RGL3d0Zi9NZXRhQWxsb2NhdG9yLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9N
ZXRhQWxsb2NhdG9yLmNwcApAQCAtMTQ4LDEyICsxNDgsMTIgQEAgTWV0YUFsbG9jYXRvcjo6TWV0
YUFsbG9jYXRvcihzaXplX3QgYWxsb2NhdGlvbkdyYW51bGUsIHNpemVfdCBwYWdlU2l6ZSkKICAg
ICBBU1NFUlQoc3RhdGljX2Nhc3Q8c2l6ZV90PigxKSA8PCBtX2xvZ0FsbG9jYXRpb25HcmFudWxl
ID09IG1fYWxsb2NhdGlvbkdyYW51bGUpOwogfQogCi1QYXNzUmVmUHRyPE1ldGFBbGxvY2F0b3JI
YW5kbGU+IE1ldGFBbGxvY2F0b3I6OmFsbG9jYXRlKHNpemVfdCBzaXplSW5CeXRlcywgdm9pZCog
b3duZXJVSUQpCitSZWZQdHI8TWV0YUFsbG9jYXRvckhhbmRsZT4gTWV0YUFsbG9jYXRvcjo6YWxs
b2NhdGUoc2l6ZV90IHNpemVJbkJ5dGVzLCB2b2lkKiBvd25lclVJRCkKIHsKICAgICBMb2NrSG9s
ZGVyIGxvY2tlcigmbV9sb2NrKTsKIAogICAgIGlmICghc2l6ZUluQnl0ZXMpCi0gICAgICAgIHJl
dHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKICAgICBzaXplSW5CeXRlcyA9
IHJvdW5kVXAoc2l6ZUluQnl0ZXMpOwogICAgIApAQCAtMTY0LDcgKzE2NCw3IEBAIFBhc3NSZWZQ
dHI8TWV0YUFsbG9jYXRvckhhbmRsZT4gTWV0YUFsbG9jYXRvcjo6YWxsb2NhdGUoc2l6ZV90IHNp
emVJbkJ5dGVzLCB2b2lkCiAgICAgICAgIAogICAgICAgICBzdGFydCA9IGFsbG9jYXRlTmV3U3Bh
Y2UobnVtYmVyT2ZQYWdlcyk7CiAgICAgICAgIGlmICghc3RhcnQpCi0gICAgICAgICAgICByZXR1
cm4gMDsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICAKICAgICAgICAgQVNT
RVJUKG51bWJlck9mUGFnZXMgPj0gcmVxdWVzdGVkTnVtYmVyT2ZQYWdlcyk7CiAgICAgICAgIApA
QCAtMTg2LDEyICsxODYsMTIgQEAgUGFzc1JlZlB0cjxNZXRhQWxsb2NhdG9ySGFuZGxlPiBNZXRh
QWxsb2NhdG9yOjphbGxvY2F0ZShzaXplX3Qgc2l6ZUluQnl0ZXMsIHZvaWQKICAgICBtX251bUFs
bG9jYXRpb25zKys7CiAjZW5kaWYKIAotICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIGhhbmRsZSA9
IG5ldyBNZXRhQWxsb2NhdG9ySGFuZGxlKHRoaXMsIHN0YXJ0LCBzaXplSW5CeXRlcywgb3duZXJV
SUQpOworICAgIGF1dG8gaGFuZGxlID0gYWRvcHRSZWYoKm5ldyBNZXRhQWxsb2NhdG9ySGFuZGxl
KHRoaXMsIHN0YXJ0LCBzaXplSW5CeXRlcywgb3duZXJVSUQpKTsKIAogICAgIGlmIChVTkxJS0VM
WSghIW1fdHJhY2tlcikpCi0gICAgICAgIG1fdHJhY2tlci0+bm90aWZ5KGhhbmRsZSk7CisgICAg
ICAgIG1fdHJhY2tlci0+bm90aWZ5KGhhbmRsZS5wdHIoKSk7CiAKLSAgICByZXR1cm4gYWRvcHRS
ZWYoaGFuZGxlKTsKKyAgICByZXR1cm4gV1RGTW92ZShoYW5kbGUpOwogfQogCiBNZXRhQWxsb2Nh
dG9yOjpTdGF0aXN0aWNzIE1ldGFBbGxvY2F0b3I6OmN1cnJlbnRTdGF0aXN0aWNzKCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0b3IuaCBiL1NvdXJjZS9XVEYvd3RmL01l
dGFBbGxvY2F0b3IuaAppbmRleCA5ZGQzNzVjYWQ1NGVjYTMwZWY3YTRlZjlkNzIyMDQ0NzljMWMw
ZDYzLi44NzM5MDFiZGU2ZTFmOTBiNDcxYmQxM2E3ZTg2OWQ3NzFiMmMwMjA0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV1RGL3d0Zi9NZXRhQWxsb2NhdG9yLmgKKysrIGIvU291cmNlL1dURi93dGYvTWV0
YUFsbG9jYXRvci5oCkBAIC02OCw3ICs2OCw3IEBAIHB1YmxpYzoKICAgICAKICAgICBXVEZfRVhQ
T1JUX1BSSVZBVEUgdmlydHVhbCB+TWV0YUFsbG9jYXRvcigpOwogICAgIAotICAgIFdURl9FWFBP
UlRfUFJJVkFURSBQYXNzUmVmUHRyPE1ldGFBbGxvY2F0b3JIYW5kbGU+IGFsbG9jYXRlKHNpemVf
dCBzaXplSW5CeXRlcywgdm9pZCogb3duZXJVSUQpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBS
ZWZQdHI8TWV0YUFsbG9jYXRvckhhbmRsZT4gYWxsb2NhdGUoc2l6ZV90IHNpemVJbkJ5dGVzLCB2
b2lkKiBvd25lclVJRCk7CiAKICAgICB2b2lkIHRyYWNrQWxsb2NhdGlvbnMoTWV0YUFsbG9jYXRv
clRyYWNrZXIqIHRyYWNrZXIpCiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUGFy
YWxsZWxKb2JzR2VuZXJpYy5oIGIvU291cmNlL1dURi93dGYvUGFyYWxsZWxKb2JzR2VuZXJpYy5o
CmluZGV4IDNlMmUyOWQ2MWFhNTljYWYxYzJhZDU4YTI3ZDNkOTI1MjlkMGRkODQuLjUyZjQ3OTlm
MTg2YjE0NDJjODU3ZDUwNmIzMjQzNTIwMTI1ODM1N2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYv
d3RmL1BhcmFsbGVsSm9ic0dlbmVyaWMuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9QYXJhbGxlbEpv
YnNHZW5lcmljLmgKQEAgLTY2LDkgKzY2LDkgQEAgcHVibGljOgogCiAgICAgICAgIHZvaWQgd2Fp
dEZvckZpbmlzaCgpOwogCi0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRocmVhZFByaXZhdGU+
IGNyZWF0ZSgpCisgICAgICAgIHN0YXRpYyBSZWY8VGhyZWFkUHJpdmF0ZT4gY3JlYXRlKCkKICAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUaHJlYWRQcml2YXRlKCkp
OworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVGhyZWFkUHJpdmF0ZSgpKTsKICAg
ICAgICAgfQogCiAgICAgICAgIHN0YXRpYyB2b2lkIHdvcmtlclRocmVhZCh2b2lkKik7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21pY1N0cmluZ0ltcGwuY3BwIGIvU291cmNl
L1dURi93dGYvdGV4dC9BdG9taWNTdHJpbmdJbXBsLmNwcAppbmRleCA5MDk1MzNjOTkwOGZlNjAw
ZDFlOGI5ZTcwM2JjZDhlMzQ4Mzk5MjdjLi5hYzYwYjYzM2Y3ZTI0MTExZjc0OGMzNjMyMzZjNWUw
YWJlNjcyZTZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21pY1N0cmluZ0lt
cGwuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvQXRvbWljU3RyaW5nSW1wbC5jcHAKQEAg
LTIxOSw3ICsyMTksNyBAQCBzdHJ1Y3QgSGFzaEFuZFVURjhDaGFyYWN0ZXJzVHJhbnNsYXRvciB7
CiAgICAgc3RhdGljIHZvaWQgdHJhbnNsYXRlKFN0cmluZ0ltcGwqJiBsb2NhdGlvbiwgY29uc3Qg
SGFzaEFuZFVURjhDaGFyYWN0ZXJzJiBidWZmZXIsIHVuc2lnbmVkIGhhc2gpCiAgICAgewogICAg
ICAgICBVQ2hhciogdGFyZ2V0OwotICAgICAgICBSZWZQdHI8U3RyaW5nSW1wbD4gbmV3U3RyaW5n
ID0gU3RyaW5nSW1wbDo6Y3JlYXRlVW5pbml0aWFsaXplZChidWZmZXIudXRmMTZMZW5ndGgsIHRh
cmdldCk7CisgICAgICAgIGF1dG8gbmV3U3RyaW5nID0gU3RyaW5nSW1wbDo6Y3JlYXRlVW5pbml0
aWFsaXplZChidWZmZXIudXRmMTZMZW5ndGgsIHRhcmdldCk7CiAKICAgICAgICAgYm9vbCBpc0Fs
bEFTQ0lJOwogICAgICAgICBjb25zdCBjaGFyKiBzb3VyY2UgPSBidWZmZXIuY2hhcmFjdGVyczsK
QEAgLTIyOSw3ICsyMjksNyBAQCBzdHJ1Y3QgSGFzaEFuZFVURjhDaGFyYWN0ZXJzVHJhbnNsYXRv
ciB7CiAgICAgICAgIGlmIChpc0FsbEFTQ0lJKQogICAgICAgICAgICAgbmV3U3RyaW5nID0gU3Ry
aW5nSW1wbDo6Y3JlYXRlKGJ1ZmZlci5jaGFyYWN0ZXJzLCBidWZmZXIubGVuZ3RoKTsKIAotICAg
ICAgICBsb2NhdGlvbiA9IG5ld1N0cmluZy5sZWFrUmVmKCk7CisgICAgICAgIGxvY2F0aW9uID0g
Jm5ld1N0cmluZy5sZWFrUmVmKCk7CiAgICAgICAgIGxvY2F0aW9uLT5zZXRIYXNoKGhhc2gpOwog
ICAgICAgICBsb2NhdGlvbi0+c2V0SXNBdG9taWModHJ1ZSk7CiAgICAgfQpAQCAtMjg0LDcgKzI4
NCw3IEBAIHN0cnVjdCBTdWJzdHJpbmdMb2NhdGlvbiB7CiBzdHJ1Y3QgU3Vic3RyaW5nVHJhbnNs
YXRvciB7CiAgICAgc3RhdGljIHZvaWQgdHJhbnNsYXRlKFN0cmluZ0ltcGwqJiBsb2NhdGlvbiwg
Y29uc3QgU3Vic3RyaW5nTG9jYXRpb24mIGJ1ZmZlciwgdW5zaWduZWQgaGFzaCkKICAgICB7Ci0g
ICAgICAgIGxvY2F0aW9uID0gJlN0cmluZ0ltcGw6OmNyZWF0ZVN1YnN0cmluZ1NoYXJpbmdJbXBs
KGJ1ZmZlci5iYXNlU3RyaW5nLCBidWZmZXIuc3RhcnQsIGJ1ZmZlci5sZW5ndGgpLmxlYWtSZWYo
KTsKKyAgICAgICAgbG9jYXRpb24gPSAmU3RyaW5nSW1wbDo6Y3JlYXRlU3Vic3RyaW5nU2hhcmlu
Z0ltcGwoKmJ1ZmZlci5iYXNlU3RyaW5nLCBidWZmZXIuc3RhcnQsIGJ1ZmZlci5sZW5ndGgpLmxl
YWtSZWYoKTsKICAgICAgICAgbG9jYXRpb24tPnNldEhhc2goaGFzaCk7CiAgICAgICAgIGxvY2F0
aW9uLT5zZXRJc0F0b21pYyh0cnVlKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0
Zi90ZXh0L0NTdHJpbmcuY3BwIGIvU291cmNlL1dURi93dGYvdGV4dC9DU3RyaW5nLmNwcAppbmRl
eCBkMWYxODZiNGFmMjRiMjA1YzZlNmE5YmFmOGYxYjgwZGM3ZDZkNGRiLi4yMWIzN2ViYThjMjU0
Mzk2ZmYxZmJmYzEwNWNmMzM4M2Q0NjBhODI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90
ZXh0L0NTdHJpbmcuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvQ1N0cmluZy5jcHAKQEAg
LTMyLDE0ICszMiwxNCBAQAogCiBuYW1lc3BhY2UgV1RGIHsKIAotUGFzc1JlZlB0cjxDU3RyaW5n
QnVmZmVyPiBDU3RyaW5nQnVmZmVyOjpjcmVhdGVVbmluaXRpYWxpemVkKHNpemVfdCBsZW5ndGgp
CitSZWY8Q1N0cmluZ0J1ZmZlcj4gQ1N0cmluZ0J1ZmZlcjo6Y3JlYXRlVW5pbml0aWFsaXplZChz
aXplX3QgbGVuZ3RoKQogewogICAgIFJFTEVBU0VfQVNTRVJUKGxlbmd0aCA8IChzdGQ6Om51bWVy
aWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgLSBzaXplb2YoQ1N0cmluZ0J1ZmZlcikpKTsKIAog
ICAgIC8vIFRoZSArMSBpcyBmb3IgdGhlIHRlcm1pbmF0aW5nIG51bGwgY2hhcmFjdGVyLgogICAg
IHNpemVfdCBzaXplID0gc2l6ZW9mKENTdHJpbmdCdWZmZXIpICsgbGVuZ3RoICsgMTsKICAgICBD
U3RyaW5nQnVmZmVyKiBzdHJpbmdCdWZmZXIgPSBzdGF0aWNfY2FzdDxDU3RyaW5nQnVmZmVyKj4o
ZmFzdE1hbGxvYyhzaXplKSk7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyAoTm90TnVsbCwgc3Ry
aW5nQnVmZmVyKSBDU3RyaW5nQnVmZmVyKGxlbmd0aCkpOworICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IChOb3ROdWxsLCBzdHJpbmdCdWZmZXIpIENTdHJpbmdCdWZmZXIobGVuZ3RoKSk7CiB9CiAK
IENTdHJpbmc6OkNTdHJpbmcoY29uc3QgY2hhciogc3RyKQpAQCAtNzYsNyArNzYsNyBAQCBjaGFy
KiBDU3RyaW5nOjptdXRhYmxlRGF0YSgpCiAgICAgICAgIHJldHVybiAwOwogICAgIHJldHVybiBt
X2J1ZmZlci0+bXV0YWJsZURhdGEoKTsKIH0KLSAgICAKKwogQ1N0cmluZyBDU3RyaW5nOjpuZXdV
bmluaXRpYWxpemVkKHNpemVfdCBsZW5ndGgsIGNoYXIqJiBjaGFyYWN0ZXJCdWZmZXIpCiB7CiAg
ICAgQ1N0cmluZyByZXN1bHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0NTdHJp
bmcuaCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvQ1N0cmluZy5oCmluZGV4IDI5ZDNiMGVmMWI2OWQ3
YTRiNzIwNmRhMGM4YmZmODI1MGRkYWZhZTcuLjRkOGQ4MDM5OWM2OTAwYjEzM2U3MTVjNDMwN2Q4
ZDQyNDM4M2Q2ZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvQ1N0cmluZy5oCisr
KyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvQ1N0cmluZy5oCkBAIC0yOCw3ICsyOCw3IEBACiAKICNp
bmNsdWRlIDx3dGYvSGFzaEZ1bmN0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoVHJhaXRzLmg+
Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmLmg+CiAjaW5j
bHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KIAogbmFtZXNwYWNlIFdURiB7CkBAIC00Myw3ICs0Myw3
IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIENTdHJpbmc7CiAKLSAgICBz
dGF0aWMgUGFzc1JlZlB0cjxDU3RyaW5nQnVmZmVyPiBjcmVhdGVVbmluaXRpYWxpemVkKHNpemVf
dCBsZW5ndGgpOworICAgIHN0YXRpYyBSZWY8Q1N0cmluZ0J1ZmZlcj4gY3JlYXRlVW5pbml0aWFs
aXplZChzaXplX3QgbGVuZ3RoKTsKIAogICAgIENTdHJpbmdCdWZmZXIoc2l6ZV90IGxlbmd0aCkg
OiBtX2xlbmd0aChsZW5ndGgpIHsgfQogICAgIGNoYXIqIG11dGFibGVEYXRhKCkgeyByZXR1cm4g
cmVpbnRlcnByZXRfY2FzdF9wdHI8Y2hhcio+KHRoaXMgKyAxKTsgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi93dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3RleHQv
U3RyaW5nQnVpbGRlci5jcHAKaW5kZXggMWQ2YWU2MjFkMTg5NjFlYzkxM2NkN2RkYzMwMGViYTNi
ZWRmYjhjNS4uNmY1YzVjODg4NjEyN2MwNmZkNGQwZDllM2FlOTkyZjhjZTUzZDRlMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmNwcAorKysgYi9Tb3VyY2Uv
V1RGL3d0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuY3BwCkBAIC01OSw3ICs1OSw3IEBAIHZvaWQgU3Ry
aW5nQnVpbGRlcjo6cmVpZnlTdHJpbmcoKSBjb25zdAogICAgIGlmIChtX2xlbmd0aCA9PSBtX2J1
ZmZlci0+bGVuZ3RoKCkpCiAgICAgICAgIG1fc3RyaW5nID0gbV9idWZmZXIuZ2V0KCk7CiAgICAg
ZWxzZQotICAgICAgICBtX3N0cmluZyA9IFN0cmluZ0ltcGw6OmNyZWF0ZVN1YnN0cmluZ1NoYXJp
bmdJbXBsKG1fYnVmZmVyLCAwLCBtX2xlbmd0aCk7CisgICAgICAgIG1fc3RyaW5nID0gU3RyaW5n
SW1wbDo6Y3JlYXRlU3Vic3RyaW5nU2hhcmluZ0ltcGwoKm1fYnVmZmVyLmdldCgpLCAwLCBtX2xl
bmd0aCk7CiB9CiAKIHZvaWQgU3RyaW5nQnVpbGRlcjo6cmVzaXplKHVuc2lnbmVkIG5ld1NpemUp
CkBAIC04OCw3ICs4OCw3IEBAIHZvaWQgU3RyaW5nQnVpbGRlcjo6cmVzaXplKHVuc2lnbmVkIG5l
d1NpemUpCiAgICAgQVNTRVJUKG1fbGVuZ3RoID09IG1fc3RyaW5nLmxlbmd0aCgpKTsKICAgICBB
U1NFUlQobmV3U2l6ZSA8IG1fc3RyaW5nLmxlbmd0aCgpKTsKICAgICBtX2xlbmd0aCA9IG5ld1Np
emU7Ci0gICAgbV9zdHJpbmcgPSBTdHJpbmdJbXBsOjpjcmVhdGVTdWJzdHJpbmdTaGFyaW5nSW1w
bChtX3N0cmluZy5pbXBsKCksIDAsIG5ld1NpemUpOworICAgIG1fc3RyaW5nID0gU3RyaW5nSW1w
bDo6Y3JlYXRlU3Vic3RyaW5nU2hhcmluZ0ltcGwoKm1fc3RyaW5nLmltcGwoKSwgMCwgbmV3U2l6
ZSk7CiB9CiAKIC8vIEFsbG9jYXRlIGEgbmV3IDggYml0IGJ1ZmZlciwgY29weWluZyBpbiBjdXJy
ZW50Q2hhcmFjdGVycyAodGhlc2UgbWF5IGNvbWUgZnJvbSBlaXRoZXIgbV9zdHJpbmcKQEAgLTE0
Nyw3ICsxNDcsNyBAQCB2b2lkIFN0cmluZ0J1aWxkZXI6OnJlYWxsb2NhdGVCdWZmZXI8TENoYXI+
KHVuc2lnbmVkIHJlcXVpcmVkTGVuZ3RoKQogICAgIEFTU0VSVChtX2J1ZmZlci0+aXM4Qml0KCkp
OwogICAgIAogICAgIGlmIChtX2J1ZmZlci0+aGFzT25lUmVmKCkpCi0gICAgICAgIG1fYnVmZmVy
ID0gU3RyaW5nSW1wbDo6cmVhbGxvY2F0ZShtX2J1ZmZlci5yZWxlYXNlKCksIHJlcXVpcmVkTGVu
Z3RoLCBtX2J1ZmZlckNoYXJhY3RlcnM4KTsKKyAgICAgICAgbV9idWZmZXIgPSBTdHJpbmdJbXBs
OjpyZWFsbG9jYXRlKG1fYnVmZmVyLnJlbGVhc2VOb25OdWxsKCksIHJlcXVpcmVkTGVuZ3RoLCBt
X2J1ZmZlckNoYXJhY3RlcnM4KTsKICAgICBlbHNlCiAgICAgICAgIGFsbG9jYXRlQnVmZmVyKG1f
YnVmZmVyLT5jaGFyYWN0ZXJzOCgpLCByZXF1aXJlZExlbmd0aCk7CiB9CkBAIC0xNjIsNyArMTYy
LDcgQEAgdm9pZCBTdHJpbmdCdWlsZGVyOjpyZWFsbG9jYXRlQnVmZmVyPFVDaGFyPih1bnNpZ25l
ZCByZXF1aXJlZExlbmd0aCkKICAgICBpZiAobV9idWZmZXItPmlzOEJpdCgpKQogICAgICAgICBh
bGxvY2F0ZUJ1ZmZlclVwQ29udmVydChtX2J1ZmZlci0+Y2hhcmFjdGVyczgoKSwgcmVxdWlyZWRM
ZW5ndGgpOwogICAgIGVsc2UgaWYgKG1fYnVmZmVyLT5oYXNPbmVSZWYoKSkKLSAgICAgICAgbV9i
dWZmZXIgPSBTdHJpbmdJbXBsOjpyZWFsbG9jYXRlKG1fYnVmZmVyLnJlbGVhc2UoKSwgcmVxdWly
ZWRMZW5ndGgsIG1fYnVmZmVyQ2hhcmFjdGVyczE2KTsKKyAgICAgICAgbV9idWZmZXIgPSBTdHJp
bmdJbXBsOjpyZWFsbG9jYXRlKG1fYnVmZmVyLnJlbGVhc2VOb25OdWxsKCksIHJlcXVpcmVkTGVu
Z3RoLCBtX2J1ZmZlckNoYXJhY3RlcnMxNik7CiAgICAgZWxzZQogICAgICAgICBhbGxvY2F0ZUJ1
ZmZlcihtX2J1ZmZlci0+Y2hhcmFjdGVyczE2KCksIHJlcXVpcmVkTGVuZ3RoKTsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5jcHAgYi9Tb3VyY2UvV1RGL3d0
Zi90ZXh0L1N0cmluZ0ltcGwuY3BwCmluZGV4IGZjMTYyNzRlYzA0YmU3NGNjMmJmOWYwZjQ5MWEy
MjMyNGUzNzhkMzIuLjBiYmFhZTI4NzMwZWMyYzBkZjhjOTBiY2UwNjczMDU1NWIxY2ZhMDEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5jcHAKKysrIGIvU291cmNl
L1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmNwcApAQCAtMjA0LDggKzIwNCw4IEBAIFJlZjxTdHJp
bmdJbXBsPiBTdHJpbmdJbXBsOjpjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0aCwg
VUNoYXIqJiBkYXRhKQogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhclR5cGU+Ci1pbmxpbmUg
UmVmPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OnJlYWxsb2NhdGVJbnRlcm5hbChQYXNzUmVmUHRy
PFN0cmluZ0ltcGw+IG9yaWdpbmFsU3RyaW5nLCB1bnNpZ25lZCBsZW5ndGgsIENoYXJUeXBlKiYg
ZGF0YSkKLXsgICAKK2lubGluZSBSZWY8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6cmVhbGxvY2F0
ZUludGVybmFsKFJlZjxTdHJpbmdJbXBsPiYmIG9yaWdpbmFsU3RyaW5nLCB1bnNpZ25lZCBsZW5n
dGgsIENoYXJUeXBlKiYgZGF0YSkKK3sKICAgICBBU1NFUlQob3JpZ2luYWxTdHJpbmctPmhhc09u
ZVJlZigpKTsKICAgICBBU1NFUlQob3JpZ2luYWxTdHJpbmctPmJ1ZmZlck93bmVyc2hpcCgpID09
IEJ1ZmZlckludGVybmFsKTsKIApAQCAtMjE5LDIyICsyMTksMjIgQEAgaW5saW5lIFJlZjxTdHJp
bmdJbXBsPiBTdHJpbmdJbXBsOjpyZWFsbG9jYXRlSW50ZXJuYWwoUGFzc1JlZlB0cjxTdHJpbmdJ
bXBsPiBvcmkKICAgICAgICAgQ1JBU0goKTsKIAogICAgIG9yaWdpbmFsU3RyaW5nLT5+U3RyaW5n
SW1wbCgpOwotICAgIFN0cmluZ0ltcGwqIHN0cmluZyA9IHN0YXRpY19jYXN0PFN0cmluZ0ltcGwq
PihmYXN0UmVhbGxvYyhvcmlnaW5hbFN0cmluZy5sZWFrUmVmKCksIGFsbG9jYXRpb25TaXplPENo
YXJUeXBlPihsZW5ndGgpKSk7CisgICAgYXV0byogc3RyaW5nID0gc3RhdGljX2Nhc3Q8U3RyaW5n
SW1wbCo+KGZhc3RSZWFsbG9jKCZvcmlnaW5hbFN0cmluZy5sZWFrUmVmKCksIGFsbG9jYXRpb25T
aXplPENoYXJUeXBlPihsZW5ndGgpKSk7CiAKICAgICBkYXRhID0gc3RyaW5nLT50YWlsUG9pbnRl
cjxDaGFyVHlwZT4oKTsKICAgICByZXR1cm4gY29uc3RydWN0SW50ZXJuYWw8Q2hhclR5cGU+KHN0
cmluZywgbGVuZ3RoKTsKIH0KIAotUmVmPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OnJlYWxsb2Nh
dGUoUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBvcmlnaW5hbFN0cmluZywgdW5zaWduZWQgbGVuZ3Ro
LCBMQ2hhciomIGRhdGEpCitSZWY8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6cmVhbGxvY2F0ZShS
ZWY8U3RyaW5nSW1wbD4mJiBvcmlnaW5hbFN0cmluZywgdW5zaWduZWQgbGVuZ3RoLCBMQ2hhciom
IGRhdGEpCiB7CiAgICAgQVNTRVJUKG9yaWdpbmFsU3RyaW5nLT5pczhCaXQoKSk7Ci0gICAgcmV0
dXJuIHJlYWxsb2NhdGVJbnRlcm5hbChvcmlnaW5hbFN0cmluZywgbGVuZ3RoLCBkYXRhKTsKKyAg
ICByZXR1cm4gcmVhbGxvY2F0ZUludGVybmFsKFdURk1vdmUob3JpZ2luYWxTdHJpbmcpLCBsZW5n
dGgsIGRhdGEpOwogfQogCi1SZWY8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6cmVhbGxvY2F0ZShQ
YXNzUmVmUHRyPFN0cmluZ0ltcGw+IG9yaWdpbmFsU3RyaW5nLCB1bnNpZ25lZCBsZW5ndGgsIFVD
aGFyKiYgZGF0YSkKK1JlZjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpyZWFsbG9jYXRlKFJlZjxT
dHJpbmdJbXBsPiYmIG9yaWdpbmFsU3RyaW5nLCB1bnNpZ25lZCBsZW5ndGgsIFVDaGFyKiYgZGF0
YSkKIHsKICAgICBBU1NFUlQoIW9yaWdpbmFsU3RyaW5nLT5pczhCaXQoKSk7Ci0gICAgcmV0dXJu
IHJlYWxsb2NhdGVJbnRlcm5hbChvcmlnaW5hbFN0cmluZywgbGVuZ3RoLCBkYXRhKTsKKyAgICBy
ZXR1cm4gcmVhbGxvY2F0ZUludGVybmFsKFdURk1vdmUob3JpZ2luYWxTdHJpbmcpLCBsZW5ndGgs
IGRhdGEpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhclR5cGU+CkBAIC0yNjUsNyArMjY1
LDcgQEAgUmVmPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OmNyZWF0ZThCaXRJZlBvc3NpYmxlKGNv
bnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ24KICAgICAgICAgcmV0dXJuICplbXB0eSgpOwog
CiAgICAgTENoYXIqIGRhdGE7Ci0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IHN0cmluZyA9IGNyZWF0
ZVVuaW5pdGlhbGl6ZWRJbnRlcm5hbE5vbkVtcHR5KGxlbmd0aCwgZGF0YSk7CisgICAgYXV0byBz
dHJpbmcgPSBjcmVhdGVVbmluaXRpYWxpemVkSW50ZXJuYWxOb25FbXB0eShsZW5ndGgsIGRhdGEp
OwogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAgICBp
ZiAoY2hhcmFjdGVyc1tpXSAmIDB4ZmYwMCkKQEAgLTI3Myw3ICsyNzMsNyBAQCBSZWY8U3RyaW5n
SW1wbD4gU3RyaW5nSW1wbDo6Y3JlYXRlOEJpdElmUG9zc2libGUoY29uc3QgVUNoYXIqIGNoYXJh
Y3RlcnMsIHVuc2lnbgogICAgICAgICBkYXRhW2ldID0gc3RhdGljX2Nhc3Q8TENoYXI+KGNoYXJh
Y3RlcnNbaV0pOwogICAgIH0KIAotICAgIHJldHVybiBzdHJpbmcucmVsZWFzZU5vbk51bGwoKTsK
KyAgICByZXR1cm4gc3RyaW5nOwogfQogCiBSZWY8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6Y3Jl
YXRlOEJpdElmUG9zc2libGUoY29uc3QgVUNoYXIqIHN0cmluZykKQEAgLTI5MSwyNCArMjkxLDI0
IEBAIFJlZjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpjcmVhdGUoY29uc3QgTENoYXIqIHN0cmlu
ZykKICAgICByZXR1cm4gY3JlYXRlKHN0cmluZywgbGVuZ3RoKTsKIH0KIAotUmVmPFN5bWJvbElt
cGw+IFN0cmluZ0ltcGw6OmNyZWF0ZVN5bWJvbChQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IHJlcCkK
K1JlZjxTeW1ib2xJbXBsPiBTdHJpbmdJbXBsOjpjcmVhdGVTeW1ib2woU3RyaW5nSW1wbCYgcmVw
KQogewotICAgIFN0cmluZ0ltcGwqIG93bmVyUmVwID0gKHJlcC0+YnVmZmVyT3duZXJzaGlwKCkg
PT0gQnVmZmVyU3Vic3RyaW5nKSA/IHJlcC0+c3Vic3RyaW5nQnVmZmVyKCkgOiByZXAuZ2V0KCk7
CisgICAgYXV0byogb3duZXJSZXAgPSAocmVwLmJ1ZmZlck93bmVyc2hpcCgpID09IEJ1ZmZlclN1
YnN0cmluZykgPyByZXAuc3Vic3RyaW5nQnVmZmVyKCkgOiAmcmVwOwogCiAgICAgLy8gV2UgYWxs
b2NhdGUgYSBidWZmZXIgdGhhdCBjb250YWlucwogICAgIC8vIDEuIHRoZSBTdHJpbmdJbXBsIHN0
cnVjdAogICAgIC8vIDIuIHRoZSBwb2ludGVyIHRvIHRoZSBvd25lciBzdHJpbmcKICAgICAvLyAz
LiB0aGUgcG9pbnRlciB0byB0aGUgc3ltYm9sIHJlZ2lzdHJ5CiAgICAgLy8gNC4gdGhlIHBsYWNl
aG9sZGVyIGZvciBzeW1ib2wgYXdhcmUgaGFzaCB2YWx1ZSAoYWxsb2NhdGVkIHNpemUgaXMgcG9p
bnRlciBzaXplLCBidXQgb25seSA0IGJ5dGVzIGFyZSB1c2VkKQotICAgIFN0cmluZ0ltcGwqIHN0
cmluZ0ltcGwgPSBzdGF0aWNfY2FzdDxTdHJpbmdJbXBsKj4oZmFzdE1hbGxvYyhhbGxvY2F0aW9u
U2l6ZTxTdHJpbmdJbXBsKj4oMykpKTsKLSAgICBpZiAocmVwLT5pczhCaXQoKSkKLSAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKHN0YXRpY19jYXN0PFN5bWJvbEltcGwmPigqbmV3IChOb3ROdWxsLCBz
dHJpbmdJbXBsKSBTdHJpbmdJbXBsKENyZWF0ZVN5bWJvbCwgcmVwLT5tX2RhdGE4LCByZXAtPmxl
bmd0aCgpLCBvd25lclJlcCkpKTsKLSAgICByZXR1cm4gYWRvcHRSZWYoc3RhdGljX2Nhc3Q8U3lt
Ym9sSW1wbCY+KCpuZXcgKE5vdE51bGwsIHN0cmluZ0ltcGwpIFN0cmluZ0ltcGwoQ3JlYXRlU3lt
Ym9sLCByZXAtPm1fZGF0YTE2LCByZXAtPmxlbmd0aCgpLCBvd25lclJlcCkpKTsKKyAgICBhdXRv
KiBzdHJpbmdJbXBsID0gc3RhdGljX2Nhc3Q8U3RyaW5nSW1wbCo+KGZhc3RNYWxsb2MoYWxsb2Nh
dGlvblNpemU8U3RyaW5nSW1wbCo+KDMpKSk7CisgICAgaWYgKHJlcC5pczhCaXQoKSkKKyAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKHN0YXRpY19jYXN0PFN5bWJvbEltcGwmPigqbmV3IChOb3ROdWxs
LCBzdHJpbmdJbXBsKSBTdHJpbmdJbXBsKENyZWF0ZVN5bWJvbCwgcmVwLm1fZGF0YTgsIHJlcC5s
ZW5ndGgoKSwgUmVmPFN0cmluZ0ltcGw+KCpvd25lclJlcCkpKSk7CisgICAgcmV0dXJuIGFkb3B0
UmVmKHN0YXRpY19jYXN0PFN5bWJvbEltcGwmPigqbmV3IChOb3ROdWxsLCBzdHJpbmdJbXBsKSBT
dHJpbmdJbXBsKENyZWF0ZVN5bWJvbCwgcmVwLm1fZGF0YTE2LCByZXAubGVuZ3RoKCksIFJlZjxT
dHJpbmdJbXBsPigqb3duZXJSZXApKSkpOwogfQogCiBSZWY8U3ltYm9sSW1wbD4gU3RyaW5nSW1w
bDo6Y3JlYXRlTnVsbFN5bWJvbCgpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZVN5bWJvbChudWxsKCkp
OworICAgIHJldHVybiBjcmVhdGVTeW1ib2woKm51bGwoKSk7CiB9CiAKIGJvb2wgU3RyaW5nSW1w
bDo6Y29udGFpbnNPbmx5V2hpdGVzcGFjZSgpCkBAIC00MjcsMTkgKzQyNywxOSBAQCBTbG93UGF0
aDoKIAogICAgIC8vIERvIGEgc2xvd2VyIGltcGxlbWVudGF0aW9uIGZvciBjYXNlcyB0aGF0IGlu
Y2x1ZGUgbm9uLUFTQ0lJIGNoYXJhY3RlcnMuCiAgICAgVUNoYXIqIGRhdGExNjsKLSAgICBSZWZQ
dHI8U3RyaW5nSW1wbD4gbmV3SW1wbCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWRJbnRlcm5hbE5vbkVt
cHR5KG1fbGVuZ3RoLCBkYXRhMTYpOworICAgIGF1dG8gbmV3SW1wbCA9IGNyZWF0ZVVuaW5pdGlh
bGl6ZWRJbnRlcm5hbE5vbkVtcHR5KG1fbGVuZ3RoLCBkYXRhMTYpOwogCiAgICAgVUVycm9yQ29k
ZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7CiAgICAgaW50MzJfdCByZWFsTGVuZ3RoID0gdV9zdHJU
b0xvd2VyKGRhdGExNiwgbGVuZ3RoLCBtX2RhdGExNiwgbV9sZW5ndGgsICIiLCAmc3RhdHVzKTsK
ICAgICBpZiAoVV9TVUNDRVNTKHN0YXR1cykgJiYgcmVhbExlbmd0aCA9PSBsZW5ndGgpCi0gICAg
ICAgIHJldHVybiBuZXdJbXBsLnJlbGVhc2VOb25OdWxsKCk7CisgICAgICAgIHJldHVybiBuZXdJ
bXBsOwogCiAgICAgbmV3SW1wbCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQocmVhbExlbmd0aCwgZGF0
YTE2KTsKICAgICBzdGF0dXMgPSBVX1pFUk9fRVJST1I7CiAgICAgdV9zdHJUb0xvd2VyKGRhdGEx
NiwgcmVhbExlbmd0aCwgbV9kYXRhMTYsIG1fbGVuZ3RoLCAiIiwgJnN0YXR1cyk7CiAgICAgaWYg
KFVfRkFJTFVSRShzdGF0dXMpKQogICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgcmV0dXJuIG5l
d0ltcGwucmVsZWFzZU5vbk51bGwoKTsKKyAgICByZXR1cm4gbmV3SW1wbDsKIH0KIAogUmVmPFN0
cmluZ0ltcGw+IFN0cmluZ0ltcGw6OmNvbnZlcnRUb1VwcGVyY2FzZVdpdGhvdXRMb2NhbGUoKQpA
QCAtNDU1LDcgKzQ1NSw3IEBAIFJlZjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpjb252ZXJ0VG9V
cHBlcmNhc2VXaXRob3V0TG9jYWxlKCkKIAogICAgIGlmIChpczhCaXQoKSkgewogICAgICAgICBM
Q2hhciogZGF0YTg7Ci0gICAgICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBuZXdJbXBsID0gY3JlYXRl
VW5pbml0aWFsaXplZChtX2xlbmd0aCwgZGF0YTgpOworICAgICAgICBhdXRvIG5ld0ltcGwgPSBj
cmVhdGVVbmluaXRpYWxpemVkKG1fbGVuZ3RoLCBkYXRhOCk7CiAgICAgICAgIAogICAgICAgICAv
LyBEbyBhIGZhc3RlciBsb29wIGZvciB0aGUgY2FzZSB3aGVyZSBhbGwgdGhlIGNoYXJhY3RlcnMg
YXJlIEFTQ0lJLgogICAgICAgICB1bnNpZ25lZCBvcmVkID0gMDsKQEAgLTQ3Miw3ICs0NzIsNyBA
QCBSZWY8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6Y29udmVydFRvVXBwZXJjYXNlV2l0aG91dExv
Y2FsZSgpCiAjZW5kaWYKICAgICAgICAgfQogICAgICAgICBpZiAoIShvcmVkICYgfjB4N0YpKQot
ICAgICAgICAgICAgcmV0dXJuIG5ld0ltcGwucmVsZWFzZU5vbk51bGwoKTsKKyAgICAgICAgICAg
IHJldHVybiBuZXdJbXBsOwogCiAgICAgICAgIC8vIERvIGEgc2xvd2VyIGltcGxlbWVudGF0aW9u
IGZvciBjYXNlcyB0aGF0IGluY2x1ZGUgbm9uLUFTQ0lJIExhdGluLTEgY2hhcmFjdGVycy4KICAg
ICAgICAgaW50IG51bWJlclNoYXJwU0NoYXJhY3RlcnMgPSAwOwpAQCAtNDk0LDcgKzQ5NCw3IEBA
IFJlZjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpjb252ZXJ0VG9VcHBlcmNhc2VXaXRob3V0TG9j
YWxlKCkKICAgICAgICAgfQogCiAgICAgICAgIGlmICghbnVtYmVyU2hhcnBTQ2hhcmFjdGVycykK
LSAgICAgICAgICAgIHJldHVybiBuZXdJbXBsLnJlbGVhc2VOb25OdWxsKCk7CisgICAgICAgICAg
ICByZXR1cm4gbmV3SW1wbDsKIAogICAgICAgICAvLyBXZSBoYXZlIG51bWJlclNTQ2hhcmFjdGVy
cyBzaGFycC1zIGNoYXJhY3RlcnMsIGJ1dCBub25lIG9mIHRoZSBvdGhlciBzcGVjaWFsIGNoYXJh
Y3RlcnMuCiAgICAgICAgIG5ld0ltcGwgPSBjcmVhdGVVbmluaXRpYWxpemVkKG1fbGVuZ3RoICsg
bnVtYmVyU2hhcnBTQ2hhcmFjdGVycywgZGF0YTgpOwpAQCAtNTEyLDcgKzUxMiw3IEBAIFJlZjxT
dHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpjb252ZXJ0VG9VcHBlcmNhc2VXaXRob3V0TG9jYWxlKCkK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIHJldHVybiBuZXdJbXBsLnJlbGVh
c2VOb25OdWxsKCk7CisgICAgICAgIHJldHVybiBuZXdJbXBsOwogICAgIH0KIAogdXBjb252ZXJ0
OgpAQCAtNTIwLDcgKzUyMCw3IEBAIHVwY29udmVydDoKICAgICBjb25zdCBVQ2hhciogc291cmNl
MTYgPSB1cGNvbnZlcnRlZENoYXJhY3RlcnM7CiAKICAgICBVQ2hhciogZGF0YTE2OwotICAgIFJl
ZlB0cjxTdHJpbmdJbXBsPiBuZXdJbXBsID0gY3JlYXRlVW5pbml0aWFsaXplZChtX2xlbmd0aCwg
ZGF0YTE2KTsKKyAgICBhdXRvIG5ld0ltcGwgPSBjcmVhdGVVbmluaXRpYWxpemVkKG1fbGVuZ3Ro
LCBkYXRhMTYpOwogICAgIAogICAgIC8vIERvIGEgZmFzdGVyIGxvb3AgZm9yIHRoZSBjYXNlIHdo
ZXJlIGFsbCB0aGUgY2hhcmFjdGVycyBhcmUgQVNDSUkuCiAgICAgdW5zaWduZWQgb3JlZCA9IDA7
CkBAIC01MzAsMTkgKzUzMCwxOSBAQCB1cGNvbnZlcnQ6CiAgICAgICAgIGRhdGExNltpXSA9IHRv
QVNDSUlVcHBlcihjKTsKICAgICB9CiAgICAgaWYgKCEob3JlZCAmIH4weDdGKSkKLSAgICAgICAg
cmV0dXJuIG5ld0ltcGwucmVsZWFzZU5vbk51bGwoKTsKKyAgICAgICAgcmV0dXJuIG5ld0ltcGw7
CiAKICAgICAvLyBEbyBhIHNsb3dlciBpbXBsZW1lbnRhdGlvbiBmb3IgY2FzZXMgdGhhdCBpbmNs
dWRlIG5vbi1BU0NJSSBjaGFyYWN0ZXJzLgogICAgIFVFcnJvckNvZGUgc3RhdHVzID0gVV9aRVJP
X0VSUk9SOwogICAgIGludDMyX3QgcmVhbExlbmd0aCA9IHVfc3RyVG9VcHBlcihkYXRhMTYsIGxl
bmd0aCwgc291cmNlMTYsIG1fbGVuZ3RoLCAiIiwgJnN0YXR1cyk7CiAgICAgaWYgKFVfU1VDQ0VT
UyhzdGF0dXMpICYmIHJlYWxMZW5ndGggPT0gbGVuZ3RoKQotICAgICAgICByZXR1cm4gbmV3SW1w
bC5yZWxlYXNlTm9uTnVsbCgpOworICAgICAgICByZXR1cm4gbmV3SW1wbDsKICAgICBuZXdJbXBs
ID0gY3JlYXRlVW5pbml0aWFsaXplZChyZWFsTGVuZ3RoLCBkYXRhMTYpOwogICAgIHN0YXR1cyA9
IFVfWkVST19FUlJPUjsKICAgICB1X3N0clRvVXBwZXIoZGF0YTE2LCByZWFsTGVuZ3RoLCBzb3Vy
Y2UxNiwgbV9sZW5ndGgsICIiLCAmc3RhdHVzKTsKICAgICBpZiAoVV9GQUlMVVJFKHN0YXR1cykp
CiAgICAgICAgIHJldHVybiAqdGhpczsKLSAgICByZXR1cm4gbmV3SW1wbC5yZWxlYXNlTm9uTnVs
bCgpOworICAgIHJldHVybiBuZXdJbXBsOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgbmVlZHNU
dXJraXNoQ2FzaW5nUnVsZXMoY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbGVJZGVudGlmaWVyKQpA
QCAtNTc4LDE3ICs1NzgsMTcgQEAgUmVmPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OmNvbnZlcnRU
b0xvd2VyY2FzZVdpdGhMb2NhbGUoY29uc3QgQXRvbWljU3RyaW5nJiBsb2MKICAgICBhdXRvIHVw
Y29udmVydGVkQ2hhcmFjdGVycyA9IFN0cmluZ1ZpZXcoKnRoaXMpLnVwY29udmVydGVkQ2hhcmFj
dGVycygpOwogICAgIGNvbnN0IFVDaGFyKiBzb3VyY2UxNiA9IHVwY29udmVydGVkQ2hhcmFjdGVy
czsKICAgICBVQ2hhciogZGF0YTE2OwotICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBuZXdTdHJpbmcg
PSBjcmVhdGVVbmluaXRpYWxpemVkKGxlbmd0aCwgZGF0YTE2KTsKKyAgICBhdXRvIG5ld1N0cmlu
ZyA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBkYXRhMTYpOwogICAgIFVFcnJvckNvZGUg
c3RhdHVzID0gVV9aRVJPX0VSUk9SOwogICAgIGludCByZWFsTGVuZ3RoID0gdV9zdHJUb0xvd2Vy
KGRhdGExNiwgbGVuZ3RoLCBzb3VyY2UxNiwgbGVuZ3RoLCAidHIiLCAmc3RhdHVzKTsKICAgICBp
ZiAoVV9TVUNDRVNTKHN0YXR1cykgJiYgcmVhbExlbmd0aCA9PSBsZW5ndGgpCi0gICAgICAgIHJl
dHVybiBuZXdTdHJpbmcucmVsZWFzZU5vbk51bGwoKTsKKyAgICAgICAgcmV0dXJuIG5ld1N0cmlu
ZzsKICAgICBuZXdTdHJpbmcgPSBjcmVhdGVVbmluaXRpYWxpemVkKHJlYWxMZW5ndGgsIGRhdGEx
Nik7CiAgICAgc3RhdHVzID0gVV9aRVJPX0VSUk9SOwogICAgIHVfc3RyVG9Mb3dlcihkYXRhMTYs
IHJlYWxMZW5ndGgsIHNvdXJjZTE2LCBsZW5ndGgsICJ0ciIsICZzdGF0dXMpOwogICAgIGlmIChV
X0ZBSUxVUkUoc3RhdHVzKSkKICAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIHJldHVybiBuZXdT
dHJpbmcucmVsZWFzZU5vbk51bGwoKTsKKyAgICByZXR1cm4gbmV3U3RyaW5nOwogfQogCiBSZWY8
U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6Y29udmVydFRvVXBwZXJjYXNlV2l0aExvY2FsZShjb25z
dCBBdG9taWNTdHJpbmcmIGxvY2FsZUlkZW50aWZpZXIpCkBAIC02MDksMTcgKzYwOSwxNyBAQCBS
ZWY8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6Y29udmVydFRvVXBwZXJjYXNlV2l0aExvY2FsZShj
b25zdCBBdG9taWNTdHJpbmcmIGxvYwogICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0g
U3RyaW5nVmlldygqdGhpcykudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7CiAgICAgY29uc3QgVUNo
YXIqIHNvdXJjZTE2ID0gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzOwogICAgIFVDaGFyKiBkYXRhMTY7
Ci0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IG5ld1N0cmluZyA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQo
bGVuZ3RoLCBkYXRhMTYpOworICAgIGF1dG8gbmV3U3RyaW5nID0gY3JlYXRlVW5pbml0aWFsaXpl
ZChsZW5ndGgsIGRhdGExNik7CiAgICAgVUVycm9yQ29kZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7
CiAgICAgaW50IHJlYWxMZW5ndGggPSB1X3N0clRvVXBwZXIoZGF0YTE2LCBsZW5ndGgsIHNvdXJj
ZTE2LCBsZW5ndGgsICJ0ciIsICZzdGF0dXMpOwogICAgIGlmIChVX1NVQ0NFU1Moc3RhdHVzKSAm
JiByZWFsTGVuZ3RoID09IGxlbmd0aCkKLSAgICAgICAgcmV0dXJuIG5ld1N0cmluZy5yZWxlYXNl
Tm9uTnVsbCgpOworICAgICAgICByZXR1cm4gbmV3U3RyaW5nOwogICAgIG5ld1N0cmluZyA9IGNy
ZWF0ZVVuaW5pdGlhbGl6ZWQocmVhbExlbmd0aCwgZGF0YTE2KTsKICAgICBzdGF0dXMgPSBVX1pF
Uk9fRVJST1I7CiAgICAgdV9zdHJUb1VwcGVyKGRhdGExNiwgcmVhbExlbmd0aCwgc291cmNlMTYs
IGxlbmd0aCwgInRyIiwgJnN0YXR1cyk7CiAgICAgaWYgKFVfRkFJTFVSRShzdGF0dXMpKQogICAg
ICAgICByZXR1cm4gKnRoaXM7Ci0gICAgcmV0dXJuIG5ld1N0cmluZy5yZWxlYXNlTm9uTnVsbCgp
OworICAgIHJldHVybiBuZXdTdHJpbmc7CiB9CiAKIFJlZjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBs
Ojpmb2xkQ2FzZSgpCkBAIC03MjEsNyArNzIxLDcgQEAgQUxXQVlTX0lOTElORSBSZWY8U3RyaW5n
SW1wbD4gU3RyaW5nSW1wbDo6Y29udmVydEFTQ0lJQ2FzZShTdHJpbmdJbXBsJiBpbXBsLCBjb24K
IAogU2xvd1BhdGg6CiAgICAgQ2hhcmFjdGVyVHlwZSogbmV3RGF0YTsKLSAgICBSZWY8U3RyaW5n
SW1wbD4gbmV3SW1wbCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWRJbnRlcm5hbE5vbkVtcHR5KGxlbmd0
aCwgbmV3RGF0YSk7CisgICAgYXV0byBuZXdJbXBsID0gY3JlYXRlVW5pbml0aWFsaXplZEludGVy
bmFsTm9uRW1wdHkobGVuZ3RoLCBuZXdEYXRhKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgZmFpbGluZ0luZGV4OyArK2kpCiAgICAgICAgIG5ld0RhdGFbaV0gPSBkYXRhW2ldOwogICAg
IGZvciAodW5zaWduZWQgaSA9IGZhaWxpbmdJbmRleDsgaSA8IGxlbmd0aDsgKytpKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmggYi9Tb3VyY2UvV1RGL3d0Zi90
ZXh0L1N0cmluZ0ltcGwuaAppbmRleCA0YTY5ZGRjOTRjZWI5MTEzYmM0YzZlNWNiMDIzN2Q5MGQ0
OGI3Y2E1Li40YmNmMGJkNjE0NDZmZDJiMWExNWRiZWE5MTE0OTczMjU0Yzc2MmMzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuaAorKysgYi9Tb3VyY2UvV1RGL3d0
Zi90ZXh0L1N0cmluZ0ltcGwuaApAQCAtMjY1LDcgKzI2NSw3IEBAIHByaXZhdGU6CiAgICAgfQog
CiAgICAgLy8gVXNlZCB0byBjcmVhdGUgbmV3IHN0cmluZ3MgdGhhdCBhcmUgYSBzdWJzdHJpbmcg
b2YgYW4gZXhpc3RpbmcgOC1iaXQgU3RyaW5nSW1wbCAoQnVmZmVyU3Vic3RyaW5nKQotICAgIFN0
cmluZ0ltcGwoY29uc3QgTENoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgUGFzc1Jl
ZlB0cjxTdHJpbmdJbXBsPiBiYXNlKQorICAgIFN0cmluZ0ltcGwoY29uc3QgTENoYXIqIGNoYXJh
Y3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgUmVmPFN0cmluZ0ltcGw+JiYgYmFzZSkKICAgICAgICAg
OiBtX3JlZkNvdW50KHNfcmVmQ291bnRJbmNyZW1lbnQpCiAgICAgICAgICwgbV9sZW5ndGgobGVu
Z3RoKQogICAgICAgICAsIG1fZGF0YTgoY2hhcmFjdGVycykKQEAgLTI3NiwxMyArMjc2LDEzIEBA
IHByaXZhdGU6CiAgICAgICAgIEFTU0VSVChtX2xlbmd0aCk7CiAgICAgICAgIEFTU0VSVChiYXNl
LT5idWZmZXJPd25lcnNoaXAoKSAhPSBCdWZmZXJTdWJzdHJpbmcpOwogCi0gICAgICAgIHN1YnN0
cmluZ0J1ZmZlcigpID0gYmFzZS5sZWFrUmVmKCk7CisgICAgICAgIHN1YnN0cmluZ0J1ZmZlcigp
ID0gJmJhc2UubGVha1JlZigpOwogCiAgICAgICAgIFNUUklOR19TVEFUU19BRERfOEJJVF9TVFJJ
TkcyKG1fbGVuZ3RoLCB0cnVlKTsKICAgICB9CiAKICAgICAvLyBVc2VkIHRvIGNyZWF0ZSBuZXcg
c3RyaW5ncyB0aGF0IGFyZSBhIHN1YnN0cmluZyBvZiBhbiBleGlzdGluZyAxNi1iaXQgU3RyaW5n
SW1wbCAoQnVmZmVyU3Vic3RyaW5nKQotICAgIFN0cmluZ0ltcGwoY29uc3QgVUNoYXIqIGNoYXJh
Y3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBiYXNlKQorICAg
IFN0cmluZ0ltcGwoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgUmVm
PFN0cmluZ0ltcGw+JiYgYmFzZSkKICAgICAgICAgOiBtX3JlZkNvdW50KHNfcmVmQ291bnRJbmNy
ZW1lbnQpCiAgICAgICAgICwgbV9sZW5ndGgobGVuZ3RoKQogICAgICAgICAsIG1fZGF0YTE2KGNo
YXJhY3RlcnMpCkBAIC0yOTMsMTQgKzI5MywxNCBAQCBwcml2YXRlOgogICAgICAgICBBU1NFUlQo
bV9sZW5ndGgpOwogICAgICAgICBBU1NFUlQoYmFzZS0+YnVmZmVyT3duZXJzaGlwKCkgIT0gQnVm
ZmVyU3Vic3RyaW5nKTsKIAotICAgICAgICBzdWJzdHJpbmdCdWZmZXIoKSA9IGJhc2UubGVha1Jl
ZigpOworICAgICAgICBzdWJzdHJpbmdCdWZmZXIoKSA9ICZiYXNlLmxlYWtSZWYoKTsKIAogICAg
ICAgICBTVFJJTkdfU1RBVFNfQUREXzE2QklUX1NUUklORzIobV9sZW5ndGgsIHRydWUpOwogICAg
IH0KIAogICAgIGVudW0gQ3JlYXRlU3ltYm9sVGFnIHsgQ3JlYXRlU3ltYm9sIH07CiAgICAgLy8g
VXNlZCB0byBjcmVhdGUgbmV3IHN5bWJvbCBzdHJpbmdzIHRoYXQgaG9sZHMgZXhpc3RpbmcgOC1i
aXQgW1tEZXNjcmlwdGlvbl1dIHN0cmluZyBhcyBhIHN1YnN0cmluZyBidWZmZXIgKEJ1ZmZlclN1
YnN0cmluZykuCi0gICAgU3RyaW5nSW1wbChDcmVhdGVTeW1ib2xUYWcsIGNvbnN0IExDaGFyKiBj
aGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gYmFzZSkK
KyAgICBTdHJpbmdJbXBsKENyZWF0ZVN5bWJvbFRhZywgY29uc3QgTENoYXIqIGNoYXJhY3RlcnMs
IHVuc2lnbmVkIGxlbmd0aCwgUmVmPFN0cmluZ0ltcGw+JiYgYmFzZSkKICAgICAgICAgOiBtX3Jl
ZkNvdW50KHNfcmVmQ291bnRJbmNyZW1lbnQpCiAgICAgICAgICwgbV9sZW5ndGgobGVuZ3RoKQog
ICAgICAgICAsIG1fZGF0YTgoY2hhcmFjdGVycykKQEAgLTMxMCw3ICszMTAsNyBAQCBwcml2YXRl
OgogICAgICAgICBBU1NFUlQobV9kYXRhOCk7CiAgICAgICAgIEFTU0VSVChiYXNlLT5idWZmZXJP
d25lcnNoaXAoKSAhPSBCdWZmZXJTdWJzdHJpbmcpOwogCi0gICAgICAgIHN1YnN0cmluZ0J1ZmZl
cigpID0gYmFzZS5sZWFrUmVmKCk7CisgICAgICAgIHN1YnN0cmluZ0J1ZmZlcigpID0gJmJhc2Uu
bGVha1JlZigpOwogICAgICAgICBzeW1ib2xSZWdpc3RyeSgpID0gbnVsbHB0cjsKICAgICAgICAg
aGFzaEZvclN5bWJvbCgpID0gbmV4dEhhc2hGb3JTeW1ib2woKTsKIApAQCAtMzE4LDcgKzMxOCw3
IEBAIHByaXZhdGU6CiAgICAgfQogCiAgICAgLy8gVXNlZCB0byBjcmVhdGUgbmV3IHN5bWJvbCBz
dHJpbmdzIHRoYXQgaG9sZHMgZXhpc3RpbmcgMTYtYml0IFtbRGVzY3JpcHRpb25dXSBzdHJpbmcg
YXMgYSBzdWJzdHJpbmcgYnVmZmVyIChCdWZmZXJTdWJzdHJpbmcpLgotICAgIFN0cmluZ0ltcGwo
Q3JlYXRlU3ltYm9sVGFnLCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3Ro
LCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGJhc2UpCisgICAgU3RyaW5nSW1wbChDcmVhdGVTeW1i
b2xUYWcsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIFJlZjxTdHJp
bmdJbXBsPiYmIGJhc2UpCiAgICAgICAgIDogbV9yZWZDb3VudChzX3JlZkNvdW50SW5jcmVtZW50
KQogICAgICAgICAsIG1fbGVuZ3RoKGxlbmd0aCkKICAgICAgICAgLCBtX2RhdGExNihjaGFyYWN0
ZXJzKQpAQCAtMzI4LDcgKzMyOCw3IEBAIHByaXZhdGU6CiAgICAgICAgIEFTU0VSVChtX2RhdGEx
Nik7CiAgICAgICAgIEFTU0VSVChiYXNlLT5idWZmZXJPd25lcnNoaXAoKSAhPSBCdWZmZXJTdWJz
dHJpbmcpOwogCi0gICAgICAgIHN1YnN0cmluZ0J1ZmZlcigpID0gYmFzZS5sZWFrUmVmKCk7Cisg
ICAgICAgIHN1YnN0cmluZ0J1ZmZlcigpID0gJmJhc2UubGVha1JlZigpOwogICAgICAgICBzeW1i
b2xSZWdpc3RyeSgpID0gbnVsbHB0cjsKICAgICAgICAgaGFzaEZvclN5bWJvbCgpID0gbmV4dEhh
c2hGb3JTeW1ib2woKTsKIApAQCAtMzUyLDIxICszNTIsMjAgQEAgcHVibGljOgogICAgIFdURl9F
WFBPUlRfU1RSSU5HX0FQSSBzdGF0aWMgUmVmPFN0cmluZ0ltcGw+IGNyZWF0ZShjb25zdCBMQ2hh
ciopOwogICAgIEFMV0FZU19JTkxJTkUgc3RhdGljIFJlZjxTdHJpbmdJbXBsPiBjcmVhdGUoY29u
c3QgY2hhciogcykgeyByZXR1cm4gY3JlYXRlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIq
PihzKSk7IH0KIAotICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5FIFJlZjxTdHJpbmdJbXBsPiBjcmVh
dGVTdWJzdHJpbmdTaGFyaW5nSW1wbChQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IHJlcCwgdW5zaWdu
ZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCisgICAgc3RhdGljIEFMV0FZU19JTkxJTkUgUmVm
PFN0cmluZ0ltcGw+IGNyZWF0ZVN1YnN0cmluZ1NoYXJpbmdJbXBsKFN0cmluZ0ltcGwmIHJlcCwg
dW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCiAgICAgewotICAgICAgICBBU1NFUlQo
cmVwKTsKLSAgICAgICAgQVNTRVJUKGxlbmd0aCA8PSByZXAtPmxlbmd0aCgpKTsKKyAgICAgICAg
QVNTRVJUKGxlbmd0aCA8PSByZXAubGVuZ3RoKCkpOwogCiAgICAgICAgIGlmICghbGVuZ3RoKQog
ICAgICAgICAgICAgcmV0dXJuICplbXB0eSgpOwogCi0gICAgICAgIFN0cmluZ0ltcGwqIG93bmVy
UmVwID0gKHJlcC0+YnVmZmVyT3duZXJzaGlwKCkgPT0gQnVmZmVyU3Vic3RyaW5nKSA/IHJlcC0+
c3Vic3RyaW5nQnVmZmVyKCkgOiByZXAuZ2V0KCk7CisgICAgICAgIGF1dG8qIG93bmVyUmVwID0g
KChyZXAuYnVmZmVyT3duZXJzaGlwKCkgPT0gQnVmZmVyU3Vic3RyaW5nKSA/IHJlcC5zdWJzdHJp
bmdCdWZmZXIoKSA6ICZyZXApOwogCiAgICAgICAgIC8vIFdlIGFsbG9jYXRlIGEgYnVmZmVyIHRo
YXQgY29udGFpbnMgYm90aCB0aGUgU3RyaW5nSW1wbCBzdHJ1Y3QgYXMgd2VsbCBhcyB0aGUgcG9p
bnRlciB0byB0aGUgb3duZXIgc3RyaW5nLgotICAgICAgICBTdHJpbmdJbXBsKiBzdHJpbmdJbXBs
ID0gc3RhdGljX2Nhc3Q8U3RyaW5nSW1wbCo+KGZhc3RNYWxsb2MoYWxsb2NhdGlvblNpemU8U3Ry
aW5nSW1wbCo+KDEpKSk7Ci0gICAgICAgIGlmIChyZXAtPmlzOEJpdCgpKQotICAgICAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgKE5vdE51bGwsIHN0cmluZ0ltcGwpIFN0cmluZ0ltcGwocmVw
LT5tX2RhdGE4ICsgb2Zmc2V0LCBsZW5ndGgsIG93bmVyUmVwKSk7Ci0gICAgICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IChOb3ROdWxsLCBzdHJpbmdJbXBsKSBTdHJpbmdJbXBsKHJlcC0+bV9kYXRh
MTYgKyBvZmZzZXQsIGxlbmd0aCwgb3duZXJSZXApKTsKKyAgICAgICAgYXV0byogc3RyaW5nSW1w
bCA9IHN0YXRpY19jYXN0PFN0cmluZ0ltcGwqPihmYXN0TWFsbG9jKGFsbG9jYXRpb25TaXplPFN0
cmluZ0ltcGwqPigxKSkpOworICAgICAgICBpZiAocmVwLmlzOEJpdCgpKQorICAgICAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgKE5vdE51bGwsIHN0cmluZ0ltcGwpIFN0cmluZ0ltcGwocmVw
Lm1fZGF0YTggKyBvZmZzZXQsIGxlbmd0aCwgUmVmPFN0cmluZ0ltcGw+KCpvd25lclJlcCkpKTsK
KyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgKE5vdE51bGwsIHN0cmluZ0ltcGwpIFN0cmlu
Z0ltcGwocmVwLm1fZGF0YTE2ICsgb2Zmc2V0LCBsZW5ndGgsIFJlZjxTdHJpbmdJbXBsPigqb3du
ZXJSZXApKSk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dW5zaWduZWQgY2hhcmFjdGVyc0NvdW50
PgpAQCAtMzg3LDcgKzM4Niw3IEBAIHB1YmxpYzoKIAogICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQ
SSBzdGF0aWMgUmVmPFN0cmluZ0ltcGw+IGNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVu
Z3RoLCBMQ2hhciomIGRhdGEpOwogICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBzdGF0aWMgUmVm
PFN0cmluZ0ltcGw+IGNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoLCBVQ2hhciom
IGRhdGEpOwotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdGF0aWMgQUxXQVlTX0lOTElORSBQ
YXNzUmVmUHRyPFN0cmluZ0ltcGw+IHRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVu
Z3RoLCBUKiYgb3V0cHV0KQorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdGF0aWMgQUxXQVlT
X0lOTElORSBSZWZQdHI8U3RyaW5nSW1wbD4gdHJ5Q3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25l
ZCBsZW5ndGgsIFQqJiBvdXRwdXQpCiAgICAgewogICAgICAgICBpZiAoIWxlbmd0aCkgewogICAg
ICAgICAgICAgb3V0cHV0ID0gMDsKQEAgLTM5NiwxMiArMzk1LDEyIEBAIHB1YmxpYzoKIAogICAg
ICAgICBpZiAobGVuZ3RoID4gKChzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkg
LSBzaXplb2YoU3RyaW5nSW1wbCkpIC8gc2l6ZW9mKFQpKSkgewogICAgICAgICAgICAgb3V0cHV0
ID0gMDsKLSAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAgICAgICAgIH0KICAgICAgICAgU3RyaW5nSW1wbCogcmVzdWx0SW1wbDsKICAgICAgICAgaWYg
KCF0cnlGYXN0TWFsbG9jKGFsbG9jYXRpb25TaXplPFQ+KGxlbmd0aCkpLmdldFZhbHVlKHJlc3Vs
dEltcGwpKSB7CiAgICAgICAgICAgICBvdXRwdXQgPSAwOwotICAgICAgICAgICAgcmV0dXJuIDA7
CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgfQogICAgICAgICBvdXRwdXQg
PSByZXN1bHRJbXBsLT50YWlsUG9pbnRlcjxUPigpOwogCkBAIC00MDksMTMgKzQwOCwxMyBAQCBw
dWJsaWM6CiAgICAgfQogCiAgICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIHN0YXRpYyBSZWY8U3lt
Ym9sSW1wbD4gY3JlYXRlTnVsbFN5bWJvbCgpOwotICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBz
dGF0aWMgUmVmPFN5bWJvbEltcGw+IGNyZWF0ZVN5bWJvbChQYXNzUmVmUHRyPFN0cmluZ0ltcGw+
IHJlcCk7CisgICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIHN0YXRpYyBSZWY8U3ltYm9sSW1wbD4g
Y3JlYXRlU3ltYm9sKFN0cmluZ0ltcGwmIHJlcCk7CiAKLSAgICAvLyBSZWFsbG9jYXRlIHRoZSBT
dHJpbmdJbXBsLiBUaGUgb3JpZ2luYWxTdHJpbmcgbXVzdCBiZSBvbmx5IG93bmVkIGJ5IHRoZSBQ
YXNzUmVmUHRyLAorICAgIC8vIFJlYWxsb2NhdGUgdGhlIFN0cmluZ0ltcGwuIFRoZSBvcmlnaW5h
bFN0cmluZyBtdXN0IGJlIG9ubHkgb3duZWQgYnkgdGhlIFJlZlB0ciwKICAgICAvLyBhbmQgdGhl
IGJ1ZmZlciBvd25lcnNoaXAgbXVzdCBiZSBCdWZmZXJJbnRlcm5hbC4gSnVzdCBsaWtlIHRoZSBp
bnB1dCBwb2ludGVyIG9mIHJlYWxsb2MoKSwKICAgICAvLyB0aGUgb3JpZ2luYWxTdHJpbmcgY2Fu
J3QgYmUgdXNlZCBhZnRlciB0aGlzIGZ1bmN0aW9uLgotICAgIHN0YXRpYyBSZWY8U3RyaW5nSW1w
bD4gcmVhbGxvY2F0ZShQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IG9yaWdpbmFsU3RyaW5nLCB1bnNp
Z25lZCBsZW5ndGgsIExDaGFyKiYgZGF0YSk7Ci0gICAgc3RhdGljIFJlZjxTdHJpbmdJbXBsPiBy
ZWFsbG9jYXRlKFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gb3JpZ2luYWxTdHJpbmcsIHVuc2lnbmVk
IGxlbmd0aCwgVUNoYXIqJiBkYXRhKTsKKyAgICBzdGF0aWMgUmVmPFN0cmluZ0ltcGw+IHJlYWxs
b2NhdGUoUmVmPFN0cmluZ0ltcGw+JiYgb3JpZ2luYWxTdHJpbmcsIHVuc2lnbmVkIGxlbmd0aCwg
TENoYXIqJiBkYXRhKTsKKyAgICBzdGF0aWMgUmVmPFN0cmluZ0ltcGw+IHJlYWxsb2NhdGUoUmVm
PFN0cmluZ0ltcGw+JiYgb3JpZ2luYWxTdHJpbmcsIHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIqJiBk
YXRhKTsKIAogICAgIHN0YXRpYyB1bnNpZ25lZCBmbGFnc09mZnNldCgpIHsgcmV0dXJuIE9CSkVD
VF9PRkZTRVRPRihTdHJpbmdJbXBsLCBtX2hhc2hBbmRGbGFncyk7IH0KICAgICBzdGF0aWMgdW5z
aWduZWQgZmxhZ0lzOEJpdCgpIHsgcmV0dXJuIHNfaGFzaEZsYWc4Qml0QnVmZmVyOyB9CkBAIC03
NjUsNyArNzY0LDcgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQoYnVmZmVyT3duZXJzaGlwKCkg
PT0gQnVmZmVyU3Vic3RyaW5nKTsKICAgICAgICAgQVNTRVJUKHN1YnN0cmluZ0J1ZmZlcigpKTsK
ICAgICAgICAgQVNTRVJUKCFzdWJzdHJpbmdCdWZmZXIoKS0+aXNTeW1ib2woKSk7Ci0gICAgICAg
IHJldHVybiBjcmVhdGVTdWJzdHJpbmdTaGFyaW5nSW1wbCh0aGlzLCAwLCBsZW5ndGgoKSk7Cisg
ICAgICAgIHJldHVybiBjcmVhdGVTdWJzdHJpbmdTaGFyaW5nSW1wbCgqdGhpcywgMCwgbGVuZ3Ro
KCkpOwogICAgIH0KIAogICAgIFN5bWJvbFJlZ2lzdHJ5KiBjb25zdCYgc3ltYm9sUmVnaXN0cnko
KSBjb25zdApAQCAtODYwLDcgKzg1OSw3IEBAIHByaXZhdGU6CiAgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIENoYXJUeXBlPiBzdGF0aWMgUmVmPFN0cmluZ0ltcGw+IGNvbnN0cnVjdEludGVybmFsKFN0
cmluZ0ltcGwqLCB1bnNpZ25lZCk7CiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJUeXBlPiBz
dGF0aWMgUmVmPFN0cmluZ0ltcGw+IGNyZWF0ZVVuaW5pdGlhbGl6ZWRJbnRlcm5hbCh1bnNpZ25l
ZCwgQ2hhclR5cGUqJik7CiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJUeXBlPiBzdGF0aWMg
UmVmPFN0cmluZ0ltcGw+IGNyZWF0ZVVuaW5pdGlhbGl6ZWRJbnRlcm5hbE5vbkVtcHR5KHVuc2ln
bmVkLCBDaGFyVHlwZSomKTsKLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhclR5cGU+IHN0YXRp
YyBSZWY8U3RyaW5nSW1wbD4gcmVhbGxvY2F0ZUludGVybmFsKFBhc3NSZWZQdHI8U3RyaW5nSW1w
bD4sIHVuc2lnbmVkLCBDaGFyVHlwZSomKTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhclR5
cGU+IHN0YXRpYyBSZWY8U3RyaW5nSW1wbD4gcmVhbGxvY2F0ZUludGVybmFsKFJlZjxTdHJpbmdJ
bXBsPiYmLCB1bnNpZ25lZCwgQ2hhclR5cGUqJik7CiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENo
YXJUeXBlPiBzdGF0aWMgUmVmPFN0cmluZ0ltcGw+IGNyZWF0ZUludGVybmFsKGNvbnN0IENoYXJU
eXBlKiwgdW5zaWduZWQpOwogICAgIFdURl9FWFBPUlRfUFJJVkFURSBORVZFUl9JTkxJTkUgdW5z
aWduZWQgaGFzaFNsb3dDYXNlKCkgY29uc3Q7CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRp
YyB1bnNpZ25lZCBuZXh0SGFzaEZvclN5bWJvbCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93
dGYvdGV4dC9TeW1ib2xSZWdpc3RyeS5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N5bWJvbFJl
Z2lzdHJ5LmNwcAppbmRleCBhYWQxMzVmM2Y2OWJhYzY2M2Q4NjdjNzY0ODRjYWRlM2QxZWM0MTVi
Li42NGVhMWNhNmM1ODFlOTQwNGQ0YmE3YTljMGI2OTE5YmFmYzgyNGUyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV1RGL3d0Zi90ZXh0L1N5bWJvbFJlZ2lzdHJ5LmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0
Zi90ZXh0L1N5bWJvbFJlZ2lzdHJ5LmNwcApAQCAtNDAsNyArNDAsNyBAQCBSZWY8U3ltYm9sSW1w
bD4gU3ltYm9sUmVnaXN0cnk6OnN5bWJvbEZvcktleShjb25zdCBTdHJpbmcmIHJlcCkKICAgICBp
ZiAoIWFkZFJlc3VsdC5pc05ld0VudHJ5KQogICAgICAgICByZXR1cm4gKnN0YXRpY19jYXN0PFN5
bWJvbEltcGwqPihhZGRSZXN1bHQuaXRlcmF0b3ItPmltcGwoKSk7CiAKLSAgICBSZWY8U3ltYm9s
SW1wbD4gc3ltYm9sID0gU3RyaW5nSW1wbDo6Y3JlYXRlU3ltYm9sKHJlcC5pbXBsKCkpOworICAg
IGF1dG8gc3ltYm9sID0gU3RyaW5nSW1wbDo6Y3JlYXRlU3ltYm9sKCpyZXAuaW1wbCgpKTsKICAg
ICBzeW1ib2wtPnN5bWJvbFJlZ2lzdHJ5KCkgPSB0aGlzOwogICAgICphZGRSZXN1bHQuaXRlcmF0
b3IgPSBTeW1ib2xSZWdpc3RyeUtleSgmc3ltYm9sLmdldCgpKTsKICAgICByZXR1cm4gc3ltYm9s
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcuY3BwIGIvU291cmNl
L1dURi93dGYvdGV4dC9XVEZTdHJpbmcuY3BwCmluZGV4IGYzMWFhYzc2YzI0ODgwNGE3M2U1ZjQw
Mzk3OWQ5NGYzYjg5MGEzN2UuLmRjYjNhMjU5NTZhM2VkNTRiMDM3NTA2MTMyYmVjZDUwMDY5NTUz
ODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmNwcAorKysgYi9T
b3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5jcHAKQEAgLTMzMiw3ICszMzIsNyBAQCBTdHJp
bmcgU3RyaW5nOjpzdWJzdHJpbmdTaGFyaW5nSW1wbCh1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVk
IGxlbmd0aCkgY29uc3QKIAogICAgIGlmICghb2Zmc2V0ICYmIGxlbmd0aCA9PSBzdHJpbmdMZW5n
dGgpCiAgICAgICAgIHJldHVybiAqdGhpczsKLSAgICByZXR1cm4gU3RyaW5nKFN0cmluZ0ltcGw6
OmNyZWF0ZVN1YnN0cmluZ1NoYXJpbmdJbXBsKG1faW1wbCwgb2Zmc2V0LCBsZW5ndGgpKTsKKyAg
ICByZXR1cm4gU3RyaW5nKFN0cmluZ0ltcGw6OmNyZWF0ZVN1YnN0cmluZ1NoYXJpbmdJbXBsKCpt
X2ltcGwuZ2V0KCksIG9mZnNldCwgbGVuZ3RoKSk7CiB9CiAKIFN0cmluZyBTdHJpbmc6OmNvbnZl
cnRUb0FTQ0lJTG93ZXJjYXNlKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3Rl
eHQvV1RGU3RyaW5nLmggYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5oCmluZGV4IGVm
NjIxZmM0MTMzNDllNjk2ZDc1YWZmYTczOThiYjAxMzU2MDliOWUuLmVjZGVkODg2MGU3MzJlMzE3
NzVlYzAwZDRiY2RjOTY2ZmNlMGJjMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQv
V1RGU3RyaW5nLmgKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcuaApAQCAtMTA3
LDcgKzEwNyw2IEBAIHB1YmxpYzoKICAgICAvLyBDb25zdHJ1Y3QgYSBzdHJpbmcgcmVmZXJlbmNp
bmcgYW4gZXhpc3RpbmcgU3RyaW5nSW1wbC4KICAgICBTdHJpbmcoU3RyaW5nSW1wbCYpOwogICAg
IFN0cmluZyhTdHJpbmdJbXBsKik7Ci0gICAgU3RyaW5nKFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4p
OwogICAgIFN0cmluZyhSZWY8U3RyaW5nSW1wbD4mJik7CiAgICAgU3RyaW5nKFJlZlB0cjxTdHJp
bmdJbXBsPiYmKTsKIApAQCAtNTMxLDExICs1MzAsNiBAQCBpbmxpbmUgU3RyaW5nOjpTdHJpbmco
U3RyaW5nSW1wbCogaW1wbCkKIHsKIH0KIAotaW5saW5lIFN0cmluZzo6U3RyaW5nKFBhc3NSZWZQ
dHI8U3RyaW5nSW1wbD4gaW1wbCkKLSAgICA6IG1faW1wbChpbXBsKQotewotfQotCiBpbmxpbmUg
U3RyaW5nOjpTdHJpbmcoUmVmPFN0cmluZ0ltcGw+JiYgaW1wbCkKICAgICA6IG1faW1wbChXVEZN
b3ZlKGltcGwpKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9jZi9TdHJpbmdJ
bXBsQ0YuY3BwIGIvU291cmNlL1dURi93dGYvdGV4dC9jZi9TdHJpbmdJbXBsQ0YuY3BwCmluZGV4
IDdiYWQ5YTdkMTJkZjRiYWVhYmNmODdlMDhlZmRiNGU5ODQ2ZjhjNDcuLjUzZjQ5ODM4M2ZhYzg5
Y2QwMDQxMzFjZmJjMDYyNDI1NjE3ODljZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3Rl
eHQvY2YvU3RyaW5nSW1wbENGLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L2NmL1N0cmlu
Z0ltcGxDRi5jcHAKQEAgLTI1LDcgKzI1LDYgQEAKIAogI2luY2x1ZGUgPENvcmVGb3VuZGF0aW9u
L0NvcmVGb3VuZGF0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KLSNpbmNsdWRl
IDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KICNpbmNsdWRl
IDx3dGYvVGhyZWFkaW5nLmg+CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQ
cmltaXRpdmVWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUu
Y3BwCmluZGV4IDU4YTljZmVkNTRhNDQ5N2EwZDhlMmIwZTliMzM5YTQ2YjJkNWRiNmUuLjk3Njk2
MmUwYTdkOTM0NmU4YWRlMzgxNjVmMzIyOTRkZjI0NzRlMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU1ByaW1pdGl2ZVZhbHVlLmNwcApAQCAtOTY4LDcgKzk2OCw3IEBAIE5FVkVSX0lOTElORSBS
ZWY8U3RyaW5nSW1wbD4gQ1NTUHJpbWl0aXZlVmFsdWU6OmZvcm1hdE51bWJlclZhbHVlKGNvbnN0
IGNoYXIqIHN1CiAKICAgICB1bnNpZ25lZCBidWZmZXJMZW5ndGggPSBkZWNpbWFsLmJ1ZmZlckxl
bmd0aEZvclN0cmluZ0RlY2ltYWwoKSArIHN1ZmZpeExlbmd0aDsKICAgICBMQ2hhciogYnVmZmVy
OwotICAgIFJlZjxTdHJpbmdJbXBsPiBzdHJpbmcgPSBTdHJpbmdJbXBsOjpjcmVhdGVVbmluaXRp
YWxpemVkKGJ1ZmZlckxlbmd0aCwgYnVmZmVyKTsKKyAgICBhdXRvIHN0cmluZyA9IFN0cmluZ0lt
cGw6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoYnVmZmVyTGVuZ3RoLCBidWZmZXIpOwogCiAgICAgdW5z
aWduZWQgbGVuZ3RoID0gZGVjaW1hbC50b1N0cmluZ0RlY2ltYWwoYnVmZmVyLCBidWZmZXJMZW5n
dGgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwIGIvU291
cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAppbmRleCA2ZjMzZjIzNGRiNzgxY2ViNmNkMTgz
ZGY1ZGZmYTQ4NDA5MTZkNDc1Li43N2U4ZjEyNGI2ODJjYzlhNjY3YWVlYWI2NzdlY2ZjMmVlN2Zm
NDhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKQEAgLTU0ODAsNyArNTQ4MCw3IEBAIHZvaWQg
RG9jdW1lbnQ6OndpbmRvd1NjcmVlbkRpZENoYW5nZShQbGF0Zm9ybURpc3BsYXlJRCBkaXNwbGF5
SUQpCiBTdHJpbmcgRG9jdW1lbnQ6OmRpc3BsYXlTdHJpbmdNb2RpZmllZEJ5RW5jb2RpbmcoY29u
c3QgU3RyaW5nJiBzdHIpIGNvbnN0CiB7CiAgICAgaWYgKG1fZGVjb2RlcikKLSAgICAgICAgcmV0
dXJuIG1fZGVjb2Rlci0+ZW5jb2RpbmcoKS5kaXNwbGF5U3RyaW5nKHN0ci5pbXBsKCkpOworICAg
ICAgICByZXR1cm4gbV9kZWNvZGVyLT5lbmNvZGluZygpLmRpc3BsYXlTdHJpbmcoc3RyLmltcGwo
KSkuZ2V0KCk7CiAgICAgcmV0dXJuIHN0cjsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUveG1sL1hQYXRoR3JhbW1hci55IGIvU291cmNlL1dlYkNvcmUveG1sL1hQYXRoR3JhbW1hci55
CmluZGV4IDM1NmUxMTg4OWVkZjc3NjU4N2JmY2FjMTE2NGM3ZjFhNjZkMzNjOTQuLmJmNDMzODY3
MmYyYTMyMGU3MmM4NjIxMmIyNjYyMGE1NzZhZTc5NTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3htbC9YUGF0aEdyYW1tYXIueQorKysgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhHcmFt
bWFyLnkKQEAgLTE3Nyw3ICsxNzcsNyBAQCBTdGVwOgogICAgIHwKICAgICBOQU1FVEVTVCBPcHRp
b25hbFByZWRpY2F0ZUxpc3QKICAgICB7Ci0gICAgICAgIFN0cmluZyBuYW1ldGVzdCA9IGFkb3B0
UmVmKCQxKTsKKyAgICAgICAgU3RyaW5nIG5hbWV0ZXN0ID0gYWRvcHRSZWYoKiQxKTsKICAgICAg
ICAgc3RkOjp1bmlxdWVfcHRyPFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8RXhwcmVzc2lvbj4+PiBw
cmVkaWNhdGVMaXN0KCQyKTsKIAogICAgICAgICBTdHJpbmcgbG9jYWxOYW1lOwpAQCAtMjA2LDcg
KzIwNiw3IEBAIFN0ZXA6CiAgICAgfAogICAgIEF4aXNTcGVjaWZpZXIgTkFNRVRFU1QgT3B0aW9u
YWxQcmVkaWNhdGVMaXN0CiAgICAgewotICAgICAgICBTdHJpbmcgbmFtZXRlc3QgPSBhZG9wdFJl
ZigkMik7CisgICAgICAgIFN0cmluZyBuYW1ldGVzdCA9IGFkb3B0UmVmKCokMik7CiAgICAgICAg
IHN0ZDo6dW5pcXVlX3B0cjxWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEV4cHJlc3Npb24+Pj4gcHJl
ZGljYXRlTGlzdCgkMyk7CiAKICAgICAgICAgU3RyaW5nIGxvY2FsTmFtZTsKQEAgLTI1Nyw3ICsy
NTcsNyBAQCBOb2RlVGVzdDoKICAgICB8CiAgICAgUEkgJygnIExJVEVSQUwgJyknCiAgICAgewot
ICAgICAgICBTdHJpbmcgbGl0ZXJhbCA9IGFkb3B0UmVmKCQzKTsKKyAgICAgICAgU3RyaW5nIGxp
dGVyYWwgPSBhZG9wdFJlZigqJDMpOwogICAgICAgICAkJCA9IG5ldyBTdGVwOjpOb2RlVGVzdChT
dGVwOjpOb2RlVGVzdDo6UHJvY2Vzc2luZ0luc3RydWN0aW9uTm9kZVRlc3QsIGxpdGVyYWwuc3Ry
aXBXaGl0ZVNwYWNlKCkpOwogICAgIH0KICAgICA7CkBAIC0zMTQsNyArMzE0LDcgQEAgQWJicmV2
aWF0ZWRTdGVwOgogUHJpbWFyeUV4cHI6CiAgICAgVkFSSUFCTEVSRUZFUkVOQ0UKICAgICB7Ci0g
ICAgICAgIFN0cmluZyBuYW1lID0gYWRvcHRSZWYoJDEpOworICAgICAgICBTdHJpbmcgbmFtZSA9
IGFkb3B0UmVmKCokMSk7CiAgICAgICAgICQkID0gbmV3IFZhcmlhYmxlUmVmZXJlbmNlKG5hbWUp
OwogICAgIH0KICAgICB8CkBAIC0zMjUsMTMgKzMyNSwxMyBAQCBQcmltYXJ5RXhwcjoKICAgICB8
CiAgICAgTElURVJBTAogICAgIHsKLSAgICAgICAgU3RyaW5nIGxpdGVyYWwgPSBhZG9wdFJlZigk
MSk7CisgICAgICAgIFN0cmluZyBsaXRlcmFsID0gYWRvcHRSZWYoKiQxKTsKICAgICAgICAgJCQg
PSBuZXcgU3RyaW5nRXhwcmVzc2lvbihXVEZNb3ZlKGxpdGVyYWwpKTsKICAgICB9CiAgICAgfAog
ICAgIE5VTUJFUgogICAgIHsKLSAgICAgICAgU3RyaW5nIG51bWVyYWwgPSBhZG9wdFJlZigkMSk7
CisgICAgICAgIFN0cmluZyBudW1lcmFsID0gYWRvcHRSZWYoKiQxKTsKICAgICAgICAgJCQgPSBu
ZXcgTnVtYmVyKG51bWVyYWwudG9Eb3VibGUoKSk7CiAgICAgfQogICAgIHwKQEAgLTM0MSw3ICsz
NDEsNyBAQCBQcmltYXJ5RXhwcjoKIEZ1bmN0aW9uQ2FsbDoKICAgICBGVU5DVElPTk5BTUUgJygn
ICcpJwogICAgIHsKLSAgICAgICAgU3RyaW5nIG5hbWUgPSBhZG9wdFJlZigkMSk7CisgICAgICAg
IFN0cmluZyBuYW1lID0gYWRvcHRSZWYoKiQxKTsKICAgICAgICAgJCQgPSBYUGF0aDo6RnVuY3Rp
b246OmNyZWF0ZShuYW1lKS5yZWxlYXNlKCk7CiAgICAgICAgIGlmICghJCQpCiAgICAgICAgICAg
ICBZWUFCT1JUOwpAQCAtMzQ5LDcgKzM0OSw3IEBAIEZ1bmN0aW9uQ2FsbDoKICAgICB8CiAgICAg
RlVOQ1RJT05OQU1FICcoJyBBcmd1bWVudExpc3QgJyknCiAgICAgewotICAgICAgICBTdHJpbmcg
bmFtZSA9IGFkb3B0UmVmKCQxKTsKKyAgICAgICAgU3RyaW5nIG5hbWUgPSBhZG9wdFJlZigqJDEp
OwogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8VmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxFeHByZXNz
aW9uPj4+IGFyZ3VtZW50TGlzdCgkMyk7CiAgICAgICAgICQkID0gWFBhdGg6OkZ1bmN0aW9uOjpj
cmVhdGUobmFtZSwgV1RGTW92ZSgqYXJndW1lbnRMaXN0KSkucmVsZWFzZSgpOwogICAgICAgICBp
ZiAoISQkKQpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmlu
ZGV4IGI5YWIzNTkzNDAxZGI4ZmRkYjQ0ZTU0NGFmMjBiMzc3M2FiMTU2MTEuLjU4YzQ4OGZjM2Jm
MGUzYmZjN2Y4N2IxYTQ3YTQ5NWJjNGM4MTM5N2UgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxv
ZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAxNi0wNS0yNyAgS2Vp
dGggUm9sbGluICA8a3JvbGxpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIGFsbCB1c2Vz
IG9mIFBhc3NSZWZQdHIgaW4gV1RGCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNTc1OTYKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzI2MjM0MzkxPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVwZGF0ZSBj
YWxscyB0byBpbnRlcmZhY2VzIHRoYXQgbm8gbG9uZ2VyIHRha2Ugb3IgcmV0dXJuIFBhc3NSZWZQ
dHJzLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvU3RyaW5nSW1wbC5jcHA6
CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpzdHJpbmdGcm9tVVRGOCk6CisgICAgICAgIChUZXN0
V2ViS2l0QVBJOjpURVNUKToKKwogMjAxNi0wNS0yNCAgQWFrYXNoIEphaW4gIDxhYWthc2hfamFp
bkBhcHBsZS5jb20+CiAKICAgICAgICAgUmVvcmdhbml6ZSBkYXNoYm9hcmQgY29kZTogbW92ZSBj
b2RlIGZyb20gX3RpbWVJbnRlcnZhbFN0cmluZyB0byBiYXNlIGNsYXNzCmRpZmYgLS1naXQgYS9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9TdHJpbmdJbXBsLmNwcCBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV1RGL1N0cmluZ0ltcGwuY3BwCmluZGV4IDhjZDZjMDljZmI1YzI0Zjc5
YTYyMzg3NjU0M2FmMzc5MTM5ODIyNmYuLmYzMmU0Yjk4NDUwMTE5OGQ0MjA4Yjg5ZWFiMTM4YTAz
MTYwYzc4ZDAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1N0cmlu
Z0ltcGwuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1N0cmluZ0ltcGwu
Y3BwCkBAIC0xNTQsOSArMTU0LDkgQEAgVEVTVChXVEYsIFN0cmluZ0ltcGxFcXVhbElnbm9yaW5n
QVNDSUlDYXNlV2l0aEVtcHR5KQogICAgIEFTU0VSVF9UUlVFKGVxdWFsSWdub3JpbmdBU0NJSUNh
c2UoYi5nZXQoKSwgYS5nZXQoKSkpOwogfQogCi1zdGF0aWMgUmVmUHRyPFN0cmluZ0ltcGw+IHN0
cmluZ0Zyb21VVEY4KGNvbnN0IGNoYXIqIGNoYXJhY3RlcnMpCitzdGF0aWMgUmVmPFN0cmluZ0lt
cGw+IHN0cmluZ0Zyb21VVEY4KGNvbnN0IGNoYXIqIGNoYXJhY3RlcnMpCiB7Ci0gICAgcmV0dXJu
IFN0cmluZzo6ZnJvbVVURjgoY2hhcmFjdGVycykuaW1wbCgpOworICAgIHJldHVybiBhZG9wdFJl
ZigqU3RyaW5nOjpmcm9tVVRGOChjaGFyYWN0ZXJzKS5yZWxlYXNlSW1wbCgpKTsKIH0KIAogVEVT
VChXVEYsIFN0cmluZ0ltcGxFcXVhbElnbm9yaW5nQVNDSUlDYXNlV2l0aExhdGluMUNoYXJhY3Rl
cnMpCkBAIC01MjYsNyArNTI2LDcgQEAgVEVTVChXVEYsIFN0cmluZ0ltcGxDcmVhdGVOdWxsU3lt
Ym9sKQogVEVTVChXVEYsIFN0cmluZ0ltcGxDcmVhdGVTeW1ib2wpCiB7CiAgICAgUmVmUHRyPFN0
cmluZ0ltcGw+IG9yaWdpbmFsID0gc3RyaW5nRnJvbVVURjgoIm9yaWdpbmFsIik7Ci0gICAgUmVm
UHRyPFN0cmluZ0ltcGw+IHJlZmVyZW5jZSA9IFN0cmluZ0ltcGw6OmNyZWF0ZVN5bWJvbChvcmln
aW5hbCk7CisgICAgUmVmUHRyPFN0cmluZ0ltcGw+IHJlZmVyZW5jZSA9IFN0cmluZ0ltcGw6OmNy
ZWF0ZVN5bWJvbCgqb3JpZ2luYWwpOwogICAgIEFTU0VSVF9UUlVFKHJlZmVyZW5jZS0+aXNTeW1i
b2woKSk7CiAgICAgQVNTRVJUX0ZBTFNFKHJlZmVyZW5jZS0+aXNOdWxsU3ltYm9sKCkpOwogICAg
IEFTU0VSVF9GQUxTRShyZWZlcmVuY2UtPmlzQXRvbWljKCkpOwpAQCAtNTM2LDcgKzUzNiw3IEBA
IFRFU1QoV1RGLCBTdHJpbmdJbXBsQ3JlYXRlU3ltYm9sKQogICAgIEFTU0VSVF9UUlVFKGVxdWFs
KHJlZmVyZW5jZS5nZXQoKSwgIm9yaWdpbmFsIikpOwogCiAgICAgUmVmUHRyPFN0cmluZ0ltcGw+
IGVtcHR5ID0gc3RyaW5nRnJvbVVURjgoIiIpOwotICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBlbXB0
eVJlZmVyZW5jZSA9IFN0cmluZ0ltcGw6OmNyZWF0ZVN5bWJvbChlbXB0eSk7CisgICAgUmVmUHRy
PFN0cmluZ0ltcGw+IGVtcHR5UmVmZXJlbmNlID0gU3RyaW5nSW1wbDo6Y3JlYXRlU3ltYm9sKCpl
bXB0eSk7CiAgICAgQVNTRVJUX1RSVUUoZW1wdHlSZWZlcmVuY2UtPmlzU3ltYm9sKCkpOwogICAg
IEFTU0VSVF9GQUxTRShlbXB0eVJlZmVyZW5jZS0+aXNOdWxsU3ltYm9sKCkpOwogICAgIEFTU0VS
VF9GQUxTRShlbXB0eVJlZmVyZW5jZS0+aXNBdG9taWMoKSk7CkBAIC01NTAsNyArNTUwLDcgQEAg
VEVTVChXVEYsIFN0cmluZ0ltcGxDcmVhdGVTeW1ib2wpCiBURVNUKFdURiwgU3RyaW5nSW1wbFN5
bWJvbFRvQXRvbWljU3RyaW5nKQogewogICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBvcmlnaW5hbCA9
IHN0cmluZ0Zyb21VVEY4KCJvcmlnaW5hbCIpOwotICAgIFJlZlB0cjxTdHJpbmdJbXBsPiByZWZl
cmVuY2UgPSBTdHJpbmdJbXBsOjpjcmVhdGVTeW1ib2wob3JpZ2luYWwpOworICAgIFJlZlB0cjxT
dHJpbmdJbXBsPiByZWZlcmVuY2UgPSBTdHJpbmdJbXBsOjpjcmVhdGVTeW1ib2woKm9yaWdpbmFs
KTsKICAgICBBU1NFUlRfVFJVRShyZWZlcmVuY2UtPmlzU3ltYm9sKCkpOwogICAgIEFTU0VSVF9G
QUxTRShyZWZlcmVuY2UtPmlzQXRvbWljKCkpOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>280454</attachid>
            <date>2016-06-03 12:39:22 -0700</date>
            <delta_ts>2016-06-07 17:57:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-157596-20160603124043.patch</filename>
            <type>text/plain</type>
            <size>115979</size>
            <attacher name="Keith Rollin">krollin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAxNTY4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAy
OTNjZWI2ZTdiMzQ2ODA4N2E1ZWVmZTA5NDRlNTYzMzhiNWVjZTZhLi40ZGFhMzhlYTA4Nzc2YTdj
ZDNiZWI1MzY2ZjY4ZmYxMDEyZTVkZDAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzMyBAQAorMjAxNi0wNS0yNyAgS2VpdGggUm9sbGluICA8a3JvbGxpbkBhcHBsZS5jb20+
CisKKyAgICAgICAgUmVtb3ZlIGFsbCB1c2VzIG9mIFBhc3NSZWZQdHIgaW4gV1RGCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTc1OTYKKyAgICAgICAg
PHJkYXI6Ly9wcm9ibGVtLzI2MjM0MzkxPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFVwZGF0ZSBjYWxscyB0byBpbnRlcmZhY2VzIHRoYXQgbm8gbG9u
Z2VyIHRha2Ugb3IgcmV0dXJuIFBhc3NSZWZQdHJzLgorCisgICAgICAgICogcnVudGltZS9KU1N0
cmluZy5jcHA6CisgICAgICAgIChKU0M6OkpTUm9wZVN0cmluZzo6cmVzb2x2ZVJvcGUpOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNTdHJpbmcuaDoKKyAgICAgICAgKEpTQzo6SlNTdHJpbmc6OkpTU3Ry
aW5nKToKKyAgICAgICAgKEpTQzo6anNTdWJzdHJpbmcpOgorICAgICAgICAqIHJ1bnRpbWUvUHJp
dmF0ZU5hbWUuaDoKKyAgICAgICAgKEpTQzo6UHJpdmF0ZU5hbWU6OlByaXZhdGVOYW1lKToKKyAg
ICAgICAgKiBydW50aW1lL1NtYWxsU3RyaW5ncy5jcHA6CisgICAgICAgIChKU0M6OlNtYWxsU3Ry
aW5nc1N0b3JhZ2U6OlNtYWxsU3RyaW5nc1N0b3JhZ2UpOgorICAgICAgICAqIHJ1bnRpbWUvU3Ry
aW5nQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpzdHJpbmdGcm9tQ2hhckNvZGVTbG93
Q2FzZSk6CisgICAgICAgICogcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwOgorICAgICAgICAo
SlNDOjpqc1NwbGljZVN1YnN0cmluZ3MpOgorICAgICAgICAoSlNDOjpqc1NwbGljZVN1YnN0cmlu
Z3NXaXRoU2VwYXJhdG9ycyk6CisgICAgICAgIChKU0M6OnJlcGxhY2VVc2luZ1N0cmluZ1NlYXJj
aCk6CisgICAgICAgIChKU0M6OnJlcGVhdENoYXJhY3Rlcik6CisgICAgICAgIChKU0M6OnN0cmlu
Z1Byb3RvRnVuY0ZvbnRzaXplKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jTGluayk6
CisgICAgICAgIChKU0M6Om5vcm1hbGl6ZSk6CisKIDIwMTYtMDYtMDEgIENvbW1pdCBRdWV1ZSAg
PGNvbW1pdC1xdWV1ZUB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcg
b3V0IHIyMDE0ODguCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9X
VEYvQ2hhbmdlTG9nCmluZGV4IGM1YWE1MDViYTRlZDkxMjk1OGY2YTYwMWIzMmZhYWFiYjgyN2M4
ZTUuLmY4YTdhNzBjM2MxNmE3OGQxMDJmMzg0ZWFiYjkzNGM2OWI3ZmZhNTYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsNjMgQEAKKzIwMTYtMDUtMjcgIEtlaXRoIFJvbGxpbiAgPGtyb2xsaW5AYXBwbGUuY29tPgor
CisgICAgICAgIFJlbW92ZSBhbGwgdXNlcyBvZiBQYXNzUmVmUHRyIGluIFdURgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU3NTk2CisgICAgICAgIDxy
ZGFyOi8vcHJvYmxlbS8yNjIzNDM5MT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBSZW1vdmUvdXBkYXRlIG1vc3QgaW50ZXJmYWNlcyB0aGF0IHRha2Ug
b3IgcmV0dXJuIFBhc3NSZWZQdHJzLgorICAgICAgICBSZW1haW5pbmcgcmVmZXJlbmNlcyBpbmNs
dWRlIHRob3NlIGluIG5vbi1Db2NvYSBpbXBsZW1lbnRhdGlvbnMgYW5kCisgICAgICAgIHRob3Nl
IHJlcXVpcmVkIGZvciBjb250aW51ZWQgY29tcGF0aWJpbGl0eSB3aXRoIG1vZHVsZXMgdGhhdCBz
dGlsbCB1c2UKKyAgICAgICAgUGFzc1JlZlB0cnMgKHNwZWNpZmljYWxseTogRm9yd2FyZC5oLCBS
ZWZQdHIgaW50ZXJvcGVyYWJpbGl0eSwKKyAgICAgICAgU2l6ZUxpbWl0cy5oLCBXb3JrUXVldWUg
KFdpbmRvd3MpIERpc3BhdGNoUXVldWVFZmwsCisgICAgICAgIERpc3BhdGNoV29ya0l0ZW1FZmws
IGFuZCBQYXNzUmVmUHRyIGl0c2VsZikuCisKKyAgICAgICAgVXBkYXRlIGNhbGxzIHRvIGludGVy
ZmFjZXMgdGhhdCBubyBsb25nZXIgdGFrZSBvciByZXR1cm4gUGFzc1JlZlB0cnMuCisKKyAgICAg
ICAgVXBkYXRlIGFkb3B0UmVmKFQqKSB0byByZXR1cm4gYSBSZWZQdHIgaW5zdGVhZCBvZiBhIFBh
c3NSZWZQdHIgYW5kCisgICAgICAgIG1vdmUgaXQgdG8gUmVmUHRyLmggZnJvbSBQYXNzUmVmUHRy
LmguCisKKyAgICAgICAgKiB3dGYvTWV0YUFsbG9jYXRvci5jcHA6CisgICAgICAgIChXVEY6Ok1l
dGFBbGxvY2F0b3I6OmFsbG9jYXRlKToKKyAgICAgICAgKiB3dGYvTWV0YUFsbG9jYXRvci5oOgor
ICAgICAgICAqIHd0Zi9QYXJhbGxlbEpvYnNHZW5lcmljLmg6CisgICAgICAgIChXVEY6OlBhcmFs
bGVsRW52aXJvbm1lbnQ6OlRocmVhZFByaXZhdGU6OmNyZWF0ZSk6CisgICAgICAgICogd3RmL3Rl
eHQvQXRvbWljU3RyaW5nSW1wbC5jcHA6CisgICAgICAgIChXVEY6Okhhc2hBbmRVVEY4Q2hhcmFj
dGVyc1RyYW5zbGF0b3I6OnRyYW5zbGF0ZSk6CisgICAgICAgIChXVEY6OlN1YnN0cmluZ1RyYW5z
bGF0b3I6OnRyYW5zbGF0ZSk6CisgICAgICAgICogd3RmL3RleHQvQ1N0cmluZy5jcHA6CisgICAg
ICAgIChXVEY6OkNTdHJpbmdCdWZmZXI6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQpOgorICAgICAgICAq
IHd0Zi90ZXh0L0NTdHJpbmcuaDoKKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmNw
cDoKKyAgICAgICAgKFdURjo6U3RyaW5nQnVpbGRlcjo6cmVpZnlTdHJpbmcpOgorICAgICAgICAo
V1RGOjpTdHJpbmdCdWlsZGVyOjpyZXNpemUpOgorICAgICAgICAoV1RGOjpTdHJpbmdCdWlsZGVy
OjpyZWFsbG9jYXRlQnVmZmVyPExDaGFyPik6CisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6
OnJlYWxsb2NhdGVCdWZmZXI8VUNoYXI+KToKKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdJbXBs
LmNwcDoKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6cmVhbGxvY2F0ZUludGVybmFsKToKKyAg
ICAgICAgKFdURjo6U3RyaW5nSW1wbDo6cmVhbGxvY2F0ZSk6CisgICAgICAgIChXVEY6OlN0cmlu
Z0ltcGw6OmNyZWF0ZThCaXRJZlBvc3NpYmxlKToKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6
Y3JlYXRlU3ltYm9sKToKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6Y3JlYXRlTnVsbFN5bWJv
bCk6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OmNvbnZlcnRUb0xvd2VyY2FzZVdpdGhvdXRM
b2NhbGUpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpjb252ZXJ0VG9VcHBlcmNhc2VXaXRo
b3V0TG9jYWxlKToKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6Y29udmVydFRvTG93ZXJjYXNl
V2l0aExvY2FsZSk6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OmNvbnZlcnRUb1VwcGVyY2Fz
ZVdpdGhMb2NhbGUpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpjb252ZXJ0QVNDSUlDYXNl
KToKKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdJbXBsLmg6CisgICAgICAgIChXVEY6OlN0cmlu
Z0ltcGw6OlN0cmluZ0ltcGwpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpjcmVhdGVTdWJz
dHJpbmdTaGFyaW5nSW1wbCk6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OnRyeUNyZWF0ZVVu
aW5pdGlhbGl6ZWQpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpleHRyYWN0Rm9sZGVkU3Ry
aW5nSW5TeW1ib2wpOgorICAgICAgICAqIHd0Zi90ZXh0L1N5bWJvbFJlZ2lzdHJ5LmNwcDoKKyAg
ICAgICAgKFdURjo6U3ltYm9sUmVnaXN0cnk6OnN5bWJvbEZvcktleSk6CisgICAgICAgICogd3Rm
L3RleHQvV1RGU3RyaW5nLmNwcDoKKyAgICAgICAgKFdURjo6U3RyaW5nOjpzdWJzdHJpbmdTaGFy
aW5nSW1wbCk6CisgICAgICAgICogd3RmL3RleHQvV1RGU3RyaW5nLmg6CisgICAgICAgIChXVEY6
OlN0cmluZzo6U3RyaW5nKTogRGVsZXRlZC4KKyAgICAgICAgKiB3dGYvdGV4dC9jZi9TdHJpbmdJ
bXBsQ0YuY3BwOgorCiAyMDE2LTA1LTMxICBDb21taXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Vi
a2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMjAxMzYzIGFuZCBy
MjAxNDU2LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCmluZGV4IDdlMzlmM2FhN2JiMDk2M2E4YTIwM2RjMTRhMDE2N2Q3OWQ2
NzRkMTAuLjZkMDMyMDJmZjAyOGE1YWQzNmExMjMwZTk4YzE0M2VhYTUwYWU1ZmMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwyMiBAQAorMjAxNi0wNS0yNyAgS2VpdGggUm9sbGluICA8a3JvbGxpbkBh
cHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIGFsbCB1c2VzIG9mIFBhc3NSZWZQdHIgaW4gV1RG
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTc1OTYK
KyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzI2MjM0MzkxPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVwZGF0ZSBjYWxscyB0byBpbnRlcmZhY2VzIHRo
YXQgbm8gbG9uZ2VyIHRha2Ugb3IgcmV0dXJuIFBhc3NSZWZQdHJzLgorCisgICAgICAgIE5vIG5l
dyB0ZXN0czogbm8gbmV3IGZ1bmN0aW9uYWxpdHkgc28gY2hhbmdlcyBhcmUgY292ZXJlZCBieSBl
eGlzdGluZworICAgICAgICB0ZXN0cy4KKworICAgICAgICAqIGNzcy9DU1NQcmltaXRpdmVWYWx1
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcmltaXRpdmVWYWx1ZTo6Zm9ybWF0TnVtYmVy
VmFsdWUpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpE
b2N1bWVudDo6ZGlzcGxheVN0cmluZ01vZGlmaWVkQnlFbmNvZGluZyk6CisgICAgICAgICogeG1s
L1hQYXRoR3JhbW1hci55OgorCiAyMDE2LTA2LTAxICBDaHJpcyBGbGVpemFjaCAgPGNmbGVpemFj
aEBhcHBsZS5jb20+CiAKICAgICAgICAgQVg6IGlPUzogVm9pY2VPdmVyIGNhbid0IGFjY2VzcyBh
dHRhY2htZW50cyBpbiBtYWlsIG1lc3NhZ2VzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0dDQXdhcmVKSVRTdHViUm91dGluZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0dDQXdhcmVKSVRTdHViUm91dGluZS5jcHAKaW5kZXggZGVjZTI0Zjc0ZDRjYzQ3MGEw
NjE5MjhmYzRhNjMyMTY2ODY5ZWUwYi4uMTk5Y2VjNTQ0OGFmMjI0YjZiNzI1NzVjNzEwYjIyYTBh
NDBlOThkOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HQ0F3YXJlSklU
U3R1YlJvdXRpbmUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR0NBd2FyZUpJ
VFN0dWJSb3V0aW5lLmNwcApAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIkpTQ0lubGluZXMu
aCIKICNpbmNsdWRlICJTbG90VmlzaXRvci5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgorI2lu
Y2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTE0NCwxNyArMTQ1
LDEzIEBAIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IGNyZWF0ZUpJVFN0dWJSb3V0aW5lKAog
ICAgIAogICAgIGlmIChjb2RlQmxvY2tGb3JFeGNlcHRpb25IYW5kbGVycykgewogICAgICAgICBS
RUxFQVNFX0FTU0VSVChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoY29kZUJsb2NrRm9yRXhjZXB0
aW9uSGFuZGxlcnMtPmppdFR5cGUoKSkpOwotICAgICAgICByZXR1cm4gc3RhdGljX3BvaW50ZXJf
Y2FzdDxKSVRTdHViUm91dGluZT4oCi0gICAgICAgICAgICBhZG9wdFJlZihuZXcgR0NBd2FyZUpJ
VFN0dWJSb3V0aW5lV2l0aEV4Y2VwdGlvbkhhbmRsZXIoY29kZSwgdm0sIG93bmVyLCBjZWxscywg
Y29kZUJsb2NrRm9yRXhjZXB0aW9uSGFuZGxlcnMsIGV4Y2VwdGlvbkhhbmRsZXJDYWxsU2l0ZUlu
ZGV4KSkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEdDQXdhcmVKSVRTdHViUm91dGlu
ZVdpdGhFeGNlcHRpb25IYW5kbGVyKGNvZGUsIHZtLCBvd25lciwgY2VsbHMsIGNvZGVCbG9ja0Zv
ckV4Y2VwdGlvbkhhbmRsZXJzLCBleGNlcHRpb25IYW5kbGVyQ2FsbFNpdGVJbmRleCkpOwogICAg
IH0KIAotICAgIGlmIChjZWxscy5pc0VtcHR5KCkpIHsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19w
b2ludGVyX2Nhc3Q8SklUU3R1YlJvdXRpbmU+KAotICAgICAgICAgICAgYWRvcHRSZWYobmV3IEdD
QXdhcmVKSVRTdHViUm91dGluZShjb2RlLCB2bSkpKTsKLSAgICB9CisgICAgaWYgKGNlbGxzLmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBHQ0F3YXJlSklUU3R1YlJvdXRp
bmUoY29kZSwgdm0pKTsKICAgICAKLSAgICByZXR1cm4gc3RhdGljX3BvaW50ZXJfY2FzdDxKSVRT
dHViUm91dGluZT4oCi0gICAgICAgIGFkb3B0UmVmKG5ldyBNYXJraW5nR0NBd2FyZUpJVFN0dWJS
b3V0aW5lKGNvZGUsIHZtLCBvd25lciwgY2VsbHMpKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBNYXJraW5nR0NBd2FyZUpJVFN0dWJSb3V0aW5lKGNvZGUsIHZtLCBvd25lciwgY2VsbHMpKTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1N0cmluZy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1N0cmluZy5jcHAKaW5kZXggYWQ4YTY3YTQ1NzE4ZWE3ZTZhMTRkOGNhNTZiMDUyNzE5ODhlOGY2
ZS4uNGY2MDM3NGE1NDRiM2YxMzM1ZWQ0NDhmNTYwM2UwOTExM2YyYTc5ZSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmNwcApAQCAtMjUyLDkgKzI1Miw5IEBAIHZv
aWQgSlNSb3BlU3RyaW5nOjpyZXNvbHZlUm9wZShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiAgICAg
CiAgICAgaWYgKGlzOEJpdCgpKSB7CiAgICAgICAgIExDaGFyKiBidWZmZXI7Ci0gICAgICAgIGlm
IChSZWZQdHI8U3RyaW5nSW1wbD4gbmV3SW1wbCA9IFN0cmluZ0ltcGw6OnRyeUNyZWF0ZVVuaW5p
dGlhbGl6ZWQobV9sZW5ndGgsIGJ1ZmZlcikpIHsKKyAgICAgICAgaWYgKGF1dG8gbmV3SW1wbCA9
IFN0cmluZ0ltcGw6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQobV9sZW5ndGgsIGJ1ZmZlcikpIHsK
ICAgICAgICAgICAgIEhlYXA6OmhlYXAodGhpcyktPnJlcG9ydEV4dHJhTWVtb3J5QWxsb2NhdGVk
KG5ld0ltcGwtPmNvc3QoKSk7Ci0gICAgICAgICAgICBtX3ZhbHVlID0gbmV3SW1wbC5yZWxlYXNl
KCk7CisgICAgICAgICAgICBtX3ZhbHVlID0gV1RGTW92ZShuZXdJbXBsKTsKICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgIG91dE9mTWVtb3J5KGV4ZWMpOwogICAgICAgICAgICAgcmV0dXJu
OwpAQCAtMjY2LDkgKzI2Niw5IEBAIHZvaWQgSlNSb3BlU3RyaW5nOjpyZXNvbHZlUm9wZShFeGVj
U3RhdGUqIGV4ZWMpIGNvbnN0CiAgICAgfQogCiAgICAgVUNoYXIqIGJ1ZmZlcjsKLSAgICBpZiAo
UmVmUHRyPFN0cmluZ0ltcGw+IG5ld0ltcGwgPSBTdHJpbmdJbXBsOjp0cnlDcmVhdGVVbmluaXRp
YWxpemVkKG1fbGVuZ3RoLCBidWZmZXIpKSB7CisgICAgaWYgKGF1dG8gbmV3SW1wbCA9IFN0cmlu
Z0ltcGw6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQobV9sZW5ndGgsIGJ1ZmZlcikpIHsKICAgICAg
ICAgSGVhcDo6aGVhcCh0aGlzKS0+cmVwb3J0RXh0cmFNZW1vcnlBbGxvY2F0ZWQobmV3SW1wbC0+
Y29zdCgpKTsKLSAgICAgICAgbV92YWx1ZSA9IG5ld0ltcGwucmVsZWFzZSgpOworICAgICAgICBt
X3ZhbHVlID0gV1RGTW92ZShuZXdJbXBsKTsKICAgICB9IGVsc2UgewogICAgICAgICBvdXRPZk1l
bW9yeShleGVjKTsKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTU3RyaW5nLmgKaW5kZXggNjA4MmY2N2IwNGMxODE4MTE5NDA4MjM0ZGM1YWRjMGY0ZmJiMjY1
Ny4uMjdjMmViMmM5Y2FjNDllMDkwZjY1YTU2NDcxYWM0YzM1NGZmZjU0NCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5oCkBAIC05Myw3ICs5Myw3IEBAIHByaXZhdGU6
CiAgICAgSlNTdHJpbmcoVk0mIHZtLCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IHZhbHVlKQogICAg
ICAgICA6IEpTQ2VsbCh2bSwgdm0uc3RyaW5nU3RydWN0dXJlLmdldCgpKQogICAgICAgICAsIG1f
ZmxhZ3MoMCkKLSAgICAgICAgLCBtX3ZhbHVlKHZhbHVlKQorICAgICAgICAsIG1fdmFsdWUoUmVm
UHRyPFN0cmluZ0ltcGw+KHZhbHVlKSkKICAgICB7CiAgICAgfQogCkBAIC02MDMsNyArNjAzLDcg
QEAgaW5saW5lIEpTU3RyaW5nKiBqc1N1YnN0cmluZyhWTSogdm0sIGNvbnN0IFN0cmluZyYgcywg
dW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZAogICAgICAgICBpZiAoYyA8PSBtYXhTaW5nbGVDaGFy
YWN0ZXJTdHJpbmcpCiAgICAgICAgICAgICByZXR1cm4gdm0tPnNtYWxsU3RyaW5ncy5zaW5nbGVD
aGFyYWN0ZXJTdHJpbmcoYyk7CiAgICAgfQotICAgIHJldHVybiBKU1N0cmluZzo6Y3JlYXRlSGFz
T3RoZXJPd25lcigqdm0sIFN0cmluZ0ltcGw6OmNyZWF0ZVN1YnN0cmluZ1NoYXJpbmdJbXBsKHMu
aW1wbCgpLCBvZmZzZXQsIGxlbmd0aCkpOworICAgIHJldHVybiBKU1N0cmluZzo6Y3JlYXRlSGFz
T3RoZXJPd25lcigqdm0sIFN0cmluZ0ltcGw6OmNyZWF0ZVN1YnN0cmluZ1NoYXJpbmdJbXBsKCpz
LmltcGwoKSwgb2Zmc2V0LCBsZW5ndGgpKTsKIH0KIAogaW5saW5lIEpTU3RyaW5nKiBqc093bmVk
U3RyaW5nKFZNKiB2bSwgY29uc3QgU3RyaW5nJiBzKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUHJpdmF0ZU5hbWUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1ByaXZhdGVOYW1lLmgKaW5kZXggODVjMTM5ZTBkOWE1ZWI0ZWJiNTkxOTk0YTk2M2Q5
NGM5NGE3OTU0Ny4uZjBiYzYwZGEzYTFjMjU2ZTkyMjkzNDVhODQ0OGM1ZjhiY2I2NTRjYiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJpdmF0ZU5hbWUuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcml2YXRlTmFtZS5oCkBAIC00NCw3ICs0
NCw3IEBAIHB1YmxpYzoKIAogICAgIGVudW0gRGVzY3JpcHRpb25UYWcgeyBEZXNjcmlwdGlvbiB9
OwogICAgIGV4cGxpY2l0IFByaXZhdGVOYW1lKERlc2NyaXB0aW9uVGFnLCBjb25zdCBTdHJpbmcm
IGRlc2NyaXB0aW9uKQotICAgICAgICA6IG1fdWlkKFN0cmluZ0ltcGw6OmNyZWF0ZVN5bWJvbChk
ZXNjcmlwdGlvbi5pbXBsKCkpKQorICAgICAgICA6IG1fdWlkKFN0cmluZ0ltcGw6OmNyZWF0ZVN5
bWJvbCgqZGVzY3JpcHRpb24uaW1wbCgpKSkKICAgICB7CiAgICAgfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TbWFsbFN0cmluZ3MuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU21hbGxTdHJpbmdzLmNwcAppbmRleCA5NDc1MTg2MDdiODhi
Njc3ZThkMWY1ZWViZTNkMTc2NTdiMjRhMzFkLi4xMDVjMGVmYzMwOTI5ZjY5NWE0ZDE3NDBjZTNl
NTA5MWVlODA2Y2VhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
bWFsbFN0cmluZ3MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NtYWxs
U3RyaW5ncy5jcHAKQEAgLTU0LDEwICs1NCwxMCBAQCBwcml2YXRlOgogU21hbGxTdHJpbmdzU3Rv
cmFnZTo6U21hbGxTdHJpbmdzU3RvcmFnZSgpCiB7CiAgICAgTENoYXIqIGNoYXJhY3RlckJ1ZmZl
ciA9IDA7Ci0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IGJhc2VTdHJpbmcgPSBTdHJpbmdJbXBsOjpj
cmVhdGVVbmluaXRpYWxpemVkKHNpbmdsZUNoYXJhY3RlclN0cmluZ0NvdW50LCBjaGFyYWN0ZXJC
dWZmZXIpOworICAgIGF1dG8gYmFzZVN0cmluZyA9IFN0cmluZ0ltcGw6OmNyZWF0ZVVuaW5pdGlh
bGl6ZWQoc2luZ2xlQ2hhcmFjdGVyU3RyaW5nQ291bnQsIGNoYXJhY3RlckJ1ZmZlcik7CiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpbmdsZUNoYXJhY3RlclN0cmluZ0NvdW50OyArK2kp
IHsKICAgICAgICAgY2hhcmFjdGVyQnVmZmVyW2ldID0gaTsKLSAgICAgICAgbV9yZXBzW2ldID0g
QXRvbWljU3RyaW5nSW1wbDo6YWRkKFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4oU3RyaW5nSW1wbDo6
Y3JlYXRlU3Vic3RyaW5nU2hhcmluZ0ltcGwoYmFzZVN0cmluZywgaSwgMSkpLmdldCgpKTsKKyAg
ICAgICAgbV9yZXBzW2ldID0gQXRvbWljU3RyaW5nSW1wbDo6YWRkKFN0cmluZ0ltcGw6OmNyZWF0
ZVN1YnN0cmluZ1NoYXJpbmdJbXBsKGJhc2VTdHJpbmcuZ2V0KCksIGksIDEpLnB0cigpKTsKICAg
ICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmlu
Z0NvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ0Nv
bnN0cnVjdG9yLmNwcAppbmRleCBkOTdjNzJhNGRhOTE4NTkxZDA0ZGEyYzdiYzQ2ZDdlZWI1NGUz
ODU5Li5kYjU2NGJiZmYxMzk3MTY3ZjQ5YTAyM2RiYWIyNWRhYjcwZWQ0N2M2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdDb25zdHJ1Y3Rvci5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nQ29uc3RydWN0b3IuY3BwCkBA
IC03MCwxMCArNzAsMTAgQEAgc3RhdGljIE5FVkVSX0lOTElORSBKU1ZhbHVlIHN0cmluZ0Zyb21D
aGFyQ29kZVNsb3dDYXNlKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICB1bnNpZ25lZCBsZW5ndGgg
PSBleGVjLT5hcmd1bWVudENvdW50KCk7CiAgICAgVUNoYXIqIGJ1ZjsKLSAgICBQYXNzUmVmUHRy
PFN0cmluZ0ltcGw+IGltcGwgPSBTdHJpbmdJbXBsOjpjcmVhdGVVbmluaXRpYWxpemVkKGxlbmd0
aCwgYnVmKTsKKyAgICBhdXRvIGltcGwgPSBTdHJpbmdJbXBsOjpjcmVhdGVVbmluaXRpYWxpemVk
KGxlbmd0aCwgYnVmKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kp
CiAgICAgICAgIGJ1ZltpXSA9IHN0YXRpY19jYXN0PFVDaGFyPihleGVjLT51bmNoZWNrZWRBcmd1
bWVudChpKS50b1VJbnQzMihleGVjKSk7Ci0gICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIGltcGwp
OworICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBXVEZNb3ZlKGltcGwpKTsKIH0KIAogc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nRnJvbUNoYXJDb2RlKEV4ZWNTdGF0
ZSogZXhlYykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmlu
Z1Byb3RvdHlwZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90
b3R5cGUuY3BwCmluZGV4IGU3ZWNjODI2MmQ1Yjc4NDU2OThjZWIxMWFhMDNkZmU2ZTM0Mjc2OTUu
LjkzMTgwZjQ5YWQxZGEwZDQyN2ViZDExNzc2MDdiOGEzNjVkY2VjNTEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcApAQCAtMjk0LDcg
KzI5NCw3IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFsdWUganNTcGxpY2VTdWJzdHJpbmdz
KEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcqIHNvdXJjCiAgICAgICAgIGlmIChwb3NpdGlvbiA8
PSAwICYmIGxlbmd0aCA+PSBzb3VyY2VTaXplKQogICAgICAgICAgICAgcmV0dXJuIHNvdXJjZVZh
bDsKICAgICAgICAgLy8gV2UgY291bGQgY2FsbCBTdHJpbmc6OnN1YnN0cmluZ1NoYXJpbmdJbXBs
KCksIGJ1dCB0aGlzIHdvdWxkIHJlc3VsdCBpbiByZWR1bmRhbnQgY2hlY2tzLgotICAgICAgICBy
ZXR1cm4ganNTdHJpbmcoZXhlYywgU3RyaW5nSW1wbDo6Y3JlYXRlU3Vic3RyaW5nU2hhcmluZ0lt
cGwoc291cmNlLmltcGwoKSwgc3RkOjptYXgoMCwgcG9zaXRpb24pLCBzdGQ6Om1pbihzb3VyY2VT
aXplLCBsZW5ndGgpKSk7CisgICAgICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBTdHJpbmdJbXBs
OjpjcmVhdGVTdWJzdHJpbmdTaGFyaW5nSW1wbCgqc291cmNlLmltcGwoKSwgc3RkOjptYXgoMCwg
cG9zaXRpb24pLCBzdGQ6Om1pbihzb3VyY2VTaXplLCBsZW5ndGgpKSk7CiAgICAgfQogCiAgICAg
aW50IHRvdGFsTGVuZ3RoID0gMDsKQEAgLTMwNyw3ICszMDcsNyBAQCBzdGF0aWMgQUxXQVlTX0lO
TElORSBKU1ZhbHVlIGpzU3BsaWNlU3Vic3RyaW5ncyhFeGVjU3RhdGUqIGV4ZWMsIEpTU3RyaW5n
KiBzb3VyYwogICAgIGlmIChzb3VyY2UuaXM4Qml0KCkpIHsKICAgICAgICAgTENoYXIqIGJ1ZmZl
cjsKICAgICAgICAgY29uc3QgTENoYXIqIHNvdXJjZURhdGEgPSBzb3VyY2UuY2hhcmFjdGVyczgo
KTsKLSAgICAgICAgUmVmUHRyPFN0cmluZ0ltcGw+IGltcGwgPSBTdHJpbmdJbXBsOjp0cnlDcmVh
dGVVbmluaXRpYWxpemVkKHRvdGFsTGVuZ3RoLCBidWZmZXIpOworICAgICAgICBhdXRvIGltcGwg
PSBTdHJpbmdJbXBsOjp0cnlDcmVhdGVVbmluaXRpYWxpemVkKHRvdGFsTGVuZ3RoLCBidWZmZXIp
OwogICAgICAgICBpZiAoIWltcGwpCiAgICAgICAgICAgICByZXR1cm4gdGhyb3dPdXRPZk1lbW9y
eUVycm9yKGV4ZWMpOwogCkBAIC0zMTksMTMgKzMxOSwxMyBAQCBzdGF0aWMgQUxXQVlTX0lOTElO
RSBKU1ZhbHVlIGpzU3BsaWNlU3Vic3RyaW5ncyhFeGVjU3RhdGUqIGV4ZWMsIEpTU3RyaW5nKiBz
b3VyYwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgcmV0dXJuIGpzU3RyaW5n
KGV4ZWMsIGltcGwucmVsZWFzZSgpKTsKKyAgICAgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIFdU
Rk1vdmUoaW1wbCkpOwogICAgIH0KIAogICAgIFVDaGFyKiBidWZmZXI7CiAgICAgY29uc3QgVUNo
YXIqIHNvdXJjZURhdGEgPSBzb3VyY2UuY2hhcmFjdGVyczE2KCk7CiAKLSAgICBSZWZQdHI8U3Ry
aW5nSW1wbD4gaW1wbCA9IFN0cmluZ0ltcGw6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQodG90YWxM
ZW5ndGgsIGJ1ZmZlcik7CisgICAgYXV0byBpbXBsID0gU3RyaW5nSW1wbDo6dHJ5Q3JlYXRlVW5p
bml0aWFsaXplZCh0b3RhbExlbmd0aCwgYnVmZmVyKTsKICAgICBpZiAoIWltcGwpCiAgICAgICAg
IHJldHVybiB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7CiAKQEAgLTMzNyw3ICszMzcsNyBA
QCBzdGF0aWMgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGpzU3BsaWNlU3Vic3RyaW5ncyhFeGVjU3Rh
dGUqIGV4ZWMsIEpTU3RyaW5nKiBzb3VyYwogICAgICAgICB9CiAgICAgfQogCi0gICAgcmV0dXJu
IGpzU3RyaW5nKGV4ZWMsIGltcGwucmVsZWFzZSgpKTsKKyAgICByZXR1cm4ganNTdHJpbmcoZXhl
YywgV1RGTW92ZShpbXBsKSk7CiB9CiAKIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFsdWUganNT
cGxpY2VTdWJzdHJpbmdzV2l0aFNlcGFyYXRvcnMoRXhlY1N0YXRlKiBleGVjLCBKU1N0cmluZyog
c291cmNlVmFsLCBjb25zdCBTdHJpbmcmIHNvdXJjZSwgY29uc3QgU3RyaW5nUmFuZ2UqIHN1YnN0
cmluZ1JhbmdlcywgaW50IHJhbmdlQ291bnQsIGNvbnN0IFN0cmluZyogc2VwYXJhdG9ycywgaW50
IHNlcGFyYXRvckNvdW50KQpAQCAtMzQ5LDcgKzM0OSw3IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5F
IEpTVmFsdWUganNTcGxpY2VTdWJzdHJpbmdzV2l0aFNlcGFyYXRvcnMoRXhlY1N0YXRlKiBleGVj
LCBKCiAgICAgICAgIGlmIChwb3NpdGlvbiA8PSAwICYmIGxlbmd0aCA+PSBzb3VyY2VTaXplKQog
ICAgICAgICAgICAgcmV0dXJuIHNvdXJjZVZhbDsKICAgICAgICAgLy8gV2UgY291bGQgY2FsbCBT
dHJpbmc6OnN1YnN0cmluZ1NoYXJpbmdJbXBsKCksIGJ1dCB0aGlzIHdvdWxkIHJlc3VsdCBpbiBy
ZWR1bmRhbnQgY2hlY2tzLgotICAgICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgU3RyaW5nSW1w
bDo6Y3JlYXRlU3Vic3RyaW5nU2hhcmluZ0ltcGwoc291cmNlLmltcGwoKSwgc3RkOjptYXgoMCwg
cG9zaXRpb24pLCBzdGQ6Om1pbihzb3VyY2VTaXplLCBsZW5ndGgpKSk7CisgICAgICAgIHJldHVy
biBqc1N0cmluZyhleGVjLCBTdHJpbmdJbXBsOjpjcmVhdGVTdWJzdHJpbmdTaGFyaW5nSW1wbCgq
c291cmNlLmltcGwoKSwgc3RkOjptYXgoMCwgcG9zaXRpb24pLCBzdGQ6Om1pbihzb3VyY2VTaXpl
LCBsZW5ndGgpKSk7CiAgICAgfQogCiAgICAgQ2hlY2tlZDxpbnQsIFJlY29yZE92ZXJmbG93PiB0
b3RhbExlbmd0aCA9IDA7CkBAIC0zNzEsNyArMzcxLDcgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUg
SlNWYWx1ZSBqc1NwbGljZVN1YnN0cmluZ3NXaXRoU2VwYXJhdG9ycyhFeGVjU3RhdGUqIGV4ZWMs
IEoKICAgICAgICAgTENoYXIqIGJ1ZmZlcjsKICAgICAgICAgY29uc3QgTENoYXIqIHNvdXJjZURh
dGEgPSBzb3VyY2UuY2hhcmFjdGVyczgoKTsKIAotICAgICAgICBSZWZQdHI8U3RyaW5nSW1wbD4g
aW1wbCA9IFN0cmluZ0ltcGw6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQodG90YWxMZW5ndGgudW5z
YWZlR2V0KCksIGJ1ZmZlcik7CisgICAgICAgIGF1dG8gaW1wbCA9IFN0cmluZ0ltcGw6OnRyeUNy
ZWF0ZVVuaW5pdGlhbGl6ZWQodG90YWxMZW5ndGgudW5zYWZlR2V0KCksIGJ1ZmZlcik7CiAgICAg
ICAgIGlmICghaW1wbCkKICAgICAgICAgICAgIHJldHVybiB0aHJvd091dE9mTWVtb3J5RXJyb3Io
ZXhlYyk7CiAKQEAgLTM5MiwxMSArMzkyLDExIEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFs
dWUganNTcGxpY2VTdWJzdHJpbmdzV2l0aFNlcGFyYXRvcnMoRXhlY1N0YXRlKiBleGVjLCBKCiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0gICAgICAgIAogCi0gICAgICAgIHJldHVybiBqc1N0cmlu
ZyhleGVjLCBpbXBsLnJlbGVhc2UoKSk7CisgICAgICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBX
VEZNb3ZlKGltcGwpKTsKICAgICB9CiAKICAgICBVQ2hhciogYnVmZmVyOwotICAgIFJlZlB0cjxT
dHJpbmdJbXBsPiBpbXBsID0gU3RyaW5nSW1wbDo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZCh0b3Rh
bExlbmd0aC51bnNhZmVHZXQoKSwgYnVmZmVyKTsKKyAgICBhdXRvIGltcGwgPSBTdHJpbmdJbXBs
Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKHRvdGFsTGVuZ3RoLnVuc2FmZUdldCgpLCBidWZmZXIp
OwogICAgIGlmICghaW1wbCkKICAgICAgICAgcmV0dXJuIHRocm93T3V0T2ZNZW1vcnlFcnJvcihl
eGVjKTsKIApAQCAtNDIzLDcgKzQyMyw3IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFsdWUg
anNTcGxpY2VTdWJzdHJpbmdzV2l0aFNlcGFyYXRvcnMoRXhlY1N0YXRlKiBleGVjLCBKCiAgICAg
ICAgIH0KICAgICB9CiAKLSAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgaW1wbC5yZWxlYXNlKCkp
OworICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBXVEZNb3ZlKGltcGwpKTsKIH0KIAogc3RhdGlj
IEFMV0FZU19JTkxJTkUgRW5jb2RlZEpTVmFsdWUgcmVtb3ZlVXNpbmdSZWdFeHBTZWFyY2goVk0m
IHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpTU3RyaW5nKiBzdHJpbmcsIGNvbnN0IFN0cmluZyYgc291
cmNlLCBSZWdFeHAqIHJlZ0V4cCkKQEAgLTcyMiwxNCArNzIyLDE0IEBAIHN0YXRpYyBBTFdBWVNf
SU5MSU5FIEVuY29kZWRKU1ZhbHVlIHJlcGxhY2VVc2luZ1N0cmluZ1NlYXJjaChWTSYsIEV4ZWNT
dGF0ZSogZXhlCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CiAKICAgICBTdHJpbmdJbXBsKiBzdHJpbmdJbXBsID0gc3RyaW5nLmltcGwoKTsKLSAgICBTdHJp
bmcgbGVmdFBhcnQoU3RyaW5nSW1wbDo6Y3JlYXRlU3Vic3RyaW5nU2hhcmluZ0ltcGwoc3RyaW5n
SW1wbCwgMCwgbWF0Y2hTdGFydCkpOworICAgIFN0cmluZyBsZWZ0UGFydChTdHJpbmdJbXBsOjpj
cmVhdGVTdWJzdHJpbmdTaGFyaW5nSW1wbCgqc3RyaW5nSW1wbCwgMCwgbWF0Y2hTdGFydCkpOwog
CiAgICAgc2l6ZV90IG1hdGNoRW5kID0gbWF0Y2hTdGFydCArIHNlYXJjaFN0cmluZy5pbXBsKCkt
Pmxlbmd0aCgpOwogICAgIGludCBvdmVjdG9yWzJdID0geyBzdGF0aWNfY2FzdDxpbnQ+KG1hdGNo
U3RhcnQpLCAgc3RhdGljX2Nhc3Q8aW50PihtYXRjaEVuZCl9OwogICAgIFN0cmluZyBtaWRkbGVQ
YXJ0ID0gc3Vic3RpdHV0ZUJhY2tyZWZlcmVuY2VzKHJlcGxhY2VTdHJpbmcsIHN0cmluZywgb3Zl
Y3RvciwgMCk7CiAKICAgICBzaXplX3QgbGVmdExlbmd0aCA9IHN0cmluZ0ltcGwtPmxlbmd0aCgp
IC0gbWF0Y2hFbmQ7Ci0gICAgU3RyaW5nIHJpZ2h0UGFydChTdHJpbmdJbXBsOjpjcmVhdGVTdWJz
dHJpbmdTaGFyaW5nSW1wbChzdHJpbmdJbXBsLCBtYXRjaEVuZCwgbGVmdExlbmd0aCkpOworICAg
IFN0cmluZyByaWdodFBhcnQoU3RyaW5nSW1wbDo6Y3JlYXRlU3Vic3RyaW5nU2hhcmluZ0ltcGwo
KnN0cmluZ0ltcGwsIG1hdGNoRW5kLCBsZWZ0TGVuZ3RoKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShKU0M6OmpzU3RyaW5nKGV4ZWMsIGxlZnRQYXJ0LCBtaWRkbGVQYXJ0LCByaWdodFBh
cnQpKTsKIH0KIApAQCAtNzUxLDI2ICs3NTEsMjYgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJh
Y3RlclR5cGU+CiBzdGF0aWMgaW5saW5lIEpTVmFsdWUgcmVwZWF0Q2hhcmFjdGVyKEV4ZWNTdGF0
ZSogZXhlYywgQ2hhcmFjdGVyVHlwZSBjaGFyYWN0ZXIsIHVuc2lnbmVkIHJlcGVhdENvdW50KQog
ewogICAgIENoYXJhY3RlclR5cGUqIGJ1ZmZlciA9IG51bGxwdHI7Ci0gICAgUmVmUHRyPFN0cmlu
Z0ltcGw+IGltcGwgPSBTdHJpbmdJbXBsOjp0cnlDcmVhdGVVbmluaXRpYWxpemVkKHJlcGVhdENv
dW50LCBidWZmZXIpOworICAgIGF1dG8gaW1wbCA9IFN0cmluZ0ltcGw6OnRyeUNyZWF0ZVVuaW5p
dGlhbGl6ZWQocmVwZWF0Q291bnQsIGJ1ZmZlcik7CiAgICAgaWYgKCFpbXBsKQogICAgICAgICBy
ZXR1cm4gdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOwogCiAgICAgc3RkOjpmaWxsX24oYnVm
ZmVyLCByZXBlYXRDb3VudCwgY2hhcmFjdGVyKTsKIAotICAgIHJldHVybiBqc1N0cmluZyhleGVj
LCBpbXBsLnJlbGVhc2UoKSk7CisgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIFdURk1vdmUoaW1w
bCkpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KIHN0YXRpYyBpbmxp
bmUgSlNTdHJpbmcqIHJlcGVhdENoYXJhY3RlcihFeGVjU3RhdGUmIGV4ZWMsIENoYXJhY3RlclR5
cGUgY2hhcmFjdGVyLCB1bnNpZ25lZCByZXBlYXRDb3VudCkKIHsKICAgICBDaGFyYWN0ZXJUeXBl
KiBidWZmZXIgPSBudWxscHRyOwotICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBpbXBsID0gU3RyaW5n
SW1wbDo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChyZXBlYXRDb3VudCwgYnVmZmVyKTsKKyAgICBh
dXRvIGltcGwgPSBTdHJpbmdJbXBsOjp0cnlDcmVhdGVVbmluaXRpYWxpemVkKHJlcGVhdENvdW50
LCBidWZmZXIpOwogICAgIGlmICghaW1wbCkKICAgICAgICAgcmV0dXJuIHRocm93T3V0T2ZNZW1v
cnlFcnJvcigmZXhlYyksIG51bGxwdHI7CiAKICAgICBzdGQ6OmZpbGxfbihidWZmZXIsIHJlcGVh
dENvdW50LCBjaGFyYWN0ZXIpOwogCi0gICAgcmV0dXJuIGpzU3RyaW5nKCZleGVjLCBpbXBsLnJl
bGVhc2UoKSk7CisgICAgcmV0dXJuIGpzU3RyaW5nKCZleGVjLCBXVEZNb3ZlKGltcGwpKTsKIH0K
IAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNSZXBlYXRDaGFy
YWN0ZXIoRXhlY1N0YXRlKiBleGVjKQpAQCAtMTU3Miw3ICsxNTcyLDcgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNGb250c2l6ZShFeGVjU3RhdGUqIGV4ZWMp
CiAgICAgICAgIHVuc2lnbmVkIGJ1ZmZlclNpemUgPSAyMiArIHN0cmluZ1NpemU7CiAgICAgICAg
IC8vIEZJWE1FOiBTaG91bGQgd2UgaGF2ZSBhbiA4LWJpdCB2ZXJzaW9uIG9mIHRoaXMgY29kZSBw
YXRoIHRvbz8gT3IgbWF5YmUgb25seSBhbiA4LWJpdCB2ZXJzaW9uPwogICAgICAgICBVQ2hhciog
YnVmZmVyOwotICAgICAgICBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGltcGwgPSBTdHJpbmdJbXBs
Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKGJ1ZmZlclNpemUsIGJ1ZmZlcik7CisgICAgICAgIGF1
dG8gaW1wbCA9IFN0cmluZ0ltcGw6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoYnVmZmVyU2l6ZSwg
YnVmZmVyKTsKICAgICAgICAgaWYgKCFpbXBsKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgYnVmZmVyWzBdID0gJzwnOwpAQCAtMTU5
OCw3ICsxNTk4LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1
bmNGb250c2l6ZShFeGVjU3RhdGUqIGV4ZWMpCiAgICAgICAgIGJ1ZmZlclsxOSArIHN0cmluZ1Np
emVdID0gJ24nOwogICAgICAgICBidWZmZXJbMjAgKyBzdHJpbmdTaXplXSA9ICd0JzsKICAgICAg
ICAgYnVmZmVyWzIxICsgc3RyaW5nU2l6ZV0gPSAnPic7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNOb250cml2aWFsU3RyaW5nKGV4ZWMsIGltcGwpKTsKKyAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywgV1RGTW92ZShpbXBsKSkp
OwogICAgIH0KIAogICAgIFN0cmluZyBmb250U2l6ZSA9IGEwLnRvV1RGU3RyaW5nKGV4ZWMpOwpA
QCAtMTY0MSw3ICsxNjQxLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQ
cm90b0Z1bmNMaW5rKEV4ZWNTdGF0ZSogZXhlYykKICAgICB1bnNpZ25lZCBidWZmZXJTaXplID0g
MTUgKyBsaW5rVGV4dFNpemUgKyBzdHJpbmdTaXplOwogICAgIC8vIEZJWE1FOiBTaG91bGQgd2Ug
aGF2ZSBhbiA4LWJpdCB2ZXJzaW9uIG9mIHRoaXMgY29kZSBwYXRoIHRvbz8gT3IgbWF5YmUgb25s
eSBhbiA4LWJpdCB2ZXJzaW9uPwogICAgIFVDaGFyKiBidWZmZXI7Ci0gICAgUGFzc1JlZlB0cjxT
dHJpbmdJbXBsPiBpbXBsID0gU3RyaW5nSW1wbDo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChidWZm
ZXJTaXplLCBidWZmZXIpOworICAgIGF1dG8gaW1wbCA9IFN0cmluZ0ltcGw6OnRyeUNyZWF0ZVVu
aW5pdGlhbGl6ZWQoYnVmZmVyU2l6ZSwgYnVmZmVyKTsKICAgICBpZiAoIWltcGwpCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYnVmZmVyWzBdID0g
JzwnOwpAQCAtMTY2MSw3ICsxNjYxLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBz
dHJpbmdQcm90b0Z1bmNMaW5rKEV4ZWNTdGF0ZSogZXhlYykKICAgICBidWZmZXJbMTIgKyBsaW5r
VGV4dFNpemUgKyBzdHJpbmdTaXplXSA9ICcvJzsKICAgICBidWZmZXJbMTMgKyBsaW5rVGV4dFNp
emUgKyBzdHJpbmdTaXplXSA9ICdhJzsKICAgICBidWZmZXJbMTQgKyBsaW5rVGV4dFNpemUgKyBz
dHJpbmdTaXplXSA9ICc+JzsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTm9udHJpdmlh
bFN0cmluZyhleGVjLCBpbXBsKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc05vbnRy
aXZpYWxTdHJpbmcoZXhlYywgV1RGTW92ZShpbXBsKSkpOwogfQogCiBlbnVtIHsKQEAgLTE4Nzgs
NyArMTg3OCw3IEBAIHN0YXRpYyBKU1ZhbHVlIG5vcm1hbGl6ZShFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IFVDaGFyKiBzb3VyY2UsIHNpemVfdCBzb3VyY2VMZW5nCiAgICAgfQogCiAgICAgVUNoYXIq
IGJ1ZmZlciA9IG51bGxwdHI7Ci0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IGltcGwgPSBTdHJpbmdJ
bXBsOjp0cnlDcmVhdGVVbmluaXRpYWxpemVkKG5vcm1hbGl6ZWRTdHJpbmdMZW5ndGgsIGJ1ZmZl
cik7CisgICAgYXV0byBpbXBsID0gU3RyaW5nSW1wbDo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChu
b3JtYWxpemVkU3RyaW5nTGVuZ3RoLCBidWZmZXIpOwogICAgIGlmICghaW1wbCkKICAgICAgICAg
cmV0dXJuIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKIApAQCAtMTg4Nyw3ICsxODg3LDcg
QEAgc3RhdGljIEpTVmFsdWUgbm9ybWFsaXplKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgVUNoYXIq
IHNvdXJjZSwgc2l6ZV90IHNvdXJjZUxlbmcKICAgICBpZiAoVV9GQUlMVVJFKHN0YXR1cykpCiAg
ICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjKTsKIAotICAgIHJldHVybiBqc1N0cmlu
ZyhleGVjLCBpbXBsLnJlbGVhc2UoKSk7CisgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIFdURk1v
dmUoaW1wbCkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3Rv
RnVuY05vcm1hbGl6ZShFeGVjU3RhdGUqIGV4ZWMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0
Zi9NZXRhQWxsb2NhdG9yLmNwcCBiL1NvdXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0b3IuY3BwCmlu
ZGV4IGRkMDY1OTIwNThmMmQyMThlOTc2YjQ2NGZjMjM5OGJiMDU5NzA2MjkuLjE2NDNjMWE0OWU5
YmQ0NzYxNGFmNTNiN2I5OWUzMDIyZWYwYTgwZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3Rm
L01ldGFBbGxvY2F0b3IuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0b3IuY3Bw
CkBAIC0xNDgsMTIgKzE0OCwxMiBAQCBNZXRhQWxsb2NhdG9yOjpNZXRhQWxsb2NhdG9yKHNpemVf
dCBhbGxvY2F0aW9uR3JhbnVsZSwgc2l6ZV90IHBhZ2VTaXplKQogICAgIEFTU0VSVChzdGF0aWNf
Y2FzdDxzaXplX3Q+KDEpIDw8IG1fbG9nQWxsb2NhdGlvbkdyYW51bGUgPT0gbV9hbGxvY2F0aW9u
R3JhbnVsZSk7CiB9CiAKLVBhc3NSZWZQdHI8TWV0YUFsbG9jYXRvckhhbmRsZT4gTWV0YUFsbG9j
YXRvcjo6YWxsb2NhdGUoc2l6ZV90IHNpemVJbkJ5dGVzLCB2b2lkKiBvd25lclVJRCkKK1JlZlB0
cjxNZXRhQWxsb2NhdG9ySGFuZGxlPiBNZXRhQWxsb2NhdG9yOjphbGxvY2F0ZShzaXplX3Qgc2l6
ZUluQnl0ZXMsIHZvaWQqIG93bmVyVUlEKQogewogICAgIExvY2tIb2xkZXIgbG9ja2VyKCZtX2xv
Y2spOwogCiAgICAgaWYgKCFzaXplSW5CeXRlcykKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgIAogICAgIHNpemVJbkJ5dGVzID0gcm91bmRVcChzaXplSW5C
eXRlcyk7CiAgICAgCkBAIC0xNjQsNyArMTY0LDcgQEAgUGFzc1JlZlB0cjxNZXRhQWxsb2NhdG9y
SGFuZGxlPiBNZXRhQWxsb2NhdG9yOjphbGxvY2F0ZShzaXplX3Qgc2l6ZUluQnl0ZXMsIHZvaWQK
ICAgICAgICAgCiAgICAgICAgIHN0YXJ0ID0gYWxsb2NhdGVOZXdTcGFjZShudW1iZXJPZlBhZ2Vz
KTsKICAgICAgICAgaWYgKCFzdGFydCkKLSAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIAogICAgICAgICBBU1NFUlQobnVtYmVyT2ZQYWdl
cyA+PSByZXF1ZXN0ZWROdW1iZXJPZlBhZ2VzKTsKICAgICAgICAgCkBAIC0xODYsMTIgKzE4Niwx
MiBAQCBQYXNzUmVmUHRyPE1ldGFBbGxvY2F0b3JIYW5kbGU+IE1ldGFBbGxvY2F0b3I6OmFsbG9j
YXRlKHNpemVfdCBzaXplSW5CeXRlcywgdm9pZAogICAgIG1fbnVtQWxsb2NhdGlvbnMrKzsKICNl
bmRpZgogCi0gICAgTWV0YUFsbG9jYXRvckhhbmRsZSogaGFuZGxlID0gbmV3IE1ldGFBbGxvY2F0
b3JIYW5kbGUodGhpcywgc3RhcnQsIHNpemVJbkJ5dGVzLCBvd25lclVJRCk7CisgICAgYXV0byBo
YW5kbGUgPSBhZG9wdFJlZihuZXcgTWV0YUFsbG9jYXRvckhhbmRsZSh0aGlzLCBzdGFydCwgc2l6
ZUluQnl0ZXMsIG93bmVyVUlEKSk7CiAKICAgICBpZiAoVU5MSUtFTFkoISFtX3RyYWNrZXIpKQot
ICAgICAgICBtX3RyYWNrZXItPm5vdGlmeShoYW5kbGUpOworICAgICAgICBtX3RyYWNrZXItPm5v
dGlmeShoYW5kbGUuZ2V0KCkpOwogCi0gICAgcmV0dXJuIGFkb3B0UmVmKGhhbmRsZSk7CisgICAg
cmV0dXJuIGhhbmRsZTsKIH0KIAogTWV0YUFsbG9jYXRvcjo6U3RhdGlzdGljcyBNZXRhQWxsb2Nh
dG9yOjpjdXJyZW50U3RhdGlzdGljcygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9NZXRh
QWxsb2NhdG9yLmggYi9Tb3VyY2UvV1RGL3d0Zi9NZXRhQWxsb2NhdG9yLmgKaW5kZXggOWRkMzc1
Y2FkNTRlY2EzMGVmN2E0ZWY5ZDcyMjA0NDc5YzFjMGQ2My4uODczOTAxYmRlNmUxZjkwYjQ3MWJk
MTNhN2U4NjlkNzcxYjJjMDIwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvTWV0YUFsbG9j
YXRvci5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0b3IuaApAQCAtNjgsNyArNjgs
NyBAQCBwdWJsaWM6CiAgICAgCiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgfk1ldGFB
bGxvY2F0b3IoKTsKICAgICAKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgUGFzc1JlZlB0cjxNZXRh
QWxsb2NhdG9ySGFuZGxlPiBhbGxvY2F0ZShzaXplX3Qgc2l6ZUluQnl0ZXMsIHZvaWQqIG93bmVy
VUlEKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgUmVmUHRyPE1ldGFBbGxvY2F0b3JIYW5kbGU+
IGFsbG9jYXRlKHNpemVfdCBzaXplSW5CeXRlcywgdm9pZCogb3duZXJVSUQpOwogCiAgICAgdm9p
ZCB0cmFja0FsbG9jYXRpb25zKE1ldGFBbGxvY2F0b3JUcmFja2VyKiB0cmFja2VyKQogICAgIHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1BhcmFsbGVsSm9ic0dlbmVyaWMuaCBiL1NvdXJj
ZS9XVEYvd3RmL1BhcmFsbGVsSm9ic0dlbmVyaWMuaAppbmRleCAzZTJlMjlkNjFhYTU5Y2FmMWMy
YWQ1OGEyN2QzZDkyNTI5ZDBkZDg0Li41MmY0Nzk5ZjE4NmIxNDQyYzg1N2Q1MDZiMzI0MzUyMDEy
NTgzNTdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9QYXJhbGxlbEpvYnNHZW5lcmljLmgK
KysrIGIvU291cmNlL1dURi93dGYvUGFyYWxsZWxKb2JzR2VuZXJpYy5oCkBAIC02Niw5ICs2Niw5
IEBAIHB1YmxpYzoKIAogICAgICAgICB2b2lkIHdhaXRGb3JGaW5pc2goKTsKIAotICAgICAgICBz
dGF0aWMgUGFzc1JlZlB0cjxUaHJlYWRQcml2YXRlPiBjcmVhdGUoKQorICAgICAgICBzdGF0aWMg
UmVmPFRocmVhZFByaXZhdGU+IGNyZWF0ZSgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgVGhyZWFkUHJpdmF0ZSgpKTsKKyAgICAgICAgICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IFRocmVhZFByaXZhdGUoKSk7CiAgICAgICAgIH0KIAogICAgICAgICBzdGF0aWMg
dm9pZCB3b3JrZXJUaHJlYWQodm9pZCopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUGFz
c1JlZlB0ci5oIGIvU291cmNlL1dURi93dGYvUGFzc1JlZlB0ci5oCmluZGV4IGNlYjUyODc2MjQz
NmQxYzc0ZDIyNjBkMGEyY2M5ZDZkNWQzMTA4NTAuLjhmZDU3YmM1ZTdlN2QxZDM3NjJiYTQ3Njc5
MzBlYzViMzFlMTJiOGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1Bhc3NSZWZQdHIuaAor
KysgYi9Tb3VyY2UvV1RGL3d0Zi9QYXNzUmVmUHRyLmgKQEAgLTIxLDE0ICsyMSwxMiBAQAogI2lm
bmRlZiBXVEZfUGFzc1JlZlB0cl9oCiAjZGVmaW5lIFdURl9QYXNzUmVmUHRyX2gKIAotI2luY2x1
ZGUgPHd0Zi9HZXRQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmLmg+CiAKIG5hbWVzcGFjZSBXVEYg
ewogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgUmVmUHRyOwogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+IGNsYXNzIFBhc3NSZWZQdHI7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4g
UGFzc1JlZlB0cjxUPiBhZG9wdFJlZihUKik7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBB
TFdBWVNfSU5MSU5FIHZvaWQgcmVmSWZOb3ROdWxsKFQqIHB0cikKICAgICB7CkBAIC01OSw2ICs1
Nyw3IEBAIG5hbWVzcGFjZSBXVEYgewogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IFBh
c3NSZWZQdHIoY29uc3QgUmVmUHRyPFU+Jik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+
IFBhc3NSZWZQdHIoUmVmPFU+JiYgcmVmZXJlbmNlKSA6IG1fcHRyKCZyZWZlcmVuY2UubGVha1Jl
ZigpKSB7IH0KKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gUGFzc1JlZlB0cihSZWZQdHI8
VT4mJiByZWZlcmVuY2UpIDogbV9wdHIocmVmZXJlbmNlLmxlYWtSZWYoKSkgeyB9CiAKICAgICAg
ICAgVCogZ2V0KCkgY29uc3QgeyByZXR1cm4gbV9wdHI7IH0KIApAQCAtNzMsMTQgKzcyLDkgQEAg
bmFtZXNwYWNlIFdURiB7CiAgICAgICAgIHR5cGVkZWYgVCogKFBhc3NSZWZQdHI6OipVbnNwZWNp
ZmllZEJvb2xUeXBlKTsKICAgICAgICAgb3BlcmF0b3IgVW5zcGVjaWZpZWRCb29sVHlwZSgpIGNv
bnN0IHsgcmV0dXJuIG1fcHRyID8gJlBhc3NSZWZQdHI6Om1fcHRyIDogbnVsbHB0cjsgfQogCi0g
ICAgICAgIGZyaWVuZCBQYXNzUmVmUHRyIGFkb3B0UmVmPFQ+KFQqKTsKLQogICAgIHByaXZhdGU6
CiAgICAgICAgIFBhc3NSZWZQdHImIG9wZXJhdG9yPShjb25zdCBQYXNzUmVmUHRyJikgPSBkZWxl
dGU7CiAKLSAgICAgICAgZW51bSBBZG9wdFRhZyB7IEFkb3B0IH07Ci0gICAgICAgIFBhc3NSZWZQ
dHIoVCogcHRyLCBBZG9wdFRhZykgOiBtX3B0cihwdHIpIHsgfQotCiAgICAgICAgIG11dGFibGUg
VCogbV9wdHI7CiAgICAgfTsKICAgICAKQEAgLTE0NSwxNiArMTM5LDEwIEBAIG5hbWVzcGFjZSBX
VEYgewogICAgIHsgCiAgICAgICAgIHJldHVybiBhICE9IGIuZ2V0KCk7IAogICAgIH0KLSAgICAK
LSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgUGFzc1JlZlB0cjxUPiBhZG9wdFJlZihU
KiBwKQotICAgIHsKLSAgICAgICAgYWRvcHRlZChwKTsKLSAgICAgICAgcmV0dXJuIFBhc3NSZWZQ
dHI8VD4ocCwgUGFzc1JlZlB0cjxUPjo6QWRvcHQpOwotICAgIH0KIAogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBQYXNzUmVmUHRyPFQ+IHN0YXRpY19wb2ludGVy
X2Nhc3QoY29uc3QgUGFzc1JlZlB0cjxVPiYgcCkgCiAgICAgeyAKLSAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKHN0YXRpY19jYXN0PFQqPihwLmxlYWtSZWYoKSkpOyAKKyAgICAgICAgcmV0dXJuIFBh
c3NSZWZQdHI8VD4oc3RhdGljX2Nhc3Q8VCo+KHAuZ2V0KCkpKTsKICAgICB9CiAKICAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4gc3RydWN0IElzU21hcnRQdHI8UGFzc1JlZlB0cjxUPj4gewpAQCAt
MTY0LDcgKzE1Miw2IEBAIG5hbWVzcGFjZSBXVEYgewogfSAvLyBuYW1lc3BhY2UgV1RGCiAKIHVz
aW5nIFdURjo6UGFzc1JlZlB0cjsKLXVzaW5nIFdURjo6YWRvcHRSZWY7CiB1c2luZyBXVEY6OnN0
YXRpY19wb2ludGVyX2Nhc3Q7CiAKICNlbmRpZiAvLyBXVEZfUGFzc1JlZlB0cl9oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV1RGL3d0Zi9SZWZQdHIuaCBiL1NvdXJjZS9XVEYvd3RmL1JlZlB0ci5oCmlu
ZGV4IGVkNTFlZTZlNzQyOWFmZGE4ZWUzOTA1M2VhNWFlNmJjMWVlMDA2YWUuLjExY2FkNDlmMTI3
ODk0NDIwMGVhYWE0NDQwOTBlNjBkNmQxNTZlNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3Rm
L1JlZlB0ci5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1JlZlB0ci5oCkBAIC0zMSw2ICszMSw5IEBA
CiAKIG5hbWVzcGFjZSBXVEYgewogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBSZWZQdHI7
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBSZWZQdHI8VD4gYWRvcHRSZWYoVCopOworCiBlbnVtIEhh
c2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUgeyBIYXNoVGFibGVEZWxldGVkVmFsdWUgfTsKIAogdGVt
cGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgUmVmUHRyIHsKQEAgLTYyLDcgKzY1LDcgQEAgcHVibGlj
OgogCiAgICAgVCogZ2V0KCkgY29uc3QgeyByZXR1cm4gbV9wdHI7IH0KICAgICAKLSAgICBQYXNz
UmVmUHRyPFQ+IHJlbGVhc2UoKSB7IFBhc3NSZWZQdHI8VD4gdG1wID0gYWRvcHRSZWYobV9wdHIp
OyBtX3B0ciA9IG51bGxwdHI7IHJldHVybiB0bXA7IH0KKyAgICBSZWZQdHI8VD4gcmVsZWFzZSgp
IHsgUmVmUHRyPFQ+IHRtcCA9IGFkb3B0UmVmKG1fcHRyKTsgbV9wdHIgPSBudWxscHRyOyByZXR1
cm4gdG1wOyB9CiAgICAgUmVmPFQ+IHJlbGVhc2VOb25OdWxsKCkgeyBBU1NFUlQobV9wdHIpOyBS
ZWY8VD4gdG1wKGFkb3B0UmVmKCptX3B0cikpOyBtX3B0ciA9IG51bGxwdHI7IHJldHVybiB0bXA7
IH0KIAogICAgIFQqIGxlYWtSZWYoKSBXQVJOX1VOVVNFRF9SRVRVUk47CkBAIC05OCw2ICsxMDEs
MTEgQEAgcHVibGljOgogI2VuZGlmCiAKIHByaXZhdGU6CisgICAgZnJpZW5kIFJlZlB0ciBhZG9w
dFJlZjxUPihUKik7CisKKyAgICBlbnVtIEFkb3B0VGFnIHsgQWRvcHQgfTsKKyAgICBSZWZQdHIo
VCogcHRyLCBBZG9wdFRhZykgOiBtX3B0cihwdHIpIHsgfQorCiAgICAgVCogbV9wdHI7CiB9Owog
CkBAIC0yMjgsOSArMjM2LDE2IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdHJ1Y3QgSXNTbWFy
dFB0cjxSZWZQdHI8VD4+IHsKICAgICBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7CiB9
OwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgUmVmUHRyPFQ+IGFkb3B0UmVmKFQqIHAp
Cit7CisgICAgYWRvcHRlZChwKTsKKyAgICByZXR1cm4gUmVmUHRyPFQ+KHAsIFJlZlB0cjxUPjo6
QWRvcHQpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAogdXNpbmcgV1RGOjpSZWZQdHI7Cit1
c2luZyBXVEY6OmFkb3B0UmVmOwogdXNpbmcgV1RGOjpzdGF0aWNfcG9pbnRlcl9jYXN0OwogCiAj
ZW5kaWYgLy8gV1RGX1JlZlB0cl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0
b21pY1N0cmluZ0ltcGwuY3BwIGIvU291cmNlL1dURi93dGYvdGV4dC9BdG9taWNTdHJpbmdJbXBs
LmNwcAppbmRleCA5MDk1MzNjOTkwOGZlNjAwZDFlOGI5ZTcwM2JjZDhlMzQ4Mzk5MjdjLi5hYzYw
YjYzM2Y3ZTI0MTExZjc0OGMzNjMyMzZjNWUwYWJlNjcyZTZmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V1RGL3d0Zi90ZXh0L0F0b21pY1N0cmluZ0ltcGwuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL3Rl
eHQvQXRvbWljU3RyaW5nSW1wbC5jcHAKQEAgLTIxOSw3ICsyMTksNyBAQCBzdHJ1Y3QgSGFzaEFu
ZFVURjhDaGFyYWN0ZXJzVHJhbnNsYXRvciB7CiAgICAgc3RhdGljIHZvaWQgdHJhbnNsYXRlKFN0
cmluZ0ltcGwqJiBsb2NhdGlvbiwgY29uc3QgSGFzaEFuZFVURjhDaGFyYWN0ZXJzJiBidWZmZXIs
IHVuc2lnbmVkIGhhc2gpCiAgICAgewogICAgICAgICBVQ2hhciogdGFyZ2V0OwotICAgICAgICBS
ZWZQdHI8U3RyaW5nSW1wbD4gbmV3U3RyaW5nID0gU3RyaW5nSW1wbDo6Y3JlYXRlVW5pbml0aWFs
aXplZChidWZmZXIudXRmMTZMZW5ndGgsIHRhcmdldCk7CisgICAgICAgIGF1dG8gbmV3U3RyaW5n
ID0gU3RyaW5nSW1wbDo6Y3JlYXRlVW5pbml0aWFsaXplZChidWZmZXIudXRmMTZMZW5ndGgsIHRh
cmdldCk7CiAKICAgICAgICAgYm9vbCBpc0FsbEFTQ0lJOwogICAgICAgICBjb25zdCBjaGFyKiBz
b3VyY2UgPSBidWZmZXIuY2hhcmFjdGVyczsKQEAgLTIyOSw3ICsyMjksNyBAQCBzdHJ1Y3QgSGFz
aEFuZFVURjhDaGFyYWN0ZXJzVHJhbnNsYXRvciB7CiAgICAgICAgIGlmIChpc0FsbEFTQ0lJKQog
ICAgICAgICAgICAgbmV3U3RyaW5nID0gU3RyaW5nSW1wbDo6Y3JlYXRlKGJ1ZmZlci5jaGFyYWN0
ZXJzLCBidWZmZXIubGVuZ3RoKTsKIAotICAgICAgICBsb2NhdGlvbiA9IG5ld1N0cmluZy5sZWFr
UmVmKCk7CisgICAgICAgIGxvY2F0aW9uID0gJm5ld1N0cmluZy5sZWFrUmVmKCk7CiAgICAgICAg
IGxvY2F0aW9uLT5zZXRIYXNoKGhhc2gpOwogICAgICAgICBsb2NhdGlvbi0+c2V0SXNBdG9taWMo
dHJ1ZSk7CiAgICAgfQpAQCAtMjg0LDcgKzI4NCw3IEBAIHN0cnVjdCBTdWJzdHJpbmdMb2NhdGlv
biB7CiBzdHJ1Y3QgU3Vic3RyaW5nVHJhbnNsYXRvciB7CiAgICAgc3RhdGljIHZvaWQgdHJhbnNs
YXRlKFN0cmluZ0ltcGwqJiBsb2NhdGlvbiwgY29uc3QgU3Vic3RyaW5nTG9jYXRpb24mIGJ1ZmZl
ciwgdW5zaWduZWQgaGFzaCkKICAgICB7Ci0gICAgICAgIGxvY2F0aW9uID0gJlN0cmluZ0ltcGw6
OmNyZWF0ZVN1YnN0cmluZ1NoYXJpbmdJbXBsKGJ1ZmZlci5iYXNlU3RyaW5nLCBidWZmZXIuc3Rh
cnQsIGJ1ZmZlci5sZW5ndGgpLmxlYWtSZWYoKTsKKyAgICAgICAgbG9jYXRpb24gPSAmU3RyaW5n
SW1wbDo6Y3JlYXRlU3Vic3RyaW5nU2hhcmluZ0ltcGwoKmJ1ZmZlci5iYXNlU3RyaW5nLCBidWZm
ZXIuc3RhcnQsIGJ1ZmZlci5sZW5ndGgpLmxlYWtSZWYoKTsKICAgICAgICAgbG9jYXRpb24tPnNl
dEhhc2goaGFzaCk7CiAgICAgICAgIGxvY2F0aW9uLT5zZXRJc0F0b21pYyh0cnVlKTsKICAgICB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0NTdHJpbmcuY3BwIGIvU291cmNlL1dU
Ri93dGYvdGV4dC9DU3RyaW5nLmNwcAppbmRleCBkMWYxODZiNGFmMjRiMjA1YzZlNmE5YmFmOGYx
YjgwZGM3ZDZkNGRiLi4yMWIzN2ViYThjMjU0Mzk2ZmYxZmJmYzEwNWNmMzM4M2Q0NjBhODI0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0NTdHJpbmcuY3BwCisrKyBiL1NvdXJjZS9X
VEYvd3RmL3RleHQvQ1N0cmluZy5jcHAKQEAgLTMyLDE0ICszMiwxNCBAQAogCiBuYW1lc3BhY2Ug
V1RGIHsKIAotUGFzc1JlZlB0cjxDU3RyaW5nQnVmZmVyPiBDU3RyaW5nQnVmZmVyOjpjcmVhdGVV
bmluaXRpYWxpemVkKHNpemVfdCBsZW5ndGgpCitSZWY8Q1N0cmluZ0J1ZmZlcj4gQ1N0cmluZ0J1
ZmZlcjo6Y3JlYXRlVW5pbml0aWFsaXplZChzaXplX3QgbGVuZ3RoKQogewogICAgIFJFTEVBU0Vf
QVNTRVJUKGxlbmd0aCA8IChzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgLSBz
aXplb2YoQ1N0cmluZ0J1ZmZlcikpKTsKIAogICAgIC8vIFRoZSArMSBpcyBmb3IgdGhlIHRlcm1p
bmF0aW5nIG51bGwgY2hhcmFjdGVyLgogICAgIHNpemVfdCBzaXplID0gc2l6ZW9mKENTdHJpbmdC
dWZmZXIpICsgbGVuZ3RoICsgMTsKICAgICBDU3RyaW5nQnVmZmVyKiBzdHJpbmdCdWZmZXIgPSBz
dGF0aWNfY2FzdDxDU3RyaW5nQnVmZmVyKj4oZmFzdE1hbGxvYyhzaXplKSk7Ci0gICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyAoTm90TnVsbCwgc3RyaW5nQnVmZmVyKSBDU3RyaW5nQnVmZmVyKGxlbmd0
aCkpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IChOb3ROdWxsLCBzdHJpbmdCdWZmZXIpIENT
dHJpbmdCdWZmZXIobGVuZ3RoKSk7CiB9CiAKIENTdHJpbmc6OkNTdHJpbmcoY29uc3QgY2hhciog
c3RyKQpAQCAtNzYsNyArNzYsNyBAQCBjaGFyKiBDU3RyaW5nOjptdXRhYmxlRGF0YSgpCiAgICAg
ICAgIHJldHVybiAwOwogICAgIHJldHVybiBtX2J1ZmZlci0+bXV0YWJsZURhdGEoKTsKIH0KLSAg
ICAKKwogQ1N0cmluZyBDU3RyaW5nOjpuZXdVbmluaXRpYWxpemVkKHNpemVfdCBsZW5ndGgsIGNo
YXIqJiBjaGFyYWN0ZXJCdWZmZXIpCiB7CiAgICAgQ1N0cmluZyByZXN1bHQ7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0NTdHJpbmcuaCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvQ1N0
cmluZy5oCmluZGV4IDI5ZDNiMGVmMWI2OWQ3YTRiNzIwNmRhMGM4YmZmODI1MGRkYWZhZTcuLjRk
OGQ4MDM5OWM2OTAwYjEzM2U3MTVjNDMwN2Q4ZDQyNDM4M2Q2ZmIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XVEYvd3RmL3RleHQvQ1N0cmluZy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvQ1N0cmlu
Zy5oCkBAIC0yOCw3ICsyOCw3IEBACiAKICNpbmNsdWRlIDx3dGYvSGFzaEZ1bmN0aW9ucy5oPgog
I2luY2x1ZGUgPHd0Zi9IYXNoVHJhaXRzLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4K
KyNpbmNsdWRlIDx3dGYvUmVmLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KIAogbmFt
ZXNwYWNlIFdURiB7CkBAIC00Myw3ICs0Myw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgZnJp
ZW5kIGNsYXNzIENTdHJpbmc7CiAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxDU3RyaW5nQnVmZmVy
PiBjcmVhdGVVbmluaXRpYWxpemVkKHNpemVfdCBsZW5ndGgpOworICAgIHN0YXRpYyBSZWY8Q1N0
cmluZ0J1ZmZlcj4gY3JlYXRlVW5pbml0aWFsaXplZChzaXplX3QgbGVuZ3RoKTsKIAogICAgIENT
dHJpbmdCdWZmZXIoc2l6ZV90IGxlbmd0aCkgOiBtX2xlbmd0aChsZW5ndGgpIHsgfQogICAgIGNo
YXIqIG11dGFibGVEYXRhKCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdF9wdHI8Y2hhcio+KHRo
aXMgKyAxKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdCdWlsZGVy
LmNwcCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nQnVpbGRlci5jcHAKaW5kZXggMWQ2YWU2
MjFkMTg5NjFlYzkxM2NkN2RkYzMwMGViYTNiZWRmYjhjNS4uZmMxOGM0MmM1YjVjNDk1YjdkMTEy
M2ZkZDdhNDRmZDI5MjBlODJhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJp
bmdCdWlsZGVyLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuY3Bw
CkBAIC01OSw3ICs1OSw3IEBAIHZvaWQgU3RyaW5nQnVpbGRlcjo6cmVpZnlTdHJpbmcoKSBjb25z
dAogICAgIGlmIChtX2xlbmd0aCA9PSBtX2J1ZmZlci0+bGVuZ3RoKCkpCiAgICAgICAgIG1fc3Ry
aW5nID0gbV9idWZmZXIuZ2V0KCk7CiAgICAgZWxzZQotICAgICAgICBtX3N0cmluZyA9IFN0cmlu
Z0ltcGw6OmNyZWF0ZVN1YnN0cmluZ1NoYXJpbmdJbXBsKG1fYnVmZmVyLCAwLCBtX2xlbmd0aCk7
CisgICAgICAgIG1fc3RyaW5nID0gU3RyaW5nSW1wbDo6Y3JlYXRlU3Vic3RyaW5nU2hhcmluZ0lt
cGwoKm1fYnVmZmVyLCAwLCBtX2xlbmd0aCk7CiB9CiAKIHZvaWQgU3RyaW5nQnVpbGRlcjo6cmVz
aXplKHVuc2lnbmVkIG5ld1NpemUpCkBAIC04OCw3ICs4OCw3IEBAIHZvaWQgU3RyaW5nQnVpbGRl
cjo6cmVzaXplKHVuc2lnbmVkIG5ld1NpemUpCiAgICAgQVNTRVJUKG1fbGVuZ3RoID09IG1fc3Ry
aW5nLmxlbmd0aCgpKTsKICAgICBBU1NFUlQobmV3U2l6ZSA8IG1fc3RyaW5nLmxlbmd0aCgpKTsK
ICAgICBtX2xlbmd0aCA9IG5ld1NpemU7Ci0gICAgbV9zdHJpbmcgPSBTdHJpbmdJbXBsOjpjcmVh
dGVTdWJzdHJpbmdTaGFyaW5nSW1wbChtX3N0cmluZy5pbXBsKCksIDAsIG5ld1NpemUpOworICAg
IG1fc3RyaW5nID0gU3RyaW5nSW1wbDo6Y3JlYXRlU3Vic3RyaW5nU2hhcmluZ0ltcGwoKm1fc3Ry
aW5nLmltcGwoKSwgMCwgbmV3U2l6ZSk7CiB9CiAKIC8vIEFsbG9jYXRlIGEgbmV3IDggYml0IGJ1
ZmZlciwgY29weWluZyBpbiBjdXJyZW50Q2hhcmFjdGVycyAodGhlc2UgbWF5IGNvbWUgZnJvbSBl
aXRoZXIgbV9zdHJpbmcKQEAgLTE0Nyw3ICsxNDcsNyBAQCB2b2lkIFN0cmluZ0J1aWxkZXI6OnJl
YWxsb2NhdGVCdWZmZXI8TENoYXI+KHVuc2lnbmVkIHJlcXVpcmVkTGVuZ3RoKQogICAgIEFTU0VS
VChtX2J1ZmZlci0+aXM4Qml0KCkpOwogICAgIAogICAgIGlmIChtX2J1ZmZlci0+aGFzT25lUmVm
KCkpCi0gICAgICAgIG1fYnVmZmVyID0gU3RyaW5nSW1wbDo6cmVhbGxvY2F0ZShtX2J1ZmZlci5y
ZWxlYXNlKCksIHJlcXVpcmVkTGVuZ3RoLCBtX2J1ZmZlckNoYXJhY3RlcnM4KTsKKyAgICAgICAg
bV9idWZmZXIgPSBTdHJpbmdJbXBsOjpyZWFsbG9jYXRlKG1fYnVmZmVyLnJlbGVhc2VOb25OdWxs
KCksIHJlcXVpcmVkTGVuZ3RoLCBtX2J1ZmZlckNoYXJhY3RlcnM4KTsKICAgICBlbHNlCiAgICAg
ICAgIGFsbG9jYXRlQnVmZmVyKG1fYnVmZmVyLT5jaGFyYWN0ZXJzOCgpLCByZXF1aXJlZExlbmd0
aCk7CiB9CkBAIC0xNjIsNyArMTYyLDcgQEAgdm9pZCBTdHJpbmdCdWlsZGVyOjpyZWFsbG9jYXRl
QnVmZmVyPFVDaGFyPih1bnNpZ25lZCByZXF1aXJlZExlbmd0aCkKICAgICBpZiAobV9idWZmZXIt
PmlzOEJpdCgpKQogICAgICAgICBhbGxvY2F0ZUJ1ZmZlclVwQ29udmVydChtX2J1ZmZlci0+Y2hh
cmFjdGVyczgoKSwgcmVxdWlyZWRMZW5ndGgpOwogICAgIGVsc2UgaWYgKG1fYnVmZmVyLT5oYXNP
bmVSZWYoKSkKLSAgICAgICAgbV9idWZmZXIgPSBTdHJpbmdJbXBsOjpyZWFsbG9jYXRlKG1fYnVm
ZmVyLnJlbGVhc2UoKSwgcmVxdWlyZWRMZW5ndGgsIG1fYnVmZmVyQ2hhcmFjdGVyczE2KTsKKyAg
ICAgICAgbV9idWZmZXIgPSBTdHJpbmdJbXBsOjpyZWFsbG9jYXRlKG1fYnVmZmVyLnJlbGVhc2VO
b25OdWxsKCksIHJlcXVpcmVkTGVuZ3RoLCBtX2J1ZmZlckNoYXJhY3RlcnMxNik7CiAgICAgZWxz
ZQogICAgICAgICBhbGxvY2F0ZUJ1ZmZlcihtX2J1ZmZlci0+Y2hhcmFjdGVyczE2KCksIHJlcXVp
cmVkTGVuZ3RoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1w
bC5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuY3BwCmluZGV4IGZjMTYyNzRl
YzA0YmU3NGNjMmJmOWYwZjQ5MWEyMjMyNGUzNzhkMzIuLjJkMGRhMzVjYzU0ZTUwZjA5OTFhYzY0
YzQ1MTQxMzk4YzNjYTI1NjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5n
SW1wbC5jcHAKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmNwcApAQCAtMjA0
LDggKzIwNCw4IEBAIFJlZjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpjcmVhdGVVbmluaXRpYWxp
emVkKHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIqJiBkYXRhKQogfQogCiB0ZW1wbGF0ZSA8dHlwZW5h
bWUgQ2hhclR5cGU+Ci1pbmxpbmUgUmVmPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OnJlYWxsb2Nh
dGVJbnRlcm5hbChQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IG9yaWdpbmFsU3RyaW5nLCB1bnNpZ25l
ZCBsZW5ndGgsIENoYXJUeXBlKiYgZGF0YSkKLXsgICAKK2lubGluZSBSZWY8U3RyaW5nSW1wbD4g
U3RyaW5nSW1wbDo6cmVhbGxvY2F0ZUludGVybmFsKFJlZjxTdHJpbmdJbXBsPiYmIG9yaWdpbmFs
U3RyaW5nLCB1bnNpZ25lZCBsZW5ndGgsIENoYXJUeXBlKiYgZGF0YSkKK3sKICAgICBBU1NFUlQo
b3JpZ2luYWxTdHJpbmctPmhhc09uZVJlZigpKTsKICAgICBBU1NFUlQob3JpZ2luYWxTdHJpbmct
PmJ1ZmZlck93bmVyc2hpcCgpID09IEJ1ZmZlckludGVybmFsKTsKIApAQCAtMjE5LDIyICsyMTks
MjIgQEAgaW5saW5lIFJlZjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpyZWFsbG9jYXRlSW50ZXJu
YWwoUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBvcmkKICAgICAgICAgQ1JBU0goKTsKIAogICAgIG9y
aWdpbmFsU3RyaW5nLT5+U3RyaW5nSW1wbCgpOwotICAgIFN0cmluZ0ltcGwqIHN0cmluZyA9IHN0
YXRpY19jYXN0PFN0cmluZ0ltcGwqPihmYXN0UmVhbGxvYyhvcmlnaW5hbFN0cmluZy5sZWFrUmVm
KCksIGFsbG9jYXRpb25TaXplPENoYXJUeXBlPihsZW5ndGgpKSk7CisgICAgYXV0byogc3RyaW5n
ID0gc3RhdGljX2Nhc3Q8U3RyaW5nSW1wbCo+KGZhc3RSZWFsbG9jKCZvcmlnaW5hbFN0cmluZy5s
ZWFrUmVmKCksIGFsbG9jYXRpb25TaXplPENoYXJUeXBlPihsZW5ndGgpKSk7CiAKICAgICBkYXRh
ID0gc3RyaW5nLT50YWlsUG9pbnRlcjxDaGFyVHlwZT4oKTsKICAgICByZXR1cm4gY29uc3RydWN0
SW50ZXJuYWw8Q2hhclR5cGU+KHN0cmluZywgbGVuZ3RoKTsKIH0KIAotUmVmPFN0cmluZ0ltcGw+
IFN0cmluZ0ltcGw6OnJlYWxsb2NhdGUoUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBvcmlnaW5hbFN0
cmluZywgdW5zaWduZWQgbGVuZ3RoLCBMQ2hhciomIGRhdGEpCitSZWY8U3RyaW5nSW1wbD4gU3Ry
aW5nSW1wbDo6cmVhbGxvY2F0ZShSZWY8U3RyaW5nSW1wbD4mJiBvcmlnaW5hbFN0cmluZywgdW5z
aWduZWQgbGVuZ3RoLCBMQ2hhciomIGRhdGEpCiB7CiAgICAgQVNTRVJUKG9yaWdpbmFsU3RyaW5n
LT5pczhCaXQoKSk7Ci0gICAgcmV0dXJuIHJlYWxsb2NhdGVJbnRlcm5hbChvcmlnaW5hbFN0cmlu
ZywgbGVuZ3RoLCBkYXRhKTsKKyAgICByZXR1cm4gcmVhbGxvY2F0ZUludGVybmFsKFdURk1vdmUo
b3JpZ2luYWxTdHJpbmcpLCBsZW5ndGgsIGRhdGEpOwogfQogCi1SZWY8U3RyaW5nSW1wbD4gU3Ry
aW5nSW1wbDo6cmVhbGxvY2F0ZShQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IG9yaWdpbmFsU3RyaW5n
LCB1bnNpZ25lZCBsZW5ndGgsIFVDaGFyKiYgZGF0YSkKK1JlZjxTdHJpbmdJbXBsPiBTdHJpbmdJ
bXBsOjpyZWFsbG9jYXRlKFJlZjxTdHJpbmdJbXBsPiYmIG9yaWdpbmFsU3RyaW5nLCB1bnNpZ25l
ZCBsZW5ndGgsIFVDaGFyKiYgZGF0YSkKIHsKICAgICBBU1NFUlQoIW9yaWdpbmFsU3RyaW5nLT5p
czhCaXQoKSk7Ci0gICAgcmV0dXJuIHJlYWxsb2NhdGVJbnRlcm5hbChvcmlnaW5hbFN0cmluZywg
bGVuZ3RoLCBkYXRhKTsKKyAgICByZXR1cm4gcmVhbGxvY2F0ZUludGVybmFsKFdURk1vdmUob3Jp
Z2luYWxTdHJpbmcpLCBsZW5ndGgsIGRhdGEpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hh
clR5cGU+CkBAIC0yNjUsNyArMjY1LDcgQEAgUmVmPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OmNy
ZWF0ZThCaXRJZlBvc3NpYmxlKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ24KICAgICAg
ICAgcmV0dXJuICplbXB0eSgpOwogCiAgICAgTENoYXIqIGRhdGE7Ci0gICAgUmVmUHRyPFN0cmlu
Z0ltcGw+IHN0cmluZyA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWRJbnRlcm5hbE5vbkVtcHR5KGxlbmd0
aCwgZGF0YSk7CisgICAgYXV0byBzdHJpbmcgPSBjcmVhdGVVbmluaXRpYWxpemVkSW50ZXJuYWxO
b25FbXB0eShsZW5ndGgsIGRhdGEpOwogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5n
dGg7ICsraSkgewogICAgICAgICBpZiAoY2hhcmFjdGVyc1tpXSAmIDB4ZmYwMCkKQEAgLTI3Myw3
ICsyNzMsNyBAQCBSZWY8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6Y3JlYXRlOEJpdElmUG9zc2li
bGUoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbgogICAgICAgICBkYXRhW2ldID0gc3Rh
dGljX2Nhc3Q8TENoYXI+KGNoYXJhY3RlcnNbaV0pOwogICAgIH0KIAotICAgIHJldHVybiBzdHJp
bmcucmVsZWFzZU5vbk51bGwoKTsKKyAgICByZXR1cm4gc3RyaW5nOwogfQogCiBSZWY8U3RyaW5n
SW1wbD4gU3RyaW5nSW1wbDo6Y3JlYXRlOEJpdElmUG9zc2libGUoY29uc3QgVUNoYXIqIHN0cmlu
ZykKQEAgLTI5MSwyNCArMjkxLDI0IEBAIFJlZjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpjcmVh
dGUoY29uc3QgTENoYXIqIHN0cmluZykKICAgICByZXR1cm4gY3JlYXRlKHN0cmluZywgbGVuZ3Ro
KTsKIH0KIAotUmVmPFN5bWJvbEltcGw+IFN0cmluZ0ltcGw6OmNyZWF0ZVN5bWJvbChQYXNzUmVm
UHRyPFN0cmluZ0ltcGw+IHJlcCkKK1JlZjxTeW1ib2xJbXBsPiBTdHJpbmdJbXBsOjpjcmVhdGVT
eW1ib2woU3RyaW5nSW1wbCYgcmVwKQogewotICAgIFN0cmluZ0ltcGwqIG93bmVyUmVwID0gKHJl
cC0+YnVmZmVyT3duZXJzaGlwKCkgPT0gQnVmZmVyU3Vic3RyaW5nKSA/IHJlcC0+c3Vic3RyaW5n
QnVmZmVyKCkgOiByZXAuZ2V0KCk7CisgICAgYXV0byogb3duZXJSZXAgPSAocmVwLmJ1ZmZlck93
bmVyc2hpcCgpID09IEJ1ZmZlclN1YnN0cmluZykgPyByZXAuc3Vic3RyaW5nQnVmZmVyKCkgOiAm
cmVwOwogCiAgICAgLy8gV2UgYWxsb2NhdGUgYSBidWZmZXIgdGhhdCBjb250YWlucwogICAgIC8v
IDEuIHRoZSBTdHJpbmdJbXBsIHN0cnVjdAogICAgIC8vIDIuIHRoZSBwb2ludGVyIHRvIHRoZSBv
d25lciBzdHJpbmcKICAgICAvLyAzLiB0aGUgcG9pbnRlciB0byB0aGUgc3ltYm9sIHJlZ2lzdHJ5
CiAgICAgLy8gNC4gdGhlIHBsYWNlaG9sZGVyIGZvciBzeW1ib2wgYXdhcmUgaGFzaCB2YWx1ZSAo
YWxsb2NhdGVkIHNpemUgaXMgcG9pbnRlciBzaXplLCBidXQgb25seSA0IGJ5dGVzIGFyZSB1c2Vk
KQotICAgIFN0cmluZ0ltcGwqIHN0cmluZ0ltcGwgPSBzdGF0aWNfY2FzdDxTdHJpbmdJbXBsKj4o
ZmFzdE1hbGxvYyhhbGxvY2F0aW9uU2l6ZTxTdHJpbmdJbXBsKj4oMykpKTsKLSAgICBpZiAocmVw
LT5pczhCaXQoKSkKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKHN0YXRpY19jYXN0PFN5bWJvbElt
cGwmPigqbmV3IChOb3ROdWxsLCBzdHJpbmdJbXBsKSBTdHJpbmdJbXBsKENyZWF0ZVN5bWJvbCwg
cmVwLT5tX2RhdGE4LCByZXAtPmxlbmd0aCgpLCBvd25lclJlcCkpKTsKLSAgICByZXR1cm4gYWRv
cHRSZWYoc3RhdGljX2Nhc3Q8U3ltYm9sSW1wbCY+KCpuZXcgKE5vdE51bGwsIHN0cmluZ0ltcGwp
IFN0cmluZ0ltcGwoQ3JlYXRlU3ltYm9sLCByZXAtPm1fZGF0YTE2LCByZXAtPmxlbmd0aCgpLCBv
d25lclJlcCkpKTsKKyAgICBhdXRvKiBzdHJpbmdJbXBsID0gc3RhdGljX2Nhc3Q8U3RyaW5nSW1w
bCo+KGZhc3RNYWxsb2MoYWxsb2NhdGlvblNpemU8U3RyaW5nSW1wbCo+KDMpKSk7CisgICAgaWYg
KHJlcC5pczhCaXQoKSkKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKHN0YXRpY19jYXN0PFN5bWJv
bEltcGwmPigqbmV3IChOb3ROdWxsLCBzdHJpbmdJbXBsKSBTdHJpbmdJbXBsKENyZWF0ZVN5bWJv
bCwgcmVwLm1fZGF0YTgsIHJlcC5sZW5ndGgoKSwgKm93bmVyUmVwKSkpOworICAgIHJldHVybiBh
ZG9wdFJlZihzdGF0aWNfY2FzdDxTeW1ib2xJbXBsJj4oKm5ldyAoTm90TnVsbCwgc3RyaW5nSW1w
bCkgU3RyaW5nSW1wbChDcmVhdGVTeW1ib2wsIHJlcC5tX2RhdGExNiwgcmVwLmxlbmd0aCgpLCAq
b3duZXJSZXApKSk7CiB9CiAKIFJlZjxTeW1ib2xJbXBsPiBTdHJpbmdJbXBsOjpjcmVhdGVOdWxs
U3ltYm9sKCkKIHsKLSAgICByZXR1cm4gY3JlYXRlU3ltYm9sKG51bGwoKSk7CisgICAgcmV0dXJu
IGNyZWF0ZVN5bWJvbCgqbnVsbCgpKTsKIH0KIAogYm9vbCBTdHJpbmdJbXBsOjpjb250YWluc09u
bHlXaGl0ZXNwYWNlKCkKQEAgLTQyNywxOSArNDI3LDE5IEBAIFNsb3dQYXRoOgogCiAgICAgLy8g
RG8gYSBzbG93ZXIgaW1wbGVtZW50YXRpb24gZm9yIGNhc2VzIHRoYXQgaW5jbHVkZSBub24tQVND
SUkgY2hhcmFjdGVycy4KICAgICBVQ2hhciogZGF0YTE2OwotICAgIFJlZlB0cjxTdHJpbmdJbXBs
PiBuZXdJbXBsID0gY3JlYXRlVW5pbml0aWFsaXplZEludGVybmFsTm9uRW1wdHkobV9sZW5ndGgs
IGRhdGExNik7CisgICAgYXV0byBuZXdJbXBsID0gY3JlYXRlVW5pbml0aWFsaXplZEludGVybmFs
Tm9uRW1wdHkobV9sZW5ndGgsIGRhdGExNik7CiAKICAgICBVRXJyb3JDb2RlIHN0YXR1cyA9IFVf
WkVST19FUlJPUjsKICAgICBpbnQzMl90IHJlYWxMZW5ndGggPSB1X3N0clRvTG93ZXIoZGF0YTE2
LCBsZW5ndGgsIG1fZGF0YTE2LCBtX2xlbmd0aCwgIiIsICZzdGF0dXMpOwogICAgIGlmIChVX1NV
Q0NFU1Moc3RhdHVzKSAmJiByZWFsTGVuZ3RoID09IGxlbmd0aCkKLSAgICAgICAgcmV0dXJuIG5l
d0ltcGwucmVsZWFzZU5vbk51bGwoKTsKKyAgICAgICAgcmV0dXJuIG5ld0ltcGw7CiAKICAgICBu
ZXdJbXBsID0gY3JlYXRlVW5pbml0aWFsaXplZChyZWFsTGVuZ3RoLCBkYXRhMTYpOwogICAgIHN0
YXR1cyA9IFVfWkVST19FUlJPUjsKICAgICB1X3N0clRvTG93ZXIoZGF0YTE2LCByZWFsTGVuZ3Ro
LCBtX2RhdGExNiwgbV9sZW5ndGgsICIiLCAmc3RhdHVzKTsKICAgICBpZiAoVV9GQUlMVVJFKHN0
YXR1cykpCiAgICAgICAgIHJldHVybiAqdGhpczsKLSAgICByZXR1cm4gbmV3SW1wbC5yZWxlYXNl
Tm9uTnVsbCgpOworICAgIHJldHVybiBuZXdJbXBsOwogfQogCiBSZWY8U3RyaW5nSW1wbD4gU3Ry
aW5nSW1wbDo6Y29udmVydFRvVXBwZXJjYXNlV2l0aG91dExvY2FsZSgpCkBAIC00NTUsNyArNDU1
LDcgQEAgUmVmPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OmNvbnZlcnRUb1VwcGVyY2FzZVdpdGhv
dXRMb2NhbGUoKQogCiAgICAgaWYgKGlzOEJpdCgpKSB7CiAgICAgICAgIExDaGFyKiBkYXRhODsK
LSAgICAgICAgUmVmUHRyPFN0cmluZ0ltcGw+IG5ld0ltcGwgPSBjcmVhdGVVbmluaXRpYWxpemVk
KG1fbGVuZ3RoLCBkYXRhOCk7CisgICAgICAgIGF1dG8gbmV3SW1wbCA9IGNyZWF0ZVVuaW5pdGlh
bGl6ZWQobV9sZW5ndGgsIGRhdGE4KTsKICAgICAgICAgCiAgICAgICAgIC8vIERvIGEgZmFzdGVy
IGxvb3AgZm9yIHRoZSBjYXNlIHdoZXJlIGFsbCB0aGUgY2hhcmFjdGVycyBhcmUgQVNDSUkuCiAg
ICAgICAgIHVuc2lnbmVkIG9yZWQgPSAwOwpAQCAtNDcyLDcgKzQ3Miw3IEBAIFJlZjxTdHJpbmdJ
bXBsPiBTdHJpbmdJbXBsOjpjb252ZXJ0VG9VcHBlcmNhc2VXaXRob3V0TG9jYWxlKCkKICNlbmRp
ZgogICAgICAgICB9CiAgICAgICAgIGlmICghKG9yZWQgJiB+MHg3RikpCi0gICAgICAgICAgICBy
ZXR1cm4gbmV3SW1wbC5yZWxlYXNlTm9uTnVsbCgpOworICAgICAgICAgICAgcmV0dXJuIG5ld0lt
cGw7CiAKICAgICAgICAgLy8gRG8gYSBzbG93ZXIgaW1wbGVtZW50YXRpb24gZm9yIGNhc2VzIHRo
YXQgaW5jbHVkZSBub24tQVNDSUkgTGF0aW4tMSBjaGFyYWN0ZXJzLgogICAgICAgICBpbnQgbnVt
YmVyU2hhcnBTQ2hhcmFjdGVycyA9IDA7CkBAIC00OTQsNyArNDk0LDcgQEAgUmVmPFN0cmluZ0lt
cGw+IFN0cmluZ0ltcGw6OmNvbnZlcnRUb1VwcGVyY2FzZVdpdGhvdXRMb2NhbGUoKQogICAgICAg
ICB9CiAKICAgICAgICAgaWYgKCFudW1iZXJTaGFycFNDaGFyYWN0ZXJzKQotICAgICAgICAgICAg
cmV0dXJuIG5ld0ltcGwucmVsZWFzZU5vbk51bGwoKTsKKyAgICAgICAgICAgIHJldHVybiBuZXdJ
bXBsOwogCiAgICAgICAgIC8vIFdlIGhhdmUgbnVtYmVyU1NDaGFyYWN0ZXJzIHNoYXJwLXMgY2hh
cmFjdGVycywgYnV0IG5vbmUgb2YgdGhlIG90aGVyIHNwZWNpYWwgY2hhcmFjdGVycy4KICAgICAg
ICAgbmV3SW1wbCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQobV9sZW5ndGggKyBudW1iZXJTaGFycFND
aGFyYWN0ZXJzLCBkYXRhOCk7CkBAIC01MTIsNyArNTEyLDcgQEAgUmVmPFN0cmluZ0ltcGw+IFN0
cmluZ0ltcGw6OmNvbnZlcnRUb1VwcGVyY2FzZVdpdGhvdXRMb2NhbGUoKQogICAgICAgICAgICAg
fQogICAgICAgICB9CiAKLSAgICAgICAgcmV0dXJuIG5ld0ltcGwucmVsZWFzZU5vbk51bGwoKTsK
KyAgICAgICAgcmV0dXJuIG5ld0ltcGw7CiAgICAgfQogCiB1cGNvbnZlcnQ6CkBAIC01MjAsNyAr
NTIwLDcgQEAgdXBjb252ZXJ0OgogICAgIGNvbnN0IFVDaGFyKiBzb3VyY2UxNiA9IHVwY29udmVy
dGVkQ2hhcmFjdGVyczsKIAogICAgIFVDaGFyKiBkYXRhMTY7Ci0gICAgUmVmUHRyPFN0cmluZ0lt
cGw+IG5ld0ltcGwgPSBjcmVhdGVVbmluaXRpYWxpemVkKG1fbGVuZ3RoLCBkYXRhMTYpOworICAg
IGF1dG8gbmV3SW1wbCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQobV9sZW5ndGgsIGRhdGExNik7CiAg
ICAgCiAgICAgLy8gRG8gYSBmYXN0ZXIgbG9vcCBmb3IgdGhlIGNhc2Ugd2hlcmUgYWxsIHRoZSBj
aGFyYWN0ZXJzIGFyZSBBU0NJSS4KICAgICB1bnNpZ25lZCBvcmVkID0gMDsKQEAgLTUzMCwxOSAr
NTMwLDE5IEBAIHVwY29udmVydDoKICAgICAgICAgZGF0YTE2W2ldID0gdG9BU0NJSVVwcGVyKGMp
OwogICAgIH0KICAgICBpZiAoIShvcmVkICYgfjB4N0YpKQotICAgICAgICByZXR1cm4gbmV3SW1w
bC5yZWxlYXNlTm9uTnVsbCgpOworICAgICAgICByZXR1cm4gbmV3SW1wbDsKIAogICAgIC8vIERv
IGEgc2xvd2VyIGltcGxlbWVudGF0aW9uIGZvciBjYXNlcyB0aGF0IGluY2x1ZGUgbm9uLUFTQ0lJ
IGNoYXJhY3RlcnMuCiAgICAgVUVycm9yQ29kZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7CiAgICAg
aW50MzJfdCByZWFsTGVuZ3RoID0gdV9zdHJUb1VwcGVyKGRhdGExNiwgbGVuZ3RoLCBzb3VyY2Ux
NiwgbV9sZW5ndGgsICIiLCAmc3RhdHVzKTsKICAgICBpZiAoVV9TVUNDRVNTKHN0YXR1cykgJiYg
cmVhbExlbmd0aCA9PSBsZW5ndGgpCi0gICAgICAgIHJldHVybiBuZXdJbXBsLnJlbGVhc2VOb25O
dWxsKCk7CisgICAgICAgIHJldHVybiBuZXdJbXBsOwogICAgIG5ld0ltcGwgPSBjcmVhdGVVbmlu
aXRpYWxpemVkKHJlYWxMZW5ndGgsIGRhdGExNik7CiAgICAgc3RhdHVzID0gVV9aRVJPX0VSUk9S
OwogICAgIHVfc3RyVG9VcHBlcihkYXRhMTYsIHJlYWxMZW5ndGgsIHNvdXJjZTE2LCBtX2xlbmd0
aCwgIiIsICZzdGF0dXMpOwogICAgIGlmIChVX0ZBSUxVUkUoc3RhdHVzKSkKICAgICAgICAgcmV0
dXJuICp0aGlzOwotICAgIHJldHVybiBuZXdJbXBsLnJlbGVhc2VOb25OdWxsKCk7CisgICAgcmV0
dXJuIG5ld0ltcGw7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBuZWVkc1R1cmtpc2hDYXNpbmdS
dWxlcyhjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsZUlkZW50aWZpZXIpCkBAIC01NzgsMTcgKzU3
OCwxNyBAQCBSZWY8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6Y29udmVydFRvTG93ZXJjYXNlV2l0
aExvY2FsZShjb25zdCBBdG9taWNTdHJpbmcmIGxvYwogICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFy
YWN0ZXJzID0gU3RyaW5nVmlldygqdGhpcykudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7CiAgICAg
Y29uc3QgVUNoYXIqIHNvdXJjZTE2ID0gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzOwogICAgIFVDaGFy
KiBkYXRhMTY7Ci0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IG5ld1N0cmluZyA9IGNyZWF0ZVVuaW5p
dGlhbGl6ZWQobGVuZ3RoLCBkYXRhMTYpOworICAgIGF1dG8gbmV3U3RyaW5nID0gY3JlYXRlVW5p
bml0aWFsaXplZChsZW5ndGgsIGRhdGExNik7CiAgICAgVUVycm9yQ29kZSBzdGF0dXMgPSBVX1pF
Uk9fRVJST1I7CiAgICAgaW50IHJlYWxMZW5ndGggPSB1X3N0clRvTG93ZXIoZGF0YTE2LCBsZW5n
dGgsIHNvdXJjZTE2LCBsZW5ndGgsICJ0ciIsICZzdGF0dXMpOwogICAgIGlmIChVX1NVQ0NFU1Mo
c3RhdHVzKSAmJiByZWFsTGVuZ3RoID09IGxlbmd0aCkKLSAgICAgICAgcmV0dXJuIG5ld1N0cmlu
Zy5yZWxlYXNlTm9uTnVsbCgpOworICAgICAgICByZXR1cm4gbmV3U3RyaW5nOwogICAgIG5ld1N0
cmluZyA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQocmVhbExlbmd0aCwgZGF0YTE2KTsKICAgICBzdGF0
dXMgPSBVX1pFUk9fRVJST1I7CiAgICAgdV9zdHJUb0xvd2VyKGRhdGExNiwgcmVhbExlbmd0aCwg
c291cmNlMTYsIGxlbmd0aCwgInRyIiwgJnN0YXR1cyk7CiAgICAgaWYgKFVfRkFJTFVSRShzdGF0
dXMpKQogICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgcmV0dXJuIG5ld1N0cmluZy5yZWxlYXNl
Tm9uTnVsbCgpOworICAgIHJldHVybiBuZXdTdHJpbmc7CiB9CiAKIFJlZjxTdHJpbmdJbXBsPiBT
dHJpbmdJbXBsOjpjb252ZXJ0VG9VcHBlcmNhc2VXaXRoTG9jYWxlKGNvbnN0IEF0b21pY1N0cmlu
ZyYgbG9jYWxlSWRlbnRpZmllcikKQEAgLTYwOSwxNyArNjA5LDE3IEBAIFJlZjxTdHJpbmdJbXBs
PiBTdHJpbmdJbXBsOjpjb252ZXJ0VG9VcHBlcmNhc2VXaXRoTG9jYWxlKGNvbnN0IEF0b21pY1N0
cmluZyYgbG9jCiAgICAgYXV0byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBTdHJpbmdWaWV3KCp0
aGlzKS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKICAgICBjb25zdCBVQ2hhciogc291cmNlMTYg
PSB1cGNvbnZlcnRlZENoYXJhY3RlcnM7CiAgICAgVUNoYXIqIGRhdGExNjsKLSAgICBSZWZQdHI8
U3RyaW5nSW1wbD4gbmV3U3RyaW5nID0gY3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGRhdGEx
Nik7CisgICAgYXV0byBuZXdTdHJpbmcgPSBjcmVhdGVVbmluaXRpYWxpemVkKGxlbmd0aCwgZGF0
YTE2KTsKICAgICBVRXJyb3JDb2RlIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKICAgICBpbnQgcmVh
bExlbmd0aCA9IHVfc3RyVG9VcHBlcihkYXRhMTYsIGxlbmd0aCwgc291cmNlMTYsIGxlbmd0aCwg
InRyIiwgJnN0YXR1cyk7CiAgICAgaWYgKFVfU1VDQ0VTUyhzdGF0dXMpICYmIHJlYWxMZW5ndGgg
PT0gbGVuZ3RoKQotICAgICAgICByZXR1cm4gbmV3U3RyaW5nLnJlbGVhc2VOb25OdWxsKCk7Cisg
ICAgICAgIHJldHVybiBuZXdTdHJpbmc7CiAgICAgbmV3U3RyaW5nID0gY3JlYXRlVW5pbml0aWFs
aXplZChyZWFsTGVuZ3RoLCBkYXRhMTYpOwogICAgIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKICAg
ICB1X3N0clRvVXBwZXIoZGF0YTE2LCByZWFsTGVuZ3RoLCBzb3VyY2UxNiwgbGVuZ3RoLCAidHIi
LCAmc3RhdHVzKTsKICAgICBpZiAoVV9GQUlMVVJFKHN0YXR1cykpCiAgICAgICAgIHJldHVybiAq
dGhpczsKLSAgICByZXR1cm4gbmV3U3RyaW5nLnJlbGVhc2VOb25OdWxsKCk7CisgICAgcmV0dXJu
IG5ld1N0cmluZzsKIH0KIAogUmVmPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OmZvbGRDYXNlKCkK
QEAgLTcyMSw3ICs3MjEsNyBAQCBBTFdBWVNfSU5MSU5FIFJlZjxTdHJpbmdJbXBsPiBTdHJpbmdJ
bXBsOjpjb252ZXJ0QVNDSUlDYXNlKFN0cmluZ0ltcGwmIGltcGwsIGNvbgogCiBTbG93UGF0aDoK
ICAgICBDaGFyYWN0ZXJUeXBlKiBuZXdEYXRhOwotICAgIFJlZjxTdHJpbmdJbXBsPiBuZXdJbXBs
ID0gY3JlYXRlVW5pbml0aWFsaXplZEludGVybmFsTm9uRW1wdHkobGVuZ3RoLCBuZXdEYXRhKTsK
KyAgICBhdXRvIG5ld0ltcGwgPSBjcmVhdGVVbmluaXRpYWxpemVkSW50ZXJuYWxOb25FbXB0eShs
ZW5ndGgsIG5ld0RhdGEpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmYWlsaW5nSW5k
ZXg7ICsraSkKICAgICAgICAgbmV3RGF0YVtpXSA9IGRhdGFbaV07CiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gZmFpbGluZ0luZGV4OyBpIDwgbGVuZ3RoOyArK2kpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuaCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1w
bC5oCmluZGV4IDRhNjlkZGM5NGNlYjkxMTNiYzRjNmU1Y2IwMjM3ZDkwZDQ4YjdjYTUuLjUzNDg0
ZmU1NDkyZDA0NmMzN2ZmMmE2OTExYmE1Y2FjNmM0YjQ4ZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
VEYvd3RmL3RleHQvU3RyaW5nSW1wbC5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5n
SW1wbC5oCkBAIC0yNjUsNyArMjY1LDcgQEAgcHJpdmF0ZToKICAgICB9CiAKICAgICAvLyBVc2Vk
IHRvIGNyZWF0ZSBuZXcgc3RyaW5ncyB0aGF0IGFyZSBhIHN1YnN0cmluZyBvZiBhbiBleGlzdGlu
ZyA4LWJpdCBTdHJpbmdJbXBsIChCdWZmZXJTdWJzdHJpbmcpCi0gICAgU3RyaW5nSW1wbChjb25z
dCBMQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoLCBQYXNzUmVmUHRyPFN0cmluZ0lt
cGw+IGJhc2UpCisgICAgU3RyaW5nSW1wbChjb25zdCBMQ2hhciogY2hhcmFjdGVycywgdW5zaWdu
ZWQgbGVuZ3RoLCBSZWY8U3RyaW5nSW1wbD4mJiBiYXNlKQogICAgICAgICA6IG1fcmVmQ291bnQo
c19yZWZDb3VudEluY3JlbWVudCkKICAgICAgICAgLCBtX2xlbmd0aChsZW5ndGgpCiAgICAgICAg
ICwgbV9kYXRhOChjaGFyYWN0ZXJzKQpAQCAtMjc2LDEzICsyNzYsMTMgQEAgcHJpdmF0ZToKICAg
ICAgICAgQVNTRVJUKG1fbGVuZ3RoKTsKICAgICAgICAgQVNTRVJUKGJhc2UtPmJ1ZmZlck93bmVy
c2hpcCgpICE9IEJ1ZmZlclN1YnN0cmluZyk7CiAKLSAgICAgICAgc3Vic3RyaW5nQnVmZmVyKCkg
PSBiYXNlLmxlYWtSZWYoKTsKKyAgICAgICAgc3Vic3RyaW5nQnVmZmVyKCkgPSAmYmFzZS5sZWFr
UmVmKCk7CiAKICAgICAgICAgU1RSSU5HX1NUQVRTX0FERF84QklUX1NUUklORzIobV9sZW5ndGgs
IHRydWUpOwogICAgIH0KIAogICAgIC8vIFVzZWQgdG8gY3JlYXRlIG5ldyBzdHJpbmdzIHRoYXQg
YXJlIGEgc3Vic3RyaW5nIG9mIGFuIGV4aXN0aW5nIDE2LWJpdCBTdHJpbmdJbXBsIChCdWZmZXJT
dWJzdHJpbmcpCi0gICAgU3RyaW5nSW1wbChjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWdu
ZWQgbGVuZ3RoLCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGJhc2UpCisgICAgU3RyaW5nSW1wbChj
b25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoLCBSZWY8U3RyaW5nSW1wbD4m
JiBiYXNlKQogICAgICAgICA6IG1fcmVmQ291bnQoc19yZWZDb3VudEluY3JlbWVudCkKICAgICAg
ICAgLCBtX2xlbmd0aChsZW5ndGgpCiAgICAgICAgICwgbV9kYXRhMTYoY2hhcmFjdGVycykKQEAg
LTI5MywxNCArMjkzLDE0IEBAIHByaXZhdGU6CiAgICAgICAgIEFTU0VSVChtX2xlbmd0aCk7CiAg
ICAgICAgIEFTU0VSVChiYXNlLT5idWZmZXJPd25lcnNoaXAoKSAhPSBCdWZmZXJTdWJzdHJpbmcp
OwogCi0gICAgICAgIHN1YnN0cmluZ0J1ZmZlcigpID0gYmFzZS5sZWFrUmVmKCk7CisgICAgICAg
IHN1YnN0cmluZ0J1ZmZlcigpID0gJmJhc2UubGVha1JlZigpOwogCiAgICAgICAgIFNUUklOR19T
VEFUU19BRERfMTZCSVRfU1RSSU5HMihtX2xlbmd0aCwgdHJ1ZSk7CiAgICAgfQogCiAgICAgZW51
bSBDcmVhdGVTeW1ib2xUYWcgeyBDcmVhdGVTeW1ib2wgfTsKICAgICAvLyBVc2VkIHRvIGNyZWF0
ZSBuZXcgc3ltYm9sIHN0cmluZ3MgdGhhdCBob2xkcyBleGlzdGluZyA4LWJpdCBbW0Rlc2NyaXB0
aW9uXV0gc3RyaW5nIGFzIGEgc3Vic3RyaW5nIGJ1ZmZlciAoQnVmZmVyU3Vic3RyaW5nKS4KLSAg
ICBTdHJpbmdJbXBsKENyZWF0ZVN5bWJvbFRhZywgY29uc3QgTENoYXIqIGNoYXJhY3RlcnMsIHVu
c2lnbmVkIGxlbmd0aCwgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBiYXNlKQorICAgIFN0cmluZ0lt
cGwoQ3JlYXRlU3ltYm9sVGFnLCBjb25zdCBMQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVu
Z3RoLCBSZWY8U3RyaW5nSW1wbD4mJiBiYXNlKQogICAgICAgICA6IG1fcmVmQ291bnQoc19yZWZD
b3VudEluY3JlbWVudCkKICAgICAgICAgLCBtX2xlbmd0aChsZW5ndGgpCiAgICAgICAgICwgbV9k
YXRhOChjaGFyYWN0ZXJzKQpAQCAtMzEwLDcgKzMxMCw3IEBAIHByaXZhdGU6CiAgICAgICAgIEFT
U0VSVChtX2RhdGE4KTsKICAgICAgICAgQVNTRVJUKGJhc2UtPmJ1ZmZlck93bmVyc2hpcCgpICE9
IEJ1ZmZlclN1YnN0cmluZyk7CiAKLSAgICAgICAgc3Vic3RyaW5nQnVmZmVyKCkgPSBiYXNlLmxl
YWtSZWYoKTsKKyAgICAgICAgc3Vic3RyaW5nQnVmZmVyKCkgPSAmYmFzZS5sZWFrUmVmKCk7CiAg
ICAgICAgIHN5bWJvbFJlZ2lzdHJ5KCkgPSBudWxscHRyOwogICAgICAgICBoYXNoRm9yU3ltYm9s
KCkgPSBuZXh0SGFzaEZvclN5bWJvbCgpOwogCkBAIC0zMTgsNyArMzE4LDcgQEAgcHJpdmF0ZToK
ICAgICB9CiAKICAgICAvLyBVc2VkIHRvIGNyZWF0ZSBuZXcgc3ltYm9sIHN0cmluZ3MgdGhhdCBo
b2xkcyBleGlzdGluZyAxNi1iaXQgW1tEZXNjcmlwdGlvbl1dIHN0cmluZyBhcyBhIHN1YnN0cmlu
ZyBidWZmZXIgKEJ1ZmZlclN1YnN0cmluZykuCi0gICAgU3RyaW5nSW1wbChDcmVhdGVTeW1ib2xU
YWcsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIFBhc3NSZWZQdHI8
U3RyaW5nSW1wbD4gYmFzZSkKKyAgICBTdHJpbmdJbXBsKENyZWF0ZVN5bWJvbFRhZywgY29uc3Qg
VUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgUmVmPFN0cmluZ0ltcGw+JiYgYmFz
ZSkKICAgICAgICAgOiBtX3JlZkNvdW50KHNfcmVmQ291bnRJbmNyZW1lbnQpCiAgICAgICAgICwg
bV9sZW5ndGgobGVuZ3RoKQogICAgICAgICAsIG1fZGF0YTE2KGNoYXJhY3RlcnMpCkBAIC0zMjgs
NyArMzI4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgQVNTRVJUKG1fZGF0YTE2KTsKICAgICAgICAg
QVNTRVJUKGJhc2UtPmJ1ZmZlck93bmVyc2hpcCgpICE9IEJ1ZmZlclN1YnN0cmluZyk7CiAKLSAg
ICAgICAgc3Vic3RyaW5nQnVmZmVyKCkgPSBiYXNlLmxlYWtSZWYoKTsKKyAgICAgICAgc3Vic3Ry
aW5nQnVmZmVyKCkgPSAmYmFzZS5sZWFrUmVmKCk7CiAgICAgICAgIHN5bWJvbFJlZ2lzdHJ5KCkg
PSBudWxscHRyOwogICAgICAgICBoYXNoRm9yU3ltYm9sKCkgPSBuZXh0SGFzaEZvclN5bWJvbCgp
OwogCkBAIC0zNTIsMjEgKzM1MiwyMCBAQCBwdWJsaWM6CiAgICAgV1RGX0VYUE9SVF9TVFJJTkdf
QVBJIHN0YXRpYyBSZWY8U3RyaW5nSW1wbD4gY3JlYXRlKGNvbnN0IExDaGFyKik7CiAgICAgQUxX
QVlTX0lOTElORSBzdGF0aWMgUmVmPFN0cmluZ0ltcGw+IGNyZWF0ZShjb25zdCBjaGFyKiBzKSB7
IHJldHVybiBjcmVhdGUocmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KHMpKTsgfQogCi0g
ICAgc3RhdGljIEFMV0FZU19JTkxJTkUgUmVmPFN0cmluZ0ltcGw+IGNyZWF0ZVN1YnN0cmluZ1No
YXJpbmdJbXBsKFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gcmVwLCB1bnNpZ25lZCBvZmZzZXQsIHVu
c2lnbmVkIGxlbmd0aCkKKyAgICBzdGF0aWMgQUxXQVlTX0lOTElORSBSZWY8U3RyaW5nSW1wbD4g
Y3JlYXRlU3Vic3RyaW5nU2hhcmluZ0ltcGwoU3RyaW5nSW1wbCYgcmVwLCB1bnNpZ25lZCBvZmZz
ZXQsIHVuc2lnbmVkIGxlbmd0aCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChyZXApOwotICAgICAg
ICBBU1NFUlQobGVuZ3RoIDw9IHJlcC0+bGVuZ3RoKCkpOworICAgICAgICBBU1NFUlQobGVuZ3Ro
IDw9IHJlcC5sZW5ndGgoKSk7CiAKICAgICAgICAgaWYgKCFsZW5ndGgpCiAgICAgICAgICAgICBy
ZXR1cm4gKmVtcHR5KCk7CiAKLSAgICAgICAgU3RyaW5nSW1wbCogb3duZXJSZXAgPSAocmVwLT5i
dWZmZXJPd25lcnNoaXAoKSA9PSBCdWZmZXJTdWJzdHJpbmcpID8gcmVwLT5zdWJzdHJpbmdCdWZm
ZXIoKSA6IHJlcC5nZXQoKTsKKyAgICAgICAgYXV0byogb3duZXJSZXAgPSAoKHJlcC5idWZmZXJP
d25lcnNoaXAoKSA9PSBCdWZmZXJTdWJzdHJpbmcpID8gcmVwLnN1YnN0cmluZ0J1ZmZlcigpIDog
JnJlcCk7CiAKICAgICAgICAgLy8gV2UgYWxsb2NhdGUgYSBidWZmZXIgdGhhdCBjb250YWlucyBi
b3RoIHRoZSBTdHJpbmdJbXBsIHN0cnVjdCBhcyB3ZWxsIGFzIHRoZSBwb2ludGVyIHRvIHRoZSBv
d25lciBzdHJpbmcuCi0gICAgICAgIFN0cmluZ0ltcGwqIHN0cmluZ0ltcGwgPSBzdGF0aWNfY2Fz
dDxTdHJpbmdJbXBsKj4oZmFzdE1hbGxvYyhhbGxvY2F0aW9uU2l6ZTxTdHJpbmdJbXBsKj4oMSkp
KTsKLSAgICAgICAgaWYgKHJlcC0+aXM4Qml0KCkpCi0gICAgICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyAoTm90TnVsbCwgc3RyaW5nSW1wbCkgU3RyaW5nSW1wbChyZXAtPm1fZGF0YTggKyBv
ZmZzZXQsIGxlbmd0aCwgb3duZXJSZXApKTsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
KE5vdE51bGwsIHN0cmluZ0ltcGwpIFN0cmluZ0ltcGwocmVwLT5tX2RhdGExNiArIG9mZnNldCwg
bGVuZ3RoLCBvd25lclJlcCkpOworICAgICAgICBhdXRvKiBzdHJpbmdJbXBsID0gc3RhdGljX2Nh
c3Q8U3RyaW5nSW1wbCo+KGZhc3RNYWxsb2MoYWxsb2NhdGlvblNpemU8U3RyaW5nSW1wbCo+KDEp
KSk7CisgICAgICAgIGlmIChyZXAuaXM4Qml0KCkpCisgICAgICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyAoTm90TnVsbCwgc3RyaW5nSW1wbCkgU3RyaW5nSW1wbChyZXAubV9kYXRhOCArIG9m
ZnNldCwgbGVuZ3RoLCAqb3duZXJSZXApKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
KE5vdE51bGwsIHN0cmluZ0ltcGwpIFN0cmluZ0ltcGwocmVwLm1fZGF0YTE2ICsgb2Zmc2V0LCBs
ZW5ndGgsICpvd25lclJlcCkpOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHVuc2lnbmVkIGNoYXJh
Y3RlcnNDb3VudD4KQEAgLTM4NywyMSArMzg2LDIxIEBAIHB1YmxpYzoKIAogICAgIFdURl9FWFBP
UlRfU1RSSU5HX0FQSSBzdGF0aWMgUmVmPFN0cmluZ0ltcGw+IGNyZWF0ZVVuaW5pdGlhbGl6ZWQo
dW5zaWduZWQgbGVuZ3RoLCBMQ2hhciomIGRhdGEpOwogICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQ
SSBzdGF0aWMgUmVmPFN0cmluZ0ltcGw+IGNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVu
Z3RoLCBVQ2hhciomIGRhdGEpOwotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdGF0aWMgQUxX
QVlTX0lOTElORSBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IHRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQo
dW5zaWduZWQgbGVuZ3RoLCBUKiYgb3V0cHV0KQorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBz
dGF0aWMgQUxXQVlTX0lOTElORSBSZWZQdHI8U3RyaW5nSW1wbD4gdHJ5Q3JlYXRlVW5pbml0aWFs
aXplZCh1bnNpZ25lZCBsZW5ndGgsIFQqJiBvdXRwdXQpCiAgICAgewogICAgICAgICBpZiAoIWxl
bmd0aCkgewotICAgICAgICAgICAgb3V0cHV0ID0gMDsKKyAgICAgICAgICAgIG91dHB1dCA9IG51
bGxwdHI7CiAgICAgICAgICAgICByZXR1cm4gZW1wdHkoKTsKICAgICAgICAgfQogCiAgICAgICAg
IGlmIChsZW5ndGggPiAoKHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSAtIHNp
emVvZihTdHJpbmdJbXBsKSkgLyBzaXplb2YoVCkpKSB7Ci0gICAgICAgICAgICBvdXRwdXQgPSAw
OwotICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICBvdXRwdXQgPSBudWxscHRyOwor
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIH0KICAgICAgICAgU3RyaW5nSW1w
bCogcmVzdWx0SW1wbDsKICAgICAgICAgaWYgKCF0cnlGYXN0TWFsbG9jKGFsbG9jYXRpb25TaXpl
PFQ+KGxlbmd0aCkpLmdldFZhbHVlKHJlc3VsdEltcGwpKSB7Ci0gICAgICAgICAgICBvdXRwdXQg
PSAwOwotICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICBvdXRwdXQgPSBudWxscHRy
OworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIH0KICAgICAgICAgb3V0cHV0
ID0gcmVzdWx0SW1wbC0+dGFpbFBvaW50ZXI8VD4oKTsKIApAQCAtNDA5LDEzICs0MDgsMTMgQEAg
cHVibGljOgogICAgIH0KIAogICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBzdGF0aWMgUmVmPFN5
bWJvbEltcGw+IGNyZWF0ZU51bGxTeW1ib2woKTsKLSAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkg
c3RhdGljIFJlZjxTeW1ib2xJbXBsPiBjcmVhdGVTeW1ib2woUGFzc1JlZlB0cjxTdHJpbmdJbXBs
PiByZXApOworICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBzdGF0aWMgUmVmPFN5bWJvbEltcGw+
IGNyZWF0ZVN5bWJvbChTdHJpbmdJbXBsJiByZXApOwogCi0gICAgLy8gUmVhbGxvY2F0ZSB0aGUg
U3RyaW5nSW1wbC4gVGhlIG9yaWdpbmFsU3RyaW5nIG11c3QgYmUgb25seSBvd25lZCBieSB0aGUg
UGFzc1JlZlB0ciwKKyAgICAvLyBSZWFsbG9jYXRlIHRoZSBTdHJpbmdJbXBsLiBUaGUgb3JpZ2lu
YWxTdHJpbmcgbXVzdCBiZSBvbmx5IG93bmVkIGJ5IHRoZSBSZWYsCiAgICAgLy8gYW5kIHRoZSBi
dWZmZXIgb3duZXJzaGlwIG11c3QgYmUgQnVmZmVySW50ZXJuYWwuIEp1c3QgbGlrZSB0aGUgaW5w
dXQgcG9pbnRlciBvZiByZWFsbG9jKCksCiAgICAgLy8gdGhlIG9yaWdpbmFsU3RyaW5nIGNhbid0
IGJlIHVzZWQgYWZ0ZXIgdGhpcyBmdW5jdGlvbi4KLSAgICBzdGF0aWMgUmVmPFN0cmluZ0ltcGw+
IHJlYWxsb2NhdGUoUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBvcmlnaW5hbFN0cmluZywgdW5zaWdu
ZWQgbGVuZ3RoLCBMQ2hhciomIGRhdGEpOwotICAgIHN0YXRpYyBSZWY8U3RyaW5nSW1wbD4gcmVh
bGxvY2F0ZShQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IG9yaWdpbmFsU3RyaW5nLCB1bnNpZ25lZCBs
ZW5ndGgsIFVDaGFyKiYgZGF0YSk7CisgICAgc3RhdGljIFJlZjxTdHJpbmdJbXBsPiByZWFsbG9j
YXRlKFJlZjxTdHJpbmdJbXBsPiYmIG9yaWdpbmFsU3RyaW5nLCB1bnNpZ25lZCBsZW5ndGgsIExD
aGFyKiYgZGF0YSk7CisgICAgc3RhdGljIFJlZjxTdHJpbmdJbXBsPiByZWFsbG9jYXRlKFJlZjxT
dHJpbmdJbXBsPiYmIG9yaWdpbmFsU3RyaW5nLCB1bnNpZ25lZCBsZW5ndGgsIFVDaGFyKiYgZGF0
YSk7CiAKICAgICBzdGF0aWMgdW5zaWduZWQgZmxhZ3NPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoU3RyaW5nSW1wbCwgbV9oYXNoQW5kRmxhZ3MpOyB9CiAgICAgc3RhdGljIHVuc2ln
bmVkIGZsYWdJczhCaXQoKSB7IHJldHVybiBzX2hhc2hGbGFnOEJpdEJ1ZmZlcjsgfQpAQCAtNzY1
LDcgKzc2NCw3IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKGJ1ZmZlck93bmVyc2hpcCgpID09
IEJ1ZmZlclN1YnN0cmluZyk7CiAgICAgICAgIEFTU0VSVChzdWJzdHJpbmdCdWZmZXIoKSk7CiAg
ICAgICAgIEFTU0VSVCghc3Vic3RyaW5nQnVmZmVyKCktPmlzU3ltYm9sKCkpOwotICAgICAgICBy
ZXR1cm4gY3JlYXRlU3Vic3RyaW5nU2hhcmluZ0ltcGwodGhpcywgMCwgbGVuZ3RoKCkpOworICAg
ICAgICByZXR1cm4gY3JlYXRlU3Vic3RyaW5nU2hhcmluZ0ltcGwoKnRoaXMsIDAsIGxlbmd0aCgp
KTsKICAgICB9CiAKICAgICBTeW1ib2xSZWdpc3RyeSogY29uc3QmIHN5bWJvbFJlZ2lzdHJ5KCkg
Y29uc3QKQEAgLTg2MCw3ICs4NTksNyBAQCBwcml2YXRlOgogICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBDaGFyVHlwZT4gc3RhdGljIFJlZjxTdHJpbmdJbXBsPiBjb25zdHJ1Y3RJbnRlcm5hbChTdHJp
bmdJbXBsKiwgdW5zaWduZWQpOwogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyVHlwZT4gc3Rh
dGljIFJlZjxTdHJpbmdJbXBsPiBjcmVhdGVVbmluaXRpYWxpemVkSW50ZXJuYWwodW5zaWduZWQs
IENoYXJUeXBlKiYpOwogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyVHlwZT4gc3RhdGljIFJl
ZjxTdHJpbmdJbXBsPiBjcmVhdGVVbmluaXRpYWxpemVkSW50ZXJuYWxOb25FbXB0eSh1bnNpZ25l
ZCwgQ2hhclR5cGUqJik7Ci0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJUeXBlPiBzdGF0aWMg
UmVmPFN0cmluZ0ltcGw+IHJlYWxsb2NhdGVJbnRlcm5hbChQYXNzUmVmUHRyPFN0cmluZ0ltcGw+
LCB1bnNpZ25lZCwgQ2hhclR5cGUqJik7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJUeXBl
PiBzdGF0aWMgUmVmPFN0cmluZ0ltcGw+IHJlYWxsb2NhdGVJbnRlcm5hbChSZWY8U3RyaW5nSW1w
bD4mJiwgdW5zaWduZWQsIENoYXJUeXBlKiYpOwogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFy
VHlwZT4gc3RhdGljIFJlZjxTdHJpbmdJbXBsPiBjcmVhdGVJbnRlcm5hbChjb25zdCBDaGFyVHlw
ZSosIHVuc2lnbmVkKTsKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgTkVWRVJfSU5MSU5FIHVuc2ln
bmVkIGhhc2hTbG93Q2FzZSgpIGNvbnN0OwogICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMg
dW5zaWduZWQgbmV4dEhhc2hGb3JTeW1ib2woKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3Rm
L3RleHQvU3ltYm9sUmVnaXN0cnkuY3BwIGIvU291cmNlL1dURi93dGYvdGV4dC9TeW1ib2xSZWdp
c3RyeS5jcHAKaW5kZXggYWFkMTM1ZjNmNjliYWM2NjNkODY3Yzc2NDg0Y2FkZTNkMWVjNDE1Yi4u
NjRlYTFjYTZjNTgxZTk0MDRkNGJhN2E5YzBiNjkxOWJhZmM4MjRlMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dURi93dGYvdGV4dC9TeW1ib2xSZWdpc3RyeS5jcHAKKysrIGIvU291cmNlL1dURi93dGYv
dGV4dC9TeW1ib2xSZWdpc3RyeS5jcHAKQEAgLTQwLDcgKzQwLDcgQEAgUmVmPFN5bWJvbEltcGw+
IFN5bWJvbFJlZ2lzdHJ5OjpzeW1ib2xGb3JLZXkoY29uc3QgU3RyaW5nJiByZXApCiAgICAgaWYg
KCFhZGRSZXN1bHQuaXNOZXdFbnRyeSkKICAgICAgICAgcmV0dXJuICpzdGF0aWNfY2FzdDxTeW1i
b2xJbXBsKj4oYWRkUmVzdWx0Lml0ZXJhdG9yLT5pbXBsKCkpOwogCi0gICAgUmVmPFN5bWJvbElt
cGw+IHN5bWJvbCA9IFN0cmluZ0ltcGw6OmNyZWF0ZVN5bWJvbChyZXAuaW1wbCgpKTsKKyAgICBh
dXRvIHN5bWJvbCA9IFN0cmluZ0ltcGw6OmNyZWF0ZVN5bWJvbCgqcmVwLmltcGwoKSk7CiAgICAg
c3ltYm9sLT5zeW1ib2xSZWdpc3RyeSgpID0gdGhpczsKICAgICAqYWRkUmVzdWx0Lml0ZXJhdG9y
ID0gU3ltYm9sUmVnaXN0cnlLZXkoJnN5bWJvbC5nZXQoKSk7CiAgICAgcmV0dXJuIHN5bWJvbDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmNwcCBiL1NvdXJjZS9X
VEYvd3RmL3RleHQvV1RGU3RyaW5nLmNwcAppbmRleCBmMzFhYWM3NmMyNDg4MDRhNzNlNWY0MDM5
NzlkOTRmM2I4OTBhMzdlLi5mYjYwNDAwODQ0YWVkMGFlZmE1MzgyZWY3NGUyMzdjNDFhNDYwMDli
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5jcHAKKysrIGIvU291
cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcuY3BwCkBAIC0zMzIsNyArMzMyLDcgQEAgU3RyaW5n
IFN0cmluZzo6c3Vic3RyaW5nU2hhcmluZ0ltcGwodW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBs
ZW5ndGgpIGNvbnN0CiAKICAgICBpZiAoIW9mZnNldCAmJiBsZW5ndGggPT0gc3RyaW5nTGVuZ3Ro
KQogICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgcmV0dXJuIFN0cmluZyhTdHJpbmdJbXBsOjpj
cmVhdGVTdWJzdHJpbmdTaGFyaW5nSW1wbChtX2ltcGwsIG9mZnNldCwgbGVuZ3RoKSk7CisgICAg
cmV0dXJuIFN0cmluZyhTdHJpbmdJbXBsOjpjcmVhdGVTdWJzdHJpbmdTaGFyaW5nSW1wbCgqbV9p
bXBsLCBvZmZzZXQsIGxlbmd0aCkpOwogfQogCiBTdHJpbmcgU3RyaW5nOjpjb252ZXJ0VG9BU0NJ
SUxvd2VyY2FzZSgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0
cmluZy5oIGIvU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcuaAppbmRleCBlZjYyMWZjNDEz
MzQ5ZTY5NmQ3NWFmZmE3Mzk4YmIwMTM1NjA5YjllLi5lY2RlZDg4NjBlNzMyZTMxNzc1ZWMwMGQ0
YmNkYzk2NmZjZTBiYzBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmlu
Zy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmgKQEAgLTEwNyw3ICsxMDcs
NiBAQCBwdWJsaWM6CiAgICAgLy8gQ29uc3RydWN0IGEgc3RyaW5nIHJlZmVyZW5jaW5nIGFuIGV4
aXN0aW5nIFN0cmluZ0ltcGwuCiAgICAgU3RyaW5nKFN0cmluZ0ltcGwmKTsKICAgICBTdHJpbmco
U3RyaW5nSW1wbCopOwotICAgIFN0cmluZyhQYXNzUmVmUHRyPFN0cmluZ0ltcGw+KTsKICAgICBT
dHJpbmcoUmVmPFN0cmluZ0ltcGw+JiYpOwogICAgIFN0cmluZyhSZWZQdHI8U3RyaW5nSW1wbD4m
Jik7CiAKQEAgLTUzMSwxMSArNTMwLDYgQEAgaW5saW5lIFN0cmluZzo6U3RyaW5nKFN0cmluZ0lt
cGwqIGltcGwpCiB7CiB9CiAKLWlubGluZSBTdHJpbmc6OlN0cmluZyhQYXNzUmVmUHRyPFN0cmlu
Z0ltcGw+IGltcGwpCi0gICAgOiBtX2ltcGwoaW1wbCkKLXsKLX0KLQogaW5saW5lIFN0cmluZzo6
U3RyaW5nKFJlZjxTdHJpbmdJbXBsPiYmIGltcGwpCiAgICAgOiBtX2ltcGwoV1RGTW92ZShpbXBs
KSkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvY2YvU3RyaW5nSW1wbENGLmNw
cCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvY2YvU3RyaW5nSW1wbENGLmNwcAppbmRleCA3YmFkOWE3
ZDEyZGY0YmFlYWJjZjg3ZTA4ZWZkYjRlOTg0NmY4YzQ3Li41M2Y0OTgzODNmYWM4OWNkMDA0MTMx
Y2ZiYzA2MjQyNTYxNzg5Y2Y5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L2NmL1N0
cmluZ0ltcGxDRi5jcHAKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9jZi9TdHJpbmdJbXBsQ0Yu
Y3BwCkBAIC0yNSw3ICsyNSw2IEBACiAKICNpbmNsdWRlIDxDb3JlRm91bmRhdGlvbi9Db3JlRm91
bmRhdGlvbi5oPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+Ci0jaW5jbHVkZSA8d3RmL1Bh
c3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Ro
cmVhZGluZy5oPgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZl
VmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmNwcAppbmRl
eCA1OGE5Y2ZlZDU0YTQ0OTdhMGQ4ZTJiMGU5YjMzOWE0NmIyZDVkYjZlLi45NzY5NjJlMGE3ZDkz
NDZlOGFkZTM4MTY1ZjMyMjk0ZGYyNDc0ZTE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTUHJpbWl0aXZlVmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmlt
aXRpdmVWYWx1ZS5jcHAKQEAgLTk2OCw3ICs5NjgsNyBAQCBORVZFUl9JTkxJTkUgUmVmPFN0cmlu
Z0ltcGw+IENTU1ByaW1pdGl2ZVZhbHVlOjpmb3JtYXROdW1iZXJWYWx1ZShjb25zdCBjaGFyKiBz
dQogCiAgICAgdW5zaWduZWQgYnVmZmVyTGVuZ3RoID0gZGVjaW1hbC5idWZmZXJMZW5ndGhGb3JT
dHJpbmdEZWNpbWFsKCkgKyBzdWZmaXhMZW5ndGg7CiAgICAgTENoYXIqIGJ1ZmZlcjsKLSAgICBS
ZWY8U3RyaW5nSW1wbD4gc3RyaW5nID0gU3RyaW5nSW1wbDo6Y3JlYXRlVW5pbml0aWFsaXplZChi
dWZmZXJMZW5ndGgsIGJ1ZmZlcik7CisgICAgYXV0byBzdHJpbmcgPSBTdHJpbmdJbXBsOjpjcmVh
dGVVbmluaXRpYWxpemVkKGJ1ZmZlckxlbmd0aCwgYnVmZmVyKTsKIAogICAgIHVuc2lnbmVkIGxl
bmd0aCA9IGRlY2ltYWwudG9TdHJpbmdEZWNpbWFsKGJ1ZmZlciwgYnVmZmVyTGVuZ3RoKTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9Eb2N1bWVudC5jcHAKaW5kZXggNzUxYzE3M2E0NTk5MDE1MjI4N2UxYmFlY2Y5NzJm
Y2VmNGQ3YjlmNC4uMmFlYTQyNzU0ODY1MDdkNDRkNDkxMTBkZTAwMDVjY2RhMjE3NGMzZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vRG9jdW1lbnQuY3BwCkBAIC01NDY4LDcgKzU0NjgsNyBAQCB2b2lkIERvY3VtZW50
Ojp3aW5kb3dTY3JlZW5EaWRDaGFuZ2UoUGxhdGZvcm1EaXNwbGF5SUQgZGlzcGxheUlEKQogU3Ry
aW5nIERvY3VtZW50OjpkaXNwbGF5U3RyaW5nTW9kaWZpZWRCeUVuY29kaW5nKGNvbnN0IFN0cmlu
ZyYgc3RyKSBjb25zdAogewogICAgIGlmIChtX2RlY29kZXIpCi0gICAgICAgIHJldHVybiBtX2Rl
Y29kZXItPmVuY29kaW5nKCkuZGlzcGxheVN0cmluZyhzdHIuaW1wbCgpKTsKKyAgICAgICAgcmV0
dXJuIG1fZGVjb2Rlci0+ZW5jb2RpbmcoKS5kaXNwbGF5U3RyaW5nKHN0ci5pbXBsKCkpLmdldCgp
OwogICAgIHJldHVybiBzdHI7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5jcHAKaW5kZXggMmQ3MTFhYzVhMWZhYmRhMjY1
ODQ4OTEwMGUzNTViMzg3MTlmN2IwOS4uN2MwOTE5N2MzNWY3Y2NhMzBlYjhlNzc3NWE1ZTVhNGNk
NjllYTRlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0wyUmVu
ZGVyaW5nQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0wy
UmVuZGVyaW5nQ29udGV4dC5jcHAKQEAgLTE4MzYsNyArMTgzNiw3IEBAIFdlYkdMR2V0SW5mbyBX
ZWJHTDJSZW5kZXJpbmdDb250ZXh0OjpnZXRQYXJhbWV0ZXIoR0MzRGVudW0gcG5hbWUsIEV4Y2Vw
dGlvbkNvZGUmCiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfV1JJVEVNQVNLOgog
ICAgICAgICByZXR1cm4gZ2V0Qm9vbGVhbkFycmF5UGFyYW1ldGVyKHBuYW1lKTsKICAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpDT01QUkVTU0VEX1RFWFRVUkVfRk9STUFUUzoKLSAgICAgICAg
cmV0dXJuIFdlYkdMR2V0SW5mbyhVaW50MzJBcnJheTo6Y3JlYXRlKG1fY29tcHJlc3NlZFRleHR1
cmVGb3JtYXRzLmRhdGEoKSwgbV9jb21wcmVzc2VkVGV4dHVyZUZvcm1hdHMuc2l6ZSgpKS5yZWxl
YXNlKCkpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBhc3NSZWZQdHI8VWludDMyQXJy
YXk+KFVpbnQzMkFycmF5OjpjcmVhdGUobV9jb21wcmVzc2VkVGV4dHVyZUZvcm1hdHMuZGF0YSgp
LCBtX2NvbXByZXNzZWRUZXh0dXJlRm9ybWF0cy5zaXplKCkpKSk7CiAgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6Q1VMTF9GQUNFOgogICAgICAgICByZXR1cm4gZ2V0Qm9vbGVhblBhcmFtZXRl
cihwbmFtZSk7CiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q1VMTF9GQUNFX01PREU6CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRl
eHQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0
LmNwcAppbmRleCBlOTU2NzEzMDIwMmQ2NjQ4NWU1NmNkOTE3NjEyOTVkOTVkMGZhNzEyLi4yYTVh
YWIxZTIxZDEzZTA3ODAwNzdmNTZjOGYxNTE4M2Q1ODg5OTA1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAKQEAgLTk1NSw3
ICs5NTUsNyBAQCBXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRQYXJhbWV0
ZXIoR0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNvZGUmCiAgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6Q09MT1JfV1JJVEVNQVNLOgogICAgICAgICByZXR1cm4gZ2V0Qm9vbGVhbkFycmF5UGFy
YW1ldGVyKHBuYW1lKTsKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDT01QUkVTU0VEX1RF
WFRVUkVfRk9STUFUUzoKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhVaW50MzJBcnJheTo6
Y3JlYXRlKG1fY29tcHJlc3NlZFRleHR1cmVGb3JtYXRzLmRhdGEoKSwgbV9jb21wcmVzc2VkVGV4
dHVyZUZvcm1hdHMuc2l6ZSgpKS5yZWxlYXNlKCkpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJ
bmZvKFBhc3NSZWZQdHI8VWludDMyQXJyYXk+KFVpbnQzMkFycmF5OjpjcmVhdGUobV9jb21wcmVz
c2VkVGV4dHVyZUZvcm1hdHMuZGF0YSgpLCBtX2NvbXByZXNzZWRUZXh0dXJlRm9ybWF0cy5zaXpl
KCkpKSk7CiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q1VMTF9GQUNFOgogICAgICAgICBy
ZXR1cm4gZ2V0Qm9vbGVhblBhcmFtZXRlcihwbmFtZSk7CiAgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6Q1VMTF9GQUNFX01PREU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwCmluZGV4IGIwMDEwYjZlOTgwYmVk
MmU5OTM4YjJkOTdkNWRjODk3YzgxYmI3NjEuLjQ4ZjdmOTc3ZjJkYzRlZWUzMGUxN2VlZDViODdj
YmM0M2QyNzdiNzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwCkBAIC0yNTEwLDcgKzI1MTAsNyBAQCBXZWJH
TEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0VW5pZm9ybShXZWJHTFByb2dy
YW0qIHByb2dyYW0sIGNvbnN0CiAgICAgICAgICAgICBtX2NvbnRleHQtPmdldFVuaWZvcm1mdihv
YmplY3RPclplcm8ocHJvZ3JhbSksIGxvY2F0aW9uLCB2YWx1ZSk7CiAgICAgICAgIGlmIChsZW5n
dGggPT0gMSkKICAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8odmFsdWVbMF0pOwotICAg
ICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKEZsb2F0MzJBcnJheTo6Y3JlYXRlKHZhbHVlLCBsZW5n
dGgpLnJlbGVhc2UoKSk7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oUGFzc1JlZlB0cjxG
bG9hdDMyQXJyYXk+KEZsb2F0MzJBcnJheTo6Y3JlYXRlKHZhbHVlLCBsZW5ndGgpKSk7CiAgICAg
fQogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OklOVDogewogICAgICAgICBHQzNEaW50IHZh
bHVlWzRdID0gezB9OwpAQCAtMjUyMCw3ICsyNTIwLDcgQEAgV2ViR0xHZXRJbmZvIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OmdldFVuaWZvcm0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBjb25z
dAogICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRVbmlmb3JtaXYob2JqZWN0T3JaZXJvKHByb2dy
YW0pLCBsb2NhdGlvbiwgdmFsdWUpOwogICAgICAgICBpZiAobGVuZ3RoID09IDEpCiAgICAgICAg
ICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHZhbHVlWzBdKTsKLSAgICAgICAgcmV0dXJuIFdlYkdM
R2V0SW5mbyhJbnQzMkFycmF5OjpjcmVhdGUodmFsdWUsIGxlbmd0aCkucmVsZWFzZSgpKTsKKyAg
ICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhQYXNzUmVmUHRyPEludDMyQXJyYXk+KEludDMyQXJy
YXk6OmNyZWF0ZSh2YWx1ZSwgbGVuZ3RoKSkpOwogICAgIH0KICAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpCT09MOiB7CiAgICAgICAgIEdDM0RpbnQgdmFsdWVbNF0gPSB7MH07CkBAIC0yNjE2
LDcgKzI2MTYsNyBAQCBXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0
VmVydGV4QXR0cmliKEdDM0R1aW50IGluZGV4LCBHQzNEZW51bQogICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlZFUlRFWF9BVFRSSUJfQVJSQVlfVFlQRToKICAgICAgICAgcmV0dXJuIFdlYkdM
R2V0SW5mbyhzdGF0ZS50eXBlKTsKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDVVJSRU5U
X1ZFUlRFWF9BVFRSSUI6Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oRmxvYXQzMkFycmF5
OjpjcmVhdGUobV92ZXJ0ZXhBdHRyaWJWYWx1ZVtpbmRleF0udmFsdWUsIDQpLnJlbGVhc2UoKSk7
CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oUGFzc1JlZlB0cjxGbG9hdDMyQXJyYXk+KEZs
b2F0MzJBcnJheTo6Y3JlYXRlKG1fdmVydGV4QXR0cmliVmFsdWVbaW5kZXhdLnZhbHVlLCA0KSkp
OwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX0VOVU0sICJnZXRWZXJ0ZXhBdHRyaWIiLCAiaW52YWxpZCBwYXJhbWV0ZXIg
bmFtZSIpOwogICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CkBAIC0zOTY0LDcgKzM5NjQs
NyBAQCBXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0V2ViR0xGbG9h
dEFycmF5UGFyYW1ldGVyKEdDM0RlbnVtIHBuYQogICAgIGRlZmF1bHQ6CiAgICAgICAgIG5vdElt
cGxlbWVudGVkKCk7CiAgICAgfQotICAgIHJldHVybiBXZWJHTEdldEluZm8oRmxvYXQzMkFycmF5
OjpjcmVhdGUodmFsdWUsIGxlbmd0aCkucmVsZWFzZSgpKTsKKyAgICByZXR1cm4gV2ViR0xHZXRJ
bmZvKFBhc3NSZWZQdHI8RmxvYXQzMkFycmF5PihGbG9hdDMyQXJyYXk6OmNyZWF0ZSh2YWx1ZSwg
bGVuZ3RoKSkpOwogfQogCiBXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6
Z2V0V2ViR0xJbnRBcnJheVBhcmFtZXRlcihHQzNEZW51bSBwbmFtZSkKQEAgLTM5ODMsNyArMzk4
Myw3IEBAIFdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRXZWJHTElu
dEFycmF5UGFyYW1ldGVyKEdDM0RlbnVtIHBuYW1lCiAgICAgZGVmYXVsdDoKICAgICAgICAgbm90
SW1wbGVtZW50ZWQoKTsKICAgICB9Ci0gICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhJbnQzMkFycmF5
OjpjcmVhdGUodmFsdWUsIGxlbmd0aCkucmVsZWFzZSgpKTsKKyAgICByZXR1cm4gV2ViR0xHZXRJ
bmZvKFBhc3NSZWZQdHI8SW50MzJBcnJheT4oSW50MzJBcnJheTo6Y3JlYXRlKHZhbHVlLCBsZW5n
dGgpKSk7CiB9CiAKIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Y2hlY2tUZXh0dXJl
Q29tcGxldGVuZXNzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgYm9vbCBwcmVwYXJlVG9EcmF3
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYW5pbWF0aW9uL1RpbWluZ0Z1
bmN0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hbmltYXRpb24vVGltaW5nRnVuY3Rp
b24uaAppbmRleCAzYTEyNDU4NmNlMmU4MTI5NTI5ODAwMjk3NzIwMGU2M2E5NDVhZTcyLi4zMDQ0
ZDIzNzgwNjA3YTdiN2Y0ODg4YTBlYTZmYTc2NTA1ZDJlYWQyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9hbmltYXRpb24vVGltaW5nRnVuY3Rpb24uaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9hbmltYXRpb24vVGltaW5nRnVuY3Rpb24uaApAQCAtMjcsNiArMjcs
NyBAQAogCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291
bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9JUEMvSGFuZGxlTWVzc2FnZS5o
IGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vSVBDL0hhbmRsZU1lc3NhZ2UuaAppbmRleCAyY2Uw
ODNkZTY5YjExMDJhYzkzNTY2MjNjZGQyMmVhNGYxZjRkMDIxLi5jMDhhM2RhYTg0OGNjZGJlODhl
MTU3N2IyNTNmMjI4MDQ0MmEyMTJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9y
bS9JUEMvSGFuZGxlTWVzc2FnZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0lQQy9I
YW5kbGVNZXNzYWdlLmgKQEAgLTE0MSw3ICsxNDEsNyBAQCB2b2lkIGhhbmRsZU1lc3NhZ2VEZWxh
eWVkKENvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIE1lc3NhZ2VEZWNvZGVyJiBkZWNvZGVyLCBzdGQ6
OgogICAgIH0KIAogICAgIFJlZlB0cjx0eXBlbmFtZSBUOjpEZWxheWVkUmVwbHk+IGRlbGF5ZWRS
ZXBseSA9IGFkb3B0UmVmKG5ldyB0eXBlbmFtZSBUOjpEZWxheWVkUmVwbHkoJmNvbm5lY3Rpb24s
IFdURk1vdmUocmVwbHlFbmNvZGVyKSkpOwotICAgIGNhbGxNZW1iZXJGdW5jdGlvbihXVEZNb3Zl
KGFyZ3VtZW50cyksIGRlbGF5ZWRSZXBseS5yZWxlYXNlKCksIG9iamVjdCwgZnVuY3Rpb24pOwor
ICAgIGNhbGxNZW1iZXJGdW5jdGlvbihXVEZNb3ZlKGFyZ3VtZW50cyksIFBhc3NSZWZQdHI8dHlw
ZW5hbWUgVDo6RGVsYXllZFJlcGx5PihXVEZNb3ZlKGRlbGF5ZWRSZXBseSkpLCBvYmplY3QsIGZ1
bmN0aW9uKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSVBDCmRpZmYgLS1naXQgYS9Ub29scy9DaGFu
Z2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYjFlZjFhZWZmYTE3NzBlZWU4MDMxMWEwNzgx
YjllMTQ1YjM5MmVjOC4uZmNhYmJmMzJhYjNiODcwMzFiY2FiMzllNzA1ZjZhNTUxYjUxYWQwZSAx
MDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDE3IEBACisyMDE2LTA1LTI3ICBLZWl0aCBSb2xsaW4gIDxrcm9sbGluQGFwcGxlLmNvbT4K
KworICAgICAgICBSZW1vdmUgYWxsIHVzZXMgb2YgUGFzc1JlZlB0ciBpbiBXVEYKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NzU5NgorICAgICAgICA8
cmRhcjovL3Byb2JsZW0vMjYyMzQzOTE+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgVXBkYXRlIGNhbGxzIHRvIGludGVyZmFjZXMgdGhhdCBubyBsb25n
ZXIgdGFrZSBvciByZXR1cm4gUGFzc1JlZlB0cnMuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dURi9TdHJpbmdJbXBsLmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OnN0cmlu
Z0Zyb21VVEY4KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorCiAyMDE2LTA2LTAx
ICBDaHJpcyBGbGVpemFjaCAgPGNmbGVpemFjaEBhcHBsZS5jb20+CiAKICAgICAgICAgQVg6IGlP
UzogVm9pY2VPdmVyIGNhbid0IGFjY2VzcyBhdHRhY2htZW50cyBpbiBtYWlsIG1lc3NhZ2VzCmRp
ZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9TdHJpbmdJbXBsLmNwcCBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1N0cmluZ0ltcGwuY3BwCmluZGV4IDhjZDZj
MDljZmI1YzI0Zjc5YTYyMzg3NjU0M2FmMzc5MTM5ODIyNmYuLjk4NDlkZWMzZTViOTI1Nzk5ZWY5
Zjc3M2FmYWZhMTZkMTc0ZTUyOTkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV1RGL1N0cmluZ0ltcGwuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RG
L1N0cmluZ0ltcGwuY3BwCkBAIC0zMywxNCArMzMsMTQgQEAgbmFtZXNwYWNlIFRlc3RXZWJLaXRB
UEkgewogVEVTVChXVEYsIFN0cmluZ0ltcGxDcmVhdGlvbkZyb21MaXRlcmFsKQogewogICAgIC8v
IENvbnN0cnVjdG9yIHVzaW5nIHRoZSB0ZW1wbGF0ZSB0byBkZXRlcm1pbmUgdGhlIHNpemUuCi0g
ICAgUmVmUHRyPFN0cmluZ0ltcGw+IHN0cmluZ1dpdGhUZW1wbGF0ZSA9IFN0cmluZ0ltcGw6OmNy
ZWF0ZUZyb21MaXRlcmFsKCJUZW1wbGF0ZSBMaXRlcmFsIik7CisgICAgYXV0byBzdHJpbmdXaXRo
VGVtcGxhdGUgPSBTdHJpbmdJbXBsOjpjcmVhdGVGcm9tTGl0ZXJhbCgiVGVtcGxhdGUgTGl0ZXJh
bCIpOwogICAgIEFTU0VSVF9FUShzdHJsZW4oIlRlbXBsYXRlIExpdGVyYWwiKSwgc3RyaW5nV2l0
aFRlbXBsYXRlLT5sZW5ndGgoKSk7CiAgICAgQVNTRVJUX1RSVUUoZXF1YWwoc3RyaW5nV2l0aFRl
bXBsYXRlLmdldCgpLCAiVGVtcGxhdGUgTGl0ZXJhbCIpKTsKICAgICBBU1NFUlRfVFJVRShzdHJp
bmdXaXRoVGVtcGxhdGUtPmlzOEJpdCgpKTsKIAogICAgIC8vIENvbnN0cnVjdG9yIHRha2luZyB0
aGUgc2l6ZSBleHBsaWNpdGVseS4KICAgICBjb25zdCBjaGFyKiBwcm9ncmFtbWF0aWNTdHJpbmdE
YXRhID0gIkV4cGxpY2l0IFNpemUgTGl0ZXJhbCI7Ci0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IHBy
b2dyYW1tYXRpY1N0cmluZyA9IFN0cmluZ0ltcGw6OmNyZWF0ZUZyb21MaXRlcmFsKHByb2dyYW1t
YXRpY1N0cmluZ0RhdGEsIHN0cmxlbihwcm9ncmFtbWF0aWNTdHJpbmdEYXRhKSk7CisgICAgYXV0
byBwcm9ncmFtbWF0aWNTdHJpbmcgPSBTdHJpbmdJbXBsOjpjcmVhdGVGcm9tTGl0ZXJhbChwcm9n
cmFtbWF0aWNTdHJpbmdEYXRhLCBzdHJsZW4ocHJvZ3JhbW1hdGljU3RyaW5nRGF0YSkpOwogICAg
IEFTU0VSVF9FUShzdHJsZW4ocHJvZ3JhbW1hdGljU3RyaW5nRGF0YSksIHByb2dyYW1tYXRpY1N0
cmluZy0+bGVuZ3RoKCkpOwogICAgIEFTU0VSVF9UUlVFKGVxdWFsKHByb2dyYW1tYXRpY1N0cmlu
Zy5nZXQoKSwgcHJvZ3JhbW1hdGljU3RyaW5nRGF0YSkpOwogICAgIEFTU0VSVF9FUShwcm9ncmFt
bWF0aWNTdHJpbmdEYXRhLCByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihwcm9ncmFtbWF0
aWNTdHJpbmctPmNoYXJhY3RlcnM4KCkpKTsKQEAgLTQ4LDcgKzQ4LDcgQEAgVEVTVChXVEYsIFN0
cmluZ0ltcGxDcmVhdGlvbkZyb21MaXRlcmFsKQogCiAgICAgLy8gQ29uc3RydWN0b3Igd2l0aG91
dCBleHBsaWNpdCBzaXplLgogICAgIGNvbnN0IGNoYXIqIHN0cmluZ1dpdGhvdXRMZW5ndGhMaXRl
cmFsID0gIk5vIFNpemUgTGl0ZXJhbCI7Ci0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IHByb2dyYW1t
YXRpY1N0cmluZ05vTGVuZ3RoID0gU3RyaW5nSW1wbDo6Y3JlYXRlRnJvbUxpdGVyYWwoc3RyaW5n
V2l0aG91dExlbmd0aExpdGVyYWwpOworICAgIGF1dG8gcHJvZ3JhbW1hdGljU3RyaW5nTm9MZW5n
dGggPSBTdHJpbmdJbXBsOjpjcmVhdGVGcm9tTGl0ZXJhbChzdHJpbmdXaXRob3V0TGVuZ3RoTGl0
ZXJhbCk7CiAgICAgQVNTRVJUX0VRKHN0cmxlbihzdHJpbmdXaXRob3V0TGVuZ3RoTGl0ZXJhbCks
IHByb2dyYW1tYXRpY1N0cmluZ05vTGVuZ3RoLT5sZW5ndGgoKSk7CiAgICAgQVNTRVJUX1RSVUUo
ZXF1YWwocHJvZ3JhbW1hdGljU3RyaW5nTm9MZW5ndGguZ2V0KCksIHN0cmluZ1dpdGhvdXRMZW5n
dGhMaXRlcmFsKSk7CiAgICAgQVNTRVJUX0VRKHN0cmluZ1dpdGhvdXRMZW5ndGhMaXRlcmFsLCBy
ZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihwcm9ncmFtbWF0aWNTdHJpbmdOb0xlbmd0aC0+
Y2hhcmFjdGVyczgoKSkpOwpAQCAtNTcsNyArNTcsNyBAQCBURVNUKFdURiwgU3RyaW5nSW1wbENy
ZWF0aW9uRnJvbUxpdGVyYWwpCiAKIFRFU1QoV1RGLCBTdHJpbmdJbXBsUmVwbGFjZVdpdGhMaXRl
cmFsKQogewotICAgIFJlZlB0cjxTdHJpbmdJbXBsPiB0ZXN0U3RyaW5nSW1wbCA9IFN0cmluZ0lt
cGw6OmNyZWF0ZUZyb21MaXRlcmFsKCIxMjI0Iik7CisgICAgYXV0byB0ZXN0U3RyaW5nSW1wbCA9
IFN0cmluZ0ltcGw6OmNyZWF0ZUZyb21MaXRlcmFsKCIxMjI0Iik7CiAgICAgQVNTRVJUX1RSVUUo
dGVzdFN0cmluZ0ltcGwtPmlzOEJpdCgpKTsKIAogICAgIC8vIENhc2VzIGZvciA4Qml0IHNvdXJj
ZS4KQEAgLTEwMSwyMjUgKzEwMSwyMjUgQEAgVEVTVChXVEYsIFN0cmluZ0ltcGxSZXBsYWNlV2l0
aExpdGVyYWwpCiAKIFRFU1QoV1RGLCBTdHJpbmdJbXBsRXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZUJh
c2ljKQogewotICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBhID0gU3RyaW5nSW1wbDo6Y3JlYXRlRnJv
bUxpdGVyYWwoImFCY0RlRkciKTsKLSAgICBSZWZQdHI8U3RyaW5nSW1wbD4gYiA9IFN0cmluZ0lt
cGw6OmNyZWF0ZUZyb21MaXRlcmFsKCJBQkNERUZHIik7Ci0gICAgUmVmUHRyPFN0cmluZ0ltcGw+
IGMgPSBTdHJpbmdJbXBsOjpjcmVhdGVGcm9tTGl0ZXJhbCgiYWJjZGVmZyIpOworICAgIGF1dG8g
YSA9IFN0cmluZ0ltcGw6OmNyZWF0ZUZyb21MaXRlcmFsKCJhQmNEZUZHIik7CisgICAgYXV0byBi
ID0gU3RyaW5nSW1wbDo6Y3JlYXRlRnJvbUxpdGVyYWwoIkFCQ0RFRkciKTsKKyAgICBhdXRvIGMg
PSBTdHJpbmdJbXBsOjpjcmVhdGVGcm9tTGl0ZXJhbCgiYWJjZGVmZyIpOwogICAgIGNvbnN0IGNo
YXIgZFtdID0gImFCY0RlRkciOwotICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBlbXB0eSA9IFN0cmlu
Z0ltcGw6OmNyZWF0ZShyZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIiIpKTsKLSAgICBS
ZWZQdHI8U3RyaW5nSW1wbD4gc2hvcnRlciA9IFN0cmluZ0ltcGw6OmNyZWF0ZUZyb21MaXRlcmFs
KCJhYmNkZWYiKTsKLSAgICBSZWZQdHI8U3RyaW5nSW1wbD4gZGlmZmVyZW50ID0gU3RyaW5nSW1w
bDo6Y3JlYXRlRnJvbUxpdGVyYWwoImFiY3JlZmciKTsKKyAgICBhdXRvIGVtcHR5ID0gU3RyaW5n
SW1wbDo6Y3JlYXRlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiIikpOworICAgIGF1
dG8gc2hvcnRlciA9IFN0cmluZ0ltcGw6OmNyZWF0ZUZyb21MaXRlcmFsKCJhYmNkZWYiKTsKKyAg
ICBhdXRvIGRpZmZlcmVudCA9IFN0cmluZ0ltcGw6OmNyZWF0ZUZyb21MaXRlcmFsKCJhYmNyZWZn
Iik7CiAKICAgICAvLyBJZGVudGl0eS4KLSAgICBBU1NFUlRfVFJVRShlcXVhbElnbm9yaW5nQVND
SUlDYXNlKGEuZ2V0KCksIGEuZ2V0KCkpKTsKLSAgICBBU1NFUlRfVFJVRShlcXVhbElnbm9yaW5n
QVNDSUlDYXNlKGIuZ2V0KCksIGIuZ2V0KCkpKTsKLSAgICBBU1NFUlRfVFJVRShlcXVhbElnbm9y
aW5nQVNDSUlDYXNlKGMuZ2V0KCksIGMuZ2V0KCkpKTsKLSAgICBBU1NFUlRfVFJVRShlcXVhbEln
bm9yaW5nQVNDSUlDYXNlKGEuZ2V0KCksIGQpKTsKLSAgICBBU1NFUlRfVFJVRShlcXVhbElnbm9y
aW5nQVNDSUlDYXNlKGIuZ2V0KCksIGQpKTsKLSAgICBBU1NFUlRfVFJVRShlcXVhbElnbm9yaW5n
QVNDSUlDYXNlKGMuZ2V0KCksIGQpKTsKKyAgICBBU1NFUlRfVFJVRShlcXVhbElnbm9yaW5nQVND
SUlDYXNlKGEucHRyKCksIGEucHRyKCkpKTsKKyAgICBBU1NFUlRfVFJVRShlcXVhbElnbm9yaW5n
QVNDSUlDYXNlKGIucHRyKCksIGIucHRyKCkpKTsKKyAgICBBU1NFUlRfVFJVRShlcXVhbElnbm9y
aW5nQVNDSUlDYXNlKGMucHRyKCksIGMucHRyKCkpKTsKKyAgICBBU1NFUlRfVFJVRShlcXVhbEln
bm9yaW5nQVNDSUlDYXNlKGEucHRyKCksIGQpKTsKKyAgICBBU1NFUlRfVFJVRShlcXVhbElnbm9y
aW5nQVNDSUlDYXNlKGIucHRyKCksIGQpKTsKKyAgICBBU1NFUlRfVFJVRShlcXVhbElnbm9yaW5n
QVNDSUlDYXNlKGMucHRyKCksIGQpKTsKIAogICAgIC8vIFRyYW5zaXRpdml0eS4KLSAgICBBU1NF
UlRfVFJVRShlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGEuZ2V0KCksIGIuZ2V0KCkpKTsKLSAgICBB
U1NFUlRfVFJVRShlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGIuZ2V0KCksIGMuZ2V0KCkpKTsKLSAg
ICBBU1NFUlRfVFJVRShlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGEuZ2V0KCksIGMuZ2V0KCkpKTsK
KyAgICBBU1NFUlRfVFJVRShlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGEucHRyKCksIGIucHRyKCkp
KTsKKyAgICBBU1NFUlRfVFJVRShlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGIucHRyKCksIGMucHRy
KCkpKTsKKyAgICBBU1NFUlRfVFJVRShlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGEucHRyKCksIGMu
cHRyKCkpKTsKIAogICAgIC8vIE5lZ2F0aXZlIGNhc2VzLgotICAgIEFTU0VSVF9GQUxTRShlcXVh
bElnbm9yaW5nQVNDSUlDYXNlKGEuZ2V0KCksIGVtcHR5LmdldCgpKSk7Ci0gICAgQVNTRVJUX0ZB
TFNFKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoYi5nZXQoKSwgZW1wdHkuZ2V0KCkpKTsKLSAgICBB
U1NFUlRfRkFMU0UoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShjLmdldCgpLCBlbXB0eS5nZXQoKSkp
OwotICAgIEFTU0VSVF9GQUxTRShlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGEuZ2V0KCksIHNob3J0
ZXIuZ2V0KCkpKTsKLSAgICBBU1NFUlRfRkFMU0UoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShiLmdl
dCgpLCBzaG9ydGVyLmdldCgpKSk7Ci0gICAgQVNTRVJUX0ZBTFNFKGVxdWFsSWdub3JpbmdBU0NJ
SUNhc2UoYy5nZXQoKSwgc2hvcnRlci5nZXQoKSkpOwotICAgIEFTU0VSVF9GQUxTRShlcXVhbEln
bm9yaW5nQVNDSUlDYXNlKGEuZ2V0KCksIGRpZmZlcmVudC5nZXQoKSkpOwotICAgIEFTU0VSVF9G
QUxTRShlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGIuZ2V0KCksIGRpZmZlcmVudC5nZXQoKSkpOwot
ICAgIEFTU0VSVF9GQUxTRShlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGMuZ2V0KCksIGRpZmZlcmVu
dC5nZXQoKSkpOwotICAgIEFTU0VSVF9GQUxTRShlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGVtcHR5
LmdldCgpLCBkKSk7Ci0gICAgQVNTRVJUX0ZBTFNFKGVxdWFsSWdub3JpbmdBU0NJSUNhc2Uoc2hv
cnRlci5nZXQoKSwgZCkpOwotICAgIEFTU0VSVF9GQUxTRShlcXVhbElnbm9yaW5nQVNDSUlDYXNl
KGRpZmZlcmVudC5nZXQoKSwgZCkpOworICAgIEFTU0VSVF9GQUxTRShlcXVhbElnbm9yaW5nQVND
SUlDYXNlKGEucHRyKCksIGVtcHR5LnB0cigpKSk7CisgICAgQVNTRVJUX0ZBTFNFKGVxdWFsSWdu
b3JpbmdBU0NJSUNhc2UoYi5wdHIoKSwgZW1wdHkucHRyKCkpKTsKKyAgICBBU1NFUlRfRkFMU0Uo
ZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShjLnB0cigpLCBlbXB0eS5wdHIoKSkpOworICAgIEFTU0VS
VF9GQUxTRShlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGEucHRyKCksIHNob3J0ZXIucHRyKCkpKTsK
KyAgICBBU1NFUlRfRkFMU0UoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShiLnB0cigpLCBzaG9ydGVy
LnB0cigpKSk7CisgICAgQVNTRVJUX0ZBTFNFKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoYy5wdHIo
KSwgc2hvcnRlci5wdHIoKSkpOworICAgIEFTU0VSVF9GQUxTRShlcXVhbElnbm9yaW5nQVNDSUlD
YXNlKGEucHRyKCksIGRpZmZlcmVudC5wdHIoKSkpOworICAgIEFTU0VSVF9GQUxTRShlcXVhbEln
bm9yaW5nQVNDSUlDYXNlKGIucHRyKCksIGRpZmZlcmVudC5wdHIoKSkpOworICAgIEFTU0VSVF9G
QUxTRShlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGMucHRyKCksIGRpZmZlcmVudC5wdHIoKSkpOwor
ICAgIEFTU0VSVF9GQUxTRShlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGVtcHR5LnB0cigpLCBkKSk7
CisgICAgQVNTRVJUX0ZBTFNFKGVxdWFsSWdub3JpbmdBU0NJSUNhc2Uoc2hvcnRlci5wdHIoKSwg
ZCkpOworICAgIEFTU0VSVF9GQUxTRShlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGRpZmZlcmVudC5w
dHIoKSwgZCkpOwogfQogCiBURVNUKFdURiwgU3RyaW5nSW1wbEVxdWFsSWdub3JpbmdBU0NJSUNh
c2VXaXRoTnVsbCkKIHsKLSAgICBSZWZQdHI8U3RyaW5nSW1wbD4gcmVmZXJlbmNlID0gU3RyaW5n
SW1wbDo6Y3JlYXRlRnJvbUxpdGVyYWwoImFCY0RlRkciKTsKKyAgICBhdXRvIHJlZmVyZW5jZSA9
IFN0cmluZ0ltcGw6OmNyZWF0ZUZyb21MaXRlcmFsKCJhQmNEZUZHIik7CiAgICAgU3RyaW5nSW1w
bCogbnVsbFN0cmluZ0ltcGwgPSBudWxscHRyOwotICAgIEFTU0VSVF9GQUxTRShlcXVhbElnbm9y
aW5nQVNDSUlDYXNlKG51bGxTdHJpbmdJbXBsLCByZWZlcmVuY2UuZ2V0KCkpKTsKLSAgICBBU1NF
UlRfRkFMU0UoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShyZWZlcmVuY2UuZ2V0KCksIG51bGxTdHJp
bmdJbXBsKSk7CisgICAgQVNTRVJUX0ZBTFNFKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UobnVsbFN0
cmluZ0ltcGwsIHJlZmVyZW5jZS5wdHIoKSkpOworICAgIEFTU0VSVF9GQUxTRShlcXVhbElnbm9y
aW5nQVNDSUlDYXNlKHJlZmVyZW5jZS5wdHIoKSwgbnVsbFN0cmluZ0ltcGwpKTsKICAgICBBU1NF
UlRfVFJVRShlcXVhbElnbm9yaW5nQVNDSUlDYXNlKG51bGxTdHJpbmdJbXBsLCBudWxsU3RyaW5n
SW1wbCkpOwogfQogCiBURVNUKFdURiwgU3RyaW5nSW1wbEVxdWFsSWdub3JpbmdBU0NJSUNhc2VX
aXRoRW1wdHkpCiB7Ci0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IGEgPSBTdHJpbmdJbXBsOjpjcmVh
dGUocmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCIiKSk7Ci0gICAgUmVmUHRyPFN0cmlu
Z0ltcGw+IGIgPSBTdHJpbmdJbXBsOjpjcmVhdGUocmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hh
cio+KCIiKSk7Ci0gICAgQVNTRVJUX1RSVUUoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShhLmdldCgp
LCBiLmdldCgpKSk7Ci0gICAgQVNTRVJUX1RSVUUoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShiLmdl
dCgpLCBhLmdldCgpKSk7CisgICAgYXV0byBhID0gU3RyaW5nSW1wbDo6Y3JlYXRlKHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiIikpOworICAgIGF1dG8gYiA9IFN0cmluZ0ltcGw6OmNy
ZWF0ZShyZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIiIpKTsKKyAgICBBU1NFUlRfVFJV
RShlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGEucHRyKCksIGIucHRyKCkpKTsKKyAgICBBU1NFUlRf
VFJVRShlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGIucHRyKCksIGEucHRyKCkpKTsKIH0KIAotc3Rh
dGljIFJlZlB0cjxTdHJpbmdJbXBsPiBzdHJpbmdGcm9tVVRGOChjb25zdCBjaGFyKiBjaGFyYWN0
ZXJzKQorc3RhdGljIFJlZjxTdHJpbmdJbXBsPiBzdHJpbmdGcm9tVVRGOChjb25zdCBjaGFyKiBj
aGFyYWN0ZXJzKQogewotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KGNoYXJhY3RlcnMpLmlt
cGwoKTsKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChjaGFyYWN0ZXJzKS5yZWxlYXNlSW1w
bCgpLnJlbGVhc2VOb25OdWxsKCk7CiB9CiAKIFRFU1QoV1RGLCBTdHJpbmdJbXBsRXF1YWxJZ25v
cmluZ0FTQ0lJQ2FzZVdpdGhMYXRpbjFDaGFyYWN0ZXJzKQogewotICAgIFJlZlB0cjxTdHJpbmdJ
bXBsPiBhID0gc3RyaW5nRnJvbVVURjgoImFCY8OpZUZHIik7Ci0gICAgUmVmUHRyPFN0cmluZ0lt
cGw+IGIgPSBzdHJpbmdGcm9tVVRGOCgiQUJDw4lFRkciKTsKLSAgICBSZWZQdHI8U3RyaW5nSW1w
bD4gYyA9IHN0cmluZ0Zyb21VVEY4KCJBQkPDqUVGRyIpOwotICAgIFJlZlB0cjxTdHJpbmdJbXBs
PiBkID0gc3RyaW5nRnJvbVVURjgoImFiY8OpZWZnIik7CisgICAgYXV0byBhID0gc3RyaW5nRnJv
bVVURjgoImFCY8OpZUZHIik7CisgICAgYXV0byBiID0gc3RyaW5nRnJvbVVURjgoIkFCQ8OJRUZH
Iik7CisgICAgYXV0byBjID0gc3RyaW5nRnJvbVVURjgoIkFCQ8OpRUZHIik7CisgICAgYXV0byBk
ID0gc3RyaW5nRnJvbVVURjgoImFiY8OpZWZnIik7CiAgICAgY29uc3QgY2hhciBlW10gPSAiYUJj
w6llRkciOwogCiAgICAgLy8gSWRlbnRpdHkuCi0gICAgQVNTRVJUX1RSVUUoZXF1YWxJZ25vcmlu
Z0FTQ0lJQ2FzZShhLmdldCgpLCBhLmdldCgpKSk7Ci0gICAgQVNTRVJUX1RSVUUoZXF1YWxJZ25v
cmluZ0FTQ0lJQ2FzZShiLmdldCgpLCBiLmdldCgpKSk7Ci0gICAgQVNTRVJUX1RSVUUoZXF1YWxJ
Z25vcmluZ0FTQ0lJQ2FzZShjLmdldCgpLCBjLmdldCgpKSk7Ci0gICAgQVNTRVJUX1RSVUUoZXF1
YWxJZ25vcmluZ0FTQ0lJQ2FzZShkLmdldCgpLCBkLmdldCgpKSk7CisgICAgQVNTRVJUX1RSVUUo
ZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShhLnB0cigpLCBhLnB0cigpKSk7CisgICAgQVNTRVJUX1RS
VUUoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShiLnB0cigpLCBiLnB0cigpKSk7CisgICAgQVNTRVJU
X1RSVUUoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShjLnB0cigpLCBjLnB0cigpKSk7CisgICAgQVNT
RVJUX1RSVUUoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShkLnB0cigpLCBkLnB0cigpKSk7CiAKICAg
ICAvLyBBbGwgY29tYmluYXRpb24uCi0gICAgQVNTRVJUX0ZBTFNFKGVxdWFsSWdub3JpbmdBU0NJ
SUNhc2UoYS5nZXQoKSwgYi5nZXQoKSkpOwotICAgIEFTU0VSVF9UUlVFKGVxdWFsSWdub3JpbmdB
U0NJSUNhc2UoYS5nZXQoKSwgYy5nZXQoKSkpOwotICAgIEFTU0VSVF9UUlVFKGVxdWFsSWdub3Jp
bmdBU0NJSUNhc2UoYS5nZXQoKSwgZC5nZXQoKSkpOwotICAgIEFTU0VSVF9GQUxTRShlcXVhbEln
bm9yaW5nQVNDSUlDYXNlKGIuZ2V0KCksIGMuZ2V0KCkpKTsKLSAgICBBU1NFUlRfRkFMU0UoZXF1
YWxJZ25vcmluZ0FTQ0lJQ2FzZShiLmdldCgpLCBkLmdldCgpKSk7Ci0gICAgQVNTRVJUX1RSVUUo
ZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShjLmdldCgpLCBkLmdldCgpKSk7Ci0gICAgQVNTRVJUX0ZB
TFNFKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoYS5nZXQoKSwgZSkpOwotICAgIEFTU0VSVF9GQUxT
RShlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGIuZ2V0KCksIGUpKTsKLSAgICBBU1NFUlRfRkFMU0Uo
ZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShjLmdldCgpLCBlKSk7Ci0gICAgQVNTRVJUX0ZBTFNFKGVx
dWFsSWdub3JpbmdBU0NJSUNhc2UoZC5nZXQoKSwgZSkpOworICAgIEFTU0VSVF9GQUxTRShlcXVh
bElnbm9yaW5nQVNDSUlDYXNlKGEucHRyKCksIGIucHRyKCkpKTsKKyAgICBBU1NFUlRfVFJVRShl
cXVhbElnbm9yaW5nQVNDSUlDYXNlKGEucHRyKCksIGMucHRyKCkpKTsKKyAgICBBU1NFUlRfVFJV
RShlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGEucHRyKCksIGQucHRyKCkpKTsKKyAgICBBU1NFUlRf
RkFMU0UoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShiLnB0cigpLCBjLnB0cigpKSk7CisgICAgQVNT
RVJUX0ZBTFNFKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoYi5wdHIoKSwgZC5wdHIoKSkpOworICAg
IEFTU0VSVF9UUlVFKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoYy5wdHIoKSwgZC5wdHIoKSkpOwor
ICAgIEFTU0VSVF9GQUxTRShlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGEucHRyKCksIGUpKTsKKyAg
ICBBU1NFUlRfRkFMU0UoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShiLnB0cigpLCBlKSk7CisgICAg
QVNTRVJUX0ZBTFNFKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoYy5wdHIoKSwgZSkpOworICAgIEFT
U0VSVF9GQUxTRShlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGQucHRyKCksIGUpKTsKIH0KIAogVEVT
VChXVEYsIFN0cmluZ0ltcGxGaW5kSWdub3JpbmdBU0NJSUNhc2VCYXNpYykKIHsKLSAgICBSZWZQ
dHI8U3RyaW5nSW1wbD4gcmVmZXJlbmNlQSA9IHN0cmluZ0Zyb21VVEY4KCJhQmPDqWVGRyIpOwot
ICAgIFJlZlB0cjxTdHJpbmdJbXBsPiByZWZlcmVuY2VCID0gc3RyaW5nRnJvbVVURjgoIkFCQ8OJ
RUZHIik7CisgICAgYXV0byByZWZlcmVuY2VBID0gc3RyaW5nRnJvbVVURjgoImFCY8OpZUZHIik7
CisgICAgYXV0byByZWZlcmVuY2VCID0gc3RyaW5nRnJvbVVURjgoIkFCQ8OJRUZHIik7CiAKICAg
ICAvLyBTZWFyY2ggdGhlIGV4YWN0IHN0cmluZy4KLSAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8
c2l6ZV90PigwKSwgcmVmZXJlbmNlQS0+ZmluZElnbm9yaW5nQVNDSUlDYXNlKHJlZmVyZW5jZUEu
Z2V0KCkpKTsKLSAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigwKSwgcmVmZXJlbmNl
Qi0+ZmluZElnbm9yaW5nQVNDSUlDYXNlKHJlZmVyZW5jZUIuZ2V0KCkpKTsKKyAgICBFWFBFQ1Rf
RVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigwKSwgcmVmZXJlbmNlQS0+ZmluZElnbm9yaW5nQVNDSUlD
YXNlKHJlZmVyZW5jZUEucHRyKCkpKTsKKyAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90
PigwKSwgcmVmZXJlbmNlQi0+ZmluZElnbm9yaW5nQVNDSUlDYXNlKHJlZmVyZW5jZUIucHRyKCkp
KTsKIAogICAgIC8vIEEgYW5kIEIgYXJlIGRpc3RpbmN0IGJ5IHRoZSBub24tYXNjaWkgY2hhcmFj
dGVyIMOpL8OJLgotICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KG5vdEZvdW5kKSwg
cmVmZXJlbmNlQS0+ZmluZElnbm9yaW5nQVNDSUlDYXNlKHJlZmVyZW5jZUIuZ2V0KCkpKTsKLSAg
ICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90Pihub3RGb3VuZCksIHJlZmVyZW5jZUItPmZp
bmRJZ25vcmluZ0FTQ0lJQ2FzZShyZWZlcmVuY2VBLmdldCgpKSk7CisgICAgRVhQRUNUX0VRKHN0
YXRpY19jYXN0PHNpemVfdD4obm90Rm91bmQpLCByZWZlcmVuY2VBLT5maW5kSWdub3JpbmdBU0NJ
SUNhc2UocmVmZXJlbmNlQi5wdHIoKSkpOworICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXpl
X3Q+KG5vdEZvdW5kKSwgcmVmZXJlbmNlQi0+ZmluZElnbm9yaW5nQVNDSUlDYXNlKHJlZmVyZW5j
ZUEucHRyKCkpKTsKIAogICAgIC8vIEZpbmQgdGhlIHByZWZpeC4KLSAgICBFWFBFQ1RfRVEoc3Rh
dGljX2Nhc3Q8c2l6ZV90PigwKSwgcmVmZXJlbmNlQS0+ZmluZElnbm9yaW5nQVNDSUlDYXNlKFN0
cmluZ0ltcGw6OmNyZWF0ZUZyb21MaXRlcmFsKCJhIikuZ2V0KCkpKTsKLSAgICBFWFBFQ1RfRVEo
c3RhdGljX2Nhc3Q8c2l6ZV90PigwKSwgcmVmZXJlbmNlQS0+ZmluZElnbm9yaW5nQVNDSUlDYXNl
KHN0cmluZ0Zyb21VVEY4KCJhYmPDqSIpLmdldCgpKSk7Ci0gICAgRVhQRUNUX0VRKHN0YXRpY19j
YXN0PHNpemVfdD4oMCksIHJlZmVyZW5jZUEtPmZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShTdHJpbmdJ
bXBsOjpjcmVhdGVGcm9tTGl0ZXJhbCgiQSIpLmdldCgpKSk7Ci0gICAgRVhQRUNUX0VRKHN0YXRp
Y19jYXN0PHNpemVfdD4oMCksIHJlZmVyZW5jZUEtPmZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShzdHJp
bmdGcm9tVVRGOCgiQUJDw6kiKS5nZXQoKSkpOwotICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxz
aXplX3Q+KDApLCByZWZlcmVuY2VCLT5maW5kSWdub3JpbmdBU0NJSUNhc2UoU3RyaW5nSW1wbDo6
Y3JlYXRlRnJvbUxpdGVyYWwoImEiKS5nZXQoKSkpOwotICAgIEVYUEVDVF9FUShzdGF0aWNfY2Fz
dDxzaXplX3Q+KDApLCByZWZlcmVuY2VCLT5maW5kSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nRnJv
bVVURjgoImFiY8OJIikuZ2V0KCkpKTsKLSAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90
PigwKSwgcmVmZXJlbmNlQi0+ZmluZElnbm9yaW5nQVNDSUlDYXNlKFN0cmluZ0ltcGw6OmNyZWF0
ZUZyb21MaXRlcmFsKCJBIikuZ2V0KCkpKTsKLSAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6
ZV90PigwKSwgcmVmZXJlbmNlQi0+ZmluZElnbm9yaW5nQVNDSUlDYXNlKHN0cmluZ0Zyb21VVEY4
KCJBQkPDiSIpLmdldCgpKSk7CisgICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oMCks
IHJlZmVyZW5jZUEtPmZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShTdHJpbmdJbXBsOjpjcmVhdGVGcm9t
TGl0ZXJhbCgiYSIpLnB0cigpKSk7CisgICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4o
MCksIHJlZmVyZW5jZUEtPmZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShzdHJpbmdGcm9tVVRGOCgiYWJj
w6kiKS5wdHIoKSkpOworICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDApLCByZWZl
cmVuY2VBLT5maW5kSWdub3JpbmdBU0NJSUNhc2UoU3RyaW5nSW1wbDo6Y3JlYXRlRnJvbUxpdGVy
YWwoIkEiKS5wdHIoKSkpOworICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDApLCBy
ZWZlcmVuY2VBLT5maW5kSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nRnJvbVVURjgoIkFCQ8OpIiku
cHRyKCkpKTsKKyAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigwKSwgcmVmZXJlbmNl
Qi0+ZmluZElnbm9yaW5nQVNDSUlDYXNlKFN0cmluZ0ltcGw6OmNyZWF0ZUZyb21MaXRlcmFsKCJh
IikucHRyKCkpKTsKKyAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigwKSwgcmVmZXJl
bmNlQi0+ZmluZElnbm9yaW5nQVNDSUlDYXNlKHN0cmluZ0Zyb21VVEY4KCJhYmPDiSIpLnB0cigp
KSk7CisgICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oMCksIHJlZmVyZW5jZUItPmZp
bmRJZ25vcmluZ0FTQ0lJQ2FzZShTdHJpbmdJbXBsOjpjcmVhdGVGcm9tTGl0ZXJhbCgiQSIpLnB0
cigpKSk7CisgICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oMCksIHJlZmVyZW5jZUIt
PmZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShzdHJpbmdGcm9tVVRGOCgiQUJDw4kiKS5wdHIoKSkpOwog
CiAgICAgLy8gTm90IGEgcHJlZml4LgotICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+
KFdURjo6bm90Rm91bmQpLCByZWZlcmVuY2VBLT5maW5kSWdub3JpbmdBU0NJSUNhc2UoU3RyaW5n
SW1wbDo6Y3JlYXRlRnJvbUxpdGVyYWwoIngiKS5nZXQoKSkpOwotICAgIEVYUEVDVF9FUShzdGF0
aWNfY2FzdDxzaXplX3Q+KFdURjo6bm90Rm91bmQpLCByZWZlcmVuY2VBLT5maW5kSWdub3JpbmdB
U0NJSUNhc2Uoc3RyaW5nRnJvbVVURjgoImFjY8OpIikuZ2V0KCkpKTsKLSAgICBFWFBFQ1RfRVEo
c3RhdGljX2Nhc3Q8c2l6ZV90PihXVEY6Om5vdEZvdW5kKSwgcmVmZXJlbmNlQS0+ZmluZElnbm9y
aW5nQVNDSUlDYXNlKHN0cmluZ0Zyb21VVEY4KCJhYmPDiSIpLmdldCgpKSk7Ci0gICAgRVhQRUNU
X0VRKHN0YXRpY19jYXN0PHNpemVfdD4oV1RGOjpub3RGb3VuZCksIHJlZmVyZW5jZUEtPmZpbmRJ
Z25vcmluZ0FTQ0lJQ2FzZShTdHJpbmdJbXBsOjpjcmVhdGVGcm9tTGl0ZXJhbCgiWCIpLmdldCgp
KSk7Ci0gICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oV1RGOjpub3RGb3VuZCksIHJl
ZmVyZW5jZUEtPmZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShzdHJpbmdGcm9tVVRGOCgiQUJEw6kiKS5n
ZXQoKSkpOwotICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KFdURjo6bm90Rm91bmQp
LCByZWZlcmVuY2VBLT5maW5kSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nRnJvbVVURjgoIkFCQ8OJ
IikuZ2V0KCkpKTsKLSAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PihXVEY6Om5vdEZv
dW5kKSwgcmVmZXJlbmNlQi0+ZmluZElnbm9yaW5nQVNDSUlDYXNlKFN0cmluZ0ltcGw6OmNyZWF0
ZUZyb21MaXRlcmFsKCJ5IikuZ2V0KCkpKTsKLSAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6
ZV90PihXVEY6Om5vdEZvdW5kKSwgcmVmZXJlbmNlQi0+ZmluZElnbm9yaW5nQVNDSUlDYXNlKHN0
cmluZ0Zyb21VVEY4KCJhY2PDiSIpLmdldCgpKSk7Ci0gICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0
PHNpemVfdD4oV1RGOjpub3RGb3VuZCksIHJlZmVyZW5jZUItPmZpbmRJZ25vcmluZ0FTQ0lJQ2Fz
ZShzdHJpbmdGcm9tVVRGOCgiYWJjw6kiKS5nZXQoKSkpOwotICAgIEVYUEVDVF9FUShzdGF0aWNf
Y2FzdDxzaXplX3Q+KFdURjo6bm90Rm91bmQpLCByZWZlcmVuY2VCLT5maW5kSWdub3JpbmdBU0NJ
SUNhc2UoU3RyaW5nSW1wbDo6Y3JlYXRlRnJvbUxpdGVyYWwoIlkiKS5nZXQoKSkpOwotICAgIEVY
UEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KFdURjo6bm90Rm91bmQpLCByZWZlcmVuY2VCLT5m
aW5kSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nRnJvbVVURjgoIkFCZMOJIikuZ2V0KCkpKTsKLSAg
ICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PihXVEY6Om5vdEZvdW5kKSwgcmVmZXJlbmNl
Qi0+ZmluZElnbm9yaW5nQVNDSUlDYXNlKHN0cmluZ0Zyb21VVEY4KCJBQkPDqSIpLmdldCgpKSk7
CisgICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oV1RGOjpub3RGb3VuZCksIHJlZmVy
ZW5jZUEtPmZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShTdHJpbmdJbXBsOjpjcmVhdGVGcm9tTGl0ZXJh
bCgieCIpLnB0cigpKSk7CisgICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oV1RGOjpu
b3RGb3VuZCksIHJlZmVyZW5jZUEtPmZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShzdHJpbmdGcm9tVVRG
OCgiYWNjw6kiKS5wdHIoKSkpOworICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KFdU
Rjo6bm90Rm91bmQpLCByZWZlcmVuY2VBLT5maW5kSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nRnJv
bVVURjgoImFiY8OJIikucHRyKCkpKTsKKyAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90
PihXVEY6Om5vdEZvdW5kKSwgcmVmZXJlbmNlQS0+ZmluZElnbm9yaW5nQVNDSUlDYXNlKFN0cmlu
Z0ltcGw6OmNyZWF0ZUZyb21MaXRlcmFsKCJYIikucHRyKCkpKTsKKyAgICBFWFBFQ1RfRVEoc3Rh
dGljX2Nhc3Q8c2l6ZV90PihXVEY6Om5vdEZvdW5kKSwgcmVmZXJlbmNlQS0+ZmluZElnbm9yaW5n
QVNDSUlDYXNlKHN0cmluZ0Zyb21VVEY4KCJBQkTDqSIpLnB0cigpKSk7CisgICAgRVhQRUNUX0VR
KHN0YXRpY19jYXN0PHNpemVfdD4oV1RGOjpub3RGb3VuZCksIHJlZmVyZW5jZUEtPmZpbmRJZ25v
cmluZ0FTQ0lJQ2FzZShzdHJpbmdGcm9tVVRGOCgiQUJDw4kiKS5wdHIoKSkpOworICAgIEVYUEVD
VF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KFdURjo6bm90Rm91bmQpLCByZWZlcmVuY2VCLT5maW5k
SWdub3JpbmdBU0NJSUNhc2UoU3RyaW5nSW1wbDo6Y3JlYXRlRnJvbUxpdGVyYWwoInkiKS5wdHIo
KSkpOworICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KFdURjo6bm90Rm91bmQpLCBy
ZWZlcmVuY2VCLT5maW5kSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nRnJvbVVURjgoImFjY8OJIiku
cHRyKCkpKTsKKyAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PihXVEY6Om5vdEZvdW5k
KSwgcmVmZXJlbmNlQi0+ZmluZElnbm9yaW5nQVNDSUlDYXNlKHN0cmluZ0Zyb21VVEY4KCJhYmPD
qSIpLnB0cigpKSk7CisgICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oV1RGOjpub3RG
b3VuZCksIHJlZmVyZW5jZUItPmZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShTdHJpbmdJbXBsOjpjcmVh
dGVGcm9tTGl0ZXJhbCgiWSIpLnB0cigpKSk7CisgICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNp
emVfdD4oV1RGOjpub3RGb3VuZCksIHJlZmVyZW5jZUItPmZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShz
dHJpbmdGcm9tVVRGOCgiQUJkw4kiKS5wdHIoKSkpOworICAgIEVYUEVDVF9FUShzdGF0aWNfY2Fz
dDxzaXplX3Q+KFdURjo6bm90Rm91bmQpLCByZWZlcmVuY2VCLT5maW5kSWdub3JpbmdBU0NJSUNh
c2Uoc3RyaW5nRnJvbVVURjgoIkFCQ8OpIikucHRyKCkpKTsKIAogICAgIC8vIEZpbmQgdGhlIGlu
Zml4LgotICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDIpLCByZWZlcmVuY2VBLT5m
aW5kSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nRnJvbVVURjgoImPDqWUiKS5nZXQoKSkpOwotICAg
IEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDMpLCByZWZlcmVuY2VBLT5maW5kSWdub3Jp
bmdBU0NJSUNhc2Uoc3RyaW5nRnJvbVVURjgoIsOpZSIpLmdldCgpKSk7Ci0gICAgRVhQRUNUX0VR
KHN0YXRpY19jYXN0PHNpemVfdD4oMiksIHJlZmVyZW5jZUEtPmZpbmRJZ25vcmluZ0FTQ0lJQ2Fz
ZShzdHJpbmdGcm9tVVRGOCgiY8OpIikuZ2V0KCkpKTsKLSAgICBFWFBFQ1RfRVEoc3RhdGljX2Nh
c3Q8c2l6ZV90PigyKSwgcmVmZXJlbmNlQS0+ZmluZElnbm9yaW5nQVNDSUlDYXNlKHN0cmluZ0Zy
b21VVEY4KCJjIikuZ2V0KCkpKTsKLSAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90Pigz
KSwgcmVmZXJlbmNlQS0+ZmluZElnbm9yaW5nQVNDSUlDYXNlKHN0cmluZ0Zyb21VVEY4KCLDqSIp
LmdldCgpKSk7Ci0gICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oMiksIHJlZmVyZW5j
ZUEtPmZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShzdHJpbmdGcm9tVVRGOCgiQ8OpZSIpLmdldCgpKSk7
Ci0gICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oMyksIHJlZmVyZW5jZUEtPmZpbmRJ
Z25vcmluZ0FTQ0lJQ2FzZShzdHJpbmdGcm9tVVRGOCgiw6lFIikuZ2V0KCkpKTsKLSAgICBFWFBF
Q1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigyKSwgcmVmZXJlbmNlQS0+ZmluZElnbm9yaW5nQVND
SUlDYXNlKHN0cmluZ0Zyb21VVEY4KCJDw6kiKS5nZXQoKSkpOwotICAgIEVYUEVDVF9FUShzdGF0
aWNfY2FzdDxzaXplX3Q+KDIpLCByZWZlcmVuY2VBLT5maW5kSWdub3JpbmdBU0NJSUNhc2Uoc3Ry
aW5nRnJvbVVURjgoIkMiKS5nZXQoKSkpOwotCi0gICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNp
emVfdD4oMiksIHJlZmVyZW5jZUItPmZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShzdHJpbmdGcm9tVVRG
OCgiY8OJZSIpLmdldCgpKSk7Ci0gICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oMyks
IHJlZmVyZW5jZUItPmZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShzdHJpbmdGcm9tVVRGOCgiw4llIiku
Z2V0KCkpKTsKLSAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigyKSwgcmVmZXJlbmNl
Qi0+ZmluZElnbm9yaW5nQVNDSUlDYXNlKHN0cmluZ0Zyb21VVEY4KCJjw4kiKS5nZXQoKSkpOwot
ICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDIpLCByZWZlcmVuY2VCLT5maW5kSWdu
b3JpbmdBU0NJSUNhc2Uoc3RyaW5nRnJvbVVURjgoImMiKS5nZXQoKSkpOwotICAgIEVYUEVDVF9F
UShzdGF0aWNfY2FzdDxzaXplX3Q+KDMpLCByZWZlcmVuY2VCLT5maW5kSWdub3JpbmdBU0NJSUNh
c2Uoc3RyaW5nRnJvbVVURjgoIsOJIikuZ2V0KCkpKTsKLSAgICBFWFBFQ1RfRVEoc3RhdGljX2Nh
c3Q8c2l6ZV90PigyKSwgcmVmZXJlbmNlQi0+ZmluZElnbm9yaW5nQVNDSUlDYXNlKHN0cmluZ0Zy
b21VVEY4KCJDw4llIikuZ2V0KCkpKTsKLSAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90
PigzKSwgcmVmZXJlbmNlQi0+ZmluZElnbm9yaW5nQVNDSUlDYXNlKHN0cmluZ0Zyb21VVEY4KCLD
iUUiKS5nZXQoKSkpOwotICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDIpLCByZWZl
cmVuY2VCLT5maW5kSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nRnJvbVVURjgoIkPDiSIpLmdldCgp
KSk7Ci0gICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oMiksIHJlZmVyZW5jZUItPmZp
bmRJZ25vcmluZ0FTQ0lJQ2FzZShzdHJpbmdGcm9tVVRGOCgiQyIpLmdldCgpKSk7CisgICAgRVhQ
RUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oMiksIHJlZmVyZW5jZUEtPmZpbmRJZ25vcmluZ0FT
Q0lJQ2FzZShzdHJpbmdGcm9tVVRGOCgiY8OpZSIpLnB0cigpKSk7CisgICAgRVhQRUNUX0VRKHN0
YXRpY19jYXN0PHNpemVfdD4oMyksIHJlZmVyZW5jZUEtPmZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShz
dHJpbmdGcm9tVVRGOCgiw6llIikucHRyKCkpKTsKKyAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8
c2l6ZV90PigyKSwgcmVmZXJlbmNlQS0+ZmluZElnbm9yaW5nQVNDSUlDYXNlKHN0cmluZ0Zyb21V
VEY4KCJjw6kiKS5wdHIoKSkpOworICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDIp
LCByZWZlcmVuY2VBLT5maW5kSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nRnJvbVVURjgoImMiKS5w
dHIoKSkpOworICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDMpLCByZWZlcmVuY2VB
LT5maW5kSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nRnJvbVVURjgoIsOpIikucHRyKCkpKTsKKyAg
ICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigyKSwgcmVmZXJlbmNlQS0+ZmluZElnbm9y
aW5nQVNDSUlDYXNlKHN0cmluZ0Zyb21VVEY4KCJDw6llIikucHRyKCkpKTsKKyAgICBFWFBFQ1Rf
RVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigzKSwgcmVmZXJlbmNlQS0+ZmluZElnbm9yaW5nQVNDSUlD
YXNlKHN0cmluZ0Zyb21VVEY4KCLDqUUiKS5wdHIoKSkpOworICAgIEVYUEVDVF9FUShzdGF0aWNf
Y2FzdDxzaXplX3Q+KDIpLCByZWZlcmVuY2VBLT5maW5kSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5n
RnJvbVVURjgoIkPDqSIpLnB0cigpKSk7CisgICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVf
dD4oMiksIHJlZmVyZW5jZUEtPmZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShzdHJpbmdGcm9tVVRGOCgi
QyIpLnB0cigpKSk7CisKKyAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigyKSwgcmVm
ZXJlbmNlQi0+ZmluZElnbm9yaW5nQVNDSUlDYXNlKHN0cmluZ0Zyb21VVEY4KCJjw4llIikucHRy
KCkpKTsKKyAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigzKSwgcmVmZXJlbmNlQi0+
ZmluZElnbm9yaW5nQVNDSUlDYXNlKHN0cmluZ0Zyb21VVEY4KCLDiWUiKS5wdHIoKSkpOworICAg
IEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDIpLCByZWZlcmVuY2VCLT5maW5kSWdub3Jp
bmdBU0NJSUNhc2Uoc3RyaW5nRnJvbVVURjgoImPDiSIpLnB0cigpKSk7CisgICAgRVhQRUNUX0VR
KHN0YXRpY19jYXN0PHNpemVfdD4oMiksIHJlZmVyZW5jZUItPmZpbmRJZ25vcmluZ0FTQ0lJQ2Fz
ZShzdHJpbmdGcm9tVVRGOCgiYyIpLnB0cigpKSk7CisgICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0
PHNpemVfdD4oMyksIHJlZmVyZW5jZUItPmZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShzdHJpbmdGcm9t
VVRGOCgiw4kiKS5wdHIoKSkpOworICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDIp
LCByZWZlcmVuY2VCLT5maW5kSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nRnJvbVVURjgoIkPDiWUi
KS5wdHIoKSkpOworICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDMpLCByZWZlcmVu
Y2VCLT5maW5kSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nRnJvbVVURjgoIsOJRSIpLnB0cigpKSk7
CisgICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oMiksIHJlZmVyZW5jZUItPmZpbmRJ
Z25vcmluZ0FTQ0lJQ2FzZShzdHJpbmdGcm9tVVRGOCgiQ8OJIikucHRyKCkpKTsKKyAgICBFWFBF
Q1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigyKSwgcmVmZXJlbmNlQi0+ZmluZElnbm9yaW5nQVND
SUlDYXNlKHN0cmluZ0Zyb21VVEY4KCJDIikucHRyKCkpKTsKIAogICAgIC8vIE5vdCBhbiBpbmZp
eC4KLSAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PihXVEY6Om5vdEZvdW5kKSwgcmVm
ZXJlbmNlQS0+ZmluZElnbm9yaW5nQVNDSUlDYXNlKHN0cmluZ0Zyb21VVEY4KCJjw6lkIikuZ2V0
KCkpKTsKLSAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PihXVEY6Om5vdEZvdW5kKSwg
cmVmZXJlbmNlQS0+ZmluZElnbm9yaW5nQVNDSUlDYXNlKHN0cmluZ0Zyb21VVEY4KCLDiWUiKS5n
ZXQoKSkpOwotICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KFdURjo6bm90Rm91bmQp
LCByZWZlcmVuY2VBLT5maW5kSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nRnJvbVVURjgoImLDqSIp
LmdldCgpKSk7Ci0gICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oV1RGOjpub3RGb3Vu
ZCksIHJlZmVyZW5jZUEtPmZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShzdHJpbmdGcm9tVVRGOCgieCIp
LmdldCgpKSk7Ci0gICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oV1RGOjpub3RGb3Vu
ZCksIHJlZmVyZW5jZUEtPmZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShzdHJpbmdGcm9tVVRGOCgiw4ki
KS5nZXQoKSkpOwotICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KFdURjo6bm90Rm91
bmQpLCByZWZlcmVuY2VBLT5maW5kSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nRnJvbVVURjgoIkPD
iWUiKS5nZXQoKSkpOwotICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KFdURjo6bm90
Rm91bmQpLCByZWZlcmVuY2VBLT5maW5kSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nRnJvbVVURjgo
IsOpZCIpLmdldCgpKSk7Ci0gICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oV1RGOjpu
b3RGb3VuZCksIHJlZmVyZW5jZUEtPmZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShzdHJpbmdGcm9tVVRG
OCgiQ8OJIikuZ2V0KCkpKTsKLSAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PihXVEY6
Om5vdEZvdW5kKSwgcmVmZXJlbmNlQS0+ZmluZElnbm9yaW5nQVNDSUlDYXNlKHN0cmluZ0Zyb21V
VEY4KCJZIikuZ2V0KCkpKTsKLQotICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KFdU
Rjo6bm90Rm91bmQpLCByZWZlcmVuY2VCLT5maW5kSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nRnJv
bVVURjgoImPDqWUiKS5nZXQoKSkpOwotICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+
KFdURjo6bm90Rm91bmQpLCByZWZlcmVuY2VCLT5maW5kSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5n
RnJvbVVURjgoIsOJYyIpLmdldCgpKSk7Ci0gICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVf
dD4oV1RGOjpub3RGb3VuZCksIHJlZmVyZW5jZUItPmZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShzdHJp
bmdGcm9tVVRGOCgiY8OpIikuZ2V0KCkpKTsKLSAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6
ZV90PihXVEY6Om5vdEZvdW5kKSwgcmVmZXJlbmNlQi0+ZmluZElnbm9yaW5nQVNDSUlDYXNlKHN0
cmluZ0Zyb21VVEY4KCJXIikuZ2V0KCkpKTsKLSAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6
ZV90PihXVEY6Om5vdEZvdW5kKSwgcmVmZXJlbmNlQi0+ZmluZElnbm9yaW5nQVNDSUlDYXNlKHN0
cmluZ0Zyb21VVEY4KCLDqSIpLmdldCgpKSk7Ci0gICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNp
emVfdD4oV1RGOjpub3RGb3VuZCksIHJlZmVyZW5jZUItPmZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShz
dHJpbmdGcm9tVVRGOCgiYsOJZSIpLmdldCgpKSk7Ci0gICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0
PHNpemVfdD4oV1RGOjpub3RGb3VuZCksIHJlZmVyZW5jZUItPmZpbmRJZ25vcmluZ0FTQ0lJQ2Fz
ZShzdHJpbmdGcm9tVVRGOCgiw6lFIikuZ2V0KCkpKTsKLSAgICBFWFBFQ1RfRVEoc3RhdGljX2Nh
c3Q8c2l6ZV90PihXVEY6Om5vdEZvdW5kKSwgcmVmZXJlbmNlQi0+ZmluZElnbm9yaW5nQVNDSUlD
YXNlKHN0cmluZ0Zyb21VVEY4KCJCw4kiKS5nZXQoKSkpOwotICAgIEVYUEVDVF9FUShzdGF0aWNf
Y2FzdDxzaXplX3Q+KFdURjo6bm90Rm91bmQpLCByZWZlcmVuY2VCLT5maW5kSWdub3JpbmdBU0NJ
SUNhc2Uoc3RyaW5nRnJvbVVURjgoInoiKS5nZXQoKSkpOworICAgIEVYUEVDVF9FUShzdGF0aWNf
Y2FzdDxzaXplX3Q+KFdURjo6bm90Rm91bmQpLCByZWZlcmVuY2VBLT5maW5kSWdub3JpbmdBU0NJ
SUNhc2Uoc3RyaW5nRnJvbVVURjgoImPDqWQiKS5wdHIoKSkpOworICAgIEVYUEVDVF9FUShzdGF0
aWNfY2FzdDxzaXplX3Q+KFdURjo6bm90Rm91bmQpLCByZWZlcmVuY2VBLT5maW5kSWdub3JpbmdB
U0NJSUNhc2Uoc3RyaW5nRnJvbVVURjgoIsOJZSIpLnB0cigpKSk7CisgICAgRVhQRUNUX0VRKHN0
YXRpY19jYXN0PHNpemVfdD4oV1RGOjpub3RGb3VuZCksIHJlZmVyZW5jZUEtPmZpbmRJZ25vcmlu
Z0FTQ0lJQ2FzZShzdHJpbmdGcm9tVVRGOCgiYsOpIikucHRyKCkpKTsKKyAgICBFWFBFQ1RfRVEo
c3RhdGljX2Nhc3Q8c2l6ZV90PihXVEY6Om5vdEZvdW5kKSwgcmVmZXJlbmNlQS0+ZmluZElnbm9y
aW5nQVNDSUlDYXNlKHN0cmluZ0Zyb21VVEY4KCJ4IikucHRyKCkpKTsKKyAgICBFWFBFQ1RfRVEo
c3RhdGljX2Nhc3Q8c2l6ZV90PihXVEY6Om5vdEZvdW5kKSwgcmVmZXJlbmNlQS0+ZmluZElnbm9y
aW5nQVNDSUlDYXNlKHN0cmluZ0Zyb21VVEY4KCLDiSIpLnB0cigpKSk7CisgICAgRVhQRUNUX0VR
KHN0YXRpY19jYXN0PHNpemVfdD4oV1RGOjpub3RGb3VuZCksIHJlZmVyZW5jZUEtPmZpbmRJZ25v
cmluZ0FTQ0lJQ2FzZShzdHJpbmdGcm9tVVRGOCgiQ8OJZSIpLnB0cigpKSk7CisgICAgRVhQRUNU
X0VRKHN0YXRpY19jYXN0PHNpemVfdD4oV1RGOjpub3RGb3VuZCksIHJlZmVyZW5jZUEtPmZpbmRJ
Z25vcmluZ0FTQ0lJQ2FzZShzdHJpbmdGcm9tVVRGOCgiw6lkIikucHRyKCkpKTsKKyAgICBFWFBF
Q1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PihXVEY6Om5vdEZvdW5kKSwgcmVmZXJlbmNlQS0+Zmlu
ZElnbm9yaW5nQVNDSUlDYXNlKHN0cmluZ0Zyb21VVEY4KCJDw4kiKS5wdHIoKSkpOworICAgIEVY
UEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KFdURjo6bm90Rm91bmQpLCByZWZlcmVuY2VBLT5m
aW5kSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nRnJvbVVURjgoIlkiKS5wdHIoKSkpOworCisgICAg
RVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oV1RGOjpub3RGb3VuZCksIHJlZmVyZW5jZUIt
PmZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShzdHJpbmdGcm9tVVRGOCgiY8OpZSIpLnB0cigpKSk7Cisg
ICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oV1RGOjpub3RGb3VuZCksIHJlZmVyZW5j
ZUItPmZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShzdHJpbmdGcm9tVVRGOCgiw4ljIikucHRyKCkpKTsK
KyAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PihXVEY6Om5vdEZvdW5kKSwgcmVmZXJl
bmNlQi0+ZmluZElnbm9yaW5nQVNDSUlDYXNlKHN0cmluZ0Zyb21VVEY4KCJjw6kiKS5wdHIoKSkp
OworICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KFdURjo6bm90Rm91bmQpLCByZWZl
cmVuY2VCLT5maW5kSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nRnJvbVVURjgoIlciKS5wdHIoKSkp
OworICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KFdURjo6bm90Rm91bmQpLCByZWZl
cmVuY2VCLT5maW5kSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nRnJvbVVURjgoIsOpIikucHRyKCkp
KTsKKyAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PihXVEY6Om5vdEZvdW5kKSwgcmVm
ZXJlbmNlQi0+ZmluZElnbm9yaW5nQVNDSUlDYXNlKHN0cmluZ0Zyb21VVEY4KCJiw4llIikucHRy
KCkpKTsKKyAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PihXVEY6Om5vdEZvdW5kKSwg
cmVmZXJlbmNlQi0+ZmluZElnbm9yaW5nQVNDSUlDYXNlKHN0cmluZ0Zyb21VVEY4KCLDqUUiKS5w
dHIoKSkpOworICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KFdURjo6bm90Rm91bmQp
LCByZWZlcmVuY2VCLT5maW5kSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nRnJvbVVURjgoIkLDiSIp
LnB0cigpKSk7CisgICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oV1RGOjpub3RGb3Vu
ZCksIHJlZmVyZW5jZUItPmZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShzdHJpbmdGcm9tVVRGOCgieiIp
LnB0cigpKSk7CiAKICAgICAvLyBGaW5kIHRoZSBzdWZmaXguCi0gICAgRVhQRUNUX0VRKHN0YXRp
Y19jYXN0PHNpemVfdD4oNiksIHJlZmVyZW5jZUEtPmZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShTdHJp
bmdJbXBsOjpjcmVhdGVGcm9tTGl0ZXJhbCgiZyIpLmdldCgpKSk7Ci0gICAgRVhQRUNUX0VRKHN0
YXRpY19jYXN0PHNpemVfdD4oNCksIHJlZmVyZW5jZUEtPmZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShz
dHJpbmdGcm9tVVRGOCgiZWZnIikuZ2V0KCkpKTsKLSAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8
c2l6ZV90PigzKSwgcmVmZXJlbmNlQS0+ZmluZElnbm9yaW5nQVNDSUlDYXNlKHN0cmluZ0Zyb21V
VEY4KCLDqWVmZyIpLmdldCgpKSk7Ci0gICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4o
NiksIHJlZmVyZW5jZUEtPmZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShTdHJpbmdJbXBsOjpjcmVhdGVG
cm9tTGl0ZXJhbCgiRyIpLmdldCgpKSk7Ci0gICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVf
dD4oNCksIHJlZmVyZW5jZUEtPmZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShzdHJpbmdGcm9tVVRGOCgi
RUZHIikuZ2V0KCkpKTsKLSAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigzKSwgcmVm
ZXJlbmNlQS0+ZmluZElnbm9yaW5nQVNDSUlDYXNlKHN0cmluZ0Zyb21VVEY4KCLDqUVGRyIpLmdl
dCgpKSk7Ci0KLSAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90Pig2KSwgcmVmZXJlbmNl
Qi0+ZmluZElnbm9yaW5nQVNDSUlDYXNlKFN0cmluZ0ltcGw6OmNyZWF0ZUZyb21MaXRlcmFsKCJn
IikuZ2V0KCkpKTsKLSAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90Pig0KSwgcmVmZXJl
bmNlQi0+ZmluZElnbm9yaW5nQVNDSUlDYXNlKHN0cmluZ0Zyb21VVEY4KCJlZmciKS5nZXQoKSkp
OwotICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDMpLCByZWZlcmVuY2VCLT5maW5k
SWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nRnJvbVVURjgoIsOJZWZnIikuZ2V0KCkpKTsKLSAgICBF
WFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90Pig2KSwgcmVmZXJlbmNlQi0+ZmluZElnbm9yaW5n
QVNDSUlDYXNlKFN0cmluZ0ltcGw6OmNyZWF0ZUZyb21MaXRlcmFsKCJHIikuZ2V0KCkpKTsKLSAg
ICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90Pig0KSwgcmVmZXJlbmNlQi0+ZmluZElnbm9y
aW5nQVNDSUlDYXNlKHN0cmluZ0Zyb21VVEY4KCJFRkciKS5nZXQoKSkpOwotICAgIEVYUEVDVF9F
UShzdGF0aWNfY2FzdDxzaXplX3Q+KDMpLCByZWZlcmVuY2VCLT5maW5kSWdub3JpbmdBU0NJSUNh
c2Uoc3RyaW5nRnJvbVVURjgoIsOJRUZHIikuZ2V0KCkpKTsKKyAgICBFWFBFQ1RfRVEoc3RhdGlj
X2Nhc3Q8c2l6ZV90Pig2KSwgcmVmZXJlbmNlQS0+ZmluZElnbm9yaW5nQVNDSUlDYXNlKFN0cmlu
Z0ltcGw6OmNyZWF0ZUZyb21MaXRlcmFsKCJnIikucHRyKCkpKTsKKyAgICBFWFBFQ1RfRVEoc3Rh
dGljX2Nhc3Q8c2l6ZV90Pig0KSwgcmVmZXJlbmNlQS0+ZmluZElnbm9yaW5nQVNDSUlDYXNlKHN0
cmluZ0Zyb21VVEY4KCJlZmciKS5wdHIoKSkpOworICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxz
aXplX3Q+KDMpLCByZWZlcmVuY2VBLT5maW5kSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nRnJvbVVU
RjgoIsOpZWZnIikucHRyKCkpKTsKKyAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90Pig2
KSwgcmVmZXJlbmNlQS0+ZmluZElnbm9yaW5nQVNDSUlDYXNlKFN0cmluZ0ltcGw6OmNyZWF0ZUZy
b21MaXRlcmFsKCJHIikucHRyKCkpKTsKKyAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90
Pig0KSwgcmVmZXJlbmNlQS0+ZmluZElnbm9yaW5nQVNDSUlDYXNlKHN0cmluZ0Zyb21VVEY4KCJF
RkciKS5wdHIoKSkpOworICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDMpLCByZWZl
cmVuY2VBLT5maW5kSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nRnJvbVVURjgoIsOpRUZHIikucHRy
KCkpKTsKKworICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDYpLCByZWZlcmVuY2VC
LT5maW5kSWdub3JpbmdBU0NJSUNhc2UoU3RyaW5nSW1wbDo6Y3JlYXRlRnJvbUxpdGVyYWwoImci
KS5wdHIoKSkpOworICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDQpLCByZWZlcmVu
Y2VCLT5maW5kSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nRnJvbVVURjgoImVmZyIpLnB0cigpKSk7
CisgICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oMyksIHJlZmVyZW5jZUItPmZpbmRJ
Z25vcmluZ0FTQ0lJQ2FzZShzdHJpbmdGcm9tVVRGOCgiw4llZmciKS5wdHIoKSkpOworICAgIEVY
UEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDYpLCByZWZlcmVuY2VCLT5maW5kSWdub3JpbmdB
U0NJSUNhc2UoU3RyaW5nSW1wbDo6Y3JlYXRlRnJvbUxpdGVyYWwoIkciKS5wdHIoKSkpOworICAg
IEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDQpLCByZWZlcmVuY2VCLT5maW5kSWdub3Jp
bmdBU0NJSUNhc2Uoc3RyaW5nRnJvbVVURjgoIkVGRyIpLnB0cigpKSk7CisgICAgRVhQRUNUX0VR
KHN0YXRpY19jYXN0PHNpemVfdD4oMyksIHJlZmVyZW5jZUItPmZpbmRJZ25vcmluZ0FTQ0lJQ2Fz
ZShzdHJpbmdGcm9tVVRGOCgiw4lFRkciKS5wdHIoKSkpOwogCiAgICAgLy8gTm90IGEgc3VmZml4
LgotICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KFdURjo6bm90Rm91bmQpLCByZWZl
cmVuY2VBLT5maW5kSWdub3JpbmdBU0NJSUNhc2UoU3RyaW5nSW1wbDo6Y3JlYXRlRnJvbUxpdGVy
YWwoIlgiKS5nZXQoKSkpOwotICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KFdURjo6
bm90Rm91bmQpLCByZWZlcmVuY2VBLT5maW5kSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nRnJvbVVU
RjgoImVkZyIpLmdldCgpKSk7Ci0gICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oV1RG
Ojpub3RGb3VuZCksIHJlZmVyZW5jZUEtPmZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShzdHJpbmdGcm9t
VVRGOCgiw4llZmciKS5nZXQoKSkpOwotICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+
KFdURjo6bm90Rm91bmQpLCByZWZlcmVuY2VBLT5maW5kSWdub3JpbmdBU0NJSUNhc2UoU3RyaW5n
SW1wbDo6Y3JlYXRlRnJvbUxpdGVyYWwoInciKS5nZXQoKSkpOwotICAgIEVYUEVDVF9FUShzdGF0
aWNfY2FzdDxzaXplX3Q+KFdURjo6bm90Rm91bmQpLCByZWZlcmVuY2VBLT5maW5kSWdub3JpbmdB
U0NJSUNhc2Uoc3RyaW5nRnJvbVVURjgoImRGRyIpLmdldCgpKSk7Ci0gICAgRVhQRUNUX0VRKHN0
YXRpY19jYXN0PHNpemVfdD4oV1RGOjpub3RGb3VuZCksIHJlZmVyZW5jZUEtPmZpbmRJZ25vcmlu
Z0FTQ0lJQ2FzZShzdHJpbmdGcm9tVVRGOCgiw4lFRkciKS5nZXQoKSkpOwotCi0gICAgRVhQRUNU
X0VRKHN0YXRpY19jYXN0PHNpemVfdD4oV1RGOjpub3RGb3VuZCksIHJlZmVyZW5jZUItPmZpbmRJ
Z25vcmluZ0FTQ0lJQ2FzZShTdHJpbmdJbXBsOjpjcmVhdGVGcm9tTGl0ZXJhbCgiWiIpLmdldCgp
KSk7Ci0gICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oV1RGOjpub3RGb3VuZCksIHJl
ZmVyZW5jZUItPmZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShzdHJpbmdGcm9tVVRGOCgiZmZnIikuZ2V0
KCkpKTsKLSAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PihXVEY6Om5vdEZvdW5kKSwg
cmVmZXJlbmNlQi0+ZmluZElnbm9yaW5nQVNDSUlDYXNlKHN0cmluZ0Zyb21VVEY4KCLDqWVmZyIp
LmdldCgpKSk7Ci0gICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oV1RGOjpub3RGb3Vu
ZCksIHJlZmVyZW5jZUItPmZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShTdHJpbmdJbXBsOjpjcmVhdGVG
cm9tTGl0ZXJhbCgiciIpLmdldCgpKSk7Ci0gICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVf
dD4oV1RGOjpub3RGb3VuZCksIHJlZmVyZW5jZUItPmZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShzdHJp
bmdGcm9tVVRGOCgiRWdHIikuZ2V0KCkpKTsKLSAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6
ZV90PihXVEY6Om5vdEZvdW5kKSwgcmVmZXJlbmNlQi0+ZmluZElnbm9yaW5nQVNDSUlDYXNlKHN0
cmluZ0Zyb21VVEY4KCLDqUVGRyIpLmdldCgpKSk7CisgICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0
PHNpemVfdD4oV1RGOjpub3RGb3VuZCksIHJlZmVyZW5jZUEtPmZpbmRJZ25vcmluZ0FTQ0lJQ2Fz
ZShTdHJpbmdJbXBsOjpjcmVhdGVGcm9tTGl0ZXJhbCgiWCIpLnB0cigpKSk7CisgICAgRVhQRUNU
X0VRKHN0YXRpY19jYXN0PHNpemVfdD4oV1RGOjpub3RGb3VuZCksIHJlZmVyZW5jZUEtPmZpbmRJ
Z25vcmluZ0FTQ0lJQ2FzZShzdHJpbmdGcm9tVVRGOCgiZWRnIikucHRyKCkpKTsKKyAgICBFWFBF
Q1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PihXVEY6Om5vdEZvdW5kKSwgcmVmZXJlbmNlQS0+Zmlu
ZElnbm9yaW5nQVNDSUlDYXNlKHN0cmluZ0Zyb21VVEY4KCLDiWVmZyIpLnB0cigpKSk7CisgICAg
RVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oV1RGOjpub3RGb3VuZCksIHJlZmVyZW5jZUEt
PmZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShTdHJpbmdJbXBsOjpjcmVhdGVGcm9tTGl0ZXJhbCgidyIp
LnB0cigpKSk7CisgICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oV1RGOjpub3RGb3Vu
ZCksIHJlZmVyZW5jZUEtPmZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShzdHJpbmdGcm9tVVRGOCgiZEZH
IikucHRyKCkpKTsKKyAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PihXVEY6Om5vdEZv
dW5kKSwgcmVmZXJlbmNlQS0+ZmluZElnbm9yaW5nQVNDSUlDYXNlKHN0cmluZ0Zyb21VVEY4KCLD
iUVGRyIpLnB0cigpKSk7CisKKyAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PihXVEY6
Om5vdEZvdW5kKSwgcmVmZXJlbmNlQi0+ZmluZElnbm9yaW5nQVNDSUlDYXNlKFN0cmluZ0ltcGw6
OmNyZWF0ZUZyb21MaXRlcmFsKCJaIikucHRyKCkpKTsKKyAgICBFWFBFQ1RfRVEoc3RhdGljX2Nh
c3Q8c2l6ZV90PihXVEY6Om5vdEZvdW5kKSwgcmVmZXJlbmNlQi0+ZmluZElnbm9yaW5nQVNDSUlD
YXNlKHN0cmluZ0Zyb21VVEY4KCJmZmciKS5wdHIoKSkpOworICAgIEVYUEVDVF9FUShzdGF0aWNf
Y2FzdDxzaXplX3Q+KFdURjo6bm90Rm91bmQpLCByZWZlcmVuY2VCLT5maW5kSWdub3JpbmdBU0NJ
SUNhc2Uoc3RyaW5nRnJvbVVURjgoIsOpZWZnIikucHRyKCkpKTsKKyAgICBFWFBFQ1RfRVEoc3Rh
dGljX2Nhc3Q8c2l6ZV90PihXVEY6Om5vdEZvdW5kKSwgcmVmZXJlbmNlQi0+ZmluZElnbm9yaW5n
QVNDSUlDYXNlKFN0cmluZ0ltcGw6OmNyZWF0ZUZyb21MaXRlcmFsKCJyIikucHRyKCkpKTsKKyAg
ICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PihXVEY6Om5vdEZvdW5kKSwgcmVmZXJlbmNl
Qi0+ZmluZElnbm9yaW5nQVNDSUlDYXNlKHN0cmluZ0Zyb21VVEY4KCJFZ0ciKS5wdHIoKSkpOwor
ICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KFdURjo6bm90Rm91bmQpLCByZWZlcmVu
Y2VCLT5maW5kSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nRnJvbVVURjgoIsOpRUZHIikucHRyKCkp
KTsKIH0KIAogVEVTVChXVEYsIFN0cmluZ0ltcGxGaW5kSWdub3JpbmdBU0NJSUNhc2VXaXRoVmFs
aWRPZmZzZXQpCiB7Ci0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IHJlZmVyZW5jZSA9IHN0cmluZ0Zy
b21VVEY4KCJBQkPDiUVGR2FCY8OpZUZHIik7Ci0gICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNp
emVfdD4oMCksIHJlZmVyZW5jZS0+ZmluZElnbm9yaW5nQVNDSUlDYXNlKHN0cmluZ0Zyb21VVEY4
KCJBQkMiKS5nZXQoKSwgMCkpOwotICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDcp
LCByZWZlcmVuY2UtPmZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShzdHJpbmdGcm9tVVRGOCgiQUJDIiku
Z2V0KCksIDEpKTsKLSAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigwKSwgcmVmZXJl
bmNlLT5maW5kSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nRnJvbVVURjgoIkFCQ8OJIikuZ2V0KCks
IDApKTsKLSAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PihXVEY6Om5vdEZvdW5kKSwg
cmVmZXJlbmNlLT5maW5kSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nRnJvbVVURjgoIkFCQ8OJIiku
Z2V0KCksIDEpKTsKLSAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90Pig3KSwgcmVmZXJl
bmNlLT5maW5kSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nRnJvbVVURjgoIkFCQ8OpIikuZ2V0KCks
IDApKTsKLSAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90Pig3KSwgcmVmZXJlbmNlLT5m
aW5kSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nRnJvbVVURjgoIkFCQ8OpIikuZ2V0KCksIDEpKTsK
KyAgICBhdXRvIHJlZmVyZW5jZSA9IHN0cmluZ0Zyb21VVEY4KCJBQkPDiUVGR2FCY8OpZUZHIik7
CisgICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oMCksIHJlZmVyZW5jZS0+ZmluZEln
bm9yaW5nQVNDSUlDYXNlKHN0cmluZ0Zyb21VVEY4KCJBQkMiKS5wdHIoKSwgMCkpOworICAgIEVY
UEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDcpLCByZWZlcmVuY2UtPmZpbmRJZ25vcmluZ0FT
Q0lJQ2FzZShzdHJpbmdGcm9tVVRGOCgiQUJDIikucHRyKCksIDEpKTsKKyAgICBFWFBFQ1RfRVEo
c3RhdGljX2Nhc3Q8c2l6ZV90PigwKSwgcmVmZXJlbmNlLT5maW5kSWdub3JpbmdBU0NJSUNhc2Uo
c3RyaW5nRnJvbVVURjgoIkFCQ8OJIikucHRyKCksIDApKTsKKyAgICBFWFBFQ1RfRVEoc3RhdGlj
X2Nhc3Q8c2l6ZV90PihXVEY6Om5vdEZvdW5kKSwgcmVmZXJlbmNlLT5maW5kSWdub3JpbmdBU0NJ
SUNhc2Uoc3RyaW5nRnJvbVVURjgoIkFCQ8OJIikucHRyKCksIDEpKTsKKyAgICBFWFBFQ1RfRVEo
c3RhdGljX2Nhc3Q8c2l6ZV90Pig3KSwgcmVmZXJlbmNlLT5maW5kSWdub3JpbmdBU0NJSUNhc2Uo
c3RyaW5nRnJvbVVURjgoIkFCQ8OpIikucHRyKCksIDApKTsKKyAgICBFWFBFQ1RfRVEoc3RhdGlj
X2Nhc3Q8c2l6ZV90Pig3KSwgcmVmZXJlbmNlLT5maW5kSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5n
RnJvbVVURjgoIkFCQ8OpIikucHRyKCksIDEpKTsKIH0KIAogVEVTVChXVEYsIFN0cmluZ0ltcGxG
aW5kSWdub3JpbmdBU0NJSUNhc2VXaXRoSW52YWxpZE9mZnNldCkKIHsKLSAgICBSZWZQdHI8U3Ry
aW5nSW1wbD4gcmVmZXJlbmNlID0gc3RyaW5nRnJvbVVURjgoIkFCQ8OJRUZHYUJjw6llRkciKTsK
LSAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PihXVEY6Om5vdEZvdW5kKSwgcmVmZXJl
bmNlLT5maW5kSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nRnJvbVVURjgoIkFCQyIpLmdldCgpLCAx
NSkpOwotICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KFdURjo6bm90Rm91bmQpLCBy
ZWZlcmVuY2UtPmZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShzdHJpbmdGcm9tVVRGOCgiQUJDIikuZ2V0
KCksIDE2KSk7Ci0gICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oV1RGOjpub3RGb3Vu
ZCksIHJlZmVyZW5jZS0+ZmluZElnbm9yaW5nQVNDSUlDYXNlKHN0cmluZ0Zyb21VVEY4KCJBQkPD
iSIpLmdldCgpLCAxNykpOwotICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KFdURjo6
bm90Rm91bmQpLCByZWZlcmVuY2UtPmZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShzdHJpbmdGcm9tVVRG
OCgiQUJDw4kiKS5nZXQoKSwgNDIpKTsKLSAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90
PihXVEY6Om5vdEZvdW5kKSwgcmVmZXJlbmNlLT5maW5kSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5n
RnJvbVVURjgoIkFCQ8OJIikuZ2V0KCksIHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+Ojpt
YXgoKSkpOworICAgIGF1dG8gcmVmZXJlbmNlID0gc3RyaW5nRnJvbVVURjgoIkFCQ8OJRUZHYUJj
w6llRkciKTsKKyAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PihXVEY6Om5vdEZvdW5k
KSwgcmVmZXJlbmNlLT5maW5kSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nRnJvbVVURjgoIkFCQyIp
LnB0cigpLCAxNSkpOworICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KFdURjo6bm90
Rm91bmQpLCByZWZlcmVuY2UtPmZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShzdHJpbmdGcm9tVVRGOCgi
QUJDIikucHRyKCksIDE2KSk7CisgICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oV1RG
Ojpub3RGb3VuZCksIHJlZmVyZW5jZS0+ZmluZElnbm9yaW5nQVNDSUlDYXNlKHN0cmluZ0Zyb21V
VEY4KCJBQkPDiSIpLnB0cigpLCAxNykpOworICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXpl
X3Q+KFdURjo6bm90Rm91bmQpLCByZWZlcmVuY2UtPmZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShzdHJp
bmdGcm9tVVRGOCgiQUJDw4kiKS5wdHIoKSwgNDIpKTsKKyAgICBFWFBFQ1RfRVEoc3RhdGljX2Nh
c3Q8c2l6ZV90PihXVEY6Om5vdEZvdW5kKSwgcmVmZXJlbmNlLT5maW5kSWdub3JpbmdBU0NJSUNh
c2Uoc3RyaW5nRnJvbVVURjgoIkFCQ8OJIikucHRyKCksIHN0ZDo6bnVtZXJpY19saW1pdHM8dW5z
aWduZWQ+OjptYXgoKSkpOwogfQogCiBURVNUKFdURiwgU3RyaW5nSW1wbEZpbmRJZ25vcmluZ0FT
Q0lJQ2FzZU9uTnVsbCkKIHsKLSAgICBSZWZQdHI8U3RyaW5nSW1wbD4gcmVmZXJlbmNlID0gc3Ry
aW5nRnJvbVVURjgoIkFCQ8OJRUZHIik7CisgICAgYXV0byByZWZlcmVuY2UgPSBzdHJpbmdGcm9t
VVRGOCgiQUJDw4lFRkciKTsKICAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PihXVEY6
Om5vdEZvdW5kKSwgcmVmZXJlbmNlLT5maW5kSWdub3JpbmdBU0NJSUNhc2UobnVsbHB0cikpOwog
ICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KFdURjo6bm90Rm91bmQpLCByZWZlcmVu
Y2UtPmZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShudWxscHRyLCAwKSk7CiAgICAgRVhQRUNUX0VRKHN0
YXRpY19jYXN0PHNpemVfdD4oV1RGOjpub3RGb3VuZCksIHJlZmVyZW5jZS0+ZmluZElnbm9yaW5n
QVNDSUlDYXNlKG51bGxwdHIsIDMpKTsKQEAgLTMzMSw5NyArMzMxLDk3IEBAIFRFU1QoV1RGLCBT
dHJpbmdJbXBsRmluZElnbm9yaW5nQVNDSUlDYXNlT25OdWxsKQogCiBURVNUKFdURiwgU3RyaW5n
SW1wbEZpbmRJZ25vcmluZ0FTQ0lJQ2FzZU9uRW1wdHkpCiB7Ci0gICAgUmVmUHRyPFN0cmluZ0lt
cGw+IHJlZmVyZW5jZSA9IHN0cmluZ0Zyb21VVEY4KCJBQkPDiUVGRyIpOwotICAgIFJlZlB0cjxT
dHJpbmdJbXBsPiBlbXB0eSA9IFN0cmluZ0ltcGw6OmNyZWF0ZShyZWludGVycHJldF9jYXN0PGNv
bnN0IExDaGFyKj4oIiIpKTsKLSAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigwKSwg
cmVmZXJlbmNlLT5maW5kSWdub3JpbmdBU0NJSUNhc2UoZW1wdHkuZ2V0KCkpKTsKLSAgICBFWFBF
Q1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigwKSwgcmVmZXJlbmNlLT5maW5kSWdub3JpbmdBU0NJ
SUNhc2UoZW1wdHkuZ2V0KCksIDApKTsKLSAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90
PigzKSwgcmVmZXJlbmNlLT5maW5kSWdub3JpbmdBU0NJSUNhc2UoZW1wdHkuZ2V0KCksIDMpKTsK
LSAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90Pig3KSwgcmVmZXJlbmNlLT5maW5kSWdu
b3JpbmdBU0NJSUNhc2UoZW1wdHkuZ2V0KCksIDcpKTsKLSAgICBFWFBFQ1RfRVEoc3RhdGljX2Nh
c3Q8c2l6ZV90Pig3KSwgcmVmZXJlbmNlLT5maW5kSWdub3JpbmdBU0NJSUNhc2UoZW1wdHkuZ2V0
KCksIDgpKTsKLSAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90Pig3KSwgcmVmZXJlbmNl
LT5maW5kSWdub3JpbmdBU0NJSUNhc2UoZW1wdHkuZ2V0KCksIDQyKSk7Ci0gICAgRVhQRUNUX0VR
KHN0YXRpY19jYXN0PHNpemVfdD4oNyksIHJlZmVyZW5jZS0+ZmluZElnbm9yaW5nQVNDSUlDYXNl
KGVtcHR5LmdldCgpLCBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpKTsKKyAg
ICBhdXRvIHJlZmVyZW5jZSA9IHN0cmluZ0Zyb21VVEY4KCJBQkPDiUVGRyIpOworICAgIGF1dG8g
ZW1wdHkgPSBTdHJpbmdJbXBsOjpjcmVhdGUocmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+
KCIiKSk7CisgICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oMCksIHJlZmVyZW5jZS0+
ZmluZElnbm9yaW5nQVNDSUlDYXNlKGVtcHR5LnB0cigpKSk7CisgICAgRVhQRUNUX0VRKHN0YXRp
Y19jYXN0PHNpemVfdD4oMCksIHJlZmVyZW5jZS0+ZmluZElnbm9yaW5nQVNDSUlDYXNlKGVtcHR5
LnB0cigpLCAwKSk7CisgICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oMyksIHJlZmVy
ZW5jZS0+ZmluZElnbm9yaW5nQVNDSUlDYXNlKGVtcHR5LnB0cigpLCAzKSk7CisgICAgRVhQRUNU
X0VRKHN0YXRpY19jYXN0PHNpemVfdD4oNyksIHJlZmVyZW5jZS0+ZmluZElnbm9yaW5nQVNDSUlD
YXNlKGVtcHR5LnB0cigpLCA3KSk7CisgICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4o
NyksIHJlZmVyZW5jZS0+ZmluZElnbm9yaW5nQVNDSUlDYXNlKGVtcHR5LnB0cigpLCA4KSk7Cisg
ICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oNyksIHJlZmVyZW5jZS0+ZmluZElnbm9y
aW5nQVNDSUlDYXNlKGVtcHR5LnB0cigpLCA0MikpOworICAgIEVYUEVDVF9FUShzdGF0aWNfY2Fz
dDxzaXplX3Q+KDcpLCByZWZlcmVuY2UtPmZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShlbXB0eS5wdHIo
KSwgc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKSk7CiB9CiAKIFRFU1QoV1RG
LCBTdHJpbmdJbXBsRmluZElnbm9yaW5nQVNDSUlDYXNlV2l0aFBhdHRlcm5Mb25nZXJUaGFuUmVm
ZXJlbmNlKQogewotICAgIFJlZlB0cjxTdHJpbmdJbXBsPiByZWZlcmVuY2UgPSBzdHJpbmdGcm9t
VVRGOCgiQUJDw4lFRkciKTsKLSAgICBSZWZQdHI8U3RyaW5nSW1wbD4gcGF0dGVybiA9IHN0cmlu
Z0Zyb21VVEY4KCJYQUJDw4lFRkciKTsKLSAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90
PihXVEY6Om5vdEZvdW5kKSwgcmVmZXJlbmNlLT5maW5kSWdub3JpbmdBU0NJSUNhc2UocGF0dGVy
bi5nZXQoKSkpOwotICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDEpLCBwYXR0ZXJu
LT5maW5kSWdub3JpbmdBU0NJSUNhc2UocmVmZXJlbmNlLmdldCgpKSk7CisgICAgYXV0byByZWZl
cmVuY2UgPSBzdHJpbmdGcm9tVVRGOCgiQUJDw4lFRkciKTsKKyAgICBhdXRvIHBhdHRlcm4gPSBz
dHJpbmdGcm9tVVRGOCgiWEFCQ8OJRUZHIik7CisgICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNp
emVfdD4oV1RGOjpub3RGb3VuZCksIHJlZmVyZW5jZS0+ZmluZElnbm9yaW5nQVNDSUlDYXNlKHBh
dHRlcm4ucHRyKCkpKTsKKyAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigxKSwgcGF0
dGVybi0+ZmluZElnbm9yaW5nQVNDSUlDYXNlKHJlZmVyZW5jZS5wdHIoKSkpOwogfQogCiBURVNU
KFdURiwgU3RyaW5nSW1wbFN0YXJ0c1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZUJhc2ljKQogewotICAg
IFJlZlB0cjxTdHJpbmdJbXBsPiByZWZlcmVuY2UgPSBzdHJpbmdGcm9tVVRGOCgiYUJjw6lYIik7
Ci0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IHJlZmVyZW5jZUVxdWl2YWxlbnQgPSBzdHJpbmdGcm9t
VVRGOCgiQWJDw6l4Iik7CisgICAgYXV0byByZWZlcmVuY2UgPSBzdHJpbmdGcm9tVVRGOCgiYUJj
w6lYIik7CisgICAgYXV0byByZWZlcmVuY2VFcXVpdmFsZW50ID0gc3RyaW5nRnJvbVVURjgoIkFi
Q8OpeCIpOwogCiAgICAgLy8gSWRlbnRpdHkuCi0gICAgQVNTRVJUX1RSVUUocmVmZXJlbmNlLT5z
dGFydHNXaXRoSWdub3JpbmdBU0NJSUNhc2UocmVmZXJlbmNlLmdldCgpKSk7Ci0gICAgQVNTRVJU
X1RSVUUocmVmZXJlbmNlLT5zdGFydHNXaXRoSWdub3JpbmdBU0NJSUNhc2UoKnJlZmVyZW5jZS5n
ZXQoKSkpOwotICAgIEFTU0VSVF9UUlVFKHJlZmVyZW5jZS0+c3RhcnRzV2l0aElnbm9yaW5nQVND
SUlDYXNlKHJlZmVyZW5jZUVxdWl2YWxlbnQuZ2V0KCkpKTsKLSAgICBBU1NFUlRfVFJVRShyZWZl
cmVuY2UtPnN0YXJ0c1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZSgqcmVmZXJlbmNlRXF1aXZhbGVudC5n
ZXQoKSkpOwotICAgIEFTU0VSVF9UUlVFKHJlZmVyZW5jZUVxdWl2YWxlbnQtPnN0YXJ0c1dpdGhJ
Z25vcmluZ0FTQ0lJQ2FzZShyZWZlcmVuY2UuZ2V0KCkpKTsKLSAgICBBU1NFUlRfVFJVRShyZWZl
cmVuY2VFcXVpdmFsZW50LT5zdGFydHNXaXRoSWdub3JpbmdBU0NJSUNhc2UoKnJlZmVyZW5jZS5n
ZXQoKSkpOwotICAgIEFTU0VSVF9UUlVFKHJlZmVyZW5jZUVxdWl2YWxlbnQtPnN0YXJ0c1dpdGhJ
Z25vcmluZ0FTQ0lJQ2FzZShyZWZlcmVuY2VFcXVpdmFsZW50LmdldCgpKSk7Ci0gICAgQVNTRVJU
X1RSVUUocmVmZXJlbmNlRXF1aXZhbGVudC0+c3RhcnRzV2l0aElnbm9yaW5nQVNDSUlDYXNlKCpy
ZWZlcmVuY2VFcXVpdmFsZW50LmdldCgpKSk7CisgICAgQVNTRVJUX1RSVUUocmVmZXJlbmNlLT5z
dGFydHNXaXRoSWdub3JpbmdBU0NJSUNhc2UocmVmZXJlbmNlLnB0cigpKSk7CisgICAgQVNTRVJU
X1RSVUUocmVmZXJlbmNlLT5zdGFydHNXaXRoSWdub3JpbmdBU0NJSUNhc2UoKnJlZmVyZW5jZS5w
dHIoKSkpOworICAgIEFTU0VSVF9UUlVFKHJlZmVyZW5jZS0+c3RhcnRzV2l0aElnbm9yaW5nQVND
SUlDYXNlKHJlZmVyZW5jZUVxdWl2YWxlbnQucHRyKCkpKTsKKyAgICBBU1NFUlRfVFJVRShyZWZl
cmVuY2UtPnN0YXJ0c1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZSgqcmVmZXJlbmNlRXF1aXZhbGVudC5w
dHIoKSkpOworICAgIEFTU0VSVF9UUlVFKHJlZmVyZW5jZUVxdWl2YWxlbnQtPnN0YXJ0c1dpdGhJ
Z25vcmluZ0FTQ0lJQ2FzZShyZWZlcmVuY2UucHRyKCkpKTsKKyAgICBBU1NFUlRfVFJVRShyZWZl
cmVuY2VFcXVpdmFsZW50LT5zdGFydHNXaXRoSWdub3JpbmdBU0NJSUNhc2UoKnJlZmVyZW5jZS5w
dHIoKSkpOworICAgIEFTU0VSVF9UUlVFKHJlZmVyZW5jZUVxdWl2YWxlbnQtPnN0YXJ0c1dpdGhJ
Z25vcmluZ0FTQ0lJQ2FzZShyZWZlcmVuY2VFcXVpdmFsZW50LnB0cigpKSk7CisgICAgQVNTRVJU
X1RSVUUocmVmZXJlbmNlRXF1aXZhbGVudC0+c3RhcnRzV2l0aElnbm9yaW5nQVNDSUlDYXNlKCpy
ZWZlcmVuY2VFcXVpdmFsZW50LnB0cigpKSk7CiAKICAgICAvLyBQcm9wZXIgcHJlZml4ZXMuCi0g
ICAgUmVmUHRyPFN0cmluZ0ltcGw+IGFMb3dlciA9IFN0cmluZ0ltcGw6OmNyZWF0ZUZyb21MaXRl
cmFsKCJhIik7Ci0gICAgQVNTRVJUX1RSVUUocmVmZXJlbmNlLT5zdGFydHNXaXRoSWdub3JpbmdB
U0NJSUNhc2UoYUxvd2VyLmdldCgpKSk7Ci0gICAgQVNTRVJUX1RSVUUocmVmZXJlbmNlLT5zdGFy
dHNXaXRoSWdub3JpbmdBU0NJSUNhc2UoKmFMb3dlci5nZXQoKSkpOwotICAgIFJlZlB0cjxTdHJp
bmdJbXBsPiBhVXBwZXIgPSBTdHJpbmdJbXBsOjpjcmVhdGVGcm9tTGl0ZXJhbCgiQSIpOwotICAg
IEFTU0VSVF9UUlVFKHJlZmVyZW5jZS0+c3RhcnRzV2l0aElnbm9yaW5nQVNDSUlDYXNlKGFVcHBl
ci5nZXQoKSkpOwotICAgIEFTU0VSVF9UUlVFKHJlZmVyZW5jZS0+c3RhcnRzV2l0aElnbm9yaW5n
QVNDSUlDYXNlKCphVXBwZXIuZ2V0KCkpKTsKLQotICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBhYmNM
b3dlciA9IFN0cmluZ0ltcGw6OmNyZWF0ZUZyb21MaXRlcmFsKCJhYmMiKTsKLSAgICBBU1NFUlRf
VFJVRShyZWZlcmVuY2UtPnN0YXJ0c1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZShhYmNMb3dlci5nZXQo
KSkpOwotICAgIEFTU0VSVF9UUlVFKHJlZmVyZW5jZS0+c3RhcnRzV2l0aElnbm9yaW5nQVNDSUlD
YXNlKCphYmNMb3dlci5nZXQoKSkpOwotICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBhYmNVcHBlciA9
IFN0cmluZ0ltcGw6OmNyZWF0ZUZyb21MaXRlcmFsKCJBQkMiKTsKLSAgICBBU1NFUlRfVFJVRShy
ZWZlcmVuY2UtPnN0YXJ0c1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZShhYmNVcHBlci5nZXQoKSkpOwot
ICAgIEFTU0VSVF9UUlVFKHJlZmVyZW5jZS0+c3RhcnRzV2l0aElnbm9yaW5nQVNDSUlDYXNlKCph
YmNVcHBlci5nZXQoKSkpOwotCi0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IGFiY0FjY2VudExvd2Vy
ID0gc3RyaW5nRnJvbVVURjgoImFiY8OpIik7Ci0gICAgQVNTRVJUX1RSVUUocmVmZXJlbmNlLT5z
dGFydHNXaXRoSWdub3JpbmdBU0NJSUNhc2UoYWJjQWNjZW50TG93ZXIuZ2V0KCkpKTsKLSAgICBB
U1NFUlRfVFJVRShyZWZlcmVuY2UtPnN0YXJ0c1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZSgqYWJjQWNj
ZW50TG93ZXIuZ2V0KCkpKTsKLSAgICBSZWZQdHI8U3RyaW5nSW1wbD4gYWJjQWNjZW50VXBwZXIg
PSBzdHJpbmdGcm9tVVRGOCgiQUJDw6kiKTsKLSAgICBBU1NFUlRfVFJVRShyZWZlcmVuY2UtPnN0
YXJ0c1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZShhYmNBY2NlbnRVcHBlci5nZXQoKSkpOwotICAgIEFT
U0VSVF9UUlVFKHJlZmVyZW5jZS0+c3RhcnRzV2l0aElnbm9yaW5nQVNDSUlDYXNlKCphYmNBY2Nl
bnRVcHBlci5nZXQoKSkpOworICAgIGF1dG8gYUxvd2VyID0gU3RyaW5nSW1wbDo6Y3JlYXRlRnJv
bUxpdGVyYWwoImEiKTsKKyAgICBBU1NFUlRfVFJVRShyZWZlcmVuY2UtPnN0YXJ0c1dpdGhJZ25v
cmluZ0FTQ0lJQ2FzZShhTG93ZXIucHRyKCkpKTsKKyAgICBBU1NFUlRfVFJVRShyZWZlcmVuY2Ut
PnN0YXJ0c1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZSgqYUxvd2VyLnB0cigpKSk7CisgICAgYXV0byBh
VXBwZXIgPSBTdHJpbmdJbXBsOjpjcmVhdGVGcm9tTGl0ZXJhbCgiQSIpOworICAgIEFTU0VSVF9U
UlVFKHJlZmVyZW5jZS0+c3RhcnRzV2l0aElnbm9yaW5nQVNDSUlDYXNlKGFVcHBlci5wdHIoKSkp
OworICAgIEFTU0VSVF9UUlVFKHJlZmVyZW5jZS0+c3RhcnRzV2l0aElnbm9yaW5nQVNDSUlDYXNl
KCphVXBwZXIucHRyKCkpKTsKKworICAgIGF1dG8gYWJjTG93ZXIgPSBTdHJpbmdJbXBsOjpjcmVh
dGVGcm9tTGl0ZXJhbCgiYWJjIik7CisgICAgQVNTRVJUX1RSVUUocmVmZXJlbmNlLT5zdGFydHNX
aXRoSWdub3JpbmdBU0NJSUNhc2UoYWJjTG93ZXIucHRyKCkpKTsKKyAgICBBU1NFUlRfVFJVRShy
ZWZlcmVuY2UtPnN0YXJ0c1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZSgqYWJjTG93ZXIucHRyKCkpKTsK
KyAgICBhdXRvIGFiY1VwcGVyID0gU3RyaW5nSW1wbDo6Y3JlYXRlRnJvbUxpdGVyYWwoIkFCQyIp
OworICAgIEFTU0VSVF9UUlVFKHJlZmVyZW5jZS0+c3RhcnRzV2l0aElnbm9yaW5nQVNDSUlDYXNl
KGFiY1VwcGVyLnB0cigpKSk7CisgICAgQVNTRVJUX1RSVUUocmVmZXJlbmNlLT5zdGFydHNXaXRo
SWdub3JpbmdBU0NJSUNhc2UoKmFiY1VwcGVyLnB0cigpKSk7CisKKyAgICBhdXRvIGFiY0FjY2Vu
dExvd2VyID0gc3RyaW5nRnJvbVVURjgoImFiY8OpIik7CisgICAgQVNTRVJUX1RSVUUocmVmZXJl
bmNlLT5zdGFydHNXaXRoSWdub3JpbmdBU0NJSUNhc2UoYWJjQWNjZW50TG93ZXIucHRyKCkpKTsK
KyAgICBBU1NFUlRfVFJVRShyZWZlcmVuY2UtPnN0YXJ0c1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZSgq
YWJjQWNjZW50TG93ZXIucHRyKCkpKTsKKyAgICBhdXRvIGFiY0FjY2VudFVwcGVyID0gc3RyaW5n
RnJvbVVURjgoIkFCQ8OpIik7CisgICAgQVNTRVJUX1RSVUUocmVmZXJlbmNlLT5zdGFydHNXaXRo
SWdub3JpbmdBU0NJSUNhc2UoYWJjQWNjZW50VXBwZXIucHRyKCkpKTsKKyAgICBBU1NFUlRfVFJV
RShyZWZlcmVuY2UtPnN0YXJ0c1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZSgqYWJjQWNjZW50VXBwZXIu
cHRyKCkpKTsKIAogICAgIC8vIE5lZ2F0aXZlIGNhc2VzLgotICAgIFJlZlB0cjxTdHJpbmdJbXBs
PiBkaWZmZXJlbnRGaXJzdENoYXIgPSBzdHJpbmdGcm9tVVRGOCgiYkJjw6lYIik7Ci0gICAgUmVm
UHRyPFN0cmluZ0ltcGw+IGRpZmZlcmVudEZpcnN0Q2hhclByb3BlclByZWZpeCA9IHN0cmluZ0Zy
b21VVEY4KCJDQmPDqSIpOwotICAgIEFTU0VSVF9GQUxTRShyZWZlcmVuY2UtPnN0YXJ0c1dpdGhJ
Z25vcmluZ0FTQ0lJQ2FzZShkaWZmZXJlbnRGaXJzdENoYXIuZ2V0KCkpKTsKLSAgICBBU1NFUlRf
RkFMU0UocmVmZXJlbmNlLT5zdGFydHNXaXRoSWdub3JpbmdBU0NJSUNhc2UoKmRpZmZlcmVudEZp
cnN0Q2hhci5nZXQoKSkpOwotICAgIEFTU0VSVF9GQUxTRShyZWZlcmVuY2UtPnN0YXJ0c1dpdGhJ
Z25vcmluZ0FTQ0lJQ2FzZShkaWZmZXJlbnRGaXJzdENoYXJQcm9wZXJQcmVmaXguZ2V0KCkpKTsK
LSAgICBBU1NFUlRfRkFMU0UocmVmZXJlbmNlLT5zdGFydHNXaXRoSWdub3JpbmdBU0NJSUNhc2Uo
KmRpZmZlcmVudEZpcnN0Q2hhclByb3BlclByZWZpeC5nZXQoKSkpOwotCi0gICAgUmVmUHRyPFN0
cmluZ0ltcGw+IHVwcGVyY2FzZUFjY2VudCA9IHN0cmluZ0Zyb21VVEY4KCJhQmPDiVgiKTsKLSAg
ICBSZWZQdHI8U3RyaW5nSW1wbD4gdXBwZXJjYXNlQWNjZW50UHJvcGVyUHJlZml4ID0gc3RyaW5n
RnJvbVVURjgoImFCY8OJWCIpOwotICAgIEFTU0VSVF9GQUxTRShyZWZlcmVuY2UtPnN0YXJ0c1dp
dGhJZ25vcmluZ0FTQ0lJQ2FzZSh1cHBlcmNhc2VBY2NlbnQuZ2V0KCkpKTsKLSAgICBBU1NFUlRf
RkFMU0UocmVmZXJlbmNlLT5zdGFydHNXaXRoSWdub3JpbmdBU0NJSUNhc2UoKnVwcGVyY2FzZUFj
Y2VudC5nZXQoKSkpOwotICAgIEFTU0VSVF9GQUxTRShyZWZlcmVuY2UtPnN0YXJ0c1dpdGhJZ25v
cmluZ0FTQ0lJQ2FzZSh1cHBlcmNhc2VBY2NlbnRQcm9wZXJQcmVmaXguZ2V0KCkpKTsKLSAgICBB
U1NFUlRfRkFMU0UocmVmZXJlbmNlLT5zdGFydHNXaXRoSWdub3JpbmdBU0NJSUNhc2UoKnVwcGVy
Y2FzZUFjY2VudFByb3BlclByZWZpeC5nZXQoKSkpOworICAgIGF1dG8gZGlmZmVyZW50Rmlyc3RD
aGFyID0gc3RyaW5nRnJvbVVURjgoImJCY8OpWCIpOworICAgIGF1dG8gZGlmZmVyZW50Rmlyc3RD
aGFyUHJvcGVyUHJlZml4ID0gc3RyaW5nRnJvbVVURjgoIkNCY8OpIik7CisgICAgQVNTRVJUX0ZB
TFNFKHJlZmVyZW5jZS0+c3RhcnRzV2l0aElnbm9yaW5nQVNDSUlDYXNlKGRpZmZlcmVudEZpcnN0
Q2hhci5wdHIoKSkpOworICAgIEFTU0VSVF9GQUxTRShyZWZlcmVuY2UtPnN0YXJ0c1dpdGhJZ25v
cmluZ0FTQ0lJQ2FzZSgqZGlmZmVyZW50Rmlyc3RDaGFyLnB0cigpKSk7CisgICAgQVNTRVJUX0ZB
TFNFKHJlZmVyZW5jZS0+c3RhcnRzV2l0aElnbm9yaW5nQVNDSUlDYXNlKGRpZmZlcmVudEZpcnN0
Q2hhclByb3BlclByZWZpeC5wdHIoKSkpOworICAgIEFTU0VSVF9GQUxTRShyZWZlcmVuY2UtPnN0
YXJ0c1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZSgqZGlmZmVyZW50Rmlyc3RDaGFyUHJvcGVyUHJlZml4
LnB0cigpKSk7CisKKyAgICBhdXRvIHVwcGVyY2FzZUFjY2VudCA9IHN0cmluZ0Zyb21VVEY4KCJh
QmPDiVgiKTsKKyAgICBhdXRvIHVwcGVyY2FzZUFjY2VudFByb3BlclByZWZpeCA9IHN0cmluZ0Zy
b21VVEY4KCJhQmPDiVgiKTsKKyAgICBBU1NFUlRfRkFMU0UocmVmZXJlbmNlLT5zdGFydHNXaXRo
SWdub3JpbmdBU0NJSUNhc2UodXBwZXJjYXNlQWNjZW50LnB0cigpKSk7CisgICAgQVNTRVJUX0ZB
TFNFKHJlZmVyZW5jZS0+c3RhcnRzV2l0aElnbm9yaW5nQVNDSUlDYXNlKCp1cHBlcmNhc2VBY2Nl
bnQucHRyKCkpKTsKKyAgICBBU1NFUlRfRkFMU0UocmVmZXJlbmNlLT5zdGFydHNXaXRoSWdub3Jp
bmdBU0NJSUNhc2UodXBwZXJjYXNlQWNjZW50UHJvcGVyUHJlZml4LnB0cigpKSk7CisgICAgQVNT
RVJUX0ZBTFNFKHJlZmVyZW5jZS0+c3RhcnRzV2l0aElnbm9yaW5nQVNDSUlDYXNlKCp1cHBlcmNh
c2VBY2NlbnRQcm9wZXJQcmVmaXgucHRyKCkpKTsKIH0KIAogVEVTVChXVEYsIFN0cmluZ0ltcGxT
dGFydHNXaXRoSWdub3JpbmdBU0NJSUNhc2VXaXRoTnVsbCkKIHsKLSAgICBSZWZQdHI8U3RyaW5n
SW1wbD4gcmVmZXJlbmNlID0gU3RyaW5nSW1wbDo6Y3JlYXRlRnJvbUxpdGVyYWwoImFCY0RlRkci
KTsKKyAgICBhdXRvIHJlZmVyZW5jZSA9IFN0cmluZ0ltcGw6OmNyZWF0ZUZyb21MaXRlcmFsKCJh
QmNEZUZHIik7CiAgICAgQVNTRVJUX0ZBTFNFKHJlZmVyZW5jZS0+c3RhcnRzV2l0aElnbm9yaW5n
QVNDSUlDYXNlKG51bGxwdHIpKTsKIAotICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBlbXB0eSA9IFN0
cmluZ0ltcGw6OmNyZWF0ZShyZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIiIpKTsKKyAg
ICBhdXRvIGVtcHR5ID0gU3RyaW5nSW1wbDo6Y3JlYXRlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
TENoYXIqPigiIikpOwogICAgIEFTU0VSVF9GQUxTRShlbXB0eS0+c3RhcnRzV2l0aElnbm9yaW5n
QVNDSUlDYXNlKG51bGxwdHIpKTsKIH0KIAogVEVTVChXVEYsIFN0cmluZ0ltcGxTdGFydHNXaXRo
SWdub3JpbmdBU0NJSUNhc2VXaXRoRW1wdHkpCiB7Ci0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IHJl
ZmVyZW5jZSA9IFN0cmluZ0ltcGw6OmNyZWF0ZUZyb21MaXRlcmFsKCJhQmNEZUZHIik7Ci0gICAg
UmVmUHRyPFN0cmluZ0ltcGw+IGVtcHR5ID0gU3RyaW5nSW1wbDo6Y3JlYXRlKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgTENoYXIqPigiIikpOwotICAgIEFTU0VSVF9UUlVFKHJlZmVyZW5jZS0+c3Rh
cnRzV2l0aElnbm9yaW5nQVNDSUlDYXNlKGVtcHR5LmdldCgpKSk7Ci0gICAgQVNTRVJUX1RSVUUo
cmVmZXJlbmNlLT5zdGFydHNXaXRoSWdub3JpbmdBU0NJSUNhc2UoKmVtcHR5LmdldCgpKSk7Ci0g
ICAgQVNTRVJUX1RSVUUoZW1wdHktPnN0YXJ0c1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZShlbXB0eS5n
ZXQoKSkpOwotICAgIEFTU0VSVF9UUlVFKGVtcHR5LT5zdGFydHNXaXRoSWdub3JpbmdBU0NJSUNh
c2UoKmVtcHR5LmdldCgpKSk7Ci0gICAgQVNTRVJUX0ZBTFNFKGVtcHR5LT5zdGFydHNXaXRoSWdu
b3JpbmdBU0NJSUNhc2UocmVmZXJlbmNlLmdldCgpKSk7Ci0gICAgQVNTRVJUX0ZBTFNFKGVtcHR5
LT5zdGFydHNXaXRoSWdub3JpbmdBU0NJSUNhc2UoKnJlZmVyZW5jZS5nZXQoKSkpOworICAgIGF1
dG8gcmVmZXJlbmNlID0gU3RyaW5nSW1wbDo6Y3JlYXRlRnJvbUxpdGVyYWwoImFCY0RlRkciKTsK
KyAgICBhdXRvIGVtcHR5ID0gU3RyaW5nSW1wbDo6Y3JlYXRlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgTENoYXIqPigiIikpOworICAgIEFTU0VSVF9UUlVFKHJlZmVyZW5jZS0+c3RhcnRzV2l0aEln
bm9yaW5nQVNDSUlDYXNlKGVtcHR5LnB0cigpKSk7CisgICAgQVNTRVJUX1RSVUUocmVmZXJlbmNl
LT5zdGFydHNXaXRoSWdub3JpbmdBU0NJSUNhc2UoKmVtcHR5LnB0cigpKSk7CisgICAgQVNTRVJU
X1RSVUUoZW1wdHktPnN0YXJ0c1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZShlbXB0eS5wdHIoKSkpOwor
ICAgIEFTU0VSVF9UUlVFKGVtcHR5LT5zdGFydHNXaXRoSWdub3JpbmdBU0NJSUNhc2UoKmVtcHR5
LnB0cigpKSk7CisgICAgQVNTRVJUX0ZBTFNFKGVtcHR5LT5zdGFydHNXaXRoSWdub3JpbmdBU0NJ
SUNhc2UocmVmZXJlbmNlLnB0cigpKSk7CisgICAgQVNTRVJUX0ZBTFNFKGVtcHR5LT5zdGFydHNX
aXRoSWdub3JpbmdBU0NJSUNhc2UoKnJlZmVyZW5jZS5wdHIoKSkpOwogfQogCiBURVNUKFdURiwg
U3RhcnRzV2l0aExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSkKQEAgLTQ0MSwxMDIgKzQ0MSwxMDIg
QEAgVEVTVChXVEYsIFN0YXJ0c1dpdGhMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UpCiAKIFRFU1Qo
V1RGLCBTdHJpbmdJbXBsRW5kc1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZUJhc2ljKQogewotICAgIFJl
ZlB0cjxTdHJpbmdJbXBsPiByZWZlcmVuY2UgPSBzdHJpbmdGcm9tVVRGOCgiWMOJQ2JBIik7Ci0g
ICAgUmVmUHRyPFN0cmluZ0ltcGw+IHJlZmVyZW5jZUVxdWl2YWxlbnQgPSBzdHJpbmdGcm9tVVRG
OCgieMOJY0JhIik7CisgICAgYXV0byByZWZlcmVuY2UgPSBzdHJpbmdGcm9tVVRGOCgiWMOJQ2JB
Iik7CisgICAgYXV0byByZWZlcmVuY2VFcXVpdmFsZW50ID0gc3RyaW5nRnJvbVVURjgoInjDiWNC
YSIpOwogCiAgICAgLy8gSWRlbnRpdHkuCi0gICAgQVNTRVJUX1RSVUUocmVmZXJlbmNlLT5lbmRz
V2l0aElnbm9yaW5nQVNDSUlDYXNlKHJlZmVyZW5jZS5nZXQoKSkpOwotICAgIEFTU0VSVF9UUlVF
KHJlZmVyZW5jZS0+ZW5kc1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZSgqcmVmZXJlbmNlLmdldCgpKSk7
Ci0gICAgQVNTRVJUX1RSVUUocmVmZXJlbmNlLT5lbmRzV2l0aElnbm9yaW5nQVNDSUlDYXNlKHJl
ZmVyZW5jZUVxdWl2YWxlbnQuZ2V0KCkpKTsKLSAgICBBU1NFUlRfVFJVRShyZWZlcmVuY2UtPmVu
ZHNXaXRoSWdub3JpbmdBU0NJSUNhc2UoKnJlZmVyZW5jZUVxdWl2YWxlbnQuZ2V0KCkpKTsKLSAg
ICBBU1NFUlRfVFJVRShyZWZlcmVuY2VFcXVpdmFsZW50LT5lbmRzV2l0aElnbm9yaW5nQVNDSUlD
YXNlKHJlZmVyZW5jZS5nZXQoKSkpOwotICAgIEFTU0VSVF9UUlVFKHJlZmVyZW5jZUVxdWl2YWxl
bnQtPmVuZHNXaXRoSWdub3JpbmdBU0NJSUNhc2UoKnJlZmVyZW5jZS5nZXQoKSkpOwotICAgIEFT
U0VSVF9UUlVFKHJlZmVyZW5jZUVxdWl2YWxlbnQtPmVuZHNXaXRoSWdub3JpbmdBU0NJSUNhc2Uo
cmVmZXJlbmNlRXF1aXZhbGVudC5nZXQoKSkpOwotICAgIEFTU0VSVF9UUlVFKHJlZmVyZW5jZUVx
dWl2YWxlbnQtPmVuZHNXaXRoSWdub3JpbmdBU0NJSUNhc2UoKnJlZmVyZW5jZUVxdWl2YWxlbnQu
Z2V0KCkpKTsKKyAgICBBU1NFUlRfVFJVRShyZWZlcmVuY2UtPmVuZHNXaXRoSWdub3JpbmdBU0NJ
SUNhc2UocmVmZXJlbmNlLnB0cigpKSk7CisgICAgQVNTRVJUX1RSVUUocmVmZXJlbmNlLT5lbmRz
V2l0aElnbm9yaW5nQVNDSUlDYXNlKCpyZWZlcmVuY2UucHRyKCkpKTsKKyAgICBBU1NFUlRfVFJV
RShyZWZlcmVuY2UtPmVuZHNXaXRoSWdub3JpbmdBU0NJSUNhc2UocmVmZXJlbmNlRXF1aXZhbGVu
dC5wdHIoKSkpOworICAgIEFTU0VSVF9UUlVFKHJlZmVyZW5jZS0+ZW5kc1dpdGhJZ25vcmluZ0FT
Q0lJQ2FzZSgqcmVmZXJlbmNlRXF1aXZhbGVudC5wdHIoKSkpOworICAgIEFTU0VSVF9UUlVFKHJl
ZmVyZW5jZUVxdWl2YWxlbnQtPmVuZHNXaXRoSWdub3JpbmdBU0NJSUNhc2UocmVmZXJlbmNlLnB0
cigpKSk7CisgICAgQVNTRVJUX1RSVUUocmVmZXJlbmNlRXF1aXZhbGVudC0+ZW5kc1dpdGhJZ25v
cmluZ0FTQ0lJQ2FzZSgqcmVmZXJlbmNlLnB0cigpKSk7CisgICAgQVNTRVJUX1RSVUUocmVmZXJl
bmNlRXF1aXZhbGVudC0+ZW5kc1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZShyZWZlcmVuY2VFcXVpdmFs
ZW50LnB0cigpKSk7CisgICAgQVNTRVJUX1RSVUUocmVmZXJlbmNlRXF1aXZhbGVudC0+ZW5kc1dp
dGhJZ25vcmluZ0FTQ0lJQ2FzZSgqcmVmZXJlbmNlRXF1aXZhbGVudC5wdHIoKSkpOwogCiAgICAg
Ly8gUHJvcGVyIHN1ZmZpeGVzLgotICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBhTG93ZXIgPSBTdHJp
bmdJbXBsOjpjcmVhdGVGcm9tTGl0ZXJhbCgiYSIpOwotICAgIEFTU0VSVF9UUlVFKHJlZmVyZW5j
ZS0+ZW5kc1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZShhTG93ZXIuZ2V0KCkpKTsKLSAgICBBU1NFUlRf
VFJVRShyZWZlcmVuY2UtPmVuZHNXaXRoSWdub3JpbmdBU0NJSUNhc2UoKmFMb3dlci5nZXQoKSkp
OwotICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBhVXBwZXIgPSBTdHJpbmdJbXBsOjpjcmVhdGVGcm9t
TGl0ZXJhbCgiYSIpOwotICAgIEFTU0VSVF9UUlVFKHJlZmVyZW5jZS0+ZW5kc1dpdGhJZ25vcmlu
Z0FTQ0lJQ2FzZShhVXBwZXIuZ2V0KCkpKTsKLSAgICBBU1NFUlRfVFJVRShyZWZlcmVuY2UtPmVu
ZHNXaXRoSWdub3JpbmdBU0NJSUNhc2UoKmFVcHBlci5nZXQoKSkpOwotCi0gICAgUmVmUHRyPFN0
cmluZ0ltcGw+IGFiY0xvd2VyID0gU3RyaW5nSW1wbDo6Y3JlYXRlRnJvbUxpdGVyYWwoImNiYSIp
OwotICAgIEFTU0VSVF9UUlVFKHJlZmVyZW5jZS0+ZW5kc1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZShh
YmNMb3dlci5nZXQoKSkpOwotICAgIEFTU0VSVF9UUlVFKHJlZmVyZW5jZS0+ZW5kc1dpdGhJZ25v
cmluZ0FTQ0lJQ2FzZSgqYWJjTG93ZXIuZ2V0KCkpKTsKLSAgICBSZWZQdHI8U3RyaW5nSW1wbD4g
YWJjVXBwZXIgPSBTdHJpbmdJbXBsOjpjcmVhdGVGcm9tTGl0ZXJhbCgiQ0JBIik7Ci0gICAgQVNT
RVJUX1RSVUUocmVmZXJlbmNlLT5lbmRzV2l0aElnbm9yaW5nQVNDSUlDYXNlKGFiY1VwcGVyLmdl
dCgpKSk7Ci0gICAgQVNTRVJUX1RSVUUocmVmZXJlbmNlLT5lbmRzV2l0aElnbm9yaW5nQVNDSUlD
YXNlKCphYmNVcHBlci5nZXQoKSkpOwotCi0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IGFiY0FjY2Vu
dExvd2VyID0gc3RyaW5nRnJvbVVURjgoIsOJY2JhIik7Ci0gICAgQVNTRVJUX1RSVUUocmVmZXJl
bmNlLT5lbmRzV2l0aElnbm9yaW5nQVNDSUlDYXNlKGFiY0FjY2VudExvd2VyLmdldCgpKSk7Ci0g
ICAgQVNTRVJUX1RSVUUocmVmZXJlbmNlLT5lbmRzV2l0aElnbm9yaW5nQVNDSUlDYXNlKCphYmNB
Y2NlbnRMb3dlci5nZXQoKSkpOwotICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBhYmNBY2NlbnRVcHBl
ciA9IHN0cmluZ0Zyb21VVEY4KCLDiUNCQSIpOwotICAgIEFTU0VSVF9UUlVFKHJlZmVyZW5jZS0+
ZW5kc1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZShhYmNBY2NlbnRVcHBlci5nZXQoKSkpOwotICAgIEFT
U0VSVF9UUlVFKHJlZmVyZW5jZS0+ZW5kc1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZSgqYWJjQWNjZW50
VXBwZXIuZ2V0KCkpKTsKKyAgICBhdXRvIGFMb3dlciA9IFN0cmluZ0ltcGw6OmNyZWF0ZUZyb21M
aXRlcmFsKCJhIik7CisgICAgQVNTRVJUX1RSVUUocmVmZXJlbmNlLT5lbmRzV2l0aElnbm9yaW5n
QVNDSUlDYXNlKGFMb3dlci5wdHIoKSkpOworICAgIEFTU0VSVF9UUlVFKHJlZmVyZW5jZS0+ZW5k
c1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZSgqYUxvd2VyLnB0cigpKSk7CisgICAgYXV0byBhVXBwZXIg
PSBTdHJpbmdJbXBsOjpjcmVhdGVGcm9tTGl0ZXJhbCgiYSIpOworICAgIEFTU0VSVF9UUlVFKHJl
ZmVyZW5jZS0+ZW5kc1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZShhVXBwZXIucHRyKCkpKTsKKyAgICBB
U1NFUlRfVFJVRShyZWZlcmVuY2UtPmVuZHNXaXRoSWdub3JpbmdBU0NJSUNhc2UoKmFVcHBlci5w
dHIoKSkpOworCisgICAgYXV0byBhYmNMb3dlciA9IFN0cmluZ0ltcGw6OmNyZWF0ZUZyb21MaXRl
cmFsKCJjYmEiKTsKKyAgICBBU1NFUlRfVFJVRShyZWZlcmVuY2UtPmVuZHNXaXRoSWdub3JpbmdB
U0NJSUNhc2UoYWJjTG93ZXIucHRyKCkpKTsKKyAgICBBU1NFUlRfVFJVRShyZWZlcmVuY2UtPmVu
ZHNXaXRoSWdub3JpbmdBU0NJSUNhc2UoKmFiY0xvd2VyLnB0cigpKSk7CisgICAgYXV0byBhYmNV
cHBlciA9IFN0cmluZ0ltcGw6OmNyZWF0ZUZyb21MaXRlcmFsKCJDQkEiKTsKKyAgICBBU1NFUlRf
VFJVRShyZWZlcmVuY2UtPmVuZHNXaXRoSWdub3JpbmdBU0NJSUNhc2UoYWJjVXBwZXIucHRyKCkp
KTsKKyAgICBBU1NFUlRfVFJVRShyZWZlcmVuY2UtPmVuZHNXaXRoSWdub3JpbmdBU0NJSUNhc2Uo
KmFiY1VwcGVyLnB0cigpKSk7CisKKyAgICBhdXRvIGFiY0FjY2VudExvd2VyID0gc3RyaW5nRnJv
bVVURjgoIsOJY2JhIik7CisgICAgQVNTRVJUX1RSVUUocmVmZXJlbmNlLT5lbmRzV2l0aElnbm9y
aW5nQVNDSUlDYXNlKGFiY0FjY2VudExvd2VyLnB0cigpKSk7CisgICAgQVNTRVJUX1RSVUUocmVm
ZXJlbmNlLT5lbmRzV2l0aElnbm9yaW5nQVNDSUlDYXNlKCphYmNBY2NlbnRMb3dlci5wdHIoKSkp
OworICAgIGF1dG8gYWJjQWNjZW50VXBwZXIgPSBzdHJpbmdGcm9tVVRGOCgiw4lDQkEiKTsKKyAg
ICBBU1NFUlRfVFJVRShyZWZlcmVuY2UtPmVuZHNXaXRoSWdub3JpbmdBU0NJSUNhc2UoYWJjQWNj
ZW50VXBwZXIucHRyKCkpKTsKKyAgICBBU1NFUlRfVFJVRShyZWZlcmVuY2UtPmVuZHNXaXRoSWdu
b3JpbmdBU0NJSUNhc2UoKmFiY0FjY2VudFVwcGVyLnB0cigpKSk7CiAKICAgICAvLyBOZWdhdGl2
ZSBjYXNlcy4KLSAgICBSZWZQdHI8U3RyaW5nSW1wbD4gZGlmZmVyZW50TGFzdENoYXIgPSBzdHJp
bmdGcm9tVVRGOCgiWMOJQ2JCIik7Ci0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IGRpZmZlcmVudExh
c3RDaGFyUHJvcGVyU3VmZml4ID0gc3RyaW5nRnJvbVVURjgoIsOJQ2JiIik7Ci0gICAgQVNTRVJU
X0ZBTFNFKHJlZmVyZW5jZS0+ZW5kc1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZShkaWZmZXJlbnRMYXN0
Q2hhci5nZXQoKSkpOwotICAgIEFTU0VSVF9GQUxTRShyZWZlcmVuY2UtPmVuZHNXaXRoSWdub3Jp
bmdBU0NJSUNhc2UoKmRpZmZlcmVudExhc3RDaGFyLmdldCgpKSk7Ci0gICAgQVNTRVJUX0ZBTFNF
KHJlZmVyZW5jZS0+ZW5kc1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZShkaWZmZXJlbnRMYXN0Q2hhclBy
b3BlclN1ZmZpeC5nZXQoKSkpOwotICAgIEFTU0VSVF9GQUxTRShyZWZlcmVuY2UtPmVuZHNXaXRo
SWdub3JpbmdBU0NJSUNhc2UoKmRpZmZlcmVudExhc3RDaGFyUHJvcGVyU3VmZml4LmdldCgpKSk7
Ci0KLSAgICBSZWZQdHI8U3RyaW5nSW1wbD4gbG93ZXJjYXNlQWNjZW50ID0gc3RyaW5nRnJvbVVU
RjgoImFCY8OpWCIpOwotICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBsb3dlcmFzZUFjY2VudFByb3Bl
clN1ZmZpeCA9IHN0cmluZ0Zyb21VVEY4KCJhQmPDqVgiKTsKLSAgICBBU1NFUlRfRkFMU0UocmVm
ZXJlbmNlLT5lbmRzV2l0aElnbm9yaW5nQVNDSUlDYXNlKGxvd2VyY2FzZUFjY2VudC5nZXQoKSkp
OwotICAgIEFTU0VSVF9GQUxTRShyZWZlcmVuY2UtPmVuZHNXaXRoSWdub3JpbmdBU0NJSUNhc2Uo
Kmxvd2VyY2FzZUFjY2VudC5nZXQoKSkpOwotICAgIEFTU0VSVF9GQUxTRShyZWZlcmVuY2UtPmVu
ZHNXaXRoSWdub3JpbmdBU0NJSUNhc2UobG93ZXJhc2VBY2NlbnRQcm9wZXJTdWZmaXguZ2V0KCkp
KTsKLSAgICBBU1NFUlRfRkFMU0UocmVmZXJlbmNlLT5lbmRzV2l0aElnbm9yaW5nQVNDSUlDYXNl
KCpsb3dlcmFzZUFjY2VudFByb3BlclN1ZmZpeC5nZXQoKSkpOworICAgIGF1dG8gZGlmZmVyZW50
TGFzdENoYXIgPSBzdHJpbmdGcm9tVVRGOCgiWMOJQ2JCIik7CisgICAgYXV0byBkaWZmZXJlbnRM
YXN0Q2hhclByb3BlclN1ZmZpeCA9IHN0cmluZ0Zyb21VVEY4KCLDiUNiYiIpOworICAgIEFTU0VS
VF9GQUxTRShyZWZlcmVuY2UtPmVuZHNXaXRoSWdub3JpbmdBU0NJSUNhc2UoZGlmZmVyZW50TGFz
dENoYXIucHRyKCkpKTsKKyAgICBBU1NFUlRfRkFMU0UocmVmZXJlbmNlLT5lbmRzV2l0aElnbm9y
aW5nQVNDSUlDYXNlKCpkaWZmZXJlbnRMYXN0Q2hhci5wdHIoKSkpOworICAgIEFTU0VSVF9GQUxT
RShyZWZlcmVuY2UtPmVuZHNXaXRoSWdub3JpbmdBU0NJSUNhc2UoZGlmZmVyZW50TGFzdENoYXJQ
cm9wZXJTdWZmaXgucHRyKCkpKTsKKyAgICBBU1NFUlRfRkFMU0UocmVmZXJlbmNlLT5lbmRzV2l0
aElnbm9yaW5nQVNDSUlDYXNlKCpkaWZmZXJlbnRMYXN0Q2hhclByb3BlclN1ZmZpeC5wdHIoKSkp
OworCisgICAgYXV0byBsb3dlcmNhc2VBY2NlbnQgPSBzdHJpbmdGcm9tVVRGOCgiYUJjw6lYIik7
CisgICAgYXV0byBsb3dlcmFzZUFjY2VudFByb3BlclN1ZmZpeCA9IHN0cmluZ0Zyb21VVEY4KCJh
QmPDqVgiKTsKKyAgICBBU1NFUlRfRkFMU0UocmVmZXJlbmNlLT5lbmRzV2l0aElnbm9yaW5nQVND
SUlDYXNlKGxvd2VyY2FzZUFjY2VudC5wdHIoKSkpOworICAgIEFTU0VSVF9GQUxTRShyZWZlcmVu
Y2UtPmVuZHNXaXRoSWdub3JpbmdBU0NJSUNhc2UoKmxvd2VyY2FzZUFjY2VudC5wdHIoKSkpOwor
ICAgIEFTU0VSVF9GQUxTRShyZWZlcmVuY2UtPmVuZHNXaXRoSWdub3JpbmdBU0NJSUNhc2UobG93
ZXJhc2VBY2NlbnRQcm9wZXJTdWZmaXgucHRyKCkpKTsKKyAgICBBU1NFUlRfRkFMU0UocmVmZXJl
bmNlLT5lbmRzV2l0aElnbm9yaW5nQVNDSUlDYXNlKCpsb3dlcmFzZUFjY2VudFByb3BlclN1ZmZp
eC5wdHIoKSkpOwogfQogCiBURVNUKFdURiwgU3RyaW5nSW1wbEVuZHNXaXRoSWdub3JpbmdBU0NJ
SUNhc2VXaXRoTnVsbCkKIHsKLSAgICBSZWZQdHI8U3RyaW5nSW1wbD4gcmVmZXJlbmNlID0gU3Ry
aW5nSW1wbDo6Y3JlYXRlRnJvbUxpdGVyYWwoImFCY0RlRkciKTsKKyAgICBhdXRvIHJlZmVyZW5j
ZSA9IFN0cmluZ0ltcGw6OmNyZWF0ZUZyb21MaXRlcmFsKCJhQmNEZUZHIik7CiAgICAgQVNTRVJU
X0ZBTFNFKHJlZmVyZW5jZS0+ZW5kc1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZShudWxscHRyKSk7CiAK
LSAgICBSZWZQdHI8U3RyaW5nSW1wbD4gZW1wdHkgPSBTdHJpbmdJbXBsOjpjcmVhdGUocmVpbnRl
cnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCIiKSk7CisgICAgYXV0byBlbXB0eSA9IFN0cmluZ0lt
cGw6OmNyZWF0ZShyZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIiIpKTsKICAgICBBU1NF
UlRfRkFMU0UoZW1wdHktPmVuZHNXaXRoSWdub3JpbmdBU0NJSUNhc2UobnVsbHB0cikpOwogfQog
CiBURVNUKFdURiwgU3RyaW5nSW1wbEVuZHNXaXRoSWdub3JpbmdBU0NJSUNhc2VXaXRoRW1wdHkp
CiB7Ci0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IHJlZmVyZW5jZSA9IFN0cmluZ0ltcGw6OmNyZWF0
ZUZyb21MaXRlcmFsKCJhQmNEZUZHIik7Ci0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IGVtcHR5ID0g
U3RyaW5nSW1wbDo6Y3JlYXRlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiIikpOwot
ICAgIEFTU0VSVF9UUlVFKHJlZmVyZW5jZS0+ZW5kc1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZShlbXB0
eS5nZXQoKSkpOwotICAgIEFTU0VSVF9UUlVFKHJlZmVyZW5jZS0+ZW5kc1dpdGhJZ25vcmluZ0FT
Q0lJQ2FzZSgqZW1wdHkuZ2V0KCkpKTsKLSAgICBBU1NFUlRfVFJVRShlbXB0eS0+ZW5kc1dpdGhJ
Z25vcmluZ0FTQ0lJQ2FzZShlbXB0eS5nZXQoKSkpOwotICAgIEFTU0VSVF9UUlVFKGVtcHR5LT5l
bmRzV2l0aElnbm9yaW5nQVNDSUlDYXNlKCplbXB0eS5nZXQoKSkpOwotICAgIEFTU0VSVF9GQUxT
RShlbXB0eS0+ZW5kc1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZShyZWZlcmVuY2UuZ2V0KCkpKTsKLSAg
ICBBU1NFUlRfRkFMU0UoZW1wdHktPmVuZHNXaXRoSWdub3JpbmdBU0NJSUNhc2UoKnJlZmVyZW5j
ZS5nZXQoKSkpOworICAgIGF1dG8gcmVmZXJlbmNlID0gU3RyaW5nSW1wbDo6Y3JlYXRlRnJvbUxp
dGVyYWwoImFCY0RlRkciKTsKKyAgICBhdXRvIGVtcHR5ID0gU3RyaW5nSW1wbDo6Y3JlYXRlKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiIikpOworICAgIEFTU0VSVF9UUlVFKHJlZmVy
ZW5jZS0+ZW5kc1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZShlbXB0eS5wdHIoKSkpOworICAgIEFTU0VS
VF9UUlVFKHJlZmVyZW5jZS0+ZW5kc1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZSgqZW1wdHkucHRyKCkp
KTsKKyAgICBBU1NFUlRfVFJVRShlbXB0eS0+ZW5kc1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZShlbXB0
eS5wdHIoKSkpOworICAgIEFTU0VSVF9UUlVFKGVtcHR5LT5lbmRzV2l0aElnbm9yaW5nQVNDSUlD
YXNlKCplbXB0eS5wdHIoKSkpOworICAgIEFTU0VSVF9GQUxTRShlbXB0eS0+ZW5kc1dpdGhJZ25v
cmluZ0FTQ0lJQ2FzZShyZWZlcmVuY2UucHRyKCkpKTsKKyAgICBBU1NFUlRfRkFMU0UoZW1wdHkt
PmVuZHNXaXRoSWdub3JpbmdBU0NJSUNhc2UoKnJlZmVyZW5jZS5wdHIoKSkpOwogfQogCiBURVNU
KFdURiwgU3RyaW5nSW1wbENyZWF0ZU51bGxTeW1ib2wpCiB7Ci0gICAgUmVmUHRyPFN0cmluZ0lt
cGw+IHJlZmVyZW5jZSA9IFN0cmluZ0ltcGw6OmNyZWF0ZU51bGxTeW1ib2woKTsKKyAgICBhdXRv
IHJlZmVyZW5jZSA9IFN0cmluZ0ltcGw6OmNyZWF0ZU51bGxTeW1ib2woKTsKICAgICBBU1NFUlRf
VFJVRShyZWZlcmVuY2UtPmlzU3ltYm9sKCkpOwogICAgIEFTU0VSVF9UUlVFKHJlZmVyZW5jZS0+
aXNOdWxsU3ltYm9sKCkpOwogICAgIEFTU0VSVF9GQUxTRShyZWZlcmVuY2UtPmlzQXRvbWljKCkp
OwogICAgIEFTU0VSVF9FUSgwdSwgcmVmZXJlbmNlLT5sZW5ndGgoKSk7Ci0gICAgQVNTRVJUX1RS
VUUoZXF1YWwocmVmZXJlbmNlLmdldCgpLCAiIikpOworICAgIEFTU0VSVF9UUlVFKGVxdWFsKHJl
ZmVyZW5jZS5wdHIoKSwgIiIpKTsKIH0KIAogVEVTVChXVEYsIFN0cmluZ0ltcGxDcmVhdGVTeW1i
b2wpCiB7Ci0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IG9yaWdpbmFsID0gc3RyaW5nRnJvbVVURjgo
Im9yaWdpbmFsIik7Ci0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IHJlZmVyZW5jZSA9IFN0cmluZ0lt
cGw6OmNyZWF0ZVN5bWJvbChvcmlnaW5hbCk7CisgICAgYXV0byBvcmlnaW5hbCA9IHN0cmluZ0Zy
b21VVEY4KCJvcmlnaW5hbCIpOworICAgIGF1dG8gcmVmZXJlbmNlID0gU3RyaW5nSW1wbDo6Y3Jl
YXRlU3ltYm9sKG9yaWdpbmFsKTsKICAgICBBU1NFUlRfVFJVRShyZWZlcmVuY2UtPmlzU3ltYm9s
KCkpOwogICAgIEFTU0VSVF9GQUxTRShyZWZlcmVuY2UtPmlzTnVsbFN5bWJvbCgpKTsKICAgICBB
U1NFUlRfRkFMU0UocmVmZXJlbmNlLT5pc0F0b21pYygpKTsKICAgICBBU1NFUlRfRkFMU0Uob3Jp
Z2luYWwtPmlzU3ltYm9sKCkpOwogICAgIEFTU0VSVF9GQUxTRShvcmlnaW5hbC0+aXNBdG9taWMo
KSk7CiAgICAgQVNTRVJUX0VRKG9yaWdpbmFsLT5sZW5ndGgoKSwgcmVmZXJlbmNlLT5sZW5ndGgo
KSk7Ci0gICAgQVNTRVJUX1RSVUUoZXF1YWwocmVmZXJlbmNlLmdldCgpLCAib3JpZ2luYWwiKSk7
CisgICAgQVNTRVJUX1RSVUUoZXF1YWwocmVmZXJlbmNlLnB0cigpLCAib3JpZ2luYWwiKSk7CiAK
LSAgICBSZWZQdHI8U3RyaW5nSW1wbD4gZW1wdHkgPSBzdHJpbmdGcm9tVVRGOCgiIik7Ci0gICAg
UmVmUHRyPFN0cmluZ0ltcGw+IGVtcHR5UmVmZXJlbmNlID0gU3RyaW5nSW1wbDo6Y3JlYXRlU3lt
Ym9sKGVtcHR5KTsKKyAgICBhdXRvIGVtcHR5ID0gc3RyaW5nRnJvbVVURjgoIiIpOworICAgIGF1
dG8gZW1wdHlSZWZlcmVuY2UgPSBTdHJpbmdJbXBsOjpjcmVhdGVTeW1ib2woZW1wdHkpOwogICAg
IEFTU0VSVF9UUlVFKGVtcHR5UmVmZXJlbmNlLT5pc1N5bWJvbCgpKTsKICAgICBBU1NFUlRfRkFM
U0UoZW1wdHlSZWZlcmVuY2UtPmlzTnVsbFN5bWJvbCgpKTsKICAgICBBU1NFUlRfRkFMU0UoZW1w
dHlSZWZlcmVuY2UtPmlzQXRvbWljKCkpOwpAQCAtNTQ0LDE3ICs1NDQsMTcgQEAgVEVTVChXVEYs
IFN0cmluZ0ltcGxDcmVhdGVTeW1ib2wpCiAgICAgQVNTRVJUX0ZBTFNFKGVtcHR5LT5pc051bGxT
eW1ib2woKSk7CiAgICAgQVNTRVJUX1RSVUUoZW1wdHktPmlzQXRvbWljKCkpOwogICAgIEFTU0VS
VF9FUShlbXB0eS0+bGVuZ3RoKCksIGVtcHR5UmVmZXJlbmNlLT5sZW5ndGgoKSk7Ci0gICAgQVNT
RVJUX1RSVUUoZXF1YWwoZW1wdHlSZWZlcmVuY2UuZ2V0KCksICIiKSk7CisgICAgQVNTRVJUX1RS
VUUoZXF1YWwoZW1wdHlSZWZlcmVuY2UucHRyKCksICIiKSk7CiB9CiAKIFRFU1QoV1RGLCBTdHJp
bmdJbXBsU3ltYm9sVG9BdG9taWNTdHJpbmcpCiB7Ci0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IG9y
aWdpbmFsID0gc3RyaW5nRnJvbVVURjgoIm9yaWdpbmFsIik7Ci0gICAgUmVmUHRyPFN0cmluZ0lt
cGw+IHJlZmVyZW5jZSA9IFN0cmluZ0ltcGw6OmNyZWF0ZVN5bWJvbChvcmlnaW5hbCk7CisgICAg
YXV0byBvcmlnaW5hbCA9IHN0cmluZ0Zyb21VVEY4KCJvcmlnaW5hbCIpOworICAgIGF1dG8gcmVm
ZXJlbmNlID0gU3RyaW5nSW1wbDo6Y3JlYXRlU3ltYm9sKG9yaWdpbmFsKTsKICAgICBBU1NFUlRf
VFJVRShyZWZlcmVuY2UtPmlzU3ltYm9sKCkpOwogICAgIEFTU0VSVF9GQUxTRShyZWZlcmVuY2Ut
PmlzQXRvbWljKCkpOwogCi0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IGF0b21pYyA9IEF0b21pY1N0
cmluZ0ltcGw6OmFkZChyZWZlcmVuY2UuZ2V0KCkpOworICAgIGF1dG8gYXRvbWljID0gQXRvbWlj
U3RyaW5nSW1wbDo6YWRkKHJlZmVyZW5jZS5wdHIoKSk7CiAgICAgQVNTRVJUX1RSVUUoYXRvbWlj
LT5pc0F0b21pYygpKTsKICAgICBBU1NFUlRfRkFMU0UoYXRvbWljLT5pc1N5bWJvbCgpKTsKICAg
ICBBU1NFUlRfVFJVRShyZWZlcmVuY2UtPmlzU3ltYm9sKCkpOwpAQCAtNTYzLDExICs1NjMsMTEg
QEAgVEVTVChXVEYsIFN0cmluZ0ltcGxTeW1ib2xUb0F0b21pY1N0cmluZykKIAogVEVTVChXVEYs
IFN0cmluZ0ltcGxOdWxsU3ltYm9sVG9BdG9taWNTdHJpbmcpCiB7Ci0gICAgUmVmUHRyPFN0cmlu
Z0ltcGw+IHJlZmVyZW5jZSA9IFN0cmluZ0ltcGw6OmNyZWF0ZU51bGxTeW1ib2woKTsKKyAgICBh
dXRvIHJlZmVyZW5jZSA9IFN0cmluZ0ltcGw6OmNyZWF0ZU51bGxTeW1ib2woKTsKICAgICBBU1NF
UlRfVFJVRShyZWZlcmVuY2UtPmlzU3ltYm9sKCkpOwogICAgIEFTU0VSVF9GQUxTRShyZWZlcmVu
Y2UtPmlzQXRvbWljKCkpOwogCi0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IGF0b21pYyA9IEF0b21p
Y1N0cmluZ0ltcGw6OmFkZChyZWZlcmVuY2UuZ2V0KCkpOworICAgIGF1dG8gYXRvbWljID0gQXRv
bWljU3RyaW5nSW1wbDo6YWRkKHJlZmVyZW5jZS5wdHIoKSk7CiAgICAgQVNTRVJUX1RSVUUoYXRv
bWljLT5pc0F0b21pYygpKTsKICAgICBBU1NFUlRfRkFMU0UoYXRvbWljLT5pc1N5bWJvbCgpKTsK
ICAgICBBU1NFUlRfVFJVRShyZWZlcmVuY2UtPmlzU3ltYm9sKCkpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>280751</attachid>
            <date>2016-06-07 17:57:36 -0700</date>
            <delta_ts>2016-06-07 18:29:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-157596-20160607175903.patch</filename>
            <type>text/plain</type>
            <size>116249</size>
            <attacher name="Keith Rollin">krollin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAxNzc2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAw
YzlkZWQ2NGZiOGYyMWY4NmQ5NzViNTgyM2UyMzY2NGRmMDE1NDI1Li5jNzY4ZmUwYzNjNjM2ZDUy
Mzk4MTZlMGMyYTY1YmIxYTE5YzQ4ODhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzMyBAQAorMjAxNi0wNS0yNyAgS2VpdGggUm9sbGluICA8a3JvbGxpbkBhcHBsZS5jb20+
CisKKyAgICAgICAgUmVtb3ZlIGFsbCB1c2VzIG9mIFBhc3NSZWZQdHIgaW4gV1RGCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTc1OTYKKyAgICAgICAg
PHJkYXI6Ly9wcm9ibGVtLzI2MjM0MzkxPgorCisgICAgICAgIFJldmlld2VkIGJ5IENocmlzIER1
bWV6LgorCisgICAgICAgIFVwZGF0ZSBjYWxscyB0byBpbnRlcmZhY2VzIHRoYXQgbm8gbG9uZ2Vy
IHRha2Ugb3IgcmV0dXJuIFBhc3NSZWZQdHJzLgorCisgICAgICAgICogcnVudGltZS9KU1N0cmlu
Zy5jcHA6CisgICAgICAgIChKU0M6OkpTUm9wZVN0cmluZzo6cmVzb2x2ZVJvcGUpOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNTdHJpbmcuaDoKKyAgICAgICAgKEpTQzo6SlNTdHJpbmc6OkpTU3RyaW5n
KToKKyAgICAgICAgKEpTQzo6anNTdWJzdHJpbmcpOgorICAgICAgICAqIHJ1bnRpbWUvUHJpdmF0
ZU5hbWUuaDoKKyAgICAgICAgKEpTQzo6UHJpdmF0ZU5hbWU6OlByaXZhdGVOYW1lKToKKyAgICAg
ICAgKiBydW50aW1lL1NtYWxsU3RyaW5ncy5jcHA6CisgICAgICAgIChKU0M6OlNtYWxsU3RyaW5n
c1N0b3JhZ2U6OlNtYWxsU3RyaW5nc1N0b3JhZ2UpOgorICAgICAgICAqIHJ1bnRpbWUvU3RyaW5n
Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpzdHJpbmdGcm9tQ2hhckNvZGVTbG93Q2Fz
ZSk6CisgICAgICAgICogcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlND
Ojpqc1NwbGljZVN1YnN0cmluZ3MpOgorICAgICAgICAoSlNDOjpqc1NwbGljZVN1YnN0cmluZ3NX
aXRoU2VwYXJhdG9ycyk6CisgICAgICAgIChKU0M6OnJlcGxhY2VVc2luZ1N0cmluZ1NlYXJjaCk6
CisgICAgICAgIChKU0M6OnJlcGVhdENoYXJhY3Rlcik6CisgICAgICAgIChKU0M6OnN0cmluZ1By
b3RvRnVuY0ZvbnRzaXplKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jTGluayk6Cisg
ICAgICAgIChKU0M6Om5vcm1hbGl6ZSk6CisKIDIwMTYtMDYtMDcgIFNhYW0gYmFyYXRpICA8c2Jh
cmF0aUBhcHBsZS5jb20+CiAKICAgICAgICAgSW52YWxpZGF0aW9uUG9pbnRJbmplY3Rpb25QaGFz
ZSBjcmVhdGVzIGJvZ3VzIEludmFsaWRhdGlvblBvaW50cyB0aGF0IG1heSBldmVuIGJlIGluc2Vy
dGVkIHdoZW4gaXQncyBub3QgT0sgdG8gZXhpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9DaGFu
Z2VMb2cgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwppbmRleCA5YWUyNTU1NTY1ZThhZjA1ZGVmNDQy
OTEwYmRjM2NjOTM0Yjk1ODBmLi4wNzcyN2UwOWU0MWYxYTUyMjdjZWE3ZmE5MzJkM2IzZTc3M2Q5
N2ExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV1RGL0No
YW5nZUxvZwpAQCAtMSwzICsxLDYzIEBACisyMDE2LTA1LTI3ICBLZWl0aCBSb2xsaW4gIDxrcm9s
bGluQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgYWxsIHVzZXMgb2YgUGFzc1JlZlB0ciBp
biBXVEYKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1
NzU5NgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMjYyMzQzOTE+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgQ2hyaXMgRHVtZXouCisKKyAgICAgICAgUmVtb3ZlL3VwZGF0ZSBtb3N0IGludGVyZmFj
ZXMgdGhhdCB0YWtlIG9yIHJldHVybiBQYXNzUmVmUHRycy4KKyAgICAgICAgUmVtYWluaW5nIHJl
ZmVyZW5jZXMgaW5jbHVkZSB0aG9zZSBpbiBub24tQ29jb2EgaW1wbGVtZW50YXRpb25zIGFuZAor
ICAgICAgICB0aG9zZSByZXF1aXJlZCBmb3IgY29udGludWVkIGNvbXBhdGliaWxpdHkgd2l0aCBt
b2R1bGVzIHRoYXQgc3RpbGwgdXNlCisgICAgICAgIFBhc3NSZWZQdHJzIChzcGVjaWZpY2FsbHk6
IEZvcndhcmQuaCwgUmVmUHRyIGludGVyb3BlcmFiaWxpdHksCisgICAgICAgIFNpemVMaW1pdHMu
aCwgV29ya1F1ZXVlIChXaW5kb3dzKSBEaXNwYXRjaFF1ZXVlRWZsLAorICAgICAgICBEaXNwYXRj
aFdvcmtJdGVtRWZsLCBhbmQgUGFzc1JlZlB0ciBpdHNlbGYpLgorCisgICAgICAgIFVwZGF0ZSBj
YWxscyB0byBpbnRlcmZhY2VzIHRoYXQgbm8gbG9uZ2VyIHRha2Ugb3IgcmV0dXJuIFBhc3NSZWZQ
dHJzLgorCisgICAgICAgIFVwZGF0ZSBhZG9wdFJlZihUKikgdG8gcmV0dXJuIGEgUmVmUHRyIGlu
c3RlYWQgb2YgYSBQYXNzUmVmUHRyIGFuZAorICAgICAgICBtb3ZlIGl0IHRvIFJlZlB0ci5oIGZy
b20gUGFzc1JlZlB0ci5oLgorCisgICAgICAgICogd3RmL01ldGFBbGxvY2F0b3IuY3BwOgorICAg
ICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yOjphbGxvY2F0ZSk6CisgICAgICAgICogd3RmL01ldGFB
bGxvY2F0b3IuaDoKKyAgICAgICAgKiB3dGYvUGFyYWxsZWxKb2JzR2VuZXJpYy5oOgorICAgICAg
ICAoV1RGOjpQYXJhbGxlbEVudmlyb25tZW50OjpUaHJlYWRQcml2YXRlOjpjcmVhdGUpOgorICAg
ICAgICAqIHd0Zi90ZXh0L0F0b21pY1N0cmluZ0ltcGwuY3BwOgorICAgICAgICAoV1RGOjpIYXNo
QW5kVVRGOENoYXJhY3RlcnNUcmFuc2xhdG9yOjp0cmFuc2xhdGUpOgorICAgICAgICAoV1RGOjpT
dWJzdHJpbmdUcmFuc2xhdG9yOjp0cmFuc2xhdGUpOgorICAgICAgICAqIHd0Zi90ZXh0L0NTdHJp
bmcuY3BwOgorICAgICAgICAoV1RGOjpDU3RyaW5nQnVmZmVyOjpjcmVhdGVVbmluaXRpYWxpemVk
KToKKyAgICAgICAgKiB3dGYvdGV4dC9DU3RyaW5nLmg6CisgICAgICAgICogd3RmL3RleHQvU3Ry
aW5nQnVpbGRlci5jcHA6CisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6OnJlaWZ5U3RyaW5n
KToKKyAgICAgICAgKFdURjo6U3RyaW5nQnVpbGRlcjo6cmVzaXplKToKKyAgICAgICAgKFdURjo6
U3RyaW5nQnVpbGRlcjo6cmVhbGxvY2F0ZUJ1ZmZlcjxMQ2hhcj4pOgorICAgICAgICAoV1RGOjpT
dHJpbmdCdWlsZGVyOjpyZWFsbG9jYXRlQnVmZmVyPFVDaGFyPik6CisgICAgICAgICogd3RmL3Rl
eHQvU3RyaW5nSW1wbC5jcHA6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OnJlYWxsb2NhdGVJ
bnRlcm5hbCk6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OnJlYWxsb2NhdGUpOgorICAgICAg
ICAoV1RGOjpTdHJpbmdJbXBsOjpjcmVhdGU4Qml0SWZQb3NzaWJsZSk6CisgICAgICAgIChXVEY6
OlN0cmluZ0ltcGw6OmNyZWF0ZVN5bWJvbCk6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OmNy
ZWF0ZU51bGxTeW1ib2wpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpjb252ZXJ0VG9Mb3dl
cmNhc2VXaXRob3V0TG9jYWxlKToKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6Y29udmVydFRv
VXBwZXJjYXNlV2l0aG91dExvY2FsZSk6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OmNvbnZl
cnRUb0xvd2VyY2FzZVdpdGhMb2NhbGUpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpjb252
ZXJ0VG9VcHBlcmNhc2VXaXRoTG9jYWxlKToKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6Y29u
dmVydEFTQ0lJQ2FzZSk6CisgICAgICAgICogd3RmL3RleHQvU3RyaW5nSW1wbC5oOgorICAgICAg
ICAoV1RGOjpTdHJpbmdJbXBsOjpTdHJpbmdJbXBsKToKKyAgICAgICAgKFdURjo6U3RyaW5nSW1w
bDo6Y3JlYXRlU3Vic3RyaW5nU2hhcmluZ0ltcGwpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBs
Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKToKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6ZXh0
cmFjdEZvbGRlZFN0cmluZ0luU3ltYm9sKToKKyAgICAgICAgKiB3dGYvdGV4dC9TeW1ib2xSZWdp
c3RyeS5jcHA6CisgICAgICAgIChXVEY6OlN5bWJvbFJlZ2lzdHJ5OjpzeW1ib2xGb3JLZXkpOgor
ICAgICAgICAqIHd0Zi90ZXh0L1dURlN0cmluZy5jcHA6CisgICAgICAgIChXVEY6OlN0cmluZzo6
c3Vic3RyaW5nU2hhcmluZ0ltcGwpOgorICAgICAgICAqIHd0Zi90ZXh0L1dURlN0cmluZy5oOgor
ICAgICAgICAoV1RGOjpTdHJpbmc6OlN0cmluZyk6IERlbGV0ZWQuCisgICAgICAgICogd3RmL3Rl
eHQvY2YvU3RyaW5nSW1wbENGLmNwcDoKKwogMjAxNi0wNi0wNyAgWXVzdWtlIFN1enVraSAgPHV0
YXRhbmUudGVhQGdtYWlsLmNvbT4KIAogICAgICAgICBbSlNDXSBEbyBub3QgYWxsb2NhdGUgdW5u
ZWNlc3NhcnkgVVRGLTggc3RyaW5nIGZvciBlbmNvZGVYWFggZnVuY3Rpb25zCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5k
ZXggZmViY2ZjZmQwN2JjMTU5MWNmZWE3ZDUwNDY3MDk2ZTRjNzEwNzdiYS4uMWZhOWVkZTIwMDI3
YTVhMTU0NDEzMDJiMTVlNWUxZDQ4NTJkYzkyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBA
CisyMDE2LTA1LTI3ICBLZWl0aCBSb2xsaW4gIDxrcm9sbGluQGFwcGxlLmNvbT4KKworICAgICAg
ICBSZW1vdmUgYWxsIHVzZXMgb2YgUGFzc1JlZlB0ciBpbiBXVEYKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NzU5NgorICAgICAgICA8cmRhcjovL3By
b2JsZW0vMjYyMzQzOTE+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQ2hyaXMgRHVtZXouCisKKyAg
ICAgICAgVXBkYXRlIGNhbGxzIHRvIGludGVyZmFjZXMgdGhhdCBubyBsb25nZXIgdGFrZSBvciBy
ZXR1cm4gUGFzc1JlZlB0cnMuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzOiBubyBuZXcgZnVuY3Rp
b25hbGl0eSBzbyBjaGFuZ2VzIGFyZSBjb3ZlcmVkIGJ5IGV4aXN0aW5nCisgICAgICAgIHRlc3Rz
LgorCisgICAgICAgICogY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNTU1ByaW1pdGl2ZVZhbHVlOjpmb3JtYXROdW1iZXJWYWx1ZSk6CisgICAgICAgICogZG9t
L0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpkaXNwbGF5U3RyaW5n
TW9kaWZpZWRCeUVuY29kaW5nKToKKyAgICAgICAgKiB4bWwvWFBhdGhHcmFtbWFyLnk6CisKIDIw
MTYtMDYtMDcgIENocmlzIEZsZWl6YWNoICA8Y2ZsZWl6YWNoQGFwcGxlLmNvbT4KIAogICAgICAg
ICBBWDogaU9TOiBOZWVkIHRvIGV4cG9zZSB3aGV0aGVyIG9iamVjdCBpcyBhIGRpYWxvZyBlbGVt
ZW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dDQXdhcmVKSVRTdHVi
Um91dGluZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dDQXdhcmVKSVRTdHViUm91
dGluZS5jcHAKaW5kZXggZGVjZTI0Zjc0ZDRjYzQ3MGEwNjE5MjhmYzRhNjMyMTY2ODY5ZWUwYi4u
MTk5Y2VjNTQ0OGFmMjI0YjZiNzI1NzVjNzEwYjIyYTBhNDBlOThkOSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HQ0F3YXJlSklUU3R1YlJvdXRpbmUuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmNwcApAQCAtMzUs
NiArMzUsNyBAQAogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJTbG90VmlzaXRv
ci5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAog
bmFtZXNwYWNlIEpTQyB7CiAKQEAgLTE0NCwxNyArMTQ1LDEzIEBAIFBhc3NSZWZQdHI8SklUU3R1
YlJvdXRpbmU+IGNyZWF0ZUpJVFN0dWJSb3V0aW5lKAogICAgIAogICAgIGlmIChjb2RlQmxvY2tG
b3JFeGNlcHRpb25IYW5kbGVycykgewogICAgICAgICBSRUxFQVNFX0FTU0VSVChKSVRDb2RlOjpp
c09wdGltaXppbmdKSVQoY29kZUJsb2NrRm9yRXhjZXB0aW9uSGFuZGxlcnMtPmppdFR5cGUoKSkp
OwotICAgICAgICByZXR1cm4gc3RhdGljX3BvaW50ZXJfY2FzdDxKSVRTdHViUm91dGluZT4oCi0g
ICAgICAgICAgICBhZG9wdFJlZihuZXcgR0NBd2FyZUpJVFN0dWJSb3V0aW5lV2l0aEV4Y2VwdGlv
bkhhbmRsZXIoY29kZSwgdm0sIG93bmVyLCBjZWxscywgY29kZUJsb2NrRm9yRXhjZXB0aW9uSGFu
ZGxlcnMsIGV4Y2VwdGlvbkhhbmRsZXJDYWxsU2l0ZUluZGV4KSkpOworICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IEdDQXdhcmVKSVRTdHViUm91dGluZVdpdGhFeGNlcHRpb25IYW5kbGVyKGNv
ZGUsIHZtLCBvd25lciwgY2VsbHMsIGNvZGVCbG9ja0ZvckV4Y2VwdGlvbkhhbmRsZXJzLCBleGNl
cHRpb25IYW5kbGVyQ2FsbFNpdGVJbmRleCkpOwogICAgIH0KIAotICAgIGlmIChjZWxscy5pc0Vt
cHR5KCkpIHsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19wb2ludGVyX2Nhc3Q8SklUU3R1YlJvdXRp
bmU+KAotICAgICAgICAgICAgYWRvcHRSZWYobmV3IEdDQXdhcmVKSVRTdHViUm91dGluZShjb2Rl
LCB2bSkpKTsKLSAgICB9CisgICAgaWYgKGNlbGxzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBHQ0F3YXJlSklUU3R1YlJvdXRpbmUoY29kZSwgdm0pKTsKICAgICAKLSAg
ICByZXR1cm4gc3RhdGljX3BvaW50ZXJfY2FzdDxKSVRTdHViUm91dGluZT4oCi0gICAgICAgIGFk
b3B0UmVmKG5ldyBNYXJraW5nR0NBd2FyZUpJVFN0dWJSb3V0aW5lKGNvZGUsIHZtLCBvd25lciwg
Y2VsbHMpKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNYXJraW5nR0NBd2FyZUpJVFN0dWJS
b3V0aW5lKGNvZGUsIHZtLCBvd25lciwgY2VsbHMpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlND
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5jcHAKaW5kZXggYWQ4YTY3
YTQ1NzE4ZWE3ZTZhMTRkOGNhNTZiMDUyNzE5ODhlOGY2ZS4uNGY2MDM3NGE1NDRiM2YxMzM1ZWQ0
NDhmNTYwM2UwOTExM2YyYTc5ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNTdHJpbmcuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
U3RyaW5nLmNwcApAQCAtMjUyLDkgKzI1Miw5IEBAIHZvaWQgSlNSb3BlU3RyaW5nOjpyZXNvbHZl
Um9wZShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiAgICAgCiAgICAgaWYgKGlzOEJpdCgpKSB7CiAg
ICAgICAgIExDaGFyKiBidWZmZXI7Ci0gICAgICAgIGlmIChSZWZQdHI8U3RyaW5nSW1wbD4gbmV3
SW1wbCA9IFN0cmluZ0ltcGw6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQobV9sZW5ndGgsIGJ1ZmZl
cikpIHsKKyAgICAgICAgaWYgKGF1dG8gbmV3SW1wbCA9IFN0cmluZ0ltcGw6OnRyeUNyZWF0ZVVu
aW5pdGlhbGl6ZWQobV9sZW5ndGgsIGJ1ZmZlcikpIHsKICAgICAgICAgICAgIEhlYXA6OmhlYXAo
dGhpcyktPnJlcG9ydEV4dHJhTWVtb3J5QWxsb2NhdGVkKG5ld0ltcGwtPmNvc3QoKSk7Ci0gICAg
ICAgICAgICBtX3ZhbHVlID0gbmV3SW1wbC5yZWxlYXNlKCk7CisgICAgICAgICAgICBtX3ZhbHVl
ID0gV1RGTW92ZShuZXdJbXBsKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIG91dE9m
TWVtb3J5KGV4ZWMpOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMjY2LDkgKzI2Niw5IEBAIHZv
aWQgSlNSb3BlU3RyaW5nOjpyZXNvbHZlUm9wZShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiAgICAg
fQogCiAgICAgVUNoYXIqIGJ1ZmZlcjsKLSAgICBpZiAoUmVmUHRyPFN0cmluZ0ltcGw+IG5ld0lt
cGwgPSBTdHJpbmdJbXBsOjp0cnlDcmVhdGVVbmluaXRpYWxpemVkKG1fbGVuZ3RoLCBidWZmZXIp
KSB7CisgICAgaWYgKGF1dG8gbmV3SW1wbCA9IFN0cmluZ0ltcGw6OnRyeUNyZWF0ZVVuaW5pdGlh
bGl6ZWQobV9sZW5ndGgsIGJ1ZmZlcikpIHsKICAgICAgICAgSGVhcDo6aGVhcCh0aGlzKS0+cmVw
b3J0RXh0cmFNZW1vcnlBbGxvY2F0ZWQobmV3SW1wbC0+Y29zdCgpKTsKLSAgICAgICAgbV92YWx1
ZSA9IG5ld0ltcGwucmVsZWFzZSgpOworICAgICAgICBtX3ZhbHVlID0gV1RGTW92ZShuZXdJbXBs
KTsKICAgICB9IGVsc2UgewogICAgICAgICBvdXRPZk1lbW9yeShleGVjKTsKICAgICAgICAgcmV0
dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgKaW5kZXggNjA4MmY2
N2IwNGMxODE4MTE5NDA4MjM0ZGM1YWRjMGY0ZmJiMjY1Ny4uMjdjMmViMmM5Y2FjNDllMDkwZjY1
YTU2NDcxYWM0YzM1NGZmZjU0NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNTdHJpbmcuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0
cmluZy5oCkBAIC05Myw3ICs5Myw3IEBAIHByaXZhdGU6CiAgICAgSlNTdHJpbmcoVk0mIHZtLCBQ
YXNzUmVmUHRyPFN0cmluZ0ltcGw+IHZhbHVlKQogICAgICAgICA6IEpTQ2VsbCh2bSwgdm0uc3Ry
aW5nU3RydWN0dXJlLmdldCgpKQogICAgICAgICAsIG1fZmxhZ3MoMCkKLSAgICAgICAgLCBtX3Zh
bHVlKHZhbHVlKQorICAgICAgICAsIG1fdmFsdWUoUmVmUHRyPFN0cmluZ0ltcGw+KHZhbHVlKSkK
ICAgICB7CiAgICAgfQogCkBAIC02MDMsNyArNjAzLDcgQEAgaW5saW5lIEpTU3RyaW5nKiBqc1N1
YnN0cmluZyhWTSogdm0sIGNvbnN0IFN0cmluZyYgcywgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25l
ZAogICAgICAgICBpZiAoYyA8PSBtYXhTaW5nbGVDaGFyYWN0ZXJTdHJpbmcpCiAgICAgICAgICAg
ICByZXR1cm4gdm0tPnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmcoYyk7CiAgICAg
fQotICAgIHJldHVybiBKU1N0cmluZzo6Y3JlYXRlSGFzT3RoZXJPd25lcigqdm0sIFN0cmluZ0lt
cGw6OmNyZWF0ZVN1YnN0cmluZ1NoYXJpbmdJbXBsKHMuaW1wbCgpLCBvZmZzZXQsIGxlbmd0aCkp
OworICAgIHJldHVybiBKU1N0cmluZzo6Y3JlYXRlSGFzT3RoZXJPd25lcigqdm0sIFN0cmluZ0lt
cGw6OmNyZWF0ZVN1YnN0cmluZ1NoYXJpbmdJbXBsKCpzLmltcGwoKSwgb2Zmc2V0LCBsZW5ndGgp
KTsKIH0KIAogaW5saW5lIEpTU3RyaW5nKiBqc093bmVkU3RyaW5nKFZNKiB2bSwgY29uc3QgU3Ry
aW5nJiBzKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJpdmF0
ZU5hbWUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ByaXZhdGVOYW1lLmgKaW5k
ZXggODVjMTM5ZTBkOWE1ZWI0ZWJiNTkxOTk0YTk2M2Q5NGM5NGE3OTU0Ny4uZjBiYzYwZGEzYTFj
MjU2ZTkyMjkzNDVhODQ0OGM1ZjhiY2I2NTRjYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUHJpdmF0ZU5hbWUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Qcml2YXRlTmFtZS5oCkBAIC00NCw3ICs0NCw3IEBAIHB1YmxpYzoKIAogICAgIGVu
dW0gRGVzY3JpcHRpb25UYWcgeyBEZXNjcmlwdGlvbiB9OwogICAgIGV4cGxpY2l0IFByaXZhdGVO
YW1lKERlc2NyaXB0aW9uVGFnLCBjb25zdCBTdHJpbmcmIGRlc2NyaXB0aW9uKQotICAgICAgICA6
IG1fdWlkKFN0cmluZ0ltcGw6OmNyZWF0ZVN5bWJvbChkZXNjcmlwdGlvbi5pbXBsKCkpKQorICAg
ICAgICA6IG1fdWlkKFN0cmluZ0ltcGw6OmNyZWF0ZVN5bWJvbCgqZGVzY3JpcHRpb24uaW1wbCgp
KSkKICAgICB7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TbWFsbFN0cmluZ3MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU21h
bGxTdHJpbmdzLmNwcAppbmRleCA5NDc1MTg2MDdiODhiNjc3ZThkMWY1ZWViZTNkMTc2NTdiMjRh
MzFkLi4xMDVjMGVmYzMwOTI5ZjY5NWE0ZDE3NDBjZTNlNTA5MWVlODA2Y2VhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TbWFsbFN0cmluZ3MuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NtYWxsU3RyaW5ncy5jcHAKQEAgLTU0LDEwICs1
NCwxMCBAQCBwcml2YXRlOgogU21hbGxTdHJpbmdzU3RvcmFnZTo6U21hbGxTdHJpbmdzU3RvcmFn
ZSgpCiB7CiAgICAgTENoYXIqIGNoYXJhY3RlckJ1ZmZlciA9IDA7Ci0gICAgUmVmUHRyPFN0cmlu
Z0ltcGw+IGJhc2VTdHJpbmcgPSBTdHJpbmdJbXBsOjpjcmVhdGVVbmluaXRpYWxpemVkKHNpbmds
ZUNoYXJhY3RlclN0cmluZ0NvdW50LCBjaGFyYWN0ZXJCdWZmZXIpOworICAgIGF1dG8gYmFzZVN0
cmluZyA9IFN0cmluZ0ltcGw6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoc2luZ2xlQ2hhcmFjdGVyU3Ry
aW5nQ291bnQsIGNoYXJhY3RlckJ1ZmZlcik7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHNpbmdsZUNoYXJhY3RlclN0cmluZ0NvdW50OyArK2kpIHsKICAgICAgICAgY2hhcmFjdGVyQnVm
ZmVyW2ldID0gaTsKLSAgICAgICAgbV9yZXBzW2ldID0gQXRvbWljU3RyaW5nSW1wbDo6YWRkKFBh
c3NSZWZQdHI8U3RyaW5nSW1wbD4oU3RyaW5nSW1wbDo6Y3JlYXRlU3Vic3RyaW5nU2hhcmluZ0lt
cGwoYmFzZVN0cmluZywgaSwgMSkpLmdldCgpKTsKKyAgICAgICAgbV9yZXBzW2ldID0gQXRvbWlj
U3RyaW5nSW1wbDo6YWRkKFN0cmluZ0ltcGw6OmNyZWF0ZVN1YnN0cmluZ1NoYXJpbmdJbXBsKGJh
c2VTdHJpbmcuZ2V0KCksIGksIDEpLnB0cigpKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ0NvbnN0cnVjdG9yLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ0NvbnN0cnVjdG9yLmNwcAppbmRleCBkOTdj
NzJhNGRhOTE4NTkxZDA0ZGEyYzdiYzQ2ZDdlZWI1NGUzODU5Li5kYjU2NGJiZmYxMzk3MTY3ZjQ5
YTAyM2RiYWIyNWRhYjcwZWQ0N2M2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJpbmdDb25zdHJ1Y3Rvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RyaW5nQ29uc3RydWN0b3IuY3BwCkBAIC03MCwxMCArNzAsMTAgQEAgc3RhdGlj
IE5FVkVSX0lOTElORSBKU1ZhbHVlIHN0cmluZ0Zyb21DaGFyQ29kZVNsb3dDYXNlKEV4ZWNTdGF0
ZSogZXhlYykKIHsKICAgICB1bnNpZ25lZCBsZW5ndGggPSBleGVjLT5hcmd1bWVudENvdW50KCk7
CiAgICAgVUNoYXIqIGJ1ZjsKLSAgICBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGltcGwgPSBTdHJp
bmdJbXBsOjpjcmVhdGVVbmluaXRpYWxpemVkKGxlbmd0aCwgYnVmKTsKKyAgICBhdXRvIGltcGwg
PSBTdHJpbmdJbXBsOjpjcmVhdGVVbmluaXRpYWxpemVkKGxlbmd0aCwgYnVmKTsKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCiAgICAgICAgIGJ1ZltpXSA9IHN0YXRp
Y19jYXN0PFVDaGFyPihleGVjLT51bmNoZWNrZWRBcmd1bWVudChpKS50b1VJbnQzMihleGVjKSk7
Ci0gICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIGltcGwpOworICAgIHJldHVybiBqc1N0cmluZyhl
eGVjLCBXVEZNb3ZlKGltcGwpKTsKIH0KIAogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgc3RyaW5nRnJvbUNoYXJDb2RlKEV4ZWNTdGF0ZSogZXhlYykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwCmluZGV4IGU3ZWNjODI2
MmQ1Yjc4NDU2OThjZWIxMWFhMDNkZmU2ZTM0Mjc2OTUuLjkzMTgwZjQ5YWQxZGEwZDQyN2ViZDEx
Nzc2MDdiOGEzNjVkY2VjNTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RyaW5nUHJvdG90eXBlLmNwcApAQCAtMjk0LDcgKzI5NCw3IEBAIHN0YXRpYyBBTFdBWVNf
SU5MSU5FIEpTVmFsdWUganNTcGxpY2VTdWJzdHJpbmdzKEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJp
bmcqIHNvdXJjCiAgICAgICAgIGlmIChwb3NpdGlvbiA8PSAwICYmIGxlbmd0aCA+PSBzb3VyY2VT
aXplKQogICAgICAgICAgICAgcmV0dXJuIHNvdXJjZVZhbDsKICAgICAgICAgLy8gV2UgY291bGQg
Y2FsbCBTdHJpbmc6OnN1YnN0cmluZ1NoYXJpbmdJbXBsKCksIGJ1dCB0aGlzIHdvdWxkIHJlc3Vs
dCBpbiByZWR1bmRhbnQgY2hlY2tzLgotICAgICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgU3Ry
aW5nSW1wbDo6Y3JlYXRlU3Vic3RyaW5nU2hhcmluZ0ltcGwoc291cmNlLmltcGwoKSwgc3RkOjpt
YXgoMCwgcG9zaXRpb24pLCBzdGQ6Om1pbihzb3VyY2VTaXplLCBsZW5ndGgpKSk7CisgICAgICAg
IHJldHVybiBqc1N0cmluZyhleGVjLCBTdHJpbmdJbXBsOjpjcmVhdGVTdWJzdHJpbmdTaGFyaW5n
SW1wbCgqc291cmNlLmltcGwoKSwgc3RkOjptYXgoMCwgcG9zaXRpb24pLCBzdGQ6Om1pbihzb3Vy
Y2VTaXplLCBsZW5ndGgpKSk7CiAgICAgfQogCiAgICAgaW50IHRvdGFsTGVuZ3RoID0gMDsKQEAg
LTMwNyw3ICszMDcsNyBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGpzU3BsaWNlU3Vi
c3RyaW5ncyhFeGVjU3RhdGUqIGV4ZWMsIEpTU3RyaW5nKiBzb3VyYwogICAgIGlmIChzb3VyY2Uu
aXM4Qml0KCkpIHsKICAgICAgICAgTENoYXIqIGJ1ZmZlcjsKICAgICAgICAgY29uc3QgTENoYXIq
IHNvdXJjZURhdGEgPSBzb3VyY2UuY2hhcmFjdGVyczgoKTsKLSAgICAgICAgUmVmUHRyPFN0cmlu
Z0ltcGw+IGltcGwgPSBTdHJpbmdJbXBsOjp0cnlDcmVhdGVVbmluaXRpYWxpemVkKHRvdGFsTGVu
Z3RoLCBidWZmZXIpOworICAgICAgICBhdXRvIGltcGwgPSBTdHJpbmdJbXBsOjp0cnlDcmVhdGVV
bmluaXRpYWxpemVkKHRvdGFsTGVuZ3RoLCBidWZmZXIpOwogICAgICAgICBpZiAoIWltcGwpCiAg
ICAgICAgICAgICByZXR1cm4gdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOwogCkBAIC0zMTks
MTMgKzMxOSwxMyBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGpzU3BsaWNlU3Vic3Ry
aW5ncyhFeGVjU3RhdGUqIGV4ZWMsIEpTU3RyaW5nKiBzb3VyYwogICAgICAgICAgICAgfQogICAg
ICAgICB9CiAKLSAgICAgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIGltcGwucmVsZWFzZSgpKTsK
KyAgICAgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIFdURk1vdmUoaW1wbCkpOwogICAgIH0KIAog
ICAgIFVDaGFyKiBidWZmZXI7CiAgICAgY29uc3QgVUNoYXIqIHNvdXJjZURhdGEgPSBzb3VyY2Uu
Y2hhcmFjdGVyczE2KCk7CiAKLSAgICBSZWZQdHI8U3RyaW5nSW1wbD4gaW1wbCA9IFN0cmluZ0lt
cGw6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQodG90YWxMZW5ndGgsIGJ1ZmZlcik7CisgICAgYXV0
byBpbXBsID0gU3RyaW5nSW1wbDo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZCh0b3RhbExlbmd0aCwg
YnVmZmVyKTsKICAgICBpZiAoIWltcGwpCiAgICAgICAgIHJldHVybiB0aHJvd091dE9mTWVtb3J5
RXJyb3IoZXhlYyk7CiAKQEAgLTMzNyw3ICszMzcsNyBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBK
U1ZhbHVlIGpzU3BsaWNlU3Vic3RyaW5ncyhFeGVjU3RhdGUqIGV4ZWMsIEpTU3RyaW5nKiBzb3Vy
YwogICAgICAgICB9CiAgICAgfQogCi0gICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIGltcGwucmVs
ZWFzZSgpKTsKKyAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgV1RGTW92ZShpbXBsKSk7CiB9CiAK
IHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFsdWUganNTcGxpY2VTdWJzdHJpbmdzV2l0aFNlcGFy
YXRvcnMoRXhlY1N0YXRlKiBleGVjLCBKU1N0cmluZyogc291cmNlVmFsLCBjb25zdCBTdHJpbmcm
IHNvdXJjZSwgY29uc3QgU3RyaW5nUmFuZ2UqIHN1YnN0cmluZ1JhbmdlcywgaW50IHJhbmdlQ291
bnQsIGNvbnN0IFN0cmluZyogc2VwYXJhdG9ycywgaW50IHNlcGFyYXRvckNvdW50KQpAQCAtMzQ5
LDcgKzM0OSw3IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFsdWUganNTcGxpY2VTdWJzdHJp
bmdzV2l0aFNlcGFyYXRvcnMoRXhlY1N0YXRlKiBleGVjLCBKCiAgICAgICAgIGlmIChwb3NpdGlv
biA8PSAwICYmIGxlbmd0aCA+PSBzb3VyY2VTaXplKQogICAgICAgICAgICAgcmV0dXJuIHNvdXJj
ZVZhbDsKICAgICAgICAgLy8gV2UgY291bGQgY2FsbCBTdHJpbmc6OnN1YnN0cmluZ1NoYXJpbmdJ
bXBsKCksIGJ1dCB0aGlzIHdvdWxkIHJlc3VsdCBpbiByZWR1bmRhbnQgY2hlY2tzLgotICAgICAg
ICByZXR1cm4ganNTdHJpbmcoZXhlYywgU3RyaW5nSW1wbDo6Y3JlYXRlU3Vic3RyaW5nU2hhcmlu
Z0ltcGwoc291cmNlLmltcGwoKSwgc3RkOjptYXgoMCwgcG9zaXRpb24pLCBzdGQ6Om1pbihzb3Vy
Y2VTaXplLCBsZW5ndGgpKSk7CisgICAgICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBTdHJpbmdJ
bXBsOjpjcmVhdGVTdWJzdHJpbmdTaGFyaW5nSW1wbCgqc291cmNlLmltcGwoKSwgc3RkOjptYXgo
MCwgcG9zaXRpb24pLCBzdGQ6Om1pbihzb3VyY2VTaXplLCBsZW5ndGgpKSk7CiAgICAgfQogCiAg
ICAgQ2hlY2tlZDxpbnQsIFJlY29yZE92ZXJmbG93PiB0b3RhbExlbmd0aCA9IDA7CkBAIC0zNzEs
NyArMzcxLDcgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBqc1NwbGljZVN1YnN0cmlu
Z3NXaXRoU2VwYXJhdG9ycyhFeGVjU3RhdGUqIGV4ZWMsIEoKICAgICAgICAgTENoYXIqIGJ1ZmZl
cjsKICAgICAgICAgY29uc3QgTENoYXIqIHNvdXJjZURhdGEgPSBzb3VyY2UuY2hhcmFjdGVyczgo
KTsKIAotICAgICAgICBSZWZQdHI8U3RyaW5nSW1wbD4gaW1wbCA9IFN0cmluZ0ltcGw6OnRyeUNy
ZWF0ZVVuaW5pdGlhbGl6ZWQodG90YWxMZW5ndGgudW5zYWZlR2V0KCksIGJ1ZmZlcik7CisgICAg
ICAgIGF1dG8gaW1wbCA9IFN0cmluZ0ltcGw6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQodG90YWxM
ZW5ndGgudW5zYWZlR2V0KCksIGJ1ZmZlcik7CiAgICAgICAgIGlmICghaW1wbCkKICAgICAgICAg
ICAgIHJldHVybiB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7CiAKQEAgLTM5MiwxMSArMzky
LDExIEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFsdWUganNTcGxpY2VTdWJzdHJpbmdzV2l0
aFNlcGFyYXRvcnMoRXhlY1N0YXRlKiBleGVjLCBKCiAgICAgICAgICAgICB9CiAgICAgICAgIH0g
ICAgICAgIAogCi0gICAgICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBpbXBsLnJlbGVhc2UoKSk7
CisgICAgICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBXVEZNb3ZlKGltcGwpKTsKICAgICB9CiAK
ICAgICBVQ2hhciogYnVmZmVyOwotICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBpbXBsID0gU3RyaW5n
SW1wbDo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZCh0b3RhbExlbmd0aC51bnNhZmVHZXQoKSwgYnVm
ZmVyKTsKKyAgICBhdXRvIGltcGwgPSBTdHJpbmdJbXBsOjp0cnlDcmVhdGVVbmluaXRpYWxpemVk
KHRvdGFsTGVuZ3RoLnVuc2FmZUdldCgpLCBidWZmZXIpOwogICAgIGlmICghaW1wbCkKICAgICAg
ICAgcmV0dXJuIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKIApAQCAtNDIzLDcgKzQyMyw3
IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFsdWUganNTcGxpY2VTdWJzdHJpbmdzV2l0aFNl
cGFyYXRvcnMoRXhlY1N0YXRlKiBleGVjLCBKCiAgICAgICAgIH0KICAgICB9CiAKLSAgICByZXR1
cm4ganNTdHJpbmcoZXhlYywgaW1wbC5yZWxlYXNlKCkpOworICAgIHJldHVybiBqc1N0cmluZyhl
eGVjLCBXVEZNb3ZlKGltcGwpKTsKIH0KIAogc3RhdGljIEFMV0FZU19JTkxJTkUgRW5jb2RlZEpT
VmFsdWUgcmVtb3ZlVXNpbmdSZWdFeHBTZWFyY2goVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpT
U3RyaW5nKiBzdHJpbmcsIGNvbnN0IFN0cmluZyYgc291cmNlLCBSZWdFeHAqIHJlZ0V4cCkKQEAg
LTcyMiwxNCArNzIyLDE0IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEVuY29kZWRKU1ZhbHVlIHJl
cGxhY2VVc2luZ1N0cmluZ1NlYXJjaChWTSYsIEV4ZWNTdGF0ZSogZXhlCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBTdHJpbmdJbXBsKiBzdHJp
bmdJbXBsID0gc3RyaW5nLmltcGwoKTsKLSAgICBTdHJpbmcgbGVmdFBhcnQoU3RyaW5nSW1wbDo6
Y3JlYXRlU3Vic3RyaW5nU2hhcmluZ0ltcGwoc3RyaW5nSW1wbCwgMCwgbWF0Y2hTdGFydCkpOwor
ICAgIFN0cmluZyBsZWZ0UGFydChTdHJpbmdJbXBsOjpjcmVhdGVTdWJzdHJpbmdTaGFyaW5nSW1w
bCgqc3RyaW5nSW1wbCwgMCwgbWF0Y2hTdGFydCkpOwogCiAgICAgc2l6ZV90IG1hdGNoRW5kID0g
bWF0Y2hTdGFydCArIHNlYXJjaFN0cmluZy5pbXBsKCktPmxlbmd0aCgpOwogICAgIGludCBvdmVj
dG9yWzJdID0geyBzdGF0aWNfY2FzdDxpbnQ+KG1hdGNoU3RhcnQpLCAgc3RhdGljX2Nhc3Q8aW50
PihtYXRjaEVuZCl9OwogICAgIFN0cmluZyBtaWRkbGVQYXJ0ID0gc3Vic3RpdHV0ZUJhY2tyZWZl
cmVuY2VzKHJlcGxhY2VTdHJpbmcsIHN0cmluZywgb3ZlY3RvciwgMCk7CiAKICAgICBzaXplX3Qg
bGVmdExlbmd0aCA9IHN0cmluZ0ltcGwtPmxlbmd0aCgpIC0gbWF0Y2hFbmQ7Ci0gICAgU3RyaW5n
IHJpZ2h0UGFydChTdHJpbmdJbXBsOjpjcmVhdGVTdWJzdHJpbmdTaGFyaW5nSW1wbChzdHJpbmdJ
bXBsLCBtYXRjaEVuZCwgbGVmdExlbmd0aCkpOworICAgIFN0cmluZyByaWdodFBhcnQoU3RyaW5n
SW1wbDo6Y3JlYXRlU3Vic3RyaW5nU2hhcmluZ0ltcGwoKnN0cmluZ0ltcGwsIG1hdGNoRW5kLCBs
ZWZ0TGVuZ3RoKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU0M6OmpzU3RyaW5nKGV4
ZWMsIGxlZnRQYXJ0LCBtaWRkbGVQYXJ0LCByaWdodFBhcnQpKTsKIH0KIApAQCAtNzUxLDI2ICs3
NTEsMjYgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+CiBzdGF0aWMgaW5saW5l
IEpTVmFsdWUgcmVwZWF0Q2hhcmFjdGVyKEV4ZWNTdGF0ZSogZXhlYywgQ2hhcmFjdGVyVHlwZSBj
aGFyYWN0ZXIsIHVuc2lnbmVkIHJlcGVhdENvdW50KQogewogICAgIENoYXJhY3RlclR5cGUqIGJ1
ZmZlciA9IG51bGxwdHI7Ci0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IGltcGwgPSBTdHJpbmdJbXBs
Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKHJlcGVhdENvdW50LCBidWZmZXIpOworICAgIGF1dG8g
aW1wbCA9IFN0cmluZ0ltcGw6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQocmVwZWF0Q291bnQsIGJ1
ZmZlcik7CiAgICAgaWYgKCFpbXBsKQogICAgICAgICByZXR1cm4gdGhyb3dPdXRPZk1lbW9yeUVy
cm9yKGV4ZWMpOwogCiAgICAgc3RkOjpmaWxsX24oYnVmZmVyLCByZXBlYXRDb3VudCwgY2hhcmFj
dGVyKTsKIAotICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBpbXBsLnJlbGVhc2UoKSk7CisgICAg
cmV0dXJuIGpzU3RyaW5nKGV4ZWMsIFdURk1vdmUoaW1wbCkpOwogfQogCiB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgQ2hhcmFjdGVyVHlwZT4KIHN0YXRpYyBpbmxpbmUgSlNTdHJpbmcqIHJlcGVhdENoYXJh
Y3RlcihFeGVjU3RhdGUmIGV4ZWMsIENoYXJhY3RlclR5cGUgY2hhcmFjdGVyLCB1bnNpZ25lZCBy
ZXBlYXRDb3VudCkKIHsKICAgICBDaGFyYWN0ZXJUeXBlKiBidWZmZXIgPSBudWxscHRyOwotICAg
IFJlZlB0cjxTdHJpbmdJbXBsPiBpbXBsID0gU3RyaW5nSW1wbDo6dHJ5Q3JlYXRlVW5pbml0aWFs
aXplZChyZXBlYXRDb3VudCwgYnVmZmVyKTsKKyAgICBhdXRvIGltcGwgPSBTdHJpbmdJbXBsOjp0
cnlDcmVhdGVVbmluaXRpYWxpemVkKHJlcGVhdENvdW50LCBidWZmZXIpOwogICAgIGlmICghaW1w
bCkKICAgICAgICAgcmV0dXJuIHRocm93T3V0T2ZNZW1vcnlFcnJvcigmZXhlYyksIG51bGxwdHI7
CiAKICAgICBzdGQ6OmZpbGxfbihidWZmZXIsIHJlcGVhdENvdW50LCBjaGFyYWN0ZXIpOwogCi0g
ICAgcmV0dXJuIGpzU3RyaW5nKCZleGVjLCBpbXBsLnJlbGVhc2UoKSk7CisgICAgcmV0dXJuIGpz
U3RyaW5nKCZleGVjLCBXVEZNb3ZlKGltcGwpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNSZXBlYXRDaGFyYWN0ZXIoRXhlY1N0YXRlKiBleGVjKQpA
QCAtMTU3Miw3ICsxNTcyLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQ
cm90b0Z1bmNGb250c2l6ZShFeGVjU3RhdGUqIGV4ZWMpCiAgICAgICAgIHVuc2lnbmVkIGJ1ZmZl
clNpemUgPSAyMiArIHN0cmluZ1NpemU7CiAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgaGF2
ZSBhbiA4LWJpdCB2ZXJzaW9uIG9mIHRoaXMgY29kZSBwYXRoIHRvbz8gT3IgbWF5YmUgb25seSBh
biA4LWJpdCB2ZXJzaW9uPwogICAgICAgICBVQ2hhciogYnVmZmVyOwotICAgICAgICBQYXNzUmVm
UHRyPFN0cmluZ0ltcGw+IGltcGwgPSBTdHJpbmdJbXBsOjp0cnlDcmVhdGVVbmluaXRpYWxpemVk
KGJ1ZmZlclNpemUsIGJ1ZmZlcik7CisgICAgICAgIGF1dG8gaW1wbCA9IFN0cmluZ0ltcGw6OnRy
eUNyZWF0ZVVuaW5pdGlhbGl6ZWQoYnVmZmVyU2l6ZSwgYnVmZmVyKTsKICAgICAgICAgaWYgKCFp
bXBsKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
ICAgICAgICAgYnVmZmVyWzBdID0gJzwnOwpAQCAtMTU5OCw3ICsxNTk4LDcgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNGb250c2l6ZShFeGVjU3RhdGUqIGV4
ZWMpCiAgICAgICAgIGJ1ZmZlclsxOSArIHN0cmluZ1NpemVdID0gJ24nOwogICAgICAgICBidWZm
ZXJbMjAgKyBzdHJpbmdTaXplXSA9ICd0JzsKICAgICAgICAgYnVmZmVyWzIxICsgc3RyaW5nU2l6
ZV0gPSAnPic7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOb250cml2aWFsU3Ry
aW5nKGV4ZWMsIGltcGwpKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc05vbnRy
aXZpYWxTdHJpbmcoZXhlYywgV1RGTW92ZShpbXBsKSkpOwogICAgIH0KIAogICAgIFN0cmluZyBm
b250U2l6ZSA9IGEwLnRvV1RGU3RyaW5nKGV4ZWMpOwpAQCAtMTY0MSw3ICsxNjQxLDcgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNMaW5rKEV4ZWNTdGF0ZSog
ZXhlYykKICAgICB1bnNpZ25lZCBidWZmZXJTaXplID0gMTUgKyBsaW5rVGV4dFNpemUgKyBzdHJp
bmdTaXplOwogICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgaGF2ZSBhbiA4LWJpdCB2ZXJzaW9uIG9m
IHRoaXMgY29kZSBwYXRoIHRvbz8gT3IgbWF5YmUgb25seSBhbiA4LWJpdCB2ZXJzaW9uPwogICAg
IFVDaGFyKiBidWZmZXI7Ci0gICAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBpbXBsID0gU3RyaW5n
SW1wbDo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChidWZmZXJTaXplLCBidWZmZXIpOworICAgIGF1
dG8gaW1wbCA9IFN0cmluZ0ltcGw6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoYnVmZmVyU2l6ZSwg
YnVmZmVyKTsKICAgICBpZiAoIWltcGwpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiAgICAgYnVmZmVyWzBdID0gJzwnOwpAQCAtMTY2MSw3ICsxNjYxLDcg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNMaW5rKEV4ZWNT
dGF0ZSogZXhlYykKICAgICBidWZmZXJbMTIgKyBsaW5rVGV4dFNpemUgKyBzdHJpbmdTaXplXSA9
ICcvJzsKICAgICBidWZmZXJbMTMgKyBsaW5rVGV4dFNpemUgKyBzdHJpbmdTaXplXSA9ICdhJzsK
ICAgICBidWZmZXJbMTQgKyBsaW5rVGV4dFNpemUgKyBzdHJpbmdTaXplXSA9ICc+JzsKLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCBpbXBsKSk7Cisg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywgV1RGTW92
ZShpbXBsKSkpOwogfQogCiBlbnVtIHsKQEAgLTE4NzgsNyArMTg3OCw3IEBAIHN0YXRpYyBKU1Zh
bHVlIG5vcm1hbGl6ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFVDaGFyKiBzb3VyY2UsIHNpemVf
dCBzb3VyY2VMZW5nCiAgICAgfQogCiAgICAgVUNoYXIqIGJ1ZmZlciA9IG51bGxwdHI7Ci0gICAg
UmVmUHRyPFN0cmluZ0ltcGw+IGltcGwgPSBTdHJpbmdJbXBsOjp0cnlDcmVhdGVVbmluaXRpYWxp
emVkKG5vcm1hbGl6ZWRTdHJpbmdMZW5ndGgsIGJ1ZmZlcik7CisgICAgYXV0byBpbXBsID0gU3Ry
aW5nSW1wbDo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChub3JtYWxpemVkU3RyaW5nTGVuZ3RoLCBi
dWZmZXIpOwogICAgIGlmICghaW1wbCkKICAgICAgICAgcmV0dXJuIHRocm93T3V0T2ZNZW1vcnlF
cnJvcihleGVjKTsKIApAQCAtMTg4Nyw3ICsxODg3LDcgQEAgc3RhdGljIEpTVmFsdWUgbm9ybWFs
aXplKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgVUNoYXIqIHNvdXJjZSwgc2l6ZV90IHNvdXJjZUxl
bmcKICAgICBpZiAoVV9GQUlMVVJFKHN0YXR1cykpCiAgICAgICAgIHJldHVybiB0aHJvd1R5cGVF
cnJvcihleGVjKTsKIAotICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBpbXBsLnJlbGVhc2UoKSk7
CisgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIFdURk1vdmUoaW1wbCkpOwogfQogCiBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY05vcm1hbGl6ZShFeGVjU3RhdGUq
IGV4ZWMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9NZXRhQWxsb2NhdG9yLmNwcCBiL1Nv
dXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0b3IuY3BwCmluZGV4IGRkMDY1OTIwNThmMmQyMThlOTc2
YjQ2NGZjMjM5OGJiMDU5NzA2MjkuLjZlNDRiNjcyNGIyODNkZDRjNzZkMTZlZTQ0OGM3ODMwNTJl
ODJmYTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0b3IuY3BwCisrKyBi
L1NvdXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0b3IuY3BwCkBAIC0xNDgsMTIgKzE0OCwxMiBAQCBN
ZXRhQWxsb2NhdG9yOjpNZXRhQWxsb2NhdG9yKHNpemVfdCBhbGxvY2F0aW9uR3JhbnVsZSwgc2l6
ZV90IHBhZ2VTaXplKQogICAgIEFTU0VSVChzdGF0aWNfY2FzdDxzaXplX3Q+KDEpIDw8IG1fbG9n
QWxsb2NhdGlvbkdyYW51bGUgPT0gbV9hbGxvY2F0aW9uR3JhbnVsZSk7CiB9CiAKLVBhc3NSZWZQ
dHI8TWV0YUFsbG9jYXRvckhhbmRsZT4gTWV0YUFsbG9jYXRvcjo6YWxsb2NhdGUoc2l6ZV90IHNp
emVJbkJ5dGVzLCB2b2lkKiBvd25lclVJRCkKK1JlZlB0cjxNZXRhQWxsb2NhdG9ySGFuZGxlPiBN
ZXRhQWxsb2NhdG9yOjphbGxvY2F0ZShzaXplX3Qgc2l6ZUluQnl0ZXMsIHZvaWQqIG93bmVyVUlE
KQogewogICAgIExvY2tIb2xkZXIgbG9ja2VyKCZtX2xvY2spOwogCiAgICAgaWYgKCFzaXplSW5C
eXRlcykKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIAog
ICAgIHNpemVJbkJ5dGVzID0gcm91bmRVcChzaXplSW5CeXRlcyk7CiAgICAgCkBAIC0xNjQsNyAr
MTY0LDcgQEAgUGFzc1JlZlB0cjxNZXRhQWxsb2NhdG9ySGFuZGxlPiBNZXRhQWxsb2NhdG9yOjph
bGxvY2F0ZShzaXplX3Qgc2l6ZUluQnl0ZXMsIHZvaWQKICAgICAgICAgCiAgICAgICAgIHN0YXJ0
ID0gYWxsb2NhdGVOZXdTcGFjZShudW1iZXJPZlBhZ2VzKTsKICAgICAgICAgaWYgKCFzdGFydCkK
LSAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
ICAgIAogICAgICAgICBBU1NFUlQobnVtYmVyT2ZQYWdlcyA+PSByZXF1ZXN0ZWROdW1iZXJPZlBh
Z2VzKTsKICAgICAgICAgCkBAIC0xODYsMTIgKzE4NiwxMiBAQCBQYXNzUmVmUHRyPE1ldGFBbGxv
Y2F0b3JIYW5kbGU+IE1ldGFBbGxvY2F0b3I6OmFsbG9jYXRlKHNpemVfdCBzaXplSW5CeXRlcywg
dm9pZAogICAgIG1fbnVtQWxsb2NhdGlvbnMrKzsKICNlbmRpZgogCi0gICAgTWV0YUFsbG9jYXRv
ckhhbmRsZSogaGFuZGxlID0gbmV3IE1ldGFBbGxvY2F0b3JIYW5kbGUodGhpcywgc3RhcnQsIHNp
emVJbkJ5dGVzLCBvd25lclVJRCk7CisgICAgYXV0byBoYW5kbGUgPSBhZG9wdFJlZigqbmV3IE1l
dGFBbGxvY2F0b3JIYW5kbGUodGhpcywgc3RhcnQsIHNpemVJbkJ5dGVzLCBvd25lclVJRCkpOwog
CiAgICAgaWYgKFVOTElLRUxZKCEhbV90cmFja2VyKSkKLSAgICAgICAgbV90cmFja2VyLT5ub3Rp
ZnkoaGFuZGxlKTsKKyAgICAgICAgbV90cmFja2VyLT5ub3RpZnkoaGFuZGxlLnB0cigpKTsKIAot
ICAgIHJldHVybiBhZG9wdFJlZihoYW5kbGUpOworICAgIHJldHVybiBXVEZNb3ZlKGhhbmRsZSk7
CiB9CiAKIE1ldGFBbGxvY2F0b3I6OlN0YXRpc3RpY3MgTWV0YUFsbG9jYXRvcjo6Y3VycmVudFN0
YXRpc3RpY3MoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvTWV0YUFsbG9jYXRvci5oIGIv
U291cmNlL1dURi93dGYvTWV0YUFsbG9jYXRvci5oCmluZGV4IDlkZDM3NWNhZDU0ZWNhMzBlZjdh
NGVmOWQ3MjIwNDQ3OWMxYzBkNjMuLjg3MzkwMWJkZTZlMWY5MGI0NzFiZDEzYTdlODY5ZDc3MWIy
YzAyMDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0b3IuaAorKysgYi9T
b3VyY2UvV1RGL3d0Zi9NZXRhQWxsb2NhdG9yLmgKQEAgLTY4LDcgKzY4LDcgQEAgcHVibGljOgog
ICAgIAogICAgIFdURl9FWFBPUlRfUFJJVkFURSB2aXJ0dWFsIH5NZXRhQWxsb2NhdG9yKCk7CiAg
ICAgCi0gICAgV1RGX0VYUE9SVF9QUklWQVRFIFBhc3NSZWZQdHI8TWV0YUFsbG9jYXRvckhhbmRs
ZT4gYWxsb2NhdGUoc2l6ZV90IHNpemVJbkJ5dGVzLCB2b2lkKiBvd25lclVJRCk7CisgICAgV1RG
X0VYUE9SVF9QUklWQVRFIFJlZlB0cjxNZXRhQWxsb2NhdG9ySGFuZGxlPiBhbGxvY2F0ZShzaXpl
X3Qgc2l6ZUluQnl0ZXMsIHZvaWQqIG93bmVyVUlEKTsKIAogICAgIHZvaWQgdHJhY2tBbGxvY2F0
aW9ucyhNZXRhQWxsb2NhdG9yVHJhY2tlciogdHJhY2tlcikKICAgICB7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL3d0Zi9QYXJhbGxlbEpvYnNHZW5lcmljLmggYi9Tb3VyY2UvV1RGL3d0Zi9QYXJh
bGxlbEpvYnNHZW5lcmljLmgKaW5kZXggM2UyZTI5ZDYxYWE1OWNhZjFjMmFkNThhMjdkM2Q5MjUy
OWQwZGQ4NC4uNTJmNDc5OWYxODZiMTQ0MmM4NTdkNTA2YjMyNDM1MjAxMjU4MzU3YyAxMDA2NDQK
LS0tIGEvU291cmNlL1dURi93dGYvUGFyYWxsZWxKb2JzR2VuZXJpYy5oCisrKyBiL1NvdXJjZS9X
VEYvd3RmL1BhcmFsbGVsSm9ic0dlbmVyaWMuaApAQCAtNjYsOSArNjYsOSBAQCBwdWJsaWM6CiAK
ICAgICAgICAgdm9pZCB3YWl0Rm9yRmluaXNoKCk7CiAKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8VGhyZWFkUHJpdmF0ZT4gY3JlYXRlKCkKKyAgICAgICAgc3RhdGljIFJlZjxUaHJlYWRQcml2
YXRlPiBjcmVhdGUoKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IFRocmVhZFByaXZhdGUoKSk7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBUaHJl
YWRQcml2YXRlKCkpOwogICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIHZvaWQgd29ya2VyVGhy
ZWFkKHZvaWQqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1Bhc3NSZWZQdHIuaCBiL1Nv
dXJjZS9XVEYvd3RmL1Bhc3NSZWZQdHIuaAppbmRleCBjZWI1Mjg3NjI0MzZkMWM3NGQyMjYwZDBh
MmNjOWQ2ZDVkMzEwODUwLi4wODkxOTJiMGJjMjc0ZDhmYzBhNDgxY2JmYTg5Yjc2ZTExZjllNzcz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9QYXNzUmVmUHRyLmgKKysrIGIvU291cmNlL1dU
Ri93dGYvUGFzc1JlZlB0ci5oCkBAIC0yMSwxNCArMjEsMTIgQEAKICNpZm5kZWYgV1RGX1Bhc3NS
ZWZQdHJfaAogI2RlZmluZSBXVEZfUGFzc1JlZlB0cl9oCiAKLSNpbmNsdWRlIDx3dGYvR2V0UHRy
Lmg+CiAjaW5jbHVkZSA8d3RmL1JlZi5oPgogCiBuYW1lc3BhY2UgV1RGIHsKIAogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+IGNsYXNzIFJlZlB0cjsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBj
bGFzcyBQYXNzUmVmUHRyOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFBhc3NSZWZQdHI8VD4g
YWRvcHRSZWYoVCopOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gQUxXQVlTX0lOTElORSB2
b2lkIHJlZklmTm90TnVsbChUKiBwdHIpCiAgICAgewpAQCAtNTksNiArNTcsNyBAQCBuYW1lc3Bh
Y2UgV1RGIHsKIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBQYXNzUmVmUHRyKGNvbnN0
IFJlZlB0cjxVPiYpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBQYXNzUmVmUHRyKFJl
ZjxVPiYmIHJlZmVyZW5jZSkgOiBtX3B0cigmcmVmZXJlbmNlLmxlYWtSZWYoKSkgeyB9CisgICAg
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IFBhc3NSZWZQdHIoUmVmUHRyPFU+JiYgcmVmZXJlbmNl
KSA6IG1fcHRyKHJlZmVyZW5jZS5sZWFrUmVmKCkpIHsgfQogCiAgICAgICAgIFQqIGdldCgpIGNv
bnN0IHsgcmV0dXJuIG1fcHRyOyB9CiAKQEAgLTczLDcgKzcyLDcgQEAgbmFtZXNwYWNlIFdURiB7
CiAgICAgICAgIHR5cGVkZWYgVCogKFBhc3NSZWZQdHI6OipVbnNwZWNpZmllZEJvb2xUeXBlKTsK
ICAgICAgICAgb3BlcmF0b3IgVW5zcGVjaWZpZWRCb29sVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1f
cHRyID8gJlBhc3NSZWZQdHI6Om1fcHRyIDogbnVsbHB0cjsgfQogCi0gICAgICAgIGZyaWVuZCBQ
YXNzUmVmUHRyIGFkb3B0UmVmPFQ+KFQqKTsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgViwg
dHlwZW5hbWUgVT4gZnJpZW5kIFBhc3NSZWZQdHI8Vj4gc3RhdGljX3BvaW50ZXJfY2FzdChjb25z
dCBQYXNzUmVmUHRyPFU+Jik7CiAKICAgICBwcml2YXRlOgogICAgICAgICBQYXNzUmVmUHRyJiBv
cGVyYXRvcj0oY29uc3QgUGFzc1JlZlB0ciYpID0gZGVsZXRlOwpAQCAtMTQ1LDE2ICsxNDQsMTAg
QEAgbmFtZXNwYWNlIFdURiB7CiAgICAgeyAKICAgICAgICAgcmV0dXJuIGEgIT0gYi5nZXQoKTsg
CiAgICAgfQotICAgIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBQYXNzUmVmUHRy
PFQ+IGFkb3B0UmVmKFQqIHApCi0gICAgewotICAgICAgICBhZG9wdGVkKHApOwotICAgICAgICBy
ZXR1cm4gUGFzc1JlZlB0cjxUPihwLCBQYXNzUmVmUHRyPFQ+OjpBZG9wdCk7Ci0gICAgfQogCi0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIFBhc3NSZWZQdHI8VD4g
c3RhdGljX3BvaW50ZXJfY2FzdChjb25zdCBQYXNzUmVmUHRyPFU+JiBwKSAKLSAgICB7IAotICAg
ICAgICByZXR1cm4gYWRvcHRSZWYoc3RhdGljX2Nhc3Q8VCo+KHAubGVha1JlZigpKSk7IAorICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFYsIHR5cGVuYW1lIFU+IGlubGluZSBQYXNzUmVmUHRyPFY+IHN0
YXRpY19wb2ludGVyX2Nhc3QoY29uc3QgUGFzc1JlZlB0cjxVPiYgcCkKKyAgICB7CisgICAgICAg
IHJldHVybiBQYXNzUmVmUHRyPFY+KHN0YXRpY19jYXN0PFYqPihwLmxlYWtSZWYoKSksIFBhc3NS
ZWZQdHI8Vj46OkFkb3B0KTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gc3Ry
dWN0IElzU21hcnRQdHI8UGFzc1JlZlB0cjxUPj4gewpAQCAtMTY0LDcgKzE1Nyw2IEBAIG5hbWVz
cGFjZSBXVEYgewogfSAvLyBuYW1lc3BhY2UgV1RGCiAKIHVzaW5nIFdURjo6UGFzc1JlZlB0cjsK
LXVzaW5nIFdURjo6YWRvcHRSZWY7CiB1c2luZyBXVEY6OnN0YXRpY19wb2ludGVyX2Nhc3Q7CiAK
ICNlbmRpZiAvLyBXVEZfUGFzc1JlZlB0cl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9S
ZWZQdHIuaCBiL1NvdXJjZS9XVEYvd3RmL1JlZlB0ci5oCmluZGV4IGVkNTFlZTZlNzQyOWFmZGE4
ZWUzOTA1M2VhNWFlNmJjMWVlMDA2YWUuLmRlNDdiNjZiNGUzYjE5NTg5NmEwYjRhNDEzY2NkMzQz
ZDkyMGNiMmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1JlZlB0ci5oCisrKyBiL1NvdXJj
ZS9XVEYvd3RmL1JlZlB0ci5oCkBAIC0zMSw2ICszMSw5IEBACiAKIG5hbWVzcGFjZSBXVEYgewog
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBSZWZQdHI7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBSZWZQdHI8VD4gYWRvcHRSZWYoVCopOworCiBlbnVtIEhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5
cGUgeyBIYXNoVGFibGVEZWxldGVkVmFsdWUgfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xh
c3MgUmVmUHRyIHsKQEAgLTYyLDcgKzY1LDggQEAgcHVibGljOgogCiAgICAgVCogZ2V0KCkgY29u
c3QgeyByZXR1cm4gbV9wdHI7IH0KICAgICAKLSAgICBQYXNzUmVmUHRyPFQ+IHJlbGVhc2UoKSB7
IFBhc3NSZWZQdHI8VD4gdG1wID0gYWRvcHRSZWYobV9wdHIpOyBtX3B0ciA9IG51bGxwdHI7IHJl
dHVybiB0bXA7IH0KKyAgICAvLyBGSVhNRTogUmVtb3ZlIHJlbGVhc2UoKSBhbmQgY2hhbmdlIGFs
bCBjYWxsIHNpdGVzIHRvIGNhbGwgV1RGTW92ZSgpLgorICAgIFJlZlB0cjxUPiByZWxlYXNlKCkg
eyBSZWZQdHI8VD4gdG1wID0gYWRvcHRSZWYobV9wdHIpOyBtX3B0ciA9IG51bGxwdHI7IHJldHVy
biB0bXA7IH0KICAgICBSZWY8VD4gcmVsZWFzZU5vbk51bGwoKSB7IEFTU0VSVChtX3B0cik7IFJl
ZjxUPiB0bXAoYWRvcHRSZWYoKm1fcHRyKSk7IG1fcHRyID0gbnVsbHB0cjsgcmV0dXJuIHRtcDsg
fQogCiAgICAgVCogbGVha1JlZigpIFdBUk5fVU5VU0VEX1JFVFVSTjsKQEAgLTk4LDYgKzEwMiwx
MSBAQCBwdWJsaWM6CiAjZW5kaWYKIAogcHJpdmF0ZToKKyAgICBmcmllbmQgUmVmUHRyIGFkb3B0
UmVmPFQ+KFQqKTsKKworICAgIGVudW0gQWRvcHRUYWcgeyBBZG9wdCB9OworICAgIFJlZlB0cihU
KiBwdHIsIEFkb3B0VGFnKSA6IG1fcHRyKHB0cikgeyB9CisKICAgICBUKiBtX3B0cjsKIH07CiAK
QEAgLTIyOCw5ICsyMzcsMTYgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHN0cnVjdCBJc1NtYXJ0
UHRyPFJlZlB0cjxUPj4gewogICAgIHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsKIH07
CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBSZWZQdHI8VD4gYWRvcHRSZWYoVCogcCkK
K3sKKyAgICBhZG9wdGVkKHApOworICAgIHJldHVybiBSZWZQdHI8VD4ocCwgUmVmUHRyPFQ+OjpB
ZG9wdCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdURgogCiB1c2luZyBXVEY6OlJlZlB0cjsKK3Vz
aW5nIFdURjo6YWRvcHRSZWY7CiB1c2luZyBXVEY6OnN0YXRpY19wb2ludGVyX2Nhc3Q7CiAKICNl
bmRpZiAvLyBXVEZfUmVmUHRyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvQXRv
bWljU3RyaW5nSW1wbC5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21pY1N0cmluZ0ltcGwu
Y3BwCmluZGV4IDkwOTUzM2M5OTA4ZmU2MDBkMWU4YjllNzAzYmNkOGUzNDgzOTkyN2MuLmFjNjBi
NjMzZjdlMjQxMTFmNzQ4YzM2MzIzNmM1ZTBhYmU2NzJlNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
VEYvd3RmL3RleHQvQXRvbWljU3RyaW5nSW1wbC5jcHAKKysrIGIvU291cmNlL1dURi93dGYvdGV4
dC9BdG9taWNTdHJpbmdJbXBsLmNwcApAQCAtMjE5LDcgKzIxOSw3IEBAIHN0cnVjdCBIYXNoQW5k
VVRGOENoYXJhY3RlcnNUcmFuc2xhdG9yIHsKICAgICBzdGF0aWMgdm9pZCB0cmFuc2xhdGUoU3Ry
aW5nSW1wbComIGxvY2F0aW9uLCBjb25zdCBIYXNoQW5kVVRGOENoYXJhY3RlcnMmIGJ1ZmZlciwg
dW5zaWduZWQgaGFzaCkKICAgICB7CiAgICAgICAgIFVDaGFyKiB0YXJnZXQ7Ci0gICAgICAgIFJl
ZlB0cjxTdHJpbmdJbXBsPiBuZXdTdHJpbmcgPSBTdHJpbmdJbXBsOjpjcmVhdGVVbmluaXRpYWxp
emVkKGJ1ZmZlci51dGYxNkxlbmd0aCwgdGFyZ2V0KTsKKyAgICAgICAgYXV0byBuZXdTdHJpbmcg
PSBTdHJpbmdJbXBsOjpjcmVhdGVVbmluaXRpYWxpemVkKGJ1ZmZlci51dGYxNkxlbmd0aCwgdGFy
Z2V0KTsKIAogICAgICAgICBib29sIGlzQWxsQVNDSUk7CiAgICAgICAgIGNvbnN0IGNoYXIqIHNv
dXJjZSA9IGJ1ZmZlci5jaGFyYWN0ZXJzOwpAQCAtMjI5LDcgKzIyOSw3IEBAIHN0cnVjdCBIYXNo
QW5kVVRGOENoYXJhY3RlcnNUcmFuc2xhdG9yIHsKICAgICAgICAgaWYgKGlzQWxsQVNDSUkpCiAg
ICAgICAgICAgICBuZXdTdHJpbmcgPSBTdHJpbmdJbXBsOjpjcmVhdGUoYnVmZmVyLmNoYXJhY3Rl
cnMsIGJ1ZmZlci5sZW5ndGgpOwogCi0gICAgICAgIGxvY2F0aW9uID0gbmV3U3RyaW5nLmxlYWtS
ZWYoKTsKKyAgICAgICAgbG9jYXRpb24gPSAmbmV3U3RyaW5nLmxlYWtSZWYoKTsKICAgICAgICAg
bG9jYXRpb24tPnNldEhhc2goaGFzaCk7CiAgICAgICAgIGxvY2F0aW9uLT5zZXRJc0F0b21pYyh0
cnVlKTsKICAgICB9CkBAIC0yODQsNyArMjg0LDcgQEAgc3RydWN0IFN1YnN0cmluZ0xvY2F0aW9u
IHsKIHN0cnVjdCBTdWJzdHJpbmdUcmFuc2xhdG9yIHsKICAgICBzdGF0aWMgdm9pZCB0cmFuc2xh
dGUoU3RyaW5nSW1wbComIGxvY2F0aW9uLCBjb25zdCBTdWJzdHJpbmdMb2NhdGlvbiYgYnVmZmVy
LCB1bnNpZ25lZCBoYXNoKQogICAgIHsKLSAgICAgICAgbG9jYXRpb24gPSAmU3RyaW5nSW1wbDo6
Y3JlYXRlU3Vic3RyaW5nU2hhcmluZ0ltcGwoYnVmZmVyLmJhc2VTdHJpbmcsIGJ1ZmZlci5zdGFy
dCwgYnVmZmVyLmxlbmd0aCkubGVha1JlZigpOworICAgICAgICBsb2NhdGlvbiA9ICZTdHJpbmdJ
bXBsOjpjcmVhdGVTdWJzdHJpbmdTaGFyaW5nSW1wbCgqYnVmZmVyLmJhc2VTdHJpbmcsIGJ1ZmZl
ci5zdGFydCwgYnVmZmVyLmxlbmd0aCkubGVha1JlZigpOwogICAgICAgICBsb2NhdGlvbi0+c2V0
SGFzaChoYXNoKTsKICAgICAgICAgbG9jYXRpb24tPnNldElzQXRvbWljKHRydWUpOwogICAgIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvQ1N0cmluZy5jcHAgYi9Tb3VyY2UvV1RG
L3d0Zi90ZXh0L0NTdHJpbmcuY3BwCmluZGV4IGQxZjE4NmI0YWYyNGIyMDVjNmU2YTliYWY4ZjFi
ODBkYzdkNmQ0ZGIuLjIxYjM3ZWJhOGMyNTQzOTZmZjFmYmZjMTA1Y2YzMzgzZDQ2MGE4MjQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvQ1N0cmluZy5jcHAKKysrIGIvU291cmNlL1dU
Ri93dGYvdGV4dC9DU3RyaW5nLmNwcApAQCAtMzIsMTQgKzMyLDE0IEBACiAKIG5hbWVzcGFjZSBX
VEYgewogCi1QYXNzUmVmUHRyPENTdHJpbmdCdWZmZXI+IENTdHJpbmdCdWZmZXI6OmNyZWF0ZVVu
aW5pdGlhbGl6ZWQoc2l6ZV90IGxlbmd0aCkKK1JlZjxDU3RyaW5nQnVmZmVyPiBDU3RyaW5nQnVm
ZmVyOjpjcmVhdGVVbmluaXRpYWxpemVkKHNpemVfdCBsZW5ndGgpCiB7CiAgICAgUkVMRUFTRV9B
U1NFUlQobGVuZ3RoIDwgKHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSAtIHNp
emVvZihDU3RyaW5nQnVmZmVyKSkpOwogCiAgICAgLy8gVGhlICsxIGlzIGZvciB0aGUgdGVybWlu
YXRpbmcgbnVsbCBjaGFyYWN0ZXIuCiAgICAgc2l6ZV90IHNpemUgPSBzaXplb2YoQ1N0cmluZ0J1
ZmZlcikgKyBsZW5ndGggKyAxOwogICAgIENTdHJpbmdCdWZmZXIqIHN0cmluZ0J1ZmZlciA9IHN0
YXRpY19jYXN0PENTdHJpbmdCdWZmZXIqPihmYXN0TWFsbG9jKHNpemUpKTsKLSAgICByZXR1cm4g
YWRvcHRSZWYobmV3IChOb3ROdWxsLCBzdHJpbmdCdWZmZXIpIENTdHJpbmdCdWZmZXIobGVuZ3Ro
KSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgKE5vdE51bGwsIHN0cmluZ0J1ZmZlcikgQ1N0
cmluZ0J1ZmZlcihsZW5ndGgpKTsKIH0KIAogQ1N0cmluZzo6Q1N0cmluZyhjb25zdCBjaGFyKiBz
dHIpCkBAIC03Niw3ICs3Niw3IEBAIGNoYXIqIENTdHJpbmc6Om11dGFibGVEYXRhKCkKICAgICAg
ICAgcmV0dXJuIDA7CiAgICAgcmV0dXJuIG1fYnVmZmVyLT5tdXRhYmxlRGF0YSgpOwogfQotICAg
IAorCiBDU3RyaW5nIENTdHJpbmc6Om5ld1VuaW5pdGlhbGl6ZWQoc2l6ZV90IGxlbmd0aCwgY2hh
ciomIGNoYXJhY3RlckJ1ZmZlcikKIHsKICAgICBDU3RyaW5nIHJlc3VsdDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvd3RmL3RleHQvQ1N0cmluZy5oIGIvU291cmNlL1dURi93dGYvdGV4dC9DU3Ry
aW5nLmgKaW5kZXggMjlkM2IwZWYxYjY5ZDdhNGI3MjA2ZGEwYzhiZmY4MjUwZGRhZmFlNy4uNGQ4
ZDgwMzk5YzY5MDBiMTMzZTcxNWM0MzA3ZDhkNDI0MzgzZDZmYiAxMDA2NDQKLS0tIGEvU291cmNl
L1dURi93dGYvdGV4dC9DU3RyaW5nLmgKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9DU3RyaW5n
LmgKQEAgLTI4LDcgKzI4LDcgQEAKIAogI2luY2x1ZGUgPHd0Zi9IYXNoRnVuY3Rpb25zLmg+CiAj
aW5jbHVkZSA8d3RmL0hhc2hUcmFpdHMuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgor
I2luY2x1ZGUgPHd0Zi9SZWYuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCiBuYW1l
c3BhY2UgV1RGIHsKQEAgLTQzLDcgKzQzLDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBmcmll
bmQgY2xhc3MgQ1N0cmluZzsKIAotICAgIHN0YXRpYyBQYXNzUmVmUHRyPENTdHJpbmdCdWZmZXI+
IGNyZWF0ZVVuaW5pdGlhbGl6ZWQoc2l6ZV90IGxlbmd0aCk7CisgICAgc3RhdGljIFJlZjxDU3Ry
aW5nQnVmZmVyPiBjcmVhdGVVbmluaXRpYWxpemVkKHNpemVfdCBsZW5ndGgpOwogCiAgICAgQ1N0
cmluZ0J1ZmZlcihzaXplX3QgbGVuZ3RoKSA6IG1fbGVuZ3RoKGxlbmd0aCkgeyB9CiAgICAgY2hh
ciogbXV0YWJsZURhdGEoKSB7IHJldHVybiByZWludGVycHJldF9jYXN0X3B0cjxjaGFyKj4odGhp
cyArIDEpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0J1aWxkZXIu
Y3BwIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmNwcAppbmRleCAxZDZhZTYy
MWQxODk2MWVjOTEzY2Q3ZGRjMzAwZWJhM2JlZGZiOGM1Li5mYzE4YzQyYzViNWM0OTViN2QxMTIz
ZmRkN2E0NGZkMjkyMGU4MmEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmlu
Z0J1aWxkZXIuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nQnVpbGRlci5jcHAK
QEAgLTU5LDcgKzU5LDcgQEAgdm9pZCBTdHJpbmdCdWlsZGVyOjpyZWlmeVN0cmluZygpIGNvbnN0
CiAgICAgaWYgKG1fbGVuZ3RoID09IG1fYnVmZmVyLT5sZW5ndGgoKSkKICAgICAgICAgbV9zdHJp
bmcgPSBtX2J1ZmZlci5nZXQoKTsKICAgICBlbHNlCi0gICAgICAgIG1fc3RyaW5nID0gU3RyaW5n
SW1wbDo6Y3JlYXRlU3Vic3RyaW5nU2hhcmluZ0ltcGwobV9idWZmZXIsIDAsIG1fbGVuZ3RoKTsK
KyAgICAgICAgbV9zdHJpbmcgPSBTdHJpbmdJbXBsOjpjcmVhdGVTdWJzdHJpbmdTaGFyaW5nSW1w
bCgqbV9idWZmZXIsIDAsIG1fbGVuZ3RoKTsKIH0KIAogdm9pZCBTdHJpbmdCdWlsZGVyOjpyZXNp
emUodW5zaWduZWQgbmV3U2l6ZSkKQEAgLTg4LDcgKzg4LDcgQEAgdm9pZCBTdHJpbmdCdWlsZGVy
OjpyZXNpemUodW5zaWduZWQgbmV3U2l6ZSkKICAgICBBU1NFUlQobV9sZW5ndGggPT0gbV9zdHJp
bmcubGVuZ3RoKCkpOwogICAgIEFTU0VSVChuZXdTaXplIDwgbV9zdHJpbmcubGVuZ3RoKCkpOwog
ICAgIG1fbGVuZ3RoID0gbmV3U2l6ZTsKLSAgICBtX3N0cmluZyA9IFN0cmluZ0ltcGw6OmNyZWF0
ZVN1YnN0cmluZ1NoYXJpbmdJbXBsKG1fc3RyaW5nLmltcGwoKSwgMCwgbmV3U2l6ZSk7CisgICAg
bV9zdHJpbmcgPSBTdHJpbmdJbXBsOjpjcmVhdGVTdWJzdHJpbmdTaGFyaW5nSW1wbCgqbV9zdHJp
bmcuaW1wbCgpLCAwLCBuZXdTaXplKTsKIH0KIAogLy8gQWxsb2NhdGUgYSBuZXcgOCBiaXQgYnVm
ZmVyLCBjb3B5aW5nIGluIGN1cnJlbnRDaGFyYWN0ZXJzICh0aGVzZSBtYXkgY29tZSBmcm9tIGVp
dGhlciBtX3N0cmluZwpAQCAtMTQ3LDcgKzE0Nyw3IEBAIHZvaWQgU3RyaW5nQnVpbGRlcjo6cmVh
bGxvY2F0ZUJ1ZmZlcjxMQ2hhcj4odW5zaWduZWQgcmVxdWlyZWRMZW5ndGgpCiAgICAgQVNTRVJU
KG1fYnVmZmVyLT5pczhCaXQoKSk7CiAgICAgCiAgICAgaWYgKG1fYnVmZmVyLT5oYXNPbmVSZWYo
KSkKLSAgICAgICAgbV9idWZmZXIgPSBTdHJpbmdJbXBsOjpyZWFsbG9jYXRlKG1fYnVmZmVyLnJl
bGVhc2UoKSwgcmVxdWlyZWRMZW5ndGgsIG1fYnVmZmVyQ2hhcmFjdGVyczgpOworICAgICAgICBt
X2J1ZmZlciA9IFN0cmluZ0ltcGw6OnJlYWxsb2NhdGUobV9idWZmZXIucmVsZWFzZU5vbk51bGwo
KSwgcmVxdWlyZWRMZW5ndGgsIG1fYnVmZmVyQ2hhcmFjdGVyczgpOwogICAgIGVsc2UKICAgICAg
ICAgYWxsb2NhdGVCdWZmZXIobV9idWZmZXItPmNoYXJhY3RlcnM4KCksIHJlcXVpcmVkTGVuZ3Ro
KTsKIH0KQEAgLTE2Miw3ICsxNjIsNyBAQCB2b2lkIFN0cmluZ0J1aWxkZXI6OnJlYWxsb2NhdGVC
dWZmZXI8VUNoYXI+KHVuc2lnbmVkIHJlcXVpcmVkTGVuZ3RoKQogICAgIGlmIChtX2J1ZmZlci0+
aXM4Qml0KCkpCiAgICAgICAgIGFsbG9jYXRlQnVmZmVyVXBDb252ZXJ0KG1fYnVmZmVyLT5jaGFy
YWN0ZXJzOCgpLCByZXF1aXJlZExlbmd0aCk7CiAgICAgZWxzZSBpZiAobV9idWZmZXItPmhhc09u
ZVJlZigpKQotICAgICAgICBtX2J1ZmZlciA9IFN0cmluZ0ltcGw6OnJlYWxsb2NhdGUobV9idWZm
ZXIucmVsZWFzZSgpLCByZXF1aXJlZExlbmd0aCwgbV9idWZmZXJDaGFyYWN0ZXJzMTYpOworICAg
ICAgICBtX2J1ZmZlciA9IFN0cmluZ0ltcGw6OnJlYWxsb2NhdGUobV9idWZmZXIucmVsZWFzZU5v
bk51bGwoKSwgcmVxdWlyZWRMZW5ndGgsIG1fYnVmZmVyQ2hhcmFjdGVyczE2KTsKICAgICBlbHNl
CiAgICAgICAgIGFsbG9jYXRlQnVmZmVyKG1fYnVmZmVyLT5jaGFyYWN0ZXJzMTYoKSwgcmVxdWly
ZWRMZW5ndGgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBs
LmNwcCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5jcHAKaW5kZXggZmMxNjI3NGVj
MDRiZTc0Y2MyYmY5ZjBmNDkxYTIyMzI0ZTM3OGQzMi4uMmQwZGEzNWNjNTRlNTBmMDk5MWFjNjRj
NDUxNDEzOThjM2NhMjU2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJ
bXBsLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuY3BwCkBAIC0yMDQs
OCArMjA0LDggQEAgUmVmPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OmNyZWF0ZVVuaW5pdGlhbGl6
ZWQodW5zaWduZWQgbGVuZ3RoLCBVQ2hhciomIGRhdGEpCiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFt
ZSBDaGFyVHlwZT4KLWlubGluZSBSZWY8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6cmVhbGxvY2F0
ZUludGVybmFsKFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gb3JpZ2luYWxTdHJpbmcsIHVuc2lnbmVk
IGxlbmd0aCwgQ2hhclR5cGUqJiBkYXRhKQoteyAgIAoraW5saW5lIFJlZjxTdHJpbmdJbXBsPiBT
dHJpbmdJbXBsOjpyZWFsbG9jYXRlSW50ZXJuYWwoUmVmPFN0cmluZ0ltcGw+JiYgb3JpZ2luYWxT
dHJpbmcsIHVuc2lnbmVkIGxlbmd0aCwgQ2hhclR5cGUqJiBkYXRhKQorewogICAgIEFTU0VSVChv
cmlnaW5hbFN0cmluZy0+aGFzT25lUmVmKCkpOwogICAgIEFTU0VSVChvcmlnaW5hbFN0cmluZy0+
YnVmZmVyT3duZXJzaGlwKCkgPT0gQnVmZmVySW50ZXJuYWwpOwogCkBAIC0yMTksMjIgKzIxOSwy
MiBAQCBpbmxpbmUgUmVmPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OnJlYWxsb2NhdGVJbnRlcm5h
bChQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IG9yaQogICAgICAgICBDUkFTSCgpOwogCiAgICAgb3Jp
Z2luYWxTdHJpbmctPn5TdHJpbmdJbXBsKCk7Ci0gICAgU3RyaW5nSW1wbCogc3RyaW5nID0gc3Rh
dGljX2Nhc3Q8U3RyaW5nSW1wbCo+KGZhc3RSZWFsbG9jKG9yaWdpbmFsU3RyaW5nLmxlYWtSZWYo
KSwgYWxsb2NhdGlvblNpemU8Q2hhclR5cGU+KGxlbmd0aCkpKTsKKyAgICBhdXRvKiBzdHJpbmcg
PSBzdGF0aWNfY2FzdDxTdHJpbmdJbXBsKj4oZmFzdFJlYWxsb2MoJm9yaWdpbmFsU3RyaW5nLmxl
YWtSZWYoKSwgYWxsb2NhdGlvblNpemU8Q2hhclR5cGU+KGxlbmd0aCkpKTsKIAogICAgIGRhdGEg
PSBzdHJpbmctPnRhaWxQb2ludGVyPENoYXJUeXBlPigpOwogICAgIHJldHVybiBjb25zdHJ1Y3RJ
bnRlcm5hbDxDaGFyVHlwZT4oc3RyaW5nLCBsZW5ndGgpOwogfQogCi1SZWY8U3RyaW5nSW1wbD4g
U3RyaW5nSW1wbDo6cmVhbGxvY2F0ZShQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IG9yaWdpbmFsU3Ry
aW5nLCB1bnNpZ25lZCBsZW5ndGgsIExDaGFyKiYgZGF0YSkKK1JlZjxTdHJpbmdJbXBsPiBTdHJp
bmdJbXBsOjpyZWFsbG9jYXRlKFJlZjxTdHJpbmdJbXBsPiYmIG9yaWdpbmFsU3RyaW5nLCB1bnNp
Z25lZCBsZW5ndGgsIExDaGFyKiYgZGF0YSkKIHsKICAgICBBU1NFUlQob3JpZ2luYWxTdHJpbmct
PmlzOEJpdCgpKTsKLSAgICByZXR1cm4gcmVhbGxvY2F0ZUludGVybmFsKG9yaWdpbmFsU3RyaW5n
LCBsZW5ndGgsIGRhdGEpOworICAgIHJldHVybiByZWFsbG9jYXRlSW50ZXJuYWwoV1RGTW92ZShv
cmlnaW5hbFN0cmluZyksIGxlbmd0aCwgZGF0YSk7CiB9CiAKLVJlZjxTdHJpbmdJbXBsPiBTdHJp
bmdJbXBsOjpyZWFsbG9jYXRlKFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gb3JpZ2luYWxTdHJpbmcs
IHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIqJiBkYXRhKQorUmVmPFN0cmluZ0ltcGw+IFN0cmluZ0lt
cGw6OnJlYWxsb2NhdGUoUmVmPFN0cmluZ0ltcGw+JiYgb3JpZ2luYWxTdHJpbmcsIHVuc2lnbmVk
IGxlbmd0aCwgVUNoYXIqJiBkYXRhKQogewogICAgIEFTU0VSVCghb3JpZ2luYWxTdHJpbmctPmlz
OEJpdCgpKTsKLSAgICByZXR1cm4gcmVhbGxvY2F0ZUludGVybmFsKG9yaWdpbmFsU3RyaW5nLCBs
ZW5ndGgsIGRhdGEpOworICAgIHJldHVybiByZWFsbG9jYXRlSW50ZXJuYWwoV1RGTW92ZShvcmln
aW5hbFN0cmluZyksIGxlbmd0aCwgZGF0YSk7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFy
VHlwZT4KQEAgLTI2NSw3ICsyNjUsNyBAQCBSZWY8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6Y3Jl
YXRlOEJpdElmUG9zc2libGUoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbgogICAgICAg
ICByZXR1cm4gKmVtcHR5KCk7CiAKICAgICBMQ2hhciogZGF0YTsKLSAgICBSZWZQdHI8U3RyaW5n
SW1wbD4gc3RyaW5nID0gY3JlYXRlVW5pbml0aWFsaXplZEludGVybmFsTm9uRW1wdHkobGVuZ3Ro
LCBkYXRhKTsKKyAgICBhdXRvIHN0cmluZyA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWRJbnRlcm5hbE5v
bkVtcHR5KGxlbmd0aCwgZGF0YSk7CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0
aDsgKytpKSB7CiAgICAgICAgIGlmIChjaGFyYWN0ZXJzW2ldICYgMHhmZjAwKQpAQCAtMjczLDcg
KzI3Myw3IEBAIFJlZjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpjcmVhdGU4Qml0SWZQb3NzaWJs
ZShjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduCiAgICAgICAgIGRhdGFbaV0gPSBzdGF0
aWNfY2FzdDxMQ2hhcj4oY2hhcmFjdGVyc1tpXSk7CiAgICAgfQogCi0gICAgcmV0dXJuIHN0cmlu
Zy5yZWxlYXNlTm9uTnVsbCgpOworICAgIHJldHVybiBzdHJpbmc7CiB9CiAKIFJlZjxTdHJpbmdJ
bXBsPiBTdHJpbmdJbXBsOjpjcmVhdGU4Qml0SWZQb3NzaWJsZShjb25zdCBVQ2hhciogc3RyaW5n
KQpAQCAtMjkxLDI0ICsyOTEsMjQgQEAgUmVmPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OmNyZWF0
ZShjb25zdCBMQ2hhciogc3RyaW5nKQogICAgIHJldHVybiBjcmVhdGUoc3RyaW5nLCBsZW5ndGgp
OwogfQogCi1SZWY8U3ltYm9sSW1wbD4gU3RyaW5nSW1wbDo6Y3JlYXRlU3ltYm9sKFBhc3NSZWZQ
dHI8U3RyaW5nSW1wbD4gcmVwKQorUmVmPFN5bWJvbEltcGw+IFN0cmluZ0ltcGw6OmNyZWF0ZVN5
bWJvbChTdHJpbmdJbXBsJiByZXApCiB7Ci0gICAgU3RyaW5nSW1wbCogb3duZXJSZXAgPSAocmVw
LT5idWZmZXJPd25lcnNoaXAoKSA9PSBCdWZmZXJTdWJzdHJpbmcpID8gcmVwLT5zdWJzdHJpbmdC
dWZmZXIoKSA6IHJlcC5nZXQoKTsKKyAgICBhdXRvKiBvd25lclJlcCA9IChyZXAuYnVmZmVyT3du
ZXJzaGlwKCkgPT0gQnVmZmVyU3Vic3RyaW5nKSA/IHJlcC5zdWJzdHJpbmdCdWZmZXIoKSA6ICZy
ZXA7CiAKICAgICAvLyBXZSBhbGxvY2F0ZSBhIGJ1ZmZlciB0aGF0IGNvbnRhaW5zCiAgICAgLy8g
MS4gdGhlIFN0cmluZ0ltcGwgc3RydWN0CiAgICAgLy8gMi4gdGhlIHBvaW50ZXIgdG8gdGhlIG93
bmVyIHN0cmluZwogICAgIC8vIDMuIHRoZSBwb2ludGVyIHRvIHRoZSBzeW1ib2wgcmVnaXN0cnkK
ICAgICAvLyA0LiB0aGUgcGxhY2Vob2xkZXIgZm9yIHN5bWJvbCBhd2FyZSBoYXNoIHZhbHVlIChh
bGxvY2F0ZWQgc2l6ZSBpcyBwb2ludGVyIHNpemUsIGJ1dCBvbmx5IDQgYnl0ZXMgYXJlIHVzZWQp
Ci0gICAgU3RyaW5nSW1wbCogc3RyaW5nSW1wbCA9IHN0YXRpY19jYXN0PFN0cmluZ0ltcGwqPihm
YXN0TWFsbG9jKGFsbG9jYXRpb25TaXplPFN0cmluZ0ltcGwqPigzKSkpOwotICAgIGlmIChyZXAt
PmlzOEJpdCgpKQotICAgICAgICByZXR1cm4gYWRvcHRSZWYoc3RhdGljX2Nhc3Q8U3ltYm9sSW1w
bCY+KCpuZXcgKE5vdE51bGwsIHN0cmluZ0ltcGwpIFN0cmluZ0ltcGwoQ3JlYXRlU3ltYm9sLCBy
ZXAtPm1fZGF0YTgsIHJlcC0+bGVuZ3RoKCksIG93bmVyUmVwKSkpOwotICAgIHJldHVybiBhZG9w
dFJlZihzdGF0aWNfY2FzdDxTeW1ib2xJbXBsJj4oKm5ldyAoTm90TnVsbCwgc3RyaW5nSW1wbCkg
U3RyaW5nSW1wbChDcmVhdGVTeW1ib2wsIHJlcC0+bV9kYXRhMTYsIHJlcC0+bGVuZ3RoKCksIG93
bmVyUmVwKSkpOworICAgIGF1dG8qIHN0cmluZ0ltcGwgPSBzdGF0aWNfY2FzdDxTdHJpbmdJbXBs
Kj4oZmFzdE1hbGxvYyhhbGxvY2F0aW9uU2l6ZTxTdHJpbmdJbXBsKj4oMykpKTsKKyAgICBpZiAo
cmVwLmlzOEJpdCgpKQorICAgICAgICByZXR1cm4gYWRvcHRSZWYoc3RhdGljX2Nhc3Q8U3ltYm9s
SW1wbCY+KCpuZXcgKE5vdE51bGwsIHN0cmluZ0ltcGwpIFN0cmluZ0ltcGwoQ3JlYXRlU3ltYm9s
LCByZXAubV9kYXRhOCwgcmVwLmxlbmd0aCgpLCAqb3duZXJSZXApKSk7CisgICAgcmV0dXJuIGFk
b3B0UmVmKHN0YXRpY19jYXN0PFN5bWJvbEltcGwmPigqbmV3IChOb3ROdWxsLCBzdHJpbmdJbXBs
KSBTdHJpbmdJbXBsKENyZWF0ZVN5bWJvbCwgcmVwLm1fZGF0YTE2LCByZXAubGVuZ3RoKCksICpv
d25lclJlcCkpKTsKIH0KIAogUmVmPFN5bWJvbEltcGw+IFN0cmluZ0ltcGw6OmNyZWF0ZU51bGxT
eW1ib2woKQogewotICAgIHJldHVybiBjcmVhdGVTeW1ib2wobnVsbCgpKTsKKyAgICByZXR1cm4g
Y3JlYXRlU3ltYm9sKCpudWxsKCkpOwogfQogCiBib29sIFN0cmluZ0ltcGw6OmNvbnRhaW5zT25s
eVdoaXRlc3BhY2UoKQpAQCAtNDI3LDE5ICs0MjcsMTkgQEAgU2xvd1BhdGg6CiAKICAgICAvLyBE
byBhIHNsb3dlciBpbXBsZW1lbnRhdGlvbiBmb3IgY2FzZXMgdGhhdCBpbmNsdWRlIG5vbi1BU0NJ
SSBjaGFyYWN0ZXJzLgogICAgIFVDaGFyKiBkYXRhMTY7Ci0gICAgUmVmUHRyPFN0cmluZ0ltcGw+
IG5ld0ltcGwgPSBjcmVhdGVVbmluaXRpYWxpemVkSW50ZXJuYWxOb25FbXB0eShtX2xlbmd0aCwg
ZGF0YTE2KTsKKyAgICBhdXRvIG5ld0ltcGwgPSBjcmVhdGVVbmluaXRpYWxpemVkSW50ZXJuYWxO
b25FbXB0eShtX2xlbmd0aCwgZGF0YTE2KTsKIAogICAgIFVFcnJvckNvZGUgc3RhdHVzID0gVV9a
RVJPX0VSUk9SOwogICAgIGludDMyX3QgcmVhbExlbmd0aCA9IHVfc3RyVG9Mb3dlcihkYXRhMTYs
IGxlbmd0aCwgbV9kYXRhMTYsIG1fbGVuZ3RoLCAiIiwgJnN0YXR1cyk7CiAgICAgaWYgKFVfU1VD
Q0VTUyhzdGF0dXMpICYmIHJlYWxMZW5ndGggPT0gbGVuZ3RoKQotICAgICAgICByZXR1cm4gbmV3
SW1wbC5yZWxlYXNlTm9uTnVsbCgpOworICAgICAgICByZXR1cm4gbmV3SW1wbDsKIAogICAgIG5l
d0ltcGwgPSBjcmVhdGVVbmluaXRpYWxpemVkKHJlYWxMZW5ndGgsIGRhdGExNik7CiAgICAgc3Rh
dHVzID0gVV9aRVJPX0VSUk9SOwogICAgIHVfc3RyVG9Mb3dlcihkYXRhMTYsIHJlYWxMZW5ndGgs
IG1fZGF0YTE2LCBtX2xlbmd0aCwgIiIsICZzdGF0dXMpOwogICAgIGlmIChVX0ZBSUxVUkUoc3Rh
dHVzKSkKICAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIHJldHVybiBuZXdJbXBsLnJlbGVhc2VO
b25OdWxsKCk7CisgICAgcmV0dXJuIG5ld0ltcGw7CiB9CiAKIFJlZjxTdHJpbmdJbXBsPiBTdHJp
bmdJbXBsOjpjb252ZXJ0VG9VcHBlcmNhc2VXaXRob3V0TG9jYWxlKCkKQEAgLTQ1NSw3ICs0NTUs
NyBAQCBSZWY8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6Y29udmVydFRvVXBwZXJjYXNlV2l0aG91
dExvY2FsZSgpCiAKICAgICBpZiAoaXM4Qml0KCkpIHsKICAgICAgICAgTENoYXIqIGRhdGE4Owot
ICAgICAgICBSZWZQdHI8U3RyaW5nSW1wbD4gbmV3SW1wbCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQo
bV9sZW5ndGgsIGRhdGE4KTsKKyAgICAgICAgYXV0byBuZXdJbXBsID0gY3JlYXRlVW5pbml0aWFs
aXplZChtX2xlbmd0aCwgZGF0YTgpOwogICAgICAgICAKICAgICAgICAgLy8gRG8gYSBmYXN0ZXIg
bG9vcCBmb3IgdGhlIGNhc2Ugd2hlcmUgYWxsIHRoZSBjaGFyYWN0ZXJzIGFyZSBBU0NJSS4KICAg
ICAgICAgdW5zaWduZWQgb3JlZCA9IDA7CkBAIC00NzIsNyArNDcyLDcgQEAgUmVmPFN0cmluZ0lt
cGw+IFN0cmluZ0ltcGw6OmNvbnZlcnRUb1VwcGVyY2FzZVdpdGhvdXRMb2NhbGUoKQogI2VuZGlm
CiAgICAgICAgIH0KICAgICAgICAgaWYgKCEob3JlZCAmIH4weDdGKSkKLSAgICAgICAgICAgIHJl
dHVybiBuZXdJbXBsLnJlbGVhc2VOb25OdWxsKCk7CisgICAgICAgICAgICByZXR1cm4gbmV3SW1w
bDsKIAogICAgICAgICAvLyBEbyBhIHNsb3dlciBpbXBsZW1lbnRhdGlvbiBmb3IgY2FzZXMgdGhh
dCBpbmNsdWRlIG5vbi1BU0NJSSBMYXRpbi0xIGNoYXJhY3RlcnMuCiAgICAgICAgIGludCBudW1i
ZXJTaGFycFNDaGFyYWN0ZXJzID0gMDsKQEAgLTQ5NCw3ICs0OTQsNyBAQCBSZWY8U3RyaW5nSW1w
bD4gU3RyaW5nSW1wbDo6Y29udmVydFRvVXBwZXJjYXNlV2l0aG91dExvY2FsZSgpCiAgICAgICAg
IH0KIAogICAgICAgICBpZiAoIW51bWJlclNoYXJwU0NoYXJhY3RlcnMpCi0gICAgICAgICAgICBy
ZXR1cm4gbmV3SW1wbC5yZWxlYXNlTm9uTnVsbCgpOworICAgICAgICAgICAgcmV0dXJuIG5ld0lt
cGw7CiAKICAgICAgICAgLy8gV2UgaGF2ZSBudW1iZXJTU0NoYXJhY3RlcnMgc2hhcnAtcyBjaGFy
YWN0ZXJzLCBidXQgbm9uZSBvZiB0aGUgb3RoZXIgc3BlY2lhbCBjaGFyYWN0ZXJzLgogICAgICAg
ICBuZXdJbXBsID0gY3JlYXRlVW5pbml0aWFsaXplZChtX2xlbmd0aCArIG51bWJlclNoYXJwU0No
YXJhY3RlcnMsIGRhdGE4KTsKQEAgLTUxMiw3ICs1MTIsNyBAQCBSZWY8U3RyaW5nSW1wbD4gU3Ry
aW5nSW1wbDo6Y29udmVydFRvVXBwZXJjYXNlV2l0aG91dExvY2FsZSgpCiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KIAotICAgICAgICByZXR1cm4gbmV3SW1wbC5yZWxlYXNlTm9uTnVsbCgpOwor
ICAgICAgICByZXR1cm4gbmV3SW1wbDsKICAgICB9CiAKIHVwY29udmVydDoKQEAgLTUyMCw3ICs1
MjAsNyBAQCB1cGNvbnZlcnQ6CiAgICAgY29uc3QgVUNoYXIqIHNvdXJjZTE2ID0gdXBjb252ZXJ0
ZWRDaGFyYWN0ZXJzOwogCiAgICAgVUNoYXIqIGRhdGExNjsKLSAgICBSZWZQdHI8U3RyaW5nSW1w
bD4gbmV3SW1wbCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQobV9sZW5ndGgsIGRhdGExNik7CisgICAg
YXV0byBuZXdJbXBsID0gY3JlYXRlVW5pbml0aWFsaXplZChtX2xlbmd0aCwgZGF0YTE2KTsKICAg
ICAKICAgICAvLyBEbyBhIGZhc3RlciBsb29wIGZvciB0aGUgY2FzZSB3aGVyZSBhbGwgdGhlIGNo
YXJhY3RlcnMgYXJlIEFTQ0lJLgogICAgIHVuc2lnbmVkIG9yZWQgPSAwOwpAQCAtNTMwLDE5ICs1
MzAsMTkgQEAgdXBjb252ZXJ0OgogICAgICAgICBkYXRhMTZbaV0gPSB0b0FTQ0lJVXBwZXIoYyk7
CiAgICAgfQogICAgIGlmICghKG9yZWQgJiB+MHg3RikpCi0gICAgICAgIHJldHVybiBuZXdJbXBs
LnJlbGVhc2VOb25OdWxsKCk7CisgICAgICAgIHJldHVybiBuZXdJbXBsOwogCiAgICAgLy8gRG8g
YSBzbG93ZXIgaW1wbGVtZW50YXRpb24gZm9yIGNhc2VzIHRoYXQgaW5jbHVkZSBub24tQVNDSUkg
Y2hhcmFjdGVycy4KICAgICBVRXJyb3JDb2RlIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKICAgICBp
bnQzMl90IHJlYWxMZW5ndGggPSB1X3N0clRvVXBwZXIoZGF0YTE2LCBsZW5ndGgsIHNvdXJjZTE2
LCBtX2xlbmd0aCwgIiIsICZzdGF0dXMpOwogICAgIGlmIChVX1NVQ0NFU1Moc3RhdHVzKSAmJiBy
ZWFsTGVuZ3RoID09IGxlbmd0aCkKLSAgICAgICAgcmV0dXJuIG5ld0ltcGwucmVsZWFzZU5vbk51
bGwoKTsKKyAgICAgICAgcmV0dXJuIG5ld0ltcGw7CiAgICAgbmV3SW1wbCA9IGNyZWF0ZVVuaW5p
dGlhbGl6ZWQocmVhbExlbmd0aCwgZGF0YTE2KTsKICAgICBzdGF0dXMgPSBVX1pFUk9fRVJST1I7
CiAgICAgdV9zdHJUb1VwcGVyKGRhdGExNiwgcmVhbExlbmd0aCwgc291cmNlMTYsIG1fbGVuZ3Ro
LCAiIiwgJnN0YXR1cyk7CiAgICAgaWYgKFVfRkFJTFVSRShzdGF0dXMpKQogICAgICAgICByZXR1
cm4gKnRoaXM7Ci0gICAgcmV0dXJuIG5ld0ltcGwucmVsZWFzZU5vbk51bGwoKTsKKyAgICByZXR1
cm4gbmV3SW1wbDsKIH0KIAogc3RhdGljIGlubGluZSBib29sIG5lZWRzVHVya2lzaENhc2luZ1J1
bGVzKGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxlSWRlbnRpZmllcikKQEAgLTU3OCwxNyArNTc4
LDE3IEBAIFJlZjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpjb252ZXJ0VG9Mb3dlcmNhc2VXaXRo
TG9jYWxlKGNvbnN0IEF0b21pY1N0cmluZyYgbG9jCiAgICAgYXV0byB1cGNvbnZlcnRlZENoYXJh
Y3RlcnMgPSBTdHJpbmdWaWV3KCp0aGlzKS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKICAgICBj
b25zdCBVQ2hhciogc291cmNlMTYgPSB1cGNvbnZlcnRlZENoYXJhY3RlcnM7CiAgICAgVUNoYXIq
IGRhdGExNjsKLSAgICBSZWZQdHI8U3RyaW5nSW1wbD4gbmV3U3RyaW5nID0gY3JlYXRlVW5pbml0
aWFsaXplZChsZW5ndGgsIGRhdGExNik7CisgICAgYXV0byBuZXdTdHJpbmcgPSBjcmVhdGVVbmlu
aXRpYWxpemVkKGxlbmd0aCwgZGF0YTE2KTsKICAgICBVRXJyb3JDb2RlIHN0YXR1cyA9IFVfWkVS
T19FUlJPUjsKICAgICBpbnQgcmVhbExlbmd0aCA9IHVfc3RyVG9Mb3dlcihkYXRhMTYsIGxlbmd0
aCwgc291cmNlMTYsIGxlbmd0aCwgInRyIiwgJnN0YXR1cyk7CiAgICAgaWYgKFVfU1VDQ0VTUyhz
dGF0dXMpICYmIHJlYWxMZW5ndGggPT0gbGVuZ3RoKQotICAgICAgICByZXR1cm4gbmV3U3RyaW5n
LnJlbGVhc2VOb25OdWxsKCk7CisgICAgICAgIHJldHVybiBuZXdTdHJpbmc7CiAgICAgbmV3U3Ry
aW5nID0gY3JlYXRlVW5pbml0aWFsaXplZChyZWFsTGVuZ3RoLCBkYXRhMTYpOwogICAgIHN0YXR1
cyA9IFVfWkVST19FUlJPUjsKICAgICB1X3N0clRvTG93ZXIoZGF0YTE2LCByZWFsTGVuZ3RoLCBz
b3VyY2UxNiwgbGVuZ3RoLCAidHIiLCAmc3RhdHVzKTsKICAgICBpZiAoVV9GQUlMVVJFKHN0YXR1
cykpCiAgICAgICAgIHJldHVybiAqdGhpczsKLSAgICByZXR1cm4gbmV3U3RyaW5nLnJlbGVhc2VO
b25OdWxsKCk7CisgICAgcmV0dXJuIG5ld1N0cmluZzsKIH0KIAogUmVmPFN0cmluZ0ltcGw+IFN0
cmluZ0ltcGw6OmNvbnZlcnRUb1VwcGVyY2FzZVdpdGhMb2NhbGUoY29uc3QgQXRvbWljU3RyaW5n
JiBsb2NhbGVJZGVudGlmaWVyKQpAQCAtNjA5LDE3ICs2MDksMTcgQEAgUmVmPFN0cmluZ0ltcGw+
IFN0cmluZ0ltcGw6OmNvbnZlcnRUb1VwcGVyY2FzZVdpdGhMb2NhbGUoY29uc3QgQXRvbWljU3Ry
aW5nJiBsb2MKICAgICBhdXRvIHVwY29udmVydGVkQ2hhcmFjdGVycyA9IFN0cmluZ1ZpZXcoKnRo
aXMpLnVwY29udmVydGVkQ2hhcmFjdGVycygpOwogICAgIGNvbnN0IFVDaGFyKiBzb3VyY2UxNiA9
IHVwY29udmVydGVkQ2hhcmFjdGVyczsKICAgICBVQ2hhciogZGF0YTE2OwotICAgIFJlZlB0cjxT
dHJpbmdJbXBsPiBuZXdTdHJpbmcgPSBjcmVhdGVVbmluaXRpYWxpemVkKGxlbmd0aCwgZGF0YTE2
KTsKKyAgICBhdXRvIG5ld1N0cmluZyA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBkYXRh
MTYpOwogICAgIFVFcnJvckNvZGUgc3RhdHVzID0gVV9aRVJPX0VSUk9SOwogICAgIGludCByZWFs
TGVuZ3RoID0gdV9zdHJUb1VwcGVyKGRhdGExNiwgbGVuZ3RoLCBzb3VyY2UxNiwgbGVuZ3RoLCAi
dHIiLCAmc3RhdHVzKTsKICAgICBpZiAoVV9TVUNDRVNTKHN0YXR1cykgJiYgcmVhbExlbmd0aCA9
PSBsZW5ndGgpCi0gICAgICAgIHJldHVybiBuZXdTdHJpbmcucmVsZWFzZU5vbk51bGwoKTsKKyAg
ICAgICAgcmV0dXJuIG5ld1N0cmluZzsKICAgICBuZXdTdHJpbmcgPSBjcmVhdGVVbmluaXRpYWxp
emVkKHJlYWxMZW5ndGgsIGRhdGExNik7CiAgICAgc3RhdHVzID0gVV9aRVJPX0VSUk9SOwogICAg
IHVfc3RyVG9VcHBlcihkYXRhMTYsIHJlYWxMZW5ndGgsIHNvdXJjZTE2LCBsZW5ndGgsICJ0ciIs
ICZzdGF0dXMpOwogICAgIGlmIChVX0ZBSUxVUkUoc3RhdHVzKSkKICAgICAgICAgcmV0dXJuICp0
aGlzOwotICAgIHJldHVybiBuZXdTdHJpbmcucmVsZWFzZU5vbk51bGwoKTsKKyAgICByZXR1cm4g
bmV3U3RyaW5nOwogfQogCiBSZWY8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6Zm9sZENhc2UoKQpA
QCAtNzIxLDcgKzcyMSw3IEBAIEFMV0FZU19JTkxJTkUgUmVmPFN0cmluZ0ltcGw+IFN0cmluZ0lt
cGw6OmNvbnZlcnRBU0NJSUNhc2UoU3RyaW5nSW1wbCYgaW1wbCwgY29uCiAKIFNsb3dQYXRoOgog
ICAgIENoYXJhY3RlclR5cGUqIG5ld0RhdGE7Ci0gICAgUmVmPFN0cmluZ0ltcGw+IG5ld0ltcGwg
PSBjcmVhdGVVbmluaXRpYWxpemVkSW50ZXJuYWxOb25FbXB0eShsZW5ndGgsIG5ld0RhdGEpOwor
ICAgIGF1dG8gbmV3SW1wbCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWRJbnRlcm5hbE5vbkVtcHR5KGxl
bmd0aCwgbmV3RGF0YSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZhaWxpbmdJbmRl
eDsgKytpKQogICAgICAgICBuZXdEYXRhW2ldID0gZGF0YVtpXTsKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBmYWlsaW5nSW5kZXg7IGkgPCBsZW5ndGg7ICsraSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
VEYvd3RmL3RleHQvU3RyaW5nSW1wbC5oIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBs
LmgKaW5kZXggNGE2OWRkYzk0Y2ViOTExM2JjNGM2ZTVjYjAyMzdkOTBkNDhiN2NhNS4uNTM0ODRm
ZTU0OTJkMDQ2YzM3ZmYyYTY5MTFiYTVjYWM2YzRiNDhlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dU
Ri93dGYvdGV4dC9TdHJpbmdJbXBsLmgKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJ
bXBsLmgKQEAgLTI2NSw3ICsyNjUsNyBAQCBwcml2YXRlOgogICAgIH0KIAogICAgIC8vIFVzZWQg
dG8gY3JlYXRlIG5ldyBzdHJpbmdzIHRoYXQgYXJlIGEgc3Vic3RyaW5nIG9mIGFuIGV4aXN0aW5n
IDgtYml0IFN0cmluZ0ltcGwgKEJ1ZmZlclN1YnN0cmluZykKLSAgICBTdHJpbmdJbXBsKGNvbnN0
IExDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIFBhc3NSZWZQdHI8U3RyaW5nSW1w
bD4gYmFzZSkKKyAgICBTdHJpbmdJbXBsKGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25l
ZCBsZW5ndGgsIFJlZjxTdHJpbmdJbXBsPiYmIGJhc2UpCiAgICAgICAgIDogbV9yZWZDb3VudChz
X3JlZkNvdW50SW5jcmVtZW50KQogICAgICAgICAsIG1fbGVuZ3RoKGxlbmd0aCkKICAgICAgICAg
LCBtX2RhdGE4KGNoYXJhY3RlcnMpCkBAIC0yNzYsMTMgKzI3NiwxMyBAQCBwcml2YXRlOgogICAg
ICAgICBBU1NFUlQobV9sZW5ndGgpOwogICAgICAgICBBU1NFUlQoYmFzZS0+YnVmZmVyT3duZXJz
aGlwKCkgIT0gQnVmZmVyU3Vic3RyaW5nKTsKIAotICAgICAgICBzdWJzdHJpbmdCdWZmZXIoKSA9
IGJhc2UubGVha1JlZigpOworICAgICAgICBzdWJzdHJpbmdCdWZmZXIoKSA9ICZiYXNlLmxlYWtS
ZWYoKTsKIAogICAgICAgICBTVFJJTkdfU1RBVFNfQUREXzhCSVRfU1RSSU5HMihtX2xlbmd0aCwg
dHJ1ZSk7CiAgICAgfQogCiAgICAgLy8gVXNlZCB0byBjcmVhdGUgbmV3IHN0cmluZ3MgdGhhdCBh
cmUgYSBzdWJzdHJpbmcgb2YgYW4gZXhpc3RpbmcgMTYtYml0IFN0cmluZ0ltcGwgKEJ1ZmZlclN1
YnN0cmluZykKLSAgICBTdHJpbmdJbXBsKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25l
ZCBsZW5ndGgsIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gYmFzZSkKKyAgICBTdHJpbmdJbXBsKGNv
bnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIFJlZjxTdHJpbmdJbXBsPiYm
IGJhc2UpCiAgICAgICAgIDogbV9yZWZDb3VudChzX3JlZkNvdW50SW5jcmVtZW50KQogICAgICAg
ICAsIG1fbGVuZ3RoKGxlbmd0aCkKICAgICAgICAgLCBtX2RhdGExNihjaGFyYWN0ZXJzKQpAQCAt
MjkzLDE0ICsyOTMsMTQgQEAgcHJpdmF0ZToKICAgICAgICAgQVNTRVJUKG1fbGVuZ3RoKTsKICAg
ICAgICAgQVNTRVJUKGJhc2UtPmJ1ZmZlck93bmVyc2hpcCgpICE9IEJ1ZmZlclN1YnN0cmluZyk7
CiAKLSAgICAgICAgc3Vic3RyaW5nQnVmZmVyKCkgPSBiYXNlLmxlYWtSZWYoKTsKKyAgICAgICAg
c3Vic3RyaW5nQnVmZmVyKCkgPSAmYmFzZS5sZWFrUmVmKCk7CiAKICAgICAgICAgU1RSSU5HX1NU
QVRTX0FERF8xNkJJVF9TVFJJTkcyKG1fbGVuZ3RoLCB0cnVlKTsKICAgICB9CiAKICAgICBlbnVt
IENyZWF0ZVN5bWJvbFRhZyB7IENyZWF0ZVN5bWJvbCB9OwogICAgIC8vIFVzZWQgdG8gY3JlYXRl
IG5ldyBzeW1ib2wgc3RyaW5ncyB0aGF0IGhvbGRzIGV4aXN0aW5nIDgtYml0IFtbRGVzY3JpcHRp
b25dXSBzdHJpbmcgYXMgYSBzdWJzdHJpbmcgYnVmZmVyIChCdWZmZXJTdWJzdHJpbmcpLgotICAg
IFN0cmluZ0ltcGwoQ3JlYXRlU3ltYm9sVGFnLCBjb25zdCBMQ2hhciogY2hhcmFjdGVycywgdW5z
aWduZWQgbGVuZ3RoLCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGJhc2UpCisgICAgU3RyaW5nSW1w
bChDcmVhdGVTeW1ib2xUYWcsIGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5n
dGgsIFJlZjxTdHJpbmdJbXBsPiYmIGJhc2UpCiAgICAgICAgIDogbV9yZWZDb3VudChzX3JlZkNv
dW50SW5jcmVtZW50KQogICAgICAgICAsIG1fbGVuZ3RoKGxlbmd0aCkKICAgICAgICAgLCBtX2Rh
dGE4KGNoYXJhY3RlcnMpCkBAIC0zMTAsNyArMzEwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgQVNT
RVJUKG1fZGF0YTgpOwogICAgICAgICBBU1NFUlQoYmFzZS0+YnVmZmVyT3duZXJzaGlwKCkgIT0g
QnVmZmVyU3Vic3RyaW5nKTsKIAotICAgICAgICBzdWJzdHJpbmdCdWZmZXIoKSA9IGJhc2UubGVh
a1JlZigpOworICAgICAgICBzdWJzdHJpbmdCdWZmZXIoKSA9ICZiYXNlLmxlYWtSZWYoKTsKICAg
ICAgICAgc3ltYm9sUmVnaXN0cnkoKSA9IG51bGxwdHI7CiAgICAgICAgIGhhc2hGb3JTeW1ib2wo
KSA9IG5leHRIYXNoRm9yU3ltYm9sKCk7CiAKQEAgLTMxOCw3ICszMTgsNyBAQCBwcml2YXRlOgog
ICAgIH0KIAogICAgIC8vIFVzZWQgdG8gY3JlYXRlIG5ldyBzeW1ib2wgc3RyaW5ncyB0aGF0IGhv
bGRzIGV4aXN0aW5nIDE2LWJpdCBbW0Rlc2NyaXB0aW9uXV0gc3RyaW5nIGFzIGEgc3Vic3RyaW5n
IGJ1ZmZlciAoQnVmZmVyU3Vic3RyaW5nKS4KLSAgICBTdHJpbmdJbXBsKENyZWF0ZVN5bWJvbFRh
ZywgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgUGFzc1JlZlB0cjxT
dHJpbmdJbXBsPiBiYXNlKQorICAgIFN0cmluZ0ltcGwoQ3JlYXRlU3ltYm9sVGFnLCBjb25zdCBV
Q2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoLCBSZWY8U3RyaW5nSW1wbD4mJiBiYXNl
KQogICAgICAgICA6IG1fcmVmQ291bnQoc19yZWZDb3VudEluY3JlbWVudCkKICAgICAgICAgLCBt
X2xlbmd0aChsZW5ndGgpCiAgICAgICAgICwgbV9kYXRhMTYoY2hhcmFjdGVycykKQEAgLTMyOCw3
ICszMjgsNyBAQCBwcml2YXRlOgogICAgICAgICBBU1NFUlQobV9kYXRhMTYpOwogICAgICAgICBB
U1NFUlQoYmFzZS0+YnVmZmVyT3duZXJzaGlwKCkgIT0gQnVmZmVyU3Vic3RyaW5nKTsKIAotICAg
ICAgICBzdWJzdHJpbmdCdWZmZXIoKSA9IGJhc2UubGVha1JlZigpOworICAgICAgICBzdWJzdHJp
bmdCdWZmZXIoKSA9ICZiYXNlLmxlYWtSZWYoKTsKICAgICAgICAgc3ltYm9sUmVnaXN0cnkoKSA9
IG51bGxwdHI7CiAgICAgICAgIGhhc2hGb3JTeW1ib2woKSA9IG5leHRIYXNoRm9yU3ltYm9sKCk7
CiAKQEAgLTM1MiwyMSArMzUyLDIwIEBAIHB1YmxpYzoKICAgICBXVEZfRVhQT1JUX1NUUklOR19B
UEkgc3RhdGljIFJlZjxTdHJpbmdJbXBsPiBjcmVhdGUoY29uc3QgTENoYXIqKTsKICAgICBBTFdB
WVNfSU5MSU5FIHN0YXRpYyBSZWY8U3RyaW5nSW1wbD4gY3JlYXRlKGNvbnN0IGNoYXIqIHMpIHsg
cmV0dXJuIGNyZWF0ZShyZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4ocykpOyB9CiAKLSAg
ICBzdGF0aWMgQUxXQVlTX0lOTElORSBSZWY8U3RyaW5nSW1wbD4gY3JlYXRlU3Vic3RyaW5nU2hh
cmluZ0ltcGwoUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiByZXAsIHVuc2lnbmVkIG9mZnNldCwgdW5z
aWduZWQgbGVuZ3RoKQorICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5FIFJlZjxTdHJpbmdJbXBsPiBj
cmVhdGVTdWJzdHJpbmdTaGFyaW5nSW1wbChTdHJpbmdJbXBsJiByZXAsIHVuc2lnbmVkIG9mZnNl
dCwgdW5zaWduZWQgbGVuZ3RoKQogICAgIHsKLSAgICAgICAgQVNTRVJUKHJlcCk7Ci0gICAgICAg
IEFTU0VSVChsZW5ndGggPD0gcmVwLT5sZW5ndGgoKSk7CisgICAgICAgIEFTU0VSVChsZW5ndGgg
PD0gcmVwLmxlbmd0aCgpKTsKIAogICAgICAgICBpZiAoIWxlbmd0aCkKICAgICAgICAgICAgIHJl
dHVybiAqZW1wdHkoKTsKIAotICAgICAgICBTdHJpbmdJbXBsKiBvd25lclJlcCA9IChyZXAtPmJ1
ZmZlck93bmVyc2hpcCgpID09IEJ1ZmZlclN1YnN0cmluZykgPyByZXAtPnN1YnN0cmluZ0J1ZmZl
cigpIDogcmVwLmdldCgpOworICAgICAgICBhdXRvKiBvd25lclJlcCA9ICgocmVwLmJ1ZmZlck93
bmVyc2hpcCgpID09IEJ1ZmZlclN1YnN0cmluZykgPyByZXAuc3Vic3RyaW5nQnVmZmVyKCkgOiAm
cmVwKTsKIAogICAgICAgICAvLyBXZSBhbGxvY2F0ZSBhIGJ1ZmZlciB0aGF0IGNvbnRhaW5zIGJv
dGggdGhlIFN0cmluZ0ltcGwgc3RydWN0IGFzIHdlbGwgYXMgdGhlIHBvaW50ZXIgdG8gdGhlIG93
bmVyIHN0cmluZy4KLSAgICAgICAgU3RyaW5nSW1wbCogc3RyaW5nSW1wbCA9IHN0YXRpY19jYXN0
PFN0cmluZ0ltcGwqPihmYXN0TWFsbG9jKGFsbG9jYXRpb25TaXplPFN0cmluZ0ltcGwqPigxKSkp
OwotICAgICAgICBpZiAocmVwLT5pczhCaXQoKSkKLSAgICAgICAgICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IChOb3ROdWxsLCBzdHJpbmdJbXBsKSBTdHJpbmdJbXBsKHJlcC0+bV9kYXRhOCArIG9m
ZnNldCwgbGVuZ3RoLCBvd25lclJlcCkpOwotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyAo
Tm90TnVsbCwgc3RyaW5nSW1wbCkgU3RyaW5nSW1wbChyZXAtPm1fZGF0YTE2ICsgb2Zmc2V0LCBs
ZW5ndGgsIG93bmVyUmVwKSk7CisgICAgICAgIGF1dG8qIHN0cmluZ0ltcGwgPSBzdGF0aWNfY2Fz
dDxTdHJpbmdJbXBsKj4oZmFzdE1hbGxvYyhhbGxvY2F0aW9uU2l6ZTxTdHJpbmdJbXBsKj4oMSkp
KTsKKyAgICAgICAgaWYgKHJlcC5pczhCaXQoKSkKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IChOb3ROdWxsLCBzdHJpbmdJbXBsKSBTdHJpbmdJbXBsKHJlcC5tX2RhdGE4ICsgb2Zm
c2V0LCBsZW5ndGgsICpvd25lclJlcCkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyAo
Tm90TnVsbCwgc3RyaW5nSW1wbCkgU3RyaW5nSW1wbChyZXAubV9kYXRhMTYgKyBvZmZzZXQsIGxl
bmd0aCwgKm93bmVyUmVwKSk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dW5zaWduZWQgY2hhcmFj
dGVyc0NvdW50PgpAQCAtMzg3LDIxICszODYsMjEgQEAgcHVibGljOgogCiAgICAgV1RGX0VYUE9S
VF9TVFJJTkdfQVBJIHN0YXRpYyBSZWY8U3RyaW5nSW1wbD4gY3JlYXRlVW5pbml0aWFsaXplZCh1
bnNpZ25lZCBsZW5ndGgsIExDaGFyKiYgZGF0YSk7CiAgICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJ
IHN0YXRpYyBSZWY8U3RyaW5nSW1wbD4gY3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5n
dGgsIFVDaGFyKiYgZGF0YSk7Ci0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHN0YXRpYyBBTFdB
WVNfSU5MSU5FIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gdHJ5Q3JlYXRlVW5pbml0aWFsaXplZCh1
bnNpZ25lZCBsZW5ndGgsIFQqJiBvdXRwdXQpCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHN0
YXRpYyBBTFdBWVNfSU5MSU5FIFJlZlB0cjxTdHJpbmdJbXBsPiB0cnlDcmVhdGVVbmluaXRpYWxp
emVkKHVuc2lnbmVkIGxlbmd0aCwgVComIG91dHB1dCkKICAgICB7CiAgICAgICAgIGlmICghbGVu
Z3RoKSB7Ci0gICAgICAgICAgICBvdXRwdXQgPSAwOworICAgICAgICAgICAgb3V0cHV0ID0gbnVs
bHB0cjsKICAgICAgICAgICAgIHJldHVybiBlbXB0eSgpOwogICAgICAgICB9CiAKICAgICAgICAg
aWYgKGxlbmd0aCA+ICgoc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpIC0gc2l6
ZW9mKFN0cmluZ0ltcGwpKSAvIHNpemVvZihUKSkpIHsKLSAgICAgICAgICAgIG91dHB1dCA9IDA7
Ci0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIG91dHB1dCA9IG51bGxwdHI7Cisg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgfQogICAgICAgICBTdHJpbmdJbXBs
KiByZXN1bHRJbXBsOwogICAgICAgICBpZiAoIXRyeUZhc3RNYWxsb2MoYWxsb2NhdGlvblNpemU8
VD4obGVuZ3RoKSkuZ2V0VmFsdWUocmVzdWx0SW1wbCkpIHsKLSAgICAgICAgICAgIG91dHB1dCA9
IDA7Ci0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIG91dHB1dCA9IG51bGxwdHI7
CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgfQogICAgICAgICBvdXRwdXQg
PSByZXN1bHRJbXBsLT50YWlsUG9pbnRlcjxUPigpOwogCkBAIC00MDksMTMgKzQwOCwxMyBAQCBw
dWJsaWM6CiAgICAgfQogCiAgICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIHN0YXRpYyBSZWY8U3lt
Ym9sSW1wbD4gY3JlYXRlTnVsbFN5bWJvbCgpOwotICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBz
dGF0aWMgUmVmPFN5bWJvbEltcGw+IGNyZWF0ZVN5bWJvbChQYXNzUmVmUHRyPFN0cmluZ0ltcGw+
IHJlcCk7CisgICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIHN0YXRpYyBSZWY8U3ltYm9sSW1wbD4g
Y3JlYXRlU3ltYm9sKFN0cmluZ0ltcGwmIHJlcCk7CiAKLSAgICAvLyBSZWFsbG9jYXRlIHRoZSBT
dHJpbmdJbXBsLiBUaGUgb3JpZ2luYWxTdHJpbmcgbXVzdCBiZSBvbmx5IG93bmVkIGJ5IHRoZSBQ
YXNzUmVmUHRyLAorICAgIC8vIFJlYWxsb2NhdGUgdGhlIFN0cmluZ0ltcGwuIFRoZSBvcmlnaW5h
bFN0cmluZyBtdXN0IGJlIG9ubHkgb3duZWQgYnkgdGhlIFJlZiwKICAgICAvLyBhbmQgdGhlIGJ1
ZmZlciBvd25lcnNoaXAgbXVzdCBiZSBCdWZmZXJJbnRlcm5hbC4gSnVzdCBsaWtlIHRoZSBpbnB1
dCBwb2ludGVyIG9mIHJlYWxsb2MoKSwKICAgICAvLyB0aGUgb3JpZ2luYWxTdHJpbmcgY2FuJ3Qg
YmUgdXNlZCBhZnRlciB0aGlzIGZ1bmN0aW9uLgotICAgIHN0YXRpYyBSZWY8U3RyaW5nSW1wbD4g
cmVhbGxvY2F0ZShQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IG9yaWdpbmFsU3RyaW5nLCB1bnNpZ25l
ZCBsZW5ndGgsIExDaGFyKiYgZGF0YSk7Ci0gICAgc3RhdGljIFJlZjxTdHJpbmdJbXBsPiByZWFs
bG9jYXRlKFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gb3JpZ2luYWxTdHJpbmcsIHVuc2lnbmVkIGxl
bmd0aCwgVUNoYXIqJiBkYXRhKTsKKyAgICBzdGF0aWMgUmVmPFN0cmluZ0ltcGw+IHJlYWxsb2Nh
dGUoUmVmPFN0cmluZ0ltcGw+JiYgb3JpZ2luYWxTdHJpbmcsIHVuc2lnbmVkIGxlbmd0aCwgTENo
YXIqJiBkYXRhKTsKKyAgICBzdGF0aWMgUmVmPFN0cmluZ0ltcGw+IHJlYWxsb2NhdGUoUmVmPFN0
cmluZ0ltcGw+JiYgb3JpZ2luYWxTdHJpbmcsIHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIqJiBkYXRh
KTsKIAogICAgIHN0YXRpYyB1bnNpZ25lZCBmbGFnc09mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9P
RkZTRVRPRihTdHJpbmdJbXBsLCBtX2hhc2hBbmRGbGFncyk7IH0KICAgICBzdGF0aWMgdW5zaWdu
ZWQgZmxhZ0lzOEJpdCgpIHsgcmV0dXJuIHNfaGFzaEZsYWc4Qml0QnVmZmVyOyB9CkBAIC03NjUs
NyArNzY0LDcgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQoYnVmZmVyT3duZXJzaGlwKCkgPT0g
QnVmZmVyU3Vic3RyaW5nKTsKICAgICAgICAgQVNTRVJUKHN1YnN0cmluZ0J1ZmZlcigpKTsKICAg
ICAgICAgQVNTRVJUKCFzdWJzdHJpbmdCdWZmZXIoKS0+aXNTeW1ib2woKSk7Ci0gICAgICAgIHJl
dHVybiBjcmVhdGVTdWJzdHJpbmdTaGFyaW5nSW1wbCh0aGlzLCAwLCBsZW5ndGgoKSk7CisgICAg
ICAgIHJldHVybiBjcmVhdGVTdWJzdHJpbmdTaGFyaW5nSW1wbCgqdGhpcywgMCwgbGVuZ3RoKCkp
OwogICAgIH0KIAogICAgIFN5bWJvbFJlZ2lzdHJ5KiBjb25zdCYgc3ltYm9sUmVnaXN0cnkoKSBj
b25zdApAQCAtODYwLDcgKzg1OSw3IEBAIHByaXZhdGU6CiAgICAgdGVtcGxhdGUgPHR5cGVuYW1l
IENoYXJUeXBlPiBzdGF0aWMgUmVmPFN0cmluZ0ltcGw+IGNvbnN0cnVjdEludGVybmFsKFN0cmlu
Z0ltcGwqLCB1bnNpZ25lZCk7CiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJUeXBlPiBzdGF0
aWMgUmVmPFN0cmluZ0ltcGw+IGNyZWF0ZVVuaW5pdGlhbGl6ZWRJbnRlcm5hbCh1bnNpZ25lZCwg
Q2hhclR5cGUqJik7CiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJUeXBlPiBzdGF0aWMgUmVm
PFN0cmluZ0ltcGw+IGNyZWF0ZVVuaW5pdGlhbGl6ZWRJbnRlcm5hbE5vbkVtcHR5KHVuc2lnbmVk
LCBDaGFyVHlwZSomKTsKLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhclR5cGU+IHN0YXRpYyBS
ZWY8U3RyaW5nSW1wbD4gcmVhbGxvY2F0ZUludGVybmFsKFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4s
IHVuc2lnbmVkLCBDaGFyVHlwZSomKTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhclR5cGU+
IHN0YXRpYyBSZWY8U3RyaW5nSW1wbD4gcmVhbGxvY2F0ZUludGVybmFsKFJlZjxTdHJpbmdJbXBs
PiYmLCB1bnNpZ25lZCwgQ2hhclR5cGUqJik7CiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJU
eXBlPiBzdGF0aWMgUmVmPFN0cmluZ0ltcGw+IGNyZWF0ZUludGVybmFsKGNvbnN0IENoYXJUeXBl
KiwgdW5zaWduZWQpOwogICAgIFdURl9FWFBPUlRfUFJJVkFURSBORVZFUl9JTkxJTkUgdW5zaWdu
ZWQgaGFzaFNsb3dDYXNlKCkgY29uc3Q7CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB1
bnNpZ25lZCBuZXh0SGFzaEZvclN5bWJvbCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYv
dGV4dC9TeW1ib2xSZWdpc3RyeS5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N5bWJvbFJlZ2lz
dHJ5LmNwcAppbmRleCBhYWQxMzVmM2Y2OWJhYzY2M2Q4NjdjNzY0ODRjYWRlM2QxZWM0MTViLi42
NGVhMWNhNmM1ODFlOTQwNGQ0YmE3YTljMGI2OTE5YmFmYzgyNGUyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV1RGL3d0Zi90ZXh0L1N5bWJvbFJlZ2lzdHJ5LmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90
ZXh0L1N5bWJvbFJlZ2lzdHJ5LmNwcApAQCAtNDAsNyArNDAsNyBAQCBSZWY8U3ltYm9sSW1wbD4g
U3ltYm9sUmVnaXN0cnk6OnN5bWJvbEZvcktleShjb25zdCBTdHJpbmcmIHJlcCkKICAgICBpZiAo
IWFkZFJlc3VsdC5pc05ld0VudHJ5KQogICAgICAgICByZXR1cm4gKnN0YXRpY19jYXN0PFN5bWJv
bEltcGwqPihhZGRSZXN1bHQuaXRlcmF0b3ItPmltcGwoKSk7CiAKLSAgICBSZWY8U3ltYm9sSW1w
bD4gc3ltYm9sID0gU3RyaW5nSW1wbDo6Y3JlYXRlU3ltYm9sKHJlcC5pbXBsKCkpOworICAgIGF1
dG8gc3ltYm9sID0gU3RyaW5nSW1wbDo6Y3JlYXRlU3ltYm9sKCpyZXAuaW1wbCgpKTsKICAgICBz
eW1ib2wtPnN5bWJvbFJlZ2lzdHJ5KCkgPSB0aGlzOwogICAgICphZGRSZXN1bHQuaXRlcmF0b3Ig
PSBTeW1ib2xSZWdpc3RyeUtleSgmc3ltYm9sLmdldCgpKTsKICAgICByZXR1cm4gc3ltYm9sOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcuY3BwIGIvU291cmNlL1dU
Ri93dGYvdGV4dC9XVEZTdHJpbmcuY3BwCmluZGV4IGYzMWFhYzc2YzI0ODgwNGE3M2U1ZjQwMzk3
OWQ5NGYzYjg5MGEzN2UuLmZiNjA0MDA4NDRhZWQwYWVmYTUzODJlZjc0ZTIzN2M0MWE0NjAwOWIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmNwcAorKysgYi9Tb3Vy
Y2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5jcHAKQEAgLTMzMiw3ICszMzIsNyBAQCBTdHJpbmcg
U3RyaW5nOjpzdWJzdHJpbmdTaGFyaW5nSW1wbCh1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxl
bmd0aCkgY29uc3QKIAogICAgIGlmICghb2Zmc2V0ICYmIGxlbmd0aCA9PSBzdHJpbmdMZW5ndGgp
CiAgICAgICAgIHJldHVybiAqdGhpczsKLSAgICByZXR1cm4gU3RyaW5nKFN0cmluZ0ltcGw6OmNy
ZWF0ZVN1YnN0cmluZ1NoYXJpbmdJbXBsKG1faW1wbCwgb2Zmc2V0LCBsZW5ndGgpKTsKKyAgICBy
ZXR1cm4gU3RyaW5nKFN0cmluZ0ltcGw6OmNyZWF0ZVN1YnN0cmluZ1NoYXJpbmdJbXBsKCptX2lt
cGwsIG9mZnNldCwgbGVuZ3RoKSk7CiB9CiAKIFN0cmluZyBTdHJpbmc6OmNvbnZlcnRUb0FTQ0lJ
TG93ZXJjYXNlKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3Ry
aW5nLmggYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5oCmluZGV4IGY3MWYyYzA0N2M4
YmUwN2MzMDk2YmU0OGRhNjA0MzRhMTkyZjYxOGQuLmU4MzliZGIxODNlZDQwOTRhODFhZmJkZDQ3
MWMwNTJlYzQyNjc4OGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5n
LmgKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcuaApAQCAtMTA3LDcgKzEwNyw2
IEBAIHB1YmxpYzoKICAgICAvLyBDb25zdHJ1Y3QgYSBzdHJpbmcgcmVmZXJlbmNpbmcgYW4gZXhp
c3RpbmcgU3RyaW5nSW1wbC4KICAgICBTdHJpbmcoU3RyaW5nSW1wbCYpOwogICAgIFN0cmluZyhT
dHJpbmdJbXBsKik7Ci0gICAgU3RyaW5nKFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4pOwogICAgIFN0
cmluZyhSZWY8U3RyaW5nSW1wbD4mJik7CiAgICAgU3RyaW5nKFJlZlB0cjxTdHJpbmdJbXBsPiYm
KTsKIApAQCAtNTMxLDExICs1MzAsNiBAQCBpbmxpbmUgU3RyaW5nOjpTdHJpbmcoU3RyaW5nSW1w
bCogaW1wbCkKIHsKIH0KIAotaW5saW5lIFN0cmluZzo6U3RyaW5nKFBhc3NSZWZQdHI8U3RyaW5n
SW1wbD4gaW1wbCkKLSAgICA6IG1faW1wbChpbXBsKQotewotfQotCiBpbmxpbmUgU3RyaW5nOjpT
dHJpbmcoUmVmPFN0cmluZ0ltcGw+JiYgaW1wbCkKICAgICA6IG1faW1wbChXVEZNb3ZlKGltcGwp
KQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9jZi9TdHJpbmdJbXBsQ0YuY3Bw
IGIvU291cmNlL1dURi93dGYvdGV4dC9jZi9TdHJpbmdJbXBsQ0YuY3BwCmluZGV4IDdiYWQ5YTdk
MTJkZjRiYWVhYmNmODdlMDhlZmRiNGU5ODQ2ZjhjNDcuLjUzZjQ5ODM4M2ZhYzg5Y2QwMDQxMzFj
ZmJjMDYyNDI1NjE3ODljZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvY2YvU3Ry
aW5nSW1wbENGLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L2NmL1N0cmluZ0ltcGxDRi5j
cHAKQEAgLTI1LDcgKzI1LDYgQEAKIAogI2luY2x1ZGUgPENvcmVGb3VuZGF0aW9uL0NvcmVGb3Vu
ZGF0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KLSNpbmNsdWRlIDx3dGYvUGFz
c1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KICNpbmNsdWRlIDx3dGYvVGhy
ZWFkaW5nLmg+CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVW
YWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuY3BwCmluZGV4
IDY4MjgwMGY3MmY0NmY4ZDRmODkxM2YzYjA2YjkxNTRjYmFjMDA1ZWIuLmQzNDUxODcyNzNhOGM0
OTk2MDk1ZDZiMzg5OTM5NjFiOGY3N2Q4YWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NQcmltaXRpdmVWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1p
dGl2ZVZhbHVlLmNwcApAQCAtMTA0NCw3ICsxMDQ0LDcgQEAgTkVWRVJfSU5MSU5FIFJlZjxTdHJp
bmdJbXBsPiBDU1NQcmltaXRpdmVWYWx1ZTo6Zm9ybWF0TnVtYmVyVmFsdWUoY29uc3QgY2hhciog
c3UKIAogICAgIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCA9IGRlY2ltYWwuYnVmZmVyTGVuZ3RoRm9y
U3RyaW5nRGVjaW1hbCgpICsgc3VmZml4TGVuZ3RoOwogICAgIExDaGFyKiBidWZmZXI7Ci0gICAg
UmVmPFN0cmluZ0ltcGw+IHN0cmluZyA9IFN0cmluZ0ltcGw6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQo
YnVmZmVyTGVuZ3RoLCBidWZmZXIpOworICAgIGF1dG8gc3RyaW5nID0gU3RyaW5nSW1wbDo6Y3Jl
YXRlVW5pbml0aWFsaXplZChidWZmZXJMZW5ndGgsIGJ1ZmZlcik7CiAKICAgICB1bnNpZ25lZCBs
ZW5ndGggPSBkZWNpbWFsLnRvU3RyaW5nRGVjaW1hbChidWZmZXIsIGJ1ZmZlckxlbmd0aCk7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vRG9jdW1lbnQuY3BwCmluZGV4IDRlZTU0YTcwOTQwZDE2YzM0MjJmNjhmYmIzN2Rh
ZDQyYzk5ZjIxMmYuLmNkNDk2Y2MwNjFjMmNmYjkwYmY2NzMxMjNiNjE4YTFjZTdjYzNkN2QgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvZG9tL0RvY3VtZW50LmNwcApAQCAtNTUxMCw3ICs1NTEwLDcgQEAgdm9pZCBEb2N1bWVu
dDo6d2luZG93U2NyZWVuRGlkQ2hhbmdlKFBsYXRmb3JtRGlzcGxheUlEIGRpc3BsYXlJRCkKIFN0
cmluZyBEb2N1bWVudDo6ZGlzcGxheVN0cmluZ01vZGlmaWVkQnlFbmNvZGluZyhjb25zdCBTdHJp
bmcmIHN0cikgY29uc3QKIHsKICAgICBpZiAobV9kZWNvZGVyKQotICAgICAgICByZXR1cm4gbV9k
ZWNvZGVyLT5lbmNvZGluZygpLmRpc3BsYXlTdHJpbmcoc3RyLmltcGwoKSk7CisgICAgICAgIHJl
dHVybiBtX2RlY29kZXItPmVuY29kaW5nKCkuZGlzcGxheVN0cmluZyhzdHIuaW1wbCgpKS5nZXQo
KTsKICAgICByZXR1cm4gc3RyOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTDJSZW5kZXJpbmdDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuY3BwCmluZGV4IDJkNzExYWM1YTFmYWJkYTI2
NTg0ODkxMDBlMzU1YjM4NzE5ZjdiMDkuLjdjMDkxOTdjMzVmN2NjYTMwZWI4ZTc3NzVhNWU1YTRj
ZDY5ZWE0ZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMlJl
bmRlcmluZ0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
MlJlbmRlcmluZ0NvbnRleHQuY3BwCkBAIC0xODM2LDcgKzE4MzYsNyBAQCBXZWJHTEdldEluZm8g
V2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6Z2V0UGFyYW1ldGVyKEdDM0RlbnVtIHBuYW1lLCBFeGNl
cHRpb25Db2RlJgogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX1dSSVRFTUFTSzoK
ICAgICAgICAgcmV0dXJuIGdldEJvb2xlYW5BcnJheVBhcmFtZXRlcihwbmFtZSk7CiAgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6Q09NUFJFU1NFRF9URVhUVVJFX0ZPUk1BVFM6Ci0gICAgICAg
IHJldHVybiBXZWJHTEdldEluZm8oVWludDMyQXJyYXk6OmNyZWF0ZShtX2NvbXByZXNzZWRUZXh0
dXJlRm9ybWF0cy5kYXRhKCksIG1fY29tcHJlc3NlZFRleHR1cmVGb3JtYXRzLnNpemUoKSkucmVs
ZWFzZSgpKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhQYXNzUmVmUHRyPFVpbnQzMkFy
cmF5PihVaW50MzJBcnJheTo6Y3JlYXRlKG1fY29tcHJlc3NlZFRleHR1cmVGb3JtYXRzLmRhdGEo
KSwgbV9jb21wcmVzc2VkVGV4dHVyZUZvcm1hdHMuc2l6ZSgpKSkpOwogICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkNVTExfRkFDRToKICAgICAgICAgcmV0dXJuIGdldEJvb2xlYW5QYXJhbWV0
ZXIocG5hbWUpOwogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNVTExfRkFDRV9NT0RFOgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250
ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4
dC5jcHAKaW5kZXggZTk1NjcxMzAyMDJkNjY0ODVlNTZjZDkxNzYxMjk1ZDk1ZDBmYTcxMi4uMmE1
YWFiMWUyMWQxM2UwNzgwMDc3ZjU2YzhmMTUxODNkNTg4OTkwNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCkBAIC05NTUs
NyArOTU1LDcgQEAgV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0UGFyYW1l
dGVyKEdDM0RlbnVtIHBuYW1lLCBFeGNlcHRpb25Db2RlJgogICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkNPTE9SX1dSSVRFTUFTSzoKICAgICAgICAgcmV0dXJuIGdldEJvb2xlYW5BcnJheVBh
cmFtZXRlcihwbmFtZSk7CiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q09NUFJFU1NFRF9U
RVhUVVJFX0ZPUk1BVFM6Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oVWludDMyQXJyYXk6
OmNyZWF0ZShtX2NvbXByZXNzZWRUZXh0dXJlRm9ybWF0cy5kYXRhKCksIG1fY29tcHJlc3NlZFRl
eHR1cmVGb3JtYXRzLnNpemUoKSkucmVsZWFzZSgpKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0
SW5mbyhQYXNzUmVmUHRyPFVpbnQzMkFycmF5PihVaW50MzJBcnJheTo6Y3JlYXRlKG1fY29tcHJl
c3NlZFRleHR1cmVGb3JtYXRzLmRhdGEoKSwgbV9jb21wcmVzc2VkVGV4dHVyZUZvcm1hdHMuc2l6
ZSgpKSkpOwogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNVTExfRkFDRToKICAgICAgICAg
cmV0dXJuIGdldEJvb2xlYW5QYXJhbWV0ZXIocG5hbWUpOwogICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkNVTExfRkFDRV9NT0RFOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAppbmRleCBiMDAxMGI2ZTk4MGJl
ZDJlOTkzOGIyZDk3ZDVkYzg5N2M4MWJiNzYxLi40OGY3Zjk3N2YyZGM0ZWVlMzBlMTdlZWQ1Yjg3
Y2JjNDNkMjc3Yjc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcApAQCAtMjUxMCw3ICsyNTEwLDcgQEAgV2Vi
R0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFVuaWZvcm0oV2ViR0xQcm9n
cmFtKiBwcm9ncmFtLCBjb25zdAogICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRVbmlmb3JtZnYo
b2JqZWN0T3JaZXJvKHByb2dyYW0pLCBsb2NhdGlvbiwgdmFsdWUpOwogICAgICAgICBpZiAobGVu
Z3RoID09IDEpCiAgICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHZhbHVlWzBdKTsKLSAg
ICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhGbG9hdDMyQXJyYXk6OmNyZWF0ZSh2YWx1ZSwgbGVu
Z3RoKS5yZWxlYXNlKCkpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBhc3NSZWZQdHI8
RmxvYXQzMkFycmF5PihGbG9hdDMyQXJyYXk6OmNyZWF0ZSh2YWx1ZSwgbGVuZ3RoKSkpOwogICAg
IH0KICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpJTlQ6IHsKICAgICAgICAgR0MzRGludCB2
YWx1ZVs0XSA9IHswfTsKQEAgLTI1MjAsNyArMjUyMCw3IEBAIFdlYkdMR2V0SW5mbyBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjpnZXRVbmlmb3JtKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgY29u
c3QKICAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0VW5pZm9ybWl2KG9iamVjdE9yWmVybyhwcm9n
cmFtKSwgbG9jYXRpb24sIHZhbHVlKTsKICAgICAgICAgaWYgKGxlbmd0aCA9PSAxKQogICAgICAg
ICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyh2YWx1ZVswXSk7Ci0gICAgICAgIHJldHVybiBXZWJH
TEdldEluZm8oSW50MzJBcnJheTo6Y3JlYXRlKHZhbHVlLCBsZW5ndGgpLnJlbGVhc2UoKSk7Cisg
ICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oUGFzc1JlZlB0cjxJbnQzMkFycmF5PihJbnQzMkFy
cmF5OjpjcmVhdGUodmFsdWUsIGxlbmd0aCkpKTsKICAgICB9CiAgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6Qk9PTDogewogICAgICAgICBHQzNEaW50IHZhbHVlWzRdID0gezB9OwpAQCAtMjYx
Niw3ICsyNjE2LDcgQEAgV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6Omdl
dFZlcnRleEF0dHJpYihHQzNEdWludCBpbmRleCwgR0MzRGVudW0KICAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpWRVJURVhfQVRUUklCX0FSUkFZX1RZUEU6CiAgICAgICAgIHJldHVybiBXZWJH
TEdldEluZm8oc3RhdGUudHlwZSk7CiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q1VSUkVO
VF9WRVJURVhfQVRUUklCOgotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKEZsb2F0MzJBcnJh
eTo6Y3JlYXRlKG1fdmVydGV4QXR0cmliVmFsdWVbaW5kZXhdLnZhbHVlLCA0KS5yZWxlYXNlKCkp
OworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBhc3NSZWZQdHI8RmxvYXQzMkFycmF5PihG
bG9hdDMyQXJyYXk6OmNyZWF0ZShtX3ZlcnRleEF0dHJpYlZhbHVlW2luZGV4XS52YWx1ZSwgNCkp
KTsKICAgICBkZWZhdWx0OgogICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0VmVydGV4QXR0cmliIiwgImludmFsaWQgcGFyYW1ldGVy
IG5hbWUiKTsKICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwpAQCAtMzk2NCw3ICszOTY0
LDcgQEAgV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFdlYkdMRmxv
YXRBcnJheVBhcmFtZXRlcihHQzNEZW51bSBwbmEKICAgICBkZWZhdWx0OgogICAgICAgICBub3RJ
bXBsZW1lbnRlZCgpOwogICAgIH0KLSAgICByZXR1cm4gV2ViR0xHZXRJbmZvKEZsb2F0MzJBcnJh
eTo6Y3JlYXRlKHZhbHVlLCBsZW5ndGgpLnJlbGVhc2UoKSk7CisgICAgcmV0dXJuIFdlYkdMR2V0
SW5mbyhQYXNzUmVmUHRyPEZsb2F0MzJBcnJheT4oRmxvYXQzMkFycmF5OjpjcmVhdGUodmFsdWUs
IGxlbmd0aCkpKTsKIH0KIAogV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OmdldFdlYkdMSW50QXJyYXlQYXJhbWV0ZXIoR0MzRGVudW0gcG5hbWUpCkBAIC0zOTgzLDcgKzM5
ODMsNyBAQCBXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0V2ViR0xJ
bnRBcnJheVBhcmFtZXRlcihHQzNEZW51bSBwbmFtZQogICAgIGRlZmF1bHQ6CiAgICAgICAgIG5v
dEltcGxlbWVudGVkKCk7CiAgICAgfQotICAgIHJldHVybiBXZWJHTEdldEluZm8oSW50MzJBcnJh
eTo6Y3JlYXRlKHZhbHVlLCBsZW5ndGgpLnJlbGVhc2UoKSk7CisgICAgcmV0dXJuIFdlYkdMR2V0
SW5mbyhQYXNzUmVmUHRyPEludDMyQXJyYXk+KEludDMyQXJyYXk6OmNyZWF0ZSh2YWx1ZSwgbGVu
Z3RoKSkpOwogfQogCiBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNoZWNrVGV4dHVy
ZUNvbXBsZXRlbmVzcyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGJvb2wgcHJlcGFyZVRvRHJh
dykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2FuaW1hdGlvbi9UaW1pbmdG
dW5jdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYW5pbWF0aW9uL1RpbWluZ0Z1bmN0
aW9uLmgKaW5kZXggNGE1NzFkNDdhNjFiMjU5MTVjNDc3NzQwNzEyOGI1NmVmYmI1YjMzOS4uZjVl
NjYxNmE5N2NkNTNjNmJjYWUxMzVkZDM2Y2M0N2MyZmI3YzhjYyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYW5pbWF0aW9uL1RpbWluZ0Z1bmN0aW9uLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYW5pbWF0aW9uL1RpbWluZ0Z1bmN0aW9uLmgKQEAgLTI3LDYgKzI3
LDcgQEAKIAogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vSVBDL0hhbmRsZU1lc3NhZ2Uu
aCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0lQQy9IYW5kbGVNZXNzYWdlLmgKaW5kZXggMmNl
MDgzZGU2OWIxMTAyYWM5MzU2NjIzY2RkMjJlYTRmMWY0ZDAyMS4uYzA4YTNkYWE4NDhjY2RiZTg4
ZTE1NzdiMjUzZjIyODA0NDJhMjEyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZv
cm0vSVBDL0hhbmRsZU1lc3NhZ2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9JUEMv
SGFuZGxlTWVzc2FnZS5oCkBAIC0xNDEsNyArMTQxLDcgQEAgdm9pZCBoYW5kbGVNZXNzYWdlRGVs
YXllZChDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBNZXNzYWdlRGVjb2RlciYgZGVjb2Rlciwgc3Rk
OjoKICAgICB9CiAKICAgICBSZWZQdHI8dHlwZW5hbWUgVDo6RGVsYXllZFJlcGx5PiBkZWxheWVk
UmVwbHkgPSBhZG9wdFJlZihuZXcgdHlwZW5hbWUgVDo6RGVsYXllZFJlcGx5KCZjb25uZWN0aW9u
LCBXVEZNb3ZlKHJlcGx5RW5jb2RlcikpKTsKLSAgICBjYWxsTWVtYmVyRnVuY3Rpb24oV1RGTW92
ZShhcmd1bWVudHMpLCBkZWxheWVkUmVwbHkucmVsZWFzZSgpLCBvYmplY3QsIGZ1bmN0aW9uKTsK
KyAgICBjYWxsTWVtYmVyRnVuY3Rpb24oV1RGTW92ZShhcmd1bWVudHMpLCBQYXNzUmVmUHRyPHR5
cGVuYW1lIFQ6OkRlbGF5ZWRSZXBseT4oV1RGTW92ZShkZWxheWVkUmVwbHkpKSwgb2JqZWN0LCBm
dW5jdGlvbik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIElQQwpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hh
bmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDYxODE2NmE2MTI2OTI1MTQ3NTYxMThkZTM1
NzFkOTdkYjg4MzVlYmMuLjczY2JlZGI3MWNjNzZmN2JiZjMzNmY5NTllNGEwN2IzYmE3OTZmYWYg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNyBAQAorMjAxNi0wNS0yNyAgS2VpdGggUm9sbGluICA8a3JvbGxpbkBhcHBsZS5jb20+
CisKKyAgICAgICAgUmVtb3ZlIGFsbCB1c2VzIG9mIFBhc3NSZWZQdHIgaW4gV1RGCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTc1OTYKKyAgICAgICAg
PHJkYXI6Ly9wcm9ibGVtLzI2MjM0MzkxPgorCisgICAgICAgIFJldmlld2VkIGJ5IENocmlzIER1
bWV6LgorCisgICAgICAgIFVwZGF0ZSBjYWxscyB0byBpbnRlcmZhY2VzIHRoYXQgbm8gbG9uZ2Vy
IHRha2Ugb3IgcmV0dXJuIFBhc3NSZWZQdHJzLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9U
ZXN0cy9XVEYvU3RyaW5nSW1wbC5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpzdHJpbmdG
cm9tVVRGOCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKwogMjAxNi0wNi0wNyAg
UGVyIEFybmUgVm9sbGFuICA8cHZvbGxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW1dpbl0gSW1w
b3J0ZWQgbWFya3VwIGluc2VydGlvbiB0ZXN0IGlzIGZhaWxpbmcuCmRpZmYgLS1naXQgYS9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9TdHJpbmdJbXBsLmNwcCBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV1RGL1N0cmluZ0ltcGwuY3BwCmluZGV4IDhjZDZjMDljZmI1YzI0Zjc5YTYy
Mzg3NjU0M2FmMzc5MTM5ODIyNmYuLjk4NDlkZWMzZTViOTI1Nzk5ZWY5Zjc3M2FmYWZhMTZkMTc0
ZTUyOTkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1N0cmluZ0lt
cGwuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1N0cmluZ0ltcGwuY3Bw
CkBAIC0zMywxNCArMzMsMTQgQEAgbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgewogVEVTVChXVEYs
IFN0cmluZ0ltcGxDcmVhdGlvbkZyb21MaXRlcmFsKQogewogICAgIC8vIENvbnN0cnVjdG9yIHVz
aW5nIHRoZSB0ZW1wbGF0ZSB0byBkZXRlcm1pbmUgdGhlIHNpemUuCi0gICAgUmVmUHRyPFN0cmlu
Z0ltcGw+IHN0cmluZ1dpdGhUZW1wbGF0ZSA9IFN0cmluZ0ltcGw6OmNyZWF0ZUZyb21MaXRlcmFs
KCJUZW1wbGF0ZSBMaXRlcmFsIik7CisgICAgYXV0byBzdHJpbmdXaXRoVGVtcGxhdGUgPSBTdHJp
bmdJbXBsOjpjcmVhdGVGcm9tTGl0ZXJhbCgiVGVtcGxhdGUgTGl0ZXJhbCIpOwogICAgIEFTU0VS
VF9FUShzdHJsZW4oIlRlbXBsYXRlIExpdGVyYWwiKSwgc3RyaW5nV2l0aFRlbXBsYXRlLT5sZW5n
dGgoKSk7CiAgICAgQVNTRVJUX1RSVUUoZXF1YWwoc3RyaW5nV2l0aFRlbXBsYXRlLmdldCgpLCAi
VGVtcGxhdGUgTGl0ZXJhbCIpKTsKICAgICBBU1NFUlRfVFJVRShzdHJpbmdXaXRoVGVtcGxhdGUt
PmlzOEJpdCgpKTsKIAogICAgIC8vIENvbnN0cnVjdG9yIHRha2luZyB0aGUgc2l6ZSBleHBsaWNp
dGVseS4KICAgICBjb25zdCBjaGFyKiBwcm9ncmFtbWF0aWNTdHJpbmdEYXRhID0gIkV4cGxpY2l0
IFNpemUgTGl0ZXJhbCI7Ci0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IHByb2dyYW1tYXRpY1N0cmlu
ZyA9IFN0cmluZ0ltcGw6OmNyZWF0ZUZyb21MaXRlcmFsKHByb2dyYW1tYXRpY1N0cmluZ0RhdGEs
IHN0cmxlbihwcm9ncmFtbWF0aWNTdHJpbmdEYXRhKSk7CisgICAgYXV0byBwcm9ncmFtbWF0aWNT
dHJpbmcgPSBTdHJpbmdJbXBsOjpjcmVhdGVGcm9tTGl0ZXJhbChwcm9ncmFtbWF0aWNTdHJpbmdE
YXRhLCBzdHJsZW4ocHJvZ3JhbW1hdGljU3RyaW5nRGF0YSkpOwogICAgIEFTU0VSVF9FUShzdHJs
ZW4ocHJvZ3JhbW1hdGljU3RyaW5nRGF0YSksIHByb2dyYW1tYXRpY1N0cmluZy0+bGVuZ3RoKCkp
OwogICAgIEFTU0VSVF9UUlVFKGVxdWFsKHByb2dyYW1tYXRpY1N0cmluZy5nZXQoKSwgcHJvZ3Jh
bW1hdGljU3RyaW5nRGF0YSkpOwogICAgIEFTU0VSVF9FUShwcm9ncmFtbWF0aWNTdHJpbmdEYXRh
LCByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihwcm9ncmFtbWF0aWNTdHJpbmctPmNoYXJh
Y3RlcnM4KCkpKTsKQEAgLTQ4LDcgKzQ4LDcgQEAgVEVTVChXVEYsIFN0cmluZ0ltcGxDcmVhdGlv
bkZyb21MaXRlcmFsKQogCiAgICAgLy8gQ29uc3RydWN0b3Igd2l0aG91dCBleHBsaWNpdCBzaXpl
LgogICAgIGNvbnN0IGNoYXIqIHN0cmluZ1dpdGhvdXRMZW5ndGhMaXRlcmFsID0gIk5vIFNpemUg
TGl0ZXJhbCI7Ci0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IHByb2dyYW1tYXRpY1N0cmluZ05vTGVu
Z3RoID0gU3RyaW5nSW1wbDo6Y3JlYXRlRnJvbUxpdGVyYWwoc3RyaW5nV2l0aG91dExlbmd0aExp
dGVyYWwpOworICAgIGF1dG8gcHJvZ3JhbW1hdGljU3RyaW5nTm9MZW5ndGggPSBTdHJpbmdJbXBs
OjpjcmVhdGVGcm9tTGl0ZXJhbChzdHJpbmdXaXRob3V0TGVuZ3RoTGl0ZXJhbCk7CiAgICAgQVNT
RVJUX0VRKHN0cmxlbihzdHJpbmdXaXRob3V0TGVuZ3RoTGl0ZXJhbCksIHByb2dyYW1tYXRpY1N0
cmluZ05vTGVuZ3RoLT5sZW5ndGgoKSk7CiAgICAgQVNTRVJUX1RSVUUoZXF1YWwocHJvZ3JhbW1h
dGljU3RyaW5nTm9MZW5ndGguZ2V0KCksIHN0cmluZ1dpdGhvdXRMZW5ndGhMaXRlcmFsKSk7CiAg
ICAgQVNTRVJUX0VRKHN0cmluZ1dpdGhvdXRMZW5ndGhMaXRlcmFsLCByZWludGVycHJldF9jYXN0
PGNvbnN0IGNoYXIqPihwcm9ncmFtbWF0aWNTdHJpbmdOb0xlbmd0aC0+Y2hhcmFjdGVyczgoKSkp
OwpAQCAtNTcsNyArNTcsNyBAQCBURVNUKFdURiwgU3RyaW5nSW1wbENyZWF0aW9uRnJvbUxpdGVy
YWwpCiAKIFRFU1QoV1RGLCBTdHJpbmdJbXBsUmVwbGFjZVdpdGhMaXRlcmFsKQogewotICAgIFJl
ZlB0cjxTdHJpbmdJbXBsPiB0ZXN0U3RyaW5nSW1wbCA9IFN0cmluZ0ltcGw6OmNyZWF0ZUZyb21M
aXRlcmFsKCIxMjI0Iik7CisgICAgYXV0byB0ZXN0U3RyaW5nSW1wbCA9IFN0cmluZ0ltcGw6OmNy
ZWF0ZUZyb21MaXRlcmFsKCIxMjI0Iik7CiAgICAgQVNTRVJUX1RSVUUodGVzdFN0cmluZ0ltcGwt
PmlzOEJpdCgpKTsKIAogICAgIC8vIENhc2VzIGZvciA4Qml0IHNvdXJjZS4KQEAgLTEwMSwyMjUg
KzEwMSwyMjUgQEAgVEVTVChXVEYsIFN0cmluZ0ltcGxSZXBsYWNlV2l0aExpdGVyYWwpCiAKIFRF
U1QoV1RGLCBTdHJpbmdJbXBsRXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZUJhc2ljKQogewotICAgIFJl
ZlB0cjxTdHJpbmdJbXBsPiBhID0gU3RyaW5nSW1wbDo6Y3JlYXRlRnJvbUxpdGVyYWwoImFCY0Rl
RkciKTsKLSAgICBSZWZQdHI8U3RyaW5nSW1wbD4gYiA9IFN0cmluZ0ltcGw6OmNyZWF0ZUZyb21M
aXRlcmFsKCJBQkNERUZHIik7Ci0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IGMgPSBTdHJpbmdJbXBs
OjpjcmVhdGVGcm9tTGl0ZXJhbCgiYWJjZGVmZyIpOworICAgIGF1dG8gYSA9IFN0cmluZ0ltcGw6
OmNyZWF0ZUZyb21MaXRlcmFsKCJhQmNEZUZHIik7CisgICAgYXV0byBiID0gU3RyaW5nSW1wbDo6
Y3JlYXRlRnJvbUxpdGVyYWwoIkFCQ0RFRkciKTsKKyAgICBhdXRvIGMgPSBTdHJpbmdJbXBsOjpj
cmVhdGVGcm9tTGl0ZXJhbCgiYWJjZGVmZyIpOwogICAgIGNvbnN0IGNoYXIgZFtdID0gImFCY0Rl
RkciOwotICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBlbXB0eSA9IFN0cmluZ0ltcGw6OmNyZWF0ZShy
ZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIiIpKTsKLSAgICBSZWZQdHI8U3RyaW5nSW1w
bD4gc2hvcnRlciA9IFN0cmluZ0ltcGw6OmNyZWF0ZUZyb21MaXRlcmFsKCJhYmNkZWYiKTsKLSAg
ICBSZWZQdHI8U3RyaW5nSW1wbD4gZGlmZmVyZW50ID0gU3RyaW5nSW1wbDo6Y3JlYXRlRnJvbUxp
dGVyYWwoImFiY3JlZmciKTsKKyAgICBhdXRvIGVtcHR5ID0gU3RyaW5nSW1wbDo6Y3JlYXRlKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiIikpOworICAgIGF1dG8gc2hvcnRlciA9IFN0
cmluZ0ltcGw6OmNyZWF0ZUZyb21MaXRlcmFsKCJhYmNkZWYiKTsKKyAgICBhdXRvIGRpZmZlcmVu
dCA9IFN0cmluZ0ltcGw6OmNyZWF0ZUZyb21MaXRlcmFsKCJhYmNyZWZnIik7CiAKICAgICAvLyBJ
ZGVudGl0eS4KLSAgICBBU1NFUlRfVFJVRShlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGEuZ2V0KCks
IGEuZ2V0KCkpKTsKLSAgICBBU1NFUlRfVFJVRShlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGIuZ2V0
KCksIGIuZ2V0KCkpKTsKLSAgICBBU1NFUlRfVFJVRShlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGMu
Z2V0KCksIGMuZ2V0KCkpKTsKLSAgICBBU1NFUlRfVFJVRShlcXVhbElnbm9yaW5nQVNDSUlDYXNl
KGEuZ2V0KCksIGQpKTsKLSAgICBBU1NFUlRfVFJVRShlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGIu
Z2V0KCksIGQpKTsKLSAgICBBU1NFUlRfVFJVRShlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGMuZ2V0
KCksIGQpKTsKKyAgICBBU1NFUlRfVFJVRShlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGEucHRyKCks
IGEucHRyKCkpKTsKKyAgICBBU1NFUlRfVFJVRShlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGIucHRy
KCksIGIucHRyKCkpKTsKKyAgICBBU1NFUlRfVFJVRShlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGMu
cHRyKCksIGMucHRyKCkpKTsKKyAgICBBU1NFUlRfVFJVRShlcXVhbElnbm9yaW5nQVNDSUlDYXNl
KGEucHRyKCksIGQpKTsKKyAgICBBU1NFUlRfVFJVRShlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGIu
cHRyKCksIGQpKTsKKyAgICBBU1NFUlRfVFJVRShlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGMucHRy
KCksIGQpKTsKIAogICAgIC8vIFRyYW5zaXRpdml0eS4KLSAgICBBU1NFUlRfVFJVRShlcXVhbEln
bm9yaW5nQVNDSUlDYXNlKGEuZ2V0KCksIGIuZ2V0KCkpKTsKLSAgICBBU1NFUlRfVFJVRShlcXVh
bElnbm9yaW5nQVNDSUlDYXNlKGIuZ2V0KCksIGMuZ2V0KCkpKTsKLSAgICBBU1NFUlRfVFJVRShl
cXVhbElnbm9yaW5nQVNDSUlDYXNlKGEuZ2V0KCksIGMuZ2V0KCkpKTsKKyAgICBBU1NFUlRfVFJV
RShlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGEucHRyKCksIGIucHRyKCkpKTsKKyAgICBBU1NFUlRf
VFJVRShlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGIucHRyKCksIGMucHRyKCkpKTsKKyAgICBBU1NF
UlRfVFJVRShlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGEucHRyKCksIGMucHRyKCkpKTsKIAogICAg
IC8vIE5lZ2F0aXZlIGNhc2VzLgotICAgIEFTU0VSVF9GQUxTRShlcXVhbElnbm9yaW5nQVNDSUlD
YXNlKGEuZ2V0KCksIGVtcHR5LmdldCgpKSk7Ci0gICAgQVNTRVJUX0ZBTFNFKGVxdWFsSWdub3Jp
bmdBU0NJSUNhc2UoYi5nZXQoKSwgZW1wdHkuZ2V0KCkpKTsKLSAgICBBU1NFUlRfRkFMU0UoZXF1
YWxJZ25vcmluZ0FTQ0lJQ2FzZShjLmdldCgpLCBlbXB0eS5nZXQoKSkpOwotICAgIEFTU0VSVF9G
QUxTRShlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGEuZ2V0KCksIHNob3J0ZXIuZ2V0KCkpKTsKLSAg
ICBBU1NFUlRfRkFMU0UoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShiLmdldCgpLCBzaG9ydGVyLmdl
dCgpKSk7Ci0gICAgQVNTRVJUX0ZBTFNFKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoYy5nZXQoKSwg
c2hvcnRlci5nZXQoKSkpOwotICAgIEFTU0VSVF9GQUxTRShlcXVhbElnbm9yaW5nQVNDSUlDYXNl
KGEuZ2V0KCksIGRpZmZlcmVudC5nZXQoKSkpOwotICAgIEFTU0VSVF9GQUxTRShlcXVhbElnbm9y
aW5nQVNDSUlDYXNlKGIuZ2V0KCksIGRpZmZlcmVudC5nZXQoKSkpOwotICAgIEFTU0VSVF9GQUxT
RShlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGMuZ2V0KCksIGRpZmZlcmVudC5nZXQoKSkpOwotICAg
IEFTU0VSVF9GQUxTRShlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGVtcHR5LmdldCgpLCBkKSk7Ci0g
ICAgQVNTRVJUX0ZBTFNFKGVxdWFsSWdub3JpbmdBU0NJSUNhc2Uoc2hvcnRlci5nZXQoKSwgZCkp
OwotICAgIEFTU0VSVF9GQUxTRShlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGRpZmZlcmVudC5nZXQo
KSwgZCkpOworICAgIEFTU0VSVF9GQUxTRShlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGEucHRyKCks
IGVtcHR5LnB0cigpKSk7CisgICAgQVNTRVJUX0ZBTFNFKGVxdWFsSWdub3JpbmdBU0NJSUNhc2Uo
Yi5wdHIoKSwgZW1wdHkucHRyKCkpKTsKKyAgICBBU1NFUlRfRkFMU0UoZXF1YWxJZ25vcmluZ0FT
Q0lJQ2FzZShjLnB0cigpLCBlbXB0eS5wdHIoKSkpOworICAgIEFTU0VSVF9GQUxTRShlcXVhbEln
bm9yaW5nQVNDSUlDYXNlKGEucHRyKCksIHNob3J0ZXIucHRyKCkpKTsKKyAgICBBU1NFUlRfRkFM
U0UoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShiLnB0cigpLCBzaG9ydGVyLnB0cigpKSk7CisgICAg
QVNTRVJUX0ZBTFNFKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoYy5wdHIoKSwgc2hvcnRlci5wdHIo
KSkpOworICAgIEFTU0VSVF9GQUxTRShlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGEucHRyKCksIGRp
ZmZlcmVudC5wdHIoKSkpOworICAgIEFTU0VSVF9GQUxTRShlcXVhbElnbm9yaW5nQVNDSUlDYXNl
KGIucHRyKCksIGRpZmZlcmVudC5wdHIoKSkpOworICAgIEFTU0VSVF9GQUxTRShlcXVhbElnbm9y
aW5nQVNDSUlDYXNlKGMucHRyKCksIGRpZmZlcmVudC5wdHIoKSkpOworICAgIEFTU0VSVF9GQUxT
RShlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGVtcHR5LnB0cigpLCBkKSk7CisgICAgQVNTRVJUX0ZB
TFNFKGVxdWFsSWdub3JpbmdBU0NJSUNhc2Uoc2hvcnRlci5wdHIoKSwgZCkpOworICAgIEFTU0VS
VF9GQUxTRShlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGRpZmZlcmVudC5wdHIoKSwgZCkpOwogfQog
CiBURVNUKFdURiwgU3RyaW5nSW1wbEVxdWFsSWdub3JpbmdBU0NJSUNhc2VXaXRoTnVsbCkKIHsK
LSAgICBSZWZQdHI8U3RyaW5nSW1wbD4gcmVmZXJlbmNlID0gU3RyaW5nSW1wbDo6Y3JlYXRlRnJv
bUxpdGVyYWwoImFCY0RlRkciKTsKKyAgICBhdXRvIHJlZmVyZW5jZSA9IFN0cmluZ0ltcGw6OmNy
ZWF0ZUZyb21MaXRlcmFsKCJhQmNEZUZHIik7CiAgICAgU3RyaW5nSW1wbCogbnVsbFN0cmluZ0lt
cGwgPSBudWxscHRyOwotICAgIEFTU0VSVF9GQUxTRShlcXVhbElnbm9yaW5nQVNDSUlDYXNlKG51
bGxTdHJpbmdJbXBsLCByZWZlcmVuY2UuZ2V0KCkpKTsKLSAgICBBU1NFUlRfRkFMU0UoZXF1YWxJ
Z25vcmluZ0FTQ0lJQ2FzZShyZWZlcmVuY2UuZ2V0KCksIG51bGxTdHJpbmdJbXBsKSk7CisgICAg
QVNTRVJUX0ZBTFNFKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UobnVsbFN0cmluZ0ltcGwsIHJlZmVy
ZW5jZS5wdHIoKSkpOworICAgIEFTU0VSVF9GQUxTRShlcXVhbElnbm9yaW5nQVNDSUlDYXNlKHJl
ZmVyZW5jZS5wdHIoKSwgbnVsbFN0cmluZ0ltcGwpKTsKICAgICBBU1NFUlRfVFJVRShlcXVhbEln
bm9yaW5nQVNDSUlDYXNlKG51bGxTdHJpbmdJbXBsLCBudWxsU3RyaW5nSW1wbCkpOwogfQogCiBU
RVNUKFdURiwgU3RyaW5nSW1wbEVxdWFsSWdub3JpbmdBU0NJSUNhc2VXaXRoRW1wdHkpCiB7Ci0g
ICAgUmVmUHRyPFN0cmluZ0ltcGw+IGEgPSBTdHJpbmdJbXBsOjpjcmVhdGUocmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBMQ2hhcio+KCIiKSk7Ci0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IGIgPSBTdHJp
bmdJbXBsOjpjcmVhdGUocmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCIiKSk7Ci0gICAg
QVNTRVJUX1RSVUUoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShhLmdldCgpLCBiLmdldCgpKSk7Ci0g
ICAgQVNTRVJUX1RSVUUoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShiLmdldCgpLCBhLmdldCgpKSk7
CisgICAgYXV0byBhID0gU3RyaW5nSW1wbDo6Y3JlYXRlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
TENoYXIqPigiIikpOworICAgIGF1dG8gYiA9IFN0cmluZ0ltcGw6OmNyZWF0ZShyZWludGVycHJl
dF9jYXN0PGNvbnN0IExDaGFyKj4oIiIpKTsKKyAgICBBU1NFUlRfVFJVRShlcXVhbElnbm9yaW5n
QVNDSUlDYXNlKGEucHRyKCksIGIucHRyKCkpKTsKKyAgICBBU1NFUlRfVFJVRShlcXVhbElnbm9y
aW5nQVNDSUlDYXNlKGIucHRyKCksIGEucHRyKCkpKTsKIH0KIAotc3RhdGljIFJlZlB0cjxTdHJp
bmdJbXBsPiBzdHJpbmdGcm9tVVRGOChjb25zdCBjaGFyKiBjaGFyYWN0ZXJzKQorc3RhdGljIFJl
ZjxTdHJpbmdJbXBsPiBzdHJpbmdGcm9tVVRGOChjb25zdCBjaGFyKiBjaGFyYWN0ZXJzKQogewot
ICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KGNoYXJhY3RlcnMpLmltcGwoKTsKKyAgICByZXR1
cm4gU3RyaW5nOjpmcm9tVVRGOChjaGFyYWN0ZXJzKS5yZWxlYXNlSW1wbCgpLnJlbGVhc2VOb25O
dWxsKCk7CiB9CiAKIFRFU1QoV1RGLCBTdHJpbmdJbXBsRXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZVdp
dGhMYXRpbjFDaGFyYWN0ZXJzKQogewotICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBhID0gc3RyaW5n
RnJvbVVURjgoImFCY8OpZUZHIik7Ci0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IGIgPSBzdHJpbmdG
cm9tVVRGOCgiQUJDw4lFRkciKTsKLSAgICBSZWZQdHI8U3RyaW5nSW1wbD4gYyA9IHN0cmluZ0Zy
b21VVEY4KCJBQkPDqUVGRyIpOwotICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBkID0gc3RyaW5nRnJv
bVVURjgoImFiY8OpZWZnIik7CisgICAgYXV0byBhID0gc3RyaW5nRnJvbVVURjgoImFCY8OpZUZH
Iik7CisgICAgYXV0byBiID0gc3RyaW5nRnJvbVVURjgoIkFCQ8OJRUZHIik7CisgICAgYXV0byBj
ID0gc3RyaW5nRnJvbVVURjgoIkFCQ8OpRUZHIik7CisgICAgYXV0byBkID0gc3RyaW5nRnJvbVVU
RjgoImFiY8OpZWZnIik7CiAgICAgY29uc3QgY2hhciBlW10gPSAiYUJjw6llRkciOwogCiAgICAg
Ly8gSWRlbnRpdHkuCi0gICAgQVNTRVJUX1RSVUUoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShhLmdl
dCgpLCBhLmdldCgpKSk7Ci0gICAgQVNTRVJUX1RSVUUoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShi
LmdldCgpLCBiLmdldCgpKSk7Ci0gICAgQVNTRVJUX1RSVUUoZXF1YWxJZ25vcmluZ0FTQ0lJQ2Fz
ZShjLmdldCgpLCBjLmdldCgpKSk7Ci0gICAgQVNTRVJUX1RSVUUoZXF1YWxJZ25vcmluZ0FTQ0lJ
Q2FzZShkLmdldCgpLCBkLmdldCgpKSk7CisgICAgQVNTRVJUX1RSVUUoZXF1YWxJZ25vcmluZ0FT
Q0lJQ2FzZShhLnB0cigpLCBhLnB0cigpKSk7CisgICAgQVNTRVJUX1RSVUUoZXF1YWxJZ25vcmlu
Z0FTQ0lJQ2FzZShiLnB0cigpLCBiLnB0cigpKSk7CisgICAgQVNTRVJUX1RSVUUoZXF1YWxJZ25v
cmluZ0FTQ0lJQ2FzZShjLnB0cigpLCBjLnB0cigpKSk7CisgICAgQVNTRVJUX1RSVUUoZXF1YWxJ
Z25vcmluZ0FTQ0lJQ2FzZShkLnB0cigpLCBkLnB0cigpKSk7CiAKICAgICAvLyBBbGwgY29tYmlu
YXRpb24uCi0gICAgQVNTRVJUX0ZBTFNFKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoYS5nZXQoKSwg
Yi5nZXQoKSkpOwotICAgIEFTU0VSVF9UUlVFKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoYS5nZXQo
KSwgYy5nZXQoKSkpOwotICAgIEFTU0VSVF9UUlVFKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoYS5n
ZXQoKSwgZC5nZXQoKSkpOwotICAgIEFTU0VSVF9GQUxTRShlcXVhbElnbm9yaW5nQVNDSUlDYXNl
KGIuZ2V0KCksIGMuZ2V0KCkpKTsKLSAgICBBU1NFUlRfRkFMU0UoZXF1YWxJZ25vcmluZ0FTQ0lJ
Q2FzZShiLmdldCgpLCBkLmdldCgpKSk7Ci0gICAgQVNTRVJUX1RSVUUoZXF1YWxJZ25vcmluZ0FT
Q0lJQ2FzZShjLmdldCgpLCBkLmdldCgpKSk7Ci0gICAgQVNTRVJUX0ZBTFNFKGVxdWFsSWdub3Jp
bmdBU0NJSUNhc2UoYS5nZXQoKSwgZSkpOwotICAgIEFTU0VSVF9GQUxTRShlcXVhbElnbm9yaW5n
QVNDSUlDYXNlKGIuZ2V0KCksIGUpKTsKLSAgICBBU1NFUlRfRkFMU0UoZXF1YWxJZ25vcmluZ0FT
Q0lJQ2FzZShjLmdldCgpLCBlKSk7Ci0gICAgQVNTRVJUX0ZBTFNFKGVxdWFsSWdub3JpbmdBU0NJ
SUNhc2UoZC5nZXQoKSwgZSkpOworICAgIEFTU0VSVF9GQUxTRShlcXVhbElnbm9yaW5nQVNDSUlD
YXNlKGEucHRyKCksIGIucHRyKCkpKTsKKyAgICBBU1NFUlRfVFJVRShlcXVhbElnbm9yaW5nQVND
SUlDYXNlKGEucHRyKCksIGMucHRyKCkpKTsKKyAgICBBU1NFUlRfVFJVRShlcXVhbElnbm9yaW5n
QVNDSUlDYXNlKGEucHRyKCksIGQucHRyKCkpKTsKKyAgICBBU1NFUlRfRkFMU0UoZXF1YWxJZ25v
cmluZ0FTQ0lJQ2FzZShiLnB0cigpLCBjLnB0cigpKSk7CisgICAgQVNTRVJUX0ZBTFNFKGVxdWFs
SWdub3JpbmdBU0NJSUNhc2UoYi5wdHIoKSwgZC5wdHIoKSkpOworICAgIEFTU0VSVF9UUlVFKGVx
dWFsSWdub3JpbmdBU0NJSUNhc2UoYy5wdHIoKSwgZC5wdHIoKSkpOworICAgIEFTU0VSVF9GQUxT
RShlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGEucHRyKCksIGUpKTsKKyAgICBBU1NFUlRfRkFMU0Uo
ZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShiLnB0cigpLCBlKSk7CisgICAgQVNTRVJUX0ZBTFNFKGVx
dWFsSWdub3JpbmdBU0NJSUNhc2UoYy5wdHIoKSwgZSkpOworICAgIEFTU0VSVF9GQUxTRShlcXVh
bElnbm9yaW5nQVNDSUlDYXNlKGQucHRyKCksIGUpKTsKIH0KIAogVEVTVChXVEYsIFN0cmluZ0lt
cGxGaW5kSWdub3JpbmdBU0NJSUNhc2VCYXNpYykKIHsKLSAgICBSZWZQdHI8U3RyaW5nSW1wbD4g
cmVmZXJlbmNlQSA9IHN0cmluZ0Zyb21VVEY4KCJhQmPDqWVGRyIpOwotICAgIFJlZlB0cjxTdHJp
bmdJbXBsPiByZWZlcmVuY2VCID0gc3RyaW5nRnJvbVVURjgoIkFCQ8OJRUZHIik7CisgICAgYXV0
byByZWZlcmVuY2VBID0gc3RyaW5nRnJvbVVURjgoImFCY8OpZUZHIik7CisgICAgYXV0byByZWZl
cmVuY2VCID0gc3RyaW5nRnJvbVVURjgoIkFCQ8OJRUZHIik7CiAKICAgICAvLyBTZWFyY2ggdGhl
IGV4YWN0IHN0cmluZy4KLSAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigwKSwgcmVm
ZXJlbmNlQS0+ZmluZElnbm9yaW5nQVNDSUlDYXNlKHJlZmVyZW5jZUEuZ2V0KCkpKTsKLSAgICBF
WFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigwKSwgcmVmZXJlbmNlQi0+ZmluZElnbm9yaW5n
QVNDSUlDYXNlKHJlZmVyZW5jZUIuZ2V0KCkpKTsKKyAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8
c2l6ZV90PigwKSwgcmVmZXJlbmNlQS0+ZmluZElnbm9yaW5nQVNDSUlDYXNlKHJlZmVyZW5jZUEu
cHRyKCkpKTsKKyAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigwKSwgcmVmZXJlbmNl
Qi0+ZmluZElnbm9yaW5nQVNDSUlDYXNlKHJlZmVyZW5jZUIucHRyKCkpKTsKIAogICAgIC8vIEEg
YW5kIEIgYXJlIGRpc3RpbmN0IGJ5IHRoZSBub24tYXNjaWkgY2hhcmFjdGVyIMOpL8OJLgotICAg
IEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KG5vdEZvdW5kKSwgcmVmZXJlbmNlQS0+Zmlu
ZElnbm9yaW5nQVNDSUlDYXNlKHJlZmVyZW5jZUIuZ2V0KCkpKTsKLSAgICBFWFBFQ1RfRVEoc3Rh
dGljX2Nhc3Q8c2l6ZV90Pihub3RGb3VuZCksIHJlZmVyZW5jZUItPmZpbmRJZ25vcmluZ0FTQ0lJ
Q2FzZShyZWZlcmVuY2VBLmdldCgpKSk7CisgICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVf
dD4obm90Rm91bmQpLCByZWZlcmVuY2VBLT5maW5kSWdub3JpbmdBU0NJSUNhc2UocmVmZXJlbmNl
Qi5wdHIoKSkpOworICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KG5vdEZvdW5kKSwg
cmVmZXJlbmNlQi0+ZmluZElnbm9yaW5nQVNDSUlDYXNlKHJlZmVyZW5jZUEucHRyKCkpKTsKIAog
ICAgIC8vIEZpbmQgdGhlIHByZWZpeC4KLSAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90
PigwKSwgcmVmZXJlbmNlQS0+ZmluZElnbm9yaW5nQVNDSUlDYXNlKFN0cmluZ0ltcGw6OmNyZWF0
ZUZyb21MaXRlcmFsKCJhIikuZ2V0KCkpKTsKLSAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6
ZV90PigwKSwgcmVmZXJlbmNlQS0+ZmluZElnbm9yaW5nQVNDSUlDYXNlKHN0cmluZ0Zyb21VVEY4
KCJhYmPDqSIpLmdldCgpKSk7Ci0gICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oMCks
IHJlZmVyZW5jZUEtPmZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShTdHJpbmdJbXBsOjpjcmVhdGVGcm9t
TGl0ZXJhbCgiQSIpLmdldCgpKSk7Ci0gICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4o
MCksIHJlZmVyZW5jZUEtPmZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShzdHJpbmdGcm9tVVRGOCgiQUJD
w6kiKS5nZXQoKSkpOwotICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDApLCByZWZl
cmVuY2VCLT5maW5kSWdub3JpbmdBU0NJSUNhc2UoU3RyaW5nSW1wbDo6Y3JlYXRlRnJvbUxpdGVy
YWwoImEiKS5nZXQoKSkpOwotICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDApLCBy
ZWZlcmVuY2VCLT5maW5kSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nRnJvbVVURjgoImFiY8OJIiku
Z2V0KCkpKTsKLSAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigwKSwgcmVmZXJlbmNl
Qi0+ZmluZElnbm9yaW5nQVNDSUlDYXNlKFN0cmluZ0ltcGw6OmNyZWF0ZUZyb21MaXRlcmFsKCJB
IikuZ2V0KCkpKTsKLSAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigwKSwgcmVmZXJl
bmNlQi0+ZmluZElnbm9yaW5nQVNDSUlDYXNlKHN0cmluZ0Zyb21VVEY4KCJBQkPDiSIpLmdldCgp
KSk7CisgICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oMCksIHJlZmVyZW5jZUEtPmZp
bmRJZ25vcmluZ0FTQ0lJQ2FzZShTdHJpbmdJbXBsOjpjcmVhdGVGcm9tTGl0ZXJhbCgiYSIpLnB0
cigpKSk7CisgICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oMCksIHJlZmVyZW5jZUEt
PmZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShzdHJpbmdGcm9tVVRGOCgiYWJjw6kiKS5wdHIoKSkpOwor
ICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDApLCByZWZlcmVuY2VBLT5maW5kSWdu
b3JpbmdBU0NJSUNhc2UoU3RyaW5nSW1wbDo6Y3JlYXRlRnJvbUxpdGVyYWwoIkEiKS5wdHIoKSkp
OworICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDApLCByZWZlcmVuY2VBLT5maW5k
SWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nRnJvbVVURjgoIkFCQ8OpIikucHRyKCkpKTsKKyAgICBF
WFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigwKSwgcmVmZXJlbmNlQi0+ZmluZElnbm9yaW5n
QVNDSUlDYXNlKFN0cmluZ0ltcGw6OmNyZWF0ZUZyb21MaXRlcmFsKCJhIikucHRyKCkpKTsKKyAg
ICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigwKSwgcmVmZXJlbmNlQi0+ZmluZElnbm9y
aW5nQVNDSUlDYXNlKHN0cmluZ0Zyb21VVEY4KCJhYmPDiSIpLnB0cigpKSk7CisgICAgRVhQRUNU
X0VRKHN0YXRpY19jYXN0PHNpemVfdD4oMCksIHJlZmVyZW5jZUItPmZpbmRJZ25vcmluZ0FTQ0lJ
Q2FzZShTdHJpbmdJbXBsOjpjcmVhdGVGcm9tTGl0ZXJhbCgiQSIpLnB0cigpKSk7CisgICAgRVhQ
RUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oMCksIHJlZmVyZW5jZUItPmZpbmRJZ25vcmluZ0FT
Q0lJQ2FzZShzdHJpbmdGcm9tVVRGOCgiQUJDw4kiKS5wdHIoKSkpOwogCiAgICAgLy8gTm90IGEg
cHJlZml4LgotICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KFdURjo6bm90Rm91bmQp
LCByZWZlcmVuY2VBLT5maW5kSWdub3JpbmdBU0NJSUNhc2UoU3RyaW5nSW1wbDo6Y3JlYXRlRnJv
bUxpdGVyYWwoIngiKS5nZXQoKSkpOwotICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+
KFdURjo6bm90Rm91bmQpLCByZWZlcmVuY2VBLT5maW5kSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5n
RnJvbVVURjgoImFjY8OpIikuZ2V0KCkpKTsKLSAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6
ZV90PihXVEY6Om5vdEZvdW5kKSwgcmVmZXJlbmNlQS0+ZmluZElnbm9yaW5nQVNDSUlDYXNlKHN0
cmluZ0Zyb21VVEY4KCJhYmPDiSIpLmdldCgpKSk7Ci0gICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0
PHNpemVfdD4oV1RGOjpub3RGb3VuZCksIHJlZmVyZW5jZUEtPmZpbmRJZ25vcmluZ0FTQ0lJQ2Fz
ZShTdHJpbmdJbXBsOjpjcmVhdGVGcm9tTGl0ZXJhbCgiWCIpLmdldCgpKSk7Ci0gICAgRVhQRUNU
X0VRKHN0YXRpY19jYXN0PHNpemVfdD4oV1RGOjpub3RGb3VuZCksIHJlZmVyZW5jZUEtPmZpbmRJ
Z25vcmluZ0FTQ0lJQ2FzZShzdHJpbmdGcm9tVVRGOCgiQUJEw6kiKS5nZXQoKSkpOwotICAgIEVY
UEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KFdURjo6bm90Rm91bmQpLCByZWZlcmVuY2VBLT5m
aW5kSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nRnJvbVVURjgoIkFCQ8OJIikuZ2V0KCkpKTsKLSAg
ICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PihXVEY6Om5vdEZvdW5kKSwgcmVmZXJlbmNl
Qi0+ZmluZElnbm9yaW5nQVNDSUlDYXNlKFN0cmluZ0ltcGw6OmNyZWF0ZUZyb21MaXRlcmFsKCJ5
IikuZ2V0KCkpKTsKLSAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PihXVEY6Om5vdEZv
dW5kKSwgcmVmZXJlbmNlQi0+ZmluZElnbm9yaW5nQVNDSUlDYXNlKHN0cmluZ0Zyb21VVEY4KCJh
Y2PDiSIpLmdldCgpKSk7Ci0gICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oV1RGOjpu
b3RGb3VuZCksIHJlZmVyZW5jZUItPmZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShzdHJpbmdGcm9tVVRG
OCgiYWJjw6kiKS5nZXQoKSkpOwotICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KFdU
Rjo6bm90Rm91bmQpLCByZWZlcmVuY2VCLT5maW5kSWdub3JpbmdBU0NJSUNhc2UoU3RyaW5nSW1w
bDo6Y3JlYXRlRnJvbUxpdGVyYWwoIlkiKS5nZXQoKSkpOwotICAgIEVYUEVDVF9FUShzdGF0aWNf
Y2FzdDxzaXplX3Q+KFdURjo6bm90Rm91bmQpLCByZWZlcmVuY2VCLT5maW5kSWdub3JpbmdBU0NJ
SUNhc2Uoc3RyaW5nRnJvbVVURjgoIkFCZMOJIikuZ2V0KCkpKTsKLSAgICBFWFBFQ1RfRVEoc3Rh
dGljX2Nhc3Q8c2l6ZV90PihXVEY6Om5vdEZvdW5kKSwgcmVmZXJlbmNlQi0+ZmluZElnbm9yaW5n
QVNDSUlDYXNlKHN0cmluZ0Zyb21VVEY4KCJBQkPDqSIpLmdldCgpKSk7CisgICAgRVhQRUNUX0VR
KHN0YXRpY19jYXN0PHNpemVfdD4oV1RGOjpub3RGb3VuZCksIHJlZmVyZW5jZUEtPmZpbmRJZ25v
cmluZ0FTQ0lJQ2FzZShTdHJpbmdJbXBsOjpjcmVhdGVGcm9tTGl0ZXJhbCgieCIpLnB0cigpKSk7
CisgICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oV1RGOjpub3RGb3VuZCksIHJlZmVy
ZW5jZUEtPmZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShzdHJpbmdGcm9tVVRGOCgiYWNjw6kiKS5wdHIo
KSkpOworICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KFdURjo6bm90Rm91bmQpLCBy
ZWZlcmVuY2VBLT5maW5kSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nRnJvbVVURjgoImFiY8OJIiku
cHRyKCkpKTsKKyAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PihXVEY6Om5vdEZvdW5k
KSwgcmVmZXJlbmNlQS0+ZmluZElnbm9yaW5nQVNDSUlDYXNlKFN0cmluZ0ltcGw6OmNyZWF0ZUZy
b21MaXRlcmFsKCJYIikucHRyKCkpKTsKKyAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90
PihXVEY6Om5vdEZvdW5kKSwgcmVmZXJlbmNlQS0+ZmluZElnbm9yaW5nQVNDSUlDYXNlKHN0cmlu
Z0Zyb21VVEY4KCJBQkTDqSIpLnB0cigpKSk7CisgICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNp
emVfdD4oV1RGOjpub3RGb3VuZCksIHJlZmVyZW5jZUEtPmZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShz
dHJpbmdGcm9tVVRGOCgiQUJDw4kiKS5wdHIoKSkpOworICAgIEVYUEVDVF9FUShzdGF0aWNfY2Fz
dDxzaXplX3Q+KFdURjo6bm90Rm91bmQpLCByZWZlcmVuY2VCLT5maW5kSWdub3JpbmdBU0NJSUNh
c2UoU3RyaW5nSW1wbDo6Y3JlYXRlRnJvbUxpdGVyYWwoInkiKS5wdHIoKSkpOworICAgIEVYUEVD
VF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KFdURjo6bm90Rm91bmQpLCByZWZlcmVuY2VCLT5maW5k
SWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nRnJvbVVURjgoImFjY8OJIikucHRyKCkpKTsKKyAgICBF
WFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PihXVEY6Om5vdEZvdW5kKSwgcmVmZXJlbmNlQi0+
ZmluZElnbm9yaW5nQVNDSUlDYXNlKHN0cmluZ0Zyb21VVEY4KCJhYmPDqSIpLnB0cigpKSk7Cisg
ICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oV1RGOjpub3RGb3VuZCksIHJlZmVyZW5j
ZUItPmZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShTdHJpbmdJbXBsOjpjcmVhdGVGcm9tTGl0ZXJhbCgi
WSIpLnB0cigpKSk7CisgICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oV1RGOjpub3RG
b3VuZCksIHJlZmVyZW5jZUItPmZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShzdHJpbmdGcm9tVVRGOCgi
QUJkw4kiKS5wdHIoKSkpOworICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KFdURjo6
bm90Rm91bmQpLCByZWZlcmVuY2VCLT5maW5kSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nRnJvbVVU
RjgoIkFCQ8OpIikucHRyKCkpKTsKIAogICAgIC8vIEZpbmQgdGhlIGluZml4LgotICAgIEVYUEVD
VF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDIpLCByZWZlcmVuY2VBLT5maW5kSWdub3JpbmdBU0NJ
SUNhc2Uoc3RyaW5nRnJvbVVURjgoImPDqWUiKS5nZXQoKSkpOwotICAgIEVYUEVDVF9FUShzdGF0
aWNfY2FzdDxzaXplX3Q+KDMpLCByZWZlcmVuY2VBLT5maW5kSWdub3JpbmdBU0NJSUNhc2Uoc3Ry
aW5nRnJvbVVURjgoIsOpZSIpLmdldCgpKSk7Ci0gICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNp
emVfdD4oMiksIHJlZmVyZW5jZUEtPmZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShzdHJpbmdGcm9tVVRG
OCgiY8OpIikuZ2V0KCkpKTsKLSAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigyKSwg
cmVmZXJlbmNlQS0+ZmluZElnbm9yaW5nQVNDSUlDYXNlKHN0cmluZ0Zyb21VVEY4KCJjIikuZ2V0
KCkpKTsKLSAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigzKSwgcmVmZXJlbmNlQS0+
ZmluZElnbm9yaW5nQVNDSUlDYXNlKHN0cmluZ0Zyb21VVEY4KCLDqSIpLmdldCgpKSk7Ci0gICAg
RVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oMiksIHJlZmVyZW5jZUEtPmZpbmRJZ25vcmlu
Z0FTQ0lJQ2FzZShzdHJpbmdGcm9tVVRGOCgiQ8OpZSIpLmdldCgpKSk7Ci0gICAgRVhQRUNUX0VR
KHN0YXRpY19jYXN0PHNpemVfdD4oMyksIHJlZmVyZW5jZUEtPmZpbmRJZ25vcmluZ0FTQ0lJQ2Fz
ZShzdHJpbmdGcm9tVVRGOCgiw6lFIikuZ2V0KCkpKTsKLSAgICBFWFBFQ1RfRVEoc3RhdGljX2Nh
c3Q8c2l6ZV90PigyKSwgcmVmZXJlbmNlQS0+ZmluZElnbm9yaW5nQVNDSUlDYXNlKHN0cmluZ0Zy
b21VVEY4KCJDw6kiKS5nZXQoKSkpOwotICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+
KDIpLCByZWZlcmVuY2VBLT5maW5kSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nRnJvbVVURjgoIkMi
KS5nZXQoKSkpOwotCi0gICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oMiksIHJlZmVy
ZW5jZUItPmZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShzdHJpbmdGcm9tVVRGOCgiY8OJZSIpLmdldCgp
KSk7Ci0gICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oMyksIHJlZmVyZW5jZUItPmZp
bmRJZ25vcmluZ0FTQ0lJQ2FzZShzdHJpbmdGcm9tVVRGOCgiw4llIikuZ2V0KCkpKTsKLSAgICBF
WFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigyKSwgcmVmZXJlbmNlQi0+ZmluZElnbm9yaW5n
QVNDSUlDYXNlKHN0cmluZ0Zyb21VVEY4KCJjw4kiKS5nZXQoKSkpOwotICAgIEVYUEVDVF9FUShz
dGF0aWNfY2FzdDxzaXplX3Q+KDIpLCByZWZlcmVuY2VCLT5maW5kSWdub3JpbmdBU0NJSUNhc2Uo
c3RyaW5nRnJvbVVURjgoImMiKS5nZXQoKSkpOwotICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxz
aXplX3Q+KDMpLCByZWZlcmVuY2VCLT5maW5kSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nRnJvbVVU
RjgoIsOJIikuZ2V0KCkpKTsKLSAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigyKSwg
cmVmZXJlbmNlQi0+ZmluZElnbm9yaW5nQVNDSUlDYXNlKHN0cmluZ0Zyb21VVEY4KCJDw4llIiku
Z2V0KCkpKTsKLSAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigzKSwgcmVmZXJlbmNl
Qi0+ZmluZElnbm9yaW5nQVNDSUlDYXNlKHN0cmluZ0Zyb21VVEY4KCLDiUUiKS5nZXQoKSkpOwot
ICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDIpLCByZWZlcmVuY2VCLT5maW5kSWdu
b3JpbmdBU0NJSUNhc2Uoc3RyaW5nRnJvbVVURjgoIkPDiSIpLmdldCgpKSk7Ci0gICAgRVhQRUNU
X0VRKHN0YXRpY19jYXN0PHNpemVfdD4oMiksIHJlZmVyZW5jZUItPmZpbmRJZ25vcmluZ0FTQ0lJ
Q2FzZShzdHJpbmdGcm9tVVRGOCgiQyIpLmdldCgpKSk7CisgICAgRVhQRUNUX0VRKHN0YXRpY19j
YXN0PHNpemVfdD4oMiksIHJlZmVyZW5jZUEtPmZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShzdHJpbmdG
cm9tVVRGOCgiY8OpZSIpLnB0cigpKSk7CisgICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVf
dD4oMyksIHJlZmVyZW5jZUEtPmZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShzdHJpbmdGcm9tVVRGOCgi
w6llIikucHRyKCkpKTsKKyAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigyKSwgcmVm
ZXJlbmNlQS0+ZmluZElnbm9yaW5nQVNDSUlDYXNlKHN0cmluZ0Zyb21VVEY4KCJjw6kiKS5wdHIo
KSkpOworICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDIpLCByZWZlcmVuY2VBLT5m
aW5kSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nRnJvbVVURjgoImMiKS5wdHIoKSkpOworICAgIEVY
UEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDMpLCByZWZlcmVuY2VBLT5maW5kSWdub3JpbmdB
U0NJSUNhc2Uoc3RyaW5nRnJvbVVURjgoIsOpIikucHRyKCkpKTsKKyAgICBFWFBFQ1RfRVEoc3Rh
dGljX2Nhc3Q8c2l6ZV90PigyKSwgcmVmZXJlbmNlQS0+ZmluZElnbm9yaW5nQVNDSUlDYXNlKHN0
cmluZ0Zyb21VVEY4KCJDw6llIikucHRyKCkpKTsKKyAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8
c2l6ZV90PigzKSwgcmVmZXJlbmNlQS0+ZmluZElnbm9yaW5nQVNDSUlDYXNlKHN0cmluZ0Zyb21V
VEY4KCLDqUUiKS5wdHIoKSkpOworICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDIp
LCByZWZlcmVuY2VBLT5maW5kSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nRnJvbVVURjgoIkPDqSIp
LnB0cigpKSk7CisgICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oMiksIHJlZmVyZW5j
ZUEtPmZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShzdHJpbmdGcm9tVVRGOCgiQyIpLnB0cigpKSk7CisK
KyAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigyKSwgcmVmZXJlbmNlQi0+ZmluZEln
bm9yaW5nQVNDSUlDYXNlKHN0cmluZ0Zyb21VVEY4KCJjw4llIikucHRyKCkpKTsKKyAgICBFWFBF
Q1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigzKSwgcmVmZXJlbmNlQi0+ZmluZElnbm9yaW5nQVND
SUlDYXNlKHN0cmluZ0Zyb21VVEY4KCLDiWUiKS5wdHIoKSkpOworICAgIEVYUEVDVF9FUShzdGF0
aWNfY2FzdDxzaXplX3Q+KDIpLCByZWZlcmVuY2VCLT5maW5kSWdub3JpbmdBU0NJSUNhc2Uoc3Ry
aW5nRnJvbVVURjgoImPDiSIpLnB0cigpKSk7CisgICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNp
emVfdD4oMiksIHJlZmVyZW5jZUItPmZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShzdHJpbmdGcm9tVVRG
OCgiYyIpLnB0cigpKSk7CisgICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oMyksIHJl
ZmVyZW5jZUItPmZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShzdHJpbmdGcm9tVVRGOCgiw4kiKS5wdHIo
KSkpOworICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDIpLCByZWZlcmVuY2VCLT5m
aW5kSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nRnJvbVVURjgoIkPDiWUiKS5wdHIoKSkpOworICAg
IEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDMpLCByZWZlcmVuY2VCLT5maW5kSWdub3Jp
bmdBU0NJSUNhc2Uoc3RyaW5nRnJvbVVURjgoIsOJRSIpLnB0cigpKSk7CisgICAgRVhQRUNUX0VR
KHN0YXRpY19jYXN0PHNpemVfdD4oMiksIHJlZmVyZW5jZUItPmZpbmRJZ25vcmluZ0FTQ0lJQ2Fz
ZShzdHJpbmdGcm9tVVRGOCgiQ8OJIikucHRyKCkpKTsKKyAgICBFWFBFQ1RfRVEoc3RhdGljX2Nh
c3Q8c2l6ZV90PigyKSwgcmVmZXJlbmNlQi0+ZmluZElnbm9yaW5nQVNDSUlDYXNlKHN0cmluZ0Zy
b21VVEY4KCJDIikucHRyKCkpKTsKIAogICAgIC8vIE5vdCBhbiBpbmZpeC4KLSAgICBFWFBFQ1Rf
RVEoc3RhdGljX2Nhc3Q8c2l6ZV90PihXVEY6Om5vdEZvdW5kKSwgcmVmZXJlbmNlQS0+ZmluZEln
bm9yaW5nQVNDSUlDYXNlKHN0cmluZ0Zyb21VVEY4KCJjw6lkIikuZ2V0KCkpKTsKLSAgICBFWFBF
Q1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PihXVEY6Om5vdEZvdW5kKSwgcmVmZXJlbmNlQS0+Zmlu
ZElnbm9yaW5nQVNDSUlDYXNlKHN0cmluZ0Zyb21VVEY4KCLDiWUiKS5nZXQoKSkpOwotICAgIEVY
UEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KFdURjo6bm90Rm91bmQpLCByZWZlcmVuY2VBLT5m
aW5kSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nRnJvbVVURjgoImLDqSIpLmdldCgpKSk7Ci0gICAg
RVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oV1RGOjpub3RGb3VuZCksIHJlZmVyZW5jZUEt
PmZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShzdHJpbmdGcm9tVVRGOCgieCIpLmdldCgpKSk7Ci0gICAg
RVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oV1RGOjpub3RGb3VuZCksIHJlZmVyZW5jZUEt
PmZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShzdHJpbmdGcm9tVVRGOCgiw4kiKS5nZXQoKSkpOwotICAg
IEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KFdURjo6bm90Rm91bmQpLCByZWZlcmVuY2VB
LT5maW5kSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nRnJvbVVURjgoIkPDiWUiKS5nZXQoKSkpOwot
ICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KFdURjo6bm90Rm91bmQpLCByZWZlcmVu
Y2VBLT5maW5kSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nRnJvbVVURjgoIsOpZCIpLmdldCgpKSk7
Ci0gICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oV1RGOjpub3RGb3VuZCksIHJlZmVy
ZW5jZUEtPmZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShzdHJpbmdGcm9tVVRGOCgiQ8OJIikuZ2V0KCkp
KTsKLSAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PihXVEY6Om5vdEZvdW5kKSwgcmVm
ZXJlbmNlQS0+ZmluZElnbm9yaW5nQVNDSUlDYXNlKHN0cmluZ0Zyb21VVEY4KCJZIikuZ2V0KCkp
KTsKLQotICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KFdURjo6bm90Rm91bmQpLCBy
ZWZlcmVuY2VCLT5maW5kSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nRnJvbVVURjgoImPDqWUiKS5n
ZXQoKSkpOwotICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KFdURjo6bm90Rm91bmQp
LCByZWZlcmVuY2VCLT5maW5kSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nRnJvbVVURjgoIsOJYyIp
LmdldCgpKSk7Ci0gICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oV1RGOjpub3RGb3Vu
ZCksIHJlZmVyZW5jZUItPmZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShzdHJpbmdGcm9tVVRGOCgiY8Op
IikuZ2V0KCkpKTsKLSAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PihXVEY6Om5vdEZv
dW5kKSwgcmVmZXJlbmNlQi0+ZmluZElnbm9yaW5nQVNDSUlDYXNlKHN0cmluZ0Zyb21VVEY4KCJX
IikuZ2V0KCkpKTsKLSAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PihXVEY6Om5vdEZv
dW5kKSwgcmVmZXJlbmNlQi0+ZmluZElnbm9yaW5nQVNDSUlDYXNlKHN0cmluZ0Zyb21VVEY4KCLD
qSIpLmdldCgpKSk7Ci0gICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oV1RGOjpub3RG
b3VuZCksIHJlZmVyZW5jZUItPmZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShzdHJpbmdGcm9tVVRGOCgi
YsOJZSIpLmdldCgpKSk7Ci0gICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oV1RGOjpu
b3RGb3VuZCksIHJlZmVyZW5jZUItPmZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShzdHJpbmdGcm9tVVRG
OCgiw6lFIikuZ2V0KCkpKTsKLSAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PihXVEY6
Om5vdEZvdW5kKSwgcmVmZXJlbmNlQi0+ZmluZElnbm9yaW5nQVNDSUlDYXNlKHN0cmluZ0Zyb21V
VEY4KCJCw4kiKS5nZXQoKSkpOwotICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KFdU
Rjo6bm90Rm91bmQpLCByZWZlcmVuY2VCLT5maW5kSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nRnJv
bVVURjgoInoiKS5nZXQoKSkpOworICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KFdU
Rjo6bm90Rm91bmQpLCByZWZlcmVuY2VBLT5maW5kSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nRnJv
bVVURjgoImPDqWQiKS5wdHIoKSkpOworICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+
KFdURjo6bm90Rm91bmQpLCByZWZlcmVuY2VBLT5maW5kSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5n
RnJvbVVURjgoIsOJZSIpLnB0cigpKSk7CisgICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVf
dD4oV1RGOjpub3RGb3VuZCksIHJlZmVyZW5jZUEtPmZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShzdHJp
bmdGcm9tVVRGOCgiYsOpIikucHRyKCkpKTsKKyAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6
ZV90PihXVEY6Om5vdEZvdW5kKSwgcmVmZXJlbmNlQS0+ZmluZElnbm9yaW5nQVNDSUlDYXNlKHN0
cmluZ0Zyb21VVEY4KCJ4IikucHRyKCkpKTsKKyAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6
ZV90PihXVEY6Om5vdEZvdW5kKSwgcmVmZXJlbmNlQS0+ZmluZElnbm9yaW5nQVNDSUlDYXNlKHN0
cmluZ0Zyb21VVEY4KCLDiSIpLnB0cigpKSk7CisgICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNp
emVfdD4oV1RGOjpub3RGb3VuZCksIHJlZmVyZW5jZUEtPmZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShz
dHJpbmdGcm9tVVRGOCgiQ8OJZSIpLnB0cigpKSk7CisgICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0
PHNpemVfdD4oV1RGOjpub3RGb3VuZCksIHJlZmVyZW5jZUEtPmZpbmRJZ25vcmluZ0FTQ0lJQ2Fz
ZShzdHJpbmdGcm9tVVRGOCgiw6lkIikucHRyKCkpKTsKKyAgICBFWFBFQ1RfRVEoc3RhdGljX2Nh
c3Q8c2l6ZV90PihXVEY6Om5vdEZvdW5kKSwgcmVmZXJlbmNlQS0+ZmluZElnbm9yaW5nQVNDSUlD
YXNlKHN0cmluZ0Zyb21VVEY4KCJDw4kiKS5wdHIoKSkpOworICAgIEVYUEVDVF9FUShzdGF0aWNf
Y2FzdDxzaXplX3Q+KFdURjo6bm90Rm91bmQpLCByZWZlcmVuY2VBLT5maW5kSWdub3JpbmdBU0NJ
SUNhc2Uoc3RyaW5nRnJvbVVURjgoIlkiKS5wdHIoKSkpOworCisgICAgRVhQRUNUX0VRKHN0YXRp
Y19jYXN0PHNpemVfdD4oV1RGOjpub3RGb3VuZCksIHJlZmVyZW5jZUItPmZpbmRJZ25vcmluZ0FT
Q0lJQ2FzZShzdHJpbmdGcm9tVVRGOCgiY8OpZSIpLnB0cigpKSk7CisgICAgRVhQRUNUX0VRKHN0
YXRpY19jYXN0PHNpemVfdD4oV1RGOjpub3RGb3VuZCksIHJlZmVyZW5jZUItPmZpbmRJZ25vcmlu
Z0FTQ0lJQ2FzZShzdHJpbmdGcm9tVVRGOCgiw4ljIikucHRyKCkpKTsKKyAgICBFWFBFQ1RfRVEo
c3RhdGljX2Nhc3Q8c2l6ZV90PihXVEY6Om5vdEZvdW5kKSwgcmVmZXJlbmNlQi0+ZmluZElnbm9y
aW5nQVNDSUlDYXNlKHN0cmluZ0Zyb21VVEY4KCJjw6kiKS5wdHIoKSkpOworICAgIEVYUEVDVF9F
UShzdGF0aWNfY2FzdDxzaXplX3Q+KFdURjo6bm90Rm91bmQpLCByZWZlcmVuY2VCLT5maW5kSWdu
b3JpbmdBU0NJSUNhc2Uoc3RyaW5nRnJvbVVURjgoIlciKS5wdHIoKSkpOworICAgIEVYUEVDVF9F
UShzdGF0aWNfY2FzdDxzaXplX3Q+KFdURjo6bm90Rm91bmQpLCByZWZlcmVuY2VCLT5maW5kSWdu
b3JpbmdBU0NJSUNhc2Uoc3RyaW5nRnJvbVVURjgoIsOpIikucHRyKCkpKTsKKyAgICBFWFBFQ1Rf
RVEoc3RhdGljX2Nhc3Q8c2l6ZV90PihXVEY6Om5vdEZvdW5kKSwgcmVmZXJlbmNlQi0+ZmluZEln
bm9yaW5nQVNDSUlDYXNlKHN0cmluZ0Zyb21VVEY4KCJiw4llIikucHRyKCkpKTsKKyAgICBFWFBF
Q1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PihXVEY6Om5vdEZvdW5kKSwgcmVmZXJlbmNlQi0+Zmlu
ZElnbm9yaW5nQVNDSUlDYXNlKHN0cmluZ0Zyb21VVEY4KCLDqUUiKS5wdHIoKSkpOworICAgIEVY
UEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KFdURjo6bm90Rm91bmQpLCByZWZlcmVuY2VCLT5m
aW5kSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nRnJvbVVURjgoIkLDiSIpLnB0cigpKSk7CisgICAg
RVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oV1RGOjpub3RGb3VuZCksIHJlZmVyZW5jZUIt
PmZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShzdHJpbmdGcm9tVVRGOCgieiIpLnB0cigpKSk7CiAKICAg
ICAvLyBGaW5kIHRoZSBzdWZmaXguCi0gICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4o
NiksIHJlZmVyZW5jZUEtPmZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShTdHJpbmdJbXBsOjpjcmVhdGVG
cm9tTGl0ZXJhbCgiZyIpLmdldCgpKSk7Ci0gICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVf
dD4oNCksIHJlZmVyZW5jZUEtPmZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShzdHJpbmdGcm9tVVRGOCgi
ZWZnIikuZ2V0KCkpKTsKLSAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigzKSwgcmVm
ZXJlbmNlQS0+ZmluZElnbm9yaW5nQVNDSUlDYXNlKHN0cmluZ0Zyb21VVEY4KCLDqWVmZyIpLmdl
dCgpKSk7Ci0gICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oNiksIHJlZmVyZW5jZUEt
PmZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShTdHJpbmdJbXBsOjpjcmVhdGVGcm9tTGl0ZXJhbCgiRyIp
LmdldCgpKSk7Ci0gICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oNCksIHJlZmVyZW5j
ZUEtPmZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShzdHJpbmdGcm9tVVRGOCgiRUZHIikuZ2V0KCkpKTsK
LSAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigzKSwgcmVmZXJlbmNlQS0+ZmluZEln
bm9yaW5nQVNDSUlDYXNlKHN0cmluZ0Zyb21VVEY4KCLDqUVGRyIpLmdldCgpKSk7Ci0KLSAgICBF
WFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90Pig2KSwgcmVmZXJlbmNlQi0+ZmluZElnbm9yaW5n
QVNDSUlDYXNlKFN0cmluZ0ltcGw6OmNyZWF0ZUZyb21MaXRlcmFsKCJnIikuZ2V0KCkpKTsKLSAg
ICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90Pig0KSwgcmVmZXJlbmNlQi0+ZmluZElnbm9y
aW5nQVNDSUlDYXNlKHN0cmluZ0Zyb21VVEY4KCJlZmciKS5nZXQoKSkpOwotICAgIEVYUEVDVF9F
UShzdGF0aWNfY2FzdDxzaXplX3Q+KDMpLCByZWZlcmVuY2VCLT5maW5kSWdub3JpbmdBU0NJSUNh
c2Uoc3RyaW5nRnJvbVVURjgoIsOJZWZnIikuZ2V0KCkpKTsKLSAgICBFWFBFQ1RfRVEoc3RhdGlj
X2Nhc3Q8c2l6ZV90Pig2KSwgcmVmZXJlbmNlQi0+ZmluZElnbm9yaW5nQVNDSUlDYXNlKFN0cmlu
Z0ltcGw6OmNyZWF0ZUZyb21MaXRlcmFsKCJHIikuZ2V0KCkpKTsKLSAgICBFWFBFQ1RfRVEoc3Rh
dGljX2Nhc3Q8c2l6ZV90Pig0KSwgcmVmZXJlbmNlQi0+ZmluZElnbm9yaW5nQVNDSUlDYXNlKHN0
cmluZ0Zyb21VVEY4KCJFRkciKS5nZXQoKSkpOwotICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxz
aXplX3Q+KDMpLCByZWZlcmVuY2VCLT5maW5kSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nRnJvbVVU
RjgoIsOJRUZHIikuZ2V0KCkpKTsKKyAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90Pig2
KSwgcmVmZXJlbmNlQS0+ZmluZElnbm9yaW5nQVNDSUlDYXNlKFN0cmluZ0ltcGw6OmNyZWF0ZUZy
b21MaXRlcmFsKCJnIikucHRyKCkpKTsKKyAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90
Pig0KSwgcmVmZXJlbmNlQS0+ZmluZElnbm9yaW5nQVNDSUlDYXNlKHN0cmluZ0Zyb21VVEY4KCJl
ZmciKS5wdHIoKSkpOworICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDMpLCByZWZl
cmVuY2VBLT5maW5kSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nRnJvbVVURjgoIsOpZWZnIikucHRy
KCkpKTsKKyAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90Pig2KSwgcmVmZXJlbmNlQS0+
ZmluZElnbm9yaW5nQVNDSUlDYXNlKFN0cmluZ0ltcGw6OmNyZWF0ZUZyb21MaXRlcmFsKCJHIiku
cHRyKCkpKTsKKyAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90Pig0KSwgcmVmZXJlbmNl
QS0+ZmluZElnbm9yaW5nQVNDSUlDYXNlKHN0cmluZ0Zyb21VVEY4KCJFRkciKS5wdHIoKSkpOwor
ICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDMpLCByZWZlcmVuY2VBLT5maW5kSWdu
b3JpbmdBU0NJSUNhc2Uoc3RyaW5nRnJvbVVURjgoIsOpRUZHIikucHRyKCkpKTsKKworICAgIEVY
UEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDYpLCByZWZlcmVuY2VCLT5maW5kSWdub3JpbmdB
U0NJSUNhc2UoU3RyaW5nSW1wbDo6Y3JlYXRlRnJvbUxpdGVyYWwoImciKS5wdHIoKSkpOworICAg
IEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDQpLCByZWZlcmVuY2VCLT5maW5kSWdub3Jp
bmdBU0NJSUNhc2Uoc3RyaW5nRnJvbVVURjgoImVmZyIpLnB0cigpKSk7CisgICAgRVhQRUNUX0VR
KHN0YXRpY19jYXN0PHNpemVfdD4oMyksIHJlZmVyZW5jZUItPmZpbmRJZ25vcmluZ0FTQ0lJQ2Fz
ZShzdHJpbmdGcm9tVVRGOCgiw4llZmciKS5wdHIoKSkpOworICAgIEVYUEVDVF9FUShzdGF0aWNf
Y2FzdDxzaXplX3Q+KDYpLCByZWZlcmVuY2VCLT5maW5kSWdub3JpbmdBU0NJSUNhc2UoU3RyaW5n
SW1wbDo6Y3JlYXRlRnJvbUxpdGVyYWwoIkciKS5wdHIoKSkpOworICAgIEVYUEVDVF9FUShzdGF0
aWNfY2FzdDxzaXplX3Q+KDQpLCByZWZlcmVuY2VCLT5maW5kSWdub3JpbmdBU0NJSUNhc2Uoc3Ry
aW5nRnJvbVVURjgoIkVGRyIpLnB0cigpKSk7CisgICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNp
emVfdD4oMyksIHJlZmVyZW5jZUItPmZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShzdHJpbmdGcm9tVVRG
OCgiw4lFRkciKS5wdHIoKSkpOwogCiAgICAgLy8gTm90IGEgc3VmZml4LgotICAgIEVYUEVDVF9F
UShzdGF0aWNfY2FzdDxzaXplX3Q+KFdURjo6bm90Rm91bmQpLCByZWZlcmVuY2VBLT5maW5kSWdu
b3JpbmdBU0NJSUNhc2UoU3RyaW5nSW1wbDo6Y3JlYXRlRnJvbUxpdGVyYWwoIlgiKS5nZXQoKSkp
OwotICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KFdURjo6bm90Rm91bmQpLCByZWZl
cmVuY2VBLT5maW5kSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nRnJvbVVURjgoImVkZyIpLmdldCgp
KSk7Ci0gICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oV1RGOjpub3RGb3VuZCksIHJl
ZmVyZW5jZUEtPmZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShzdHJpbmdGcm9tVVRGOCgiw4llZmciKS5n
ZXQoKSkpOwotICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KFdURjo6bm90Rm91bmQp
LCByZWZlcmVuY2VBLT5maW5kSWdub3JpbmdBU0NJSUNhc2UoU3RyaW5nSW1wbDo6Y3JlYXRlRnJv
bUxpdGVyYWwoInciKS5nZXQoKSkpOwotICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+
KFdURjo6bm90Rm91bmQpLCByZWZlcmVuY2VBLT5maW5kSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5n
RnJvbVVURjgoImRGRyIpLmdldCgpKSk7Ci0gICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVf
dD4oV1RGOjpub3RGb3VuZCksIHJlZmVyZW5jZUEtPmZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShzdHJp
bmdGcm9tVVRGOCgiw4lFRkciKS5nZXQoKSkpOwotCi0gICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0
PHNpemVfdD4oV1RGOjpub3RGb3VuZCksIHJlZmVyZW5jZUItPmZpbmRJZ25vcmluZ0FTQ0lJQ2Fz
ZShTdHJpbmdJbXBsOjpjcmVhdGVGcm9tTGl0ZXJhbCgiWiIpLmdldCgpKSk7Ci0gICAgRVhQRUNU
X0VRKHN0YXRpY19jYXN0PHNpemVfdD4oV1RGOjpub3RGb3VuZCksIHJlZmVyZW5jZUItPmZpbmRJ
Z25vcmluZ0FTQ0lJQ2FzZShzdHJpbmdGcm9tVVRGOCgiZmZnIikuZ2V0KCkpKTsKLSAgICBFWFBF
Q1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PihXVEY6Om5vdEZvdW5kKSwgcmVmZXJlbmNlQi0+Zmlu
ZElnbm9yaW5nQVNDSUlDYXNlKHN0cmluZ0Zyb21VVEY4KCLDqWVmZyIpLmdldCgpKSk7Ci0gICAg
RVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oV1RGOjpub3RGb3VuZCksIHJlZmVyZW5jZUIt
PmZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShTdHJpbmdJbXBsOjpjcmVhdGVGcm9tTGl0ZXJhbCgiciIp
LmdldCgpKSk7Ci0gICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oV1RGOjpub3RGb3Vu
ZCksIHJlZmVyZW5jZUItPmZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShzdHJpbmdGcm9tVVRGOCgiRWdH
IikuZ2V0KCkpKTsKLSAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PihXVEY6Om5vdEZv
dW5kKSwgcmVmZXJlbmNlQi0+ZmluZElnbm9yaW5nQVNDSUlDYXNlKHN0cmluZ0Zyb21VVEY4KCLD
qUVGRyIpLmdldCgpKSk7CisgICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oV1RGOjpu
b3RGb3VuZCksIHJlZmVyZW5jZUEtPmZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShTdHJpbmdJbXBsOjpj
cmVhdGVGcm9tTGl0ZXJhbCgiWCIpLnB0cigpKSk7CisgICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0
PHNpemVfdD4oV1RGOjpub3RGb3VuZCksIHJlZmVyZW5jZUEtPmZpbmRJZ25vcmluZ0FTQ0lJQ2Fz
ZShzdHJpbmdGcm9tVVRGOCgiZWRnIikucHRyKCkpKTsKKyAgICBFWFBFQ1RfRVEoc3RhdGljX2Nh
c3Q8c2l6ZV90PihXVEY6Om5vdEZvdW5kKSwgcmVmZXJlbmNlQS0+ZmluZElnbm9yaW5nQVNDSUlD
YXNlKHN0cmluZ0Zyb21VVEY4KCLDiWVmZyIpLnB0cigpKSk7CisgICAgRVhQRUNUX0VRKHN0YXRp
Y19jYXN0PHNpemVfdD4oV1RGOjpub3RGb3VuZCksIHJlZmVyZW5jZUEtPmZpbmRJZ25vcmluZ0FT
Q0lJQ2FzZShTdHJpbmdJbXBsOjpjcmVhdGVGcm9tTGl0ZXJhbCgidyIpLnB0cigpKSk7CisgICAg
RVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oV1RGOjpub3RGb3VuZCksIHJlZmVyZW5jZUEt
PmZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShzdHJpbmdGcm9tVVRGOCgiZEZHIikucHRyKCkpKTsKKyAg
ICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PihXVEY6Om5vdEZvdW5kKSwgcmVmZXJlbmNl
QS0+ZmluZElnbm9yaW5nQVNDSUlDYXNlKHN0cmluZ0Zyb21VVEY4KCLDiUVGRyIpLnB0cigpKSk7
CisKKyAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PihXVEY6Om5vdEZvdW5kKSwgcmVm
ZXJlbmNlQi0+ZmluZElnbm9yaW5nQVNDSUlDYXNlKFN0cmluZ0ltcGw6OmNyZWF0ZUZyb21MaXRl
cmFsKCJaIikucHRyKCkpKTsKKyAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PihXVEY6
Om5vdEZvdW5kKSwgcmVmZXJlbmNlQi0+ZmluZElnbm9yaW5nQVNDSUlDYXNlKHN0cmluZ0Zyb21V
VEY4KCJmZmciKS5wdHIoKSkpOworICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KFdU
Rjo6bm90Rm91bmQpLCByZWZlcmVuY2VCLT5maW5kSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nRnJv
bVVURjgoIsOpZWZnIikucHRyKCkpKTsKKyAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90
PihXVEY6Om5vdEZvdW5kKSwgcmVmZXJlbmNlQi0+ZmluZElnbm9yaW5nQVNDSUlDYXNlKFN0cmlu
Z0ltcGw6OmNyZWF0ZUZyb21MaXRlcmFsKCJyIikucHRyKCkpKTsKKyAgICBFWFBFQ1RfRVEoc3Rh
dGljX2Nhc3Q8c2l6ZV90PihXVEY6Om5vdEZvdW5kKSwgcmVmZXJlbmNlQi0+ZmluZElnbm9yaW5n
QVNDSUlDYXNlKHN0cmluZ0Zyb21VVEY4KCJFZ0ciKS5wdHIoKSkpOworICAgIEVYUEVDVF9FUShz
dGF0aWNfY2FzdDxzaXplX3Q+KFdURjo6bm90Rm91bmQpLCByZWZlcmVuY2VCLT5maW5kSWdub3Jp
bmdBU0NJSUNhc2Uoc3RyaW5nRnJvbVVURjgoIsOpRUZHIikucHRyKCkpKTsKIH0KIAogVEVTVChX
VEYsIFN0cmluZ0ltcGxGaW5kSWdub3JpbmdBU0NJSUNhc2VXaXRoVmFsaWRPZmZzZXQpCiB7Ci0g
ICAgUmVmUHRyPFN0cmluZ0ltcGw+IHJlZmVyZW5jZSA9IHN0cmluZ0Zyb21VVEY4KCJBQkPDiUVG
R2FCY8OpZUZHIik7Ci0gICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oMCksIHJlZmVy
ZW5jZS0+ZmluZElnbm9yaW5nQVNDSUlDYXNlKHN0cmluZ0Zyb21VVEY4KCJBQkMiKS5nZXQoKSwg
MCkpOwotICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDcpLCByZWZlcmVuY2UtPmZp
bmRJZ25vcmluZ0FTQ0lJQ2FzZShzdHJpbmdGcm9tVVRGOCgiQUJDIikuZ2V0KCksIDEpKTsKLSAg
ICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigwKSwgcmVmZXJlbmNlLT5maW5kSWdub3Jp
bmdBU0NJSUNhc2Uoc3RyaW5nRnJvbVVURjgoIkFCQ8OJIikuZ2V0KCksIDApKTsKLSAgICBFWFBF
Q1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PihXVEY6Om5vdEZvdW5kKSwgcmVmZXJlbmNlLT5maW5k
SWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nRnJvbVVURjgoIkFCQ8OJIikuZ2V0KCksIDEpKTsKLSAg
ICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90Pig3KSwgcmVmZXJlbmNlLT5maW5kSWdub3Jp
bmdBU0NJSUNhc2Uoc3RyaW5nRnJvbVVURjgoIkFCQ8OpIikuZ2V0KCksIDApKTsKLSAgICBFWFBF
Q1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90Pig3KSwgcmVmZXJlbmNlLT5maW5kSWdub3JpbmdBU0NJ
SUNhc2Uoc3RyaW5nRnJvbVVURjgoIkFCQ8OpIikuZ2V0KCksIDEpKTsKKyAgICBhdXRvIHJlZmVy
ZW5jZSA9IHN0cmluZ0Zyb21VVEY4KCJBQkPDiUVGR2FCY8OpZUZHIik7CisgICAgRVhQRUNUX0VR
KHN0YXRpY19jYXN0PHNpemVfdD4oMCksIHJlZmVyZW5jZS0+ZmluZElnbm9yaW5nQVNDSUlDYXNl
KHN0cmluZ0Zyb21VVEY4KCJBQkMiKS5wdHIoKSwgMCkpOworICAgIEVYUEVDVF9FUShzdGF0aWNf
Y2FzdDxzaXplX3Q+KDcpLCByZWZlcmVuY2UtPmZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShzdHJpbmdG
cm9tVVRGOCgiQUJDIikucHRyKCksIDEpKTsKKyAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6
ZV90PigwKSwgcmVmZXJlbmNlLT5maW5kSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nRnJvbVVURjgo
IkFCQ8OJIikucHRyKCksIDApKTsKKyAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PihX
VEY6Om5vdEZvdW5kKSwgcmVmZXJlbmNlLT5maW5kSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nRnJv
bVVURjgoIkFCQ8OJIikucHRyKCksIDEpKTsKKyAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6
ZV90Pig3KSwgcmVmZXJlbmNlLT5maW5kSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nRnJvbVVURjgo
IkFCQ8OpIikucHRyKCksIDApKTsKKyAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90Pig3
KSwgcmVmZXJlbmNlLT5maW5kSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nRnJvbVVURjgoIkFCQ8Op
IikucHRyKCksIDEpKTsKIH0KIAogVEVTVChXVEYsIFN0cmluZ0ltcGxGaW5kSWdub3JpbmdBU0NJ
SUNhc2VXaXRoSW52YWxpZE9mZnNldCkKIHsKLSAgICBSZWZQdHI8U3RyaW5nSW1wbD4gcmVmZXJl
bmNlID0gc3RyaW5nRnJvbVVURjgoIkFCQ8OJRUZHYUJjw6llRkciKTsKLSAgICBFWFBFQ1RfRVEo
c3RhdGljX2Nhc3Q8c2l6ZV90PihXVEY6Om5vdEZvdW5kKSwgcmVmZXJlbmNlLT5maW5kSWdub3Jp
bmdBU0NJSUNhc2Uoc3RyaW5nRnJvbVVURjgoIkFCQyIpLmdldCgpLCAxNSkpOwotICAgIEVYUEVD
VF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KFdURjo6bm90Rm91bmQpLCByZWZlcmVuY2UtPmZpbmRJ
Z25vcmluZ0FTQ0lJQ2FzZShzdHJpbmdGcm9tVVRGOCgiQUJDIikuZ2V0KCksIDE2KSk7Ci0gICAg
RVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oV1RGOjpub3RGb3VuZCksIHJlZmVyZW5jZS0+
ZmluZElnbm9yaW5nQVNDSUlDYXNlKHN0cmluZ0Zyb21VVEY4KCJBQkPDiSIpLmdldCgpLCAxNykp
OwotICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KFdURjo6bm90Rm91bmQpLCByZWZl
cmVuY2UtPmZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShzdHJpbmdGcm9tVVRGOCgiQUJDw4kiKS5nZXQo
KSwgNDIpKTsKLSAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PihXVEY6Om5vdEZvdW5k
KSwgcmVmZXJlbmNlLT5maW5kSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nRnJvbVVURjgoIkFCQ8OJ
IikuZ2V0KCksIHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkpOworICAgIGF1
dG8gcmVmZXJlbmNlID0gc3RyaW5nRnJvbVVURjgoIkFCQ8OJRUZHYUJjw6llRkciKTsKKyAgICBF
WFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PihXVEY6Om5vdEZvdW5kKSwgcmVmZXJlbmNlLT5m
aW5kSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nRnJvbVVURjgoIkFCQyIpLnB0cigpLCAxNSkpOwor
ICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KFdURjo6bm90Rm91bmQpLCByZWZlcmVu
Y2UtPmZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShzdHJpbmdGcm9tVVRGOCgiQUJDIikucHRyKCksIDE2
KSk7CisgICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oV1RGOjpub3RGb3VuZCksIHJl
ZmVyZW5jZS0+ZmluZElnbm9yaW5nQVNDSUlDYXNlKHN0cmluZ0Zyb21VVEY4KCJBQkPDiSIpLnB0
cigpLCAxNykpOworICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KFdURjo6bm90Rm91
bmQpLCByZWZlcmVuY2UtPmZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShzdHJpbmdGcm9tVVRGOCgiQUJD
w4kiKS5wdHIoKSwgNDIpKTsKKyAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PihXVEY6
Om5vdEZvdW5kKSwgcmVmZXJlbmNlLT5maW5kSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nRnJvbVVU
RjgoIkFCQ8OJIikucHRyKCksIHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkp
OwogfQogCiBURVNUKFdURiwgU3RyaW5nSW1wbEZpbmRJZ25vcmluZ0FTQ0lJQ2FzZU9uTnVsbCkK
IHsKLSAgICBSZWZQdHI8U3RyaW5nSW1wbD4gcmVmZXJlbmNlID0gc3RyaW5nRnJvbVVURjgoIkFC
Q8OJRUZHIik7CisgICAgYXV0byByZWZlcmVuY2UgPSBzdHJpbmdGcm9tVVRGOCgiQUJDw4lFRkci
KTsKICAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PihXVEY6Om5vdEZvdW5kKSwgcmVm
ZXJlbmNlLT5maW5kSWdub3JpbmdBU0NJSUNhc2UobnVsbHB0cikpOwogICAgIEVYUEVDVF9FUShz
dGF0aWNfY2FzdDxzaXplX3Q+KFdURjo6bm90Rm91bmQpLCByZWZlcmVuY2UtPmZpbmRJZ25vcmlu
Z0FTQ0lJQ2FzZShudWxscHRyLCAwKSk7CiAgICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVf
dD4oV1RGOjpub3RGb3VuZCksIHJlZmVyZW5jZS0+ZmluZElnbm9yaW5nQVNDSUlDYXNlKG51bGxw
dHIsIDMpKTsKQEAgLTMzMSw5NyArMzMxLDk3IEBAIFRFU1QoV1RGLCBTdHJpbmdJbXBsRmluZEln
bm9yaW5nQVNDSUlDYXNlT25OdWxsKQogCiBURVNUKFdURiwgU3RyaW5nSW1wbEZpbmRJZ25vcmlu
Z0FTQ0lJQ2FzZU9uRW1wdHkpCiB7Ci0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IHJlZmVyZW5jZSA9
IHN0cmluZ0Zyb21VVEY4KCJBQkPDiUVGRyIpOwotICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBlbXB0
eSA9IFN0cmluZ0ltcGw6OmNyZWF0ZShyZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIiIp
KTsKLSAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigwKSwgcmVmZXJlbmNlLT5maW5k
SWdub3JpbmdBU0NJSUNhc2UoZW1wdHkuZ2V0KCkpKTsKLSAgICBFWFBFQ1RfRVEoc3RhdGljX2Nh
c3Q8c2l6ZV90PigwKSwgcmVmZXJlbmNlLT5maW5kSWdub3JpbmdBU0NJSUNhc2UoZW1wdHkuZ2V0
KCksIDApKTsKLSAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigzKSwgcmVmZXJlbmNl
LT5maW5kSWdub3JpbmdBU0NJSUNhc2UoZW1wdHkuZ2V0KCksIDMpKTsKLSAgICBFWFBFQ1RfRVEo
c3RhdGljX2Nhc3Q8c2l6ZV90Pig3KSwgcmVmZXJlbmNlLT5maW5kSWdub3JpbmdBU0NJSUNhc2Uo
ZW1wdHkuZ2V0KCksIDcpKTsKLSAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90Pig3KSwg
cmVmZXJlbmNlLT5maW5kSWdub3JpbmdBU0NJSUNhc2UoZW1wdHkuZ2V0KCksIDgpKTsKLSAgICBF
WFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90Pig3KSwgcmVmZXJlbmNlLT5maW5kSWdub3JpbmdB
U0NJSUNhc2UoZW1wdHkuZ2V0KCksIDQyKSk7Ci0gICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNp
emVfdD4oNyksIHJlZmVyZW5jZS0+ZmluZElnbm9yaW5nQVNDSUlDYXNlKGVtcHR5LmdldCgpLCBz
dGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpKTsKKyAgICBhdXRvIHJlZmVyZW5j
ZSA9IHN0cmluZ0Zyb21VVEY4KCJBQkPDiUVGRyIpOworICAgIGF1dG8gZW1wdHkgPSBTdHJpbmdJ
bXBsOjpjcmVhdGUocmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCIiKSk7CisgICAgRVhQ
RUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oMCksIHJlZmVyZW5jZS0+ZmluZElnbm9yaW5nQVND
SUlDYXNlKGVtcHR5LnB0cigpKSk7CisgICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4o
MCksIHJlZmVyZW5jZS0+ZmluZElnbm9yaW5nQVNDSUlDYXNlKGVtcHR5LnB0cigpLCAwKSk7Cisg
ICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oMyksIHJlZmVyZW5jZS0+ZmluZElnbm9y
aW5nQVNDSUlDYXNlKGVtcHR5LnB0cigpLCAzKSk7CisgICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0
PHNpemVfdD4oNyksIHJlZmVyZW5jZS0+ZmluZElnbm9yaW5nQVNDSUlDYXNlKGVtcHR5LnB0cigp
LCA3KSk7CisgICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oNyksIHJlZmVyZW5jZS0+
ZmluZElnbm9yaW5nQVNDSUlDYXNlKGVtcHR5LnB0cigpLCA4KSk7CisgICAgRVhQRUNUX0VRKHN0
YXRpY19jYXN0PHNpemVfdD4oNyksIHJlZmVyZW5jZS0+ZmluZElnbm9yaW5nQVNDSUlDYXNlKGVt
cHR5LnB0cigpLCA0MikpOworICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDcpLCBy
ZWZlcmVuY2UtPmZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShlbXB0eS5wdHIoKSwgc3RkOjpudW1lcmlj
X2xpbWl0czx1bnNpZ25lZD46Om1heCgpKSk7CiB9CiAKIFRFU1QoV1RGLCBTdHJpbmdJbXBsRmlu
ZElnbm9yaW5nQVNDSUlDYXNlV2l0aFBhdHRlcm5Mb25nZXJUaGFuUmVmZXJlbmNlKQogewotICAg
IFJlZlB0cjxTdHJpbmdJbXBsPiByZWZlcmVuY2UgPSBzdHJpbmdGcm9tVVRGOCgiQUJDw4lFRkci
KTsKLSAgICBSZWZQdHI8U3RyaW5nSW1wbD4gcGF0dGVybiA9IHN0cmluZ0Zyb21VVEY4KCJYQUJD
w4lFRkciKTsKLSAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PihXVEY6Om5vdEZvdW5k
KSwgcmVmZXJlbmNlLT5maW5kSWdub3JpbmdBU0NJSUNhc2UocGF0dGVybi5nZXQoKSkpOwotICAg
IEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDEpLCBwYXR0ZXJuLT5maW5kSWdub3JpbmdB
U0NJSUNhc2UocmVmZXJlbmNlLmdldCgpKSk7CisgICAgYXV0byByZWZlcmVuY2UgPSBzdHJpbmdG
cm9tVVRGOCgiQUJDw4lFRkciKTsKKyAgICBhdXRvIHBhdHRlcm4gPSBzdHJpbmdGcm9tVVRGOCgi
WEFCQ8OJRUZHIik7CisgICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oV1RGOjpub3RG
b3VuZCksIHJlZmVyZW5jZS0+ZmluZElnbm9yaW5nQVNDSUlDYXNlKHBhdHRlcm4ucHRyKCkpKTsK
KyAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigxKSwgcGF0dGVybi0+ZmluZElnbm9y
aW5nQVNDSUlDYXNlKHJlZmVyZW5jZS5wdHIoKSkpOwogfQogCiBURVNUKFdURiwgU3RyaW5nSW1w
bFN0YXJ0c1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZUJhc2ljKQogewotICAgIFJlZlB0cjxTdHJpbmdJ
bXBsPiByZWZlcmVuY2UgPSBzdHJpbmdGcm9tVVRGOCgiYUJjw6lYIik7Ci0gICAgUmVmUHRyPFN0
cmluZ0ltcGw+IHJlZmVyZW5jZUVxdWl2YWxlbnQgPSBzdHJpbmdGcm9tVVRGOCgiQWJDw6l4Iik7
CisgICAgYXV0byByZWZlcmVuY2UgPSBzdHJpbmdGcm9tVVRGOCgiYUJjw6lYIik7CisgICAgYXV0
byByZWZlcmVuY2VFcXVpdmFsZW50ID0gc3RyaW5nRnJvbVVURjgoIkFiQ8OpeCIpOwogCiAgICAg
Ly8gSWRlbnRpdHkuCi0gICAgQVNTRVJUX1RSVUUocmVmZXJlbmNlLT5zdGFydHNXaXRoSWdub3Jp
bmdBU0NJSUNhc2UocmVmZXJlbmNlLmdldCgpKSk7Ci0gICAgQVNTRVJUX1RSVUUocmVmZXJlbmNl
LT5zdGFydHNXaXRoSWdub3JpbmdBU0NJSUNhc2UoKnJlZmVyZW5jZS5nZXQoKSkpOwotICAgIEFT
U0VSVF9UUlVFKHJlZmVyZW5jZS0+c3RhcnRzV2l0aElnbm9yaW5nQVNDSUlDYXNlKHJlZmVyZW5j
ZUVxdWl2YWxlbnQuZ2V0KCkpKTsKLSAgICBBU1NFUlRfVFJVRShyZWZlcmVuY2UtPnN0YXJ0c1dp
dGhJZ25vcmluZ0FTQ0lJQ2FzZSgqcmVmZXJlbmNlRXF1aXZhbGVudC5nZXQoKSkpOwotICAgIEFT
U0VSVF9UUlVFKHJlZmVyZW5jZUVxdWl2YWxlbnQtPnN0YXJ0c1dpdGhJZ25vcmluZ0FTQ0lJQ2Fz
ZShyZWZlcmVuY2UuZ2V0KCkpKTsKLSAgICBBU1NFUlRfVFJVRShyZWZlcmVuY2VFcXVpdmFsZW50
LT5zdGFydHNXaXRoSWdub3JpbmdBU0NJSUNhc2UoKnJlZmVyZW5jZS5nZXQoKSkpOwotICAgIEFT
U0VSVF9UUlVFKHJlZmVyZW5jZUVxdWl2YWxlbnQtPnN0YXJ0c1dpdGhJZ25vcmluZ0FTQ0lJQ2Fz
ZShyZWZlcmVuY2VFcXVpdmFsZW50LmdldCgpKSk7Ci0gICAgQVNTRVJUX1RSVUUocmVmZXJlbmNl
RXF1aXZhbGVudC0+c3RhcnRzV2l0aElnbm9yaW5nQVNDSUlDYXNlKCpyZWZlcmVuY2VFcXVpdmFs
ZW50LmdldCgpKSk7CisgICAgQVNTRVJUX1RSVUUocmVmZXJlbmNlLT5zdGFydHNXaXRoSWdub3Jp
bmdBU0NJSUNhc2UocmVmZXJlbmNlLnB0cigpKSk7CisgICAgQVNTRVJUX1RSVUUocmVmZXJlbmNl
LT5zdGFydHNXaXRoSWdub3JpbmdBU0NJSUNhc2UoKnJlZmVyZW5jZS5wdHIoKSkpOworICAgIEFT
U0VSVF9UUlVFKHJlZmVyZW5jZS0+c3RhcnRzV2l0aElnbm9yaW5nQVNDSUlDYXNlKHJlZmVyZW5j
ZUVxdWl2YWxlbnQucHRyKCkpKTsKKyAgICBBU1NFUlRfVFJVRShyZWZlcmVuY2UtPnN0YXJ0c1dp
dGhJZ25vcmluZ0FTQ0lJQ2FzZSgqcmVmZXJlbmNlRXF1aXZhbGVudC5wdHIoKSkpOworICAgIEFT
U0VSVF9UUlVFKHJlZmVyZW5jZUVxdWl2YWxlbnQtPnN0YXJ0c1dpdGhJZ25vcmluZ0FTQ0lJQ2Fz
ZShyZWZlcmVuY2UucHRyKCkpKTsKKyAgICBBU1NFUlRfVFJVRShyZWZlcmVuY2VFcXVpdmFsZW50
LT5zdGFydHNXaXRoSWdub3JpbmdBU0NJSUNhc2UoKnJlZmVyZW5jZS5wdHIoKSkpOworICAgIEFT
U0VSVF9UUlVFKHJlZmVyZW5jZUVxdWl2YWxlbnQtPnN0YXJ0c1dpdGhJZ25vcmluZ0FTQ0lJQ2Fz
ZShyZWZlcmVuY2VFcXVpdmFsZW50LnB0cigpKSk7CisgICAgQVNTRVJUX1RSVUUocmVmZXJlbmNl
RXF1aXZhbGVudC0+c3RhcnRzV2l0aElnbm9yaW5nQVNDSUlDYXNlKCpyZWZlcmVuY2VFcXVpdmFs
ZW50LnB0cigpKSk7CiAKICAgICAvLyBQcm9wZXIgcHJlZml4ZXMuCi0gICAgUmVmUHRyPFN0cmlu
Z0ltcGw+IGFMb3dlciA9IFN0cmluZ0ltcGw6OmNyZWF0ZUZyb21MaXRlcmFsKCJhIik7Ci0gICAg
QVNTRVJUX1RSVUUocmVmZXJlbmNlLT5zdGFydHNXaXRoSWdub3JpbmdBU0NJSUNhc2UoYUxvd2Vy
LmdldCgpKSk7Ci0gICAgQVNTRVJUX1RSVUUocmVmZXJlbmNlLT5zdGFydHNXaXRoSWdub3JpbmdB
U0NJSUNhc2UoKmFMb3dlci5nZXQoKSkpOwotICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBhVXBwZXIg
PSBTdHJpbmdJbXBsOjpjcmVhdGVGcm9tTGl0ZXJhbCgiQSIpOwotICAgIEFTU0VSVF9UUlVFKHJl
ZmVyZW5jZS0+c3RhcnRzV2l0aElnbm9yaW5nQVNDSUlDYXNlKGFVcHBlci5nZXQoKSkpOwotICAg
IEFTU0VSVF9UUlVFKHJlZmVyZW5jZS0+c3RhcnRzV2l0aElnbm9yaW5nQVNDSUlDYXNlKCphVXBw
ZXIuZ2V0KCkpKTsKLQotICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBhYmNMb3dlciA9IFN0cmluZ0lt
cGw6OmNyZWF0ZUZyb21MaXRlcmFsKCJhYmMiKTsKLSAgICBBU1NFUlRfVFJVRShyZWZlcmVuY2Ut
PnN0YXJ0c1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZShhYmNMb3dlci5nZXQoKSkpOwotICAgIEFTU0VS
VF9UUlVFKHJlZmVyZW5jZS0+c3RhcnRzV2l0aElnbm9yaW5nQVNDSUlDYXNlKCphYmNMb3dlci5n
ZXQoKSkpOwotICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBhYmNVcHBlciA9IFN0cmluZ0ltcGw6OmNy
ZWF0ZUZyb21MaXRlcmFsKCJBQkMiKTsKLSAgICBBU1NFUlRfVFJVRShyZWZlcmVuY2UtPnN0YXJ0
c1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZShhYmNVcHBlci5nZXQoKSkpOwotICAgIEFTU0VSVF9UUlVF
KHJlZmVyZW5jZS0+c3RhcnRzV2l0aElnbm9yaW5nQVNDSUlDYXNlKCphYmNVcHBlci5nZXQoKSkp
OwotCi0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IGFiY0FjY2VudExvd2VyID0gc3RyaW5nRnJvbVVU
RjgoImFiY8OpIik7Ci0gICAgQVNTRVJUX1RSVUUocmVmZXJlbmNlLT5zdGFydHNXaXRoSWdub3Jp
bmdBU0NJSUNhc2UoYWJjQWNjZW50TG93ZXIuZ2V0KCkpKTsKLSAgICBBU1NFUlRfVFJVRShyZWZl
cmVuY2UtPnN0YXJ0c1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZSgqYWJjQWNjZW50TG93ZXIuZ2V0KCkp
KTsKLSAgICBSZWZQdHI8U3RyaW5nSW1wbD4gYWJjQWNjZW50VXBwZXIgPSBzdHJpbmdGcm9tVVRG
OCgiQUJDw6kiKTsKLSAgICBBU1NFUlRfVFJVRShyZWZlcmVuY2UtPnN0YXJ0c1dpdGhJZ25vcmlu
Z0FTQ0lJQ2FzZShhYmNBY2NlbnRVcHBlci5nZXQoKSkpOwotICAgIEFTU0VSVF9UUlVFKHJlZmVy
ZW5jZS0+c3RhcnRzV2l0aElnbm9yaW5nQVNDSUlDYXNlKCphYmNBY2NlbnRVcHBlci5nZXQoKSkp
OworICAgIGF1dG8gYUxvd2VyID0gU3RyaW5nSW1wbDo6Y3JlYXRlRnJvbUxpdGVyYWwoImEiKTsK
KyAgICBBU1NFUlRfVFJVRShyZWZlcmVuY2UtPnN0YXJ0c1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZShh
TG93ZXIucHRyKCkpKTsKKyAgICBBU1NFUlRfVFJVRShyZWZlcmVuY2UtPnN0YXJ0c1dpdGhJZ25v
cmluZ0FTQ0lJQ2FzZSgqYUxvd2VyLnB0cigpKSk7CisgICAgYXV0byBhVXBwZXIgPSBTdHJpbmdJ
bXBsOjpjcmVhdGVGcm9tTGl0ZXJhbCgiQSIpOworICAgIEFTU0VSVF9UUlVFKHJlZmVyZW5jZS0+
c3RhcnRzV2l0aElnbm9yaW5nQVNDSUlDYXNlKGFVcHBlci5wdHIoKSkpOworICAgIEFTU0VSVF9U
UlVFKHJlZmVyZW5jZS0+c3RhcnRzV2l0aElnbm9yaW5nQVNDSUlDYXNlKCphVXBwZXIucHRyKCkp
KTsKKworICAgIGF1dG8gYWJjTG93ZXIgPSBTdHJpbmdJbXBsOjpjcmVhdGVGcm9tTGl0ZXJhbCgi
YWJjIik7CisgICAgQVNTRVJUX1RSVUUocmVmZXJlbmNlLT5zdGFydHNXaXRoSWdub3JpbmdBU0NJ
SUNhc2UoYWJjTG93ZXIucHRyKCkpKTsKKyAgICBBU1NFUlRfVFJVRShyZWZlcmVuY2UtPnN0YXJ0
c1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZSgqYWJjTG93ZXIucHRyKCkpKTsKKyAgICBhdXRvIGFiY1Vw
cGVyID0gU3RyaW5nSW1wbDo6Y3JlYXRlRnJvbUxpdGVyYWwoIkFCQyIpOworICAgIEFTU0VSVF9U
UlVFKHJlZmVyZW5jZS0+c3RhcnRzV2l0aElnbm9yaW5nQVNDSUlDYXNlKGFiY1VwcGVyLnB0cigp
KSk7CisgICAgQVNTRVJUX1RSVUUocmVmZXJlbmNlLT5zdGFydHNXaXRoSWdub3JpbmdBU0NJSUNh
c2UoKmFiY1VwcGVyLnB0cigpKSk7CisKKyAgICBhdXRvIGFiY0FjY2VudExvd2VyID0gc3RyaW5n
RnJvbVVURjgoImFiY8OpIik7CisgICAgQVNTRVJUX1RSVUUocmVmZXJlbmNlLT5zdGFydHNXaXRo
SWdub3JpbmdBU0NJSUNhc2UoYWJjQWNjZW50TG93ZXIucHRyKCkpKTsKKyAgICBBU1NFUlRfVFJV
RShyZWZlcmVuY2UtPnN0YXJ0c1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZSgqYWJjQWNjZW50TG93ZXIu
cHRyKCkpKTsKKyAgICBhdXRvIGFiY0FjY2VudFVwcGVyID0gc3RyaW5nRnJvbVVURjgoIkFCQ8Op
Iik7CisgICAgQVNTRVJUX1RSVUUocmVmZXJlbmNlLT5zdGFydHNXaXRoSWdub3JpbmdBU0NJSUNh
c2UoYWJjQWNjZW50VXBwZXIucHRyKCkpKTsKKyAgICBBU1NFUlRfVFJVRShyZWZlcmVuY2UtPnN0
YXJ0c1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZSgqYWJjQWNjZW50VXBwZXIucHRyKCkpKTsKIAogICAg
IC8vIE5lZ2F0aXZlIGNhc2VzLgotICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBkaWZmZXJlbnRGaXJz
dENoYXIgPSBzdHJpbmdGcm9tVVRGOCgiYkJjw6lYIik7Ci0gICAgUmVmUHRyPFN0cmluZ0ltcGw+
IGRpZmZlcmVudEZpcnN0Q2hhclByb3BlclByZWZpeCA9IHN0cmluZ0Zyb21VVEY4KCJDQmPDqSIp
OwotICAgIEFTU0VSVF9GQUxTRShyZWZlcmVuY2UtPnN0YXJ0c1dpdGhJZ25vcmluZ0FTQ0lJQ2Fz
ZShkaWZmZXJlbnRGaXJzdENoYXIuZ2V0KCkpKTsKLSAgICBBU1NFUlRfRkFMU0UocmVmZXJlbmNl
LT5zdGFydHNXaXRoSWdub3JpbmdBU0NJSUNhc2UoKmRpZmZlcmVudEZpcnN0Q2hhci5nZXQoKSkp
OwotICAgIEFTU0VSVF9GQUxTRShyZWZlcmVuY2UtPnN0YXJ0c1dpdGhJZ25vcmluZ0FTQ0lJQ2Fz
ZShkaWZmZXJlbnRGaXJzdENoYXJQcm9wZXJQcmVmaXguZ2V0KCkpKTsKLSAgICBBU1NFUlRfRkFM
U0UocmVmZXJlbmNlLT5zdGFydHNXaXRoSWdub3JpbmdBU0NJSUNhc2UoKmRpZmZlcmVudEZpcnN0
Q2hhclByb3BlclByZWZpeC5nZXQoKSkpOwotCi0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IHVwcGVy
Y2FzZUFjY2VudCA9IHN0cmluZ0Zyb21VVEY4KCJhQmPDiVgiKTsKLSAgICBSZWZQdHI8U3RyaW5n
SW1wbD4gdXBwZXJjYXNlQWNjZW50UHJvcGVyUHJlZml4ID0gc3RyaW5nRnJvbVVURjgoImFCY8OJ
WCIpOwotICAgIEFTU0VSVF9GQUxTRShyZWZlcmVuY2UtPnN0YXJ0c1dpdGhJZ25vcmluZ0FTQ0lJ
Q2FzZSh1cHBlcmNhc2VBY2NlbnQuZ2V0KCkpKTsKLSAgICBBU1NFUlRfRkFMU0UocmVmZXJlbmNl
LT5zdGFydHNXaXRoSWdub3JpbmdBU0NJSUNhc2UoKnVwcGVyY2FzZUFjY2VudC5nZXQoKSkpOwot
ICAgIEFTU0VSVF9GQUxTRShyZWZlcmVuY2UtPnN0YXJ0c1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZSh1
cHBlcmNhc2VBY2NlbnRQcm9wZXJQcmVmaXguZ2V0KCkpKTsKLSAgICBBU1NFUlRfRkFMU0UocmVm
ZXJlbmNlLT5zdGFydHNXaXRoSWdub3JpbmdBU0NJSUNhc2UoKnVwcGVyY2FzZUFjY2VudFByb3Bl
clByZWZpeC5nZXQoKSkpOworICAgIGF1dG8gZGlmZmVyZW50Rmlyc3RDaGFyID0gc3RyaW5nRnJv
bVVURjgoImJCY8OpWCIpOworICAgIGF1dG8gZGlmZmVyZW50Rmlyc3RDaGFyUHJvcGVyUHJlZml4
ID0gc3RyaW5nRnJvbVVURjgoIkNCY8OpIik7CisgICAgQVNTRVJUX0ZBTFNFKHJlZmVyZW5jZS0+
c3RhcnRzV2l0aElnbm9yaW5nQVNDSUlDYXNlKGRpZmZlcmVudEZpcnN0Q2hhci5wdHIoKSkpOwor
ICAgIEFTU0VSVF9GQUxTRShyZWZlcmVuY2UtPnN0YXJ0c1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZSgq
ZGlmZmVyZW50Rmlyc3RDaGFyLnB0cigpKSk7CisgICAgQVNTRVJUX0ZBTFNFKHJlZmVyZW5jZS0+
c3RhcnRzV2l0aElnbm9yaW5nQVNDSUlDYXNlKGRpZmZlcmVudEZpcnN0Q2hhclByb3BlclByZWZp
eC5wdHIoKSkpOworICAgIEFTU0VSVF9GQUxTRShyZWZlcmVuY2UtPnN0YXJ0c1dpdGhJZ25vcmlu
Z0FTQ0lJQ2FzZSgqZGlmZmVyZW50Rmlyc3RDaGFyUHJvcGVyUHJlZml4LnB0cigpKSk7CisKKyAg
ICBhdXRvIHVwcGVyY2FzZUFjY2VudCA9IHN0cmluZ0Zyb21VVEY4KCJhQmPDiVgiKTsKKyAgICBh
dXRvIHVwcGVyY2FzZUFjY2VudFByb3BlclByZWZpeCA9IHN0cmluZ0Zyb21VVEY4KCJhQmPDiVgi
KTsKKyAgICBBU1NFUlRfRkFMU0UocmVmZXJlbmNlLT5zdGFydHNXaXRoSWdub3JpbmdBU0NJSUNh
c2UodXBwZXJjYXNlQWNjZW50LnB0cigpKSk7CisgICAgQVNTRVJUX0ZBTFNFKHJlZmVyZW5jZS0+
c3RhcnRzV2l0aElnbm9yaW5nQVNDSUlDYXNlKCp1cHBlcmNhc2VBY2NlbnQucHRyKCkpKTsKKyAg
ICBBU1NFUlRfRkFMU0UocmVmZXJlbmNlLT5zdGFydHNXaXRoSWdub3JpbmdBU0NJSUNhc2UodXBw
ZXJjYXNlQWNjZW50UHJvcGVyUHJlZml4LnB0cigpKSk7CisgICAgQVNTRVJUX0ZBTFNFKHJlZmVy
ZW5jZS0+c3RhcnRzV2l0aElnbm9yaW5nQVNDSUlDYXNlKCp1cHBlcmNhc2VBY2NlbnRQcm9wZXJQ
cmVmaXgucHRyKCkpKTsKIH0KIAogVEVTVChXVEYsIFN0cmluZ0ltcGxTdGFydHNXaXRoSWdub3Jp
bmdBU0NJSUNhc2VXaXRoTnVsbCkKIHsKLSAgICBSZWZQdHI8U3RyaW5nSW1wbD4gcmVmZXJlbmNl
ID0gU3RyaW5nSW1wbDo6Y3JlYXRlRnJvbUxpdGVyYWwoImFCY0RlRkciKTsKKyAgICBhdXRvIHJl
ZmVyZW5jZSA9IFN0cmluZ0ltcGw6OmNyZWF0ZUZyb21MaXRlcmFsKCJhQmNEZUZHIik7CiAgICAg
QVNTRVJUX0ZBTFNFKHJlZmVyZW5jZS0+c3RhcnRzV2l0aElnbm9yaW5nQVNDSUlDYXNlKG51bGxw
dHIpKTsKIAotICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBlbXB0eSA9IFN0cmluZ0ltcGw6OmNyZWF0
ZShyZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIiIpKTsKKyAgICBhdXRvIGVtcHR5ID0g
U3RyaW5nSW1wbDo6Y3JlYXRlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiIikpOwog
ICAgIEFTU0VSVF9GQUxTRShlbXB0eS0+c3RhcnRzV2l0aElnbm9yaW5nQVNDSUlDYXNlKG51bGxw
dHIpKTsKIH0KIAogVEVTVChXVEYsIFN0cmluZ0ltcGxTdGFydHNXaXRoSWdub3JpbmdBU0NJSUNh
c2VXaXRoRW1wdHkpCiB7Ci0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IHJlZmVyZW5jZSA9IFN0cmlu
Z0ltcGw6OmNyZWF0ZUZyb21MaXRlcmFsKCJhQmNEZUZHIik7Ci0gICAgUmVmUHRyPFN0cmluZ0lt
cGw+IGVtcHR5ID0gU3RyaW5nSW1wbDo6Y3JlYXRlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENo
YXIqPigiIikpOwotICAgIEFTU0VSVF9UUlVFKHJlZmVyZW5jZS0+c3RhcnRzV2l0aElnbm9yaW5n
QVNDSUlDYXNlKGVtcHR5LmdldCgpKSk7Ci0gICAgQVNTRVJUX1RSVUUocmVmZXJlbmNlLT5zdGFy
dHNXaXRoSWdub3JpbmdBU0NJSUNhc2UoKmVtcHR5LmdldCgpKSk7Ci0gICAgQVNTRVJUX1RSVUUo
ZW1wdHktPnN0YXJ0c1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZShlbXB0eS5nZXQoKSkpOwotICAgIEFT
U0VSVF9UUlVFKGVtcHR5LT5zdGFydHNXaXRoSWdub3JpbmdBU0NJSUNhc2UoKmVtcHR5LmdldCgp
KSk7Ci0gICAgQVNTRVJUX0ZBTFNFKGVtcHR5LT5zdGFydHNXaXRoSWdub3JpbmdBU0NJSUNhc2Uo
cmVmZXJlbmNlLmdldCgpKSk7Ci0gICAgQVNTRVJUX0ZBTFNFKGVtcHR5LT5zdGFydHNXaXRoSWdu
b3JpbmdBU0NJSUNhc2UoKnJlZmVyZW5jZS5nZXQoKSkpOworICAgIGF1dG8gcmVmZXJlbmNlID0g
U3RyaW5nSW1wbDo6Y3JlYXRlRnJvbUxpdGVyYWwoImFCY0RlRkciKTsKKyAgICBhdXRvIGVtcHR5
ID0gU3RyaW5nSW1wbDo6Y3JlYXRlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiIikp
OworICAgIEFTU0VSVF9UUlVFKHJlZmVyZW5jZS0+c3RhcnRzV2l0aElnbm9yaW5nQVNDSUlDYXNl
KGVtcHR5LnB0cigpKSk7CisgICAgQVNTRVJUX1RSVUUocmVmZXJlbmNlLT5zdGFydHNXaXRoSWdu
b3JpbmdBU0NJSUNhc2UoKmVtcHR5LnB0cigpKSk7CisgICAgQVNTRVJUX1RSVUUoZW1wdHktPnN0
YXJ0c1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZShlbXB0eS5wdHIoKSkpOworICAgIEFTU0VSVF9UUlVF
KGVtcHR5LT5zdGFydHNXaXRoSWdub3JpbmdBU0NJSUNhc2UoKmVtcHR5LnB0cigpKSk7CisgICAg
QVNTRVJUX0ZBTFNFKGVtcHR5LT5zdGFydHNXaXRoSWdub3JpbmdBU0NJSUNhc2UocmVmZXJlbmNl
LnB0cigpKSk7CisgICAgQVNTRVJUX0ZBTFNFKGVtcHR5LT5zdGFydHNXaXRoSWdub3JpbmdBU0NJ
SUNhc2UoKnJlZmVyZW5jZS5wdHIoKSkpOwogfQogCiBURVNUKFdURiwgU3RhcnRzV2l0aExldHRl
cnNJZ25vcmluZ0FTQ0lJQ2FzZSkKQEAgLTQ0MSwxMDIgKzQ0MSwxMDIgQEAgVEVTVChXVEYsIFN0
YXJ0c1dpdGhMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UpCiAKIFRFU1QoV1RGLCBTdHJpbmdJbXBs
RW5kc1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZUJhc2ljKQogewotICAgIFJlZlB0cjxTdHJpbmdJbXBs
PiByZWZlcmVuY2UgPSBzdHJpbmdGcm9tVVRGOCgiWMOJQ2JBIik7Ci0gICAgUmVmUHRyPFN0cmlu
Z0ltcGw+IHJlZmVyZW5jZUVxdWl2YWxlbnQgPSBzdHJpbmdGcm9tVVRGOCgieMOJY0JhIik7Cisg
ICAgYXV0byByZWZlcmVuY2UgPSBzdHJpbmdGcm9tVVRGOCgiWMOJQ2JBIik7CisgICAgYXV0byBy
ZWZlcmVuY2VFcXVpdmFsZW50ID0gc3RyaW5nRnJvbVVURjgoInjDiWNCYSIpOwogCiAgICAgLy8g
SWRlbnRpdHkuCi0gICAgQVNTRVJUX1RSVUUocmVmZXJlbmNlLT5lbmRzV2l0aElnbm9yaW5nQVND
SUlDYXNlKHJlZmVyZW5jZS5nZXQoKSkpOwotICAgIEFTU0VSVF9UUlVFKHJlZmVyZW5jZS0+ZW5k
c1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZSgqcmVmZXJlbmNlLmdldCgpKSk7Ci0gICAgQVNTRVJUX1RS
VUUocmVmZXJlbmNlLT5lbmRzV2l0aElnbm9yaW5nQVNDSUlDYXNlKHJlZmVyZW5jZUVxdWl2YWxl
bnQuZ2V0KCkpKTsKLSAgICBBU1NFUlRfVFJVRShyZWZlcmVuY2UtPmVuZHNXaXRoSWdub3JpbmdB
U0NJSUNhc2UoKnJlZmVyZW5jZUVxdWl2YWxlbnQuZ2V0KCkpKTsKLSAgICBBU1NFUlRfVFJVRShy
ZWZlcmVuY2VFcXVpdmFsZW50LT5lbmRzV2l0aElnbm9yaW5nQVNDSUlDYXNlKHJlZmVyZW5jZS5n
ZXQoKSkpOwotICAgIEFTU0VSVF9UUlVFKHJlZmVyZW5jZUVxdWl2YWxlbnQtPmVuZHNXaXRoSWdu
b3JpbmdBU0NJSUNhc2UoKnJlZmVyZW5jZS5nZXQoKSkpOwotICAgIEFTU0VSVF9UUlVFKHJlZmVy
ZW5jZUVxdWl2YWxlbnQtPmVuZHNXaXRoSWdub3JpbmdBU0NJSUNhc2UocmVmZXJlbmNlRXF1aXZh
bGVudC5nZXQoKSkpOwotICAgIEFTU0VSVF9UUlVFKHJlZmVyZW5jZUVxdWl2YWxlbnQtPmVuZHNX
aXRoSWdub3JpbmdBU0NJSUNhc2UoKnJlZmVyZW5jZUVxdWl2YWxlbnQuZ2V0KCkpKTsKKyAgICBB
U1NFUlRfVFJVRShyZWZlcmVuY2UtPmVuZHNXaXRoSWdub3JpbmdBU0NJSUNhc2UocmVmZXJlbmNl
LnB0cigpKSk7CisgICAgQVNTRVJUX1RSVUUocmVmZXJlbmNlLT5lbmRzV2l0aElnbm9yaW5nQVND
SUlDYXNlKCpyZWZlcmVuY2UucHRyKCkpKTsKKyAgICBBU1NFUlRfVFJVRShyZWZlcmVuY2UtPmVu
ZHNXaXRoSWdub3JpbmdBU0NJSUNhc2UocmVmZXJlbmNlRXF1aXZhbGVudC5wdHIoKSkpOworICAg
IEFTU0VSVF9UUlVFKHJlZmVyZW5jZS0+ZW5kc1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZSgqcmVmZXJl
bmNlRXF1aXZhbGVudC5wdHIoKSkpOworICAgIEFTU0VSVF9UUlVFKHJlZmVyZW5jZUVxdWl2YWxl
bnQtPmVuZHNXaXRoSWdub3JpbmdBU0NJSUNhc2UocmVmZXJlbmNlLnB0cigpKSk7CisgICAgQVNT
RVJUX1RSVUUocmVmZXJlbmNlRXF1aXZhbGVudC0+ZW5kc1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZSgq
cmVmZXJlbmNlLnB0cigpKSk7CisgICAgQVNTRVJUX1RSVUUocmVmZXJlbmNlRXF1aXZhbGVudC0+
ZW5kc1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZShyZWZlcmVuY2VFcXVpdmFsZW50LnB0cigpKSk7Cisg
ICAgQVNTRVJUX1RSVUUocmVmZXJlbmNlRXF1aXZhbGVudC0+ZW5kc1dpdGhJZ25vcmluZ0FTQ0lJ
Q2FzZSgqcmVmZXJlbmNlRXF1aXZhbGVudC5wdHIoKSkpOwogCiAgICAgLy8gUHJvcGVyIHN1ZmZp
eGVzLgotICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBhTG93ZXIgPSBTdHJpbmdJbXBsOjpjcmVhdGVG
cm9tTGl0ZXJhbCgiYSIpOwotICAgIEFTU0VSVF9UUlVFKHJlZmVyZW5jZS0+ZW5kc1dpdGhJZ25v
cmluZ0FTQ0lJQ2FzZShhTG93ZXIuZ2V0KCkpKTsKLSAgICBBU1NFUlRfVFJVRShyZWZlcmVuY2Ut
PmVuZHNXaXRoSWdub3JpbmdBU0NJSUNhc2UoKmFMb3dlci5nZXQoKSkpOwotICAgIFJlZlB0cjxT
dHJpbmdJbXBsPiBhVXBwZXIgPSBTdHJpbmdJbXBsOjpjcmVhdGVGcm9tTGl0ZXJhbCgiYSIpOwot
ICAgIEFTU0VSVF9UUlVFKHJlZmVyZW5jZS0+ZW5kc1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZShhVXBw
ZXIuZ2V0KCkpKTsKLSAgICBBU1NFUlRfVFJVRShyZWZlcmVuY2UtPmVuZHNXaXRoSWdub3JpbmdB
U0NJSUNhc2UoKmFVcHBlci5nZXQoKSkpOwotCi0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IGFiY0xv
d2VyID0gU3RyaW5nSW1wbDo6Y3JlYXRlRnJvbUxpdGVyYWwoImNiYSIpOwotICAgIEFTU0VSVF9U
UlVFKHJlZmVyZW5jZS0+ZW5kc1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZShhYmNMb3dlci5nZXQoKSkp
OwotICAgIEFTU0VSVF9UUlVFKHJlZmVyZW5jZS0+ZW5kc1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZSgq
YWJjTG93ZXIuZ2V0KCkpKTsKLSAgICBSZWZQdHI8U3RyaW5nSW1wbD4gYWJjVXBwZXIgPSBTdHJp
bmdJbXBsOjpjcmVhdGVGcm9tTGl0ZXJhbCgiQ0JBIik7Ci0gICAgQVNTRVJUX1RSVUUocmVmZXJl
bmNlLT5lbmRzV2l0aElnbm9yaW5nQVNDSUlDYXNlKGFiY1VwcGVyLmdldCgpKSk7Ci0gICAgQVNT
RVJUX1RSVUUocmVmZXJlbmNlLT5lbmRzV2l0aElnbm9yaW5nQVNDSUlDYXNlKCphYmNVcHBlci5n
ZXQoKSkpOwotCi0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IGFiY0FjY2VudExvd2VyID0gc3RyaW5n
RnJvbVVURjgoIsOJY2JhIik7Ci0gICAgQVNTRVJUX1RSVUUocmVmZXJlbmNlLT5lbmRzV2l0aEln
bm9yaW5nQVNDSUlDYXNlKGFiY0FjY2VudExvd2VyLmdldCgpKSk7Ci0gICAgQVNTRVJUX1RSVUUo
cmVmZXJlbmNlLT5lbmRzV2l0aElnbm9yaW5nQVNDSUlDYXNlKCphYmNBY2NlbnRMb3dlci5nZXQo
KSkpOwotICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBhYmNBY2NlbnRVcHBlciA9IHN0cmluZ0Zyb21V
VEY4KCLDiUNCQSIpOwotICAgIEFTU0VSVF9UUlVFKHJlZmVyZW5jZS0+ZW5kc1dpdGhJZ25vcmlu
Z0FTQ0lJQ2FzZShhYmNBY2NlbnRVcHBlci5nZXQoKSkpOwotICAgIEFTU0VSVF9UUlVFKHJlZmVy
ZW5jZS0+ZW5kc1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZSgqYWJjQWNjZW50VXBwZXIuZ2V0KCkpKTsK
KyAgICBhdXRvIGFMb3dlciA9IFN0cmluZ0ltcGw6OmNyZWF0ZUZyb21MaXRlcmFsKCJhIik7Cisg
ICAgQVNTRVJUX1RSVUUocmVmZXJlbmNlLT5lbmRzV2l0aElnbm9yaW5nQVNDSUlDYXNlKGFMb3dl
ci5wdHIoKSkpOworICAgIEFTU0VSVF9UUlVFKHJlZmVyZW5jZS0+ZW5kc1dpdGhJZ25vcmluZ0FT
Q0lJQ2FzZSgqYUxvd2VyLnB0cigpKSk7CisgICAgYXV0byBhVXBwZXIgPSBTdHJpbmdJbXBsOjpj
cmVhdGVGcm9tTGl0ZXJhbCgiYSIpOworICAgIEFTU0VSVF9UUlVFKHJlZmVyZW5jZS0+ZW5kc1dp
dGhJZ25vcmluZ0FTQ0lJQ2FzZShhVXBwZXIucHRyKCkpKTsKKyAgICBBU1NFUlRfVFJVRShyZWZl
cmVuY2UtPmVuZHNXaXRoSWdub3JpbmdBU0NJSUNhc2UoKmFVcHBlci5wdHIoKSkpOworCisgICAg
YXV0byBhYmNMb3dlciA9IFN0cmluZ0ltcGw6OmNyZWF0ZUZyb21MaXRlcmFsKCJjYmEiKTsKKyAg
ICBBU1NFUlRfVFJVRShyZWZlcmVuY2UtPmVuZHNXaXRoSWdub3JpbmdBU0NJSUNhc2UoYWJjTG93
ZXIucHRyKCkpKTsKKyAgICBBU1NFUlRfVFJVRShyZWZlcmVuY2UtPmVuZHNXaXRoSWdub3JpbmdB
U0NJSUNhc2UoKmFiY0xvd2VyLnB0cigpKSk7CisgICAgYXV0byBhYmNVcHBlciA9IFN0cmluZ0lt
cGw6OmNyZWF0ZUZyb21MaXRlcmFsKCJDQkEiKTsKKyAgICBBU1NFUlRfVFJVRShyZWZlcmVuY2Ut
PmVuZHNXaXRoSWdub3JpbmdBU0NJSUNhc2UoYWJjVXBwZXIucHRyKCkpKTsKKyAgICBBU1NFUlRf
VFJVRShyZWZlcmVuY2UtPmVuZHNXaXRoSWdub3JpbmdBU0NJSUNhc2UoKmFiY1VwcGVyLnB0cigp
KSk7CisKKyAgICBhdXRvIGFiY0FjY2VudExvd2VyID0gc3RyaW5nRnJvbVVURjgoIsOJY2JhIik7
CisgICAgQVNTRVJUX1RSVUUocmVmZXJlbmNlLT5lbmRzV2l0aElnbm9yaW5nQVNDSUlDYXNlKGFi
Y0FjY2VudExvd2VyLnB0cigpKSk7CisgICAgQVNTRVJUX1RSVUUocmVmZXJlbmNlLT5lbmRzV2l0
aElnbm9yaW5nQVNDSUlDYXNlKCphYmNBY2NlbnRMb3dlci5wdHIoKSkpOworICAgIGF1dG8gYWJj
QWNjZW50VXBwZXIgPSBzdHJpbmdGcm9tVVRGOCgiw4lDQkEiKTsKKyAgICBBU1NFUlRfVFJVRShy
ZWZlcmVuY2UtPmVuZHNXaXRoSWdub3JpbmdBU0NJSUNhc2UoYWJjQWNjZW50VXBwZXIucHRyKCkp
KTsKKyAgICBBU1NFUlRfVFJVRShyZWZlcmVuY2UtPmVuZHNXaXRoSWdub3JpbmdBU0NJSUNhc2Uo
KmFiY0FjY2VudFVwcGVyLnB0cigpKSk7CiAKICAgICAvLyBOZWdhdGl2ZSBjYXNlcy4KLSAgICBS
ZWZQdHI8U3RyaW5nSW1wbD4gZGlmZmVyZW50TGFzdENoYXIgPSBzdHJpbmdGcm9tVVRGOCgiWMOJ
Q2JCIik7Ci0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IGRpZmZlcmVudExhc3RDaGFyUHJvcGVyU3Vm
Zml4ID0gc3RyaW5nRnJvbVVURjgoIsOJQ2JiIik7Ci0gICAgQVNTRVJUX0ZBTFNFKHJlZmVyZW5j
ZS0+ZW5kc1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZShkaWZmZXJlbnRMYXN0Q2hhci5nZXQoKSkpOwot
ICAgIEFTU0VSVF9GQUxTRShyZWZlcmVuY2UtPmVuZHNXaXRoSWdub3JpbmdBU0NJSUNhc2UoKmRp
ZmZlcmVudExhc3RDaGFyLmdldCgpKSk7Ci0gICAgQVNTRVJUX0ZBTFNFKHJlZmVyZW5jZS0+ZW5k
c1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZShkaWZmZXJlbnRMYXN0Q2hhclByb3BlclN1ZmZpeC5nZXQo
KSkpOwotICAgIEFTU0VSVF9GQUxTRShyZWZlcmVuY2UtPmVuZHNXaXRoSWdub3JpbmdBU0NJSUNh
c2UoKmRpZmZlcmVudExhc3RDaGFyUHJvcGVyU3VmZml4LmdldCgpKSk7Ci0KLSAgICBSZWZQdHI8
U3RyaW5nSW1wbD4gbG93ZXJjYXNlQWNjZW50ID0gc3RyaW5nRnJvbVVURjgoImFCY8OpWCIpOwot
ICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBsb3dlcmFzZUFjY2VudFByb3BlclN1ZmZpeCA9IHN0cmlu
Z0Zyb21VVEY4KCJhQmPDqVgiKTsKLSAgICBBU1NFUlRfRkFMU0UocmVmZXJlbmNlLT5lbmRzV2l0
aElnbm9yaW5nQVNDSUlDYXNlKGxvd2VyY2FzZUFjY2VudC5nZXQoKSkpOwotICAgIEFTU0VSVF9G
QUxTRShyZWZlcmVuY2UtPmVuZHNXaXRoSWdub3JpbmdBU0NJSUNhc2UoKmxvd2VyY2FzZUFjY2Vu
dC5nZXQoKSkpOwotICAgIEFTU0VSVF9GQUxTRShyZWZlcmVuY2UtPmVuZHNXaXRoSWdub3JpbmdB
U0NJSUNhc2UobG93ZXJhc2VBY2NlbnRQcm9wZXJTdWZmaXguZ2V0KCkpKTsKLSAgICBBU1NFUlRf
RkFMU0UocmVmZXJlbmNlLT5lbmRzV2l0aElnbm9yaW5nQVNDSUlDYXNlKCpsb3dlcmFzZUFjY2Vu
dFByb3BlclN1ZmZpeC5nZXQoKSkpOworICAgIGF1dG8gZGlmZmVyZW50TGFzdENoYXIgPSBzdHJp
bmdGcm9tVVRGOCgiWMOJQ2JCIik7CisgICAgYXV0byBkaWZmZXJlbnRMYXN0Q2hhclByb3BlclN1
ZmZpeCA9IHN0cmluZ0Zyb21VVEY4KCLDiUNiYiIpOworICAgIEFTU0VSVF9GQUxTRShyZWZlcmVu
Y2UtPmVuZHNXaXRoSWdub3JpbmdBU0NJSUNhc2UoZGlmZmVyZW50TGFzdENoYXIucHRyKCkpKTsK
KyAgICBBU1NFUlRfRkFMU0UocmVmZXJlbmNlLT5lbmRzV2l0aElnbm9yaW5nQVNDSUlDYXNlKCpk
aWZmZXJlbnRMYXN0Q2hhci5wdHIoKSkpOworICAgIEFTU0VSVF9GQUxTRShyZWZlcmVuY2UtPmVu
ZHNXaXRoSWdub3JpbmdBU0NJSUNhc2UoZGlmZmVyZW50TGFzdENoYXJQcm9wZXJTdWZmaXgucHRy
KCkpKTsKKyAgICBBU1NFUlRfRkFMU0UocmVmZXJlbmNlLT5lbmRzV2l0aElnbm9yaW5nQVNDSUlD
YXNlKCpkaWZmZXJlbnRMYXN0Q2hhclByb3BlclN1ZmZpeC5wdHIoKSkpOworCisgICAgYXV0byBs
b3dlcmNhc2VBY2NlbnQgPSBzdHJpbmdGcm9tVVRGOCgiYUJjw6lYIik7CisgICAgYXV0byBsb3dl
cmFzZUFjY2VudFByb3BlclN1ZmZpeCA9IHN0cmluZ0Zyb21VVEY4KCJhQmPDqVgiKTsKKyAgICBB
U1NFUlRfRkFMU0UocmVmZXJlbmNlLT5lbmRzV2l0aElnbm9yaW5nQVNDSUlDYXNlKGxvd2VyY2Fz
ZUFjY2VudC5wdHIoKSkpOworICAgIEFTU0VSVF9GQUxTRShyZWZlcmVuY2UtPmVuZHNXaXRoSWdu
b3JpbmdBU0NJSUNhc2UoKmxvd2VyY2FzZUFjY2VudC5wdHIoKSkpOworICAgIEFTU0VSVF9GQUxT
RShyZWZlcmVuY2UtPmVuZHNXaXRoSWdub3JpbmdBU0NJSUNhc2UobG93ZXJhc2VBY2NlbnRQcm9w
ZXJTdWZmaXgucHRyKCkpKTsKKyAgICBBU1NFUlRfRkFMU0UocmVmZXJlbmNlLT5lbmRzV2l0aEln
bm9yaW5nQVNDSUlDYXNlKCpsb3dlcmFzZUFjY2VudFByb3BlclN1ZmZpeC5wdHIoKSkpOwogfQog
CiBURVNUKFdURiwgU3RyaW5nSW1wbEVuZHNXaXRoSWdub3JpbmdBU0NJSUNhc2VXaXRoTnVsbCkK
IHsKLSAgICBSZWZQdHI8U3RyaW5nSW1wbD4gcmVmZXJlbmNlID0gU3RyaW5nSW1wbDo6Y3JlYXRl
RnJvbUxpdGVyYWwoImFCY0RlRkciKTsKKyAgICBhdXRvIHJlZmVyZW5jZSA9IFN0cmluZ0ltcGw6
OmNyZWF0ZUZyb21MaXRlcmFsKCJhQmNEZUZHIik7CiAgICAgQVNTRVJUX0ZBTFNFKHJlZmVyZW5j
ZS0+ZW5kc1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZShudWxscHRyKSk7CiAKLSAgICBSZWZQdHI8U3Ry
aW5nSW1wbD4gZW1wdHkgPSBTdHJpbmdJbXBsOjpjcmVhdGUocmVpbnRlcnByZXRfY2FzdDxjb25z
dCBMQ2hhcio+KCIiKSk7CisgICAgYXV0byBlbXB0eSA9IFN0cmluZ0ltcGw6OmNyZWF0ZShyZWlu
dGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIiIpKTsKICAgICBBU1NFUlRfRkFMU0UoZW1wdHkt
PmVuZHNXaXRoSWdub3JpbmdBU0NJSUNhc2UobnVsbHB0cikpOwogfQogCiBURVNUKFdURiwgU3Ry
aW5nSW1wbEVuZHNXaXRoSWdub3JpbmdBU0NJSUNhc2VXaXRoRW1wdHkpCiB7Ci0gICAgUmVmUHRy
PFN0cmluZ0ltcGw+IHJlZmVyZW5jZSA9IFN0cmluZ0ltcGw6OmNyZWF0ZUZyb21MaXRlcmFsKCJh
QmNEZUZHIik7Ci0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IGVtcHR5ID0gU3RyaW5nSW1wbDo6Y3Jl
YXRlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiIikpOwotICAgIEFTU0VSVF9UUlVF
KHJlZmVyZW5jZS0+ZW5kc1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZShlbXB0eS5nZXQoKSkpOwotICAg
IEFTU0VSVF9UUlVFKHJlZmVyZW5jZS0+ZW5kc1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZSgqZW1wdHku
Z2V0KCkpKTsKLSAgICBBU1NFUlRfVFJVRShlbXB0eS0+ZW5kc1dpdGhJZ25vcmluZ0FTQ0lJQ2Fz
ZShlbXB0eS5nZXQoKSkpOwotICAgIEFTU0VSVF9UUlVFKGVtcHR5LT5lbmRzV2l0aElnbm9yaW5n
QVNDSUlDYXNlKCplbXB0eS5nZXQoKSkpOwotICAgIEFTU0VSVF9GQUxTRShlbXB0eS0+ZW5kc1dp
dGhJZ25vcmluZ0FTQ0lJQ2FzZShyZWZlcmVuY2UuZ2V0KCkpKTsKLSAgICBBU1NFUlRfRkFMU0Uo
ZW1wdHktPmVuZHNXaXRoSWdub3JpbmdBU0NJSUNhc2UoKnJlZmVyZW5jZS5nZXQoKSkpOworICAg
IGF1dG8gcmVmZXJlbmNlID0gU3RyaW5nSW1wbDo6Y3JlYXRlRnJvbUxpdGVyYWwoImFCY0RlRkci
KTsKKyAgICBhdXRvIGVtcHR5ID0gU3RyaW5nSW1wbDo6Y3JlYXRlKHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgTENoYXIqPigiIikpOworICAgIEFTU0VSVF9UUlVFKHJlZmVyZW5jZS0+ZW5kc1dpdGhJ
Z25vcmluZ0FTQ0lJQ2FzZShlbXB0eS5wdHIoKSkpOworICAgIEFTU0VSVF9UUlVFKHJlZmVyZW5j
ZS0+ZW5kc1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZSgqZW1wdHkucHRyKCkpKTsKKyAgICBBU1NFUlRf
VFJVRShlbXB0eS0+ZW5kc1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZShlbXB0eS5wdHIoKSkpOworICAg
IEFTU0VSVF9UUlVFKGVtcHR5LT5lbmRzV2l0aElnbm9yaW5nQVNDSUlDYXNlKCplbXB0eS5wdHIo
KSkpOworICAgIEFTU0VSVF9GQUxTRShlbXB0eS0+ZW5kc1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZShy
ZWZlcmVuY2UucHRyKCkpKTsKKyAgICBBU1NFUlRfRkFMU0UoZW1wdHktPmVuZHNXaXRoSWdub3Jp
bmdBU0NJSUNhc2UoKnJlZmVyZW5jZS5wdHIoKSkpOwogfQogCiBURVNUKFdURiwgU3RyaW5nSW1w
bENyZWF0ZU51bGxTeW1ib2wpCiB7Ci0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IHJlZmVyZW5jZSA9
IFN0cmluZ0ltcGw6OmNyZWF0ZU51bGxTeW1ib2woKTsKKyAgICBhdXRvIHJlZmVyZW5jZSA9IFN0
cmluZ0ltcGw6OmNyZWF0ZU51bGxTeW1ib2woKTsKICAgICBBU1NFUlRfVFJVRShyZWZlcmVuY2Ut
PmlzU3ltYm9sKCkpOwogICAgIEFTU0VSVF9UUlVFKHJlZmVyZW5jZS0+aXNOdWxsU3ltYm9sKCkp
OwogICAgIEFTU0VSVF9GQUxTRShyZWZlcmVuY2UtPmlzQXRvbWljKCkpOwogICAgIEFTU0VSVF9F
USgwdSwgcmVmZXJlbmNlLT5sZW5ndGgoKSk7Ci0gICAgQVNTRVJUX1RSVUUoZXF1YWwocmVmZXJl
bmNlLmdldCgpLCAiIikpOworICAgIEFTU0VSVF9UUlVFKGVxdWFsKHJlZmVyZW5jZS5wdHIoKSwg
IiIpKTsKIH0KIAogVEVTVChXVEYsIFN0cmluZ0ltcGxDcmVhdGVTeW1ib2wpCiB7Ci0gICAgUmVm
UHRyPFN0cmluZ0ltcGw+IG9yaWdpbmFsID0gc3RyaW5nRnJvbVVURjgoIm9yaWdpbmFsIik7Ci0g
ICAgUmVmUHRyPFN0cmluZ0ltcGw+IHJlZmVyZW5jZSA9IFN0cmluZ0ltcGw6OmNyZWF0ZVN5bWJv
bChvcmlnaW5hbCk7CisgICAgYXV0byBvcmlnaW5hbCA9IHN0cmluZ0Zyb21VVEY4KCJvcmlnaW5h
bCIpOworICAgIGF1dG8gcmVmZXJlbmNlID0gU3RyaW5nSW1wbDo6Y3JlYXRlU3ltYm9sKG9yaWdp
bmFsKTsKICAgICBBU1NFUlRfVFJVRShyZWZlcmVuY2UtPmlzU3ltYm9sKCkpOwogICAgIEFTU0VS
VF9GQUxTRShyZWZlcmVuY2UtPmlzTnVsbFN5bWJvbCgpKTsKICAgICBBU1NFUlRfRkFMU0UocmVm
ZXJlbmNlLT5pc0F0b21pYygpKTsKICAgICBBU1NFUlRfRkFMU0Uob3JpZ2luYWwtPmlzU3ltYm9s
KCkpOwogICAgIEFTU0VSVF9GQUxTRShvcmlnaW5hbC0+aXNBdG9taWMoKSk7CiAgICAgQVNTRVJU
X0VRKG9yaWdpbmFsLT5sZW5ndGgoKSwgcmVmZXJlbmNlLT5sZW5ndGgoKSk7Ci0gICAgQVNTRVJU
X1RSVUUoZXF1YWwocmVmZXJlbmNlLmdldCgpLCAib3JpZ2luYWwiKSk7CisgICAgQVNTRVJUX1RS
VUUoZXF1YWwocmVmZXJlbmNlLnB0cigpLCAib3JpZ2luYWwiKSk7CiAKLSAgICBSZWZQdHI8U3Ry
aW5nSW1wbD4gZW1wdHkgPSBzdHJpbmdGcm9tVVRGOCgiIik7Ci0gICAgUmVmUHRyPFN0cmluZ0lt
cGw+IGVtcHR5UmVmZXJlbmNlID0gU3RyaW5nSW1wbDo6Y3JlYXRlU3ltYm9sKGVtcHR5KTsKKyAg
ICBhdXRvIGVtcHR5ID0gc3RyaW5nRnJvbVVURjgoIiIpOworICAgIGF1dG8gZW1wdHlSZWZlcmVu
Y2UgPSBTdHJpbmdJbXBsOjpjcmVhdGVTeW1ib2woZW1wdHkpOwogICAgIEFTU0VSVF9UUlVFKGVt
cHR5UmVmZXJlbmNlLT5pc1N5bWJvbCgpKTsKICAgICBBU1NFUlRfRkFMU0UoZW1wdHlSZWZlcmVu
Y2UtPmlzTnVsbFN5bWJvbCgpKTsKICAgICBBU1NFUlRfRkFMU0UoZW1wdHlSZWZlcmVuY2UtPmlz
QXRvbWljKCkpOwpAQCAtNTQ0LDE3ICs1NDQsMTcgQEAgVEVTVChXVEYsIFN0cmluZ0ltcGxDcmVh
dGVTeW1ib2wpCiAgICAgQVNTRVJUX0ZBTFNFKGVtcHR5LT5pc051bGxTeW1ib2woKSk7CiAgICAg
QVNTRVJUX1RSVUUoZW1wdHktPmlzQXRvbWljKCkpOwogICAgIEFTU0VSVF9FUShlbXB0eS0+bGVu
Z3RoKCksIGVtcHR5UmVmZXJlbmNlLT5sZW5ndGgoKSk7Ci0gICAgQVNTRVJUX1RSVUUoZXF1YWwo
ZW1wdHlSZWZlcmVuY2UuZ2V0KCksICIiKSk7CisgICAgQVNTRVJUX1RSVUUoZXF1YWwoZW1wdHlS
ZWZlcmVuY2UucHRyKCksICIiKSk7CiB9CiAKIFRFU1QoV1RGLCBTdHJpbmdJbXBsU3ltYm9sVG9B
dG9taWNTdHJpbmcpCiB7Ci0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IG9yaWdpbmFsID0gc3RyaW5n
RnJvbVVURjgoIm9yaWdpbmFsIik7Ci0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IHJlZmVyZW5jZSA9
IFN0cmluZ0ltcGw6OmNyZWF0ZVN5bWJvbChvcmlnaW5hbCk7CisgICAgYXV0byBvcmlnaW5hbCA9
IHN0cmluZ0Zyb21VVEY4KCJvcmlnaW5hbCIpOworICAgIGF1dG8gcmVmZXJlbmNlID0gU3RyaW5n
SW1wbDo6Y3JlYXRlU3ltYm9sKG9yaWdpbmFsKTsKICAgICBBU1NFUlRfVFJVRShyZWZlcmVuY2Ut
PmlzU3ltYm9sKCkpOwogICAgIEFTU0VSVF9GQUxTRShyZWZlcmVuY2UtPmlzQXRvbWljKCkpOwog
Ci0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IGF0b21pYyA9IEF0b21pY1N0cmluZ0ltcGw6OmFkZChy
ZWZlcmVuY2UuZ2V0KCkpOworICAgIGF1dG8gYXRvbWljID0gQXRvbWljU3RyaW5nSW1wbDo6YWRk
KHJlZmVyZW5jZS5wdHIoKSk7CiAgICAgQVNTRVJUX1RSVUUoYXRvbWljLT5pc0F0b21pYygpKTsK
ICAgICBBU1NFUlRfRkFMU0UoYXRvbWljLT5pc1N5bWJvbCgpKTsKICAgICBBU1NFUlRfVFJVRShy
ZWZlcmVuY2UtPmlzU3ltYm9sKCkpOwpAQCAtNTYzLDExICs1NjMsMTEgQEAgVEVTVChXVEYsIFN0
cmluZ0ltcGxTeW1ib2xUb0F0b21pY1N0cmluZykKIAogVEVTVChXVEYsIFN0cmluZ0ltcGxOdWxs
U3ltYm9sVG9BdG9taWNTdHJpbmcpCiB7Ci0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IHJlZmVyZW5j
ZSA9IFN0cmluZ0ltcGw6OmNyZWF0ZU51bGxTeW1ib2woKTsKKyAgICBhdXRvIHJlZmVyZW5jZSA9
IFN0cmluZ0ltcGw6OmNyZWF0ZU51bGxTeW1ib2woKTsKICAgICBBU1NFUlRfVFJVRShyZWZlcmVu
Y2UtPmlzU3ltYm9sKCkpOwogICAgIEFTU0VSVF9GQUxTRShyZWZlcmVuY2UtPmlzQXRvbWljKCkp
OwogCi0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IGF0b21pYyA9IEF0b21pY1N0cmluZ0ltcGw6OmFk
ZChyZWZlcmVuY2UuZ2V0KCkpOworICAgIGF1dG8gYXRvbWljID0gQXRvbWljU3RyaW5nSW1wbDo6
YWRkKHJlZmVyZW5jZS5wdHIoKSk7CiAgICAgQVNTRVJUX1RSVUUoYXRvbWljLT5pc0F0b21pYygp
KTsKICAgICBBU1NFUlRfRkFMU0UoYXRvbWljLT5pc1N5bWJvbCgpKTsKICAgICBBU1NFUlRfVFJV
RShyZWZlcmVuY2UtPmlzU3ltYm9sKCkpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>