<?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>121935</bug_id>
          
          <creation_ts>2013-09-25 19:08:20 -0700</creation_ts>
          <short_desc>[MediaStream] Cleanup platform interface</short_desc>
          <delta_ts>2013-11-14 07:39:04 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</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>
          
          <blocked>124288</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Carlson">eric.carlson</reporter>
          <assigned_to name="Eric Carlson">eric.carlson</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>hta</cc>
    
    <cc>jer.noble</cc>
    
    <cc>kangil.han</cc>
    
    <cc>rakuco</cc>
    
    <cc>thiago.lacerda</cc>
    
    <cc>tommyw</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>933323</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2013-09-25 19:08:20 -0700</bug_when>
    <thetext>The platform interface needs to be cleaned up, we don&apos;t need some left over chrome-isms, and some of the code can stand a bit of polishing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>933495</commentid>
    <comment_count>1</comment_count>
      <attachid>212708</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2013-09-26 07:53:33 -0700</bug_when>
    <thetext>Created attachment 212708
Proposed patch

Patch for the bots to chew on.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>933506</commentid>
    <comment_count>2</comment_count>
      <attachid>212712</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2013-09-26 08:09:57 -0700</bug_when>
    <thetext>Created attachment 212712
Updated patch

Rebased.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>933538</commentid>
    <comment_count>3</comment_count>
      <attachid>212712</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2013-09-26 09:20:18 -0700</bug_when>
    <thetext>Comment on attachment 212712
Updated patch

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

r=me, with nits.

&gt; Source/WebCore/Modules/mediastream/MediaStream.cpp:61
&gt; +static MediaStreamCenter*&amp; mediaStreamCenterOverride()
&gt; +{
&gt; +    static MediaStreamCenter* override;
&gt; +    return override;
&gt; +}
&gt; +
&gt; +MediaStreamCenter&amp; MediaStream::sharedStreamCenter()
&gt; +{
&gt; +    MediaStreamCenter* override = mediaStreamCenterOverride();
&gt; +    if (override)
&gt; +        return *override;
&gt; +
&gt; +    return MediaStreamCenter::shared();
&gt; +}
&gt; +    
&gt; +void MediaStream::setSharedStreamCenter(MediaStreamCenter* center)
&gt; +{
&gt; +    mediaStreamCenterOverride() = center;
&gt; +}
&gt; +

Seems like this should be in MediaStreamCenter and should override the return of MediaStreamCenter::instance().

&gt; Source/WebCore/Modules/mediastream/MediaStream.cpp:91
&gt; -    MediaStreamCenter::instance().didCreateMediaStream(descriptor.get());
&gt; +    MediaStream::sharedStreamCenter().didCreateMediaStream(descriptor.get());

Then, this wouldn&apos;t be necessary.

&gt; Source/WebCore/Modules/mediastream/MediaStreamTrack.cpp:182
&gt; -    if (!MediaStreamCenter::instance().getMediaStreamTrackSources(request.release()))
&gt; +    if (!MediaStream::sharedStreamCenter().getMediaStreamTrackSources(request.release()))

Ditto.

&gt; Source/WebCore/Modules/mediastream/MediaStreamTrack.cpp:214
&gt; -void MediaStreamTrack::didEndTrack()
&gt; +void MediaStreamTrack::trackEnded()

Why not MediaStreamTrack::trackDidEnd()? Especially since the client method was renamed from trackEnded() to trackDidEnd().

&gt; Source/WebCore/Modules/mediastream/MediaStreamTrack.cpp:217
&gt; +    // FIXME: this is wrong, the track shouldn&apos;t have to call the descriptor&apos;s client!
&gt; +    MediaStreamDescriptorClient* client = m_source ? m_source-&gt;stream()-&gt;client() : 0;

Bug #? :-)

&gt; Source/WebCore/Modules/webaudio/MediaStreamAudioDestinationNode.cpp:57
&gt; -    MediaStreamCenter::instance().didCreateMediaStream(m_stream-&gt;descriptor());
&gt; +    MediaStream::sharedStreamCenter().didCreateMediaStream(m_stream-&gt;descriptor());

One more.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>933583</commentid>
    <comment_count>4</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2013-09-26 10:42:37 -0700</bug_when>
    <thetext>Committed r156473: https://trac.webkit.org/r156473</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>212708</attachid>
            <date>2013-09-26 07:53:33 -0700</date>
            <delta_ts>2013-09-26 08:09:57 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>restructure_platform_2.txt</filename>
            <type>text/plain</type>
            <size>116076</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NjQ1NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0NSBAQAorMjAxMy0wOS0yNiAgRXJpYyBD
YXJsc29uICA8ZXJpYy5jYXJsc29uQGFwcGxlLmNvbT4KKworICAgICAgICBbTWVkaWFTdHJlYW1d
IENsZWFudXAgcGxhdGZvcm0gaW50ZXJmYWNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMjE5MzUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMgKE9PUFMhKS4KKworICAgICAgICAqIENN
YWtlTGlzdHMudHh0OiBSZW1vdmUgTWVkaWFTdHJlYW1Db21wb25lbnQuY3BwLgorICAgICAgICAq
IEdOVW1ha2VmaWxlLmxpc3QuYW06IFJlbW92ZSBNZWRpYVN0cmVhbUNvbXBvbmVudC5ofGNwcCBh
bmQgTWVkaWFTdHJlYW1Tb3VyY2VzUXVlcnlDbGllbnQuaC4gCisgICAgICAgICAgICBBZGQgTWVk
aWFTdHJlYW1Db25zdHJhaW50c1ZhbGlkYXRpb25DbGllbnQuaCBhbmQgTWVkaWFTdHJlYW1DcmVh
dGlvbkNsaWVudC5oLgorCisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVh
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjptZWRpYVN0cmVhbUNlbnRlck92ZXJyaWRlKTogTWFr
ZSBpdCBwb3NzaWJsZSB0byBvdmVycmlkZSB0aGUgc2hhcmVkIHN0cmVhbSBjZW50ZXIuIFdpbGwK
KyAgICAgICAgICAgIGJlIHVzZWQgZm9yIHRlc3RpbmcgaW4gYSBsYXRlciBwYXRjaC4KKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtOjpzaGFyZWRTdHJlYW1DZW50ZXIpOiBSZXR1cm4gY3Vy
cmVudCBzdHJlYW0gY2VudGVyLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW06OnNldFNo
YXJlZFN0cmVhbUNlbnRlcik6IE92ZXJyaWRlIGN1cnJlbnQgc3RyZWFtIGNlbnRlci4KKyAgICAg
ICAgKFdlYkNvcmU6OnByb2Nlc3NUcmFjayk6IER1cGxpY2F0ZSBNZWRpYVN0cmVhbVNvdXJjZSB3
aGVuIG5lY2Vzc2FyeSB0byB3b3JrIGFyb3VuZCBidWcgMTIxOTU0LgorICAgICAgICAoV2ViQ29y
ZTo6Y3JlYXRlRnJvbVNvdXJjZVZlY3RvcnMpOiBNZWRpYVN0cmVhbUNlbnRlcjo6aW5zdGFuY2Ug
LT4gTWVkaWFTdHJlYW06OnNoYXJlZFN0cmVhbUNlbnRlci4KKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhU3RyZWFtOjpNZWRpYVN0cmVhbSk6ICpDb21wb25lbnRzIC0+ICpTdHJlYW1zLgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFTdHJlYW06OnNldEVuZGVkKTogTmV3LgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFTdHJlYW06OnN0b3ApOiAgTWVkaWFTdHJlYW1DZW50ZXI6Omluc3RhbmNlIC0+IE1l
ZGlhU3RyZWFtOjpzaGFyZWRTdHJlYW1DZW50ZXIuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0
cmVhbTo6YWRkVHJhY2spOiBBcHBlbmQgdGhlIHRyYWNrIHBhcmFtZXRlciByYXRoZXIgdGhhbiBk
dXBsaWNhdGluZyBpdCwgYXMgcGVyIHNwZWMuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVh
bTo6cmVtb3ZlVHJhY2spOiAqQ29tcG9uZW50cyAtPiAqU3RyZWFtcy4KKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhU3RyZWFtOjp0cmFja0RpZEVuZCk6IFJlbmFtZWQgZnJvbSB0cmFja0VuZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW06OnN0cmVhbURpZEVuZCk6IFJlbmFtZWQgZnJv
bSBzdHJlYW1FbmRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtOjphZGRSZW1vdGVT
b3VyY2UpOiBSZW5hbWVkIGZyb20gYWRkUmVtb3RlVHJhY2suICpDb21wb25lbnRzIC0+ICpTdHJl
YW1zLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW06OnJlbW92ZVJlbW90ZVNvdXJjZSk6
IFJlbmFtZWQgZnJvbSByZW1vdmVSZW1vdGVUcmFjay4gKkNvbXBvbmVudHMgLT4gKlN0cmVhbXMu
CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbS5oOgorCisgICAgICAg
ICogTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVRyYWNrLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhU3RyZWFtVHJhY2s6OmNyZWF0ZSk6ICpDb21wb25lbnQgLT4gKlN0cmVhbS4K
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtVHJhY2s6Ok1lZGlhU3RyZWFtVHJhY2spOiBE
b24ndCBhc3N1bWUgc291cmNlIGlzIHZhbGlkLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJl
YW1UcmFjazo6fk1lZGlhU3RyZWFtVHJhY2spOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhU3RyZWFtVHJhY2s6OmtpbmQpOiBEaXR0by4gQXRvbWljU3RyaW5nIC0+IGNvbnN0IEF0b21p
Y1N0cmluZyYuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbVRyYWNrOjpzZXRTb3VyY2Up
OiBNb3ZlZCBmcm9tIC5oIGZpbGUuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbVRyYWNr
OjppZCk6IERvbid0IGFzc3VtZSBzb3VyY2UgaXMgdmFsaWQuIENyZWF0ZSBJRCB3aGVuIHRoZSBz
b3VyY2UgZG9lc24ndCBoYXZlIG9uZS4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtVHJh
Y2s6OmxhYmVsKTogRG9uJ3QgYXNzdW1lIHNvdXJjZSBpcyB2YWxpZC4KKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhU3RyZWFtVHJhY2s6OmVuYWJsZWQpOiAKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
U3RyZWFtVHJhY2s6OnNldEVuYWJsZWQpOiAqQ29tcG9uZW50IC0+ICpTdHJlYW0uIE1lZGlhU3Ry
ZWFtQ2VudGVyOjppbnN0YW5jZSAtPiBNZWRpYVN0cmVhbTo6c2hhcmVkU3RyZWFtQ2VudGVyLgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1UcmFjazo6cmVhZHlTdGF0ZSk6ICJtdXRlZCIg
aXMgbm90IGEgcmVhZHlTdGF0ZSwgYnV0ICJuZXciIGlzLgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFTdHJlYW1UcmFjazo6Z2V0U291cmNlcyk6IE1lZGlhU3RyZWFtQ2VudGVyOjppbnN0YW5jZSAt
PiBNZWRpYVN0cmVhbTo6c2hhcmVkU3RyZWFtQ2VudGVyLgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFTdHJlYW1UcmFjazo6ZW5kZWQpOiAqQ29tcG9uZW50IC0+ICpTdHJlYW0uCisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVN0cmVhbVRyYWNrOjpzb3VyY2VDaGFuZ2VkU3RhdGUpOiBEaXNwYXRjaCAi
c3RhcnRlZCIgYW5kICJ1bm11dGVkIiBldmVudHMuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0
cmVhbVRyYWNrOjp0cmFja0VuZGVkKTogUmVuYW1lZCBmcm9tIGRpZEVuZFRyYWNrLiBtX2NvbXBv
bmVudCAtPiBtX3NvdXJjZS4KKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU3Ry
ZWFtVHJhY2suaDoKKworICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vUlRDRFRNRlNlbmRl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSVENEVE1GU2VuZGVyOjpjcmVhdGUpOiB0cmFjay0+
Y29tcG9uZW50KCkgLT4gdHJhY2stPnNvdXJjZSgpOworCisgICAgICAgICogTW9kdWxlcy9tZWRp
YXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSVENQZWVy
Q29ubmVjdGlvbjo6ZGlkUmVtb3ZlUmVtb3RlU3RyZWFtKTogRGl0dG8uCisKKyAgICAgICAgKiBN
b2R1bGVzL21lZGlhc3RyZWFtL1JUQ1N0YXRzUmVxdWVzdEltcGwuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UlRDU3RhdHNSZXF1ZXN0SW1wbDo6UlRDU3RhdHNSZXF1ZXN0SW1wbCk6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6UlRDU3RhdHNSZXF1ZXN0SW1wbDo6Y29tcG9uZW50KTogUmVtb3Zl
ZCwgaXQgd2FzIHVudXNlZC4KKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1N0YXRz
UmVxdWVzdEltcGwuaDoKKworICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vVXNlck1lZGlh
Q2xpZW50Lmg6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9Vc2VyTWVkaWFDb250cm9s
bGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpVc2VyTWVkaWFDb250cm9sbGVyOjpyZXF1ZXN0UGVy
bWlzc2lvbik6IFJlbmFtZWQgZnJvbSByZXF1ZXN0VXNlck1lZGlhLCBnZXQgcmlkIG9mIHNvdXJj
ZQorICAgICAgICAgICAgdmVjdG9yIHBhcmFtZXRlcnMuCisgICAgICAgIChXZWJDb3JlOjpVc2Vy
TWVkaWFDb250cm9sbGVyOjpjYW5jZWxSZXF1ZXN0KTogUmVuYW1lZCBmcm9tIGNhbmNlbFVzZXJN
ZWRpYVJlcXVlc3QuCisKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL1VzZXJNZWRpYVJl
cXVlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VPcHRpb25zKTogTWVkaWFDb25zdHJh
aW50c0ltcGwgLT4gTWVkaWFDb25zdHJhaW50cy4KKyAgICAgICAgKFdlYkNvcmU6OlVzZXJNZWRp
YVJlcXVlc3Q6OmNyZWF0ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6VXNlck1lZGlhUmVx
dWVzdDo6VXNlck1lZGlhUmVxdWVzdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6VXNlck1l
ZGlhUmVxdWVzdDo6c2VjdXJpdHlPcmlnaW4pOiBOZXcuCisgICAgICAgIChXZWJDb3JlOjpVc2Vy
TWVkaWFSZXF1ZXN0OjpzdGFydCk6IFJlcXVlc3QgY29uc3RyYWludCB2YWxpZGF0aW9uLgorICAg
ICAgICAoV2ViQ29yZTo6VXNlck1lZGlhUmVxdWVzdDo6Y29uc3RyYWludHNWYWxpZGF0ZWQpOiBO
ZXcuIENhbGxiYWNrIGZyb20gbWVkaWEgZW5naW5lIHdoZW4gY29uc3RyYWludHMKKyAgICAgICAg
ICAgIGNhbiBiZSBzdXBwb3J0ZWQuCisgICAgICAgIChXZWJDb3JlOjpVc2VyTWVkaWFSZXF1ZXN0
OjpyZXF1ZXN0UGVybWlzc2lvbik6IE5ldy4gQXNrIHVzZXIgbWVkaWEgY2xpZW50IGZvciBwZXJt
aXNzaW9uIHRvIGFjY2VzcyBtZWRpYS4KKyAgICAgICAgKFdlYkNvcmU6OlVzZXJNZWRpYVJlcXVl
c3Q6OnVzZXJNZWRpYUFjY2Vzc0dyYW50ZWQpOiBOZXcuIEFjY2VzcyBoYXMgYmVlbiBncmFudGVk
LgorICAgICAgICAoV2ViQ29yZTo6VXNlck1lZGlhUmVxdWVzdDo6Y3JlYXRlTWVkaWFTdHJlYW0p
OiBOZXcuIEFsbG93ZWQgdG8gYWNjZXNzIG1lZGlhLCBhc2sgbWVkaWEgZW5naW5lCisgICAgICAg
ICAgICB0byBjcmVhdGUgc3RyZWFtIHNvdXJjZXMuCisgICAgICAgIChXZWJDb3JlOjpVc2VyTWVk
aWFSZXF1ZXN0Ojp1c2VyTWVkaWFBY2Nlc3NEZW5pZWQpOiBOZXcuIFVzZXIgbWVkaWEgY2xpZW50
IGhhcyBkZW5pZWQgYWNjZXNzIHJlcXVlc3QuCisgICAgICAgIChXZWJDb3JlOjpVc2VyTWVkaWFS
ZXF1ZXN0Ojpjb25zdHJhaW50c0ludmFsaWQpOiBOZXcuIE1lZGlhIGVuZ2luZSBjYW4gbm90IHN1
cHBvcnQgY29uc3RyYWludHMuCisgICAgICAgIChXZWJDb3JlOjpVc2VyTWVkaWFSZXF1ZXN0Ojpk
aWRDcmVhdGVTdHJlYW0pOiBOZXcuIE1lZGlhIGVuZ2luZSBoYXMgY3JlYXRlZCBzdHJlYW0gc291
cmNlcy4KKyAgICAgICAgKFdlYkNvcmU6OlVzZXJNZWRpYVJlcXVlc3Q6OmNhbGxTdWNjZXNzSGFu
ZGxlcik6IE5ldy4gQ3JlYXRlIHN0cmVhbSBmcm9tIHNvdXJjZXMgYW5kIGNhbGwgc3VjY2VzcyBo
YW5kbGVyLgorICAgICAgICAoV2ViQ29yZTo6VXNlck1lZGlhUmVxdWVzdDo6ZmFpbGVkVG9DcmVh
dGVTdHJlYW1XaXRoQ29uc3RyYWludHNFcnJvcik6IFJlbmFtZWQgZnJvbSBjb25zdHJhaW50RmFp
bHVyZS4KKyAgICAgICAgKFdlYkNvcmU6OlVzZXJNZWRpYVJlcXVlc3Q6OmZhaWxlZFRvQ3JlYXRl
U3RyZWFtV2l0aFBlcm1pc3Npb25FcnJvcik6IFJlbmFtZWQgZnJvbSBwZXJtaXNzaW9uRmFpbHVy
ZS4KKyAgICAgICAgKFdlYkNvcmU6OlVzZXJNZWRpYVJlcXVlc3Q6OmNhbGxFcnJvckhhbmRsZXIp
OiAKKyAgICAgICAgKFdlYkNvcmU6OlVzZXJNZWRpYVJlcXVlc3Q6OmNvbnRleHREZXN0cm95ZWQp
OiBjYW5jZWxVc2VyTWVkaWFSZXF1ZXN0IC0+IGNhbmNlbFJlcXVlc3QuCisgICAgICAgICogTW9k
dWxlcy9tZWRpYXN0cmVhbS9Vc2VyTWVkaWFSZXF1ZXN0Lmg6CisKKyAgICAgICAgKiBNb2R1bGVz
L3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0NvbnRl
eHQ6OmNyZWF0ZU1lZGlhU3RyZWFtU291cmNlKTogbG9jYWxBdWRpby0+Y29tcG9uZW50KCktPnNv
dXJjZSgpIC0+IGxvY2FsQXVkaW8tPnNvdXJjZSgpLgorCisgICAgICAgICogTW9kdWxlcy93ZWJh
dWRpby9NZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhU3RyZWFtQXVkaW9EZXN0aW5hdGlvbk5vZGU6Ok1lZGlhU3RyZWFtQXVkaW9EZXN0
aW5hdGlvbk5vZGUpOiBNZWRpYVN0cmVhbVNvdXJjZTo6VHlwZUF1ZGlvIC0+CisgICAgICAgICAg
ICBNZWRpYVN0cmVhbVNvdXJjZTo6QXVkaW8sIE1lZGlhU3RyZWFtU291cmNlOjpSZWFkeVN0YXRl
TGl2ZSAtPiBNZWRpYVN0cmVhbVNvdXJjZTo6TGl2ZS4KKyAgICAgICAgICAgIE1lZGlhU3RyZWFt
Q2VudGVyOjppbnN0YW5jZSAtPiBNZWRpYVN0cmVhbTo6c2hhcmVkU3RyZWFtQ2VudGVyLgorCisg
ICAgICAgICogV2ViQ29yZS5leHAuaW46IEV4cG9ydCBuZXcgc3ltYm9scy4KKworICAgICAgICAq
IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogQWRkIG5ldyBmaWxlcyBhbmQgcmVt
b3ZlIGRlbGV0ZWQgZmlsZXMuCisKKyAgICAgICAgKiBkb20vRXZlbnROYW1lcy5oOiBEZWZpbmUg
InN0YXJ0ZWQiIGV2ZW50LgorCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFT
dHJlYW1DZW50ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1DZW50ZXI6OmVu
ZExvY2FsTWVkaWFTdHJlYW0pOiBOZXZlciBjYWxsIHRoZSBkZXNjcmlwdG9yIGNsaWVudCwgYWx3
YXlzIGNhbGwKKyAgICAgICAgICAgIHRoZSBkZXNjcmlwdG9yIGFuZCBsZXQgaXQgZGVhbCB3aXRo
IHRoZSBjbGllbnQuCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1D
ZW50ZXIuaDoKKworICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtQ29t
cG9uZW50LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRp
YVN0cmVhbUNvbXBvbmVudC5oOiBSZW1vdmVkLgorCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFz
dHJlYW0vTWVkaWFTdHJlYW1Db25zdHJhaW50c1ZhbGlkYXRpb25DbGllbnQuaDogQWRkZWQuCisg
ICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1DcmVhdGlvbkNsaWVudC5o
OiBBZGRlZC4KKworICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtRGVz
Y3JpcHRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbURlc2NyaXB0b3I6OmFk
ZFNvdXJjZSk6ICpDb21wb25lbnQgLT4gKlNvdXJjZS4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
U3RyZWFtRGVzY3JpcHRvcjo6cmVtb3ZlU291cmNlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVN0cmVhbURlc2NyaXB0b3I6OmFkZFJlbW90ZVNvdXJjZSk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1EZXNjcmlwdG9yOjpyZW1vdmVSZW1vdGVTb3VyY2UpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtRGVzY3JpcHRvcjo6TWVkaWFTdHJl
YW1EZXNjcmlwdG9yKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbURlc2Ny
aXB0b3I6OnNldEVuZGVkKTogRGl0dG8uIFNldCBzb3VyY2UgcmVhZHlTdGF0ZXMgdG8gRW5kZWQu
CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1EZXNjcmlwdG9yLmg6
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVNvdXJjZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbVNvdXJjZTo6TWVkaWFTdHJlYW1Tb3VyY2Up
OiBJbml0aWFsaXplIG5ldyBtZW1iZXIgdmFyaWFibGVzLgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFTdHJlYW1Tb3VyY2U6OnNldFJlYWR5U3RhdGUpOiBFYXJseSByZXR1cm4gd2hlbiB0aGUgc3Rh
dGUgaGFzbid0IGNoYW5nZWQuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbVNvdXJjZTo6
c2V0U3RyZWFtKTogTmV3LgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1Tb3VyY2U6OnNl
dE11dGVkKTogTmV3LgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFt
U291cmNlLmg6CisKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVNv
dXJjZXNRdWVyeUNsaWVudC5oOiBSZW1vdmVkLgorCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFz
dHJlYW0vUlRDUGVlckNvbm5lY3Rpb25IYW5kbGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vbWVk
aWFzdHJlYW0vUlRDU3RhdHNSZXF1ZXN0Lmg6CisKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0
cmVhbS9ibGFja2JlcnJ5L01lZGlhU3RyZWFtQ2VudGVyQmxhY2tCZXJyeS5jcHA6IFVwZGF0ZSBm
b3IgbmV3IE1lZGlhU3RyZWFtQ2VudGVyIEFQSS4KKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0
cmVhbS9ibGFja2JlcnJ5L01lZGlhU3RyZWFtQ2VudGVyQmxhY2tCZXJyeS5oOgorCisgICAgICAg
ICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01lZGlhU3RyZWFtQ2VudGVyR1N0cmVh
bWVyLmNwcDogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVy
L01lZGlhU3RyZWFtQ2VudGVyR1N0cmVhbWVyLmg6CisKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRp
YXN0cmVhbS9tYWMvTWVkaWFTdHJlYW1DZW50ZXJNYWMuY3BwOiBEaXR0by4KKyAgICAgICAgKiBw
bGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvTWVkaWFTdHJlYW1DZW50ZXJNYWMuaDoKKwogMjAxMy0w
OS0yNiAgTWloYWkgTWFlcmVhbiAgPG1tYWVyZWFuQGFkb2JlLmNvbT4KIAogICAgICAgICBbQ1NT
IFJlZ2lvbnNdIFRoZSBsYXllcnMgZnJvbSB0aGUgZmxvdyB0aHJlYWQgc2hvdWxkIGJlIGNvbGxl
Y3RlZCB1bmRlciB0aGUgcmVnaW9ucycgbGF5ZXJzLgpJbmRleDogU291cmNlL1dlYkNvcmUvQ01h
a2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJ
KHJldmlzaW9uIDE1NjIzOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMDIyLDcgKzIwMjIsNiBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAg
cGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCV3JpdGVCYXRjaC5jcHAKIAogICAgIHBsYXRmb3JtL21l
ZGlhc3RyZWFtL01lZGlhU3RyZWFtQ2VudGVyLmNwcAotICAgIHBsYXRmb3JtL21lZGlhc3RyZWFt
L01lZGlhU3RyZWFtQ29tcG9uZW50LmNwcAogICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlh
U3RyZWFtRGVzY3JpcHRvci5jcHAKICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVh
bVNvdXJjZS5jcHAKICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9SVENJY2VDYW5kaWRhdGVEZXNj
cmlwdG9yLmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCShyZXZpc2lvbiAx
NTYyMzgpCisrKyBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNv
cHkpCkBAIC01NDc3LDEzICs1NDc3LDEyIEBAIHdlYmNvcmVfcGxhdGZvcm1fc291cmNlcyArPSBc
CiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFDb25zdHJhaW50cy5o
IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbUNlbnRl
ci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFt
Q2VudGVyLmggXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3Ry
ZWFtQ29tcG9uZW50LmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
TWVkaWFTdHJlYW1Db21wb25lbnQuaCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vTWVkaWFTdHJlYW1Db25zdHJhaW50c1ZhbGlkYXRpb25DbGllbnQuaCBcCisJU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1DcmVhdGlvbkNsaWVudC5o
IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbURlc2Ny
aXB0b3IuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0
cmVhbURlc2NyaXB0b3IuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
TWVkaWFTdHJlYW1Tb3VyY2UuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9NZWRpYVN0cmVhbVNvdXJjZS5oIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9NZWRpYVN0cmVhbVNvdXJjZXNRdWVyeUNsaWVudC5oIFwKIAlTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVRyYWNrU291cmNlc1JlcXVlc3RDbGll
bnQuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUlRDQ29uZmlndXJh
dGlvbi5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SVENEVE1GU2Vu
ZGVySGFuZGxlci5oIFwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCShyZXZpc2lvbiAxNTYyMzgp
CisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkod29ya2luZyBjb3B5KQpAQCAtMjgx
MiwzICsyODEyLDEwIEBAIF93a0lzUHVibGljU3VmZml4CiBfX1pON1dlYkNvcmUxNVJlc291cmNl
UmVxdWVzdDEzcGFydGl0aW9uTmFtZUVSS04zV1RGNlN0cmluZ0UKIF93a0NhY2hlUGFydGl0aW9u
S2V5CiAjZW5kaWYKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCitfX1pON1dlYkNvcmUxNlVz
ZXJNZWRpYVJlcXVlc3QyMnVzZXJNZWRpYUFjY2Vzc0dyYW50ZWRFdgorX19aTjdXZWJDb3JlMTZV
c2VyTWVkaWFSZXF1ZXN0MjF1c2VyTWVkaWFBY2Nlc3NEZW5pZWRFdgorX19aTjdXZWJDb3JlMThw
cm92aWRlVXNlck1lZGlhVG9FUE5TXzRQYWdlRVBOU18xNVVzZXJNZWRpYUNsaWVudEUKK19fWk5L
N1dlYkNvcmUxNlVzZXJNZWRpYVJlcXVlc3QxNHNlY3VyaXR5T3JpZ2luRXYKKyNlbmRpZgpJbmRl
eDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVh
bS5jcHAJKHJldmlzaW9uIDE1NjIzOCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFz
dHJlYW0vTWVkaWFTdHJlYW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNyBAQAogLyoK
ICAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIEVyaWNzc29uIEFCLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzQsOSArMzUsMzAgQEAKICNp
bmNsdWRlICJNZWRpYVN0cmVhbVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiTWVkaWFTdHJlYW1Tb3Vy
Y2UuaCIKICNpbmNsdWRlICJNZWRpYVN0cmVhbVRyYWNrRXZlbnQuaCIKKyNpbmNsdWRlIDx3dGYv
TmV2ZXJEZXN0cm95ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitzdGF0aWMgTWVkaWFT
dHJlYW1DZW50ZXIqJiBtZWRpYVN0cmVhbUNlbnRlck92ZXJyaWRlKCkKK3sKKyAgICBzdGF0aWMg
TWVkaWFTdHJlYW1DZW50ZXIqIG92ZXJyaWRlOworICAgIHJldHVybiBvdmVycmlkZTsKK30KKwor
TWVkaWFTdHJlYW1DZW50ZXImIE1lZGlhU3RyZWFtOjpzaGFyZWRTdHJlYW1DZW50ZXIoKQorewor
ICAgIE1lZGlhU3RyZWFtQ2VudGVyKiBvdmVycmlkZSA9IG1lZGlhU3RyZWFtQ2VudGVyT3ZlcnJp
ZGUoKTsKKyAgICBpZiAob3ZlcnJpZGUpCisgICAgICAgIHJldHVybiAqb3ZlcnJpZGU7CisKKyAg
ICByZXR1cm4gTWVkaWFTdHJlYW1DZW50ZXI6OnNoYXJlZCgpOworfQorICAgIAordm9pZCBNZWRp
YVN0cmVhbTo6c2V0U2hhcmVkU3RyZWFtQ2VudGVyKE1lZGlhU3RyZWFtQ2VudGVyKiBjZW50ZXIp
Cit7CisgICAgbWVkaWFTdHJlYW1DZW50ZXJPdmVycmlkZSgpID0gY2VudGVyOworfQorCiBzdGF0
aWMgYm9vbCBjb250YWluc1NvdXJjZShNZWRpYVN0cmVhbVNvdXJjZVZlY3RvciYgc291cmNlVmVj
dG9yLCBNZWRpYVN0cmVhbVNvdXJjZSogc291cmNlKQogewogICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgc291cmNlVmVjdG9yLnNpemUoKTsgKytpKSB7CkBAIC01MSwxNSArNzMsMjIgQEAgc3Rh
dGljIHZvaWQgcHJvY2Vzc1RyYWNrKE1lZGlhU3RyZWFtVHJhYwogICAgIGlmICh0cmFjay0+ZW5k
ZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgTWVkaWFTdHJlYW1Tb3VyY2UqIHNvdXJjZSA9
IHRyYWNrLT5jb21wb25lbnQoKS0+c291cmNlKCk7Ci0gICAgaWYgKCFjb250YWluc1NvdXJjZShz
b3VyY2VWZWN0b3IsIHNvdXJjZSkpCi0gICAgICAgIHNvdXJjZVZlY3Rvci5hcHBlbmQoc291cmNl
KTsKKyAgICBNZWRpYVN0cmVhbVNvdXJjZSogc291cmNlID0gdHJhY2stPnNvdXJjZSgpOworICAg
IGlmICghY29udGFpbnNTb3VyY2Uoc291cmNlVmVjdG9yLCBzb3VyY2UpKSB7CisgICAgICAgIGlm
IChzb3VyY2UtPnN0cmVhbSgpKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogdGhpcyBzaG91bGQg
bm90IGJlIG5lY2Vzc2FyeSBiZWNhdXNlIHRyYWNrcyBhbmQgc3RyZWFtcyBtdXN0IGJlIGFibGUg
dG8gc2hhcmUgc291cmNlcywgYnV0IG91ciBjb2RlCisgICAgICAgICAgICAvLyBjdXJyZW5sdHkg
YXNzdW1lcyBlYWNoIHNvdXJjZSBpcyBhdHRhY2hlZCB0byBqdXN0IG9uZSB0cmFjay4KKyAgICAg
ICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjE5NTQK
KyAgICAgICAgICAgIHNvdXJjZVZlY3Rvci5hcHBlbmQoTWVkaWFTdHJlYW1Tb3VyY2U6OmNyZWF0
ZShzb3VyY2UtPmlkKCksIHNvdXJjZS0+dHlwZSgpLCBzb3VyY2UtPm5hbWUoKSwgc291cmNlLT5y
ZWFkeVN0YXRlKCksIHNvdXJjZS0+cmVxdWlyZXNBdWRpb0NvbnN1bWVyKCkpLmdldCgpKTsKKyAg
ICAgICAgfSBlbHNlCisgICAgICAgICAgICBzb3VyY2VWZWN0b3IuYXBwZW5kKHNvdXJjZSk7Cisg
ICAgfQogfQogCiBzdGF0aWMgUGFzc1JlZlB0cjxNZWRpYVN0cmVhbT4gY3JlYXRlRnJvbVNvdXJj
ZVZlY3RvcnMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgTWVkaWFTdHJl
YW1Tb3VyY2VWZWN0b3ImIGF1ZGlvU291cmNlcywgY29uc3QgTWVkaWFTdHJlYW1Tb3VyY2VWZWN0
b3ImIHZpZGVvU291cmNlcykKIHsKICAgICBSZWZQdHI8TWVkaWFTdHJlYW1EZXNjcmlwdG9yPiBk
ZXNjcmlwdG9yID0gTWVkaWFTdHJlYW1EZXNjcmlwdG9yOjpjcmVhdGUoYXVkaW9Tb3VyY2VzLCB2
aWRlb1NvdXJjZXMpOwotICAgIE1lZGlhU3RyZWFtQ2VudGVyOjppbnN0YW5jZSgpLmRpZENyZWF0
ZU1lZGlhU3RyZWFtKGRlc2NyaXB0b3IuZ2V0KCkpOworICAgIE1lZGlhU3RyZWFtOjpzaGFyZWRT
dHJlYW1DZW50ZXIoKS5kaWRDcmVhdGVNZWRpYVN0cmVhbShkZXNjcmlwdG9yLmdldCgpKTsKIAog
ICAgIHJldHVybiBNZWRpYVN0cmVhbTo6Y3JlYXRlKGNvbnRleHQsIGRlc2NyaXB0b3IucmVsZWFz
ZSgpKTsKIH0KQEAgLTExMiwxNSArMTQxLDE1IEBAIE1lZGlhU3RyZWFtOjpNZWRpYVN0cmVhbShT
Y3JpcHRFeGVjdXRpb24KIHsKICAgICBtX2Rlc2NyaXB0b3ItPnNldENsaWVudCh0aGlzKTsKIAot
ICAgIHNpemVfdCBudW1iZXJPZkF1ZGlvVHJhY2tzID0gbV9kZXNjcmlwdG9yLT5udW1iZXJPZkF1
ZGlvQ29tcG9uZW50cygpOworICAgIHNpemVfdCBudW1iZXJPZkF1ZGlvVHJhY2tzID0gbV9kZXNj
cmlwdG9yLT5udW1iZXJPZkF1ZGlvU3RyZWFtcygpOwogICAgIG1fYXVkaW9UcmFja3MucmVzZXJ2
ZUNhcGFjaXR5KG51bWJlck9mQXVkaW9UcmFja3MpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbnVtYmVyT2ZBdWRpb1RyYWNrczsgaSsrKQotICAgICAgICBtX2F1ZGlvVHJhY2tzLmFwcGVu
ZChNZWRpYVN0cmVhbVRyYWNrOjpjcmVhdGUoY29udGV4dCwgbV9kZXNjcmlwdG9yLT5hdWRpb0Nv
bXBvbmVudChpKSkpOworICAgICAgICBtX2F1ZGlvVHJhY2tzLmFwcGVuZChNZWRpYVN0cmVhbVRy
YWNrOjpjcmVhdGUoY29udGV4dCwgbV9kZXNjcmlwdG9yLT5hdWRpb1N0cmVhbXMoaSkpKTsKIAot
ICAgIHNpemVfdCBudW1iZXJPZlZpZGVvVHJhY2tzID0gbV9kZXNjcmlwdG9yLT5udW1iZXJPZlZp
ZGVvQ29tcG9uZW50cygpOworICAgIHNpemVfdCBudW1iZXJPZlZpZGVvVHJhY2tzID0gbV9kZXNj
cmlwdG9yLT5udW1iZXJPZlZpZGVvU3RyZWFtcygpOwogICAgIG1fdmlkZW9UcmFja3MucmVzZXJ2
ZUNhcGFjaXR5KG51bWJlck9mVmlkZW9UcmFja3MpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbnVtYmVyT2ZWaWRlb1RyYWNrczsgaSsrKQotICAgICAgICBtX3ZpZGVvVHJhY2tzLmFwcGVu
ZChNZWRpYVN0cmVhbVRyYWNrOjpjcmVhdGUoY29udGV4dCwgbV9kZXNjcmlwdG9yLT52aWRlb0Nv
bXBvbmVudChpKSkpOworICAgICAgICBtX3ZpZGVvVHJhY2tzLmFwcGVuZChNZWRpYVN0cmVhbVRy
YWNrOjpjcmVhdGUoY29udGV4dCwgbV9kZXNjcmlwdG9yLT52aWRlb1N0cmVhbXMoaSkpKTsKIH0K
IAogTWVkaWFTdHJlYW06On5NZWRpYVN0cmVhbSgpCkBAIC0xMzMsMTMgKzE2MiwyMCBAQCBib29s
IE1lZGlhU3RyZWFtOjplbmRlZCgpIGNvbnN0CiAgICAgcmV0dXJuIG1fc3RvcHBlZCB8fCBtX2Rl
c2NyaXB0b3ItPmVuZGVkKCk7CiB9CiAKK3ZvaWQgTWVkaWFTdHJlYW06OnNldEVuZGVkKCkKK3sK
KyAgICBpZiAoZW5kZWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fZGVzY3JpcHRvci0+c2V0
RW5kZWQoKTsKK30KKwogdm9pZCBNZWRpYVN0cmVhbTo6c3RvcCgpCiB7CiAgICAgaWYgKGVuZGVk
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIE1lZGlhU3RyZWFtQ2VudGVyOjppbnN0YW5jZSgp
LmRpZFN0b3BMb2NhbE1lZGlhU3RyZWFtKGRlc2NyaXB0b3IoKSk7Ci0gICAgc3RyZWFtRW5kZWQo
KTsKKyAgICBNZWRpYVN0cmVhbTo6c2hhcmVkU3RyZWFtQ2VudGVyKCkuZGlkU3RvcExvY2FsTWVk
aWFTdHJlYW0oZGVzY3JpcHRvcigpKTsKKyAgICBzZXRFbmRlZCgpOwogfQogCiB2b2lkIE1lZGlh
U3RyZWFtOjphZGRUcmFjayhQYXNzUmVmUHRyPE1lZGlhU3RyZWFtVHJhY2s+IHBycFRyYWNrLCBF
eGNlcHRpb25Db2RlJiBlYykKQEAgLTE1NSwyNCArMTkxLDE5IEBAIHZvaWQgTWVkaWFTdHJlYW06
OmFkZFRyYWNrKFBhc3NSZWZQdHI8TWUKICAgICB9CiAKICAgICBSZWZQdHI8TWVkaWFTdHJlYW1U
cmFjaz4gdHJhY2sgPSBwcnBUcmFjazsKLQogICAgIGlmIChnZXRUcmFja0J5SWQodHJhY2stPmlk
KCkpKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZWZQdHI8TWVkaWFTdHJlYW1Db21wb25lbnQ+
IGNvbXBvbmVudCA9IE1lZGlhU3RyZWFtQ29tcG9uZW50OjpjcmVhdGUobV9kZXNjcmlwdG9yLmdl
dCgpLCB0cmFjay0+Y29tcG9uZW50KCktPnNvdXJjZSgpKTsKLSAgICBSZWZQdHI8TWVkaWFTdHJl
YW1UcmFjaz4gbmV3VHJhY2sgPSBNZWRpYVN0cmVhbVRyYWNrOjpjcmVhdGUoc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpLCBjb21wb25lbnQuZ2V0KCkpOwotCi0gICAgc3dpdGNoIChjb21wb25lbnQt
PnNvdXJjZSgpLT50eXBlKCkpIHsKLSAgICBjYXNlIE1lZGlhU3RyZWFtU291cmNlOjpUeXBlQXVk
aW86Ci0gICAgICAgIG1fYXVkaW9UcmFja3MuYXBwZW5kKG5ld1RyYWNrKTsKKyAgICBzd2l0Y2gg
KHRyYWNrLT5zb3VyY2UoKS0+dHlwZSgpKSB7CisgICAgY2FzZSBNZWRpYVN0cmVhbVNvdXJjZTo6
QXVkaW86CisgICAgICAgIG1fYXVkaW9UcmFja3MuYXBwZW5kKHRyYWNrKTsKICAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBNZWRpYVN0cmVhbVNvdXJjZTo6VHlwZVZpZGVvOgotICAgICAgICBtX3Zp
ZGVvVHJhY2tzLmFwcGVuZChuZXdUcmFjayk7CisgICAgY2FzZSBNZWRpYVN0cmVhbVNvdXJjZTo6
VmlkZW86CisgICAgICAgIG1fdmlkZW9UcmFja3MuYXBwZW5kKHRyYWNrKTsKICAgICAgICAgYnJl
YWs7CiAgICAgfQogCi0gICAgbV9kZXNjcmlwdG9yLT5hZGRDb21wb25lbnQoY29tcG9uZW50LnJl
bGVhc2UoKSk7Ci0gICAgTWVkaWFTdHJlYW1DZW50ZXI6Omluc3RhbmNlKCkuZGlkQWRkTWVkaWFT
dHJlYW1UcmFjayhtX2Rlc2NyaXB0b3IuZ2V0KCksIG5ld1RyYWNrLT5jb21wb25lbnQoKSk7Cisg
ICAgTWVkaWFTdHJlYW06OnNoYXJlZFN0cmVhbUNlbnRlcigpLmRpZEFkZE1lZGlhU3RyZWFtVHJh
Y2sodHJhY2stPnNvdXJjZSgpKTsKIH0KIAogdm9pZCBNZWRpYVN0cmVhbTo6cmVtb3ZlVHJhY2so
UGFzc1JlZlB0cjxNZWRpYVN0cmVhbVRyYWNrPiBwcnBUcmFjaywgRXhjZXB0aW9uQ29kZSYgZWMp
CkBAIC0xOTAsMTMgKzIyMSwxMyBAQCB2b2lkIE1lZGlhU3RyZWFtOjpyZW1vdmVUcmFjayhQYXNz
UmVmUHRyCiAgICAgUmVmUHRyPE1lZGlhU3RyZWFtVHJhY2s+IHRyYWNrID0gcHJwVHJhY2s7CiAK
ICAgICBzaXplX3QgcG9zID0gbm90Rm91bmQ7Ci0gICAgc3dpdGNoICh0cmFjay0+Y29tcG9uZW50
KCktPnNvdXJjZSgpLT50eXBlKCkpIHsKLSAgICBjYXNlIE1lZGlhU3RyZWFtU291cmNlOjpUeXBl
QXVkaW86CisgICAgc3dpdGNoICh0cmFjay0+c291cmNlKCktPnR5cGUoKSkgeworICAgIGNhc2Ug
TWVkaWFTdHJlYW1Tb3VyY2U6OkF1ZGlvOgogICAgICAgICBwb3MgPSBtX2F1ZGlvVHJhY2tzLmZp
bmQodHJhY2spOwogICAgICAgICBpZiAocG9zICE9IG5vdEZvdW5kKQogICAgICAgICAgICAgbV9h
dWRpb1RyYWNrcy5yZW1vdmUocG9zKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBNZWRpYVN0
cmVhbVNvdXJjZTo6VHlwZVZpZGVvOgorICAgIGNhc2UgTWVkaWFTdHJlYW1Tb3VyY2U6OlZpZGVv
OgogICAgICAgICBwb3MgPSBtX3ZpZGVvVHJhY2tzLmZpbmQodHJhY2spOwogICAgICAgICBpZiAo
cG9zICE9IG5vdEZvdW5kKQogICAgICAgICAgICAgbV92aWRlb1RyYWNrcy5yZW1vdmUocG9zKTsK
QEAgLTIwNiwxMiArMjM3LDEyIEBAIHZvaWQgTWVkaWFTdHJlYW06OnJlbW92ZVRyYWNrKFBhc3NS
ZWZQdHIKICAgICBpZiAocG9zID09IG5vdEZvdW5kKQogICAgICAgICByZXR1cm47CiAKLSAgICBt
X2Rlc2NyaXB0b3ItPnJlbW92ZUNvbXBvbmVudCh0cmFjay0+Y29tcG9uZW50KCkpOworICAgIG1f
ZGVzY3JpcHRvci0+cmVtb3ZlU291cmNlKHRyYWNrLT5zb3VyY2UoKSk7CiAKICAgICBpZiAoIW1f
YXVkaW9UcmFja3Muc2l6ZSgpICYmICFtX3ZpZGVvVHJhY2tzLnNpemUoKSkKLSAgICAgICAgbV9k
ZXNjcmlwdG9yLT5zZXRFbmRlZCgpOworICAgICAgICBzZXRFbmRlZCgpOwogCi0gICAgTWVkaWFT
dHJlYW1DZW50ZXI6Omluc3RhbmNlKCkuZGlkUmVtb3ZlTWVkaWFTdHJlYW1UcmFjayhtX2Rlc2Ny
aXB0b3IuZ2V0KCksIHRyYWNrLT5jb21wb25lbnQoKSk7CisgICAgTWVkaWFTdHJlYW06OnNoYXJl
ZFN0cmVhbUNlbnRlcigpLmRpZFJlbW92ZU1lZGlhU3RyZWFtVHJhY2sodHJhY2stPnNvdXJjZSgp
KTsKIH0KIAogTWVkaWFTdHJlYW1UcmFjayogTWVkaWFTdHJlYW06OmdldFRyYWNrQnlJZChTdHJp
bmcgaWQpCkBAIC0yMjksNyArMjYwLDcgQEAgTWVkaWFTdHJlYW1UcmFjayogTWVkaWFTdHJlYW06
OmdldFRyYWNrQgogICAgIHJldHVybiAwOwogfQogCi12b2lkIE1lZGlhU3RyZWFtOjp0cmFja0Vu
ZGVkKCkKK3ZvaWQgTWVkaWFTdHJlYW06OnRyYWNrRGlkRW5kKCkKIHsKICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG1fYXVkaW9UcmFja3Muc2l6ZSgpOyArK2kpCiAgICAgICAgIGlmICghbV9h
dWRpb1RyYWNrc1tpXS0+ZW5kZWQoKSkKQEAgLTIzOSwxNSArMjcwLDE0IEBAIHZvaWQgTWVkaWFT
dHJlYW06OnRyYWNrRW5kZWQoKQogICAgICAgICBpZiAoIW1fdmlkZW9UcmFja3NbaV0tPmVuZGVk
KCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgCi0gICAgc3RyZWFtRW5kZWQoKTsKKyAgICBz
ZXRFbmRlZCgpOwogfQogCi12b2lkIE1lZGlhU3RyZWFtOjpzdHJlYW1FbmRlZCgpCit2b2lkIE1l
ZGlhU3RyZWFtOjpzdHJlYW1EaWRFbmQoKQogewogICAgIGlmIChlbmRlZCgpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBtX2Rlc2NyaXB0b3ItPnNldEVuZGVkKCk7CiAgICAgc2NoZWR1bGVEaXNw
YXRjaEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmVuZGVkRXZlbnQsIGZhbHNlLCBm
YWxzZSkpOwogfQogCkBAIC0yNzcsNDYgKzMwNyw0NiBAQCBFdmVudFRhcmdldERhdGEmIE1lZGlh
U3RyZWFtOjplbnN1cmVFdmVuCiAgICAgcmV0dXJuIG1fZXZlbnRUYXJnZXREYXRhOwogfQogCi12
b2lkIE1lZGlhU3RyZWFtOjphZGRSZW1vdGVUcmFjayhNZWRpYVN0cmVhbUNvbXBvbmVudCogY29t
cG9uZW50KQordm9pZCBNZWRpYVN0cmVhbTo6YWRkUmVtb3RlU291cmNlKE1lZGlhU3RyZWFtU291
cmNlKiBzb3VyY2UpCiB7Ci0gICAgQVNTRVJUKGNvbXBvbmVudCAmJiAhY29tcG9uZW50LT5zdHJl
YW0oKSk7CisgICAgQVNTRVJUKHNvdXJjZSk7CiAgICAgaWYgKGVuZGVkKCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIGNvbXBvbmVudC0+c2V0U3RyZWFtKGRlc2NyaXB0b3IoKSk7CisgICAgc291
cmNlLT5zZXRTdHJlYW0oZGVzY3JpcHRvcigpKTsKIAotICAgIFJlZlB0cjxNZWRpYVN0cmVhbVRy
YWNrPiB0cmFjayA9IE1lZGlhU3RyZWFtVHJhY2s6OmNyZWF0ZShzY3JpcHRFeGVjdXRpb25Db250
ZXh0KCksIGNvbXBvbmVudCk7Ci0gICAgc3dpdGNoIChjb21wb25lbnQtPnNvdXJjZSgpLT50eXBl
KCkpIHsKLSAgICBjYXNlIE1lZGlhU3RyZWFtU291cmNlOjpUeXBlQXVkaW86CisgICAgUmVmUHRy
PE1lZGlhU3RyZWFtVHJhY2s+IHRyYWNrID0gTWVkaWFTdHJlYW1UcmFjazo6Y3JlYXRlKHNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKSwgc291cmNlKTsKKyAgICBzd2l0Y2ggKHNvdXJjZS0+dHlwZSgp
KSB7CisgICAgY2FzZSBNZWRpYVN0cmVhbVNvdXJjZTo6QXVkaW86CiAgICAgICAgIG1fYXVkaW9U
cmFja3MuYXBwZW5kKHRyYWNrKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBNZWRpYVN0cmVh
bVNvdXJjZTo6VHlwZVZpZGVvOgorICAgIGNhc2UgTWVkaWFTdHJlYW1Tb3VyY2U6OlZpZGVvOgog
ICAgICAgICBtX3ZpZGVvVHJhY2tzLmFwcGVuZCh0cmFjayk7CiAgICAgICAgIGJyZWFrOwogICAg
IH0KLSAgICBtX2Rlc2NyaXB0b3ItPmFkZENvbXBvbmVudChjb21wb25lbnQpOworICAgIG1fZGVz
Y3JpcHRvci0+YWRkU291cmNlKHNvdXJjZSk7CiAKICAgICBzY2hlZHVsZURpc3BhdGNoRXZlbnQo
TWVkaWFTdHJlYW1UcmFja0V2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmFkZHRyYWNrRXZlbnQs
IGZhbHNlLCBmYWxzZSwgdHJhY2spKTsKIH0KIAotdm9pZCBNZWRpYVN0cmVhbTo6cmVtb3ZlUmVt
b3RlVHJhY2soTWVkaWFTdHJlYW1Db21wb25lbnQqIGNvbXBvbmVudCkKK3ZvaWQgTWVkaWFTdHJl
YW06OnJlbW92ZVJlbW90ZVNvdXJjZShNZWRpYVN0cmVhbVNvdXJjZSogc291cmNlKQogewogICAg
IGlmIChlbmRlZCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBNZWRpYVN0cmVhbVRyYWNrVmVj
dG9yKiB0cmFja3MgPSAwOwotICAgIHN3aXRjaCAoY29tcG9uZW50LT5zb3VyY2UoKS0+dHlwZSgp
KSB7Ci0gICAgY2FzZSBNZWRpYVN0cmVhbVNvdXJjZTo6VHlwZUF1ZGlvOgorICAgIHN3aXRjaCAo
c291cmNlLT50eXBlKCkpIHsKKyAgICBjYXNlIE1lZGlhU3RyZWFtU291cmNlOjpBdWRpbzoKICAg
ICAgICAgdHJhY2tzID0gJm1fYXVkaW9UcmFja3M7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
TWVkaWFTdHJlYW1Tb3VyY2U6OlR5cGVWaWRlbzoKKyAgICBjYXNlIE1lZGlhU3RyZWFtU291cmNl
OjpWaWRlbzoKICAgICAgICAgdHJhY2tzID0gJm1fdmlkZW9UcmFja3M7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KIAogICAgIHNpemVfdCBpbmRleCA9IG5vdEZvdW5kOwogICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgdHJhY2tzLT5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAoKCp0cmFja3Mp
W2ldLT5jb21wb25lbnQoKSA9PSBjb21wb25lbnQpIHsKKyAgICAgICAgaWYgKCgqdHJhY2tzKVtp
XS0+c291cmNlKCkgPT0gc291cmNlKSB7CiAgICAgICAgICAgICBpbmRleCA9IGk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMzI0LDcgKzM1NCw3IEBAIHZvaWQgTWVkaWFTdHJl
YW06OnJlbW92ZVJlbW90ZVRyYWNrKE1lZGkKICAgICBpZiAoaW5kZXggPT0gbm90Rm91bmQpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIG1fZGVzY3JpcHRvci0+cmVtb3ZlQ29tcG9uZW50KGNvbXBv
bmVudCk7CisgICAgbV9kZXNjcmlwdG9yLT5yZW1vdmVTb3VyY2Uoc291cmNlKTsKIAogICAgIFJl
ZlB0cjxNZWRpYVN0cmVhbVRyYWNrPiB0cmFjayA9ICgqdHJhY2tzKVtpbmRleF07CiAgICAgdHJh
Y2tzLT5yZW1vdmUoaW5kZXgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0
cmVhbS9NZWRpYVN0cmVhbS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bWVkaWFzdHJlYW0vTWVkaWFTdHJlYW0uaAkocmV2aXNpb24gMTU2MjM4KQorKysgU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDExIEVyaWNzc29uIEFCLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDEsNiAr
NDIsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIE1lZGlhU3RyZWFtQ2VudGVy
OworCiBjbGFzcyBNZWRpYVN0cmVhbSA6IHB1YmxpYyBSZWZDb3VudGVkPE1lZGlhU3RyZWFtPiwg
cHVibGljIFVSTFJlZ2lzdHJhYmxlLCBwdWJsaWMgU2NyaXB0V3JhcHBhYmxlLCBwdWJsaWMgTWVk
aWFTdHJlYW1EZXNjcmlwdG9yQ2xpZW50LCBwdWJsaWMgRXZlbnRUYXJnZXQsIHB1YmxpYyBDb250
ZXh0RGVzdHJ1Y3Rpb25PYnNlcnZlciB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8
TWVkaWFTdHJlYW0+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CkBAIC00OSw2ICs1
Miw5IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxNZWRpYVN0cmVhbT4gY3JlYXRl
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPE1lZGlhU3RyZWFtRGVzY3JpcHRv
cj4pOwogICAgIHZpcnR1YWwgfk1lZGlhU3RyZWFtKCk7CiAKKyAgICBzdGF0aWMgTWVkaWFTdHJl
YW1DZW50ZXImIHNoYXJlZFN0cmVhbUNlbnRlcigpOworICAgIHN0YXRpYyB2b2lkIHNldFNoYXJl
ZFN0cmVhbUNlbnRlcihNZWRpYVN0cmVhbUNlbnRlciopOworCiAgICAgU3RyaW5nIGlkKCkgY29u
c3QgeyByZXR1cm4gbV9kZXNjcmlwdG9yLT5pZCgpOyB9CiAKICAgICB2b2lkIGFkZFRyYWNrKFBh
c3NSZWZQdHI8TWVkaWFTdHJlYW1UcmFjaz4sIEV4Y2VwdGlvbkNvZGUmKTsKQEAgLTU5LDE2ICs2
NSwxMyBAQCBwdWJsaWM6CiAgICAgTWVkaWFTdHJlYW1UcmFja1ZlY3RvciBnZXRWaWRlb1RyYWNr
cygpIGNvbnN0IHsgcmV0dXJuIG1fdmlkZW9UcmFja3M7IH0KIAogICAgIGJvb2wgZW5kZWQoKSBj
b25zdDsKKyAgICB2b2lkIHNldEVuZGVkKCk7CiAgICAgdm9pZCBzdG9wKCk7CiAKICAgICBERUZJ
TkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKGVuZGVkKTsKICAgICBERUZJTkVfQVRUUklCVVRF
X0VWRU5UX0xJU1RFTkVSKGFkZHRyYWNrKTsKICAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJ
U1RFTkVSKHJlbW92ZXRyYWNrKTsKIAotICAgIC8vIE1lZGlhU3RyZWFtRGVzY3JpcHRvckNsaWVu
dAotICAgIHZpcnR1YWwgdm9pZCB0cmFja0VuZGVkKCkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2
b2lkIHN0cmVhbUVuZGVkKCkgT1ZFUlJJREU7Ci0KICAgICBNZWRpYVN0cmVhbURlc2NyaXB0b3Iq
IGRlc2NyaXB0b3IoKSBjb25zdCB7IHJldHVybiBtX2Rlc2NyaXB0b3IuZ2V0KCk7IH0KIAogICAg
IC8vIEV2ZW50VGFyZ2V0CkBAIC05MiwxMyArOTUsMTcgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1
YWwgdm9pZCBjb250ZXh0RGVzdHJveWVkKCk7CiAKIHByaXZhdGU6CisgICAgLy8gTWVkaWFTdHJl
YW1EZXNjcmlwdG9yQ2xpZW50CisgICAgdmlydHVhbCB2b2lkIHRyYWNrRGlkRW5kKCkgT1ZFUlJJ
REU7CisgICAgdmlydHVhbCB2b2lkIHN0cmVhbURpZEVuZCgpIE9WRVJSSURFOworICAgIAogICAg
IC8vIEV2ZW50VGFyZ2V0CiAgICAgdmlydHVhbCB2b2lkIHJlZkV2ZW50VGFyZ2V0KCkgT1ZFUlJJ
REUgeyByZWYoKTsgfQogICAgIHZpcnR1YWwgdm9pZCBkZXJlZkV2ZW50VGFyZ2V0KCkgT1ZFUlJJ
REUgeyBkZXJlZigpOyB9CiAKICAgICAvLyBNZWRpYVN0cmVhbURlc2NyaXB0b3JDbGllbnQKLSAg
ICB2aXJ0dWFsIHZvaWQgYWRkUmVtb3RlVHJhY2soTWVkaWFTdHJlYW1Db21wb25lbnQqKSBPVkVS
UklERTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlUmVtb3RlVHJhY2soTWVkaWFTdHJlYW1Db21w
b25lbnQqKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkUmVtb3RlU291cmNlKE1lZGlh
U3RyZWFtU291cmNlKikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZVJlbW90ZVNv
dXJjZShNZWRpYVN0cmVhbVNvdXJjZSopIE9WRVJSSURFOwogCiAgICAgdm9pZCBzY2hlZHVsZURp
c3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4pOwogICAgIHZvaWQgc2NoZWR1bGVkRXZlbnRU
aW1lckZpcmVkKFRpbWVyPE1lZGlhU3RyZWFtPiopOwpAQCAtMTA3LDEyICsxMTQsMTIgQEAgcHJp
dmF0ZToKIAogICAgIEV2ZW50VGFyZ2V0RGF0YSBtX2V2ZW50VGFyZ2V0RGF0YTsKIAorICAgIFJl
ZlB0cjxNZWRpYVN0cmVhbURlc2NyaXB0b3I+IG1fZGVzY3JpcHRvcjsKICAgICBNZWRpYVN0cmVh
bVRyYWNrVmVjdG9yIG1fYXVkaW9UcmFja3M7CiAgICAgTWVkaWFTdHJlYW1UcmFja1ZlY3RvciBt
X3ZpZGVvVHJhY2tzOwotICAgIFJlZlB0cjxNZWRpYVN0cmVhbURlc2NyaXB0b3I+IG1fZGVzY3Jp
cHRvcjsKIAogICAgIFRpbWVyPE1lZGlhU3RyZWFtPiBtX3NjaGVkdWxlZEV2ZW50VGltZXI7Ci0g
ICAgVmVjdG9yPFJlZlB0cjxFdmVudD4gPiBtX3NjaGVkdWxlZEV2ZW50czsKKyAgICBWZWN0b3I8
UmVmUHRyPEV2ZW50Pj4gbV9zY2hlZHVsZWRFdmVudHM7CiB9OwogCiB0eXBlZGVmIFZlY3RvcjxS
ZWZQdHI8TWVkaWFTdHJlYW0+ID4gTWVkaWFTdHJlYW1WZWN0b3I7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtVHJhY2suY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1UcmFjay5j
cHAJKHJldmlzaW9uIDE1NjIzOCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJl
YW0vTWVkaWFTdHJlYW1UcmFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw3IEBACiAv
KgogICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgRXJpY3Nzb24gQUIuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCw0NSArMjksNjQgQEAKIAogI2lm
IEVOQUJMRShNRURJQV9TVFJFQU0pCiAKKyNpbmNsdWRlICJEaWN0aW9uYXJ5LmgiCiAjaW5jbHVk
ZSAiRXZlbnQuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiTWVkaWFT
dHJlYW0uaCIKICNpbmNsdWRlICJNZWRpYVN0cmVhbUNlbnRlci5oIgotI2luY2x1ZGUgIk1lZGlh
U3RyZWFtQ29tcG9uZW50LmgiCisjaW5jbHVkZSAiTWVkaWFTdHJlYW1EZXNjcmlwdG9yLmgiCiAj
aW5jbHVkZSAiTWVkaWFTdHJlYW1UcmFja1NvdXJjZXNDYWxsYmFjay5oIgogI2luY2x1ZGUgIk1l
ZGlhU3RyZWFtVHJhY2tTb3VyY2VzUmVxdWVzdC5oIgorI2luY2x1ZGUgIlVVSUQuaCIKICNpbmNs
dWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1QYXNz
UmVmUHRyPE1lZGlhU3RyZWFtVHJhY2s+IE1lZGlhU3RyZWFtVHJhY2s6OmNyZWF0ZShTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBNZWRpYVN0cmVhbUNvbXBvbmVudCogY29tcG9uZW50
KQorUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVRyYWNrPiBNZWRpYVN0cmVhbVRyYWNrOjpjcmVhdGUo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgRGljdGlvbmFyeSYgdmlkZW9D
b25zdHJhaW50cykKIHsKLSAgICBSZWZQdHI8TWVkaWFTdHJlYW1UcmFjaz4gdHJhY2sgPSBhZG9w
dFJlZihuZXcgTWVkaWFTdHJlYW1UcmFjayhjb250ZXh0LCBjb21wb25lbnQpKTsKLSAgICB0cmFj
ay0+c3VzcGVuZElmTmVlZGVkKCk7CisgICAgUmVmUHRyPE1lZGlhU3RyZWFtVHJhY2s+IHRyYWNr
ID0gYWRvcHRSZWYobmV3IE1lZGlhU3RyZWFtVHJhY2soY29udGV4dCwgMCwgJnZpZGVvQ29uc3Ry
YWludHMpKTsKICAgICByZXR1cm4gdHJhY2sucmVsZWFzZSgpOwogfQogCi1NZWRpYVN0cmVhbVRy
YWNrOjpNZWRpYVN0cmVhbVRyYWNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIE1l
ZGlhU3RyZWFtQ29tcG9uZW50KiBjb21wb25lbnQpCitQYXNzUmVmUHRyPE1lZGlhU3RyZWFtVHJh
Y2s+IE1lZGlhU3RyZWFtVHJhY2s6OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250
ZXh0LCBNZWRpYVN0cmVhbVNvdXJjZSogc291cmNlKQoreworICAgIFJlZlB0cjxNZWRpYVN0cmVh
bVRyYWNrPiB0cmFjayA9IGFkb3B0UmVmKG5ldyBNZWRpYVN0cmVhbVRyYWNrKGNvbnRleHQsIHNv
dXJjZSwgMCkpOworICAgIHJldHVybiB0cmFjay5yZWxlYXNlKCk7Cit9CisKK01lZGlhU3RyZWFt
VHJhY2s6Ok1lZGlhU3RyZWFtVHJhY2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwg
TWVkaWFTdHJlYW1Tb3VyY2UqIHNvdXJjZSwgY29uc3QgRGljdGlvbmFyeSopCiAgICAgOiBBY3Rp
dmVET01PYmplY3QoY29udGV4dCkKLSAgICAsIG1fY29tcG9uZW50KGNvbXBvbmVudCkKKyAgICAs
IG1fc291cmNlKHNvdXJjZSkKKyAgICAsIG1fcmVhZHlTdGF0ZShNZWRpYVN0cmVhbVNvdXJjZTo6
TmV3KQogICAgICwgbV9zdG9wcGVkKGZhbHNlKQorICAgICwgbV9lbmFibGVkKHRydWUpCisgICAg
LCBtX211dGVkKGZhbHNlKQogewotICAgIG1fY29tcG9uZW50LT5zb3VyY2UoKS0+YWRkT2JzZXJ2
ZXIodGhpcyk7CisgICAgc3VzcGVuZElmTmVlZGVkKCk7CisgICAgaWYgKG1fc291cmNlKSB7Cisg
ICAgICAgIG1fc291cmNlLT5hZGRPYnNlcnZlcih0aGlzKTsKKyAgICAgICAgbV9tdXRlZCA9IG1f
c291cmNlLT5tdXRlZCgpOworICAgIH0KIH0KIAogTWVkaWFTdHJlYW1UcmFjazo6fk1lZGlhU3Ry
ZWFtVHJhY2soKQogewotICAgIG1fY29tcG9uZW50LT5zb3VyY2UoKS0+cmVtb3ZlT2JzZXJ2ZXIo
dGhpcyk7CisgICAgaWYgKG1fc291cmNlKQorICAgICAgICBtX3NvdXJjZS0+cmVtb3ZlT2JzZXJ2
ZXIodGhpcyk7CiB9CiAKLUF0b21pY1N0cmluZyBNZWRpYVN0cmVhbVRyYWNrOjpraW5kKCkgY29u
c3QKK2NvbnN0IEF0b21pY1N0cmluZyYgTWVkaWFTdHJlYW1UcmFjazo6a2luZCgpIGNvbnN0CiB7
CisgICAgaWYgKCFtX3NvdXJjZSkKKyAgICAgICAgcmV0dXJuIGVtcHR5QXRvbTsKKwogICAgIHN0
YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGF1ZGlvS2luZCgiYXVkaW8iLCBBdG9t
aWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8QXRvbWljU3RyaW5nPiB2aWRlb0tpbmQoInZpZGVvIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1
Y3RGcm9tTGl0ZXJhbCk7CiAKLSAgICBzd2l0Y2ggKG1fY29tcG9uZW50LT5zb3VyY2UoKS0+dHlw
ZSgpKSB7Ci0gICAgY2FzZSBNZWRpYVN0cmVhbVNvdXJjZTo6VHlwZUF1ZGlvOgorICAgIHN3aXRj
aCAobV9zb3VyY2UtPnR5cGUoKSkgeworICAgIGNhc2UgTWVkaWFTdHJlYW1Tb3VyY2U6OkF1ZGlv
OgogICAgICAgICByZXR1cm4gYXVkaW9LaW5kOwotICAgIGNhc2UgTWVkaWFTdHJlYW1Tb3VyY2U6
OlR5cGVWaWRlbzoKKyAgICBjYXNlIE1lZGlhU3RyZWFtU291cmNlOjpWaWRlbzoKICAgICAgICAg
cmV0dXJuIHZpZGVvS2luZDsKICAgICB9CiAKQEAgLTc0LDQ5ICs5NCw4MSBAQCBBdG9taWNTdHJp
bmcgTWVkaWFTdHJlYW1UcmFjazo6a2luZCgpIGNvCiAgICAgcmV0dXJuIGVtcHR5QXRvbTsKIH0K
IAotU3RyaW5nIE1lZGlhU3RyZWFtVHJhY2s6OmlkKCkgY29uc3QKK3ZvaWQgTWVkaWFTdHJlYW1U
cmFjazo6c2V0U291cmNlKE1lZGlhU3RyZWFtU291cmNlKiBzb3VyY2UpCiB7Ci0gICAgcmV0dXJu
IG1fY29tcG9uZW50LT5pZCgpOworICAgIEFTU0VSVChzb3VyY2UgPT0gbV9zb3VyY2UgfHwgIW1f
c291cmNlKTsKKyAgICBtX3NvdXJjZSA9IHNvdXJjZTsKIH0KIAotU3RyaW5nIE1lZGlhU3RyZWFt
VHJhY2s6OmxhYmVsKCkgY29uc3QKK2NvbnN0IFN0cmluZyYgTWVkaWFTdHJlYW1UcmFjazo6aWQo
KSBjb25zdAogewotICAgIHJldHVybiBtX2NvbXBvbmVudC0+c291cmNlKCktPm5hbWUoKTsKKyAg
ICBpZiAoIW1faWQuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbV9pZDsKKworICAgIGlmICgh
bV9zb3VyY2UpCisgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOworCisgICAgY29uc3QgU3Ry
aW5nJiBpZCA9IG1fc291cmNlLT5pZCgpOworICAgIGlmICghaWQuaXNFbXB0eSgpKQorICAgICAg
ICByZXR1cm4gaWQ7CisKKyAgICAvLyBUaGUgc3BlYyBzYXlzOgorICAgIC8vICAgVW5sZXNzIGEg
TWVkaWFTdHJlYW1UcmFjayBvYmplY3QgaXMgY3JlYXRlZCBhcyBhIHBhcnQgYSBvZiBzcGVjaWFs
IHB1cnBvc2UgYWxnb3JpdGhtIHRoYXQKKyAgICAvLyAgIHNwZWNpZmllcyBob3cgdGhlIHRyYWNr
IGlkIG11c3QgYmUgaW5pdGlhbGl6ZWQsIHRoZSB1c2VyIGFnZW50IG11c3QgZ2VuZXJhdGUgYSBn
bG9iYWxseQorICAgIC8vICAgdW5pcXVlIGlkZW50aWZpZXIgc3RyaW5nIGFuZCBpbml0aWFsaXpl
IHRoZSBvYmplY3QncyBpZCBhdHRyaWJ1dGUgdG8gdGhhdCBzdHJpbmcuCisgICAgLy8gc28gZ2Vu
ZXJhdGUgYSBVVUlEIGlmIHRoZSBzb3VyY2UgZG9lc24ndCBoYXZlIGFuIElELgorICAgIG1faWQg
PSBjcmVhdGVDYW5vbmljYWxVVUlEU3RyaW5nKCk7CisgICAgcmV0dXJuIG1faWQ7Cit9CisKK2Nv
bnN0IFN0cmluZyYgTWVkaWFTdHJlYW1UcmFjazo6bGFiZWwoKSBjb25zdAoreworICAgIGlmICht
X3NvdXJjZSkKKyAgICAgICAgcmV0dXJuIG1fc291cmNlLT5uYW1lKCk7CisgICAgcmV0dXJuIGVt
cHR5U3RyaW5nKCk7CiB9CiAKIGJvb2wgTWVkaWFTdHJlYW1UcmFjazo6ZW5hYmxlZCgpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIG1fY29tcG9uZW50LT5lbmFibGVkKCk7CisgICAgcmV0dXJuIG1fZW5h
YmxlZDsKIH0KIAogdm9pZCBNZWRpYVN0cmVhbVRyYWNrOjpzZXRFbmFibGVkKGJvb2wgZW5hYmxl
ZCkKIHsKLSAgICBpZiAobV9zdG9wcGVkIHx8IGVuYWJsZWQgPT0gbV9jb21wb25lbnQtPmVuYWJs
ZWQoKSkKKyAgICBpZiAobV9zdG9wcGVkKQogICAgICAgICByZXR1cm47CisgICAgCisgICAgbV9l
bmFibGVkID0gZW5hYmxlZDsKIAotICAgIG1fY29tcG9uZW50LT5zZXRFbmFibGVkKGVuYWJsZWQp
OworICAgIGlmICghbV9zb3VyY2UgfHwgZW5hYmxlZCA9PSBtX3NvdXJjZS0+ZW5hYmxlZCgpKQor
ICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9jb21wb25lbnQtPnN0cmVhbSgpLT5lbmRlZCgp
KQorICAgIG1fc291cmNlLT5zZXRFbmFibGVkKGVuYWJsZWQpOworCisgICAgaWYgKG1fc291cmNl
LT5zdHJlYW0oKS0+ZW5kZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgTWVkaWFTdHJlYW1D
ZW50ZXI6Omluc3RhbmNlKCkuZGlkU2V0TWVkaWFTdHJlYW1UcmFja0VuYWJsZWQobV9jb21wb25l
bnQtPnN0cmVhbSgpLCBtX2NvbXBvbmVudC5nZXQoKSk7CisgICAgTWVkaWFTdHJlYW06OnNoYXJl
ZFN0cmVhbUNlbnRlcigpLmRpZFNldE1lZGlhU3RyZWFtVHJhY2tFbmFibGVkKG1fc291cmNlLmdl
dCgpKTsKIH0KIAotQXRvbWljU3RyaW5nIE1lZGlhU3RyZWFtVHJhY2s6OnJlYWR5U3RhdGUoKSBj
b25zdAorY29uc3QgQXRvbWljU3RyaW5nJiBNZWRpYVN0cmVhbVRyYWNrOjpyZWFkeVN0YXRlKCkg
Y29uc3QKIHsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBlbmRlZCgi
ZW5kZWQiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKICAgICBzdGF0aWMg
TmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBsaXZlKCJsaXZlIiwgQXRvbWljU3RyaW5nOjpD
b25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0
cmluZz4gbXV0ZWQoIm11dGVkIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7
CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gbmV3U3RhdGUoIm5ldyIs
IEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOworCisgICAgaWYgKCFtX3NvdXJj
ZSkKKyAgICAgICAgcmV0dXJuIG5ld1N0YXRlOwogCiAgICAgaWYgKG1fc3RvcHBlZCkKICAgICAg
ICAgcmV0dXJuIGVuZGVkOwogCi0gICAgc3dpdGNoIChtX2NvbXBvbmVudC0+c291cmNlKCktPnJl
YWR5U3RhdGUoKSkgewotICAgIGNhc2UgTWVkaWFTdHJlYW1Tb3VyY2U6OlJlYWR5U3RhdGVMaXZl
OgorICAgIHN3aXRjaCAobV9zb3VyY2UtPnJlYWR5U3RhdGUoKSkgeworICAgIGNhc2UgTWVkaWFT
dHJlYW1Tb3VyY2U6OkxpdmU6CiAgICAgICAgIHJldHVybiBsaXZlOwotICAgIGNhc2UgTWVkaWFT
dHJlYW1Tb3VyY2U6OlJlYWR5U3RhdGVNdXRlZDoKLSAgICAgICAgcmV0dXJuIG11dGVkOwotICAg
IGNhc2UgTWVkaWFTdHJlYW1Tb3VyY2U6OlJlYWR5U3RhdGVFbmRlZDoKKyAgICBjYXNlIE1lZGlh
U3RyZWFtU291cmNlOjpOZXc6CisgICAgICAgIHJldHVybiBuZXdTdGF0ZTsKKyAgICBjYXNlIE1l
ZGlhU3RyZWFtU291cmNlOjpFbmRlZDoKICAgICAgICAgcmV0dXJuIGVuZGVkOwogICAgIH0KIApA
QCAtMTI3LDEzICsxNzksMTMgQEAgQXRvbWljU3RyaW5nIE1lZGlhU3RyZWFtVHJhY2s6OnJlYWR5
U3RhdAogdm9pZCBNZWRpYVN0cmVhbVRyYWNrOjpnZXRTb3VyY2VzKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1UcmFja1NvdXJjZXNDYWxsYmFj
az4gY2FsbGJhY2ssIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFJlZlB0cjxNZWRpYVN0cmVh
bVRyYWNrU291cmNlc1JlcXVlc3Q+IHJlcXVlc3QgPSBNZWRpYVN0cmVhbVRyYWNrU291cmNlc1Jl
cXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBjYWxsYmFjayk7Ci0gICAgaWYgKCFNZWRpYVN0cmVhbUNl
bnRlcjo6aW5zdGFuY2UoKS5nZXRNZWRpYVN0cmVhbVRyYWNrU291cmNlcyhyZXF1ZXN0LnJlbGVh
c2UoKSkpCisgICAgaWYgKCFNZWRpYVN0cmVhbTo6c2hhcmVkU3RyZWFtQ2VudGVyKCkuZ2V0TWVk
aWFTdHJlYW1UcmFja1NvdXJjZXMocmVxdWVzdC5yZWxlYXNlKCkpKQogICAgICAgICBlYyA9IE5P
VF9TVVBQT1JURURfRVJSOwogfQogCiBib29sIE1lZGlhU3RyZWFtVHJhY2s6OmVuZGVkKCkgY29u
c3QKIHsKLSAgICByZXR1cm4gbV9zdG9wcGVkIHx8IChtX2NvbXBvbmVudC0+c291cmNlKCktPnJl
YWR5U3RhdGUoKSA9PSBNZWRpYVN0cmVhbVNvdXJjZTo6UmVhZHlTdGF0ZUVuZGVkKTsKKyAgICBy
ZXR1cm4gbV9zdG9wcGVkIHx8IChtX3NvdXJjZSAmJiBtX3NvdXJjZS0+cmVhZHlTdGF0ZSgpID09
IE1lZGlhU3RyZWFtU291cmNlOjpFbmRlZCk7CiB9CiAKIHZvaWQgTWVkaWFTdHJlYW1UcmFjazo6
c291cmNlQ2hhbmdlZFN0YXRlKCkKQEAgLTE0MSwzMiArMTkzLDMyIEBAIHZvaWQgTWVkaWFTdHJl
YW1UcmFjazo6c291cmNlQ2hhbmdlZFN0YXQKICAgICBpZiAobV9zdG9wcGVkKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBzd2l0Y2ggKG1fY29tcG9uZW50LT5zb3VyY2UoKS0+cmVhZHlTdGF0ZSgp
KSB7Ci0gICAgY2FzZSBNZWRpYVN0cmVhbVNvdXJjZTo6UmVhZHlTdGF0ZUxpdmU6Ci0gICAgICAg
IGRpc3BhdGNoRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkudW5tdXRlRXZlbnQsIGZh
bHNlLCBmYWxzZSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIE1lZGlhU3RyZWFtU291cmNl
OjpSZWFkeVN0YXRlTXV0ZWQ6Ci0gICAgICAgIGRpc3BhdGNoRXZlbnQoRXZlbnQ6OmNyZWF0ZShl
dmVudE5hbWVzKCkubXV0ZUV2ZW50LCBmYWxzZSwgZmFsc2UpKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBNZWRpYVN0cmVhbVNvdXJjZTo6UmVhZHlTdGF0ZUVuZGVkOgorICAgIE1lZGlhU3Ry
ZWFtU291cmNlOjpSZWFkeVN0YXRlIG9sZFJlYWR5U3RhdGUgPSBtX3JlYWR5U3RhdGU7CisgICAg
bV9yZWFkeVN0YXRlID0gbV9zb3VyY2UtPnJlYWR5U3RhdGUoKTsKKworICAgIGlmIChtX3JlYWR5
U3RhdGUgPj0gTWVkaWFTdHJlYW1Tb3VyY2U6OkxpdmUgJiYgb2xkUmVhZHlTdGF0ZSA9PSBNZWRp
YVN0cmVhbVNvdXJjZTo6TmV3KQorICAgICAgICBkaXNwYXRjaEV2ZW50KEV2ZW50OjpjcmVhdGUo
ZXZlbnROYW1lcygpLnN0YXJ0ZWRFdmVudCwgZmFsc2UsIGZhbHNlKSk7CisgICAgaWYgKG1fcmVh
ZHlTdGF0ZSA9PSBNZWRpYVN0cmVhbVNvdXJjZTo6RW5kZWQgJiYgb2xkUmVhZHlTdGF0ZSAhPSBN
ZWRpYVN0cmVhbVNvdXJjZTo6RW5kZWQpCiAgICAgICAgIGRpc3BhdGNoRXZlbnQoRXZlbnQ6OmNy
ZWF0ZShldmVudE5hbWVzKCkuZW5kZWRFdmVudCwgZmFsc2UsIGZhbHNlKSk7Ci0gICAgICAgIGRp
ZEVuZFRyYWNrKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KKworICAgIGlmIChtX211dGVkID09
IG1fc291cmNlLT5tdXRlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX211dGVkID0gbV9z
b3VyY2UtPm11dGVkKCk7CisgICAgaWYgKG1fbXV0ZWQpCisgICAgICAgIGRpc3BhdGNoRXZlbnQo
RXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkubXV0ZUV2ZW50LCBmYWxzZSwgZmFsc2UpKTsKKyAg
ICBlbHNlCisgICAgICAgIGRpc3BhdGNoRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCku
dW5tdXRlRXZlbnQsIGZhbHNlLCBmYWxzZSkpOwogfQogCi12b2lkIE1lZGlhU3RyZWFtVHJhY2s6
OmRpZEVuZFRyYWNrKCkKK3ZvaWQgTWVkaWFTdHJlYW1UcmFjazo6dHJhY2tFbmRlZCgpCiB7Ci0g
ICAgTWVkaWFTdHJlYW1EZXNjcmlwdG9yQ2xpZW50KiBjbGllbnQgPSBtX2NvbXBvbmVudC0+c3Ry
ZWFtKCktPmNsaWVudCgpOworICAgIC8vIEZJWE1FOiB0aGlzIGlzIHdyb25nLCB0aGUgdHJhY2sg
c2hvdWxkbid0IGhhdmUgdG8gY2FsbCB0aGUgZGVzY3JpcHRvcidzIGNsaWVudCEKKyAgICBNZWRp
YVN0cmVhbURlc2NyaXB0b3JDbGllbnQqIGNsaWVudCA9IG1fc291cmNlID8gbV9zb3VyY2UtPnN0
cmVhbSgpLT5jbGllbnQoKSA6IDA7CiAgICAgaWYgKCFjbGllbnQpCiAgICAgICAgIHJldHVybjsK
ICAgICAKLSAgICBjbGllbnQtPnRyYWNrRW5kZWQoKTsKLX0KLQotTWVkaWFTdHJlYW1Db21wb25l
bnQqIE1lZGlhU3RyZWFtVHJhY2s6OmNvbXBvbmVudCgpCi17Ci0gICAgcmV0dXJuIG1fY29tcG9u
ZW50LmdldCgpOworICAgIGNsaWVudC0+dHJhY2tEaWRFbmQoKTsKIH0KIAogdm9pZCBNZWRpYVN0
cmVhbVRyYWNrOjpzdG9wKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJl
YW0vTWVkaWFTdHJlYW1UcmFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1UcmFjay5oCShyZXZpc2lvbiAxNTYyMzgpCisrKyBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtVHJhY2suaAkod29y
a2luZyBjb3B5KQpAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMSBFcmlj
c3NvbiBBQi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTMwLDcgKzMxLDYgQEAKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgogI2lu
Y2x1ZGUgIkV2ZW50VGFyZ2V0LmgiCi0jaW5jbHVkZSAiTWVkaWFTdHJlYW1EZXNjcmlwdG9yLmgi
CiAjaW5jbHVkZSAiTWVkaWFTdHJlYW1Tb3VyY2UuaCIKICNpbmNsdWRlICJTY3JpcHRXcmFwcGFi
bGUuaCIKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgpAQCAtNDAsMzIgKzQwLDM2IEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgTWVkaWFTdHJlYW1Db21wb25lbnQ7CitjbGFz
cyBEaWN0aW9uYXJ5OworY2xhc3MgTWVkaWFDb25zdHJhaW50czsKIGNsYXNzIE1lZGlhU3RyZWFt
VHJhY2tTb3VyY2VzQ2FsbGJhY2s7CiAKIGNsYXNzIE1lZGlhU3RyZWFtVHJhY2sgOiBwdWJsaWMg
UmVmQ291bnRlZDxNZWRpYVN0cmVhbVRyYWNrPiwgcHVibGljIFNjcmlwdFdyYXBwYWJsZSwgcHVi
bGljIEFjdGl2ZURPTU9iamVjdCwgcHVibGljIEV2ZW50VGFyZ2V0LCBwdWJsaWMgTWVkaWFTdHJl
YW1Tb3VyY2U6Ok9ic2VydmVyIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxNZWRp
YVN0cmVhbVRyYWNrPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIE1lZGlhU3RyZWFt
Q29tcG9uZW50Kik7CisKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVRyYWNrPiBj
cmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IERpY3Rpb25hcnkmKTsKKyAgICBz
dGF0aWMgUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVRyYWNrPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIE1lZGlhU3RyZWFtU291cmNlKik7CisKICAgICB2aXJ0dWFsIH5NZWRpYVN0cmVh
bVRyYWNrKCk7CiAKLSAgICBBdG9taWNTdHJpbmcga2luZCgpIGNvbnN0OwotICAgIFN0cmluZyBp
ZCgpIGNvbnN0OwotICAgIFN0cmluZyBsYWJlbCgpIGNvbnN0OworICAgIGNvbnN0IEF0b21pY1N0
cmluZyYga2luZCgpIGNvbnN0OworICAgIGNvbnN0IFN0cmluZyYgaWQoKSBjb25zdDsKKyAgICBj
b25zdCBTdHJpbmcmIGxhYmVsKCkgY29uc3Q7CiAKICAgICBib29sIGVuYWJsZWQoKSBjb25zdDsK
ICAgICB2b2lkIHNldEVuYWJsZWQoYm9vbCk7Ci0KLSAgICB2b2lkIGRpZEVuZFRyYWNrKCk7CiAg
ICAgCi0gICAgQXRvbWljU3RyaW5nIHJlYWR5U3RhdGUoKSBjb25zdDsKKyAgICBjb25zdCBBdG9t
aWNTdHJpbmcmIHJlYWR5U3RhdGUoKSBjb25zdDsKIAogICAgIHN0YXRpYyB2b2lkIGdldFNvdXJj
ZXMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1UcmFja1Nv
dXJjZXNDYWxsYmFjaz4sIEV4Y2VwdGlvbkNvZGUmKTsKIAorICAgIE1lZGlhU3RyZWFtU291cmNl
KiBzb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZS5nZXQoKTsgfQorICAgIHZvaWQgc2V0
U291cmNlKE1lZGlhU3RyZWFtU291cmNlKik7CisKICAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5U
X0xJU1RFTkVSKG11dGUpOwogICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIodW5t
dXRlKTsKICAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKGVuZGVkKTsKIAotICAg
IE1lZGlhU3RyZWFtQ29tcG9uZW50KiBjb21wb25lbnQoKTsKICAgICBib29sIGVuZGVkKCkgY29u
c3Q7CiAKICAgICAvLyBFdmVudFRhcmdldApAQCAtNzksNyArODMsOSBAQCBwdWJsaWM6CiAgICAg
dXNpbmcgUmVmQ291bnRlZDxNZWRpYVN0cmVhbVRyYWNrPjo6ZGVyZWY7CiAKIHByaXZhdGU6Ci0g
ICAgTWVkaWFTdHJlYW1UcmFjayhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgTWVkaWFTdHJlYW1D
b21wb25lbnQqKTsKKyAgICBNZWRpYVN0cmVhbVRyYWNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBNZWRpYVN0cmVhbVNvdXJjZSosIGNvbnN0IERpY3Rpb25hcnkqKTsKKworICAgIHZvaWQgdHJh
Y2tFbmRlZCgpOwogCiAgICAgLy8gRXZlbnRUYXJnZXQKICAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0
RGF0YSogZXZlbnRUYXJnZXREYXRhKCkgT1ZFUlJJREU7CkBAIC05MSw4ICs5NywxNCBAQCBwcml2
YXRlOgogICAgIC8vIE1lZGlhU3RyZWFtU291cmNlT2JzZXJ2ZXIKICAgICB2aXJ0dWFsIHZvaWQg
c291cmNlQ2hhbmdlZFN0YXRlKCkgT1ZFUlJJREU7CiAKLSAgICBSZWZQdHI8TWVkaWFTdHJlYW1D
b21wb25lbnQ+IG1fY29tcG9uZW50OworICAgIFJlZlB0cjxNZWRpYVN0cmVhbVNvdXJjZT4gbV9z
b3VyY2U7CisgICAgUmVmUHRyPE1lZGlhQ29uc3RyYWludHM+IG1fY29uc3RyYWludHM7CisgICAg
TWVkaWFTdHJlYW1Tb3VyY2U6OlJlYWR5U3RhdGUgbV9yZWFkeVN0YXRlOworICAgIG11dGFibGUg
U3RyaW5nIG1faWQ7CisKICAgICBib29sIG1fc3RvcHBlZDsKKyAgICBib29sIG1fZW5hYmxlZDsK
KyAgICBib29sIG1fbXV0ZWQ7CiB9OwogCiB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8TWVkaWFTdHJl
YW1UcmFjaz4gPiBNZWRpYVN0cmVhbVRyYWNrVmVjdG9yOwpJbmRleDogU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9tZWRpYXN0cmVhbS9SVENEVE1GU2VuZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0RUTUZTZW5kZXIuY3BwCShyZXZpc2lv
biAxNTYyMzgpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0RUTUZT
ZW5kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBAIHN0YXRpYyBjb25zdCBs
b25nIGRlZmF1bHRJbnRlclRvbmVHYXBNcyAKIFBhc3NSZWZQdHI8UlRDRFRNRlNlbmRlcj4gUlRD
RFRNRlNlbmRlcjo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFJUQ1Bl
ZXJDb25uZWN0aW9uSGFuZGxlciogcGVlckNvbm5lY3Rpb25IYW5kbGVyLCBQYXNzUmVmUHRyPE1l
ZGlhU3RyZWFtVHJhY2s+IHBycFRyYWNrLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBSZWZQ
dHI8TWVkaWFTdHJlYW1UcmFjaz4gdHJhY2sgPSBwcnBUcmFjazsKLSAgICBPd25QdHI8UlRDRFRN
RlNlbmRlckhhbmRsZXI+IGhhbmRsZXIgPSBwZWVyQ29ubmVjdGlvbkhhbmRsZXItPmNyZWF0ZURU
TUZTZW5kZXIodHJhY2stPmNvbXBvbmVudCgpKTsKKyAgICBPd25QdHI8UlRDRFRNRlNlbmRlckhh
bmRsZXI+IGhhbmRsZXIgPSBwZWVyQ29ubmVjdGlvbkhhbmRsZXItPmNyZWF0ZURUTUZTZW5kZXIo
dHJhY2stPnNvdXJjZSgpKTsKICAgICBpZiAoIWhhbmRsZXIpIHsKICAgICAgICAgZWMgPSBOT1Rf
U1VQUE9SVEVEX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLmNwcAko
cmV2aXNpb24gMTU2MjM4KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9S
VENQZWVyQ29ubmVjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1OSw4ICs1NTksOSBAQCB2
b2lkIFJUQ1BlZXJDb25uZWN0aW9uOjpkaWRSZW1vdmVSZW1vdGVTCiAgICAgQVNTRVJUKHNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNDb250ZXh0VGhyZWFkKCkpOwogICAgIEFTU0VSVChzdHJl
YW1EZXNjcmlwdG9yLT5jbGllbnQoKSk7CiAKKyAgICAvLyBGSVhNRTogdGhpcyBjbGFzcyBzaG91
bGRuJ3Qga25vdyB0aGF0IHRoZSBkZXNjcmlwdG9yIGNsaWVudCBpcyBhIE1lZGlhU3RyZWFtIQog
ICAgIFJlZlB0cjxNZWRpYVN0cmVhbT4gc3RyZWFtID0gc3RhdGljX2Nhc3Q8TWVkaWFTdHJlYW0q
PihzdHJlYW1EZXNjcmlwdG9yLT5jbGllbnQoKSk7Ci0gICAgc3RyZWFtLT5zdHJlYW1FbmRlZCgp
OworICAgIHN0cmVhbS0+c2V0RW5kZWQoKTsKIAogICAgIGlmIChtX3NpZ25hbGluZ1N0YXRlID09
IFNpZ25hbGluZ1N0YXRlQ2xvc2VkKQogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1N0YXRzUmVxdWVzdEltcGwuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDU3RhdHNSZXF1ZXN0
SW1wbC5jcHAJKHJldmlzaW9uIDE1NjIzOCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVk
aWFzdHJlYW0vUlRDU3RhdHNSZXF1ZXN0SW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYg
KzI4LDggQEAKIAogI2luY2x1ZGUgIlJUQ1N0YXRzUmVxdWVzdEltcGwuaCIKIAorI2luY2x1ZGUg
Ik1lZGlhU3RyZWFtRGVzY3JpcHRvci5oIgorI2luY2x1ZGUgIk1lZGlhU3RyZWFtVHJhY2suaCIK
ICNpbmNsdWRlICJSVENTdGF0c0NhbGxiYWNrLmgiCiAjaW5jbHVkZSAiUlRDU3RhdHNSZXF1ZXN0
LmgiCiAjaW5jbHVkZSAiUlRDU3RhdHNSZXNwb25zZS5oIgpAQCAtNDQsOCArNDYsNyBAQCBQYXNz
UmVmUHRyPFJUQ1N0YXRzUmVxdWVzdEltcGw+IFJUQ1N0YXRzCiBSVENTdGF0c1JlcXVlc3RJbXBs
OjpSVENTdGF0c1JlcXVlc3RJbXBsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBh
c3NSZWZQdHI8UlRDU3RhdHNDYWxsYmFjaz4gY2FsbGJhY2ssIFBhc3NSZWZQdHI8TWVkaWFTdHJl
YW1UcmFjaz4gc2VsZWN0b3IpCiAgICAgOiBBY3RpdmVET01PYmplY3QoY29udGV4dCkKICAgICAs
IG1fc3VjY2Vzc0NhbGxiYWNrKGNhbGxiYWNrKQotICAgICwgbV9zdHJlYW0oc2VsZWN0b3IgPyBz
ZWxlY3Rvci0+Y29tcG9uZW50KCktPnN0cmVhbSgpIDogMCkKLSAgICAsIG1fY29tcG9uZW50KHNl
bGVjdG9yID8gc2VsZWN0b3ItPmNvbXBvbmVudCgpIDogMCkKKyAgICAsIG1fc3RyZWFtKHNlbGVj
dG9yID8gc2VsZWN0b3ItPnNvdXJjZSgpLT5zdHJlYW0oKSA6IDApCiB7CiB9CiAKQEAgLTY4LDEx
ICs2OSw2IEBAIE1lZGlhU3RyZWFtRGVzY3JpcHRvciogUlRDU3RhdHNSZXF1ZXN0SW0KICAgICBy
ZXR1cm4gbV9zdHJlYW0uZ2V0KCk7CiB9CiAKLU1lZGlhU3RyZWFtQ29tcG9uZW50KiBSVENTdGF0
c1JlcXVlc3RJbXBsOjpjb21wb25lbnQoKQotewotICAgIHJldHVybiBtX2NvbXBvbmVudC5nZXQo
KTsKLX0KLQogdm9pZCBSVENTdGF0c1JlcXVlc3RJbXBsOjpyZXF1ZXN0U3VjY2VlZGVkKFBhc3NS
ZWZQdHI8UlRDU3RhdHNSZXNwb25zZUJhc2U+IHJlc3BvbnNlKQogewogICAgIGlmICghbV9zdWNj
ZXNzQ2FsbGJhY2spCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JU
Q1N0YXRzUmVxdWVzdEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L21lZGlhc3RyZWFtL1JUQ1N0YXRzUmVxdWVzdEltcGwuaAkocmV2aXNpb24gMTU2MjM4KQorKysg
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENTdGF0c1JlcXVlc3RJbXBsLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxSVENTdGF0c1Jlc3BvbnNlQmFzZT4gY3JlYXRlUmVzcG9uc2UoKSBPVkVSUklERTsK
ICAgICB2aXJ0dWFsIGJvb2wgaGFzU2VsZWN0b3IoKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIE1l
ZGlhU3RyZWFtRGVzY3JpcHRvciogc3RyZWFtKCkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBNZWRp
YVN0cmVhbUNvbXBvbmVudCogY29tcG9uZW50KCkgT1ZFUlJJREU7CiAKICAgICB2aXJ0dWFsIHZv
aWQgcmVxdWVzdFN1Y2NlZWRlZChQYXNzUmVmUHRyPFJUQ1N0YXRzUmVzcG9uc2VCYXNlPikgT1ZF
UlJJREU7CiAKQEAgLTYwLDcgKzU5LDYgQEAgcHJpdmF0ZToKIAogICAgIFJlZlB0cjxSVENTdGF0
c0NhbGxiYWNrPiBtX3N1Y2Nlc3NDYWxsYmFjazsKICAgICBSZWZQdHI8TWVkaWFTdHJlYW1EZXNj
cmlwdG9yPiBtX3N0cmVhbTsKLSAgICBSZWZQdHI8TWVkaWFTdHJlYW1Db21wb25lbnQ+IG1fY29t
cG9uZW50OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9Vc2VyTWVkaWFDbGllbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1VzZXJNZWRpYUNsaWVudC5oCShyZXZp
c2lvbiAxNTYyMzgpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1VzZXJN
ZWRpYUNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxOSArMzMsMTkgQEAKIAogI2lmIEVO
QUJMRShNRURJQV9TVFJFQU0pCiAKLSNpbmNsdWRlICJVc2VyTWVkaWFSZXF1ZXN0LmgiCi0jaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBQYWdlOworY2xhc3MgVXNlck1lZGlhUmVx
dWVzdDsKIAogY2xhc3MgVXNlck1lZGlhQ2xpZW50IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZv
aWQgcGFnZURlc3Ryb3llZCgpID0gMDsKIAotICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0VXNlck1l
ZGlhKFBhc3NSZWZQdHI8VXNlck1lZGlhUmVxdWVzdD4sIGNvbnN0IE1lZGlhU3RyZWFtU291cmNl
VmVjdG9yJiBhdWRpb1NvdXJjZXMsICBjb25zdCBNZWRpYVN0cmVhbVNvdXJjZVZlY3RvciYgdmlk
ZW9Tb3VyY2VzKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNhbmNlbFVzZXJNZWRpYVJlcXVlc3Qo
VXNlck1lZGlhUmVxdWVzdCopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdFBlcm1pc3Np
b24oUGFzc1JlZlB0cjxVc2VyTWVkaWFSZXF1ZXN0PikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBj
YW5jZWxSZXF1ZXN0KFVzZXJNZWRpYVJlcXVlc3QqKSA9IDA7CiAKIHByb3RlY3RlZDoKICAgICB2
aXJ0dWFsIH5Vc2VyTWVkaWFDbGllbnQoKSB7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvbWVkaWFzdHJlYW0vVXNlck1lZGlhQ29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vVXNlck1lZGlhQ29udHJvbGxlci5oCShyZXZp
c2lvbiAxNTYyMzgpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1VzZXJN
ZWRpYUNvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogCiAjaW5j
bHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlVzZXJNZWRpYUNsaWVudC5oIgorI2luY2x1ZGUgIlVz
ZXJNZWRpYVJlcXVlc3QuaCIKICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CkBAIC0zOCw4ICszOSw4IEBAIHB1YmxpYzoKICAgICB+VXNlck1lZGlhQ29u
dHJvbGxlcigpOwogCiAgICAgVXNlck1lZGlhQ2xpZW50KiBjbGllbnQoKSBjb25zdCB7IHJldHVy
biBtX2NsaWVudDsgfQotICAgIHZvaWQgcmVxdWVzdFVzZXJNZWRpYShQYXNzUmVmUHRyPFVzZXJN
ZWRpYVJlcXVlc3Q+LCBjb25zdCBNZWRpYVN0cmVhbVNvdXJjZVZlY3RvciYgYXVkaW9Tb3VyY2Vz
LCAgY29uc3QgTWVkaWFTdHJlYW1Tb3VyY2VWZWN0b3ImIHZpZGVvU291cmNlcyk7Ci0gICAgdm9p
ZCBjYW5jZWxVc2VyTWVkaWFSZXF1ZXN0KFVzZXJNZWRpYVJlcXVlc3QqKTsKKyAgICB2b2lkIHJl
cXVlc3RQZXJtaXNzaW9uKFBhc3NSZWZQdHI8VXNlck1lZGlhUmVxdWVzdD4pOworICAgIHZvaWQg
Y2FuY2VsUmVxdWVzdChVc2VyTWVkaWFSZXF1ZXN0Kik7CiAKICAgICBzdGF0aWMgUGFzc093blB0
cjxVc2VyTWVkaWFDb250cm9sbGVyPiBjcmVhdGUoVXNlck1lZGlhQ2xpZW50Kik7CiAgICAgc3Rh
dGljIGNvbnN0IGNoYXIqIHN1cHBsZW1lbnROYW1lKCk7CkBAIC01MiwxNCArNTMsMTQgQEAgcHJp
dmF0ZToKICAgICBVc2VyTWVkaWFDbGllbnQqIG1fY2xpZW50OwogfTsKIAotaW5saW5lIHZvaWQg
VXNlck1lZGlhQ29udHJvbGxlcjo6cmVxdWVzdFVzZXJNZWRpYShQYXNzUmVmUHRyPFVzZXJNZWRp
YVJlcXVlc3Q+IHJlcXVlc3QsIGNvbnN0IE1lZGlhU3RyZWFtU291cmNlVmVjdG9yJiBhdWRpb1Nv
dXJjZXMsICBjb25zdCBNZWRpYVN0cmVhbVNvdXJjZVZlY3RvciYgdmlkZW9Tb3VyY2VzKQoraW5s
aW5lIHZvaWQgVXNlck1lZGlhQ29udHJvbGxlcjo6cmVxdWVzdFBlcm1pc3Npb24oUGFzc1JlZlB0
cjxVc2VyTWVkaWFSZXF1ZXN0PiByZXF1ZXN0KQogewotICAgIG1fY2xpZW50LT5yZXF1ZXN0VXNl
ck1lZGlhKHJlcXVlc3QsIGF1ZGlvU291cmNlcywgdmlkZW9Tb3VyY2VzKTsKKyAgICBtX2NsaWVu
dC0+cmVxdWVzdFBlcm1pc3Npb24ocmVxdWVzdCk7CiB9CiAKLWlubGluZSB2b2lkIFVzZXJNZWRp
YUNvbnRyb2xsZXI6OmNhbmNlbFVzZXJNZWRpYVJlcXVlc3QoVXNlck1lZGlhUmVxdWVzdCogcmVx
dWVzdCkKK2lubGluZSB2b2lkIFVzZXJNZWRpYUNvbnRyb2xsZXI6OmNhbmNlbFJlcXVlc3QoVXNl
ck1lZGlhUmVxdWVzdCogcmVxdWVzdCkKIHsKLSAgICBtX2NsaWVudC0+Y2FuY2VsVXNlck1lZGlh
UmVxdWVzdChyZXF1ZXN0KTsKKyAgICBtX2NsaWVudC0+Y2FuY2VsUmVxdWVzdChyZXF1ZXN0KTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9tZWRpYXN0cmVhbS9Vc2VyTWVkaWFSZXF1ZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1VzZXJNZWRpYVJlcXVlc3QuY3BwCShyZXZpc2lv
biAxNTYyMzgpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1VzZXJNZWRp
YVJlcXVlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHly
aWdodCAoQykgMjAxMSBFcmljc3NvbiBBQi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHly
aWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDIsMTYgKzQzLDE2IEBACiAjaW5jbHVkZSAiTWVkaWFT
dHJlYW0uaCIKICNpbmNsdWRlICJNZWRpYVN0cmVhbUNlbnRlci5oIgogI2luY2x1ZGUgIk1lZGlh
U3RyZWFtRGVzY3JpcHRvci5oIgotI2luY2x1ZGUgIlNwYWNlU3BsaXRTdHJpbmcuaCIKKyNpbmNs
dWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgIlVzZXJNZWRpYUNvbnRyb2xsZXIuaCIK
ICNpbmNsdWRlIDx3dGYvRnVuY3Rpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIFBhc3NSZWZQdHI8TWVkaWFDb25zdHJh
aW50c0ltcGw+IHBhcnNlT3B0aW9ucyhjb25zdCBEaWN0aW9uYXJ5JiBvcHRpb25zLCBjb25zdCBT
dHJpbmcmIG1lZGlhVHlwZSwgRXhjZXB0aW9uQ29kZSYgZWMpCitzdGF0aWMgUGFzc1JlZlB0cjxN
ZWRpYUNvbnN0cmFpbnRzPiBwYXJzZU9wdGlvbnMoY29uc3QgRGljdGlvbmFyeSYgb3B0aW9ucywg
Y29uc3QgU3RyaW5nJiBtZWRpYVR5cGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIFJlZlB0
cjxNZWRpYUNvbnN0cmFpbnRzSW1wbD4gY29uc3RyYWludHM7CisgICAgUmVmUHRyPE1lZGlhQ29u
c3RyYWludHM+IGNvbnN0cmFpbnRzOwogCiAgICAgRGljdGlvbmFyeSBjb25zdHJhaW50c0RpY3Rp
b25hcnk7CiAgICAgYm9vbCBvayA9IG9wdGlvbnMuZ2V0KG1lZGlhVHlwZSwgY29uc3RyYWludHNE
aWN0aW9uYXJ5KTsKQEAgLTcxLDExICs3MiwxMSBAQCBQYXNzUmVmUHRyPFVzZXJNZWRpYVJlcXVl
c3Q+IFVzZXJNZWRpYVJlCiB7CiAgICAgQVNTRVJUKHN1Y2Nlc3NDYWxsYmFjayk7CiAKLSAgICBS
ZWZQdHI8TWVkaWFDb25zdHJhaW50c0ltcGw+IGF1ZGlvQ29uc3RyYWludHMgPSBwYXJzZU9wdGlv
bnMob3B0aW9ucywgQXRvbWljU3RyaW5nKCJhdWRpbyIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0
RnJvbUxpdGVyYWwpLCBlYyk7CisgICAgUmVmUHRyPE1lZGlhQ29uc3RyYWludHM+IGF1ZGlvQ29u
c3RyYWludHMgPSBwYXJzZU9wdGlvbnMob3B0aW9ucywgQXRvbWljU3RyaW5nKCJhdWRpbyIsIEF0
b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLCBlYyk7CiAgICAgaWYgKGVjKQogICAg
ICAgICByZXR1cm4gMDsKIAotICAgIFJlZlB0cjxNZWRpYUNvbnN0cmFpbnRzSW1wbD4gdmlkZW9D
b25zdHJhaW50cyA9IHBhcnNlT3B0aW9ucyhvcHRpb25zLCBBdG9taWNTdHJpbmcoInZpZGVvIiwg
QXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIGVjKTsKKyAgICBSZWZQdHI8TWVk
aWFDb25zdHJhaW50cz4gdmlkZW9Db25zdHJhaW50cyA9IHBhcnNlT3B0aW9ucyhvcHRpb25zLCBB
dG9taWNTdHJpbmcoInZpZGVvIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCks
IGVjKTsKICAgICBpZiAoZWMpCiAgICAgICAgIHJldHVybiAwOwogCkBAIC04NSw3ICs4Niw3IEBA
IFBhc3NSZWZQdHI8VXNlck1lZGlhUmVxdWVzdD4gVXNlck1lZGlhUmUKICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IFVzZXJNZWRpYVJlcXVlc3QoY29udGV4dCwgY29udHJvbGxlciwgYXVkaW9Db25z
dHJhaW50cy5yZWxlYXNlKCksIHZpZGVvQ29uc3RyYWludHMucmVsZWFzZSgpLCBzdWNjZXNzQ2Fs
bGJhY2ssIGVycm9yQ2FsbGJhY2spKTsKIH0KIAotVXNlck1lZGlhUmVxdWVzdDo6VXNlck1lZGlh
UmVxdWVzdChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBVc2VyTWVkaWFDb250cm9s
bGVyKiBjb250cm9sbGVyLCBQYXNzUmVmUHRyPE1lZGlhQ29uc3RyYWludHNJbXBsPiBhdWRpb0Nv
bnN0cmFpbnRzLCBQYXNzUmVmUHRyPE1lZGlhQ29uc3RyYWludHNJbXBsPiB2aWRlb0NvbnN0cmFp
bnRzLCBQYXNzUmVmUHRyPE5hdmlnYXRvclVzZXJNZWRpYVN1Y2Nlc3NDYWxsYmFjaz4gc3VjY2Vz
c0NhbGxiYWNrLCBQYXNzUmVmUHRyPE5hdmlnYXRvclVzZXJNZWRpYUVycm9yQ2FsbGJhY2s+IGVy
cm9yQ2FsbGJhY2spCitVc2VyTWVkaWFSZXF1ZXN0OjpVc2VyTWVkaWFSZXF1ZXN0KFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFVzZXJNZWRpYUNvbnRyb2xsZXIqIGNvbnRyb2xsZXIs
IFBhc3NSZWZQdHI8TWVkaWFDb25zdHJhaW50cz4gYXVkaW9Db25zdHJhaW50cywgUGFzc1JlZlB0
cjxNZWRpYUNvbnN0cmFpbnRzPiB2aWRlb0NvbnN0cmFpbnRzLCBQYXNzUmVmUHRyPE5hdmlnYXRv
clVzZXJNZWRpYVN1Y2Nlc3NDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBQYXNzUmVmUHRyPE5h
dmlnYXRvclVzZXJNZWRpYUVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2spCiAgICAgOiBDb250
ZXh0RGVzdHJ1Y3Rpb25PYnNlcnZlcihjb250ZXh0KQogICAgICwgbV9hdWRpb0NvbnN0cmFpbnRz
KGF1ZGlvQ29uc3RyYWludHMpCiAgICAgLCBtX3ZpZGVvQ29uc3RyYWludHModmlkZW9Db25zdHJh
aW50cykKQEAgLTk5LDg3ICsxMDAsMTEyIEBAIFVzZXJNZWRpYVJlcXVlc3Q6On5Vc2VyTWVkaWFS
ZXF1ZXN0KCkKIHsKIH0KIAotUGFzc1JlZlB0cjxNZWRpYUNvbnN0cmFpbnRzPiBVc2VyTWVkaWFS
ZXF1ZXN0OjphdWRpb0NvbnN0cmFpbnRzKCkgY29uc3QKK1NlY3VyaXR5T3JpZ2luKiBVc2VyTWVk
aWFSZXF1ZXN0OjpzZWN1cml0eU9yaWdpbigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fYXVkaW9D
b25zdHJhaW50czsKKyAgICBpZiAobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KQorICAgICAgICBy
ZXR1cm4gbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5zZWN1cml0eU9yaWdpbigpOworICAgIAor
ICAgIHJldHVybiAwOworfQorICAgIAordm9pZCBVc2VyTWVkaWFSZXF1ZXN0OjpzdGFydCgpCit7
CisgICAgLy8gMSAtIG1ha2Ugc3VyZSB0aGUgc3lzdGVtIGlzIGNhcGFibGUgb2Ygc3VwcG9ydGlu
ZyB0aGUgYXVkaW8gYW5kIHZpZGVvIGNvbnN0cmFpbnRzLiBXZSBkb24ndCB3YW50IHRvIGFzayBm
b3IKKyAgICAvLyB1c2VyIHBlcm1pc3Npb24gaWYgdGhlIGNvbnN0cmFpbnRzIGNhbiBub3QgYmUg
c3Vwb3J0ZWQuCisgICAgTWVkaWFTdHJlYW06OnNoYXJlZFN0cmVhbUNlbnRlcigpLnZhbGlkYXRl
UmVxdWVzdENvbnN0cmFpbnRzKHRoaXMsIG1fYXVkaW9Db25zdHJhaW50cywgbV92aWRlb0NvbnN0
cmFpbnRzKTsKIH0KIAotUGFzc1JlZlB0cjxNZWRpYUNvbnN0cmFpbnRzPiBVc2VyTWVkaWFSZXF1
ZXN0Ojp2aWRlb0NvbnN0cmFpbnRzKCkgY29uc3QKKyAgICAKK3ZvaWQgVXNlck1lZGlhUmVxdWVz
dDo6Y29uc3RyYWludHNWYWxpZGF0ZWQoKQogewotICAgIHJldHVybiBtX3ZpZGVvQ29uc3RyYWlu
dHM7CisgICAgaWYgKG1fY29udHJvbGxlcikKKyAgICAgICAgY2FsbE9uTWFpblRocmVhZChiaW5k
KCZVc2VyTWVkaWFSZXF1ZXN0OjpyZXF1ZXN0UGVybWlzc2lvbiwgdGhpcykpOwogfQogCi1Eb2N1
bWVudCogVXNlck1lZGlhUmVxdWVzdDo6b3duZXJEb2N1bWVudCgpCit2b2lkIFVzZXJNZWRpYVJl
cXVlc3Q6OnJlcXVlc3RQZXJtaXNzaW9uKCkKIHsKLSAgICBpZiAobV9zY3JpcHRFeGVjdXRpb25D
b250ZXh0KQotICAgICAgICByZXR1cm4gdG9Eb2N1bWVudChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQpOworICAgIC8vIDIgLSBUaGUgY29uc3RyYWludHMgYXJlIHZhbGlkLCBhc2sgdGhlIHVzZXIg
Zm9yIGFjY2VzcyB0byBtZWRpYS4KKyAgICBpZiAobV9jb250cm9sbGVyKQorICAgICAgICBtX2Nv
bnRyb2xsZXItPnJlcXVlc3RQZXJtaXNzaW9uKHRoaXMpOworfQogCi0gICAgcmV0dXJuIDA7Cit2
b2lkIFVzZXJNZWRpYVJlcXVlc3Q6OnVzZXJNZWRpYUFjY2Vzc0dyYW50ZWQoKQoreworICAgIGNh
bGxPbk1haW5UaHJlYWQoYmluZCgmVXNlck1lZGlhUmVxdWVzdDo6Y3JlYXRlTWVkaWFTdHJlYW0s
IHRoaXMpKTsKIH0KIAotdm9pZCBVc2VyTWVkaWFSZXF1ZXN0OjpzdGFydCgpCit2b2lkIFVzZXJN
ZWRpYVJlcXVlc3Q6OmNyZWF0ZU1lZGlhU3RyZWFtKCkKIHsKLSAgICBNZWRpYVN0cmVhbUNlbnRl
cjo6aW5zdGFuY2UoKS5xdWVyeU1lZGlhU3RyZWFtU291cmNlcyh0aGlzKTsKKyAgICAvLyAzIC0g
dGhlIHVzZXIgZ3JhbnRlZCBhY2Nlc3MsIGFzayBwbGF0Zm9ybSB0byBjcmVhdGUgdGhlIG1lZGlh
IHN0cmVhbSBkZXNjcmlwdG9ycy4KKyAgICBNZWRpYVN0cmVhbTo6c2hhcmVkU3RyZWFtQ2VudGVy
KCkuY3JlYXRlTWVkaWFTdHJlYW0odGhpcywgbV9hdWRpb0NvbnN0cmFpbnRzLCBtX3ZpZGVvQ29u
c3RyYWludHMpOwogfQogCi12b2lkIFVzZXJNZWRpYVJlcXVlc3Q6OmRpZENvbXBsZXRlUXVlcnko
Y29uc3QgTWVkaWFTdHJlYW1Tb3VyY2VWZWN0b3ImIGF1ZGlvU291cmNlcywgY29uc3QgTWVkaWFT
dHJlYW1Tb3VyY2VWZWN0b3ImIHZpZGVvU291cmNlcykKK3ZvaWQgVXNlck1lZGlhUmVxdWVzdDo6
dXNlck1lZGlhQWNjZXNzRGVuaWVkKCkKIHsKLSAgICBpZiAobV9jb250cm9sbGVyKQotICAgICAg
ICBtX2NvbnRyb2xsZXItPnJlcXVlc3RVc2VyTWVkaWEodGhpcywgYXVkaW9Tb3VyY2VzLCB2aWRl
b1NvdXJjZXMpOworICAgIGZhaWxlZFRvQ3JlYXRlU3RyZWFtV2l0aFBlcm1pc3Npb25FcnJvcigp
OwogfQogCi12b2lkIFVzZXJNZWRpYVJlcXVlc3Q6OnN1Y2NlZWQoUGFzc1JlZlB0cjxNZWRpYVN0
cmVhbURlc2NyaXB0b3I+IHN0cmVhbURlc2NyaXB0b3IpCit2b2lkIFVzZXJNZWRpYVJlcXVlc3Q6
OmNvbnN0cmFpbnRzSW52YWxpZChjb25zdCBTdHJpbmcmIGNvbnN0cmFpbnROYW1lKQogewotICAg
IGlmICghbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KQorICAgIGZhaWxlZFRvQ3JlYXRlU3RyZWFt
V2l0aENvbnN0cmFpbnRzRXJyb3IoY29uc3RyYWludE5hbWUpOworfQorCit2b2lkIFVzZXJNZWRp
YVJlcXVlc3Q6OmRpZENyZWF0ZVN0cmVhbShQYXNzUmVmUHRyPE1lZGlhU3RyZWFtRGVzY3JpcHRv
cj4gc3RyZWFtRGVzY3JpcHRvcikKK3sKKyAgICBpZiAoIW1fc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCB8fCAhbV9zdWNjZXNzQ2FsbGJhY2spCiAgICAgICAgIHJldHVybjsKIAorICAgIGNhbGxPbk1h
aW5UaHJlYWQoYmluZCgmVXNlck1lZGlhUmVxdWVzdDo6Y2FsbFN1Y2Nlc3NIYW5kbGVyLCB0aGlz
LCBzdHJlYW1EZXNjcmlwdG9yKSk7Cit9CisKK3ZvaWQgVXNlck1lZGlhUmVxdWVzdDo6Y2FsbFN1
Y2Nlc3NIYW5kbGVyKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1EZXNjcmlwdG9yPiBzdHJlYW1EZXNj
cmlwdG9yKQoreworICAgIC8vIDQgLSBDcmVhdGUgdGhlIE1lZGlhU3RyZWFtIGFuZCBwYXNzIGl0
IHRvIHRoZSBzdWNjZXNzIGNhbGxiYWNrLgorICAgIEFTU0VSVChtX3N1Y2Nlc3NDYWxsYmFjayk7
CisKICAgICBSZWZQdHI8TWVkaWFTdHJlYW0+IHN0cmVhbSA9IE1lZGlhU3RyZWFtOjpjcmVhdGUo
bV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LCBzdHJlYW1EZXNjcmlwdG9yKTsKIAogICAgIE1lZGlh
U3RyZWFtVHJhY2tWZWN0b3IgdHJhY2tzID0gc3RyZWFtLT5nZXRBdWRpb1RyYWNrcygpOwogICAg
IGZvciAoTWVkaWFTdHJlYW1UcmFja1ZlY3Rvcjo6aXRlcmF0b3IgaXRlciA9IHRyYWNrcy5iZWdp
bigpOyBpdGVyICE9IHRyYWNrcy5lbmQoKTsgKytpdGVyKQotICAgICAgICAoKml0ZXIpLT5jb21w
b25lbnQoKS0+c291cmNlKCktPnNldENvbnN0cmFpbnRzKG1fYXVkaW9Db25zdHJhaW50cyk7Cisg
ICAgICAgICgqaXRlciktPnNvdXJjZSgpLT5zZXRDb25zdHJhaW50cyhtX2F1ZGlvQ29uc3RyYWlu
dHMpOwogCiAgICAgdHJhY2tzID0gc3RyZWFtLT5nZXRWaWRlb1RyYWNrcygpOwogICAgIGZvciAo
TWVkaWFTdHJlYW1UcmFja1ZlY3Rvcjo6aXRlcmF0b3IgaXRlciA9IHRyYWNrcy5iZWdpbigpOyBp
dGVyICE9IHRyYWNrcy5lbmQoKTsgKytpdGVyKQotICAgICAgICAoKml0ZXIpLT5jb21wb25lbnQo
KS0+c291cmNlKCktPnNldENvbnN0cmFpbnRzKG1fdmlkZW9Db25zdHJhaW50cyk7CisgICAgICAg
ICgqaXRlciktPnNvdXJjZSgpLT5zZXRDb25zdHJhaW50cyhtX3ZpZGVvQ29uc3RyYWludHMpOwog
CisgICAgTWVkaWFTdHJlYW06OnNoYXJlZFN0cmVhbUNlbnRlcigpLmRpZENyZWF0ZU1lZGlhU3Ry
ZWFtKHN0cmVhbURlc2NyaXB0b3IuZ2V0KCkpOwogICAgIG1fc3VjY2Vzc0NhbGxiYWNrLT5oYW5k
bGVFdmVudChzdHJlYW0uZ2V0KCkpOwogfQogCi12b2lkIFVzZXJNZWRpYVJlcXVlc3Q6OnBlcm1p
c3Npb25GYWlsdXJlKCkKK3ZvaWQgVXNlck1lZGlhUmVxdWVzdDo6ZmFpbGVkVG9DcmVhdGVTdHJl
YW1XaXRoQ29uc3RyYWludHNFcnJvcihjb25zdCBTdHJpbmcmIGNvbnN0cmFpbnROYW1lKQogewor
ICAgIEFTU0VSVCghY29uc3RyYWludE5hbWUuaXNFbXB0eSgpKTsKICAgICBpZiAoIW1fc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKCFtX2Vycm9yQ2Fs
bGJhY2spCiAgICAgICAgIHJldHVybjsKLSAgICAKLSAgICBSZWZQdHI8TmF2aWdhdG9yVXNlck1l
ZGlhRXJyb3I+IGVycm9yID0gTmF2aWdhdG9yVXNlck1lZGlhRXJyb3I6OmNyZWF0ZShOYXZpZ2F0
b3JVc2VyTWVkaWFFcnJvcjo6cGVybWlzc2lvbkRlbmllZEVycm9yTmFtZSgpLCBlbXB0eVN0cmlu
ZygpKTsKKworICAgIFJlZlB0cjxOYXZpZ2F0b3JVc2VyTWVkaWFFcnJvcj4gZXJyb3IgPSBOYXZp
Z2F0b3JVc2VyTWVkaWFFcnJvcjo6Y3JlYXRlKE5hdmlnYXRvclVzZXJNZWRpYUVycm9yOjpjb25z
dHJhaW50Tm90U2F0aXNmaWVkRXJyb3JOYW1lKCksIGNvbnN0cmFpbnROYW1lKTsKICAgICBjYWxs
T25NYWluVGhyZWFkKGJpbmQoJlVzZXJNZWRpYVJlcXVlc3Q6OmNhbGxFcnJvckhhbmRsZXIsIHRo
aXMsIGVycm9yLnJlbGVhc2UoKSkpOwogfQogCi12b2lkIFVzZXJNZWRpYVJlcXVlc3Q6OmNvbnN0
cmFpbnRGYWlsdXJlKGNvbnN0IFN0cmluZyYgY29uc3RyYWludE5hbWUpCit2b2lkIFVzZXJNZWRp
YVJlcXVlc3Q6OmZhaWxlZFRvQ3JlYXRlU3RyZWFtV2l0aFBlcm1pc3Npb25FcnJvcigpCiB7Ci0g
ICAgQVNTRVJUKCFjb25zdHJhaW50TmFtZS5pc0VtcHR5KCkpOwogICAgIGlmICghbV9zY3JpcHRF
eGVjdXRpb25Db250ZXh0KQogICAgICAgICByZXR1cm47Ci0gICAgCisKICAgICBpZiAoIW1fZXJy
b3JDYWxsYmFjaykKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVmUHRyPE5hdmlnYXRvclVzZXJN
ZWRpYUVycm9yPiBlcnJvciA9IE5hdmlnYXRvclVzZXJNZWRpYUVycm9yOjpjcmVhdGUoTmF2aWdh
dG9yVXNlck1lZGlhRXJyb3I6OmNvbnN0cmFpbnROb3RTYXRpc2ZpZWRFcnJvck5hbWUoKSwgY29u
c3RyYWludE5hbWUpOworICAgIFJlZlB0cjxOYXZpZ2F0b3JVc2VyTWVkaWFFcnJvcj4gZXJyb3Ig
PSBOYXZpZ2F0b3JVc2VyTWVkaWFFcnJvcjo6Y3JlYXRlKE5hdmlnYXRvclVzZXJNZWRpYUVycm9y
OjpwZXJtaXNzaW9uRGVuaWVkRXJyb3JOYW1lKCksIGVtcHR5U3RyaW5nKCkpOwogICAgIGNhbGxP
bk1haW5UaHJlYWQoYmluZCgmVXNlck1lZGlhUmVxdWVzdDo6Y2FsbEVycm9ySGFuZGxlciwgdGhp
cywgZXJyb3IucmVsZWFzZSgpKSk7CiB9CiAKLXZvaWQgVXNlck1lZGlhUmVxdWVzdDo6Y2FsbFN1
Y2Nlc3NIYW5kbGVyKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW0+IHN0cmVhbSkKK3ZvaWQgVXNlck1l
ZGlhUmVxdWVzdDo6Y2FsbEVycm9ySGFuZGxlcihQYXNzUmVmUHRyPE5hdmlnYXRvclVzZXJNZWRp
YUVycm9yPiBwcnBFcnJvcikKIHsKLSAgICBBU1NFUlQobV9zdWNjZXNzQ2FsbGJhY2spOwotICAg
IAotICAgIG1fc3VjY2Vzc0NhbGxiYWNrLT5oYW5kbGVFdmVudChzdHJlYW0uZ2V0KCkpOwotfQor
ICAgIFJlZlB0cjxOYXZpZ2F0b3JVc2VyTWVkaWFFcnJvcj4gZXJyb3IgPSBwcnBFcnJvcjsKIAot
dm9pZCBVc2VyTWVkaWFSZXF1ZXN0OjpjYWxsRXJyb3JIYW5kbGVyKFBhc3NSZWZQdHI8TmF2aWdh
dG9yVXNlck1lZGlhRXJyb3I+IGVycm9yKQotewogICAgIEFTU0VSVChlcnJvcik7CiAgICAgCiAg
ICAgbV9lcnJvckNhbGxiYWNrLT5oYW5kbGVFdmVudChlcnJvci5nZXQoKSk7CkBAIC0xOTAsNyAr
MjE2LDcgQEAgdm9pZCBVc2VyTWVkaWFSZXF1ZXN0Ojpjb250ZXh0RGVzdHJveWVkKAogICAgIFJl
ZjxVc2VyTWVkaWFSZXF1ZXN0PiBwcm90ZWN0KCp0aGlzKTsKIAogICAgIGlmIChtX2NvbnRyb2xs
ZXIpIHsKLSAgICAgICAgbV9jb250cm9sbGVyLT5jYW5jZWxVc2VyTWVkaWFSZXF1ZXN0KHRoaXMp
OworICAgICAgICBtX2NvbnRyb2xsZXItPmNhbmNlbFJlcXVlc3QodGhpcyk7CiAgICAgICAgIG1f
Y29udHJvbGxlciA9IDA7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhc3RyZWFtL1VzZXJNZWRpYVJlcXVlc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1VzZXJNZWRpYVJlcXVlc3QuaAkocmV2aXNpb24gMTU2MjM4
KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9Vc2VyTWVkaWFSZXF1ZXN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAy
MDExIEVyaWNzc29uIEFCLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMzQsMTIgKzM1LDEyIEBACiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkK
IAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbkJhc2Uu
aCIKKyNpbmNsdWRlICJNZWRpYVN0cmVhbUNyZWF0aW9uQ2xpZW50LmgiCiAjaW5jbHVkZSAiTWVk
aWFTdHJlYW1Tb3VyY2UuaCIKLSNpbmNsdWRlICJNZWRpYVN0cmVhbVNvdXJjZXNRdWVyeUNsaWVu
dC5oIgogI2luY2x1ZGUgIk5hdmlnYXRvclVzZXJNZWRpYUVycm9yQ2FsbGJhY2suaCIKICNpbmNs
dWRlICJOYXZpZ2F0b3JVc2VyTWVkaWFTdWNjZXNzQ2FsbGJhY2suaCIKICNpbmNsdWRlIDx3dGYv
UGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQ3LDM4ICs0OCw0
MyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBEaWN0aW9uYXJ5OwogY2xhc3MgRG9jdW1l
bnQ7CiBjbGFzcyBNZWRpYUNvbnN0cmFpbnRzOwotY2xhc3MgTWVkaWFDb25zdHJhaW50c0ltcGw7
CiBjbGFzcyBNZWRpYVN0cmVhbURlc2NyaXB0b3I7CiBjbGFzcyBVc2VyTWVkaWFDb250cm9sbGVy
OworY2xhc3MgU2VjdXJpdHlPcmlnaW47CiAKLWNsYXNzIFVzZXJNZWRpYVJlcXVlc3QgOiBwdWJs
aWMgTWVkaWFTdHJlYW1Tb3VyY2VzUXVlcnlDbGllbnQsIHB1YmxpYyBDb250ZXh0RGVzdHJ1Y3Rp
b25PYnNlcnZlciB7Cit0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOworCitjbGFzcyBVc2VyTWVk
aWFSZXF1ZXN0IDogcHVibGljIE1lZGlhU3RyZWFtQ3JlYXRpb25DbGllbnQsIHB1YmxpYyBDb250
ZXh0RGVzdHJ1Y3Rpb25PYnNlcnZlciB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8
VXNlck1lZGlhUmVxdWVzdD4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBVc2VyTWVk
aWFDb250cm9sbGVyKiwgY29uc3QgRGljdGlvbmFyeSYgb3B0aW9ucywgUGFzc1JlZlB0cjxOYXZp
Z2F0b3JVc2VyTWVkaWFTdWNjZXNzQ2FsbGJhY2s+LCBQYXNzUmVmUHRyPE5hdmlnYXRvclVzZXJN
ZWRpYUVycm9yQ2FsbGJhY2s+LCBFeGNlcHRpb25Db2RlJik7CiAgICAgflVzZXJNZWRpYVJlcXVl
c3QoKTsKIAotICAgIERvY3VtZW50KiBvd25lckRvY3VtZW50KCk7CisgICAgU2VjdXJpdHlPcmln
aW4qIHNlY3VyaXR5T3JpZ2luKCkgY29uc3Q7CiAKICAgICB2b2lkIHN0YXJ0KCk7Ci0gICAgdm9p
ZCBzdWNjZWVkKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1EZXNjcmlwdG9yPik7Ci0gICAgdm9pZCBw
ZXJtaXNzaW9uRmFpbHVyZSgpOwotICAgIHZvaWQgY29uc3RyYWludEZhaWx1cmUoY29uc3QgU3Ry
aW5nJiBjb25zdHJhaW50TmFtZSk7Ci0KLSAgICAvLyBNZWRpYVN0cmVhbVNvdXJjZXNRdWVyeUNs
aWVudAotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxNZWRpYUNvbnN0cmFpbnRzPiBhdWRpb0NvbnN0
cmFpbnRzKCkgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPE1lZGlhQ29u
c3RyYWludHM+IHZpZGVvQ29uc3RyYWludHMoKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFs
IHZvaWQgZGlkQ29tcGxldGVRdWVyeShjb25zdCBNZWRpYVN0cmVhbVNvdXJjZVZlY3RvciYgYXVk
aW9Tb3VyY2VzLCBjb25zdCBNZWRpYVN0cmVhbVNvdXJjZVZlY3RvciYgdmlkZW9Tb3VyY2VzKSBP
VkVSUklERTsKLQotICAgIC8vIENvbnRleHREZXN0cnVjdGlvbk9ic2VydmVyCi0gICAgdmlydHVh
bCB2b2lkIGNvbnRleHREZXN0cm95ZWQoKTsKKyAgICB2b2lkIHVzZXJNZWRpYUFjY2Vzc0dyYW50
ZWQoKTsKKyAgICB2b2lkIHVzZXJNZWRpYUFjY2Vzc0RlbmllZCgpOwogCiBwcml2YXRlOgotICAg
IFVzZXJNZWRpYVJlcXVlc3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFVzZXJNZWRpYUNvbnRy
b2xsZXIqLCBQYXNzUmVmUHRyPE1lZGlhQ29uc3RyYWludHNJbXBsPiBhdWRpb0NvbnN0cmFpbnRz
LCBQYXNzUmVmUHRyPE1lZGlhQ29uc3RyYWludHNJbXBsPiB2aWRlb0NvbnN0cmFpbnRzLCBQYXNz
UmVmUHRyPE5hdmlnYXRvclVzZXJNZWRpYVN1Y2Nlc3NDYWxsYmFjaz4sIFBhc3NSZWZQdHI8TmF2
aWdhdG9yVXNlck1lZGlhRXJyb3JDYWxsYmFjaz4pOworICAgIFVzZXJNZWRpYVJlcXVlc3QoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCosIFVzZXJNZWRpYUNvbnRyb2xsZXIqLCBQYXNzUmVmUHRyPE1l
ZGlhQ29uc3RyYWludHM+IGF1ZGlvQ29uc3RyYWludHMsIFBhc3NSZWZQdHI8TWVkaWFDb25zdHJh
aW50cz4gdmlkZW9Db25zdHJhaW50cywgUGFzc1JlZlB0cjxOYXZpZ2F0b3JVc2VyTWVkaWFTdWNj
ZXNzQ2FsbGJhY2s+LCBQYXNzUmVmUHRyPE5hdmlnYXRvclVzZXJNZWRpYUVycm9yQ2FsbGJhY2s+
KTsKIAotICAgIHZvaWQgY2FsbFN1Y2Nlc3NIYW5kbGVyKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW0+
KTsKKyAgICAvLyBNZWRpYVN0cmVhbUNyZWF0aW9uQ2xpZW50CisgICAgdmlydHVhbCB2b2lkIGNv
bnN0cmFpbnRzVmFsaWRhdGVkKCkgT1ZFUlJJREUgRklOQUw7CisgICAgdmlydHVhbCB2b2lkIGNv
bnN0cmFpbnRzSW52YWxpZChjb25zdCBTdHJpbmcmIGNvbnN0cmFpbnROYW1lKSBPVkVSUklERSBG
SU5BTDsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ3JlYXRlU3RyZWFtKFBhc3NSZWZQdHI8TWVkaWFT
dHJlYW1EZXNjcmlwdG9yPikgT1ZFUlJJREUgRklOQUw7CisgICAgdmlydHVhbCB2b2lkIGZhaWxl
ZFRvQ3JlYXRlU3RyZWFtV2l0aENvbnN0cmFpbnRzRXJyb3IoY29uc3QgU3RyaW5nJiBjb25zdHJh
aW50TmFtZSkgT1ZFUlJJREUgRklOQUw7CisgICAgdmlydHVhbCB2b2lkIGZhaWxlZFRvQ3JlYXRl
U3RyZWFtV2l0aFBlcm1pc3Npb25FcnJvcigpIE9WRVJSSURFIEZJTkFMOworCisgICAgLy8gQ29u
dGV4dERlc3RydWN0aW9uT2JzZXJ2ZXIKKyAgICB2aXJ0dWFsIHZvaWQgY29udGV4dERlc3Ryb3ll
ZCgpIE9WRVJSSURFIEZJTkFMOworICAgIAorICAgIHZvaWQgY2FsbFN1Y2Nlc3NIYW5kbGVyKFBh
c3NSZWZQdHI8TWVkaWFTdHJlYW1EZXNjcmlwdG9yPik7CiAgICAgdm9pZCBjYWxsRXJyb3JIYW5k
bGVyKFBhc3NSZWZQdHI8TmF2aWdhdG9yVXNlck1lZGlhRXJyb3I+KTsKKyAgICB2b2lkIHJlcXVl
c3RQZXJtaXNzaW9uKCk7CisgICAgdm9pZCBjcmVhdGVNZWRpYVN0cmVhbSgpOwogCi0gICAgUmVm
UHRyPE1lZGlhQ29uc3RyYWludHNJbXBsPiBtX2F1ZGlvQ29uc3RyYWludHM7Ci0gICAgUmVmUHRy
PE1lZGlhQ29uc3RyYWludHNJbXBsPiBtX3ZpZGVvQ29uc3RyYWludHM7CisgICAgUmVmUHRyPE1l
ZGlhQ29uc3RyYWludHM+IG1fYXVkaW9Db25zdHJhaW50czsKKyAgICBSZWZQdHI8TWVkaWFDb25z
dHJhaW50cz4gbV92aWRlb0NvbnN0cmFpbnRzOwogCiAgICAgVXNlck1lZGlhQ29udHJvbGxlciog
bV9jb250cm9sbGVyOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1
ZGlvQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJh
dWRpby9BdWRpb0NvbnRleHQuY3BwCShyZXZpc2lvbiAxNTYyMzgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQy
MSw3ICs0MjEsNyBAQCBQYXNzUmVmUHRyPE1lZGlhU3RyZWFtQXVkaW9Tb3VyY2VOb2RlPiBBCiAg
ICAgLy8gRklYTUU6IGdldCBhIHByb3ZpZGVyIGZvciBub24tbG9jYWwgTWVkaWFTdHJlYW1zIChs
aWtlIGZyb20gYSByZW1vdGUgcGVlcikuCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhdWRp
b1RyYWNrcy5zaXplKCk7ICsraSkgewogICAgICAgICBSZWZQdHI8TWVkaWFTdHJlYW1UcmFjaz4g
bG9jYWxBdWRpbyA9IGF1ZGlvVHJhY2tzW2ldOwotICAgICAgICBNZWRpYVN0cmVhbVNvdXJjZSog
c291cmNlID0gbG9jYWxBdWRpby0+Y29tcG9uZW50KCktPnNvdXJjZSgpOworICAgICAgICBNZWRp
YVN0cmVhbVNvdXJjZSogc291cmNlID0gbG9jYWxBdWRpby0+c291cmNlKCk7CiAgICAgICAgIGlm
ICghc291cmNlLT5kZXZpY2VJZCgpLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgZGVzdGluYXRp
b24oKS0+ZW5hYmxlSW5wdXQoc291cmNlLT5kZXZpY2VJZCgpKTsKICAgICAgICAgICAgIHByb3Zp
ZGVyID0gZGVzdGluYXRpb24oKS0+bG9jYWxBdWRpb0lucHV0UHJvdmlkZXIoKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vTWVkaWFTdHJlYW1BdWRpb0Rlc3RpbmF0aW9u
Tm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9N
ZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcAkocmV2aXNpb24gMTU2MjM4KQorKysg
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9NZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRp
b25Ob2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksMTIgKzQ5LDEyIEBAIE1lZGlhU3RyZWFt
QXVkaW9EZXN0aW5hdGlvbk5vZGU6Ok1lZGlhU3QKIHsKICAgICBzZXROb2RlVHlwZShOb2RlVHlw
ZU1lZGlhU3RyZWFtQXVkaW9EZXN0aW5hdGlvbik7CiAKLSAgICBtX3NvdXJjZSA9IE1lZGlhU3Ry
ZWFtU291cmNlOjpjcmVhdGUoQVNDSUlMaXRlcmFsKCJXZWJBdWRpby0iKSArIGNyZWF0ZUNhbm9u
aWNhbFVVSURTdHJpbmcoKSwgTWVkaWFTdHJlYW1Tb3VyY2U6OlR5cGVBdWRpbywgIk1lZGlhU3Ry
ZWFtQXVkaW9EZXN0aW5hdGlvbk5vZGUiLCBNZWRpYVN0cmVhbVNvdXJjZTo6UmVhZHlTdGF0ZUxp
dmUsIHRydWUpOworICAgIG1fc291cmNlID0gTWVkaWFTdHJlYW1Tb3VyY2U6OmNyZWF0ZShBU0NJ
SUxpdGVyYWwoIldlYkF1ZGlvLSIpICsgY3JlYXRlQ2Fub25pY2FsVVVJRFN0cmluZygpLCBNZWRp
YVN0cmVhbVNvdXJjZTo6QXVkaW8sICJNZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRpb25Ob2RlIiwg
TWVkaWFTdHJlYW1Tb3VyY2U6OkxpdmUsIHRydWUpOwogICAgIE1lZGlhU3RyZWFtU291cmNlVmVj
dG9yIGF1ZGlvU291cmNlczsKICAgICBhdWRpb1NvdXJjZXMuYXBwZW5kKG1fc291cmNlKTsKICAg
ICBNZWRpYVN0cmVhbVNvdXJjZVZlY3RvciB2aWRlb1NvdXJjZXM7CiAgICAgbV9zdHJlYW0gPSBN
ZWRpYVN0cmVhbTo6Y3JlYXRlKGNvbnRleHQtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgTWVk
aWFTdHJlYW1EZXNjcmlwdG9yOjpjcmVhdGUoYXVkaW9Tb3VyY2VzLCB2aWRlb1NvdXJjZXMpKTsK
LSAgICBNZWRpYVN0cmVhbUNlbnRlcjo6aW5zdGFuY2UoKS5kaWRDcmVhdGVNZWRpYVN0cmVhbSht
X3N0cmVhbS0+ZGVzY3JpcHRvcigpKTsKKyAgICBNZWRpYVN0cmVhbTo6c2hhcmVkU3RyZWFtQ2Vu
dGVyKCkuZGlkQ3JlYXRlTWVkaWFTdHJlYW0obV9zdHJlYW0tPmRlc2NyaXB0b3IoKSk7CiAKICAg
ICBtX3NvdXJjZS0+c2V0QXVkaW9Gb3JtYXQobnVtYmVyT2ZDaGFubmVscywgY29udGV4dC0+c2Ft
cGxlUmF0ZSgpKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTU2MjM4KQorKysgU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC05NSw3
ICs5NSw4IEBACiAJCTA3MDc1NkRGMTQyMzlCNEUwMDQxNDE2MSAvKiBKU1RleHRUcmFja0N1ZUxp
c3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDcw
NzU2RDkxNDIzOUI0QzAwNDE0MTYxIC8qIEpTVGV4dFRyYWNrQ3VlTGlzdC5jcHAgKi87IH07CiAJ
CTA3MDc1NkUwMTQyMzlCNEUwMDQxNDE2MSAvKiBKU1RleHRUcmFja0N1ZUxpc3QuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3MDc1NkRBMTQyMzlCNEUw
MDQxNDE2MSAvKiBKU1RleHRUcmFja0N1ZUxpc3QuaCAqLzsgfTsKIAkJMDcwOUZDNEUxMDI1REVF
MzAwNTlDREJBIC8qIEFjY2Vzc2liaWxpdHlTbGlkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3MDlGQzREMTAyNURFRTMwMDU5Q0RCQSAvKiBBY2Nl
c3NpYmlsaXR5U2xpZGVyLmggKi87IH07Ci0JCTA3MTE1ODkwMTdERjZGNjIwMEVERkUyQiAvKiBN
ZWRpYVN0cmVhbUNvbXBvbmVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwNzExNTg4RTE3REY2MzM3MDBFREZFMkIgLyogTWVkaWFTdHJlYW1Db21w
b25lbnQuY3BwICovOyB9OworCQkwNzBGNTQ5ODE3RjEyRjZCMDAxNjlFMDQgLyogTWVkaWFTdHJl
YW1Db25zdHJhaW50c1ZhbGlkYXRpb25DbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3MEY1NDk3MTdGMTJGNkIwMDE2OUUwNCAvKiBNZWRpYVN0
cmVhbUNvbnN0cmFpbnRzVmFsaWRhdGlvbkNsaWVudC5oICovOyB9OworCQkwNzBGNTQ5RTE3RjI0
MDI3MDAxNjlFMDQgLyogQXVkaW9EZXN0aW5hdGlvbkNvbnN1bWVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzBGNTQ5RDE3RjI0MDI3MDAxNjlFMDQg
LyogQXVkaW9EZXN0aW5hdGlvbkNvbnN1bWVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMDcxMTU4OTExN0RGNkY2NjAwRURGRTJCIC8qIE1lZGlh
U3RyZWFtRGVzY3JpcHRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwNzExNTg4RjE3REY2MzM3MDBFREZFMkIgLyogTWVkaWFTdHJlYW1EZXNjcmlw
dG9yLmNwcCAqLzsgfTsKIAkJMDcxQTlFQzIxNjhGQkM0MzAwMjYyOUY5IC8qIFRleHRUcmFja0N1
ZUdlbmVyaWMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMDcxQTlFQzAxNjhGQjU2QzAwMjYyOUY5IC8qIFRleHRUcmFja0N1ZUdlbmVyaWMuY3BwICov
OyB9OwogCQkwNzFBOUVDMzE2OEZCQzU1MDAyNjI5RjkgLyogVGV4dFRyYWNrQ3VlR2VuZXJpYy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDcxQTlFQzEx
NjhGQjU2QzAwMjYyOUY5IC8qIFRleHRUcmFja0N1ZUdlbmVyaWMuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMjAyLDExICsyMDMsMTAgQEAKIAkJ
MDc4RTA5MzIxN0QxNjg0NjAwNDIwQUExIC8qIE1lZGlhU3RyZWFtQ2VudGVyTWFjLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzI5QjE0RjE3Q0ZDQ0Ew
MDA0RjFENjAgLyogTWVkaWFTdHJlYW1DZW50ZXJNYWMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwNzhFMDkzMzE3RDE2QjA2MDA0MjBBQTEgLyog
TWVkaWFTdHJlYW1DZW50ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMDcyMjFCOUExN0NGMEFENDAwODQ4RTUxIC8qIE1lZGlhU3RyZWFtQ2VudGVy
LmNwcCAqLzsgfTsKIAkJMDc4RTA5MzQxN0QxNkIwQjAwNDIwQUExIC8qIE1lZGlhU3RyZWFtQ2Vu
dGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzIy
MUI5QjE3Q0YwQUQ0MDA4NDhFNTEgLyogTWVkaWFTdHJlYW1DZW50ZXIuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkwNzhFMDkzNTE3RDE2QjIxMDA0
MjBBQTEgLyogTWVkaWFTdHJlYW1Db21wb25lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3MjIxQjlDMTdDRjBBRDQwMDg0OEU1MSAvKiBNZWRpYVN0
cmVhbUNvbXBvbmVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTA3OEUwOTM2MTdEMTZCMjEwMDQyMEFBMSAvKiBNZWRpYVN0cmVhbVNvdXJjZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzIyMUI5
RTE3Q0YwQUQ0MDA4NDhFNTEgLyogTWVkaWFTdHJlYW1Tb3VyY2UuY3BwICovOyB9OwogCQkwNzhF
MDkzNzE3RDE2QjJDMDA0MjBBQTEgLyogTWVkaWFTdHJlYW1EZXNjcmlwdG9yLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzIyMUI5RDE3Q0YwQUQ0MDA4
NDhFNTEgLyogTWVkaWFTdHJlYW1EZXNjcmlwdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMDc4RTA5MzgxN0QxNkIyQzAwNDIwQUExIC8qIE1l
ZGlhU3RyZWFtU291cmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwNzIyMUI5RjE3Q0YwQUQ0MDA4NDhFNTEgLyogTWVkaWFTdHJlYW1Tb3VyY2UuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkwNzhFMDkz
OTE3RDE2QjJDMDA0MjBBQTEgLyogTWVkaWFTdHJlYW1Tb3VyY2VzUXVlcnlDbGllbnQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3MjIxQkEwMTdDRjBB
RDQwMDg0OEU1MSAvKiBNZWRpYVN0cmVhbVNvdXJjZXNRdWVyeUNsaWVudC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTA3OEUwOTM5MTdEMTZCMkMw
MDQyMEFBMSAvKiBNZWRpYVN0cmVhbUNyZWF0aW9uQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzIyMUJBMDE3Q0YwQUQ0MDA4NDhFNTEgLyog
TWVkaWFTdHJlYW1DcmVhdGlvbkNsaWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTA3OEUwOTNBMTdEMTZFMUMwMDQyMEFBMSAvKiBNZWRpYUNv
bnN0cmFpbnRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwNzIyMUI5OTE3Q0YwQUQ0MDA4NDhFNTEgLyogTWVkaWFDb25zdHJhaW50cy5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTA3OEUwOTNCMTdEMTZF
MUMwMDQyMEFBMSAvKiBSVENDb25maWd1cmF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzIyMUJBMTE3Q0YwQUQ0MDA4NDhFNTEgLyogUlRDQ29u
ZmlndXJhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTA3OEUwOTNDMTdEMTZFMUMwMDQyMEFBMSAvKiBSVENEYXRhQ2hhbm5lbEhhbmRsZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3MjIxQkEy
MTdDRjBBRDQwMDg0OEU1MSAvKiBSVENEYXRhQ2hhbm5lbEhhbmRsZXIuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNjQ3NCw3ICs2NDc0LDggQEAK
IAkJMDcwNzU2REExNDIzOUI0RTAwNDE0MTYxIC8qIEpTVGV4dFRyYWNrQ3VlTGlzdC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1RleHRUcmFja0N1ZUxpc3QuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDcwOUZDNEQxMDI1REVFMzAwNTlDREJBIC8qIEFjY2Vz
c2liaWxpdHlTbGlkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQWNjZXNz
aWJpbGl0eVNsaWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwNzBERDhGNTBG
MDE4NjgwMDA3MjdERUIgLyogbWVkaWFDb250cm9scy5jc3MgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRo
ID0gbWVkaWFDb250cm9scy5jc3M7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTA3MTE1
ODhFMTdERjYzMzcwMEVERkUyQiAvKiBNZWRpYVN0cmVhbUNvbXBvbmVudC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNZWRpYVN0cmVhbUNvbXBvbmVudC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTA3MEY1NDk3MTdGMTJGNkIwMDE2OUUwNCAvKiBN
ZWRpYVN0cmVhbUNvbnN0cmFpbnRzVmFsaWRhdGlvbkNsaWVudC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBNZWRpYVN0cmVhbUNvbnN0cmFpbnRzVmFsaWRhdGlvbkNsaWVudC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwNzBGNTQ5RDE3RjI0MDI3MDAxNjlFMDQg
LyogQXVkaW9EZXN0aW5hdGlvbkNvbnN1bWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEF1ZGlvRGVzdGluYXRpb25Db25zdW1lci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwNzExNTg4RjE3REY2MzM3MDBFREZFMkIgLyogTWVkaWFTdHJlYW1EZXNjcmlwdG9y
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1lZGlhU3RyZWFtRGVz
Y3JpcHRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3MUE5RUMwMTY4RkI1
NkMwMDI2MjlGOSAvKiBUZXh0VHJhY2tDdWVHZW5lcmljLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFRleHRUcmFja0N1ZUdlbmVyaWMuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwNzFBOUVDMTE2OEZCNTZDMDAyNjI5RjkgLyogVGV4dFRyYWNrQ3Vl
R2VuZXJpYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZXh0VHJhY2tDdWVH
ZW5lcmljLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02NTU3LDExICs2NTU4LDEw
IEBACiAJCTA3MjIxQjk5MTdDRjBBRDQwMDg0OEU1MSAvKiBNZWRpYUNvbnN0cmFpbnRzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhQ29uc3RyYWludHMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDcyMjFCOUExN0NGMEFENDAwODQ4RTUxIC8qIE1lZGlh
U3RyZWFtQ2VudGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1l
ZGlhU3RyZWFtQ2VudGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDcyMjFC
OUIxN0NGMEFENDAwODQ4RTUxIC8qIE1lZGlhU3RyZWFtQ2VudGVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhU3RyZWFtQ2VudGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTA3MjIxQjlDMTdDRjBBRDQwMDg0OEU1MSAvKiBNZWRpYVN0cmVhbUNvbXBv
bmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYVN0cmVhbUNvbXBv
bmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwNzIyMUI5RDE3Q0YwQUQ0MDA4
NDhFNTEgLyogTWVkaWFTdHJlYW1EZXNjcmlwdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IE1lZGlhU3RyZWFtRGVzY3JpcHRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwNzIyMUI5RTE3Q0YwQUQ0MDA4NDhFNTEgLyogTWVkaWFTdHJlYW1Tb3VyY2UuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWVkaWFTdHJlYW1Tb3VyY2Uu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwNzIyMUI5RjE3Q0YwQUQ0MDA4NDhF
NTEgLyogTWVkaWFTdHJlYW1Tb3VyY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gTWVkaWFTdHJlYW1Tb3VyY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMDcy
MjFCQTAxN0NGMEFENDAwODQ4RTUxIC8qIE1lZGlhU3RyZWFtU291cmNlc1F1ZXJ5Q2xpZW50Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhU3RyZWFtU291cmNlc1F1ZXJ5
Q2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTA3MjIxQkEwMTdDRjBBRDQw
MDg0OEU1MSAvKiBNZWRpYVN0cmVhbUNyZWF0aW9uQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IE1lZGlhU3RyZWFtQ3JlYXRpb25DbGllbnQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMDcyMjFCQTExN0NGMEFENDAwODQ4RTUxIC8qIFJUQ0NvbmZpZ3Vy
YXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUlRDQ29uZmlndXJhdGlv
bi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwNzIyMUJBMjE3Q0YwQUQ0MDA4NDhF
NTEgLyogUlRDRGF0YUNoYW5uZWxIYW5kbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFJUQ0RhdGFDaGFubmVsSGFuZGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwNzIyMUJBMzE3Q0YwQUQ0MDA4NDhFNTEgLyogUlRDRGF0YUNoYW5uZWxIYW5kbGVyQ2xp
ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJUQ0RhdGFDaGFubmVsSGFu
ZGxlckNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTM0MDgsMTMgKzEz
NDA4LDEyIEBACiAJCQkJMDcyMjFCOTkxN0NGMEFENDAwODQ4RTUxIC8qIE1lZGlhQ29uc3RyYWlu
dHMuaCAqLywKIAkJCQkwNzIyMUI5QTE3Q0YwQUQ0MDA4NDhFNTEgLyogTWVkaWFTdHJlYW1DZW50
ZXIuY3BwICovLAogCQkJCTA3MjIxQjlCMTdDRjBBRDQwMDg0OEU1MSAvKiBNZWRpYVN0cmVhbUNl
bnRlci5oICovLAotCQkJCTA3MTE1ODhFMTdERjYzMzcwMEVERkUyQiAvKiBNZWRpYVN0cmVhbUNv
bXBvbmVudC5jcHAgKi8sCi0JCQkJMDcyMjFCOUMxN0NGMEFENDAwODQ4RTUxIC8qIE1lZGlhU3Ry
ZWFtQ29tcG9uZW50LmggKi8sCisJCQkJMDcwRjU0OTcxN0YxMkY2QjAwMTY5RTA0IC8qIE1lZGlh
U3RyZWFtQ29uc3RyYWludHNWYWxpZGF0aW9uQ2xpZW50LmggKi8sCisJCQkJMDcyMjFCQTAxN0NG
MEFENDAwODQ4RTUxIC8qIE1lZGlhU3RyZWFtQ3JlYXRpb25DbGllbnQuaCAqLywKIAkJCQkwNzEx
NTg4RjE3REY2MzM3MDBFREZFMkIgLyogTWVkaWFTdHJlYW1EZXNjcmlwdG9yLmNwcCAqLywKIAkJ
CQkwNzIyMUI5RDE3Q0YwQUQ0MDA4NDhFNTEgLyogTWVkaWFTdHJlYW1EZXNjcmlwdG9yLmggKi8s
CiAJCQkJMDcyMjFCOUUxN0NGMEFENDAwODQ4RTUxIC8qIE1lZGlhU3RyZWFtU291cmNlLmNwcCAq
LywKIAkJCQkwNzIyMUI5RjE3Q0YwQUQ0MDA4NDhFNTEgLyogTWVkaWFTdHJlYW1Tb3VyY2UuaCAq
LywKLQkJCQkwNzIyMUJBMDE3Q0YwQUQ0MDA4NDhFNTEgLyogTWVkaWFTdHJlYW1Tb3VyY2VzUXVl
cnlDbGllbnQuaCAqLywKIAkJCQkwNzYzMDZFMjE3RTIyQTQzMDA1QTdDNEUgLyogTWVkaWFTdHJl
YW1UcmFja1NvdXJjZXNSZXF1ZXN0Q2xpZW50LmggKi8sCiAJCQkJMDcyMjFCQTExN0NGMEFENDAw
ODQ4RTUxIC8qIFJUQ0NvbmZpZ3VyYXRpb24uaCAqLywKIAkJCQkwNzIyMUJBMjE3Q0YwQUQ0MDA4
NDhFNTEgLyogUlRDRGF0YUNoYW5uZWxIYW5kbGVyLmggKi8sCkBAIC0yMTMwMyw2ICsyMTMwMiw3
IEBACiAJCQkJRkQzMTYwNDcxMkIwMjZGNzAwQzFBMzU5IC8qIEF1ZGlvQ2hhbm5lbC5jcHAgKi8s
CiAJCQkJRkQzMTYwNDgxMkIwMjZGNzAwQzFBMzU5IC8qIEF1ZGlvQ2hhbm5lbC5oICovLAogCQkJ
CUZEMzE2MDQ5MTJCMDI2RjcwMEMxQTM1OSAvKiBBdWRpb0Rlc3RpbmF0aW9uLmggKi8sCisJCQkJ
MDcwRjU0OUQxN0YyNDAyNzAwMTY5RTA0IC8qIEF1ZGlvRGVzdGluYXRpb25Db25zdW1lci5oICov
LAogCQkJCUZEMzE2MDRBMTJCMDI2RjcwMEMxQTM1OSAvKiBBdWRpb0RTUEtlcm5lbC5oICovLAog
CQkJCUZEMzE2MDRCMTJCMDI2RjcwMEMxQTM1OSAvKiBBdWRpb0RTUEtlcm5lbFByb2Nlc3Nvci5j
cHAgKi8sCiAJCQkJRkQzMTYwNEMxMkIwMjZGNzAwQzFBMzU5IC8qIEF1ZGlvRFNQS2VybmVsUHJv
Y2Vzc29yLmggKi8sCkBAIC0yMTU2MCw2ICsyMTU2MCw3IEBACiAJCQkJRkQzMTYwN0UxMkIwMjZG
NzAwQzFBMzU5IC8qIEF1ZGlvQ2hhbm5lbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkQzMTYwMDUx
MkIwMjY3NjAwQzFBMzU5IC8qIEF1ZGlvQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkQz
MTYwN0YxMkIwMjZGNzAwQzFBMzU5IC8qIEF1ZGlvRGVzdGluYXRpb24uaCBpbiBIZWFkZXJzICov
LAorCQkJCTA3MEY1NDlFMTdGMjQwMjcwMDE2OUUwNCAvKiBBdWRpb0Rlc3RpbmF0aW9uQ29uc3Vt
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUZEMzE2MEJEMTJCMDI3MkEwMEMxQTM1OSAvKiBBdWRp
b0Rlc3RpbmF0aW9uTWFjLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRDMxNjAwODEyQjAyNjc2MDBD
MUEzNTkgLyogQXVkaW9EZXN0aW5hdGlvbk5vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZEMzE2
MDgwMTJCMDI2RjcwMEMxQTM1OSAvKiBBdWRpb0RTUEtlcm5lbC5oIGluIEhlYWRlcnMgKi8sCkBA
IC0yMTgxOCw2ICsyMTgxOSw3IEBACiAJCQkJQkM1QTEyRTAwREMwNDE0ODAwQzlBRkFEIC8qIENT
U1JlZmxlY3RWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTgwRTZEMEQwQTE5ODlDQTAwN0ZC
OEM1IC8qIENTU1J1bGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4MEU2Q0YyMEExOTg5Q0EwMDdG
QjhDNSAvKiBDU1NSdWxlTGlzdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMDcwRjU0OTgxN0YxMkY2
QjAwMTY5RTA0IC8qIE1lZGlhU3RyZWFtQ29uc3RyYWludHNWYWxpZGF0aW9uQ2xpZW50LmggaW4g
SGVhZGVycyAqLywKIAkJCQkzNzFGNTFBMTBEMjYyRkEwMDBFQ0UwRDUgLyogQ1NTU2VnbWVudGVk
Rm9udEZhY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4MEU3MzUyMEExOTlDNzcwMDdGQjhDNSAv
KiBDU1NTZWxlY3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTRDMTc4OUIwRUU2OTAzODAwODI0
RDY5IC8qIENTU1NlbGVjdG9yTGlzdC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMTk2OSw3ICsyMTk3
MSw3IEBACiAJCQkJODU4QzM4QTUwQUE4RjIwNDAwQjE4N0E0IC8qIERPTUNvdW50ZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTg1RTcxMTkxMEFDNUQ1MzUwMDUzMjcwRiAvKiBET01Db3VudGVySW50
ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMUEzN0IwMDk3QzcxNUYwMDE5RjNEOCAvKiBE
T01DU1MuaCBpbiBIZWFkZXJzICovLAotCQkJCTA3OEUwOTM5MTdEMTZCMkMwMDQyMEFBMSAvKiBN
ZWRpYVN0cmVhbVNvdXJjZXNRdWVyeUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMDc4RTA5
MzkxN0QxNkIyQzAwNDIwQUExIC8qIE1lZGlhU3RyZWFtQ3JlYXRpb25DbGllbnQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTg1MDMyREQ3MEFBOEM5QkUwMDdEM0I3RCAvKiBET01DU1NDaGFyc2V0UnVs
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODU5MDlDREMwQUNDN0E3RTAwREYwMUYxIC8qIERPTUNT
U0NoYXJzZXRSdWxlSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1MDMyREQ5MEFBOEM5
QkUwMDdEM0I3RCAvKiBET01DU1NGb250RmFjZVJ1bGUuaCBpbiBIZWFkZXJzICovLApAQCAtMjQy
MzEsNyArMjQyMzMsNiBAQAogCQkJCUIyMjI3QTIxMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdGb250
RmFjZVVyaUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3QTI0MEQwMEJGMjIwMDcx
Qjc4MiAvKiBTVkdGb3JlaWduT2JqZWN0RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIy
MjdBMjcwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0dFbGVtZW50LmggaW4gSGVhZGVycyAqLywKLQkJ
CQkwNzhFMDkzNTE3RDE2QjIxMDA0MjBBQTEgLyogTWVkaWFTdHJlYW1Db21wb25lbnQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTA4N0UwQUY3MTM2MDZEMEIwMEZBNEJBOCAvKiBTVkdHbHlwaC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQjJBMUYyQUUwQ0VGMEFCRjAwNDQyRjZBIC8qIFNWR0dseXBoRWxl
bWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzc0NDU3MEYwREIwNUZBNTAwQUUwOTkyIC8qIFNW
R0dseXBoTWFwLmggaW4gSGVhZGVycyAqLywKQEAgLTI2NzU5LDcgKzI2NzYwLDYgQEAKIAkJCQlE
M0FBMTBGMzEyM0E5OEFBMDA5MjE1MkIgLyogTWVkaWFRdWVyeU1hdGNoZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQ0Q2MUZFNjcxNzk0QUFEQjAwNDEwMUVCIC8qIE1lZGlhU291cmNlUmVnaXN0
cnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkQ2NzFBNzcxNTlCQjA3MDAwMTk3NTU5IC8qIE1l
ZGlhU3RyZWFtQXVkaW9Tb3VyY2VOb2RlLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTA3MTE1ODkw
MTdERjZGNjIwMEVERkUyQiAvKiBNZWRpYVN0cmVhbUNvbXBvbmVudC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwNzExNTg5MTE3REY2RjY2MDBFREZFMkIgLyogTWVkaWFTdHJlYW1EZXNjcmlwdG9y
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDQjE2QzE3MDk3OUMzQkQwMDQ2Nzc0MSAvKiBNZW1v
cnlDYWNoZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2NTdFREEwODEzODVDQjk3MDA0RTA2NDUg
LyogTWVtb3J5UHJlc3N1cmVIYW5kbGVyLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNl
L1dlYkNvcmUvZG9tL0V2ZW50TmFtZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9k
b20vRXZlbnROYW1lcy5oCShyZXZpc2lvbiAxNTYyMzgpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20v
RXZlbnROYW1lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNDIsNiArMjQyLDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgIG1hY3JvKHJlbW92ZXRyYWNrKSBcCiAgICAgbWFjcm8obXV0ZSkgXAog
ICAgIG1hY3JvKHVubXV0ZSkgXAorICAgIG1hY3JvKHN0YXJ0ZWQpIFwKICAgICBtYWNybyhpY2Vj
b25uZWN0aW9uc3RhdGVjaGFuZ2UpIFwKICAgICBtYWNybyhpY2VjYW5kaWRhdGUpIFwKICAgICBt
YWNybyhuZWdvdGlhdGlvbm5lZWRlZCkgXApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1DZW50ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtQ2VudGVyLmNwcAkocmV2aXNp
b24gMTU2MjM4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFT
dHJlYW1DZW50ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSwxMSArNDksNyBAQCBNZWRpYVN0
cmVhbUNlbnRlcjo6fk1lZGlhU3RyZWFtQ2VudGVyKCkKIAogdm9pZCBNZWRpYVN0cmVhbUNlbnRl
cjo6ZW5kTG9jYWxNZWRpYVN0cmVhbShNZWRpYVN0cmVhbURlc2NyaXB0b3IqIHN0cmVhbURlc2Ny
aXB0b3IpCiB7Ci0gICAgTWVkaWFTdHJlYW1EZXNjcmlwdG9yQ2xpZW50KiBjbGllbnQgPSBzdHJl
YW1EZXNjcmlwdG9yLT5jbGllbnQoKTsKLSAgICBpZiAoY2xpZW50KQotICAgICAgICBjbGllbnQt
PnN0cmVhbUVuZGVkKCk7Ci0gICAgZWxzZQotICAgICAgICBzdHJlYW1EZXNjcmlwdG9yLT5zZXRF
bmRlZCgpOworICAgIHN0cmVhbURlc2NyaXB0b3ItPnNldEVuZGVkKCk7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L01lZGlhU3RyZWFtQ2VudGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1DZW50ZXIuaAkocmV2aXNpb24gMTU2MjM4KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1DZW50ZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMzksMjQgKzM5LDMwIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotY2xhc3MgTWVkaWFTdHJlYW1Db21wb25lbnQ7CitjbGFzcyBNZWRpYUNvbnN0cmFpbnRzOwor
Y2xhc3MgTWVkaWFTdHJlYW1DcmVhdGlvbkNsaWVudDsKK2NsYXNzIE1lZGlhU3RyZWFtQ3JlYXRp
b25DbGllbnQ7CiBjbGFzcyBNZWRpYVN0cmVhbURlc2NyaXB0b3I7Ci1jbGFzcyBNZWRpYVN0cmVh
bVNvdXJjZXNRdWVyeUNsaWVudDsKK2NsYXNzIE1lZGlhU3RyZWFtU291cmNlOwogY2xhc3MgTWVk
aWFTdHJlYW1UcmFja1NvdXJjZXNSZXF1ZXN0Q2xpZW50OwogCiBjbGFzcyBNZWRpYVN0cmVhbUNl
bnRlciB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+TWVkaWFTdHJlYW1DZW50ZXIoKTsKIAotICAg
IHN0YXRpYyBNZWRpYVN0cmVhbUNlbnRlciYgaW5zdGFuY2UoKTsKKyAgICBzdGF0aWMgTWVkaWFT
dHJlYW1DZW50ZXImIHNoYXJlZCgpOwogCi0gICAgdmlydHVhbCB2b2lkIHF1ZXJ5TWVkaWFTdHJl
YW1Tb3VyY2VzKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1Tb3VyY2VzUXVlcnlDbGllbnQ+KSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIHZhbGlkYXRlUmVxdWVzdENvbnN0cmFpbnRzKFBhc3NSZWZQdHI8
TWVkaWFTdHJlYW1DcmVhdGlvbkNsaWVudD4sIFBhc3NSZWZQdHI8TWVkaWFDb25zdHJhaW50cz4g
YXVkaW9Db25zdHJhaW50cywgUGFzc1JlZlB0cjxNZWRpYUNvbnN0cmFpbnRzPiB2aWRlb0NvbnN0
cmFpbnRzKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlTWVkaWFTdHJlYW0oUGFzc1Jl
ZlB0cjxNZWRpYVN0cmVhbUNyZWF0aW9uQ2xpZW50PiwgUGFzc1JlZlB0cjxNZWRpYUNvbnN0cmFp
bnRzPiBhdWRpb0NvbnN0cmFpbnRzLCBQYXNzUmVmUHRyPE1lZGlhQ29uc3RyYWludHM+IHZpZGVv
Q29uc3RyYWludHMpID0gMDsKIAotICAgIC8vIENhbGxzIGZyb20gdGhlIERPTSBvYmplY3RzIHRv
IG5vdGlmeSB0aGUgcGxhdGZvcm0KICAgICB2aXJ0dWFsIGJvb2wgZ2V0TWVkaWFTdHJlYW1UcmFj
a1NvdXJjZXMoUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVRyYWNrU291cmNlc1JlcXVlc3RDbGllbnQ+
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRpZFNldE1lZGlhU3RyZWFtVHJhY2tFbmFibGVkKE1l
ZGlhU3RyZWFtRGVzY3JpcHRvciosIE1lZGlhU3RyZWFtQ29tcG9uZW50KikgPSAwOwotICAgIHZp
cnR1YWwgYm9vbCBkaWRBZGRNZWRpYVN0cmVhbVRyYWNrKE1lZGlhU3RyZWFtRGVzY3JpcHRvcios
IE1lZGlhU3RyZWFtQ29tcG9uZW50KikgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBkaWRSZW1vdmVN
ZWRpYVN0cmVhbVRyYWNrKE1lZGlhU3RyZWFtRGVzY3JpcHRvciosIE1lZGlhU3RyZWFtQ29tcG9u
ZW50KikgPSAwOworCisgICAgdmlydHVhbCB2b2lkIGRpZFNldE1lZGlhU3RyZWFtVHJhY2tFbmFi
bGVkKE1lZGlhU3RyZWFtU291cmNlKikgPSAwOworCisgICAgdmlydHVhbCBib29sIGRpZEFkZE1l
ZGlhU3RyZWFtVHJhY2soTWVkaWFTdHJlYW1Tb3VyY2UqKSA9IDA7CisgICAgdmlydHVhbCBib29s
IGRpZFJlbW92ZU1lZGlhU3RyZWFtVHJhY2soTWVkaWFTdHJlYW1Tb3VyY2UqKSA9IDA7CisKICAg
ICB2aXJ0dWFsIHZvaWQgZGlkU3RvcExvY2FsTWVkaWFTdHJlYW0oTWVkaWFTdHJlYW1EZXNjcmlw
dG9yKikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBkaWRDcmVhdGVNZWRpYVN0cmVhbShNZWRpYVN0
cmVhbURlc2NyaXB0b3IqKSA9IDA7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL01lZGlhU3RyZWFtQ29tcG9uZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbUNvbXBvbmVudC5jcHAJKHJl
dmlzaW9uIDE1NjIzOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01l
ZGlhU3RyZWFtQ29tcG9uZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2NCArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDExIEVyaWNzc29uIEFCLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAq
IGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0g
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKLQotI2luY2x1ZGUg
Ik1lZGlhU3RyZWFtQ29tcG9uZW50LmgiCi0KLSNpbmNsdWRlICJNZWRpYVN0cmVhbVNvdXJjZS5o
IgotI2luY2x1ZGUgIlVVSUQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1QYXNzUmVmUHRy
PE1lZGlhU3RyZWFtQ29tcG9uZW50PiBNZWRpYVN0cmVhbUNvbXBvbmVudDo6Y3JlYXRlKFBhc3NS
ZWZQdHI8TWVkaWFTdHJlYW1Tb3VyY2U+IHNvdXJjZSkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IE1lZGlhU3RyZWFtQ29tcG9uZW50KGNyZWF0ZUNhbm9uaWNhbFVVSURTdHJpbmcoKSwgMCwg
c291cmNlKSk7Ci19Ci0KLVBhc3NSZWZQdHI8TWVkaWFTdHJlYW1Db21wb25lbnQ+IE1lZGlhU3Ry
ZWFtQ29tcG9uZW50OjpjcmVhdGUoTWVkaWFTdHJlYW1EZXNjcmlwdG9yKiBzdHJlYW0sIFBhc3NS
ZWZQdHI8TWVkaWFTdHJlYW1Tb3VyY2U+IHNvdXJjZSkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IE1lZGlhU3RyZWFtQ29tcG9uZW50KGNyZWF0ZUNhbm9uaWNhbFVVSURTdHJpbmcoKSwgc3Ry
ZWFtLCBzb3VyY2UpKTsKLX0KLQotTWVkaWFTdHJlYW1Db21wb25lbnQ6Ok1lZGlhU3RyZWFtQ29t
cG9uZW50KGNvbnN0IFN0cmluZyYgaWQsIE1lZGlhU3RyZWFtRGVzY3JpcHRvciogc3RyZWFtLCBQ
YXNzUmVmUHRyPE1lZGlhU3RyZWFtU291cmNlPiBzb3VyY2UpCi0gICAgOiBtX3N0cmVhbShzdHJl
YW0pCi0gICAgLCBtX3NvdXJjZShzb3VyY2UpCi0gICAgLCBtX2lkKGlkKQotICAgICwgbV9lbmFi
bGVkKHRydWUpCi17Ci0gICAgQVNTRVJUKG1faWQubGVuZ3RoKCkpOwotfQotCi19IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1Db21wb25lbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0
cmVhbUNvbXBvbmVudC5oCShyZXZpc2lvbiAxNTYyMzgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbUNvbXBvbmVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDc1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgRXJpY3Nzb24gQUIuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgotICogICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUg
bmFtZSBvZiBFcmljc3NvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAg
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20g
dGhpcwotICogICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgot
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIE1lZGlhU3RyZWFtQ29tcG9uZW50X2gKLSNkZWZp
bmUgTWVkaWFTdHJlYW1Db21wb25lbnRfaAotCi0jaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKLQot
I2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1jbGFzcyBNZWRpYVN0cmVhbURlc2NyaXB0b3I7Ci1jbGFzcyBNZWRpYVN0cmVhbVNvdXJjZTsK
LQotY2xhc3MgTWVkaWFTdHJlYW1Db21wb25lbnQgOiBwdWJsaWMgUmVmQ291bnRlZDxNZWRpYVN0
cmVhbUNvbXBvbmVudD4gewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1lZGlhU3Ry
ZWFtQ29tcG9uZW50PiBjcmVhdGUoUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVNvdXJjZT4pOwotICAg
IHN0YXRpYyBQYXNzUmVmUHRyPE1lZGlhU3RyZWFtQ29tcG9uZW50PiBjcmVhdGUoTWVkaWFTdHJl
YW1EZXNjcmlwdG9yKiwgUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVNvdXJjZT4pOwotCi0gICAgTWVk
aWFTdHJlYW1EZXNjcmlwdG9yKiBzdHJlYW0oKSBjb25zdCB7IHJldHVybiBtX3N0cmVhbTsgfQot
ICAgIHZvaWQgc2V0U3RyZWFtKE1lZGlhU3RyZWFtRGVzY3JpcHRvciogc3RyZWFtKSB7IEFTU0VS
VCghbV9zdHJlYW0gJiYgc3RyZWFtKTsgbV9zdHJlYW0gPSBzdHJlYW07IH0KLQotICAgIE1lZGlh
U3RyZWFtU291cmNlKiBzb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZS5nZXQoKTsgfQot
Ci0gICAgU3RyaW5nIGlkKCkgY29uc3QgeyByZXR1cm4gbV9pZDsgfQotICAgIGJvb2wgZW5hYmxl
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fZW5hYmxlZDsgfQotICAgIHZvaWQgc2V0RW5hYmxlZChib29s
IGVuYWJsZWQpIHsgbV9lbmFibGVkID0gZW5hYmxlZDsgfQotCi1wcml2YXRlOgotICAgIE1lZGlh
U3RyZWFtQ29tcG9uZW50KGNvbnN0IFN0cmluZyYgaWQsIE1lZGlhU3RyZWFtRGVzY3JpcHRvcios
IFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1Tb3VyY2U+KTsKLQotICAgIE1lZGlhU3RyZWFtRGVzY3Jp
cHRvciogbV9zdHJlYW07Ci0gICAgUmVmUHRyPE1lZGlhU3RyZWFtU291cmNlPiBtX3NvdXJjZTsK
LSAgICBTdHJpbmcgbV9pZDsKLSAgICBib29sIG1fZW5hYmxlZDsKLX07Ci0KLXR5cGVkZWYgVmVj
dG9yPFJlZlB0cjxNZWRpYVN0cmVhbUNvbXBvbmVudD4gPiBNZWRpYVN0cmVhbUNvbXBvbmVudFZl
Y3RvcjsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKE1FRElB
X1NUUkVBTSkKLQotI2VuZGlmIC8vIE1lZGlhU3RyZWFtQ29tcG9uZW50X2gKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtQ29uc3RyYWludHNWYWxp
ZGF0aW9uQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vTWVkaWFTdHJlYW1Db25zdHJhaW50c1ZhbGlkYXRpb25DbGllbnQuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFt
Q29uc3RyYWludHNWYWxpZGF0aW9uQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1
MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBNZWRpYVN0cmVhbUNvbnN0cmFpbnRzVmFsaWRhdGlvbkNs
aWVudF9oCisjZGVmaW5lIE1lZGlhU3RyZWFtQ29uc3RyYWludHNWYWxpZGF0aW9uQ2xpZW50X2gK
KworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCisKKyNpbmNsdWRlICJNZWRpYVN0cmVhbVNvdXJj
ZS5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50
ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBNZWRpYUNvbnN0cmFpbnRzOwor
CitjbGFzcyBNZWRpYVN0cmVhbUNvbnN0cmFpbnRzVmFsaWRhdGlvbkNsaWVudCA6IHB1YmxpYyBS
ZWZDb3VudGVkPE1lZGlhU3RyZWFtQ29uc3RyYWludHNWYWxpZGF0aW9uQ2xpZW50PiB7CitwdWJs
aWM6CisgICAgdmlydHVhbCB+TWVkaWFTdHJlYW1Db25zdHJhaW50c1ZhbGlkYXRpb25DbGllbnQo
KSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBjb25zdHJhaW50c0FyZVZhbGlkKCkgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBjb25zdHJhaW50c0ludmFsaWQoY29uc3QgU3RyaW5nJiBjb25zdHJhaW50
TmFtZSkgPSAwOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5B
QkxFKE1FRElBX1NUUkVBTSkKKworI2VuZGlmIC8vIE1lZGlhU3RyZWFtQ29uc3RyYWludHNWYWxp
ZGF0aW9uQ2xpZW50X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L01lZGlhU3RyZWFtQ3JlYXRpb25DbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbUNyZWF0aW9uQ2xpZW50LmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVh
bUNyZWF0aW9uQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmbmRlZiBNZWRpYVN0cmVhbUNyZWF0aW9uQ2xpZW50X2gKKyNkZWZpbmUgTWVkaWFTdHJl
YW1DcmVhdGlvbkNsaWVudF9oCisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorCisjaW5jbHVk
ZSAiTWVkaWFTdHJlYW1Tb3VyY2UuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2lu
Y2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
TWVkaWFTdHJlYW1DcmVhdGlvbkNsaWVudCA6IHB1YmxpYyBSZWZDb3VudGVkPE1lZGlhU3RyZWFt
Q3JlYXRpb25DbGllbnQ+IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5NZWRpYVN0cmVhbUNyZWF0
aW9uQ2xpZW50KCkgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgY29uc3RyYWludHNWYWxpZGF0ZWQo
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNvbnN0cmFpbnRzSW52YWxpZChjb25zdCBTdHJpbmcm
IGNvbnN0cmFpbnROYW1lKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ3JlYXRlU3RyZWFt
KFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1EZXNjcmlwdG9yPikgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCBmYWlsZWRUb0NyZWF0ZVN0cmVhbVdpdGhDb25zdHJhaW50c0Vycm9yKGNvbnN0IFN0cmluZyYg
Y29uc3RyYWludE5hbWUpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZmFpbGVkVG9DcmVhdGVTdHJl
YW1XaXRoUGVybWlzc2lvbkVycm9yKCkgPSAwOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkKKworI2VuZGlmIC8vIE1lZGlhU3Ry
ZWFtQ3JlYXRpb25DbGllbnRfaApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vTWVkaWFTdHJlYW1EZXNjcmlwdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbURlc2NyaXB0b3IuY3BwCShyZXZp
c2lvbiAxNTYyMzgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRp
YVN0cmVhbURlc2NyaXB0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw1NiArNDcsNTEgQEAg
UGFzc1JlZlB0cjxNZWRpYVN0cmVhbURlc2NyaXB0b3I+IE1lZGlhUwogICAgIHJldHVybiBhZG9w
dFJlZihuZXcgTWVkaWFTdHJlYW1EZXNjcmlwdG9yKGNyZWF0ZUNhbm9uaWNhbFVVSURTdHJpbmco
KSwgYXVkaW9Tb3VyY2VzLCB2aWRlb1NvdXJjZXMpKTsKIH0KIAotUGFzc1JlZlB0cjxNZWRpYVN0
cmVhbURlc2NyaXB0b3I+IE1lZGlhU3RyZWFtRGVzY3JpcHRvcjo6Y3JlYXRlKGNvbnN0IE1lZGlh
U3RyZWFtQ29tcG9uZW50VmVjdG9yJiBhdWRpb0NvbXBvbmVudHMsIGNvbnN0IE1lZGlhU3RyZWFt
Q29tcG9uZW50VmVjdG9yJiB2aWRlb0NvbXBvbmVudHMpCit2b2lkIE1lZGlhU3RyZWFtRGVzY3Jp
cHRvcjo6YWRkU291cmNlKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1Tb3VyY2U+IHNvdXJjZSkKIHsK
LSAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1lZGlhU3RyZWFtRGVzY3JpcHRvcihjcmVhdGVDYW5v
bmljYWxVVUlEU3RyaW5nKCksIGF1ZGlvQ29tcG9uZW50cywgdmlkZW9Db21wb25lbnRzKSk7Ci19
Ci0KLXZvaWQgTWVkaWFTdHJlYW1EZXNjcmlwdG9yOjphZGRDb21wb25lbnQoUGFzc1JlZlB0cjxN
ZWRpYVN0cmVhbUNvbXBvbmVudD4gY29tcG9uZW50KQotewotICAgIHN3aXRjaCAoY29tcG9uZW50
LT5zb3VyY2UoKS0+dHlwZSgpKSB7Ci0gICAgY2FzZSBNZWRpYVN0cmVhbVNvdXJjZTo6VHlwZUF1
ZGlvOgotICAgICAgICBpZiAobV9hdWRpb0NvbXBvbmVudHMuZmluZChjb21wb25lbnQpID09IG5v
dEZvdW5kKQotICAgICAgICAgICAgbV9hdWRpb0NvbXBvbmVudHMuYXBwZW5kKGNvbXBvbmVudCk7
CisgICAgc3dpdGNoIChzb3VyY2UtPnR5cGUoKSkgeworICAgIGNhc2UgTWVkaWFTdHJlYW1Tb3Vy
Y2U6OkF1ZGlvOgorICAgICAgICBpZiAobV9hdWRpb1N0cmVhbVNvdXJjZXMuZmluZChzb3VyY2Up
ID09IG5vdEZvdW5kKQorICAgICAgICAgICAgbV9hdWRpb1N0cmVhbVNvdXJjZXMuYXBwZW5kKHNv
dXJjZSk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgTWVkaWFTdHJlYW1Tb3VyY2U6OlR5cGVW
aWRlbzoKLSAgICAgICAgaWYgKG1fdmlkZW9Db21wb25lbnRzLmZpbmQoY29tcG9uZW50KSA9PSBu
b3RGb3VuZCkKLSAgICAgICAgICAgIG1fdmlkZW9Db21wb25lbnRzLmFwcGVuZChjb21wb25lbnQp
OworICAgIGNhc2UgTWVkaWFTdHJlYW1Tb3VyY2U6OlZpZGVvOgorICAgICAgICBpZiAobV92aWRl
b1N0cmVhbVNvdXJjZXMuZmluZChzb3VyY2UpID09IG5vdEZvdW5kKQorICAgICAgICAgICAgbV92
aWRlb1N0cmVhbVNvdXJjZXMuYXBwZW5kKHNvdXJjZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
IH0KIAotdm9pZCBNZWRpYVN0cmVhbURlc2NyaXB0b3I6OnJlbW92ZUNvbXBvbmVudChQYXNzUmVm
UHRyPE1lZGlhU3RyZWFtQ29tcG9uZW50PiBjb21wb25lbnQpCit2b2lkIE1lZGlhU3RyZWFtRGVz
Y3JpcHRvcjo6cmVtb3ZlU291cmNlKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1Tb3VyY2U+IHNvdXJj
ZSkKIHsKICAgICBzaXplX3QgcG9zID0gbm90Rm91bmQ7Ci0gICAgc3dpdGNoIChjb21wb25lbnQt
PnNvdXJjZSgpLT50eXBlKCkpIHsKLSAgICBjYXNlIE1lZGlhU3RyZWFtU291cmNlOjpUeXBlQXVk
aW86Ci0gICAgICAgIHBvcyA9IG1fYXVkaW9Db21wb25lbnRzLmZpbmQoY29tcG9uZW50KTsKKyAg
ICBzd2l0Y2ggKHNvdXJjZS0+dHlwZSgpKSB7CisgICAgY2FzZSBNZWRpYVN0cmVhbVNvdXJjZTo6
QXVkaW86CisgICAgICAgIHBvcyA9IG1fYXVkaW9TdHJlYW1Tb3VyY2VzLmZpbmQoc291cmNlKTsK
ICAgICAgICAgaWYgKHBvcyAhPSBub3RGb3VuZCkKLSAgICAgICAgICAgIG1fYXVkaW9Db21wb25l
bnRzLnJlbW92ZShwb3MpOworICAgICAgICAgICAgbV9hdWRpb1N0cmVhbVNvdXJjZXMucmVtb3Zl
KHBvcyk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgTWVkaWFTdHJlYW1Tb3VyY2U6OlR5cGVW
aWRlbzoKLSAgICAgICAgcG9zID0gbV92aWRlb0NvbXBvbmVudHMuZmluZChjb21wb25lbnQpOwor
ICAgIGNhc2UgTWVkaWFTdHJlYW1Tb3VyY2U6OlZpZGVvOgorICAgICAgICBwb3MgPSBtX3ZpZGVv
U3RyZWFtU291cmNlcy5maW5kKHNvdXJjZSk7CiAgICAgICAgIGlmIChwb3MgIT0gbm90Rm91bmQp
Ci0gICAgICAgICAgICBtX3ZpZGVvQ29tcG9uZW50cy5yZW1vdmUocG9zKTsKKyAgICAgICAgICAg
IG1fdmlkZW9TdHJlYW1Tb3VyY2VzLnJlbW92ZShwb3MpOwogICAgICAgICBicmVhazsKICAgICB9
CiB9CiAKLXZvaWQgTWVkaWFTdHJlYW1EZXNjcmlwdG9yOjphZGRSZW1vdGVUcmFjayhNZWRpYVN0
cmVhbUNvbXBvbmVudCogY29tcG9uZW50KQordm9pZCBNZWRpYVN0cmVhbURlc2NyaXB0b3I6OmFk
ZFJlbW90ZVNvdXJjZShNZWRpYVN0cmVhbVNvdXJjZSogc291cmNlKQogewogICAgIGlmIChtX2Ns
aWVudCkKLSAgICAgICAgbV9jbGllbnQtPmFkZFJlbW90ZVRyYWNrKGNvbXBvbmVudCk7CisgICAg
ICAgIG1fY2xpZW50LT5hZGRSZW1vdGVTb3VyY2Uoc291cmNlKTsKICAgICBlbHNlCi0gICAgICAg
IGFkZENvbXBvbmVudChjb21wb25lbnQpOworICAgICAgICBhZGRTb3VyY2Uoc291cmNlKTsKIH0K
IAotdm9pZCBNZWRpYVN0cmVhbURlc2NyaXB0b3I6OnJlbW92ZVJlbW90ZVRyYWNrKE1lZGlhU3Ry
ZWFtQ29tcG9uZW50KiBjb21wb25lbnQpCit2b2lkIE1lZGlhU3RyZWFtRGVzY3JpcHRvcjo6cmVt
b3ZlUmVtb3RlU291cmNlKE1lZGlhU3RyZWFtU291cmNlKiBzb3VyY2UpCiB7CiAgICAgaWYgKG1f
Y2xpZW50KQotICAgICAgICBtX2NsaWVudC0+cmVtb3ZlUmVtb3RlVHJhY2soY29tcG9uZW50KTsK
KyAgICAgICAgbV9jbGllbnQtPnJlbW92ZVJlbW90ZVNvdXJjZShzb3VyY2UpOwogICAgIGVsc2UK
LSAgICAgICAgcmVtb3ZlQ29tcG9uZW50KGNvbXBvbmVudCk7CisgICAgICAgIHJlbW92ZVNvdXJj
ZShzb3VyY2UpOwogfQogCiBNZWRpYVN0cmVhbURlc2NyaXB0b3I6Ok1lZGlhU3RyZWFtRGVzY3Jp
cHRvcihjb25zdCBTdHJpbmcmIGlkLCBjb25zdCBNZWRpYVN0cmVhbVNvdXJjZVZlY3RvciYgYXVk
aW9Tb3VyY2VzLCBjb25zdCBNZWRpYVN0cmVhbVNvdXJjZVZlY3RvciYgdmlkZW9Tb3VyY2VzKQpA
QCAtMTA1LDI3ICsxMDAsMjYgQEAgTWVkaWFTdHJlYW1EZXNjcmlwdG9yOjpNZWRpYVN0cmVhbURl
c2NyaQogICAgICwgbV9lbmRlZChmYWxzZSkKIHsKICAgICBBU1NFUlQobV9pZC5sZW5ndGgoKSk7
Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhdWRpb1NvdXJjZXMuc2l6ZSgpOyBpKyspCi0g
ICAgICAgIG1fYXVkaW9Db21wb25lbnRzLmFwcGVuZChNZWRpYVN0cmVhbUNvbXBvbmVudDo6Y3Jl
YXRlKHRoaXMsIGF1ZGlvU291cmNlc1tpXSkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
YXVkaW9Tb3VyY2VzLnNpemUoKTsgaSsrKSB7CisgICAgICAgIGF1ZGlvU291cmNlc1tpXS0+c2V0
U3RyZWFtKHRoaXMpOworICAgICAgICBtX2F1ZGlvU3RyZWFtU291cmNlcy5hcHBlbmQoYXVkaW9T
b3VyY2VzW2ldKTsKKyAgICB9CiAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZpZGVvU291
cmNlcy5zaXplKCk7IGkrKykKLSAgICAgICAgbV92aWRlb0NvbXBvbmVudHMuYXBwZW5kKE1lZGlh
U3RyZWFtQ29tcG9uZW50OjpjcmVhdGUodGhpcywgdmlkZW9Tb3VyY2VzW2ldKSk7CisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCB2aWRlb1NvdXJjZXMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAg
dmlkZW9Tb3VyY2VzW2ldLT5zZXRTdHJlYW0odGhpcyk7CisgICAgICAgIG1fdmlkZW9TdHJlYW1T
b3VyY2VzLmFwcGVuZCh2aWRlb1NvdXJjZXNbaV0pOworICAgIH0KIH0KIAotTWVkaWFTdHJlYW1E
ZXNjcmlwdG9yOjpNZWRpYVN0cmVhbURlc2NyaXB0b3IoY29uc3QgU3RyaW5nJiBpZCwgY29uc3Qg
TWVkaWFTdHJlYW1Db21wb25lbnRWZWN0b3ImIGF1ZGlvQ29tcG9uZW50cywgY29uc3QgTWVkaWFT
dHJlYW1Db21wb25lbnRWZWN0b3ImIHZpZGVvQ29tcG9uZW50cykKLSAgICA6IG1fY2xpZW50KDAp
Ci0gICAgLCBtX2lkKGlkKQotICAgICwgbV9lbmRlZChmYWxzZSkKK3ZvaWQgTWVkaWFTdHJlYW1E
ZXNjcmlwdG9yOjpzZXRFbmRlZCgpCiB7Ci0gICAgQVNTRVJUKG1faWQubGVuZ3RoKCkpOwotICAg
IGZvciAoTWVkaWFTdHJlYW1Db21wb25lbnRWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBh
dWRpb0NvbXBvbmVudHMuYmVnaW4oKTsgaXRlciAhPSBhdWRpb0NvbXBvbmVudHMuZW5kKCk7ICsr
aXRlcikgewotICAgICAgICAoKml0ZXIpLT5zZXRTdHJlYW0odGhpcyk7Ci0gICAgICAgIG1fYXVk
aW9Db21wb25lbnRzLmFwcGVuZCgoKml0ZXIpKTsKLSAgICB9Ci0gICAgZm9yIChNZWRpYVN0cmVh
bUNvbXBvbmVudFZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IHZpZGVvQ29tcG9uZW50cy5i
ZWdpbigpOyBpdGVyICE9IHZpZGVvQ29tcG9uZW50cy5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAg
ICgqaXRlciktPnNldFN0cmVhbSh0aGlzKTsKLSAgICAgICAgbV92aWRlb0NvbXBvbmVudHMuYXBw
ZW5kKCgqaXRlcikpOwotICAgIH0KKyAgICBpZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50
LT5zdHJlYW1EaWRFbmQoKTsKKyAgICBtX2VuZGVkID0gdHJ1ZTsKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG1fYXVkaW9TdHJlYW1Tb3VyY2VzLnNpemUoKTsgaSsrKQorICAgICAgICBtX2F1
ZGlvU3RyZWFtU291cmNlc1tpXS0+c2V0UmVhZHlTdGF0ZShNZWRpYVN0cmVhbVNvdXJjZTo6RW5k
ZWQpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV92aWRlb1N0cmVhbVNvdXJjZXMuc2l6
ZSgpOyBpKyspCisgICAgICAgIG1fdmlkZW9TdHJlYW1Tb3VyY2VzW2ldLT5zZXRSZWFkeVN0YXRl
KE1lZGlhU3RyZWFtU291cmNlOjpFbmRlZCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtRGVz
Y3JpcHRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL01lZGlhU3RyZWFtRGVzY3JpcHRvci5oCShyZXZpc2lvbiAxNTYyMzgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbURlc2NyaXB0b3IuaAkod29y
a2luZyBjb3B5KQpAQCAtMzQsOSArMzQsNyBAQAogCiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkK
IAotI2luY2x1ZGUgIk1lZGlhU3RyZWFtQ29tcG9uZW50LmgiCiAjaW5jbHVkZSAiTWVkaWFTdHJl
YW1Tb3VyY2UuaCIKLSNpbmNsdWRlICJVVUlELmgiCiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQu
aD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKQEAgLTQ2LDU2ICs0NCw0NSBAQCBjbGFzcyBN
ZWRpYVN0cmVhbURlc2NyaXB0b3JDbGllbnQgewogcHVibGljOgogICAgIHZpcnR1YWwgfk1lZGlh
U3RyZWFtRGVzY3JpcHRvckNsaWVudCgpIHsgfQogCi0gICAgdmlydHVhbCB2b2lkIHRyYWNrRW5k
ZWQoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHN0cmVhbUVuZGVkKCkgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCBhZGRSZW1vdGVUcmFjayhNZWRpYVN0cmVhbUNvbXBvbmVudCopID0gMDsKLSAgICB2
aXJ0dWFsIHZvaWQgcmVtb3ZlUmVtb3RlVHJhY2soTWVkaWFTdHJlYW1Db21wb25lbnQqKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIHRyYWNrRGlkRW5kKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBz
dHJlYW1EaWRFbmQoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGFkZFJlbW90ZVNvdXJjZShNZWRp
YVN0cmVhbVNvdXJjZSopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlUmVtb3RlU291cmNl
KE1lZGlhU3RyZWFtU291cmNlKikgPSAwOwogfTsKIAogY2xhc3MgTWVkaWFTdHJlYW1EZXNjcmlw
dG9yIDogcHVibGljIFJlZkNvdW50ZWQ8TWVkaWFTdHJlYW1EZXNjcmlwdG9yPiB7CiBwdWJsaWM6
Ci0gICAgY2xhc3MgRXh0cmFEYXRhIDogcHVibGljIFJlZkNvdW50ZWQ8RXh0cmFEYXRhPiB7Ci0g
ICAgcHVibGljOgotICAgICAgICB2aXJ0dWFsIH5FeHRyYURhdGEoKSB7IH0KLSAgICB9OwogCiAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1EZXNjcmlwdG9yPiBjcmVhdGUoY29uc3Qg
TWVkaWFTdHJlYW1Tb3VyY2VWZWN0b3ImIGF1ZGlvU291cmNlcywgY29uc3QgTWVkaWFTdHJlYW1T
b3VyY2VWZWN0b3ImIHZpZGVvU291cmNlcyk7Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8TWVkaWFT
dHJlYW1EZXNjcmlwdG9yPiBjcmVhdGUoY29uc3QgTWVkaWFTdHJlYW1Db21wb25lbnRWZWN0b3Im
IGF1ZGlvQ29tcG9uZW50cywgY29uc3QgTWVkaWFTdHJlYW1Db21wb25lbnRWZWN0b3ImIHZpZGVv
Q29tcG9uZW50cyk7CiAKICAgICBNZWRpYVN0cmVhbURlc2NyaXB0b3JDbGllbnQqIGNsaWVudCgp
IGNvbnN0IHsgcmV0dXJuIG1fY2xpZW50OyB9CiAgICAgdm9pZCBzZXRDbGllbnQoTWVkaWFTdHJl
YW1EZXNjcmlwdG9yQ2xpZW50KiBjbGllbnQpIHsgbV9jbGllbnQgPSBjbGllbnQ7IH0KIAogICAg
IFN0cmluZyBpZCgpIGNvbnN0IHsgcmV0dXJuIG1faWQ7IH0KIAotICAgIHVuc2lnbmVkIG51bWJl
ck9mQXVkaW9Db21wb25lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9hdWRpb0NvbXBvbmVudHMuc2l6
ZSgpOyB9Ci0gICAgTWVkaWFTdHJlYW1Db21wb25lbnQqIGF1ZGlvQ29tcG9uZW50KHVuc2lnbmVk
IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2F1ZGlvQ29tcG9uZW50c1tpbmRleF0uZ2V0KCk7IH0K
KyAgICB1bnNpZ25lZCBudW1iZXJPZkF1ZGlvU3RyZWFtcygpIGNvbnN0IHsgcmV0dXJuIG1fYXVk
aW9TdHJlYW1Tb3VyY2VzLnNpemUoKTsgfQorICAgIE1lZGlhU3RyZWFtU291cmNlKiBhdWRpb1N0
cmVhbXModW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fYXVkaW9TdHJlYW1Tb3VyY2Vz
W2luZGV4XS5nZXQoKTsgfQogCi0gICAgdW5zaWduZWQgbnVtYmVyT2ZWaWRlb0NvbXBvbmVudHMo
KSBjb25zdCB7IHJldHVybiBtX3ZpZGVvQ29tcG9uZW50cy5zaXplKCk7IH0KLSAgICBNZWRpYVN0
cmVhbUNvbXBvbmVudCogdmlkZW9Db21wb25lbnQodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0
dXJuIG1fdmlkZW9Db21wb25lbnRzW2luZGV4XS5nZXQoKTsgfQorICAgIHVuc2lnbmVkIG51bWJl
ck9mVmlkZW9TdHJlYW1zKCkgY29uc3QgeyByZXR1cm4gbV92aWRlb1N0cmVhbVNvdXJjZXMuc2l6
ZSgpOyB9CisgICAgTWVkaWFTdHJlYW1Tb3VyY2UqIHZpZGVvU3RyZWFtcyh1bnNpZ25lZCBpbmRl
eCkgY29uc3QgeyByZXR1cm4gbV92aWRlb1N0cmVhbVNvdXJjZXNbaW5kZXhdLmdldCgpOyB9CiAK
LSAgICB2b2lkIGFkZENvbXBvbmVudChQYXNzUmVmUHRyPE1lZGlhU3RyZWFtQ29tcG9uZW50Pik7
Ci0gICAgdm9pZCByZW1vdmVDb21wb25lbnQoUGFzc1JlZlB0cjxNZWRpYVN0cmVhbUNvbXBvbmVu
dD4pOworICAgIHZvaWQgYWRkU291cmNlKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1Tb3VyY2U+KTsK
KyAgICB2b2lkIHJlbW92ZVNvdXJjZShQYXNzUmVmUHRyPE1lZGlhU3RyZWFtU291cmNlPik7CiAK
LSAgICB2b2lkIGFkZFJlbW90ZVRyYWNrKE1lZGlhU3RyZWFtQ29tcG9uZW50Kik7Ci0gICAgdm9p
ZCByZW1vdmVSZW1vdGVUcmFjayhNZWRpYVN0cmVhbUNvbXBvbmVudCopOworICAgIHZvaWQgYWRk
UmVtb3RlU291cmNlKE1lZGlhU3RyZWFtU291cmNlKik7CisgICAgdm9pZCByZW1vdmVSZW1vdGVT
b3VyY2UoTWVkaWFTdHJlYW1Tb3VyY2UqKTsKIAogICAgIGJvb2wgZW5kZWQoKSBjb25zdCB7IHJl
dHVybiBtX2VuZGVkOyB9Ci0gICAgdm9pZCBzZXRFbmRlZCgpIHsgbV9lbmRlZCA9IHRydWU7IH0K
LQotICAgIFBhc3NSZWZQdHI8RXh0cmFEYXRhPiBleHRyYURhdGEoKSBjb25zdCB7IHJldHVybiBt
X2V4dHJhRGF0YTsgfQotICAgIHZvaWQgc2V0RXh0cmFEYXRhKFBhc3NSZWZQdHI8RXh0cmFEYXRh
PiBleHRyYURhdGEpIHsgbV9leHRyYURhdGEgPSBleHRyYURhdGE7IH0KKyAgICB2b2lkIHNldEVu
ZGVkKCk7CiAKIHByaXZhdGU6CiAgICAgTWVkaWFTdHJlYW1EZXNjcmlwdG9yKGNvbnN0IFN0cmlu
ZyYgaWQsIGNvbnN0IE1lZGlhU3RyZWFtU291cmNlVmVjdG9yJiBhdWRpb1NvdXJjZXMsIGNvbnN0
IE1lZGlhU3RyZWFtU291cmNlVmVjdG9yJiB2aWRlb1NvdXJjZXMpOwotICAgIE1lZGlhU3RyZWFt
RGVzY3JpcHRvcihjb25zdCBTdHJpbmcmIGlkLCBjb25zdCBNZWRpYVN0cmVhbUNvbXBvbmVudFZl
Y3RvciYgYXVkaW9Db21wb25lbnRzLCBjb25zdCBNZWRpYVN0cmVhbUNvbXBvbmVudFZlY3RvciYg
dmlkZW9Db21wb25lbnRzKTsKIAogICAgIE1lZGlhU3RyZWFtRGVzY3JpcHRvckNsaWVudCogbV9j
bGllbnQ7CiAgICAgU3RyaW5nIG1faWQ7Ci0gICAgVmVjdG9yPFJlZlB0cjxNZWRpYVN0cmVhbUNv
bXBvbmVudD4gPiBtX2F1ZGlvQ29tcG9uZW50czsKLSAgICBWZWN0b3I8UmVmUHRyPE1lZGlhU3Ry
ZWFtQ29tcG9uZW50PiA+IG1fdmlkZW9Db21wb25lbnRzOworICAgIFZlY3RvcjxSZWZQdHI8TWVk
aWFTdHJlYW1Tb3VyY2U+ID4gbV9hdWRpb1N0cmVhbVNvdXJjZXM7CisgICAgVmVjdG9yPFJlZlB0
cjxNZWRpYVN0cmVhbVNvdXJjZT4gPiBtX3ZpZGVvU3RyZWFtU291cmNlczsKICAgICBib29sIG1f
ZW5kZWQ7Ci0KLSAgICBSZWZQdHI8RXh0cmFEYXRhPiBtX2V4dHJhRGF0YTsKIH07CiAKIHR5cGVk
ZWYgVmVjdG9yPFJlZlB0cjxNZWRpYVN0cmVhbURlc2NyaXB0b3I+ID4gTWVkaWFTdHJlYW1EZXNj
cmlwdG9yVmVjdG9yOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
TWVkaWFTdHJlYW1Tb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtU291cmNlLmNwcAkocmV2aXNpb24gMTU2MjM4KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1Tb3VyY2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw4IEBACiAjaWYgRU5BQkxFKE1FRElBX1NU
UkVBTSkKIAogI2luY2x1ZGUgIk1lZGlhU3RyZWFtU291cmNlLmgiCisKKyNpbmNsdWRlICJBdWRp
b0Rlc3RpbmF0aW9uQ29uc3VtZXIuaCIKICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00NywxNyArNDksMjEgQEAgTWVkaWFTdHJlYW1Tb3VyY2U6
Ok1lZGlhU3RyZWFtU291cmNlKGNvbgogICAgICwgbV90eXBlKHR5cGUpCiAgICAgLCBtX25hbWUo
bmFtZSkKICAgICAsIG1fcmVhZHlTdGF0ZShyZWFkeVN0YXRlKQorICAgICwgbV9zdHJlYW0oMCkK
ICAgICAsIG1fcmVxdWlyZXNDb25zdW1lcihyZXF1aXJlc0NvbnN1bWVyKQorICAgICwgbV9lbmFi
bGVkKHRydWUpCisgICAgLCBtX211dGVkKGZhbHNlKQogewogfQogCiB2b2lkIE1lZGlhU3RyZWFt
U291cmNlOjpzZXRSZWFkeVN0YXRlKFJlYWR5U3RhdGUgcmVhZHlTdGF0ZSkKIHsKLSAgICBpZiAo
bV9yZWFkeVN0YXRlICE9IFJlYWR5U3RhdGVFbmRlZCAmJiBtX3JlYWR5U3RhdGUgIT0gcmVhZHlT
dGF0ZSkgewotICAgICAgICBtX3JlYWR5U3RhdGUgPSByZWFkeVN0YXRlOwotICAgICAgICBmb3Ig
KFZlY3RvcjxPYnNlcnZlcio+OjppdGVyYXRvciBpID0gbV9vYnNlcnZlcnMuYmVnaW4oKTsgaSAh
PSBtX29ic2VydmVycy5lbmQoKTsgKytpKQotICAgICAgICAgICAgKCppKS0+c291cmNlQ2hhbmdl
ZFN0YXRlKCk7Ci0gICAgfQorICAgIGlmIChtX3JlYWR5U3RhdGUgPT0gRW5kZWQgfHwgbV9yZWFk
eVN0YXRlID09IHJlYWR5U3RhdGUpCisgICAgICAgIHJldHVybjsKKworICAgIG1fcmVhZHlTdGF0
ZSA9IHJlYWR5U3RhdGU7CisgICAgZm9yIChWZWN0b3I8T2JzZXJ2ZXIqPjo6aXRlcmF0b3IgaSA9
IG1fb2JzZXJ2ZXJzLmJlZ2luKCk7IGkgIT0gbV9vYnNlcnZlcnMuZW5kKCk7ICsraSkKKyAgICAg
ICAgKCppKS0+c291cmNlQ2hhbmdlZFN0YXRlKCk7CiB9CiAKIHZvaWQgTWVkaWFTdHJlYW1Tb3Vy
Y2U6OmFkZE9ic2VydmVyKE1lZGlhU3RyZWFtU291cmNlOjpPYnNlcnZlciogb2JzZXJ2ZXIpCkBA
IC03Miw2ICs3OCwyMiBAQCB2b2lkIE1lZGlhU3RyZWFtU291cmNlOjpyZW1vdmVPYnNlcnZlcihN
CiAgICAgICAgIG1fb2JzZXJ2ZXJzLnJlbW92ZShwb3MpOwogfQogCit2b2lkIE1lZGlhU3RyZWFt
U291cmNlOjpzZXRTdHJlYW0oTWVkaWFTdHJlYW1EZXNjcmlwdG9yKiBzdHJlYW0pCit7CisgICAg
QVNTRVJUKCFtX3N0cmVhbSAmJiBzdHJlYW0pOworICAgIG1fc3RyZWFtID0gc3RyZWFtOworfQor
Cit2b2lkIE1lZGlhU3RyZWFtU291cmNlOjpzZXRNdXRlZChib29sIG11dGVkKQoreworICAgIGlm
IChtX211dGVkID09IG11dGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBtX211dGVkID0gbXV0
ZWQ7CisgICAgZm9yIChWZWN0b3I8T2JzZXJ2ZXIqPjo6aXRlcmF0b3IgaSA9IG1fb2JzZXJ2ZXJz
LmJlZ2luKCk7IGkgIT0gbV9vYnNlcnZlcnMuZW5kKCk7ICsraSkKKyAgICAgICAgKCppKS0+c291
cmNlQ2hhbmdlZFN0YXRlKCk7Cit9CisKIHZvaWQgTWVkaWFTdHJlYW1Tb3VyY2U6OmFkZEF1ZGlv
Q29uc3VtZXIoUGFzc1JlZlB0cjxBdWRpb0Rlc3RpbmF0aW9uQ29uc3VtZXI+IGNvbnN1bWVyKQog
ewogICAgIEFTU0VSVChtX3JlcXVpcmVzQ29uc3VtZXIpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1Tb3VyY2UuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVNvdXJjZS5oCShy
ZXZpc2lvbiAxNTYyMzgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9N
ZWRpYVN0cmVhbVNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miw5IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgQXVkaW9CdXM7CitjbGFzcyBNZWRpYVN0cmVhbURl
c2NyaXB0b3I7CisKIGNsYXNzIE1lZGlhU3RyZWFtU291cmNlIDogcHVibGljIFJlZkNvdW50ZWQ8
TWVkaWFTdHJlYW1Tb3VyY2U+IHsKIHB1YmxpYzoKICAgICBjbGFzcyBPYnNlcnZlciB7CkBAIC01
MCwyNSArNTMsMTMgQEAgcHVibGljOgogICAgICAgICB2aXJ0dWFsIHZvaWQgc291cmNlQ2hhbmdl
ZFN0YXRlKCkgPSAwOwogICAgIH07CiAKLSAgICBjbGFzcyBFeHRyYURhdGEgOiBwdWJsaWMgUmVm
Q291bnRlZDxFeHRyYURhdGE+IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHZpcnR1YWwgfkV4dHJh
RGF0YSgpIHsgfQotICAgIH07Ci0KLSAgICBlbnVtIFR5cGUgewotICAgICAgICBUeXBlQXVkaW8s
Ci0gICAgICAgIFR5cGVWaWRlbwotICAgIH07Ci0KLSAgICBlbnVtIFJlYWR5U3RhdGUgewotICAg
ICAgICBSZWFkeVN0YXRlTGl2ZSA9IDAsCi0gICAgICAgIFJlYWR5U3RhdGVNdXRlZCA9IDEsCi0g
ICAgICAgIFJlYWR5U3RhdGVFbmRlZCA9IDIKLSAgICB9OworICAgIGVudW0gVHlwZSB7IEF1ZGlv
LCBWaWRlbyB9OworICAgIGVudW0gUmVhZHlTdGF0ZSB7IE5ldyA9IDAsIExpdmUgPSAxLCBFbmRl
ZCA9IDIgfTsKIAotICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1lZGlhU3RyZWFtU291cmNlPiBjcmVh
dGUoY29uc3QgU3RyaW5nJiBpZCwgVHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lLCBSZWFkeVN0YXRl
ID0gUmVhZHlTdGF0ZUxpdmUsIGJvb2wgcmVxdWlyZXNDb25zdW1lciA9IGZhbHNlKTsKKyAgICBz
dGF0aWMgUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVNvdXJjZT4gY3JlYXRlKGNvbnN0IFN0cmluZyYg
aWQsIFR5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSwgUmVhZHlTdGF0ZSA9IE5ldywgYm9vbCByZXF1
aXJlc0NvbnN1bWVyID0gZmFsc2UpOwogCiAgICAgY29uc3QgU3RyaW5nJiBpZCgpIGNvbnN0IHsg
cmV0dXJuIG1faWQ7IH0KKwogICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsg
fQogICAgIGNvbnN0IFN0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQogCkBA
IC03OCwyMiArNjksMjggQEAgcHVibGljOgogICAgIHZvaWQgYWRkT2JzZXJ2ZXIoT2JzZXJ2ZXIq
KTsKICAgICB2b2lkIHJlbW92ZU9ic2VydmVyKE9ic2VydmVyKik7CiAKLSAgICBQYXNzUmVmUHRy
PEV4dHJhRGF0YT4gZXh0cmFEYXRhKCkgY29uc3QgeyByZXR1cm4gbV9leHRyYURhdGE7IH0KLSAg
ICB2b2lkIHNldEV4dHJhRGF0YShQYXNzUmVmUHRyPEV4dHJhRGF0YT4gZXh0cmFEYXRhKSB7IG1f
ZXh0cmFEYXRhID0gZXh0cmFEYXRhOyB9Ci0KICAgICB2b2lkIHNldENvbnN0cmFpbnRzKFBhc3NS
ZWZQdHI8TWVkaWFDb25zdHJhaW50cz4gY29uc3RyYWludHMpIHsgbV9jb25zdHJhaW50cyA9IGNv
bnN0cmFpbnRzOyB9Ci0gICAgTWVkaWFDb25zdHJhaW50cyogY29uc3RyYWludHMoKSB7IHJldHVy
biBtX2NvbnN0cmFpbnRzLmdldCgpOyB9CisgICAgTWVkaWFDb25zdHJhaW50cyogY29uc3RyYWlu
dHMoKSBjb25zdCB7IHJldHVybiBtX2NvbnN0cmFpbnRzLmdldCgpOyB9CiAKLSAgICBjb25zdCBT
dHJpbmcmIGRldmljZUlkKCkgeyByZXR1cm4gbV9kZXZpY2VJZDsgfQorICAgIGNvbnN0IFN0cmlu
ZyYgZGV2aWNlSWQoKSBjb25zdCB7IHJldHVybiBtX2RldmljZUlkOyB9CiAgICAgdm9pZCBzZXRE
ZXZpY2VJZChjb25zdCBTdHJpbmcmIGRldmljZUlkKSB7IG1fZGV2aWNlSWQgPSBkZXZpY2VJZDsg
fQogCisgICAgYm9vbCBlbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9lbmFibGVkOyB9CisgICAg
dm9pZCBzZXRFbmFibGVkKGJvb2wgZW5hYmxlZCkgeyBtX2VuYWJsZWQgPSBlbmFibGVkOyB9CisK
KyAgICBib29sIG11dGVkKCkgY29uc3QgeyByZXR1cm4gbV9tdXRlZDsgfQorICAgIHZvaWQgc2V0
TXV0ZWQoYm9vbCk7CisgICAgCiAgICAgdm9pZCBzZXRBdWRpb0Zvcm1hdChzaXplX3QgbnVtYmVy
T2ZDaGFubmVscywgZmxvYXQgc2FtcGxlUmF0ZSk7CiAgICAgdm9pZCBjb25zdW1lQXVkaW8oQXVk
aW9CdXMqLCBzaXplX3QgbnVtYmVyT2ZGcmFtZXMpOwogCisgICAgTWVkaWFTdHJlYW1EZXNjcmlw
dG9yKiBzdHJlYW0oKSBjb25zdCB7IHJldHVybiBtX3N0cmVhbTsgfQorICAgIHZvaWQgc2V0U3Ry
ZWFtKE1lZGlhU3RyZWFtRGVzY3JpcHRvciopOworCiAgICAgYm9vbCByZXF1aXJlc0F1ZGlvQ29u
c3VtZXIoKSBjb25zdCB7IHJldHVybiBtX3JlcXVpcmVzQ29uc3VtZXI7IH0KICAgICB2b2lkIGFk
ZEF1ZGlvQ29uc3VtZXIoUGFzc1JlZlB0cjxBdWRpb0Rlc3RpbmF0aW9uQ29uc3VtZXI+KTsKICAg
ICBib29sIHJlbW92ZUF1ZGlvQ29uc3VtZXIoQXVkaW9EZXN0aW5hdGlvbkNvbnN1bWVyKik7Ci0g
ICAgY29uc3QgVmVjdG9yPFJlZlB0cjxBdWRpb0Rlc3RpbmF0aW9uQ29uc3VtZXI+ID4mIGF1ZGlv
Q29uc3VtZXJzKCkgeyByZXR1cm4gbV9hdWRpb0NvbnN1bWVyczsgfQorICAgIGNvbnN0IFZlY3Rv
cjxSZWZQdHI8QXVkaW9EZXN0aW5hdGlvbkNvbnN1bWVyPiA+JiBhdWRpb0NvbnN1bWVycygpIGNv
bnN0IHsgcmV0dXJuIG1fYXVkaW9Db25zdW1lcnM7IH0KIAogcHJpdmF0ZToKICAgICBNZWRpYVN0
cmVhbVNvdXJjZShjb25zdCBTdHJpbmcmIGlkLCBUeXBlLCBjb25zdCBTdHJpbmcmIG5hbWUsIFJl
YWR5U3RhdGUsIGJvb2wgcmVxdWlyZXNDb25zdW1lcik7CkBAIC0xMDMsMTIgKzEwMCwxNSBAQCBw
cml2YXRlOgogICAgIFN0cmluZyBtX25hbWU7CiAgICAgUmVhZHlTdGF0ZSBtX3JlYWR5U3RhdGU7
CiAgICAgU3RyaW5nIG1fZGV2aWNlSWQ7Ci0gICAgYm9vbCBtX3JlcXVpcmVzQ29uc3VtZXI7CiAg
ICAgVmVjdG9yPE9ic2VydmVyKj4gbV9vYnNlcnZlcnM7CiAgICAgTXV0ZXggbV9hdWRpb0NvbnN1
bWVyc0xvY2s7Ci0gICAgVmVjdG9yPFJlZlB0cjxBdWRpb0Rlc3RpbmF0aW9uQ29uc3VtZXI+ID4g
bV9hdWRpb0NvbnN1bWVyczsKLSAgICBSZWZQdHI8RXh0cmFEYXRhPiBtX2V4dHJhRGF0YTsKKyAg
ICBWZWN0b3I8UmVmUHRyPEF1ZGlvRGVzdGluYXRpb25Db25zdW1lcj4+IG1fYXVkaW9Db25zdW1l
cnM7CiAgICAgUmVmUHRyPE1lZGlhQ29uc3RyYWludHM+IG1fY29uc3RyYWludHM7CisgICAgTWVk
aWFTdHJlYW1EZXNjcmlwdG9yKiBtX3N0cmVhbTsKKworICAgIGJvb2wgbV9yZXF1aXJlc0NvbnN1
bWVyOworICAgIGJvb2wgbV9lbmFibGVkOworICAgIGJvb2wgbV9tdXRlZDsKIH07CiAKIHR5cGVk
ZWYgVmVjdG9yPFJlZlB0cjxNZWRpYVN0cmVhbVNvdXJjZT4gPiBNZWRpYVN0cmVhbVNvdXJjZVZl
Y3RvcjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3Ry
ZWFtU291cmNlc1F1ZXJ5Q2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1Tb3VyY2VzUXVlcnlDbGllbnQuaAkocmV2aXNp
b24gMTU2MjM4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFT
dHJlYW1Tb3VyY2VzUXVlcnlDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1OSArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEVyaWNzc29uIEFCLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqICAgIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgRXJpY3Nz
b24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSAqICAgIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
Ci0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2lmbmRlZiBNZWRpYVN0cmVhbVNvdXJjZXNRdWVyeUNsaWVudF9oCi0jZGVmaW5lIE1l
ZGlhU3RyZWFtU291cmNlc1F1ZXJ5Q2xpZW50X2gKLQotI2lmIEVOQUJMRShNRURJQV9TVFJFQU0p
Ci0KLSNpbmNsdWRlICJNZWRpYVN0cmVhbVNvdXJjZS5oIgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1jbGFzcyBNZWRpYUNvbnN0cmFpbnRzOwotCi1jbGFzcyBNZWRpYVN0cmVhbVNvdXJjZXNR
dWVyeUNsaWVudCA6IHB1YmxpYyBSZWZDb3VudGVkPE1lZGlhU3RyZWFtU291cmNlc1F1ZXJ5Q2xp
ZW50PiB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+TWVkaWFTdHJlYW1Tb3VyY2VzUXVlcnlDbGll
bnQoKSB7IH0KLQotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxNZWRpYUNvbnN0cmFpbnRzPiBhdWRp
b0NvbnN0cmFpbnRzKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxNZWRpYUNv
bnN0cmFpbnRzPiB2aWRlb0NvbnN0cmFpbnRzKCkgY29uc3QgPSAwOwotCi0gICAgdmlydHVhbCB2
b2lkIGRpZENvbXBsZXRlUXVlcnkoY29uc3QgTWVkaWFTdHJlYW1Tb3VyY2VWZWN0b3ImIGF1ZGlv
U291cmNlcywgY29uc3QgTWVkaWFTdHJlYW1Tb3VyY2VWZWN0b3ImIHZpZGVvU291cmNlcykgPSAw
OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKE1FRElB
X1NUUkVBTSkKLQotI2VuZGlmIC8vIE1lZGlhU3RyZWFtU291cmNlc1F1ZXJ5Q2xpZW50X2gKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9u
SGFuZGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL1JUQ1BlZXJDb25uZWN0aW9uSGFuZGxlci5oCShyZXZpc2lvbiAxNTYyMzgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbkhhbmRsZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBjbGFzcyBNZWRpYUNvbnN0cmFpbnRzOwotY2xhc3MgTWVkaWFTdHJlYW1Db21wb25lbnQ7Citj
bGFzcyBNZWRpYVN0cmVhbVNvdXJjZTsKIGNsYXNzIFJUQ0NvbmZpZ3VyYXRpb247CiBjbGFzcyBS
VENEVE1GU2VuZGVySGFuZGxlcjsKIGNsYXNzIFJUQ0RhdGFDaGFubmVsSGFuZGxlcjsKQEAgLTg2
LDcgKzg2LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVTdHJlYW0oUGFzc1Jl
ZlB0cjxNZWRpYVN0cmVhbURlc2NyaXB0b3I+KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGdldFN0
YXRzKFBhc3NSZWZQdHI8UlRDU3RhdHNSZXF1ZXN0PikgPSAwOwogICAgIHZpcnR1YWwgUGFzc093
blB0cjxSVENEYXRhQ2hhbm5lbEhhbmRsZXI+IGNyZWF0ZURhdGFDaGFubmVsKGNvbnN0IFN0cmlu
ZyYgbGFiZWwsIGNvbnN0IFJUQ0RhdGFDaGFubmVsSW5pdCYpID0gMDsKLSAgICB2aXJ0dWFsIFBh
c3NPd25QdHI8UlRDRFRNRlNlbmRlckhhbmRsZXI+IGNyZWF0ZURUTUZTZW5kZXIoUGFzc1JlZlB0
cjxNZWRpYVN0cmVhbUNvbXBvbmVudD4pID0gMDsKKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8UlRD
RFRNRlNlbmRlckhhbmRsZXI+IGNyZWF0ZURUTUZTZW5kZXIoUGFzc1JlZlB0cjxNZWRpYVN0cmVh
bVNvdXJjZT4pID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc3RvcCgpID0gMDsKIAogcHJvdGVjdGVk
OgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUlRDU3RhdHNSZXF1
ZXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
UlRDU3RhdHNSZXF1ZXN0LmgJKHJldmlzaW9uIDE1NjIzOCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL1JUQ1N0YXRzUmVxdWVzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01
MCw3ICs1MCw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8UlRDU3RhdHNSZXNw
b25zZUJhc2U+IGNyZWF0ZVJlc3BvbnNlKCkgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBoYXNTZWxl
Y3RvcigpID0gMDsKICAgICB2aXJ0dWFsIE1lZGlhU3RyZWFtRGVzY3JpcHRvciogc3RyZWFtKCkg
PSAwOwotICAgIHZpcnR1YWwgTWVkaWFTdHJlYW1Db21wb25lbnQqIGNvbXBvbmVudCgpID0gMDsK
ICAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdFN1Y2NlZWRlZChQYXNzUmVmUHRyPFJUQ1N0YXRzUmVz
cG9uc2VCYXNlPikgPSAwOwogCiBwcm90ZWN0ZWQ6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9ibGFja2JlcnJ5L01lZGlhU3RyZWFtQ2VudGVyQmxhY2tCZXJyeS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vYmxh
Y2tiZXJyeS9NZWRpYVN0cmVhbUNlbnRlckJsYWNrQmVycnkuY3BwCShyZXZpc2lvbiAxNTYyMzgp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9ibGFja2JlcnJ5L01lZGlh
U3RyZWFtQ2VudGVyQmxhY2tCZXJyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1NZWRpYVN0cmVhbUNlbnRlciYgTWVkaWFTdHJl
YW1DZW50ZXI6Omluc3RhbmNlKCkKK01lZGlhU3RyZWFtQ2VudGVyJiBNZWRpYVN0cmVhbUNlbnRl
cjo6c2hhcmVkKCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIERFRklORV9T
VEFUSUNfTE9DQUwoTWVkaWFTdHJlYW1DZW50ZXJCbGFja0JlcnJ5LCBjZW50ZXIsICgpKTsKQEAg
LTU2LDM3ICs1Niw0NyBAQCBNZWRpYVN0cmVhbUNlbnRlckJsYWNrQmVycnk6On5NZWRpYVN0cmVh
CiB7CiB9CiAKLXZvaWQgTWVkaWFTdHJlYW1DZW50ZXJCbGFja0JlcnJ5OjpxdWVyeU1lZGlhU3Ry
ZWFtU291cmNlcyhQYXNzUmVmUHRyPE1lZGlhU3RyZWFtU291cmNlc1F1ZXJ5Q2xpZW50PiBjbGll
bnQpCit2b2lkIE1lZGlhU3RyZWFtQ2VudGVyQmxhY2tCZXJyeTo6dmFsaWRhdGVSZXF1ZXN0Q29u
c3RyYWludHMoUGFzc1JlZlB0cjxNZWRpYVN0cmVhbUNyZWF0aW9uQ2xpZW50PiwgUGFzc1JlZlB0
cjxNZWRpYUNvbnN0cmFpbnRzPiwgUGFzc1JlZlB0cjxNZWRpYUNvbnN0cmFpbnRzPikKIHsKLSAg
ICBNZWRpYVN0cmVhbVNvdXJjZVZlY3RvciBhdWRpb1NvdXJjZXMsIHZpZGVvU291cmNlczsKLSAg
ICBjbGllbnQtPmRpZENvbXBsZXRlUXVlcnkoYXVkaW9Tb3VyY2VzLCB2aWRlb1NvdXJjZXMpOwor
ICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisgICAgCit2b2lkIE1lZGlhU3RyZWFtQ2VudGVyQmxh
Y2tCZXJyeTo6Y3JlYXRlTWVkaWFTdHJlYW0oUGFzc1JlZlB0cjxNZWRpYVN0cmVhbUNyZWF0aW9u
Q2xpZW50PiwgUGFzc1JlZlB0cjxNZWRpYUNvbnN0cmFpbnRzPiwgUGFzc1JlZlB0cjxNZWRpYUNv
bnN0cmFpbnRzPikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi1ib29sIE1lZGlhU3Ry
ZWFtQ2VudGVyTWFjOjpnZXRNZWRpYVN0cmVhbVRyYWNrU291cmNlcyhQYXNzUmVmUHRyPE1lZGlh
U3RyZWFtVHJhY2tTb3VyY2VzUmVxdWVzdENsaWVudD4pCitib29sIE1lZGlhU3RyZWFtQ2VudGVy
QmxhY2tCZXJyeTo6Z2V0TWVkaWFTdHJlYW1UcmFja1NvdXJjZXMoUGFzc1JlZlB0cjxNZWRpYVN0
cmVhbVRyYWNrU291cmNlc1JlcXVlc3RDbGllbnQ+KQogeworICAgIG5vdEltcGxlbWVudGVkKCk7
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIE1lZGlhU3RyZWFtQ2VudGVyQmxhY2tCZXJy
eTo6ZGlkU2V0TWVkaWFTdHJlYW1UcmFja0VuYWJsZWQoTWVkaWFTdHJlYW1EZXNjcmlwdG9yKiwg
TWVkaWFTdHJlYW1Db21wb25lbnQqKQordm9pZCBNZWRpYVN0cmVhbUNlbnRlckJsYWNrQmVycnk6
OmRpZFNldE1lZGlhU3RyZWFtVHJhY2tFbmFibGVkKE1lZGlhU3RyZWFtU291cmNlKikKIHsKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi1ib29sIE1lZGlhU3RyZWFtQ2VudGVyQmxhY2tCZXJy
eTo6ZGlkQWRkTWVkaWFTdHJlYW1UcmFjayhNZWRpYVN0cmVhbURlc2NyaXB0b3IqLCBNZWRpYVN0
cmVhbUNvbXBvbmVudCopCitib29sIE1lZGlhU3RyZWFtQ2VudGVyQmxhY2tCZXJyeTo6ZGlkQWRk
TWVkaWFTdHJlYW1UcmFjayhNZWRpYVN0cmVhbVNvdXJjZSopCiB7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgTWVkaWFTdHJlYW1DZW50ZXJCbGFj
a0JlcnJ5OjpkaWRSZW1vdmVNZWRpYVN0cmVhbVRyYWNrKE1lZGlhU3RyZWFtRGVzY3JpcHRvcios
IE1lZGlhU3RyZWFtQ29tcG9uZW50KikKK2Jvb2wgTWVkaWFTdHJlYW1DZW50ZXJCbGFja0JlcnJ5
OjpkaWRSZW1vdmVNZWRpYVN0cmVhbVRyYWNrKE1lZGlhU3RyZWFtU291cmNlKikKIHsKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBNZWRpYVN0cmVh
bUNlbnRlckJsYWNrQmVycnk6OmRpZFN0b3BMb2NhbE1lZGlhU3RyZWFtKE1lZGlhU3RyZWFtRGVz
Y3JpcHRvciopCit2b2lkIE1lZGlhU3RyZWFtQ2VudGVyQmxhY2tCZXJyeTo6ZGlkU3RvcExvY2Fs
TWVkaWFTdHJlYW0oTWVkaWFTdHJlYW1EZXNjcmlwdG9yKiBzdHJlYW0pCiB7CisgICAgZW5kTG9j
YWxNZWRpYVN0cmVhbShzdHJlYW0pOwogfQogCiB2b2lkIE1lZGlhU3RyZWFtQ2VudGVyQmxhY2tC
ZXJyeTo6ZGlkQ3JlYXRlTWVkaWFTdHJlYW0oTWVkaWFTdHJlYW1EZXNjcmlwdG9yKikKIHsKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9ibGFja2JlcnJ5L01lZGlhU3RyZWFt
Q2VudGVyQmxhY2tCZXJyeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL2JsYWNrYmVycnkvTWVkaWFTdHJlYW1DZW50ZXJCbGFja0JlcnJ5LmgJKHJl
dmlzaW9uIDE1NjIzOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2Js
YWNrYmVycnkvTWVkaWFTdHJlYW1DZW50ZXJCbGFja0JlcnJ5LmgJKHdvcmtpbmcgY29weSkKQEAg
LTQxLDggKzQxLDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBNZWRpYVN0cmVh
bUNvbXBvbmVudDsKIGNsYXNzIE1lZGlhU3RyZWFtRGVzY3JpcHRvcjsKK2NsYXNzIE1lZGlhU3Ry
ZWFtU291cmNlOwogY2xhc3MgTWVkaWFTdHJlYW1Tb3VyY2VzUXVlcnlDbGllbnQ7CiAKIGNsYXNz
IE1lZGlhU3RyZWFtQ2VudGVyQmxhY2tCZXJyeSA6IHB1YmxpYyBNZWRpYVN0cmVhbUNlbnRlciB7
CkBAIC01MSwxMSArNTEsMTIgQEAgcHVibGljOgogICAgIH5NZWRpYVN0cmVhbUNlbnRlckJsYWNr
QmVycnkoKTsKIAogICAgIC8vIE1lZGlhU3RyZWFtQ2VudGVyCi0gICAgdmlydHVhbCB2b2lkIHF1
ZXJ5TWVkaWFTdHJlYW1Tb3VyY2VzKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1Tb3VyY2VzUXVlcnlD
bGllbnQ+KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgdmFsaWRhdGVSZXF1ZXN0Q29uc3Ry
YWludHMoUGFzc1JlZlB0cjxNZWRpYVN0cmVhbUNyZWF0aW9uQ2xpZW50PiwgUGFzc1JlZlB0cjxN
ZWRpYUNvbnN0cmFpbnRzPiBhdWRpb0NvbnN0cmFpbnRzLCBQYXNzUmVmUHRyPE1lZGlhQ29uc3Ry
YWludHM+IHZpZGVvQ29uc3RyYWludHMpOworICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVNZWRpYVN0
cmVhbShQYXNzUmVmUHRyPE1lZGlhU3RyZWFtQ3JlYXRpb25DbGllbnQ+LCBQYXNzUmVmUHRyPE1l
ZGlhQ29uc3RyYWludHM+IGF1ZGlvQ29uc3RyYWludHMsIFBhc3NSZWZQdHI8TWVkaWFDb25zdHJh
aW50cz4gdmlkZW9Db25zdHJhaW50cyk7CiAgICAgdmlydHVhbCBib29sIGdldE1lZGlhU3RyZWFt
VHJhY2tTb3VyY2VzKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1UcmFja1NvdXJjZXNSZXF1ZXN0Q2xp
ZW50PikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGRpZFNldE1lZGlhU3RyZWFtVHJhY2tF
bmFibGVkKE1lZGlhU3RyZWFtRGVzY3JpcHRvciosIE1lZGlhU3RyZWFtQ29tcG9uZW50KikgT1ZF
UlJJREU7Ci0gICAgdmlydHVhbCBib29sIGRpZEFkZE1lZGlhU3RyZWFtVHJhY2soTWVkaWFTdHJl
YW1EZXNjcmlwdG9yKiwgTWVkaWFTdHJlYW1Db21wb25lbnQqKSBPVkVSUklERTsKLSAgICB2aXJ0
dWFsIGJvb2wgZGlkUmVtb3ZlTWVkaWFTdHJlYW1UcmFjayhNZWRpYVN0cmVhbURlc2NyaXB0b3Iq
LCBNZWRpYVN0cmVhbUNvbXBvbmVudCopIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBkaWRT
ZXRNZWRpYVN0cmVhbVRyYWNrRW5hYmxlZChNZWRpYVN0cmVhbVNvdXJjZSopIE9WRVJSSURFOwor
ICAgIHZpcnR1YWwgYm9vbCBkaWRBZGRNZWRpYVN0cmVhbVRyYWNrKE1lZGlhU3RyZWFtU291cmNl
KikgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIGRpZFJlbW92ZU1lZGlhU3RyZWFtVHJhY2so
TWVkaWFTdHJlYW1Tb3VyY2UqKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkU3RvcExv
Y2FsTWVkaWFTdHJlYW0oTWVkaWFTdHJlYW1EZXNjcmlwdG9yKikgT1ZFUlJJREU7CiAgICAgdmly
dHVhbCB2b2lkIGRpZENyZWF0ZU1lZGlhU3RyZWFtKE1lZGlhU3RyZWFtRGVzY3JpcHRvciopIE9W
RVJSSURFOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dz
dHJlYW1lci9NZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1lci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01lZGlhU3RyZWFtQ2Vu
dGVyR1N0cmVhbWVyLmNwcAkocmV2aXNpb24gMTU2MjM4KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01lZGlhU3RyZWFtQ2VudGVyR1N0cmVhbWVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLU1lZGlhU3RyZWFtQ2VudGVyJiBNZWRpYVN0cmVhbUNlbnRlcjo6aW5zdGFuY2UoKQorTWVk
aWFTdHJlYW1DZW50ZXImIE1lZGlhU3RyZWFtQ2VudGVyOjpzaGFyZWQoKQogewogICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChNZWRpYVN0cmVhbUNl
bnRlckdTdHJlYW1lciwgY2VudGVyLCAoKSk7CkBAIC01NiwzNyArNTYsNDcgQEAgTWVkaWFTdHJl
YW1DZW50ZXJHU3RyZWFtZXI6On5NZWRpYVN0cmVhbQogewogfQogCi12b2lkIE1lZGlhU3RyZWFt
Q2VudGVyR1N0cmVhbWVyOjpxdWVyeU1lZGlhU3RyZWFtU291cmNlcyhQYXNzUmVmUHRyPE1lZGlh
U3RyZWFtU291cmNlc1F1ZXJ5Q2xpZW50PiBjbGllbnQpCit2b2lkIE1lZGlhU3RyZWFtQ2VudGVy
R1N0cmVhbWVyOjp2YWxpZGF0ZVJlcXVlc3RDb25zdHJhaW50cyhQYXNzUmVmUHRyPE1lZGlhU3Ry
ZWFtQ3JlYXRpb25DbGllbnQ+LCBQYXNzUmVmUHRyPE1lZGlhQ29uc3RyYWludHM+LCBQYXNzUmVm
UHRyPE1lZGlhQ29uc3RyYWludHM+KQogewotICAgIE1lZGlhU3RyZWFtU291cmNlVmVjdG9yIGF1
ZGlvU291cmNlcywgdmlkZW9Tb3VyY2VzOwotICAgIGNsaWVudC0+ZGlkQ29tcGxldGVRdWVyeShh
dWRpb1NvdXJjZXMsIHZpZGVvU291cmNlcyk7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKyAg
ICAKK3ZvaWQgTWVkaWFTdHJlYW1DZW50ZXJHU3RyZWFtZXI6OmNyZWF0ZU1lZGlhU3RyZWFtKFBh
c3NSZWZQdHI8TWVkaWFTdHJlYW1DcmVhdGlvbkNsaWVudD4sIFBhc3NSZWZQdHI8TWVkaWFDb25z
dHJhaW50cz4sIFBhc3NSZWZQdHI8TWVkaWFDb25zdHJhaW50cz4pCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKIH0KIAotYm9vbCBNZWRpYVN0cmVhbUNlbnRlck1hYzo6Z2V0TWVkaWFTdHJlYW1U
cmFja1NvdXJjZXMoUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVRyYWNrU291cmNlc1JlcXVlc3RDbGll
bnQ+KQorYm9vbCBNZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1lcjo6Z2V0TWVkaWFTdHJlYW1UcmFj
a1NvdXJjZXMoUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVRyYWNrU291cmNlc1JlcXVlc3RDbGllbnQ+
KQogeworICAgIG5vdEltcGxlbWVudGVkKCk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lk
IE1lZGlhU3RyZWFtQ2VudGVyR1N0cmVhbWVyOjpkaWRTZXRNZWRpYVN0cmVhbVRyYWNrRW5hYmxl
ZChNZWRpYVN0cmVhbURlc2NyaXB0b3IqLCBNZWRpYVN0cmVhbUNvbXBvbmVudCopCit2b2lkIE1l
ZGlhU3RyZWFtQ2VudGVyR1N0cmVhbWVyOjpkaWRTZXRNZWRpYVN0cmVhbVRyYWNrRW5hYmxlZChN
ZWRpYVN0cmVhbVNvdXJjZSopCiB7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotYm9vbCBN
ZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1lcjo6ZGlkQWRkTWVkaWFTdHJlYW1UcmFjayhNZWRpYVN0
cmVhbURlc2NyaXB0b3IqLCBNZWRpYVN0cmVhbUNvbXBvbmVudCopCitib29sIE1lZGlhU3RyZWFt
Q2VudGVyR1N0cmVhbWVyOjpkaWRBZGRNZWRpYVN0cmVhbVRyYWNrKE1lZGlhU3RyZWFtU291cmNl
KikKIHsKKyAgICBub3RJbXBsZW1lbnRlZCgpOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9v
bCBNZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1lcjo6ZGlkUmVtb3ZlTWVkaWFTdHJlYW1UcmFjayhN
ZWRpYVN0cmVhbURlc2NyaXB0b3IqLCBNZWRpYVN0cmVhbUNvbXBvbmVudCopCitib29sIE1lZGlh
U3RyZWFtQ2VudGVyR1N0cmVhbWVyOjpkaWRSZW1vdmVNZWRpYVN0cmVhbVRyYWNrKE1lZGlhU3Ry
ZWFtU291cmNlKikKIHsKKyAgICBub3RJbXBsZW1lbnRlZCgpOwogICAgIHJldHVybiBmYWxzZTsK
IH0KIAotdm9pZCBNZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1lcjo6ZGlkU3RvcExvY2FsTWVkaWFT
dHJlYW0oTWVkaWFTdHJlYW1EZXNjcmlwdG9yKikKK3ZvaWQgTWVkaWFTdHJlYW1DZW50ZXJHU3Ry
ZWFtZXI6OmRpZFN0b3BMb2NhbE1lZGlhU3RyZWFtKE1lZGlhU3RyZWFtRGVzY3JpcHRvciogc3Ry
ZWFtKQogeworICAgIGVuZExvY2FsTWVkaWFTdHJlYW0oc3RyZWFtKTsKIH0KIAogdm9pZCBNZWRp
YVN0cmVhbUNlbnRlckdTdHJlYW1lcjo6ZGlkQ3JlYXRlTWVkaWFTdHJlYW0oTWVkaWFTdHJlYW1E
ZXNjcmlwdG9yKikKIHsKKyAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3Ry
ZWFtZXIvTWVkaWFTdHJlYW1DZW50ZXJHU3RyZWFtZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTWVkaWFTdHJlYW1DZW50ZXJH
U3RyZWFtZXIuaAkocmV2aXNpb24gMTU2MjM4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01lZGlhU3RyZWFtQ2VudGVyR1N0cmVhbWVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQxLDggKzQxLDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFz
cyBNZWRpYVN0cmVhbUNvbXBvbmVudDsKIGNsYXNzIE1lZGlhU3RyZWFtRGVzY3JpcHRvcjsKK2Ns
YXNzIE1lZGlhU3RyZWFtU291cmNlOwogY2xhc3MgTWVkaWFTdHJlYW1Tb3VyY2VzUXVlcnlDbGll
bnQ7CiAKIGNsYXNzIE1lZGlhU3RyZWFtQ2VudGVyR1N0cmVhbWVyIDogcHVibGljIE1lZGlhU3Ry
ZWFtQ2VudGVyIHsKQEAgLTUxLDExICs1MSwxMiBAQCBwdWJsaWM6CiAgICAgfk1lZGlhU3RyZWFt
Q2VudGVyR1N0cmVhbWVyKCk7CiAKICAgICAvLyBNZWRpYVN0cmVhbUNlbnRlcgotICAgIHZpcnR1
YWwgdm9pZCBxdWVyeU1lZGlhU3RyZWFtU291cmNlcyhQYXNzUmVmUHRyPE1lZGlhU3RyZWFtU291
cmNlc1F1ZXJ5Q2xpZW50PikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHZhbGlkYXRlUmVx
dWVzdENvbnN0cmFpbnRzKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1DcmVhdGlvbkNsaWVudD4sIFBh
c3NSZWZQdHI8TWVkaWFDb25zdHJhaW50cz4gYXVkaW9Db25zdHJhaW50cywgUGFzc1JlZlB0cjxN
ZWRpYUNvbnN0cmFpbnRzPiB2aWRlb0NvbnN0cmFpbnRzKTsKKyAgICB2aXJ0dWFsIHZvaWQgY3Jl
YXRlTWVkaWFTdHJlYW0oUGFzc1JlZlB0cjxNZWRpYVN0cmVhbUNyZWF0aW9uQ2xpZW50PiwgUGFz
c1JlZlB0cjxNZWRpYUNvbnN0cmFpbnRzPiBhdWRpb0NvbnN0cmFpbnRzLCBQYXNzUmVmUHRyPE1l
ZGlhQ29uc3RyYWludHM+IHZpZGVvQ29uc3RyYWludHMpOwogICAgIHZpcnR1YWwgYm9vbCBnZXRN
ZWRpYVN0cmVhbVRyYWNrU291cmNlcyhQYXNzUmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tTb3VyY2Vz
UmVxdWVzdENsaWVudD4pIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBkaWRTZXRNZWRpYVN0
cmVhbVRyYWNrRW5hYmxlZChNZWRpYVN0cmVhbURlc2NyaXB0b3IqLCBNZWRpYVN0cmVhbUNvbXBv
bmVudCopIE9WRVJSSURFOwotICAgIHZpcnR1YWwgYm9vbCBkaWRBZGRNZWRpYVN0cmVhbVRyYWNr
KE1lZGlhU3RyZWFtRGVzY3JpcHRvciosIE1lZGlhU3RyZWFtQ29tcG9uZW50KikgT1ZFUlJJREU7
Ci0gICAgdmlydHVhbCBib29sIGRpZFJlbW92ZU1lZGlhU3RyZWFtVHJhY2soTWVkaWFTdHJlYW1E
ZXNjcmlwdG9yKiwgTWVkaWFTdHJlYW1Db21wb25lbnQqKSBPVkVSUklERTsKKyAgICB2aXJ0dWFs
IHZvaWQgZGlkU2V0TWVkaWFTdHJlYW1UcmFja0VuYWJsZWQoTWVkaWFTdHJlYW1Tb3VyY2UqKSBP
VkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgZGlkQWRkTWVkaWFTdHJlYW1UcmFjayhNZWRpYVN0
cmVhbVNvdXJjZSopIE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCBkaWRSZW1vdmVNZWRpYVN0
cmVhbVRyYWNrKE1lZGlhU3RyZWFtU291cmNlKikgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lk
IGRpZFN0b3BMb2NhbE1lZGlhU3RyZWFtKE1lZGlhU3RyZWFtRGVzY3JpcHRvciopIE9WRVJSSURF
OwogICAgIHZpcnR1YWwgdm9pZCBkaWRDcmVhdGVNZWRpYVN0cmVhbShNZWRpYVN0cmVhbURlc2Ny
aXB0b3IqKSBPVkVSUklERTsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9tYWMvTWVkaWFTdHJlYW1DZW50ZXJNYWMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9NZWRpYVN0cmVhbUNlbnRlck1hYy5j
cHAJKHJldmlzaW9uIDE1NjIzOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL21hYy9NZWRpYVN0cmVhbUNlbnRlck1hYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDE1
ICszNCwxNSBAQAogCiAjaW5jbHVkZSAiTWVkaWFTdHJlYW1DZW50ZXJNYWMuaCIKIAorI2luY2x1
ZGUgIk1lZGlhU3RyZWFtQ3JlYXRpb25DbGllbnQuaCIKICNpbmNsdWRlICJNZWRpYVN0cmVhbURl
c2NyaXB0b3IuaCIKLSNpbmNsdWRlICJNZWRpYVN0cmVhbVNvdXJjZXNRdWVyeUNsaWVudC5oIgog
I2luY2x1ZGUgIk1lZGlhU3RyZWFtVHJhY2tTb3VyY2VzUmVxdWVzdENsaWVudC5oIgogI2luY2x1
ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1NZWRpYVN0cmVhbUNlbnRlciYgTWVkaWFTdHJlYW1DZW50ZXI6
Omluc3RhbmNlKCkKK01lZGlhU3RyZWFtQ2VudGVyJiBNZWRpYVN0cmVhbUNlbnRlcjo6c2hhcmVk
KCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIERFRklORV9TVEFUSUNfTE9D
QUwoTWVkaWFTdHJlYW1DZW50ZXJNYWMsIGNlbnRlciwgKCkpOwpAQCAtNTcsNyArNTcsMTIgQEAg
TWVkaWFTdHJlYW1DZW50ZXJNYWM6On5NZWRpYVN0cmVhbUNlbnRlcgogewogfQogCi12b2lkIE1l
ZGlhU3RyZWFtQ2VudGVyTWFjOjpxdWVyeU1lZGlhU3RyZWFtU291cmNlcyhQYXNzUmVmUHRyPE1l
ZGlhU3RyZWFtU291cmNlc1F1ZXJ5Q2xpZW50PikKK3ZvaWQgTWVkaWFTdHJlYW1DZW50ZXJNYWM6
OnZhbGlkYXRlUmVxdWVzdENvbnN0cmFpbnRzKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1DcmVhdGlv
bkNsaWVudD4sIFBhc3NSZWZQdHI8TWVkaWFDb25zdHJhaW50cz4sIFBhc3NSZWZQdHI8TWVkaWFD
b25zdHJhaW50cz4pCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKyAgICAKK3ZvaWQgTWVk
aWFTdHJlYW1DZW50ZXJNYWM6OmNyZWF0ZU1lZGlhU3RyZWFtKFBhc3NSZWZQdHI8TWVkaWFTdHJl
YW1DcmVhdGlvbkNsaWVudD4sIFBhc3NSZWZQdHI8TWVkaWFDb25zdHJhaW50cz4sIFBhc3NSZWZQ
dHI8TWVkaWFDb25zdHJhaW50cz4pCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KQEAgLTY4
LDE4ICs3MywxOCBAQCBib29sIE1lZGlhU3RyZWFtQ2VudGVyTWFjOjpnZXRNZWRpYVN0cmVhCiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIE1lZGlhU3RyZWFtQ2VudGVyTWFjOjpkaWRTZXRN
ZWRpYVN0cmVhbVRyYWNrRW5hYmxlZChNZWRpYVN0cmVhbURlc2NyaXB0b3IqLCBNZWRpYVN0cmVh
bUNvbXBvbmVudCopCit2b2lkIE1lZGlhU3RyZWFtQ2VudGVyTWFjOjpkaWRTZXRNZWRpYVN0cmVh
bVRyYWNrRW5hYmxlZChNZWRpYVN0cmVhbVNvdXJjZSopCiB7CiAgICAgbm90SW1wbGVtZW50ZWQo
KTsKIH0KIAotYm9vbCBNZWRpYVN0cmVhbUNlbnRlck1hYzo6ZGlkQWRkTWVkaWFTdHJlYW1UcmFj
ayhNZWRpYVN0cmVhbURlc2NyaXB0b3IqLCBNZWRpYVN0cmVhbUNvbXBvbmVudCopCitib29sIE1l
ZGlhU3RyZWFtQ2VudGVyTWFjOjpkaWRBZGRNZWRpYVN0cmVhbVRyYWNrKE1lZGlhU3RyZWFtU291
cmNlKikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAot
Ym9vbCBNZWRpYVN0cmVhbUNlbnRlck1hYzo6ZGlkUmVtb3ZlTWVkaWFTdHJlYW1UcmFjayhNZWRp
YVN0cmVhbURlc2NyaXB0b3IqLCBNZWRpYVN0cmVhbUNvbXBvbmVudCopCitib29sIE1lZGlhU3Ry
ZWFtQ2VudGVyTWFjOjpkaWRSZW1vdmVNZWRpYVN0cmVhbVRyYWNrKE1lZGlhU3RyZWFtU291cmNl
KikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9NZWRpYVN0cmVhbUNlbnRlck1h
Yy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21h
Yy9NZWRpYVN0cmVhbUNlbnRlck1hYy5oCShyZXZpc2lvbiAxNTYyMzgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvTWVkaWFTdHJlYW1DZW50ZXJNYWMuaAkod29y
a2luZyBjb3B5KQpAQCAtNDAsOCArNDAsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNs
YXNzIE1lZGlhU3RyZWFtQ29tcG9uZW50OwogY2xhc3MgTWVkaWFTdHJlYW1EZXNjcmlwdG9yOwor
Y2xhc3MgTWVkaWFTdHJlYW1Tb3VyY2U7CiBjbGFzcyBNZWRpYVN0cmVhbVNvdXJjZXNRdWVyeUNs
aWVudDsKIAogY2xhc3MgTWVkaWFTdHJlYW1DZW50ZXJNYWMgRklOQUwgOiBwdWJsaWMgTWVkaWFT
dHJlYW1DZW50ZXIgewpAQCAtNTAsMTIgKzUwLDEyIEBAIHB1YmxpYzoKICAgICB+TWVkaWFTdHJl
YW1DZW50ZXJNYWMoKTsKIAogICAgIC8vIE1lZGlhU3RyZWFtQ2VudGVyCi0gICAgdmlydHVhbCB2
b2lkIHF1ZXJ5TWVkaWFTdHJlYW1Tb3VyY2VzKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1Tb3VyY2Vz
UXVlcnlDbGllbnQ+KSBPVkVSUklERTsKLSAgICAKKyAgICB2aXJ0dWFsIHZvaWQgdmFsaWRhdGVS
ZXF1ZXN0Q29uc3RyYWludHMoUGFzc1JlZlB0cjxNZWRpYVN0cmVhbUNyZWF0aW9uQ2xpZW50Piwg
UGFzc1JlZlB0cjxNZWRpYUNvbnN0cmFpbnRzPiBhdWRpb0NvbnN0cmFpbnRzLCBQYXNzUmVmUHRy
PE1lZGlhQ29uc3RyYWludHM+IHZpZGVvQ29uc3RyYWludHMpOworICAgIHZpcnR1YWwgdm9pZCBj
cmVhdGVNZWRpYVN0cmVhbShQYXNzUmVmUHRyPE1lZGlhU3RyZWFtQ3JlYXRpb25DbGllbnQ+LCBQ
YXNzUmVmUHRyPE1lZGlhQ29uc3RyYWludHM+IGF1ZGlvQ29uc3RyYWludHMsIFBhc3NSZWZQdHI8
TWVkaWFDb25zdHJhaW50cz4gdmlkZW9Db25zdHJhaW50cyk7CiAgICAgdmlydHVhbCBib29sIGdl
dE1lZGlhU3RyZWFtVHJhY2tTb3VyY2VzKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1UcmFja1NvdXJj
ZXNSZXF1ZXN0Q2xpZW50PikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGRpZFNldE1lZGlh
U3RyZWFtVHJhY2tFbmFibGVkKE1lZGlhU3RyZWFtRGVzY3JpcHRvciosIE1lZGlhU3RyZWFtQ29t
cG9uZW50KikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBib29sIGRpZEFkZE1lZGlhU3RyZWFtVHJh
Y2soTWVkaWFTdHJlYW1EZXNjcmlwdG9yKiwgTWVkaWFTdHJlYW1Db21wb25lbnQqKSBPVkVSUklE
RTsKLSAgICB2aXJ0dWFsIGJvb2wgZGlkUmVtb3ZlTWVkaWFTdHJlYW1UcmFjayhNZWRpYVN0cmVh
bURlc2NyaXB0b3IqLCBNZWRpYVN0cmVhbUNvbXBvbmVudCopIE9WRVJSSURFOworICAgIHZpcnR1
YWwgdm9pZCBkaWRTZXRNZWRpYVN0cmVhbVRyYWNrRW5hYmxlZChNZWRpYVN0cmVhbVNvdXJjZSop
IE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCBkaWRBZGRNZWRpYVN0cmVhbVRyYWNrKE1lZGlh
U3RyZWFtU291cmNlKikgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIGRpZFJlbW92ZU1lZGlh
U3RyZWFtVHJhY2soTWVkaWFTdHJlYW1Tb3VyY2UqKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZv
aWQgZGlkU3RvcExvY2FsTWVkaWFTdHJlYW0oTWVkaWFTdHJlYW1EZXNjcmlwdG9yKikgT1ZFUlJJ
REU7CiAgICAgdmlydHVhbCB2b2lkIGRpZENyZWF0ZU1lZGlhU3RyZWFtKE1lZGlhU3RyZWFtRGVz
Y3JpcHRvciopIE9WRVJSSURFOwogfTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>212712</attachid>
            <date>2013-09-26 08:09:57 -0700</date>
            <delta_ts>2013-09-26 10:42:49 -0700</delta_ts>
            <desc>Updated patch</desc>
            <filename>restructure_platform_3.txt</filename>
            <type>text/plain</type>
            <size>116107</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NjQ1OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0NSBAQAorMjAxMy0wOS0yNiAgRXJpYyBD
YXJsc29uICA8ZXJpYy5jYXJsc29uQGFwcGxlLmNvbT4KKworICAgICAgICBbTWVkaWFTdHJlYW1d
IENsZWFudXAgcGxhdGZvcm0gaW50ZXJmYWNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMjE5MzUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMgKE9PUFMhKS4KKworICAgICAgICAqIENN
YWtlTGlzdHMudHh0OiBSZW1vdmUgTWVkaWFTdHJlYW1Db21wb25lbnQuY3BwLgorICAgICAgICAq
IEdOVW1ha2VmaWxlLmxpc3QuYW06IFJlbW92ZSBNZWRpYVN0cmVhbUNvbXBvbmVudC5ofGNwcCBh
bmQgTWVkaWFTdHJlYW1Tb3VyY2VzUXVlcnlDbGllbnQuaC4gCisgICAgICAgICAgICBBZGQgTWVk
aWFTdHJlYW1Db25zdHJhaW50c1ZhbGlkYXRpb25DbGllbnQuaCBhbmQgTWVkaWFTdHJlYW1DcmVh
dGlvbkNsaWVudC5oLgorCisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVh
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjptZWRpYVN0cmVhbUNlbnRlck92ZXJyaWRlKTogTWFr
ZSBpdCBwb3NzaWJsZSB0byBvdmVycmlkZSB0aGUgc2hhcmVkIHN0cmVhbSBjZW50ZXIuIFdpbGwK
KyAgICAgICAgICAgIGJlIHVzZWQgZm9yIHRlc3RpbmcgaW4gYSBsYXRlciBwYXRjaC4KKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtOjpzaGFyZWRTdHJlYW1DZW50ZXIpOiBSZXR1cm4gY3Vy
cmVudCBzdHJlYW0gY2VudGVyLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW06OnNldFNo
YXJlZFN0cmVhbUNlbnRlcik6IE92ZXJyaWRlIGN1cnJlbnQgc3RyZWFtIGNlbnRlci4KKyAgICAg
ICAgKFdlYkNvcmU6OnByb2Nlc3NUcmFjayk6IER1cGxpY2F0ZSBNZWRpYVN0cmVhbVNvdXJjZSB3
aGVuIG5lY2Vzc2FyeSB0byB3b3JrIGFyb3VuZCBidWcgMTIxOTU0LgorICAgICAgICAoV2ViQ29y
ZTo6Y3JlYXRlRnJvbVNvdXJjZVZlY3RvcnMpOiBNZWRpYVN0cmVhbUNlbnRlcjo6aW5zdGFuY2Ug
LT4gTWVkaWFTdHJlYW06OnNoYXJlZFN0cmVhbUNlbnRlci4KKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhU3RyZWFtOjpNZWRpYVN0cmVhbSk6ICpDb21wb25lbnRzIC0+ICpTdHJlYW1zLgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFTdHJlYW06OnNldEVuZGVkKTogTmV3LgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFTdHJlYW06OnN0b3ApOiAgTWVkaWFTdHJlYW1DZW50ZXI6Omluc3RhbmNlIC0+IE1l
ZGlhU3RyZWFtOjpzaGFyZWRTdHJlYW1DZW50ZXIuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0
cmVhbTo6YWRkVHJhY2spOiBBcHBlbmQgdGhlIHRyYWNrIHBhcmFtZXRlciByYXRoZXIgdGhhbiBk
dXBsaWNhdGluZyBpdCwgYXMgcGVyIHNwZWMuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVh
bTo6cmVtb3ZlVHJhY2spOiAqQ29tcG9uZW50cyAtPiAqU3RyZWFtcy4KKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhU3RyZWFtOjp0cmFja0RpZEVuZCk6IFJlbmFtZWQgZnJvbSB0cmFja0VuZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW06OnN0cmVhbURpZEVuZCk6IFJlbmFtZWQgZnJv
bSBzdHJlYW1FbmRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtOjphZGRSZW1vdGVT
b3VyY2UpOiBSZW5hbWVkIGZyb20gYWRkUmVtb3RlVHJhY2suICpDb21wb25lbnRzIC0+ICpTdHJl
YW1zLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW06OnJlbW92ZVJlbW90ZVNvdXJjZSk6
IFJlbmFtZWQgZnJvbSByZW1vdmVSZW1vdGVUcmFjay4gKkNvbXBvbmVudHMgLT4gKlN0cmVhbXMu
CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbS5oOgorCisgICAgICAg
ICogTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVRyYWNrLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhU3RyZWFtVHJhY2s6OmNyZWF0ZSk6ICpDb21wb25lbnQgLT4gKlN0cmVhbS4K
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtVHJhY2s6Ok1lZGlhU3RyZWFtVHJhY2spOiBE
b24ndCBhc3N1bWUgc291cmNlIGlzIHZhbGlkLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJl
YW1UcmFjazo6fk1lZGlhU3RyZWFtVHJhY2spOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhU3RyZWFtVHJhY2s6OmtpbmQpOiBEaXR0by4gQXRvbWljU3RyaW5nIC0+IGNvbnN0IEF0b21p
Y1N0cmluZyYuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbVRyYWNrOjpzZXRTb3VyY2Up
OiBNb3ZlZCBmcm9tIC5oIGZpbGUuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbVRyYWNr
OjppZCk6IERvbid0IGFzc3VtZSBzb3VyY2UgaXMgdmFsaWQuIENyZWF0ZSBJRCB3aGVuIHRoZSBz
b3VyY2UgZG9lc24ndCBoYXZlIG9uZS4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtVHJh
Y2s6OmxhYmVsKTogRG9uJ3QgYXNzdW1lIHNvdXJjZSBpcyB2YWxpZC4KKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhU3RyZWFtVHJhY2s6OmVuYWJsZWQpOiAKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
U3RyZWFtVHJhY2s6OnNldEVuYWJsZWQpOiAqQ29tcG9uZW50IC0+ICpTdHJlYW0uIE1lZGlhU3Ry
ZWFtQ2VudGVyOjppbnN0YW5jZSAtPiBNZWRpYVN0cmVhbTo6c2hhcmVkU3RyZWFtQ2VudGVyLgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1UcmFjazo6cmVhZHlTdGF0ZSk6ICJtdXRlZCIg
aXMgbm90IGEgcmVhZHlTdGF0ZSwgYnV0ICJuZXciIGlzLgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFTdHJlYW1UcmFjazo6Z2V0U291cmNlcyk6IE1lZGlhU3RyZWFtQ2VudGVyOjppbnN0YW5jZSAt
PiBNZWRpYVN0cmVhbTo6c2hhcmVkU3RyZWFtQ2VudGVyLgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFTdHJlYW1UcmFjazo6ZW5kZWQpOiAqQ29tcG9uZW50IC0+ICpTdHJlYW0uCisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVN0cmVhbVRyYWNrOjpzb3VyY2VDaGFuZ2VkU3RhdGUpOiBEaXNwYXRjaCAi
c3RhcnRlZCIgYW5kICJ1bm11dGVkIiBldmVudHMuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0
cmVhbVRyYWNrOjp0cmFja0VuZGVkKTogUmVuYW1lZCBmcm9tIGRpZEVuZFRyYWNrLiBtX2NvbXBv
bmVudCAtPiBtX3NvdXJjZS4KKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU3Ry
ZWFtVHJhY2suaDoKKworICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vUlRDRFRNRlNlbmRl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSVENEVE1GU2VuZGVyOjpjcmVhdGUpOiB0cmFjay0+
Y29tcG9uZW50KCkgLT4gdHJhY2stPnNvdXJjZSgpOworCisgICAgICAgICogTW9kdWxlcy9tZWRp
YXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSVENQZWVy
Q29ubmVjdGlvbjo6ZGlkUmVtb3ZlUmVtb3RlU3RyZWFtKTogRGl0dG8uCisKKyAgICAgICAgKiBN
b2R1bGVzL21lZGlhc3RyZWFtL1JUQ1N0YXRzUmVxdWVzdEltcGwuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UlRDU3RhdHNSZXF1ZXN0SW1wbDo6UlRDU3RhdHNSZXF1ZXN0SW1wbCk6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6UlRDU3RhdHNSZXF1ZXN0SW1wbDo6Y29tcG9uZW50KTogUmVtb3Zl
ZCwgaXQgd2FzIHVudXNlZC4KKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1N0YXRz
UmVxdWVzdEltcGwuaDoKKworICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vVXNlck1lZGlh
Q2xpZW50Lmg6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9Vc2VyTWVkaWFDb250cm9s
bGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpVc2VyTWVkaWFDb250cm9sbGVyOjpyZXF1ZXN0UGVy
bWlzc2lvbik6IFJlbmFtZWQgZnJvbSByZXF1ZXN0VXNlck1lZGlhLCBnZXQgcmlkIG9mIHNvdXJj
ZQorICAgICAgICAgICAgdmVjdG9yIHBhcmFtZXRlcnMuCisgICAgICAgIChXZWJDb3JlOjpVc2Vy
TWVkaWFDb250cm9sbGVyOjpjYW5jZWxSZXF1ZXN0KTogUmVuYW1lZCBmcm9tIGNhbmNlbFVzZXJN
ZWRpYVJlcXVlc3QuCisKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL1VzZXJNZWRpYVJl
cXVlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VPcHRpb25zKTogTWVkaWFDb25zdHJh
aW50c0ltcGwgLT4gTWVkaWFDb25zdHJhaW50cy4KKyAgICAgICAgKFdlYkNvcmU6OlVzZXJNZWRp
YVJlcXVlc3Q6OmNyZWF0ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6VXNlck1lZGlhUmVx
dWVzdDo6VXNlck1lZGlhUmVxdWVzdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6VXNlck1l
ZGlhUmVxdWVzdDo6c2VjdXJpdHlPcmlnaW4pOiBOZXcuCisgICAgICAgIChXZWJDb3JlOjpVc2Vy
TWVkaWFSZXF1ZXN0OjpzdGFydCk6IFJlcXVlc3QgY29uc3RyYWludCB2YWxpZGF0aW9uLgorICAg
ICAgICAoV2ViQ29yZTo6VXNlck1lZGlhUmVxdWVzdDo6Y29uc3RyYWludHNWYWxpZGF0ZWQpOiBO
ZXcuIENhbGxiYWNrIGZyb20gbWVkaWEgZW5naW5lIHdoZW4gY29uc3RyYWludHMKKyAgICAgICAg
ICAgIGNhbiBiZSBzdXBwb3J0ZWQuCisgICAgICAgIChXZWJDb3JlOjpVc2VyTWVkaWFSZXF1ZXN0
OjpyZXF1ZXN0UGVybWlzc2lvbik6IE5ldy4gQXNrIHVzZXIgbWVkaWEgY2xpZW50IGZvciBwZXJt
aXNzaW9uIHRvIGFjY2VzcyBtZWRpYS4KKyAgICAgICAgKFdlYkNvcmU6OlVzZXJNZWRpYVJlcXVl
c3Q6OnVzZXJNZWRpYUFjY2Vzc0dyYW50ZWQpOiBOZXcuIEFjY2VzcyBoYXMgYmVlbiBncmFudGVk
LgorICAgICAgICAoV2ViQ29yZTo6VXNlck1lZGlhUmVxdWVzdDo6Y3JlYXRlTWVkaWFTdHJlYW0p
OiBOZXcuIEFsbG93ZWQgdG8gYWNjZXNzIG1lZGlhLCBhc2sgbWVkaWEgZW5naW5lCisgICAgICAg
ICAgICB0byBjcmVhdGUgc3RyZWFtIHNvdXJjZXMuCisgICAgICAgIChXZWJDb3JlOjpVc2VyTWVk
aWFSZXF1ZXN0Ojp1c2VyTWVkaWFBY2Nlc3NEZW5pZWQpOiBOZXcuIFVzZXIgbWVkaWEgY2xpZW50
IGhhcyBkZW5pZWQgYWNjZXNzIHJlcXVlc3QuCisgICAgICAgIChXZWJDb3JlOjpVc2VyTWVkaWFS
ZXF1ZXN0Ojpjb25zdHJhaW50c0ludmFsaWQpOiBOZXcuIE1lZGlhIGVuZ2luZSBjYW4gbm90IHN1
cHBvcnQgY29uc3RyYWludHMuCisgICAgICAgIChXZWJDb3JlOjpVc2VyTWVkaWFSZXF1ZXN0Ojpk
aWRDcmVhdGVTdHJlYW0pOiBOZXcuIE1lZGlhIGVuZ2luZSBoYXMgY3JlYXRlZCBzdHJlYW0gc291
cmNlcy4KKyAgICAgICAgKFdlYkNvcmU6OlVzZXJNZWRpYVJlcXVlc3Q6OmNhbGxTdWNjZXNzSGFu
ZGxlcik6IE5ldy4gQ3JlYXRlIHN0cmVhbSBmcm9tIHNvdXJjZXMgYW5kIGNhbGwgc3VjY2VzcyBo
YW5kbGVyLgorICAgICAgICAoV2ViQ29yZTo6VXNlck1lZGlhUmVxdWVzdDo6ZmFpbGVkVG9DcmVh
dGVTdHJlYW1XaXRoQ29uc3RyYWludHNFcnJvcik6IFJlbmFtZWQgZnJvbSBjb25zdHJhaW50RmFp
bHVyZS4KKyAgICAgICAgKFdlYkNvcmU6OlVzZXJNZWRpYVJlcXVlc3Q6OmZhaWxlZFRvQ3JlYXRl
U3RyZWFtV2l0aFBlcm1pc3Npb25FcnJvcik6IFJlbmFtZWQgZnJvbSBwZXJtaXNzaW9uRmFpbHVy
ZS4KKyAgICAgICAgKFdlYkNvcmU6OlVzZXJNZWRpYVJlcXVlc3Q6OmNhbGxFcnJvckhhbmRsZXIp
OiAKKyAgICAgICAgKFdlYkNvcmU6OlVzZXJNZWRpYVJlcXVlc3Q6OmNvbnRleHREZXN0cm95ZWQp
OiBjYW5jZWxVc2VyTWVkaWFSZXF1ZXN0IC0+IGNhbmNlbFJlcXVlc3QuCisgICAgICAgICogTW9k
dWxlcy9tZWRpYXN0cmVhbS9Vc2VyTWVkaWFSZXF1ZXN0Lmg6CisKKyAgICAgICAgKiBNb2R1bGVz
L3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0NvbnRl
eHQ6OmNyZWF0ZU1lZGlhU3RyZWFtU291cmNlKTogbG9jYWxBdWRpby0+Y29tcG9uZW50KCktPnNv
dXJjZSgpIC0+IGxvY2FsQXVkaW8tPnNvdXJjZSgpLgorCisgICAgICAgICogTW9kdWxlcy93ZWJh
dWRpby9NZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhU3RyZWFtQXVkaW9EZXN0aW5hdGlvbk5vZGU6Ok1lZGlhU3RyZWFtQXVkaW9EZXN0
aW5hdGlvbk5vZGUpOiBNZWRpYVN0cmVhbVNvdXJjZTo6VHlwZUF1ZGlvIC0+CisgICAgICAgICAg
ICBNZWRpYVN0cmVhbVNvdXJjZTo6QXVkaW8sIE1lZGlhU3RyZWFtU291cmNlOjpSZWFkeVN0YXRl
TGl2ZSAtPiBNZWRpYVN0cmVhbVNvdXJjZTo6TGl2ZS4KKyAgICAgICAgICAgIE1lZGlhU3RyZWFt
Q2VudGVyOjppbnN0YW5jZSAtPiBNZWRpYVN0cmVhbTo6c2hhcmVkU3RyZWFtQ2VudGVyLgorCisg
ICAgICAgICogV2ViQ29yZS5leHAuaW46IEV4cG9ydCBuZXcgc3ltYm9scy4KKworICAgICAgICAq
IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogQWRkIG5ldyBmaWxlcyBhbmQgcmVt
b3ZlIGRlbGV0ZWQgZmlsZXMuCisKKyAgICAgICAgKiBkb20vRXZlbnROYW1lcy5oOiBEZWZpbmUg
InN0YXJ0ZWQiIGV2ZW50LgorCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFT
dHJlYW1DZW50ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1DZW50ZXI6OmVu
ZExvY2FsTWVkaWFTdHJlYW0pOiBOZXZlciBjYWxsIHRoZSBkZXNjcmlwdG9yIGNsaWVudCwgYWx3
YXlzIGNhbGwKKyAgICAgICAgICAgIHRoZSBkZXNjcmlwdG9yIGFuZCBsZXQgaXQgZGVhbCB3aXRo
IHRoZSBjbGllbnQuCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1D
ZW50ZXIuaDoKKworICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtQ29t
cG9uZW50LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRp
YVN0cmVhbUNvbXBvbmVudC5oOiBSZW1vdmVkLgorCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFz
dHJlYW0vTWVkaWFTdHJlYW1Db25zdHJhaW50c1ZhbGlkYXRpb25DbGllbnQuaDogQWRkZWQuCisg
ICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1DcmVhdGlvbkNsaWVudC5o
OiBBZGRlZC4KKworICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtRGVz
Y3JpcHRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbURlc2NyaXB0b3I6OmFk
ZFNvdXJjZSk6ICpDb21wb25lbnQgLT4gKlNvdXJjZS4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
U3RyZWFtRGVzY3JpcHRvcjo6cmVtb3ZlU291cmNlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVN0cmVhbURlc2NyaXB0b3I6OmFkZFJlbW90ZVNvdXJjZSk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1EZXNjcmlwdG9yOjpyZW1vdmVSZW1vdGVTb3VyY2UpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtRGVzY3JpcHRvcjo6TWVkaWFTdHJl
YW1EZXNjcmlwdG9yKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbURlc2Ny
aXB0b3I6OnNldEVuZGVkKTogRGl0dG8uIFNldCBzb3VyY2UgcmVhZHlTdGF0ZXMgdG8gRW5kZWQu
CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1EZXNjcmlwdG9yLmg6
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVNvdXJjZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbVNvdXJjZTo6TWVkaWFTdHJlYW1Tb3VyY2Up
OiBJbml0aWFsaXplIG5ldyBtZW1iZXIgdmFyaWFibGVzLgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFTdHJlYW1Tb3VyY2U6OnNldFJlYWR5U3RhdGUpOiBFYXJseSByZXR1cm4gd2hlbiB0aGUgc3Rh
dGUgaGFzbid0IGNoYW5nZWQuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbVNvdXJjZTo6
c2V0U3RyZWFtKTogTmV3LgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1Tb3VyY2U6OnNl
dE11dGVkKTogTmV3LgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFt
U291cmNlLmg6CisKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVNv
dXJjZXNRdWVyeUNsaWVudC5oOiBSZW1vdmVkLgorCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFz
dHJlYW0vUlRDUGVlckNvbm5lY3Rpb25IYW5kbGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vbWVk
aWFzdHJlYW0vUlRDU3RhdHNSZXF1ZXN0Lmg6CisKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0
cmVhbS9ibGFja2JlcnJ5L01lZGlhU3RyZWFtQ2VudGVyQmxhY2tCZXJyeS5jcHA6IFVwZGF0ZSBm
b3IgbmV3IE1lZGlhU3RyZWFtQ2VudGVyIEFQSS4KKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0
cmVhbS9ibGFja2JlcnJ5L01lZGlhU3RyZWFtQ2VudGVyQmxhY2tCZXJyeS5oOgorCisgICAgICAg
ICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01lZGlhU3RyZWFtQ2VudGVyR1N0cmVh
bWVyLmNwcDogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVy
L01lZGlhU3RyZWFtQ2VudGVyR1N0cmVhbWVyLmg6CisKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRp
YXN0cmVhbS9tYWMvTWVkaWFTdHJlYW1DZW50ZXJNYWMuY3BwOiBEaXR0by4KKyAgICAgICAgKiBw
bGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvTWVkaWFTdHJlYW1DZW50ZXJNYWMuaDoKKwogMjAxMy0w
OS0yNiAgQW5kcmVhcyBLbGluZyAgPGFrbGluZ0BhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3Zl
IGVtcHR5IEpTRm9vQ3VzdG9tLmNwcCBmaWxlcy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NNYWtl
TGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CShy
ZXZpc2lvbiAxNTY0NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2lu
ZyBjb3B5KQpAQCAtMjAyNSw3ICsyMDI1LDYgQEAgc2V0KFdlYkNvcmVfU09VUkNFUwogICAgIHBs
YXRmb3JtL2xldmVsZGIvTGV2ZWxEQldyaXRlQmF0Y2guY3BwCiAKICAgICBwbGF0Zm9ybS9tZWRp
YXN0cmVhbS9NZWRpYVN0cmVhbUNlbnRlci5jcHAKLSAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9N
ZWRpYVN0cmVhbUNvbXBvbmVudC5jcHAKICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0
cmVhbURlc2NyaXB0b3IuY3BwCiAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1T
b3VyY2UuY3BwCiAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vUlRDSWNlQ2FuZGlkYXRlRGVzY3Jp
cHRvci5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkocmV2aXNpb24gMTU2
NDU5KQorKysgU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkod29ya2luZyBjb3B5
KQpAQCAtNTQ1NCwxMyArNTQ1NCwxMiBAQCB3ZWJjb3JlX3BsYXRmb3JtX3NvdXJjZXMgKz0gXAog
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhQ29uc3RyYWludHMuaCBc
CiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1DZW50ZXIu
Y3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbUNl
bnRlci5oIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVh
bUNvbXBvbmVudC5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01l
ZGlhU3RyZWFtQ29tcG9uZW50LmggXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL01lZGlhU3RyZWFtQ29uc3RyYWludHNWYWxpZGF0aW9uQ2xpZW50LmggXAorCVNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtQ3JlYXRpb25DbGllbnQuaCBc
CiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1EZXNjcmlw
dG9yLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJl
YW1EZXNjcmlwdG9yLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01l
ZGlhU3RyZWFtU291cmNlLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vTWVkaWFTdHJlYW1Tb3VyY2UuaCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vTWVkaWFTdHJlYW1Tb3VyY2VzUXVlcnlDbGllbnQuaCBcCiAJU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1UcmFja1NvdXJjZXNSZXF1ZXN0Q2xpZW50
LmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JUQ0NvbmZpZ3VyYXRp
b24uaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUlRDRFRNRlNlbmRl
ckhhbmRsZXIuaCBcCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkocmV2aXNpb24gMTU2NDU5KQor
KysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHdvcmtpbmcgY29weSkKQEAgLTI3OTgs
MyArMjc5OCwxMCBAQCBfd2tJc1B1YmxpY1N1ZmZpeAogX19aTjdXZWJDb3JlMTVSZXNvdXJjZVJl
cXVlc3QxM3BhcnRpdGlvbk5hbWVFUktOM1dURjZTdHJpbmdFCiBfd2tDYWNoZVBhcnRpdGlvbktl
eQogI2VuZGlmCisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorX19aTjdXZWJDb3JlMTZVc2Vy
TWVkaWFSZXF1ZXN0MjJ1c2VyTWVkaWFBY2Nlc3NHcmFudGVkRXYKK19fWk43V2ViQ29yZTE2VXNl
ck1lZGlhUmVxdWVzdDIxdXNlck1lZGlhQWNjZXNzRGVuaWVkRXYKK19fWk43V2ViQ29yZTE4cHJv
dmlkZVVzZXJNZWRpYVRvRVBOU180UGFnZUVQTlNfMTVVc2VyTWVkaWFDbGllbnRFCitfX1pOSzdX
ZWJDb3JlMTZVc2VyTWVkaWFSZXF1ZXN0MTRzZWN1cml0eU9yaWdpbkV2CisjZW5kaWYKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW0uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW0u
Y3BwCShyZXZpc2lvbiAxNTY0NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3Ry
ZWFtL01lZGlhU3RyZWFtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDcgQEAKIC8qCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
IENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBFcmljc3NvbiBBQi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM0LDkgKzM1LDMwIEBACiAjaW5j
bHVkZSAiTWVkaWFTdHJlYW1SZWdpc3RyeS5oIgogI2luY2x1ZGUgIk1lZGlhU3RyZWFtU291cmNl
LmgiCiAjaW5jbHVkZSAiTWVkaWFTdHJlYW1UcmFja0V2ZW50LmgiCisjaW5jbHVkZSA8d3RmL05l
dmVyRGVzdHJveWVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorc3RhdGljIE1lZGlhU3Ry
ZWFtQ2VudGVyKiYgbWVkaWFTdHJlYW1DZW50ZXJPdmVycmlkZSgpCit7CisgICAgc3RhdGljIE1l
ZGlhU3RyZWFtQ2VudGVyKiBvdmVycmlkZTsKKyAgICByZXR1cm4gb3ZlcnJpZGU7Cit9CisKK01l
ZGlhU3RyZWFtQ2VudGVyJiBNZWRpYVN0cmVhbTo6c2hhcmVkU3RyZWFtQ2VudGVyKCkKK3sKKyAg
ICBNZWRpYVN0cmVhbUNlbnRlciogb3ZlcnJpZGUgPSBtZWRpYVN0cmVhbUNlbnRlck92ZXJyaWRl
KCk7CisgICAgaWYgKG92ZXJyaWRlKQorICAgICAgICByZXR1cm4gKm92ZXJyaWRlOworCisgICAg
cmV0dXJuIE1lZGlhU3RyZWFtQ2VudGVyOjpzaGFyZWQoKTsKK30KKyAgICAKK3ZvaWQgTWVkaWFT
dHJlYW06OnNldFNoYXJlZFN0cmVhbUNlbnRlcihNZWRpYVN0cmVhbUNlbnRlciogY2VudGVyKQor
eworICAgIG1lZGlhU3RyZWFtQ2VudGVyT3ZlcnJpZGUoKSA9IGNlbnRlcjsKK30KKwogc3RhdGlj
IGJvb2wgY29udGFpbnNTb3VyY2UoTWVkaWFTdHJlYW1Tb3VyY2VWZWN0b3ImIHNvdXJjZVZlY3Rv
ciwgTWVkaWFTdHJlYW1Tb3VyY2UqIHNvdXJjZSkKIHsKICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHNvdXJjZVZlY3Rvci5zaXplKCk7ICsraSkgewpAQCAtNTEsMTUgKzczLDIyIEBAIHN0YXRp
YyB2b2lkIHByb2Nlc3NUcmFjayhNZWRpYVN0cmVhbVRyYWMKICAgICBpZiAodHJhY2stPmVuZGVk
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIE1lZGlhU3RyZWFtU291cmNlKiBzb3VyY2UgPSB0
cmFjay0+Y29tcG9uZW50KCktPnNvdXJjZSgpOwotICAgIGlmICghY29udGFpbnNTb3VyY2Uoc291
cmNlVmVjdG9yLCBzb3VyY2UpKQotICAgICAgICBzb3VyY2VWZWN0b3IuYXBwZW5kKHNvdXJjZSk7
CisgICAgTWVkaWFTdHJlYW1Tb3VyY2UqIHNvdXJjZSA9IHRyYWNrLT5zb3VyY2UoKTsKKyAgICBp
ZiAoIWNvbnRhaW5zU291cmNlKHNvdXJjZVZlY3Rvciwgc291cmNlKSkgeworICAgICAgICBpZiAo
c291cmNlLT5zdHJlYW0oKSkgeworICAgICAgICAgICAgLy8gRklYTUU6IHRoaXMgc2hvdWxkIG5v
dCBiZSBuZWNlc3NhcnkgYmVjYXVzZSB0cmFja3MgYW5kIHN0cmVhbXMgbXVzdCBiZSBhYmxlIHRv
IHNoYXJlIHNvdXJjZXMsIGJ1dCBvdXIgY29kZQorICAgICAgICAgICAgLy8gY3VycmVubHR5IGFz
c3VtZXMgZWFjaCBzb3VyY2UgaXMgYXR0YWNoZWQgdG8ganVzdCBvbmUgdHJhY2suCisgICAgICAg
ICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIxOTU0Cisg
ICAgICAgICAgICBzb3VyY2VWZWN0b3IuYXBwZW5kKE1lZGlhU3RyZWFtU291cmNlOjpjcmVhdGUo
c291cmNlLT5pZCgpLCBzb3VyY2UtPnR5cGUoKSwgc291cmNlLT5uYW1lKCksIHNvdXJjZS0+cmVh
ZHlTdGF0ZSgpLCBzb3VyY2UtPnJlcXVpcmVzQXVkaW9Db25zdW1lcigpKS5nZXQoKSk7CisgICAg
ICAgIH0gZWxzZQorICAgICAgICAgICAgc291cmNlVmVjdG9yLmFwcGVuZChzb3VyY2UpOworICAg
IH0KIH0KIAogc3RhdGljIFBhc3NSZWZQdHI8TWVkaWFTdHJlYW0+IGNyZWF0ZUZyb21Tb3VyY2VW
ZWN0b3JzKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IE1lZGlhU3RyZWFt
U291cmNlVmVjdG9yJiBhdWRpb1NvdXJjZXMsIGNvbnN0IE1lZGlhU3RyZWFtU291cmNlVmVjdG9y
JiB2aWRlb1NvdXJjZXMpCiB7CiAgICAgUmVmUHRyPE1lZGlhU3RyZWFtRGVzY3JpcHRvcj4gZGVz
Y3JpcHRvciA9IE1lZGlhU3RyZWFtRGVzY3JpcHRvcjo6Y3JlYXRlKGF1ZGlvU291cmNlcywgdmlk
ZW9Tb3VyY2VzKTsKLSAgICBNZWRpYVN0cmVhbUNlbnRlcjo6aW5zdGFuY2UoKS5kaWRDcmVhdGVN
ZWRpYVN0cmVhbShkZXNjcmlwdG9yLmdldCgpKTsKKyAgICBNZWRpYVN0cmVhbTo6c2hhcmVkU3Ry
ZWFtQ2VudGVyKCkuZGlkQ3JlYXRlTWVkaWFTdHJlYW0oZGVzY3JpcHRvci5nZXQoKSk7CiAKICAg
ICByZXR1cm4gTWVkaWFTdHJlYW06OmNyZWF0ZShjb250ZXh0LCBkZXNjcmlwdG9yLnJlbGVhc2Uo
KSk7CiB9CkBAIC0xMTIsMTUgKzE0MSwxNSBAQCBNZWRpYVN0cmVhbTo6TWVkaWFTdHJlYW0oU2Ny
aXB0RXhlY3V0aW9uCiB7CiAgICAgbV9kZXNjcmlwdG9yLT5zZXRDbGllbnQodGhpcyk7CiAKLSAg
ICBzaXplX3QgbnVtYmVyT2ZBdWRpb1RyYWNrcyA9IG1fZGVzY3JpcHRvci0+bnVtYmVyT2ZBdWRp
b0NvbXBvbmVudHMoKTsKKyAgICBzaXplX3QgbnVtYmVyT2ZBdWRpb1RyYWNrcyA9IG1fZGVzY3Jp
cHRvci0+bnVtYmVyT2ZBdWRpb1N0cmVhbXMoKTsKICAgICBtX2F1ZGlvVHJhY2tzLnJlc2VydmVD
YXBhY2l0eShudW1iZXJPZkF1ZGlvVHJhY2tzKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG51bWJlck9mQXVkaW9UcmFja3M7IGkrKykKLSAgICAgICAgbV9hdWRpb1RyYWNrcy5hcHBlbmQo
TWVkaWFTdHJlYW1UcmFjazo6Y3JlYXRlKGNvbnRleHQsIG1fZGVzY3JpcHRvci0+YXVkaW9Db21w
b25lbnQoaSkpKTsKKyAgICAgICAgbV9hdWRpb1RyYWNrcy5hcHBlbmQoTWVkaWFTdHJlYW1UcmFj
azo6Y3JlYXRlKGNvbnRleHQsIG1fZGVzY3JpcHRvci0+YXVkaW9TdHJlYW1zKGkpKSk7CiAKLSAg
ICBzaXplX3QgbnVtYmVyT2ZWaWRlb1RyYWNrcyA9IG1fZGVzY3JpcHRvci0+bnVtYmVyT2ZWaWRl
b0NvbXBvbmVudHMoKTsKKyAgICBzaXplX3QgbnVtYmVyT2ZWaWRlb1RyYWNrcyA9IG1fZGVzY3Jp
cHRvci0+bnVtYmVyT2ZWaWRlb1N0cmVhbXMoKTsKICAgICBtX3ZpZGVvVHJhY2tzLnJlc2VydmVD
YXBhY2l0eShudW1iZXJPZlZpZGVvVHJhY2tzKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG51bWJlck9mVmlkZW9UcmFja3M7IGkrKykKLSAgICAgICAgbV92aWRlb1RyYWNrcy5hcHBlbmQo
TWVkaWFTdHJlYW1UcmFjazo6Y3JlYXRlKGNvbnRleHQsIG1fZGVzY3JpcHRvci0+dmlkZW9Db21w
b25lbnQoaSkpKTsKKyAgICAgICAgbV92aWRlb1RyYWNrcy5hcHBlbmQoTWVkaWFTdHJlYW1UcmFj
azo6Y3JlYXRlKGNvbnRleHQsIG1fZGVzY3JpcHRvci0+dmlkZW9TdHJlYW1zKGkpKSk7CiB9CiAK
IE1lZGlhU3RyZWFtOjp+TWVkaWFTdHJlYW0oKQpAQCAtMTMzLDEzICsxNjIsMjAgQEAgYm9vbCBN
ZWRpYVN0cmVhbTo6ZW5kZWQoKSBjb25zdAogICAgIHJldHVybiBtX3N0b3BwZWQgfHwgbV9kZXNj
cmlwdG9yLT5lbmRlZCgpOwogfQogCit2b2lkIE1lZGlhU3RyZWFtOjpzZXRFbmRlZCgpCit7Cisg
ICAgaWYgKGVuZGVkKCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2Rlc2NyaXB0b3ItPnNldEVu
ZGVkKCk7Cit9CisKIHZvaWQgTWVkaWFTdHJlYW06OnN0b3AoKQogewogICAgIGlmIChlbmRlZCgp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBNZWRpYVN0cmVhbUNlbnRlcjo6aW5zdGFuY2UoKS5k
aWRTdG9wTG9jYWxNZWRpYVN0cmVhbShkZXNjcmlwdG9yKCkpOwotICAgIHN0cmVhbUVuZGVkKCk7
CisgICAgTWVkaWFTdHJlYW06OnNoYXJlZFN0cmVhbUNlbnRlcigpLmRpZFN0b3BMb2NhbE1lZGlh
U3RyZWFtKGRlc2NyaXB0b3IoKSk7CisgICAgc2V0RW5kZWQoKTsKIH0KIAogdm9pZCBNZWRpYVN0
cmVhbTo6YWRkVHJhY2soUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVRyYWNrPiBwcnBUcmFjaywgRXhj
ZXB0aW9uQ29kZSYgZWMpCkBAIC0xNTUsMjQgKzE5MSwxOSBAQCB2b2lkIE1lZGlhU3RyZWFtOjph
ZGRUcmFjayhQYXNzUmVmUHRyPE1lCiAgICAgfQogCiAgICAgUmVmUHRyPE1lZGlhU3RyZWFtVHJh
Y2s+IHRyYWNrID0gcHJwVHJhY2s7Ci0KICAgICBpZiAoZ2V0VHJhY2tCeUlkKHRyYWNrLT5pZCgp
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVmUHRyPE1lZGlhU3RyZWFtQ29tcG9uZW50PiBj
b21wb25lbnQgPSBNZWRpYVN0cmVhbUNvbXBvbmVudDo6Y3JlYXRlKG1fZGVzY3JpcHRvci5nZXQo
KSwgdHJhY2stPmNvbXBvbmVudCgpLT5zb3VyY2UoKSk7Ci0gICAgUmVmUHRyPE1lZGlhU3RyZWFt
VHJhY2s+IG5ld1RyYWNrID0gTWVkaWFTdHJlYW1UcmFjazo6Y3JlYXRlKHNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKSwgY29tcG9uZW50LmdldCgpKTsKLQotICAgIHN3aXRjaCAoY29tcG9uZW50LT5z
b3VyY2UoKS0+dHlwZSgpKSB7Ci0gICAgY2FzZSBNZWRpYVN0cmVhbVNvdXJjZTo6VHlwZUF1ZGlv
OgotICAgICAgICBtX2F1ZGlvVHJhY2tzLmFwcGVuZChuZXdUcmFjayk7CisgICAgc3dpdGNoICh0
cmFjay0+c291cmNlKCktPnR5cGUoKSkgeworICAgIGNhc2UgTWVkaWFTdHJlYW1Tb3VyY2U6OkF1
ZGlvOgorICAgICAgICBtX2F1ZGlvVHJhY2tzLmFwcGVuZCh0cmFjayk7CiAgICAgICAgIGJyZWFr
OwotICAgIGNhc2UgTWVkaWFTdHJlYW1Tb3VyY2U6OlR5cGVWaWRlbzoKLSAgICAgICAgbV92aWRl
b1RyYWNrcy5hcHBlbmQobmV3VHJhY2spOworICAgIGNhc2UgTWVkaWFTdHJlYW1Tb3VyY2U6OlZp
ZGVvOgorICAgICAgICBtX3ZpZGVvVHJhY2tzLmFwcGVuZCh0cmFjayk7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KIAotICAgIG1fZGVzY3JpcHRvci0+YWRkQ29tcG9uZW50KGNvbXBvbmVudC5yZWxl
YXNlKCkpOwotICAgIE1lZGlhU3RyZWFtQ2VudGVyOjppbnN0YW5jZSgpLmRpZEFkZE1lZGlhU3Ry
ZWFtVHJhY2sobV9kZXNjcmlwdG9yLmdldCgpLCBuZXdUcmFjay0+Y29tcG9uZW50KCkpOworICAg
IE1lZGlhU3RyZWFtOjpzaGFyZWRTdHJlYW1DZW50ZXIoKS5kaWRBZGRNZWRpYVN0cmVhbVRyYWNr
KHRyYWNrLT5zb3VyY2UoKSk7CiB9CiAKIHZvaWQgTWVkaWFTdHJlYW06OnJlbW92ZVRyYWNrKFBh
c3NSZWZQdHI8TWVkaWFTdHJlYW1UcmFjaz4gcHJwVHJhY2ssIEV4Y2VwdGlvbkNvZGUmIGVjKQpA
QCAtMTkwLDEzICsyMjEsMTMgQEAgdm9pZCBNZWRpYVN0cmVhbTo6cmVtb3ZlVHJhY2soUGFzc1Jl
ZlB0cgogICAgIFJlZlB0cjxNZWRpYVN0cmVhbVRyYWNrPiB0cmFjayA9IHBycFRyYWNrOwogCiAg
ICAgc2l6ZV90IHBvcyA9IG5vdEZvdW5kOwotICAgIHN3aXRjaCAodHJhY2stPmNvbXBvbmVudCgp
LT5zb3VyY2UoKS0+dHlwZSgpKSB7Ci0gICAgY2FzZSBNZWRpYVN0cmVhbVNvdXJjZTo6VHlwZUF1
ZGlvOgorICAgIHN3aXRjaCAodHJhY2stPnNvdXJjZSgpLT50eXBlKCkpIHsKKyAgICBjYXNlIE1l
ZGlhU3RyZWFtU291cmNlOjpBdWRpbzoKICAgICAgICAgcG9zID0gbV9hdWRpb1RyYWNrcy5maW5k
KHRyYWNrKTsKICAgICAgICAgaWYgKHBvcyAhPSBub3RGb3VuZCkKICAgICAgICAgICAgIG1fYXVk
aW9UcmFja3MucmVtb3ZlKHBvcyk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgTWVkaWFTdHJl
YW1Tb3VyY2U6OlR5cGVWaWRlbzoKKyAgICBjYXNlIE1lZGlhU3RyZWFtU291cmNlOjpWaWRlbzoK
ICAgICAgICAgcG9zID0gbV92aWRlb1RyYWNrcy5maW5kKHRyYWNrKTsKICAgICAgICAgaWYgKHBv
cyAhPSBub3RGb3VuZCkKICAgICAgICAgICAgIG1fdmlkZW9UcmFja3MucmVtb3ZlKHBvcyk7CkBA
IC0yMDYsMTIgKzIzNywxMiBAQCB2b2lkIE1lZGlhU3RyZWFtOjpyZW1vdmVUcmFjayhQYXNzUmVm
UHRyCiAgICAgaWYgKHBvcyA9PSBub3RGb3VuZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9k
ZXNjcmlwdG9yLT5yZW1vdmVDb21wb25lbnQodHJhY2stPmNvbXBvbmVudCgpKTsKKyAgICBtX2Rl
c2NyaXB0b3ItPnJlbW92ZVNvdXJjZSh0cmFjay0+c291cmNlKCkpOwogCiAgICAgaWYgKCFtX2F1
ZGlvVHJhY2tzLnNpemUoKSAmJiAhbV92aWRlb1RyYWNrcy5zaXplKCkpCi0gICAgICAgIG1fZGVz
Y3JpcHRvci0+c2V0RW5kZWQoKTsKKyAgICAgICAgc2V0RW5kZWQoKTsKIAotICAgIE1lZGlhU3Ry
ZWFtQ2VudGVyOjppbnN0YW5jZSgpLmRpZFJlbW92ZU1lZGlhU3RyZWFtVHJhY2sobV9kZXNjcmlw
dG9yLmdldCgpLCB0cmFjay0+Y29tcG9uZW50KCkpOworICAgIE1lZGlhU3RyZWFtOjpzaGFyZWRT
dHJlYW1DZW50ZXIoKS5kaWRSZW1vdmVNZWRpYVN0cmVhbVRyYWNrKHRyYWNrLT5zb3VyY2UoKSk7
CiB9CiAKIE1lZGlhU3RyZWFtVHJhY2sqIE1lZGlhU3RyZWFtOjpnZXRUcmFja0J5SWQoU3RyaW5n
IGlkKQpAQCAtMjI5LDcgKzI2MCw3IEBAIE1lZGlhU3RyZWFtVHJhY2sqIE1lZGlhU3RyZWFtOjpn
ZXRUcmFja0IKICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBNZWRpYVN0cmVhbTo6dHJhY2tFbmRl
ZCgpCit2b2lkIE1lZGlhU3RyZWFtOjp0cmFja0RpZEVuZCgpCiB7CiAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBtX2F1ZGlvVHJhY2tzLnNpemUoKTsgKytpKQogICAgICAgICBpZiAoIW1fYXVk
aW9UcmFja3NbaV0tPmVuZGVkKCkpCkBAIC0yMzksMTUgKzI3MCwxNCBAQCB2b2lkIE1lZGlhU3Ry
ZWFtOjp0cmFja0VuZGVkKCkKICAgICAgICAgaWYgKCFtX3ZpZGVvVHJhY2tzW2ldLT5lbmRlZCgp
KQogICAgICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIHN0cmVhbUVuZGVkKCk7CisgICAgc2V0
RW5kZWQoKTsKIH0KIAotdm9pZCBNZWRpYVN0cmVhbTo6c3RyZWFtRW5kZWQoKQordm9pZCBNZWRp
YVN0cmVhbTo6c3RyZWFtRGlkRW5kKCkKIHsKICAgICBpZiAoZW5kZWQoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgbV9kZXNjcmlwdG9yLT5zZXRFbmRlZCgpOwogICAgIHNjaGVkdWxlRGlzcGF0
Y2hFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5lbmRlZEV2ZW50LCBmYWxzZSwgZmFs
c2UpKTsKIH0KIApAQCAtMjU3LDQ2ICsyODcsNDYgQEAgdm9pZCBNZWRpYVN0cmVhbTo6Y29udGV4
dERlc3Ryb3llZCgpCiAgICAgbV9zdG9wcGVkID0gdHJ1ZTsKIH0KIAotdm9pZCBNZWRpYVN0cmVh
bTo6YWRkUmVtb3RlVHJhY2soTWVkaWFTdHJlYW1Db21wb25lbnQqIGNvbXBvbmVudCkKK3ZvaWQg
TWVkaWFTdHJlYW06OmFkZFJlbW90ZVNvdXJjZShNZWRpYVN0cmVhbVNvdXJjZSogc291cmNlKQog
ewotICAgIEFTU0VSVChjb21wb25lbnQgJiYgIWNvbXBvbmVudC0+c3RyZWFtKCkpOworICAgIEFT
U0VSVChzb3VyY2UpOwogICAgIGlmIChlbmRlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBj
b21wb25lbnQtPnNldFN0cmVhbShkZXNjcmlwdG9yKCkpOworICAgIHNvdXJjZS0+c2V0U3RyZWFt
KGRlc2NyaXB0b3IoKSk7CiAKLSAgICBSZWZQdHI8TWVkaWFTdHJlYW1UcmFjaz4gdHJhY2sgPSBN
ZWRpYVN0cmVhbVRyYWNrOjpjcmVhdGUoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBjb21wb25l
bnQpOwotICAgIHN3aXRjaCAoY29tcG9uZW50LT5zb3VyY2UoKS0+dHlwZSgpKSB7Ci0gICAgY2Fz
ZSBNZWRpYVN0cmVhbVNvdXJjZTo6VHlwZUF1ZGlvOgorICAgIFJlZlB0cjxNZWRpYVN0cmVhbVRy
YWNrPiB0cmFjayA9IE1lZGlhU3RyZWFtVHJhY2s6OmNyZWF0ZShzY3JpcHRFeGVjdXRpb25Db250
ZXh0KCksIHNvdXJjZSk7CisgICAgc3dpdGNoIChzb3VyY2UtPnR5cGUoKSkgeworICAgIGNhc2Ug
TWVkaWFTdHJlYW1Tb3VyY2U6OkF1ZGlvOgogICAgICAgICBtX2F1ZGlvVHJhY2tzLmFwcGVuZCh0
cmFjayk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgTWVkaWFTdHJlYW1Tb3VyY2U6OlR5cGVW
aWRlbzoKKyAgICBjYXNlIE1lZGlhU3RyZWFtU291cmNlOjpWaWRlbzoKICAgICAgICAgbV92aWRl
b1RyYWNrcy5hcHBlbmQodHJhY2spOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgbV9kZXNj
cmlwdG9yLT5hZGRDb21wb25lbnQoY29tcG9uZW50KTsKKyAgICBtX2Rlc2NyaXB0b3ItPmFkZFNv
dXJjZShzb3VyY2UpOwogCiAgICAgc2NoZWR1bGVEaXNwYXRjaEV2ZW50KE1lZGlhU3RyZWFtVHJh
Y2tFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5hZGR0cmFja0V2ZW50LCBmYWxzZSwgZmFsc2Us
IHRyYWNrKSk7CiB9CiAKLXZvaWQgTWVkaWFTdHJlYW06OnJlbW92ZVJlbW90ZVRyYWNrKE1lZGlh
U3RyZWFtQ29tcG9uZW50KiBjb21wb25lbnQpCit2b2lkIE1lZGlhU3RyZWFtOjpyZW1vdmVSZW1v
dGVTb3VyY2UoTWVkaWFTdHJlYW1Tb3VyY2UqIHNvdXJjZSkKIHsKICAgICBpZiAoZW5kZWQoKSkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgTWVkaWFTdHJlYW1UcmFja1ZlY3RvciogdHJhY2tzID0g
MDsKLSAgICBzd2l0Y2ggKGNvbXBvbmVudC0+c291cmNlKCktPnR5cGUoKSkgewotICAgIGNhc2Ug
TWVkaWFTdHJlYW1Tb3VyY2U6OlR5cGVBdWRpbzoKKyAgICBzd2l0Y2ggKHNvdXJjZS0+dHlwZSgp
KSB7CisgICAgY2FzZSBNZWRpYVN0cmVhbVNvdXJjZTo6QXVkaW86CiAgICAgICAgIHRyYWNrcyA9
ICZtX2F1ZGlvVHJhY2tzOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIE1lZGlhU3RyZWFtU291
cmNlOjpUeXBlVmlkZW86CisgICAgY2FzZSBNZWRpYVN0cmVhbVNvdXJjZTo6VmlkZW86CiAgICAg
ICAgIHRyYWNrcyA9ICZtX3ZpZGVvVHJhY2tzOwogICAgICAgICBicmVhazsKICAgICB9CiAKICAg
ICBzaXplX3QgaW5kZXggPSBub3RGb3VuZDsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRy
YWNrcy0+c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKCgqdHJhY2tzKVtpXS0+Y29tcG9uZW50
KCkgPT0gY29tcG9uZW50KSB7CisgICAgICAgIGlmICgoKnRyYWNrcylbaV0tPnNvdXJjZSgpID09
IHNvdXJjZSkgewogICAgICAgICAgICAgaW5kZXggPSBpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KQEAgLTMwNCw3ICszMzQsNyBAQCB2b2lkIE1lZGlhU3RyZWFtOjpyZW1vdmVSZW1v
dGVUcmFjayhNZWRpCiAgICAgaWYgKGluZGV4ID09IG5vdEZvdW5kKQogICAgICAgICByZXR1cm47
CiAKLSAgICBtX2Rlc2NyaXB0b3ItPnJlbW92ZUNvbXBvbmVudChjb21wb25lbnQpOworICAgIG1f
ZGVzY3JpcHRvci0+cmVtb3ZlU291cmNlKHNvdXJjZSk7CiAKICAgICBSZWZQdHI8TWVkaWFTdHJl
YW1UcmFjaz4gdHJhY2sgPSAoKnRyYWNrcylbaW5kZXhdOwogICAgIHRyYWNrcy0+cmVtb3ZlKGlu
ZGV4KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJl
YW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01l
ZGlhU3RyZWFtLmgJKHJldmlzaW9uIDE1NjQ1OSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bWVkaWFzdHJlYW0vTWVkaWFTdHJlYW0uaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDcgQEAK
IC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqIENvcHlyaWdodCAoQykgMjAxMSBFcmljc3NvbiBBQi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQxLDYgKzQyLDggQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBNZWRpYVN0cmVhbUNlbnRlcjsKKwogLy8gRklYTUU6
IFRoaXMgY2xhc3Mgc2hvdWxkIGJlIG1hcmtlZCBGSU5BTCBvbmNlIDxodHRwOi8vd2Via2l0Lm9y
Zy9iLzEyMTc0Nz4gaXMgZml4ZWQuCiBjbGFzcyBNZWRpYVN0cmVhbSA6IHB1YmxpYyBSZWZDb3Vu
dGVkPE1lZGlhU3RyZWFtPiwgcHVibGljIFVSTFJlZ2lzdHJhYmxlLCBwdWJsaWMgU2NyaXB0V3Jh
cHBhYmxlLCBwdWJsaWMgTWVkaWFTdHJlYW1EZXNjcmlwdG9yQ2xpZW50LCBwdWJsaWMgRXZlbnRU
YXJnZXRXaXRoSW5saW5lRGF0YSwgcHVibGljIENvbnRleHREZXN0cnVjdGlvbk9ic2VydmVyIHsK
IHB1YmxpYzoKQEAgLTUwLDYgKzUzLDkgQEAgcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRy
PE1lZGlhU3RyZWFtPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8
TWVkaWFTdHJlYW1EZXNjcmlwdG9yPik7CiAgICAgdmlydHVhbCB+TWVkaWFTdHJlYW0oKTsKIAor
ICAgIHN0YXRpYyBNZWRpYVN0cmVhbUNlbnRlciYgc2hhcmVkU3RyZWFtQ2VudGVyKCk7CisgICAg
c3RhdGljIHZvaWQgc2V0U2hhcmVkU3RyZWFtQ2VudGVyKE1lZGlhU3RyZWFtQ2VudGVyKik7CisK
ICAgICBTdHJpbmcgaWQoKSBjb25zdCB7IHJldHVybiBtX2Rlc2NyaXB0b3ItPmlkKCk7IH0KIAog
ICAgIHZvaWQgYWRkVHJhY2soUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVRyYWNrPiwgRXhjZXB0aW9u
Q29kZSYpOwpAQCAtNjAsMTYgKzY2LDEzIEBAIHB1YmxpYzoKICAgICBNZWRpYVN0cmVhbVRyYWNr
VmVjdG9yIGdldFZpZGVvVHJhY2tzKCkgY29uc3QgeyByZXR1cm4gbV92aWRlb1RyYWNrczsgfQog
CiAgICAgYm9vbCBlbmRlZCgpIGNvbnN0OworICAgIHZvaWQgc2V0RW5kZWQoKTsKICAgICB2b2lk
IHN0b3AoKTsKIAogICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIoZW5kZWQpOwog
ICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIoYWRkdHJhY2spOwogICAgIERFRklO
RV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIocmVtb3ZldHJhY2spOwogCi0gICAgLy8gTWVkaWFT
dHJlYW1EZXNjcmlwdG9yQ2xpZW50Ci0gICAgdmlydHVhbCB2b2lkIHRyYWNrRW5kZWQoKSBPVkVS
UklERTsKLSAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtRW5kZWQoKSBPVkVSUklERTsKLQogICAgIE1l
ZGlhU3RyZWFtRGVzY3JpcHRvciogZGVzY3JpcHRvcigpIGNvbnN0IHsgcmV0dXJuIG1fZGVzY3Jp
cHRvci5nZXQoKTsgfQogCiAgICAgLy8gRXZlbnRUYXJnZXQKQEAgLTg5LDI1ICs5MiwyOSBAQCBw
cm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIGNvbnRleHREZXN0cm95ZWQoKTsKIAogcHJpdmF0
ZToKKyAgICAvLyBNZWRpYVN0cmVhbURlc2NyaXB0b3JDbGllbnQKKyAgICB2aXJ0dWFsIHZvaWQg
dHJhY2tEaWRFbmQoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtRGlkRW5kKCkg
T1ZFUlJJREU7CisgICAgCiAgICAgLy8gRXZlbnRUYXJnZXQKICAgICB2aXJ0dWFsIHZvaWQgcmVm
RXZlbnRUYXJnZXQoKSBPVkVSUklERSBGSU5BTCB7IHJlZigpOyB9CiAgICAgdmlydHVhbCB2b2lk
IGRlcmVmRXZlbnRUYXJnZXQoKSBPVkVSUklERSBGSU5BTCB7IGRlcmVmKCk7IH0KIAogICAgIC8v
IE1lZGlhU3RyZWFtRGVzY3JpcHRvckNsaWVudAotICAgIHZpcnR1YWwgdm9pZCBhZGRSZW1vdGVU
cmFjayhNZWRpYVN0cmVhbUNvbXBvbmVudCopIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBy
ZW1vdmVSZW1vdGVUcmFjayhNZWRpYVN0cmVhbUNvbXBvbmVudCopIE9WRVJSSURFOworICAgIHZp
cnR1YWwgdm9pZCBhZGRSZW1vdGVTb3VyY2UoTWVkaWFTdHJlYW1Tb3VyY2UqKSBPVkVSUklERTsK
KyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlUmVtb3RlU291cmNlKE1lZGlhU3RyZWFtU291cmNlKikg
T1ZFUlJJREU7CiAKICAgICB2b2lkIHNjaGVkdWxlRGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2
ZW50Pik7CiAgICAgdm9pZCBzY2hlZHVsZWRFdmVudFRpbWVyRmlyZWQoVGltZXI8TWVkaWFTdHJl
YW0+Kik7CiAKICAgICBib29sIG1fc3RvcHBlZDsKIAorICAgIFJlZlB0cjxNZWRpYVN0cmVhbURl
c2NyaXB0b3I+IG1fZGVzY3JpcHRvcjsKICAgICBNZWRpYVN0cmVhbVRyYWNrVmVjdG9yIG1fYXVk
aW9UcmFja3M7CiAgICAgTWVkaWFTdHJlYW1UcmFja1ZlY3RvciBtX3ZpZGVvVHJhY2tzOwotICAg
IFJlZlB0cjxNZWRpYVN0cmVhbURlc2NyaXB0b3I+IG1fZGVzY3JpcHRvcjsKIAogICAgIFRpbWVy
PE1lZGlhU3RyZWFtPiBtX3NjaGVkdWxlZEV2ZW50VGltZXI7Ci0gICAgVmVjdG9yPFJlZlB0cjxF
dmVudD4gPiBtX3NjaGVkdWxlZEV2ZW50czsKKyAgICBWZWN0b3I8UmVmUHRyPEV2ZW50Pj4gbV9z
Y2hlZHVsZWRFdmVudHM7CiB9OwogCiB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8TWVkaWFTdHJlYW0+
ID4gTWVkaWFTdHJlYW1WZWN0b3I7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlh
c3RyZWFtL01lZGlhU3RyZWFtVHJhY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1UcmFjay5jcHAJKHJldmlzaW9uIDE1NjQ1
OSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1UcmFj
ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChD
KSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMTEgRXJpY3Nzb24gQUIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0yOCw0NSArMjksNjQgQEAKIAogI2lmIEVOQUJMRShNRURJQV9TVFJF
QU0pCiAKKyNpbmNsdWRlICJEaWN0aW9uYXJ5LmgiCiAjaW5jbHVkZSAiRXZlbnQuaCIKICNpbmNs
dWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiTWVkaWFTdHJlYW0uaCIKICNpbmNsdWRl
ICJNZWRpYVN0cmVhbUNlbnRlci5oIgotI2luY2x1ZGUgIk1lZGlhU3RyZWFtQ29tcG9uZW50Lmgi
CisjaW5jbHVkZSAiTWVkaWFTdHJlYW1EZXNjcmlwdG9yLmgiCiAjaW5jbHVkZSAiTWVkaWFTdHJl
YW1UcmFja1NvdXJjZXNDYWxsYmFjay5oIgogI2luY2x1ZGUgIk1lZGlhU3RyZWFtVHJhY2tTb3Vy
Y2VzUmVxdWVzdC5oIgorI2luY2x1ZGUgIlVVSUQuaCIKICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0
cm95ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1QYXNzUmVmUHRyPE1lZGlhU3RyZWFt
VHJhY2s+IE1lZGlhU3RyZWFtVHJhY2s6OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBj
b250ZXh0LCBNZWRpYVN0cmVhbUNvbXBvbmVudCogY29tcG9uZW50KQorUGFzc1JlZlB0cjxNZWRp
YVN0cmVhbVRyYWNrPiBNZWRpYVN0cmVhbVRyYWNrOjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogY29udGV4dCwgY29uc3QgRGljdGlvbmFyeSYgdmlkZW9Db25zdHJhaW50cykKIHsKLSAg
ICBSZWZQdHI8TWVkaWFTdHJlYW1UcmFjaz4gdHJhY2sgPSBhZG9wdFJlZihuZXcgTWVkaWFTdHJl
YW1UcmFjayhjb250ZXh0LCBjb21wb25lbnQpKTsKLSAgICB0cmFjay0+c3VzcGVuZElmTmVlZGVk
KCk7CisgICAgUmVmUHRyPE1lZGlhU3RyZWFtVHJhY2s+IHRyYWNrID0gYWRvcHRSZWYobmV3IE1l
ZGlhU3RyZWFtVHJhY2soY29udGV4dCwgMCwgJnZpZGVvQ29uc3RyYWludHMpKTsKICAgICByZXR1
cm4gdHJhY2sucmVsZWFzZSgpOwogfQogCi1NZWRpYVN0cmVhbVRyYWNrOjpNZWRpYVN0cmVhbVRy
YWNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIE1lZGlhU3RyZWFtQ29tcG9uZW50
KiBjb21wb25lbnQpCitQYXNzUmVmUHRyPE1lZGlhU3RyZWFtVHJhY2s+IE1lZGlhU3RyZWFtVHJh
Y2s6OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBNZWRpYVN0cmVhbVNv
dXJjZSogc291cmNlKQoreworICAgIFJlZlB0cjxNZWRpYVN0cmVhbVRyYWNrPiB0cmFjayA9IGFk
b3B0UmVmKG5ldyBNZWRpYVN0cmVhbVRyYWNrKGNvbnRleHQsIHNvdXJjZSwgMCkpOworICAgIHJl
dHVybiB0cmFjay5yZWxlYXNlKCk7Cit9CisKK01lZGlhU3RyZWFtVHJhY2s6Ok1lZGlhU3RyZWFt
VHJhY2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgTWVkaWFTdHJlYW1Tb3VyY2Uq
IHNvdXJjZSwgY29uc3QgRGljdGlvbmFyeSopCiAgICAgOiBBY3RpdmVET01PYmplY3QoY29udGV4
dCkKLSAgICAsIG1fY29tcG9uZW50KGNvbXBvbmVudCkKKyAgICAsIG1fc291cmNlKHNvdXJjZSkK
KyAgICAsIG1fcmVhZHlTdGF0ZShNZWRpYVN0cmVhbVNvdXJjZTo6TmV3KQogICAgICwgbV9zdG9w
cGVkKGZhbHNlKQorICAgICwgbV9lbmFibGVkKHRydWUpCisgICAgLCBtX211dGVkKGZhbHNlKQog
ewotICAgIG1fY29tcG9uZW50LT5zb3VyY2UoKS0+YWRkT2JzZXJ2ZXIodGhpcyk7CisgICAgc3Vz
cGVuZElmTmVlZGVkKCk7CisgICAgaWYgKG1fc291cmNlKSB7CisgICAgICAgIG1fc291cmNlLT5h
ZGRPYnNlcnZlcih0aGlzKTsKKyAgICAgICAgbV9tdXRlZCA9IG1fc291cmNlLT5tdXRlZCgpOwor
ICAgIH0KIH0KIAogTWVkaWFTdHJlYW1UcmFjazo6fk1lZGlhU3RyZWFtVHJhY2soKQogewotICAg
IG1fY29tcG9uZW50LT5zb3VyY2UoKS0+cmVtb3ZlT2JzZXJ2ZXIodGhpcyk7CisgICAgaWYgKG1f
c291cmNlKQorICAgICAgICBtX3NvdXJjZS0+cmVtb3ZlT2JzZXJ2ZXIodGhpcyk7CiB9CiAKLUF0
b21pY1N0cmluZyBNZWRpYVN0cmVhbVRyYWNrOjpraW5kKCkgY29uc3QKK2NvbnN0IEF0b21pY1N0
cmluZyYgTWVkaWFTdHJlYW1UcmFjazo6a2luZCgpIGNvbnN0CiB7CisgICAgaWYgKCFtX3NvdXJj
ZSkKKyAgICAgICAgcmV0dXJuIGVtcHR5QXRvbTsKKwogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxBdG9taWNTdHJpbmc+IGF1ZGlvS2luZCgiYXVkaW8iLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVj
dEZyb21MaXRlcmFsKTsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiB2
aWRlb0tpbmQoInZpZGVvIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CiAK
LSAgICBzd2l0Y2ggKG1fY29tcG9uZW50LT5zb3VyY2UoKS0+dHlwZSgpKSB7Ci0gICAgY2FzZSBN
ZWRpYVN0cmVhbVNvdXJjZTo6VHlwZUF1ZGlvOgorICAgIHN3aXRjaCAobV9zb3VyY2UtPnR5cGUo
KSkgeworICAgIGNhc2UgTWVkaWFTdHJlYW1Tb3VyY2U6OkF1ZGlvOgogICAgICAgICByZXR1cm4g
YXVkaW9LaW5kOwotICAgIGNhc2UgTWVkaWFTdHJlYW1Tb3VyY2U6OlR5cGVWaWRlbzoKKyAgICBj
YXNlIE1lZGlhU3RyZWFtU291cmNlOjpWaWRlbzoKICAgICAgICAgcmV0dXJuIHZpZGVvS2luZDsK
ICAgICB9CiAKQEAgLTc0LDQ5ICs5NCw4MSBAQCBBdG9taWNTdHJpbmcgTWVkaWFTdHJlYW1UcmFj
azo6a2luZCgpIGNvCiAgICAgcmV0dXJuIGVtcHR5QXRvbTsKIH0KIAotU3RyaW5nIE1lZGlhU3Ry
ZWFtVHJhY2s6OmlkKCkgY29uc3QKK3ZvaWQgTWVkaWFTdHJlYW1UcmFjazo6c2V0U291cmNlKE1l
ZGlhU3RyZWFtU291cmNlKiBzb3VyY2UpCiB7Ci0gICAgcmV0dXJuIG1fY29tcG9uZW50LT5pZCgp
OworICAgIEFTU0VSVChzb3VyY2UgPT0gbV9zb3VyY2UgfHwgIW1fc291cmNlKTsKKyAgICBtX3Nv
dXJjZSA9IHNvdXJjZTsKIH0KIAotU3RyaW5nIE1lZGlhU3RyZWFtVHJhY2s6OmxhYmVsKCkgY29u
c3QKK2NvbnN0IFN0cmluZyYgTWVkaWFTdHJlYW1UcmFjazo6aWQoKSBjb25zdAogewotICAgIHJl
dHVybiBtX2NvbXBvbmVudC0+c291cmNlKCktPm5hbWUoKTsKKyAgICBpZiAoIW1faWQuaXNFbXB0
eSgpKQorICAgICAgICByZXR1cm4gbV9pZDsKKworICAgIGlmICghbV9zb3VyY2UpCisgICAgICAg
IHJldHVybiBlbXB0eVN0cmluZygpOworCisgICAgY29uc3QgU3RyaW5nJiBpZCA9IG1fc291cmNl
LT5pZCgpOworICAgIGlmICghaWQuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gaWQ7CisKKyAg
ICAvLyBUaGUgc3BlYyBzYXlzOgorICAgIC8vICAgVW5sZXNzIGEgTWVkaWFTdHJlYW1UcmFjayBv
YmplY3QgaXMgY3JlYXRlZCBhcyBhIHBhcnQgYSBvZiBzcGVjaWFsIHB1cnBvc2UgYWxnb3JpdGht
IHRoYXQKKyAgICAvLyAgIHNwZWNpZmllcyBob3cgdGhlIHRyYWNrIGlkIG11c3QgYmUgaW5pdGlh
bGl6ZWQsIHRoZSB1c2VyIGFnZW50IG11c3QgZ2VuZXJhdGUgYSBnbG9iYWxseQorICAgIC8vICAg
dW5pcXVlIGlkZW50aWZpZXIgc3RyaW5nIGFuZCBpbml0aWFsaXplIHRoZSBvYmplY3QncyBpZCBh
dHRyaWJ1dGUgdG8gdGhhdCBzdHJpbmcuCisgICAgLy8gc28gZ2VuZXJhdGUgYSBVVUlEIGlmIHRo
ZSBzb3VyY2UgZG9lc24ndCBoYXZlIGFuIElELgorICAgIG1faWQgPSBjcmVhdGVDYW5vbmljYWxV
VUlEU3RyaW5nKCk7CisgICAgcmV0dXJuIG1faWQ7Cit9CisKK2NvbnN0IFN0cmluZyYgTWVkaWFT
dHJlYW1UcmFjazo6bGFiZWwoKSBjb25zdAoreworICAgIGlmIChtX3NvdXJjZSkKKyAgICAgICAg
cmV0dXJuIG1fc291cmNlLT5uYW1lKCk7CisgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiB9CiAK
IGJvb2wgTWVkaWFTdHJlYW1UcmFjazo6ZW5hYmxlZCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1f
Y29tcG9uZW50LT5lbmFibGVkKCk7CisgICAgcmV0dXJuIG1fZW5hYmxlZDsKIH0KIAogdm9pZCBN
ZWRpYVN0cmVhbVRyYWNrOjpzZXRFbmFibGVkKGJvb2wgZW5hYmxlZCkKIHsKLSAgICBpZiAobV9z
dG9wcGVkIHx8IGVuYWJsZWQgPT0gbV9jb21wb25lbnQtPmVuYWJsZWQoKSkKKyAgICBpZiAobV9z
dG9wcGVkKQogICAgICAgICByZXR1cm47CisgICAgCisgICAgbV9lbmFibGVkID0gZW5hYmxlZDsK
IAotICAgIG1fY29tcG9uZW50LT5zZXRFbmFibGVkKGVuYWJsZWQpOworICAgIGlmICghbV9zb3Vy
Y2UgfHwgZW5hYmxlZCA9PSBtX3NvdXJjZS0+ZW5hYmxlZCgpKQorICAgICAgICByZXR1cm47CiAK
LSAgICBpZiAobV9jb21wb25lbnQtPnN0cmVhbSgpLT5lbmRlZCgpKQorICAgIG1fc291cmNlLT5z
ZXRFbmFibGVkKGVuYWJsZWQpOworCisgICAgaWYgKG1fc291cmNlLT5zdHJlYW0oKS0+ZW5kZWQo
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgTWVkaWFTdHJlYW1DZW50ZXI6Omluc3RhbmNlKCku
ZGlkU2V0TWVkaWFTdHJlYW1UcmFja0VuYWJsZWQobV9jb21wb25lbnQtPnN0cmVhbSgpLCBtX2Nv
bXBvbmVudC5nZXQoKSk7CisgICAgTWVkaWFTdHJlYW06OnNoYXJlZFN0cmVhbUNlbnRlcigpLmRp
ZFNldE1lZGlhU3RyZWFtVHJhY2tFbmFibGVkKG1fc291cmNlLmdldCgpKTsKIH0KIAotQXRvbWlj
U3RyaW5nIE1lZGlhU3RyZWFtVHJhY2s6OnJlYWR5U3RhdGUoKSBjb25zdAorY29uc3QgQXRvbWlj
U3RyaW5nJiBNZWRpYVN0cmVhbVRyYWNrOjpyZWFkeVN0YXRlKCkgY29uc3QKIHsKICAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBlbmRlZCgiZW5kZWQiLCBBdG9taWNTdHJp
bmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRv
bWljU3RyaW5nPiBsaXZlKCJsaXZlIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJh
bCk7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gbXV0ZWQoIm11dGVk
IiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPEF0b21pY1N0cmluZz4gbmV3U3RhdGUoIm5ldyIsIEF0b21pY1N0cmluZzo6Q29u
c3RydWN0RnJvbUxpdGVyYWwpOworCisgICAgaWYgKCFtX3NvdXJjZSkKKyAgICAgICAgcmV0dXJu
IG5ld1N0YXRlOwogCiAgICAgaWYgKG1fc3RvcHBlZCkKICAgICAgICAgcmV0dXJuIGVuZGVkOwog
Ci0gICAgc3dpdGNoIChtX2NvbXBvbmVudC0+c291cmNlKCktPnJlYWR5U3RhdGUoKSkgewotICAg
IGNhc2UgTWVkaWFTdHJlYW1Tb3VyY2U6OlJlYWR5U3RhdGVMaXZlOgorICAgIHN3aXRjaCAobV9z
b3VyY2UtPnJlYWR5U3RhdGUoKSkgeworICAgIGNhc2UgTWVkaWFTdHJlYW1Tb3VyY2U6OkxpdmU6
CiAgICAgICAgIHJldHVybiBsaXZlOwotICAgIGNhc2UgTWVkaWFTdHJlYW1Tb3VyY2U6OlJlYWR5
U3RhdGVNdXRlZDoKLSAgICAgICAgcmV0dXJuIG11dGVkOwotICAgIGNhc2UgTWVkaWFTdHJlYW1T
b3VyY2U6OlJlYWR5U3RhdGVFbmRlZDoKKyAgICBjYXNlIE1lZGlhU3RyZWFtU291cmNlOjpOZXc6
CisgICAgICAgIHJldHVybiBuZXdTdGF0ZTsKKyAgICBjYXNlIE1lZGlhU3RyZWFtU291cmNlOjpF
bmRlZDoKICAgICAgICAgcmV0dXJuIGVuZGVkOwogICAgIH0KIApAQCAtMTI3LDEzICsxNzksMTMg
QEAgQXRvbWljU3RyaW5nIE1lZGlhU3RyZWFtVHJhY2s6OnJlYWR5U3RhdAogdm9pZCBNZWRpYVN0
cmVhbVRyYWNrOjpnZXRTb3VyY2VzKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBh
c3NSZWZQdHI8TWVkaWFTdHJlYW1UcmFja1NvdXJjZXNDYWxsYmFjaz4gY2FsbGJhY2ssIEV4Y2Vw
dGlvbkNvZGUmIGVjKQogewogICAgIFJlZlB0cjxNZWRpYVN0cmVhbVRyYWNrU291cmNlc1JlcXVl
c3Q+IHJlcXVlc3QgPSBNZWRpYVN0cmVhbVRyYWNrU291cmNlc1JlcXVlc3Q6OmNyZWF0ZShjb250
ZXh0LCBjYWxsYmFjayk7Ci0gICAgaWYgKCFNZWRpYVN0cmVhbUNlbnRlcjo6aW5zdGFuY2UoKS5n
ZXRNZWRpYVN0cmVhbVRyYWNrU291cmNlcyhyZXF1ZXN0LnJlbGVhc2UoKSkpCisgICAgaWYgKCFN
ZWRpYVN0cmVhbTo6c2hhcmVkU3RyZWFtQ2VudGVyKCkuZ2V0TWVkaWFTdHJlYW1UcmFja1NvdXJj
ZXMocmVxdWVzdC5yZWxlYXNlKCkpKQogICAgICAgICBlYyA9IE5PVF9TVVBQT1JURURfRVJSOwog
fQogCiBib29sIE1lZGlhU3RyZWFtVHJhY2s6OmVuZGVkKCkgY29uc3QKIHsKLSAgICByZXR1cm4g
bV9zdG9wcGVkIHx8IChtX2NvbXBvbmVudC0+c291cmNlKCktPnJlYWR5U3RhdGUoKSA9PSBNZWRp
YVN0cmVhbVNvdXJjZTo6UmVhZHlTdGF0ZUVuZGVkKTsKKyAgICByZXR1cm4gbV9zdG9wcGVkIHx8
IChtX3NvdXJjZSAmJiBtX3NvdXJjZS0+cmVhZHlTdGF0ZSgpID09IE1lZGlhU3RyZWFtU291cmNl
OjpFbmRlZCk7CiB9CiAKIHZvaWQgTWVkaWFTdHJlYW1UcmFjazo6c291cmNlQ2hhbmdlZFN0YXRl
KCkKQEAgLTE0MSwzMiArMTkzLDMyIEBAIHZvaWQgTWVkaWFTdHJlYW1UcmFjazo6c291cmNlQ2hh
bmdlZFN0YXQKICAgICBpZiAobV9zdG9wcGVkKQogICAgICAgICByZXR1cm47CiAKLSAgICBzd2l0
Y2ggKG1fY29tcG9uZW50LT5zb3VyY2UoKS0+cmVhZHlTdGF0ZSgpKSB7Ci0gICAgY2FzZSBNZWRp
YVN0cmVhbVNvdXJjZTo6UmVhZHlTdGF0ZUxpdmU6Ci0gICAgICAgIGRpc3BhdGNoRXZlbnQoRXZl
bnQ6OmNyZWF0ZShldmVudE5hbWVzKCkudW5tdXRlRXZlbnQsIGZhbHNlLCBmYWxzZSkpOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIE1lZGlhU3RyZWFtU291cmNlOjpSZWFkeVN0YXRlTXV0ZWQ6
Ci0gICAgICAgIGRpc3BhdGNoRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkubXV0ZUV2
ZW50LCBmYWxzZSwgZmFsc2UpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBNZWRpYVN0cmVh
bVNvdXJjZTo6UmVhZHlTdGF0ZUVuZGVkOgorICAgIE1lZGlhU3RyZWFtU291cmNlOjpSZWFkeVN0
YXRlIG9sZFJlYWR5U3RhdGUgPSBtX3JlYWR5U3RhdGU7CisgICAgbV9yZWFkeVN0YXRlID0gbV9z
b3VyY2UtPnJlYWR5U3RhdGUoKTsKKworICAgIGlmIChtX3JlYWR5U3RhdGUgPj0gTWVkaWFTdHJl
YW1Tb3VyY2U6OkxpdmUgJiYgb2xkUmVhZHlTdGF0ZSA9PSBNZWRpYVN0cmVhbVNvdXJjZTo6TmV3
KQorICAgICAgICBkaXNwYXRjaEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnN0YXJ0
ZWRFdmVudCwgZmFsc2UsIGZhbHNlKSk7CisgICAgaWYgKG1fcmVhZHlTdGF0ZSA9PSBNZWRpYVN0
cmVhbVNvdXJjZTo6RW5kZWQgJiYgb2xkUmVhZHlTdGF0ZSAhPSBNZWRpYVN0cmVhbVNvdXJjZTo6
RW5kZWQpCiAgICAgICAgIGRpc3BhdGNoRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCku
ZW5kZWRFdmVudCwgZmFsc2UsIGZhbHNlKSk7Ci0gICAgICAgIGRpZEVuZFRyYWNrKCk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KKworICAgIGlmIChtX211dGVkID09IG1fc291cmNlLT5tdXRlZCgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBtX211dGVkID0gbV9zb3VyY2UtPm11dGVkKCk7Cisg
ICAgaWYgKG1fbXV0ZWQpCisgICAgICAgIGRpc3BhdGNoRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVu
dE5hbWVzKCkubXV0ZUV2ZW50LCBmYWxzZSwgZmFsc2UpKTsKKyAgICBlbHNlCisgICAgICAgIGRp
c3BhdGNoRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkudW5tdXRlRXZlbnQsIGZhbHNl
LCBmYWxzZSkpOwogfQogCi12b2lkIE1lZGlhU3RyZWFtVHJhY2s6OmRpZEVuZFRyYWNrKCkKK3Zv
aWQgTWVkaWFTdHJlYW1UcmFjazo6dHJhY2tFbmRlZCgpCiB7Ci0gICAgTWVkaWFTdHJlYW1EZXNj
cmlwdG9yQ2xpZW50KiBjbGllbnQgPSBtX2NvbXBvbmVudC0+c3RyZWFtKCktPmNsaWVudCgpOwor
ICAgIC8vIEZJWE1FOiB0aGlzIGlzIHdyb25nLCB0aGUgdHJhY2sgc2hvdWxkbid0IGhhdmUgdG8g
Y2FsbCB0aGUgZGVzY3JpcHRvcidzIGNsaWVudCEKKyAgICBNZWRpYVN0cmVhbURlc2NyaXB0b3JD
bGllbnQqIGNsaWVudCA9IG1fc291cmNlID8gbV9zb3VyY2UtPnN0cmVhbSgpLT5jbGllbnQoKSA6
IDA7CiAgICAgaWYgKCFjbGllbnQpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBjbGllbnQt
PnRyYWNrRW5kZWQoKTsKLX0KLQotTWVkaWFTdHJlYW1Db21wb25lbnQqIE1lZGlhU3RyZWFtVHJh
Y2s6OmNvbXBvbmVudCgpCi17Ci0gICAgcmV0dXJuIG1fY29tcG9uZW50LmdldCgpOworICAgIGNs
aWVudC0+dHJhY2tEaWRFbmQoKTsKIH0KIAogdm9pZCBNZWRpYVN0cmVhbVRyYWNrOjpzdG9wKCkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1UcmFj
ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVk
aWFTdHJlYW1UcmFjay5oCShyZXZpc2lvbiAxNTY0NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtVHJhY2suaAkod29ya2luZyBjb3B5KQpAQCAtMSw2
ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMSBFcmljc3NvbiBBQi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDcgKzMxLDYg
QEAKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgogI2luY2x1ZGUgIkV2ZW50VGFyZ2V0
LmgiCi0jaW5jbHVkZSAiTWVkaWFTdHJlYW1EZXNjcmlwdG9yLmgiCiAjaW5jbHVkZSAiTWVkaWFT
dHJlYW1Tb3VyY2UuaCIKICNpbmNsdWRlICJTY3JpcHRXcmFwcGFibGUuaCIKICNpbmNsdWRlIDx3
dGYvUmVmQ291bnRlZC5oPgpAQCAtNDAsMzMgKzQwLDM3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotY2xhc3MgTWVkaWFTdHJlYW1Db21wb25lbnQ7CitjbGFzcyBEaWN0aW9uYXJ5OworY2xh
c3MgTWVkaWFDb25zdHJhaW50czsKIGNsYXNzIE1lZGlhU3RyZWFtVHJhY2tTb3VyY2VzQ2FsbGJh
Y2s7CiAKIC8vIEZJWE1FOiBUaGlzIGNsYXNzIHNob3VsZCBiZSBtYXJrZWQgRklOQUwgb25jZSA8
aHR0cDovL3dlYmtpdC5vcmcvYi8xMjE3NDc+IGlzIGZpeGVkLgogY2xhc3MgTWVkaWFTdHJlYW1U
cmFjayA6IHB1YmxpYyBSZWZDb3VudGVkPE1lZGlhU3RyZWFtVHJhY2s+LCBwdWJsaWMgU2NyaXB0
V3JhcHBhYmxlLCBwdWJsaWMgQWN0aXZlRE9NT2JqZWN0LCBwdWJsaWMgRXZlbnRUYXJnZXRXaXRo
SW5saW5lRGF0YSwgcHVibGljIE1lZGlhU3RyZWFtU291cmNlOjpPYnNlcnZlciB7CiBwdWJsaWM6
Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1UcmFjaz4gY3JlYXRlKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBNZWRpYVN0cmVhbUNvbXBvbmVudCopOworCisgICAgc3RhdGljIFBh
c3NSZWZQdHI8TWVkaWFTdHJlYW1UcmFjaz4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBjb25zdCBEaWN0aW9uYXJ5Jik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1U
cmFjaz4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBNZWRpYVN0cmVhbVNvdXJjZSop
OworCiAgICAgdmlydHVhbCB+TWVkaWFTdHJlYW1UcmFjaygpOwogCi0gICAgQXRvbWljU3RyaW5n
IGtpbmQoKSBjb25zdDsKLSAgICBTdHJpbmcgaWQoKSBjb25zdDsKLSAgICBTdHJpbmcgbGFiZWwo
KSBjb25zdDsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGtpbmQoKSBjb25zdDsKKyAgICBjb25z
dCBTdHJpbmcmIGlkKCkgY29uc3Q7CisgICAgY29uc3QgU3RyaW5nJiBsYWJlbCgpIGNvbnN0Owog
CiAgICAgYm9vbCBlbmFibGVkKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRFbmFibGVkKGJvb2wpOwot
Ci0gICAgdm9pZCBkaWRFbmRUcmFjaygpOwogICAgIAotICAgIEF0b21pY1N0cmluZyByZWFkeVN0
YXRlKCkgY29uc3Q7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiByZWFkeVN0YXRlKCkgY29uc3Q7
CiAKICAgICBzdGF0aWMgdm9pZCBnZXRTb3VyY2VzKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQ
YXNzUmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tTb3VyY2VzQ2FsbGJhY2s+LCBFeGNlcHRpb25Db2Rl
Jik7CiAKKyAgICBNZWRpYVN0cmVhbVNvdXJjZSogc291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9z
b3VyY2UuZ2V0KCk7IH0KKyAgICB2b2lkIHNldFNvdXJjZShNZWRpYVN0cmVhbVNvdXJjZSopOwor
CiAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihtdXRlKTsKICAgICBERUZJTkVf
QVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKHVubXV0ZSk7CiAgICAgREVGSU5FX0FUVFJJQlVURV9F
VkVOVF9MSVNURU5FUihlbmRlZCk7CiAKLSAgICBNZWRpYVN0cmVhbUNvbXBvbmVudCogY29tcG9u
ZW50KCk7CiAgICAgYm9vbCBlbmRlZCgpIGNvbnN0OwogCiAgICAgLy8gRXZlbnRUYXJnZXQKQEAg
LTgwLDcgKzg0LDkgQEAgcHVibGljOgogICAgIHVzaW5nIFJlZkNvdW50ZWQ8TWVkaWFTdHJlYW1U
cmFjaz46OmRlcmVmOwogCiBwcml2YXRlOgotICAgIE1lZGlhU3RyZWFtVHJhY2soU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCosIE1lZGlhU3RyZWFtQ29tcG9uZW50Kik7CisgICAgTWVkaWFTdHJlYW1U
cmFjayhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgTWVkaWFTdHJlYW1Tb3VyY2UqLCBjb25zdCBE
aWN0aW9uYXJ5Kik7CisKKyAgICB2b2lkIHRyYWNrRW5kZWQoKTsKIAogICAgIC8vIEV2ZW50VGFy
Z2V0CiAgICAgdmlydHVhbCB2b2lkIHJlZkV2ZW50VGFyZ2V0KCkgT1ZFUlJJREUgRklOQUwgeyBy
ZWYoKTsgfQpAQCAtODksOCArOTUsMTQgQEAgcHJpdmF0ZToKICAgICAvLyBNZWRpYVN0cmVhbVNv
dXJjZU9ic2VydmVyCiAgICAgdmlydHVhbCB2b2lkIHNvdXJjZUNoYW5nZWRTdGF0ZSgpIE9WRVJS
SURFOwogCi0gICAgUmVmUHRyPE1lZGlhU3RyZWFtQ29tcG9uZW50PiBtX2NvbXBvbmVudDsKKyAg
ICBSZWZQdHI8TWVkaWFTdHJlYW1Tb3VyY2U+IG1fc291cmNlOworICAgIFJlZlB0cjxNZWRpYUNv
bnN0cmFpbnRzPiBtX2NvbnN0cmFpbnRzOworICAgIE1lZGlhU3RyZWFtU291cmNlOjpSZWFkeVN0
YXRlIG1fcmVhZHlTdGF0ZTsKKyAgICBtdXRhYmxlIFN0cmluZyBtX2lkOworCiAgICAgYm9vbCBt
X3N0b3BwZWQ7CisgICAgYm9vbCBtX2VuYWJsZWQ7CisgICAgYm9vbCBtX211dGVkOwogfTsKIAog
dHlwZWRlZiBWZWN0b3I8UmVmUHRyPE1lZGlhU3RyZWFtVHJhY2s+ID4gTWVkaWFTdHJlYW1UcmFj
a1ZlY3RvcjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDRFRN
RlNlbmRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0
cmVhbS9SVENEVE1GU2VuZGVyLmNwcAkocmV2aXNpb24gMTU2NDU5KQorKysgU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENEVE1GU2VuZGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDcsNyArNDcsNyBAQCBzdGF0aWMgY29uc3QgbG9uZyBkZWZhdWx0SW50ZXJUb25lR2FwTXMg
CiBQYXNzUmVmUHRyPFJUQ0RUTUZTZW5kZXI+IFJUQ0RUTUZTZW5kZXI6OmNyZWF0ZShTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBSVENQZWVyQ29ubmVjdGlvbkhhbmRsZXIqIHBlZXJD
b25uZWN0aW9uSGFuZGxlciwgUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVRyYWNrPiBwcnBUcmFjaywg
RXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgUmVmUHRyPE1lZGlhU3RyZWFtVHJhY2s+IHRyYWNr
ID0gcHJwVHJhY2s7Ci0gICAgT3duUHRyPFJUQ0RUTUZTZW5kZXJIYW5kbGVyPiBoYW5kbGVyID0g
cGVlckNvbm5lY3Rpb25IYW5kbGVyLT5jcmVhdGVEVE1GU2VuZGVyKHRyYWNrLT5jb21wb25lbnQo
KSk7CisgICAgT3duUHRyPFJUQ0RUTUZTZW5kZXJIYW5kbGVyPiBoYW5kbGVyID0gcGVlckNvbm5l
Y3Rpb25IYW5kbGVyLT5jcmVhdGVEVE1GU2VuZGVyKHRyYWNrLT5zb3VyY2UoKSk7CiAgICAgaWYg
KCFoYW5kbGVyKSB7CiAgICAgICAgIGVjID0gTk9UX1NVUFBPUlRFRF9FUlI7CiAgICAgICAgIHJl
dHVybiAwOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENQZWVy
Q29ubmVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi5jcHAJKHJldmlzaW9uIDE1NjQ1OSkKKysrIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01NTksOCArNTU5LDkgQEAgdm9pZCBSVENQZWVyQ29ubmVjdGlvbjo6ZGlk
UmVtb3ZlUmVtb3RlUwogICAgIEFTU0VSVChzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmlzQ29u
dGV4dFRocmVhZCgpKTsKICAgICBBU1NFUlQoc3RyZWFtRGVzY3JpcHRvci0+Y2xpZW50KCkpOwog
CisgICAgLy8gRklYTUU6IHRoaXMgY2xhc3Mgc2hvdWxkbid0IGtub3cgdGhhdCB0aGUgZGVzY3Jp
cHRvciBjbGllbnQgaXMgYSBNZWRpYVN0cmVhbSEKICAgICBSZWZQdHI8TWVkaWFTdHJlYW0+IHN0
cmVhbSA9IHN0YXRpY19jYXN0PE1lZGlhU3RyZWFtKj4oc3RyZWFtRGVzY3JpcHRvci0+Y2xpZW50
KCkpOwotICAgIHN0cmVhbS0+c3RyZWFtRW5kZWQoKTsKKyAgICBzdHJlYW0tPnNldEVuZGVkKCk7
CiAKICAgICBpZiAobV9zaWduYWxpbmdTdGF0ZSA9PSBTaWduYWxpbmdTdGF0ZUNsb3NlZCkKICAg
ICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9S
VENTdGF0c1JlcXVlc3RJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc3RyZWFtL1JUQ1N0YXRzUmVxdWVzdEltcGwuY3BwCShyZXZpc2lvbiAxNTY0NTkp
CisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1N0YXRzUmVxdWVzdElt
cGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw4IEBACiAKICNpbmNsdWRlICJSVENT
dGF0c1JlcXVlc3RJbXBsLmgiCiAKKyNpbmNsdWRlICJNZWRpYVN0cmVhbURlc2NyaXB0b3IuaCIK
KyNpbmNsdWRlICJNZWRpYVN0cmVhbVRyYWNrLmgiCiAjaW5jbHVkZSAiUlRDU3RhdHNDYWxsYmFj
ay5oIgogI2luY2x1ZGUgIlJUQ1N0YXRzUmVxdWVzdC5oIgogI2luY2x1ZGUgIlJUQ1N0YXRzUmVz
cG9uc2UuaCIKQEAgLTQ0LDggKzQ2LDcgQEAgUGFzc1JlZlB0cjxSVENTdGF0c1JlcXVlc3RJbXBs
PiBSVENTdGF0cwogUlRDU3RhdHNSZXF1ZXN0SW1wbDo6UlRDU3RhdHNSZXF1ZXN0SW1wbChTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPFJUQ1N0YXRzQ2FsbGJhY2s+
IGNhbGxiYWNrLCBQYXNzUmVmUHRyPE1lZGlhU3RyZWFtVHJhY2s+IHNlbGVjdG9yKQogICAgIDog
QWN0aXZlRE9NT2JqZWN0KGNvbnRleHQpCiAgICAgLCBtX3N1Y2Nlc3NDYWxsYmFjayhjYWxsYmFj
aykKLSAgICAsIG1fc3RyZWFtKHNlbGVjdG9yID8gc2VsZWN0b3ItPmNvbXBvbmVudCgpLT5zdHJl
YW0oKSA6IDApCi0gICAgLCBtX2NvbXBvbmVudChzZWxlY3RvciA/IHNlbGVjdG9yLT5jb21wb25l
bnQoKSA6IDApCisgICAgLCBtX3N0cmVhbShzZWxlY3RvciA/IHNlbGVjdG9yLT5zb3VyY2UoKS0+
c3RyZWFtKCkgOiAwKQogewogfQogCkBAIC02OCwxMSArNjksNiBAQCBNZWRpYVN0cmVhbURlc2Ny
aXB0b3IqIFJUQ1N0YXRzUmVxdWVzdEltCiAgICAgcmV0dXJuIG1fc3RyZWFtLmdldCgpOwogfQog
Ci1NZWRpYVN0cmVhbUNvbXBvbmVudCogUlRDU3RhdHNSZXF1ZXN0SW1wbDo6Y29tcG9uZW50KCkK
LXsKLSAgICByZXR1cm4gbV9jb21wb25lbnQuZ2V0KCk7Ci19Ci0KIHZvaWQgUlRDU3RhdHNSZXF1
ZXN0SW1wbDo6cmVxdWVzdFN1Y2NlZWRlZChQYXNzUmVmUHRyPFJUQ1N0YXRzUmVzcG9uc2VCYXNl
PiByZXNwb25zZSkKIHsKICAgICBpZiAoIW1fc3VjY2Vzc0NhbGxiYWNrKQpJbmRleDogU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENTdGF0c1JlcXVlc3RJbXBsLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENTdGF0c1JlcXVl
c3RJbXBsLmgJKHJldmlzaW9uIDE1NjQ1OSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVk
aWFzdHJlYW0vUlRDU3RhdHNSZXF1ZXN0SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0
Niw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8UlRDU3RhdHNSZXNwb25zZUJh
c2U+IGNyZWF0ZVJlc3BvbnNlKCkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBib29sIGhhc1NlbGVj
dG9yKCkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBNZWRpYVN0cmVhbURlc2NyaXB0b3IqIHN0cmVh
bSgpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgTWVkaWFTdHJlYW1Db21wb25lbnQqIGNvbXBvbmVu
dCgpIE9WRVJSSURFOwogCiAgICAgdmlydHVhbCB2b2lkIHJlcXVlc3RTdWNjZWVkZWQoUGFzc1Jl
ZlB0cjxSVENTdGF0c1Jlc3BvbnNlQmFzZT4pIE9WRVJSSURFOwogCkBAIC02MCw3ICs1OSw2IEBA
IHByaXZhdGU6CiAKICAgICBSZWZQdHI8UlRDU3RhdHNDYWxsYmFjaz4gbV9zdWNjZXNzQ2FsbGJh
Y2s7CiAgICAgUmVmUHRyPE1lZGlhU3RyZWFtRGVzY3JpcHRvcj4gbV9zdHJlYW07Ci0gICAgUmVm
UHRyPE1lZGlhU3RyZWFtQ29tcG9uZW50PiBtX2NvbXBvbmVudDsKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vVXNl
ck1lZGlhQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXN0cmVhbS9Vc2VyTWVkaWFDbGllbnQuaAkocmV2aXNpb24gMTU2NDU5KQorKysgU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9Vc2VyTWVkaWFDbGllbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtMzMsMTkgKzMzLDE5IEBACiAKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQogCi0jaW5j
bHVkZSAiVXNlck1lZGlhUmVxdWVzdC5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Y2xhc3MgUGFnZTsKK2NsYXNzIFVzZXJNZWRpYVJlcXVlc3Q7CiAKIGNsYXNzIFVzZXJNZWRpYUNs
aWVudCB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHBhZ2VEZXN0cm95ZWQoKSA9IDA7CiAK
LSAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdFVzZXJNZWRpYShQYXNzUmVmUHRyPFVzZXJNZWRpYVJl
cXVlc3Q+LCBjb25zdCBNZWRpYVN0cmVhbVNvdXJjZVZlY3RvciYgYXVkaW9Tb3VyY2VzLCAgY29u
c3QgTWVkaWFTdHJlYW1Tb3VyY2VWZWN0b3ImIHZpZGVvU291cmNlcykgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCBjYW5jZWxVc2VyTWVkaWFSZXF1ZXN0KFVzZXJNZWRpYVJlcXVlc3QqKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIHJlcXVlc3RQZXJtaXNzaW9uKFBhc3NSZWZQdHI8VXNlck1lZGlhUmVx
dWVzdD4pID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY2FuY2VsUmVxdWVzdChVc2VyTWVkaWFSZXF1
ZXN0KikgPSAwOwogCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB+VXNlck1lZGlhQ2xpZW50KCkg
eyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1VzZXJNZWRpYUNv
bnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3Ry
ZWFtL1VzZXJNZWRpYUNvbnRyb2xsZXIuaAkocmV2aXNpb24gMTU2NDU5KQorKysgU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9Vc2VyTWVkaWFDb250cm9sbGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJV
c2VyTWVkaWFDbGllbnQuaCIKKyNpbmNsdWRlICJVc2VyTWVkaWFSZXF1ZXN0LmgiCiAjaW5jbHVk
ZSA8d3RmL1Bhc3NPd25QdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzgsOCArMzks
OCBAQCBwdWJsaWM6CiAgICAgflVzZXJNZWRpYUNvbnRyb2xsZXIoKTsKIAogICAgIFVzZXJNZWRp
YUNsaWVudCogY2xpZW50KCkgY29uc3QgeyByZXR1cm4gbV9jbGllbnQ7IH0KLSAgICB2b2lkIHJl
cXVlc3RVc2VyTWVkaWEoUGFzc1JlZlB0cjxVc2VyTWVkaWFSZXF1ZXN0PiwgY29uc3QgTWVkaWFT
dHJlYW1Tb3VyY2VWZWN0b3ImIGF1ZGlvU291cmNlcywgIGNvbnN0IE1lZGlhU3RyZWFtU291cmNl
VmVjdG9yJiB2aWRlb1NvdXJjZXMpOwotICAgIHZvaWQgY2FuY2VsVXNlck1lZGlhUmVxdWVzdChV
c2VyTWVkaWFSZXF1ZXN0Kik7CisgICAgdm9pZCByZXF1ZXN0UGVybWlzc2lvbihQYXNzUmVmUHRy
PFVzZXJNZWRpYVJlcXVlc3Q+KTsKKyAgICB2b2lkIGNhbmNlbFJlcXVlc3QoVXNlck1lZGlhUmVx
dWVzdCopOwogCiAgICAgc3RhdGljIFBhc3NPd25QdHI8VXNlck1lZGlhQ29udHJvbGxlcj4gY3Jl
YXRlKFVzZXJNZWRpYUNsaWVudCopOwogICAgIHN0YXRpYyBjb25zdCBjaGFyKiBzdXBwbGVtZW50
TmFtZSgpOwpAQCAtNTIsMTQgKzUzLDE0IEBAIHByaXZhdGU6CiAgICAgVXNlck1lZGlhQ2xpZW50
KiBtX2NsaWVudDsKIH07CiAKLWlubGluZSB2b2lkIFVzZXJNZWRpYUNvbnRyb2xsZXI6OnJlcXVl
c3RVc2VyTWVkaWEoUGFzc1JlZlB0cjxVc2VyTWVkaWFSZXF1ZXN0PiByZXF1ZXN0LCBjb25zdCBN
ZWRpYVN0cmVhbVNvdXJjZVZlY3RvciYgYXVkaW9Tb3VyY2VzLCAgY29uc3QgTWVkaWFTdHJlYW1T
b3VyY2VWZWN0b3ImIHZpZGVvU291cmNlcykKK2lubGluZSB2b2lkIFVzZXJNZWRpYUNvbnRyb2xs
ZXI6OnJlcXVlc3RQZXJtaXNzaW9uKFBhc3NSZWZQdHI8VXNlck1lZGlhUmVxdWVzdD4gcmVxdWVz
dCkKIHsKLSAgICBtX2NsaWVudC0+cmVxdWVzdFVzZXJNZWRpYShyZXF1ZXN0LCBhdWRpb1NvdXJj
ZXMsIHZpZGVvU291cmNlcyk7CisgICAgbV9jbGllbnQtPnJlcXVlc3RQZXJtaXNzaW9uKHJlcXVl
c3QpOwogfQogCi1pbmxpbmUgdm9pZCBVc2VyTWVkaWFDb250cm9sbGVyOjpjYW5jZWxVc2VyTWVk
aWFSZXF1ZXN0KFVzZXJNZWRpYVJlcXVlc3QqIHJlcXVlc3QpCitpbmxpbmUgdm9pZCBVc2VyTWVk
aWFDb250cm9sbGVyOjpjYW5jZWxSZXF1ZXN0KFVzZXJNZWRpYVJlcXVlc3QqIHJlcXVlc3QpCiB7
Ci0gICAgbV9jbGllbnQtPmNhbmNlbFVzZXJNZWRpYVJlcXVlc3QocmVxdWVzdCk7CisgICAgbV9j
bGllbnQtPmNhbmNlbFJlcXVlc3QocmVxdWVzdCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vVXNlck1lZGlhUmVx
dWVzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVh
bS9Vc2VyTWVkaWFSZXF1ZXN0LmNwcAkocmV2aXNpb24gMTU2NDU5KQorKysgU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9Vc2VyTWVkaWFSZXF1ZXN0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgRXJpY3Nzb24gQUIu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQy
LDE2ICs0MywxNiBAQAogI2luY2x1ZGUgIk1lZGlhU3RyZWFtLmgiCiAjaW5jbHVkZSAiTWVkaWFT
dHJlYW1DZW50ZXIuaCIKICNpbmNsdWRlICJNZWRpYVN0cmVhbURlc2NyaXB0b3IuaCIKLSNpbmNs
dWRlICJTcGFjZVNwbGl0U3RyaW5nLmgiCisjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNp
bmNsdWRlICJVc2VyTWVkaWFDb250cm9sbGVyLmgiCiAjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uYWwu
aD4KICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LXN0YXRpYyBQYXNzUmVmUHRyPE1lZGlhQ29uc3RyYWludHNJbXBsPiBwYXJzZU9wdGlvbnMoY29u
c3QgRGljdGlvbmFyeSYgb3B0aW9ucywgY29uc3QgU3RyaW5nJiBtZWRpYVR5cGUsIEV4Y2VwdGlv
bkNvZGUmIGVjKQorc3RhdGljIFBhc3NSZWZQdHI8TWVkaWFDb25zdHJhaW50cz4gcGFyc2VPcHRp
b25zKGNvbnN0IERpY3Rpb25hcnkmIG9wdGlvbnMsIGNvbnN0IFN0cmluZyYgbWVkaWFUeXBlLCBF
eGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBSZWZQdHI8TWVkaWFDb25zdHJhaW50c0ltcGw+IGNv
bnN0cmFpbnRzOworICAgIFJlZlB0cjxNZWRpYUNvbnN0cmFpbnRzPiBjb25zdHJhaW50czsKIAog
ICAgIERpY3Rpb25hcnkgY29uc3RyYWludHNEaWN0aW9uYXJ5OwogICAgIGJvb2wgb2sgPSBvcHRp
b25zLmdldChtZWRpYVR5cGUsIGNvbnN0cmFpbnRzRGljdGlvbmFyeSk7CkBAIC03MSwxMSArNzIs
MTEgQEAgUGFzc1JlZlB0cjxVc2VyTWVkaWFSZXF1ZXN0PiBVc2VyTWVkaWFSZQogewogICAgIEFT
U0VSVChzdWNjZXNzQ2FsbGJhY2spOwogCi0gICAgUmVmUHRyPE1lZGlhQ29uc3RyYWludHNJbXBs
PiBhdWRpb0NvbnN0cmFpbnRzID0gcGFyc2VPcHRpb25zKG9wdGlvbnMsIEF0b21pY1N0cmluZygi
YXVkaW8iLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwgZWMpOworICAgIFJl
ZlB0cjxNZWRpYUNvbnN0cmFpbnRzPiBhdWRpb0NvbnN0cmFpbnRzID0gcGFyc2VPcHRpb25zKG9w
dGlvbnMsIEF0b21pY1N0cmluZygiYXVkaW8iLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21M
aXRlcmFsKSwgZWMpOwogICAgIGlmIChlYykKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBSZWZQ
dHI8TWVkaWFDb25zdHJhaW50c0ltcGw+IHZpZGVvQ29uc3RyYWludHMgPSBwYXJzZU9wdGlvbnMo
b3B0aW9ucywgQXRvbWljU3RyaW5nKCJ2aWRlbyIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJv
bUxpdGVyYWwpLCBlYyk7CisgICAgUmVmUHRyPE1lZGlhQ29uc3RyYWludHM+IHZpZGVvQ29uc3Ry
YWludHMgPSBwYXJzZU9wdGlvbnMob3B0aW9ucywgQXRvbWljU3RyaW5nKCJ2aWRlbyIsIEF0b21p
Y1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLCBlYyk7CiAgICAgaWYgKGVjKQogICAgICAg
ICByZXR1cm4gMDsKIApAQCAtODUsNyArODYsNyBAQCBQYXNzUmVmUHRyPFVzZXJNZWRpYVJlcXVl
c3Q+IFVzZXJNZWRpYVJlCiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBVc2VyTWVkaWFSZXF1ZXN0
KGNvbnRleHQsIGNvbnRyb2xsZXIsIGF1ZGlvQ29uc3RyYWludHMucmVsZWFzZSgpLCB2aWRlb0Nv
bnN0cmFpbnRzLnJlbGVhc2UoKSwgc3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNhbGxiYWNrKSk7CiB9
CiAKLVVzZXJNZWRpYVJlcXVlc3Q6OlVzZXJNZWRpYVJlcXVlc3QoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogY29udGV4dCwgVXNlck1lZGlhQ29udHJvbGxlciogY29udHJvbGxlciwgUGFzc1JlZlB0
cjxNZWRpYUNvbnN0cmFpbnRzSW1wbD4gYXVkaW9Db25zdHJhaW50cywgUGFzc1JlZlB0cjxNZWRp
YUNvbnN0cmFpbnRzSW1wbD4gdmlkZW9Db25zdHJhaW50cywgUGFzc1JlZlB0cjxOYXZpZ2F0b3JV
c2VyTWVkaWFTdWNjZXNzQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxOYXZp
Z2F0b3JVc2VyTWVkaWFFcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrKQorVXNlck1lZGlhUmVx
dWVzdDo6VXNlck1lZGlhUmVxdWVzdChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBV
c2VyTWVkaWFDb250cm9sbGVyKiBjb250cm9sbGVyLCBQYXNzUmVmUHRyPE1lZGlhQ29uc3RyYWlu
dHM+IGF1ZGlvQ29uc3RyYWludHMsIFBhc3NSZWZQdHI8TWVkaWFDb25zdHJhaW50cz4gdmlkZW9D
b25zdHJhaW50cywgUGFzc1JlZlB0cjxOYXZpZ2F0b3JVc2VyTWVkaWFTdWNjZXNzQ2FsbGJhY2s+
IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxOYXZpZ2F0b3JVc2VyTWVkaWFFcnJvckNhbGxi
YWNrPiBlcnJvckNhbGxiYWNrKQogICAgIDogQ29udGV4dERlc3RydWN0aW9uT2JzZXJ2ZXIoY29u
dGV4dCkKICAgICAsIG1fYXVkaW9Db25zdHJhaW50cyhhdWRpb0NvbnN0cmFpbnRzKQogICAgICwg
bV92aWRlb0NvbnN0cmFpbnRzKHZpZGVvQ29uc3RyYWludHMpCkBAIC05OSw4NyArMTAwLDExMiBA
QCBVc2VyTWVkaWFSZXF1ZXN0Ojp+VXNlck1lZGlhUmVxdWVzdCgpCiB7CiB9CiAKLVBhc3NSZWZQ
dHI8TWVkaWFDb25zdHJhaW50cz4gVXNlck1lZGlhUmVxdWVzdDo6YXVkaW9Db25zdHJhaW50cygp
IGNvbnN0CitTZWN1cml0eU9yaWdpbiogVXNlck1lZGlhUmVxdWVzdDo6c2VjdXJpdHlPcmlnaW4o
KSBjb25zdAogewotICAgIHJldHVybiBtX2F1ZGlvQ29uc3RyYWludHM7CisgICAgaWYgKG1fc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCkKKyAgICAgICAgcmV0dXJuIG1fc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dC0+c2VjdXJpdHlPcmlnaW4oKTsKKyAgICAKKyAgICByZXR1cm4gMDsKK30KKyAgICAKK3Zv
aWQgVXNlck1lZGlhUmVxdWVzdDo6c3RhcnQoKQoreworICAgIC8vIDEgLSBtYWtlIHN1cmUgdGhl
IHN5c3RlbSBpcyBjYXBhYmxlIG9mIHN1cHBvcnRpbmcgdGhlIGF1ZGlvIGFuZCB2aWRlbyBjb25z
dHJhaW50cy4gV2UgZG9uJ3Qgd2FudCB0byBhc2sgZm9yCisgICAgLy8gdXNlciBwZXJtaXNzaW9u
IGlmIHRoZSBjb25zdHJhaW50cyBjYW4gbm90IGJlIHN1cG9ydGVkLgorICAgIE1lZGlhU3RyZWFt
OjpzaGFyZWRTdHJlYW1DZW50ZXIoKS52YWxpZGF0ZVJlcXVlc3RDb25zdHJhaW50cyh0aGlzLCBt
X2F1ZGlvQ29uc3RyYWludHMsIG1fdmlkZW9Db25zdHJhaW50cyk7CiB9CiAKLVBhc3NSZWZQdHI8
TWVkaWFDb25zdHJhaW50cz4gVXNlck1lZGlhUmVxdWVzdDo6dmlkZW9Db25zdHJhaW50cygpIGNv
bnN0CisgICAgCit2b2lkIFVzZXJNZWRpYVJlcXVlc3Q6OmNvbnN0cmFpbnRzVmFsaWRhdGVkKCkK
IHsKLSAgICByZXR1cm4gbV92aWRlb0NvbnN0cmFpbnRzOworICAgIGlmIChtX2NvbnRyb2xsZXIp
CisgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoYmluZCgmVXNlck1lZGlhUmVxdWVzdDo6cmVxdWVz
dFBlcm1pc3Npb24sIHRoaXMpKTsKIH0KIAotRG9jdW1lbnQqIFVzZXJNZWRpYVJlcXVlc3Q6Om93
bmVyRG9jdW1lbnQoKQordm9pZCBVc2VyTWVkaWFSZXF1ZXN0OjpyZXF1ZXN0UGVybWlzc2lvbigp
CiB7Ci0gICAgaWYgKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkKLSAgICAgICAgcmV0dXJuIHRv
RG9jdW1lbnQobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KTsKKyAgICAvLyAyIC0gVGhlIGNvbnN0
cmFpbnRzIGFyZSB2YWxpZCwgYXNrIHRoZSB1c2VyIGZvciBhY2Nlc3MgdG8gbWVkaWEuCisgICAg
aWYgKG1fY29udHJvbGxlcikKKyAgICAgICAgbV9jb250cm9sbGVyLT5yZXF1ZXN0UGVybWlzc2lv
bih0aGlzKTsKK30KIAotICAgIHJldHVybiAwOwordm9pZCBVc2VyTWVkaWFSZXF1ZXN0Ojp1c2Vy
TWVkaWFBY2Nlc3NHcmFudGVkKCkKK3sKKyAgICBjYWxsT25NYWluVGhyZWFkKGJpbmQoJlVzZXJN
ZWRpYVJlcXVlc3Q6OmNyZWF0ZU1lZGlhU3RyZWFtLCB0aGlzKSk7CiB9CiAKLXZvaWQgVXNlck1l
ZGlhUmVxdWVzdDo6c3RhcnQoKQordm9pZCBVc2VyTWVkaWFSZXF1ZXN0OjpjcmVhdGVNZWRpYVN0
cmVhbSgpCiB7Ci0gICAgTWVkaWFTdHJlYW1DZW50ZXI6Omluc3RhbmNlKCkucXVlcnlNZWRpYVN0
cmVhbVNvdXJjZXModGhpcyk7CisgICAgLy8gMyAtIHRoZSB1c2VyIGdyYW50ZWQgYWNjZXNzLCBh
c2sgcGxhdGZvcm0gdG8gY3JlYXRlIHRoZSBtZWRpYSBzdHJlYW0gZGVzY3JpcHRvcnMuCisgICAg
TWVkaWFTdHJlYW06OnNoYXJlZFN0cmVhbUNlbnRlcigpLmNyZWF0ZU1lZGlhU3RyZWFtKHRoaXMs
IG1fYXVkaW9Db25zdHJhaW50cywgbV92aWRlb0NvbnN0cmFpbnRzKTsKIH0KIAotdm9pZCBVc2Vy
TWVkaWFSZXF1ZXN0OjpkaWRDb21wbGV0ZVF1ZXJ5KGNvbnN0IE1lZGlhU3RyZWFtU291cmNlVmVj
dG9yJiBhdWRpb1NvdXJjZXMsIGNvbnN0IE1lZGlhU3RyZWFtU291cmNlVmVjdG9yJiB2aWRlb1Nv
dXJjZXMpCit2b2lkIFVzZXJNZWRpYVJlcXVlc3Q6OnVzZXJNZWRpYUFjY2Vzc0RlbmllZCgpCiB7
Ci0gICAgaWYgKG1fY29udHJvbGxlcikKLSAgICAgICAgbV9jb250cm9sbGVyLT5yZXF1ZXN0VXNl
ck1lZGlhKHRoaXMsIGF1ZGlvU291cmNlcywgdmlkZW9Tb3VyY2VzKTsKKyAgICBmYWlsZWRUb0Ny
ZWF0ZVN0cmVhbVdpdGhQZXJtaXNzaW9uRXJyb3IoKTsKIH0KIAotdm9pZCBVc2VyTWVkaWFSZXF1
ZXN0OjpzdWNjZWVkKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1EZXNjcmlwdG9yPiBzdHJlYW1EZXNj
cmlwdG9yKQordm9pZCBVc2VyTWVkaWFSZXF1ZXN0Ojpjb25zdHJhaW50c0ludmFsaWQoY29uc3Qg
U3RyaW5nJiBjb25zdHJhaW50TmFtZSkKIHsKLSAgICBpZiAoIW1fc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCkKKyAgICBmYWlsZWRUb0NyZWF0ZVN0cmVhbVdpdGhDb25zdHJhaW50c0Vycm9yKGNvbnN0
cmFpbnROYW1lKTsKK30KKwordm9pZCBVc2VyTWVkaWFSZXF1ZXN0OjpkaWRDcmVhdGVTdHJlYW0o
UGFzc1JlZlB0cjxNZWRpYVN0cmVhbURlc2NyaXB0b3I+IHN0cmVhbURlc2NyaXB0b3IpCit7Cisg
ICAgaWYgKCFtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQgfHwgIW1fc3VjY2Vzc0NhbGxiYWNrKQog
ICAgICAgICByZXR1cm47CiAKKyAgICBjYWxsT25NYWluVGhyZWFkKGJpbmQoJlVzZXJNZWRpYVJl
cXVlc3Q6OmNhbGxTdWNjZXNzSGFuZGxlciwgdGhpcywgc3RyZWFtRGVzY3JpcHRvcikpOworfQor
Cit2b2lkIFVzZXJNZWRpYVJlcXVlc3Q6OmNhbGxTdWNjZXNzSGFuZGxlcihQYXNzUmVmUHRyPE1l
ZGlhU3RyZWFtRGVzY3JpcHRvcj4gc3RyZWFtRGVzY3JpcHRvcikKK3sKKyAgICAvLyA0IC0gQ3Jl
YXRlIHRoZSBNZWRpYVN0cmVhbSBhbmQgcGFzcyBpdCB0byB0aGUgc3VjY2VzcyBjYWxsYmFjay4K
KyAgICBBU1NFUlQobV9zdWNjZXNzQ2FsbGJhY2spOworCiAgICAgUmVmUHRyPE1lZGlhU3RyZWFt
PiBzdHJlYW0gPSBNZWRpYVN0cmVhbTo6Y3JlYXRlKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwg
c3RyZWFtRGVzY3JpcHRvcik7CiAKICAgICBNZWRpYVN0cmVhbVRyYWNrVmVjdG9yIHRyYWNrcyA9
IHN0cmVhbS0+Z2V0QXVkaW9UcmFja3MoKTsKICAgICBmb3IgKE1lZGlhU3RyZWFtVHJhY2tWZWN0
b3I6Oml0ZXJhdG9yIGl0ZXIgPSB0cmFja3MuYmVnaW4oKTsgaXRlciAhPSB0cmFja3MuZW5kKCk7
ICsraXRlcikKLSAgICAgICAgKCppdGVyKS0+Y29tcG9uZW50KCktPnNvdXJjZSgpLT5zZXRDb25z
dHJhaW50cyhtX2F1ZGlvQ29uc3RyYWludHMpOworICAgICAgICAoKml0ZXIpLT5zb3VyY2UoKS0+
c2V0Q29uc3RyYWludHMobV9hdWRpb0NvbnN0cmFpbnRzKTsKIAogICAgIHRyYWNrcyA9IHN0cmVh
bS0+Z2V0VmlkZW9UcmFja3MoKTsKICAgICBmb3IgKE1lZGlhU3RyZWFtVHJhY2tWZWN0b3I6Oml0
ZXJhdG9yIGl0ZXIgPSB0cmFja3MuYmVnaW4oKTsgaXRlciAhPSB0cmFja3MuZW5kKCk7ICsraXRl
cikKLSAgICAgICAgKCppdGVyKS0+Y29tcG9uZW50KCktPnNvdXJjZSgpLT5zZXRDb25zdHJhaW50
cyhtX3ZpZGVvQ29uc3RyYWludHMpOworICAgICAgICAoKml0ZXIpLT5zb3VyY2UoKS0+c2V0Q29u
c3RyYWludHMobV92aWRlb0NvbnN0cmFpbnRzKTsKIAorICAgIE1lZGlhU3RyZWFtOjpzaGFyZWRT
dHJlYW1DZW50ZXIoKS5kaWRDcmVhdGVNZWRpYVN0cmVhbShzdHJlYW1EZXNjcmlwdG9yLmdldCgp
KTsKICAgICBtX3N1Y2Nlc3NDYWxsYmFjay0+aGFuZGxlRXZlbnQoc3RyZWFtLmdldCgpKTsKIH0K
IAotdm9pZCBVc2VyTWVkaWFSZXF1ZXN0OjpwZXJtaXNzaW9uRmFpbHVyZSgpCit2b2lkIFVzZXJN
ZWRpYVJlcXVlc3Q6OmZhaWxlZFRvQ3JlYXRlU3RyZWFtV2l0aENvbnN0cmFpbnRzRXJyb3IoY29u
c3QgU3RyaW5nJiBjb25zdHJhaW50TmFtZSkKIHsKKyAgICBBU1NFUlQoIWNvbnN0cmFpbnROYW1l
LmlzRW1wdHkoKSk7CiAgICAgaWYgKCFtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQpCiAgICAgICAg
IHJldHVybjsKIAogICAgIGlmICghbV9lcnJvckNhbGxiYWNrKQogICAgICAgICByZXR1cm47Ci0g
ICAgCi0gICAgUmVmUHRyPE5hdmlnYXRvclVzZXJNZWRpYUVycm9yPiBlcnJvciA9IE5hdmlnYXRv
clVzZXJNZWRpYUVycm9yOjpjcmVhdGUoTmF2aWdhdG9yVXNlck1lZGlhRXJyb3I6OnBlcm1pc3Np
b25EZW5pZWRFcnJvck5hbWUoKSwgZW1wdHlTdHJpbmcoKSk7CisKKyAgICBSZWZQdHI8TmF2aWdh
dG9yVXNlck1lZGlhRXJyb3I+IGVycm9yID0gTmF2aWdhdG9yVXNlck1lZGlhRXJyb3I6OmNyZWF0
ZShOYXZpZ2F0b3JVc2VyTWVkaWFFcnJvcjo6Y29uc3RyYWludE5vdFNhdGlzZmllZEVycm9yTmFt
ZSgpLCBjb25zdHJhaW50TmFtZSk7CiAgICAgY2FsbE9uTWFpblRocmVhZChiaW5kKCZVc2VyTWVk
aWFSZXF1ZXN0OjpjYWxsRXJyb3JIYW5kbGVyLCB0aGlzLCBlcnJvci5yZWxlYXNlKCkpKTsKIH0K
IAotdm9pZCBVc2VyTWVkaWFSZXF1ZXN0Ojpjb25zdHJhaW50RmFpbHVyZShjb25zdCBTdHJpbmcm
IGNvbnN0cmFpbnROYW1lKQordm9pZCBVc2VyTWVkaWFSZXF1ZXN0OjpmYWlsZWRUb0NyZWF0ZVN0
cmVhbVdpdGhQZXJtaXNzaW9uRXJyb3IoKQogewotICAgIEFTU0VSVCghY29uc3RyYWludE5hbWUu
aXNFbXB0eSgpKTsKICAgICBpZiAoIW1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkKICAgICAgICAg
cmV0dXJuOwotICAgIAorCiAgICAgaWYgKCFtX2Vycm9yQ2FsbGJhY2spCiAgICAgICAgIHJldHVy
bjsKIAotICAgIFJlZlB0cjxOYXZpZ2F0b3JVc2VyTWVkaWFFcnJvcj4gZXJyb3IgPSBOYXZpZ2F0
b3JVc2VyTWVkaWFFcnJvcjo6Y3JlYXRlKE5hdmlnYXRvclVzZXJNZWRpYUVycm9yOjpjb25zdHJh
aW50Tm90U2F0aXNmaWVkRXJyb3JOYW1lKCksIGNvbnN0cmFpbnROYW1lKTsKKyAgICBSZWZQdHI8
TmF2aWdhdG9yVXNlck1lZGlhRXJyb3I+IGVycm9yID0gTmF2aWdhdG9yVXNlck1lZGlhRXJyb3I6
OmNyZWF0ZShOYXZpZ2F0b3JVc2VyTWVkaWFFcnJvcjo6cGVybWlzc2lvbkRlbmllZEVycm9yTmFt
ZSgpLCBlbXB0eVN0cmluZygpKTsKICAgICBjYWxsT25NYWluVGhyZWFkKGJpbmQoJlVzZXJNZWRp
YVJlcXVlc3Q6OmNhbGxFcnJvckhhbmRsZXIsIHRoaXMsIGVycm9yLnJlbGVhc2UoKSkpOwogfQog
Ci12b2lkIFVzZXJNZWRpYVJlcXVlc3Q6OmNhbGxTdWNjZXNzSGFuZGxlcihQYXNzUmVmUHRyPE1l
ZGlhU3RyZWFtPiBzdHJlYW0pCit2b2lkIFVzZXJNZWRpYVJlcXVlc3Q6OmNhbGxFcnJvckhhbmRs
ZXIoUGFzc1JlZlB0cjxOYXZpZ2F0b3JVc2VyTWVkaWFFcnJvcj4gcHJwRXJyb3IpCiB7Ci0gICAg
QVNTRVJUKG1fc3VjY2Vzc0NhbGxiYWNrKTsKLSAgICAKLSAgICBtX3N1Y2Nlc3NDYWxsYmFjay0+
aGFuZGxlRXZlbnQoc3RyZWFtLmdldCgpKTsKLX0KKyAgICBSZWZQdHI8TmF2aWdhdG9yVXNlck1l
ZGlhRXJyb3I+IGVycm9yID0gcHJwRXJyb3I7CiAKLXZvaWQgVXNlck1lZGlhUmVxdWVzdDo6Y2Fs
bEVycm9ySGFuZGxlcihQYXNzUmVmUHRyPE5hdmlnYXRvclVzZXJNZWRpYUVycm9yPiBlcnJvcikK
LXsKICAgICBBU1NFUlQoZXJyb3IpOwogICAgIAogICAgIG1fZXJyb3JDYWxsYmFjay0+aGFuZGxl
RXZlbnQoZXJyb3IuZ2V0KCkpOwpAQCAtMTkwLDcgKzIxNiw3IEBAIHZvaWQgVXNlck1lZGlhUmVx
dWVzdDo6Y29udGV4dERlc3Ryb3llZCgKICAgICBSZWY8VXNlck1lZGlhUmVxdWVzdD4gcHJvdGVj
dCgqdGhpcyk7CiAKICAgICBpZiAobV9jb250cm9sbGVyKSB7Ci0gICAgICAgIG1fY29udHJvbGxl
ci0+Y2FuY2VsVXNlck1lZGlhUmVxdWVzdCh0aGlzKTsKKyAgICAgICAgbV9jb250cm9sbGVyLT5j
YW5jZWxSZXF1ZXN0KHRoaXMpOwogICAgICAgICBtX2NvbnRyb2xsZXIgPSAwOwogICAgIH0KIApJ
bmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9Vc2VyTWVkaWFSZXF1ZXN0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9Vc2Vy
TWVkaWFSZXF1ZXN0LmgJKHJldmlzaW9uIDE1NjQ1OSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvbWVkaWFzdHJlYW0vVXNlck1lZGlhUmVxdWVzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMSBFcmljc3NvbiBBQi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM0LDEyICszNSwx
MiBAQAogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmpl
Y3QuaCIKLSNpbmNsdWRlICJFeGNlcHRpb25CYXNlLmgiCisjaW5jbHVkZSAiTWVkaWFTdHJlYW1D
cmVhdGlvbkNsaWVudC5oIgogI2luY2x1ZGUgIk1lZGlhU3RyZWFtU291cmNlLmgiCi0jaW5jbHVk
ZSAiTWVkaWFTdHJlYW1Tb3VyY2VzUXVlcnlDbGllbnQuaCIKICNpbmNsdWRlICJOYXZpZ2F0b3JV
c2VyTWVkaWFFcnJvckNhbGxiYWNrLmgiCiAjaW5jbHVkZSAiTmF2aWdhdG9yVXNlck1lZGlhU3Vj
Y2Vzc0NhbGxiYWNrLmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3
dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CkBAIC00NywzOCArNDgsNDMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
Y2xhc3MgRGljdGlvbmFyeTsKIGNsYXNzIERvY3VtZW50OwogY2xhc3MgTWVkaWFDb25zdHJhaW50
czsKLWNsYXNzIE1lZGlhQ29uc3RyYWludHNJbXBsOwogY2xhc3MgTWVkaWFTdHJlYW1EZXNjcmlw
dG9yOwogY2xhc3MgVXNlck1lZGlhQ29udHJvbGxlcjsKK2NsYXNzIFNlY3VyaXR5T3JpZ2luOwog
Ci1jbGFzcyBVc2VyTWVkaWFSZXF1ZXN0IDogcHVibGljIE1lZGlhU3RyZWFtU291cmNlc1F1ZXJ5
Q2xpZW50LCBwdWJsaWMgQ29udGV4dERlc3RydWN0aW9uT2JzZXJ2ZXIgewordHlwZWRlZiBpbnQg
RXhjZXB0aW9uQ29kZTsKKworY2xhc3MgVXNlck1lZGlhUmVxdWVzdCA6IHB1YmxpYyBNZWRpYVN0
cmVhbUNyZWF0aW9uQ2xpZW50LCBwdWJsaWMgQ29udGV4dERlc3RydWN0aW9uT2JzZXJ2ZXIgewog
cHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFVzZXJNZWRpYVJlcXVlc3Q+IGNyZWF0ZShT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgVXNlck1lZGlhQ29udHJvbGxlciosIGNvbnN0IERpY3Rp
b25hcnkmIG9wdGlvbnMsIFBhc3NSZWZQdHI8TmF2aWdhdG9yVXNlck1lZGlhU3VjY2Vzc0NhbGxi
YWNrPiwgUGFzc1JlZlB0cjxOYXZpZ2F0b3JVc2VyTWVkaWFFcnJvckNhbGxiYWNrPiwgRXhjZXB0
aW9uQ29kZSYpOwogICAgIH5Vc2VyTWVkaWFSZXF1ZXN0KCk7CiAKLSAgICBEb2N1bWVudCogb3du
ZXJEb2N1bWVudCgpOworICAgIFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbigpIGNvbnN0
OwogCiAgICAgdm9pZCBzdGFydCgpOwotICAgIHZvaWQgc3VjY2VlZChQYXNzUmVmUHRyPE1lZGlh
U3RyZWFtRGVzY3JpcHRvcj4pOwotICAgIHZvaWQgcGVybWlzc2lvbkZhaWx1cmUoKTsKLSAgICB2
b2lkIGNvbnN0cmFpbnRGYWlsdXJlKGNvbnN0IFN0cmluZyYgY29uc3RyYWludE5hbWUpOwotCi0g
ICAgLy8gTWVkaWFTdHJlYW1Tb3VyY2VzUXVlcnlDbGllbnQKLSAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8TWVkaWFDb25zdHJhaW50cz4gYXVkaW9Db25zdHJhaW50cygpIGNvbnN0IE9WRVJSSURFOwot
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxNZWRpYUNvbnN0cmFpbnRzPiB2aWRlb0NvbnN0cmFpbnRz
KCkgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGRpZENvbXBsZXRlUXVlcnkoY29u
c3QgTWVkaWFTdHJlYW1Tb3VyY2VWZWN0b3ImIGF1ZGlvU291cmNlcywgY29uc3QgTWVkaWFTdHJl
YW1Tb3VyY2VWZWN0b3ImIHZpZGVvU291cmNlcykgT1ZFUlJJREU7Ci0KLSAgICAvLyBDb250ZXh0
RGVzdHJ1Y3Rpb25PYnNlcnZlcgotICAgIHZpcnR1YWwgdm9pZCBjb250ZXh0RGVzdHJveWVkKCk7
CisgICAgdm9pZCB1c2VyTWVkaWFBY2Nlc3NHcmFudGVkKCk7CisgICAgdm9pZCB1c2VyTWVkaWFB
Y2Nlc3NEZW5pZWQoKTsKIAogcHJpdmF0ZToKLSAgICBVc2VyTWVkaWFSZXF1ZXN0KFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBVc2VyTWVkaWFDb250cm9sbGVyKiwgUGFzc1JlZlB0cjxNZWRpYUNv
bnN0cmFpbnRzSW1wbD4gYXVkaW9Db25zdHJhaW50cywgUGFzc1JlZlB0cjxNZWRpYUNvbnN0cmFp
bnRzSW1wbD4gdmlkZW9Db25zdHJhaW50cywgUGFzc1JlZlB0cjxOYXZpZ2F0b3JVc2VyTWVkaWFT
dWNjZXNzQ2FsbGJhY2s+LCBQYXNzUmVmUHRyPE5hdmlnYXRvclVzZXJNZWRpYUVycm9yQ2FsbGJh
Y2s+KTsKKyAgICBVc2VyTWVkaWFSZXF1ZXN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBVc2Vy
TWVkaWFDb250cm9sbGVyKiwgUGFzc1JlZlB0cjxNZWRpYUNvbnN0cmFpbnRzPiBhdWRpb0NvbnN0
cmFpbnRzLCBQYXNzUmVmUHRyPE1lZGlhQ29uc3RyYWludHM+IHZpZGVvQ29uc3RyYWludHMsIFBh
c3NSZWZQdHI8TmF2aWdhdG9yVXNlck1lZGlhU3VjY2Vzc0NhbGxiYWNrPiwgUGFzc1JlZlB0cjxO
YXZpZ2F0b3JVc2VyTWVkaWFFcnJvckNhbGxiYWNrPik7CiAKLSAgICB2b2lkIGNhbGxTdWNjZXNz
SGFuZGxlcihQYXNzUmVmUHRyPE1lZGlhU3RyZWFtPik7CisgICAgLy8gTWVkaWFTdHJlYW1DcmVh
dGlvbkNsaWVudAorICAgIHZpcnR1YWwgdm9pZCBjb25zdHJhaW50c1ZhbGlkYXRlZCgpIE9WRVJS
SURFIEZJTkFMOworICAgIHZpcnR1YWwgdm9pZCBjb25zdHJhaW50c0ludmFsaWQoY29uc3QgU3Ry
aW5nJiBjb25zdHJhaW50TmFtZSkgT1ZFUlJJREUgRklOQUw7CisgICAgdmlydHVhbCB2b2lkIGRp
ZENyZWF0ZVN0cmVhbShQYXNzUmVmUHRyPE1lZGlhU3RyZWFtRGVzY3JpcHRvcj4pIE9WRVJSSURF
IEZJTkFMOworICAgIHZpcnR1YWwgdm9pZCBmYWlsZWRUb0NyZWF0ZVN0cmVhbVdpdGhDb25zdHJh
aW50c0Vycm9yKGNvbnN0IFN0cmluZyYgY29uc3RyYWludE5hbWUpIE9WRVJSSURFIEZJTkFMOwor
ICAgIHZpcnR1YWwgdm9pZCBmYWlsZWRUb0NyZWF0ZVN0cmVhbVdpdGhQZXJtaXNzaW9uRXJyb3Io
KSBPVkVSUklERSBGSU5BTDsKKworICAgIC8vIENvbnRleHREZXN0cnVjdGlvbk9ic2VydmVyCisg
ICAgdmlydHVhbCB2b2lkIGNvbnRleHREZXN0cm95ZWQoKSBPVkVSUklERSBGSU5BTDsKKyAgICAK
KyAgICB2b2lkIGNhbGxTdWNjZXNzSGFuZGxlcihQYXNzUmVmUHRyPE1lZGlhU3RyZWFtRGVzY3Jp
cHRvcj4pOwogICAgIHZvaWQgY2FsbEVycm9ySGFuZGxlcihQYXNzUmVmUHRyPE5hdmlnYXRvclVz
ZXJNZWRpYUVycm9yPik7CisgICAgdm9pZCByZXF1ZXN0UGVybWlzc2lvbigpOworICAgIHZvaWQg
Y3JlYXRlTWVkaWFTdHJlYW0oKTsKIAotICAgIFJlZlB0cjxNZWRpYUNvbnN0cmFpbnRzSW1wbD4g
bV9hdWRpb0NvbnN0cmFpbnRzOwotICAgIFJlZlB0cjxNZWRpYUNvbnN0cmFpbnRzSW1wbD4gbV92
aWRlb0NvbnN0cmFpbnRzOworICAgIFJlZlB0cjxNZWRpYUNvbnN0cmFpbnRzPiBtX2F1ZGlvQ29u
c3RyYWludHM7CisgICAgUmVmUHRyPE1lZGlhQ29uc3RyYWludHM+IG1fdmlkZW9Db25zdHJhaW50
czsKIAogICAgIFVzZXJNZWRpYUNvbnRyb2xsZXIqIG1fY29udHJvbGxlcjsKIApJbmRleDogU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmNwcAkocmV2
aXNpb24gMTU2NDU5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0Nv
bnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MjEsNyArNDIxLDcgQEAgUGFzc1JlZlB0cjxN
ZWRpYVN0cmVhbUF1ZGlvU291cmNlTm9kZT4gQQogICAgIC8vIEZJWE1FOiBnZXQgYSBwcm92aWRl
ciBmb3Igbm9uLWxvY2FsIE1lZGlhU3RyZWFtcyAobGlrZSBmcm9tIGEgcmVtb3RlIHBlZXIpLgog
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXVkaW9UcmFja3Muc2l6ZSgpOyArK2kpIHsKICAg
ICAgICAgUmVmUHRyPE1lZGlhU3RyZWFtVHJhY2s+IGxvY2FsQXVkaW8gPSBhdWRpb1RyYWNrc1tp
XTsKLSAgICAgICAgTWVkaWFTdHJlYW1Tb3VyY2UqIHNvdXJjZSA9IGxvY2FsQXVkaW8tPmNvbXBv
bmVudCgpLT5zb3VyY2UoKTsKKyAgICAgICAgTWVkaWFTdHJlYW1Tb3VyY2UqIHNvdXJjZSA9IGxv
Y2FsQXVkaW8tPnNvdXJjZSgpOwogICAgICAgICBpZiAoIXNvdXJjZS0+ZGV2aWNlSWQoKS5pc0Vt
cHR5KCkpIHsKICAgICAgICAgICAgIGRlc3RpbmF0aW9uKCktPmVuYWJsZUlucHV0KHNvdXJjZS0+
ZGV2aWNlSWQoKSk7CiAgICAgICAgICAgICBwcm92aWRlciA9IGRlc3RpbmF0aW9uKCktPmxvY2Fs
QXVkaW9JbnB1dFByb3ZpZGVyKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1
ZGlvL01lZGlhU3RyZWFtQXVkaW9EZXN0aW5hdGlvbk5vZGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vTWVkaWFTdHJlYW1BdWRpb0Rlc3RpbmF0aW9u
Tm9kZS5jcHAJKHJldmlzaW9uIDE1NjQ1OSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
YXVkaW8vTWVkaWFTdHJlYW1BdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ5LDEyICs0OSwxMiBAQCBNZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRpb25Ob2RlOjpNZWRp
YVN0CiB7CiAgICAgc2V0Tm9kZVR5cGUoTm9kZVR5cGVNZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRp
b24pOwogCi0gICAgbV9zb3VyY2UgPSBNZWRpYVN0cmVhbVNvdXJjZTo6Y3JlYXRlKEFTQ0lJTGl0
ZXJhbCgiV2ViQXVkaW8tIikgKyBjcmVhdGVDYW5vbmljYWxVVUlEU3RyaW5nKCksIE1lZGlhU3Ry
ZWFtU291cmNlOjpUeXBlQXVkaW8sICJNZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRpb25Ob2RlIiwg
TWVkaWFTdHJlYW1Tb3VyY2U6OlJlYWR5U3RhdGVMaXZlLCB0cnVlKTsKKyAgICBtX3NvdXJjZSA9
IE1lZGlhU3RyZWFtU291cmNlOjpjcmVhdGUoQVNDSUlMaXRlcmFsKCJXZWJBdWRpby0iKSArIGNy
ZWF0ZUNhbm9uaWNhbFVVSURTdHJpbmcoKSwgTWVkaWFTdHJlYW1Tb3VyY2U6OkF1ZGlvLCAiTWVk
aWFTdHJlYW1BdWRpb0Rlc3RpbmF0aW9uTm9kZSIsIE1lZGlhU3RyZWFtU291cmNlOjpMaXZlLCB0
cnVlKTsKICAgICBNZWRpYVN0cmVhbVNvdXJjZVZlY3RvciBhdWRpb1NvdXJjZXM7CiAgICAgYXVk
aW9Tb3VyY2VzLmFwcGVuZChtX3NvdXJjZSk7CiAgICAgTWVkaWFTdHJlYW1Tb3VyY2VWZWN0b3Ig
dmlkZW9Tb3VyY2VzOwogICAgIG1fc3RyZWFtID0gTWVkaWFTdHJlYW06OmNyZWF0ZShjb250ZXh0
LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIE1lZGlhU3RyZWFtRGVzY3JpcHRvcjo6Y3JlYXRl
KGF1ZGlvU291cmNlcywgdmlkZW9Tb3VyY2VzKSk7Ci0gICAgTWVkaWFTdHJlYW1DZW50ZXI6Omlu
c3RhbmNlKCkuZGlkQ3JlYXRlTWVkaWFTdHJlYW0obV9zdHJlYW0tPmRlc2NyaXB0b3IoKSk7Cisg
ICAgTWVkaWFTdHJlYW06OnNoYXJlZFN0cmVhbUNlbnRlcigpLmRpZENyZWF0ZU1lZGlhU3RyZWFt
KG1fc3RyZWFtLT5kZXNjcmlwdG9yKCkpOwogCiAgICAgbV9zb3VyY2UtPnNldEF1ZGlvRm9ybWF0
KG51bWJlck9mQ2hhbm5lbHMsIGNvbnRleHQtPnNhbXBsZVJhdGUoKSk7CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlz
aW9uIDE1NjQ1OSkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtOTUsNyArOTUsOCBAQAogCQkwNzA3NTZERjE0MjM5
QjRFMDA0MTQxNjEgLyogSlNUZXh0VHJhY2tDdWVMaXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3MDc1NkQ5MTQyMzlCNEMwMDQxNDE2MSAvKiBK
U1RleHRUcmFja0N1ZUxpc3QuY3BwICovOyB9OwogCQkwNzA3NTZFMDE0MjM5QjRFMDA0MTQxNjEg
LyogSlNUZXh0VHJhY2tDdWVMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwNzA3NTZEQTE0MjM5QjRFMDA0MTQxNjEgLyogSlNUZXh0VHJhY2tDdWVM
aXN0LmggKi87IH07CiAJCTA3MDlGQzRFMTAyNURFRTMwMDU5Q0RCQSAvKiBBY2Nlc3NpYmlsaXR5
U2xpZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
NzA5RkM0RDEwMjVERUUzMDA1OUNEQkEgLyogQWNjZXNzaWJpbGl0eVNsaWRlci5oICovOyB9Owot
CQkwNzExNTg5MDE3REY2RjYyMDBFREZFMkIgLyogTWVkaWFTdHJlYW1Db21wb25lbnQuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDcxMTU4OEUxN0RG
NjMzNzAwRURGRTJCIC8qIE1lZGlhU3RyZWFtQ29tcG9uZW50LmNwcCAqLzsgfTsKKwkJMDcwRjU0
OTgxN0YxMkY2QjAwMTY5RTA0IC8qIE1lZGlhU3RyZWFtQ29uc3RyYWludHNWYWxpZGF0aW9uQ2xp
ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzBG
NTQ5NzE3RjEyRjZCMDAxNjlFMDQgLyogTWVkaWFTdHJlYW1Db25zdHJhaW50c1ZhbGlkYXRpb25D
bGllbnQuaCAqLzsgfTsKKwkJMDcwRjU0OUUxN0YyNDAyNzAwMTY5RTA0IC8qIEF1ZGlvRGVzdGlu
YXRpb25Db25zdW1lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMDcwRjU0OUQxN0YyNDAyNzAwMTY5RTA0IC8qIEF1ZGlvRGVzdGluYXRpb25Db25zdW1l
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTA3
MTE1ODkxMTdERjZGNjYwMEVERkUyQiAvKiBNZWRpYVN0cmVhbURlc2NyaXB0b3IuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDcxMTU4OEYxN0RGNjMz
NzAwRURGRTJCIC8qIE1lZGlhU3RyZWFtRGVzY3JpcHRvci5jcHAgKi87IH07CiAJCTA3MUE5RUMy
MTY4RkJDNDMwMDI2MjlGOSAvKiBUZXh0VHJhY2tDdWVHZW5lcmljLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3MUE5RUMwMTY4RkI1NkMwMDI2MjlG
OSAvKiBUZXh0VHJhY2tDdWVHZW5lcmljLmNwcCAqLzsgfTsKIAkJMDcxQTlFQzMxNjhGQkM1NTAw
MjYyOUY5IC8qIFRleHRUcmFja0N1ZUdlbmVyaWMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3MUE5RUMxMTY4RkI1NkMwMDI2MjlGOSAvKiBUZXh0VHJh
Y2tDdWVHZW5lcmljLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKQEAgLTIwMiwxMSArMjAzLDEwIEBACiAJCTA3OEUwOTMyMTdEMTY4NDYwMDQyMEFBMSAv
KiBNZWRpYVN0cmVhbUNlbnRlck1hYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMDcyOUIxNEYxN0NGQ0NBMDAwNEYxRDYwIC8qIE1lZGlhU3RyZWFtQ2Vu
dGVyTWFjLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMDc4RTA5MzMxN0QxNkIwNjAwNDIwQUExIC8qIE1lZGlhU3RyZWFtQ2VudGVyLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3MjIxQjlBMTdDRjBB
RDQwMDg0OEU1MSAvKiBNZWRpYVN0cmVhbUNlbnRlci5jcHAgKi87IH07CiAJCTA3OEUwOTM0MTdE
MTZCMEIwMDQyMEFBMSAvKiBNZWRpYVN0cmVhbUNlbnRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDcyMjFCOUIxN0NGMEFENDAwODQ4RTUxIC8qIE1l
ZGlhU3RyZWFtQ2VudGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKLQkJMDc4RTA5MzUxN0QxNkIyMTAwNDIwQUExIC8qIE1lZGlhU3RyZWFtQ29tcG9u
ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzIy
MUI5QzE3Q0YwQUQ0MDA4NDhFNTEgLyogTWVkaWFTdHJlYW1Db21wb25lbnQuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwNzhFMDkzNjE3RDE2QjIx
MDA0MjBBQTEgLyogTWVkaWFTdHJlYW1Tb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDcyMjFCOUUxN0NGMEFENDAwODQ4RTUxIC8qIE1lZGlh
U3RyZWFtU291cmNlLmNwcCAqLzsgfTsKIAkJMDc4RTA5MzcxN0QxNkIyQzAwNDIwQUExIC8qIE1l
ZGlhU3RyZWFtRGVzY3JpcHRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMDcyMjFCOUQxN0NGMEFENDAwODQ4RTUxIC8qIE1lZGlhU3RyZWFtRGVzY3Jp
cHRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTA3OEUwOTM4MTdEMTZCMkMwMDQyMEFBMSAvKiBNZWRpYVN0cmVhbVNvdXJjZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDcyMjFCOUYxN0NGMEFENDAw
ODQ4RTUxIC8qIE1lZGlhU3RyZWFtU291cmNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMDc4RTA5MzkxN0QxNkIyQzAwNDIwQUExIC8qIE1lZGlh
U3RyZWFtU291cmNlc1F1ZXJ5Q2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwNzIyMUJBMDE3Q0YwQUQ0MDA4NDhFNTEgLyogTWVkaWFTdHJlYW1T
b3VyY2VzUXVlcnlDbGllbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQkwNzhFMDkzOTE3RDE2QjJDMDA0MjBBQTEgLyogTWVkaWFTdHJlYW1DcmVh
dGlvbkNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMDcyMjFCQTAxN0NGMEFENDAwODQ4RTUxIC8qIE1lZGlhU3RyZWFtQ3JlYXRpb25DbGllbnQu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwNzhF
MDkzQTE3RDE2RTFDMDA0MjBBQTEgLyogTWVkaWFDb25zdHJhaW50cy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDcyMjFCOTkxN0NGMEFENDAwODQ4RTUx
IC8qIE1lZGlhQ29uc3RyYWludHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwNzhFMDkzQjE3RDE2RTFDMDA0MjBBQTEgLyogUlRDQ29uZmlndXJh
dGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDcy
MjFCQTExN0NGMEFENDAwODQ4RTUxIC8qIFJUQ0NvbmZpZ3VyYXRpb24uaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwNzhFMDkzQzE3RDE2RTFDMDA0
MjBBQTEgLyogUlRDRGF0YUNoYW5uZWxIYW5kbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzIyMUJBMjE3Q0YwQUQ0MDA4NDhFNTEgLyogUlRDRGF0
YUNoYW5uZWxIYW5kbGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKQEAgLTY0NjcsNyArNjQ2Nyw4IEBACiAJCTA3MDc1NkRBMTQyMzlCNEUwMDQxNDE2
MSAvKiBKU1RleHRUcmFja0N1ZUxpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSlNUZXh0VHJhY2tDdWVMaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3
MDlGQzREMTAyNURFRTMwMDU5Q0RCQSAvKiBBY2Nlc3NpYmlsaXR5U2xpZGVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFjY2Vzc2liaWxpdHlTbGlkZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDcwREQ4RjUwRjAxODY4MDAwNzI3REVCIC8qIG1lZGlhQ29u
dHJvbHMuY3NzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IG1lZGlhQ29udHJvbHMuY3NzOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwNzExNTg4RTE3REY2MzM3MDBFREZFMkIgLyogTWVk
aWFTdHJlYW1Db21wb25lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gTWVkaWFTdHJlYW1Db21wb25lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwNzBGNTQ5NzE3RjEyRjZCMDAxNjlFMDQgLyogTWVkaWFTdHJlYW1Db25zdHJhaW50c1ZhbGlk
YXRpb25DbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVkaWFTdHJl
YW1Db25zdHJhaW50c1ZhbGlkYXRpb25DbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMDcwRjU0OUQxN0YyNDAyNzAwMTY5RTA0IC8qIEF1ZGlvRGVzdGluYXRpb25Db25zdW1l
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBdWRpb0Rlc3RpbmF0aW9uQ29u
c3VtZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDcxMTU4OEYxN0RGNjMzNzAw
RURGRTJCIC8qIE1lZGlhU3RyZWFtRGVzY3JpcHRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBNZWRpYVN0cmVhbURlc2NyaXB0b3IuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwNzFBOUVDMDE2OEZCNTZDMDAyNjI5RjkgLyogVGV4dFRyYWNrQ3Vl
R2VuZXJpYy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUZXh0VHJh
Y2tDdWVHZW5lcmljLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDcxQTlFQzEx
NjhGQjU2QzAwMjYyOUY5IC8qIFRleHRUcmFja0N1ZUdlbmVyaWMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gVGV4dFRyYWNrQ3VlR2VuZXJpYy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtNjU1MCwxMSArNjU1MSwxMCBAQAogCQkwNzIyMUI5OTE3Q0YwQUQ0MDA4
NDhFNTEgLyogTWVkaWFDb25zdHJhaW50cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBNZWRpYUNvbnN0cmFpbnRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3
MjIxQjlBMTdDRjBBRDQwMDg0OEU1MSAvKiBNZWRpYVN0cmVhbUNlbnRlci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNZWRpYVN0cmVhbUNlbnRlci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3MjIxQjlCMTdDRjBBRDQwMDg0OEU1MSAvKiBNZWRp
YVN0cmVhbUNlbnRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYVN0
cmVhbUNlbnRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwNzIyMUI5QzE3Q0Yw
QUQ0MDA4NDhFNTEgLyogTWVkaWFTdHJlYW1Db21wb25lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gTWVkaWFTdHJlYW1Db21wb25lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMDcyMjFCOUQxN0NGMEFENDAwODQ4RTUxIC8qIE1lZGlhU3RyZWFtRGVzY3Jp
cHRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYVN0cmVhbURlc2Ny
aXB0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDcyMjFCOUUxN0NGMEFENDAw
ODQ4RTUxIC8qIE1lZGlhU3RyZWFtU291cmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IE1lZGlhU3RyZWFtU291cmNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMDcyMjFCOUYxN0NGMEFENDAwODQ4RTUxIC8qIE1lZGlhU3RyZWFtU291cmNlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhU3RyZWFtU291cmNlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTA3MjIxQkEwMTdDRjBBRDQwMDg0OEU1MSAvKiBN
ZWRpYVN0cmVhbVNvdXJjZXNRdWVyeUNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBNZWRpYVN0cmVhbVNvdXJjZXNRdWVyeUNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwNzIyMUJBMDE3Q0YwQUQ0MDA4NDhFNTEgLyogTWVkaWFTdHJlYW1DcmVh
dGlvbkNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYVN0cmVh
bUNyZWF0aW9uQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3MjIxQkEx
MTdDRjBBRDQwMDg0OEU1MSAvKiBSVENDb25maWd1cmF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFJUQ0NvbmZpZ3VyYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMDcyMjFCQTIxN0NGMEFENDAwODQ4RTUxIC8qIFJUQ0RhdGFDaGFubmVsSGFuZGxl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSVENEYXRhQ2hhbm5lbEhhbmRs
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDcyMjFCQTMxN0NGMEFENDAwODQ4
RTUxIC8qIFJUQ0RhdGFDaGFubmVsSGFuZGxlckNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBSVENEYXRhQ2hhbm5lbEhhbmRsZXJDbGllbnQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTEzMzk5LDEzICsxMzM5OSwxMiBAQAogCQkJCTA3MjIxQjk5MTdD
RjBBRDQwMDg0OEU1MSAvKiBNZWRpYUNvbnN0cmFpbnRzLmggKi8sCiAJCQkJMDcyMjFCOUExN0NG
MEFENDAwODQ4RTUxIC8qIE1lZGlhU3RyZWFtQ2VudGVyLmNwcCAqLywKIAkJCQkwNzIyMUI5QjE3
Q0YwQUQ0MDA4NDhFNTEgLyogTWVkaWFTdHJlYW1DZW50ZXIuaCAqLywKLQkJCQkwNzExNTg4RTE3
REY2MzM3MDBFREZFMkIgLyogTWVkaWFTdHJlYW1Db21wb25lbnQuY3BwICovLAotCQkJCTA3MjIx
QjlDMTdDRjBBRDQwMDg0OEU1MSAvKiBNZWRpYVN0cmVhbUNvbXBvbmVudC5oICovLAorCQkJCTA3
MEY1NDk3MTdGMTJGNkIwMDE2OUUwNCAvKiBNZWRpYVN0cmVhbUNvbnN0cmFpbnRzVmFsaWRhdGlv
bkNsaWVudC5oICovLAorCQkJCTA3MjIxQkEwMTdDRjBBRDQwMDg0OEU1MSAvKiBNZWRpYVN0cmVh
bUNyZWF0aW9uQ2xpZW50LmggKi8sCiAJCQkJMDcxMTU4OEYxN0RGNjMzNzAwRURGRTJCIC8qIE1l
ZGlhU3RyZWFtRGVzY3JpcHRvci5jcHAgKi8sCiAJCQkJMDcyMjFCOUQxN0NGMEFENDAwODQ4RTUx
IC8qIE1lZGlhU3RyZWFtRGVzY3JpcHRvci5oICovLAogCQkJCTA3MjIxQjlFMTdDRjBBRDQwMDg0
OEU1MSAvKiBNZWRpYVN0cmVhbVNvdXJjZS5jcHAgKi8sCiAJCQkJMDcyMjFCOUYxN0NGMEFENDAw
ODQ4RTUxIC8qIE1lZGlhU3RyZWFtU291cmNlLmggKi8sCi0JCQkJMDcyMjFCQTAxN0NGMEFENDAw
ODQ4RTUxIC8qIE1lZGlhU3RyZWFtU291cmNlc1F1ZXJ5Q2xpZW50LmggKi8sCiAJCQkJMDc2MzA2
RTIxN0UyMkE0MzAwNUE3QzRFIC8qIE1lZGlhU3RyZWFtVHJhY2tTb3VyY2VzUmVxdWVzdENsaWVu
dC5oICovLAogCQkJCTA3MjIxQkExMTdDRjBBRDQwMDg0OEU1MSAvKiBSVENDb25maWd1cmF0aW9u
LmggKi8sCiAJCQkJMDcyMjFCQTIxN0NGMEFENDAwODQ4RTUxIC8qIFJUQ0RhdGFDaGFubmVsSGFu
ZGxlci5oICovLApAQCAtMjEyOTIsNiArMjEyOTEsNyBAQAogCQkJCUZEMzE2MDQ3MTJCMDI2Rjcw
MEMxQTM1OSAvKiBBdWRpb0NoYW5uZWwuY3BwICovLAogCQkJCUZEMzE2MDQ4MTJCMDI2RjcwMEMx
QTM1OSAvKiBBdWRpb0NoYW5uZWwuaCAqLywKIAkJCQlGRDMxNjA0OTEyQjAyNkY3MDBDMUEzNTkg
LyogQXVkaW9EZXN0aW5hdGlvbi5oICovLAorCQkJCTA3MEY1NDlEMTdGMjQwMjcwMDE2OUUwNCAv
KiBBdWRpb0Rlc3RpbmF0aW9uQ29uc3VtZXIuaCAqLywKIAkJCQlGRDMxNjA0QTEyQjAyNkY3MDBD
MUEzNTkgLyogQXVkaW9EU1BLZXJuZWwuaCAqLywKIAkJCQlGRDMxNjA0QjEyQjAyNkY3MDBDMUEz
NTkgLyogQXVkaW9EU1BLZXJuZWxQcm9jZXNzb3IuY3BwICovLAogCQkJCUZEMzE2MDRDMTJCMDI2
RjcwMEMxQTM1OSAvKiBBdWRpb0RTUEtlcm5lbFByb2Nlc3Nvci5oICovLApAQCAtMjE1NDksNiAr
MjE1NDksNyBAQAogCQkJCUZEMzE2MDdFMTJCMDI2RjcwMEMxQTM1OSAvKiBBdWRpb0NoYW5uZWwu
aCBpbiBIZWFkZXJzICovLAogCQkJCUZEMzE2MDA1MTJCMDI2NzYwMEMxQTM1OSAvKiBBdWRpb0Nv
bnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCUZEMzE2MDdGMTJCMDI2RjcwMEMxQTM1OSAvKiBB
dWRpb0Rlc3RpbmF0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQkwNzBGNTQ5RTE3RjI0MDI3MDAx
NjlFMDQgLyogQXVkaW9EZXN0aW5hdGlvbkNvbnN1bWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlG
RDMxNjBCRDEyQjAyNzJBMDBDMUEzNTkgLyogQXVkaW9EZXN0aW5hdGlvbk1hYy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJRkQzMTYwMDgxMkIwMjY3NjAwQzFBMzU5IC8qIEF1ZGlvRGVzdGluYXRpb25O
b2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRDMxNjA4MDEyQjAyNkY3MDBDMUEzNTkgLyogQXVk
aW9EU1BLZXJuZWwuaCBpbiBIZWFkZXJzICovLApAQCAtMjE4MDcsNiArMjE4MDgsNyBAQAogCQkJ
CUJDNUExMkUwMERDMDQxNDgwMEM5QUZBRCAvKiBDU1NSZWZsZWN0VmFsdWUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE4MEU2RDBEMEExOTg5Q0EwMDdGQjhDNSAvKiBDU1NSdWxlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBODBFNkNGMjBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTUnVsZUxpc3QuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTA3MEY1NDk4MTdGMTJGNkIwMDE2OUUwNCAvKiBNZWRpYVN0cmVhbUNv
bnN0cmFpbnRzVmFsaWRhdGlvbkNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzcxRjUxQTEw
RDI2MkZBMDAwRUNFMEQ1IC8qIENTU1NlZ21lbnRlZEZvbnRGYWNlLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBODBFNzM1MjBBMTk5Qzc3MDA3RkI4QzUgLyogQ1NTU2VsZWN0b3IuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUU0QzE3ODlCMEVFNjkwMzgwMDgyNEQ2OSAvKiBDU1NTZWxlY3Rvckxpc3QuaCBp
biBIZWFkZXJzICovLApAQCAtMjE5NTgsNyArMjE5NjAsNyBAQAogCQkJCTg1OEMzOEE1MEFBOEYy
MDQwMEIxODdBNCAvKiBET01Db3VudGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NUU3MTE5MTBB
QzVENTM1MDA1MzI3MEYgLyogRE9NQ291bnRlckludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQzFBMzdCMDA5N0M3MTVGMDAxOUYzRDggLyogRE9NQ1NTLmggaW4gSGVhZGVycyAqLywKLQkJ
CQkwNzhFMDkzOTE3RDE2QjJDMDA0MjBBQTEgLyogTWVkaWFTdHJlYW1Tb3VyY2VzUXVlcnlDbGll
bnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTA3OEUwOTM5MTdEMTZCMkMwMDQyMEFBMSAvKiBNZWRp
YVN0cmVhbUNyZWF0aW9uQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NTAzMkRENzBBQThD
OUJFMDA3RDNCN0QgLyogRE9NQ1NTQ2hhcnNldFJ1bGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1
OTA5Q0RDMEFDQzdBN0UwMERGMDFGMSAvKiBET01DU1NDaGFyc2V0UnVsZUludGVybmFsLmggaW4g
SGVhZGVycyAqLywKIAkJCQk4NTAzMkREOTBBQThDOUJFMDA3RDNCN0QgLyogRE9NQ1NTRm9udEZh
Y2VSdWxlLmggaW4gSGVhZGVycyAqLywKQEAgLTI0MjA3LDcgKzI0MjA5LDYgQEAKIAkJCQlCMjIy
N0EyMTBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHRm9udEZhY2VVcmlFbGVtZW50LmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCMjIyN0EyNDBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHRm9yZWlnbk9iamVjdEVs
ZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3QTI3MEQwMEJGMjIwMDcxQjc4MiAvKiBT
VkdHRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMDc4RTA5MzUxN0QxNkIyMTAwNDIwQUEx
IC8qIE1lZGlhU3RyZWFtQ29tcG9uZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwODdFMEFGNzEz
NjA2RDBCMDBGQTRCQTggLyogU1ZHR2x5cGguaCBpbiBIZWFkZXJzICovLAogCQkJCUIyQTFGMkFF
MENFRjBBQkYwMDQ0MkY2QSAvKiBTVkdHbHlwaEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTM3NDQ1NzBGMERCMDVGQTUwMEFFMDk5MiAvKiBTVkdHbHlwaE1hcC5oIGluIEhlYWRlcnMgKi8s
CkBAIC0yNjczMiw3ICsyNjczMyw2IEBACiAJCQkJRDNBQTEwRjMxMjNBOThBQTAwOTIxNTJCIC8q
IE1lZGlhUXVlcnlNYXRjaGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUNENjFGRTY3MTc5NEFB
REIwMDQxMDFFQiAvKiBNZWRpYVNvdXJjZVJlZ2lzdHJ5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUZENjcxQTc3MTU5QkIwNzAwMDE5NzU1OSAvKiBNZWRpYVN0cmVhbUF1ZGlvU291cmNlTm9kZS5j
cHAgaW4gU291cmNlcyAqLywKLQkJCQkwNzExNTg5MDE3REY2RjYyMDBFREZFMkIgLyogTWVkaWFT
dHJlYW1Db21wb25lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDcxMTU4OTExN0RGNkY2NjAw
RURGRTJCIC8qIE1lZGlhU3RyZWFtRGVzY3JpcHRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlC
Q0IxNkMxNzA5NzlDM0JEMDA0Njc3NDEgLyogTWVtb3J5Q2FjaGUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJNjU3RURBMDgxMzg1Q0I5NzAwNEUwNjQ1IC8qIE1lbW9yeVByZXNzdXJlSGFuZGxlci5j
cHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudE5hbWVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50TmFtZXMuaAkocmV2aXNpb24g
MTU2NDU5KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50TmFtZXMuaAkod29ya2luZyBjb3B5
KQpAQCAtMjQwLDYgKzI0MCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBtYWNybyhyZW1v
dmV0cmFjaykgXAogICAgIG1hY3JvKG11dGUpIFwKICAgICBtYWNybyh1bm11dGUpIFwKKyAgICBt
YWNybyhzdGFydGVkKSBcCiAgICAgbWFjcm8oaWNlY29ubmVjdGlvbnN0YXRlY2hhbmdlKSBcCiAg
ICAgbWFjcm8oaWNlY2FuZGlkYXRlKSBcCiAgICAgbWFjcm8obmVnb3RpYXRpb25uZWVkZWQpIFwK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtQ2Vu
dGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9NZWRpYVN0cmVhbUNlbnRlci5jcHAJKHJldmlzaW9uIDE1NjQ1OSkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtQ2VudGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDksMTEgKzQ5LDcgQEAgTWVkaWFTdHJlYW1DZW50ZXI6On5NZWRpYVN0cmVhbUNl
bnRlcigpCiAKIHZvaWQgTWVkaWFTdHJlYW1DZW50ZXI6OmVuZExvY2FsTWVkaWFTdHJlYW0oTWVk
aWFTdHJlYW1EZXNjcmlwdG9yKiBzdHJlYW1EZXNjcmlwdG9yKQogewotICAgIE1lZGlhU3RyZWFt
RGVzY3JpcHRvckNsaWVudCogY2xpZW50ID0gc3RyZWFtRGVzY3JpcHRvci0+Y2xpZW50KCk7Ci0g
ICAgaWYgKGNsaWVudCkKLSAgICAgICAgY2xpZW50LT5zdHJlYW1FbmRlZCgpOwotICAgIGVsc2UK
LSAgICAgICAgc3RyZWFtRGVzY3JpcHRvci0+c2V0RW5kZWQoKTsKKyAgICBzdHJlYW1EZXNjcmlw
dG9yLT5zZXRFbmRlZCgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbUNlbnRlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFt
Q2VudGVyLmgJKHJldmlzaW9uIDE1NjQ1OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL01lZGlhU3RyZWFtQ2VudGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDI0ICsz
OSwzMCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIE1lZGlhU3RyZWFtQ29tcG9u
ZW50OworY2xhc3MgTWVkaWFDb25zdHJhaW50czsKK2NsYXNzIE1lZGlhU3RyZWFtQ3JlYXRpb25D
bGllbnQ7CitjbGFzcyBNZWRpYVN0cmVhbUNyZWF0aW9uQ2xpZW50OwogY2xhc3MgTWVkaWFTdHJl
YW1EZXNjcmlwdG9yOwotY2xhc3MgTWVkaWFTdHJlYW1Tb3VyY2VzUXVlcnlDbGllbnQ7CitjbGFz
cyBNZWRpYVN0cmVhbVNvdXJjZTsKIGNsYXNzIE1lZGlhU3RyZWFtVHJhY2tTb3VyY2VzUmVxdWVz
dENsaWVudDsKIAogY2xhc3MgTWVkaWFTdHJlYW1DZW50ZXIgewogcHVibGljOgogICAgIHZpcnR1
YWwgfk1lZGlhU3RyZWFtQ2VudGVyKCk7CiAKLSAgICBzdGF0aWMgTWVkaWFTdHJlYW1DZW50ZXIm
IGluc3RhbmNlKCk7CisgICAgc3RhdGljIE1lZGlhU3RyZWFtQ2VudGVyJiBzaGFyZWQoKTsKIAot
ICAgIHZpcnR1YWwgdm9pZCBxdWVyeU1lZGlhU3RyZWFtU291cmNlcyhQYXNzUmVmUHRyPE1lZGlh
U3RyZWFtU291cmNlc1F1ZXJ5Q2xpZW50PikgPSAwOworICAgIHZpcnR1YWwgdm9pZCB2YWxpZGF0
ZVJlcXVlc3RDb25zdHJhaW50cyhQYXNzUmVmUHRyPE1lZGlhU3RyZWFtQ3JlYXRpb25DbGllbnQ+
LCBQYXNzUmVmUHRyPE1lZGlhQ29uc3RyYWludHM+IGF1ZGlvQ29uc3RyYWludHMsIFBhc3NSZWZQ
dHI8TWVkaWFDb25zdHJhaW50cz4gdmlkZW9Db25zdHJhaW50cykgPSAwOworCisgICAgdmlydHVh
bCB2b2lkIGNyZWF0ZU1lZGlhU3RyZWFtKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1DcmVhdGlvbkNs
aWVudD4sIFBhc3NSZWZQdHI8TWVkaWFDb25zdHJhaW50cz4gYXVkaW9Db25zdHJhaW50cywgUGFz
c1JlZlB0cjxNZWRpYUNvbnN0cmFpbnRzPiB2aWRlb0NvbnN0cmFpbnRzKSA9IDA7CiAKLSAgICAv
LyBDYWxscyBmcm9tIHRoZSBET00gb2JqZWN0cyB0byBub3RpZnkgdGhlIHBsYXRmb3JtCiAgICAg
dmlydHVhbCBib29sIGdldE1lZGlhU3RyZWFtVHJhY2tTb3VyY2VzKFBhc3NSZWZQdHI8TWVkaWFT
dHJlYW1UcmFja1NvdXJjZXNSZXF1ZXN0Q2xpZW50PikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBk
aWRTZXRNZWRpYVN0cmVhbVRyYWNrRW5hYmxlZChNZWRpYVN0cmVhbURlc2NyaXB0b3IqLCBNZWRp
YVN0cmVhbUNvbXBvbmVudCopID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgZGlkQWRkTWVkaWFTdHJl
YW1UcmFjayhNZWRpYVN0cmVhbURlc2NyaXB0b3IqLCBNZWRpYVN0cmVhbUNvbXBvbmVudCopID0g
MDsKLSAgICB2aXJ0dWFsIGJvb2wgZGlkUmVtb3ZlTWVkaWFTdHJlYW1UcmFjayhNZWRpYVN0cmVh
bURlc2NyaXB0b3IqLCBNZWRpYVN0cmVhbUNvbXBvbmVudCopID0gMDsKKworICAgIHZpcnR1YWwg
dm9pZCBkaWRTZXRNZWRpYVN0cmVhbVRyYWNrRW5hYmxlZChNZWRpYVN0cmVhbVNvdXJjZSopID0g
MDsKKworICAgIHZpcnR1YWwgYm9vbCBkaWRBZGRNZWRpYVN0cmVhbVRyYWNrKE1lZGlhU3RyZWFt
U291cmNlKikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBkaWRSZW1vdmVNZWRpYVN0cmVhbVRyYWNr
KE1lZGlhU3RyZWFtU291cmNlKikgPSAwOworCiAgICAgdmlydHVhbCB2b2lkIGRpZFN0b3BMb2Nh
bE1lZGlhU3RyZWFtKE1lZGlhU3RyZWFtRGVzY3JpcHRvciopID0gMDsKICAgICB2aXJ0dWFsIHZv
aWQgZGlkQ3JlYXRlTWVkaWFTdHJlYW0oTWVkaWFTdHJlYW1EZXNjcmlwdG9yKikgPSAwOwogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbUNvbXBv
bmVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vTWVkaWFTdHJlYW1Db21wb25lbnQuY3BwCShyZXZpc2lvbiAxNTY0NTkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbUNvbXBvbmVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNjQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBF
cmljc3NvbiBBQi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
Ci0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVO
QUJMRShNRURJQV9TVFJFQU0pCi0KLSNpbmNsdWRlICJNZWRpYVN0cmVhbUNvbXBvbmVudC5oIgot
Ci0jaW5jbHVkZSAiTWVkaWFTdHJlYW1Tb3VyY2UuaCIKLSNpbmNsdWRlICJVVUlELmgiCi0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotUGFzc1JlZlB0cjxNZWRpYVN0cmVhbUNvbXBvbmVudD4gTWVk
aWFTdHJlYW1Db21wb25lbnQ6OmNyZWF0ZShQYXNzUmVmUHRyPE1lZGlhU3RyZWFtU291cmNlPiBz
b3VyY2UpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNZWRpYVN0cmVhbUNvbXBvbmVudChj
cmVhdGVDYW5vbmljYWxVVUlEU3RyaW5nKCksIDAsIHNvdXJjZSkpOwotfQotCi1QYXNzUmVmUHRy
PE1lZGlhU3RyZWFtQ29tcG9uZW50PiBNZWRpYVN0cmVhbUNvbXBvbmVudDo6Y3JlYXRlKE1lZGlh
U3RyZWFtRGVzY3JpcHRvciogc3RyZWFtLCBQYXNzUmVmUHRyPE1lZGlhU3RyZWFtU291cmNlPiBz
b3VyY2UpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNZWRpYVN0cmVhbUNvbXBvbmVudChj
cmVhdGVDYW5vbmljYWxVVUlEU3RyaW5nKCksIHN0cmVhbSwgc291cmNlKSk7Ci19Ci0KLU1lZGlh
U3RyZWFtQ29tcG9uZW50OjpNZWRpYVN0cmVhbUNvbXBvbmVudChjb25zdCBTdHJpbmcmIGlkLCBN
ZWRpYVN0cmVhbURlc2NyaXB0b3IqIHN0cmVhbSwgUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVNvdXJj
ZT4gc291cmNlKQotICAgIDogbV9zdHJlYW0oc3RyZWFtKQotICAgICwgbV9zb3VyY2Uoc291cmNl
KQotICAgICwgbV9pZChpZCkKLSAgICAsIG1fZW5hYmxlZCh0cnVlKQotewotICAgIEFTU0VSVCht
X2lkLmxlbmd0aCgpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8g
RU5BQkxFKE1FRElBX1NUUkVBTSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL01lZGlhU3RyZWFtQ29tcG9uZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1Db21wb25lbnQuaAkocmV2aXNpb24g
MTU2NDU5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJl
YW1Db21wb25lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3NSArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDExIEVyaWNzc29uIEFCLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqICAgIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRp
c3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgRXJpY3Nzb24gbm9yIHRoZSBu
YW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSAqICAgIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
LSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRl
ZiBNZWRpYVN0cmVhbUNvbXBvbmVudF9oCi0jZGVmaW5lIE1lZGlhU3RyZWFtQ29tcG9uZW50X2gK
LQotI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCi0KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5o
PgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgTWVkaWFTdHJlYW1EZXNjcmlw
dG9yOwotY2xhc3MgTWVkaWFTdHJlYW1Tb3VyY2U7Ci0KLWNsYXNzIE1lZGlhU3RyZWFtQ29tcG9u
ZW50IDogcHVibGljIFJlZkNvdW50ZWQ8TWVkaWFTdHJlYW1Db21wb25lbnQ+IHsKLXB1YmxpYzoK
LSAgICBzdGF0aWMgUGFzc1JlZlB0cjxNZWRpYVN0cmVhbUNvbXBvbmVudD4gY3JlYXRlKFBhc3NS
ZWZQdHI8TWVkaWFTdHJlYW1Tb3VyY2U+KTsKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxNZWRpYVN0
cmVhbUNvbXBvbmVudD4gY3JlYXRlKE1lZGlhU3RyZWFtRGVzY3JpcHRvciosIFBhc3NSZWZQdHI8
TWVkaWFTdHJlYW1Tb3VyY2U+KTsKLQotICAgIE1lZGlhU3RyZWFtRGVzY3JpcHRvciogc3RyZWFt
KCkgY29uc3QgeyByZXR1cm4gbV9zdHJlYW07IH0KLSAgICB2b2lkIHNldFN0cmVhbShNZWRpYVN0
cmVhbURlc2NyaXB0b3IqIHN0cmVhbSkgeyBBU1NFUlQoIW1fc3RyZWFtICYmIHN0cmVhbSk7IG1f
c3RyZWFtID0gc3RyZWFtOyB9Ci0KLSAgICBNZWRpYVN0cmVhbVNvdXJjZSogc291cmNlKCkgY29u
c3QgeyByZXR1cm4gbV9zb3VyY2UuZ2V0KCk7IH0KLQotICAgIFN0cmluZyBpZCgpIGNvbnN0IHsg
cmV0dXJuIG1faWQ7IH0KLSAgICBib29sIGVuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2VuYWJs
ZWQ7IH0KLSAgICB2b2lkIHNldEVuYWJsZWQoYm9vbCBlbmFibGVkKSB7IG1fZW5hYmxlZCA9IGVu
YWJsZWQ7IH0KLQotcHJpdmF0ZToKLSAgICBNZWRpYVN0cmVhbUNvbXBvbmVudChjb25zdCBTdHJp
bmcmIGlkLCBNZWRpYVN0cmVhbURlc2NyaXB0b3IqLCBQYXNzUmVmUHRyPE1lZGlhU3RyZWFtU291
cmNlPik7Ci0KLSAgICBNZWRpYVN0cmVhbURlc2NyaXB0b3IqIG1fc3RyZWFtOwotICAgIFJlZlB0
cjxNZWRpYVN0cmVhbVNvdXJjZT4gbV9zb3VyY2U7Ci0gICAgU3RyaW5nIG1faWQ7Ci0gICAgYm9v
bCBtX2VuYWJsZWQ7Ci19OwotCi10eXBlZGVmIFZlY3RvcjxSZWZQdHI8TWVkaWFTdHJlYW1Db21w
b25lbnQ+ID4gTWVkaWFTdHJlYW1Db21wb25lbnRWZWN0b3I7Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCi0KLSNlbmRpZiAvLyBNZWRp
YVN0cmVhbUNvbXBvbmVudF9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9NZWRpYVN0cmVhbUNvbnN0cmFpbnRzVmFsaWRhdGlvbkNsaWVudC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtQ29uc3Ry
YWludHNWYWxpZGF0aW9uQ2xpZW50LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbUNvbnN0cmFpbnRzVmFsaWRhdGlvbkNsaWVu
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgTWVk
aWFTdHJlYW1Db25zdHJhaW50c1ZhbGlkYXRpb25DbGllbnRfaAorI2RlZmluZSBNZWRpYVN0cmVh
bUNvbnN0cmFpbnRzVmFsaWRhdGlvbkNsaWVudF9oCisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFN
KQorCisjaW5jbHVkZSAiTWVkaWFTdHJlYW1Tb3VyY2UuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1Jl
ZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgTWVkaWFDb25zdHJhaW50czsKKworY2xhc3MgTWVkaWFTdHJlYW1Db25zdHJh
aW50c1ZhbGlkYXRpb25DbGllbnQgOiBwdWJsaWMgUmVmQ291bnRlZDxNZWRpYVN0cmVhbUNvbnN0
cmFpbnRzVmFsaWRhdGlvbkNsaWVudD4geworcHVibGljOgorICAgIHZpcnR1YWwgfk1lZGlhU3Ry
ZWFtQ29uc3RyYWludHNWYWxpZGF0aW9uQ2xpZW50KCkgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQg
Y29uc3RyYWludHNBcmVWYWxpZCgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY29uc3RyYWludHNJ
bnZhbGlkKGNvbnN0IFN0cmluZyYgY29uc3RyYWludE5hbWUpID0gMDsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCisKKyNlbmRp
ZiAvLyBNZWRpYVN0cmVhbUNvbnN0cmFpbnRzVmFsaWRhdGlvbkNsaWVudF9oCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbUNyZWF0aW9uQ2xpZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVk
aWFTdHJlYW1DcmVhdGlvbkNsaWVudC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1DcmVhdGlvbkNsaWVudC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgTWVkaWFTdHJlYW1DcmVh
dGlvbkNsaWVudF9oCisjZGVmaW5lIE1lZGlhU3RyZWFtQ3JlYXRpb25DbGllbnRfaAorCisjaWYg
RU5BQkxFKE1FRElBX1NUUkVBTSkKKworI2luY2x1ZGUgIk1lZGlhU3RyZWFtU291cmNlLmgiCisj
aW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIE1lZGlhU3RyZWFtQ3JlYXRpb25DbGllbnQg
OiBwdWJsaWMgUmVmQ291bnRlZDxNZWRpYVN0cmVhbUNyZWF0aW9uQ2xpZW50PiB7CitwdWJsaWM6
CisgICAgdmlydHVhbCB+TWVkaWFTdHJlYW1DcmVhdGlvbkNsaWVudCgpIHsgfQorCisgICAgdmly
dHVhbCB2b2lkIGNvbnN0cmFpbnRzVmFsaWRhdGVkKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBj
b25zdHJhaW50c0ludmFsaWQoY29uc3QgU3RyaW5nJiBjb25zdHJhaW50TmFtZSkgPSAwOworCisg
ICAgdmlydHVhbCB2b2lkIGRpZENyZWF0ZVN0cmVhbShQYXNzUmVmUHRyPE1lZGlhU3RyZWFtRGVz
Y3JpcHRvcj4pID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZmFpbGVkVG9DcmVhdGVTdHJlYW1XaXRo
Q29uc3RyYWludHNFcnJvcihjb25zdCBTdHJpbmcmIGNvbnN0cmFpbnROYW1lKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIGZhaWxlZFRvQ3JlYXRlU3RyZWFtV2l0aFBlcm1pc3Npb25FcnJvcigpID0g
MDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShNRURJ
QV9TVFJFQU0pCisKKyNlbmRpZiAvLyBNZWRpYVN0cmVhbUNyZWF0aW9uQ2xpZW50X2gKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtRGVzY3JpcHRv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
TWVkaWFTdHJlYW1EZXNjcmlwdG9yLmNwcAkocmV2aXNpb24gMTU2NDU5KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1EZXNjcmlwdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDcsNTYgKzQ3LDUxIEBAIFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1EZXNj
cmlwdG9yPiBNZWRpYVMKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1lZGlhU3RyZWFtRGVzY3Jp
cHRvcihjcmVhdGVDYW5vbmljYWxVVUlEU3RyaW5nKCksIGF1ZGlvU291cmNlcywgdmlkZW9Tb3Vy
Y2VzKSk7CiB9CiAKLVBhc3NSZWZQdHI8TWVkaWFTdHJlYW1EZXNjcmlwdG9yPiBNZWRpYVN0cmVh
bURlc2NyaXB0b3I6OmNyZWF0ZShjb25zdCBNZWRpYVN0cmVhbUNvbXBvbmVudFZlY3RvciYgYXVk
aW9Db21wb25lbnRzLCBjb25zdCBNZWRpYVN0cmVhbUNvbXBvbmVudFZlY3RvciYgdmlkZW9Db21w
b25lbnRzKQordm9pZCBNZWRpYVN0cmVhbURlc2NyaXB0b3I6OmFkZFNvdXJjZShQYXNzUmVmUHRy
PE1lZGlhU3RyZWFtU291cmNlPiBzb3VyY2UpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBN
ZWRpYVN0cmVhbURlc2NyaXB0b3IoY3JlYXRlQ2Fub25pY2FsVVVJRFN0cmluZygpLCBhdWRpb0Nv
bXBvbmVudHMsIHZpZGVvQ29tcG9uZW50cykpOwotfQotCi12b2lkIE1lZGlhU3RyZWFtRGVzY3Jp
cHRvcjo6YWRkQ29tcG9uZW50KFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1Db21wb25lbnQ+IGNvbXBv
bmVudCkKLXsKLSAgICBzd2l0Y2ggKGNvbXBvbmVudC0+c291cmNlKCktPnR5cGUoKSkgewotICAg
IGNhc2UgTWVkaWFTdHJlYW1Tb3VyY2U6OlR5cGVBdWRpbzoKLSAgICAgICAgaWYgKG1fYXVkaW9D
b21wb25lbnRzLmZpbmQoY29tcG9uZW50KSA9PSBub3RGb3VuZCkKLSAgICAgICAgICAgIG1fYXVk
aW9Db21wb25lbnRzLmFwcGVuZChjb21wb25lbnQpOworICAgIHN3aXRjaCAoc291cmNlLT50eXBl
KCkpIHsKKyAgICBjYXNlIE1lZGlhU3RyZWFtU291cmNlOjpBdWRpbzoKKyAgICAgICAgaWYgKG1f
YXVkaW9TdHJlYW1Tb3VyY2VzLmZpbmQoc291cmNlKSA9PSBub3RGb3VuZCkKKyAgICAgICAgICAg
IG1fYXVkaW9TdHJlYW1Tb3VyY2VzLmFwcGVuZChzb3VyY2UpOwogICAgICAgICBicmVhazsKLSAg
ICBjYXNlIE1lZGlhU3RyZWFtU291cmNlOjpUeXBlVmlkZW86Ci0gICAgICAgIGlmIChtX3ZpZGVv
Q29tcG9uZW50cy5maW5kKGNvbXBvbmVudCkgPT0gbm90Rm91bmQpCi0gICAgICAgICAgICBtX3Zp
ZGVvQ29tcG9uZW50cy5hcHBlbmQoY29tcG9uZW50KTsKKyAgICBjYXNlIE1lZGlhU3RyZWFtU291
cmNlOjpWaWRlbzoKKyAgICAgICAgaWYgKG1fdmlkZW9TdHJlYW1Tb3VyY2VzLmZpbmQoc291cmNl
KSA9PSBub3RGb3VuZCkKKyAgICAgICAgICAgIG1fdmlkZW9TdHJlYW1Tb3VyY2VzLmFwcGVuZChz
b3VyY2UpOwogICAgICAgICBicmVhazsKICAgICB9CiB9CiAKLXZvaWQgTWVkaWFTdHJlYW1EZXNj
cmlwdG9yOjpyZW1vdmVDb21wb25lbnQoUGFzc1JlZlB0cjxNZWRpYVN0cmVhbUNvbXBvbmVudD4g
Y29tcG9uZW50KQordm9pZCBNZWRpYVN0cmVhbURlc2NyaXB0b3I6OnJlbW92ZVNvdXJjZShQYXNz
UmVmUHRyPE1lZGlhU3RyZWFtU291cmNlPiBzb3VyY2UpCiB7CiAgICAgc2l6ZV90IHBvcyA9IG5v
dEZvdW5kOwotICAgIHN3aXRjaCAoY29tcG9uZW50LT5zb3VyY2UoKS0+dHlwZSgpKSB7Ci0gICAg
Y2FzZSBNZWRpYVN0cmVhbVNvdXJjZTo6VHlwZUF1ZGlvOgotICAgICAgICBwb3MgPSBtX2F1ZGlv
Q29tcG9uZW50cy5maW5kKGNvbXBvbmVudCk7CisgICAgc3dpdGNoIChzb3VyY2UtPnR5cGUoKSkg
eworICAgIGNhc2UgTWVkaWFTdHJlYW1Tb3VyY2U6OkF1ZGlvOgorICAgICAgICBwb3MgPSBtX2F1
ZGlvU3RyZWFtU291cmNlcy5maW5kKHNvdXJjZSk7CiAgICAgICAgIGlmIChwb3MgIT0gbm90Rm91
bmQpCi0gICAgICAgICAgICBtX2F1ZGlvQ29tcG9uZW50cy5yZW1vdmUocG9zKTsKKyAgICAgICAg
ICAgIG1fYXVkaW9TdHJlYW1Tb3VyY2VzLnJlbW92ZShwb3MpOwogICAgICAgICBicmVhazsKLSAg
ICBjYXNlIE1lZGlhU3RyZWFtU291cmNlOjpUeXBlVmlkZW86Ci0gICAgICAgIHBvcyA9IG1fdmlk
ZW9Db21wb25lbnRzLmZpbmQoY29tcG9uZW50KTsKKyAgICBjYXNlIE1lZGlhU3RyZWFtU291cmNl
OjpWaWRlbzoKKyAgICAgICAgcG9zID0gbV92aWRlb1N0cmVhbVNvdXJjZXMuZmluZChzb3VyY2Up
OwogICAgICAgICBpZiAocG9zICE9IG5vdEZvdW5kKQotICAgICAgICAgICAgbV92aWRlb0NvbXBv
bmVudHMucmVtb3ZlKHBvcyk7CisgICAgICAgICAgICBtX3ZpZGVvU3RyZWFtU291cmNlcy5yZW1v
dmUocG9zKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogfQogCi12b2lkIE1lZGlhU3RyZWFtRGVz
Y3JpcHRvcjo6YWRkUmVtb3RlVHJhY2soTWVkaWFTdHJlYW1Db21wb25lbnQqIGNvbXBvbmVudCkK
K3ZvaWQgTWVkaWFTdHJlYW1EZXNjcmlwdG9yOjphZGRSZW1vdGVTb3VyY2UoTWVkaWFTdHJlYW1T
b3VyY2UqIHNvdXJjZSkKIHsKICAgICBpZiAobV9jbGllbnQpCi0gICAgICAgIG1fY2xpZW50LT5h
ZGRSZW1vdGVUcmFjayhjb21wb25lbnQpOworICAgICAgICBtX2NsaWVudC0+YWRkUmVtb3RlU291
cmNlKHNvdXJjZSk7CiAgICAgZWxzZQotICAgICAgICBhZGRDb21wb25lbnQoY29tcG9uZW50KTsK
KyAgICAgICAgYWRkU291cmNlKHNvdXJjZSk7CiB9CiAKLXZvaWQgTWVkaWFTdHJlYW1EZXNjcmlw
dG9yOjpyZW1vdmVSZW1vdGVUcmFjayhNZWRpYVN0cmVhbUNvbXBvbmVudCogY29tcG9uZW50KQor
dm9pZCBNZWRpYVN0cmVhbURlc2NyaXB0b3I6OnJlbW92ZVJlbW90ZVNvdXJjZShNZWRpYVN0cmVh
bVNvdXJjZSogc291cmNlKQogewogICAgIGlmIChtX2NsaWVudCkKLSAgICAgICAgbV9jbGllbnQt
PnJlbW92ZVJlbW90ZVRyYWNrKGNvbXBvbmVudCk7CisgICAgICAgIG1fY2xpZW50LT5yZW1vdmVS
ZW1vdGVTb3VyY2Uoc291cmNlKTsKICAgICBlbHNlCi0gICAgICAgIHJlbW92ZUNvbXBvbmVudChj
b21wb25lbnQpOworICAgICAgICByZW1vdmVTb3VyY2Uoc291cmNlKTsKIH0KIAogTWVkaWFTdHJl
YW1EZXNjcmlwdG9yOjpNZWRpYVN0cmVhbURlc2NyaXB0b3IoY29uc3QgU3RyaW5nJiBpZCwgY29u
c3QgTWVkaWFTdHJlYW1Tb3VyY2VWZWN0b3ImIGF1ZGlvU291cmNlcywgY29uc3QgTWVkaWFTdHJl
YW1Tb3VyY2VWZWN0b3ImIHZpZGVvU291cmNlcykKQEAgLTEwNSwyNyArMTAwLDI2IEBAIE1lZGlh
U3RyZWFtRGVzY3JpcHRvcjo6TWVkaWFTdHJlYW1EZXNjcmkKICAgICAsIG1fZW5kZWQoZmFsc2Up
CiB7CiAgICAgQVNTRVJUKG1faWQubGVuZ3RoKCkpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgYXVkaW9Tb3VyY2VzLnNpemUoKTsgaSsrKQotICAgICAgICBtX2F1ZGlvQ29tcG9uZW50cy5h
cHBlbmQoTWVkaWFTdHJlYW1Db21wb25lbnQ6OmNyZWF0ZSh0aGlzLCBhdWRpb1NvdXJjZXNbaV0p
KTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGF1ZGlvU291cmNlcy5zaXplKCk7IGkrKykg
eworICAgICAgICBhdWRpb1NvdXJjZXNbaV0tPnNldFN0cmVhbSh0aGlzKTsKKyAgICAgICAgbV9h
dWRpb1N0cmVhbVNvdXJjZXMuYXBwZW5kKGF1ZGlvU291cmNlc1tpXSk7CisgICAgfQogCi0gICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCB2aWRlb1NvdXJjZXMuc2l6ZSgpOyBpKyspCi0gICAgICAg
IG1fdmlkZW9Db21wb25lbnRzLmFwcGVuZChNZWRpYVN0cmVhbUNvbXBvbmVudDo6Y3JlYXRlKHRo
aXMsIHZpZGVvU291cmNlc1tpXSkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmlkZW9T
b3VyY2VzLnNpemUoKTsgaSsrKSB7CisgICAgICAgIHZpZGVvU291cmNlc1tpXS0+c2V0U3RyZWFt
KHRoaXMpOworICAgICAgICBtX3ZpZGVvU3RyZWFtU291cmNlcy5hcHBlbmQodmlkZW9Tb3VyY2Vz
W2ldKTsKKyAgICB9CiB9CiAKLU1lZGlhU3RyZWFtRGVzY3JpcHRvcjo6TWVkaWFTdHJlYW1EZXNj
cmlwdG9yKGNvbnN0IFN0cmluZyYgaWQsIGNvbnN0IE1lZGlhU3RyZWFtQ29tcG9uZW50VmVjdG9y
JiBhdWRpb0NvbXBvbmVudHMsIGNvbnN0IE1lZGlhU3RyZWFtQ29tcG9uZW50VmVjdG9yJiB2aWRl
b0NvbXBvbmVudHMpCi0gICAgOiBtX2NsaWVudCgwKQotICAgICwgbV9pZChpZCkKLSAgICAsIG1f
ZW5kZWQoZmFsc2UpCit2b2lkIE1lZGlhU3RyZWFtRGVzY3JpcHRvcjo6c2V0RW5kZWQoKQogewot
ICAgIEFTU0VSVChtX2lkLmxlbmd0aCgpKTsKLSAgICBmb3IgKE1lZGlhU3RyZWFtQ29tcG9uZW50
VmVjdG9yOjpjb25zdF9pdGVyYXRvciBpdGVyID0gYXVkaW9Db21wb25lbnRzLmJlZ2luKCk7IGl0
ZXIgIT0gYXVkaW9Db21wb25lbnRzLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgKCppdGVyKS0+
c2V0U3RyZWFtKHRoaXMpOwotICAgICAgICBtX2F1ZGlvQ29tcG9uZW50cy5hcHBlbmQoKCppdGVy
KSk7Ci0gICAgfQotICAgIGZvciAoTWVkaWFTdHJlYW1Db21wb25lbnRWZWN0b3I6OmNvbnN0X2l0
ZXJhdG9yIGl0ZXIgPSB2aWRlb0NvbXBvbmVudHMuYmVnaW4oKTsgaXRlciAhPSB2aWRlb0NvbXBv
bmVudHMuZW5kKCk7ICsraXRlcikgewotICAgICAgICAoKml0ZXIpLT5zZXRTdHJlYW0odGhpcyk7
Ci0gICAgICAgIG1fdmlkZW9Db21wb25lbnRzLmFwcGVuZCgoKml0ZXIpKTsKLSAgICB9CisgICAg
aWYgKG1fY2xpZW50KQorICAgICAgICBtX2NsaWVudC0+c3RyZWFtRGlkRW5kKCk7CisgICAgbV9l
bmRlZCA9IHRydWU7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2F1ZGlvU3RyZWFtU291
cmNlcy5zaXplKCk7IGkrKykKKyAgICAgICAgbV9hdWRpb1N0cmVhbVNvdXJjZXNbaV0tPnNldFJl
YWR5U3RhdGUoTWVkaWFTdHJlYW1Tb3VyY2U6OkVuZGVkKTsKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1fdmlkZW9TdHJlYW1Tb3VyY2VzLnNpemUoKTsgaSsrKQorICAgICAgICBtX3ZpZGVv
U3RyZWFtU291cmNlc1tpXS0+c2V0UmVhZHlTdGF0ZShNZWRpYVN0cmVhbVNvdXJjZTo6RW5kZWQp
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbURlc2NyaXB0b3IuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbURlc2NyaXB0b3Iu
aAkocmV2aXNpb24gMTU2NDU5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vTWVkaWFTdHJlYW1EZXNjcmlwdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDkgKzM0LDcg
QEAKIAogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAKLSNpbmNsdWRlICJNZWRpYVN0cmVhbUNv
bXBvbmVudC5oIgogI2luY2x1ZGUgIk1lZGlhU3RyZWFtU291cmNlLmgiCi0jaW5jbHVkZSAiVVVJ
RC5oIgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgogCkBAIC00Niw1NiArNDQsNDUgQEAgY2xhc3MgTWVkaWFTdHJlYW1EZXNjcmlwdG9yQ2xpZW50
IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5NZWRpYVN0cmVhbURlc2NyaXB0b3JDbGllbnQoKSB7
IH0KIAotICAgIHZpcnR1YWwgdm9pZCB0cmFja0VuZGVkKCkgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCBzdHJlYW1FbmRlZCgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgYWRkUmVtb3RlVHJhY2soTWVk
aWFTdHJlYW1Db21wb25lbnQqKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZVJlbW90ZVRy
YWNrKE1lZGlhU3RyZWFtQ29tcG9uZW50KikgPSAwOworICAgIHZpcnR1YWwgdm9pZCB0cmFja0Rp
ZEVuZCgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtRGlkRW5kKCkgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBhZGRSZW1vdGVTb3VyY2UoTWVkaWFTdHJlYW1Tb3VyY2UqKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIHJlbW92ZVJlbW90ZVNvdXJjZShNZWRpYVN0cmVhbVNvdXJjZSopID0gMDsK
IH07CiAKIGNsYXNzIE1lZGlhU3RyZWFtRGVzY3JpcHRvciA6IHB1YmxpYyBSZWZDb3VudGVkPE1l
ZGlhU3RyZWFtRGVzY3JpcHRvcj4gewogcHVibGljOgotICAgIGNsYXNzIEV4dHJhRGF0YSA6IHB1
YmxpYyBSZWZDb3VudGVkPEV4dHJhRGF0YT4gewotICAgIHB1YmxpYzoKLSAgICAgICAgdmlydHVh
bCB+RXh0cmFEYXRhKCkgeyB9Ci0gICAgfTsKIAogICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1lZGlh
U3RyZWFtRGVzY3JpcHRvcj4gY3JlYXRlKGNvbnN0IE1lZGlhU3RyZWFtU291cmNlVmVjdG9yJiBh
dWRpb1NvdXJjZXMsIGNvbnN0IE1lZGlhU3RyZWFtU291cmNlVmVjdG9yJiB2aWRlb1NvdXJjZXMp
OwotICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1lZGlhU3RyZWFtRGVzY3JpcHRvcj4gY3JlYXRlKGNv
bnN0IE1lZGlhU3RyZWFtQ29tcG9uZW50VmVjdG9yJiBhdWRpb0NvbXBvbmVudHMsIGNvbnN0IE1l
ZGlhU3RyZWFtQ29tcG9uZW50VmVjdG9yJiB2aWRlb0NvbXBvbmVudHMpOwogCiAgICAgTWVkaWFT
dHJlYW1EZXNjcmlwdG9yQ2xpZW50KiBjbGllbnQoKSBjb25zdCB7IHJldHVybiBtX2NsaWVudDsg
fQogICAgIHZvaWQgc2V0Q2xpZW50KE1lZGlhU3RyZWFtRGVzY3JpcHRvckNsaWVudCogY2xpZW50
KSB7IG1fY2xpZW50ID0gY2xpZW50OyB9CiAKICAgICBTdHJpbmcgaWQoKSBjb25zdCB7IHJldHVy
biBtX2lkOyB9CiAKLSAgICB1bnNpZ25lZCBudW1iZXJPZkF1ZGlvQ29tcG9uZW50cygpIGNvbnN0
IHsgcmV0dXJuIG1fYXVkaW9Db21wb25lbnRzLnNpemUoKTsgfQotICAgIE1lZGlhU3RyZWFtQ29t
cG9uZW50KiBhdWRpb0NvbXBvbmVudCh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9h
dWRpb0NvbXBvbmVudHNbaW5kZXhdLmdldCgpOyB9CisgICAgdW5zaWduZWQgbnVtYmVyT2ZBdWRp
b1N0cmVhbXMoKSBjb25zdCB7IHJldHVybiBtX2F1ZGlvU3RyZWFtU291cmNlcy5zaXplKCk7IH0K
KyAgICBNZWRpYVN0cmVhbVNvdXJjZSogYXVkaW9TdHJlYW1zKHVuc2lnbmVkIGluZGV4KSBjb25z
dCB7IHJldHVybiBtX2F1ZGlvU3RyZWFtU291cmNlc1tpbmRleF0uZ2V0KCk7IH0KIAotICAgIHVu
c2lnbmVkIG51bWJlck9mVmlkZW9Db21wb25lbnRzKCkgY29uc3QgeyByZXR1cm4gbV92aWRlb0Nv
bXBvbmVudHMuc2l6ZSgpOyB9Ci0gICAgTWVkaWFTdHJlYW1Db21wb25lbnQqIHZpZGVvQ29tcG9u
ZW50KHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX3ZpZGVvQ29tcG9uZW50c1tpbmRl
eF0uZ2V0KCk7IH0KKyAgICB1bnNpZ25lZCBudW1iZXJPZlZpZGVvU3RyZWFtcygpIGNvbnN0IHsg
cmV0dXJuIG1fdmlkZW9TdHJlYW1Tb3VyY2VzLnNpemUoKTsgfQorICAgIE1lZGlhU3RyZWFtU291
cmNlKiB2aWRlb1N0cmVhbXModW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fdmlkZW9T
dHJlYW1Tb3VyY2VzW2luZGV4XS5nZXQoKTsgfQogCi0gICAgdm9pZCBhZGRDb21wb25lbnQoUGFz
c1JlZlB0cjxNZWRpYVN0cmVhbUNvbXBvbmVudD4pOwotICAgIHZvaWQgcmVtb3ZlQ29tcG9uZW50
KFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1Db21wb25lbnQ+KTsKKyAgICB2b2lkIGFkZFNvdXJjZShQ
YXNzUmVmUHRyPE1lZGlhU3RyZWFtU291cmNlPik7CisgICAgdm9pZCByZW1vdmVTb3VyY2UoUGFz
c1JlZlB0cjxNZWRpYVN0cmVhbVNvdXJjZT4pOwogCi0gICAgdm9pZCBhZGRSZW1vdGVUcmFjayhN
ZWRpYVN0cmVhbUNvbXBvbmVudCopOwotICAgIHZvaWQgcmVtb3ZlUmVtb3RlVHJhY2soTWVkaWFT
dHJlYW1Db21wb25lbnQqKTsKKyAgICB2b2lkIGFkZFJlbW90ZVNvdXJjZShNZWRpYVN0cmVhbVNv
dXJjZSopOworICAgIHZvaWQgcmVtb3ZlUmVtb3RlU291cmNlKE1lZGlhU3RyZWFtU291cmNlKik7
CiAKICAgICBib29sIGVuZGVkKCkgY29uc3QgeyByZXR1cm4gbV9lbmRlZDsgfQotICAgIHZvaWQg
c2V0RW5kZWQoKSB7IG1fZW5kZWQgPSB0cnVlOyB9Ci0KLSAgICBQYXNzUmVmUHRyPEV4dHJhRGF0
YT4gZXh0cmFEYXRhKCkgY29uc3QgeyByZXR1cm4gbV9leHRyYURhdGE7IH0KLSAgICB2b2lkIHNl
dEV4dHJhRGF0YShQYXNzUmVmUHRyPEV4dHJhRGF0YT4gZXh0cmFEYXRhKSB7IG1fZXh0cmFEYXRh
ID0gZXh0cmFEYXRhOyB9CisgICAgdm9pZCBzZXRFbmRlZCgpOwogCiBwcml2YXRlOgogICAgIE1l
ZGlhU3RyZWFtRGVzY3JpcHRvcihjb25zdCBTdHJpbmcmIGlkLCBjb25zdCBNZWRpYVN0cmVhbVNv
dXJjZVZlY3RvciYgYXVkaW9Tb3VyY2VzLCBjb25zdCBNZWRpYVN0cmVhbVNvdXJjZVZlY3RvciYg
dmlkZW9Tb3VyY2VzKTsKLSAgICBNZWRpYVN0cmVhbURlc2NyaXB0b3IoY29uc3QgU3RyaW5nJiBp
ZCwgY29uc3QgTWVkaWFTdHJlYW1Db21wb25lbnRWZWN0b3ImIGF1ZGlvQ29tcG9uZW50cywgY29u
c3QgTWVkaWFTdHJlYW1Db21wb25lbnRWZWN0b3ImIHZpZGVvQ29tcG9uZW50cyk7CiAKICAgICBN
ZWRpYVN0cmVhbURlc2NyaXB0b3JDbGllbnQqIG1fY2xpZW50OwogICAgIFN0cmluZyBtX2lkOwot
ICAgIFZlY3RvcjxSZWZQdHI8TWVkaWFTdHJlYW1Db21wb25lbnQ+ID4gbV9hdWRpb0NvbXBvbmVu
dHM7Ci0gICAgVmVjdG9yPFJlZlB0cjxNZWRpYVN0cmVhbUNvbXBvbmVudD4gPiBtX3ZpZGVvQ29t
cG9uZW50czsKKyAgICBWZWN0b3I8UmVmUHRyPE1lZGlhU3RyZWFtU291cmNlPiA+IG1fYXVkaW9T
dHJlYW1Tb3VyY2VzOworICAgIFZlY3RvcjxSZWZQdHI8TWVkaWFTdHJlYW1Tb3VyY2U+ID4gbV92
aWRlb1N0cmVhbVNvdXJjZXM7CiAgICAgYm9vbCBtX2VuZGVkOwotCi0gICAgUmVmUHRyPEV4dHJh
RGF0YT4gbV9leHRyYURhdGE7CiB9OwogCiB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8TWVkaWFTdHJl
YW1EZXNjcmlwdG9yPiA+IE1lZGlhU3RyZWFtRGVzY3JpcHRvclZlY3RvcjsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtU291cmNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVh
bVNvdXJjZS5jcHAJKHJldmlzaW9uIDE1NjQ1OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL01lZGlhU3RyZWFtU291cmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMs
NiArMzMsOCBAQAogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAKICNpbmNsdWRlICJNZWRpYVN0
cmVhbVNvdXJjZS5oIgorCisjaW5jbHVkZSAiQXVkaW9EZXN0aW5hdGlvbkNvbnN1bWVyLmgiCiAj
aW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDcs
MTcgKzQ5LDIxIEBAIE1lZGlhU3RyZWFtU291cmNlOjpNZWRpYVN0cmVhbVNvdXJjZShjb24KICAg
ICAsIG1fdHlwZSh0eXBlKQogICAgICwgbV9uYW1lKG5hbWUpCiAgICAgLCBtX3JlYWR5U3RhdGUo
cmVhZHlTdGF0ZSkKKyAgICAsIG1fc3RyZWFtKDApCiAgICAgLCBtX3JlcXVpcmVzQ29uc3VtZXIo
cmVxdWlyZXNDb25zdW1lcikKKyAgICAsIG1fZW5hYmxlZCh0cnVlKQorICAgICwgbV9tdXRlZChm
YWxzZSkKIHsKIH0KIAogdm9pZCBNZWRpYVN0cmVhbVNvdXJjZTo6c2V0UmVhZHlTdGF0ZShSZWFk
eVN0YXRlIHJlYWR5U3RhdGUpCiB7Ci0gICAgaWYgKG1fcmVhZHlTdGF0ZSAhPSBSZWFkeVN0YXRl
RW5kZWQgJiYgbV9yZWFkeVN0YXRlICE9IHJlYWR5U3RhdGUpIHsKLSAgICAgICAgbV9yZWFkeVN0
YXRlID0gcmVhZHlTdGF0ZTsKLSAgICAgICAgZm9yIChWZWN0b3I8T2JzZXJ2ZXIqPjo6aXRlcmF0
b3IgaSA9IG1fb2JzZXJ2ZXJzLmJlZ2luKCk7IGkgIT0gbV9vYnNlcnZlcnMuZW5kKCk7ICsraSkK
LSAgICAgICAgICAgICgqaSktPnNvdXJjZUNoYW5nZWRTdGF0ZSgpOwotICAgIH0KKyAgICBpZiAo
bV9yZWFkeVN0YXRlID09IEVuZGVkIHx8IG1fcmVhZHlTdGF0ZSA9PSByZWFkeVN0YXRlKQorICAg
ICAgICByZXR1cm47CisKKyAgICBtX3JlYWR5U3RhdGUgPSByZWFkeVN0YXRlOworICAgIGZvciAo
VmVjdG9yPE9ic2VydmVyKj46Oml0ZXJhdG9yIGkgPSBtX29ic2VydmVycy5iZWdpbigpOyBpICE9
IG1fb2JzZXJ2ZXJzLmVuZCgpOyArK2kpCisgICAgICAgICgqaSktPnNvdXJjZUNoYW5nZWRTdGF0
ZSgpOwogfQogCiB2b2lkIE1lZGlhU3RyZWFtU291cmNlOjphZGRPYnNlcnZlcihNZWRpYVN0cmVh
bVNvdXJjZTo6T2JzZXJ2ZXIqIG9ic2VydmVyKQpAQCAtNzIsNiArNzgsMjIgQEAgdm9pZCBNZWRp
YVN0cmVhbVNvdXJjZTo6cmVtb3ZlT2JzZXJ2ZXIoTQogICAgICAgICBtX29ic2VydmVycy5yZW1v
dmUocG9zKTsKIH0KIAordm9pZCBNZWRpYVN0cmVhbVNvdXJjZTo6c2V0U3RyZWFtKE1lZGlhU3Ry
ZWFtRGVzY3JpcHRvciogc3RyZWFtKQoreworICAgIEFTU0VSVCghbV9zdHJlYW0gJiYgc3RyZWFt
KTsKKyAgICBtX3N0cmVhbSA9IHN0cmVhbTsKK30KKwordm9pZCBNZWRpYVN0cmVhbVNvdXJjZTo6
c2V0TXV0ZWQoYm9vbCBtdXRlZCkKK3sKKyAgICBpZiAobV9tdXRlZCA9PSBtdXRlZCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgbV9tdXRlZCA9IG11dGVkOworICAgIGZvciAoVmVjdG9yPE9ic2Vy
dmVyKj46Oml0ZXJhdG9yIGkgPSBtX29ic2VydmVycy5iZWdpbigpOyBpICE9IG1fb2JzZXJ2ZXJz
LmVuZCgpOyArK2kpCisgICAgICAgICgqaSktPnNvdXJjZUNoYW5nZWRTdGF0ZSgpOworfQorCiB2
b2lkIE1lZGlhU3RyZWFtU291cmNlOjphZGRBdWRpb0NvbnN1bWVyKFBhc3NSZWZQdHI8QXVkaW9E
ZXN0aW5hdGlvbkNvbnN1bWVyPiBjb25zdW1lcikKIHsKICAgICBBU1NFUlQobV9yZXF1aXJlc0Nv
bnN1bWVyKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlh
U3RyZWFtU291cmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vTWVkaWFTdHJlYW1Tb3VyY2UuaAkocmV2aXNpb24gMTU2NDU5KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1Tb3VyY2UuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDIsNiArNDIsOSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNz
IEF1ZGlvQnVzOworY2xhc3MgTWVkaWFTdHJlYW1EZXNjcmlwdG9yOworCiBjbGFzcyBNZWRpYVN0
cmVhbVNvdXJjZSA6IHB1YmxpYyBSZWZDb3VudGVkPE1lZGlhU3RyZWFtU291cmNlPiB7CiBwdWJs
aWM6CiAgICAgY2xhc3MgT2JzZXJ2ZXIgewpAQCAtNTAsMjUgKzUzLDEzIEBAIHB1YmxpYzoKICAg
ICAgICAgdmlydHVhbCB2b2lkIHNvdXJjZUNoYW5nZWRTdGF0ZSgpID0gMDsKICAgICB9OwogCi0g
ICAgY2xhc3MgRXh0cmFEYXRhIDogcHVibGljIFJlZkNvdW50ZWQ8RXh0cmFEYXRhPiB7Ci0gICAg
cHVibGljOgotICAgICAgICB2aXJ0dWFsIH5FeHRyYURhdGEoKSB7IH0KLSAgICB9OwotCi0gICAg
ZW51bSBUeXBlIHsKLSAgICAgICAgVHlwZUF1ZGlvLAotICAgICAgICBUeXBlVmlkZW8KLSAgICB9
OwotCi0gICAgZW51bSBSZWFkeVN0YXRlIHsKLSAgICAgICAgUmVhZHlTdGF0ZUxpdmUgPSAwLAot
ICAgICAgICBSZWFkeVN0YXRlTXV0ZWQgPSAxLAotICAgICAgICBSZWFkeVN0YXRlRW5kZWQgPSAy
Ci0gICAgfTsKKyAgICBlbnVtIFR5cGUgeyBBdWRpbywgVmlkZW8gfTsKKyAgICBlbnVtIFJlYWR5
U3RhdGUgeyBOZXcgPSAwLCBMaXZlID0gMSwgRW5kZWQgPSAyIH07CiAKLSAgICBzdGF0aWMgUGFz
c1JlZlB0cjxNZWRpYVN0cmVhbVNvdXJjZT4gY3JlYXRlKGNvbnN0IFN0cmluZyYgaWQsIFR5cGUs
IGNvbnN0IFN0cmluZyYgbmFtZSwgUmVhZHlTdGF0ZSA9IFJlYWR5U3RhdGVMaXZlLCBib29sIHJl
cXVpcmVzQ29uc3VtZXIgPSBmYWxzZSk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8TWVkaWFTdHJl
YW1Tb3VyY2U+IGNyZWF0ZShjb25zdCBTdHJpbmcmIGlkLCBUeXBlLCBjb25zdCBTdHJpbmcmIG5h
bWUsIFJlYWR5U3RhdGUgPSBOZXcsIGJvb2wgcmVxdWlyZXNDb25zdW1lciA9IGZhbHNlKTsKIAog
ICAgIGNvbnN0IFN0cmluZyYgaWQoKSBjb25zdCB7IHJldHVybiBtX2lkOyB9CisKICAgICBUeXBl
IHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KICAgICBjb25zdCBTdHJpbmcmIG5hbWUo
KSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KIApAQCAtNzgsMjIgKzY5LDI4IEBAIHB1YmxpYzoK
ICAgICB2b2lkIGFkZE9ic2VydmVyKE9ic2VydmVyKik7CiAgICAgdm9pZCByZW1vdmVPYnNlcnZl
cihPYnNlcnZlciopOwogCi0gICAgUGFzc1JlZlB0cjxFeHRyYURhdGE+IGV4dHJhRGF0YSgpIGNv
bnN0IHsgcmV0dXJuIG1fZXh0cmFEYXRhOyB9Ci0gICAgdm9pZCBzZXRFeHRyYURhdGEoUGFzc1Jl
ZlB0cjxFeHRyYURhdGE+IGV4dHJhRGF0YSkgeyBtX2V4dHJhRGF0YSA9IGV4dHJhRGF0YTsgfQot
CiAgICAgdm9pZCBzZXRDb25zdHJhaW50cyhQYXNzUmVmUHRyPE1lZGlhQ29uc3RyYWludHM+IGNv
bnN0cmFpbnRzKSB7IG1fY29uc3RyYWludHMgPSBjb25zdHJhaW50czsgfQotICAgIE1lZGlhQ29u
c3RyYWludHMqIGNvbnN0cmFpbnRzKCkgeyByZXR1cm4gbV9jb25zdHJhaW50cy5nZXQoKTsgfQor
ICAgIE1lZGlhQ29uc3RyYWludHMqIGNvbnN0cmFpbnRzKCkgY29uc3QgeyByZXR1cm4gbV9jb25z
dHJhaW50cy5nZXQoKTsgfQogCi0gICAgY29uc3QgU3RyaW5nJiBkZXZpY2VJZCgpIHsgcmV0dXJu
IG1fZGV2aWNlSWQ7IH0KKyAgICBjb25zdCBTdHJpbmcmIGRldmljZUlkKCkgY29uc3QgeyByZXR1
cm4gbV9kZXZpY2VJZDsgfQogICAgIHZvaWQgc2V0RGV2aWNlSWQoY29uc3QgU3RyaW5nJiBkZXZp
Y2VJZCkgeyBtX2RldmljZUlkID0gZGV2aWNlSWQ7IH0KIAorICAgIGJvb2wgZW5hYmxlZCgpIGNv
bnN0IHsgcmV0dXJuIG1fZW5hYmxlZDsgfQorICAgIHZvaWQgc2V0RW5hYmxlZChib29sIGVuYWJs
ZWQpIHsgbV9lbmFibGVkID0gZW5hYmxlZDsgfQorCisgICAgYm9vbCBtdXRlZCgpIGNvbnN0IHsg
cmV0dXJuIG1fbXV0ZWQ7IH0KKyAgICB2b2lkIHNldE11dGVkKGJvb2wpOworICAgIAogICAgIHZv
aWQgc2V0QXVkaW9Gb3JtYXQoc2l6ZV90IG51bWJlck9mQ2hhbm5lbHMsIGZsb2F0IHNhbXBsZVJh
dGUpOwogICAgIHZvaWQgY29uc3VtZUF1ZGlvKEF1ZGlvQnVzKiwgc2l6ZV90IG51bWJlck9mRnJh
bWVzKTsKIAorICAgIE1lZGlhU3RyZWFtRGVzY3JpcHRvciogc3RyZWFtKCkgY29uc3QgeyByZXR1
cm4gbV9zdHJlYW07IH0KKyAgICB2b2lkIHNldFN0cmVhbShNZWRpYVN0cmVhbURlc2NyaXB0b3Iq
KTsKKwogICAgIGJvb2wgcmVxdWlyZXNBdWRpb0NvbnN1bWVyKCkgY29uc3QgeyByZXR1cm4gbV9y
ZXF1aXJlc0NvbnN1bWVyOyB9CiAgICAgdm9pZCBhZGRBdWRpb0NvbnN1bWVyKFBhc3NSZWZQdHI8
QXVkaW9EZXN0aW5hdGlvbkNvbnN1bWVyPik7CiAgICAgYm9vbCByZW1vdmVBdWRpb0NvbnN1bWVy
KEF1ZGlvRGVzdGluYXRpb25Db25zdW1lciopOwotICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8QXVk
aW9EZXN0aW5hdGlvbkNvbnN1bWVyPiA+JiBhdWRpb0NvbnN1bWVycygpIHsgcmV0dXJuIG1fYXVk
aW9Db25zdW1lcnM7IH0KKyAgICBjb25zdCBWZWN0b3I8UmVmUHRyPEF1ZGlvRGVzdGluYXRpb25D
b25zdW1lcj4gPiYgYXVkaW9Db25zdW1lcnMoKSBjb25zdCB7IHJldHVybiBtX2F1ZGlvQ29uc3Vt
ZXJzOyB9CiAKIHByaXZhdGU6CiAgICAgTWVkaWFTdHJlYW1Tb3VyY2UoY29uc3QgU3RyaW5nJiBp
ZCwgVHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lLCBSZWFkeVN0YXRlLCBib29sIHJlcXVpcmVzQ29u
c3VtZXIpOwpAQCAtMTAzLDEyICsxMDAsMTUgQEAgcHJpdmF0ZToKICAgICBTdHJpbmcgbV9uYW1l
OwogICAgIFJlYWR5U3RhdGUgbV9yZWFkeVN0YXRlOwogICAgIFN0cmluZyBtX2RldmljZUlkOwot
ICAgIGJvb2wgbV9yZXF1aXJlc0NvbnN1bWVyOwogICAgIFZlY3RvcjxPYnNlcnZlcio+IG1fb2Jz
ZXJ2ZXJzOwogICAgIE11dGV4IG1fYXVkaW9Db25zdW1lcnNMb2NrOwotICAgIFZlY3RvcjxSZWZQ
dHI8QXVkaW9EZXN0aW5hdGlvbkNvbnN1bWVyPiA+IG1fYXVkaW9Db25zdW1lcnM7Ci0gICAgUmVm
UHRyPEV4dHJhRGF0YT4gbV9leHRyYURhdGE7CisgICAgVmVjdG9yPFJlZlB0cjxBdWRpb0Rlc3Rp
bmF0aW9uQ29uc3VtZXI+PiBtX2F1ZGlvQ29uc3VtZXJzOwogICAgIFJlZlB0cjxNZWRpYUNvbnN0
cmFpbnRzPiBtX2NvbnN0cmFpbnRzOworICAgIE1lZGlhU3RyZWFtRGVzY3JpcHRvciogbV9zdHJl
YW07CisKKyAgICBib29sIG1fcmVxdWlyZXNDb25zdW1lcjsKKyAgICBib29sIG1fZW5hYmxlZDsK
KyAgICBib29sIG1fbXV0ZWQ7CiB9OwogCiB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8TWVkaWFTdHJl
YW1Tb3VyY2U+ID4gTWVkaWFTdHJlYW1Tb3VyY2VWZWN0b3I7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVNvdXJjZXNRdWVyeUNsaWVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3Ry
ZWFtU291cmNlc1F1ZXJ5Q2xpZW50LmgJKHJldmlzaW9uIDE1NjQ1OSkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtU291cmNlc1F1ZXJ5Q2xpZW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNTkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MSBFcmljc3NvbiBBQi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
MiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiAgICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0g
KiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEVyaWNzc29uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNv
bnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0gKiAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAot
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgTWVkaWFTdHJlYW1T
b3VyY2VzUXVlcnlDbGllbnRfaAotI2RlZmluZSBNZWRpYVN0cmVhbVNvdXJjZXNRdWVyeUNsaWVu
dF9oCi0KLSNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQotCi0jaW5jbHVkZSAiTWVkaWFTdHJlYW1T
b3VyY2UuaCIKLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgTWVkaWFDb25zdHJhaW50
czsKLQotY2xhc3MgTWVkaWFTdHJlYW1Tb3VyY2VzUXVlcnlDbGllbnQgOiBwdWJsaWMgUmVmQ291
bnRlZDxNZWRpYVN0cmVhbVNvdXJjZXNRdWVyeUNsaWVudD4gewotcHVibGljOgotICAgIHZpcnR1
YWwgfk1lZGlhU3RyZWFtU291cmNlc1F1ZXJ5Q2xpZW50KCkgeyB9Ci0KLSAgICB2aXJ0dWFsIFBh
c3NSZWZQdHI8TWVkaWFDb25zdHJhaW50cz4gYXVkaW9Db25zdHJhaW50cygpIGNvbnN0ID0gMDsK
LSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8TWVkaWFDb25zdHJhaW50cz4gdmlkZW9Db25zdHJhaW50
cygpIGNvbnN0ID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBkaWRDb21wbGV0ZVF1ZXJ5KGNvbnN0
IE1lZGlhU3RyZWFtU291cmNlVmVjdG9yJiBhdWRpb1NvdXJjZXMsIGNvbnN0IE1lZGlhU3RyZWFt
U291cmNlVmVjdG9yJiB2aWRlb1NvdXJjZXMpID0gMDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCi0KLSNlbmRpZiAvLyBNZWRp
YVN0cmVhbVNvdXJjZXNRdWVyeUNsaWVudF9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbkhhbmRsZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbkhhbmRs
ZXIuaAkocmV2aXNpb24gMTU2NDU5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vUlRDUGVlckNvbm5lY3Rpb25IYW5kbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcg
KzQwLDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgTWVkaWFDb25zdHJhaW50czsK
LWNsYXNzIE1lZGlhU3RyZWFtQ29tcG9uZW50OworY2xhc3MgTWVkaWFTdHJlYW1Tb3VyY2U7CiBj
bGFzcyBSVENDb25maWd1cmF0aW9uOwogY2xhc3MgUlRDRFRNRlNlbmRlckhhbmRsZXI7CiBjbGFz
cyBSVENEYXRhQ2hhbm5lbEhhbmRsZXI7CkBAIC04Niw3ICs4Niw3IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIHZvaWQgcmVtb3ZlU3RyZWFtKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1EZXNjcmlwdG9y
PikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBnZXRTdGF0cyhQYXNzUmVmUHRyPFJUQ1N0YXRzUmVx
dWVzdD4pID0gMDsKICAgICB2aXJ0dWFsIFBhc3NPd25QdHI8UlRDRGF0YUNoYW5uZWxIYW5kbGVy
PiBjcmVhdGVEYXRhQ2hhbm5lbChjb25zdCBTdHJpbmcmIGxhYmVsLCBjb25zdCBSVENEYXRhQ2hh
bm5lbEluaXQmKSA9IDA7Ci0gICAgdmlydHVhbCBQYXNzT3duUHRyPFJUQ0RUTUZTZW5kZXJIYW5k
bGVyPiBjcmVhdGVEVE1GU2VuZGVyKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1Db21wb25lbnQ+KSA9
IDA7CisgICAgdmlydHVhbCBQYXNzT3duUHRyPFJUQ0RUTUZTZW5kZXJIYW5kbGVyPiBjcmVhdGVE
VE1GU2VuZGVyKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1Tb3VyY2U+KSA9IDA7CiAgICAgdmlydHVh
bCB2b2lkIHN0b3AoKSA9IDA7CiAKIHByb3RlY3RlZDoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL1JUQ1N0YXRzUmVxdWVzdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JUQ1N0YXRzUmVxdWVzdC5oCShyZXZpc2lv
biAxNTY0NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SVENTdGF0
c1JlcXVlc3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNiBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCBQYXNzUmVmUHRyPFJUQ1N0YXRzUmVzcG9uc2VCYXNlPiBjcmVhdGVSZXNwb25zZSgp
ID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgaGFzU2VsZWN0b3IoKSA9IDA7CiAgICAgdmlydHVhbCBN
ZWRpYVN0cmVhbURlc2NyaXB0b3IqIHN0cmVhbSgpID0gMDsKLSAgICB2aXJ0dWFsIE1lZGlhU3Ry
ZWFtQ29tcG9uZW50KiBjb21wb25lbnQoKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHJlcXVlc3RT
dWNjZWVkZWQoUGFzc1JlZlB0cjxSVENTdGF0c1Jlc3BvbnNlQmFzZT4pID0gMDsKIAogcHJvdGVj
dGVkOgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vYmxhY2tiZXJy
eS9NZWRpYVN0cmVhbUNlbnRlckJsYWNrQmVycnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2JsYWNrYmVycnkvTWVkaWFTdHJlYW1DZW50ZXJC
bGFja0JlcnJ5LmNwcAkocmV2aXNpb24gMTU2NDU5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vYmxhY2tiZXJyeS9NZWRpYVN0cmVhbUNlbnRlckJsYWNrQmVycnkuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotTWVkaWFTdHJlYW1DZW50ZXImIE1lZGlhU3RyZWFtQ2VudGVyOjppbnN0YW5jZSgpCitNZWRp
YVN0cmVhbUNlbnRlciYgTWVkaWFTdHJlYW1DZW50ZXI6OnNoYXJlZCgpCiB7CiAgICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKE1lZGlhU3RyZWFtQ2Vu
dGVyQmxhY2tCZXJyeSwgY2VudGVyLCAoKSk7CkBAIC01NiwzNyArNTYsNDcgQEAgTWVkaWFTdHJl
YW1DZW50ZXJCbGFja0JlcnJ5Ojp+TWVkaWFTdHJlYQogewogfQogCi12b2lkIE1lZGlhU3RyZWFt
Q2VudGVyQmxhY2tCZXJyeTo6cXVlcnlNZWRpYVN0cmVhbVNvdXJjZXMoUGFzc1JlZlB0cjxNZWRp
YVN0cmVhbVNvdXJjZXNRdWVyeUNsaWVudD4gY2xpZW50KQordm9pZCBNZWRpYVN0cmVhbUNlbnRl
ckJsYWNrQmVycnk6OnZhbGlkYXRlUmVxdWVzdENvbnN0cmFpbnRzKFBhc3NSZWZQdHI8TWVkaWFT
dHJlYW1DcmVhdGlvbkNsaWVudD4sIFBhc3NSZWZQdHI8TWVkaWFDb25zdHJhaW50cz4sIFBhc3NS
ZWZQdHI8TWVkaWFDb25zdHJhaW50cz4pCiB7Ci0gICAgTWVkaWFTdHJlYW1Tb3VyY2VWZWN0b3Ig
YXVkaW9Tb3VyY2VzLCB2aWRlb1NvdXJjZXM7Ci0gICAgY2xpZW50LT5kaWRDb21wbGV0ZVF1ZXJ5
KGF1ZGlvU291cmNlcywgdmlkZW9Tb3VyY2VzKTsKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQor
ICAgIAordm9pZCBNZWRpYVN0cmVhbUNlbnRlckJsYWNrQmVycnk6OmNyZWF0ZU1lZGlhU3RyZWFt
KFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1DcmVhdGlvbkNsaWVudD4sIFBhc3NSZWZQdHI8TWVkaWFD
b25zdHJhaW50cz4sIFBhc3NSZWZQdHI8TWVkaWFDb25zdHJhaW50cz4pCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKIH0KIAotYm9vbCBNZWRpYVN0cmVhbUNlbnRlck1hYzo6Z2V0TWVkaWFTdHJl
YW1UcmFja1NvdXJjZXMoUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVRyYWNrU291cmNlc1JlcXVlc3RD
bGllbnQ+KQorYm9vbCBNZWRpYVN0cmVhbUNlbnRlckJsYWNrQmVycnk6OmdldE1lZGlhU3RyZWFt
VHJhY2tTb3VyY2VzKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1UcmFja1NvdXJjZXNSZXF1ZXN0Q2xp
ZW50PikKIHsKKyAgICBub3RJbXBsZW1lbnRlZCgpOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAot
dm9pZCBNZWRpYVN0cmVhbUNlbnRlckJsYWNrQmVycnk6OmRpZFNldE1lZGlhU3RyZWFtVHJhY2tF
bmFibGVkKE1lZGlhU3RyZWFtRGVzY3JpcHRvciosIE1lZGlhU3RyZWFtQ29tcG9uZW50KikKK3Zv
aWQgTWVkaWFTdHJlYW1DZW50ZXJCbGFja0JlcnJ5OjpkaWRTZXRNZWRpYVN0cmVhbVRyYWNrRW5h
YmxlZChNZWRpYVN0cmVhbVNvdXJjZSopCiB7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAot
Ym9vbCBNZWRpYVN0cmVhbUNlbnRlckJsYWNrQmVycnk6OmRpZEFkZE1lZGlhU3RyZWFtVHJhY2so
TWVkaWFTdHJlYW1EZXNjcmlwdG9yKiwgTWVkaWFTdHJlYW1Db21wb25lbnQqKQorYm9vbCBNZWRp
YVN0cmVhbUNlbnRlckJsYWNrQmVycnk6OmRpZEFkZE1lZGlhU3RyZWFtVHJhY2soTWVkaWFTdHJl
YW1Tb3VyY2UqKQogeworICAgIG5vdEltcGxlbWVudGVkKCk7CiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCi1ib29sIE1lZGlhU3RyZWFtQ2VudGVyQmxhY2tCZXJyeTo6ZGlkUmVtb3ZlTWVkaWFTdHJl
YW1UcmFjayhNZWRpYVN0cmVhbURlc2NyaXB0b3IqLCBNZWRpYVN0cmVhbUNvbXBvbmVudCopCiti
b29sIE1lZGlhU3RyZWFtQ2VudGVyQmxhY2tCZXJyeTo6ZGlkUmVtb3ZlTWVkaWFTdHJlYW1UcmFj
ayhNZWRpYVN0cmVhbVNvdXJjZSopCiB7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKLXZvaWQgTWVkaWFTdHJlYW1DZW50ZXJCbGFja0JlcnJ5OjpkaWRTdG9w
TG9jYWxNZWRpYVN0cmVhbShNZWRpYVN0cmVhbURlc2NyaXB0b3IqKQordm9pZCBNZWRpYVN0cmVh
bUNlbnRlckJsYWNrQmVycnk6OmRpZFN0b3BMb2NhbE1lZGlhU3RyZWFtKE1lZGlhU3RyZWFtRGVz
Y3JpcHRvciogc3RyZWFtKQogeworICAgIGVuZExvY2FsTWVkaWFTdHJlYW0oc3RyZWFtKTsKIH0K
IAogdm9pZCBNZWRpYVN0cmVhbUNlbnRlckJsYWNrQmVycnk6OmRpZENyZWF0ZU1lZGlhU3RyZWFt
KE1lZGlhU3RyZWFtRGVzY3JpcHRvciopCiB7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vYmxhY2tiZXJyeS9NZWRpYVN0cmVhbUNlbnRlckJsYWNrQmVycnkuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9ibGFja2JlcnJ5L01l
ZGlhU3RyZWFtQ2VudGVyQmxhY2tCZXJyeS5oCShyZXZpc2lvbiAxNTY0NTkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9ibGFja2JlcnJ5L01lZGlhU3RyZWFtQ2VudGVy
QmxhY2tCZXJyeS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw4ICs0MSw4IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotY2xhc3MgTWVkaWFTdHJlYW1Db21wb25lbnQ7CiBjbGFzcyBNZWRpYVN0
cmVhbURlc2NyaXB0b3I7CitjbGFzcyBNZWRpYVN0cmVhbVNvdXJjZTsKIGNsYXNzIE1lZGlhU3Ry
ZWFtU291cmNlc1F1ZXJ5Q2xpZW50OwogCiBjbGFzcyBNZWRpYVN0cmVhbUNlbnRlckJsYWNrQmVy
cnkgOiBwdWJsaWMgTWVkaWFTdHJlYW1DZW50ZXIgewpAQCAtNTEsMTEgKzUxLDEyIEBAIHB1Ymxp
YzoKICAgICB+TWVkaWFTdHJlYW1DZW50ZXJCbGFja0JlcnJ5KCk7CiAKICAgICAvLyBNZWRpYVN0
cmVhbUNlbnRlcgotICAgIHZpcnR1YWwgdm9pZCBxdWVyeU1lZGlhU3RyZWFtU291cmNlcyhQYXNz
UmVmUHRyPE1lZGlhU3RyZWFtU291cmNlc1F1ZXJ5Q2xpZW50PikgT1ZFUlJJREU7CisgICAgdmly
dHVhbCB2b2lkIHZhbGlkYXRlUmVxdWVzdENvbnN0cmFpbnRzKFBhc3NSZWZQdHI8TWVkaWFTdHJl
YW1DcmVhdGlvbkNsaWVudD4sIFBhc3NSZWZQdHI8TWVkaWFDb25zdHJhaW50cz4gYXVkaW9Db25z
dHJhaW50cywgUGFzc1JlZlB0cjxNZWRpYUNvbnN0cmFpbnRzPiB2aWRlb0NvbnN0cmFpbnRzKTsK
KyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlTWVkaWFTdHJlYW0oUGFzc1JlZlB0cjxNZWRpYVN0cmVh
bUNyZWF0aW9uQ2xpZW50PiwgUGFzc1JlZlB0cjxNZWRpYUNvbnN0cmFpbnRzPiBhdWRpb0NvbnN0
cmFpbnRzLCBQYXNzUmVmUHRyPE1lZGlhQ29uc3RyYWludHM+IHZpZGVvQ29uc3RyYWludHMpOwog
ICAgIHZpcnR1YWwgYm9vbCBnZXRNZWRpYVN0cmVhbVRyYWNrU291cmNlcyhQYXNzUmVmUHRyPE1l
ZGlhU3RyZWFtVHJhY2tTb3VyY2VzUmVxdWVzdENsaWVudD4pIE9WRVJSSURFOwotICAgIHZpcnR1
YWwgdm9pZCBkaWRTZXRNZWRpYVN0cmVhbVRyYWNrRW5hYmxlZChNZWRpYVN0cmVhbURlc2NyaXB0
b3IqLCBNZWRpYVN0cmVhbUNvbXBvbmVudCopIE9WRVJSSURFOwotICAgIHZpcnR1YWwgYm9vbCBk
aWRBZGRNZWRpYVN0cmVhbVRyYWNrKE1lZGlhU3RyZWFtRGVzY3JpcHRvciosIE1lZGlhU3RyZWFt
Q29tcG9uZW50KikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBib29sIGRpZFJlbW92ZU1lZGlhU3Ry
ZWFtVHJhY2soTWVkaWFTdHJlYW1EZXNjcmlwdG9yKiwgTWVkaWFTdHJlYW1Db21wb25lbnQqKSBP
VkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkU2V0TWVkaWFTdHJlYW1UcmFja0VuYWJsZWQo
TWVkaWFTdHJlYW1Tb3VyY2UqKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgZGlkQWRkTWVk
aWFTdHJlYW1UcmFjayhNZWRpYVN0cmVhbVNvdXJjZSopIE9WRVJSSURFOworICAgIHZpcnR1YWwg
Ym9vbCBkaWRSZW1vdmVNZWRpYVN0cmVhbVRyYWNrKE1lZGlhU3RyZWFtU291cmNlKikgT1ZFUlJJ
REU7CiAgICAgdmlydHVhbCB2b2lkIGRpZFN0b3BMb2NhbE1lZGlhU3RyZWFtKE1lZGlhU3RyZWFt
RGVzY3JpcHRvciopIE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCBkaWRDcmVhdGVNZWRpYVN0
cmVhbShNZWRpYVN0cmVhbURlc2NyaXB0b3IqKSBPVkVSUklERTsKIH07CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTWVkaWFTdHJlYW1DZW50ZXJH
U3RyZWFtZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL2dzdHJlYW1lci9NZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1lci5jcHAJKHJldmlzaW9u
IDE1NjQ1OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1l
ci9NZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcg
KzQxLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1NZWRpYVN0cmVhbUNlbnRlciYgTWVk
aWFTdHJlYW1DZW50ZXI6Omluc3RhbmNlKCkKK01lZGlhU3RyZWFtQ2VudGVyJiBNZWRpYVN0cmVh
bUNlbnRlcjo6c2hhcmVkKCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIERF
RklORV9TVEFUSUNfTE9DQUwoTWVkaWFTdHJlYW1DZW50ZXJHU3RyZWFtZXIsIGNlbnRlciwgKCkp
OwpAQCAtNTYsMzcgKzU2LDQ3IEBAIE1lZGlhU3RyZWFtQ2VudGVyR1N0cmVhbWVyOjp+TWVkaWFT
dHJlYW0KIHsKIH0KIAotdm9pZCBNZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1lcjo6cXVlcnlNZWRp
YVN0cmVhbVNvdXJjZXMoUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVNvdXJjZXNRdWVyeUNsaWVudD4g
Y2xpZW50KQordm9pZCBNZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1lcjo6dmFsaWRhdGVSZXF1ZXN0
Q29uc3RyYWludHMoUGFzc1JlZlB0cjxNZWRpYVN0cmVhbUNyZWF0aW9uQ2xpZW50PiwgUGFzc1Jl
ZlB0cjxNZWRpYUNvbnN0cmFpbnRzPiwgUGFzc1JlZlB0cjxNZWRpYUNvbnN0cmFpbnRzPikKIHsK
LSAgICBNZWRpYVN0cmVhbVNvdXJjZVZlY3RvciBhdWRpb1NvdXJjZXMsIHZpZGVvU291cmNlczsK
LSAgICBjbGllbnQtPmRpZENvbXBsZXRlUXVlcnkoYXVkaW9Tb3VyY2VzLCB2aWRlb1NvdXJjZXMp
OworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisgICAgCit2b2lkIE1lZGlhU3RyZWFtQ2VudGVy
R1N0cmVhbWVyOjpjcmVhdGVNZWRpYVN0cmVhbShQYXNzUmVmUHRyPE1lZGlhU3RyZWFtQ3JlYXRp
b25DbGllbnQ+LCBQYXNzUmVmUHRyPE1lZGlhQ29uc3RyYWludHM+LCBQYXNzUmVmUHRyPE1lZGlh
Q29uc3RyYWludHM+KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLWJvb2wgTWVkaWFT
dHJlYW1DZW50ZXJNYWM6OmdldE1lZGlhU3RyZWFtVHJhY2tTb3VyY2VzKFBhc3NSZWZQdHI8TWVk
aWFTdHJlYW1UcmFja1NvdXJjZXNSZXF1ZXN0Q2xpZW50PikKK2Jvb2wgTWVkaWFTdHJlYW1DZW50
ZXJHU3RyZWFtZXI6OmdldE1lZGlhU3RyZWFtVHJhY2tTb3VyY2VzKFBhc3NSZWZQdHI8TWVkaWFT
dHJlYW1UcmFja1NvdXJjZXNSZXF1ZXN0Q2xpZW50PikKIHsKKyAgICBub3RJbXBsZW1lbnRlZCgp
OwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBNZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1l
cjo6ZGlkU2V0TWVkaWFTdHJlYW1UcmFja0VuYWJsZWQoTWVkaWFTdHJlYW1EZXNjcmlwdG9yKiwg
TWVkaWFTdHJlYW1Db21wb25lbnQqKQordm9pZCBNZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1lcjo6
ZGlkU2V0TWVkaWFTdHJlYW1UcmFja0VuYWJsZWQoTWVkaWFTdHJlYW1Tb3VyY2UqKQogeworICAg
IG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLWJvb2wgTWVkaWFTdHJlYW1DZW50ZXJHU3RyZWFtZXI6
OmRpZEFkZE1lZGlhU3RyZWFtVHJhY2soTWVkaWFTdHJlYW1EZXNjcmlwdG9yKiwgTWVkaWFTdHJl
YW1Db21wb25lbnQqKQorYm9vbCBNZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1lcjo6ZGlkQWRkTWVk
aWFTdHJlYW1UcmFjayhNZWRpYVN0cmVhbVNvdXJjZSopCiB7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgTWVkaWFTdHJlYW1DZW50ZXJHU3RyZWFt
ZXI6OmRpZFJlbW92ZU1lZGlhU3RyZWFtVHJhY2soTWVkaWFTdHJlYW1EZXNjcmlwdG9yKiwgTWVk
aWFTdHJlYW1Db21wb25lbnQqKQorYm9vbCBNZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1lcjo6ZGlk
UmVtb3ZlTWVkaWFTdHJlYW1UcmFjayhNZWRpYVN0cmVhbVNvdXJjZSopCiB7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgTWVkaWFTdHJlYW1DZW50
ZXJHU3RyZWFtZXI6OmRpZFN0b3BMb2NhbE1lZGlhU3RyZWFtKE1lZGlhU3RyZWFtRGVzY3JpcHRv
ciopCit2b2lkIE1lZGlhU3RyZWFtQ2VudGVyR1N0cmVhbWVyOjpkaWRTdG9wTG9jYWxNZWRpYVN0
cmVhbShNZWRpYVN0cmVhbURlc2NyaXB0b3IqIHN0cmVhbSkKIHsKKyAgICBlbmRMb2NhbE1lZGlh
U3RyZWFtKHN0cmVhbSk7CiB9CiAKIHZvaWQgTWVkaWFTdHJlYW1DZW50ZXJHU3RyZWFtZXI6OmRp
ZENyZWF0ZU1lZGlhU3RyZWFtKE1lZGlhU3RyZWFtRGVzY3JpcHRvciopCiB7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01lZGlhU3RyZWFtQ2VudGVyR1N0
cmVhbWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vZ3N0cmVhbWVyL01lZGlhU3RyZWFtQ2VudGVyR1N0cmVhbWVyLmgJKHJldmlzaW9uIDE1NjQ1
OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9NZWRp
YVN0cmVhbUNlbnRlckdTdHJlYW1lci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw4ICs0MSw4IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgTWVkaWFTdHJlYW1Db21wb25lbnQ7CiBj
bGFzcyBNZWRpYVN0cmVhbURlc2NyaXB0b3I7CitjbGFzcyBNZWRpYVN0cmVhbVNvdXJjZTsKIGNs
YXNzIE1lZGlhU3RyZWFtU291cmNlc1F1ZXJ5Q2xpZW50OwogCiBjbGFzcyBNZWRpYVN0cmVhbUNl
bnRlckdTdHJlYW1lciA6IHB1YmxpYyBNZWRpYVN0cmVhbUNlbnRlciB7CkBAIC01MSwxMSArNTEs
MTIgQEAgcHVibGljOgogICAgIH5NZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1lcigpOwogCiAgICAg
Ly8gTWVkaWFTdHJlYW1DZW50ZXIKLSAgICB2aXJ0dWFsIHZvaWQgcXVlcnlNZWRpYVN0cmVhbVNv
dXJjZXMoUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVNvdXJjZXNRdWVyeUNsaWVudD4pIE9WRVJSSURF
OworICAgIHZpcnR1YWwgdm9pZCB2YWxpZGF0ZVJlcXVlc3RDb25zdHJhaW50cyhQYXNzUmVmUHRy
PE1lZGlhU3RyZWFtQ3JlYXRpb25DbGllbnQ+LCBQYXNzUmVmUHRyPE1lZGlhQ29uc3RyYWludHM+
IGF1ZGlvQ29uc3RyYWludHMsIFBhc3NSZWZQdHI8TWVkaWFDb25zdHJhaW50cz4gdmlkZW9Db25z
dHJhaW50cyk7CisgICAgdmlydHVhbCB2b2lkIGNyZWF0ZU1lZGlhU3RyZWFtKFBhc3NSZWZQdHI8
TWVkaWFTdHJlYW1DcmVhdGlvbkNsaWVudD4sIFBhc3NSZWZQdHI8TWVkaWFDb25zdHJhaW50cz4g
YXVkaW9Db25zdHJhaW50cywgUGFzc1JlZlB0cjxNZWRpYUNvbnN0cmFpbnRzPiB2aWRlb0NvbnN0
cmFpbnRzKTsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0TWVkaWFTdHJlYW1UcmFja1NvdXJjZXMoUGFz
c1JlZlB0cjxNZWRpYVN0cmVhbVRyYWNrU291cmNlc1JlcXVlc3RDbGllbnQ+KSBPVkVSUklERTsK
LSAgICB2aXJ0dWFsIHZvaWQgZGlkU2V0TWVkaWFTdHJlYW1UcmFja0VuYWJsZWQoTWVkaWFTdHJl
YW1EZXNjcmlwdG9yKiwgTWVkaWFTdHJlYW1Db21wb25lbnQqKSBPVkVSUklERTsKLSAgICB2aXJ0
dWFsIGJvb2wgZGlkQWRkTWVkaWFTdHJlYW1UcmFjayhNZWRpYVN0cmVhbURlc2NyaXB0b3IqLCBN
ZWRpYVN0cmVhbUNvbXBvbmVudCopIE9WRVJSSURFOwotICAgIHZpcnR1YWwgYm9vbCBkaWRSZW1v
dmVNZWRpYVN0cmVhbVRyYWNrKE1lZGlhU3RyZWFtRGVzY3JpcHRvciosIE1lZGlhU3RyZWFtQ29t
cG9uZW50KikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGRpZFNldE1lZGlhU3RyZWFtVHJh
Y2tFbmFibGVkKE1lZGlhU3RyZWFtU291cmNlKikgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29s
IGRpZEFkZE1lZGlhU3RyZWFtVHJhY2soTWVkaWFTdHJlYW1Tb3VyY2UqKSBPVkVSUklERTsKKyAg
ICB2aXJ0dWFsIGJvb2wgZGlkUmVtb3ZlTWVkaWFTdHJlYW1UcmFjayhNZWRpYVN0cmVhbVNvdXJj
ZSopIE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCBkaWRTdG9wTG9jYWxNZWRpYVN0cmVhbShN
ZWRpYVN0cmVhbURlc2NyaXB0b3IqKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ3Jl
YXRlTWVkaWFTdHJlYW0oTWVkaWFTdHJlYW1EZXNjcmlwdG9yKikgT1ZFUlJJREU7CiB9OwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL01lZGlhU3RyZWFtQ2Vu
dGVyTWFjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9tYWMvTWVkaWFTdHJlYW1DZW50ZXJNYWMuY3BwCShyZXZpc2lvbiAxNTY0NTkpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvTWVkaWFTdHJlYW1DZW50ZXJN
YWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwxNSArMzQsMTUgQEAKIAogI2luY2x1ZGUgIk1l
ZGlhU3RyZWFtQ2VudGVyTWFjLmgiCiAKKyNpbmNsdWRlICJNZWRpYVN0cmVhbUNyZWF0aW9uQ2xp
ZW50LmgiCiAjaW5jbHVkZSAiTWVkaWFTdHJlYW1EZXNjcmlwdG9yLmgiCi0jaW5jbHVkZSAiTWVk
aWFTdHJlYW1Tb3VyY2VzUXVlcnlDbGllbnQuaCIKICNpbmNsdWRlICJNZWRpYVN0cmVhbVRyYWNr
U291cmNlc1JlcXVlc3RDbGllbnQuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2lu
Y2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotTWVkaWFT
dHJlYW1DZW50ZXImIE1lZGlhU3RyZWFtQ2VudGVyOjppbnN0YW5jZSgpCitNZWRpYVN0cmVhbUNl
bnRlciYgTWVkaWFTdHJlYW1DZW50ZXI6OnNoYXJlZCgpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKE1lZGlhU3RyZWFtQ2VudGVyTWFjLCBj
ZW50ZXIsICgpKTsKQEAgLTU3LDcgKzU3LDEyIEBAIE1lZGlhU3RyZWFtQ2VudGVyTWFjOjp+TWVk
aWFTdHJlYW1DZW50ZXIKIHsKIH0KIAotdm9pZCBNZWRpYVN0cmVhbUNlbnRlck1hYzo6cXVlcnlN
ZWRpYVN0cmVhbVNvdXJjZXMoUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVNvdXJjZXNRdWVyeUNsaWVu
dD4pCit2b2lkIE1lZGlhU3RyZWFtQ2VudGVyTWFjOjp2YWxpZGF0ZVJlcXVlc3RDb25zdHJhaW50
cyhQYXNzUmVmUHRyPE1lZGlhU3RyZWFtQ3JlYXRpb25DbGllbnQ+LCBQYXNzUmVmUHRyPE1lZGlh
Q29uc3RyYWludHM+LCBQYXNzUmVmUHRyPE1lZGlhQ29uc3RyYWludHM+KQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7Cit9CisgICAgCit2b2lkIE1lZGlhU3RyZWFtQ2VudGVyTWFjOjpjcmVhdGVN
ZWRpYVN0cmVhbShQYXNzUmVmUHRyPE1lZGlhU3RyZWFtQ3JlYXRpb25DbGllbnQ+LCBQYXNzUmVm
UHRyPE1lZGlhQ29uc3RyYWludHM+LCBQYXNzUmVmUHRyPE1lZGlhQ29uc3RyYWludHM+KQogewog
ICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CkBAIC02OCwxOCArNzMsMTggQEAgYm9vbCBNZWRpYVN0
cmVhbUNlbnRlck1hYzo6Z2V0TWVkaWFTdHJlYQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9p
ZCBNZWRpYVN0cmVhbUNlbnRlck1hYzo6ZGlkU2V0TWVkaWFTdHJlYW1UcmFja0VuYWJsZWQoTWVk
aWFTdHJlYW1EZXNjcmlwdG9yKiwgTWVkaWFTdHJlYW1Db21wb25lbnQqKQordm9pZCBNZWRpYVN0
cmVhbUNlbnRlck1hYzo6ZGlkU2V0TWVkaWFTdHJlYW1UcmFja0VuYWJsZWQoTWVkaWFTdHJlYW1T
b3VyY2UqKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLWJvb2wgTWVkaWFTdHJlYW1D
ZW50ZXJNYWM6OmRpZEFkZE1lZGlhU3RyZWFtVHJhY2soTWVkaWFTdHJlYW1EZXNjcmlwdG9yKiwg
TWVkaWFTdHJlYW1Db21wb25lbnQqKQorYm9vbCBNZWRpYVN0cmVhbUNlbnRlck1hYzo6ZGlkQWRk
TWVkaWFTdHJlYW1UcmFjayhNZWRpYVN0cmVhbVNvdXJjZSopCiB7CiAgICAgbm90SW1wbGVtZW50
ZWQoKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgTWVkaWFTdHJlYW1DZW50ZXJNYWM6
OmRpZFJlbW92ZU1lZGlhU3RyZWFtVHJhY2soTWVkaWFTdHJlYW1EZXNjcmlwdG9yKiwgTWVkaWFT
dHJlYW1Db21wb25lbnQqKQorYm9vbCBNZWRpYVN0cmVhbUNlbnRlck1hYzo6ZGlkUmVtb3ZlTWVk
aWFTdHJlYW1UcmFjayhNZWRpYVN0cmVhbVNvdXJjZSopCiB7CiAgICAgbm90SW1wbGVtZW50ZWQo
KTsKICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9tYWMvTWVkaWFTdHJlYW1DZW50ZXJNYWMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvTWVkaWFTdHJlYW1DZW50ZXJNYWMuaAko
cmV2aXNpb24gMTU2NDU5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
bWFjL01lZGlhU3RyZWFtQ2VudGVyTWFjLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDggKzQwLDgg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBNZWRpYVN0cmVhbUNvbXBvbmVudDsK
IGNsYXNzIE1lZGlhU3RyZWFtRGVzY3JpcHRvcjsKK2NsYXNzIE1lZGlhU3RyZWFtU291cmNlOwog
Y2xhc3MgTWVkaWFTdHJlYW1Tb3VyY2VzUXVlcnlDbGllbnQ7CiAKIGNsYXNzIE1lZGlhU3RyZWFt
Q2VudGVyTWFjIEZJTkFMIDogcHVibGljIE1lZGlhU3RyZWFtQ2VudGVyIHsKQEAgLTUwLDEyICs1
MCwxMiBAQCBwdWJsaWM6CiAgICAgfk1lZGlhU3RyZWFtQ2VudGVyTWFjKCk7CiAKICAgICAvLyBN
ZWRpYVN0cmVhbUNlbnRlcgotICAgIHZpcnR1YWwgdm9pZCBxdWVyeU1lZGlhU3RyZWFtU291cmNl
cyhQYXNzUmVmUHRyPE1lZGlhU3RyZWFtU291cmNlc1F1ZXJ5Q2xpZW50PikgT1ZFUlJJREU7Ci0g
ICAgCisgICAgdmlydHVhbCB2b2lkIHZhbGlkYXRlUmVxdWVzdENvbnN0cmFpbnRzKFBhc3NSZWZQ
dHI8TWVkaWFTdHJlYW1DcmVhdGlvbkNsaWVudD4sIFBhc3NSZWZQdHI8TWVkaWFDb25zdHJhaW50
cz4gYXVkaW9Db25zdHJhaW50cywgUGFzc1JlZlB0cjxNZWRpYUNvbnN0cmFpbnRzPiB2aWRlb0Nv
bnN0cmFpbnRzKTsKKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlTWVkaWFTdHJlYW0oUGFzc1JlZlB0
cjxNZWRpYVN0cmVhbUNyZWF0aW9uQ2xpZW50PiwgUGFzc1JlZlB0cjxNZWRpYUNvbnN0cmFpbnRz
PiBhdWRpb0NvbnN0cmFpbnRzLCBQYXNzUmVmUHRyPE1lZGlhQ29uc3RyYWludHM+IHZpZGVvQ29u
c3RyYWludHMpOwogICAgIHZpcnR1YWwgYm9vbCBnZXRNZWRpYVN0cmVhbVRyYWNrU291cmNlcyhQ
YXNzUmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tTb3VyY2VzUmVxdWVzdENsaWVudD4pIE9WRVJSSURF
OwotICAgIHZpcnR1YWwgdm9pZCBkaWRTZXRNZWRpYVN0cmVhbVRyYWNrRW5hYmxlZChNZWRpYVN0
cmVhbURlc2NyaXB0b3IqLCBNZWRpYVN0cmVhbUNvbXBvbmVudCopIE9WRVJSSURFOwotICAgIHZp
cnR1YWwgYm9vbCBkaWRBZGRNZWRpYVN0cmVhbVRyYWNrKE1lZGlhU3RyZWFtRGVzY3JpcHRvcios
IE1lZGlhU3RyZWFtQ29tcG9uZW50KikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBib29sIGRpZFJl
bW92ZU1lZGlhU3RyZWFtVHJhY2soTWVkaWFTdHJlYW1EZXNjcmlwdG9yKiwgTWVkaWFTdHJlYW1D
b21wb25lbnQqKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkU2V0TWVkaWFTdHJlYW1U
cmFja0VuYWJsZWQoTWVkaWFTdHJlYW1Tb3VyY2UqKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJv
b2wgZGlkQWRkTWVkaWFTdHJlYW1UcmFjayhNZWRpYVN0cmVhbVNvdXJjZSopIE9WRVJSSURFOwor
ICAgIHZpcnR1YWwgYm9vbCBkaWRSZW1vdmVNZWRpYVN0cmVhbVRyYWNrKE1lZGlhU3RyZWFtU291
cmNlKikgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIGRpZFN0b3BMb2NhbE1lZGlhU3RyZWFt
KE1lZGlhU3RyZWFtRGVzY3JpcHRvciopIE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCBkaWRD
cmVhdGVNZWRpYVN0cmVhbShNZWRpYVN0cmVhbURlc2NyaXB0b3IqKSBPVkVSUklERTsKIH07Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>