<?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>47630</bug_id>
          
          <creation_ts>2010-10-13 15:47:20 -0700</creation_ts>
          <short_desc>reversion bubble in WebViews</short_desc>
          <delta_ts>2010-11-04 20:48:46 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.6</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>
          <dependson>47629</dependson>
    
    <dependson>48078</dependson>
    
    <dependson>48081</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jia Pu">jiapu.mail</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>adele</cc>
    
    <cc>commit-queue</cc>
    
    <cc>enrica</cc>
    
    <cc>mitz</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>293770</commentid>
    <comment_count>0</comment_count>
    <who name="Jia Pu">jiapu.mail</who>
    <bug_when>2010-10-13 15:47:20 -0700</bug_when>
    <thetext>Feature parity with AppKit.

&lt;rdar://problem/8530960&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>304475</commentid>
    <comment_count>1</comment_count>
      <attachid>72904</attachid>
    <who name="Jia Pu">jiapu.mail</who>
    <bug_when>2010-11-03 21:48:45 -0700</bug_when>
    <thetext>Created attachment 72904
Proposed patch (v1)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>304768</commentid>
    <comment_count>2</comment_count>
      <attachid>72904</attachid>
    <who name="">mitz</who>
    <bug_when>2010-11-04 11:22:45 -0700</bug_when>
    <thetext>Comment on attachment 72904
Proposed patch (v1)

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

Generally good, but enough comments to warrant a second round.

&gt; WebCore/ChangeLog:18
&gt; +        1. On Mac OS X, the result of spell checking is partly determined by past user usage. We can&apos;t
&gt; +           realiably generating test cases until we can disable user custom data during spell checking.

Is there a way to set up the environment for DumpRenderTree such that it won’t be affected by user data?

&gt; WebCore/ChangeLog:21
&gt; +        This patch is to add reversion to correction panel. It consistis of following major code changes:

Typo: “consistis”

&gt; WebCore/ChangeLog:37
&gt; +          the new selection is a carret selection at end of a previously corrected word.

Typo: “carret”.

&gt; WebCore/WebCore.vcproj/WebCore.vcproj:45856
&gt; +			    RelativePath=&quot;..\editing\CorrectionPanelInfo.h&quot;
&gt; +			    &gt;

You used spaces instead of tabs for some of the indentation here.

&gt; WebCore/editing/CorrectionPanelInfo.h:38
&gt; +#endif /* #if PLATFORM(MAC) &amp;&amp; !defined(BUILDING_ON_TIGER) &amp;&amp; !defined(BUILDING_ON_LEOPARD) &amp;&amp; !defined(BUILDING_ON_SNOW_LEOPARD) */

Use // for the trailing comment.

&gt; WebCore/editing/CorrectionPanelInfo.h:49
&gt; +    enum {
&gt; +        PanelTypeCorrection = 0,
&gt; +        PanelTypeReversion
&gt; +    };
&gt; +    typedef unsigned PanelType;

This is not a bit mask, so you should just name the enum and avoid the typedef.

&gt; WebCore/editing/CorrectionPanelInfo.h:58
&gt; +enum CorrectionWasRejectedOrNot { CorrectionWasNotRejected, CorrectionWasRejected };

I wonder if “Accepted” would be better than “Not Rejected”.

&gt; WebCore/editing/Editor.cpp:500
&gt; +    if (currentSelection.isCaret() &amp;&amp; currentSelection != oldSelection) {
&gt; +        VisiblePosition selectionPosition = currentSelection.start();
&gt; +        VisiblePosition endPositionOfWord = endOfWord(selectionPosition, LeftWordIfOnBoundary);
&gt; +        if (selectionPosition == endPositionOfWord) {
&gt; +            Position position = endPositionOfWord.deepEquivalent();
&gt; +            if (position.anchorType() == Position::PositionIsOffsetInAnchor) {
&gt; +                Node* node = position.containerNode();
&gt; +                int endOffset = position.offsetInContainerNode();
&gt; +                Vector&lt;DocumentMarker&gt; markers = node-&gt;document()-&gt;markers()-&gt;markersForNode(node);
&gt; +                size_t markerCount = markers.size();
&gt; +                for (size_t i = 0; i &lt; markerCount; ++i) {
&gt; +                    const DocumentMarker&amp; marker = markers[i];
&gt; +                    if (marker.type == DocumentMarker::CorrectionIndicator &amp;&amp; static_cast&lt;int&gt;(marker.endOffset) == endOffset) {
&gt; +                        RefPtr&lt;Range&gt; wordRange = Range::create(frame()-&gt;document(), node, marker.startOffset, node, marker.endOffset);
&gt; +                        String currentWord = plainText(wordRange.get());
&gt; +                        if (currentWord.length() &gt; 0 &amp;&amp; marker.description.length() &gt; 0) {
&gt; +                            m_correctionPanelInfo.m_rangeToBeReplaced = wordRange;
&gt; +                            m_correctionPanelInfo.m_replacementString = marker.description;
&gt; +                            startCorrectionPanelTimer(CorrectionPanelInfo::PanelTypeReversion);
&gt; +                        }
&gt; +                        break;
&gt; +                    }
&gt; +                }
&gt; +            }
&gt; +        }
&gt; +    }

You could write this using early returns to avoid this deep indentation.

&gt; WebCore/editing/Editor.cpp:2490
&gt; +            return client()-&gt;dismissCorrectionPanel(CorrectionWasRejected);

No need for “return” here.

&gt; WebCore/editing/Editor.cpp:2511
&gt; +            return client()-&gt;dismissCorrectionPanel(correctionWasRejectedOrNot);

Ditto.

You can also change this method and handleCancelOperation() to have early returns instead of indenting the entire body of the method.

&gt; WebCore/platform/graphics/mac/GraphicsContextMac.mm:27
&gt; +#import &quot;CorrectionPanelInfo.h&quot;

It’s a layering violation to include in platform/ files headers from other parts of WebCore. I suggest that you just leave this file as-is (with the BUILDING_ON checks).

&gt; WebKit/mac/WebCoreSupport/WebEditorClient.mm:873
&gt; +    NSCorrectionBubbleType correctionPanelType = panelType == WebCore::CorrectionPanelInfo::PanelTypeCorrection
&gt; +                                                 ? NSCorrectionBubbleTypeCorrection
&gt; +                                                 : NSCorrectionBubbleTypeReversion;

Please just write this expression in a single line or two lines with normal 4-space indentation for the second line. You should probably name this “correctionBubbleType” or just “bubbleType”.

&gt; WebKit/mac/WebCoreSupport/WebEditorClient.mm:875
&gt; +        if (!acceptedString &amp;&amp; correctionPanelType == WebCore::CorrectionPanelInfo::PanelTypeCorrection) {

You’re comparing a variable of type NSCorrectionBubbleType to a WebCore enum. Didn’t you mean to compare to NSCorrectionBubbleTypeCorrection?

&gt; WebKit/mac/WebCoreSupport/WebEditorClient.mm:878
&gt; +        } else if (acceptedString &amp;&amp; correctionPanelType == WebCore::CorrectionPanelInfo::PanelTypeReversion) {

Similar question here.

&gt; WebKit/mac/WebCoreSupport/WebEditorClient.mm:888
&gt; +        if (correctionWasRejectedOrNot)

This is confusing to read. If you use the variable as a boolean expression, you should give it a non-ambiguous name. Or you can just explicitly compare to one of the enum values.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>304784</commentid>
    <comment_count>3</comment_count>
    <who name="Jia Pu">jiapu.mail</who>
    <bug_when>2010-11-04 11:56:07 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 72904 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=72904&amp;action=review
&gt; 
&gt; Generally good, but enough comments to warrant a second round.

Thanks for the review. I will make change as you suggest except two places that I have replied to your comment below.

&gt; 
&gt; &gt; WebCore/ChangeLog:18
&gt; &gt; +        1. On Mac OS X, the result of spell checking is partly determined by past user usage. We can&apos;t
&gt; &gt; +           realiably generating test cases until we can disable user custom data during spell checking.
&gt; 
&gt; Is there a way to set up the environment for DumpRenderTree such that it won’t be affected by user data?

An SPI has been recently added to AppKit to disable user data. I suggest we hook up DumpRenderTree with said SPI in another patch. However, to make the automated test fast, we still need to be able to fake the delay.


&gt; &gt; WebCore/editing/CorrectionPanelInfo.h:58
&gt; &gt; +enum CorrectionWasRejectedOrNot { CorrectionWasNotRejected, CorrectionWasRejected };
&gt; 
&gt; I wonder if “Accepted” would be better than “Not Rejected”.

The reason for this more confusing naming is due to the three different ways with which the correction panel can be dismissed. 
1. Reject: when user press ESC key or click on the cross button on the panel.
2. Ignore: when user continues typing.
3. Accept: when user types whitespace or punctuation mark.
This argument is used to distinguish case 1 from case 2 and 3, hence the name. Maybe I should use a enum type with three values, even though the handling of two of those values would be the same. That would make explicit the concept I just described. Thought?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>304810</commentid>
    <comment_count>4</comment_count>
    <who name="">mitz</who>
    <bug_when>2010-11-04 12:56:25 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (In reply to comment #2)
&gt; &gt; (From update of attachment 72904 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=72904&amp;action=review
&gt; &gt; 
&gt; &gt; Generally good, but enough comments to warrant a second round.
&gt; 
&gt; Thanks for the review. I will make change as you suggest except two places that I have replied to your comment below.
&gt; 
&gt; &gt; 
&gt; &gt; &gt; WebCore/ChangeLog:18
&gt; &gt; &gt; +        1. On Mac OS X, the result of spell checking is partly determined by past user usage. We can&apos;t
&gt; &gt; &gt; +           realiably generating test cases until we can disable user custom data during spell checking.
&gt; &gt; 
&gt; &gt; Is there a way to set up the environment for DumpRenderTree such that it won’t be affected by user data?
&gt; 
&gt; An SPI has been recently added to AppKit to disable user data. I suggest we hook up DumpRenderTree with said SPI in another patch.

Good idea.

&gt; However, to make the automated test fast, we still need to be able to fake the delay.

I think that is also doable in the long term (as a separate change to WebCore and DumpRenderTree).

&gt; 
&gt; 
&gt; &gt; &gt; WebCore/editing/CorrectionPanelInfo.h:58
&gt; &gt; &gt; +enum CorrectionWasRejectedOrNot { CorrectionWasNotRejected, CorrectionWasRejected };
&gt; &gt; 
&gt; &gt; I wonder if “Accepted” would be better than “Not Rejected”.
&gt; 
&gt; The reason for this more confusing naming is due to the three different ways with which the correction panel can be dismissed. 
&gt; 1. Reject: when user press ESC key or click on the cross button on the panel.
&gt; 2. Ignore: when user continues typing.
&gt; 3. Accept: when user types whitespace or punctuation mark.
&gt; This argument is used to distinguish case 1 from case 2 and 3, hence the name. Maybe I should use a enum type with three values, even though the handling of two of those values would be the same. That would make explicit the concept I just described. Thought?

I think it’s fine as-is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>304894</commentid>
    <comment_count>5</comment_count>
      <attachid>72985</attachid>
    <who name="Jia Pu">jiapu.mail</who>
    <bug_when>2010-11-04 14:59:28 -0700</bug_when>
    <thetext>Created attachment 72985
Proposed patch (v2)

Revised patch based on comment #2 through comment #4.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>304904</commentid>
    <comment_count>6</comment_count>
    <who name="">mitz</who>
    <bug_when>2010-11-04 15:08:02 -0700</bug_when>
    <thetext>Jia, did you intentionally obsolete the newer patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>304915</commentid>
    <comment_count>7</comment_count>
    <who name="Jia Pu">jiapu.mail</who>
    <bug_when>2010-11-04 15:19:30 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; Jia, did you intentionally obsolete the newer patch?

Yes. Doug found a minor bug. A new patch in coming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>304956</commentid>
    <comment_count>8</comment_count>
      <attachid>72997</attachid>
    <who name="Jia Pu">jiapu.mail</who>
    <bug_when>2010-11-04 16:00:08 -0700</bug_when>
    <thetext>Created attachment 72997
Proposed patch (v3)

This patch contains:
1. Changes based on comment #2 through comment #4.
2. A oneliner change in Editor::RespondToChangedSelection() to stop correction panel timer. This prevents reversion from showing up if the user move selection away from the end of a correction word before the timer fires.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>305001</commentid>
    <comment_count>9</comment_count>
      <attachid>72997</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-11-04 16:44:22 -0700</bug_when>
    <thetext>Comment on attachment 72997
Proposed patch (v3)

Rejecting patch 72997 from commit-queue.

Failed to run &quot;[&apos;./WebKitTools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;--bot-id=abarth-cq-sl&apos;, &apos;apply-attachment&apos;, &apos;--force-clean&apos;, &apos;--non-interactive&apos;, 72997]&quot; exit_code: 2
Last 500 characters of output:
#1 succeeded at 1 with fuzz 3.
patching file WebKit2/WebProcess/WebCoreSupport/WebEditorClient.h
patching file WebKit2/WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm
patching file WebKit/mac/ChangeLog
Hunk #1 succeeded at 1 with fuzz 3.
patching file WebKit/mac/WebCoreSupport/WebEditorClient.h
patching file WebKit/mac/WebCoreSupport/WebEditorClient.mm

Failed to run &quot;[u&apos;/Users/abarth/git/webkit-queue/WebKitTools/Scripts/svn-apply&apos;, u&apos;--reviewer&apos;, u&apos;Dan Bernstein&apos;, u&apos;--force&apos;]&quot; exit_code: 1

Full output: http://queues.webkit.org/results/5316003</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>305013</commentid>
    <comment_count>10</comment_count>
    <who name="Jia Pu">jiapu.mail</who>
    <bug_when>2010-11-04 17:03:06 -0700</bug_when>
    <thetext>It seems the xcode project file may be the one that gives the trouble. At least that&apos;s what I got when trying to merge with TOT locally.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>305121</commentid>
    <comment_count>11</comment_count>
    <who name="">mitz</who>
    <bug_when>2010-11-04 20:48:46 -0700</bug_when>
    <thetext>Committed r71385 &lt;http://trac.webkit.org/projects/webkit/changeset/71385&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>72904</attachid>
            <date>2010-11-03 21:48:45 -0700</date>
            <delta_ts>2010-11-04 14:59:28 -0700</delta_ts>
            <desc>Proposed patch (v1)</desc>
            <filename>webkit_bug47630.patch</filename>
            <type>text/plain</type>
            <size>63083</size>
            <attacher name="Jia Pu">jiapu.mail</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MTMwMCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNzMgQEAKKzIwMTAtMTEtMDMgIEppYSBQdSAgPGpwdUBhcHBsZS5jb20+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgcmV2ZXJzaW9uIGJ1
YmJsZSBpbiBXZWJWaWV3cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NDc2MzAKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzg1MzA5NjA+CisKKyAgICAg
ICAgQWRkZWQgbWFudWFsIHRlc3Q6CisgICAgICAgIG1hbnVhbC10ZXN0cy9hdXRvY29ycmVjdGlv
bi9jb250aW51ZS10eXBpbmctdG8tZGlzbWlzcy1yZXZlcnNpb24uaHRtbAorICAgICAgICBtYW51
YWwtdGVzdHMvYXV0b2NvcnJlY3Rpb24vZGVsZXRlLXRvLWRpc21pc3MtcmV2ZXJzaW9uLmh0bWwK
KyAgICAgICAgbWFudWFsLXRlc3RzL2F1dG9jb3JyZWN0aW9uL2RlbGV0ZS10by1lbmQtb2Ytd29y
ZC10by1zaG93LXJldmVyc2lvbi5odG1sCisgICAgICAgIG1hbnVhbC10ZXN0cy9hdXRvY29ycmVj
dGlvbi9tb3ZlLXRvLWVuZC1vZi13b3JkLXRvLXNob3ctcmV2ZXJzaW9uLmh0bWwKKyAgICAgICAg
bWFudWFsLXRlc3RzL2F1dG9jb3JyZWN0aW9uL3R5cGUtd2hpdGVzcGFjZS10by1kaXNtaXNzLXJl
dmVyc2lvbi5odG1sCisKKyAgICAgICAgV2UgY2FuIG9ubHkgbWFudWxseSB0ZXN0IHRoaXMgZmVh
dHVyZSBmb3IgdHdvIHJlYXNvbnM6CisgICAgICAgIDEuIE9uIE1hYyBPUyBYLCB0aGUgcmVzdWx0
IG9mIHNwZWxsIGNoZWNraW5nIGlzIHBhcnRseSBkZXRlcm1pbmVkIGJ5IHBhc3QgdXNlciB1c2Fn
ZS4gV2UgY2FuJ3QKKyAgICAgICAgICAgcmVhbGlhYmx5IGdlbmVyYXRpbmcgdGVzdCBjYXNlcyB1
bnRpbCB3ZSBjYW4gZGlzYWJsZSB1c2VyIGN1c3RvbSBkYXRhIGR1cmluZyBzcGVsbCBjaGVja2lu
Zy4KKyAgICAgICAgMi4gVG8gZXhlcmNpZXNlIHRoaXMgZmVhdHVyZSwgd2UgbmVlZCBhIG1pbmlt
dW0gb2YgMC4zIHNlY29uZCBkZWxheSB1c2luZyBXZWJDb3JlIHRpbWVyLgorCisgICAgICAgIFRo
aXMgcGF0Y2ggaXMgdG8gYWRkIHJldmVyc2lvbiB0byBjb3JyZWN0aW9uIHBhbmVsLiBJdCBjb25z
aXN0aXMgb2YgZm9sbG93aW5nIG1ham9yIGNvZGUgY2hhbmdlczoKKyAgICAgICAgMS4gQ29sbGVj
dGVkIGFsbCBhdXRvY29ycmVjdGlvbiByZWxhdGVkIG1lbWJlciB2YXJpYWJsZXMgaW4gRWRpdG9y
IGludG8gYSBDb3JyZWN0aW9uUGFuZWxJbmZvCisgICAgICAgICAgIGNsYXNzIHRvIGltcHJvdmUg
cmVhZGFiaWxpdHkuCisgICAgICAgIDIuIENoYW5nZWQgc2lnbmF0dXJlIG9mIEVkaXRvcjo6c3Rh
cnRDb3JyZWN0aW9uUGFuZWxUaW1lcigpIHRvIGFsbG93IGNhbGxlciB0byBzcGVjaWZ5IHRoZQor
ICAgICAgICAgICB0eXBlIG9mIGNvcnJlY3Rpb24gcGFuZWwtLXJlZ3VsYXIgY29ycmVjdGlvbiBv
ciByZXZlcnNpb24uCisgICAgICAgIDMuIE1hZGUgbmVjZXNzYXJ5IGNoYW5nZXMgdG8gYWRvcHQg
cmV2ZXJzaW9uIEFQSSBpbiBBcHBLaXQuCisgICAgICAgIDQuIFVzZSBTVVBQT1JUX0NPUlJFQ1RJ
T05fUEFORUwgbWFjcm8gdG8gaW1wcm92ZSByZWFkYWJpbGl0eS4KKworICAgICAgICAqIEdOVW1h
a2VmaWxlLmFtOiBBZGRlZCBDb3JyZWN0aW9uUGFuZWxJbmZvLmguCisgICAgICAgICogV2ViQ29y
ZS5neXBpOiBEaXR0by4KKyAgICAgICAgKiBXZWJDb3JlLnBybzogRGl0dG8uCisgICAgICAgICog
V2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6IERpdHRvLgorICAgICAgICAqIFdlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBlZGl0aW5nL0NvcnJlY3Rpb25Q
YW5lbEluZm8uaDogQWRkZWQuCisgICAgICAgICogZWRpdGluZy9FZGl0b3IuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yOjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKTogU3RhcnQgY29y
cmVjdGlvbiBwYW5lbCB0aW1lciBmb3IgcmV2ZXJzaW9uIHdoZW4KKyAgICAgICAgICB0aGUgbmV3
IHNlbGVjdGlvbiBpcyBhIGNhcnJldCBzZWxlY3Rpb24gYXQgZW5kIG9mIGEgcHJldmlvdXNseSBj
b3JyZWN0ZWQgd29yZC4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6YXBwbGllZEVkaXRpbmcp
OiBTdG9wIHRpbWVyIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIG1ldGhvZCBpbnN0ZWFkIG9mIGF0
IHRoZSBlbmQuCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6On5FZGl0b3IpOiBBZG9wdGVkIG5l
dyBtZXRob2QgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbCgpLgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1Bvc2l0aW9uKTogQWRvcHRlZCBuZXcg
bWV0aG9kIGFwcGx5Q29ycmVjdGlvblBhbmVsSW5mbygpLgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKTogQ29kZSBjaGFu
Z2UgZm9yIG5ldyBtX2NvcnJlY3Rpb25QYW5lbEluZm8KKyAgICAgICAgICBtZW1iZXIgdmFyaWFi
bGUuCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmNvcnJlY3Rpb25QYW5lbFRpbWVyRmlyZWQp
OiBDaGFuZ2UgdG8gaGFuZGxlIHJldmVyc2lvbiBwYW5lbCB0eXBlLgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdG9yOjpoYW5kbGVSZWplY3RlZENvcnJlY3Rpb24pOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6c3RhcnRDb3JyZWN0aW9uUGFuZWxUaW1lcik6IENoYW5nZWQgc2lnbmF0
dXJlIHRvIGFsbG93IHBhc3NpbmcgaW4gcGFuZWwgdHlwZS4KKyAgICAgICAgKFdlYkNvcmU6OkVk
aXRvcjo6c3RvcENvcnJlY3Rpb25QYW5lbFRpbWVyKTogQWRvcHRlZCBtYWNybyBTVVBQT1JUX0NP
UlJFQ1RJT05fUEFORUwuCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmhhbmRsZUNhbmNlbE9w
ZXJhdGlvbik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjppc1Nob3dpbmdDb3Jy
ZWN0aW9uUGFuZWwpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6ZGlzbWlzc0Nv
cnJlY3Rpb25QYW5lbCk6IFVwZGF0ZSBtX2NvcnJlY3Rpb25QYW5lbEluZm8gd2hlbiBjb3JyZWN0
aW9uIHBhbmVsCisgICAgICAgICAgaXMgZGlzbWlzc2VkLgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjphcHBseUNvcnJlY3Rpb25QYW5lbEluZm8pOiBGYWN0b3JlZCBvdXQgY29kZSB0aGF0IGFw
cGxpZXMgYXV0b2NvcnJlY3Rpb24uCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmNoYW5nZVNl
bGVjdGlvbkFmdGVyQ29tbWFuZCk6IEFkb3B0IG1hY3JvIFNVUFBPUlRfQ09SUkVDVElPTl9QQU5F
TC4KKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5oOiBBZG9wdGVkIENvcnJlY3Rpb25QYW5lbElu
Zm8gYW5kIGFkZCBuZXcgbWVtYmVyIG1ldGhvZHMuCisgICAgICAgICogZWRpdGluZy9FZGl0b3JD
b21tYW5kLmNwcDogQWRvcHRlZCBtYWNybyBTVVBQT1JUX0NPUlJFQ1RJT05fUEFORUwKKyAgICAg
ICAgKFdlYkNvcmU6OmNyZWF0ZUNvbW1hbmRNYXApOgorICAgICAgICAqIGVkaXRpbmcvVHlwaW5n
Q29tbWFuZC5jcHA6IEFkb3B0ZWQgbWFjcm8gU1VQUE9SVF9DT1JSRUNUSU9OX1BBTkVMIGFuZCBu
ZXcgc2lnbmF0dXJlIG9mCisgICAgICAgICAgc3RhcnRDb3JyZWN0aW9uUGFuZWxUaW1lcigpLgor
ICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlw
aW5nKToKKyAgICAgICAgKiBsb2FkZXIvRW1wdHlDbGllbnRzLmg6CisgICAgICAgIChXZWJDb3Jl
OjpFbXB0eUVkaXRvckNsaWVudDo6c2hvd0NvcnJlY3Rpb25QYW5lbCk6IEFkb3B0ZWQgbmV3IHNp
Z25hdHVyZSBvZiBiYXNlIGNsYXNzIG1ldGhvZC4KKyAgICAgICAgKFdlYkNvcmU6OkVtcHR5RWRp
dG9yQ2xpZW50OjpkaXNtaXNzQ29ycmVjdGlvblBhbmVsKTogIERpdHRvLgorICAgICAgICAqIG1h
bnVhbC10ZXN0cy9hdXRvY29ycmVjdGlvbi9jb250aW51ZS10eXBpbmctdG8tZGlzbWlzcy1yZXZl
cnNpb24uaHRtbDogQWRkZWQuCisgICAgICAgICogbWFudWFsLXRlc3RzL2F1dG9jb3JyZWN0aW9u
L2RlbGV0ZS10by1kaXNtaXNzLXJldmVyc2lvbi5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBtYW51
YWwtdGVzdHMvYXV0b2NvcnJlY3Rpb24vZGVsZXRlLXRvLWVuZC1vZi13b3JkLXRvLXNob3ctcmV2
ZXJzaW9uLmh0bWw6IEFkZGVkLgorICAgICAgICAqIG1hbnVhbC10ZXN0cy9hdXRvY29ycmVjdGlv
bi9tb3ZlLXRvLWVuZC1vZi13b3JkLXRvLXNob3ctcmV2ZXJzaW9uLmh0bWw6IEFkZGVkLgorICAg
ICAgICAqIG1hbnVhbC10ZXN0cy9hdXRvY29ycmVjdGlvbi90eXBlLXdoaXRlc3BhY2UtdG8tZGlz
bWlzcy1yZXZlcnNpb24uaHRtbDogQWRkZWQuCisgICAgICAgICogcGFnZS9FZGl0b3JDbGllbnQu
aDogQ2hhbmdlZCBzaWduYXR1cmUgb2Ygc2hvd0NvcnJlY3Rpb25QYW5lbCgpIGFuZCBkaXNtaXNz
Q29ycmVjdGlvblBhbmVsKCkuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBo
aWNzQ29udGV4dE1hYy5tbTogQWRvcHQgbWFjcm8gU1VQUE9SVF9DT1JSRUNUSU9OX1BBTkVMLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHRDaGVja2lu
Zyk6CisKIDIwMTAtMTEtMDMgIFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dhQHdlYmtpdC5vcmc+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBSb2Jlbi4KSW5kZXg6IFdlYkNvcmUvR05VbWFr
ZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkocmV2aXNpb24g
NzEzMDApCisrKyBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0xMjc4
LDYgKzEyNzgsNyBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvZWRpdGluZy9Db21w
b3NpdGVFZGl0Q29tbWFuZC5oIFwKIAlXZWJDb3JlL2VkaXRpbmcvQ3JlYXRlTGlua0NvbW1hbmQu
Y3BwIFwKIAlXZWJDb3JlL2VkaXRpbmcvQ3JlYXRlTGlua0NvbW1hbmQuaCBcCisJV2ViQ29yZS9l
ZGl0aW5nL0NvcnJlY3Rpb25QYW5lbEluZm8uaCBcCiAJV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZUJ1
dHRvbkNvbnRyb2xsZXIuY3BwIFwKIAlXZWJDb3JlL2VkaXRpbmcvRGVsZXRlQnV0dG9uQ29udHJv
bGxlci5oIFwKIAlXZWJDb3JlL2VkaXRpbmcvRGVsZXRlQnV0dG9uLmNwcCBcCkluZGV4OiBXZWJD
b3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2
aXNpb24gNzEzMDApCisrKyBXZWJDb3JlL1dlYkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAt
MTM2Myw2ICsxMzYzLDcgQEAKICAgICAgICAgICAgICdlZGl0aW5nL0JyZWFrQmxvY2txdW90ZUNv
bW1hbmQuaCcsCiAgICAgICAgICAgICAnZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAn
LAogICAgICAgICAgICAgJ2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuaCcsCisgICAgICAg
ICAgICAnZWRpdGluZy9Db3JyZWN0aW9uUGFuZWxJbmZvLmgnLAogICAgICAgICAgICAgJ2VkaXRp
bmcvQ3JlYXRlTGlua0NvbW1hbmQuY3BwJywKICAgICAgICAgICAgICdlZGl0aW5nL0NyZWF0ZUxp
bmtDb21tYW5kLmgnLAogICAgICAgICAgICAgJ2VkaXRpbmcvRGVsZXRlQnV0dG9uLmNwcCcsCklu
ZGV4OiBXZWJDb3JlL1dlYkNvcmUucHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5w
cm8JKHJldmlzaW9uIDcxMzAwKQorKysgV2ViQ29yZS9XZWJDb3JlLnBybwkod29ya2luZyBjb3B5
KQpAQCAtMTY4OSw2ICsxNjg5LDcgQEAgSEVBREVSUyArPSBcCiAgICAgZWRpdGluZy9BcHBseVN0
eWxlQ29tbWFuZC5oIFwKICAgICBlZGl0aW5nL0JyZWFrQmxvY2txdW90ZUNvbW1hbmQuaCBcCiAg
ICAgZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5oIFwKKyAgICBlZGl0aW5nL0NvcnJlY3Rp
b25QYW5lbEluZm8uaCBcCiAgICAgZWRpdGluZy9DcmVhdGVMaW5rQ29tbWFuZC5oIFwKICAgICBl
ZGl0aW5nL0RlbGV0ZUJ1dHRvbkNvbnRyb2xsZXIuaCBcCiAgICAgZWRpdGluZy9EZWxldGVCdXR0
b24uaCBcCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHJldmlzaW9u
IDcxMzAwKQorKysgV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtNDU4NTIsNiArNDU4NTIsMTAgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJ
CTxGaWxlDQorCQkJICAgIFJlbGF0aXZlUGF0aD0iLi5cZWRpdGluZ1xDb3JyZWN0aW9uUGFuZWxJ
bmZvLmgiDQorCQkJICAgID4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQ
YXRoPSIuLlxlZGl0aW5nXENyZWF0ZUxpbmtDb21tYW5kLmNwcCINCiAJCQkJPg0KIAkJCQk8Rmls
ZUNvbmZpZ3VyYXRpb24NCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkocmV2aXNpb24gNzEzMDApCisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDY2Nyw2ICs0NjY3LDcgQEAKIAkJQjc3
NkQ0M0QxMTA0NTI3NTAwQkVCMEVDIC8qIFByaW50Q29udGV4dC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNzc2RDQzQzExMDQ1Mjc1MDBCRUIwRUMg
LyogUHJpbnRDb250ZXh0LmNwcCAqLzsgfTsKIAkJQjg4NUU4RDQxMUUwNkREMjAwOUZGQkY0IC8q
IEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCODg1RThEMjExRTA2REQyMDA5RkZCRjQgLyogSW5z
cGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmNwcCAqLzsgfTsKIAkJQjg4NUU4RDUxMUUwNkRE
MjAwOUZGQkY0IC8qIEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjg4NUU4RDMxMUUwNkREMjAwOUZG
QkY0IC8qIEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKCk7IH07IH07CisJCUI4QTZBNkQ1MTI3QjMzOEQwMDg2NzNCQSAvKiBDb3Jy
ZWN0aW9uUGFuZWxJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCOEE2QTZENDEyN0IzMzhEMDA4NjczQkEgLyogQ29ycmVjdGlvblBhbmVsSW5mby5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDMDBG
MDA0MEUwQTE4NTUwMEZEMDRFMyAvKiBET01GaWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzAwRUZGRTBFMEExODU1MDBGRDA0RTMgLyogRE9NRmls
ZS5oICovOyB9OwogCQlCQzAwRjAwNTBFMEExODU1MDBGRDA0RTMgLyogRE9NRmlsZS5tbSBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMDBFRkZGMEUwQTE4
NTUwMEZEMDRFMyAvKiBET01GaWxlLm1tICovOyB9OwogCQlCQzAwRjAwNjBFMEExODU1MDBGRDA0
RTMgLyogRE9NRmlsZUludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCQzAwRjAwMDBFMEExODU1MDBGRDA0RTMgLyogRE9NRmlsZUludGVybmFs
LmggKi87IH07CkBAIC0xMDY2NSw2ICsxMDY2Niw3IEBACiAJCUI3NzZENDNDMTEwNDUyNzUwMEJF
QjBFQyAvKiBQcmludENvbnRleHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gUHJpbnRDb250ZXh0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjg4
NUU4RDIxMUUwNkREMjAwOUZGQkY0IC8qIEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnNwZWN0b3JBcHBsaWNh
dGlvbkNhY2hlQWdlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCODg1RThE
MzExRTA2REQyMDA5RkZCRjQgLyogSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVB
Z2VudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCOEE2QTZENDEyN0IzMzhEMDA4
NjczQkEgLyogQ29ycmVjdGlvblBhbmVsSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBDb3JyZWN0aW9uUGFuZWxJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUJDMDBFRkZFMEUwQTE4NTUwMEZEMDRFMyAvKiBET01GaWxlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IERPTUZpbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQkMwMEVGRkYwRTBBMTg1NTAwRkQwNEUzIC8qIERPTUZpbGUubW0gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBET01GaWxlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlCQzAwRjAwMDBFMEExODU1MDBGRDA0RTMgLyogRE9NRmlsZUludGVybmFsLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTUZpbGVJbnRlcm5hbC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTQ0ODYsNiArMTQ0ODgsNyBAQAogCQkJCTkzMzA5
RDhDMDk5RTY0OTEwMDU2RTU4MSAvKiBCcmVha0Jsb2NrcXVvdGVDb21tYW5kLmggKi8sCiAJCQkJ
OTMzMDlEOEQwOTlFNjQ5MTAwNTZFNTgxIC8qIENvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcCAqLywK
IAkJCQk5MzMwOUQ4RTA5OUU2NDkxMDA1NkU1ODEgLyogQ29tcG9zaXRlRWRpdENvbW1hbmQuaCAq
LywKKwkJCQlCOEE2QTZENDEyN0IzMzhEMDA4NjczQkEgLyogQ29ycmVjdGlvblBhbmVsSW5mby5o
ICovLAogCQkJCUQwQjA1NTY3MDlDNjcwMDEwMDMwN0U0MyAvKiBDcmVhdGVMaW5rQ29tbWFuZC5j
cHAgKi8sCiAJCQkJRDBCMDU1NjYwOUM2NzAwMTAwMzA3RTQzIC8qIENyZWF0ZUxpbmtDb21tYW5k
LmggKi8sCiAJCQkJMUM0QzhGNjMwQUQ4NjU1RDAwOTQ3NUNFIC8qIERlbGV0ZUJ1dHRvbi5jcHAg
Ki8sCkBAIC0yMTI3MSw2ICsyMTI3NCw3IEBACiAJCQkJNkU2N0QyQTcxMjgwRThBNDAwODc1OEY3
IC8qIEV4dGVuc2lvbnMzRE9wZW5HTC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkU2N0QyQTkxMjgw
RThCRDAwODc1OEY3IC8qIEV4dGVuc2lvbnMzRC5oIGluIEhlYWRlcnMgKi8sCiAgCQkJCTkzRjZG
MUVFMTI3RjcwQjEwMDU1Q0IwNiAvKiBXZWJHTENvbnRleHRFdmVudC5oIGluIEhlYWRlcnMgKi8s
CisJCQkJQjhBNkE2RDUxMjdCMzM4RDAwODY3M0JBIC8qIENvcnJlY3Rpb25QYW5lbEluZm8uaCBp
biBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Np
bmcgPSAwOwogCQl9OwpJbmRleDogV2ViQ29yZS9lZGl0aW5nL0NvcnJlY3Rpb25QYW5lbEluZm8u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvQ29ycmVjdGlvblBhbmVsSW5mby5oCShy
ZXZpc2lvbiAwKQorKysgV2ViQ29yZS9lZGl0aW5nL0NvcnJlY3Rpb25QYW5lbEluZm8uaAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDb3JyZWN0aW9uUGFu
ZWxJbmZvX2gKKyNkZWZpbmUgQ29ycmVjdGlvblBhbmVsSW5mb19oCisKKyNpZiBQTEFURk9STShN
QUMpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19P
Tl9MRU9QQVJEKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCisvLyBTb21l
IHBsYXRmb3JtcyBwcm92aWRlIFVJIGZvciBzdWdnZXN0aW5nIGF1dG9jb3JyZWN0aW9uLgorI2Rl
ZmluZSBTVVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMIDEKKy8vIFNvbWUgcGxhdGZvcm1zIHVz
ZSBzcGVsbGluZyBhbmQgYXV0b2NvcnJlY3Rpb24gbWFya2VycyB0byBwcm92aWRlIHZpc3VhbCBj
dWUuCisvLyBPbiBzdWNoIHBsYXRmb3JtLCBpZiB3b3JkIHdpdGggbWFya2VyIGlzIGVkaXRlZCwg
d2UgbmVlZCB0byByZW1vdmUgdGhlIG1hcmtlci4KKyNkZWZpbmUgUkVNT1ZFX01BUktFUlNfVVBP
Tl9FRElUSU5HIDEKKyNlbHNlCisjZGVmaW5lIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwg
MAorI2RlZmluZSBSRU1PVkVfTUFSS0VSU19VUE9OX0VESVRJTkcgMAorI2VuZGlmIC8qICNpZiBQ
TEFURk9STShNQUMpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChC
VUlMRElOR19PTl9MRU9QQVJEKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQp
ICovCisKKyNpbmNsdWRlICJSYW5nZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0cnVj
dCBDb3JyZWN0aW9uUGFuZWxJbmZvIHsKKyAgICBlbnVtIHsKKyAgICAgICAgUGFuZWxUeXBlQ29y
cmVjdGlvbiA9IDAsCisgICAgICAgIFBhbmVsVHlwZVJldmVyc2lvbgorICAgIH07CisgICAgdHlw
ZWRlZiB1bnNpZ25lZCBQYW5lbFR5cGU7CisKKyAgICBSZWZQdHI8UmFuZ2U+IG1fcmFuZ2VUb0Jl
UmVwbGFjZWQ7CisgICAgU3RyaW5nIG1fcmVwbGFjZWRTdHJpbmc7CisgICAgU3RyaW5nIG1fcmVw
bGFjZW1lbnRTdHJpbmc7CisgICAgUGFuZWxUeXBlIG1fcGFuZWxUeXBlOworICAgIGJvb2wgbV9p
c0FjdGl2ZTsKK307CisKK2VudW0gQ29ycmVjdGlvbldhc1JlamVjdGVkT3JOb3QgeyBDb3JyZWN0
aW9uV2FzTm90UmVqZWN0ZWQsIENvcnJlY3Rpb25XYXNSZWplY3RlZCB9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBDb3JyZWN0aW9uUGFuZWxJbmZvX2gKSW5kZXg6IFdl
YkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9F
ZGl0b3IuY3BwCShyZXZpc2lvbiA3MTMwMCkKKysrIFdlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00NTcsOSArNDU3LDQ4IEBAIGJvb2wgRWRpdG9yOjpzaG91bGRT
aG93RGVsZXRlSW50ZXJmYWNlKEgKIAogdm9pZCBFZGl0b3I6OnJlc3BvbmRUb0NoYW5nZWRTZWxl
Y3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgb2xkU2VsZWN0aW9uKQogeworI2lmIFNVUFBP
UlRfQVVUT0NPUlJFQ1RJT05fUEFORUwKKyAgICBWaXNpYmxlU2VsZWN0aW9uIGN1cnJlbnRTZWxl
Y3Rpb24oZnJhbWUoKS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpKTsKKyAgICBpZiAoY3VycmVu
dFNlbGVjdGlvbiAhPSBvbGRTZWxlY3Rpb24pCisgICAgICAgIGRpc21pc3NDb3JyZWN0aW9uUGFu
ZWwoQ29ycmVjdGlvbldhc05vdFJlamVjdGVkKTsKKyNlbmRpZiAvLyBTVVBQT1JUX0FVVE9DT1JS
RUNUSU9OX1BBTkVMCisKICAgICBpZiAoY2xpZW50KCkpCiAgICAgICAgIGNsaWVudCgpLT5yZXNw
b25kVG9DaGFuZ2VkU2VsZWN0aW9uKCk7CiAgICAgbV9kZWxldGVCdXR0b25Db250cm9sbGVyLT5y
ZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKG9sZFNlbGVjdGlvbik7CisKKyNpZiBTVVBQT1JUX0FV
VE9DT1JSRUNUSU9OX1BBTkVMCisgICAgLy8gV2hlbiB1c2VyIG1vdmVzIGNhcmV0IHRvIHRoZSBl
bmQgb2YgYXV0b2NvcnJlY3RlZCB3b3JkIGFuZCBwYXVzZXMsIHdlIHNob3cgdGhlIHBhbmVsCisg
ICAgLy8gY29udGFpbmluZyB0aGUgb3JpZ2luYWwgcHJlLWNvcnJlY3Rpb24gd29yZCBzbyB0aGF0
IHVzZXIgY2FuIHF1aWNrbHkgcmV2ZXJ0IHRoZQorICAgIC8vIHVuZGVzaXJlZCBhdXRvY29ycmVj
dGlvbi4gSGVyZSwgd2Ugc3RhcnQgY29ycmVjdGlvbiBwYW5lbCB0aW1lciBvbmNlIHdlIGNvbmZp
cm0gdGhhdAorICAgIC8vIHRoZSBuZXcgY2FyZXQgcG9zaXRpb24gaXMgYXQgdGhlIGVuZCBvZiBh
IHdvcmQuCisgICAgaWYgKGN1cnJlbnRTZWxlY3Rpb24uaXNDYXJldCgpICYmIGN1cnJlbnRTZWxl
Y3Rpb24gIT0gb2xkU2VsZWN0aW9uKSB7CisgICAgICAgIFZpc2libGVQb3NpdGlvbiBzZWxlY3Rp
b25Qb3NpdGlvbiA9IGN1cnJlbnRTZWxlY3Rpb24uc3RhcnQoKTsKKyAgICAgICAgVmlzaWJsZVBv
c2l0aW9uIGVuZFBvc2l0aW9uT2ZXb3JkID0gZW5kT2ZXb3JkKHNlbGVjdGlvblBvc2l0aW9uLCBM
ZWZ0V29yZElmT25Cb3VuZGFyeSk7CisgICAgICAgIGlmIChzZWxlY3Rpb25Qb3NpdGlvbiA9PSBl
bmRQb3NpdGlvbk9mV29yZCkgeworICAgICAgICAgICAgUG9zaXRpb24gcG9zaXRpb24gPSBlbmRQ
b3NpdGlvbk9mV29yZC5kZWVwRXF1aXZhbGVudCgpOworICAgICAgICAgICAgaWYgKHBvc2l0aW9u
LmFuY2hvclR5cGUoKSA9PSBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKSB7Cisg
ICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IHBvc2l0aW9uLmNvbnRhaW5lck5vZGUoKTsKKyAg
ICAgICAgICAgICAgICBpbnQgZW5kT2Zmc2V0ID0gcG9zaXRpb24ub2Zmc2V0SW5Db250YWluZXJO
b2RlKCk7CisgICAgICAgICAgICAgICAgVmVjdG9yPERvY3VtZW50TWFya2VyPiBtYXJrZXJzID0g
bm9kZS0+ZG9jdW1lbnQoKS0+bWFya2VycygpLT5tYXJrZXJzRm9yTm9kZShub2RlKTsKKyAgICAg
ICAgICAgICAgICBzaXplX3QgbWFya2VyQ291bnQgPSBtYXJrZXJzLnNpemUoKTsKKyAgICAgICAg
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1hcmtlckNvdW50OyArK2kpIHsKKyAgICAg
ICAgICAgICAgICAgICAgY29uc3QgRG9jdW1lbnRNYXJrZXImIG1hcmtlciA9IG1hcmtlcnNbaV07
CisgICAgICAgICAgICAgICAgICAgIGlmIChtYXJrZXIudHlwZSA9PSBEb2N1bWVudE1hcmtlcjo6
Q29ycmVjdGlvbkluZGljYXRvciAmJiBzdGF0aWNfY2FzdDxpbnQ+KG1hcmtlci5lbmRPZmZzZXQp
ID09IGVuZE9mZnNldCkgeworICAgICAgICAgICAgICAgICAgICAgICAgUmVmUHRyPFJhbmdlPiB3
b3JkUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGZyYW1lKCktPmRvY3VtZW50KCksIG5vZGUsIG1hcmtl
ci5zdGFydE9mZnNldCwgbm9kZSwgbWFya2VyLmVuZE9mZnNldCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBTdHJpbmcgY3VycmVudFdvcmQgPSBwbGFpblRleHQod29yZFJhbmdlLmdldCgpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50V29yZC5sZW5ndGgoKSA+IDAgJiYg
bWFya2VyLmRlc2NyaXB0aW9uLmxlbmd0aCgpID4gMCkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5tX3JhbmdlVG9CZVJlcGxhY2VkID0gd29yZFJh
bmdlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5t
X3JlcGxhY2VtZW50U3RyaW5nID0gbWFya2VyLmRlc2NyaXB0aW9uOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0YXJ0Q29ycmVjdGlvblBhbmVsVGltZXIoQ29ycmVjdGlvblBhbmVsSW5m
bzo6UGFuZWxUeXBlUmV2ZXJzaW9uKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorI2VuZGlmIC8vIFNV
UFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwKIH0KIAogdm9pZCBFZGl0b3I6OnJlc3BvbmRUb0No
YW5nZWRDb250ZW50cyhjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBlbmRpbmdTZWxlY3Rpb24pCkBA
IC05OTgsMTAgKzEwMzcsMTMgQEAgc3RhdGljIHZvaWQgZGlzcGF0Y2hFZGl0YWJsZUNvbnRlbnRD
aGFuZwogCiB2b2lkIEVkaXRvcjo6YXBwbGllZEVkaXRpbmcoUGFzc1JlZlB0cjxFZGl0Q29tbWFu
ZD4gY21kKQogeworICAgIC8vIFdlIG1heSBzdGFydCByZXZlcnNpb24gcGFuZWwgdGltZXIgaW4g
cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbigpLgorICAgIC8vIFNvIHdlIHN0b3AgdGhlIHRpbWVy
IGZvciBjdXJyZW50IHBhbmVsIGJlZm9yZSBjYWxsaW5nIGNoYW5nZVNlbGVjdGlvbkFmdGVyQ29t
bWFuZCgpIGxhdGVyIGluIHRoaXMgbWV0aG9kLgorICAgIHN0b3BDb3JyZWN0aW9uUGFuZWxUaW1l
cigpOwogICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPnVwZGF0ZUxheW91dCgpOwotICAgIAorCiAg
ICAgZGlzcGF0Y2hFZGl0YWJsZUNvbnRlbnRDaGFuZ2VkRXZlbnRzKCpjbWQpOwotICAgIAorCiAg
ICAgVmlzaWJsZVNlbGVjdGlvbiBuZXdTZWxlY3Rpb24oY21kLT5lbmRpbmdTZWxlY3Rpb24oKSk7
CiAgICAgLy8gRG9uJ3QgY2xlYXIgdGhlIHR5cGluZyBzdHlsZSB3aXRoIHRoaXMgc2VsZWN0aW9u
IGNoYW5nZS4gIFdlIGRvIHRob3NlIHRoaW5ncyBlbHNld2hlcmUgaWYgbmVjZXNzYXJ5LgogICAg
IGNoYW5nZVNlbGVjdGlvbkFmdGVyQ29tbWFuZChuZXdTZWxlY3Rpb24sIGZhbHNlLCBmYWxzZSk7
CkBAIC0xMDIwLDcgKzEwNjIsNiBAQCB2b2lkIEVkaXRvcjo6YXBwbGllZEVkaXRpbmcoUGFzc1Jl
ZlB0cjxFCiAgICAgICAgICAgICBjbGllbnQoKS0+cmVnaXN0ZXJDb21tYW5kRm9yVW5kbyhtX2xh
c3RFZGl0Q29tbWFuZCk7CiAgICAgfQogICAgIHJlc3BvbmRUb0NoYW5nZWRDb250ZW50cyhuZXdT
ZWxlY3Rpb24pOwotICAgIHN0b3BDb3JyZWN0aW9uUGFuZWxUaW1lcigpOwogfQogCiB2b2lkIEVk
aXRvcjo6dW5hcHBsaWVkRWRpdGluZyhQYXNzUmVmUHRyPEVkaXRDb21tYW5kPiBjbWQpCkBAIC0x
MDY4LDkgKzExMDksOCBAQCBFZGl0b3I6OkVkaXRvcihGcmFtZSogZnJhbWUpCiAKIEVkaXRvcjo6
fkVkaXRvcigpCiB7Ci0jaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9U
SUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJ
TkdfT05fU05PV19MRU9QQVJEKQotICAgIGlmIChjbGllbnQoKSkKLSAgICAgICAgY2xpZW50KCkt
PmRpc21pc3NDb3JyZWN0aW9uUGFuZWwodHJ1ZSk7CisjaWYgU1VQUE9SVF9BVVRPQ09SUkVDVElP
Tl9QQU5FTAorICAgIGRpc21pc3NDb3JyZWN0aW9uUGFuZWwoQ29ycmVjdGlvbldhc05vdFJlamVj
dGVkKTsKICNlbmRpZgogfQogCkBAIC0xOTY3LDQ3ICsyMDA3LDEwIEBAIHZvaWQgRWRpdG9yOjpt
YXJrTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW0KIHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdz
QWZ0ZXJUeXBpbmdUb1Bvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmcCkKIHsKICNpZiBQ
TEFURk9STShNQUMpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChC
VUlMRElOR19PTl9MRU9QQVJEKQotI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFS
RCkKKyNpZiBTVVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMCiAgICAgLy8gQXBwbHkgcGVuZGlu
ZyBhdXRvY29ycmVjdGlvbiBiZWZvcmUgbmV4dCByb3VuZCBvZiBzcGVsbCBjaGVja2luZy4KLSAg
ICBib29sIGRpZEFwcGx5Q29ycmVjdGlvbiA9IGZhbHNlOwotICAgIGlmIChtX3JhbmdlVG9CZVJl
cGxhY2VkQnlDb3JyZWN0aW9uKSB7Ci0gICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAg
ICAgICBSZWZQdHI8UmFuZ2U+IHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24gPSBt
X3JhbmdlVG9CZVJlcGxhY2VkQnlDb3JyZWN0aW9uLT5jbG9uZVJhbmdlKGVjKTsKLSAgICAgICAg
aWYgKCFlYykgewotICAgICAgICAgICAgc2V0U3RhcnQocGFyYWdyYXBoUmFuZ2VDb250YWluaW5n
Q29ycmVjdGlvbi5nZXQoKSwgc3RhcnRPZlBhcmFncmFwaChtX3JhbmdlVG9CZVJlcGxhY2VkQnlD
b3JyZWN0aW9uLT5zdGFydFBvc2l0aW9uKCkpKTsKLSAgICAgICAgICAgIHNldEVuZChwYXJhZ3Jh
cGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLmdldCgpLCBlbmRPZlBhcmFncmFwaChtX3Jhbmdl
VG9CZVJlcGxhY2VkQnlDb3JyZWN0aW9uLT5lbmRQb3NpdGlvbigpKSk7Ci0gICAgICAgICAgICAv
LyBBZnRlciB3ZSByZXBsYWNlIHRoZSB3b3JkIGF0IHJhbmdlIG1fcmFuZ2VUb0JlUmVwbGFjZWRC
eUNvcnJlY3Rpb24sIHdlIG5lZWQgdG8gYWRkIAotICAgICAgICAgICAgLy8gYXV0b2NvcnJlY3Rp
b24gdW5kZXJsaW5lIGF0IHRoYXQgcmFuZ2UuIEhvd2V2ZXIsIG9uY2UgdGhlIHJlcGxhY2VtZW50
IHRvb2sgcGxhY2UsIHRoZQotICAgICAgICAgICAgLy8gdmFsdWUgb2YgbV9yYW5nZVRvQmVSZXBs
YWNlZEJ5Q29ycmVjdGlvbiBpcyBub3QgdmFsaWQgYW55bW9yZS4gU28gYmVmb3JlIHdlIGNhcnJ5
IG91dAotICAgICAgICAgICAgLy8gdGhlIHJlcGxhY2VtZW50LCB3ZSBuZWVkIHRvIHN0b3JlIHRo
ZSBzdGFydCBwb3NpdGlvbiBvZiBtX3JhbmdlVG9CZVJlcGxhY2VkQnlDb3JyZWN0aW9uCi0gICAg
ICAgICAgICAvLyByZWxhdGl2ZSB0byB0aGUgc3RhcnQgcG9zaXRpb24gb2YgdGhlIGNvbnRhaW5p
bmcgcGFyYWdyYXBoLiBXZSB1c2UgY29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGgKLSAg
ICAgICAgICAgIC8vIHRvIHN0b3JlIHRoaXMgdmFsdWUuIEluIG9yZGVyIHRvIG9idGFpbiB0aGlz
IG9mZnNldCwgd2UgbmVlZCB0byBmaXJzdCBjcmVhdGUgYSByYW5nZQotICAgICAgICAgICAgLy8g
d2hpY2ggc3BhbnMgZnJvbSB0aGUgc3RhcnQgb2YgcGFyYWdyYXBoIHRvIHRoZSBzdGFydCBwb3Np
dGlvbiBvZiBtX3JhbmdlVG9CZVJlcGxhY2VkQnlDb3JyZWN0aW9uLgotICAgICAgICAgICAgUmVm
UHRyPFJhbmdlPiBjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaEFzUmFuZ2UgPSBSYW5n
ZTo6Y3JlYXRlKHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24tPnN0YXJ0Q29udGFp
bmVyKGVjKS0+ZG9jdW1lbnQoKSwgcGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi0+
c3RhcnRQb3NpdGlvbigpLCBwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLT5zdGFy
dFBvc2l0aW9uKCkpOwotICAgICAgICAgICAgaWYgKCFlYykgewotICAgICAgICAgICAgICAgIFBv
c2l0aW9uIHN0YXJ0UG9zaXRpb25PZlJhbmdlVG9CZVJlcGxhY2VkID0gbV9yYW5nZVRvQmVSZXBs
YWNlZEJ5Q29ycmVjdGlvbi0+c3RhcnRQb3NpdGlvbigpOwotICAgICAgICAgICAgICAgIGNvcnJl
Y3Rpb25TdGFydE9mZnNldEluUGFyYWdyYXBoQXNSYW5nZS0+c2V0RW5kKHN0YXJ0UG9zaXRpb25P
ZlJhbmdlVG9CZVJlcGxhY2VkLmNvbnRhaW5lck5vZGUoKSwgc3RhcnRQb3NpdGlvbk9mUmFuZ2VU
b0JlUmVwbGFjZWQuY29tcHV0ZU9mZnNldEluQ29udGFpbmVyTm9kZSgpLCBlYyk7Ci0gICAgICAg
ICAgICAgICAgaWYgKCFlYykgewotICAgICAgICAgICAgICAgICAgICAvLyBUYWtlIG5vdGUgb2Yg
dGhlIGxvY2F0aW9uIG9mIGF1dG9jb3JyZWN0aW9uIHNvIHRoYXQgd2UgY2FuIGFkZCBtYXJrZXIg
YWZ0ZXIgdGhlIHJlcGxhY2VtZW50IHRvb2sgcGxhY2UuCi0gICAgICAgICAgICAgICAgICAgIGlu
dCBjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VM
ZW5ndGgoY29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGhBc1JhbmdlLmdldCgpKTsKLSAg
ICAgICAgICAgICAgICAgICAgUG9zaXRpb24gY2FyZXRQb3NpdGlvbiA9IG1fZnJhbWUtPnNlbGVj
dGlvbigpLT5zZWxlY3Rpb24oKS5lbmQoKTsKLSAgICAgICAgICAgICAgICAgICAgUmVmUHRyPFJh
bmdlPiByYW5nZVRvQmVSZXBsYWNlZCA9IG1fcmFuZ2VUb0JlUmVwbGFjZWRCeUNvcnJlY3Rpb24t
PmNsb25lUmFuZ2UoZWMpOwotICAgICAgICAgICAgICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIHNl
bGVjdGlvblRvUmVwbGFjZShyYW5nZVRvQmVSZXBsYWNlZC5nZXQoKSwgRE9XTlNUUkVBTSk7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2hvdWxkQ2hhbmdl
U2VsZWN0aW9uKHNlbGVjdGlvblRvUmVwbGFjZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uVG9SZXBsYWNlKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dChtX2NvcnJl
Y3Rpb25SZXBsYWNlbWVudFN0cmluZywgZmFsc2UsIGZhbHNlKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGNhcmV0UG9zaXRpb24ubW92ZVRvT2Zmc2V0KGNhcmV0UG9zaXRpb24ub2Zmc2V0SW5D
b250YWluZXJOb2RlKCkgKyBtX2NvcnJlY3Rpb25SZXBsYWNlbWVudFN0cmluZy5sZW5ndGgoKSAt
IG1fc3RyaW5nVG9CZVJlcGxhY2VkQnlDb3JyZWN0aW9uLmxlbmd0aCgpKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIFJlZlB0cjxSYW5nZT4gcmVwbGFjZW1lbnRSYW5nZSA9IFRleHRJdGVyYXRv
cjo6c3VicmFuZ2UocGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi5nZXQoKSwgY29y
cmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGgsIG1fY29ycmVjdGlvblJlcGxhY2VtZW50U3Ry
aW5nLmxlbmd0aCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50UmFuZ2Ut
PnN0YXJ0Q29udGFpbmVyKCktPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+YWRkTWFya2VyKHJlcGxh
Y2VtZW50UmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCwgbV9jb3JyZWN0
aW9uUmVwbGFjZW1lbnRTdHJpbmcpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGFjZW1l
bnRSYW5nZS0+c3RhcnRDb250YWluZXIoKS0+ZG9jdW1lbnQoKS0+bWFya2VycygpLT5hZGRNYXJr
ZXIocmVwbGFjZW1lbnRSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OkNvcnJlY3Rpb25JbmRp
Y2F0b3IpOwotICAgICAgICAgICAgICAgICAgICAgICAgbV9mcmFtZS0+c2VsZWN0aW9uKCktPm1v
dmVUbyhjYXJldFBvc2l0aW9uLCBmYWxzZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkaWRB
cHBseUNvcnJlY3Rpb24gPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIG1fcmFuZ2VUb0JlUmVw
bGFjZWRCeUNvcnJlY3Rpb24uY2xlYXIoKTsKLSAgICB9CisgICAgYXBwbHlDb3JyZWN0aW9uUGFu
ZWxJbmZvKHRydWUpOworICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5tX3JhbmdlVG9CZVJlcGxh
Y2VkLmNsZWFyKCk7CiAjZW5kaWYKIAogICAgIFRleHRDaGVja2luZ09wdGlvbnMgdGV4dENoZWNr
aW5nT3B0aW9ucyA9IDA7CkBAIC0yMjQzLDcgKzIyNDYsNyBAQCB2b2lkIEVkaXRvcjo6bWFya0Fs
bE1pc3NwZWxsaW5nc0FuZEJhZEdyCiAgICAgfQogICAgIGNsaWVudCgpLT5jaGVja1RleHRPZlBh
cmFncmFwaChwYXJhZ3JhcGhTdHJpbmcuY2hhcmFjdGVycygpLCBwYXJhZ3JhcGhMZW5ndGgsIGNo
ZWNraW5nVHlwZXMsIHJlc3VsdHMpOwogCi0jaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChC
VUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkgJiYgIWRl
ZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQorI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJ
T05fUEFORUwKICAgICAvLyBJZiB0aGlzIGNoZWNraW5nIGlzIG9ubHkgZm9yIHNob3dpbmcgY29y
cmVjdGlvbiBwYW5lbCwgd2Ugc2hvdWxkbid0IGJvdGhlciB0byBtYXJrIG1pc3NwZWxsaW5ncy4K
ICAgICBpZiAoc2hvdWxkU2hvd0NvcnJlY3Rpb25QYW5lbCkKICAgICAgICAgc2hvdWxkTWFya1Nw
ZWxsaW5nID0gZmFsc2U7CkBAIC0yMzI4LDcgKzIzMzEsNyBAQCB2b2lkIEVkaXRvcjo6bWFya0Fs
bE1pc3NwZWxsaW5nc0FuZEJhZEdyCiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjYW5FZGl0
KCkgJiYgc2hvdWxkSW5zZXJ0VGV4dChyZXN1bHQtPnJlcGxhY2VtZW50LCByYW5nZVRvUmVwbGFj
ZS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uVHlwZWQpKSB7CiAgICAgICAgICAgICAgICAgICAg
IGlmIChyZXN1bHQtPnR5cGUgPT0gVGV4dENoZWNraW5nVHlwZUNvcnJlY3Rpb24pCiAgICAgICAg
ICAgICAgICAgICAgICAgICByZXBsYWNlZFN0cmluZyA9IHBsYWluVGV4dChyYW5nZVRvUmVwbGFj
ZS5nZXQoKSk7Ci0jaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdF
UikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdf
T05fU05PV19MRU9QQVJEKQorI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwKICAgICAg
ICAgICAgICAgICAgICAgaWYgKHNob3VsZFNob3dDb3JyZWN0aW9uUGFuZWwgJiYgcmVzdWx0TG9j
YXRpb24gKyByZXN1bHRMZW5ndGggPT0gc3BlbGxpbmdSYW5nZUVuZE9mZnNldCAmJiByZXN1bHQt
PnR5cGUgPT0gVGV4dENoZWNraW5nVHlwZUNvcnJlY3Rpb24pIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIFdlIG9ubHkgc2hvdyB0aGUgY29ycmVjdGlvbiBwYW5lbCBvbiB0aGUgbGFzdCB3
b3JkLgogICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPEZsb2F0UXVhZD4gdGV4dFF1YWRz
OwpAQCAtMjMzNywxMCArMjM0MCwxMSBAQCB2b2lkIEVkaXRvcjo6bWFya0FsbE1pc3NwZWxsaW5n
c0FuZEJhZEdyCiAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlY3QgdG90YWxCb3VuZGlu
Z0JveDsKICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoVmVjdG9yPEZsb2F0UXVhZD46OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gdGV4dFF1YWRzLmJlZ2luKCk7IGl0IDwgZW5kOyArK2l0KQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsQm91bmRpbmdCb3gudW5pdGUoaXQtPmJvdW5k
aW5nQm94KCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgbV9yYW5nZVRvQmVSZXBsYWNlZEJ5
Q29ycmVjdGlvbiA9IHJhbmdlVG9SZXBsYWNlOwotICAgICAgICAgICAgICAgICAgICAgICAgbV9z
dHJpbmdUb0JlUmVwbGFjZWRCeUNvcnJlY3Rpb24gPSByZXBsYWNlZFN0cmluZzsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIG1fY29ycmVjdGlvblJlcGxhY2VtZW50U3RyaW5nID0gcmVzdWx0LT5y
ZXBsYWNlbWVudDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNsaWVudCgpLT5zaG93Q29ycmVj
dGlvblBhbmVsKHRvdGFsQm91bmRpbmdCb3gsIG1fc3RyaW5nVG9CZVJlcGxhY2VkQnlDb3JyZWN0
aW9uLCByZXN1bHQtPnJlcGxhY2VtZW50LCB0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IG1fY29ycmVjdGlvblBhbmVsSW5mby5tX3JhbmdlVG9CZVJlcGxhY2VkID0gcmFuZ2VUb1JlcGxh
Y2U7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ubV9yZXBs
YWNlZFN0cmluZyA9IHJlcGxhY2VkU3RyaW5nOworICAgICAgICAgICAgICAgICAgICAgICAgbV9j
b3JyZWN0aW9uUGFuZWxJbmZvLm1fcmVwbGFjZW1lbnRTdHJpbmcgPSByZXN1bHQtPnJlcGxhY2Vt
ZW50OworICAgICAgICAgICAgICAgICAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLm1faXNB
Y3RpdmUgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgY2xpZW50KCktPnNob3dDb3Jy
ZWN0aW9uUGFuZWwobV9jb3JyZWN0aW9uUGFuZWxJbmZvLm1fcGFuZWxUeXBlLCB0b3RhbEJvdW5k
aW5nQm94LCBtX2NvcnJlY3Rpb25QYW5lbEluZm8ubV9yZXBsYWNlZFN0cmluZywgcmVzdWx0LT5y
ZXBsYWNlbWVudCwgdGhpcyk7CiAgICAgICAgICAgICAgICAgICAgICAgICBkb1JlcGxhY2VtZW50
ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgIH0KICNlbmRpZgpAQCAtMjM1NCw3ICsyMzU4
LDcgQEAgdm9pZCBFZGl0b3I6Om1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIEFkZCBhIG1hcmtlciBzbyB0aGF0IGNvcnJlY3Rpb25zIGNh
biBlYXNpbHkgYmUgdW5kb25lIGFuZCB3b24ndCBiZSByZS1jb3JyZWN0ZWQuCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgUmVmUHRyPFJhbmdlPiByZXBsYWNlZFJhbmdlID0gVGV4dEl0ZXJh
dG9yOjpzdWJyYW5nZShwYXJhZ3JhcGhSYW5nZS5nZXQoKSwgcmVzdWx0TG9jYXRpb24sIHJlcGxh
Y2VtZW50TGVuZ3RoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBsYWNlZFJhbmdl
LT5zdGFydENvbnRhaW5lcigpLT5kb2N1bWVudCgpLT5tYXJrZXJzKCktPmFkZE1hcmtlcihyZXBs
YWNlZFJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQsIHJlcGxhY2VkU3Ry
aW5nKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBsYWNlZFJhbmdlLT5zdGFydENv
bnRhaW5lcigpLT5kb2N1bWVudCgpLT5tYXJrZXJzKCktPmFkZE1hcmtlcihyZXBsYWNlZFJhbmdl
LmdldCgpLCBEb2N1bWVudE1hcmtlcjo6Q29ycmVjdGlvbkluZGljYXRvcik7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmVwbGFjZWRSYW5nZS0+c3RhcnRDb250YWluZXIoKS0+ZG9jdW1l
bnQoKS0+bWFya2VycygpLT5hZGRNYXJrZXIocmVwbGFjZWRSYW5nZS5nZXQoKSwgRG9jdW1lbnRN
YXJrZXI6OkNvcnJlY3Rpb25JbmRpY2F0b3IsIHJlcGxhY2VkU3RyaW5nKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0K
QEAgLTI0MTcsNjAgKzI0MjEsOTcgQEAgdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NBbmRC
YWRHcmFtbQogCiB2b2lkIEVkaXRvcjo6Y29ycmVjdGlvblBhbmVsVGltZXJGaXJlZChUaW1lcjxF
ZGl0b3I+KikKIHsKLSNpZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJ
R0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQotICAgIFZpc2libGVTZWxlY3Rp
b24gc2VsZWN0aW9uKGZyYW1lKCktPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKSk7Ci0gICAgVmlz
aWJsZVBvc2l0aW9uIHN0YXJ0KHNlbGVjdGlvbi5zdGFydCgpLCBzZWxlY3Rpb24uYWZmaW5pdHko
KSk7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHAgPSBzdGFydE9mV29yZChzdGFydCwgTGVmdFdvcmRJ
Zk9uQm91bmRhcnkpOwotICAgIFZpc2libGVTZWxlY3Rpb24gYWRqYWNlbnRXb3JkcyA9IFZpc2li
bGVTZWxlY3Rpb24ocCwgc3RhcnQpOwotICAgIG1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFt
bWFySW5SYW5nZXMoTWFya1NwZWxsaW5nIHwgU2hvd0NvcnJlY3Rpb25QYW5lbCwgYWRqYWNlbnRX
b3Jkcy50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCAwKTsKKyNpZiBTVVBQT1JUX0FVVE9DT1JS
RUNUSU9OX1BBTkVMCisgICAgaWYgKG1fY29ycmVjdGlvblBhbmVsSW5mby5tX3BhbmVsVHlwZSA9
PSBDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVDb3JyZWN0aW9uKSB7CisgICAgICAgIFZp
c2libGVTZWxlY3Rpb24gc2VsZWN0aW9uKGZyYW1lKCktPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24o
KSk7CisgICAgICAgIFZpc2libGVQb3NpdGlvbiBzdGFydChzZWxlY3Rpb24uc3RhcnQoKSwgc2Vs
ZWN0aW9uLmFmZmluaXR5KCkpOworICAgICAgICBWaXNpYmxlUG9zaXRpb24gcCA9IHN0YXJ0T2ZX
b3JkKHN0YXJ0LCBMZWZ0V29yZElmT25Cb3VuZGFyeSk7CisgICAgICAgIFZpc2libGVTZWxlY3Rp
b24gYWRqYWNlbnRXb3JkcyA9IFZpc2libGVTZWxlY3Rpb24ocCwgc3RhcnQpOworICAgICAgICBt
YXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKE1hcmtTcGVsbGluZyB8IFNo
b3dDb3JyZWN0aW9uUGFuZWwsIGFkamFjZW50V29yZHMudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQo
KSwgMCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgU3RyaW5nIGN1cnJlbnRXb3JkID0gcGxhaW5U
ZXh0KG1fY29ycmVjdGlvblBhbmVsSW5mby5tX3JhbmdlVG9CZVJlcGxhY2VkLmdldCgpKTsKKyAg
ICAgICAgVmVjdG9yPEZsb2F0UXVhZD4gdGV4dFF1YWRzOworICAgICAgICBtX2NvcnJlY3Rpb25Q
YW5lbEluZm8ubV9yYW5nZVRvQmVSZXBsYWNlZC0+Z2V0Qm9yZGVyQW5kVGV4dFF1YWRzKHRleHRR
dWFkcyk7CisgICAgICAgIFZlY3RvcjxGbG9hdFF1YWQ+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSB0
ZXh0UXVhZHMuZW5kKCk7CisgICAgICAgIEZsb2F0UmVjdCB0b3RhbEJvdW5kaW5nQm94OworICAg
ICAgICBmb3IgKFZlY3RvcjxGbG9hdFF1YWQ+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHRleHRRdWFk
cy5iZWdpbigpOyBpdCA8IGVuZDsgKytpdCkKKyAgICAgICAgICAgIHRvdGFsQm91bmRpbmdCb3gu
dW5pdGUoaXQtPmJvdW5kaW5nQm94KCkpOworICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8u
bV9pc0FjdGl2ZSA9IHRydWU7CisgICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5tX3JlcGxh
Y2VkU3RyaW5nID0gY3VycmVudFdvcmQ7CisgICAgICAgIGNsaWVudCgpLT5zaG93Q29ycmVjdGlv
blBhbmVsKG1fY29ycmVjdGlvblBhbmVsSW5mby5tX3BhbmVsVHlwZSwgdG90YWxCb3VuZGluZ0Jv
eCwgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLm1fcmVwbGFjZWRTdHJpbmcsIG1fY29ycmVjdGlvblBh
bmVsSW5mby5tX3JlcGxhY2VtZW50U3RyaW5nLCB0aGlzKTsKKyAgICB9CiAjZW5kaWYKIH0KIAog
dm9pZCBFZGl0b3I6OmhhbmRsZVJlamVjdGVkQ29ycmVjdGlvbigpCiB7Ci0gICAgUmFuZ2UqIHJl
cGxhY2VkUmFuZ2UgPSBtX3JhbmdlVG9CZVJlcGxhY2VkQnlDb3JyZWN0aW9uLmdldCgpOworICAg
IFJhbmdlKiByZXBsYWNlZFJhbmdlID0gbV9jb3JyZWN0aW9uUGFuZWxJbmZvLm1fcmFuZ2VUb0Jl
UmVwbGFjZWQuZ2V0KCk7CiAgICAgaWYgKCFyZXBsYWNlZFJhbmdlIHx8IG1fZnJhbWUtPmRvY3Vt
ZW50KCkgIT0gcmVwbGFjZWRSYW5nZS0+b3duZXJEb2N1bWVudCgpKQogICAgICAgICByZXR1cm47
CiAKLSAgICByZXBsYWNlZFJhbmdlLT5zdGFydENvbnRhaW5lcigpLT5kb2N1bWVudCgpLT5tYXJr
ZXJzKCktPmFkZE1hcmtlcihyZXBsYWNlZFJhbmdlLCBEb2N1bWVudE1hcmtlcjo6UmVqZWN0ZWRD
b3JyZWN0aW9uLCBtX3N0cmluZ1RvQmVSZXBsYWNlZEJ5Q29ycmVjdGlvbik7Ci0gICAgbV9yYW5n
ZVRvQmVSZXBsYWNlZEJ5Q29ycmVjdGlvbi5jbGVhcigpOworICAgIGlmIChtX2NvcnJlY3Rpb25Q
YW5lbEluZm8ubV9wYW5lbFR5cGUgPT0gQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlQ29y
cmVjdGlvbikKKyAgICAgICAgcmVwbGFjZWRSYW5nZS0+c3RhcnRDb250YWluZXIoKS0+ZG9jdW1l
bnQoKS0+bWFya2VycygpLT5hZGRNYXJrZXIocmVwbGFjZWRSYW5nZSwgRG9jdW1lbnRNYXJrZXI6
OlJlamVjdGVkQ29ycmVjdGlvbiwgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLm1fcmVwbGFjZWRTdHJp
bmcpOworICAgIGVsc2UgeworICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ubV9pc0FjdGl2
ZSA9IGZhbHNlOworICAgICAgICBhcHBseUNvcnJlY3Rpb25QYW5lbEluZm8oZmFsc2UpOworICAg
IH0KKyAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ubV9yYW5nZVRvQmVSZXBsYWNlZC5jbGVhcigp
OwogfQogCi12b2lkIEVkaXRvcjo6c3RhcnRDb3JyZWN0aW9uUGFuZWxUaW1lcigpCit2b2lkIEVk
aXRvcjo6c3RhcnRDb3JyZWN0aW9uUGFuZWxUaW1lcihDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5l
bFR5cGUgdHlwZSkKIHsKLSNpZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVkKEJVSUxESU5HX09O
X1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKSAmJiAhZGVmaW5lZChCVUlM
RElOR19PTl9TTk9XX0xFT1BBUkQpCi0gICAgc3RhdGljIGNvbnN0IGRvdWJsZSBjb3JyZWN0aW9u
UGFuZWxUaW1lckludGVydmFsID0gMC4zOworI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFO
RUwKKyAgICBjb25zdCBkb3VibGUgY29ycmVjdGlvblBhbmVsVGltZXJJbnRlcnZhbCA9IDAuMzsK
ICAgICBpZiAoaXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkKCkpIHsKLSAgICAg
ICAgbV9yYW5nZVRvQmVSZXBsYWNlZEJ5Q29ycmVjdGlvbi5jbGVhcigpOworICAgICAgICBpZiAo
dHlwZSA9PSBDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVDb3JyZWN0aW9uKQorICAgICAg
ICAgICAgLy8gSWYgdHlwZSBpcyBQYW5lbFR5cGVSZXZlcnNpb24sIHRoZW4gdGhlIG5ldyByYW5n
ZSBoYXMgYmVlbiBzZXQuIFNvIHdlIHNob3VsZG4ndCBjbGVhciBpdC4KKyAgICAgICAgICAgIG1f
Y29ycmVjdGlvblBhbmVsSW5mby5tX3JhbmdlVG9CZVJlcGxhY2VkLmNsZWFyKCk7CisgICAgICAg
IG1fY29ycmVjdGlvblBhbmVsSW5mby5tX3BhbmVsVHlwZSA9IHR5cGU7CiAgICAgICAgIG1fY29y
cmVjdGlvblBhbmVsVGltZXIuc3RhcnRPbmVTaG90KGNvcnJlY3Rpb25QYW5lbFRpbWVySW50ZXJ2
YWwpOwogICAgIH0KKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHR5cGUpOwogI2VuZGlmCiB9CiAK
IHZvaWQgRWRpdG9yOjpzdG9wQ29ycmVjdGlvblBhbmVsVGltZXIoKQogewotI2lmIFBMQVRGT1JN
KE1BQykgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5H
X09OX0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKKyNpZiBT
VVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMCiAgICAgbV9jb3JyZWN0aW9uUGFuZWxUaW1lci5z
dG9wKCk7CiAjZW5kaWYKIH0KIAogdm9pZCBFZGl0b3I6OmhhbmRsZUNhbmNlbE9wZXJhdGlvbigp
CiB7Ci0jaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYg
IWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05P
V19MRU9QQVJEKQotICAgIGlmIChjbGllbnQoKSkKLSAgICAgICAgY2xpZW50KCktPmRpc21pc3ND
b3JyZWN0aW9uUGFuZWwoZmFsc2UpOworI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwK
KyAgICBpZiAobV9jb3JyZWN0aW9uUGFuZWxJbmZvLm1faXNBY3RpdmUpIHsKKyAgICAgICAgbV9j
b3JyZWN0aW9uUGFuZWxJbmZvLm1faXNBY3RpdmUgPSBmYWxzZTsKKyAgICAgICAgaWYgKGNsaWVu
dCgpKQorICAgICAgICAgICAgcmV0dXJuIGNsaWVudCgpLT5kaXNtaXNzQ29ycmVjdGlvblBhbmVs
KENvcnJlY3Rpb25XYXNSZWplY3RlZCk7CisgICAgfQogI2VuZGlmCiB9CiAKIGJvb2wgRWRpdG9y
Ojppc1Nob3dpbmdDb3JyZWN0aW9uUGFuZWwoKQogewotI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRl
ZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQp
ICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKKyNpZiBTVVBQT1JUX0FVVE9D
T1JSRUNUSU9OX1BBTkVMCiAgICAgaWYgKGNsaWVudCgpKQogICAgICAgICByZXR1cm4gY2xpZW50
KCktPmlzU2hvd2luZ0NvcnJlY3Rpb25QYW5lbCgpOwogI2VuZGlmCiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCit2b2lkIEVkaXRvcjo6ZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChDb3JyZWN0aW9uV2Fz
UmVqZWN0ZWRPck5vdCBjb3JyZWN0aW9uV2FzUmVqZWN0ZWRPck5vdCkKK3sKKyNpZiBTVVBQT1JU
X0FVVE9DT1JSRUNUSU9OX1BBTkVMCisgICAgaWYgKG1fY29ycmVjdGlvblBhbmVsSW5mby5tX2lz
QWN0aXZlKSB7CisgICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5tX2lzQWN0aXZlID0gZmFs
c2U7CisgICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5tX3JhbmdlVG9CZVJlcGxhY2VkLmNs
ZWFyKCk7CisgICAgICAgIGlmIChjbGllbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBjbGllbnQo
KS0+ZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChjb3JyZWN0aW9uV2FzUmVqZWN0ZWRPck5vdCk7Cisg
ICAgfQorI2VuZGlmCit9CiB2b2lkIEVkaXRvcjo6cmVtb3ZlU3BlbGxBbmRDb3JyZWN0aW9uTWFy
a2Vyc0Zyb21Xb3Jkc1RvQmVFZGl0ZWQoYm9vbCBkb05vdFJlbW92ZUlmU2VsZWN0aW9uQXRXb3Jk
Qm91bmRhcnkpCiB7CiAgICAgLy8gV2Ugd2FudCB0byByZW1vdmUgdGhlIG1hcmtlcnMgZnJvbSBh
IHdvcmQgaWYgYW4gZWRpdGluZyBjb21tYW5kIHdpbGwgY2hhbmdlIHRoZSB3b3JkLiBUaGlzIGNh
biBoYXBwZW4gaW4gb25lIG9mCkBAIC0yNTY4LDYgKzI2MDksNTQgQEAgdm9pZCBFZGl0b3I6OnJl
bW92ZVNwZWxsQW5kQ29ycmVjdGlvbk1hcgogICAgICAgICBkb2N1bWVudC0+bWFya2VycygpLT5y
ZW1vdmVNYXJrZXJzKHBhaXJJdGVyYXRvci0+Zmlyc3QuZ2V0KCksIHBhaXJJdGVyYXRvci0+c2Vj
b25kKTsKIH0KIAordm9pZCBFZGl0b3I6OmFwcGx5Q29ycmVjdGlvblBhbmVsSW5mbyhib29sIGFk
ZENvcnJlY3Rpb25JbmRpY2F0b3JNYXJrZXIpCit7CisgICAgaWYgKCFtX2NvcnJlY3Rpb25QYW5l
bEluZm8ubV9yYW5nZVRvQmVSZXBsYWNlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgRXhjZXB0
aW9uQ29kZSBlYyA9IDA7CisgICAgUmVmUHRyPFJhbmdlPiBwYXJhZ3JhcGhSYW5nZUNvbnRhaW5p
bmdDb3JyZWN0aW9uID0gbV9jb3JyZWN0aW9uUGFuZWxJbmZvLm1fcmFuZ2VUb0JlUmVwbGFjZWQt
PmNsb25lUmFuZ2UoZWMpOworICAgIGlmIChlYykKKyAgICAgICAgcmV0dXJuOworCisgICAgc2V0
U3RhcnQocGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi5nZXQoKSwgc3RhcnRPZlBh
cmFncmFwaChtX2NvcnJlY3Rpb25QYW5lbEluZm8ubV9yYW5nZVRvQmVSZXBsYWNlZC0+c3RhcnRQ
b3NpdGlvbigpKSk7CisgICAgc2V0RW5kKHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rp
b24uZ2V0KCksIGVuZE9mUGFyYWdyYXBoKG1fY29ycmVjdGlvblBhbmVsSW5mby5tX3JhbmdlVG9C
ZVJlcGxhY2VkLT5lbmRQb3NpdGlvbigpKSk7CisKKyAgICAvLyBBZnRlciB3ZSByZXBsYWNlIHRo
ZSB3b3JkIGF0IHJhbmdlIG1fcmFuZ2VUb0JlUmVwbGFjZWQsIHdlIG5lZWQgdG8gYWRkIG1hcmtl
cnMgdG8gdGhhdCByYW5nZS4KKyAgICAvLyBIb3dldmVyLCBvbmNlIHRoZSByZXBsYWNlbWVudCB0
b29rIHBsYWNlLCB0aGUgdmFsdWUgb2YgbV9yYW5nZVRvQmVSZXBsYWNlZCBpcyBub3QgdmFsaWQg
YW55bW9yZS4KKyAgICAvLyBTbyBiZWZvcmUgd2UgY2Fycnkgb3V0IHRoZSByZXBsYWNlbWVudCwg
d2UgbmVlZCB0byBzdG9yZSB0aGUgc3RhcnQgcG9zaXRpb24gb2YgbV9yYW5nZVRvQmVSZXBsYWNl
ZAorICAgIC8vIHJlbGF0aXZlIHRvIHRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgY29udGFpbmlu
ZyBwYXJhZ3JhcGguIFdlIHVzZSBjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaAorICAg
IC8vIHRvIHN0b3JlIHRoaXMgdmFsdWUuIEluIG9yZGVyIHRvIG9idGFpbiB0aGlzIG9mZnNldCwg
d2UgbmVlZCB0byBmaXJzdCBjcmVhdGUgYSByYW5nZQorICAgIC8vIHdoaWNoIHNwYW5zIGZyb20g
dGhlIHN0YXJ0IG9mIHBhcmFncmFwaCB0byB0aGUgc3RhcnQgcG9zaXRpb24gb2YgbV9yYW5nZVRv
QmVSZXBsYWNlZC4KKyAgICBSZWZQdHI8UmFuZ2U+IGNvcnJlY3Rpb25TdGFydE9mZnNldEluUGFy
YWdyYXBoQXNSYW5nZSA9IFJhbmdlOjpjcmVhdGUocGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29y
cmVjdGlvbi0+c3RhcnRDb250YWluZXIoZWMpLT5kb2N1bWVudCgpLCBwYXJhZ3JhcGhSYW5nZUNv
bnRhaW5pbmdDb3JyZWN0aW9uLT5zdGFydFBvc2l0aW9uKCksIHBhcmFncmFwaFJhbmdlQ29udGFp
bmluZ0NvcnJlY3Rpb24tPnN0YXJ0UG9zaXRpb24oKSk7CisgICAgaWYgKGVjKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBQb3NpdGlvbiBzdGFydFBvc2l0aW9uT2ZSYW5nZVRvQmVSZXBsYWNlZCA9
IG1fY29ycmVjdGlvblBhbmVsSW5mby5tX3JhbmdlVG9CZVJlcGxhY2VkLT5zdGFydFBvc2l0aW9u
KCk7CisgICAgY29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGhBc1JhbmdlLT5zZXRFbmQo
c3RhcnRQb3NpdGlvbk9mUmFuZ2VUb0JlUmVwbGFjZWQuY29udGFpbmVyTm9kZSgpLCBzdGFydFBv
c2l0aW9uT2ZSYW5nZVRvQmVSZXBsYWNlZC5jb21wdXRlT2Zmc2V0SW5Db250YWluZXJOb2RlKCks
IGVjKTsKKyAgICBpZiAoZWMpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFRha2Ugbm90ZSBv
ZiB0aGUgbG9jYXRpb24gb2YgYXV0b2NvcnJlY3Rpb24gc28gdGhhdCB3ZSBjYW4gYWRkIG1hcmtl
ciBhZnRlciB0aGUgcmVwbGFjZW1lbnQgdG9vayBwbGFjZS4KKyAgICBpbnQgY29ycmVjdGlvblN0
YXJ0T2Zmc2V0SW5QYXJhZ3JhcGggPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKGNvcnJlY3Rp
b25TdGFydE9mZnNldEluUGFyYWdyYXBoQXNSYW5nZS5nZXQoKSk7CisgICAgUG9zaXRpb24gY2Fy
ZXRQb3NpdGlvbiA9IG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKS5lbmQoKTsKKwor
ICAgIC8vIENsb25lIHRoZSByYW5nZSwgc2luY2UgdGhlIGNhbGxlciBvZiB0aGlzIG1ldGhvZCBt
YXkgd2FudCB0byBrZWVwIHRoZSBvcmlnaW5hbCByYW5nZSBhcm91bmQuCisgICAgUmVmUHRyPFJh
bmdlPiByYW5nZVRvQmVSZXBsYWNlZCA9IG1fY29ycmVjdGlvblBhbmVsSW5mby5tX3JhbmdlVG9C
ZVJlcGxhY2VkLT5jbG9uZVJhbmdlKGVjKTsKKyAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlv
blRvUmVwbGFjZShyYW5nZVRvQmVSZXBsYWNlZC5nZXQoKSwgRE9XTlNUUkVBTSk7CisgICAgaWYg
KG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zaG91bGRDaGFuZ2VTZWxlY3Rpb24oc2VsZWN0aW9uVG9S
ZXBsYWNlKSkgeworICAgICAgICBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2V0U2VsZWN0aW9uKHNl
bGVjdGlvblRvUmVwbGFjZSk7CisgICAgICAgIHJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dChtX2Nv
cnJlY3Rpb25QYW5lbEluZm8ubV9yZXBsYWNlbWVudFN0cmluZywgZmFsc2UsIGZhbHNlKTsKKyAg
ICAgICAgY2FyZXRQb3NpdGlvbi5tb3ZlVG9PZmZzZXQoY2FyZXRQb3NpdGlvbi5vZmZzZXRJbkNv
bnRhaW5lck5vZGUoKSArIG1fY29ycmVjdGlvblBhbmVsSW5mby5tX3JlcGxhY2VtZW50U3RyaW5n
Lmxlbmd0aCgpIC0gbV9jb3JyZWN0aW9uUGFuZWxJbmZvLm1fcmVwbGFjZWRTdHJpbmcubGVuZ3Ro
KCkpOworICAgICAgICBzZXRFbmQocGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi5n
ZXQoKSwgZW5kT2ZQYXJhZ3JhcGgoY2FyZXRQb3NpdGlvbikpOworICAgICAgICBSZWZQdHI8UmFu
Z2U+IHJlcGxhY2VtZW50UmFuZ2UgPSBUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKHBhcmFncmFwaFJh
bmdlQ29udGFpbmluZ0NvcnJlY3Rpb24uZ2V0KCksIGNvcnJlY3Rpb25TdGFydE9mZnNldEluUGFy
YWdyYXBoLCBtX2NvcnJlY3Rpb25QYW5lbEluZm8ubV9yZXBsYWNlbWVudFN0cmluZy5sZW5ndGgo
KSk7CisgICAgICAgIHJlcGxhY2VtZW50UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCktPmRvY3VtZW50
KCktPm1hcmtlcnMoKS0+YWRkTWFya2VyKHJlcGxhY2VtZW50UmFuZ2UuZ2V0KCksIERvY3VtZW50
TWFya2VyOjpSZXBsYWNlbWVudCwgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLm1fcmVwbGFjZW1lbnRT
dHJpbmcpOworICAgICAgICBpZiAoYWRkQ29ycmVjdGlvbkluZGljYXRvck1hcmtlcikKKyAgICAg
ICAgICAgIHJlcGxhY2VtZW50UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCktPmRvY3VtZW50KCktPm1h
cmtlcnMoKS0+YWRkTWFya2VyKHJlcGxhY2VtZW50UmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2Vy
OjpDb3JyZWN0aW9uSW5kaWNhdG9yLCBtX2NvcnJlY3Rpb25QYW5lbEluZm8ubV9yZXBsYWNlZFN0
cmluZyk7CisgICAgICAgIG1fZnJhbWUtPnNlbGVjdGlvbigpLT5tb3ZlVG8oY2FyZXRQb3NpdGlv
biwgZmFsc2UpOworICAgIH0KK30KKwogUGFzc1JlZlB0cjxSYW5nZT4gRWRpdG9yOjpyYW5nZUZv
clBvaW50KGNvbnN0IEludFBvaW50JiB3aW5kb3dQb2ludCkKIHsKICAgICBEb2N1bWVudCogZG9j
dW1lbnQgPSBtX2ZyYW1lLT5kb2N1bWVudEF0UG9pbnQod2luZG93UG9pbnQpOwpAQCAtMjgzNCw3
ICsyOTIzLDcgQEAgdm9pZCBFZGl0b3I6OmNoYW5nZVNlbGVjdGlvbkFmdGVyQ29tbWFuZAogICAg
IGlmIChuZXdTZWxlY3Rpb24uc3RhcnQoKS5pc09ycGhhbigpIHx8IG5ld1NlbGVjdGlvbi5lbmQo
KS5pc09ycGhhbigpKQogICAgICAgICByZXR1cm47CiAKLSNpZiBQTEFURk9STShNQUMpICYmICFk
ZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJE
KSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCisjaWYgU1VQUE9SVF9BVVRP
Q09SUkVDVElPTl9QQU5FTAogICAgIC8vIENoZWNrIHRvIHNlZSBpZiB0aGUgY29tbWFuZCBpbnRy
b2R1Y2VkIHBhcmFncmFwaCBzZXBhcmF0b3IuIElmIGl0IGRpZCwgd2UgcmVtb3ZlIGV4aXN0aW5n
IGF1dG9jb3JyZWN0aW9uIHVuZGVybGluZXMuCiAgICAgLy8gVGhpcyBpcyBpbiBjb25zaXN0ZW5j
eSB3aXRoIHRoZSBiZWhhdmlvciBpbiBBcHBLaXQKICAgICBpZiAoIWluU2FtZVBhcmFncmFwaCht
X2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCksIG5ld1NlbGVj
dGlvbi52aXNpYmxlRW5kKCkpKQpJbmRleDogV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAkocmV2aXNpb24gNzEzMDApCisrKyBX
ZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDIzICsyOCwxMyBA
QAogCiAjaW5jbHVkZSAiQ2xpcGJvYXJkQWNjZXNzUG9saWN5LmgiCiAjaW5jbHVkZSAiQ29sb3Iu
aCIKKyNpbmNsdWRlICJDb3JyZWN0aW9uUGFuZWxJbmZvLmgiCiAjaW5jbHVkZSAiRWRpdEFjdGlv
bi5oIgogI2luY2x1ZGUgIkVkaXRpbmdCZWhhdmlvci5oIgogI2luY2x1ZGUgIkVkaXRvckRlbGV0
ZUFjdGlvbi5oIgogI2luY2x1ZGUgIkVkaXRvckluc2VydEFjdGlvbi5oIgogI2luY2x1ZGUgIlNl
bGVjdGlvbkNvbnRyb2xsZXIuaCIKIAotI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoQlVJ
TERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpICYmICFkZWZp
bmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKLS8vIFNvbWUgcGxhdGZvcm1zIHByb3ZpZGUg
VUkgZm9yIHN1Z2dlc3RpbmcgYXV0b2NvcnJlY3Rpb24uCi0jZGVmaW5lIFNVUFBPUlRfQVVUT0NP
UlJFQ1RJT05fUEFORUwgMQotLy8gU29tZSBwbGF0Zm9ybXMgdXNlIHNwZWxsaW5nIGFuZCBhdXRv
Y29ycmVjdGlvbiBtYXJrZXJzIHRvIHByb3ZpZGUgdmlzdWFsIGN1ZS4KLS8vIE9uIHN1Y2ggcGxh
dGZvcm0sIGlmIHdvcmQgd2l0aCBtYXJrZXIgaXMgZWRpdGVkLCB3ZSBuZWVkIHRvIHJlbW92ZSB0
aGUgbWFya2VyLgotI2RlZmluZSBSRU1PVkVfTUFSS0VSU19VUE9OX0VESVRJTkcgMQotI2Vsc2UK
LSNkZWZpbmUgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTCAwCi0jZGVmaW5lIFJFTU9WRV9N
QVJLRVJTX1VQT05fRURJVElORyAwCi0jZW5kaWYgLyogI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRl
ZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQp
ICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkgKi8KLQogI2lmIFBMQVRGT1JN
KE1BQykgJiYgIWRlZmluZWQoX19PQkpDX18pCiBjbGFzcyBOU0RpY3Rpb25hcnk7CiB0eXBlZGVm
IGludCBOU1dyaXRpbmdEaXJlY3Rpb247CkBAIC0zMjMsNyArMzEzLDcgQEAgcHVibGljOgogICAg
IHZvaWQgYWRkVG9LaWxsUmluZyhSYW5nZSosIGJvb2wgcHJlcGVuZCk7CiAKICAgICB2b2lkIGhh
bmRsZUNhbmNlbE9wZXJhdGlvbigpOwotICAgIHZvaWQgc3RhcnRDb3JyZWN0aW9uUGFuZWxUaW1l
cigpOworICAgIHZvaWQgc3RhcnRDb3JyZWN0aW9uUGFuZWxUaW1lcihDb3JyZWN0aW9uUGFuZWxJ
bmZvOjpQYW5lbFR5cGUpOwogICAgIHZvaWQgaGFuZGxlUmVqZWN0ZWRDb3JyZWN0aW9uKCk7CiAg
ICAgYm9vbCBpc1Nob3dpbmdDb3JyZWN0aW9uUGFuZWwoKTsKIApAQCAtMzg5LDkgKzM3OSw3IEBA
IHByaXZhdGU6CiAgICAgYm9vbCBtX3Nob3VsZFN0YXJ0TmV3S2lsbFJpbmdTZXF1ZW5jZTsKICAg
ICBib29sIG1fc2hvdWxkU3R5bGVXaXRoQ1NTOwogICAgIE93blB0cjxLaWxsUmluZz4gbV9raWxs
UmluZzsKLSAgICBSZWZQdHI8UmFuZ2U+IG1fcmFuZ2VUb0JlUmVwbGFjZWRCeUNvcnJlY3Rpb247
Ci0gICAgU3RyaW5nIG1fc3RyaW5nVG9CZVJlcGxhY2VkQnlDb3JyZWN0aW9uOwotICAgIFN0cmlu
ZyBtX2NvcnJlY3Rpb25SZXBsYWNlbWVudFN0cmluZzsKKyAgICBDb3JyZWN0aW9uUGFuZWxJbmZv
IG1fY29ycmVjdGlvblBhbmVsSW5mbzsKICAgICBUaW1lcjxFZGl0b3I+IG1fY29ycmVjdGlvblBh
bmVsVGltZXI7CiAgICAgVmlzaWJsZVNlbGVjdGlvbiBtX21hcms7CiAgICAgYm9vbCBtX2FyZU1h
cmtlZFRleHRNYXRjaGVzSGlnaGxpZ2h0ZWQ7CkBAIC00MTgsNiArNDA2LDggQEAgcHJpdmF0ZToK
ICAgICB2b2lkIGNvcnJlY3Rpb25QYW5lbFRpbWVyRmlyZWQoVGltZXI8RWRpdG9yPiopOwogICAg
IE5vZGUqIGZpbmRFdmVudFRhcmdldEZyb21TZWxlY3Rpb24oKSBjb25zdDsKICAgICB2b2lkIHN0
b3BDb3JyZWN0aW9uUGFuZWxUaW1lcigpOworICAgIHZvaWQgZGlzbWlzc0NvcnJlY3Rpb25QYW5l
bChDb3JyZWN0aW9uV2FzUmVqZWN0ZWRPck5vdCk7CisgICAgdm9pZCBhcHBseUNvcnJlY3Rpb25Q
YW5lbEluZm8oYm9vbCBhZGRDb3JyZWN0aW9uSW5kaWNhdG9yTWFya2VyKTsKIH07CiAKIGlubGlu
ZSB2b2lkIEVkaXRvcjo6c2V0U3RhcnROZXdLaWxsUmluZ1NlcXVlbmNlKGJvb2wgZmxhZykKSW5k
ZXg6IFdlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAJKHJldmlzaW9uIDcxMzAwKQorKysgV2ViQ29y
ZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDc0LDcgKzEw
NzQsNyBAQCBzdGF0aWMgYm9vbCBleGVjdXRlWWFua0FuZFNlbGVjdChGcmFtZSogCiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLSNpZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVkKEJVSUxESU5HX09O
X1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKSAmJiAhZGVmaW5lZChCVUlM
RElOR19PTl9TTk9XX0xFT1BBUkQpCisjaWYgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTAog
c3RhdGljIGJvb2wgZXhlY3V0ZUNhbmNlbE9wZXJhdGlvbihGcmFtZSogZnJhbWUsIEV2ZW50Kiwg
RWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3QgU3RyaW5nJikKIHsKICAgICBmcmFtZS0+ZWRpdG9y
KCktPmhhbmRsZUNhbmNlbE9wZXJhdGlvbigpOwpAQCAtMTEyNCw3ICsxMTI0LDcgQEAgc3RhdGlj
IGJvb2wgc3VwcG9ydGVkUGFzdGUoRnJhbWUqIGZyYW1lLAogICAgIHJldHVybiBmYWxzZTsKIH0K
IAotI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFk
ZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1df
TEVPUEFSRCkKKyNpZiBTVVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMCiBzdGF0aWMgYm9vbCBz
dXBwb3J0ZWREaXNtaXNzQ29ycmVjdGlvblBhbmVsKEZyYW1lKiBmcmFtZSwgRWRpdG9yQ29tbWFu
ZFNvdXJjZSBzb3VyY2UpCiB7CiAgICAgcmV0dXJuIHN1cHBvcnRlZEZyb21NZW51T3JLZXlCaW5k
aW5nKGZyYW1lLCBzb3VyY2UpICYmIGZyYW1lLT5lZGl0b3IoKS0+aXNTaG93aW5nQ29ycmVjdGlv
blBhbmVsKCk7CkBAIC0xNTA2LDcgKzE1MDYsNyBAQCBzdGF0aWMgY29uc3QgQ29tbWFuZE1hcCYg
Y3JlYXRlQ29tbWFuZE1hCiAgICAgICAgIHsgIlVuc2VsZWN0IiwgeyBleGVjdXRlVW5zZWxlY3Qs
IHN1cHBvcnRlZCwgZW5hYmxlZFZpc2libGVTZWxlY3Rpb24sIHN0YXRlTm9uZSwgdmFsdWVOdWxs
LCBub3RUZXh0SW5zZXJ0aW9uLCBkb05vdEFsbG93RXhlY3V0aW9uV2hlbkRpc2FibGVkIH0gfSwK
ICAgICAgICAgeyAiWWFuayIsIHsgZXhlY3V0ZVlhbmssIHN1cHBvcnRlZEZyb21NZW51T3JLZXlC
aW5kaW5nLCBlbmFibGVkSW5FZGl0YWJsZVRleHQsIHN0YXRlTm9uZSwgdmFsdWVOdWxsLCBub3RU
ZXh0SW5zZXJ0aW9uLCBkb05vdEFsbG93RXhlY3V0aW9uV2hlbkRpc2FibGVkIH0gfSwKICAgICAg
ICAgeyAiWWFua0FuZFNlbGVjdCIsIHsgZXhlY3V0ZVlhbmtBbmRTZWxlY3QsIHN1cHBvcnRlZEZy
b21NZW51T3JLZXlCaW5kaW5nLCBlbmFibGVkSW5FZGl0YWJsZVRleHQsIHN0YXRlTm9uZSwgdmFs
dWVOdWxsLCBub3RUZXh0SW5zZXJ0aW9uLCBkb05vdEFsbG93RXhlY3V0aW9uV2hlbkRpc2FibGVk
IH0gfSwKLSNpZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAm
JiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9T
Tk9XX0xFT1BBUkQpCisjaWYgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTAogICAgICAgICB7
ICJDYW5jZWxPcGVyYXRpb24iLCB7IGV4ZWN1dGVDYW5jZWxPcGVyYXRpb24sIHN1cHBvcnRlZERp
c21pc3NDb3JyZWN0aW9uUGFuZWwsIGVuYWJsZWRJbkVkaXRhYmxlVGV4dCwgc3RhdGVOb25lLCB2
YWx1ZU51bGwsIG5vdFRleHRJbnNlcnRpb24sIGRvTm90QWxsb3dFeGVjdXRpb25XaGVuRGlzYWJs
ZWQgfSB9LAogI2VuZGlmCiAgICAgfTsKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21t
YW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAJ
KHJldmlzaW9uIDcxMzAwKQorKysgV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMTEsOSArMzExLDkgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjptYXJr
TWlzc3BlbGxpbmdzQWZ0ZQogICAgICAgICBWaXNpYmxlUG9zaXRpb24gcDIgPSBzdGFydE9mV29y
ZChzdGFydCwgTGVmdFdvcmRJZk9uQm91bmRhcnkpOwogICAgICAgICBpZiAocDEgIT0gcDIpCiAg
ICAgICAgICAgICBkb2N1bWVudCgpLT5mcmFtZSgpLT5lZGl0b3IoKS0+bWFya01pc3NwZWxsaW5n
c0FmdGVyVHlwaW5nVG9Qb3NpdGlvbihwMSk7Ci0jaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5l
ZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkgJiYg
IWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQorI2lmIFNVUFBPUlRfQVVUT0NPUlJF
Q1RJT05fUEFORUwKICAgICAgICAgZWxzZSBpZiAoY29tbWFuZFR5cGUgPT0gVHlwaW5nQ29tbWFu
ZDo6SW5zZXJ0VGV4dCkKLSAgICAgICAgICAgIGRvY3VtZW50KCktPmZyYW1lKCktPmVkaXRvcigp
LT5zdGFydENvcnJlY3Rpb25QYW5lbFRpbWVyKCk7CisgICAgICAgICAgICBkb2N1bWVudCgpLT5m
cmFtZSgpLT5lZGl0b3IoKS0+c3RhcnRDb3JyZWN0aW9uUGFuZWxUaW1lcihDb3JyZWN0aW9uUGFu
ZWxJbmZvOjpQYW5lbFR5cGVDb3JyZWN0aW9uKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGNv
bW1hbmRUeXBlKTsKICNlbmRpZgpJbmRleDogV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgJKHJldmlzaW9uIDcx
MzAwKQorKysgV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ3NSw5ICs0NzUsOSBAQCBwdWJsaWM6CiAjaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChC
VUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkKICAgICB2
aXJ0dWFsIHZvaWQgY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoY29uc3QgVUNoYXIqLCBpbnQsIHVpbnQ2
NF90LCBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiYpIHsgfTsKICNlbmRpZgotI2lmIFBMQVRG
T1JNKE1BQykgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxE
SU5HX09OX0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKLSAg
ICB2aXJ0dWFsIHZvaWQgc2hvd0NvcnJlY3Rpb25QYW5lbChjb25zdCBGbG9hdFJlY3QmLCBjb25z
dCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBFZGl0b3IqKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQg
ZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChib29sKSB7IH0KKyNpZiBTVVBQT1JUX0FVVE9DT1JSRUNU
SU9OX1BBTkVMCisgICAgdmlydHVhbCB2b2lkIHNob3dDb3JyZWN0aW9uUGFuZWwoQ29ycmVjdGlv
blBhbmVsSW5mbzo6UGFuZWxUeXBlLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBTdHJpbmcmLCBj
b25zdCBTdHJpbmcmLCBFZGl0b3IqKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlzbWlzc0NvcnJl
Y3Rpb25QYW5lbChDb3JyZWN0aW9uV2FzUmVqZWN0ZWRPck5vdCkgeyB9CiAgICAgdmlydHVhbCBi
b29sIGlzU2hvd2luZ0NvcnJlY3Rpb25QYW5lbCgpIHsgcmV0dXJuIGZhbHNlOyB9CiAjZW5kaWYK
ICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKGNvbnN0
IFN0cmluZyYsIGNvbnN0IEdyYW1tYXJEZXRhaWwmKSB7IH0KSW5kZXg6IFdlYkNvcmUvbWFudWFs
LXRlc3RzL2F1dG9jb3JyZWN0aW9uL2NvbnRpbnVlLXR5cGluZy10by1kaXNtaXNzLXJldmVyc2lv
bi5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbWFudWFsLXRlc3RzL2F1dG9jb3JyZWN0aW9u
L2NvbnRpbnVlLXR5cGluZy10by1kaXNtaXNzLXJldmVyc2lvbi5odG1sCShyZXZpc2lvbiAwKQor
KysgV2ViQ29yZS9tYW51YWwtdGVzdHMvYXV0b2NvcnJlY3Rpb24vY29udGludWUtdHlwaW5nLXRv
LWRpc21pc3MtcmV2ZXJzaW9uLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDkgQEAKKzxo
dG1sPgorPGhlYWQ+CisKKzxzdHlsZT4KKy5lZGl0aW5nIHsKKyAgICBib3JkZXI6IDJweCBzb2xp
ZCByZWQ7CisgICAgcGFkZGluZzogMTJweDsKKyAgICBmb250LXNpemU6IDI0cHg7Cit9Cis8L3N0
eWxlPgorPHNjcmlwdCBzcmM9Li4vLi4vLi4vTGF5b3V0VGVzdHMvZWRpdGluZy9lZGl0aW5nLmpz
IGxhbmd1YWdlPSJKYXZhU2NyaXB0IiB0eXBlPSJ0ZXh0L0phdmFTY3JpcHQiID48L3NjcmlwdD4K
KworPHNjcmlwdD4KK2Z1bmN0aW9uIGVkaXRpbmdUZXN0KCkgeworICAgIHR5cGVDaGFyYWN0ZXJD
b21tYW5kKCd0Jyk7CisgICAgdHlwZUNoYXJhY3RlckNvbW1hbmQoJ2gnKTsKKyAgICB0eXBlQ2hh
cmFjdGVyQ29tbWFuZCgnZScpOworICAgIHR5cGVDaGFyYWN0ZXJDb21tYW5kKCcgJyk7CisgICAg
dHlwZUNoYXJhY3RlckNvbW1hbmQoJ20nKTsKKyAgICB0eXBlQ2hhcmFjdGVyQ29tbWFuZCgnZScp
OworICAgIHR5cGVDaGFyYWN0ZXJDb21tYW5kKCdzJyk7CisgICAgdHlwZUNoYXJhY3RlckNvbW1h
bmQoJ2EnKTsKKyAgICB0eXBlQ2hhcmFjdGVyQ29tbWFuZCgnZycpOworICAgIHR5cGVDaGFyYWN0
ZXJDb21tYW5kKCdlJyk7CisgICAgdHlwZUNoYXJhY3RlckNvbW1hbmQoJyAnKTsKKyAgICBleGVj
TW92ZVNlbGVjdGlvbkJhY2t3YXJkQnlDaGFyYWN0ZXJDb21tYW5kKCk7Cit9CisKKzwvc2NyaXB0
PgorCis8dGl0bGU+Q29udGludWUgVHlwaW5nIHRvIERpc21pc3MgUmV2ZXJzaW9uIFBhbmVsIFRl
c3Q8L3RpdGxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2PjxwPlRoaXMgdGVzdCB2ZXJpZmllcyB0
aGF0LCBhZnRlciByZXZlcnNpb24gcGFuZWwgaXMgc2hvd24sIGNvbnRpbnVlIHR5cGluZyB3aWxs
IGRpc21pc3MgdGhlIHJldmVyc2lvbiBwYW5lbC48L3A+Cis8cD5BZnRlciBzZWVpbmcgdGhlIHJl
dmVyc2lvbiBwYW5lbCwgc3RhcnQgdHlwaW5nIChleGNsdWRpbmcgd2hpdGVzcGFjZSkuIFlvdSBz
aG91bGQgc2VlIHRoZSBwYW5lbCBiZWluZworZGlzbWlzc2VkIG9uY2UgeW91IHN0YXJ0IHR5cGlu
Zy48L3A+Cis8cCAgc3R5bGU9ImNvbG9yOmdyZWVuIj5Ob3RlLCB0aGlzIHRlc3QgY2FuIGZhaWwg
ZHVlIHRvIHVzZXIgc3BlY2lmaWMgc3BlbGwgY2hlY2tpbmcgZGF0YS4gSWYgdGhlIHVzZXIgaGFz
IHByZXZpb3VzbHkgCitmcmVxdWVudGx5IHJldmVydCAnbWVzc2FnZScgdG8gJ21lc2FnZScuIFRv
IGZpeCB0aGlzLCByZW1vdmUgYWxsIGZpbGVzIGluIH4vTGlicmFyeS9TcGVsbGluZywgdGhlbiBr
aWxsIEFwcGxlU3BlbGwuc2VydmljZSBwcm9jZXNzLjwvcD4KKzxkaXYgY29udGVudGVkaXRhYmxl
IGlkPSJyb290IiBjbGFzcz0iZWRpdGluZyI+Cis8c3BhbiBpZD0idGVzdCI+PC9zcGFuPgorPC9k
aXY+CisKKworPHNjcmlwdD4KK3J1bkVkaXRpbmdUZXN0KCk7Cis8L3NjcmlwdD4KKworPC9ib2R5
PgorPC9odG1sPgpJbmRleDogV2ViQ29yZS9tYW51YWwtdGVzdHMvYXV0b2NvcnJlY3Rpb24vZGVs
ZXRlLXRvLWRpc21pc3MtcmV2ZXJzaW9uLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9tYW51
YWwtdGVzdHMvYXV0b2NvcnJlY3Rpb24vZGVsZXRlLXRvLWRpc21pc3MtcmV2ZXJzaW9uLmh0bWwJ
KHJldmlzaW9uIDApCisrKyBXZWJDb3JlL21hbnVhbC10ZXN0cy9hdXRvY29ycmVjdGlvbi9kZWxl
dGUtdG8tZGlzbWlzcy1yZXZlcnNpb24uaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0OSBA
QAorPGh0bWw+Cis8aGVhZD4KKworPHN0eWxlPgorLmVkaXRpbmcgeworICAgIGJvcmRlcjogMnB4
IHNvbGlkIHJlZDsKKyAgICBwYWRkaW5nOiAxMnB4OworICAgIGZvbnQtc2l6ZTogMjRweDsKK30K
Kzwvc3R5bGU+Cis8c2NyaXB0IHNyYz0uLi8uLi8uLi9MYXlvdXRUZXN0cy9lZGl0aW5nL2VkaXRp
bmcuanMgbGFuZ3VhZ2U9IkphdmFTY3JpcHQiIHR5cGU9InRleHQvSmF2YVNjcmlwdCIgPjwvc2Ny
aXB0PgorCis8c2NyaXB0PgorZnVuY3Rpb24gZWRpdGluZ1Rlc3QoKSB7CisgICAgdHlwZUNoYXJh
Y3RlckNvbW1hbmQoJ3QnKTsKKyAgICB0eXBlQ2hhcmFjdGVyQ29tbWFuZCgnaCcpOworICAgIHR5
cGVDaGFyYWN0ZXJDb21tYW5kKCdlJyk7CisgICAgdHlwZUNoYXJhY3RlckNvbW1hbmQoJyAnKTsK
KyAgICB0eXBlQ2hhcmFjdGVyQ29tbWFuZCgnbScpOworICAgIHR5cGVDaGFyYWN0ZXJDb21tYW5k
KCdlJyk7CisgICAgdHlwZUNoYXJhY3RlckNvbW1hbmQoJ3MnKTsKKyAgICB0eXBlQ2hhcmFjdGVy
Q29tbWFuZCgnYScpOworICAgIHR5cGVDaGFyYWN0ZXJDb21tYW5kKCdnJyk7CisgICAgdHlwZUNo
YXJhY3RlckNvbW1hbmQoJ2UnKTsKKyAgICB0eXBlQ2hhcmFjdGVyQ29tbWFuZCgnICcpOworICAg
IGV4ZWNNb3ZlU2VsZWN0aW9uQmFja3dhcmRCeUNoYXJhY3RlckNvbW1hbmQoKTsKK30KKworPC9z
Y3JpcHQ+CisKKzx0aXRsZT5EZWxldGUgdG8gRGlzbWlzcyBSZXZlcnNpb24gUGFuZWwgVGVzdDwv
dGl0bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXY+PHA+VGhpcyB0ZXN0IHZlcmlmaWVzIHRoYXQs
IGFmdGVyIHJldmVyc2lvbiBwYW5lbCBpcyBzaG93biwgY29udGludWUgZGVsZXRpbmcgdGhlIHdv
cmQgd2lsbCBkaXNtaXNzIHRoZSByZXZlcnNpb24gcGFuZWwuPC9wPgorPHA+QWZ0ZXIgc2VlaW5n
IHRoZSByZXZlcnNpb24gcGFuZWwsIHN0YXJ0IGRlbGV0aW5nIHRoZSBjb3JyZWN0ZWQgd29yZCBj
aGFyYWN0ZXIgYnkgY2hhcmFjdGVyLiBZb3Ugc2hvdWxkIHNlZSB0aGUgcGFuZWwgYmVpbmcKK2Rp
c21pc3NlZCBvbmNlIHlvdSBzdGFydCBkZWxldGluZy48L3A+Cis8cCAgc3R5bGU9ImNvbG9yOmdy
ZWVuIj5Ob3RlLCB0aGlzIHRlc3QgY2FuIGZhaWwgZHVlIHRvIHVzZXIgc3BlY2lmaWMgc3BlbGwg
Y2hlY2tpbmcgZGF0YS4gSWYgdGhlIHVzZXIgaGFzIHByZXZpb3VzbHkgCitmcmVxdWVudGx5IHJl
dmVydCAnbWVzc2FnZScgdG8gJ21lc2FnZScuIFRvIGZpeCB0aGlzLCByZW1vdmUgYWxsIGZpbGVz
IGluIH4vTGlicmFyeS9TcGVsbGluZywgdGhlbiBraWxsIEFwcGxlU3BlbGwuc2VydmljZSBwcm9j
ZXNzLjwvcD4KKzxkaXYgY29udGVudGVkaXRhYmxlIGlkPSJyb290IiBjbGFzcz0iZWRpdGluZyI+
Cis8c3BhbiBpZD0idGVzdCI+PC9zcGFuPgorPC9kaXY+CisKKworPHNjcmlwdD4KK3J1bkVkaXRp
bmdUZXN0KCk7Cis8L3NjcmlwdD4KKworPC9ib2R5PgorPC9odG1sPgpJbmRleDogV2ViQ29yZS9t
YW51YWwtdGVzdHMvYXV0b2NvcnJlY3Rpb24vZGVsZXRlLXRvLWVuZC1vZi13b3JkLXRvLXNob3ct
cmV2ZXJzaW9uLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9tYW51YWwtdGVzdHMvYXV0b2Nv
cnJlY3Rpb24vZGVsZXRlLXRvLWVuZC1vZi13b3JkLXRvLXNob3ctcmV2ZXJzaW9uLmh0bWwJKHJl
dmlzaW9uIDApCisrKyBXZWJDb3JlL21hbnVhbC10ZXN0cy9hdXRvY29ycmVjdGlvbi9kZWxldGUt
dG8tZW5kLW9mLXdvcmQtdG8tc2hvdy1yZXZlcnNpb24uaHRtbAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw0OSBAQAorPGh0bWw+Cis8aGVhZD4KKworPHN0eWxlPgorLmVkaXRpbmcgeworICAgIGJv
cmRlcjogMnB4IHNvbGlkIHJlZDsKKyAgICBwYWRkaW5nOiAxMnB4OworICAgIGZvbnQtc2l6ZTog
MjRweDsKK30KKzwvc3R5bGU+Cis8c2NyaXB0IHNyYz0uLi8uLi8uLi9MYXlvdXRUZXN0cy9lZGl0
aW5nL2VkaXRpbmcuanMgbGFuZ3VhZ2U9IkphdmFTY3JpcHQiIHR5cGU9InRleHQvSmF2YVNjcmlw
dCIgPjwvc2NyaXB0PgorCis8c2NyaXB0PgorZnVuY3Rpb24gZWRpdGluZ1Rlc3QoKSB7CisgICAg
dHlwZUNoYXJhY3RlckNvbW1hbmQoJ3QnKTsKKyAgICB0eXBlQ2hhcmFjdGVyQ29tbWFuZCgnaCcp
OworICAgIHR5cGVDaGFyYWN0ZXJDb21tYW5kKCdlJyk7CisgICAgdHlwZUNoYXJhY3RlckNvbW1h
bmQoJyAnKTsKKyAgICB0eXBlQ2hhcmFjdGVyQ29tbWFuZCgnbScpOworICAgIHR5cGVDaGFyYWN0
ZXJDb21tYW5kKCdlJyk7CisgICAgdHlwZUNoYXJhY3RlckNvbW1hbmQoJ3MnKTsKKyAgICB0eXBl
Q2hhcmFjdGVyQ29tbWFuZCgnYScpOworICAgIHR5cGVDaGFyYWN0ZXJDb21tYW5kKCdnJyk7Cisg
ICAgdHlwZUNoYXJhY3RlckNvbW1hbmQoJ2UnKTsKKyAgICB0eXBlQ2hhcmFjdGVyQ29tbWFuZCgn
ICcpOworICAgIGV4ZWNEZWxldGVDb21tYW5kKCk7Cit9CisKKzwvc2NyaXB0PgorCis8dGl0bGU+
RGVsZXRlIHRvIEVuZCBvZiBXb3JkIHRvIFNob3cgUmV2ZXJzaW9uIFBhbmVsIFRlc3Q8L3RpdGxl
PgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2PjxwPlRoaXMgdGVzdCB2ZXJpZmllcyB0aGF0IHJldmVy
c2lvbiBwYW5lbCBpcyBzaG93biB3aGVuIHVzZXIgbW92ZXMgY2FycmV0IHRvIHByZXZpb3VzbHkg
Y29ycmVjdGVkIHdvcmQgdXNpbmcgZGVsZXRlIGtleS48L3A+Cis8cD5BZnRlciBzZWVpbmcgdGhl
IHJldmVyc2lvbiBwYW5lbCwgcHJlc3MgRVNDIGtleSwgdGhlbiBzcGFjZSBrZXkuIFlvdSBzaG91
bGQgc2VlIHRoZSBwaHJhc2UgInRoZSBtZXNhZ2UiIAord2hlcmUgIm1lc2FnZSIgaGFzIHJlZCBt
aXNwZWxsIHVuZGVybGluZS4gPC9wPgorPHAgIHN0eWxlPSJjb2xvcjpncmVlbiI+Tm90ZSwgdGhp
cyB0ZXN0IGNhbiBmYWlsIGR1ZSB0byB1c2VyIHNwZWNpZmljIHNwZWxsIGNoZWNraW5nIGRhdGEu
IElmIHRoZSB1c2VyIGhhcyBwcmV2aW91c2x5IAorZnJlcXVlbnRseSByZXZlcnQgJ21lc3NhZ2Un
IHRvICdtZXNhZ2UnLiBUbyBmaXggdGhpcywgcmVtb3ZlIGFsbCBmaWxlcyBpbiB+L0xpYnJhcnkv
U3BlbGxpbmcsIHRoZW4ga2lsbCBBcHBsZVNwZWxsLnNlcnZpY2UgcHJvY2Vzcy48L3A+Cis8ZGl2
IGNvbnRlbnRlZGl0YWJsZSBpZD0icm9vdCIgY2xhc3M9ImVkaXRpbmciPgorPHNwYW4gaWQ9InRl
c3QiPjwvc3Bhbj4KKzwvZGl2PgorCisKKzxzY3JpcHQ+CitydW5FZGl0aW5nVGVzdCgpOworPC9z
Y3JpcHQ+CisKKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IFdlYkNvcmUvbWFudWFsLXRlc3RzL2F1
dG9jb3JyZWN0aW9uL21vdmUtdG8tZW5kLW9mLXdvcmQtdG8tc2hvdy1yZXZlcnNpb24uaHRtbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL21hbnVhbC10ZXN0cy9hdXRvY29ycmVjdGlvbi9tb3ZlLXRv
LWVuZC1vZi13b3JkLXRvLXNob3ctcmV2ZXJzaW9uLmh0bWwJKHJldmlzaW9uIDApCisrKyBXZWJD
b3JlL21hbnVhbC10ZXN0cy9hdXRvY29ycmVjdGlvbi9tb3ZlLXRvLWVuZC1vZi13b3JkLXRvLXNo
b3ctcmV2ZXJzaW9uLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDkgQEAKKzxodG1sPgor
PGhlYWQ+CisKKzxzdHlsZT4KKy5lZGl0aW5nIHsKKyAgICBib3JkZXI6IDJweCBzb2xpZCByZWQ7
CisgICAgcGFkZGluZzogMTJweDsKKyAgICBmb250LXNpemU6IDI0cHg7Cit9Cis8L3N0eWxlPgor
PHNjcmlwdCBzcmM9Li4vLi4vLi4vTGF5b3V0VGVzdHMvZWRpdGluZy9lZGl0aW5nLmpzIGxhbmd1
YWdlPSJKYXZhU2NyaXB0IiB0eXBlPSJ0ZXh0L0phdmFTY3JpcHQiID48L3NjcmlwdD4KKworPHNj
cmlwdD4KK2Z1bmN0aW9uIGVkaXRpbmdUZXN0KCkgeworICAgIHR5cGVDaGFyYWN0ZXJDb21tYW5k
KCd0Jyk7CisgICAgdHlwZUNoYXJhY3RlckNvbW1hbmQoJ2gnKTsKKyAgICB0eXBlQ2hhcmFjdGVy
Q29tbWFuZCgnZScpOworICAgIHR5cGVDaGFyYWN0ZXJDb21tYW5kKCcgJyk7CisgICAgdHlwZUNo
YXJhY3RlckNvbW1hbmQoJ20nKTsKKyAgICB0eXBlQ2hhcmFjdGVyQ29tbWFuZCgnZScpOworICAg
IHR5cGVDaGFyYWN0ZXJDb21tYW5kKCdzJyk7CisgICAgdHlwZUNoYXJhY3RlckNvbW1hbmQoJ2En
KTsKKyAgICB0eXBlQ2hhcmFjdGVyQ29tbWFuZCgnZycpOworICAgIHR5cGVDaGFyYWN0ZXJDb21t
YW5kKCdlJyk7CisgICAgdHlwZUNoYXJhY3RlckNvbW1hbmQoJyAnKTsKKyAgICBleGVjTW92ZVNl
bGVjdGlvbkJhY2t3YXJkQnlDaGFyYWN0ZXJDb21tYW5kKCk7Cit9CisKKzwvc2NyaXB0PgorCis8
dGl0bGU+TW92ZSB0byBFbmQgb2YgV29yZCB0byBTaG93IFJldmVyc2lvbiBQYW5lbCBUZXN0PC90
aXRsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdj48cD5UaGlzIHRlc3QgdmVyaWZpZXMgdGhhdCBy
ZXZlcnNpb24gcGFuZWwgaXMgc2hvd24gd2hlbiB1c2VyIG1vdmVzIGNhcnJldCB0byBwcmV2aW91
c2x5IGNvcnJlY3RlZCB3b3JkPC9wPgorPHA+QWZ0ZXIgc2VlaW5nIHRoZSByZXZlcnNpb24gcGFu
ZWwsIHByZXNzIEVTQyBrZXksIHRoZW4gc3BhY2Uga2V5LiBZb3Ugc2hvdWxkIHNlZSB0aGUgcGhy
YXNlICJ0aGUgbWVzYWdlIiAKK3doZXJlICJtZXNhZ2UiIGhhcyByZWQgbWlzcGVsbCB1bmRlcmxp
bmUuIDwvcD4KKzxwICBzdHlsZT0iY29sb3I6Z3JlZW4iPk5vdGUsIHRoaXMgdGVzdCBjYW4gZmFp
bCBkdWUgdG8gdXNlciBzcGVjaWZpYyBzcGVsbCBjaGVja2luZyBkYXRhLiBJZiB0aGUgdXNlciBo
YXMgcHJldmlvdXNseSAKK2ZyZXF1ZW50bHkgcmV2ZXJ0ICdtZXNzYWdlJyB0byAnbWVzYWdlJy4g
VG8gZml4IHRoaXMsIHJlbW92ZSBhbGwgZmlsZXMgaW4gfi9MaWJyYXJ5L1NwZWxsaW5nLCB0aGVu
IGtpbGwgQXBwbGVTcGVsbC5zZXJ2aWNlIHByb2Nlc3MuPC9wPgorPGRpdiBjb250ZW50ZWRpdGFi
bGUgaWQ9InJvb3QiIGNsYXNzPSJlZGl0aW5nIj4KKzxzcGFuIGlkPSJ0ZXN0Ij48L3NwYW4+Cis8
L2Rpdj4KKworCis8c2NyaXB0PgorcnVuRWRpdGluZ1Rlc3QoKTsKKzwvc2NyaXB0PgorCis8L2Jv
ZHk+Cis8L2h0bWw+CkluZGV4OiBXZWJDb3JlL21hbnVhbC10ZXN0cy9hdXRvY29ycmVjdGlvbi90
eXBlLXdoaXRlc3BhY2UtdG8tZGlzbWlzcy1yZXZlcnNpb24uaHRtbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL21hbnVhbC10ZXN0cy9hdXRvY29ycmVjdGlvbi90eXBlLXdoaXRlc3BhY2UtdG8tZGlz
bWlzcy1yZXZlcnNpb24uaHRtbAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvbWFudWFsLXRlc3Rz
L2F1dG9jb3JyZWN0aW9uL3R5cGUtd2hpdGVzcGFjZS10by1kaXNtaXNzLXJldmVyc2lvbi5odG1s
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUwIEBACis8aHRtbD4KKzxoZWFkPgorCis8c3R5bGU+
CisuZWRpdGluZyB7CisgICAgYm9yZGVyOiAycHggc29saWQgcmVkOworICAgIHBhZGRpbmc6IDEy
cHg7CisgICAgZm9udC1zaXplOiAyNHB4OworfQorPC9zdHlsZT4KKzxzY3JpcHQgc3JjPS4uLy4u
Ly4uL0xheW91dFRlc3RzL2VkaXRpbmcvZWRpdGluZy5qcyBsYW5ndWFnZT0iSmF2YVNjcmlwdCIg
dHlwZT0idGV4dC9KYXZhU2NyaXB0IiA+PC9zY3JpcHQ+CisKKzxzY3JpcHQ+CitmdW5jdGlvbiBl
ZGl0aW5nVGVzdCgpIHsKKyAgICB0eXBlQ2hhcmFjdGVyQ29tbWFuZCgndCcpOworICAgIHR5cGVD
aGFyYWN0ZXJDb21tYW5kKCdoJyk7CisgICAgdHlwZUNoYXJhY3RlckNvbW1hbmQoJ2UnKTsKKyAg
ICB0eXBlQ2hhcmFjdGVyQ29tbWFuZCgnICcpOworICAgIHR5cGVDaGFyYWN0ZXJDb21tYW5kKCdt
Jyk7CisgICAgdHlwZUNoYXJhY3RlckNvbW1hbmQoJ2UnKTsKKyAgICB0eXBlQ2hhcmFjdGVyQ29t
bWFuZCgncycpOworICAgIHR5cGVDaGFyYWN0ZXJDb21tYW5kKCdhJyk7CisgICAgdHlwZUNoYXJh
Y3RlckNvbW1hbmQoJ2cnKTsKKyAgICB0eXBlQ2hhcmFjdGVyQ29tbWFuZCgnZScpOworICAgIHR5
cGVDaGFyYWN0ZXJDb21tYW5kKCcgJyk7CisgICAgZXhlY01vdmVTZWxlY3Rpb25CYWNrd2FyZEJ5
Q2hhcmFjdGVyQ29tbWFuZCgpOworfQorCis8L3NjcmlwdD4KKworPHRpdGxlPlR5cGUgV2hpdGVz
cGFjZSB0byBEaXNtaXNzIFJldmVyc2lvbiBQYW5lbCBUZXN0PC90aXRsZT4KKzwvaGVhZD4KKzxi
b2R5PgorPGRpdj48cD5UaGlzIHRlc3QgdmVyaWZpZXMgdGhhdCwgYWZ0ZXIgcmV2ZXJzaW9uIHBh
bmVsIGlzIHNob3duLCB0eXBpbmcgd2hpdGVzcGFjZSB3aWxsIGRpc21pc3MgdGhlIHJldmVyc2lv
biBwYW5lbC4KK0l0IGFsc28ga2VlcCB0aGUgZXhpc3RpbmcgYXV0b2NvcnJlY3Rpb24gdW5kZXJs
aW5lLjwvcD4KKzxwPkFmdGVyIHNlZWluZyB0aGUgcmV2ZXJzaW9uIHBhbmVsLCB0eXBlIHdoaXRl
c3BhY2UuIFlvdSBzaG91bGQgc2VlIHRoZSBwYW5lbCBiZWluZyBkaXNtaXNzZWQgb25jZSB5b3Ug
c3RhcnQgdHlwaW5nLgorSG93ZXZlciwgdGhlIHdvcmQgIm1lc3NhZ2UiIHN0aWxsIGhhcyBibHVl
IHVuZGVybGluZS48L3A+Cis8cCAgc3R5bGU9ImNvbG9yOmdyZWVuIj5Ob3RlLCB0aGlzIHRlc3Qg
Y2FuIGZhaWwgZHVlIHRvIHVzZXIgc3BlY2lmaWMgc3BlbGwgY2hlY2tpbmcgZGF0YS4gSWYgdGhl
IHVzZXIgaGFzIHByZXZpb3VzbHkgCitmcmVxdWVudGx5IHJldmVydCAnbWVzc2FnZScgdG8gJ21l
c2FnZScuIFRvIGZpeCB0aGlzLCByZW1vdmUgYWxsIGZpbGVzIGluIH4vTGlicmFyeS9TcGVsbGlu
ZywgdGhlbiBraWxsIEFwcGxlU3BlbGwuc2VydmljZSBwcm9jZXNzLjwvcD4KKzxkaXYgY29udGVu
dGVkaXRhYmxlIGlkPSJyb290IiBjbGFzcz0iZWRpdGluZyI+Cis8c3BhbiBpZD0idGVzdCI+PC9z
cGFuPgorPC9kaXY+CisKKworPHNjcmlwdD4KK3J1bkVkaXRpbmdUZXN0KCk7Cis8L3NjcmlwdD4K
KworPC9ib2R5PgorPC9odG1sPgpJbmRleDogV2ViQ29yZS9wYWdlL0VkaXRvckNsaWVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9FZGl0b3JDbGllbnQuaAkocmV2aXNpb24gNzEzMDAp
CisrKyBXZWJDb3JlL3BhZ2UvRWRpdG9yQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYg
KzI3LDcgQEAKICNpZm5kZWYgRWRpdG9yQ2xpZW50X2gKICNkZWZpbmUgRWRpdG9yQ2xpZW50X2gK
IAorI2luY2x1ZGUgIkNvcnJlY3Rpb25QYW5lbEluZm8uaCIKICNpbmNsdWRlICJFZGl0b3JJbnNl
cnRBY3Rpb24uaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0
cmluZy5oIgpAQCAtMTg4LDkgKzE4OSw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgY2hl
Y2tUZXh0T2ZQYXJhZ3JhcGgoY29uc3QgVUNoYXIqIHRleHQsIGludCBsZW5ndGgsIHVpbnQ2NF90
IGNoZWNraW5nVHlwZXMsIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+JiByZXN1bHRzKSA9IDA7
CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fVElH
RVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5H
X09OX1NOT1dfTEVPUEFSRCkKLSAgICB2aXJ0dWFsIHZvaWQgc2hvd0NvcnJlY3Rpb25QYW5lbChj
b25zdCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5n
JiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNtZW50U3RyaW5nLCBFZGl0b3Iq
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRpc21pc3NDb3JyZWN0aW9uUGFuZWwoYm9vbCBjb3Jy
ZWN0aW9uQWNjZXB0ZWQpID0gMDsKKyNpZiBTVVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMCisg
ICAgdmlydHVhbCB2b2lkIHNob3dDb3JyZWN0aW9uUGFuZWwoQ29ycmVjdGlvblBhbmVsSW5mbzo6
UGFuZWxUeXBlLCBjb25zdCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywg
Y29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNtZW50U3Ry
aW5nLCBFZGl0b3IqKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRpc21pc3NDb3JyZWN0aW9uUGFu
ZWwoQ29ycmVjdGlvbldhc1JlamVjdGVkT3JOb3QpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgaXNT
aG93aW5nQ29ycmVjdGlvblBhbmVsKCkgPSAwOwogI2VuZGlmCiAKSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dE1hYy5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHRNYWMubW0JKHJldmlz
aW9uIDcxMzAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250
ZXh0TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw2ICsyNCw3IEBACiAgKi8KIAogI2ltcG9y
dCAiY29uZmlnLmgiCisjaW1wb3J0ICJDb3JyZWN0aW9uUGFuZWxJbmZvLmgiCiAjaW1wb3J0ICJH
cmFwaGljc0NvbnRleHQuaCIKIAogI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2
YXRlQ0cuaCIKQEAgLTE0Niw3ICsxNDcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xp
bmVGb3JUZXh0Q2hlCiAgICAgICAgICAgICBwYXR0ZXJuQ29sb3IgPSBncmFtbWFyUGF0dGVybkNv
bG9yLmdldCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSNpZiBQTEFURk9STShN
QUMpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19P
Tl9MRU9QQVJEKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCisjaWYgU1VQ
UE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTAogICAgICAgICBjYXNlIFRleHRDaGVja2luZ1JlcGxh
Y2VtZW50TGluZVN0eWxlOgogICAgICAgICB7CiAgICAgICAgICAgICAvLyBDb25zdGFudHMgZm9y
IHNwZWxsaW5nIHBhdHRlcm4gY29sb3IuCkluZGV4OiBXZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gNzEzMDApCisrKyBXZWJLaXQyL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBACisyMDEwLTExLTAzICBKaWEg
UHUgIDxqcHVAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIHJldmVyc2lvbiBidWJibGUgaW4gV2ViVmlld3MKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ3NjMwCisgICAgICAgIDxyZGFyOi8v
cHJvYmxlbS84NTMwOTYwPgorCisgICAgICAgIFRoaXMgcGF0Y2ggaXMgdG8gYWRkIHJldmVyc2lv
biB0byBjb3JyZWN0aW9uIHBhbmVsLiBQbGVhc2Ugc2VlIFdlYkNvcmUvQ2hhbmdlTG9nIGZvciBk
ZXRhaWwuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNs
aWVudC5oOiBBZG9wdGVkIG5ldyBzaWduYXR1cmUgb2YgYmFzZSBjbGFzcyBtZXRob2QuCisgICAg
ICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViRWRpdG9yQ2xpZW50TWFjLm1t
OiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6V2ViRWRpdG9yQ2xpZW50OjpzaG93Q29ycmVjdGlv
blBhbmVsKToKKyAgICAgICAgKFdlYktpdDo6V2ViRWRpdG9yQ2xpZW50OjpkaXNtaXNzQ29ycmVj
dGlvblBhbmVsKToKKwogMjAxMC0xMS0wMyAgQWxpY2UgTGl1ICA8YWxpY2UubGl1QGFwcGxlLmNv
bT4KIAogICAgICAgICBGaXggY2xhbmcrKyBidWlsZCAKSW5kZXg6IFdlYktpdDIvV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQy
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmgJKHJldmlzaW9uIDcx
MzAwKQorKysgV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVu
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsOCArMTM0LDggQEAgcHJpdmF0ZToKICAgICB2aXJ0
dWFsIHZvaWQgd2lsbFNldElucHV0TWV0aG9kU3RhdGUoKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0
SW5wdXRNZXRob2RTdGF0ZShib29sIGVuYWJsZWQpOwogI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRl
ZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQp
ICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKLSAgICB2aXJ0dWFsIHZvaWQg
c2hvd0NvcnJlY3Rpb25QYW5lbChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGJvdW5kaW5nQm94
T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3Ry
aW5nJiByZXBsYWNlbWVudFN0cmluZywgV2ViQ29yZTo6RWRpdG9yKik7Ci0gICAgdmlydHVhbCB2
b2lkIGRpc21pc3NDb3JyZWN0aW9uUGFuZWwoYm9vbCBjb3JyZWN0aW9uQWNjZXB0ZWQpOworICAg
IHZpcnR1YWwgdm9pZCBzaG93Q29ycmVjdGlvblBhbmVsKFdlYkNvcmU6OkNvcnJlY3Rpb25QYW5l
bEluZm86OlBhbmVsVHlwZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBib3VuZGluZ0JveE9m
UmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmlu
ZyYgcmVwbGFjZW1lbnRTdHJpbmcsIFdlYkNvcmU6OkVkaXRvciopOworICAgIHZpcnR1YWwgdm9p
ZCBkaXNtaXNzQ29ycmVjdGlvblBhbmVsKFdlYkNvcmU6OkNvcnJlY3Rpb25XYXNSZWplY3RlZE9y
Tm90KTsKICAgICB2aXJ0dWFsIGJvb2wgaXNTaG93aW5nQ29ycmVjdGlvblBhbmVsKCk7CiAjZW5k
aWYKICAgICBXZWJQYWdlKiBtX3BhZ2U7CkluZGV4OiBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvbWFjL1dlYkVkaXRvckNsaWVudE1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQy
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dlYkVkaXRvckNsaWVudE1hYy5tbQkocmV2
aXNpb24gNzEzMDApCisrKyBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dl
YkVkaXRvckNsaWVudE1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjIzLDEyICsyMjMsMTIgQEAg
dm9pZCBXZWJFZGl0b3JDbGllbnQ6OmNoZWNrVGV4dE9mUGFyYWdyYQogI2VuZGlmCiAKICNpZiAh
ZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFS
RCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQotdm9pZCBXZWJFZGl0b3JD
bGllbnQ6OnNob3dDb3JyZWN0aW9uUGFuZWwoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBib3Vu
ZGluZ0JveE9mUmVwbGFjZWRTdHJpbmcsIGNvbnN0IFdURjo6U3RyaW5nJiByZXBsYWNlZFN0cmlu
ZywgY29uc3QgV1RGOjpTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nLCBXZWJDb3JlOjpFZGl0b3Iq
KQordm9pZCBXZWJFZGl0b3JDbGllbnQ6OnNob3dDb3JyZWN0aW9uUGFuZWwoV2ViQ29yZTo6Q29y
cmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlIHR5cGUsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVj
dCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBXVEY6OlN0cmluZyYgcmVwbGFj
ZWRTdHJpbmcsIGNvbnN0IFdURjo6U3RyaW5nJiByZXBsYWNlbWVudFN0cmluZywgV2ViQ29yZTo6
RWRpdG9yKikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIFdlYkVkaXRvckNs
aWVudDo6ZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChib29sIGNvcnJlY3Rpb25BY2NlcHRlZCkKK3Zv
aWQgV2ViRWRpdG9yQ2xpZW50OjpkaXNtaXNzQ29ycmVjdGlvblBhbmVsKFdlYkNvcmU6OkNvcnJl
Y3Rpb25XYXNSZWplY3RlZE9yTm90KQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CkluZGV4
OiBXZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL0NoYW5nZUxv
ZwkocmV2aXNpb24gNzEzMDApCisrKyBXZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDIzIEBACisyMDEwLTExLTAzICBKaWEgUHUgIDxqcHVAYXBwbGUuY29tPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIHJldmVyc2lv
biBidWJibGUgaW4gV2ViVmlld3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTQ3NjMwCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS84NTMwOTYwPgorCisg
ICAgICAgIFRoaXMgcGF0Y2ggaXMgdG8gYWRkIHJldmVyc2lvbiB0byBjb3JyZWN0aW9uIHBhbmVs
LiBQbGVhc2Ugc2VlIFdlYkNvcmUvQ2hhbmdlTG9nIGZvciBkZXRhaWwuCisKKyAgICAgICAgKiBX
ZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaDogQWRvcHRlZCBuZXcgc2lnbmF0dXJlIG9m
IGJhc2UgY2xhc3MgbWV0aG9kLgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNs
aWVudC5tbTogQWRvcHRlZCBuZXcgc2lnbmF0dXJlIG9mIGJhc2UgY2xhc3MgbWV0aG9kLiBBbmQg
Y29kZQorICAgICAgICAgIGNoYW5nZSB0byB1c2UgbmV3IHJldmVyc2lvbiBBUEkgaW4gQXBwS2l0
LgorICAgICAgICAoV2ViRWRpdG9yQ2xpZW50OjpXZWJFZGl0b3JDbGllbnQpOgorICAgICAgICAo
V2ViRWRpdG9yQ2xpZW50Ojp+V2ViRWRpdG9yQ2xpZW50KToKKyAgICAgICAgKFdlYkVkaXRvckNs
aWVudDo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbik6CisgICAgICAgIChXZWJFZGl0b3JDbGll
bnQ6OnNob3dDb3JyZWN0aW9uUGFuZWwpOgorICAgICAgICAoV2ViRWRpdG9yQ2xpZW50OjpkaXNt
aXNzQ29ycmVjdGlvblBhbmVsKToKKyAgICAgICAgKFdlYkVkaXRvckNsaWVudDo6aXNTaG93aW5n
Q29ycmVjdGlvblBhbmVsKToKKwogMjAxMC0xMS0wMiAgRGFuaWVsIEJhdGVzICA8ZGJhdGVzQHJp
bS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KSW5kZXg6IFdlYktpdC9t
YWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0
L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaAkocmV2aXNpb24gNzEzMDApCisr
KyBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMzMsOCArMTMzLDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCB3aWxsU2V0
SW5wdXRNZXRob2RTdGF0ZSgpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRJbnB1dE1ldGhvZFN0YXRl
KGJvb2wgZW5hYmxlZCk7CiAjaWYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZp
bmVkKEJVSUxESU5HX09OX0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVP
UEFSRCkKLSAgICB2aXJ0dWFsIHZvaWQgc2hvd0NvcnJlY3Rpb25QYW5lbChjb25zdCBXZWJDb3Jl
OjpGbG9hdFJlY3QmIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgV1RGOjpTdHJp
bmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBXVEY6OlN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcs
IFdlYkNvcmU6OkVkaXRvciopOwotICAgIHZpcnR1YWwgdm9pZCBkaXNtaXNzQ29ycmVjdGlvblBh
bmVsKGJvb2wgY29ycmVjdGlvbkFjY2VwdGVkKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2hvd0NvcnJl
Y3Rpb25QYW5lbChXZWJDb3JlOjpDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGUsIGNvbnN0
IFdlYkNvcmU6OkZsb2F0UmVjdCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBX
VEY6OlN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFdURjo6U3RyaW5nJiByZXBsYWNlbWVu
dFN0cmluZywgV2ViQ29yZTo6RWRpdG9yKik7CisgICAgdmlydHVhbCB2b2lkIGRpc21pc3NDb3Jy
ZWN0aW9uUGFuZWwoV2ViQ29yZTo6Q29ycmVjdGlvbldhc1JlamVjdGVkT3JOb3QpOwogICAgIHZp
cnR1YWwgYm9vbCBpc1Nob3dpbmdDb3JyZWN0aW9uUGFuZWwoKTsKICNlbmRpZgogcHJpdmF0ZToK
QEAgLTE0Niw2ICsxNDYsNiBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9oYXZlVW5kb1JlZG9PcGVy
YXRpb25zOwogCiAjaWYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJV
SUxESU5HX09OX0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkK
LSAgICBOU0ludGVnZXIgbV9jb3JyZWN0aW9uUGFuZWxUYWc7CisgICAgQk9PTCBtX2NvcnJlY3Rp
b25QYW5lbElzU2hvd247CiAjZW5kaWYKIH07CkluZGV4OiBXZWJLaXQvbWFjL1dlYkNvcmVTdXBw
b3J0L1dlYkVkaXRvckNsaWVudC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYkNvcmVT
dXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbQkocmV2aXNpb24gNzEzMDApCisrKyBXZWJLaXQvbWFj
L1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbQkod29ya2luZyBjb3B5KQpAQCAtMTg2
LDcgKzE4Niw3IEBAIFdlYkVkaXRvckNsaWVudDo6V2ViRWRpdG9yQ2xpZW50KFdlYlZpZXcKICAg
ICAsIG1fdW5kb1RhcmdldChbW1tXZWJFZGl0b3JVbmRvVGFyZ2V0IGFsbG9jXSBpbml0XSBhdXRv
cmVsZWFzZV0pCiAgICAgLCBtX2hhdmVVbmRvUmVkb09wZXJhdGlvbnMoZmFsc2UpCiAjaWYgIWRl
ZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQp
ICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKLSAgICAsIG1fY29ycmVjdGlv
blBhbmVsVGFnKEludmFsaWRDb3JyZWN0aW9uUGFuZWxUYWcpCisgICAgLCBtX2NvcnJlY3Rpb25Q
YW5lbElzU2hvd24oZmFsc2UpCiAjZW5kaWYKIHsKIH0KQEAgLTE5NCw3ICsxOTQsNyBAQCBXZWJF
ZGl0b3JDbGllbnQ6OldlYkVkaXRvckNsaWVudChXZWJWaWV3CiBXZWJFZGl0b3JDbGllbnQ6On5X
ZWJFZGl0b3JDbGllbnQoKQogewogI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAh
ZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9X
X0xFT1BBUkQpCi0gICAgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbCh0cnVlKTsKKyAgICBkaXNtaXNz
Q29ycmVjdGlvblBhbmVsKFdlYkNvcmU6OkNvcnJlY3Rpb25XYXNOb3RSZWplY3RlZCk7CiAjZW5k
aWYKIH0KIApAQCAtMzEwLDEwICszMTAsNiBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6cmVzcG9u
ZFRvQ2hhbmdlZFNlCiB7CiAgICAgW21fd2ViVmlldyBfc2VsZWN0aW9uQ2hhbmdlZF07CiAKLSNp
ZiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVP
UEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQotICAgIGRpc21pc3ND
b3JyZWN0aW9uUGFuZWwodHJ1ZSk7Ci0jZW5kaWYKLQogICAgIC8vIEZJWE1FOiBUaGlzIHF1aXJr
IGlzIG5lZWRlZCBkdWUgdG8gPHJkYXI6Ly9wcm9ibGVtLzUwMDk2MjU+IC0gV2UgY2FuIHBoYXNl
IGl0IG91dCBvbmNlIEFwZXJ0dXJlIGNhbiBhZG9wdCB0aGUgbmV3IGJlaGF2aW9yIG9uIHRoZWly
IGVuZAogICAgIGlmICghV2ViS2l0TGlua2VkT25PckFmdGVyKFdFQktJVF9GSVJTVF9WRVJTSU9O
X1dJVEhPVVRfQVBFUlRVUkVfUVVJUkspICYmIFtbW05TQnVuZGxlIG1haW5CdW5kbGVdIGJ1bmRs
ZUlkZW50aWZpZXJdIGlzRXF1YWxUb1N0cmluZzpAImNvbS5hcHBsZS5BcGVydHVyZSJdKQogICAg
ICAgICByZXR1cm47CkBAIC04NjAsOCArODU2LDggQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnVw
ZGF0ZVNwZWxsaW5nVUlXaQogfQogCiAjaWYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYm
ICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NO
T1dfTEVPUEFSRCkKLXZvaWQgV2ViRWRpdG9yQ2xpZW50OjpzaG93Q29ycmVjdGlvblBhbmVsKGNv
bnN0IEZsb2F0UmVjdCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcm
IHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nLCBFZGl0b3Iq
IGVkaXRvcikgewotICAgIGRpc21pc3NDb3JyZWN0aW9uUGFuZWwodHJ1ZSk7Cit2b2lkIFdlYkVk
aXRvckNsaWVudDo6c2hvd0NvcnJlY3Rpb25QYW5lbChXZWJDb3JlOjpDb3JyZWN0aW9uUGFuZWxJ
bmZvOjpQYW5lbFR5cGUgcGFuZWxUeXBlLCBjb25zdCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94T2ZS
ZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5n
JiByZXBsYWNlbWVudFN0cmluZywgRWRpdG9yKiBlZGl0b3IpIHsKKyAgICBkaXNtaXNzQ29ycmVj
dGlvblBhbmVsKFdlYkNvcmU6OkNvcnJlY3Rpb25XYXNOb3RSZWplY3RlZCk7CiAKICAgICBOU1Jl
Y3QgYm91bmRpbmdCb3hBc05TUmVjdCA9IGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZzsKICAg
ICBOU1JlY3Qgd2ViVmlld0ZyYW1lID0gbV93ZWJWaWV3LmZyYW1lOwpAQCAtODcxLDI1ICs4Njcs
MzUgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnNob3dDb3JyZWN0aW9uUGFuZQogICAgIE5TU3Ry
aW5nICpyZXBsYWNlZFN0cmluZ0FzTlNTdHJpbmcgPSByZXBsYWNlZFN0cmluZzsKICAgICBOU1N0
cmluZyAqcmVwbGFjZW1lbnRTdHJpbmdBc05TU3RyaW5nID0gcmVwbGFjZW1lbnRTdHJpbmc7CiAK
LSAgICBtX2NvcnJlY3Rpb25QYW5lbFRhZyA9IFtbTlNTcGVsbENoZWNrZXIgc2hhcmVkU3BlbGxD
aGVja2VyXSBzaG93Q29ycmVjdGlvbjpyZXBsYWNlbWVudFN0cmluZ0FzTlNTdHJpbmcgZm9yU3Ry
aW5nSW5SZWN0OmJvdW5kaW5nQm94QXNOU1JlY3QgdmlldzptX3dlYlZpZXcgY29tcGxldGlvbkhh
bmRsZXI6XihCT09MIGFjY2VwdGVkKSB7Ci0gICAgICAgIGlmICghYWNjZXB0ZWQpIHsKKyAgICBt
X2NvcnJlY3Rpb25QYW5lbElzU2hvd24gPSBZRVM7CisgICAgTlNDb3JyZWN0aW9uQnViYmxlVHlw
ZSBjb3JyZWN0aW9uUGFuZWxUeXBlID0gcGFuZWxUeXBlID09IFdlYkNvcmU6OkNvcnJlY3Rpb25Q
YW5lbEluZm86OlBhbmVsVHlwZUNvcnJlY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA/IE5TQ29ycmVjdGlvbkJ1YmJsZVR5cGVDb3JyZWN0aW9u
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBOU0Nv
cnJlY3Rpb25CdWJibGVUeXBlUmV2ZXJzaW9uOworICAgIFtbTlNTcGVsbENoZWNrZXIgc2hhcmVk
U3BlbGxDaGVja2VyXSBzaG93Q29ycmVjdGlvbkJ1YmJsZU9mVHlwZTpjb3JyZWN0aW9uUGFuZWxU
eXBlIHByaW1hcnlTdHJpbmc6cmVwbGFjZW1lbnRTdHJpbmdBc05TU3RyaW5nIGFsdGVybmF0aXZl
U3RyaW5nczpuaWwgZm9yU3RyaW5nSW5SZWN0OmJvdW5kaW5nQm94QXNOU1JlY3QgdmlldzptX3dl
YlZpZXcgY29tcGxldGlvbkhhbmRsZXI6XihOU1N0cmluZyAqYWNjZXB0ZWRTdHJpbmcpIHsKKyAg
ICAgICAgaWYgKCFhY2NlcHRlZFN0cmluZyAmJiBjb3JyZWN0aW9uUGFuZWxUeXBlID09IFdlYkNv
cmU6OkNvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZUNvcnJlY3Rpb24pIHsKICAgICAgICAg
ICAgIFtbTlNTcGVsbENoZWNrZXIgc2hhcmVkU3BlbGxDaGVja2VyXSByZWNvcmRSZXNwb25zZTpO
U0NvcnJlY3Rpb25SZXNwb25zZVJlamVjdGVkIHRvQ29ycmVjdGlvbjpyZXBsYWNlbWVudFN0cmlu
Z0FzTlNTdHJpbmcgZm9yV29yZDpyZXBsYWNlZFN0cmluZ0FzTlNTdHJpbmcgbGFuZ3VhZ2U6bmls
IGluU3BlbGxEb2N1bWVudFdpdGhUYWc6W21fd2ViVmlldyBzcGVsbENoZWNrZXJEb2N1bWVudFRh
Z11dOwogICAgICAgICAgICAgZWRpdG9yLT5oYW5kbGVSZWplY3RlZENvcnJlY3Rpb24oKTsKKyAg
ICAgICAgfSBlbHNlIGlmIChhY2NlcHRlZFN0cmluZyAmJiBjb3JyZWN0aW9uUGFuZWxUeXBlID09
IFdlYkNvcmU6OkNvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZVJldmVyc2lvbikgeworICAg
ICAgICAgICAgW1tOU1NwZWxsQ2hlY2tlciBzaGFyZWRTcGVsbENoZWNrZXJdIHJlY29yZFJlc3Bv
bnNlOk5TQ29ycmVjdGlvblJlc3BvbnNlUmV2ZXJ0ZWQgdG9Db3JyZWN0aW9uOnJlcGxhY2VkU3Ry
aW5nQXNOU1N0cmluZyBmb3JXb3JkOnJlcGxhY2VtZW50U3RyaW5nQXNOU1N0cmluZyBsYW5ndWFn
ZTpuaWwgaW5TcGVsbERvY3VtZW50V2l0aFRhZzpbbV93ZWJWaWV3IHNwZWxsQ2hlY2tlckRvY3Vt
ZW50VGFnXV07CisgICAgICAgICAgICBlZGl0b3ItPmhhbmRsZVJlamVjdGVkQ29ycmVjdGlvbigp
OwogICAgICAgICB9CiAgICAgfV07CiB9CiAKLXZvaWQgV2ViRWRpdG9yQ2xpZW50OjpkaXNtaXNz
Q29ycmVjdGlvblBhbmVsKGJvb2wgY29ycmVjdGlvbkFjY2VwdGVkKQordm9pZCBXZWJFZGl0b3JD
bGllbnQ6OmRpc21pc3NDb3JyZWN0aW9uUGFuZWwoV2ViQ29yZTo6Q29ycmVjdGlvbldhc1JlamVj
dGVkT3JOb3QgY29ycmVjdGlvbldhc1JlamVjdGVkT3JOb3QpCiB7Ci0gICAgaWYgKG1fY29ycmVj
dGlvblBhbmVsVGFnICE9IEludmFsaWRDb3JyZWN0aW9uUGFuZWxUYWcpIHsKLSAgICAgICAgW1tO
U1NwZWxsQ2hlY2tlciBzaGFyZWRTcGVsbENoZWNrZXJdIGRpc21pc3NDb3JyZWN0aW9uOm1fY29y
cmVjdGlvblBhbmVsVGFnIGFjY2VwdENvcnJlY3Rpb246Y29ycmVjdGlvbkFjY2VwdGVkXTsKLSAg
ICAgICAgbV9jb3JyZWN0aW9uUGFuZWxUYWcgPSBJbnZhbGlkQ29ycmVjdGlvblBhbmVsVGFnOwor
ICAgIGlmIChpc1Nob3dpbmdDb3JyZWN0aW9uUGFuZWwoKSkgeworICAgICAgICBpZiAoY29ycmVj
dGlvbldhc1JlamVjdGVkT3JOb3QpCisgICAgICAgICAgICBbW05TU3BlbGxDaGVja2VyIHNoYXJl
ZFNwZWxsQ2hlY2tlcl0gY2FuY2VsQ29ycmVjdGlvbkJ1YmJsZUZvclZpZXc6bV93ZWJWaWV3XTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgW1tOU1NwZWxsQ2hlY2tlciBzaGFyZWRTcGVsbENo
ZWNrZXJdIGRpc21pc3NDb3JyZWN0aW9uQnViYmxlRm9yVmlldzptX3dlYlZpZXddOworICAgICAg
ICBtX2NvcnJlY3Rpb25QYW5lbElzU2hvd24gPSBOTzsKICAgICB9CiB9CiAKIGJvb2wgV2ViRWRp
dG9yQ2xpZW50Ojppc1Nob3dpbmdDb3JyZWN0aW9uUGFuZWwoKQogewotICAgIHJldHVybiBtX2Nv
cnJlY3Rpb25QYW5lbFRhZyAhPSBJbnZhbGlkQ29ycmVjdGlvblBhbmVsVGFnOworICAgIHJldHVy
biBtX2NvcnJlY3Rpb25QYW5lbElzU2hvd247CiB9CiAjZW5kaWYKIAo=
</data>
<flag name="review"
          id="63247"
          type_id="1"
          status="-"
          setter="mitz"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>72985</attachid>
            <date>2010-11-04 14:59:28 -0700</date>
            <delta_ts>2010-11-04 15:05:57 -0700</delta_ts>
            <desc>Proposed patch (v2)</desc>
            <filename>webkit_bug47630.patch</filename>
            <type>text/plain</type>
            <size>63258</size>
            <attacher name="Jia Pu">jiapu.mail</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MTMwMCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNzMgQEAKKzIwMTAtMTEtMDMgIEppYSBQdSAgPGpwdUBhcHBsZS5jb20+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgcmV2ZXJzaW9uIGJ1
YmJsZSBpbiBXZWJWaWV3cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NDc2MzAKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzg1MzA5NjA+CisKKyAgICAg
ICAgQWRkZWQgbWFudWFsIHRlc3Q6CisgICAgICAgIG1hbnVhbC10ZXN0cy9hdXRvY29ycmVjdGlv
bi9jb250aW51ZS10eXBpbmctdG8tZGlzbWlzcy1yZXZlcnNpb24uaHRtbAorICAgICAgICBtYW51
YWwtdGVzdHMvYXV0b2NvcnJlY3Rpb24vZGVsZXRlLXRvLWRpc21pc3MtcmV2ZXJzaW9uLmh0bWwK
KyAgICAgICAgbWFudWFsLXRlc3RzL2F1dG9jb3JyZWN0aW9uL2RlbGV0ZS10by1lbmQtb2Ytd29y
ZC10by1zaG93LXJldmVyc2lvbi5odG1sCisgICAgICAgIG1hbnVhbC10ZXN0cy9hdXRvY29ycmVj
dGlvbi9tb3ZlLXRvLWVuZC1vZi13b3JkLXRvLXNob3ctcmV2ZXJzaW9uLmh0bWwKKyAgICAgICAg
bWFudWFsLXRlc3RzL2F1dG9jb3JyZWN0aW9uL3R5cGUtd2hpdGVzcGFjZS10by1kaXNtaXNzLXJl
dmVyc2lvbi5odG1sCisKKyAgICAgICAgV2UgY2FuIG9ubHkgbWFudWxseSB0ZXN0IHRoaXMgZmVh
dHVyZSBmb3IgdHdvIHJlYXNvbnM6CisgICAgICAgIDEuIE9uIE1hYyBPUyBYLCB0aGUgcmVzdWx0
IG9mIHNwZWxsIGNoZWNraW5nIGlzIHBhcnRseSBkZXRlcm1pbmVkIGJ5IHBhc3QgdXNlciB1c2Fn
ZS4gV2UgY2FuJ3QKKyAgICAgICAgICAgcmVhbGlhYmx5IGdlbmVyYXRpbmcgdGVzdCBjYXNlcyB1
bnRpbCB3ZSBjYW4gZGlzYWJsZSB1c2VyIGN1c3RvbSBkYXRhIGR1cmluZyBzcGVsbCBjaGVja2lu
Zy4KKyAgICAgICAgMi4gVG8gZXhlcmNpZXNlIHRoaXMgZmVhdHVyZSwgd2UgbmVlZCBhIG1pbmlt
dW0gb2YgMC4zIHNlY29uZCBkZWxheSB1c2luZyBXZWJDb3JlIHRpbWVyLgorCisgICAgICAgIFRo
aXMgcGF0Y2ggaXMgdG8gYWRkIHJldmVyc2lvbiB0byBjb3JyZWN0aW9uIHBhbmVsLiBJdCBjb25z
aXN0cyBvZiBmb2xsb3dpbmcgbWFqb3IgY29kZSBjaGFuZ2VzOgorICAgICAgICAxLiBDb2xsZWN0
ZWQgYWxsIGF1dG9jb3JyZWN0aW9uIHJlbGF0ZWQgbWVtYmVyIHZhcmlhYmxlcyBpbiBFZGl0b3Ig
aW50byBhIENvcnJlY3Rpb25QYW5lbEluZm8KKyAgICAgICAgICAgY2xhc3MgdG8gaW1wcm92ZSBy
ZWFkYWJpbGl0eS4KKyAgICAgICAgMi4gQ2hhbmdlZCBzaWduYXR1cmUgb2YgRWRpdG9yOjpzdGFy
dENvcnJlY3Rpb25QYW5lbFRpbWVyKCkgdG8gYWxsb3cgY2FsbGVyIHRvIHNwZWNpZnkgdGhlCisg
ICAgICAgICAgIHR5cGUgb2YgY29ycmVjdGlvbiBwYW5lbC0tcmVndWxhciBjb3JyZWN0aW9uIG9y
IHJldmVyc2lvbi4KKyAgICAgICAgMy4gTWFkZSBuZWNlc3NhcnkgY2hhbmdlcyB0byBhZG9wdCBy
ZXZlcnNpb24gQVBJIGluIEFwcEtpdC4KKyAgICAgICAgNC4gVXNlIFNVUFBPUlRfQ09SUkVDVElP
Tl9QQU5FTCBtYWNybyB0byBpbXByb3ZlIHJlYWRhYmlsaXR5LgorCisgICAgICAgICogR05VbWFr
ZWZpbGUuYW06IEFkZGVkIENvcnJlY3Rpb25QYW5lbEluZm8uaC4KKyAgICAgICAgKiBXZWJDb3Jl
Lmd5cGk6IERpdHRvLgorICAgICAgICAqIFdlYkNvcmUucHJvOiBEaXR0by4KKyAgICAgICAgKiBX
ZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajogRGl0dG8uCisgICAgICAgICogV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGVkaXRpbmcvQ29ycmVjdGlvblBh
bmVsSW5mby5oOiBBZGRlZC4KKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpFZGl0b3I6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24pOiBTdGFydCBjb3Jy
ZWN0aW9uIHBhbmVsIHRpbWVyIGZvciByZXZlcnNpb24gd2hlbgorICAgICAgICAgIHRoZSBuZXcg
c2VsZWN0aW9uIGlzIGEgY2FyZXQgc2VsZWN0aW9uIGF0IGVuZCBvZiBhIHByZXZpb3VzbHkgY29y
cmVjdGVkIHdvcmQuCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmFwcGxpZWRFZGl0aW5nKTog
U3RvcCB0aW1lciBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBtZXRob2QgaW5zdGVhZCBvZiBhdCB0
aGUgZW5kLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp+RWRpdG9yKTogQWRvcHRlZCBuZXcg
bWV0aG9kIGRpc21pc3NDb3JyZWN0aW9uUGFuZWwoKS4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRv
cjo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9Qb3NpdGlvbik6IEFkb3B0ZWQgbmV3IG1l
dGhvZCBhcHBseUNvcnJlY3Rpb25QYW5lbEluZm8oKS4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRv
cjo6bWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyk6IENvZGUgY2hhbmdl
IGZvciBuZXcgbV9jb3JyZWN0aW9uUGFuZWxJbmZvCisgICAgICAgICAgbWVtYmVyIHZhcmlhYmxl
LgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjb3JyZWN0aW9uUGFuZWxUaW1lckZpcmVkKTog
Q2hhbmdlIHRvIGhhbmRsZSByZXZlcnNpb24gcGFuZWwgdHlwZS4KKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRvcjo6aGFuZGxlUmVqZWN0ZWRDb3JyZWN0aW9uKTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpFZGl0b3I6OnN0YXJ0Q29ycmVjdGlvblBhbmVsVGltZXIpOiBDaGFuZ2VkIHNpZ25hdHVy
ZSB0byBhbGxvdyBwYXNzaW5nIGluIHBhbmVsIHR5cGUuCisgICAgICAgIChXZWJDb3JlOjpFZGl0
b3I6OnN0b3BDb3JyZWN0aW9uUGFuZWxUaW1lcik6IEFkb3B0ZWQgbWFjcm8gU1VQUE9SVF9DT1JS
RUNUSU9OX1BBTkVMLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpoYW5kbGVDYW5jZWxPcGVy
YXRpb24pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aXNTaG93aW5nQ29ycmVj
dGlvblBhbmVsKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmRpc21pc3NDb3Jy
ZWN0aW9uUGFuZWwpOiBVcGRhdGUgbV9jb3JyZWN0aW9uUGFuZWxJbmZvIHdoZW4gY29ycmVjdGlv
biBwYW5lbAorICAgICAgICAgIGlzIGRpc21pc3NlZC4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRv
cjo6YXBwbHlDb3JyZWN0aW9uUGFuZWxJbmZvKTogRmFjdG9yZWQgb3V0IGNvZGUgdGhhdCBhcHBs
aWVzIGF1dG9jb3JyZWN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjaGFuZ2VTZWxl
Y3Rpb25BZnRlckNvbW1hbmQpOiBBZG9wdCBtYWNybyBTVVBQT1JUX0NPUlJFQ1RJT05fUEFORUwu
CisgICAgICAgICogZWRpdGluZy9FZGl0b3IuaDogQWRvcHRlZCBDb3JyZWN0aW9uUGFuZWxJbmZv
IGFuZCBhZGQgbmV3IG1lbWJlciBtZXRob2RzLgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yQ29t
bWFuZC5jcHA6IEFkb3B0ZWQgbWFjcm8gU1VQUE9SVF9DT1JSRUNUSU9OX1BBTkVMCisgICAgICAg
IChXZWJDb3JlOjpjcmVhdGVDb21tYW5kTWFwKToKKyAgICAgICAgKiBlZGl0aW5nL1R5cGluZ0Nv
bW1hbmQuY3BwOiBBZG9wdGVkIG1hY3JvIFNVUFBPUlRfQ09SUkVDVElPTl9QQU5FTCBhbmQgbmV3
IHNpZ25hdHVyZSBvZgorICAgICAgICAgIHN0YXJ0Q29ycmVjdGlvblBhbmVsVGltZXIoKS4KKyAg
ICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6Om1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGlu
Zyk6CisgICAgICAgICogbG9hZGVyL0VtcHR5Q2xpZW50cy5oOgorICAgICAgICAoV2ViQ29yZTo6
RW1wdHlFZGl0b3JDbGllbnQ6OnNob3dDb3JyZWN0aW9uUGFuZWwpOiBBZG9wdGVkIG5ldyBzaWdu
YXR1cmUgb2YgYmFzZSBjbGFzcyBtZXRob2QuCisgICAgICAgIChXZWJDb3JlOjpFbXB0eUVkaXRv
ckNsaWVudDo6ZGlzbWlzc0NvcnJlY3Rpb25QYW5lbCk6ICBEaXR0by4KKyAgICAgICAgKiBtYW51
YWwtdGVzdHMvYXV0b2NvcnJlY3Rpb24vY29udGludWUtdHlwaW5nLXRvLWRpc21pc3MtcmV2ZXJz
aW9uLmh0bWw6IEFkZGVkLgorICAgICAgICAqIG1hbnVhbC10ZXN0cy9hdXRvY29ycmVjdGlvbi9k
ZWxldGUtdG8tZGlzbWlzcy1yZXZlcnNpb24uaHRtbDogQWRkZWQuCisgICAgICAgICogbWFudWFs
LXRlc3RzL2F1dG9jb3JyZWN0aW9uL2RlbGV0ZS10by1lbmQtb2Ytd29yZC10by1zaG93LXJldmVy
c2lvbi5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBtYW51YWwtdGVzdHMvYXV0b2NvcnJlY3Rpb24v
bW92ZS10by1lbmQtb2Ytd29yZC10by1zaG93LXJldmVyc2lvbi5odG1sOiBBZGRlZC4KKyAgICAg
ICAgKiBtYW51YWwtdGVzdHMvYXV0b2NvcnJlY3Rpb24vdHlwZS13aGl0ZXNwYWNlLXRvLWRpc21p
c3MtcmV2ZXJzaW9uLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHBhZ2UvRWRpdG9yQ2xpZW50Lmg6
IENoYW5nZWQgc2lnbmF0dXJlIG9mIHNob3dDb3JyZWN0aW9uUGFuZWwoKSBhbmQgZGlzbWlzc0Nv
cnJlY3Rpb25QYW5lbCgpLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGlj
c0NvbnRleHRNYWMubW06IEFkZGVkIGNvbW1lbnQgdG8gaW1wcm92ZSByZWFkYWJpbGl0eS4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0Q2hlY2tpbmcp
OgorCiAyMDEwLTExLTAzICBQYXRyaWNrIEdhbnN0ZXJlciAgPHBhcm9nYUB3ZWJraXQub3JnPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gUm9iZW4uCkluZGV4OiBXZWJDb3JlL0dOVW1ha2Vm
aWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHJldmlzaW9uIDcx
MzAwKQorKysgV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkod29ya2luZyBjb3B5KQpAQCAtMTI3OCw2
ICsxMjc4LDcgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL2VkaXRpbmcvQ29tcG9z
aXRlRWRpdENvbW1hbmQuaCBcCiAJV2ViQ29yZS9lZGl0aW5nL0NyZWF0ZUxpbmtDb21tYW5kLmNw
cCBcCiAJV2ViQ29yZS9lZGl0aW5nL0NyZWF0ZUxpbmtDb21tYW5kLmggXAorCVdlYkNvcmUvZWRp
dGluZy9Db3JyZWN0aW9uUGFuZWxJbmZvLmggXAogCVdlYkNvcmUvZWRpdGluZy9EZWxldGVCdXR0
b25Db250cm9sbGVyLmNwcCBcCiAJV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZUJ1dHRvbkNvbnRyb2xs
ZXIuaCBcCiAJV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZUJ1dHRvbi5jcHAgXApJbmRleDogV2ViQ29y
ZS9XZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlz
aW9uIDcxMzAwKQorKysgV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTEz
NjMsNiArMTM2Myw3IEBACiAgICAgICAgICAgICAnZWRpdGluZy9CcmVha0Jsb2NrcXVvdGVDb21t
YW5kLmgnLAogICAgICAgICAgICAgJ2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwJywK
ICAgICAgICAgICAgICdlZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmgnLAorICAgICAgICAg
ICAgJ2VkaXRpbmcvQ29ycmVjdGlvblBhbmVsSW5mby5oJywKICAgICAgICAgICAgICdlZGl0aW5n
L0NyZWF0ZUxpbmtDb21tYW5kLmNwcCcsCiAgICAgICAgICAgICAnZWRpdGluZy9DcmVhdGVMaW5r
Q29tbWFuZC5oJywKICAgICAgICAgICAgICdlZGl0aW5nL0RlbGV0ZUJ1dHRvbi5jcHAnLApJbmRl
eDogV2ViQ29yZS9XZWJDb3JlLnBybwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUucHJv
CShyZXZpc2lvbiA3MTMwMCkKKysrIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHdvcmtpbmcgY29weSkK
QEAgLTE2ODksNiArMTY4OSw3IEBAIEhFQURFUlMgKz0gXAogICAgIGVkaXRpbmcvQXBwbHlTdHls
ZUNvbW1hbmQuaCBcCiAgICAgZWRpdGluZy9CcmVha0Jsb2NrcXVvdGVDb21tYW5kLmggXAogICAg
IGVkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuaCBcCisgICAgZWRpdGluZy9Db3JyZWN0aW9u
UGFuZWxJbmZvLmggXAogICAgIGVkaXRpbmcvQ3JlYXRlTGlua0NvbW1hbmQuaCBcCiAgICAgZWRp
dGluZy9EZWxldGVCdXR0b25Db250cm9sbGVyLmggXAogICAgIGVkaXRpbmcvRGVsZXRlQnV0dG9u
LmggXApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvago9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiA3
MTMwMCkKKysrIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcg
Y29weSkKQEAgLTQ1ODUyLDYgKzQ1ODUyLDEwIEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8
RmlsZQ0KKwkJCVJlbGF0aXZlUGF0aD0iLi5cZWRpdGluZ1xDb3JyZWN0aW9uUGFuZWxJbmZvLmgi
DQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxl
ZGl0aW5nXENyZWF0ZUxpbmtDb21tYW5kLmNwcCINCiAJCQkJPg0KIAkJCQk8RmlsZUNvbmZpZ3Vy
YXRpb24NCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
cmV2aXNpb24gNzEzMDApCisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDY2Nyw2ICs0NjY3LDcgQEAKIAkJQjc3NkQ0M0QxMTA0
NTI3NTAwQkVCMEVDIC8qIFByaW50Q29udGV4dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNzc2RDQzQzExMDQ1Mjc1MDBCRUIwRUMgLyogUHJpbnRD
b250ZXh0LmNwcCAqLzsgfTsKIAkJQjg4NUU4RDQxMUUwNkREMjAwOUZGQkY0IC8qIEluc3BlY3Rv
ckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBCODg1RThEMjExRTA2REQyMDA5RkZCRjQgLyogSW5zcGVjdG9yQXBw
bGljYXRpb25DYWNoZUFnZW50LmNwcCAqLzsgfTsKIAkJQjg4NUU4RDUxMUUwNkREMjAwOUZGQkY0
IC8qIEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjg4NUU4RDMxMUUwNkREMjAwOUZGQkY0IC8qIElu
c3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKCk7IH07IH07CisJCUI4QTZBNkQ1MTI3QjMzOEQwMDg2NzNCQSAvKiBDb3JyZWN0aW9uUGFu
ZWxJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
OEE2QTZENDEyN0IzMzhEMDA4NjczQkEgLyogQ29ycmVjdGlvblBhbmVsSW5mby5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDMDBGMDA0MEUwQTE4
NTUwMEZEMDRFMyAvKiBET01GaWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCQzAwRUZGRTBFMEExODU1MDBGRDA0RTMgLyogRE9NRmlsZS5oICovOyB9
OwogCQlCQzAwRjAwNTBFMEExODU1MDBGRDA0RTMgLyogRE9NRmlsZS5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMDBFRkZGMEUwQTE4NTUwMEZEMDRF
MyAvKiBET01GaWxlLm1tICovOyB9OwogCQlCQzAwRjAwNjBFMEExODU1MDBGRDA0RTMgLyogRE9N
RmlsZUludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCQzAwRjAwMDBFMEExODU1MDBGRDA0RTMgLyogRE9NRmlsZUludGVybmFsLmggKi87IH07
CkBAIC0xMDY2NSw2ICsxMDY2Niw3IEBACiAJCUI3NzZENDNDMTEwNDUyNzUwMEJFQjBFQyAvKiBQ
cmludENvbnRleHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUHJp
bnRDb250ZXh0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjg4NUU4RDIxMUUw
NkREMjAwOUZGQkY0IC8qIEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hl
QWdlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCODg1RThEMzExRTA2REQy
MDA5RkZCRjQgLyogSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCOEE2QTZENDEyN0IzMzhEMDA4NjczQkEgLyog
Q29ycmVjdGlvblBhbmVsSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBD
b3JyZWN0aW9uUGFuZWxJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMDBF
RkZFMEUwQTE4NTUwMEZEMDRFMyAvKiBET01GaWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IERPTUZpbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMwMEVG
RkYwRTBBMTg1NTAwRkQwNEUzIC8qIERPTUZpbGUubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IHBhdGggPSBET01GaWxlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlCQzAwRjAwMDBFMEExODU1MDBGRDA0RTMgLyogRE9NRmlsZUludGVybmFsLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTUZpbGVJbnRlcm5hbC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMTQ0ODYsNiArMTQ0ODgsNyBAQAogCQkJCTkzMzA5RDhDMDk5RTY0
OTEwMDU2RTU4MSAvKiBCcmVha0Jsb2NrcXVvdGVDb21tYW5kLmggKi8sCiAJCQkJOTMzMDlEOEQw
OTlFNjQ5MTAwNTZFNTgxIC8qIENvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcCAqLywKIAkJCQk5MzMw
OUQ4RTA5OUU2NDkxMDA1NkU1ODEgLyogQ29tcG9zaXRlRWRpdENvbW1hbmQuaCAqLywKKwkJCQlC
OEE2QTZENDEyN0IzMzhEMDA4NjczQkEgLyogQ29ycmVjdGlvblBhbmVsSW5mby5oICovLAogCQkJ
CUQwQjA1NTY3MDlDNjcwMDEwMDMwN0U0MyAvKiBDcmVhdGVMaW5rQ29tbWFuZC5jcHAgKi8sCiAJ
CQkJRDBCMDU1NjYwOUM2NzAwMTAwMzA3RTQzIC8qIENyZWF0ZUxpbmtDb21tYW5kLmggKi8sCiAJ
CQkJMUM0QzhGNjMwQUQ4NjU1RDAwOTQ3NUNFIC8qIERlbGV0ZUJ1dHRvbi5jcHAgKi8sCkBAIC0y
MTI3MCw3ICsyMTI3Myw4IEBACiAJCQkJOTdERDREODcwRkRGNEQ2RTAwRUNGOUE0IC8qIFhTU0F1
ZGl0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTZFNjdEMkE3MTI4MEU4QTQwMDg3NThGNyAvKiBF
eHRlbnNpb25zM0RPcGVuR0wuaCBpbiBIZWFkZXJzICovLAogCQkJCTZFNjdEMkE5MTI4MEU4QkQw
MDg3NThGNyAvKiBFeHRlbnNpb25zM0QuaCBpbiBIZWFkZXJzICovLAotIAkJCQk5M0Y2RjFFRTEy
N0Y3MEIxMDA1NUNCMDYgLyogV2ViR0xDb250ZXh0RXZlbnQuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTkzRjZGMUVFMTI3RjcwQjEwMDU1Q0IwNiAvKiBXZWJHTENvbnRleHRFdmVudC5oIGluIEhlYWRl
cnMgKi8sCisJCQkJQjhBNkE2RDUxMjdCMzM4RDAwODY3M0JBIC8qIENvcnJlY3Rpb25QYW5lbElu
Zm8uaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHBy
b2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMjEzMzAsNiArMjEzMzQsNyBAQAogCQkJaXNhID0gUEJY
UHJvamVjdDsKIAkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSAxNDlDMjg0MzA4OTAyQjExMDA4
QTlFRkMgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhQcm9qZWN0ICJXZWJDb3Jl
IiAqLzsKIAkJCWNvbXBhdGliaWxpdHlWZXJzaW9uID0gIlhjb2RlIDIuNCI7CisJCQlkZXZlbG9w
bWVudFJlZ2lvbiA9IEVuZ2xpc2g7CiAJCQloYXNTY2FubmVkRm9yRW5jb2RpbmdzID0gMTsKIAkJ
CWtub3duUmVnaW9ucyA9ICgKIAkJCQlFbmdsaXNoLApAQCAtMjM4MzIsNyArMjM4MzcsNyBAQAog
CQkJCUUxQkU1MTJEMENGNkM1MTIwMDJFQTk1OSAvKiBYU0xUVW5pY29kZVNvcnQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJOTdERDREODYwRkRGNEQ2RTAwRUNGOUE0IC8qIFhTU0F1ZGl0b3IuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJNkU2N0QyQTYxMjgwRThBNDAwODc1OEY3IC8qIEV4dGVuc2lv
bnMzRE9wZW5HTC5jcHAgaW4gU291cmNlcyAqLywKLSAJCQkJOTNGNkYxRUQxMjdGNzBCMTAwNTVD
QjA2IC8qIFdlYkdMQ29udGV4dEV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTkzRjZGMUVE
MTI3RjcwQjEwMDU1Q0IwNiAvKiBXZWJHTENvbnRleHRFdmVudC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsK
SW5kZXg6IFdlYkNvcmUvZWRpdGluZy9Db3JyZWN0aW9uUGFuZWxJbmZvLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9lZGl0aW5nL0NvcnJlY3Rpb25QYW5lbEluZm8uaAkocmV2aXNpb24gMCkKKysr
IFdlYkNvcmUvZWRpdGluZy9Db3JyZWN0aW9uUGFuZWxJbmZvLmgJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ29ycmVjdGlvblBhbmVsSW5mb19oCisjZGVm
aW5lIENvcnJlY3Rpb25QYW5lbEluZm9faAorCisjaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5l
ZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkgJiYg
IWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQorLy8gU29tZSBwbGF0Zm9ybXMgcHJv
dmlkZSBVSSBmb3Igc3VnZ2VzdGluZyBhdXRvY29ycmVjdGlvbi4KKyNkZWZpbmUgU1VQUE9SVF9B
VVRPQ09SUkVDVElPTl9QQU5FTCAxCisvLyBTb21lIHBsYXRmb3JtcyB1c2Ugc3BlbGxpbmcgYW5k
IGF1dG9jb3JyZWN0aW9uIG1hcmtlcnMgdG8gcHJvdmlkZSB2aXN1YWwgY3VlLgorLy8gT24gc3Vj
aCBwbGF0Zm9ybSwgaWYgd29yZCB3aXRoIG1hcmtlciBpcyBlZGl0ZWQsIHdlIG5lZWQgdG8gcmVt
b3ZlIHRoZSBtYXJrZXIuCisjZGVmaW5lIFJFTU9WRV9NQVJLRVJTX1VQT05fRURJVElORyAxCisj
ZWxzZQorI2RlZmluZSBTVVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMIDAKKyNkZWZpbmUgUkVN
T1ZFX01BUktFUlNfVVBPTl9FRElUSU5HIDAKKyNlbmRpZiAvLyAjaWYgUExBVEZPUk0oTUFDKSAm
JiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVP
UEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQorCisjaW5jbHVkZSAi
UmFuZ2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdHJ1Y3QgQ29ycmVjdGlvblBhbmVs
SW5mbyB7CisgICAgZW51bSBQYW5lbFR5cGV7CisgICAgICAgIFBhbmVsVHlwZUNvcnJlY3Rpb24g
PSAwLAorICAgICAgICBQYW5lbFR5cGVSZXZlcnNpb24KKyAgICB9OworCisgICAgUmVmUHRyPFJh
bmdlPiBtX3JhbmdlVG9CZVJlcGxhY2VkOworICAgIFN0cmluZyBtX3JlcGxhY2VkU3RyaW5nOwor
ICAgIFN0cmluZyBtX3JlcGxhY2VtZW50U3RyaW5nOworICAgIFBhbmVsVHlwZSBtX3BhbmVsVHlw
ZTsKKyAgICBib29sIG1faXNBY3RpdmU7Cit9OworCitlbnVtIENvcnJlY3Rpb25XYXNSZWplY3Rl
ZE9yTm90IHsgQ29ycmVjdGlvbldhc05vdFJlamVjdGVkLCBDb3JyZWN0aW9uV2FzUmVqZWN0ZWQg
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gQ29ycmVjdGlvblBhbmVs
SW5mb19oCkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAkocmV2aXNpb24gNzEzMDApCisrKyBXZWJDb3JlL2Vk
aXRpbmcvRWRpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDU3LDkgKzQ1Nyw1MSBAQCBib29s
IEVkaXRvcjo6c2hvdWxkU2hvd0RlbGV0ZUludGVyZmFjZShICiAKIHZvaWQgRWRpdG9yOjpyZXNw
b25kVG9DaGFuZ2VkU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlv
bikKIHsKKyNpZiBTVVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMCisgICAgVmlzaWJsZVNlbGVj
dGlvbiBjdXJyZW50U2VsZWN0aW9uKGZyYW1lKCktPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKSk7
CisgICAgaWYgKGN1cnJlbnRTZWxlY3Rpb24gIT0gb2xkU2VsZWN0aW9uKQorICAgICAgICBkaXNt
aXNzQ29ycmVjdGlvblBhbmVsKENvcnJlY3Rpb25XYXNOb3RSZWplY3RlZCk7CisjZW5kaWYgLy8g
U1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTAorCiAgICAgaWYgKGNsaWVudCgpKQogICAgICAg
ICBjbGllbnQoKS0+cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbigpOwogICAgIG1fZGVsZXRlQnV0
dG9uQ29udHJvbGxlci0+cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihvbGRTZWxlY3Rpb24pOwor
CisjaWYgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTAorICAgIC8vIFdoZW4gdXNlciBtb3Zl
cyBjYXJldCB0byB0aGUgZW5kIG9mIGF1dG9jb3JyZWN0ZWQgd29yZCBhbmQgcGF1c2VzLCB3ZSBz
aG93IHRoZSBwYW5lbAorICAgIC8vIGNvbnRhaW5pbmcgdGhlIG9yaWdpbmFsIHByZS1jb3JyZWN0
aW9uIHdvcmQgc28gdGhhdCB1c2VyIGNhbiBxdWlja2x5IHJldmVydCB0aGUKKyAgICAvLyB1bmRl
c2lyZWQgYXV0b2NvcnJlY3Rpb24uIEhlcmUsIHdlIHN0YXJ0IGNvcnJlY3Rpb24gcGFuZWwgdGlt
ZXIgb25jZSB3ZSBjb25maXJtIHRoYXQKKyAgICAvLyB0aGUgbmV3IGNhcmV0IHBvc2l0aW9uIGlz
IGF0IHRoZSBlbmQgb2YgYSB3b3JkLgorICAgIGlmICghY3VycmVudFNlbGVjdGlvbi5pc0NhcmV0
KCkgfHwgY3VycmVudFNlbGVjdGlvbiA9PSBvbGRTZWxlY3Rpb24pCisgICAgICAgIHJldHVybjsK
KworICAgIFZpc2libGVQb3NpdGlvbiBzZWxlY3Rpb25Qb3NpdGlvbiA9IGN1cnJlbnRTZWxlY3Rp
b24uc3RhcnQoKTsKKyAgICBWaXNpYmxlUG9zaXRpb24gZW5kUG9zaXRpb25PZldvcmQgPSBlbmRP
ZldvcmQoc2VsZWN0aW9uUG9zaXRpb24sIExlZnRXb3JkSWZPbkJvdW5kYXJ5KTsKKyAgICBpZiAo
c2VsZWN0aW9uUG9zaXRpb24gIT0gZW5kUG9zaXRpb25PZldvcmQpCisgICAgICAgIHJldHVybjsK
KworICAgIFBvc2l0aW9uIHBvc2l0aW9uID0gZW5kUG9zaXRpb25PZldvcmQuZGVlcEVxdWl2YWxl
bnQoKTsKKyAgICBpZiAocG9zaXRpb24uYW5jaG9yVHlwZSgpICE9IFBvc2l0aW9uOjpQb3NpdGlv
bklzT2Zmc2V0SW5BbmNob3IpCisgICAgICAgIHJldHVybjsKKworICAgIE5vZGUqIG5vZGUgPSBw
b3NpdGlvbi5jb250YWluZXJOb2RlKCk7CisgICAgaW50IGVuZE9mZnNldCA9IHBvc2l0aW9uLm9m
ZnNldEluQ29udGFpbmVyTm9kZSgpOworICAgIFZlY3RvcjxEb2N1bWVudE1hcmtlcj4gbWFya2Vy
cyA9IG5vZGUtPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+bWFya2Vyc0Zvck5vZGUobm9kZSk7Cisg
ICAgc2l6ZV90IG1hcmtlckNvdW50ID0gbWFya2Vycy5zaXplKCk7CisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBtYXJrZXJDb3VudDsgKytpKSB7CisgICAgICAgIGNvbnN0IERvY3VtZW50TWFy
a2VyJiBtYXJrZXIgPSBtYXJrZXJzW2ldOworICAgICAgICBpZiAobWFya2VyLnR5cGUgPT0gRG9j
dW1lbnRNYXJrZXI6OkNvcnJlY3Rpb25JbmRpY2F0b3IgJiYgc3RhdGljX2Nhc3Q8aW50PihtYXJr
ZXIuZW5kT2Zmc2V0KSA9PSBlbmRPZmZzZXQpIHsKKyAgICAgICAgICAgIFJlZlB0cjxSYW5nZT4g
d29yZFJhbmdlID0gUmFuZ2U6OmNyZWF0ZShmcmFtZSgpLT5kb2N1bWVudCgpLCBub2RlLCBtYXJr
ZXIuc3RhcnRPZmZzZXQsIG5vZGUsIG1hcmtlci5lbmRPZmZzZXQpOworICAgICAgICAgICAgU3Ry
aW5nIGN1cnJlbnRXb3JkID0gcGxhaW5UZXh0KHdvcmRSYW5nZS5nZXQoKSk7CisgICAgICAgICAg
ICBpZiAoY3VycmVudFdvcmQubGVuZ3RoKCkgPiAwICYmIG1hcmtlci5kZXNjcmlwdGlvbi5sZW5n
dGgoKSA+IDApIHsKKyAgICAgICAgICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ubV9yYW5n
ZVRvQmVSZXBsYWNlZCA9IHdvcmRSYW5nZTsKKyAgICAgICAgICAgICAgICBtX2NvcnJlY3Rpb25Q
YW5lbEluZm8ubV9yZXBsYWNlbWVudFN0cmluZyA9IG1hcmtlci5kZXNjcmlwdGlvbjsKKyAgICAg
ICAgICAgICAgICBzdGFydENvcnJlY3Rpb25QYW5lbFRpbWVyKENvcnJlY3Rpb25QYW5lbEluZm86
OlBhbmVsVHlwZVJldmVyc2lvbik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAvLyBTVVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVM
CiB9CiAKIHZvaWQgRWRpdG9yOjpyZXNwb25kVG9DaGFuZ2VkQ29udGVudHMoY29uc3QgVmlzaWJs
ZVNlbGVjdGlvbiYgZW5kaW5nU2VsZWN0aW9uKQpAQCAtOTk4LDEwICsxMDQwLDEzIEBAIHN0YXRp
YyB2b2lkIGRpc3BhdGNoRWRpdGFibGVDb250ZW50Q2hhbmcKIAogdm9pZCBFZGl0b3I6OmFwcGxp
ZWRFZGl0aW5nKFBhc3NSZWZQdHI8RWRpdENvbW1hbmQ+IGNtZCkKIHsKKyAgICAvLyBXZSBtYXkg
c3RhcnQgcmV2ZXJzaW9uIHBhbmVsIHRpbWVyIGluIHJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24o
KS4KKyAgICAvLyBTbyB3ZSBzdG9wIHRoZSB0aW1lciBmb3IgY3VycmVudCBwYW5lbCBiZWZvcmUg
Y2FsbGluZyBjaGFuZ2VTZWxlY3Rpb25BZnRlckNvbW1hbmQoKSBsYXRlciBpbiB0aGlzIG1ldGhv
ZC4KKyAgICBzdG9wQ29ycmVjdGlvblBhbmVsVGltZXIoKTsKICAgICBtX2ZyYW1lLT5kb2N1bWVu
dCgpLT51cGRhdGVMYXlvdXQoKTsKLSAgICAKKwogICAgIGRpc3BhdGNoRWRpdGFibGVDb250ZW50
Q2hhbmdlZEV2ZW50cygqY21kKTsKLSAgICAKKwogICAgIFZpc2libGVTZWxlY3Rpb24gbmV3U2Vs
ZWN0aW9uKGNtZC0+ZW5kaW5nU2VsZWN0aW9uKCkpOwogICAgIC8vIERvbid0IGNsZWFyIHRoZSB0
eXBpbmcgc3R5bGUgd2l0aCB0aGlzIHNlbGVjdGlvbiBjaGFuZ2UuICBXZSBkbyB0aG9zZSB0aGlu
Z3MgZWxzZXdoZXJlIGlmIG5lY2Vzc2FyeS4KICAgICBjaGFuZ2VTZWxlY3Rpb25BZnRlckNvbW1h
bmQobmV3U2VsZWN0aW9uLCBmYWxzZSwgZmFsc2UpOwpAQCAtMTAyMCw3ICsxMDY1LDYgQEAgdm9p
ZCBFZGl0b3I6OmFwcGxpZWRFZGl0aW5nKFBhc3NSZWZQdHI8RQogICAgICAgICAgICAgY2xpZW50
KCktPnJlZ2lzdGVyQ29tbWFuZEZvclVuZG8obV9sYXN0RWRpdENvbW1hbmQpOwogICAgIH0KICAg
ICByZXNwb25kVG9DaGFuZ2VkQ29udGVudHMobmV3U2VsZWN0aW9uKTsKLSAgICBzdG9wQ29ycmVj
dGlvblBhbmVsVGltZXIoKTsKIH0KIAogdm9pZCBFZGl0b3I6OnVuYXBwbGllZEVkaXRpbmcoUGFz
c1JlZlB0cjxFZGl0Q29tbWFuZD4gY21kKQpAQCAtMTA2OCw5ICsxMTEyLDggQEAgRWRpdG9yOjpF
ZGl0b3IoRnJhbWUqIGZyYW1lKQogCiBFZGl0b3I6On5FZGl0b3IoKQogewotI2lmIFBMQVRGT1JN
KE1BQykgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5H
X09OX0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKLSAgICBp
ZiAoY2xpZW50KCkpCi0gICAgICAgIGNsaWVudCgpLT5kaXNtaXNzQ29ycmVjdGlvblBhbmVsKHRy
dWUpOworI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwKKyAgICBkaXNtaXNzQ29ycmVj
dGlvblBhbmVsKENvcnJlY3Rpb25XYXNOb3RSZWplY3RlZCk7CiAjZW5kaWYKIH0KIApAQCAtMTk2
Nyw0NyArMjAxMCwxMCBAQCB2b2lkIEVkaXRvcjo6bWFya01pc3NwZWxsaW5nc0FuZEJhZEdyYW1t
CiB2b2lkIEVkaXRvcjo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9Qb3NpdGlvbihjb25z
dCBWaXNpYmxlUG9zaXRpb24gJnApCiB7CiAjaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChC
VUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkKLSNpZiAh
ZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCisjaWYgU1VQUE9SVF9BVVRPQ09SUkVD
VElPTl9QQU5FTAogICAgIC8vIEFwcGx5IHBlbmRpbmcgYXV0b2NvcnJlY3Rpb24gYmVmb3JlIG5l
eHQgcm91bmQgb2Ygc3BlbGwgY2hlY2tpbmcuCi0gICAgYm9vbCBkaWRBcHBseUNvcnJlY3Rpb24g
PSBmYWxzZTsKLSAgICBpZiAobV9yYW5nZVRvQmVSZXBsYWNlZEJ5Q29ycmVjdGlvbikgewotICAg
ICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICAgICAgUmVmUHRyPFJhbmdlPiBwYXJhZ3Jh
cGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uID0gbV9yYW5nZVRvQmVSZXBsYWNlZEJ5Q29ycmVj
dGlvbi0+Y2xvbmVSYW5nZShlYyk7Ci0gICAgICAgIGlmICghZWMpIHsKLSAgICAgICAgICAgIHNl
dFN0YXJ0KHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24uZ2V0KCksIHN0YXJ0T2ZQ
YXJhZ3JhcGgobV9yYW5nZVRvQmVSZXBsYWNlZEJ5Q29ycmVjdGlvbi0+c3RhcnRQb3NpdGlvbigp
KSk7Ci0gICAgICAgICAgICBzZXRFbmQocGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlv
bi5nZXQoKSwgZW5kT2ZQYXJhZ3JhcGgobV9yYW5nZVRvQmVSZXBsYWNlZEJ5Q29ycmVjdGlvbi0+
ZW5kUG9zaXRpb24oKSkpOwotICAgICAgICAgICAgLy8gQWZ0ZXIgd2UgcmVwbGFjZSB0aGUgd29y
ZCBhdCByYW5nZSBtX3JhbmdlVG9CZVJlcGxhY2VkQnlDb3JyZWN0aW9uLCB3ZSBuZWVkIHRvIGFk
ZCAKLSAgICAgICAgICAgIC8vIGF1dG9jb3JyZWN0aW9uIHVuZGVybGluZSBhdCB0aGF0IHJhbmdl
LiBIb3dldmVyLCBvbmNlIHRoZSByZXBsYWNlbWVudCB0b29rIHBsYWNlLCB0aGUKLSAgICAgICAg
ICAgIC8vIHZhbHVlIG9mIG1fcmFuZ2VUb0JlUmVwbGFjZWRCeUNvcnJlY3Rpb24gaXMgbm90IHZh
bGlkIGFueW1vcmUuIFNvIGJlZm9yZSB3ZSBjYXJyeSBvdXQKLSAgICAgICAgICAgIC8vIHRoZSBy
ZXBsYWNlbWVudCwgd2UgbmVlZCB0byBzdG9yZSB0aGUgc3RhcnQgcG9zaXRpb24gb2YgbV9yYW5n
ZVRvQmVSZXBsYWNlZEJ5Q29ycmVjdGlvbgotICAgICAgICAgICAgLy8gcmVsYXRpdmUgdG8gdGhl
IHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSBjb250YWluaW5nIHBhcmFncmFwaC4gV2UgdXNlIGNvcnJl
Y3Rpb25TdGFydE9mZnNldEluUGFyYWdyYXBoCi0gICAgICAgICAgICAvLyB0byBzdG9yZSB0aGlz
IHZhbHVlLiBJbiBvcmRlciB0byBvYnRhaW4gdGhpcyBvZmZzZXQsIHdlIG5lZWQgdG8gZmlyc3Qg
Y3JlYXRlIGEgcmFuZ2UKLSAgICAgICAgICAgIC8vIHdoaWNoIHNwYW5zIGZyb20gdGhlIHN0YXJ0
IG9mIHBhcmFncmFwaCB0byB0aGUgc3RhcnQgcG9zaXRpb24gb2YgbV9yYW5nZVRvQmVSZXBsYWNl
ZEJ5Q29ycmVjdGlvbi4KLSAgICAgICAgICAgIFJlZlB0cjxSYW5nZT4gY29ycmVjdGlvblN0YXJ0
T2Zmc2V0SW5QYXJhZ3JhcGhBc1JhbmdlID0gUmFuZ2U6OmNyZWF0ZShwYXJhZ3JhcGhSYW5nZUNv
bnRhaW5pbmdDb3JyZWN0aW9uLT5zdGFydENvbnRhaW5lcihlYyktPmRvY3VtZW50KCksIHBhcmFn
cmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24tPnN0YXJ0UG9zaXRpb24oKSwgcGFyYWdyYXBo
UmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi0+c3RhcnRQb3NpdGlvbigpKTsKLSAgICAgICAgICAg
IGlmICghZWMpIHsKLSAgICAgICAgICAgICAgICBQb3NpdGlvbiBzdGFydFBvc2l0aW9uT2ZSYW5n
ZVRvQmVSZXBsYWNlZCA9IG1fcmFuZ2VUb0JlUmVwbGFjZWRCeUNvcnJlY3Rpb24tPnN0YXJ0UG9z
aXRpb24oKTsKLSAgICAgICAgICAgICAgICBjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFw
aEFzUmFuZ2UtPnNldEVuZChzdGFydFBvc2l0aW9uT2ZSYW5nZVRvQmVSZXBsYWNlZC5jb250YWlu
ZXJOb2RlKCksIHN0YXJ0UG9zaXRpb25PZlJhbmdlVG9CZVJlcGxhY2VkLmNvbXB1dGVPZmZzZXRJ
bkNvbnRhaW5lck5vZGUoKSwgZWMpOwotICAgICAgICAgICAgICAgIGlmICghZWMpIHsKLSAgICAg
ICAgICAgICAgICAgICAgLy8gVGFrZSBub3RlIG9mIHRoZSBsb2NhdGlvbiBvZiBhdXRvY29ycmVj
dGlvbiBzbyB0aGF0IHdlIGNhbiBhZGQgbWFya2VyIGFmdGVyIHRoZSByZXBsYWNlbWVudCB0b29r
IHBsYWNlLgotICAgICAgICAgICAgICAgICAgICBpbnQgY29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5Q
YXJhZ3JhcGggPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKGNvcnJlY3Rpb25TdGFydE9mZnNl
dEluUGFyYWdyYXBoQXNSYW5nZS5nZXQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIFBvc2l0aW9u
IGNhcmV0UG9zaXRpb24gPSBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkuZW5kKCk7
Ci0gICAgICAgICAgICAgICAgICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2VUb0JlUmVwbGFjZWQgPSBt
X3JhbmdlVG9CZVJlcGxhY2VkQnlDb3JyZWN0aW9uLT5jbG9uZVJhbmdlKGVjKTsKLSAgICAgICAg
ICAgICAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb25Ub1JlcGxhY2UocmFuZ2VUb0Jl
UmVwbGFjZWQuZ2V0KCksIERPV05TVFJFQU0pOwotICAgICAgICAgICAgICAgICAgICBpZiAobV9m
cmFtZS0+c2VsZWN0aW9uKCktPnNob3VsZENoYW5nZVNlbGVjdGlvbihzZWxlY3Rpb25Ub1JlcGxh
Y2UpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2V0
U2VsZWN0aW9uKHNlbGVjdGlvblRvUmVwbGFjZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBy
ZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQobV9jb3JyZWN0aW9uUmVwbGFjZW1lbnRTdHJpbmcsIGZh
bHNlLCBmYWxzZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXJldFBvc2l0aW9uLm1vdmVU
b09mZnNldChjYXJldFBvc2l0aW9uLm9mZnNldEluQ29udGFpbmVyTm9kZSgpICsgbV9jb3JyZWN0
aW9uUmVwbGFjZW1lbnRTdHJpbmcubGVuZ3RoKCkgLSBtX3N0cmluZ1RvQmVSZXBsYWNlZEJ5Q29y
cmVjdGlvbi5sZW5ndGgoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBSZWZQdHI8UmFuZ2U+
IHJlcGxhY2VtZW50UmFuZ2UgPSBUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKHBhcmFncmFwaFJhbmdl
Q29udGFpbmluZ0NvcnJlY3Rpb24uZ2V0KCksIGNvcnJlY3Rpb25TdGFydE9mZnNldEluUGFyYWdy
YXBoLCBtX2NvcnJlY3Rpb25SZXBsYWNlbWVudFN0cmluZy5sZW5ndGgoKSk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICByZXBsYWNlbWVudFJhbmdlLT5zdGFydENvbnRhaW5lcigpLT5kb2N1bWVu
dCgpLT5tYXJrZXJzKCktPmFkZE1hcmtlcihyZXBsYWNlbWVudFJhbmdlLmdldCgpLCBEb2N1bWVu
dE1hcmtlcjo6UmVwbGFjZW1lbnQsIG1fY29ycmVjdGlvblJlcGxhY2VtZW50U3RyaW5nKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkt
PmRvY3VtZW50KCktPm1hcmtlcnMoKS0+YWRkTWFya2VyKHJlcGxhY2VtZW50UmFuZ2UuZ2V0KCks
IERvY3VtZW50TWFya2VyOjpDb3JyZWN0aW9uSW5kaWNhdG9yKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIG1fZnJhbWUtPnNlbGVjdGlvbigpLT5tb3ZlVG8oY2FyZXRQb3NpdGlvbiwgZmFsc2Up
OwotICAgICAgICAgICAgICAgICAgICAgICAgZGlkQXBwbHlDb3JyZWN0aW9uID0gdHJ1ZTsKLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgICAgICBtX3JhbmdlVG9CZVJlcGxhY2VkQnlDb3JyZWN0aW9uLmNsZWFyKCk7
Ci0gICAgfQorICAgIGFwcGx5Q29ycmVjdGlvblBhbmVsSW5mbyh0cnVlKTsKKyAgICBtX2NvcnJl
Y3Rpb25QYW5lbEluZm8ubV9yYW5nZVRvQmVSZXBsYWNlZC5jbGVhcigpOwogI2VuZGlmCiAKICAg
ICBUZXh0Q2hlY2tpbmdPcHRpb25zIHRleHRDaGVja2luZ09wdGlvbnMgPSAwOwpAQCAtMjI0Myw3
ICsyMjQ5LDcgQEAgdm9pZCBFZGl0b3I6Om1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcgogICAg
IH0KICAgICBjbGllbnQoKS0+Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgocGFyYWdyYXBoU3RyaW5nLmNo
YXJhY3RlcnMoKSwgcGFyYWdyYXBoTGVuZ3RoLCBjaGVja2luZ1R5cGVzLCByZXN1bHRzKTsKIAot
I2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZp
bmVkKEJVSUxESU5HX09OX0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVP
UEFSRCkKKyNpZiBTVVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMCiAgICAgLy8gSWYgdGhpcyBj
aGVja2luZyBpcyBvbmx5IGZvciBzaG93aW5nIGNvcnJlY3Rpb24gcGFuZWwsIHdlIHNob3VsZG4n
dCBib3RoZXIgdG8gbWFyayBtaXNzcGVsbGluZ3MuCiAgICAgaWYgKHNob3VsZFNob3dDb3JyZWN0
aW9uUGFuZWwpCiAgICAgICAgIHNob3VsZE1hcmtTcGVsbGluZyA9IGZhbHNlOwpAQCAtMjMyOCw3
ICsyMzM0LDcgQEAgdm9pZCBFZGl0b3I6Om1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcgogICAg
ICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2FuRWRpdCgpICYmIHNob3VsZEluc2VydFRleHQocmVz
dWx0LT5yZXBsYWNlbWVudCwgcmFuZ2VUb1JlcGxhY2UuZ2V0KCksIEVkaXRvckluc2VydEFjdGlv
blR5cGVkKSkgewogICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LT50eXBlID09IFRleHRD
aGVja2luZ1R5cGVDb3JyZWN0aW9uKQogICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGFjZWRT
dHJpbmcgPSBwbGFpblRleHQocmFuZ2VUb1JlcGxhY2UuZ2V0KCkpOwotI2lmIFBMQVRGT1JNKE1B
QykgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09O
X0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKKyNpZiBTVVBQ
T1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMCiAgICAgICAgICAgICAgICAgICAgIGlmIChzaG91bGRT
aG93Q29ycmVjdGlvblBhbmVsICYmIHJlc3VsdExvY2F0aW9uICsgcmVzdWx0TGVuZ3RoID09IHNw
ZWxsaW5nUmFuZ2VFbmRPZmZzZXQgJiYgcmVzdWx0LT50eXBlID09IFRleHRDaGVja2luZ1R5cGVD
b3JyZWN0aW9uKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBvbmx5IHNob3cgdGhl
IGNvcnJlY3Rpb24gcGFuZWwgb24gdGhlIGxhc3Qgd29yZC4KICAgICAgICAgICAgICAgICAgICAg
ICAgIFZlY3RvcjxGbG9hdFF1YWQ+IHRleHRRdWFkczsKQEAgLTIzMzcsMTAgKzIzNDMsMTEgQEAg
dm9pZCBFZGl0b3I6Om1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcgogICAgICAgICAgICAgICAg
ICAgICAgICAgRmxvYXRSZWN0IHRvdGFsQm91bmRpbmdCb3g7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBmb3IgKFZlY3RvcjxGbG9hdFF1YWQ+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHRleHRRdWFk
cy5iZWdpbigpOyBpdCA8IGVuZDsgKytpdCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
b3RhbEJvdW5kaW5nQm94LnVuaXRlKGl0LT5ib3VuZGluZ0JveCgpKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIG1fcmFuZ2VUb0JlUmVwbGFjZWRCeUNvcnJlY3Rpb24gPSByYW5nZVRvUmVwbGFj
ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fc3RyaW5nVG9CZVJlcGxhY2VkQnlDb3JyZWN0
aW9uID0gcmVwbGFjZWRTdHJpbmc7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX2NvcnJlY3Rp
b25SZXBsYWNlbWVudFN0cmluZyA9IHJlc3VsdC0+cmVwbGFjZW1lbnQ7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBjbGllbnQoKS0+c2hvd0NvcnJlY3Rpb25QYW5lbCh0b3RhbEJvdW5kaW5nQm94
LCBtX3N0cmluZ1RvQmVSZXBsYWNlZEJ5Q29ycmVjdGlvbiwgcmVzdWx0LT5yZXBsYWNlbWVudCwg
dGhpcyk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ubV9y
YW5nZVRvQmVSZXBsYWNlZCA9IHJhbmdlVG9SZXBsYWNlOworICAgICAgICAgICAgICAgICAgICAg
ICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLm1fcmVwbGFjZWRTdHJpbmcgPSByZXBsYWNlZFN0cmlu
ZzsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5tX3JlcGxh
Y2VtZW50U3RyaW5nID0gcmVzdWx0LT5yZXBsYWNlbWVudDsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5tX2lzQWN0aXZlID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNsaWVudCgpLT5zaG93Q29ycmVjdGlvblBhbmVsKG1fY29ycmVjdGlvblBh
bmVsSW5mby5tX3BhbmVsVHlwZSwgdG90YWxCb3VuZGluZ0JveCwgbV9jb3JyZWN0aW9uUGFuZWxJ
bmZvLm1fcmVwbGFjZWRTdHJpbmcsIHJlc3VsdC0+cmVwbGFjZW1lbnQsIHRoaXMpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgZG9SZXBsYWNlbWVudCA9IGZhbHNlOwogICAgICAgICAgICAgICAg
ICAgICB9CiAjZW5kaWYKQEAgLTIzNTQsNyArMjM2MSw3IEBAIHZvaWQgRWRpdG9yOjptYXJrQWxs
TWlzc3BlbGxpbmdzQW5kQmFkR3IKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBZGQg
YSBtYXJrZXIgc28gdGhhdCBjb3JyZWN0aW9ucyBjYW4gZWFzaWx5IGJlIHVuZG9uZSBhbmQgd29u
J3QgYmUgcmUtY29ycmVjdGVkLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZlB0cjxS
YW5nZT4gcmVwbGFjZWRSYW5nZSA9IFRleHRJdGVyYXRvcjo6c3VicmFuZ2UocGFyYWdyYXBoUmFu
Z2UuZ2V0KCksIHJlc3VsdExvY2F0aW9uLCByZXBsYWNlbWVudExlbmd0aCk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmVwbGFjZWRSYW5nZS0+c3RhcnRDb250YWluZXIoKS0+ZG9jdW1l
bnQoKS0+bWFya2VycygpLT5hZGRNYXJrZXIocmVwbGFjZWRSYW5nZS5nZXQoKSwgRG9jdW1lbnRN
YXJrZXI6OlJlcGxhY2VtZW50LCByZXBsYWNlZFN0cmluZyk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmVwbGFjZWRSYW5nZS0+c3RhcnRDb250YWluZXIoKS0+ZG9jdW1lbnQoKS0+bWFy
a2VycygpLT5hZGRNYXJrZXIocmVwbGFjZWRSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OkNv
cnJlY3Rpb25JbmRpY2F0b3IpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxhY2Vk
UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCktPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+YWRkTWFya2Vy
KHJlcGxhY2VkUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpDb3JyZWN0aW9uSW5kaWNhdG9y
LCByZXBsYWNlZFN0cmluZyk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CkBAIC0yNDE3LDYwICsyNDI0LDk3IEBAIHZv
aWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW0KIAogdm9pZCBFZGl0b3I6OmNv
cnJlY3Rpb25QYW5lbFRpbWVyRmlyZWQoVGltZXI8RWRpdG9yPiopCiB7Ci0jaWYgUExBVEZPUk0o
TUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdf
T05fTEVPUEFSRCkKLSAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbihmcmFtZSgpLT5zZWxl
Y3Rpb24oKS0+c2VsZWN0aW9uKCkpOwotICAgIFZpc2libGVQb3NpdGlvbiBzdGFydChzZWxlY3Rp
b24uc3RhcnQoKSwgc2VsZWN0aW9uLmFmZmluaXR5KCkpOwotICAgIFZpc2libGVQb3NpdGlvbiBw
ID0gc3RhcnRPZldvcmQoc3RhcnQsIExlZnRXb3JkSWZPbkJvdW5kYXJ5KTsKLSAgICBWaXNpYmxl
U2VsZWN0aW9uIGFkamFjZW50V29yZHMgPSBWaXNpYmxlU2VsZWN0aW9uKHAsIHN0YXJ0KTsKLSAg
ICBtYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKE1hcmtTcGVsbGluZyB8
IFNob3dDb3JyZWN0aW9uUGFuZWwsIGFkamFjZW50V29yZHMudG9Ob3JtYWxpemVkUmFuZ2UoKS5n
ZXQoKSwgMCk7CisjaWYgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTAorICAgIGlmIChtX2Nv
cnJlY3Rpb25QYW5lbEluZm8ubV9wYW5lbFR5cGUgPT0gQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFu
ZWxUeXBlQ29ycmVjdGlvbikgeworICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbihm
cmFtZSgpLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkpOworICAgICAgICBWaXNpYmxlUG9zaXRp
b24gc3RhcnQoc2VsZWN0aW9uLnN0YXJ0KCksIHNlbGVjdGlvbi5hZmZpbml0eSgpKTsKKyAgICAg
ICAgVmlzaWJsZVBvc2l0aW9uIHAgPSBzdGFydE9mV29yZChzdGFydCwgTGVmdFdvcmRJZk9uQm91
bmRhcnkpOworICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIGFkamFjZW50V29yZHMgPSBWaXNpYmxl
U2VsZWN0aW9uKHAsIHN0YXJ0KTsKKyAgICAgICAgbWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdy
YW1tYXJJblJhbmdlcyhNYXJrU3BlbGxpbmcgfCBTaG93Q29ycmVjdGlvblBhbmVsLCBhZGphY2Vu
dFdvcmRzLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIDApOworICAgIH0gZWxzZSB7CisgICAg
ICAgIFN0cmluZyBjdXJyZW50V29yZCA9IHBsYWluVGV4dChtX2NvcnJlY3Rpb25QYW5lbEluZm8u
bV9yYW5nZVRvQmVSZXBsYWNlZC5nZXQoKSk7CisgICAgICAgIFZlY3RvcjxGbG9hdFF1YWQ+IHRl
eHRRdWFkczsKKyAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLm1fcmFuZ2VUb0JlUmVwbGFj
ZWQtPmdldEJvcmRlckFuZFRleHRRdWFkcyh0ZXh0UXVhZHMpOworICAgICAgICBWZWN0b3I8Rmxv
YXRRdWFkPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gdGV4dFF1YWRzLmVuZCgpOworICAgICAgICBG
bG9hdFJlY3QgdG90YWxCb3VuZGluZ0JveDsKKyAgICAgICAgZm9yIChWZWN0b3I8RmxvYXRRdWFk
Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSB0ZXh0UXVhZHMuYmVnaW4oKTsgaXQgPCBlbmQ7ICsraXQp
CisgICAgICAgICAgICB0b3RhbEJvdW5kaW5nQm94LnVuaXRlKGl0LT5ib3VuZGluZ0JveCgpKTsK
KyAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLm1faXNBY3RpdmUgPSB0cnVlOworICAgICAg
ICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ubV9yZXBsYWNlZFN0cmluZyA9IGN1cnJlbnRXb3JkOwor
ICAgICAgICBjbGllbnQoKS0+c2hvd0NvcnJlY3Rpb25QYW5lbChtX2NvcnJlY3Rpb25QYW5lbElu
Zm8ubV9wYW5lbFR5cGUsIHRvdGFsQm91bmRpbmdCb3gsIG1fY29ycmVjdGlvblBhbmVsSW5mby5t
X3JlcGxhY2VkU3RyaW5nLCBtX2NvcnJlY3Rpb25QYW5lbEluZm8ubV9yZXBsYWNlbWVudFN0cmlu
ZywgdGhpcyk7CisgICAgfQogI2VuZGlmCiB9CiAKIHZvaWQgRWRpdG9yOjpoYW5kbGVSZWplY3Rl
ZENvcnJlY3Rpb24oKQogewotICAgIFJhbmdlKiByZXBsYWNlZFJhbmdlID0gbV9yYW5nZVRvQmVS
ZXBsYWNlZEJ5Q29ycmVjdGlvbi5nZXQoKTsKKyAgICBSYW5nZSogcmVwbGFjZWRSYW5nZSA9IG1f
Y29ycmVjdGlvblBhbmVsSW5mby5tX3JhbmdlVG9CZVJlcGxhY2VkLmdldCgpOwogICAgIGlmICgh
cmVwbGFjZWRSYW5nZSB8fCBtX2ZyYW1lLT5kb2N1bWVudCgpICE9IHJlcGxhY2VkUmFuZ2UtPm93
bmVyRG9jdW1lbnQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgcmVwbGFjZWRSYW5nZS0+c3Rh
cnRDb250YWluZXIoKS0+ZG9jdW1lbnQoKS0+bWFya2VycygpLT5hZGRNYXJrZXIocmVwbGFjZWRS
YW5nZSwgRG9jdW1lbnRNYXJrZXI6OlJlamVjdGVkQ29ycmVjdGlvbiwgbV9zdHJpbmdUb0JlUmVw
bGFjZWRCeUNvcnJlY3Rpb24pOwotICAgIG1fcmFuZ2VUb0JlUmVwbGFjZWRCeUNvcnJlY3Rpb24u
Y2xlYXIoKTsKKyAgICBpZiAobV9jb3JyZWN0aW9uUGFuZWxJbmZvLm1fcGFuZWxUeXBlID09IENv
cnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZUNvcnJlY3Rpb24pCisgICAgICAgIHJlcGxhY2Vk
UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCktPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+YWRkTWFya2Vy
KHJlcGxhY2VkUmFuZ2UsIERvY3VtZW50TWFya2VyOjpSZWplY3RlZENvcnJlY3Rpb24sIG1fY29y
cmVjdGlvblBhbmVsSW5mby5tX3JlcGxhY2VkU3RyaW5nKTsKKyAgICBlbHNlIHsKKyAgICAgICAg
bV9jb3JyZWN0aW9uUGFuZWxJbmZvLm1faXNBY3RpdmUgPSBmYWxzZTsKKyAgICAgICAgYXBwbHlD
b3JyZWN0aW9uUGFuZWxJbmZvKGZhbHNlKTsKKyAgICB9CisgICAgbV9jb3JyZWN0aW9uUGFuZWxJ
bmZvLm1fcmFuZ2VUb0JlUmVwbGFjZWQuY2xlYXIoKTsKIH0KIAotdm9pZCBFZGl0b3I6OnN0YXJ0
Q29ycmVjdGlvblBhbmVsVGltZXIoKQordm9pZCBFZGl0b3I6OnN0YXJ0Q29ycmVjdGlvblBhbmVs
VGltZXIoQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlIHR5cGUpCiB7Ci0jaWYgUExBVEZP
Uk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJ
TkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQotICAg
IHN0YXRpYyBjb25zdCBkb3VibGUgY29ycmVjdGlvblBhbmVsVGltZXJJbnRlcnZhbCA9IDAuMzsK
KyNpZiBTVVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMCisgICAgY29uc3QgZG91YmxlIGNvcnJl
Y3Rpb25QYW5lbFRpbWVySW50ZXJ2YWwgPSAwLjM7CiAgICAgaWYgKGlzQXV0b21hdGljU3BlbGxp
bmdDb3JyZWN0aW9uRW5hYmxlZCgpKSB7Ci0gICAgICAgIG1fcmFuZ2VUb0JlUmVwbGFjZWRCeUNv
cnJlY3Rpb24uY2xlYXIoKTsKKyAgICAgICAgaWYgKHR5cGUgPT0gQ29ycmVjdGlvblBhbmVsSW5m
bzo6UGFuZWxUeXBlQ29ycmVjdGlvbikKKyAgICAgICAgICAgIC8vIElmIHR5cGUgaXMgUGFuZWxU
eXBlUmV2ZXJzaW9uLCB0aGVuIHRoZSBuZXcgcmFuZ2UgaGFzIGJlZW4gc2V0LiBTbyB3ZSBzaG91
bGRuJ3QgY2xlYXIgaXQuCisgICAgICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ubV9yYW5n
ZVRvQmVSZXBsYWNlZC5jbGVhcigpOworICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ubV9w
YW5lbFR5cGUgPSB0eXBlOwogICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbFRpbWVyLnN0YXJ0T25l
U2hvdChjb3JyZWN0aW9uUGFuZWxUaW1lckludGVydmFsKTsKICAgICB9CisjZWxzZQorICAgIFVO
VVNFRF9QQVJBTSh0eXBlKTsKICNlbmRpZgogfQogCiB2b2lkIEVkaXRvcjo6c3RvcENvcnJlY3Rp
b25QYW5lbFRpbWVyKCkKIHsKLSNpZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVkKEJVSUxESU5H
X09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKSAmJiAhZGVmaW5lZChC
VUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCisjaWYgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5F
TAogICAgIG1fY29ycmVjdGlvblBhbmVsVGltZXIuc3RvcCgpOwogI2VuZGlmCiB9CiAKIHZvaWQg
RWRpdG9yOjpoYW5kbGVDYW5jZWxPcGVyYXRpb24oKQogewotI2lmIFBMQVRGT1JNKE1BQykgJiYg
IWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BB
UkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKKyNpZiBTVVBQT1JUX0FV
VE9DT1JSRUNUSU9OX1BBTkVMCisgICAgaWYgKCFtX2NvcnJlY3Rpb25QYW5lbEluZm8ubV9pc0Fj
dGl2ZSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5tX2lzQWN0
aXZlID0gZmFsc2U7CiAgICAgaWYgKGNsaWVudCgpKQotICAgICAgICBjbGllbnQoKS0+ZGlzbWlz
c0NvcnJlY3Rpb25QYW5lbChmYWxzZSk7CisgICAgICAgIGNsaWVudCgpLT5kaXNtaXNzQ29ycmVj
dGlvblBhbmVsKENvcnJlY3Rpb25XYXNSZWplY3RlZCk7CiAjZW5kaWYKIH0KIAogYm9vbCBFZGl0
b3I6OmlzU2hvd2luZ0NvcnJlY3Rpb25QYW5lbCgpCiB7Ci0jaWYgUExBVEZPUk0oTUFDKSAmJiAh
ZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFS
RCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQorI2lmIFNVUFBPUlRfQVVU
T0NPUlJFQ1RJT05fUEFORUwKICAgICBpZiAoY2xpZW50KCkpCiAgICAgICAgIHJldHVybiBjbGll
bnQoKS0+aXNTaG93aW5nQ29ycmVjdGlvblBhbmVsKCk7CiAjZW5kaWYKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKK3ZvaWQgRWRpdG9yOjpkaXNtaXNzQ29ycmVjdGlvblBhbmVsKENvcnJlY3Rpb25X
YXNSZWplY3RlZE9yTm90IGNvcnJlY3Rpb25XYXNSZWplY3RlZE9yTm90KQoreworI2lmIFNVUFBP
UlRfQVVUT0NPUlJFQ1RJT05fUEFORUwKKyAgICBpZiAoIW1fY29ycmVjdGlvblBhbmVsSW5mby5t
X2lzQWN0aXZlKQorICAgICAgICByZXR1cm47CisgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLm1f
aXNBY3RpdmUgPSBmYWxzZTsKKyAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ubV9yYW5nZVRvQmVS
ZXBsYWNlZC5jbGVhcigpOworICAgIGlmIChjbGllbnQoKSkKKyAgICAgICAgY2xpZW50KCktPmRp
c21pc3NDb3JyZWN0aW9uUGFuZWwoY29ycmVjdGlvbldhc1JlamVjdGVkT3JOb3QpOworI2VuZGlm
Cit9CiB2b2lkIEVkaXRvcjo6cmVtb3ZlU3BlbGxBbmRDb3JyZWN0aW9uTWFya2Vyc0Zyb21Xb3Jk
c1RvQmVFZGl0ZWQoYm9vbCBkb05vdFJlbW92ZUlmU2VsZWN0aW9uQXRXb3JkQm91bmRhcnkpCiB7
CiAgICAgLy8gV2Ugd2FudCB0byByZW1vdmUgdGhlIG1hcmtlcnMgZnJvbSBhIHdvcmQgaWYgYW4g
ZWRpdGluZyBjb21tYW5kIHdpbGwgY2hhbmdlIHRoZSB3b3JkLiBUaGlzIGNhbiBoYXBwZW4gaW4g
b25lIG9mCkBAIC0yNTY4LDYgKzI2MTIsNTQgQEAgdm9pZCBFZGl0b3I6OnJlbW92ZVNwZWxsQW5k
Q29ycmVjdGlvbk1hcgogICAgICAgICBkb2N1bWVudC0+bWFya2VycygpLT5yZW1vdmVNYXJrZXJz
KHBhaXJJdGVyYXRvci0+Zmlyc3QuZ2V0KCksIHBhaXJJdGVyYXRvci0+c2Vjb25kKTsKIH0KIAor
dm9pZCBFZGl0b3I6OmFwcGx5Q29ycmVjdGlvblBhbmVsSW5mbyhib29sIGFkZENvcnJlY3Rpb25J
bmRpY2F0b3JNYXJrZXIpCit7CisgICAgaWYgKCFtX2NvcnJlY3Rpb25QYW5lbEluZm8ubV9yYW5n
ZVRvQmVSZXBsYWNlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgRXhjZXB0aW9uQ29kZSBlYyA9
IDA7CisgICAgUmVmUHRyPFJhbmdlPiBwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9u
ID0gbV9jb3JyZWN0aW9uUGFuZWxJbmZvLm1fcmFuZ2VUb0JlUmVwbGFjZWQtPmNsb25lUmFuZ2Uo
ZWMpOworICAgIGlmIChlYykKKyAgICAgICAgcmV0dXJuOworCisgICAgc2V0U3RhcnQocGFyYWdy
YXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi5nZXQoKSwgc3RhcnRPZlBhcmFncmFwaChtX2Nv
cnJlY3Rpb25QYW5lbEluZm8ubV9yYW5nZVRvQmVSZXBsYWNlZC0+c3RhcnRQb3NpdGlvbigpKSk7
CisgICAgc2V0RW5kKHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24uZ2V0KCksIGVu
ZE9mUGFyYWdyYXBoKG1fY29ycmVjdGlvblBhbmVsSW5mby5tX3JhbmdlVG9CZVJlcGxhY2VkLT5l
bmRQb3NpdGlvbigpKSk7CisKKyAgICAvLyBBZnRlciB3ZSByZXBsYWNlIHRoZSB3b3JkIGF0IHJh
bmdlIG1fcmFuZ2VUb0JlUmVwbGFjZWQsIHdlIG5lZWQgdG8gYWRkIG1hcmtlcnMgdG8gdGhhdCBy
YW5nZS4KKyAgICAvLyBIb3dldmVyLCBvbmNlIHRoZSByZXBsYWNlbWVudCB0b29rIHBsYWNlLCB0
aGUgdmFsdWUgb2YgbV9yYW5nZVRvQmVSZXBsYWNlZCBpcyBub3QgdmFsaWQgYW55bW9yZS4KKyAg
ICAvLyBTbyBiZWZvcmUgd2UgY2Fycnkgb3V0IHRoZSByZXBsYWNlbWVudCwgd2UgbmVlZCB0byBz
dG9yZSB0aGUgc3RhcnQgcG9zaXRpb24gb2YgbV9yYW5nZVRvQmVSZXBsYWNlZAorICAgIC8vIHJl
bGF0aXZlIHRvIHRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgY29udGFpbmluZyBwYXJhZ3JhcGgu
IFdlIHVzZSBjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaAorICAgIC8vIHRvIHN0b3Jl
IHRoaXMgdmFsdWUuIEluIG9yZGVyIHRvIG9idGFpbiB0aGlzIG9mZnNldCwgd2UgbmVlZCB0byBm
aXJzdCBjcmVhdGUgYSByYW5nZQorICAgIC8vIHdoaWNoIHNwYW5zIGZyb20gdGhlIHN0YXJ0IG9m
IHBhcmFncmFwaCB0byB0aGUgc3RhcnQgcG9zaXRpb24gb2YgbV9yYW5nZVRvQmVSZXBsYWNlZC4K
KyAgICBSZWZQdHI8UmFuZ2U+IGNvcnJlY3Rpb25TdGFydE9mZnNldEluUGFyYWdyYXBoQXNSYW5n
ZSA9IFJhbmdlOjpjcmVhdGUocGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi0+c3Rh
cnRDb250YWluZXIoZWMpLT5kb2N1bWVudCgpLCBwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3Jy
ZWN0aW9uLT5zdGFydFBvc2l0aW9uKCksIHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rp
b24tPnN0YXJ0UG9zaXRpb24oKSk7CisgICAgaWYgKGVjKQorICAgICAgICByZXR1cm47CisKKyAg
ICBQb3NpdGlvbiBzdGFydFBvc2l0aW9uT2ZSYW5nZVRvQmVSZXBsYWNlZCA9IG1fY29ycmVjdGlv
blBhbmVsSW5mby5tX3JhbmdlVG9CZVJlcGxhY2VkLT5zdGFydFBvc2l0aW9uKCk7CisgICAgY29y
cmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGhBc1JhbmdlLT5zZXRFbmQoc3RhcnRQb3NpdGlv
bk9mUmFuZ2VUb0JlUmVwbGFjZWQuY29udGFpbmVyTm9kZSgpLCBzdGFydFBvc2l0aW9uT2ZSYW5n
ZVRvQmVSZXBsYWNlZC5jb21wdXRlT2Zmc2V0SW5Db250YWluZXJOb2RlKCksIGVjKTsKKyAgICBp
ZiAoZWMpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFRha2Ugbm90ZSBvZiB0aGUgbG9jYXRp
b24gb2YgYXV0b2NvcnJlY3Rpb24gc28gdGhhdCB3ZSBjYW4gYWRkIG1hcmtlciBhZnRlciB0aGUg
cmVwbGFjZW1lbnQgdG9vayBwbGFjZS4KKyAgICBpbnQgY29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5Q
YXJhZ3JhcGggPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKGNvcnJlY3Rpb25TdGFydE9mZnNl
dEluUGFyYWdyYXBoQXNSYW5nZS5nZXQoKSk7CisgICAgUG9zaXRpb24gY2FyZXRQb3NpdGlvbiA9
IG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKS5lbmQoKTsKKworICAgIC8vIENsb25l
IHRoZSByYW5nZSwgc2luY2UgdGhlIGNhbGxlciBvZiB0aGlzIG1ldGhvZCBtYXkgd2FudCB0byBr
ZWVwIHRoZSBvcmlnaW5hbCByYW5nZSBhcm91bmQuCisgICAgUmVmUHRyPFJhbmdlPiByYW5nZVRv
QmVSZXBsYWNlZCA9IG1fY29ycmVjdGlvblBhbmVsSW5mby5tX3JhbmdlVG9CZVJlcGxhY2VkLT5j
bG9uZVJhbmdlKGVjKTsKKyAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvblRvUmVwbGFjZShy
YW5nZVRvQmVSZXBsYWNlZC5nZXQoKSwgRE9XTlNUUkVBTSk7CisgICAgaWYgKG1fZnJhbWUtPnNl
bGVjdGlvbigpLT5zaG91bGRDaGFuZ2VTZWxlY3Rpb24oc2VsZWN0aW9uVG9SZXBsYWNlKSkgewor
ICAgICAgICBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2V0U2VsZWN0aW9uKHNlbGVjdGlvblRvUmVw
bGFjZSk7CisgICAgICAgIHJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dChtX2NvcnJlY3Rpb25QYW5l
bEluZm8ubV9yZXBsYWNlbWVudFN0cmluZywgZmFsc2UsIGZhbHNlKTsKKyAgICAgICAgY2FyZXRQ
b3NpdGlvbi5tb3ZlVG9PZmZzZXQoY2FyZXRQb3NpdGlvbi5vZmZzZXRJbkNvbnRhaW5lck5vZGUo
KSArIG1fY29ycmVjdGlvblBhbmVsSW5mby5tX3JlcGxhY2VtZW50U3RyaW5nLmxlbmd0aCgpIC0g
bV9jb3JyZWN0aW9uUGFuZWxJbmZvLm1fcmVwbGFjZWRTdHJpbmcubGVuZ3RoKCkpOworICAgICAg
ICBzZXRFbmQocGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi5nZXQoKSwgZW5kT2ZQ
YXJhZ3JhcGgoY2FyZXRQb3NpdGlvbikpOworICAgICAgICBSZWZQdHI8UmFuZ2U+IHJlcGxhY2Vt
ZW50UmFuZ2UgPSBUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKHBhcmFncmFwaFJhbmdlQ29udGFpbmlu
Z0NvcnJlY3Rpb24uZ2V0KCksIGNvcnJlY3Rpb25TdGFydE9mZnNldEluUGFyYWdyYXBoLCBtX2Nv
cnJlY3Rpb25QYW5lbEluZm8ubV9yZXBsYWNlbWVudFN0cmluZy5sZW5ndGgoKSk7CisgICAgICAg
IHJlcGxhY2VtZW50UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCktPmRvY3VtZW50KCktPm1hcmtlcnMo
KS0+YWRkTWFya2VyKHJlcGxhY2VtZW50UmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpSZXBs
YWNlbWVudCwgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLm1fcmVwbGFjZW1lbnRTdHJpbmcpOworICAg
ICAgICBpZiAoYWRkQ29ycmVjdGlvbkluZGljYXRvck1hcmtlcikKKyAgICAgICAgICAgIHJlcGxh
Y2VtZW50UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCktPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+YWRk
TWFya2VyKHJlcGxhY2VtZW50UmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpDb3JyZWN0aW9u
SW5kaWNhdG9yLCBtX2NvcnJlY3Rpb25QYW5lbEluZm8ubV9yZXBsYWNlZFN0cmluZyk7CisgICAg
ICAgIG1fZnJhbWUtPnNlbGVjdGlvbigpLT5tb3ZlVG8oY2FyZXRQb3NpdGlvbiwgZmFsc2UpOwor
ICAgIH0KK30KKwogUGFzc1JlZlB0cjxSYW5nZT4gRWRpdG9yOjpyYW5nZUZvclBvaW50KGNvbnN0
IEludFBvaW50JiB3aW5kb3dQb2ludCkKIHsKICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBtX2Zy
YW1lLT5kb2N1bWVudEF0UG9pbnQod2luZG93UG9pbnQpOwpAQCAtMjgzNCw3ICsyOTI2LDcgQEAg
dm9pZCBFZGl0b3I6OmNoYW5nZVNlbGVjdGlvbkFmdGVyQ29tbWFuZAogICAgIGlmIChuZXdTZWxl
Y3Rpb24uc3RhcnQoKS5pc09ycGhhbigpIHx8IG5ld1NlbGVjdGlvbi5lbmQoKS5pc09ycGhhbigp
KQogICAgICAgICByZXR1cm47CiAKLSNpZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVkKEJVSUxE
SU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKSAmJiAhZGVmaW5l
ZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCisjaWYgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9Q
QU5FTAogICAgIC8vIENoZWNrIHRvIHNlZSBpZiB0aGUgY29tbWFuZCBpbnRyb2R1Y2VkIHBhcmFn
cmFwaCBzZXBhcmF0b3IuIElmIGl0IGRpZCwgd2UgcmVtb3ZlIGV4aXN0aW5nIGF1dG9jb3JyZWN0
aW9uIHVuZGVybGluZXMuCiAgICAgLy8gVGhpcyBpcyBpbiBjb25zaXN0ZW5jeSB3aXRoIHRoZSBi
ZWhhdmlvciBpbiBBcHBLaXQKICAgICBpZiAoIWluU2FtZVBhcmFncmFwaChtX2ZyYW1lLT5zZWxl
Y3Rpb24oKS0+c2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCksIG5ld1NlbGVjdGlvbi52aXNpYmxl
RW5kKCkpKQpJbmRleDogV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvZWRpdGluZy9FZGl0b3IuaAkocmV2aXNpb24gNzEzMDApCisrKyBXZWJDb3JlL2VkaXRp
bmcvRWRpdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDIzICsyOCwxMyBAQAogCiAjaW5jbHVk
ZSAiQ2xpcGJvYXJkQWNjZXNzUG9saWN5LmgiCiAjaW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRl
ICJDb3JyZWN0aW9uUGFuZWxJbmZvLmgiCiAjaW5jbHVkZSAiRWRpdEFjdGlvbi5oIgogI2luY2x1
ZGUgIkVkaXRpbmdCZWhhdmlvci5oIgogI2luY2x1ZGUgIkVkaXRvckRlbGV0ZUFjdGlvbi5oIgog
I2luY2x1ZGUgIkVkaXRvckluc2VydEFjdGlvbi5oIgogI2luY2x1ZGUgIlNlbGVjdGlvbkNvbnRy
b2xsZXIuaCIKIAotI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fVElH
RVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5H
X09OX1NOT1dfTEVPUEFSRCkKLS8vIFNvbWUgcGxhdGZvcm1zIHByb3ZpZGUgVUkgZm9yIHN1Z2dl
c3RpbmcgYXV0b2NvcnJlY3Rpb24uCi0jZGVmaW5lIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFO
RUwgMQotLy8gU29tZSBwbGF0Zm9ybXMgdXNlIHNwZWxsaW5nIGFuZCBhdXRvY29ycmVjdGlvbiBt
YXJrZXJzIHRvIHByb3ZpZGUgdmlzdWFsIGN1ZS4KLS8vIE9uIHN1Y2ggcGxhdGZvcm0sIGlmIHdv
cmQgd2l0aCBtYXJrZXIgaXMgZWRpdGVkLCB3ZSBuZWVkIHRvIHJlbW92ZSB0aGUgbWFya2VyLgot
I2RlZmluZSBSRU1PVkVfTUFSS0VSU19VUE9OX0VESVRJTkcgMQotI2Vsc2UKLSNkZWZpbmUgU1VQ
UE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTCAwCi0jZGVmaW5lIFJFTU9WRV9NQVJLRVJTX1VQT05f
RURJVElORyAwCi0jZW5kaWYgLyogI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoQlVJTERJ
TkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpICYmICFkZWZpbmVk
KEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkgKi8KLQogI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRl
ZmluZWQoX19PQkpDX18pCiBjbGFzcyBOU0RpY3Rpb25hcnk7CiB0eXBlZGVmIGludCBOU1dyaXRp
bmdEaXJlY3Rpb247CkBAIC0zMjMsNyArMzEzLDcgQEAgcHVibGljOgogICAgIHZvaWQgYWRkVG9L
aWxsUmluZyhSYW5nZSosIGJvb2wgcHJlcGVuZCk7CiAKICAgICB2b2lkIGhhbmRsZUNhbmNlbE9w
ZXJhdGlvbigpOwotICAgIHZvaWQgc3RhcnRDb3JyZWN0aW9uUGFuZWxUaW1lcigpOworICAgIHZv
aWQgc3RhcnRDb3JyZWN0aW9uUGFuZWxUaW1lcihDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5
cGUpOwogICAgIHZvaWQgaGFuZGxlUmVqZWN0ZWRDb3JyZWN0aW9uKCk7CiAgICAgYm9vbCBpc1No
b3dpbmdDb3JyZWN0aW9uUGFuZWwoKTsKIApAQCAtMzg5LDkgKzM3OSw3IEBAIHByaXZhdGU6CiAg
ICAgYm9vbCBtX3Nob3VsZFN0YXJ0TmV3S2lsbFJpbmdTZXF1ZW5jZTsKICAgICBib29sIG1fc2hv
dWxkU3R5bGVXaXRoQ1NTOwogICAgIE93blB0cjxLaWxsUmluZz4gbV9raWxsUmluZzsKLSAgICBS
ZWZQdHI8UmFuZ2U+IG1fcmFuZ2VUb0JlUmVwbGFjZWRCeUNvcnJlY3Rpb247Ci0gICAgU3RyaW5n
IG1fc3RyaW5nVG9CZVJlcGxhY2VkQnlDb3JyZWN0aW9uOwotICAgIFN0cmluZyBtX2NvcnJlY3Rp
b25SZXBsYWNlbWVudFN0cmluZzsKKyAgICBDb3JyZWN0aW9uUGFuZWxJbmZvIG1fY29ycmVjdGlv
blBhbmVsSW5mbzsKICAgICBUaW1lcjxFZGl0b3I+IG1fY29ycmVjdGlvblBhbmVsVGltZXI7CiAg
ICAgVmlzaWJsZVNlbGVjdGlvbiBtX21hcms7CiAgICAgYm9vbCBtX2FyZU1hcmtlZFRleHRNYXRj
aGVzSGlnaGxpZ2h0ZWQ7CkBAIC00MTgsNiArNDA2LDggQEAgcHJpdmF0ZToKICAgICB2b2lkIGNv
cnJlY3Rpb25QYW5lbFRpbWVyRmlyZWQoVGltZXI8RWRpdG9yPiopOwogICAgIE5vZGUqIGZpbmRF
dmVudFRhcmdldEZyb21TZWxlY3Rpb24oKSBjb25zdDsKICAgICB2b2lkIHN0b3BDb3JyZWN0aW9u
UGFuZWxUaW1lcigpOworICAgIHZvaWQgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChDb3JyZWN0aW9u
V2FzUmVqZWN0ZWRPck5vdCk7CisgICAgdm9pZCBhcHBseUNvcnJlY3Rpb25QYW5lbEluZm8oYm9v
bCBhZGRDb3JyZWN0aW9uSW5kaWNhdG9yTWFya2VyKTsKIH07CiAKIGlubGluZSB2b2lkIEVkaXRv
cjo6c2V0U3RhcnROZXdLaWxsUmluZ1NlcXVlbmNlKGJvb2wgZmxhZykKSW5kZXg6IFdlYkNvcmUv
ZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcv
RWRpdG9yQ29tbWFuZC5jcHAJKHJldmlzaW9uIDcxMzAwKQorKysgV2ViQ29yZS9lZGl0aW5nL0Vk
aXRvckNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDc0LDcgKzEwNzQsNyBAQCBzdGF0
aWMgYm9vbCBleGVjdXRlWWFua0FuZFNlbGVjdChGcmFtZSogCiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLSNpZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAh
ZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9X
X0xFT1BBUkQpCisjaWYgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTAogc3RhdGljIGJvb2wg
ZXhlY3V0ZUNhbmNlbE9wZXJhdGlvbihGcmFtZSogZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFu
ZFNvdXJjZSwgY29uc3QgU3RyaW5nJikKIHsKICAgICBmcmFtZS0+ZWRpdG9yKCktPmhhbmRsZUNh
bmNlbE9wZXJhdGlvbigpOwpAQCAtMTEyNCw3ICsxMTI0LDcgQEAgc3RhdGljIGJvb2wgc3VwcG9y
dGVkUGFzdGUoRnJhbWUqIGZyYW1lLAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotI2lmIFBMQVRG
T1JNKE1BQykgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxE
SU5HX09OX0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKKyNp
ZiBTVVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMCiBzdGF0aWMgYm9vbCBzdXBwb3J0ZWREaXNt
aXNzQ29ycmVjdGlvblBhbmVsKEZyYW1lKiBmcmFtZSwgRWRpdG9yQ29tbWFuZFNvdXJjZSBzb3Vy
Y2UpCiB7CiAgICAgcmV0dXJuIHN1cHBvcnRlZEZyb21NZW51T3JLZXlCaW5kaW5nKGZyYW1lLCBz
b3VyY2UpICYmIGZyYW1lLT5lZGl0b3IoKS0+aXNTaG93aW5nQ29ycmVjdGlvblBhbmVsKCk7CkBA
IC0xNTA2LDcgKzE1MDYsNyBAQCBzdGF0aWMgY29uc3QgQ29tbWFuZE1hcCYgY3JlYXRlQ29tbWFu
ZE1hCiAgICAgICAgIHsgIlVuc2VsZWN0IiwgeyBleGVjdXRlVW5zZWxlY3QsIHN1cHBvcnRlZCwg
ZW5hYmxlZFZpc2libGVTZWxlY3Rpb24sIHN0YXRlTm9uZSwgdmFsdWVOdWxsLCBub3RUZXh0SW5z
ZXJ0aW9uLCBkb05vdEFsbG93RXhlY3V0aW9uV2hlbkRpc2FibGVkIH0gfSwKICAgICAgICAgeyAi
WWFuayIsIHsgZXhlY3V0ZVlhbmssIHN1cHBvcnRlZEZyb21NZW51T3JLZXlCaW5kaW5nLCBlbmFi
bGVkSW5FZGl0YWJsZVRleHQsIHN0YXRlTm9uZSwgdmFsdWVOdWxsLCBub3RUZXh0SW5zZXJ0aW9u
LCBkb05vdEFsbG93RXhlY3V0aW9uV2hlbkRpc2FibGVkIH0gfSwKICAgICAgICAgeyAiWWFua0Fu
ZFNlbGVjdCIsIHsgZXhlY3V0ZVlhbmtBbmRTZWxlY3QsIHN1cHBvcnRlZEZyb21NZW51T3JLZXlC
aW5kaW5nLCBlbmFibGVkSW5FZGl0YWJsZVRleHQsIHN0YXRlTm9uZSwgdmFsdWVOdWxsLCBub3RU
ZXh0SW5zZXJ0aW9uLCBkb05vdEFsbG93RXhlY3V0aW9uV2hlbkRpc2FibGVkIH0gfSwKLSNpZiBQ
TEFURk9STShNQUMpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChC
VUlMRElOR19PTl9MRU9QQVJEKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQp
CisjaWYgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTAogICAgICAgICB7ICJDYW5jZWxPcGVy
YXRpb24iLCB7IGV4ZWN1dGVDYW5jZWxPcGVyYXRpb24sIHN1cHBvcnRlZERpc21pc3NDb3JyZWN0
aW9uUGFuZWwsIGVuYWJsZWRJbkVkaXRhYmxlVGV4dCwgc3RhdGVOb25lLCB2YWx1ZU51bGwsIG5v
dFRleHRJbnNlcnRpb24sIGRvTm90QWxsb3dFeGVjdXRpb25XaGVuRGlzYWJsZWQgfSB9LAogI2Vu
ZGlmCiAgICAgfTsKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAJKHJldmlzaW9uIDcx
MzAwKQorKysgV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMTEsOSArMzExLDkgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjptYXJrTWlzc3BlbGxpbmdz
QWZ0ZQogICAgICAgICBWaXNpYmxlUG9zaXRpb24gcDIgPSBzdGFydE9mV29yZChzdGFydCwgTGVm
dFdvcmRJZk9uQm91bmRhcnkpOwogICAgICAgICBpZiAocDEgIT0gcDIpCiAgICAgICAgICAgICBk
b2N1bWVudCgpLT5mcmFtZSgpLT5lZGl0b3IoKS0+bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5n
VG9Qb3NpdGlvbihwMSk7Ci0jaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19P
Tl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJ
TERJTkdfT05fU05PV19MRU9QQVJEKQorI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwK
ICAgICAgICAgZWxzZSBpZiAoY29tbWFuZFR5cGUgPT0gVHlwaW5nQ29tbWFuZDo6SW5zZXJ0VGV4
dCkKLSAgICAgICAgICAgIGRvY3VtZW50KCktPmZyYW1lKCktPmVkaXRvcigpLT5zdGFydENvcnJl
Y3Rpb25QYW5lbFRpbWVyKCk7CisgICAgICAgICAgICBkb2N1bWVudCgpLT5mcmFtZSgpLT5lZGl0
b3IoKS0+c3RhcnRDb3JyZWN0aW9uUGFuZWxUaW1lcihDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5l
bFR5cGVDb3JyZWN0aW9uKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGNvbW1hbmRUeXBlKTsK
ICNlbmRpZgpJbmRleDogV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgJKHJldmlzaW9uIDcxMzAwKQorKysgV2Vi
Q29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3NSw5ICs0NzUs
OSBAQCBwdWJsaWM6CiAjaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9U
SUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkKICAgICB2aXJ0dWFsIHZvaWQg
Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgoY29uc3QgVUNoYXIqLCBpbnQsIHVpbnQ2NF90LCBWZWN0b3I8
VGV4dENoZWNraW5nUmVzdWx0PiYpIHsgfTsKICNlbmRpZgotI2lmIFBMQVRGT1JNKE1BQykgJiYg
IWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BB
UkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKLSAgICB2aXJ0dWFsIHZv
aWQgc2hvd0NvcnJlY3Rpb25QYW5lbChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBTdHJpbmcmLCBj
b25zdCBTdHJpbmcmLCBFZGl0b3IqKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGlzbWlzc0NvcnJl
Y3Rpb25QYW5lbChib29sKSB7IH0KKyNpZiBTVVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMCisg
ICAgdmlydHVhbCB2b2lkIHNob3dDb3JyZWN0aW9uUGFuZWwoQ29ycmVjdGlvblBhbmVsSW5mbzo6
UGFuZWxUeXBlLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcm
LCBFZGl0b3IqKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChD
b3JyZWN0aW9uV2FzUmVqZWN0ZWRPck5vdCkgeyB9CiAgICAgdmlydHVhbCBib29sIGlzU2hvd2lu
Z0NvcnJlY3Rpb25QYW5lbCgpIHsgcmV0dXJuIGZhbHNlOyB9CiAjZW5kaWYKICAgICB2aXJ0dWFs
IHZvaWQgdXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKGNvbnN0IFN0cmluZyYsIGNv
bnN0IEdyYW1tYXJEZXRhaWwmKSB7IH0KSW5kZXg6IFdlYkNvcmUvbWFudWFsLXRlc3RzL2F1dG9j
b3JyZWN0aW9uL2NvbnRpbnVlLXR5cGluZy10by1kaXNtaXNzLXJldmVyc2lvbi5odG1sCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvbWFudWFsLXRlc3RzL2F1dG9jb3JyZWN0aW9uL2NvbnRpbnVlLXR5
cGluZy10by1kaXNtaXNzLXJldmVyc2lvbi5odG1sCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9t
YW51YWwtdGVzdHMvYXV0b2NvcnJlY3Rpb24vY29udGludWUtdHlwaW5nLXRvLWRpc21pc3MtcmV2
ZXJzaW9uLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDkgQEAKKzxodG1sPgorPGhlYWQ+
CisKKzxzdHlsZT4KKy5lZGl0aW5nIHsKKyAgICBib3JkZXI6IDJweCBzb2xpZCByZWQ7CisgICAg
cGFkZGluZzogMTJweDsKKyAgICBmb250LXNpemU6IDI0cHg7Cit9Cis8L3N0eWxlPgorPHNjcmlw
dCBzcmM9Li4vLi4vLi4vTGF5b3V0VGVzdHMvZWRpdGluZy9lZGl0aW5nLmpzIGxhbmd1YWdlPSJK
YXZhU2NyaXB0IiB0eXBlPSJ0ZXh0L0phdmFTY3JpcHQiID48L3NjcmlwdD4KKworPHNjcmlwdD4K
K2Z1bmN0aW9uIGVkaXRpbmdUZXN0KCkgeworICAgIHR5cGVDaGFyYWN0ZXJDb21tYW5kKCd0Jyk7
CisgICAgdHlwZUNoYXJhY3RlckNvbW1hbmQoJ2gnKTsKKyAgICB0eXBlQ2hhcmFjdGVyQ29tbWFu
ZCgnZScpOworICAgIHR5cGVDaGFyYWN0ZXJDb21tYW5kKCcgJyk7CisgICAgdHlwZUNoYXJhY3Rl
ckNvbW1hbmQoJ20nKTsKKyAgICB0eXBlQ2hhcmFjdGVyQ29tbWFuZCgnZScpOworICAgIHR5cGVD
aGFyYWN0ZXJDb21tYW5kKCdzJyk7CisgICAgdHlwZUNoYXJhY3RlckNvbW1hbmQoJ2EnKTsKKyAg
ICB0eXBlQ2hhcmFjdGVyQ29tbWFuZCgnZycpOworICAgIHR5cGVDaGFyYWN0ZXJDb21tYW5kKCdl
Jyk7CisgICAgdHlwZUNoYXJhY3RlckNvbW1hbmQoJyAnKTsKKyAgICBleGVjTW92ZVNlbGVjdGlv
bkJhY2t3YXJkQnlDaGFyYWN0ZXJDb21tYW5kKCk7Cit9CisKKzwvc2NyaXB0PgorCis8dGl0bGU+
Q29udGludWUgVHlwaW5nIHRvIERpc21pc3MgUmV2ZXJzaW9uIFBhbmVsIFRlc3Q8L3RpdGxlPgor
PC9oZWFkPgorPGJvZHk+Cis8ZGl2PjxwPlRoaXMgdGVzdCB2ZXJpZmllcyB0aGF0LCBhZnRlciBy
ZXZlcnNpb24gcGFuZWwgaXMgc2hvd24sIGNvbnRpbnVlIHR5cGluZyB3aWxsIGRpc21pc3MgdGhl
IHJldmVyc2lvbiBwYW5lbC48L3A+Cis8cD5BZnRlciBzZWVpbmcgdGhlIHJldmVyc2lvbiBwYW5l
bCwgc3RhcnQgdHlwaW5nIChleGNsdWRpbmcgd2hpdGVzcGFjZSkuIFlvdSBzaG91bGQgc2VlIHRo
ZSBwYW5lbCBiZWluZworZGlzbWlzc2VkIG9uY2UgeW91IHN0YXJ0IHR5cGluZy48L3A+Cis8cCAg
c3R5bGU9ImNvbG9yOmdyZWVuIj5Ob3RlLCB0aGlzIHRlc3QgY2FuIGZhaWwgZHVlIHRvIHVzZXIg
c3BlY2lmaWMgc3BlbGwgY2hlY2tpbmcgZGF0YS4gSWYgdGhlIHVzZXIgaGFzIHByZXZpb3VzbHkg
CitmcmVxdWVudGx5IHJldmVydCAnbWVzc2FnZScgdG8gJ21lc2FnZScuIFRvIGZpeCB0aGlzLCBy
ZW1vdmUgYWxsIGZpbGVzIGluIH4vTGlicmFyeS9TcGVsbGluZywgdGhlbiBraWxsIEFwcGxlU3Bl
bGwuc2VydmljZSBwcm9jZXNzLjwvcD4KKzxkaXYgY29udGVudGVkaXRhYmxlIGlkPSJyb290IiBj
bGFzcz0iZWRpdGluZyI+Cis8c3BhbiBpZD0idGVzdCI+PC9zcGFuPgorPC9kaXY+CisKKworPHNj
cmlwdD4KK3J1bkVkaXRpbmdUZXN0KCk7Cis8L3NjcmlwdD4KKworPC9ib2R5PgorPC9odG1sPgpJ
bmRleDogV2ViQ29yZS9tYW51YWwtdGVzdHMvYXV0b2NvcnJlY3Rpb24vZGVsZXRlLXRvLWRpc21p
c3MtcmV2ZXJzaW9uLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9tYW51YWwtdGVzdHMvYXV0
b2NvcnJlY3Rpb24vZGVsZXRlLXRvLWRpc21pc3MtcmV2ZXJzaW9uLmh0bWwJKHJldmlzaW9uIDAp
CisrKyBXZWJDb3JlL21hbnVhbC10ZXN0cy9hdXRvY29ycmVjdGlvbi9kZWxldGUtdG8tZGlzbWlz
cy1yZXZlcnNpb24uaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0OSBAQAorPGh0bWw+Cis8
aGVhZD4KKworPHN0eWxlPgorLmVkaXRpbmcgeworICAgIGJvcmRlcjogMnB4IHNvbGlkIHJlZDsK
KyAgICBwYWRkaW5nOiAxMnB4OworICAgIGZvbnQtc2l6ZTogMjRweDsKK30KKzwvc3R5bGU+Cis8
c2NyaXB0IHNyYz0uLi8uLi8uLi9MYXlvdXRUZXN0cy9lZGl0aW5nL2VkaXRpbmcuanMgbGFuZ3Vh
Z2U9IkphdmFTY3JpcHQiIHR5cGU9InRleHQvSmF2YVNjcmlwdCIgPjwvc2NyaXB0PgorCis8c2Ny
aXB0PgorZnVuY3Rpb24gZWRpdGluZ1Rlc3QoKSB7CisgICAgdHlwZUNoYXJhY3RlckNvbW1hbmQo
J3QnKTsKKyAgICB0eXBlQ2hhcmFjdGVyQ29tbWFuZCgnaCcpOworICAgIHR5cGVDaGFyYWN0ZXJD
b21tYW5kKCdlJyk7CisgICAgdHlwZUNoYXJhY3RlckNvbW1hbmQoJyAnKTsKKyAgICB0eXBlQ2hh
cmFjdGVyQ29tbWFuZCgnbScpOworICAgIHR5cGVDaGFyYWN0ZXJDb21tYW5kKCdlJyk7CisgICAg
dHlwZUNoYXJhY3RlckNvbW1hbmQoJ3MnKTsKKyAgICB0eXBlQ2hhcmFjdGVyQ29tbWFuZCgnYScp
OworICAgIHR5cGVDaGFyYWN0ZXJDb21tYW5kKCdnJyk7CisgICAgdHlwZUNoYXJhY3RlckNvbW1h
bmQoJ2UnKTsKKyAgICB0eXBlQ2hhcmFjdGVyQ29tbWFuZCgnICcpOworICAgIGV4ZWNNb3ZlU2Vs
ZWN0aW9uQmFja3dhcmRCeUNoYXJhY3RlckNvbW1hbmQoKTsKK30KKworPC9zY3JpcHQ+CisKKzx0
aXRsZT5EZWxldGUgdG8gRGlzbWlzcyBSZXZlcnNpb24gUGFuZWwgVGVzdDwvdGl0bGU+Cis8L2hl
YWQ+Cis8Ym9keT4KKzxkaXY+PHA+VGhpcyB0ZXN0IHZlcmlmaWVzIHRoYXQsIGFmdGVyIHJldmVy
c2lvbiBwYW5lbCBpcyBzaG93biwgY29udGludWUgZGVsZXRpbmcgdGhlIHdvcmQgd2lsbCBkaXNt
aXNzIHRoZSByZXZlcnNpb24gcGFuZWwuPC9wPgorPHA+QWZ0ZXIgc2VlaW5nIHRoZSByZXZlcnNp
b24gcGFuZWwsIHN0YXJ0IGRlbGV0aW5nIHRoZSBjb3JyZWN0ZWQgd29yZCBjaGFyYWN0ZXIgYnkg
Y2hhcmFjdGVyLiBZb3Ugc2hvdWxkIHNlZSB0aGUgcGFuZWwgYmVpbmcKK2Rpc21pc3NlZCBvbmNl
IHlvdSBzdGFydCBkZWxldGluZy48L3A+Cis8cCAgc3R5bGU9ImNvbG9yOmdyZWVuIj5Ob3RlLCB0
aGlzIHRlc3QgY2FuIGZhaWwgZHVlIHRvIHVzZXIgc3BlY2lmaWMgc3BlbGwgY2hlY2tpbmcgZGF0
YS4gSWYgdGhlIHVzZXIgaGFzIHByZXZpb3VzbHkgCitmcmVxdWVudGx5IHJldmVydCAnbWVzc2Fn
ZScgdG8gJ21lc2FnZScuIFRvIGZpeCB0aGlzLCByZW1vdmUgYWxsIGZpbGVzIGluIH4vTGlicmFy
eS9TcGVsbGluZywgdGhlbiBraWxsIEFwcGxlU3BlbGwuc2VydmljZSBwcm9jZXNzLjwvcD4KKzxk
aXYgY29udGVudGVkaXRhYmxlIGlkPSJyb290IiBjbGFzcz0iZWRpdGluZyI+Cis8c3BhbiBpZD0i
dGVzdCI+PC9zcGFuPgorPC9kaXY+CisKKworPHNjcmlwdD4KK3J1bkVkaXRpbmdUZXN0KCk7Cis8
L3NjcmlwdD4KKworPC9ib2R5PgorPC9odG1sPgpJbmRleDogV2ViQ29yZS9tYW51YWwtdGVzdHMv
YXV0b2NvcnJlY3Rpb24vZGVsZXRlLXRvLWVuZC1vZi13b3JkLXRvLXNob3ctcmV2ZXJzaW9uLmh0
bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9tYW51YWwtdGVzdHMvYXV0b2NvcnJlY3Rpb24vZGVs
ZXRlLXRvLWVuZC1vZi13b3JkLXRvLXNob3ctcmV2ZXJzaW9uLmh0bWwJKHJldmlzaW9uIDApCisr
KyBXZWJDb3JlL21hbnVhbC10ZXN0cy9hdXRvY29ycmVjdGlvbi9kZWxldGUtdG8tZW5kLW9mLXdv
cmQtdG8tc2hvdy1yZXZlcnNpb24uaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0OSBAQAor
PGh0bWw+Cis8aGVhZD4KKworPHN0eWxlPgorLmVkaXRpbmcgeworICAgIGJvcmRlcjogMnB4IHNv
bGlkIHJlZDsKKyAgICBwYWRkaW5nOiAxMnB4OworICAgIGZvbnQtc2l6ZTogMjRweDsKK30KKzwv
c3R5bGU+Cis8c2NyaXB0IHNyYz0uLi8uLi8uLi9MYXlvdXRUZXN0cy9lZGl0aW5nL2VkaXRpbmcu
anMgbGFuZ3VhZ2U9IkphdmFTY3JpcHQiIHR5cGU9InRleHQvSmF2YVNjcmlwdCIgPjwvc2NyaXB0
PgorCis8c2NyaXB0PgorZnVuY3Rpb24gZWRpdGluZ1Rlc3QoKSB7CisgICAgdHlwZUNoYXJhY3Rl
ckNvbW1hbmQoJ3QnKTsKKyAgICB0eXBlQ2hhcmFjdGVyQ29tbWFuZCgnaCcpOworICAgIHR5cGVD
aGFyYWN0ZXJDb21tYW5kKCdlJyk7CisgICAgdHlwZUNoYXJhY3RlckNvbW1hbmQoJyAnKTsKKyAg
ICB0eXBlQ2hhcmFjdGVyQ29tbWFuZCgnbScpOworICAgIHR5cGVDaGFyYWN0ZXJDb21tYW5kKCdl
Jyk7CisgICAgdHlwZUNoYXJhY3RlckNvbW1hbmQoJ3MnKTsKKyAgICB0eXBlQ2hhcmFjdGVyQ29t
bWFuZCgnYScpOworICAgIHR5cGVDaGFyYWN0ZXJDb21tYW5kKCdnJyk7CisgICAgdHlwZUNoYXJh
Y3RlckNvbW1hbmQoJ2UnKTsKKyAgICB0eXBlQ2hhcmFjdGVyQ29tbWFuZCgnICcpOworICAgIGV4
ZWNEZWxldGVDb21tYW5kKCk7Cit9CisKKzwvc2NyaXB0PgorCis8dGl0bGU+RGVsZXRlIHRvIEVu
ZCBvZiBXb3JkIHRvIFNob3cgUmV2ZXJzaW9uIFBhbmVsIFRlc3Q8L3RpdGxlPgorPC9oZWFkPgor
PGJvZHk+Cis8ZGl2PjxwPlRoaXMgdGVzdCB2ZXJpZmllcyB0aGF0IHJldmVyc2lvbiBwYW5lbCBp
cyBzaG93biB3aGVuIHVzZXIgbW92ZXMgY2FycmV0IHRvIHByZXZpb3VzbHkgY29ycmVjdGVkIHdv
cmQgdXNpbmcgZGVsZXRlIGtleS48L3A+Cis8cD5BZnRlciBzZWVpbmcgdGhlIHJldmVyc2lvbiBw
YW5lbCwgcHJlc3MgRVNDIGtleSwgdGhlbiBzcGFjZSBrZXkuIFlvdSBzaG91bGQgc2VlIHRoZSBw
aHJhc2UgInRoZSBtZXNhZ2UiIAord2hlcmUgIm1lc2FnZSIgaGFzIHJlZCBtaXNwZWxsIHVuZGVy
bGluZS4gPC9wPgorPHAgIHN0eWxlPSJjb2xvcjpncmVlbiI+Tm90ZSwgdGhpcyB0ZXN0IGNhbiBm
YWlsIGR1ZSB0byB1c2VyIHNwZWNpZmljIHNwZWxsIGNoZWNraW5nIGRhdGEuIElmIHRoZSB1c2Vy
IGhhcyBwcmV2aW91c2x5IAorZnJlcXVlbnRseSByZXZlcnQgJ21lc3NhZ2UnIHRvICdtZXNhZ2Un
LiBUbyBmaXggdGhpcywgcmVtb3ZlIGFsbCBmaWxlcyBpbiB+L0xpYnJhcnkvU3BlbGxpbmcsIHRo
ZW4ga2lsbCBBcHBsZVNwZWxsLnNlcnZpY2UgcHJvY2Vzcy48L3A+Cis8ZGl2IGNvbnRlbnRlZGl0
YWJsZSBpZD0icm9vdCIgY2xhc3M9ImVkaXRpbmciPgorPHNwYW4gaWQ9InRlc3QiPjwvc3Bhbj4K
KzwvZGl2PgorCisKKzxzY3JpcHQ+CitydW5FZGl0aW5nVGVzdCgpOworPC9zY3JpcHQ+CisKKzwv
Ym9keT4KKzwvaHRtbD4KSW5kZXg6IFdlYkNvcmUvbWFudWFsLXRlc3RzL2F1dG9jb3JyZWN0aW9u
L21vdmUtdG8tZW5kLW9mLXdvcmQtdG8tc2hvdy1yZXZlcnNpb24uaHRtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL21hbnVhbC10ZXN0cy9hdXRvY29ycmVjdGlvbi9tb3ZlLXRvLWVuZC1vZi13b3Jk
LXRvLXNob3ctcmV2ZXJzaW9uLmh0bWwJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL21hbnVhbC10
ZXN0cy9hdXRvY29ycmVjdGlvbi9tb3ZlLXRvLWVuZC1vZi13b3JkLXRvLXNob3ctcmV2ZXJzaW9u
Lmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDkgQEAKKzxodG1sPgorPGhlYWQ+CisKKzxz
dHlsZT4KKy5lZGl0aW5nIHsKKyAgICBib3JkZXI6IDJweCBzb2xpZCByZWQ7CisgICAgcGFkZGlu
ZzogMTJweDsKKyAgICBmb250LXNpemU6IDI0cHg7Cit9Cis8L3N0eWxlPgorPHNjcmlwdCBzcmM9
Li4vLi4vLi4vTGF5b3V0VGVzdHMvZWRpdGluZy9lZGl0aW5nLmpzIGxhbmd1YWdlPSJKYXZhU2Ny
aXB0IiB0eXBlPSJ0ZXh0L0phdmFTY3JpcHQiID48L3NjcmlwdD4KKworPHNjcmlwdD4KK2Z1bmN0
aW9uIGVkaXRpbmdUZXN0KCkgeworICAgIHR5cGVDaGFyYWN0ZXJDb21tYW5kKCd0Jyk7CisgICAg
dHlwZUNoYXJhY3RlckNvbW1hbmQoJ2gnKTsKKyAgICB0eXBlQ2hhcmFjdGVyQ29tbWFuZCgnZScp
OworICAgIHR5cGVDaGFyYWN0ZXJDb21tYW5kKCcgJyk7CisgICAgdHlwZUNoYXJhY3RlckNvbW1h
bmQoJ20nKTsKKyAgICB0eXBlQ2hhcmFjdGVyQ29tbWFuZCgnZScpOworICAgIHR5cGVDaGFyYWN0
ZXJDb21tYW5kKCdzJyk7CisgICAgdHlwZUNoYXJhY3RlckNvbW1hbmQoJ2EnKTsKKyAgICB0eXBl
Q2hhcmFjdGVyQ29tbWFuZCgnZycpOworICAgIHR5cGVDaGFyYWN0ZXJDb21tYW5kKCdlJyk7Cisg
ICAgdHlwZUNoYXJhY3RlckNvbW1hbmQoJyAnKTsKKyAgICBleGVjTW92ZVNlbGVjdGlvbkJhY2t3
YXJkQnlDaGFyYWN0ZXJDb21tYW5kKCk7Cit9CisKKzwvc2NyaXB0PgorCis8dGl0bGU+TW92ZSB0
byBFbmQgb2YgV29yZCB0byBTaG93IFJldmVyc2lvbiBQYW5lbCBUZXN0PC90aXRsZT4KKzwvaGVh
ZD4KKzxib2R5PgorPGRpdj48cD5UaGlzIHRlc3QgdmVyaWZpZXMgdGhhdCByZXZlcnNpb24gcGFu
ZWwgaXMgc2hvd24gd2hlbiB1c2VyIG1vdmVzIGNhcnJldCB0byBwcmV2aW91c2x5IGNvcnJlY3Rl
ZCB3b3JkPC9wPgorPHA+QWZ0ZXIgc2VlaW5nIHRoZSByZXZlcnNpb24gcGFuZWwsIHByZXNzIEVT
QyBrZXksIHRoZW4gc3BhY2Uga2V5LiBZb3Ugc2hvdWxkIHNlZSB0aGUgcGhyYXNlICJ0aGUgbWVz
YWdlIiAKK3doZXJlICJtZXNhZ2UiIGhhcyByZWQgbWlzcGVsbCB1bmRlcmxpbmUuIDwvcD4KKzxw
ICBzdHlsZT0iY29sb3I6Z3JlZW4iPk5vdGUsIHRoaXMgdGVzdCBjYW4gZmFpbCBkdWUgdG8gdXNl
ciBzcGVjaWZpYyBzcGVsbCBjaGVja2luZyBkYXRhLiBJZiB0aGUgdXNlciBoYXMgcHJldmlvdXNs
eSAKK2ZyZXF1ZW50bHkgcmV2ZXJ0ICdtZXNzYWdlJyB0byAnbWVzYWdlJy4gVG8gZml4IHRoaXMs
IHJlbW92ZSBhbGwgZmlsZXMgaW4gfi9MaWJyYXJ5L1NwZWxsaW5nLCB0aGVuIGtpbGwgQXBwbGVT
cGVsbC5zZXJ2aWNlIHByb2Nlc3MuPC9wPgorPGRpdiBjb250ZW50ZWRpdGFibGUgaWQ9InJvb3Qi
IGNsYXNzPSJlZGl0aW5nIj4KKzxzcGFuIGlkPSJ0ZXN0Ij48L3NwYW4+Cis8L2Rpdj4KKworCis8
c2NyaXB0PgorcnVuRWRpdGluZ1Rlc3QoKTsKKzwvc2NyaXB0PgorCis8L2JvZHk+Cis8L2h0bWw+
CkluZGV4OiBXZWJDb3JlL21hbnVhbC10ZXN0cy9hdXRvY29ycmVjdGlvbi90eXBlLXdoaXRlc3Bh
Y2UtdG8tZGlzbWlzcy1yZXZlcnNpb24uaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL21hbnVh
bC10ZXN0cy9hdXRvY29ycmVjdGlvbi90eXBlLXdoaXRlc3BhY2UtdG8tZGlzbWlzcy1yZXZlcnNp
b24uaHRtbAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvbWFudWFsLXRlc3RzL2F1dG9jb3JyZWN0
aW9uL3R5cGUtd2hpdGVzcGFjZS10by1kaXNtaXNzLXJldmVyc2lvbi5odG1sCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDUwIEBACis8aHRtbD4KKzxoZWFkPgorCis8c3R5bGU+CisuZWRpdGluZyB7
CisgICAgYm9yZGVyOiAycHggc29saWQgcmVkOworICAgIHBhZGRpbmc6IDEycHg7CisgICAgZm9u
dC1zaXplOiAyNHB4OworfQorPC9zdHlsZT4KKzxzY3JpcHQgc3JjPS4uLy4uLy4uL0xheW91dFRl
c3RzL2VkaXRpbmcvZWRpdGluZy5qcyBsYW5ndWFnZT0iSmF2YVNjcmlwdCIgdHlwZT0idGV4dC9K
YXZhU2NyaXB0IiA+PC9zY3JpcHQ+CisKKzxzY3JpcHQ+CitmdW5jdGlvbiBlZGl0aW5nVGVzdCgp
IHsKKyAgICB0eXBlQ2hhcmFjdGVyQ29tbWFuZCgndCcpOworICAgIHR5cGVDaGFyYWN0ZXJDb21t
YW5kKCdoJyk7CisgICAgdHlwZUNoYXJhY3RlckNvbW1hbmQoJ2UnKTsKKyAgICB0eXBlQ2hhcmFj
dGVyQ29tbWFuZCgnICcpOworICAgIHR5cGVDaGFyYWN0ZXJDb21tYW5kKCdtJyk7CisgICAgdHlw
ZUNoYXJhY3RlckNvbW1hbmQoJ2UnKTsKKyAgICB0eXBlQ2hhcmFjdGVyQ29tbWFuZCgncycpOwor
ICAgIHR5cGVDaGFyYWN0ZXJDb21tYW5kKCdhJyk7CisgICAgdHlwZUNoYXJhY3RlckNvbW1hbmQo
J2cnKTsKKyAgICB0eXBlQ2hhcmFjdGVyQ29tbWFuZCgnZScpOworICAgIHR5cGVDaGFyYWN0ZXJD
b21tYW5kKCcgJyk7CisgICAgZXhlY01vdmVTZWxlY3Rpb25CYWNrd2FyZEJ5Q2hhcmFjdGVyQ29t
bWFuZCgpOworfQorCis8L3NjcmlwdD4KKworPHRpdGxlPlR5cGUgV2hpdGVzcGFjZSB0byBEaXNt
aXNzIFJldmVyc2lvbiBQYW5lbCBUZXN0PC90aXRsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdj48
cD5UaGlzIHRlc3QgdmVyaWZpZXMgdGhhdCwgYWZ0ZXIgcmV2ZXJzaW9uIHBhbmVsIGlzIHNob3du
LCB0eXBpbmcgd2hpdGVzcGFjZSB3aWxsIGRpc21pc3MgdGhlIHJldmVyc2lvbiBwYW5lbC4KK0l0
IGFsc28ga2VlcCB0aGUgZXhpc3RpbmcgYXV0b2NvcnJlY3Rpb24gdW5kZXJsaW5lLjwvcD4KKzxw
PkFmdGVyIHNlZWluZyB0aGUgcmV2ZXJzaW9uIHBhbmVsLCB0eXBlIHdoaXRlc3BhY2UuIFlvdSBz
aG91bGQgc2VlIHRoZSBwYW5lbCBiZWluZyBkaXNtaXNzZWQgb25jZSB5b3Ugc3RhcnQgdHlwaW5n
LgorSG93ZXZlciwgdGhlIHdvcmQgIm1lc3NhZ2UiIHN0aWxsIGhhcyBibHVlIHVuZGVybGluZS48
L3A+Cis8cCAgc3R5bGU9ImNvbG9yOmdyZWVuIj5Ob3RlLCB0aGlzIHRlc3QgY2FuIGZhaWwgZHVl
IHRvIHVzZXIgc3BlY2lmaWMgc3BlbGwgY2hlY2tpbmcgZGF0YS4gSWYgdGhlIHVzZXIgaGFzIHBy
ZXZpb3VzbHkgCitmcmVxdWVudGx5IHJldmVydCAnbWVzc2FnZScgdG8gJ21lc2FnZScuIFRvIGZp
eCB0aGlzLCByZW1vdmUgYWxsIGZpbGVzIGluIH4vTGlicmFyeS9TcGVsbGluZywgdGhlbiBraWxs
IEFwcGxlU3BlbGwuc2VydmljZSBwcm9jZXNzLjwvcD4KKzxkaXYgY29udGVudGVkaXRhYmxlIGlk
PSJyb290IiBjbGFzcz0iZWRpdGluZyI+Cis8c3BhbiBpZD0idGVzdCI+PC9zcGFuPgorPC9kaXY+
CisKKworPHNjcmlwdD4KK3J1bkVkaXRpbmdUZXN0KCk7Cis8L3NjcmlwdD4KKworPC9ib2R5Pgor
PC9odG1sPgpJbmRleDogV2ViQ29yZS9wYWdlL0VkaXRvckNsaWVudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGFnZS9FZGl0b3JDbGllbnQuaAkocmV2aXNpb24gNzEzMDApCisrKyBXZWJDb3Jl
L3BhZ2UvRWRpdG9yQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNp
Zm5kZWYgRWRpdG9yQ2xpZW50X2gKICNkZWZpbmUgRWRpdG9yQ2xpZW50X2gKIAorI2luY2x1ZGUg
IkNvcnJlY3Rpb25QYW5lbEluZm8uaCIKICNpbmNsdWRlICJFZGl0b3JJbnNlcnRBY3Rpb24uaCIK
ICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgpAQCAt
MTg4LDkgKzE4OSw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgY2hlY2tUZXh0T2ZQYXJh
Z3JhcGgoY29uc3QgVUNoYXIqIHRleHQsIGludCBsZW5ndGgsIHVpbnQ2NF90IGNoZWNraW5nVHlw
ZXMsIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+JiByZXN1bHRzKSA9IDA7CiAjZW5kaWYKIAot
I2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZp
bmVkKEJVSUxESU5HX09OX0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVP
UEFSRCkKLSAgICB2aXJ0dWFsIHZvaWQgc2hvd0NvcnJlY3Rpb25QYW5lbChjb25zdCBGbG9hdFJl
Y3QmIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0
cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNtZW50U3RyaW5nLCBFZGl0b3IqKSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIGRpc21pc3NDb3JyZWN0aW9uUGFuZWwoYm9vbCBjb3JyZWN0aW9uQWNjZXB0
ZWQpID0gMDsKKyNpZiBTVVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMCisgICAgdmlydHVhbCB2
b2lkIHNob3dDb3JyZWN0aW9uUGFuZWwoQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlLCBj
b25zdCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5n
JiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNtZW50U3RyaW5nLCBFZGl0b3Iq
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRpc21pc3NDb3JyZWN0aW9uUGFuZWwoQ29ycmVjdGlv
bldhc1JlamVjdGVkT3JOb3QpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgaXNTaG93aW5nQ29ycmVj
dGlvblBhbmVsKCkgPSAwOwogI2VuZGlmCiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvbWFjL0dyYXBoaWNzQ29udGV4dE1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHRNYWMubW0JKHJldmlzaW9uIDcxMzAwKQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0TWFjLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC0xNDcsNiArMTQ3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRy
YXdMaW5lRm9yVGV4dENoZQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICNpZiBQTEFU
Rk9STShNQUMpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlM
RElOR19PTl9MRU9QQVJEKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCisg
ICAgICAgIC8vIFRvIHN1cHBvcnQgY29ycmVjdGlvbiBwYW5lbC4KICAgICAgICAgY2FzZSBUZXh0
Q2hlY2tpbmdSZXBsYWNlbWVudExpbmVTdHlsZToKICAgICAgICAgewogICAgICAgICAgICAgLy8g
Q29uc3RhbnRzIGZvciBzcGVsbGluZyBwYXR0ZXJuIGNvbG9yLgpJbmRleDogV2ViS2l0Mi9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDcxMzAwKQor
KysgV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOCBAQAorMjAx
MC0xMS0wMyAgSmlhIFB1ICA8anB1QGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICByZXZlcnNpb24gYnViYmxlIGluIFdlYlZpZXdzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NzYzMAorICAg
ICAgICA8cmRhcjovL3Byb2JsZW0vODUzMDk2MD4KKworICAgICAgICBUaGlzIHBhdGNoIGlzIHRv
IGFkZCByZXZlcnNpb24gdG8gY29ycmVjdGlvbiBwYW5lbC4gUGxlYXNlIHNlZSBXZWJDb3JlL0No
YW5nZUxvZyBmb3IgZGV0YWlsLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9XZWJFZGl0b3JDbGllbnQuaDogQWRvcHRlZCBuZXcgc2lnbmF0dXJlIG9mIGJhc2UgY2xhc3Mg
bWV0aG9kLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dlYkVkaXRv
ckNsaWVudE1hYy5tbTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OldlYkVkaXRvckNsaWVudDo6
c2hvd0NvcnJlY3Rpb25QYW5lbCk6CisgICAgICAgIChXZWJLaXQ6OldlYkVkaXRvckNsaWVudDo6
ZGlzbWlzc0NvcnJlY3Rpb25QYW5lbCk6CisKIDIwMTAtMTEtMDMgIEFsaWNlIExpdSAgPGFsaWNl
LmxpdUBhcHBsZS5jb20+CiAKICAgICAgICAgRml4IGNsYW5nKysgYnVpbGQgCkluZGV4OiBXZWJL
aXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5o
CShyZXZpc2lvbiA3MTMwMCkKKysrIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9X
ZWJFZGl0b3JDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTM0LDggKzEzNCw4IEBAIHByaXZh
dGU6CiAgICAgdmlydHVhbCB2b2lkIHdpbGxTZXRJbnB1dE1ldGhvZFN0YXRlKCk7CiAgICAgdmly
dHVhbCB2b2lkIHNldElucHV0TWV0aG9kU3RhdGUoYm9vbCBlbmFibGVkKTsKICNpZiBQTEFURk9S
TShNQUMpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElO
R19PTl9MRU9QQVJEKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCi0gICAg
dmlydHVhbCB2b2lkIHNob3dDb3JyZWN0aW9uUGFuZWwoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0
JiBib3VuZGluZ0JveE9mUmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJp
bmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcsIFdlYkNvcmU6OkVkaXRvciopOwot
ICAgIHZpcnR1YWwgdm9pZCBkaXNtaXNzQ29ycmVjdGlvblBhbmVsKGJvb2wgY29ycmVjdGlvbkFj
Y2VwdGVkKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2hvd0NvcnJlY3Rpb25QYW5lbChXZWJDb3JlOjpD
b3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGUsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYg
Ym91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5n
LCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nLCBXZWJDb3JlOjpFZGl0b3IqKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChXZWJDb3JlOjpDb3JyZWN0aW9u
V2FzUmVqZWN0ZWRPck5vdCk7CiAgICAgdmlydHVhbCBib29sIGlzU2hvd2luZ0NvcnJlY3Rpb25Q
YW5lbCgpOwogI2VuZGlmCiAgICAgV2ViUGFnZSogbV9wYWdlOwpJbmRleDogV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJFZGl0b3JDbGllbnRNYWMubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJFZGl0b3JDbGll
bnRNYWMubW0JKHJldmlzaW9uIDcxMzAwKQorKysgV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L21hYy9XZWJFZGl0b3JDbGllbnRNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTIyMywx
MiArMjIzLDEyIEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpjaGVja1RleHRPZlBhcmFncmEKICNl
bmRpZgogCiAjaWYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxE
SU5HX09OX0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKLXZv
aWQgV2ViRWRpdG9yQ2xpZW50OjpzaG93Q29ycmVjdGlvblBhbmVsKGNvbnN0IFdlYkNvcmU6OkZs
b2F0UmVjdCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBXVEY6OlN0cmluZyYg
cmVwbGFjZWRTdHJpbmcsIGNvbnN0IFdURjo6U3RyaW5nJiByZXBsYWNlbWVudFN0cmluZywgV2Vi
Q29yZTo6RWRpdG9yKikKK3ZvaWQgV2ViRWRpdG9yQ2xpZW50OjpzaG93Q29ycmVjdGlvblBhbmVs
KFdlYkNvcmU6OkNvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZSB0eXBlLCBjb25zdCBXZWJD
b3JlOjpGbG9hdFJlY3QmIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgV1RGOjpT
dHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBXVEY6OlN0cmluZyYgcmVwbGFjZW1lbnRTdHJp
bmcsIFdlYkNvcmU6OkVkaXRvciopCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9p
ZCBXZWJFZGl0b3JDbGllbnQ6OmRpc21pc3NDb3JyZWN0aW9uUGFuZWwoYm9vbCBjb3JyZWN0aW9u
QWNjZXB0ZWQpCit2b2lkIFdlYkVkaXRvckNsaWVudDo6ZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChX
ZWJDb3JlOjpDb3JyZWN0aW9uV2FzUmVqZWN0ZWRPck5vdCkKIHsKICAgICBub3RJbXBsZW1lbnRl
ZCgpOwogfQpJbmRleDogV2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0
L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDcxMzAwKQorKysgV2ViS2l0L21hYy9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMyBAQAorMjAxMC0xMS0wMyAgSmlhIFB1ICA8anB1
QGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICByZXZlcnNpb24gYnViYmxlIGluIFdlYlZpZXdzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NzYzMAorICAgICAgICA8cmRhcjovL3Byb2JsZW0v
ODUzMDk2MD4KKworICAgICAgICBUaGlzIHBhdGNoIGlzIHRvIGFkZCByZXZlcnNpb24gdG8gY29y
cmVjdGlvbiBwYW5lbC4gUGxlYXNlIHNlZSBXZWJDb3JlL0NoYW5nZUxvZyBmb3IgZGV0YWlsLgor
CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lmg6IEFkb3B0ZWQgbmV3
IHNpZ25hdHVyZSBvZiBiYXNlIGNsYXNzIG1ldGhvZC4KKyAgICAgICAgKiBXZWJDb3JlU3VwcG9y
dC9XZWJFZGl0b3JDbGllbnQubW06IEFkb3B0ZWQgbmV3IHNpZ25hdHVyZSBvZiBiYXNlIGNsYXNz
IG1ldGhvZC4gQW5kIGNvZGUKKyAgICAgICAgICBjaGFuZ2UgdG8gdXNlIG5ldyByZXZlcnNpb24g
QVBJIGluIEFwcEtpdC4KKyAgICAgICAgKFdlYkVkaXRvckNsaWVudDo6V2ViRWRpdG9yQ2xpZW50
KToKKyAgICAgICAgKFdlYkVkaXRvckNsaWVudDo6fldlYkVkaXRvckNsaWVudCk6CisgICAgICAg
IChXZWJFZGl0b3JDbGllbnQ6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24pOgorICAgICAgICAo
V2ViRWRpdG9yQ2xpZW50OjpzaG93Q29ycmVjdGlvblBhbmVsKToKKyAgICAgICAgKFdlYkVkaXRv
ckNsaWVudDo6ZGlzbWlzc0NvcnJlY3Rpb25QYW5lbCk6CisgICAgICAgIChXZWJFZGl0b3JDbGll
bnQ6OmlzU2hvd2luZ0NvcnJlY3Rpb25QYW5lbCk6CisKIDIwMTAtMTEtMDIgIERhbmllbCBCYXRl
cyAgPGRiYXRlc0ByaW0uY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGguCklu
ZGV4OiBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmgJKHJldmlz
aW9uIDcxMzAwKQorKysgV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtMTMzLDggKzEzMyw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IHZvaWQgd2lsbFNldElucHV0TWV0aG9kU3RhdGUoKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0SW5w
dXRNZXRob2RTdGF0ZShib29sIGVuYWJsZWQpOwogI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJ
R0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKSAmJiAhZGVmaW5lZChCVUlMRElO
R19PTl9TTk9XX0xFT1BBUkQpCi0gICAgdmlydHVhbCB2b2lkIHNob3dDb3JyZWN0aW9uUGFuZWwo
Y29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBib3VuZGluZ0JveE9mUmVwbGFjZWRTdHJpbmcsIGNv
bnN0IFdURjo6U3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgV1RGOjpTdHJpbmcmIHJlcGxh
Y2VtZW50U3RyaW5nLCBXZWJDb3JlOjpFZGl0b3IqKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlzbWlz
c0NvcnJlY3Rpb25QYW5lbChib29sIGNvcnJlY3Rpb25BY2NlcHRlZCk7CisgICAgdmlydHVhbCB2
b2lkIHNob3dDb3JyZWN0aW9uUGFuZWwoV2ViQ29yZTo6Q29ycmVjdGlvblBhbmVsSW5mbzo6UGFu
ZWxUeXBlLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0
cmluZywgY29uc3QgV1RGOjpTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBXVEY6OlN0cmlu
ZyYgcmVwbGFjZW1lbnRTdHJpbmcsIFdlYkNvcmU6OkVkaXRvciopOworICAgIHZpcnR1YWwgdm9p
ZCBkaXNtaXNzQ29ycmVjdGlvblBhbmVsKFdlYkNvcmU6OkNvcnJlY3Rpb25XYXNSZWplY3RlZE9y
Tm90KTsKICAgICB2aXJ0dWFsIGJvb2wgaXNTaG93aW5nQ29ycmVjdGlvblBhbmVsKCk7CiAjZW5k
aWYKIHByaXZhdGU6CkBAIC0xNDYsNiArMTQ2LDYgQEAgcHJpdmF0ZToKICAgICBib29sIG1faGF2
ZVVuZG9SZWRvT3BlcmF0aW9uczsKIAogI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAm
JiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9T
Tk9XX0xFT1BBUkQpCi0gICAgTlNJbnRlZ2VyIG1fY29ycmVjdGlvblBhbmVsVGFnOworICAgIEJP
T0wgbV9jb3JyZWN0aW9uUGFuZWxJc1Nob3duOwogI2VuZGlmCiB9OwpJbmRleDogV2ViS2l0L21h
Yy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0
L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW0JKHJldmlzaW9uIDcxMzAwKQor
KysgV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTE4Niw3ICsxODYsNyBAQCBXZWJFZGl0b3JDbGllbnQ6OldlYkVkaXRvckNsaWVu
dChXZWJWaWV3CiAgICAgLCBtX3VuZG9UYXJnZXQoW1tbV2ViRWRpdG9yVW5kb1RhcmdldCBhbGxv
Y10gaW5pdF0gYXV0b3JlbGVhc2VdKQogICAgICwgbV9oYXZlVW5kb1JlZG9PcGVyYXRpb25zKGZh
bHNlKQogI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElO
R19PTl9MRU9QQVJEKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCi0gICAg
LCBtX2NvcnJlY3Rpb25QYW5lbFRhZyhJbnZhbGlkQ29ycmVjdGlvblBhbmVsVGFnKQorICAgICwg
bV9jb3JyZWN0aW9uUGFuZWxJc1Nob3duKGZhbHNlKQogI2VuZGlmCiB7CiB9CkBAIC0xOTQsNyAr
MTk0LDcgQEAgV2ViRWRpdG9yQ2xpZW50OjpXZWJFZGl0b3JDbGllbnQoV2ViVmlldwogV2ViRWRp
dG9yQ2xpZW50Ojp+V2ViRWRpdG9yQ2xpZW50KCkKIHsKICNpZiAhZGVmaW5lZChCVUlMRElOR19P
Tl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJ
TERJTkdfT05fU05PV19MRU9QQVJEKQotICAgIGRpc21pc3NDb3JyZWN0aW9uUGFuZWwodHJ1ZSk7
CisgICAgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChXZWJDb3JlOjpDb3JyZWN0aW9uV2FzTm90UmVq
ZWN0ZWQpOwogI2VuZGlmCiB9CiAKQEAgLTMxMCwxMCArMzEwLDYgQEAgdm9pZCBXZWJFZGl0b3JD
bGllbnQ6OnJlc3BvbmRUb0NoYW5nZWRTZQogewogICAgIFttX3dlYlZpZXcgX3NlbGVjdGlvbkNo
YW5nZWRdOwogCi0jaWYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJV
SUxESU5HX09OX0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkK
LSAgICBkaXNtaXNzQ29ycmVjdGlvblBhbmVsKHRydWUpOwotI2VuZGlmCi0KICAgICAvLyBGSVhN
RTogVGhpcyBxdWlyayBpcyBuZWVkZWQgZHVlIHRvIDxyZGFyOi8vcHJvYmxlbS81MDA5NjI1PiAt
IFdlIGNhbiBwaGFzZSBpdCBvdXQgb25jZSBBcGVydHVyZSBjYW4gYWRvcHQgdGhlIG5ldyBiZWhh
dmlvciBvbiB0aGVpciBlbmQKICAgICBpZiAoIVdlYktpdExpbmtlZE9uT3JBZnRlcihXRUJLSVRf
RklSU1RfVkVSU0lPTl9XSVRIT1VUX0FQRVJUVVJFX1FVSVJLKSAmJiBbW1tOU0J1bmRsZSBtYWlu
QnVuZGxlXSBidW5kbGVJZGVudGlmaWVyXSBpc0VxdWFsVG9TdHJpbmc6QCJjb20uYXBwbGUuQXBl
cnR1cmUiXSkKICAgICAgICAgcmV0dXJuOwpAQCAtODYwLDggKzg1Niw4IEBAIHZvaWQgV2ViRWRp
dG9yQ2xpZW50Ojp1cGRhdGVTcGVsbGluZ1VJV2kKIH0KIAogI2lmICFkZWZpbmVkKEJVSUxESU5H
X09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKSAmJiAhZGVmaW5lZChC
VUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCi12b2lkIFdlYkVkaXRvckNsaWVudDo6c2hvd0NvcnJl
Y3Rpb25QYW5lbChjb25zdCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywg
Y29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0
cmluZywgRWRpdG9yKiBlZGl0b3IpIHsKLSAgICBkaXNtaXNzQ29ycmVjdGlvblBhbmVsKHRydWUp
Owordm9pZCBXZWJFZGl0b3JDbGllbnQ6OnNob3dDb3JyZWN0aW9uUGFuZWwoV2ViQ29yZTo6Q29y
cmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlIHBhbmVsVHlwZSwgY29uc3QgRmxvYXRSZWN0JiBi
b3VuZGluZ0JveE9mUmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcs
IGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcsIEVkaXRvciogZWRpdG9yKSB7CisgICAg
ZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChXZWJDb3JlOjpDb3JyZWN0aW9uV2FzTm90UmVqZWN0ZWQp
OwogCiAgICAgTlNSZWN0IGJvdW5kaW5nQm94QXNOU1JlY3QgPSBib3VuZGluZ0JveE9mUmVwbGFj
ZWRTdHJpbmc7CiAgICAgTlNSZWN0IHdlYlZpZXdGcmFtZSA9IG1fd2ViVmlldy5mcmFtZTsKQEAg
LTg3MSwyNSArODY3LDMzIEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpzaG93Q29ycmVjdGlvblBh
bmUKICAgICBOU1N0cmluZyAqcmVwbGFjZWRTdHJpbmdBc05TU3RyaW5nID0gcmVwbGFjZWRTdHJp
bmc7CiAgICAgTlNTdHJpbmcgKnJlcGxhY2VtZW50U3RyaW5nQXNOU1N0cmluZyA9IHJlcGxhY2Vt
ZW50U3RyaW5nOwogCi0gICAgbV9jb3JyZWN0aW9uUGFuZWxUYWcgPSBbW05TU3BlbGxDaGVja2Vy
IHNoYXJlZFNwZWxsQ2hlY2tlcl0gc2hvd0NvcnJlY3Rpb246cmVwbGFjZW1lbnRTdHJpbmdBc05T
U3RyaW5nIGZvclN0cmluZ0luUmVjdDpib3VuZGluZ0JveEFzTlNSZWN0IHZpZXc6bV93ZWJWaWV3
IGNvbXBsZXRpb25IYW5kbGVyOl4oQk9PTCBhY2NlcHRlZCkgewotICAgICAgICBpZiAoIWFjY2Vw
dGVkKSB7CisgICAgbV9jb3JyZWN0aW9uUGFuZWxJc1Nob3duID0gWUVTOworICAgIE5TQ29ycmVj
dGlvbkJ1YmJsZVR5cGUgYnViYmxlVHlwZSA9IHBhbmVsVHlwZSA9PSBXZWJDb3JlOjpDb3JyZWN0
aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVDb3JyZWN0aW9uID8gTlNDb3JyZWN0aW9uQnViYmxlVHlw
ZUNvcnJlY3Rpb24gOiBOU0NvcnJlY3Rpb25CdWJibGVUeXBlUmV2ZXJzaW9uOworICAgIFtbTlNT
cGVsbENoZWNrZXIgc2hhcmVkU3BlbGxDaGVja2VyXSBzaG93Q29ycmVjdGlvbkJ1YmJsZU9mVHlw
ZTpidWJibGVUeXBlIHByaW1hcnlTdHJpbmc6cmVwbGFjZW1lbnRTdHJpbmdBc05TU3RyaW5nIGFs
dGVybmF0aXZlU3RyaW5nczpuaWwgZm9yU3RyaW5nSW5SZWN0OmJvdW5kaW5nQm94QXNOU1JlY3Qg
dmlldzptX3dlYlZpZXcgY29tcGxldGlvbkhhbmRsZXI6XihOU1N0cmluZyAqYWNjZXB0ZWRTdHJp
bmcpIHsKKyAgICAgICAgaWYgKCFhY2NlcHRlZFN0cmluZyAmJiBidWJibGVUeXBlID09IE5TQ29y
cmVjdGlvbkJ1YmJsZVR5cGVDb3JyZWN0aW9uKSB7CiAgICAgICAgICAgICBbW05TU3BlbGxDaGVj
a2VyIHNoYXJlZFNwZWxsQ2hlY2tlcl0gcmVjb3JkUmVzcG9uc2U6TlNDb3JyZWN0aW9uUmVzcG9u
c2VSZWplY3RlZCB0b0NvcnJlY3Rpb246cmVwbGFjZW1lbnRTdHJpbmdBc05TU3RyaW5nIGZvcldv
cmQ6cmVwbGFjZWRTdHJpbmdBc05TU3RyaW5nIGxhbmd1YWdlOm5pbCBpblNwZWxsRG9jdW1lbnRX
aXRoVGFnOlttX3dlYlZpZXcgc3BlbGxDaGVja2VyRG9jdW1lbnRUYWddXTsKICAgICAgICAgICAg
IGVkaXRvci0+aGFuZGxlUmVqZWN0ZWRDb3JyZWN0aW9uKCk7CisgICAgICAgIH0gZWxzZSBpZiAo
YWNjZXB0ZWRTdHJpbmcgJiYgYnViYmxlVHlwZSA9PSBOU0NvcnJlY3Rpb25CdWJibGVUeXBlUmV2
ZXJzaW9uKSB7CisgICAgICAgICAgICBbW05TU3BlbGxDaGVja2VyIHNoYXJlZFNwZWxsQ2hlY2tl
cl0gcmVjb3JkUmVzcG9uc2U6TlNDb3JyZWN0aW9uUmVzcG9uc2VSZXZlcnRlZCB0b0NvcnJlY3Rp
b246cmVwbGFjZWRTdHJpbmdBc05TU3RyaW5nIGZvcldvcmQ6cmVwbGFjZW1lbnRTdHJpbmdBc05T
U3RyaW5nIGxhbmd1YWdlOm5pbCBpblNwZWxsRG9jdW1lbnRXaXRoVGFnOlttX3dlYlZpZXcgc3Bl
bGxDaGVja2VyRG9jdW1lbnRUYWddXTsKKyAgICAgICAgICAgIGVkaXRvci0+aGFuZGxlUmVqZWN0
ZWRDb3JyZWN0aW9uKCk7CiAgICAgICAgIH0KICAgICB9XTsKIH0KIAotdm9pZCBXZWJFZGl0b3JD
bGllbnQ6OmRpc21pc3NDb3JyZWN0aW9uUGFuZWwoYm9vbCBjb3JyZWN0aW9uQWNjZXB0ZWQpCit2
b2lkIFdlYkVkaXRvckNsaWVudDo6ZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChXZWJDb3JlOjpDb3Jy
ZWN0aW9uV2FzUmVqZWN0ZWRPck5vdCBjb3JyZWN0aW9uV2FzUmVqZWN0ZWQpCiB7Ci0gICAgaWYg
KG1fY29ycmVjdGlvblBhbmVsVGFnICE9IEludmFsaWRDb3JyZWN0aW9uUGFuZWxUYWcpIHsKLSAg
ICAgICAgW1tOU1NwZWxsQ2hlY2tlciBzaGFyZWRTcGVsbENoZWNrZXJdIGRpc21pc3NDb3JyZWN0
aW9uOm1fY29ycmVjdGlvblBhbmVsVGFnIGFjY2VwdENvcnJlY3Rpb246Y29ycmVjdGlvbkFjY2Vw
dGVkXTsKLSAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxUYWcgPSBJbnZhbGlkQ29ycmVjdGlvblBh
bmVsVGFnOworICAgIGlmIChpc1Nob3dpbmdDb3JyZWN0aW9uUGFuZWwoKSkgeworICAgICAgICBp
ZiAoY29ycmVjdGlvbldhc1JlamVjdGVkKQorICAgICAgICAgICAgW1tOU1NwZWxsQ2hlY2tlciBz
aGFyZWRTcGVsbENoZWNrZXJdIGNhbmNlbENvcnJlY3Rpb25CdWJibGVGb3JWaWV3Om1fd2ViVmll
d107CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFtbTlNTcGVsbENoZWNrZXIgc2hhcmVkU3Bl
bGxDaGVja2VyXSBkaXNtaXNzQ29ycmVjdGlvbkJ1YmJsZUZvclZpZXc6bV93ZWJWaWV3XTsKKyAg
ICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJc1Nob3duID0gTk87CiAgICAgfQogfQogCiBib29sIFdl
YkVkaXRvckNsaWVudDo6aXNTaG93aW5nQ29ycmVjdGlvblBhbmVsKCkKIHsKLSAgICByZXR1cm4g
bV9jb3JyZWN0aW9uUGFuZWxUYWcgIT0gSW52YWxpZENvcnJlY3Rpb25QYW5lbFRhZzsKKyAgICBy
ZXR1cm4gbV9jb3JyZWN0aW9uUGFuZWxJc1Nob3duOwogfQogI2VuZGlmCiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>72997</attachid>
            <date>2010-11-04 16:00:08 -0700</date>
            <delta_ts>2010-11-04 16:44:22 -0700</delta_ts>
            <desc>Proposed patch (v3)</desc>
            <filename>webkit_bug47630.patch</filename>
            <type>text/plain</type>
            <size>63339</size>
            <attacher name="Jia Pu">jiapu.mail</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MTMwMCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNzMgQEAKKzIwMTAtMTEtMDMgIEppYSBQdSAgPGpwdUBhcHBsZS5jb20+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgcmV2ZXJzaW9uIGJ1
YmJsZSBpbiBXZWJWaWV3cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NDc2MzAKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzg1MzA5NjA+CisKKyAgICAg
ICAgQWRkZWQgbWFudWFsIHRlc3Q6CisgICAgICAgIG1hbnVhbC10ZXN0cy9hdXRvY29ycmVjdGlv
bi9jb250aW51ZS10eXBpbmctdG8tZGlzbWlzcy1yZXZlcnNpb24uaHRtbAorICAgICAgICBtYW51
YWwtdGVzdHMvYXV0b2NvcnJlY3Rpb24vZGVsZXRlLXRvLWRpc21pc3MtcmV2ZXJzaW9uLmh0bWwK
KyAgICAgICAgbWFudWFsLXRlc3RzL2F1dG9jb3JyZWN0aW9uL2RlbGV0ZS10by1lbmQtb2Ytd29y
ZC10by1zaG93LXJldmVyc2lvbi5odG1sCisgICAgICAgIG1hbnVhbC10ZXN0cy9hdXRvY29ycmVj
dGlvbi9tb3ZlLXRvLWVuZC1vZi13b3JkLXRvLXNob3ctcmV2ZXJzaW9uLmh0bWwKKyAgICAgICAg
bWFudWFsLXRlc3RzL2F1dG9jb3JyZWN0aW9uL3R5cGUtd2hpdGVzcGFjZS10by1kaXNtaXNzLXJl
dmVyc2lvbi5odG1sCisKKyAgICAgICAgV2UgY2FuIG9ubHkgbWFudWxseSB0ZXN0IHRoaXMgZmVh
dHVyZSBmb3IgdHdvIHJlYXNvbnM6CisgICAgICAgIDEuIE9uIE1hYyBPUyBYLCB0aGUgcmVzdWx0
IG9mIHNwZWxsIGNoZWNraW5nIGlzIHBhcnRseSBkZXRlcm1pbmVkIGJ5IHBhc3QgdXNlciB1c2Fn
ZS4gV2UgY2FuJ3QKKyAgICAgICAgICAgcmVhbGlhYmx5IGdlbmVyYXRpbmcgdGVzdCBjYXNlcyB1
bnRpbCB3ZSBjYW4gZGlzYWJsZSB1c2VyIGN1c3RvbSBkYXRhIGR1cmluZyBzcGVsbCBjaGVja2lu
Zy4KKyAgICAgICAgMi4gVG8gZXhlcmNpZXNlIHRoaXMgZmVhdHVyZSwgd2UgbmVlZCBhIG1pbmlt
dW0gb2YgMC4zIHNlY29uZCBkZWxheSB1c2luZyBXZWJDb3JlIHRpbWVyLgorCisgICAgICAgIFRo
aXMgcGF0Y2ggaXMgdG8gYWRkIHJldmVyc2lvbiB0byBjb3JyZWN0aW9uIHBhbmVsLiBJdCBjb25z
aXN0cyBvZiBmb2xsb3dpbmcgbWFqb3IgY29kZSBjaGFuZ2VzOgorICAgICAgICAxLiBDb2xsZWN0
ZWQgYWxsIGF1dG9jb3JyZWN0aW9uIHJlbGF0ZWQgbWVtYmVyIHZhcmlhYmxlcyBpbiBFZGl0b3Ig
aW50byBhIENvcnJlY3Rpb25QYW5lbEluZm8KKyAgICAgICAgICAgY2xhc3MgdG8gaW1wcm92ZSBy
ZWFkYWJpbGl0eS4KKyAgICAgICAgMi4gQ2hhbmdlZCBzaWduYXR1cmUgb2YgRWRpdG9yOjpzdGFy
dENvcnJlY3Rpb25QYW5lbFRpbWVyKCkgdG8gYWxsb3cgY2FsbGVyIHRvIHNwZWNpZnkgdGhlCisg
ICAgICAgICAgIHR5cGUgb2YgY29ycmVjdGlvbiBwYW5lbC0tcmVndWxhciBjb3JyZWN0aW9uIG9y
IHJldmVyc2lvbi4KKyAgICAgICAgMy4gTWFkZSBuZWNlc3NhcnkgY2hhbmdlcyB0byBhZG9wdCBy
ZXZlcnNpb24gQVBJIGluIEFwcEtpdC4KKyAgICAgICAgNC4gVXNlIFNVUFBPUlRfQ09SUkVDVElP
Tl9QQU5FTCBtYWNybyB0byBpbXByb3ZlIHJlYWRhYmlsaXR5LgorCisgICAgICAgICogR05VbWFr
ZWZpbGUuYW06IEFkZGVkIENvcnJlY3Rpb25QYW5lbEluZm8uaC4KKyAgICAgICAgKiBXZWJDb3Jl
Lmd5cGk6IERpdHRvLgorICAgICAgICAqIFdlYkNvcmUucHJvOiBEaXR0by4KKyAgICAgICAgKiBX
ZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajogRGl0dG8uCisgICAgICAgICogV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGVkaXRpbmcvQ29ycmVjdGlvblBh
bmVsSW5mby5oOiBBZGRlZC4KKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpFZGl0b3I6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24pOiBTdGFydCBjb3Jy
ZWN0aW9uIHBhbmVsIHRpbWVyIGZvciByZXZlcnNpb24gd2hlbgorICAgICAgICAgIHRoZSBuZXcg
c2VsZWN0aW9uIGlzIGEgY2FyZXQgc2VsZWN0aW9uIGF0IGVuZCBvZiBhIHByZXZpb3VzbHkgY29y
cmVjdGVkIHdvcmQuCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmFwcGxpZWRFZGl0aW5nKTog
U3RvcCB0aW1lciBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBtZXRob2QgaW5zdGVhZCBvZiBhdCB0
aGUgZW5kLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp+RWRpdG9yKTogQWRvcHRlZCBuZXcg
bWV0aG9kIGRpc21pc3NDb3JyZWN0aW9uUGFuZWwoKS4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRv
cjo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9Qb3NpdGlvbik6IEFkb3B0ZWQgbmV3IG1l
dGhvZCBhcHBseUNvcnJlY3Rpb25QYW5lbEluZm8oKS4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRv
cjo6bWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyk6IENvZGUgY2hhbmdl
IGZvciBuZXcgbV9jb3JyZWN0aW9uUGFuZWxJbmZvCisgICAgICAgICAgbWVtYmVyIHZhcmlhYmxl
LgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjb3JyZWN0aW9uUGFuZWxUaW1lckZpcmVkKTog
Q2hhbmdlIHRvIGhhbmRsZSByZXZlcnNpb24gcGFuZWwgdHlwZS4KKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRvcjo6aGFuZGxlUmVqZWN0ZWRDb3JyZWN0aW9uKTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpFZGl0b3I6OnN0YXJ0Q29ycmVjdGlvblBhbmVsVGltZXIpOiBDaGFuZ2VkIHNpZ25hdHVy
ZSB0byBhbGxvdyBwYXNzaW5nIGluIHBhbmVsIHR5cGUuCisgICAgICAgIChXZWJDb3JlOjpFZGl0
b3I6OnN0b3BDb3JyZWN0aW9uUGFuZWxUaW1lcik6IEFkb3B0ZWQgbWFjcm8gU1VQUE9SVF9DT1JS
RUNUSU9OX1BBTkVMLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpoYW5kbGVDYW5jZWxPcGVy
YXRpb24pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aXNTaG93aW5nQ29ycmVj
dGlvblBhbmVsKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmRpc21pc3NDb3Jy
ZWN0aW9uUGFuZWwpOiBVcGRhdGUgbV9jb3JyZWN0aW9uUGFuZWxJbmZvIHdoZW4gY29ycmVjdGlv
biBwYW5lbAorICAgICAgICAgIGlzIGRpc21pc3NlZC4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRv
cjo6YXBwbHlDb3JyZWN0aW9uUGFuZWxJbmZvKTogRmFjdG9yZWQgb3V0IGNvZGUgdGhhdCBhcHBs
aWVzIGF1dG9jb3JyZWN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjaGFuZ2VTZWxl
Y3Rpb25BZnRlckNvbW1hbmQpOiBBZG9wdCBtYWNybyBTVVBQT1JUX0NPUlJFQ1RJT05fUEFORUwu
CisgICAgICAgICogZWRpdGluZy9FZGl0b3IuaDogQWRvcHRlZCBDb3JyZWN0aW9uUGFuZWxJbmZv
IGFuZCBhZGQgbmV3IG1lbWJlciBtZXRob2RzLgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yQ29t
bWFuZC5jcHA6IEFkb3B0ZWQgbWFjcm8gU1VQUE9SVF9DT1JSRUNUSU9OX1BBTkVMCisgICAgICAg
IChXZWJDb3JlOjpjcmVhdGVDb21tYW5kTWFwKToKKyAgICAgICAgKiBlZGl0aW5nL1R5cGluZ0Nv
bW1hbmQuY3BwOiBBZG9wdGVkIG1hY3JvIFNVUFBPUlRfQ09SUkVDVElPTl9QQU5FTCBhbmQgbmV3
IHNpZ25hdHVyZSBvZgorICAgICAgICAgIHN0YXJ0Q29ycmVjdGlvblBhbmVsVGltZXIoKS4KKyAg
ICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6Om1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGlu
Zyk6CisgICAgICAgICogbG9hZGVyL0VtcHR5Q2xpZW50cy5oOgorICAgICAgICAoV2ViQ29yZTo6
RW1wdHlFZGl0b3JDbGllbnQ6OnNob3dDb3JyZWN0aW9uUGFuZWwpOiBBZG9wdGVkIG5ldyBzaWdu
YXR1cmUgb2YgYmFzZSBjbGFzcyBtZXRob2QuCisgICAgICAgIChXZWJDb3JlOjpFbXB0eUVkaXRv
ckNsaWVudDo6ZGlzbWlzc0NvcnJlY3Rpb25QYW5lbCk6ICBEaXR0by4KKyAgICAgICAgKiBtYW51
YWwtdGVzdHMvYXV0b2NvcnJlY3Rpb24vY29udGludWUtdHlwaW5nLXRvLWRpc21pc3MtcmV2ZXJz
aW9uLmh0bWw6IEFkZGVkLgorICAgICAgICAqIG1hbnVhbC10ZXN0cy9hdXRvY29ycmVjdGlvbi9k
ZWxldGUtdG8tZGlzbWlzcy1yZXZlcnNpb24uaHRtbDogQWRkZWQuCisgICAgICAgICogbWFudWFs
LXRlc3RzL2F1dG9jb3JyZWN0aW9uL2RlbGV0ZS10by1lbmQtb2Ytd29yZC10by1zaG93LXJldmVy
c2lvbi5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBtYW51YWwtdGVzdHMvYXV0b2NvcnJlY3Rpb24v
bW92ZS10by1lbmQtb2Ytd29yZC10by1zaG93LXJldmVyc2lvbi5odG1sOiBBZGRlZC4KKyAgICAg
ICAgKiBtYW51YWwtdGVzdHMvYXV0b2NvcnJlY3Rpb24vdHlwZS13aGl0ZXNwYWNlLXRvLWRpc21p
c3MtcmV2ZXJzaW9uLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHBhZ2UvRWRpdG9yQ2xpZW50Lmg6
IENoYW5nZWQgc2lnbmF0dXJlIG9mIHNob3dDb3JyZWN0aW9uUGFuZWwoKSBhbmQgZGlzbWlzc0Nv
cnJlY3Rpb25QYW5lbCgpLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGlj
c0NvbnRleHRNYWMubW06IEFkZGVkIGNvbW1lbnQgdG8gaW1wcm92ZSByZWFkYWJpbGl0eS4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0Q2hlY2tpbmcp
OgorCiAyMDEwLTExLTAzICBQYXRyaWNrIEdhbnN0ZXJlciAgPHBhcm9nYUB3ZWJraXQub3JnPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gUm9iZW4uCkluZGV4OiBXZWJDb3JlL0dOVW1ha2Vm
aWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHJldmlzaW9uIDcx
MzAwKQorKysgV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkod29ya2luZyBjb3B5KQpAQCAtMTI3OCw2
ICsxMjc4LDcgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL2VkaXRpbmcvQ29tcG9z
aXRlRWRpdENvbW1hbmQuaCBcCiAJV2ViQ29yZS9lZGl0aW5nL0NyZWF0ZUxpbmtDb21tYW5kLmNw
cCBcCiAJV2ViQ29yZS9lZGl0aW5nL0NyZWF0ZUxpbmtDb21tYW5kLmggXAorCVdlYkNvcmUvZWRp
dGluZy9Db3JyZWN0aW9uUGFuZWxJbmZvLmggXAogCVdlYkNvcmUvZWRpdGluZy9EZWxldGVCdXR0
b25Db250cm9sbGVyLmNwcCBcCiAJV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZUJ1dHRvbkNvbnRyb2xs
ZXIuaCBcCiAJV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZUJ1dHRvbi5jcHAgXApJbmRleDogV2ViQ29y
ZS9XZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlz
aW9uIDcxMzAwKQorKysgV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTEz
NjMsNiArMTM2Myw3IEBACiAgICAgICAgICAgICAnZWRpdGluZy9CcmVha0Jsb2NrcXVvdGVDb21t
YW5kLmgnLAogICAgICAgICAgICAgJ2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwJywK
ICAgICAgICAgICAgICdlZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmgnLAorICAgICAgICAg
ICAgJ2VkaXRpbmcvQ29ycmVjdGlvblBhbmVsSW5mby5oJywKICAgICAgICAgICAgICdlZGl0aW5n
L0NyZWF0ZUxpbmtDb21tYW5kLmNwcCcsCiAgICAgICAgICAgICAnZWRpdGluZy9DcmVhdGVMaW5r
Q29tbWFuZC5oJywKICAgICAgICAgICAgICdlZGl0aW5nL0RlbGV0ZUJ1dHRvbi5jcHAnLApJbmRl
eDogV2ViQ29yZS9XZWJDb3JlLnBybwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUucHJv
CShyZXZpc2lvbiA3MTMwMCkKKysrIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHdvcmtpbmcgY29weSkK
QEAgLTE2ODksNiArMTY4OSw3IEBAIEhFQURFUlMgKz0gXAogICAgIGVkaXRpbmcvQXBwbHlTdHls
ZUNvbW1hbmQuaCBcCiAgICAgZWRpdGluZy9CcmVha0Jsb2NrcXVvdGVDb21tYW5kLmggXAogICAg
IGVkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuaCBcCisgICAgZWRpdGluZy9Db3JyZWN0aW9u
UGFuZWxJbmZvLmggXAogICAgIGVkaXRpbmcvQ3JlYXRlTGlua0NvbW1hbmQuaCBcCiAgICAgZWRp
dGluZy9EZWxldGVCdXR0b25Db250cm9sbGVyLmggXAogICAgIGVkaXRpbmcvRGVsZXRlQnV0dG9u
LmggXApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvago9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiA3
MTMwMCkKKysrIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcg
Y29weSkKQEAgLTQ1ODUyLDYgKzQ1ODUyLDEwIEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8
RmlsZQ0KKwkJCVJlbGF0aXZlUGF0aD0iLi5cZWRpdGluZ1xDb3JyZWN0aW9uUGFuZWxJbmZvLmgi
DQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxl
ZGl0aW5nXENyZWF0ZUxpbmtDb21tYW5kLmNwcCINCiAJCQkJPg0KIAkJCQk8RmlsZUNvbmZpZ3Vy
YXRpb24NCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
cmV2aXNpb24gNzEzMDApCisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDY2Nyw2ICs0NjY3LDcgQEAKIAkJQjc3NkQ0M0QxMTA0
NTI3NTAwQkVCMEVDIC8qIFByaW50Q29udGV4dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNzc2RDQzQzExMDQ1Mjc1MDBCRUIwRUMgLyogUHJpbnRD
b250ZXh0LmNwcCAqLzsgfTsKIAkJQjg4NUU4RDQxMUUwNkREMjAwOUZGQkY0IC8qIEluc3BlY3Rv
ckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBCODg1RThEMjExRTA2REQyMDA5RkZCRjQgLyogSW5zcGVjdG9yQXBw
bGljYXRpb25DYWNoZUFnZW50LmNwcCAqLzsgfTsKIAkJQjg4NUU4RDUxMUUwNkREMjAwOUZGQkY0
IC8qIEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjg4NUU4RDMxMUUwNkREMjAwOUZGQkY0IC8qIElu
c3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKCk7IH07IH07CisJCUI4QTZBNkQ1MTI3QjMzOEQwMDg2NzNCQSAvKiBDb3JyZWN0aW9uUGFu
ZWxJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
OEE2QTZENDEyN0IzMzhEMDA4NjczQkEgLyogQ29ycmVjdGlvblBhbmVsSW5mby5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDMDBGMDA0MEUwQTE4
NTUwMEZEMDRFMyAvKiBET01GaWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCQzAwRUZGRTBFMEExODU1MDBGRDA0RTMgLyogRE9NRmlsZS5oICovOyB9
OwogCQlCQzAwRjAwNTBFMEExODU1MDBGRDA0RTMgLyogRE9NRmlsZS5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMDBFRkZGMEUwQTE4NTUwMEZEMDRF
MyAvKiBET01GaWxlLm1tICovOyB9OwogCQlCQzAwRjAwNjBFMEExODU1MDBGRDA0RTMgLyogRE9N
RmlsZUludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCQzAwRjAwMDBFMEExODU1MDBGRDA0RTMgLyogRE9NRmlsZUludGVybmFsLmggKi87IH07
CkBAIC0xMDY2NSw2ICsxMDY2Niw3IEBACiAJCUI3NzZENDNDMTEwNDUyNzUwMEJFQjBFQyAvKiBQ
cmludENvbnRleHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUHJp
bnRDb250ZXh0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjg4NUU4RDIxMUUw
NkREMjAwOUZGQkY0IC8qIEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hl
QWdlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCODg1RThEMzExRTA2REQy
MDA5RkZCRjQgLyogSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCOEE2QTZENDEyN0IzMzhEMDA4NjczQkEgLyog
Q29ycmVjdGlvblBhbmVsSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBD
b3JyZWN0aW9uUGFuZWxJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMDBF
RkZFMEUwQTE4NTUwMEZEMDRFMyAvKiBET01GaWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IERPTUZpbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMwMEVG
RkYwRTBBMTg1NTAwRkQwNEUzIC8qIERPTUZpbGUubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IHBhdGggPSBET01GaWxlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlCQzAwRjAwMDBFMEExODU1MDBGRDA0RTMgLyogRE9NRmlsZUludGVybmFsLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTUZpbGVJbnRlcm5hbC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMTQ0ODYsNiArMTQ0ODgsNyBAQAogCQkJCTkzMzA5RDhDMDk5RTY0
OTEwMDU2RTU4MSAvKiBCcmVha0Jsb2NrcXVvdGVDb21tYW5kLmggKi8sCiAJCQkJOTMzMDlEOEQw
OTlFNjQ5MTAwNTZFNTgxIC8qIENvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcCAqLywKIAkJCQk5MzMw
OUQ4RTA5OUU2NDkxMDA1NkU1ODEgLyogQ29tcG9zaXRlRWRpdENvbW1hbmQuaCAqLywKKwkJCQlC
OEE2QTZENDEyN0IzMzhEMDA4NjczQkEgLyogQ29ycmVjdGlvblBhbmVsSW5mby5oICovLAogCQkJ
CUQwQjA1NTY3MDlDNjcwMDEwMDMwN0U0MyAvKiBDcmVhdGVMaW5rQ29tbWFuZC5jcHAgKi8sCiAJ
CQkJRDBCMDU1NjYwOUM2NzAwMTAwMzA3RTQzIC8qIENyZWF0ZUxpbmtDb21tYW5kLmggKi8sCiAJ
CQkJMUM0QzhGNjMwQUQ4NjU1RDAwOTQ3NUNFIC8qIERlbGV0ZUJ1dHRvbi5jcHAgKi8sCkBAIC0y
MTI3MCw3ICsyMTI3Myw4IEBACiAJCQkJOTdERDREODcwRkRGNEQ2RTAwRUNGOUE0IC8qIFhTU0F1
ZGl0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTZFNjdEMkE3MTI4MEU4QTQwMDg3NThGNyAvKiBF
eHRlbnNpb25zM0RPcGVuR0wuaCBpbiBIZWFkZXJzICovLAogCQkJCTZFNjdEMkE5MTI4MEU4QkQw
MDg3NThGNyAvKiBFeHRlbnNpb25zM0QuaCBpbiBIZWFkZXJzICovLAotIAkJCQk5M0Y2RjFFRTEy
N0Y3MEIxMDA1NUNCMDYgLyogV2ViR0xDb250ZXh0RXZlbnQuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTkzRjZGMUVFMTI3RjcwQjEwMDU1Q0IwNiAvKiBXZWJHTENvbnRleHRFdmVudC5oIGluIEhlYWRl
cnMgKi8sCisJCQkJQjhBNkE2RDUxMjdCMzM4RDAwODY3M0JBIC8qIENvcnJlY3Rpb25QYW5lbElu
Zm8uaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHBy
b2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMjEzMzAsNiArMjEzMzQsNyBAQAogCQkJaXNhID0gUEJY
UHJvamVjdDsKIAkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSAxNDlDMjg0MzA4OTAyQjExMDA4
QTlFRkMgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhQcm9qZWN0ICJXZWJDb3Jl
IiAqLzsKIAkJCWNvbXBhdGliaWxpdHlWZXJzaW9uID0gIlhjb2RlIDIuNCI7CisJCQlkZXZlbG9w
bWVudFJlZ2lvbiA9IEVuZ2xpc2g7CiAJCQloYXNTY2FubmVkRm9yRW5jb2RpbmdzID0gMTsKIAkJ
CWtub3duUmVnaW9ucyA9ICgKIAkJCQlFbmdsaXNoLApAQCAtMjM4MzIsNyArMjM4MzcsNyBAQAog
CQkJCUUxQkU1MTJEMENGNkM1MTIwMDJFQTk1OSAvKiBYU0xUVW5pY29kZVNvcnQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJOTdERDREODYwRkRGNEQ2RTAwRUNGOUE0IC8qIFhTU0F1ZGl0b3IuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJNkU2N0QyQTYxMjgwRThBNDAwODc1OEY3IC8qIEV4dGVuc2lv
bnMzRE9wZW5HTC5jcHAgaW4gU291cmNlcyAqLywKLSAJCQkJOTNGNkYxRUQxMjdGNzBCMTAwNTVD
QjA2IC8qIFdlYkdMQ29udGV4dEV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTkzRjZGMUVE
MTI3RjcwQjEwMDU1Q0IwNiAvKiBXZWJHTENvbnRleHRFdmVudC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsK
SW5kZXg6IFdlYkNvcmUvZWRpdGluZy9Db3JyZWN0aW9uUGFuZWxJbmZvLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9lZGl0aW5nL0NvcnJlY3Rpb25QYW5lbEluZm8uaAkocmV2aXNpb24gMCkKKysr
IFdlYkNvcmUvZWRpdGluZy9Db3JyZWN0aW9uUGFuZWxJbmZvLmgJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ29ycmVjdGlvblBhbmVsSW5mb19oCisjZGVm
aW5lIENvcnJlY3Rpb25QYW5lbEluZm9faAorCisjaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5l
ZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkgJiYg
IWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQorLy8gU29tZSBwbGF0Zm9ybXMgcHJv
dmlkZSBVSSBmb3Igc3VnZ2VzdGluZyBhdXRvY29ycmVjdGlvbi4KKyNkZWZpbmUgU1VQUE9SVF9B
VVRPQ09SUkVDVElPTl9QQU5FTCAxCisvLyBTb21lIHBsYXRmb3JtcyB1c2Ugc3BlbGxpbmcgYW5k
IGF1dG9jb3JyZWN0aW9uIG1hcmtlcnMgdG8gcHJvdmlkZSB2aXN1YWwgY3VlLgorLy8gT24gc3Vj
aCBwbGF0Zm9ybSwgaWYgd29yZCB3aXRoIG1hcmtlciBpcyBlZGl0ZWQsIHdlIG5lZWQgdG8gcmVt
b3ZlIHRoZSBtYXJrZXIuCisjZGVmaW5lIFJFTU9WRV9NQVJLRVJTX1VQT05fRURJVElORyAxCisj
ZWxzZQorI2RlZmluZSBTVVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMIDAKKyNkZWZpbmUgUkVN
T1ZFX01BUktFUlNfVVBPTl9FRElUSU5HIDAKKyNlbmRpZiAvLyAjaWYgUExBVEZPUk0oTUFDKSAm
JiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVP
UEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQorCisjaW5jbHVkZSAi
UmFuZ2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdHJ1Y3QgQ29ycmVjdGlvblBhbmVs
SW5mbyB7CisgICAgZW51bSBQYW5lbFR5cGV7CisgICAgICAgIFBhbmVsVHlwZUNvcnJlY3Rpb24g
PSAwLAorICAgICAgICBQYW5lbFR5cGVSZXZlcnNpb24KKyAgICB9OworCisgICAgUmVmUHRyPFJh
bmdlPiBtX3JhbmdlVG9CZVJlcGxhY2VkOworICAgIFN0cmluZyBtX3JlcGxhY2VkU3RyaW5nOwor
ICAgIFN0cmluZyBtX3JlcGxhY2VtZW50U3RyaW5nOworICAgIFBhbmVsVHlwZSBtX3BhbmVsVHlw
ZTsKKyAgICBib29sIG1faXNBY3RpdmU7Cit9OworCitlbnVtIENvcnJlY3Rpb25XYXNSZWplY3Rl
ZE9yTm90IHsgQ29ycmVjdGlvbldhc05vdFJlamVjdGVkLCBDb3JyZWN0aW9uV2FzUmVqZWN0ZWQg
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gQ29ycmVjdGlvblBhbmVs
SW5mb19oCkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAkocmV2aXNpb24gNzEzMDApCisrKyBXZWJDb3JlL2Vk
aXRpbmcvRWRpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDU3LDkgKzQ1Nyw1MyBAQCBib29s
IEVkaXRvcjo6c2hvdWxkU2hvd0RlbGV0ZUludGVyZmFjZShICiAKIHZvaWQgRWRpdG9yOjpyZXNw
b25kVG9DaGFuZ2VkU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlv
bikKIHsKKyNpZiBTVVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMCisgICAgVmlzaWJsZVNlbGVj
dGlvbiBjdXJyZW50U2VsZWN0aW9uKGZyYW1lKCktPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKSk7
CisgICAgaWYgKGN1cnJlbnRTZWxlY3Rpb24gIT0gb2xkU2VsZWN0aW9uKSB7CisgICAgICAgIHN0
b3BDb3JyZWN0aW9uUGFuZWxUaW1lcigpOworICAgICAgICBkaXNtaXNzQ29ycmVjdGlvblBhbmVs
KENvcnJlY3Rpb25XYXNOb3RSZWplY3RlZCk7CisgICAgfQorI2VuZGlmIC8vIFNVUFBPUlRfQVVU
T0NPUlJFQ1RJT05fUEFORUwKKwogICAgIGlmIChjbGllbnQoKSkKICAgICAgICAgY2xpZW50KCkt
PnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oKTsKICAgICBtX2RlbGV0ZUJ1dHRvbkNvbnRyb2xs
ZXItPnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24ob2xkU2VsZWN0aW9uKTsKKworI2lmIFNVUFBP
UlRfQVVUT0NPUlJFQ1RJT05fUEFORUwKKyAgICAvLyBXaGVuIHVzZXIgbW92ZXMgY2FyZXQgdG8g
dGhlIGVuZCBvZiBhdXRvY29ycmVjdGVkIHdvcmQgYW5kIHBhdXNlcywgd2Ugc2hvdyB0aGUgcGFu
ZWwKKyAgICAvLyBjb250YWluaW5nIHRoZSBvcmlnaW5hbCBwcmUtY29ycmVjdGlvbiB3b3JkIHNv
IHRoYXQgdXNlciBjYW4gcXVpY2tseSByZXZlcnQgdGhlCisgICAgLy8gdW5kZXNpcmVkIGF1dG9j
b3JyZWN0aW9uLiBIZXJlLCB3ZSBzdGFydCBjb3JyZWN0aW9uIHBhbmVsIHRpbWVyIG9uY2Ugd2Ug
Y29uZmlybSB0aGF0CisgICAgLy8gdGhlIG5ldyBjYXJldCBwb3NpdGlvbiBpcyBhdCB0aGUgZW5k
IG9mIGEgd29yZC4KKyAgICBpZiAoIWN1cnJlbnRTZWxlY3Rpb24uaXNDYXJldCgpIHx8IGN1cnJl
bnRTZWxlY3Rpb24gPT0gb2xkU2VsZWN0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBWaXNp
YmxlUG9zaXRpb24gc2VsZWN0aW9uUG9zaXRpb24gPSBjdXJyZW50U2VsZWN0aW9uLnN0YXJ0KCk7
CisgICAgVmlzaWJsZVBvc2l0aW9uIGVuZFBvc2l0aW9uT2ZXb3JkID0gZW5kT2ZXb3JkKHNlbGVj
dGlvblBvc2l0aW9uLCBMZWZ0V29yZElmT25Cb3VuZGFyeSk7CisgICAgaWYgKHNlbGVjdGlvblBv
c2l0aW9uICE9IGVuZFBvc2l0aW9uT2ZXb3JkKQorICAgICAgICByZXR1cm47CisKKyAgICBQb3Np
dGlvbiBwb3NpdGlvbiA9IGVuZFBvc2l0aW9uT2ZXb3JkLmRlZXBFcXVpdmFsZW50KCk7CisgICAg
aWYgKHBvc2l0aW9uLmFuY2hvclR5cGUoKSAhPSBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldElu
QW5jaG9yKQorICAgICAgICByZXR1cm47CisKKyAgICBOb2RlKiBub2RlID0gcG9zaXRpb24uY29u
dGFpbmVyTm9kZSgpOworICAgIGludCBlbmRPZmZzZXQgPSBwb3NpdGlvbi5vZmZzZXRJbkNvbnRh
aW5lck5vZGUoKTsKKyAgICBWZWN0b3I8RG9jdW1lbnRNYXJrZXI+IG1hcmtlcnMgPSBub2RlLT5k
b2N1bWVudCgpLT5tYXJrZXJzKCktPm1hcmtlcnNGb3JOb2RlKG5vZGUpOworICAgIHNpemVfdCBt
YXJrZXJDb3VudCA9IG1hcmtlcnMuc2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bWFya2VyQ291bnQ7ICsraSkgeworICAgICAgICBjb25zdCBEb2N1bWVudE1hcmtlciYgbWFya2Vy
ID0gbWFya2Vyc1tpXTsKKyAgICAgICAgaWYgKG1hcmtlci50eXBlID09IERvY3VtZW50TWFya2Vy
OjpDb3JyZWN0aW9uSW5kaWNhdG9yICYmIHN0YXRpY19jYXN0PGludD4obWFya2VyLmVuZE9mZnNl
dCkgPT0gZW5kT2Zmc2V0KSB7CisgICAgICAgICAgICBSZWZQdHI8UmFuZ2U+IHdvcmRSYW5nZSA9
IFJhbmdlOjpjcmVhdGUoZnJhbWUoKS0+ZG9jdW1lbnQoKSwgbm9kZSwgbWFya2VyLnN0YXJ0T2Zm
c2V0LCBub2RlLCBtYXJrZXIuZW5kT2Zmc2V0KTsKKyAgICAgICAgICAgIFN0cmluZyBjdXJyZW50
V29yZCA9IHBsYWluVGV4dCh3b3JkUmFuZ2UuZ2V0KCkpOworICAgICAgICAgICAgaWYgKGN1cnJl
bnRXb3JkLmxlbmd0aCgpID4gMCAmJiBtYXJrZXIuZGVzY3JpcHRpb24ubGVuZ3RoKCkgPiAwKSB7
CisgICAgICAgICAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLm1fcmFuZ2VUb0JlUmVwbGFj
ZWQgPSB3b3JkUmFuZ2U7CisgICAgICAgICAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLm1f
cmVwbGFjZW1lbnRTdHJpbmcgPSBtYXJrZXIuZGVzY3JpcHRpb247CisgICAgICAgICAgICAgICAg
c3RhcnRDb3JyZWN0aW9uUGFuZWxUaW1lcihDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVS
ZXZlcnNpb24pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICB9CisjZW5kaWYgLy8gU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTAogfQogCiB2b2lk
IEVkaXRvcjo6cmVzcG9uZFRvQ2hhbmdlZENvbnRlbnRzKGNvbnN0IFZpc2libGVTZWxlY3Rpb24m
IGVuZGluZ1NlbGVjdGlvbikKQEAgLTk5OCwxMCArMTA0MiwxMyBAQCBzdGF0aWMgdm9pZCBkaXNw
YXRjaEVkaXRhYmxlQ29udGVudENoYW5nCiAKIHZvaWQgRWRpdG9yOjphcHBsaWVkRWRpdGluZyhQ
YXNzUmVmUHRyPEVkaXRDb21tYW5kPiBjbWQpCiB7CisgICAgLy8gV2UgbWF5IHN0YXJ0IHJldmVy
c2lvbiBwYW5lbCB0aW1lciBpbiByZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKCkuCisgICAgLy8g
U28gd2Ugc3RvcCB0aGUgdGltZXIgZm9yIGN1cnJlbnQgcGFuZWwgYmVmb3JlIGNhbGxpbmcgY2hh
bmdlU2VsZWN0aW9uQWZ0ZXJDb21tYW5kKCkgbGF0ZXIgaW4gdGhpcyBtZXRob2QuCisgICAgc3Rv
cENvcnJlY3Rpb25QYW5lbFRpbWVyKCk7CiAgICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+dXBkYXRl
TGF5b3V0KCk7Ci0gICAgCisKICAgICBkaXNwYXRjaEVkaXRhYmxlQ29udGVudENoYW5nZWRFdmVu
dHMoKmNtZCk7Ci0gICAgCisKICAgICBWaXNpYmxlU2VsZWN0aW9uIG5ld1NlbGVjdGlvbihjbWQt
PmVuZGluZ1NlbGVjdGlvbigpKTsKICAgICAvLyBEb24ndCBjbGVhciB0aGUgdHlwaW5nIHN0eWxl
IHdpdGggdGhpcyBzZWxlY3Rpb24gY2hhbmdlLiAgV2UgZG8gdGhvc2UgdGhpbmdzIGVsc2V3aGVy
ZSBpZiBuZWNlc3NhcnkuCiAgICAgY2hhbmdlU2VsZWN0aW9uQWZ0ZXJDb21tYW5kKG5ld1NlbGVj
dGlvbiwgZmFsc2UsIGZhbHNlKTsKQEAgLTEwMjAsNyArMTA2Nyw2IEBAIHZvaWQgRWRpdG9yOjph
cHBsaWVkRWRpdGluZyhQYXNzUmVmUHRyPEUKICAgICAgICAgICAgIGNsaWVudCgpLT5yZWdpc3Rl
ckNvbW1hbmRGb3JVbmRvKG1fbGFzdEVkaXRDb21tYW5kKTsKICAgICB9CiAgICAgcmVzcG9uZFRv
Q2hhbmdlZENvbnRlbnRzKG5ld1NlbGVjdGlvbik7Ci0gICAgc3RvcENvcnJlY3Rpb25QYW5lbFRp
bWVyKCk7CiB9CiAKIHZvaWQgRWRpdG9yOjp1bmFwcGxpZWRFZGl0aW5nKFBhc3NSZWZQdHI8RWRp
dENvbW1hbmQ+IGNtZCkKQEAgLTEwNjgsOSArMTExNCw4IEBAIEVkaXRvcjo6RWRpdG9yKEZyYW1l
KiBmcmFtZSkKIAogRWRpdG9yOjp+RWRpdG9yKCkKIHsKLSNpZiBQTEFURk9STShNQUMpICYmICFk
ZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJE
KSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCi0gICAgaWYgKGNsaWVudCgp
KQotICAgICAgICBjbGllbnQoKS0+ZGlzbWlzc0NvcnJlY3Rpb25QYW5lbCh0cnVlKTsKKyNpZiBT
VVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMCisgICAgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChD
b3JyZWN0aW9uV2FzTm90UmVqZWN0ZWQpOwogI2VuZGlmCiB9CiAKQEAgLTE5NjcsNDcgKzIwMTIs
MTAgQEAgdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbQogdm9pZCBFZGl0
b3I6Om1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZ1RvUG9zaXRpb24oY29uc3QgVmlzaWJsZVBv
c2l0aW9uICZwKQogewogI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoQlVJTERJTkdfT05f
VElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpCi0jaWYgIWRlZmluZWQoQlVJ
TERJTkdfT05fU05PV19MRU9QQVJEKQorI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwK
ICAgICAvLyBBcHBseSBwZW5kaW5nIGF1dG9jb3JyZWN0aW9uIGJlZm9yZSBuZXh0IHJvdW5kIG9m
IHNwZWxsIGNoZWNraW5nLgotICAgIGJvb2wgZGlkQXBwbHlDb3JyZWN0aW9uID0gZmFsc2U7Ci0g
ICAgaWYgKG1fcmFuZ2VUb0JlUmVwbGFjZWRCeUNvcnJlY3Rpb24pIHsKLSAgICAgICAgRXhjZXB0
aW9uQ29kZSBlYyA9IDA7Ci0gICAgICAgIFJlZlB0cjxSYW5nZT4gcGFyYWdyYXBoUmFuZ2VDb250
YWluaW5nQ29ycmVjdGlvbiA9IG1fcmFuZ2VUb0JlUmVwbGFjZWRCeUNvcnJlY3Rpb24tPmNsb25l
UmFuZ2UoZWMpOwotICAgICAgICBpZiAoIWVjKSB7Ci0gICAgICAgICAgICBzZXRTdGFydChwYXJh
Z3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLmdldCgpLCBzdGFydE9mUGFyYWdyYXBoKG1f
cmFuZ2VUb0JlUmVwbGFjZWRCeUNvcnJlY3Rpb24tPnN0YXJ0UG9zaXRpb24oKSkpOwotICAgICAg
ICAgICAgc2V0RW5kKHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24uZ2V0KCksIGVu
ZE9mUGFyYWdyYXBoKG1fcmFuZ2VUb0JlUmVwbGFjZWRCeUNvcnJlY3Rpb24tPmVuZFBvc2l0aW9u
KCkpKTsKLSAgICAgICAgICAgIC8vIEFmdGVyIHdlIHJlcGxhY2UgdGhlIHdvcmQgYXQgcmFuZ2Ug
bV9yYW5nZVRvQmVSZXBsYWNlZEJ5Q29ycmVjdGlvbiwgd2UgbmVlZCB0byBhZGQgCi0gICAgICAg
ICAgICAvLyBhdXRvY29ycmVjdGlvbiB1bmRlcmxpbmUgYXQgdGhhdCByYW5nZS4gSG93ZXZlciwg
b25jZSB0aGUgcmVwbGFjZW1lbnQgdG9vayBwbGFjZSwgdGhlCi0gICAgICAgICAgICAvLyB2YWx1
ZSBvZiBtX3JhbmdlVG9CZVJlcGxhY2VkQnlDb3JyZWN0aW9uIGlzIG5vdCB2YWxpZCBhbnltb3Jl
LiBTbyBiZWZvcmUgd2UgY2Fycnkgb3V0Ci0gICAgICAgICAgICAvLyB0aGUgcmVwbGFjZW1lbnQs
IHdlIG5lZWQgdG8gc3RvcmUgdGhlIHN0YXJ0IHBvc2l0aW9uIG9mIG1fcmFuZ2VUb0JlUmVwbGFj
ZWRCeUNvcnJlY3Rpb24KLSAgICAgICAgICAgIC8vIHJlbGF0aXZlIHRvIHRoZSBzdGFydCBwb3Np
dGlvbiBvZiB0aGUgY29udGFpbmluZyBwYXJhZ3JhcGguIFdlIHVzZSBjb3JyZWN0aW9uU3RhcnRP
ZmZzZXRJblBhcmFncmFwaAotICAgICAgICAgICAgLy8gdG8gc3RvcmUgdGhpcyB2YWx1ZS4gSW4g
b3JkZXIgdG8gb2J0YWluIHRoaXMgb2Zmc2V0LCB3ZSBuZWVkIHRvIGZpcnN0IGNyZWF0ZSBhIHJh
bmdlCi0gICAgICAgICAgICAvLyB3aGljaCBzcGFucyBmcm9tIHRoZSBzdGFydCBvZiBwYXJhZ3Jh
cGggdG8gdGhlIHN0YXJ0IHBvc2l0aW9uIG9mIG1fcmFuZ2VUb0JlUmVwbGFjZWRCeUNvcnJlY3Rp
b24uCi0gICAgICAgICAgICBSZWZQdHI8UmFuZ2U+IGNvcnJlY3Rpb25TdGFydE9mZnNldEluUGFy
YWdyYXBoQXNSYW5nZSA9IFJhbmdlOjpjcmVhdGUocGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29y
cmVjdGlvbi0+c3RhcnRDb250YWluZXIoZWMpLT5kb2N1bWVudCgpLCBwYXJhZ3JhcGhSYW5nZUNv
bnRhaW5pbmdDb3JyZWN0aW9uLT5zdGFydFBvc2l0aW9uKCksIHBhcmFncmFwaFJhbmdlQ29udGFp
bmluZ0NvcnJlY3Rpb24tPnN0YXJ0UG9zaXRpb24oKSk7Ci0gICAgICAgICAgICBpZiAoIWVjKSB7
Ci0gICAgICAgICAgICAgICAgUG9zaXRpb24gc3RhcnRQb3NpdGlvbk9mUmFuZ2VUb0JlUmVwbGFj
ZWQgPSBtX3JhbmdlVG9CZVJlcGxhY2VkQnlDb3JyZWN0aW9uLT5zdGFydFBvc2l0aW9uKCk7Ci0g
ICAgICAgICAgICAgICAgY29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGhBc1JhbmdlLT5z
ZXRFbmQoc3RhcnRQb3NpdGlvbk9mUmFuZ2VUb0JlUmVwbGFjZWQuY29udGFpbmVyTm9kZSgpLCBz
dGFydFBvc2l0aW9uT2ZSYW5nZVRvQmVSZXBsYWNlZC5jb21wdXRlT2Zmc2V0SW5Db250YWluZXJO
b2RlKCksIGVjKTsKLSAgICAgICAgICAgICAgICBpZiAoIWVjKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIC8vIFRha2Ugbm90ZSBvZiB0aGUgbG9jYXRpb24gb2YgYXV0b2NvcnJlY3Rpb24gc28gdGhh
dCB3ZSBjYW4gYWRkIG1hcmtlciBhZnRlciB0aGUgcmVwbGFjZW1lbnQgdG9vayBwbGFjZS4KLSAg
ICAgICAgICAgICAgICAgICAgaW50IGNvcnJlY3Rpb25TdGFydE9mZnNldEluUGFyYWdyYXBoID0g
VGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFw
aEFzUmFuZ2UuZ2V0KCkpOwotICAgICAgICAgICAgICAgICAgICBQb3NpdGlvbiBjYXJldFBvc2l0
aW9uID0gbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpLmVuZCgpOwotICAgICAgICAg
ICAgICAgICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlVG9CZVJlcGxhY2VkID0gbV9yYW5nZVRvQmVS
ZXBsYWNlZEJ5Q29ycmVjdGlvbi0+Y2xvbmVSYW5nZShlYyk7Ci0gICAgICAgICAgICAgICAgICAg
IFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uVG9SZXBsYWNlKHJhbmdlVG9CZVJlcGxhY2VkLmdl
dCgpLCBET1dOU1RSRUFNKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fZnJhbWUtPnNlbGVj
dGlvbigpLT5zaG91bGRDaGFuZ2VTZWxlY3Rpb24oc2VsZWN0aW9uVG9SZXBsYWNlKSkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNldFNlbGVjdGlvbihz
ZWxlY3Rpb25Ub1JlcGxhY2UpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGFjZVNlbGVj
dGlvbldpdGhUZXh0KG1fY29ycmVjdGlvblJlcGxhY2VtZW50U3RyaW5nLCBmYWxzZSwgZmFsc2Up
OwotICAgICAgICAgICAgICAgICAgICAgICAgY2FyZXRQb3NpdGlvbi5tb3ZlVG9PZmZzZXQoY2Fy
ZXRQb3NpdGlvbi5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSArIG1fY29ycmVjdGlvblJlcGxhY2Vt
ZW50U3RyaW5nLmxlbmd0aCgpIC0gbV9zdHJpbmdUb0JlUmVwbGFjZWRCeUNvcnJlY3Rpb24ubGVu
Z3RoKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgUmVmUHRyPFJhbmdlPiByZXBsYWNlbWVu
dFJhbmdlID0gVGV4dEl0ZXJhdG9yOjpzdWJyYW5nZShwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdD
b3JyZWN0aW9uLmdldCgpLCBjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaCwgbV9jb3Jy
ZWN0aW9uUmVwbGFjZW1lbnRTdHJpbmcubGVuZ3RoKCkpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgcmVwbGFjZW1lbnRSYW5nZS0+c3RhcnRDb250YWluZXIoKS0+ZG9jdW1lbnQoKS0+bWFya2Vy
cygpLT5hZGRNYXJrZXIocmVwbGFjZW1lbnRSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlJl
cGxhY2VtZW50LCBtX2NvcnJlY3Rpb25SZXBsYWNlbWVudFN0cmluZyk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICByZXBsYWNlbWVudFJhbmdlLT5zdGFydENvbnRhaW5lcigpLT5kb2N1bWVudCgp
LT5tYXJrZXJzKCktPmFkZE1hcmtlcihyZXBsYWNlbWVudFJhbmdlLmdldCgpLCBEb2N1bWVudE1h
cmtlcjo6Q29ycmVjdGlvbkluZGljYXRvcik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX2Zy
YW1lLT5zZWxlY3Rpb24oKS0+bW92ZVRvKGNhcmV0UG9zaXRpb24sIGZhbHNlKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGRpZEFwcGx5Q29ycmVjdGlvbiA9IHRydWU7Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICAgICAgbV9yYW5nZVRvQmVSZXBsYWNlZEJ5Q29ycmVjdGlvbi5jbGVhcigpOwotICAgIH0KKyAg
ICBhcHBseUNvcnJlY3Rpb25QYW5lbEluZm8odHJ1ZSk7CisgICAgbV9jb3JyZWN0aW9uUGFuZWxJ
bmZvLm1fcmFuZ2VUb0JlUmVwbGFjZWQuY2xlYXIoKTsKICNlbmRpZgogCiAgICAgVGV4dENoZWNr
aW5nT3B0aW9ucyB0ZXh0Q2hlY2tpbmdPcHRpb25zID0gMDsKQEAgLTIyNDMsNyArMjI1MSw3IEBA
IHZvaWQgRWRpdG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3IKICAgICB9CiAgICAgY2xp
ZW50KCktPmNoZWNrVGV4dE9mUGFyYWdyYXBoKHBhcmFncmFwaFN0cmluZy5jaGFyYWN0ZXJzKCks
IHBhcmFncmFwaExlbmd0aCwgY2hlY2tpbmdUeXBlcywgcmVzdWx0cyk7CiAKLSNpZiBQTEFURk9S
TShNQUMpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElO
R19PTl9MRU9QQVJEKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCisjaWYg
U1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTAogICAgIC8vIElmIHRoaXMgY2hlY2tpbmcgaXMg
b25seSBmb3Igc2hvd2luZyBjb3JyZWN0aW9uIHBhbmVsLCB3ZSBzaG91bGRuJ3QgYm90aGVyIHRv
IG1hcmsgbWlzc3BlbGxpbmdzLgogICAgIGlmIChzaG91bGRTaG93Q29ycmVjdGlvblBhbmVsKQog
ICAgICAgICBzaG91bGRNYXJrU3BlbGxpbmcgPSBmYWxzZTsKQEAgLTIzMjgsNyArMjMzNiw3IEBA
IHZvaWQgRWRpdG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3IKICAgICAgICAgICAgICAg
ICB9IGVsc2UgaWYgKGNhbkVkaXQoKSAmJiBzaG91bGRJbnNlcnRUZXh0KHJlc3VsdC0+cmVwbGFj
ZW1lbnQsIHJhbmdlVG9SZXBsYWNlLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb25UeXBlZCkpIHsK
ICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC0+dHlwZSA9PSBUZXh0Q2hlY2tpbmdUeXBl
Q29ycmVjdGlvbikKICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VkU3RyaW5nID0gcGxh
aW5UZXh0KHJhbmdlVG9SZXBsYWNlLmdldCgpKTsKLSNpZiBQTEFURk9STShNQUMpICYmICFkZWZp
bmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKSAm
JiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCisjaWYgU1VQUE9SVF9BVVRPQ09S
UkVDVElPTl9QQU5FTAogICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkU2hvd0NvcnJlY3Rp
b25QYW5lbCAmJiByZXN1bHRMb2NhdGlvbiArIHJlc3VsdExlbmd0aCA9PSBzcGVsbGluZ1Jhbmdl
RW5kT2Zmc2V0ICYmIHJlc3VsdC0+dHlwZSA9PSBUZXh0Q2hlY2tpbmdUeXBlQ29ycmVjdGlvbikg
ewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2Ugb25seSBzaG93IHRoZSBjb3JyZWN0aW9u
IHBhbmVsIG9uIHRoZSBsYXN0IHdvcmQuCiAgICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3I8
RmxvYXRRdWFkPiB0ZXh0UXVhZHM7CkBAIC0yMzM3LDEwICsyMzQ1LDExIEBAIHZvaWQgRWRpdG9y
OjptYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3IKICAgICAgICAgICAgICAgICAgICAgICAgIEZs
b2F0UmVjdCB0b3RhbEJvdW5kaW5nQm94OwogICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChW
ZWN0b3I8RmxvYXRRdWFkPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSB0ZXh0UXVhZHMuYmVnaW4oKTsg
aXQgPCBlbmQ7ICsraXQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG90YWxCb3VuZGlu
Z0JveC51bml0ZShpdC0+Ym91bmRpbmdCb3goKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBt
X3JhbmdlVG9CZVJlcGxhY2VkQnlDb3JyZWN0aW9uID0gcmFuZ2VUb1JlcGxhY2U7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBtX3N0cmluZ1RvQmVSZXBsYWNlZEJ5Q29ycmVjdGlvbiA9IHJlcGxh
Y2VkU3RyaW5nOwotICAgICAgICAgICAgICAgICAgICAgICAgbV9jb3JyZWN0aW9uUmVwbGFjZW1l
bnRTdHJpbmcgPSByZXN1bHQtPnJlcGxhY2VtZW50OwotICAgICAgICAgICAgICAgICAgICAgICAg
Y2xpZW50KCktPnNob3dDb3JyZWN0aW9uUGFuZWwodG90YWxCb3VuZGluZ0JveCwgbV9zdHJpbmdU
b0JlUmVwbGFjZWRCeUNvcnJlY3Rpb24sIHJlc3VsdC0+cmVwbGFjZW1lbnQsIHRoaXMpOworICAg
ICAgICAgICAgICAgICAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLm1fcmFuZ2VUb0JlUmVw
bGFjZWQgPSByYW5nZVRvUmVwbGFjZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fY29ycmVj
dGlvblBhbmVsSW5mby5tX3JlcGxhY2VkU3RyaW5nID0gcmVwbGFjZWRTdHJpbmc7CisgICAgICAg
ICAgICAgICAgICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ubV9yZXBsYWNlbWVudFN0cmlu
ZyA9IHJlc3VsdC0+cmVwbGFjZW1lbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2NvcnJl
Y3Rpb25QYW5lbEluZm8ubV9pc0FjdGl2ZSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAg
ICBjbGllbnQoKS0+c2hvd0NvcnJlY3Rpb25QYW5lbChtX2NvcnJlY3Rpb25QYW5lbEluZm8ubV9w
YW5lbFR5cGUsIHRvdGFsQm91bmRpbmdCb3gsIG1fY29ycmVjdGlvblBhbmVsSW5mby5tX3JlcGxh
Y2VkU3RyaW5nLCByZXN1bHQtPnJlcGxhY2VtZW50LCB0aGlzKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIGRvUmVwbGFjZW1lbnQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgfQogI2Vu
ZGlmCkBAIC0yMzU0LDcgKzIzNjMsNyBAQCB2b2lkIEVkaXRvcjo6bWFya0FsbE1pc3NwZWxsaW5n
c0FuZEJhZEdyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWRkIGEgbWFya2VyIHNv
IHRoYXQgY29ycmVjdGlvbnMgY2FuIGVhc2lseSBiZSB1bmRvbmUgYW5kIHdvbid0IGJlIHJlLWNv
cnJlY3RlZC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWZQdHI8UmFuZ2U+IHJlcGxh
Y2VkUmFuZ2UgPSBUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKHBhcmFncmFwaFJhbmdlLmdldCgpLCBy
ZXN1bHRMb2NhdGlvbiwgcmVwbGFjZW1lbnRMZW5ndGgpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlcGxhY2VkUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCktPmRvY3VtZW50KCktPm1hcmtl
cnMoKS0+YWRkTWFya2VyKHJlcGxhY2VkUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpSZXBs
YWNlbWVudCwgcmVwbGFjZWRTdHJpbmcpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
cGxhY2VkUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCktPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+YWRk
TWFya2VyKHJlcGxhY2VkUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpDb3JyZWN0aW9uSW5k
aWNhdG9yKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBsYWNlZFJhbmdlLT5zdGFy
dENvbnRhaW5lcigpLT5kb2N1bWVudCgpLT5tYXJrZXJzKCktPmFkZE1hcmtlcihyZXBsYWNlZFJh
bmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6Q29ycmVjdGlvbkluZGljYXRvciwgcmVwbGFjZWRT
dHJpbmcpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgfQpAQCAtMjQxNyw2MCArMjQyNiw5NyBAQCB2b2lkIEVkaXRvcjo6
bWFya01pc3NwZWxsaW5nc0FuZEJhZEdyYW1tCiAKIHZvaWQgRWRpdG9yOjpjb3JyZWN0aW9uUGFu
ZWxUaW1lckZpcmVkKFRpbWVyPEVkaXRvcj4qKQogewotI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRl
ZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQp
Ci0gICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24oZnJhbWUoKS0+c2VsZWN0aW9uKCktPnNl
bGVjdGlvbigpKTsKLSAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnQoc2VsZWN0aW9uLnN0YXJ0KCks
IHNlbGVjdGlvbi5hZmZpbml0eSgpKTsKLSAgICBWaXNpYmxlUG9zaXRpb24gcCA9IHN0YXJ0T2ZX
b3JkKHN0YXJ0LCBMZWZ0V29yZElmT25Cb3VuZGFyeSk7Ci0gICAgVmlzaWJsZVNlbGVjdGlvbiBh
ZGphY2VudFdvcmRzID0gVmlzaWJsZVNlbGVjdGlvbihwLCBzdGFydCk7Ci0gICAgbWFya0FsbE1p
c3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyhNYXJrU3BlbGxpbmcgfCBTaG93Q29ycmVj
dGlvblBhbmVsLCBhZGphY2VudFdvcmRzLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIDApOwor
I2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwKKyAgICBpZiAobV9jb3JyZWN0aW9uUGFu
ZWxJbmZvLm1fcGFuZWxUeXBlID09IENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZUNvcnJl
Y3Rpb24pIHsKKyAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24oZnJhbWUoKS0+c2Vs
ZWN0aW9uKCktPnNlbGVjdGlvbigpKTsKKyAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0KHNl
bGVjdGlvbi5zdGFydCgpLCBzZWxlY3Rpb24uYWZmaW5pdHkoKSk7CisgICAgICAgIFZpc2libGVQ
b3NpdGlvbiBwID0gc3RhcnRPZldvcmQoc3RhcnQsIExlZnRXb3JkSWZPbkJvdW5kYXJ5KTsKKyAg
ICAgICAgVmlzaWJsZVNlbGVjdGlvbiBhZGphY2VudFdvcmRzID0gVmlzaWJsZVNlbGVjdGlvbihw
LCBzdGFydCk7CisgICAgICAgIG1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5n
ZXMoTWFya1NwZWxsaW5nIHwgU2hvd0NvcnJlY3Rpb25QYW5lbCwgYWRqYWNlbnRXb3Jkcy50b05v
cm1hbGl6ZWRSYW5nZSgpLmdldCgpLCAwKTsKKyAgICB9IGVsc2UgeworICAgICAgICBTdHJpbmcg
Y3VycmVudFdvcmQgPSBwbGFpblRleHQobV9jb3JyZWN0aW9uUGFuZWxJbmZvLm1fcmFuZ2VUb0Jl
UmVwbGFjZWQuZ2V0KCkpOworICAgICAgICBWZWN0b3I8RmxvYXRRdWFkPiB0ZXh0UXVhZHM7Cisg
ICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5tX3JhbmdlVG9CZVJlcGxhY2VkLT5nZXRCb3Jk
ZXJBbmRUZXh0UXVhZHModGV4dFF1YWRzKTsKKyAgICAgICAgVmVjdG9yPEZsb2F0UXVhZD46OmNv
bnN0X2l0ZXJhdG9yIGVuZCA9IHRleHRRdWFkcy5lbmQoKTsKKyAgICAgICAgRmxvYXRSZWN0IHRv
dGFsQm91bmRpbmdCb3g7CisgICAgICAgIGZvciAoVmVjdG9yPEZsb2F0UXVhZD46OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gdGV4dFF1YWRzLmJlZ2luKCk7IGl0IDwgZW5kOyArK2l0KQorICAgICAgICAg
ICAgdG90YWxCb3VuZGluZ0JveC51bml0ZShpdC0+Ym91bmRpbmdCb3goKSk7CisgICAgICAgIG1f
Y29ycmVjdGlvblBhbmVsSW5mby5tX2lzQWN0aXZlID0gdHJ1ZTsKKyAgICAgICAgbV9jb3JyZWN0
aW9uUGFuZWxJbmZvLm1fcmVwbGFjZWRTdHJpbmcgPSBjdXJyZW50V29yZDsKKyAgICAgICAgY2xp
ZW50KCktPnNob3dDb3JyZWN0aW9uUGFuZWwobV9jb3JyZWN0aW9uUGFuZWxJbmZvLm1fcGFuZWxU
eXBlLCB0b3RhbEJvdW5kaW5nQm94LCBtX2NvcnJlY3Rpb25QYW5lbEluZm8ubV9yZXBsYWNlZFN0
cmluZywgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLm1fcmVwbGFjZW1lbnRTdHJpbmcsIHRoaXMpOwor
ICAgIH0KICNlbmRpZgogfQogCiB2b2lkIEVkaXRvcjo6aGFuZGxlUmVqZWN0ZWRDb3JyZWN0aW9u
KCkKIHsKLSAgICBSYW5nZSogcmVwbGFjZWRSYW5nZSA9IG1fcmFuZ2VUb0JlUmVwbGFjZWRCeUNv
cnJlY3Rpb24uZ2V0KCk7CisgICAgUmFuZ2UqIHJlcGxhY2VkUmFuZ2UgPSBtX2NvcnJlY3Rpb25Q
YW5lbEluZm8ubV9yYW5nZVRvQmVSZXBsYWNlZC5nZXQoKTsKICAgICBpZiAoIXJlcGxhY2VkUmFu
Z2UgfHwgbV9mcmFtZS0+ZG9jdW1lbnQoKSAhPSByZXBsYWNlZFJhbmdlLT5vd25lckRvY3VtZW50
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHJlcGxhY2VkUmFuZ2UtPnN0YXJ0Q29udGFpbmVy
KCktPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+YWRkTWFya2VyKHJlcGxhY2VkUmFuZ2UsIERvY3Vt
ZW50TWFya2VyOjpSZWplY3RlZENvcnJlY3Rpb24sIG1fc3RyaW5nVG9CZVJlcGxhY2VkQnlDb3Jy
ZWN0aW9uKTsKLSAgICBtX3JhbmdlVG9CZVJlcGxhY2VkQnlDb3JyZWN0aW9uLmNsZWFyKCk7Cisg
ICAgaWYgKG1fY29ycmVjdGlvblBhbmVsSW5mby5tX3BhbmVsVHlwZSA9PSBDb3JyZWN0aW9uUGFu
ZWxJbmZvOjpQYW5lbFR5cGVDb3JyZWN0aW9uKQorICAgICAgICByZXBsYWNlZFJhbmdlLT5zdGFy
dENvbnRhaW5lcigpLT5kb2N1bWVudCgpLT5tYXJrZXJzKCktPmFkZE1hcmtlcihyZXBsYWNlZFJh
bmdlLCBEb2N1bWVudE1hcmtlcjo6UmVqZWN0ZWRDb3JyZWN0aW9uLCBtX2NvcnJlY3Rpb25QYW5l
bEluZm8ubV9yZXBsYWNlZFN0cmluZyk7CisgICAgZWxzZSB7CisgICAgICAgIG1fY29ycmVjdGlv
blBhbmVsSW5mby5tX2lzQWN0aXZlID0gZmFsc2U7CisgICAgICAgIGFwcGx5Q29ycmVjdGlvblBh
bmVsSW5mbyhmYWxzZSk7CisgICAgfQorICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5tX3Jhbmdl
VG9CZVJlcGxhY2VkLmNsZWFyKCk7CiB9CiAKLXZvaWQgRWRpdG9yOjpzdGFydENvcnJlY3Rpb25Q
YW5lbFRpbWVyKCkKK3ZvaWQgRWRpdG9yOjpzdGFydENvcnJlY3Rpb25QYW5lbFRpbWVyKENvcnJl
Y3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZSB0eXBlKQogewotI2lmIFBMQVRGT1JNKE1BQykgJiYg
IWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BB
UkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKLSAgICBzdGF0aWMgY29u
c3QgZG91YmxlIGNvcnJlY3Rpb25QYW5lbFRpbWVySW50ZXJ2YWwgPSAwLjM7CisjaWYgU1VQUE9S
VF9BVVRPQ09SUkVDVElPTl9QQU5FTAorICAgIGNvbnN0IGRvdWJsZSBjb3JyZWN0aW9uUGFuZWxU
aW1lckludGVydmFsID0gMC4zOwogICAgIGlmIChpc0F1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlv
bkVuYWJsZWQoKSkgewotICAgICAgICBtX3JhbmdlVG9CZVJlcGxhY2VkQnlDb3JyZWN0aW9uLmNs
ZWFyKCk7CisgICAgICAgIGlmICh0eXBlID09IENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlw
ZUNvcnJlY3Rpb24pCisgICAgICAgICAgICAvLyBJZiB0eXBlIGlzIFBhbmVsVHlwZVJldmVyc2lv
biwgdGhlbiB0aGUgbmV3IHJhbmdlIGhhcyBiZWVuIHNldC4gU28gd2Ugc2hvdWxkbid0IGNsZWFy
IGl0LgorICAgICAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLm1fcmFuZ2VUb0JlUmVwbGFj
ZWQuY2xlYXIoKTsKKyAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLm1fcGFuZWxUeXBlID0g
dHlwZTsKICAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxUaW1lci5zdGFydE9uZVNob3QoY29ycmVj
dGlvblBhbmVsVGltZXJJbnRlcnZhbCk7CiAgICAgfQorI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0o
dHlwZSk7CiAjZW5kaWYKIH0KIAogdm9pZCBFZGl0b3I6OnN0b3BDb3JyZWN0aW9uUGFuZWxUaW1l
cigpCiB7Ci0jaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikg
JiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05f
U05PV19MRU9QQVJEKQorI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwKICAgICBtX2Nv
cnJlY3Rpb25QYW5lbFRpbWVyLnN0b3AoKTsKICNlbmRpZgogfQogCiB2b2lkIEVkaXRvcjo6aGFu
ZGxlQ2FuY2VsT3BlcmF0aW9uKCkKIHsKLSNpZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVkKEJV
SUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKSAmJiAhZGVm
aW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCisjaWYgU1VQUE9SVF9BVVRPQ09SUkVDVElP
Tl9QQU5FTAorICAgIGlmICghbV9jb3JyZWN0aW9uUGFuZWxJbmZvLm1faXNBY3RpdmUpCisgICAg
ICAgIHJldHVybjsKKyAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ubV9pc0FjdGl2ZSA9IGZhbHNl
OwogICAgIGlmIChjbGllbnQoKSkKLSAgICAgICAgY2xpZW50KCktPmRpc21pc3NDb3JyZWN0aW9u
UGFuZWwoZmFsc2UpOworICAgICAgICBjbGllbnQoKS0+ZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChD
b3JyZWN0aW9uV2FzUmVqZWN0ZWQpOwogI2VuZGlmCiB9CiAKIGJvb2wgRWRpdG9yOjppc1Nob3dp
bmdDb3JyZWN0aW9uUGFuZWwoKQogewotI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoQlVJ
TERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpICYmICFkZWZp
bmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKKyNpZiBTVVBQT1JUX0FVVE9DT1JSRUNUSU9O
X1BBTkVMCiAgICAgaWYgKGNsaWVudCgpKQogICAgICAgICByZXR1cm4gY2xpZW50KCktPmlzU2hv
d2luZ0NvcnJlY3Rpb25QYW5lbCgpOwogI2VuZGlmCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCit2
b2lkIEVkaXRvcjo6ZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChDb3JyZWN0aW9uV2FzUmVqZWN0ZWRP
ck5vdCBjb3JyZWN0aW9uV2FzUmVqZWN0ZWRPck5vdCkKK3sKKyNpZiBTVVBQT1JUX0FVVE9DT1JS
RUNUSU9OX1BBTkVMCisgICAgaWYgKCFtX2NvcnJlY3Rpb25QYW5lbEluZm8ubV9pc0FjdGl2ZSkK
KyAgICAgICAgcmV0dXJuOworICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5tX2lzQWN0aXZlID0g
ZmFsc2U7CisgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLm1fcmFuZ2VUb0JlUmVwbGFjZWQuY2xl
YXIoKTsKKyAgICBpZiAoY2xpZW50KCkpCisgICAgICAgIGNsaWVudCgpLT5kaXNtaXNzQ29ycmVj
dGlvblBhbmVsKGNvcnJlY3Rpb25XYXNSZWplY3RlZE9yTm90KTsKKyNlbmRpZgorfQogdm9pZCBF
ZGl0b3I6OnJlbW92ZVNwZWxsQW5kQ29ycmVjdGlvbk1hcmtlcnNGcm9tV29yZHNUb0JlRWRpdGVk
KGJvb2wgZG9Ob3RSZW1vdmVJZlNlbGVjdGlvbkF0V29yZEJvdW5kYXJ5KQogewogICAgIC8vIFdl
IHdhbnQgdG8gcmVtb3ZlIHRoZSBtYXJrZXJzIGZyb20gYSB3b3JkIGlmIGFuIGVkaXRpbmcgY29t
bWFuZCB3aWxsIGNoYW5nZSB0aGUgd29yZC4gVGhpcyBjYW4gaGFwcGVuIGluIG9uZSBvZgpAQCAt
MjU2OCw2ICsyNjE0LDU0IEBAIHZvaWQgRWRpdG9yOjpyZW1vdmVTcGVsbEFuZENvcnJlY3Rpb25N
YXIKICAgICAgICAgZG9jdW1lbnQtPm1hcmtlcnMoKS0+cmVtb3ZlTWFya2VycyhwYWlySXRlcmF0
b3ItPmZpcnN0LmdldCgpLCBwYWlySXRlcmF0b3ItPnNlY29uZCk7CiB9CiAKK3ZvaWQgRWRpdG9y
OjphcHBseUNvcnJlY3Rpb25QYW5lbEluZm8oYm9vbCBhZGRDb3JyZWN0aW9uSW5kaWNhdG9yTWFy
a2VyKQoreworICAgIGlmICghbV9jb3JyZWN0aW9uUGFuZWxJbmZvLm1fcmFuZ2VUb0JlUmVwbGFj
ZWQpCisgICAgICAgIHJldHVybjsKKworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIFJl
ZlB0cjxSYW5nZT4gcGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbiA9IG1fY29ycmVj
dGlvblBhbmVsSW5mby5tX3JhbmdlVG9CZVJlcGxhY2VkLT5jbG9uZVJhbmdlKGVjKTsKKyAgICBp
ZiAoZWMpCisgICAgICAgIHJldHVybjsKKworICAgIHNldFN0YXJ0KHBhcmFncmFwaFJhbmdlQ29u
dGFpbmluZ0NvcnJlY3Rpb24uZ2V0KCksIHN0YXJ0T2ZQYXJhZ3JhcGgobV9jb3JyZWN0aW9uUGFu
ZWxJbmZvLm1fcmFuZ2VUb0JlUmVwbGFjZWQtPnN0YXJ0UG9zaXRpb24oKSkpOworICAgIHNldEVu
ZChwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLmdldCgpLCBlbmRPZlBhcmFncmFw
aChtX2NvcnJlY3Rpb25QYW5lbEluZm8ubV9yYW5nZVRvQmVSZXBsYWNlZC0+ZW5kUG9zaXRpb24o
KSkpOworCisgICAgLy8gQWZ0ZXIgd2UgcmVwbGFjZSB0aGUgd29yZCBhdCByYW5nZSBtX3Jhbmdl
VG9CZVJlcGxhY2VkLCB3ZSBuZWVkIHRvIGFkZCBtYXJrZXJzIHRvIHRoYXQgcmFuZ2UuCisgICAg
Ly8gSG93ZXZlciwgb25jZSB0aGUgcmVwbGFjZW1lbnQgdG9vayBwbGFjZSwgdGhlIHZhbHVlIG9m
IG1fcmFuZ2VUb0JlUmVwbGFjZWQgaXMgbm90IHZhbGlkIGFueW1vcmUuCisgICAgLy8gU28gYmVm
b3JlIHdlIGNhcnJ5IG91dCB0aGUgcmVwbGFjZW1lbnQsIHdlIG5lZWQgdG8gc3RvcmUgdGhlIHN0
YXJ0IHBvc2l0aW9uIG9mIG1fcmFuZ2VUb0JlUmVwbGFjZWQKKyAgICAvLyByZWxhdGl2ZSB0byB0
aGUgc3RhcnQgcG9zaXRpb24gb2YgdGhlIGNvbnRhaW5pbmcgcGFyYWdyYXBoLiBXZSB1c2UgY29y
cmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGgKKyAgICAvLyB0byBzdG9yZSB0aGlzIHZhbHVl
LiBJbiBvcmRlciB0byBvYnRhaW4gdGhpcyBvZmZzZXQsIHdlIG5lZWQgdG8gZmlyc3QgY3JlYXRl
IGEgcmFuZ2UKKyAgICAvLyB3aGljaCBzcGFucyBmcm9tIHRoZSBzdGFydCBvZiBwYXJhZ3JhcGgg
dG8gdGhlIHN0YXJ0IHBvc2l0aW9uIG9mIG1fcmFuZ2VUb0JlUmVwbGFjZWQuCisgICAgUmVmUHRy
PFJhbmdlPiBjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaEFzUmFuZ2UgPSBSYW5nZTo6
Y3JlYXRlKHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24tPnN0YXJ0Q29udGFpbmVy
KGVjKS0+ZG9jdW1lbnQoKSwgcGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi0+c3Rh
cnRQb3NpdGlvbigpLCBwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLT5zdGFydFBv
c2l0aW9uKCkpOworICAgIGlmIChlYykKKyAgICAgICAgcmV0dXJuOworCisgICAgUG9zaXRpb24g
c3RhcnRQb3NpdGlvbk9mUmFuZ2VUb0JlUmVwbGFjZWQgPSBtX2NvcnJlY3Rpb25QYW5lbEluZm8u
bV9yYW5nZVRvQmVSZXBsYWNlZC0+c3RhcnRQb3NpdGlvbigpOworICAgIGNvcnJlY3Rpb25TdGFy
dE9mZnNldEluUGFyYWdyYXBoQXNSYW5nZS0+c2V0RW5kKHN0YXJ0UG9zaXRpb25PZlJhbmdlVG9C
ZVJlcGxhY2VkLmNvbnRhaW5lck5vZGUoKSwgc3RhcnRQb3NpdGlvbk9mUmFuZ2VUb0JlUmVwbGFj
ZWQuY29tcHV0ZU9mZnNldEluQ29udGFpbmVyTm9kZSgpLCBlYyk7CisgICAgaWYgKGVjKQorICAg
ICAgICByZXR1cm47CisKKyAgICAvLyBUYWtlIG5vdGUgb2YgdGhlIGxvY2F0aW9uIG9mIGF1dG9j
b3JyZWN0aW9uIHNvIHRoYXQgd2UgY2FuIGFkZCBtYXJrZXIgYWZ0ZXIgdGhlIHJlcGxhY2VtZW50
IHRvb2sgcGxhY2UuCisgICAgaW50IGNvcnJlY3Rpb25TdGFydE9mZnNldEluUGFyYWdyYXBoID0g
VGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFw
aEFzUmFuZ2UuZ2V0KCkpOworICAgIFBvc2l0aW9uIGNhcmV0UG9zaXRpb24gPSBtX2ZyYW1lLT5z
ZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkuZW5kKCk7CisKKyAgICAvLyBDbG9uZSB0aGUgcmFuZ2Us
IHNpbmNlIHRoZSBjYWxsZXIgb2YgdGhpcyBtZXRob2QgbWF5IHdhbnQgdG8ga2VlcCB0aGUgb3Jp
Z2luYWwgcmFuZ2UgYXJvdW5kLgorICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2VUb0JlUmVwbGFjZWQg
PSBtX2NvcnJlY3Rpb25QYW5lbEluZm8ubV9yYW5nZVRvQmVSZXBsYWNlZC0+Y2xvbmVSYW5nZShl
Yyk7CisgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb25Ub1JlcGxhY2UocmFuZ2VUb0JlUmVw
bGFjZWQuZ2V0KCksIERPV05TVFJFQU0pOworICAgIGlmIChtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+
c2hvdWxkQ2hhbmdlU2VsZWN0aW9uKHNlbGVjdGlvblRvUmVwbGFjZSkpIHsKKyAgICAgICAgbV9m
cmFtZS0+c2VsZWN0aW9uKCktPnNldFNlbGVjdGlvbihzZWxlY3Rpb25Ub1JlcGxhY2UpOworICAg
ICAgICByZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQobV9jb3JyZWN0aW9uUGFuZWxJbmZvLm1fcmVw
bGFjZW1lbnRTdHJpbmcsIGZhbHNlLCBmYWxzZSk7CisgICAgICAgIGNhcmV0UG9zaXRpb24ubW92
ZVRvT2Zmc2V0KGNhcmV0UG9zaXRpb24ub2Zmc2V0SW5Db250YWluZXJOb2RlKCkgKyBtX2NvcnJl
Y3Rpb25QYW5lbEluZm8ubV9yZXBsYWNlbWVudFN0cmluZy5sZW5ndGgoKSAtIG1fY29ycmVjdGlv
blBhbmVsSW5mby5tX3JlcGxhY2VkU3RyaW5nLmxlbmd0aCgpKTsKKyAgICAgICAgc2V0RW5kKHBh
cmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24uZ2V0KCksIGVuZE9mUGFyYWdyYXBoKGNh
cmV0UG9zaXRpb24pKTsKKyAgICAgICAgUmVmUHRyPFJhbmdlPiByZXBsYWNlbWVudFJhbmdlID0g
VGV4dEl0ZXJhdG9yOjpzdWJyYW5nZShwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9u
LmdldCgpLCBjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaCwgbV9jb3JyZWN0aW9uUGFu
ZWxJbmZvLm1fcmVwbGFjZW1lbnRTdHJpbmcubGVuZ3RoKCkpOworICAgICAgICByZXBsYWNlbWVu
dFJhbmdlLT5zdGFydENvbnRhaW5lcigpLT5kb2N1bWVudCgpLT5tYXJrZXJzKCktPmFkZE1hcmtl
cihyZXBsYWNlbWVudFJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQsIG1f
Y29ycmVjdGlvblBhbmVsSW5mby5tX3JlcGxhY2VtZW50U3RyaW5nKTsKKyAgICAgICAgaWYgKGFk
ZENvcnJlY3Rpb25JbmRpY2F0b3JNYXJrZXIpCisgICAgICAgICAgICByZXBsYWNlbWVudFJhbmdl
LT5zdGFydENvbnRhaW5lcigpLT5kb2N1bWVudCgpLT5tYXJrZXJzKCktPmFkZE1hcmtlcihyZXBs
YWNlbWVudFJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6Q29ycmVjdGlvbkluZGljYXRvciwg
bV9jb3JyZWN0aW9uUGFuZWxJbmZvLm1fcmVwbGFjZWRTdHJpbmcpOworICAgICAgICBtX2ZyYW1l
LT5zZWxlY3Rpb24oKS0+bW92ZVRvKGNhcmV0UG9zaXRpb24sIGZhbHNlKTsKKyAgICB9Cit9CisK
IFBhc3NSZWZQdHI8UmFuZ2U+IEVkaXRvcjo6cmFuZ2VGb3JQb2ludChjb25zdCBJbnRQb2ludCYg
d2luZG93UG9pbnQpCiB7CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gbV9mcmFtZS0+ZG9jdW1l
bnRBdFBvaW50KHdpbmRvd1BvaW50KTsKQEAgLTI4MzQsNyArMjkyOCw3IEBAIHZvaWQgRWRpdG9y
OjpjaGFuZ2VTZWxlY3Rpb25BZnRlckNvbW1hbmQKICAgICBpZiAobmV3U2VsZWN0aW9uLnN0YXJ0
KCkuaXNPcnBoYW4oKSB8fCBuZXdTZWxlY3Rpb24uZW5kKCkuaXNPcnBoYW4oKSkKICAgICAgICAg
cmV0dXJuOwogCi0jaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdF
UikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdf
T05fU05PV19MRU9QQVJEKQorI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwKICAgICAv
LyBDaGVjayB0byBzZWUgaWYgdGhlIGNvbW1hbmQgaW50cm9kdWNlZCBwYXJhZ3JhcGggc2VwYXJh
dG9yLiBJZiBpdCBkaWQsIHdlIHJlbW92ZSBleGlzdGluZyBhdXRvY29ycmVjdGlvbiB1bmRlcmxp
bmVzLgogICAgIC8vIFRoaXMgaXMgaW4gY29uc2lzdGVuY3kgd2l0aCB0aGUgYmVoYXZpb3IgaW4g
QXBwS2l0CiAgICAgaWYgKCFpblNhbWVQYXJhZ3JhcGgobV9mcmFtZS0+c2VsZWN0aW9uKCktPnNl
bGVjdGlvbigpLnZpc2libGVTdGFydCgpLCBuZXdTZWxlY3Rpb24udmlzaWJsZUVuZCgpKSkKSW5k
ZXg6IFdlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRp
bmcvRWRpdG9yLmgJKHJldmlzaW9uIDcxMzAwKQorKysgV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yOCwyMyArMjgsMTMgQEAKIAogI2luY2x1ZGUgIkNsaXBib2Fy
ZEFjY2Vzc1BvbGljeS5oIgogI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiQ29ycmVjdGlv
blBhbmVsSW5mby5oIgogI2luY2x1ZGUgIkVkaXRBY3Rpb24uaCIKICNpbmNsdWRlICJFZGl0aW5n
QmVoYXZpb3IuaCIKICNpbmNsdWRlICJFZGl0b3JEZWxldGVBY3Rpb24uaCIKICNpbmNsdWRlICJF
ZGl0b3JJbnNlcnRBY3Rpb24uaCIKICNpbmNsdWRlICJTZWxlY3Rpb25Db250cm9sbGVyLmgiCiAK
LSNpZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVm
aW5lZChCVUlMRElOR19PTl9MRU9QQVJEKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xF
T1BBUkQpCi0vLyBTb21lIHBsYXRmb3JtcyBwcm92aWRlIFVJIGZvciBzdWdnZXN0aW5nIGF1dG9j
b3JyZWN0aW9uLgotI2RlZmluZSBTVVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMIDEKLS8vIFNv
bWUgcGxhdGZvcm1zIHVzZSBzcGVsbGluZyBhbmQgYXV0b2NvcnJlY3Rpb24gbWFya2VycyB0byBw
cm92aWRlIHZpc3VhbCBjdWUuCi0vLyBPbiBzdWNoIHBsYXRmb3JtLCBpZiB3b3JkIHdpdGggbWFy
a2VyIGlzIGVkaXRlZCwgd2UgbmVlZCB0byByZW1vdmUgdGhlIG1hcmtlci4KLSNkZWZpbmUgUkVN
T1ZFX01BUktFUlNfVVBPTl9FRElUSU5HIDEKLSNlbHNlCi0jZGVmaW5lIFNVUFBPUlRfQVVUT0NP
UlJFQ1RJT05fUEFORUwgMAotI2RlZmluZSBSRU1PVkVfTUFSS0VSU19VUE9OX0VESVRJTkcgMAot
I2VuZGlmIC8qICNpZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VS
KSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKSAmJiAhZGVmaW5lZChCVUlMRElOR19P
Tl9TTk9XX0xFT1BBUkQpICovCi0KICNpZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVkKF9fT0JK
Q19fKQogY2xhc3MgTlNEaWN0aW9uYXJ5OwogdHlwZWRlZiBpbnQgTlNXcml0aW5nRGlyZWN0aW9u
OwpAQCAtMzIzLDcgKzMxMyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGFkZFRvS2lsbFJpbmcoUmFu
Z2UqLCBib29sIHByZXBlbmQpOwogCiAgICAgdm9pZCBoYW5kbGVDYW5jZWxPcGVyYXRpb24oKTsK
LSAgICB2b2lkIHN0YXJ0Q29ycmVjdGlvblBhbmVsVGltZXIoKTsKKyAgICB2b2lkIHN0YXJ0Q29y
cmVjdGlvblBhbmVsVGltZXIoQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlKTsKICAgICB2
b2lkIGhhbmRsZVJlamVjdGVkQ29ycmVjdGlvbigpOwogICAgIGJvb2wgaXNTaG93aW5nQ29ycmVj
dGlvblBhbmVsKCk7CiAKQEAgLTM4OSw5ICszNzksNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9z
aG91bGRTdGFydE5ld0tpbGxSaW5nU2VxdWVuY2U7CiAgICAgYm9vbCBtX3Nob3VsZFN0eWxlV2l0
aENTUzsKICAgICBPd25QdHI8S2lsbFJpbmc+IG1fa2lsbFJpbmc7Ci0gICAgUmVmUHRyPFJhbmdl
PiBtX3JhbmdlVG9CZVJlcGxhY2VkQnlDb3JyZWN0aW9uOwotICAgIFN0cmluZyBtX3N0cmluZ1Rv
QmVSZXBsYWNlZEJ5Q29ycmVjdGlvbjsKLSAgICBTdHJpbmcgbV9jb3JyZWN0aW9uUmVwbGFjZW1l
bnRTdHJpbmc7CisgICAgQ29ycmVjdGlvblBhbmVsSW5mbyBtX2NvcnJlY3Rpb25QYW5lbEluZm87
CiAgICAgVGltZXI8RWRpdG9yPiBtX2NvcnJlY3Rpb25QYW5lbFRpbWVyOwogICAgIFZpc2libGVT
ZWxlY3Rpb24gbV9tYXJrOwogICAgIGJvb2wgbV9hcmVNYXJrZWRUZXh0TWF0Y2hlc0hpZ2hsaWdo
dGVkOwpAQCAtNDE4LDYgKzQwNiw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjb3JyZWN0aW9uUGFu
ZWxUaW1lckZpcmVkKFRpbWVyPEVkaXRvcj4qKTsKICAgICBOb2RlKiBmaW5kRXZlbnRUYXJnZXRG
cm9tU2VsZWN0aW9uKCkgY29uc3Q7CiAgICAgdm9pZCBzdG9wQ29ycmVjdGlvblBhbmVsVGltZXIo
KTsKKyAgICB2b2lkIGRpc21pc3NDb3JyZWN0aW9uUGFuZWwoQ29ycmVjdGlvbldhc1JlamVjdGVk
T3JOb3QpOworICAgIHZvaWQgYXBwbHlDb3JyZWN0aW9uUGFuZWxJbmZvKGJvb2wgYWRkQ29ycmVj
dGlvbkluZGljYXRvck1hcmtlcik7CiB9OwogCiBpbmxpbmUgdm9pZCBFZGl0b3I6OnNldFN0YXJ0
TmV3S2lsbFJpbmdTZXF1ZW5jZShib29sIGZsYWcpCkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvRWRp
dG9yQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1h
bmQuY3BwCShyZXZpc2lvbiA3MTMwMCkKKysrIFdlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5k
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA3NCw3ICsxMDc0LDcgQEAgc3RhdGljIGJvb2wgZXhl
Y3V0ZVlhbmtBbmRTZWxlY3QoRnJhbWUqIAogICAgIHJldHVybiB0cnVlOwogfQogCi0jaWYgUExB
VEZPUk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJ
TERJTkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQor
I2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwKIHN0YXRpYyBib29sIGV4ZWN1dGVDYW5j
ZWxPcGVyYXRpb24oRnJhbWUqIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNv
bnN0IFN0cmluZyYpCiB7CiAgICAgZnJhbWUtPmVkaXRvcigpLT5oYW5kbGVDYW5jZWxPcGVyYXRp
b24oKTsKQEAgLTExMjQsNyArMTEyNCw3IEBAIHN0YXRpYyBib29sIHN1cHBvcnRlZFBhc3RlKEZy
YW1lKiBmcmFtZSwKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLSNpZiBQTEFURk9STShNQUMpICYm
ICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9Q
QVJEKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCisjaWYgU1VQUE9SVF9B
VVRPQ09SUkVDVElPTl9QQU5FTAogc3RhdGljIGJvb2wgc3VwcG9ydGVkRGlzbWlzc0NvcnJlY3Rp
b25QYW5lbChGcmFtZSogZnJhbWUsIEVkaXRvckNvbW1hbmRTb3VyY2Ugc291cmNlKQogewogICAg
IHJldHVybiBzdXBwb3J0ZWRGcm9tTWVudU9yS2V5QmluZGluZyhmcmFtZSwgc291cmNlKSAmJiBm
cmFtZS0+ZWRpdG9yKCktPmlzU2hvd2luZ0NvcnJlY3Rpb25QYW5lbCgpOwpAQCAtMTUwNiw3ICsx
NTA2LDcgQEAgc3RhdGljIGNvbnN0IENvbW1hbmRNYXAmIGNyZWF0ZUNvbW1hbmRNYQogICAgICAg
ICB7ICJVbnNlbGVjdCIsIHsgZXhlY3V0ZVVuc2VsZWN0LCBzdXBwb3J0ZWQsIGVuYWJsZWRWaXNp
YmxlU2VsZWN0aW9uLCBzdGF0ZU5vbmUsIHZhbHVlTnVsbCwgbm90VGV4dEluc2VydGlvbiwgZG9O
b3RBbGxvd0V4ZWN1dGlvbldoZW5EaXNhYmxlZCB9IH0sCiAgICAgICAgIHsgIllhbmsiLCB7IGV4
ZWN1dGVZYW5rLCBzdXBwb3J0ZWRGcm9tTWVudU9yS2V5QmluZGluZywgZW5hYmxlZEluRWRpdGFi
bGVUZXh0LCBzdGF0ZU5vbmUsIHZhbHVlTnVsbCwgbm90VGV4dEluc2VydGlvbiwgZG9Ob3RBbGxv
d0V4ZWN1dGlvbldoZW5EaXNhYmxlZCB9IH0sCiAgICAgICAgIHsgIllhbmtBbmRTZWxlY3QiLCB7
IGV4ZWN1dGVZYW5rQW5kU2VsZWN0LCBzdXBwb3J0ZWRGcm9tTWVudU9yS2V5QmluZGluZywgZW5h
YmxlZEluRWRpdGFibGVUZXh0LCBzdGF0ZU5vbmUsIHZhbHVlTnVsbCwgbm90VGV4dEluc2VydGlv
biwgZG9Ob3RBbGxvd0V4ZWN1dGlvbldoZW5EaXNhYmxlZCB9IH0sCi0jaWYgUExBVEZPUk0oTUFD
KSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05f
TEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQorI2lmIFNVUFBP
UlRfQVVUT0NPUlJFQ1RJT05fUEFORUwKICAgICAgICAgeyAiQ2FuY2VsT3BlcmF0aW9uIiwgeyBl
eGVjdXRlQ2FuY2VsT3BlcmF0aW9uLCBzdXBwb3J0ZWREaXNtaXNzQ29ycmVjdGlvblBhbmVsLCBl
bmFibGVkSW5FZGl0YWJsZVRleHQsIHN0YXRlTm9uZSwgdmFsdWVOdWxsLCBub3RUZXh0SW5zZXJ0
aW9uLCBkb05vdEFsbG93RXhlY3V0aW9uV2hlbkRpc2FibGVkIH0gfSwKICNlbmRpZgogICAgIH07
CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCShyZXZpc2lvbiA3MTMwMCkKKysrIFdl
YkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzExLDkg
KzMxMSw5IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6bWFya01pc3NwZWxsaW5nc0FmdGUKICAgICAg
ICAgVmlzaWJsZVBvc2l0aW9uIHAyID0gc3RhcnRPZldvcmQoc3RhcnQsIExlZnRXb3JkSWZPbkJv
dW5kYXJ5KTsKICAgICAgICAgaWYgKHAxICE9IHAyKQogICAgICAgICAgICAgZG9jdW1lbnQoKS0+
ZnJhbWUoKS0+ZWRpdG9yKCktPm1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZ1RvUG9zaXRpb24o
cDEpOwotI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYm
ICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NO
T1dfTEVPUEFSRCkKKyNpZiBTVVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMCiAgICAgICAgIGVs
c2UgaWYgKGNvbW1hbmRUeXBlID09IFR5cGluZ0NvbW1hbmQ6Okluc2VydFRleHQpCi0gICAgICAg
ICAgICBkb2N1bWVudCgpLT5mcmFtZSgpLT5lZGl0b3IoKS0+c3RhcnRDb3JyZWN0aW9uUGFuZWxU
aW1lcigpOworICAgICAgICAgICAgZG9jdW1lbnQoKS0+ZnJhbWUoKS0+ZWRpdG9yKCktPnN0YXJ0
Q29ycmVjdGlvblBhbmVsVGltZXIoQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlQ29ycmVj
dGlvbik7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShjb21tYW5kVHlwZSk7CiAjZW5kaWYKSW5k
ZXg6IFdlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
bG9hZGVyL0VtcHR5Q2xpZW50cy5oCShyZXZpc2lvbiA3MTMwMCkKKysrIFdlYkNvcmUvbG9hZGVy
L0VtcHR5Q2xpZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC00NzUsOSArNDc1LDkgQEAgcHVibGlj
OgogI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFk
ZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpCiAgICAgdmlydHVhbCB2b2lkIGNoZWNrVGV4dE9m
UGFyYWdyYXBoKGNvbnN0IFVDaGFyKiwgaW50LCB1aW50NjRfdCwgVmVjdG9yPFRleHRDaGVja2lu
Z1Jlc3VsdD4mKSB7IH07CiAjZW5kaWYKLSNpZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVkKEJV
SUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKSAmJiAhZGVm
aW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCi0gICAgdmlydHVhbCB2b2lkIHNob3dDb3Jy
ZWN0aW9uUGFuZWwoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5n
JiwgRWRpdG9yKikgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGRpc21pc3NDb3JyZWN0aW9uUGFuZWwo
Ym9vbCkgeyB9CisjaWYgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTAorICAgIHZpcnR1YWwg
dm9pZCBzaG93Q29ycmVjdGlvblBhbmVsKENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZSwg
Y29uc3QgRmxvYXRSZWN0JiwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgRWRpdG9yKikg
eyB9CisgICAgdmlydHVhbCB2b2lkIGRpc21pc3NDb3JyZWN0aW9uUGFuZWwoQ29ycmVjdGlvbldh
c1JlamVjdGVkT3JOb3QpIHsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1Nob3dpbmdDb3JyZWN0aW9u
UGFuZWwoKSB7IHJldHVybiBmYWxzZTsgfQogI2VuZGlmCiAgICAgdmlydHVhbCB2b2lkIHVwZGF0
ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyhjb25zdCBTdHJpbmcmLCBjb25zdCBHcmFtbWFy
RGV0YWlsJikgeyB9CkluZGV4OiBXZWJDb3JlL21hbnVhbC10ZXN0cy9hdXRvY29ycmVjdGlvbi9j
b250aW51ZS10eXBpbmctdG8tZGlzbWlzcy1yZXZlcnNpb24uaHRtbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL21hbnVhbC10ZXN0cy9hdXRvY29ycmVjdGlvbi9jb250aW51ZS10eXBpbmctdG8tZGlz
bWlzcy1yZXZlcnNpb24uaHRtbAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvbWFudWFsLXRlc3Rz
L2F1dG9jb3JyZWN0aW9uL2NvbnRpbnVlLXR5cGluZy10by1kaXNtaXNzLXJldmVyc2lvbi5odG1s
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ5IEBACis8aHRtbD4KKzxoZWFkPgorCis8c3R5bGU+
CisuZWRpdGluZyB7CisgICAgYm9yZGVyOiAycHggc29saWQgcmVkOworICAgIHBhZGRpbmc6IDEy
cHg7CisgICAgZm9udC1zaXplOiAyNHB4OworfQorPC9zdHlsZT4KKzxzY3JpcHQgc3JjPS4uLy4u
Ly4uL0xheW91dFRlc3RzL2VkaXRpbmcvZWRpdGluZy5qcyBsYW5ndWFnZT0iSmF2YVNjcmlwdCIg
dHlwZT0idGV4dC9KYXZhU2NyaXB0IiA+PC9zY3JpcHQ+CisKKzxzY3JpcHQ+CitmdW5jdGlvbiBl
ZGl0aW5nVGVzdCgpIHsKKyAgICB0eXBlQ2hhcmFjdGVyQ29tbWFuZCgndCcpOworICAgIHR5cGVD
aGFyYWN0ZXJDb21tYW5kKCdoJyk7CisgICAgdHlwZUNoYXJhY3RlckNvbW1hbmQoJ2UnKTsKKyAg
ICB0eXBlQ2hhcmFjdGVyQ29tbWFuZCgnICcpOworICAgIHR5cGVDaGFyYWN0ZXJDb21tYW5kKCdt
Jyk7CisgICAgdHlwZUNoYXJhY3RlckNvbW1hbmQoJ2UnKTsKKyAgICB0eXBlQ2hhcmFjdGVyQ29t
bWFuZCgncycpOworICAgIHR5cGVDaGFyYWN0ZXJDb21tYW5kKCdhJyk7CisgICAgdHlwZUNoYXJh
Y3RlckNvbW1hbmQoJ2cnKTsKKyAgICB0eXBlQ2hhcmFjdGVyQ29tbWFuZCgnZScpOworICAgIHR5
cGVDaGFyYWN0ZXJDb21tYW5kKCcgJyk7CisgICAgZXhlY01vdmVTZWxlY3Rpb25CYWNrd2FyZEJ5
Q2hhcmFjdGVyQ29tbWFuZCgpOworfQorCis8L3NjcmlwdD4KKworPHRpdGxlPkNvbnRpbnVlIFR5
cGluZyB0byBEaXNtaXNzIFJldmVyc2lvbiBQYW5lbCBUZXN0PC90aXRsZT4KKzwvaGVhZD4KKzxi
b2R5PgorPGRpdj48cD5UaGlzIHRlc3QgdmVyaWZpZXMgdGhhdCwgYWZ0ZXIgcmV2ZXJzaW9uIHBh
bmVsIGlzIHNob3duLCBjb250aW51ZSB0eXBpbmcgd2lsbCBkaXNtaXNzIHRoZSByZXZlcnNpb24g
cGFuZWwuPC9wPgorPHA+QWZ0ZXIgc2VlaW5nIHRoZSByZXZlcnNpb24gcGFuZWwsIHN0YXJ0IHR5
cGluZyAoZXhjbHVkaW5nIHdoaXRlc3BhY2UpLiBZb3Ugc2hvdWxkIHNlZSB0aGUgcGFuZWwgYmVp
bmcKK2Rpc21pc3NlZCBvbmNlIHlvdSBzdGFydCB0eXBpbmcuPC9wPgorPHAgIHN0eWxlPSJjb2xv
cjpncmVlbiI+Tm90ZSwgdGhpcyB0ZXN0IGNhbiBmYWlsIGR1ZSB0byB1c2VyIHNwZWNpZmljIHNw
ZWxsIGNoZWNraW5nIGRhdGEuIElmIHRoZSB1c2VyIGhhcyBwcmV2aW91c2x5IAorZnJlcXVlbnRs
eSByZXZlcnQgJ21lc3NhZ2UnIHRvICdtZXNhZ2UnLiBUbyBmaXggdGhpcywgcmVtb3ZlIGFsbCBm
aWxlcyBpbiB+L0xpYnJhcnkvU3BlbGxpbmcsIHRoZW4ga2lsbCBBcHBsZVNwZWxsLnNlcnZpY2Ug
cHJvY2Vzcy48L3A+Cis8ZGl2IGNvbnRlbnRlZGl0YWJsZSBpZD0icm9vdCIgY2xhc3M9ImVkaXRp
bmciPgorPHNwYW4gaWQ9InRlc3QiPjwvc3Bhbj4KKzwvZGl2PgorCisKKzxzY3JpcHQ+CitydW5F
ZGl0aW5nVGVzdCgpOworPC9zY3JpcHQ+CisKKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IFdlYkNv
cmUvbWFudWFsLXRlc3RzL2F1dG9jb3JyZWN0aW9uL2RlbGV0ZS10by1kaXNtaXNzLXJldmVyc2lv
bi5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbWFudWFsLXRlc3RzL2F1dG9jb3JyZWN0aW9u
L2RlbGV0ZS10by1kaXNtaXNzLXJldmVyc2lvbi5odG1sCShyZXZpc2lvbiAwKQorKysgV2ViQ29y
ZS9tYW51YWwtdGVzdHMvYXV0b2NvcnJlY3Rpb24vZGVsZXRlLXRvLWRpc21pc3MtcmV2ZXJzaW9u
Lmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDkgQEAKKzxodG1sPgorPGhlYWQ+CisKKzxz
dHlsZT4KKy5lZGl0aW5nIHsKKyAgICBib3JkZXI6IDJweCBzb2xpZCByZWQ7CisgICAgcGFkZGlu
ZzogMTJweDsKKyAgICBmb250LXNpemU6IDI0cHg7Cit9Cis8L3N0eWxlPgorPHNjcmlwdCBzcmM9
Li4vLi4vLi4vTGF5b3V0VGVzdHMvZWRpdGluZy9lZGl0aW5nLmpzIGxhbmd1YWdlPSJKYXZhU2Ny
aXB0IiB0eXBlPSJ0ZXh0L0phdmFTY3JpcHQiID48L3NjcmlwdD4KKworPHNjcmlwdD4KK2Z1bmN0
aW9uIGVkaXRpbmdUZXN0KCkgeworICAgIHR5cGVDaGFyYWN0ZXJDb21tYW5kKCd0Jyk7CisgICAg
dHlwZUNoYXJhY3RlckNvbW1hbmQoJ2gnKTsKKyAgICB0eXBlQ2hhcmFjdGVyQ29tbWFuZCgnZScp
OworICAgIHR5cGVDaGFyYWN0ZXJDb21tYW5kKCcgJyk7CisgICAgdHlwZUNoYXJhY3RlckNvbW1h
bmQoJ20nKTsKKyAgICB0eXBlQ2hhcmFjdGVyQ29tbWFuZCgnZScpOworICAgIHR5cGVDaGFyYWN0
ZXJDb21tYW5kKCdzJyk7CisgICAgdHlwZUNoYXJhY3RlckNvbW1hbmQoJ2EnKTsKKyAgICB0eXBl
Q2hhcmFjdGVyQ29tbWFuZCgnZycpOworICAgIHR5cGVDaGFyYWN0ZXJDb21tYW5kKCdlJyk7Cisg
ICAgdHlwZUNoYXJhY3RlckNvbW1hbmQoJyAnKTsKKyAgICBleGVjTW92ZVNlbGVjdGlvbkJhY2t3
YXJkQnlDaGFyYWN0ZXJDb21tYW5kKCk7Cit9CisKKzwvc2NyaXB0PgorCis8dGl0bGU+RGVsZXRl
IHRvIERpc21pc3MgUmV2ZXJzaW9uIFBhbmVsIFRlc3Q8L3RpdGxlPgorPC9oZWFkPgorPGJvZHk+
Cis8ZGl2PjxwPlRoaXMgdGVzdCB2ZXJpZmllcyB0aGF0LCBhZnRlciByZXZlcnNpb24gcGFuZWwg
aXMgc2hvd24sIGNvbnRpbnVlIGRlbGV0aW5nIHRoZSB3b3JkIHdpbGwgZGlzbWlzcyB0aGUgcmV2
ZXJzaW9uIHBhbmVsLjwvcD4KKzxwPkFmdGVyIHNlZWluZyB0aGUgcmV2ZXJzaW9uIHBhbmVsLCBz
dGFydCBkZWxldGluZyB0aGUgY29ycmVjdGVkIHdvcmQgY2hhcmFjdGVyIGJ5IGNoYXJhY3Rlci4g
WW91IHNob3VsZCBzZWUgdGhlIHBhbmVsIGJlaW5nCitkaXNtaXNzZWQgb25jZSB5b3Ugc3RhcnQg
ZGVsZXRpbmcuPC9wPgorPHAgIHN0eWxlPSJjb2xvcjpncmVlbiI+Tm90ZSwgdGhpcyB0ZXN0IGNh
biBmYWlsIGR1ZSB0byB1c2VyIHNwZWNpZmljIHNwZWxsIGNoZWNraW5nIGRhdGEuIElmIHRoZSB1
c2VyIGhhcyBwcmV2aW91c2x5IAorZnJlcXVlbnRseSByZXZlcnQgJ21lc3NhZ2UnIHRvICdtZXNh
Z2UnLiBUbyBmaXggdGhpcywgcmVtb3ZlIGFsbCBmaWxlcyBpbiB+L0xpYnJhcnkvU3BlbGxpbmcs
IHRoZW4ga2lsbCBBcHBsZVNwZWxsLnNlcnZpY2UgcHJvY2Vzcy48L3A+Cis8ZGl2IGNvbnRlbnRl
ZGl0YWJsZSBpZD0icm9vdCIgY2xhc3M9ImVkaXRpbmciPgorPHNwYW4gaWQ9InRlc3QiPjwvc3Bh
bj4KKzwvZGl2PgorCisKKzxzY3JpcHQ+CitydW5FZGl0aW5nVGVzdCgpOworPC9zY3JpcHQ+CisK
KzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IFdlYkNvcmUvbWFudWFsLXRlc3RzL2F1dG9jb3JyZWN0
aW9uL2RlbGV0ZS10by1lbmQtb2Ytd29yZC10by1zaG93LXJldmVyc2lvbi5odG1sCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvbWFudWFsLXRlc3RzL2F1dG9jb3JyZWN0aW9uL2RlbGV0ZS10by1lbmQt
b2Ytd29yZC10by1zaG93LXJldmVyc2lvbi5odG1sCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9t
YW51YWwtdGVzdHMvYXV0b2NvcnJlY3Rpb24vZGVsZXRlLXRvLWVuZC1vZi13b3JkLXRvLXNob3ct
cmV2ZXJzaW9uLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDkgQEAKKzxodG1sPgorPGhl
YWQ+CisKKzxzdHlsZT4KKy5lZGl0aW5nIHsKKyAgICBib3JkZXI6IDJweCBzb2xpZCByZWQ7Cisg
ICAgcGFkZGluZzogMTJweDsKKyAgICBmb250LXNpemU6IDI0cHg7Cit9Cis8L3N0eWxlPgorPHNj
cmlwdCBzcmM9Li4vLi4vLi4vTGF5b3V0VGVzdHMvZWRpdGluZy9lZGl0aW5nLmpzIGxhbmd1YWdl
PSJKYXZhU2NyaXB0IiB0eXBlPSJ0ZXh0L0phdmFTY3JpcHQiID48L3NjcmlwdD4KKworPHNjcmlw
dD4KK2Z1bmN0aW9uIGVkaXRpbmdUZXN0KCkgeworICAgIHR5cGVDaGFyYWN0ZXJDb21tYW5kKCd0
Jyk7CisgICAgdHlwZUNoYXJhY3RlckNvbW1hbmQoJ2gnKTsKKyAgICB0eXBlQ2hhcmFjdGVyQ29t
bWFuZCgnZScpOworICAgIHR5cGVDaGFyYWN0ZXJDb21tYW5kKCcgJyk7CisgICAgdHlwZUNoYXJh
Y3RlckNvbW1hbmQoJ20nKTsKKyAgICB0eXBlQ2hhcmFjdGVyQ29tbWFuZCgnZScpOworICAgIHR5
cGVDaGFyYWN0ZXJDb21tYW5kKCdzJyk7CisgICAgdHlwZUNoYXJhY3RlckNvbW1hbmQoJ2EnKTsK
KyAgICB0eXBlQ2hhcmFjdGVyQ29tbWFuZCgnZycpOworICAgIHR5cGVDaGFyYWN0ZXJDb21tYW5k
KCdlJyk7CisgICAgdHlwZUNoYXJhY3RlckNvbW1hbmQoJyAnKTsKKyAgICBleGVjRGVsZXRlQ29t
bWFuZCgpOworfQorCis8L3NjcmlwdD4KKworPHRpdGxlPkRlbGV0ZSB0byBFbmQgb2YgV29yZCB0
byBTaG93IFJldmVyc2lvbiBQYW5lbCBUZXN0PC90aXRsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRp
dj48cD5UaGlzIHRlc3QgdmVyaWZpZXMgdGhhdCByZXZlcnNpb24gcGFuZWwgaXMgc2hvd24gd2hl
biB1c2VyIG1vdmVzIGNhcnJldCB0byBwcmV2aW91c2x5IGNvcnJlY3RlZCB3b3JkIHVzaW5nIGRl
bGV0ZSBrZXkuPC9wPgorPHA+QWZ0ZXIgc2VlaW5nIHRoZSByZXZlcnNpb24gcGFuZWwsIHByZXNz
IEVTQyBrZXksIHRoZW4gc3BhY2Uga2V5LiBZb3Ugc2hvdWxkIHNlZSB0aGUgcGhyYXNlICJ0aGUg
bWVzYWdlIiAKK3doZXJlICJtZXNhZ2UiIGhhcyByZWQgbWlzcGVsbCB1bmRlcmxpbmUuIDwvcD4K
KzxwICBzdHlsZT0iY29sb3I6Z3JlZW4iPk5vdGUsIHRoaXMgdGVzdCBjYW4gZmFpbCBkdWUgdG8g
dXNlciBzcGVjaWZpYyBzcGVsbCBjaGVja2luZyBkYXRhLiBJZiB0aGUgdXNlciBoYXMgcHJldmlv
dXNseSAKK2ZyZXF1ZW50bHkgcmV2ZXJ0ICdtZXNzYWdlJyB0byAnbWVzYWdlJy4gVG8gZml4IHRo
aXMsIHJlbW92ZSBhbGwgZmlsZXMgaW4gfi9MaWJyYXJ5L1NwZWxsaW5nLCB0aGVuIGtpbGwgQXBw
bGVTcGVsbC5zZXJ2aWNlIHByb2Nlc3MuPC9wPgorPGRpdiBjb250ZW50ZWRpdGFibGUgaWQ9InJv
b3QiIGNsYXNzPSJlZGl0aW5nIj4KKzxzcGFuIGlkPSJ0ZXN0Ij48L3NwYW4+Cis8L2Rpdj4KKwor
Cis8c2NyaXB0PgorcnVuRWRpdGluZ1Rlc3QoKTsKKzwvc2NyaXB0PgorCis8L2JvZHk+Cis8L2h0
bWw+CkluZGV4OiBXZWJDb3JlL21hbnVhbC10ZXN0cy9hdXRvY29ycmVjdGlvbi9tb3ZlLXRvLWVu
ZC1vZi13b3JkLXRvLXNob3ctcmV2ZXJzaW9uLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9t
YW51YWwtdGVzdHMvYXV0b2NvcnJlY3Rpb24vbW92ZS10by1lbmQtb2Ytd29yZC10by1zaG93LXJl
dmVyc2lvbi5odG1sCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9tYW51YWwtdGVzdHMvYXV0b2Nv
cnJlY3Rpb24vbW92ZS10by1lbmQtb2Ytd29yZC10by1zaG93LXJldmVyc2lvbi5odG1sCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDQ5IEBACis8aHRtbD4KKzxoZWFkPgorCis8c3R5bGU+CisuZWRp
dGluZyB7CisgICAgYm9yZGVyOiAycHggc29saWQgcmVkOworICAgIHBhZGRpbmc6IDEycHg7Cisg
ICAgZm9udC1zaXplOiAyNHB4OworfQorPC9zdHlsZT4KKzxzY3JpcHQgc3JjPS4uLy4uLy4uL0xh
eW91dFRlc3RzL2VkaXRpbmcvZWRpdGluZy5qcyBsYW5ndWFnZT0iSmF2YVNjcmlwdCIgdHlwZT0i
dGV4dC9KYXZhU2NyaXB0IiA+PC9zY3JpcHQ+CisKKzxzY3JpcHQ+CitmdW5jdGlvbiBlZGl0aW5n
VGVzdCgpIHsKKyAgICB0eXBlQ2hhcmFjdGVyQ29tbWFuZCgndCcpOworICAgIHR5cGVDaGFyYWN0
ZXJDb21tYW5kKCdoJyk7CisgICAgdHlwZUNoYXJhY3RlckNvbW1hbmQoJ2UnKTsKKyAgICB0eXBl
Q2hhcmFjdGVyQ29tbWFuZCgnICcpOworICAgIHR5cGVDaGFyYWN0ZXJDb21tYW5kKCdtJyk7Cisg
ICAgdHlwZUNoYXJhY3RlckNvbW1hbmQoJ2UnKTsKKyAgICB0eXBlQ2hhcmFjdGVyQ29tbWFuZCgn
cycpOworICAgIHR5cGVDaGFyYWN0ZXJDb21tYW5kKCdhJyk7CisgICAgdHlwZUNoYXJhY3RlckNv
bW1hbmQoJ2cnKTsKKyAgICB0eXBlQ2hhcmFjdGVyQ29tbWFuZCgnZScpOworICAgIHR5cGVDaGFy
YWN0ZXJDb21tYW5kKCcgJyk7CisgICAgZXhlY01vdmVTZWxlY3Rpb25CYWNrd2FyZEJ5Q2hhcmFj
dGVyQ29tbWFuZCgpOworfQorCis8L3NjcmlwdD4KKworPHRpdGxlPk1vdmUgdG8gRW5kIG9mIFdv
cmQgdG8gU2hvdyBSZXZlcnNpb24gUGFuZWwgVGVzdDwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keT4K
KzxkaXY+PHA+VGhpcyB0ZXN0IHZlcmlmaWVzIHRoYXQgcmV2ZXJzaW9uIHBhbmVsIGlzIHNob3du
IHdoZW4gdXNlciBtb3ZlcyBjYXJyZXQgdG8gcHJldmlvdXNseSBjb3JyZWN0ZWQgd29yZDwvcD4K
KzxwPkFmdGVyIHNlZWluZyB0aGUgcmV2ZXJzaW9uIHBhbmVsLCBwcmVzcyBFU0Mga2V5LCB0aGVu
IHNwYWNlIGtleS4gWW91IHNob3VsZCBzZWUgdGhlIHBocmFzZSAidGhlIG1lc2FnZSIgCit3aGVy
ZSAibWVzYWdlIiBoYXMgcmVkIG1pc3BlbGwgdW5kZXJsaW5lLiA8L3A+Cis8cCAgc3R5bGU9ImNv
bG9yOmdyZWVuIj5Ob3RlLCB0aGlzIHRlc3QgY2FuIGZhaWwgZHVlIHRvIHVzZXIgc3BlY2lmaWMg
c3BlbGwgY2hlY2tpbmcgZGF0YS4gSWYgdGhlIHVzZXIgaGFzIHByZXZpb3VzbHkgCitmcmVxdWVu
dGx5IHJldmVydCAnbWVzc2FnZScgdG8gJ21lc2FnZScuIFRvIGZpeCB0aGlzLCByZW1vdmUgYWxs
IGZpbGVzIGluIH4vTGlicmFyeS9TcGVsbGluZywgdGhlbiBraWxsIEFwcGxlU3BlbGwuc2Vydmlj
ZSBwcm9jZXNzLjwvcD4KKzxkaXYgY29udGVudGVkaXRhYmxlIGlkPSJyb290IiBjbGFzcz0iZWRp
dGluZyI+Cis8c3BhbiBpZD0idGVzdCI+PC9zcGFuPgorPC9kaXY+CisKKworPHNjcmlwdD4KK3J1
bkVkaXRpbmdUZXN0KCk7Cis8L3NjcmlwdD4KKworPC9ib2R5PgorPC9odG1sPgpJbmRleDogV2Vi
Q29yZS9tYW51YWwtdGVzdHMvYXV0b2NvcnJlY3Rpb24vdHlwZS13aGl0ZXNwYWNlLXRvLWRpc21p
c3MtcmV2ZXJzaW9uLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9tYW51YWwtdGVzdHMvYXV0
b2NvcnJlY3Rpb24vdHlwZS13aGl0ZXNwYWNlLXRvLWRpc21pc3MtcmV2ZXJzaW9uLmh0bWwJKHJl
dmlzaW9uIDApCisrKyBXZWJDb3JlL21hbnVhbC10ZXN0cy9hdXRvY29ycmVjdGlvbi90eXBlLXdo
aXRlc3BhY2UtdG8tZGlzbWlzcy1yZXZlcnNpb24uaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw1MCBAQAorPGh0bWw+Cis8aGVhZD4KKworPHN0eWxlPgorLmVkaXRpbmcgeworICAgIGJvcmRl
cjogMnB4IHNvbGlkIHJlZDsKKyAgICBwYWRkaW5nOiAxMnB4OworICAgIGZvbnQtc2l6ZTogMjRw
eDsKK30KKzwvc3R5bGU+Cis8c2NyaXB0IHNyYz0uLi8uLi8uLi9MYXlvdXRUZXN0cy9lZGl0aW5n
L2VkaXRpbmcuanMgbGFuZ3VhZ2U9IkphdmFTY3JpcHQiIHR5cGU9InRleHQvSmF2YVNjcmlwdCIg
Pjwvc2NyaXB0PgorCis8c2NyaXB0PgorZnVuY3Rpb24gZWRpdGluZ1Rlc3QoKSB7CisgICAgdHlw
ZUNoYXJhY3RlckNvbW1hbmQoJ3QnKTsKKyAgICB0eXBlQ2hhcmFjdGVyQ29tbWFuZCgnaCcpOwor
ICAgIHR5cGVDaGFyYWN0ZXJDb21tYW5kKCdlJyk7CisgICAgdHlwZUNoYXJhY3RlckNvbW1hbmQo
JyAnKTsKKyAgICB0eXBlQ2hhcmFjdGVyQ29tbWFuZCgnbScpOworICAgIHR5cGVDaGFyYWN0ZXJD
b21tYW5kKCdlJyk7CisgICAgdHlwZUNoYXJhY3RlckNvbW1hbmQoJ3MnKTsKKyAgICB0eXBlQ2hh
cmFjdGVyQ29tbWFuZCgnYScpOworICAgIHR5cGVDaGFyYWN0ZXJDb21tYW5kKCdnJyk7CisgICAg
dHlwZUNoYXJhY3RlckNvbW1hbmQoJ2UnKTsKKyAgICB0eXBlQ2hhcmFjdGVyQ29tbWFuZCgnICcp
OworICAgIGV4ZWNNb3ZlU2VsZWN0aW9uQmFja3dhcmRCeUNoYXJhY3RlckNvbW1hbmQoKTsKK30K
KworPC9zY3JpcHQ+CisKKzx0aXRsZT5UeXBlIFdoaXRlc3BhY2UgdG8gRGlzbWlzcyBSZXZlcnNp
b24gUGFuZWwgVGVzdDwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXY+PHA+VGhpcyB0ZXN0
IHZlcmlmaWVzIHRoYXQsIGFmdGVyIHJldmVyc2lvbiBwYW5lbCBpcyBzaG93biwgdHlwaW5nIHdo
aXRlc3BhY2Ugd2lsbCBkaXNtaXNzIHRoZSByZXZlcnNpb24gcGFuZWwuCitJdCBhbHNvIGtlZXAg
dGhlIGV4aXN0aW5nIGF1dG9jb3JyZWN0aW9uIHVuZGVybGluZS48L3A+Cis8cD5BZnRlciBzZWVp
bmcgdGhlIHJldmVyc2lvbiBwYW5lbCwgdHlwZSB3aGl0ZXNwYWNlLiBZb3Ugc2hvdWxkIHNlZSB0
aGUgcGFuZWwgYmVpbmcgZGlzbWlzc2VkIG9uY2UgeW91IHN0YXJ0IHR5cGluZy4KK0hvd2V2ZXIs
IHRoZSB3b3JkICJtZXNzYWdlIiBzdGlsbCBoYXMgYmx1ZSB1bmRlcmxpbmUuPC9wPgorPHAgIHN0
eWxlPSJjb2xvcjpncmVlbiI+Tm90ZSwgdGhpcyB0ZXN0IGNhbiBmYWlsIGR1ZSB0byB1c2VyIHNw
ZWNpZmljIHNwZWxsIGNoZWNraW5nIGRhdGEuIElmIHRoZSB1c2VyIGhhcyBwcmV2aW91c2x5IAor
ZnJlcXVlbnRseSByZXZlcnQgJ21lc3NhZ2UnIHRvICdtZXNhZ2UnLiBUbyBmaXggdGhpcywgcmVt
b3ZlIGFsbCBmaWxlcyBpbiB+L0xpYnJhcnkvU3BlbGxpbmcsIHRoZW4ga2lsbCBBcHBsZVNwZWxs
LnNlcnZpY2UgcHJvY2Vzcy48L3A+Cis8ZGl2IGNvbnRlbnRlZGl0YWJsZSBpZD0icm9vdCIgY2xh
c3M9ImVkaXRpbmciPgorPHNwYW4gaWQ9InRlc3QiPjwvc3Bhbj4KKzwvZGl2PgorCisKKzxzY3Jp
cHQ+CitydW5FZGl0aW5nVGVzdCgpOworPC9zY3JpcHQ+CisKKzwvYm9keT4KKzwvaHRtbD4KSW5k
ZXg6IFdlYkNvcmUvcGFnZS9FZGl0b3JDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bh
Z2UvRWRpdG9yQ2xpZW50LmgJKHJldmlzaW9uIDcxMzAwKQorKysgV2ViQ29yZS9wYWdlL0VkaXRv
ckNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaWZuZGVmIEVkaXRv
ckNsaWVudF9oCiAjZGVmaW5lIEVkaXRvckNsaWVudF9oCiAKKyNpbmNsdWRlICJDb3JyZWN0aW9u
UGFuZWxJbmZvLmgiCiAjaW5jbHVkZSAiRWRpdG9ySW5zZXJ0QWN0aW9uLmgiCiAjaW5jbHVkZSAi
RmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKQEAgLTE4OCw5ICsxODks
OSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGNoZWNrVGV4dE9mUGFyYWdyYXBoKGNvbnN0
IFVDaGFyKiB0ZXh0LCBpbnQgbGVuZ3RoLCB1aW50NjRfdCBjaGVja2luZ1R5cGVzLCBWZWN0b3I8
VGV4dENoZWNraW5nUmVzdWx0PiYgcmVzdWx0cykgPSAwOwogI2VuZGlmCiAKLSNpZiBQTEFURk9S
TShNQUMpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElO
R19PTl9MRU9QQVJEKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCi0gICAg
dmlydHVhbCB2b2lkIHNob3dDb3JyZWN0aW9uUGFuZWwoY29uc3QgRmxvYXRSZWN0JiBib3VuZGlu
Z0JveE9mUmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0
IFN0cmluZyYgcmVwbGFjbWVudFN0cmluZywgRWRpdG9yKikgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCBkaXNtaXNzQ29ycmVjdGlvblBhbmVsKGJvb2wgY29ycmVjdGlvbkFjY2VwdGVkKSA9IDA7Cisj
aWYgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTAorICAgIHZpcnR1YWwgdm9pZCBzaG93Q29y
cmVjdGlvblBhbmVsKENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZSwgY29uc3QgRmxvYXRS
ZWN0JiBib3VuZGluZ0JveE9mUmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRT
dHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjbWVudFN0cmluZywgRWRpdG9yKikgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBkaXNtaXNzQ29ycmVjdGlvblBhbmVsKENvcnJlY3Rpb25XYXNSZWplY3Rl
ZE9yTm90KSA9IDA7CiAgICAgdmlydHVhbCBib29sIGlzU2hvd2luZ0NvcnJlY3Rpb25QYW5lbCgp
ID0gMDsKICNlbmRpZgogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFw
aGljc0NvbnRleHRNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9tYWMvR3JhcGhpY3NDb250ZXh0TWFjLm1tCShyZXZpc2lvbiA3MTMwMCkKKysrIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dE1hYy5tbQkod29ya2luZyBjb3B5
KQpAQCAtMTQ3LDYgKzE0Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRl
eHRDaGUKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAjaWYgUExBVEZPUk0oTUFDKSAm
JiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVP
UEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQorICAgICAgICAvLyBU
byBzdXBwb3J0IGNvcnJlY3Rpb24gcGFuZWwuCiAgICAgICAgIGNhc2UgVGV4dENoZWNraW5nUmVw
bGFjZW1lbnRMaW5lU3R5bGU6CiAgICAgICAgIHsKICAgICAgICAgICAgIC8vIENvbnN0YW50cyBm
b3Igc3BlbGxpbmcgcGF0dGVybiBjb2xvci4KSW5kZXg6IFdlYktpdDIvQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiA3MTMwMCkKKysrIFdlYktpdDIv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTggQEAKKzIwMTAtMTEtMDMgIEpp
YSBQdSAgPGpwdUBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgcmV2ZXJzaW9uIGJ1YmJsZSBpbiBXZWJWaWV3cworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDc2MzAKKyAgICAgICAgPHJkYXI6
Ly9wcm9ibGVtLzg1MzA5NjA+CisKKyAgICAgICAgVGhpcyBwYXRjaCBpcyB0byBhZGQgcmV2ZXJz
aW9uIHRvIGNvcnJlY3Rpb24gcGFuZWwuIFBsZWFzZSBzZWUgV2ViQ29yZS9DaGFuZ2VMb2cgZm9y
IGRldGFpbC4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9y
Q2xpZW50Lmg6IEFkb3B0ZWQgbmV3IHNpZ25hdHVyZSBvZiBiYXNlIGNsYXNzIG1ldGhvZC4KKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJFZGl0b3JDbGllbnRNYWMu
bW06IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpXZWJFZGl0b3JDbGllbnQ6OnNob3dDb3JyZWN0
aW9uUGFuZWwpOgorICAgICAgICAoV2ViS2l0OjpXZWJFZGl0b3JDbGllbnQ6OmRpc21pc3NDb3Jy
ZWN0aW9uUGFuZWwpOgorCiAyMDEwLTExLTAzICBBbGljZSBMaXUgIDxhbGljZS5saXVAYXBwbGUu
Y29tPgogCiAgICAgICAgIEZpeCBjbGFuZysrIGJ1aWxkIApJbmRleDogV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaAkocmV2aXNpb24g
NzEzMDApCisrKyBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xp
ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEzNCw4ICsxMzQsOCBAQCBwcml2YXRlOgogICAgIHZp
cnR1YWwgdm9pZCB3aWxsU2V0SW5wdXRNZXRob2RTdGF0ZSgpOwogICAgIHZpcnR1YWwgdm9pZCBz
ZXRJbnB1dE1ldGhvZFN0YXRlKGJvb2wgZW5hYmxlZCk7CiAjaWYgUExBVEZPUk0oTUFDKSAmJiAh
ZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFS
RCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQotICAgIHZpcnR1YWwgdm9p
ZCBzaG93Q29ycmVjdGlvblBhbmVsKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgYm91bmRpbmdC
b3hPZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBT
dHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nLCBXZWJDb3JlOjpFZGl0b3IqKTsKLSAgICB2aXJ0dWFs
IHZvaWQgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChib29sIGNvcnJlY3Rpb25BY2NlcHRlZCk7Cisg
ICAgdmlydHVhbCB2b2lkIHNob3dDb3JyZWN0aW9uUGFuZWwoV2ViQ29yZTo6Q29ycmVjdGlvblBh
bmVsSW5mbzo6UGFuZWxUeXBlLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGJvdW5kaW5nQm94
T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3Ry
aW5nJiByZXBsYWNlbWVudFN0cmluZywgV2ViQ29yZTo6RWRpdG9yKik7CisgICAgdmlydHVhbCB2
b2lkIGRpc21pc3NDb3JyZWN0aW9uUGFuZWwoV2ViQ29yZTo6Q29ycmVjdGlvbldhc1JlamVjdGVk
T3JOb3QpOwogICAgIHZpcnR1YWwgYm9vbCBpc1Nob3dpbmdDb3JyZWN0aW9uUGFuZWwoKTsKICNl
bmRpZgogICAgIFdlYlBhZ2UqIG1fcGFnZTsKSW5kZXg6IFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9tYWMvV2ViRWRpdG9yQ2xpZW50TWFjLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViRWRpdG9yQ2xpZW50TWFjLm1tCShy
ZXZpc2lvbiA3MTMwMCkKKysrIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMv
V2ViRWRpdG9yQ2xpZW50TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yMjMsMTIgKzIyMywxMiBA
QCB2b2lkIFdlYkVkaXRvckNsaWVudDo6Y2hlY2tUZXh0T2ZQYXJhZ3JhCiAjZW5kaWYKIAogI2lm
ICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9Q
QVJEKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCi12b2lkIFdlYkVkaXRv
ckNsaWVudDo6c2hvd0NvcnJlY3Rpb25QYW5lbChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGJv
dW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgV1RGOjpTdHJpbmcmIHJlcGxhY2VkU3Ry
aW5nLCBjb25zdCBXVEY6OlN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcsIFdlYkNvcmU6OkVkaXRv
ciopCit2b2lkIFdlYkVkaXRvckNsaWVudDo6c2hvd0NvcnJlY3Rpb25QYW5lbChXZWJDb3JlOjpD
b3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGUgdHlwZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRS
ZWN0JiBib3VuZGluZ0JveE9mUmVwbGFjZWRTdHJpbmcsIGNvbnN0IFdURjo6U3RyaW5nJiByZXBs
YWNlZFN0cmluZywgY29uc3QgV1RGOjpTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nLCBXZWJDb3Jl
OjpFZGl0b3IqKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgV2ViRWRpdG9y
Q2xpZW50OjpkaXNtaXNzQ29ycmVjdGlvblBhbmVsKGJvb2wgY29ycmVjdGlvbkFjY2VwdGVkKQor
dm9pZCBXZWJFZGl0b3JDbGllbnQ6OmRpc21pc3NDb3JyZWN0aW9uUGFuZWwoV2ViQ29yZTo6Q29y
cmVjdGlvbldhc1JlamVjdGVkT3JOb3QpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KSW5k
ZXg6IFdlYktpdC9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvQ2hhbmdl
TG9nCShyZXZpc2lvbiA3MTMwMCkKKysrIFdlYktpdC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTAtMTEtMDMgIEppYSBQdSAgPGpwdUBhcHBsZS5jb20+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgcmV2ZXJz
aW9uIGJ1YmJsZSBpbiBXZWJWaWV3cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NDc2MzAKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzg1MzA5NjA+CisK
KyAgICAgICAgVGhpcyBwYXRjaCBpcyB0byBhZGQgcmV2ZXJzaW9uIHRvIGNvcnJlY3Rpb24gcGFu
ZWwuIFBsZWFzZSBzZWUgV2ViQ29yZS9DaGFuZ2VMb2cgZm9yIGRldGFpbC4KKworICAgICAgICAq
IFdlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oOiBBZG9wdGVkIG5ldyBzaWduYXR1cmUg
b2YgYmFzZSBjbGFzcyBtZXRob2QuCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9y
Q2xpZW50Lm1tOiBBZG9wdGVkIG5ldyBzaWduYXR1cmUgb2YgYmFzZSBjbGFzcyBtZXRob2QuIEFu
ZCBjb2RlCisgICAgICAgICAgY2hhbmdlIHRvIHVzZSBuZXcgcmV2ZXJzaW9uIEFQSSBpbiBBcHBL
aXQuCisgICAgICAgIChXZWJFZGl0b3JDbGllbnQ6OldlYkVkaXRvckNsaWVudCk6CisgICAgICAg
IChXZWJFZGl0b3JDbGllbnQ6On5XZWJFZGl0b3JDbGllbnQpOgorICAgICAgICAoV2ViRWRpdG9y
Q2xpZW50OjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkVkaXRvckNs
aWVudDo6c2hvd0NvcnJlY3Rpb25QYW5lbCk6CisgICAgICAgIChXZWJFZGl0b3JDbGllbnQ6OmRp
c21pc3NDb3JyZWN0aW9uUGFuZWwpOgorICAgICAgICAoV2ViRWRpdG9yQ2xpZW50Ojppc1Nob3dp
bmdDb3JyZWN0aW9uUGFuZWwpOgorCiAyMDEwLTExLTAyICBEYW5pZWwgQmF0ZXMgIDxkYmF0ZXNA
cmltLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtIEJhcnRoLgpJbmRleDogV2ViS2l0
L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oCShyZXZpc2lvbiA3MTMwMCkK
KysrIFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEzMyw4ICsxMzMsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHdpbGxT
ZXRJbnB1dE1ldGhvZFN0YXRlKCk7CiAgICAgdmlydHVhbCB2b2lkIHNldElucHV0TWV0aG9kU3Rh
dGUoYm9vbCBlbmFibGVkKTsKICNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRl
ZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19M
RU9QQVJEKQotICAgIHZpcnR1YWwgdm9pZCBzaG93Q29ycmVjdGlvblBhbmVsKGNvbnN0IFdlYkNv
cmU6OkZsb2F0UmVjdCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBXVEY6OlN0
cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFdURjo6U3RyaW5nJiByZXBsYWNlbWVudFN0cmlu
ZywgV2ViQ29yZTo6RWRpdG9yKik7Ci0gICAgdmlydHVhbCB2b2lkIGRpc21pc3NDb3JyZWN0aW9u
UGFuZWwoYm9vbCBjb3JyZWN0aW9uQWNjZXB0ZWQpOworICAgIHZpcnR1YWwgdm9pZCBzaG93Q29y
cmVjdGlvblBhbmVsKFdlYkNvcmU6OkNvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZSwgY29u
c3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBib3VuZGluZ0JveE9mUmVwbGFjZWRTdHJpbmcsIGNvbnN0
IFdURjo6U3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgV1RGOjpTdHJpbmcmIHJlcGxhY2Vt
ZW50U3RyaW5nLCBXZWJDb3JlOjpFZGl0b3IqKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzbWlzc0Nv
cnJlY3Rpb25QYW5lbChXZWJDb3JlOjpDb3JyZWN0aW9uV2FzUmVqZWN0ZWRPck5vdCk7CiAgICAg
dmlydHVhbCBib29sIGlzU2hvd2luZ0NvcnJlY3Rpb25QYW5lbCgpOwogI2VuZGlmCiBwcml2YXRl
OgpAQCAtMTQ2LDYgKzE0Niw2IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2hhdmVVbmRvUmVkb09w
ZXJhdGlvbnM7CiAKICNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQo
QlVJTERJTkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJE
KQotICAgIE5TSW50ZWdlciBtX2NvcnJlY3Rpb25QYW5lbFRhZzsKKyAgICBCT09MIG1fY29ycmVj
dGlvblBhbmVsSXNTaG93bjsKICNlbmRpZgogfTsKSW5kZXg6IFdlYktpdC9tYWMvV2ViQ29yZVN1
cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViQ29y
ZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tCShyZXZpc2lvbiA3MTMwMCkKKysrIFdlYktpdC9t
YWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0x
ODYsNyArMTg2LDcgQEAgV2ViRWRpdG9yQ2xpZW50OjpXZWJFZGl0b3JDbGllbnQoV2ViVmlldwog
ICAgICwgbV91bmRvVGFyZ2V0KFtbW1dlYkVkaXRvclVuZG9UYXJnZXQgYWxsb2NdIGluaXRdIGF1
dG9yZWxlYXNlXSkKICAgICAsIG1faGF2ZVVuZG9SZWRvT3BlcmF0aW9ucyhmYWxzZSkKICNpZiAh
ZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFS
RCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQotICAgICwgbV9jb3JyZWN0
aW9uUGFuZWxUYWcoSW52YWxpZENvcnJlY3Rpb25QYW5lbFRhZykKKyAgICAsIG1fY29ycmVjdGlv
blBhbmVsSXNTaG93bihmYWxzZSkKICNlbmRpZgogewogfQpAQCAtMTk0LDcgKzE5NCw3IEBAIFdl
YkVkaXRvckNsaWVudDo6V2ViRWRpdG9yQ2xpZW50KFdlYlZpZXcKIFdlYkVkaXRvckNsaWVudDo6
fldlYkVkaXRvckNsaWVudCgpCiB7CiAjaWYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYm
ICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NO
T1dfTEVPUEFSRCkKLSAgICBkaXNtaXNzQ29ycmVjdGlvblBhbmVsKHRydWUpOworICAgIGRpc21p
c3NDb3JyZWN0aW9uUGFuZWwoV2ViQ29yZTo6Q29ycmVjdGlvbldhc05vdFJlamVjdGVkKTsKICNl
bmRpZgogfQogCkBAIC0zMTAsMTAgKzMxMCw2IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpyZXNw
b25kVG9DaGFuZ2VkU2UKIHsKICAgICBbbV93ZWJWaWV3IF9zZWxlY3Rpb25DaGFuZ2VkXTsKIAot
I2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9M
RU9QQVJEKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCi0gICAgZGlzbWlz
c0NvcnJlY3Rpb25QYW5lbCh0cnVlKTsKLSNlbmRpZgotCiAgICAgLy8gRklYTUU6IFRoaXMgcXVp
cmsgaXMgbmVlZGVkIGR1ZSB0byA8cmRhcjovL3Byb2JsZW0vNTAwOTYyNT4gLSBXZSBjYW4gcGhh
c2UgaXQgb3V0IG9uY2UgQXBlcnR1cmUgY2FuIGFkb3B0IHRoZSBuZXcgYmVoYXZpb3Igb24gdGhl
aXIgZW5kCiAgICAgaWYgKCFXZWJLaXRMaW5rZWRPbk9yQWZ0ZXIoV0VCS0lUX0ZJUlNUX1ZFUlNJ
T05fV0lUSE9VVF9BUEVSVFVSRV9RVUlSSykgJiYgW1tbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gYnVu
ZGxlSWRlbnRpZmllcl0gaXNFcXVhbFRvU3RyaW5nOkAiY29tLmFwcGxlLkFwZXJ0dXJlIl0pCiAg
ICAgICAgIHJldHVybjsKQEAgLTg2MCw4ICs4NTYsOCBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6
dXBkYXRlU3BlbGxpbmdVSVdpCiB9CiAKICNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikg
JiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05f
U05PV19MRU9QQVJEKQotdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnNob3dDb3JyZWN0aW9uUGFuZWwo
Y29uc3QgRmxvYXRSZWN0JiBib3VuZGluZ0JveE9mUmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmlu
ZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcsIEVkaXRv
ciogZWRpdG9yKSB7Ci0gICAgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbCh0cnVlKTsKK3ZvaWQgV2Vi
RWRpdG9yQ2xpZW50OjpzaG93Q29ycmVjdGlvblBhbmVsKFdlYkNvcmU6OkNvcnJlY3Rpb25QYW5l
bEluZm86OlBhbmVsVHlwZSBwYW5lbFR5cGUsIGNvbnN0IEZsb2F0UmVjdCYgYm91bmRpbmdCb3hP
ZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJp
bmcmIHJlcGxhY2VtZW50U3RyaW5nLCBFZGl0b3IqIGVkaXRvcikgeworICAgIGRpc21pc3NDb3Jy
ZWN0aW9uUGFuZWwoV2ViQ29yZTo6Q29ycmVjdGlvbldhc05vdFJlamVjdGVkKTsKIAogICAgIE5T
UmVjdCBib3VuZGluZ0JveEFzTlNSZWN0ID0gYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nOwog
ICAgIE5TUmVjdCB3ZWJWaWV3RnJhbWUgPSBtX3dlYlZpZXcuZnJhbWU7CkBAIC04NzEsMjUgKzg2
NywzMyBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6c2hvd0NvcnJlY3Rpb25QYW5lCiAgICAgTlNT
dHJpbmcgKnJlcGxhY2VkU3RyaW5nQXNOU1N0cmluZyA9IHJlcGxhY2VkU3RyaW5nOwogICAgIE5T
U3RyaW5nICpyZXBsYWNlbWVudFN0cmluZ0FzTlNTdHJpbmcgPSByZXBsYWNlbWVudFN0cmluZzsK
IAotICAgIG1fY29ycmVjdGlvblBhbmVsVGFnID0gW1tOU1NwZWxsQ2hlY2tlciBzaGFyZWRTcGVs
bENoZWNrZXJdIHNob3dDb3JyZWN0aW9uOnJlcGxhY2VtZW50U3RyaW5nQXNOU1N0cmluZyBmb3JT
dHJpbmdJblJlY3Q6Ym91bmRpbmdCb3hBc05TUmVjdCB2aWV3Om1fd2ViVmlldyBjb21wbGV0aW9u
SGFuZGxlcjpeKEJPT0wgYWNjZXB0ZWQpIHsKLSAgICAgICAgaWYgKCFhY2NlcHRlZCkgeworICAg
IG1fY29ycmVjdGlvblBhbmVsSXNTaG93biA9IFlFUzsKKyAgICBOU0NvcnJlY3Rpb25CdWJibGVU
eXBlIGJ1YmJsZVR5cGUgPSBwYW5lbFR5cGUgPT0gV2ViQ29yZTo6Q29ycmVjdGlvblBhbmVsSW5m
bzo6UGFuZWxUeXBlQ29ycmVjdGlvbiA/IE5TQ29ycmVjdGlvbkJ1YmJsZVR5cGVDb3JyZWN0aW9u
IDogTlNDb3JyZWN0aW9uQnViYmxlVHlwZVJldmVyc2lvbjsKKyAgICBbW05TU3BlbGxDaGVja2Vy
IHNoYXJlZFNwZWxsQ2hlY2tlcl0gc2hvd0NvcnJlY3Rpb25CdWJibGVPZlR5cGU6YnViYmxlVHlw
ZSBwcmltYXJ5U3RyaW5nOnJlcGxhY2VtZW50U3RyaW5nQXNOU1N0cmluZyBhbHRlcm5hdGl2ZVN0
cmluZ3M6bmlsIGZvclN0cmluZ0luUmVjdDpib3VuZGluZ0JveEFzTlNSZWN0IHZpZXc6bV93ZWJW
aWV3IGNvbXBsZXRpb25IYW5kbGVyOl4oTlNTdHJpbmcgKmFjY2VwdGVkU3RyaW5nKSB7CisgICAg
ICAgIGlmICghYWNjZXB0ZWRTdHJpbmcgJiYgYnViYmxlVHlwZSA9PSBOU0NvcnJlY3Rpb25CdWJi
bGVUeXBlQ29ycmVjdGlvbikgewogICAgICAgICAgICAgW1tOU1NwZWxsQ2hlY2tlciBzaGFyZWRT
cGVsbENoZWNrZXJdIHJlY29yZFJlc3BvbnNlOk5TQ29ycmVjdGlvblJlc3BvbnNlUmVqZWN0ZWQg
dG9Db3JyZWN0aW9uOnJlcGxhY2VtZW50U3RyaW5nQXNOU1N0cmluZyBmb3JXb3JkOnJlcGxhY2Vk
U3RyaW5nQXNOU1N0cmluZyBsYW5ndWFnZTpuaWwgaW5TcGVsbERvY3VtZW50V2l0aFRhZzpbbV93
ZWJWaWV3IHNwZWxsQ2hlY2tlckRvY3VtZW50VGFnXV07CiAgICAgICAgICAgICBlZGl0b3ItPmhh
bmRsZVJlamVjdGVkQ29ycmVjdGlvbigpOworICAgICAgICB9IGVsc2UgaWYgKGFjY2VwdGVkU3Ry
aW5nICYmIGJ1YmJsZVR5cGUgPT0gTlNDb3JyZWN0aW9uQnViYmxlVHlwZVJldmVyc2lvbikgewor
ICAgICAgICAgICAgW1tOU1NwZWxsQ2hlY2tlciBzaGFyZWRTcGVsbENoZWNrZXJdIHJlY29yZFJl
c3BvbnNlOk5TQ29ycmVjdGlvblJlc3BvbnNlUmV2ZXJ0ZWQgdG9Db3JyZWN0aW9uOnJlcGxhY2Vk
U3RyaW5nQXNOU1N0cmluZyBmb3JXb3JkOnJlcGxhY2VtZW50U3RyaW5nQXNOU1N0cmluZyBsYW5n
dWFnZTpuaWwgaW5TcGVsbERvY3VtZW50V2l0aFRhZzpbbV93ZWJWaWV3IHNwZWxsQ2hlY2tlckRv
Y3VtZW50VGFnXV07CisgICAgICAgICAgICBlZGl0b3ItPmhhbmRsZVJlamVjdGVkQ29ycmVjdGlv
bigpOwogICAgICAgICB9CiAgICAgfV07CiB9CiAKLXZvaWQgV2ViRWRpdG9yQ2xpZW50OjpkaXNt
aXNzQ29ycmVjdGlvblBhbmVsKGJvb2wgY29ycmVjdGlvbkFjY2VwdGVkKQordm9pZCBXZWJFZGl0
b3JDbGllbnQ6OmRpc21pc3NDb3JyZWN0aW9uUGFuZWwoV2ViQ29yZTo6Q29ycmVjdGlvbldhc1Jl
amVjdGVkT3JOb3QgY29ycmVjdGlvbldhc1JlamVjdGVkT3JOb3QpCiB7Ci0gICAgaWYgKG1fY29y
cmVjdGlvblBhbmVsVGFnICE9IEludmFsaWRDb3JyZWN0aW9uUGFuZWxUYWcpIHsKLSAgICAgICAg
W1tOU1NwZWxsQ2hlY2tlciBzaGFyZWRTcGVsbENoZWNrZXJdIGRpc21pc3NDb3JyZWN0aW9uOm1f
Y29ycmVjdGlvblBhbmVsVGFnIGFjY2VwdENvcnJlY3Rpb246Y29ycmVjdGlvbkFjY2VwdGVkXTsK
LSAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxUYWcgPSBJbnZhbGlkQ29ycmVjdGlvblBhbmVsVGFn
OworICAgIGlmIChpc1Nob3dpbmdDb3JyZWN0aW9uUGFuZWwoKSkgeworICAgICAgICBpZiAoY29y
cmVjdGlvbldhc1JlamVjdGVkT3JOb3QgPT0gQ29ycmVjdGlvbldhc1JlamVjdGVkKQorICAgICAg
ICAgICAgW1tOU1NwZWxsQ2hlY2tlciBzaGFyZWRTcGVsbENoZWNrZXJdIGNhbmNlbENvcnJlY3Rp
b25CdWJibGVGb3JWaWV3Om1fd2ViVmlld107CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFtb
TlNTcGVsbENoZWNrZXIgc2hhcmVkU3BlbGxDaGVja2VyXSBkaXNtaXNzQ29ycmVjdGlvbkJ1YmJs
ZUZvclZpZXc6bV93ZWJWaWV3XTsKKyAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJc1Nob3duID0g
Tk87CiAgICAgfQogfQogCiBib29sIFdlYkVkaXRvckNsaWVudDo6aXNTaG93aW5nQ29ycmVjdGlv
blBhbmVsKCkKIHsKLSAgICByZXR1cm4gbV9jb3JyZWN0aW9uUGFuZWxUYWcgIT0gSW52YWxpZENv
cnJlY3Rpb25QYW5lbFRhZzsKKyAgICByZXR1cm4gbV9jb3JyZWN0aW9uUGFuZWxJc1Nob3duOwog
fQogI2VuZGlmCiAK
</data>
<flag name="review"
          id="63355"
          type_id="1"
          status="+"
          setter="mitz"
    />
    <flag name="commit-queue"
          id="63364"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
      

    </bug>

</bugzilla>