<?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>113822</bug_id>
          
          <creation_ts>2013-04-02 13:44:02 -0700</creation_ts>
          <short_desc>[Mac] add &quot;automatic&quot; text track menu item</short_desc>
          <delta_ts>2013-04-04 16:34:54 -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>Media</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Carlson">eric.carlson</reporter>
          <assigned_to name="Eric Carlson">eric.carlson</assigned_to>
          <cc>benjamin</cc>
    
    <cc>buildbot</cc>
    
    <cc>dino</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>feature-media-reviews</cc>
    
    <cc>jer.noble</cc>
    
    <cc>ojan.autocc</cc>
    
    <cc>rniwa</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>868216</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2013-04-02 13:44:02 -0700</bug_when>
    <thetext>Add an &quot;Automatic&quot; item to the text track menu which will automatically enable a captions/subtitles track when the main audio track in a movie is not in the user&apos;s default language.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>868217</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2013-04-02 13:44:23 -0700</bug_when>
    <thetext>&lt;rdar://problem/13559894&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>868253</commentid>
    <comment_count>2</comment_count>
      <attachid>196228</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2013-04-02 14:39:15 -0700</bug_when>
    <thetext>Created attachment 196228
Proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>868270</commentid>
    <comment_count>3</comment_count>
      <attachid>196228</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-04-02 15:04:41 -0700</bug_when>
    <thetext>Comment on attachment 196228
Proposed patch

Attachment 196228 did not pass mac-ews (mac):
Output: http://webkit-commit-queue.appspot.com/results/17376291</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>868278</commentid>
    <comment_count>4</comment_count>
      <attachid>196236</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2013-04-02 15:19:31 -0700</bug_when>
    <thetext>Created attachment 196236
Updated patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>869242</commentid>
    <comment_count>5</comment_count>
      <attachid>196236</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2013-04-04 11:10:40 -0700</bug_when>
    <thetext>Comment on attachment 196236
Updated patch.

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

&gt; Source/WebCore/html/HTMLMediaElement.cpp:626
&gt; -    if (!m_loadTimer.isActive())
&gt;          m_loadTimer.startOneShot(0);

Nit: whitespace.

&gt; Source/WebCore/html/HTMLMediaElement.cpp:3151
&gt; +        if (!trackList-&gt;contains(trackToSelect))
&gt; +            return;

Should this have an &quot;ASSERT(trackList-&gt;contains(trackToSelect))&quot;, or is it expected behavior to occasionally get a request to select a non-present track?

&gt; Source/WebCore/html/HTMLMediaElement.h:118
&gt; -        LoadTextTrackResource = 1 &lt;&lt; 1,
&gt; -        TextTrackChangesNotification = 1 &lt;&lt; 2
&gt; +        ConfigureTextTracks = 1 &lt;&lt; 1,
&gt; +        TextTrackChangesNotification = 1 &lt;&lt; 2,
&gt; +        ConfigureTextTrackDisplay = 1 &lt;&lt; 3

Nit: I prefer to add a comma after the last item in an enum, so that if values are added in the future, the diff is cleaner.  But YMMV.

&gt; Source/WebCore/html/shadow/MediaControlsApple.cpp:310
&gt;  void MediaControlsApple::changedClosedCaptionsVisibility()
&gt;  {
&gt;      MediaControls::changedClosedCaptionsVisibility();
&gt; -    if (m_closedCaptionsTrackList)
&gt; -        m_closedCaptionsTrackList-&gt;resetTrackListMenu();
&gt; +    if (m_closedCaptionsContainer &amp;&amp; m_closedCaptionsContainer-&gt;isShowing())
&gt; +        m_closedCaptionsContainer-&gt;hide();
&gt; +

Shouldn&apos;t you be checking whether the closed captions are now visible or not before hiding the captions container?

&gt; Source/WebCore/page/CaptionUserPreferences.h:85
&gt; +    void setPrimaryAudioTrackLanguageOverride(const String&amp; language) { m_primaryAudioTrackLanguageOverride = language;  }

This doesn&apos;t seem to be called from anywhere.  Is there a future patch coming which will set this value?  Also, these methods are not in the ChangeLog.

&gt; Source/WebCore/page/CaptionUserPreferencesMac.mm:140
&gt; +    default:
&gt; +        ASSERT_NOT_REACHED();
&gt; +            break;

Nit: whitespace.

Technically, you can either return inside the default statement, or move the ASSERT out of the switch.  It seems just a little weird to break up the conditional this way.

&gt; Source/WebCore/page/CaptionUserPreferencesMac.mm:-603
&gt; -static String languageIdentifier(const String&amp; languageCode)
&gt; -{
&gt; -    if (languageCode.isEmpty())
&gt; -        return languageCode;
&gt; -
&gt; -    String lowercaseLanguageCode = languageCode.lower();
&gt; -
&gt; -    // Need 2U here to disambiguate String::operator[] from operator(NSString*, int)[] in a production build.
&gt; -    if (lowercaseLanguageCode.length() &gt;= 3 &amp;&amp; (lowercaseLanguageCode[2U] == &apos;_&apos; || lowercaseLanguageCode[2U] == &apos;-&apos;))
&gt; -        lowercaseLanguageCode.truncate(2);
&gt; -    
&gt; -    return lowercaseLanguageCode;
&gt; -}
&gt; -

Nit: I realize this function was just moved up, but one alternative would have been to add a declaration for this function at the top of the file.

&gt; Source/WebCore/page/CaptionUserPreferencesMac.mm:659
&gt; +        if (testingMode()) {
&gt; +            audioTrackLanguage = primaryAudioTrackLanguageOverride();
&gt; +        } else {

Nit: no braces needed here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>869397</commentid>
    <comment_count>6</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2013-04-04 15:22:50 -0700</bug_when>
    <thetext>https://trac.webkit.org/r147675</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>869429</commentid>
    <comment_count>7</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-04-04 16:08:55 -0700</bug_when>
    <thetext>This broke 2 media tests on the bots (WK1 and WK2): http://build.webkit.org/results/Apple%20MountainLion%20Release%20WK1%20(Tests)/r147675%20(8684)/results.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>869437</commentid>
    <comment_count>8</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2013-04-04 16:21:02 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; This broke 2 media tests on the bots (WK1 and WK2): http://build.webkit.org/results/Apple%20MountainLion%20Release%20WK1%20(Tests)/r147675%20(8684)/results.html

Looks like they just need rebaselines.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>869447</commentid>
    <comment_count>9</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2013-04-04 16:34:54 -0700</bug_when>
    <thetext>New results and and updated test landed in https://trac.webkit.org/r147679.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>196228</attachid>
            <date>2013-04-02 14:39:15 -0700</date>
            <delta_ts>2013-04-02 15:19:31 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>patch_9.txt</filename>
            <type>text/plain</type>
            <size>76015</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0NzQ5OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDkxIEBACisyMDEzLTA0LTAyICBFcmljIENh
cmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIFtNYWNdIGFkZCAiYXV0
b21hdGljIiB0ZXh0IHRyYWNrIG1lbnUgaXRlbQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEzODIyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBleGlzdGluZyB0ZXN0cyB1cGRhdGVk
LgorCisgICAgICAgICogRW5nbGlzaC5scHJvai9Mb2NhbGl6YWJsZS5zdHJpbmdzOiBBZGQgbmV3
IHRyYWNrIG1lbnUgaXRlbS4KKworICAgICAgICAqIGh0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHA6
IAorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6SFRNTE1lZGlhRWxlbWVudCk6
IEluaXRpYWxpemUgbV9jYXB0aW9uRGlzcGxheU1vZGUuCisgICAgICAgIChXZWJDb3JlOjpIVE1M
TWVkaWFFbGVtZW50OjpmaW5pc2hQYXJzaW5nQ2hpbGRyZW4pOiBMb2FkVGV4dFRyYWNrUmVzb3Vy
Y2UgLT4gQ29uZmlndXJlVGV4dFRyYWNrcy4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVs
ZW1lbnQ6OnNjaGVkdWxlRGVsYXllZEFjdGlvbik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
SFRNTE1lZGlhRWxlbWVudDo6bG9hZFRpbWVyRmlyZWQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxNZWRpYUVsZW1lbnQ6OmxvYWRJbnRlcm5hbCk6IERpdHRvLiBGbGFnIHRoZSBjYXB0
aW9uIG1lbnUgYXMgaW52YWxpZCBzbyBpdCB3aWxsCisgICAgICAgICAgICBiZSByZWJ1aWx0IGFn
YWluLgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6bWVkaWFQbGF5ZXJEaWRB
ZGRUcmFjayk6IExvYWRUZXh0VHJhY2tSZXNvdXJjZSAtPiBDb25maWd1cmVUZXh0VHJhY2tzLgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6ZGlkQWRkVHJhY2spOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OmNvbmZpZ3VyZVRleHRUcmFja0dy
b3VwKTogRGVhbCB3aXRoIG5ldyB0cmFjayBkaXNwbGF5IG1vZGVzLgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTE1lZGlhRWxlbWVudDo6SFRNTE1lZGlhRWxlbWVudDo6aGFzQ2xvc2VkQ2FwdGlvbnMp
OiBNaW5vciBjbGVhbnVwLgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6Y29u
ZmlndXJlVGV4dFRyYWNrR3JvdXApOiBBZGQgc29tZSBsb2dnaW5nLgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTE1lZGlhRWxlbWVudDo6Y29uZmlndXJlVGV4dFRyYWNrcyk6IENhbGwgdXBkYXRlQWN0
aXZlVGV4dFRyYWNrQ3VlcyBzbyBjdWUgZGlzcGxheQorICAgICAgICAgICAgaXMgdXBkYXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OmNhcHRpb25QcmVmZXJlbmNlc0No
YW5nZWQpOiBEZWFsIHdpdGggbmV3IHRyYWNrIGRpc3BsYXkgbW9kZXMuCisgICAgICAgIChXZWJD
b3JlOjpIVE1MTWVkaWFFbGVtZW50OjptYXJrQ2FwdGlvbkFuZFN1YnRpdGxlVHJhY2tzQXNVbmNv
bmZpZ3VyZWQpOiBBZGQgc29tZSBsb2dnaW5nLgorICAgICAgICAqIGh0bWwvSFRNTE1lZGlhRWxl
bWVudC5oOiBEaXR0by4KKworICAgICAgICAqIGh0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1l
bnRUeXBlcy5jcHA6IFJlbW92ZSB0cmFja0luZGV4QXR0cmlidXRlTmFtZSBhbmQgdHJhY2tMaXN0
SW5kZXhGb3JFbGVtZW50LgorICAgICAgICAqIGh0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1l
bnRUeXBlcy5oOiBEaXR0by4KKworICAgICAgICAqIGh0bWwvc2hhZG93L01lZGlhQ29udHJvbEVs
ZW1lbnRzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbENsb3NlZENhcHRpb25z
VHJhY2tMaXN0RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6IERvbid0IHVzZSB0cmFjayBp
bmRleCwKKyAgICAgICAgICAgIGV2ZXJ5dGhpbmcgd2UgbmVlZCBpcyBpbiB0aGUgdHJhY2s8LT5l
bGVtZW50IG1hcCBub3cuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xDbG9zZWRDYXB0
aW9uc1RyYWNrTGlzdEVsZW1lbnQ6OnVwZGF0ZURpc3BsYXkpOiBEaXR0by4gQWx3YXlzIHJlYnVp
bGQgdGhlIAorICAgICAgICAgICAgdHJhY2sgbGlzdCBiZWNhdXNlIGNsZWFyIHRoZSBtYXAgZWFj
aCB0aW1lIHRoZSBtZW51IGdvZXMgYXdheSBiZWNhdXNlIGl0IHJlZnMgZXZlcnkgdHJhY2suCisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xDbG9zZWRDYXB0aW9uc1RyYWNrTGlzdEVsZW1l
bnQ6OnJlYnVpbGRUcmFja0xpc3RNZW51KTogRG9uJ3Qgc2V0IHRoZSB0cmFjaworICAgICAgICAg
ICAgaW5kZXggYXR0cmlidXRlIG9uIHRoZSBtZW51IGl0ZW1zLCBqdXN0IHVzZSB0aGUgbWFwLgor
ICAgICAgICAqIGh0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmg6CisKKyAgICAgICAg
KiBodG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xzQXBwbGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFDb250cm9sc0FwcGxlOjpjaGFuZ2VkQ2xvc2VkQ2FwdGlvbnNWaXNpYmlsaXR5KTogcmVz
ZXRUcmFja0xpc3RNZW51IGlzIGdvbmUuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xz
QXBwbGU6OnJlc2V0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xzQXBw
bGU6OmNsb3NlZENhcHRpb25UcmFja3NDaGFuZ2VkKTogRGl0dG8uCisKKyAgICAgICAgKiBodG1s
L3RyYWNrL1RleHRUcmFjay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0VHJhY2s6OmNhcHRp
b25NZW51T2ZmSXRlbSk6IE5ldywgc3RhdGljIFRleHRUcmFjayB1c2VkIGZvciB0aGUgbWVudSAi
T2ZmIiBpdGVtLgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrOjpjYXB0aW9uTWVudUF1dG9t
YXRpY0l0ZW0pOiBOZXcsIHN0YXRpYyBUZXh0VHJhY2sgdXNlZCBmb3IgdGhlIG1lbnUgIkF1dG9t
YXRpYyIgaXRlbS4KKyAgICAgICAgKiBodG1sL3RyYWNrL1RleHRUcmFjay5oOgorCisgICAgICAg
ICogcGFnZS9DYXB0aW9uVXNlclByZWZlcmVuY2VzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNh
cHRpb25Vc2VyUHJlZmVyZW5jZXM6OnNob3VsZFNob3dDYXB0aW9ucyk6IFJlbW92ZWQsIHdlIHVz
ZSBjYXB0aW9uRGlzcGxheU1vZGUgaW5zdGVhZC4KKyAgICAgICAgKFdlYkNvcmU6OkNhcHRpb25V
c2VyUHJlZmVyZW5jZXM6OmNhcHRpb25EaXNwbGF5TW9kZSk6IE5ldy4KKyAgICAgICAgKFdlYkNv
cmU6OkNhcHRpb25Vc2VyUHJlZmVyZW5jZXM6OnNldENhcHRpb25EaXNwbGF5TW9kZSk6IE5ldy4K
KyAgICAgICAgKFdlYkNvcmU6OkNhcHRpb25Vc2VyUHJlZmVyZW5jZXM6OnNldFByZWZlcnJlZExh
bmd1YWdlKTogTWFrZSB0aGUgcGFyYW1ldGVyIGEgY29uc3QgcmVmZXJlbmNlLgorICAgICAgICAo
V2ViQ29yZTo6Q2FwdGlvblVzZXJQcmVmZXJlbmNlczo6dGV4dFRyYWNrU2VsZWN0aW9uU2NvcmUp
OiBSZXR1cm4gMCBpZiB0aGUgdXNlciBkb2Vzbid0IHdhbnQKKyAgICAgICAgICAgIGNhcHRpb25z
IG9yIHN1YnRpdGxlcy4KKyAgICAgICAgKFdlYkNvcmU6OkNhcHRpb25Vc2VyUHJlZmVyZW5jZXM6
OnRleHRUcmFja0xhbmd1YWdlU2VsZWN0aW9uU2NvcmUpOiBUYWtlIGxhbmd1YWdlIGFzIGEgcGFy
YW1ldGVyCisgICAgICAgICAgICBpbnN0ZWFkIG9mIGFzc3VtaW5nIHRoYXQgaXQgaXMgYWx3YXlz
IHRoZSBlbnRpcmUgbGFuZ3VhZ2UgbGlzdC4KKyAgICAgICAgKiBwYWdlL0NhcHRpb25Vc2VyUHJl
ZmVyZW5jZXMuaDoKKworICAgICAgICAqIHBhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01hYy5o
OgorICAgICAgICAqIHBhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01hYy5tbToKKyAgICAgICAg
KFdlYkNvcmU6OkNhcHRpb25Vc2VyUHJlZmVyZW5jZXNNYWM6OnNob3VsZFNob3dDYXB0aW9ucyk6
IFJlbW92ZWQsIHdlIHVzZSBjYXB0aW9uRGlzcGxheU1vZGUgaW5zdGVhZC4KKyAgICAgICAgKFdl
YkNvcmU6OkNhcHRpb25Vc2VyUHJlZmVyZW5jZXNNYWM6OmNhcHRpb25EaXNwbGF5TW9kZSk6IE5l
dy4KKyAgICAgICAgKFdlYkNvcmU6OkNhcHRpb25Vc2VyUHJlZmVyZW5jZXNNYWM6OnNldENhcHRp
b25EaXNwbGF5TW9kZSk6IE5ldy4KKyAgICAgICAgKFdlYkNvcmU6OkNhcHRpb25Vc2VyUHJlZmVy
ZW5jZXNNYWM6OnNldFByZWZlcnJlZExhbmd1YWdlKTogTWFrZSB0aGUgcGFyYW1ldGVyIGEgY29u
c3QgcmVmZXJlbmNlLgorICAgICAgICAoV2ViQ29yZTo6Q2FwdGlvblVzZXJQcmVmZXJlbmNlc01h
Yzo6dGV4dFRyYWNrU2VsZWN0aW9uU2NvcmUpOiBEZWFsIHdpdGggIkF1dG9tYXRpYyIgbW9kZS4K
KyAgICAgICAgICAgIGNhcHRpb25zIG9yIHN1YnRpdGxlcy4KKyAgICAgICAgKFdlYkNvcmU6OkNh
cHRpb25Vc2VyUHJlZmVyZW5jZXM6OnRleHRUcmFja0xhbmd1YWdlU2VsZWN0aW9uU2NvcmUpOiBU
YWtlIGxhbmd1YWdlIGFzIGEgcGFyYW1ldGVyCisgICAgICAgICAgICBpbnN0ZWFkIG9mIGFzc3Vt
aW5nIHRoYXQgaXQgaXMgYWx3YXlzIHRoZSBlbnRpcmUgbGFuZ3VhZ2UgbGlzdC4KKyAgICAgICAg
KFdlYkNvcmU6OkNhcHRpb25Vc2VyUHJlZmVyZW5jZXNNYWM6OnNvcnRlZFRyYWNrTGlzdEZvck1l
bnUpOiBJbnNlcnQgIk9mZiIgYW5kICJBdXRvbWF0aWMiIGl0ZW1zLgorCisgICAgICAgICogcGxh
dGZvcm0vTG9jYWxpemVkU3RyaW5ncy5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0ZXh0VHJhY2tB
dXRvbWF0aWNNZW51SXRlbVRleHQpOiBOZXcuCisgICAgICAgICogcGxhdGZvcm0vTG9jYWxpemVk
U3RyaW5ncy5oOgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXI6Omxhbmd1YWdlT2ZQcmltYXJ5QXVkaW9U
cmFjayk6IE5ldy4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyUHJpdmF0ZS5oOgorCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2
YXRlQVZGb3VuZGF0aW9uT2JqQy5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMubW06CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpsYW5ndWFn
ZU9mUHJpbWFyeUF1ZGlvVHJhY2spOiBSZXR1cm4gdGhlIGxhbmd1YWdlCisgICAgICAgICAgICBv
ZiB0aGUgbWFpbiBhdWRpbyB0cmFjay4KKwogMjAxMy0wNC0wMiAgTWFydGluIFJvYmluc29uICA8
bXJvYmluc29uQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS10gTWFrZSBsaWJzZWNyZXQgb3B0
aW9uYWwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0VuZ2xpc2gubHByb2ovTG9jYWxpemFibGUuc3Ry
aW5ncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9FbmdsaXNoLmxwcm9qL0xvY2FsaXph
YmxlLnN0cmluZ3MJKHJldmlzaW9uIDE0NzMyMykKKysrIFNvdXJjZS9XZWJDb3JlL0VuZ2xpc2gu
bHByb2ovTG9jYWxpemFibGUuc3RyaW5ncwkod29ya2luZyBjb3B5KQpAQCAtNzYsNiArNzYsOSBA
QAogAC8AKgAgAFUAbgBkAG8AIABhAGMAdABpAG8AbgAgAG4AYQBtAGUAIAAqAC8ACiAAIgBBAGwA
aQBnAG4AIABSAGkAZwBoAHQAIAAoAFUAbgBkAG8AIABhAGMAdABpAG8AbgAgAG4AYQBtAGUAKQAi
ACAAPQAgACIAQQBsAGkAZwBuACAAUgBpAGcAaAB0ACIAOwAKIAAKKwAvACoAIABNAGUAbgB1ACAA
aQB0AGUAbQAgAGwAYQBiAGUAbAAgAGYAbwByACAAYQB1AHQAbwBtAGEAdABpAGMAIAB0AHIAYQBj
AGsAIABzAGUAbABlAGMAdABpAG8AbgAgAGIAZQBoAGEAdgBpAG8AcgAgAGkAbgAgAHQAaABlACAA
ZgBvAHIAbQAgAG8AZgAgACcAQQB1AHQAbwBtAGEAdABpAGMAIAAoAFMAeQBzAHQAZQBtAEwAYQBu
AGcAdQBhAGcAZQApACcAIAAqAC8ACisAIgBBAHUAdABvAG0AYQB0AGkAYwAgACgAJQBAACkAIgAg
AD0AIAAiAEEAdQB0AG8AbQBhAHQAaQBjACAAKAAlAEAAKQAiADsACisACiAALwAqACAAQgBhAGMA
awAgAGMAbwBuAHQAZQB4AHQAIABtAGUAbgB1ACAAaQB0AGUAbQAgACoALwAKIAAiAEIAYQBjAGsA
IgAgAD0AIAAiAEIAYQBjAGsAIgA7AAogAApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
TWVkaWFFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxN
ZWRpYUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNDczMjMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxNZWRpYUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTUsNiArMjk1LDcgQEAg
SFRNTE1lZGlhRWxlbWVudDo6SFRNTE1lZGlhRWxlbWVudChjb25zdAogICAgICwgbV9oYXZlVmlz
aWJsZVRleHRUcmFjayhmYWxzZSkKICAgICAsIG1fcHJvY2Vzc2luZ1ByZWZlcmVuY2VDaGFuZ2Uo
ZmFsc2UpCiAgICAgLCBtX2xhc3RUZXh0VHJhY2tVcGRhdGVUaW1lKC0xKQorICAgICwgbV9jYXB0
aW9uRGlzcGxheU1vZGUoQ2FwdGlvblVzZXJQcmVmZXJlbmNlczo6QXV0b21hdGljKQogICAgICwg
bV90ZXh0VHJhY2tzKDApCiAgICAgLCBtX2lnbm9yZVRyYWNrRGlzcGxheVVwZGF0ZSgwKQogI2Vu
ZGlmCkBAIC00OTYsNyArNDk3LDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpmaW5pc2hQYXJz
aW5nQ2hpbAogICAgIAogICAgIGZvciAoTm9kZSogbm9kZSA9IGZpcnN0Q2hpbGQoKTsgbm9kZTsg
bm9kZSA9IG5vZGUtPm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAgaWYgKG5vZGUtPmhhc1RhZ05h
bWUodHJhY2tUYWcpKSB7Ci0gICAgICAgICAgICBzY2hlZHVsZURlbGF5ZWRBY3Rpb24oTG9hZFRl
eHRUcmFja1Jlc291cmNlKTsKKyAgICAgICAgICAgIHNjaGVkdWxlRGVsYXllZEFjdGlvbihDb25m
aWd1cmVUZXh0VHJhY2tzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQpA
QCAtNjEwLDggKzYxMSw4IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6c2NoZWR1bGVEZWxheWVk
QWMKICAgICB9CiAKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCi0gICAgaWYgKFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OndlYmtpdFZpZGVvVHJhY2tFbmFibGVkKCkgJiYgKGFjdGlvblR5cGUgJiBM
b2FkVGV4dFRyYWNrUmVzb3VyY2UpKQotICAgICAgICBtX3BlbmRpbmdBY3Rpb25GbGFncyB8PSBM
b2FkVGV4dFRyYWNrUmVzb3VyY2U7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6Ondl
YmtpdFZpZGVvVHJhY2tFbmFibGVkKCkgJiYgKGFjdGlvblR5cGUgJiBDb25maWd1cmVUZXh0VHJh
Y2tzKSkKKyAgICAgICAgbV9wZW5kaW5nQWN0aW9uRmxhZ3MgfD0gQ29uZmlndXJlVGV4dFRyYWNr
czsKICNlbmRpZgogCiAjaWYgVVNFKFBMQVRGT1JNX1RFWFRfVFJBQ0tfTUVOVSkKQEAgLTYxOSw3
ICs2MjAsNiBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnNjaGVkdWxlRGVsYXllZEFjCiAgICAg
ICAgIG1fcGVuZGluZ0FjdGlvbkZsYWdzIHw9IFRleHRUcmFja0NoYW5nZXNOb3RpZmljYXRpb247
CiAjZW5kaWYKIAotICAgIGlmICghbV9sb2FkVGltZXIuaXNBY3RpdmUoKSkKICAgICAgICAgbV9s
b2FkVGltZXIuc3RhcnRPbmVTaG90KDApOwogfQogCkBAIC02NDYsNyArNjQ2LDcgQEAgdm9pZCBI
VE1MTWVkaWFFbGVtZW50Ojpsb2FkVGltZXJGaXJlZChUaQogICAgIFJlZlB0cjxIVE1MTWVkaWFF
bGVtZW50PiBwcm90ZWN0KHRoaXMpOyAvLyBsb2FkTmV4dFNvdXJjZUNoaWxkIG1heSBmaXJlICdi
ZWZvcmVsb2FkJywgd2hpY2ggY2FuIG1ha2UgYXJiaXRyYXJ5IERPTSBtdXRhdGlvbnMuCiAKICNp
ZiBFTkFCTEUoVklERU9fVFJBQ0spCi0gICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6Ondl
YmtpdFZpZGVvVHJhY2tFbmFibGVkKCkgJiYgKG1fcGVuZGluZ0FjdGlvbkZsYWdzICYgTG9hZFRl
eHRUcmFja1Jlc291cmNlKSkKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6d2Via2l0
VmlkZW9UcmFja0VuYWJsZWQoKSAmJiAobV9wZW5kaW5nQWN0aW9uRmxhZ3MgJiBDb25maWd1cmVU
ZXh0VHJhY2tzKSkKICAgICAgICAgY29uZmlndXJlVGV4dFRyYWNrcygpOwogI2VuZGlmCiAKQEAg
LTgzMCw2ICs4MzAsOSBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmxvYWRJbnRlcm5hbCgpCiAg
ICAgcmVtb3ZlQmVoYXZpb3JSZXN0cmljdGlvbihSZXF1aXJlUGFnZUNvbnNlbnRUb0xvYWRNZWRp
YVJlc3RyaWN0aW9uKTsKIAogI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAgICBpZiAoaGFzTWVk
aWFDb250cm9scygpKQorICAgICAgICBtZWRpYUNvbnRyb2xzKCktPmNoYW5nZWRDbG9zZWRDYXB0
aW9uc1Zpc2liaWxpdHkoKTsKKwogICAgIC8vIEhUTUxNZWRpYUVsZW1lbnQ6OnRleHRUcmFja3NB
cmVSZWFkeSB3aWxsIG5lZWQgIi4uLiB0aGUgdGV4dCB0cmFja3Mgd2hvc2UgbW9kZSB3YXMgbm90
IGluIHRoZQogICAgIC8vIGRpc2FibGVkIHN0YXRlIHdoZW4gdGhlIGVsZW1lbnQncyByZXNvdXJj
ZSBzZWxlY3Rpb24gYWxnb3JpdGhtIGxhc3Qgc3RhcnRlZCIuCiAgICAgaWYgKFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OndlYmtpdFZpZGVvVHJhY2tFbmFibGVkKCkpIHsKQEAgLTI4MjEsNyArMjgy
NCw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6bWVkaWFQbGF5ZXJEaWRBZGQKICAgICAvLyA3
LiBTZXQgdGhlIG5ldyB0ZXh0IHRyYWNrJ3MgbW9kZSB0byB0aGUgbW9kZSBjb25zaXN0ZW50IHdp
dGggdGhlIHVzZXIncyBwcmVmZXJlbmNlcyBhbmQgdGhlIHJlcXVpcmVtZW50cyBvZgogICAgIC8v
IHRoZSByZWxldmFudCBzcGVjaWZpY2F0aW9uIGZvciB0aGUgZGF0YS4KICAgICAvLyAgLSBUaGlz
IHdpbGwgaGFwcGVuIGluIGNvbmZpZ3VyZVRleHRUcmFja3MoKQotICAgIHNjaGVkdWxlRGVsYXll
ZEFjdGlvbihMb2FkVGV4dFRyYWNrUmVzb3VyY2UpOworICAgIHNjaGVkdWxlRGVsYXllZEFjdGlv
bihDb25maWd1cmVUZXh0VHJhY2tzKTsKICAgICAKICAgICAvLyA4LiBBZGQgdGhlIG5ldyB0ZXh0
IHRyYWNrIHRvIHRoZSBtZWRpYSBlbGVtZW50J3MgbGlzdCBvZiB0ZXh0IHRyYWNrcy4KICAgICAv
LyA5LiBGaXJlIGFuIGV2ZW50IHdpdGggdGhlIG5hbWUgYWRkdHJhY2ssIHRoYXQgZG9lcyBub3Qg
YnViYmxlIGFuZCBpcyBub3QgY2FuY2VsYWJsZSwgYW5kIHRoYXQgdXNlcyB0aGUgVHJhY2tFdmVu
dApAQCAtMzAyMyw3ICszMDI2LDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpkaWRBZGRUcmFj
ayhIVE1MVAogICAgIC8vIERvIG5vdCBzY2hlZHVsZSB0aGUgdHJhY2sgbG9hZGluZyB1bnRpbCBw
YXJzaW5nIGZpbmlzaGVzIHNvIHdlIGRvbid0IHN0YXJ0IGJlZm9yZSBhbGwgdHJhY2tzCiAgICAg
Ly8gaW4gdGhlIG1hcmt1cCBoYXZlIGJlZW4gYWRkZWQuCiAgICAgaWYgKCFtX3BhcnNpbmdJblBy
b2dyZXNzKQotICAgICAgICBzY2hlZHVsZURlbGF5ZWRBY3Rpb24oTG9hZFRleHRUcmFja1Jlc291
cmNlKTsKKyAgICAgICAgc2NoZWR1bGVEZWxheWVkQWN0aW9uKENvbmZpZ3VyZVRleHRUcmFja3Mp
OwogCiAgICAgaWYgKGhhc01lZGlhQ29udHJvbHMoKSkKICAgICAgICAgbWVkaWFDb250cm9scygp
LT5jbG9zZWRDYXB0aW9uVHJhY2tzQ2hhbmdlZCgpOwpAQCAtMzA2MywyMCArMzA2NiwxMiBAQCB2
b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmRpZFJlbW92ZVRyYWNrKEhUCiAgICAgICAgIG1fdGV4dFRy
YWNrc1doZW5SZXNvdXJjZVNlbGVjdGlvbkJlZ2FuLnJlbW92ZShpbmRleCk7CiB9CiAKLWJvb2wg
SFRNTE1lZGlhRWxlbWVudDo6dXNlclByZWZlcnNDYXB0aW9ucygpIGNvbnN0Ci17Ci0gICAgUGFn
ZSogcGFnZSA9IGRvY3VtZW50KCktPnBhZ2UoKTsKLSAgICBpZiAoIXBhZ2UpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIENhcHRpb25Vc2VyUHJlZmVyZW5jZXMqIGNhcHRpb25QcmVmZXJl
bmNlcyA9IHBhZ2UtPmdyb3VwKCkuY2FwdGlvblByZWZlcmVuY2VzKCk7Ci0gICAgcmV0dXJuIGNh
cHRpb25QcmVmZXJlbmNlcy0+dXNlckhhc0NhcHRpb25QcmVmZXJlbmNlcygpICYmIGNhcHRpb25Q
cmVmZXJlbmNlcy0+c2hvdWxkU2hvd0NhcHRpb25zKCk7Ci19Ci0KIHZvaWQgSFRNTE1lZGlhRWxl
bWVudDo6Y29uZmlndXJlVGV4dFRyYWNrR3JvdXAoY29uc3QgVHJhY2tHcm91cCYgZ3JvdXApCiB7
CiAgICAgQVNTRVJUKGdyb3VwLnRyYWNrcy5zaXplKCkpOwogCisgICAgTE9HKE1lZGlhLCAiSFRN
TE1lZGlhRWxlbWVudDo6Y29uZmlndXJlVGV4dFRyYWNrR3JvdXAiKTsKKwogICAgIFBhZ2UqIHBh
Z2UgPSBkb2N1bWVudCgpLT5wYWdlKCk7CiAgICAgQ2FwdGlvblVzZXJQcmVmZXJlbmNlcyogY2Fw
dGlvblByZWZlcmVuY2VzID0gcGFnZT8gcGFnZS0+Z3JvdXAoKS5jYXB0aW9uUHJlZmVyZW5jZXMo
KSA6IDA7CiAKQEAgLTMxNDcsMjMgKzMxNDIsMzkgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojpz
ZXRTZWxlY3RlZFRleHRUcgogICAgIFRleHRUcmFja0xpc3QqIHRyYWNrTGlzdCA9IHRleHRUcmFj
a3MoKTsKICAgICBpZiAoIXRyYWNrTGlzdCB8fCAhdHJhY2tMaXN0LT5sZW5ndGgoKSkKICAgICAg
ICAgcmV0dXJuOwotICAgIGlmICh0cmFja1RvU2VsZWN0ICYmICF0cmFja0xpc3QtPmNvbnRhaW5z
KHRyYWNrVG9TZWxlY3QpKQotICAgICAgICByZXR1cm47CiAKLSAgICBmb3IgKGludCBpID0gMCwg
bGVuZ3RoID0gdHJhY2tMaXN0LT5sZW5ndGgoKTsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAg
IFRleHRUcmFjayogdHJhY2sgPSB0cmFja0xpc3QtPml0ZW0oaSk7Ci0gICAgICAgIGlmICghdHJh
Y2tUb1NlbGVjdCB8fCB0cmFjayAhPSB0cmFja1RvU2VsZWN0KQotICAgICAgICAgICAgdHJhY2st
PnNldE1vZGUoVGV4dFRyYWNrOjpkaXNhYmxlZEtleXdvcmQoKSk7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIHRyYWNrLT5zZXRNb2RlKFRleHRUcmFjazo6c2hvd2luZ0tleXdvcmQoKSk7Cisg
ICAgaWYgKHRyYWNrVG9TZWxlY3QgIT0gVGV4dFRyYWNrOjpjYXB0aW9uTWVudU9mZkl0ZW0oKSAm
JiB0cmFja1RvU2VsZWN0ICE9IFRleHRUcmFjazo6Y2FwdGlvbk1lbnVBdXRvbWF0aWNJdGVtKCkp
IHsKKyAgICAgICAgaWYgKCF0cmFja0xpc3QtPmNvbnRhaW5zKHRyYWNrVG9TZWxlY3QpKQorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgZm9yIChpbnQgaSA9IDAsIGxlbmd0
aCA9IHRyYWNrTGlzdC0+bGVuZ3RoKCk7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICAgICAg
VGV4dFRyYWNrKiB0cmFjayA9IHRyYWNrTGlzdC0+aXRlbShpKTsKKyAgICAgICAgICAgIGlmICgh
dHJhY2tUb1NlbGVjdCB8fCB0cmFjayAhPSB0cmFja1RvU2VsZWN0KQorICAgICAgICAgICAgICAg
IHRyYWNrLT5zZXRNb2RlKFRleHRUcmFjazo6ZGlzYWJsZWRLZXl3b3JkKCkpOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIHRyYWNrLT5zZXRNb2RlKFRleHRUcmFjazo6c2hvd2lu
Z0tleXdvcmQoKSk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBDYXB0aW9uVXNlclByZWZlcmVu
Y2VzKiBjYXB0aW9uUHJlZmVyZW5jZXMgPSBkb2N1bWVudCgpLT5wYWdlKCkgPyBkb2N1bWVudCgp
LT5wYWdlKCktPmdyb3VwKCkuY2FwdGlvblByZWZlcmVuY2VzKCkgOiAwOwotICAgIGlmIChjYXB0
aW9uUHJlZmVyZW5jZXMpIHsKLSAgICAgICAgY2FwdGlvblByZWZlcmVuY2VzLT5zZXRTaG91bGRT
aG93Q2FwdGlvbnModHJhY2tUb1NlbGVjdCk7Ci0gICAgICAgIGlmICh0cmFja1RvU2VsZWN0ICYm
IHRyYWNrVG9TZWxlY3QtPmxhbmd1YWdlKCkubGVuZ3RoKCkpCisgICAgaWYgKCFjYXB0aW9uUHJl
ZmVyZW5jZXMpCisgICAgICAgIHJldHVybjsKKworICAgIENhcHRpb25Vc2VyUHJlZmVyZW5jZXM6
OkNhcHRpb25EaXNwbGF5TW9kZSBkaXNwbGF5TW9kZSA9IGNhcHRpb25QcmVmZXJlbmNlcy0+Y2Fw
dGlvbkRpc3BsYXlNb2RlKCk7CisgICAgaWYgKHRyYWNrVG9TZWxlY3QgPT0gVGV4dFRyYWNrOjpj
YXB0aW9uTWVudU9mZkl0ZW0oKSkKKyAgICAgICAgZGlzcGxheU1vZGUgPSBDYXB0aW9uVXNlclBy
ZWZlcmVuY2VzOjpGb3JjZWRPbmx5OworICAgIGVsc2UgaWYgKHRyYWNrVG9TZWxlY3QgPT0gVGV4
dFRyYWNrOjpjYXB0aW9uTWVudUF1dG9tYXRpY0l0ZW0oKSkKKyAgICAgICAgZGlzcGxheU1vZGUg
PSBDYXB0aW9uVXNlclByZWZlcmVuY2VzOjpBdXRvbWF0aWM7CisgICAgZWxzZSB7CisgICAgICAg
IGRpc3BsYXlNb2RlID0gQ2FwdGlvblVzZXJQcmVmZXJlbmNlczo6QWx3YXlzT247CisgICAgICAg
IGlmICh0cmFja1RvU2VsZWN0LT5sYW5ndWFnZSgpLmxlbmd0aCgpKQogICAgICAgICAgICAgY2Fw
dGlvblByZWZlcmVuY2VzLT5zZXRQcmVmZXJyZWRMYW5ndWFnZSh0cmFja1RvU2VsZWN0LT5sYW5n
dWFnZSgpKTsKKyAgICAgICAgCisgICAgICAgIC8vIFNldCBtX2NhcHRpb25EaXNwbGF5TW9kZSBo
ZXJlIHNvIHdlIGRvbid0IHJlY29uZmlndXJlIGFnYWluIHdoZW4gdGhlIHByZWZlcmVuY2UgY2hh
bmdlZCBub3RpZmljYXRpb24gY29tZXMgdGhyb3VnaC4KKyAgICAgICAgbV9jYXB0aW9uRGlzcGxh
eU1vZGUgPSBkaXNwbGF5TW9kZTsKICAgICB9CisKKyAgICBjYXB0aW9uUHJlZmVyZW5jZXMtPnNl
dENhcHRpb25EaXNwbGF5TW9kZShkaXNwbGF5TW9kZSk7CiB9CiAKIHZvaWQgSFRNTE1lZGlhRWxl
bWVudDo6Y29uZmlndXJlVGV4dFRyYWNrcygpCkBAIC00MjQ4LDcgKzQyNTksOSBAQCBib29sIEhU
TUxNZWRpYUVsZW1lbnQ6Omhhc0Nsb3NlZENhcHRpb25zCiAgICAgICAgIHJldHVybiB0cnVlOwog
CiAjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQotICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVz
Ojp3ZWJraXRWaWRlb1RyYWNrRW5hYmxlZCgpICYmIG1fdGV4dFRyYWNrcykKKyAgICBpZiAoIVJ1
bnRpbWVFbmFibGVkRmVhdHVyZXM6OndlYmtpdFZpZGVvVHJhY2tFbmFibGVkKCkgfHwgIW1fdGV4
dFRyYWNrcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG1fdGV4dFRyYWNrcy0+bGVuZ3RoKCk7ICsraSkgewogICAgICAgICBpZiAobV90ZXh0
VHJhY2tzLT5pdGVtKGkpLT5yZWFkaW5lc3NTdGF0ZSgpID09IFRleHRUcmFjazo6RmFpbGVkVG9M
b2FkKQogICAgICAgICAgICAgY29udGludWU7CkBAIC00MjU4LDYgKzQyNzEsNyBAQCBib29sIEhU
TUxNZWRpYUVsZW1lbnQ6Omhhc0Nsb3NlZENhcHRpb25zCiAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CiAjZW5kaWYKKwogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAtNDQ1OCw2ICs0
NDcyLDggQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojpjb25maWd1cmVUZXh0VHJhYwogICAgIGlm
IChtX3Byb2Nlc3NpbmdQcmVmZXJlbmNlQ2hhbmdlKQogICAgICAgICByZXR1cm47CiAKKyAgICBM
T0coTWVkaWEsICJIVE1MTWVkaWFFbGVtZW50Ojpjb25maWd1cmVUZXh0VHJhY2tEaXNwbGF5Iik7
CisKICAgICBib29sIGhhdmVWaXNpYmxlVGV4dFRyYWNrID0gZmFsc2U7CiAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG1fdGV4dFRyYWNrcy0+bGVuZ3RoKCk7ICsraSkgewogICAgICAgICBp
ZiAobV90ZXh0VHJhY2tzLT5pdGVtKGkpLT5tb2RlKCkgPT0gVGV4dFRyYWNrOjpzaG93aW5nS2V5
d29yZCgpKSB7CkBAIC00NDY2LDggKzQ0ODIsMTEgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojpj
b25maWd1cmVUZXh0VHJhYwogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKG1faGF2ZVZpc2li
bGVUZXh0VHJhY2sgPT0gaGF2ZVZpc2libGVUZXh0VHJhY2spCisgICAgaWYgKG1faGF2ZVZpc2li
bGVUZXh0VHJhY2sgPT0gaGF2ZVZpc2libGVUZXh0VHJhY2spIHsKKyAgICAgICAgdXBkYXRlQWN0
aXZlVGV4dFRyYWNrQ3VlcyhjdXJyZW50VGltZSgpKTsKICAgICAgICAgcmV0dXJuOworICAgIH0K
KwogICAgIG1faGF2ZVZpc2libGVUZXh0VHJhY2sgPSBoYXZlVmlzaWJsZVRleHRUcmFjazsKICAg
ICBtX2Nsb3NlZENhcHRpb25zVmlzaWJsZSA9IG1faGF2ZVZpc2libGVUZXh0VHJhY2s7CiAKQEAg
LTQ0NzgsOCArNDQ5NywxMCBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmNvbmZpZ3VyZVRleHRU
cmFjCiAKICAgICBtZWRpYUNvbnRyb2xzKCktPmNoYW5nZWRDbG9zZWRDYXB0aW9uc1Zpc2liaWxp
dHkoKTsKICAgICAKLSAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6d2Via2l0VmlkZW9U
cmFja0VuYWJsZWQoKSkKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6d2Via2l0Vmlk
ZW9UcmFja0VuYWJsZWQoKSkgewogICAgICAgICB1cGRhdGVUZXh0VHJhY2tEaXNwbGF5KCk7Cisg
ICAgICAgIHVwZGF0ZUFjdGl2ZVRleHRUcmFja0N1ZXMoY3VycmVudFRpbWUoKSk7CisgICAgfQog
fQogCiB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmNhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWQoKQpA
QCAtNDQ5MCw3ICs0NTExLDE1IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6Y2FwdGlvblByZWZl
cmVuY2UKICAgICBpZiAoaGFzTWVkaWFDb250cm9scygpKQogICAgICAgICBtZWRpYUNvbnRyb2xz
KCktPnRleHRUcmFja1ByZWZlcmVuY2VzQ2hhbmdlZCgpOwogCi0gICAgc2V0Q2xvc2VkQ2FwdGlv
bnNWaXNpYmxlKHVzZXJQcmVmZXJzQ2FwdGlvbnMoKSk7CisgICAgaWYgKCFkb2N1bWVudCgpLT5w
YWdlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIENhcHRpb25Vc2VyUHJlZmVyZW5jZXM6OkNh
cHRpb25EaXNwbGF5TW9kZSBkaXNwbGF5TW9kZSA9IGRvY3VtZW50KCktPnBhZ2UoKS0+Z3JvdXAo
KS5jYXB0aW9uUHJlZmVyZW5jZXMoKS0+Y2FwdGlvbkRpc3BsYXlNb2RlKCk7CisgICAgaWYgKG1f
Y2FwdGlvbkRpc3BsYXlNb2RlID09IGRpc3BsYXlNb2RlKQorICAgICAgICByZXR1cm47CisKKyAg
ICBtX2NhcHRpb25EaXNwbGF5TW9kZSA9IGRpc3BsYXlNb2RlOworICAgIHNldENsb3NlZENhcHRp
b25zVmlzaWJsZShtX2NhcHRpb25EaXNwbGF5TW9kZSA9PSBDYXB0aW9uVXNlclByZWZlcmVuY2Vz
OjpBbHdheXNPbik7CiB9CiAKIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6bWFya0NhcHRpb25BbmRT
dWJ0aXRsZVRyYWNrc0FzVW5jb25maWd1cmVkKCkKQEAgLTQ0OTgsNiArNDUyNyw4IEBAIHZvaWQg
SFRNTE1lZGlhRWxlbWVudDo6bWFya0NhcHRpb25BbmRTdWIKICAgICBpZiAoIW1fdGV4dFRyYWNr
cykKICAgICAgICAgcmV0dXJuOwogCisgICAgTE9HKE1lZGlhLCAiSFRNTE1lZGlhRWxlbWVudDo6
bWFya0NhcHRpb25BbmRTdWJ0aXRsZVRyYWNrc0FzVW5jb25maWd1cmVkIik7CisKICAgICAvLyBN
YXJrIGFsbCB0cmFja3MgYXMgbm90ICJjb25maWd1cmVkIiBzbyB0aGF0IGNvbmZpZ3VyZVRleHRU
cmFja3MoKQogICAgIC8vIHdpbGwgcmVjb25zaWRlciB3aGljaCB0cmFja3MgdG8gZGlzcGxheSBp
biBsaWdodCBvZiBuZXcgdXNlciBwcmVmZXJlbmNlcwogICAgIC8vIChlLmcuIGRlZmF1bHQgdHJh
Y2tzIHNob3VsZCBub3QgYmUgZGlzcGxheWVkIGlmIHRoZSB1c2VyIGhhcyB0dXJuZWQgb2ZmCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaAkocmV2aXNpb24gMTQ3MzIz
KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM5LDYgKzM5LDcgQEAKICNlbmRpZgogCiAjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQor
I2luY2x1ZGUgIkNhcHRpb25Vc2VyUHJlZmVyZW5jZXMuaCIKICNpbmNsdWRlICJQT0RJbnRlcnZh
bFRyZWUuaCIKICNpbmNsdWRlICJUZXh0VHJhY2suaCIKICNpbmNsdWRlICJUZXh0VHJhY2tDdWUu
aCIKQEAgLTExMiw4ICsxMTMsOSBAQCBwdWJsaWM6CiAKICAgICBlbnVtIERlbGF5ZWRBY3Rpb25U
eXBlIHsKICAgICAgICAgTG9hZE1lZGlhUmVzb3VyY2UgPSAxIDw8IDAsCi0gICAgICAgIExvYWRU
ZXh0VHJhY2tSZXNvdXJjZSA9IDEgPDwgMSwKLSAgICAgICAgVGV4dFRyYWNrQ2hhbmdlc05vdGlm
aWNhdGlvbiA9IDEgPDwgMgorICAgICAgICBDb25maWd1cmVUZXh0VHJhY2tzID0gMSA8PCAxLAor
ICAgICAgICBUZXh0VHJhY2tDaGFuZ2VzTm90aWZpY2F0aW9uID0gMSA8PCAyLAorICAgICAgICBD
b25maWd1cmVUZXh0VHJhY2tEaXNwbGF5ID0gMSA8PCAzCiAgICAgfTsKICAgICB2b2lkIHNjaGVk
dWxlRGVsYXllZEFjdGlvbihEZWxheWVkQWN0aW9uVHlwZSk7CiAgICAgCkBAIC0yNjgsMTAgKzI3
MCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbmZpZ3VyZVRleHRUcmFja0dyb3VwKGNvbnN0IFRy
YWNrR3JvdXAmKTsKIAogICAgIHZvaWQgc2V0U2VsZWN0ZWRUZXh0VHJhY2soVGV4dFRyYWNrKik7
Ci0gICAgc3RhdGljIGludCB0ZXh0VHJhY2tzT2ZmSW5kZXgoKSB7IHJldHVybiAtMTsgfQotICAg
IHN0YXRpYyBpbnQgdGV4dFRyYWNrc0luZGV4Tm90Rm91bmQoKSB7IHJldHVybiAtMjsgfQogCi0g
ICAgYm9vbCB1c2VyUHJlZmVyc0NhcHRpb25zKCkgY29uc3Q7CiAgICAgYm9vbCB0ZXh0VHJhY2tz
QXJlUmVhZHkoKSBjb25zdDsKICAgICB2b2lkIGNvbmZpZ3VyZVRleHRUcmFja0Rpc3BsYXkoKTsK
ICAgICB2b2lkIHVwZGF0ZVRleHRUcmFja0Rpc3BsYXkoKTsKQEAgLTY5Niw3ICs2OTUsOSBAQCBw
cml2YXRlOgogICAgIGJvb2wgbV90cmFja3NBcmVSZWFkeSA6IDE7CiAgICAgYm9vbCBtX2hhdmVW
aXNpYmxlVGV4dFRyYWNrIDogMTsKICAgICBib29sIG1fcHJvY2Vzc2luZ1ByZWZlcmVuY2VDaGFu
Z2UgOiAxOworCiAgICAgZmxvYXQgbV9sYXN0VGV4dFRyYWNrVXBkYXRlVGltZTsKKyAgICBDYXB0
aW9uVXNlclByZWZlcmVuY2VzOjpDYXB0aW9uRGlzcGxheU1vZGUgbV9jYXB0aW9uRGlzcGxheU1v
ZGU7CiAKICAgICBSZWZQdHI8VGV4dFRyYWNrTGlzdD4gbV90ZXh0VHJhY2tzOwogICAgIFZlY3Rv
cjxSZWZQdHI8VGV4dFRyYWNrPiA+IG1fdGV4dFRyYWNrc1doZW5SZXNvdXJjZVNlbGVjdGlvbkJl
Z2FuOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVu
dFR5cGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRp
YUNvbnRyb2xFbGVtZW50VHlwZXMuY3BwCShyZXZpc2lvbiAxNDczMjMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50VHlwZXMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03NSwyNiArNzUsNiBAQCBNZWRpYUNvbnRyb2xFbGVtZW50VHlwZSBtZWRpYUNvbnRy
b2xFbGVtCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PE1lZGlhQ29udHJvbERpdkVsZW1lbnQqPihl
bGVtZW50KS0+ZGlzcGxheVR5cGUoKTsKIH0KIAotI2lmIEVOQUJMRShWSURFT19UUkFDSykKLWNv
bnN0IEF0b21pY1N0cmluZyYgdHJhY2tJbmRleEF0dHJpYnV0ZU5hbWUoKQotewotICAgIERFRklO
RV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCBuYW1lLCAoIngtd2Via2l0LXRyYWNrLWluZGV4
IiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwotICAgIHJldHVybiBuYW1l
OwotfQotCi1pbnQgdHJhY2tMaXN0SW5kZXhGb3JFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQpCi17
Ci0gICAgY29uc3QgQXRvbWljU3RyaW5nIHRyYWNrSW5kZXhBdHRyaWJ1dGVWYWx1ZSA9IGVsZW1l
bnQtPmdldEF0dHJpYnV0ZSh0cmFja0luZGV4QXR0cmlidXRlTmFtZSgpKTsKLSAgICBpZiAodHJh
Y2tJbmRleEF0dHJpYnV0ZVZhbHVlLmlzTnVsbCgpIHx8IHRyYWNrSW5kZXhBdHRyaWJ1dGVWYWx1
ZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBIVE1MTWVkaWFFbGVtZW50Ojp0ZXh0VHJhY2tz
SW5kZXhOb3RGb3VuZCgpOwotICAgIGJvb2wgb2s7Ci0gICAgaW50IHRyYWNrSW5kZXggPSB0cmFj
a0luZGV4QXR0cmlidXRlVmFsdWUudG9JbnQoJm9rKTsKLSAgICBpZiAoIW9rKQotICAgICAgICBy
ZXR1cm4gSFRNTE1lZGlhRWxlbWVudDo6dGV4dFRyYWNrc0luZGV4Tm90Rm91bmQoKTsKLSAgICBy
ZXR1cm4gdHJhY2tJbmRleDsKLX0KLSNlbmRpZgotCiBNZWRpYUNvbnRyb2xFbGVtZW50OjpNZWRp
YUNvbnRyb2xFbGVtZW50KE1lZGlhQ29udHJvbEVsZW1lbnRUeXBlIGRpc3BsYXlUeXBlLCBIVE1M
RWxlbWVudCogZWxlbWVudCkKICAgICA6IG1fbWVkaWFDb250cm9sbGVyKDApCiAgICAgLCBtX2Rp
c3BsYXlUeXBlKGRpc3BsYXlUeXBlKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cv
TWVkaWFDb250cm9sRWxlbWVudFR5cGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
aHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudFR5cGVzLmgJKHJldmlzaW9uIDE0NzMyMykK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRUeXBlcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC03OSwxMSArNzksNiBAQCBpbmxpbmUgSFRNTE1lZGlhRWxlbWVu
dCogdG9QYXJlbnRNZWRpYUVsCiAKIE1lZGlhQ29udHJvbEVsZW1lbnRUeXBlIG1lZGlhQ29udHJv
bEVsZW1lbnRUeXBlKE5vZGUqKTsKIAotI2lmIEVOQUJMRShWSURFT19UUkFDSykKLWNvbnN0IEF0
b21pY1N0cmluZyYgdHJhY2tJbmRleEF0dHJpYnV0ZU5hbWUoKTsKLWludCB0cmFja0xpc3RJbmRl
eEZvckVsZW1lbnQoRWxlbWVudCopOwotI2VuZGlmCi0KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KIAogY2xhc3MgTWVkaWFDb250cm9sRWxlbWVudCB7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwCShyZXZp
c2lvbiAxNDczMjMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xF
bGVtZW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcwLDEwICs3MCw2IEBAIHVzaW5nIG5hbWVz
cGFjZSBIVE1MTmFtZXM7CiBzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5nJiBnZXRNZWRpYUNvbnRy
b2xDdXJyZW50VGltZURpc3BsYXlFbGVtZW50U2hhZG93UHNldWRvSWQoKTsKIHN0YXRpYyBjb25z
dCBBdG9taWNTdHJpbmcmIGdldE1lZGlhQ29udHJvbFRpbWVSZW1haW5pbmdEaXNwbGF5RWxlbWVu
dFNoYWRvd1BzZXVkb0lkKCk7CiAKLSNpZiBFTkFCTEUoVklERU9fVFJBQ0spCi1zdGF0aWMgY29u
c3QgY2hhciogdGV4dFRyYWNrc09mZkF0dHJWYWx1ZSA9ICItMSI7IC8vIFRoaXMgbXVzdCBtYXRj
aCBIVE1MTWVkaWFFbGVtZW50Ojp0ZXh0VHJhY2tzT2ZmSW5kZXgoKQotI2VuZGlmCi0KIE1lZGlh
Q29udHJvbFBhbmVsRWxlbWVudDo6TWVkaWFDb250cm9sUGFuZWxFbGVtZW50KERvY3VtZW50KiBk
b2N1bWVudCkKICAgICA6IE1lZGlhQ29udHJvbERpdkVsZW1lbnQoZG9jdW1lbnQsIE1lZGlhQ29u
dHJvbHNQYW5lbCkKICAgICAsIG1fY2FuQmVEcmFnZ2VkKGZhbHNlKQpAQCAtNzU4LDcgKzc1NCw2
IEBAIGNvbnN0IEF0b21pY1N0cmluZyYgTWVkaWFDb250cm9sQ2xvc2VkQ2EKIE1lZGlhQ29udHJv
bENsb3NlZENhcHRpb25zVHJhY2tMaXN0RWxlbWVudDo6TWVkaWFDb250cm9sQ2xvc2VkQ2FwdGlv
bnNUcmFja0xpc3RFbGVtZW50KERvY3VtZW50KiBkb2N1bWVudCwgTWVkaWFDb250cm9scyogY29u
dHJvbHMpCiAgICAgOiBNZWRpYUNvbnRyb2xEaXZFbGVtZW50KGRvY3VtZW50LCBNZWRpYUNsb3Nl
ZENhcHRpb25zVHJhY2tMaXN0KQogICAgICwgbV9jb250cm9scyhjb250cm9scykKLSAgICAsIG1f
dHJhY2tMaXN0SGFzQ2hhbmdlZCh0cnVlKQogewogfQogCkBAIC03ODgsMTkgKzc4MywxNCBAQCB2
b2lkIE1lZGlhQ29udHJvbENsb3NlZENhcHRpb25zVHJhY2tMaXN0CiAgICAgICAgICAgICB0ZXh0
VHJhY2sgPSBpdGVyLT52YWx1ZTsKICAgICAgICAgbV9tZW51VG9UcmFja01hcC5jbGVhcigpOwog
ICAgICAgICBtX2NvbnRyb2xzLT50b2dnbGVDbG9zZWRDYXB0aW9uVHJhY2tMaXN0KCk7Ci0KLSAg
ICAgICAgaW50IHRyYWNrSW5kZXggPSB0cmFja0xpc3RJbmRleEZvckVsZW1lbnQodG9FbGVtZW50
KHRhcmdldCkpOwotICAgICAgICBpZiAodHJhY2tJbmRleCA9PSBIVE1MTWVkaWFFbGVtZW50Ojp0
ZXh0VHJhY2tzSW5kZXhOb3RGb3VuZCgpKQorICAgICAgICBpZiAoIXRleHRUcmFjaykKICAgICAg
ICAgICAgIHJldHVybjsKIAogICAgICAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQg
PSB0b1BhcmVudE1lZGlhRWxlbWVudCh0aGlzKTsKICAgICAgICAgaWYgKCFtZWRpYUVsZW1lbnQp
CiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgaWYgKHRleHRUcmFjaykKLSAgICAgICAg
ICAgIG1lZGlhRWxlbWVudC0+c2V0U2VsZWN0ZWRUZXh0VHJhY2sodGV4dFRyYWNrLmdldCgpKTsK
LSAgICAgICAgZWxzZSBpZiAodHJhY2tJbmRleCA9PSBIVE1MTWVkaWFFbGVtZW50Ojp0ZXh0VHJh
Y2tzT2ZmSW5kZXgoKSkKLSAgICAgICAgICAgIG1lZGlhRWxlbWVudC0+c2V0U2VsZWN0ZWRUZXh0
VHJhY2soMCk7CisgICAgICAgIG1lZGlhRWxlbWVudC0+c2V0U2VsZWN0ZWRUZXh0VHJhY2sodGV4
dFRyYWNrLmdldCgpKTsKIAogICAgICAgICB1cGRhdGVEaXNwbGF5KCk7CiAgICAgfQpAQCAtODIz
LDM0ICs4MTMsMjQgQEAgdm9pZCBNZWRpYUNvbnRyb2xDbG9zZWRDYXB0aW9uc1RyYWNrTGlzdAog
ICAgIGlmICghbWVkaWFDb250cm9sbGVyKCktPmhhc0Nsb3NlZENhcHRpb25zKCkpCiAgICAgICAg
IHJldHVybjsKIAorICAgIGlmICghZG9jdW1lbnQoKS0+cGFnZSgpKQorICAgICAgICByZXR1cm47
CisgICAgQ2FwdGlvblVzZXJQcmVmZXJlbmNlczo6Q2FwdGlvbkRpc3BsYXlNb2RlIGRpc3BsYXlN
b2RlID0gZG9jdW1lbnQoKS0+cGFnZSgpLT5ncm91cCgpLmNhcHRpb25QcmVmZXJlbmNlcygpLT5j
YXB0aW9uRGlzcGxheU1vZGUoKTsKKyAgICBib29sIHRyYWNrSXNTZWxlY3RlZCA9IGRpc3BsYXlN
b2RlICE9IENhcHRpb25Vc2VyUHJlZmVyZW5jZXM6OkF1dG9tYXRpYyAmJiBkaXNwbGF5TW9kZSAh
PSBDYXB0aW9uVXNlclByZWZlcmVuY2VzOjpGb3JjZWRPbmx5OworCiAgICAgSFRNTE1lZGlhRWxl
bWVudCogbWVkaWFFbGVtZW50ID0gdG9QYXJlbnRNZWRpYUVsZW1lbnQodGhpcyk7CiAgICAgaWYg
KCFtZWRpYUVsZW1lbnQpCiAgICAgICAgIHJldHVybjsKIAogICAgIFRleHRUcmFja0xpc3QqIHRy
YWNrTGlzdCA9IG1lZGlhRWxlbWVudC0+dGV4dFRyYWNrcygpOwotCiAgICAgaWYgKCF0cmFja0xp
c3QgfHwgIXRyYWNrTGlzdC0+bGVuZ3RoKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICht
X3RyYWNrTGlzdEhhc0NoYW5nZWQpCi0gICAgICAgIHJlYnVpbGRUcmFja0xpc3RNZW51KCk7Cisg
ICAgcmVidWlsZFRyYWNrTGlzdE1lbnUoKTsKIAotICAgIGJvb2wgY2FwdGlvbnNWaXNpYmxlID0g
bWVkaWFFbGVtZW50LT5jbG9zZWRDYXB0aW9uc1Zpc2libGUoKTsKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwLCBsZW5ndGggPSBtX21lbnVJdGVtcy5zaXplKCk7IGkgPCBsZW5ndGg7ICsraSkgewog
ICAgICAgICBSZWZQdHI8RWxlbWVudD4gdHJhY2tJdGVtID0gbV9tZW51SXRlbXNbaV07CiAKLSAg
ICAgICAgaW50IHRyYWNrSW5kZXggPSB0cmFja0xpc3RJbmRleEZvckVsZW1lbnQodHJhY2tJdGVt
LmdldCgpKTsKLSAgICAgICAgaWYgKHRyYWNrSW5kZXggPT0gSFRNTE1lZGlhRWxlbWVudDo6dGV4
dFRyYWNrc0luZGV4Tm90Rm91bmQoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAg
IGlmICh0cmFja0luZGV4ID09IEhUTUxNZWRpYUVsZW1lbnQ6OnRleHRUcmFja3NPZmZJbmRleCgp
KSB7Ci0gICAgICAgICAgICBpZiAoY2FwdGlvbnNWaXNpYmxlKQotICAgICAgICAgICAgICAgIHRy
YWNrSXRlbS0+Y2xhc3NMaXN0KCktPnJlbW92ZShzZWxlY3RlZENsYXNzVmFsdWUsIEFTU0VSVF9O
T19FWENFUFRJT04pOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHRyYWNrSXRl
bS0+Y2xhc3NMaXN0KCktPmFkZChzZWxlY3RlZENsYXNzVmFsdWUsIEFTU0VSVF9OT19FWENFUFRJ
T04pOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQogICAgICAgICBSZWZQdHI8
VGV4dFRyYWNrPiB0ZXh0VHJhY2s7CiAgICAgICAgIE1lbnVJdGVtVG9UcmFja01hcDo6aXRlcmF0
b3IgaXRlciA9IG1fbWVudVRvVHJhY2tNYXAuZmluZCh0cmFja0l0ZW0uZ2V0KCkpOwogICAgICAg
ICBpZiAoaXRlciA9PSBtX21lbnVUb1RyYWNrTWFwLmVuZCgpKQpAQCAtODU4LDcgKzgzOCwyNCBA
QCB2b2lkIE1lZGlhQ29udHJvbENsb3NlZENhcHRpb25zVHJhY2tMaXN0CiAgICAgICAgIHRleHRU
cmFjayA9IGl0ZXItPnZhbHVlOwogICAgICAgICBpZiAoIXRleHRUcmFjaykKICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICBpZiAodGV4dFRyYWNrLT5tb2RlKCkgPT0gVGV4dFRyYWNrOjpz
aG93aW5nS2V5d29yZCgpKQorCisgICAgICAgIGlmICh0ZXh0VHJhY2sgPT0gVGV4dFRyYWNrOjpj
YXB0aW9uTWVudU9mZkl0ZW0oKSkgeworICAgICAgICAgICAgaWYgKGRpc3BsYXlNb2RlID09IENh
cHRpb25Vc2VyUHJlZmVyZW5jZXM6OkZvcmNlZE9ubHkpCisgICAgICAgICAgICAgICAgdHJhY2tJ
dGVtLT5jbGFzc0xpc3QoKS0+YWRkKHNlbGVjdGVkQ2xhc3NWYWx1ZSwgQVNTRVJUX05PX0VYQ0VQ
VElPTik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgdHJhY2tJdGVtLT5jbGFz
c0xpc3QoKS0+cmVtb3ZlKHNlbGVjdGVkQ2xhc3NWYWx1ZSwgQVNTRVJUX05PX0VYQ0VQVElPTik7
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0ZXh0VHJh
Y2sgPT0gVGV4dFRyYWNrOjpjYXB0aW9uTWVudUF1dG9tYXRpY0l0ZW0oKSkgeworICAgICAgICAg
ICAgaWYgKGRpc3BsYXlNb2RlID09IENhcHRpb25Vc2VyUHJlZmVyZW5jZXM6OkF1dG9tYXRpYykK
KyAgICAgICAgICAgICAgICB0cmFja0l0ZW0tPmNsYXNzTGlzdCgpLT5hZGQoc2VsZWN0ZWRDbGFz
c1ZhbHVlLCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICB0cmFja0l0ZW0tPmNsYXNzTGlzdCgpLT5yZW1vdmUoc2VsZWN0ZWRDbGFzc1ZhbHVl
LCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKHRyYWNrSXNTZWxlY3RlZCAmJiB0ZXh0VHJhY2stPm1vZGUoKSA9PSBU
ZXh0VHJhY2s6OnNob3dpbmdLZXl3b3JkKCkpCiAgICAgICAgICAgICB0cmFja0l0ZW0tPmNsYXNz
TGlzdCgpLT5hZGQoc2VsZWN0ZWRDbGFzc1ZhbHVlLCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgdHJhY2tJdGVtLT5jbGFzc0xpc3QoKS0+cmVtb3ZlKHNl
bGVjdGVkQ2xhc3NWYWx1ZSwgQVNTRVJUX05PX0VYQ0VQVElPTik7CkBAIC04NzIsOCArODY5LDYg
QEAgdm9pZCBNZWRpYUNvbnRyb2xDbG9zZWRDYXB0aW9uc1RyYWNrTGlzdAogICAgIC8vIFJlbW92
ZSBhbnkgZXhpc3RpbmcgY29udGVudC4KICAgICByZW1vdmVDaGlsZHJlbigpOwogICAgIG1fbWVu
dUl0ZW1zLmNsZWFyKCk7Ci0KLSAgICBtX3RyYWNrTGlzdEhhc0NoYW5nZWQgPSBmYWxzZTsKICAg
ICBtX21lbnVUb1RyYWNrTWFwLmNsZWFyKCk7CiAKICAgICBpZiAoIW1lZGlhQ29udHJvbGxlcigp
LT5oYXNDbG9zZWRDYXB0aW9ucygpKQpAQCAtODg4LDQxICs4ODMsMjYgQEAgdm9pZCBNZWRpYUNv
bnRyb2xDbG9zZWRDYXB0aW9uc1RyYWNrTGlzdAogICAgICAgICByZXR1cm47CiAKICAgICBEb2N1
bWVudCogZG9jID0gZG9jdW1lbnQoKTsKLSAgICBDYXB0aW9uVXNlclByZWZlcmVuY2VzKiBjYXB0
aW9uc1VzZXJQcmVmZXJlbmNlcyA9IGRvYy0+cGFnZSgpLT5ncm91cCgpLmNhcHRpb25QcmVmZXJl
bmNlcygpOwotICAgIFZlY3RvcjxSZWZQdHI8VGV4dFRyYWNrPiA+IHRyYWNrc0Zvck1lbnUgPSBj
YXB0aW9uc1VzZXJQcmVmZXJlbmNlcy0+c29ydGVkVHJhY2tMaXN0Rm9yTWVudSh0cmFja0xpc3Qp
OworICAgIGlmICghZG9jdW1lbnQoKS0+cGFnZSgpKQorICAgICAgICByZXR1cm47CisgICAgQ2Fw
dGlvblVzZXJQcmVmZXJlbmNlcyogY2FwdGlvblByZWZlcmVuY2VzID0gZG9jdW1lbnQoKS0+cGFn
ZSgpLT5ncm91cCgpLmNhcHRpb25QcmVmZXJlbmNlcygpOworICAgIFZlY3RvcjxSZWZQdHI8VGV4
dFRyYWNrPiA+IHRyYWNrc0Zvck1lbnUgPSBjYXB0aW9uUHJlZmVyZW5jZXMtPnNvcnRlZFRyYWNr
TGlzdEZvck1lbnUodHJhY2tMaXN0KTsKIAogICAgIFJlZlB0cjxFbGVtZW50PiBjYXB0aW9uc0hl
YWRlciA9IGRvYy0+Y3JlYXRlRWxlbWVudChoM1RhZywgQVNTRVJUX05PX0VYQ0VQVElPTik7CiAg
ICAgY2FwdGlvbnNIZWFkZXItPmFwcGVuZENoaWxkKGRvYy0+Y3JlYXRlVGV4dE5vZGUodGV4dFRy
YWNrU3VidGl0bGVzVGV4dCgpKSk7CiAgICAgYXBwZW5kQ2hpbGQoY2FwdGlvbnNIZWFkZXIpOwog
ICAgIFJlZlB0cjxFbGVtZW50PiBjYXB0aW9uc01lbnVMaXN0ID0gZG9jLT5jcmVhdGVFbGVtZW50
KHVsVGFnLCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKIAotICAgIFJlZlB0cjxFbGVtZW50PiBtZW51
SXRlbTsKLSAgICBtZW51SXRlbSA9IGRvYy0+Y3JlYXRlRWxlbWVudChsaVRhZywgQVNTRVJUX05P
X0VYQ0VQVElPTik7Ci0gICAgbWVudUl0ZW0tPmFwcGVuZENoaWxkKGRvYy0+Y3JlYXRlVGV4dE5v
ZGUodGV4dFRyYWNrT2ZmVGV4dCgpKSk7Ci0gICAgbWVudUl0ZW0tPnNldEF0dHJpYnV0ZSh0cmFj
a0luZGV4QXR0cmlidXRlTmFtZSgpLCB0ZXh0VHJhY2tzT2ZmQXR0clZhbHVlLCBBU1NFUlRfTk9f
RVhDRVBUSU9OKTsKLSAgICBjYXB0aW9uc01lbnVMaXN0LT5hcHBlbmRDaGlsZChtZW51SXRlbSk7
Ci0gICAgbV9tZW51SXRlbXMuYXBwZW5kKG1lbnVJdGVtKTsKLQogICAgIGZvciAodW5zaWduZWQg
aSA9IDAsIGxlbmd0aCA9IHRyYWNrc0Zvck1lbnUuc2l6ZSgpOyBpIDwgbGVuZ3RoOyArK2kpIHsK
ICAgICAgICAgUmVmUHRyPFRleHRUcmFjaz4gdGV4dFRyYWNrID0gdHJhY2tzRm9yTWVudVtpXTsK
LSAgICAgICAgbWVudUl0ZW0gPSBkb2MtPmNyZWF0ZUVsZW1lbnQobGlUYWcsIEFTU0VSVF9OT19F
WENFUFRJT04pOwotCi0gICAgICAgIC8vIEFkZCBhIGN1c3RvbSBhdHRyaWJ1dGUgdG8gdGhlIDxs
aT4gZWxlbWVudCB3aGljaCB3aWxsIGFsbG93Ci0gICAgICAgIC8vIHVzIHRvIGVhc2lseSBhc3Nv
Y2lhdGUgdGhlIHVzZXIgdGFwcGluZyBoZXJlIHdpdGggdGhlCi0gICAgICAgIC8vIHRyYWNrLiBT
aW5jZSB0aGlzIGxpc3QgaXMgcmVidWlsdCBpZiB0aGUgdHJhY2tzIGNoYW5nZSwgd2UKLSAgICAg
ICAgLy8gc2hvdWxkIGFsd2F5cyBiZSBpbiBzeW5jLgotICAgICAgICBtZW51SXRlbS0+c2V0QXR0
cmlidXRlKHRyYWNrSW5kZXhBdHRyaWJ1dGVOYW1lKCksIFN0cmluZzo6bnVtYmVyKGkpLCBBU1NF
UlRfTk9fRVhDRVBUSU9OKTsKLQotICAgICAgICBtZW51SXRlbS0+YXBwZW5kQ2hpbGQoZG9jLT5j
cmVhdGVUZXh0Tm9kZShjYXB0aW9uc1VzZXJQcmVmZXJlbmNlcy0+ZGlzcGxheU5hbWVGb3JUcmFj
ayh0ZXh0VHJhY2suZ2V0KCkpKSk7Ci0KKyAgICAgICAgUmVmUHRyPEVsZW1lbnQ+IG1lbnVJdGVt
ID0gZG9jLT5jcmVhdGVFbGVtZW50KGxpVGFnLCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKKyAgICAg
ICAgbWVudUl0ZW0tPmFwcGVuZENoaWxkKGRvYy0+Y3JlYXRlVGV4dE5vZGUoY2FwdGlvblByZWZl
cmVuY2VzLT5kaXNwbGF5TmFtZUZvclRyYWNrKHRleHRUcmFjay5nZXQoKSkpKTsKICAgICAgICAg
Y2FwdGlvbnNNZW51TGlzdC0+YXBwZW5kQ2hpbGQobWVudUl0ZW0pOwogICAgICAgICBtX21lbnVJ
dGVtcy5hcHBlbmQobWVudUl0ZW0pOwogICAgICAgICBtX21lbnVUb1RyYWNrTWFwLmFkZChtZW51
SXRlbSwgdGV4dFRyYWNrKTsKICAgICB9CiAKICAgICBhcHBlbmRDaGlsZChjYXB0aW9uc01lbnVM
aXN0KTsKLQotICAgIHVwZGF0ZURpc3BsYXkoKTsKICNlbmRpZgogfQogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmgJKHJldmlz
aW9uIDE0NzMyMykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVs
ZW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwNyw3ICszMDcsNiBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCBib29sIHdpbGxSZXNwb25kVG9Nb3VzZUNsaWNrRXZlbnRzKCkgT1ZFUlJJREUgeyBy
ZXR1cm4gdHJ1ZTsgfQogCiAgICAgdm9pZCB1cGRhdGVEaXNwbGF5KCk7Ci0gICAgdm9pZCByZXNl
dFRyYWNrTGlzdE1lbnUoKSB7IG1fdHJhY2tMaXN0SGFzQ2hhbmdlZCA9IHRydWU7IH0KIAogcHJp
dmF0ZToKICAgICBNZWRpYUNvbnRyb2xDbG9zZWRDYXB0aW9uc1RyYWNrTGlzdEVsZW1lbnQoRG9j
dW1lbnQqLCBNZWRpYUNvbnRyb2xzKik7CkBAIC0zMjQsNyArMzIzLDYgQEAgcHJpdmF0ZToKICAg
ICBNZW51SXRlbVRvVHJhY2tNYXAgbV9tZW51VG9UcmFja01hcDsKICNlbmRpZgogICAgIE1lZGlh
Q29udHJvbHMqIG1fY29udHJvbHM7Ci0gICAgYm9vbCBtX3RyYWNrTGlzdEhhc0NoYW5nZWQ7CiB9
OwogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xzQXBwbGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbHNBcHBsZS5jcHAJKHJldmlzaW9uIDE0
NzMyMykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbHNBcHBsZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMwNSw4ICszMDUsOSBAQCB2b2lkIE1lZGlhQ29udHJvbHNB
cHBsZTo6bWFrZVRyYW5zcGFyZW50CiB2b2lkIE1lZGlhQ29udHJvbHNBcHBsZTo6Y2hhbmdlZENs
b3NlZENhcHRpb25zVmlzaWJpbGl0eSgpCiB7CiAgICAgTWVkaWFDb250cm9sczo6Y2hhbmdlZENs
b3NlZENhcHRpb25zVmlzaWJpbGl0eSgpOwotICAgIGlmIChtX2Nsb3NlZENhcHRpb25zVHJhY2tM
aXN0KQotICAgICAgICBtX2Nsb3NlZENhcHRpb25zVHJhY2tMaXN0LT5yZXNldFRyYWNrTGlzdE1l
bnUoKTsKKyAgICBpZiAobV9jbG9zZWRDYXB0aW9uc0NvbnRhaW5lciAmJiBtX2Nsb3NlZENhcHRp
b25zQ29udGFpbmVyLT5pc1Nob3dpbmcoKSkKKyAgICAgICAgbV9jbG9zZWRDYXB0aW9uc0NvbnRh
aW5lci0+aGlkZSgpOworCiB9CiAKIHZvaWQgTWVkaWFDb250cm9sc0FwcGxlOjpyZXNldCgpCkBA
IC0zNDAsMTEgKzM0MSw5IEBAIHZvaWQgTWVkaWFDb250cm9sc0FwcGxlOjpyZXNldCgpCiAgICAg
ICAgIG1fdm9sdW1lU2xpZGVyLT5zZXRWb2x1bWUobV9tZWRpYUNvbnRyb2xsZXItPnZvbHVtZSgp
KTsKIAogICAgIGlmIChtX3RvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uKSB7Ci0gICAgICAgIGlm
IChtX21lZGlhQ29udHJvbGxlci0+aGFzQ2xvc2VkQ2FwdGlvbnMoKSkgeworICAgICAgICBpZiAo
bV9tZWRpYUNvbnRyb2xsZXItPmhhc0Nsb3NlZENhcHRpb25zKCkpCiAgICAgICAgICAgICBtX3Rv
Z2dsZUNsb3NlZENhcHRpb25zQnV0dG9uLT5zaG93KCk7Ci0gICAgICAgICAgICBpZiAobV9jbG9z
ZWRDYXB0aW9uc1RyYWNrTGlzdCkKLSAgICAgICAgICAgICAgICBtX2Nsb3NlZENhcHRpb25zVHJh
Y2tMaXN0LT5yZXNldFRyYWNrTGlzdE1lbnUoKTsKLSAgICAgICAgfSBlbHNlCisgICAgICAgIGVs
c2UKICAgICAgICAgICAgIG1fdG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b24tPmhpZGUoKTsKICAg
ICB9CiAKQEAgLTUxMCw4ICs1MDksNiBAQCB2b2lkIE1lZGlhQ29udHJvbHNBcHBsZTo6dG9nZ2xl
Q2xvc2VkQ2FwCiAKIHZvaWQgTWVkaWFDb250cm9sc0FwcGxlOjpjbG9zZWRDYXB0aW9uVHJhY2tz
Q2hhbmdlZCgpCiB7Ci0gICAgaWYgKG1fY2xvc2VkQ2FwdGlvbnNUcmFja0xpc3QpCi0gICAgICAg
IG1fY2xvc2VkQ2FwdGlvbnNUcmFja0xpc3QtPnJlc2V0VHJhY2tMaXN0TWVudSgpOwogICAgIGlm
IChtX3RvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uKSB7CiAgICAgICAgIGlmIChtX21lZGlhQ29u
dHJvbGxlci0+aGFzQ2xvc2VkQ2FwdGlvbnMoKSkKICAgICAgICAgICAgIG1fdG9nZ2xlQ2xvc2Vk
Q2FwdGlvbnNCdXR0b24tPnNob3coKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2sv
VGV4dFRyYWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1Rl
eHRUcmFjay5jcHAJKHJldmlzaW9uIDE0NzMyMykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJh
Y2svVGV4dFRyYWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTUsNiArOTUsMTggQEAgY29uc3Qg
QXRvbWljU3RyaW5nJiBUZXh0VHJhY2s6OnNob3dpbmdLZQogICAgIHJldHVybiBlbmRlZDsKIH0K
IAorVGV4dFRyYWNrKiBUZXh0VHJhY2s6OmNhcHRpb25NZW51T2ZmSXRlbSgpCit7CisgICAgREVG
SU5FX1NUQVRJQ19MT0NBTChSZWZQdHI8VGV4dFRyYWNrPiwgb2ZmLCAoVGV4dFRyYWNrOjpjcmVh
dGUoMCwgMCwgIm9mZiBtZW51IGl0ZW0iLCAiIiwgIiIpKSk7CisgICAgcmV0dXJuIG9mZi5nZXQo
KTsKK30KKworVGV4dFRyYWNrKiBUZXh0VHJhY2s6OmNhcHRpb25NZW51QXV0b21hdGljSXRlbSgp
Cit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChSZWZQdHI8VGV4dFRyYWNrPiwgYXV0b21hdGlj
LCAoVGV4dFRyYWNrOjpjcmVhdGUoMCwgMCwgImF1dG9tYXRpYyBtZW51IGl0ZW0iLCAiIiwgIiIp
KSk7CisgICAgcmV0dXJuIGF1dG9tYXRpYy5nZXQoKTsKK30KKwogVGV4dFRyYWNrOjpUZXh0VHJh
Y2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgVGV4dFRyYWNrQ2xpZW50KiBjbGll
bnQsIGNvbnN0IEF0b21pY1N0cmluZyYga2luZCwgY29uc3QgQXRvbWljU3RyaW5nJiBsYWJlbCwg
Y29uc3QgQXRvbWljU3RyaW5nJiBsYW5ndWFnZSwgVGV4dFRyYWNrVHlwZSB0eXBlKQogICAgIDog
VHJhY2tCYXNlKGNvbnRleHQsIFRyYWNrQmFzZTo6VGV4dFRyYWNrKQogICAgICwgbV9jdWVzKDAp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFjay5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrLmgJKHJldmlzaW9uIDE0NzMy
MykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTczLDYgKzczLDkgQEAgcHVibGljOgogICAgIH0KICAgICB2aXJ0dWFsIH5UZXh0VHJh
Y2soKTsKIAorICAgIHN0YXRpYyBUZXh0VHJhY2sqIGNhcHRpb25NZW51T2ZmSXRlbSgpOworICAg
IHN0YXRpYyBUZXh0VHJhY2sqIGNhcHRpb25NZW51QXV0b21hdGljSXRlbSgpOworCiAgICAgdm9p
ZCBzZXRNZWRpYUVsZW1lbnQoSFRNTE1lZGlhRWxlbWVudCogZWxlbWVudCkgeyBtX21lZGlhRWxl
bWVudCA9IGVsZW1lbnQ7IH0KICAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQoKSB7
IHJldHVybiBtX21lZGlhRWxlbWVudDsgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0Nh
cHRpb25Vc2VyUHJlZmVyZW5jZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bh
Z2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlcy5jcHAJKHJldmlzaW9uIDE0NzMyMykKKysrIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlcy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM4LDEwICszOCwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIENhcHRpb25Vc2VyUHJl
ZmVyZW5jZXM6OkNhcHRpb25Vc2VyUHJlZmVyZW5jZXMoUGFnZUdyb3VwKiBncm91cCkKICAgICA6
IG1fcGFnZUdyb3VwKGdyb3VwKQorICAgICwgbV9kaXNwbGF5TW9kZShBbHdheXNPbikKICAgICAs
IG1fdGltZXIodGhpcywgJkNhcHRpb25Vc2VyUHJlZmVyZW5jZXM6OnRpbWVyRmlyZWQpCiAgICAg
LCBtX3Rlc3RpbmdNb2RlKGZhbHNlKQogICAgICwgbV9oYXZlUHJlZmVyZW5jZXMoZmFsc2UpCi0g
ICAgLCBtX3Nob3VsZFNob3dDYXB0aW9ucyhmYWxzZSkKIHsKIH0KIApAQCAtNDksMTQgKzQ5LDYg
QEAgQ2FwdGlvblVzZXJQcmVmZXJlbmNlczo6fkNhcHRpb25Vc2VyUHJlZgogewogfQogCi1ib29s
IENhcHRpb25Vc2VyUHJlZmVyZW5jZXM6OnNob3VsZFNob3dDYXB0aW9ucygpIGNvbnN0Ci17Ci0g
ICAgaWYgKCFtX3Rlc3RpbmdNb2RlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAg
cmV0dXJuIG1fc2hvdWxkU2hvd0NhcHRpb25zIHx8IHVzZXJQcmVmZXJzQ2FwdGlvbnMoKSB8fCB1
c2VyUHJlZmVyc1N1YnRpdGxlcygpOwotfQotCiB2b2lkIENhcHRpb25Vc2VyUHJlZmVyZW5jZXM6
OnRpbWVyRmlyZWQoVGltZXI8Q2FwdGlvblVzZXJQcmVmZXJlbmNlcz4qKQogewogICAgIGNhcHRp
b25QcmVmZXJlbmNlc0NoYW5nZWQoKTsKQEAgLTcyLDEwICs2NCwxNSBAQCB2b2lkIENhcHRpb25V
c2VyUHJlZmVyZW5jZXM6Om5vdGlmeSgpCiAgICAgICAgIG1fdGltZXIuc3RhcnRPbmVTaG90KDAp
OwogfQogCi12b2lkIENhcHRpb25Vc2VyUHJlZmVyZW5jZXM6OnNldFNob3VsZFNob3dDYXB0aW9u
cyhib29sIHByZWZlcmVuY2UpCitDYXB0aW9uVXNlclByZWZlcmVuY2VzOjpDYXB0aW9uRGlzcGxh
eU1vZGUgQ2FwdGlvblVzZXJQcmVmZXJlbmNlczo6Y2FwdGlvbkRpc3BsYXlNb2RlKCkgY29uc3QK
IHsKLSAgICBtX3Nob3VsZFNob3dDYXB0aW9ucyA9IHByZWZlcmVuY2U7Ci0gICAgaWYgKG1fdGVz
dGluZ01vZGUgJiYgIXByZWZlcmVuY2UpIHsKKyAgICByZXR1cm4gbV9kaXNwbGF5TW9kZTsKK30K
Kwordm9pZCBDYXB0aW9uVXNlclByZWZlcmVuY2VzOjpzZXRDYXB0aW9uRGlzcGxheU1vZGUoQ2Fw
dGlvblVzZXJQcmVmZXJlbmNlczo6Q2FwdGlvbkRpc3BsYXlNb2RlIG1vZGUpCit7CisgICAgbV9k
aXNwbGF5TW9kZSA9IG1vZGU7CisgICAgaWYgKG1fdGVzdGluZ01vZGUgJiYgbW9kZSAhPSBBbHdh
eXNPbikgewogICAgICAgICBzZXRVc2VyUHJlZmVyc0NhcHRpb25zKGZhbHNlKTsKICAgICAgICAg
c2V0VXNlclByZWZlcnNTdWJ0aXRsZXMoZmFsc2UpOwogICAgIH0KQEAgLTE1Myw3ICsxNTAsNyBA
QCBWZWN0b3I8U3RyaW5nPiBDYXB0aW9uVXNlclByZWZlcmVuY2VzOjpwCiAgICAgcmV0dXJuIGxh
bmd1YWdlczsKIH0KIAotdm9pZCBDYXB0aW9uVXNlclByZWZlcmVuY2VzOjpzZXRQcmVmZXJyZWRM
YW5ndWFnZShTdHJpbmcgbGFuZ3VhZ2UpCit2b2lkIENhcHRpb25Vc2VyUHJlZmVyZW5jZXM6OnNl
dFByZWZlcnJlZExhbmd1YWdlKGNvbnN0IFN0cmluZyYgbGFuZ3VhZ2UpCiB7CiAgICAgbV91c2Vy
UHJlZmVycmVkTGFuZ3VhZ2UgPSBsYW5ndWFnZTsKICAgICBub3RpZnkoKTsKQEAgLTE5OCwyOCAr
MTk1LDMwIEBAIGludCBDYXB0aW9uVXNlclByZWZlcmVuY2VzOjp0ZXh0VHJhY2tTZWwKIAogICAg
IGlmICh0cmFjay0+a2luZCgpICE9IFRleHRUcmFjazo6Y2FwdGlvbnNLZXl3b3JkKCkgJiYgdHJh
Y2stPmtpbmQoKSAhPSBUZXh0VHJhY2s6OnN1YnRpdGxlc0tleXdvcmQoKSkKICAgICAgICAgcmV0
dXJuIHRyYWNrU2NvcmU7Ci0KKyAgICAKKyAgICBpZiAoIXVzZXJQcmVmZXJzU3VidGl0bGVzKCkg
JiYgIXVzZXJQcmVmZXJzQ2FwdGlvbnMoKSkKKyAgICAgICAgcmV0dXJuIHRyYWNrU2NvcmU7Cisg
ICAgCiAgICAgaWYgKHRyYWNrLT5raW5kKCkgPT0gVGV4dFRyYWNrOjpzdWJ0aXRsZXNLZXl3b3Jk
KCkgJiYgdXNlclByZWZlcnNTdWJ0aXRsZXMoKSkKICAgICAgICAgdHJhY2tTY29yZSA9IDE7CiAg
ICAgZWxzZSBpZiAodHJhY2stPmtpbmQoKSA9PSBUZXh0VHJhY2s6OmNhcHRpb25zS2V5d29yZCgp
ICYmIHVzZXJQcmVmZXJzQ2FwdGlvbnMoKSkKICAgICAgICAgdHJhY2tTY29yZSA9IDE7CiAgICAg
Ci0gICAgcmV0dXJuIHRyYWNrU2NvcmUgKyB0ZXh0VHJhY2tMYW5ndWFnZVNlbGVjdGlvblNjb3Jl
KHRyYWNrKTsKKyAgICByZXR1cm4gdHJhY2tTY29yZSArIHRleHRUcmFja0xhbmd1YWdlU2VsZWN0
aW9uU2NvcmUodHJhY2ssIHByZWZlcnJlZExhbmd1YWdlcygpKTsKIH0KIAotaW50IENhcHRpb25V
c2VyUHJlZmVyZW5jZXM6OnRleHRUcmFja0xhbmd1YWdlU2VsZWN0aW9uU2NvcmUoVGV4dFRyYWNr
KiB0cmFjaykgY29uc3QKK2ludCBDYXB0aW9uVXNlclByZWZlcmVuY2VzOjp0ZXh0VHJhY2tMYW5n
dWFnZVNlbGVjdGlvblNjb3JlKFRleHRUcmFjayogdHJhY2ssIGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiBwcmVmZXJyZWRMYW5ndWFnZXMpIGNvbnN0CiB7CiAgICAgaWYgKHRyYWNrLT5sYW5ndWFnZSgp
LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBWZWN0b3I8U3RyaW5nPiBsYW5n
dWFnZXMgPSBwcmVmZXJyZWRMYW5ndWFnZXMoKTsKLSAgICBzaXplX3QgbGFuZ3VhZ2VNYXRjaElu
ZGV4ID0gaW5kZXhPZkJlc3RNYXRjaGluZ0xhbmd1YWdlSW5MaXN0KHRyYWNrLT5sYW5ndWFnZSgp
LCBsYW5ndWFnZXMpOwotICAgIGlmIChsYW5ndWFnZU1hdGNoSW5kZXggPj0gbGFuZ3VhZ2VzLnNp
emUoKSkKKyAgICBzaXplX3QgbGFuZ3VhZ2VNYXRjaEluZGV4ID0gaW5kZXhPZkJlc3RNYXRjaGlu
Z0xhbmd1YWdlSW5MaXN0KHRyYWNrLT5sYW5ndWFnZSgpLCBwcmVmZXJyZWRMYW5ndWFnZXMpOwor
ICAgIGlmIChsYW5ndWFnZU1hdGNoSW5kZXggPj0gcHJlZmVycmVkTGFuZ3VhZ2VzLnNpemUoKSkK
ICAgICAgICAgcmV0dXJuIDA7CiAKICAgICAvLyBNYXRjaGluZyBhIHRyYWNrIGxhbmd1YWdlIGlz
IG1vcmUgaW1wb3J0YW50IHRoYW4gbWF0Y2hpbmcgdHJhY2sgdHlwZSwgc28gdGhpcyBtdWx0aXBs
aWVyIG11c3QgYmUKICAgICAvLyBncmVhdGVyIHRoYW4gdGhlIG1heGltdW0gdmFsdWUgcmV0dXJu
ZWQgYnkgdGV4dFRyYWNrU2VsZWN0aW9uU2NvcmUuCi0gICAgcmV0dXJuIChsYW5ndWFnZXMuc2l6
ZSgpIC0gbGFuZ3VhZ2VNYXRjaEluZGV4KSAqIDEwOworICAgIHJldHVybiAocHJlZmVycmVkTGFu
Z3VhZ2VzLnNpemUoKSAtIGxhbmd1YWdlTWF0Y2hJbmRleCkgKiAxMDsKIH0KIAogfQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGFnZS9DYXB0aW9uVXNlclByZWZlcmVuY2VzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGFnZS9DYXB0aW9uVXNlclByZWZlcmVuY2VzLmgJKHJldmlzaW9u
IDE0NzMyMykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC00NiwxMiArNDYsMTYgQEAgcHVibGljOgogICAgIHN0YXRpYyBQ
YXNzT3duUHRyPENhcHRpb25Vc2VyUHJlZmVyZW5jZXM+IGNyZWF0ZShQYWdlR3JvdXAqIGdyb3Vw
KSB7IHJldHVybiBhZG9wdFB0cihuZXcgQ2FwdGlvblVzZXJQcmVmZXJlbmNlcyhncm91cCkpOyB9
CiAgICAgdmlydHVhbCB+Q2FwdGlvblVzZXJQcmVmZXJlbmNlcygpOwogCi0gICAgdmlydHVhbCBi
b29sIHVzZXJIYXNDYXB0aW9uUHJlZmVyZW5jZXMoKSBjb25zdCB7IHJldHVybiBtX3Rlc3RpbmdN
b2RlICYmIG1faGF2ZVByZWZlcmVuY2VzOyB9Ci0gICAgdmlydHVhbCBib29sIHNob3VsZFNob3dD
YXB0aW9ucygpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBzZXRTaG91bGRTaG93Q2FwdGlvbnMo
Ym9vbCk7CisgICAgZW51bSBDYXB0aW9uRGlzcGxheU1vZGUgeworICAgICAgICBBdXRvbWF0aWMs
CisgICAgICAgIEZvcmNlZE9ubHksCisgICAgICAgIEFsd2F5c09uCisgICAgfTsKKyAgICB2aXJ0
dWFsIENhcHRpb25EaXNwbGF5TW9kZSBjYXB0aW9uRGlzcGxheU1vZGUoKSBjb25zdDsKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0Q2FwdGlvbkRpc3BsYXlNb2RlKENhcHRpb25EaXNwbGF5TW9kZSk7CiAK
ICAgICB2aXJ0dWFsIGludCB0ZXh0VHJhY2tTZWxlY3Rpb25TY29yZShUZXh0VHJhY2sqLCBIVE1M
TWVkaWFFbGVtZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgdGV4dFRyYWNrTGFuZ3VhZ2VT
ZWxlY3Rpb25TY29yZShUZXh0VHJhY2sqKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCB0ZXh0VHJh
Y2tMYW5ndWFnZVNlbGVjdGlvblNjb3JlKFRleHRUcmFjayosIGNvbnN0IFZlY3RvcjxTdHJpbmc+
JikgY29uc3Q7CiAKICAgICB2aXJ0dWFsIGJvb2wgdXNlclByZWZlcnNDYXB0aW9ucygpIGNvbnN0
OwogICAgIHZpcnR1YWwgdm9pZCBzZXRVc2VyUHJlZmVyc0NhcHRpb25zKGJvb2wpOwpAQCAtNjks
NyArNzMsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgY2FwdGlvblByZWZlcmVuY2Vz
Q2hhbmdlZCgpOwogCi0gICAgdmlydHVhbCB2b2lkIHNldFByZWZlcnJlZExhbmd1YWdlKFN0cmlu
Zyk7CisgICAgdmlydHVhbCB2b2lkIHNldFByZWZlcnJlZExhbmd1YWdlKGNvbnN0IFN0cmluZyYp
OwogICAgIHZpcnR1YWwgVmVjdG9yPFN0cmluZz4gcHJlZmVycmVkTGFuZ3VhZ2VzKCkgY29uc3Q7
CiAKICAgICB2aXJ0dWFsIFN0cmluZyBkaXNwbGF5TmFtZUZvclRyYWNrKFRleHRUcmFjayopIGNv
bnN0OwpAQCAtNzcsNiArODEsOSBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGJvb2wgdGVzdGlu
Z01vZGUoKSBjb25zdCB7IHJldHVybiBtX3Rlc3RpbmdNb2RlOyB9CiAgICAgdmlydHVhbCB2b2lk
IHNldFRlc3RpbmdNb2RlKGJvb2wgb3ZlcnJpZGUpIHsgbV90ZXN0aW5nTW9kZSA9IG92ZXJyaWRl
OyB9CisgICAgCisgICAgdm9pZCBzZXRQcmltYXJ5QXVkaW9UcmFja0xhbmd1YWdlT3ZlcnJpZGUo
Y29uc3QgU3RyaW5nJiBsYW5ndWFnZSkgeyBtX3ByaW1hcnlBdWRpb1RyYWNrTGFuZ3VhZ2VPdmVy
cmlkZSA9IGxhbmd1YWdlOyAgfQorICAgIFN0cmluZyBwcmltYXJ5QXVkaW9UcmFja0xhbmd1YWdl
T3ZlcnJpZGUoKSBjb25zdCB7IHJldHVybiBtX3ByaW1hcnlBdWRpb1RyYWNrTGFuZ3VhZ2VPdmVy
cmlkZTsgfQogCiAgICAgUGFnZUdyb3VwKiBwYWdlR3JvdXAoKSBjb25zdCB7IHJldHVybiBtX3Bh
Z2VHcm91cDsgfQogCkBAIC04OCwxMSArOTUsMTIgQEAgcHJpdmF0ZToKICAgICB2b2lkIG5vdGlm
eSgpOwogCiAgICAgUGFnZUdyb3VwKiBtX3BhZ2VHcm91cDsKKyAgICBDYXB0aW9uRGlzcGxheU1v
ZGUgbV9kaXNwbGF5TW9kZTsKICAgICBUaW1lcjxDYXB0aW9uVXNlclByZWZlcmVuY2VzPiBtX3Rp
bWVyOwogICAgIFN0cmluZyBtX3VzZXJQcmVmZXJyZWRMYW5ndWFnZTsKKyAgICBTdHJpbmcgbV9w
cmltYXJ5QXVkaW9UcmFja0xhbmd1YWdlT3ZlcnJpZGU7CiAgICAgYm9vbCBtX3Rlc3RpbmdNb2Rl
OwogICAgIGJvb2wgbV9oYXZlUHJlZmVyZW5jZXM7Ci0gICAgYm9vbCBtX3Nob3VsZFNob3dDYXB0
aW9uczsKIH07CiAgICAgCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0NhcHRpb25Vc2Vy
UHJlZmVyZW5jZXNNYWMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0NhcHRp
b25Vc2VyUHJlZmVyZW5jZXNNYWMuaAkocmV2aXNpb24gMTQ3MzIzKQorKysgU291cmNlL1dlYkNv
cmUvcGFnZS9DYXB0aW9uVXNlclByZWZlcmVuY2VzTWFjLmgJKHdvcmtpbmcgY29weSkKQEAgLTQx
LDkgKzQxLDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgfkNhcHRpb25Vc2VyUHJlZmVyZW5jZXNN
YWMoKTsKIAogI2lmIEhBVkUoTUVESUFfQUNDRVNTSUJJTElUWV9GUkFNRVdPUkspCi0gICAgdmly
dHVhbCBib29sIHVzZXJIYXNDYXB0aW9uUHJlZmVyZW5jZXMoKSBjb25zdCBPVkVSUklERTsKLSAg
ICB2aXJ0dWFsIGJvb2wgc2hvdWxkU2hvd0NhcHRpb25zKCkgY29uc3QgT1ZFUlJJREU7Ci0gICAg
dmlydHVhbCB2b2lkIHNldFNob3VsZFNob3dDYXB0aW9ucyhib29sKSBPVkVSUklERTsKKyAgICB2
aXJ0dWFsIENhcHRpb25EaXNwbGF5TW9kZSBjYXB0aW9uRGlzcGxheU1vZGUoKSBjb25zdCBPVkVS
UklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q2FwdGlvbkRpc3BsYXlNb2RlKENhcHRpb25EaXNw
bGF5TW9kZSkgT1ZFUlJJREU7CiAKICAgICB2aXJ0dWFsIGJvb2wgdXNlclByZWZlcnNDYXB0aW9u
cygpIGNvbnN0IE9WRVJSSURFOwogICAgIHZpcnR1YWwgYm9vbCB1c2VyUHJlZmVyc1N1YnRpdGxl
cygpIGNvbnN0IE9WRVJSSURFOwpAQCAtNTMsNyArNTIsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0
dWFsIHZvaWQgc2V0SW50ZXJlc3RlZEluQ2FwdGlvblByZWZlcmVuY2VDaGFuZ2VzKCkgT1ZFUlJJ
REU7CiAKLSAgICB2aXJ0dWFsIHZvaWQgc2V0UHJlZmVycmVkTGFuZ3VhZ2UoU3RyaW5nKSBPVkVS
UklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UHJlZmVycmVkTGFuZ3VhZ2UoY29uc3QgU3RyaW5n
JikgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBWZWN0b3I8U3RyaW5nPiBwcmVmZXJyZWRMYW5ndWFn
ZXMoKSBjb25zdCBPVkVSUklERTsKIAogICAgIHZpcnR1YWwgdm9pZCBjYXB0aW9uUHJlZmVyZW5j
ZXNDaGFuZ2VkKCkgT1ZFUlJJREU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0NhcHRpb25V
c2VyUHJlZmVyZW5jZXNNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9D
YXB0aW9uVXNlclByZWZlcmVuY2VzTWFjLm1tCShyZXZpc2lvbiAxNDczMjMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wYWdlL0NhcHRpb25Vc2VyUHJlZmVyZW5jZXNNYWMubW0JKHdvcmtpbmcgY29weSkK
QEAgLTYwLDggKzYwLDggQEAKIAogU09GVF9MSU5LX0ZSQU1FV09SS19PUFRJT05BTChNZWRpYUFj
Y2Vzc2liaWxpdHkpCiAKLVNPRlRfTElOSyhNZWRpYUFjY2Vzc2liaWxpdHksIE1BQ2FwdGlvbkFw
cGVhcmFuY2VHZXRTaG93Q2FwdGlvbnMsIGJvb2wsIChNQUNhcHRpb25BcHBlYXJhbmNlRG9tYWlu
IGRvbWFpbiksIChkb21haW4pKQotU09GVF9MSU5LKE1lZGlhQWNjZXNzaWJpbGl0eSwgTUFDYXB0
aW9uQXBwZWFyYW5jZVNldFNob3dDYXB0aW9ucywgdm9pZCwgKE1BQ2FwdGlvbkFwcGVhcmFuY2VE
b21haW4gZG9tYWluLCBib29sIHNob3dDYXB0aW9ucyksIChkb21haW4sIHNob3dDYXB0aW9ucykp
CitTT0ZUX0xJTksoTWVkaWFBY2Nlc3NpYmlsaXR5LCBNQUNhcHRpb25BcHBlYXJhbmNlR2V0RGlz
cGxheVR5cGUsIE1BQ2FwdGlvbkFwcGVhcmFuY2VEaXNwbGF5VHlwZSwgKE1BQ2FwdGlvbkFwcGVh
cmFuY2VEb21haW4gZG9tYWluKSwgKGRvbWFpbikpCitTT0ZUX0xJTksoTWVkaWFBY2Nlc3NpYmls
aXR5LCBNQUNhcHRpb25BcHBlYXJhbmNlU2V0RGlzcGxheVR5cGUsIHZvaWQsIChNQUNhcHRpb25B
cHBlYXJhbmNlRG9tYWluIGRvbWFpbiwgTUFDYXB0aW9uQXBwZWFyYW5jZURpc3BsYXlUeXBlIGRp
c3BsYXlUeXBlKSwgKGRvbWFpbiwgZGlzcGxheVR5cGUpKQogU09GVF9MSU5LKE1lZGlhQWNjZXNz
aWJpbGl0eSwgTUFDYXB0aW9uQXBwZWFyYW5jZUNvcHlGb3JlZ3JvdW5kQ29sb3IsIENHQ29sb3JS
ZWYsIChNQUNhcHRpb25BcHBlYXJhbmNlRG9tYWluIGRvbWFpbiwgTUFDYXB0aW9uQXBwZWFyYW5j
ZUJlaGF2aW9yICpiZWhhdmlvciksIChkb21haW4sIGJlaGF2aW9yKSkKIFNPRlRfTElOSyhNZWRp
YUFjY2Vzc2liaWxpdHksIE1BQ2FwdGlvbkFwcGVhcmFuY2VDb3B5QmFja2dyb3VuZENvbG9yLCBD
R0NvbG9yUmVmLCAoTUFDYXB0aW9uQXBwZWFyYW5jZURvbWFpbiBkb21haW4sIE1BQ2FwdGlvbkFw
cGVhcmFuY2VCZWhhdmlvciAqYmVoYXZpb3IpLCAoZG9tYWluLCBiZWhhdmlvcikpCiBTT0ZUX0xJ
TksoTWVkaWFBY2Nlc3NpYmlsaXR5LCBNQUNhcHRpb25BcHBlYXJhbmNlQ29weVdpbmRvd0NvbG9y
LCBDR0NvbG9yUmVmLCAoTUFDYXB0aW9uQXBwZWFyYW5jZURvbWFpbiBkb21haW4sIE1BQ2FwdGlv
bkFwcGVhcmFuY2VCZWhhdmlvciAqYmVoYXZpb3IpLCAoZG9tYWluLCBiZWhhdmlvcikpCkBAIC0x
MTYsMjIgKzExNiw1NyBAQCBDYXB0aW9uVXNlclByZWZlcmVuY2VzTWFjOjp+Q2FwdGlvblVzZXJQ
CiAKICNpZiBIQVZFKE1FRElBX0FDQ0VTU0lCSUxJVFlfRlJBTUVXT1JLKQogCi1ib29sIENhcHRp
b25Vc2VyUHJlZmVyZW5jZXNNYWM6OnNob3VsZFNob3dDYXB0aW9ucygpIGNvbnN0CitDYXB0aW9u
VXNlclByZWZlcmVuY2VzOjpDYXB0aW9uRGlzcGxheU1vZGUgQ2FwdGlvblVzZXJQcmVmZXJlbmNl
c01hYzo6Y2FwdGlvbkRpc3BsYXlNb2RlKCkgY29uc3QKIHsKICAgICBpZiAodGVzdGluZ01vZGUo
KSB8fCAhTWVkaWFBY2Nlc3NpYmlsaXR5TGlicmFyeSgpKQotICAgICAgICByZXR1cm4gQ2FwdGlv
blVzZXJQcmVmZXJlbmNlczo6c2hvdWxkU2hvd0NhcHRpb25zKCk7CisgICAgICAgIHJldHVybiBD
YXB0aW9uVXNlclByZWZlcmVuY2VzOjpjYXB0aW9uRGlzcGxheU1vZGUoKTsKIAotICAgIHJldHVy
biBNQUNhcHRpb25BcHBlYXJhbmNlR2V0U2hvd0NhcHRpb25zKGtNQUNhcHRpb25BcHBlYXJhbmNl
RG9tYWluVXNlcik7Ci19CisgICAgTUFDYXB0aW9uQXBwZWFyYW5jZURpc3BsYXlUeXBlIGRpc3Bs
YXlUeXBlID0gTUFDYXB0aW9uQXBwZWFyYW5jZUdldERpc3BsYXlUeXBlKGtNQUNhcHRpb25BcHBl
YXJhbmNlRG9tYWluVXNlcik7CisgICAgc3dpdGNoIChkaXNwbGF5VHlwZSkgeworICAgIGNhc2Ug
a01BQ2FwdGlvbkFwcGVhcmFuY2VEaXNwbGF5VHlwZUZvcmNlZE9ubHk6CisgICAgICAgIHJldHVy
biBGb3JjZWRPbmx5OworICAgICAgICBicmVhazsKKworICAgIGNhc2Uga01BQ2FwdGlvbkFwcGVh
cmFuY2VEaXNwbGF5VHlwZUF1dG9tYXRpYzoKKyAgICAgICAgcmV0dXJuIEF1dG9tYXRpYzsKKyAg
ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIGtNQUNhcHRpb25BcHBlYXJhbmNlRGlzcGxheVR5cGVB
bHdheXNPbjoKKyAgICAgICAgcmV0dXJuIEFsd2F5c09uOworICAgICAgICBicmVhazsKKworICAg
IGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgfQogCi12b2lkIENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNYWM6OnNldFNob3VsZFNo
b3dDYXB0aW9ucyhib29sIHByZWZlcmVuY2UpCisgICAgcmV0dXJuIEZvcmNlZE9ubHk7Cit9Cisg
ICAgCit2b2lkIENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNYWM6OnNldENhcHRpb25EaXNwbGF5TW9k
ZShDYXB0aW9uVXNlclByZWZlcmVuY2VzOjpDYXB0aW9uRGlzcGxheU1vZGUgbW9kZSkKIHsKICAg
ICBpZiAodGVzdGluZ01vZGUoKSB8fCAhTWVkaWFBY2Nlc3NpYmlsaXR5TGlicmFyeSgpKSB7Ci0g
ICAgICAgIENhcHRpb25Vc2VyUHJlZmVyZW5jZXM6OnNldFNob3VsZFNob3dDYXB0aW9ucyhwcmVm
ZXJlbmNlKTsKKyAgICAgICAgQ2FwdGlvblVzZXJQcmVmZXJlbmNlczo6c2V0Q2FwdGlvbkRpc3Bs
YXlNb2RlKG1vZGUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgTUFDYXB0aW9uQXBw
ZWFyYW5jZVNldFNob3dDYXB0aW9ucyhrTUFDYXB0aW9uQXBwZWFyYW5jZURvbWFpblVzZXIsIHBy
ZWZlcmVuY2UpOworICAgIE1BQ2FwdGlvbkFwcGVhcmFuY2VEaXNwbGF5VHlwZSBkaXNwbGF5VHlw
ZSA9IGtNQUNhcHRpb25BcHBlYXJhbmNlRGlzcGxheVR5cGVGb3JjZWRPbmx5OworICAgIHN3aXRj
aCAobW9kZSkgeworICAgICAgICBjYXNlIEF1dG9tYXRpYzoKKyAgICAgICAgICAgIGRpc3BsYXlU
eXBlID0ga01BQ2FwdGlvbkFwcGVhcmFuY2VEaXNwbGF5VHlwZUF1dG9tYXRpYzsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIEZvcmNlZE9ubHk6CisgICAgICAgICAgICBkaXNwbGF5
VHlwZSA9IGtNQUNhcHRpb25BcHBlYXJhbmNlRGlzcGxheVR5cGVGb3JjZWRPbmx5OworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQWx3YXlzT246CisgICAgICAgICAgICBkaXNwbGF5
VHlwZSA9IGtNQUNhcHRpb25BcHBlYXJhbmNlRGlzcGxheVR5cGVBbHdheXNPbjsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBNQUNhcHRpb25BcHBlYXJh
bmNlU2V0RGlzcGxheVR5cGUoa01BQ2FwdGlvbkFwcGVhcmFuY2VEb21haW5Vc2VyLCBkaXNwbGF5
VHlwZSk7CiB9CiAKIGJvb2wgQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01hYzo6dXNlclByZWZlcnND
YXB0aW9ucygpIGNvbnN0CkBAIC0xNTQsMTQgKzE4OSw2IEBAIGJvb2wgQ2FwdGlvblVzZXJQcmVm
ZXJlbmNlc01hYzo6dXNlclByZWYKICAgICByZXR1cm4gIShjYXB0aW9uaW5nTWVkaWFDaGFyYWN0
ZXJpc3RpY3MgJiYgQ0ZBcnJheUdldENvdW50KGNhcHRpb25pbmdNZWRpYUNoYXJhY3RlcmlzdGlj
cy5nZXQoKSkpOwogfQogCi1ib29sIENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNYWM6OnVzZXJIYXND
YXB0aW9uUHJlZmVyZW5jZXMoKSBjb25zdAotewotICAgIGlmICh0ZXN0aW5nTW9kZSgpIHx8ICFN
ZWRpYUFjY2Vzc2liaWxpdHlMaWJyYXJ5KCkpCi0gICAgICAgIHJldHVybiBDYXB0aW9uVXNlclBy
ZWZlcmVuY2VzOjp1c2VySGFzQ2FwdGlvblByZWZlcmVuY2VzKCk7Ci0KLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQogdm9pZCBDYXB0aW9uVXNlclByZWZlcmVuY2VzTWFjOjpzZXRJbnRlcmVzdGVkSW5D
YXB0aW9uUHJlZmVyZW5jZUNoYW5nZXMoKQogewogICAgIGlmICghTWVkaWFBY2Nlc3NpYmlsaXR5
TGlicmFyeSgpKQpAQCAtNDgxLDcgKzUwOCw3IEBAIHZvaWQgQ2FwdGlvblVzZXJQcmVmZXJlbmNl
c01hYzo6dXBkYXRlQ2EKICAgICAgICAgICAgICBWZWN0b3I8U3RyaW5nPigpLCBJbmplY3RJbkFs
bEZyYW1lcywgVXNlclN0eWxlQXV0aG9yTGV2ZWwsIEluamVjdEluRXhpc3RpbmdEb2N1bWVudHMp
OwogfQogCi12b2lkIENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNYWM6OnNldFByZWZlcnJlZExhbmd1
YWdlKFN0cmluZyBsYW5ndWFnZSkKK3ZvaWQgQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01hYzo6c2V0
UHJlZmVycmVkTGFuZ3VhZ2UoY29uc3QgU3RyaW5nJiBsYW5ndWFnZSkKIHsKICAgICBpZiAodGVz
dGluZ01vZGUoKSB8fCAhTWVkaWFBY2Nlc3NpYmlsaXR5TGlicmFyeSgpKSB7CiAgICAgICAgIENh
cHRpb25Vc2VyUHJlZmVyZW5jZXM6OnNldFByZWZlcnJlZExhbmd1YWdlKGxhbmd1YWdlKTsKQEAg
LTUyNSw5ICs1NTIsMzAgQEAgVmVjdG9yPFN0cmluZz4gQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01h
YwogICAgIHJldHVybiB1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzOwogfQogI2VuZGlmICAvLyBIQVZF
KE1FRElBX0FDQ0VTU0lCSUxJVFlfRlJBTUVXT1JLKQotICAgIAorCitzdGF0aWMgU3RyaW5nIGxh
bmd1YWdlSWRlbnRpZmllcihjb25zdCBTdHJpbmcmIGxhbmd1YWdlQ29kZSkKK3sKKyAgICBpZiAo
bGFuZ3VhZ2VDb2RlLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGxhbmd1YWdlQ29kZTsKKwor
ICAgIFN0cmluZyBsb3dlcmNhc2VMYW5ndWFnZUNvZGUgPSBsYW5ndWFnZUNvZGUubG93ZXIoKTsK
KworICAgIC8vIE5lZWQgMlUgaGVyZSB0byBkaXNhbWJpZ3VhdGUgU3RyaW5nOjpvcGVyYXRvcltd
IGZyb20gb3BlcmF0b3IoTlNTdHJpbmcqLCBpbnQpW10gaW4gYSBwcm9kdWN0aW9uIGJ1aWxkLgor
ICAgIGlmIChsb3dlcmNhc2VMYW5ndWFnZUNvZGUubGVuZ3RoKCkgPj0gMyAmJiAobG93ZXJjYXNl
TGFuZ3VhZ2VDb2RlWzJVXSA9PSAnXycgfHwgbG93ZXJjYXNlTGFuZ3VhZ2VDb2RlWzJVXSA9PSAn
LScpKQorICAgICAgICBsb3dlcmNhc2VMYW5ndWFnZUNvZGUudHJ1bmNhdGUoMik7CisKKyAgICBy
ZXR1cm4gbG93ZXJjYXNlTGFuZ3VhZ2VDb2RlOworfQorCiBzdGF0aWMgU3RyaW5nIHRyYWNrRGlz
cGxheU5hbWUoVGV4dFRyYWNrKiB0cmFjaykKIHsKKyAgICBpZiAodHJhY2sgPT0gVGV4dFRyYWNr
OjpjYXB0aW9uTWVudU9mZkl0ZW0oKSkKKyAgICAgICAgcmV0dXJuIHRleHRUcmFja09mZk1lbnVJ
dGVtVGV4dCgpOworICAgIGlmICh0cmFjayA9PSBUZXh0VHJhY2s6OmNhcHRpb25NZW51QXV0b21h
dGljSXRlbSgpKSB7CisgICAgICAgIFN0cmluZyBwcmVmZXJyZWRMYW5ndWFnZURpc3BsYXlOYW1l
ID0gZGlzcGxheU5hbWVGb3JMYW5ndWFnZUxvY2FsZShsYW5ndWFnZUlkZW50aWZpZXIoZGVmYXVs
dExhbmd1YWdlKCkpKTsKKyAgICAgICAgcmV0dXJuIHRleHRUcmFja0F1dG9tYXRpY01lbnVJdGVt
VGV4dChwcmVmZXJyZWRMYW5ndWFnZURpc3BsYXlOYW1lKTsKKyAgICB9CisKICAgICBTdHJpbmdC
dWlsZGVyIGRpc3BsYXlOYW1lOwogICAgIFN0cmluZyBsYWJlbCA9IHRyYWNrLT5sYWJlbCgpOwog
ICAgIFN0cmluZyB0cmFja0xhbmd1YWdlSWRlbnRpZmllciA9IHRyYWNrLT5sYW5ndWFnZSgpOwpA
QCAtNTg3LDIzICs2MzUsMTIgQEAgU3RyaW5nIENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNYWM6OmRp
c3BsYQogICAgIHJldHVybiB0cmFja0Rpc3BsYXlOYW1lKHRyYWNrKTsKIH0KIAotc3RhdGljIFN0
cmluZyBsYW5ndWFnZUlkZW50aWZpZXIoY29uc3QgU3RyaW5nJiBsYW5ndWFnZUNvZGUpCi17Ci0g
ICAgaWYgKGxhbmd1YWdlQ29kZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBsYW5ndWFnZUNv
ZGU7Ci0KLSAgICBTdHJpbmcgbG93ZXJjYXNlTGFuZ3VhZ2VDb2RlID0gbGFuZ3VhZ2VDb2RlLmxv
d2VyKCk7Ci0KLSAgICAvLyBOZWVkIDJVIGhlcmUgdG8gZGlzYW1iaWd1YXRlIFN0cmluZzo6b3Bl
cmF0b3JbXSBmcm9tIG9wZXJhdG9yKE5TU3RyaW5nKiwgaW50KVtdIGluIGEgcHJvZHVjdGlvbiBi
dWlsZC4KLSAgICBpZiAobG93ZXJjYXNlTGFuZ3VhZ2VDb2RlLmxlbmd0aCgpID49IDMgJiYgKGxv
d2VyY2FzZUxhbmd1YWdlQ29kZVsyVV0gPT0gJ18nIHx8IGxvd2VyY2FzZUxhbmd1YWdlQ29kZVsy
VV0gPT0gJy0nKSkKLSAgICAgICAgbG93ZXJjYXNlTGFuZ3VhZ2VDb2RlLnRydW5jYXRlKDIpOwot
ICAgIAotICAgIHJldHVybiBsb3dlcmNhc2VMYW5ndWFnZUNvZGU7Ci19Ci0KIGludCBDYXB0aW9u
VXNlclByZWZlcmVuY2VzTWFjOjp0ZXh0VHJhY2tTZWxlY3Rpb25TY29yZShUZXh0VHJhY2sqIHRy
YWNrLCBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQpIGNvbnN0CiB7Ci0gICAgaWYgKCFz
aG91bGRTaG93Q2FwdGlvbnMoKSAmJiAhbWVkaWFFbGVtZW50LT53ZWJraXRDbG9zZWRDYXB0aW9u
c1Zpc2libGUoKSkKKyAgICBDYXB0aW9uRGlzcGxheU1vZGUgZGlzcGxheU1vZGUgPSBjYXB0aW9u
RGlzcGxheU1vZGUoKTsKKyAgICBpZiAoZGlzcGxheU1vZGUgPT0gRm9yY2VkT25seSkKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgaWYgKGRpc3BsYXlNb2RlID09IEFsd2F5c09uICYmICghdXNlclBy
ZWZlcnNTdWJ0aXRsZXMoKSAmJiAhdXNlclByZWZlcnNDYXB0aW9ucygpKSkKICAgICAgICAgcmV0
dXJuIDA7CiAgICAgaWYgKHRyYWNrLT5raW5kKCkgIT0gVGV4dFRyYWNrOjpjYXB0aW9uc0tleXdv
cmQoKSAmJiB0cmFjay0+a2luZCgpICE9IFRleHRUcmFjazo6c3VidGl0bGVzS2V5d29yZCgpKQog
ICAgICAgICByZXR1cm4gMDsKQEAgLTYxMiw2ICs2NDksMzMgQEAgaW50IENhcHRpb25Vc2VyUHJl
ZmVyZW5jZXNNYWM6OnRleHRUcmFjawogICAgIGlmICghdHJhY2stPmlzTWFpblByb2dyYW1Db250
ZW50KCkpCiAgICAgICAgIHJldHVybiAwOwogCisgICAgVmVjdG9yPFN0cmluZz4gdXNlclByZWZl
cnJlZENhcHRpb25MYW5ndWFnZXMgPSBwcmVmZXJyZWRMYW5ndWFnZXMoKTsKKworICAgIGlmIChk
aXNwbGF5TW9kZSA9PSBBdXRvbWF0aWMpIHsKKworICAgICAgICBTdHJpbmcgYXVkaW9UcmFja0xh
bmd1YWdlOworICAgICAgICBpZiAodGVzdGluZ01vZGUoKSkgeworICAgICAgICAgICAgYXVkaW9U
cmFja0xhbmd1YWdlID0gcHJpbWFyeUF1ZGlvVHJhY2tMYW5ndWFnZU92ZXJyaWRlKCk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPbmx5IGVuYWJsZSBhIHRleHQgdHJhY2sgaWYg
dGhlIGN1cnJlbnQgYXVkaW8gdHJhY2sgaXMgbm90IGluIHRoZSB1c2VyJ3MgcHJlZmVycmVkIGxh
bmd1YWdlLgorICAgICAgICAgICAgaWYgKCFtZWRpYUVsZW1lbnQgfHwgIW1lZGlhRWxlbWVudC0+
cGxheWVyKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGF1ZGlvVHJhY2tMYW5ndWFnZSA9IG1lZGlhRWxlbWVudC0+cGxheWVyKCktPmxhbmd1
YWdlT2ZQcmltYXJ5QXVkaW9UcmFjaygpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGF1ZGlv
VHJhY2tMYW5ndWFnZS5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAg
ICBWZWN0b3I8U3RyaW5nPiBsYW5ndWFnZXM7CisgICAgICAgIGxhbmd1YWdlcy5hcHBlbmQoZGVm
YXVsdExhbmd1YWdlKCkpOworICAgICAgICBzaXplX3Qgb2Zmc2V0ID0gaW5kZXhPZkJlc3RNYXRj
aGluZ0xhbmd1YWdlSW5MaXN0KGF1ZGlvVHJhY2tMYW5ndWFnZSwgbGFuZ3VhZ2VzKTsKKyAgICAg
ICAgaWYgKCFvZmZzZXQpCisgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICB1c2VyUHJl
ZmVycmVkQ2FwdGlvbkxhbmd1YWdlcyA9IGxhbmd1YWdlczsKKyAgICB9CisKICAgICBpbnQgdHJh
Y2tTY29yZSA9IDA7CiAKICAgICBpZiAodXNlclByZWZlcnNDYXB0aW9ucygpKSB7CkBAIC02MzIs
NyArNjk2LDcgQEAgaW50IENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNYWM6OnRleHRUcmFjawogICAg
ICAgICAgICAgdHJhY2tTY29yZSA9IDE7CiAgICAgfQogCi0gICAgcmV0dXJuIHRyYWNrU2NvcmUg
KyB0ZXh0VHJhY2tMYW5ndWFnZVNlbGVjdGlvblNjb3JlKHRyYWNrKTsKKyAgICByZXR1cm4gdHJh
Y2tTY29yZSArIHRleHRUcmFja0xhbmd1YWdlU2VsZWN0aW9uU2NvcmUodHJhY2ssIHVzZXJQcmVm
ZXJyZWRDYXB0aW9uTGFuZ3VhZ2VzKTsKIH0KIAogc3RhdGljIGJvb2wgdGV4dFRyYWNrQ29tcGFy
ZShjb25zdCBSZWZQdHI8VGV4dFRyYWNrPiYgYSwgY29uc3QgUmVmUHRyPFRleHRUcmFjaz4mIGIp
CkBAIC03MzgsNiArODAyLDkgQEAgVmVjdG9yPFJlZlB0cjxUZXh0VHJhY2s+ID4gQ2FwdGlvblVz
ZXJQcgogCiAgICAgbm9uQ29weWluZ1NvcnQodHJhY2tzRm9yTWVudS5iZWdpbigpLCB0cmFja3NG
b3JNZW51LmVuZCgpLCB0ZXh0VHJhY2tDb21wYXJlKTsKIAorICAgIHRyYWNrc0Zvck1lbnUuaW5z
ZXJ0KDAsIFRleHRUcmFjazo6Y2FwdGlvbk1lbnVPZmZJdGVtKCkpOworICAgIHRyYWNrc0Zvck1l
bnUuaW5zZXJ0KDEsIFRleHRUcmFjazo6Y2FwdGlvbk1lbnVBdXRvbWF0aWNJdGVtKCkpOworCiAg
ICAgcmV0dXJuIHRyYWNrc0Zvck1lbnU7CiB9CiAgICAgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9Mb2NhbGl6ZWRTdHJpbmdzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9Mb2NhbGl6ZWRTdHJpbmdzLmNwcAkocmV2aXNpb24gMTQ3MzIzKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vTG9jYWxpemVkU3RyaW5ncy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEwMjAsMTEgKzEwMjAsMTYgQEAgU3RyaW5nIHRleHRUcmFja1N1YnRpdGxlc1RleHQoKQog
ICAgIHJldHVybiBXRUJfVUlfU1RSSU5HKCJTdWJ0aXRsZXMiLCAiTWVudSBzZWN0aW9uIGhlYWRp
bmcgZm9yIHN1YnRpdGxlcyIpOwogfQogCi1TdHJpbmcgdGV4dFRyYWNrT2ZmVGV4dCgpCitTdHJp
bmcgdGV4dFRyYWNrT2ZmTWVudUl0ZW1UZXh0KCkKIHsKICAgICByZXR1cm4gV0VCX1VJX1NUUklO
RygiT2ZmIiwgIk1lbnUgaXRlbSBsYWJlbCBmb3IgdGhlIHRyYWNrIHRoYXQgcmVwcmVzZW50cyBk
aXNhYmxpbmcgY2xvc2VkIGNhcHRpb25zIik7CiB9CiAKK1N0cmluZyB0ZXh0VHJhY2tBdXRvbWF0
aWNNZW51SXRlbVRleHQoY29uc3QgU3RyaW5nJiBsYW5ndWFnZSkKK3sKKyAgICByZXR1cm4gZm9y
bWF0TG9jYWxpemVkU3RyaW5nKFdFQl9VSV9TVFJJTkcoIkF1dG9tYXRpYyAoJUApIiwgIk1lbnUg
aXRlbSBsYWJlbCBmb3IgYXV0b21hdGljIHRyYWNrIHNlbGVjdGlvbiBiZWhhdmlvciBpbiB0aGUg
Zm9ybSBvZiAnQXV0b21hdGljIChTeXN0ZW1MYW5ndWFnZSknIiksIGxhbmd1YWdlLmNyZWF0ZUNG
U3RyaW5nKCkuZ2V0KCkpOworfQorCiBTdHJpbmcgdGV4dFRyYWNrTm9MYWJlbFRleHQoKQogewog
ICAgIHJldHVybiBXRUJfVUlfU1RSSU5HX0tFWSgiVW5rbm93biIsICJVbmtub3duICh0ZXh0IHRy
YWNrKSIsICJNZW51IGl0ZW0gbGFiZWwgZm9yIGEgdGV4dCB0cmFjayB0aGF0IGhhcyBubyBvdGhl
ciBuYW1lIik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Mb2NhbGl6ZWRTdHJpbmdz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTG9jYWxpemVkU3RyaW5n
cy5oCShyZXZpc2lvbiAxNDczMjMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Mb2NhbGl6
ZWRTdHJpbmdzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2Niw3ICsyNjYsOCBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCiAgICAgU3RyaW5nIHRleHRUcmFj
a1N1YnRpdGxlc1RleHQoKTsKLSAgICBTdHJpbmcgdGV4dFRyYWNrT2ZmVGV4dCgpOworICAgIFN0
cmluZyB0ZXh0VHJhY2tPZmZNZW51SXRlbVRleHQoKTsKKyAgICBTdHJpbmcgdGV4dFRyYWNrQXV0
b21hdGljTWVudUl0ZW1UZXh0KGNvbnN0IFN0cmluZyYgbGFuZ3VhZ2UpOwogICAgIFN0cmluZyB0
ZXh0VHJhY2tOb0xhYmVsVGV4dCgpOwogI2lmIFBMQVRGT1JNKE1BQykKICAgICBTdHJpbmcgdGV4
dFRyYWNrQ291bnRyeUFuZExhbmd1YWdlTWVudUl0ZW1UZXh0KGNvbnN0IFN0cmluZyYgdGl0bGUs
IGNvbnN0IFN0cmluZyYgY291bnRyeSwgY29uc3QgU3RyaW5nJiBsYW5ndWFnZSk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCShy
ZXZpc2lvbiAxNDczMjMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRp
YVBsYXllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNTQsNiArMTE1NCwxMyBAQCB2b2lkIE1l
ZGlhUGxheWVyOjpzaW11bGF0ZUF1ZGlvSW50ZXJydXB0CiB9CiAjZW5kaWYKIAorU3RyaW5nIE1l
ZGlhUGxheWVyOjpsYW5ndWFnZU9mUHJpbWFyeUF1ZGlvVHJhY2soKSBjb25zdAoreworICAgIGlm
ICghbV9wcml2YXRlKQorICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKKyAgICAKKyAgICBy
ZXR1cm4gbV9wcml2YXRlLT5sYW5ndWFnZU9mUHJpbWFyeUF1ZGlvVHJhY2soKTsKK30KIH0KIAog
I2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXll
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlh
UGxheWVyLmgJKHJldmlzaW9uIDE0NzMyMykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL01lZGlhUGxheWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2Niw2ICs0NjYsOCBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNpbXVsYXRlQXVkaW9JbnRlcnJ1cHRpb24oKTsKICNl
bmRpZgogCisgICAgU3RyaW5nIGxhbmd1YWdlT2ZQcmltYXJ5QXVkaW9UcmFjaygpIGNvbnN0Owor
CiBwcml2YXRlOgogICAgIE1lZGlhUGxheWVyKE1lZGlhUGxheWVyQ2xpZW50Kik7CiAgICAgdm9p
ZCBsb2FkV2l0aE5leHRNZWRpYUVuZ2luZShNZWRpYVBsYXllckZhY3RvcnkqKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyUHJpdmF0ZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyUHJp
dmF0ZS5oCShyZXZpc2lvbiAxNDczMjMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9NZWRpYVBsYXllclByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTkxLDYgKzE5MSw4
IEBAIHB1YmxpYzoKICNpZiBVU0UoR1NUUkVBTUVSKQogICAgIHZpcnR1YWwgdm9pZCBzaW11bGF0
ZUF1ZGlvSW50ZXJydXB0aW9uKCkgeyB9CiAjZW5kaWYKKyAgICAKKyAgICB2aXJ0dWFsIFN0cmlu
ZyBsYW5ndWFnZU9mUHJpbWFyeUF1ZGlvVHJhY2soKSBjb25zdCB7IHJldHVybiBlbXB0eVN0cmlu
ZygpOyB9CiB9OwogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9h
dmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9u
L29iamMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5oCShyZXZpc2lvbiAxNDcz
MjMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2Jq
Yy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLmgJKHdvcmtpbmcgY29weSkKQEAg
LTE1OSw2ICsxNTksOCBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgTWVkaWFQbGF5ZXI6Ok1lZGlh
S2V5RXhjZXB0aW9uIGNhbmNlbEtleVJlcXVlc3QoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5n
Jik7CiAjZW5kaWYKIAorICAgIHZpcnR1YWwgU3RyaW5nIGxhbmd1YWdlT2ZQcmltYXJ5QXVkaW9U
cmFjaygpIGNvbnN0IE9WRVJSSURFOworCiAjaWYgSEFWRShBVkZPVU5EQVRJT05fVEVYVF9UUkFD
S19TVVBQT1JUKQogICAgIHZpcnR1YWwgdm9pZCBzZXRDdXJyZW50VHJhY2soSW5iYW5kVGV4dFRy
YWNrUHJpdmF0ZUFWRiopIE9WRVJSSURFOwogICAgIHZpcnR1YWwgSW5iYW5kVGV4dFRyYWNrUHJp
dmF0ZUFWRiogY3VycmVudFRyYWNrKCkgT1ZFUlJJREU7CkBAIC0xNzIsNiArMTc0LDcgQEAgcHJp
dmF0ZToKICAgICBSZXRhaW5QdHI8QVZQbGF5ZXJMYXllcj4gbV92aWRlb0xheWVyOwogICAgIFJl
dGFpblB0cjxXZWJDb3JlQVZGTW92aWVPYnNlcnZlcj4gbV9vYmpjT2JzZXJ2ZXI7CiAgICAgUmV0
YWluUHRyPGlkPiBtX3RpbWVPYnNlcnZlcjsKKyAgICBtdXRhYmxlIFN0cmluZyBtX2xhbmd1YWdl
T2ZQcmltYXJ5QXVkaW9UcmFjazsKICAgICBib29sIG1fdmlkZW9GcmFtZUhhc0RyYXduOwogICAg
IGJvb2wgbV9oYXZlQ2hlY2tlZFBsYXlhYmlsaXR5OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZv
dW5kYXRpb25PYmpDLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9i
akMubW0JKHJldmlzaW9uIDE0NzMyMykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTk0Niw2ICs5NDYsOCBAQCBmbG9hdCBNZWRpYVBsYXllclBy
aXZhdGVBVkZvdW5kYXRpb25PYmpDCiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0
aW9uT2JqQzo6dHJhY2tzQ2hhbmdlZCgpCiB7CisgICAgbV9sYW5ndWFnZU9mUHJpbWFyeUF1ZGlv
VHJhY2sgPSBTdHJpbmcoKTsKKwogICAgIGlmICghbV9hdkFzc2V0KQogICAgICAgICByZXR1cm47
CiAKQEAgLTEzNzcsNiArMTM3OSw0MyBAQCBJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGKiBNZWRp
YVBsYXllclByCiB9CiAjZW5kaWYgLy8gSEFWRShBVkZPVU5EQVRJT05fVEVYVF9UUkFDS19TVVBQ
T1JUKQogCitTdHJpbmcgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6bGFuZ3Vh
Z2VPZlByaW1hcnlBdWRpb1RyYWNrKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fbGFuZ3VhZ2VPZlBy
aW1hcnlBdWRpb1RyYWNrLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gbV9sYW5ndWFnZU9mUHJp
bWFyeUF1ZGlvVHJhY2s7CisKKyAgICBpZiAoIW1fYXZQbGF5ZXJJdGVtLmdldCgpKQorICAgICAg
ICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKKworICAgIC8vIElmIEFWRm91bmRhdGlvbiBoYXMgYW4g
YXVkaWJsZSBncm91cCwgcmV0dXJuIHRoZSBsYW5ndWFnZSBvZiB0aGUgY3VycmVudGx5IHNlbGVj
dGVkIGF1ZGlibGUgb3B0aW9uLgorICAgIEFWTWVkaWFTZWxlY3Rpb25Hcm91cFR5cGUgKmF1ZGli
bGVHcm91cCA9IFttX2F2QXNzZXQuZ2V0KCkgbWVkaWFTZWxlY3Rpb25Hcm91cEZvck1lZGlhQ2hh
cmFjdGVyaXN0aWM6QVZNZWRpYUNoYXJhY3RlcmlzdGljQXVkaWJsZV07CisgICAgQVZNZWRpYVNl
bGVjdGlvbk9wdGlvblR5cGUgKmN1cnJlbnRseVNlbGVjdGVkQXVkaWJsZU9wdGlvbiA9IFttX2F2
UGxheWVySXRlbS5nZXQoKSBzZWxlY3RlZE1lZGlhT3B0aW9uSW5NZWRpYVNlbGVjdGlvbkdyb3Vw
OmF1ZGlibGVHcm91cF07CisgICAgaWYgKGN1cnJlbnRseVNlbGVjdGVkQXVkaWJsZU9wdGlvbikg
eworICAgICAgICBtX2xhbmd1YWdlT2ZQcmltYXJ5QXVkaW9UcmFjayA9IFtbY3VycmVudGx5U2Vs
ZWN0ZWRBdWRpYmxlT3B0aW9uIGxvY2FsZV0gbG9jYWxlSWRlbnRpZmllcl07CisgICAgICAgIHJl
dHVybiBtX2xhbmd1YWdlT2ZQcmltYXJ5QXVkaW9UcmFjazsKKyAgICB9CisKKyAgICAvLyBBVkZv
dW5kYXRpb24gc3ludGhlc2l6ZXMgYW4gYXVkaWJsZSBncm91cCB3aGVuIHRoZXJlIGlzIG9ubHkg
b25lIHVuZ3JvdXBlZCBhdWRpbyB0cmFjayBpZiB0aGVyZSBpcyBhbHNvIGEgbGVnaWJsZSBncm91
cCAob25lIG9yCisgICAgLy8gbW9yZSBpbi1iYW5kIHRleHQgdHJhY2tzKS4gSXQgZG9lc24ndCBr
bm93IGFib3V0IG91dC1vZi1iYW5kIHRyYWNrcywgc28gaWYgdGhlcmUgaXMgYSBzaW5nbGUgYXVk
aW8gdHJhY2sgcmV0dXJuIGl0cyBsYW5ndWFnZS4KKyAgICBOU0FycmF5ICp0cmFja3MgPSBbbV9h
dkFzc2V0LmdldCgpIHRyYWNrc1dpdGhNZWRpYVR5cGU6QVZNZWRpYVR5cGVBdWRpb107CisgICAg
aWYgKCF0cmFja3MgfHwgIVt0cmFja3MgY291bnRdIHx8IFt0cmFja3MgY291bnRdID4gMSkgewor
ICAgICAgICBtX2xhbmd1YWdlT2ZQcmltYXJ5QXVkaW9UcmFjayA9IGVtcHR5U3RyaW5nKCk7Cisg
ICAgICAgIHJldHVybiBtX2xhbmd1YWdlT2ZQcmltYXJ5QXVkaW9UcmFjazsKKyAgICB9CisKKyAg
ICBBVkFzc2V0VHJhY2sgKnRyYWNrID0gW3RyYWNrcyBvYmplY3RBdEluZGV4OjBdOworICAgIE5T
U3RyaW5nICpsYW5ndWFnZSA9IFt0cmFjayBleHRlbmRlZExhbmd1YWdlVGFnXTsKKworICAgIC8v
IFNvbWUgbGVnYWN5IHRyYWNrcyBoYXZlICJ1bmQiIGFzIGEgbGFuZ3VhZ2UsIHRyZWF0IHRoYXQg
dGhlIHNhbWUgYXMgbm8gbGFuZ3VhZ2UgYXQgYWxsLgorICAgIGlmIChsYW5ndWFnZSAmJiAhW2xh
bmd1YWdlIGlzRXF1YWxUb1N0cmluZzpAInVuZCJdKSB7CisgICAgICAgIG1fbGFuZ3VhZ2VPZlBy
aW1hcnlBdWRpb1RyYWNrID0gbGFuZ3VhZ2U7CisgICAgICAgIHJldHVybiBtX2xhbmd1YWdlT2ZQ
cmltYXJ5QXVkaW9UcmFjazsKKyAgICB9CisKKyAgICBtX2xhbmd1YWdlT2ZQcmltYXJ5QXVkaW9U
cmFjayA9IGVtcHR5U3RyaW5nKCk7CisgICAgcmV0dXJuIG1fbGFuZ3VhZ2VPZlByaW1hcnlBdWRp
b1RyYWNrOworfQorICAgIAogTlNBcnJheSogYXNzZXRNZXRhZGF0YUtleU5hbWVzKCkKIHsKICAg
ICBzdGF0aWMgTlNBcnJheSoga2V5czsKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0NzQ5OSkKKysrIExh
eW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMyIEBACisyMDEz
LTA0LTAyICBFcmljIENhcmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAg
IFtNYWNdIGFkZCAiYXV0b21hdGljIiB0ZXh0IHRyYWNrIG1lbnUgaXRlbQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEzODIyCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBtZWRpYS9tZWRpYS1jYXB0aW9u
cy5odG1sOiBPcHBvcnR1bmlzdGljIGZpeCAtIGRvbid0IGxvb2sgYXQgc3RhdGUgdW50aWwgd2Ug
Z2V0IHRoZSAnY2FucGxheXRocm91Z2gnCisgICAgICAgICAgICBldmVudCBiZWNhdXNlIHRoZSBt
ZWRpYSBlbmdpbmUgc3RhdGUgbWF5IG5vdCBoYXZlIGJlZW4gcHJvY2Vzc2VkIHVudGlsIHRoYXQg
dGltZS4KKyAgICAgICAgKiBtZWRpYS90cmFjay90cmFjay1jdWUtY29udGFpbmVyLXJlbmRlcmlu
Zy1wb3NpdGlvbi5odG1sOiBEb24ndCBhc3N1bWUgdGhhdCBhIGN1ZSBoYXMgYmVlbiAKKyAgICAg
ICAgICAgIHJlbmRlcmVkIGltbWVkaWF0ZWx5IHdoZW4gdGhlICdjYW5wbGF5dGhyb3VnaCcgZXZl
bnQgY29tZXMgdGhyb3VnaC4KKyAgICAgICAgKiBtZWRpYS90cmFjay90cmFjay1jdWUtcmVuZGVy
aW5nLW1vZGUtY2hhbmdlZC5odG1sOiBEaXR0by4KKyAgICAgICAgKiBtZWRpYS90cmFjay90cmFj
ay1pbi1iYW5kLWV4cGVjdGVkLnR4dDogRG9uJ3QgY2hlY2sgaWYgY3VlcyBoYXZlIGxvYWRlZCwg
aXQgZG9lc24ndCBtYXR0ZXIKKyAgICAgICAgICAgIGZvciB0aGlzIHRlc3QuCisgICAgICAgICog
bWVkaWEvdHJhY2svdHJhY2staW4tYmFuZC5odG1sOiBEaXR0by4KKyAgICAgICAgKiBtZWRpYS90
cmFjay90cmFjay11c2VyLXByZWZlcmVuY2VzLWV4cGVjdGVkLnR4dDogQ2hhbmdlZCBuYW1lIG9m
IHV0aWxpdHkgZnVuY3Rpb24gZnJvbSAKKyAgICAgICAgICAgIG1lbnVJbmRleEZvckxhbmd1YWdl
IHRvIGluZGV4T2ZNZW51SXRlbUJlZ2lubmluZ1dpdGguCisgICAgICAgICogbWVkaWEvdHJhY2sv
dHJhY2stdXNlci1wcmVmZXJlbmNlcy5odG1sOiBNb3ZlIG1lbnVJbmRleEZvckxhbmd1YWdlIHRv
IHRyYWNrbWVudS10ZXN0LmpzIGFuZAorICAgICAgICAgICAgY2hhbmdlIG5hbWUgdG8gaW5kZXhP
Zk1lbnVJdGVtQmVnaW5uaW5nV2l0aC4gQ2xhcmlmeSB0aGUgbWVzc2FnZSBsb2dnZWQgd2hlbiBh
IHRyYWNrIGxvYWRzCisgICAgICAgICAgICBidXQgaXQgc2hvdWxkIG5vdC4KKyAgICAgICAgKiBt
ZWRpYS90cmFja21lbnUtdGVzdC5qczogTW92ZSBzb21lIGZ1bmN0aW9ucyBoZXJlIGZyb20gdHJh
Y2stdXNlci1wcmVmZXJlbmNlcy5odG1sCisgICAgICAgICh0cmFja01lbnVMaXN0KToKKyAgICAg
ICAgKGluZGV4T2ZNZW51SXRlbUJlZ2lubmluZ1dpdGgpOgorICAgICAgICAoc2VsZWN0Q2FwdGlv
bk1lbnVJdGVtKToKKyAgICAgICAgKiBtZWRpYS92aWRlby1jb250cm9scy1jYXB0aW9ucy10cmFj
a21lbnUtc29ydGVkLmh0bWw6IFVwZGF0ZSBmb3IgbmV3IG1lbnUgaXRlbS4KKyAgICAgICAgKiBt
ZWRpYS92aWRlby1jb250cm9scy1jYXB0aW9ucy10cmFja21lbnUuaHRtbDogRGl0dG8uCisgICAg
ICAgICogcGxhdGZvcm0vbWFjL21lZGlhL3ZpZGVvLWNvbnRyb2xzLWNhcHRpb25zLXRyYWNrbWVu
dS1leHBlY3RlZC50eHQ6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9tZWRpYS92aWRl
by1jb250cm9scy1jYXB0aW9ucy10cmFja21lbnUtc29ydGVkLWV4cGVjdGVkLnR4dDogRGl0dG8u
CisKIDIwMTMtMDQtMDIgIE5hdGUgQ2hhcGluICA8amFwaGV0QGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBVbnJldmlld2VkLCBjaHJvbWl1bSBnYXJkZW5pbmcuCkluZGV4OiBMYXlvdXRUZXN0cy9t
ZWRpYS9tZWRpYS1jYXB0aW9ucy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL21lZGlh
L21lZGlhLWNhcHRpb25zLmh0bWwJKHJldmlzaW9uIDE0NzMyMykKKysrIExheW91dFRlc3RzL21l
ZGlhL21lZGlhLWNhcHRpb25zLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTc0LDcgKzc0LDcgQEAK
ICAgICAgICAgICAgICAgICB3YWl0Rm9yRXZlbnQoInBsYXkiKTsKICAgICAgICAgICAgICAgICB3
YWl0Rm9yRXZlbnQoInBsYXlpbmciKTsKIAotICAgICAgICAgICAgICAgIHdhaXRGb3JFdmVudCgn
bG9hZGVkbWV0YWRhdGEnLCBjYW5wbGF5dGhyb3VnaCk7CisgICAgICAgICAgICAgICAgd2FpdEZv
ckV2ZW50KCdjYW5wbGF5dGhyb3VnaCcsIGNhbnBsYXl0aHJvdWdoKTsKIAogICAgICAgICAgICAg
ICAgIGNvbnNvbGVXcml0ZSgiPGI+VGVzdCBiZWZvcmUgbW92aWUgaXMgb3Blbjo8L2I+Iik7CiAg
ICAgICAgICAgICAgICAgdGVzdEV4cGVjdGVkKCJtZWRpYUVsZW1lbnQud2Via2l0SGFzQ2xvc2Vk
Q2FwdGlvbnMiLCBmYWxzZSk7CkluZGV4OiBMYXlvdXRUZXN0cy9tZWRpYS90cmFja21lbnUtdGVz
dC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9tZWRpYS90cmFja21lbnUtdGVzdC5qcwko
cmV2aXNpb24gMTQ3MzIzKQorKysgTGF5b3V0VGVzdHMvbWVkaWEvdHJhY2ttZW51LXRlc3QuanMJ
KHdvcmtpbmcgY29weSkKQEAgLTM1LDMgKzM1LDU0IEBAIGZ1bmN0aW9uIGdldFRyYWNrTGlzdEVs
ZW1lbnQoKQogICB9CiAgIHJldHVybiB0cmFja0xpc3RFbGVtZW50OwogfQorCitmdW5jdGlvbiB0
cmFja01lbnVMaXN0KCkKK3sKKyAgICB0cmFja0xpc3RFbGVtZW50ID0gZ2V0VHJhY2tMaXN0RWxl
bWVudCgpOworICAgIGlmICghdHJhY2tMaXN0RWxlbWVudCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgLy8gVHJhY2sgbGlzdCBzaG91bGQgaGF2ZSBhIDx1bD4gd2l0aCA8bGk+IGNoaWxkcmVuLgor
ICAgIHZhciB0cmFja0xpc3QgPSB0cmFja0xpc3RFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoInVsIik7
CisgICAgaWYgKCF0cmFja0xpc3QpIHsKKyAgICAgICAgZmFpbFRlc3QoIkNvdWxkIG5vdCBmaW5k
IGEgY2hpbGQgdWwgZWxlbWVudCBpbiB0cmFjayBsaXN0IG1lbnUiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICB2YXIgdHJhY2tMaXN0SXRlbXMgPSB0cmFja0xpc3QucXVlcnlTZWxlY3Rv
ckFsbCgibGkiKTsKKyAgICBpZiAoIXRyYWNrTGlzdEl0ZW1zKSB7CisgICAgICAgIGZhaWxUZXN0
KCJDb3VsZCBub3QgZmluZCBjaGlsZCBsaSBlbGVtZW50cyBpbiB0cmFjayBsaXN0IG1lbnUiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHJldHVybiB0cmFja0xpc3RJdGVtczsKK30K
KworZnVuY3Rpb24gaW5kZXhPZk1lbnVJdGVtQmVnaW5uaW5nV2l0aCh0aXRsZSkKK3sKKyAgICB2
YXIgdHJhY2tNZW51SXRlbXMgPSB0cmFja01lbnVMaXN0KCk7CisgICAgZm9yIChpID0gMDsgaSA8
IHRyYWNrTWVudUl0ZW1zLmxlbmd0aDsgKytpKSB7CisgICAgICAgIGlmICh0cmFja01lbnVJdGVt
c1tpXS50ZXh0Q29udGVudC5pbmRleE9mKHRpdGxlKSA9PSAwKQorICAgICAgICAgICAgYnJlYWs7
CisgICAgfQorICAgIHJldHVybiAoaSA8IHRyYWNrTWVudUl0ZW1zLmxlbmd0aCkgPyBpIDogLTE7
Cit9CisKK2Z1bmN0aW9uIHNlbGVjdENhcHRpb25NZW51SXRlbSh0aXRsZSkKK3sKKyAgICB2YXIg
dHJhY2tNZW51SXRlbXMgPSB0cmFja01lbnVMaXN0KCk7CisgICAgdmFyIGluZGV4ID0gaW5kZXhP
Zk1lbnVJdGVtQmVnaW5uaW5nV2l0aCh0aXRsZSk7CisgICAgaWYgKGluZGV4IDwgMCkgeworICAg
ICAgICBmYWlsVGVzdCgiTWVudSBpdGVtICIgKyB0aXRsZSArICIgbm90IGZvdW5kIGluIHRyYWNr
IGxpc3QgbWVudS4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNvbnNvbGVXcml0
ZSgiLSBjbGljayBvbiAnIiArIHRpdGxlICsgIicgbWVudSBpdGVtLiIpOworICAgIHZhciBzZWxl
Y3RlZFRyYWNrSXRlbSA9IHRyYWNrTWVudUl0ZW1zW2luZGV4XTsKKyAgICB2YXIgYm91bmRpbmdS
ZWN0ID0gc2VsZWN0ZWRUcmFja0l0ZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CisgICAgdmFy
IHggPSBib3VuZGluZ1JlY3QubGVmdCArIGJvdW5kaW5nUmVjdC53aWR0aCAvIDI7CisgICAgdmFy
IHkgPSBib3VuZGluZ1JlY3QudG9wICsgYm91bmRpbmdSZWN0LmhlaWdodCAvIDI7CisgICAgZXZl
bnRTZW5kZXIubW91c2VNb3ZlVG8oeCwgeSk7CisgICAgZXZlbnRTZW5kZXIubW91c2VEb3duKCk7
CisgICAgZXZlbnRTZW5kZXIubW91c2VVcCgpOworfQorCkluZGV4OiBMYXlvdXRUZXN0cy9tZWRp
YS92aWRlby1jb250cm9scy1jYXB0aW9ucy10cmFja21lbnUtc29ydGVkLmh0bWwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvbWVkaWEvdmlkZW8tY29udHJvbHMtY2FwdGlvbnMtdHJhY2ttZW51
LXNvcnRlZC5odG1sCShyZXZpc2lvbiAxNDczMjMpCisrKyBMYXlvdXRUZXN0cy9tZWRpYS92aWRl
by1jb250cm9scy1jYXB0aW9ucy10cmFja21lbnUtc29ydGVkLmh0bWwJKHdvcmtpbmcgY29weSkK
QEAgLTQxLDE0ICs0MSwxNSBAQAogICAgICAgICAgICAgICAgIGNhc2UgMToKICAgICAgICAgICAg
ICAgICAgICAgdHJhY2tNZW51SXRlbXMgPSB0ZXh0VHJhY2tNZW51SXRlbXMoKTsKICAgICAgICAg
ICAgICAgICAgICAgdGVzdEV4cGVjdGVkKCJ0cmFja01lbnVJdGVtc1swXS50ZXh0Q29udGVudCIs
ICJPZmYiKTsKLSAgICAgICAgICAgICAgICAgICAgdGVzdEV4cGVjdGVkKCJ0cmFja01lbnVJdGVt
c1sxXS50ZXh0Q29udGVudCIsICJ1IChFbmdsaXNoKSBTREgiKTsKLSAgICAgICAgICAgICAgICAg
ICAgdGVzdEV4cGVjdGVkKCJ0cmFja01lbnVJdGVtc1syXS50ZXh0Q29udGVudCIsICJ5IChFbmds
aXNoLUF1c3RyYWxpYSkgU0RIIik7Ci0gICAgICAgICAgICAgICAgICAgIHRlc3RFeHBlY3RlZCgi
dHJhY2tNZW51SXRlbXNbM10udGV4dENvbnRlbnQiLCAidiAoRW5nbGlzaCkiKTsKLSAgICAgICAg
ICAgICAgICAgICAgdGVzdEV4cGVjdGVkKCJ0cmFja01lbnVJdGVtc1s0XS50ZXh0Q29udGVudCIs
ICJ4IChFbmdsaXNoLUF1c3RyYWxpYSkiKTsKLSAgICAgICAgICAgICAgICAgICAgdGVzdEV4cGVj
dGVkKCJ0cmFja01lbnVJdGVtc1s1XS50ZXh0Q29udGVudCIsICJ3IChKYXBhbmVzZSkgU0RIIik7
Ci0gICAgICAgICAgICAgICAgICAgIHRlc3RFeHBlY3RlZCgidHJhY2tNZW51SXRlbXNbNl0udGV4
dENvbnRlbnQiLCAieiAoSmFwYW5lc2UpIik7CisgICAgICAgICAgICAgICAgICAgIHRlc3RFeHBl
Y3RlZCgidHJhY2tNZW51SXRlbXNbMV0udGV4dENvbnRlbnQiLCAiQXV0b21hdGljIChFbmdsaXNo
KSIpOworICAgICAgICAgICAgICAgICAgICB0ZXN0RXhwZWN0ZWQoInRyYWNrTWVudUl0ZW1zWzJd
LnRleHRDb250ZW50IiwgInUgKEVuZ2xpc2gpIFNESCIpOworICAgICAgICAgICAgICAgICAgICB0
ZXN0RXhwZWN0ZWQoInRyYWNrTWVudUl0ZW1zWzNdLnRleHRDb250ZW50IiwgInkgKEVuZ2xpc2gt
QXVzdHJhbGlhKSBTREgiKTsKKyAgICAgICAgICAgICAgICAgICAgdGVzdEV4cGVjdGVkKCJ0cmFj
a01lbnVJdGVtc1s0XS50ZXh0Q29udGVudCIsICJ2IChFbmdsaXNoKSIpOworICAgICAgICAgICAg
ICAgICAgICB0ZXN0RXhwZWN0ZWQoInRyYWNrTWVudUl0ZW1zWzVdLnRleHRDb250ZW50IiwgIngg
KEVuZ2xpc2gtQXVzdHJhbGlhKSIpOworICAgICAgICAgICAgICAgICAgICB0ZXN0RXhwZWN0ZWQo
InRyYWNrTWVudUl0ZW1zWzZdLnRleHRDb250ZW50IiwgIncgKEphcGFuZXNlKSBTREgiKTsKKyAg
ICAgICAgICAgICAgICAgICAgdGVzdEV4cGVjdGVkKCJ0cmFja01lbnVJdGVtc1s3XS50ZXh0Q29u
dGVudCIsICJ6IChKYXBhbmVzZSkiKTsKICAgICAgICAgICAgICAgICAgICAgdGVzdEV4cGVjdGVk
KCJ2aWRlby50ZXh0VHJhY2tzLmxlbmd0aCIsIDYpOwotICAgICAgICAgICAgICAgICAgICB0ZXN0
RXhwZWN0ZWQoInRyYWNrTWVudUl0ZW1zLmxlbmd0aCIsIDcpOworICAgICAgICAgICAgICAgICAg
ICB0ZXN0RXhwZWN0ZWQoInRyYWNrTWVudUl0ZW1zLmxlbmd0aCIsIDgpOwogCiAgICAgICAgICAg
ICAgICAgICAgIGNvbnNvbGVXcml0ZSgiPGJyPjxpPioqIENoYW5nZSBwcmVmZXJyZWQgbGFuZ3Vh
Z2UgdG8gSmFwYW5lc2UsIGNoYW5nZSBwcmVmZXJlbmNlIHRvIHN1YnRpdGxlczwiICsgIi9pPiIp
OwogICAgICAgICAgICAgICAgICAgICBydW4oImludGVybmFscy5zZXRVc2VyUHJlZmVycmVkTGFu
Z3VhZ2VzKFsnamEnXSkiKTsKQEAgLTYxLDExICs2MiwxMiBAQAogICAgICAgICAgICAgICAgIGNh
c2UgMjoKICAgICAgICAgICAgICAgICAgICAgdHJhY2tNZW51SXRlbXMgPSB0ZXh0VHJhY2tNZW51
SXRlbXMoKTsKICAgICAgICAgICAgICAgICAgICAgdGVzdEV4cGVjdGVkKCJ0cmFja01lbnVJdGVt
c1swXS50ZXh0Q29udGVudCIsICJPZmYiKTsKLSAgICAgICAgICAgICAgICAgICAgdGVzdEV4cGVj
dGVkKCJ0cmFja01lbnVJdGVtc1sxXS50ZXh0Q29udGVudCIsICJ6IChKYXBhbmVzZSkiKTsKLSAg
ICAgICAgICAgICAgICAgICAgdGVzdEV4cGVjdGVkKCJ0cmFja01lbnVJdGVtc1syXS50ZXh0Q29u
dGVudCIsICJ2IChFbmdsaXNoKSIpOwotICAgICAgICAgICAgICAgICAgICB0ZXN0RXhwZWN0ZWQo
InRyYWNrTWVudUl0ZW1zWzNdLnRleHRDb250ZW50IiwgInggKEVuZ2xpc2gtQXVzdHJhbGlhKSIp
OworICAgICAgICAgICAgICAgICAgICB0ZXN0RXhwZWN0ZWQoInRyYWNrTWVudUl0ZW1zWzFdLnRl
eHRDb250ZW50IiwgIkF1dG9tYXRpYyAoSmFwYW5lc2UpIik7CisgICAgICAgICAgICAgICAgICAg
IHRlc3RFeHBlY3RlZCgidHJhY2tNZW51SXRlbXNbMl0udGV4dENvbnRlbnQiLCAieiAoSmFwYW5l
c2UpIik7CisgICAgICAgICAgICAgICAgICAgIHRlc3RFeHBlY3RlZCgidHJhY2tNZW51SXRlbXNb
M10udGV4dENvbnRlbnQiLCAidiAoRW5nbGlzaCkiKTsKKyAgICAgICAgICAgICAgICAgICAgdGVz
dEV4cGVjdGVkKCJ0cmFja01lbnVJdGVtc1s0XS50ZXh0Q29udGVudCIsICJ4IChFbmdsaXNoLUF1
c3RyYWxpYSkiKTsKICAgICAgICAgICAgICAgICAgICAgdGVzdEV4cGVjdGVkKCJ2aWRlby50ZXh0
VHJhY2tzLmxlbmd0aCIsIDYpOwotICAgICAgICAgICAgICAgICAgICB0ZXN0RXhwZWN0ZWQoInRy
YWNrTWVudUl0ZW1zLmxlbmd0aCIsIDQpOworICAgICAgICAgICAgICAgICAgICB0ZXN0RXhwZWN0
ZWQoInRyYWNrTWVudUl0ZW1zLmxlbmd0aCIsIDUpOwogCiAgICAgICAgICAgICAgICAgICAgIGNv
bnNvbGVXcml0ZSgiIik7CiAgICAgICAgICAgICAgICAgICAgIGVuZFRlc3QoKTsKSW5kZXg6IExh
eW91dFRlc3RzL21lZGlhL3ZpZGVvLWNvbnRyb2xzLWNhcHRpb25zLXRyYWNrbWVudS5odG1sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL21lZGlhL3ZpZGVvLWNvbnRyb2xzLWNhcHRpb25zLXRy
YWNrbWVudS5odG1sCShyZXZpc2lvbiAxNDczMjMpCisrKyBMYXlvdXRUZXN0cy9tZWRpYS92aWRl
by1jb250cm9scy1jYXB0aW9ucy10cmFja21lbnUuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtNDEs
NyArNDEsNyBAQAogICAgICAgICAgICAgZnVuY3Rpb24gdGVzdE1lbnUoKQogICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgIHRyYWNrTGlzdEl0ZW1zID0gdHJhY2tNZW51TGlzdCgpOwotICAg
ICAgICAgICAgICAgIHZhciBleHBlY3RlZEl0ZW1Db3VudCA9IHZpZGVvLnRleHRUcmFja3MubGVu
Z3RoICsgMTsKKyAgICAgICAgICAgICAgICB2YXIgZXhwZWN0ZWRJdGVtQ291bnQgPSB2aWRlby50
ZXh0VHJhY2tzLmxlbmd0aCArIDI7CiAgICAgICAgICAgICAgICAgY29uc29sZVdyaXRlKCJUaGVy
ZSBzaG91bGQgYmUgIiArIGV4cGVjdGVkSXRlbUNvdW50ICsgIiBpdGVtcyBpbiB0aGUgbWVudS4i
KTsKICAgICAgICAgICAgICAgICB0ZXN0RXhwZWN0ZWQoInRyYWNrTGlzdEl0ZW1zLmxlbmd0aCIs
IGV4cGVjdGVkSXRlbUNvdW50KTsKICAgICAgICAgICAgIH0KQEAgLTYzLDggKzYzLDggQEAKICAg
ICAgICAgICAgIGZ1bmN0aW9uIHR1cm5DYXB0aW9uc09uKCkKICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICBjb25zb2xlV3JpdGUoIioqKiBUdXJuaW5nIGNhcHRpb25zIG9uIik7Ci0gICAg
ICAgICAgICAgICAgLy8gQ2xpY2sgb24gdGhlIHNlY29uZCBpdGVtLCB3aGljaCBpcyB0aGUgc2Vj
b25kIHRyYWNrIChPZmYgaXMgdGhlIGZpcnN0IGl0ZW0gaW4gdGhlIG1lbnUpCi0gICAgICAgICAg
ICAgICAgc2VsZWN0Q2FwdGlvbk1lbnVJdGVtKDIsIHRlc3RDYXB0aW9uc1Zpc2libGUpOworICAg
ICAgICAgICAgICAgIC8vIENsaWNrIG9uIHRoZSB0aGlyZCBpdGVtLCB3aGljaCBpcyB0aGUgc2Vj
b25kIHRyYWNrIChPZmYgaXMgdGhlIGZpcnN0IGl0ZW0sIEF1dG9tYXRpYyBpcyBzZWNvbmQpCisg
ICAgICAgICAgICAgICAgc2VsZWN0Q2FwdGlvbk1lbnVJdGVtKDMsIHRlc3RDYXB0aW9uc1Zpc2li
bGUpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBmdW5jdGlvbiB0ZXN0Q2FwdGlvbnNW
aXNpYmxlKCkKSW5kZXg6IExheW91dFRlc3RzL21lZGlhL3RyYWNrL3RyYWNrLWN1ZS1jb250YWlu
ZXItcmVuZGVyaW5nLXBvc2l0aW9uLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvbWVk
aWEvdHJhY2svdHJhY2stY3VlLWNvbnRhaW5lci1yZW5kZXJpbmctcG9zaXRpb24uaHRtbAkocmV2
aXNpb24gMTQ3MzIzKQorKysgTGF5b3V0VGVzdHMvbWVkaWEvdHJhY2svdHJhY2stY3VlLWNvbnRh
aW5lci1yZW5kZXJpbmctcG9zaXRpb24uaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAs
NyBAQAogCiAgICAgICAgICAgICBmaW5kTWVkaWFFbGVtZW50KCk7CiAgICAgICAgICAgICB2aWRl
by5zcmMgPSBmaW5kTWVkaWFGaWxlKCd2aWRlbycsICcuLi9jb250ZW50L3Rlc3QnKTsKLSAgICAg
ICAgICAgIHdhaXRGb3JFdmVudCgnY2FucGxheXRocm91Z2gnLCB0ZXN0UG9zaXRpb24pOworICAg
ICAgICAgICAgd2FpdEZvckV2ZW50KCdjYW5wbGF5dGhyb3VnaCcsIGZ1bmN0aW9uICgpIHtzZXRU
aW1lb3V0KHRlc3RQb3NpdGlvbiwgMTAwKTt9KTsKICAgICAgICAgfQogCiAgICAgICAgIDwvc2Ny
aXB0PgpJbmRleDogTGF5b3V0VGVzdHMvbWVkaWEvdHJhY2svdHJhY2stY3VlLXJlbmRlcmluZy1t
b2RlLWNoYW5nZWQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9tZWRpYS90cmFjay90
cmFjay1jdWUtcmVuZGVyaW5nLW1vZGUtY2hhbmdlZC5odG1sCShyZXZpc2lvbiAxNDczMjMpCisr
KyBMYXlvdXRUZXN0cy9tZWRpYS90cmFjay90cmFjay1jdWUtcmVuZGVyaW5nLW1vZGUtY2hhbmdl
ZC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0xMiw2ICsxMiwzMSBAQAogICAgICAgICB2YXIgdGVz
dFRyYWNrQXJhYmljOwogICAgICAgICB2YXIgdGVzdFRyYWNrRW5nbGlzaDsKICAgICAgICAgdmFy
IHRlc3RDdWVEaXNwbGF5Qm94OworICAgICAgICB2YXIgY3VycmVudFRlc3QgPSAwOworCisgICAg
ICAgIGZ1bmN0aW9uIHNjaGVkdWxlTmV4dFRlc3QoKSAKKyAgICAgICAgeworICAgICAgICAgICAg
dmFyIHRlc3Q7CisgICAgICAgICAgICBzd2l0Y2ggKCsrY3VycmVudFRlc3QpIHsKKyAgICAgICAg
ICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICB0ZXN0ID0gYWRkVHJhY2tzOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgICAgIHRlc3Qg
PSB0ZXN0Q3VlQWN0aXZlU3RhdGU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBjYXNlIDM6CisgICAgICAgICAgICAgICAgdGVzdCA9IHRlc3RDdWVWaXNpYmlsaXR5MTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgNDoKKyAgICAgICAgICAgICAg
ICB0ZXN0ID0gdGVzdEN1ZVZpc2liaWxpdHkyOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgY2FzZSA1OgorICAgICAgICAgICAgICAgIGVuZFRlc3QoKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHdpbmRvdy5zZXRUaW1l
b3V0KHRlc3QsIDEwMCk7CisgICAgICAgIH0KIAogICAgICAgICBmdW5jdGlvbiBhZGRUcmFja3Mo
KQogICAgICAgICB7CkBAIC0zMSw2ICs1Niw4IEBACiAKICAgICAgICAgICAgIGNvbnNvbGVXcml0
ZSgiU2V0IHRoZSBtb2RlIG9mIHRoZSAnRW5nbGlzaCcgdHJhY2sgdG8gaGlkZGVuIik7CiAgICAg
ICAgICAgICB0ZXN0VHJhY2tFbmdsaXNoLm1vZGUgPSAiaGlkZGVuIjsKKworICAgICAgICAgICAg
c2NoZWR1bGVOZXh0VGVzdCgpOwogICAgICAgICB9CiAKICAgICAgICAgZnVuY3Rpb24gdGVzdEN1
ZUFjdGl2ZVN0YXRlKCkKQEAgLTQyLDkgKzY5LDExIEBACiAKICAgICAgICAgICAgIHRlc3RFeHBl
Y3RlZCgidGVzdFRyYWNrQXJhYmljLmFjdGl2ZUN1ZXMubGVuZ3RoIiwgMSk7CiAgICAgICAgICAg
ICB0ZXN0RXhwZWN0ZWQoInRlc3RUcmFja0FyYWJpYy5hY3RpdmVDdWVzWzBdLnRleHQiLCAiQXJh
YmljIik7CisKKyAgICAgICAgICAgIHNjaGVkdWxlTmV4dFRlc3QoKTsKICAgICAgICAgfQogCi0g
ICAgICAgIGZ1bmN0aW9uIHRlc3RDdWVWaXNpYmlsaXR5KCkKKyAgICAgICAgZnVuY3Rpb24gdGVz
dEN1ZVZpc2liaWxpdHkxKCkKICAgICAgICAgewogICAgICAgICAgICAgY29uc29sZVdyaXRlKCIi
KTsKICAgICAgICAgICAgIGNvbnNvbGVXcml0ZSgiKiogT25seSBvbmUgY3VlIHNob3VsZCBiZSB2
aXNpYmxlICoqIik7CkBAIC01Niw2ICs4NSwxMSBAQAogICAgICAgICAgICAgY29uc29sZVdyaXRl
KCJTZXQgdGhlIG1vZGUgb2YgdGhlICdFbmdsaXNoJyB0cmFjayB0byBzaG93aW5nIik7CiAgICAg
ICAgICAgICB0ZXN0VHJhY2tFbmdsaXNoLm1vZGUgPSAic2hvd2luZyI7CiAKKyAgICAgICAgICAg
IHNjaGVkdWxlTmV4dFRlc3QoKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHRlc3RD
dWVWaXNpYmlsaXR5MigpCisgICAgICAgIHsKICAgICAgICAgICAgIGNvbnNvbGVXcml0ZSgiIik7
CiAgICAgICAgICAgICBjb25zb2xlV3JpdGUoIioqIEJvdGggY3VlcyBzaG9sZCBiZSB2aXNpYmxl
LiAqKiIpOwogICAgICAgICAgICAgdGVzdEN1ZURpc3BsYXlCb3ggPSB0ZXh0VHJhY2tEaXNwbGF5
RWxlbWVudCh2aWRlbywgJ2Rpc3BsYXknLCAwKTsKQEAgLTYzLDEzICs5Nyw4IEBACiAKICAgICAg
ICAgICAgIHRlc3RDdWVEaXNwbGF5Qm94ID0gdGV4dFRyYWNrRGlzcGxheUVsZW1lbnQodmlkZW8s
ICdkaXNwbGF5JywgMSk7CiAgICAgICAgICAgICB0ZXN0RXhwZWN0ZWQoInRlc3RDdWVEaXNwbGF5
Qm94LmlubmVyVGV4dCIsICJFbmdsaXNoIik7Ci0gICAgICAgIH0KIAotICAgICAgICBmdW5jdGlv
biBydW5UZXN0cygpIHsKLSAgICAgICAgICAgIGFkZFRyYWNrcygpOwotICAgICAgICAgICAgdGVz
dEN1ZUFjdGl2ZVN0YXRlKCk7Ci0gICAgICAgICAgICB0ZXN0Q3VlVmlzaWJpbGl0eSgpOwotICAg
ICAgICAgICAgZW5kVGVzdCgpOworICAgICAgICAgICAgc2NoZWR1bGVOZXh0VGVzdCgpOwogICAg
ICAgICB9CiAKICAgICAgICAgZnVuY3Rpb24gbG9hZGVkKCkKQEAgLTc5LDcgKzEwOCw3IEBACiAg
ICAgICAgICAgICBmaW5kTWVkaWFFbGVtZW50KCk7CiAgICAgICAgICAgICB2aWRlby5zcmMgPSBm
aW5kTWVkaWFGaWxlKCd2aWRlbycsICcuLi9jb250ZW50L3Rlc3QnKTsKIAotICAgICAgICAgICAg
d2FpdEZvckV2ZW50KCdjYW5wbGF5dGhyb3VnaCcsIHJ1blRlc3RzKTsKKyAgICAgICAgICAgIHdh
aXRGb3JFdmVudCgnY2FucGxheXRocm91Z2gnLCBzY2hlZHVsZU5leHRUZXN0KTsKICAgICAgICAg
fQogCiAgICAgICAgIDwvc2NyaXB0PgpJbmRleDogTGF5b3V0VGVzdHMvbWVkaWEvdHJhY2svdHJh
Y2staW4tYmFuZC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvbWVkaWEv
dHJhY2svdHJhY2staW4tYmFuZC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDE0NzMyMykKKysrIExh
eW91dFRlc3RzL21lZGlhL3RyYWNrL3RyYWNrLWluLWJhbmQtZXhwZWN0ZWQudHh0CSh3b3JraW5n
IGNvcHkpCkBAIC0xMiwxMiArMTIsOCBAQCBFVkVOVChjYW5wbGF5dGhyb3VnaCkKIEVYUEVDVEVE
ICh2aWRlby50ZXh0VHJhY2tzLmxlbmd0aCA9PSAnMicpIE9LCiBSVU4oaW5iYW5kVHJhY2sxID0g
dmlkZW8udGV4dFRyYWNrc1swXSkKIFJVTihpbmJhbmRUcmFjazIgPSB2aWRlby50ZXh0VHJhY2tz
WzFdKQotRVhQRUNURUQgKGluYmFuZFRyYWNrMS5tb2RlID09ICdkaXNhYmxlZCcpIE9LCi1FWFBF
Q1RFRCAoaW5iYW5kVHJhY2sxLmN1ZXMgPT0gJ251bGwnKSBPSwogRVhQRUNURUQgKGluYmFuZFRy
YWNrMS5sYW5ndWFnZSA9PSAnZW4nKSBPSwogRVhQRUNURUQgKGluYmFuZFRyYWNrMS5raW5kID09
ICdzdWJ0aXRsZXMnKSBPSwotRVhQRUNURUQgKGluYmFuZFRyYWNrMi5tb2RlID09ICdkaXNhYmxl
ZCcpIE9LCi1FWFBFQ1RFRCAoaW5iYW5kVHJhY2syLmN1ZXMgPT0gJ251bGwnKSBPSwogRVhQRUNU
RUQgKGluYmFuZFRyYWNrMi5sYW5ndWFnZSA9PSAnZnInKSBPSwogRVhQRUNURUQgKGluYmFuZFRy
YWNrMi5raW5kID09ICdzdWJ0aXRsZXMnKSBPSwogCkluZGV4OiBMYXlvdXRUZXN0cy9tZWRpYS90
cmFjay90cmFjay1pbi1iYW5kLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvbWVkaWEv
dHJhY2svdHJhY2staW4tYmFuZC5odG1sCShyZXZpc2lvbiAxNDczMjMpCisrKyBMYXlvdXRUZXN0
cy9tZWRpYS90cmFjay90cmFjay1pbi1iYW5kLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTI5LDEy
ICsyOSw4IEBACiAgICAgICAgICAgICAgICAgdGVzdEV4cGVjdGVkKCJ2aWRlby50ZXh0VHJhY2tz
Lmxlbmd0aCIsIDIpOwogICAgICAgICAgICAgICAgIHJ1bigiaW5iYW5kVHJhY2sxID0gdmlkZW8u
dGV4dFRyYWNrc1swXSIpOwogICAgICAgICAgICAgICAgIHJ1bigiaW5iYW5kVHJhY2syID0gdmlk
ZW8udGV4dFRyYWNrc1sxXSIpOwotICAgICAgICAgICAgICAgIHRlc3RFeHBlY3RlZCgiaW5iYW5k
VHJhY2sxLm1vZGUiLCAiZGlzYWJsZWQiKTsKLSAgICAgICAgICAgICAgICB0ZXN0RXhwZWN0ZWQo
ImluYmFuZFRyYWNrMS5jdWVzIiwgbnVsbCk7CiAgICAgICAgICAgICAgICAgdGVzdEV4cGVjdGVk
KCJpbmJhbmRUcmFjazEubGFuZ3VhZ2UiLCAiZW4iKTsKICAgICAgICAgICAgICAgICB0ZXN0RXhw
ZWN0ZWQoImluYmFuZFRyYWNrMS5raW5kIiwgInN1YnRpdGxlcyIpOwotICAgICAgICAgICAgICAg
IHRlc3RFeHBlY3RlZCgiaW5iYW5kVHJhY2syLm1vZGUiLCAiZGlzYWJsZWQiKTsKLSAgICAgICAg
ICAgICAgICB0ZXN0RXhwZWN0ZWQoImluYmFuZFRyYWNrMi5jdWVzIiwgbnVsbCk7CiAgICAgICAg
ICAgICAgICAgdGVzdEV4cGVjdGVkKCJpbmJhbmRUcmFjazIubGFuZ3VhZ2UiLCAiZnIiKTsKICAg
ICAgICAgICAgICAgICB0ZXN0RXhwZWN0ZWQoImluYmFuZFRyYWNrMi5raW5kIiwgInN1YnRpdGxl
cyIpOwogCkluZGV4OiBMYXlvdXRUZXN0cy9tZWRpYS90cmFjay90cmFjay11c2VyLXByZWZlcmVu
Y2VzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9tZWRpYS90cmFjay90
cmFjay11c2VyLXByZWZlcmVuY2VzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMTQ3MzIzKQorKysg
TGF5b3V0VGVzdHMvbWVkaWEvdHJhY2svdHJhY2stdXNlci1wcmVmZXJlbmNlcy1leHBlY3RlZC50
eHQJKHdvcmtpbmcgY29weSkKQEAgLTE4LDkgKzE4LDkgQEAgRVhQRUNURUQgKGV2ZW50LnRhcmdl
dC5yZWFkeVN0YXRlID09ICcyJwogCiBUZXN0IDM6IHNlbGVjdCAnZnInIHRyYWNrIGZyb20gbWVu
dQogLSBzaG93IGNhcHRpb25zIG1lbnUuCi1FWFBFQ1RFRCAodHJhY2tNZW51SXRlbXNbbWVudUlu
ZGV4Rm9yTGFuZ3VhZ2UoJ0ZyZW5jaCcpXS5jbGFzc05hbWUgPT0gJycpIE9LCi1FWFBFQ1RFRCAo
dHJhY2tNZW51SXRlbXNbbWVudUluZGV4Rm9yTGFuZ3VhZ2UoJ0VuZ2xpc2gnKV0uY2xhc3NOYW1l
ID09ICcnKSBPSwotRVhQRUNURUQgKHRyYWNrTWVudUl0ZW1zW21lbnVJbmRleEZvckxhbmd1YWdl
KCdOb3J3ZWdpYW4nKV0uY2xhc3NOYW1lID09ICdzZWxlY3RlZCcpIE9LCitFWFBFQ1RFRCAodHJh
Y2tNZW51SXRlbXNbaW5kZXhPZk1lbnVJdGVtQmVnaW5uaW5nV2l0aCgnRnJlbmNoJyldLmNsYXNz
TmFtZSA9PSAnJykgT0sKK0VYUEVDVEVEICh0cmFja01lbnVJdGVtc1tpbmRleE9mTWVudUl0ZW1C
ZWdpbm5pbmdXaXRoKCdFbmdsaXNoJyldLmNsYXNzTmFtZSA9PSAnJykgT0sKK0VYUEVDVEVEICh0
cmFja01lbnVJdGVtc1tpbmRleE9mTWVudUl0ZW1CZWdpbm5pbmdXaXRoKCdOb3J3ZWdpYW4nKV0u
Y2xhc3NOYW1lID09ICdzZWxlY3RlZCcpIE9LCiAtIGNsaWNrIG9uICdGcmVuY2gnIG1lbnUgaXRl
bS4KIEVWRU5UKGxvYWQpCiBFWFBFQ1RFRCAoZXZlbnQudGFyZ2V0LnNyY2xhbmcgPT0gJ2ZyJykg
T0sKSW5kZXg6IExheW91dFRlc3RzL21lZGlhL3RyYWNrL3RyYWNrLXVzZXItcHJlZmVyZW5jZXMu
aHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9tZWRpYS90cmFjay90cmFjay11c2VyLXBy
ZWZlcmVuY2VzLmh0bWwJKHJldmlzaW9uIDE0NzMyMykKKysrIExheW91dFRlc3RzL21lZGlhL3Ry
YWNrL3RyYWNrLXVzZXItcHJlZmVyZW5jZXMuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMjMsNTkg
KzIzLDEzIEBACiAgICAgICAgICAgICAgICAgdGltZXIgPSBzZXRUaW1lb3V0KG5leHRTdGVwLCAx
MDApOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBmdW5jdGlvbiB0cmFja01lbnVMaXN0
KCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0cmFja0xpc3RFbGVtZW50ID0gZ2V0
VHJhY2tMaXN0RWxlbWVudCgpOwotICAgICAgICAgICAgICAgIGlmICghdHJhY2tMaXN0RWxlbWVu
dCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICAgICAgLy8gVHJh
Y2sgbGlzdCBzaG91bGQgaGF2ZSBhIDx1bD4gd2l0aCA8bGk+IGNoaWxkcmVuIChPbmUgb2YgdGhl
bSBpcyAiT2ZmIikuCi0gICAgICAgICAgICAgICAgdmFyIHRyYWNrTGlzdCA9IHRyYWNrTGlzdEVs
ZW1lbnQucXVlcnlTZWxlY3RvcigidWwiKTsKLSAgICAgICAgICAgICAgICBpZiAoIXRyYWNrTGlz
dCkgewotICAgICAgICAgICAgICAgICAgICBmYWlsVGVzdCgiQ291bGQgbm90IGZpbmQgYSBjaGls
ZCB1bCBlbGVtZW50IGluIHRyYWNrIGxpc3QgbWVudSIpOwotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHZhciB0cmFja0xpc3RJ
dGVtcyA9IHRyYWNrTGlzdC5xdWVyeVNlbGVjdG9yQWxsKCJsaSIpOwotICAgICAgICAgICAgICAg
IGlmICghdHJhY2tMaXN0SXRlbXMpIHsKLSAgICAgICAgICAgICAgICAgICAgZmFpbFRlc3QoIkNv
dWxkIG5vdCBmaW5kIGNoaWxkIGxpIGVsZW1lbnRzIGluIHRyYWNrIGxpc3QgbWVudSIpOwotICAg
ICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIHRyYWNrTGlzdEl0ZW1zOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBmdW5jdGlvbiBtZW51SW5kZXhGb3JMYW5ndWFnZShsYW5ndWFnZSkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICB2YXIgdHJhY2tNZW51SXRlbXMgPSB0cmFja01lbnVMaXN0KCk7Ci0g
ICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHRyYWNrTWVudUl0ZW1zLmxlbmd0aDsgKytp
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0cmFja01lbnVJdGVtc1tpXS50ZXh0Q29udGVu
dC5pbmRleE9mKGxhbmd1YWdlKSA+PSAwKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiAoaSA8IHRyYWNrTWVu
dUl0ZW1zLmxlbmd0aCkgPyBpIDogLTE7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZ1
bmN0aW9uIHNlbGVjdENhcHRpb25NZW51SXRlbShsYW5ndWFnZSkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICB2YXIgdHJhY2tNZW51SXRlbXMgPSB0cmFja01lbnVMaXN0KCk7Ci0gICAg
ICAgICAgICAgICAgdmFyIGluZGV4ID0gbWVudUluZGV4Rm9yTGFuZ3VhZ2UobGFuZ3VhZ2UpOwot
ICAgICAgICAgICAgICAgIGlmIChpbmRleCA8IDApIHsKLSAgICAgICAgICAgICAgICAgICAgZmFp
bFRlc3QoIk1lbnUgaXRlbSAiICsgbGFuZ3VhZ2UgKyAiIG5vdCBmb3VuZCBpbiB0cmFjayBsaXN0
IG1lbnUuIik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgICAgICBjb25zb2xlV3JpdGUoIi0gY2xpY2sgb24gJyIgKyBsYW5ndWFn
ZSArICInIG1lbnUgaXRlbS4iKTsKLSAgICAgICAgICAgICAgICB2YXIgc2VsZWN0ZWRUcmFja0l0
ZW0gPSB0cmFja01lbnVJdGVtc1tpbmRleF07Ci0gICAgICAgICAgICAgICAgdmFyIGJvdW5kaW5n
UmVjdCA9IHNlbGVjdGVkVHJhY2tJdGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwotICAgICAg
ICAgICAgICAgIHZhciB4ID0gYm91bmRpbmdSZWN0LmxlZnQgKyBib3VuZGluZ1JlY3Qud2lkdGgg
LyAyOwotICAgICAgICAgICAgICAgIHZhciB5ID0gYm91bmRpbmdSZWN0LnRvcCArIGJvdW5kaW5n
UmVjdC5oZWlnaHQgLyAyOwotICAgICAgICAgICAgICAgIGV2ZW50U2VuZGVyLm1vdXNlTW92ZVRv
KHgsIHkpOwotICAgICAgICAgICAgICAgIGV2ZW50U2VuZGVyLm1vdXNlRG93bigpOwotICAgICAg
ICAgICAgICAgIGV2ZW50U2VuZGVyLm1vdXNlVXAoKTsKLSAgICAgICAgICAgIH0KLQogICAgICAg
ICAgICAgZnVuY3Rpb24gdHJhY2tMb2FkZWQoKQogICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgIGNvbnNvbGVXcml0ZSgiRVZFTlQobG9hZCkiKTsKKyAgICAgICAgICAgICAgICBpZiAoZXhw
ZWN0ZWRMYW5ndWFnZSA9PSAiIikgeworICAgICAgICAgICAgICAgICAgICBmYWlsVGVzdCgiJyIg
KyBldmVudC50YXJnZXQuc3JjbGFuZyArICInIHRyYWNrIGxvYWRlZCB1bmV4cGVjdGVkbHkuIik7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgdGVzdEV4cGVjdGVkKCJldmVudC50YXJnZXQuc3JjbGFuZyIsIGV4cGVjdGVkTGFu
Z3VhZ2UpOwogICAgICAgICAgICAgICAgIHRlc3RFeHBlY3RlZCgiZXZlbnQudGFyZ2V0LnJlYWR5
U3RhdGUiLCBIVE1MVHJhY2tFbGVtZW50LkxPQURFRCk7CiAKQEAgLTEzMCw5ICs4NCw5IEBACiAK
ICAgICAgICAgICAgICAgICBjYXNlIDQ6CiAgICAgICAgICAgICAgICAgICAgIHRyYWNrTWVudUl0
ZW1zID0gdHJhY2tNZW51TGlzdCgpOwotICAgICAgICAgICAgICAgICAgICB0ZXN0RXhwZWN0ZWQo
InRyYWNrTWVudUl0ZW1zW21lbnVJbmRleEZvckxhbmd1YWdlKCdGcmVuY2gnKV0uY2xhc3NOYW1l
IiwgIiIpOwotICAgICAgICAgICAgICAgICAgICB0ZXN0RXhwZWN0ZWQoInRyYWNrTWVudUl0ZW1z
W21lbnVJbmRleEZvckxhbmd1YWdlKCdFbmdsaXNoJyldLmNsYXNzTmFtZSIsICIiKTsKLSAgICAg
ICAgICAgICAgICAgICAgdGVzdEV4cGVjdGVkKCJ0cmFja01lbnVJdGVtc1ttZW51SW5kZXhGb3JM
YW5ndWFnZSgnTm9yd2VnaWFuJyldLmNsYXNzTmFtZSIsICJzZWxlY3RlZCIpOworICAgICAgICAg
ICAgICAgICAgICB0ZXN0RXhwZWN0ZWQoInRyYWNrTWVudUl0ZW1zW2luZGV4T2ZNZW51SXRlbUJl
Z2lubmluZ1dpdGgoJ0ZyZW5jaCcpXS5jbGFzc05hbWUiLCAiIik7CisgICAgICAgICAgICAgICAg
ICAgIHRlc3RFeHBlY3RlZCgidHJhY2tNZW51SXRlbXNbaW5kZXhPZk1lbnVJdGVtQmVnaW5uaW5n
V2l0aCgnRW5nbGlzaCcpXS5jbGFzc05hbWUiLCAiIik7CisgICAgICAgICAgICAgICAgICAgIHRl
c3RFeHBlY3RlZCgidHJhY2tNZW51SXRlbXNbaW5kZXhPZk1lbnVJdGVtQmVnaW5uaW5nV2l0aCgn
Tm9yd2VnaWFuJyldLmNsYXNzTmFtZSIsICJzZWxlY3RlZCIpOwogCiAgICAgICAgICAgICAgICAg
ICAgIHNlbGVjdENhcHRpb25NZW51SXRlbSgiRnJlbmNoIik7CiAgICAgICAgICAgICAgICAgICAg
IGV4cGVjdGVkTGFuZ3VhZ2UgPSAnZnInOwpAQCAtMTU3LDYgKzExMSw3IEBACiAKICAgICAgICAg
ICAgICAgICBjYXNlIDc6CiAgICAgICAgICAgICAgICAgICAgIHNlbGVjdENhcHRpb25NZW51SXRl
bSgiT2ZmIik7CisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkTGFuZ3VhZ2UgPSAnJzsKICAg
ICAgICAgICAgICAgICAgICAgY3JlYXRlVHJhY2tFbGVtZW50cyhbICdydScsICdqcCcsICdlbidd
KTsKICAgICAgICAgICAgICAgICAgICAgdGltZXIgPSBzZXRUaW1lb3V0KG5leHRTdGVwLCAxMDAp
OwogICAgICAgICAgICAgICAgICAgICBicmVhazsKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3Jt
L21hYy9tZWRpYS92aWRlby1jb250cm9scy1jYXB0aW9ucy10cmFja21lbnUtZXhwZWN0ZWQudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9tZWRpYS92aWRlby1jb250
cm9scy1jYXB0aW9ucy10cmFja21lbnUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAxNDczMjMpCisr
KyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvbWVkaWEvdmlkZW8tY29udHJvbHMtY2FwdGlvbnMt
dHJhY2ttZW51LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtOSw4ICs5LDggQEAgUlVO
KGludGVybmFscy5zZXRVc2VyUHJlZmVycmVkTGFuZ3VhZ2VzKAogUlVOKHZpZGVvLmFkZFRleHRU
cmFjaygiY2FwdGlvbnMiLCAiQ29tbWVudGFyeSIsICJydSIpKQogCiAqKiogVHVybmluZyBjYXB0
aW9ucyBvbgotVGhlcmUgc2hvdWxkIGJlIDUgaXRlbXMgaW4gdGhlIG1lbnUuCi1FWFBFQ1RFRCAo
dHJhY2tMaXN0SXRlbXMubGVuZ3RoID09ICc1JykgT0sKK1RoZXJlIHNob3VsZCBiZSA2IGl0ZW1z
IGluIHRoZSBtZW51LgorRVhQRUNURUQgKHRyYWNrTGlzdEl0ZW1zLmxlbmd0aCA9PSAnNicpIE9L
CiBFWFBFQ1RFRCAodmlkZW8udGV4dFRyYWNrcy5sZW5ndGggPT0gJzQnKSBPSwogVHJhY2sgMCBz
aG91bGQgYmUgc2hvd2luZwogRVhQRUNURUQgKHZpZGVvLnRleHRUcmFja3NbMF0ubW9kZSA9PSAn
c2hvd2luZycpIE9LCkBAIC0yNSw4ICsyNSw4IEBAIEVYUEVDVEVEICh0ZXh0VHJhY2tEaXNwbGF5
RWxlbWVudCh2aWRlbywKICoqKiBSZW1vdmUgYSB0cmFjay4KIFJVTih2aWRlby5yZW1vdmVDaGls
ZChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCJ0cmFjayIpWzBdKSkKICoqKiBUdXJuaW5nIGNh
cHRpb25zIG9mZgotVGhlcmUgc2hvdWxkIGJlIDQgaXRlbXMgaW4gdGhlIG1lbnUuCi1FWFBFQ1RF
RCAodHJhY2tMaXN0SXRlbXMubGVuZ3RoID09ICc0JykgT0sKK1RoZXJlIHNob3VsZCBiZSA1IGl0
ZW1zIGluIHRoZSBtZW51LgorRVhQRUNURUQgKHRyYWNrTGlzdEl0ZW1zLmxlbmd0aCA9PSAnNScp
IE9LCiBFWFBFQ1RFRCAodmlkZW8udGV4dFRyYWNrcy5sZW5ndGggPT0gJzMnKSBPSwogVHJhY2sg
MCBzaG91bGQgYmUgZGlzYWJsZWQKIEVYUEVDVEVEICh2aWRlby50ZXh0VHJhY2tzWzBdLm1vZGUg
PT0gJ2Rpc2FibGVkJykgT0sKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9tZWRpYS92
aWRlby1jb250cm9scy1jYXB0aW9ucy10cmFja21lbnUtc29ydGVkLWV4cGVjdGVkLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvbWVkaWEvdmlkZW8tY29udHJvbHMt
Y2FwdGlvbnMtdHJhY2ttZW51LXNvcnRlZC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDE0NzMyMykK
KysrIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9tZWRpYS92aWRlby1jb250cm9scy1jYXB0aW9u
cy10cmFja21lbnUtc29ydGVkLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtOCwyNSAr
OCwyNyBAQCBSVU4oaW50ZXJuYWxzLnNldFVzZXJQcmVmZXJyZWRMYW5ndWFnZXMoCiAqKiBUZXN0
IHdpdGggcHJlZmVycmVkIGxhbmd1YWdlIHNldCB0byBFbmdsaXNoLCB0cmFjayB0eXBlIHNldCB0
byBjYXB0aW9ucwogUlVOKGludGVybmFscy5zZXR0aW5ncy5zZXRTaG91bGREaXNwbGF5VHJhY2tL
aW5kKCdDYXB0aW9ucycsIHRydWUpKQogRVhQRUNURUQgKHRyYWNrTWVudUl0ZW1zWzBdLnRleHRD
b250ZW50ID09ICdPZmYnKSBPSwotRVhQRUNURUQgKHRyYWNrTWVudUl0ZW1zWzFdLnRleHRDb250
ZW50ID09ICd1IChFbmdsaXNoKSBTREgnKSBPSwotRVhQRUNURUQgKHRyYWNrTWVudUl0ZW1zWzJd
LnRleHRDb250ZW50ID09ICd5IChFbmdsaXNoLUF1c3RyYWxpYSkgU0RIJykgT0sKLUVYUEVDVEVE
ICh0cmFja01lbnVJdGVtc1szXS50ZXh0Q29udGVudCA9PSAndiAoRW5nbGlzaCknKSBPSwotRVhQ
RUNURUQgKHRyYWNrTWVudUl0ZW1zWzRdLnRleHRDb250ZW50ID09ICd4IChFbmdsaXNoLUF1c3Ry
YWxpYSknKSBPSwotRVhQRUNURUQgKHRyYWNrTWVudUl0ZW1zWzVdLnRleHRDb250ZW50ID09ICd3
IChKYXBhbmVzZSkgU0RIJykgT0sKLUVYUEVDVEVEICh0cmFja01lbnVJdGVtc1s2XS50ZXh0Q29u
dGVudCA9PSAneiAoSmFwYW5lc2UpJykgT0sKK0VYUEVDVEVEICh0cmFja01lbnVJdGVtc1sxXS50
ZXh0Q29udGVudCA9PSAnQXV0b21hdGljIChFbmdsaXNoKScpIE9LCitFWFBFQ1RFRCAodHJhY2tN
ZW51SXRlbXNbMl0udGV4dENvbnRlbnQgPT0gJ3UgKEVuZ2xpc2gpIFNESCcpIE9LCitFWFBFQ1RF
RCAodHJhY2tNZW51SXRlbXNbM10udGV4dENvbnRlbnQgPT0gJ3kgKEVuZ2xpc2gtQXVzdHJhbGlh
KSBTREgnKSBPSworRVhQRUNURUQgKHRyYWNrTWVudUl0ZW1zWzRdLnRleHRDb250ZW50ID09ICd2
IChFbmdsaXNoKScpIE9LCitFWFBFQ1RFRCAodHJhY2tNZW51SXRlbXNbNV0udGV4dENvbnRlbnQg
PT0gJ3ggKEVuZ2xpc2gtQXVzdHJhbGlhKScpIE9LCitFWFBFQ1RFRCAodHJhY2tNZW51SXRlbXNb
Nl0udGV4dENvbnRlbnQgPT0gJ3cgKEphcGFuZXNlKSBTREgnKSBPSworRVhQRUNURUQgKHRyYWNr
TWVudUl0ZW1zWzddLnRleHRDb250ZW50ID09ICd6IChKYXBhbmVzZSknKSBPSwogRVhQRUNURUQg
KHZpZGVvLnRleHRUcmFja3MubGVuZ3RoID09ICc2JykgT0sKLUVYUEVDVEVEICh0cmFja01lbnVJ
dGVtcy5sZW5ndGggPT0gJzcnKSBPSworRVhQRUNURUQgKHRyYWNrTWVudUl0ZW1zLmxlbmd0aCA9
PSAnOCcpIE9LCiAKICoqIENoYW5nZSBwcmVmZXJyZWQgbGFuZ3VhZ2UgdG8gSmFwYW5lc2UsIGNo
YW5nZSBwcmVmZXJlbmNlIHRvIHN1YnRpdGxlcwogUlVOKGludGVybmFscy5zZXRVc2VyUHJlZmVy
cmVkTGFuZ3VhZ2VzKFsnamEnXSkpCiBSVU4oaW50ZXJuYWxzLnNldHRpbmdzLnNldFNob3VsZERp
c3BsYXlUcmFja0tpbmQoJ0NhcHRpb25zJywgZmFsc2UpKQogUlVOKGludGVybmFscy5zZXR0aW5n
cy5zZXRTaG91bGREaXNwbGF5VHJhY2tLaW5kKCdTdWJ0aXRsZXMnLCB0cnVlKSkKIEVYUEVDVEVE
ICh0cmFja01lbnVJdGVtc1swXS50ZXh0Q29udGVudCA9PSAnT2ZmJykgT0sKLUVYUEVDVEVEICh0
cmFja01lbnVJdGVtc1sxXS50ZXh0Q29udGVudCA9PSAneiAoSmFwYW5lc2UpJykgT0sKLUVYUEVD
VEVEICh0cmFja01lbnVJdGVtc1syXS50ZXh0Q29udGVudCA9PSAndiAoRW5nbGlzaCknKSBPSwot
RVhQRUNURUQgKHRyYWNrTWVudUl0ZW1zWzNdLnRleHRDb250ZW50ID09ICd4IChFbmdsaXNoLUF1
c3RyYWxpYSknKSBPSworRVhQRUNURUQgKHRyYWNrTWVudUl0ZW1zWzFdLnRleHRDb250ZW50ID09
ICdBdXRvbWF0aWMgKEphcGFuZXNlKScpIE9LCitFWFBFQ1RFRCAodHJhY2tNZW51SXRlbXNbMl0u
dGV4dENvbnRlbnQgPT0gJ3ogKEphcGFuZXNlKScpIE9LCitFWFBFQ1RFRCAodHJhY2tNZW51SXRl
bXNbM10udGV4dENvbnRlbnQgPT0gJ3YgKEVuZ2xpc2gpJykgT0sKK0VYUEVDVEVEICh0cmFja01l
bnVJdGVtc1s0XS50ZXh0Q29udGVudCA9PSAneCAoRW5nbGlzaC1BdXN0cmFsaWEpJykgT0sKIEVY
UEVDVEVEICh2aWRlby50ZXh0VHJhY2tzLmxlbmd0aCA9PSAnNicpIE9LCi1FWFBFQ1RFRCAodHJh
Y2tNZW51SXRlbXMubGVuZ3RoID09ICc0JykgT0sKK0VYUEVDVEVEICh0cmFja01lbnVJdGVtcy5s
ZW5ndGggPT0gJzUnKSBPSwogCiBFTkQgT0YgVEVTVAogCg==
</data>
<flag name="commit-queue"
          id="218272"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>196236</attachid>
            <date>2013-04-02 15:19:31 -0700</date>
            <delta_ts>2013-04-04 15:23:00 -0700</delta_ts>
            <desc>Updated patch.</desc>
            <filename>patch_11.txt</filename>
            <type>text/plain</type>
            <size>76089</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0NzQ5OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDkxIEBACisyMDEzLTA0LTAyICBFcmljIENh
cmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIFtNYWNdIGFkZCAiYXV0
b21hdGljIiB0ZXh0IHRyYWNrIG1lbnUgaXRlbQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEzODIyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBleGlzdGluZyB0ZXN0cyB1cGRhdGVk
LgorCisgICAgICAgICogRW5nbGlzaC5scHJvai9Mb2NhbGl6YWJsZS5zdHJpbmdzOiBBZGQgbmV3
IHRyYWNrIG1lbnUgaXRlbS4KKworICAgICAgICAqIGh0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHA6
IAorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6SFRNTE1lZGlhRWxlbWVudCk6
IEluaXRpYWxpemUgbV9jYXB0aW9uRGlzcGxheU1vZGUuCisgICAgICAgIChXZWJDb3JlOjpIVE1M
TWVkaWFFbGVtZW50OjpmaW5pc2hQYXJzaW5nQ2hpbGRyZW4pOiBMb2FkVGV4dFRyYWNrUmVzb3Vy
Y2UgLT4gQ29uZmlndXJlVGV4dFRyYWNrcy4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVs
ZW1lbnQ6OnNjaGVkdWxlRGVsYXllZEFjdGlvbik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
SFRNTE1lZGlhRWxlbWVudDo6bG9hZFRpbWVyRmlyZWQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxNZWRpYUVsZW1lbnQ6OmxvYWRJbnRlcm5hbCk6IERpdHRvLiBGbGFnIHRoZSBjYXB0
aW9uIG1lbnUgYXMgaW52YWxpZCBzbyBpdCB3aWxsCisgICAgICAgICAgICBiZSByZWJ1aWx0IGFn
YWluLgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6bWVkaWFQbGF5ZXJEaWRB
ZGRUcmFjayk6IExvYWRUZXh0VHJhY2tSZXNvdXJjZSAtPiBDb25maWd1cmVUZXh0VHJhY2tzLgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6ZGlkQWRkVHJhY2spOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OmNvbmZpZ3VyZVRleHRUcmFja0dy
b3VwKTogRGVhbCB3aXRoIG5ldyB0cmFjayBkaXNwbGF5IG1vZGVzLgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTE1lZGlhRWxlbWVudDo6SFRNTE1lZGlhRWxlbWVudDo6aGFzQ2xvc2VkQ2FwdGlvbnMp
OiBNaW5vciBjbGVhbnVwLgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6Y29u
ZmlndXJlVGV4dFRyYWNrR3JvdXApOiBBZGQgc29tZSBsb2dnaW5nLgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTE1lZGlhRWxlbWVudDo6Y29uZmlndXJlVGV4dFRyYWNrcyk6IENhbGwgdXBkYXRlQWN0
aXZlVGV4dFRyYWNrQ3VlcyBzbyBjdWUgZGlzcGxheQorICAgICAgICAgICAgaXMgdXBkYXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OmNhcHRpb25QcmVmZXJlbmNlc0No
YW5nZWQpOiBEZWFsIHdpdGggbmV3IHRyYWNrIGRpc3BsYXkgbW9kZXMuCisgICAgICAgIChXZWJD
b3JlOjpIVE1MTWVkaWFFbGVtZW50OjptYXJrQ2FwdGlvbkFuZFN1YnRpdGxlVHJhY2tzQXNVbmNv
bmZpZ3VyZWQpOiBBZGQgc29tZSBsb2dnaW5nLgorICAgICAgICAqIGh0bWwvSFRNTE1lZGlhRWxl
bWVudC5oOiBEaXR0by4KKworICAgICAgICAqIGh0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1l
bnRUeXBlcy5jcHA6IFJlbW92ZSB0cmFja0luZGV4QXR0cmlidXRlTmFtZSBhbmQgdHJhY2tMaXN0
SW5kZXhGb3JFbGVtZW50LgorICAgICAgICAqIGh0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1l
bnRUeXBlcy5oOiBEaXR0by4KKworICAgICAgICAqIGh0bWwvc2hhZG93L01lZGlhQ29udHJvbEVs
ZW1lbnRzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbENsb3NlZENhcHRpb25z
VHJhY2tMaXN0RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6IERvbid0IHVzZSB0cmFjayBp
bmRleCwKKyAgICAgICAgICAgIGV2ZXJ5dGhpbmcgd2UgbmVlZCBpcyBpbiB0aGUgdHJhY2s8LT5l
bGVtZW50IG1hcCBub3cuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xDbG9zZWRDYXB0
aW9uc1RyYWNrTGlzdEVsZW1lbnQ6OnVwZGF0ZURpc3BsYXkpOiBEaXR0by4gQWx3YXlzIHJlYnVp
bGQgdGhlIAorICAgICAgICAgICAgdHJhY2sgbGlzdCBiZWNhdXNlIGNsZWFyIHRoZSBtYXAgZWFj
aCB0aW1lIHRoZSBtZW51IGdvZXMgYXdheSBiZWNhdXNlIGl0IHJlZnMgZXZlcnkgdHJhY2suCisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xDbG9zZWRDYXB0aW9uc1RyYWNrTGlzdEVsZW1l
bnQ6OnJlYnVpbGRUcmFja0xpc3RNZW51KTogRG9uJ3Qgc2V0IHRoZSB0cmFjaworICAgICAgICAg
ICAgaW5kZXggYXR0cmlidXRlIG9uIHRoZSBtZW51IGl0ZW1zLCBqdXN0IHVzZSB0aGUgbWFwLgor
ICAgICAgICAqIGh0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmg6CisKKyAgICAgICAg
KiBodG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xzQXBwbGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFDb250cm9sc0FwcGxlOjpjaGFuZ2VkQ2xvc2VkQ2FwdGlvbnNWaXNpYmlsaXR5KTogcmVz
ZXRUcmFja0xpc3RNZW51IGlzIGdvbmUuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xz
QXBwbGU6OnJlc2V0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xzQXBw
bGU6OmNsb3NlZENhcHRpb25UcmFja3NDaGFuZ2VkKTogRGl0dG8uCisKKyAgICAgICAgKiBodG1s
L3RyYWNrL1RleHRUcmFjay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0VHJhY2s6OmNhcHRp
b25NZW51T2ZmSXRlbSk6IE5ldywgc3RhdGljIFRleHRUcmFjayB1c2VkIGZvciB0aGUgbWVudSAi
T2ZmIiBpdGVtLgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrOjpjYXB0aW9uTWVudUF1dG9t
YXRpY0l0ZW0pOiBOZXcsIHN0YXRpYyBUZXh0VHJhY2sgdXNlZCBmb3IgdGhlIG1lbnUgIkF1dG9t
YXRpYyIgaXRlbS4KKyAgICAgICAgKiBodG1sL3RyYWNrL1RleHRUcmFjay5oOgorCisgICAgICAg
ICogcGFnZS9DYXB0aW9uVXNlclByZWZlcmVuY2VzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNh
cHRpb25Vc2VyUHJlZmVyZW5jZXM6OnNob3VsZFNob3dDYXB0aW9ucyk6IFJlbW92ZWQsIHdlIHVz
ZSBjYXB0aW9uRGlzcGxheU1vZGUgaW5zdGVhZC4KKyAgICAgICAgKFdlYkNvcmU6OkNhcHRpb25V
c2VyUHJlZmVyZW5jZXM6OmNhcHRpb25EaXNwbGF5TW9kZSk6IE5ldy4KKyAgICAgICAgKFdlYkNv
cmU6OkNhcHRpb25Vc2VyUHJlZmVyZW5jZXM6OnNldENhcHRpb25EaXNwbGF5TW9kZSk6IE5ldy4K
KyAgICAgICAgKFdlYkNvcmU6OkNhcHRpb25Vc2VyUHJlZmVyZW5jZXM6OnNldFByZWZlcnJlZExh
bmd1YWdlKTogTWFrZSB0aGUgcGFyYW1ldGVyIGEgY29uc3QgcmVmZXJlbmNlLgorICAgICAgICAo
V2ViQ29yZTo6Q2FwdGlvblVzZXJQcmVmZXJlbmNlczo6dGV4dFRyYWNrU2VsZWN0aW9uU2NvcmUp
OiBSZXR1cm4gMCBpZiB0aGUgdXNlciBkb2Vzbid0IHdhbnQKKyAgICAgICAgICAgIGNhcHRpb25z
IG9yIHN1YnRpdGxlcy4KKyAgICAgICAgKFdlYkNvcmU6OkNhcHRpb25Vc2VyUHJlZmVyZW5jZXM6
OnRleHRUcmFja0xhbmd1YWdlU2VsZWN0aW9uU2NvcmUpOiBUYWtlIGxhbmd1YWdlIGFzIGEgcGFy
YW1ldGVyCisgICAgICAgICAgICBpbnN0ZWFkIG9mIGFzc3VtaW5nIHRoYXQgaXQgaXMgYWx3YXlz
IHRoZSBlbnRpcmUgbGFuZ3VhZ2UgbGlzdC4KKyAgICAgICAgKiBwYWdlL0NhcHRpb25Vc2VyUHJl
ZmVyZW5jZXMuaDoKKworICAgICAgICAqIHBhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01hYy5o
OgorICAgICAgICAqIHBhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01hYy5tbToKKyAgICAgICAg
KFdlYkNvcmU6OkNhcHRpb25Vc2VyUHJlZmVyZW5jZXNNYWM6OnNob3VsZFNob3dDYXB0aW9ucyk6
IFJlbW92ZWQsIHdlIHVzZSBjYXB0aW9uRGlzcGxheU1vZGUgaW5zdGVhZC4KKyAgICAgICAgKFdl
YkNvcmU6OkNhcHRpb25Vc2VyUHJlZmVyZW5jZXNNYWM6OmNhcHRpb25EaXNwbGF5TW9kZSk6IE5l
dy4KKyAgICAgICAgKFdlYkNvcmU6OkNhcHRpb25Vc2VyUHJlZmVyZW5jZXNNYWM6OnNldENhcHRp
b25EaXNwbGF5TW9kZSk6IE5ldy4KKyAgICAgICAgKFdlYkNvcmU6OkNhcHRpb25Vc2VyUHJlZmVy
ZW5jZXNNYWM6OnNldFByZWZlcnJlZExhbmd1YWdlKTogTWFrZSB0aGUgcGFyYW1ldGVyIGEgY29u
c3QgcmVmZXJlbmNlLgorICAgICAgICAoV2ViQ29yZTo6Q2FwdGlvblVzZXJQcmVmZXJlbmNlc01h
Yzo6dGV4dFRyYWNrU2VsZWN0aW9uU2NvcmUpOiBEZWFsIHdpdGggIkF1dG9tYXRpYyIgbW9kZS4K
KyAgICAgICAgICAgIGNhcHRpb25zIG9yIHN1YnRpdGxlcy4KKyAgICAgICAgKFdlYkNvcmU6OkNh
cHRpb25Vc2VyUHJlZmVyZW5jZXM6OnRleHRUcmFja0xhbmd1YWdlU2VsZWN0aW9uU2NvcmUpOiBU
YWtlIGxhbmd1YWdlIGFzIGEgcGFyYW1ldGVyCisgICAgICAgICAgICBpbnN0ZWFkIG9mIGFzc3Vt
aW5nIHRoYXQgaXQgaXMgYWx3YXlzIHRoZSBlbnRpcmUgbGFuZ3VhZ2UgbGlzdC4KKyAgICAgICAg
KFdlYkNvcmU6OkNhcHRpb25Vc2VyUHJlZmVyZW5jZXNNYWM6OnNvcnRlZFRyYWNrTGlzdEZvck1l
bnUpOiBJbnNlcnQgIk9mZiIgYW5kICJBdXRvbWF0aWMiIGl0ZW1zLgorCisgICAgICAgICogcGxh
dGZvcm0vTG9jYWxpemVkU3RyaW5ncy5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0ZXh0VHJhY2tB
dXRvbWF0aWNNZW51SXRlbVRleHQpOiBOZXcuCisgICAgICAgICogcGxhdGZvcm0vTG9jYWxpemVk
U3RyaW5ncy5oOgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXI6Omxhbmd1YWdlT2ZQcmltYXJ5QXVkaW9U
cmFjayk6IE5ldy4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyUHJpdmF0ZS5oOgorCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2
YXRlQVZGb3VuZGF0aW9uT2JqQy5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMubW06CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpsYW5ndWFn
ZU9mUHJpbWFyeUF1ZGlvVHJhY2spOiBSZXR1cm4gdGhlIGxhbmd1YWdlCisgICAgICAgICAgICBv
ZiB0aGUgbWFpbiBhdWRpbyB0cmFjay4KKwogMjAxMy0wNC0wMiAgTWFydGluIFJvYmluc29uICA8
bXJvYmluc29uQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS10gTWFrZSBsaWJzZWNyZXQgb3B0
aW9uYWwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0VuZ2xpc2gubHByb2ovTG9jYWxpemFibGUuc3Ry
aW5ncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9FbmdsaXNoLmxwcm9qL0xvY2FsaXph
YmxlLnN0cmluZ3MJKHJldmlzaW9uIDE0NzQ5OSkKKysrIFNvdXJjZS9XZWJDb3JlL0VuZ2xpc2gu
bHByb2ovTG9jYWxpemFibGUuc3RyaW5ncwkod29ya2luZyBjb3B5KQpAQCAtNzYsNiArNzYsOSBA
QAogAC8AKgAgAFUAbgBkAG8AIABhAGMAdABpAG8AbgAgAG4AYQBtAGUAIAAqAC8ACiAAIgBBAGwA
aQBnAG4AIABSAGkAZwBoAHQAIAAoAFUAbgBkAG8AIABhAGMAdABpAG8AbgAgAG4AYQBtAGUAKQAi
ACAAPQAgACIAQQBsAGkAZwBuACAAUgBpAGcAaAB0ACIAOwAKIAAKKwAvACoAIABNAGUAbgB1ACAA
aQB0AGUAbQAgAGwAYQBiAGUAbAAgAGYAbwByACAAYQB1AHQAbwBtAGEAdABpAGMAIAB0AHIAYQBj
AGsAIABzAGUAbABlAGMAdABpAG8AbgAgAGIAZQBoAGEAdgBpAG8AcgAgAGkAbgAgAHQAaABlACAA
ZgBvAHIAbQAgAG8AZgAgACcAQQB1AHQAbwBtAGEAdABpAGMAIAAoAFMAeQBzAHQAZQBtAEwAYQBu
AGcAdQBhAGcAZQApACcAIAAqAC8ACisAIgBBAHUAdABvAG0AYQB0AGkAYwAgACgAJQBAACkAIgAg
AD0AIAAiAEEAdQB0AG8AbQBhAHQAaQBjACAAKAAlAEAAKQAiADsACisACiAALwAqACAAQgBhAGMA
awAgAGMAbwBuAHQAZQB4AHQAIABtAGUAbgB1ACAAaQB0AGUAbQAgACoALwAKIAAiAEIAYQBjAGsA
IgAgAD0AIAAiAEIAYQBjAGsAIgA7AAogAApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
TWVkaWFFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxN
ZWRpYUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNDc0OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxNZWRpYUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTUsNiArMjk1LDcgQEAg
SFRNTE1lZGlhRWxlbWVudDo6SFRNTE1lZGlhRWxlbWVudChjb25zdAogICAgICwgbV9oYXZlVmlz
aWJsZVRleHRUcmFjayhmYWxzZSkKICAgICAsIG1fcHJvY2Vzc2luZ1ByZWZlcmVuY2VDaGFuZ2Uo
ZmFsc2UpCiAgICAgLCBtX2xhc3RUZXh0VHJhY2tVcGRhdGVUaW1lKC0xKQorICAgICwgbV9jYXB0
aW9uRGlzcGxheU1vZGUoQ2FwdGlvblVzZXJQcmVmZXJlbmNlczo6QXV0b21hdGljKQogICAgICwg
bV90ZXh0VHJhY2tzKDApCiAgICAgLCBtX2lnbm9yZVRyYWNrRGlzcGxheVVwZGF0ZSgwKQogI2Vu
ZGlmCkBAIC00OTksNyArNTAwLDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpmaW5pc2hQYXJz
aW5nQ2hpbAogICAgIAogICAgIGZvciAoTm9kZSogbm9kZSA9IGZpcnN0Q2hpbGQoKTsgbm9kZTsg
bm9kZSA9IG5vZGUtPm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAgaWYgKG5vZGUtPmhhc1RhZ05h
bWUodHJhY2tUYWcpKSB7Ci0gICAgICAgICAgICBzY2hlZHVsZURlbGF5ZWRBY3Rpb24oTG9hZFRl
eHRUcmFja1Jlc291cmNlKTsKKyAgICAgICAgICAgIHNjaGVkdWxlRGVsYXllZEFjdGlvbihDb25m
aWd1cmVUZXh0VHJhY2tzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQpA
QCAtNjEzLDggKzYxNCw4IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6c2NoZWR1bGVEZWxheWVk
QWMKICAgICB9CiAKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCi0gICAgaWYgKFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OndlYmtpdFZpZGVvVHJhY2tFbmFibGVkKCkgJiYgKGFjdGlvblR5cGUgJiBM
b2FkVGV4dFRyYWNrUmVzb3VyY2UpKQotICAgICAgICBtX3BlbmRpbmdBY3Rpb25GbGFncyB8PSBM
b2FkVGV4dFRyYWNrUmVzb3VyY2U7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6Ondl
YmtpdFZpZGVvVHJhY2tFbmFibGVkKCkgJiYgKGFjdGlvblR5cGUgJiBDb25maWd1cmVUZXh0VHJh
Y2tzKSkKKyAgICAgICAgbV9wZW5kaW5nQWN0aW9uRmxhZ3MgfD0gQ29uZmlndXJlVGV4dFRyYWNr
czsKICNlbmRpZgogCiAjaWYgVVNFKFBMQVRGT1JNX1RFWFRfVFJBQ0tfTUVOVSkKQEAgLTYyMiw3
ICs2MjMsNiBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnNjaGVkdWxlRGVsYXllZEFjCiAgICAg
ICAgIG1fcGVuZGluZ0FjdGlvbkZsYWdzIHw9IFRleHRUcmFja0NoYW5nZXNOb3RpZmljYXRpb247
CiAjZW5kaWYKIAotICAgIGlmICghbV9sb2FkVGltZXIuaXNBY3RpdmUoKSkKICAgICAgICAgbV9s
b2FkVGltZXIuc3RhcnRPbmVTaG90KDApOwogfQogCkBAIC02NDksNyArNjQ5LDcgQEAgdm9pZCBI
VE1MTWVkaWFFbGVtZW50Ojpsb2FkVGltZXJGaXJlZChUaQogICAgIFJlZlB0cjxIVE1MTWVkaWFF
bGVtZW50PiBwcm90ZWN0KHRoaXMpOyAvLyBsb2FkTmV4dFNvdXJjZUNoaWxkIG1heSBmaXJlICdi
ZWZvcmVsb2FkJywgd2hpY2ggY2FuIG1ha2UgYXJiaXRyYXJ5IERPTSBtdXRhdGlvbnMuCiAKICNp
ZiBFTkFCTEUoVklERU9fVFJBQ0spCi0gICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6Ondl
YmtpdFZpZGVvVHJhY2tFbmFibGVkKCkgJiYgKG1fcGVuZGluZ0FjdGlvbkZsYWdzICYgTG9hZFRl
eHRUcmFja1Jlc291cmNlKSkKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6d2Via2l0
VmlkZW9UcmFja0VuYWJsZWQoKSAmJiAobV9wZW5kaW5nQWN0aW9uRmxhZ3MgJiBDb25maWd1cmVU
ZXh0VHJhY2tzKSkKICAgICAgICAgY29uZmlndXJlVGV4dFRyYWNrcygpOwogI2VuZGlmCiAKQEAg
LTgzMyw2ICs4MzMsOSBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmxvYWRJbnRlcm5hbCgpCiAg
ICAgcmVtb3ZlQmVoYXZpb3JSZXN0cmljdGlvbihSZXF1aXJlUGFnZUNvbnNlbnRUb0xvYWRNZWRp
YVJlc3RyaWN0aW9uKTsKIAogI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAgICBpZiAoaGFzTWVk
aWFDb250cm9scygpKQorICAgICAgICBtZWRpYUNvbnRyb2xzKCktPmNoYW5nZWRDbG9zZWRDYXB0
aW9uc1Zpc2liaWxpdHkoKTsKKwogICAgIC8vIEhUTUxNZWRpYUVsZW1lbnQ6OnRleHRUcmFja3NB
cmVSZWFkeSB3aWxsIG5lZWQgIi4uLiB0aGUgdGV4dCB0cmFja3Mgd2hvc2UgbW9kZSB3YXMgbm90
IGluIHRoZQogICAgIC8vIGRpc2FibGVkIHN0YXRlIHdoZW4gdGhlIGVsZW1lbnQncyByZXNvdXJj
ZSBzZWxlY3Rpb24gYWxnb3JpdGhtIGxhc3Qgc3RhcnRlZCIuCiAgICAgaWYgKFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OndlYmtpdFZpZGVvVHJhY2tFbmFibGVkKCkpIHsKQEAgLTI4MjQsNyArMjgy
Nyw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6bWVkaWFQbGF5ZXJEaWRBZGQKICAgICAvLyA3
LiBTZXQgdGhlIG5ldyB0ZXh0IHRyYWNrJ3MgbW9kZSB0byB0aGUgbW9kZSBjb25zaXN0ZW50IHdp
dGggdGhlIHVzZXIncyBwcmVmZXJlbmNlcyBhbmQgdGhlIHJlcXVpcmVtZW50cyBvZgogICAgIC8v
IHRoZSByZWxldmFudCBzcGVjaWZpY2F0aW9uIGZvciB0aGUgZGF0YS4KICAgICAvLyAgLSBUaGlz
IHdpbGwgaGFwcGVuIGluIGNvbmZpZ3VyZVRleHRUcmFja3MoKQotICAgIHNjaGVkdWxlRGVsYXll
ZEFjdGlvbihMb2FkVGV4dFRyYWNrUmVzb3VyY2UpOworICAgIHNjaGVkdWxlRGVsYXllZEFjdGlv
bihDb25maWd1cmVUZXh0VHJhY2tzKTsKICAgICAKICAgICAvLyA4LiBBZGQgdGhlIG5ldyB0ZXh0
IHRyYWNrIHRvIHRoZSBtZWRpYSBlbGVtZW50J3MgbGlzdCBvZiB0ZXh0IHRyYWNrcy4KICAgICAv
LyA5LiBGaXJlIGFuIGV2ZW50IHdpdGggdGhlIG5hbWUgYWRkdHJhY2ssIHRoYXQgZG9lcyBub3Qg
YnViYmxlIGFuZCBpcyBub3QgY2FuY2VsYWJsZSwgYW5kIHRoYXQgdXNlcyB0aGUgVHJhY2tFdmVu
dApAQCAtMzAyNiw3ICszMDI5LDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpkaWRBZGRUcmFj
ayhIVE1MVAogICAgIC8vIERvIG5vdCBzY2hlZHVsZSB0aGUgdHJhY2sgbG9hZGluZyB1bnRpbCBw
YXJzaW5nIGZpbmlzaGVzIHNvIHdlIGRvbid0IHN0YXJ0IGJlZm9yZSBhbGwgdHJhY2tzCiAgICAg
Ly8gaW4gdGhlIG1hcmt1cCBoYXZlIGJlZW4gYWRkZWQuCiAgICAgaWYgKCFtX3BhcnNpbmdJblBy
b2dyZXNzKQotICAgICAgICBzY2hlZHVsZURlbGF5ZWRBY3Rpb24oTG9hZFRleHRUcmFja1Jlc291
cmNlKTsKKyAgICAgICAgc2NoZWR1bGVEZWxheWVkQWN0aW9uKENvbmZpZ3VyZVRleHRUcmFja3Mp
OwogCiAgICAgaWYgKGhhc01lZGlhQ29udHJvbHMoKSkKICAgICAgICAgbWVkaWFDb250cm9scygp
LT5jbG9zZWRDYXB0aW9uVHJhY2tzQ2hhbmdlZCgpOwpAQCAtMzA2NiwyMCArMzA2OSwxMiBAQCB2
b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmRpZFJlbW92ZVRyYWNrKEhUCiAgICAgICAgIG1fdGV4dFRy
YWNrc1doZW5SZXNvdXJjZVNlbGVjdGlvbkJlZ2FuLnJlbW92ZShpbmRleCk7CiB9CiAKLWJvb2wg
SFRNTE1lZGlhRWxlbWVudDo6dXNlclByZWZlcnNDYXB0aW9ucygpIGNvbnN0Ci17Ci0gICAgUGFn
ZSogcGFnZSA9IGRvY3VtZW50KCktPnBhZ2UoKTsKLSAgICBpZiAoIXBhZ2UpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIENhcHRpb25Vc2VyUHJlZmVyZW5jZXMqIGNhcHRpb25QcmVmZXJl
bmNlcyA9IHBhZ2UtPmdyb3VwKCkuY2FwdGlvblByZWZlcmVuY2VzKCk7Ci0gICAgcmV0dXJuIGNh
cHRpb25QcmVmZXJlbmNlcy0+dXNlckhhc0NhcHRpb25QcmVmZXJlbmNlcygpICYmIGNhcHRpb25Q
cmVmZXJlbmNlcy0+c2hvdWxkU2hvd0NhcHRpb25zKCk7Ci19Ci0KIHZvaWQgSFRNTE1lZGlhRWxl
bWVudDo6Y29uZmlndXJlVGV4dFRyYWNrR3JvdXAoY29uc3QgVHJhY2tHcm91cCYgZ3JvdXApCiB7
CiAgICAgQVNTRVJUKGdyb3VwLnRyYWNrcy5zaXplKCkpOwogCisgICAgTE9HKE1lZGlhLCAiSFRN
TE1lZGlhRWxlbWVudDo6Y29uZmlndXJlVGV4dFRyYWNrR3JvdXAiKTsKKwogICAgIFBhZ2UqIHBh
Z2UgPSBkb2N1bWVudCgpLT5wYWdlKCk7CiAgICAgQ2FwdGlvblVzZXJQcmVmZXJlbmNlcyogY2Fw
dGlvblByZWZlcmVuY2VzID0gcGFnZT8gcGFnZS0+Z3JvdXAoKS5jYXB0aW9uUHJlZmVyZW5jZXMo
KSA6IDA7CiAKQEAgLTMxNTAsMjMgKzMxNDUsMzkgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojpz
ZXRTZWxlY3RlZFRleHRUcgogICAgIFRleHRUcmFja0xpc3QqIHRyYWNrTGlzdCA9IHRleHRUcmFj
a3MoKTsKICAgICBpZiAoIXRyYWNrTGlzdCB8fCAhdHJhY2tMaXN0LT5sZW5ndGgoKSkKICAgICAg
ICAgcmV0dXJuOwotICAgIGlmICh0cmFja1RvU2VsZWN0ICYmICF0cmFja0xpc3QtPmNvbnRhaW5z
KHRyYWNrVG9TZWxlY3QpKQotICAgICAgICByZXR1cm47CiAKLSAgICBmb3IgKGludCBpID0gMCwg
bGVuZ3RoID0gdHJhY2tMaXN0LT5sZW5ndGgoKTsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAg
IFRleHRUcmFjayogdHJhY2sgPSB0cmFja0xpc3QtPml0ZW0oaSk7Ci0gICAgICAgIGlmICghdHJh
Y2tUb1NlbGVjdCB8fCB0cmFjayAhPSB0cmFja1RvU2VsZWN0KQotICAgICAgICAgICAgdHJhY2st
PnNldE1vZGUoVGV4dFRyYWNrOjpkaXNhYmxlZEtleXdvcmQoKSk7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIHRyYWNrLT5zZXRNb2RlKFRleHRUcmFjazo6c2hvd2luZ0tleXdvcmQoKSk7Cisg
ICAgaWYgKHRyYWNrVG9TZWxlY3QgIT0gVGV4dFRyYWNrOjpjYXB0aW9uTWVudU9mZkl0ZW0oKSAm
JiB0cmFja1RvU2VsZWN0ICE9IFRleHRUcmFjazo6Y2FwdGlvbk1lbnVBdXRvbWF0aWNJdGVtKCkp
IHsKKyAgICAgICAgaWYgKCF0cmFja0xpc3QtPmNvbnRhaW5zKHRyYWNrVG9TZWxlY3QpKQorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgZm9yIChpbnQgaSA9IDAsIGxlbmd0
aCA9IHRyYWNrTGlzdC0+bGVuZ3RoKCk7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICAgICAg
VGV4dFRyYWNrKiB0cmFjayA9IHRyYWNrTGlzdC0+aXRlbShpKTsKKyAgICAgICAgICAgIGlmICgh
dHJhY2tUb1NlbGVjdCB8fCB0cmFjayAhPSB0cmFja1RvU2VsZWN0KQorICAgICAgICAgICAgICAg
IHRyYWNrLT5zZXRNb2RlKFRleHRUcmFjazo6ZGlzYWJsZWRLZXl3b3JkKCkpOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIHRyYWNrLT5zZXRNb2RlKFRleHRUcmFjazo6c2hvd2lu
Z0tleXdvcmQoKSk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBDYXB0aW9uVXNlclByZWZlcmVu
Y2VzKiBjYXB0aW9uUHJlZmVyZW5jZXMgPSBkb2N1bWVudCgpLT5wYWdlKCkgPyBkb2N1bWVudCgp
LT5wYWdlKCktPmdyb3VwKCkuY2FwdGlvblByZWZlcmVuY2VzKCkgOiAwOwotICAgIGlmIChjYXB0
aW9uUHJlZmVyZW5jZXMpIHsKLSAgICAgICAgY2FwdGlvblByZWZlcmVuY2VzLT5zZXRTaG91bGRT
aG93Q2FwdGlvbnModHJhY2tUb1NlbGVjdCk7Ci0gICAgICAgIGlmICh0cmFja1RvU2VsZWN0ICYm
IHRyYWNrVG9TZWxlY3QtPmxhbmd1YWdlKCkubGVuZ3RoKCkpCisgICAgaWYgKCFjYXB0aW9uUHJl
ZmVyZW5jZXMpCisgICAgICAgIHJldHVybjsKKworICAgIENhcHRpb25Vc2VyUHJlZmVyZW5jZXM6
OkNhcHRpb25EaXNwbGF5TW9kZSBkaXNwbGF5TW9kZSA9IGNhcHRpb25QcmVmZXJlbmNlcy0+Y2Fw
dGlvbkRpc3BsYXlNb2RlKCk7CisgICAgaWYgKHRyYWNrVG9TZWxlY3QgPT0gVGV4dFRyYWNrOjpj
YXB0aW9uTWVudU9mZkl0ZW0oKSkKKyAgICAgICAgZGlzcGxheU1vZGUgPSBDYXB0aW9uVXNlclBy
ZWZlcmVuY2VzOjpGb3JjZWRPbmx5OworICAgIGVsc2UgaWYgKHRyYWNrVG9TZWxlY3QgPT0gVGV4
dFRyYWNrOjpjYXB0aW9uTWVudUF1dG9tYXRpY0l0ZW0oKSkKKyAgICAgICAgZGlzcGxheU1vZGUg
PSBDYXB0aW9uVXNlclByZWZlcmVuY2VzOjpBdXRvbWF0aWM7CisgICAgZWxzZSB7CisgICAgICAg
IGRpc3BsYXlNb2RlID0gQ2FwdGlvblVzZXJQcmVmZXJlbmNlczo6QWx3YXlzT247CisgICAgICAg
IGlmICh0cmFja1RvU2VsZWN0LT5sYW5ndWFnZSgpLmxlbmd0aCgpKQogICAgICAgICAgICAgY2Fw
dGlvblByZWZlcmVuY2VzLT5zZXRQcmVmZXJyZWRMYW5ndWFnZSh0cmFja1RvU2VsZWN0LT5sYW5n
dWFnZSgpKTsKKyAgICAgICAgCisgICAgICAgIC8vIFNldCBtX2NhcHRpb25EaXNwbGF5TW9kZSBo
ZXJlIHNvIHdlIGRvbid0IHJlY29uZmlndXJlIGFnYWluIHdoZW4gdGhlIHByZWZlcmVuY2UgY2hh
bmdlZCBub3RpZmljYXRpb24gY29tZXMgdGhyb3VnaC4KKyAgICAgICAgbV9jYXB0aW9uRGlzcGxh
eU1vZGUgPSBkaXNwbGF5TW9kZTsKICAgICB9CisKKyAgICBjYXB0aW9uUHJlZmVyZW5jZXMtPnNl
dENhcHRpb25EaXNwbGF5TW9kZShkaXNwbGF5TW9kZSk7CiB9CiAKIHZvaWQgSFRNTE1lZGlhRWxl
bWVudDo6Y29uZmlndXJlVGV4dFRyYWNrcygpCkBAIC00MjUxLDcgKzQyNjIsOSBAQCBib29sIEhU
TUxNZWRpYUVsZW1lbnQ6Omhhc0Nsb3NlZENhcHRpb25zCiAgICAgICAgIHJldHVybiB0cnVlOwog
CiAjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQotICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVz
Ojp3ZWJraXRWaWRlb1RyYWNrRW5hYmxlZCgpICYmIG1fdGV4dFRyYWNrcykKKyAgICBpZiAoIVJ1
bnRpbWVFbmFibGVkRmVhdHVyZXM6OndlYmtpdFZpZGVvVHJhY2tFbmFibGVkKCkgfHwgIW1fdGV4
dFRyYWNrcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG1fdGV4dFRyYWNrcy0+bGVuZ3RoKCk7ICsraSkgewogICAgICAgICBpZiAobV90ZXh0
VHJhY2tzLT5pdGVtKGkpLT5yZWFkaW5lc3NTdGF0ZSgpID09IFRleHRUcmFjazo6RmFpbGVkVG9M
b2FkKQogICAgICAgICAgICAgY29udGludWU7CkBAIC00MjYxLDYgKzQyNzQsNyBAQCBib29sIEhU
TUxNZWRpYUVsZW1lbnQ6Omhhc0Nsb3NlZENhcHRpb25zCiAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CiAjZW5kaWYKKwogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAtNDQ2MSw2ICs0
NDc1LDggQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojpjb25maWd1cmVUZXh0VHJhYwogICAgIGlm
IChtX3Byb2Nlc3NpbmdQcmVmZXJlbmNlQ2hhbmdlKQogICAgICAgICByZXR1cm47CiAKKyAgICBM
T0coTWVkaWEsICJIVE1MTWVkaWFFbGVtZW50Ojpjb25maWd1cmVUZXh0VHJhY2tEaXNwbGF5Iik7
CisKICAgICBib29sIGhhdmVWaXNpYmxlVGV4dFRyYWNrID0gZmFsc2U7CiAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG1fdGV4dFRyYWNrcy0+bGVuZ3RoKCk7ICsraSkgewogICAgICAgICBp
ZiAobV90ZXh0VHJhY2tzLT5pdGVtKGkpLT5tb2RlKCkgPT0gVGV4dFRyYWNrOjpzaG93aW5nS2V5
d29yZCgpKSB7CkBAIC00NDY5LDggKzQ0ODUsMTEgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojpj
b25maWd1cmVUZXh0VHJhYwogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKG1faGF2ZVZpc2li
bGVUZXh0VHJhY2sgPT0gaGF2ZVZpc2libGVUZXh0VHJhY2spCisgICAgaWYgKG1faGF2ZVZpc2li
bGVUZXh0VHJhY2sgPT0gaGF2ZVZpc2libGVUZXh0VHJhY2spIHsKKyAgICAgICAgdXBkYXRlQWN0
aXZlVGV4dFRyYWNrQ3VlcyhjdXJyZW50VGltZSgpKTsKICAgICAgICAgcmV0dXJuOworICAgIH0K
KwogICAgIG1faGF2ZVZpc2libGVUZXh0VHJhY2sgPSBoYXZlVmlzaWJsZVRleHRUcmFjazsKICAg
ICBtX2Nsb3NlZENhcHRpb25zVmlzaWJsZSA9IG1faGF2ZVZpc2libGVUZXh0VHJhY2s7CiAKQEAg
LTQ0ODEsOCArNDUwMCwxMCBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmNvbmZpZ3VyZVRleHRU
cmFjCiAKICAgICBtZWRpYUNvbnRyb2xzKCktPmNoYW5nZWRDbG9zZWRDYXB0aW9uc1Zpc2liaWxp
dHkoKTsKICAgICAKLSAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6d2Via2l0VmlkZW9U
cmFja0VuYWJsZWQoKSkKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6d2Via2l0Vmlk
ZW9UcmFja0VuYWJsZWQoKSkgewogICAgICAgICB1cGRhdGVUZXh0VHJhY2tEaXNwbGF5KCk7Cisg
ICAgICAgIHVwZGF0ZUFjdGl2ZVRleHRUcmFja0N1ZXMoY3VycmVudFRpbWUoKSk7CisgICAgfQog
fQogCiB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmNhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWQoKQpA
QCAtNDQ5Myw3ICs0NTE0LDE1IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6Y2FwdGlvblByZWZl
cmVuY2UKICAgICBpZiAoaGFzTWVkaWFDb250cm9scygpKQogICAgICAgICBtZWRpYUNvbnRyb2xz
KCktPnRleHRUcmFja1ByZWZlcmVuY2VzQ2hhbmdlZCgpOwogCi0gICAgc2V0Q2xvc2VkQ2FwdGlv
bnNWaXNpYmxlKHVzZXJQcmVmZXJzQ2FwdGlvbnMoKSk7CisgICAgaWYgKCFkb2N1bWVudCgpLT5w
YWdlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIENhcHRpb25Vc2VyUHJlZmVyZW5jZXM6OkNh
cHRpb25EaXNwbGF5TW9kZSBkaXNwbGF5TW9kZSA9IGRvY3VtZW50KCktPnBhZ2UoKS0+Z3JvdXAo
KS5jYXB0aW9uUHJlZmVyZW5jZXMoKS0+Y2FwdGlvbkRpc3BsYXlNb2RlKCk7CisgICAgaWYgKG1f
Y2FwdGlvbkRpc3BsYXlNb2RlID09IGRpc3BsYXlNb2RlKQorICAgICAgICByZXR1cm47CisKKyAg
ICBtX2NhcHRpb25EaXNwbGF5TW9kZSA9IGRpc3BsYXlNb2RlOworICAgIHNldENsb3NlZENhcHRp
b25zVmlzaWJsZShtX2NhcHRpb25EaXNwbGF5TW9kZSA9PSBDYXB0aW9uVXNlclByZWZlcmVuY2Vz
OjpBbHdheXNPbik7CiB9CiAKIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6bWFya0NhcHRpb25BbmRT
dWJ0aXRsZVRyYWNrc0FzVW5jb25maWd1cmVkKCkKQEAgLTQ1MDEsNiArNDUzMCw4IEBAIHZvaWQg
SFRNTE1lZGlhRWxlbWVudDo6bWFya0NhcHRpb25BbmRTdWIKICAgICBpZiAoIW1fdGV4dFRyYWNr
cykKICAgICAgICAgcmV0dXJuOwogCisgICAgTE9HKE1lZGlhLCAiSFRNTE1lZGlhRWxlbWVudDo6
bWFya0NhcHRpb25BbmRTdWJ0aXRsZVRyYWNrc0FzVW5jb25maWd1cmVkIik7CisKICAgICAvLyBN
YXJrIGFsbCB0cmFja3MgYXMgbm90ICJjb25maWd1cmVkIiBzbyB0aGF0IGNvbmZpZ3VyZVRleHRU
cmFja3MoKQogICAgIC8vIHdpbGwgcmVjb25zaWRlciB3aGljaCB0cmFja3MgdG8gZGlzcGxheSBp
biBsaWdodCBvZiBuZXcgdXNlciBwcmVmZXJlbmNlcwogICAgIC8vIChlLmcuIGRlZmF1bHQgdHJh
Y2tzIHNob3VsZCBub3QgYmUgZGlzcGxheWVkIGlmIHRoZSB1c2VyIGhhcyB0dXJuZWQgb2ZmCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaAkocmV2aXNpb24gMTQ3NDk5
KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM5LDYgKzM5LDcgQEAKICNlbmRpZgogCiAjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQor
I2luY2x1ZGUgIkNhcHRpb25Vc2VyUHJlZmVyZW5jZXMuaCIKICNpbmNsdWRlICJQT0RJbnRlcnZh
bFRyZWUuaCIKICNpbmNsdWRlICJUZXh0VHJhY2suaCIKICNpbmNsdWRlICJUZXh0VHJhY2tDdWUu
aCIKQEAgLTExMiw4ICsxMTMsOSBAQCBwdWJsaWM6CiAKICAgICBlbnVtIERlbGF5ZWRBY3Rpb25U
eXBlIHsKICAgICAgICAgTG9hZE1lZGlhUmVzb3VyY2UgPSAxIDw8IDAsCi0gICAgICAgIExvYWRU
ZXh0VHJhY2tSZXNvdXJjZSA9IDEgPDwgMSwKLSAgICAgICAgVGV4dFRyYWNrQ2hhbmdlc05vdGlm
aWNhdGlvbiA9IDEgPDwgMgorICAgICAgICBDb25maWd1cmVUZXh0VHJhY2tzID0gMSA8PCAxLAor
ICAgICAgICBUZXh0VHJhY2tDaGFuZ2VzTm90aWZpY2F0aW9uID0gMSA8PCAyLAorICAgICAgICBD
b25maWd1cmVUZXh0VHJhY2tEaXNwbGF5ID0gMSA8PCAzCiAgICAgfTsKICAgICB2b2lkIHNjaGVk
dWxlRGVsYXllZEFjdGlvbihEZWxheWVkQWN0aW9uVHlwZSk7CiAgICAgCkBAIC0yNjgsMTAgKzI3
MCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbmZpZ3VyZVRleHRUcmFja0dyb3VwKGNvbnN0IFRy
YWNrR3JvdXAmKTsKIAogICAgIHZvaWQgc2V0U2VsZWN0ZWRUZXh0VHJhY2soVGV4dFRyYWNrKik7
Ci0gICAgc3RhdGljIGludCB0ZXh0VHJhY2tzT2ZmSW5kZXgoKSB7IHJldHVybiAtMTsgfQotICAg
IHN0YXRpYyBpbnQgdGV4dFRyYWNrc0luZGV4Tm90Rm91bmQoKSB7IHJldHVybiAtMjsgfQogCi0g
ICAgYm9vbCB1c2VyUHJlZmVyc0NhcHRpb25zKCkgY29uc3Q7CiAgICAgYm9vbCB0ZXh0VHJhY2tz
QXJlUmVhZHkoKSBjb25zdDsKICAgICB2b2lkIGNvbmZpZ3VyZVRleHRUcmFja0Rpc3BsYXkoKTsK
ICAgICB2b2lkIHVwZGF0ZVRleHRUcmFja0Rpc3BsYXkoKTsKQEAgLTY5Niw3ICs2OTUsOSBAQCBw
cml2YXRlOgogICAgIGJvb2wgbV90cmFja3NBcmVSZWFkeSA6IDE7CiAgICAgYm9vbCBtX2hhdmVW
aXNpYmxlVGV4dFRyYWNrIDogMTsKICAgICBib29sIG1fcHJvY2Vzc2luZ1ByZWZlcmVuY2VDaGFu
Z2UgOiAxOworCiAgICAgZmxvYXQgbV9sYXN0VGV4dFRyYWNrVXBkYXRlVGltZTsKKyAgICBDYXB0
aW9uVXNlclByZWZlcmVuY2VzOjpDYXB0aW9uRGlzcGxheU1vZGUgbV9jYXB0aW9uRGlzcGxheU1v
ZGU7CiAKICAgICBSZWZQdHI8VGV4dFRyYWNrTGlzdD4gbV90ZXh0VHJhY2tzOwogICAgIFZlY3Rv
cjxSZWZQdHI8VGV4dFRyYWNrPiA+IG1fdGV4dFRyYWNrc1doZW5SZXNvdXJjZVNlbGVjdGlvbkJl
Z2FuOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVu
dFR5cGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRp
YUNvbnRyb2xFbGVtZW50VHlwZXMuY3BwCShyZXZpc2lvbiAxNDc0OTkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50VHlwZXMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03NSwyNiArNzUsNiBAQCBNZWRpYUNvbnRyb2xFbGVtZW50VHlwZSBtZWRpYUNvbnRy
b2xFbGVtCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PE1lZGlhQ29udHJvbERpdkVsZW1lbnQqPihl
bGVtZW50KS0+ZGlzcGxheVR5cGUoKTsKIH0KIAotI2lmIEVOQUJMRShWSURFT19UUkFDSykKLWNv
bnN0IEF0b21pY1N0cmluZyYgdHJhY2tJbmRleEF0dHJpYnV0ZU5hbWUoKQotewotICAgIERFRklO
RV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCBuYW1lLCAoIngtd2Via2l0LXRyYWNrLWluZGV4
IiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwotICAgIHJldHVybiBuYW1l
OwotfQotCi1pbnQgdHJhY2tMaXN0SW5kZXhGb3JFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQpCi17
Ci0gICAgY29uc3QgQXRvbWljU3RyaW5nIHRyYWNrSW5kZXhBdHRyaWJ1dGVWYWx1ZSA9IGVsZW1l
bnQtPmdldEF0dHJpYnV0ZSh0cmFja0luZGV4QXR0cmlidXRlTmFtZSgpKTsKLSAgICBpZiAodHJh
Y2tJbmRleEF0dHJpYnV0ZVZhbHVlLmlzTnVsbCgpIHx8IHRyYWNrSW5kZXhBdHRyaWJ1dGVWYWx1
ZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBIVE1MTWVkaWFFbGVtZW50Ojp0ZXh0VHJhY2tz
SW5kZXhOb3RGb3VuZCgpOwotICAgIGJvb2wgb2s7Ci0gICAgaW50IHRyYWNrSW5kZXggPSB0cmFj
a0luZGV4QXR0cmlidXRlVmFsdWUudG9JbnQoJm9rKTsKLSAgICBpZiAoIW9rKQotICAgICAgICBy
ZXR1cm4gSFRNTE1lZGlhRWxlbWVudDo6dGV4dFRyYWNrc0luZGV4Tm90Rm91bmQoKTsKLSAgICBy
ZXR1cm4gdHJhY2tJbmRleDsKLX0KLSNlbmRpZgotCiBNZWRpYUNvbnRyb2xFbGVtZW50OjpNZWRp
YUNvbnRyb2xFbGVtZW50KE1lZGlhQ29udHJvbEVsZW1lbnRUeXBlIGRpc3BsYXlUeXBlLCBIVE1M
RWxlbWVudCogZWxlbWVudCkKICAgICA6IG1fbWVkaWFDb250cm9sbGVyKDApCiAgICAgLCBtX2Rp
c3BsYXlUeXBlKGRpc3BsYXlUeXBlKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cv
TWVkaWFDb250cm9sRWxlbWVudFR5cGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
aHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudFR5cGVzLmgJKHJldmlzaW9uIDE0NzQ5OSkK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRUeXBlcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC03OSwxMSArNzksNiBAQCBpbmxpbmUgSFRNTE1lZGlhRWxlbWVu
dCogdG9QYXJlbnRNZWRpYUVsCiAKIE1lZGlhQ29udHJvbEVsZW1lbnRUeXBlIG1lZGlhQ29udHJv
bEVsZW1lbnRUeXBlKE5vZGUqKTsKIAotI2lmIEVOQUJMRShWSURFT19UUkFDSykKLWNvbnN0IEF0
b21pY1N0cmluZyYgdHJhY2tJbmRleEF0dHJpYnV0ZU5hbWUoKTsKLWludCB0cmFja0xpc3RJbmRl
eEZvckVsZW1lbnQoRWxlbWVudCopOwotI2VuZGlmCi0KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KIAogY2xhc3MgTWVkaWFDb250cm9sRWxlbWVudCB7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwCShyZXZp
c2lvbiAxNDc0OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xF
bGVtZW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcwLDEwICs3MCw2IEBAIHVzaW5nIG5hbWVz
cGFjZSBIVE1MTmFtZXM7CiBzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5nJiBnZXRNZWRpYUNvbnRy
b2xDdXJyZW50VGltZURpc3BsYXlFbGVtZW50U2hhZG93UHNldWRvSWQoKTsKIHN0YXRpYyBjb25z
dCBBdG9taWNTdHJpbmcmIGdldE1lZGlhQ29udHJvbFRpbWVSZW1haW5pbmdEaXNwbGF5RWxlbWVu
dFNoYWRvd1BzZXVkb0lkKCk7CiAKLSNpZiBFTkFCTEUoVklERU9fVFJBQ0spCi1zdGF0aWMgY29u
c3QgY2hhciogdGV4dFRyYWNrc09mZkF0dHJWYWx1ZSA9ICItMSI7IC8vIFRoaXMgbXVzdCBtYXRj
aCBIVE1MTWVkaWFFbGVtZW50Ojp0ZXh0VHJhY2tzT2ZmSW5kZXgoKQotI2VuZGlmCi0KIE1lZGlh
Q29udHJvbFBhbmVsRWxlbWVudDo6TWVkaWFDb250cm9sUGFuZWxFbGVtZW50KERvY3VtZW50KiBk
b2N1bWVudCkKICAgICA6IE1lZGlhQ29udHJvbERpdkVsZW1lbnQoZG9jdW1lbnQsIE1lZGlhQ29u
dHJvbHNQYW5lbCkKICAgICAsIG1fY2FuQmVEcmFnZ2VkKGZhbHNlKQpAQCAtNzU4LDcgKzc1NCw2
IEBAIGNvbnN0IEF0b21pY1N0cmluZyYgTWVkaWFDb250cm9sQ2xvc2VkQ2EKIE1lZGlhQ29udHJv
bENsb3NlZENhcHRpb25zVHJhY2tMaXN0RWxlbWVudDo6TWVkaWFDb250cm9sQ2xvc2VkQ2FwdGlv
bnNUcmFja0xpc3RFbGVtZW50KERvY3VtZW50KiBkb2N1bWVudCwgTWVkaWFDb250cm9scyogY29u
dHJvbHMpCiAgICAgOiBNZWRpYUNvbnRyb2xEaXZFbGVtZW50KGRvY3VtZW50LCBNZWRpYUNsb3Nl
ZENhcHRpb25zVHJhY2tMaXN0KQogICAgICwgbV9jb250cm9scyhjb250cm9scykKLSAgICAsIG1f
dHJhY2tMaXN0SGFzQ2hhbmdlZCh0cnVlKQogewogfQogCkBAIC03ODgsMTkgKzc4MywxNCBAQCB2
b2lkIE1lZGlhQ29udHJvbENsb3NlZENhcHRpb25zVHJhY2tMaXN0CiAgICAgICAgICAgICB0ZXh0
VHJhY2sgPSBpdGVyLT52YWx1ZTsKICAgICAgICAgbV9tZW51VG9UcmFja01hcC5jbGVhcigpOwog
ICAgICAgICBtX2NvbnRyb2xzLT50b2dnbGVDbG9zZWRDYXB0aW9uVHJhY2tMaXN0KCk7Ci0KLSAg
ICAgICAgaW50IHRyYWNrSW5kZXggPSB0cmFja0xpc3RJbmRleEZvckVsZW1lbnQodG9FbGVtZW50
KHRhcmdldCkpOwotICAgICAgICBpZiAodHJhY2tJbmRleCA9PSBIVE1MTWVkaWFFbGVtZW50Ojp0
ZXh0VHJhY2tzSW5kZXhOb3RGb3VuZCgpKQorICAgICAgICBpZiAoIXRleHRUcmFjaykKICAgICAg
ICAgICAgIHJldHVybjsKIAogICAgICAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQg
PSB0b1BhcmVudE1lZGlhRWxlbWVudCh0aGlzKTsKICAgICAgICAgaWYgKCFtZWRpYUVsZW1lbnQp
CiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgaWYgKHRleHRUcmFjaykKLSAgICAgICAg
ICAgIG1lZGlhRWxlbWVudC0+c2V0U2VsZWN0ZWRUZXh0VHJhY2sodGV4dFRyYWNrLmdldCgpKTsK
LSAgICAgICAgZWxzZSBpZiAodHJhY2tJbmRleCA9PSBIVE1MTWVkaWFFbGVtZW50Ojp0ZXh0VHJh
Y2tzT2ZmSW5kZXgoKSkKLSAgICAgICAgICAgIG1lZGlhRWxlbWVudC0+c2V0U2VsZWN0ZWRUZXh0
VHJhY2soMCk7CisgICAgICAgIG1lZGlhRWxlbWVudC0+c2V0U2VsZWN0ZWRUZXh0VHJhY2sodGV4
dFRyYWNrLmdldCgpKTsKIAogICAgICAgICB1cGRhdGVEaXNwbGF5KCk7CiAgICAgfQpAQCAtODIz
LDM0ICs4MTMsMjQgQEAgdm9pZCBNZWRpYUNvbnRyb2xDbG9zZWRDYXB0aW9uc1RyYWNrTGlzdAog
ICAgIGlmICghbWVkaWFDb250cm9sbGVyKCktPmhhc0Nsb3NlZENhcHRpb25zKCkpCiAgICAgICAg
IHJldHVybjsKIAorICAgIGlmICghZG9jdW1lbnQoKS0+cGFnZSgpKQorICAgICAgICByZXR1cm47
CisgICAgQ2FwdGlvblVzZXJQcmVmZXJlbmNlczo6Q2FwdGlvbkRpc3BsYXlNb2RlIGRpc3BsYXlN
b2RlID0gZG9jdW1lbnQoKS0+cGFnZSgpLT5ncm91cCgpLmNhcHRpb25QcmVmZXJlbmNlcygpLT5j
YXB0aW9uRGlzcGxheU1vZGUoKTsKKyAgICBib29sIHRyYWNrSXNTZWxlY3RlZCA9IGRpc3BsYXlN
b2RlICE9IENhcHRpb25Vc2VyUHJlZmVyZW5jZXM6OkF1dG9tYXRpYyAmJiBkaXNwbGF5TW9kZSAh
PSBDYXB0aW9uVXNlclByZWZlcmVuY2VzOjpGb3JjZWRPbmx5OworCiAgICAgSFRNTE1lZGlhRWxl
bWVudCogbWVkaWFFbGVtZW50ID0gdG9QYXJlbnRNZWRpYUVsZW1lbnQodGhpcyk7CiAgICAgaWYg
KCFtZWRpYUVsZW1lbnQpCiAgICAgICAgIHJldHVybjsKIAogICAgIFRleHRUcmFja0xpc3QqIHRy
YWNrTGlzdCA9IG1lZGlhRWxlbWVudC0+dGV4dFRyYWNrcygpOwotCiAgICAgaWYgKCF0cmFja0xp
c3QgfHwgIXRyYWNrTGlzdC0+bGVuZ3RoKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICht
X3RyYWNrTGlzdEhhc0NoYW5nZWQpCi0gICAgICAgIHJlYnVpbGRUcmFja0xpc3RNZW51KCk7Cisg
ICAgcmVidWlsZFRyYWNrTGlzdE1lbnUoKTsKIAotICAgIGJvb2wgY2FwdGlvbnNWaXNpYmxlID0g
bWVkaWFFbGVtZW50LT5jbG9zZWRDYXB0aW9uc1Zpc2libGUoKTsKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwLCBsZW5ndGggPSBtX21lbnVJdGVtcy5zaXplKCk7IGkgPCBsZW5ndGg7ICsraSkgewog
ICAgICAgICBSZWZQdHI8RWxlbWVudD4gdHJhY2tJdGVtID0gbV9tZW51SXRlbXNbaV07CiAKLSAg
ICAgICAgaW50IHRyYWNrSW5kZXggPSB0cmFja0xpc3RJbmRleEZvckVsZW1lbnQodHJhY2tJdGVt
LmdldCgpKTsKLSAgICAgICAgaWYgKHRyYWNrSW5kZXggPT0gSFRNTE1lZGlhRWxlbWVudDo6dGV4
dFRyYWNrc0luZGV4Tm90Rm91bmQoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAg
IGlmICh0cmFja0luZGV4ID09IEhUTUxNZWRpYUVsZW1lbnQ6OnRleHRUcmFja3NPZmZJbmRleCgp
KSB7Ci0gICAgICAgICAgICBpZiAoY2FwdGlvbnNWaXNpYmxlKQotICAgICAgICAgICAgICAgIHRy
YWNrSXRlbS0+Y2xhc3NMaXN0KCktPnJlbW92ZShzZWxlY3RlZENsYXNzVmFsdWUsIEFTU0VSVF9O
T19FWENFUFRJT04pOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHRyYWNrSXRl
bS0+Y2xhc3NMaXN0KCktPmFkZChzZWxlY3RlZENsYXNzVmFsdWUsIEFTU0VSVF9OT19FWENFUFRJ
T04pOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQogICAgICAgICBSZWZQdHI8
VGV4dFRyYWNrPiB0ZXh0VHJhY2s7CiAgICAgICAgIE1lbnVJdGVtVG9UcmFja01hcDo6aXRlcmF0
b3IgaXRlciA9IG1fbWVudVRvVHJhY2tNYXAuZmluZCh0cmFja0l0ZW0uZ2V0KCkpOwogICAgICAg
ICBpZiAoaXRlciA9PSBtX21lbnVUb1RyYWNrTWFwLmVuZCgpKQpAQCAtODU4LDcgKzgzOCwyNCBA
QCB2b2lkIE1lZGlhQ29udHJvbENsb3NlZENhcHRpb25zVHJhY2tMaXN0CiAgICAgICAgIHRleHRU
cmFjayA9IGl0ZXItPnZhbHVlOwogICAgICAgICBpZiAoIXRleHRUcmFjaykKICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICBpZiAodGV4dFRyYWNrLT5tb2RlKCkgPT0gVGV4dFRyYWNrOjpz
aG93aW5nS2V5d29yZCgpKQorCisgICAgICAgIGlmICh0ZXh0VHJhY2sgPT0gVGV4dFRyYWNrOjpj
YXB0aW9uTWVudU9mZkl0ZW0oKSkgeworICAgICAgICAgICAgaWYgKGRpc3BsYXlNb2RlID09IENh
cHRpb25Vc2VyUHJlZmVyZW5jZXM6OkZvcmNlZE9ubHkpCisgICAgICAgICAgICAgICAgdHJhY2tJ
dGVtLT5jbGFzc0xpc3QoKS0+YWRkKHNlbGVjdGVkQ2xhc3NWYWx1ZSwgQVNTRVJUX05PX0VYQ0VQ
VElPTik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgdHJhY2tJdGVtLT5jbGFz
c0xpc3QoKS0+cmVtb3ZlKHNlbGVjdGVkQ2xhc3NWYWx1ZSwgQVNTRVJUX05PX0VYQ0VQVElPTik7
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0ZXh0VHJh
Y2sgPT0gVGV4dFRyYWNrOjpjYXB0aW9uTWVudUF1dG9tYXRpY0l0ZW0oKSkgeworICAgICAgICAg
ICAgaWYgKGRpc3BsYXlNb2RlID09IENhcHRpb25Vc2VyUHJlZmVyZW5jZXM6OkF1dG9tYXRpYykK
KyAgICAgICAgICAgICAgICB0cmFja0l0ZW0tPmNsYXNzTGlzdCgpLT5hZGQoc2VsZWN0ZWRDbGFz
c1ZhbHVlLCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICB0cmFja0l0ZW0tPmNsYXNzTGlzdCgpLT5yZW1vdmUoc2VsZWN0ZWRDbGFzc1ZhbHVl
LCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKHRyYWNrSXNTZWxlY3RlZCAmJiB0ZXh0VHJhY2stPm1vZGUoKSA9PSBU
ZXh0VHJhY2s6OnNob3dpbmdLZXl3b3JkKCkpCiAgICAgICAgICAgICB0cmFja0l0ZW0tPmNsYXNz
TGlzdCgpLT5hZGQoc2VsZWN0ZWRDbGFzc1ZhbHVlLCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgdHJhY2tJdGVtLT5jbGFzc0xpc3QoKS0+cmVtb3ZlKHNl
bGVjdGVkQ2xhc3NWYWx1ZSwgQVNTRVJUX05PX0VYQ0VQVElPTik7CkBAIC04NzIsOCArODY5LDYg
QEAgdm9pZCBNZWRpYUNvbnRyb2xDbG9zZWRDYXB0aW9uc1RyYWNrTGlzdAogICAgIC8vIFJlbW92
ZSBhbnkgZXhpc3RpbmcgY29udGVudC4KICAgICByZW1vdmVDaGlsZHJlbigpOwogICAgIG1fbWVu
dUl0ZW1zLmNsZWFyKCk7Ci0KLSAgICBtX3RyYWNrTGlzdEhhc0NoYW5nZWQgPSBmYWxzZTsKICAg
ICBtX21lbnVUb1RyYWNrTWFwLmNsZWFyKCk7CiAKICAgICBpZiAoIW1lZGlhQ29udHJvbGxlcigp
LT5oYXNDbG9zZWRDYXB0aW9ucygpKQpAQCAtODg4LDQxICs4ODMsMjYgQEAgdm9pZCBNZWRpYUNv
bnRyb2xDbG9zZWRDYXB0aW9uc1RyYWNrTGlzdAogICAgICAgICByZXR1cm47CiAKICAgICBEb2N1
bWVudCogZG9jID0gZG9jdW1lbnQoKTsKLSAgICBDYXB0aW9uVXNlclByZWZlcmVuY2VzKiBjYXB0
aW9uc1VzZXJQcmVmZXJlbmNlcyA9IGRvYy0+cGFnZSgpLT5ncm91cCgpLmNhcHRpb25QcmVmZXJl
bmNlcygpOwotICAgIFZlY3RvcjxSZWZQdHI8VGV4dFRyYWNrPiA+IHRyYWNrc0Zvck1lbnUgPSBj
YXB0aW9uc1VzZXJQcmVmZXJlbmNlcy0+c29ydGVkVHJhY2tMaXN0Rm9yTWVudSh0cmFja0xpc3Qp
OworICAgIGlmICghZG9jdW1lbnQoKS0+cGFnZSgpKQorICAgICAgICByZXR1cm47CisgICAgQ2Fw
dGlvblVzZXJQcmVmZXJlbmNlcyogY2FwdGlvblByZWZlcmVuY2VzID0gZG9jdW1lbnQoKS0+cGFn
ZSgpLT5ncm91cCgpLmNhcHRpb25QcmVmZXJlbmNlcygpOworICAgIFZlY3RvcjxSZWZQdHI8VGV4
dFRyYWNrPiA+IHRyYWNrc0Zvck1lbnUgPSBjYXB0aW9uUHJlZmVyZW5jZXMtPnNvcnRlZFRyYWNr
TGlzdEZvck1lbnUodHJhY2tMaXN0KTsKIAogICAgIFJlZlB0cjxFbGVtZW50PiBjYXB0aW9uc0hl
YWRlciA9IGRvYy0+Y3JlYXRlRWxlbWVudChoM1RhZywgQVNTRVJUX05PX0VYQ0VQVElPTik7CiAg
ICAgY2FwdGlvbnNIZWFkZXItPmFwcGVuZENoaWxkKGRvYy0+Y3JlYXRlVGV4dE5vZGUodGV4dFRy
YWNrU3VidGl0bGVzVGV4dCgpKSk7CiAgICAgYXBwZW5kQ2hpbGQoY2FwdGlvbnNIZWFkZXIpOwog
ICAgIFJlZlB0cjxFbGVtZW50PiBjYXB0aW9uc01lbnVMaXN0ID0gZG9jLT5jcmVhdGVFbGVtZW50
KHVsVGFnLCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKIAotICAgIFJlZlB0cjxFbGVtZW50PiBtZW51
SXRlbTsKLSAgICBtZW51SXRlbSA9IGRvYy0+Y3JlYXRlRWxlbWVudChsaVRhZywgQVNTRVJUX05P
X0VYQ0VQVElPTik7Ci0gICAgbWVudUl0ZW0tPmFwcGVuZENoaWxkKGRvYy0+Y3JlYXRlVGV4dE5v
ZGUodGV4dFRyYWNrT2ZmVGV4dCgpKSk7Ci0gICAgbWVudUl0ZW0tPnNldEF0dHJpYnV0ZSh0cmFj
a0luZGV4QXR0cmlidXRlTmFtZSgpLCB0ZXh0VHJhY2tzT2ZmQXR0clZhbHVlLCBBU1NFUlRfTk9f
RVhDRVBUSU9OKTsKLSAgICBjYXB0aW9uc01lbnVMaXN0LT5hcHBlbmRDaGlsZChtZW51SXRlbSk7
Ci0gICAgbV9tZW51SXRlbXMuYXBwZW5kKG1lbnVJdGVtKTsKLQogICAgIGZvciAodW5zaWduZWQg
aSA9IDAsIGxlbmd0aCA9IHRyYWNrc0Zvck1lbnUuc2l6ZSgpOyBpIDwgbGVuZ3RoOyArK2kpIHsK
ICAgICAgICAgUmVmUHRyPFRleHRUcmFjaz4gdGV4dFRyYWNrID0gdHJhY2tzRm9yTWVudVtpXTsK
LSAgICAgICAgbWVudUl0ZW0gPSBkb2MtPmNyZWF0ZUVsZW1lbnQobGlUYWcsIEFTU0VSVF9OT19F
WENFUFRJT04pOwotCi0gICAgICAgIC8vIEFkZCBhIGN1c3RvbSBhdHRyaWJ1dGUgdG8gdGhlIDxs
aT4gZWxlbWVudCB3aGljaCB3aWxsIGFsbG93Ci0gICAgICAgIC8vIHVzIHRvIGVhc2lseSBhc3Nv
Y2lhdGUgdGhlIHVzZXIgdGFwcGluZyBoZXJlIHdpdGggdGhlCi0gICAgICAgIC8vIHRyYWNrLiBT
aW5jZSB0aGlzIGxpc3QgaXMgcmVidWlsdCBpZiB0aGUgdHJhY2tzIGNoYW5nZSwgd2UKLSAgICAg
ICAgLy8gc2hvdWxkIGFsd2F5cyBiZSBpbiBzeW5jLgotICAgICAgICBtZW51SXRlbS0+c2V0QXR0
cmlidXRlKHRyYWNrSW5kZXhBdHRyaWJ1dGVOYW1lKCksIFN0cmluZzo6bnVtYmVyKGkpLCBBU1NF
UlRfTk9fRVhDRVBUSU9OKTsKLQotICAgICAgICBtZW51SXRlbS0+YXBwZW5kQ2hpbGQoZG9jLT5j
cmVhdGVUZXh0Tm9kZShjYXB0aW9uc1VzZXJQcmVmZXJlbmNlcy0+ZGlzcGxheU5hbWVGb3JUcmFj
ayh0ZXh0VHJhY2suZ2V0KCkpKSk7Ci0KKyAgICAgICAgUmVmUHRyPEVsZW1lbnQ+IG1lbnVJdGVt
ID0gZG9jLT5jcmVhdGVFbGVtZW50KGxpVGFnLCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKKyAgICAg
ICAgbWVudUl0ZW0tPmFwcGVuZENoaWxkKGRvYy0+Y3JlYXRlVGV4dE5vZGUoY2FwdGlvblByZWZl
cmVuY2VzLT5kaXNwbGF5TmFtZUZvclRyYWNrKHRleHRUcmFjay5nZXQoKSkpKTsKICAgICAgICAg
Y2FwdGlvbnNNZW51TGlzdC0+YXBwZW5kQ2hpbGQobWVudUl0ZW0pOwogICAgICAgICBtX21lbnVJ
dGVtcy5hcHBlbmQobWVudUl0ZW0pOwogICAgICAgICBtX21lbnVUb1RyYWNrTWFwLmFkZChtZW51
SXRlbSwgdGV4dFRyYWNrKTsKICAgICB9CiAKICAgICBhcHBlbmRDaGlsZChjYXB0aW9uc01lbnVM
aXN0KTsKLQotICAgIHVwZGF0ZURpc3BsYXkoKTsKICNlbmRpZgogfQogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmgJKHJldmlz
aW9uIDE0NzQ5OSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVs
ZW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwNyw3ICszMDcsNiBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCBib29sIHdpbGxSZXNwb25kVG9Nb3VzZUNsaWNrRXZlbnRzKCkgT1ZFUlJJREUgeyBy
ZXR1cm4gdHJ1ZTsgfQogCiAgICAgdm9pZCB1cGRhdGVEaXNwbGF5KCk7Ci0gICAgdm9pZCByZXNl
dFRyYWNrTGlzdE1lbnUoKSB7IG1fdHJhY2tMaXN0SGFzQ2hhbmdlZCA9IHRydWU7IH0KIAogcHJp
dmF0ZToKICAgICBNZWRpYUNvbnRyb2xDbG9zZWRDYXB0aW9uc1RyYWNrTGlzdEVsZW1lbnQoRG9j
dW1lbnQqLCBNZWRpYUNvbnRyb2xzKik7CkBAIC0zMjQsNyArMzIzLDYgQEAgcHJpdmF0ZToKICAg
ICBNZW51SXRlbVRvVHJhY2tNYXAgbV9tZW51VG9UcmFja01hcDsKICNlbmRpZgogICAgIE1lZGlh
Q29udHJvbHMqIG1fY29udHJvbHM7Ci0gICAgYm9vbCBtX3RyYWNrTGlzdEhhc0NoYW5nZWQ7CiB9
OwogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xzQXBwbGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbHNBcHBsZS5jcHAJKHJldmlzaW9uIDE0
NzQ5OSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbHNBcHBsZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMwNSw4ICszMDUsOSBAQCB2b2lkIE1lZGlhQ29udHJvbHNB
cHBsZTo6bWFrZVRyYW5zcGFyZW50CiB2b2lkIE1lZGlhQ29udHJvbHNBcHBsZTo6Y2hhbmdlZENs
b3NlZENhcHRpb25zVmlzaWJpbGl0eSgpCiB7CiAgICAgTWVkaWFDb250cm9sczo6Y2hhbmdlZENs
b3NlZENhcHRpb25zVmlzaWJpbGl0eSgpOwotICAgIGlmIChtX2Nsb3NlZENhcHRpb25zVHJhY2tM
aXN0KQotICAgICAgICBtX2Nsb3NlZENhcHRpb25zVHJhY2tMaXN0LT5yZXNldFRyYWNrTGlzdE1l
bnUoKTsKKyAgICBpZiAobV9jbG9zZWRDYXB0aW9uc0NvbnRhaW5lciAmJiBtX2Nsb3NlZENhcHRp
b25zQ29udGFpbmVyLT5pc1Nob3dpbmcoKSkKKyAgICAgICAgbV9jbG9zZWRDYXB0aW9uc0NvbnRh
aW5lci0+aGlkZSgpOworCiB9CiAKIHZvaWQgTWVkaWFDb250cm9sc0FwcGxlOjpyZXNldCgpCkBA
IC0zNDAsMTEgKzM0MSw5IEBAIHZvaWQgTWVkaWFDb250cm9sc0FwcGxlOjpyZXNldCgpCiAgICAg
ICAgIG1fdm9sdW1lU2xpZGVyLT5zZXRWb2x1bWUobV9tZWRpYUNvbnRyb2xsZXItPnZvbHVtZSgp
KTsKIAogICAgIGlmIChtX3RvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uKSB7Ci0gICAgICAgIGlm
IChtX21lZGlhQ29udHJvbGxlci0+aGFzQ2xvc2VkQ2FwdGlvbnMoKSkgeworICAgICAgICBpZiAo
bV9tZWRpYUNvbnRyb2xsZXItPmhhc0Nsb3NlZENhcHRpb25zKCkpCiAgICAgICAgICAgICBtX3Rv
Z2dsZUNsb3NlZENhcHRpb25zQnV0dG9uLT5zaG93KCk7Ci0gICAgICAgICAgICBpZiAobV9jbG9z
ZWRDYXB0aW9uc1RyYWNrTGlzdCkKLSAgICAgICAgICAgICAgICBtX2Nsb3NlZENhcHRpb25zVHJh
Y2tMaXN0LT5yZXNldFRyYWNrTGlzdE1lbnUoKTsKLSAgICAgICAgfSBlbHNlCisgICAgICAgIGVs
c2UKICAgICAgICAgICAgIG1fdG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b24tPmhpZGUoKTsKICAg
ICB9CiAKQEAgLTUxMCw4ICs1MDksNiBAQCB2b2lkIE1lZGlhQ29udHJvbHNBcHBsZTo6dG9nZ2xl
Q2xvc2VkQ2FwCiAKIHZvaWQgTWVkaWFDb250cm9sc0FwcGxlOjpjbG9zZWRDYXB0aW9uVHJhY2tz
Q2hhbmdlZCgpCiB7Ci0gICAgaWYgKG1fY2xvc2VkQ2FwdGlvbnNUcmFja0xpc3QpCi0gICAgICAg
IG1fY2xvc2VkQ2FwdGlvbnNUcmFja0xpc3QtPnJlc2V0VHJhY2tMaXN0TWVudSgpOwogICAgIGlm
IChtX3RvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uKSB7CiAgICAgICAgIGlmIChtX21lZGlhQ29u
dHJvbGxlci0+aGFzQ2xvc2VkQ2FwdGlvbnMoKSkKICAgICAgICAgICAgIG1fdG9nZ2xlQ2xvc2Vk
Q2FwdGlvbnNCdXR0b24tPnNob3coKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2sv
VGV4dFRyYWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1Rl
eHRUcmFjay5jcHAJKHJldmlzaW9uIDE0NzQ5OSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJh
Y2svVGV4dFRyYWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTUsNiArOTUsMTggQEAgY29uc3Qg
QXRvbWljU3RyaW5nJiBUZXh0VHJhY2s6OnNob3dpbmdLZQogICAgIHJldHVybiBlbmRlZDsKIH0K
IAorVGV4dFRyYWNrKiBUZXh0VHJhY2s6OmNhcHRpb25NZW51T2ZmSXRlbSgpCit7CisgICAgREVG
SU5FX1NUQVRJQ19MT0NBTChSZWZQdHI8VGV4dFRyYWNrPiwgb2ZmLCAoVGV4dFRyYWNrOjpjcmVh
dGUoMCwgMCwgIm9mZiBtZW51IGl0ZW0iLCAiIiwgIiIpKSk7CisgICAgcmV0dXJuIG9mZi5nZXQo
KTsKK30KKworVGV4dFRyYWNrKiBUZXh0VHJhY2s6OmNhcHRpb25NZW51QXV0b21hdGljSXRlbSgp
Cit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChSZWZQdHI8VGV4dFRyYWNrPiwgYXV0b21hdGlj
LCAoVGV4dFRyYWNrOjpjcmVhdGUoMCwgMCwgImF1dG9tYXRpYyBtZW51IGl0ZW0iLCAiIiwgIiIp
KSk7CisgICAgcmV0dXJuIGF1dG9tYXRpYy5nZXQoKTsKK30KKwogVGV4dFRyYWNrOjpUZXh0VHJh
Y2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgVGV4dFRyYWNrQ2xpZW50KiBjbGll
bnQsIGNvbnN0IEF0b21pY1N0cmluZyYga2luZCwgY29uc3QgQXRvbWljU3RyaW5nJiBsYWJlbCwg
Y29uc3QgQXRvbWljU3RyaW5nJiBsYW5ndWFnZSwgVGV4dFRyYWNrVHlwZSB0eXBlKQogICAgIDog
VHJhY2tCYXNlKGNvbnRleHQsIFRyYWNrQmFzZTo6VGV4dFRyYWNrKQogICAgICwgbV9jdWVzKDAp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFjay5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrLmgJKHJldmlzaW9uIDE0NzQ5
OSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTczLDYgKzczLDkgQEAgcHVibGljOgogICAgIH0KICAgICB2aXJ0dWFsIH5UZXh0VHJh
Y2soKTsKIAorICAgIHN0YXRpYyBUZXh0VHJhY2sqIGNhcHRpb25NZW51T2ZmSXRlbSgpOworICAg
IHN0YXRpYyBUZXh0VHJhY2sqIGNhcHRpb25NZW51QXV0b21hdGljSXRlbSgpOworCiAgICAgdm9p
ZCBzZXRNZWRpYUVsZW1lbnQoSFRNTE1lZGlhRWxlbWVudCogZWxlbWVudCkgeyBtX21lZGlhRWxl
bWVudCA9IGVsZW1lbnQ7IH0KICAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQoKSB7
IHJldHVybiBtX21lZGlhRWxlbWVudDsgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0Nh
cHRpb25Vc2VyUHJlZmVyZW5jZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bh
Z2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlcy5jcHAJKHJldmlzaW9uIDE0NzQ5OSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlcy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM4LDEwICszOCwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIENhcHRpb25Vc2VyUHJl
ZmVyZW5jZXM6OkNhcHRpb25Vc2VyUHJlZmVyZW5jZXMoUGFnZUdyb3VwKiBncm91cCkKICAgICA6
IG1fcGFnZUdyb3VwKGdyb3VwKQorICAgICwgbV9kaXNwbGF5TW9kZShBbHdheXNPbikKICAgICAs
IG1fdGltZXIodGhpcywgJkNhcHRpb25Vc2VyUHJlZmVyZW5jZXM6OnRpbWVyRmlyZWQpCiAgICAg
LCBtX3Rlc3RpbmdNb2RlKGZhbHNlKQogICAgICwgbV9oYXZlUHJlZmVyZW5jZXMoZmFsc2UpCi0g
ICAgLCBtX3Nob3VsZFNob3dDYXB0aW9ucyhmYWxzZSkKIHsKIH0KIApAQCAtNDksMTQgKzQ5LDYg
QEAgQ2FwdGlvblVzZXJQcmVmZXJlbmNlczo6fkNhcHRpb25Vc2VyUHJlZgogewogfQogCi1ib29s
IENhcHRpb25Vc2VyUHJlZmVyZW5jZXM6OnNob3VsZFNob3dDYXB0aW9ucygpIGNvbnN0Ci17Ci0g
ICAgaWYgKCFtX3Rlc3RpbmdNb2RlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAg
cmV0dXJuIG1fc2hvdWxkU2hvd0NhcHRpb25zIHx8IHVzZXJQcmVmZXJzQ2FwdGlvbnMoKSB8fCB1
c2VyUHJlZmVyc1N1YnRpdGxlcygpOwotfQotCiB2b2lkIENhcHRpb25Vc2VyUHJlZmVyZW5jZXM6
OnRpbWVyRmlyZWQoVGltZXI8Q2FwdGlvblVzZXJQcmVmZXJlbmNlcz4qKQogewogICAgIGNhcHRp
b25QcmVmZXJlbmNlc0NoYW5nZWQoKTsKQEAgLTcyLDEwICs2NCwxNSBAQCB2b2lkIENhcHRpb25V
c2VyUHJlZmVyZW5jZXM6Om5vdGlmeSgpCiAgICAgICAgIG1fdGltZXIuc3RhcnRPbmVTaG90KDAp
OwogfQogCi12b2lkIENhcHRpb25Vc2VyUHJlZmVyZW5jZXM6OnNldFNob3VsZFNob3dDYXB0aW9u
cyhib29sIHByZWZlcmVuY2UpCitDYXB0aW9uVXNlclByZWZlcmVuY2VzOjpDYXB0aW9uRGlzcGxh
eU1vZGUgQ2FwdGlvblVzZXJQcmVmZXJlbmNlczo6Y2FwdGlvbkRpc3BsYXlNb2RlKCkgY29uc3QK
IHsKLSAgICBtX3Nob3VsZFNob3dDYXB0aW9ucyA9IHByZWZlcmVuY2U7Ci0gICAgaWYgKG1fdGVz
dGluZ01vZGUgJiYgIXByZWZlcmVuY2UpIHsKKyAgICByZXR1cm4gbV9kaXNwbGF5TW9kZTsKK30K
Kwordm9pZCBDYXB0aW9uVXNlclByZWZlcmVuY2VzOjpzZXRDYXB0aW9uRGlzcGxheU1vZGUoQ2Fw
dGlvblVzZXJQcmVmZXJlbmNlczo6Q2FwdGlvbkRpc3BsYXlNb2RlIG1vZGUpCit7CisgICAgbV9k
aXNwbGF5TW9kZSA9IG1vZGU7CisgICAgaWYgKG1fdGVzdGluZ01vZGUgJiYgbW9kZSAhPSBBbHdh
eXNPbikgewogICAgICAgICBzZXRVc2VyUHJlZmVyc0NhcHRpb25zKGZhbHNlKTsKICAgICAgICAg
c2V0VXNlclByZWZlcnNTdWJ0aXRsZXMoZmFsc2UpOwogICAgIH0KQEAgLTE1Myw3ICsxNTAsNyBA
QCBWZWN0b3I8U3RyaW5nPiBDYXB0aW9uVXNlclByZWZlcmVuY2VzOjpwCiAgICAgcmV0dXJuIGxh
bmd1YWdlczsKIH0KIAotdm9pZCBDYXB0aW9uVXNlclByZWZlcmVuY2VzOjpzZXRQcmVmZXJyZWRM
YW5ndWFnZShTdHJpbmcgbGFuZ3VhZ2UpCit2b2lkIENhcHRpb25Vc2VyUHJlZmVyZW5jZXM6OnNl
dFByZWZlcnJlZExhbmd1YWdlKGNvbnN0IFN0cmluZyYgbGFuZ3VhZ2UpCiB7CiAgICAgbV91c2Vy
UHJlZmVycmVkTGFuZ3VhZ2UgPSBsYW5ndWFnZTsKICAgICBub3RpZnkoKTsKQEAgLTE5OCwyOCAr
MTk1LDMwIEBAIGludCBDYXB0aW9uVXNlclByZWZlcmVuY2VzOjp0ZXh0VHJhY2tTZWwKIAogICAg
IGlmICh0cmFjay0+a2luZCgpICE9IFRleHRUcmFjazo6Y2FwdGlvbnNLZXl3b3JkKCkgJiYgdHJh
Y2stPmtpbmQoKSAhPSBUZXh0VHJhY2s6OnN1YnRpdGxlc0tleXdvcmQoKSkKICAgICAgICAgcmV0
dXJuIHRyYWNrU2NvcmU7Ci0KKyAgICAKKyAgICBpZiAoIXVzZXJQcmVmZXJzU3VidGl0bGVzKCkg
JiYgIXVzZXJQcmVmZXJzQ2FwdGlvbnMoKSkKKyAgICAgICAgcmV0dXJuIHRyYWNrU2NvcmU7Cisg
ICAgCiAgICAgaWYgKHRyYWNrLT5raW5kKCkgPT0gVGV4dFRyYWNrOjpzdWJ0aXRsZXNLZXl3b3Jk
KCkgJiYgdXNlclByZWZlcnNTdWJ0aXRsZXMoKSkKICAgICAgICAgdHJhY2tTY29yZSA9IDE7CiAg
ICAgZWxzZSBpZiAodHJhY2stPmtpbmQoKSA9PSBUZXh0VHJhY2s6OmNhcHRpb25zS2V5d29yZCgp
ICYmIHVzZXJQcmVmZXJzQ2FwdGlvbnMoKSkKICAgICAgICAgdHJhY2tTY29yZSA9IDE7CiAgICAg
Ci0gICAgcmV0dXJuIHRyYWNrU2NvcmUgKyB0ZXh0VHJhY2tMYW5ndWFnZVNlbGVjdGlvblNjb3Jl
KHRyYWNrKTsKKyAgICByZXR1cm4gdHJhY2tTY29yZSArIHRleHRUcmFja0xhbmd1YWdlU2VsZWN0
aW9uU2NvcmUodHJhY2ssIHByZWZlcnJlZExhbmd1YWdlcygpKTsKIH0KIAotaW50IENhcHRpb25V
c2VyUHJlZmVyZW5jZXM6OnRleHRUcmFja0xhbmd1YWdlU2VsZWN0aW9uU2NvcmUoVGV4dFRyYWNr
KiB0cmFjaykgY29uc3QKK2ludCBDYXB0aW9uVXNlclByZWZlcmVuY2VzOjp0ZXh0VHJhY2tMYW5n
dWFnZVNlbGVjdGlvblNjb3JlKFRleHRUcmFjayogdHJhY2ssIGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiBwcmVmZXJyZWRMYW5ndWFnZXMpIGNvbnN0CiB7CiAgICAgaWYgKHRyYWNrLT5sYW5ndWFnZSgp
LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBWZWN0b3I8U3RyaW5nPiBsYW5n
dWFnZXMgPSBwcmVmZXJyZWRMYW5ndWFnZXMoKTsKLSAgICBzaXplX3QgbGFuZ3VhZ2VNYXRjaElu
ZGV4ID0gaW5kZXhPZkJlc3RNYXRjaGluZ0xhbmd1YWdlSW5MaXN0KHRyYWNrLT5sYW5ndWFnZSgp
LCBsYW5ndWFnZXMpOwotICAgIGlmIChsYW5ndWFnZU1hdGNoSW5kZXggPj0gbGFuZ3VhZ2VzLnNp
emUoKSkKKyAgICBzaXplX3QgbGFuZ3VhZ2VNYXRjaEluZGV4ID0gaW5kZXhPZkJlc3RNYXRjaGlu
Z0xhbmd1YWdlSW5MaXN0KHRyYWNrLT5sYW5ndWFnZSgpLCBwcmVmZXJyZWRMYW5ndWFnZXMpOwor
ICAgIGlmIChsYW5ndWFnZU1hdGNoSW5kZXggPj0gcHJlZmVycmVkTGFuZ3VhZ2VzLnNpemUoKSkK
ICAgICAgICAgcmV0dXJuIDA7CiAKICAgICAvLyBNYXRjaGluZyBhIHRyYWNrIGxhbmd1YWdlIGlz
IG1vcmUgaW1wb3J0YW50IHRoYW4gbWF0Y2hpbmcgdHJhY2sgdHlwZSwgc28gdGhpcyBtdWx0aXBs
aWVyIG11c3QgYmUKICAgICAvLyBncmVhdGVyIHRoYW4gdGhlIG1heGltdW0gdmFsdWUgcmV0dXJu
ZWQgYnkgdGV4dFRyYWNrU2VsZWN0aW9uU2NvcmUuCi0gICAgcmV0dXJuIChsYW5ndWFnZXMuc2l6
ZSgpIC0gbGFuZ3VhZ2VNYXRjaEluZGV4KSAqIDEwOworICAgIHJldHVybiAocHJlZmVycmVkTGFu
Z3VhZ2VzLnNpemUoKSAtIGxhbmd1YWdlTWF0Y2hJbmRleCkgKiAxMDsKIH0KIAogfQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGFnZS9DYXB0aW9uVXNlclByZWZlcmVuY2VzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGFnZS9DYXB0aW9uVXNlclByZWZlcmVuY2VzLmgJKHJldmlzaW9u
IDE0NzQ5OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC00NiwxMiArNDYsMTYgQEAgcHVibGljOgogICAgIHN0YXRpYyBQ
YXNzT3duUHRyPENhcHRpb25Vc2VyUHJlZmVyZW5jZXM+IGNyZWF0ZShQYWdlR3JvdXAqIGdyb3Vw
KSB7IHJldHVybiBhZG9wdFB0cihuZXcgQ2FwdGlvblVzZXJQcmVmZXJlbmNlcyhncm91cCkpOyB9
CiAgICAgdmlydHVhbCB+Q2FwdGlvblVzZXJQcmVmZXJlbmNlcygpOwogCi0gICAgdmlydHVhbCBi
b29sIHVzZXJIYXNDYXB0aW9uUHJlZmVyZW5jZXMoKSBjb25zdCB7IHJldHVybiBtX3Rlc3RpbmdN
b2RlICYmIG1faGF2ZVByZWZlcmVuY2VzOyB9Ci0gICAgdmlydHVhbCBib29sIHNob3VsZFNob3dD
YXB0aW9ucygpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBzZXRTaG91bGRTaG93Q2FwdGlvbnMo
Ym9vbCk7CisgICAgZW51bSBDYXB0aW9uRGlzcGxheU1vZGUgeworICAgICAgICBBdXRvbWF0aWMs
CisgICAgICAgIEZvcmNlZE9ubHksCisgICAgICAgIEFsd2F5c09uCisgICAgfTsKKyAgICB2aXJ0
dWFsIENhcHRpb25EaXNwbGF5TW9kZSBjYXB0aW9uRGlzcGxheU1vZGUoKSBjb25zdDsKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0Q2FwdGlvbkRpc3BsYXlNb2RlKENhcHRpb25EaXNwbGF5TW9kZSk7CiAK
ICAgICB2aXJ0dWFsIGludCB0ZXh0VHJhY2tTZWxlY3Rpb25TY29yZShUZXh0VHJhY2sqLCBIVE1M
TWVkaWFFbGVtZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgdGV4dFRyYWNrTGFuZ3VhZ2VT
ZWxlY3Rpb25TY29yZShUZXh0VHJhY2sqKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCB0ZXh0VHJh
Y2tMYW5ndWFnZVNlbGVjdGlvblNjb3JlKFRleHRUcmFjayosIGNvbnN0IFZlY3RvcjxTdHJpbmc+
JikgY29uc3Q7CiAKICAgICB2aXJ0dWFsIGJvb2wgdXNlclByZWZlcnNDYXB0aW9ucygpIGNvbnN0
OwogICAgIHZpcnR1YWwgdm9pZCBzZXRVc2VyUHJlZmVyc0NhcHRpb25zKGJvb2wpOwpAQCAtNjks
NyArNzMsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgY2FwdGlvblByZWZlcmVuY2Vz
Q2hhbmdlZCgpOwogCi0gICAgdmlydHVhbCB2b2lkIHNldFByZWZlcnJlZExhbmd1YWdlKFN0cmlu
Zyk7CisgICAgdmlydHVhbCB2b2lkIHNldFByZWZlcnJlZExhbmd1YWdlKGNvbnN0IFN0cmluZyYp
OwogICAgIHZpcnR1YWwgVmVjdG9yPFN0cmluZz4gcHJlZmVycmVkTGFuZ3VhZ2VzKCkgY29uc3Q7
CiAKICAgICB2aXJ0dWFsIFN0cmluZyBkaXNwbGF5TmFtZUZvclRyYWNrKFRleHRUcmFjayopIGNv
bnN0OwpAQCAtNzcsNiArODEsOSBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGJvb2wgdGVzdGlu
Z01vZGUoKSBjb25zdCB7IHJldHVybiBtX3Rlc3RpbmdNb2RlOyB9CiAgICAgdmlydHVhbCB2b2lk
IHNldFRlc3RpbmdNb2RlKGJvb2wgb3ZlcnJpZGUpIHsgbV90ZXN0aW5nTW9kZSA9IG92ZXJyaWRl
OyB9CisgICAgCisgICAgdm9pZCBzZXRQcmltYXJ5QXVkaW9UcmFja0xhbmd1YWdlT3ZlcnJpZGUo
Y29uc3QgU3RyaW5nJiBsYW5ndWFnZSkgeyBtX3ByaW1hcnlBdWRpb1RyYWNrTGFuZ3VhZ2VPdmVy
cmlkZSA9IGxhbmd1YWdlOyAgfQorICAgIFN0cmluZyBwcmltYXJ5QXVkaW9UcmFja0xhbmd1YWdl
T3ZlcnJpZGUoKSBjb25zdCB7IHJldHVybiBtX3ByaW1hcnlBdWRpb1RyYWNrTGFuZ3VhZ2VPdmVy
cmlkZTsgfQogCiAgICAgUGFnZUdyb3VwKiBwYWdlR3JvdXAoKSBjb25zdCB7IHJldHVybiBtX3Bh
Z2VHcm91cDsgfQogCkBAIC04OCwxMSArOTUsMTIgQEAgcHJpdmF0ZToKICAgICB2b2lkIG5vdGlm
eSgpOwogCiAgICAgUGFnZUdyb3VwKiBtX3BhZ2VHcm91cDsKKyAgICBDYXB0aW9uRGlzcGxheU1v
ZGUgbV9kaXNwbGF5TW9kZTsKICAgICBUaW1lcjxDYXB0aW9uVXNlclByZWZlcmVuY2VzPiBtX3Rp
bWVyOwogICAgIFN0cmluZyBtX3VzZXJQcmVmZXJyZWRMYW5ndWFnZTsKKyAgICBTdHJpbmcgbV9w
cmltYXJ5QXVkaW9UcmFja0xhbmd1YWdlT3ZlcnJpZGU7CiAgICAgYm9vbCBtX3Rlc3RpbmdNb2Rl
OwogICAgIGJvb2wgbV9oYXZlUHJlZmVyZW5jZXM7Ci0gICAgYm9vbCBtX3Nob3VsZFNob3dDYXB0
aW9uczsKIH07CiAgICAgCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0NhcHRpb25Vc2Vy
UHJlZmVyZW5jZXNNYWMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0NhcHRp
b25Vc2VyUHJlZmVyZW5jZXNNYWMuaAkocmV2aXNpb24gMTQ3NDk5KQorKysgU291cmNlL1dlYkNv
cmUvcGFnZS9DYXB0aW9uVXNlclByZWZlcmVuY2VzTWFjLmgJKHdvcmtpbmcgY29weSkKQEAgLTQx
LDkgKzQxLDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgfkNhcHRpb25Vc2VyUHJlZmVyZW5jZXNN
YWMoKTsKIAogI2lmIEhBVkUoTUVESUFfQUNDRVNTSUJJTElUWV9GUkFNRVdPUkspCi0gICAgdmly
dHVhbCBib29sIHVzZXJIYXNDYXB0aW9uUHJlZmVyZW5jZXMoKSBjb25zdCBPVkVSUklERTsKLSAg
ICB2aXJ0dWFsIGJvb2wgc2hvdWxkU2hvd0NhcHRpb25zKCkgY29uc3QgT1ZFUlJJREU7Ci0gICAg
dmlydHVhbCB2b2lkIHNldFNob3VsZFNob3dDYXB0aW9ucyhib29sKSBPVkVSUklERTsKKyAgICB2
aXJ0dWFsIENhcHRpb25EaXNwbGF5TW9kZSBjYXB0aW9uRGlzcGxheU1vZGUoKSBjb25zdCBPVkVS
UklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q2FwdGlvbkRpc3BsYXlNb2RlKENhcHRpb25EaXNw
bGF5TW9kZSkgT1ZFUlJJREU7CiAKICAgICB2aXJ0dWFsIGJvb2wgdXNlclByZWZlcnNDYXB0aW9u
cygpIGNvbnN0IE9WRVJSSURFOwogICAgIHZpcnR1YWwgYm9vbCB1c2VyUHJlZmVyc1N1YnRpdGxl
cygpIGNvbnN0IE9WRVJSSURFOwpAQCAtNTMsNyArNTIsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0
dWFsIHZvaWQgc2V0SW50ZXJlc3RlZEluQ2FwdGlvblByZWZlcmVuY2VDaGFuZ2VzKCkgT1ZFUlJJ
REU7CiAKLSAgICB2aXJ0dWFsIHZvaWQgc2V0UHJlZmVycmVkTGFuZ3VhZ2UoU3RyaW5nKSBPVkVS
UklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UHJlZmVycmVkTGFuZ3VhZ2UoY29uc3QgU3RyaW5n
JikgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBWZWN0b3I8U3RyaW5nPiBwcmVmZXJyZWRMYW5ndWFn
ZXMoKSBjb25zdCBPVkVSUklERTsKIAogICAgIHZpcnR1YWwgdm9pZCBjYXB0aW9uUHJlZmVyZW5j
ZXNDaGFuZ2VkKCkgT1ZFUlJJREU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0NhcHRpb25V
c2VyUHJlZmVyZW5jZXNNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9D
YXB0aW9uVXNlclByZWZlcmVuY2VzTWFjLm1tCShyZXZpc2lvbiAxNDc0OTkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wYWdlL0NhcHRpb25Vc2VyUHJlZmVyZW5jZXNNYWMubW0JKHdvcmtpbmcgY29weSkK
QEAgLTYwLDggKzYwLDggQEAKIAogU09GVF9MSU5LX0ZSQU1FV09SS19PUFRJT05BTChNZWRpYUFj
Y2Vzc2liaWxpdHkpCiAKLVNPRlRfTElOSyhNZWRpYUFjY2Vzc2liaWxpdHksIE1BQ2FwdGlvbkFw
cGVhcmFuY2VHZXRTaG93Q2FwdGlvbnMsIGJvb2wsIChNQUNhcHRpb25BcHBlYXJhbmNlRG9tYWlu
IGRvbWFpbiksIChkb21haW4pKQotU09GVF9MSU5LKE1lZGlhQWNjZXNzaWJpbGl0eSwgTUFDYXB0
aW9uQXBwZWFyYW5jZVNldFNob3dDYXB0aW9ucywgdm9pZCwgKE1BQ2FwdGlvbkFwcGVhcmFuY2VE
b21haW4gZG9tYWluLCBib29sIHNob3dDYXB0aW9ucyksIChkb21haW4sIHNob3dDYXB0aW9ucykp
CitTT0ZUX0xJTksoTWVkaWFBY2Nlc3NpYmlsaXR5LCBNQUNhcHRpb25BcHBlYXJhbmNlR2V0RGlz
cGxheVR5cGUsIE1BQ2FwdGlvbkFwcGVhcmFuY2VEaXNwbGF5VHlwZSwgKE1BQ2FwdGlvbkFwcGVh
cmFuY2VEb21haW4gZG9tYWluKSwgKGRvbWFpbikpCitTT0ZUX0xJTksoTWVkaWFBY2Nlc3NpYmls
aXR5LCBNQUNhcHRpb25BcHBlYXJhbmNlU2V0RGlzcGxheVR5cGUsIHZvaWQsIChNQUNhcHRpb25B
cHBlYXJhbmNlRG9tYWluIGRvbWFpbiwgTUFDYXB0aW9uQXBwZWFyYW5jZURpc3BsYXlUeXBlIGRp
c3BsYXlUeXBlKSwgKGRvbWFpbiwgZGlzcGxheVR5cGUpKQogU09GVF9MSU5LKE1lZGlhQWNjZXNz
aWJpbGl0eSwgTUFDYXB0aW9uQXBwZWFyYW5jZUNvcHlGb3JlZ3JvdW5kQ29sb3IsIENHQ29sb3JS
ZWYsIChNQUNhcHRpb25BcHBlYXJhbmNlRG9tYWluIGRvbWFpbiwgTUFDYXB0aW9uQXBwZWFyYW5j
ZUJlaGF2aW9yICpiZWhhdmlvciksIChkb21haW4sIGJlaGF2aW9yKSkKIFNPRlRfTElOSyhNZWRp
YUFjY2Vzc2liaWxpdHksIE1BQ2FwdGlvbkFwcGVhcmFuY2VDb3B5QmFja2dyb3VuZENvbG9yLCBD
R0NvbG9yUmVmLCAoTUFDYXB0aW9uQXBwZWFyYW5jZURvbWFpbiBkb21haW4sIE1BQ2FwdGlvbkFw
cGVhcmFuY2VCZWhhdmlvciAqYmVoYXZpb3IpLCAoZG9tYWluLCBiZWhhdmlvcikpCiBTT0ZUX0xJ
TksoTWVkaWFBY2Nlc3NpYmlsaXR5LCBNQUNhcHRpb25BcHBlYXJhbmNlQ29weVdpbmRvd0NvbG9y
LCBDR0NvbG9yUmVmLCAoTUFDYXB0aW9uQXBwZWFyYW5jZURvbWFpbiBkb21haW4sIE1BQ2FwdGlv
bkFwcGVhcmFuY2VCZWhhdmlvciAqYmVoYXZpb3IpLCAoZG9tYWluLCBiZWhhdmlvcikpCkBAIC0x
MTYsMjIgKzExNiw1NyBAQCBDYXB0aW9uVXNlclByZWZlcmVuY2VzTWFjOjp+Q2FwdGlvblVzZXJQ
CiAKICNpZiBIQVZFKE1FRElBX0FDQ0VTU0lCSUxJVFlfRlJBTUVXT1JLKQogCi1ib29sIENhcHRp
b25Vc2VyUHJlZmVyZW5jZXNNYWM6OnNob3VsZFNob3dDYXB0aW9ucygpIGNvbnN0CitDYXB0aW9u
VXNlclByZWZlcmVuY2VzOjpDYXB0aW9uRGlzcGxheU1vZGUgQ2FwdGlvblVzZXJQcmVmZXJlbmNl
c01hYzo6Y2FwdGlvbkRpc3BsYXlNb2RlKCkgY29uc3QKIHsKICAgICBpZiAodGVzdGluZ01vZGUo
KSB8fCAhTWVkaWFBY2Nlc3NpYmlsaXR5TGlicmFyeSgpKQotICAgICAgICByZXR1cm4gQ2FwdGlv
blVzZXJQcmVmZXJlbmNlczo6c2hvdWxkU2hvd0NhcHRpb25zKCk7CisgICAgICAgIHJldHVybiBD
YXB0aW9uVXNlclByZWZlcmVuY2VzOjpjYXB0aW9uRGlzcGxheU1vZGUoKTsKIAotICAgIHJldHVy
biBNQUNhcHRpb25BcHBlYXJhbmNlR2V0U2hvd0NhcHRpb25zKGtNQUNhcHRpb25BcHBlYXJhbmNl
RG9tYWluVXNlcik7Ci19CisgICAgTUFDYXB0aW9uQXBwZWFyYW5jZURpc3BsYXlUeXBlIGRpc3Bs
YXlUeXBlID0gTUFDYXB0aW9uQXBwZWFyYW5jZUdldERpc3BsYXlUeXBlKGtNQUNhcHRpb25BcHBl
YXJhbmNlRG9tYWluVXNlcik7CisgICAgc3dpdGNoIChkaXNwbGF5VHlwZSkgeworICAgIGNhc2Ug
a01BQ2FwdGlvbkFwcGVhcmFuY2VEaXNwbGF5VHlwZUZvcmNlZE9ubHk6CisgICAgICAgIHJldHVy
biBGb3JjZWRPbmx5OworICAgICAgICBicmVhazsKKworICAgIGNhc2Uga01BQ2FwdGlvbkFwcGVh
cmFuY2VEaXNwbGF5VHlwZUF1dG9tYXRpYzoKKyAgICAgICAgcmV0dXJuIEF1dG9tYXRpYzsKKyAg
ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIGtNQUNhcHRpb25BcHBlYXJhbmNlRGlzcGxheVR5cGVB
bHdheXNPbjoKKyAgICAgICAgcmV0dXJuIEFsd2F5c09uOworICAgICAgICBicmVhazsKKworICAg
IGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgfQogCi12b2lkIENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNYWM6OnNldFNob3VsZFNo
b3dDYXB0aW9ucyhib29sIHByZWZlcmVuY2UpCisgICAgcmV0dXJuIEZvcmNlZE9ubHk7Cit9Cisg
ICAgCit2b2lkIENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNYWM6OnNldENhcHRpb25EaXNwbGF5TW9k
ZShDYXB0aW9uVXNlclByZWZlcmVuY2VzOjpDYXB0aW9uRGlzcGxheU1vZGUgbW9kZSkKIHsKICAg
ICBpZiAodGVzdGluZ01vZGUoKSB8fCAhTWVkaWFBY2Nlc3NpYmlsaXR5TGlicmFyeSgpKSB7Ci0g
ICAgICAgIENhcHRpb25Vc2VyUHJlZmVyZW5jZXM6OnNldFNob3VsZFNob3dDYXB0aW9ucyhwcmVm
ZXJlbmNlKTsKKyAgICAgICAgQ2FwdGlvblVzZXJQcmVmZXJlbmNlczo6c2V0Q2FwdGlvbkRpc3Bs
YXlNb2RlKG1vZGUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgTUFDYXB0aW9uQXBw
ZWFyYW5jZVNldFNob3dDYXB0aW9ucyhrTUFDYXB0aW9uQXBwZWFyYW5jZURvbWFpblVzZXIsIHBy
ZWZlcmVuY2UpOworICAgIE1BQ2FwdGlvbkFwcGVhcmFuY2VEaXNwbGF5VHlwZSBkaXNwbGF5VHlw
ZSA9IGtNQUNhcHRpb25BcHBlYXJhbmNlRGlzcGxheVR5cGVGb3JjZWRPbmx5OworICAgIHN3aXRj
aCAobW9kZSkgeworICAgICAgICBjYXNlIEF1dG9tYXRpYzoKKyAgICAgICAgICAgIGRpc3BsYXlU
eXBlID0ga01BQ2FwdGlvbkFwcGVhcmFuY2VEaXNwbGF5VHlwZUF1dG9tYXRpYzsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIEZvcmNlZE9ubHk6CisgICAgICAgICAgICBkaXNwbGF5
VHlwZSA9IGtNQUNhcHRpb25BcHBlYXJhbmNlRGlzcGxheVR5cGVGb3JjZWRPbmx5OworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQWx3YXlzT246CisgICAgICAgICAgICBkaXNwbGF5
VHlwZSA9IGtNQUNhcHRpb25BcHBlYXJhbmNlRGlzcGxheVR5cGVBbHdheXNPbjsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBNQUNhcHRpb25BcHBlYXJh
bmNlU2V0RGlzcGxheVR5cGUoa01BQ2FwdGlvbkFwcGVhcmFuY2VEb21haW5Vc2VyLCBkaXNwbGF5
VHlwZSk7CiB9CiAKIGJvb2wgQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01hYzo6dXNlclByZWZlcnND
YXB0aW9ucygpIGNvbnN0CkBAIC0xNTQsMTQgKzE4OSw2IEBAIGJvb2wgQ2FwdGlvblVzZXJQcmVm
ZXJlbmNlc01hYzo6dXNlclByZWYKICAgICByZXR1cm4gIShjYXB0aW9uaW5nTWVkaWFDaGFyYWN0
ZXJpc3RpY3MgJiYgQ0ZBcnJheUdldENvdW50KGNhcHRpb25pbmdNZWRpYUNoYXJhY3RlcmlzdGlj
cy5nZXQoKSkpOwogfQogCi1ib29sIENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNYWM6OnVzZXJIYXND
YXB0aW9uUHJlZmVyZW5jZXMoKSBjb25zdAotewotICAgIGlmICh0ZXN0aW5nTW9kZSgpIHx8ICFN
ZWRpYUFjY2Vzc2liaWxpdHlMaWJyYXJ5KCkpCi0gICAgICAgIHJldHVybiBDYXB0aW9uVXNlclBy
ZWZlcmVuY2VzOjp1c2VySGFzQ2FwdGlvblByZWZlcmVuY2VzKCk7Ci0KLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQogdm9pZCBDYXB0aW9uVXNlclByZWZlcmVuY2VzTWFjOjpzZXRJbnRlcmVzdGVkSW5D
YXB0aW9uUHJlZmVyZW5jZUNoYW5nZXMoKQogewogICAgIGlmICghTWVkaWFBY2Nlc3NpYmlsaXR5
TGlicmFyeSgpKQpAQCAtNDgxLDcgKzUwOCw3IEBAIHZvaWQgQ2FwdGlvblVzZXJQcmVmZXJlbmNl
c01hYzo6dXBkYXRlQ2EKICAgICAgICAgICAgICBWZWN0b3I8U3RyaW5nPigpLCBJbmplY3RJbkFs
bEZyYW1lcywgVXNlclN0eWxlQXV0aG9yTGV2ZWwsIEluamVjdEluRXhpc3RpbmdEb2N1bWVudHMp
OwogfQogCi12b2lkIENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNYWM6OnNldFByZWZlcnJlZExhbmd1
YWdlKFN0cmluZyBsYW5ndWFnZSkKK3ZvaWQgQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01hYzo6c2V0
UHJlZmVycmVkTGFuZ3VhZ2UoY29uc3QgU3RyaW5nJiBsYW5ndWFnZSkKIHsKICAgICBpZiAodGVz
dGluZ01vZGUoKSB8fCAhTWVkaWFBY2Nlc3NpYmlsaXR5TGlicmFyeSgpKSB7CiAgICAgICAgIENh
cHRpb25Vc2VyUHJlZmVyZW5jZXM6OnNldFByZWZlcnJlZExhbmd1YWdlKGxhbmd1YWdlKTsKQEAg
LTUyNSw5ICs1NTIsMzAgQEAgVmVjdG9yPFN0cmluZz4gQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01h
YwogICAgIHJldHVybiB1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzOwogfQogI2VuZGlmICAvLyBIQVZF
KE1FRElBX0FDQ0VTU0lCSUxJVFlfRlJBTUVXT1JLKQotICAgIAorCitzdGF0aWMgU3RyaW5nIGxh
bmd1YWdlSWRlbnRpZmllcihjb25zdCBTdHJpbmcmIGxhbmd1YWdlQ29kZSkKK3sKKyAgICBpZiAo
bGFuZ3VhZ2VDb2RlLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGxhbmd1YWdlQ29kZTsKKwor
ICAgIFN0cmluZyBsb3dlcmNhc2VMYW5ndWFnZUNvZGUgPSBsYW5ndWFnZUNvZGUubG93ZXIoKTsK
KworICAgIC8vIE5lZWQgMlUgaGVyZSB0byBkaXNhbWJpZ3VhdGUgU3RyaW5nOjpvcGVyYXRvcltd
IGZyb20gb3BlcmF0b3IoTlNTdHJpbmcqLCBpbnQpW10gaW4gYSBwcm9kdWN0aW9uIGJ1aWxkLgor
ICAgIGlmIChsb3dlcmNhc2VMYW5ndWFnZUNvZGUubGVuZ3RoKCkgPj0gMyAmJiAobG93ZXJjYXNl
TGFuZ3VhZ2VDb2RlWzJVXSA9PSAnXycgfHwgbG93ZXJjYXNlTGFuZ3VhZ2VDb2RlWzJVXSA9PSAn
LScpKQorICAgICAgICBsb3dlcmNhc2VMYW5ndWFnZUNvZGUudHJ1bmNhdGUoMik7CisKKyAgICBy
ZXR1cm4gbG93ZXJjYXNlTGFuZ3VhZ2VDb2RlOworfQorCiBzdGF0aWMgU3RyaW5nIHRyYWNrRGlz
cGxheU5hbWUoVGV4dFRyYWNrKiB0cmFjaykKIHsKKyAgICBpZiAodHJhY2sgPT0gVGV4dFRyYWNr
OjpjYXB0aW9uTWVudU9mZkl0ZW0oKSkKKyAgICAgICAgcmV0dXJuIHRleHRUcmFja09mZk1lbnVJ
dGVtVGV4dCgpOworICAgIGlmICh0cmFjayA9PSBUZXh0VHJhY2s6OmNhcHRpb25NZW51QXV0b21h
dGljSXRlbSgpKSB7CisgICAgICAgIFN0cmluZyBwcmVmZXJyZWRMYW5ndWFnZURpc3BsYXlOYW1l
ID0gZGlzcGxheU5hbWVGb3JMYW5ndWFnZUxvY2FsZShsYW5ndWFnZUlkZW50aWZpZXIoZGVmYXVs
dExhbmd1YWdlKCkpKTsKKyAgICAgICAgcmV0dXJuIHRleHRUcmFja0F1dG9tYXRpY01lbnVJdGVt
VGV4dChwcmVmZXJyZWRMYW5ndWFnZURpc3BsYXlOYW1lKTsKKyAgICB9CisKICAgICBTdHJpbmdC
dWlsZGVyIGRpc3BsYXlOYW1lOwogICAgIFN0cmluZyBsYWJlbCA9IHRyYWNrLT5sYWJlbCgpOwog
ICAgIFN0cmluZyB0cmFja0xhbmd1YWdlSWRlbnRpZmllciA9IHRyYWNrLT5sYW5ndWFnZSgpOwpA
QCAtNTg3LDIzICs2MzUsMTIgQEAgU3RyaW5nIENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNYWM6OmRp
c3BsYQogICAgIHJldHVybiB0cmFja0Rpc3BsYXlOYW1lKHRyYWNrKTsKIH0KIAotc3RhdGljIFN0
cmluZyBsYW5ndWFnZUlkZW50aWZpZXIoY29uc3QgU3RyaW5nJiBsYW5ndWFnZUNvZGUpCi17Ci0g
ICAgaWYgKGxhbmd1YWdlQ29kZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBsYW5ndWFnZUNv
ZGU7Ci0KLSAgICBTdHJpbmcgbG93ZXJjYXNlTGFuZ3VhZ2VDb2RlID0gbGFuZ3VhZ2VDb2RlLmxv
d2VyKCk7Ci0KLSAgICAvLyBOZWVkIDJVIGhlcmUgdG8gZGlzYW1iaWd1YXRlIFN0cmluZzo6b3Bl
cmF0b3JbXSBmcm9tIG9wZXJhdG9yKE5TU3RyaW5nKiwgaW50KVtdIGluIGEgcHJvZHVjdGlvbiBi
dWlsZC4KLSAgICBpZiAobG93ZXJjYXNlTGFuZ3VhZ2VDb2RlLmxlbmd0aCgpID49IDMgJiYgKGxv
d2VyY2FzZUxhbmd1YWdlQ29kZVsyVV0gPT0gJ18nIHx8IGxvd2VyY2FzZUxhbmd1YWdlQ29kZVsy
VV0gPT0gJy0nKSkKLSAgICAgICAgbG93ZXJjYXNlTGFuZ3VhZ2VDb2RlLnRydW5jYXRlKDIpOwot
ICAgIAotICAgIHJldHVybiBsb3dlcmNhc2VMYW5ndWFnZUNvZGU7Ci19Ci0KIGludCBDYXB0aW9u
VXNlclByZWZlcmVuY2VzTWFjOjp0ZXh0VHJhY2tTZWxlY3Rpb25TY29yZShUZXh0VHJhY2sqIHRy
YWNrLCBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQpIGNvbnN0CiB7Ci0gICAgaWYgKCFz
aG91bGRTaG93Q2FwdGlvbnMoKSAmJiAhbWVkaWFFbGVtZW50LT53ZWJraXRDbG9zZWRDYXB0aW9u
c1Zpc2libGUoKSkKKyAgICBDYXB0aW9uRGlzcGxheU1vZGUgZGlzcGxheU1vZGUgPSBjYXB0aW9u
RGlzcGxheU1vZGUoKTsKKyAgICBpZiAoZGlzcGxheU1vZGUgPT0gRm9yY2VkT25seSkKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgaWYgKGRpc3BsYXlNb2RlID09IEFsd2F5c09uICYmICghdXNlclBy
ZWZlcnNTdWJ0aXRsZXMoKSAmJiAhdXNlclByZWZlcnNDYXB0aW9ucygpKSkKICAgICAgICAgcmV0
dXJuIDA7CiAgICAgaWYgKHRyYWNrLT5raW5kKCkgIT0gVGV4dFRyYWNrOjpjYXB0aW9uc0tleXdv
cmQoKSAmJiB0cmFjay0+a2luZCgpICE9IFRleHRUcmFjazo6c3VidGl0bGVzS2V5d29yZCgpKQog
ICAgICAgICByZXR1cm4gMDsKQEAgLTYxMiw2ICs2NDksMzMgQEAgaW50IENhcHRpb25Vc2VyUHJl
ZmVyZW5jZXNNYWM6OnRleHRUcmFjawogICAgIGlmICghdHJhY2stPmlzTWFpblByb2dyYW1Db250
ZW50KCkpCiAgICAgICAgIHJldHVybiAwOwogCisgICAgVmVjdG9yPFN0cmluZz4gdXNlclByZWZl
cnJlZENhcHRpb25MYW5ndWFnZXMgPSBwcmVmZXJyZWRMYW5ndWFnZXMoKTsKKworICAgIGlmIChk
aXNwbGF5TW9kZSA9PSBBdXRvbWF0aWMpIHsKKworICAgICAgICBTdHJpbmcgYXVkaW9UcmFja0xh
bmd1YWdlOworICAgICAgICBpZiAodGVzdGluZ01vZGUoKSkgeworICAgICAgICAgICAgYXVkaW9U
cmFja0xhbmd1YWdlID0gcHJpbWFyeUF1ZGlvVHJhY2tMYW5ndWFnZU92ZXJyaWRlKCk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPbmx5IGVuYWJsZSBhIHRleHQgdHJhY2sgaWYg
dGhlIGN1cnJlbnQgYXVkaW8gdHJhY2sgaXMgbm90IGluIHRoZSB1c2VyJ3MgcHJlZmVycmVkIGxh
bmd1YWdlLgorICAgICAgICAgICAgaWYgKCFtZWRpYUVsZW1lbnQgfHwgIW1lZGlhRWxlbWVudC0+
cGxheWVyKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGF1ZGlvVHJhY2tMYW5ndWFnZSA9IG1lZGlhRWxlbWVudC0+cGxheWVyKCktPmxhbmd1
YWdlT2ZQcmltYXJ5QXVkaW9UcmFjaygpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGF1ZGlv
VHJhY2tMYW5ndWFnZS5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAg
ICBWZWN0b3I8U3RyaW5nPiBsYW5ndWFnZXM7CisgICAgICAgIGxhbmd1YWdlcy5hcHBlbmQoZGVm
YXVsdExhbmd1YWdlKCkpOworICAgICAgICBzaXplX3Qgb2Zmc2V0ID0gaW5kZXhPZkJlc3RNYXRj
aGluZ0xhbmd1YWdlSW5MaXN0KGF1ZGlvVHJhY2tMYW5ndWFnZSwgbGFuZ3VhZ2VzKTsKKyAgICAg
ICAgaWYgKCFvZmZzZXQpCisgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICB1c2VyUHJl
ZmVycmVkQ2FwdGlvbkxhbmd1YWdlcyA9IGxhbmd1YWdlczsKKyAgICB9CisKICAgICBpbnQgdHJh
Y2tTY29yZSA9IDA7CiAKICAgICBpZiAodXNlclByZWZlcnNDYXB0aW9ucygpKSB7CkBAIC02MzIs
NyArNjk2LDcgQEAgaW50IENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNYWM6OnRleHRUcmFjawogICAg
ICAgICAgICAgdHJhY2tTY29yZSA9IDE7CiAgICAgfQogCi0gICAgcmV0dXJuIHRyYWNrU2NvcmUg
KyB0ZXh0VHJhY2tMYW5ndWFnZVNlbGVjdGlvblNjb3JlKHRyYWNrKTsKKyAgICByZXR1cm4gdHJh
Y2tTY29yZSArIHRleHRUcmFja0xhbmd1YWdlU2VsZWN0aW9uU2NvcmUodHJhY2ssIHVzZXJQcmVm
ZXJyZWRDYXB0aW9uTGFuZ3VhZ2VzKTsKIH0KIAogc3RhdGljIGJvb2wgdGV4dFRyYWNrQ29tcGFy
ZShjb25zdCBSZWZQdHI8VGV4dFRyYWNrPiYgYSwgY29uc3QgUmVmUHRyPFRleHRUcmFjaz4mIGIp
CkBAIC03MzgsNiArODAyLDkgQEAgVmVjdG9yPFJlZlB0cjxUZXh0VHJhY2s+ID4gQ2FwdGlvblVz
ZXJQcgogCiAgICAgbm9uQ29weWluZ1NvcnQodHJhY2tzRm9yTWVudS5iZWdpbigpLCB0cmFja3NG
b3JNZW51LmVuZCgpLCB0ZXh0VHJhY2tDb21wYXJlKTsKIAorICAgIHRyYWNrc0Zvck1lbnUuaW5z
ZXJ0KDAsIFRleHRUcmFjazo6Y2FwdGlvbk1lbnVPZmZJdGVtKCkpOworICAgIHRyYWNrc0Zvck1l
bnUuaW5zZXJ0KDEsIFRleHRUcmFjazo6Y2FwdGlvbk1lbnVBdXRvbWF0aWNJdGVtKCkpOworCiAg
ICAgcmV0dXJuIHRyYWNrc0Zvck1lbnU7CiB9CiAgICAgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9Mb2NhbGl6ZWRTdHJpbmdzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9Mb2NhbGl6ZWRTdHJpbmdzLmNwcAkocmV2aXNpb24gMTQ3NDk5KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vTG9jYWxpemVkU3RyaW5ncy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEwMjAsMTEgKzEwMjAsMTYgQEAgU3RyaW5nIHRleHRUcmFja1N1YnRpdGxlc1RleHQoKQog
ICAgIHJldHVybiBXRUJfVUlfU1RSSU5HKCJTdWJ0aXRsZXMiLCAiTWVudSBzZWN0aW9uIGhlYWRp
bmcgZm9yIHN1YnRpdGxlcyIpOwogfQogCi1TdHJpbmcgdGV4dFRyYWNrT2ZmVGV4dCgpCitTdHJp
bmcgdGV4dFRyYWNrT2ZmTWVudUl0ZW1UZXh0KCkKIHsKICAgICByZXR1cm4gV0VCX1VJX1NUUklO
RygiT2ZmIiwgIk1lbnUgaXRlbSBsYWJlbCBmb3IgdGhlIHRyYWNrIHRoYXQgcmVwcmVzZW50cyBk
aXNhYmxpbmcgY2xvc2VkIGNhcHRpb25zIik7CiB9CiAKK1N0cmluZyB0ZXh0VHJhY2tBdXRvbWF0
aWNNZW51SXRlbVRleHQoY29uc3QgU3RyaW5nJiBsYW5ndWFnZSkKK3sKKyAgICByZXR1cm4gZm9y
bWF0TG9jYWxpemVkU3RyaW5nKFdFQl9VSV9TVFJJTkcoIkF1dG9tYXRpYyAoJUApIiwgIk1lbnUg
aXRlbSBsYWJlbCBmb3IgYXV0b21hdGljIHRyYWNrIHNlbGVjdGlvbiBiZWhhdmlvciBpbiB0aGUg
Zm9ybSBvZiAnQXV0b21hdGljIChTeXN0ZW1MYW5ndWFnZSknIiksIGxhbmd1YWdlLmNyZWF0ZUNG
U3RyaW5nKCkuZ2V0KCkpOworfQorCiBTdHJpbmcgdGV4dFRyYWNrTm9MYWJlbFRleHQoKQogewog
ICAgIHJldHVybiBXRUJfVUlfU1RSSU5HX0tFWSgiVW5rbm93biIsICJVbmtub3duICh0ZXh0IHRy
YWNrKSIsICJNZW51IGl0ZW0gbGFiZWwgZm9yIGEgdGV4dCB0cmFjayB0aGF0IGhhcyBubyBvdGhl
ciBuYW1lIik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Mb2NhbGl6ZWRTdHJpbmdz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTG9jYWxpemVkU3RyaW5n
cy5oCShyZXZpc2lvbiAxNDc0OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Mb2NhbGl6
ZWRTdHJpbmdzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2Niw3ICsyNjYsOCBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCiAgICAgU3RyaW5nIHRleHRUcmFj
a1N1YnRpdGxlc1RleHQoKTsKLSAgICBTdHJpbmcgdGV4dFRyYWNrT2ZmVGV4dCgpOworICAgIFN0
cmluZyB0ZXh0VHJhY2tPZmZNZW51SXRlbVRleHQoKTsKKyAgICBTdHJpbmcgdGV4dFRyYWNrQXV0
b21hdGljTWVudUl0ZW1UZXh0KGNvbnN0IFN0cmluZyYgbGFuZ3VhZ2UpOwogICAgIFN0cmluZyB0
ZXh0VHJhY2tOb0xhYmVsVGV4dCgpOwogI2lmIFBMQVRGT1JNKE1BQykKICAgICBTdHJpbmcgdGV4
dFRyYWNrQ291bnRyeUFuZExhbmd1YWdlTWVudUl0ZW1UZXh0KGNvbnN0IFN0cmluZyYgdGl0bGUs
IGNvbnN0IFN0cmluZyYgY291bnRyeSwgY29uc3QgU3RyaW5nJiBsYW5ndWFnZSk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCShy
ZXZpc2lvbiAxNDc0OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRp
YVBsYXllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNTQsNiArMTE1NCwxMyBAQCB2b2lkIE1l
ZGlhUGxheWVyOjpzaW11bGF0ZUF1ZGlvSW50ZXJydXB0CiB9CiAjZW5kaWYKIAorU3RyaW5nIE1l
ZGlhUGxheWVyOjpsYW5ndWFnZU9mUHJpbWFyeUF1ZGlvVHJhY2soKSBjb25zdAoreworICAgIGlm
ICghbV9wcml2YXRlKQorICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKKyAgICAKKyAgICBy
ZXR1cm4gbV9wcml2YXRlLT5sYW5ndWFnZU9mUHJpbWFyeUF1ZGlvVHJhY2soKTsKK30KIH0KIAog
I2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXll
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlh
UGxheWVyLmgJKHJldmlzaW9uIDE0NzQ5OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL01lZGlhUGxheWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2Niw2ICs0NjYsOCBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNpbXVsYXRlQXVkaW9JbnRlcnJ1cHRpb24oKTsKICNl
bmRpZgogCisgICAgU3RyaW5nIGxhbmd1YWdlT2ZQcmltYXJ5QXVkaW9UcmFjaygpIGNvbnN0Owor
CiBwcml2YXRlOgogICAgIE1lZGlhUGxheWVyKE1lZGlhUGxheWVyQ2xpZW50Kik7CiAgICAgdm9p
ZCBsb2FkV2l0aE5leHRNZWRpYUVuZ2luZShNZWRpYVBsYXllckZhY3RvcnkqKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyUHJpdmF0ZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyUHJp
dmF0ZS5oCShyZXZpc2lvbiAxNDc0OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9NZWRpYVBsYXllclByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTkxLDYgKzE5MSw4
IEBAIHB1YmxpYzoKICNpZiBVU0UoR1NUUkVBTUVSKQogICAgIHZpcnR1YWwgdm9pZCBzaW11bGF0
ZUF1ZGlvSW50ZXJydXB0aW9uKCkgeyB9CiAjZW5kaWYKKyAgICAKKyAgICB2aXJ0dWFsIFN0cmlu
ZyBsYW5ndWFnZU9mUHJpbWFyeUF1ZGlvVHJhY2soKSBjb25zdCB7IHJldHVybiBlbXB0eVN0cmlu
ZygpOyB9CiB9OwogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9h
dmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9u
L29iamMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5oCShyZXZpc2lvbiAxNDc0
OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2Jq
Yy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLmgJKHdvcmtpbmcgY29weSkKQEAg
LTE1OSw2ICsxNTksOCBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgTWVkaWFQbGF5ZXI6Ok1lZGlh
S2V5RXhjZXB0aW9uIGNhbmNlbEtleVJlcXVlc3QoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5n
Jik7CiAjZW5kaWYKIAorICAgIHZpcnR1YWwgU3RyaW5nIGxhbmd1YWdlT2ZQcmltYXJ5QXVkaW9U
cmFjaygpIGNvbnN0IE9WRVJSSURFOworCiAjaWYgSEFWRShBVkZPVU5EQVRJT05fVEVYVF9UUkFD
S19TVVBQT1JUKQogICAgIHZpcnR1YWwgdm9pZCBzZXRDdXJyZW50VHJhY2soSW5iYW5kVGV4dFRy
YWNrUHJpdmF0ZUFWRiopIE9WRVJSSURFOwogICAgIHZpcnR1YWwgSW5iYW5kVGV4dFRyYWNrUHJp
dmF0ZUFWRiogY3VycmVudFRyYWNrKCkgT1ZFUlJJREU7CkBAIC0xNzIsNiArMTc0LDcgQEAgcHJp
dmF0ZToKICAgICBSZXRhaW5QdHI8QVZQbGF5ZXJMYXllcj4gbV92aWRlb0xheWVyOwogICAgIFJl
dGFpblB0cjxXZWJDb3JlQVZGTW92aWVPYnNlcnZlcj4gbV9vYmpjT2JzZXJ2ZXI7CiAgICAgUmV0
YWluUHRyPGlkPiBtX3RpbWVPYnNlcnZlcjsKKyAgICBtdXRhYmxlIFN0cmluZyBtX2xhbmd1YWdl
T2ZQcmltYXJ5QXVkaW9UcmFjazsKICAgICBib29sIG1fdmlkZW9GcmFtZUhhc0RyYXduOwogICAg
IGJvb2wgbV9oYXZlQ2hlY2tlZFBsYXlhYmlsaXR5OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZv
dW5kYXRpb25PYmpDLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9i
akMubW0JKHJldmlzaW9uIDE0NzQ5OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTk0Niw2ICs5NDYsOCBAQCBmbG9hdCBNZWRpYVBsYXllclBy
aXZhdGVBVkZvdW5kYXRpb25PYmpDCiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0
aW9uT2JqQzo6dHJhY2tzQ2hhbmdlZCgpCiB7CisgICAgbV9sYW5ndWFnZU9mUHJpbWFyeUF1ZGlv
VHJhY2sgPSBTdHJpbmcoKTsKKwogICAgIGlmICghbV9hdkFzc2V0KQogICAgICAgICByZXR1cm47
CiAKQEAgLTEzNzcsNiArMTM3OSw0NSBAQCBJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGKiBNZWRp
YVBsYXllclByCiB9CiAjZW5kaWYgLy8gSEFWRShBVkZPVU5EQVRJT05fVEVYVF9UUkFDS19TVVBQ
T1JUKQogCitTdHJpbmcgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6bGFuZ3Vh
Z2VPZlByaW1hcnlBdWRpb1RyYWNrKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fbGFuZ3VhZ2VPZlBy
aW1hcnlBdWRpb1RyYWNrLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gbV9sYW5ndWFnZU9mUHJp
bWFyeUF1ZGlvVHJhY2s7CisKKyAgICBpZiAoIW1fYXZQbGF5ZXJJdGVtLmdldCgpKQorICAgICAg
ICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKKworI2lmIEhBVkUoQVZGT1VOREFUSU9OX1RFWFRfVFJB
Q0tfU1VQUE9SVCkKKyAgICAvLyBJZiBBVkZvdW5kYXRpb24gaGFzIGFuIGF1ZGlibGUgZ3JvdXAs
IHJldHVybiB0aGUgbGFuZ3VhZ2Ugb2YgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBhdWRpYmxlIG9w
dGlvbi4KKyAgICBBVk1lZGlhU2VsZWN0aW9uR3JvdXBUeXBlICphdWRpYmxlR3JvdXAgPSBbbV9h
dkFzc2V0LmdldCgpIG1lZGlhU2VsZWN0aW9uR3JvdXBGb3JNZWRpYUNoYXJhY3RlcmlzdGljOkFW
TWVkaWFDaGFyYWN0ZXJpc3RpY0F1ZGlibGVdOworICAgIEFWTWVkaWFTZWxlY3Rpb25PcHRpb25U
eXBlICpjdXJyZW50bHlTZWxlY3RlZEF1ZGlibGVPcHRpb24gPSBbbV9hdlBsYXllckl0ZW0uZ2V0
KCkgc2VsZWN0ZWRNZWRpYU9wdGlvbkluTWVkaWFTZWxlY3Rpb25Hcm91cDphdWRpYmxlR3JvdXBd
OworICAgIGlmIChjdXJyZW50bHlTZWxlY3RlZEF1ZGlibGVPcHRpb24pIHsKKyAgICAgICAgbV9s
YW5ndWFnZU9mUHJpbWFyeUF1ZGlvVHJhY2sgPSBbW2N1cnJlbnRseVNlbGVjdGVkQXVkaWJsZU9w
dGlvbiBsb2NhbGVdIGxvY2FsZUlkZW50aWZpZXJdOworICAgICAgICByZXR1cm4gbV9sYW5ndWFn
ZU9mUHJpbWFyeUF1ZGlvVHJhY2s7CisgICAgfQorI2VuZGlmIC8vIEhBVkUoQVZGT1VOREFUSU9O
X1RFWFRfVFJBQ0tfU1VQUE9SVCkKKworICAgIC8vIEFWRm91bmRhdGlvbiBzeW50aGVzaXplcyBh
biBhdWRpYmxlIGdyb3VwIHdoZW4gdGhlcmUgaXMgb25seSBvbmUgdW5ncm91cGVkIGF1ZGlvIHRy
YWNrIGlmIHRoZXJlIGlzIGFsc28gYSBsZWdpYmxlIGdyb3VwIChvbmUgb3IKKyAgICAvLyBtb3Jl
IGluLWJhbmQgdGV4dCB0cmFja3MpLiBJdCBkb2Vzbid0IGtub3cgYWJvdXQgb3V0LW9mLWJhbmQg
dHJhY2tzLCBzbyBpZiB0aGVyZSBpcyBhIHNpbmdsZSBhdWRpbyB0cmFjayByZXR1cm4gaXRzIGxh
bmd1YWdlLgorICAgIE5TQXJyYXkgKnRyYWNrcyA9IFttX2F2QXNzZXQuZ2V0KCkgdHJhY2tzV2l0
aE1lZGlhVHlwZTpBVk1lZGlhVHlwZUF1ZGlvXTsKKyAgICBpZiAoIXRyYWNrcyB8fCBbdHJhY2tz
IGNvdW50XSAhPSAxKSB7CisgICAgICAgIG1fbGFuZ3VhZ2VPZlByaW1hcnlBdWRpb1RyYWNrID0g
ZW1wdHlTdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIG1fbGFuZ3VhZ2VPZlByaW1hcnlBdWRpb1Ry
YWNrOworICAgIH0KKworICAgIEFWQXNzZXRUcmFjayAqdHJhY2sgPSBbdHJhY2tzIG9iamVjdEF0
SW5kZXg6MF07CisgICAgTlNTdHJpbmcgKmxhbmd1YWdlID0gW3RyYWNrIGV4dGVuZGVkTGFuZ3Vh
Z2VUYWddOworCisgICAgLy8gU29tZSBsZWdhY3kgdHJhY2tzIGhhdmUgInVuZCIgYXMgYSBsYW5n
dWFnZSwgdHJlYXQgdGhhdCB0aGUgc2FtZSBhcyBubyBsYW5ndWFnZSBhdCBhbGwuCisgICAgaWYg
KGxhbmd1YWdlICYmICFbbGFuZ3VhZ2UgaXNFcXVhbFRvU3RyaW5nOkAidW5kIl0pIHsKKyAgICAg
ICAgbV9sYW5ndWFnZU9mUHJpbWFyeUF1ZGlvVHJhY2sgPSBsYW5ndWFnZTsKKyAgICAgICAgcmV0
dXJuIG1fbGFuZ3VhZ2VPZlByaW1hcnlBdWRpb1RyYWNrOworICAgIH0KKworICAgIG1fbGFuZ3Vh
Z2VPZlByaW1hcnlBdWRpb1RyYWNrID0gZW1wdHlTdHJpbmcoKTsKKyAgICByZXR1cm4gbV9sYW5n
dWFnZU9mUHJpbWFyeUF1ZGlvVHJhY2s7Cit9CisgICAgCiBOU0FycmF5KiBhc3NldE1ldGFkYXRh
S2V5TmFtZXMoKQogewogICAgIHN0YXRpYyBOU0FycmF5KiBrZXlzOwpJbmRleDogTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNp
b24gMTQ3NDk5KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMzIgQEAKKzIwMTMtMDQtMDIgIEVyaWMgQ2FybHNvbiAgPGVyaWMuY2FybHNvbkBhcHBs
ZS5jb20+CisKKyAgICAgICAgW01hY10gYWRkICJhdXRvbWF0aWMiIHRleHQgdHJhY2sgbWVudSBp
dGVtCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTM4
MjIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIG1l
ZGlhL21lZGlhLWNhcHRpb25zLmh0bWw6IE9wcG9ydHVuaXN0aWMgZml4IC0gZG9uJ3QgbG9vayBh
dCBzdGF0ZSB1bnRpbCB3ZSBnZXQgdGhlICdjYW5wbGF5dGhyb3VnaCcKKyAgICAgICAgICAgIGV2
ZW50IGJlY2F1c2UgdGhlIG1lZGlhIGVuZ2luZSBzdGF0ZSBtYXkgbm90IGhhdmUgYmVlbiBwcm9j
ZXNzZWQgdW50aWwgdGhhdCB0aW1lLgorICAgICAgICAqIG1lZGlhL3RyYWNrL3RyYWNrLWN1ZS1j
b250YWluZXItcmVuZGVyaW5nLXBvc2l0aW9uLmh0bWw6IERvbid0IGFzc3VtZSB0aGF0IGEgY3Vl
IGhhcyBiZWVuIAorICAgICAgICAgICAgcmVuZGVyZWQgaW1tZWRpYXRlbHkgd2hlbiB0aGUgJ2Nh
bnBsYXl0aHJvdWdoJyBldmVudCBjb21lcyB0aHJvdWdoLgorICAgICAgICAqIG1lZGlhL3RyYWNr
L3RyYWNrLWN1ZS1yZW5kZXJpbmctbW9kZS1jaGFuZ2VkLmh0bWw6IERpdHRvLgorICAgICAgICAq
IG1lZGlhL3RyYWNrL3RyYWNrLWluLWJhbmQtZXhwZWN0ZWQudHh0OiBEb24ndCBjaGVjayBpZiBj
dWVzIGhhdmUgbG9hZGVkLCBpdCBkb2Vzbid0IG1hdHRlcgorICAgICAgICAgICAgZm9yIHRoaXMg
dGVzdC4KKyAgICAgICAgKiBtZWRpYS90cmFjay90cmFjay1pbi1iYW5kLmh0bWw6IERpdHRvLgor
ICAgICAgICAqIG1lZGlhL3RyYWNrL3RyYWNrLXVzZXItcHJlZmVyZW5jZXMtZXhwZWN0ZWQudHh0
OiBDaGFuZ2VkIG5hbWUgb2YgdXRpbGl0eSBmdW5jdGlvbiBmcm9tIAorICAgICAgICAgICAgbWVu
dUluZGV4Rm9yTGFuZ3VhZ2UgdG8gaW5kZXhPZk1lbnVJdGVtQmVnaW5uaW5nV2l0aC4KKyAgICAg
ICAgKiBtZWRpYS90cmFjay90cmFjay11c2VyLXByZWZlcmVuY2VzLmh0bWw6IE1vdmUgbWVudUlu
ZGV4Rm9yTGFuZ3VhZ2UgdG8gdHJhY2ttZW51LXRlc3QuanMgYW5kCisgICAgICAgICAgICBjaGFu
Z2UgbmFtZSB0byBpbmRleE9mTWVudUl0ZW1CZWdpbm5pbmdXaXRoLiBDbGFyaWZ5IHRoZSBtZXNz
YWdlIGxvZ2dlZCB3aGVuIGEgdHJhY2sgbG9hZHMKKyAgICAgICAgICAgIGJ1dCBpdCBzaG91bGQg
bm90LgorICAgICAgICAqIG1lZGlhL3RyYWNrbWVudS10ZXN0LmpzOiBNb3ZlIHNvbWUgZnVuY3Rp
b25zIGhlcmUgZnJvbSB0cmFjay11c2VyLXByZWZlcmVuY2VzLmh0bWwKKyAgICAgICAgKHRyYWNr
TWVudUxpc3QpOgorICAgICAgICAoaW5kZXhPZk1lbnVJdGVtQmVnaW5uaW5nV2l0aCk6CisgICAg
ICAgIChzZWxlY3RDYXB0aW9uTWVudUl0ZW0pOgorICAgICAgICAqIG1lZGlhL3ZpZGVvLWNvbnRy
b2xzLWNhcHRpb25zLXRyYWNrbWVudS1zb3J0ZWQuaHRtbDogVXBkYXRlIGZvciBuZXcgbWVudSBp
dGVtLgorICAgICAgICAqIG1lZGlhL3ZpZGVvLWNvbnRyb2xzLWNhcHRpb25zLXRyYWNrbWVudS5o
dG1sOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvbWVkaWEvdmlkZW8tY29udHJvbHMt
Y2FwdGlvbnMtdHJhY2ttZW51LWV4cGVjdGVkLnR4dDogRGl0dG8uCisgICAgICAgICogcGxhdGZv
cm0vbWFjL21lZGlhL3ZpZGVvLWNvbnRyb2xzLWNhcHRpb25zLXRyYWNrbWVudS1zb3J0ZWQtZXhw
ZWN0ZWQudHh0OiBEaXR0by4KKwogMjAxMy0wNC0wMiAgTmF0ZSBDaGFwaW4gIDxqYXBoZXRAY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIGNocm9taXVtIGdhcmRlbmluZy4KSW5k
ZXg6IExheW91dFRlc3RzL21lZGlhL21lZGlhLWNhcHRpb25zLmh0bWwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvbWVkaWEvbWVkaWEtY2FwdGlvbnMuaHRtbAkocmV2aXNpb24gMTQ3NDk5KQor
KysgTGF5b3V0VGVzdHMvbWVkaWEvbWVkaWEtY2FwdGlvbnMuaHRtbAkod29ya2luZyBjb3B5KQpA
QCAtNzQsNyArNzQsNyBAQAogICAgICAgICAgICAgICAgIHdhaXRGb3JFdmVudCgicGxheSIpOwog
ICAgICAgICAgICAgICAgIHdhaXRGb3JFdmVudCgicGxheWluZyIpOwogCi0gICAgICAgICAgICAg
ICAgd2FpdEZvckV2ZW50KCdsb2FkZWRtZXRhZGF0YScsIGNhbnBsYXl0aHJvdWdoKTsKKyAgICAg
ICAgICAgICAgICB3YWl0Rm9yRXZlbnQoJ2NhbnBsYXl0aHJvdWdoJywgY2FucGxheXRocm91Z2gp
OwogCiAgICAgICAgICAgICAgICAgY29uc29sZVdyaXRlKCI8Yj5UZXN0IGJlZm9yZSBtb3ZpZSBp
cyBvcGVuOjwvYj4iKTsKICAgICAgICAgICAgICAgICB0ZXN0RXhwZWN0ZWQoIm1lZGlhRWxlbWVu
dC53ZWJraXRIYXNDbG9zZWRDYXB0aW9ucyIsIGZhbHNlKTsKSW5kZXg6IExheW91dFRlc3RzL21l
ZGlhL3RyYWNrbWVudS10ZXN0LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL21lZGlhL3Ry
YWNrbWVudS10ZXN0LmpzCShyZXZpc2lvbiAxNDc0OTkpCisrKyBMYXlvdXRUZXN0cy9tZWRpYS90
cmFja21lbnUtdGVzdC5qcwkod29ya2luZyBjb3B5KQpAQCAtMzUsMyArMzUsNTQgQEAgZnVuY3Rp
b24gZ2V0VHJhY2tMaXN0RWxlbWVudCgpCiAgIH0KICAgcmV0dXJuIHRyYWNrTGlzdEVsZW1lbnQ7
CiB9CisKK2Z1bmN0aW9uIHRyYWNrTWVudUxpc3QoKQoreworICAgIHRyYWNrTGlzdEVsZW1lbnQg
PSBnZXRUcmFja0xpc3RFbGVtZW50KCk7CisgICAgaWYgKCF0cmFja0xpc3RFbGVtZW50KQorICAg
ICAgICByZXR1cm47CisKKyAgICAvLyBUcmFjayBsaXN0IHNob3VsZCBoYXZlIGEgPHVsPiB3aXRo
IDxsaT4gY2hpbGRyZW4uCisgICAgdmFyIHRyYWNrTGlzdCA9IHRyYWNrTGlzdEVsZW1lbnQucXVl
cnlTZWxlY3RvcigidWwiKTsKKyAgICBpZiAoIXRyYWNrTGlzdCkgeworICAgICAgICBmYWlsVGVz
dCgiQ291bGQgbm90IGZpbmQgYSBjaGlsZCB1bCBlbGVtZW50IGluIHRyYWNrIGxpc3QgbWVudSIp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHZhciB0cmFja0xpc3RJdGVtcyA9IHRyYWNr
TGlzdC5xdWVyeVNlbGVjdG9yQWxsKCJsaSIpOworICAgIGlmICghdHJhY2tMaXN0SXRlbXMpIHsK
KyAgICAgICAgZmFpbFRlc3QoIkNvdWxkIG5vdCBmaW5kIGNoaWxkIGxpIGVsZW1lbnRzIGluIHRy
YWNrIGxpc3QgbWVudSIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgcmV0dXJuIHRy
YWNrTGlzdEl0ZW1zOworfQorCitmdW5jdGlvbiBpbmRleE9mTWVudUl0ZW1CZWdpbm5pbmdXaXRo
KHRpdGxlKQoreworICAgIHZhciB0cmFja01lbnVJdGVtcyA9IHRyYWNrTWVudUxpc3QoKTsKKyAg
ICBmb3IgKGkgPSAwOyBpIDwgdHJhY2tNZW51SXRlbXMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAg
aWYgKHRyYWNrTWVudUl0ZW1zW2ldLnRleHRDb250ZW50LmluZGV4T2YodGl0bGUpID09IDApCisg
ICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIChpIDwgdHJhY2tNZW51SXRlbXMu
bGVuZ3RoKSA/IGkgOiAtMTsKK30KKworZnVuY3Rpb24gc2VsZWN0Q2FwdGlvbk1lbnVJdGVtKHRp
dGxlKQoreworICAgIHZhciB0cmFja01lbnVJdGVtcyA9IHRyYWNrTWVudUxpc3QoKTsKKyAgICB2
YXIgaW5kZXggPSBpbmRleE9mTWVudUl0ZW1CZWdpbm5pbmdXaXRoKHRpdGxlKTsKKyAgICBpZiAo
aW5kZXggPCAwKSB7CisgICAgICAgIGZhaWxUZXN0KCJNZW51IGl0ZW0gIiArIHRpdGxlICsgIiBu
b3QgZm91bmQgaW4gdHJhY2sgbGlzdCBtZW51LiIpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgY29uc29sZVdyaXRlKCItIGNsaWNrIG9uICciICsgdGl0bGUgKyAiJyBtZW51IGl0ZW0u
Iik7CisgICAgdmFyIHNlbGVjdGVkVHJhY2tJdGVtID0gdHJhY2tNZW51SXRlbXNbaW5kZXhdOwor
ICAgIHZhciBib3VuZGluZ1JlY3QgPSBzZWxlY3RlZFRyYWNrSXRlbS5nZXRCb3VuZGluZ0NsaWVu
dFJlY3QoKTsKKyAgICB2YXIgeCA9IGJvdW5kaW5nUmVjdC5sZWZ0ICsgYm91bmRpbmdSZWN0Lndp
ZHRoIC8gMjsKKyAgICB2YXIgeSA9IGJvdW5kaW5nUmVjdC50b3AgKyBib3VuZGluZ1JlY3QuaGVp
Z2h0IC8gMjsKKyAgICBldmVudFNlbmRlci5tb3VzZU1vdmVUbyh4LCB5KTsKKyAgICBldmVudFNl
bmRlci5tb3VzZURvd24oKTsKKyAgICBldmVudFNlbmRlci5tb3VzZVVwKCk7Cit9CisKSW5kZXg6
IExheW91dFRlc3RzL21lZGlhL3ZpZGVvLWNvbnRyb2xzLWNhcHRpb25zLXRyYWNrbWVudS1zb3J0
ZWQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9tZWRpYS92aWRlby1jb250cm9scy1j
YXB0aW9ucy10cmFja21lbnUtc29ydGVkLmh0bWwJKHJldmlzaW9uIDE0NzQ5OSkKKysrIExheW91
dFRlc3RzL21lZGlhL3ZpZGVvLWNvbnRyb2xzLWNhcHRpb25zLXRyYWNrbWVudS1zb3J0ZWQuaHRt
bAkod29ya2luZyBjb3B5KQpAQCAtNDEsMTQgKzQxLDE1IEBACiAgICAgICAgICAgICAgICAgY2Fz
ZSAxOgogICAgICAgICAgICAgICAgICAgICB0cmFja01lbnVJdGVtcyA9IHRleHRUcmFja01lbnVJ
dGVtcygpOwogICAgICAgICAgICAgICAgICAgICB0ZXN0RXhwZWN0ZWQoInRyYWNrTWVudUl0ZW1z
WzBdLnRleHRDb250ZW50IiwgIk9mZiIpOwotICAgICAgICAgICAgICAgICAgICB0ZXN0RXhwZWN0
ZWQoInRyYWNrTWVudUl0ZW1zWzFdLnRleHRDb250ZW50IiwgInUgKEVuZ2xpc2gpIFNESCIpOwot
ICAgICAgICAgICAgICAgICAgICB0ZXN0RXhwZWN0ZWQoInRyYWNrTWVudUl0ZW1zWzJdLnRleHRD
b250ZW50IiwgInkgKEVuZ2xpc2gtQXVzdHJhbGlhKSBTREgiKTsKLSAgICAgICAgICAgICAgICAg
ICAgdGVzdEV4cGVjdGVkKCJ0cmFja01lbnVJdGVtc1szXS50ZXh0Q29udGVudCIsICJ2IChFbmds
aXNoKSIpOwotICAgICAgICAgICAgICAgICAgICB0ZXN0RXhwZWN0ZWQoInRyYWNrTWVudUl0ZW1z
WzRdLnRleHRDb250ZW50IiwgInggKEVuZ2xpc2gtQXVzdHJhbGlhKSIpOwotICAgICAgICAgICAg
ICAgICAgICB0ZXN0RXhwZWN0ZWQoInRyYWNrTWVudUl0ZW1zWzVdLnRleHRDb250ZW50IiwgIncg
KEphcGFuZXNlKSBTREgiKTsKLSAgICAgICAgICAgICAgICAgICAgdGVzdEV4cGVjdGVkKCJ0cmFj
a01lbnVJdGVtc1s2XS50ZXh0Q29udGVudCIsICJ6IChKYXBhbmVzZSkiKTsKKyAgICAgICAgICAg
ICAgICAgICAgdGVzdEV4cGVjdGVkKCJ0cmFja01lbnVJdGVtc1sxXS50ZXh0Q29udGVudCIsICJB
dXRvbWF0aWMgKEVuZ2xpc2gpIik7CisgICAgICAgICAgICAgICAgICAgIHRlc3RFeHBlY3RlZCgi
dHJhY2tNZW51SXRlbXNbMl0udGV4dENvbnRlbnQiLCAidSAoRW5nbGlzaCkgU0RIIik7CisgICAg
ICAgICAgICAgICAgICAgIHRlc3RFeHBlY3RlZCgidHJhY2tNZW51SXRlbXNbM10udGV4dENvbnRl
bnQiLCAieSAoRW5nbGlzaC1BdXN0cmFsaWEpIFNESCIpOworICAgICAgICAgICAgICAgICAgICB0
ZXN0RXhwZWN0ZWQoInRyYWNrTWVudUl0ZW1zWzRdLnRleHRDb250ZW50IiwgInYgKEVuZ2xpc2gp
Iik7CisgICAgICAgICAgICAgICAgICAgIHRlc3RFeHBlY3RlZCgidHJhY2tNZW51SXRlbXNbNV0u
dGV4dENvbnRlbnQiLCAieCAoRW5nbGlzaC1BdXN0cmFsaWEpIik7CisgICAgICAgICAgICAgICAg
ICAgIHRlc3RFeHBlY3RlZCgidHJhY2tNZW51SXRlbXNbNl0udGV4dENvbnRlbnQiLCAidyAoSmFw
YW5lc2UpIFNESCIpOworICAgICAgICAgICAgICAgICAgICB0ZXN0RXhwZWN0ZWQoInRyYWNrTWVu
dUl0ZW1zWzddLnRleHRDb250ZW50IiwgInogKEphcGFuZXNlKSIpOwogICAgICAgICAgICAgICAg
ICAgICB0ZXN0RXhwZWN0ZWQoInZpZGVvLnRleHRUcmFja3MubGVuZ3RoIiwgNik7Ci0gICAgICAg
ICAgICAgICAgICAgIHRlc3RFeHBlY3RlZCgidHJhY2tNZW51SXRlbXMubGVuZ3RoIiwgNyk7Cisg
ICAgICAgICAgICAgICAgICAgIHRlc3RFeHBlY3RlZCgidHJhY2tNZW51SXRlbXMubGVuZ3RoIiwg
OCk7CiAKICAgICAgICAgICAgICAgICAgICAgY29uc29sZVdyaXRlKCI8YnI+PGk+KiogQ2hhbmdl
IHByZWZlcnJlZCBsYW5ndWFnZSB0byBKYXBhbmVzZSwgY2hhbmdlIHByZWZlcmVuY2UgdG8gc3Vi
dGl0bGVzPCIgKyAiL2k+Iik7CiAgICAgICAgICAgICAgICAgICAgIHJ1bigiaW50ZXJuYWxzLnNl
dFVzZXJQcmVmZXJyZWRMYW5ndWFnZXMoWydqYSddKSIpOwpAQCAtNjEsMTEgKzYyLDEyIEBACiAg
ICAgICAgICAgICAgICAgY2FzZSAyOgogICAgICAgICAgICAgICAgICAgICB0cmFja01lbnVJdGVt
cyA9IHRleHRUcmFja01lbnVJdGVtcygpOwogICAgICAgICAgICAgICAgICAgICB0ZXN0RXhwZWN0
ZWQoInRyYWNrTWVudUl0ZW1zWzBdLnRleHRDb250ZW50IiwgIk9mZiIpOwotICAgICAgICAgICAg
ICAgICAgICB0ZXN0RXhwZWN0ZWQoInRyYWNrTWVudUl0ZW1zWzFdLnRleHRDb250ZW50IiwgInog
KEphcGFuZXNlKSIpOwotICAgICAgICAgICAgICAgICAgICB0ZXN0RXhwZWN0ZWQoInRyYWNrTWVu
dUl0ZW1zWzJdLnRleHRDb250ZW50IiwgInYgKEVuZ2xpc2gpIik7Ci0gICAgICAgICAgICAgICAg
ICAgIHRlc3RFeHBlY3RlZCgidHJhY2tNZW51SXRlbXNbM10udGV4dENvbnRlbnQiLCAieCAoRW5n
bGlzaC1BdXN0cmFsaWEpIik7CisgICAgICAgICAgICAgICAgICAgIHRlc3RFeHBlY3RlZCgidHJh
Y2tNZW51SXRlbXNbMV0udGV4dENvbnRlbnQiLCAiQXV0b21hdGljIChKYXBhbmVzZSkiKTsKKyAg
ICAgICAgICAgICAgICAgICAgdGVzdEV4cGVjdGVkKCJ0cmFja01lbnVJdGVtc1syXS50ZXh0Q29u
dGVudCIsICJ6IChKYXBhbmVzZSkiKTsKKyAgICAgICAgICAgICAgICAgICAgdGVzdEV4cGVjdGVk
KCJ0cmFja01lbnVJdGVtc1szXS50ZXh0Q29udGVudCIsICJ2IChFbmdsaXNoKSIpOworICAgICAg
ICAgICAgICAgICAgICB0ZXN0RXhwZWN0ZWQoInRyYWNrTWVudUl0ZW1zWzRdLnRleHRDb250ZW50
IiwgInggKEVuZ2xpc2gtQXVzdHJhbGlhKSIpOwogICAgICAgICAgICAgICAgICAgICB0ZXN0RXhw
ZWN0ZWQoInZpZGVvLnRleHRUcmFja3MubGVuZ3RoIiwgNik7Ci0gICAgICAgICAgICAgICAgICAg
IHRlc3RFeHBlY3RlZCgidHJhY2tNZW51SXRlbXMubGVuZ3RoIiwgNCk7CisgICAgICAgICAgICAg
ICAgICAgIHRlc3RFeHBlY3RlZCgidHJhY2tNZW51SXRlbXMubGVuZ3RoIiwgNSk7CiAKICAgICAg
ICAgICAgICAgICAgICAgY29uc29sZVdyaXRlKCIiKTsKICAgICAgICAgICAgICAgICAgICAgZW5k
VGVzdCgpOwpJbmRleDogTGF5b3V0VGVzdHMvbWVkaWEvdmlkZW8tY29udHJvbHMtY2FwdGlvbnMt
dHJhY2ttZW51Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvbWVkaWEvdmlkZW8tY29u
dHJvbHMtY2FwdGlvbnMtdHJhY2ttZW51Lmh0bWwJKHJldmlzaW9uIDE0NzQ5OSkKKysrIExheW91
dFRlc3RzL21lZGlhL3ZpZGVvLWNvbnRyb2xzLWNhcHRpb25zLXRyYWNrbWVudS5odG1sCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBACiAgICAgICAgICAgICBmdW5jdGlvbiB0ZXN0TWVu
dSgpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgdHJhY2tMaXN0SXRlbXMgPSB0cmFj
a01lbnVMaXN0KCk7Ci0gICAgICAgICAgICAgICAgdmFyIGV4cGVjdGVkSXRlbUNvdW50ID0gdmlk
ZW8udGV4dFRyYWNrcy5sZW5ndGggKyAxOworICAgICAgICAgICAgICAgIHZhciBleHBlY3RlZEl0
ZW1Db3VudCA9IHZpZGVvLnRleHRUcmFja3MubGVuZ3RoICsgMjsKICAgICAgICAgICAgICAgICBj
b25zb2xlV3JpdGUoIlRoZXJlIHNob3VsZCBiZSAiICsgZXhwZWN0ZWRJdGVtQ291bnQgKyAiIGl0
ZW1zIGluIHRoZSBtZW51LiIpOwogICAgICAgICAgICAgICAgIHRlc3RFeHBlY3RlZCgidHJhY2tM
aXN0SXRlbXMubGVuZ3RoIiwgZXhwZWN0ZWRJdGVtQ291bnQpOwogICAgICAgICAgICAgfQpAQCAt
NjMsOCArNjMsOCBAQAogICAgICAgICAgICAgZnVuY3Rpb24gdHVybkNhcHRpb25zT24oKQogICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgIGNvbnNvbGVXcml0ZSgiKioqIFR1cm5pbmcgY2Fw
dGlvbnMgb24iKTsKLSAgICAgICAgICAgICAgICAvLyBDbGljayBvbiB0aGUgc2Vjb25kIGl0ZW0s
IHdoaWNoIGlzIHRoZSBzZWNvbmQgdHJhY2sgKE9mZiBpcyB0aGUgZmlyc3QgaXRlbSBpbiB0aGUg
bWVudSkKLSAgICAgICAgICAgICAgICBzZWxlY3RDYXB0aW9uTWVudUl0ZW0oMiwgdGVzdENhcHRp
b25zVmlzaWJsZSk7CisgICAgICAgICAgICAgICAgLy8gQ2xpY2sgb24gdGhlIHRoaXJkIGl0ZW0s
IHdoaWNoIGlzIHRoZSBzZWNvbmQgdHJhY2sgKE9mZiBpcyB0aGUgZmlyc3QgaXRlbSwgQXV0b21h
dGljIGlzIHNlY29uZCkKKyAgICAgICAgICAgICAgICBzZWxlY3RDYXB0aW9uTWVudUl0ZW0oMywg
dGVzdENhcHRpb25zVmlzaWJsZSk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGZ1bmN0
aW9uIHRlc3RDYXB0aW9uc1Zpc2libGUoKQpJbmRleDogTGF5b3V0VGVzdHMvbWVkaWEvdHJhY2sv
dHJhY2stY3VlLWNvbnRhaW5lci1yZW5kZXJpbmctcG9zaXRpb24uaHRtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9tZWRpYS90cmFjay90cmFjay1jdWUtY29udGFpbmVyLXJlbmRlcmluZy1w
b3NpdGlvbi5odG1sCShyZXZpc2lvbiAxNDc0OTkpCisrKyBMYXlvdXRUZXN0cy9tZWRpYS90cmFj
ay90cmFjay1jdWUtY29udGFpbmVyLXJlbmRlcmluZy1wb3NpdGlvbi5odG1sCSh3b3JraW5nIGNv
cHkpCkBAIC0zMCw3ICszMCw3IEBACiAKICAgICAgICAgICAgIGZpbmRNZWRpYUVsZW1lbnQoKTsK
ICAgICAgICAgICAgIHZpZGVvLnNyYyA9IGZpbmRNZWRpYUZpbGUoJ3ZpZGVvJywgJy4uL2NvbnRl
bnQvdGVzdCcpOwotICAgICAgICAgICAgd2FpdEZvckV2ZW50KCdjYW5wbGF5dGhyb3VnaCcsIHRl
c3RQb3NpdGlvbik7CisgICAgICAgICAgICB3YWl0Rm9yRXZlbnQoJ2NhbnBsYXl0aHJvdWdoJywg
ZnVuY3Rpb24gKCkge3NldFRpbWVvdXQodGVzdFBvc2l0aW9uLCAxMDApO30pOwogICAgICAgICB9
CiAKICAgICAgICAgPC9zY3JpcHQ+CkluZGV4OiBMYXlvdXRUZXN0cy9tZWRpYS90cmFjay90cmFj
ay1jdWUtcmVuZGVyaW5nLW1vZGUtY2hhbmdlZC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL21lZGlhL3RyYWNrL3RyYWNrLWN1ZS1yZW5kZXJpbmctbW9kZS1jaGFuZ2VkLmh0bWwJKHJl
dmlzaW9uIDE0NzQ5OSkKKysrIExheW91dFRlc3RzL21lZGlhL3RyYWNrL3RyYWNrLWN1ZS1yZW5k
ZXJpbmctbW9kZS1jaGFuZ2VkLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTEyLDYgKzEyLDMxIEBA
CiAgICAgICAgIHZhciB0ZXN0VHJhY2tBcmFiaWM7CiAgICAgICAgIHZhciB0ZXN0VHJhY2tFbmds
aXNoOwogICAgICAgICB2YXIgdGVzdEN1ZURpc3BsYXlCb3g7CisgICAgICAgIHZhciBjdXJyZW50
VGVzdCA9IDA7CisKKyAgICAgICAgZnVuY3Rpb24gc2NoZWR1bGVOZXh0VGVzdCgpIAorICAgICAg
ICB7CisgICAgICAgICAgICB2YXIgdGVzdDsKKyAgICAgICAgICAgIHN3aXRjaCAoKytjdXJyZW50
VGVzdCkgeworICAgICAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgICAgIHRlc3QgPSBhZGRU
cmFja3M7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDI6CisgICAg
ICAgICAgICAgICAgdGVzdCA9IHRlc3RDdWVBY3RpdmVTdGF0ZTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgICAgICB0ZXN0ID0gdGVzdEN1
ZVZpc2liaWxpdHkxOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSA0
OgorICAgICAgICAgICAgICAgIHRlc3QgPSB0ZXN0Q3VlVmlzaWJpbGl0eTI7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDU6CisgICAgICAgICAgICAgICAgZW5kVGVz
dCgpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgd2luZG93LnNldFRpbWVvdXQodGVzdCwgMTAwKTsKKyAgICAgICAgfQogCiAgICAgICAgIGZ1
bmN0aW9uIGFkZFRyYWNrcygpCiAgICAgICAgIHsKQEAgLTMxLDYgKzU2LDggQEAKIAogICAgICAg
ICAgICAgY29uc29sZVdyaXRlKCJTZXQgdGhlIG1vZGUgb2YgdGhlICdFbmdsaXNoJyB0cmFjayB0
byBoaWRkZW4iKTsKICAgICAgICAgICAgIHRlc3RUcmFja0VuZ2xpc2gubW9kZSA9ICJoaWRkZW4i
OworCisgICAgICAgICAgICBzY2hlZHVsZU5leHRUZXN0KCk7CiAgICAgICAgIH0KIAogICAgICAg
ICBmdW5jdGlvbiB0ZXN0Q3VlQWN0aXZlU3RhdGUoKQpAQCAtNDIsOSArNjksMTEgQEAKIAogICAg
ICAgICAgICAgdGVzdEV4cGVjdGVkKCJ0ZXN0VHJhY2tBcmFiaWMuYWN0aXZlQ3Vlcy5sZW5ndGgi
LCAxKTsKICAgICAgICAgICAgIHRlc3RFeHBlY3RlZCgidGVzdFRyYWNrQXJhYmljLmFjdGl2ZUN1
ZXNbMF0udGV4dCIsICJBcmFiaWMiKTsKKworICAgICAgICAgICAgc2NoZWR1bGVOZXh0VGVzdCgp
OwogICAgICAgICB9CiAKLSAgICAgICAgZnVuY3Rpb24gdGVzdEN1ZVZpc2liaWxpdHkoKQorICAg
ICAgICBmdW5jdGlvbiB0ZXN0Q3VlVmlzaWJpbGl0eTEoKQogICAgICAgICB7CiAgICAgICAgICAg
ICBjb25zb2xlV3JpdGUoIiIpOwogICAgICAgICAgICAgY29uc29sZVdyaXRlKCIqKiBPbmx5IG9u
ZSBjdWUgc2hvdWxkIGJlIHZpc2libGUgKioiKTsKQEAgLTU2LDYgKzg1LDExIEBACiAgICAgICAg
ICAgICBjb25zb2xlV3JpdGUoIlNldCB0aGUgbW9kZSBvZiB0aGUgJ0VuZ2xpc2gnIHRyYWNrIHRv
IHNob3dpbmciKTsKICAgICAgICAgICAgIHRlc3RUcmFja0VuZ2xpc2gubW9kZSA9ICJzaG93aW5n
IjsKIAorICAgICAgICAgICAgc2NoZWR1bGVOZXh0VGVzdCgpOworICAgICAgICB9CisKKyAgICAg
ICAgZnVuY3Rpb24gdGVzdEN1ZVZpc2liaWxpdHkyKCkKKyAgICAgICAgewogICAgICAgICAgICAg
Y29uc29sZVdyaXRlKCIiKTsKICAgICAgICAgICAgIGNvbnNvbGVXcml0ZSgiKiogQm90aCBjdWVz
IHNob2xkIGJlIHZpc2libGUuICoqIik7CiAgICAgICAgICAgICB0ZXN0Q3VlRGlzcGxheUJveCA9
IHRleHRUcmFja0Rpc3BsYXlFbGVtZW50KHZpZGVvLCAnZGlzcGxheScsIDApOwpAQCAtNjMsMTMg
Kzk3LDggQEAKIAogICAgICAgICAgICAgdGVzdEN1ZURpc3BsYXlCb3ggPSB0ZXh0VHJhY2tEaXNw
bGF5RWxlbWVudCh2aWRlbywgJ2Rpc3BsYXknLCAxKTsKICAgICAgICAgICAgIHRlc3RFeHBlY3Rl
ZCgidGVzdEN1ZURpc3BsYXlCb3guaW5uZXJUZXh0IiwgIkVuZ2xpc2giKTsKLSAgICAgICAgfQog
Ci0gICAgICAgIGZ1bmN0aW9uIHJ1blRlc3RzKCkgewotICAgICAgICAgICAgYWRkVHJhY2tzKCk7
Ci0gICAgICAgICAgICB0ZXN0Q3VlQWN0aXZlU3RhdGUoKTsKLSAgICAgICAgICAgIHRlc3RDdWVW
aXNpYmlsaXR5KCk7Ci0gICAgICAgICAgICBlbmRUZXN0KCk7CisgICAgICAgICAgICBzY2hlZHVs
ZU5leHRUZXN0KCk7CiAgICAgICAgIH0KIAogICAgICAgICBmdW5jdGlvbiBsb2FkZWQoKQpAQCAt
NzksNyArMTA4LDcgQEAKICAgICAgICAgICAgIGZpbmRNZWRpYUVsZW1lbnQoKTsKICAgICAgICAg
ICAgIHZpZGVvLnNyYyA9IGZpbmRNZWRpYUZpbGUoJ3ZpZGVvJywgJy4uL2NvbnRlbnQvdGVzdCcp
OwogCi0gICAgICAgICAgICB3YWl0Rm9yRXZlbnQoJ2NhbnBsYXl0aHJvdWdoJywgcnVuVGVzdHMp
OworICAgICAgICAgICAgd2FpdEZvckV2ZW50KCdjYW5wbGF5dGhyb3VnaCcsIHNjaGVkdWxlTmV4
dFRlc3QpOwogICAgICAgICB9CiAKICAgICAgICAgPC9zY3JpcHQ+CkluZGV4OiBMYXlvdXRUZXN0
cy9tZWRpYS90cmFjay90cmFjay1pbi1iYW5kLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9tZWRpYS90cmFjay90cmFjay1pbi1iYW5kLWV4cGVjdGVkLnR4dAkocmV2aXNp
b24gMTQ3NDk5KQorKysgTGF5b3V0VGVzdHMvbWVkaWEvdHJhY2svdHJhY2staW4tYmFuZC1leHBl
Y3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEyLDEyICsxMiw4IEBAIEVWRU5UKGNhbnBsYXl0
aHJvdWdoKQogRVhQRUNURUQgKHZpZGVvLnRleHRUcmFja3MubGVuZ3RoID09ICcyJykgT0sKIFJV
TihpbmJhbmRUcmFjazEgPSB2aWRlby50ZXh0VHJhY2tzWzBdKQogUlVOKGluYmFuZFRyYWNrMiA9
IHZpZGVvLnRleHRUcmFja3NbMV0pCi1FWFBFQ1RFRCAoaW5iYW5kVHJhY2sxLm1vZGUgPT0gJ2Rp
c2FibGVkJykgT0sKLUVYUEVDVEVEIChpbmJhbmRUcmFjazEuY3VlcyA9PSAnbnVsbCcpIE9LCiBF
WFBFQ1RFRCAoaW5iYW5kVHJhY2sxLmxhbmd1YWdlID09ICdlbicpIE9LCiBFWFBFQ1RFRCAoaW5i
YW5kVHJhY2sxLmtpbmQgPT0gJ3N1YnRpdGxlcycpIE9LCi1FWFBFQ1RFRCAoaW5iYW5kVHJhY2sy
Lm1vZGUgPT0gJ2Rpc2FibGVkJykgT0sKLUVYUEVDVEVEIChpbmJhbmRUcmFjazIuY3VlcyA9PSAn
bnVsbCcpIE9LCiBFWFBFQ1RFRCAoaW5iYW5kVHJhY2syLmxhbmd1YWdlID09ICdmcicpIE9LCiBF
WFBFQ1RFRCAoaW5iYW5kVHJhY2syLmtpbmQgPT0gJ3N1YnRpdGxlcycpIE9LCiAKSW5kZXg6IExh
eW91dFRlc3RzL21lZGlhL3RyYWNrL3RyYWNrLWluLWJhbmQuaHRtbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9tZWRpYS90cmFjay90cmFjay1pbi1iYW5kLmh0bWwJKHJldmlzaW9uIDE0NzQ5
OSkKKysrIExheW91dFRlc3RzL21lZGlhL3RyYWNrL3RyYWNrLWluLWJhbmQuaHRtbAkod29ya2lu
ZyBjb3B5KQpAQCAtMjksMTIgKzI5LDggQEAKICAgICAgICAgICAgICAgICB0ZXN0RXhwZWN0ZWQo
InZpZGVvLnRleHRUcmFja3MubGVuZ3RoIiwgMik7CiAgICAgICAgICAgICAgICAgcnVuKCJpbmJh
bmRUcmFjazEgPSB2aWRlby50ZXh0VHJhY2tzWzBdIik7CiAgICAgICAgICAgICAgICAgcnVuKCJp
bmJhbmRUcmFjazIgPSB2aWRlby50ZXh0VHJhY2tzWzFdIik7Ci0gICAgICAgICAgICAgICAgdGVz
dEV4cGVjdGVkKCJpbmJhbmRUcmFjazEubW9kZSIsICJkaXNhYmxlZCIpOwotICAgICAgICAgICAg
ICAgIHRlc3RFeHBlY3RlZCgiaW5iYW5kVHJhY2sxLmN1ZXMiLCBudWxsKTsKICAgICAgICAgICAg
ICAgICB0ZXN0RXhwZWN0ZWQoImluYmFuZFRyYWNrMS5sYW5ndWFnZSIsICJlbiIpOwogICAgICAg
ICAgICAgICAgIHRlc3RFeHBlY3RlZCgiaW5iYW5kVHJhY2sxLmtpbmQiLCAic3VidGl0bGVzIik7
Ci0gICAgICAgICAgICAgICAgdGVzdEV4cGVjdGVkKCJpbmJhbmRUcmFjazIubW9kZSIsICJkaXNh
YmxlZCIpOwotICAgICAgICAgICAgICAgIHRlc3RFeHBlY3RlZCgiaW5iYW5kVHJhY2syLmN1ZXMi
LCBudWxsKTsKICAgICAgICAgICAgICAgICB0ZXN0RXhwZWN0ZWQoImluYmFuZFRyYWNrMi5sYW5n
dWFnZSIsICJmciIpOwogICAgICAgICAgICAgICAgIHRlc3RFeHBlY3RlZCgiaW5iYW5kVHJhY2sy
LmtpbmQiLCAic3VidGl0bGVzIik7CiAKSW5kZXg6IExheW91dFRlc3RzL21lZGlhL3RyYWNrL3Ry
YWNrLXVzZXItcHJlZmVyZW5jZXMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL21lZGlhL3RyYWNrL3RyYWNrLXVzZXItcHJlZmVyZW5jZXMtZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiAxNDc0OTkpCisrKyBMYXlvdXRUZXN0cy9tZWRpYS90cmFjay90cmFjay11c2VyLXByZWZl
cmVuY2VzLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTgsOSArMTgsOSBAQCBFWFBF
Q1RFRCAoZXZlbnQudGFyZ2V0LnJlYWR5U3RhdGUgPT0gJzInCiAKIFRlc3QgMzogc2VsZWN0ICdm
cicgdHJhY2sgZnJvbSBtZW51CiAtIHNob3cgY2FwdGlvbnMgbWVudS4KLUVYUEVDVEVEICh0cmFj
a01lbnVJdGVtc1ttZW51SW5kZXhGb3JMYW5ndWFnZSgnRnJlbmNoJyldLmNsYXNzTmFtZSA9PSAn
JykgT0sKLUVYUEVDVEVEICh0cmFja01lbnVJdGVtc1ttZW51SW5kZXhGb3JMYW5ndWFnZSgnRW5n
bGlzaCcpXS5jbGFzc05hbWUgPT0gJycpIE9LCi1FWFBFQ1RFRCAodHJhY2tNZW51SXRlbXNbbWVu
dUluZGV4Rm9yTGFuZ3VhZ2UoJ05vcndlZ2lhbicpXS5jbGFzc05hbWUgPT0gJ3NlbGVjdGVkJykg
T0sKK0VYUEVDVEVEICh0cmFja01lbnVJdGVtc1tpbmRleE9mTWVudUl0ZW1CZWdpbm5pbmdXaXRo
KCdGcmVuY2gnKV0uY2xhc3NOYW1lID09ICcnKSBPSworRVhQRUNURUQgKHRyYWNrTWVudUl0ZW1z
W2luZGV4T2ZNZW51SXRlbUJlZ2lubmluZ1dpdGgoJ0VuZ2xpc2gnKV0uY2xhc3NOYW1lID09ICcn
KSBPSworRVhQRUNURUQgKHRyYWNrTWVudUl0ZW1zW2luZGV4T2ZNZW51SXRlbUJlZ2lubmluZ1dp
dGgoJ05vcndlZ2lhbicpXS5jbGFzc05hbWUgPT0gJ3NlbGVjdGVkJykgT0sKIC0gY2xpY2sgb24g
J0ZyZW5jaCcgbWVudSBpdGVtLgogRVZFTlQobG9hZCkKIEVYUEVDVEVEIChldmVudC50YXJnZXQu
c3JjbGFuZyA9PSAnZnInKSBPSwpJbmRleDogTGF5b3V0VGVzdHMvbWVkaWEvdHJhY2svdHJhY2st
dXNlci1wcmVmZXJlbmNlcy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL21lZGlhL3Ry
YWNrL3RyYWNrLXVzZXItcHJlZmVyZW5jZXMuaHRtbAkocmV2aXNpb24gMTQ3NDk5KQorKysgTGF5
b3V0VGVzdHMvbWVkaWEvdHJhY2svdHJhY2stdXNlci1wcmVmZXJlbmNlcy5odG1sCSh3b3JraW5n
IGNvcHkpCkBAIC0yMyw1OSArMjMsMTMgQEAKICAgICAgICAgICAgICAgICB0aW1lciA9IHNldFRp
bWVvdXQobmV4dFN0ZXAsIDEwMCk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGZ1bmN0
aW9uIHRyYWNrTWVudUxpc3QoKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRyYWNr
TGlzdEVsZW1lbnQgPSBnZXRUcmFja0xpc3RFbGVtZW50KCk7Ci0gICAgICAgICAgICAgICAgaWYg
KCF0cmFja0xpc3RFbGVtZW50KQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAg
ICAgICAgICAgICAvLyBUcmFjayBsaXN0IHNob3VsZCBoYXZlIGEgPHVsPiB3aXRoIDxsaT4gY2hp
bGRyZW4gKE9uZSBvZiB0aGVtIGlzICJPZmYiKS4KLSAgICAgICAgICAgICAgICB2YXIgdHJhY2tM
aXN0ID0gdHJhY2tMaXN0RWxlbWVudC5xdWVyeVNlbGVjdG9yKCJ1bCIpOwotICAgICAgICAgICAg
ICAgIGlmICghdHJhY2tMaXN0KSB7Ci0gICAgICAgICAgICAgICAgICAgIGZhaWxUZXN0KCJDb3Vs
ZCBub3QgZmluZCBhIGNoaWxkIHVsIGVsZW1lbnQgaW4gdHJhY2sgbGlzdCBtZW51Iik7Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgdmFyIHRyYWNrTGlzdEl0ZW1zID0gdHJhY2tMaXN0LnF1ZXJ5U2VsZWN0b3JBbGwoImxpIik7
Ci0gICAgICAgICAgICAgICAgaWYgKCF0cmFja0xpc3RJdGVtcykgewotICAgICAgICAgICAgICAg
ICAgICBmYWlsVGVzdCgiQ291bGQgbm90IGZpbmQgY2hpbGQgbGkgZWxlbWVudHMgaW4gdHJhY2sg
bGlzdCBtZW51Iik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gdHJhY2tMaXN0SXRlbXM7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIGZ1bmN0aW9uIG1lbnVJbmRleEZvckxhbmd1YWdlKGxhbmd1YWdl
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHZhciB0cmFja01lbnVJdGVtcyA9IHRy
YWNrTWVudUxpc3QoKTsKLSAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdHJhY2tNZW51
SXRlbXMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRyYWNrTWVudUl0
ZW1zW2ldLnRleHRDb250ZW50LmluZGV4T2YobGFuZ3VhZ2UpID49IDApCi0gICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIChpIDwgdHJhY2tNZW51SXRlbXMubGVuZ3RoKSA/IGkgOiAtMTsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgZnVuY3Rpb24gc2VsZWN0Q2FwdGlvbk1lbnVJdGVtKGxhbmd1YWdlKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHZhciB0cmFja01lbnVJdGVtcyA9IHRyYWNr
TWVudUxpc3QoKTsKLSAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSBtZW51SW5kZXhGb3JMYW5n
dWFnZShsYW5ndWFnZSk7Ci0gICAgICAgICAgICAgICAgaWYgKGluZGV4IDwgMCkgewotICAgICAg
ICAgICAgICAgICAgICBmYWlsVGVzdCgiTWVudSBpdGVtICIgKyBsYW5ndWFnZSArICIgbm90IGZv
dW5kIGluIHRyYWNrIGxpc3QgbWVudS4iKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGNvbnNvbGVXcml0ZSgiLSBjbGlj
ayBvbiAnIiArIGxhbmd1YWdlICsgIicgbWVudSBpdGVtLiIpOwotICAgICAgICAgICAgICAgIHZh
ciBzZWxlY3RlZFRyYWNrSXRlbSA9IHRyYWNrTWVudUl0ZW1zW2luZGV4XTsKLSAgICAgICAgICAg
ICAgICB2YXIgYm91bmRpbmdSZWN0ID0gc2VsZWN0ZWRUcmFja0l0ZW0uZ2V0Qm91bmRpbmdDbGll
bnRSZWN0KCk7Ci0gICAgICAgICAgICAgICAgdmFyIHggPSBib3VuZGluZ1JlY3QubGVmdCArIGJv
dW5kaW5nUmVjdC53aWR0aCAvIDI7Ci0gICAgICAgICAgICAgICAgdmFyIHkgPSBib3VuZGluZ1Jl
Y3QudG9wICsgYm91bmRpbmdSZWN0LmhlaWdodCAvIDI7Ci0gICAgICAgICAgICAgICAgZXZlbnRT
ZW5kZXIubW91c2VNb3ZlVG8oeCwgeSk7Ci0gICAgICAgICAgICAgICAgZXZlbnRTZW5kZXIubW91
c2VEb3duKCk7Ci0gICAgICAgICAgICAgICAgZXZlbnRTZW5kZXIubW91c2VVcCgpOwotICAgICAg
ICAgICAgfQotCiAgICAgICAgICAgICBmdW5jdGlvbiB0cmFja0xvYWRlZCgpCiAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgY29uc29sZVdyaXRlKCJFVkVOVChsb2FkKSIpOworICAgICAg
ICAgICAgICAgIGlmIChleHBlY3RlZExhbmd1YWdlID09ICIiKSB7CisgICAgICAgICAgICAgICAg
ICAgIGZhaWxUZXN0KCInIiArIGV2ZW50LnRhcmdldC5zcmNsYW5nICsgIicgdHJhY2sgbG9hZGVk
IHVuZXhwZWN0ZWRseS4iKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICB0ZXN0RXhwZWN0ZWQoImV2ZW50LnRhcmdldC5zcmNs
YW5nIiwgZXhwZWN0ZWRMYW5ndWFnZSk7CiAgICAgICAgICAgICAgICAgdGVzdEV4cGVjdGVkKCJl
dmVudC50YXJnZXQucmVhZHlTdGF0ZSIsIEhUTUxUcmFja0VsZW1lbnQuTE9BREVEKTsKIApAQCAt
MTMwLDkgKzg0LDkgQEAKIAogICAgICAgICAgICAgICAgIGNhc2UgNDoKICAgICAgICAgICAgICAg
ICAgICAgdHJhY2tNZW51SXRlbXMgPSB0cmFja01lbnVMaXN0KCk7Ci0gICAgICAgICAgICAgICAg
ICAgIHRlc3RFeHBlY3RlZCgidHJhY2tNZW51SXRlbXNbbWVudUluZGV4Rm9yTGFuZ3VhZ2UoJ0Zy
ZW5jaCcpXS5jbGFzc05hbWUiLCAiIik7Ci0gICAgICAgICAgICAgICAgICAgIHRlc3RFeHBlY3Rl
ZCgidHJhY2tNZW51SXRlbXNbbWVudUluZGV4Rm9yTGFuZ3VhZ2UoJ0VuZ2xpc2gnKV0uY2xhc3NO
YW1lIiwgIiIpOwotICAgICAgICAgICAgICAgICAgICB0ZXN0RXhwZWN0ZWQoInRyYWNrTWVudUl0
ZW1zW21lbnVJbmRleEZvckxhbmd1YWdlKCdOb3J3ZWdpYW4nKV0uY2xhc3NOYW1lIiwgInNlbGVj
dGVkIik7CisgICAgICAgICAgICAgICAgICAgIHRlc3RFeHBlY3RlZCgidHJhY2tNZW51SXRlbXNb
aW5kZXhPZk1lbnVJdGVtQmVnaW5uaW5nV2l0aCgnRnJlbmNoJyldLmNsYXNzTmFtZSIsICIiKTsK
KyAgICAgICAgICAgICAgICAgICAgdGVzdEV4cGVjdGVkKCJ0cmFja01lbnVJdGVtc1tpbmRleE9m
TWVudUl0ZW1CZWdpbm5pbmdXaXRoKCdFbmdsaXNoJyldLmNsYXNzTmFtZSIsICIiKTsKKyAgICAg
ICAgICAgICAgICAgICAgdGVzdEV4cGVjdGVkKCJ0cmFja01lbnVJdGVtc1tpbmRleE9mTWVudUl0
ZW1CZWdpbm5pbmdXaXRoKCdOb3J3ZWdpYW4nKV0uY2xhc3NOYW1lIiwgInNlbGVjdGVkIik7CiAK
ICAgICAgICAgICAgICAgICAgICAgc2VsZWN0Q2FwdGlvbk1lbnVJdGVtKCJGcmVuY2giKTsKICAg
ICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRMYW5ndWFnZSA9ICdmcic7CkBAIC0xNTcsNiArMTEx
LDcgQEAKIAogICAgICAgICAgICAgICAgIGNhc2UgNzoKICAgICAgICAgICAgICAgICAgICAgc2Vs
ZWN0Q2FwdGlvbk1lbnVJdGVtKCJPZmYiKTsKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRM
YW5ndWFnZSA9ICcnOwogICAgICAgICAgICAgICAgICAgICBjcmVhdGVUcmFja0VsZW1lbnRzKFsg
J3J1JywgJ2pwJywgJ2VuJ10pOwogICAgICAgICAgICAgICAgICAgICB0aW1lciA9IHNldFRpbWVv
dXQobmV4dFN0ZXAsIDEwMCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpJbmRleDogTGF5
b3V0VGVzdHMvcGxhdGZvcm0vbWFjL21lZGlhL3ZpZGVvLWNvbnRyb2xzLWNhcHRpb25zLXRyYWNr
bWVudS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFj
L21lZGlhL3ZpZGVvLWNvbnRyb2xzLWNhcHRpb25zLXRyYWNrbWVudS1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDE0NzQ5OSkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9tZWRpYS92aWRlby1j
b250cm9scy1jYXB0aW9ucy10cmFja21lbnUtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBA
IC05LDggKzksOCBAQCBSVU4oaW50ZXJuYWxzLnNldFVzZXJQcmVmZXJyZWRMYW5ndWFnZXMoCiBS
VU4odmlkZW8uYWRkVGV4dFRyYWNrKCJjYXB0aW9ucyIsICJDb21tZW50YXJ5IiwgInJ1IikpCiAK
ICoqKiBUdXJuaW5nIGNhcHRpb25zIG9uCi1UaGVyZSBzaG91bGQgYmUgNSBpdGVtcyBpbiB0aGUg
bWVudS4KLUVYUEVDVEVEICh0cmFja0xpc3RJdGVtcy5sZW5ndGggPT0gJzUnKSBPSworVGhlcmUg
c2hvdWxkIGJlIDYgaXRlbXMgaW4gdGhlIG1lbnUuCitFWFBFQ1RFRCAodHJhY2tMaXN0SXRlbXMu
bGVuZ3RoID09ICc2JykgT0sKIEVYUEVDVEVEICh2aWRlby50ZXh0VHJhY2tzLmxlbmd0aCA9PSAn
NCcpIE9LCiBUcmFjayAwIHNob3VsZCBiZSBzaG93aW5nCiBFWFBFQ1RFRCAodmlkZW8udGV4dFRy
YWNrc1swXS5tb2RlID09ICdzaG93aW5nJykgT0sKQEAgLTI1LDggKzI1LDggQEAgRVhQRUNURUQg
KHRleHRUcmFja0Rpc3BsYXlFbGVtZW50KHZpZGVvLAogKioqIFJlbW92ZSBhIHRyYWNrLgogUlVO
KHZpZGVvLnJlbW92ZUNoaWxkKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoInRyYWNrIilbMF0p
KQogKioqIFR1cm5pbmcgY2FwdGlvbnMgb2ZmCi1UaGVyZSBzaG91bGQgYmUgNCBpdGVtcyBpbiB0
aGUgbWVudS4KLUVYUEVDVEVEICh0cmFja0xpc3RJdGVtcy5sZW5ndGggPT0gJzQnKSBPSworVGhl
cmUgc2hvdWxkIGJlIDUgaXRlbXMgaW4gdGhlIG1lbnUuCitFWFBFQ1RFRCAodHJhY2tMaXN0SXRl
bXMubGVuZ3RoID09ICc1JykgT0sKIEVYUEVDVEVEICh2aWRlby50ZXh0VHJhY2tzLmxlbmd0aCA9
PSAnMycpIE9LCiBUcmFjayAwIHNob3VsZCBiZSBkaXNhYmxlZAogRVhQRUNURUQgKHZpZGVvLnRl
eHRUcmFja3NbMF0ubW9kZSA9PSAnZGlzYWJsZWQnKSBPSwpJbmRleDogTGF5b3V0VGVzdHMvcGxh
dGZvcm0vbWFjL21lZGlhL3ZpZGVvLWNvbnRyb2xzLWNhcHRpb25zLXRyYWNrbWVudS1zb3J0ZWQt
ZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9tZWRp
YS92aWRlby1jb250cm9scy1jYXB0aW9ucy10cmFja21lbnUtc29ydGVkLWV4cGVjdGVkLnR4dAko
cmV2aXNpb24gMTQ3NDk5KQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL21lZGlhL3ZpZGVv
LWNvbnRyb2xzLWNhcHRpb25zLXRyYWNrbWVudS1zb3J0ZWQtZXhwZWN0ZWQudHh0CSh3b3JraW5n
IGNvcHkpCkBAIC04LDI1ICs4LDI3IEBAIFJVTihpbnRlcm5hbHMuc2V0VXNlclByZWZlcnJlZExh
bmd1YWdlcygKICoqIFRlc3Qgd2l0aCBwcmVmZXJyZWQgbGFuZ3VhZ2Ugc2V0IHRvIEVuZ2xpc2gs
IHRyYWNrIHR5cGUgc2V0IHRvIGNhcHRpb25zCiBSVU4oaW50ZXJuYWxzLnNldHRpbmdzLnNldFNo
b3VsZERpc3BsYXlUcmFja0tpbmQoJ0NhcHRpb25zJywgdHJ1ZSkpCiBFWFBFQ1RFRCAodHJhY2tN
ZW51SXRlbXNbMF0udGV4dENvbnRlbnQgPT0gJ09mZicpIE9LCi1FWFBFQ1RFRCAodHJhY2tNZW51
SXRlbXNbMV0udGV4dENvbnRlbnQgPT0gJ3UgKEVuZ2xpc2gpIFNESCcpIE9LCi1FWFBFQ1RFRCAo
dHJhY2tNZW51SXRlbXNbMl0udGV4dENvbnRlbnQgPT0gJ3kgKEVuZ2xpc2gtQXVzdHJhbGlhKSBT
REgnKSBPSwotRVhQRUNURUQgKHRyYWNrTWVudUl0ZW1zWzNdLnRleHRDb250ZW50ID09ICd2IChF
bmdsaXNoKScpIE9LCi1FWFBFQ1RFRCAodHJhY2tNZW51SXRlbXNbNF0udGV4dENvbnRlbnQgPT0g
J3ggKEVuZ2xpc2gtQXVzdHJhbGlhKScpIE9LCi1FWFBFQ1RFRCAodHJhY2tNZW51SXRlbXNbNV0u
dGV4dENvbnRlbnQgPT0gJ3cgKEphcGFuZXNlKSBTREgnKSBPSwotRVhQRUNURUQgKHRyYWNrTWVu
dUl0ZW1zWzZdLnRleHRDb250ZW50ID09ICd6IChKYXBhbmVzZSknKSBPSworRVhQRUNURUQgKHRy
YWNrTWVudUl0ZW1zWzFdLnRleHRDb250ZW50ID09ICdBdXRvbWF0aWMgKEVuZ2xpc2gpJykgT0sK
K0VYUEVDVEVEICh0cmFja01lbnVJdGVtc1syXS50ZXh0Q29udGVudCA9PSAndSAoRW5nbGlzaCkg
U0RIJykgT0sKK0VYUEVDVEVEICh0cmFja01lbnVJdGVtc1szXS50ZXh0Q29udGVudCA9PSAneSAo
RW5nbGlzaC1BdXN0cmFsaWEpIFNESCcpIE9LCitFWFBFQ1RFRCAodHJhY2tNZW51SXRlbXNbNF0u
dGV4dENvbnRlbnQgPT0gJ3YgKEVuZ2xpc2gpJykgT0sKK0VYUEVDVEVEICh0cmFja01lbnVJdGVt
c1s1XS50ZXh0Q29udGVudCA9PSAneCAoRW5nbGlzaC1BdXN0cmFsaWEpJykgT0sKK0VYUEVDVEVE
ICh0cmFja01lbnVJdGVtc1s2XS50ZXh0Q29udGVudCA9PSAndyAoSmFwYW5lc2UpIFNESCcpIE9L
CitFWFBFQ1RFRCAodHJhY2tNZW51SXRlbXNbN10udGV4dENvbnRlbnQgPT0gJ3ogKEphcGFuZXNl
KScpIE9LCiBFWFBFQ1RFRCAodmlkZW8udGV4dFRyYWNrcy5sZW5ndGggPT0gJzYnKSBPSwotRVhQ
RUNURUQgKHRyYWNrTWVudUl0ZW1zLmxlbmd0aCA9PSAnNycpIE9LCitFWFBFQ1RFRCAodHJhY2tN
ZW51SXRlbXMubGVuZ3RoID09ICc4JykgT0sKIAogKiogQ2hhbmdlIHByZWZlcnJlZCBsYW5ndWFn
ZSB0byBKYXBhbmVzZSwgY2hhbmdlIHByZWZlcmVuY2UgdG8gc3VidGl0bGVzCiBSVU4oaW50ZXJu
YWxzLnNldFVzZXJQcmVmZXJyZWRMYW5ndWFnZXMoWydqYSddKSkKIFJVTihpbnRlcm5hbHMuc2V0
dGluZ3Muc2V0U2hvdWxkRGlzcGxheVRyYWNrS2luZCgnQ2FwdGlvbnMnLCBmYWxzZSkpCiBSVU4o
aW50ZXJuYWxzLnNldHRpbmdzLnNldFNob3VsZERpc3BsYXlUcmFja0tpbmQoJ1N1YnRpdGxlcycs
IHRydWUpKQogRVhQRUNURUQgKHRyYWNrTWVudUl0ZW1zWzBdLnRleHRDb250ZW50ID09ICdPZmYn
KSBPSwotRVhQRUNURUQgKHRyYWNrTWVudUl0ZW1zWzFdLnRleHRDb250ZW50ID09ICd6IChKYXBh
bmVzZSknKSBPSwotRVhQRUNURUQgKHRyYWNrTWVudUl0ZW1zWzJdLnRleHRDb250ZW50ID09ICd2
IChFbmdsaXNoKScpIE9LCi1FWFBFQ1RFRCAodHJhY2tNZW51SXRlbXNbM10udGV4dENvbnRlbnQg
PT0gJ3ggKEVuZ2xpc2gtQXVzdHJhbGlhKScpIE9LCitFWFBFQ1RFRCAodHJhY2tNZW51SXRlbXNb
MV0udGV4dENvbnRlbnQgPT0gJ0F1dG9tYXRpYyAoSmFwYW5lc2UpJykgT0sKK0VYUEVDVEVEICh0
cmFja01lbnVJdGVtc1syXS50ZXh0Q29udGVudCA9PSAneiAoSmFwYW5lc2UpJykgT0sKK0VYUEVD
VEVEICh0cmFja01lbnVJdGVtc1szXS50ZXh0Q29udGVudCA9PSAndiAoRW5nbGlzaCknKSBPSwor
RVhQRUNURUQgKHRyYWNrTWVudUl0ZW1zWzRdLnRleHRDb250ZW50ID09ICd4IChFbmdsaXNoLUF1
c3RyYWxpYSknKSBPSwogRVhQRUNURUQgKHZpZGVvLnRleHRUcmFja3MubGVuZ3RoID09ICc2Jykg
T0sKLUVYUEVDVEVEICh0cmFja01lbnVJdGVtcy5sZW5ndGggPT0gJzQnKSBPSworRVhQRUNURUQg
KHRyYWNrTWVudUl0ZW1zLmxlbmd0aCA9PSAnNScpIE9LCiAKIEVORCBPRiBURVNUCiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>