<?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>258228</bug_id>
          
          <creation_ts>2023-06-16 17:03:18 -0700</creation_ts>
          <short_desc>Post Accessibility notifications during composition contexts indicating start, end, and value change.</short_desc>
          <delta_ts>2024-06-02 21:14:01 -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>Accessibility</component>
          <version>Other</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="Jack Wiig">jhwiig</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>aboxhall</cc>
    
    <cc>andresg_22</cc>
    
    <cc>apinheiro</cc>
    
    <cc>cfleizach</cc>
    
    <cc>dmazzoni</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>jcraig</cc>
    
    <cc>jdiggs</cc>
    
    <cc>mifenton</cc>
    
    <cc>samuel_white</cc>
    
    <cc>tyler_w</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1962187</commentid>
    <comment_count>0</comment_count>
    <who name="Jack Wiig">jhwiig</who>
    <bug_when>2023-06-16 17:03:18 -0700</bug_when>
    <thetext>For performance and consistency reasons, conveying annotations in text notifications will provide assistive technologies with all of the information about the change, so that they won&apos;t need to request data.

Adding a composition type helps disambiguate normal text replacements from input method event compositions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1962188</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2023-06-16 17:03:28 -0700</bug_when>
    <thetext>&lt;rdar://problem/110925384&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1964557</commentid>
    <comment_count>2</comment_count>
    <who name="Jack Wiig">jhwiig</who>
    <bug_when>2023-06-30 13:40:34 -0700</bug_when>
    <thetext>To align ourselves with AppKit, WebKit should post a notification when a composition starts so that assistive technologies know to process any future value changes for that ui element as incomplete composition changes. When a composition ends, post a notification to indicate that the composition session has ended.

This model does not convey any information in the text notifications (unlike what my past comment indicates) and posts the notification from the text control containing the text information. This aligns us closer with how other UI frameworks behave.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1964559</commentid>
    <comment_count>3</comment_count>
      <attachid>466888</attachid>
    <who name="Jack Wiig">jhwiig</who>
    <bug_when>2023-06-30 13:47:58 -0700</bug_when>
    <thetext>Created attachment 466888
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1964569</commentid>
    <comment_count>4</comment_count>
      <attachid>466889</attachid>
    <who name="Jack Wiig">jhwiig</who>
    <bug_when>2023-06-30 14:40:57 -0700</bug_when>
    <thetext>Created attachment 466889
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1964654</commentid>
    <comment_count>5</comment_count>
      <attachid>466889</attachid>
    <who name="Tyler Wilcock">tyler_w</who>
    <bug_when>2023-07-01 16:28:09 -0700</bug_when>
    <thetext>Comment on attachment 466889
Patch

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

&gt; Source/WebCore/accessibility/AXTextMarker.h:179
&gt; +class AXIsolatedTextMarkerRange {

This feels more like a struct than a class. Do you agree, or is there some reason you made it a class?

&gt; LayoutTests/accessibility/mac/text-input-session-notifications.html:7
&gt; +&lt;body&gt;
&gt; +    &lt;input id=&quot;editable&quot; type=&quot;text&quot;&gt;

Everything within the body tag can be indented at the same level as the body itself.

&gt; LayoutTests/accessibility/mac/text-input-session-notifications.html:9
&gt; +    &lt;script type=&quot;text/javascript&quot;&gt;
&gt; +        description(&quot;This test ensures that the input method marked range is available to accessibility clients as text marker range.&quot;);

Everything within this script tag can be indented at the same level as the script tag itself.

&gt; LayoutTests/accessibility/mac/text-input-session-notifications.html:39
&gt; +            var element = accessibilityController.accessibleElementById(&quot;editable&quot;);
&gt; +            
&gt; +            element.addNotificationListener(notificationCallback);

Can probably shorten these two lines to be:

accessibilityController.accessibleElementById(&quot;editable&quot;).addNotificationListener(notificationCallback);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1966688</commentid>
    <comment_count>6</comment_count>
      <attachid>467038</attachid>
    <who name="Jack Wiig">jhwiig</who>
    <bug_when>2023-07-13 17:52:53 -0700</bug_when>
    <thetext>Created attachment 467038
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1966692</commentid>
    <comment_count>7</comment_count>
      <attachid>467039</attachid>
    <who name="Jack Wiig">jhwiig</who>
    <bug_when>2023-07-13 18:50:36 -0700</bug_when>
    <thetext>Created attachment 467039
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1966751</commentid>
    <comment_count>8</comment_count>
    <who name="Andres Gonzalez">andresg_22</who>
    <bug_when>2023-07-14 08:34:07 -0700</bug_when>
    <thetext>(In reply to Jack Wiig from comment #7)
&gt; Created attachment 467039 [details]
&gt; Patch

This patch contains many more changes than what is stated in the commit comments. This should be broken into several patches with more targeted changes. That would make it easier to review and more importantly easier to identify problems down the road. WebKit encourages small, incremental changes.

--- a/Source/WebCore/accessibility/AXObjectCache.cpp
+++ b/Source/WebCore/accessibility/AXObjectCache.cpp

+void AXObjectCache::onTextCompositionChange(Node&amp; node, CompositionState compositionState, bool valueChanged)
 {
+#if HAVE(INLINE_PREDICTIONS)

Shouldn&apos;t the whole method be conditionally compiled? I.e.:

+#if HAVE(INLINE_PREDICTIONS)
+void AXObjectCache::onTextCompositionChange(Node&amp; node, CompositionState compositionState, bool valueChanged)
 {
...
}
#endif

The naming also seems off, since we have &quot;inline prediction&quot; and &quot;text composition&quot;to refer to the same thing.


--- a/Source/WebCore/accessibility/AXObjectCache.h
+++ b/Source/WebCore/accessibility/AXObjectCache.h

+        AXTextInputMarkingSessionBegan,
+        AXTextInputMarkingSessionEnded,

Yet another name &quot;text input marking&quot;. Can we settle on one name to call this? Either &quot;inline predictions&quot;, &quot;text composition&quot; or &quot;text input marking&quot;. Or these are different things? In either case, &quot;Session&quot; doesn&apos;t seem to contribute any info.


--- a/Source/WebCore/accessibility/AXTextMarker.cpp
+++ b/Source/WebCore/accessibility/AXTextMarker.cpp

+std::optional&lt;CharacterRange&gt; AXTextMarkerRange::characterRange() const
+{
+    if (m_start.m_data.objectID != m_end.m_data.objectID
+        || m_start.m_data.treeID != m_end.m_data.treeID)

Use objectID() and treeID() methods.

+#if ENABLE(ACCESSIBILITY_ISOLATED_TREE)
+// This lightweight representation of a text marker range is 16 bytes (instead of 80 bytes), making it far more efficient to store in the isolated object&apos;s property map.
+struct AXIsolatedTextMarkerRange {
+    AXID objectID;
+    unsigned start;
+    unsigned end;
+    AXIsolatedTextMarkerRange(const AXTextMarkerRange&amp;);
+};
+#endif

I don&apos;t think we need this. If the goal is to store this data in an AXIsolatedObject property map, you don&apos;t need to store the objectID again, and hence you can just stor a CharacterRange.

--- a/Source/WebCore/accessibility/AccessibilityObject.cpp
+++ b/Source/WebCore/accessibility/AccessibilityObject.cpp


+    if (!range || !range-&gt;length)
+        return std::nullopt;

-    return false;
+    return range;

You can write this in 1 line:

+    return range &amp;&amp; range-&gt;length ? range : std::nullopt;

+AXTextMarkerRange AccessibilityObject::textInputMarkedTextMarkerRange() const
 {
...
+    return { editor.compositionRange() };
 }

So the only purpose of getting the AX object from the editor.compositionNode() is to determine whether it is equal to this? Wouldn&apos;t it be better to just compare editor.compositionNode() with this-&gt;node()?

--- a/Source/WebCore/accessibility/AccessibilityObject.h
+++ b/Source/WebCore/accessibility/AccessibilityObject.h

     std::optional&lt;CharacterRange&gt; textInputMarkedRange() const final;
+    AXTextMarkerRange textInputMarkedTextMarkerRange() const final;

Why do we need two methods in this class to do essentially the same thing? I would keep textInputMarkedTextMarkerRange since the other one is just textInputMarkedTextMarkerRange().characterRange().


--- a/Source/WebCore/accessibility/AccessibilityObjectInterface.h
+++ b/Source/WebCore/accessibility/AccessibilityObjectInterface.h

     virtual std::optional&lt;CharacterRange&gt; textInputMarkedRange() const = 0;
+    virtual AXTextMarkerRange textInputMarkedTextMarkerRange() const = 0;


Even more so if they are exposed in the AXCoreObject interface, we don&apos;t want duplication of functionality.

--- a/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.cpp
+++ b/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.cpp

+std::optional&lt;CharacterRange&gt; AXIsolatedObject::textInputMarkedRange() const
+{
+    auto range = textInputMarkedTextMarkerRange().characterRange();
+    if (!range || !range-&gt;length)
+        return std::nullopt;
+
+    return range;
+}

No needed.

+    auto range = optionalAttributeValue&lt;AXIsolatedTextMarkerRange&gt;(AXPropertyName::TextInputMarkedTextMarkerRange);
+    if (!range || range-&gt;start &gt;= range-&gt;end)
+        return { };
+
+    return { tree()-&gt;treeID(), range-&gt;objectID, range-&gt;start, range-&gt;end };
+}

We should be storing a CharacterRange just for the appropriate IsolatedObject.


--- a/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.h
+++ b/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.h

-    std::optional&lt;CharacterRange&gt; textInputMarkedRange() const final { return optionalAttributeValue&lt;CharacterRange&gt;(AXPropertyName::TextInputMarkedRange); }
+    std::optional&lt;CharacterRange&gt; textInputMarkedRange() const final;

No needed.

--- a/Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.cpp
+++ b/Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.cpp

+        case AXPropertyName::TextInputMarkedTextMarkerRange: {
+            AXIsolatedTextMarkerRange isolatedRange = { axObject.textInputMarkedTextMarkerRange() };
+            propertyMap.set(AXPropertyName::TextInputMarkedTextMarkerRange, isolatedRange);
             break;

Here you can store the CharacterRange if axObject.textInputMarkedTextMarkerRange() returns a non-empty range, or remove otherwise.

--- a/Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.h
+++ b/Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.h

+struct AXIsolatedTextMarkerRange;

No needed.

-using AXPropertyValueVariant = std::variant&lt;std::nullptr_t, AXID, String, bool, int, unsigned, double, float, uint64_t, AccessibilityButtonState, Color, URL, LayoutRect, FloatPoint, FloatRect, IntPoint, IntRect, PAL::SessionID, std::pair&lt;unsigned, unsigned&gt;, Vector&lt;AccessibilityText&gt;, Vector&lt;AXID&gt;, Vector&lt;std::pair&lt;AXID, AXID&gt;&gt;, Vector&lt;String&gt;, Path, OptionSet&lt;AXAncestorFlag&gt;, RetainPtr&lt;NSAttributedString&gt;, InsideLink, Vector&lt;Vector&lt;AXID&gt;&gt;, CharacterRange&gt;;
+using AXPropertyValueVariant = std::variant&lt;std::nullptr_t, AXID, String, bool, int, unsigned, double, float, uint64_t, AccessibilityButtonState, Color, URL, LayoutRect, FloatPoint, FloatRect, IntPoint, IntRect, PAL::SessionID, std::pair&lt;unsigned, unsigned&gt;, Vector&lt;AccessibilityText&gt;, Vector&lt;AXID&gt;, Vector&lt;std::pair&lt;AXID, AXID&gt;&gt;, Vector&lt;String&gt;, Path, OptionSet&lt;AXAncestorFlag&gt;, RetainPtr&lt;NSAttributedString&gt;, InsideLink, Vector&lt;Vector&lt;AXID&gt;&gt;, CharacterRange, AXIsolatedTextMarkerRange&gt;;


Only need the CharacterRange.

--- a/Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm
+++ b/Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm


+    if ([attributeName isEqualToString:NSAccessibilityTextInputMarkedTextMarkerRangeAttribute]) {
+        if (auto range = backingObject-&gt;textInputMarkedTextMarkerRange())
+            return (id)AXTextMarkerRangeRef(range);
+        return nil;
+    }

Return platformData().bridgingAutorelease(), look at the existing instances of returning AXTextMarkerRanges.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1966760</commentid>
    <comment_count>9</comment_count>
    <who name="Jack Wiig">jhwiig</who>
    <bug_when>2023-07-14 09:26:36 -0700</bug_when>
    <thetext>(In reply to Andres Gonzalez from comment #8)
&gt; (In reply to Jack Wiig from comment #7)
&gt; &gt; Created attachment 467039 [details]
&gt; &gt; Patch
&gt; 
&gt; This patch contains many more changes than what is stated in the commit
&gt; comments. This should be broken into several patches with more targeted
&gt; changes. That would make it easier to review and more importantly easier to
&gt; identify problems down the road. WebKit encourages small, incremental
&gt; changes.

Yeah, this patch grew from being just notifications to fixing up a few bugs that affected this functionality as well. I agree that if I had more time, I should break it up into more changes, but I don&apos;t think that it&apos;s currently the best use of my time to do so. Looking forward, I&apos;ll try and keep this in mind.

&gt; 
&gt; --- a/Source/WebCore/accessibility/AXObjectCache.cpp
&gt; +++ b/Source/WebCore/accessibility/AXObjectCache.cpp
&gt; 
&gt; +void AXObjectCache::onTextCompositionChange(Node&amp; node, CompositionState
&gt; compositionState, bool valueChanged)
&gt;  {
&gt; +#if HAVE(INLINE_PREDICTIONS)
&gt; 
&gt; Shouldn&apos;t the whole method be conditionally compiled? I.e.:
&gt; 

If I conditionally compile the method, then I have to conditionally compile the call sites too :( which would be more cumbersome in my opinion. I was trying to follow existing practice here.

&gt; +#if HAVE(INLINE_PREDICTIONS)
&gt; +void AXObjectCache::onTextCompositionChange(Node&amp; node, CompositionState
&gt; compositionState, bool valueChanged)
&gt;  {
&gt; ...
&gt; }
&gt; #endif
&gt; 
&gt; The naming also seems off, since we have &quot;inline prediction&quot; and &quot;text
&gt; composition&quot;to refer to the same thing.
&gt; 

I remained consistent with the naming used in AppKit and across our different systems. &quot;Inline Predictions&quot; are a subset of text compositions, which also includes input method events (typing in CJK languages). Text composition is probably the best description of this behavior.

As for the macro gate, that is there because I don&apos;t want to break past versions of VoiceOver, and this work was done to support inline predictions specifically. So, the macro define and function names are different, but consistent with each other.

&gt; 
&gt; --- a/Source/WebCore/accessibility/AXObjectCache.h
&gt; +++ b/Source/WebCore/accessibility/AXObjectCache.h
&gt; 
&gt; +        AXTextInputMarkingSessionBegan,
&gt; +        AXTextInputMarkingSessionEnded,
&gt; 
&gt; Yet another name &quot;text input marking&quot;. Can we settle on one name to call
&gt; this? Either &quot;inline predictions&quot;, &quot;text composition&quot; or &quot;text input
&gt; marking&quot;. Or these are different things? In either case, &quot;Session&quot; doesn&apos;t
&gt; seem to contribute any info.
&gt; 

These are the AppKit names for the notifications, which I am using for consistency. They may not have the best naming, but we need to use the same ones.

&gt; 
&gt; --- a/Source/WebCore/accessibility/AXTextMarker.cpp
&gt; +++ b/Source/WebCore/accessibility/AXTextMarker.cpp
&gt; 
&gt; +std::optional&lt;CharacterRange&gt; AXTextMarkerRange::characterRange() const
&gt; +{
&gt; +    if (m_start.m_data.objectID != m_end.m_data.objectID
&gt; +        || m_start.m_data.treeID != m_end.m_data.treeID)
&gt; 
&gt; Use objectID() and treeID() methods.
&gt; 

I just moved this implementation from Mac specific to all-platform so that I could use it in AXIsolatedObject.cpp. I don&apos;t know if I&apos;d feel comfortable changing its implementation since I didn&apos;t write any tests to protect that.

&gt; +#if ENABLE(ACCESSIBILITY_ISOLATED_TREE)
&gt; +// This lightweight representation of a text marker range is 16 bytes
&gt; (instead of 80 bytes), making it far more efficient to store in the isolated
&gt; object&apos;s property map.
&gt; +struct AXIsolatedTextMarkerRange {
&gt; +    AXID objectID;
&gt; +    unsigned start;
&gt; +    unsigned end;
&gt; +    AXIsolatedTextMarkerRange(const AXTextMarkerRange&amp;);
&gt; +};
&gt; +#endif
&gt; 
&gt; I don&apos;t think we need this. If the goal is to store this data in an
&gt; AXIsolatedObject property map, you don&apos;t need to store the objectID again,
&gt; and hence you can just stor a CharacterRange.

We have to store the text marker range on the object that posts the notification, which won&apos;t have the same objectID() as the one we need for the text marker range to be correct. We do this for consistency with AppKit &amp; because we don&apos;t often deal with the static text, but the form control / text field in VoiceOver.

&gt; 
&gt; --- a/Source/WebCore/accessibility/AccessibilityObject.cpp
&gt; +++ b/Source/WebCore/accessibility/AccessibilityObject.cpp
&gt; 
&gt; 
&gt; +    if (!range || !range-&gt;length)
&gt; +        return std::nullopt;
&gt; 
&gt; -    return false;
&gt; +    return range;
&gt; 
&gt; You can write this in 1 line:
&gt; 
&gt; +    return range &amp;&amp; range-&gt;length ? range : std::nullopt;
&gt; 

Thanks, will change that.

&gt; +AXTextMarkerRange AccessibilityObject::textInputMarkedTextMarkerRange()
&gt; const
&gt;  {
&gt; ...
&gt; +    return { editor.compositionRange() };
&gt;  }
&gt; 
&gt; So the only purpose of getting the AX object from the
&gt; editor.compositionNode() is to determine whether it is equal to this?
&gt; Wouldn&apos;t it be better to just compare editor.compositionNode() with
&gt; this-&gt;node()?

This check is not always sufficient because we are often posting and storing this information a bit higher up the tree, on the element that posts the notification, which is consistent with AppKit. Although I initially tried that, it did not work in Safari contexts.

&gt; 
&gt; --- a/Source/WebCore/accessibility/AccessibilityObject.h
&gt; +++ b/Source/WebCore/accessibility/AccessibilityObject.h
&gt; 
&gt;      std::optional&lt;CharacterRange&gt; textInputMarkedRange() const final;
&gt; +    AXTextMarkerRange textInputMarkedTextMarkerRange() const final;
&gt; 
&gt; Why do we need two methods in this class to do essentially the same thing? I
&gt; would keep textInputMarkedTextMarkerRange since the other one is just
&gt; textInputMarkedTextMarkerRange().characterRange().
&gt; 

I originally implemented the character range method first, and now it&apos;s being used throughout the test harness and for a test. I didn&apos;t think it would be worth going back and deleting that stuff.

&gt; 
&gt; --- a/Source/WebCore/accessibility/AccessibilityObjectInterface.h
&gt; +++ b/Source/WebCore/accessibility/AccessibilityObjectInterface.h
&gt; 
&gt;      virtual std::optional&lt;CharacterRange&gt; textInputMarkedRange() const = 0;
&gt; +    virtual AXTextMarkerRange textInputMarkedTextMarkerRange() const = 0;
&gt; 
&gt; 
&gt; Even more so if they are exposed in the AXCoreObject interface, we don&apos;t
&gt; want duplication of functionality.
&gt; 
&gt; --- a/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.cpp
&gt; +++ b/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.cpp
&gt; 
&gt; +std::optional&lt;CharacterRange&gt; AXIsolatedObject::textInputMarkedRange() const
&gt; +{
&gt; +    auto range = textInputMarkedTextMarkerRange().characterRange();
&gt; +    if (!range || !range-&gt;length)
&gt; +        return std::nullopt;
&gt; +
&gt; +    return range;
&gt; +}
&gt; 
&gt; No needed.

I don&apos;t want this returning {0, 0} if it&apos;s empty, which it was, so I put it into a wrapper that handles this. I think that unless we can resolve that, it&apos;s better to have a method for this than it is to handle it at each usage.

&gt; 
&gt; +    auto range =
&gt; optionalAttributeValue&lt;AXIsolatedTextMarkerRange&gt;(AXPropertyName::
&gt; TextInputMarkedTextMarkerRange);
&gt; +    if (!range || range-&gt;start &gt;= range-&gt;end)
&gt; +        return { };
&gt; +
&gt; +    return { tree()-&gt;treeID(), range-&gt;objectID, range-&gt;start, range-&gt;end };
&gt; +}
&gt; 
&gt; We should be storing a CharacterRange just for the appropriate
&gt; IsolatedObject.

See my above comments.

&gt; 
&gt; 
&gt; --- a/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.h
&gt; +++ b/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.h
&gt; 
&gt; -    std::optional&lt;CharacterRange&gt; textInputMarkedRange() const final {
&gt; return
&gt; optionalAttributeValue&lt;CharacterRange&gt;(AXPropertyName::TextInputMarkedRange);
&gt; }
&gt; +    std::optional&lt;CharacterRange&gt; textInputMarkedRange() const final;
&gt; 
&gt; No needed.
&gt; 
&gt; --- a/Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.cpp
&gt; +++ b/Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.cpp
&gt; 
&gt; +        case AXPropertyName::TextInputMarkedTextMarkerRange: {
&gt; +            AXIsolatedTextMarkerRange isolatedRange = {
&gt; axObject.textInputMarkedTextMarkerRange() };
&gt; +            propertyMap.set(AXPropertyName::TextInputMarkedTextMarkerRange,
&gt; isolatedRange);
&gt;              break;
&gt; 
&gt; Here you can store the CharacterRange if
&gt; axObject.textInputMarkedTextMarkerRange() returns a non-empty range, or
&gt; remove otherwise.

See my above comments.

&gt; 
&gt; --- a/Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.h
&gt; +++ b/Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.h
&gt; 
&gt; +struct AXIsolatedTextMarkerRange;
&gt; 
&gt; No needed.
&gt; 
&gt; -using AXPropertyValueVariant = std::variant&lt;std::nullptr_t, AXID, String,
&gt; bool, int, unsigned, double, float, uint64_t, AccessibilityButtonState,
&gt; Color, URL, LayoutRect, FloatPoint, FloatRect, IntPoint, IntRect,
&gt; PAL::SessionID, std::pair&lt;unsigned, unsigned&gt;, Vector&lt;AccessibilityText&gt;,
&gt; Vector&lt;AXID&gt;, Vector&lt;std::pair&lt;AXID, AXID&gt;&gt;, Vector&lt;String&gt;, Path,
&gt; OptionSet&lt;AXAncestorFlag&gt;, RetainPtr&lt;NSAttributedString&gt;, InsideLink,
&gt; Vector&lt;Vector&lt;AXID&gt;&gt;, CharacterRange&gt;;
&gt; +using AXPropertyValueVariant = std::variant&lt;std::nullptr_t, AXID, String,
&gt; bool, int, unsigned, double, float, uint64_t, AccessibilityButtonState,
&gt; Color, URL, LayoutRect, FloatPoint, FloatRect, IntPoint, IntRect,
&gt; PAL::SessionID, std::pair&lt;unsigned, unsigned&gt;, Vector&lt;AccessibilityText&gt;,
&gt; Vector&lt;AXID&gt;, Vector&lt;std::pair&lt;AXID, AXID&gt;&gt;, Vector&lt;String&gt;, Path,
&gt; OptionSet&lt;AXAncestorFlag&gt;, RetainPtr&lt;NSAttributedString&gt;, InsideLink,
&gt; Vector&lt;Vector&lt;AXID&gt;&gt;, CharacterRange, AXIsolatedTextMarkerRange&gt;;
&gt; 
&gt; 
&gt; Only need the CharacterRange.
&gt; 
&gt; --- a/Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm
&gt; +++ b/Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm
&gt; 

See my above comments.

&gt; 
&gt; +    if ([attributeName
&gt; isEqualToString:NSAccessibilityTextInputMarkedTextMarkerRangeAttribute]) {
&gt; +        if (auto range = backingObject-&gt;textInputMarkedTextMarkerRange())
&gt; +            return (id)AXTextMarkerRangeRef(range);
&gt; +        return nil;
&gt; +    }
&gt; 
&gt; Return platformData().bridgingAutorelease(), look at the existing instances
&gt; of returning AXTextMarkerRanges.

Thanks! I&apos;ll make that change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1966773</commentid>
    <comment_count>10</comment_count>
      <attachid>467043</attachid>
    <who name="Jack Wiig">jhwiig</who>
    <bug_when>2023-07-14 10:35:50 -0700</bug_when>
    <thetext>Created attachment 467043
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1966779</commentid>
    <comment_count>11</comment_count>
    <who name="Andres Gonzalez">andresg_22</who>
    <bug_when>2023-07-14 11:02:20 -0700</bug_when>
    <thetext>(In reply to Jack Wiig from comment #9)
&gt; (In reply to Andres Gonzalez from comment #8)
&gt; &gt; (In reply to Jack Wiig from comment #7)
&gt; &gt; &gt; Created attachment 467039 [details]
&gt; &gt; &gt; Patch
&gt; &gt;
&gt; &gt; This patch contains many more changes than what is stated in the commit
&gt; &gt; comments. This should be broken into several patches with more targeted
&gt; &gt; changes. That would make it easier to review and more importantly easier to
&gt; &gt; identify problems down the road. WebKit encourages small, incremental
&gt; &gt; changes.
&gt;
&gt; Yeah, this patch grew from being just notifications to fixing up a few bugs
&gt; that affected this functionality as well. I agree that if I had more time, I
&gt; should break it up into more changes, but I don&apos;t think that it&apos;s currently
&gt; the best use of my time to do so. Looking forward, I&apos;ll try and keep this in
&gt; mind.

Spell out in the commit comment those bug fixes done in addition to the notifications.

&gt;
&gt; &gt;
&gt; &gt; --- a/Source/WebCore/accessibility/AXObjectCache.cpp
&gt; &gt; +++ b/Source/WebCore/accessibility/AXObjectCache.cpp
&gt; &gt;
&gt; &gt; +void AXObjectCache::onTextCompositionChange(Node&amp; node, CompositionState
&gt; &gt; compositionState, bool valueChanged)
&gt; &gt;  {
&gt; &gt; +#if HAVE(INLINE_PREDICTIONS)
&gt; &gt;
&gt; &gt; Shouldn&apos;t the whole method be conditionally compiled? I.e.:
&gt; &gt;
&gt;
&gt; If I conditionally compile the method, then I have to conditionally compile
&gt; the call sites too :( which would be more cumbersome in my opinion. I was
&gt; trying to follow existing practice here.

I think there are both cases throughout the codebase. It depends on the usage. For instance, most of the AXIsolatedTree stuff is conditionally compiled, and you have to #if every call site.
&gt;
&gt; &gt; +#if HAVE(INLINE_PREDICTIONS)
&gt; &gt; +void AXObjectCache::onTextCompositionChange(Node&amp; node, CompositionState
&gt; &gt; compositionState, bool valueChanged)
&gt; &gt;  {
&gt; &gt; ...
&gt; &gt; }
&gt; &gt; #endif
&gt; &gt;
&gt; &gt; The naming also seems off, since we have &quot;inline prediction&quot; and &quot;text
&gt; &gt; composition&quot;to refer to the same thing.
&gt; &gt;
&gt;
&gt; I remained consistent with the naming used in AppKit and across our
&gt; different systems. &quot;Inline Predictions&quot; are a subset of text compositions,
&gt; which also includes input method events (typing in CJK languages). Text
&gt; composition is probably the best description of this behavior.
&gt;
&gt; As for the macro gate, that is there because I don&apos;t want to break past
&gt; versions of VoiceOver, and this work was done to support inline predictions
&gt; specifically. So, the macro define and function names are different, but
&gt; consistent with each other.

Thanks for the clarification.
&gt;
&gt; &gt;
&gt; &gt; --- a/Source/WebCore/accessibility/AXObjectCache.h
&gt; &gt; +++ b/Source/WebCore/accessibility/AXObjectCache.h
&gt; &gt;
&gt; &gt; +        AXTextInputMarkingSessionBegan,
&gt; &gt; +        AXTextInputMarkingSessionEnded,
&gt; &gt;
&gt; &gt; Yet another name &quot;text input marking&quot;. Can we settle on one name to call
&gt; &gt; this? Either &quot;inline predictions&quot;, &quot;text composition&quot; or &quot;text input
&gt; &gt; marking&quot;. Or these are different things? In either case, &quot;Session&quot; doesn&apos;t
&gt; &gt; seem to contribute any info.
&gt; &gt;
&gt;
&gt; These are the AppKit names for the notifications, which I am using for
&gt; consistency. They may not have the best naming, but we need to use the same
&gt; ones.

These are internal constants to AX Core so they don&apos;t have to match the AppKit name, although in some cases it is good to keep a close resemblance. It is up to you, but I would keep AXObjectCache::AXNotification enumerators clear and concise names.
&gt;
&gt; &gt;
&gt; &gt; --- a/Source/WebCore/accessibility/AXTextMarker.cpp
&gt; &gt; +++ b/Source/WebCore/accessibility/AXTextMarker.cpp
&gt; &gt;
&gt; &gt; +std::optional&lt;CharacterRange&gt; AXTextMarkerRange::characterRange() const
&gt; &gt; +{
&gt; &gt; +    if (m_start.m_data.objectID != m_end.m_data.objectID
&gt; &gt; +        || m_start.m_data.treeID != m_end.m_data.treeID)
&gt; &gt;
&gt; &gt; Use objectID() and treeID() methods.
&gt; &gt;
&gt;
&gt; I just moved this implementation from Mac specific to all-platform so that I
&gt; could use it in AXIsolatedObject.cpp. I don&apos;t know if I&apos;d feel comfortable
&gt; changing its implementation since I didn&apos;t write any tests to protect that.
&gt;
&gt; &gt; +#if ENABLE(ACCESSIBILITY_ISOLATED_TREE)
&gt; &gt; +// This lightweight representation of a text marker range is 16 bytes
&gt; &gt; (instead of 80 bytes), making it far more efficient to store in the isolated
&gt; &gt; object&apos;s property map.
&gt; &gt; +struct AXIsolatedTextMarkerRange {
&gt; &gt; +    AXID objectID;
&gt; &gt; +    unsigned start;
&gt; &gt; +    unsigned end;
&gt; &gt; +    AXIsolatedTextMarkerRange(const AXTextMarkerRange&amp;);
&gt; &gt; +};
&gt; &gt; +#endif
&gt; &gt;
&gt; &gt; I don&apos;t think we need this. If the goal is to store this data in an
&gt; &gt; AXIsolatedObject property map, you don&apos;t need to store the objectID again,
&gt; &gt; and hence you can just stor a CharacterRange.
&gt;
&gt; We have to store the text marker range on the object that posts the
&gt; notification, which won&apos;t have the same objectID() as the one we need for
&gt; the text marker range to be correct. We do this for consistency with AppKit
&gt; &amp; because we don&apos;t often deal with the static text, but the form control /
&gt; text field in VoiceOver.

Then let&apos;s call this struct something like AXObjectCharacterRange and possibly derive from CharacterRange, just adding the AX objectID. Alternatively, and maybe preferrably, you can add this data to the AXIsolatedObject property map as an std::pair&lt;AXID, CharacterRange&gt;, or a tuple.
&gt;
&gt; &gt;
&gt; &gt; --- a/Source/WebCore/accessibility/AccessibilityObject.cpp
&gt; &gt; +++ b/Source/WebCore/accessibility/AccessibilityObject.cpp
&gt; &gt;
&gt; &gt;
&gt; &gt; +    if (!range || !range-&gt;length)
&gt; &gt; +        return std::nullopt;
&gt; &gt;
&gt; &gt; -    return false;
&gt; &gt; +    return range;
&gt; &gt;
&gt; &gt; You can write this in 1 line:
&gt; &gt;
&gt; &gt; +    return range &amp;&amp; range-&gt;length ? range : std::nullopt;
&gt; &gt;
&gt;
&gt; Thanks, will change that.
&gt;
&gt; &gt; +AXTextMarkerRange AccessibilityObject::textInputMarkedTextMarkerRange()
&gt; &gt; const
&gt; &gt;  {
&gt; &gt; ...
&gt; &gt; +    return { editor.compositionRange() };
&gt; &gt;  }
&gt; &gt;
&gt; &gt; So the only purpose of getting the AX object from the
&gt; &gt; editor.compositionNode() is to determine whether it is equal to this?
&gt; &gt; Wouldn&apos;t it be better to just compare editor.compositionNode() with
&gt; &gt; this-&gt;node()?
&gt;
&gt; This check is not always sufficient because we are often posting and storing
&gt; this information a bit higher up the tree, on the element that posts the
&gt; notification, which is consistent with AppKit. Although I initially tried
&gt; that, it did not work in Safari contexts.
&gt;
&gt; &gt;
&gt; &gt; --- a/Source/WebCore/accessibility/AccessibilityObject.h
&gt; &gt; +++ b/Source/WebCore/accessibility/AccessibilityObject.h
&gt; &gt;
&gt; &gt;      std::optional&lt;CharacterRange&gt; textInputMarkedRange() const final;
&gt; &gt; +    AXTextMarkerRange textInputMarkedTextMarkerRange() const final;
&gt; &gt;
&gt; &gt; Why do we need two methods in this class to do essentially the same thing? I
&gt; &gt; would keep textInputMarkedTextMarkerRange since the other one is just
&gt; &gt; textInputMarkedTextMarkerRange().characterRange().
&gt; &gt;
&gt;
&gt; I originally implemented the character range method first, and now it&apos;s
&gt; being used throughout the test harness and for a test. I didn&apos;t think it
&gt; would be worth going back and deleting that stuff.

Yes, let&apos;s clean this up and keep just one method.
&gt;
&gt; &gt;
&gt; &gt; --- a/Source/WebCore/accessibility/AccessibilityObjectInterface.h
&gt; &gt; +++ b/Source/WebCore/accessibility/AccessibilityObjectInterface.h
&gt; &gt;
&gt; &gt;      virtual std::optional&lt;CharacterRange&gt; textInputMarkedRange() const = 0;
&gt; &gt; +    virtual AXTextMarkerRange textInputMarkedTextMarkerRange() const = 0;
&gt; &gt;
&gt; &gt;
&gt; &gt; Even more so if they are exposed in the AXCoreObject interface, we don&apos;t
&gt; &gt; want duplication of functionality.
&gt; &gt;
&gt; &gt; --- a/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.cpp
&gt; &gt; +++ b/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.cpp
&gt; &gt;
&gt; &gt; +std::optional&lt;CharacterRange&gt; AXIsolatedObject::textInputMarkedRange() const
&gt; &gt; +{
&gt; &gt; +    auto range = textInputMarkedTextMarkerRange().characterRange();
&gt; &gt; +    if (!range || !range-&gt;length)
&gt; &gt; +        return std::nullopt;
&gt; &gt; +
&gt; &gt; +    return range;
&gt; &gt; +}
&gt; &gt;
&gt; &gt; No needed.
&gt;
&gt; I don&apos;t want this returning {0, 0} if it&apos;s empty, which it was, so I put it
&gt; into a wrapper that handles this. I think that unless we can resolve that,
&gt; it&apos;s better to have a method for this than it is to handle it at each usage.

I mean that we don&apos;t need this whole method, we&apos;ll keep the one that returns the TextMarkerRange.
&gt;
&gt; &gt;
&gt; &gt; +    auto range =
&gt; &gt; optionalAttributeValue&lt;AXIsolatedTextMarkerRange&gt;(AXPropertyName::
&gt; &gt; TextInputMarkedTextMarkerRange);
&gt; &gt; +    if (!range || range-&gt;start &gt;= range-&gt;end)
&gt; &gt; +        return { };
&gt; &gt; +
&gt; &gt; +    return { tree()-&gt;treeID(), range-&gt;objectID, range-&gt;start, range-&gt;end };
&gt; &gt; +}
&gt; &gt;
&gt; &gt; We should be storing a CharacterRange just for the appropriate
&gt; &gt; IsolatedObject.
&gt;
&gt; See my above comments.
&gt;
&gt; &gt;
&gt; &gt;
&gt; &gt; --- a/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.h
&gt; &gt; +++ b/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.h
&gt; &gt;
&gt; &gt; -    std::optional&lt;CharacterRange&gt; textInputMarkedRange() const final {
&gt; &gt; return
&gt; &gt; optionalAttributeValue&lt;CharacterRange&gt;(AXPropertyName::TextInputMarkedRange);
&gt; &gt; }
&gt; &gt; +    std::optional&lt;CharacterRange&gt; textInputMarkedRange() const final;
&gt; &gt;
&gt; &gt; No needed.
&gt; &gt;
&gt; &gt; --- a/Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.cpp
&gt; &gt; +++ b/Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.cpp
&gt; &gt;
&gt; &gt; +        case AXPropertyName::TextInputMarkedTextMarkerRange: {
&gt; &gt; +            AXIsolatedTextMarkerRange isolatedRange = {
&gt; &gt; axObject.textInputMarkedTextMarkerRange() };
&gt; &gt; +            propertyMap.set(AXPropertyName::TextInputMarkedTextMarkerRange,
&gt; &gt; isolatedRange);
&gt; &gt;              break;
&gt; &gt;
&gt; &gt; Here you can store the CharacterRange if
&gt; &gt; axObject.textInputMarkedTextMarkerRange() returns a non-empty range, or
&gt; &gt; remove otherwise.
&gt;
&gt; See my above comments.
&gt;
&gt; &gt;
&gt; &gt; --- a/Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.h
&gt; &gt; +++ b/Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.h
&gt; &gt;
&gt; &gt; +struct AXIsolatedTextMarkerRange;
&gt; &gt;
&gt; &gt; No needed.
&gt; &gt;
&gt; &gt; -using AXPropertyValueVariant = std::variant&lt;std::nullptr_t, AXID, String,
&gt; &gt; bool, int, unsigned, double, float, uint64_t, AccessibilityButtonState,
&gt; &gt; Color, URL, LayoutRect, FloatPoint, FloatRect, IntPoint, IntRect,
&gt; &gt; PAL::SessionID, std::pair&lt;unsigned, unsigned&gt;, Vector&lt;AccessibilityText&gt;,
&gt; &gt; Vector&lt;AXID&gt;, Vector&lt;std::pair&lt;AXID, AXID&gt;&gt;, Vector&lt;String&gt;, Path,
&gt; &gt; OptionSet&lt;AXAncestorFlag&gt;, RetainPtr&lt;NSAttributedString&gt;, InsideLink,
&gt; &gt; Vector&lt;Vector&lt;AXID&gt;&gt;, CharacterRange&gt;;
&gt; &gt; +using AXPropertyValueVariant = std::variant&lt;std::nullptr_t, AXID, String,
&gt; &gt; bool, int, unsigned, double, float, uint64_t, AccessibilityButtonState,
&gt; &gt; Color, URL, LayoutRect, FloatPoint, FloatRect, IntPoint, IntRect,
&gt; &gt; PAL::SessionID, std::pair&lt;unsigned, unsigned&gt;, Vector&lt;AccessibilityText&gt;,
&gt; &gt; Vector&lt;AXID&gt;, Vector&lt;std::pair&lt;AXID, AXID&gt;&gt;, Vector&lt;String&gt;, Path,
&gt; &gt; OptionSet&lt;AXAncestorFlag&gt;, RetainPtr&lt;NSAttributedString&gt;, InsideLink,
&gt; &gt; Vector&lt;Vector&lt;AXID&gt;&gt;, CharacterRange, AXIsolatedTextMarkerRange&gt;;
&gt; &gt;
&gt; &gt;
&gt; &gt; Only need the CharacterRange.
&gt; &gt;
&gt; &gt; --- a/Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm
&gt; &gt; +++ b/Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm
&gt; &gt;
&gt;
&gt; See my above comments.
&gt;
&gt; &gt;
&gt; &gt; +    if ([attributeName
&gt; &gt; isEqualToString:NSAccessibilityTextInputMarkedTextMarkerRangeAttribute]) {
&gt; &gt; +        if (auto range = backingObject-&gt;textInputMarkedTextMarkerRange())
&gt; &gt; +            return (id)AXTextMarkerRangeRef(range);
&gt; &gt; +        return nil;
&gt; &gt; +    }
&gt; &gt;
&gt; &gt; Return platformData().bridgingAutorelease(), look at the existing instances
&gt; &gt; of returning AXTextMarkerRanges.
&gt;
&gt; Thanks! I&apos;ll make that change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1966812</commentid>
    <comment_count>12</comment_count>
      <attachid>467045</attachid>
    <who name="Jack Wiig">jhwiig</who>
    <bug_when>2023-07-14 15:10:34 -0700</bug_when>
    <thetext>Created attachment 467045
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1966814</commentid>
    <comment_count>13</comment_count>
    <who name="Jack Wiig">jhwiig</who>
    <bug_when>2023-07-14 15:17:11 -0700</bug_when>
    <thetext>(In reply to Andres Gonzalez from comment #11)
&gt; (In reply to Jack Wiig from comment #9)
&gt; &gt; (In reply to Andres Gonzalez from comment #8)
&gt; &gt; &gt; (In reply to Jack Wiig from comment #7)
&gt; &gt; &gt; &gt; Created attachment 467039 [details]
&gt; &gt; &gt; &gt; Patch
&gt; &gt; &gt;
&gt; &gt; &gt; This patch contains many more changes than what is stated in the commit
&gt; &gt; &gt; comments. This should be broken into several patches with more targeted
&gt; &gt; &gt; changes. That would make it easier to review and more importantly easier to
&gt; &gt; &gt; identify problems down the road. WebKit encourages small, incremental
&gt; &gt; &gt; changes.
&gt; &gt;
&gt; &gt; Yeah, this patch grew from being just notifications to fixing up a few bugs
&gt; &gt; that affected this functionality as well. I agree that if I had more time, I
&gt; &gt; should break it up into more changes, but I don&apos;t think that it&apos;s currently
&gt; &gt; the best use of my time to do so. Looking forward, I&apos;ll try and keep this in
&gt; &gt; mind.
&gt; 
&gt; Spell out in the commit comment those bug fixes done in addition to the
&gt; notifications.
&gt; 

Okay, I added the other small changes. Sorry about not doing this in the first place, I should have at least done that from the start.

&gt; &gt;
&gt; &gt; &gt;
&gt; &gt; &gt; --- a/Source/WebCore/accessibility/AXObjectCache.cpp
&gt; &gt; &gt; +++ b/Source/WebCore/accessibility/AXObjectCache.cpp
&gt; &gt; &gt;
&gt; &gt; &gt; +void AXObjectCache::onTextCompositionChange(Node&amp; node, CompositionState
&gt; &gt; &gt; compositionState, bool valueChanged)
&gt; &gt; &gt;  {
&gt; &gt; &gt; +#if HAVE(INLINE_PREDICTIONS)
&gt; &gt; &gt;
&gt; &gt; &gt; Shouldn&apos;t the whole method be conditionally compiled? I.e.:
&gt; &gt; &gt;
&gt; &gt;
&gt; &gt; If I conditionally compile the method, then I have to conditionally compile
&gt; &gt; the call sites too :( which would be more cumbersome in my opinion. I was
&gt; &gt; trying to follow existing practice here.
&gt; 
&gt; I think there are both cases throughout the codebase. It depends on the
&gt; usage. For instance, most of the AXIsolatedTree stuff is conditionally
&gt; compiled, and you have to #if every call site.

Oh, that&apos;s a good point! Do you have a preference? I&apos;ll probably keep it as is unless you have a strong preference.

&gt; &gt;
&gt; &gt; &gt;
&gt; &gt; &gt; --- a/Source/WebCore/accessibility/AXObjectCache.h
&gt; &gt; &gt; +++ b/Source/WebCore/accessibility/AXObjectCache.h
&gt; &gt; &gt;
&gt; &gt; &gt; +        AXTextInputMarkingSessionBegan,
&gt; &gt; &gt; +        AXTextInputMarkingSessionEnded,
&gt; &gt; &gt;
&gt; &gt; &gt; Yet another name &quot;text input marking&quot;. Can we settle on one name to call
&gt; &gt; &gt; this? Either &quot;inline predictions&quot;, &quot;text composition&quot; or &quot;text input
&gt; &gt; &gt; marking&quot;. Or these are different things? In either case, &quot;Session&quot; doesn&apos;t
&gt; &gt; &gt; seem to contribute any info.
&gt; &gt; &gt;
&gt; &gt;
&gt; &gt; These are the AppKit names for the notifications, which I am using for
&gt; &gt; consistency. They may not have the best naming, but we need to use the same
&gt; &gt; ones.
&gt; 
&gt; These are internal constants to AX Core so they don&apos;t have to match the
&gt; AppKit name, although in some cases it is good to keep a close resemblance.
&gt; It is up to you, but I would keep AXObjectCache::AXNotification enumerators
&gt; clear and concise names.

I renamed the AXObjectCache::AXNotification enum cases to AXTextCompositionBegan and AXTextCompositionEnded to keep them more succinct, but left the ones in the Mac wrapper file alone to match AppKit. I agree, these are much better now.

&gt; &gt;
&gt; &gt; &gt;
&gt; &gt; &gt; --- a/Source/WebCore/accessibility/AXTextMarker.cpp
&gt; &gt; &gt; +++ b/Source/WebCore/accessibility/AXTextMarker.cpp
&gt; &gt; &gt;
&gt; &gt; &gt; +std::optional&lt;CharacterRange&gt; AXTextMarkerRange::characterRange() const
&gt; &gt; &gt; +{
&gt; &gt; &gt; +    if (m_start.m_data.objectID != m_end.m_data.objectID
&gt; &gt; &gt; +        || m_start.m_data.treeID != m_end.m_data.treeID)
&gt; &gt; &gt;
&gt; &gt; &gt; Use objectID() and treeID() methods.
&gt; &gt; &gt;
&gt; &gt;
&gt; &gt; I just moved this implementation from Mac specific to all-platform so that I
&gt; &gt; could use it in AXIsolatedObject.cpp. I don&apos;t know if I&apos;d feel comfortable
&gt; &gt; changing its implementation since I didn&apos;t write any tests to protect that.
&gt; &gt;
&gt; &gt; &gt; +#if ENABLE(ACCESSIBILITY_ISOLATED_TREE)
&gt; &gt; &gt; +// This lightweight representation of a text marker range is 16 bytes
&gt; &gt; &gt; (instead of 80 bytes), making it far more efficient to store in the isolated
&gt; &gt; &gt; object&apos;s property map.
&gt; &gt; &gt; +struct AXIsolatedTextMarkerRange {
&gt; &gt; &gt; +    AXID objectID;
&gt; &gt; &gt; +    unsigned start;
&gt; &gt; &gt; +    unsigned end;
&gt; &gt; &gt; +    AXIsolatedTextMarkerRange(const AXTextMarkerRange&amp;);
&gt; &gt; &gt; +};
&gt; &gt; &gt; +#endif
&gt; &gt; &gt;
&gt; &gt; &gt; I don&apos;t think we need this. If the goal is to store this data in an
&gt; &gt; &gt; AXIsolatedObject property map, you don&apos;t need to store the objectID again,
&gt; &gt; &gt; and hence you can just stor a CharacterRange.
&gt; &gt;
&gt; &gt; We have to store the text marker range on the object that posts the
&gt; &gt; notification, which won&apos;t have the same objectID() as the one we need for
&gt; &gt; the text marker range to be correct. We do this for consistency with AppKit
&gt; &gt; &amp; because we don&apos;t often deal with the static text, but the form control /
&gt; &gt; text field in VoiceOver.
&gt; 
&gt; Then let&apos;s call this struct something like AXObjectCharacterRange and
&gt; possibly derive from CharacterRange, just adding the AX objectID.
&gt; Alternatively, and maybe preferrably, you can add this data to the
&gt; AXIsolatedObject property map as an std::pair&lt;AXID, CharacterRange&gt;, or a
&gt; tuple.

Thanks for the suggestion! I changed it out to a std::pair&lt;AXID, CharacterRange&gt; and think that it went pretty well.

&gt; &gt;
&gt; &gt; &gt;
&gt; &gt; &gt; --- a/Source/WebCore/accessibility/AccessibilityObject.cpp
&gt; &gt; &gt; +++ b/Source/WebCore/accessibility/AccessibilityObject.cpp
&gt; &gt; &gt;
&gt; &gt; &gt;
&gt; &gt; &gt; +    if (!range || !range-&gt;length)
&gt; &gt; &gt; +        return std::nullopt;
&gt; &gt; &gt;
&gt; &gt; &gt; -    return false;
&gt; &gt; &gt; +    return range;
&gt; &gt; &gt;
&gt; &gt; &gt; You can write this in 1 line:
&gt; &gt; &gt;
&gt; &gt; &gt; +    return range &amp;&amp; range-&gt;length ? range : std::nullopt;
&gt; &gt; &gt;
&gt; &gt;
&gt; &gt; Thanks, will change that.
&gt; &gt;
&gt; &gt; &gt; +AXTextMarkerRange AccessibilityObject::textInputMarkedTextMarkerRange()
&gt; &gt; &gt; const
&gt; &gt; &gt;  {
&gt; &gt; &gt; ...
&gt; &gt; &gt; +    return { editor.compositionRange() };
&gt; &gt; &gt;  }
&gt; &gt; &gt;
&gt; &gt; &gt; So the only purpose of getting the AX object from the
&gt; &gt; &gt; editor.compositionNode() is to determine whether it is equal to this?
&gt; &gt; &gt; Wouldn&apos;t it be better to just compare editor.compositionNode() with
&gt; &gt; &gt; this-&gt;node()?
&gt; &gt;
&gt; &gt; This check is not always sufficient because we are often posting and storing
&gt; &gt; this information a bit higher up the tree, on the element that posts the
&gt; &gt; notification, which is consistent with AppKit. Although I initially tried
&gt; &gt; that, it did not work in Safari contexts.
&gt; &gt;
&gt; &gt; &gt;
&gt; &gt; &gt; --- a/Source/WebCore/accessibility/AccessibilityObject.h
&gt; &gt; &gt; +++ b/Source/WebCore/accessibility/AccessibilityObject.h
&gt; &gt; &gt;
&gt; &gt; &gt;      std::optional&lt;CharacterRange&gt; textInputMarkedRange() const final;
&gt; &gt; &gt; +    AXTextMarkerRange textInputMarkedTextMarkerRange() const final;
&gt; &gt; &gt;
&gt; &gt; &gt; Why do we need two methods in this class to do essentially the same thing? I
&gt; &gt; &gt; would keep textInputMarkedTextMarkerRange since the other one is just
&gt; &gt; &gt; textInputMarkedTextMarkerRange().characterRange().
&gt; &gt; &gt;
&gt; &gt;
&gt; &gt; I originally implemented the character range method first, and now it&apos;s
&gt; &gt; being used throughout the test harness and for a test. I didn&apos;t think it
&gt; &gt; would be worth going back and deleting that stuff.
&gt; 
&gt; Yes, let&apos;s clean this up and keep just one method.

Thanks for pushing me on this; I think that it was the right move. I removed the CharacterRange based method.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1967210</commentid>
    <comment_count>14</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2023-07-18 10:46:42 -0700</bug_when>
    <thetext>Committed 266133@main (0b3aac159d97): &lt;https://commits.webkit.org/266133@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 467045.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2038367</commentid>
    <comment_count>15</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2024-05-28 22:33:14 -0700</bug_when>
    <thetext>Test gardening commit 279429@main (2e01b0865746): &lt;https://commits.webkit.org/279429@main&gt;

Reviewed commits have been landed. Closing PR #29211 and removing active labels.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2039355</commentid>
    <comment_count>16</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2024-06-02 21:14:01 -0700</bug_when>
    <thetext>Test gardening commit 279631@main (5290e0747dc3): &lt;https://commits.webkit.org/279631@main&gt;

Reviewed commits have been landed. Closing PR #29440 and removing active labels.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>466888</attachid>
            <date>2023-06-30 13:47:58 -0700</date>
            <delta_ts>2023-06-30 14:47:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-258228-20230630134757.patch</filename>
            <type>text/plain</type>
            <size>58511</size>
            <attacher name="Jack Wiig">jhwiig</attacher>
            
              <data encoding="base64">RnJvbSAxOTEyOGUyMzBkMTJkNGIxMzM5M2ZjMTE1ZmJhNWYzYzYzNzllYjY0IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWNrIFdpaWcgPGpod2lpZ0BnbWFpbC5jb20+CkRhdGU6IEZy
aSwgMzAgSnVuIDIwMjMgMTM6MzI6NDAgLTA3MDAKU3ViamVjdDogW1BBVENIXSBQb3N0IEFjY2Vz
c2liaWxpdHkgbm90aWZpY2F0aW9ucyBkdXJpbmcgY29tcG9zaXRpb24gY29udGV4dHMKIGluZGlj
YXRpbmcgc3RhcnQsIGVuZCwgYW5kIHZhbHVlIGNoYW5nZS4KIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yNTgyMjggcmRhcjovL3Byb2JsZW0vMTEwOTI1Mzg0CgpSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KClRvIGFsaWduIG91cnNlbHZlcyB3aXRoIEFwcEtpdCwg
V2ViS2l0IHNob3VsZCBwb3N0IGEgbm90aWZpY2F0aW9uIHdoZW4gYSBjb21wb3NpdGlvbiBzdGFy
dHMgc28gdGhhdCBhc3Npc3RpdmUgdGVjaG5vbG9naWVzIGtub3cgdG8gcHJvY2VzcyBhbnkgZnV0
dXJlIHZhbHVlIGNoYW5nZXMgZm9yIHRoYXQgdWkgZWxlbWVudCBhcyBpbmNvbXBsZXRlIGNvbXBv
c2l0aW9uIGNoYW5nZXMuIFdoZW4gYSBjb21wb3NpdGlvbiBlbmRzLCBwb3N0IGEgbm90aWZpY2F0
aW9uIHRvIGluZGljYXRlIHRoYXQgdGhlIGNvbXBvc2l0aW9uIHNlc3Npb24gaGFzIGVuZGVkLgoK
VGhpcyBtb2RlbCBkb2VzIG5vdCBjb252ZXkgYW55IGluZm9ybWF0aW9uIGluIHRoZSB0ZXh0IG5v
dGlmaWNhdGlvbnMgKHVubGlrZSB3aGF0IG15IHBhc3QgY29tbWVudCBpbmRpY2F0ZXMpIGFuZCBw
b3N0cyB0aGUgbm90aWZpY2F0aW9uIGZyb20gdGhlIHRleHQgY29udHJvbCBjb250YWluaW5nIHRo
ZSB0ZXh0IGluZm9ybWF0aW9uLiBUaGlzIGFsaWducyB1cyBjbG9zZXIgd2l0aCBob3cgb3RoZXIg
VUkgZnJhbWV3b3JrcyBiZWhhdmUuCgoqIExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL2F0
dHJpYnV0ZWQtc3RyaW5nL2F0dHJpYnV0ZWQtc3RyaW5nLWhhcy1jb21wbGV0aW9uLWFubm90YXRp
b24uaHRtbDoKKiBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy90ZXh0LWlucHV0LW1hcmtl
ZC1yYW5nZS1leHBlY3RlZC50eHQ6CiogTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvdGV4
dC1pbnB1dC1tYXJrZWQtcmFuZ2UuaHRtbDoKKiBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21h
Yy90ZXh0LWlucHV0LW1hcmtlZC10ZXh0LW1hcmtlci1yYW5nZS1leHBlY3RlZC50eHQ6IEFkZGVk
LgoqIExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL3RleHQtaW5wdXQtbWFya2VkLXRleHQt
bWFya2VyLXJhbmdlLmh0bWw6IEFkZGVkLgoqIExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFj
L3RleHQtaW5wdXQtc2Vzc2lvbi1ub3RpZmljYXRpb25zLWV4cGVjdGVkLnR4dDogQWRkZWQuCiog
TGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvdGV4dC1pbnB1dC1zZXNzaW9uLW5vdGlmaWNh
dGlvbnMuaHRtbDogQWRkZWQuCiogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWExvZ2dl
ci5jcHA6CihXZWJDb3JlOjpvcGVyYXRvcjw8KToKKiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FYT2JqZWN0Q2FjaGUuY3BwOgooV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6b25UZXh0Q29t
cG9zaXRpb25DaGFuZ2UpOgooV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6dXBkYXRlSXNvbGF0ZWRU
cmVlKToKKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnRleHRDb21wb3NpdGlvbk9iamVjdEZvck5v
ZGUpOiBEZWxldGVkLgoqIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNo
ZS5oOgooV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6b25UZXh0Q29tcG9zaXRpb25DaGFuZ2UpOgoo
V2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6dXBkYXRlUmVsYXRpb25zKToKKFdlYkNvcmU6OkFYT2Jq
ZWN0Q2FjaGU6OnRleHRDb21wb3NpdGlvbk9iamVjdEZvck5vZGUpOiBEZWxldGVkLgoqIFNvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhUZXh0TWFya2VyLmNwcDoKKFdlYkNvcmU6OkFYVGV4
dE1hcmtlclJhbmdlOjpjaGFyYWN0ZXJSYW5nZSBjb25zdCk6CihXZWJDb3JlOjpBWElzb2xhdGVk
VGV4dE1hcmtlclJhbmdlOjpBWElzb2xhdGVkVGV4dE1hcmtlclJhbmdlKToKKiBTb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FYVGV4dE1hcmtlci5oOgoqIFNvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHA6CihXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5
T2JqZWN0Ojp0ZXh0SW5wdXRNYXJrZWRSYW5nZSBjb25zdCk6CihXZWJDb3JlOjpBY2Nlc3NpYmls
aXR5T2JqZWN0Ojp0ZXh0SW5wdXRNYXJrZWRUZXh0TWFya2VyUmFuZ2UgY29uc3QpOgooV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6aXNOb2RlRm9yQ29tcG9zaXRpb24gY29uc3QpOiBEZWxl
dGVkLgoqIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5o
OgoqIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdEludGVy
ZmFjZS5oOgoqIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvY29jb2EvQVhUZXh0TWFya2Vy
Q29jb2EubW06CihXZWJDb3JlOjpBWFRleHRNYXJrZXJSYW5nZTo6bnNSYW5nZSBjb25zdCk6Ciog
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9jb2NvYS9BY2Nlc3NpYmlsaXR5T2JqZWN0Q29j
b2EubW06CihXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0Ojpjb250ZW50Rm9yUmFuZ2UgY29u
c3QpOgoqIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL0FjY2Vzc2liaWxpdHlPYmpl
Y3RJT1MubW06CihXZWJDb3JlOjphdHRyaWJ1dGVkU3RyaW5nQ3JlYXRlKToKKiBTb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkT2JqZWN0LmNwcDoKKFdl
YkNvcmU6OkFYSXNvbGF0ZWRPYmplY3Q6OnRleHRJbnB1dE1hcmtlZFJhbmdlIGNvbnN0KToKKFdl
YkNvcmU6OkFYSXNvbGF0ZWRPYmplY3Q6OnRleHRJbnB1dE1hcmtlZFRleHRNYXJrZXJSYW5nZSBj
b25zdCk6CiogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29s
YXRlZE9iamVjdC5oOgoqIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVl
L0FYSXNvbGF0ZWRUcmVlLmNwcDoKKFdlYkNvcmU6OkFYSXNvbGF0ZWRUcmVlOjp1cGRhdGVOb2Rl
UHJvcGVydGllcyk6CiogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUv
QVhJc29sYXRlZFRyZWUuaDoKKiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9BWE9i
amVjdENhY2hlTWFjLm1tOgooV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6cG9zdFBsYXRmb3JtTm90
aWZpY2F0aW9uKToKKiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9BY2Nlc3NpYmls
aXR5T2JqZWN0TWFjLm1tOgooV2ViQ29yZTo6YXR0cmlidXRlZFN0cmluZ1NldENvbXBvc2l0aW9u
QXR0cmlidXRlcyk6CihXZWJDb3JlOjphdHRyaWJ1dGVkU3RyaW5nQ3JlYXRlKToKKiBTb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckJh
c2UuaDoKKiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlck1hYy5tbToKKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgQUxM
T1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5EXSk6CigtW1dlYkFjY2Vzc2liaWxpdHlP
YmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTpdKToKKiBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0VkaXRvci5jcHA6CihXZWJDb3JlOjpFZGl0b3I6OnNldENvbXBvc2l0aW9u
KToKKiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwOgooV2ViQ29yZTo6
VHlwaW5nQ29tbWFuZDo6aW5zZXJ0VGV4dCk6CiogVG9vbHMvRHVtcFJlbmRlclRyZWUvQWNjZXNz
aWJpbGl0eVVJRWxlbWVudC5jcHA6Cih0ZXh0SW5wdXRNYXJrZWRUZXh0TWFya2VyUmFuZ2VDYWxs
YmFjayk6CihBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0ZXh0SW5wdXRNYXJrZWRUZXh0TWFya2Vy
UmFuZ2UgY29uc3QpOgooQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Z2V0SlNDbGFzcyk6CiogVG9v
bHMvRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oOgoqIFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL2lvcy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50SU9TLm1tOgooQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6dGV4dElucHV0TWFya2VkVGV4dE1hcmtlclJhbmdlIGNvbnN0KToKKiBUb29s
cy9EdW1wUmVuZGVyVHJlZS9tYWMvQWNjZXNzaWJpbGl0eVVJRWxlbWVudE1hYy5tbToKKGF0dHJp
YnV0ZXNPZkVsZW1lbnQpOgooQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGV4dElucHV0TWFya2Vk
VGV4dE1hcmtlclJhbmdlIGNvbnN0KToKKiBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVk
QnVuZGxlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuY3BwOgooV1RSOjpBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50Ojp0ZXh0SW5wdXRNYXJrZWRUZXh0TWFya2VyUmFuZ2UpOgoqIFRvb2xzL1dlYktpdFRl
c3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oOgoqIFRvb2xz
L1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudC5pZGw6CiogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMv
QWNjZXNzaWJpbGl0eVVJRWxlbWVudE1hYy5tbToKKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6YWxsQXR0cmlidXRlcyk6CihXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRleHRJbnB1
dE1hcmtlZFRleHRNYXJrZXJSYW5nZSBjb25zdCk6Ci0tLQogU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BWExvZ2dlci5jcHAgICAgIHwgIDYgKysrCiAuLi4vV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FYT2JqZWN0Q2FjaGUuY3BwICAgfCAzOCArKysrKysrLS0tLS0tLS0KIFNvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5oICB8IDExICsrKy0tCiBTb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FYVGV4dE1hcmtlci5jcHAgfCAyNCArKysrKysrKysrCiBTb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYVGV4dE1hcmtlci5oICAgfCAxMiArKysrKwogLi4u
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAgICAgIHwgNDIgKysrKysrKysr
LS0tLS0tLS0KIC4uLi9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaCAgICAgICB8
ICAzICstCiAuLi4vQWNjZXNzaWJpbGl0eU9iamVjdEludGVyZmFjZS5oICAgICAgICAgICAgfCAg
MSArCiAuLi4vYWNjZXNzaWJpbGl0eS9jb2NvYS9BWFRleHRNYXJrZXJDb2NvYS5tbSAgfCAxMCAr
LS0tCiAuLi4vY29jb2EvQWNjZXNzaWJpbGl0eU9iamVjdENvY29hLm1tICAgICAgICAgfCAgNCAr
LQogLi4uL2lvcy9BY2Nlc3NpYmlsaXR5T2JqZWN0SU9TLm1tICAgICAgICAgICAgIHwgIDIgKy0K
IC4uLi9pc29sYXRlZHRyZWUvQVhJc29sYXRlZE9iamVjdC5jcHAgICAgICAgICB8IDE4ICsrKysr
KysrCiAuLi4vaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRPYmplY3QuaCAgICAgICAgICAgfCAgMyAr
LQogLi4uL2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkVHJlZS5jcHAgICAgICAgICAgIHwgMTAgKyst
LQogLi4uL2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkVHJlZS5oICAgICAgICAgICAgIHwgIDUgKy0K
IC4uLi9hY2Nlc3NpYmlsaXR5L21hYy9BWE9iamVjdENhY2hlTWFjLm1tICAgICB8IDE0ICsrKysr
KwogLi4uL21hYy9BY2Nlc3NpYmlsaXR5T2JqZWN0TWFjLm1tICAgICAgICAgICAgIHwgMTggKysr
KystLS0KIC4uLi9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJCYXNlLmggICB8ICAy
ICstCiAuLi4vbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tICAgfCAgOCAr
KysrCiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAgICAgICAgICAgICAgfCAxNCAr
KysrLS0KIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAgICAgICB8ICA1
ICstCiAuLi4vRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5jcHAgfCAxMSAr
KysrKwogVG9vbHMvRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oIHwgIDEg
KwogLi4uL2lvcy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50SU9TLm1tICAgICAgICAgIHwgIDUgKysK
IC4uLi9tYWMvQWNjZXNzaWJpbGl0eVVJRWxlbWVudE1hYy5tbSAgICAgICAgICB8IDE4ICsrKysr
KystCiAuLi4vSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5jcHAgfCAgMSAr
CiAuLi4vSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oICAgfCAgMSArCiAu
Li4vQmluZGluZ3MvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5pZGwgICAgICAgfCAgMSArCiAuLi4v
bWFjL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRNYWMubW0gICAgICAgICAgfCAxOCArKysrKysrLQog
Li4udXRlZC1zdHJpbmctaGFzLWNvbXBsZXRpb24tYW5ub3RhdGlvbi5odG1sIHwgMTIgKysrLS0K
IC4uLi9tYWMvdGV4dC1pbnB1dC1tYXJrZWQtcmFuZ2UtZXhwZWN0ZWQudHh0ICB8ICAyICstCiAu
Li4vbWFjL3RleHQtaW5wdXQtbWFya2VkLXJhbmdlLmh0bWwgICAgICAgICAgfCAgNSArLQogLi4u
bnB1dC1tYXJrZWQtdGV4dC1tYXJrZXItcmFuZ2UtZXhwZWN0ZWQudHh0IHwgMTUgKysrKysrCiAu
Li4vdGV4dC1pbnB1dC1tYXJrZWQtdGV4dC1tYXJrZXItcmFuZ2UuaHRtbCAgfCAzMyArKysrKysr
KysrKysrCiAuLi50LWlucHV0LXNlc3Npb24tbm90aWZpY2F0aW9ucy1leHBlY3RlZC50eHQgfCAx
MiArKysrKwogLi4uL21hYy90ZXh0LWlucHV0LXNlc3Npb24tbm90aWZpY2F0aW9ucy5odG1sIHwg
NDYgKysrKysrKysrKysrKysrKysrKwogMzYgZmlsZXMgY2hhbmdlZCwgMzQyIGluc2VydGlvbnMo
KyksIDg5IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IExheW91dFRlc3RzL2FjY2Vz
c2liaWxpdHkvbWFjL3RleHQtaW5wdXQtbWFya2VkLXRleHQtbWFya2VyLXJhbmdlLWV4cGVjdGVk
LnR4dAogY3JlYXRlIG1vZGUgMTAwNjQ0IExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL3Rl
eHQtaW5wdXQtbWFya2VkLXRleHQtbWFya2VyLXJhbmdlLmh0bWwKIGNyZWF0ZSBtb2RlIDEwMDY0
NCBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy90ZXh0LWlucHV0LXNlc3Npb24tbm90aWZp
Y2F0aW9ucy1leHBlY3RlZC50eHQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBMYXlvdXRUZXN0cy9hY2Nl
c3NpYmlsaXR5L21hYy90ZXh0LWlucHV0LXNlc3Npb24tbm90aWZpY2F0aW9ucy5odG1sCgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWExvZ2dlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYTG9nZ2VyLmNwcAppbmRleCBkNjEzNmIxZDYzNTIu
LmVjZGQ5NjhmMmM0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
WExvZ2dlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWExvZ2dlci5j
cHAKQEAgLTY0NCw2ICs2NDQsMTIgQEAgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFt
JiBzdHJlYW0sIEFYT2JqZWN0Q2FjaGU6OkFYTm90aWZpY2F0aW9uIG5vdGlmaWMKICAgICBjYXNl
IEFYT2JqZWN0Q2FjaGU6OkFYTm90aWZpY2F0aW9uOjpBWERyYWdnaW5nRXhpdGVkRHJvcFpvbmU6
CiAgICAgICAgIHN0cmVhbSA8PCAiQVhEcmFnZ2luZ0V4aXRlZERyb3Bab25lIjsKICAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBBWE9iamVjdENhY2hlOjpBWE5vdGlmaWNhdGlvbjo6QVhUZXh0SW5w
dXRNYXJraW5nU2Vzc2lvbkJlZ2FuOgorICAgICAgICBzdHJlYW0gPDwgIkFYVGV4dElucHV0TWFy
a2luZ1Nlc3Npb25CZWdhbiI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQVhPYmplY3RDYWNo
ZTo6QVhOb3RpZmljYXRpb246OkFYVGV4dElucHV0TWFya2luZ1Nlc3Npb25FbmRlZDoKKyAgICAg
ICAgc3RyZWFtIDw8ICJBWFRleHRJbnB1dE1hcmtpbmdTZXNzaW9uRW5kZWQiOworICAgICAgICBi
cmVhazsKICAgICB9CiAKICAgICByZXR1cm4gc3RyZWFtOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKaW5kZXggYTVhOTA4ZjdjZjNlLi5kZjMwZjYz
MzY0ZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RD
YWNoZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hl
LmNwcApAQCAtMTY1NCwxMyArMTY1NCwyNyBAQCB2b2lkIEFYT2JqZWN0Q2FjaGU6Om9uVmFsaWRp
dHlDaGFuZ2UoRWxlbWVudCYgZWxlbWVudCkKICAgICBwb3N0Tm90aWZpY2F0aW9uKGdldCgmZWxl
bWVudCksIG51bGxwdHIsIEFYSW52YWxpZFN0YXR1c0NoYW5nZWQpOwogfQogCi12b2lkIEFYT2Jq
ZWN0Q2FjaGU6Om9uVGV4dENvbXBvc2l0aW9uQ2hhbmdlKE5vZGUmIG5vZGUpCit2b2lkIEFYT2Jq
ZWN0Q2FjaGU6Om9uVGV4dENvbXBvc2l0aW9uQ2hhbmdlKE5vZGUmIG5vZGUsIENvbXBvc2l0aW9u
U3RhdGUgY29tcG9zaXRpb25TdGF0ZSwgYm9vbCB2YWx1ZUNoYW5nZWQpCiB7CisgICAgYXV0byog
b2JqZWN0ID0gZ2V0T3JDcmVhdGUoJm5vZGUpOworICAgIGlmICghb2JqZWN0KQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpZiAoYXV0byogb2JzZXJ2YWJsZU9iamVjdCA9IG9iamVjdC0+b2JzZXJ2
YWJsZU9iamVjdCgpKQorICAgICAgICBvYmplY3QgPSBvYnNlcnZhYmxlT2JqZWN0OworCiAjaWYg
RU5BQkxFKEFDQ0VTU0lCSUxJVFlfSVNPTEFURURfVFJFRSkKLSAgICB1cGRhdGVJc29sYXRlZFRy
ZWUodGV4dENvbXBvc2l0aW9uT2JqZWN0Rm9yTm9kZShub2RlKSwgQVhUZXh0Q29tcG9zaXRpb25D
aGFuZ2VkKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKG5vZGUpOworICAgIHVwZGF0ZUlzb2xh
dGVkVHJlZShvYmplY3QsIEFYVGV4dENvbXBvc2l0aW9uQ2hhbmdlZCk7CiAjZW5kaWYKKworICAg
IGlmIChjb21wb3NpdGlvblN0YXRlID09IENvbXBvc2l0aW9uU3RhdGU6OlN0YXJ0ZWQpCisgICAg
ICAgIHBvc3ROb3RpZmljYXRpb24ob2JqZWN0LCAmbm9kZS5kb2N1bWVudCgpLCBBWE5vdGlmaWNh
dGlvbjo6QVhUZXh0SW5wdXRNYXJraW5nU2Vzc2lvbkJlZ2FuLCBQb3N0VGFyZ2V0OjpFbGVtZW50
KTsKKworICAgIGlmICh2YWx1ZUNoYW5nZWQpCisgICAgICAgIHBvc3ROb3RpZmljYXRpb24ob2Jq
ZWN0LCAmbm9kZS5kb2N1bWVudCgpLCBBWE5vdGlmaWNhdGlvbjo6QVhWYWx1ZUNoYW5nZWQsIFBv
c3RUYXJnZXQ6OkVsZW1lbnQpOworCisgICAgaWYgKGNvbXBvc2l0aW9uU3RhdGUgPT0gQ29tcG9z
aXRpb25TdGF0ZTo6RW5kZWQpCisgICAgICAgIHBvc3ROb3RpZmljYXRpb24ob2JqZWN0LCAmbm9k
ZS5kb2N1bWVudCgpLCBBWE5vdGlmaWNhdGlvbjo6QVhUZXh0SW5wdXRNYXJraW5nU2Vzc2lvbkVu
ZGVkLCBQb3N0VGFyZ2V0OjpFbGVtZW50KTsKIH0KIAogI2lmbmRlZiBOREVCVUcKQEAgLTM5OTMs
NyArNDAwNyw3IEBAIHZvaWQgQVhPYmplY3RDYWNoZTo6dXBkYXRlSXNvbGF0ZWRUcmVlKGNvbnN0
IFZlY3RvcjxzdGQ6OnBhaXI8UmVmUHRyPEFjY2Vzc2liaWxpCiAgICAgICAgICAgICB0cmVlLT51
cGRhdGVOb2RlUHJvcGVydHkoKm5vdGlmaWNhdGlvbi5maXJzdCwgQVhQcm9wZXJ0eU5hbWU6OkNv
bHVtbkhlYWRlcnMpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQVhUZXh0Q29t
cG9zaXRpb25DaGFuZ2VkOgotICAgICAgICAgICAgdHJlZS0+dXBkYXRlTm9kZVByb3BlcnR5KCpu
b3RpZmljYXRpb24uZmlyc3QsIEFYUHJvcGVydHlOYW1lOjpUZXh0SW5wdXRNYXJrZWRSYW5nZSk7
CisgICAgICAgICAgICB0cmVlLT51cGRhdGVOb2RlUHJvcGVydHkoKm5vdGlmaWNhdGlvbi5maXJz
dCwgQVhQcm9wZXJ0eU5hbWU6OlRleHRJbnB1dE1hcmtlZFRleHRNYXJrZXJSYW5nZSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBWFVSTENoYW5nZWQ6CiAgICAgICAgICAgICB0
cmVlLT51cGRhdGVOb2RlUHJvcGVydHkoKm5vdGlmaWNhdGlvbi5maXJzdCwgQVhQcm9wZXJ0eU5h
bWU6OlVSTCk7CkBAIC00NTc4LDIwICs0NTkyLDYgQEAgQVhUZXh0Q2hhbmdlIEFYT2JqZWN0Q2Fj
aGU6OnRleHRDaGFuZ2VGb3JFZGl0VHlwZShBWFRleHRFZGl0VHlwZSB0eXBlKQogfQogI2VuZGlm
CiAKLUFjY2Vzc2liaWxpdHlPYmplY3QqIEFYT2JqZWN0Q2FjaGU6OnRleHRDb21wb3NpdGlvbk9i
amVjdEZvck5vZGUoTm9kZSYgbm9kZSkKLXsKLSAgICBXZWFrUHRyIG9iamVjdCA9IGdldCgmbm9k
ZSk7Ci0gICAgaWYgKG9iamVjdCkKLSAgICAgICAgb2JqZWN0ID0gb2JqZWN0LT5vYnNlcnZhYmxl
T2JqZWN0KCk7Ci0KLSNpZiBQTEFURk9STShNQUMpCi0gICAgLy8gSW4gb3VyIE1hYyBpbXBsZW1l
bnRhdGlvbnMgZm9yIHBvc3RpbmcgdGV4dCBub3RpZmljYXRpb25zLCB3ZSBmYWxsIGJhY2sgb24g
dGhlIHdlYiBhcmVhIGlmIHRoZSBvYnNlcnZhYmxlIG9iamVjdCBpcyBudWxscHRyLgotICAgIGlm
ICghb2JqZWN0KQotICAgICAgICBvYmplY3QgPSByb290V2ViQXJlYSgpOwotI2VuZGlmCi0gICAg
cmV0dXJuIG9iamVjdC5nZXQoKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5k
aWYgLy8gRU5BQkxFKEFDQ0VTU0lCSUxJVFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQVhPYmplY3RDYWNoZS5oCmluZGV4IGQ4NjBkMjBmYWI3ZS4uOWRhODM4M2NjZjg2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaApAQCAtMTc5LDYg
KzE3OSw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBhdHRhY2hXcmFwcGVyKEFjY2Vzc2liaWxpdHlP
YmplY3QqKTsKIAogcHVibGljOgorICAgIGVudW0gQ29tcG9zaXRpb25TdGF0ZSB7IFN0YXJ0ZWQs
IEluUHJvZ3Jlc3MsIEVuZGVkIH07CisKICAgICB2b2lkIG9uUGFnZUFjdGl2aXR5U3RhdGVDaGFu
Z2UoT3B0aW9uU2V0PEFjdGl2aXR5U3RhdGU+KTsKICAgICB2b2lkIHNldFBhZ2VBY3Rpdml0eVN0
YXRlKE9wdGlvblNldDxBY3Rpdml0eVN0YXRlPiBzdGF0ZSkgeyBtX3BhZ2VBY3Rpdml0eVN0YXRl
ID0gc3RhdGU7IH0KICAgICBPcHRpb25TZXQ8QWN0aXZpdHlTdGF0ZT4gcGFnZUFjdGl2aXR5U3Rh
dGUoKSBjb25zdCB7IHJldHVybiBtX3BhZ2VBY3Rpdml0eVN0YXRlOyB9CkBAIC0xOTMsNyArMTk1
LDcgQEAgcHVibGljOgogICAgIHZvaWQgb25UZXh0U2VjdXJpdHlDaGFuZ2VkKEhUTUxJbnB1dEVs
ZW1lbnQmKTsKICAgICB2b2lkIG9uVGl0bGVDaGFuZ2UoRG9jdW1lbnQmKTsKICAgICB2b2lkIG9u
VmFsaWRpdHlDaGFuZ2UoRWxlbWVudCYpOwotICAgIHZvaWQgb25UZXh0Q29tcG9zaXRpb25DaGFu
Z2UoTm9kZSYpOworICAgIHZvaWQgb25UZXh0Q29tcG9zaXRpb25DaGFuZ2UoTm9kZSYsIENvbXBv
c2l0aW9uU3RhdGUsIGJvb2wpOwogICAgIHZvaWQgdmFsdWVDaGFuZ2VkKEVsZW1lbnQqKTsKICAg
ICB2b2lkIGNoZWNrZWRTdGF0ZUNoYW5nZWQoTm9kZSopOwogICAgIHZvaWQgYXV0b2ZpbGxUeXBl
Q2hhbmdlZChOb2RlKik7CkBAIC0zNjAsNiArMzYyLDggQEAgcHVibGljOgogICAgICAgICBBWFNl
bGVjdGVkVGV4dENoYW5nZWQsCiAgICAgICAgIEFYU2V0U2l6ZUNoYW5nZWQsCiAgICAgICAgIEFY
VGFibGVIZWFkZXJzQ2hhbmdlZCwKKyAgICAgICAgQVhUZXh0SW5wdXRNYXJraW5nU2Vzc2lvbkJl
Z2FuLAorICAgICAgICBBWFRleHRJbnB1dE1hcmtpbmdTZXNzaW9uRW5kZWQsCiAgICAgICAgIEFY
VVJMQ2hhbmdlZCwKICAgICAgICAgQVhWYWx1ZUNoYW5nZWQsCiAgICAgICAgIEFYU2Nyb2xsZWRU
b0FuY2hvciwKQEAgLTQ1Niw4ICs0NjAsNiBAQCBwdWJsaWM6CiAgICAgc3RkOjpvcHRpb25hbDxW
ZWN0b3I8QVhJRD4+IHJlbGF0ZWRPYmplY3RJRHNGb3IoY29uc3QgQVhDb3JlT2JqZWN0JiwgQVhS
ZWxhdGlvblR5cGUpOwogICAgIHZvaWQgdXBkYXRlUmVsYXRpb25zKEVsZW1lbnQmLCBjb25zdCBR
dWFsaWZpZWROYW1lJik7CiAKLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiB0ZXh0Q29tcG9zaXRp
b25PYmplY3RGb3JOb2RlKE5vZGUmKTsKLQogI2lmIEVOQUJMRShBQ0NFU1NJQklMSVRZX0lTT0xB
VEVEX1RSRUUpCiAgICAgdm9pZCBzY2hlZHVsZU9iamVjdFJlZ2lvbnNVcGRhdGUoYm9vbCBzY2hl
ZHVsZUltbWVkaWF0ZWx5ID0gZmFsc2UpIHsgbV9nZW9tZXRyeU1hbmFnZXItPnNjaGVkdWxlT2Jq
ZWN0UmVnaW9uc1VwZGF0ZShzY2hlZHVsZUltbWVkaWF0ZWx5KTsgfQogICAgIHZvaWQgd2lsbFVw
ZGF0ZU9iamVjdFJlZ2lvbnMoKSB7IG1fZ2VvbWV0cnlNYW5hZ2VyLT53aWxsVXBkYXRlT2JqZWN0
UmVnaW9ucygpOyB9CkBAIC03MzAsNyArNzMyLDcgQEAgaW5saW5lIHZvaWQgQVhPYmplY3RDYWNo
ZTo6b25TZWxlY3RlZENoYW5nZWQoTm9kZSopIHsgfQogaW5saW5lIHZvaWQgQVhPYmplY3RDYWNo
ZTo6b25UZXh0U2VjdXJpdHlDaGFuZ2VkKEhUTUxJbnB1dEVsZW1lbnQmKSB7IH0KIGlubGluZSB2
b2lkIEFYT2JqZWN0Q2FjaGU6Om9uVGl0bGVDaGFuZ2UoRG9jdW1lbnQmKSB7IH0KIGlubGluZSB2
b2lkIEFYT2JqZWN0Q2FjaGU6Om9uVmFsaWRpdHlDaGFuZ2UoRWxlbWVudCYpIHsgfQotaW5saW5l
IHZvaWQgQVhPYmplY3RDYWNoZTo6b25UZXh0Q29tcG9zaXRpb25DaGFuZ2UoTm9kZSYpIHsgfQor
aW5saW5lIHZvaWQgQVhPYmplY3RDYWNoZTo6b25UZXh0Q29tcG9zaXRpb25DaGFuZ2UoTm9kZSYs
IENvbXBvc2l0aW9uU3RhdGUsIGJvb2wpIHsgfQogaW5saW5lIHZvaWQgQVhPYmplY3RDYWNoZTo6
dmFsdWVDaGFuZ2VkKEVsZW1lbnQqKSB7IH0KIGlubGluZSB2b2lkIEFYT2JqZWN0Q2FjaGU6Om9u
Rm9jdXNDaGFuZ2UoTm9kZSosIE5vZGUqKSB7IH0KIGlubGluZSB2b2lkIEFYT2JqZWN0Q2FjaGU6
Om9uUGFnZUFjdGl2aXR5U3RhdGVDaGFuZ2UoT3B0aW9uU2V0PEFjdGl2aXR5U3RhdGU+KSB7IH0K
QEAgLTc4MSw3ICs3ODMsNiBAQCBpbmxpbmUgdm9pZCBBWE9iamVjdENhY2hlOjp1cGRhdGVMb2Fk
aW5nUHJvZ3Jlc3MoZG91YmxlKSB7IH0KIGlubGluZSBTaW1wbGVSYW5nZSBBWE9iamVjdENhY2hl
OjpyYW5nZUZvck5vZGVDb250ZW50cyhOb2RlJiBub2RlKSB7IHJldHVybiBtYWtlUmFuZ2VTZWxl
Y3RpbmdOb2RlQ29udGVudHMobm9kZSk7IH0KIGlubGluZSBzdGQ6Om9wdGlvbmFsPFZlY3RvcjxB
WElEPj4gQVhPYmplY3RDYWNoZTo6cmVsYXRlZE9iamVjdElEc0Zvcihjb25zdCBBWENvcmVPYmpl
Y3QmLCBBWFJlbGF0aW9uVHlwZSkgeyByZXR1cm4gc3RkOjpudWxsb3B0OyB9CiBpbmxpbmUgdm9p
ZCBBWE9iamVjdENhY2hlOjp1cGRhdGVSZWxhdGlvbnMoRWxlbWVudCYsIGNvbnN0IFF1YWxpZmll
ZE5hbWUmKSB7IH0KLWlubGluZSBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBWE9iamVjdENhY2hlOjp0
ZXh0Q29tcG9zaXRpb25PYmplY3RGb3JOb2RlKE5vZGUmKSB7IHJldHVybiBudWxscHRyOyB9CiBp
bmxpbmUgdm9pZCBBWE9iamVjdENhY2hlOjpyZW1vdmUoQVhJRCkgeyB9CiBpbmxpbmUgdm9pZCBB
WE9iamVjdENhY2hlOjpyZW1vdmUoUmVuZGVyT2JqZWN0KikgeyB9CiBpbmxpbmUgdm9pZCBBWE9i
amVjdENhY2hlOjpyZW1vdmUoTm9kZSYpIHsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BWFRleHRNYXJrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BWFRleHRNYXJrZXIuY3BwCmluZGV4IGI1NTNmMWFiZWY3My4uNTY1ZTdlNjc0YmIyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYVGV4dE1hcmtlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWFRleHRNYXJrZXIuY3BwCkBAIC0y
NzUsNiArMjc1LDE5IEBAIHN0ZDo6b3B0aW9uYWw8U2ltcGxlUmFuZ2U+IEFYVGV4dE1hcmtlclJh
bmdlOjpzaW1wbGVSYW5nZSgpIGNvbnN0CiAgICAgcmV0dXJuIHsgeyAqc3RhcnRCb3VuZGFyeVBv
aW50LCAqZW5kQm91bmRhcnlQb2ludCB9IH07CiB9CiAKK3N0ZDo6b3B0aW9uYWw8Q2hhcmFjdGVy
UmFuZ2U+IEFYVGV4dE1hcmtlclJhbmdlOjpjaGFyYWN0ZXJSYW5nZSgpIGNvbnN0Cit7CisgICAg
aWYgKG1fc3RhcnQubV9kYXRhLm9iamVjdElEICE9IG1fZW5kLm1fZGF0YS5vYmplY3RJRAorICAg
ICAgICB8fCBtX3N0YXJ0Lm1fZGF0YS50cmVlSUQgIT0gbV9lbmQubV9kYXRhLnRyZWVJRCkKKyAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGlmIChtX3N0YXJ0Lm1fZGF0YS5jaGFy
YWN0ZXJPZmZzZXQgPiBtX2VuZC5tX2RhdGEuY2hhcmFjdGVyT2Zmc2V0KSB7CisgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0K
KyAgICByZXR1cm4geyB7IG1fc3RhcnQubV9kYXRhLmNoYXJhY3Rlck9mZnNldCwgbV9lbmQubV9k
YXRhLmNoYXJhY3Rlck9mZnNldCAtIG1fc3RhcnQubV9kYXRhLmNoYXJhY3Rlck9mZnNldCB9IH07
Cit9CisKIHN0ZDo6cGFydGlhbF9vcmRlcmluZyBwYXJ0aWFsT3JkZXIoY29uc3QgQVhUZXh0TWFy
a2VyJiBtYXJrZXIxLCBjb25zdCBBWFRleHRNYXJrZXImIG1hcmtlcjIpCiB7CiAgICAgaWYgKG1h
cmtlcjEub2JqZWN0SUQoKSA9PSBtYXJrZXIyLm9iamVjdElEKCkgJiYgbWFya2VyMS50cmVlSUQo
KSA9PSBtYXJrZXIyLnRyZWVJRCgpKSB7CkBAIC0yOTgsNCArMzExLDE1IEBAIHN0ZDo6cGFydGlh
bF9vcmRlcmluZyBwYXJ0aWFsT3JkZXIoY29uc3QgQVhUZXh0TWFya2VyJiBtYXJrZXIxLCBjb25z
dCBBWFRleHRNYXJrCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorI2lmIEVOQUJMRShBQ0NFU1NJ
QklMSVRZX0lTT0xBVEVEX1RSRUUpCitBWElzb2xhdGVkVGV4dE1hcmtlclJhbmdlOjpBWElzb2xh
dGVkVGV4dE1hcmtlclJhbmdlKGNvbnN0IEFYVGV4dE1hcmtlclJhbmdlJiByYW5nZSkKK3sKKyAg
ICBvYmplY3RJRCA9IHJhbmdlLnN0YXJ0KCkub2JqZWN0SUQoKTsKKyAgICBpZiAoYXV0byBjaGFy
YWN0ZXJSYW5nZSA9IHJhbmdlLmNoYXJhY3RlclJhbmdlKCkpIHsKKyAgICAgICAgc3RhcnQgPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oY2hhcmFjdGVyUmFuZ2UtPmxvY2F0aW9uKTsKKyAgICAgICAg
ZW5kID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNoYXJhY3RlclJhbmdlLT5sb2NhdGlvbiArIGNo
YXJhY3RlclJhbmdlLT5sZW5ndGgpOworICAgIH0KK30KKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYVGV4
dE1hcmtlci5oIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWFRleHRNYXJrZXIuaApp
bmRleCAwOTNmMjdlNDFlNjIuLjFlMjhiYzM2MjIyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BWFRleHRNYXJrZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FYVGV4dE1hcmtlci5oCkBAIC0xNTUsNiArMTU1LDcgQEAgcHVibGljOgogICAg
IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0ICYmIG1fZW5kOyB9CiAgICAg
b3BlcmF0b3IgVmlzaWJsZVBvc2l0aW9uUmFuZ2UoKSBjb25zdDsKICAgICBzdGQ6Om9wdGlvbmFs
PFNpbXBsZVJhbmdlPiBzaW1wbGVSYW5nZSgpIGNvbnN0OworICAgIHN0ZDo6b3B0aW9uYWw8Q2hh
cmFjdGVyUmFuZ2U+IGNoYXJhY3RlclJhbmdlKCkgY29uc3Q7CiAKICNpZiBQTEFURk9STShNQUMp
CiAgICAgUmV0YWluUHRyPEFYVGV4dE1hcmtlclJhbmdlUmVmPiBwbGF0Zm9ybURhdGEoKSBjb25z
dDsKQEAgLTE3Myw2ICsxNzQsMTcgQEAgcHJpdmF0ZToKICAgICBBWFRleHRNYXJrZXIgbV9lbmQ7
CiB9OwogCisjaWYgRU5BQkxFKEFDQ0VTU0lCSUxJVFlfSVNPTEFURURfVFJFRSkKKy8vIFRoaXMg
bGlnaHR3ZWlnaHQgcmVwcmVzZW50YXRpb24gb2YgYSB0ZXh0IG1hcmtlciByYW5nZSBpcyAxNiBi
eXRlcyAoaW5zdGVhZCBvZiA4MCBieXRlcyksIG1ha2luZyBpdCBmYXIgbW9yZSBlZmZpY2llbnQg
dG8gc3RvcmUgaW4gdGhlIGlzb2xhdGVkIG9iamVjdCdzIHByb3BlcnR5IG1hcC4KK2NsYXNzIEFY
SXNvbGF0ZWRUZXh0TWFya2VyUmFuZ2UgeworcHVibGljOgorICAgIEFYSUQgb2JqZWN0SUQ7Cisg
ICAgdW5zaWduZWQgc3RhcnQ7CisgICAgdW5zaWduZWQgZW5kOworICAgIEFYSXNvbGF0ZWRUZXh0
TWFya2VyUmFuZ2UoY29uc3QgQVhUZXh0TWFya2VyUmFuZ2UmKTsKK307CisjZW5kaWYKKwogaW5s
aW5lIE5vZGUqIEFYVGV4dE1hcmtlcjo6bm9kZSgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eU9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlPYmplY3QuY3BwCmluZGV4IDJhNmJmZDdkMjhiNS4uMzMzY2ZjYzRkMTBiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3Qu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVj
dC5jcHAKQEAgLTQwNSwzOSArNDA1LDQxIEBAIHN0ZDo6b3B0aW9uYWw8U2ltcGxlUmFuZ2U+IEFj
Y2Vzc2liaWxpdHlPYmplY3Q6Om1pc3NwZWxsaW5nUmFuZ2UoY29uc3QgU2ltcGxlUmFuCiAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKIH0KIAotYm9vbCBBY2Nlc3NpYmlsaXR5T2JqZWN0Ojppc05v
ZGVGb3JDb21wb3NpdGlvbihjb25zdCBFZGl0b3ImIGVkaXRvcikgY29uc3QKK3N0ZDo6b3B0aW9u
YWw8Q2hhcmFjdGVyUmFuZ2U+IEFjY2Vzc2liaWxpdHlPYmplY3Q6OnRleHRJbnB1dE1hcmtlZFJh
bmdlKCkgY29uc3QKIHsKLSAgICBXZWFrUHRyIGNvbXBvc2l0aW9uTm9kZSA9IGVkaXRvci5jb21w
b3NpdGlvbk5vZGUoKTsKLSAgICBpZiAoIWNvbXBvc2l0aW9uTm9kZSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgV2Vha1B0ciBjYWNoZSA9IGF4T2JqZWN0Q2FjaGUoKTsKLSAgICBpZiAo
IWNhY2hlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoYXV0byogY29tcG9zaXRp
b25PYmplY3QgPSBjYWNoZS0+dGV4dENvbXBvc2l0aW9uT2JqZWN0Rm9yTm9kZSgqY29tcG9zaXRp
b25Ob2RlKSkKLSAgICAgICAgcmV0dXJuIGNvbXBvc2l0aW9uT2JqZWN0LT5vYmplY3RJRCgpID09
IG9iamVjdElEKCk7CisgICAgYXV0byByYW5nZSA9IHRleHRJbnB1dE1hcmtlZFRleHRNYXJrZXJS
YW5nZSgpLmNoYXJhY3RlclJhbmdlKCk7CisgICAgaWYgKCFyYW5nZSB8fCAhcmFuZ2UtPmxlbmd0
aCkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAotICAgIHJldHVybiBmYWxzZTsKKyAg
ICByZXR1cm4gcmFuZ2U7CiB9CiAKLXN0ZDo6b3B0aW9uYWw8Q2hhcmFjdGVyUmFuZ2U+IEFjY2Vz
c2liaWxpdHlPYmplY3Q6OnRleHRJbnB1dE1hcmtlZFJhbmdlKCkgY29uc3QKK0FYVGV4dE1hcmtl
clJhbmdlIEFjY2Vzc2liaWxpdHlPYmplY3Q6OnRleHRJbnB1dE1hcmtlZFRleHRNYXJrZXJSYW5n
ZSgpIGNvbnN0CiB7CiAgICAgV2Vha1B0ciBub2RlID0gdGhpcy0+bm9kZSgpOwogICAgIGlmICgh
bm9kZSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAgICAgcmV0dXJuIHsgfTsK
IAogICAgIGF1dG8qIGZyYW1lID0gbm9kZS0+ZG9jdW1lbnQoKS5mcmFtZSgpOwogICAgIGlmICgh
ZnJhbWUpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAgIHJldHVybiB7IH07
CisKKyAgICBhdXRvKiBjYWNoZSA9IGF4T2JqZWN0Q2FjaGUoKTsKKyAgICBpZiAoIWNhY2hlKQor
ICAgICAgICByZXR1cm4geyB9OwogCiAgICAgYXV0byYgZWRpdG9yID0gZnJhbWUtPmVkaXRvcigp
OwotICAgIGF1dG8gcmFuZ2UgPSBlZGl0b3IuY29tcG9zaXRpb25SYW5nZSgpOwotICAgIGlmICgh
cmFuZ2UgfHwgIWlzTm9kZUZvckNvbXBvc2l0aW9uKGVkaXRvcikpCi0gICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7CisgICAgYXV0byogb2JqZWN0ID0gY2FjaGUtPmdldE9yQ3JlYXRlKGVkaXRv
ci5jb21wb3NpdGlvbk5vZGUoKSk7CisgICAgaWYgKCFvYmplY3QpCisgICAgICAgIHJldHVybiB7
IH07CisKKyAgICBpZiAoYXV0byogb2JzZXJ2YWJsZU9iamVjdCA9IG9iamVjdC0+b2JzZXJ2YWJs
ZU9iamVjdCgpKQorICAgICAgICBvYmplY3QgPSBvYnNlcnZhYmxlT2JqZWN0OworCisgICAgaWYg
KG9iamVjdC0+b2JqZWN0SUQoKSAhPSBvYmplY3RJRCgpKQorICAgICAgICByZXR1cm4geyB9Owog
Ci0gICAgYXV0byBzY29wZSA9IG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cygqbm9kZSk7
Ci0gICAgcmV0dXJuIGNoYXJhY3RlclJhbmdlKHNjb3BlLCAqcmFuZ2UpOworICAgIHJldHVybiB7
IGVkaXRvci5jb21wb3NpdGlvblJhbmdlKCkgfTsKIH0KIAogdW5zaWduZWQgQWNjZXNzaWJpbGl0
eU9iamVjdDo6YmxvY2txdW90ZUxldmVsKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmgKaW5kZXggMmFmNmU1OTRmY2Y2Li41
YTdiNjM3NzI4ZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eU9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eU9iamVjdC5oCkBAIC0yNDMsNiArMjQzLDcgQEAgcHVibGljOgogICAgIGJvb2wg
aGFzVW5kZXJsaW5lKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KICAgICBib29s
IGhhc0hpZ2hsaWdodGluZygpIGNvbnN0IG92ZXJyaWRlOwogICAgIHN0ZDo6b3B0aW9uYWw8Q2hh
cmFjdGVyUmFuZ2U+IHRleHRJbnB1dE1hcmtlZFJhbmdlKCkgY29uc3QgZmluYWw7CisgICAgQVhU
ZXh0TWFya2VyUmFuZ2UgdGV4dElucHV0TWFya2VkVGV4dE1hcmtlclJhbmdlKCkgY29uc3QgZmlu
YWw7CiAKICAgICBib29sIHN1cHBvcnRzRGF0ZXRpbWVBdHRyaWJ1dGUoKSBjb25zdCBvdmVycmlk
ZTsKICAgICBTdHJpbmcgZGF0ZXRpbWVBdHRyaWJ1dGVWYWx1ZSgpIGNvbnN0IG92ZXJyaWRlOwpA
QCAtODE1LDggKzgxNiw2IEBAIHByaXZhdGU6CiAgICAgLy8gU3BlY2lhbCBoYW5kbGluZyBvZiBj
bGljayBwb2ludCBmb3IgbGlua3MuCiAgICAgSW50UG9pbnQgbGlua0NsaWNrUG9pbnQoKTsKIAot
ICAgIGJvb2wgaXNOb2RlRm9yQ29tcG9zaXRpb24oY29uc3QgRWRpdG9yJikgY29uc3Q7Ci0KIHBy
b3RlY3RlZDogLy8gRklYTUU6IE1ha2UgdGhlIGRhdGEgbWVtYmVycyBwcml2YXRlLgogICAgIEFj
Y2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBtX2NoaWxkcmVuOwogICAgIG11dGFibGUgYm9vbCBt
X2NoaWxkcmVuSW5pdGlhbGl6ZWQgeyBmYWxzZSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0SW50ZXJmYWNlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3RJbnRlcmZhY2UuaAppbmRl
eCAzNDEwZTlhMTNlMjEuLjJiNzhhNmIxMzZmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0SW50ZXJmYWNlLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0SW50ZXJmYWNlLmgKQEAg
LTk4OSw2ICs5ODksNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGhhc1VuZGVybGluZSgp
IGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgaGFzSGlnaGxpZ2h0aW5nKCkgY29uc3QgPSAw
OwogICAgIHZpcnR1YWwgc3RkOjpvcHRpb25hbDxDaGFyYWN0ZXJSYW5nZT4gdGV4dElucHV0TWFy
a2VkUmFuZ2UoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBBWFRleHRNYXJrZXJSYW5nZSB0ZXh0
SW5wdXRNYXJrZWRUZXh0TWFya2VyUmFuZ2UoKSBjb25zdCA9IDA7CiAKICAgICB2aXJ0dWFsIGJv
b2wgc3VwcG9ydHNEYXRldGltZUF0dHJpYnV0ZSgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIFN0
cmluZyBkYXRldGltZUF0dHJpYnV0ZVZhbHVlKCkgY29uc3QgPSAwOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9jb2NvYS9BWFRleHRNYXJrZXJDb2NvYS5tbSBiL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvY29jb2EvQVhUZXh0TWFya2VyQ29jb2EubW0KaW5k
ZXggNDk1ZjQzZjdjOWIzLi4wMTkyNjIxMWRkMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvY29jb2EvQVhUZXh0TWFya2VyQ29jb2EubW0KKysrIGIvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9jb2NvYS9BWFRleHRNYXJrZXJDb2NvYS5tbQpAQCAtOTMsMTUg
KzkzLDcgQEAgUmV0YWluUHRyPEFYVGV4dE1hcmtlclJhbmdlUmVmPiBBWFRleHRNYXJrZXJSYW5n
ZTo6cGxhdGZvcm1EYXRhKCkgY29uc3QKIAogc3RkOjpvcHRpb25hbDxOU1JhbmdlPiBBWFRleHRN
YXJrZXJSYW5nZTo6bnNSYW5nZSgpIGNvbnN0CiB7Ci0gICAgaWYgKG1fc3RhcnQubV9kYXRhLm9i
amVjdElEICE9IG1fZW5kLm1fZGF0YS5vYmplY3RJRAotICAgICAgICB8fCBtX3N0YXJ0Lm1fZGF0
YS50cmVlSUQgIT0gbV9lbmQubV9kYXRhLnRyZWVJRCkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKLQotICAgIGlmIChtX3N0YXJ0Lm1fZGF0YS5jaGFyYWN0ZXJPZmZzZXQgPiBtX2VuZC5t
X2RhdGEuY2hhcmFjdGVyT2Zmc2V0KSB7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgIH0KLSAgICByZXR1cm4gTlNNYWtlUmFu
Z2UobV9zdGFydC5tX2RhdGEuY2hhcmFjdGVyT2Zmc2V0LCBtX2VuZC5tX2RhdGEuY2hhcmFjdGVy
T2Zmc2V0IC0gbV9zdGFydC5tX2RhdGEuY2hhcmFjdGVyT2Zmc2V0KTsKKyAgICByZXR1cm4gY2hh
cmFjdGVyUmFuZ2UoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9jb2NvYS9BY2Nlc3NpYmlsaXR5T2JqZWN0Q29j
b2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2NvY29hL0FjY2Vzc2liaWxpdHlP
YmplY3RDb2NvYS5tbQppbmRleCAwY2JmMWZiYTY5NWMuLjM1YzI1NTg1ZTRhOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9jb2NvYS9BY2Nlc3NpYmlsaXR5T2JqZWN0
Q29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9jb2NvYS9BY2Nlc3Np
YmlsaXR5T2JqZWN0Q29jb2EubW0KQEAgLTMzNywxMSArMzM3LDExIEBAIFJldGFpblB0cjxOU0Fy
cmF5PiBBY2Nlc3NpYmlsaXR5T2JqZWN0Ojpjb250ZW50Rm9yUmFuZ2UoY29uc3QgU2ltcGxlUmFu
Z2UmIHJhbmdlCiAgICAgICAgIGlmIChpdC50ZXh0KCkubGVuZ3RoKCkpIHsKICAgICAgICAgICAg
IGF1dG8gbGlzdE1hcmtlclRleHQgPSBsaXN0TWFya2VyVGV4dEZvck5vZGVBbmRQb3NpdGlvbigm
bm9kZSwgbWFrZUNvbnRhaW5lck9mZnNldFBvc2l0aW9uKGl0LnJhbmdlKCkuc3RhcnQpKTsKICAg
ICAgICAgICAgIGlmICghbGlzdE1hcmtlclRleHQuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKGF1dG8gYXR0clN0cmluZyA9IGF0dHJpYnV0ZWRTdHJpbmdDcmVhdGUoJm5vZGUsIGxp
c3RNYXJrZXJUZXh0LCBTcGVsbENoZWNrOjpObykpCisgICAgICAgICAgICAgICAgaWYgKGF1dG8g
YXR0clN0cmluZyA9IGF0dHJpYnV0ZWRTdHJpbmdDcmVhdGUoJm5vZGUsIGxpc3RNYXJrZXJUZXh0
LCBpdC5yYW5nZSgpLCBTcGVsbENoZWNrOjpObykpCiAgICAgICAgICAgICAgICAgICAgIFtyZXN1
bHQgYWRkT2JqZWN0OmF0dHJTdHJpbmcuZ2V0KCldOwogICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICBpZiAoYXV0byBhdHRyU3RyaW5nID0gYXR0cmlidXRlZFN0cmluZ0NyZWF0ZSgmbm9kZSwg
aXQudGV4dCgpLCBzcGVsbENoZWNrKSkKKyAgICAgICAgICAgIGlmIChhdXRvIGF0dHJTdHJpbmcg
PSBhdHRyaWJ1dGVkU3RyaW5nQ3JlYXRlKCZub2RlLCBpdC50ZXh0KCksIGl0LnJhbmdlKCksIHNw
ZWxsQ2hlY2spKQogICAgICAgICAgICAgICAgIFtyZXN1bHQgYWRkT2JqZWN0OmF0dHJTdHJpbmcu
Z2V0KCldOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWYgKE5vZGUqIHJlcGxhY2Vk
Tm9kZSA9IGl0Lm5vZGUoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9pb3MvQWNjZXNzaWJpbGl0eU9iamVjdElPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvaW9zL0FjY2Vzc2liaWxpdHlPYmplY3RJT1MubW0KaW5kZXggY2I5ZWM3ZGM1M2Zj
Li43OWMwMmZkMzJkMDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
aW9zL0FjY2Vzc2liaWxpdHlPYmplY3RJT1MubW0KKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9pb3MvQWNjZXNzaWJpbGl0eU9iamVjdElPUy5tbQpAQCAtMjA4LDcgKzIwOCw3IEBA
IHN0YXRpYyB2b2lkIGF0dHJpYnV0ZVN0cmluZ1NldFN0eWxlKE5TTXV0YWJsZUF0dHJpYnV0ZWRT
dHJpbmcgKmF0dHJTdHJpbmcsIFJlbmRlCiAgICAgICAgIFthdHRyU3RyaW5nIGFkZEF0dHJpYnV0
ZTpVSUFjY2Vzc2liaWxpdHlUZXh0QXR0cmlidXRlQ29udGV4dCB2YWx1ZTpVSUFjY2Vzc2liaWxp
dHlUZXh0dWFsQ29udGV4dFNvdXJjZUNvZGUgcmFuZ2U6cmFuZ2VdOwogfQogCi1SZXRhaW5QdHI8
TlNBdHRyaWJ1dGVkU3RyaW5nPiBhdHRyaWJ1dGVkU3RyaW5nQ3JlYXRlKE5vZGUqIG5vZGUsIFN0
cmluZ1ZpZXcgdGV4dCwgQVhDb3JlT2JqZWN0OjpTcGVsbENoZWNrKQorUmV0YWluUHRyPE5TQXR0
cmlidXRlZFN0cmluZz4gYXR0cmlidXRlZFN0cmluZ0NyZWF0ZShOb2RlKiBub2RlLCBTdHJpbmdW
aWV3IHRleHQsIGNvbnN0IFNpbXBsZVJhbmdlJiwgQVhDb3JlT2JqZWN0OjpTcGVsbENoZWNrKQog
ewogICAgIC8vIFNraXAgaW52aXNpYmxlIHRleHQuCiAgICAgYXV0byogcmVuZGVyZXIgPSBub2Rl
LT5yZW5kZXJlcigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9p
c29sYXRlZHRyZWUvQVhJc29sYXRlZE9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkT2JqZWN0LmNwcAppbmRleCBhMzRhZDk1MGFm
NjAuLjUzZTEwZmE3YWY2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZE9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZE9iamVjdC5jcHAKQEAgLTE2MTEs
NiArMTYxMSwyNCBAQCBib29sIEFYSXNvbGF0ZWRPYmplY3Q6Omhhc1NhbWVTdHlsZShjb25zdCBB
WENvcmVPYmplY3QmIG90aGVyT2JqZWN0KSBjb25zdAogICAgIH0pOwogfQogCitzdGQ6Om9wdGlv
bmFsPENoYXJhY3RlclJhbmdlPiBBWElzb2xhdGVkT2JqZWN0Ojp0ZXh0SW5wdXRNYXJrZWRSYW5n
ZSgpIGNvbnN0Cit7CisgICAgYXV0byByYW5nZSA9IHRleHRJbnB1dE1hcmtlZFRleHRNYXJrZXJS
YW5nZSgpLmNoYXJhY3RlclJhbmdlKCk7CisgICAgaWYgKCFyYW5nZSB8fCAhcmFuZ2UtPmxlbmd0
aCkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHJldHVybiByYW5nZTsKK30K
KworQVhUZXh0TWFya2VyUmFuZ2UgQVhJc29sYXRlZE9iamVjdDo6dGV4dElucHV0TWFya2VkVGV4
dE1hcmtlclJhbmdlKCkgY29uc3QKK3sKKyAgICBhdXRvIHJhbmdlID0gb3B0aW9uYWxBdHRyaWJ1
dGVWYWx1ZTxBWElzb2xhdGVkVGV4dE1hcmtlclJhbmdlPihBWFByb3BlcnR5TmFtZTo6VGV4dElu
cHV0TWFya2VkVGV4dE1hcmtlclJhbmdlKTsKKyAgICBpZiAoIXJhbmdlIHx8IHJhbmdlLT5zdGFy
dCA+PSByYW5nZS0+ZW5kKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgcmV0dXJuIHsgdHJl
ZSgpLT50cmVlSUQoKSwgcmFuZ2UtPm9iamVjdElELCByYW5nZS0+c3RhcnQsIHJhbmdlLT5lbmQg
fTsKK30KKwogLy8gVGhlIGF0dHJpYnV0ZSB0aGlzIHZhbHVlIGlzIGV4cG9zZWQgYXMgaXMgbm90
IHVzZWQgYnkgVm9pY2VPdmVyIG9yIGFueSBvdGhlciBBWCBjbGllbnQgb24gbWFjT1MsIHNvIHdl
IGludGVudGlvbmFsbHkgZG9uJ3QgY2FjaGUgaXQuCiAvLyBSZS12aXNpdCBpZiBJVE0gZXhwYW5k
cyB0byBtb3JlIHBsYXRmb3Jtcywgb3IgaWYgQVggY2xpZW50cyBuZWVkIHRvIHN0YXJ0IHVzaW5n
IHRoaXMuCiBTdHJpbmcgQVhJc29sYXRlZE9iamVjdDo6bGlua1JlbFZhbHVlKCkgY29uc3QKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNv
bGF0ZWRPYmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVl
L0FYSXNvbGF0ZWRPYmplY3QuaAppbmRleCBjNzljODAwZmIyZTQuLjIzNjQyYjgzMGJhNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29s
YXRlZE9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0
cmVlL0FYSXNvbGF0ZWRPYmplY3QuaApAQCAtNDU3LDcgKzQ1Nyw4IEBAIHByaXZhdGU6CiAgICAg
Ym9vbCBoYXNTYW1lU3R5bGUoY29uc3QgQVhDb3JlT2JqZWN0JikgY29uc3Qgb3ZlcnJpZGU7CiAg
ICAgYm9vbCBoYXNVbmRlcmxpbmUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0cmli
dXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6Okhhc1VuZGVybGluZSk7IH0KICAgICBib29sIGhhc0hp
Z2hsaWdodGluZygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShB
WFByb3BlcnR5TmFtZTo6SGFzSGlnaGxpZ2h0aW5nKTsgfQotICAgIHN0ZDo6b3B0aW9uYWw8Q2hh
cmFjdGVyUmFuZ2U+IHRleHRJbnB1dE1hcmtlZFJhbmdlKCkgY29uc3QgZmluYWwgeyByZXR1cm4g
b3B0aW9uYWxBdHRyaWJ1dGVWYWx1ZTxDaGFyYWN0ZXJSYW5nZT4oQVhQcm9wZXJ0eU5hbWU6OlRl
eHRJbnB1dE1hcmtlZFJhbmdlKTsgfQorICAgIHN0ZDo6b3B0aW9uYWw8Q2hhcmFjdGVyUmFuZ2U+
IHRleHRJbnB1dE1hcmtlZFJhbmdlKCkgY29uc3QgZmluYWw7CisgICAgQVhUZXh0TWFya2VyUmFu
Z2UgdGV4dElucHV0TWFya2VkVGV4dE1hcmtlclJhbmdlKCkgY29uc3QgZmluYWw7CiAgICAgRWxl
bWVudCogZWxlbWVudCgpIGNvbnN0IG92ZXJyaWRlOwogICAgIE5vZGUqIG5vZGUoKSBjb25zdCBv
dmVycmlkZTsKICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyKCkgY29uc3Qgb3ZlcnJpZGU7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElz
b2xhdGVkVHJlZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJl
ZS9BWElzb2xhdGVkVHJlZS5jcHAKaW5kZXggMTYwOTAxNDA5OGUxLi5iNjc1MjBkMDFjOGEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNv
bGF0ZWRUcmVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVk
dHJlZS9BWElzb2xhdGVkVHJlZS5jcHAKQEAgLTU4MCwxMyArNTgwLDExIEBAIHZvaWQgQVhJc29s
YXRlZFRyZWU6OnVwZGF0ZU5vZGVQcm9wZXJ0aWVzKEFYQ29yZU9iamVjdCYgYXhPYmplY3QsIGNv
bnN0IFZlY3RvcjxBCiAgICAgICAgIGNhc2UgQVhQcm9wZXJ0eU5hbWU6OlN1cHBvcnRzU2V0U2l6
ZToKICAgICAgICAgICAgIHByb3BlcnR5TWFwLnNldChBWFByb3BlcnR5TmFtZTo6U3VwcG9ydHNT
ZXRTaXplLCBheE9iamVjdC5zdXBwb3J0c1NldFNpemUoKSk7CiAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBBWFByb3BlcnR5TmFtZTo6VGV4dElucHV0TWFya2VkUmFuZ2U6Ci0gICAg
ICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGhhdmUgYSBtZWNoYW5pc20gdG8gcmVtb3ZlIGEg
cHJvcGVydHkgZnJvbSB0aGUgbWFwIGZvciB3aGVuIHRleHRJbnB1dE1hcmtlZFJhbmdlIGlzIHN0
ZDo6bnVsbG9wdC4KLSAgICAgICAgICAgIGlmIChhdXRvIHRleHRJbnB1dE1hcmtlZFJhbmdlID0g
YXhPYmplY3QudGV4dElucHV0TWFya2VkUmFuZ2UoKSkKLSAgICAgICAgICAgICAgICBwcm9wZXJ0
eU1hcC5zZXQoQVhQcm9wZXJ0eU5hbWU6OlRleHRJbnB1dE1hcmtlZFJhbmdlLCAqdGV4dElucHV0
TWFya2VkUmFuZ2UpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHByb3BlcnR5
TWFwLnNldChBWFByb3BlcnR5TmFtZTo6VGV4dElucHV0TWFya2VkUmFuZ2UsIG51bGxwdHIpOwor
ICAgICAgICBjYXNlIEFYUHJvcGVydHlOYW1lOjpUZXh0SW5wdXRNYXJrZWRUZXh0TWFya2VyUmFu
Z2U6IHsKKyAgICAgICAgICAgIEFYSXNvbGF0ZWRUZXh0TWFya2VyUmFuZ2UgaXNvbGF0ZWRSYW5n
ZSA9IHsgYXhPYmplY3QudGV4dElucHV0TWFya2VkVGV4dE1hcmtlclJhbmdlKCkgfTsKKyAgICAg
ICAgICAgIHByb3BlcnR5TWFwLnNldChBWFByb3BlcnR5TmFtZTo6VGV4dElucHV0TWFya2VkVGV4
dE1hcmtlclJhbmdlLCBpc29sYXRlZFJhbmdlKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CiAgICAgICAgIGNhc2UgQVhQcm9wZXJ0eU5hbWU6OlVSTDoKICAgICAgICAgICAgIHByb3Bl
cnR5TWFwLnNldChBWFByb3BlcnR5TmFtZTo6VVJMLCBheE9iamVjdC51cmwoKS5pc29sYXRlZENv
cHkoKSk7CiAgICAgICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRUcmVlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkVHJlZS5oCmluZGV4IDY0YzRh
ZDgzZWJjNC4uMmFiM2I2ZjA5N2NhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkVHJlZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRUcmVlLmgKQEAgLTQ2LDYgKzQ2
LDcgQEAgY2xhc3MgVGV4dFN0cmVhbTsKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQVhJ
c29sYXRlZE9iamVjdDsKK2NsYXNzIEFYSXNvbGF0ZWRUZXh0TWFya2VyUmFuZ2U7CiBjbGFzcyBB
WE9iamVjdENhY2hlOwogY2xhc3MgQWNjZXNzaWJpbGl0eU9iamVjdDsKIGNsYXNzIFBhZ2U7CkBA
IC0yMjYsNyArMjI3LDcgQEAgZW51bSBjbGFzcyBBWFByb3BlcnR5TmFtZSA6IHVpbnQxNl90IHsK
ICAgICBTdXBwb3J0c1NldFNpemUsCiAgICAgVGFibGVMZXZlbCwKICAgICBUZXh0Q29udGVudCwK
LSAgICBUZXh0SW5wdXRNYXJrZWRSYW5nZSwKKyAgICBUZXh0SW5wdXRNYXJrZWRUZXh0TWFya2Vy
UmFuZ2UsCiAgICAgVGl0bGUsCiAgICAgVGl0bGVBdHRyaWJ1dGVWYWx1ZSwKICAgICBUaXRsZVVJ
RWxlbWVudCwKQEAgLTIzOSw3ICsyNDAsNyBAQCBlbnVtIGNsYXNzIEFYUHJvcGVydHlOYW1lIDog
dWludDE2X3QgewogICAgIFZpc2libGVSb3dzLAogfTsKIAotdXNpbmcgQVhQcm9wZXJ0eVZhbHVl
VmFyaWFudCA9IHN0ZDo6dmFyaWFudDxzdGQ6Om51bGxwdHJfdCwgQVhJRCwgU3RyaW5nLCBib29s
LCBpbnQsIHVuc2lnbmVkLCBkb3VibGUsIGZsb2F0LCB1aW50NjRfdCwgQWNjZXNzaWJpbGl0eUJ1
dHRvblN0YXRlLCBDb2xvciwgVVJMLCBMYXlvdXRSZWN0LCBGbG9hdFBvaW50LCBGbG9hdFJlY3Qs
IEludFBvaW50LCBJbnRSZWN0LCBQQUw6OlNlc3Npb25JRCwgc3RkOjpwYWlyPHVuc2lnbmVkLCB1
bnNpZ25lZD4sIFZlY3RvcjxBY2Nlc3NpYmlsaXR5VGV4dD4sIFZlY3RvcjxBWElEPiwgVmVjdG9y
PHN0ZDo6cGFpcjxBWElELCBBWElEPj4sIFZlY3RvcjxTdHJpbmc+LCBQYXRoLCBPcHRpb25TZXQ8
QVhBbmNlc3RvckZsYWc+LCBSZXRhaW5QdHI8TlNBdHRyaWJ1dGVkU3RyaW5nPiwgSW5zaWRlTGlu
aywgVmVjdG9yPFZlY3RvcjxBWElEPj4sIENoYXJhY3RlclJhbmdlPjsKK3VzaW5nIEFYUHJvcGVy
dHlWYWx1ZVZhcmlhbnQgPSBzdGQ6OnZhcmlhbnQ8c3RkOjpudWxscHRyX3QsIEFYSUQsIFN0cmlu
ZywgYm9vbCwgaW50LCB1bnNpZ25lZCwgZG91YmxlLCBmbG9hdCwgdWludDY0X3QsIEFjY2Vzc2li
aWxpdHlCdXR0b25TdGF0ZSwgQ29sb3IsIFVSTCwgTGF5b3V0UmVjdCwgRmxvYXRQb2ludCwgRmxv
YXRSZWN0LCBJbnRQb2ludCwgSW50UmVjdCwgUEFMOjpTZXNzaW9uSUQsIHN0ZDo6cGFpcjx1bnNp
Z25lZCwgdW5zaWduZWQ+LCBWZWN0b3I8QWNjZXNzaWJpbGl0eVRleHQ+LCBWZWN0b3I8QVhJRD4s
IFZlY3RvcjxzdGQ6OnBhaXI8QVhJRCwgQVhJRD4+LCBWZWN0b3I8U3RyaW5nPiwgUGF0aCwgT3B0
aW9uU2V0PEFYQW5jZXN0b3JGbGFnPiwgUmV0YWluUHRyPE5TQXR0cmlidXRlZFN0cmluZz4sIElu
c2lkZUxpbmssIFZlY3RvcjxWZWN0b3I8QVhJRD4+LCBDaGFyYWN0ZXJSYW5nZSwgQVhJc29sYXRl
ZFRleHRNYXJrZXJSYW5nZT47CiB1c2luZyBBWFByb3BlcnR5TWFwID0gSGFzaE1hcDxBWFByb3Bl
cnR5TmFtZSwgQVhQcm9wZXJ0eVZhbHVlVmFyaWFudCwgSW50SGFzaDxBWFByb3BlcnR5TmFtZT4s
IFdURjo6U3Ryb25nRW51bUhhc2hUcmFpdHM8QVhQcm9wZXJ0eU5hbWU+PjsKIAogc3RydWN0IEFY
UHJvcGVydHlDaGFuZ2UgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9tYWMvQVhPYmplY3RDYWNoZU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
bWFjL0FYT2JqZWN0Q2FjaGVNYWMubW0KaW5kZXggN2ZlY2JjMzY2Y2U4Li45NGY2OWVmZWJjMDIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL0FYT2JqZWN0Q2Fj
aGVNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvQVhPYmplY3RD
YWNoZU1hYy5tbQpAQCAtMTI3LDYgKzEyNywxNCBAQAogI2RlZmluZSBrQVhEcmFnZ2luZ0Rlc3Rp
bmF0aW9uRHJhZ05vdEFjY2VwdGVkTm90aWZpY2F0aW9uIENGU1RSKCJBWERyYWdnaW5nRGVzdGlu
YXRpb25EcmFnTm90QWNjZXB0ZWQiKQogI2VuZGlmCiAKKyNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5
VGV4dElucHV0TWFya2luZ1Nlc3Npb25CZWdhbk5vdGlmaWNhdGlvbgorI2RlZmluZSBOU0FjY2Vz
c2liaWxpdHlUZXh0SW5wdXRNYXJraW5nU2Vzc2lvbkJlZ2FuTm90aWZpY2F0aW9uIEAiQVhUZXh0
SW5wdXRNYXJraW5nU2Vzc2lvbkJlZ2FuIgorI2VuZGlmCisKKyNpZm5kZWYgTlNBY2Nlc3NpYmls
aXR5VGV4dElucHV0TWFya2luZ1Nlc3Npb25FbmRlZE5vdGlmaWNhdGlvbgorI2RlZmluZSBOU0Fj
Y2Vzc2liaWxpdHlUZXh0SW5wdXRNYXJraW5nU2Vzc2lvbkVuZGVkTm90aWZpY2F0aW9uIEAiQVhU
ZXh0SW5wdXRNYXJraW5nU2Vzc2lvbkVuZGVkIgorI2VuZGlmCisKIC8vIFZlcnkgbGFyZ2Ugc3Ry
aW5ncyBjYW4gbmVnYXRpdmVseSBpbXBhY3QgdGhlIHBlcmZvcm1hbmNlIG9mIG5vdGlmaWNhdGlv
bnMsIHNvIHRoaXMgbGVuZ3RoIGlzIGNob3NlbiB0byB0cnkgdG8gZml0IGFuIGF2ZXJhZ2UgcGFy
YWdyYXBoIG9yIGxpbmUgb2YgdGV4dCwgYnV0IG5vdCBhbGxvdyBzdHJpbmdzIHRvIGJlIGxhcmdl
IGVub3VnaCB0byBodXJ0IHBlcmZvcm1hbmNlLgogc3RhdGljIGNvbnN0IE5TVUludGVnZXIgQVhW
YWx1ZUNoYW5nZVRydW5jYXRpb25MZW5ndGggPSAxMDAwOwogCkBAIC00MzEsNiArNDM5LDEyIEBA
IHZvaWQgQVhPYmplY3RDYWNoZTo6cG9zdFBsYXRmb3JtTm90aWZpY2F0aW9uKEFYQ29yZU9iamVj
dCogb2JqZWN0LCBBWE5vdGlmaWNhdGlvCiAgICAgY2FzZSBBWERyYWdnaW5nRXhpdGVkRHJvcFpv
bmU6CiAgICAgICAgIG1hY05vdGlmaWNhdGlvbiA9IChpZClrQVhEcmFnZ2luZ0Rlc3RpbmF0aW9u
RHJhZ05vdEFjY2VwdGVkTm90aWZpY2F0aW9uOwogICAgICAgICBicmVhazsKKyAgICBjYXNlIEFY
VGV4dElucHV0TWFya2luZ1Nlc3Npb25CZWdhbjoKKyAgICAgICAgbWFjTm90aWZpY2F0aW9uID0g
TlNBY2Nlc3NpYmlsaXR5VGV4dElucHV0TWFya2luZ1Nlc3Npb25CZWdhbk5vdGlmaWNhdGlvbjsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBWFRleHRJbnB1dE1hcmtpbmdTZXNzaW9uRW5kZWQ6
CisgICAgICAgIG1hY05vdGlmaWNhdGlvbiA9IE5TQWNjZXNzaWJpbGl0eVRleHRJbnB1dE1hcmtp
bmdTZXNzaW9uRW5kZWROb3RpZmljYXRpb247CisgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6
CiAgICAgICAgIHJldHVybjsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L21hYy9BY2Nlc3NpYmlsaXR5T2JqZWN0TWFjLm1tIGIvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9tYWMvQWNjZXNzaWJpbGl0eU9iamVjdE1hYy5tbQppbmRleCA0MTFjMDUy
OThiY2MuLjEzZWU5YzhiMzYyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9tYWMvQWNjZXNzaWJpbGl0eU9iamVjdE1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L21hYy9BY2Nlc3NpYmlsaXR5T2JqZWN0TWFjLm1tCkBAIC02NDQsMTggKzY0
NCwyNCBAQCBzdGF0aWMgdm9pZCBhdHRyaWJ1dGVkU3RyaW5nU2V0RWxlbWVudChOU011dGFibGVB
dHRyaWJ1dGVkU3RyaW5nICphdHRyU3RyaW5nLCBOUwogICAgICAgICBbYXR0clN0cmluZyBhZGRB
dHRyaWJ1dGU6YXR0cmlidXRlIHZhbHVlOihfX2JyaWRnZSBpZClheEVsZW1lbnQuZ2V0KCkgcmFu
Z2U6cmFuZ2VdOwogfQogCi1zdGF0aWMgdm9pZCBhdHRyaWJ1dGVkU3RyaW5nU2V0Q29tcG9zaXRp
b25BdHRyaWJ1dGVzKE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcgKmF0dHJTdHJpbmcsIE5vZGUm
IG5vZGUpCitzdGF0aWMgdm9pZCBhdHRyaWJ1dGVkU3RyaW5nU2V0Q29tcG9zaXRpb25BdHRyaWJ1
dGVzKE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcgKmF0dHJTdHJpbmcsIE5vZGUmIG5vZGUsIGNv
bnN0IFNpbXBsZVJhbmdlJiB0ZXh0U2ltcGxlUmFuZ2UpCiB7CiAjaWYgSEFWRShJTkxJTkVfUFJF
RElDVElPTlMpCiAgICAgYXV0byYgZWRpdG9yID0gbm9kZS5kb2N1bWVudCgpLmVkaXRvcigpOwog
ICAgIGlmICgmbm9kZSAhPSBlZGl0b3IuY29tcG9zaXRpb25Ob2RlKCkpCiAgICAgICAgIHJldHVy
bjsKIAorICAgIGF1dG8gc2NvcGUgPSBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMobm9k
ZSk7CisgICAgYXV0byB0ZXh0UmFuZ2UgPSBjaGFyYWN0ZXJSYW5nZShzY29wZSwgdGV4dFNpbXBs
ZVJhbmdlKTsKKwogICAgIGF1dG8mIGFubm90YXRpb25zID0gZWRpdG9yLmN1c3RvbUNvbXBvc2l0
aW9uQW5ub3RhdGlvbnMoKTsKICAgICBpZiAoYXV0byBpdCA9IGFubm90YXRpb25zLmZpbmQoTlNU
ZXh0Q29tcGxldGlvbkF0dHJpYnV0ZU5hbWUpOyBpdCAhPSBhbm5vdGF0aW9ucy5lbmQoKSkgewot
ICAgICAgICBmb3IgKGF1dG8mIHJhbmdlIDogaXQtPnZhbHVlKSB7Ci0gICAgICAgICAgICBpZiAo
YXR0cmlidXRlZFN0cmluZ0NvbnRhaW5zUmFuZ2UoYXR0clN0cmluZywgcmFuZ2UpKQotICAgICAg
ICAgICAgICAgIGF0dHJpYnV0ZWRTdHJpbmdTZXROdW1iZXIoYXR0clN0cmluZywgTlNBY2Nlc3Np
YmlsaXR5VGV4dENvbXBsZXRpb25BdHRyaWJ1dGUsIEBZRVMsIHJhbmdlKTsKKyAgICAgICAgZm9y
IChhdXRvJiBhbm5vdGF0aW9uUmFuZ2UgOiBpdC0+dmFsdWUpIHsKKyAgICAgICAgICAgIGF1dG8g
aW50ZXJzZWN0aW9uUmFuZ2UgPSBOU0ludGVyc2VjdGlvblJhbmdlKHRleHRSYW5nZSwgYW5ub3Rh
dGlvblJhbmdlKTsKKyAgICAgICAgICAgIGlmIChpbnRlcnNlY3Rpb25SYW5nZS5sZW5ndGgpIHsK
KyAgICAgICAgICAgICAgICBhdXRvIGNvbXBsZXRpb25SYW5nZSA9IE5TTWFrZVJhbmdlKGludGVy
c2VjdGlvblJhbmdlLmxvY2F0aW9uIC0gdGV4dFJhbmdlLmxvY2F0aW9uLCBpbnRlcnNlY3Rpb25S
YW5nZS5sZW5ndGgpOworICAgICAgICAgICAgICAgIGF0dHJpYnV0ZWRTdHJpbmdTZXROdW1iZXIo
YXR0clN0cmluZywgTlNBY2Nlc3NpYmlsaXR5VGV4dENvbXBsZXRpb25BdHRyaWJ1dGUsIEBZRVMs
IGNvbXBsZXRpb25SYW5nZSk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAjZWxz
ZQpAQCAtNzE0LDcgKzcyMCw3IEBAIHZvaWQgYXR0cmlidXRlZFN0cmluZ1NldFNwZWxsaW5nKE5T
TXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcgKmF0dHJTdHJpbmcsIE5vZGUmIG5vCiAgICAgfQogfQog
Ci1SZXRhaW5QdHI8TlNBdHRyaWJ1dGVkU3RyaW5nPiBhdHRyaWJ1dGVkU3RyaW5nQ3JlYXRlKE5v
ZGUqIG5vZGUsIFN0cmluZ1ZpZXcgdGV4dCwgQVhDb3JlT2JqZWN0OjpTcGVsbENoZWNrIHNwZWxs
Q2hlY2spCitSZXRhaW5QdHI8TlNBdHRyaWJ1dGVkU3RyaW5nPiBhdHRyaWJ1dGVkU3RyaW5nQ3Jl
YXRlKE5vZGUqIG5vZGUsIFN0cmluZ1ZpZXcgdGV4dCwgY29uc3QgU2ltcGxlUmFuZ2UmIHRleHRS
YW5nZSwgQVhDb3JlT2JqZWN0OjpTcGVsbENoZWNrIHNwZWxsQ2hlY2spCiB7CiAgICAgaWYgKCFu
b2RlIHx8ICF0ZXh0Lmxlbmd0aCgpKQogICAgICAgICByZXR1cm4gbmlsOwpAQCAtNzMzLDcgKzcz
OSw3IEBAIFJldGFpblB0cjxOU0F0dHJpYnV0ZWRTdHJpbmc+IGF0dHJpYnV0ZWRTdHJpbmdDcmVh
dGUoTm9kZSogbm9kZSwgU3RyaW5nVmlldyB0ZXh0CiAgICAgYXR0cmlidXRlZFN0cmluZ1NldEJs
b2NrcXVvdGVMZXZlbChyZXN1bHQuZ2V0KCksIHJlbmRlcmVyLmdldCgpLCByYW5nZSk7CiAgICAg
YXR0cmlidXRlZFN0cmluZ1NldEV4cGFuZGVkVGV4dChyZXN1bHQuZ2V0KCksIHJlbmRlcmVyLmdl
dCgpLCByYW5nZSk7CiAgICAgYXR0cmlidXRlZFN0cmluZ1NldEVsZW1lbnQocmVzdWx0LmdldCgp
LCBOU0FjY2Vzc2liaWxpdHlMaW5rVGV4dEF0dHJpYnV0ZSwgQWNjZXNzaWJpbGl0eU9iamVjdDo6
YW5jaG9yRWxlbWVudEZvck5vZGUobm9kZSksIHJhbmdlKTsKLSAgICBhdHRyaWJ1dGVkU3RyaW5n
U2V0Q29tcG9zaXRpb25BdHRyaWJ1dGVzKHJlc3VsdC5nZXQoKSwgKm5vZGUpOworICAgIGF0dHJp
YnV0ZWRTdHJpbmdTZXRDb21wb3NpdGlvbkF0dHJpYnV0ZXMocmVzdWx0LmdldCgpLCAqbm9kZSwg
dGV4dFJhbmdlKTsKICAgICAvLyBEbyBzcGVsbGluZyBsYXN0IGJlY2F1c2UgaXQgdGVuZHMgdG8g
YnJlYWsgdXAgdGhlIHJhbmdlLgogICAgIGlmIChzcGVsbENoZWNrID09IEFYQ29yZU9iamVjdDo6
U3BlbGxDaGVjazo6WWVzKSB7CiAgICAgICAgIGlmIChBWE9iamVjdENhY2hlOjpzaG91bGRTcGVs
bENoZWNrKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9X
ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckJhc2UuaCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQmFzZS5oCmluZGV4IDJj
NjA2NTFkZTQ2OC4uYWYwMmViN2RlNTJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckJhc2UuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3Jh
cHBlckJhc2UuaApAQCAtNTMsNyArNTMsNyBAQCB2b2lkIGF0dHJpYnV0ZWRTdHJpbmdTZXROdW1i
ZXIoTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyAqLCBOU1N0cmluZyAqLCBOU051bWJlcgogdm9p
ZCBhdHRyaWJ1dGVkU3RyaW5nU2V0Rm9udChOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nICosIENU
Rm9udFJlZiwgY29uc3QgTlNSYW5nZSYpOwogdm9pZCBhdHRyaWJ1dGVkU3RyaW5nU2V0U3BlbGxp
bmcoTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyAqLCBOb2RlJiwgU3RyaW5nVmlldywgY29uc3Qg
TlNSYW5nZSYpOwogdm9pZCBhdHRyaWJ1dGVkU3RyaW5nU2V0TmVlZHNTcGVsbENoZWNrKE5TTXV0
YWJsZUF0dHJpYnV0ZWRTdHJpbmcgKiwgTm9kZSYpOwotUmV0YWluUHRyPE5TQXR0cmlidXRlZFN0
cmluZz4gYXR0cmlidXRlZFN0cmluZ0NyZWF0ZShOb2RlKiwgU3RyaW5nVmlldywgQVhDb3JlT2Jq
ZWN0OjpTcGVsbENoZWNrKTsKK1JldGFpblB0cjxOU0F0dHJpYnV0ZWRTdHJpbmc+IGF0dHJpYnV0
ZWRTdHJpbmdDcmVhdGUoTm9kZSosIFN0cmluZ1ZpZXcsIGNvbnN0IFNpbXBsZVJhbmdlJiwgQVhD
b3JlT2JqZWN0OjpTcGVsbENoZWNrKTsKIH0KIAogQGludGVyZmFjZSBXZWJBY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlckJhc2UgOiBOU09iamVjdCB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbSBi
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RX
cmFwcGVyTWFjLm1tCmluZGV4IDMwZTE5NTYyY2FiYi4uYzIxYTY1NGZjNTE3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlck1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQpAQCAtNDg3LDYgKzQ4NywxMCBAQCB1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKICNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5VGV4dElucHV0TWFy
a2VkUmFuZ2VBdHRyaWJ1dGUgQCJBWFRleHRJbnB1dE1hcmtlZFJhbmdlIgogI2VuZGlmCiAKKyNp
Zm5kZWYgTlNBY2Nlc3NpYmlsaXR5VGV4dElucHV0TWFya2VkUmFuZ2VUZXh0TWFya2VyQXR0cmli
dXRlCisjZGVmaW5lIE5TQWNjZXNzaWJpbGl0eVRleHRJbnB1dE1hcmtlZFJhbmdlVGV4dE1hcmtl
ckF0dHJpYnV0ZSBAIkFYVGV4dElucHV0TWFya2VkVGV4dE1hcmtlclJhbmdlIgorI2VuZGlmCisK
IEBpbXBsZW1lbnRhdGlvbiBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcgogCiAtICh2b2lk
KWRldGFjaApAQCAtOTE4LDYgKzkyMiw3IEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJ
T05TX0VORAogICAgICAgICBOU0FjY2Vzc2liaWxpdHlFZGl0YWJsZUFuY2VzdG9yQXR0cmlidXRl
LAogICAgICAgICBOU0FjY2Vzc2liaWxpdHlIaWdoZXN0RWRpdGFibGVBbmNlc3RvckF0dHJpYnV0
ZSwKICAgICAgICAgTlNBY2Nlc3NpYmlsaXR5VGV4dElucHV0TWFya2VkUmFuZ2VBdHRyaWJ1dGUs
CisgICAgICAgIE5TQWNjZXNzaWJpbGl0eVRleHRJbnB1dE1hcmtlZFJhbmdlVGV4dE1hcmtlckF0
dHJpYnV0ZSwKICAgICBdOwogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZCBzcGluQnV0dG9uQ29t
bW9uQXR0cmlidXRlcyA9IFtdIHsKICAgICAgICAgYXV0byB0ZW1wQXJyYXkgPSBhZG9wdE5TKFtb
TlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQXJyYXk6YXR0cmlidXRlcy5nZXQoKS5nZXQo
KV0pOwpAQCAtMjI1Miw2ICsyMjU3LDkgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElP
TlNfRU5ECiAgICAgICAgIHJldHVybiByYW5nZSA/IFtOU1ZhbHVlIHZhbHVlV2l0aFJhbmdlOipy
YW5nZV0gOiBuaWw7CiAgICAgfQogCisgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0
cmluZzpOU0FjY2Vzc2liaWxpdHlUZXh0SW5wdXRNYXJrZWRSYW5nZVRleHRNYXJrZXJBdHRyaWJ1
dGVdKQorICAgICAgICByZXR1cm4gKGlkKUFYVGV4dE1hcmtlclJhbmdlUmVmKGJhY2tpbmdPYmpl
Y3QtPnRleHRJbnB1dE1hcmtlZFRleHRNYXJrZXJSYW5nZSgpKTsKKwogICAgIHJldHVybiBuaWw7
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAppbmRleCA2MjcxMmY0YTVkNDguLjU2ZjY2
MDI2Y2RlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcApAQCAtMjE4Myw3ICsyMTgzLDcg
QEAgdm9pZCBFZGl0b3I6OnNldENvbXBvc2l0aW9uKGNvbnN0IFN0cmluZyYgdGV4dCwgU2V0Q29t
cG9zaXRpb25Nb2RlIG1vZGUpCiAgICAgbV9jdXN0b21Db21wb3NpdGlvbkFubm90YXRpb25zLmNs
ZWFyKCk7CiAKICAgICBpZiAoYXV0byogY2FjaGUgPSBtX2RvY3VtZW50LmV4aXN0aW5nQVhPYmpl
Y3RDYWNoZSgpOyBjYWNoZSAmJiBwcmV2aW91c0NvbXBvc2l0aW9uTm9kZSkKLSAgICAgICAgY2Fj
aGUtPm9uVGV4dENvbXBvc2l0aW9uQ2hhbmdlKCpwcmV2aW91c0NvbXBvc2l0aW9uTm9kZSk7Cisg
ICAgICAgIGNhY2hlLT5vblRleHRDb21wb3NpdGlvbkNoYW5nZSgqcHJldmlvdXNDb21wb3NpdGlv
bk5vZGUsIEFYT2JqZWN0Q2FjaGU6OkNvbXBvc2l0aW9uU3RhdGU6OkVuZGVkLCBmYWxzZSk7CiAK
ICAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5pc05vbmUoKSkKICAgICAgICAgcmV0dXJu
OwpAQCAtMjMyNCwxMCArMjMyNCwxNCBAQCB2b2lkIEVkaXRvcjo6c2V0Q29tcG9zaXRpb24oY29u
c3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBWZWN0b3I8Q29tcG9zaXRpb25VbmRlcmxpbgogCiAgICAg
aWYgKGF1dG8qIGNhY2hlID0gbV9kb2N1bWVudC5leGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSkgewog
ICAgICAgICBhdXRvKiBjdXJyZW50Q29tcG9zaXRpb25Ob2RlID0gY29tcG9zaXRpb25Ob2RlKCk7
Ci0gICAgICAgIGlmIChwcmV2aW91c0NvbXBvc2l0aW9uTm9kZSAmJiBwcmV2aW91c0NvbXBvc2l0
aW9uTm9kZSAhPSBjdXJyZW50Q29tcG9zaXRpb25Ob2RlKQotICAgICAgICAgICAgY2FjaGUtPm9u
VGV4dENvbXBvc2l0aW9uQ2hhbmdlKCpwcmV2aW91c0NvbXBvc2l0aW9uTm9kZSk7Ci0gICAgICAg
IGlmIChjdXJyZW50Q29tcG9zaXRpb25Ob2RlKQotICAgICAgICAgICAgY2FjaGUtPm9uVGV4dENv
bXBvc2l0aW9uQ2hhbmdlKCpjdXJyZW50Q29tcG9zaXRpb25Ob2RlKTsKKyAgICAgICAgaWYgKHBy
ZXZpb3VzQ29tcG9zaXRpb25Ob2RlICYmIHByZXZpb3VzQ29tcG9zaXRpb25Ob2RlICE9IGN1cnJl
bnRDb21wb3NpdGlvbk5vZGUpIHsKKyAgICAgICAgICAgIGF1dG8gc3RhdGUgPSBjdXJyZW50Q29t
cG9zaXRpb25Ob2RlID8gQVhPYmplY3RDYWNoZTo6Q29tcG9zaXRpb25TdGF0ZTo6SW5Qcm9ncmVz
cyA6IEFYT2JqZWN0Q2FjaGU6OkNvbXBvc2l0aW9uU3RhdGU6OkVuZGVkOworICAgICAgICAgICAg
Y2FjaGUtPm9uVGV4dENvbXBvc2l0aW9uQ2hhbmdlKCpwcmV2aW91c0NvbXBvc2l0aW9uTm9kZSwg
c3RhdGUsIHRydWUpOworICAgICAgICB9CisgICAgICAgIGlmIChjdXJyZW50Q29tcG9zaXRpb25O
b2RlKSB7CisgICAgICAgICAgICBhdXRvIHN0YXRlID0gcHJldmlvdXNDb21wb3NpdGlvbk5vZGUg
PyBBWE9iamVjdENhY2hlOjpDb21wb3NpdGlvblN0YXRlOjpJblByb2dyZXNzIDogQVhPYmplY3RD
YWNoZTo6Q29tcG9zaXRpb25TdGF0ZTo6U3RhcnRlZDsKKyAgICAgICAgICAgIGNhY2hlLT5vblRl
eHRDb21wb3NpdGlvbkNoYW5nZSgqY3VycmVudENvbXBvc2l0aW9uTm9kZSwgc3RhdGUsIHRydWUp
OworICAgICAgICB9CiAgICAgfQogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkgICAgICAgIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAKaW5kZXggYzc4OWRmNmI4ZDBk
Li5kMzViMzEwMTQ4OGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5n
Q29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNw
cApAQCAtMjUyLDcgKzI1MiwxMCBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydFRleHQoRG9j
dW1lbnQmIGRvY3VtZW50LCBjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFZpcwogICAgICAgICBs
YXN0VHlwaW5nQ29tbWFuZC0+c2V0Q29tcG9zaXRpb25UeXBlKGNvbXBvc2l0aW9uVHlwZSk7CiAg
ICAgICAgIGxhc3RUeXBpbmdDb21tYW5kLT5zZXRTaG91bGRSZXRhaW5BdXRvY29ycmVjdGlvbklu
ZGljYXRvcihvcHRpb25zLmNvbnRhaW5zKE9wdGlvbjo6UmV0YWluQXV0b2NvcnJlY3Rpb25JbmRp
Y2F0b3IpKTsKICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldFNob3VsZFByZXZlbnRTcGVs
bENoZWNraW5nKG9wdGlvbnMuY29udGFpbnMoT3B0aW9uOjpQcmV2ZW50U3BlbGxDaGVja2luZykp
OwotICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+aW5zZXJ0VGV4dEFuZE5vdGlmeUFjY2Vzc2li
aWxpdHkobmV3VGV4dCwgb3B0aW9ucy5jb250YWlucyhPcHRpb246OlNlbGVjdEluc2VydGVkVGV4
dCkpOworICAgICAgICBpZiAoY29tcG9zaXRpb25UeXBlID09IFRleHRDb21wb3NpdGlvblR5cGU6
Ok5vbmUpCisgICAgICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+aW5zZXJ0VGV4dEFuZE5vdGlm
eUFjY2Vzc2liaWxpdHkobmV3VGV4dCwgb3B0aW9ucy5jb250YWlucyhPcHRpb246OlNlbGVjdElu
c2VydGVkVGV4dCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBsYXN0VHlwaW5nQ29tbWFu
ZC0+aW5zZXJ0VGV4dChuZXdUZXh0LCBvcHRpb25zLmNvbnRhaW5zKE9wdGlvbjo6U2VsZWN0SW5z
ZXJ0ZWRUZXh0KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuY3BwIGIvVG9vbHMvRHVtcFJl
bmRlclRyZWUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5jcHAKaW5kZXggMjdiY2JkYTllNzU4Li44
Y2NiMjM0MDJkZDcgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxp
dHlVSUVsZW1lbnQuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlV
SUVsZW1lbnQuY3BwCkBAIC04NDYsNiArODQ2LDExIEBAIHN0YXRpYyBKU1ZhbHVlUmVmIGluc2Vy
dFRleHRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24s
CiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlQm9vbGVhbihjb250ZXh0LCB0b0FYRWxlbWVudCh0aGlz
T2JqZWN0KS0+aW5zZXJ0VGV4dCh0ZXh0LmdldCgpKSk7CiB9CiAKK3N0YXRpYyBKU1ZhbHVlUmVm
IHRleHRJbnB1dE1hcmtlZFRleHRNYXJrZXJSYW5nZUNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250
ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90
IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYq
IGV4Y2VwdGlvbikKK3sKKyAgICByZXR1cm4gQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZTo6
bWFrZUpTQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZShjb250ZXh0LCB0b0FYRWxlbWVudCh0
aGlzT2JqZWN0KS0+dGV4dElucHV0TWFya2VkVGV4dE1hcmtlclJhbmdlKCkpOworfQorCiBzdGF0
aWMgSlNWYWx1ZVJlZiBhdHRyaWJ1dGVkU3RyaW5nRm9yVGV4dE1hcmtlclJhbmdlQ29udGFpbnNB
dHRyaWJ1dGVDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rp
b24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBK
U1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7CiAgICAgQWNj
ZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZSogbWFya2VyUmFuZ2UgPSAwOwpAQCAtMTc3OSw2ICsx
Nzg0LDExIEBAIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aW5zZXJ0VGV4dChKU1N0cmlu
Z1JlZikKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK0FjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFu
Z2UgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGV4dElucHV0TWFya2VkVGV4dE1hcmtlclJhbmdl
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwogaW50IEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OnRleHRNYXJrZXJSYW5nZUxlbmd0aChBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJh
bmdlKikKIHsKICAgICByZXR1cm4gMDsKQEAgLTIxMzMsNiArMjE0Myw3IEBAIEpTQ2xhc3NSZWYg
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Z2V0SlNDbGFzcygpCiAgICAgICAgIHsgIm1pc3NwZWxs
aW5nVGV4dE1hcmtlclJhbmdlIiwgbWlzc3BlbGxpbmdUZXh0TWFya2VyUmFuZ2VDYWxsYmFjaywg
a0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERl
bGV0ZSB9LAogICAgICAgICB7ICJ0ZXh0TWFya2VyUmFuZ2VGb3JFbGVtZW50IiwgdGV4dE1hcmtl
clJhbmdlRm9yRWxlbWVudENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwg
a0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgInNlbGVjdGVkVGV4
dE1hcmtlclJhbmdlIiwgc2VsZWN0ZWRUZXh0TWFya2VyUmFuZ2VDYWxsYmFjaywga0pTUHJvcGVy
dHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAor
ICAgICAgICB7ICJ0ZXh0SW5wdXRNYXJrZWRUZXh0TWFya2VyUmFuZ2UiLCB0ZXh0SW5wdXRNYXJr
ZWRUZXh0TWFya2VyUmFuZ2VDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8
IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7ICJyZXNldFNlbGVj
dGVkVGV4dE1hcmtlclJhbmdlIiwgcmVzZXRTZWxlY3RlZFRleHRNYXJrZXJSYW5nZUNhbGxiYWNr
LCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250
RGVsZXRlIH0sCiAgICAgICAgIHsgInJlcGxhY2VUZXh0SW5SYW5nZSIsIHJlcGxhY2VUZXh0SW5S
YW5nZUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlB
dHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgImluc2VydFRleHQiLCBpbnNlcnRUZXh0
Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZURvbnREZWxldGUgfSwKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vz
c2liaWxpdHlVSUVsZW1lbnQuaCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlV
SUVsZW1lbnQuaAppbmRleCA0ZGY5NzA5ZTRhOGYuLmFkODc0YmRmMjYxMyAxMDA2NDQKLS0tIGEv
VG9vbHMvRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oCisrKyBiL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaApAQCAtMzAwLDYgKzMwMCw3
IEBAIHB1YmxpYzoKICAgICBib29sIHNldFNlbGVjdGVkVGV4dE1hcmtlclJhbmdlKEFjY2Vzc2li
aWxpdHlUZXh0TWFya2VyUmFuZ2UqKTsKICAgICBib29sIHJlcGxhY2VUZXh0SW5SYW5nZShKU1N0
cmluZ1JlZiwgaW50IHBvc2l0aW9uLCBpbnQgbGVuZ3RoKTsKICAgICBib29sIGluc2VydFRleHQo
SlNTdHJpbmdSZWYpOworICAgIEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2UgdGV4dElucHV0
TWFya2VkVGV4dE1hcmtlclJhbmdlKCkgY29uc3Q7CiAKICAgICBKU1JldGFpblB0cjxKU1N0cmlu
Z1JlZj4gc3RyaW5nRm9yVGV4dE1hcmtlclJhbmdlKEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFu
Z2UqKTsKICAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gYXR0cmlidXRlZFN0cmluZ0ZvclRl
eHRNYXJrZXJSYW5nZShBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlKik7CmRpZmYgLS1naXQg
YS9Ub29scy9EdW1wUmVuZGVyVHJlZS9pb3MvQWNjZXNzaWJpbGl0eVVJRWxlbWVudElPUy5tbSBi
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2lvcy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50SU9TLm1tCmlu
ZGV4IDBmY2E0ODk0YWZlZC4uOGQ3NjgyODhhZGI1IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9pb3MvQWNjZXNzaWJpbGl0eVVJRWxlbWVudElPUy5tbQorKysgYi9Ub29scy9EdW1w
UmVuZGVyVHJlZS9pb3MvQWNjZXNzaWJpbGl0eVVJRWxlbWVudElPUy5tbQpAQCAtNDk5LDYgKzQ5
OSwxMSBAQCB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJlc2V0U2VsZWN0ZWRUZXh0TWFy
a2VyUmFuZ2UoKQogewogfQogCitBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlIEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OnRleHRJbnB1dE1hcmtlZFRleHRNYXJrZXJSYW5nZSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKIGludCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0
ZXh0TWFya2VyUmFuZ2VMZW5ndGgoQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZSogcmFuZ2Up
CiB7CiAgICAgaWQgdGV4dE1hcmtlcnMgPSByYW5nZS0+cGxhdGZvcm1UZXh0TWFya2VyUmFuZ2Uo
KTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5VUlF
bGVtZW50TWFjLm1tIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2liaWxpdHlVSUVs
ZW1lbnRNYWMubW0KaW5kZXggNGFlNDY5ODY1NDQ0Li4xOThmNGY2MzJhOGEgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tCisr
KyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1t
CkBAIC03OSw2ICs3OSwxMCBAQAogI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlUZXh0SW5wdXRNYXJr
ZWRSYW5nZUF0dHJpYnV0ZSBAIkFYVGV4dElucHV0TWFya2VkUmFuZ2UiCiAjZW5kaWYKIAorI2lm
bmRlZiBOU0FjY2Vzc2liaWxpdHlUZXh0SW5wdXRNYXJrZWRUZXh0TWFya2VyUmFuZ2VBdHRyaWJ1
dGUKKyNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5VGV4dElucHV0TWFya2VkVGV4dE1hcmtlclJhbmdl
QXR0cmlidXRlIEAiQVhUZXh0SW5wdXRNYXJrZWRUZXh0TWFya2VyUmFuZ2UiCisjZW5kaWYKKwog
dHlwZWRlZiB2b2lkICgqQVhQb3N0ZWROb3RpZmljYXRpb25DYWxsYmFjaykoaWQgZWxlbWVudCwg
TlNTdHJpbmcqIG5vdGlmaWNhdGlvbiwgdm9pZCogY29udGV4dCk7CiAKIEBpbnRlcmZhY2UgTlNP
YmplY3QgKFdlYktpdEFjY2Vzc2liaWxpdHlBZGRpdGlvbnMpCkBAIC0xNzIsNyArMTc2LDkgQEAg
c3RhdGljIE5TU3RyaW5nKiBhdHRyaWJ1dGVzT2ZFbGVtZW50KGlkIGFjY2Vzc2liaWxpdHlPYmpl
Y3QpCiAgICAgICAgIGlkIHZhbHVlT2JqZWN0ID0gW2FjY2Vzc2liaWxpdHlPYmplY3QgYWNjZXNz
aWJpbGl0eUF0dHJpYnV0ZVZhbHVlOmF0dHJpYnV0ZV07CiAgICAgICAgIE5TU3RyaW5nKiB2YWx1
ZSA9IGRlc2NyaXB0aW9uT2ZWYWx1ZSh2YWx1ZU9iamVjdCwgYWNjZXNzaWJpbGl0eU9iamVjdCk7
CiAKLSAgICAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0
eVRleHRJbnB1dE1hcmtlZFJhbmdlQXR0cmlidXRlXSAmJiAhdmFsdWUpCisgICAgICAgIGlmICgh
dmFsdWUKKyAgICAgICAgICAgICYmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vz
c2liaWxpdHlUZXh0SW5wdXRNYXJrZWRSYW5nZUF0dHJpYnV0ZV0KKyAgICAgICAgICAgICAgICB8
fCBbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlUZXh0SW5wdXRNYXJr
ZWRUZXh0TWFya2VyUmFuZ2VBdHRyaWJ1dGVdKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAg
ICAgICAgIFthdHRyaWJ1dGVzU3RyaW5nIGFwcGVuZEZvcm1hdDpAIiVAOiAlQFxuIiwgYXR0cmli
dXRlLCB2YWx1ZV07CkBAIC0xNzU5LDYgKzE3NjUsMTYgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjppbnNlcnRUZXh0KEpTU3RyaW5nUmVmIHRleHQpCiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCitBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OnRleHRJbnB1dE1hcmtlZFRleHRNYXJrZXJSYW5nZSgpIGNvbnN0Cit7CisgICAgQkVHSU5fQVhf
T0JKQ19FWENFUFRJT05TCisgICAgaWQgdGV4dE1hcmtlclJhbmdlID0gW21fZWxlbWVudCBhY2Nl
c3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6TlNBY2Nlc3NpYmlsaXR5VGV4dElucHV0TWFya2VkVGV4
dE1hcmtlclJhbmdlQXR0cmlidXRlXTsKKyAgICByZXR1cm4gQWNjZXNzaWJpbGl0eVRleHRNYXJr
ZXJSYW5nZSh0ZXh0TWFya2VyUmFuZ2UpOworICAgIEVORF9BWF9PQkpDX0VYQ0VQVElPTlMKKwor
ICAgIHJldHVybiBudWxscHRyOworfQorCiBpbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGV4
dE1hcmtlclJhbmdlTGVuZ3RoKEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2UqIHJhbmdlKQog
ewogICAgIEJFR0lOX0FYX09CSkNfRVhDRVBUSU9OUwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmNwcCBiL1Rv
b2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dC5jcHAKaW5kZXggZWZmYTFiNTY1Nzk2Li5jZjExN2M5Y2E2NTMgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5j
cHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9BY2Nlc3NpYmls
aXR5VUlFbGVtZW50LmNwcApAQCAtMTA5LDYgKzEwOSw3IEBAIGludCBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjpsaW5lSW5kZXhGb3JUZXh0TWFya2VyKEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyKikg
Y29uCiBSZWZQdHI8QWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZT4gQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6dGV4dE1hcmtlclJhbmdlRm9yUmFuZ2UodW5zaWduZWQsIHVuc2lnbmVkKSB7IHJl
dHVybiBudWxscHRyOyB9CiBSZWZQdHI8QWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZT4gQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6c2VsZWN0ZWRUZXh0TWFya2VyUmFuZ2UoKSB7IHJldHVybiBu
dWxscHRyOyB9CiB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJlc2V0U2VsZWN0ZWRUZXh0
TWFya2VyUmFuZ2UoKSB7IH0KK1JlZlB0cjxBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlPiBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0ZXh0SW5wdXRNYXJrZWRUZXh0TWFya2VyUmFuZ2UoKSB7
IHJldHVybiBudWxscHRyOyB9CiB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNldEJvb2xB
dHRyaWJ1dGVWYWx1ZShKU1N0cmluZ1JlZiwgYm9vbCkgeyB9CiB2b2lkIEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OnNldFZhbHVlKEpTU3RyaW5nUmVmKSB7IH0KIEpTVmFsdWVSZWYgQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6c2VhcmNoVGV4dFdpdGhDcml0ZXJpYShKU0NvbnRleHRSZWYsIEpTVmFs
dWVSZWYsIEpTU3RyaW5nUmVmLCBKU1N0cmluZ1JlZikgeyByZXR1cm4gbnVsbHB0cjsgfQpkaWZm
IC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9BY2Nlc3NpYmls
aXR5VUlFbGVtZW50LmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0Fj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQuaAppbmRleCA3Mzg0YjkxMTg4ZjAuLjQ0ZjNjNTcxODgxNCAx
MDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9BY2Nlc3Np
YmlsaXR5VUlFbGVtZW50LmgKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1
bmRsZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmgKQEAgLTMzOSw2ICszMzksNyBAQCBwdWJsaWM6
CiAgICAgdm9pZCByZXNldFNlbGVjdGVkVGV4dE1hcmtlclJhbmdlKCk7CiAgICAgYm9vbCByZXBs
YWNlVGV4dEluUmFuZ2UoSlNTdHJpbmdSZWYsIGludCBwb3NpdGlvbiwgaW50IGxlbmd0aCk7CiAg
ICAgYm9vbCBpbnNlcnRUZXh0KEpTU3RyaW5nUmVmKTsKKyAgICBSZWZQdHI8QWNjZXNzaWJpbGl0
eVRleHRNYXJrZXJSYW5nZT4gdGV4dElucHV0TWFya2VkVGV4dE1hcmtlclJhbmdlKCkgY29uc3Q7
CiAgICAgUmVmUHRyPEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyPiBzdGFydFRleHRNYXJrZXJGb3JU
ZXh0TWFya2VyUmFuZ2UoQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZSopOwogICAgIFJlZlB0
cjxBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcj4gZW5kVGV4dE1hcmtlckZvclRleHRNYXJrZXJSYW5n
ZShBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlKik7CiAgICAgUmVmUHRyPEFjY2Vzc2liaWxp
dHlUZXh0TWFya2VyPiBlbmRUZXh0TWFya2VyRm9yQm91bmRzKGludCB4LCBpbnQgeSwgaW50IHdp
ZHRoLCBpbnQgaGVpZ2h0KTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5q
ZWN0ZWRCdW5kbGUvQmluZGluZ3MvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5pZGwgYi9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL0FjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQuaWRsCmluZGV4IGIxMDI5ZDMxNjZlOC4uOTIyZTEyNDJjY2MwIDEwMDY0NAotLS0gYS9U
b29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL0FjY2Vzc2liaWxp
dHlVSUVsZW1lbnQuaWRsCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5k
bGUvQmluZGluZ3MvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5pZGwKQEAgLTI0MSw2ICsyNDEsNyBA
QAogICAgIHVuZGVmaW5lZCByZXNldFNlbGVjdGVkVGV4dE1hcmtlclJhbmdlKCk7CiAgICAgYm9v
bGVhbiByZXBsYWNlVGV4dEluUmFuZ2UoRE9NU3RyaW5nIHN0cmluZywgbG9uZyBwb3NpdGlvbiwg
bG9uZyBsZW5ndGgpOwogICAgIGJvb2xlYW4gaW5zZXJ0VGV4dChET01TdHJpbmcgdGV4dCk7Cisg
ICAgQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZSB0ZXh0SW5wdXRNYXJrZWRUZXh0TWFya2Vy
UmFuZ2UoKTsKICAgICBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciBzdGFydFRleHRNYXJrZXJGb3JU
ZXh0TWFya2VyUmFuZ2UoQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZSByYW5nZSk7CiAgICAg
QWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgZW5kVGV4dE1hcmtlckZvclRleHRNYXJrZXJSYW5nZShB
Y2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlIHJhbmdlKTsKICAgICBBY2Nlc3NpYmlsaXR5VGV4
dE1hcmtlciBlbmRUZXh0TWFya2VyRm9yQm91bmRzKGxvbmcgeCwgbG9uZyB5LCBsb25nIHdpZHRo
LCBsb25nIGhlaWdodCk7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVj
dGVkQnVuZGxlL21hYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tIGIvVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0eVVJRWxlbWVudE1hYy5t
bQppbmRleCAyYjQzZWVmM2JiNjguLjIxOWI3YTk1MzI4NCAxMDA2NDQKLS0tIGEvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0eVVJRWxlbWVudE1h
Yy5tbQorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL21hYy9BY2Nl
c3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tCkBAIC04NSw2ICs4NSwxMCBAQAogI2RlZmluZSBOU0Fj
Y2Vzc2liaWxpdHlUZXh0SW5wdXRNYXJrZWRSYW5nZUF0dHJpYnV0ZSBAIkFYVGV4dElucHV0TWFy
a2VkUmFuZ2UiCiAjZW5kaWYKIAorI2lmbmRlZiBOU0FjY2Vzc2liaWxpdHlUZXh0SW5wdXRNYXJr
ZWRUZXh0TWFya2VyUmFuZ2VBdHRyaWJ1dGUKKyNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5VGV4dElu
cHV0TWFya2VkVGV4dE1hcmtlclJhbmdlQXR0cmlidXRlIEAiQVhUZXh0SW5wdXRNYXJrZWRUZXh0
TWFya2VyUmFuZ2UiCisjZW5kaWYKKwogdHlwZWRlZiB2b2lkICgqQVhQb3N0ZWROb3RpZmljYXRp
b25DYWxsYmFjaykoaWQgZWxlbWVudCwgTlNTdHJpbmcqIG5vdGlmaWNhdGlvbiwgdm9pZCogY29u
dGV4dCk7CiAKIEBpbnRlcmZhY2UgTlNPYmplY3QgKFdlYktpdEFjY2Vzc2liaWxpdHlBZGRpdGlv
bnMpCkBAIC02MzMsNyArNjM3LDkgQEAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmFsbEF0dHJpYnV0ZXMoKQogCiAgICAgICAgIGF1dG8gdmFsdWUgPSBk
ZXNjcmlwdGlvbk9mVmFsdWUoYXR0cmlidXRlVmFsdWUoYXR0cmlidXRlKS5nZXQoKSk7CiAKLSAg
ICAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVRleHRJ
bnB1dE1hcmtlZFJhbmdlQXR0cmlidXRlXSAmJiAhdmFsdWUpCisgICAgICAgIGlmICghdmFsdWUK
KyAgICAgICAgICAgICYmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxp
dHlUZXh0SW5wdXRNYXJrZWRSYW5nZUF0dHJpYnV0ZV0KKyAgICAgICAgICAgICAgICB8fCBbYXR0
cmlidXRlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlUZXh0SW5wdXRNYXJrZWRUZXh0
TWFya2VyUmFuZ2VBdHRyaWJ1dGVdKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAg
IFt2YWx1ZXMgYXBwZW5kRm9ybWF0OkAiJUA6ICVAXG4iLCBhdHRyaWJ1dGUsIHZhbHVlLmdldCgp
XTsKQEAgLTIwMTIsNiArMjAxOCwxNiBAQCB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJl
c2V0U2VsZWN0ZWRUZXh0TWFya2VyUmFuZ2UoKQogICAgIHNldEF0dHJpYnV0ZVZhbHVlKG1fZWxl
bWVudC5nZXRBdXRvcmVsZWFzZWQoKSwgTlNBY2Nlc3NpYmlsaXR5U2VsZWN0ZWRUZXh0TWFya2Vy
UmFuZ2VBdHRyaWJ1dGUsIHRleHRNYXJrZXJSYW5nZS5nZXQoKSwgdHJ1ZSk7CiB9CiAKK1JlZlB0
cjxBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0
ZXh0SW5wdXRNYXJrZWRUZXh0TWFya2VyUmFuZ2UoKSBjb25zdAoreworICAgIEJFR0lOX0FYX09C
SkNfRVhDRVBUSU9OUworICAgIGF1dG8gdGV4dE1hcmtlclJhbmdlID0gYXR0cmlidXRlVmFsdWUo
TlNBY2Nlc3NpYmlsaXR5VGV4dElucHV0TWFya2VkVGV4dE1hcmtlclJhbmdlQXR0cmlidXRlKTsK
KyAgICByZXR1cm4gQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZTo6Y3JlYXRlKHRleHRNYXJr
ZXJSYW5nZS5nZXQoKSk7CisgICAgRU5EX0FYX09CSkNfRVhDRVBUSU9OUworCisgICAgcmV0dXJu
IG51bGxwdHI7Cit9CisKIFJlZlB0cjxBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcj4gQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6c3RhcnRUZXh0TWFya2VyRm9yVGV4dE1hcmtlclJhbmdlKEFjY2Vzc2li
aWxpdHlUZXh0TWFya2VyUmFuZ2UqIHJhbmdlKQogewogICAgIGlmICghcmFuZ2UpCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy9hdHRyaWJ1dGVkLXN0cmluZy9hdHRy
aWJ1dGVkLXN0cmluZy1oYXMtY29tcGxldGlvbi1hbm5vdGF0aW9uLmh0bWwgYi9MYXlvdXRUZXN0
cy9hY2Nlc3NpYmlsaXR5L21hYy9hdHRyaWJ1dGVkLXN0cmluZy9hdHRyaWJ1dGVkLXN0cmluZy1o
YXMtY29tcGxldGlvbi1hbm5vdGF0aW9uLmh0bWwKaW5kZXggNzZlNGUyM2RiNWUyLi5mNTAwZmUw
ZjUyN2UgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL2F0dHJpYnV0
ZWQtc3RyaW5nL2F0dHJpYnV0ZWQtc3RyaW5nLWhhcy1jb21wbGV0aW9uLWFubm90YXRpb24uaHRt
bAorKysgYi9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy9hdHRyaWJ1dGVkLXN0cmluZy9h
dHRyaWJ1dGVkLXN0cmluZy1oYXMtY29tcGxldGlvbi1hbm5vdGF0aW9uLmh0bWwKQEAgLTEzLDE1
ICsxMywxNyBAQAogICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSBhY2Nlc3NpYmlsaXR5Q29udHJv
bGxlci5hY2Nlc3NpYmxlRWxlbWVudEJ5SWQoImVkaXRhYmxlIik7CiAKICAgICAgICAgICAgIC8v
IFRlc3Qgd2l0aCBjb21wb3NpdGlvbiBhbmQgbm8gYXR0cmlidXRlcwotICAgICAgICAgICAgdGV4
dElucHV0Q29udHJvbGxlci5zZXRNYXJrZWRUZXh0KCJ0ZXN0aW5nIik7Ci0gICAgICAgICAgICB2
YXIgYXR0clN0cmluZyA9IGVsZW1lbnQuYXR0cmlidXRlZFN0cmluZ0ZvclJhbmdlKDAsIDcpOwor
ICAgICAgICAgICAgdGV4dElucHV0Q29udHJvbGxlci5zZXRNYXJrZWRUZXh0KCJ0ZXN0Iik7Cisg
ICAgICAgICAgICB2YXIgYXR0clN0cmluZyA9IGVsZW1lbnQuYXR0cmlidXRlZFN0cmluZ0ZvclJh
bmdlKDAsIDQpOwogICAgICAgICAgICAgc2hvdWxkQmUoImF0dHJTdHJpbmcuaW5kZXhPZignQVhU
ZXh0Q29tcGxldGlvbiA9IDEnKSIsICItMSIpOwogCiAgICAgICAgICAgICAvLyBUZXN0IHdpdGgg
Y29tcG9zaXRpb24gYW5kIGF0dHJpYnV0ZXMKLSAgICAgICAgICAgIHRleHRJbnB1dENvbnRyb2xs
ZXIuc2V0TWFya2VkVGV4dCgiZmF2b3JpdGUiLCAwLCA4LCBmYWxzZSwgdW5kZWZpbmVkLCBbCi0g
ICAgICAgICAgICAgICAgeyBmcm9tOiAiNCIsIGxlbmd0aDogIjQiLCBhbm5vdGF0aW9uOiAiTlNU
ZXh0Q29tcGxldGlvbiIgfQorICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9ICIgbWVzc2FnZSI7
CisgICAgICAgICAgICB0ZXh0SW5wdXRDb250cm9sbGVyLnVubWFya1RleHQoKTsKKyAgICAgICAg
ICAgIHRleHRJbnB1dENvbnRyb2xsZXIuc2V0TWFya2VkVGV4dChtZXNzYWdlLCA0LCBtZXNzYWdl
Lmxlbmd0aCwgZmFsc2UsIHVuZGVmaW5lZCwgWworICAgICAgICAgICAgICAgIHsgZnJvbTogIjQi
LCBsZW5ndGg6IG1lc3NhZ2UubGVuZ3RoLCBhbm5vdGF0aW9uOiAiTlNUZXh0Q29tcGxldGlvbiIg
fQogICAgICAgICAgICAgXSk7Ci0gICAgICAgICAgICBhdHRyU3RyaW5nID0gZWxlbWVudC5hdHRy
aWJ1dGVkU3RyaW5nRm9yUmFuZ2UoMCwgOCk7CisgICAgICAgICAgICBhdHRyU3RyaW5nID0gZWxl
bWVudC5hdHRyaWJ1dGVkU3RyaW5nRm9yUmFuZ2UoMCwgNCArIG1lc3NhZ2UubGVuZ3RoKTsKICAg
ICAgICAgICAgIHNob3VsZEJlVHJ1ZSgiYXR0clN0cmluZy5pbmRleE9mKCdBWFRleHRDb21wbGV0
aW9uID0gMScpICE9IC0xIik7CiAgICAgICAgIH0KICAgICA8L3NjcmlwdD4KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL3RleHQtaW5wdXQtbWFya2VkLXJhbmdlLWV4
cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL3RleHQtaW5wdXQtbWFy
a2VkLXJhbmdlLWV4cGVjdGVkLnR4dAppbmRleCAxMzMwMjZhMjg5ODMuLjQ2NWY4MzVjNGYwNiAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvdGV4dC1pbnB1dC1tYXJr
ZWQtcmFuZ2UtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFj
L3RleHQtaW5wdXQtbWFya2VkLXJhbmdlLWV4cGVjdGVkLnR4dApAQCAtNiw3ICs2LDcgQEAgT24g
c3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93
ZWQgYnkgIlRFU1QgQ09NUExFVEUKIFBBU1MgIWVsZW1lbnQudGV4dElucHV0TWFya2VkUmFuZ2Ug
aXMgdHJ1ZQogUEFTUyBlbGVtZW50LnRleHRJbnB1dE1hcmtlZFJhbmdlIGlzICd7MCwgNH0nCiBQ
QVNTICFlbGVtZW50LnRleHRJbnB1dE1hcmtlZFJhbmdlIGlzIHRydWUKLVBBU1MgZWxlbWVudC50
ZXh0SW5wdXRNYXJrZWRSYW5nZSBpcyAnezAsIDV9JworUEFTUyBlbGVtZW50LnRleHRJbnB1dE1h
cmtlZFJhbmdlIGlzICd7MSwgNX0nCiBQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCiAK
IFRFU1QgQ09NUExFVEUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFj
L3RleHQtaW5wdXQtbWFya2VkLXJhbmdlLmh0bWwgYi9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5
L21hYy90ZXh0LWlucHV0LW1hcmtlZC1yYW5nZS5odG1sCmluZGV4IDhlOThkNjBiMzZiMi4uMzgw
NDA1NGNmZWFlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy90ZXh0
LWlucHV0LW1hcmtlZC1yYW5nZS5odG1sCisrKyBiL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkv
bWFjL3RleHQtaW5wdXQtbWFya2VkLXJhbmdlLmh0bWwKQEAgLTExLDEyICsxMSwxNSBAQAogICAg
ICAgICBpZiAod2luZG93LnRleHRJbnB1dENvbnRyb2xsZXIgJiYgd2luZG93LmFjY2Vzc2liaWxp
dHlDb250cm9sbGVyKSB7CiAgICAgICAgICAgICB2YXIgZWxlbWVudCA9IGFjY2Vzc2liaWxpdHlD
b250cm9sbGVyLmFjY2Vzc2libGVFbGVtZW50QnlJZCgiZWRpdGFibGUiKTsKICAgICAgICAgICAg
IHNob3VsZEJlVHJ1ZSgiIWVsZW1lbnQudGV4dElucHV0TWFya2VkUmFuZ2UiKTsKKyAgICAgICAg
ICAgIAogICAgICAgICAgICAgdGV4dElucHV0Q29udHJvbGxlci5zZXRNYXJrZWRUZXh0KCJ0ZXN0
IiwgMSwgMCk7CiAgICAgICAgICAgICBzaG91bGRCZSgiZWxlbWVudC50ZXh0SW5wdXRNYXJrZWRS
YW5nZSIsICInezAsIDR9JyIpOworICAgICAgICAgICAgCiAgICAgICAgICAgICB0ZXh0SW5wdXRD
b250cm9sbGVyLmluc2VydFRleHQoInQiKTsKICAgICAgICAgICAgIHNob3VsZEJlVHJ1ZSgiIWVs
ZW1lbnQudGV4dElucHV0TWFya2VkUmFuZ2UiKTsKKyAgICAgICAgICAgIAogICAgICAgICAgICAg
dGV4dElucHV0Q29udHJvbGxlci5zZXRNYXJrZWRUZXh0KCJ0ZXN0MiIsIDEsIDApOwotICAgICAg
ICAgICAgc2hvdWxkQmUoImVsZW1lbnQudGV4dElucHV0TWFya2VkUmFuZ2UiLCAiJ3swLCA1fSci
KTsKKyAgICAgICAgICAgIHNob3VsZEJlKCJlbGVtZW50LnRleHRJbnB1dE1hcmtlZFJhbmdlIiwg
Iid7MSwgNX0nIik7CiAgICAgICAgIH0KICAgICA8L3NjcmlwdD4KIDwvYm9keT4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL3RleHQtaW5wdXQtbWFya2VkLXRleHQt
bWFya2VyLXJhbmdlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFj
L3RleHQtaW5wdXQtbWFya2VkLXRleHQtbWFya2VyLXJhbmdlLWV4cGVjdGVkLnR4dApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmVkYzIxNjEyZDk3OAotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL3RleHQtaW5wdXQtbWFya2Vk
LXRleHQtbWFya2VyLXJhbmdlLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDE1IEBACitUaGlzIHRl
c3QgZW5zdXJlcyB0aGF0IHRoZSBpbnB1dCBtZXRob2QgbWFya2VkIHJhbmdlIGlzIGF2YWlsYWJs
ZSB0byBhY2Nlc3NpYmlsaXR5IGNsaWVudHMgYXMgdGV4dCBtYXJrZXIgcmFuZ2UuCisKK09uIHN1
Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2Vk
IGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIHRleHQgaXMgJycKK1BBU1MgdGV4dCBpcyAn
dGVzdCcKK1BBU1MgdGV4dCBpcyAnJworUEFTUyBlbGVtZW50LnN0cmluZ1ZhbHVlIGlzICdBWFZh
bHVlOiB0ZXN0JworUEFTUyB0ZXh0IGlzICcgbWVzc2FnZScKK1BBU1MgZWxlbWVudC5zdHJpbmdW
YWx1ZSBpcyAnQVhWYWx1ZTogdGVzdCBtZXNzYWdlJworUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQg
aXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2FjY2Vz
c2liaWxpdHkvbWFjL3RleHQtaW5wdXQtbWFya2VkLXRleHQtbWFya2VyLXJhbmdlLmh0bWwgYi9M
YXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy90ZXh0LWlucHV0LW1hcmtlZC10ZXh0LW1hcmtl
ci1yYW5nZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNzEw
YmI3ZjM5YjY3Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9t
YWMvdGV4dC1pbnB1dC1tYXJrZWQtdGV4dC1tYXJrZXItcmFuZ2UuaHRtbApAQCAtMCwwICsxLDMz
IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+CisgICAgPHNjcmlwdCBzcmM9Ii4u
Ly4uL3Jlc291cmNlcy9qcy10ZXN0LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorICAg
IDxpbnB1dCBpZD0iZWRpdGFibGUiIHR5cGU9InRleHQiPgorICAgIDxzY3JpcHQgdHlwZT0idGV4
dC9qYXZhc2NyaXB0Ij4KKyAgICAgICAgZGVzY3JpcHRpb24oIlRoaXMgdGVzdCBlbnN1cmVzIHRo
YXQgdGhlIGlucHV0IG1ldGhvZCBtYXJrZWQgcmFuZ2UgaXMgYXZhaWxhYmxlIHRvIGFjY2Vzc2li
aWxpdHkgY2xpZW50cyBhcyB0ZXh0IG1hcmtlciByYW5nZS4iKTsKKyAgICAgICAgZWRpdGFibGUu
Zm9jdXMoKTsKKyAgICAgICAgaWYgKHdpbmRvdy50ZXh0SW5wdXRDb250cm9sbGVyICYmIHdpbmRv
dy5hY2Nlc3NpYmlsaXR5Q29udHJvbGxlcikgeworICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSBh
Y2Nlc3NpYmlsaXR5Q29udHJvbGxlci5hY2Nlc3NpYmxlRWxlbWVudEJ5SWQoImVkaXRhYmxlIik7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHZhciB0ZXh0ID0gZWxlbWVudC5zdHJpbmdGb3JU
ZXh0TWFya2VyUmFuZ2UoZWxlbWVudC50ZXh0SW5wdXRNYXJrZWRUZXh0TWFya2VyUmFuZ2UoKSk7
CisgICAgICAgICAgICBzaG91bGRCZSgidGV4dCIsICInJyIpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICB0ZXh0SW5wdXRDb250cm9sbGVyLnNldE1hcmtlZFRleHQoInRlc3QiKTsKKyAgICAg
ICAgICAgIHRleHQgPSBlbGVtZW50LnN0cmluZ0ZvclRleHRNYXJrZXJSYW5nZShlbGVtZW50LnRl
eHRJbnB1dE1hcmtlZFRleHRNYXJrZXJSYW5nZSgpKTsKKyAgICAgICAgICAgIHNob3VsZEJlKCJ0
ZXh0IiwgIid0ZXN0JyIpOworCisgICAgICAgICAgICB0ZXh0SW5wdXRDb250cm9sbGVyLnVubWFy
a1RleHQoKTsKKyAgICAgICAgICAgIHRleHQgPSBlbGVtZW50LnN0cmluZ0ZvclRleHRNYXJrZXJS
YW5nZShlbGVtZW50LnRleHRJbnB1dE1hcmtlZFRleHRNYXJrZXJSYW5nZSgpKTsKKyAgICAgICAg
ICAgIHNob3VsZEJlKCJ0ZXh0IiwgIicnIik7CisgICAgICAgICAgICBzaG91bGRCZSgiZWxlbWVu
dC5zdHJpbmdWYWx1ZSIsICInQVhWYWx1ZTogdGVzdCciKTsKKworICAgICAgICAgICAgdGV4dElu
cHV0Q29udHJvbGxlci5zZXRNYXJrZWRUZXh0KCIgbWVzc2FnZSIsIDQsICIgbWVzc2FnZSIubGVu
Z3RoKTsKKyAgICAgICAgICAgIHRleHQgPSBlbGVtZW50LnN0cmluZ0ZvclRleHRNYXJrZXJSYW5n
ZShlbGVtZW50LnRleHRJbnB1dE1hcmtlZFRleHRNYXJrZXJSYW5nZSgpKTsKKyAgICAgICAgICAg
IHNob3VsZEJlKCJ0ZXh0IiwgIicgbWVzc2FnZSciKTsKKyAgICAgICAgICAgIHNob3VsZEJlKCJl
bGVtZW50LnN0cmluZ1ZhbHVlIiwgIidBWFZhbHVlOiB0ZXN0IG1lc3NhZ2UnIik7CisgICAgICAg
IH0KKyAgICA8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2FjY2Vzc2liaWxpdHkvbWFjL3RleHQtaW5wdXQtc2Vzc2lvbi1ub3RpZmljYXRpb25zLWV4
cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL3RleHQtaW5wdXQtc2Vz
c2lvbi1ub3RpZmljYXRpb25zLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAuLmY2MTRhNmEzN2NhMAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL2FjY2Vzc2liaWxpdHkvbWFjL3RleHQtaW5wdXQtc2Vzc2lvbi1ub3RpZmljYXRpb25zLWV4
cGVjdGVkLnR4dApAQCAtMCwwICsxLDEyIEBACitUaGlzIHRlc3QgZW5zdXJlcyB0aGF0IHRoZSBp
bnB1dCBtZXRob2QgbWFya2VkIHJhbmdlIGlzIGF2YWlsYWJsZSB0byBhY2Nlc3NpYmlsaXR5IGNs
aWVudHMgYXMgdGV4dCBtYXJrZXIgcmFuZ2UuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBh
IHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4K
KworCitQQVNTIHN0YXRlIGlzIDAKK1BBU1Mgc3RhdGUgaXMgMQorUEFTUyBzdGF0ZSBpcyAyCitQ
QVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvdGV4dC1pbnB1dC1zZXNzaW9uLW5v
dGlmaWNhdGlvbnMuaHRtbCBiL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL3RleHQtaW5w
dXQtc2Vzc2lvbi1ub3RpZmljYXRpb25zLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwLi40NmJhY2MzNDBjOWIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9hY2Nlc3NpYmlsaXR5L21hYy90ZXh0LWlucHV0LXNlc3Npb24tbm90aWZpY2F0aW9ucy5odG1s
CkBAIC0wLDAgKzEsNDYgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKyAgICA8
c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QuanMiPjwvc2NyaXB0PgorPC9oZWFk
PgorPGJvZHk+CisgICAgPGlucHV0IGlkPSJlZGl0YWJsZSIgdHlwZT0idGV4dCI+CisgICAgPHNj
cmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorICAgICAgICBkZXNjcmlwdGlvbigiVGhpcyB0
ZXN0IGVuc3VyZXMgdGhhdCB0aGUgaW5wdXQgbWV0aG9kIG1hcmtlZCByYW5nZSBpcyBhdmFpbGFi
bGUgdG8gYWNjZXNzaWJpbGl0eSBjbGllbnRzIGFzIHRleHQgbWFya2VyIHJhbmdlLiIpOworICAg
ICAgICBlZGl0YWJsZS5mb2N1cygpOworCisgICAgICAgIHZhciBzdGF0ZSA9IDA7CisKKyAgICAg
ICAgZnVuY3Rpb24gbm90aWZpY2F0aW9uQ2FsbGJhY2sobm90aWZpY2F0aW9uKSB7CisKKyAgICAg
ICAgICAgIC8vIEZpcnN0IG5vdGlmaWNhdGlvbiB3ZSByZWNlaXZlCisgICAgICAgICAgICBpZiAo
bm90aWZpY2F0aW9uID09ICJBWFRleHRJbnB1dE1hcmtpbmdTZXNzaW9uQmVnYW4iKSB7CisgICAg
ICAgICAgICAgICAgc2hvdWxkQmUoInN0YXRlIiwgIjAiKTsKKyAgICAgICAgICAgICAgICBzdGF0
ZSArPSAxOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBTZWNvbmQgbm90aWZpY2F0
aW9uIHdlIHJlY2VpdmUKKyAgICAgICAgICAgIGlmIChub3RpZmljYXRpb24gPT0gIkFYVmFsdWVD
aGFuZ2VkIiAmJiBzdGF0ZSA+IDApIHsKKyAgICAgICAgICAgICAgICBzaG91bGRCZSgic3RhdGUi
LCAiMSIpOworICAgICAgICAgICAgICAgIHN0YXRlICs9IDE7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIC8vIFRoaXJkIG5vdGlmaWNhdGlvbiB3ZSByZWNlaXZlCisgICAgICAgICAgICBp
ZiAobm90aWZpY2F0aW9uID09ICJBWFRleHRJbnB1dE1hcmtpbmdTZXNzaW9uRW5kZWQiKSB7Cisg
ICAgICAgICAgICAgICAgc2hvdWxkQmUoInN0YXRlIiwgIjIiKTsKKyAgICAgICAgICAgICAgICBm
aW5pc2hKU1Rlc3QoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICh3
aW5kb3cudGV4dElucHV0Q29udHJvbGxlciAmJiB3aW5kb3cuYWNjZXNzaWJpbGl0eUNvbnRyb2xs
ZXIpIHsKKyAgICAgICAgICAgIHdpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKKyAgICAgICAg
ICAgIHZhciBlbGVtZW50ID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1l
bnRCeUlkKCJlZGl0YWJsZSIpOworICAgICAgICAgICAgCisgICAgICAgICAgICBlbGVtZW50LmFk
ZE5vdGlmaWNhdGlvbkxpc3RlbmVyKG5vdGlmaWNhdGlvbkNhbGxiYWNrKTsKKworICAgICAgICAg
ICAgdGV4dElucHV0Q29udHJvbGxlci5zZXRNYXJrZWRUZXh0KCJ0ZXN0IiwgMSwgMCk7CisgICAg
ICAgICAgICB0ZXh0SW5wdXRDb250cm9sbGVyLnVubWFya1RleHQoKTsKKyAgICAgICAgfQorICAg
IDwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgo=
</data>
<flag name="commit-queue"
          id="494401"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>466889</attachid>
            <date>2023-06-30 14:40:57 -0700</date>
            <delta_ts>2023-07-13 17:52:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-258228-20230630144056.patch</filename>
            <type>text/plain</type>
            <size>58622</size>
            <attacher name="Jack Wiig">jhwiig</attacher>
            
              <data encoding="base64">RnJvbSA3ZGVkYjE3NmQwZmM3NGVjN2Y4NzExM2ZiOWVmNGZmMzY1ZjgxYTkyIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWNrIFdpaWcgPGpod2lpZ0BnbWFpbC5jb20+CkRhdGU6IEZy
aSwgMzAgSnVuIDIwMjMgMTM6MzI6NDAgLTA3MDAKU3ViamVjdDogW1BBVENIXSBQb3N0IEFjY2Vz
c2liaWxpdHkgbm90aWZpY2F0aW9ucyBkdXJpbmcgY29tcG9zaXRpb24gY29udGV4dHMKIGluZGlj
YXRpbmcgc3RhcnQsIGVuZCwgYW5kIHZhbHVlIGNoYW5nZS4KIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yNTgyMjggcmRhcjovL3Byb2JsZW0vMTEwOTI1Mzg0CgpSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KClRvIGFsaWduIG91cnNlbHZlcyB3aXRoIEFwcEtpdCwg
V2ViS2l0IHNob3VsZCBwb3N0IGEgbm90aWZpY2F0aW9uIHdoZW4gYSBjb21wb3NpdGlvbiBzdGFy
dHMgc28gdGhhdCBhc3Npc3RpdmUgdGVjaG5vbG9naWVzIGtub3cgdG8gcHJvY2VzcyBhbnkgZnV0
dXJlIHZhbHVlIGNoYW5nZXMgZm9yIHRoYXQgdWkgZWxlbWVudCBhcyBpbmNvbXBsZXRlIGNvbXBv
c2l0aW9uIGNoYW5nZXMuIFdoZW4gYSBjb21wb3NpdGlvbiBlbmRzLCBwb3N0IGEgbm90aWZpY2F0
aW9uIHRvIGluZGljYXRlIHRoYXQgdGhlIGNvbXBvc2l0aW9uIHNlc3Npb24gaGFzIGVuZGVkLgoK
VGhpcyBtb2RlbCBkb2VzIG5vdCBjb252ZXkgYW55IGluZm9ybWF0aW9uIGluIHRoZSB0ZXh0IG5v
dGlmaWNhdGlvbnMgKHVubGlrZSB3aGF0IG15IHBhc3QgY29tbWVudCBpbmRpY2F0ZXMpIGFuZCBw
b3N0cyB0aGUgbm90aWZpY2F0aW9uIGZyb20gdGhlIHRleHQgY29udHJvbCBjb250YWluaW5nIHRo
ZSB0ZXh0IGluZm9ybWF0aW9uLiBUaGlzIGFsaWducyB1cyBjbG9zZXIgd2l0aCBob3cgb3RoZXIg
VUkgZnJhbWV3b3JrcyBiZWhhdmUuCgoqIExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL2F0
dHJpYnV0ZWQtc3RyaW5nL2F0dHJpYnV0ZWQtc3RyaW5nLWhhcy1jb21wbGV0aW9uLWFubm90YXRp
b24uaHRtbDoKKiBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy90ZXh0LWlucHV0LW1hcmtl
ZC1yYW5nZS1leHBlY3RlZC50eHQ6CiogTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvdGV4
dC1pbnB1dC1tYXJrZWQtcmFuZ2UuaHRtbDoKKiBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21h
Yy90ZXh0LWlucHV0LW1hcmtlZC10ZXh0LW1hcmtlci1yYW5nZS1leHBlY3RlZC50eHQ6IEFkZGVk
LgoqIExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL3RleHQtaW5wdXQtbWFya2VkLXRleHQt
bWFya2VyLXJhbmdlLmh0bWw6IEFkZGVkLgoqIExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFj
L3RleHQtaW5wdXQtc2Vzc2lvbi1ub3RpZmljYXRpb25zLWV4cGVjdGVkLnR4dDogQWRkZWQuCiog
TGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvdGV4dC1pbnB1dC1zZXNzaW9uLW5vdGlmaWNh
dGlvbnMuaHRtbDogQWRkZWQuCiogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWExvZ2dl
ci5jcHA6CihXZWJDb3JlOjpvcGVyYXRvcjw8KToKKiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FYT2JqZWN0Q2FjaGUuY3BwOgooV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6b25UZXh0Q29t
cG9zaXRpb25DaGFuZ2UpOgooV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6dXBkYXRlSXNvbGF0ZWRU
cmVlKToKKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnRleHRDb21wb3NpdGlvbk9iamVjdEZvck5v
ZGUpOiBEZWxldGVkLgoqIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNo
ZS5oOgooV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6b25UZXh0Q29tcG9zaXRpb25DaGFuZ2UpOgoo
V2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6dXBkYXRlUmVsYXRpb25zKToKKFdlYkNvcmU6OkFYT2Jq
ZWN0Q2FjaGU6OnRleHRDb21wb3NpdGlvbk9iamVjdEZvck5vZGUpOiBEZWxldGVkLgoqIFNvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhUZXh0TWFya2VyLmNwcDoKKFdlYkNvcmU6OkFYVGV4
dE1hcmtlclJhbmdlOjpjaGFyYWN0ZXJSYW5nZSBjb25zdCk6CihXZWJDb3JlOjpBWElzb2xhdGVk
VGV4dE1hcmtlclJhbmdlOjpBWElzb2xhdGVkVGV4dE1hcmtlclJhbmdlKToKKiBTb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FYVGV4dE1hcmtlci5oOgoqIFNvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHA6CihXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5
T2JqZWN0Ojp0ZXh0SW5wdXRNYXJrZWRSYW5nZSBjb25zdCk6CihXZWJDb3JlOjpBY2Nlc3NpYmls
aXR5T2JqZWN0Ojp0ZXh0SW5wdXRNYXJrZWRUZXh0TWFya2VyUmFuZ2UgY29uc3QpOgooV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6aXNOb2RlRm9yQ29tcG9zaXRpb24gY29uc3QpOiBEZWxl
dGVkLgoqIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5o
OgoqIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdEludGVy
ZmFjZS5oOgoqIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvY29jb2EvQVhUZXh0TWFya2Vy
Q29jb2EubW06CihXZWJDb3JlOjpBWFRleHRNYXJrZXJSYW5nZTo6bnNSYW5nZSBjb25zdCk6Ciog
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9jb2NvYS9BY2Nlc3NpYmlsaXR5T2JqZWN0Q29j
b2EubW06CihXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0Ojpjb250ZW50Rm9yUmFuZ2UgY29u
c3QpOgoqIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL0FjY2Vzc2liaWxpdHlPYmpl
Y3RJT1MubW06CihXZWJDb3JlOjphdHRyaWJ1dGVkU3RyaW5nQ3JlYXRlKToKKiBTb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkT2JqZWN0LmNwcDoKKFdl
YkNvcmU6OkFYSXNvbGF0ZWRPYmplY3Q6OnRleHRJbnB1dE1hcmtlZFJhbmdlIGNvbnN0KToKKFdl
YkNvcmU6OkFYSXNvbGF0ZWRPYmplY3Q6OnRleHRJbnB1dE1hcmtlZFRleHRNYXJrZXJSYW5nZSBj
b25zdCk6CiogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29s
YXRlZE9iamVjdC5oOgoqIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVl
L0FYSXNvbGF0ZWRUcmVlLmNwcDoKKFdlYkNvcmU6OkFYSXNvbGF0ZWRUcmVlOjp1cGRhdGVOb2Rl
UHJvcGVydGllcyk6CiogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUv
QVhJc29sYXRlZFRyZWUuaDoKKiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9BWE9i
amVjdENhY2hlTWFjLm1tOgooV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6cG9zdFBsYXRmb3JtTm90
aWZpY2F0aW9uKToKKiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9BY2Nlc3NpYmls
aXR5T2JqZWN0TWFjLm1tOgooV2ViQ29yZTo6YXR0cmlidXRlZFN0cmluZ1NldENvbXBvc2l0aW9u
QXR0cmlidXRlcyk6CihXZWJDb3JlOjphdHRyaWJ1dGVkU3RyaW5nQ3JlYXRlKToKKiBTb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckJh
c2UuaDoKKiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlck1hYy5tbToKKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgQUxM
T1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5EXSk6CigtW1dlYkFjY2Vzc2liaWxpdHlP
YmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTpdKToKKiBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0VkaXRvci5jcHA6CihXZWJDb3JlOjpFZGl0b3I6OnNldENvbXBvc2l0aW9u
KToKKiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwOgooV2ViQ29yZTo6
VHlwaW5nQ29tbWFuZDo6aW5zZXJ0VGV4dCk6CiogVG9vbHMvRHVtcFJlbmRlclRyZWUvQWNjZXNz
aWJpbGl0eVVJRWxlbWVudC5jcHA6Cih0ZXh0SW5wdXRNYXJrZWRUZXh0TWFya2VyUmFuZ2VDYWxs
YmFjayk6CihBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0ZXh0SW5wdXRNYXJrZWRUZXh0TWFya2Vy
UmFuZ2UgY29uc3QpOgooQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Z2V0SlNDbGFzcyk6CiogVG9v
bHMvRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oOgoqIFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL2lvcy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50SU9TLm1tOgooQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6dGV4dElucHV0TWFya2VkVGV4dE1hcmtlclJhbmdlIGNvbnN0KToKKiBUb29s
cy9EdW1wUmVuZGVyVHJlZS9tYWMvQWNjZXNzaWJpbGl0eVVJRWxlbWVudE1hYy5tbToKKGF0dHJp
YnV0ZXNPZkVsZW1lbnQpOgooQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGV4dElucHV0TWFya2Vk
VGV4dE1hcmtlclJhbmdlIGNvbnN0KToKKiBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVk
QnVuZGxlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuY3BwOgooV1RSOjpBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50Ojp0ZXh0SW5wdXRNYXJrZWRUZXh0TWFya2VyUmFuZ2UpOgoqIFRvb2xzL1dlYktpdFRl
c3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oOgoqIFRvb2xz
L1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudC5pZGw6CiogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMv
QWNjZXNzaWJpbGl0eVVJRWxlbWVudE1hYy5tbToKKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6YWxsQXR0cmlidXRlcyk6CihXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRleHRJbnB1
dE1hcmtlZFRleHRNYXJrZXJSYW5nZSBjb25zdCk6Ci0tLQogU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BWExvZ2dlci5jcHAgICAgIHwgIDYgKysrCiAuLi4vV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FYT2JqZWN0Q2FjaGUuY3BwICAgfCAzOCArKysrKysrLS0tLS0tLS0KIFNvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5oICB8IDExICsrKy0tCiBTb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FYVGV4dE1hcmtlci5jcHAgfCAyNCArKysrKysrKysrCiBTb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYVGV4dE1hcmtlci5oICAgfCAxMiArKysrKwogLi4u
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAgICAgIHwgNDIgKysrKysrKysr
LS0tLS0tLS0KIC4uLi9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaCAgICAgICB8
ICAzICstCiAuLi4vQWNjZXNzaWJpbGl0eU9iamVjdEludGVyZmFjZS5oICAgICAgICAgICAgfCAg
MSArCiAuLi4vYWNjZXNzaWJpbGl0eS9jb2NvYS9BWFRleHRNYXJrZXJDb2NvYS5tbSAgfCAxMCAr
LS0tCiAuLi4vY29jb2EvQWNjZXNzaWJpbGl0eU9iamVjdENvY29hLm1tICAgICAgICAgfCAgNCAr
LQogLi4uL2lvcy9BY2Nlc3NpYmlsaXR5T2JqZWN0SU9TLm1tICAgICAgICAgICAgIHwgIDIgKy0K
IC4uLi9pc29sYXRlZHRyZWUvQVhJc29sYXRlZE9iamVjdC5jcHAgICAgICAgICB8IDE4ICsrKysr
KysrCiAuLi4vaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRPYmplY3QuaCAgICAgICAgICAgfCAgMyAr
LQogLi4uL2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkVHJlZS5jcHAgICAgICAgICAgIHwgMTAgKyst
LQogLi4uL2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkVHJlZS5oICAgICAgICAgICAgIHwgIDUgKy0K
IC4uLi9hY2Nlc3NpYmlsaXR5L21hYy9BWE9iamVjdENhY2hlTWFjLm1tICAgICB8IDE0ICsrKysr
KwogLi4uL21hYy9BY2Nlc3NpYmlsaXR5T2JqZWN0TWFjLm1tICAgICAgICAgICAgIHwgMTkgKysr
KystLS0KIC4uLi9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJCYXNlLmggICB8ICAy
ICstCiAuLi4vbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tICAgfCAgOCAr
KysrCiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAgICAgICAgICAgICAgfCAxNCAr
KysrLS0KIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAgICAgICB8ICA1
ICstCiAuLi4vRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5jcHAgfCAxMSAr
KysrKwogVG9vbHMvRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oIHwgIDEg
KwogLi4uL2lvcy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50SU9TLm1tICAgICAgICAgIHwgIDUgKysK
IC4uLi9tYWMvQWNjZXNzaWJpbGl0eVVJRWxlbWVudE1hYy5tbSAgICAgICAgICB8IDE4ICsrKysr
KystCiAuLi4vSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5jcHAgfCAgMSAr
CiAuLi4vSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oICAgfCAgMSArCiAu
Li4vQmluZGluZ3MvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5pZGwgICAgICAgfCAgMSArCiAuLi4v
bWFjL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRNYWMubW0gICAgICAgICAgfCAxOCArKysrKysrLQog
Li4udXRlZC1zdHJpbmctaGFzLWNvbXBsZXRpb24tYW5ub3RhdGlvbi5odG1sIHwgMTIgKysrLS0K
IC4uLi9tYWMvdGV4dC1pbnB1dC1tYXJrZWQtcmFuZ2UtZXhwZWN0ZWQudHh0ICB8ICAyICstCiAu
Li4vbWFjL3RleHQtaW5wdXQtbWFya2VkLXJhbmdlLmh0bWwgICAgICAgICAgfCAgNSArLQogLi4u
bnB1dC1tYXJrZWQtdGV4dC1tYXJrZXItcmFuZ2UtZXhwZWN0ZWQudHh0IHwgMTUgKysrKysrCiAu
Li4vdGV4dC1pbnB1dC1tYXJrZWQtdGV4dC1tYXJrZXItcmFuZ2UuaHRtbCAgfCAzMyArKysrKysr
KysrKysrCiAuLi50LWlucHV0LXNlc3Npb24tbm90aWZpY2F0aW9ucy1leHBlY3RlZC50eHQgfCAx
MiArKysrKwogLi4uL21hYy90ZXh0LWlucHV0LXNlc3Npb24tbm90aWZpY2F0aW9ucy5odG1sIHwg
NDYgKysrKysrKysrKysrKysrKysrKwogMzYgZmlsZXMgY2hhbmdlZCwgMzQzIGluc2VydGlvbnMo
KyksIDg5IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IExheW91dFRlc3RzL2FjY2Vz
c2liaWxpdHkvbWFjL3RleHQtaW5wdXQtbWFya2VkLXRleHQtbWFya2VyLXJhbmdlLWV4cGVjdGVk
LnR4dAogY3JlYXRlIG1vZGUgMTAwNjQ0IExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL3Rl
eHQtaW5wdXQtbWFya2VkLXRleHQtbWFya2VyLXJhbmdlLmh0bWwKIGNyZWF0ZSBtb2RlIDEwMDY0
NCBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy90ZXh0LWlucHV0LXNlc3Npb24tbm90aWZp
Y2F0aW9ucy1leHBlY3RlZC50eHQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBMYXlvdXRUZXN0cy9hY2Nl
c3NpYmlsaXR5L21hYy90ZXh0LWlucHV0LXNlc3Npb24tbm90aWZpY2F0aW9ucy5odG1sCgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWExvZ2dlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYTG9nZ2VyLmNwcAppbmRleCBkNjEzNmIxZDYzNTIu
LmVjZGQ5NjhmMmM0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
WExvZ2dlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWExvZ2dlci5j
cHAKQEAgLTY0NCw2ICs2NDQsMTIgQEAgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFt
JiBzdHJlYW0sIEFYT2JqZWN0Q2FjaGU6OkFYTm90aWZpY2F0aW9uIG5vdGlmaWMKICAgICBjYXNl
IEFYT2JqZWN0Q2FjaGU6OkFYTm90aWZpY2F0aW9uOjpBWERyYWdnaW5nRXhpdGVkRHJvcFpvbmU6
CiAgICAgICAgIHN0cmVhbSA8PCAiQVhEcmFnZ2luZ0V4aXRlZERyb3Bab25lIjsKICAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBBWE9iamVjdENhY2hlOjpBWE5vdGlmaWNhdGlvbjo6QVhUZXh0SW5w
dXRNYXJraW5nU2Vzc2lvbkJlZ2FuOgorICAgICAgICBzdHJlYW0gPDwgIkFYVGV4dElucHV0TWFy
a2luZ1Nlc3Npb25CZWdhbiI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQVhPYmplY3RDYWNo
ZTo6QVhOb3RpZmljYXRpb246OkFYVGV4dElucHV0TWFya2luZ1Nlc3Npb25FbmRlZDoKKyAgICAg
ICAgc3RyZWFtIDw8ICJBWFRleHRJbnB1dE1hcmtpbmdTZXNzaW9uRW5kZWQiOworICAgICAgICBi
cmVhazsKICAgICB9CiAKICAgICByZXR1cm4gc3RyZWFtOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKaW5kZXggYTVhOTA4ZjdjZjNlLi5kZjMwZjYz
MzY0ZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RD
YWNoZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hl
LmNwcApAQCAtMTY1NCwxMyArMTY1NCwyNyBAQCB2b2lkIEFYT2JqZWN0Q2FjaGU6Om9uVmFsaWRp
dHlDaGFuZ2UoRWxlbWVudCYgZWxlbWVudCkKICAgICBwb3N0Tm90aWZpY2F0aW9uKGdldCgmZWxl
bWVudCksIG51bGxwdHIsIEFYSW52YWxpZFN0YXR1c0NoYW5nZWQpOwogfQogCi12b2lkIEFYT2Jq
ZWN0Q2FjaGU6Om9uVGV4dENvbXBvc2l0aW9uQ2hhbmdlKE5vZGUmIG5vZGUpCit2b2lkIEFYT2Jq
ZWN0Q2FjaGU6Om9uVGV4dENvbXBvc2l0aW9uQ2hhbmdlKE5vZGUmIG5vZGUsIENvbXBvc2l0aW9u
U3RhdGUgY29tcG9zaXRpb25TdGF0ZSwgYm9vbCB2YWx1ZUNoYW5nZWQpCiB7CisgICAgYXV0byog
b2JqZWN0ID0gZ2V0T3JDcmVhdGUoJm5vZGUpOworICAgIGlmICghb2JqZWN0KQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpZiAoYXV0byogb2JzZXJ2YWJsZU9iamVjdCA9IG9iamVjdC0+b2JzZXJ2
YWJsZU9iamVjdCgpKQorICAgICAgICBvYmplY3QgPSBvYnNlcnZhYmxlT2JqZWN0OworCiAjaWYg
RU5BQkxFKEFDQ0VTU0lCSUxJVFlfSVNPTEFURURfVFJFRSkKLSAgICB1cGRhdGVJc29sYXRlZFRy
ZWUodGV4dENvbXBvc2l0aW9uT2JqZWN0Rm9yTm9kZShub2RlKSwgQVhUZXh0Q29tcG9zaXRpb25D
aGFuZ2VkKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKG5vZGUpOworICAgIHVwZGF0ZUlzb2xh
dGVkVHJlZShvYmplY3QsIEFYVGV4dENvbXBvc2l0aW9uQ2hhbmdlZCk7CiAjZW5kaWYKKworICAg
IGlmIChjb21wb3NpdGlvblN0YXRlID09IENvbXBvc2l0aW9uU3RhdGU6OlN0YXJ0ZWQpCisgICAg
ICAgIHBvc3ROb3RpZmljYXRpb24ob2JqZWN0LCAmbm9kZS5kb2N1bWVudCgpLCBBWE5vdGlmaWNh
dGlvbjo6QVhUZXh0SW5wdXRNYXJraW5nU2Vzc2lvbkJlZ2FuLCBQb3N0VGFyZ2V0OjpFbGVtZW50
KTsKKworICAgIGlmICh2YWx1ZUNoYW5nZWQpCisgICAgICAgIHBvc3ROb3RpZmljYXRpb24ob2Jq
ZWN0LCAmbm9kZS5kb2N1bWVudCgpLCBBWE5vdGlmaWNhdGlvbjo6QVhWYWx1ZUNoYW5nZWQsIFBv
c3RUYXJnZXQ6OkVsZW1lbnQpOworCisgICAgaWYgKGNvbXBvc2l0aW9uU3RhdGUgPT0gQ29tcG9z
aXRpb25TdGF0ZTo6RW5kZWQpCisgICAgICAgIHBvc3ROb3RpZmljYXRpb24ob2JqZWN0LCAmbm9k
ZS5kb2N1bWVudCgpLCBBWE5vdGlmaWNhdGlvbjo6QVhUZXh0SW5wdXRNYXJraW5nU2Vzc2lvbkVu
ZGVkLCBQb3N0VGFyZ2V0OjpFbGVtZW50KTsKIH0KIAogI2lmbmRlZiBOREVCVUcKQEAgLTM5OTMs
NyArNDAwNyw3IEBAIHZvaWQgQVhPYmplY3RDYWNoZTo6dXBkYXRlSXNvbGF0ZWRUcmVlKGNvbnN0
IFZlY3RvcjxzdGQ6OnBhaXI8UmVmUHRyPEFjY2Vzc2liaWxpCiAgICAgICAgICAgICB0cmVlLT51
cGRhdGVOb2RlUHJvcGVydHkoKm5vdGlmaWNhdGlvbi5maXJzdCwgQVhQcm9wZXJ0eU5hbWU6OkNv
bHVtbkhlYWRlcnMpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQVhUZXh0Q29t
cG9zaXRpb25DaGFuZ2VkOgotICAgICAgICAgICAgdHJlZS0+dXBkYXRlTm9kZVByb3BlcnR5KCpu
b3RpZmljYXRpb24uZmlyc3QsIEFYUHJvcGVydHlOYW1lOjpUZXh0SW5wdXRNYXJrZWRSYW5nZSk7
CisgICAgICAgICAgICB0cmVlLT51cGRhdGVOb2RlUHJvcGVydHkoKm5vdGlmaWNhdGlvbi5maXJz
dCwgQVhQcm9wZXJ0eU5hbWU6OlRleHRJbnB1dE1hcmtlZFRleHRNYXJrZXJSYW5nZSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBWFVSTENoYW5nZWQ6CiAgICAgICAgICAgICB0
cmVlLT51cGRhdGVOb2RlUHJvcGVydHkoKm5vdGlmaWNhdGlvbi5maXJzdCwgQVhQcm9wZXJ0eU5h
bWU6OlVSTCk7CkBAIC00NTc4LDIwICs0NTkyLDYgQEAgQVhUZXh0Q2hhbmdlIEFYT2JqZWN0Q2Fj
aGU6OnRleHRDaGFuZ2VGb3JFZGl0VHlwZShBWFRleHRFZGl0VHlwZSB0eXBlKQogfQogI2VuZGlm
CiAKLUFjY2Vzc2liaWxpdHlPYmplY3QqIEFYT2JqZWN0Q2FjaGU6OnRleHRDb21wb3NpdGlvbk9i
amVjdEZvck5vZGUoTm9kZSYgbm9kZSkKLXsKLSAgICBXZWFrUHRyIG9iamVjdCA9IGdldCgmbm9k
ZSk7Ci0gICAgaWYgKG9iamVjdCkKLSAgICAgICAgb2JqZWN0ID0gb2JqZWN0LT5vYnNlcnZhYmxl
T2JqZWN0KCk7Ci0KLSNpZiBQTEFURk9STShNQUMpCi0gICAgLy8gSW4gb3VyIE1hYyBpbXBsZW1l
bnRhdGlvbnMgZm9yIHBvc3RpbmcgdGV4dCBub3RpZmljYXRpb25zLCB3ZSBmYWxsIGJhY2sgb24g
dGhlIHdlYiBhcmVhIGlmIHRoZSBvYnNlcnZhYmxlIG9iamVjdCBpcyBudWxscHRyLgotICAgIGlm
ICghb2JqZWN0KQotICAgICAgICBvYmplY3QgPSByb290V2ViQXJlYSgpOwotI2VuZGlmCi0gICAg
cmV0dXJuIG9iamVjdC5nZXQoKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5k
aWYgLy8gRU5BQkxFKEFDQ0VTU0lCSUxJVFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQVhPYmplY3RDYWNoZS5oCmluZGV4IGQ4NjBkMjBmYWI3ZS4uOWRhODM4M2NjZjg2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaApAQCAtMTc5LDYg
KzE3OSw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBhdHRhY2hXcmFwcGVyKEFjY2Vzc2liaWxpdHlP
YmplY3QqKTsKIAogcHVibGljOgorICAgIGVudW0gQ29tcG9zaXRpb25TdGF0ZSB7IFN0YXJ0ZWQs
IEluUHJvZ3Jlc3MsIEVuZGVkIH07CisKICAgICB2b2lkIG9uUGFnZUFjdGl2aXR5U3RhdGVDaGFu
Z2UoT3B0aW9uU2V0PEFjdGl2aXR5U3RhdGU+KTsKICAgICB2b2lkIHNldFBhZ2VBY3Rpdml0eVN0
YXRlKE9wdGlvblNldDxBY3Rpdml0eVN0YXRlPiBzdGF0ZSkgeyBtX3BhZ2VBY3Rpdml0eVN0YXRl
ID0gc3RhdGU7IH0KICAgICBPcHRpb25TZXQ8QWN0aXZpdHlTdGF0ZT4gcGFnZUFjdGl2aXR5U3Rh
dGUoKSBjb25zdCB7IHJldHVybiBtX3BhZ2VBY3Rpdml0eVN0YXRlOyB9CkBAIC0xOTMsNyArMTk1
LDcgQEAgcHVibGljOgogICAgIHZvaWQgb25UZXh0U2VjdXJpdHlDaGFuZ2VkKEhUTUxJbnB1dEVs
ZW1lbnQmKTsKICAgICB2b2lkIG9uVGl0bGVDaGFuZ2UoRG9jdW1lbnQmKTsKICAgICB2b2lkIG9u
VmFsaWRpdHlDaGFuZ2UoRWxlbWVudCYpOwotICAgIHZvaWQgb25UZXh0Q29tcG9zaXRpb25DaGFu
Z2UoTm9kZSYpOworICAgIHZvaWQgb25UZXh0Q29tcG9zaXRpb25DaGFuZ2UoTm9kZSYsIENvbXBv
c2l0aW9uU3RhdGUsIGJvb2wpOwogICAgIHZvaWQgdmFsdWVDaGFuZ2VkKEVsZW1lbnQqKTsKICAg
ICB2b2lkIGNoZWNrZWRTdGF0ZUNoYW5nZWQoTm9kZSopOwogICAgIHZvaWQgYXV0b2ZpbGxUeXBl
Q2hhbmdlZChOb2RlKik7CkBAIC0zNjAsNiArMzYyLDggQEAgcHVibGljOgogICAgICAgICBBWFNl
bGVjdGVkVGV4dENoYW5nZWQsCiAgICAgICAgIEFYU2V0U2l6ZUNoYW5nZWQsCiAgICAgICAgIEFY
VGFibGVIZWFkZXJzQ2hhbmdlZCwKKyAgICAgICAgQVhUZXh0SW5wdXRNYXJraW5nU2Vzc2lvbkJl
Z2FuLAorICAgICAgICBBWFRleHRJbnB1dE1hcmtpbmdTZXNzaW9uRW5kZWQsCiAgICAgICAgIEFY
VVJMQ2hhbmdlZCwKICAgICAgICAgQVhWYWx1ZUNoYW5nZWQsCiAgICAgICAgIEFYU2Nyb2xsZWRU
b0FuY2hvciwKQEAgLTQ1Niw4ICs0NjAsNiBAQCBwdWJsaWM6CiAgICAgc3RkOjpvcHRpb25hbDxW
ZWN0b3I8QVhJRD4+IHJlbGF0ZWRPYmplY3RJRHNGb3IoY29uc3QgQVhDb3JlT2JqZWN0JiwgQVhS
ZWxhdGlvblR5cGUpOwogICAgIHZvaWQgdXBkYXRlUmVsYXRpb25zKEVsZW1lbnQmLCBjb25zdCBR
dWFsaWZpZWROYW1lJik7CiAKLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiB0ZXh0Q29tcG9zaXRp
b25PYmplY3RGb3JOb2RlKE5vZGUmKTsKLQogI2lmIEVOQUJMRShBQ0NFU1NJQklMSVRZX0lTT0xB
VEVEX1RSRUUpCiAgICAgdm9pZCBzY2hlZHVsZU9iamVjdFJlZ2lvbnNVcGRhdGUoYm9vbCBzY2hl
ZHVsZUltbWVkaWF0ZWx5ID0gZmFsc2UpIHsgbV9nZW9tZXRyeU1hbmFnZXItPnNjaGVkdWxlT2Jq
ZWN0UmVnaW9uc1VwZGF0ZShzY2hlZHVsZUltbWVkaWF0ZWx5KTsgfQogICAgIHZvaWQgd2lsbFVw
ZGF0ZU9iamVjdFJlZ2lvbnMoKSB7IG1fZ2VvbWV0cnlNYW5hZ2VyLT53aWxsVXBkYXRlT2JqZWN0
UmVnaW9ucygpOyB9CkBAIC03MzAsNyArNzMyLDcgQEAgaW5saW5lIHZvaWQgQVhPYmplY3RDYWNo
ZTo6b25TZWxlY3RlZENoYW5nZWQoTm9kZSopIHsgfQogaW5saW5lIHZvaWQgQVhPYmplY3RDYWNo
ZTo6b25UZXh0U2VjdXJpdHlDaGFuZ2VkKEhUTUxJbnB1dEVsZW1lbnQmKSB7IH0KIGlubGluZSB2
b2lkIEFYT2JqZWN0Q2FjaGU6Om9uVGl0bGVDaGFuZ2UoRG9jdW1lbnQmKSB7IH0KIGlubGluZSB2
b2lkIEFYT2JqZWN0Q2FjaGU6Om9uVmFsaWRpdHlDaGFuZ2UoRWxlbWVudCYpIHsgfQotaW5saW5l
IHZvaWQgQVhPYmplY3RDYWNoZTo6b25UZXh0Q29tcG9zaXRpb25DaGFuZ2UoTm9kZSYpIHsgfQor
aW5saW5lIHZvaWQgQVhPYmplY3RDYWNoZTo6b25UZXh0Q29tcG9zaXRpb25DaGFuZ2UoTm9kZSYs
IENvbXBvc2l0aW9uU3RhdGUsIGJvb2wpIHsgfQogaW5saW5lIHZvaWQgQVhPYmplY3RDYWNoZTo6
dmFsdWVDaGFuZ2VkKEVsZW1lbnQqKSB7IH0KIGlubGluZSB2b2lkIEFYT2JqZWN0Q2FjaGU6Om9u
Rm9jdXNDaGFuZ2UoTm9kZSosIE5vZGUqKSB7IH0KIGlubGluZSB2b2lkIEFYT2JqZWN0Q2FjaGU6
Om9uUGFnZUFjdGl2aXR5U3RhdGVDaGFuZ2UoT3B0aW9uU2V0PEFjdGl2aXR5U3RhdGU+KSB7IH0K
QEAgLTc4MSw3ICs3ODMsNiBAQCBpbmxpbmUgdm9pZCBBWE9iamVjdENhY2hlOjp1cGRhdGVMb2Fk
aW5nUHJvZ3Jlc3MoZG91YmxlKSB7IH0KIGlubGluZSBTaW1wbGVSYW5nZSBBWE9iamVjdENhY2hl
OjpyYW5nZUZvck5vZGVDb250ZW50cyhOb2RlJiBub2RlKSB7IHJldHVybiBtYWtlUmFuZ2VTZWxl
Y3RpbmdOb2RlQ29udGVudHMobm9kZSk7IH0KIGlubGluZSBzdGQ6Om9wdGlvbmFsPFZlY3RvcjxB
WElEPj4gQVhPYmplY3RDYWNoZTo6cmVsYXRlZE9iamVjdElEc0Zvcihjb25zdCBBWENvcmVPYmpl
Y3QmLCBBWFJlbGF0aW9uVHlwZSkgeyByZXR1cm4gc3RkOjpudWxsb3B0OyB9CiBpbmxpbmUgdm9p
ZCBBWE9iamVjdENhY2hlOjp1cGRhdGVSZWxhdGlvbnMoRWxlbWVudCYsIGNvbnN0IFF1YWxpZmll
ZE5hbWUmKSB7IH0KLWlubGluZSBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBWE9iamVjdENhY2hlOjp0
ZXh0Q29tcG9zaXRpb25PYmplY3RGb3JOb2RlKE5vZGUmKSB7IHJldHVybiBudWxscHRyOyB9CiBp
bmxpbmUgdm9pZCBBWE9iamVjdENhY2hlOjpyZW1vdmUoQVhJRCkgeyB9CiBpbmxpbmUgdm9pZCBB
WE9iamVjdENhY2hlOjpyZW1vdmUoUmVuZGVyT2JqZWN0KikgeyB9CiBpbmxpbmUgdm9pZCBBWE9i
amVjdENhY2hlOjpyZW1vdmUoTm9kZSYpIHsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BWFRleHRNYXJrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BWFRleHRNYXJrZXIuY3BwCmluZGV4IGI1NTNmMWFiZWY3My4uNTY1ZTdlNjc0YmIyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYVGV4dE1hcmtlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWFRleHRNYXJrZXIuY3BwCkBAIC0y
NzUsNiArMjc1LDE5IEBAIHN0ZDo6b3B0aW9uYWw8U2ltcGxlUmFuZ2U+IEFYVGV4dE1hcmtlclJh
bmdlOjpzaW1wbGVSYW5nZSgpIGNvbnN0CiAgICAgcmV0dXJuIHsgeyAqc3RhcnRCb3VuZGFyeVBv
aW50LCAqZW5kQm91bmRhcnlQb2ludCB9IH07CiB9CiAKK3N0ZDo6b3B0aW9uYWw8Q2hhcmFjdGVy
UmFuZ2U+IEFYVGV4dE1hcmtlclJhbmdlOjpjaGFyYWN0ZXJSYW5nZSgpIGNvbnN0Cit7CisgICAg
aWYgKG1fc3RhcnQubV9kYXRhLm9iamVjdElEICE9IG1fZW5kLm1fZGF0YS5vYmplY3RJRAorICAg
ICAgICB8fCBtX3N0YXJ0Lm1fZGF0YS50cmVlSUQgIT0gbV9lbmQubV9kYXRhLnRyZWVJRCkKKyAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGlmIChtX3N0YXJ0Lm1fZGF0YS5jaGFy
YWN0ZXJPZmZzZXQgPiBtX2VuZC5tX2RhdGEuY2hhcmFjdGVyT2Zmc2V0KSB7CisgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0K
KyAgICByZXR1cm4geyB7IG1fc3RhcnQubV9kYXRhLmNoYXJhY3Rlck9mZnNldCwgbV9lbmQubV9k
YXRhLmNoYXJhY3Rlck9mZnNldCAtIG1fc3RhcnQubV9kYXRhLmNoYXJhY3Rlck9mZnNldCB9IH07
Cit9CisKIHN0ZDo6cGFydGlhbF9vcmRlcmluZyBwYXJ0aWFsT3JkZXIoY29uc3QgQVhUZXh0TWFy
a2VyJiBtYXJrZXIxLCBjb25zdCBBWFRleHRNYXJrZXImIG1hcmtlcjIpCiB7CiAgICAgaWYgKG1h
cmtlcjEub2JqZWN0SUQoKSA9PSBtYXJrZXIyLm9iamVjdElEKCkgJiYgbWFya2VyMS50cmVlSUQo
KSA9PSBtYXJrZXIyLnRyZWVJRCgpKSB7CkBAIC0yOTgsNCArMzExLDE1IEBAIHN0ZDo6cGFydGlh
bF9vcmRlcmluZyBwYXJ0aWFsT3JkZXIoY29uc3QgQVhUZXh0TWFya2VyJiBtYXJrZXIxLCBjb25z
dCBBWFRleHRNYXJrCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorI2lmIEVOQUJMRShBQ0NFU1NJ
QklMSVRZX0lTT0xBVEVEX1RSRUUpCitBWElzb2xhdGVkVGV4dE1hcmtlclJhbmdlOjpBWElzb2xh
dGVkVGV4dE1hcmtlclJhbmdlKGNvbnN0IEFYVGV4dE1hcmtlclJhbmdlJiByYW5nZSkKK3sKKyAg
ICBvYmplY3RJRCA9IHJhbmdlLnN0YXJ0KCkub2JqZWN0SUQoKTsKKyAgICBpZiAoYXV0byBjaGFy
YWN0ZXJSYW5nZSA9IHJhbmdlLmNoYXJhY3RlclJhbmdlKCkpIHsKKyAgICAgICAgc3RhcnQgPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oY2hhcmFjdGVyUmFuZ2UtPmxvY2F0aW9uKTsKKyAgICAgICAg
ZW5kID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNoYXJhY3RlclJhbmdlLT5sb2NhdGlvbiArIGNo
YXJhY3RlclJhbmdlLT5sZW5ndGgpOworICAgIH0KK30KKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYVGV4
dE1hcmtlci5oIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWFRleHRNYXJrZXIuaApp
bmRleCAwOTNmMjdlNDFlNjIuLjFlMjhiYzM2MjIyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BWFRleHRNYXJrZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FYVGV4dE1hcmtlci5oCkBAIC0xNTUsNiArMTU1LDcgQEAgcHVibGljOgogICAg
IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0ICYmIG1fZW5kOyB9CiAgICAg
b3BlcmF0b3IgVmlzaWJsZVBvc2l0aW9uUmFuZ2UoKSBjb25zdDsKICAgICBzdGQ6Om9wdGlvbmFs
PFNpbXBsZVJhbmdlPiBzaW1wbGVSYW5nZSgpIGNvbnN0OworICAgIHN0ZDo6b3B0aW9uYWw8Q2hh
cmFjdGVyUmFuZ2U+IGNoYXJhY3RlclJhbmdlKCkgY29uc3Q7CiAKICNpZiBQTEFURk9STShNQUMp
CiAgICAgUmV0YWluUHRyPEFYVGV4dE1hcmtlclJhbmdlUmVmPiBwbGF0Zm9ybURhdGEoKSBjb25z
dDsKQEAgLTE3Myw2ICsxNzQsMTcgQEAgcHJpdmF0ZToKICAgICBBWFRleHRNYXJrZXIgbV9lbmQ7
CiB9OwogCisjaWYgRU5BQkxFKEFDQ0VTU0lCSUxJVFlfSVNPTEFURURfVFJFRSkKKy8vIFRoaXMg
bGlnaHR3ZWlnaHQgcmVwcmVzZW50YXRpb24gb2YgYSB0ZXh0IG1hcmtlciByYW5nZSBpcyAxNiBi
eXRlcyAoaW5zdGVhZCBvZiA4MCBieXRlcyksIG1ha2luZyBpdCBmYXIgbW9yZSBlZmZpY2llbnQg
dG8gc3RvcmUgaW4gdGhlIGlzb2xhdGVkIG9iamVjdCdzIHByb3BlcnR5IG1hcC4KK2NsYXNzIEFY
SXNvbGF0ZWRUZXh0TWFya2VyUmFuZ2UgeworcHVibGljOgorICAgIEFYSUQgb2JqZWN0SUQ7Cisg
ICAgdW5zaWduZWQgc3RhcnQ7CisgICAgdW5zaWduZWQgZW5kOworICAgIEFYSXNvbGF0ZWRUZXh0
TWFya2VyUmFuZ2UoY29uc3QgQVhUZXh0TWFya2VyUmFuZ2UmKTsKK307CisjZW5kaWYKKwogaW5s
aW5lIE5vZGUqIEFYVGV4dE1hcmtlcjo6bm9kZSgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eU9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlPYmplY3QuY3BwCmluZGV4IDJhNmJmZDdkMjhiNS4uMzMzY2ZjYzRkMTBiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3Qu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVj
dC5jcHAKQEAgLTQwNSwzOSArNDA1LDQxIEBAIHN0ZDo6b3B0aW9uYWw8U2ltcGxlUmFuZ2U+IEFj
Y2Vzc2liaWxpdHlPYmplY3Q6Om1pc3NwZWxsaW5nUmFuZ2UoY29uc3QgU2ltcGxlUmFuCiAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKIH0KIAotYm9vbCBBY2Nlc3NpYmlsaXR5T2JqZWN0Ojppc05v
ZGVGb3JDb21wb3NpdGlvbihjb25zdCBFZGl0b3ImIGVkaXRvcikgY29uc3QKK3N0ZDo6b3B0aW9u
YWw8Q2hhcmFjdGVyUmFuZ2U+IEFjY2Vzc2liaWxpdHlPYmplY3Q6OnRleHRJbnB1dE1hcmtlZFJh
bmdlKCkgY29uc3QKIHsKLSAgICBXZWFrUHRyIGNvbXBvc2l0aW9uTm9kZSA9IGVkaXRvci5jb21w
b3NpdGlvbk5vZGUoKTsKLSAgICBpZiAoIWNvbXBvc2l0aW9uTm9kZSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgV2Vha1B0ciBjYWNoZSA9IGF4T2JqZWN0Q2FjaGUoKTsKLSAgICBpZiAo
IWNhY2hlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoYXV0byogY29tcG9zaXRp
b25PYmplY3QgPSBjYWNoZS0+dGV4dENvbXBvc2l0aW9uT2JqZWN0Rm9yTm9kZSgqY29tcG9zaXRp
b25Ob2RlKSkKLSAgICAgICAgcmV0dXJuIGNvbXBvc2l0aW9uT2JqZWN0LT5vYmplY3RJRCgpID09
IG9iamVjdElEKCk7CisgICAgYXV0byByYW5nZSA9IHRleHRJbnB1dE1hcmtlZFRleHRNYXJrZXJS
YW5nZSgpLmNoYXJhY3RlclJhbmdlKCk7CisgICAgaWYgKCFyYW5nZSB8fCAhcmFuZ2UtPmxlbmd0
aCkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAotICAgIHJldHVybiBmYWxzZTsKKyAg
ICByZXR1cm4gcmFuZ2U7CiB9CiAKLXN0ZDo6b3B0aW9uYWw8Q2hhcmFjdGVyUmFuZ2U+IEFjY2Vz
c2liaWxpdHlPYmplY3Q6OnRleHRJbnB1dE1hcmtlZFJhbmdlKCkgY29uc3QKK0FYVGV4dE1hcmtl
clJhbmdlIEFjY2Vzc2liaWxpdHlPYmplY3Q6OnRleHRJbnB1dE1hcmtlZFRleHRNYXJrZXJSYW5n
ZSgpIGNvbnN0CiB7CiAgICAgV2Vha1B0ciBub2RlID0gdGhpcy0+bm9kZSgpOwogICAgIGlmICgh
bm9kZSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAgICAgcmV0dXJuIHsgfTsK
IAogICAgIGF1dG8qIGZyYW1lID0gbm9kZS0+ZG9jdW1lbnQoKS5mcmFtZSgpOwogICAgIGlmICgh
ZnJhbWUpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAgIHJldHVybiB7IH07
CisKKyAgICBhdXRvKiBjYWNoZSA9IGF4T2JqZWN0Q2FjaGUoKTsKKyAgICBpZiAoIWNhY2hlKQor
ICAgICAgICByZXR1cm4geyB9OwogCiAgICAgYXV0byYgZWRpdG9yID0gZnJhbWUtPmVkaXRvcigp
OwotICAgIGF1dG8gcmFuZ2UgPSBlZGl0b3IuY29tcG9zaXRpb25SYW5nZSgpOwotICAgIGlmICgh
cmFuZ2UgfHwgIWlzTm9kZUZvckNvbXBvc2l0aW9uKGVkaXRvcikpCi0gICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7CisgICAgYXV0byogb2JqZWN0ID0gY2FjaGUtPmdldE9yQ3JlYXRlKGVkaXRv
ci5jb21wb3NpdGlvbk5vZGUoKSk7CisgICAgaWYgKCFvYmplY3QpCisgICAgICAgIHJldHVybiB7
IH07CisKKyAgICBpZiAoYXV0byogb2JzZXJ2YWJsZU9iamVjdCA9IG9iamVjdC0+b2JzZXJ2YWJs
ZU9iamVjdCgpKQorICAgICAgICBvYmplY3QgPSBvYnNlcnZhYmxlT2JqZWN0OworCisgICAgaWYg
KG9iamVjdC0+b2JqZWN0SUQoKSAhPSBvYmplY3RJRCgpKQorICAgICAgICByZXR1cm4geyB9Owog
Ci0gICAgYXV0byBzY29wZSA9IG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cygqbm9kZSk7
Ci0gICAgcmV0dXJuIGNoYXJhY3RlclJhbmdlKHNjb3BlLCAqcmFuZ2UpOworICAgIHJldHVybiB7
IGVkaXRvci5jb21wb3NpdGlvblJhbmdlKCkgfTsKIH0KIAogdW5zaWduZWQgQWNjZXNzaWJpbGl0
eU9iamVjdDo6YmxvY2txdW90ZUxldmVsKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmgKaW5kZXggMmFmNmU1OTRmY2Y2Li41
YTdiNjM3NzI4ZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eU9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eU9iamVjdC5oCkBAIC0yNDMsNiArMjQzLDcgQEAgcHVibGljOgogICAgIGJvb2wg
aGFzVW5kZXJsaW5lKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KICAgICBib29s
IGhhc0hpZ2hsaWdodGluZygpIGNvbnN0IG92ZXJyaWRlOwogICAgIHN0ZDo6b3B0aW9uYWw8Q2hh
cmFjdGVyUmFuZ2U+IHRleHRJbnB1dE1hcmtlZFJhbmdlKCkgY29uc3QgZmluYWw7CisgICAgQVhU
ZXh0TWFya2VyUmFuZ2UgdGV4dElucHV0TWFya2VkVGV4dE1hcmtlclJhbmdlKCkgY29uc3QgZmlu
YWw7CiAKICAgICBib29sIHN1cHBvcnRzRGF0ZXRpbWVBdHRyaWJ1dGUoKSBjb25zdCBvdmVycmlk
ZTsKICAgICBTdHJpbmcgZGF0ZXRpbWVBdHRyaWJ1dGVWYWx1ZSgpIGNvbnN0IG92ZXJyaWRlOwpA
QCAtODE1LDggKzgxNiw2IEBAIHByaXZhdGU6CiAgICAgLy8gU3BlY2lhbCBoYW5kbGluZyBvZiBj
bGljayBwb2ludCBmb3IgbGlua3MuCiAgICAgSW50UG9pbnQgbGlua0NsaWNrUG9pbnQoKTsKIAot
ICAgIGJvb2wgaXNOb2RlRm9yQ29tcG9zaXRpb24oY29uc3QgRWRpdG9yJikgY29uc3Q7Ci0KIHBy
b3RlY3RlZDogLy8gRklYTUU6IE1ha2UgdGhlIGRhdGEgbWVtYmVycyBwcml2YXRlLgogICAgIEFj
Y2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBtX2NoaWxkcmVuOwogICAgIG11dGFibGUgYm9vbCBt
X2NoaWxkcmVuSW5pdGlhbGl6ZWQgeyBmYWxzZSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0SW50ZXJmYWNlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3RJbnRlcmZhY2UuaAppbmRl
eCAzNDEwZTlhMTNlMjEuLjJiNzhhNmIxMzZmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0SW50ZXJmYWNlLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0SW50ZXJmYWNlLmgKQEAg
LTk4OSw2ICs5ODksNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGhhc1VuZGVybGluZSgp
IGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgaGFzSGlnaGxpZ2h0aW5nKCkgY29uc3QgPSAw
OwogICAgIHZpcnR1YWwgc3RkOjpvcHRpb25hbDxDaGFyYWN0ZXJSYW5nZT4gdGV4dElucHV0TWFy
a2VkUmFuZ2UoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBBWFRleHRNYXJrZXJSYW5nZSB0ZXh0
SW5wdXRNYXJrZWRUZXh0TWFya2VyUmFuZ2UoKSBjb25zdCA9IDA7CiAKICAgICB2aXJ0dWFsIGJv
b2wgc3VwcG9ydHNEYXRldGltZUF0dHJpYnV0ZSgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIFN0
cmluZyBkYXRldGltZUF0dHJpYnV0ZVZhbHVlKCkgY29uc3QgPSAwOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9jb2NvYS9BWFRleHRNYXJrZXJDb2NvYS5tbSBiL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvY29jb2EvQVhUZXh0TWFya2VyQ29jb2EubW0KaW5k
ZXggNDk1ZjQzZjdjOWIzLi4wMTkyNjIxMWRkMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvY29jb2EvQVhUZXh0TWFya2VyQ29jb2EubW0KKysrIGIvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9jb2NvYS9BWFRleHRNYXJrZXJDb2NvYS5tbQpAQCAtOTMsMTUg
KzkzLDcgQEAgUmV0YWluUHRyPEFYVGV4dE1hcmtlclJhbmdlUmVmPiBBWFRleHRNYXJrZXJSYW5n
ZTo6cGxhdGZvcm1EYXRhKCkgY29uc3QKIAogc3RkOjpvcHRpb25hbDxOU1JhbmdlPiBBWFRleHRN
YXJrZXJSYW5nZTo6bnNSYW5nZSgpIGNvbnN0CiB7Ci0gICAgaWYgKG1fc3RhcnQubV9kYXRhLm9i
amVjdElEICE9IG1fZW5kLm1fZGF0YS5vYmplY3RJRAotICAgICAgICB8fCBtX3N0YXJ0Lm1fZGF0
YS50cmVlSUQgIT0gbV9lbmQubV9kYXRhLnRyZWVJRCkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKLQotICAgIGlmIChtX3N0YXJ0Lm1fZGF0YS5jaGFyYWN0ZXJPZmZzZXQgPiBtX2VuZC5t
X2RhdGEuY2hhcmFjdGVyT2Zmc2V0KSB7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgIH0KLSAgICByZXR1cm4gTlNNYWtlUmFu
Z2UobV9zdGFydC5tX2RhdGEuY2hhcmFjdGVyT2Zmc2V0LCBtX2VuZC5tX2RhdGEuY2hhcmFjdGVy
T2Zmc2V0IC0gbV9zdGFydC5tX2RhdGEuY2hhcmFjdGVyT2Zmc2V0KTsKKyAgICByZXR1cm4gY2hh
cmFjdGVyUmFuZ2UoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9jb2NvYS9BY2Nlc3NpYmlsaXR5T2JqZWN0Q29j
b2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2NvY29hL0FjY2Vzc2liaWxpdHlP
YmplY3RDb2NvYS5tbQppbmRleCAwY2JmMWZiYTY5NWMuLjM1YzI1NTg1ZTRhOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9jb2NvYS9BY2Nlc3NpYmlsaXR5T2JqZWN0
Q29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9jb2NvYS9BY2Nlc3Np
YmlsaXR5T2JqZWN0Q29jb2EubW0KQEAgLTMzNywxMSArMzM3LDExIEBAIFJldGFpblB0cjxOU0Fy
cmF5PiBBY2Nlc3NpYmlsaXR5T2JqZWN0Ojpjb250ZW50Rm9yUmFuZ2UoY29uc3QgU2ltcGxlUmFu
Z2UmIHJhbmdlCiAgICAgICAgIGlmIChpdC50ZXh0KCkubGVuZ3RoKCkpIHsKICAgICAgICAgICAg
IGF1dG8gbGlzdE1hcmtlclRleHQgPSBsaXN0TWFya2VyVGV4dEZvck5vZGVBbmRQb3NpdGlvbigm
bm9kZSwgbWFrZUNvbnRhaW5lck9mZnNldFBvc2l0aW9uKGl0LnJhbmdlKCkuc3RhcnQpKTsKICAg
ICAgICAgICAgIGlmICghbGlzdE1hcmtlclRleHQuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKGF1dG8gYXR0clN0cmluZyA9IGF0dHJpYnV0ZWRTdHJpbmdDcmVhdGUoJm5vZGUsIGxp
c3RNYXJrZXJUZXh0LCBTcGVsbENoZWNrOjpObykpCisgICAgICAgICAgICAgICAgaWYgKGF1dG8g
YXR0clN0cmluZyA9IGF0dHJpYnV0ZWRTdHJpbmdDcmVhdGUoJm5vZGUsIGxpc3RNYXJrZXJUZXh0
LCBpdC5yYW5nZSgpLCBTcGVsbENoZWNrOjpObykpCiAgICAgICAgICAgICAgICAgICAgIFtyZXN1
bHQgYWRkT2JqZWN0OmF0dHJTdHJpbmcuZ2V0KCldOwogICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICBpZiAoYXV0byBhdHRyU3RyaW5nID0gYXR0cmlidXRlZFN0cmluZ0NyZWF0ZSgmbm9kZSwg
aXQudGV4dCgpLCBzcGVsbENoZWNrKSkKKyAgICAgICAgICAgIGlmIChhdXRvIGF0dHJTdHJpbmcg
PSBhdHRyaWJ1dGVkU3RyaW5nQ3JlYXRlKCZub2RlLCBpdC50ZXh0KCksIGl0LnJhbmdlKCksIHNw
ZWxsQ2hlY2spKQogICAgICAgICAgICAgICAgIFtyZXN1bHQgYWRkT2JqZWN0OmF0dHJTdHJpbmcu
Z2V0KCldOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWYgKE5vZGUqIHJlcGxhY2Vk
Tm9kZSA9IGl0Lm5vZGUoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9pb3MvQWNjZXNzaWJpbGl0eU9iamVjdElPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvaW9zL0FjY2Vzc2liaWxpdHlPYmplY3RJT1MubW0KaW5kZXggY2I5ZWM3ZGM1M2Zj
Li43OWMwMmZkMzJkMDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
aW9zL0FjY2Vzc2liaWxpdHlPYmplY3RJT1MubW0KKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9pb3MvQWNjZXNzaWJpbGl0eU9iamVjdElPUy5tbQpAQCAtMjA4LDcgKzIwOCw3IEBA
IHN0YXRpYyB2b2lkIGF0dHJpYnV0ZVN0cmluZ1NldFN0eWxlKE5TTXV0YWJsZUF0dHJpYnV0ZWRT
dHJpbmcgKmF0dHJTdHJpbmcsIFJlbmRlCiAgICAgICAgIFthdHRyU3RyaW5nIGFkZEF0dHJpYnV0
ZTpVSUFjY2Vzc2liaWxpdHlUZXh0QXR0cmlidXRlQ29udGV4dCB2YWx1ZTpVSUFjY2Vzc2liaWxp
dHlUZXh0dWFsQ29udGV4dFNvdXJjZUNvZGUgcmFuZ2U6cmFuZ2VdOwogfQogCi1SZXRhaW5QdHI8
TlNBdHRyaWJ1dGVkU3RyaW5nPiBhdHRyaWJ1dGVkU3RyaW5nQ3JlYXRlKE5vZGUqIG5vZGUsIFN0
cmluZ1ZpZXcgdGV4dCwgQVhDb3JlT2JqZWN0OjpTcGVsbENoZWNrKQorUmV0YWluUHRyPE5TQXR0
cmlidXRlZFN0cmluZz4gYXR0cmlidXRlZFN0cmluZ0NyZWF0ZShOb2RlKiBub2RlLCBTdHJpbmdW
aWV3IHRleHQsIGNvbnN0IFNpbXBsZVJhbmdlJiwgQVhDb3JlT2JqZWN0OjpTcGVsbENoZWNrKQog
ewogICAgIC8vIFNraXAgaW52aXNpYmxlIHRleHQuCiAgICAgYXV0byogcmVuZGVyZXIgPSBub2Rl
LT5yZW5kZXJlcigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9p
c29sYXRlZHRyZWUvQVhJc29sYXRlZE9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkT2JqZWN0LmNwcAppbmRleCBhMzRhZDk1MGFm
NjAuLjUzZTEwZmE3YWY2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZE9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZE9iamVjdC5jcHAKQEAgLTE2MTEs
NiArMTYxMSwyNCBAQCBib29sIEFYSXNvbGF0ZWRPYmplY3Q6Omhhc1NhbWVTdHlsZShjb25zdCBB
WENvcmVPYmplY3QmIG90aGVyT2JqZWN0KSBjb25zdAogICAgIH0pOwogfQogCitzdGQ6Om9wdGlv
bmFsPENoYXJhY3RlclJhbmdlPiBBWElzb2xhdGVkT2JqZWN0Ojp0ZXh0SW5wdXRNYXJrZWRSYW5n
ZSgpIGNvbnN0Cit7CisgICAgYXV0byByYW5nZSA9IHRleHRJbnB1dE1hcmtlZFRleHRNYXJrZXJS
YW5nZSgpLmNoYXJhY3RlclJhbmdlKCk7CisgICAgaWYgKCFyYW5nZSB8fCAhcmFuZ2UtPmxlbmd0
aCkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHJldHVybiByYW5nZTsKK30K
KworQVhUZXh0TWFya2VyUmFuZ2UgQVhJc29sYXRlZE9iamVjdDo6dGV4dElucHV0TWFya2VkVGV4
dE1hcmtlclJhbmdlKCkgY29uc3QKK3sKKyAgICBhdXRvIHJhbmdlID0gb3B0aW9uYWxBdHRyaWJ1
dGVWYWx1ZTxBWElzb2xhdGVkVGV4dE1hcmtlclJhbmdlPihBWFByb3BlcnR5TmFtZTo6VGV4dElu
cHV0TWFya2VkVGV4dE1hcmtlclJhbmdlKTsKKyAgICBpZiAoIXJhbmdlIHx8IHJhbmdlLT5zdGFy
dCA+PSByYW5nZS0+ZW5kKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgcmV0dXJuIHsgdHJl
ZSgpLT50cmVlSUQoKSwgcmFuZ2UtPm9iamVjdElELCByYW5nZS0+c3RhcnQsIHJhbmdlLT5lbmQg
fTsKK30KKwogLy8gVGhlIGF0dHJpYnV0ZSB0aGlzIHZhbHVlIGlzIGV4cG9zZWQgYXMgaXMgbm90
IHVzZWQgYnkgVm9pY2VPdmVyIG9yIGFueSBvdGhlciBBWCBjbGllbnQgb24gbWFjT1MsIHNvIHdl
IGludGVudGlvbmFsbHkgZG9uJ3QgY2FjaGUgaXQuCiAvLyBSZS12aXNpdCBpZiBJVE0gZXhwYW5k
cyB0byBtb3JlIHBsYXRmb3Jtcywgb3IgaWYgQVggY2xpZW50cyBuZWVkIHRvIHN0YXJ0IHVzaW5n
IHRoaXMuCiBTdHJpbmcgQVhJc29sYXRlZE9iamVjdDo6bGlua1JlbFZhbHVlKCkgY29uc3QKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNv
bGF0ZWRPYmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVl
L0FYSXNvbGF0ZWRPYmplY3QuaAppbmRleCBjNzljODAwZmIyZTQuLjIzNjQyYjgzMGJhNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29s
YXRlZE9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0
cmVlL0FYSXNvbGF0ZWRPYmplY3QuaApAQCAtNDU3LDcgKzQ1Nyw4IEBAIHByaXZhdGU6CiAgICAg
Ym9vbCBoYXNTYW1lU3R5bGUoY29uc3QgQVhDb3JlT2JqZWN0JikgY29uc3Qgb3ZlcnJpZGU7CiAg
ICAgYm9vbCBoYXNVbmRlcmxpbmUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0cmli
dXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6Okhhc1VuZGVybGluZSk7IH0KICAgICBib29sIGhhc0hp
Z2hsaWdodGluZygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShB
WFByb3BlcnR5TmFtZTo6SGFzSGlnaGxpZ2h0aW5nKTsgfQotICAgIHN0ZDo6b3B0aW9uYWw8Q2hh
cmFjdGVyUmFuZ2U+IHRleHRJbnB1dE1hcmtlZFJhbmdlKCkgY29uc3QgZmluYWwgeyByZXR1cm4g
b3B0aW9uYWxBdHRyaWJ1dGVWYWx1ZTxDaGFyYWN0ZXJSYW5nZT4oQVhQcm9wZXJ0eU5hbWU6OlRl
eHRJbnB1dE1hcmtlZFJhbmdlKTsgfQorICAgIHN0ZDo6b3B0aW9uYWw8Q2hhcmFjdGVyUmFuZ2U+
IHRleHRJbnB1dE1hcmtlZFJhbmdlKCkgY29uc3QgZmluYWw7CisgICAgQVhUZXh0TWFya2VyUmFu
Z2UgdGV4dElucHV0TWFya2VkVGV4dE1hcmtlclJhbmdlKCkgY29uc3QgZmluYWw7CiAgICAgRWxl
bWVudCogZWxlbWVudCgpIGNvbnN0IG92ZXJyaWRlOwogICAgIE5vZGUqIG5vZGUoKSBjb25zdCBv
dmVycmlkZTsKICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyKCkgY29uc3Qgb3ZlcnJpZGU7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElz
b2xhdGVkVHJlZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJl
ZS9BWElzb2xhdGVkVHJlZS5jcHAKaW5kZXggMTYwOTAxNDA5OGUxLi5iNjc1MjBkMDFjOGEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNv
bGF0ZWRUcmVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVk
dHJlZS9BWElzb2xhdGVkVHJlZS5jcHAKQEAgLTU4MCwxMyArNTgwLDExIEBAIHZvaWQgQVhJc29s
YXRlZFRyZWU6OnVwZGF0ZU5vZGVQcm9wZXJ0aWVzKEFYQ29yZU9iamVjdCYgYXhPYmplY3QsIGNv
bnN0IFZlY3RvcjxBCiAgICAgICAgIGNhc2UgQVhQcm9wZXJ0eU5hbWU6OlN1cHBvcnRzU2V0U2l6
ZToKICAgICAgICAgICAgIHByb3BlcnR5TWFwLnNldChBWFByb3BlcnR5TmFtZTo6U3VwcG9ydHNT
ZXRTaXplLCBheE9iamVjdC5zdXBwb3J0c1NldFNpemUoKSk7CiAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBBWFByb3BlcnR5TmFtZTo6VGV4dElucHV0TWFya2VkUmFuZ2U6Ci0gICAg
ICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGhhdmUgYSBtZWNoYW5pc20gdG8gcmVtb3ZlIGEg
cHJvcGVydHkgZnJvbSB0aGUgbWFwIGZvciB3aGVuIHRleHRJbnB1dE1hcmtlZFJhbmdlIGlzIHN0
ZDo6bnVsbG9wdC4KLSAgICAgICAgICAgIGlmIChhdXRvIHRleHRJbnB1dE1hcmtlZFJhbmdlID0g
YXhPYmplY3QudGV4dElucHV0TWFya2VkUmFuZ2UoKSkKLSAgICAgICAgICAgICAgICBwcm9wZXJ0
eU1hcC5zZXQoQVhQcm9wZXJ0eU5hbWU6OlRleHRJbnB1dE1hcmtlZFJhbmdlLCAqdGV4dElucHV0
TWFya2VkUmFuZ2UpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHByb3BlcnR5
TWFwLnNldChBWFByb3BlcnR5TmFtZTo6VGV4dElucHV0TWFya2VkUmFuZ2UsIG51bGxwdHIpOwor
ICAgICAgICBjYXNlIEFYUHJvcGVydHlOYW1lOjpUZXh0SW5wdXRNYXJrZWRUZXh0TWFya2VyUmFu
Z2U6IHsKKyAgICAgICAgICAgIEFYSXNvbGF0ZWRUZXh0TWFya2VyUmFuZ2UgaXNvbGF0ZWRSYW5n
ZSA9IHsgYXhPYmplY3QudGV4dElucHV0TWFya2VkVGV4dE1hcmtlclJhbmdlKCkgfTsKKyAgICAg
ICAgICAgIHByb3BlcnR5TWFwLnNldChBWFByb3BlcnR5TmFtZTo6VGV4dElucHV0TWFya2VkVGV4
dE1hcmtlclJhbmdlLCBpc29sYXRlZFJhbmdlKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CiAgICAgICAgIGNhc2UgQVhQcm9wZXJ0eU5hbWU6OlVSTDoKICAgICAgICAgICAgIHByb3Bl
cnR5TWFwLnNldChBWFByb3BlcnR5TmFtZTo6VVJMLCBheE9iamVjdC51cmwoKS5pc29sYXRlZENv
cHkoKSk7CiAgICAgICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRUcmVlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkVHJlZS5oCmluZGV4IDY0YzRh
ZDgzZWJjNC4uMmFiM2I2ZjA5N2NhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkVHJlZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRUcmVlLmgKQEAgLTQ2LDYgKzQ2
LDcgQEAgY2xhc3MgVGV4dFN0cmVhbTsKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQVhJ
c29sYXRlZE9iamVjdDsKK2NsYXNzIEFYSXNvbGF0ZWRUZXh0TWFya2VyUmFuZ2U7CiBjbGFzcyBB
WE9iamVjdENhY2hlOwogY2xhc3MgQWNjZXNzaWJpbGl0eU9iamVjdDsKIGNsYXNzIFBhZ2U7CkBA
IC0yMjYsNyArMjI3LDcgQEAgZW51bSBjbGFzcyBBWFByb3BlcnR5TmFtZSA6IHVpbnQxNl90IHsK
ICAgICBTdXBwb3J0c1NldFNpemUsCiAgICAgVGFibGVMZXZlbCwKICAgICBUZXh0Q29udGVudCwK
LSAgICBUZXh0SW5wdXRNYXJrZWRSYW5nZSwKKyAgICBUZXh0SW5wdXRNYXJrZWRUZXh0TWFya2Vy
UmFuZ2UsCiAgICAgVGl0bGUsCiAgICAgVGl0bGVBdHRyaWJ1dGVWYWx1ZSwKICAgICBUaXRsZVVJ
RWxlbWVudCwKQEAgLTIzOSw3ICsyNDAsNyBAQCBlbnVtIGNsYXNzIEFYUHJvcGVydHlOYW1lIDog
dWludDE2X3QgewogICAgIFZpc2libGVSb3dzLAogfTsKIAotdXNpbmcgQVhQcm9wZXJ0eVZhbHVl
VmFyaWFudCA9IHN0ZDo6dmFyaWFudDxzdGQ6Om51bGxwdHJfdCwgQVhJRCwgU3RyaW5nLCBib29s
LCBpbnQsIHVuc2lnbmVkLCBkb3VibGUsIGZsb2F0LCB1aW50NjRfdCwgQWNjZXNzaWJpbGl0eUJ1
dHRvblN0YXRlLCBDb2xvciwgVVJMLCBMYXlvdXRSZWN0LCBGbG9hdFBvaW50LCBGbG9hdFJlY3Qs
IEludFBvaW50LCBJbnRSZWN0LCBQQUw6OlNlc3Npb25JRCwgc3RkOjpwYWlyPHVuc2lnbmVkLCB1
bnNpZ25lZD4sIFZlY3RvcjxBY2Nlc3NpYmlsaXR5VGV4dD4sIFZlY3RvcjxBWElEPiwgVmVjdG9y
PHN0ZDo6cGFpcjxBWElELCBBWElEPj4sIFZlY3RvcjxTdHJpbmc+LCBQYXRoLCBPcHRpb25TZXQ8
QVhBbmNlc3RvckZsYWc+LCBSZXRhaW5QdHI8TlNBdHRyaWJ1dGVkU3RyaW5nPiwgSW5zaWRlTGlu
aywgVmVjdG9yPFZlY3RvcjxBWElEPj4sIENoYXJhY3RlclJhbmdlPjsKK3VzaW5nIEFYUHJvcGVy
dHlWYWx1ZVZhcmlhbnQgPSBzdGQ6OnZhcmlhbnQ8c3RkOjpudWxscHRyX3QsIEFYSUQsIFN0cmlu
ZywgYm9vbCwgaW50LCB1bnNpZ25lZCwgZG91YmxlLCBmbG9hdCwgdWludDY0X3QsIEFjY2Vzc2li
aWxpdHlCdXR0b25TdGF0ZSwgQ29sb3IsIFVSTCwgTGF5b3V0UmVjdCwgRmxvYXRQb2ludCwgRmxv
YXRSZWN0LCBJbnRQb2ludCwgSW50UmVjdCwgUEFMOjpTZXNzaW9uSUQsIHN0ZDo6cGFpcjx1bnNp
Z25lZCwgdW5zaWduZWQ+LCBWZWN0b3I8QWNjZXNzaWJpbGl0eVRleHQ+LCBWZWN0b3I8QVhJRD4s
IFZlY3RvcjxzdGQ6OnBhaXI8QVhJRCwgQVhJRD4+LCBWZWN0b3I8U3RyaW5nPiwgUGF0aCwgT3B0
aW9uU2V0PEFYQW5jZXN0b3JGbGFnPiwgUmV0YWluUHRyPE5TQXR0cmlidXRlZFN0cmluZz4sIElu
c2lkZUxpbmssIFZlY3RvcjxWZWN0b3I8QVhJRD4+LCBDaGFyYWN0ZXJSYW5nZSwgQVhJc29sYXRl
ZFRleHRNYXJrZXJSYW5nZT47CiB1c2luZyBBWFByb3BlcnR5TWFwID0gSGFzaE1hcDxBWFByb3Bl
cnR5TmFtZSwgQVhQcm9wZXJ0eVZhbHVlVmFyaWFudCwgSW50SGFzaDxBWFByb3BlcnR5TmFtZT4s
IFdURjo6U3Ryb25nRW51bUhhc2hUcmFpdHM8QVhQcm9wZXJ0eU5hbWU+PjsKIAogc3RydWN0IEFY
UHJvcGVydHlDaGFuZ2UgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9tYWMvQVhPYmplY3RDYWNoZU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
bWFjL0FYT2JqZWN0Q2FjaGVNYWMubW0KaW5kZXggN2ZlY2JjMzY2Y2U4Li45NGY2OWVmZWJjMDIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL0FYT2JqZWN0Q2Fj
aGVNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvQVhPYmplY3RD
YWNoZU1hYy5tbQpAQCAtMTI3LDYgKzEyNywxNCBAQAogI2RlZmluZSBrQVhEcmFnZ2luZ0Rlc3Rp
bmF0aW9uRHJhZ05vdEFjY2VwdGVkTm90aWZpY2F0aW9uIENGU1RSKCJBWERyYWdnaW5nRGVzdGlu
YXRpb25EcmFnTm90QWNjZXB0ZWQiKQogI2VuZGlmCiAKKyNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5
VGV4dElucHV0TWFya2luZ1Nlc3Npb25CZWdhbk5vdGlmaWNhdGlvbgorI2RlZmluZSBOU0FjY2Vz
c2liaWxpdHlUZXh0SW5wdXRNYXJraW5nU2Vzc2lvbkJlZ2FuTm90aWZpY2F0aW9uIEAiQVhUZXh0
SW5wdXRNYXJraW5nU2Vzc2lvbkJlZ2FuIgorI2VuZGlmCisKKyNpZm5kZWYgTlNBY2Nlc3NpYmls
aXR5VGV4dElucHV0TWFya2luZ1Nlc3Npb25FbmRlZE5vdGlmaWNhdGlvbgorI2RlZmluZSBOU0Fj
Y2Vzc2liaWxpdHlUZXh0SW5wdXRNYXJraW5nU2Vzc2lvbkVuZGVkTm90aWZpY2F0aW9uIEAiQVhU
ZXh0SW5wdXRNYXJraW5nU2Vzc2lvbkVuZGVkIgorI2VuZGlmCisKIC8vIFZlcnkgbGFyZ2Ugc3Ry
aW5ncyBjYW4gbmVnYXRpdmVseSBpbXBhY3QgdGhlIHBlcmZvcm1hbmNlIG9mIG5vdGlmaWNhdGlv
bnMsIHNvIHRoaXMgbGVuZ3RoIGlzIGNob3NlbiB0byB0cnkgdG8gZml0IGFuIGF2ZXJhZ2UgcGFy
YWdyYXBoIG9yIGxpbmUgb2YgdGV4dCwgYnV0IG5vdCBhbGxvdyBzdHJpbmdzIHRvIGJlIGxhcmdl
IGVub3VnaCB0byBodXJ0IHBlcmZvcm1hbmNlLgogc3RhdGljIGNvbnN0IE5TVUludGVnZXIgQVhW
YWx1ZUNoYW5nZVRydW5jYXRpb25MZW5ndGggPSAxMDAwOwogCkBAIC00MzEsNiArNDM5LDEyIEBA
IHZvaWQgQVhPYmplY3RDYWNoZTo6cG9zdFBsYXRmb3JtTm90aWZpY2F0aW9uKEFYQ29yZU9iamVj
dCogb2JqZWN0LCBBWE5vdGlmaWNhdGlvCiAgICAgY2FzZSBBWERyYWdnaW5nRXhpdGVkRHJvcFpv
bmU6CiAgICAgICAgIG1hY05vdGlmaWNhdGlvbiA9IChpZClrQVhEcmFnZ2luZ0Rlc3RpbmF0aW9u
RHJhZ05vdEFjY2VwdGVkTm90aWZpY2F0aW9uOwogICAgICAgICBicmVhazsKKyAgICBjYXNlIEFY
VGV4dElucHV0TWFya2luZ1Nlc3Npb25CZWdhbjoKKyAgICAgICAgbWFjTm90aWZpY2F0aW9uID0g
TlNBY2Nlc3NpYmlsaXR5VGV4dElucHV0TWFya2luZ1Nlc3Npb25CZWdhbk5vdGlmaWNhdGlvbjsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBWFRleHRJbnB1dE1hcmtpbmdTZXNzaW9uRW5kZWQ6
CisgICAgICAgIG1hY05vdGlmaWNhdGlvbiA9IE5TQWNjZXNzaWJpbGl0eVRleHRJbnB1dE1hcmtp
bmdTZXNzaW9uRW5kZWROb3RpZmljYXRpb247CisgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6
CiAgICAgICAgIHJldHVybjsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L21hYy9BY2Nlc3NpYmlsaXR5T2JqZWN0TWFjLm1tIGIvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9tYWMvQWNjZXNzaWJpbGl0eU9iamVjdE1hYy5tbQppbmRleCA0MTFjMDUy
OThiY2MuLjQwODE1NzQ5Y2NiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9tYWMvQWNjZXNzaWJpbGl0eU9iamVjdE1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L21hYy9BY2Nlc3NpYmlsaXR5T2JqZWN0TWFjLm1tCkBAIC02NDQsMjMgKzY0
NCwzMCBAQCBzdGF0aWMgdm9pZCBhdHRyaWJ1dGVkU3RyaW5nU2V0RWxlbWVudChOU011dGFibGVB
dHRyaWJ1dGVkU3RyaW5nICphdHRyU3RyaW5nLCBOUwogICAgICAgICBbYXR0clN0cmluZyBhZGRB
dHRyaWJ1dGU6YXR0cmlidXRlIHZhbHVlOihfX2JyaWRnZSBpZClheEVsZW1lbnQuZ2V0KCkgcmFu
Z2U6cmFuZ2VdOwogfQogCi1zdGF0aWMgdm9pZCBhdHRyaWJ1dGVkU3RyaW5nU2V0Q29tcG9zaXRp
b25BdHRyaWJ1dGVzKE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcgKmF0dHJTdHJpbmcsIE5vZGUm
IG5vZGUpCitzdGF0aWMgdm9pZCBhdHRyaWJ1dGVkU3RyaW5nU2V0Q29tcG9zaXRpb25BdHRyaWJ1
dGVzKE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcgKmF0dHJTdHJpbmcsIE5vZGUmIG5vZGUsIGNv
bnN0IFNpbXBsZVJhbmdlJiB0ZXh0U2ltcGxlUmFuZ2UpCiB7CiAjaWYgSEFWRShJTkxJTkVfUFJF
RElDVElPTlMpCiAgICAgYXV0byYgZWRpdG9yID0gbm9kZS5kb2N1bWVudCgpLmVkaXRvcigpOwog
ICAgIGlmICgmbm9kZSAhPSBlZGl0b3IuY29tcG9zaXRpb25Ob2RlKCkpCiAgICAgICAgIHJldHVy
bjsKIAorICAgIGF1dG8gc2NvcGUgPSBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMobm9k
ZSk7CisgICAgYXV0byB0ZXh0UmFuZ2UgPSBjaGFyYWN0ZXJSYW5nZShzY29wZSwgdGV4dFNpbXBs
ZVJhbmdlKTsKKwogICAgIGF1dG8mIGFubm90YXRpb25zID0gZWRpdG9yLmN1c3RvbUNvbXBvc2l0
aW9uQW5ub3RhdGlvbnMoKTsKICAgICBpZiAoYXV0byBpdCA9IGFubm90YXRpb25zLmZpbmQoTlNU
ZXh0Q29tcGxldGlvbkF0dHJpYnV0ZU5hbWUpOyBpdCAhPSBhbm5vdGF0aW9ucy5lbmQoKSkgewot
ICAgICAgICBmb3IgKGF1dG8mIHJhbmdlIDogaXQtPnZhbHVlKSB7Ci0gICAgICAgICAgICBpZiAo
YXR0cmlidXRlZFN0cmluZ0NvbnRhaW5zUmFuZ2UoYXR0clN0cmluZywgcmFuZ2UpKQotICAgICAg
ICAgICAgICAgIGF0dHJpYnV0ZWRTdHJpbmdTZXROdW1iZXIoYXR0clN0cmluZywgTlNBY2Nlc3Np
YmlsaXR5VGV4dENvbXBsZXRpb25BdHRyaWJ1dGUsIEBZRVMsIHJhbmdlKTsKKyAgICAgICAgZm9y
IChhdXRvJiBhbm5vdGF0aW9uUmFuZ2UgOiBpdC0+dmFsdWUpIHsKKyAgICAgICAgICAgIGF1dG8g
aW50ZXJzZWN0aW9uUmFuZ2UgPSBOU0ludGVyc2VjdGlvblJhbmdlKHRleHRSYW5nZSwgYW5ub3Rh
dGlvblJhbmdlKTsKKyAgICAgICAgICAgIGlmIChpbnRlcnNlY3Rpb25SYW5nZS5sZW5ndGgpIHsK
KyAgICAgICAgICAgICAgICBhdXRvIGNvbXBsZXRpb25SYW5nZSA9IE5TTWFrZVJhbmdlKGludGVy
c2VjdGlvblJhbmdlLmxvY2F0aW9uIC0gdGV4dFJhbmdlLmxvY2F0aW9uLCBpbnRlcnNlY3Rpb25S
YW5nZS5sZW5ndGgpOworICAgICAgICAgICAgICAgIGF0dHJpYnV0ZWRTdHJpbmdTZXROdW1iZXIo
YXR0clN0cmluZywgTlNBY2Nlc3NpYmlsaXR5VGV4dENvbXBsZXRpb25BdHRyaWJ1dGUsIEBZRVMs
IGNvbXBsZXRpb25SYW5nZSk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAjZWxz
ZQogICAgIFVOVVNFRF9QQVJBTShhdHRyU3RyaW5nKTsKICAgICBVTlVTRURfUEFSQU0obm9kZSk7
CisgICAgVU5VU0VEX1BBUkFNKHRleHRTaW1wbGVSYW5nZSk7CiAjZW5kaWYKIH0KIApAQCAtNzE0
LDcgKzcyMSw3IEBAIHZvaWQgYXR0cmlidXRlZFN0cmluZ1NldFNwZWxsaW5nKE5TTXV0YWJsZUF0
dHJpYnV0ZWRTdHJpbmcgKmF0dHJTdHJpbmcsIE5vZGUmIG5vCiAgICAgfQogfQogCi1SZXRhaW5Q
dHI8TlNBdHRyaWJ1dGVkU3RyaW5nPiBhdHRyaWJ1dGVkU3RyaW5nQ3JlYXRlKE5vZGUqIG5vZGUs
IFN0cmluZ1ZpZXcgdGV4dCwgQVhDb3JlT2JqZWN0OjpTcGVsbENoZWNrIHNwZWxsQ2hlY2spCitS
ZXRhaW5QdHI8TlNBdHRyaWJ1dGVkU3RyaW5nPiBhdHRyaWJ1dGVkU3RyaW5nQ3JlYXRlKE5vZGUq
IG5vZGUsIFN0cmluZ1ZpZXcgdGV4dCwgY29uc3QgU2ltcGxlUmFuZ2UmIHRleHRSYW5nZSwgQVhD
b3JlT2JqZWN0OjpTcGVsbENoZWNrIHNwZWxsQ2hlY2spCiB7CiAgICAgaWYgKCFub2RlIHx8ICF0
ZXh0Lmxlbmd0aCgpKQogICAgICAgICByZXR1cm4gbmlsOwpAQCAtNzMzLDcgKzc0MCw3IEBAIFJl
dGFpblB0cjxOU0F0dHJpYnV0ZWRTdHJpbmc+IGF0dHJpYnV0ZWRTdHJpbmdDcmVhdGUoTm9kZSog
bm9kZSwgU3RyaW5nVmlldyB0ZXh0CiAgICAgYXR0cmlidXRlZFN0cmluZ1NldEJsb2NrcXVvdGVM
ZXZlbChyZXN1bHQuZ2V0KCksIHJlbmRlcmVyLmdldCgpLCByYW5nZSk7CiAgICAgYXR0cmlidXRl
ZFN0cmluZ1NldEV4cGFuZGVkVGV4dChyZXN1bHQuZ2V0KCksIHJlbmRlcmVyLmdldCgpLCByYW5n
ZSk7CiAgICAgYXR0cmlidXRlZFN0cmluZ1NldEVsZW1lbnQocmVzdWx0LmdldCgpLCBOU0FjY2Vz
c2liaWxpdHlMaW5rVGV4dEF0dHJpYnV0ZSwgQWNjZXNzaWJpbGl0eU9iamVjdDo6YW5jaG9yRWxl
bWVudEZvck5vZGUobm9kZSksIHJhbmdlKTsKLSAgICBhdHRyaWJ1dGVkU3RyaW5nU2V0Q29tcG9z
aXRpb25BdHRyaWJ1dGVzKHJlc3VsdC5nZXQoKSwgKm5vZGUpOworICAgIGF0dHJpYnV0ZWRTdHJp
bmdTZXRDb21wb3NpdGlvbkF0dHJpYnV0ZXMocmVzdWx0LmdldCgpLCAqbm9kZSwgdGV4dFJhbmdl
KTsKICAgICAvLyBEbyBzcGVsbGluZyBsYXN0IGJlY2F1c2UgaXQgdGVuZHMgdG8gYnJlYWsgdXAg
dGhlIHJhbmdlLgogICAgIGlmIChzcGVsbENoZWNrID09IEFYQ29yZU9iamVjdDo6U3BlbGxDaGVj
azo6WWVzKSB7CiAgICAgICAgIGlmIChBWE9iamVjdENhY2hlOjpzaG91bGRTcGVsbENoZWNrKCkp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3Np
YmlsaXR5T2JqZWN0V3JhcHBlckJhc2UuaCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
bWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQmFzZS5oCmluZGV4IDJjNjA2NTFkZTQ2
OC4uYWYwMmViN2RlNTJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckJhc2UuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckJhc2Uu
aApAQCAtNTMsNyArNTMsNyBAQCB2b2lkIGF0dHJpYnV0ZWRTdHJpbmdTZXROdW1iZXIoTlNNdXRh
YmxlQXR0cmlidXRlZFN0cmluZyAqLCBOU1N0cmluZyAqLCBOU051bWJlcgogdm9pZCBhdHRyaWJ1
dGVkU3RyaW5nU2V0Rm9udChOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nICosIENURm9udFJlZiwg
Y29uc3QgTlNSYW5nZSYpOwogdm9pZCBhdHRyaWJ1dGVkU3RyaW5nU2V0U3BlbGxpbmcoTlNNdXRh
YmxlQXR0cmlidXRlZFN0cmluZyAqLCBOb2RlJiwgU3RyaW5nVmlldywgY29uc3QgTlNSYW5nZSYp
Owogdm9pZCBhdHRyaWJ1dGVkU3RyaW5nU2V0TmVlZHNTcGVsbENoZWNrKE5TTXV0YWJsZUF0dHJp
YnV0ZWRTdHJpbmcgKiwgTm9kZSYpOwotUmV0YWluUHRyPE5TQXR0cmlidXRlZFN0cmluZz4gYXR0
cmlidXRlZFN0cmluZ0NyZWF0ZShOb2RlKiwgU3RyaW5nVmlldywgQVhDb3JlT2JqZWN0OjpTcGVs
bENoZWNrKTsKK1JldGFpblB0cjxOU0F0dHJpYnV0ZWRTdHJpbmc+IGF0dHJpYnV0ZWRTdHJpbmdD
cmVhdGUoTm9kZSosIFN0cmluZ1ZpZXcsIGNvbnN0IFNpbXBsZVJhbmdlJiwgQVhDb3JlT2JqZWN0
OjpTcGVsbENoZWNrKTsKIH0KIAogQGludGVyZmFjZSBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3Jh
cHBlckJhc2UgOiBOU09iamVjdCB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbSBiL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFj
Lm1tCmluZGV4IDMwZTE5NTYyY2FiYi4uYzIxYTY1NGZjNTE3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1h
Yy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlck1hYy5tbQpAQCAtNDg3LDYgKzQ4NywxMCBAQCB1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKICNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5VGV4dElucHV0TWFya2VkUmFuZ2VB
dHRyaWJ1dGUgQCJBWFRleHRJbnB1dE1hcmtlZFJhbmdlIgogI2VuZGlmCiAKKyNpZm5kZWYgTlNB
Y2Nlc3NpYmlsaXR5VGV4dElucHV0TWFya2VkUmFuZ2VUZXh0TWFya2VyQXR0cmlidXRlCisjZGVm
aW5lIE5TQWNjZXNzaWJpbGl0eVRleHRJbnB1dE1hcmtlZFJhbmdlVGV4dE1hcmtlckF0dHJpYnV0
ZSBAIkFYVGV4dElucHV0TWFya2VkVGV4dE1hcmtlclJhbmdlIgorI2VuZGlmCisKIEBpbXBsZW1l
bnRhdGlvbiBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcgogCiAtICh2b2lkKWRldGFjaApA
QCAtOTE4LDYgKzkyMiw3IEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAog
ICAgICAgICBOU0FjY2Vzc2liaWxpdHlFZGl0YWJsZUFuY2VzdG9yQXR0cmlidXRlLAogICAgICAg
ICBOU0FjY2Vzc2liaWxpdHlIaWdoZXN0RWRpdGFibGVBbmNlc3RvckF0dHJpYnV0ZSwKICAgICAg
ICAgTlNBY2Nlc3NpYmlsaXR5VGV4dElucHV0TWFya2VkUmFuZ2VBdHRyaWJ1dGUsCisgICAgICAg
IE5TQWNjZXNzaWJpbGl0eVRleHRJbnB1dE1hcmtlZFJhbmdlVGV4dE1hcmtlckF0dHJpYnV0ZSwK
ICAgICBdOwogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZCBzcGluQnV0dG9uQ29tbW9uQXR0cmli
dXRlcyA9IFtdIHsKICAgICAgICAgYXV0byB0ZW1wQXJyYXkgPSBhZG9wdE5TKFtbTlNNdXRhYmxl
QXJyYXkgYWxsb2NdIGluaXRXaXRoQXJyYXk6YXR0cmlidXRlcy5nZXQoKS5nZXQoKV0pOwpAQCAt
MjI1Miw2ICsyMjU3LDkgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAg
ICAgICAgIHJldHVybiByYW5nZSA/IFtOU1ZhbHVlIHZhbHVlV2l0aFJhbmdlOipyYW5nZV0gOiBu
aWw7CiAgICAgfQogCisgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0Fj
Y2Vzc2liaWxpdHlUZXh0SW5wdXRNYXJrZWRSYW5nZVRleHRNYXJrZXJBdHRyaWJ1dGVdKQorICAg
ICAgICByZXR1cm4gKGlkKUFYVGV4dE1hcmtlclJhbmdlUmVmKGJhY2tpbmdPYmplY3QtPnRleHRJ
bnB1dE1hcmtlZFRleHRNYXJrZXJSYW5nZSgpKTsKKwogICAgIHJldHVybiBuaWw7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRWRpdG9yLmNwcAppbmRleCA2MjcxMmY0YTVkNDguLjU2ZjY2MDI2Y2RlMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcApAQCAtMjE4Myw3ICsyMTgzLDcgQEAgdm9pZCBF
ZGl0b3I6OnNldENvbXBvc2l0aW9uKGNvbnN0IFN0cmluZyYgdGV4dCwgU2V0Q29tcG9zaXRpb25N
b2RlIG1vZGUpCiAgICAgbV9jdXN0b21Db21wb3NpdGlvbkFubm90YXRpb25zLmNsZWFyKCk7CiAK
ICAgICBpZiAoYXV0byogY2FjaGUgPSBtX2RvY3VtZW50LmV4aXN0aW5nQVhPYmplY3RDYWNoZSgp
OyBjYWNoZSAmJiBwcmV2aW91c0NvbXBvc2l0aW9uTm9kZSkKLSAgICAgICAgY2FjaGUtPm9uVGV4
dENvbXBvc2l0aW9uQ2hhbmdlKCpwcmV2aW91c0NvbXBvc2l0aW9uTm9kZSk7CisgICAgICAgIGNh
Y2hlLT5vblRleHRDb21wb3NpdGlvbkNoYW5nZSgqcHJldmlvdXNDb21wb3NpdGlvbk5vZGUsIEFY
T2JqZWN0Q2FjaGU6OkNvbXBvc2l0aW9uU3RhdGU6OkVuZGVkLCBmYWxzZSk7CiAKICAgICBpZiAo
bV9kb2N1bWVudC5zZWxlY3Rpb24oKS5pc05vbmUoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjMy
NCwxMCArMjMyNCwxNCBAQCB2b2lkIEVkaXRvcjo6c2V0Q29tcG9zaXRpb24oY29uc3QgU3RyaW5n
JiB0ZXh0LCBjb25zdCBWZWN0b3I8Q29tcG9zaXRpb25VbmRlcmxpbgogCiAgICAgaWYgKGF1dG8q
IGNhY2hlID0gbV9kb2N1bWVudC5leGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSkgewogICAgICAgICBh
dXRvKiBjdXJyZW50Q29tcG9zaXRpb25Ob2RlID0gY29tcG9zaXRpb25Ob2RlKCk7Ci0gICAgICAg
IGlmIChwcmV2aW91c0NvbXBvc2l0aW9uTm9kZSAmJiBwcmV2aW91c0NvbXBvc2l0aW9uTm9kZSAh
PSBjdXJyZW50Q29tcG9zaXRpb25Ob2RlKQotICAgICAgICAgICAgY2FjaGUtPm9uVGV4dENvbXBv
c2l0aW9uQ2hhbmdlKCpwcmV2aW91c0NvbXBvc2l0aW9uTm9kZSk7Ci0gICAgICAgIGlmIChjdXJy
ZW50Q29tcG9zaXRpb25Ob2RlKQotICAgICAgICAgICAgY2FjaGUtPm9uVGV4dENvbXBvc2l0aW9u
Q2hhbmdlKCpjdXJyZW50Q29tcG9zaXRpb25Ob2RlKTsKKyAgICAgICAgaWYgKHByZXZpb3VzQ29t
cG9zaXRpb25Ob2RlICYmIHByZXZpb3VzQ29tcG9zaXRpb25Ob2RlICE9IGN1cnJlbnRDb21wb3Np
dGlvbk5vZGUpIHsKKyAgICAgICAgICAgIGF1dG8gc3RhdGUgPSBjdXJyZW50Q29tcG9zaXRpb25O
b2RlID8gQVhPYmplY3RDYWNoZTo6Q29tcG9zaXRpb25TdGF0ZTo6SW5Qcm9ncmVzcyA6IEFYT2Jq
ZWN0Q2FjaGU6OkNvbXBvc2l0aW9uU3RhdGU6OkVuZGVkOworICAgICAgICAgICAgY2FjaGUtPm9u
VGV4dENvbXBvc2l0aW9uQ2hhbmdlKCpwcmV2aW91c0NvbXBvc2l0aW9uTm9kZSwgc3RhdGUsIHRy
dWUpOworICAgICAgICB9CisgICAgICAgIGlmIChjdXJyZW50Q29tcG9zaXRpb25Ob2RlKSB7Cisg
ICAgICAgICAgICBhdXRvIHN0YXRlID0gcHJldmlvdXNDb21wb3NpdGlvbk5vZGUgPyBBWE9iamVj
dENhY2hlOjpDb21wb3NpdGlvblN0YXRlOjpJblByb2dyZXNzIDogQVhPYmplY3RDYWNoZTo6Q29t
cG9zaXRpb25TdGF0ZTo6U3RhcnRlZDsKKyAgICAgICAgICAgIGNhY2hlLT5vblRleHRDb21wb3Np
dGlvbkNoYW5nZSgqY3VycmVudENvbXBvc2l0aW9uTm9kZSwgc3RhdGUsIHRydWUpOworICAgICAg
ICB9CiAgICAgfQogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkgICAgICAgIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAKaW5kZXggYzc4OWRmNmI4ZDBkLi5kMzViMzEw
MTQ4OGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcApAQCAtMjUy
LDcgKzI1MiwxMCBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydFRleHQoRG9jdW1lbnQmIGRv
Y3VtZW50LCBjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFZpcwogICAgICAgICBsYXN0VHlwaW5n
Q29tbWFuZC0+c2V0Q29tcG9zaXRpb25UeXBlKGNvbXBvc2l0aW9uVHlwZSk7CiAgICAgICAgIGxh
c3RUeXBpbmdDb21tYW5kLT5zZXRTaG91bGRSZXRhaW5BdXRvY29ycmVjdGlvbkluZGljYXRvcihv
cHRpb25zLmNvbnRhaW5zKE9wdGlvbjo6UmV0YWluQXV0b2NvcnJlY3Rpb25JbmRpY2F0b3IpKTsK
ICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldFNob3VsZFByZXZlbnRTcGVsbENoZWNraW5n
KG9wdGlvbnMuY29udGFpbnMoT3B0aW9uOjpQcmV2ZW50U3BlbGxDaGVja2luZykpOwotICAgICAg
ICBsYXN0VHlwaW5nQ29tbWFuZC0+aW5zZXJ0VGV4dEFuZE5vdGlmeUFjY2Vzc2liaWxpdHkobmV3
VGV4dCwgb3B0aW9ucy5jb250YWlucyhPcHRpb246OlNlbGVjdEluc2VydGVkVGV4dCkpOworICAg
ICAgICBpZiAoY29tcG9zaXRpb25UeXBlID09IFRleHRDb21wb3NpdGlvblR5cGU6Ok5vbmUpCisg
ICAgICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+aW5zZXJ0VGV4dEFuZE5vdGlmeUFjY2Vzc2li
aWxpdHkobmV3VGV4dCwgb3B0aW9ucy5jb250YWlucyhPcHRpb246OlNlbGVjdEluc2VydGVkVGV4
dCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+aW5zZXJ0
VGV4dChuZXdUZXh0LCBvcHRpb25zLmNvbnRhaW5zKE9wdGlvbjo6U2VsZWN0SW5zZXJ0ZWRUZXh0
KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUv
QWNjZXNzaWJpbGl0eVVJRWxlbWVudC5jcHAKaW5kZXggMjdiY2JkYTllNzU4Li44Y2NiMjM0MDJk
ZDcgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlVSUVsZW1l
bnQuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQu
Y3BwCkBAIC04NDYsNiArODQ2LDExIEBAIHN0YXRpYyBKU1ZhbHVlUmVmIGluc2VydFRleHRDYWxs
YmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sCiAgICAgcmV0
dXJuIEpTVmFsdWVNYWtlQm9vbGVhbihjb250ZXh0LCB0b0FYRWxlbWVudCh0aGlzT2JqZWN0KS0+
aW5zZXJ0VGV4dCh0ZXh0LmdldCgpKSk7CiB9CiAKK3N0YXRpYyBKU1ZhbHVlUmVmIHRleHRJbnB1
dE1hcmtlZFRleHRNYXJrZXJSYW5nZUNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09i
amVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50
Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlv
bikKK3sKKyAgICByZXR1cm4gQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZTo6bWFrZUpTQWNj
ZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZShjb250ZXh0LCB0b0FYRWxlbWVudCh0aGlzT2JqZWN0
KS0+dGV4dElucHV0TWFya2VkVGV4dE1hcmtlclJhbmdlKCkpOworfQorCiBzdGF0aWMgSlNWYWx1
ZVJlZiBhdHRyaWJ1dGVkU3RyaW5nRm9yVGV4dE1hcmtlclJhbmdlQ29udGFpbnNBdHRyaWJ1dGVD
YWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2Jq
ZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVm
IGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7CiAgICAgQWNjZXNzaWJpbGl0
eVRleHRNYXJrZXJSYW5nZSogbWFya2VyUmFuZ2UgPSAwOwpAQCAtMTc3OSw2ICsxNzg0LDExIEBA
IGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aW5zZXJ0VGV4dChKU1N0cmluZ1JlZikKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKK0FjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2UgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6dGV4dElucHV0TWFya2VkVGV4dE1hcmtlclJhbmdlKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwogaW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OnRleHRNYXJrZXJSYW5nZUxlbmd0aChBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlKikKIHsK
ICAgICByZXR1cm4gMDsKQEAgLTIxMzMsNiArMjE0Myw3IEBAIEpTQ2xhc3NSZWYgQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6Z2V0SlNDbGFzcygpCiAgICAgICAgIHsgIm1pc3NwZWxsaW5nVGV4dE1h
cmtlclJhbmdlIiwgbWlzc3BlbGxpbmdUZXh0TWFya2VyUmFuZ2VDYWxsYmFjaywga0pTUHJvcGVy
dHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAog
ICAgICAgICB7ICJ0ZXh0TWFya2VyUmFuZ2VGb3JFbGVtZW50IiwgdGV4dE1hcmtlclJhbmdlRm9y
RWxlbWVudENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVy
dHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgInNlbGVjdGVkVGV4dE1hcmtlclJh
bmdlIiwgc2VsZWN0ZWRUZXh0TWFya2VyUmFuZ2VDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1
dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7
ICJ0ZXh0SW5wdXRNYXJrZWRUZXh0TWFya2VyUmFuZ2UiLCB0ZXh0SW5wdXRNYXJrZWRUZXh0TWFy
a2VyUmFuZ2VDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3Bl
cnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7ICJyZXNldFNlbGVjdGVkVGV4dE1h
cmtlclJhbmdlIiwgcmVzZXRTZWxlY3RlZFRleHRNYXJrZXJSYW5nZUNhbGxiYWNrLCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0s
CiAgICAgICAgIHsgInJlcGxhY2VUZXh0SW5SYW5nZSIsIHJlcGxhY2VUZXh0SW5SYW5nZUNhbGxi
YWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVE
b250RGVsZXRlIH0sCiAgICAgICAgIHsgImluc2VydFRleHQiLCBpbnNlcnRUZXh0Q2FsbGJhY2ss
IGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnRE
ZWxldGUgfSwKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlV
SUVsZW1lbnQuaCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQu
aAppbmRleCA0ZGY5NzA5ZTRhOGYuLmFkODc0YmRmMjYxMyAxMDA2NDQKLS0tIGEvVG9vbHMvRHVt
cFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oCisrKyBiL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaApAQCAtMzAwLDYgKzMwMCw3IEBAIHB1Ymxp
YzoKICAgICBib29sIHNldFNlbGVjdGVkVGV4dE1hcmtlclJhbmdlKEFjY2Vzc2liaWxpdHlUZXh0
TWFya2VyUmFuZ2UqKTsKICAgICBib29sIHJlcGxhY2VUZXh0SW5SYW5nZShKU1N0cmluZ1JlZiwg
aW50IHBvc2l0aW9uLCBpbnQgbGVuZ3RoKTsKICAgICBib29sIGluc2VydFRleHQoSlNTdHJpbmdS
ZWYpOworICAgIEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2UgdGV4dElucHV0TWFya2VkVGV4
dE1hcmtlclJhbmdlKCkgY29uc3Q7CiAKICAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gc3Ry
aW5nRm9yVGV4dE1hcmtlclJhbmdlKEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2UqKTsKICAg
ICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gYXR0cmlidXRlZFN0cmluZ0ZvclRleHRNYXJrZXJS
YW5nZShBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlKik7CmRpZmYgLS1naXQgYS9Ub29scy9E
dW1wUmVuZGVyVHJlZS9pb3MvQWNjZXNzaWJpbGl0eVVJRWxlbWVudElPUy5tbSBiL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL2lvcy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50SU9TLm1tCmluZGV4IDBmY2E0
ODk0YWZlZC4uOGQ3NjgyODhhZGI1IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9p
b3MvQWNjZXNzaWJpbGl0eVVJRWxlbWVudElPUy5tbQorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJl
ZS9pb3MvQWNjZXNzaWJpbGl0eVVJRWxlbWVudElPUy5tbQpAQCAtNDk5LDYgKzQ5OSwxMSBAQCB2
b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJlc2V0U2VsZWN0ZWRUZXh0TWFya2VyUmFuZ2Uo
KQogewogfQogCitBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlIEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OnRleHRJbnB1dE1hcmtlZFRleHRNYXJrZXJSYW5nZSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG51bGxwdHI7Cit9CisKIGludCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0ZXh0TWFya2Vy
UmFuZ2VMZW5ndGgoQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZSogcmFuZ2UpCiB7CiAgICAg
aWQgdGV4dE1hcmtlcnMgPSByYW5nZS0+cGxhdGZvcm1UZXh0TWFya2VyUmFuZ2UoKTsKZGlmZiAt
LWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFj
Lm1tIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRNYWMu
bW0KaW5kZXggNGFlNDY5ODY1NDQ0Li4xOThmNGY2MzJhOGEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tCisrKyBiL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tCkBAIC03OSw2
ICs3OSwxMCBAQAogI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlUZXh0SW5wdXRNYXJrZWRSYW5nZUF0
dHJpYnV0ZSBAIkFYVGV4dElucHV0TWFya2VkUmFuZ2UiCiAjZW5kaWYKIAorI2lmbmRlZiBOU0Fj
Y2Vzc2liaWxpdHlUZXh0SW5wdXRNYXJrZWRUZXh0TWFya2VyUmFuZ2VBdHRyaWJ1dGUKKyNkZWZp
bmUgTlNBY2Nlc3NpYmlsaXR5VGV4dElucHV0TWFya2VkVGV4dE1hcmtlclJhbmdlQXR0cmlidXRl
IEAiQVhUZXh0SW5wdXRNYXJrZWRUZXh0TWFya2VyUmFuZ2UiCisjZW5kaWYKKwogdHlwZWRlZiB2
b2lkICgqQVhQb3N0ZWROb3RpZmljYXRpb25DYWxsYmFjaykoaWQgZWxlbWVudCwgTlNTdHJpbmcq
IG5vdGlmaWNhdGlvbiwgdm9pZCogY29udGV4dCk7CiAKIEBpbnRlcmZhY2UgTlNPYmplY3QgKFdl
YktpdEFjY2Vzc2liaWxpdHlBZGRpdGlvbnMpCkBAIC0xNzIsNyArMTc2LDkgQEAgc3RhdGljIE5T
U3RyaW5nKiBhdHRyaWJ1dGVzT2ZFbGVtZW50KGlkIGFjY2Vzc2liaWxpdHlPYmplY3QpCiAgICAg
ICAgIGlkIHZhbHVlT2JqZWN0ID0gW2FjY2Vzc2liaWxpdHlPYmplY3QgYWNjZXNzaWJpbGl0eUF0
dHJpYnV0ZVZhbHVlOmF0dHJpYnV0ZV07CiAgICAgICAgIE5TU3RyaW5nKiB2YWx1ZSA9IGRlc2Ny
aXB0aW9uT2ZWYWx1ZSh2YWx1ZU9iamVjdCwgYWNjZXNzaWJpbGl0eU9iamVjdCk7CiAKLSAgICAg
ICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVRleHRJbnB1
dE1hcmtlZFJhbmdlQXR0cmlidXRlXSAmJiAhdmFsdWUpCisgICAgICAgIGlmICghdmFsdWUKKyAg
ICAgICAgICAgICYmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlU
ZXh0SW5wdXRNYXJrZWRSYW5nZUF0dHJpYnV0ZV0KKyAgICAgICAgICAgICAgICB8fCBbYXR0cmli
dXRlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlUZXh0SW5wdXRNYXJrZWRUZXh0TWFy
a2VyUmFuZ2VBdHRyaWJ1dGVdKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIFth
dHRyaWJ1dGVzU3RyaW5nIGFwcGVuZEZvcm1hdDpAIiVAOiAlQFxuIiwgYXR0cmlidXRlLCB2YWx1
ZV07CkBAIC0xNzU5LDYgKzE3NjUsMTYgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpp
bnNlcnRUZXh0KEpTU3RyaW5nUmVmIHRleHQpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCitBY2Nl
c3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRleHRJbnB1
dE1hcmtlZFRleHRNYXJrZXJSYW5nZSgpIGNvbnN0Cit7CisgICAgQkVHSU5fQVhfT0JKQ19FWENF
UFRJT05TCisgICAgaWQgdGV4dE1hcmtlclJhbmdlID0gW21fZWxlbWVudCBhY2Nlc3NpYmlsaXR5
QXR0cmlidXRlVmFsdWU6TlNBY2Nlc3NpYmlsaXR5VGV4dElucHV0TWFya2VkVGV4dE1hcmtlclJh
bmdlQXR0cmlidXRlXTsKKyAgICByZXR1cm4gQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZSh0
ZXh0TWFya2VyUmFuZ2UpOworICAgIEVORF9BWF9PQkpDX0VYQ0VQVElPTlMKKworICAgIHJldHVy
biBudWxscHRyOworfQorCiBpbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGV4dE1hcmtlclJh
bmdlTGVuZ3RoKEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2UqIHJhbmdlKQogewogICAgIEJF
R0lOX0FYX09CSkNfRVhDRVBUSU9OUwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9JbmplY3RlZEJ1bmRsZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmNwcCBiL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5jcHAKaW5k
ZXggZWZmYTFiNTY1Nzk2Li5mMzg2MGFkNmVlNGEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5jcHAKKysrIGIv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9BY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50LmNwcApAQCAtMTA5LDYgKzEwOSw3IEBAIGludCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojps
aW5lSW5kZXhGb3JUZXh0TWFya2VyKEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyKikgY29uCiBSZWZQ
dHI8QWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZT4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
dGV4dE1hcmtlclJhbmdlRm9yUmFuZ2UodW5zaWduZWQsIHVuc2lnbmVkKSB7IHJldHVybiBudWxs
cHRyOyB9CiBSZWZQdHI8QWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZT4gQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6c2VsZWN0ZWRUZXh0TWFya2VyUmFuZ2UoKSB7IHJldHVybiBudWxscHRyOyB9
CiB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJlc2V0U2VsZWN0ZWRUZXh0TWFya2VyUmFu
Z2UoKSB7IH0KK1JlZlB0cjxBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlPiBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Ojp0ZXh0SW5wdXRNYXJrZWRUZXh0TWFya2VyUmFuZ2UoKSBjb25zdCB7IHJl
dHVybiBudWxscHRyOyB9CiB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNldEJvb2xBdHRy
aWJ1dGVWYWx1ZShKU1N0cmluZ1JlZiwgYm9vbCkgeyB9CiB2b2lkIEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OnNldFZhbHVlKEpTU3RyaW5nUmVmKSB7IH0KIEpTVmFsdWVSZWYgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6c2VhcmNoVGV4dFdpdGhDcml0ZXJpYShKU0NvbnRleHRSZWYsIEpTVmFsdWVS
ZWYsIEpTU3RyaW5nUmVmLCBKU1N0cmluZ1JlZikgeyByZXR1cm4gbnVsbHB0cjsgfQpkaWZmIC0t
Z2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9BY2Nlc3NpYmlsaXR5
VUlFbGVtZW50LmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0FjY2Vz
c2liaWxpdHlVSUVsZW1lbnQuaAppbmRleCA3Mzg0YjkxMTg4ZjAuLjQ0ZjNjNTcxODgxNCAxMDA2
NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9BY2Nlc3NpYmls
aXR5VUlFbGVtZW50LmgKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRs
ZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmgKQEAgLTMzOSw2ICszMzksNyBAQCBwdWJsaWM6CiAg
ICAgdm9pZCByZXNldFNlbGVjdGVkVGV4dE1hcmtlclJhbmdlKCk7CiAgICAgYm9vbCByZXBsYWNl
VGV4dEluUmFuZ2UoSlNTdHJpbmdSZWYsIGludCBwb3NpdGlvbiwgaW50IGxlbmd0aCk7CiAgICAg
Ym9vbCBpbnNlcnRUZXh0KEpTU3RyaW5nUmVmKTsKKyAgICBSZWZQdHI8QWNjZXNzaWJpbGl0eVRl
eHRNYXJrZXJSYW5nZT4gdGV4dElucHV0TWFya2VkVGV4dE1hcmtlclJhbmdlKCkgY29uc3Q7CiAg
ICAgUmVmUHRyPEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyPiBzdGFydFRleHRNYXJrZXJGb3JUZXh0
TWFya2VyUmFuZ2UoQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZSopOwogICAgIFJlZlB0cjxB
Y2Nlc3NpYmlsaXR5VGV4dE1hcmtlcj4gZW5kVGV4dE1hcmtlckZvclRleHRNYXJrZXJSYW5nZShB
Y2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlKik7CiAgICAgUmVmUHRyPEFjY2Vzc2liaWxpdHlU
ZXh0TWFya2VyPiBlbmRUZXh0TWFya2VyRm9yQm91bmRzKGludCB4LCBpbnQgeSwgaW50IHdpZHRo
LCBpbnQgaGVpZ2h0KTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0
ZWRCdW5kbGUvQmluZGluZ3MvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5pZGwgYi9Ub29scy9XZWJL
aXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL0FjY2Vzc2liaWxpdHlVSUVsZW1l
bnQuaWRsCmluZGV4IGIxMDI5ZDMxNjZlOC4uOTIyZTEyNDJjY2MwIDEwMDY0NAotLS0gYS9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL0FjY2Vzc2liaWxpdHlV
SUVsZW1lbnQuaWRsCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUv
QmluZGluZ3MvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5pZGwKQEAgLTI0MSw2ICsyNDEsNyBAQAog
ICAgIHVuZGVmaW5lZCByZXNldFNlbGVjdGVkVGV4dE1hcmtlclJhbmdlKCk7CiAgICAgYm9vbGVh
biByZXBsYWNlVGV4dEluUmFuZ2UoRE9NU3RyaW5nIHN0cmluZywgbG9uZyBwb3NpdGlvbiwgbG9u
ZyBsZW5ndGgpOwogICAgIGJvb2xlYW4gaW5zZXJ0VGV4dChET01TdHJpbmcgdGV4dCk7CisgICAg
QWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZSB0ZXh0SW5wdXRNYXJrZWRUZXh0TWFya2VyUmFu
Z2UoKTsKICAgICBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciBzdGFydFRleHRNYXJrZXJGb3JUZXh0
TWFya2VyUmFuZ2UoQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZSByYW5nZSk7CiAgICAgQWNj
ZXNzaWJpbGl0eVRleHRNYXJrZXIgZW5kVGV4dE1hcmtlckZvclRleHRNYXJrZXJSYW5nZShBY2Nl
c3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlIHJhbmdlKTsKICAgICBBY2Nlc3NpYmlsaXR5VGV4dE1h
cmtlciBlbmRUZXh0TWFya2VyRm9yQm91bmRzKGxvbmcgeCwgbG9uZyB5LCBsb25nIHdpZHRoLCBs
b25nIGhlaWdodCk7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVk
QnVuZGxlL21hYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tIGIvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0eVVJRWxlbWVudE1hYy5tbQpp
bmRleCAyYjQzZWVmM2JiNjguLjIxOWI3YTk1MzI4NCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0eVVJRWxlbWVudE1hYy5t
bQorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL21hYy9BY2Nlc3Np
YmlsaXR5VUlFbGVtZW50TWFjLm1tCkBAIC04NSw2ICs4NSwxMCBAQAogI2RlZmluZSBOU0FjY2Vz
c2liaWxpdHlUZXh0SW5wdXRNYXJrZWRSYW5nZUF0dHJpYnV0ZSBAIkFYVGV4dElucHV0TWFya2Vk
UmFuZ2UiCiAjZW5kaWYKIAorI2lmbmRlZiBOU0FjY2Vzc2liaWxpdHlUZXh0SW5wdXRNYXJrZWRU
ZXh0TWFya2VyUmFuZ2VBdHRyaWJ1dGUKKyNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5VGV4dElucHV0
TWFya2VkVGV4dE1hcmtlclJhbmdlQXR0cmlidXRlIEAiQVhUZXh0SW5wdXRNYXJrZWRUZXh0TWFy
a2VyUmFuZ2UiCisjZW5kaWYKKwogdHlwZWRlZiB2b2lkICgqQVhQb3N0ZWROb3RpZmljYXRpb25D
YWxsYmFjaykoaWQgZWxlbWVudCwgTlNTdHJpbmcqIG5vdGlmaWNhdGlvbiwgdm9pZCogY29udGV4
dCk7CiAKIEBpbnRlcmZhY2UgTlNPYmplY3QgKFdlYktpdEFjY2Vzc2liaWxpdHlBZGRpdGlvbnMp
CkBAIC02MzMsNyArNjM3LDkgQEAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmFsbEF0dHJpYnV0ZXMoKQogCiAgICAgICAgIGF1dG8gdmFsdWUgPSBkZXNj
cmlwdGlvbk9mVmFsdWUoYXR0cmlidXRlVmFsdWUoYXR0cmlidXRlKS5nZXQoKSk7CiAKLSAgICAg
ICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVRleHRJbnB1
dE1hcmtlZFJhbmdlQXR0cmlidXRlXSAmJiAhdmFsdWUpCisgICAgICAgIGlmICghdmFsdWUKKyAg
ICAgICAgICAgICYmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlU
ZXh0SW5wdXRNYXJrZWRSYW5nZUF0dHJpYnV0ZV0KKyAgICAgICAgICAgICAgICB8fCBbYXR0cmli
dXRlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlUZXh0SW5wdXRNYXJrZWRUZXh0TWFy
a2VyUmFuZ2VBdHRyaWJ1dGVdKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIFt2
YWx1ZXMgYXBwZW5kRm9ybWF0OkAiJUA6ICVAXG4iLCBhdHRyaWJ1dGUsIHZhbHVlLmdldCgpXTsK
QEAgLTIwMTIsNiArMjAxOCwxNiBAQCB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJlc2V0
U2VsZWN0ZWRUZXh0TWFya2VyUmFuZ2UoKQogICAgIHNldEF0dHJpYnV0ZVZhbHVlKG1fZWxlbWVu
dC5nZXRBdXRvcmVsZWFzZWQoKSwgTlNBY2Nlc3NpYmlsaXR5U2VsZWN0ZWRUZXh0TWFya2VyUmFu
Z2VBdHRyaWJ1dGUsIHRleHRNYXJrZXJSYW5nZS5nZXQoKSwgdHJ1ZSk7CiB9CiAKK1JlZlB0cjxB
Y2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0ZXh0
SW5wdXRNYXJrZWRUZXh0TWFya2VyUmFuZ2UoKSBjb25zdAoreworICAgIEJFR0lOX0FYX09CSkNf
RVhDRVBUSU9OUworICAgIGF1dG8gdGV4dE1hcmtlclJhbmdlID0gYXR0cmlidXRlVmFsdWUoTlNB
Y2Nlc3NpYmlsaXR5VGV4dElucHV0TWFya2VkVGV4dE1hcmtlclJhbmdlQXR0cmlidXRlKTsKKyAg
ICByZXR1cm4gQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZTo6Y3JlYXRlKHRleHRNYXJrZXJS
YW5nZS5nZXQoKSk7CisgICAgRU5EX0FYX09CSkNfRVhDRVBUSU9OUworCisgICAgcmV0dXJuIG51
bGxwdHI7Cit9CisKIFJlZlB0cjxBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcj4gQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6c3RhcnRUZXh0TWFya2VyRm9yVGV4dE1hcmtlclJhbmdlKEFjY2Vzc2liaWxp
dHlUZXh0TWFya2VyUmFuZ2UqIHJhbmdlKQogewogICAgIGlmICghcmFuZ2UpCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy9hdHRyaWJ1dGVkLXN0cmluZy9hdHRyaWJ1
dGVkLXN0cmluZy1oYXMtY29tcGxldGlvbi1hbm5vdGF0aW9uLmh0bWwgYi9MYXlvdXRUZXN0cy9h
Y2Nlc3NpYmlsaXR5L21hYy9hdHRyaWJ1dGVkLXN0cmluZy9hdHRyaWJ1dGVkLXN0cmluZy1oYXMt
Y29tcGxldGlvbi1hbm5vdGF0aW9uLmh0bWwKaW5kZXggNzZlNGUyM2RiNWUyLi5mNTAwZmUwZjUy
N2UgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL2F0dHJpYnV0ZWQt
c3RyaW5nL2F0dHJpYnV0ZWQtc3RyaW5nLWhhcy1jb21wbGV0aW9uLWFubm90YXRpb24uaHRtbAor
KysgYi9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy9hdHRyaWJ1dGVkLXN0cmluZy9hdHRy
aWJ1dGVkLXN0cmluZy1oYXMtY29tcGxldGlvbi1hbm5vdGF0aW9uLmh0bWwKQEAgLTEzLDE1ICsx
MywxNyBAQAogICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxl
ci5hY2Nlc3NpYmxlRWxlbWVudEJ5SWQoImVkaXRhYmxlIik7CiAKICAgICAgICAgICAgIC8vIFRl
c3Qgd2l0aCBjb21wb3NpdGlvbiBhbmQgbm8gYXR0cmlidXRlcwotICAgICAgICAgICAgdGV4dElu
cHV0Q29udHJvbGxlci5zZXRNYXJrZWRUZXh0KCJ0ZXN0aW5nIik7Ci0gICAgICAgICAgICB2YXIg
YXR0clN0cmluZyA9IGVsZW1lbnQuYXR0cmlidXRlZFN0cmluZ0ZvclJhbmdlKDAsIDcpOworICAg
ICAgICAgICAgdGV4dElucHV0Q29udHJvbGxlci5zZXRNYXJrZWRUZXh0KCJ0ZXN0Iik7CisgICAg
ICAgICAgICB2YXIgYXR0clN0cmluZyA9IGVsZW1lbnQuYXR0cmlidXRlZFN0cmluZ0ZvclJhbmdl
KDAsIDQpOwogICAgICAgICAgICAgc2hvdWxkQmUoImF0dHJTdHJpbmcuaW5kZXhPZignQVhUZXh0
Q29tcGxldGlvbiA9IDEnKSIsICItMSIpOwogCiAgICAgICAgICAgICAvLyBUZXN0IHdpdGggY29t
cG9zaXRpb24gYW5kIGF0dHJpYnV0ZXMKLSAgICAgICAgICAgIHRleHRJbnB1dENvbnRyb2xsZXIu
c2V0TWFya2VkVGV4dCgiZmF2b3JpdGUiLCAwLCA4LCBmYWxzZSwgdW5kZWZpbmVkLCBbCi0gICAg
ICAgICAgICAgICAgeyBmcm9tOiAiNCIsIGxlbmd0aDogIjQiLCBhbm5vdGF0aW9uOiAiTlNUZXh0
Q29tcGxldGlvbiIgfQorICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9ICIgbWVzc2FnZSI7Cisg
ICAgICAgICAgICB0ZXh0SW5wdXRDb250cm9sbGVyLnVubWFya1RleHQoKTsKKyAgICAgICAgICAg
IHRleHRJbnB1dENvbnRyb2xsZXIuc2V0TWFya2VkVGV4dChtZXNzYWdlLCA0LCBtZXNzYWdlLmxl
bmd0aCwgZmFsc2UsIHVuZGVmaW5lZCwgWworICAgICAgICAgICAgICAgIHsgZnJvbTogIjQiLCBs
ZW5ndGg6IG1lc3NhZ2UubGVuZ3RoLCBhbm5vdGF0aW9uOiAiTlNUZXh0Q29tcGxldGlvbiIgfQog
ICAgICAgICAgICAgXSk7Ci0gICAgICAgICAgICBhdHRyU3RyaW5nID0gZWxlbWVudC5hdHRyaWJ1
dGVkU3RyaW5nRm9yUmFuZ2UoMCwgOCk7CisgICAgICAgICAgICBhdHRyU3RyaW5nID0gZWxlbWVu
dC5hdHRyaWJ1dGVkU3RyaW5nRm9yUmFuZ2UoMCwgNCArIG1lc3NhZ2UubGVuZ3RoKTsKICAgICAg
ICAgICAgIHNob3VsZEJlVHJ1ZSgiYXR0clN0cmluZy5pbmRleE9mKCdBWFRleHRDb21wbGV0aW9u
ID0gMScpICE9IC0xIik7CiAgICAgICAgIH0KICAgICA8L3NjcmlwdD4KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL3RleHQtaW5wdXQtbWFya2VkLXJhbmdlLWV4cGVj
dGVkLnR4dCBiL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL3RleHQtaW5wdXQtbWFya2Vk
LXJhbmdlLWV4cGVjdGVkLnR4dAppbmRleCAxMzMwMjZhMjg5ODMuLjQ2NWY4MzVjNGYwNiAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvdGV4dC1pbnB1dC1tYXJrZWQt
cmFuZ2UtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL3Rl
eHQtaW5wdXQtbWFya2VkLXJhbmdlLWV4cGVjdGVkLnR4dApAQCAtNiw3ICs2LDcgQEAgT24gc3Vj
Y2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQg
YnkgIlRFU1QgQ09NUExFVEUKIFBBU1MgIWVsZW1lbnQudGV4dElucHV0TWFya2VkUmFuZ2UgaXMg
dHJ1ZQogUEFTUyBlbGVtZW50LnRleHRJbnB1dE1hcmtlZFJhbmdlIGlzICd7MCwgNH0nCiBQQVNT
ICFlbGVtZW50LnRleHRJbnB1dE1hcmtlZFJhbmdlIGlzIHRydWUKLVBBU1MgZWxlbWVudC50ZXh0
SW5wdXRNYXJrZWRSYW5nZSBpcyAnezAsIDV9JworUEFTUyBlbGVtZW50LnRleHRJbnB1dE1hcmtl
ZFJhbmdlIGlzICd7MSwgNX0nCiBQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCiAKIFRF
U1QgQ09NUExFVEUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL3Rl
eHQtaW5wdXQtbWFya2VkLXJhbmdlLmh0bWwgYi9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21h
Yy90ZXh0LWlucHV0LW1hcmtlZC1yYW5nZS5odG1sCmluZGV4IDhlOThkNjBiMzZiMi4uMzgwNDA1
NGNmZWFlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy90ZXh0LWlu
cHV0LW1hcmtlZC1yYW5nZS5odG1sCisrKyBiL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFj
L3RleHQtaW5wdXQtbWFya2VkLXJhbmdlLmh0bWwKQEAgLTExLDEyICsxMSwxNSBAQAogICAgICAg
ICBpZiAod2luZG93LnRleHRJbnB1dENvbnRyb2xsZXIgJiYgd2luZG93LmFjY2Vzc2liaWxpdHlD
b250cm9sbGVyKSB7CiAgICAgICAgICAgICB2YXIgZWxlbWVudCA9IGFjY2Vzc2liaWxpdHlDb250
cm9sbGVyLmFjY2Vzc2libGVFbGVtZW50QnlJZCgiZWRpdGFibGUiKTsKICAgICAgICAgICAgIHNo
b3VsZEJlVHJ1ZSgiIWVsZW1lbnQudGV4dElucHV0TWFya2VkUmFuZ2UiKTsKKyAgICAgICAgICAg
IAogICAgICAgICAgICAgdGV4dElucHV0Q29udHJvbGxlci5zZXRNYXJrZWRUZXh0KCJ0ZXN0Iiwg
MSwgMCk7CiAgICAgICAgICAgICBzaG91bGRCZSgiZWxlbWVudC50ZXh0SW5wdXRNYXJrZWRSYW5n
ZSIsICInezAsIDR9JyIpOworICAgICAgICAgICAgCiAgICAgICAgICAgICB0ZXh0SW5wdXRDb250
cm9sbGVyLmluc2VydFRleHQoInQiKTsKICAgICAgICAgICAgIHNob3VsZEJlVHJ1ZSgiIWVsZW1l
bnQudGV4dElucHV0TWFya2VkUmFuZ2UiKTsKKyAgICAgICAgICAgIAogICAgICAgICAgICAgdGV4
dElucHV0Q29udHJvbGxlci5zZXRNYXJrZWRUZXh0KCJ0ZXN0MiIsIDEsIDApOwotICAgICAgICAg
ICAgc2hvdWxkQmUoImVsZW1lbnQudGV4dElucHV0TWFya2VkUmFuZ2UiLCAiJ3swLCA1fSciKTsK
KyAgICAgICAgICAgIHNob3VsZEJlKCJlbGVtZW50LnRleHRJbnB1dE1hcmtlZFJhbmdlIiwgIid7
MSwgNX0nIik7CiAgICAgICAgIH0KICAgICA8L3NjcmlwdD4KIDwvYm9keT4KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL3RleHQtaW5wdXQtbWFya2VkLXRleHQtbWFy
a2VyLXJhbmdlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL3Rl
eHQtaW5wdXQtbWFya2VkLXRleHQtbWFya2VyLXJhbmdlLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmVkYzIxNjEyZDk3OAotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL3RleHQtaW5wdXQtbWFya2VkLXRl
eHQtbWFya2VyLXJhbmdlLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDE1IEBACitUaGlzIHRlc3Qg
ZW5zdXJlcyB0aGF0IHRoZSBpbnB1dCBtZXRob2QgbWFya2VkIHJhbmdlIGlzIGF2YWlsYWJsZSB0
byBhY2Nlc3NpYmlsaXR5IGNsaWVudHMgYXMgdGV4dCBtYXJrZXIgcmFuZ2UuCisKK09uIHN1Y2Nl
c3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5
ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIHRleHQgaXMgJycKK1BBU1MgdGV4dCBpcyAndGVz
dCcKK1BBU1MgdGV4dCBpcyAnJworUEFTUyBlbGVtZW50LnN0cmluZ1ZhbHVlIGlzICdBWFZhbHVl
OiB0ZXN0JworUEFTUyB0ZXh0IGlzICcgbWVzc2FnZScKK1BBU1MgZWxlbWVudC5zdHJpbmdWYWx1
ZSBpcyAnQVhWYWx1ZTogdGVzdCBtZXNzYWdlJworUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMg
dHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2FjY2Vzc2li
aWxpdHkvbWFjL3RleHQtaW5wdXQtbWFya2VkLXRleHQtbWFya2VyLXJhbmdlLmh0bWwgYi9MYXlv
dXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy90ZXh0LWlucHV0LW1hcmtlZC10ZXh0LW1hcmtlci1y
YW5nZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNzEwYmI3
ZjM5YjY3Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMv
dGV4dC1pbnB1dC1tYXJrZWQtdGV4dC1tYXJrZXItcmFuZ2UuaHRtbApAQCAtMCwwICsxLDMzIEBA
Cis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+CisgICAgPHNjcmlwdCBzcmM9Ii4uLy4u
L3Jlc291cmNlcy9qcy10ZXN0LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorICAgIDxp
bnB1dCBpZD0iZWRpdGFibGUiIHR5cGU9InRleHQiPgorICAgIDxzY3JpcHQgdHlwZT0idGV4dC9q
YXZhc2NyaXB0Ij4KKyAgICAgICAgZGVzY3JpcHRpb24oIlRoaXMgdGVzdCBlbnN1cmVzIHRoYXQg
dGhlIGlucHV0IG1ldGhvZCBtYXJrZWQgcmFuZ2UgaXMgYXZhaWxhYmxlIHRvIGFjY2Vzc2liaWxp
dHkgY2xpZW50cyBhcyB0ZXh0IG1hcmtlciByYW5nZS4iKTsKKyAgICAgICAgZWRpdGFibGUuZm9j
dXMoKTsKKyAgICAgICAgaWYgKHdpbmRvdy50ZXh0SW5wdXRDb250cm9sbGVyICYmIHdpbmRvdy5h
Y2Nlc3NpYmlsaXR5Q29udHJvbGxlcikgeworICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSBhY2Nl
c3NpYmlsaXR5Q29udHJvbGxlci5hY2Nlc3NpYmxlRWxlbWVudEJ5SWQoImVkaXRhYmxlIik7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIHZhciB0ZXh0ID0gZWxlbWVudC5zdHJpbmdGb3JUZXh0
TWFya2VyUmFuZ2UoZWxlbWVudC50ZXh0SW5wdXRNYXJrZWRUZXh0TWFya2VyUmFuZ2UoKSk7Cisg
ICAgICAgICAgICBzaG91bGRCZSgidGV4dCIsICInJyIpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICB0ZXh0SW5wdXRDb250cm9sbGVyLnNldE1hcmtlZFRleHQoInRlc3QiKTsKKyAgICAgICAg
ICAgIHRleHQgPSBlbGVtZW50LnN0cmluZ0ZvclRleHRNYXJrZXJSYW5nZShlbGVtZW50LnRleHRJ
bnB1dE1hcmtlZFRleHRNYXJrZXJSYW5nZSgpKTsKKyAgICAgICAgICAgIHNob3VsZEJlKCJ0ZXh0
IiwgIid0ZXN0JyIpOworCisgICAgICAgICAgICB0ZXh0SW5wdXRDb250cm9sbGVyLnVubWFya1Rl
eHQoKTsKKyAgICAgICAgICAgIHRleHQgPSBlbGVtZW50LnN0cmluZ0ZvclRleHRNYXJrZXJSYW5n
ZShlbGVtZW50LnRleHRJbnB1dE1hcmtlZFRleHRNYXJrZXJSYW5nZSgpKTsKKyAgICAgICAgICAg
IHNob3VsZEJlKCJ0ZXh0IiwgIicnIik7CisgICAgICAgICAgICBzaG91bGRCZSgiZWxlbWVudC5z
dHJpbmdWYWx1ZSIsICInQVhWYWx1ZTogdGVzdCciKTsKKworICAgICAgICAgICAgdGV4dElucHV0
Q29udHJvbGxlci5zZXRNYXJrZWRUZXh0KCIgbWVzc2FnZSIsIDQsICIgbWVzc2FnZSIubGVuZ3Ro
KTsKKyAgICAgICAgICAgIHRleHQgPSBlbGVtZW50LnN0cmluZ0ZvclRleHRNYXJrZXJSYW5nZShl
bGVtZW50LnRleHRJbnB1dE1hcmtlZFRleHRNYXJrZXJSYW5nZSgpKTsKKyAgICAgICAgICAgIHNo
b3VsZEJlKCJ0ZXh0IiwgIicgbWVzc2FnZSciKTsKKyAgICAgICAgICAgIHNob3VsZEJlKCJlbGVt
ZW50LnN0cmluZ1ZhbHVlIiwgIidBWFZhbHVlOiB0ZXN0IG1lc3NhZ2UnIik7CisgICAgICAgIH0K
KyAgICA8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2FjY2Vzc2liaWxpdHkvbWFjL3RleHQtaW5wdXQtc2Vzc2lvbi1ub3RpZmljYXRpb25zLWV4cGVj
dGVkLnR4dCBiL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL3RleHQtaW5wdXQtc2Vzc2lv
bi1ub3RpZmljYXRpb25zLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAuLmY2MTRhNmEzN2NhMAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L2FjY2Vzc2liaWxpdHkvbWFjL3RleHQtaW5wdXQtc2Vzc2lvbi1ub3RpZmljYXRpb25zLWV4cGVj
dGVkLnR4dApAQCAtMCwwICsxLDEyIEBACitUaGlzIHRlc3QgZW5zdXJlcyB0aGF0IHRoZSBpbnB1
dCBtZXRob2QgbWFya2VkIHJhbmdlIGlzIGF2YWlsYWJsZSB0byBhY2Nlc3NpYmlsaXR5IGNsaWVu
dHMgYXMgdGV4dCBtYXJrZXIgcmFuZ2UuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNl
cmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKwor
CitQQVNTIHN0YXRlIGlzIDAKK1BBU1Mgc3RhdGUgaXMgMQorUEFTUyBzdGF0ZSBpcyAyCitQQVNT
IHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvdGV4dC1pbnB1dC1zZXNzaW9uLW5vdGlm
aWNhdGlvbnMuaHRtbCBiL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL3RleHQtaW5wdXQt
c2Vzc2lvbi1ub3RpZmljYXRpb25zLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwLi40NmJhY2MzNDBjOWIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9h
Y2Nlc3NpYmlsaXR5L21hYy90ZXh0LWlucHV0LXNlc3Npb24tbm90aWZpY2F0aW9ucy5odG1sCkBA
IC0wLDAgKzEsNDYgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKyAgICA8c2Ny
aXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QuanMiPjwvc2NyaXB0PgorPC9oZWFkPgor
PGJvZHk+CisgICAgPGlucHV0IGlkPSJlZGl0YWJsZSIgdHlwZT0idGV4dCI+CisgICAgPHNjcmlw
dCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorICAgICAgICBkZXNjcmlwdGlvbigiVGhpcyB0ZXN0
IGVuc3VyZXMgdGhhdCB0aGUgaW5wdXQgbWV0aG9kIG1hcmtlZCByYW5nZSBpcyBhdmFpbGFibGUg
dG8gYWNjZXNzaWJpbGl0eSBjbGllbnRzIGFzIHRleHQgbWFya2VyIHJhbmdlLiIpOworICAgICAg
ICBlZGl0YWJsZS5mb2N1cygpOworCisgICAgICAgIHZhciBzdGF0ZSA9IDA7CisKKyAgICAgICAg
ZnVuY3Rpb24gbm90aWZpY2F0aW9uQ2FsbGJhY2sobm90aWZpY2F0aW9uKSB7CisKKyAgICAgICAg
ICAgIC8vIEZpcnN0IG5vdGlmaWNhdGlvbiB3ZSByZWNlaXZlCisgICAgICAgICAgICBpZiAobm90
aWZpY2F0aW9uID09ICJBWFRleHRJbnB1dE1hcmtpbmdTZXNzaW9uQmVnYW4iKSB7CisgICAgICAg
ICAgICAgICAgc2hvdWxkQmUoInN0YXRlIiwgIjAiKTsKKyAgICAgICAgICAgICAgICBzdGF0ZSAr
PSAxOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBTZWNvbmQgbm90aWZpY2F0aW9u
IHdlIHJlY2VpdmUKKyAgICAgICAgICAgIGlmIChub3RpZmljYXRpb24gPT0gIkFYVmFsdWVDaGFu
Z2VkIiAmJiBzdGF0ZSA+IDApIHsKKyAgICAgICAgICAgICAgICBzaG91bGRCZSgic3RhdGUiLCAi
MSIpOworICAgICAgICAgICAgICAgIHN0YXRlICs9IDE7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIC8vIFRoaXJkIG5vdGlmaWNhdGlvbiB3ZSByZWNlaXZlCisgICAgICAgICAgICBpZiAo
bm90aWZpY2F0aW9uID09ICJBWFRleHRJbnB1dE1hcmtpbmdTZXNzaW9uRW5kZWQiKSB7CisgICAg
ICAgICAgICAgICAgc2hvdWxkQmUoInN0YXRlIiwgIjIiKTsKKyAgICAgICAgICAgICAgICBmaW5p
c2hKU1Rlc3QoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICh3aW5k
b3cudGV4dElucHV0Q29udHJvbGxlciAmJiB3aW5kb3cuYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIp
IHsKKyAgICAgICAgICAgIHdpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKKyAgICAgICAgICAg
IHZhciBlbGVtZW50ID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRC
eUlkKCJlZGl0YWJsZSIpOworICAgICAgICAgICAgCisgICAgICAgICAgICBlbGVtZW50LmFkZE5v
dGlmaWNhdGlvbkxpc3RlbmVyKG5vdGlmaWNhdGlvbkNhbGxiYWNrKTsKKworICAgICAgICAgICAg
dGV4dElucHV0Q29udHJvbGxlci5zZXRNYXJrZWRUZXh0KCJ0ZXN0IiwgMSwgMCk7CisgICAgICAg
ICAgICB0ZXh0SW5wdXRDb250cm9sbGVyLnVubWFya1RleHQoKTsKKyAgICAgICAgfQorICAgIDwv
c2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>467038</attachid>
            <date>2023-07-13 17:52:53 -0700</date>
            <delta_ts>2023-07-13 18:50:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-258228-20230713175252.patch</filename>
            <type>text/plain</type>
            <size>59674</size>
            <attacher name="Jack Wiig">jhwiig</attacher>
            
              <data encoding="base64">RnJvbSA0OTJhMjVlNjNmOWNmZDZkZWU2NmQ1NDZiMzkwYjRmM2JiMjVkZWVmIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWNrIFdpaWcgPGpod2lpZ0BnbWFpbC5jb20+CkRhdGU6IFRo
dSwgMTMgSnVsIDIwMjMgMTc6NDA6MzMgLTA3MDAKU3ViamVjdDogW1BBVENIXSBQb3N0IEFjY2Vz
c2liaWxpdHkgbm90aWZpY2F0aW9ucyBkdXJpbmcgY29tcG9zaXRpb24gY29udGV4dHMKIGluZGlj
YXRpbmcgc3RhcnQsIGVuZCwgYW5kIHZhbHVlIGNoYW5nZS4KIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yNTgyMjggcmRhcjovL3Byb2JsZW0vMTEwOTI1Mzg0CgpSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KClRvIGFsaWduIG91cnNlbHZlcyB3aXRoIEFwcEtpdCwg
V2ViS2l0IHNob3VsZCBwb3N0IGEgbm90aWZpY2F0aW9uIHdoZW4gYSBjb21wb3NpdGlvbiBzdGFy
dHMgc28gdGhhdCBhc3Npc3RpdmUgdGVjaG5vbG9naWVzIGtub3cgdG8gcHJvY2VzcyBhbnkgZnV0
dXJlIHZhbHVlIGNoYW5nZXMgZm9yIHRoYXQgdWkgZWxlbWVudCBhcyBpbmNvbXBsZXRlIGNvbXBv
c2l0aW9uIGNoYW5nZXMuIFdoZW4gYSBjb21wb3NpdGlvbiBlbmRzLCBwb3N0IGEgbm90aWZpY2F0
aW9uIHRvIGluZGljYXRlIHRoYXQgdGhlIGNvbXBvc2l0aW9uIHNlc3Npb24gaGFzIGVuZGVkLgoK
VGhpcyBtb2RlbCBkb2VzIG5vdCBjb252ZXkgYW55IGluZm9ybWF0aW9uIGluIHRoZSB0ZXh0IG5v
dGlmaWNhdGlvbnMgKHVubGlrZSB3aGF0IG15IHBhc3QgY29tbWVudCBpbmRpY2F0ZXMpIGFuZCBw
b3N0cyB0aGUgbm90aWZpY2F0aW9uIGZyb20gdGhlIHRleHQgY29udHJvbCBjb250YWluaW5nIHRo
ZSB0ZXh0IGluZm9ybWF0aW9uLiBUaGlzIGFsaWducyB1cyBjbG9zZXIgd2l0aCBob3cgb3RoZXIg
VUkgZnJhbWV3b3JrcyBiZWhhdmUuCgoqIExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL2F0
dHJpYnV0ZWQtc3RyaW5nL2F0dHJpYnV0ZWQtc3RyaW5nLWhhcy1jb21wbGV0aW9uLWFubm90YXRp
b24uaHRtbDoKKiBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy90ZXh0LWlucHV0LW1hcmtl
ZC1yYW5nZS1leHBlY3RlZC50eHQ6CiogTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvdGV4
dC1pbnB1dC1tYXJrZWQtcmFuZ2UuaHRtbDoKKiBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21h
Yy90ZXh0LWlucHV0LW1hcmtlZC10ZXh0LW1hcmtlci1yYW5nZS1leHBlY3RlZC50eHQ6IEFkZGVk
LgoqIExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL3RleHQtaW5wdXQtbWFya2VkLXRleHQt
bWFya2VyLXJhbmdlLmh0bWw6IEFkZGVkLgoqIExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFj
L3RleHQtaW5wdXQtc2Vzc2lvbi1ub3RpZmljYXRpb25zLWV4cGVjdGVkLnR4dDogQWRkZWQuCiog
TGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvdGV4dC1pbnB1dC1zZXNzaW9uLW5vdGlmaWNh
dGlvbnMuaHRtbDogQWRkZWQuCiogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWExvZ2dl
ci5jcHA6CihXZWJDb3JlOjpvcGVyYXRvcjw8KToKKiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FYT2JqZWN0Q2FjaGUuY3BwOgooV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6b25UZXh0Q29t
cG9zaXRpb25DaGFuZ2UpOgooV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6dXBkYXRlSXNvbGF0ZWRU
cmVlKToKKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnRleHRDb21wb3NpdGlvbk9iamVjdEZvck5v
ZGUpOiBEZWxldGVkLgoqIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNo
ZS5oOgooV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6b25UZXh0Q29tcG9zaXRpb25DaGFuZ2UpOgoo
V2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6dXBkYXRlUmVsYXRpb25zKToKKFdlYkNvcmU6OkFYT2Jq
ZWN0Q2FjaGU6OnRleHRDb21wb3NpdGlvbk9iamVjdEZvck5vZGUpOiBEZWxldGVkLgoqIFNvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhUZXh0TWFya2VyLmNwcDoKKFdlYkNvcmU6OkFYVGV4
dE1hcmtlclJhbmdlOjpjaGFyYWN0ZXJSYW5nZSBjb25zdCk6CihXZWJDb3JlOjpBWElzb2xhdGVk
VGV4dE1hcmtlclJhbmdlOjpBWElzb2xhdGVkVGV4dE1hcmtlclJhbmdlKToKKiBTb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FYVGV4dE1hcmtlci5oOgoqIFNvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHA6CihXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5
T2JqZWN0Ojp0ZXh0SW5wdXRNYXJrZWRSYW5nZSBjb25zdCk6CihXZWJDb3JlOjpBY2Nlc3NpYmls
aXR5T2JqZWN0Ojp0ZXh0SW5wdXRNYXJrZWRUZXh0TWFya2VyUmFuZ2UgY29uc3QpOgooV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6aXNOb2RlRm9yQ29tcG9zaXRpb24gY29uc3QpOiBEZWxl
dGVkLgoqIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5o
OgoqIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdEludGVy
ZmFjZS5oOgoqIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvY29jb2EvQVhUZXh0TWFya2Vy
Q29jb2EubW06CihXZWJDb3JlOjpBWFRleHRNYXJrZXJSYW5nZTo6bnNSYW5nZSBjb25zdCk6Ciog
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9jb2NvYS9BY2Nlc3NpYmlsaXR5T2JqZWN0Q29j
b2EubW06CihXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0Ojpjb250ZW50Rm9yUmFuZ2UgY29u
c3QpOgoqIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL0FjY2Vzc2liaWxpdHlPYmpl
Y3RJT1MubW06CihXZWJDb3JlOjphdHRyaWJ1dGVkU3RyaW5nQ3JlYXRlKToKKiBTb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkT2JqZWN0LmNwcDoKKFdl
YkNvcmU6OkFYSXNvbGF0ZWRPYmplY3Q6OnRleHRJbnB1dE1hcmtlZFJhbmdlIGNvbnN0KToKKFdl
YkNvcmU6OkFYSXNvbGF0ZWRPYmplY3Q6OnRleHRJbnB1dE1hcmtlZFRleHRNYXJrZXJSYW5nZSBj
b25zdCk6CiogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29s
YXRlZE9iamVjdC5oOgoqIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVl
L0FYSXNvbGF0ZWRUcmVlLmNwcDoKKFdlYkNvcmU6OkFYSXNvbGF0ZWRUcmVlOjp1cGRhdGVOb2Rl
UHJvcGVydGllcyk6CiogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUv
QVhJc29sYXRlZFRyZWUuaDoKKiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9BWE9i
amVjdENhY2hlTWFjLm1tOgooV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6cG9zdFBsYXRmb3JtTm90
aWZpY2F0aW9uKToKKiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9BY2Nlc3NpYmls
aXR5T2JqZWN0TWFjLm1tOgooV2ViQ29yZTo6YXR0cmlidXRlZFN0cmluZ1NldENvbXBvc2l0aW9u
QXR0cmlidXRlcyk6CihXZWJDb3JlOjphdHRyaWJ1dGVkU3RyaW5nQ3JlYXRlKToKKiBTb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckJh
c2UuaDoKKiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlck1hYy5tbToKKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgQUxM
T1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5EXSk6CigtW1dlYkFjY2Vzc2liaWxpdHlP
YmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTpdKToKKiBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0VkaXRvci5jcHA6CihXZWJDb3JlOjpFZGl0b3I6OnNldENvbXBvc2l0aW9u
KToKKiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwOgooV2ViQ29yZTo6
VHlwaW5nQ29tbWFuZDo6aW5zZXJ0VGV4dCk6CiogVG9vbHMvRHVtcFJlbmRlclRyZWUvQWNjZXNz
aWJpbGl0eVVJRWxlbWVudC5jcHA6Cih0ZXh0SW5wdXRNYXJrZWRUZXh0TWFya2VyUmFuZ2VDYWxs
YmFjayk6CihBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0ZXh0SW5wdXRNYXJrZWRUZXh0TWFya2Vy
UmFuZ2UgY29uc3QpOgooQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Z2V0SlNDbGFzcyk6CiogVG9v
bHMvRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oOgoqIFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL2lvcy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50SU9TLm1tOgooQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6dGV4dElucHV0TWFya2VkVGV4dE1hcmtlclJhbmdlIGNvbnN0KToKKiBUb29s
cy9EdW1wUmVuZGVyVHJlZS9tYWMvQWNjZXNzaWJpbGl0eVVJRWxlbWVudE1hYy5tbToKKGF0dHJp
YnV0ZXNPZkVsZW1lbnQpOgooQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGV4dElucHV0TWFya2Vk
VGV4dE1hcmtlclJhbmdlIGNvbnN0KToKKiBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVk
QnVuZGxlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuY3BwOgooV1RSOjpBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50Ojp0ZXh0SW5wdXRNYXJrZWRUZXh0TWFya2VyUmFuZ2UgY29uc3QpOgoqIFRvb2xzL1dl
YktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oOgoq
IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvQWNjZXNzaWJp
bGl0eVVJRWxlbWVudC5pZGw6CiogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRs
ZS9tYWMvQWNjZXNzaWJpbGl0eVVJRWxlbWVudE1hYy5tbToKKFdUUjo6QWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6YWxsQXR0cmlidXRlcyk6CihXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRl
eHRJbnB1dE1hcmtlZFRleHRNYXJrZXJSYW5nZSBjb25zdCk6Ci0tLQogU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BWExvZ2dlci5jcHAgICAgIHwgIDYgKysrCiAuLi4vV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwICAgfCA0MiArKysrKysrKystLS0tLS0tCiBTb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaCAgfCAxMSArKystLQogU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWFRleHRNYXJrZXIuY3BwIHwgMjUgKysrKysrKysr
KwogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWFRleHRNYXJrZXIuaCAgIHwgMTEgKysr
KysKIC4uLi9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwICAgICB8IDQyICsr
KysrKysrLS0tLS0tLS0KIC4uLi9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaCAg
ICAgICB8ICAzICstCiAuLi4vQWNjZXNzaWJpbGl0eU9iamVjdEludGVyZmFjZS5oICAgICAgICAg
ICAgfCAgMSArCiAuLi4vYWNjZXNzaWJpbGl0eS9jb2NvYS9BWFRleHRNYXJrZXJDb2NvYS5tbSAg
fCAxMCArLS0tCiAuLi4vY29jb2EvQWNjZXNzaWJpbGl0eU9iamVjdENvY29hLm1tICAgICAgICAg
fCAgNCArLQogLi4uL2lvcy9BY2Nlc3NpYmlsaXR5T2JqZWN0SU9TLm1tICAgICAgICAgICAgIHwg
IDIgKy0KIC4uLi9pc29sYXRlZHRyZWUvQVhJc29sYXRlZE9iamVjdC5jcHAgICAgICAgICB8IDE4
ICsrKysrKysKIC4uLi9pc29sYXRlZHRyZWUvQVhJc29sYXRlZE9iamVjdC5oICAgICAgICAgICB8
ICAzICstCiAuLi4vaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRUcmVlLmNwcCAgICAgICAgICAgfCAx
MCArKy0tCiAuLi4vaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRUcmVlLmggICAgICAgICAgICAgfCAg
NSArLQogLi4uL2FjY2Vzc2liaWxpdHkvbWFjL0FYT2JqZWN0Q2FjaGVNYWMubW0gICAgIHwgMTQg
KysrKysrCiAuLi4vbWFjL0FjY2Vzc2liaWxpdHlPYmplY3RNYWMubW0gICAgICAgICAgICAgfCAx
OSArKysrLS0tCiAuLi4vbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQmFzZS5oICAg
fCAgMiArLQogLi4uL21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbSAgIHwg
MTEgKysrKysKIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcCAgICAgICAgICAgICB8
IDE5ICsrKystLS0KIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAgICAg
ICB8ICA3ICsrLQogLi4uL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuY3Bw
IHwgMTEgKysrKysKIFRvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQu
aCB8ICAxICsKIC4uLi9pb3MvQWNjZXNzaWJpbGl0eVVJRWxlbWVudElPUy5tbSAgICAgICAgICB8
ICA1ICsrCiAuLi4vbWFjL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRNYWMubW0gICAgICAgICAgfCAx
OCArKysrKystCiAuLi4vSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5jcHAg
fCAgMSArCiAuLi4vSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oICAgfCAg
MSArCiAuLi4vQmluZGluZ3MvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5pZGwgICAgICAgfCAgMSAr
CiAuLi4vbWFjL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRNYWMubW0gICAgICAgICAgfCAxOCArKysr
KystCiAuLi51dGVkLXN0cmluZy1oYXMtY29tcGxldGlvbi1hbm5vdGF0aW9uLmh0bWwgfCAxMiAr
KystLQogLi4uL21hYy90ZXh0LWlucHV0LW1hcmtlZC1yYW5nZS1leHBlY3RlZC50eHQgIHwgIDIg
Ky0KIC4uLi9tYWMvdGV4dC1pbnB1dC1tYXJrZWQtcmFuZ2UuaHRtbCAgICAgICAgICB8ICA1ICst
CiAuLi5ucHV0LW1hcmtlZC10ZXh0LW1hcmtlci1yYW5nZS1leHBlY3RlZC50eHQgfCAxNSArKysr
KysKIC4uLi90ZXh0LWlucHV0LW1hcmtlZC10ZXh0LW1hcmtlci1yYW5nZS5odG1sICB8IDMzICsr
KysrKysrKysrKysKIC4uLnQtaW5wdXQtc2Vzc2lvbi1ub3RpZmljYXRpb25zLWV4cGVjdGVkLnR4
dCB8IDExICsrKysrCiAuLi4vbWFjL3RleHQtaW5wdXQtc2Vzc2lvbi1ub3RpZmljYXRpb25zLmh0
bWwgfCA0OSArKysrKysrKysrKysrKysrKysrCiAzNiBmaWxlcyBjaGFuZ2VkLCAzNTcgaW5zZXJ0
aW9ucygrKSwgOTEgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgTGF5b3V0VGVzdHMv
YWNjZXNzaWJpbGl0eS9tYWMvdGV4dC1pbnB1dC1tYXJrZWQtdGV4dC1tYXJrZXItcmFuZ2UtZXhw
ZWN0ZWQudHh0CiBjcmVhdGUgbW9kZSAxMDA2NDQgTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9t
YWMvdGV4dC1pbnB1dC1tYXJrZWQtdGV4dC1tYXJrZXItcmFuZ2UuaHRtbAogY3JlYXRlIG1vZGUg
MTAwNjQ0IExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL3RleHQtaW5wdXQtc2Vzc2lvbi1u
b3RpZmljYXRpb25zLWV4cGVjdGVkLnR4dAogY3JlYXRlIG1vZGUgMTAwNjQ0IExheW91dFRlc3Rz
L2FjY2Vzc2liaWxpdHkvbWFjL3RleHQtaW5wdXQtc2Vzc2lvbi1ub3RpZmljYXRpb25zLmh0bWwK
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYTG9nZ2VyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhMb2dnZXIuY3BwCmluZGV4IGQ2MTM2YjFk
NjM1Mi4uZWNkZDk2OGYyYzQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FYTG9nZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYTG9n
Z2VyLmNwcApAQCAtNjQ0LDYgKzY0NCwxMiBAQCBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRT
dHJlYW0mIHN0cmVhbSwgQVhPYmplY3RDYWNoZTo6QVhOb3RpZmljYXRpb24gbm90aWZpYwogICAg
IGNhc2UgQVhPYmplY3RDYWNoZTo6QVhOb3RpZmljYXRpb246OkFYRHJhZ2dpbmdFeGl0ZWREcm9w
Wm9uZToKICAgICAgICAgc3RyZWFtIDw8ICJBWERyYWdnaW5nRXhpdGVkRHJvcFpvbmUiOwogICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEFYT2JqZWN0Q2FjaGU6OkFYTm90aWZpY2F0aW9uOjpBWFRl
eHRJbnB1dE1hcmtpbmdTZXNzaW9uQmVnYW46CisgICAgICAgIHN0cmVhbSA8PCAiQVhUZXh0SW5w
dXRNYXJraW5nU2Vzc2lvbkJlZ2FuIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBWE9iamVj
dENhY2hlOjpBWE5vdGlmaWNhdGlvbjo6QVhUZXh0SW5wdXRNYXJraW5nU2Vzc2lvbkVuZGVkOgor
ICAgICAgICBzdHJlYW0gPDwgIkFYVGV4dElucHV0TWFya2luZ1Nlc3Npb25FbmRlZCI7CisgICAg
ICAgIGJyZWFrOwogICAgIH0KIAogICAgIHJldHVybiBzdHJlYW07CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwIGIvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAppbmRleCAzM2EyZGM2ZGM0OTQuLjMx
YWYzZDQyZDA0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9i
amVjdENhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0
Q2FjaGUuY3BwCkBAIC0xNjgwLDEzICsxNjgwLDMzIEBAIHZvaWQgQVhPYmplY3RDYWNoZTo6b25W
YWxpZGl0eUNoYW5nZShFbGVtZW50JiBlbGVtZW50KQogICAgIHBvc3ROb3RpZmljYXRpb24oZ2V0
KCZlbGVtZW50KSwgbnVsbHB0ciwgQVhJbnZhbGlkU3RhdHVzQ2hhbmdlZCk7CiB9CiAKLXZvaWQg
QVhPYmplY3RDYWNoZTo6b25UZXh0Q29tcG9zaXRpb25DaGFuZ2UoTm9kZSYgbm9kZSkKK3ZvaWQg
QVhPYmplY3RDYWNoZTo6b25UZXh0Q29tcG9zaXRpb25DaGFuZ2UoTm9kZSYgbm9kZSwgQ29tcG9z
aXRpb25TdGF0ZSBjb21wb3NpdGlvblN0YXRlLCBib29sIHZhbHVlQ2hhbmdlZCkKIHsKKyNpZiBI
QVZFKElOTElORV9QUkVESUNUSU9OUykKKyAgICBhdXRvKiBvYmplY3QgPSBnZXRPckNyZWF0ZSgm
bm9kZSk7CisgICAgaWYgKCFvYmplY3QpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChhdXRv
KiBvYnNlcnZhYmxlT2JqZWN0ID0gb2JqZWN0LT5vYnNlcnZhYmxlT2JqZWN0KCkpCisgICAgICAg
IG9iamVjdCA9IG9ic2VydmFibGVPYmplY3Q7CisKICNpZiBFTkFCTEUoQUNDRVNTSUJJTElUWV9J
U09MQVRFRF9UUkVFKQotICAgIHVwZGF0ZUlzb2xhdGVkVHJlZSh0ZXh0Q29tcG9zaXRpb25PYmpl
Y3RGb3JOb2RlKG5vZGUpLCBBWFRleHRDb21wb3NpdGlvbkNoYW5nZWQpOworICAgIHVwZGF0ZUlz
b2xhdGVkVHJlZShvYmplY3QsIEFYVGV4dENvbXBvc2l0aW9uQ2hhbmdlZCk7CisjZW5kaWYgLy8g
RU5BQkxFKEFDQ0VTU0lCSUxJVFlfSVNPTEFURURfVFJFRSkKKworICAgIGlmIChjb21wb3NpdGlv
blN0YXRlID09IENvbXBvc2l0aW9uU3RhdGU6OlN0YXJ0ZWQpCisgICAgICAgIHBvc3ROb3RpZmlj
YXRpb24ob2JqZWN0LCAmbm9kZS5kb2N1bWVudCgpLCBBWFRleHRJbnB1dE1hcmtpbmdTZXNzaW9u
QmVnYW4pOworCisgICAgaWYgKHZhbHVlQ2hhbmdlZCkKKyAgICAgICAgcG9zdE5vdGlmaWNhdGlv
bihvYmplY3QsICZub2RlLmRvY3VtZW50KCksIEFYVmFsdWVDaGFuZ2VkKTsKKworICAgIGlmIChj
b21wb3NpdGlvblN0YXRlID09IENvbXBvc2l0aW9uU3RhdGU6OkVuZGVkKQorICAgICAgICBwb3N0
Tm90aWZpY2F0aW9uKG9iamVjdCwgJm5vZGUuZG9jdW1lbnQoKSwgQVhUZXh0SW5wdXRNYXJraW5n
U2Vzc2lvbkVuZGVkKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKG5vZGUpOwotI2VuZGlmCisg
ICAgVU5VU0VEX1BBUkFNKGNvbXBvc2l0aW9uU3RhdGUpOworICAgIFVOVVNFRF9QQVJBTSh2YWx1
ZUNoYW5nZWQpOworI2VuZGlmIC8vIEhBVkUoSU5MSU5FX1BSRURJQ1RJT05TKQogfQogCiAjaWZu
ZGVmIE5ERUJVRwpAQCAtNDAxNyw3ICs0MDM3LDcgQEAgdm9pZCBBWE9iamVjdENhY2hlOjp1cGRh
dGVJc29sYXRlZFRyZWUoY29uc3QgVmVjdG9yPHN0ZDo6cGFpcjxSZWZQdHI8QWNjZXNzaWJpbGkK
ICAgICAgICAgICAgIHRyZWUtPnVwZGF0ZU5vZGVQcm9wZXJ0eSgqbm90aWZpY2F0aW9uLmZpcnN0
LCBBWFByb3BlcnR5TmFtZTo6Q29sdW1uSGVhZGVycyk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgY2FzZSBBWFRleHRDb21wb3NpdGlvbkNoYW5nZWQ6Ci0gICAgICAgICAgICB0cmVlLT51
cGRhdGVOb2RlUHJvcGVydHkoKm5vdGlmaWNhdGlvbi5maXJzdCwgQVhQcm9wZXJ0eU5hbWU6OlRl
eHRJbnB1dE1hcmtlZFJhbmdlKTsKKyAgICAgICAgICAgIHRyZWUtPnVwZGF0ZU5vZGVQcm9wZXJ0
eSgqbm90aWZpY2F0aW9uLmZpcnN0LCBBWFByb3BlcnR5TmFtZTo6VGV4dElucHV0TWFya2VkVGV4
dE1hcmtlclJhbmdlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFYVVJMQ2hh
bmdlZDoKICAgICAgICAgICAgIHRyZWUtPnVwZGF0ZU5vZGVQcm9wZXJ0eSgqbm90aWZpY2F0aW9u
LmZpcnN0LCBBWFByb3BlcnR5TmFtZTo6VVJMKTsKQEAgLTQ2MDIsMjAgKzQ2MjIsNiBAQCBBWFRl
eHRDaGFuZ2UgQVhPYmplY3RDYWNoZTo6dGV4dENoYW5nZUZvckVkaXRUeXBlKEFYVGV4dEVkaXRU
eXBlIHR5cGUpCiB9CiAjZW5kaWYKIAotQWNjZXNzaWJpbGl0eU9iamVjdCogQVhPYmplY3RDYWNo
ZTo6dGV4dENvbXBvc2l0aW9uT2JqZWN0Rm9yTm9kZShOb2RlJiBub2RlKQotewotICAgIFdlYWtQ
dHIgb2JqZWN0ID0gZ2V0KCZub2RlKTsKLSAgICBpZiAob2JqZWN0KQotICAgICAgICBvYmplY3Qg
PSBvYmplY3QtPm9ic2VydmFibGVPYmplY3QoKTsKLQotI2lmIFBMQVRGT1JNKE1BQykKLSAgICAv
LyBJbiBvdXIgTWFjIGltcGxlbWVudGF0aW9ucyBmb3IgcG9zdGluZyB0ZXh0IG5vdGlmaWNhdGlv
bnMsIHdlIGZhbGwgYmFjayBvbiB0aGUgd2ViIGFyZWEgaWYgdGhlIG9ic2VydmFibGUgb2JqZWN0
IGlzIG51bGxwdHIuCi0gICAgaWYgKCFvYmplY3QpCi0gICAgICAgIG9iamVjdCA9IHJvb3RXZWJB
cmVhKCk7Ci0jZW5kaWYKLSAgICByZXR1cm4gb2JqZWN0LmdldCgpOwotfQotCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoQUNDRVNTSUJJTElUWSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5oIGIvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmgKaW5kZXggZTIzYjc4ZjdhNTky
Li40NGMwNjBkNWRmNzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QVhPYmplY3RDYWNoZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmpl
Y3RDYWNoZS5oCkBAIC0xODQsNiArMTg0LDggQEAgcHJpdmF0ZToKICAgICB2b2lkIGF0dGFjaFdy
YXBwZXIoQWNjZXNzaWJpbGl0eU9iamVjdCopOwogCiBwdWJsaWM6CisgICAgZW51bSBjbGFzcyBD
b21wb3NpdGlvblN0YXRlIDogdWludDhfdCB7IFN0YXJ0ZWQsIEluUHJvZ3Jlc3MsIEVuZGVkIH07
CisKICAgICB2b2lkIG9uUGFnZUFjdGl2aXR5U3RhdGVDaGFuZ2UoT3B0aW9uU2V0PEFjdGl2aXR5
U3RhdGU+KTsKICAgICB2b2lkIHNldFBhZ2VBY3Rpdml0eVN0YXRlKE9wdGlvblNldDxBY3Rpdml0
eVN0YXRlPiBzdGF0ZSkgeyBtX3BhZ2VBY3Rpdml0eVN0YXRlID0gc3RhdGU7IH0KICAgICBPcHRp
b25TZXQ8QWN0aXZpdHlTdGF0ZT4gcGFnZUFjdGl2aXR5U3RhdGUoKSBjb25zdCB7IHJldHVybiBt
X3BhZ2VBY3Rpdml0eVN0YXRlOyB9CkBAIC0xOTgsNyArMjAwLDcgQEAgcHVibGljOgogICAgIHZv
aWQgb25UZXh0U2VjdXJpdHlDaGFuZ2VkKEhUTUxJbnB1dEVsZW1lbnQmKTsKICAgICB2b2lkIG9u
VGl0bGVDaGFuZ2UoRG9jdW1lbnQmKTsKICAgICB2b2lkIG9uVmFsaWRpdHlDaGFuZ2UoRWxlbWVu
dCYpOwotICAgIHZvaWQgb25UZXh0Q29tcG9zaXRpb25DaGFuZ2UoTm9kZSYpOworICAgIHZvaWQg
b25UZXh0Q29tcG9zaXRpb25DaGFuZ2UoTm9kZSYsIENvbXBvc2l0aW9uU3RhdGUsIGJvb2wpOwog
ICAgIHZvaWQgdmFsdWVDaGFuZ2VkKEVsZW1lbnQqKTsKICAgICB2b2lkIGNoZWNrZWRTdGF0ZUNo
YW5nZWQoTm9kZSopOwogICAgIHZvaWQgYXV0b2ZpbGxUeXBlQ2hhbmdlZChOb2RlKik7CkBAIC0z
NjUsNiArMzY3LDggQEAgcHVibGljOgogICAgICAgICBBWFNlbGVjdGVkVGV4dENoYW5nZWQsCiAg
ICAgICAgIEFYU2V0U2l6ZUNoYW5nZWQsCiAgICAgICAgIEFYVGFibGVIZWFkZXJzQ2hhbmdlZCwK
KyAgICAgICAgQVhUZXh0SW5wdXRNYXJraW5nU2Vzc2lvbkJlZ2FuLAorICAgICAgICBBWFRleHRJ
bnB1dE1hcmtpbmdTZXNzaW9uRW5kZWQsCiAgICAgICAgIEFYVVJMQ2hhbmdlZCwKICAgICAgICAg
QVhWYWx1ZUNoYW5nZWQsCiAgICAgICAgIEFYU2Nyb2xsZWRUb0FuY2hvciwKQEAgLTQ2MSw4ICs0
NjUsNiBAQCBwdWJsaWM6CiAgICAgc3RkOjpvcHRpb25hbDxWZWN0b3I8QVhJRD4+IHJlbGF0ZWRP
YmplY3RJRHNGb3IoY29uc3QgQVhDb3JlT2JqZWN0JiwgQVhSZWxhdGlvblR5cGUpOwogICAgIHZv
aWQgdXBkYXRlUmVsYXRpb25zKEVsZW1lbnQmLCBjb25zdCBRdWFsaWZpZWROYW1lJik7CiAKLSAg
ICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiB0ZXh0Q29tcG9zaXRpb25PYmplY3RGb3JOb2RlKE5vZGUm
KTsKLQogI2lmIEVOQUJMRShBQ0NFU1NJQklMSVRZX0lTT0xBVEVEX1RSRUUpCiAgICAgdm9pZCBz
Y2hlZHVsZU9iamVjdFJlZ2lvbnNVcGRhdGUoYm9vbCBzY2hlZHVsZUltbWVkaWF0ZWx5ID0gZmFs
c2UpIHsgbV9nZW9tZXRyeU1hbmFnZXItPnNjaGVkdWxlT2JqZWN0UmVnaW9uc1VwZGF0ZShzY2hl
ZHVsZUltbWVkaWF0ZWx5KTsgfQogICAgIHZvaWQgd2lsbFVwZGF0ZU9iamVjdFJlZ2lvbnMoKSB7
IG1fZ2VvbWV0cnlNYW5hZ2VyLT53aWxsVXBkYXRlT2JqZWN0UmVnaW9ucygpOyB9CkBAIC03MzYs
NyArNzM4LDcgQEAgaW5saW5lIHZvaWQgQVhPYmplY3RDYWNoZTo6b25TZWxlY3RlZENoYW5nZWQo
Tm9kZSopIHsgfQogaW5saW5lIHZvaWQgQVhPYmplY3RDYWNoZTo6b25UZXh0U2VjdXJpdHlDaGFu
Z2VkKEhUTUxJbnB1dEVsZW1lbnQmKSB7IH0KIGlubGluZSB2b2lkIEFYT2JqZWN0Q2FjaGU6Om9u
VGl0bGVDaGFuZ2UoRG9jdW1lbnQmKSB7IH0KIGlubGluZSB2b2lkIEFYT2JqZWN0Q2FjaGU6Om9u
VmFsaWRpdHlDaGFuZ2UoRWxlbWVudCYpIHsgfQotaW5saW5lIHZvaWQgQVhPYmplY3RDYWNoZTo6
b25UZXh0Q29tcG9zaXRpb25DaGFuZ2UoTm9kZSYpIHsgfQoraW5saW5lIHZvaWQgQVhPYmplY3RD
YWNoZTo6b25UZXh0Q29tcG9zaXRpb25DaGFuZ2UoTm9kZSYsIENvbXBvc2l0aW9uU3RhdGUsIGJv
b2wpIHsgfQogaW5saW5lIHZvaWQgQVhPYmplY3RDYWNoZTo6dmFsdWVDaGFuZ2VkKEVsZW1lbnQq
KSB7IH0KIGlubGluZSB2b2lkIEFYT2JqZWN0Q2FjaGU6Om9uRm9jdXNDaGFuZ2UoTm9kZSosIE5v
ZGUqKSB7IH0KIGlubGluZSB2b2lkIEFYT2JqZWN0Q2FjaGU6Om9uUGFnZUFjdGl2aXR5U3RhdGVD
aGFuZ2UoT3B0aW9uU2V0PEFjdGl2aXR5U3RhdGU+KSB7IH0KQEAgLTc4OCw3ICs3OTAsNiBAQCBp
bmxpbmUgdm9pZCBBWE9iamVjdENhY2hlOjp1cGRhdGVMb2FkaW5nUHJvZ3Jlc3MoZG91YmxlKSB7
IH0KIGlubGluZSBTaW1wbGVSYW5nZSBBWE9iamVjdENhY2hlOjpyYW5nZUZvck5vZGVDb250ZW50
cyhOb2RlJiBub2RlKSB7IHJldHVybiBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMobm9k
ZSk7IH0KIGlubGluZSBzdGQ6Om9wdGlvbmFsPFZlY3RvcjxBWElEPj4gQVhPYmplY3RDYWNoZTo6
cmVsYXRlZE9iamVjdElEc0Zvcihjb25zdCBBWENvcmVPYmplY3QmLCBBWFJlbGF0aW9uVHlwZSkg
eyByZXR1cm4gc3RkOjpudWxsb3B0OyB9CiBpbmxpbmUgdm9pZCBBWE9iamVjdENhY2hlOjp1cGRh
dGVSZWxhdGlvbnMoRWxlbWVudCYsIGNvbnN0IFF1YWxpZmllZE5hbWUmKSB7IH0KLWlubGluZSBB
Y2Nlc3NpYmlsaXR5T2JqZWN0KiBBWE9iamVjdENhY2hlOjp0ZXh0Q29tcG9zaXRpb25PYmplY3RG
b3JOb2RlKE5vZGUmKSB7IHJldHVybiBudWxscHRyOyB9CiBpbmxpbmUgdm9pZCBBWE9iamVjdENh
Y2hlOjpyZW1vdmUoQVhJRCkgeyB9CiBpbmxpbmUgdm9pZCBBWE9iamVjdENhY2hlOjpyZW1vdmUo
UmVuZGVyT2JqZWN0KikgeyB9CiBpbmxpbmUgdm9pZCBBWE9iamVjdENhY2hlOjpyZW1vdmUoTm9k
ZSYpIHsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWFRleHRN
YXJrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWFRleHRNYXJrZXIuY3Bw
CmluZGV4IGVhYjczOWI2ZjE5Ny4uOTIzZTI3ZGY5NzNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FYVGV4dE1hcmtlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BWFRleHRNYXJrZXIuY3BwCkBAIC0yNzUsNiArMjc1LDE5IEBAIHN0ZDo6
b3B0aW9uYWw8U2ltcGxlUmFuZ2U+IEFYVGV4dE1hcmtlclJhbmdlOjpzaW1wbGVSYW5nZSgpIGNv
bnN0CiAgICAgcmV0dXJuIHsgeyAqc3RhcnRCb3VuZGFyeVBvaW50LCAqZW5kQm91bmRhcnlQb2lu
dCB9IH07CiB9CiAKK3N0ZDo6b3B0aW9uYWw8Q2hhcmFjdGVyUmFuZ2U+IEFYVGV4dE1hcmtlclJh
bmdlOjpjaGFyYWN0ZXJSYW5nZSgpIGNvbnN0Cit7CisgICAgaWYgKG1fc3RhcnQubV9kYXRhLm9i
amVjdElEICE9IG1fZW5kLm1fZGF0YS5vYmplY3RJRAorICAgICAgICB8fCBtX3N0YXJ0Lm1fZGF0
YS50cmVlSUQgIT0gbV9lbmQubV9kYXRhLnRyZWVJRCkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKKworICAgIGlmIChtX3N0YXJ0Lm1fZGF0YS5jaGFyYWN0ZXJPZmZzZXQgPiBtX2VuZC5t
X2RhdGEuY2hhcmFjdGVyT2Zmc2V0KSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KKyAgICByZXR1cm4geyB7IG1fc3Rh
cnQubV9kYXRhLmNoYXJhY3Rlck9mZnNldCwgbV9lbmQubV9kYXRhLmNoYXJhY3Rlck9mZnNldCAt
IG1fc3RhcnQubV9kYXRhLmNoYXJhY3Rlck9mZnNldCB9IH07Cit9CisKIHN0ZDo6cGFydGlhbF9v
cmRlcmluZyBwYXJ0aWFsT3JkZXIoY29uc3QgQVhUZXh0TWFya2VyJiBtYXJrZXIxLCBjb25zdCBB
WFRleHRNYXJrZXImIG1hcmtlcjIpCiB7CiAgICAgaWYgKG1hcmtlcjEub2JqZWN0SUQoKSA9PSBt
YXJrZXIyLm9iamVjdElEKCkgJiYgbWFya2VyMS50cmVlSUQoKSA9PSBtYXJrZXIyLnRyZWVJRCgp
KSB7CkBAIC0zMDUsNCArMzE4LDE2IEBAIGJvb2wgQVhUZXh0TWFya2VyUmFuZ2U6OmlzQ29uZmlu
ZWRUbyhBWElEIG9iamVjdElEKSBjb25zdAogICAgICAgICAmJiBMSUtFTFkobV9zdGFydC50cmVl
SUQoKSA9PSBtX2VuZC50cmVlSUQoKSk7CiB9CiAKKyNpZiBFTkFCTEUoQUNDRVNTSUJJTElUWV9J
U09MQVRFRF9UUkVFKQorQVhJc29sYXRlZFRleHRNYXJrZXJSYW5nZTo6QVhJc29sYXRlZFRleHRN
YXJrZXJSYW5nZShjb25zdCBBWFRleHRNYXJrZXJSYW5nZSYgcmFuZ2UpCit7CisgICAgb2JqZWN0
SUQgPSByYW5nZS5zdGFydCgpLm9iamVjdElEKCk7CisgICAgaWYgKGF1dG8gY2hhcmFjdGVyUmFu
Z2UgPSByYW5nZS5jaGFyYWN0ZXJSYW5nZSgpKSB7CisgICAgICAgIHN0YXJ0ID0gc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KGNoYXJhY3RlclJhbmdlLT5sb2NhdGlvbik7CisgICAgICAgIGVuZCA9IHN0
YXRpY19jYXN0PHVuc2lnbmVkPihjaGFyYWN0ZXJSYW5nZS0+bG9jYXRpb24gKyBjaGFyYWN0ZXJS
YW5nZS0+bGVuZ3RoKTsKKyAgICB9Cit9CisjZW5kaWYKKworCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYVGV4dE1hcmtl
ci5oIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWFRleHRNYXJrZXIuaAppbmRleCAz
MThlZDA2OGE2MzEuLjgxYzBjMWNiN2ZiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BWFRleHRNYXJrZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FYVGV4dE1hcmtlci5oCkBAIC0xNTUsNiArMTU1LDcgQEAgcHVibGljOgogICAgIG9wZXJh
dG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0ICYmIG1fZW5kOyB9CiAgICAgb3BlcmF0
b3IgVmlzaWJsZVBvc2l0aW9uUmFuZ2UoKSBjb25zdDsKICAgICBzdGQ6Om9wdGlvbmFsPFNpbXBs
ZVJhbmdlPiBzaW1wbGVSYW5nZSgpIGNvbnN0OworICAgIHN0ZDo6b3B0aW9uYWw8Q2hhcmFjdGVy
UmFuZ2U+IGNoYXJhY3RlclJhbmdlKCkgY29uc3Q7CiAKICNpZiBQTEFURk9STShNQUMpCiAgICAg
UmV0YWluUHRyPEFYVGV4dE1hcmtlclJhbmdlUmVmPiBwbGF0Zm9ybURhdGEoKSBjb25zdDsKQEAg
LTE3Myw2ICsxNzQsMTYgQEAgcHJpdmF0ZToKICAgICBBWFRleHRNYXJrZXIgbV9lbmQ7CiB9Owog
CisjaWYgRU5BQkxFKEFDQ0VTU0lCSUxJVFlfSVNPTEFURURfVFJFRSkKKy8vIFRoaXMgbGlnaHR3
ZWlnaHQgcmVwcmVzZW50YXRpb24gb2YgYSB0ZXh0IG1hcmtlciByYW5nZSBpcyAxNiBieXRlcyAo
aW5zdGVhZCBvZiA4MCBieXRlcyksIG1ha2luZyBpdCBmYXIgbW9yZSBlZmZpY2llbnQgdG8gc3Rv
cmUgaW4gdGhlIGlzb2xhdGVkIG9iamVjdCdzIHByb3BlcnR5IG1hcC4KK3N0cnVjdCBBWElzb2xh
dGVkVGV4dE1hcmtlclJhbmdlIHsKKyAgICBBWElEIG9iamVjdElEOworICAgIHVuc2lnbmVkIHN0
YXJ0OworICAgIHVuc2lnbmVkIGVuZDsKKyAgICBBWElzb2xhdGVkVGV4dE1hcmtlclJhbmdlKGNv
bnN0IEFYVGV4dE1hcmtlclJhbmdlJik7Cit9OworI2VuZGlmCisKIGlubGluZSBOb2RlKiBBWFRl
eHRNYXJrZXI6Om5vZGUoKSBjb25zdAogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmpl
Y3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0
LmNwcAppbmRleCAwNjg1NmZhNzMyYWQuLmUxOTNkNjU1MDFlMCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCkBAIC00MDUs
MzkgKzQwNSw0MSBAQCBzdGQ6Om9wdGlvbmFsPFNpbXBsZVJhbmdlPiBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0OjptaXNzcGVsbGluZ1JhbmdlKGNvbnN0IFNpbXBsZVJhbgogICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CiB9CiAKLWJvb2wgQWNjZXNzaWJpbGl0eU9iamVjdDo6aXNOb2RlRm9yQ29tcG9zaXRp
b24oY29uc3QgRWRpdG9yJiBlZGl0b3IpIGNvbnN0CitzdGQ6Om9wdGlvbmFsPENoYXJhY3RlclJh
bmdlPiBBY2Nlc3NpYmlsaXR5T2JqZWN0Ojp0ZXh0SW5wdXRNYXJrZWRSYW5nZSgpIGNvbnN0CiB7
Ci0gICAgV2Vha1B0ciBjb21wb3NpdGlvbk5vZGUgPSBlZGl0b3IuY29tcG9zaXRpb25Ob2RlKCk7
Ci0gICAgaWYgKCFjb21wb3NpdGlvbk5vZGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IFdlYWtQdHIgY2FjaGUgPSBheE9iamVjdENhY2hlKCk7Ci0gICAgaWYgKCFjYWNoZSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGF1dG8qIGNvbXBvc2l0aW9uT2JqZWN0ID0gY2Fj
aGUtPnRleHRDb21wb3NpdGlvbk9iamVjdEZvck5vZGUoKmNvbXBvc2l0aW9uTm9kZSkpCi0gICAg
ICAgIHJldHVybiBjb21wb3NpdGlvbk9iamVjdC0+b2JqZWN0SUQoKSA9PSBvYmplY3RJRCgpOwor
ICAgIGF1dG8gcmFuZ2UgPSB0ZXh0SW5wdXRNYXJrZWRUZXh0TWFya2VyUmFuZ2UoKS5jaGFyYWN0
ZXJSYW5nZSgpOworICAgIGlmICghcmFuZ2UgfHwgIXJhbmdlLT5sZW5ndGgpCisgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7CiAKLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHJhbmdl
OwogfQogCi1zdGQ6Om9wdGlvbmFsPENoYXJhY3RlclJhbmdlPiBBY2Nlc3NpYmlsaXR5T2JqZWN0
Ojp0ZXh0SW5wdXRNYXJrZWRSYW5nZSgpIGNvbnN0CitBWFRleHRNYXJrZXJSYW5nZSBBY2Nlc3Np
YmlsaXR5T2JqZWN0Ojp0ZXh0SW5wdXRNYXJrZWRUZXh0TWFya2VyUmFuZ2UoKSBjb25zdAogewog
ICAgIFdlYWtQdHIgbm9kZSA9IHRoaXMtPm5vZGUoKTsKICAgICBpZiAoIW5vZGUpCi0gICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAgIHJldHVybiB7IH07CiAKICAgICBhdXRvKiBm
cmFtZSA9IG5vZGUtPmRvY3VtZW50KCkuZnJhbWUoKTsKICAgICBpZiAoIWZyYW1lKQotICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgICAgICByZXR1cm4geyB9OworCisgICAgYXV0byog
Y2FjaGUgPSBheE9iamVjdENhY2hlKCk7CisgICAgaWYgKCFjYWNoZSkKKyAgICAgICAgcmV0dXJu
IHsgfTsKIAogICAgIGF1dG8mIGVkaXRvciA9IGZyYW1lLT5lZGl0b3IoKTsKLSAgICBhdXRvIHJh
bmdlID0gZWRpdG9yLmNvbXBvc2l0aW9uUmFuZ2UoKTsKLSAgICBpZiAoIXJhbmdlIHx8ICFpc05v
ZGVGb3JDb21wb3NpdGlvbihlZGl0b3IpKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owor
ICAgIGF1dG8qIG9iamVjdCA9IGNhY2hlLT5nZXRPckNyZWF0ZShlZGl0b3IuY29tcG9zaXRpb25O
b2RlKCkpOworICAgIGlmICghb2JqZWN0KQorICAgICAgICByZXR1cm4geyB9OworCisgICAgaWYg
KGF1dG8qIG9ic2VydmFibGVPYmplY3QgPSBvYmplY3QtPm9ic2VydmFibGVPYmplY3QoKSkKKyAg
ICAgICAgb2JqZWN0ID0gb2JzZXJ2YWJsZU9iamVjdDsKKworICAgIGlmIChvYmplY3QtPm9iamVj
dElEKCkgIT0gb2JqZWN0SUQoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGF1dG8gc2Nv
cGUgPSBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoKm5vZGUpOwotICAgIHJldHVybiBj
aGFyYWN0ZXJSYW5nZShzY29wZSwgKnJhbmdlKTsKKyAgICByZXR1cm4geyBlZGl0b3IuY29tcG9z
aXRpb25SYW5nZSgpIH07CiB9CiAKIHVuc2lnbmVkIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmJsb2Nr
cXVvdGVMZXZlbCgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eU9iamVjdC5oCmluZGV4IDg5ZjExZGUzZDE1Mi4uYjI3YzUxOGU1ODY1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmpl
Y3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmpl
Y3QuaApAQCAtMjQzLDYgKzI0Myw3IEBAIHB1YmxpYzoKICAgICBib29sIGhhc1VuZGVybGluZSgp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgYm9vbCBoYXNIaWdobGlnaHRp
bmcoKSBjb25zdCBvdmVycmlkZTsKICAgICBzdGQ6Om9wdGlvbmFsPENoYXJhY3RlclJhbmdlPiB0
ZXh0SW5wdXRNYXJrZWRSYW5nZSgpIGNvbnN0IGZpbmFsOworICAgIEFYVGV4dE1hcmtlclJhbmdl
IHRleHRJbnB1dE1hcmtlZFRleHRNYXJrZXJSYW5nZSgpIGNvbnN0IGZpbmFsOwogCiAgICAgYm9v
bCBzdXBwb3J0c0RhdGV0aW1lQXR0cmlidXRlKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgU3RyaW5n
IGRhdGV0aW1lQXR0cmlidXRlVmFsdWUoKSBjb25zdCBvdmVycmlkZTsKQEAgLTgxNiw4ICs4MTcs
NiBAQCBwcml2YXRlOgogICAgIC8vIFNwZWNpYWwgaGFuZGxpbmcgb2YgY2xpY2sgcG9pbnQgZm9y
IGxpbmtzLgogICAgIEludFBvaW50IGxpbmtDbGlja1BvaW50KCk7CiAKLSAgICBib29sIGlzTm9k
ZUZvckNvbXBvc2l0aW9uKGNvbnN0IEVkaXRvciYpIGNvbnN0OwotCiBwcm90ZWN0ZWQ6IC8vIEZJ
WE1FOiBNYWtlIHRoZSBkYXRhIG1lbWJlcnMgcHJpdmF0ZS4KICAgICBBY2Nlc3NpYmlsaXR5Q2hp
bGRyZW5WZWN0b3IgbV9jaGlsZHJlbjsKICAgICBtdXRhYmxlIGJvb2wgbV9jaGlsZHJlbkluaXRp
YWxpemVkIHsgZmFsc2UgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eU9iamVjdEludGVyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0SW50ZXJmYWNlLmgKaW5kZXggMjMzMGZiMjE3NWVl
Li43MDczMTJjOTA5NDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eU9iamVjdEludGVyZmFjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdEludGVyZmFjZS5oCkBAIC05ODksNiArOTg5LDcg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBoYXNVbmRlcmxpbmUoKSBjb25zdCA9IDA7CiAg
ICAgdmlydHVhbCBib29sIGhhc0hpZ2hsaWdodGluZygpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFs
IHN0ZDo6b3B0aW9uYWw8Q2hhcmFjdGVyUmFuZ2U+IHRleHRJbnB1dE1hcmtlZFJhbmdlKCkgY29u
c3QgPSAwOworICAgIHZpcnR1YWwgQVhUZXh0TWFya2VyUmFuZ2UgdGV4dElucHV0TWFya2VkVGV4
dE1hcmtlclJhbmdlKCkgY29uc3QgPSAwOwogCiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRGF0
ZXRpbWVBdHRyaWJ1dGUoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBTdHJpbmcgZGF0ZXRpbWVB
dHRyaWJ1dGVWYWx1ZSgpIGNvbnN0ID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvY29jb2EvQVhUZXh0TWFya2VyQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L2NvY29hL0FYVGV4dE1hcmtlckNvY29hLm1tCmluZGV4IDQ5NWY0M2Y3Yzli
My4uMDE5MjYyMTFkZDA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L2NvY29hL0FYVGV4dE1hcmtlckNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvY29jb2EvQVhUZXh0TWFya2VyQ29jb2EubW0KQEAgLTkzLDE1ICs5Myw3IEBAIFJldGFp
blB0cjxBWFRleHRNYXJrZXJSYW5nZVJlZj4gQVhUZXh0TWFya2VyUmFuZ2U6OnBsYXRmb3JtRGF0
YSgpIGNvbnN0CiAKIHN0ZDo6b3B0aW9uYWw8TlNSYW5nZT4gQVhUZXh0TWFya2VyUmFuZ2U6Om5z
UmFuZ2UoKSBjb25zdAogewotICAgIGlmIChtX3N0YXJ0Lm1fZGF0YS5vYmplY3RJRCAhPSBtX2Vu
ZC5tX2RhdGEub2JqZWN0SUQKLSAgICAgICAgfHwgbV9zdGFydC5tX2RhdGEudHJlZUlEICE9IG1f
ZW5kLm1fZGF0YS50cmVlSUQpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICBp
ZiAobV9zdGFydC5tX2RhdGEuY2hhcmFjdGVyT2Zmc2V0ID4gbV9lbmQubV9kYXRhLmNoYXJhY3Rl
ck9mZnNldCkgewotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKLSAgICB9Ci0gICAgcmV0dXJuIE5TTWFrZVJhbmdlKG1fc3RhcnQubV9k
YXRhLmNoYXJhY3Rlck9mZnNldCwgbV9lbmQubV9kYXRhLmNoYXJhY3Rlck9mZnNldCAtIG1fc3Rh
cnQubV9kYXRhLmNoYXJhY3Rlck9mZnNldCk7CisgICAgcmV0dXJuIGNoYXJhY3RlclJhbmdlKCk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvY29jb2EvQWNjZXNzaWJpbGl0eU9iamVjdENvY29hLm1tIGIvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9jb2NvYS9BY2Nlc3NpYmlsaXR5T2JqZWN0Q29jb2EubW0K
aW5kZXggYmUwOGI5MjQ0Njc4Li5iMTlmZjgyNDU0YWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvY29jb2EvQWNjZXNzaWJpbGl0eU9iamVjdENvY29hLm1tCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvY29jb2EvQWNjZXNzaWJpbGl0eU9iamVjdENv
Y29hLm1tCkBAIC0zMzQsMTEgKzMzNCwxMSBAQCBSZXRhaW5QdHI8TlNBcnJheT4gQWNjZXNzaWJp
bGl0eU9iamVjdDo6Y29udGVudEZvclJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZQogICAg
ICAgICBpZiAoaXQudGV4dCgpLmxlbmd0aCgpKSB7CiAgICAgICAgICAgICBhdXRvIGxpc3RNYXJr
ZXJUZXh0ID0gbGlzdE1hcmtlclRleHRGb3JOb2RlQW5kUG9zaXRpb24oJm5vZGUsIG1ha2VDb250
YWluZXJPZmZzZXRQb3NpdGlvbihpdC5yYW5nZSgpLnN0YXJ0KSk7CiAgICAgICAgICAgICBpZiAo
IWxpc3RNYXJrZXJUZXh0LmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgIGlmIChhdXRvIGF0
dHJTdHJpbmcgPSBhdHRyaWJ1dGVkU3RyaW5nQ3JlYXRlKCZub2RlLCBsaXN0TWFya2VyVGV4dCwg
U3BlbGxDaGVjazo6Tm8pKQorICAgICAgICAgICAgICAgIGlmIChhdXRvIGF0dHJTdHJpbmcgPSBh
dHRyaWJ1dGVkU3RyaW5nQ3JlYXRlKCZub2RlLCBsaXN0TWFya2VyVGV4dCwgaXQucmFuZ2UoKSwg
U3BlbGxDaGVjazo6Tm8pKQogICAgICAgICAgICAgICAgICAgICBbcmVzdWx0IGFkZE9iamVjdDph
dHRyU3RyaW5nLmdldCgpXTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKGF1dG8g
YXR0clN0cmluZyA9IGF0dHJpYnV0ZWRTdHJpbmdDcmVhdGUoJm5vZGUsIGl0LnRleHQoKSwgc3Bl
bGxDaGVjaykpCisgICAgICAgICAgICBpZiAoYXV0byBhdHRyU3RyaW5nID0gYXR0cmlidXRlZFN0
cmluZ0NyZWF0ZSgmbm9kZSwgaXQudGV4dCgpLCBpdC5yYW5nZSgpLCBzcGVsbENoZWNrKSkKICAg
ICAgICAgICAgICAgICBbcmVzdWx0IGFkZE9iamVjdDphdHRyU3RyaW5nLmdldCgpXTsKICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlmIChOb2RlKiByZXBsYWNlZE5vZGUgPSBpdC5ub2Rl
KCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL0FjY2Vz
c2liaWxpdHlPYmplY3RJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9B
Y2Nlc3NpYmlsaXR5T2JqZWN0SU9TLm1tCmluZGV4IGNiOWVjN2RjNTNmYy4uNzljMDJmZDMyZDAx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9BY2Nlc3NpYmls
aXR5T2JqZWN0SU9TLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL0Fj
Y2Vzc2liaWxpdHlPYmplY3RJT1MubW0KQEAgLTIwOCw3ICsyMDgsNyBAQCBzdGF0aWMgdm9pZCBh
dHRyaWJ1dGVTdHJpbmdTZXRTdHlsZShOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nICphdHRyU3Ry
aW5nLCBSZW5kZQogICAgICAgICBbYXR0clN0cmluZyBhZGRBdHRyaWJ1dGU6VUlBY2Nlc3NpYmls
aXR5VGV4dEF0dHJpYnV0ZUNvbnRleHQgdmFsdWU6VUlBY2Nlc3NpYmlsaXR5VGV4dHVhbENvbnRl
eHRTb3VyY2VDb2RlIHJhbmdlOnJhbmdlXTsKIH0KIAotUmV0YWluUHRyPE5TQXR0cmlidXRlZFN0
cmluZz4gYXR0cmlidXRlZFN0cmluZ0NyZWF0ZShOb2RlKiBub2RlLCBTdHJpbmdWaWV3IHRleHQs
IEFYQ29yZU9iamVjdDo6U3BlbGxDaGVjaykKK1JldGFpblB0cjxOU0F0dHJpYnV0ZWRTdHJpbmc+
IGF0dHJpYnV0ZWRTdHJpbmdDcmVhdGUoTm9kZSogbm9kZSwgU3RyaW5nVmlldyB0ZXh0LCBjb25z
dCBTaW1wbGVSYW5nZSYsIEFYQ29yZU9iamVjdDo6U3BlbGxDaGVjaykKIHsKICAgICAvLyBTa2lw
IGludmlzaWJsZSB0ZXh0LgogICAgIGF1dG8qIHJlbmRlcmVyID0gbm9kZS0+cmVuZGVyZXIoKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FY
SXNvbGF0ZWRPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRl
ZHRyZWUvQVhJc29sYXRlZE9iamVjdC5jcHAKaW5kZXggYTM0YWQ5NTBhZjYwLi41M2UxMGZhN2Fm
NjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVl
L0FYSXNvbGF0ZWRPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
aXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRPYmplY3QuY3BwCkBAIC0xNjExLDYgKzE2MTEsMjQgQEAg
Ym9vbCBBWElzb2xhdGVkT2JqZWN0OjpoYXNTYW1lU3R5bGUoY29uc3QgQVhDb3JlT2JqZWN0JiBv
dGhlck9iamVjdCkgY29uc3QKICAgICB9KTsKIH0KIAorc3RkOjpvcHRpb25hbDxDaGFyYWN0ZXJS
YW5nZT4gQVhJc29sYXRlZE9iamVjdDo6dGV4dElucHV0TWFya2VkUmFuZ2UoKSBjb25zdAorewor
ICAgIGF1dG8gcmFuZ2UgPSB0ZXh0SW5wdXRNYXJrZWRUZXh0TWFya2VyUmFuZ2UoKS5jaGFyYWN0
ZXJSYW5nZSgpOworICAgIGlmICghcmFuZ2UgfHwgIXJhbmdlLT5sZW5ndGgpCisgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICByZXR1cm4gcmFuZ2U7Cit9CisKK0FYVGV4dE1hcmtl
clJhbmdlIEFYSXNvbGF0ZWRPYmplY3Q6OnRleHRJbnB1dE1hcmtlZFRleHRNYXJrZXJSYW5nZSgp
IGNvbnN0Cit7CisgICAgYXV0byByYW5nZSA9IG9wdGlvbmFsQXR0cmlidXRlVmFsdWU8QVhJc29s
YXRlZFRleHRNYXJrZXJSYW5nZT4oQVhQcm9wZXJ0eU5hbWU6OlRleHRJbnB1dE1hcmtlZFRleHRN
YXJrZXJSYW5nZSk7CisgICAgaWYgKCFyYW5nZSB8fCByYW5nZS0+c3RhcnQgPj0gcmFuZ2UtPmVu
ZCkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIHJldHVybiB7IHRyZWUoKS0+dHJlZUlEKCks
IHJhbmdlLT5vYmplY3RJRCwgcmFuZ2UtPnN0YXJ0LCByYW5nZS0+ZW5kIH07Cit9CisKIC8vIFRo
ZSBhdHRyaWJ1dGUgdGhpcyB2YWx1ZSBpcyBleHBvc2VkIGFzIGlzIG5vdCB1c2VkIGJ5IFZvaWNl
T3ZlciBvciBhbnkgb3RoZXIgQVggY2xpZW50IG9uIG1hY09TLCBzbyB3ZSBpbnRlbnRpb25hbGx5
IGRvbid0IGNhY2hlIGl0LgogLy8gUmUtdmlzaXQgaWYgSVRNIGV4cGFuZHMgdG8gbW9yZSBwbGF0
Zm9ybXMsIG9yIGlmIEFYIGNsaWVudHMgbmVlZCB0byBzdGFydCB1c2luZyB0aGlzLgogU3RyaW5n
IEFYSXNvbGF0ZWRPYmplY3Q6OmxpbmtSZWxWYWx1ZSgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkT2JqZWN0Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkT2Jq
ZWN0LmgKaW5kZXggYzc5YzgwMGZiMmU0Li4yMzY0MmI4MzBiYTcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRPYmplY3QuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVk
T2JqZWN0LmgKQEAgLTQ1Nyw3ICs0NTcsOCBAQCBwcml2YXRlOgogICAgIGJvb2wgaGFzU2FtZVN0
eWxlKGNvbnN0IEFYQ29yZU9iamVjdCYpIGNvbnN0IG92ZXJyaWRlOwogICAgIGJvb2wgaGFzVW5k
ZXJsaW5lKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJv
cGVydHlOYW1lOjpIYXNVbmRlcmxpbmUpOyB9CiAgICAgYm9vbCBoYXNIaWdobGlnaHRpbmcoKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6
Okhhc0hpZ2hsaWdodGluZyk7IH0KLSAgICBzdGQ6Om9wdGlvbmFsPENoYXJhY3RlclJhbmdlPiB0
ZXh0SW5wdXRNYXJrZWRSYW5nZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG9wdGlvbmFsQXR0cmli
dXRlVmFsdWU8Q2hhcmFjdGVyUmFuZ2U+KEFYUHJvcGVydHlOYW1lOjpUZXh0SW5wdXRNYXJrZWRS
YW5nZSk7IH0KKyAgICBzdGQ6Om9wdGlvbmFsPENoYXJhY3RlclJhbmdlPiB0ZXh0SW5wdXRNYXJr
ZWRSYW5nZSgpIGNvbnN0IGZpbmFsOworICAgIEFYVGV4dE1hcmtlclJhbmdlIHRleHRJbnB1dE1h
cmtlZFRleHRNYXJrZXJSYW5nZSgpIGNvbnN0IGZpbmFsOwogICAgIEVsZW1lbnQqIGVsZW1lbnQo
KSBjb25zdCBvdmVycmlkZTsKICAgICBOb2RlKiBub2RlKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAg
UmVuZGVyT2JqZWN0KiByZW5kZXJlcigpIGNvbnN0IG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZFRyZWUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZFRy
ZWUuY3BwCmluZGV4IDE2MDkwMTQwOThlMS4uYjY3NTIwZDAxYzhhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkVHJlZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRl
ZFRyZWUuY3BwCkBAIC01ODAsMTMgKzU4MCwxMSBAQCB2b2lkIEFYSXNvbGF0ZWRUcmVlOjp1cGRh
dGVOb2RlUHJvcGVydGllcyhBWENvcmVPYmplY3QmIGF4T2JqZWN0LCBjb25zdCBWZWN0b3I8QQog
ICAgICAgICBjYXNlIEFYUHJvcGVydHlOYW1lOjpTdXBwb3J0c1NldFNpemU6CiAgICAgICAgICAg
ICBwcm9wZXJ0eU1hcC5zZXQoQVhQcm9wZXJ0eU5hbWU6OlN1cHBvcnRzU2V0U2l6ZSwgYXhPYmpl
Y3Quc3VwcG9ydHNTZXRTaXplKCkpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
QVhQcm9wZXJ0eU5hbWU6OlRleHRJbnB1dE1hcmtlZFJhbmdlOgotICAgICAgICAgICAgLy8gRklY
TUU6IFdlIHNob3VsZCBoYXZlIGEgbWVjaGFuaXNtIHRvIHJlbW92ZSBhIHByb3BlcnR5IGZyb20g
dGhlIG1hcCBmb3Igd2hlbiB0ZXh0SW5wdXRNYXJrZWRSYW5nZSBpcyBzdGQ6Om51bGxvcHQuCi0g
ICAgICAgICAgICBpZiAoYXV0byB0ZXh0SW5wdXRNYXJrZWRSYW5nZSA9IGF4T2JqZWN0LnRleHRJ
bnB1dE1hcmtlZFJhbmdlKCkpCi0gICAgICAgICAgICAgICAgcHJvcGVydHlNYXAuc2V0KEFYUHJv
cGVydHlOYW1lOjpUZXh0SW5wdXRNYXJrZWRSYW5nZSwgKnRleHRJbnB1dE1hcmtlZFJhbmdlKTsK
LSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBwcm9wZXJ0eU1hcC5zZXQoQVhQcm9w
ZXJ0eU5hbWU6OlRleHRJbnB1dE1hcmtlZFJhbmdlLCBudWxscHRyKTsKKyAgICAgICAgY2FzZSBB
WFByb3BlcnR5TmFtZTo6VGV4dElucHV0TWFya2VkVGV4dE1hcmtlclJhbmdlOiB7CisgICAgICAg
ICAgICBBWElzb2xhdGVkVGV4dE1hcmtlclJhbmdlIGlzb2xhdGVkUmFuZ2UgPSB7IGF4T2JqZWN0
LnRleHRJbnB1dE1hcmtlZFRleHRNYXJrZXJSYW5nZSgpIH07CisgICAgICAgICAgICBwcm9wZXJ0
eU1hcC5zZXQoQVhQcm9wZXJ0eU5hbWU6OlRleHRJbnB1dE1hcmtlZFRleHRNYXJrZXJSYW5nZSwg
aXNvbGF0ZWRSYW5nZSk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBj
YXNlIEFYUHJvcGVydHlOYW1lOjpVUkw6CiAgICAgICAgICAgICBwcm9wZXJ0eU1hcC5zZXQoQVhQ
cm9wZXJ0eU5hbWU6OlVSTCwgYXhPYmplY3QudXJsKCkuaXNvbGF0ZWRDb3B5KCkpOwogICAgICAg
ICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lz
b2xhdGVkdHJlZS9BWElzb2xhdGVkVHJlZS5oIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZFRyZWUuaAppbmRleCA2NGM0YWQ4M2ViYzQuLmEzZWI2
ZTQ4ZDJjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRl
ZHRyZWUvQVhJc29sYXRlZFRyZWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkVHJlZS5oCkBAIC01MCw2ICs1MCw3IEBAIGNsYXNzIEFY
T2JqZWN0Q2FjaGU7CiBjbGFzcyBBY2Nlc3NpYmlsaXR5T2JqZWN0OwogY2xhc3MgUGFnZTsKIGVu
dW0gY2xhc3MgQVhTdHJlYW1PcHRpb25zIDogdWludDhfdDsKK3N0cnVjdCBBWElzb2xhdGVkVGV4
dE1hcmtlclJhbmdlOwogCiBlbnVtIGNsYXNzIEFYUHJvcGVydHlOYW1lIDogdWludDE2X3Qgewog
ICAgIEFSSUFJc011bHRpbGluZSwKQEAgLTIyNiw3ICsyMjcsNyBAQCBlbnVtIGNsYXNzIEFYUHJv
cGVydHlOYW1lIDogdWludDE2X3QgewogICAgIFN1cHBvcnRzU2V0U2l6ZSwKICAgICBUYWJsZUxl
dmVsLAogICAgIFRleHRDb250ZW50LAotICAgIFRleHRJbnB1dE1hcmtlZFJhbmdlLAorICAgIFRl
eHRJbnB1dE1hcmtlZFRleHRNYXJrZXJSYW5nZSwKICAgICBUaXRsZSwKICAgICBUaXRsZUF0dHJp
YnV0ZVZhbHVlLAogICAgIFRpdGxlVUlFbGVtZW50LApAQCAtMjM5LDcgKzI0MCw3IEBAIGVudW0g
Y2xhc3MgQVhQcm9wZXJ0eU5hbWUgOiB1aW50MTZfdCB7CiAgICAgVmlzaWJsZVJvd3MsCiB9Owog
Ci11c2luZyBBWFByb3BlcnR5VmFsdWVWYXJpYW50ID0gc3RkOjp2YXJpYW50PHN0ZDo6bnVsbHB0
cl90LCBBWElELCBTdHJpbmcsIGJvb2wsIGludCwgdW5zaWduZWQsIGRvdWJsZSwgZmxvYXQsIHVp
bnQ2NF90LCBBY2Nlc3NpYmlsaXR5QnV0dG9uU3RhdGUsIENvbG9yLCBVUkwsIExheW91dFJlY3Qs
IEZsb2F0UG9pbnQsIEZsb2F0UmVjdCwgSW50UG9pbnQsIEludFJlY3QsIFBBTDo6U2Vzc2lvbklE
LCBzdGQ6OnBhaXI8dW5zaWduZWQsIHVuc2lnbmVkPiwgVmVjdG9yPEFjY2Vzc2liaWxpdHlUZXh0
PiwgVmVjdG9yPEFYSUQ+LCBWZWN0b3I8c3RkOjpwYWlyPEFYSUQsIEFYSUQ+PiwgVmVjdG9yPFN0
cmluZz4sIFBhdGgsIE9wdGlvblNldDxBWEFuY2VzdG9yRmxhZz4sIFJldGFpblB0cjxOU0F0dHJp
YnV0ZWRTdHJpbmc+LCBJbnNpZGVMaW5rLCBWZWN0b3I8VmVjdG9yPEFYSUQ+PiwgQ2hhcmFjdGVy
UmFuZ2U+OwordXNpbmcgQVhQcm9wZXJ0eVZhbHVlVmFyaWFudCA9IHN0ZDo6dmFyaWFudDxzdGQ6
Om51bGxwdHJfdCwgQVhJRCwgU3RyaW5nLCBib29sLCBpbnQsIHVuc2lnbmVkLCBkb3VibGUsIGZs
b2F0LCB1aW50NjRfdCwgQWNjZXNzaWJpbGl0eUJ1dHRvblN0YXRlLCBDb2xvciwgVVJMLCBMYXlv
dXRSZWN0LCBGbG9hdFBvaW50LCBGbG9hdFJlY3QsIEludFBvaW50LCBJbnRSZWN0LCBQQUw6OlNl
c3Npb25JRCwgc3RkOjpwYWlyPHVuc2lnbmVkLCB1bnNpZ25lZD4sIFZlY3RvcjxBY2Nlc3NpYmls
aXR5VGV4dD4sIFZlY3RvcjxBWElEPiwgVmVjdG9yPHN0ZDo6cGFpcjxBWElELCBBWElEPj4sIFZl
Y3RvcjxTdHJpbmc+LCBQYXRoLCBPcHRpb25TZXQ8QVhBbmNlc3RvckZsYWc+LCBSZXRhaW5QdHI8
TlNBdHRyaWJ1dGVkU3RyaW5nPiwgSW5zaWRlTGluaywgVmVjdG9yPFZlY3RvcjxBWElEPj4sIENo
YXJhY3RlclJhbmdlLCBBWElzb2xhdGVkVGV4dE1hcmtlclJhbmdlPjsKIHVzaW5nIEFYUHJvcGVy
dHlNYXAgPSBIYXNoTWFwPEFYUHJvcGVydHlOYW1lLCBBWFByb3BlcnR5VmFsdWVWYXJpYW50LCBJ
bnRIYXNoPEFYUHJvcGVydHlOYW1lPiwgV1RGOjpTdHJvbmdFbnVtSGFzaFRyYWl0czxBWFByb3Bl
cnR5TmFtZT4+OwogCiBzdHJ1Y3QgQVhQcm9wZXJ0eUNoYW5nZSB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9BWE9iamVjdENhY2hlTWFjLm1tIGIvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvQVhPYmplY3RDYWNoZU1hYy5tbQppbmRleCBiODg1
YTk3ZDczMjAuLjFkMTI2NGIwNTlkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9tYWMvQVhPYmplY3RDYWNoZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L21hYy9BWE9iamVjdENhY2hlTWFjLm1tCkBAIC0xMjcsNiArMTI3LDE0IEBACiAj
ZGVmaW5lIGtBWERyYWdnaW5nRGVzdGluYXRpb25EcmFnTm90QWNjZXB0ZWROb3RpZmljYXRpb24g
Q0ZTVFIoIkFYRHJhZ2dpbmdEZXN0aW5hdGlvbkRyYWdOb3RBY2NlcHRlZCIpCiAjZW5kaWYKIAor
I2lmbmRlZiBOU0FjY2Vzc2liaWxpdHlUZXh0SW5wdXRNYXJraW5nU2Vzc2lvbkJlZ2FuTm90aWZp
Y2F0aW9uCisjZGVmaW5lIE5TQWNjZXNzaWJpbGl0eVRleHRJbnB1dE1hcmtpbmdTZXNzaW9uQmVn
YW5Ob3RpZmljYXRpb24gQCJBWFRleHRJbnB1dE1hcmtpbmdTZXNzaW9uQmVnYW4iCisjZW5kaWYK
KworI2lmbmRlZiBOU0FjY2Vzc2liaWxpdHlUZXh0SW5wdXRNYXJraW5nU2Vzc2lvbkVuZGVkTm90
aWZpY2F0aW9uCisjZGVmaW5lIE5TQWNjZXNzaWJpbGl0eVRleHRJbnB1dE1hcmtpbmdTZXNzaW9u
RW5kZWROb3RpZmljYXRpb24gQCJBWFRleHRJbnB1dE1hcmtpbmdTZXNzaW9uRW5kZWQiCisjZW5k
aWYKKwogLy8gVmVyeSBsYXJnZSBzdHJpbmdzIGNhbiBuZWdhdGl2ZWx5IGltcGFjdCB0aGUgcGVy
Zm9ybWFuY2Ugb2Ygbm90aWZpY2F0aW9ucywgc28gdGhpcyBsZW5ndGggaXMgY2hvc2VuIHRvIHRy
eSB0byBmaXQgYW4gYXZlcmFnZSBwYXJhZ3JhcGggb3IgbGluZSBvZiB0ZXh0LCBidXQgbm90IGFs
bG93IHN0cmluZ3MgdG8gYmUgbGFyZ2UgZW5vdWdoIHRvIGh1cnQgcGVyZm9ybWFuY2UuCiBzdGF0
aWMgY29uc3QgTlNVSW50ZWdlciBBWFZhbHVlQ2hhbmdlVHJ1bmNhdGlvbkxlbmd0aCA9IDEwMDA7
CiAKQEAgLTQzMSw2ICs0MzksMTIgQEAgdm9pZCBBWE9iamVjdENhY2hlOjpwb3N0UGxhdGZvcm1O
b3RpZmljYXRpb24oQVhDb3JlT2JqZWN0KiBvYmplY3QsIEFYTm90aWZpY2F0aW8KICAgICBjYXNl
IEFYRHJhZ2dpbmdFeGl0ZWREcm9wWm9uZToKICAgICAgICAgbWFjTm90aWZpY2F0aW9uID0gKGlk
KWtBWERyYWdnaW5nRGVzdGluYXRpb25EcmFnTm90QWNjZXB0ZWROb3RpZmljYXRpb247CiAgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgQVhUZXh0SW5wdXRNYXJraW5nU2Vzc2lvbkJlZ2FuOgorICAg
ICAgICBtYWNOb3RpZmljYXRpb24gPSBOU0FjY2Vzc2liaWxpdHlUZXh0SW5wdXRNYXJraW5nU2Vz
c2lvbkJlZ2FuTm90aWZpY2F0aW9uOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFYVGV4dElu
cHV0TWFya2luZ1Nlc3Npb25FbmRlZDoKKyAgICAgICAgbWFjTm90aWZpY2F0aW9uID0gTlNBY2Nl
c3NpYmlsaXR5VGV4dElucHV0TWFya2luZ1Nlc3Npb25FbmRlZE5vdGlmaWNhdGlvbjsKKyAgICAg
ICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuOwogICAgIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL0FjY2Vzc2liaWxpdHlPYmplY3RN
YWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9BY2Nlc3NpYmlsaXR5T2Jq
ZWN0TWFjLm1tCmluZGV4IDQxMWMwNTI5OGJjYy4uNDA4MTU3NDljY2JjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9BY2Nlc3NpYmlsaXR5T2JqZWN0TWFjLm1t
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL0FjY2Vzc2liaWxpdHlPYmpl
Y3RNYWMubW0KQEAgLTY0NCwyMyArNjQ0LDMwIEBAIHN0YXRpYyB2b2lkIGF0dHJpYnV0ZWRTdHJp
bmdTZXRFbGVtZW50KE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcgKmF0dHJTdHJpbmcsIE5TCiAg
ICAgICAgIFthdHRyU3RyaW5nIGFkZEF0dHJpYnV0ZTphdHRyaWJ1dGUgdmFsdWU6KF9fYnJpZGdl
IGlkKWF4RWxlbWVudC5nZXQoKSByYW5nZTpyYW5nZV07CiB9CiAKLXN0YXRpYyB2b2lkIGF0dHJp
YnV0ZWRTdHJpbmdTZXRDb21wb3NpdGlvbkF0dHJpYnV0ZXMoTlNNdXRhYmxlQXR0cmlidXRlZFN0
cmluZyAqYXR0clN0cmluZywgTm9kZSYgbm9kZSkKK3N0YXRpYyB2b2lkIGF0dHJpYnV0ZWRTdHJp
bmdTZXRDb21wb3NpdGlvbkF0dHJpYnV0ZXMoTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyAqYXR0
clN0cmluZywgTm9kZSYgbm9kZSwgY29uc3QgU2ltcGxlUmFuZ2UmIHRleHRTaW1wbGVSYW5nZSkK
IHsKICNpZiBIQVZFKElOTElORV9QUkVESUNUSU9OUykKICAgICBhdXRvJiBlZGl0b3IgPSBub2Rl
LmRvY3VtZW50KCkuZWRpdG9yKCk7CiAgICAgaWYgKCZub2RlICE9IGVkaXRvci5jb21wb3NpdGlv
bk5vZGUoKSkKICAgICAgICAgcmV0dXJuOwogCisgICAgYXV0byBzY29wZSA9IG1ha2VSYW5nZVNl
bGVjdGluZ05vZGVDb250ZW50cyhub2RlKTsKKyAgICBhdXRvIHRleHRSYW5nZSA9IGNoYXJhY3Rl
clJhbmdlKHNjb3BlLCB0ZXh0U2ltcGxlUmFuZ2UpOworCiAgICAgYXV0byYgYW5ub3RhdGlvbnMg
PSBlZGl0b3IuY3VzdG9tQ29tcG9zaXRpb25Bbm5vdGF0aW9ucygpOwogICAgIGlmIChhdXRvIGl0
ID0gYW5ub3RhdGlvbnMuZmluZChOU1RleHRDb21wbGV0aW9uQXR0cmlidXRlTmFtZSk7IGl0ICE9
IGFubm90YXRpb25zLmVuZCgpKSB7Ci0gICAgICAgIGZvciAoYXV0byYgcmFuZ2UgOiBpdC0+dmFs
dWUpIHsKLSAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVkU3RyaW5nQ29udGFpbnNSYW5nZShhdHRy
U3RyaW5nLCByYW5nZSkpCi0gICAgICAgICAgICAgICAgYXR0cmlidXRlZFN0cmluZ1NldE51bWJl
cihhdHRyU3RyaW5nLCBOU0FjY2Vzc2liaWxpdHlUZXh0Q29tcGxldGlvbkF0dHJpYnV0ZSwgQFlF
UywgcmFuZ2UpOworICAgICAgICBmb3IgKGF1dG8mIGFubm90YXRpb25SYW5nZSA6IGl0LT52YWx1
ZSkgeworICAgICAgICAgICAgYXV0byBpbnRlcnNlY3Rpb25SYW5nZSA9IE5TSW50ZXJzZWN0aW9u
UmFuZ2UodGV4dFJhbmdlLCBhbm5vdGF0aW9uUmFuZ2UpOworICAgICAgICAgICAgaWYgKGludGVy
c2VjdGlvblJhbmdlLmxlbmd0aCkgeworICAgICAgICAgICAgICAgIGF1dG8gY29tcGxldGlvblJh
bmdlID0gTlNNYWtlUmFuZ2UoaW50ZXJzZWN0aW9uUmFuZ2UubG9jYXRpb24gLSB0ZXh0UmFuZ2Uu
bG9jYXRpb24sIGludGVyc2VjdGlvblJhbmdlLmxlbmd0aCk7CisgICAgICAgICAgICAgICAgYXR0
cmlidXRlZFN0cmluZ1NldE51bWJlcihhdHRyU3RyaW5nLCBOU0FjY2Vzc2liaWxpdHlUZXh0Q29t
cGxldGlvbkF0dHJpYnV0ZSwgQFlFUywgY29tcGxldGlvblJhbmdlKTsKKyAgICAgICAgICAgIH0K
ICAgICAgICAgfQogICAgIH0KICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGF0dHJTdHJpbmcpOwog
ICAgIFVOVVNFRF9QQVJBTShub2RlKTsKKyAgICBVTlVTRURfUEFSQU0odGV4dFNpbXBsZVJhbmdl
KTsKICNlbmRpZgogfQogCkBAIC03MTQsNyArNzIxLDcgQEAgdm9pZCBhdHRyaWJ1dGVkU3RyaW5n
U2V0U3BlbGxpbmcoTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyAqYXR0clN0cmluZywgTm9kZSYg
bm8KICAgICB9CiB9CiAKLVJldGFpblB0cjxOU0F0dHJpYnV0ZWRTdHJpbmc+IGF0dHJpYnV0ZWRT
dHJpbmdDcmVhdGUoTm9kZSogbm9kZSwgU3RyaW5nVmlldyB0ZXh0LCBBWENvcmVPYmplY3Q6OlNw
ZWxsQ2hlY2sgc3BlbGxDaGVjaykKK1JldGFpblB0cjxOU0F0dHJpYnV0ZWRTdHJpbmc+IGF0dHJp
YnV0ZWRTdHJpbmdDcmVhdGUoTm9kZSogbm9kZSwgU3RyaW5nVmlldyB0ZXh0LCBjb25zdCBTaW1w
bGVSYW5nZSYgdGV4dFJhbmdlLCBBWENvcmVPYmplY3Q6OlNwZWxsQ2hlY2sgc3BlbGxDaGVjaykK
IHsKICAgICBpZiAoIW5vZGUgfHwgIXRleHQubGVuZ3RoKCkpCiAgICAgICAgIHJldHVybiBuaWw7
CkBAIC03MzMsNyArNzQwLDcgQEAgUmV0YWluUHRyPE5TQXR0cmlidXRlZFN0cmluZz4gYXR0cmli
dXRlZFN0cmluZ0NyZWF0ZShOb2RlKiBub2RlLCBTdHJpbmdWaWV3IHRleHQKICAgICBhdHRyaWJ1
dGVkU3RyaW5nU2V0QmxvY2txdW90ZUxldmVsKHJlc3VsdC5nZXQoKSwgcmVuZGVyZXIuZ2V0KCks
IHJhbmdlKTsKICAgICBhdHRyaWJ1dGVkU3RyaW5nU2V0RXhwYW5kZWRUZXh0KHJlc3VsdC5nZXQo
KSwgcmVuZGVyZXIuZ2V0KCksIHJhbmdlKTsKICAgICBhdHRyaWJ1dGVkU3RyaW5nU2V0RWxlbWVu
dChyZXN1bHQuZ2V0KCksIE5TQWNjZXNzaWJpbGl0eUxpbmtUZXh0QXR0cmlidXRlLCBBY2Nlc3Np
YmlsaXR5T2JqZWN0OjphbmNob3JFbGVtZW50Rm9yTm9kZShub2RlKSwgcmFuZ2UpOwotICAgIGF0
dHJpYnV0ZWRTdHJpbmdTZXRDb21wb3NpdGlvbkF0dHJpYnV0ZXMocmVzdWx0LmdldCgpLCAqbm9k
ZSk7CisgICAgYXR0cmlidXRlZFN0cmluZ1NldENvbXBvc2l0aW9uQXR0cmlidXRlcyhyZXN1bHQu
Z2V0KCksICpub2RlLCB0ZXh0UmFuZ2UpOwogICAgIC8vIERvIHNwZWxsaW5nIGxhc3QgYmVjYXVz
ZSBpdCB0ZW5kcyB0byBicmVhayB1cCB0aGUgcmFuZ2UuCiAgICAgaWYgKHNwZWxsQ2hlY2sgPT0g
QVhDb3JlT2JqZWN0OjpTcGVsbENoZWNrOjpZZXMpIHsKICAgICAgICAgaWYgKEFYT2JqZWN0Q2Fj
aGU6OnNob3VsZFNwZWxsQ2hlY2soKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQmFzZS5oIGIvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJC
YXNlLmgKaW5kZXggMmM2MDY1MWRlNDY4Li5hZjAyZWI3ZGU1MmUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVy
QmFzZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2li
aWxpdHlPYmplY3RXcmFwcGVyQmFzZS5oCkBAIC01Myw3ICs1Myw3IEBAIHZvaWQgYXR0cmlidXRl
ZFN0cmluZ1NldE51bWJlcihOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nICosIE5TU3RyaW5nICos
IE5TTnVtYmVyCiB2b2lkIGF0dHJpYnV0ZWRTdHJpbmdTZXRGb250KE5TTXV0YWJsZUF0dHJpYnV0
ZWRTdHJpbmcgKiwgQ1RGb250UmVmLCBjb25zdCBOU1JhbmdlJik7CiB2b2lkIGF0dHJpYnV0ZWRT
dHJpbmdTZXRTcGVsbGluZyhOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nICosIE5vZGUmLCBTdHJp
bmdWaWV3LCBjb25zdCBOU1JhbmdlJik7CiB2b2lkIGF0dHJpYnV0ZWRTdHJpbmdTZXROZWVkc1Nw
ZWxsQ2hlY2soTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyAqLCBOb2RlJik7Ci1SZXRhaW5QdHI8
TlNBdHRyaWJ1dGVkU3RyaW5nPiBhdHRyaWJ1dGVkU3RyaW5nQ3JlYXRlKE5vZGUqLCBTdHJpbmdW
aWV3LCBBWENvcmVPYmplY3Q6OlNwZWxsQ2hlY2spOworUmV0YWluUHRyPE5TQXR0cmlidXRlZFN0
cmluZz4gYXR0cmlidXRlZFN0cmluZ0NyZWF0ZShOb2RlKiwgU3RyaW5nVmlldywgY29uc3QgU2lt
cGxlUmFuZ2UmLCBBWENvcmVPYmplY3Q6OlNwZWxsQ2hlY2spOwogfQogCiBAaW50ZXJmYWNlIFdl
YkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQmFzZSA6IE5TT2JqZWN0IHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RX
cmFwcGVyTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0KaW5kZXggMDA5N2FiMzk2MDU2Li5hYjY1MDFkMTAz
ODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tCkBAIC00ODgsNiAr
NDg4LDEwIEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogI2RlZmluZSBOU0FjY2Vzc2liaWxp
dHlUZXh0SW5wdXRNYXJrZWRSYW5nZUF0dHJpYnV0ZSBAIkFYVGV4dElucHV0TWFya2VkUmFuZ2Ui
CiAjZW5kaWYKIAorI2lmbmRlZiBOU0FjY2Vzc2liaWxpdHlUZXh0SW5wdXRNYXJrZWRUZXh0TWFy
a2VyUmFuZ2VBdHRyaWJ1dGUKKyNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5VGV4dElucHV0TWFya2Vk
VGV4dE1hcmtlclJhbmdlQXR0cmlidXRlIEAiQVhUZXh0SW5wdXRNYXJrZWRUZXh0TWFya2VyUmFu
Z2UiCisjZW5kaWYKKwogQGltcGxlbWVudGF0aW9uIFdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFw
cGVyCiAKIC0gKHZvaWQpZGV0YWNoCkBAIC05MTksNiArOTIzLDcgQEAgQUxMT1dfREVQUkVDQVRF
RF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAgICAgIE5TQWNjZXNzaWJpbGl0eUVkaXRhYmxlQW5j
ZXN0b3JBdHRyaWJ1dGUsCiAgICAgICAgIE5TQWNjZXNzaWJpbGl0eUhpZ2hlc3RFZGl0YWJsZUFu
Y2VzdG9yQXR0cmlidXRlLAogICAgICAgICBOU0FjY2Vzc2liaWxpdHlUZXh0SW5wdXRNYXJrZWRS
YW5nZUF0dHJpYnV0ZSwKKyAgICAgICAgTlNBY2Nlc3NpYmlsaXR5VGV4dElucHV0TWFya2VkVGV4
dE1hcmtlclJhbmdlQXR0cmlidXRlLAogICAgIF07CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
IHNwaW5CdXR0b25Db21tb25BdHRyaWJ1dGVzID0gW10gewogICAgICAgICBhdXRvIHRlbXBBcnJh
eSA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhBcnJheTphdHRyaWJ1
dGVzLmdldCgpLmdldCgpXSk7CkBAIC0yMjUzLDYgKzIyNTgsMTIgQEAgQUxMT1dfREVQUkVDQVRF
RF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAgICAgIHJldHVybiByYW5nZSA/IFtOU1ZhbHVlIHZh
bHVlV2l0aFJhbmdlOipyYW5nZV0gOiBuaWw7CiAgICAgfQogCisgICAgaWYgKFthdHRyaWJ1dGVO
YW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlUZXh0SW5wdXRNYXJrZWRUZXh0TWFy
a2VyUmFuZ2VBdHRyaWJ1dGVdKSB7CisgICAgICAgIGlmIChhdXRvIHJhbmdlID0gYmFja2luZ09i
amVjdC0+dGV4dElucHV0TWFya2VkVGV4dE1hcmtlclJhbmdlKCkpCisgICAgICAgICAgICByZXR1
cm4gKGlkKUFYVGV4dE1hcmtlclJhbmdlUmVmKHJhbmdlKTsKKyAgICAgICAgcmV0dXJuIG5pbDsK
KyAgICB9CisKICAgICByZXR1cm4gbmlsOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0VkaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAK
aW5kZXggOTRkOTM0NTBiYjMwLi5mYmY4ZDlmYzViZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRWRpdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRv
ci5jcHAKQEAgLTIxNzcsMTQgKzIxNzcsMTQgQEAgdm9pZCBFZGl0b3I6OnNldENvbXBvc2l0aW9u
KGNvbnN0IFN0cmluZyYgdGV4dCwgU2V0Q29tcG9zaXRpb25Nb2RlIG1vZGUpCiAgICAgZWxzZQog
ICAgICAgICBzZWxlY3RDb21wb3NpdGlvbigpOwogCi0gICAgYXV0byogcHJldmlvdXNDb21wb3Np
dGlvbk5vZGUgPSBjb21wb3NpdGlvbk5vZGUoKTsKKyAgICBSZWZQdHIgcHJldmlvdXNDb21wb3Np
dGlvbk5vZGUgPSBtX2NvbXBvc2l0aW9uTm9kZTsKICAgICBtX2NvbXBvc2l0aW9uTm9kZSA9IG51
bGxwdHI7CiAgICAgbV9jdXN0b21Db21wb3NpdGlvblVuZGVybGluZXMuY2xlYXIoKTsKICAgICBt
X2N1c3RvbUNvbXBvc2l0aW9uSGlnaGxpZ2h0cy5jbGVhcigpOwogICAgIG1fY3VzdG9tQ29tcG9z
aXRpb25Bbm5vdGF0aW9ucy5jbGVhcigpOwogCiAgICAgaWYgKGF1dG8qIGNhY2hlID0gbV9kb2N1
bWVudC5leGlzdGluZ0FYT2JqZWN0Q2FjaGUoKTsgY2FjaGUgJiYgcHJldmlvdXNDb21wb3NpdGlv
bk5vZGUpCi0gICAgICAgIGNhY2hlLT5vblRleHRDb21wb3NpdGlvbkNoYW5nZSgqcHJldmlvdXND
b21wb3NpdGlvbk5vZGUpOworICAgICAgICBjYWNoZS0+b25UZXh0Q29tcG9zaXRpb25DaGFuZ2Uo
KnByZXZpb3VzQ29tcG9zaXRpb25Ob2RlLCBBWE9iamVjdENhY2hlOjpDb21wb3NpdGlvblN0YXRl
OjpFbmRlZCwgZmFsc2UpOwogCiAgICAgaWYgKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNOb25l
KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTIyODIsNyArMjI4Miw3IEBAIHZvaWQgRWRpdG9yOjpz
ZXRDb21wb3NpdGlvbihjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFZlY3RvcjxDb21wb3NpdGlv
blVuZGVybGluCiAgICAgICAgICAgICB0YXJnZXQtPmRpc3BhdGNoRXZlbnQoQ29tcG9zaXRpb25F
dmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5jb21wb3NpdGlvbmVuZEV2ZW50LCBkb2N1bWVudCgp
LndpbmRvd1Byb3h5KCksIHRleHQpKTsKICAgICB9CiAKLSAgICBhdXRvKiBwcmV2aW91c0NvbXBv
c2l0aW9uTm9kZSA9IGNvbXBvc2l0aW9uTm9kZSgpOworICAgIFJlZlB0ciBwcmV2aW91c0NvbXBv
c2l0aW9uTm9kZSA9IG1fY29tcG9zaXRpb25Ob2RlOwogICAgIG1fY29tcG9zaXRpb25Ob2RlID0g
bnVsbHB0cjsKICAgICBtX2N1c3RvbUNvbXBvc2l0aW9uVW5kZXJsaW5lcy5jbGVhcigpOwogICAg
IG1fY3VzdG9tQ29tcG9zaXRpb25IaWdobGlnaHRzLmNsZWFyKCk7CkBAIC0yMzMwLDExICsyMzMw
LDE0IEBAIHZvaWQgRWRpdG9yOjpzZXRDb21wb3NpdGlvbihjb25zdCBTdHJpbmcmIHRleHQsIGNv
bnN0IFZlY3RvcjxDb21wb3NpdGlvblVuZGVybGluCiAgICAgfQogCiAgICAgaWYgKGF1dG8qIGNh
Y2hlID0gbV9kb2N1bWVudC5leGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSkgewotICAgICAgICBhdXRv
KiBjdXJyZW50Q29tcG9zaXRpb25Ob2RlID0gY29tcG9zaXRpb25Ob2RlKCk7Ci0gICAgICAgIGlm
IChwcmV2aW91c0NvbXBvc2l0aW9uTm9kZSAmJiBwcmV2aW91c0NvbXBvc2l0aW9uTm9kZSAhPSBj
dXJyZW50Q29tcG9zaXRpb25Ob2RlKQotICAgICAgICAgICAgY2FjaGUtPm9uVGV4dENvbXBvc2l0
aW9uQ2hhbmdlKCpwcmV2aW91c0NvbXBvc2l0aW9uTm9kZSk7Ci0gICAgICAgIGlmIChjdXJyZW50
Q29tcG9zaXRpb25Ob2RlKQotICAgICAgICAgICAgY2FjaGUtPm9uVGV4dENvbXBvc2l0aW9uQ2hh
bmdlKCpjdXJyZW50Q29tcG9zaXRpb25Ob2RlKTsKKyAgICAgICAgaWYgKHByZXZpb3VzQ29tcG9z
aXRpb25Ob2RlICYmIHByZXZpb3VzQ29tcG9zaXRpb25Ob2RlICE9IG1fY29tcG9zaXRpb25Ob2Rl
KSB7CisgICAgICAgICAgICBhdXRvIHN0YXRlID0gbV9jb21wb3NpdGlvbk5vZGUgPyBBWE9iamVj
dENhY2hlOjpDb21wb3NpdGlvblN0YXRlOjpJblByb2dyZXNzIDogQVhPYmplY3RDYWNoZTo6Q29t
cG9zaXRpb25TdGF0ZTo6RW5kZWQ7CisgICAgICAgICAgICBjYWNoZS0+b25UZXh0Q29tcG9zaXRp
b25DaGFuZ2UoKnByZXZpb3VzQ29tcG9zaXRpb25Ob2RlLCBzdGF0ZSwgdHJ1ZSk7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKG1fY29tcG9zaXRpb25Ob2RlKSB7CisgICAgICAgICAgICBhdXRvIHN0
YXRlID0gcHJldmlvdXNDb21wb3NpdGlvbk5vZGUgPyBBWE9iamVjdENhY2hlOjpDb21wb3NpdGlv
blN0YXRlOjpJblByb2dyZXNzIDogQVhPYmplY3RDYWNoZTo6Q29tcG9zaXRpb25TdGF0ZTo6U3Rh
cnRlZDsKKyAgICAgICAgICAgIGNhY2hlLT5vblRleHRDb21wb3NpdGlvbkNoYW5nZSgqbV9jb21w
b3NpdGlvbk5vZGUsIHN0YXRlLCB0cnVlKTsKKyAgICAgICAgfQogICAgIH0KIAogI2lmIFBMQVRG
T1JNKElPU19GQU1JTFkpICAgICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvVHlwaW5nQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1h
bmQuY3BwCmluZGV4IGM3ODlkZjZiOGQwZC4uMzhmMTE0ZTk3YWNjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAKQEAgLTI1Miw3ICsyNTIsMTIgQEAgdm9pZCBUeXBp
bmdDb21tYW5kOjppbnNlcnRUZXh0KERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgU3RyaW5nJiB0
ZXh0LCBjb25zdCBWaXMKICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldENvbXBvc2l0aW9u
VHlwZShjb21wb3NpdGlvblR5cGUpOwogICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+c2V0U2hv
dWxkUmV0YWluQXV0b2NvcnJlY3Rpb25JbmRpY2F0b3Iob3B0aW9ucy5jb250YWlucyhPcHRpb246
OlJldGFpbkF1dG9jb3JyZWN0aW9uSW5kaWNhdG9yKSk7CiAgICAgICAgIGxhc3RUeXBpbmdDb21t
YW5kLT5zZXRTaG91bGRQcmV2ZW50U3BlbGxDaGVja2luZyhvcHRpb25zLmNvbnRhaW5zKE9wdGlv
bjo6UHJldmVudFNwZWxsQ2hlY2tpbmcpKTsKLSAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPmlu
c2VydFRleHRBbmROb3RpZnlBY2Nlc3NpYmlsaXR5KG5ld1RleHQsIG9wdGlvbnMuY29udGFpbnMo
T3B0aW9uOjpTZWxlY3RJbnNlcnRlZFRleHQpKTsKKyNpZiBIQVZFKElOTElORV9QUkVESUNUSU9O
UykKKyAgICAgICAgaWYgKGNvbXBvc2l0aW9uVHlwZSAhPSBUZXh0Q29tcG9zaXRpb25UeXBlOjpO
b25lKQorICAgICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPmluc2VydFRleHQobmV3VGV4dCwg
b3B0aW9ucy5jb250YWlucyhPcHRpb246OlNlbGVjdEluc2VydGVkVGV4dCkpOworICAgICAgICBl
bHNlCisjZW5kaWYKKyAgICAgICAgICAgIGxhc3RUeXBpbmdDb21tYW5kLT5pbnNlcnRUZXh0QW5k
Tm90aWZ5QWNjZXNzaWJpbGl0eShuZXdUZXh0LCBvcHRpb25zLmNvbnRhaW5zKE9wdGlvbjo6U2Vs
ZWN0SW5zZXJ0ZWRUZXh0KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKZGlmZiAtLWdpdCBh
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuY3BwIGIvVG9vbHMv
RHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5jcHAKaW5kZXggMjdiY2JkYTll
NzU4Li44Y2NiMjM0MDJkZDcgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vz
c2liaWxpdHlVSUVsZW1lbnQuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2li
aWxpdHlVSUVsZW1lbnQuY3BwCkBAIC04NDYsNiArODQ2LDExIEBAIHN0YXRpYyBKU1ZhbHVlUmVm
IGluc2VydFRleHRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVu
Y3Rpb24sCiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlQm9vbGVhbihjb250ZXh0LCB0b0FYRWxlbWVu
dCh0aGlzT2JqZWN0KS0+aW5zZXJ0VGV4dCh0ZXh0LmdldCgpKSk7CiB9CiAKK3N0YXRpYyBKU1Zh
bHVlUmVmIHRleHRJbnB1dE1hcmtlZFRleHRNYXJrZXJSYW5nZUNhbGxiYWNrKEpTQ29udGV4dFJl
ZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwg
c2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFs
dWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICByZXR1cm4gQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJS
YW5nZTo6bWFrZUpTQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZShjb250ZXh0LCB0b0FYRWxl
bWVudCh0aGlzT2JqZWN0KS0+dGV4dElucHV0TWFya2VkVGV4dE1hcmtlclJhbmdlKCkpOworfQor
CiBzdGF0aWMgSlNWYWx1ZVJlZiBhdHRyaWJ1dGVkU3RyaW5nRm9yVGV4dE1hcmtlclJhbmdlQ29u
dGFpbnNBdHRyaWJ1dGVDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYg
ZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBj
b25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7CiAg
ICAgQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZSogbWFya2VyUmFuZ2UgPSAwOwpAQCAtMTc3
OSw2ICsxNzg0LDExIEBAIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aW5zZXJ0VGV4dChK
U1N0cmluZ1JlZikKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK0FjY2Vzc2liaWxpdHlUZXh0TWFy
a2VyUmFuZ2UgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGV4dElucHV0TWFya2VkVGV4dE1hcmtl
clJhbmdlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwogaW50IEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OnRleHRNYXJrZXJSYW5nZUxlbmd0aChBY2Nlc3NpYmlsaXR5VGV4dE1h
cmtlclJhbmdlKikKIHsKICAgICByZXR1cm4gMDsKQEAgLTIxMzMsNiArMjE0Myw3IEBAIEpTQ2xh
c3NSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Z2V0SlNDbGFzcygpCiAgICAgICAgIHsgIm1p
c3NwZWxsaW5nVGV4dE1hcmtlclJhbmdlIiwgbWlzc3BlbGxpbmdUZXh0TWFya2VyUmFuZ2VDYWxs
YmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRl
RG9udERlbGV0ZSB9LAogICAgICAgICB7ICJ0ZXh0TWFya2VyUmFuZ2VGb3JFbGVtZW50IiwgdGV4
dE1hcmtlclJhbmdlRm9yRWxlbWVudENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRP
bmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgInNlbGVj
dGVkVGV4dE1hcmtlclJhbmdlIiwgc2VsZWN0ZWRUZXh0TWFya2VyUmFuZ2VDYWxsYmFjaywga0pT
UHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0
ZSB9LAorICAgICAgICB7ICJ0ZXh0SW5wdXRNYXJrZWRUZXh0TWFya2VyUmFuZ2UiLCB0ZXh0SW5w
dXRNYXJrZWRUZXh0TWFya2VyUmFuZ2VDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFk
T25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7ICJyZXNl
dFNlbGVjdGVkVGV4dE1hcmtlclJhbmdlIiwgcmVzZXRTZWxlY3RlZFRleHRNYXJrZXJSYW5nZUNh
bGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1
dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgInJlcGxhY2VUZXh0SW5SYW5nZSIsIHJlcGxhY2VU
ZXh0SW5SYW5nZUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJv
cGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgImluc2VydFRleHQiLCBpbnNl
cnRUZXh0Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2li
aWxpdHlVSUVsZW1lbnQuaAppbmRleCA0ZGY5NzA5ZTRhOGYuLmFkODc0YmRmMjYxMyAxMDA2NDQK
LS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oCisrKyBi
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaApAQCAtMzAwLDYg
KzMwMCw3IEBAIHB1YmxpYzoKICAgICBib29sIHNldFNlbGVjdGVkVGV4dE1hcmtlclJhbmdlKEFj
Y2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2UqKTsKICAgICBib29sIHJlcGxhY2VUZXh0SW5SYW5n
ZShKU1N0cmluZ1JlZiwgaW50IHBvc2l0aW9uLCBpbnQgbGVuZ3RoKTsKICAgICBib29sIGluc2Vy
dFRleHQoSlNTdHJpbmdSZWYpOworICAgIEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2UgdGV4
dElucHV0TWFya2VkVGV4dE1hcmtlclJhbmdlKCkgY29uc3Q7CiAKICAgICBKU1JldGFpblB0cjxK
U1N0cmluZ1JlZj4gc3RyaW5nRm9yVGV4dE1hcmtlclJhbmdlKEFjY2Vzc2liaWxpdHlUZXh0TWFy
a2VyUmFuZ2UqKTsKICAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gYXR0cmlidXRlZFN0cmlu
Z0ZvclRleHRNYXJrZXJSYW5nZShBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlKik7CmRpZmYg
LS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9pb3MvQWNjZXNzaWJpbGl0eVVJRWxlbWVudElP
Uy5tbSBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2lvcy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50SU9T
Lm1tCmluZGV4IDBmY2E0ODk0YWZlZC4uOGQ3NjgyODhhZGI1IDEwMDY0NAotLS0gYS9Ub29scy9E
dW1wUmVuZGVyVHJlZS9pb3MvQWNjZXNzaWJpbGl0eVVJRWxlbWVudElPUy5tbQorKysgYi9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9pb3MvQWNjZXNzaWJpbGl0eVVJRWxlbWVudElPUy5tbQpAQCAtNDk5
LDYgKzQ5OSwxMSBAQCB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJlc2V0U2VsZWN0ZWRU
ZXh0TWFya2VyUmFuZ2UoKQogewogfQogCitBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlIEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRleHRJbnB1dE1hcmtlZFRleHRNYXJrZXJSYW5nZSgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKIGludCBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50Ojp0ZXh0TWFya2VyUmFuZ2VMZW5ndGgoQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZSog
cmFuZ2UpCiB7CiAgICAgaWQgdGV4dE1hcmtlcnMgPSByYW5nZS0+cGxhdGZvcm1UZXh0TWFya2Vy
UmFuZ2UoKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmls
aXR5VUlFbGVtZW50TWFjLm1tIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2liaWxp
dHlVSUVsZW1lbnRNYWMubW0KaW5kZXggNGFlNDY5ODY1NDQ0Li4xOThmNGY2MzJhOGEgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFj
Lm1tCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50
TWFjLm1tCkBAIC03OSw2ICs3OSwxMCBAQAogI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlUZXh0SW5w
dXRNYXJrZWRSYW5nZUF0dHJpYnV0ZSBAIkFYVGV4dElucHV0TWFya2VkUmFuZ2UiCiAjZW5kaWYK
IAorI2lmbmRlZiBOU0FjY2Vzc2liaWxpdHlUZXh0SW5wdXRNYXJrZWRUZXh0TWFya2VyUmFuZ2VB
dHRyaWJ1dGUKKyNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5VGV4dElucHV0TWFya2VkVGV4dE1hcmtl
clJhbmdlQXR0cmlidXRlIEAiQVhUZXh0SW5wdXRNYXJrZWRUZXh0TWFya2VyUmFuZ2UiCisjZW5k
aWYKKwogdHlwZWRlZiB2b2lkICgqQVhQb3N0ZWROb3RpZmljYXRpb25DYWxsYmFjaykoaWQgZWxl
bWVudCwgTlNTdHJpbmcqIG5vdGlmaWNhdGlvbiwgdm9pZCogY29udGV4dCk7CiAKIEBpbnRlcmZh
Y2UgTlNPYmplY3QgKFdlYktpdEFjY2Vzc2liaWxpdHlBZGRpdGlvbnMpCkBAIC0xNzIsNyArMTc2
LDkgQEAgc3RhdGljIE5TU3RyaW5nKiBhdHRyaWJ1dGVzT2ZFbGVtZW50KGlkIGFjY2Vzc2liaWxp
dHlPYmplY3QpCiAgICAgICAgIGlkIHZhbHVlT2JqZWN0ID0gW2FjY2Vzc2liaWxpdHlPYmplY3Qg
YWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOmF0dHJpYnV0ZV07CiAgICAgICAgIE5TU3RyaW5n
KiB2YWx1ZSA9IGRlc2NyaXB0aW9uT2ZWYWx1ZSh2YWx1ZU9iamVjdCwgYWNjZXNzaWJpbGl0eU9i
amVjdCk7CiAKLSAgICAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNz
aWJpbGl0eVRleHRJbnB1dE1hcmtlZFJhbmdlQXR0cmlidXRlXSAmJiAhdmFsdWUpCisgICAgICAg
IGlmICghdmFsdWUKKyAgICAgICAgICAgICYmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpO
U0FjY2Vzc2liaWxpdHlUZXh0SW5wdXRNYXJrZWRSYW5nZUF0dHJpYnV0ZV0KKyAgICAgICAgICAg
ICAgICB8fCBbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlUZXh0SW5w
dXRNYXJrZWRUZXh0TWFya2VyUmFuZ2VBdHRyaWJ1dGVdKSkKICAgICAgICAgICAgIGNvbnRpbnVl
OwogCiAgICAgICAgIFthdHRyaWJ1dGVzU3RyaW5nIGFwcGVuZEZvcm1hdDpAIiVAOiAlQFxuIiwg
YXR0cmlidXRlLCB2YWx1ZV07CkBAIC0xNzU5LDYgKzE3NjUsMTYgQEAgYm9vbCBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjppbnNlcnRUZXh0KEpTU3RyaW5nUmVmIHRleHQpCiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCitBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlIEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OnRleHRJbnB1dE1hcmtlZFRleHRNYXJrZXJSYW5nZSgpIGNvbnN0Cit7CisgICAgQkVH
SU5fQVhfT0JKQ19FWENFUFRJT05TCisgICAgaWQgdGV4dE1hcmtlclJhbmdlID0gW21fZWxlbWVu
dCBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6TlNBY2Nlc3NpYmlsaXR5VGV4dElucHV0TWFy
a2VkVGV4dE1hcmtlclJhbmdlQXR0cmlidXRlXTsKKyAgICByZXR1cm4gQWNjZXNzaWJpbGl0eVRl
eHRNYXJrZXJSYW5nZSh0ZXh0TWFya2VyUmFuZ2UpOworICAgIEVORF9BWF9PQkpDX0VYQ0VQVElP
TlMKKworICAgIHJldHVybiBudWxscHRyOworfQorCiBpbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6dGV4dE1hcmtlclJhbmdlTGVuZ3RoKEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2UqIHJh
bmdlKQogewogICAgIEJFR0lOX0FYX09CSkNfRVhDRVBUSU9OUwpkaWZmIC0tZ2l0IGEvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmNw
cCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudC5jcHAKaW5kZXggZWZmYTFiNTY1Nzk2Li5mMzg2MGFkNmVlNGEgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eVVJRWxl
bWVudC5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9BY2Nl
c3NpYmlsaXR5VUlFbGVtZW50LmNwcApAQCAtMTA5LDYgKzEwOSw3IEBAIGludCBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjpsaW5lSW5kZXhGb3JUZXh0TWFya2VyKEFjY2Vzc2liaWxpdHlUZXh0TWFy
a2VyKikgY29uCiBSZWZQdHI8QWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZT4gQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6dGV4dE1hcmtlclJhbmdlRm9yUmFuZ2UodW5zaWduZWQsIHVuc2lnbmVk
KSB7IHJldHVybiBudWxscHRyOyB9CiBSZWZQdHI8QWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5n
ZT4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2VsZWN0ZWRUZXh0TWFya2VyUmFuZ2UoKSB7IHJl
dHVybiBudWxscHRyOyB9CiB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJlc2V0U2VsZWN0
ZWRUZXh0TWFya2VyUmFuZ2UoKSB7IH0KK1JlZlB0cjxBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJh
bmdlPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0ZXh0SW5wdXRNYXJrZWRUZXh0TWFya2VyUmFu
Z2UoKSBjb25zdCB7IHJldHVybiBudWxscHRyOyB9CiB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OnNldEJvb2xBdHRyaWJ1dGVWYWx1ZShKU1N0cmluZ1JlZiwgYm9vbCkgeyB9CiB2b2lkIEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNldFZhbHVlKEpTU3RyaW5nUmVmKSB7IH0KIEpTVmFsdWVS
ZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2VhcmNoVGV4dFdpdGhDcml0ZXJpYShKU0NvbnRl
eHRSZWYsIEpTVmFsdWVSZWYsIEpTU3RyaW5nUmVmLCBKU1N0cmluZ1JlZikgeyByZXR1cm4gbnVs
bHB0cjsgfQpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRs
ZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVj
dGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaAppbmRleCA3Mzg0YjkxMTg4ZjAuLjQ0
ZjNjNTcxODgxNCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1
bmRsZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmgKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9JbmplY3RlZEJ1bmRsZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmgKQEAgLTMzOSw2ICszMzks
NyBAQCBwdWJsaWM6CiAgICAgdm9pZCByZXNldFNlbGVjdGVkVGV4dE1hcmtlclJhbmdlKCk7CiAg
ICAgYm9vbCByZXBsYWNlVGV4dEluUmFuZ2UoSlNTdHJpbmdSZWYsIGludCBwb3NpdGlvbiwgaW50
IGxlbmd0aCk7CiAgICAgYm9vbCBpbnNlcnRUZXh0KEpTU3RyaW5nUmVmKTsKKyAgICBSZWZQdHI8
QWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZT4gdGV4dElucHV0TWFya2VkVGV4dE1hcmtlclJh
bmdlKCkgY29uc3Q7CiAgICAgUmVmUHRyPEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyPiBzdGFydFRl
eHRNYXJrZXJGb3JUZXh0TWFya2VyUmFuZ2UoQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZSop
OwogICAgIFJlZlB0cjxBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcj4gZW5kVGV4dE1hcmtlckZvclRl
eHRNYXJrZXJSYW5nZShBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlKik7CiAgICAgUmVmUHRy
PEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyPiBlbmRUZXh0TWFya2VyRm9yQm91bmRzKGludCB4LCBp
bnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5p
ZGwgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL0FjY2Vz
c2liaWxpdHlVSUVsZW1lbnQuaWRsCmluZGV4IGIxMDI5ZDMxNjZlOC4uOTIyZTEyNDJjY2MwIDEw
MDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdz
L0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaWRsCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIv
SW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5pZGwKQEAgLTI0
MSw2ICsyNDEsNyBAQAogICAgIHVuZGVmaW5lZCByZXNldFNlbGVjdGVkVGV4dE1hcmtlclJhbmdl
KCk7CiAgICAgYm9vbGVhbiByZXBsYWNlVGV4dEluUmFuZ2UoRE9NU3RyaW5nIHN0cmluZywgbG9u
ZyBwb3NpdGlvbiwgbG9uZyBsZW5ndGgpOwogICAgIGJvb2xlYW4gaW5zZXJ0VGV4dChET01TdHJp
bmcgdGV4dCk7CisgICAgQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZSB0ZXh0SW5wdXRNYXJr
ZWRUZXh0TWFya2VyUmFuZ2UoKTsKICAgICBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciBzdGFydFRl
eHRNYXJrZXJGb3JUZXh0TWFya2VyUmFuZ2UoQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZSBy
YW5nZSk7CiAgICAgQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgZW5kVGV4dE1hcmtlckZvclRleHRN
YXJrZXJSYW5nZShBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlIHJhbmdlKTsKICAgICBBY2Nl
c3NpYmlsaXR5VGV4dE1hcmtlciBlbmRUZXh0TWFya2VyRm9yQm91bmRzKGxvbmcgeCwgbG9uZyB5
LCBsb25nIHdpZHRoLCBsb25nIGhlaWdodCk7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL0luamVjdGVkQnVuZGxlL21hYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tIGIv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudE1hYy5tbQppbmRleCAyYjQzZWVmM2JiNjguLjIxOWI3YTk1MzI4NCAxMDA2NDQKLS0t
IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0
eVVJRWxlbWVudE1hYy5tbQorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL21hYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tCkBAIC04NSw2ICs4NSwxMCBAQAog
I2RlZmluZSBOU0FjY2Vzc2liaWxpdHlUZXh0SW5wdXRNYXJrZWRSYW5nZUF0dHJpYnV0ZSBAIkFY
VGV4dElucHV0TWFya2VkUmFuZ2UiCiAjZW5kaWYKIAorI2lmbmRlZiBOU0FjY2Vzc2liaWxpdHlU
ZXh0SW5wdXRNYXJrZWRUZXh0TWFya2VyUmFuZ2VBdHRyaWJ1dGUKKyNkZWZpbmUgTlNBY2Nlc3Np
YmlsaXR5VGV4dElucHV0TWFya2VkVGV4dE1hcmtlclJhbmdlQXR0cmlidXRlIEAiQVhUZXh0SW5w
dXRNYXJrZWRUZXh0TWFya2VyUmFuZ2UiCisjZW5kaWYKKwogdHlwZWRlZiB2b2lkICgqQVhQb3N0
ZWROb3RpZmljYXRpb25DYWxsYmFjaykoaWQgZWxlbWVudCwgTlNTdHJpbmcqIG5vdGlmaWNhdGlv
biwgdm9pZCogY29udGV4dCk7CiAKIEBpbnRlcmZhY2UgTlNPYmplY3QgKFdlYktpdEFjY2Vzc2li
aWxpdHlBZGRpdGlvbnMpCkBAIC02MzMsNyArNjM3LDkgQEAgSlNSZXRhaW5QdHI8SlNTdHJpbmdS
ZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFsbEF0dHJpYnV0ZXMoKQogCiAgICAgICAgIGF1
dG8gdmFsdWUgPSBkZXNjcmlwdGlvbk9mVmFsdWUoYXR0cmlidXRlVmFsdWUoYXR0cmlidXRlKS5n
ZXQoKSk7CiAKLSAgICAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNz
aWJpbGl0eVRleHRJbnB1dE1hcmtlZFJhbmdlQXR0cmlidXRlXSAmJiAhdmFsdWUpCisgICAgICAg
IGlmICghdmFsdWUKKyAgICAgICAgICAgICYmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpO
U0FjY2Vzc2liaWxpdHlUZXh0SW5wdXRNYXJrZWRSYW5nZUF0dHJpYnV0ZV0KKyAgICAgICAgICAg
ICAgICB8fCBbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlUZXh0SW5w
dXRNYXJrZWRUZXh0TWFya2VyUmFuZ2VBdHRyaWJ1dGVdKSkKICAgICAgICAgICAgIGNvbnRpbnVl
OwogCiAgICAgICAgIFt2YWx1ZXMgYXBwZW5kRm9ybWF0OkAiJUA6ICVAXG4iLCBhdHRyaWJ1dGUs
IHZhbHVlLmdldCgpXTsKQEAgLTIwMTIsNiArMjAxOCwxNiBAQCB2b2lkIEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OnJlc2V0U2VsZWN0ZWRUZXh0TWFya2VyUmFuZ2UoKQogICAgIHNldEF0dHJpYnV0
ZVZhbHVlKG1fZWxlbWVudC5nZXRBdXRvcmVsZWFzZWQoKSwgTlNBY2Nlc3NpYmlsaXR5U2VsZWN0
ZWRUZXh0TWFya2VyUmFuZ2VBdHRyaWJ1dGUsIHRleHRNYXJrZXJSYW5nZS5nZXQoKSwgdHJ1ZSk7
CiB9CiAKK1JlZlB0cjxBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlPiBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50Ojp0ZXh0SW5wdXRNYXJrZWRUZXh0TWFya2VyUmFuZ2UoKSBjb25zdAoreworICAg
IEJFR0lOX0FYX09CSkNfRVhDRVBUSU9OUworICAgIGF1dG8gdGV4dE1hcmtlclJhbmdlID0gYXR0
cmlidXRlVmFsdWUoTlNBY2Nlc3NpYmlsaXR5VGV4dElucHV0TWFya2VkVGV4dE1hcmtlclJhbmdl
QXR0cmlidXRlKTsKKyAgICByZXR1cm4gQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZTo6Y3Jl
YXRlKHRleHRNYXJrZXJSYW5nZS5nZXQoKSk7CisgICAgRU5EX0FYX09CSkNfRVhDRVBUSU9OUwor
CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKIFJlZlB0cjxBY2Nlc3NpYmlsaXR5VGV4dE1hcmtl
cj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c3RhcnRUZXh0TWFya2VyRm9yVGV4dE1hcmtlclJh
bmdlKEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2UqIHJhbmdlKQogewogICAgIGlmICghcmFu
Z2UpCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy9hdHRyaWJ1dGVk
LXN0cmluZy9hdHRyaWJ1dGVkLXN0cmluZy1oYXMtY29tcGxldGlvbi1hbm5vdGF0aW9uLmh0bWwg
Yi9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy9hdHRyaWJ1dGVkLXN0cmluZy9hdHRyaWJ1
dGVkLXN0cmluZy1oYXMtY29tcGxldGlvbi1hbm5vdGF0aW9uLmh0bWwKaW5kZXggNzZlNGUyM2Ri
NWUyLi5mNTAwZmUwZjUyN2UgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkv
bWFjL2F0dHJpYnV0ZWQtc3RyaW5nL2F0dHJpYnV0ZWQtc3RyaW5nLWhhcy1jb21wbGV0aW9uLWFu
bm90YXRpb24uaHRtbAorKysgYi9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy9hdHRyaWJ1
dGVkLXN0cmluZy9hdHRyaWJ1dGVkLXN0cmluZy1oYXMtY29tcGxldGlvbi1hbm5vdGF0aW9uLmh0
bWwKQEAgLTEzLDE1ICsxMywxNyBAQAogICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSBhY2Nlc3Np
YmlsaXR5Q29udHJvbGxlci5hY2Nlc3NpYmxlRWxlbWVudEJ5SWQoImVkaXRhYmxlIik7CiAKICAg
ICAgICAgICAgIC8vIFRlc3Qgd2l0aCBjb21wb3NpdGlvbiBhbmQgbm8gYXR0cmlidXRlcwotICAg
ICAgICAgICAgdGV4dElucHV0Q29udHJvbGxlci5zZXRNYXJrZWRUZXh0KCJ0ZXN0aW5nIik7Ci0g
ICAgICAgICAgICB2YXIgYXR0clN0cmluZyA9IGVsZW1lbnQuYXR0cmlidXRlZFN0cmluZ0ZvclJh
bmdlKDAsIDcpOworICAgICAgICAgICAgdGV4dElucHV0Q29udHJvbGxlci5zZXRNYXJrZWRUZXh0
KCJ0ZXN0Iik7CisgICAgICAgICAgICB2YXIgYXR0clN0cmluZyA9IGVsZW1lbnQuYXR0cmlidXRl
ZFN0cmluZ0ZvclJhbmdlKDAsIDQpOwogICAgICAgICAgICAgc2hvdWxkQmUoImF0dHJTdHJpbmcu
aW5kZXhPZignQVhUZXh0Q29tcGxldGlvbiA9IDEnKSIsICItMSIpOwogCiAgICAgICAgICAgICAv
LyBUZXN0IHdpdGggY29tcG9zaXRpb24gYW5kIGF0dHJpYnV0ZXMKLSAgICAgICAgICAgIHRleHRJ
bnB1dENvbnRyb2xsZXIuc2V0TWFya2VkVGV4dCgiZmF2b3JpdGUiLCAwLCA4LCBmYWxzZSwgdW5k
ZWZpbmVkLCBbCi0gICAgICAgICAgICAgICAgeyBmcm9tOiAiNCIsIGxlbmd0aDogIjQiLCBhbm5v
dGF0aW9uOiAiTlNUZXh0Q29tcGxldGlvbiIgfQorICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9
ICIgbWVzc2FnZSI7CisgICAgICAgICAgICB0ZXh0SW5wdXRDb250cm9sbGVyLnVubWFya1RleHQo
KTsKKyAgICAgICAgICAgIHRleHRJbnB1dENvbnRyb2xsZXIuc2V0TWFya2VkVGV4dChtZXNzYWdl
LCA0LCBtZXNzYWdlLmxlbmd0aCwgZmFsc2UsIHVuZGVmaW5lZCwgWworICAgICAgICAgICAgICAg
IHsgZnJvbTogIjQiLCBsZW5ndGg6IG1lc3NhZ2UubGVuZ3RoLCBhbm5vdGF0aW9uOiAiTlNUZXh0
Q29tcGxldGlvbiIgfQogICAgICAgICAgICAgXSk7Ci0gICAgICAgICAgICBhdHRyU3RyaW5nID0g
ZWxlbWVudC5hdHRyaWJ1dGVkU3RyaW5nRm9yUmFuZ2UoMCwgOCk7CisgICAgICAgICAgICBhdHRy
U3RyaW5nID0gZWxlbWVudC5hdHRyaWJ1dGVkU3RyaW5nRm9yUmFuZ2UoMCwgNCArIG1lc3NhZ2Uu
bGVuZ3RoKTsKICAgICAgICAgICAgIHNob3VsZEJlVHJ1ZSgiYXR0clN0cmluZy5pbmRleE9mKCdB
WFRleHRDb21wbGV0aW9uID0gMScpICE9IC0xIik7CiAgICAgICAgIH0KICAgICA8L3NjcmlwdD4K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL3RleHQtaW5wdXQtbWFy
a2VkLXJhbmdlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL3Rl
eHQtaW5wdXQtbWFya2VkLXJhbmdlLWV4cGVjdGVkLnR4dAppbmRleCAxMzMwMjZhMjg5ODMuLjQ2
NWY4MzVjNGYwNiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvdGV4
dC1pbnB1dC1tYXJrZWQtcmFuZ2UtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2FjY2Vz
c2liaWxpdHkvbWFjL3RleHQtaW5wdXQtbWFya2VkLXJhbmdlLWV4cGVjdGVkLnR4dApAQCAtNiw3
ICs2LDcgQEAgT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNz
YWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUKIFBBU1MgIWVsZW1lbnQudGV4dElucHV0
TWFya2VkUmFuZ2UgaXMgdHJ1ZQogUEFTUyBlbGVtZW50LnRleHRJbnB1dE1hcmtlZFJhbmdlIGlz
ICd7MCwgNH0nCiBQQVNTICFlbGVtZW50LnRleHRJbnB1dE1hcmtlZFJhbmdlIGlzIHRydWUKLVBB
U1MgZWxlbWVudC50ZXh0SW5wdXRNYXJrZWRSYW5nZSBpcyAnezAsIDV9JworUEFTUyBlbGVtZW50
LnRleHRJbnB1dE1hcmtlZFJhbmdlIGlzICd7MSwgNX0nCiBQQVNTIHN1Y2Nlc3NmdWxseVBhcnNl
ZCBpcyB0cnVlCiAKIFRFU1QgQ09NUExFVEUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2FjY2Vz
c2liaWxpdHkvbWFjL3RleHQtaW5wdXQtbWFya2VkLXJhbmdlLmh0bWwgYi9MYXlvdXRUZXN0cy9h
Y2Nlc3NpYmlsaXR5L21hYy90ZXh0LWlucHV0LW1hcmtlZC1yYW5nZS5odG1sCmluZGV4IDhlOThk
NjBiMzZiMi4uMzgwNDA1NGNmZWFlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9hY2Nlc3NpYmls
aXR5L21hYy90ZXh0LWlucHV0LW1hcmtlZC1yYW5nZS5odG1sCisrKyBiL0xheW91dFRlc3RzL2Fj
Y2Vzc2liaWxpdHkvbWFjL3RleHQtaW5wdXQtbWFya2VkLXJhbmdlLmh0bWwKQEAgLTExLDEyICsx
MSwxNSBAQAogICAgICAgICBpZiAod2luZG93LnRleHRJbnB1dENvbnRyb2xsZXIgJiYgd2luZG93
LmFjY2Vzc2liaWxpdHlDb250cm9sbGVyKSB7CiAgICAgICAgICAgICB2YXIgZWxlbWVudCA9IGFj
Y2Vzc2liaWxpdHlDb250cm9sbGVyLmFjY2Vzc2libGVFbGVtZW50QnlJZCgiZWRpdGFibGUiKTsK
ICAgICAgICAgICAgIHNob3VsZEJlVHJ1ZSgiIWVsZW1lbnQudGV4dElucHV0TWFya2VkUmFuZ2Ui
KTsKKyAgICAgICAgICAgIAogICAgICAgICAgICAgdGV4dElucHV0Q29udHJvbGxlci5zZXRNYXJr
ZWRUZXh0KCJ0ZXN0IiwgMSwgMCk7CiAgICAgICAgICAgICBzaG91bGRCZSgiZWxlbWVudC50ZXh0
SW5wdXRNYXJrZWRSYW5nZSIsICInezAsIDR9JyIpOworICAgICAgICAgICAgCiAgICAgICAgICAg
ICB0ZXh0SW5wdXRDb250cm9sbGVyLmluc2VydFRleHQoInQiKTsKICAgICAgICAgICAgIHNob3Vs
ZEJlVHJ1ZSgiIWVsZW1lbnQudGV4dElucHV0TWFya2VkUmFuZ2UiKTsKKyAgICAgICAgICAgIAog
ICAgICAgICAgICAgdGV4dElucHV0Q29udHJvbGxlci5zZXRNYXJrZWRUZXh0KCJ0ZXN0MiIsIDEs
IDApOwotICAgICAgICAgICAgc2hvdWxkQmUoImVsZW1lbnQudGV4dElucHV0TWFya2VkUmFuZ2Ui
LCAiJ3swLCA1fSciKTsKKyAgICAgICAgICAgIHNob3VsZEJlKCJlbGVtZW50LnRleHRJbnB1dE1h
cmtlZFJhbmdlIiwgIid7MSwgNX0nIik7CiAgICAgICAgIH0KICAgICA8L3NjcmlwdD4KIDwvYm9k
eT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL3RleHQtaW5wdXQt
bWFya2VkLXRleHQtbWFya2VyLXJhbmdlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2FjY2Vz
c2liaWxpdHkvbWFjL3RleHQtaW5wdXQtbWFya2VkLXRleHQtbWFya2VyLXJhbmdlLWV4cGVjdGVk
LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjA3OThiMDFjMDVm
MgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL3RleHQt
aW5wdXQtbWFya2VkLXRleHQtbWFya2VyLXJhbmdlLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDE1
IEBACitUaGlzIHRlc3QgZW5zdXJlcyB0aGF0IHRoZSBpbnB1dCBtZXRob2QgbWFya2VkIHJhbmdl
IGlzIGF2YWlsYWJsZSB0byBhY2Nlc3NpYmlsaXR5IGNsaWVudHMgYXMgdGV4dCBtYXJrZXIgcmFu
Z2UuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2Fn
ZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTICF0ZXh0IGlzIHRydWUK
K1BBU1MgdGV4dCBpcyAndGVzdCcKK1BBU1MgIXRleHQgaXMgdHJ1ZQorUEFTUyBlbGVtZW50LnN0
cmluZ1ZhbHVlIGlzICdBWFZhbHVlOiB0ZXN0JworUEFTUyB0ZXh0IGlzICcgbWVzc2FnZScKK1BB
U1MgZWxlbWVudC5zdHJpbmdWYWx1ZSBpcyAnQVhWYWx1ZTogdGVzdCBtZXNzYWdlJworUEFTUyBz
dWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL3RleHQtaW5wdXQtbWFya2VkLXRleHQtbWFy
a2VyLXJhbmdlLmh0bWwgYi9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy90ZXh0LWlucHV0
LW1hcmtlZC10ZXh0LW1hcmtlci1yYW5nZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMC4uMjI5NzMzNGI3ZTE5Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvYWNjZXNzaWJpbGl0eS9tYWMvdGV4dC1pbnB1dC1tYXJrZWQtdGV4dC1tYXJrZXItcmFuZ2Uu
aHRtbApAQCAtMCwwICsxLDMzIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cisg
ICAgPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LmpzIj48L3NjcmlwdD4KKzwv
aGVhZD4KKzxib2R5PgorPGlucHV0IGlkPSJlZGl0YWJsZSIgdHlwZT0idGV4dCI+Cis8c2NyaXB0
IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CitkZXNjcmlwdGlvbigiVGhpcyB0ZXN0IGVuc3VyZXMg
dGhhdCB0aGUgaW5wdXQgbWV0aG9kIG1hcmtlZCByYW5nZSBpcyBhdmFpbGFibGUgdG8gYWNjZXNz
aWJpbGl0eSBjbGllbnRzIGFzIHRleHQgbWFya2VyIHJhbmdlLiIpOworZWRpdGFibGUuZm9jdXMo
KTsKK2lmICh3aW5kb3cudGV4dElucHV0Q29udHJvbGxlciAmJiB3aW5kb3cuYWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXIpIHsKKyAgICB2YXIgZWxlbWVudCA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVy
LmFjY2Vzc2libGVFbGVtZW50QnlJZCgiZWRpdGFibGUiKTsKKyAgICAKKyAgICB2YXIgdGV4dCA9
IGVsZW1lbnQuc3RyaW5nRm9yVGV4dE1hcmtlclJhbmdlKGVsZW1lbnQudGV4dElucHV0TWFya2Vk
VGV4dE1hcmtlclJhbmdlKCkpOworICAgIHNob3VsZEJlVHJ1ZSgiIXRleHQiKTsKKyAgICAKKyAg
ICB0ZXh0SW5wdXRDb250cm9sbGVyLnNldE1hcmtlZFRleHQoInRlc3QiKTsKKyAgICB0ZXh0ID0g
ZWxlbWVudC5zdHJpbmdGb3JUZXh0TWFya2VyUmFuZ2UoZWxlbWVudC50ZXh0SW5wdXRNYXJrZWRU
ZXh0TWFya2VyUmFuZ2UoKSk7CisgICAgc2hvdWxkQmUoInRleHQiLCAiJ3Rlc3QnIik7CisKKyAg
ICB0ZXh0SW5wdXRDb250cm9sbGVyLnVubWFya1RleHQoKTsKKyAgICB0ZXh0ID0gZWxlbWVudC5z
dHJpbmdGb3JUZXh0TWFya2VyUmFuZ2UoZWxlbWVudC50ZXh0SW5wdXRNYXJrZWRUZXh0TWFya2Vy
UmFuZ2UoKSk7CisgICAgc2hvdWxkQmVUcnVlKCIhdGV4dCIpOworICAgIHNob3VsZEJlKCJlbGVt
ZW50LnN0cmluZ1ZhbHVlIiwgIidBWFZhbHVlOiB0ZXN0JyIpOworCisgICAgdGV4dElucHV0Q29u
dHJvbGxlci5zZXRNYXJrZWRUZXh0KCIgbWVzc2FnZSIsIDQsICIgbWVzc2FnZSIubGVuZ3RoKTsK
KyAgICB0ZXh0ID0gZWxlbWVudC5zdHJpbmdGb3JUZXh0TWFya2VyUmFuZ2UoZWxlbWVudC50ZXh0
SW5wdXRNYXJrZWRUZXh0TWFya2VyUmFuZ2UoKSk7CisgICAgc2hvdWxkQmUoInRleHQiLCAiJyBt
ZXNzYWdlJyIpOworICAgIHNob3VsZEJlKCJlbGVtZW50LnN0cmluZ1ZhbHVlIiwgIidBWFZhbHVl
OiB0ZXN0IG1lc3NhZ2UnIik7Cit9Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL3RleHQtaW5wdXQtc2Vzc2lvbi1u
b3RpZmljYXRpb25zLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFj
L3RleHQtaW5wdXQtc2Vzc2lvbi1ub3RpZmljYXRpb25zLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjUwNmY3YTU0OTg4ZgotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL3RleHQtaW5wdXQtc2Vzc2lvbi1u
b3RpZmljYXRpb25zLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDExIEBACitUaGlzIHRlc3QgZW5z
dXJlcyB0aGF0IGFjY2Vzc2liaWxpdHkgcmVjZWl2ZXMgdGhlIHByb3BlciBub3RpZmljYXRpb25z
IGZvciB3aGVuIGlucHV0IHNlc3Npb25zIGJlZ2luIGFuZCBlbmQuCisKK09uIHN1Y2Nlc3MsIHlv
dSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNU
IENPTVBMRVRFIi4KKworCitHb3Qgc2Vzc2lvbiBzdGFydCBhbmQgdmFsdWUgY2hhbmdlIG5vdGlm
aWNhdGlvbnMuCitHb3Qgc2Vzc2lvbiBlbmQgbm90aWZpY2F0aW9uLgorUEFTUyBzdWNjZXNzZnVs
bHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2FjY2Vzc2liaWxpdHkvbWFjL3RleHQtaW5wdXQtc2Vzc2lvbi1ub3RpZmljYXRpb25zLmh0
bWwgYi9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy90ZXh0LWlucHV0LXNlc3Npb24tbm90
aWZpY2F0aW9ucy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4u
ZTIyYWU3ZDdkYThiCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0
eS9tYWMvdGV4dC1pbnB1dC1zZXNzaW9uLW5vdGlmaWNhdGlvbnMuaHRtbApAQCAtMCwwICsxLDQ5
IEBACis8IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIHJ1blNpbmdseT10
cnVlIF0gLS0+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9q
cy10ZXN0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvYWNjZXNz
aWJpbGl0eS1oZWxwZXIuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8aW5wdXQgaWQ9
ImVkaXRhYmxlIiB0eXBlPSJ0ZXh0Ij4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4K
K2Rlc2NyaXB0aW9uKCJUaGlzIHRlc3QgZW5zdXJlcyB0aGF0IGFjY2Vzc2liaWxpdHkgcmVjZWl2
ZXMgdGhlIHByb3BlciBub3RpZmljYXRpb25zIGZvciB3aGVuIGlucHV0IHNlc3Npb25zIGJlZ2lu
IGFuZCBlbmQuIik7CitlZGl0YWJsZS5mb2N1cygpOworCit2YXIgZ290U2Vzc2lvblN0YXJ0ID0g
ZmFsc2U7Cit2YXIgZ290VmFsdWVDaGFuZ2VkID0gZmFsc2U7Cit2YXIgZ290U2Vzc2lvbkVuZCA9
IGZhbHNlOworZnVuY3Rpb24gbm90aWZpY2F0aW9uQ2FsbGJhY2sobm90aWZpY2F0aW9uKSB7Cisg
ICAgaWYgKG5vdGlmaWNhdGlvbiA9PT0gIkFYVGV4dElucHV0TWFya2luZ1Nlc3Npb25CZWdhbiIp
CisgICAgICAgIGdvdFNlc3Npb25TdGFydCA9IHRydWU7CisKKyAgICBpZiAobm90aWZpY2F0aW9u
ID09PSAiQVhWYWx1ZUNoYW5nZWQiICYmIGdvdFNlc3Npb25TdGFydCkKKyAgICAgICAgZ290VmFs
dWVDaGFuZ2VkID0gdHJ1ZTsKKworICAgIGlmIChub3RpZmljYXRpb24gPT09ICJBWFRleHRJbnB1
dE1hcmtpbmdTZXNzaW9uRW5kZWQiKSB7CisgICAgICAgIGlmICghZ290U2Vzc2lvblN0YXJ0KQor
ICAgICAgICAgICAgZGVidWcoIkZBSUw6IEdvdCBBWFRleHRJbnB1dE1hcmtpbmdTZXNzaW9uRW5k
ZWQgYmVmb3JlIEFYVGV4dElucHV0TWFya2luZ1Nlc3Npb25CZWdhbiIpOworICAgICAgICBnb3RT
ZXNzaW9uRW5kID0gdHJ1ZTsKKyAgICB9Cit9CisKK2lmICh3aW5kb3cuYWNjZXNzaWJpbGl0eUNv
bnRyb2xsZXIpIHsKKyAgICB3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7CisKKyAgICBhY2Nl
c3NpYmlsaXR5Q29udHJvbGxlci5hY2Nlc3NpYmxlRWxlbWVudEJ5SWQoImVkaXRhYmxlIikuYWRk
Tm90aWZpY2F0aW9uTGlzdGVuZXIobm90aWZpY2F0aW9uQ2FsbGJhY2spOworICAgIHNldFRpbWVv
dXQoYXN5bmMgKCkgPT4geworICAgICAgICB0ZXh0SW5wdXRDb250cm9sbGVyLnNldE1hcmtlZFRl
eHQoInRlc3QiKTsKKyAgICAgICAgYXdhaXQgd2FpdEZvcigoKSA9PiBnb3RTZXNzaW9uU3RhcnQg
JiYgZ290VmFsdWVDaGFuZ2VkKTsKKyAgICAgICAgZGVidWcoIkdvdCBzZXNzaW9uIHN0YXJ0IGFu
ZCB2YWx1ZSBjaGFuZ2Ugbm90aWZpY2F0aW9ucy4iKTsKKworICAgICAgICB0ZXh0SW5wdXRDb250
cm9sbGVyLnVubWFya1RleHQoKTsKKyAgICAgICAgYXdhaXQgd2FpdEZvcigoKSA9PiBnb3RTZXNz
aW9uRW5kKTsKKyAgICAgICAgZGVidWcoIkdvdCBzZXNzaW9uIGVuZCBub3RpZmljYXRpb24uIik7
CisKKyAgICAgICAgYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRCeUlk
KCJlZGl0YWJsZSIpLnJlbW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVyKCk7CisgICAgICAgIGZpbmlz
aEpTVGVzdCgpOworICAgIH0pOworfQorPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>467039</attachid>
            <date>2023-07-13 18:50:36 -0700</date>
            <delta_ts>2023-07-14 10:35:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-258228-20230713185035.patch</filename>
            <type>text/plain</type>
            <size>60332</size>
            <attacher name="Jack Wiig">jhwiig</attacher>
            
              <data encoding="base64">RnJvbSBkNzczOTcxOWRjYjFhOTNhZWFkODMyZjY3MmRiN2MxZDFiMDUzYTJmIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWNrIFdpaWcgPGpod2lpZ0BnbWFpbC5jb20+CkRhdGU6IFRo
dSwgMTMgSnVsIDIwMjMgMTc6NDA6MzMgLTA3MDAKU3ViamVjdDogW1BBVENIXSBQb3N0IEFjY2Vz
c2liaWxpdHkgbm90aWZpY2F0aW9ucyBkdXJpbmcgY29tcG9zaXRpb24gY29udGV4dHMKIGluZGlj
YXRpbmcgc3RhcnQsIGVuZCwgYW5kIHZhbHVlIGNoYW5nZS4KIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yNTgyMjggcmRhcjovL3Byb2JsZW0vMTEwOTI1Mzg0CgpSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KClRvIGFsaWduIG91cnNlbHZlcyB3aXRoIEFwcEtpdCwg
V2ViS2l0IHNob3VsZCBwb3N0IGEgbm90aWZpY2F0aW9uIHdoZW4gYSBjb21wb3NpdGlvbiBzdGFy
dHMgc28gdGhhdCBhc3Npc3RpdmUgdGVjaG5vbG9naWVzIGtub3cgdG8gcHJvY2VzcyBhbnkgZnV0
dXJlIHZhbHVlIGNoYW5nZXMgZm9yIHRoYXQgdWkgZWxlbWVudCBhcyBpbmNvbXBsZXRlIGNvbXBv
c2l0aW9uIGNoYW5nZXMuIFdoZW4gYSBjb21wb3NpdGlvbiBlbmRzLCBwb3N0IGEgbm90aWZpY2F0
aW9uIHRvIGluZGljYXRlIHRoYXQgdGhlIGNvbXBvc2l0aW9uIHNlc3Npb24gaGFzIGVuZGVkLgoK
VGhpcyBtb2RlbCBkb2VzIG5vdCBjb252ZXkgYW55IGluZm9ybWF0aW9uIGluIHRoZSB0ZXh0IG5v
dGlmaWNhdGlvbnMgKHVubGlrZSB3aGF0IG15IHBhc3QgY29tbWVudCBpbmRpY2F0ZXMpIGFuZCBw
b3N0cyB0aGUgbm90aWZpY2F0aW9uIGZyb20gdGhlIHRleHQgY29udHJvbCBjb250YWluaW5nIHRo
ZSB0ZXh0IGluZm9ybWF0aW9uLiBUaGlzIGFsaWducyB1cyBjbG9zZXIgd2l0aCBob3cgb3RoZXIg
VUkgZnJhbWV3b3JrcyBiZWhhdmUuCgoqIExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL2F0
dHJpYnV0ZWQtc3RyaW5nL2F0dHJpYnV0ZWQtc3RyaW5nLWhhcy1jb21wbGV0aW9uLWFubm90YXRp
b24uaHRtbDoKKiBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy90ZXh0LWlucHV0LW1hcmtl
ZC1yYW5nZS1leHBlY3RlZC50eHQ6CiogTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvdGV4
dC1pbnB1dC1tYXJrZWQtcmFuZ2UuaHRtbDoKKiBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21h
Yy90ZXh0LWlucHV0LW1hcmtlZC10ZXh0LW1hcmtlci1yYW5nZS1leHBlY3RlZC50eHQ6IEFkZGVk
LgoqIExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL3RleHQtaW5wdXQtbWFya2VkLXRleHQt
bWFya2VyLXJhbmdlLmh0bWw6IEFkZGVkLgoqIExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFj
L3RleHQtaW5wdXQtc2Vzc2lvbi1ub3RpZmljYXRpb25zLWV4cGVjdGVkLnR4dDogQWRkZWQuCiog
TGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvdGV4dC1pbnB1dC1zZXNzaW9uLW5vdGlmaWNh
dGlvbnMuaHRtbDogQWRkZWQuCiogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWExvZ2dl
ci5jcHA6CihXZWJDb3JlOjpvcGVyYXRvcjw8KToKKiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FYT2JqZWN0Q2FjaGUuY3BwOgooV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6b25UZXh0Q29t
cG9zaXRpb25DaGFuZ2UpOgooV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6dXBkYXRlSXNvbGF0ZWRU
cmVlKToKKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnRleHRDb21wb3NpdGlvbk9iamVjdEZvck5v
ZGUpOiBEZWxldGVkLgoqIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNo
ZS5oOgooV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6b25UZXh0Q29tcG9zaXRpb25DaGFuZ2UpOgoo
V2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6dXBkYXRlUmVsYXRpb25zKToKKFdlYkNvcmU6OkFYT2Jq
ZWN0Q2FjaGU6OnRleHRDb21wb3NpdGlvbk9iamVjdEZvck5vZGUpOiBEZWxldGVkLgoqIFNvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhUZXh0TWFya2VyLmNwcDoKKFdlYkNvcmU6OkFYVGV4
dE1hcmtlclJhbmdlOjpjaGFyYWN0ZXJSYW5nZSBjb25zdCk6CihXZWJDb3JlOjpBWElzb2xhdGVk
VGV4dE1hcmtlclJhbmdlOjpBWElzb2xhdGVkVGV4dE1hcmtlclJhbmdlKToKKiBTb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FYVGV4dE1hcmtlci5oOgoqIFNvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHA6CihXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5
T2JqZWN0Ojp0ZXh0SW5wdXRNYXJrZWRSYW5nZSBjb25zdCk6CihXZWJDb3JlOjpBY2Nlc3NpYmls
aXR5T2JqZWN0Ojp0ZXh0SW5wdXRNYXJrZWRUZXh0TWFya2VyUmFuZ2UgY29uc3QpOgooV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6aXNOb2RlRm9yQ29tcG9zaXRpb24gY29uc3QpOiBEZWxl
dGVkLgoqIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5o
OgoqIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdEludGVy
ZmFjZS5oOgoqIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvY29jb2EvQVhUZXh0TWFya2Vy
Q29jb2EubW06CihXZWJDb3JlOjpBWFRleHRNYXJrZXJSYW5nZTo6bnNSYW5nZSBjb25zdCk6Ciog
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9jb2NvYS9BY2Nlc3NpYmlsaXR5T2JqZWN0Q29j
b2EubW06CihXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0Ojpjb250ZW50Rm9yUmFuZ2UgY29u
c3QpOgoqIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL0FjY2Vzc2liaWxpdHlPYmpl
Y3RJT1MubW06CihXZWJDb3JlOjphdHRyaWJ1dGVkU3RyaW5nQ3JlYXRlKToKKiBTb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkT2JqZWN0LmNwcDoKKFdl
YkNvcmU6OkFYSXNvbGF0ZWRPYmplY3Q6OnRleHRJbnB1dE1hcmtlZFJhbmdlIGNvbnN0KToKKFdl
YkNvcmU6OkFYSXNvbGF0ZWRPYmplY3Q6OnRleHRJbnB1dE1hcmtlZFRleHRNYXJrZXJSYW5nZSBj
b25zdCk6CiogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29s
YXRlZE9iamVjdC5oOgoqIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVl
L0FYSXNvbGF0ZWRUcmVlLmNwcDoKKFdlYkNvcmU6OkFYSXNvbGF0ZWRUcmVlOjp1cGRhdGVOb2Rl
UHJvcGVydGllcyk6CiogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUv
QVhJc29sYXRlZFRyZWUuaDoKKiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9BWE9i
amVjdENhY2hlTWFjLm1tOgooV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6cG9zdFBsYXRmb3JtTm90
aWZpY2F0aW9uKToKKiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9BY2Nlc3NpYmls
aXR5T2JqZWN0TWFjLm1tOgooV2ViQ29yZTo6YXR0cmlidXRlZFN0cmluZ1NldENvbXBvc2l0aW9u
QXR0cmlidXRlcyk6CihXZWJDb3JlOjphdHRyaWJ1dGVkU3RyaW5nQ3JlYXRlKToKKiBTb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckJh
c2UuaDoKKiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlck1hYy5tbToKKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgQUxM
T1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5EXSk6CigtW1dlYkFjY2Vzc2liaWxpdHlP
YmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTpdKToKKiBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0VkaXRvci5jcHA6CihXZWJDb3JlOjpFZGl0b3I6OnNldENvbXBvc2l0aW9u
KToKKiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwOgooV2ViQ29yZTo6
VHlwaW5nQ29tbWFuZDo6aW5zZXJ0VGV4dCk6CiogVG9vbHMvRHVtcFJlbmRlclRyZWUvQWNjZXNz
aWJpbGl0eVVJRWxlbWVudC5jcHA6Cih0ZXh0SW5wdXRNYXJrZWRUZXh0TWFya2VyUmFuZ2VDYWxs
YmFjayk6CihBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0ZXh0SW5wdXRNYXJrZWRUZXh0TWFya2Vy
UmFuZ2UgY29uc3QpOgooQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Z2V0SlNDbGFzcyk6CiogVG9v
bHMvRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oOgoqIFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL2lvcy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50SU9TLm1tOgooQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6dGV4dElucHV0TWFya2VkVGV4dE1hcmtlclJhbmdlIGNvbnN0KToKKiBUb29s
cy9EdW1wUmVuZGVyVHJlZS9tYWMvQWNjZXNzaWJpbGl0eVVJRWxlbWVudE1hYy5tbToKKGF0dHJp
YnV0ZXNPZkVsZW1lbnQpOgooQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGV4dElucHV0TWFya2Vk
VGV4dE1hcmtlclJhbmdlIGNvbnN0KToKKiBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVk
QnVuZGxlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuY3BwOgooV1RSOjpBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50Ojp0ZXh0SW5wdXRNYXJrZWRUZXh0TWFya2VyUmFuZ2UgY29uc3QpOgoqIFRvb2xzL1dl
YktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oOgoq
IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvQWNjZXNzaWJp
bGl0eVVJRWxlbWVudC5pZGw6CiogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRs
ZS9tYWMvQWNjZXNzaWJpbGl0eVVJRWxlbWVudE1hYy5tbToKKFdUUjo6QWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6YWxsQXR0cmlidXRlcyk6CihXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRl
eHRJbnB1dE1hcmtlZFRleHRNYXJrZXJSYW5nZSBjb25zdCk6Ci0tLQogU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BWExvZ2dlci5jcHAgICAgIHwgIDYgKysrCiAuLi4vV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwICAgfCA0MiArKysrKysrKystLS0tLS0tCiBTb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaCAgfCAxMSArKystLQogU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWFRleHRNYXJrZXIuY3BwIHwgMjUgKysrKysrKysr
KwogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWFRleHRNYXJrZXIuaCAgIHwgMTEgKysr
KysKIC4uLi9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwICAgICB8IDQyICsr
KysrKysrLS0tLS0tLS0KIC4uLi9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaCAg
ICAgICB8ICAzICstCiAuLi4vQWNjZXNzaWJpbGl0eU9iamVjdEludGVyZmFjZS5oICAgICAgICAg
ICAgfCAgMSArCiAuLi4vYWNjZXNzaWJpbGl0eS9jb2NvYS9BWFRleHRNYXJrZXJDb2NvYS5tbSAg
fCAxMCArLS0tCiAuLi4vY29jb2EvQWNjZXNzaWJpbGl0eU9iamVjdENvY29hLm1tICAgICAgICAg
fCAgNCArLQogLi4uL2lvcy9BY2Nlc3NpYmlsaXR5T2JqZWN0SU9TLm1tICAgICAgICAgICAgIHwg
IDIgKy0KIC4uLi9pc29sYXRlZHRyZWUvQVhJc29sYXRlZE9iamVjdC5jcHAgICAgICAgICB8IDE4
ICsrKysrKysKIC4uLi9pc29sYXRlZHRyZWUvQVhJc29sYXRlZE9iamVjdC5oICAgICAgICAgICB8
ICAzICstCiAuLi4vaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRUcmVlLmNwcCAgICAgICAgICAgfCAx
MCArKy0tCiAuLi4vaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRUcmVlLmggICAgICAgICAgICAgfCAg
NSArLQogLi4uL2FjY2Vzc2liaWxpdHkvbWFjL0FYT2JqZWN0Q2FjaGVNYWMubW0gICAgIHwgMTQg
KysrKysrCiAuLi4vbWFjL0FjY2Vzc2liaWxpdHlPYmplY3RNYWMubW0gICAgICAgICAgICAgfCAx
OSArKysrLS0tCiAuLi4vbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQmFzZS5oICAg
fCAgMiArLQogLi4uL21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbSAgIHwg
MTEgKysrKysKIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcCAgICAgICAgICAgICB8
IDE5ICsrKystLS0KIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAgICAg
ICB8ICA3ICsrLQogLi4uL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuY3Bw
IHwgMTEgKysrKysKIFRvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQu
aCB8ICAxICsKIC4uLi9pb3MvQWNjZXNzaWJpbGl0eVVJRWxlbWVudElPUy5tbSAgICAgICAgICB8
ICA1ICsrCiAuLi4vbWFjL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRNYWMubW0gICAgICAgICAgfCAx
OCArKysrKystCiAuLi4vSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5jcHAg
fCAgMSArCiAuLi4vSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oICAgfCAg
MSArCiAuLi4vQmluZGluZ3MvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5pZGwgICAgICAgfCAgMSAr
CiAuLi4vbWFjL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRNYWMubW0gICAgICAgICAgfCAxOCArKysr
KystCiAuLi51dGVkLXN0cmluZy1oYXMtY29tcGxldGlvbi1hbm5vdGF0aW9uLmh0bWwgfCAxMiAr
KystLQogLi4uL21hYy90ZXh0LWlucHV0LW1hcmtlZC1yYW5nZS1leHBlY3RlZC50eHQgIHwgIDIg
Ky0KIC4uLi9tYWMvdGV4dC1pbnB1dC1tYXJrZWQtcmFuZ2UuaHRtbCAgICAgICAgICB8ICA1ICst
CiAuLi5ucHV0LW1hcmtlZC10ZXh0LW1hcmtlci1yYW5nZS1leHBlY3RlZC50eHQgfCAxNSArKysr
KysKIC4uLi90ZXh0LWlucHV0LW1hcmtlZC10ZXh0LW1hcmtlci1yYW5nZS5odG1sICB8IDMzICsr
KysrKysrKysrKysKIC4uLnQtaW5wdXQtc2Vzc2lvbi1ub3RpZmljYXRpb25zLWV4cGVjdGVkLnR4
dCB8IDExICsrKysrCiAuLi4vbWFjL3RleHQtaW5wdXQtc2Vzc2lvbi1ub3RpZmljYXRpb25zLmh0
bWwgfCA0OSArKysrKysrKysrKysrKysrKysrCiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvVGVz
dEV4cGVjdGF0aW9ucyAgICAgfCAgMSArCiAzNyBmaWxlcyBjaGFuZ2VkLCAzNTggaW5zZXJ0aW9u
cygrKSwgOTEgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgTGF5b3V0VGVzdHMvYWNj
ZXNzaWJpbGl0eS9tYWMvdGV4dC1pbnB1dC1tYXJrZWQtdGV4dC1tYXJrZXItcmFuZ2UtZXhwZWN0
ZWQudHh0CiBjcmVhdGUgbW9kZSAxMDA2NDQgTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMv
dGV4dC1pbnB1dC1tYXJrZWQtdGV4dC1tYXJrZXItcmFuZ2UuaHRtbAogY3JlYXRlIG1vZGUgMTAw
NjQ0IExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL3RleHQtaW5wdXQtc2Vzc2lvbi1ub3Rp
ZmljYXRpb25zLWV4cGVjdGVkLnR4dAogY3JlYXRlIG1vZGUgMTAwNjQ0IExheW91dFRlc3RzL2Fj
Y2Vzc2liaWxpdHkvbWFjL3RleHQtaW5wdXQtc2Vzc2lvbi1ub3RpZmljYXRpb25zLmh0bWwKCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYTG9nZ2VyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhMb2dnZXIuY3BwCmluZGV4IGQ2MTM2YjFkNjM1
Mi4uZWNkZDk2OGYyYzQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FYTG9nZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYTG9nZ2Vy
LmNwcApAQCAtNjQ0LDYgKzY0NCwxMiBAQCBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mIHN0cmVhbSwgQVhPYmplY3RDYWNoZTo6QVhOb3RpZmljYXRpb24gbm90aWZpYwogICAgIGNh
c2UgQVhPYmplY3RDYWNoZTo6QVhOb3RpZmljYXRpb246OkFYRHJhZ2dpbmdFeGl0ZWREcm9wWm9u
ZToKICAgICAgICAgc3RyZWFtIDw8ICJBWERyYWdnaW5nRXhpdGVkRHJvcFpvbmUiOwogICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEFYT2JqZWN0Q2FjaGU6OkFYTm90aWZpY2F0aW9uOjpBWFRleHRJ
bnB1dE1hcmtpbmdTZXNzaW9uQmVnYW46CisgICAgICAgIHN0cmVhbSA8PCAiQVhUZXh0SW5wdXRN
YXJraW5nU2Vzc2lvbkJlZ2FuIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBWE9iamVjdENh
Y2hlOjpBWE5vdGlmaWNhdGlvbjo6QVhUZXh0SW5wdXRNYXJraW5nU2Vzc2lvbkVuZGVkOgorICAg
ICAgICBzdHJlYW0gPDwgIkFYVGV4dElucHV0TWFya2luZ1Nlc3Npb25FbmRlZCI7CisgICAgICAg
IGJyZWFrOwogICAgIH0KIAogICAgIHJldHVybiBzdHJlYW07CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwIGIvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAppbmRleCAzM2EyZGM2ZGM0OTQuLjMxYWYz
ZDQyZDA0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVj
dENhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2Fj
aGUuY3BwCkBAIC0xNjgwLDEzICsxNjgwLDMzIEBAIHZvaWQgQVhPYmplY3RDYWNoZTo6b25WYWxp
ZGl0eUNoYW5nZShFbGVtZW50JiBlbGVtZW50KQogICAgIHBvc3ROb3RpZmljYXRpb24oZ2V0KCZl
bGVtZW50KSwgbnVsbHB0ciwgQVhJbnZhbGlkU3RhdHVzQ2hhbmdlZCk7CiB9CiAKLXZvaWQgQVhP
YmplY3RDYWNoZTo6b25UZXh0Q29tcG9zaXRpb25DaGFuZ2UoTm9kZSYgbm9kZSkKK3ZvaWQgQVhP
YmplY3RDYWNoZTo6b25UZXh0Q29tcG9zaXRpb25DaGFuZ2UoTm9kZSYgbm9kZSwgQ29tcG9zaXRp
b25TdGF0ZSBjb21wb3NpdGlvblN0YXRlLCBib29sIHZhbHVlQ2hhbmdlZCkKIHsKKyNpZiBIQVZF
KElOTElORV9QUkVESUNUSU9OUykKKyAgICBhdXRvKiBvYmplY3QgPSBnZXRPckNyZWF0ZSgmbm9k
ZSk7CisgICAgaWYgKCFvYmplY3QpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChhdXRvKiBv
YnNlcnZhYmxlT2JqZWN0ID0gb2JqZWN0LT5vYnNlcnZhYmxlT2JqZWN0KCkpCisgICAgICAgIG9i
amVjdCA9IG9ic2VydmFibGVPYmplY3Q7CisKICNpZiBFTkFCTEUoQUNDRVNTSUJJTElUWV9JU09M
QVRFRF9UUkVFKQotICAgIHVwZGF0ZUlzb2xhdGVkVHJlZSh0ZXh0Q29tcG9zaXRpb25PYmplY3RG
b3JOb2RlKG5vZGUpLCBBWFRleHRDb21wb3NpdGlvbkNoYW5nZWQpOworICAgIHVwZGF0ZUlzb2xh
dGVkVHJlZShvYmplY3QsIEFYVGV4dENvbXBvc2l0aW9uQ2hhbmdlZCk7CisjZW5kaWYgLy8gRU5B
QkxFKEFDQ0VTU0lCSUxJVFlfSVNPTEFURURfVFJFRSkKKworICAgIGlmIChjb21wb3NpdGlvblN0
YXRlID09IENvbXBvc2l0aW9uU3RhdGU6OlN0YXJ0ZWQpCisgICAgICAgIHBvc3ROb3RpZmljYXRp
b24ob2JqZWN0LCAmbm9kZS5kb2N1bWVudCgpLCBBWFRleHRJbnB1dE1hcmtpbmdTZXNzaW9uQmVn
YW4pOworCisgICAgaWYgKHZhbHVlQ2hhbmdlZCkKKyAgICAgICAgcG9zdE5vdGlmaWNhdGlvbihv
YmplY3QsICZub2RlLmRvY3VtZW50KCksIEFYVmFsdWVDaGFuZ2VkKTsKKworICAgIGlmIChjb21w
b3NpdGlvblN0YXRlID09IENvbXBvc2l0aW9uU3RhdGU6OkVuZGVkKQorICAgICAgICBwb3N0Tm90
aWZpY2F0aW9uKG9iamVjdCwgJm5vZGUuZG9jdW1lbnQoKSwgQVhUZXh0SW5wdXRNYXJraW5nU2Vz
c2lvbkVuZGVkKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKG5vZGUpOwotI2VuZGlmCisgICAg
VU5VU0VEX1BBUkFNKGNvbXBvc2l0aW9uU3RhdGUpOworICAgIFVOVVNFRF9QQVJBTSh2YWx1ZUNo
YW5nZWQpOworI2VuZGlmIC8vIEhBVkUoSU5MSU5FX1BSRURJQ1RJT05TKQogfQogCiAjaWZuZGVm
IE5ERUJVRwpAQCAtNDAxNyw3ICs0MDM3LDcgQEAgdm9pZCBBWE9iamVjdENhY2hlOjp1cGRhdGVJ
c29sYXRlZFRyZWUoY29uc3QgVmVjdG9yPHN0ZDo6cGFpcjxSZWZQdHI8QWNjZXNzaWJpbGkKICAg
ICAgICAgICAgIHRyZWUtPnVwZGF0ZU5vZGVQcm9wZXJ0eSgqbm90aWZpY2F0aW9uLmZpcnN0LCBB
WFByb3BlcnR5TmFtZTo6Q29sdW1uSGVhZGVycyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBBWFRleHRDb21wb3NpdGlvbkNoYW5nZWQ6Ci0gICAgICAgICAgICB0cmVlLT51cGRh
dGVOb2RlUHJvcGVydHkoKm5vdGlmaWNhdGlvbi5maXJzdCwgQVhQcm9wZXJ0eU5hbWU6OlRleHRJ
bnB1dE1hcmtlZFJhbmdlKTsKKyAgICAgICAgICAgIHRyZWUtPnVwZGF0ZU5vZGVQcm9wZXJ0eSgq
bm90aWZpY2F0aW9uLmZpcnN0LCBBWFByb3BlcnR5TmFtZTo6VGV4dElucHV0TWFya2VkVGV4dE1h
cmtlclJhbmdlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFYVVJMQ2hhbmdl
ZDoKICAgICAgICAgICAgIHRyZWUtPnVwZGF0ZU5vZGVQcm9wZXJ0eSgqbm90aWZpY2F0aW9uLmZp
cnN0LCBBWFByb3BlcnR5TmFtZTo6VVJMKTsKQEAgLTQ2MDIsMjAgKzQ2MjIsNiBAQCBBWFRleHRD
aGFuZ2UgQVhPYmplY3RDYWNoZTo6dGV4dENoYW5nZUZvckVkaXRUeXBlKEFYVGV4dEVkaXRUeXBl
IHR5cGUpCiB9CiAjZW5kaWYKIAotQWNjZXNzaWJpbGl0eU9iamVjdCogQVhPYmplY3RDYWNoZTo6
dGV4dENvbXBvc2l0aW9uT2JqZWN0Rm9yTm9kZShOb2RlJiBub2RlKQotewotICAgIFdlYWtQdHIg
b2JqZWN0ID0gZ2V0KCZub2RlKTsKLSAgICBpZiAob2JqZWN0KQotICAgICAgICBvYmplY3QgPSBv
YmplY3QtPm9ic2VydmFibGVPYmplY3QoKTsKLQotI2lmIFBMQVRGT1JNKE1BQykKLSAgICAvLyBJ
biBvdXIgTWFjIGltcGxlbWVudGF0aW9ucyBmb3IgcG9zdGluZyB0ZXh0IG5vdGlmaWNhdGlvbnMs
IHdlIGZhbGwgYmFjayBvbiB0aGUgd2ViIGFyZWEgaWYgdGhlIG9ic2VydmFibGUgb2JqZWN0IGlz
IG51bGxwdHIuCi0gICAgaWYgKCFvYmplY3QpCi0gICAgICAgIG9iamVjdCA9IHJvb3RXZWJBcmVh
KCk7Ci0jZW5kaWYKLSAgICByZXR1cm4gb2JqZWN0LmdldCgpOwotfQotCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoQUNDRVNTSUJJTElUWSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5oIGIvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmgKaW5kZXggZTIzYjc4ZjdhNTkyLi40
NGMwNjBkNWRmNzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhP
YmplY3RDYWNoZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RD
YWNoZS5oCkBAIC0xODQsNiArMTg0LDggQEAgcHJpdmF0ZToKICAgICB2b2lkIGF0dGFjaFdyYXBw
ZXIoQWNjZXNzaWJpbGl0eU9iamVjdCopOwogCiBwdWJsaWM6CisgICAgZW51bSBjbGFzcyBDb21w
b3NpdGlvblN0YXRlIDogdWludDhfdCB7IFN0YXJ0ZWQsIEluUHJvZ3Jlc3MsIEVuZGVkIH07CisK
ICAgICB2b2lkIG9uUGFnZUFjdGl2aXR5U3RhdGVDaGFuZ2UoT3B0aW9uU2V0PEFjdGl2aXR5U3Rh
dGU+KTsKICAgICB2b2lkIHNldFBhZ2VBY3Rpdml0eVN0YXRlKE9wdGlvblNldDxBY3Rpdml0eVN0
YXRlPiBzdGF0ZSkgeyBtX3BhZ2VBY3Rpdml0eVN0YXRlID0gc3RhdGU7IH0KICAgICBPcHRpb25T
ZXQ8QWN0aXZpdHlTdGF0ZT4gcGFnZUFjdGl2aXR5U3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3Bh
Z2VBY3Rpdml0eVN0YXRlOyB9CkBAIC0xOTgsNyArMjAwLDcgQEAgcHVibGljOgogICAgIHZvaWQg
b25UZXh0U2VjdXJpdHlDaGFuZ2VkKEhUTUxJbnB1dEVsZW1lbnQmKTsKICAgICB2b2lkIG9uVGl0
bGVDaGFuZ2UoRG9jdW1lbnQmKTsKICAgICB2b2lkIG9uVmFsaWRpdHlDaGFuZ2UoRWxlbWVudCYp
OwotICAgIHZvaWQgb25UZXh0Q29tcG9zaXRpb25DaGFuZ2UoTm9kZSYpOworICAgIHZvaWQgb25U
ZXh0Q29tcG9zaXRpb25DaGFuZ2UoTm9kZSYsIENvbXBvc2l0aW9uU3RhdGUsIGJvb2wpOwogICAg
IHZvaWQgdmFsdWVDaGFuZ2VkKEVsZW1lbnQqKTsKICAgICB2b2lkIGNoZWNrZWRTdGF0ZUNoYW5n
ZWQoTm9kZSopOwogICAgIHZvaWQgYXV0b2ZpbGxUeXBlQ2hhbmdlZChOb2RlKik7CkBAIC0zNjUs
NiArMzY3LDggQEAgcHVibGljOgogICAgICAgICBBWFNlbGVjdGVkVGV4dENoYW5nZWQsCiAgICAg
ICAgIEFYU2V0U2l6ZUNoYW5nZWQsCiAgICAgICAgIEFYVGFibGVIZWFkZXJzQ2hhbmdlZCwKKyAg
ICAgICAgQVhUZXh0SW5wdXRNYXJraW5nU2Vzc2lvbkJlZ2FuLAorICAgICAgICBBWFRleHRJbnB1
dE1hcmtpbmdTZXNzaW9uRW5kZWQsCiAgICAgICAgIEFYVVJMQ2hhbmdlZCwKICAgICAgICAgQVhW
YWx1ZUNoYW5nZWQsCiAgICAgICAgIEFYU2Nyb2xsZWRUb0FuY2hvciwKQEAgLTQ2MSw4ICs0NjUs
NiBAQCBwdWJsaWM6CiAgICAgc3RkOjpvcHRpb25hbDxWZWN0b3I8QVhJRD4+IHJlbGF0ZWRPYmpl
Y3RJRHNGb3IoY29uc3QgQVhDb3JlT2JqZWN0JiwgQVhSZWxhdGlvblR5cGUpOwogICAgIHZvaWQg
dXBkYXRlUmVsYXRpb25zKEVsZW1lbnQmLCBjb25zdCBRdWFsaWZpZWROYW1lJik7CiAKLSAgICBB
Y2Nlc3NpYmlsaXR5T2JqZWN0KiB0ZXh0Q29tcG9zaXRpb25PYmplY3RGb3JOb2RlKE5vZGUmKTsK
LQogI2lmIEVOQUJMRShBQ0NFU1NJQklMSVRZX0lTT0xBVEVEX1RSRUUpCiAgICAgdm9pZCBzY2hl
ZHVsZU9iamVjdFJlZ2lvbnNVcGRhdGUoYm9vbCBzY2hlZHVsZUltbWVkaWF0ZWx5ID0gZmFsc2Up
IHsgbV9nZW9tZXRyeU1hbmFnZXItPnNjaGVkdWxlT2JqZWN0UmVnaW9uc1VwZGF0ZShzY2hlZHVs
ZUltbWVkaWF0ZWx5KTsgfQogICAgIHZvaWQgd2lsbFVwZGF0ZU9iamVjdFJlZ2lvbnMoKSB7IG1f
Z2VvbWV0cnlNYW5hZ2VyLT53aWxsVXBkYXRlT2JqZWN0UmVnaW9ucygpOyB9CkBAIC03MzYsNyAr
NzM4LDcgQEAgaW5saW5lIHZvaWQgQVhPYmplY3RDYWNoZTo6b25TZWxlY3RlZENoYW5nZWQoTm9k
ZSopIHsgfQogaW5saW5lIHZvaWQgQVhPYmplY3RDYWNoZTo6b25UZXh0U2VjdXJpdHlDaGFuZ2Vk
KEhUTUxJbnB1dEVsZW1lbnQmKSB7IH0KIGlubGluZSB2b2lkIEFYT2JqZWN0Q2FjaGU6Om9uVGl0
bGVDaGFuZ2UoRG9jdW1lbnQmKSB7IH0KIGlubGluZSB2b2lkIEFYT2JqZWN0Q2FjaGU6Om9uVmFs
aWRpdHlDaGFuZ2UoRWxlbWVudCYpIHsgfQotaW5saW5lIHZvaWQgQVhPYmplY3RDYWNoZTo6b25U
ZXh0Q29tcG9zaXRpb25DaGFuZ2UoTm9kZSYpIHsgfQoraW5saW5lIHZvaWQgQVhPYmplY3RDYWNo
ZTo6b25UZXh0Q29tcG9zaXRpb25DaGFuZ2UoTm9kZSYsIENvbXBvc2l0aW9uU3RhdGUsIGJvb2wp
IHsgfQogaW5saW5lIHZvaWQgQVhPYmplY3RDYWNoZTo6dmFsdWVDaGFuZ2VkKEVsZW1lbnQqKSB7
IH0KIGlubGluZSB2b2lkIEFYT2JqZWN0Q2FjaGU6Om9uRm9jdXNDaGFuZ2UoTm9kZSosIE5vZGUq
KSB7IH0KIGlubGluZSB2b2lkIEFYT2JqZWN0Q2FjaGU6Om9uUGFnZUFjdGl2aXR5U3RhdGVDaGFu
Z2UoT3B0aW9uU2V0PEFjdGl2aXR5U3RhdGU+KSB7IH0KQEAgLTc4OCw3ICs3OTAsNiBAQCBpbmxp
bmUgdm9pZCBBWE9iamVjdENhY2hlOjp1cGRhdGVMb2FkaW5nUHJvZ3Jlc3MoZG91YmxlKSB7IH0K
IGlubGluZSBTaW1wbGVSYW5nZSBBWE9iamVjdENhY2hlOjpyYW5nZUZvck5vZGVDb250ZW50cyhO
b2RlJiBub2RlKSB7IHJldHVybiBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMobm9kZSk7
IH0KIGlubGluZSBzdGQ6Om9wdGlvbmFsPFZlY3RvcjxBWElEPj4gQVhPYmplY3RDYWNoZTo6cmVs
YXRlZE9iamVjdElEc0Zvcihjb25zdCBBWENvcmVPYmplY3QmLCBBWFJlbGF0aW9uVHlwZSkgeyBy
ZXR1cm4gc3RkOjpudWxsb3B0OyB9CiBpbmxpbmUgdm9pZCBBWE9iamVjdENhY2hlOjp1cGRhdGVS
ZWxhdGlvbnMoRWxlbWVudCYsIGNvbnN0IFF1YWxpZmllZE5hbWUmKSB7IH0KLWlubGluZSBBY2Nl
c3NpYmlsaXR5T2JqZWN0KiBBWE9iamVjdENhY2hlOjp0ZXh0Q29tcG9zaXRpb25PYmplY3RGb3JO
b2RlKE5vZGUmKSB7IHJldHVybiBudWxscHRyOyB9CiBpbmxpbmUgdm9pZCBBWE9iamVjdENhY2hl
OjpyZW1vdmUoQVhJRCkgeyB9CiBpbmxpbmUgdm9pZCBBWE9iamVjdENhY2hlOjpyZW1vdmUoUmVu
ZGVyT2JqZWN0KikgeyB9CiBpbmxpbmUgdm9pZCBBWE9iamVjdENhY2hlOjpyZW1vdmUoTm9kZSYp
IHsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWFRleHRNYXJr
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWFRleHRNYXJrZXIuY3BwCmlu
ZGV4IGVhYjczOWI2ZjE5Ny4uOTIzZTI3ZGY5NzNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FYVGV4dE1hcmtlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BWFRleHRNYXJrZXIuY3BwCkBAIC0yNzUsNiArMjc1LDE5IEBAIHN0ZDo6b3B0
aW9uYWw8U2ltcGxlUmFuZ2U+IEFYVGV4dE1hcmtlclJhbmdlOjpzaW1wbGVSYW5nZSgpIGNvbnN0
CiAgICAgcmV0dXJuIHsgeyAqc3RhcnRCb3VuZGFyeVBvaW50LCAqZW5kQm91bmRhcnlQb2ludCB9
IH07CiB9CiAKK3N0ZDo6b3B0aW9uYWw8Q2hhcmFjdGVyUmFuZ2U+IEFYVGV4dE1hcmtlclJhbmdl
OjpjaGFyYWN0ZXJSYW5nZSgpIGNvbnN0Cit7CisgICAgaWYgKG1fc3RhcnQubV9kYXRhLm9iamVj
dElEICE9IG1fZW5kLm1fZGF0YS5vYmplY3RJRAorICAgICAgICB8fCBtX3N0YXJ0Lm1fZGF0YS50
cmVlSUQgIT0gbV9lbmQubV9kYXRhLnRyZWVJRCkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKKworICAgIGlmIChtX3N0YXJ0Lm1fZGF0YS5jaGFyYWN0ZXJPZmZzZXQgPiBtX2VuZC5tX2Rh
dGEuY2hhcmFjdGVyT2Zmc2V0KSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KKyAgICByZXR1cm4geyB7IG1fc3RhcnQu
bV9kYXRhLmNoYXJhY3Rlck9mZnNldCwgbV9lbmQubV9kYXRhLmNoYXJhY3Rlck9mZnNldCAtIG1f
c3RhcnQubV9kYXRhLmNoYXJhY3Rlck9mZnNldCB9IH07Cit9CisKIHN0ZDo6cGFydGlhbF9vcmRl
cmluZyBwYXJ0aWFsT3JkZXIoY29uc3QgQVhUZXh0TWFya2VyJiBtYXJrZXIxLCBjb25zdCBBWFRl
eHRNYXJrZXImIG1hcmtlcjIpCiB7CiAgICAgaWYgKG1hcmtlcjEub2JqZWN0SUQoKSA9PSBtYXJr
ZXIyLm9iamVjdElEKCkgJiYgbWFya2VyMS50cmVlSUQoKSA9PSBtYXJrZXIyLnRyZWVJRCgpKSB7
CkBAIC0zMDUsNCArMzE4LDE2IEBAIGJvb2wgQVhUZXh0TWFya2VyUmFuZ2U6OmlzQ29uZmluZWRU
byhBWElEIG9iamVjdElEKSBjb25zdAogICAgICAgICAmJiBMSUtFTFkobV9zdGFydC50cmVlSUQo
KSA9PSBtX2VuZC50cmVlSUQoKSk7CiB9CiAKKyNpZiBFTkFCTEUoQUNDRVNTSUJJTElUWV9JU09M
QVRFRF9UUkVFKQorQVhJc29sYXRlZFRleHRNYXJrZXJSYW5nZTo6QVhJc29sYXRlZFRleHRNYXJr
ZXJSYW5nZShjb25zdCBBWFRleHRNYXJrZXJSYW5nZSYgcmFuZ2UpCit7CisgICAgb2JqZWN0SUQg
PSByYW5nZS5zdGFydCgpLm9iamVjdElEKCk7CisgICAgaWYgKGF1dG8gY2hhcmFjdGVyUmFuZ2Ug
PSByYW5nZS5jaGFyYWN0ZXJSYW5nZSgpKSB7CisgICAgICAgIHN0YXJ0ID0gc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KGNoYXJhY3RlclJhbmdlLT5sb2NhdGlvbik7CisgICAgICAgIGVuZCA9IHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihjaGFyYWN0ZXJSYW5nZS0+bG9jYXRpb24gKyBjaGFyYWN0ZXJSYW5n
ZS0+bGVuZ3RoKTsKKyAgICB9Cit9CisjZW5kaWYKKworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYVGV4dE1hcmtlci5o
IGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWFRleHRNYXJrZXIuaAppbmRleCAzMThl
ZDA2OGE2MzEuLjgxYzBjMWNiN2ZiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BWFRleHRNYXJrZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FYVGV4dE1hcmtlci5oCkBAIC0xNTUsNiArMTU1LDcgQEAgcHVibGljOgogICAgIG9wZXJhdG9y
IGJvb2woKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0ICYmIG1fZW5kOyB9CiAgICAgb3BlcmF0b3Ig
VmlzaWJsZVBvc2l0aW9uUmFuZ2UoKSBjb25zdDsKICAgICBzdGQ6Om9wdGlvbmFsPFNpbXBsZVJh
bmdlPiBzaW1wbGVSYW5nZSgpIGNvbnN0OworICAgIHN0ZDo6b3B0aW9uYWw8Q2hhcmFjdGVyUmFu
Z2U+IGNoYXJhY3RlclJhbmdlKCkgY29uc3Q7CiAKICNpZiBQTEFURk9STShNQUMpCiAgICAgUmV0
YWluUHRyPEFYVGV4dE1hcmtlclJhbmdlUmVmPiBwbGF0Zm9ybURhdGEoKSBjb25zdDsKQEAgLTE3
Myw2ICsxNzQsMTYgQEAgcHJpdmF0ZToKICAgICBBWFRleHRNYXJrZXIgbV9lbmQ7CiB9OwogCisj
aWYgRU5BQkxFKEFDQ0VTU0lCSUxJVFlfSVNPTEFURURfVFJFRSkKKy8vIFRoaXMgbGlnaHR3ZWln
aHQgcmVwcmVzZW50YXRpb24gb2YgYSB0ZXh0IG1hcmtlciByYW5nZSBpcyAxNiBieXRlcyAoaW5z
dGVhZCBvZiA4MCBieXRlcyksIG1ha2luZyBpdCBmYXIgbW9yZSBlZmZpY2llbnQgdG8gc3RvcmUg
aW4gdGhlIGlzb2xhdGVkIG9iamVjdCdzIHByb3BlcnR5IG1hcC4KK3N0cnVjdCBBWElzb2xhdGVk
VGV4dE1hcmtlclJhbmdlIHsKKyAgICBBWElEIG9iamVjdElEOworICAgIHVuc2lnbmVkIHN0YXJ0
OworICAgIHVuc2lnbmVkIGVuZDsKKyAgICBBWElzb2xhdGVkVGV4dE1hcmtlclJhbmdlKGNvbnN0
IEFYVGV4dE1hcmtlclJhbmdlJik7Cit9OworI2VuZGlmCisKIGlubGluZSBOb2RlKiBBWFRleHRN
YXJrZXI6Om5vZGUoKSBjb25zdAogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3Qu
Y3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNw
cAppbmRleCAwNjg1NmZhNzMyYWQuLmUxOTNkNjU1MDFlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCkBAIC00MDUsMzkg
KzQwNSw0MSBAQCBzdGQ6Om9wdGlvbmFsPFNpbXBsZVJhbmdlPiBBY2Nlc3NpYmlsaXR5T2JqZWN0
OjptaXNzcGVsbGluZ1JhbmdlKGNvbnN0IFNpbXBsZVJhbgogICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7CiB9CiAKLWJvb2wgQWNjZXNzaWJpbGl0eU9iamVjdDo6aXNOb2RlRm9yQ29tcG9zaXRpb24o
Y29uc3QgRWRpdG9yJiBlZGl0b3IpIGNvbnN0CitzdGQ6Om9wdGlvbmFsPENoYXJhY3RlclJhbmdl
PiBBY2Nlc3NpYmlsaXR5T2JqZWN0Ojp0ZXh0SW5wdXRNYXJrZWRSYW5nZSgpIGNvbnN0CiB7Ci0g
ICAgV2Vha1B0ciBjb21wb3NpdGlvbk5vZGUgPSBlZGl0b3IuY29tcG9zaXRpb25Ob2RlKCk7Ci0g
ICAgaWYgKCFjb21wb3NpdGlvbk5vZGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFdl
YWtQdHIgY2FjaGUgPSBheE9iamVjdENhY2hlKCk7Ci0gICAgaWYgKCFjYWNoZSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGF1dG8qIGNvbXBvc2l0aW9uT2JqZWN0ID0gY2FjaGUt
PnRleHRDb21wb3NpdGlvbk9iamVjdEZvck5vZGUoKmNvbXBvc2l0aW9uTm9kZSkpCi0gICAgICAg
IHJldHVybiBjb21wb3NpdGlvbk9iamVjdC0+b2JqZWN0SUQoKSA9PSBvYmplY3RJRCgpOworICAg
IGF1dG8gcmFuZ2UgPSB0ZXh0SW5wdXRNYXJrZWRUZXh0TWFya2VyUmFuZ2UoKS5jaGFyYWN0ZXJS
YW5nZSgpOworICAgIGlmICghcmFuZ2UgfHwgIXJhbmdlLT5sZW5ndGgpCisgICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7CiAKLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHJhbmdlOwog
fQogCi1zdGQ6Om9wdGlvbmFsPENoYXJhY3RlclJhbmdlPiBBY2Nlc3NpYmlsaXR5T2JqZWN0Ojp0
ZXh0SW5wdXRNYXJrZWRSYW5nZSgpIGNvbnN0CitBWFRleHRNYXJrZXJSYW5nZSBBY2Nlc3NpYmls
aXR5T2JqZWN0Ojp0ZXh0SW5wdXRNYXJrZWRUZXh0TWFya2VyUmFuZ2UoKSBjb25zdAogewogICAg
IFdlYWtQdHIgbm9kZSA9IHRoaXMtPm5vZGUoKTsKICAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAgIHJldHVybiB7IH07CiAKICAgICBhdXRvKiBmcmFt
ZSA9IG5vZGUtPmRvY3VtZW50KCkuZnJhbWUoKTsKICAgICBpZiAoIWZyYW1lKQotICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OworICAgICAgICByZXR1cm4geyB9OworCisgICAgYXV0byogY2Fj
aGUgPSBheE9iamVjdENhY2hlKCk7CisgICAgaWYgKCFjYWNoZSkKKyAgICAgICAgcmV0dXJuIHsg
fTsKIAogICAgIGF1dG8mIGVkaXRvciA9IGZyYW1lLT5lZGl0b3IoKTsKLSAgICBhdXRvIHJhbmdl
ID0gZWRpdG9yLmNvbXBvc2l0aW9uUmFuZ2UoKTsKLSAgICBpZiAoIXJhbmdlIHx8ICFpc05vZGVG
b3JDb21wb3NpdGlvbihlZGl0b3IpKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAg
IGF1dG8qIG9iamVjdCA9IGNhY2hlLT5nZXRPckNyZWF0ZShlZGl0b3IuY29tcG9zaXRpb25Ob2Rl
KCkpOworICAgIGlmICghb2JqZWN0KQorICAgICAgICByZXR1cm4geyB9OworCisgICAgaWYgKGF1
dG8qIG9ic2VydmFibGVPYmplY3QgPSBvYmplY3QtPm9ic2VydmFibGVPYmplY3QoKSkKKyAgICAg
ICAgb2JqZWN0ID0gb2JzZXJ2YWJsZU9iamVjdDsKKworICAgIGlmIChvYmplY3QtPm9iamVjdElE
KCkgIT0gb2JqZWN0SUQoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGF1dG8gc2NvcGUg
PSBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoKm5vZGUpOwotICAgIHJldHVybiBjaGFy
YWN0ZXJSYW5nZShzY29wZSwgKnJhbmdlKTsKKyAgICByZXR1cm4geyBlZGl0b3IuY29tcG9zaXRp
b25SYW5nZSgpIH07CiB9CiAKIHVuc2lnbmVkIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmJsb2NrcXVv
dGVMZXZlbCgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlPYmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eU9iamVjdC5oCmluZGV4IDg5ZjExZGUzZDE1Mi4uYjI3YzUxOGU1ODY1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3Qu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3Qu
aApAQCAtMjQzLDYgKzI0Myw3IEBAIHB1YmxpYzoKICAgICBib29sIGhhc1VuZGVybGluZSgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgYm9vbCBoYXNIaWdobGlnaHRpbmco
KSBjb25zdCBvdmVycmlkZTsKICAgICBzdGQ6Om9wdGlvbmFsPENoYXJhY3RlclJhbmdlPiB0ZXh0
SW5wdXRNYXJrZWRSYW5nZSgpIGNvbnN0IGZpbmFsOworICAgIEFYVGV4dE1hcmtlclJhbmdlIHRl
eHRJbnB1dE1hcmtlZFRleHRNYXJrZXJSYW5nZSgpIGNvbnN0IGZpbmFsOwogCiAgICAgYm9vbCBz
dXBwb3J0c0RhdGV0aW1lQXR0cmlidXRlKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgU3RyaW5nIGRh
dGV0aW1lQXR0cmlidXRlVmFsdWUoKSBjb25zdCBvdmVycmlkZTsKQEAgLTgxNiw4ICs4MTcsNiBA
QCBwcml2YXRlOgogICAgIC8vIFNwZWNpYWwgaGFuZGxpbmcgb2YgY2xpY2sgcG9pbnQgZm9yIGxp
bmtzLgogICAgIEludFBvaW50IGxpbmtDbGlja1BvaW50KCk7CiAKLSAgICBib29sIGlzTm9kZUZv
ckNvbXBvc2l0aW9uKGNvbnN0IEVkaXRvciYpIGNvbnN0OwotCiBwcm90ZWN0ZWQ6IC8vIEZJWE1F
OiBNYWtlIHRoZSBkYXRhIG1lbWJlcnMgcHJpdmF0ZS4KICAgICBBY2Nlc3NpYmlsaXR5Q2hpbGRy
ZW5WZWN0b3IgbV9jaGlsZHJlbjsKICAgICBtdXRhYmxlIGJvb2wgbV9jaGlsZHJlbkluaXRpYWxp
emVkIHsgZmFsc2UgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eU9iamVjdEludGVyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0SW50ZXJmYWNlLmgKaW5kZXggMjMzMGZiMjE3NWVlLi43
MDczMTJjOTA5NDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eU9iamVjdEludGVyZmFjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdEludGVyZmFjZS5oCkBAIC05ODksNiArOTg5LDcgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBoYXNVbmRlcmxpbmUoKSBjb25zdCA9IDA7CiAgICAg
dmlydHVhbCBib29sIGhhc0hpZ2hsaWdodGluZygpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIHN0
ZDo6b3B0aW9uYWw8Q2hhcmFjdGVyUmFuZ2U+IHRleHRJbnB1dE1hcmtlZFJhbmdlKCkgY29uc3Qg
PSAwOworICAgIHZpcnR1YWwgQVhUZXh0TWFya2VyUmFuZ2UgdGV4dElucHV0TWFya2VkVGV4dE1h
cmtlclJhbmdlKCkgY29uc3QgPSAwOwogCiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRGF0ZXRp
bWVBdHRyaWJ1dGUoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBTdHJpbmcgZGF0ZXRpbWVBdHRy
aWJ1dGVWYWx1ZSgpIGNvbnN0ID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvY29jb2EvQVhUZXh0TWFya2VyQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L2NvY29hL0FYVGV4dE1hcmtlckNvY29hLm1tCmluZGV4IDQ5NWY0M2Y3YzliMy4u
MDE5MjYyMTFkZDA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2Nv
Y29hL0FYVGV4dE1hcmtlckNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvY29jb2EvQVhUZXh0TWFya2VyQ29jb2EubW0KQEAgLTkzLDE1ICs5Myw3IEBAIFJldGFpblB0
cjxBWFRleHRNYXJrZXJSYW5nZVJlZj4gQVhUZXh0TWFya2VyUmFuZ2U6OnBsYXRmb3JtRGF0YSgp
IGNvbnN0CiAKIHN0ZDo6b3B0aW9uYWw8TlNSYW5nZT4gQVhUZXh0TWFya2VyUmFuZ2U6Om5zUmFu
Z2UoKSBjb25zdAogewotICAgIGlmIChtX3N0YXJ0Lm1fZGF0YS5vYmplY3RJRCAhPSBtX2VuZC5t
X2RhdGEub2JqZWN0SUQKLSAgICAgICAgfHwgbV9zdGFydC5tX2RhdGEudHJlZUlEICE9IG1fZW5k
Lm1fZGF0YS50cmVlSUQpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICBpZiAo
bV9zdGFydC5tX2RhdGEuY2hhcmFjdGVyT2Zmc2V0ID4gbV9lbmQubV9kYXRhLmNoYXJhY3Rlck9m
ZnNldCkgewotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKLSAgICB9Ci0gICAgcmV0dXJuIE5TTWFrZVJhbmdlKG1fc3RhcnQubV9kYXRh
LmNoYXJhY3Rlck9mZnNldCwgbV9lbmQubV9kYXRhLmNoYXJhY3Rlck9mZnNldCAtIG1fc3RhcnQu
bV9kYXRhLmNoYXJhY3Rlck9mZnNldCk7CisgICAgcmV0dXJuIGNoYXJhY3RlclJhbmdlKCk7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvY29jb2EvQWNjZXNzaWJpbGl0eU9iamVjdENvY29hLm1tIGIvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9jb2NvYS9BY2Nlc3NpYmlsaXR5T2JqZWN0Q29jb2EubW0KaW5k
ZXggYmUwOGI5MjQ0Njc4Li5iMTlmZjgyNDU0YWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvY29jb2EvQWNjZXNzaWJpbGl0eU9iamVjdENvY29hLm1tCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvY29jb2EvQWNjZXNzaWJpbGl0eU9iamVjdENvY29h
Lm1tCkBAIC0zMzQsMTEgKzMzNCwxMSBAQCBSZXRhaW5QdHI8TlNBcnJheT4gQWNjZXNzaWJpbGl0
eU9iamVjdDo6Y29udGVudEZvclJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZQogICAgICAg
ICBpZiAoaXQudGV4dCgpLmxlbmd0aCgpKSB7CiAgICAgICAgICAgICBhdXRvIGxpc3RNYXJrZXJU
ZXh0ID0gbGlzdE1hcmtlclRleHRGb3JOb2RlQW5kUG9zaXRpb24oJm5vZGUsIG1ha2VDb250YWlu
ZXJPZmZzZXRQb3NpdGlvbihpdC5yYW5nZSgpLnN0YXJ0KSk7CiAgICAgICAgICAgICBpZiAoIWxp
c3RNYXJrZXJUZXh0LmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgIGlmIChhdXRvIGF0dHJT
dHJpbmcgPSBhdHRyaWJ1dGVkU3RyaW5nQ3JlYXRlKCZub2RlLCBsaXN0TWFya2VyVGV4dCwgU3Bl
bGxDaGVjazo6Tm8pKQorICAgICAgICAgICAgICAgIGlmIChhdXRvIGF0dHJTdHJpbmcgPSBhdHRy
aWJ1dGVkU3RyaW5nQ3JlYXRlKCZub2RlLCBsaXN0TWFya2VyVGV4dCwgaXQucmFuZ2UoKSwgU3Bl
bGxDaGVjazo6Tm8pKQogICAgICAgICAgICAgICAgICAgICBbcmVzdWx0IGFkZE9iamVjdDphdHRy
U3RyaW5nLmdldCgpXTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKGF1dG8gYXR0
clN0cmluZyA9IGF0dHJpYnV0ZWRTdHJpbmdDcmVhdGUoJm5vZGUsIGl0LnRleHQoKSwgc3BlbGxD
aGVjaykpCisgICAgICAgICAgICBpZiAoYXV0byBhdHRyU3RyaW5nID0gYXR0cmlidXRlZFN0cmlu
Z0NyZWF0ZSgmbm9kZSwgaXQudGV4dCgpLCBpdC5yYW5nZSgpLCBzcGVsbENoZWNrKSkKICAgICAg
ICAgICAgICAgICBbcmVzdWx0IGFkZE9iamVjdDphdHRyU3RyaW5nLmdldCgpXTsKICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgIGlmIChOb2RlKiByZXBsYWNlZE5vZGUgPSBpdC5ub2RlKCkp
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL0FjY2Vzc2li
aWxpdHlPYmplY3RJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9BY2Nl
c3NpYmlsaXR5T2JqZWN0SU9TLm1tCmluZGV4IGNiOWVjN2RjNTNmYy4uNzljMDJmZDMyZDAxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9BY2Nlc3NpYmlsaXR5
T2JqZWN0SU9TLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL0FjY2Vz
c2liaWxpdHlPYmplY3RJT1MubW0KQEAgLTIwOCw3ICsyMDgsNyBAQCBzdGF0aWMgdm9pZCBhdHRy
aWJ1dGVTdHJpbmdTZXRTdHlsZShOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nICphdHRyU3RyaW5n
LCBSZW5kZQogICAgICAgICBbYXR0clN0cmluZyBhZGRBdHRyaWJ1dGU6VUlBY2Nlc3NpYmlsaXR5
VGV4dEF0dHJpYnV0ZUNvbnRleHQgdmFsdWU6VUlBY2Nlc3NpYmlsaXR5VGV4dHVhbENvbnRleHRT
b3VyY2VDb2RlIHJhbmdlOnJhbmdlXTsKIH0KIAotUmV0YWluUHRyPE5TQXR0cmlidXRlZFN0cmlu
Zz4gYXR0cmlidXRlZFN0cmluZ0NyZWF0ZShOb2RlKiBub2RlLCBTdHJpbmdWaWV3IHRleHQsIEFY
Q29yZU9iamVjdDo6U3BlbGxDaGVjaykKK1JldGFpblB0cjxOU0F0dHJpYnV0ZWRTdHJpbmc+IGF0
dHJpYnV0ZWRTdHJpbmdDcmVhdGUoTm9kZSogbm9kZSwgU3RyaW5nVmlldyB0ZXh0LCBjb25zdCBT
aW1wbGVSYW5nZSYsIEFYQ29yZU9iamVjdDo6U3BlbGxDaGVjaykKIHsKICAgICAvLyBTa2lwIGlu
dmlzaWJsZSB0ZXh0LgogICAgIGF1dG8qIHJlbmRlcmVyID0gbm9kZS0+cmVuZGVyZXIoKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNv
bGF0ZWRPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRy
ZWUvQVhJc29sYXRlZE9iamVjdC5jcHAKaW5kZXggYTM0YWQ5NTBhZjYwLi41M2UxMGZhN2FmNjUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FY
SXNvbGF0ZWRPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNv
bGF0ZWR0cmVlL0FYSXNvbGF0ZWRPYmplY3QuY3BwCkBAIC0xNjExLDYgKzE2MTEsMjQgQEAgYm9v
bCBBWElzb2xhdGVkT2JqZWN0OjpoYXNTYW1lU3R5bGUoY29uc3QgQVhDb3JlT2JqZWN0JiBvdGhl
ck9iamVjdCkgY29uc3QKICAgICB9KTsKIH0KIAorc3RkOjpvcHRpb25hbDxDaGFyYWN0ZXJSYW5n
ZT4gQVhJc29sYXRlZE9iamVjdDo6dGV4dElucHV0TWFya2VkUmFuZ2UoKSBjb25zdAoreworICAg
IGF1dG8gcmFuZ2UgPSB0ZXh0SW5wdXRNYXJrZWRUZXh0TWFya2VyUmFuZ2UoKS5jaGFyYWN0ZXJS
YW5nZSgpOworICAgIGlmICghcmFuZ2UgfHwgIXJhbmdlLT5sZW5ndGgpCisgICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7CisKKyAgICByZXR1cm4gcmFuZ2U7Cit9CisKK0FYVGV4dE1hcmtlclJh
bmdlIEFYSXNvbGF0ZWRPYmplY3Q6OnRleHRJbnB1dE1hcmtlZFRleHRNYXJrZXJSYW5nZSgpIGNv
bnN0Cit7CisgICAgYXV0byByYW5nZSA9IG9wdGlvbmFsQXR0cmlidXRlVmFsdWU8QVhJc29sYXRl
ZFRleHRNYXJrZXJSYW5nZT4oQVhQcm9wZXJ0eU5hbWU6OlRleHRJbnB1dE1hcmtlZFRleHRNYXJr
ZXJSYW5nZSk7CisgICAgaWYgKCFyYW5nZSB8fCByYW5nZS0+c3RhcnQgPj0gcmFuZ2UtPmVuZCkK
KyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIHJldHVybiB7IHRyZWUoKS0+dHJlZUlEKCksIHJh
bmdlLT5vYmplY3RJRCwgcmFuZ2UtPnN0YXJ0LCByYW5nZS0+ZW5kIH07Cit9CisKIC8vIFRoZSBh
dHRyaWJ1dGUgdGhpcyB2YWx1ZSBpcyBleHBvc2VkIGFzIGlzIG5vdCB1c2VkIGJ5IFZvaWNlT3Zl
ciBvciBhbnkgb3RoZXIgQVggY2xpZW50IG9uIG1hY09TLCBzbyB3ZSBpbnRlbnRpb25hbGx5IGRv
bid0IGNhY2hlIGl0LgogLy8gUmUtdmlzaXQgaWYgSVRNIGV4cGFuZHMgdG8gbW9yZSBwbGF0Zm9y
bXMsIG9yIGlmIEFYIGNsaWVudHMgbmVlZCB0byBzdGFydCB1c2luZyB0aGlzLgogU3RyaW5nIEFY
SXNvbGF0ZWRPYmplY3Q6OmxpbmtSZWxWYWx1ZSgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkT2JqZWN0LmggYi9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkT2JqZWN0
LmgKaW5kZXggYzc5YzgwMGZiMmU0Li4yMzY0MmI4MzBiYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRPYmplY3QuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkT2Jq
ZWN0LmgKQEAgLTQ1Nyw3ICs0NTcsOCBAQCBwcml2YXRlOgogICAgIGJvb2wgaGFzU2FtZVN0eWxl
KGNvbnN0IEFYQ29yZU9iamVjdCYpIGNvbnN0IG92ZXJyaWRlOwogICAgIGJvb2wgaGFzVW5kZXJs
aW5lKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVy
dHlOYW1lOjpIYXNVbmRlcmxpbmUpOyB9CiAgICAgYm9vbCBoYXNIaWdobGlnaHRpbmcoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6Okhh
c0hpZ2hsaWdodGluZyk7IH0KLSAgICBzdGQ6Om9wdGlvbmFsPENoYXJhY3RlclJhbmdlPiB0ZXh0
SW5wdXRNYXJrZWRSYW5nZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG9wdGlvbmFsQXR0cmlidXRl
VmFsdWU8Q2hhcmFjdGVyUmFuZ2U+KEFYUHJvcGVydHlOYW1lOjpUZXh0SW5wdXRNYXJrZWRSYW5n
ZSk7IH0KKyAgICBzdGQ6Om9wdGlvbmFsPENoYXJhY3RlclJhbmdlPiB0ZXh0SW5wdXRNYXJrZWRS
YW5nZSgpIGNvbnN0IGZpbmFsOworICAgIEFYVGV4dE1hcmtlclJhbmdlIHRleHRJbnB1dE1hcmtl
ZFRleHRNYXJrZXJSYW5nZSgpIGNvbnN0IGZpbmFsOwogICAgIEVsZW1lbnQqIGVsZW1lbnQoKSBj
b25zdCBvdmVycmlkZTsKICAgICBOb2RlKiBub2RlKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgUmVu
ZGVyT2JqZWN0KiByZW5kZXJlcigpIGNvbnN0IG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZFRyZWUuY3BwIGIv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZFRyZWUu
Y3BwCmluZGV4IDE2MDkwMTQwOThlMS4uYjY3NTIwZDAxYzhhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkVHJlZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZFRy
ZWUuY3BwCkBAIC01ODAsMTMgKzU4MCwxMSBAQCB2b2lkIEFYSXNvbGF0ZWRUcmVlOjp1cGRhdGVO
b2RlUHJvcGVydGllcyhBWENvcmVPYmplY3QmIGF4T2JqZWN0LCBjb25zdCBWZWN0b3I8QQogICAg
ICAgICBjYXNlIEFYUHJvcGVydHlOYW1lOjpTdXBwb3J0c1NldFNpemU6CiAgICAgICAgICAgICBw
cm9wZXJ0eU1hcC5zZXQoQVhQcm9wZXJ0eU5hbWU6OlN1cHBvcnRzU2V0U2l6ZSwgYXhPYmplY3Qu
c3VwcG9ydHNTZXRTaXplKCkpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQVhQ
cm9wZXJ0eU5hbWU6OlRleHRJbnB1dE1hcmtlZFJhbmdlOgotICAgICAgICAgICAgLy8gRklYTUU6
IFdlIHNob3VsZCBoYXZlIGEgbWVjaGFuaXNtIHRvIHJlbW92ZSBhIHByb3BlcnR5IGZyb20gdGhl
IG1hcCBmb3Igd2hlbiB0ZXh0SW5wdXRNYXJrZWRSYW5nZSBpcyBzdGQ6Om51bGxvcHQuCi0gICAg
ICAgICAgICBpZiAoYXV0byB0ZXh0SW5wdXRNYXJrZWRSYW5nZSA9IGF4T2JqZWN0LnRleHRJbnB1
dE1hcmtlZFJhbmdlKCkpCi0gICAgICAgICAgICAgICAgcHJvcGVydHlNYXAuc2V0KEFYUHJvcGVy
dHlOYW1lOjpUZXh0SW5wdXRNYXJrZWRSYW5nZSwgKnRleHRJbnB1dE1hcmtlZFJhbmdlKTsKLSAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBwcm9wZXJ0eU1hcC5zZXQoQVhQcm9wZXJ0
eU5hbWU6OlRleHRJbnB1dE1hcmtlZFJhbmdlLCBudWxscHRyKTsKKyAgICAgICAgY2FzZSBBWFBy
b3BlcnR5TmFtZTo6VGV4dElucHV0TWFya2VkVGV4dE1hcmtlclJhbmdlOiB7CisgICAgICAgICAg
ICBBWElzb2xhdGVkVGV4dE1hcmtlclJhbmdlIGlzb2xhdGVkUmFuZ2UgPSB7IGF4T2JqZWN0LnRl
eHRJbnB1dE1hcmtlZFRleHRNYXJrZXJSYW5nZSgpIH07CisgICAgICAgICAgICBwcm9wZXJ0eU1h
cC5zZXQoQVhQcm9wZXJ0eU5hbWU6OlRleHRJbnB1dE1hcmtlZFRleHRNYXJrZXJSYW5nZSwgaXNv
bGF0ZWRSYW5nZSk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBjYXNl
IEFYUHJvcGVydHlOYW1lOjpVUkw6CiAgICAgICAgICAgICBwcm9wZXJ0eU1hcC5zZXQoQVhQcm9w
ZXJ0eU5hbWU6OlVSTCwgYXhPYmplY3QudXJsKCkuaXNvbGF0ZWRDb3B5KCkpOwogICAgICAgICAg
ICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xh
dGVkdHJlZS9BWElzb2xhdGVkVHJlZS5oIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9p
c29sYXRlZHRyZWUvQVhJc29sYXRlZFRyZWUuaAppbmRleCA2NGM0YWQ4M2ViYzQuLmEzZWI2ZTQ4
ZDJjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRy
ZWUvQVhJc29sYXRlZFRyZWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lz
b2xhdGVkdHJlZS9BWElzb2xhdGVkVHJlZS5oCkBAIC01MCw2ICs1MCw3IEBAIGNsYXNzIEFYT2Jq
ZWN0Q2FjaGU7CiBjbGFzcyBBY2Nlc3NpYmlsaXR5T2JqZWN0OwogY2xhc3MgUGFnZTsKIGVudW0g
Y2xhc3MgQVhTdHJlYW1PcHRpb25zIDogdWludDhfdDsKK3N0cnVjdCBBWElzb2xhdGVkVGV4dE1h
cmtlclJhbmdlOwogCiBlbnVtIGNsYXNzIEFYUHJvcGVydHlOYW1lIDogdWludDE2X3QgewogICAg
IEFSSUFJc011bHRpbGluZSwKQEAgLTIyNiw3ICsyMjcsNyBAQCBlbnVtIGNsYXNzIEFYUHJvcGVy
dHlOYW1lIDogdWludDE2X3QgewogICAgIFN1cHBvcnRzU2V0U2l6ZSwKICAgICBUYWJsZUxldmVs
LAogICAgIFRleHRDb250ZW50LAotICAgIFRleHRJbnB1dE1hcmtlZFJhbmdlLAorICAgIFRleHRJ
bnB1dE1hcmtlZFRleHRNYXJrZXJSYW5nZSwKICAgICBUaXRsZSwKICAgICBUaXRsZUF0dHJpYnV0
ZVZhbHVlLAogICAgIFRpdGxlVUlFbGVtZW50LApAQCAtMjM5LDcgKzI0MCw3IEBAIGVudW0gY2xh
c3MgQVhQcm9wZXJ0eU5hbWUgOiB1aW50MTZfdCB7CiAgICAgVmlzaWJsZVJvd3MsCiB9OwogCi11
c2luZyBBWFByb3BlcnR5VmFsdWVWYXJpYW50ID0gc3RkOjp2YXJpYW50PHN0ZDo6bnVsbHB0cl90
LCBBWElELCBTdHJpbmcsIGJvb2wsIGludCwgdW5zaWduZWQsIGRvdWJsZSwgZmxvYXQsIHVpbnQ2
NF90LCBBY2Nlc3NpYmlsaXR5QnV0dG9uU3RhdGUsIENvbG9yLCBVUkwsIExheW91dFJlY3QsIEZs
b2F0UG9pbnQsIEZsb2F0UmVjdCwgSW50UG9pbnQsIEludFJlY3QsIFBBTDo6U2Vzc2lvbklELCBz
dGQ6OnBhaXI8dW5zaWduZWQsIHVuc2lnbmVkPiwgVmVjdG9yPEFjY2Vzc2liaWxpdHlUZXh0Piwg
VmVjdG9yPEFYSUQ+LCBWZWN0b3I8c3RkOjpwYWlyPEFYSUQsIEFYSUQ+PiwgVmVjdG9yPFN0cmlu
Zz4sIFBhdGgsIE9wdGlvblNldDxBWEFuY2VzdG9yRmxhZz4sIFJldGFpblB0cjxOU0F0dHJpYnV0
ZWRTdHJpbmc+LCBJbnNpZGVMaW5rLCBWZWN0b3I8VmVjdG9yPEFYSUQ+PiwgQ2hhcmFjdGVyUmFu
Z2U+OwordXNpbmcgQVhQcm9wZXJ0eVZhbHVlVmFyaWFudCA9IHN0ZDo6dmFyaWFudDxzdGQ6Om51
bGxwdHJfdCwgQVhJRCwgU3RyaW5nLCBib29sLCBpbnQsIHVuc2lnbmVkLCBkb3VibGUsIGZsb2F0
LCB1aW50NjRfdCwgQWNjZXNzaWJpbGl0eUJ1dHRvblN0YXRlLCBDb2xvciwgVVJMLCBMYXlvdXRS
ZWN0LCBGbG9hdFBvaW50LCBGbG9hdFJlY3QsIEludFBvaW50LCBJbnRSZWN0LCBQQUw6OlNlc3Np
b25JRCwgc3RkOjpwYWlyPHVuc2lnbmVkLCB1bnNpZ25lZD4sIFZlY3RvcjxBY2Nlc3NpYmlsaXR5
VGV4dD4sIFZlY3RvcjxBWElEPiwgVmVjdG9yPHN0ZDo6cGFpcjxBWElELCBBWElEPj4sIFZlY3Rv
cjxTdHJpbmc+LCBQYXRoLCBPcHRpb25TZXQ8QVhBbmNlc3RvckZsYWc+LCBSZXRhaW5QdHI8TlNB
dHRyaWJ1dGVkU3RyaW5nPiwgSW5zaWRlTGluaywgVmVjdG9yPFZlY3RvcjxBWElEPj4sIENoYXJh
Y3RlclJhbmdlLCBBWElzb2xhdGVkVGV4dE1hcmtlclJhbmdlPjsKIHVzaW5nIEFYUHJvcGVydHlN
YXAgPSBIYXNoTWFwPEFYUHJvcGVydHlOYW1lLCBBWFByb3BlcnR5VmFsdWVWYXJpYW50LCBJbnRI
YXNoPEFYUHJvcGVydHlOYW1lPiwgV1RGOjpTdHJvbmdFbnVtSGFzaFRyYWl0czxBWFByb3BlcnR5
TmFtZT4+OwogCiBzdHJ1Y3QgQVhQcm9wZXJ0eUNoYW5nZSB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9BWE9iamVjdENhY2hlTWFjLm1tIGIvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvQVhPYmplY3RDYWNoZU1hYy5tbQppbmRleCBiODg1YTk3
ZDczMjAuLjFkMTI2NGIwNTlkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9tYWMvQVhPYmplY3RDYWNoZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L21hYy9BWE9iamVjdENhY2hlTWFjLm1tCkBAIC0xMjcsNiArMTI3LDE0IEBACiAjZGVm
aW5lIGtBWERyYWdnaW5nRGVzdGluYXRpb25EcmFnTm90QWNjZXB0ZWROb3RpZmljYXRpb24gQ0ZT
VFIoIkFYRHJhZ2dpbmdEZXN0aW5hdGlvbkRyYWdOb3RBY2NlcHRlZCIpCiAjZW5kaWYKIAorI2lm
bmRlZiBOU0FjY2Vzc2liaWxpdHlUZXh0SW5wdXRNYXJraW5nU2Vzc2lvbkJlZ2FuTm90aWZpY2F0
aW9uCisjZGVmaW5lIE5TQWNjZXNzaWJpbGl0eVRleHRJbnB1dE1hcmtpbmdTZXNzaW9uQmVnYW5O
b3RpZmljYXRpb24gQCJBWFRleHRJbnB1dE1hcmtpbmdTZXNzaW9uQmVnYW4iCisjZW5kaWYKKwor
I2lmbmRlZiBOU0FjY2Vzc2liaWxpdHlUZXh0SW5wdXRNYXJraW5nU2Vzc2lvbkVuZGVkTm90aWZp
Y2F0aW9uCisjZGVmaW5lIE5TQWNjZXNzaWJpbGl0eVRleHRJbnB1dE1hcmtpbmdTZXNzaW9uRW5k
ZWROb3RpZmljYXRpb24gQCJBWFRleHRJbnB1dE1hcmtpbmdTZXNzaW9uRW5kZWQiCisjZW5kaWYK
KwogLy8gVmVyeSBsYXJnZSBzdHJpbmdzIGNhbiBuZWdhdGl2ZWx5IGltcGFjdCB0aGUgcGVyZm9y
bWFuY2Ugb2Ygbm90aWZpY2F0aW9ucywgc28gdGhpcyBsZW5ndGggaXMgY2hvc2VuIHRvIHRyeSB0
byBmaXQgYW4gYXZlcmFnZSBwYXJhZ3JhcGggb3IgbGluZSBvZiB0ZXh0LCBidXQgbm90IGFsbG93
IHN0cmluZ3MgdG8gYmUgbGFyZ2UgZW5vdWdoIHRvIGh1cnQgcGVyZm9ybWFuY2UuCiBzdGF0aWMg
Y29uc3QgTlNVSW50ZWdlciBBWFZhbHVlQ2hhbmdlVHJ1bmNhdGlvbkxlbmd0aCA9IDEwMDA7CiAK
QEAgLTQzMSw2ICs0MzksMTIgQEAgdm9pZCBBWE9iamVjdENhY2hlOjpwb3N0UGxhdGZvcm1Ob3Rp
ZmljYXRpb24oQVhDb3JlT2JqZWN0KiBvYmplY3QsIEFYTm90aWZpY2F0aW8KICAgICBjYXNlIEFY
RHJhZ2dpbmdFeGl0ZWREcm9wWm9uZToKICAgICAgICAgbWFjTm90aWZpY2F0aW9uID0gKGlkKWtB
WERyYWdnaW5nRGVzdGluYXRpb25EcmFnTm90QWNjZXB0ZWROb3RpZmljYXRpb247CiAgICAgICAg
IGJyZWFrOworICAgIGNhc2UgQVhUZXh0SW5wdXRNYXJraW5nU2Vzc2lvbkJlZ2FuOgorICAgICAg
ICBtYWNOb3RpZmljYXRpb24gPSBOU0FjY2Vzc2liaWxpdHlUZXh0SW5wdXRNYXJraW5nU2Vzc2lv
bkJlZ2FuTm90aWZpY2F0aW9uOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFYVGV4dElucHV0
TWFya2luZ1Nlc3Npb25FbmRlZDoKKyAgICAgICAgbWFjTm90aWZpY2F0aW9uID0gTlNBY2Nlc3Np
YmlsaXR5VGV4dElucHV0TWFya2luZ1Nlc3Npb25FbmRlZE5vdGlmaWNhdGlvbjsKKyAgICAgICAg
YnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuOwogICAgIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL0FjY2Vzc2liaWxpdHlPYmplY3RNYWMu
bW0gYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9BY2Nlc3NpYmlsaXR5T2JqZWN0
TWFjLm1tCmluZGV4IDQxMWMwNTI5OGJjYy4uNDA4MTU3NDljY2JjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9BY2Nlc3NpYmlsaXR5T2JqZWN0TWFjLm1tCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL0FjY2Vzc2liaWxpdHlPYmplY3RN
YWMubW0KQEAgLTY0NCwyMyArNjQ0LDMwIEBAIHN0YXRpYyB2b2lkIGF0dHJpYnV0ZWRTdHJpbmdT
ZXRFbGVtZW50KE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcgKmF0dHJTdHJpbmcsIE5TCiAgICAg
ICAgIFthdHRyU3RyaW5nIGFkZEF0dHJpYnV0ZTphdHRyaWJ1dGUgdmFsdWU6KF9fYnJpZGdlIGlk
KWF4RWxlbWVudC5nZXQoKSByYW5nZTpyYW5nZV07CiB9CiAKLXN0YXRpYyB2b2lkIGF0dHJpYnV0
ZWRTdHJpbmdTZXRDb21wb3NpdGlvbkF0dHJpYnV0ZXMoTlNNdXRhYmxlQXR0cmlidXRlZFN0cmlu
ZyAqYXR0clN0cmluZywgTm9kZSYgbm9kZSkKK3N0YXRpYyB2b2lkIGF0dHJpYnV0ZWRTdHJpbmdT
ZXRDb21wb3NpdGlvbkF0dHJpYnV0ZXMoTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyAqYXR0clN0
cmluZywgTm9kZSYgbm9kZSwgY29uc3QgU2ltcGxlUmFuZ2UmIHRleHRTaW1wbGVSYW5nZSkKIHsK
ICNpZiBIQVZFKElOTElORV9QUkVESUNUSU9OUykKICAgICBhdXRvJiBlZGl0b3IgPSBub2RlLmRv
Y3VtZW50KCkuZWRpdG9yKCk7CiAgICAgaWYgKCZub2RlICE9IGVkaXRvci5jb21wb3NpdGlvbk5v
ZGUoKSkKICAgICAgICAgcmV0dXJuOwogCisgICAgYXV0byBzY29wZSA9IG1ha2VSYW5nZVNlbGVj
dGluZ05vZGVDb250ZW50cyhub2RlKTsKKyAgICBhdXRvIHRleHRSYW5nZSA9IGNoYXJhY3RlclJh
bmdlKHNjb3BlLCB0ZXh0U2ltcGxlUmFuZ2UpOworCiAgICAgYXV0byYgYW5ub3RhdGlvbnMgPSBl
ZGl0b3IuY3VzdG9tQ29tcG9zaXRpb25Bbm5vdGF0aW9ucygpOwogICAgIGlmIChhdXRvIGl0ID0g
YW5ub3RhdGlvbnMuZmluZChOU1RleHRDb21wbGV0aW9uQXR0cmlidXRlTmFtZSk7IGl0ICE9IGFu
bm90YXRpb25zLmVuZCgpKSB7Ci0gICAgICAgIGZvciAoYXV0byYgcmFuZ2UgOiBpdC0+dmFsdWUp
IHsKLSAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVkU3RyaW5nQ29udGFpbnNSYW5nZShhdHRyU3Ry
aW5nLCByYW5nZSkpCi0gICAgICAgICAgICAgICAgYXR0cmlidXRlZFN0cmluZ1NldE51bWJlcihh
dHRyU3RyaW5nLCBOU0FjY2Vzc2liaWxpdHlUZXh0Q29tcGxldGlvbkF0dHJpYnV0ZSwgQFlFUywg
cmFuZ2UpOworICAgICAgICBmb3IgKGF1dG8mIGFubm90YXRpb25SYW5nZSA6IGl0LT52YWx1ZSkg
eworICAgICAgICAgICAgYXV0byBpbnRlcnNlY3Rpb25SYW5nZSA9IE5TSW50ZXJzZWN0aW9uUmFu
Z2UodGV4dFJhbmdlLCBhbm5vdGF0aW9uUmFuZ2UpOworICAgICAgICAgICAgaWYgKGludGVyc2Vj
dGlvblJhbmdlLmxlbmd0aCkgeworICAgICAgICAgICAgICAgIGF1dG8gY29tcGxldGlvblJhbmdl
ID0gTlNNYWtlUmFuZ2UoaW50ZXJzZWN0aW9uUmFuZ2UubG9jYXRpb24gLSB0ZXh0UmFuZ2UubG9j
YXRpb24sIGludGVyc2VjdGlvblJhbmdlLmxlbmd0aCk7CisgICAgICAgICAgICAgICAgYXR0cmli
dXRlZFN0cmluZ1NldE51bWJlcihhdHRyU3RyaW5nLCBOU0FjY2Vzc2liaWxpdHlUZXh0Q29tcGxl
dGlvbkF0dHJpYnV0ZSwgQFlFUywgY29tcGxldGlvblJhbmdlKTsKKyAgICAgICAgICAgIH0KICAg
ICAgICAgfQogICAgIH0KICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGF0dHJTdHJpbmcpOwogICAg
IFVOVVNFRF9QQVJBTShub2RlKTsKKyAgICBVTlVTRURfUEFSQU0odGV4dFNpbXBsZVJhbmdlKTsK
ICNlbmRpZgogfQogCkBAIC03MTQsNyArNzIxLDcgQEAgdm9pZCBhdHRyaWJ1dGVkU3RyaW5nU2V0
U3BlbGxpbmcoTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyAqYXR0clN0cmluZywgTm9kZSYgbm8K
ICAgICB9CiB9CiAKLVJldGFpblB0cjxOU0F0dHJpYnV0ZWRTdHJpbmc+IGF0dHJpYnV0ZWRTdHJp
bmdDcmVhdGUoTm9kZSogbm9kZSwgU3RyaW5nVmlldyB0ZXh0LCBBWENvcmVPYmplY3Q6OlNwZWxs
Q2hlY2sgc3BlbGxDaGVjaykKK1JldGFpblB0cjxOU0F0dHJpYnV0ZWRTdHJpbmc+IGF0dHJpYnV0
ZWRTdHJpbmdDcmVhdGUoTm9kZSogbm9kZSwgU3RyaW5nVmlldyB0ZXh0LCBjb25zdCBTaW1wbGVS
YW5nZSYgdGV4dFJhbmdlLCBBWENvcmVPYmplY3Q6OlNwZWxsQ2hlY2sgc3BlbGxDaGVjaykKIHsK
ICAgICBpZiAoIW5vZGUgfHwgIXRleHQubGVuZ3RoKCkpCiAgICAgICAgIHJldHVybiBuaWw7CkBA
IC03MzMsNyArNzQwLDcgQEAgUmV0YWluUHRyPE5TQXR0cmlidXRlZFN0cmluZz4gYXR0cmlidXRl
ZFN0cmluZ0NyZWF0ZShOb2RlKiBub2RlLCBTdHJpbmdWaWV3IHRleHQKICAgICBhdHRyaWJ1dGVk
U3RyaW5nU2V0QmxvY2txdW90ZUxldmVsKHJlc3VsdC5nZXQoKSwgcmVuZGVyZXIuZ2V0KCksIHJh
bmdlKTsKICAgICBhdHRyaWJ1dGVkU3RyaW5nU2V0RXhwYW5kZWRUZXh0KHJlc3VsdC5nZXQoKSwg
cmVuZGVyZXIuZ2V0KCksIHJhbmdlKTsKICAgICBhdHRyaWJ1dGVkU3RyaW5nU2V0RWxlbWVudChy
ZXN1bHQuZ2V0KCksIE5TQWNjZXNzaWJpbGl0eUxpbmtUZXh0QXR0cmlidXRlLCBBY2Nlc3NpYmls
aXR5T2JqZWN0OjphbmNob3JFbGVtZW50Rm9yTm9kZShub2RlKSwgcmFuZ2UpOwotICAgIGF0dHJp
YnV0ZWRTdHJpbmdTZXRDb21wb3NpdGlvbkF0dHJpYnV0ZXMocmVzdWx0LmdldCgpLCAqbm9kZSk7
CisgICAgYXR0cmlidXRlZFN0cmluZ1NldENvbXBvc2l0aW9uQXR0cmlidXRlcyhyZXN1bHQuZ2V0
KCksICpub2RlLCB0ZXh0UmFuZ2UpOwogICAgIC8vIERvIHNwZWxsaW5nIGxhc3QgYmVjYXVzZSBp
dCB0ZW5kcyB0byBicmVhayB1cCB0aGUgcmFuZ2UuCiAgICAgaWYgKHNwZWxsQ2hlY2sgPT0gQVhD
b3JlT2JqZWN0OjpTcGVsbENoZWNrOjpZZXMpIHsKICAgICAgICAgaWYgKEFYT2JqZWN0Q2FjaGU6
OnNob3VsZFNwZWxsQ2hlY2soKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQmFzZS5oIGIvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJCYXNl
LmgKaW5kZXggMmM2MDY1MWRlNDY4Li5hZjAyZWI3ZGU1MmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQmFz
ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxp
dHlPYmplY3RXcmFwcGVyQmFzZS5oCkBAIC01Myw3ICs1Myw3IEBAIHZvaWQgYXR0cmlidXRlZFN0
cmluZ1NldE51bWJlcihOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nICosIE5TU3RyaW5nICosIE5T
TnVtYmVyCiB2b2lkIGF0dHJpYnV0ZWRTdHJpbmdTZXRGb250KE5TTXV0YWJsZUF0dHJpYnV0ZWRT
dHJpbmcgKiwgQ1RGb250UmVmLCBjb25zdCBOU1JhbmdlJik7CiB2b2lkIGF0dHJpYnV0ZWRTdHJp
bmdTZXRTcGVsbGluZyhOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nICosIE5vZGUmLCBTdHJpbmdW
aWV3LCBjb25zdCBOU1JhbmdlJik7CiB2b2lkIGF0dHJpYnV0ZWRTdHJpbmdTZXROZWVkc1NwZWxs
Q2hlY2soTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyAqLCBOb2RlJik7Ci1SZXRhaW5QdHI8TlNB
dHRyaWJ1dGVkU3RyaW5nPiBhdHRyaWJ1dGVkU3RyaW5nQ3JlYXRlKE5vZGUqLCBTdHJpbmdWaWV3
LCBBWENvcmVPYmplY3Q6OlNwZWxsQ2hlY2spOworUmV0YWluUHRyPE5TQXR0cmlidXRlZFN0cmlu
Zz4gYXR0cmlidXRlZFN0cmluZ0NyZWF0ZShOb2RlKiwgU3RyaW5nVmlldywgY29uc3QgU2ltcGxl
UmFuZ2UmLCBBWENvcmVPYmplY3Q6OlNwZWxsQ2hlY2spOwogfQogCiBAaW50ZXJmYWNlIFdlYkFj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQmFzZSA6IE5TT2JqZWN0IHsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFw
cGVyTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXJNYWMubW0KaW5kZXggMDA5N2FiMzk2MDU2Li5hYjY1MDFkMTAzODcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2li
aWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tCkBAIC00ODgsNiArNDg4
LDEwIEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlU
ZXh0SW5wdXRNYXJrZWRSYW5nZUF0dHJpYnV0ZSBAIkFYVGV4dElucHV0TWFya2VkUmFuZ2UiCiAj
ZW5kaWYKIAorI2lmbmRlZiBOU0FjY2Vzc2liaWxpdHlUZXh0SW5wdXRNYXJrZWRUZXh0TWFya2Vy
UmFuZ2VBdHRyaWJ1dGUKKyNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5VGV4dElucHV0TWFya2VkVGV4
dE1hcmtlclJhbmdlQXR0cmlidXRlIEAiQVhUZXh0SW5wdXRNYXJrZWRUZXh0TWFya2VyUmFuZ2Ui
CisjZW5kaWYKKwogQGltcGxlbWVudGF0aW9uIFdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVy
CiAKIC0gKHZvaWQpZGV0YWNoCkBAIC05MTksNiArOTIzLDcgQEAgQUxMT1dfREVQUkVDQVRFRF9J
TVBMRU1FTlRBVElPTlNfRU5ECiAgICAgICAgIE5TQWNjZXNzaWJpbGl0eUVkaXRhYmxlQW5jZXN0
b3JBdHRyaWJ1dGUsCiAgICAgICAgIE5TQWNjZXNzaWJpbGl0eUhpZ2hlc3RFZGl0YWJsZUFuY2Vz
dG9yQXR0cmlidXRlLAogICAgICAgICBOU0FjY2Vzc2liaWxpdHlUZXh0SW5wdXRNYXJrZWRSYW5n
ZUF0dHJpYnV0ZSwKKyAgICAgICAgTlNBY2Nlc3NpYmlsaXR5VGV4dElucHV0TWFya2VkVGV4dE1h
cmtlclJhbmdlQXR0cmlidXRlLAogICAgIF07CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkIHNw
aW5CdXR0b25Db21tb25BdHRyaWJ1dGVzID0gW10gewogICAgICAgICBhdXRvIHRlbXBBcnJheSA9
IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhBcnJheTphdHRyaWJ1dGVz
LmdldCgpLmdldCgpXSk7CkBAIC0yMjUzLDYgKzIyNTgsMTIgQEAgQUxMT1dfREVQUkVDQVRFRF9J
TVBMRU1FTlRBVElPTlNfRU5ECiAgICAgICAgIHJldHVybiByYW5nZSA/IFtOU1ZhbHVlIHZhbHVl
V2l0aFJhbmdlOipyYW5nZV0gOiBuaWw7CiAgICAgfQogCisgICAgaWYgKFthdHRyaWJ1dGVOYW1l
IGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlUZXh0SW5wdXRNYXJrZWRUZXh0TWFya2Vy
UmFuZ2VBdHRyaWJ1dGVdKSB7CisgICAgICAgIGlmIChhdXRvIHJhbmdlID0gYmFja2luZ09iamVj
dC0+dGV4dElucHV0TWFya2VkVGV4dE1hcmtlclJhbmdlKCkpCisgICAgICAgICAgICByZXR1cm4g
KGlkKUFYVGV4dE1hcmtlclJhbmdlUmVmKHJhbmdlKTsKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAg
ICB9CisKICAgICByZXR1cm4gbmlsOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0VkaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKaW5k
ZXggOTRkOTM0NTBiYjMwLi5mYmY4ZDlmYzViZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRWRpdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5j
cHAKQEAgLTIxNzcsMTQgKzIxNzcsMTQgQEAgdm9pZCBFZGl0b3I6OnNldENvbXBvc2l0aW9uKGNv
bnN0IFN0cmluZyYgdGV4dCwgU2V0Q29tcG9zaXRpb25Nb2RlIG1vZGUpCiAgICAgZWxzZQogICAg
ICAgICBzZWxlY3RDb21wb3NpdGlvbigpOwogCi0gICAgYXV0byogcHJldmlvdXNDb21wb3NpdGlv
bk5vZGUgPSBjb21wb3NpdGlvbk5vZGUoKTsKKyAgICBSZWZQdHIgcHJldmlvdXNDb21wb3NpdGlv
bk5vZGUgPSBtX2NvbXBvc2l0aW9uTm9kZTsKICAgICBtX2NvbXBvc2l0aW9uTm9kZSA9IG51bGxw
dHI7CiAgICAgbV9jdXN0b21Db21wb3NpdGlvblVuZGVybGluZXMuY2xlYXIoKTsKICAgICBtX2N1
c3RvbUNvbXBvc2l0aW9uSGlnaGxpZ2h0cy5jbGVhcigpOwogICAgIG1fY3VzdG9tQ29tcG9zaXRp
b25Bbm5vdGF0aW9ucy5jbGVhcigpOwogCiAgICAgaWYgKGF1dG8qIGNhY2hlID0gbV9kb2N1bWVu
dC5leGlzdGluZ0FYT2JqZWN0Q2FjaGUoKTsgY2FjaGUgJiYgcHJldmlvdXNDb21wb3NpdGlvbk5v
ZGUpCi0gICAgICAgIGNhY2hlLT5vblRleHRDb21wb3NpdGlvbkNoYW5nZSgqcHJldmlvdXNDb21w
b3NpdGlvbk5vZGUpOworICAgICAgICBjYWNoZS0+b25UZXh0Q29tcG9zaXRpb25DaGFuZ2UoKnBy
ZXZpb3VzQ29tcG9zaXRpb25Ob2RlLCBBWE9iamVjdENhY2hlOjpDb21wb3NpdGlvblN0YXRlOjpF
bmRlZCwgZmFsc2UpOwogCiAgICAgaWYgKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNOb25lKCkp
CiAgICAgICAgIHJldHVybjsKQEAgLTIyODIsNyArMjI4Miw3IEBAIHZvaWQgRWRpdG9yOjpzZXRD
b21wb3NpdGlvbihjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFZlY3RvcjxDb21wb3NpdGlvblVu
ZGVybGluCiAgICAgICAgICAgICB0YXJnZXQtPmRpc3BhdGNoRXZlbnQoQ29tcG9zaXRpb25FdmVu
dDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5jb21wb3NpdGlvbmVuZEV2ZW50LCBkb2N1bWVudCgpLndp
bmRvd1Byb3h5KCksIHRleHQpKTsKICAgICB9CiAKLSAgICBhdXRvKiBwcmV2aW91c0NvbXBvc2l0
aW9uTm9kZSA9IGNvbXBvc2l0aW9uTm9kZSgpOworICAgIFJlZlB0ciBwcmV2aW91c0NvbXBvc2l0
aW9uTm9kZSA9IG1fY29tcG9zaXRpb25Ob2RlOwogICAgIG1fY29tcG9zaXRpb25Ob2RlID0gbnVs
bHB0cjsKICAgICBtX2N1c3RvbUNvbXBvc2l0aW9uVW5kZXJsaW5lcy5jbGVhcigpOwogICAgIG1f
Y3VzdG9tQ29tcG9zaXRpb25IaWdobGlnaHRzLmNsZWFyKCk7CkBAIC0yMzMwLDExICsyMzMwLDE0
IEBAIHZvaWQgRWRpdG9yOjpzZXRDb21wb3NpdGlvbihjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0
IFZlY3RvcjxDb21wb3NpdGlvblVuZGVybGluCiAgICAgfQogCiAgICAgaWYgKGF1dG8qIGNhY2hl
ID0gbV9kb2N1bWVudC5leGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSkgewotICAgICAgICBhdXRvKiBj
dXJyZW50Q29tcG9zaXRpb25Ob2RlID0gY29tcG9zaXRpb25Ob2RlKCk7Ci0gICAgICAgIGlmIChw
cmV2aW91c0NvbXBvc2l0aW9uTm9kZSAmJiBwcmV2aW91c0NvbXBvc2l0aW9uTm9kZSAhPSBjdXJy
ZW50Q29tcG9zaXRpb25Ob2RlKQotICAgICAgICAgICAgY2FjaGUtPm9uVGV4dENvbXBvc2l0aW9u
Q2hhbmdlKCpwcmV2aW91c0NvbXBvc2l0aW9uTm9kZSk7Ci0gICAgICAgIGlmIChjdXJyZW50Q29t
cG9zaXRpb25Ob2RlKQotICAgICAgICAgICAgY2FjaGUtPm9uVGV4dENvbXBvc2l0aW9uQ2hhbmdl
KCpjdXJyZW50Q29tcG9zaXRpb25Ob2RlKTsKKyAgICAgICAgaWYgKHByZXZpb3VzQ29tcG9zaXRp
b25Ob2RlICYmIHByZXZpb3VzQ29tcG9zaXRpb25Ob2RlICE9IG1fY29tcG9zaXRpb25Ob2RlKSB7
CisgICAgICAgICAgICBhdXRvIHN0YXRlID0gbV9jb21wb3NpdGlvbk5vZGUgPyBBWE9iamVjdENh
Y2hlOjpDb21wb3NpdGlvblN0YXRlOjpJblByb2dyZXNzIDogQVhPYmplY3RDYWNoZTo6Q29tcG9z
aXRpb25TdGF0ZTo6RW5kZWQ7CisgICAgICAgICAgICBjYWNoZS0+b25UZXh0Q29tcG9zaXRpb25D
aGFuZ2UoKnByZXZpb3VzQ29tcG9zaXRpb25Ob2RlLCBzdGF0ZSwgdHJ1ZSk7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKG1fY29tcG9zaXRpb25Ob2RlKSB7CisgICAgICAgICAgICBhdXRvIHN0YXRl
ID0gcHJldmlvdXNDb21wb3NpdGlvbk5vZGUgPyBBWE9iamVjdENhY2hlOjpDb21wb3NpdGlvblN0
YXRlOjpJblByb2dyZXNzIDogQVhPYmplY3RDYWNoZTo6Q29tcG9zaXRpb25TdGF0ZTo6U3RhcnRl
ZDsKKyAgICAgICAgICAgIGNhY2hlLT5vblRleHRDb21wb3NpdGlvbkNoYW5nZSgqbV9jb21wb3Np
dGlvbk5vZGUsIHN0YXRlLCB0cnVlKTsKKyAgICAgICAgfQogICAgIH0KIAogI2lmIFBMQVRGT1JN
KElPU19GQU1JTFkpICAgICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
VHlwaW5nQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQu
Y3BwCmluZGV4IGM3ODlkZjZiOGQwZC4uMzhmMTE0ZTk3YWNjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAKQEAgLTI1Miw3ICsyNTIsMTIgQEAgdm9pZCBUeXBpbmdD
b21tYW5kOjppbnNlcnRUZXh0KERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgU3RyaW5nJiB0ZXh0
LCBjb25zdCBWaXMKICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldENvbXBvc2l0aW9uVHlw
ZShjb21wb3NpdGlvblR5cGUpOwogICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+c2V0U2hvdWxk
UmV0YWluQXV0b2NvcnJlY3Rpb25JbmRpY2F0b3Iob3B0aW9ucy5jb250YWlucyhPcHRpb246OlJl
dGFpbkF1dG9jb3JyZWN0aW9uSW5kaWNhdG9yKSk7CiAgICAgICAgIGxhc3RUeXBpbmdDb21tYW5k
LT5zZXRTaG91bGRQcmV2ZW50U3BlbGxDaGVja2luZyhvcHRpb25zLmNvbnRhaW5zKE9wdGlvbjo6
UHJldmVudFNwZWxsQ2hlY2tpbmcpKTsKLSAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPmluc2Vy
dFRleHRBbmROb3RpZnlBY2Nlc3NpYmlsaXR5KG5ld1RleHQsIG9wdGlvbnMuY29udGFpbnMoT3B0
aW9uOjpTZWxlY3RJbnNlcnRlZFRleHQpKTsKKyNpZiBIQVZFKElOTElORV9QUkVESUNUSU9OUykK
KyAgICAgICAgaWYgKGNvbXBvc2l0aW9uVHlwZSAhPSBUZXh0Q29tcG9zaXRpb25UeXBlOjpOb25l
KQorICAgICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPmluc2VydFRleHQobmV3VGV4dCwgb3B0
aW9ucy5jb250YWlucyhPcHRpb246OlNlbGVjdEluc2VydGVkVGV4dCkpOworICAgICAgICBlbHNl
CisjZW5kaWYKKyAgICAgICAgICAgIGxhc3RUeXBpbmdDb21tYW5kLT5pbnNlcnRUZXh0QW5kTm90
aWZ5QWNjZXNzaWJpbGl0eShuZXdUZXh0LCBvcHRpb25zLmNvbnRhaW5zKE9wdGlvbjo6U2VsZWN0
SW5zZXJ0ZWRUZXh0KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuY3BwIGIvVG9vbHMvRHVt
cFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5jcHAKaW5kZXggMjdiY2JkYTllNzU4
Li44Y2NiMjM0MDJkZDcgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2li
aWxpdHlVSUVsZW1lbnQuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxp
dHlVSUVsZW1lbnQuY3BwCkBAIC04NDYsNiArODQ2LDExIEBAIHN0YXRpYyBKU1ZhbHVlUmVmIGlu
c2VydFRleHRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rp
b24sCiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlQm9vbGVhbihjb250ZXh0LCB0b0FYRWxlbWVudCh0
aGlzT2JqZWN0KS0+aW5zZXJ0VGV4dCh0ZXh0LmdldCgpKSk7CiB9CiAKK3N0YXRpYyBKU1ZhbHVl
UmVmIHRleHRJbnB1dE1hcmtlZFRleHRNYXJrZXJSYW5nZUNhbGxiYWNrKEpTQ29udGV4dFJlZiBj
b250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6
ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVS
ZWYqIGV4Y2VwdGlvbikKK3sKKyAgICByZXR1cm4gQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5n
ZTo6bWFrZUpTQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZShjb250ZXh0LCB0b0FYRWxlbWVu
dCh0aGlzT2JqZWN0KS0+dGV4dElucHV0TWFya2VkVGV4dE1hcmtlclJhbmdlKCkpOworfQorCiBz
dGF0aWMgSlNWYWx1ZVJlZiBhdHRyaWJ1dGVkU3RyaW5nRm9yVGV4dE1hcmtlclJhbmdlQ29udGFp
bnNBdHRyaWJ1dGVDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVu
Y3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25z
dCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7CiAgICAg
QWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZSogbWFya2VyUmFuZ2UgPSAwOwpAQCAtMTc3OSw2
ICsxNzg0LDExIEBAIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aW5zZXJ0VGV4dChKU1N0
cmluZ1JlZikKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK0FjY2Vzc2liaWxpdHlUZXh0TWFya2Vy
UmFuZ2UgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGV4dElucHV0TWFya2VkVGV4dE1hcmtlclJh
bmdlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwogaW50IEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OnRleHRNYXJrZXJSYW5nZUxlbmd0aChBY2Nlc3NpYmlsaXR5VGV4dE1hcmtl
clJhbmdlKikKIHsKICAgICByZXR1cm4gMDsKQEAgLTIxMzMsNiArMjE0Myw3IEBAIEpTQ2xhc3NS
ZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Z2V0SlNDbGFzcygpCiAgICAgICAgIHsgIm1pc3Nw
ZWxsaW5nVGV4dE1hcmtlclJhbmdlIiwgbWlzc3BlbGxpbmdUZXh0TWFya2VyUmFuZ2VDYWxsYmFj
aywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9u
dERlbGV0ZSB9LAogICAgICAgICB7ICJ0ZXh0TWFya2VyUmFuZ2VGb3JFbGVtZW50IiwgdGV4dE1h
cmtlclJhbmdlRm9yRWxlbWVudENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5
IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgInNlbGVjdGVk
VGV4dE1hcmtlclJhbmdlIiwgc2VsZWN0ZWRUZXh0TWFya2VyUmFuZ2VDYWxsYmFjaywga0pTUHJv
cGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9
LAorICAgICAgICB7ICJ0ZXh0SW5wdXRNYXJrZWRUZXh0TWFya2VyUmFuZ2UiLCB0ZXh0SW5wdXRN
YXJrZWRUZXh0TWFya2VyUmFuZ2VDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25s
eSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7ICJyZXNldFNl
bGVjdGVkVGV4dE1hcmtlclJhbmdlIiwgcmVzZXRTZWxlY3RlZFRleHRNYXJrZXJSYW5nZUNhbGxi
YWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVE
b250RGVsZXRlIH0sCiAgICAgICAgIHsgInJlcGxhY2VUZXh0SW5SYW5nZSIsIHJlcGxhY2VUZXh0
SW5SYW5nZUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVy
dHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgImluc2VydFRleHQiLCBpbnNlcnRU
ZXh0Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0
dHJpYnV0ZURvbnREZWxldGUgfSwKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0Fj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQuaCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxp
dHlVSUVsZW1lbnQuaAppbmRleCA0ZGY5NzA5ZTRhOGYuLmFkODc0YmRmMjYxMyAxMDA2NDQKLS0t
IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oCisrKyBiL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaApAQCAtMzAwLDYgKzMw
MCw3IEBAIHB1YmxpYzoKICAgICBib29sIHNldFNlbGVjdGVkVGV4dE1hcmtlclJhbmdlKEFjY2Vz
c2liaWxpdHlUZXh0TWFya2VyUmFuZ2UqKTsKICAgICBib29sIHJlcGxhY2VUZXh0SW5SYW5nZShK
U1N0cmluZ1JlZiwgaW50IHBvc2l0aW9uLCBpbnQgbGVuZ3RoKTsKICAgICBib29sIGluc2VydFRl
eHQoSlNTdHJpbmdSZWYpOworICAgIEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2UgdGV4dElu
cHV0TWFya2VkVGV4dE1hcmtlclJhbmdlKCkgY29uc3Q7CiAKICAgICBKU1JldGFpblB0cjxKU1N0
cmluZ1JlZj4gc3RyaW5nRm9yVGV4dE1hcmtlclJhbmdlKEFjY2Vzc2liaWxpdHlUZXh0TWFya2Vy
UmFuZ2UqKTsKICAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gYXR0cmlidXRlZFN0cmluZ0Zv
clRleHRNYXJrZXJSYW5nZShBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlKik7CmRpZmYgLS1n
aXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9pb3MvQWNjZXNzaWJpbGl0eVVJRWxlbWVudElPUy5t
bSBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2lvcy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50SU9TLm1t
CmluZGV4IDBmY2E0ODk0YWZlZC4uOGQ3NjgyODhhZGI1IDEwMDY0NAotLS0gYS9Ub29scy9EdW1w
UmVuZGVyVHJlZS9pb3MvQWNjZXNzaWJpbGl0eVVJRWxlbWVudElPUy5tbQorKysgYi9Ub29scy9E
dW1wUmVuZGVyVHJlZS9pb3MvQWNjZXNzaWJpbGl0eVVJRWxlbWVudElPUy5tbQpAQCAtNDk5LDYg
KzQ5OSwxMSBAQCB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJlc2V0U2VsZWN0ZWRUZXh0
TWFya2VyUmFuZ2UoKQogewogfQogCitBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlIEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OnRleHRJbnB1dE1hcmtlZFRleHRNYXJrZXJSYW5nZSgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKIGludCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
Ojp0ZXh0TWFya2VyUmFuZ2VMZW5ndGgoQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZSogcmFu
Z2UpCiB7CiAgICAgaWQgdGV4dE1hcmtlcnMgPSByYW5nZS0+cGxhdGZvcm1UZXh0TWFya2VyUmFu
Z2UoKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5
VUlFbGVtZW50TWFjLm1tIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2liaWxpdHlV
SUVsZW1lbnRNYWMubW0KaW5kZXggNGFlNDY5ODY1NDQ0Li4xOThmNGY2MzJhOGEgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1t
CisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFj
Lm1tCkBAIC03OSw2ICs3OSwxMCBAQAogI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlUZXh0SW5wdXRN
YXJrZWRSYW5nZUF0dHJpYnV0ZSBAIkFYVGV4dElucHV0TWFya2VkUmFuZ2UiCiAjZW5kaWYKIAor
I2lmbmRlZiBOU0FjY2Vzc2liaWxpdHlUZXh0SW5wdXRNYXJrZWRUZXh0TWFya2VyUmFuZ2VBdHRy
aWJ1dGUKKyNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5VGV4dElucHV0TWFya2VkVGV4dE1hcmtlclJh
bmdlQXR0cmlidXRlIEAiQVhUZXh0SW5wdXRNYXJrZWRUZXh0TWFya2VyUmFuZ2UiCisjZW5kaWYK
KwogdHlwZWRlZiB2b2lkICgqQVhQb3N0ZWROb3RpZmljYXRpb25DYWxsYmFjaykoaWQgZWxlbWVu
dCwgTlNTdHJpbmcqIG5vdGlmaWNhdGlvbiwgdm9pZCogY29udGV4dCk7CiAKIEBpbnRlcmZhY2Ug
TlNPYmplY3QgKFdlYktpdEFjY2Vzc2liaWxpdHlBZGRpdGlvbnMpCkBAIC0xNzIsNyArMTc2LDkg
QEAgc3RhdGljIE5TU3RyaW5nKiBhdHRyaWJ1dGVzT2ZFbGVtZW50KGlkIGFjY2Vzc2liaWxpdHlP
YmplY3QpCiAgICAgICAgIGlkIHZhbHVlT2JqZWN0ID0gW2FjY2Vzc2liaWxpdHlPYmplY3QgYWNj
ZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOmF0dHJpYnV0ZV07CiAgICAgICAgIE5TU3RyaW5nKiB2
YWx1ZSA9IGRlc2NyaXB0aW9uT2ZWYWx1ZSh2YWx1ZU9iamVjdCwgYWNjZXNzaWJpbGl0eU9iamVj
dCk7CiAKLSAgICAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJp
bGl0eVRleHRJbnB1dE1hcmtlZFJhbmdlQXR0cmlidXRlXSAmJiAhdmFsdWUpCisgICAgICAgIGlm
ICghdmFsdWUKKyAgICAgICAgICAgICYmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpOU0Fj
Y2Vzc2liaWxpdHlUZXh0SW5wdXRNYXJrZWRSYW5nZUF0dHJpYnV0ZV0KKyAgICAgICAgICAgICAg
ICB8fCBbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlUZXh0SW5wdXRN
YXJrZWRUZXh0TWFya2VyUmFuZ2VBdHRyaWJ1dGVdKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwog
CiAgICAgICAgIFthdHRyaWJ1dGVzU3RyaW5nIGFwcGVuZEZvcm1hdDpAIiVAOiAlQFxuIiwgYXR0
cmlidXRlLCB2YWx1ZV07CkBAIC0xNzU5LDYgKzE3NjUsMTYgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjppbnNlcnRUZXh0KEpTU3RyaW5nUmVmIHRleHQpCiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCitBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlIEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OnRleHRJbnB1dE1hcmtlZFRleHRNYXJrZXJSYW5nZSgpIGNvbnN0Cit7CisgICAgQkVHSU5f
QVhfT0JKQ19FWENFUFRJT05TCisgICAgaWQgdGV4dE1hcmtlclJhbmdlID0gW21fZWxlbWVudCBh
Y2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6TlNBY2Nlc3NpYmlsaXR5VGV4dElucHV0TWFya2Vk
VGV4dE1hcmtlclJhbmdlQXR0cmlidXRlXTsKKyAgICByZXR1cm4gQWNjZXNzaWJpbGl0eVRleHRN
YXJrZXJSYW5nZSh0ZXh0TWFya2VyUmFuZ2UpOworICAgIEVORF9BWF9PQkpDX0VYQ0VQVElPTlMK
KworICAgIHJldHVybiBudWxscHRyOworfQorCiBpbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
dGV4dE1hcmtlclJhbmdlTGVuZ3RoKEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2UqIHJhbmdl
KQogewogICAgIEJFR0lOX0FYX09CSkNfRVhDRVBUSU9OUwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmNwcCBi
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eVVJRWxl
bWVudC5jcHAKaW5kZXggZWZmYTFiNTY1Nzk2Li5mMzg2MGFkNmVlNGEgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dC5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9BY2Nlc3Np
YmlsaXR5VUlFbGVtZW50LmNwcApAQCAtMTA5LDYgKzEwOSw3IEBAIGludCBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjpsaW5lSW5kZXhGb3JUZXh0TWFya2VyKEFjY2Vzc2liaWxpdHlUZXh0TWFya2Vy
KikgY29uCiBSZWZQdHI8QWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZT4gQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6dGV4dE1hcmtlclJhbmdlRm9yUmFuZ2UodW5zaWduZWQsIHVuc2lnbmVkKSB7
IHJldHVybiBudWxscHRyOyB9CiBSZWZQdHI8QWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZT4g
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2VsZWN0ZWRUZXh0TWFya2VyUmFuZ2UoKSB7IHJldHVy
biBudWxscHRyOyB9CiB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJlc2V0U2VsZWN0ZWRU
ZXh0TWFya2VyUmFuZ2UoKSB7IH0KK1JlZlB0cjxBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdl
PiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0ZXh0SW5wdXRNYXJrZWRUZXh0TWFya2VyUmFuZ2Uo
KSBjb25zdCB7IHJldHVybiBudWxscHRyOyB9CiB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OnNldEJvb2xBdHRyaWJ1dGVWYWx1ZShKU1N0cmluZ1JlZiwgYm9vbCkgeyB9CiB2b2lkIEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OnNldFZhbHVlKEpTU3RyaW5nUmVmKSB7IH0KIEpTVmFsdWVSZWYg
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2VhcmNoVGV4dFdpdGhDcml0ZXJpYShKU0NvbnRleHRS
ZWYsIEpTVmFsdWVSZWYsIEpTU3RyaW5nUmVmLCBKU1N0cmluZ1JlZikgeyByZXR1cm4gbnVsbHB0
cjsgfQpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9B
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50LmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVk
QnVuZGxlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaAppbmRleCA3Mzg0YjkxMTg4ZjAuLjQ0ZjNj
NTcxODgxNCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRs
ZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmgKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9J
bmplY3RlZEJ1bmRsZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmgKQEAgLTMzOSw2ICszMzksNyBA
QCBwdWJsaWM6CiAgICAgdm9pZCByZXNldFNlbGVjdGVkVGV4dE1hcmtlclJhbmdlKCk7CiAgICAg
Ym9vbCByZXBsYWNlVGV4dEluUmFuZ2UoSlNTdHJpbmdSZWYsIGludCBwb3NpdGlvbiwgaW50IGxl
bmd0aCk7CiAgICAgYm9vbCBpbnNlcnRUZXh0KEpTU3RyaW5nUmVmKTsKKyAgICBSZWZQdHI8QWNj
ZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZT4gdGV4dElucHV0TWFya2VkVGV4dE1hcmtlclJhbmdl
KCkgY29uc3Q7CiAgICAgUmVmUHRyPEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyPiBzdGFydFRleHRN
YXJrZXJGb3JUZXh0TWFya2VyUmFuZ2UoQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZSopOwog
ICAgIFJlZlB0cjxBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcj4gZW5kVGV4dE1hcmtlckZvclRleHRN
YXJrZXJSYW5nZShBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlKik7CiAgICAgUmVmUHRyPEFj
Y2Vzc2liaWxpdHlUZXh0TWFya2VyPiBlbmRUZXh0TWFya2VyRm9yQm91bmRzKGludCB4LCBpbnQg
eSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5pZGwg
Yi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL0FjY2Vzc2li
aWxpdHlVSUVsZW1lbnQuaWRsCmluZGV4IGIxMDI5ZDMxNjZlOC4uOTIyZTEyNDJjY2MwIDEwMDY0
NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL0Fj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQuaWRsCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5q
ZWN0ZWRCdW5kbGUvQmluZGluZ3MvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5pZGwKQEAgLTI0MSw2
ICsyNDEsNyBAQAogICAgIHVuZGVmaW5lZCByZXNldFNlbGVjdGVkVGV4dE1hcmtlclJhbmdlKCk7
CiAgICAgYm9vbGVhbiByZXBsYWNlVGV4dEluUmFuZ2UoRE9NU3RyaW5nIHN0cmluZywgbG9uZyBw
b3NpdGlvbiwgbG9uZyBsZW5ndGgpOwogICAgIGJvb2xlYW4gaW5zZXJ0VGV4dChET01TdHJpbmcg
dGV4dCk7CisgICAgQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZSB0ZXh0SW5wdXRNYXJrZWRU
ZXh0TWFya2VyUmFuZ2UoKTsKICAgICBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciBzdGFydFRleHRN
YXJrZXJGb3JUZXh0TWFya2VyUmFuZ2UoQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZSByYW5n
ZSk7CiAgICAgQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgZW5kVGV4dE1hcmtlckZvclRleHRNYXJr
ZXJSYW5nZShBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlIHJhbmdlKTsKICAgICBBY2Nlc3Np
YmlsaXR5VGV4dE1hcmtlciBlbmRUZXh0TWFya2VyRm9yQm91bmRzKGxvbmcgeCwgbG9uZyB5LCBs
b25nIHdpZHRoLCBsb25nIGhlaWdodCk7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL0luamVjdGVkQnVuZGxlL21hYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tIGIvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0eVVJRWxl
bWVudE1hYy5tbQppbmRleCAyYjQzZWVmM2JiNjguLjIxOWI3YTk1MzI4NCAxMDA2NDQKLS0tIGEv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudE1hYy5tbQorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxl
L21hYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tCkBAIC04NSw2ICs4NSwxMCBAQAogI2Rl
ZmluZSBOU0FjY2Vzc2liaWxpdHlUZXh0SW5wdXRNYXJrZWRSYW5nZUF0dHJpYnV0ZSBAIkFYVGV4
dElucHV0TWFya2VkUmFuZ2UiCiAjZW5kaWYKIAorI2lmbmRlZiBOU0FjY2Vzc2liaWxpdHlUZXh0
SW5wdXRNYXJrZWRUZXh0TWFya2VyUmFuZ2VBdHRyaWJ1dGUKKyNkZWZpbmUgTlNBY2Nlc3NpYmls
aXR5VGV4dElucHV0TWFya2VkVGV4dE1hcmtlclJhbmdlQXR0cmlidXRlIEAiQVhUZXh0SW5wdXRN
YXJrZWRUZXh0TWFya2VyUmFuZ2UiCisjZW5kaWYKKwogdHlwZWRlZiB2b2lkICgqQVhQb3N0ZWRO
b3RpZmljYXRpb25DYWxsYmFjaykoaWQgZWxlbWVudCwgTlNTdHJpbmcqIG5vdGlmaWNhdGlvbiwg
dm9pZCogY29udGV4dCk7CiAKIEBpbnRlcmZhY2UgTlNPYmplY3QgKFdlYktpdEFjY2Vzc2liaWxp
dHlBZGRpdGlvbnMpCkBAIC02MzMsNyArNjM3LDkgQEAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFsbEF0dHJpYnV0ZXMoKQogCiAgICAgICAgIGF1dG8g
dmFsdWUgPSBkZXNjcmlwdGlvbk9mVmFsdWUoYXR0cmlidXRlVmFsdWUoYXR0cmlidXRlKS5nZXQo
KSk7CiAKLSAgICAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJp
bGl0eVRleHRJbnB1dE1hcmtlZFJhbmdlQXR0cmlidXRlXSAmJiAhdmFsdWUpCisgICAgICAgIGlm
ICghdmFsdWUKKyAgICAgICAgICAgICYmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpOU0Fj
Y2Vzc2liaWxpdHlUZXh0SW5wdXRNYXJrZWRSYW5nZUF0dHJpYnV0ZV0KKyAgICAgICAgICAgICAg
ICB8fCBbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlUZXh0SW5wdXRN
YXJrZWRUZXh0TWFya2VyUmFuZ2VBdHRyaWJ1dGVdKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwog
CiAgICAgICAgIFt2YWx1ZXMgYXBwZW5kRm9ybWF0OkAiJUA6ICVAXG4iLCBhdHRyaWJ1dGUsIHZh
bHVlLmdldCgpXTsKQEAgLTIwMTIsNiArMjAxOCwxNiBAQCB2b2lkIEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OnJlc2V0U2VsZWN0ZWRUZXh0TWFya2VyUmFuZ2UoKQogICAgIHNldEF0dHJpYnV0ZVZh
bHVlKG1fZWxlbWVudC5nZXRBdXRvcmVsZWFzZWQoKSwgTlNBY2Nlc3NpYmlsaXR5U2VsZWN0ZWRU
ZXh0TWFya2VyUmFuZ2VBdHRyaWJ1dGUsIHRleHRNYXJrZXJSYW5nZS5nZXQoKSwgdHJ1ZSk7CiB9
CiAKK1JlZlB0cjxBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlPiBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50Ojp0ZXh0SW5wdXRNYXJrZWRUZXh0TWFya2VyUmFuZ2UoKSBjb25zdAoreworICAgIEJF
R0lOX0FYX09CSkNfRVhDRVBUSU9OUworICAgIGF1dG8gdGV4dE1hcmtlclJhbmdlID0gYXR0cmli
dXRlVmFsdWUoTlNBY2Nlc3NpYmlsaXR5VGV4dElucHV0TWFya2VkVGV4dE1hcmtlclJhbmdlQXR0
cmlidXRlKTsKKyAgICByZXR1cm4gQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZTo6Y3JlYXRl
KHRleHRNYXJrZXJSYW5nZS5nZXQoKSk7CisgICAgRU5EX0FYX09CSkNfRVhDRVBUSU9OUworCisg
ICAgcmV0dXJuIG51bGxwdHI7Cit9CisKIFJlZlB0cjxBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcj4g
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c3RhcnRUZXh0TWFya2VyRm9yVGV4dE1hcmtlclJhbmdl
KEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2UqIHJhbmdlKQogewogICAgIGlmICghcmFuZ2Up
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy9hdHRyaWJ1dGVkLXN0
cmluZy9hdHRyaWJ1dGVkLXN0cmluZy1oYXMtY29tcGxldGlvbi1hbm5vdGF0aW9uLmh0bWwgYi9M
YXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy9hdHRyaWJ1dGVkLXN0cmluZy9hdHRyaWJ1dGVk
LXN0cmluZy1oYXMtY29tcGxldGlvbi1hbm5vdGF0aW9uLmh0bWwKaW5kZXggNzZlNGUyM2RiNWUy
Li5mNTAwZmUwZjUyN2UgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFj
L2F0dHJpYnV0ZWQtc3RyaW5nL2F0dHJpYnV0ZWQtc3RyaW5nLWhhcy1jb21wbGV0aW9uLWFubm90
YXRpb24uaHRtbAorKysgYi9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy9hdHRyaWJ1dGVk
LXN0cmluZy9hdHRyaWJ1dGVkLXN0cmluZy1oYXMtY29tcGxldGlvbi1hbm5vdGF0aW9uLmh0bWwK
QEAgLTEzLDE1ICsxMywxNyBAQAogICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSBhY2Nlc3NpYmls
aXR5Q29udHJvbGxlci5hY2Nlc3NpYmxlRWxlbWVudEJ5SWQoImVkaXRhYmxlIik7CiAKICAgICAg
ICAgICAgIC8vIFRlc3Qgd2l0aCBjb21wb3NpdGlvbiBhbmQgbm8gYXR0cmlidXRlcwotICAgICAg
ICAgICAgdGV4dElucHV0Q29udHJvbGxlci5zZXRNYXJrZWRUZXh0KCJ0ZXN0aW5nIik7Ci0gICAg
ICAgICAgICB2YXIgYXR0clN0cmluZyA9IGVsZW1lbnQuYXR0cmlidXRlZFN0cmluZ0ZvclJhbmdl
KDAsIDcpOworICAgICAgICAgICAgdGV4dElucHV0Q29udHJvbGxlci5zZXRNYXJrZWRUZXh0KCJ0
ZXN0Iik7CisgICAgICAgICAgICB2YXIgYXR0clN0cmluZyA9IGVsZW1lbnQuYXR0cmlidXRlZFN0
cmluZ0ZvclJhbmdlKDAsIDQpOwogICAgICAgICAgICAgc2hvdWxkQmUoImF0dHJTdHJpbmcuaW5k
ZXhPZignQVhUZXh0Q29tcGxldGlvbiA9IDEnKSIsICItMSIpOwogCiAgICAgICAgICAgICAvLyBU
ZXN0IHdpdGggY29tcG9zaXRpb24gYW5kIGF0dHJpYnV0ZXMKLSAgICAgICAgICAgIHRleHRJbnB1
dENvbnRyb2xsZXIuc2V0TWFya2VkVGV4dCgiZmF2b3JpdGUiLCAwLCA4LCBmYWxzZSwgdW5kZWZp
bmVkLCBbCi0gICAgICAgICAgICAgICAgeyBmcm9tOiAiNCIsIGxlbmd0aDogIjQiLCBhbm5vdGF0
aW9uOiAiTlNUZXh0Q29tcGxldGlvbiIgfQorICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9ICIg
bWVzc2FnZSI7CisgICAgICAgICAgICB0ZXh0SW5wdXRDb250cm9sbGVyLnVubWFya1RleHQoKTsK
KyAgICAgICAgICAgIHRleHRJbnB1dENvbnRyb2xsZXIuc2V0TWFya2VkVGV4dChtZXNzYWdlLCA0
LCBtZXNzYWdlLmxlbmd0aCwgZmFsc2UsIHVuZGVmaW5lZCwgWworICAgICAgICAgICAgICAgIHsg
ZnJvbTogIjQiLCBsZW5ndGg6IG1lc3NhZ2UubGVuZ3RoLCBhbm5vdGF0aW9uOiAiTlNUZXh0Q29t
cGxldGlvbiIgfQogICAgICAgICAgICAgXSk7Ci0gICAgICAgICAgICBhdHRyU3RyaW5nID0gZWxl
bWVudC5hdHRyaWJ1dGVkU3RyaW5nRm9yUmFuZ2UoMCwgOCk7CisgICAgICAgICAgICBhdHRyU3Ry
aW5nID0gZWxlbWVudC5hdHRyaWJ1dGVkU3RyaW5nRm9yUmFuZ2UoMCwgNCArIG1lc3NhZ2UubGVu
Z3RoKTsKICAgICAgICAgICAgIHNob3VsZEJlVHJ1ZSgiYXR0clN0cmluZy5pbmRleE9mKCdBWFRl
eHRDb21wbGV0aW9uID0gMScpICE9IC0xIik7CiAgICAgICAgIH0KICAgICA8L3NjcmlwdD4KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL3RleHQtaW5wdXQtbWFya2Vk
LXJhbmdlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL3RleHQt
aW5wdXQtbWFya2VkLXJhbmdlLWV4cGVjdGVkLnR4dAppbmRleCAxMzMwMjZhMjg5ODMuLjQ2NWY4
MzVjNGYwNiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvdGV4dC1p
bnB1dC1tYXJrZWQtcmFuZ2UtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2FjY2Vzc2li
aWxpdHkvbWFjL3RleHQtaW5wdXQtbWFya2VkLXJhbmdlLWV4cGVjdGVkLnR4dApAQCAtNiw3ICs2
LDcgQEAgT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdl
cywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUKIFBBU1MgIWVsZW1lbnQudGV4dElucHV0TWFy
a2VkUmFuZ2UgaXMgdHJ1ZQogUEFTUyBlbGVtZW50LnRleHRJbnB1dE1hcmtlZFJhbmdlIGlzICd7
MCwgNH0nCiBQQVNTICFlbGVtZW50LnRleHRJbnB1dE1hcmtlZFJhbmdlIGlzIHRydWUKLVBBU1Mg
ZWxlbWVudC50ZXh0SW5wdXRNYXJrZWRSYW5nZSBpcyAnezAsIDV9JworUEFTUyBlbGVtZW50LnRl
eHRJbnB1dE1hcmtlZFJhbmdlIGlzICd7MSwgNX0nCiBQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBp
cyB0cnVlCiAKIFRFU1QgQ09NUExFVEUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2FjY2Vzc2li
aWxpdHkvbWFjL3RleHQtaW5wdXQtbWFya2VkLXJhbmdlLmh0bWwgYi9MYXlvdXRUZXN0cy9hY2Nl
c3NpYmlsaXR5L21hYy90ZXh0LWlucHV0LW1hcmtlZC1yYW5nZS5odG1sCmluZGV4IDhlOThkNjBi
MzZiMi4uMzgwNDA1NGNmZWFlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5
L21hYy90ZXh0LWlucHV0LW1hcmtlZC1yYW5nZS5odG1sCisrKyBiL0xheW91dFRlc3RzL2FjY2Vz
c2liaWxpdHkvbWFjL3RleHQtaW5wdXQtbWFya2VkLXJhbmdlLmh0bWwKQEAgLTExLDEyICsxMSwx
NSBAQAogICAgICAgICBpZiAod2luZG93LnRleHRJbnB1dENvbnRyb2xsZXIgJiYgd2luZG93LmFj
Y2Vzc2liaWxpdHlDb250cm9sbGVyKSB7CiAgICAgICAgICAgICB2YXIgZWxlbWVudCA9IGFjY2Vz
c2liaWxpdHlDb250cm9sbGVyLmFjY2Vzc2libGVFbGVtZW50QnlJZCgiZWRpdGFibGUiKTsKICAg
ICAgICAgICAgIHNob3VsZEJlVHJ1ZSgiIWVsZW1lbnQudGV4dElucHV0TWFya2VkUmFuZ2UiKTsK
KyAgICAgICAgICAgIAogICAgICAgICAgICAgdGV4dElucHV0Q29udHJvbGxlci5zZXRNYXJrZWRU
ZXh0KCJ0ZXN0IiwgMSwgMCk7CiAgICAgICAgICAgICBzaG91bGRCZSgiZWxlbWVudC50ZXh0SW5w
dXRNYXJrZWRSYW5nZSIsICInezAsIDR9JyIpOworICAgICAgICAgICAgCiAgICAgICAgICAgICB0
ZXh0SW5wdXRDb250cm9sbGVyLmluc2VydFRleHQoInQiKTsKICAgICAgICAgICAgIHNob3VsZEJl
VHJ1ZSgiIWVsZW1lbnQudGV4dElucHV0TWFya2VkUmFuZ2UiKTsKKyAgICAgICAgICAgIAogICAg
ICAgICAgICAgdGV4dElucHV0Q29udHJvbGxlci5zZXRNYXJrZWRUZXh0KCJ0ZXN0MiIsIDEsIDAp
OwotICAgICAgICAgICAgc2hvdWxkQmUoImVsZW1lbnQudGV4dElucHV0TWFya2VkUmFuZ2UiLCAi
J3swLCA1fSciKTsKKyAgICAgICAgICAgIHNob3VsZEJlKCJlbGVtZW50LnRleHRJbnB1dE1hcmtl
ZFJhbmdlIiwgIid7MSwgNX0nIik7CiAgICAgICAgIH0KICAgICA8L3NjcmlwdD4KIDwvYm9keT4K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL3RleHQtaW5wdXQtbWFy
a2VkLXRleHQtbWFya2VyLXJhbmdlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2FjY2Vzc2li
aWxpdHkvbWFjL3RleHQtaW5wdXQtbWFya2VkLXRleHQtbWFya2VyLXJhbmdlLWV4cGVjdGVkLnR4
dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjA3OThiMDFjMDVmMgot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL3RleHQtaW5w
dXQtbWFya2VkLXRleHQtbWFya2VyLXJhbmdlLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDE1IEBA
CitUaGlzIHRlc3QgZW5zdXJlcyB0aGF0IHRoZSBpbnB1dCBtZXRob2QgbWFya2VkIHJhbmdlIGlz
IGF2YWlsYWJsZSB0byBhY2Nlc3NpYmlsaXR5IGNsaWVudHMgYXMgdGV4dCBtYXJrZXIgcmFuZ2Uu
CisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMs
IGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTICF0ZXh0IGlzIHRydWUKK1BB
U1MgdGV4dCBpcyAndGVzdCcKK1BBU1MgIXRleHQgaXMgdHJ1ZQorUEFTUyBlbGVtZW50LnN0cmlu
Z1ZhbHVlIGlzICdBWFZhbHVlOiB0ZXN0JworUEFTUyB0ZXh0IGlzICcgbWVzc2FnZScKK1BBU1Mg
ZWxlbWVudC5zdHJpbmdWYWx1ZSBpcyAnQVhWYWx1ZTogdGVzdCBtZXNzYWdlJworUEFTUyBzdWNj
ZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL3RleHQtaW5wdXQtbWFya2VkLXRleHQtbWFya2Vy
LXJhbmdlLmh0bWwgYi9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy90ZXh0LWlucHV0LW1h
cmtlZC10ZXh0LW1hcmtlci1yYW5nZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMC4uMjI5NzMzNGI3ZTE5Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
YWNjZXNzaWJpbGl0eS9tYWMvdGV4dC1pbnB1dC1tYXJrZWQtdGV4dC1tYXJrZXItcmFuZ2UuaHRt
bApAQCAtMCwwICsxLDMzIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+CisgICAg
PHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LmpzIj48L3NjcmlwdD4KKzwvaGVh
ZD4KKzxib2R5PgorPGlucHV0IGlkPSJlZGl0YWJsZSIgdHlwZT0idGV4dCI+Cis8c2NyaXB0IHR5
cGU9InRleHQvamF2YXNjcmlwdCI+CitkZXNjcmlwdGlvbigiVGhpcyB0ZXN0IGVuc3VyZXMgdGhh
dCB0aGUgaW5wdXQgbWV0aG9kIG1hcmtlZCByYW5nZSBpcyBhdmFpbGFibGUgdG8gYWNjZXNzaWJp
bGl0eSBjbGllbnRzIGFzIHRleHQgbWFya2VyIHJhbmdlLiIpOworZWRpdGFibGUuZm9jdXMoKTsK
K2lmICh3aW5kb3cudGV4dElucHV0Q29udHJvbGxlciAmJiB3aW5kb3cuYWNjZXNzaWJpbGl0eUNv
bnRyb2xsZXIpIHsKKyAgICB2YXIgZWxlbWVudCA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmFj
Y2Vzc2libGVFbGVtZW50QnlJZCgiZWRpdGFibGUiKTsKKyAgICAKKyAgICB2YXIgdGV4dCA9IGVs
ZW1lbnQuc3RyaW5nRm9yVGV4dE1hcmtlclJhbmdlKGVsZW1lbnQudGV4dElucHV0TWFya2VkVGV4
dE1hcmtlclJhbmdlKCkpOworICAgIHNob3VsZEJlVHJ1ZSgiIXRleHQiKTsKKyAgICAKKyAgICB0
ZXh0SW5wdXRDb250cm9sbGVyLnNldE1hcmtlZFRleHQoInRlc3QiKTsKKyAgICB0ZXh0ID0gZWxl
bWVudC5zdHJpbmdGb3JUZXh0TWFya2VyUmFuZ2UoZWxlbWVudC50ZXh0SW5wdXRNYXJrZWRUZXh0
TWFya2VyUmFuZ2UoKSk7CisgICAgc2hvdWxkQmUoInRleHQiLCAiJ3Rlc3QnIik7CisKKyAgICB0
ZXh0SW5wdXRDb250cm9sbGVyLnVubWFya1RleHQoKTsKKyAgICB0ZXh0ID0gZWxlbWVudC5zdHJp
bmdGb3JUZXh0TWFya2VyUmFuZ2UoZWxlbWVudC50ZXh0SW5wdXRNYXJrZWRUZXh0TWFya2VyUmFu
Z2UoKSk7CisgICAgc2hvdWxkQmVUcnVlKCIhdGV4dCIpOworICAgIHNob3VsZEJlKCJlbGVtZW50
LnN0cmluZ1ZhbHVlIiwgIidBWFZhbHVlOiB0ZXN0JyIpOworCisgICAgdGV4dElucHV0Q29udHJv
bGxlci5zZXRNYXJrZWRUZXh0KCIgbWVzc2FnZSIsIDQsICIgbWVzc2FnZSIubGVuZ3RoKTsKKyAg
ICB0ZXh0ID0gZWxlbWVudC5zdHJpbmdGb3JUZXh0TWFya2VyUmFuZ2UoZWxlbWVudC50ZXh0SW5w
dXRNYXJrZWRUZXh0TWFya2VyUmFuZ2UoKSk7CisgICAgc2hvdWxkQmUoInRleHQiLCAiJyBtZXNz
YWdlJyIpOworICAgIHNob3VsZEJlKCJlbGVtZW50LnN0cmluZ1ZhbHVlIiwgIidBWFZhbHVlOiB0
ZXN0IG1lc3NhZ2UnIik7Cit9Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL3RleHQtaW5wdXQtc2Vzc2lvbi1ub3Rp
ZmljYXRpb25zLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL3Rl
eHQtaW5wdXQtc2Vzc2lvbi1ub3RpZmljYXRpb25zLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjUwNmY3YTU0OTg4ZgotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL3RleHQtaW5wdXQtc2Vzc2lvbi1ub3Rp
ZmljYXRpb25zLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDExIEBACitUaGlzIHRlc3QgZW5zdXJl
cyB0aGF0IGFjY2Vzc2liaWxpdHkgcmVjZWl2ZXMgdGhlIHByb3BlciBub3RpZmljYXRpb25zIGZv
ciB3aGVuIGlucHV0IHNlc3Npb25zIGJlZ2luIGFuZCBlbmQuCisKK09uIHN1Y2Nlc3MsIHlvdSB3
aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENP
TVBMRVRFIi4KKworCitHb3Qgc2Vzc2lvbiBzdGFydCBhbmQgdmFsdWUgY2hhbmdlIG5vdGlmaWNh
dGlvbnMuCitHb3Qgc2Vzc2lvbiBlbmQgbm90aWZpY2F0aW9uLgorUEFTUyBzdWNjZXNzZnVsbHlQ
YXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2FjY2Vzc2liaWxpdHkvbWFjL3RleHQtaW5wdXQtc2Vzc2lvbi1ub3RpZmljYXRpb25zLmh0bWwg
Yi9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy90ZXh0LWlucHV0LXNlc3Npb24tbm90aWZp
Y2F0aW9ucy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uZTIy
YWU3ZDdkYThiCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9t
YWMvdGV4dC1pbnB1dC1zZXNzaW9uLW5vdGlmaWNhdGlvbnMuaHRtbApAQCAtMCwwICsxLDQ5IEBA
Cis8IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIHJ1blNpbmdseT10cnVl
IF0gLS0+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10
ZXN0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvYWNjZXNzaWJp
bGl0eS1oZWxwZXIuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8aW5wdXQgaWQ9ImVk
aXRhYmxlIiB0eXBlPSJ0ZXh0Ij4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KK2Rl
c2NyaXB0aW9uKCJUaGlzIHRlc3QgZW5zdXJlcyB0aGF0IGFjY2Vzc2liaWxpdHkgcmVjZWl2ZXMg
dGhlIHByb3BlciBub3RpZmljYXRpb25zIGZvciB3aGVuIGlucHV0IHNlc3Npb25zIGJlZ2luIGFu
ZCBlbmQuIik7CitlZGl0YWJsZS5mb2N1cygpOworCit2YXIgZ290U2Vzc2lvblN0YXJ0ID0gZmFs
c2U7Cit2YXIgZ290VmFsdWVDaGFuZ2VkID0gZmFsc2U7Cit2YXIgZ290U2Vzc2lvbkVuZCA9IGZh
bHNlOworZnVuY3Rpb24gbm90aWZpY2F0aW9uQ2FsbGJhY2sobm90aWZpY2F0aW9uKSB7CisgICAg
aWYgKG5vdGlmaWNhdGlvbiA9PT0gIkFYVGV4dElucHV0TWFya2luZ1Nlc3Npb25CZWdhbiIpCisg
ICAgICAgIGdvdFNlc3Npb25TdGFydCA9IHRydWU7CisKKyAgICBpZiAobm90aWZpY2F0aW9uID09
PSAiQVhWYWx1ZUNoYW5nZWQiICYmIGdvdFNlc3Npb25TdGFydCkKKyAgICAgICAgZ290VmFsdWVD
aGFuZ2VkID0gdHJ1ZTsKKworICAgIGlmIChub3RpZmljYXRpb24gPT09ICJBWFRleHRJbnB1dE1h
cmtpbmdTZXNzaW9uRW5kZWQiKSB7CisgICAgICAgIGlmICghZ290U2Vzc2lvblN0YXJ0KQorICAg
ICAgICAgICAgZGVidWcoIkZBSUw6IEdvdCBBWFRleHRJbnB1dE1hcmtpbmdTZXNzaW9uRW5kZWQg
YmVmb3JlIEFYVGV4dElucHV0TWFya2luZ1Nlc3Npb25CZWdhbiIpOworICAgICAgICBnb3RTZXNz
aW9uRW5kID0gdHJ1ZTsKKyAgICB9Cit9CisKK2lmICh3aW5kb3cuYWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXIpIHsKKyAgICB3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7CisKKyAgICBhY2Nlc3Np
YmlsaXR5Q29udHJvbGxlci5hY2Nlc3NpYmxlRWxlbWVudEJ5SWQoImVkaXRhYmxlIikuYWRkTm90
aWZpY2F0aW9uTGlzdGVuZXIobm90aWZpY2F0aW9uQ2FsbGJhY2spOworICAgIHNldFRpbWVvdXQo
YXN5bmMgKCkgPT4geworICAgICAgICB0ZXh0SW5wdXRDb250cm9sbGVyLnNldE1hcmtlZFRleHQo
InRlc3QiKTsKKyAgICAgICAgYXdhaXQgd2FpdEZvcigoKSA9PiBnb3RTZXNzaW9uU3RhcnQgJiYg
Z290VmFsdWVDaGFuZ2VkKTsKKyAgICAgICAgZGVidWcoIkdvdCBzZXNzaW9uIHN0YXJ0IGFuZCB2
YWx1ZSBjaGFuZ2Ugbm90aWZpY2F0aW9ucy4iKTsKKworICAgICAgICB0ZXh0SW5wdXRDb250cm9s
bGVyLnVubWFya1RleHQoKTsKKyAgICAgICAgYXdhaXQgd2FpdEZvcigoKSA9PiBnb3RTZXNzaW9u
RW5kKTsKKyAgICAgICAgZGVidWcoIkdvdCBzZXNzaW9uIGVuZCBub3RpZmljYXRpb24uIik7CisK
KyAgICAgICAgYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRCeUlkKCJl
ZGl0YWJsZSIpLnJlbW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVyKCk7CisgICAgICAgIGZpbmlzaEpT
VGVzdCgpOworICAgIH0pOworfQorPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvVGVzdEV4cGVjdGF0aW9ucyBiL0xheW91dFRl
c3RzL3BsYXRmb3JtL21hYy9UZXN0RXhwZWN0YXRpb25zCmluZGV4IDEzMTExMzBlZTI3OS4uMTAw
NGIyOGMzMTQzIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvVGVzdEV4cGVj
dGF0aW9ucworKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvVGVzdEV4cGVjdGF0aW9ucwpA
QCAtMTYwMCw2ICsxNjAwLDcgQEAgYWNjZXNzaWJpbGl0eS9tYWMvaXNvbGF0ZWQtdHJlZS1tb2Rl
LW9uLW9mZi5odG1sIFsgU2tpcCBdCiAKICMgUmVxdWlyZXMgKElOTElORV9QUkVESUNUSU9OUykK
IGFjY2Vzc2liaWxpdHkvbWFjL2F0dHJpYnV0ZWQtc3RyaW5nL2F0dHJpYnV0ZWQtc3RyaW5nLWhh
cy1jb21wbGV0aW9uLWFubm90YXRpb24uaHRtbCBbIFNraXAgXQorYWNjZXNzaWJpbGl0eS9tYWMv
dGV4dC1pbnB1dC1zZXNzaW9uLW5vdGlmaWNhdGlvbnMuaHRtbCBbIFNraXAgXQogCiB3ZWJraXQu
b3JnL2IvMjAyMDY0IHdlYmF1ZGlvL3NpbGVudC1hdWRpby1pbnRlcnJ1cHRlZC1pbi1iYWNrZ3Jv
dW5kLmh0bWwgWyBQYXNzIENyYXNoIF0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>467043</attachid>
            <date>2023-07-14 10:35:50 -0700</date>
            <delta_ts>2023-07-14 15:10:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-258228-20230714103550.patch</filename>
            <type>text/plain</type>
            <size>60274</size>
            <attacher name="Jack Wiig">jhwiig</attacher>
            
              <data encoding="base64">RnJvbSBjMTNlOTY1ODliYTIwZDExZTY4MjUxZTA5MGIzM2QyNTgxZWZhNmU2IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWNrIFdpaWcgPGpod2lpZ0BnbWFpbC5jb20+CkRhdGU6IFRo
dSwgMTMgSnVsIDIwMjMgMTc6NDA6MzMgLTA3MDAKU3ViamVjdDogW1BBVENIXSBQb3N0IEFjY2Vz
c2liaWxpdHkgbm90aWZpY2F0aW9ucyBkdXJpbmcgY29tcG9zaXRpb24gY29udGV4dHMKIGluZGlj
YXRpbmcgc3RhcnQsIGVuZCwgYW5kIHZhbHVlIGNoYW5nZS4KIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yNTgyMjggcmRhcjovL3Byb2JsZW0vMTEwOTI1Mzg0CgpSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KClRvIGFsaWduIG91cnNlbHZlcyB3aXRoIEFwcEtpdCwg
V2ViS2l0IHNob3VsZCBwb3N0IGEgbm90aWZpY2F0aW9uIHdoZW4gYSBjb21wb3NpdGlvbiBzdGFy
dHMgc28gdGhhdCBhc3Npc3RpdmUgdGVjaG5vbG9naWVzIGtub3cgdG8gcHJvY2VzcyBhbnkgZnV0
dXJlIHZhbHVlIGNoYW5nZXMgZm9yIHRoYXQgdWkgZWxlbWVudCBhcyBpbmNvbXBsZXRlIGNvbXBv
c2l0aW9uIGNoYW5nZXMuIFdoZW4gYSBjb21wb3NpdGlvbiBlbmRzLCBwb3N0IGEgbm90aWZpY2F0
aW9uIHRvIGluZGljYXRlIHRoYXQgdGhlIGNvbXBvc2l0aW9uIHNlc3Npb24gaGFzIGVuZGVkLgoK
VGhpcyBtb2RlbCBkb2VzIG5vdCBjb252ZXkgYW55IGluZm9ybWF0aW9uIGluIHRoZSB0ZXh0IG5v
dGlmaWNhdGlvbnMgKHVubGlrZSB3aGF0IG15IHBhc3QgY29tbWVudCBpbmRpY2F0ZXMpIGFuZCBw
b3N0cyB0aGUgbm90aWZpY2F0aW9uIGZyb20gdGhlIHRleHQgY29udHJvbCBjb250YWluaW5nIHRo
ZSB0ZXh0IGluZm9ybWF0aW9uLiBUaGlzIGFsaWducyB1cyBjbG9zZXIgd2l0aCBob3cgb3RoZXIg
VUkgZnJhbWV3b3JrcyBiZWhhdmUuCgoqIExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL2F0
dHJpYnV0ZWQtc3RyaW5nL2F0dHJpYnV0ZWQtc3RyaW5nLWhhcy1jb21wbGV0aW9uLWFubm90YXRp
b24uaHRtbDoKKiBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy90ZXh0LWlucHV0LW1hcmtl
ZC1yYW5nZS1leHBlY3RlZC50eHQ6CiogTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvdGV4
dC1pbnB1dC1tYXJrZWQtcmFuZ2UuaHRtbDoKKiBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21h
Yy90ZXh0LWlucHV0LW1hcmtlZC10ZXh0LW1hcmtlci1yYW5nZS1leHBlY3RlZC50eHQ6IEFkZGVk
LgoqIExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL3RleHQtaW5wdXQtbWFya2VkLXRleHQt
bWFya2VyLXJhbmdlLmh0bWw6IEFkZGVkLgoqIExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFj
L3RleHQtaW5wdXQtc2Vzc2lvbi1ub3RpZmljYXRpb25zLWV4cGVjdGVkLnR4dDogQWRkZWQuCiog
TGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvdGV4dC1pbnB1dC1zZXNzaW9uLW5vdGlmaWNh
dGlvbnMuaHRtbDogQWRkZWQuCiogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWExvZ2dl
ci5jcHA6CihXZWJDb3JlOjpvcGVyYXRvcjw8KToKKiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FYT2JqZWN0Q2FjaGUuY3BwOgooV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6b25UZXh0Q29t
cG9zaXRpb25DaGFuZ2UpOgooV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6dXBkYXRlSXNvbGF0ZWRU
cmVlKToKKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnRleHRDb21wb3NpdGlvbk9iamVjdEZvck5v
ZGUpOiBEZWxldGVkLgoqIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNo
ZS5oOgooV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6b25UZXh0Q29tcG9zaXRpb25DaGFuZ2UpOgoo
V2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6dXBkYXRlUmVsYXRpb25zKToKKFdlYkNvcmU6OkFYT2Jq
ZWN0Q2FjaGU6OnRleHRDb21wb3NpdGlvbk9iamVjdEZvck5vZGUpOiBEZWxldGVkLgoqIFNvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhUZXh0TWFya2VyLmNwcDoKKFdlYkNvcmU6OkFYVGV4
dE1hcmtlclJhbmdlOjpjaGFyYWN0ZXJSYW5nZSBjb25zdCk6CihXZWJDb3JlOjpBWElzb2xhdGVk
VGV4dE1hcmtlclJhbmdlOjpBWElzb2xhdGVkVGV4dE1hcmtlclJhbmdlKToKKiBTb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FYVGV4dE1hcmtlci5oOgoqIFNvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHA6CihXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5
T2JqZWN0Ojp0ZXh0SW5wdXRNYXJrZWRSYW5nZSBjb25zdCk6CihXZWJDb3JlOjpBY2Nlc3NpYmls
aXR5T2JqZWN0Ojp0ZXh0SW5wdXRNYXJrZWRUZXh0TWFya2VyUmFuZ2UgY29uc3QpOgooV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6aXNOb2RlRm9yQ29tcG9zaXRpb24gY29uc3QpOiBEZWxl
dGVkLgoqIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5o
OgoqIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdEludGVy
ZmFjZS5oOgoqIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvY29jb2EvQVhUZXh0TWFya2Vy
Q29jb2EubW06CihXZWJDb3JlOjpBWFRleHRNYXJrZXJSYW5nZTo6bnNSYW5nZSBjb25zdCk6Ciog
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9jb2NvYS9BY2Nlc3NpYmlsaXR5T2JqZWN0Q29j
b2EubW06CihXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0Ojpjb250ZW50Rm9yUmFuZ2UgY29u
c3QpOgoqIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL0FjY2Vzc2liaWxpdHlPYmpl
Y3RJT1MubW06CihXZWJDb3JlOjphdHRyaWJ1dGVkU3RyaW5nQ3JlYXRlKToKKiBTb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkT2JqZWN0LmNwcDoKKFdl
YkNvcmU6OkFYSXNvbGF0ZWRPYmplY3Q6OnRleHRJbnB1dE1hcmtlZFJhbmdlIGNvbnN0KToKKFdl
YkNvcmU6OkFYSXNvbGF0ZWRPYmplY3Q6OnRleHRJbnB1dE1hcmtlZFRleHRNYXJrZXJSYW5nZSBj
b25zdCk6CiogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29s
YXRlZE9iamVjdC5oOgoqIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVl
L0FYSXNvbGF0ZWRUcmVlLmNwcDoKKFdlYkNvcmU6OkFYSXNvbGF0ZWRUcmVlOjp1cGRhdGVOb2Rl
UHJvcGVydGllcyk6CiogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUv
QVhJc29sYXRlZFRyZWUuaDoKKiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9BWE9i
amVjdENhY2hlTWFjLm1tOgooV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6cG9zdFBsYXRmb3JtTm90
aWZpY2F0aW9uKToKKiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9BY2Nlc3NpYmls
aXR5T2JqZWN0TWFjLm1tOgooV2ViQ29yZTo6YXR0cmlidXRlZFN0cmluZ1NldENvbXBvc2l0aW9u
QXR0cmlidXRlcyk6CihXZWJDb3JlOjphdHRyaWJ1dGVkU3RyaW5nQ3JlYXRlKToKKiBTb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckJh
c2UuaDoKKiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlck1hYy5tbToKKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgQUxM
T1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5EXSk6CigtW1dlYkFjY2Vzc2liaWxpdHlP
YmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTpdKToKKiBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0VkaXRvci5jcHA6CihXZWJDb3JlOjpFZGl0b3I6OnNldENvbXBvc2l0aW9u
KToKKiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwOgooV2ViQ29yZTo6
VHlwaW5nQ29tbWFuZDo6aW5zZXJ0VGV4dCk6CiogVG9vbHMvRHVtcFJlbmRlclRyZWUvQWNjZXNz
aWJpbGl0eVVJRWxlbWVudC5jcHA6Cih0ZXh0SW5wdXRNYXJrZWRUZXh0TWFya2VyUmFuZ2VDYWxs
YmFjayk6CihBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0ZXh0SW5wdXRNYXJrZWRUZXh0TWFya2Vy
UmFuZ2UgY29uc3QpOgooQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Z2V0SlNDbGFzcyk6CiogVG9v
bHMvRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oOgoqIFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL2lvcy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50SU9TLm1tOgooQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6dGV4dElucHV0TWFya2VkVGV4dE1hcmtlclJhbmdlIGNvbnN0KToKKiBUb29s
cy9EdW1wUmVuZGVyVHJlZS9tYWMvQWNjZXNzaWJpbGl0eVVJRWxlbWVudE1hYy5tbToKKGF0dHJp
YnV0ZXNPZkVsZW1lbnQpOgooQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGV4dElucHV0TWFya2Vk
VGV4dE1hcmtlclJhbmdlIGNvbnN0KToKKiBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVk
QnVuZGxlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuY3BwOgooV1RSOjpBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50Ojp0ZXh0SW5wdXRNYXJrZWRUZXh0TWFya2VyUmFuZ2UgY29uc3QpOgoqIFRvb2xzL1dl
YktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oOgoq
IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvQWNjZXNzaWJp
bGl0eVVJRWxlbWVudC5pZGw6CiogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRs
ZS9tYWMvQWNjZXNzaWJpbGl0eVVJRWxlbWVudE1hYy5tbToKKFdUUjo6QWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6YWxsQXR0cmlidXRlcyk6CihXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRl
eHRJbnB1dE1hcmtlZFRleHRNYXJrZXJSYW5nZSBjb25zdCk6Ci0tLQogU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BWExvZ2dlci5jcHAgICAgIHwgIDYgKysrCiAuLi4vV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwICAgfCA0MiArKysrKysrKystLS0tLS0tCiBTb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaCAgfCAxMSArKystLQogU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWFRleHRNYXJrZXIuY3BwIHwgMjUgKysrKysrKysr
KwogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWFRleHRNYXJrZXIuaCAgIHwgMTEgKysr
KysKIC4uLi9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwICAgICB8IDQxICsr
KysrKysrLS0tLS0tLS0KIC4uLi9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaCAg
ICAgICB8ICAzICstCiAuLi4vQWNjZXNzaWJpbGl0eU9iamVjdEludGVyZmFjZS5oICAgICAgICAg
ICAgfCAgMSArCiAuLi4vYWNjZXNzaWJpbGl0eS9jb2NvYS9BWFRleHRNYXJrZXJDb2NvYS5tbSAg
fCAxMCArLS0tCiAuLi4vY29jb2EvQWNjZXNzaWJpbGl0eU9iamVjdENvY29hLm1tICAgICAgICAg
fCAgNCArLQogLi4uL2lvcy9BY2Nlc3NpYmlsaXR5T2JqZWN0SU9TLm1tICAgICAgICAgICAgIHwg
IDIgKy0KIC4uLi9pc29sYXRlZHRyZWUvQVhJc29sYXRlZE9iamVjdC5jcHAgICAgICAgICB8IDE1
ICsrKysrKwogLi4uL2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkT2JqZWN0LmggICAgICAgICAgIHwg
IDMgKy0KIC4uLi9pc29sYXRlZHRyZWUvQVhJc29sYXRlZFRyZWUuY3BwICAgICAgICAgICB8IDEw
ICsrLS0KIC4uLi9pc29sYXRlZHRyZWUvQVhJc29sYXRlZFRyZWUuaCAgICAgICAgICAgICB8ICA1
ICstCiAuLi4vYWNjZXNzaWJpbGl0eS9tYWMvQVhPYmplY3RDYWNoZU1hYy5tbSAgICAgfCAxNCAr
KysrKysKIC4uLi9tYWMvQWNjZXNzaWJpbGl0eU9iamVjdE1hYy5tbSAgICAgICAgICAgICB8IDE5
ICsrKystLS0KIC4uLi9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJCYXNlLmggICB8
ICAyICstCiAuLi4vbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tICAgfCAx
MCArKysrCiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAgICAgICAgICAgICAgfCAx
OSArKysrLS0tCiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwICAgICAg
fCAgNyArKy0KIC4uLi9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmNwcCB8
IDExICsrKysrCiBUb29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50Lmgg
fCAgMSArCiAuLi4vaW9zL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRJT1MubW0gICAgICAgICAgfCAg
NSArKwogLi4uL21hYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tICAgICAgICAgIHwgMTgg
KysrKysrLQogLi4uL0luamVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuY3BwIHwg
IDEgKwogLi4uL0luamVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaCAgIHwgIDEg
KwogLi4uL0JpbmRpbmdzL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaWRsICAgICAgIHwgIDEgKwog
Li4uL21hYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tICAgICAgICAgIHwgMTggKysrKysr
LQogLi4udXRlZC1zdHJpbmctaGFzLWNvbXBsZXRpb24tYW5ub3RhdGlvbi5odG1sIHwgMTIgKysr
LS0KIC4uLi9tYWMvdGV4dC1pbnB1dC1tYXJrZWQtcmFuZ2UtZXhwZWN0ZWQudHh0ICB8ICAyICst
CiAuLi4vbWFjL3RleHQtaW5wdXQtbWFya2VkLXJhbmdlLmh0bWwgICAgICAgICAgfCAgNSArLQog
Li4ubnB1dC1tYXJrZWQtdGV4dC1tYXJrZXItcmFuZ2UtZXhwZWN0ZWQudHh0IHwgMTUgKysrKysr
CiAuLi4vdGV4dC1pbnB1dC1tYXJrZWQtdGV4dC1tYXJrZXItcmFuZ2UuaHRtbCAgfCAzMyArKysr
KysrKysrKysrCiAuLi50LWlucHV0LXNlc3Npb24tbm90aWZpY2F0aW9ucy1leHBlY3RlZC50eHQg
fCAxMSArKysrKwogLi4uL21hYy90ZXh0LWlucHV0LXNlc3Npb24tbm90aWZpY2F0aW9ucy5odG1s
IHwgNDkgKysrKysrKysrKysrKysrKysrKwogTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1Rlc3RF
eHBlY3RhdGlvbnMgICAgIHwgIDEgKwogMzcgZmlsZXMgY2hhbmdlZCwgMzUyIGluc2VydGlvbnMo
KyksIDkyIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IExheW91dFRlc3RzL2FjY2Vz
c2liaWxpdHkvbWFjL3RleHQtaW5wdXQtbWFya2VkLXRleHQtbWFya2VyLXJhbmdlLWV4cGVjdGVk
LnR4dAogY3JlYXRlIG1vZGUgMTAwNjQ0IExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL3Rl
eHQtaW5wdXQtbWFya2VkLXRleHQtbWFya2VyLXJhbmdlLmh0bWwKIGNyZWF0ZSBtb2RlIDEwMDY0
NCBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy90ZXh0LWlucHV0LXNlc3Npb24tbm90aWZp
Y2F0aW9ucy1leHBlY3RlZC50eHQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBMYXlvdXRUZXN0cy9hY2Nl
c3NpYmlsaXR5L21hYy90ZXh0LWlucHV0LXNlc3Npb24tbm90aWZpY2F0aW9ucy5odG1sCgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWExvZ2dlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYTG9nZ2VyLmNwcAppbmRleCBkNjEzNmIxZDYzNTIu
LmVjZGQ5NjhmMmM0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
WExvZ2dlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWExvZ2dlci5j
cHAKQEAgLTY0NCw2ICs2NDQsMTIgQEAgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFt
JiBzdHJlYW0sIEFYT2JqZWN0Q2FjaGU6OkFYTm90aWZpY2F0aW9uIG5vdGlmaWMKICAgICBjYXNl
IEFYT2JqZWN0Q2FjaGU6OkFYTm90aWZpY2F0aW9uOjpBWERyYWdnaW5nRXhpdGVkRHJvcFpvbmU6
CiAgICAgICAgIHN0cmVhbSA8PCAiQVhEcmFnZ2luZ0V4aXRlZERyb3Bab25lIjsKICAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBBWE9iamVjdENhY2hlOjpBWE5vdGlmaWNhdGlvbjo6QVhUZXh0SW5w
dXRNYXJraW5nU2Vzc2lvbkJlZ2FuOgorICAgICAgICBzdHJlYW0gPDwgIkFYVGV4dElucHV0TWFy
a2luZ1Nlc3Npb25CZWdhbiI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQVhPYmplY3RDYWNo
ZTo6QVhOb3RpZmljYXRpb246OkFYVGV4dElucHV0TWFya2luZ1Nlc3Npb25FbmRlZDoKKyAgICAg
ICAgc3RyZWFtIDw8ICJBWFRleHRJbnB1dE1hcmtpbmdTZXNzaW9uRW5kZWQiOworICAgICAgICBi
cmVhazsKICAgICB9CiAKICAgICByZXR1cm4gc3RyZWFtOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKaW5kZXggMzNhMmRjNmRjNDk0Li4zMWFmM2Q0
MmQwNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RD
YWNoZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hl
LmNwcApAQCAtMTY4MCwxMyArMTY4MCwzMyBAQCB2b2lkIEFYT2JqZWN0Q2FjaGU6Om9uVmFsaWRp
dHlDaGFuZ2UoRWxlbWVudCYgZWxlbWVudCkKICAgICBwb3N0Tm90aWZpY2F0aW9uKGdldCgmZWxl
bWVudCksIG51bGxwdHIsIEFYSW52YWxpZFN0YXR1c0NoYW5nZWQpOwogfQogCi12b2lkIEFYT2Jq
ZWN0Q2FjaGU6Om9uVGV4dENvbXBvc2l0aW9uQ2hhbmdlKE5vZGUmIG5vZGUpCit2b2lkIEFYT2Jq
ZWN0Q2FjaGU6Om9uVGV4dENvbXBvc2l0aW9uQ2hhbmdlKE5vZGUmIG5vZGUsIENvbXBvc2l0aW9u
U3RhdGUgY29tcG9zaXRpb25TdGF0ZSwgYm9vbCB2YWx1ZUNoYW5nZWQpCiB7CisjaWYgSEFWRShJ
TkxJTkVfUFJFRElDVElPTlMpCisgICAgYXV0byogb2JqZWN0ID0gZ2V0T3JDcmVhdGUoJm5vZGUp
OworICAgIGlmICghb2JqZWN0KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoYXV0byogb2Jz
ZXJ2YWJsZU9iamVjdCA9IG9iamVjdC0+b2JzZXJ2YWJsZU9iamVjdCgpKQorICAgICAgICBvYmpl
Y3QgPSBvYnNlcnZhYmxlT2JqZWN0OworCiAjaWYgRU5BQkxFKEFDQ0VTU0lCSUxJVFlfSVNPTEFU
RURfVFJFRSkKLSAgICB1cGRhdGVJc29sYXRlZFRyZWUodGV4dENvbXBvc2l0aW9uT2JqZWN0Rm9y
Tm9kZShub2RlKSwgQVhUZXh0Q29tcG9zaXRpb25DaGFuZ2VkKTsKKyAgICB1cGRhdGVJc29sYXRl
ZFRyZWUob2JqZWN0LCBBWFRleHRDb21wb3NpdGlvbkNoYW5nZWQpOworI2VuZGlmIC8vIEVOQUJM
RShBQ0NFU1NJQklMSVRZX0lTT0xBVEVEX1RSRUUpCisKKyAgICBpZiAoY29tcG9zaXRpb25TdGF0
ZSA9PSBDb21wb3NpdGlvblN0YXRlOjpTdGFydGVkKQorICAgICAgICBwb3N0Tm90aWZpY2F0aW9u
KG9iamVjdCwgJm5vZGUuZG9jdW1lbnQoKSwgQVhUZXh0SW5wdXRNYXJraW5nU2Vzc2lvbkJlZ2Fu
KTsKKworICAgIGlmICh2YWx1ZUNoYW5nZWQpCisgICAgICAgIHBvc3ROb3RpZmljYXRpb24ob2Jq
ZWN0LCAmbm9kZS5kb2N1bWVudCgpLCBBWFZhbHVlQ2hhbmdlZCk7CisKKyAgICBpZiAoY29tcG9z
aXRpb25TdGF0ZSA9PSBDb21wb3NpdGlvblN0YXRlOjpFbmRlZCkKKyAgICAgICAgcG9zdE5vdGlm
aWNhdGlvbihvYmplY3QsICZub2RlLmRvY3VtZW50KCksIEFYVGV4dElucHV0TWFya2luZ1Nlc3Np
b25FbmRlZCk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShub2RlKTsKLSNlbmRpZgorICAgIFVO
VVNFRF9QQVJBTShjb21wb3NpdGlvblN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0odmFsdWVDaGFu
Z2VkKTsKKyNlbmRpZiAvLyBIQVZFKElOTElORV9QUkVESUNUSU9OUykKIH0KIAogI2lmbmRlZiBO
REVCVUcKQEAgLTQwMTcsNyArNDAzNyw3IEBAIHZvaWQgQVhPYmplY3RDYWNoZTo6dXBkYXRlSXNv
bGF0ZWRUcmVlKGNvbnN0IFZlY3RvcjxzdGQ6OnBhaXI8UmVmUHRyPEFjY2Vzc2liaWxpCiAgICAg
ICAgICAgICB0cmVlLT51cGRhdGVOb2RlUHJvcGVydHkoKm5vdGlmaWNhdGlvbi5maXJzdCwgQVhQ
cm9wZXJ0eU5hbWU6OkNvbHVtbkhlYWRlcnMpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGNhc2UgQVhUZXh0Q29tcG9zaXRpb25DaGFuZ2VkOgotICAgICAgICAgICAgdHJlZS0+dXBkYXRl
Tm9kZVByb3BlcnR5KCpub3RpZmljYXRpb24uZmlyc3QsIEFYUHJvcGVydHlOYW1lOjpUZXh0SW5w
dXRNYXJrZWRSYW5nZSk7CisgICAgICAgICAgICB0cmVlLT51cGRhdGVOb2RlUHJvcGVydHkoKm5v
dGlmaWNhdGlvbi5maXJzdCwgQVhQcm9wZXJ0eU5hbWU6OlRleHRJbnB1dE1hcmtlZFRleHRNYXJr
ZXJSYW5nZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBWFVSTENoYW5nZWQ6
CiAgICAgICAgICAgICB0cmVlLT51cGRhdGVOb2RlUHJvcGVydHkoKm5vdGlmaWNhdGlvbi5maXJz
dCwgQVhQcm9wZXJ0eU5hbWU6OlVSTCk7CkBAIC00NjAyLDIwICs0NjIyLDYgQEAgQVhUZXh0Q2hh
bmdlIEFYT2JqZWN0Q2FjaGU6OnRleHRDaGFuZ2VGb3JFZGl0VHlwZShBWFRleHRFZGl0VHlwZSB0
eXBlKQogfQogI2VuZGlmCiAKLUFjY2Vzc2liaWxpdHlPYmplY3QqIEFYT2JqZWN0Q2FjaGU6OnRl
eHRDb21wb3NpdGlvbk9iamVjdEZvck5vZGUoTm9kZSYgbm9kZSkKLXsKLSAgICBXZWFrUHRyIG9i
amVjdCA9IGdldCgmbm9kZSk7Ci0gICAgaWYgKG9iamVjdCkKLSAgICAgICAgb2JqZWN0ID0gb2Jq
ZWN0LT5vYnNlcnZhYmxlT2JqZWN0KCk7Ci0KLSNpZiBQTEFURk9STShNQUMpCi0gICAgLy8gSW4g
b3VyIE1hYyBpbXBsZW1lbnRhdGlvbnMgZm9yIHBvc3RpbmcgdGV4dCBub3RpZmljYXRpb25zLCB3
ZSBmYWxsIGJhY2sgb24gdGhlIHdlYiBhcmVhIGlmIHRoZSBvYnNlcnZhYmxlIG9iamVjdCBpcyBu
dWxscHRyLgotICAgIGlmICghb2JqZWN0KQotICAgICAgICBvYmplY3QgPSByb290V2ViQXJlYSgp
OwotI2VuZGlmCi0gICAgcmV0dXJuIG9iamVjdC5nZXQoKTsKLX0KLQogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKEFDQ0VTU0lCSUxJVFkpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaCBiL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5oCmluZGV4IGUyM2I3OGY3YTU5Mi4uNDRj
MDYwZDVkZjc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2Jq
ZWN0Q2FjaGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2Fj
aGUuaApAQCAtMTg0LDYgKzE4NCw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBhdHRhY2hXcmFwcGVy
KEFjY2Vzc2liaWxpdHlPYmplY3QqKTsKIAogcHVibGljOgorICAgIGVudW0gY2xhc3MgQ29tcG9z
aXRpb25TdGF0ZSA6IHVpbnQ4X3QgeyBTdGFydGVkLCBJblByb2dyZXNzLCBFbmRlZCB9OworCiAg
ICAgdm9pZCBvblBhZ2VBY3Rpdml0eVN0YXRlQ2hhbmdlKE9wdGlvblNldDxBY3Rpdml0eVN0YXRl
Pik7CiAgICAgdm9pZCBzZXRQYWdlQWN0aXZpdHlTdGF0ZShPcHRpb25TZXQ8QWN0aXZpdHlTdGF0
ZT4gc3RhdGUpIHsgbV9wYWdlQWN0aXZpdHlTdGF0ZSA9IHN0YXRlOyB9CiAgICAgT3B0aW9uU2V0
PEFjdGl2aXR5U3RhdGU+IHBhZ2VBY3Rpdml0eVN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9wYWdl
QWN0aXZpdHlTdGF0ZTsgfQpAQCAtMTk4LDcgKzIwMCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIG9u
VGV4dFNlY3VyaXR5Q2hhbmdlZChIVE1MSW5wdXRFbGVtZW50Jik7CiAgICAgdm9pZCBvblRpdGxl
Q2hhbmdlKERvY3VtZW50Jik7CiAgICAgdm9pZCBvblZhbGlkaXR5Q2hhbmdlKEVsZW1lbnQmKTsK
LSAgICB2b2lkIG9uVGV4dENvbXBvc2l0aW9uQ2hhbmdlKE5vZGUmKTsKKyAgICB2b2lkIG9uVGV4
dENvbXBvc2l0aW9uQ2hhbmdlKE5vZGUmLCBDb21wb3NpdGlvblN0YXRlLCBib29sKTsKICAgICB2
b2lkIHZhbHVlQ2hhbmdlZChFbGVtZW50Kik7CiAgICAgdm9pZCBjaGVja2VkU3RhdGVDaGFuZ2Vk
KE5vZGUqKTsKICAgICB2b2lkIGF1dG9maWxsVHlwZUNoYW5nZWQoTm9kZSopOwpAQCAtMzY1LDYg
KzM2Nyw4IEBAIHB1YmxpYzoKICAgICAgICAgQVhTZWxlY3RlZFRleHRDaGFuZ2VkLAogICAgICAg
ICBBWFNldFNpemVDaGFuZ2VkLAogICAgICAgICBBWFRhYmxlSGVhZGVyc0NoYW5nZWQsCisgICAg
ICAgIEFYVGV4dElucHV0TWFya2luZ1Nlc3Npb25CZWdhbiwKKyAgICAgICAgQVhUZXh0SW5wdXRN
YXJraW5nU2Vzc2lvbkVuZGVkLAogICAgICAgICBBWFVSTENoYW5nZWQsCiAgICAgICAgIEFYVmFs
dWVDaGFuZ2VkLAogICAgICAgICBBWFNjcm9sbGVkVG9BbmNob3IsCkBAIC00NjEsOCArNDY1LDYg
QEAgcHVibGljOgogICAgIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPEFYSUQ+PiByZWxhdGVkT2JqZWN0
SURzRm9yKGNvbnN0IEFYQ29yZU9iamVjdCYsIEFYUmVsYXRpb25UeXBlKTsKICAgICB2b2lkIHVw
ZGF0ZVJlbGF0aW9ucyhFbGVtZW50JiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogCi0gICAgQWNj
ZXNzaWJpbGl0eU9iamVjdCogdGV4dENvbXBvc2l0aW9uT2JqZWN0Rm9yTm9kZShOb2RlJik7Ci0K
ICNpZiBFTkFCTEUoQUNDRVNTSUJJTElUWV9JU09MQVRFRF9UUkVFKQogICAgIHZvaWQgc2NoZWR1
bGVPYmplY3RSZWdpb25zVXBkYXRlKGJvb2wgc2NoZWR1bGVJbW1lZGlhdGVseSA9IGZhbHNlKSB7
IG1fZ2VvbWV0cnlNYW5hZ2VyLT5zY2hlZHVsZU9iamVjdFJlZ2lvbnNVcGRhdGUoc2NoZWR1bGVJ
bW1lZGlhdGVseSk7IH0KICAgICB2b2lkIHdpbGxVcGRhdGVPYmplY3RSZWdpb25zKCkgeyBtX2dl
b21ldHJ5TWFuYWdlci0+d2lsbFVwZGF0ZU9iamVjdFJlZ2lvbnMoKTsgfQpAQCAtNzM2LDcgKzcz
OCw3IEBAIGlubGluZSB2b2lkIEFYT2JqZWN0Q2FjaGU6Om9uU2VsZWN0ZWRDaGFuZ2VkKE5vZGUq
KSB7IH0KIGlubGluZSB2b2lkIEFYT2JqZWN0Q2FjaGU6Om9uVGV4dFNlY3VyaXR5Q2hhbmdlZChI
VE1MSW5wdXRFbGVtZW50JikgeyB9CiBpbmxpbmUgdm9pZCBBWE9iamVjdENhY2hlOjpvblRpdGxl
Q2hhbmdlKERvY3VtZW50JikgeyB9CiBpbmxpbmUgdm9pZCBBWE9iamVjdENhY2hlOjpvblZhbGlk
aXR5Q2hhbmdlKEVsZW1lbnQmKSB7IH0KLWlubGluZSB2b2lkIEFYT2JqZWN0Q2FjaGU6Om9uVGV4
dENvbXBvc2l0aW9uQ2hhbmdlKE5vZGUmKSB7IH0KK2lubGluZSB2b2lkIEFYT2JqZWN0Q2FjaGU6
Om9uVGV4dENvbXBvc2l0aW9uQ2hhbmdlKE5vZGUmLCBDb21wb3NpdGlvblN0YXRlLCBib29sKSB7
IH0KIGlubGluZSB2b2lkIEFYT2JqZWN0Q2FjaGU6OnZhbHVlQ2hhbmdlZChFbGVtZW50KikgeyB9
CiBpbmxpbmUgdm9pZCBBWE9iamVjdENhY2hlOjpvbkZvY3VzQ2hhbmdlKE5vZGUqLCBOb2RlKikg
eyB9CiBpbmxpbmUgdm9pZCBBWE9iamVjdENhY2hlOjpvblBhZ2VBY3Rpdml0eVN0YXRlQ2hhbmdl
KE9wdGlvblNldDxBY3Rpdml0eVN0YXRlPikgeyB9CkBAIC03ODgsNyArNzkwLDYgQEAgaW5saW5l
IHZvaWQgQVhPYmplY3RDYWNoZTo6dXBkYXRlTG9hZGluZ1Byb2dyZXNzKGRvdWJsZSkgeyB9CiBp
bmxpbmUgU2ltcGxlUmFuZ2UgQVhPYmplY3RDYWNoZTo6cmFuZ2VGb3JOb2RlQ29udGVudHMoTm9k
ZSYgbm9kZSkgeyByZXR1cm4gbWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKG5vZGUpOyB9
CiBpbmxpbmUgc3RkOjpvcHRpb25hbDxWZWN0b3I8QVhJRD4+IEFYT2JqZWN0Q2FjaGU6OnJlbGF0
ZWRPYmplY3RJRHNGb3IoY29uc3QgQVhDb3JlT2JqZWN0JiwgQVhSZWxhdGlvblR5cGUpIHsgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsgfQogaW5saW5lIHZvaWQgQVhPYmplY3RDYWNoZTo6dXBkYXRlUmVs
YXRpb25zKEVsZW1lbnQmLCBjb25zdCBRdWFsaWZpZWROYW1lJikgeyB9Ci1pbmxpbmUgQWNjZXNz
aWJpbGl0eU9iamVjdCogQVhPYmplY3RDYWNoZTo6dGV4dENvbXBvc2l0aW9uT2JqZWN0Rm9yTm9k
ZShOb2RlJikgeyByZXR1cm4gbnVsbHB0cjsgfQogaW5saW5lIHZvaWQgQVhPYmplY3RDYWNoZTo6
cmVtb3ZlKEFYSUQpIHsgfQogaW5saW5lIHZvaWQgQVhPYmplY3RDYWNoZTo6cmVtb3ZlKFJlbmRl
ck9iamVjdCopIHsgfQogaW5saW5lIHZvaWQgQVhPYmplY3RDYWNoZTo6cmVtb3ZlKE5vZGUmKSB7
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhUZXh0TWFya2Vy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhUZXh0TWFya2VyLmNwcAppbmRl
eCBlYWI3MzliNmYxOTcuLjkyM2UyN2RmOTczYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BWFRleHRNYXJrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQVhUZXh0TWFya2VyLmNwcApAQCAtMjc1LDYgKzI3NSwxOSBAQCBzdGQ6Om9wdGlv
bmFsPFNpbXBsZVJhbmdlPiBBWFRleHRNYXJrZXJSYW5nZTo6c2ltcGxlUmFuZ2UoKSBjb25zdAog
ICAgIHJldHVybiB7IHsgKnN0YXJ0Qm91bmRhcnlQb2ludCwgKmVuZEJvdW5kYXJ5UG9pbnQgfSB9
OwogfQogCitzdGQ6Om9wdGlvbmFsPENoYXJhY3RlclJhbmdlPiBBWFRleHRNYXJrZXJSYW5nZTo6
Y2hhcmFjdGVyUmFuZ2UoKSBjb25zdAoreworICAgIGlmIChtX3N0YXJ0Lm1fZGF0YS5vYmplY3RJ
RCAhPSBtX2VuZC5tX2RhdGEub2JqZWN0SUQKKyAgICAgICAgfHwgbV9zdGFydC5tX2RhdGEudHJl
ZUlEICE9IG1fZW5kLm1fZGF0YS50cmVlSUQpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7
CisKKyAgICBpZiAobV9zdGFydC5tX2RhdGEuY2hhcmFjdGVyT2Zmc2V0ID4gbV9lbmQubV9kYXRh
LmNoYXJhY3Rlck9mZnNldCkgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9CisgICAgcmV0dXJuIHsgeyBtX3N0YXJ0Lm1f
ZGF0YS5jaGFyYWN0ZXJPZmZzZXQsIG1fZW5kLm1fZGF0YS5jaGFyYWN0ZXJPZmZzZXQgLSBtX3N0
YXJ0Lm1fZGF0YS5jaGFyYWN0ZXJPZmZzZXQgfSB9OworfQorCiBzdGQ6OnBhcnRpYWxfb3JkZXJp
bmcgcGFydGlhbE9yZGVyKGNvbnN0IEFYVGV4dE1hcmtlciYgbWFya2VyMSwgY29uc3QgQVhUZXh0
TWFya2VyJiBtYXJrZXIyKQogewogICAgIGlmIChtYXJrZXIxLm9iamVjdElEKCkgPT0gbWFya2Vy
Mi5vYmplY3RJRCgpICYmIG1hcmtlcjEudHJlZUlEKCkgPT0gbWFya2VyMi50cmVlSUQoKSkgewpA
QCAtMzA1LDQgKzMxOCwxNiBAQCBib29sIEFYVGV4dE1hcmtlclJhbmdlOjppc0NvbmZpbmVkVG8o
QVhJRCBvYmplY3RJRCkgY29uc3QKICAgICAgICAgJiYgTElLRUxZKG1fc3RhcnQudHJlZUlEKCkg
PT0gbV9lbmQudHJlZUlEKCkpOwogfQogCisjaWYgRU5BQkxFKEFDQ0VTU0lCSUxJVFlfSVNPTEFU
RURfVFJFRSkKK0FYSXNvbGF0ZWRUZXh0TWFya2VyUmFuZ2U6OkFYSXNvbGF0ZWRUZXh0TWFya2Vy
UmFuZ2UoY29uc3QgQVhUZXh0TWFya2VyUmFuZ2UmIHJhbmdlKQoreworICAgIG9iamVjdElEID0g
cmFuZ2Uuc3RhcnQoKS5vYmplY3RJRCgpOworICAgIGlmIChhdXRvIGNoYXJhY3RlclJhbmdlID0g
cmFuZ2UuY2hhcmFjdGVyUmFuZ2UoKSkgeworICAgICAgICBzdGFydCA9IHN0YXRpY19jYXN0PHVu
c2lnbmVkPihjaGFyYWN0ZXJSYW5nZS0+bG9jYXRpb24pOworICAgICAgICBlbmQgPSBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oY2hhcmFjdGVyUmFuZ2UtPmxvY2F0aW9uICsgY2hhcmFjdGVyUmFuZ2Ut
Pmxlbmd0aCk7CisgICAgfQorfQorI2VuZGlmCisKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWFRleHRNYXJrZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhUZXh0TWFya2VyLmgKaW5kZXggMzE4ZWQw
NjhhNjMxLi44MWMwYzFjYjdmYjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQVhUZXh0TWFya2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
WFRleHRNYXJrZXIuaApAQCAtMTU1LDYgKzE1NSw3IEBAIHB1YmxpYzoKICAgICBvcGVyYXRvciBi
b29sKCkgY29uc3QgeyByZXR1cm4gbV9zdGFydCAmJiBtX2VuZDsgfQogICAgIG9wZXJhdG9yIFZp
c2libGVQb3NpdGlvblJhbmdlKCkgY29uc3Q7CiAgICAgc3RkOjpvcHRpb25hbDxTaW1wbGVSYW5n
ZT4gc2ltcGxlUmFuZ2UoKSBjb25zdDsKKyAgICBzdGQ6Om9wdGlvbmFsPENoYXJhY3RlclJhbmdl
PiBjaGFyYWN0ZXJSYW5nZSgpIGNvbnN0OwogCiAjaWYgUExBVEZPUk0oTUFDKQogICAgIFJldGFp
blB0cjxBWFRleHRNYXJrZXJSYW5nZVJlZj4gcGxhdGZvcm1EYXRhKCkgY29uc3Q7CkBAIC0xNzMs
NiArMTc0LDE2IEBAIHByaXZhdGU6CiAgICAgQVhUZXh0TWFya2VyIG1fZW5kOwogfTsKIAorI2lm
IEVOQUJMRShBQ0NFU1NJQklMSVRZX0lTT0xBVEVEX1RSRUUpCisvLyBUaGlzIGxpZ2h0d2VpZ2h0
IHJlcHJlc2VudGF0aW9uIG9mIGEgdGV4dCBtYXJrZXIgcmFuZ2UgaXMgMTYgYnl0ZXMgKGluc3Rl
YWQgb2YgODAgYnl0ZXMpLCBtYWtpbmcgaXQgZmFyIG1vcmUgZWZmaWNpZW50IHRvIHN0b3JlIGlu
IHRoZSBpc29sYXRlZCBvYmplY3QncyBwcm9wZXJ0eSBtYXAuCitzdHJ1Y3QgQVhJc29sYXRlZFRl
eHRNYXJrZXJSYW5nZSB7CisgICAgQVhJRCBvYmplY3RJRDsKKyAgICB1bnNpZ25lZCBzdGFydDsK
KyAgICB1bnNpZ25lZCBlbmQ7CisgICAgQVhJc29sYXRlZFRleHRNYXJrZXJSYW5nZShjb25zdCBB
WFRleHRNYXJrZXJSYW5nZSYpOworfTsKKyNlbmRpZgorCiBpbmxpbmUgTm9kZSogQVhUZXh0TWFy
a2VyOjpub2RlKCkgY29uc3QKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAK
aW5kZXggMDY4NTZmYTczMmFkLi40ZTg5N2JjOTczNDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcApAQCAtNDA1LDM5ICs0
MDUsMzggQEAgc3RkOjpvcHRpb25hbDxTaW1wbGVSYW5nZT4gQWNjZXNzaWJpbGl0eU9iamVjdDo6
bWlzc3BlbGxpbmdSYW5nZShjb25zdCBTaW1wbGVSYW4KICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OwogfQogCi1ib29sIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmlzTm9kZUZvckNvbXBvc2l0aW9uKGNv
bnN0IEVkaXRvciYgZWRpdG9yKSBjb25zdAorc3RkOjpvcHRpb25hbDxDaGFyYWN0ZXJSYW5nZT4g
QWNjZXNzaWJpbGl0eU9iamVjdDo6dGV4dElucHV0TWFya2VkUmFuZ2UoKSBjb25zdAogewotICAg
IFdlYWtQdHIgY29tcG9zaXRpb25Ob2RlID0gZWRpdG9yLmNvbXBvc2l0aW9uTm9kZSgpOwotICAg
IGlmICghY29tcG9zaXRpb25Ob2RlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBXZWFr
UHRyIGNhY2hlID0gYXhPYmplY3RDYWNoZSgpOwotICAgIGlmICghY2FjaGUpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIGlmIChhdXRvKiBjb21wb3NpdGlvbk9iamVjdCA9IGNhY2hlLT50
ZXh0Q29tcG9zaXRpb25PYmplY3RGb3JOb2RlKCpjb21wb3NpdGlvbk5vZGUpKQotICAgICAgICBy
ZXR1cm4gY29tcG9zaXRpb25PYmplY3QtPm9iamVjdElEKCkgPT0gb2JqZWN0SUQoKTsKLQotICAg
IHJldHVybiBmYWxzZTsKKyAgICBhdXRvIHJhbmdlID0gdGV4dElucHV0TWFya2VkVGV4dE1hcmtl
clJhbmdlKCkuY2hhcmFjdGVyUmFuZ2UoKTsKKyAgICByZXR1cm4gcmFuZ2UgJiYgcmFuZ2UtPmxl
bmd0aCA/IHJhbmdlIDogc3RkOjpudWxsb3B0OwogfQogCi1zdGQ6Om9wdGlvbmFsPENoYXJhY3Rl
clJhbmdlPiBBY2Nlc3NpYmlsaXR5T2JqZWN0Ojp0ZXh0SW5wdXRNYXJrZWRSYW5nZSgpIGNvbnN0
CitBWFRleHRNYXJrZXJSYW5nZSBBY2Nlc3NpYmlsaXR5T2JqZWN0Ojp0ZXh0SW5wdXRNYXJrZWRU
ZXh0TWFya2VyUmFuZ2UoKSBjb25zdAogewogICAgIFdlYWtQdHIgbm9kZSA9IHRoaXMtPm5vZGUo
KTsKICAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAg
IHJldHVybiB7IH07CiAKICAgICBhdXRvKiBmcmFtZSA9IG5vZGUtPmRvY3VtZW50KCkuZnJhbWUo
KTsKICAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgICAg
ICByZXR1cm4geyB9OworCisgICAgYXV0byogY2FjaGUgPSBheE9iamVjdENhY2hlKCk7CisgICAg
aWYgKCFjYWNoZSkKKyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIGF1dG8mIGVkaXRvciA9IGZy
YW1lLT5lZGl0b3IoKTsKLSAgICBhdXRvIHJhbmdlID0gZWRpdG9yLmNvbXBvc2l0aW9uUmFuZ2Uo
KTsKLSAgICBpZiAoIXJhbmdlIHx8ICFpc05vZGVGb3JDb21wb3NpdGlvbihlZGl0b3IpKQotICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIGF1dG8qIG9iamVjdCA9IGNhY2hlLT5nZXRP
ckNyZWF0ZShlZGl0b3IuY29tcG9zaXRpb25Ob2RlKCkpOworICAgIGlmICghb2JqZWN0KQorICAg
ICAgICByZXR1cm4geyB9OworCisgICAgaWYgKGF1dG8qIG9ic2VydmFibGVPYmplY3QgPSBvYmpl
Y3QtPm9ic2VydmFibGVPYmplY3QoKSkKKyAgICAgICAgb2JqZWN0ID0gb2JzZXJ2YWJsZU9iamVj
dDsKKworICAgIGlmIChvYmplY3QtPm9iamVjdElEKCkgIT0gb2JqZWN0SUQoKSkKKyAgICAgICAg
cmV0dXJuIHsgfTsKIAotICAgIGF1dG8gc2NvcGUgPSBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29u
dGVudHMoKm5vZGUpOwotICAgIHJldHVybiBjaGFyYWN0ZXJSYW5nZShzY29wZSwgKnJhbmdlKTsK
KyAgICByZXR1cm4geyBlZGl0b3IuY29tcG9zaXRpb25SYW5nZSgpIH07CiB9CiAKIHVuc2lnbmVk
IEFjY2Vzc2liaWxpdHlPYmplY3Q6OmJsb2NrcXVvdGVMZXZlbCgpIGNvbnN0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaCBiL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5oCmluZGV4IDg5
ZjExZGUzZDE1Mi4uYjI3YzUxOGU1ODY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaApAQCAtMjQzLDYgKzI0Myw3IEBAIHB1Ymxp
YzoKICAgICBib29sIGhhc1VuZGVybGluZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNl
OyB9CiAgICAgYm9vbCBoYXNIaWdobGlnaHRpbmcoKSBjb25zdCBvdmVycmlkZTsKICAgICBzdGQ6
Om9wdGlvbmFsPENoYXJhY3RlclJhbmdlPiB0ZXh0SW5wdXRNYXJrZWRSYW5nZSgpIGNvbnN0IGZp
bmFsOworICAgIEFYVGV4dE1hcmtlclJhbmdlIHRleHRJbnB1dE1hcmtlZFRleHRNYXJrZXJSYW5n
ZSgpIGNvbnN0IGZpbmFsOwogCiAgICAgYm9vbCBzdXBwb3J0c0RhdGV0aW1lQXR0cmlidXRlKCkg
Y29uc3Qgb3ZlcnJpZGU7CiAgICAgU3RyaW5nIGRhdGV0aW1lQXR0cmlidXRlVmFsdWUoKSBjb25z
dCBvdmVycmlkZTsKQEAgLTgxNiw4ICs4MTcsNiBAQCBwcml2YXRlOgogICAgIC8vIFNwZWNpYWwg
aGFuZGxpbmcgb2YgY2xpY2sgcG9pbnQgZm9yIGxpbmtzLgogICAgIEludFBvaW50IGxpbmtDbGlj
a1BvaW50KCk7CiAKLSAgICBib29sIGlzTm9kZUZvckNvbXBvc2l0aW9uKGNvbnN0IEVkaXRvciYp
IGNvbnN0OwotCiBwcm90ZWN0ZWQ6IC8vIEZJWE1FOiBNYWtlIHRoZSBkYXRhIG1lbWJlcnMgcHJp
dmF0ZS4KICAgICBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgbV9jaGlsZHJlbjsKICAgICBt
dXRhYmxlIGJvb2wgbV9jaGlsZHJlbkluaXRpYWxpemVkIHsgZmFsc2UgfTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdEludGVyZmFj
ZS5oIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0SW50
ZXJmYWNlLmgKaW5kZXggMjMzMGZiMjE3NWVlLi43MDczMTJjOTA5NDYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdEludGVyZmFjZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdElu
dGVyZmFjZS5oCkBAIC05ODksNiArOTg5LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBo
YXNVbmRlcmxpbmUoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBib29sIGhhc0hpZ2hsaWdodGlu
ZygpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIHN0ZDo6b3B0aW9uYWw8Q2hhcmFjdGVyUmFuZ2U+
IHRleHRJbnB1dE1hcmtlZFJhbmdlKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgQVhUZXh0TWFy
a2VyUmFuZ2UgdGV4dElucHV0TWFya2VkVGV4dE1hcmtlclJhbmdlKCkgY29uc3QgPSAwOwogCiAg
ICAgdmlydHVhbCBib29sIHN1cHBvcnRzRGF0ZXRpbWVBdHRyaWJ1dGUoKSBjb25zdCA9IDA7CiAg
ICAgdmlydHVhbCBTdHJpbmcgZGF0ZXRpbWVBdHRyaWJ1dGVWYWx1ZSgpIGNvbnN0ID0gMDsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvY29jb2EvQVhUZXh0TWFya2Vy
Q29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2NvY29hL0FYVGV4dE1hcmtl
ckNvY29hLm1tCmluZGV4IDQ5NWY0M2Y3YzliMy4uMDE5MjYyMTFkZDA3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2NvY29hL0FYVGV4dE1hcmtlckNvY29hLm1tCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvY29jb2EvQVhUZXh0TWFya2VyQ29jb2Eu
bW0KQEAgLTkzLDE1ICs5Myw3IEBAIFJldGFpblB0cjxBWFRleHRNYXJrZXJSYW5nZVJlZj4gQVhU
ZXh0TWFya2VyUmFuZ2U6OnBsYXRmb3JtRGF0YSgpIGNvbnN0CiAKIHN0ZDo6b3B0aW9uYWw8TlNS
YW5nZT4gQVhUZXh0TWFya2VyUmFuZ2U6Om5zUmFuZ2UoKSBjb25zdAogewotICAgIGlmIChtX3N0
YXJ0Lm1fZGF0YS5vYmplY3RJRCAhPSBtX2VuZC5tX2RhdGEub2JqZWN0SUQKLSAgICAgICAgfHwg
bV9zdGFydC5tX2RhdGEudHJlZUlEICE9IG1fZW5kLm1fZGF0YS50cmVlSUQpCi0gICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICBpZiAobV9zdGFydC5tX2RhdGEuY2hhcmFjdGVyT2Zm
c2V0ID4gbV9lbmQubV9kYXRhLmNoYXJhY3Rlck9mZnNldCkgewotICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICB9Ci0gICAgcmV0
dXJuIE5TTWFrZVJhbmdlKG1fc3RhcnQubV9kYXRhLmNoYXJhY3Rlck9mZnNldCwgbV9lbmQubV9k
YXRhLmNoYXJhY3Rlck9mZnNldCAtIG1fc3RhcnQubV9kYXRhLmNoYXJhY3Rlck9mZnNldCk7Cisg
ICAgcmV0dXJuIGNoYXJhY3RlclJhbmdlKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvY29jb2EvQWNjZXNzaWJp
bGl0eU9iamVjdENvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9jb2NvYS9B
Y2Nlc3NpYmlsaXR5T2JqZWN0Q29jb2EubW0KaW5kZXggYmUwOGI5MjQ0Njc4Li5iMTlmZjgyNDU0
YWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvY29jb2EvQWNjZXNz
aWJpbGl0eU9iamVjdENvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
Y29jb2EvQWNjZXNzaWJpbGl0eU9iamVjdENvY29hLm1tCkBAIC0zMzQsMTEgKzMzNCwxMSBAQCBS
ZXRhaW5QdHI8TlNBcnJheT4gQWNjZXNzaWJpbGl0eU9iamVjdDo6Y29udGVudEZvclJhbmdlKGNv
bnN0IFNpbXBsZVJhbmdlJiByYW5nZQogICAgICAgICBpZiAoaXQudGV4dCgpLmxlbmd0aCgpKSB7
CiAgICAgICAgICAgICBhdXRvIGxpc3RNYXJrZXJUZXh0ID0gbGlzdE1hcmtlclRleHRGb3JOb2Rl
QW5kUG9zaXRpb24oJm5vZGUsIG1ha2VDb250YWluZXJPZmZzZXRQb3NpdGlvbihpdC5yYW5nZSgp
LnN0YXJ0KSk7CiAgICAgICAgICAgICBpZiAoIWxpc3RNYXJrZXJUZXh0LmlzRW1wdHkoKSkgewot
ICAgICAgICAgICAgICAgIGlmIChhdXRvIGF0dHJTdHJpbmcgPSBhdHRyaWJ1dGVkU3RyaW5nQ3Jl
YXRlKCZub2RlLCBsaXN0TWFya2VyVGV4dCwgU3BlbGxDaGVjazo6Tm8pKQorICAgICAgICAgICAg
ICAgIGlmIChhdXRvIGF0dHJTdHJpbmcgPSBhdHRyaWJ1dGVkU3RyaW5nQ3JlYXRlKCZub2RlLCBs
aXN0TWFya2VyVGV4dCwgaXQucmFuZ2UoKSwgU3BlbGxDaGVjazo6Tm8pKQogICAgICAgICAgICAg
ICAgICAgICBbcmVzdWx0IGFkZE9iamVjdDphdHRyU3RyaW5nLmdldCgpXTsKICAgICAgICAgICAg
IH0KIAotICAgICAgICAgICAgaWYgKGF1dG8gYXR0clN0cmluZyA9IGF0dHJpYnV0ZWRTdHJpbmdD
cmVhdGUoJm5vZGUsIGl0LnRleHQoKSwgc3BlbGxDaGVjaykpCisgICAgICAgICAgICBpZiAoYXV0
byBhdHRyU3RyaW5nID0gYXR0cmlidXRlZFN0cmluZ0NyZWF0ZSgmbm9kZSwgaXQudGV4dCgpLCBp
dC5yYW5nZSgpLCBzcGVsbENoZWNrKSkKICAgICAgICAgICAgICAgICBbcmVzdWx0IGFkZE9iamVj
dDphdHRyU3RyaW5nLmdldCgpXTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlmIChO
b2RlKiByZXBsYWNlZE5vZGUgPSBpdC5ub2RlKCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvaW9zL0FjY2Vzc2liaWxpdHlPYmplY3RJT1MubW0gYi9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9BY2Nlc3NpYmlsaXR5T2JqZWN0SU9TLm1tCmluZGV4
IGNiOWVjN2RjNTNmYy4uNzljMDJmZDMyZDAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L2lvcy9BY2Nlc3NpYmlsaXR5T2JqZWN0SU9TLm1tCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL0FjY2Vzc2liaWxpdHlPYmplY3RJT1MubW0KQEAgLTIw
OCw3ICsyMDgsNyBAQCBzdGF0aWMgdm9pZCBhdHRyaWJ1dGVTdHJpbmdTZXRTdHlsZShOU011dGFi
bGVBdHRyaWJ1dGVkU3RyaW5nICphdHRyU3RyaW5nLCBSZW5kZQogICAgICAgICBbYXR0clN0cmlu
ZyBhZGRBdHRyaWJ1dGU6VUlBY2Nlc3NpYmlsaXR5VGV4dEF0dHJpYnV0ZUNvbnRleHQgdmFsdWU6
VUlBY2Nlc3NpYmlsaXR5VGV4dHVhbENvbnRleHRTb3VyY2VDb2RlIHJhbmdlOnJhbmdlXTsKIH0K
IAotUmV0YWluUHRyPE5TQXR0cmlidXRlZFN0cmluZz4gYXR0cmlidXRlZFN0cmluZ0NyZWF0ZShO
b2RlKiBub2RlLCBTdHJpbmdWaWV3IHRleHQsIEFYQ29yZU9iamVjdDo6U3BlbGxDaGVjaykKK1Jl
dGFpblB0cjxOU0F0dHJpYnV0ZWRTdHJpbmc+IGF0dHJpYnV0ZWRTdHJpbmdDcmVhdGUoTm9kZSog
bm9kZSwgU3RyaW5nVmlldyB0ZXh0LCBjb25zdCBTaW1wbGVSYW5nZSYsIEFYQ29yZU9iamVjdDo6
U3BlbGxDaGVjaykKIHsKICAgICAvLyBTa2lwIGludmlzaWJsZSB0ZXh0LgogICAgIGF1dG8qIHJl
bmRlcmVyID0gbm9kZS0+cmVuZGVyZXIoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRPYmplY3QuY3BwIGIvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZE9iamVjdC5jcHAKaW5k
ZXggYTM0YWQ5NTBhZjYwLi40MWIyZmZmMzVhMzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRPYmplY3QuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRPYmplY3Qu
Y3BwCkBAIC0xNjExLDYgKzE2MTEsMjEgQEAgYm9vbCBBWElzb2xhdGVkT2JqZWN0OjpoYXNTYW1l
U3R5bGUoY29uc3QgQVhDb3JlT2JqZWN0JiBvdGhlck9iamVjdCkgY29uc3QKICAgICB9KTsKIH0K
IAorc3RkOjpvcHRpb25hbDxDaGFyYWN0ZXJSYW5nZT4gQVhJc29sYXRlZE9iamVjdDo6dGV4dElu
cHV0TWFya2VkUmFuZ2UoKSBjb25zdAoreworICAgIGF1dG8gcmFuZ2UgPSB0ZXh0SW5wdXRNYXJr
ZWRUZXh0TWFya2VyUmFuZ2UoKS5jaGFyYWN0ZXJSYW5nZSgpOworICAgIHJldHVybiByYW5nZSAm
JiByYW5nZS0+bGVuZ3RoID8gcmFuZ2UgOiBzdGQ6Om51bGxvcHQ7Cit9CisKK0FYVGV4dE1hcmtl
clJhbmdlIEFYSXNvbGF0ZWRPYmplY3Q6OnRleHRJbnB1dE1hcmtlZFRleHRNYXJrZXJSYW5nZSgp
IGNvbnN0Cit7CisgICAgYXV0byByYW5nZSA9IG9wdGlvbmFsQXR0cmlidXRlVmFsdWU8QVhJc29s
YXRlZFRleHRNYXJrZXJSYW5nZT4oQVhQcm9wZXJ0eU5hbWU6OlRleHRJbnB1dE1hcmtlZFRleHRN
YXJrZXJSYW5nZSk7CisgICAgaWYgKCFyYW5nZSB8fCByYW5nZS0+c3RhcnQgPj0gcmFuZ2UtPmVu
ZCkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIHJldHVybiB7IHRyZWUoKS0+dHJlZUlEKCks
IHJhbmdlLT5vYmplY3RJRCwgcmFuZ2UtPnN0YXJ0LCByYW5nZS0+ZW5kIH07Cit9CisKIC8vIFRo
ZSBhdHRyaWJ1dGUgdGhpcyB2YWx1ZSBpcyBleHBvc2VkIGFzIGlzIG5vdCB1c2VkIGJ5IFZvaWNl
T3ZlciBvciBhbnkgb3RoZXIgQVggY2xpZW50IG9uIG1hY09TLCBzbyB3ZSBpbnRlbnRpb25hbGx5
IGRvbid0IGNhY2hlIGl0LgogLy8gUmUtdmlzaXQgaWYgSVRNIGV4cGFuZHMgdG8gbW9yZSBwbGF0
Zm9ybXMsIG9yIGlmIEFYIGNsaWVudHMgbmVlZCB0byBzdGFydCB1c2luZyB0aGlzLgogU3RyaW5n
IEFYSXNvbGF0ZWRPYmplY3Q6OmxpbmtSZWxWYWx1ZSgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkT2JqZWN0Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkT2Jq
ZWN0LmgKaW5kZXggYzc5YzgwMGZiMmU0Li4yMzY0MmI4MzBiYTcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRPYmplY3QuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVk
T2JqZWN0LmgKQEAgLTQ1Nyw3ICs0NTcsOCBAQCBwcml2YXRlOgogICAgIGJvb2wgaGFzU2FtZVN0
eWxlKGNvbnN0IEFYQ29yZU9iamVjdCYpIGNvbnN0IG92ZXJyaWRlOwogICAgIGJvb2wgaGFzVW5k
ZXJsaW5lKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJv
cGVydHlOYW1lOjpIYXNVbmRlcmxpbmUpOyB9CiAgICAgYm9vbCBoYXNIaWdobGlnaHRpbmcoKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6
Okhhc0hpZ2hsaWdodGluZyk7IH0KLSAgICBzdGQ6Om9wdGlvbmFsPENoYXJhY3RlclJhbmdlPiB0
ZXh0SW5wdXRNYXJrZWRSYW5nZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG9wdGlvbmFsQXR0cmli
dXRlVmFsdWU8Q2hhcmFjdGVyUmFuZ2U+KEFYUHJvcGVydHlOYW1lOjpUZXh0SW5wdXRNYXJrZWRS
YW5nZSk7IH0KKyAgICBzdGQ6Om9wdGlvbmFsPENoYXJhY3RlclJhbmdlPiB0ZXh0SW5wdXRNYXJr
ZWRSYW5nZSgpIGNvbnN0IGZpbmFsOworICAgIEFYVGV4dE1hcmtlclJhbmdlIHRleHRJbnB1dE1h
cmtlZFRleHRNYXJrZXJSYW5nZSgpIGNvbnN0IGZpbmFsOwogICAgIEVsZW1lbnQqIGVsZW1lbnQo
KSBjb25zdCBvdmVycmlkZTsKICAgICBOb2RlKiBub2RlKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAg
UmVuZGVyT2JqZWN0KiByZW5kZXJlcigpIGNvbnN0IG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZFRyZWUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZFRy
ZWUuY3BwCmluZGV4IDE2MDkwMTQwOThlMS4uYjY3NTIwZDAxYzhhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkVHJlZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRl
ZFRyZWUuY3BwCkBAIC01ODAsMTMgKzU4MCwxMSBAQCB2b2lkIEFYSXNvbGF0ZWRUcmVlOjp1cGRh
dGVOb2RlUHJvcGVydGllcyhBWENvcmVPYmplY3QmIGF4T2JqZWN0LCBjb25zdCBWZWN0b3I8QQog
ICAgICAgICBjYXNlIEFYUHJvcGVydHlOYW1lOjpTdXBwb3J0c1NldFNpemU6CiAgICAgICAgICAg
ICBwcm9wZXJ0eU1hcC5zZXQoQVhQcm9wZXJ0eU5hbWU6OlN1cHBvcnRzU2V0U2l6ZSwgYXhPYmpl
Y3Quc3VwcG9ydHNTZXRTaXplKCkpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
QVhQcm9wZXJ0eU5hbWU6OlRleHRJbnB1dE1hcmtlZFJhbmdlOgotICAgICAgICAgICAgLy8gRklY
TUU6IFdlIHNob3VsZCBoYXZlIGEgbWVjaGFuaXNtIHRvIHJlbW92ZSBhIHByb3BlcnR5IGZyb20g
dGhlIG1hcCBmb3Igd2hlbiB0ZXh0SW5wdXRNYXJrZWRSYW5nZSBpcyBzdGQ6Om51bGxvcHQuCi0g
ICAgICAgICAgICBpZiAoYXV0byB0ZXh0SW5wdXRNYXJrZWRSYW5nZSA9IGF4T2JqZWN0LnRleHRJ
bnB1dE1hcmtlZFJhbmdlKCkpCi0gICAgICAgICAgICAgICAgcHJvcGVydHlNYXAuc2V0KEFYUHJv
cGVydHlOYW1lOjpUZXh0SW5wdXRNYXJrZWRSYW5nZSwgKnRleHRJbnB1dE1hcmtlZFJhbmdlKTsK
LSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBwcm9wZXJ0eU1hcC5zZXQoQVhQcm9w
ZXJ0eU5hbWU6OlRleHRJbnB1dE1hcmtlZFJhbmdlLCBudWxscHRyKTsKKyAgICAgICAgY2FzZSBB
WFByb3BlcnR5TmFtZTo6VGV4dElucHV0TWFya2VkVGV4dE1hcmtlclJhbmdlOiB7CisgICAgICAg
ICAgICBBWElzb2xhdGVkVGV4dE1hcmtlclJhbmdlIGlzb2xhdGVkUmFuZ2UgPSB7IGF4T2JqZWN0
LnRleHRJbnB1dE1hcmtlZFRleHRNYXJrZXJSYW5nZSgpIH07CisgICAgICAgICAgICBwcm9wZXJ0
eU1hcC5zZXQoQVhQcm9wZXJ0eU5hbWU6OlRleHRJbnB1dE1hcmtlZFRleHRNYXJrZXJSYW5nZSwg
aXNvbGF0ZWRSYW5nZSk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBj
YXNlIEFYUHJvcGVydHlOYW1lOjpVUkw6CiAgICAgICAgICAgICBwcm9wZXJ0eU1hcC5zZXQoQVhQ
cm9wZXJ0eU5hbWU6OlVSTCwgYXhPYmplY3QudXJsKCkuaXNvbGF0ZWRDb3B5KCkpOwogICAgICAg
ICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lz
b2xhdGVkdHJlZS9BWElzb2xhdGVkVHJlZS5oIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZFRyZWUuaAppbmRleCA2NGM0YWQ4M2ViYzQuLmEzZWI2
ZTQ4ZDJjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRl
ZHRyZWUvQVhJc29sYXRlZFRyZWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkVHJlZS5oCkBAIC01MCw2ICs1MCw3IEBAIGNsYXNzIEFY
T2JqZWN0Q2FjaGU7CiBjbGFzcyBBY2Nlc3NpYmlsaXR5T2JqZWN0OwogY2xhc3MgUGFnZTsKIGVu
dW0gY2xhc3MgQVhTdHJlYW1PcHRpb25zIDogdWludDhfdDsKK3N0cnVjdCBBWElzb2xhdGVkVGV4
dE1hcmtlclJhbmdlOwogCiBlbnVtIGNsYXNzIEFYUHJvcGVydHlOYW1lIDogdWludDE2X3Qgewog
ICAgIEFSSUFJc011bHRpbGluZSwKQEAgLTIyNiw3ICsyMjcsNyBAQCBlbnVtIGNsYXNzIEFYUHJv
cGVydHlOYW1lIDogdWludDE2X3QgewogICAgIFN1cHBvcnRzU2V0U2l6ZSwKICAgICBUYWJsZUxl
dmVsLAogICAgIFRleHRDb250ZW50LAotICAgIFRleHRJbnB1dE1hcmtlZFJhbmdlLAorICAgIFRl
eHRJbnB1dE1hcmtlZFRleHRNYXJrZXJSYW5nZSwKICAgICBUaXRsZSwKICAgICBUaXRsZUF0dHJp
YnV0ZVZhbHVlLAogICAgIFRpdGxlVUlFbGVtZW50LApAQCAtMjM5LDcgKzI0MCw3IEBAIGVudW0g
Y2xhc3MgQVhQcm9wZXJ0eU5hbWUgOiB1aW50MTZfdCB7CiAgICAgVmlzaWJsZVJvd3MsCiB9Owog
Ci11c2luZyBBWFByb3BlcnR5VmFsdWVWYXJpYW50ID0gc3RkOjp2YXJpYW50PHN0ZDo6bnVsbHB0
cl90LCBBWElELCBTdHJpbmcsIGJvb2wsIGludCwgdW5zaWduZWQsIGRvdWJsZSwgZmxvYXQsIHVp
bnQ2NF90LCBBY2Nlc3NpYmlsaXR5QnV0dG9uU3RhdGUsIENvbG9yLCBVUkwsIExheW91dFJlY3Qs
IEZsb2F0UG9pbnQsIEZsb2F0UmVjdCwgSW50UG9pbnQsIEludFJlY3QsIFBBTDo6U2Vzc2lvbklE
LCBzdGQ6OnBhaXI8dW5zaWduZWQsIHVuc2lnbmVkPiwgVmVjdG9yPEFjY2Vzc2liaWxpdHlUZXh0
PiwgVmVjdG9yPEFYSUQ+LCBWZWN0b3I8c3RkOjpwYWlyPEFYSUQsIEFYSUQ+PiwgVmVjdG9yPFN0
cmluZz4sIFBhdGgsIE9wdGlvblNldDxBWEFuY2VzdG9yRmxhZz4sIFJldGFpblB0cjxOU0F0dHJp
YnV0ZWRTdHJpbmc+LCBJbnNpZGVMaW5rLCBWZWN0b3I8VmVjdG9yPEFYSUQ+PiwgQ2hhcmFjdGVy
UmFuZ2U+OwordXNpbmcgQVhQcm9wZXJ0eVZhbHVlVmFyaWFudCA9IHN0ZDo6dmFyaWFudDxzdGQ6
Om51bGxwdHJfdCwgQVhJRCwgU3RyaW5nLCBib29sLCBpbnQsIHVuc2lnbmVkLCBkb3VibGUsIGZs
b2F0LCB1aW50NjRfdCwgQWNjZXNzaWJpbGl0eUJ1dHRvblN0YXRlLCBDb2xvciwgVVJMLCBMYXlv
dXRSZWN0LCBGbG9hdFBvaW50LCBGbG9hdFJlY3QsIEludFBvaW50LCBJbnRSZWN0LCBQQUw6OlNl
c3Npb25JRCwgc3RkOjpwYWlyPHVuc2lnbmVkLCB1bnNpZ25lZD4sIFZlY3RvcjxBY2Nlc3NpYmls
aXR5VGV4dD4sIFZlY3RvcjxBWElEPiwgVmVjdG9yPHN0ZDo6cGFpcjxBWElELCBBWElEPj4sIFZl
Y3RvcjxTdHJpbmc+LCBQYXRoLCBPcHRpb25TZXQ8QVhBbmNlc3RvckZsYWc+LCBSZXRhaW5QdHI8
TlNBdHRyaWJ1dGVkU3RyaW5nPiwgSW5zaWRlTGluaywgVmVjdG9yPFZlY3RvcjxBWElEPj4sIENo
YXJhY3RlclJhbmdlLCBBWElzb2xhdGVkVGV4dE1hcmtlclJhbmdlPjsKIHVzaW5nIEFYUHJvcGVy
dHlNYXAgPSBIYXNoTWFwPEFYUHJvcGVydHlOYW1lLCBBWFByb3BlcnR5VmFsdWVWYXJpYW50LCBJ
bnRIYXNoPEFYUHJvcGVydHlOYW1lPiwgV1RGOjpTdHJvbmdFbnVtSGFzaFRyYWl0czxBWFByb3Bl
cnR5TmFtZT4+OwogCiBzdHJ1Y3QgQVhQcm9wZXJ0eUNoYW5nZSB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9BWE9iamVjdENhY2hlTWFjLm1tIGIvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvQVhPYmplY3RDYWNoZU1hYy5tbQppbmRleCBiODg1
YTk3ZDczMjAuLjFkMTI2NGIwNTlkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9tYWMvQVhPYmplY3RDYWNoZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L21hYy9BWE9iamVjdENhY2hlTWFjLm1tCkBAIC0xMjcsNiArMTI3LDE0IEBACiAj
ZGVmaW5lIGtBWERyYWdnaW5nRGVzdGluYXRpb25EcmFnTm90QWNjZXB0ZWROb3RpZmljYXRpb24g
Q0ZTVFIoIkFYRHJhZ2dpbmdEZXN0aW5hdGlvbkRyYWdOb3RBY2NlcHRlZCIpCiAjZW5kaWYKIAor
I2lmbmRlZiBOU0FjY2Vzc2liaWxpdHlUZXh0SW5wdXRNYXJraW5nU2Vzc2lvbkJlZ2FuTm90aWZp
Y2F0aW9uCisjZGVmaW5lIE5TQWNjZXNzaWJpbGl0eVRleHRJbnB1dE1hcmtpbmdTZXNzaW9uQmVn
YW5Ob3RpZmljYXRpb24gQCJBWFRleHRJbnB1dE1hcmtpbmdTZXNzaW9uQmVnYW4iCisjZW5kaWYK
KworI2lmbmRlZiBOU0FjY2Vzc2liaWxpdHlUZXh0SW5wdXRNYXJraW5nU2Vzc2lvbkVuZGVkTm90
aWZpY2F0aW9uCisjZGVmaW5lIE5TQWNjZXNzaWJpbGl0eVRleHRJbnB1dE1hcmtpbmdTZXNzaW9u
RW5kZWROb3RpZmljYXRpb24gQCJBWFRleHRJbnB1dE1hcmtpbmdTZXNzaW9uRW5kZWQiCisjZW5k
aWYKKwogLy8gVmVyeSBsYXJnZSBzdHJpbmdzIGNhbiBuZWdhdGl2ZWx5IGltcGFjdCB0aGUgcGVy
Zm9ybWFuY2Ugb2Ygbm90aWZpY2F0aW9ucywgc28gdGhpcyBsZW5ndGggaXMgY2hvc2VuIHRvIHRy
eSB0byBmaXQgYW4gYXZlcmFnZSBwYXJhZ3JhcGggb3IgbGluZSBvZiB0ZXh0LCBidXQgbm90IGFs
bG93IHN0cmluZ3MgdG8gYmUgbGFyZ2UgZW5vdWdoIHRvIGh1cnQgcGVyZm9ybWFuY2UuCiBzdGF0
aWMgY29uc3QgTlNVSW50ZWdlciBBWFZhbHVlQ2hhbmdlVHJ1bmNhdGlvbkxlbmd0aCA9IDEwMDA7
CiAKQEAgLTQzMSw2ICs0MzksMTIgQEAgdm9pZCBBWE9iamVjdENhY2hlOjpwb3N0UGxhdGZvcm1O
b3RpZmljYXRpb24oQVhDb3JlT2JqZWN0KiBvYmplY3QsIEFYTm90aWZpY2F0aW8KICAgICBjYXNl
IEFYRHJhZ2dpbmdFeGl0ZWREcm9wWm9uZToKICAgICAgICAgbWFjTm90aWZpY2F0aW9uID0gKGlk
KWtBWERyYWdnaW5nRGVzdGluYXRpb25EcmFnTm90QWNjZXB0ZWROb3RpZmljYXRpb247CiAgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgQVhUZXh0SW5wdXRNYXJraW5nU2Vzc2lvbkJlZ2FuOgorICAg
ICAgICBtYWNOb3RpZmljYXRpb24gPSBOU0FjY2Vzc2liaWxpdHlUZXh0SW5wdXRNYXJraW5nU2Vz
c2lvbkJlZ2FuTm90aWZpY2F0aW9uOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFYVGV4dElu
cHV0TWFya2luZ1Nlc3Npb25FbmRlZDoKKyAgICAgICAgbWFjTm90aWZpY2F0aW9uID0gTlNBY2Nl
c3NpYmlsaXR5VGV4dElucHV0TWFya2luZ1Nlc3Npb25FbmRlZE5vdGlmaWNhdGlvbjsKKyAgICAg
ICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuOwogICAgIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL0FjY2Vzc2liaWxpdHlPYmplY3RN
YWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9BY2Nlc3NpYmlsaXR5T2Jq
ZWN0TWFjLm1tCmluZGV4IDQxMWMwNTI5OGJjYy4uNDA4MTU3NDljY2JjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9BY2Nlc3NpYmlsaXR5T2JqZWN0TWFjLm1t
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL0FjY2Vzc2liaWxpdHlPYmpl
Y3RNYWMubW0KQEAgLTY0NCwyMyArNjQ0LDMwIEBAIHN0YXRpYyB2b2lkIGF0dHJpYnV0ZWRTdHJp
bmdTZXRFbGVtZW50KE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcgKmF0dHJTdHJpbmcsIE5TCiAg
ICAgICAgIFthdHRyU3RyaW5nIGFkZEF0dHJpYnV0ZTphdHRyaWJ1dGUgdmFsdWU6KF9fYnJpZGdl
IGlkKWF4RWxlbWVudC5nZXQoKSByYW5nZTpyYW5nZV07CiB9CiAKLXN0YXRpYyB2b2lkIGF0dHJp
YnV0ZWRTdHJpbmdTZXRDb21wb3NpdGlvbkF0dHJpYnV0ZXMoTlNNdXRhYmxlQXR0cmlidXRlZFN0
cmluZyAqYXR0clN0cmluZywgTm9kZSYgbm9kZSkKK3N0YXRpYyB2b2lkIGF0dHJpYnV0ZWRTdHJp
bmdTZXRDb21wb3NpdGlvbkF0dHJpYnV0ZXMoTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyAqYXR0
clN0cmluZywgTm9kZSYgbm9kZSwgY29uc3QgU2ltcGxlUmFuZ2UmIHRleHRTaW1wbGVSYW5nZSkK
IHsKICNpZiBIQVZFKElOTElORV9QUkVESUNUSU9OUykKICAgICBhdXRvJiBlZGl0b3IgPSBub2Rl
LmRvY3VtZW50KCkuZWRpdG9yKCk7CiAgICAgaWYgKCZub2RlICE9IGVkaXRvci5jb21wb3NpdGlv
bk5vZGUoKSkKICAgICAgICAgcmV0dXJuOwogCisgICAgYXV0byBzY29wZSA9IG1ha2VSYW5nZVNl
bGVjdGluZ05vZGVDb250ZW50cyhub2RlKTsKKyAgICBhdXRvIHRleHRSYW5nZSA9IGNoYXJhY3Rl
clJhbmdlKHNjb3BlLCB0ZXh0U2ltcGxlUmFuZ2UpOworCiAgICAgYXV0byYgYW5ub3RhdGlvbnMg
PSBlZGl0b3IuY3VzdG9tQ29tcG9zaXRpb25Bbm5vdGF0aW9ucygpOwogICAgIGlmIChhdXRvIGl0
ID0gYW5ub3RhdGlvbnMuZmluZChOU1RleHRDb21wbGV0aW9uQXR0cmlidXRlTmFtZSk7IGl0ICE9
IGFubm90YXRpb25zLmVuZCgpKSB7Ci0gICAgICAgIGZvciAoYXV0byYgcmFuZ2UgOiBpdC0+dmFs
dWUpIHsKLSAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVkU3RyaW5nQ29udGFpbnNSYW5nZShhdHRy
U3RyaW5nLCByYW5nZSkpCi0gICAgICAgICAgICAgICAgYXR0cmlidXRlZFN0cmluZ1NldE51bWJl
cihhdHRyU3RyaW5nLCBOU0FjY2Vzc2liaWxpdHlUZXh0Q29tcGxldGlvbkF0dHJpYnV0ZSwgQFlF
UywgcmFuZ2UpOworICAgICAgICBmb3IgKGF1dG8mIGFubm90YXRpb25SYW5nZSA6IGl0LT52YWx1
ZSkgeworICAgICAgICAgICAgYXV0byBpbnRlcnNlY3Rpb25SYW5nZSA9IE5TSW50ZXJzZWN0aW9u
UmFuZ2UodGV4dFJhbmdlLCBhbm5vdGF0aW9uUmFuZ2UpOworICAgICAgICAgICAgaWYgKGludGVy
c2VjdGlvblJhbmdlLmxlbmd0aCkgeworICAgICAgICAgICAgICAgIGF1dG8gY29tcGxldGlvblJh
bmdlID0gTlNNYWtlUmFuZ2UoaW50ZXJzZWN0aW9uUmFuZ2UubG9jYXRpb24gLSB0ZXh0UmFuZ2Uu
bG9jYXRpb24sIGludGVyc2VjdGlvblJhbmdlLmxlbmd0aCk7CisgICAgICAgICAgICAgICAgYXR0
cmlidXRlZFN0cmluZ1NldE51bWJlcihhdHRyU3RyaW5nLCBOU0FjY2Vzc2liaWxpdHlUZXh0Q29t
cGxldGlvbkF0dHJpYnV0ZSwgQFlFUywgY29tcGxldGlvblJhbmdlKTsKKyAgICAgICAgICAgIH0K
ICAgICAgICAgfQogICAgIH0KICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGF0dHJTdHJpbmcpOwog
ICAgIFVOVVNFRF9QQVJBTShub2RlKTsKKyAgICBVTlVTRURfUEFSQU0odGV4dFNpbXBsZVJhbmdl
KTsKICNlbmRpZgogfQogCkBAIC03MTQsNyArNzIxLDcgQEAgdm9pZCBhdHRyaWJ1dGVkU3RyaW5n
U2V0U3BlbGxpbmcoTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyAqYXR0clN0cmluZywgTm9kZSYg
bm8KICAgICB9CiB9CiAKLVJldGFpblB0cjxOU0F0dHJpYnV0ZWRTdHJpbmc+IGF0dHJpYnV0ZWRT
dHJpbmdDcmVhdGUoTm9kZSogbm9kZSwgU3RyaW5nVmlldyB0ZXh0LCBBWENvcmVPYmplY3Q6OlNw
ZWxsQ2hlY2sgc3BlbGxDaGVjaykKK1JldGFpblB0cjxOU0F0dHJpYnV0ZWRTdHJpbmc+IGF0dHJp
YnV0ZWRTdHJpbmdDcmVhdGUoTm9kZSogbm9kZSwgU3RyaW5nVmlldyB0ZXh0LCBjb25zdCBTaW1w
bGVSYW5nZSYgdGV4dFJhbmdlLCBBWENvcmVPYmplY3Q6OlNwZWxsQ2hlY2sgc3BlbGxDaGVjaykK
IHsKICAgICBpZiAoIW5vZGUgfHwgIXRleHQubGVuZ3RoKCkpCiAgICAgICAgIHJldHVybiBuaWw7
CkBAIC03MzMsNyArNzQwLDcgQEAgUmV0YWluUHRyPE5TQXR0cmlidXRlZFN0cmluZz4gYXR0cmli
dXRlZFN0cmluZ0NyZWF0ZShOb2RlKiBub2RlLCBTdHJpbmdWaWV3IHRleHQKICAgICBhdHRyaWJ1
dGVkU3RyaW5nU2V0QmxvY2txdW90ZUxldmVsKHJlc3VsdC5nZXQoKSwgcmVuZGVyZXIuZ2V0KCks
IHJhbmdlKTsKICAgICBhdHRyaWJ1dGVkU3RyaW5nU2V0RXhwYW5kZWRUZXh0KHJlc3VsdC5nZXQo
KSwgcmVuZGVyZXIuZ2V0KCksIHJhbmdlKTsKICAgICBhdHRyaWJ1dGVkU3RyaW5nU2V0RWxlbWVu
dChyZXN1bHQuZ2V0KCksIE5TQWNjZXNzaWJpbGl0eUxpbmtUZXh0QXR0cmlidXRlLCBBY2Nlc3Np
YmlsaXR5T2JqZWN0OjphbmNob3JFbGVtZW50Rm9yTm9kZShub2RlKSwgcmFuZ2UpOwotICAgIGF0
dHJpYnV0ZWRTdHJpbmdTZXRDb21wb3NpdGlvbkF0dHJpYnV0ZXMocmVzdWx0LmdldCgpLCAqbm9k
ZSk7CisgICAgYXR0cmlidXRlZFN0cmluZ1NldENvbXBvc2l0aW9uQXR0cmlidXRlcyhyZXN1bHQu
Z2V0KCksICpub2RlLCB0ZXh0UmFuZ2UpOwogICAgIC8vIERvIHNwZWxsaW5nIGxhc3QgYmVjYXVz
ZSBpdCB0ZW5kcyB0byBicmVhayB1cCB0aGUgcmFuZ2UuCiAgICAgaWYgKHNwZWxsQ2hlY2sgPT0g
QVhDb3JlT2JqZWN0OjpTcGVsbENoZWNrOjpZZXMpIHsKICAgICAgICAgaWYgKEFYT2JqZWN0Q2Fj
aGU6OnNob3VsZFNwZWxsQ2hlY2soKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQmFzZS5oIGIvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJC
YXNlLmgKaW5kZXggMmM2MDY1MWRlNDY4Li5hZjAyZWI3ZGU1MmUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVy
QmFzZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2li
aWxpdHlPYmplY3RXcmFwcGVyQmFzZS5oCkBAIC01Myw3ICs1Myw3IEBAIHZvaWQgYXR0cmlidXRl
ZFN0cmluZ1NldE51bWJlcihOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nICosIE5TU3RyaW5nICos
IE5TTnVtYmVyCiB2b2lkIGF0dHJpYnV0ZWRTdHJpbmdTZXRGb250KE5TTXV0YWJsZUF0dHJpYnV0
ZWRTdHJpbmcgKiwgQ1RGb250UmVmLCBjb25zdCBOU1JhbmdlJik7CiB2b2lkIGF0dHJpYnV0ZWRT
dHJpbmdTZXRTcGVsbGluZyhOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nICosIE5vZGUmLCBTdHJp
bmdWaWV3LCBjb25zdCBOU1JhbmdlJik7CiB2b2lkIGF0dHJpYnV0ZWRTdHJpbmdTZXROZWVkc1Nw
ZWxsQ2hlY2soTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyAqLCBOb2RlJik7Ci1SZXRhaW5QdHI8
TlNBdHRyaWJ1dGVkU3RyaW5nPiBhdHRyaWJ1dGVkU3RyaW5nQ3JlYXRlKE5vZGUqLCBTdHJpbmdW
aWV3LCBBWENvcmVPYmplY3Q6OlNwZWxsQ2hlY2spOworUmV0YWluUHRyPE5TQXR0cmlidXRlZFN0
cmluZz4gYXR0cmlidXRlZFN0cmluZ0NyZWF0ZShOb2RlKiwgU3RyaW5nVmlldywgY29uc3QgU2lt
cGxlUmFuZ2UmLCBBWENvcmVPYmplY3Q6OlNwZWxsQ2hlY2spOwogfQogCiBAaW50ZXJmYWNlIFdl
YkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQmFzZSA6IE5TT2JqZWN0IHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RX
cmFwcGVyTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0KaW5kZXggMDA5N2FiMzk2MDU2Li5lNjI0MTQyMTMy
ZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tCkBAIC00ODgsNiAr
NDg4LDEwIEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogI2RlZmluZSBOU0FjY2Vzc2liaWxp
dHlUZXh0SW5wdXRNYXJrZWRSYW5nZUF0dHJpYnV0ZSBAIkFYVGV4dElucHV0TWFya2VkUmFuZ2Ui
CiAjZW5kaWYKIAorI2lmbmRlZiBOU0FjY2Vzc2liaWxpdHlUZXh0SW5wdXRNYXJrZWRUZXh0TWFy
a2VyUmFuZ2VBdHRyaWJ1dGUKKyNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5VGV4dElucHV0TWFya2Vk
VGV4dE1hcmtlclJhbmdlQXR0cmlidXRlIEAiQVhUZXh0SW5wdXRNYXJrZWRUZXh0TWFya2VyUmFu
Z2UiCisjZW5kaWYKKwogQGltcGxlbWVudGF0aW9uIFdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFw
cGVyCiAKIC0gKHZvaWQpZGV0YWNoCkBAIC05MTksNiArOTIzLDcgQEAgQUxMT1dfREVQUkVDQVRF
RF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAgICAgIE5TQWNjZXNzaWJpbGl0eUVkaXRhYmxlQW5j
ZXN0b3JBdHRyaWJ1dGUsCiAgICAgICAgIE5TQWNjZXNzaWJpbGl0eUhpZ2hlc3RFZGl0YWJsZUFu
Y2VzdG9yQXR0cmlidXRlLAogICAgICAgICBOU0FjY2Vzc2liaWxpdHlUZXh0SW5wdXRNYXJrZWRS
YW5nZUF0dHJpYnV0ZSwKKyAgICAgICAgTlNBY2Nlc3NpYmlsaXR5VGV4dElucHV0TWFya2VkVGV4
dE1hcmtlclJhbmdlQXR0cmlidXRlLAogICAgIF07CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
IHNwaW5CdXR0b25Db21tb25BdHRyaWJ1dGVzID0gW10gewogICAgICAgICBhdXRvIHRlbXBBcnJh
eSA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhBcnJheTphdHRyaWJ1
dGVzLmdldCgpLmdldCgpXSk7CkBAIC0yMjUzLDYgKzIyNTgsMTEgQEAgQUxMT1dfREVQUkVDQVRF
RF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAgICAgIHJldHVybiByYW5nZSA/IFtOU1ZhbHVlIHZh
bHVlV2l0aFJhbmdlOipyYW5nZV0gOiBuaWw7CiAgICAgfQogCisgICAgaWYgKFthdHRyaWJ1dGVO
YW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlUZXh0SW5wdXRNYXJrZWRUZXh0TWFy
a2VyUmFuZ2VBdHRyaWJ1dGVdKSB7CisgICAgICAgIGF1dG8gcmFuZ2UgPSBiYWNraW5nT2JqZWN0
LT50ZXh0SW5wdXRNYXJrZWRUZXh0TWFya2VyUmFuZ2UoKTsKKyAgICAgICAgcmV0dXJuIHJhbmdl
ID8gcmFuZ2UucGxhdGZvcm1EYXRhKCkuYnJpZGdpbmdBdXRvcmVsZWFzZSgpIDogbmlsOworICAg
IH0KKwogICAgIHJldHVybiBuaWw7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRWRpdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAppbmRl
eCA5NGQ5MzQ1MGJiMzAuLmZiZjhkOWZjNWJlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9FZGl0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNw
cApAQCAtMjE3NywxNCArMjE3NywxNCBAQCB2b2lkIEVkaXRvcjo6c2V0Q29tcG9zaXRpb24oY29u
c3QgU3RyaW5nJiB0ZXh0LCBTZXRDb21wb3NpdGlvbk1vZGUgbW9kZSkKICAgICBlbHNlCiAgICAg
ICAgIHNlbGVjdENvbXBvc2l0aW9uKCk7CiAKLSAgICBhdXRvKiBwcmV2aW91c0NvbXBvc2l0aW9u
Tm9kZSA9IGNvbXBvc2l0aW9uTm9kZSgpOworICAgIFJlZlB0ciBwcmV2aW91c0NvbXBvc2l0aW9u
Tm9kZSA9IG1fY29tcG9zaXRpb25Ob2RlOwogICAgIG1fY29tcG9zaXRpb25Ob2RlID0gbnVsbHB0
cjsKICAgICBtX2N1c3RvbUNvbXBvc2l0aW9uVW5kZXJsaW5lcy5jbGVhcigpOwogICAgIG1fY3Vz
dG9tQ29tcG9zaXRpb25IaWdobGlnaHRzLmNsZWFyKCk7CiAgICAgbV9jdXN0b21Db21wb3NpdGlv
bkFubm90YXRpb25zLmNsZWFyKCk7CiAKICAgICBpZiAoYXV0byogY2FjaGUgPSBtX2RvY3VtZW50
LmV4aXN0aW5nQVhPYmplY3RDYWNoZSgpOyBjYWNoZSAmJiBwcmV2aW91c0NvbXBvc2l0aW9uTm9k
ZSkKLSAgICAgICAgY2FjaGUtPm9uVGV4dENvbXBvc2l0aW9uQ2hhbmdlKCpwcmV2aW91c0NvbXBv
c2l0aW9uTm9kZSk7CisgICAgICAgIGNhY2hlLT5vblRleHRDb21wb3NpdGlvbkNoYW5nZSgqcHJl
dmlvdXNDb21wb3NpdGlvbk5vZGUsIEFYT2JqZWN0Q2FjaGU6OkNvbXBvc2l0aW9uU3RhdGU6OkVu
ZGVkLCBmYWxzZSk7CiAKICAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5pc05vbmUoKSkK
ICAgICAgICAgcmV0dXJuOwpAQCAtMjI4Miw3ICsyMjgyLDcgQEAgdm9pZCBFZGl0b3I6OnNldENv
bXBvc2l0aW9uKGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgVmVjdG9yPENvbXBvc2l0aW9uVW5k
ZXJsaW4KICAgICAgICAgICAgIHRhcmdldC0+ZGlzcGF0Y2hFdmVudChDb21wb3NpdGlvbkV2ZW50
OjpjcmVhdGUoZXZlbnROYW1lcygpLmNvbXBvc2l0aW9uZW5kRXZlbnQsIGRvY3VtZW50KCkud2lu
ZG93UHJveHkoKSwgdGV4dCkpOwogICAgIH0KIAotICAgIGF1dG8qIHByZXZpb3VzQ29tcG9zaXRp
b25Ob2RlID0gY29tcG9zaXRpb25Ob2RlKCk7CisgICAgUmVmUHRyIHByZXZpb3VzQ29tcG9zaXRp
b25Ob2RlID0gbV9jb21wb3NpdGlvbk5vZGU7CiAgICAgbV9jb21wb3NpdGlvbk5vZGUgPSBudWxs
cHRyOwogICAgIG1fY3VzdG9tQ29tcG9zaXRpb25VbmRlcmxpbmVzLmNsZWFyKCk7CiAgICAgbV9j
dXN0b21Db21wb3NpdGlvbkhpZ2hsaWdodHMuY2xlYXIoKTsKQEAgLTIzMzAsMTEgKzIzMzAsMTQg
QEAgdm9pZCBFZGl0b3I6OnNldENvbXBvc2l0aW9uKGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3Qg
VmVjdG9yPENvbXBvc2l0aW9uVW5kZXJsaW4KICAgICB9CiAKICAgICBpZiAoYXV0byogY2FjaGUg
PSBtX2RvY3VtZW50LmV4aXN0aW5nQVhPYmplY3RDYWNoZSgpKSB7Ci0gICAgICAgIGF1dG8qIGN1
cnJlbnRDb21wb3NpdGlvbk5vZGUgPSBjb21wb3NpdGlvbk5vZGUoKTsKLSAgICAgICAgaWYgKHBy
ZXZpb3VzQ29tcG9zaXRpb25Ob2RlICYmIHByZXZpb3VzQ29tcG9zaXRpb25Ob2RlICE9IGN1cnJl
bnRDb21wb3NpdGlvbk5vZGUpCi0gICAgICAgICAgICBjYWNoZS0+b25UZXh0Q29tcG9zaXRpb25D
aGFuZ2UoKnByZXZpb3VzQ29tcG9zaXRpb25Ob2RlKTsKLSAgICAgICAgaWYgKGN1cnJlbnRDb21w
b3NpdGlvbk5vZGUpCi0gICAgICAgICAgICBjYWNoZS0+b25UZXh0Q29tcG9zaXRpb25DaGFuZ2Uo
KmN1cnJlbnRDb21wb3NpdGlvbk5vZGUpOworICAgICAgICBpZiAocHJldmlvdXNDb21wb3NpdGlv
bk5vZGUgJiYgcHJldmlvdXNDb21wb3NpdGlvbk5vZGUgIT0gbV9jb21wb3NpdGlvbk5vZGUpIHsK
KyAgICAgICAgICAgIGF1dG8gc3RhdGUgPSBtX2NvbXBvc2l0aW9uTm9kZSA/IEFYT2JqZWN0Q2Fj
aGU6OkNvbXBvc2l0aW9uU3RhdGU6OkluUHJvZ3Jlc3MgOiBBWE9iamVjdENhY2hlOjpDb21wb3Np
dGlvblN0YXRlOjpFbmRlZDsKKyAgICAgICAgICAgIGNhY2hlLT5vblRleHRDb21wb3NpdGlvbkNo
YW5nZSgqcHJldmlvdXNDb21wb3NpdGlvbk5vZGUsIHN0YXRlLCB0cnVlKTsKKyAgICAgICAgfQor
ICAgICAgICBpZiAobV9jb21wb3NpdGlvbk5vZGUpIHsKKyAgICAgICAgICAgIGF1dG8gc3RhdGUg
PSBwcmV2aW91c0NvbXBvc2l0aW9uTm9kZSA/IEFYT2JqZWN0Q2FjaGU6OkNvbXBvc2l0aW9uU3Rh
dGU6OkluUHJvZ3Jlc3MgOiBBWE9iamVjdENhY2hlOjpDb21wb3NpdGlvblN0YXRlOjpTdGFydGVk
OworICAgICAgICAgICAgY2FjaGUtPm9uVGV4dENvbXBvc2l0aW9uQ2hhbmdlKCptX2NvbXBvc2l0
aW9uTm9kZSwgc3RhdGUsIHRydWUpOworICAgICAgICB9CiAgICAgfQogCiAjaWYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkgICAgICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9U
eXBpbmdDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5j
cHAKaW5kZXggYzc4OWRmNmI4ZDBkLi4zOGYxMTRlOTdhY2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9UeXBpbmdDb21tYW5kLmNwcApAQCAtMjUyLDcgKzI1MiwxMiBAQCB2b2lkIFR5cGluZ0Nv
bW1hbmQ6Omluc2VydFRleHQoRG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBTdHJpbmcmIHRleHQs
IGNvbnN0IFZpcwogICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+c2V0Q29tcG9zaXRpb25UeXBl
KGNvbXBvc2l0aW9uVHlwZSk7CiAgICAgICAgIGxhc3RUeXBpbmdDb21tYW5kLT5zZXRTaG91bGRS
ZXRhaW5BdXRvY29ycmVjdGlvbkluZGljYXRvcihvcHRpb25zLmNvbnRhaW5zKE9wdGlvbjo6UmV0
YWluQXV0b2NvcnJlY3Rpb25JbmRpY2F0b3IpKTsKICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQt
PnNldFNob3VsZFByZXZlbnRTcGVsbENoZWNraW5nKG9wdGlvbnMuY29udGFpbnMoT3B0aW9uOjpQ
cmV2ZW50U3BlbGxDaGVja2luZykpOwotICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+aW5zZXJ0
VGV4dEFuZE5vdGlmeUFjY2Vzc2liaWxpdHkobmV3VGV4dCwgb3B0aW9ucy5jb250YWlucyhPcHRp
b246OlNlbGVjdEluc2VydGVkVGV4dCkpOworI2lmIEhBVkUoSU5MSU5FX1BSRURJQ1RJT05TKQor
ICAgICAgICBpZiAoY29tcG9zaXRpb25UeXBlICE9IFRleHRDb21wb3NpdGlvblR5cGU6Ok5vbmUp
CisgICAgICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+aW5zZXJ0VGV4dChuZXdUZXh0LCBvcHRp
b25zLmNvbnRhaW5zKE9wdGlvbjo6U2VsZWN0SW5zZXJ0ZWRUZXh0KSk7CisgICAgICAgIGVsc2UK
KyNlbmRpZgorICAgICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPmluc2VydFRleHRBbmROb3Rp
ZnlBY2Nlc3NpYmlsaXR5KG5ld1RleHQsIG9wdGlvbnMuY29udGFpbnMoT3B0aW9uOjpTZWxlY3RJ
bnNlcnRlZFRleHQpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvVG9v
bHMvRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5jcHAgYi9Ub29scy9EdW1w
UmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmNwcAppbmRleCAyN2JjYmRhOWU3NTgu
LjhjY2IyMzQwMmRkNyAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJp
bGl0eVVJRWxlbWVudC5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0
eVVJRWxlbWVudC5jcHAKQEAgLTg0Niw2ICs4NDYsMTEgQEAgc3RhdGljIEpTVmFsdWVSZWYgaW5z
ZXJ0VGV4dENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlv
biwKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VCb29sZWFuKGNvbnRleHQsIHRvQVhFbGVtZW50KHRo
aXNPYmplY3QpLT5pbnNlcnRUZXh0KHRleHQuZ2V0KCkpKTsKIH0KIAorc3RhdGljIEpTVmFsdWVS
ZWYgdGV4dElucHV0TWFya2VkVGV4dE1hcmtlclJhbmdlQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNv
bnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXpl
X3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJl
ZiogZXhjZXB0aW9uKQoreworICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdl
OjptYWtlSlNBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlKGNvbnRleHQsIHRvQVhFbGVtZW50
KHRoaXNPYmplY3QpLT50ZXh0SW5wdXRNYXJrZWRUZXh0TWFya2VyUmFuZ2UoKSk7Cit9CisKIHN0
YXRpYyBKU1ZhbHVlUmVmIGF0dHJpYnV0ZWRTdHJpbmdGb3JUZXh0TWFya2VyUmFuZ2VDb250YWlu
c0F0dHJpYnV0ZUNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5j
dGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0
IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsKICAgICBB
Y2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlKiBtYXJrZXJSYW5nZSA9IDA7CkBAIC0xNzc5LDYg
KzE3ODQsMTEgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjppbnNlcnRUZXh0KEpTU3Ry
aW5nUmVmKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAorQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJS
YW5nZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0ZXh0SW5wdXRNYXJrZWRUZXh0TWFya2VyUmFu
Z2UoKSBjb25zdAoreworICAgIHJldHVybiBudWxscHRyOworfQorCiBpbnQgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6dGV4dE1hcmtlclJhbmdlTGVuZ3RoKEFjY2Vzc2liaWxpdHlUZXh0TWFya2Vy
UmFuZ2UqKQogewogICAgIHJldHVybiAwOwpAQCAtMjEzMyw2ICsyMTQzLDcgQEAgSlNDbGFzc1Jl
ZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpnZXRKU0NsYXNzKCkKICAgICAgICAgeyAibWlzc3Bl
bGxpbmdUZXh0TWFya2VyUmFuZ2UiLCBtaXNzcGVsbGluZ1RleHRNYXJrZXJSYW5nZUNhbGxiYWNr
LCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250
RGVsZXRlIH0sCiAgICAgICAgIHsgInRleHRNYXJrZXJSYW5nZUZvckVsZW1lbnQiLCB0ZXh0TWFy
a2VyUmFuZ2VGb3JFbGVtZW50Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkg
fCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAic2VsZWN0ZWRU
ZXh0TWFya2VyUmFuZ2UiLCBzZWxlY3RlZFRleHRNYXJrZXJSYW5nZUNhbGxiYWNrLCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0s
CisgICAgICAgIHsgInRleHRJbnB1dE1hcmtlZFRleHRNYXJrZXJSYW5nZSIsIHRleHRJbnB1dE1h
cmtlZFRleHRNYXJrZXJSYW5nZUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5
IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgInJlc2V0U2Vs
ZWN0ZWRUZXh0TWFya2VyUmFuZ2UiLCByZXNldFNlbGVjdGVkVGV4dE1hcmtlclJhbmdlQ2FsbGJh
Y2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURv
bnREZWxldGUgfSwKICAgICAgICAgeyAicmVwbGFjZVRleHRJblJhbmdlIiwgcmVwbGFjZVRleHRJ
blJhbmdlQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAiaW5zZXJ0VGV4dCIsIGluc2VydFRl
eHRDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0
cmlidXRlRG9udERlbGV0ZSB9LApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudC5oIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0
eVVJRWxlbWVudC5oCmluZGV4IDRkZjk3MDllNGE4Zi4uYWQ4NzRiZGYyNjEzIDEwMDY0NAotLS0g
YS9Ub29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmgKKysrIGIvVG9v
bHMvRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oCkBAIC0zMDAsNiArMzAw
LDcgQEAgcHVibGljOgogICAgIGJvb2wgc2V0U2VsZWN0ZWRUZXh0TWFya2VyUmFuZ2UoQWNjZXNz
aWJpbGl0eVRleHRNYXJrZXJSYW5nZSopOwogICAgIGJvb2wgcmVwbGFjZVRleHRJblJhbmdlKEpT
U3RyaW5nUmVmLCBpbnQgcG9zaXRpb24sIGludCBsZW5ndGgpOwogICAgIGJvb2wgaW5zZXJ0VGV4
dChKU1N0cmluZ1JlZik7CisgICAgQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZSB0ZXh0SW5w
dXRNYXJrZWRUZXh0TWFya2VyUmFuZ2UoKSBjb25zdDsKIAogICAgIEpTUmV0YWluUHRyPEpTU3Ry
aW5nUmVmPiBzdHJpbmdGb3JUZXh0TWFya2VyUmFuZ2UoQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJS
YW5nZSopOwogICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBhdHRyaWJ1dGVkU3RyaW5nRm9y
VGV4dE1hcmtlclJhbmdlKEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2UqKTsKZGlmZiAtLWdp
dCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2lvcy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50SU9TLm1t
IGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvaW9zL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRJT1MubW0K
aW5kZXggMGZjYTQ4OTRhZmVkLi44ZDc2ODI4OGFkYjUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL2lvcy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50SU9TLm1tCisrKyBiL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL2lvcy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50SU9TLm1tCkBAIC00OTksNiAr
NDk5LDExIEBAIHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cmVzZXRTZWxlY3RlZFRleHRN
YXJrZXJSYW5nZSgpCiB7CiB9CiAKK0FjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2UgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6dGV4dElucHV0TWFya2VkVGV4dE1hcmtlclJhbmdlKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwogaW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OnRleHRNYXJrZXJSYW5nZUxlbmd0aChBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlKiByYW5n
ZSkKIHsKICAgICBpZCB0ZXh0TWFya2VycyA9IHJhbmdlLT5wbGF0Zm9ybVRleHRNYXJrZXJSYW5n
ZSgpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2liaWxpdHlV
SUVsZW1lbnRNYWMubW0gYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudE1hYy5tbQppbmRleCA0YWU0Njk4NjU0NDQuLjE5OGY0ZjYzMmE4YSAxMDA2NDQKLS0t
IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRNYWMubW0K
KysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRNYWMu
bW0KQEAgLTc5LDYgKzc5LDEwIEBACiAjZGVmaW5lIE5TQWNjZXNzaWJpbGl0eVRleHRJbnB1dE1h
cmtlZFJhbmdlQXR0cmlidXRlIEAiQVhUZXh0SW5wdXRNYXJrZWRSYW5nZSIKICNlbmRpZgogCisj
aWZuZGVmIE5TQWNjZXNzaWJpbGl0eVRleHRJbnB1dE1hcmtlZFRleHRNYXJrZXJSYW5nZUF0dHJp
YnV0ZQorI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlUZXh0SW5wdXRNYXJrZWRUZXh0TWFya2VyUmFu
Z2VBdHRyaWJ1dGUgQCJBWFRleHRJbnB1dE1hcmtlZFRleHRNYXJrZXJSYW5nZSIKKyNlbmRpZgor
CiB0eXBlZGVmIHZvaWQgKCpBWFBvc3RlZE5vdGlmaWNhdGlvbkNhbGxiYWNrKShpZCBlbGVtZW50
LCBOU1N0cmluZyogbm90aWZpY2F0aW9uLCB2b2lkKiBjb250ZXh0KTsKIAogQGludGVyZmFjZSBO
U09iamVjdCAoV2ViS2l0QWNjZXNzaWJpbGl0eUFkZGl0aW9ucykKQEAgLTE3Miw3ICsxNzYsOSBA
QCBzdGF0aWMgTlNTdHJpbmcqIGF0dHJpYnV0ZXNPZkVsZW1lbnQoaWQgYWNjZXNzaWJpbGl0eU9i
amVjdCkKICAgICAgICAgaWQgdmFsdWVPYmplY3QgPSBbYWNjZXNzaWJpbGl0eU9iamVjdCBhY2Nl
c3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6YXR0cmlidXRlXTsKICAgICAgICAgTlNTdHJpbmcqIHZh
bHVlID0gZGVzY3JpcHRpb25PZlZhbHVlKHZhbHVlT2JqZWN0LCBhY2Nlc3NpYmlsaXR5T2JqZWN0
KTsKIAotICAgICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmls
aXR5VGV4dElucHV0TWFya2VkUmFuZ2VBdHRyaWJ1dGVdICYmICF2YWx1ZSkKKyAgICAgICAgaWYg
KCF2YWx1ZQorICAgICAgICAgICAgJiYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOk5TQWNj
ZXNzaWJpbGl0eVRleHRJbnB1dE1hcmtlZFJhbmdlQXR0cmlidXRlXQorICAgICAgICAgICAgICAg
IHx8IFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVRleHRJbnB1dE1h
cmtlZFRleHRNYXJrZXJSYW5nZUF0dHJpYnV0ZV0pKQogICAgICAgICAgICAgY29udGludWU7CiAK
ICAgICAgICAgW2F0dHJpYnV0ZXNTdHJpbmcgYXBwZW5kRm9ybWF0OkAiJUA6ICVAXG4iLCBhdHRy
aWJ1dGUsIHZhbHVlXTsKQEAgLTE3NTksNiArMTc2NSwxNiBAQCBib29sIEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6Omluc2VydFRleHQoSlNTdHJpbmdSZWYgdGV4dCkKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKK0FjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2UgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6dGV4dElucHV0TWFya2VkVGV4dE1hcmtlclJhbmdlKCkgY29uc3QKK3sKKyAgICBCRUdJTl9B
WF9PQkpDX0VYQ0VQVElPTlMKKyAgICBpZCB0ZXh0TWFya2VyUmFuZ2UgPSBbbV9lbGVtZW50IGFj
Y2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTpOU0FjY2Vzc2liaWxpdHlUZXh0SW5wdXRNYXJrZWRU
ZXh0TWFya2VyUmFuZ2VBdHRyaWJ1dGVdOworICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5VGV4dE1h
cmtlclJhbmdlKHRleHRNYXJrZXJSYW5nZSk7CisgICAgRU5EX0FYX09CSkNfRVhDRVBUSU9OUwor
CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKIGludCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0
ZXh0TWFya2VyUmFuZ2VMZW5ndGgoQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZSogcmFuZ2Up
CiB7CiAgICAgQkVHSU5fQVhfT0JKQ19FWENFUFRJT05TCmRpZmYgLS1naXQgYS9Ub29scy9XZWJL
aXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuY3BwIGIv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9BY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50LmNwcAppbmRleCBlZmZhMWI1NjU3OTYuLmYzODYwYWQ2ZWU0YSAxMDA2NDQKLS0tIGEvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50
LmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0FjY2Vzc2li
aWxpdHlVSUVsZW1lbnQuY3BwCkBAIC0xMDksNiArMTA5LDcgQEAgaW50IEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmxpbmVJbmRleEZvclRleHRNYXJrZXIoQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIq
KSBjb24KIFJlZlB0cjxBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlPiBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50Ojp0ZXh0TWFya2VyUmFuZ2VGb3JSYW5nZSh1bnNpZ25lZCwgdW5zaWduZWQpIHsg
cmV0dXJuIG51bGxwdHI7IH0KIFJlZlB0cjxBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlPiBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzZWxlY3RlZFRleHRNYXJrZXJSYW5nZSgpIHsgcmV0dXJu
IG51bGxwdHI7IH0KIHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cmVzZXRTZWxlY3RlZFRl
eHRNYXJrZXJSYW5nZSgpIHsgfQorUmVmUHRyPEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2U+
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRleHRJbnB1dE1hcmtlZFRleHRNYXJrZXJSYW5nZSgp
IGNvbnN0IHsgcmV0dXJuIG51bGxwdHI7IH0KIHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
c2V0Qm9vbEF0dHJpYnV0ZVZhbHVlKEpTU3RyaW5nUmVmLCBib29sKSB7IH0KIHZvaWQgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6c2V0VmFsdWUoSlNTdHJpbmdSZWYpIHsgfQogSlNWYWx1ZVJlZiBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzZWFyY2hUZXh0V2l0aENyaXRlcmlhKEpTQ29udGV4dFJl
ZiwgSlNWYWx1ZVJlZiwgSlNTdHJpbmdSZWYsIEpTU3RyaW5nUmVmKSB7IHJldHVybiBudWxscHRy
OyB9CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0Fj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQuaCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRC
dW5kbGUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oCmluZGV4IDczODRiOTExODhmMC4uNDRmM2M1
NzE4ODE0IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxl
L0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaApAQCAtMzM5LDYgKzMzOSw3IEBA
IHB1YmxpYzoKICAgICB2b2lkIHJlc2V0U2VsZWN0ZWRUZXh0TWFya2VyUmFuZ2UoKTsKICAgICBi
b29sIHJlcGxhY2VUZXh0SW5SYW5nZShKU1N0cmluZ1JlZiwgaW50IHBvc2l0aW9uLCBpbnQgbGVu
Z3RoKTsKICAgICBib29sIGluc2VydFRleHQoSlNTdHJpbmdSZWYpOworICAgIFJlZlB0cjxBY2Nl
c3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlPiB0ZXh0SW5wdXRNYXJrZWRUZXh0TWFya2VyUmFuZ2Uo
KSBjb25zdDsKICAgICBSZWZQdHI8QWNjZXNzaWJpbGl0eVRleHRNYXJrZXI+IHN0YXJ0VGV4dE1h
cmtlckZvclRleHRNYXJrZXJSYW5nZShBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlKik7CiAg
ICAgUmVmUHRyPEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyPiBlbmRUZXh0TWFya2VyRm9yVGV4dE1h
cmtlclJhbmdlKEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2UqKTsKICAgICBSZWZQdHI8QWNj
ZXNzaWJpbGl0eVRleHRNYXJrZXI+IGVuZFRleHRNYXJrZXJGb3JCb3VuZHMoaW50IHgsIGludCB5
LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmlkbCBi
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvQWNjZXNzaWJp
bGl0eVVJRWxlbWVudC5pZGwKaW5kZXggYjEwMjlkMzE2NmU4Li45MjJlMTI0MmNjYzAgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudC5pZGwKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9Jbmpl
Y3RlZEJ1bmRsZS9CaW5kaW5ncy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmlkbApAQCAtMjQxLDYg
KzI0MSw3IEBACiAgICAgdW5kZWZpbmVkIHJlc2V0U2VsZWN0ZWRUZXh0TWFya2VyUmFuZ2UoKTsK
ICAgICBib29sZWFuIHJlcGxhY2VUZXh0SW5SYW5nZShET01TdHJpbmcgc3RyaW5nLCBsb25nIHBv
c2l0aW9uLCBsb25nIGxlbmd0aCk7CiAgICAgYm9vbGVhbiBpbnNlcnRUZXh0KERPTVN0cmluZyB0
ZXh0KTsKKyAgICBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlIHRleHRJbnB1dE1hcmtlZFRl
eHRNYXJrZXJSYW5nZSgpOwogICAgIEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyIHN0YXJ0VGV4dE1h
cmtlckZvclRleHRNYXJrZXJSYW5nZShBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlIHJhbmdl
KTsKICAgICBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciBlbmRUZXh0TWFya2VyRm9yVGV4dE1hcmtl
clJhbmdlKEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2UgcmFuZ2UpOwogICAgIEFjY2Vzc2li
aWxpdHlUZXh0TWFya2VyIGVuZFRleHRNYXJrZXJGb3JCb3VuZHMobG9uZyB4LCBsb25nIHksIGxv
bmcgd2lkdGgsIGxvbmcgaGVpZ2h0KTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvSW5qZWN0ZWRCdW5kbGUvbWFjL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRNYWMubW0gYi9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL21hYy9BY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50TWFjLm1tCmluZGV4IDJiNDNlZWYzYmI2OC4uMjE5YjdhOTUzMjg0IDEwMDY0NAotLS0gYS9U
b29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL21hYy9BY2Nlc3NpYmlsaXR5VUlF
bGVtZW50TWFjLm1tCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUv
bWFjL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRNYWMubW0KQEAgLTg1LDYgKzg1LDEwIEBACiAjZGVm
aW5lIE5TQWNjZXNzaWJpbGl0eVRleHRJbnB1dE1hcmtlZFJhbmdlQXR0cmlidXRlIEAiQVhUZXh0
SW5wdXRNYXJrZWRSYW5nZSIKICNlbmRpZgogCisjaWZuZGVmIE5TQWNjZXNzaWJpbGl0eVRleHRJ
bnB1dE1hcmtlZFRleHRNYXJrZXJSYW5nZUF0dHJpYnV0ZQorI2RlZmluZSBOU0FjY2Vzc2liaWxp
dHlUZXh0SW5wdXRNYXJrZWRUZXh0TWFya2VyUmFuZ2VBdHRyaWJ1dGUgQCJBWFRleHRJbnB1dE1h
cmtlZFRleHRNYXJrZXJSYW5nZSIKKyNlbmRpZgorCiB0eXBlZGVmIHZvaWQgKCpBWFBvc3RlZE5v
dGlmaWNhdGlvbkNhbGxiYWNrKShpZCBlbGVtZW50LCBOU1N0cmluZyogbm90aWZpY2F0aW9uLCB2
b2lkKiBjb250ZXh0KTsKIAogQGludGVyZmFjZSBOU09iamVjdCAoV2ViS2l0QWNjZXNzaWJpbGl0
eUFkZGl0aW9ucykKQEAgLTYzMyw3ICs2MzcsOSBAQCBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4g
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YWxsQXR0cmlidXRlcygpCiAKICAgICAgICAgYXV0byB2
YWx1ZSA9IGRlc2NyaXB0aW9uT2ZWYWx1ZShhdHRyaWJ1dGVWYWx1ZShhdHRyaWJ1dGUpLmdldCgp
KTsKIAotICAgICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmls
aXR5VGV4dElucHV0TWFya2VkUmFuZ2VBdHRyaWJ1dGVdICYmICF2YWx1ZSkKKyAgICAgICAgaWYg
KCF2YWx1ZQorICAgICAgICAgICAgJiYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOk5TQWNj
ZXNzaWJpbGl0eVRleHRJbnB1dE1hcmtlZFJhbmdlQXR0cmlidXRlXQorICAgICAgICAgICAgICAg
IHx8IFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVRleHRJbnB1dE1h
cmtlZFRleHRNYXJrZXJSYW5nZUF0dHJpYnV0ZV0pKQogICAgICAgICAgICAgY29udGludWU7CiAK
ICAgICAgICAgW3ZhbHVlcyBhcHBlbmRGb3JtYXQ6QCIlQDogJUBcbiIsIGF0dHJpYnV0ZSwgdmFs
dWUuZ2V0KCldOwpAQCAtMjAxMiw2ICsyMDE4LDE2IEBAIHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6cmVzZXRTZWxlY3RlZFRleHRNYXJrZXJSYW5nZSgpCiAgICAgc2V0QXR0cmlidXRlVmFs
dWUobV9lbGVtZW50LmdldEF1dG9yZWxlYXNlZCgpLCBOU0FjY2Vzc2liaWxpdHlTZWxlY3RlZFRl
eHRNYXJrZXJSYW5nZUF0dHJpYnV0ZSwgdGV4dE1hcmtlclJhbmdlLmdldCgpLCB0cnVlKTsKIH0K
IAorUmVmUHRyPEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2U+IEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OnRleHRJbnB1dE1hcmtlZFRleHRNYXJrZXJSYW5nZSgpIGNvbnN0Cit7CisgICAgQkVH
SU5fQVhfT0JKQ19FWENFUFRJT05TCisgICAgYXV0byB0ZXh0TWFya2VyUmFuZ2UgPSBhdHRyaWJ1
dGVWYWx1ZShOU0FjY2Vzc2liaWxpdHlUZXh0SW5wdXRNYXJrZWRUZXh0TWFya2VyUmFuZ2VBdHRy
aWJ1dGUpOworICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlOjpjcmVhdGUo
dGV4dE1hcmtlclJhbmdlLmdldCgpKTsKKyAgICBFTkRfQVhfT0JKQ19FWENFUFRJT05TCisKKyAg
ICByZXR1cm4gbnVsbHB0cjsKK30KKwogUmVmUHRyPEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyPiBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdGFydFRleHRNYXJrZXJGb3JUZXh0TWFya2VyUmFuZ2Uo
QWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZSogcmFuZ2UpCiB7CiAgICAgaWYgKCFyYW5nZSkK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL2F0dHJpYnV0ZWQtc3Ry
aW5nL2F0dHJpYnV0ZWQtc3RyaW5nLWhhcy1jb21wbGV0aW9uLWFubm90YXRpb24uaHRtbCBiL0xh
eW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL2F0dHJpYnV0ZWQtc3RyaW5nL2F0dHJpYnV0ZWQt
c3RyaW5nLWhhcy1jb21wbGV0aW9uLWFubm90YXRpb24uaHRtbAppbmRleCA3NmU0ZTIzZGI1ZTIu
LmY1MDBmZTBmNTI3ZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMv
YXR0cmlidXRlZC1zdHJpbmcvYXR0cmlidXRlZC1zdHJpbmctaGFzLWNvbXBsZXRpb24tYW5ub3Rh
dGlvbi5odG1sCisrKyBiL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL2F0dHJpYnV0ZWQt
c3RyaW5nL2F0dHJpYnV0ZWQtc3RyaW5nLWhhcy1jb21wbGV0aW9uLWFubm90YXRpb24uaHRtbApA
QCAtMTMsMTUgKzEzLDE3IEBACiAgICAgICAgICAgICB2YXIgZWxlbWVudCA9IGFjY2Vzc2liaWxp
dHlDb250cm9sbGVyLmFjY2Vzc2libGVFbGVtZW50QnlJZCgiZWRpdGFibGUiKTsKIAogICAgICAg
ICAgICAgLy8gVGVzdCB3aXRoIGNvbXBvc2l0aW9uIGFuZCBubyBhdHRyaWJ1dGVzCi0gICAgICAg
ICAgICB0ZXh0SW5wdXRDb250cm9sbGVyLnNldE1hcmtlZFRleHQoInRlc3RpbmciKTsKLSAgICAg
ICAgICAgIHZhciBhdHRyU3RyaW5nID0gZWxlbWVudC5hdHRyaWJ1dGVkU3RyaW5nRm9yUmFuZ2Uo
MCwgNyk7CisgICAgICAgICAgICB0ZXh0SW5wdXRDb250cm9sbGVyLnNldE1hcmtlZFRleHQoInRl
c3QiKTsKKyAgICAgICAgICAgIHZhciBhdHRyU3RyaW5nID0gZWxlbWVudC5hdHRyaWJ1dGVkU3Ry
aW5nRm9yUmFuZ2UoMCwgNCk7CiAgICAgICAgICAgICBzaG91bGRCZSgiYXR0clN0cmluZy5pbmRl
eE9mKCdBWFRleHRDb21wbGV0aW9uID0gMScpIiwgIi0xIik7CiAKICAgICAgICAgICAgIC8vIFRl
c3Qgd2l0aCBjb21wb3NpdGlvbiBhbmQgYXR0cmlidXRlcwotICAgICAgICAgICAgdGV4dElucHV0
Q29udHJvbGxlci5zZXRNYXJrZWRUZXh0KCJmYXZvcml0ZSIsIDAsIDgsIGZhbHNlLCB1bmRlZmlu
ZWQsIFsKLSAgICAgICAgICAgICAgICB7IGZyb206ICI0IiwgbGVuZ3RoOiAiNCIsIGFubm90YXRp
b246ICJOU1RleHRDb21wbGV0aW9uIiB9CisgICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gIiBt
ZXNzYWdlIjsKKyAgICAgICAgICAgIHRleHRJbnB1dENvbnRyb2xsZXIudW5tYXJrVGV4dCgpOwor
ICAgICAgICAgICAgdGV4dElucHV0Q29udHJvbGxlci5zZXRNYXJrZWRUZXh0KG1lc3NhZ2UsIDQs
IG1lc3NhZ2UubGVuZ3RoLCBmYWxzZSwgdW5kZWZpbmVkLCBbCisgICAgICAgICAgICAgICAgeyBm
cm9tOiAiNCIsIGxlbmd0aDogbWVzc2FnZS5sZW5ndGgsIGFubm90YXRpb246ICJOU1RleHRDb21w
bGV0aW9uIiB9CiAgICAgICAgICAgICBdKTsKLSAgICAgICAgICAgIGF0dHJTdHJpbmcgPSBlbGVt
ZW50LmF0dHJpYnV0ZWRTdHJpbmdGb3JSYW5nZSgwLCA4KTsKKyAgICAgICAgICAgIGF0dHJTdHJp
bmcgPSBlbGVtZW50LmF0dHJpYnV0ZWRTdHJpbmdGb3JSYW5nZSgwLCA0ICsgbWVzc2FnZS5sZW5n
dGgpOwogICAgICAgICAgICAgc2hvdWxkQmVUcnVlKCJhdHRyU3RyaW5nLmluZGV4T2YoJ0FYVGV4
dENvbXBsZXRpb24gPSAxJykgIT0gLTEiKTsKICAgICAgICAgfQogICAgIDwvc2NyaXB0PgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvdGV4dC1pbnB1dC1tYXJrZWQt
cmFuZ2UtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvdGV4dC1p
bnB1dC1tYXJrZWQtcmFuZ2UtZXhwZWN0ZWQudHh0CmluZGV4IDEzMzAyNmEyODk4My4uNDY1Zjgz
NWM0ZjA2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy90ZXh0LWlu
cHV0LW1hcmtlZC1yYW5nZS1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvYWNjZXNzaWJp
bGl0eS9tYWMvdGV4dC1pbnB1dC1tYXJrZWQtcmFuZ2UtZXhwZWN0ZWQudHh0CkBAIC02LDcgKzYs
NyBAQCBPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2Vz
LCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURQogUEFTUyAhZWxlbWVudC50ZXh0SW5wdXRNYXJr
ZWRSYW5nZSBpcyB0cnVlCiBQQVNTIGVsZW1lbnQudGV4dElucHV0TWFya2VkUmFuZ2UgaXMgJ3sw
LCA0fScKIFBBU1MgIWVsZW1lbnQudGV4dElucHV0TWFya2VkUmFuZ2UgaXMgdHJ1ZQotUEFTUyBl
bGVtZW50LnRleHRJbnB1dE1hcmtlZFJhbmdlIGlzICd7MCwgNX0nCitQQVNTIGVsZW1lbnQudGV4
dElucHV0TWFya2VkUmFuZ2UgaXMgJ3sxLCA1fScKIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlz
IHRydWUKIAogVEVTVCBDT01QTEVURQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvYWNjZXNzaWJp
bGl0eS9tYWMvdGV4dC1pbnB1dC1tYXJrZWQtcmFuZ2UuaHRtbCBiL0xheW91dFRlc3RzL2FjY2Vz
c2liaWxpdHkvbWFjL3RleHQtaW5wdXQtbWFya2VkLXJhbmdlLmh0bWwKaW5kZXggOGU5OGQ2MGIz
NmIyLi4zODA0MDU0Y2ZlYWUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkv
bWFjL3RleHQtaW5wdXQtbWFya2VkLXJhbmdlLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvYWNjZXNz
aWJpbGl0eS9tYWMvdGV4dC1pbnB1dC1tYXJrZWQtcmFuZ2UuaHRtbApAQCAtMTEsMTIgKzExLDE1
IEBACiAgICAgICAgIGlmICh3aW5kb3cudGV4dElucHV0Q29udHJvbGxlciAmJiB3aW5kb3cuYWNj
ZXNzaWJpbGl0eUNvbnRyb2xsZXIpIHsKICAgICAgICAgICAgIHZhciBlbGVtZW50ID0gYWNjZXNz
aWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRCeUlkKCJlZGl0YWJsZSIpOwogICAg
ICAgICAgICAgc2hvdWxkQmVUcnVlKCIhZWxlbWVudC50ZXh0SW5wdXRNYXJrZWRSYW5nZSIpOwor
ICAgICAgICAgICAgCiAgICAgICAgICAgICB0ZXh0SW5wdXRDb250cm9sbGVyLnNldE1hcmtlZFRl
eHQoInRlc3QiLCAxLCAwKTsKICAgICAgICAgICAgIHNob3VsZEJlKCJlbGVtZW50LnRleHRJbnB1
dE1hcmtlZFJhbmdlIiwgIid7MCwgNH0nIik7CisgICAgICAgICAgICAKICAgICAgICAgICAgIHRl
eHRJbnB1dENvbnRyb2xsZXIuaW5zZXJ0VGV4dCgidCIpOwogICAgICAgICAgICAgc2hvdWxkQmVU
cnVlKCIhZWxlbWVudC50ZXh0SW5wdXRNYXJrZWRSYW5nZSIpOworICAgICAgICAgICAgCiAgICAg
ICAgICAgICB0ZXh0SW5wdXRDb250cm9sbGVyLnNldE1hcmtlZFRleHQoInRlc3QyIiwgMSwgMCk7
Ci0gICAgICAgICAgICBzaG91bGRCZSgiZWxlbWVudC50ZXh0SW5wdXRNYXJrZWRSYW5nZSIsICIn
ezAsIDV9JyIpOworICAgICAgICAgICAgc2hvdWxkQmUoImVsZW1lbnQudGV4dElucHV0TWFya2Vk
UmFuZ2UiLCAiJ3sxLCA1fSciKTsKICAgICAgICAgfQogICAgIDwvc2NyaXB0PgogPC9ib2R5Pgpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvdGV4dC1pbnB1dC1tYXJr
ZWQtdGV4dC1tYXJrZXItcmFuZ2UtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvYWNjZXNzaWJp
bGl0eS9tYWMvdGV4dC1pbnB1dC1tYXJrZWQtdGV4dC1tYXJrZXItcmFuZ2UtZXhwZWN0ZWQudHh0
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMDc5OGIwMWMwNWYyCi0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvdGV4dC1pbnB1
dC1tYXJrZWQtdGV4dC1tYXJrZXItcmFuZ2UtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTUgQEAK
K1RoaXMgdGVzdCBlbnN1cmVzIHRoYXQgdGhlIGlucHV0IG1ldGhvZCBtYXJrZWQgcmFuZ2UgaXMg
YXZhaWxhYmxlIHRvIGFjY2Vzc2liaWxpdHkgY2xpZW50cyBhcyB0ZXh0IG1hcmtlciByYW5nZS4K
KworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywg
Zm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgIXRleHQgaXMgdHJ1ZQorUEFT
UyB0ZXh0IGlzICd0ZXN0JworUEFTUyAhdGV4dCBpcyB0cnVlCitQQVNTIGVsZW1lbnQuc3RyaW5n
VmFsdWUgaXMgJ0FYVmFsdWU6IHRlc3QnCitQQVNTIHRleHQgaXMgJyBtZXNzYWdlJworUEFTUyBl
bGVtZW50LnN0cmluZ1ZhbHVlIGlzICdBWFZhbHVlOiB0ZXN0IG1lc3NhZ2UnCitQQVNTIHN1Y2Nl
c3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvdGV4dC1pbnB1dC1tYXJrZWQtdGV4dC1tYXJrZXIt
cmFuZ2UuaHRtbCBiL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL3RleHQtaW5wdXQtbWFy
a2VkLXRleHQtbWFya2VyLXJhbmdlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwLi4yMjk3MzM0YjdlMTkKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9h
Y2Nlc3NpYmlsaXR5L21hYy90ZXh0LWlucHV0LW1hcmtlZC10ZXh0LW1hcmtlci1yYW5nZS5odG1s
CkBAIC0wLDAgKzEsMzMgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKyAgICA8
c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QuanMiPjwvc2NyaXB0PgorPC9oZWFk
PgorPGJvZHk+Cis8aW5wdXQgaWQ9ImVkaXRhYmxlIiB0eXBlPSJ0ZXh0Ij4KKzxzY3JpcHQgdHlw
ZT0idGV4dC9qYXZhc2NyaXB0Ij4KK2Rlc2NyaXB0aW9uKCJUaGlzIHRlc3QgZW5zdXJlcyB0aGF0
IHRoZSBpbnB1dCBtZXRob2QgbWFya2VkIHJhbmdlIGlzIGF2YWlsYWJsZSB0byBhY2Nlc3NpYmls
aXR5IGNsaWVudHMgYXMgdGV4dCBtYXJrZXIgcmFuZ2UuIik7CitlZGl0YWJsZS5mb2N1cygpOwor
aWYgKHdpbmRvdy50ZXh0SW5wdXRDb250cm9sbGVyICYmIHdpbmRvdy5hY2Nlc3NpYmlsaXR5Q29u
dHJvbGxlcikgeworICAgIHZhciBlbGVtZW50ID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNj
ZXNzaWJsZUVsZW1lbnRCeUlkKCJlZGl0YWJsZSIpOworICAgIAorICAgIHZhciB0ZXh0ID0gZWxl
bWVudC5zdHJpbmdGb3JUZXh0TWFya2VyUmFuZ2UoZWxlbWVudC50ZXh0SW5wdXRNYXJrZWRUZXh0
TWFya2VyUmFuZ2UoKSk7CisgICAgc2hvdWxkQmVUcnVlKCIhdGV4dCIpOworICAgIAorICAgIHRl
eHRJbnB1dENvbnRyb2xsZXIuc2V0TWFya2VkVGV4dCgidGVzdCIpOworICAgIHRleHQgPSBlbGVt
ZW50LnN0cmluZ0ZvclRleHRNYXJrZXJSYW5nZShlbGVtZW50LnRleHRJbnB1dE1hcmtlZFRleHRN
YXJrZXJSYW5nZSgpKTsKKyAgICBzaG91bGRCZSgidGV4dCIsICIndGVzdCciKTsKKworICAgIHRl
eHRJbnB1dENvbnRyb2xsZXIudW5tYXJrVGV4dCgpOworICAgIHRleHQgPSBlbGVtZW50LnN0cmlu
Z0ZvclRleHRNYXJrZXJSYW5nZShlbGVtZW50LnRleHRJbnB1dE1hcmtlZFRleHRNYXJrZXJSYW5n
ZSgpKTsKKyAgICBzaG91bGRCZVRydWUoIiF0ZXh0Iik7CisgICAgc2hvdWxkQmUoImVsZW1lbnQu
c3RyaW5nVmFsdWUiLCAiJ0FYVmFsdWU6IHRlc3QnIik7CisKKyAgICB0ZXh0SW5wdXRDb250cm9s
bGVyLnNldE1hcmtlZFRleHQoIiBtZXNzYWdlIiwgNCwgIiBtZXNzYWdlIi5sZW5ndGgpOworICAg
IHRleHQgPSBlbGVtZW50LnN0cmluZ0ZvclRleHRNYXJrZXJSYW5nZShlbGVtZW50LnRleHRJbnB1
dE1hcmtlZFRleHRNYXJrZXJSYW5nZSgpKTsKKyAgICBzaG91bGRCZSgidGV4dCIsICInIG1lc3Nh
Z2UnIik7CisgICAgc2hvdWxkQmUoImVsZW1lbnQuc3RyaW5nVmFsdWUiLCAiJ0FYVmFsdWU6IHRl
c3QgbWVzc2FnZSciKTsKK30KKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvdGV4dC1pbnB1dC1zZXNzaW9uLW5vdGlm
aWNhdGlvbnMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvdGV4
dC1pbnB1dC1zZXNzaW9uLW5vdGlmaWNhdGlvbnMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNTA2ZjdhNTQ5ODhmCi0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvdGV4dC1pbnB1dC1zZXNzaW9uLW5vdGlm
aWNhdGlvbnMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTEgQEAKK1RoaXMgdGVzdCBlbnN1cmVz
IHRoYXQgYWNjZXNzaWJpbGl0eSByZWNlaXZlcyB0aGUgcHJvcGVyIG5vdGlmaWNhdGlvbnMgZm9y
IHdoZW4gaW5wdXQgc2Vzc2lvbnMgYmVnaW4gYW5kIGVuZC4KKworT24gc3VjY2VzcywgeW91IHdp
bGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09N
UExFVEUiLgorCisKK0dvdCBzZXNzaW9uIHN0YXJ0IGFuZCB2YWx1ZSBjaGFuZ2Ugbm90aWZpY2F0
aW9ucy4KK0dvdCBzZXNzaW9uIGVuZCBub3RpZmljYXRpb24uCitQQVNTIHN1Y2Nlc3NmdWxseVBh
cnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
YWNjZXNzaWJpbGl0eS9tYWMvdGV4dC1pbnB1dC1zZXNzaW9uLW5vdGlmaWNhdGlvbnMuaHRtbCBi
L0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL3RleHQtaW5wdXQtc2Vzc2lvbi1ub3RpZmlj
YXRpb25zLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5lMjJh
ZTdkN2RhOGIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21h
Yy90ZXh0LWlucHV0LXNlc3Npb24tbm90aWZpY2F0aW9ucy5odG1sCkBAIC0wLDAgKzEsNDkgQEAK
KzwhRE9DVFlQRSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgcnVuU2luZ2x5PXRydWUg
XSAtLT4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRl
c3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9hY2Nlc3NpYmls
aXR5LWhlbHBlci5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxpbnB1dCBpZD0iZWRp
dGFibGUiIHR5cGU9InRleHQiPgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorZGVz
Y3JpcHRpb24oIlRoaXMgdGVzdCBlbnN1cmVzIHRoYXQgYWNjZXNzaWJpbGl0eSByZWNlaXZlcyB0
aGUgcHJvcGVyIG5vdGlmaWNhdGlvbnMgZm9yIHdoZW4gaW5wdXQgc2Vzc2lvbnMgYmVnaW4gYW5k
IGVuZC4iKTsKK2VkaXRhYmxlLmZvY3VzKCk7CisKK3ZhciBnb3RTZXNzaW9uU3RhcnQgPSBmYWxz
ZTsKK3ZhciBnb3RWYWx1ZUNoYW5nZWQgPSBmYWxzZTsKK3ZhciBnb3RTZXNzaW9uRW5kID0gZmFs
c2U7CitmdW5jdGlvbiBub3RpZmljYXRpb25DYWxsYmFjayhub3RpZmljYXRpb24pIHsKKyAgICBp
ZiAobm90aWZpY2F0aW9uID09PSAiQVhUZXh0SW5wdXRNYXJraW5nU2Vzc2lvbkJlZ2FuIikKKyAg
ICAgICAgZ290U2Vzc2lvblN0YXJ0ID0gdHJ1ZTsKKworICAgIGlmIChub3RpZmljYXRpb24gPT09
ICJBWFZhbHVlQ2hhbmdlZCIgJiYgZ290U2Vzc2lvblN0YXJ0KQorICAgICAgICBnb3RWYWx1ZUNo
YW5nZWQgPSB0cnVlOworCisgICAgaWYgKG5vdGlmaWNhdGlvbiA9PT0gIkFYVGV4dElucHV0TWFy
a2luZ1Nlc3Npb25FbmRlZCIpIHsKKyAgICAgICAgaWYgKCFnb3RTZXNzaW9uU3RhcnQpCisgICAg
ICAgICAgICBkZWJ1ZygiRkFJTDogR290IEFYVGV4dElucHV0TWFya2luZ1Nlc3Npb25FbmRlZCBi
ZWZvcmUgQVhUZXh0SW5wdXRNYXJraW5nU2Vzc2lvbkJlZ2FuIik7CisgICAgICAgIGdvdFNlc3Np
b25FbmQgPSB0cnVlOworICAgIH0KK30KKworaWYgKHdpbmRvdy5hY2Nlc3NpYmlsaXR5Q29udHJv
bGxlcikgeworICAgIHdpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKKworICAgIGFjY2Vzc2li
aWxpdHlDb250cm9sbGVyLmFjY2Vzc2libGVFbGVtZW50QnlJZCgiZWRpdGFibGUiKS5hZGROb3Rp
ZmljYXRpb25MaXN0ZW5lcihub3RpZmljYXRpb25DYWxsYmFjayk7CisgICAgc2V0VGltZW91dChh
c3luYyAoKSA9PiB7CisgICAgICAgIHRleHRJbnB1dENvbnRyb2xsZXIuc2V0TWFya2VkVGV4dCgi
dGVzdCIpOworICAgICAgICBhd2FpdCB3YWl0Rm9yKCgpID0+IGdvdFNlc3Npb25TdGFydCAmJiBn
b3RWYWx1ZUNoYW5nZWQpOworICAgICAgICBkZWJ1ZygiR290IHNlc3Npb24gc3RhcnQgYW5kIHZh
bHVlIGNoYW5nZSBub3RpZmljYXRpb25zLiIpOworCisgICAgICAgIHRleHRJbnB1dENvbnRyb2xs
ZXIudW5tYXJrVGV4dCgpOworICAgICAgICBhd2FpdCB3YWl0Rm9yKCgpID0+IGdvdFNlc3Npb25F
bmQpOworICAgICAgICBkZWJ1ZygiR290IHNlc3Npb24gZW5kIG5vdGlmaWNhdGlvbi4iKTsKKwor
ICAgICAgICBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5hY2Nlc3NpYmxlRWxlbWVudEJ5SWQoImVk
aXRhYmxlIikucmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXIoKTsKKyAgICAgICAgZmluaXNoSlNU
ZXN0KCk7CisgICAgfSk7Cit9Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9UZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0VGVz
dHMvcGxhdGZvcm0vbWFjL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggMTMxMTEzMGVlMjc5Li4xMDA0
YjI4YzMxNDMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9UZXN0RXhwZWN0
YXRpb25zCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9UZXN0RXhwZWN0YXRpb25zCkBA
IC0xNjAwLDYgKzE2MDAsNyBAQCBhY2Nlc3NpYmlsaXR5L21hYy9pc29sYXRlZC10cmVlLW1vZGUt
b24tb2ZmLmh0bWwgWyBTa2lwIF0KIAogIyBSZXF1aXJlcyAoSU5MSU5FX1BSRURJQ1RJT05TKQog
YWNjZXNzaWJpbGl0eS9tYWMvYXR0cmlidXRlZC1zdHJpbmcvYXR0cmlidXRlZC1zdHJpbmctaGFz
LWNvbXBsZXRpb24tYW5ub3RhdGlvbi5odG1sIFsgU2tpcCBdCithY2Nlc3NpYmlsaXR5L21hYy90
ZXh0LWlucHV0LXNlc3Npb24tbm90aWZpY2F0aW9ucy5odG1sIFsgU2tpcCBdCiAKIHdlYmtpdC5v
cmcvYi8yMDIwNjQgd2ViYXVkaW8vc2lsZW50LWF1ZGlvLWludGVycnVwdGVkLWluLWJhY2tncm91
bmQuaHRtbCBbIFBhc3MgQ3Jhc2ggXQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>467045</attachid>
            <date>2023-07-14 15:10:34 -0700</date>
            <delta_ts>2023-07-18 10:46:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-258228-20230714151034.patch</filename>
            <type>text/plain</type>
            <size>59434</size>
            <attacher name="Jack Wiig">jhwiig</attacher>
            
              <data encoding="base64">RnJvbSA3YzVhYmZmMDg4NTBmMzYxYmUwMDA3NTE5Zjc5NTRjZWQ3ZTNlYzIzIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWNrIFdpaWcgPGpod2lpZ0BnbWFpbC5jb20+CkRhdGU6IFRo
dSwgMTMgSnVsIDIwMjMgMTc6NDA6MzMgLTA3MDAKU3ViamVjdDogW1BBVENIXSBQb3N0IEFjY2Vz
c2liaWxpdHkgbm90aWZpY2F0aW9ucyBkdXJpbmcgY29tcG9zaXRpb24gY29udGV4dHMKIGluZGlj
YXRpbmcgc3RhcnQsIGVuZCwgYW5kIHZhbHVlIGNoYW5nZS4KIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yNTgyMjggcmRhcjovL3Byb2JsZW0vMTEwOTI1Mzg0CgpSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KClRvIGFsaWduIG91cnNlbHZlcyB3aXRoIEFwcEtpdCwg
V2ViS2l0IHNob3VsZCBwb3N0IGEgbm90aWZpY2F0aW9uIHdoZW4gYSBjb21wb3NpdGlvbiBzdGFy
dHMgc28gdGhhdCBhc3Npc3RpdmUgdGVjaG5vbG9naWVzIGtub3cgdG8gcHJvY2VzcyBhbnkgZnV0
dXJlIHZhbHVlIGNoYW5nZXMgZm9yIHRoYXQgdWkgZWxlbWVudCBhcyBpbmNvbXBsZXRlIGNvbXBv
c2l0aW9uIGNoYW5nZXMuIFdoZW4gYSBjb21wb3NpdGlvbiBlbmRzLCBwb3N0IGEgbm90aWZpY2F0
aW9uIHRvIGluZGljYXRlIHRoYXQgdGhlIGNvbXBvc2l0aW9uIHNlc3Npb24gaGFzIGVuZGVkLgoK
VGhpcyBtb2RlbCBkb2VzIG5vdCBjb252ZXkgYW55IGluZm9ybWF0aW9uIGluIHRoZSB0ZXh0IG5v
dGlmaWNhdGlvbnMgKHVubGlrZSB3aGF0IG15IHBhc3QgY29tbWVudCBpbmRpY2F0ZXMpIGFuZCBw
b3N0cyB0aGUgbm90aWZpY2F0aW9uIGZyb20gdGhlIHRleHQgY29udHJvbCBjb250YWluaW5nIHRo
ZSB0ZXh0IGluZm9ybWF0aW9uLiBUaGlzIGFsaWducyB1cyBjbG9zZXIgd2l0aCBob3cgb3RoZXIg
VUkgZnJhbWV3b3JrcyBiZWhhdmUuCgpPdGhlciBjaGFuZ2VzOgotIEFkZGVkIGFuIEFYVGV4dE1h
cmtlclJhbmdlIHZhcmlhbnQgdG8gc3VwcG9ydCB0aGUgQVhUZXh0SW5wdXRNYXJrZWRUZXh0TWFy
a2VyUmFuZ2UgYXR0cmlidXRlCi0gRml4ZWQgdGhlIGxvZ2ljIGZvciBhZGRpbmcgY29tcG9zaXRp
b24gYXR0cmlidXRlcyB0byBhbiBhdHRyaWJ1dGVkIHN0cmluZyByZXF1ZXN0CgoqIExheW91dFRl
c3RzL2FjY2Vzc2liaWxpdHkvbWFjL2F0dHJpYnV0ZWQtc3RyaW5nL2F0dHJpYnV0ZWQtc3RyaW5n
LWhhcy1jb21wbGV0aW9uLWFubm90YXRpb24uaHRtbDoKKiBMYXlvdXRUZXN0cy9hY2Nlc3NpYmls
aXR5L21hYy90ZXh0LWlucHV0LW1hcmtlZC1yYW5nZS1leHBlY3RlZC50eHQ6CiogTGF5b3V0VGVz
dHMvYWNjZXNzaWJpbGl0eS9tYWMvdGV4dC1pbnB1dC1tYXJrZWQtcmFuZ2UuaHRtbDoKKiBMYXlv
dXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy90ZXh0LWlucHV0LW1hcmtlZC10ZXh0LW1hcmtlci1y
YW5nZS1leHBlY3RlZC50eHQ6IEFkZGVkLgoqIExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFj
L3RleHQtaW5wdXQtbWFya2VkLXRleHQtbWFya2VyLXJhbmdlLmh0bWw6IEFkZGVkLgoqIExheW91
dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL3RleHQtaW5wdXQtc2Vzc2lvbi1ub3RpZmljYXRpb25z
LWV4cGVjdGVkLnR4dDogQWRkZWQuCiogTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvdGV4
dC1pbnB1dC1zZXNzaW9uLW5vdGlmaWNhdGlvbnMuaHRtbDogQWRkZWQuCiogU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BWExvZ2dlci5jcHA6CihXZWJDb3JlOjpvcGVyYXRvcjw8KToKKiBT
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwOgooV2ViQ29yZTo6
QVhPYmplY3RDYWNoZTo6b25UZXh0Q29tcG9zaXRpb25DaGFuZ2UpOgooV2ViQ29yZTo6QVhPYmpl
Y3RDYWNoZTo6dXBkYXRlSXNvbGF0ZWRUcmVlKToKKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnRl
eHRDb21wb3NpdGlvbk9iamVjdEZvck5vZGUpOiBEZWxldGVkLgoqIFNvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5oOgooV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6b25U
ZXh0Q29tcG9zaXRpb25DaGFuZ2UpOgooV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6dXBkYXRlUmVs
YXRpb25zKToKKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnRleHRDb21wb3NpdGlvbk9iamVjdEZv
ck5vZGUpOiBEZWxldGVkLgoqIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhUZXh0TWFy
a2VyLmNwcDoKKFdlYkNvcmU6OkFYVGV4dE1hcmtlclJhbmdlOjpjaGFyYWN0ZXJSYW5nZSBjb25z
dCk6CihXZWJDb3JlOjpBWElzb2xhdGVkVGV4dE1hcmtlclJhbmdlOjpBWElzb2xhdGVkVGV4dE1h
cmtlclJhbmdlKToKKiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYVGV4dE1hcmtlci5o
OgoqIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHA6
CihXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0Ojp0ZXh0SW5wdXRNYXJrZWRSYW5nZSBjb25z
dCk6CihXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0Ojp0ZXh0SW5wdXRNYXJrZWRUZXh0TWFy
a2VyUmFuZ2UgY29uc3QpOgooV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6aXNOb2RlRm9y
Q29tcG9zaXRpb24gY29uc3QpOiBEZWxldGVkLgoqIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eU9iamVjdC5oOgoqIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eU9iamVjdEludGVyZmFjZS5oOgoqIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvY29jb2EvQVhUZXh0TWFya2VyQ29jb2EubW06CihXZWJDb3JlOjpBWFRleHRNYXJrZXJS
YW5nZTo6bnNSYW5nZSBjb25zdCk6CiogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9jb2Nv
YS9BY2Nlc3NpYmlsaXR5T2JqZWN0Q29jb2EubW06CihXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2Jq
ZWN0Ojpjb250ZW50Rm9yUmFuZ2UgY29uc3QpOgoqIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvaW9zL0FjY2Vzc2liaWxpdHlPYmplY3RJT1MubW06CihXZWJDb3JlOjphdHRyaWJ1dGVkU3Ry
aW5nQ3JlYXRlKToKKiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9B
WElzb2xhdGVkT2JqZWN0LmNwcDoKKFdlYkNvcmU6OkFYSXNvbGF0ZWRPYmplY3Q6OnRleHRJbnB1
dE1hcmtlZFJhbmdlIGNvbnN0KToKKFdlYkNvcmU6OkFYSXNvbGF0ZWRPYmplY3Q6OnRleHRJbnB1
dE1hcmtlZFRleHRNYXJrZXJSYW5nZSBjb25zdCk6CiogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZE9iamVjdC5oOgoqIFNvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRUcmVlLmNwcDoKKFdlYkNvcmU6OkFY
SXNvbGF0ZWRUcmVlOjp1cGRhdGVOb2RlUHJvcGVydGllcyk6CiogU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZFRyZWUuaDoKKiBTb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L21hYy9BWE9iamVjdENhY2hlTWFjLm1tOgooV2ViQ29yZTo6QVhPYmpl
Y3RDYWNoZTo6cG9zdFBsYXRmb3JtTm90aWZpY2F0aW9uKToKKiBTb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L21hYy9BY2Nlc3NpYmlsaXR5T2JqZWN0TWFjLm1tOgooV2ViQ29yZTo6YXR0cmli
dXRlZFN0cmluZ1NldENvbXBvc2l0aW9uQXR0cmlidXRlcyk6CihXZWJDb3JlOjphdHRyaWJ1dGVk
U3RyaW5nQ3JlYXRlKToKKiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlckJhc2UuaDoKKiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbToKKC1bV2ViQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXIgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5E
XSk6CigtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlBdHRyaWJ1
dGVWYWx1ZTpdKToKKiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHA6CihXZWJDb3Jl
OjpFZGl0b3I6OnNldENvbXBvc2l0aW9uKToKKiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGlu
Z0NvbW1hbmQuY3BwOgooV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6aW5zZXJ0VGV4dCk6CiogVG9v
bHMvRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5jcHA6Cih0ZXh0SW5wdXRN
YXJrZWRUZXh0TWFya2VyUmFuZ2VDYWxsYmFjayk6CihBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0
ZXh0SW5wdXRNYXJrZWRUZXh0TWFya2VyUmFuZ2UgY29uc3QpOgooQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6Z2V0SlNDbGFzcyk6CiogVG9vbHMvRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudC5oOgoqIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2lvcy9BY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50SU9TLm1tOgooQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGV4dElucHV0TWFya2VkVGV4dE1h
cmtlclJhbmdlIGNvbnN0KToKKiBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvQWNjZXNzaWJpbGl0
eVVJRWxlbWVudE1hYy5tbToKKGF0dHJpYnV0ZXNPZkVsZW1lbnQpOgooQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6dGV4dElucHV0TWFya2VkVGV4dE1hcmtlclJhbmdlIGNvbnN0KToKKiBUb29scy9X
ZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuY3Bw
OgooV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0ZXh0SW5wdXRNYXJrZWRUZXh0TWFya2Vy
UmFuZ2UgY29uc3QpOgoqIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudC5oOgoqIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRC
dW5kbGUvQmluZGluZ3MvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5pZGw6CiogVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0eVVJRWxlbWVudE1hYy5t
bToKKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YWxsQXR0cmlidXRlcyk6CihXVFI6OkFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRleHRJbnB1dE1hcmtlZFRleHRNYXJrZXJSYW5nZSBjb25z
dCk6Ci0tLQogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWExvZ2dlci5jcHAgICAgIHwg
IDYgKysrCiAuLi4vV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwICAgfCA0
MiArKysrKysrKystLS0tLS0tCiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0
Q2FjaGUuaCAgfCAxMSArKystLQogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWFRleHRN
YXJrZXIuY3BwIHwgMTMgKysrKysKIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhUZXh0
TWFya2VyLmggICB8ICAxICsKIC4uLi9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3Qu
Y3BwICAgICB8IDQxICsrKysrKystLS0tLS0tLS0KIC4uLi9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlPYmplY3QuaCAgICAgICB8ICA0ICstCiAuLi4vQWNjZXNzaWJpbGl0eU9iamVjdEludGVy
ZmFjZS5oICAgICAgICAgICAgfCAgMiArLQogLi4uL2FjY2Vzc2liaWxpdHkvY29jb2EvQVhUZXh0
TWFya2VyQ29jb2EubW0gIHwgMTAgKy0tLQogLi4uL2NvY29hL0FjY2Vzc2liaWxpdHlPYmplY3RD
b2NvYS5tbSAgICAgICAgIHwgIDQgKy0KIC4uLi9pb3MvQWNjZXNzaWJpbGl0eU9iamVjdElPUy5t
bSAgICAgICAgICAgICB8ICAyICstCiAuLi4vaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRPYmplY3Qu
Y3BwICAgICAgICAgfCAxMSArKysrKwogLi4uL2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkT2JqZWN0
LmggICAgICAgICAgIHwgIDIgKy0KIC4uLi9pc29sYXRlZHRyZWUvQVhJc29sYXRlZFRyZWUuY3Bw
ICAgICAgICAgICB8IDEzICsrLS0tCiAuLi4vaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRUcmVlLmgg
ICAgICAgICAgICAgfCAgNCArLQogLi4uL2FjY2Vzc2liaWxpdHkvbWFjL0FYT2JqZWN0Q2FjaGVN
YWMubW0gICAgIHwgMTQgKysrKysrCiAuLi4vbWFjL0FjY2Vzc2liaWxpdHlPYmplY3RNYWMubW0g
ICAgICAgICAgICAgfCAxOSArKysrLS0tCiAuLi4vbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RX
cmFwcGVyQmFzZS5oICAgfCAgMiArLQogLi4uL21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3Jh
cHBlck1hYy5tbSAgIHwgMTUgKysrKystCiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5j
cHAgICAgICAgICAgICAgfCAxOSArKysrLS0tCiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGlu
Z0NvbW1hbmQuY3BwICAgICAgfCAgNyArKy0KIC4uLi9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmls
aXR5VUlFbGVtZW50LmNwcCB8IDExICsrKysrCiBUb29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3Np
YmlsaXR5VUlFbGVtZW50LmggfCAgMSArCiAuLi4vaW9zL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRJ
T1MubW0gICAgICAgICAgfCAgNSArKwogLi4uL21hYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFj
Lm1tICAgICAgICAgIHwgMTggKysrKysrLQogLi4uL0luamVjdGVkQnVuZGxlL0FjY2Vzc2liaWxp
dHlVSUVsZW1lbnQuY3BwIHwgIDEgKwogLi4uL0luamVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlV
SUVsZW1lbnQuaCAgIHwgIDEgKwogLi4uL0JpbmRpbmdzL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQu
aWRsICAgICAgIHwgIDEgKwogLi4uL21hYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tICAg
ICAgICAgIHwgMTggKysrKysrLQogLi4udXRlZC1zdHJpbmctaGFzLWNvbXBsZXRpb24tYW5ub3Rh
dGlvbi5odG1sIHwgMTIgKysrLS0KIC4uLi9tYWMvdGV4dC1pbnB1dC1tYXJrZWQtcmFuZ2UtZXhw
ZWN0ZWQudHh0ICB8ICAyICstCiAuLi4vbWFjL3RleHQtaW5wdXQtbWFya2VkLXJhbmdlLmh0bWwg
ICAgICAgICAgfCAgNSArLQogLi4ubnB1dC1tYXJrZWQtdGV4dC1tYXJrZXItcmFuZ2UtZXhwZWN0
ZWQudHh0IHwgMTUgKysrKysrCiAuLi4vdGV4dC1pbnB1dC1tYXJrZWQtdGV4dC1tYXJrZXItcmFu
Z2UuaHRtbCAgfCAzMyArKysrKysrKysrKysrCiAuLi50LWlucHV0LXNlc3Npb24tbm90aWZpY2F0
aW9ucy1leHBlY3RlZC50eHQgfCAxMSArKysrKwogLi4uL21hYy90ZXh0LWlucHV0LXNlc3Npb24t
bm90aWZpY2F0aW9ucy5odG1sIHwgNDkgKysrKysrKysrKysrKysrKysrKwogTGF5b3V0VGVzdHMv
cGxhdGZvcm0vbWFjL1Rlc3RFeHBlY3RhdGlvbnMgICAgIHwgIDEgKwogMzcgZmlsZXMgY2hhbmdl
ZCwgMzI3IGluc2VydGlvbnMoKyksIDk5IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0
IExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL3RleHQtaW5wdXQtbWFya2VkLXRleHQtbWFy
a2VyLXJhbmdlLWV4cGVjdGVkLnR4dAogY3JlYXRlIG1vZGUgMTAwNjQ0IExheW91dFRlc3RzL2Fj
Y2Vzc2liaWxpdHkvbWFjL3RleHQtaW5wdXQtbWFya2VkLXRleHQtbWFya2VyLXJhbmdlLmh0bWwK
IGNyZWF0ZSBtb2RlIDEwMDY0NCBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy90ZXh0LWlu
cHV0LXNlc3Npb24tbm90aWZpY2F0aW9ucy1leHBlY3RlZC50eHQKIGNyZWF0ZSBtb2RlIDEwMDY0
NCBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy90ZXh0LWlucHV0LXNlc3Npb24tbm90aWZp
Y2F0aW9ucy5odG1sCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
WExvZ2dlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYTG9nZ2VyLmNwcApp
bmRleCBkNjEzNmIxZDYzNTIuLjk3NzAzMDUxMWMwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BWExvZ2dlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BWExvZ2dlci5jcHAKQEAgLTY0NCw2ICs2NDQsMTIgQEAgVGV4dFN0cmVhbSYgb3Bl
cmF0b3I8PChUZXh0U3RyZWFtJiBzdHJlYW0sIEFYT2JqZWN0Q2FjaGU6OkFYTm90aWZpY2F0aW9u
IG5vdGlmaWMKICAgICBjYXNlIEFYT2JqZWN0Q2FjaGU6OkFYTm90aWZpY2F0aW9uOjpBWERyYWdn
aW5nRXhpdGVkRHJvcFpvbmU6CiAgICAgICAgIHN0cmVhbSA8PCAiQVhEcmFnZ2luZ0V4aXRlZERy
b3Bab25lIjsKICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBWE9iamVjdENhY2hlOjpBWE5vdGlm
aWNhdGlvbjo6QVhUZXh0Q29tcG9zaXRpb25CZWdhbjoKKyAgICAgICAgc3RyZWFtIDw8ICJBWFRl
eHRDb21wb3NpdGlvbkJlZ2FuIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBWE9iamVjdENh
Y2hlOjpBWE5vdGlmaWNhdGlvbjo6QVhUZXh0Q29tcG9zaXRpb25FbmRlZDoKKyAgICAgICAgc3Ry
ZWFtIDw8ICJBWFRleHRDb21wb3NpdGlvbkVuZGVkIjsKKyAgICAgICAgYnJlYWs7CiAgICAgfQog
CiAgICAgcmV0dXJuIHN0cmVhbTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQVhPYmplY3RDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FY
T2JqZWN0Q2FjaGUuY3BwCmluZGV4IDMzYTJkYzZkYzQ5NC4uMmM2NzI1NGY1MzlkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKQEAgLTE2ODAs
MTMgKzE2ODAsMzMgQEAgdm9pZCBBWE9iamVjdENhY2hlOjpvblZhbGlkaXR5Q2hhbmdlKEVsZW1l
bnQmIGVsZW1lbnQpCiAgICAgcG9zdE5vdGlmaWNhdGlvbihnZXQoJmVsZW1lbnQpLCBudWxscHRy
LCBBWEludmFsaWRTdGF0dXNDaGFuZ2VkKTsKIH0KIAotdm9pZCBBWE9iamVjdENhY2hlOjpvblRl
eHRDb21wb3NpdGlvbkNoYW5nZShOb2RlJiBub2RlKQordm9pZCBBWE9iamVjdENhY2hlOjpvblRl
eHRDb21wb3NpdGlvbkNoYW5nZShOb2RlJiBub2RlLCBDb21wb3NpdGlvblN0YXRlIGNvbXBvc2l0
aW9uU3RhdGUsIGJvb2wgdmFsdWVDaGFuZ2VkKQogeworI2lmIEhBVkUoSU5MSU5FX1BSRURJQ1RJ
T05TKQorICAgIGF1dG8qIG9iamVjdCA9IGdldE9yQ3JlYXRlKCZub2RlKTsKKyAgICBpZiAoIW9i
amVjdCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGF1dG8qIG9ic2VydmFibGVPYmplY3Qg
PSBvYmplY3QtPm9ic2VydmFibGVPYmplY3QoKSkKKyAgICAgICAgb2JqZWN0ID0gb2JzZXJ2YWJs
ZU9iamVjdDsKKwogI2lmIEVOQUJMRShBQ0NFU1NJQklMSVRZX0lTT0xBVEVEX1RSRUUpCi0gICAg
dXBkYXRlSXNvbGF0ZWRUcmVlKHRleHRDb21wb3NpdGlvbk9iamVjdEZvck5vZGUobm9kZSksIEFY
VGV4dENvbXBvc2l0aW9uQ2hhbmdlZCk7CisgICAgdXBkYXRlSXNvbGF0ZWRUcmVlKG9iamVjdCwg
QVhUZXh0Q29tcG9zaXRpb25DaGFuZ2VkKTsKKyNlbmRpZiAvLyBFTkFCTEUoQUNDRVNTSUJJTElU
WV9JU09MQVRFRF9UUkVFKQorCisgICAgaWYgKGNvbXBvc2l0aW9uU3RhdGUgPT0gQ29tcG9zaXRp
b25TdGF0ZTo6U3RhcnRlZCkKKyAgICAgICAgcG9zdE5vdGlmaWNhdGlvbihvYmplY3QsICZub2Rl
LmRvY3VtZW50KCksIEFYVGV4dENvbXBvc2l0aW9uQmVnYW4pOworCisgICAgaWYgKHZhbHVlQ2hh
bmdlZCkKKyAgICAgICAgcG9zdE5vdGlmaWNhdGlvbihvYmplY3QsICZub2RlLmRvY3VtZW50KCks
IEFYVmFsdWVDaGFuZ2VkKTsKKworICAgIGlmIChjb21wb3NpdGlvblN0YXRlID09IENvbXBvc2l0
aW9uU3RhdGU6OkVuZGVkKQorICAgICAgICBwb3N0Tm90aWZpY2F0aW9uKG9iamVjdCwgJm5vZGUu
ZG9jdW1lbnQoKSwgQVhUZXh0Q29tcG9zaXRpb25FbmRlZCk7CiAjZWxzZQogICAgIFVOVVNFRF9Q
QVJBTShub2RlKTsKLSNlbmRpZgorICAgIFVOVVNFRF9QQVJBTShjb21wb3NpdGlvblN0YXRlKTsK
KyAgICBVTlVTRURfUEFSQU0odmFsdWVDaGFuZ2VkKTsKKyNlbmRpZiAvLyBIQVZFKElOTElORV9Q
UkVESUNUSU9OUykKIH0KIAogI2lmbmRlZiBOREVCVUcKQEAgLTQwMTcsNyArNDAzNyw3IEBAIHZv
aWQgQVhPYmplY3RDYWNoZTo6dXBkYXRlSXNvbGF0ZWRUcmVlKGNvbnN0IFZlY3RvcjxzdGQ6OnBh
aXI8UmVmUHRyPEFjY2Vzc2liaWxpCiAgICAgICAgICAgICB0cmVlLT51cGRhdGVOb2RlUHJvcGVy
dHkoKm5vdGlmaWNhdGlvbi5maXJzdCwgQVhQcm9wZXJ0eU5hbWU6OkNvbHVtbkhlYWRlcnMpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQVhUZXh0Q29tcG9zaXRpb25DaGFuZ2Vk
OgotICAgICAgICAgICAgdHJlZS0+dXBkYXRlTm9kZVByb3BlcnR5KCpub3RpZmljYXRpb24uZmly
c3QsIEFYUHJvcGVydHlOYW1lOjpUZXh0SW5wdXRNYXJrZWRSYW5nZSk7CisgICAgICAgICAgICB0
cmVlLT51cGRhdGVOb2RlUHJvcGVydHkoKm5vdGlmaWNhdGlvbi5maXJzdCwgQVhQcm9wZXJ0eU5h
bWU6OlRleHRJbnB1dE1hcmtlZFRleHRNYXJrZXJSYW5nZSk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgY2FzZSBBWFVSTENoYW5nZWQ6CiAgICAgICAgICAgICB0cmVlLT51cGRhdGVOb2Rl
UHJvcGVydHkoKm5vdGlmaWNhdGlvbi5maXJzdCwgQVhQcm9wZXJ0eU5hbWU6OlVSTCk7CkBAIC00
NjAyLDIwICs0NjIyLDYgQEAgQVhUZXh0Q2hhbmdlIEFYT2JqZWN0Q2FjaGU6OnRleHRDaGFuZ2VG
b3JFZGl0VHlwZShBWFRleHRFZGl0VHlwZSB0eXBlKQogfQogI2VuZGlmCiAKLUFjY2Vzc2liaWxp
dHlPYmplY3QqIEFYT2JqZWN0Q2FjaGU6OnRleHRDb21wb3NpdGlvbk9iamVjdEZvck5vZGUoTm9k
ZSYgbm9kZSkKLXsKLSAgICBXZWFrUHRyIG9iamVjdCA9IGdldCgmbm9kZSk7Ci0gICAgaWYgKG9i
amVjdCkKLSAgICAgICAgb2JqZWN0ID0gb2JqZWN0LT5vYnNlcnZhYmxlT2JqZWN0KCk7Ci0KLSNp
ZiBQTEFURk9STShNQUMpCi0gICAgLy8gSW4gb3VyIE1hYyBpbXBsZW1lbnRhdGlvbnMgZm9yIHBv
c3RpbmcgdGV4dCBub3RpZmljYXRpb25zLCB3ZSBmYWxsIGJhY2sgb24gdGhlIHdlYiBhcmVhIGlm
IHRoZSBvYnNlcnZhYmxlIG9iamVjdCBpcyBudWxscHRyLgotICAgIGlmICghb2JqZWN0KQotICAg
ICAgICBvYmplY3QgPSByb290V2ViQXJlYSgpOwotI2VuZGlmCi0gICAgcmV0dXJuIG9iamVjdC5n
ZXQoKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKEFD
Q0VTU0lCSUxJVFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FY
T2JqZWN0Q2FjaGUuaCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNo
ZS5oCmluZGV4IGUyM2I3OGY3YTU5Mi4uNDI5MDM5NjhjMGU3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaApAQCAtMTg0LDYgKzE4NCw4IEBAIHByaXZh
dGU6CiAgICAgdm9pZCBhdHRhY2hXcmFwcGVyKEFjY2Vzc2liaWxpdHlPYmplY3QqKTsKIAogcHVi
bGljOgorICAgIGVudW0gY2xhc3MgQ29tcG9zaXRpb25TdGF0ZSA6IHVpbnQ4X3QgeyBTdGFydGVk
LCBJblByb2dyZXNzLCBFbmRlZCB9OworCiAgICAgdm9pZCBvblBhZ2VBY3Rpdml0eVN0YXRlQ2hh
bmdlKE9wdGlvblNldDxBY3Rpdml0eVN0YXRlPik7CiAgICAgdm9pZCBzZXRQYWdlQWN0aXZpdHlT
dGF0ZShPcHRpb25TZXQ8QWN0aXZpdHlTdGF0ZT4gc3RhdGUpIHsgbV9wYWdlQWN0aXZpdHlTdGF0
ZSA9IHN0YXRlOyB9CiAgICAgT3B0aW9uU2V0PEFjdGl2aXR5U3RhdGU+IHBhZ2VBY3Rpdml0eVN0
YXRlKCkgY29uc3QgeyByZXR1cm4gbV9wYWdlQWN0aXZpdHlTdGF0ZTsgfQpAQCAtMTk4LDcgKzIw
MCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIG9uVGV4dFNlY3VyaXR5Q2hhbmdlZChIVE1MSW5wdXRF
bGVtZW50Jik7CiAgICAgdm9pZCBvblRpdGxlQ2hhbmdlKERvY3VtZW50Jik7CiAgICAgdm9pZCBv
blZhbGlkaXR5Q2hhbmdlKEVsZW1lbnQmKTsKLSAgICB2b2lkIG9uVGV4dENvbXBvc2l0aW9uQ2hh
bmdlKE5vZGUmKTsKKyAgICB2b2lkIG9uVGV4dENvbXBvc2l0aW9uQ2hhbmdlKE5vZGUmLCBDb21w
b3NpdGlvblN0YXRlLCBib29sKTsKICAgICB2b2lkIHZhbHVlQ2hhbmdlZChFbGVtZW50Kik7CiAg
ICAgdm9pZCBjaGVja2VkU3RhdGVDaGFuZ2VkKE5vZGUqKTsKICAgICB2b2lkIGF1dG9maWxsVHlw
ZUNoYW5nZWQoTm9kZSopOwpAQCAtMzY1LDYgKzM2Nyw4IEBAIHB1YmxpYzoKICAgICAgICAgQVhT
ZWxlY3RlZFRleHRDaGFuZ2VkLAogICAgICAgICBBWFNldFNpemVDaGFuZ2VkLAogICAgICAgICBB
WFRhYmxlSGVhZGVyc0NoYW5nZWQsCisgICAgICAgIEFYVGV4dENvbXBvc2l0aW9uQmVnYW4sCisg
ICAgICAgIEFYVGV4dENvbXBvc2l0aW9uRW5kZWQsCiAgICAgICAgIEFYVVJMQ2hhbmdlZCwKICAg
ICAgICAgQVhWYWx1ZUNoYW5nZWQsCiAgICAgICAgIEFYU2Nyb2xsZWRUb0FuY2hvciwKQEAgLTQ2
MSw4ICs0NjUsNiBAQCBwdWJsaWM6CiAgICAgc3RkOjpvcHRpb25hbDxWZWN0b3I8QVhJRD4+IHJl
bGF0ZWRPYmplY3RJRHNGb3IoY29uc3QgQVhDb3JlT2JqZWN0JiwgQVhSZWxhdGlvblR5cGUpOwog
ICAgIHZvaWQgdXBkYXRlUmVsYXRpb25zKEVsZW1lbnQmLCBjb25zdCBRdWFsaWZpZWROYW1lJik7
CiAKLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiB0ZXh0Q29tcG9zaXRpb25PYmplY3RGb3JOb2Rl
KE5vZGUmKTsKLQogI2lmIEVOQUJMRShBQ0NFU1NJQklMSVRZX0lTT0xBVEVEX1RSRUUpCiAgICAg
dm9pZCBzY2hlZHVsZU9iamVjdFJlZ2lvbnNVcGRhdGUoYm9vbCBzY2hlZHVsZUltbWVkaWF0ZWx5
ID0gZmFsc2UpIHsgbV9nZW9tZXRyeU1hbmFnZXItPnNjaGVkdWxlT2JqZWN0UmVnaW9uc1VwZGF0
ZShzY2hlZHVsZUltbWVkaWF0ZWx5KTsgfQogICAgIHZvaWQgd2lsbFVwZGF0ZU9iamVjdFJlZ2lv
bnMoKSB7IG1fZ2VvbWV0cnlNYW5hZ2VyLT53aWxsVXBkYXRlT2JqZWN0UmVnaW9ucygpOyB9CkBA
IC03MzYsNyArNzM4LDcgQEAgaW5saW5lIHZvaWQgQVhPYmplY3RDYWNoZTo6b25TZWxlY3RlZENo
YW5nZWQoTm9kZSopIHsgfQogaW5saW5lIHZvaWQgQVhPYmplY3RDYWNoZTo6b25UZXh0U2VjdXJp
dHlDaGFuZ2VkKEhUTUxJbnB1dEVsZW1lbnQmKSB7IH0KIGlubGluZSB2b2lkIEFYT2JqZWN0Q2Fj
aGU6Om9uVGl0bGVDaGFuZ2UoRG9jdW1lbnQmKSB7IH0KIGlubGluZSB2b2lkIEFYT2JqZWN0Q2Fj
aGU6Om9uVmFsaWRpdHlDaGFuZ2UoRWxlbWVudCYpIHsgfQotaW5saW5lIHZvaWQgQVhPYmplY3RD
YWNoZTo6b25UZXh0Q29tcG9zaXRpb25DaGFuZ2UoTm9kZSYpIHsgfQoraW5saW5lIHZvaWQgQVhP
YmplY3RDYWNoZTo6b25UZXh0Q29tcG9zaXRpb25DaGFuZ2UoTm9kZSYsIENvbXBvc2l0aW9uU3Rh
dGUsIGJvb2wpIHsgfQogaW5saW5lIHZvaWQgQVhPYmplY3RDYWNoZTo6dmFsdWVDaGFuZ2VkKEVs
ZW1lbnQqKSB7IH0KIGlubGluZSB2b2lkIEFYT2JqZWN0Q2FjaGU6Om9uRm9jdXNDaGFuZ2UoTm9k
ZSosIE5vZGUqKSB7IH0KIGlubGluZSB2b2lkIEFYT2JqZWN0Q2FjaGU6Om9uUGFnZUFjdGl2aXR5
U3RhdGVDaGFuZ2UoT3B0aW9uU2V0PEFjdGl2aXR5U3RhdGU+KSB7IH0KQEAgLTc4OCw3ICs3OTAs
NiBAQCBpbmxpbmUgdm9pZCBBWE9iamVjdENhY2hlOjp1cGRhdGVMb2FkaW5nUHJvZ3Jlc3MoZG91
YmxlKSB7IH0KIGlubGluZSBTaW1wbGVSYW5nZSBBWE9iamVjdENhY2hlOjpyYW5nZUZvck5vZGVD
b250ZW50cyhOb2RlJiBub2RlKSB7IHJldHVybiBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVu
dHMobm9kZSk7IH0KIGlubGluZSBzdGQ6Om9wdGlvbmFsPFZlY3RvcjxBWElEPj4gQVhPYmplY3RD
YWNoZTo6cmVsYXRlZE9iamVjdElEc0Zvcihjb25zdCBBWENvcmVPYmplY3QmLCBBWFJlbGF0aW9u
VHlwZSkgeyByZXR1cm4gc3RkOjpudWxsb3B0OyB9CiBpbmxpbmUgdm9pZCBBWE9iamVjdENhY2hl
Ojp1cGRhdGVSZWxhdGlvbnMoRWxlbWVudCYsIGNvbnN0IFF1YWxpZmllZE5hbWUmKSB7IH0KLWlu
bGluZSBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBWE9iamVjdENhY2hlOjp0ZXh0Q29tcG9zaXRpb25P
YmplY3RGb3JOb2RlKE5vZGUmKSB7IHJldHVybiBudWxscHRyOyB9CiBpbmxpbmUgdm9pZCBBWE9i
amVjdENhY2hlOjpyZW1vdmUoQVhJRCkgeyB9CiBpbmxpbmUgdm9pZCBBWE9iamVjdENhY2hlOjpy
ZW1vdmUoUmVuZGVyT2JqZWN0KikgeyB9CiBpbmxpbmUgdm9pZCBBWE9iamVjdENhY2hlOjpyZW1v
dmUoTm9kZSYpIHsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
WFRleHRNYXJrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWFRleHRNYXJr
ZXIuY3BwCmluZGV4IGVhYjczOWI2ZjE5Ny4uZDM1ZTBlNDFjMDViIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYVGV4dE1hcmtlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BWFRleHRNYXJrZXIuY3BwCkBAIC0yNzUsNiArMjc1LDE5IEBA
IHN0ZDo6b3B0aW9uYWw8U2ltcGxlUmFuZ2U+IEFYVGV4dE1hcmtlclJhbmdlOjpzaW1wbGVSYW5n
ZSgpIGNvbnN0CiAgICAgcmV0dXJuIHsgeyAqc3RhcnRCb3VuZGFyeVBvaW50LCAqZW5kQm91bmRh
cnlQb2ludCB9IH07CiB9CiAKK3N0ZDo6b3B0aW9uYWw8Q2hhcmFjdGVyUmFuZ2U+IEFYVGV4dE1h
cmtlclJhbmdlOjpjaGFyYWN0ZXJSYW5nZSgpIGNvbnN0Cit7CisgICAgaWYgKG1fc3RhcnQubV9k
YXRhLm9iamVjdElEICE9IG1fZW5kLm1fZGF0YS5vYmplY3RJRAorICAgICAgICB8fCBtX3N0YXJ0
Lm1fZGF0YS50cmVlSUQgIT0gbV9lbmQubV9kYXRhLnRyZWVJRCkKKyAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKKworICAgIGlmIChtX3N0YXJ0Lm1fZGF0YS5jaGFyYWN0ZXJPZmZzZXQgPiBt
X2VuZC5tX2RhdGEuY2hhcmFjdGVyT2Zmc2V0KSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KKyAgICByZXR1cm4geyB7
IG1fc3RhcnQubV9kYXRhLmNoYXJhY3Rlck9mZnNldCwgbV9lbmQubV9kYXRhLmNoYXJhY3Rlck9m
ZnNldCAtIG1fc3RhcnQubV9kYXRhLmNoYXJhY3Rlck9mZnNldCB9IH07Cit9CisKIHN0ZDo6cGFy
dGlhbF9vcmRlcmluZyBwYXJ0aWFsT3JkZXIoY29uc3QgQVhUZXh0TWFya2VyJiBtYXJrZXIxLCBj
b25zdCBBWFRleHRNYXJrZXImIG1hcmtlcjIpCiB7CiAgICAgaWYgKG1hcmtlcjEub2JqZWN0SUQo
KSA9PSBtYXJrZXIyLm9iamVjdElEKCkgJiYgbWFya2VyMS50cmVlSUQoKSA9PSBtYXJrZXIyLnRy
ZWVJRCgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYVGV4
dE1hcmtlci5oIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWFRleHRNYXJrZXIuaApp
bmRleCAzMThlZDA2OGE2MzEuLjQ2OWU1YjRhMjQ4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BWFRleHRNYXJrZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FYVGV4dE1hcmtlci5oCkBAIC0xNTUsNiArMTU1LDcgQEAgcHVibGljOgogICAg
IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0ICYmIG1fZW5kOyB9CiAgICAg
b3BlcmF0b3IgVmlzaWJsZVBvc2l0aW9uUmFuZ2UoKSBjb25zdDsKICAgICBzdGQ6Om9wdGlvbmFs
PFNpbXBsZVJhbmdlPiBzaW1wbGVSYW5nZSgpIGNvbnN0OworICAgIHN0ZDo6b3B0aW9uYWw8Q2hh
cmFjdGVyUmFuZ2U+IGNoYXJhY3RlclJhbmdlKCkgY29uc3Q7CiAKICNpZiBQTEFURk9STShNQUMp
CiAgICAgUmV0YWluUHRyPEFYVGV4dE1hcmtlclJhbmdlUmVmPiBwbGF0Zm9ybURhdGEoKSBjb25z
dDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eU9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlP
YmplY3QuY3BwCmluZGV4IDA2ODU2ZmE3MzJhZC4uOThhNjNkMzMxMmY1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKQEAg
LTQwNSwzOSArNDA1LDMyIEBAIHN0ZDo6b3B0aW9uYWw8U2ltcGxlUmFuZ2U+IEFjY2Vzc2liaWxp
dHlPYmplY3Q6Om1pc3NwZWxsaW5nUmFuZ2UoY29uc3QgU2ltcGxlUmFuCiAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKIH0KIAotYm9vbCBBY2Nlc3NpYmlsaXR5T2JqZWN0Ojppc05vZGVGb3JDb21w
b3NpdGlvbihjb25zdCBFZGl0b3ImIGVkaXRvcikgY29uc3QKLXsKLSAgICBXZWFrUHRyIGNvbXBv
c2l0aW9uTm9kZSA9IGVkaXRvci5jb21wb3NpdGlvbk5vZGUoKTsKLSAgICBpZiAoIWNvbXBvc2l0
aW9uTm9kZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgV2Vha1B0ciBjYWNoZSA9IGF4
T2JqZWN0Q2FjaGUoKTsKLSAgICBpZiAoIWNhY2hlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBpZiAoYXV0byogY29tcG9zaXRpb25PYmplY3QgPSBjYWNoZS0+dGV4dENvbXBvc2l0aW9u
T2JqZWN0Rm9yTm9kZSgqY29tcG9zaXRpb25Ob2RlKSkKLSAgICAgICAgcmV0dXJuIGNvbXBvc2l0
aW9uT2JqZWN0LT5vYmplY3RJRCgpID09IG9iamVjdElEKCk7Ci0KLSAgICByZXR1cm4gZmFsc2U7
Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8Q2hhcmFjdGVyUmFuZ2U+IEFjY2Vzc2liaWxpdHlPYmplY3Q6
OnRleHRJbnB1dE1hcmtlZFJhbmdlKCkgY29uc3QKK0FYVGV4dE1hcmtlclJhbmdlIEFjY2Vzc2li
aWxpdHlPYmplY3Q6OnRleHRJbnB1dE1hcmtlZFRleHRNYXJrZXJSYW5nZSgpIGNvbnN0CiB7CiAg
ICAgV2Vha1B0ciBub2RlID0gdGhpcy0+bm9kZSgpOwogICAgIGlmICghbm9kZSkKLSAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIGF1dG8qIGZy
YW1lID0gbm9kZS0+ZG9jdW1lbnQoKS5mcmFtZSgpOwogICAgIGlmICghZnJhbWUpCi0gICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBhdXRvKiBj
YWNoZSA9IGF4T2JqZWN0Q2FjaGUoKTsKKyAgICBpZiAoIWNhY2hlKQorICAgICAgICByZXR1cm4g
eyB9OwogCiAgICAgYXV0byYgZWRpdG9yID0gZnJhbWUtPmVkaXRvcigpOwotICAgIGF1dG8gcmFu
Z2UgPSBlZGl0b3IuY29tcG9zaXRpb25SYW5nZSgpOwotICAgIGlmICghcmFuZ2UgfHwgIWlzTm9k
ZUZvckNvbXBvc2l0aW9uKGVkaXRvcikpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Cisg
ICAgYXV0byogb2JqZWN0ID0gY2FjaGUtPmdldE9yQ3JlYXRlKGVkaXRvci5jb21wb3NpdGlvbk5v
ZGUoKSk7CisgICAgaWYgKCFvYmplY3QpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBpZiAo
YXV0byogb2JzZXJ2YWJsZU9iamVjdCA9IG9iamVjdC0+b2JzZXJ2YWJsZU9iamVjdCgpKQorICAg
ICAgICBvYmplY3QgPSBvYnNlcnZhYmxlT2JqZWN0OworCisgICAgaWYgKG9iamVjdC0+b2JqZWN0
SUQoKSAhPSBvYmplY3RJRCgpKQorICAgICAgICByZXR1cm4geyB9OwogCi0gICAgYXV0byBzY29w
ZSA9IG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cygqbm9kZSk7Ci0gICAgcmV0dXJuIGNo
YXJhY3RlclJhbmdlKHNjb3BlLCAqcmFuZ2UpOworICAgIHJldHVybiB7IGVkaXRvci5jb21wb3Np
dGlvblJhbmdlKCkgfTsKIH0KIAogdW5zaWduZWQgQWNjZXNzaWJpbGl0eU9iamVjdDo6YmxvY2tx
dW90ZUxldmVsKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eU9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5T2JqZWN0LmgKaW5kZXggODlmMTFkZTNkMTUyLi5lZmZiMmQ0YThiYTggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVj
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVj
dC5oCkBAIC0yNDIsNyArMjQyLDcgQEAgcHVibGljOgogICAgIGJvb2wgaGFzU2FtZVN0eWxlKGNv
bnN0IEFYQ29yZU9iamVjdCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAg
Ym9vbCBoYXNVbmRlcmxpbmUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQogICAg
IGJvb2wgaGFzSGlnaGxpZ2h0aW5nKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgc3RkOjpvcHRpb25h
bDxDaGFyYWN0ZXJSYW5nZT4gdGV4dElucHV0TWFya2VkUmFuZ2UoKSBjb25zdCBmaW5hbDsKKyAg
ICBBWFRleHRNYXJrZXJSYW5nZSB0ZXh0SW5wdXRNYXJrZWRUZXh0TWFya2VyUmFuZ2UoKSBjb25z
dCBmaW5hbDsKIAogICAgIGJvb2wgc3VwcG9ydHNEYXRldGltZUF0dHJpYnV0ZSgpIGNvbnN0IG92
ZXJyaWRlOwogICAgIFN0cmluZyBkYXRldGltZUF0dHJpYnV0ZVZhbHVlKCkgY29uc3Qgb3ZlcnJp
ZGU7CkBAIC04MTYsOCArODE2LDYgQEAgcHJpdmF0ZToKICAgICAvLyBTcGVjaWFsIGhhbmRsaW5n
IG9mIGNsaWNrIHBvaW50IGZvciBsaW5rcy4KICAgICBJbnRQb2ludCBsaW5rQ2xpY2tQb2ludCgp
OwogCi0gICAgYm9vbCBpc05vZGVGb3JDb21wb3NpdGlvbihjb25zdCBFZGl0b3ImKSBjb25zdDsK
LQogcHJvdGVjdGVkOiAvLyBGSVhNRTogTWFrZSB0aGUgZGF0YSBtZW1iZXJzIHByaXZhdGUuCiAg
ICAgQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIG1fY2hpbGRyZW47CiAgICAgbXV0YWJsZSBi
b29sIG1fY2hpbGRyZW5Jbml0aWFsaXplZCB7IGZhbHNlIH07CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3RJbnRlcmZhY2UuaCBiL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdEludGVyZmFjZS5o
CmluZGV4IDIzMzBmYjIxNzVlZS4uNzUyYTY1MDZlMGE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3RJbnRlcmZhY2UuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3RJbnRlcmZhY2Uu
aApAQCAtOTg4LDcgKzk4OCw3IEBAIHB1YmxpYzoKICAgICBib29sIGlzU3RhdGljVGV4dCgpIGNv
bnN0IHsgcmV0dXJuIHJvbGVWYWx1ZSgpID09IEFjY2Vzc2liaWxpdHlSb2xlOjpTdGF0aWNUZXh0
OyB9CiAgICAgdmlydHVhbCBib29sIGhhc1VuZGVybGluZSgpIGNvbnN0ID0gMDsKICAgICB2aXJ0
dWFsIGJvb2wgaGFzSGlnaGxpZ2h0aW5nKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgc3RkOjpv
cHRpb25hbDxDaGFyYWN0ZXJSYW5nZT4gdGV4dElucHV0TWFya2VkUmFuZ2UoKSBjb25zdCA9IDA7
CisgICAgdmlydHVhbCBBWFRleHRNYXJrZXJSYW5nZSB0ZXh0SW5wdXRNYXJrZWRUZXh0TWFya2Vy
UmFuZ2UoKSBjb25zdCA9IDA7CiAKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNEYXRldGltZUF0
dHJpYnV0ZSgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIFN0cmluZyBkYXRldGltZUF0dHJpYnV0
ZVZhbHVlKCkgY29uc3QgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9jb2NvYS9BWFRleHRNYXJrZXJDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvY29jb2EvQVhUZXh0TWFya2VyQ29jb2EubW0KaW5kZXggNDk1ZjQzZjdjOWIzLi4wMTky
NjIxMWRkMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvY29jb2Ev
QVhUZXh0TWFya2VyQ29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9j
b2NvYS9BWFRleHRNYXJrZXJDb2NvYS5tbQpAQCAtOTMsMTUgKzkzLDcgQEAgUmV0YWluUHRyPEFY
VGV4dE1hcmtlclJhbmdlUmVmPiBBWFRleHRNYXJrZXJSYW5nZTo6cGxhdGZvcm1EYXRhKCkgY29u
c3QKIAogc3RkOjpvcHRpb25hbDxOU1JhbmdlPiBBWFRleHRNYXJrZXJSYW5nZTo6bnNSYW5nZSgp
IGNvbnN0CiB7Ci0gICAgaWYgKG1fc3RhcnQubV9kYXRhLm9iamVjdElEICE9IG1fZW5kLm1fZGF0
YS5vYmplY3RJRAotICAgICAgICB8fCBtX3N0YXJ0Lm1fZGF0YS50cmVlSUQgIT0gbV9lbmQubV9k
YXRhLnRyZWVJRCkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgIGlmIChtX3N0
YXJ0Lm1fZGF0YS5jaGFyYWN0ZXJPZmZzZXQgPiBtX2VuZC5tX2RhdGEuY2hhcmFjdGVyT2Zmc2V0
KSB7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OwotICAgIH0KLSAgICByZXR1cm4gTlNNYWtlUmFuZ2UobV9zdGFydC5tX2RhdGEuY2hh
cmFjdGVyT2Zmc2V0LCBtX2VuZC5tX2RhdGEuY2hhcmFjdGVyT2Zmc2V0IC0gbV9zdGFydC5tX2Rh
dGEuY2hhcmFjdGVyT2Zmc2V0KTsKKyAgICByZXR1cm4gY2hhcmFjdGVyUmFuZ2UoKTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9jb2NvYS9BY2Nlc3NpYmlsaXR5T2JqZWN0Q29jb2EubW0gYi9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L2NvY29hL0FjY2Vzc2liaWxpdHlPYmplY3RDb2NvYS5tbQppbmRleCBi
ZTA4YjkyNDQ2NzguLmIxOWZmODI0NTRhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9jb2NvYS9BY2Nlc3NpYmlsaXR5T2JqZWN0Q29jb2EubW0KKysrIGIvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9jb2NvYS9BY2Nlc3NpYmlsaXR5T2JqZWN0Q29jb2EubW0K
QEAgLTMzNCwxMSArMzM0LDExIEBAIFJldGFpblB0cjxOU0FycmF5PiBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0Ojpjb250ZW50Rm9yUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlCiAgICAgICAgIGlm
IChpdC50ZXh0KCkubGVuZ3RoKCkpIHsKICAgICAgICAgICAgIGF1dG8gbGlzdE1hcmtlclRleHQg
PSBsaXN0TWFya2VyVGV4dEZvck5vZGVBbmRQb3NpdGlvbigmbm9kZSwgbWFrZUNvbnRhaW5lck9m
ZnNldFBvc2l0aW9uKGl0LnJhbmdlKCkuc3RhcnQpKTsKICAgICAgICAgICAgIGlmICghbGlzdE1h
cmtlclRleHQuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGF1dG8gYXR0clN0cmlu
ZyA9IGF0dHJpYnV0ZWRTdHJpbmdDcmVhdGUoJm5vZGUsIGxpc3RNYXJrZXJUZXh0LCBTcGVsbENo
ZWNrOjpObykpCisgICAgICAgICAgICAgICAgaWYgKGF1dG8gYXR0clN0cmluZyA9IGF0dHJpYnV0
ZWRTdHJpbmdDcmVhdGUoJm5vZGUsIGxpc3RNYXJrZXJUZXh0LCBpdC5yYW5nZSgpLCBTcGVsbENo
ZWNrOjpObykpCiAgICAgICAgICAgICAgICAgICAgIFtyZXN1bHQgYWRkT2JqZWN0OmF0dHJTdHJp
bmcuZ2V0KCldOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoYXV0byBhdHRyU3Ry
aW5nID0gYXR0cmlidXRlZFN0cmluZ0NyZWF0ZSgmbm9kZSwgaXQudGV4dCgpLCBzcGVsbENoZWNr
KSkKKyAgICAgICAgICAgIGlmIChhdXRvIGF0dHJTdHJpbmcgPSBhdHRyaWJ1dGVkU3RyaW5nQ3Jl
YXRlKCZub2RlLCBpdC50ZXh0KCksIGl0LnJhbmdlKCksIHNwZWxsQ2hlY2spKQogICAgICAgICAg
ICAgICAgIFtyZXN1bHQgYWRkT2JqZWN0OmF0dHJTdHJpbmcuZ2V0KCldOwogICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgaWYgKE5vZGUqIHJlcGxhY2VkTm9kZSA9IGl0Lm5vZGUoKSkgewpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvQWNjZXNzaWJpbGl0
eU9iamVjdElPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL0FjY2Vzc2li
aWxpdHlPYmplY3RJT1MubW0KaW5kZXggY2I5ZWM3ZGM1M2ZjLi43OWMwMmZkMzJkMDEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL0FjY2Vzc2liaWxpdHlPYmpl
Y3RJT1MubW0KKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvQWNjZXNzaWJp
bGl0eU9iamVjdElPUy5tbQpAQCAtMjA4LDcgKzIwOCw3IEBAIHN0YXRpYyB2b2lkIGF0dHJpYnV0
ZVN0cmluZ1NldFN0eWxlKE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcgKmF0dHJTdHJpbmcsIFJl
bmRlCiAgICAgICAgIFthdHRyU3RyaW5nIGFkZEF0dHJpYnV0ZTpVSUFjY2Vzc2liaWxpdHlUZXh0
QXR0cmlidXRlQ29udGV4dCB2YWx1ZTpVSUFjY2Vzc2liaWxpdHlUZXh0dWFsQ29udGV4dFNvdXJj
ZUNvZGUgcmFuZ2U6cmFuZ2VdOwogfQogCi1SZXRhaW5QdHI8TlNBdHRyaWJ1dGVkU3RyaW5nPiBh
dHRyaWJ1dGVkU3RyaW5nQ3JlYXRlKE5vZGUqIG5vZGUsIFN0cmluZ1ZpZXcgdGV4dCwgQVhDb3Jl
T2JqZWN0OjpTcGVsbENoZWNrKQorUmV0YWluUHRyPE5TQXR0cmlidXRlZFN0cmluZz4gYXR0cmli
dXRlZFN0cmluZ0NyZWF0ZShOb2RlKiBub2RlLCBTdHJpbmdWaWV3IHRleHQsIGNvbnN0IFNpbXBs
ZVJhbmdlJiwgQVhDb3JlT2JqZWN0OjpTcGVsbENoZWNrKQogewogICAgIC8vIFNraXAgaW52aXNp
YmxlIHRleHQuCiAgICAgYXV0byogcmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRl
ZE9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9B
WElzb2xhdGVkT2JqZWN0LmNwcAppbmRleCBhMzRhZDk1MGFmNjAuLjE5Y2JmZTMyYzc4NiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29s
YXRlZE9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRl
ZHRyZWUvQVhJc29sYXRlZE9iamVjdC5jcHAKQEAgLTE2MTEsNiArMTYxMSwxNyBAQCBib29sIEFY
SXNvbGF0ZWRPYmplY3Q6Omhhc1NhbWVTdHlsZShjb25zdCBBWENvcmVPYmplY3QmIG90aGVyT2Jq
ZWN0KSBjb25zdAogICAgIH0pOwogfQogCitBWFRleHRNYXJrZXJSYW5nZSBBWElzb2xhdGVkT2Jq
ZWN0Ojp0ZXh0SW5wdXRNYXJrZWRUZXh0TWFya2VyUmFuZ2UoKSBjb25zdAoreworICAgIGF1dG8g
dmFsdWUgPSBvcHRpb25hbEF0dHJpYnV0ZVZhbHVlPHN0ZDo6cGFpcjxBWElELCBDaGFyYWN0ZXJS
YW5nZT4+KEFYUHJvcGVydHlOYW1lOjpUZXh0SW5wdXRNYXJrZWRUZXh0TWFya2VyUmFuZ2UpOwor
ICAgIGlmICghdmFsdWUpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBhdXRvIHN0YXJ0ID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHZhbHVlLT5zZWNvbmQubG9jYXRpb24pOworICAgIGF1dG8g
ZW5kID0gc3RhcnQgKyBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odmFsdWUtPnNlY29uZC5sZW5ndGgp
OworICAgIHJldHVybiB7IHRyZWUoKS0+dHJlZUlEKCksIHZhbHVlLT5maXJzdCwgc3RhcnQsIGVu
ZCB9OworfQorCiAvLyBUaGUgYXR0cmlidXRlIHRoaXMgdmFsdWUgaXMgZXhwb3NlZCBhcyBpcyBu
b3QgdXNlZCBieSBWb2ljZU92ZXIgb3IgYW55IG90aGVyIEFYIGNsaWVudCBvbiBtYWNPUywgc28g
d2UgaW50ZW50aW9uYWxseSBkb24ndCBjYWNoZSBpdC4KIC8vIFJlLXZpc2l0IGlmIElUTSBleHBh
bmRzIHRvIG1vcmUgcGxhdGZvcm1zLCBvciBpZiBBWCBjbGllbnRzIG5lZWQgdG8gc3RhcnQgdXNp
bmcgdGhpcy4KIFN0cmluZyBBWElzb2xhdGVkT2JqZWN0OjpsaW5rUmVsVmFsdWUoKSBjb25zdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJ
c29sYXRlZE9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRy
ZWUvQVhJc29sYXRlZE9iamVjdC5oCmluZGV4IGM3OWM4MDBmYjJlNC4uMTA3NDllZTM1YjJmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElz
b2xhdGVkT2JqZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRl
ZHRyZWUvQVhJc29sYXRlZE9iamVjdC5oCkBAIC00NTcsNyArNDU3LDcgQEAgcHJpdmF0ZToKICAg
ICBib29sIGhhc1NhbWVTdHlsZShjb25zdCBBWENvcmVPYmplY3QmKSBjb25zdCBvdmVycmlkZTsK
ICAgICBib29sIGhhc1VuZGVybGluZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRy
aWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SGFzVW5kZXJsaW5lKTsgfQogICAgIGJvb2wgaGFz
SGlnaGxpZ2h0aW5nKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVl
KEFYUHJvcGVydHlOYW1lOjpIYXNIaWdobGlnaHRpbmcpOyB9Ci0gICAgc3RkOjpvcHRpb25hbDxD
aGFyYWN0ZXJSYW5nZT4gdGV4dElucHV0TWFya2VkUmFuZ2UoKSBjb25zdCBmaW5hbCB7IHJldHVy
biBvcHRpb25hbEF0dHJpYnV0ZVZhbHVlPENoYXJhY3RlclJhbmdlPihBWFByb3BlcnR5TmFtZTo6
VGV4dElucHV0TWFya2VkUmFuZ2UpOyB9CisgICAgQVhUZXh0TWFya2VyUmFuZ2UgdGV4dElucHV0
TWFya2VkVGV4dE1hcmtlclJhbmdlKCkgY29uc3QgZmluYWw7CiAgICAgRWxlbWVudCogZWxlbWVu
dCgpIGNvbnN0IG92ZXJyaWRlOwogICAgIE5vZGUqIG5vZGUoKSBjb25zdCBvdmVycmlkZTsKICAg
ICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyKCkgY29uc3Qgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkVHJlZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVk
VHJlZS5jcHAKaW5kZXggMTYwOTAxNDA5OGUxLi5iY2YzYzdhMjE3YTkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRUcmVlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xh
dGVkVHJlZS5jcHAKQEAgLTU4MCwxMyArNTgwLDE0IEBAIHZvaWQgQVhJc29sYXRlZFRyZWU6OnVw
ZGF0ZU5vZGVQcm9wZXJ0aWVzKEFYQ29yZU9iamVjdCYgYXhPYmplY3QsIGNvbnN0IFZlY3RvcjxB
CiAgICAgICAgIGNhc2UgQVhQcm9wZXJ0eU5hbWU6OlN1cHBvcnRzU2V0U2l6ZToKICAgICAgICAg
ICAgIHByb3BlcnR5TWFwLnNldChBWFByb3BlcnR5TmFtZTo6U3VwcG9ydHNTZXRTaXplLCBheE9i
amVjdC5zdXBwb3J0c1NldFNpemUoKSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBBWFByb3BlcnR5TmFtZTo6VGV4dElucHV0TWFya2VkUmFuZ2U6Ci0gICAgICAgICAgICAvLyBG
SVhNRTogV2Ugc2hvdWxkIGhhdmUgYSBtZWNoYW5pc20gdG8gcmVtb3ZlIGEgcHJvcGVydHkgZnJv
bSB0aGUgbWFwIGZvciB3aGVuIHRleHRJbnB1dE1hcmtlZFJhbmdlIGlzIHN0ZDo6bnVsbG9wdC4K
LSAgICAgICAgICAgIGlmIChhdXRvIHRleHRJbnB1dE1hcmtlZFJhbmdlID0gYXhPYmplY3QudGV4
dElucHV0TWFya2VkUmFuZ2UoKSkKLSAgICAgICAgICAgICAgICBwcm9wZXJ0eU1hcC5zZXQoQVhQ
cm9wZXJ0eU5hbWU6OlRleHRJbnB1dE1hcmtlZFJhbmdlLCAqdGV4dElucHV0TWFya2VkUmFuZ2Up
OwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHByb3BlcnR5TWFwLnNldChBWFBy
b3BlcnR5TmFtZTo6VGV4dElucHV0TWFya2VkUmFuZ2UsIG51bGxwdHIpOworICAgICAgICBjYXNl
IEFYUHJvcGVydHlOYW1lOjpUZXh0SW5wdXRNYXJrZWRUZXh0TWFya2VyUmFuZ2U6IHsKKyAgICAg
ICAgICAgIHN0ZDo6cGFpcjxBWElELCBDaGFyYWN0ZXJSYW5nZT4gdmFsdWU7CisgICAgICAgICAg
ICBhdXRvIHJhbmdlID0gYXhPYmplY3QudGV4dElucHV0TWFya2VkVGV4dE1hcmtlclJhbmdlKCk7
CisgICAgICAgICAgICBpZiAoYXV0byBjaGFyYWN0ZXJSYW5nZSA9IHJhbmdlLmNoYXJhY3RlclJh
bmdlKCk7IHJhbmdlICYmIGNoYXJhY3RlclJhbmdlKQorICAgICAgICAgICAgICAgIHZhbHVlID0g
eyByYW5nZS5zdGFydCgpLm9iamVjdElEKCksICpjaGFyYWN0ZXJSYW5nZSB9OworICAgICAgICAg
ICAgcHJvcGVydHlNYXAuc2V0KEFYUHJvcGVydHlOYW1lOjpUZXh0SW5wdXRNYXJrZWRUZXh0TWFy
a2VyUmFuZ2UsIHZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAg
IGNhc2UgQVhQcm9wZXJ0eU5hbWU6OlVSTDoKICAgICAgICAgICAgIHByb3BlcnR5TWFwLnNldChB
WFByb3BlcnR5TmFtZTo6VVJMLCBheE9iamVjdC51cmwoKS5pc29sYXRlZENvcHkoKSk7CiAgICAg
ICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
aXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRUcmVlLmggYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkVHJlZS5oCmluZGV4IDY0YzRhZDgzZWJjNC4uZDhk
NTJhOGRjZWY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xh
dGVkdHJlZS9BWElzb2xhdGVkVHJlZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRUcmVlLmgKQEAgLTIyNiw3ICsyMjYsNyBAQCBlbnVt
IGNsYXNzIEFYUHJvcGVydHlOYW1lIDogdWludDE2X3QgewogICAgIFN1cHBvcnRzU2V0U2l6ZSwK
ICAgICBUYWJsZUxldmVsLAogICAgIFRleHRDb250ZW50LAotICAgIFRleHRJbnB1dE1hcmtlZFJh
bmdlLAorICAgIFRleHRJbnB1dE1hcmtlZFRleHRNYXJrZXJSYW5nZSwKICAgICBUaXRsZSwKICAg
ICBUaXRsZUF0dHJpYnV0ZVZhbHVlLAogICAgIFRpdGxlVUlFbGVtZW50LApAQCAtMjM5LDcgKzIz
OSw3IEBAIGVudW0gY2xhc3MgQVhQcm9wZXJ0eU5hbWUgOiB1aW50MTZfdCB7CiAgICAgVmlzaWJs
ZVJvd3MsCiB9OwogCi11c2luZyBBWFByb3BlcnR5VmFsdWVWYXJpYW50ID0gc3RkOjp2YXJpYW50
PHN0ZDo6bnVsbHB0cl90LCBBWElELCBTdHJpbmcsIGJvb2wsIGludCwgdW5zaWduZWQsIGRvdWJs
ZSwgZmxvYXQsIHVpbnQ2NF90LCBBY2Nlc3NpYmlsaXR5QnV0dG9uU3RhdGUsIENvbG9yLCBVUkws
IExheW91dFJlY3QsIEZsb2F0UG9pbnQsIEZsb2F0UmVjdCwgSW50UG9pbnQsIEludFJlY3QsIFBB
TDo6U2Vzc2lvbklELCBzdGQ6OnBhaXI8dW5zaWduZWQsIHVuc2lnbmVkPiwgVmVjdG9yPEFjY2Vz
c2liaWxpdHlUZXh0PiwgVmVjdG9yPEFYSUQ+LCBWZWN0b3I8c3RkOjpwYWlyPEFYSUQsIEFYSUQ+
PiwgVmVjdG9yPFN0cmluZz4sIFBhdGgsIE9wdGlvblNldDxBWEFuY2VzdG9yRmxhZz4sIFJldGFp
blB0cjxOU0F0dHJpYnV0ZWRTdHJpbmc+LCBJbnNpZGVMaW5rLCBWZWN0b3I8VmVjdG9yPEFYSUQ+
PiwgQ2hhcmFjdGVyUmFuZ2U+OwordXNpbmcgQVhQcm9wZXJ0eVZhbHVlVmFyaWFudCA9IHN0ZDo6
dmFyaWFudDxzdGQ6Om51bGxwdHJfdCwgQVhJRCwgU3RyaW5nLCBib29sLCBpbnQsIHVuc2lnbmVk
LCBkb3VibGUsIGZsb2F0LCB1aW50NjRfdCwgQWNjZXNzaWJpbGl0eUJ1dHRvblN0YXRlLCBDb2xv
ciwgVVJMLCBMYXlvdXRSZWN0LCBGbG9hdFBvaW50LCBGbG9hdFJlY3QsIEludFBvaW50LCBJbnRS
ZWN0LCBQQUw6OlNlc3Npb25JRCwgc3RkOjpwYWlyPHVuc2lnbmVkLCB1bnNpZ25lZD4sIFZlY3Rv
cjxBY2Nlc3NpYmlsaXR5VGV4dD4sIFZlY3RvcjxBWElEPiwgVmVjdG9yPHN0ZDo6cGFpcjxBWElE
LCBBWElEPj4sIFZlY3RvcjxTdHJpbmc+LCBQYXRoLCBPcHRpb25TZXQ8QVhBbmNlc3RvckZsYWc+
LCBSZXRhaW5QdHI8TlNBdHRyaWJ1dGVkU3RyaW5nPiwgSW5zaWRlTGluaywgVmVjdG9yPFZlY3Rv
cjxBWElEPj4sIENoYXJhY3RlclJhbmdlLCBzdGQ6OnBhaXI8QVhJRCwgQ2hhcmFjdGVyUmFuZ2U+
PjsKIHVzaW5nIEFYUHJvcGVydHlNYXAgPSBIYXNoTWFwPEFYUHJvcGVydHlOYW1lLCBBWFByb3Bl
cnR5VmFsdWVWYXJpYW50LCBJbnRIYXNoPEFYUHJvcGVydHlOYW1lPiwgV1RGOjpTdHJvbmdFbnVt
SGFzaFRyYWl0czxBWFByb3BlcnR5TmFtZT4+OwogCiBzdHJ1Y3QgQVhQcm9wZXJ0eUNoYW5nZSB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9BWE9iamVjdENh
Y2hlTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvQVhPYmplY3RDYWNo
ZU1hYy5tbQppbmRleCBiODg1YTk3ZDczMjAuLmU1ZDlkYTA5ODQxMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvQVhPYmplY3RDYWNoZU1hYy5tbQorKysgYi9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9BWE9iamVjdENhY2hlTWFjLm1tCkBAIC0x
MjcsNiArMTI3LDE0IEBACiAjZGVmaW5lIGtBWERyYWdnaW5nRGVzdGluYXRpb25EcmFnTm90QWNj
ZXB0ZWROb3RpZmljYXRpb24gQ0ZTVFIoIkFYRHJhZ2dpbmdEZXN0aW5hdGlvbkRyYWdOb3RBY2Nl
cHRlZCIpCiAjZW5kaWYKIAorI2lmbmRlZiBOU0FjY2Vzc2liaWxpdHlUZXh0SW5wdXRNYXJraW5n
U2Vzc2lvbkJlZ2FuTm90aWZpY2F0aW9uCisjZGVmaW5lIE5TQWNjZXNzaWJpbGl0eVRleHRJbnB1
dE1hcmtpbmdTZXNzaW9uQmVnYW5Ob3RpZmljYXRpb24gQCJBWFRleHRJbnB1dE1hcmtpbmdTZXNz
aW9uQmVnYW4iCisjZW5kaWYKKworI2lmbmRlZiBOU0FjY2Vzc2liaWxpdHlUZXh0SW5wdXRNYXJr
aW5nU2Vzc2lvbkVuZGVkTm90aWZpY2F0aW9uCisjZGVmaW5lIE5TQWNjZXNzaWJpbGl0eVRleHRJ
bnB1dE1hcmtpbmdTZXNzaW9uRW5kZWROb3RpZmljYXRpb24gQCJBWFRleHRJbnB1dE1hcmtpbmdT
ZXNzaW9uRW5kZWQiCisjZW5kaWYKKwogLy8gVmVyeSBsYXJnZSBzdHJpbmdzIGNhbiBuZWdhdGl2
ZWx5IGltcGFjdCB0aGUgcGVyZm9ybWFuY2Ugb2Ygbm90aWZpY2F0aW9ucywgc28gdGhpcyBsZW5n
dGggaXMgY2hvc2VuIHRvIHRyeSB0byBmaXQgYW4gYXZlcmFnZSBwYXJhZ3JhcGggb3IgbGluZSBv
ZiB0ZXh0LCBidXQgbm90IGFsbG93IHN0cmluZ3MgdG8gYmUgbGFyZ2UgZW5vdWdoIHRvIGh1cnQg
cGVyZm9ybWFuY2UuCiBzdGF0aWMgY29uc3QgTlNVSW50ZWdlciBBWFZhbHVlQ2hhbmdlVHJ1bmNh
dGlvbkxlbmd0aCA9IDEwMDA7CiAKQEAgLTQzMSw2ICs0MzksMTIgQEAgdm9pZCBBWE9iamVjdENh
Y2hlOjpwb3N0UGxhdGZvcm1Ob3RpZmljYXRpb24oQVhDb3JlT2JqZWN0KiBvYmplY3QsIEFYTm90
aWZpY2F0aW8KICAgICBjYXNlIEFYRHJhZ2dpbmdFeGl0ZWREcm9wWm9uZToKICAgICAgICAgbWFj
Tm90aWZpY2F0aW9uID0gKGlkKWtBWERyYWdnaW5nRGVzdGluYXRpb25EcmFnTm90QWNjZXB0ZWRO
b3RpZmljYXRpb247CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgQVhUZXh0Q29tcG9zaXRpb25C
ZWdhbjoKKyAgICAgICAgbWFjTm90aWZpY2F0aW9uID0gTlNBY2Nlc3NpYmlsaXR5VGV4dElucHV0
TWFya2luZ1Nlc3Npb25CZWdhbk5vdGlmaWNhdGlvbjsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBBWFRleHRDb21wb3NpdGlvbkVuZGVkOgorICAgICAgICBtYWNOb3RpZmljYXRpb24gPSBOU0Fj
Y2Vzc2liaWxpdHlUZXh0SW5wdXRNYXJraW5nU2Vzc2lvbkVuZGVkTm90aWZpY2F0aW9uOworICAg
ICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm47CiAgICAgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvQWNjZXNzaWJpbGl0eU9iamVj
dE1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL0FjY2Vzc2liaWxpdHlP
YmplY3RNYWMubW0KaW5kZXggNDExYzA1Mjk4YmNjLi40MDgxNTc0OWNjYmMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL0FjY2Vzc2liaWxpdHlPYmplY3RNYWMu
bW0KKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvQWNjZXNzaWJpbGl0eU9i
amVjdE1hYy5tbQpAQCAtNjQ0LDIzICs2NDQsMzAgQEAgc3RhdGljIHZvaWQgYXR0cmlidXRlZFN0
cmluZ1NldEVsZW1lbnQoTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyAqYXR0clN0cmluZywgTlMK
ICAgICAgICAgW2F0dHJTdHJpbmcgYWRkQXR0cmlidXRlOmF0dHJpYnV0ZSB2YWx1ZTooX19icmlk
Z2UgaWQpYXhFbGVtZW50LmdldCgpIHJhbmdlOnJhbmdlXTsKIH0KIAotc3RhdGljIHZvaWQgYXR0
cmlidXRlZFN0cmluZ1NldENvbXBvc2l0aW9uQXR0cmlidXRlcyhOU011dGFibGVBdHRyaWJ1dGVk
U3RyaW5nICphdHRyU3RyaW5nLCBOb2RlJiBub2RlKQorc3RhdGljIHZvaWQgYXR0cmlidXRlZFN0
cmluZ1NldENvbXBvc2l0aW9uQXR0cmlidXRlcyhOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nICph
dHRyU3RyaW5nLCBOb2RlJiBub2RlLCBjb25zdCBTaW1wbGVSYW5nZSYgdGV4dFNpbXBsZVJhbmdl
KQogewogI2lmIEhBVkUoSU5MSU5FX1BSRURJQ1RJT05TKQogICAgIGF1dG8mIGVkaXRvciA9IG5v
ZGUuZG9jdW1lbnQoKS5lZGl0b3IoKTsKICAgICBpZiAoJm5vZGUgIT0gZWRpdG9yLmNvbXBvc2l0
aW9uTm9kZSgpKQogICAgICAgICByZXR1cm47CiAKKyAgICBhdXRvIHNjb3BlID0gbWFrZVJhbmdl
U2VsZWN0aW5nTm9kZUNvbnRlbnRzKG5vZGUpOworICAgIGF1dG8gdGV4dFJhbmdlID0gY2hhcmFj
dGVyUmFuZ2Uoc2NvcGUsIHRleHRTaW1wbGVSYW5nZSk7CisKICAgICBhdXRvJiBhbm5vdGF0aW9u
cyA9IGVkaXRvci5jdXN0b21Db21wb3NpdGlvbkFubm90YXRpb25zKCk7CiAgICAgaWYgKGF1dG8g
aXQgPSBhbm5vdGF0aW9ucy5maW5kKE5TVGV4dENvbXBsZXRpb25BdHRyaWJ1dGVOYW1lKTsgaXQg
IT0gYW5ub3RhdGlvbnMuZW5kKCkpIHsKLSAgICAgICAgZm9yIChhdXRvJiByYW5nZSA6IGl0LT52
YWx1ZSkgewotICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZWRTdHJpbmdDb250YWluc1JhbmdlKGF0
dHJTdHJpbmcsIHJhbmdlKSkKLSAgICAgICAgICAgICAgICBhdHRyaWJ1dGVkU3RyaW5nU2V0TnVt
YmVyKGF0dHJTdHJpbmcsIE5TQWNjZXNzaWJpbGl0eVRleHRDb21wbGV0aW9uQXR0cmlidXRlLCBA
WUVTLCByYW5nZSk7CisgICAgICAgIGZvciAoYXV0byYgYW5ub3RhdGlvblJhbmdlIDogaXQtPnZh
bHVlKSB7CisgICAgICAgICAgICBhdXRvIGludGVyc2VjdGlvblJhbmdlID0gTlNJbnRlcnNlY3Rp
b25SYW5nZSh0ZXh0UmFuZ2UsIGFubm90YXRpb25SYW5nZSk7CisgICAgICAgICAgICBpZiAoaW50
ZXJzZWN0aW9uUmFuZ2UubGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgYXV0byBjb21wbGV0aW9u
UmFuZ2UgPSBOU01ha2VSYW5nZShpbnRlcnNlY3Rpb25SYW5nZS5sb2NhdGlvbiAtIHRleHRSYW5n
ZS5sb2NhdGlvbiwgaW50ZXJzZWN0aW9uUmFuZ2UubGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBh
dHRyaWJ1dGVkU3RyaW5nU2V0TnVtYmVyKGF0dHJTdHJpbmcsIE5TQWNjZXNzaWJpbGl0eVRleHRD
b21wbGV0aW9uQXR0cmlidXRlLCBAWUVTLCBjb21wbGV0aW9uUmFuZ2UpOworICAgICAgICAgICAg
fQogICAgICAgICB9CiAgICAgfQogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oYXR0clN0cmluZyk7
CiAgICAgVU5VU0VEX1BBUkFNKG5vZGUpOworICAgIFVOVVNFRF9QQVJBTSh0ZXh0U2ltcGxlUmFu
Z2UpOwogI2VuZGlmCiB9CiAKQEAgLTcxNCw3ICs3MjEsNyBAQCB2b2lkIGF0dHJpYnV0ZWRTdHJp
bmdTZXRTcGVsbGluZyhOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nICphdHRyU3RyaW5nLCBOb2Rl
JiBubwogICAgIH0KIH0KIAotUmV0YWluUHRyPE5TQXR0cmlidXRlZFN0cmluZz4gYXR0cmlidXRl
ZFN0cmluZ0NyZWF0ZShOb2RlKiBub2RlLCBTdHJpbmdWaWV3IHRleHQsIEFYQ29yZU9iamVjdDo6
U3BlbGxDaGVjayBzcGVsbENoZWNrKQorUmV0YWluUHRyPE5TQXR0cmlidXRlZFN0cmluZz4gYXR0
cmlidXRlZFN0cmluZ0NyZWF0ZShOb2RlKiBub2RlLCBTdHJpbmdWaWV3IHRleHQsIGNvbnN0IFNp
bXBsZVJhbmdlJiB0ZXh0UmFuZ2UsIEFYQ29yZU9iamVjdDo6U3BlbGxDaGVjayBzcGVsbENoZWNr
KQogewogICAgIGlmICghbm9kZSB8fCAhdGV4dC5sZW5ndGgoKSkKICAgICAgICAgcmV0dXJuIG5p
bDsKQEAgLTczMyw3ICs3NDAsNyBAQCBSZXRhaW5QdHI8TlNBdHRyaWJ1dGVkU3RyaW5nPiBhdHRy
aWJ1dGVkU3RyaW5nQ3JlYXRlKE5vZGUqIG5vZGUsIFN0cmluZ1ZpZXcgdGV4dAogICAgIGF0dHJp
YnV0ZWRTdHJpbmdTZXRCbG9ja3F1b3RlTGV2ZWwocmVzdWx0LmdldCgpLCByZW5kZXJlci5nZXQo
KSwgcmFuZ2UpOwogICAgIGF0dHJpYnV0ZWRTdHJpbmdTZXRFeHBhbmRlZFRleHQocmVzdWx0Lmdl
dCgpLCByZW5kZXJlci5nZXQoKSwgcmFuZ2UpOwogICAgIGF0dHJpYnV0ZWRTdHJpbmdTZXRFbGVt
ZW50KHJlc3VsdC5nZXQoKSwgTlNBY2Nlc3NpYmlsaXR5TGlua1RleHRBdHRyaWJ1dGUsIEFjY2Vz
c2liaWxpdHlPYmplY3Q6OmFuY2hvckVsZW1lbnRGb3JOb2RlKG5vZGUpLCByYW5nZSk7Ci0gICAg
YXR0cmlidXRlZFN0cmluZ1NldENvbXBvc2l0aW9uQXR0cmlidXRlcyhyZXN1bHQuZ2V0KCksICpu
b2RlKTsKKyAgICBhdHRyaWJ1dGVkU3RyaW5nU2V0Q29tcG9zaXRpb25BdHRyaWJ1dGVzKHJlc3Vs
dC5nZXQoKSwgKm5vZGUsIHRleHRSYW5nZSk7CiAgICAgLy8gRG8gc3BlbGxpbmcgbGFzdCBiZWNh
dXNlIGl0IHRlbmRzIHRvIGJyZWFrIHVwIHRoZSByYW5nZS4KICAgICBpZiAoc3BlbGxDaGVjayA9
PSBBWENvcmVPYmplY3Q6OlNwZWxsQ2hlY2s6OlllcykgewogICAgICAgICBpZiAoQVhPYmplY3RD
YWNoZTo6c2hvdWxkU3BlbGxDaGVjaygpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJCYXNlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ckJhc2UuaAppbmRleCAyYzYwNjUxZGU0NjguLmFmMDJlYjdkZTUyZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXJCYXNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXJCYXNlLmgKQEAgLTUzLDcgKzUzLDcgQEAgdm9pZCBhdHRyaWJ1
dGVkU3RyaW5nU2V0TnVtYmVyKE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcgKiwgTlNTdHJpbmcg
KiwgTlNOdW1iZXIKIHZvaWQgYXR0cmlidXRlZFN0cmluZ1NldEZvbnQoTlNNdXRhYmxlQXR0cmli
dXRlZFN0cmluZyAqLCBDVEZvbnRSZWYsIGNvbnN0IE5TUmFuZ2UmKTsKIHZvaWQgYXR0cmlidXRl
ZFN0cmluZ1NldFNwZWxsaW5nKE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcgKiwgTm9kZSYsIFN0
cmluZ1ZpZXcsIGNvbnN0IE5TUmFuZ2UmKTsKIHZvaWQgYXR0cmlidXRlZFN0cmluZ1NldE5lZWRz
U3BlbGxDaGVjayhOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nICosIE5vZGUmKTsKLVJldGFpblB0
cjxOU0F0dHJpYnV0ZWRTdHJpbmc+IGF0dHJpYnV0ZWRTdHJpbmdDcmVhdGUoTm9kZSosIFN0cmlu
Z1ZpZXcsIEFYQ29yZU9iamVjdDo6U3BlbGxDaGVjayk7CitSZXRhaW5QdHI8TlNBdHRyaWJ1dGVk
U3RyaW5nPiBhdHRyaWJ1dGVkU3RyaW5nQ3JlYXRlKE5vZGUqLCBTdHJpbmdWaWV3LCBjb25zdCBT
aW1wbGVSYW5nZSYsIEFYQ29yZU9iamVjdDo6U3BlbGxDaGVjayk7CiB9CiAKIEBpbnRlcmZhY2Ug
V2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJCYXNlIDogTlNPYmplY3QgewpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVj
dFdyYXBwZXJNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQppbmRleCAwMDk3YWIzOTYwNTYuLmJiZjhjZDk3
ZjRiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0KQEAgLTQ4OCw2
ICs0ODgsMTAgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAjZGVmaW5lIE5TQWNjZXNzaWJp
bGl0eVRleHRJbnB1dE1hcmtlZFJhbmdlQXR0cmlidXRlIEAiQVhUZXh0SW5wdXRNYXJrZWRSYW5n
ZSIKICNlbmRpZgogCisjaWZuZGVmIE5TQWNjZXNzaWJpbGl0eVRleHRJbnB1dE1hcmtlZFRleHRN
YXJrZXJSYW5nZUF0dHJpYnV0ZQorI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlUZXh0SW5wdXRNYXJr
ZWRUZXh0TWFya2VyUmFuZ2VBdHRyaWJ1dGUgQCJBWFRleHRJbnB1dE1hcmtlZFRleHRNYXJrZXJS
YW5nZSIKKyNlbmRpZgorCiBAaW1wbGVtZW50YXRpb24gV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdy
YXBwZXIKIAogLSAodm9pZClkZXRhY2gKQEAgLTkxOSw2ICs5MjMsNyBAQCBBTExPV19ERVBSRUNB
VEVEX0lNUExFTUVOVEFUSU9OU19FTkQKICAgICAgICAgTlNBY2Nlc3NpYmlsaXR5RWRpdGFibGVB
bmNlc3RvckF0dHJpYnV0ZSwKICAgICAgICAgTlNBY2Nlc3NpYmlsaXR5SGlnaGVzdEVkaXRhYmxl
QW5jZXN0b3JBdHRyaWJ1dGUsCiAgICAgICAgIE5TQWNjZXNzaWJpbGl0eVRleHRJbnB1dE1hcmtl
ZFJhbmdlQXR0cmlidXRlLAorICAgICAgICBOU0FjY2Vzc2liaWxpdHlUZXh0SW5wdXRNYXJrZWRU
ZXh0TWFya2VyUmFuZ2VBdHRyaWJ1dGUsCiAgICAgXTsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQgc3BpbkJ1dHRvbkNvbW1vbkF0dHJpYnV0ZXMgPSBbXSB7CiAgICAgICAgIGF1dG8gdGVtcEFy
cmF5ID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aEFycmF5OmF0dHJp
YnV0ZXMuZ2V0KCkuZ2V0KCldKTsKQEAgLTIyNDksOCArMjI1NCwxNCBAQCBBTExPV19ERVBSRUNB
VEVEX0lNUExFTUVOVEFUSU9OU19FTkQKICAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJX
aXRoQm9vbDogYmFja2luZ09iamVjdC0+aXNJbmRldGVybWluYXRlKCldOwogCiAgICAgaWYgKFth
dHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlUZXh0SW5wdXRNYXJr
ZWRSYW5nZUF0dHJpYnV0ZV0pIHsKLSAgICAgICAgYXV0byByYW5nZSA9IGJhY2tpbmdPYmplY3Qt
PnRleHRJbnB1dE1hcmtlZFJhbmdlKCk7Ci0gICAgICAgIHJldHVybiByYW5nZSA/IFtOU1ZhbHVl
IHZhbHVlV2l0aFJhbmdlOipyYW5nZV0gOiBuaWw7CisgICAgICAgIGF1dG8gcmFuZ2UgPSBiYWNr
aW5nT2JqZWN0LT50ZXh0SW5wdXRNYXJrZWRUZXh0TWFya2VyUmFuZ2UoKTsKKyAgICAgICAgYXV0
byBuc1JhbmdlID0gcmFuZ2UubnNSYW5nZSgpOworICAgICAgICByZXR1cm4gcmFuZ2UgJiYgbnNS
YW5nZSA/IFtOU1ZhbHVlIHZhbHVlV2l0aFJhbmdlOipuc1JhbmdlXSA6IG5pbDsKKyAgICB9CisK
KyAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVRl
eHRJbnB1dE1hcmtlZFRleHRNYXJrZXJSYW5nZUF0dHJpYnV0ZV0pIHsKKyAgICAgICAgYXV0byBy
YW5nZSA9IGJhY2tpbmdPYmplY3QtPnRleHRJbnB1dE1hcmtlZFRleHRNYXJrZXJSYW5nZSgpOwor
ICAgICAgICByZXR1cm4gcmFuZ2UgPyByYW5nZS5wbGF0Zm9ybURhdGEoKS5icmlkZ2luZ0F1dG9y
ZWxlYXNlKCkgOiBuaWw7CiAgICAgfQogCiAgICAgcmV0dXJuIG5pbDsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RWRpdG9yLmNwcAppbmRleCA5NGQ5MzQ1MGJiMzAuLmZiZjhkOWZjNWJlNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRWRpdG9yLmNwcApAQCAtMjE3NywxNCArMjE3NywxNCBAQCB2b2lkIEVkaXRvcjo6c2V0
Q29tcG9zaXRpb24oY29uc3QgU3RyaW5nJiB0ZXh0LCBTZXRDb21wb3NpdGlvbk1vZGUgbW9kZSkK
ICAgICBlbHNlCiAgICAgICAgIHNlbGVjdENvbXBvc2l0aW9uKCk7CiAKLSAgICBhdXRvKiBwcmV2
aW91c0NvbXBvc2l0aW9uTm9kZSA9IGNvbXBvc2l0aW9uTm9kZSgpOworICAgIFJlZlB0ciBwcmV2
aW91c0NvbXBvc2l0aW9uTm9kZSA9IG1fY29tcG9zaXRpb25Ob2RlOwogICAgIG1fY29tcG9zaXRp
b25Ob2RlID0gbnVsbHB0cjsKICAgICBtX2N1c3RvbUNvbXBvc2l0aW9uVW5kZXJsaW5lcy5jbGVh
cigpOwogICAgIG1fY3VzdG9tQ29tcG9zaXRpb25IaWdobGlnaHRzLmNsZWFyKCk7CiAgICAgbV9j
dXN0b21Db21wb3NpdGlvbkFubm90YXRpb25zLmNsZWFyKCk7CiAKICAgICBpZiAoYXV0byogY2Fj
aGUgPSBtX2RvY3VtZW50LmV4aXN0aW5nQVhPYmplY3RDYWNoZSgpOyBjYWNoZSAmJiBwcmV2aW91
c0NvbXBvc2l0aW9uTm9kZSkKLSAgICAgICAgY2FjaGUtPm9uVGV4dENvbXBvc2l0aW9uQ2hhbmdl
KCpwcmV2aW91c0NvbXBvc2l0aW9uTm9kZSk7CisgICAgICAgIGNhY2hlLT5vblRleHRDb21wb3Np
dGlvbkNoYW5nZSgqcHJldmlvdXNDb21wb3NpdGlvbk5vZGUsIEFYT2JqZWN0Q2FjaGU6OkNvbXBv
c2l0aW9uU3RhdGU6OkVuZGVkLCBmYWxzZSk7CiAKICAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rp
b24oKS5pc05vbmUoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjI4Miw3ICsyMjgyLDcgQEAgdm9p
ZCBFZGl0b3I6OnNldENvbXBvc2l0aW9uKGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgVmVjdG9y
PENvbXBvc2l0aW9uVW5kZXJsaW4KICAgICAgICAgICAgIHRhcmdldC0+ZGlzcGF0Y2hFdmVudChD
b21wb3NpdGlvbkV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmNvbXBvc2l0aW9uZW5kRXZlbnQs
IGRvY3VtZW50KCkud2luZG93UHJveHkoKSwgdGV4dCkpOwogICAgIH0KIAotICAgIGF1dG8qIHBy
ZXZpb3VzQ29tcG9zaXRpb25Ob2RlID0gY29tcG9zaXRpb25Ob2RlKCk7CisgICAgUmVmUHRyIHBy
ZXZpb3VzQ29tcG9zaXRpb25Ob2RlID0gbV9jb21wb3NpdGlvbk5vZGU7CiAgICAgbV9jb21wb3Np
dGlvbk5vZGUgPSBudWxscHRyOwogICAgIG1fY3VzdG9tQ29tcG9zaXRpb25VbmRlcmxpbmVzLmNs
ZWFyKCk7CiAgICAgbV9jdXN0b21Db21wb3NpdGlvbkhpZ2hsaWdodHMuY2xlYXIoKTsKQEAgLTIz
MzAsMTEgKzIzMzAsMTQgQEAgdm9pZCBFZGl0b3I6OnNldENvbXBvc2l0aW9uKGNvbnN0IFN0cmlu
ZyYgdGV4dCwgY29uc3QgVmVjdG9yPENvbXBvc2l0aW9uVW5kZXJsaW4KICAgICB9CiAKICAgICBp
ZiAoYXV0byogY2FjaGUgPSBtX2RvY3VtZW50LmV4aXN0aW5nQVhPYmplY3RDYWNoZSgpKSB7Ci0g
ICAgICAgIGF1dG8qIGN1cnJlbnRDb21wb3NpdGlvbk5vZGUgPSBjb21wb3NpdGlvbk5vZGUoKTsK
LSAgICAgICAgaWYgKHByZXZpb3VzQ29tcG9zaXRpb25Ob2RlICYmIHByZXZpb3VzQ29tcG9zaXRp
b25Ob2RlICE9IGN1cnJlbnRDb21wb3NpdGlvbk5vZGUpCi0gICAgICAgICAgICBjYWNoZS0+b25U
ZXh0Q29tcG9zaXRpb25DaGFuZ2UoKnByZXZpb3VzQ29tcG9zaXRpb25Ob2RlKTsKLSAgICAgICAg
aWYgKGN1cnJlbnRDb21wb3NpdGlvbk5vZGUpCi0gICAgICAgICAgICBjYWNoZS0+b25UZXh0Q29t
cG9zaXRpb25DaGFuZ2UoKmN1cnJlbnRDb21wb3NpdGlvbk5vZGUpOworICAgICAgICBpZiAocHJl
dmlvdXNDb21wb3NpdGlvbk5vZGUgJiYgcHJldmlvdXNDb21wb3NpdGlvbk5vZGUgIT0gbV9jb21w
b3NpdGlvbk5vZGUpIHsKKyAgICAgICAgICAgIGF1dG8gc3RhdGUgPSBtX2NvbXBvc2l0aW9uTm9k
ZSA/IEFYT2JqZWN0Q2FjaGU6OkNvbXBvc2l0aW9uU3RhdGU6OkluUHJvZ3Jlc3MgOiBBWE9iamVj
dENhY2hlOjpDb21wb3NpdGlvblN0YXRlOjpFbmRlZDsKKyAgICAgICAgICAgIGNhY2hlLT5vblRl
eHRDb21wb3NpdGlvbkNoYW5nZSgqcHJldmlvdXNDb21wb3NpdGlvbk5vZGUsIHN0YXRlLCB0cnVl
KTsKKyAgICAgICAgfQorICAgICAgICBpZiAobV9jb21wb3NpdGlvbk5vZGUpIHsKKyAgICAgICAg
ICAgIGF1dG8gc3RhdGUgPSBwcmV2aW91c0NvbXBvc2l0aW9uTm9kZSA/IEFYT2JqZWN0Q2FjaGU6
OkNvbXBvc2l0aW9uU3RhdGU6OkluUHJvZ3Jlc3MgOiBBWE9iamVjdENhY2hlOjpDb21wb3NpdGlv
blN0YXRlOjpTdGFydGVkOworICAgICAgICAgICAgY2FjaGUtPm9uVGV4dENvbXBvc2l0aW9uQ2hh
bmdlKCptX2NvbXBvc2l0aW9uTm9kZSwgc3RhdGUsIHRydWUpOworICAgICAgICB9CiAgICAgfQog
CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkgICAgICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
VHlwaW5nQ29tbWFuZC5jcHAKaW5kZXggYzc4OWRmNmI4ZDBkLi4zOGYxMTRlOTdhY2MgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcApAQCAtMjUyLDcgKzI1MiwxMiBA
QCB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydFRleHQoRG9jdW1lbnQmIGRvY3VtZW50LCBjb25z
dCBTdHJpbmcmIHRleHQsIGNvbnN0IFZpcwogICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+c2V0
Q29tcG9zaXRpb25UeXBlKGNvbXBvc2l0aW9uVHlwZSk7CiAgICAgICAgIGxhc3RUeXBpbmdDb21t
YW5kLT5zZXRTaG91bGRSZXRhaW5BdXRvY29ycmVjdGlvbkluZGljYXRvcihvcHRpb25zLmNvbnRh
aW5zKE9wdGlvbjo6UmV0YWluQXV0b2NvcnJlY3Rpb25JbmRpY2F0b3IpKTsKICAgICAgICAgbGFz
dFR5cGluZ0NvbW1hbmQtPnNldFNob3VsZFByZXZlbnRTcGVsbENoZWNraW5nKG9wdGlvbnMuY29u
dGFpbnMoT3B0aW9uOjpQcmV2ZW50U3BlbGxDaGVja2luZykpOwotICAgICAgICBsYXN0VHlwaW5n
Q29tbWFuZC0+aW5zZXJ0VGV4dEFuZE5vdGlmeUFjY2Vzc2liaWxpdHkobmV3VGV4dCwgb3B0aW9u
cy5jb250YWlucyhPcHRpb246OlNlbGVjdEluc2VydGVkVGV4dCkpOworI2lmIEhBVkUoSU5MSU5F
X1BSRURJQ1RJT05TKQorICAgICAgICBpZiAoY29tcG9zaXRpb25UeXBlICE9IFRleHRDb21wb3Np
dGlvblR5cGU6Ok5vbmUpCisgICAgICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+aW5zZXJ0VGV4
dChuZXdUZXh0LCBvcHRpb25zLmNvbnRhaW5zKE9wdGlvbjo6U2VsZWN0SW5zZXJ0ZWRUZXh0KSk7
CisgICAgICAgIGVsc2UKKyNlbmRpZgorICAgICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPmlu
c2VydFRleHRBbmROb3RpZnlBY2Nlc3NpYmlsaXR5KG5ld1RleHQsIG9wdGlvbnMuY29udGFpbnMo
T3B0aW9uOjpTZWxlY3RJbnNlcnRlZFRleHQpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApk
aWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5j
cHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmNwcAppbmRl
eCAyN2JjYmRhOWU3NTguLjhjY2IyMzQwMmRkNyAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRl
clRyZWUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5jcHAKQEAgLTg0Niw2ICs4NDYsMTEgQEAgc3RhdGlj
IEpTVmFsdWVSZWYgaW5zZXJ0VGV4dENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09i
amVjdFJlZiBmdW5jdGlvbiwKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VCb29sZWFuKGNvbnRleHQs
IHRvQVhFbGVtZW50KHRoaXNPYmplY3QpLT5pbnNlcnRUZXh0KHRleHQuZ2V0KCkpKTsKIH0KIAor
c3RhdGljIEpTVmFsdWVSZWYgdGV4dElucHV0TWFya2VkVGV4dE1hcmtlclJhbmdlQ2FsbGJhY2so
SlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0
aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVu
dHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5
VGV4dE1hcmtlclJhbmdlOjptYWtlSlNBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlKGNvbnRl
eHQsIHRvQVhFbGVtZW50KHRoaXNPYmplY3QpLT50ZXh0SW5wdXRNYXJrZWRUZXh0TWFya2VyUmFu
Z2UoKSk7Cit9CisKIHN0YXRpYyBKU1ZhbHVlUmVmIGF0dHJpYnV0ZWRTdHJpbmdGb3JUZXh0TWFy
a2VyUmFuZ2VDb250YWluc0F0dHJpYnV0ZUNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBK
U09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3Vt
ZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2Vw
dGlvbikKIHsKICAgICBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlKiBtYXJrZXJSYW5nZSA9
IDA7CkBAIC0xNzc5LDYgKzE3ODQsMTEgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpp
bnNlcnRUZXh0KEpTU3RyaW5nUmVmKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAorQWNjZXNzaWJp
bGl0eVRleHRNYXJrZXJSYW5nZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0ZXh0SW5wdXRNYXJr
ZWRUZXh0TWFya2VyUmFuZ2UoKSBjb25zdAoreworICAgIHJldHVybiBudWxscHRyOworfQorCiBp
bnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGV4dE1hcmtlclJhbmdlTGVuZ3RoKEFjY2Vzc2li
aWxpdHlUZXh0TWFya2VyUmFuZ2UqKQogewogICAgIHJldHVybiAwOwpAQCAtMjEzMyw2ICsyMTQz
LDcgQEAgSlNDbGFzc1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpnZXRKU0NsYXNzKCkKICAg
ICAgICAgeyAibWlzc3BlbGxpbmdUZXh0TWFya2VyUmFuZ2UiLCBtaXNzcGVsbGluZ1RleHRNYXJr
ZXJSYW5nZUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVy
dHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgInRleHRNYXJrZXJSYW5nZUZvckVs
ZW1lbnQiLCB0ZXh0TWFya2VyUmFuZ2VGb3JFbGVtZW50Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0
cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAg
ICAgeyAic2VsZWN0ZWRUZXh0TWFya2VyUmFuZ2UiLCBzZWxlY3RlZFRleHRNYXJrZXJSYW5nZUNh
bGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1
dGVEb250RGVsZXRlIH0sCisgICAgICAgIHsgInRleHRJbnB1dE1hcmtlZFRleHRNYXJrZXJSYW5n
ZSIsIHRleHRJbnB1dE1hcmtlZFRleHRNYXJrZXJSYW5nZUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0
dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAg
ICAgIHsgInJlc2V0U2VsZWN0ZWRUZXh0TWFya2VyUmFuZ2UiLCByZXNldFNlbGVjdGVkVGV4dE1h
cmtlclJhbmdlQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAicmVwbGFjZVRleHRJblJhbmdl
IiwgcmVwbGFjZVRleHRJblJhbmdlQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9u
bHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAiaW5zZXJ0
VGV4dCIsIGluc2VydFRleHRDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8
IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVt
cFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oIGIvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oCmluZGV4IDRkZjk3MDllNGE4Zi4uYWQ4NzRiZGYy
NjEzIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50LmgKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5o
CkBAIC0zMDAsNiArMzAwLDcgQEAgcHVibGljOgogICAgIGJvb2wgc2V0U2VsZWN0ZWRUZXh0TWFy
a2VyUmFuZ2UoQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZSopOwogICAgIGJvb2wgcmVwbGFj
ZVRleHRJblJhbmdlKEpTU3RyaW5nUmVmLCBpbnQgcG9zaXRpb24sIGludCBsZW5ndGgpOwogICAg
IGJvb2wgaW5zZXJ0VGV4dChKU1N0cmluZ1JlZik7CisgICAgQWNjZXNzaWJpbGl0eVRleHRNYXJr
ZXJSYW5nZSB0ZXh0SW5wdXRNYXJrZWRUZXh0TWFya2VyUmFuZ2UoKSBjb25zdDsKIAogICAgIEpT
UmV0YWluUHRyPEpTU3RyaW5nUmVmPiBzdHJpbmdGb3JUZXh0TWFya2VyUmFuZ2UoQWNjZXNzaWJp
bGl0eVRleHRNYXJrZXJSYW5nZSopOwogICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBhdHRy
aWJ1dGVkU3RyaW5nRm9yVGV4dE1hcmtlclJhbmdlKEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFu
Z2UqKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2lvcy9BY2Nlc3NpYmlsaXR5
VUlFbGVtZW50SU9TLm1tIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvaW9zL0FjY2Vzc2liaWxpdHlV
SUVsZW1lbnRJT1MubW0KaW5kZXggMGZjYTQ4OTRhZmVkLi44ZDc2ODI4OGFkYjUgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2lvcy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50SU9TLm1t
CisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2lvcy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50SU9T
Lm1tCkBAIC00OTksNiArNDk5LDExIEBAIHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cmVz
ZXRTZWxlY3RlZFRleHRNYXJrZXJSYW5nZSgpCiB7CiB9CiAKK0FjY2Vzc2liaWxpdHlUZXh0TWFy
a2VyUmFuZ2UgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGV4dElucHV0TWFya2VkVGV4dE1hcmtl
clJhbmdlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwogaW50IEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OnRleHRNYXJrZXJSYW5nZUxlbmd0aChBY2Nlc3NpYmlsaXR5VGV4dE1h
cmtlclJhbmdlKiByYW5nZSkKIHsKICAgICBpZCB0ZXh0TWFya2VycyA9IHJhbmdlLT5wbGF0Zm9y
bVRleHRNYXJrZXJSYW5nZSgpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFj
L0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRNYWMubW0gYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMv
QWNjZXNzaWJpbGl0eVVJRWxlbWVudE1hYy5tbQppbmRleCA0YWU0Njk4NjU0NDQuLjE5OGY0ZjYz
MmE4YSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2liaWxpdHlV
SUVsZW1lbnRNYWMubW0KKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2liaWxp
dHlVSUVsZW1lbnRNYWMubW0KQEAgLTc5LDYgKzc5LDEwIEBACiAjZGVmaW5lIE5TQWNjZXNzaWJp
bGl0eVRleHRJbnB1dE1hcmtlZFJhbmdlQXR0cmlidXRlIEAiQVhUZXh0SW5wdXRNYXJrZWRSYW5n
ZSIKICNlbmRpZgogCisjaWZuZGVmIE5TQWNjZXNzaWJpbGl0eVRleHRJbnB1dE1hcmtlZFRleHRN
YXJrZXJSYW5nZUF0dHJpYnV0ZQorI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlUZXh0SW5wdXRNYXJr
ZWRUZXh0TWFya2VyUmFuZ2VBdHRyaWJ1dGUgQCJBWFRleHRJbnB1dE1hcmtlZFRleHRNYXJrZXJS
YW5nZSIKKyNlbmRpZgorCiB0eXBlZGVmIHZvaWQgKCpBWFBvc3RlZE5vdGlmaWNhdGlvbkNhbGxi
YWNrKShpZCBlbGVtZW50LCBOU1N0cmluZyogbm90aWZpY2F0aW9uLCB2b2lkKiBjb250ZXh0KTsK
IAogQGludGVyZmFjZSBOU09iamVjdCAoV2ViS2l0QWNjZXNzaWJpbGl0eUFkZGl0aW9ucykKQEAg
LTE3Miw3ICsxNzYsOSBAQCBzdGF0aWMgTlNTdHJpbmcqIGF0dHJpYnV0ZXNPZkVsZW1lbnQoaWQg
YWNjZXNzaWJpbGl0eU9iamVjdCkKICAgICAgICAgaWQgdmFsdWVPYmplY3QgPSBbYWNjZXNzaWJp
bGl0eU9iamVjdCBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6YXR0cmlidXRlXTsKICAgICAg
ICAgTlNTdHJpbmcqIHZhbHVlID0gZGVzY3JpcHRpb25PZlZhbHVlKHZhbHVlT2JqZWN0LCBhY2Nl
c3NpYmlsaXR5T2JqZWN0KTsKIAotICAgICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJp
bmc6TlNBY2Nlc3NpYmlsaXR5VGV4dElucHV0TWFya2VkUmFuZ2VBdHRyaWJ1dGVdICYmICF2YWx1
ZSkKKyAgICAgICAgaWYgKCF2YWx1ZQorICAgICAgICAgICAgJiYgKFthdHRyaWJ1dGUgaXNFcXVh
bFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVRleHRJbnB1dE1hcmtlZFJhbmdlQXR0cmlidXRlXQor
ICAgICAgICAgICAgICAgIHx8IFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJp
bGl0eVRleHRJbnB1dE1hcmtlZFRleHRNYXJrZXJSYW5nZUF0dHJpYnV0ZV0pKQogICAgICAgICAg
ICAgY29udGludWU7CiAKICAgICAgICAgW2F0dHJpYnV0ZXNTdHJpbmcgYXBwZW5kRm9ybWF0OkAi
JUA6ICVAXG4iLCBhdHRyaWJ1dGUsIHZhbHVlXTsKQEAgLTE3NTksNiArMTc2NSwxNiBAQCBib29s
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omluc2VydFRleHQoSlNTdHJpbmdSZWYgdGV4dCkKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKK0FjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2UgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6dGV4dElucHV0TWFya2VkVGV4dE1hcmtlclJhbmdlKCkgY29uc3QK
K3sKKyAgICBCRUdJTl9BWF9PQkpDX0VYQ0VQVElPTlMKKyAgICBpZCB0ZXh0TWFya2VyUmFuZ2Ug
PSBbbV9lbGVtZW50IGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTpOU0FjY2Vzc2liaWxpdHlU
ZXh0SW5wdXRNYXJrZWRUZXh0TWFya2VyUmFuZ2VBdHRyaWJ1dGVdOworICAgIHJldHVybiBBY2Nl
c3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlKHRleHRNYXJrZXJSYW5nZSk7CisgICAgRU5EX0FYX09C
SkNfRVhDRVBUSU9OUworCisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKIGludCBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Ojp0ZXh0TWFya2VyUmFuZ2VMZW5ndGgoQWNjZXNzaWJpbGl0eVRleHRNYXJr
ZXJSYW5nZSogcmFuZ2UpCiB7CiAgICAgQkVHSU5fQVhfT0JKQ19FWENFUFRJT05TCmRpZmYgLS1n
aXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlV
SUVsZW1lbnQuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9BY2Nl
c3NpYmlsaXR5VUlFbGVtZW50LmNwcAppbmRleCBlZmZhMWI1NjU3OTYuLmYzODYwYWQ2ZWU0YSAx
MDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9BY2Nlc3Np
YmlsaXR5VUlFbGVtZW50LmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVk
QnVuZGxlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuY3BwCkBAIC0xMDksNiArMTA5LDcgQEAgaW50
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmxpbmVJbmRleEZvclRleHRNYXJrZXIoQWNjZXNzaWJp
bGl0eVRleHRNYXJrZXIqKSBjb24KIFJlZlB0cjxBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdl
PiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0ZXh0TWFya2VyUmFuZ2VGb3JSYW5nZSh1bnNpZ25l
ZCwgdW5zaWduZWQpIHsgcmV0dXJuIG51bGxwdHI7IH0KIFJlZlB0cjxBY2Nlc3NpYmlsaXR5VGV4
dE1hcmtlclJhbmdlPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzZWxlY3RlZFRleHRNYXJrZXJS
YW5nZSgpIHsgcmV0dXJuIG51bGxwdHI7IH0KIHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
cmVzZXRTZWxlY3RlZFRleHRNYXJrZXJSYW5nZSgpIHsgfQorUmVmUHRyPEFjY2Vzc2liaWxpdHlU
ZXh0TWFya2VyUmFuZ2U+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRleHRJbnB1dE1hcmtlZFRl
eHRNYXJrZXJSYW5nZSgpIGNvbnN0IHsgcmV0dXJuIG51bGxwdHI7IH0KIHZvaWQgQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6c2V0Qm9vbEF0dHJpYnV0ZVZhbHVlKEpTU3RyaW5nUmVmLCBib29sKSB7
IH0KIHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2V0VmFsdWUoSlNTdHJpbmdSZWYpIHsg
fQogSlNWYWx1ZVJlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzZWFyY2hUZXh0V2l0aENyaXRl
cmlhKEpTQ29udGV4dFJlZiwgSlNWYWx1ZVJlZiwgSlNTdHJpbmdSZWYsIEpTU3RyaW5nUmVmKSB7
IHJldHVybiBudWxscHRyOyB9CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaCBiL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oCmluZGV4IDczODRi
OTExODhmMC4uNDRmM2M1NzE4ODE0IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L0luamVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaAorKysgYi9Ub29scy9XZWJL
aXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaApAQCAt
MzM5LDYgKzMzOSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlc2V0U2VsZWN0ZWRUZXh0TWFya2Vy
UmFuZ2UoKTsKICAgICBib29sIHJlcGxhY2VUZXh0SW5SYW5nZShKU1N0cmluZ1JlZiwgaW50IHBv
c2l0aW9uLCBpbnQgbGVuZ3RoKTsKICAgICBib29sIGluc2VydFRleHQoSlNTdHJpbmdSZWYpOwor
ICAgIFJlZlB0cjxBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlPiB0ZXh0SW5wdXRNYXJrZWRU
ZXh0TWFya2VyUmFuZ2UoKSBjb25zdDsKICAgICBSZWZQdHI8QWNjZXNzaWJpbGl0eVRleHRNYXJr
ZXI+IHN0YXJ0VGV4dE1hcmtlckZvclRleHRNYXJrZXJSYW5nZShBY2Nlc3NpYmlsaXR5VGV4dE1h
cmtlclJhbmdlKik7CiAgICAgUmVmUHRyPEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyPiBlbmRUZXh0
TWFya2VyRm9yVGV4dE1hcmtlclJhbmdlKEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2UqKTsK
ICAgICBSZWZQdHI8QWNjZXNzaWJpbGl0eVRleHRNYXJrZXI+IGVuZFRleHRNYXJrZXJGb3JCb3Vu
ZHMoaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpOwpkaWZmIC0tZ2l0IGEvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9BY2Nlc3NpYmlsaXR5
VUlFbGVtZW50LmlkbCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmlu
ZGluZ3MvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5pZGwKaW5kZXggYjEwMjlkMzE2NmU4Li45MjJl
MTI0MmNjYzAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5k
bGUvQmluZGluZ3MvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5pZGwKKysrIGIvVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50
LmlkbApAQCAtMjQxLDYgKzI0MSw3IEBACiAgICAgdW5kZWZpbmVkIHJlc2V0U2VsZWN0ZWRUZXh0
TWFya2VyUmFuZ2UoKTsKICAgICBib29sZWFuIHJlcGxhY2VUZXh0SW5SYW5nZShET01TdHJpbmcg
c3RyaW5nLCBsb25nIHBvc2l0aW9uLCBsb25nIGxlbmd0aCk7CiAgICAgYm9vbGVhbiBpbnNlcnRU
ZXh0KERPTVN0cmluZyB0ZXh0KTsKKyAgICBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlIHRl
eHRJbnB1dE1hcmtlZFRleHRNYXJrZXJSYW5nZSgpOwogICAgIEFjY2Vzc2liaWxpdHlUZXh0TWFy
a2VyIHN0YXJ0VGV4dE1hcmtlckZvclRleHRNYXJrZXJSYW5nZShBY2Nlc3NpYmlsaXR5VGV4dE1h
cmtlclJhbmdlIHJhbmdlKTsKICAgICBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciBlbmRUZXh0TWFy
a2VyRm9yVGV4dE1hcmtlclJhbmdlKEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2UgcmFuZ2Up
OwogICAgIEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyIGVuZFRleHRNYXJrZXJGb3JCb3VuZHMobG9u
ZyB4LCBsb25nIHksIGxvbmcgd2lkdGgsIGxvbmcgaGVpZ2h0KTsKZGlmZiAtLWdpdCBhL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvbWFjL0FjY2Vzc2liaWxpdHlVSUVsZW1l
bnRNYWMubW0gYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL21hYy9BY2Nl
c3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tCmluZGV4IDJiNDNlZWYzYmI2OC4uMjE5YjdhOTUzMjg0
IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL21hYy9B
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIv
SW5qZWN0ZWRCdW5kbGUvbWFjL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRNYWMubW0KQEAgLTg1LDYg
Kzg1LDEwIEBACiAjZGVmaW5lIE5TQWNjZXNzaWJpbGl0eVRleHRJbnB1dE1hcmtlZFJhbmdlQXR0
cmlidXRlIEAiQVhUZXh0SW5wdXRNYXJrZWRSYW5nZSIKICNlbmRpZgogCisjaWZuZGVmIE5TQWNj
ZXNzaWJpbGl0eVRleHRJbnB1dE1hcmtlZFRleHRNYXJrZXJSYW5nZUF0dHJpYnV0ZQorI2RlZmlu
ZSBOU0FjY2Vzc2liaWxpdHlUZXh0SW5wdXRNYXJrZWRUZXh0TWFya2VyUmFuZ2VBdHRyaWJ1dGUg
QCJBWFRleHRJbnB1dE1hcmtlZFRleHRNYXJrZXJSYW5nZSIKKyNlbmRpZgorCiB0eXBlZGVmIHZv
aWQgKCpBWFBvc3RlZE5vdGlmaWNhdGlvbkNhbGxiYWNrKShpZCBlbGVtZW50LCBOU1N0cmluZyog
bm90aWZpY2F0aW9uLCB2b2lkKiBjb250ZXh0KTsKIAogQGludGVyZmFjZSBOU09iamVjdCAoV2Vi
S2l0QWNjZXNzaWJpbGl0eUFkZGl0aW9ucykKQEAgLTYzMyw3ICs2MzcsOSBAQCBKU1JldGFpblB0
cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YWxsQXR0cmlidXRlcygpCiAK
ICAgICAgICAgYXV0byB2YWx1ZSA9IGRlc2NyaXB0aW9uT2ZWYWx1ZShhdHRyaWJ1dGVWYWx1ZShh
dHRyaWJ1dGUpLmdldCgpKTsKIAotICAgICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJp
bmc6TlNBY2Nlc3NpYmlsaXR5VGV4dElucHV0TWFya2VkUmFuZ2VBdHRyaWJ1dGVdICYmICF2YWx1
ZSkKKyAgICAgICAgaWYgKCF2YWx1ZQorICAgICAgICAgICAgJiYgKFthdHRyaWJ1dGUgaXNFcXVh
bFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVRleHRJbnB1dE1hcmtlZFJhbmdlQXR0cmlidXRlXQor
ICAgICAgICAgICAgICAgIHx8IFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJp
bGl0eVRleHRJbnB1dE1hcmtlZFRleHRNYXJrZXJSYW5nZUF0dHJpYnV0ZV0pKQogICAgICAgICAg
ICAgY29udGludWU7CiAKICAgICAgICAgW3ZhbHVlcyBhcHBlbmRGb3JtYXQ6QCIlQDogJUBcbiIs
IGF0dHJpYnV0ZSwgdmFsdWUuZ2V0KCldOwpAQCAtMjAxMiw2ICsyMDE4LDE2IEBAIHZvaWQgQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6cmVzZXRTZWxlY3RlZFRleHRNYXJrZXJSYW5nZSgpCiAgICAg
c2V0QXR0cmlidXRlVmFsdWUobV9lbGVtZW50LmdldEF1dG9yZWxlYXNlZCgpLCBOU0FjY2Vzc2li
aWxpdHlTZWxlY3RlZFRleHRNYXJrZXJSYW5nZUF0dHJpYnV0ZSwgdGV4dE1hcmtlclJhbmdlLmdl
dCgpLCB0cnVlKTsKIH0KIAorUmVmUHRyPEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2U+IEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRleHRJbnB1dE1hcmtlZFRleHRNYXJrZXJSYW5nZSgpIGNv
bnN0Cit7CisgICAgQkVHSU5fQVhfT0JKQ19FWENFUFRJT05TCisgICAgYXV0byB0ZXh0TWFya2Vy
UmFuZ2UgPSBhdHRyaWJ1dGVWYWx1ZShOU0FjY2Vzc2liaWxpdHlUZXh0SW5wdXRNYXJrZWRUZXh0
TWFya2VyUmFuZ2VBdHRyaWJ1dGUpOworICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtl
clJhbmdlOjpjcmVhdGUodGV4dE1hcmtlclJhbmdlLmdldCgpKTsKKyAgICBFTkRfQVhfT0JKQ19F
WENFUFRJT05TCisKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwogUmVmUHRyPEFjY2Vzc2liaWxp
dHlUZXh0TWFya2VyPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdGFydFRleHRNYXJrZXJGb3JU
ZXh0TWFya2VyUmFuZ2UoQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZSogcmFuZ2UpCiB7CiAg
ICAgaWYgKCFyYW5nZSkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFj
L2F0dHJpYnV0ZWQtc3RyaW5nL2F0dHJpYnV0ZWQtc3RyaW5nLWhhcy1jb21wbGV0aW9uLWFubm90
YXRpb24uaHRtbCBiL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL2F0dHJpYnV0ZWQtc3Ry
aW5nL2F0dHJpYnV0ZWQtc3RyaW5nLWhhcy1jb21wbGV0aW9uLWFubm90YXRpb24uaHRtbAppbmRl
eCA3NmU0ZTIzZGI1ZTIuLmY1MDBmZTBmNTI3ZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvYWNj
ZXNzaWJpbGl0eS9tYWMvYXR0cmlidXRlZC1zdHJpbmcvYXR0cmlidXRlZC1zdHJpbmctaGFzLWNv
bXBsZXRpb24tYW5ub3RhdGlvbi5odG1sCisrKyBiL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkv
bWFjL2F0dHJpYnV0ZWQtc3RyaW5nL2F0dHJpYnV0ZWQtc3RyaW5nLWhhcy1jb21wbGV0aW9uLWFu
bm90YXRpb24uaHRtbApAQCAtMTMsMTUgKzEzLDE3IEBACiAgICAgICAgICAgICB2YXIgZWxlbWVu
dCA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmFjY2Vzc2libGVFbGVtZW50QnlJZCgiZWRpdGFi
bGUiKTsKIAogICAgICAgICAgICAgLy8gVGVzdCB3aXRoIGNvbXBvc2l0aW9uIGFuZCBubyBhdHRy
aWJ1dGVzCi0gICAgICAgICAgICB0ZXh0SW5wdXRDb250cm9sbGVyLnNldE1hcmtlZFRleHQoInRl
c3RpbmciKTsKLSAgICAgICAgICAgIHZhciBhdHRyU3RyaW5nID0gZWxlbWVudC5hdHRyaWJ1dGVk
U3RyaW5nRm9yUmFuZ2UoMCwgNyk7CisgICAgICAgICAgICB0ZXh0SW5wdXRDb250cm9sbGVyLnNl
dE1hcmtlZFRleHQoInRlc3QiKTsKKyAgICAgICAgICAgIHZhciBhdHRyU3RyaW5nID0gZWxlbWVu
dC5hdHRyaWJ1dGVkU3RyaW5nRm9yUmFuZ2UoMCwgNCk7CiAgICAgICAgICAgICBzaG91bGRCZSgi
YXR0clN0cmluZy5pbmRleE9mKCdBWFRleHRDb21wbGV0aW9uID0gMScpIiwgIi0xIik7CiAKICAg
ICAgICAgICAgIC8vIFRlc3Qgd2l0aCBjb21wb3NpdGlvbiBhbmQgYXR0cmlidXRlcwotICAgICAg
ICAgICAgdGV4dElucHV0Q29udHJvbGxlci5zZXRNYXJrZWRUZXh0KCJmYXZvcml0ZSIsIDAsIDgs
IGZhbHNlLCB1bmRlZmluZWQsIFsKLSAgICAgICAgICAgICAgICB7IGZyb206ICI0IiwgbGVuZ3Ro
OiAiNCIsIGFubm90YXRpb246ICJOU1RleHRDb21wbGV0aW9uIiB9CisgICAgICAgICAgICBjb25z
dCBtZXNzYWdlID0gIiBtZXNzYWdlIjsKKyAgICAgICAgICAgIHRleHRJbnB1dENvbnRyb2xsZXIu
dW5tYXJrVGV4dCgpOworICAgICAgICAgICAgdGV4dElucHV0Q29udHJvbGxlci5zZXRNYXJrZWRU
ZXh0KG1lc3NhZ2UsIDQsIG1lc3NhZ2UubGVuZ3RoLCBmYWxzZSwgdW5kZWZpbmVkLCBbCisgICAg
ICAgICAgICAgICAgeyBmcm9tOiAiNCIsIGxlbmd0aDogbWVzc2FnZS5sZW5ndGgsIGFubm90YXRp
b246ICJOU1RleHRDb21wbGV0aW9uIiB9CiAgICAgICAgICAgICBdKTsKLSAgICAgICAgICAgIGF0
dHJTdHJpbmcgPSBlbGVtZW50LmF0dHJpYnV0ZWRTdHJpbmdGb3JSYW5nZSgwLCA4KTsKKyAgICAg
ICAgICAgIGF0dHJTdHJpbmcgPSBlbGVtZW50LmF0dHJpYnV0ZWRTdHJpbmdGb3JSYW5nZSgwLCA0
ICsgbWVzc2FnZS5sZW5ndGgpOwogICAgICAgICAgICAgc2hvdWxkQmVUcnVlKCJhdHRyU3RyaW5n
LmluZGV4T2YoJ0FYVGV4dENvbXBsZXRpb24gPSAxJykgIT0gLTEiKTsKICAgICAgICAgfQogICAg
IDwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvdGV4
dC1pbnB1dC1tYXJrZWQtcmFuZ2UtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvYWNjZXNzaWJp
bGl0eS9tYWMvdGV4dC1pbnB1dC1tYXJrZWQtcmFuZ2UtZXhwZWN0ZWQudHh0CmluZGV4IDEzMzAy
NmEyODk4My4uNDY1ZjgzNWM0ZjA2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9hY2Nlc3NpYmls
aXR5L21hYy90ZXh0LWlucHV0LW1hcmtlZC1yYW5nZS1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0
VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvdGV4dC1pbnB1dC1tYXJrZWQtcmFuZ2UtZXhwZWN0ZWQu
dHh0CkBAIC02LDcgKzYsNyBAQCBPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2Yg
IlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURQogUEFTUyAhZWxlbWVu
dC50ZXh0SW5wdXRNYXJrZWRSYW5nZSBpcyB0cnVlCiBQQVNTIGVsZW1lbnQudGV4dElucHV0TWFy
a2VkUmFuZ2UgaXMgJ3swLCA0fScKIFBBU1MgIWVsZW1lbnQudGV4dElucHV0TWFya2VkUmFuZ2Ug
aXMgdHJ1ZQotUEFTUyBlbGVtZW50LnRleHRJbnB1dE1hcmtlZFJhbmdlIGlzICd7MCwgNX0nCitQ
QVNTIGVsZW1lbnQudGV4dElucHV0TWFya2VkUmFuZ2UgaXMgJ3sxLCA1fScKIFBBU1Mgc3VjY2Vz
c2Z1bGx5UGFyc2VkIGlzIHRydWUKIAogVEVTVCBDT01QTEVURQpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvdGV4dC1pbnB1dC1tYXJrZWQtcmFuZ2UuaHRtbCBiL0xh
eW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL3RleHQtaW5wdXQtbWFya2VkLXJhbmdlLmh0bWwK
aW5kZXggOGU5OGQ2MGIzNmIyLi4zODA0MDU0Y2ZlYWUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L2FjY2Vzc2liaWxpdHkvbWFjL3RleHQtaW5wdXQtbWFya2VkLXJhbmdlLmh0bWwKKysrIGIvTGF5
b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvdGV4dC1pbnB1dC1tYXJrZWQtcmFuZ2UuaHRtbApA
QCAtMTEsMTIgKzExLDE1IEBACiAgICAgICAgIGlmICh3aW5kb3cudGV4dElucHV0Q29udHJvbGxl
ciAmJiB3aW5kb3cuYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIpIHsKICAgICAgICAgICAgIHZhciBl
bGVtZW50ID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRCeUlkKCJl
ZGl0YWJsZSIpOwogICAgICAgICAgICAgc2hvdWxkQmVUcnVlKCIhZWxlbWVudC50ZXh0SW5wdXRN
YXJrZWRSYW5nZSIpOworICAgICAgICAgICAgCiAgICAgICAgICAgICB0ZXh0SW5wdXRDb250cm9s
bGVyLnNldE1hcmtlZFRleHQoInRlc3QiLCAxLCAwKTsKICAgICAgICAgICAgIHNob3VsZEJlKCJl
bGVtZW50LnRleHRJbnB1dE1hcmtlZFJhbmdlIiwgIid7MCwgNH0nIik7CisgICAgICAgICAgICAK
ICAgICAgICAgICAgIHRleHRJbnB1dENvbnRyb2xsZXIuaW5zZXJ0VGV4dCgidCIpOwogICAgICAg
ICAgICAgc2hvdWxkQmVUcnVlKCIhZWxlbWVudC50ZXh0SW5wdXRNYXJrZWRSYW5nZSIpOworICAg
ICAgICAgICAgCiAgICAgICAgICAgICB0ZXh0SW5wdXRDb250cm9sbGVyLnNldE1hcmtlZFRleHQo
InRlc3QyIiwgMSwgMCk7Ci0gICAgICAgICAgICBzaG91bGRCZSgiZWxlbWVudC50ZXh0SW5wdXRN
YXJrZWRSYW5nZSIsICInezAsIDV9JyIpOworICAgICAgICAgICAgc2hvdWxkQmUoImVsZW1lbnQu
dGV4dElucHV0TWFya2VkUmFuZ2UiLCAiJ3sxLCA1fSciKTsKICAgICAgICAgfQogICAgIDwvc2Ny
aXB0PgogPC9ib2R5PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMv
dGV4dC1pbnB1dC1tYXJrZWQtdGV4dC1tYXJrZXItcmFuZ2UtZXhwZWN0ZWQudHh0IGIvTGF5b3V0
VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvdGV4dC1pbnB1dC1tYXJrZWQtdGV4dC1tYXJrZXItcmFu
Z2UtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4u
MDc5OGIwMWMwNWYyCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0
eS9tYWMvdGV4dC1pbnB1dC1tYXJrZWQtdGV4dC1tYXJrZXItcmFuZ2UtZXhwZWN0ZWQudHh0CkBA
IC0wLDAgKzEsMTUgQEAKK1RoaXMgdGVzdCBlbnN1cmVzIHRoYXQgdGhlIGlucHV0IG1ldGhvZCBt
YXJrZWQgcmFuZ2UgaXMgYXZhaWxhYmxlIHRvIGFjY2Vzc2liaWxpdHkgY2xpZW50cyBhcyB0ZXh0
IG1hcmtlciByYW5nZS4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQ
QVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgIXRl
eHQgaXMgdHJ1ZQorUEFTUyB0ZXh0IGlzICd0ZXN0JworUEFTUyAhdGV4dCBpcyB0cnVlCitQQVNT
IGVsZW1lbnQuc3RyaW5nVmFsdWUgaXMgJ0FYVmFsdWU6IHRlc3QnCitQQVNTIHRleHQgaXMgJyBt
ZXNzYWdlJworUEFTUyBlbGVtZW50LnN0cmluZ1ZhbHVlIGlzICdBWFZhbHVlOiB0ZXN0IG1lc3Nh
Z2UnCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvdGV4dC1pbnB1dC1tYXJr
ZWQtdGV4dC1tYXJrZXItcmFuZ2UuaHRtbCBiL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFj
L3RleHQtaW5wdXQtbWFya2VkLXRleHQtbWFya2VyLXJhbmdlLmh0bWwKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4yMjk3MzM0YjdlMTkKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy90ZXh0LWlucHV0LW1hcmtlZC10ZXh0LW1h
cmtlci1yYW5nZS5odG1sCkBAIC0wLDAgKzEsMzMgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+
Cis8aGVhZD4KKyAgICA8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QuanMiPjwv
c2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8aW5wdXQgaWQ9ImVkaXRhYmxlIiB0eXBlPSJ0ZXh0
Ij4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KK2Rlc2NyaXB0aW9uKCJUaGlzIHRl
c3QgZW5zdXJlcyB0aGF0IHRoZSBpbnB1dCBtZXRob2QgbWFya2VkIHJhbmdlIGlzIGF2YWlsYWJs
ZSB0byBhY2Nlc3NpYmlsaXR5IGNsaWVudHMgYXMgdGV4dCBtYXJrZXIgcmFuZ2UuIik7CitlZGl0
YWJsZS5mb2N1cygpOworaWYgKHdpbmRvdy50ZXh0SW5wdXRDb250cm9sbGVyICYmIHdpbmRvdy5h
Y2Nlc3NpYmlsaXR5Q29udHJvbGxlcikgeworICAgIHZhciBlbGVtZW50ID0gYWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRCeUlkKCJlZGl0YWJsZSIpOworICAgIAorICAg
IHZhciB0ZXh0ID0gZWxlbWVudC5zdHJpbmdGb3JUZXh0TWFya2VyUmFuZ2UoZWxlbWVudC50ZXh0
SW5wdXRNYXJrZWRUZXh0TWFya2VyUmFuZ2UoKSk7CisgICAgc2hvdWxkQmVUcnVlKCIhdGV4dCIp
OworICAgIAorICAgIHRleHRJbnB1dENvbnRyb2xsZXIuc2V0TWFya2VkVGV4dCgidGVzdCIpOwor
ICAgIHRleHQgPSBlbGVtZW50LnN0cmluZ0ZvclRleHRNYXJrZXJSYW5nZShlbGVtZW50LnRleHRJ
bnB1dE1hcmtlZFRleHRNYXJrZXJSYW5nZSgpKTsKKyAgICBzaG91bGRCZSgidGV4dCIsICIndGVz
dCciKTsKKworICAgIHRleHRJbnB1dENvbnRyb2xsZXIudW5tYXJrVGV4dCgpOworICAgIHRleHQg
PSBlbGVtZW50LnN0cmluZ0ZvclRleHRNYXJrZXJSYW5nZShlbGVtZW50LnRleHRJbnB1dE1hcmtl
ZFRleHRNYXJrZXJSYW5nZSgpKTsKKyAgICBzaG91bGRCZVRydWUoIiF0ZXh0Iik7CisgICAgc2hv
dWxkQmUoImVsZW1lbnQuc3RyaW5nVmFsdWUiLCAiJ0FYVmFsdWU6IHRlc3QnIik7CisKKyAgICB0
ZXh0SW5wdXRDb250cm9sbGVyLnNldE1hcmtlZFRleHQoIiBtZXNzYWdlIiwgNCwgIiBtZXNzYWdl
Ii5sZW5ndGgpOworICAgIHRleHQgPSBlbGVtZW50LnN0cmluZ0ZvclRleHRNYXJrZXJSYW5nZShl
bGVtZW50LnRleHRJbnB1dE1hcmtlZFRleHRNYXJrZXJSYW5nZSgpKTsKKyAgICBzaG91bGRCZSgi
dGV4dCIsICInIG1lc3NhZ2UnIik7CisgICAgc2hvdWxkQmUoImVsZW1lbnQuc3RyaW5nVmFsdWUi
LCAiJ0FYVmFsdWU6IHRlc3QgbWVzc2FnZSciKTsKK30KKzwvc2NyaXB0PgorPC9ib2R5PgorPC9o
dG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvdGV4dC1pbnB1
dC1zZXNzaW9uLW5vdGlmaWNhdGlvbnMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvYWNjZXNz
aWJpbGl0eS9tYWMvdGV4dC1pbnB1dC1zZXNzaW9uLW5vdGlmaWNhdGlvbnMtZXhwZWN0ZWQudHh0
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNTA2ZjdhNTQ5ODhmCi0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvdGV4dC1pbnB1
dC1zZXNzaW9uLW5vdGlmaWNhdGlvbnMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTEgQEAKK1Ro
aXMgdGVzdCBlbnN1cmVzIHRoYXQgYWNjZXNzaWJpbGl0eSByZWNlaXZlcyB0aGUgcHJvcGVyIG5v
dGlmaWNhdGlvbnMgZm9yIHdoZW4gaW5wdXQgc2Vzc2lvbnMgYmVnaW4gYW5kIGVuZC4KKworT24g
c3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93
ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK0dvdCBzZXNzaW9uIHN0YXJ0IGFuZCB2YWx1ZSBj
aGFuZ2Ugbm90aWZpY2F0aW9ucy4KK0dvdCBzZXNzaW9uIGVuZCBub3RpZmljYXRpb24uCitQQVNT
IHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvdGV4dC1pbnB1dC1zZXNzaW9uLW5vdGlm
aWNhdGlvbnMuaHRtbCBiL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL3RleHQtaW5wdXQt
c2Vzc2lvbi1ub3RpZmljYXRpb25zLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwLi5lMjJhZTdkN2RhOGIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9h
Y2Nlc3NpYmlsaXR5L21hYy90ZXh0LWlucHV0LXNlc3Npb24tbm90aWZpY2F0aW9ucy5odG1sCkBA
IC0wLDAgKzEsNDkgQEAKKzwhRE9DVFlQRSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsg
cnVuU2luZ2x5PXRydWUgXSAtLT4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4v
cmVzb3VyY2VzL2pzLXRlc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291
cmNlcy9hY2Nlc3NpYmlsaXR5LWhlbHBlci5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4K
KzxpbnB1dCBpZD0iZWRpdGFibGUiIHR5cGU9InRleHQiPgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2ph
dmFzY3JpcHQiPgorZGVzY3JpcHRpb24oIlRoaXMgdGVzdCBlbnN1cmVzIHRoYXQgYWNjZXNzaWJp
bGl0eSByZWNlaXZlcyB0aGUgcHJvcGVyIG5vdGlmaWNhdGlvbnMgZm9yIHdoZW4gaW5wdXQgc2Vz
c2lvbnMgYmVnaW4gYW5kIGVuZC4iKTsKK2VkaXRhYmxlLmZvY3VzKCk7CisKK3ZhciBnb3RTZXNz
aW9uU3RhcnQgPSBmYWxzZTsKK3ZhciBnb3RWYWx1ZUNoYW5nZWQgPSBmYWxzZTsKK3ZhciBnb3RT
ZXNzaW9uRW5kID0gZmFsc2U7CitmdW5jdGlvbiBub3RpZmljYXRpb25DYWxsYmFjayhub3RpZmlj
YXRpb24pIHsKKyAgICBpZiAobm90aWZpY2F0aW9uID09PSAiQVhUZXh0SW5wdXRNYXJraW5nU2Vz
c2lvbkJlZ2FuIikKKyAgICAgICAgZ290U2Vzc2lvblN0YXJ0ID0gdHJ1ZTsKKworICAgIGlmIChu
b3RpZmljYXRpb24gPT09ICJBWFZhbHVlQ2hhbmdlZCIgJiYgZ290U2Vzc2lvblN0YXJ0KQorICAg
ICAgICBnb3RWYWx1ZUNoYW5nZWQgPSB0cnVlOworCisgICAgaWYgKG5vdGlmaWNhdGlvbiA9PT0g
IkFYVGV4dElucHV0TWFya2luZ1Nlc3Npb25FbmRlZCIpIHsKKyAgICAgICAgaWYgKCFnb3RTZXNz
aW9uU3RhcnQpCisgICAgICAgICAgICBkZWJ1ZygiRkFJTDogR290IEFYVGV4dElucHV0TWFya2lu
Z1Nlc3Npb25FbmRlZCBiZWZvcmUgQVhUZXh0SW5wdXRNYXJraW5nU2Vzc2lvbkJlZ2FuIik7Cisg
ICAgICAgIGdvdFNlc3Npb25FbmQgPSB0cnVlOworICAgIH0KK30KKworaWYgKHdpbmRvdy5hY2Nl
c3NpYmlsaXR5Q29udHJvbGxlcikgeworICAgIHdpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsK
KworICAgIGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmFjY2Vzc2libGVFbGVtZW50QnlJZCgiZWRp
dGFibGUiKS5hZGROb3RpZmljYXRpb25MaXN0ZW5lcihub3RpZmljYXRpb25DYWxsYmFjayk7Cisg
ICAgc2V0VGltZW91dChhc3luYyAoKSA9PiB7CisgICAgICAgIHRleHRJbnB1dENvbnRyb2xsZXIu
c2V0TWFya2VkVGV4dCgidGVzdCIpOworICAgICAgICBhd2FpdCB3YWl0Rm9yKCgpID0+IGdvdFNl
c3Npb25TdGFydCAmJiBnb3RWYWx1ZUNoYW5nZWQpOworICAgICAgICBkZWJ1ZygiR290IHNlc3Np
b24gc3RhcnQgYW5kIHZhbHVlIGNoYW5nZSBub3RpZmljYXRpb25zLiIpOworCisgICAgICAgIHRl
eHRJbnB1dENvbnRyb2xsZXIudW5tYXJrVGV4dCgpOworICAgICAgICBhd2FpdCB3YWl0Rm9yKCgp
ID0+IGdvdFNlc3Npb25FbmQpOworICAgICAgICBkZWJ1ZygiR290IHNlc3Npb24gZW5kIG5vdGlm
aWNhdGlvbi4iKTsKKworICAgICAgICBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5hY2Nlc3NpYmxl
RWxlbWVudEJ5SWQoImVkaXRhYmxlIikucmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXIoKTsKKyAg
ICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAgfSk7Cit9Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwv
aHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9UZXN0RXhwZWN0YXRp
b25zIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggMTMx
MTEzMGVlMjc5Li4xMDA0YjI4YzMxNDMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3Jt
L21hYy9UZXN0RXhwZWN0YXRpb25zCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9UZXN0
RXhwZWN0YXRpb25zCkBAIC0xNjAwLDYgKzE2MDAsNyBAQCBhY2Nlc3NpYmlsaXR5L21hYy9pc29s
YXRlZC10cmVlLW1vZGUtb24tb2ZmLmh0bWwgWyBTa2lwIF0KIAogIyBSZXF1aXJlcyAoSU5MSU5F
X1BSRURJQ1RJT05TKQogYWNjZXNzaWJpbGl0eS9tYWMvYXR0cmlidXRlZC1zdHJpbmcvYXR0cmli
dXRlZC1zdHJpbmctaGFzLWNvbXBsZXRpb24tYW5ub3RhdGlvbi5odG1sIFsgU2tpcCBdCithY2Nl
c3NpYmlsaXR5L21hYy90ZXh0LWlucHV0LXNlc3Npb24tbm90aWZpY2F0aW9ucy5odG1sIFsgU2tp
cCBdCiAKIHdlYmtpdC5vcmcvYi8yMDIwNjQgd2ViYXVkaW8vc2lsZW50LWF1ZGlvLWludGVycnVw
dGVkLWluLWJhY2tncm91bmQuaHRtbCBbIFBhc3MgQ3Jhc2ggXQogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>