<?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>150165</bug_id>
          
          <creation_ts>2015-10-15 06:10:24 -0700</creation_ts>
          <short_desc>WebRTC: Add MediaEndpoint interface (WebRTC backend abstraction)</short_desc>
          <delta_ts>2016-02-24 22:57:56 -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>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>143211</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Bergkvist">adam.bergkvist</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>alex</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>pnormand</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1133440</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Bergkvist">adam.bergkvist</who>
    <bug_when>2015-10-15 06:10:24 -0700</bug_when>
    <thetext>The MediaEndpoint interface is a lower level WebRTC backend abstraction than RTCPeerConnectionHandler (in the repo today) which is pretty close to the JavaScript API.

MediaEndpoint makes it possible to use different backends, compatible with WebRTC on the media plane, without having to re-implement all the WebRTC API details (since the API code lives in WebCore).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1166480</commentid>
    <comment_count>1</comment_count>
      <attachid>271769</attachid>
    <who name="Adam Bergkvist">adam.bergkvist</who>
    <bug_when>2016-02-19 11:50:18 -0800</bug_when>
    <thetext>Created attachment 271769
Proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1166535</commentid>
    <comment_count>2</comment_count>
      <attachid>271795</attachid>
    <who name="Adam Bergkvist">adam.bergkvist</who>
    <bug_when>2016-02-19 13:50:14 -0800</bug_when>
    <thetext>Created attachment 271795
Updated patch

Fixed debug build issues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1167516</commentid>
    <comment_count>3</comment_count>
      <attachid>271795</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2016-02-23 13:31:04 -0800</bug_when>
    <thetext>Comment on attachment 271795
Updated patch

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

&gt; Source/WebCore/ChangeLog:11
&gt; +        configure the WebRTC backend how to send and receive. It also abstracts

Nit: &quot;configure the WebRTC backend how to send and receive&quot; -&gt; something like &quot;configure how the the WebRTC backend sends and receives&quot;

&gt; Source/WebCore/platform/mediastream/IceCandidate.h:2
&gt; + * Copyright (C) 2015 Ericsson AB. All rights reserved.

Nit: you might want to update this.

&gt; Source/WebCore/platform/mediastream/IceCandidate.h:103
&gt; +        : m_componentId(0)
&gt; +        , m_priority(0)
&gt; +        , m_port(0)
&gt; +        , m_relatedPort(0)

These should be initialized in the class definition:

    unsigned m_componentId { 0 };
    int m_priority { 0 };

etc.

&gt; Source/WebCore/platform/mediastream/MediaEndpoint.cpp:2
&gt; + * Copyright (C) 2015 Ericsson AB. All rights reserved.

Update?

&gt; Source/WebCore/platform/mediastream/MediaEndpoint.cpp:40
&gt; +    return nullptr;

Should this ASSERT?

&gt; Source/WebCore/platform/mediastream/MediaEndpoint.h:2
&gt; + * Copyright (C) 2015 Ericsson AB. All rights reserved.

Update?

&gt; Source/WebCore/platform/mediastream/MediaEndpointConfiguration.cpp:2
&gt; + * Copyright (C) 2015 Ericsson AB. All rights reserved.

Update?

&gt; Source/WebCore/platform/mediastream/MediaEndpointConfiguration.h:2
&gt; + * Copyright (C) 2015 Ericsson AB. All rights reserved.

Update?

&gt; Source/WebCore/platform/mediastream/MediaEndpointSessionConfiguration.h:2
&gt; + * Copyright (C) 2015 Ericsson AB. All rights reserved.

Update?

&gt; Source/WebCore/platform/mediastream/MediaEndpointSessionConfiguration.h:72
&gt; +        : m_sessionId(cryptographicallyRandomNumber()) // FIXME: should be 64 bits

Can you initialize this by bit-shifting two random 32 bit numbers?

&gt; Source/WebCore/platform/mediastream/MediaEndpointSessionConfiguration.h:73
&gt; +        , m_sessionVersion(0)

This should be initialized in the class definition.

&gt; Source/WebCore/platform/mediastream/MediaPayload.h:2
&gt; + * Copyright (C) 2015 Ericsson AB. All rights reserved.

Update?

&gt; Source/WebCore/platform/mediastream/MediaPayload.h:102
&gt; +        : m_type(0)
&gt; +        , m_clockRate(0)
&gt; +        , m_channels(0)
&gt; +        , m_ccmfir(false)
&gt; +        , m_nackpli(false)
&gt; +        , m_nack(false)

These should be initialized in the class definition.

&gt; Source/WebCore/platform/mediastream/PeerMediaDescription.h:2
&gt; + * Copyright (C) 2015 Ericsson AB. All rights reserved.

Update?

&gt; Source/WebCore/platform/mediastream/PeerMediaDescription.h:154
&gt; +        : m_port(0)
&gt; +        , m_rtcpMux(false)
&gt; +        , m_rtcpPort(0)
&gt; +        , m_source(nullptr)

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1167755</commentid>
    <comment_count>4</comment_count>
      <attachid>272108</attachid>
    <who name="Adam Bergkvist">adam.bergkvist</who>
    <bug_when>2016-02-24 02:44:47 -0800</bug_when>
    <thetext>Created attachment 272108
Updated patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1167756</commentid>
    <comment_count>5</comment_count>
    <who name="Adam Bergkvist">adam.bergkvist</who>
    <bug_when>2016-02-24 02:52:10 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; Comment on attachment 271795 [details]
&gt; Updated patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=271795&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:11
&gt; &gt; +        configure the WebRTC backend how to send and receive. It also abstracts
&gt; 
&gt; Nit: &quot;configure the WebRTC backend how to send and receive&quot; -&gt; something
&gt; like &quot;configure how the the WebRTC backend sends and receives&quot;

Fixed.

&gt; &gt; Source/WebCore/platform/mediastream/IceCandidate.h:2
&gt; &gt; + * Copyright (C) 2015 Ericsson AB. All rights reserved.
&gt; 
&gt; Nit: you might want to update this.

This code has been available open source since 2015 and hasn&apos;t changed much (&lt;10 lines) since. I can follow up with an update if it&apos;s wrong to have it 2015 only.

&gt; &gt; Source/WebCore/platform/mediastream/IceCandidate.h:103
&gt; &gt; +        : m_componentId(0)
&gt; &gt; +        , m_priority(0)
&gt; &gt; +        , m_port(0)
&gt; &gt; +        , m_relatedPort(0)
&gt; 
&gt; These should be initialized in the class definition:
&gt; 
&gt;     unsigned m_componentId { 0 };
&gt;     int m_priority { 0 };
&gt; 
&gt; etc.

Fixed.

Update style guide lines if this is the new preference?

&gt; 
&gt; &gt; Source/WebCore/platform/mediastream/MediaEndpoint.cpp:2
&gt; &gt; + * Copyright (C) 2015 Ericsson AB. All rights reserved.
&gt; 
&gt; Update?
&gt; 
&gt; &gt; Source/WebCore/platform/mediastream/MediaEndpoint.cpp:40
&gt; &gt; +    return nullptr;
&gt; 
&gt; Should this ASSERT?

This factory function is used when there are no implementations. The value is asserted in the MediaEndpointPeerConnection implementation.

&gt; 
&gt; &gt; Source/WebCore/platform/mediastream/MediaEndpoint.h:2
&gt; &gt; + * Copyright (C) 2015 Ericsson AB. All rights reserved.
&gt; 
&gt; Update?
&gt; 
&gt; &gt; Source/WebCore/platform/mediastream/MediaEndpointConfiguration.cpp:2
&gt; &gt; + * Copyright (C) 2015 Ericsson AB. All rights reserved.
&gt; 
&gt; Update?
&gt; 
&gt; &gt; Source/WebCore/platform/mediastream/MediaEndpointConfiguration.h:2
&gt; &gt; + * Copyright (C) 2015 Ericsson AB. All rights reserved.
&gt; 
&gt; Update?
&gt; 
&gt; &gt; Source/WebCore/platform/mediastream/MediaEndpointSessionConfiguration.h:2
&gt; &gt; + * Copyright (C) 2015 Ericsson AB. All rights reserved.
&gt; 
&gt; Update?
&gt; 
&gt; &gt; Source/WebCore/platform/mediastream/MediaEndpointSessionConfiguration.h:72
&gt; &gt; +        : m_sessionId(cryptographicallyRandomNumber()) // FIXME: should be 64 bits
&gt; 
&gt; Can you initialize this by bit-shifting two random 32 bit numbers?

That should work. Fixed.

&gt; &gt; Source/WebCore/platform/mediastream/MediaEndpointSessionConfiguration.h:73
&gt; &gt; +        , m_sessionVersion(0)
&gt; 
&gt; This should be initialized in the class definition.

Fixed.

&gt; &gt; Source/WebCore/platform/mediastream/MediaPayload.h:2
&gt; &gt; + * Copyright (C) 2015 Ericsson AB. All rights reserved.
&gt; 
&gt; Update?
&gt; 
&gt; &gt; Source/WebCore/platform/mediastream/MediaPayload.h:102
&gt; &gt; +        : m_type(0)
&gt; &gt; +        , m_clockRate(0)
&gt; &gt; +        , m_channels(0)
&gt; &gt; +        , m_ccmfir(false)
&gt; &gt; +        , m_nackpli(false)
&gt; &gt; +        , m_nack(false)
&gt; 
&gt; These should be initialized in the class definition.

Fixed.

&gt; &gt; Source/WebCore/platform/mediastream/PeerMediaDescription.h:2
&gt; &gt; + * Copyright (C) 2015 Ericsson AB. All rights reserved.
&gt; 
&gt; Update?
&gt; 
&gt; &gt; Source/WebCore/platform/mediastream/PeerMediaDescription.h:154
&gt; &gt; +        : m_port(0)
&gt; &gt; +        , m_rtcpMux(false)
&gt; &gt; +        , m_rtcpPort(0)
&gt; &gt; +        , m_source(nullptr)
&gt; 
&gt; Ditto.

Fixed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1167918</commentid>
    <comment_count>6</comment_count>
      <attachid>272108</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-02-24 14:23:49 -0800</bug_when>
    <thetext>Comment on attachment 272108
Updated patch for landing

Clearing flags on attachment: 272108

Committed r197053: &lt;http://trac.webkit.org/changeset/197053&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>271769</attachid>
            <date>2016-02-19 11:50:18 -0800</date>
            <delta_ts>2016-02-19 13:50:14 -0800</delta_ts>
            <desc>Proposed patch</desc>
            <filename>add-mediaendpoint_0.patch</filename>
            <type>text/plain</type>
            <size>54599</size>
            <attacher name="Adam Bergkvist">adam.bergkvist</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKaW5kZXggMTAwYWI0ZC4uNmNkZDZkOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKQEAgLTIyOTcsNiArMjI5Nyw4IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybWF0aW9uTWF0cml4LmNwcAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uLmNw
cAogCisgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFFbmRwb2ludC5jcHAKKyAgICBwbGF0
Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50Q29uZmlndXJhdGlvbi5jcHAKICAgICBwbGF0
Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVByaXZhdGUuY3BwCiAgICAgcGxhdGZvcm0vbWVk
aWFzdHJlYW0vTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUuY3BwCiAgICAgcGxhdGZvcm0vbWVkaWFz
dHJlYW0vUlRDSWNlQ2FuZGlkYXRlRGVzY3JpcHRvci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAyM2NlNGRi
Li5kOWJlNjgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTU4IEBACisyMDE2LTAyLTE5ICBBZGFt
IEJlcmdrdmlzdCAgPGFkYW0uYmVyZ2t2aXN0QGVyaWNzc29uLmNvbT4KKworICAgICAgICBXZWJS
VEM6IEFkZCBNZWRpYUVuZHBvaW50IGludGVyZmFjZSAoV2ViUlRDIGJhY2tlbmQgYWJzdHJhY3Rp
b24pCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTAx
NjUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQg
dGhlIE1lZGlhRW5kcG9pbnQgaW50ZXJmYWNlIGFsb25nIHdpdGggaXRzIGNvbXBhbmlvbiBvYmpl
Y3RzLgorCisgICAgICAgIE1lZGlhRW5kcG9pbnQgaW50ZXJmYWNlOiBBIFdlYlJUQyBwbGF0Zm9y
bSBhYnN0cmFjdGlvbiB0aGF0IGlzIHVzZWQgdG8KKyAgICAgICAgY29uZmlndXJlIHRoZSBXZWJS
VEMgYmFja2VuZCBob3cgdG8gc2VuZCBhbmQgcmVjZWl2ZS4gSXQgYWxzbyBhYnN0cmFjdHMKKyAg
ICAgICAgSUNFIGZ1bmN0aW9uYWxpdHkgc3VjaCBhcyBnZW5lcmF0aW5nIGxvY2FsIGNhbmRpZGF0
ZXMgYW5kIGRvaW5nCisgICAgICAgIGNoZWNraW5nIG9uIHJlbW90ZSBjYW5kaWRhdGVzLiBUaGUg
UlRDUGVlckNvbm5lY3Rpb24gQVBJLCBhbmQgb3RoZXIgQVBJCisgICAgICAgIG9iamVjdHMgc3Vj
aCBhcyBSVENSdHBTZW5kZXIvUmVjZWl2ZXIsIGxpdmUgYWJvdmUgTWVkaWFFbmRwb2ludC4KKwor
ICAgICAgICBNZWRpYUVuZHBvaW50Q29uZmlndXJhdGlvbjogQSBzZXR0aW5ncyBvYmplY3QgdXNl
ZCB0byBjb25maWd1cmUgYQorICAgICAgICBNZWRpYUVuZHBvaW50IHdpdGgsIGZvciBleGFtcGxl
LCBJQ0UgaGVscGVyIHNlcnZlcnMgYW5kIG90aGVyIHBvbGljZXMuCisgICAgICAgIEEgTWVkaWFF
bmRwb2ludENvbmZpZ3VyYXRpb24gaXMgdXNlZCB0byBpbml0aWFsaXplIGEgTWVkaWFFbmRwb2lu
dCwgYnV0CisgICAgICAgIGNhbiBhbHNvIGJlIHVzZWQgdG8gdXBkYXRlIHNldHRpbmdzLgorCisg
ICAgICAgIE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbjogQW4gb2JqZWN0IHRoYXQg
ZGVzY3JpYmVzIGhvdyB0aGUKKyAgICAgICAgTWVkaWFFbmRwb2ludCBzaG91bGQgc2VuZCBhbmQg
cmVjZWl2ZS4gQ29udGFpbnMgUGVlck1lZGlhRGVzY3JpcHRpb24sCisgICAgICAgIE1lZGlhUGF5
bG9hZCBhbmQgSWNlQ2FuZGlkYXRlIG9iamVjdHMuCisKKyAgICAgICAgVGVzdHM6IFRoZSBNZWRp
YUVuZHBvaW50IHBsYXRmb3JtIGludGVyZmFjZSBoYXMgbm8gaW1wbGVtZW50YXRpb25zIHlldC4K
KworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJl
YW0vTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbjo6Z290RHRsc0ZpbmdlcnByaW50KToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbjo6Z290SWNlQ2FuZGlkYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbjo6ZG9uZUdhdGhl
cmluZ0NhbmRpZGF0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFFbmRwb2ludFBlZXJDb25u
ZWN0aW9uOjpnb3RSZW1vdGVTb3VyY2UpOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0v
TWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uLmg6CisgICAgICAgICogV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL0ljZUNh
bmRpZGF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkljZUNhbmRpZGF0ZTo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OkljZUNhbmRpZGF0ZTo6fkljZUNhbmRpZGF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJY2VDYW5kaWRhdGU6OnR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6SWNl
Q2FuZGlkYXRlOjpzZXRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkljZUNhbmRpZGF0ZTo6Zm91
bmRhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJY2VDYW5kaWRhdGU6OnNldEZvdW5kYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6SWNlQ2FuZGlkYXRlOjpjb21wb25lbnRJZCk6CisgICAgICAg
IChXZWJDb3JlOjpJY2VDYW5kaWRhdGU6OnNldENvbXBvbmVudElkKToKKyAgICAgICAgKFdlYkNv
cmU6OkljZUNhbmRpZGF0ZTo6dHJhbnNwb3J0KToKKyAgICAgICAgKFdlYkNvcmU6OkljZUNhbmRp
ZGF0ZTo6c2V0VHJhbnNwb3J0KToKKyAgICAgICAgKFdlYkNvcmU6OkljZUNhbmRpZGF0ZTo6cHJp
b3JpdHkpOgorICAgICAgICAoV2ViQ29yZTo6SWNlQ2FuZGlkYXRlOjpzZXRQcmlvcml0eSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJY2VDYW5kaWRhdGU6OmFkZHJlc3MpOgorICAgICAgICAoV2ViQ29y
ZTo6SWNlQ2FuZGlkYXRlOjpzZXRBZGRyZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OkljZUNhbmRp
ZGF0ZTo6cG9ydCk6CisgICAgICAgIChXZWJDb3JlOjpJY2VDYW5kaWRhdGU6OnNldFBvcnQpOgor
ICAgICAgICAoV2ViQ29yZTo6SWNlQ2FuZGlkYXRlOjp0Y3BUeXBlKToKKyAgICAgICAgKFdlYkNv
cmU6OkljZUNhbmRpZGF0ZTo6c2V0VGNwVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpJY2VDYW5k
aWRhdGU6OnJlbGF0ZWRBZGRyZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OkljZUNhbmRpZGF0ZTo6
c2V0UmVsYXRlZEFkZHJlc3MpOgorICAgICAgICAoV2ViQ29yZTo6SWNlQ2FuZGlkYXRlOjpyZWxh
dGVkUG9ydCk6CisgICAgICAgIChXZWJDb3JlOjpJY2VDYW5kaWRhdGU6OnNldFJlbGF0ZWRQb3J0
KToKKyAgICAgICAgKFdlYkNvcmU6OkljZUNhbmRpZGF0ZTo6Y2xvbmUpOgorICAgICAgICAoV2Vi
Q29yZTo6SWNlQ2FuZGlkYXRlOjpJY2VDYW5kaWRhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL21l
ZGlhc3RyZWFtL01lZGlhRW5kcG9pbnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNy
ZWF0ZU1lZGlhRW5kcG9pbnQpOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlh
RW5kcG9pbnQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYUVuZHBvaW50Q2xpZW50
Ojp+TWVkaWFFbmRwb2ludENsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUVuZHBvaW50
Ojp+TWVkaWFFbmRwb2ludCk6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFF
bmRwb2ludENvbmZpZ3VyYXRpb24uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkljZVNl
cnZlckluZm86OkljZVNlcnZlckluZm8pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFFbmRwb2lu
dENvbmZpZ3VyYXRpb246Ok1lZGlhRW5kcG9pbnRDb25maWd1cmF0aW9uKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50Q29uZmlndXJhdGlvbi5oOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkljZVNlcnZlckluZm86OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpJY2VTZXJ2ZXJJbmZvOjp+SWNlU2VydmVySW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpJ
Y2VTZXJ2ZXJJbmZvOjp1cmxzKToKKyAgICAgICAgKFdlYkNvcmU6OkljZVNlcnZlckluZm86OmNy
ZWRlbnRpYWwpOgorICAgICAgICAoV2ViQ29yZTo6SWNlU2VydmVySW5mbzo6dXNlcm5hbWUpOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb246OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYUVuZHBvaW50Q29uZmlndXJhdGlvbjo6aWNlU2VydmVycyk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUVuZHBvaW50Q29uZmlndXJhdGlvbjo6aWNlVHJhbnNw
b3J0UG9saWN5KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhRW5kcG9pbnRDb25maWd1cmF0aW9u
OjpidW5kbGVQb2xpY3kpOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhRW5k
cG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbjo6fk1lZGlhRW5kcG9pbnRTZXNz
aW9uQ29uZmlndXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUVuZHBvaW50U2Vzc2lv
bkNvbmZpZ3VyYXRpb246OnNlc3Npb25JZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUVuZHBv
aW50U2Vzc2lvbkNvbmZpZ3VyYXRpb246OnNldFNlc3Npb25JZCk6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb246OnNlc3Npb25WZXJzaW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbjo6c2V0U2Vz
c2lvblZlcnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFFbmRwb2ludFNlc3Npb25Db25m
aWd1cmF0aW9uOjptZWRpYURlc2NyaXB0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUVu
ZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb246OmFkZE1lZGlhRGVzY3JpcHRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uOjpjbG9uZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb246Ok1lZGlh
RW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbik6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFz
dHJlYW0vTWVkaWFQYXlsb2FkLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQYXls
b2FkOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQYXlsb2FkOjp+TWVkaWFQYXls
b2FkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGF5bG9hZDo6dHlwZSk6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBheWxvYWQ6OnNldFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
YXlsb2FkOjplbmNvZGluZ05hbWUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQYXlsb2FkOjpz
ZXRFbmNvZGluZ05hbWUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQYXlsb2FkOjpjbG9ja1Jh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQYXlsb2FkOjpzZXRDbG9ja1JhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFQYXlsb2FkOjpjaGFubmVscyk6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBheWxvYWQ6OnNldENoYW5uZWxzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGF5
bG9hZDo6Y2NtZmlyKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGF5bG9hZDo6c2V0Q2NtZmly
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGF5bG9hZDo6bmFja3BsaSk6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBheWxvYWQ6OnNldE5hY2twbGkpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQYXlsb2FkOjpuYWNrKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGF5bG9hZDo6c2V0TmFj
ayk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBheWxvYWQ6OnBhcmFtZXRlcnMpOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQYXlsb2FkOjphZGRQYXJhbWV0ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQYXlsb2FkOjpjbG9uZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBheWxvYWQ6
Ok1lZGlhUGF5bG9hZCk6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vUGVlck1lZGlh
RGVzY3JpcHRpb24uaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpQZWVyTWVkaWFEZXNjcmlw
dGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJNZWRpYURlc2NyaXB0aW9uOjp+
UGVlck1lZGlhRGVzY3JpcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UGVlck1lZGlhRGVzY3Jp
cHRpb246OnR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6UGVlck1lZGlhRGVzY3JpcHRpb246OnNl
dFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6UGVlck1lZGlhRGVzY3JpcHRpb246OnBvcnQpOgor
ICAgICAgICAoV2ViQ29yZTo6UGVlck1lZGlhRGVzY3JpcHRpb246OnNldFBvcnQpOgorICAgICAg
ICAoV2ViQ29yZTo6UGVlck1lZGlhRGVzY3JpcHRpb246OmFkZHJlc3MpOgorICAgICAgICAoV2Vi
Q29yZTo6UGVlck1lZGlhRGVzY3JpcHRpb246OnNldEFkZHJlc3MpOgorICAgICAgICAoV2ViQ29y
ZTo6UGVlck1lZGlhRGVzY3JpcHRpb246Om1vZGUpOgorICAgICAgICAoV2ViQ29yZTo6UGVlck1l
ZGlhRGVzY3JpcHRpb246OnNldE1vZGUpOgorICAgICAgICAoV2ViQ29yZTo6UGVlck1lZGlhRGVz
Y3JpcHRpb246OnBheWxvYWRzKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJNZWRpYURlc2NyaXB0
aW9uOjphZGRQYXlsb2FkKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJNZWRpYURlc2NyaXB0aW9u
OjpzZXRQYXlsb2Fkcyk6CisgICAgICAgIChXZWJDb3JlOjpQZWVyTWVkaWFEZXNjcmlwdGlvbjo6
cnRjcE11eCk6CisgICAgICAgIChXZWJDb3JlOjpQZWVyTWVkaWFEZXNjcmlwdGlvbjo6c2V0UnRj
cE11eCk6CisgICAgICAgIChXZWJDb3JlOjpQZWVyTWVkaWFEZXNjcmlwdGlvbjo6cnRjcEFkZHJl
c3MpOgorICAgICAgICAoV2ViQ29yZTo6UGVlck1lZGlhRGVzY3JpcHRpb246OnNldFJ0Y3BBZGRy
ZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJNZWRpYURlc2NyaXB0aW9uOjpydGNwUG9ydCk6
CisgICAgICAgIChXZWJDb3JlOjpQZWVyTWVkaWFEZXNjcmlwdGlvbjo6c2V0UnRjcFBvcnQpOgor
ICAgICAgICAoV2ViQ29yZTo6UGVlck1lZGlhRGVzY3JpcHRpb246Om1lZGlhU3RyZWFtSWQpOgor
ICAgICAgICAoV2ViQ29yZTo6UGVlck1lZGlhRGVzY3JpcHRpb246OnNldE1lZGlhU3RyZWFtSWQp
OgorICAgICAgICAoV2ViQ29yZTo6UGVlck1lZGlhRGVzY3JpcHRpb246Om1lZGlhU3RyZWFtVHJh
Y2tJZCk6CisgICAgICAgIChXZWJDb3JlOjpQZWVyTWVkaWFEZXNjcmlwdGlvbjo6c2V0TWVkaWFT
dHJlYW1UcmFja0lkKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJNZWRpYURlc2NyaXB0aW9uOjpk
dGxzU2V0dXApOgorICAgICAgICAoV2ViQ29yZTo6UGVlck1lZGlhRGVzY3JpcHRpb246OnNldER0
bHNTZXR1cCk6CisgICAgICAgIChXZWJDb3JlOjpQZWVyTWVkaWFEZXNjcmlwdGlvbjo6ZHRsc0Zp
bmdlcnByaW50SGFzaEZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJNZWRpYURlc2Ny
aXB0aW9uOjpzZXREdGxzRmluZ2VycHJpbnRIYXNoRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6UGVlck1lZGlhRGVzY3JpcHRpb246OmR0bHNGaW5nZXJwcmludCk6CisgICAgICAgIChXZWJD
b3JlOjpQZWVyTWVkaWFEZXNjcmlwdGlvbjo6c2V0RHRsc0ZpbmdlcnByaW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlBlZXJNZWRpYURlc2NyaXB0aW9uOjpjbmFtZSk6CisgICAgICAgIChXZWJDb3Jl
OjpQZWVyTWVkaWFEZXNjcmlwdGlvbjo6c2V0Q25hbWUpOgorICAgICAgICAoV2ViQ29yZTo6UGVl
ck1lZGlhRGVzY3JpcHRpb246OnNzcmNzKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJNZWRpYURl
c2NyaXB0aW9uOjphZGRTc3JjKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJNZWRpYURlc2NyaXB0
aW9uOjpjbGVhclNzcmNzKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJNZWRpYURlc2NyaXB0aW9u
OjppY2VVZnJhZyk6CisgICAgICAgIChXZWJDb3JlOjpQZWVyTWVkaWFEZXNjcmlwdGlvbjo6c2V0
SWNlVWZyYWcpOgorICAgICAgICAoV2ViQ29yZTo6UGVlck1lZGlhRGVzY3JpcHRpb246OmljZVBh
c3N3b3JkKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJNZWRpYURlc2NyaXB0aW9uOjpzZXRJY2VQ
YXNzd29yZCk6CisgICAgICAgIChXZWJDb3JlOjpQZWVyTWVkaWFEZXNjcmlwdGlvbjo6aWNlQ2Fu
ZGlkYXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpQZWVyTWVkaWFEZXNjcmlwdGlvbjo6YWRkSWNl
Q2FuZGlkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJNZWRpYURlc2NyaXB0aW9uOjpzb3Vy
Y2UpOgorICAgICAgICAoV2ViQ29yZTo6UGVlck1lZGlhRGVzY3JpcHRpb246OnNldFNvdXJjZSk6
CisgICAgICAgIChXZWJDb3JlOjpQZWVyTWVkaWFEZXNjcmlwdGlvbjo6Y2xvbmUpOgorICAgICAg
ICAoV2ViQ29yZTo6UGVlck1lZGlhRGVzY3JpcHRpb246OlBlZXJNZWRpYURlc2NyaXB0aW9uKToK
KwogMjAxNi0wMi0xOCAgQW5kcmVhcyBLbGluZyAgPGFrbGluZ0BhcHBsZS5jb20+CiAKICAgICAg
ICAgUmVkdWNlIHRpbGluZyBjb3ZlcmFnZSBpbW1lZGlhdGVseSB3aGVuIG1lbW9yeSBwcmVzc3Vy
ZSBoaXRzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9N
ZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9t
ZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb24uY3BwCmluZGV4IGMzNGMzNzYu
LjJmM2RmMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0v
TWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc3RyZWFtL01lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbi5jcHAKQEAgLTE3NCw2
ICsxNzQsNDUgQEAgdm9pZCBNZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb246Om1hcmtBc05lZWRp
bmdOZWdvdGlhdGlvbigpCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAordm9pZCBNZWRpYUVu
ZHBvaW50UGVlckNvbm5lY3Rpb246OmdvdER0bHNGaW5nZXJwcmludChjb25zdCBTdHJpbmcmIGZp
bmdlcnByaW50LCBjb25zdCBTdHJpbmcmIGZpbmdlcnByaW50RnVuY3Rpb24pCit7CisgICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIFVOVVNFRF9QQVJBTShmaW5nZXJwcmludCk7Cisg
ICAgVU5VU0VEX1BBUkFNKGZpbmdlcnByaW50RnVuY3Rpb24pOworCisgICAgbm90SW1wbGVtZW50
ZWQoKTsKK30KKwordm9pZCBNZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb246OmdvdEljZUNhbmRp
ZGF0ZSh1bnNpZ25lZCBtZGVzY0luZGV4LCBSZWZQdHI8SWNlQ2FuZGlkYXRlPiYmIGNhbmRpZGF0
ZSkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgVU5VU0VEX1BBUkFNKG1k
ZXNjSW5kZXgpOworICAgIFVOVVNFRF9QQVJBTShjYW5kaWRhdGUpOworCisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KKwordm9pZCBNZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb246OmRvbmVHYXRo
ZXJpbmdDYW5kaWRhdGVzKHVuc2lnbmVkIG1kZXNjSW5kZXgpCit7CisgICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKKworICAgIFVOVVNFRF9QQVJBTShtZGVzY0luZGV4KTsKKworICAgIG5vdElt
cGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uOjpnb3RS
ZW1vdGVTb3VyY2UodW5zaWduZWQgbWRlc2NJbmRleCwgUmVmUHRyPFJlYWx0aW1lTWVkaWFTb3Vy
Y2U+JiYgc291cmNlKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAgICBVTlVT
RURfUEFSQU0obWRlc2NJbmRleCk7CisgICAgVU5VU0VEX1BBUkFNKHNvdXJjZSk7CisKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAv
LyBFTkFCTEUoTUVESUFfU1RSRUFNKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9tZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb24uaCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uLmgKaW5k
ZXggNmNkM2IxOC4uZmI2ZjRmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9t
ZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb24uaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbi5oCkBA
IC0zMyw2ICszMyw3IEBACiAKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQogCisjaW5jbHVkZSAi
TWVkaWFFbmRwb2ludC5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAi
UGVlckNvbm5lY3Rpb25CYWNrZW5kLmgiCiAjaW5jbHVkZSAiUlRDU2Vzc2lvbkRlc2NyaXB0aW9u
LmgiCkBAIC00Miw3ICs0Myw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgTWVkaWFT
dHJlYW1UcmFjazsKIAotY2xhc3MgTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uIDogcHVibGlj
IFBlZXJDb25uZWN0aW9uQmFja2VuZCB7CitjbGFzcyBNZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rp
b24gOiBwdWJsaWMgUGVlckNvbm5lY3Rpb25CYWNrZW5kLCBwdWJsaWMgTWVkaWFFbmRwb2ludENs
aWVudCB7CiBwdWJsaWM6CiAgICAgTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uKFBlZXJDb25u
ZWN0aW9uQmFja2VuZENsaWVudCopOwogCkBAIC03MSw2ICs3MiwxMyBAQCBwdWJsaWM6CiAgICAg
Ym9vbCBpc05lZ290aWF0aW9uTmVlZGVkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7
IH07CiAgICAgdm9pZCBtYXJrQXNOZWVkaW5nTmVnb3RpYXRpb24oKSBvdmVycmlkZTsKICAgICB2
b2lkIGNsZWFyTmVnb3RpYXRpb25OZWVkZWRTdGF0ZSgpIG92ZXJyaWRlIHsgbm90SW1wbGVtZW50
ZWQoKTsgfTsKKworcHJpdmF0ZToKKyAgICAvLyBNZWRpYUVuZHBvaW50Q2xpZW50CisgICAgdmly
dHVhbCB2b2lkIGdvdER0bHNGaW5nZXJwcmludChjb25zdCBTdHJpbmcmIGZpbmdlcnByaW50LCBj
b25zdCBTdHJpbmcmIGZpbmdlcnByaW50RnVuY3Rpb24pIG92ZXJyaWRlOworICAgIHZpcnR1YWwg
dm9pZCBnb3RJY2VDYW5kaWRhdGUodW5zaWduZWQgbWRlc2NJbmRleCwgUmVmUHRyPEljZUNhbmRp
ZGF0ZT4mJikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGRvbmVHYXRoZXJpbmdDYW5kaWRh
dGVzKHVuc2lnbmVkIG1kZXNjSW5kZXgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBnb3RS
ZW1vdGVTb3VyY2UodW5zaWduZWQgbWRlc2NJbmRleCwgUmVmUHRyPFJlYWx0aW1lTWVkaWFTb3Vy
Y2U+JiYpIG92ZXJyaWRlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDlkZmQ3
ODEuLjgwNjdmNjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKQEAgLTI0MjgsNiArMjQyOCwxMyBAQAogCQk1RUE3MjVEMzFBQ0FCRDQ3
MDBFQUQxN0IgLyogTWVkaWFEZXZpY2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1RUE3MjVDRTFBQ0FCQ0Q5MDBFQUQxN0IgLyogTWVkaWFEZXZpY2Vz
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNUVB
NzI1RDUxQUNBQkQ1NzAwRUFEMTdCIC8qIE5hdmlnYXRvck1lZGlhRGV2aWNlcy5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RUE3MjVDQTFBQ0FCQ0I1
MDBFQUQxN0IgLyogTmF2aWdhdG9yTWVkaWFEZXZpY2VzLmNwcCAqLzsgfTsKIAkJNUVBNzI1RDYx
QUNBQkQ1NzAwRUFEMTdCIC8qIE5hdmlnYXRvck1lZGlhRGV2aWNlcy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUVBNzI1Q0IxQUNBQkNCNTAwRUFEMTdC
IC8qIE5hdmlnYXRvck1lZGlhRGV2aWNlcy5oICovOyB9OworCQk1RUJCODkzMTFDNzc3N0ZGMDBD
NjVENDEgLyogTWVkaWFQYXlsb2FkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1RUJCODkyRjFDNzc3N0QwMDBDNjVENDEgLyogTWVkaWFQYXlsb2FkLmgg
Ki87IH07CisJCTVFQkI4OTMyMUM3Nzc4MjMwMEM2NUQ0MSAvKiBNZWRpYUVuZHBvaW50U2Vzc2lv
bkNvbmZpZ3VyYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDVFQkI4OTJFMUM3Nzc3RDAwMEM2NUQ0MSAvKiBNZWRpYUVuZHBvaW50U2Vzc2lvbkNv
bmZpZ3VyYXRpb24uaCAqLzsgfTsKKwkJNUVCQjg5MzMxQzc3NzgyOTAwQzY1RDQxIC8qIEljZUNh
bmRpZGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NUVCQjg5MzAxQzc3NzdFMTAwQzY1RDQxIC8qIEljZUNhbmRpZGF0ZS5oICovOyB9OworCQk1RUJC
ODkzNDFDNzc3ODI5MDBDNjVENDEgLyogTWVkaWFFbmRwb2ludC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RUJCODkyQTFDNzc3N0QwMDBDNjVENDEg
LyogTWVkaWFFbmRwb2ludC5jcHAgKi87IH07CisJCTVFQkI4OTM1MUM3Nzc4MjkwMEM2NUQ0MSAv
KiBNZWRpYUVuZHBvaW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1RUJCODkyQjFDNzc3N0QwMDBDNjVENDEgLyogTWVkaWFFbmRwb2ludC5oICovOyB9
OworCQk1RUJCODkzNjFDNzc3ODI5MDBDNjVENDEgLyogTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRp
b24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUVC
Qjg5MkMxQzc3NzdEMDAwQzY1RDQxIC8qIE1lZGlhRW5kcG9pbnRDb25maWd1cmF0aW9uLmNwcCAq
LzsgfTsKKwkJNUVCQjg5MzcxQzc3NzgyOTAwQzY1RDQxIC8qIE1lZGlhRW5kcG9pbnRDb25maWd1
cmF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
RUJCODkyRDFDNzc3N0QwMDBDNjVENDEgLyogTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb24uaCAq
LzsgfTsKIAkJNUYyREJCRTkxNzhFM0M4MTAwMTQxNDg2IC8qIENlcnRpZmljYXRlSW5mb01hYy5t
bSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVGMkRCQkU3
MTc4RTMzMkQwMDE0MTQ4NiAvKiBDZXJ0aWZpY2F0ZUluZm9NYWMubW0gKi87IH07CiAJCTVGQTkw
NENBMTc4RTYxRjUwMDRDOEEyRCAvKiBDZXJ0aWZpY2F0ZUluZm8uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVGMkRCQkU4MTc4RTMzNjkwMDE0MTQ4NiAv
KiBDZXJ0aWZpY2F0ZUluZm8uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQk1RkM3REMyNkNGRTI1NjMyMDBCODVBRTQgLyogSlNFdmVudFRhcmdldC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUZDN0RDMjZD
RkUyNTYzMjAwQjg1QUU1IC8qIEpTRXZlbnRUYXJnZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTAwMDMsNiArMTAwMTAsMTMgQEAKIAkJNUVB
NzI1Q0QxQUNBQkNEOTAwRUFEMTdCIC8qIE1lZGlhRGV2aWNlcy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNZWRpYURldmljZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk1RUE3MjVDRTFBQ0FCQ0Q5MDBFQUQxN0IgLyogTWVkaWFEZXZpY2VzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhRGV2aWNlcy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1RUE3MjVDRjFBQ0FCQ0Q5MDBFQUQxN0IgLyogTWVkaWFE
ZXZpY2VzLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBNZWRpYURldmljZXMuaWRsOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1RUJCODkyQTFDNzc3N0QwMDBDNjVENDEgLyogTWVk
aWFFbmRwb2ludC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNZWRp
YUVuZHBvaW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUVCQjg5MkIxQzc3
NzdEMDAwQzY1RDQxIC8qIE1lZGlhRW5kcG9pbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gTWVkaWFFbmRwb2ludC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1
RUJCODkyQzFDNzc3N0QwMDBDNjVENDEgLyogTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb24uY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWVkaWFFbmRwb2ludENvbmZp
Z3VyYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1RUJCODkyRDFDNzc3
N0QwMDBDNjVENDEgLyogTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb24uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb24uaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUVCQjg5MkUxQzc3NzdEMDAwQzY1RDQxIC8qIE1lZGlh
RW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24uaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNUVCQjg5MkYxQzc3NzdEMDAwQzY1RDQxIC8qIE1lZGlhUGF5bG9h
ZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYVBheWxvYWQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUVCQjg5MzAxQzc3NzdFMTAwQzY1RDQxIC8qIElj
ZUNhbmRpZGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJY2VDYW5kaWRh
dGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUYyREJCRTcxNzhFMzMyRDAwMTQx
NDg2IC8qIENlcnRpZmljYXRlSW5mb01hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgcGF0aCA9IENlcnRpZmljYXRlSW5mb01hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNUYyREJCRTgxNzhFMzM2OTAwMTQxNDg2IC8qIENlcnRpZmljYXRlSW5mby5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDZXJ0aWZpY2F0ZUluZm8uaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUZDN0RDMjZDRkUyNTYzMjAwQjg1QUU1IC8qIEpTRXZl
bnRUYXJnZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRXZlbnRUYXJn
ZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE1NDU4LDcgKzE1NDcyLDE0IEBA
CiAJCQljaGlsZHJlbiA9ICgKIAkJCQkwNzI5QjE0RDE3Q0ZDQ0EwMDA0RjFENjAgLyogbWFjICov
LAogCQkJCTA3RDZBNEY2MUJGMjMwN0QwMDE3NDE0NiAvKiBBdWRpb1RyYWNrUHJpdmF0ZU1lZGlh
U3RyZWFtLmggKi8sCisJCQkJNUVCQjg5MzAxQzc3NzdFMTAwQzY1RDQxIC8qIEljZUNhbmRpZGF0
ZS5oICovLAogCQkJCTA3MjIxQjk5MTdDRjBBRDQwMDg0OEU1MSAvKiBNZWRpYUNvbnN0cmFpbnRz
LmggKi8sCisJCQkJNUVCQjg5MkExQzc3NzdEMDAwQzY1RDQxIC8qIE1lZGlhRW5kcG9pbnQuY3Bw
ICovLAorCQkJCTVFQkI4OTJCMUM3Nzc3RDAwMEM2NUQ0MSAvKiBNZWRpYUVuZHBvaW50LmggKi8s
CisJCQkJNUVCQjg5MkMxQzc3NzdEMDAwQzY1RDQxIC8qIE1lZGlhRW5kcG9pbnRDb25maWd1cmF0
aW9uLmNwcCAqLywKKwkJCQk1RUJCODkyRDFDNzc3N0QwMDBDNjVENDEgLyogTWVkaWFFbmRwb2lu
dENvbmZpZ3VyYXRpb24uaCAqLywKKwkJCQk1RUJCODkyRTFDNzc3N0QwMDBDNjVENDEgLyogTWVk
aWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uLmggKi8sCisJCQkJNUVCQjg5MkYxQzc3NzdE
MDAwQzY1RDQxIC8qIE1lZGlhUGF5bG9hZC5oICovLAogCQkJCTA3MEY1NDk3MTdGMTJGNkIwMDE2
OUUwNCAvKiBNZWRpYVN0cmVhbUNvbnN0cmFpbnRzVmFsaWRhdGlvbkNsaWVudC5oICovLAogCQkJ
CTA3MjIxQkEwMTdDRjBBRDQwMDg0OEU1MSAvKiBNZWRpYVN0cmVhbUNyZWF0aW9uQ2xpZW50Lmgg
Ki8sCiAJCQkJMDcxMTU4OEYxN0RGNjMzNzAwRURGRTJCIC8qIE1lZGlhU3RyZWFtUHJpdmF0ZS5j
cHAgKi8sCkBAIC0yNTI0OCw2ICsyNTI2OSw3IEBACiAJCQkJQkM1RUI5NTEwRTgyMDU2QjAwQjI1
OTY1IC8qIENvdW50ZXJEaXJlY3RpdmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzkyRjE0QzBB
RDE4NjFCMDA2OTFCRDQgLyogQ291bnRlck5vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUQwQjA1
NTY4MDlDNjcwMDEwMDMwN0U0MyAvKiBDcmVhdGVMaW5rQ29tbWFuZC5oIGluIEhlYWRlcnMgKi8s
CisJCQkJNUVCQjg5MzIxQzc3NzgyMzAwQzY1RDQxIC8qIE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29u
ZmlndXJhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE0Qzc2NkUwQ0U5MjNBMTAwN0VGM0NE
IC8qIENyZWRlbnRpYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTM3OTI5MTdBMTk4NUVGMzkwMEY0
QjY2MSAvKiBDcmVkZW50aWFsQmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzc5MjkxN0UxOTg3
Njc4RjAwRjRCNjYxIC8qIENyZWRlbnRpYWxDb2NvYS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNjI1
Nyw2ICsyNjI3OSw3IEBACiAJCQkJNTE4NUZDOTcxQkI0QzRFODAwMTI4OThGIC8qIElEQktleURh
dGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxODVGQzk5MUJCNEM0RTgwMDEyODk4RiAvKiBJREJL
ZXlQYXRoLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTg1RkM5QjFCQjRDNEU4MDAxMjg5OEYgLyog
SURCS2V5UmFuZ2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTVFQkI4OTM1MUM3Nzc4MjkwMEM2NUQ0
MSAvKiBNZWRpYUVuZHBvaW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTg1RkM5RTFCQjRDNEU4
MDAxMjg5OEYgLyogSURCS2V5UmFuZ2VEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTg1RkNB
MDFCQjRDNEU4MDAxMjg5OEYgLyogSURCT2JqZWN0U3RvcmUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTUxNjA3MTMxMUJEODMwODYwMERCQzRGMiAvKiBJREJPYmplY3RTdG9yZUltcGwuaCBpbiBIZWFk
ZXJzICovLApAQCAtMjY5OTksNiArMjcwMjIsNyBAQAogCQkJCTI5MTdCNTYzMTQ3MzQ5NkMwMDUy
QzlEMCAvKiBMYXllckZsdXNoU2NoZWR1bGVyQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlF
NDkxNkZGNzE5NURGNkEwMDA1QUIzNDkgLyogTGF5ZXJGbHVzaFRocm90dGxlU3RhdGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTU4MDM3MTY0MUE2NkYxRDMwMEJBRjUxOSAvKiBMYXllckZyYWdtZW50
LmggaW4gSGVhZGVycyAqLywKKwkJCQk1RUJCODkzMzFDNzc3ODI5MDBDNjVENDEgLyogSWNlQ2Fu
ZGlkYXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3QUEzQTZBMDE5NEI1OUI2MDAxQ0JEMjQgLyog
TGF5ZXJQb29sLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzFENzJGNjE1RkU2OTUzMDBDNEMwN0Ug
LyogTGF5b3V0TWlsZXN0b25lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQxREMwNTExNjQ4MzRC
OTAwMzcxRTVBIC8qIExheW91dFBvaW50LmggaW4gSGVhZGVycyAqLywKQEAgLTI4MDQ2LDYgKzI4
MDcwLDcgQEAKIAkJCQlCMjM3QzhBODBEMzQ0RDExMDAxM0Y3MDcgLyogU1ZHRm9udERhdGEuaCBp
biBIZWFkZXJzICovLAogCQkJCUIyQTFGMkFCMENFRjBBQkYwMDQ0MkY2QSAvKiBTVkdGb250RWxl
bWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjdBMTUwRDAwQkYyMjAwNzFCNzgyIC8qIFNW
R0ZvbnRGYWNlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNUVCQjg5MzExQzc3NzdGRjAw
QzY1RDQxIC8qIE1lZGlhUGF5bG9hZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjdBMTgwRDAw
QkYyMjAwNzFCNzgyIC8qIFNWR0ZvbnRGYWNlRm9ybWF0RWxlbWVudC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQjIyMjdBMUIwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0ZvbnRGYWNlTmFtZUVsZW1lbnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3QTFFMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdGb250
RmFjZVNyY0VsZW1lbnQuaCBpbiBIZWFkZXJzICovLApAQCAtMjgzNTYsNiArMjgzODEsNyBAQAog
CQkJCTdDRTY4MzQ1MTkyMTQzQTgwMEY0RDkyOCAvKiBVc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlw
dG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk3Q0U2ODM0NzE5MjE4MjE1MDBGNEQ5MjggLyogVXNl
ck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvclR5cGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk3Qzcz
RkIwODE5MUVGNDE3MDA3REUwNjEgLyogVXNlck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFjZS5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJNUVCQjg5MzcxQzc3NzgyOTAwQzY1RDQxIC8qIE1lZGlhRW5kcG9p
bnRDb25maWd1cmF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0EyQjA2MTEwNTA0NzYwMDA0
M0JEMUMgLyogVXNlclNjcmlwdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNBMkIwOEIxMDUwNUJD
RDAwNDNCRDFDIC8qIFVzZXJTY3JpcHRUeXBlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM4QkYx
NTExMDU4MTNCRjAwQTQwQTA3IC8qIFVzZXJTdHlsZVNoZWV0LmggaW4gSGVhZGVycyAqLywKQEAg
LTMxMzY0LDYgKzMxMzkwLDcgQEAKIAkJCQkwRkI4ODkwRTE2N0QzMDE2MDAxMENEQTUgLyogU2Ny
b2xsaW5nU3RhdGVTdGlja3lOb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzMUNCRDEwMTYx
QTQ0RTkwMEU0Qzg3NCAvKiBTY3JvbGxpbmdTdGF0ZVRyZWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMUFGNjJGMjUxNERBRkU5RTAwNDE1NTZDIC8qIFNjcm9sbGluZ1RocmVhZC5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQk1RUJCODkzNjFDNzc3ODI5MDBDNjVENDEgLyogTWVkaWFFbmRwb2ludENv
bmZpZ3VyYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFGNjJGMjQxNERBRkU5MTAwNDE1
NTZDIC8qIFNjcm9sbGluZ1RocmVhZE1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFBQUFEREEz
MTREQjQwOUYwMEFGNjRCMyAvKiBTY3JvbGxpbmdUcmVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTkzQzM4QzA0MTY0NDczREQwMDA5MUVCMiAvKiBTY3JvbGxpbmdUcmVlRml4ZWROb2RlLm1tIGlu
IFNvdXJjZXMgKi8sCkBAIC0zMTUzMyw2ICszMTU2MCw3IEBACiAJCQkJN0UzN0VGMkUxMzM5MjA4
ODAwQjI5MjUwIC8qIFN1YnJlc291cmNlTG9hZGVyQ0YuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
N0U4RkFEQzQxOTlBOTVCMTAwNzE0OTY4IC8qIFN1YnJlc291cmNlTG9hZGVyQ29jb2EubW0gaW4g
U291cmNlcyAqLywKIAkJCQlFMUZGOEY1RjE4MDc0NDIxMDAxMzI2NzQgLyogU3VidGxlQ3J5cHRv
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTVFQkI4OTM0MUM3Nzc4MjkwMEM2NUQ0MSAvKiBNZWRp
YUVuZHBvaW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzQjJEODE4MEY5OTIwRUUwMDZBRTZC
MiAvKiBTdWRkZW5UZXJtaW5hdGlvbi5tbSBpbiBTb3VyY2VzICovLAogCQkJCTU3MkE3RjIzMUM2
RTVBNjYwMDlDNjE0OSAvKiBTaW11bGF0ZWRDbGljay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
ODc1NThDNTEzQjRBNTdEMDBGNDkzMDcgLyogU3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9y
LmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vSWNlQ2FuZGlkYXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9JY2VDYW5kaWRhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li41MTJhMDdhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vSWNlQ2FuZGlkYXRlLmgKQEAgLTAsMCArMSwxMjIgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUgRXJpY3Nzb24gQUIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqICAgIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3Ry
aWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgRXJpY3Nzb24gbm9yIHRoZSBuYW1l
cyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJ
Y2VDYW5kaWRhdGVfaAorI2RlZmluZSBJY2VDYW5kaWRhdGVfaAorCisjaWYgRU5BQkxFKE1FRElB
X1NUUkVBTSkKKworI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIEljZUNhbmRpZGF0ZSA6IHB1YmxpYyBSZWZDb3VudGVkPEljZUNhbmRp
ZGF0ZT4geworcHVibGljOgorICAgIHN0YXRpYyBSZWZQdHI8SWNlQ2FuZGlkYXRlPiBjcmVhdGUo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJY2VDYW5kaWRhdGUoKSk7Cisg
ICAgfQorICAgIHZpcnR1YWwgfkljZUNhbmRpZGF0ZSgpIHsgfQorCisgICAgY29uc3QgU3RyaW5n
JiB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CisgICAgdm9pZCBzZXRUeXBlKGNvbnN0
IFN0cmluZyYgdHlwZSkgeyBtX3R5cGUgPSB0eXBlOyB9CisKKyAgICBjb25zdCBTdHJpbmcmIGZv
dW5kYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2ZvdW5kYXRpb247IH0KKyAgICB2b2lkIHNldEZv
dW5kYXRpb24oY29uc3QgU3RyaW5nJiBmb3VuZGF0aW9uKSB7IG1fZm91bmRhdGlvbiA9IGZvdW5k
YXRpb247IH0KKworICAgIHVuc2lnbmVkIGNvbXBvbmVudElkKCkgY29uc3QgeyByZXR1cm4gbV9j
b21wb25lbnRJZDsgfQorICAgIHZvaWQgc2V0Q29tcG9uZW50SWQodW5zaWduZWQgY29tcG9uZW50
SWQpIHsgbV9jb21wb25lbnRJZCA9IGNvbXBvbmVudElkOyB9CisKKyAgICBjb25zdCBTdHJpbmcm
IHRyYW5zcG9ydCgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNwb3J0OyB9CisgICAgdm9pZCBzZXRU
cmFuc3BvcnQoY29uc3QgU3RyaW5nJiB0cmFuc3BvcnQpIHsgbV90cmFuc3BvcnQgPSB0cmFuc3Bv
cnQ7IH0KKworICAgIGludCBwcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJpb3JpdHk7IH0K
KyAgICB2b2lkIHNldFByaW9yaXR5KGludCBwcmlvcml0eSkgeyBtX3ByaW9yaXR5ID0gcHJpb3Jp
dHk7IH0KKworICAgIGNvbnN0IFN0cmluZyYgYWRkcmVzcygpIGNvbnN0IHsgcmV0dXJuIG1fYWRk
cmVzczsgfQorICAgIHZvaWQgc2V0QWRkcmVzcyhjb25zdCBTdHJpbmcmIGFkZHJlc3MpIHsgbV9h
ZGRyZXNzID0gYWRkcmVzczsgfQorCisgICAgdW5zaWduZWQgcG9ydCgpIGNvbnN0IHsgcmV0dXJu
IG1fcG9ydDsgfQorICAgIHZvaWQgc2V0UG9ydCh1bnNpZ25lZCBwb3J0KSB7IG1fcG9ydCA9IHBv
cnQ7IH0KKworICAgIGNvbnN0IFN0cmluZyYgdGNwVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGNw
VHlwZTsgfQorICAgIHZvaWQgc2V0VGNwVHlwZShjb25zdCBTdHJpbmcmIHRjcFR5cGUpIHsgbV90
Y3BUeXBlID0gdGNwVHlwZTsgfQorCisgICAgY29uc3QgU3RyaW5nJiByZWxhdGVkQWRkcmVzcygp
IGNvbnN0IHsgcmV0dXJuIG1fcmVsYXRlZEFkZHJlc3M7IH0KKyAgICB2b2lkIHNldFJlbGF0ZWRB
ZGRyZXNzKGNvbnN0IFN0cmluZyYgcmVsYXRlZEFkZHJlc3MpIHsgbV9yZWxhdGVkQWRkcmVzcyA9
IHJlbGF0ZWRBZGRyZXNzOyB9CisKKyAgICB1bnNpZ25lZCByZWxhdGVkUG9ydCgpIGNvbnN0IHsg
cmV0dXJuIG1fcmVsYXRlZFBvcnQ7IH0KKyAgICB2b2lkIHNldFJlbGF0ZWRQb3J0KHVuc2lnbmVk
IHJlbGF0ZWRQb3J0KSB7IG1fcmVsYXRlZFBvcnQgPSByZWxhdGVkUG9ydDsgfQorCisgICAgUmVm
UHRyPEljZUNhbmRpZGF0ZT4gY2xvbmUoKSBjb25zdAorICAgIHsKKyAgICAgICAgUmVmUHRyPElj
ZUNhbmRpZGF0ZT4gY29weSA9IGNyZWF0ZSgpOworCisgICAgICAgIGNvcHktPm1fdHlwZSA9IFN0
cmluZyhtX3R5cGUpOworICAgICAgICBjb3B5LT5tX2ZvdW5kYXRpb24gPSBTdHJpbmcobV9mb3Vu
ZGF0aW9uKTsKKyAgICAgICAgY29weS0+bV9jb21wb25lbnRJZCA9IG1fY29tcG9uZW50SWQ7Cisg
ICAgICAgIGNvcHktPm1fdHJhbnNwb3J0ID0gU3RyaW5nKG1fdHJhbnNwb3J0KTsKKyAgICAgICAg
Y29weS0+bV9wcmlvcml0eSA9IG1fcHJpb3JpdHk7CisgICAgICAgIGNvcHktPm1fYWRkcmVzcyA9
IFN0cmluZyhtX2FkZHJlc3MpOworICAgICAgICBjb3B5LT5tX3BvcnQgPSBtX3BvcnQ7CisgICAg
ICAgIGNvcHktPm1fdGNwVHlwZSA9IFN0cmluZyhtX3RjcFR5cGUpOworICAgICAgICBjb3B5LT5t
X3JlbGF0ZWRBZGRyZXNzID0gU3RyaW5nKG1fcmVsYXRlZEFkZHJlc3MpOworICAgICAgICBjb3B5
LT5tX3JlbGF0ZWRQb3J0ID0gbV9yZWxhdGVkUG9ydDsKKworICAgICAgICByZXR1cm4gY29weTsK
KyAgICB9CisKK3ByaXZhdGU6CisgICAgSWNlQ2FuZGlkYXRlKCkKKyAgICAgICAgOiBtX2NvbXBv
bmVudElkKDApCisgICAgICAgICwgbV9wcmlvcml0eSgwKQorICAgICAgICAsIG1fcG9ydCgwKQor
ICAgICAgICAsIG1fcmVsYXRlZFBvcnQoMCkKKyAgICB7IH0KKworICAgIFN0cmluZyBtX3R5cGU7
CisgICAgU3RyaW5nIG1fZm91bmRhdGlvbjsKKyAgICB1bnNpZ25lZCBtX2NvbXBvbmVudElkOwor
ICAgIFN0cmluZyBtX3RyYW5zcG9ydDsKKyAgICBpbnQgbV9wcmlvcml0eTsKKyAgICBTdHJpbmcg
bV9hZGRyZXNzOworICAgIHVuc2lnbmVkIG1fcG9ydDsKKyAgICBTdHJpbmcgbV90Y3BUeXBlOwor
ICAgIFN0cmluZyBtX3JlbGF0ZWRBZGRyZXNzOworICAgIHVuc2lnbmVkIG1fcmVsYXRlZFBvcnQ7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFf
U1RSRUFNKQorCisjZW5kaWYgLy8gSWNlQ2FuZGlkYXRlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhRW5kcG9pbnQuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFFbmRwb2ludC5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDFmYjZjNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhRW5kcG9pbnQuY3BwCkBAIC0wLDAg
KzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgRXJpY3Nzb24gQUIuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
KyAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUg
b2YgRXJpY3Nzb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMK
KyAqICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKE1FRElBX1NU
UkVBTSkKKyNpbmNsdWRlICJNZWRpYUVuZHBvaW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
Kworc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxNZWRpYUVuZHBvaW50PiBjcmVhdGVNZWRpYUVuZHBv
aW50KE1lZGlhRW5kcG9pbnRDbGllbnQqKQoreworICAgIHJldHVybiBudWxscHRyOworfQorCitD
cmVhdGVNZWRpYUVuZHBvaW50IE1lZGlhRW5kcG9pbnQ6OmNyZWF0ZSA9IGNyZWF0ZU1lZGlhRW5k
cG9pbnQ7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShNRURJ
QV9TVFJFQU0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9NZWRpYUVuZHBvaW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9N
ZWRpYUVuZHBvaW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTcwNjg4
ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L01lZGlhRW5kcG9pbnQuaApAQCAtMCwwICsxLDkwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEVyaWNzc29uIEFCLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiAgICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24u
CisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEVyaWNzc29uIG5vciB0aGUgbmFtZXMgb2YgaXRz
IGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgTWVkaWFFbmRw
b2ludF9oCisjZGVmaW5lIE1lZGlhRW5kcG9pbnRfaAorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVB
TSkKKworI2luY2x1ZGUgIk1lZGlhRW5kcG9pbnRDb25maWd1cmF0aW9uLmgiCisjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSWNl
Q2FuZGlkYXRlOworY2xhc3MgTWVkaWFFbmRwb2ludDsKK2NsYXNzIE1lZGlhRW5kcG9pbnRTZXNz
aW9uQ29uZmlndXJhdGlvbjsKK2NsYXNzIE1lZGlhUGF5bG9hZDsKK2NsYXNzIFJlYWx0aW1lTWVk
aWFTb3VyY2U7CisKK2NsYXNzIE1lZGlhRW5kcG9pbnRDbGllbnQgeworcHVibGljOgorICAgIHZp
cnR1YWwgdm9pZCBnb3REdGxzRmluZ2VycHJpbnQoY29uc3QgU3RyaW5nJiBmaW5nZXJwcmludCwg
Y29uc3QgU3RyaW5nJiBmaW5nZXJwcmludEZ1bmN0aW9uKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IGdvdEljZUNhbmRpZGF0ZSh1bnNpZ25lZCBtZGVzY0luZGV4LCBSZWZQdHI8SWNlQ2FuZGlkYXRl
PiYmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRvbmVHYXRoZXJpbmdDYW5kaWRhdGVzKHVuc2ln
bmVkIG1kZXNjSW5kZXgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZ290UmVtb3RlU291cmNlKHVu
c2lnbmVkIG1kZXNjSW5kZXgsIFJlZlB0cjxSZWFsdGltZU1lZGlhU291cmNlPiYmKSA9IDA7CisK
KyAgICB2aXJ0dWFsIH5NZWRpYUVuZHBvaW50Q2xpZW50KCkgeyB9Cit9OworCit0eXBlZGVmIHN0
ZDo6dW5pcXVlX3B0cjxNZWRpYUVuZHBvaW50PiAoKkNyZWF0ZU1lZGlhRW5kcG9pbnQpKE1lZGlh
RW5kcG9pbnRDbGllbnQqKTsKKworY2xhc3MgTWVkaWFFbmRwb2ludCB7CitwdWJsaWM6CisgICAg
V0VCQ09SRV9FWFBPUlQgc3RhdGljIENyZWF0ZU1lZGlhRW5kcG9pbnQgY3JlYXRlOworICAgIHZp
cnR1YWwgfk1lZGlhRW5kcG9pbnQoKSB7IH0KKworICAgIGVudW0gY2xhc3MgVXBkYXRlUmVzdWx0
IHsKKyAgICAgICAgU3VjY2VzcywKKyAgICAgICAgU3VjY2Vzc1dpdGhJY2VSZXN0YXJ0LAorICAg
ICAgICBGYWlsZWQKKyAgICB9OworCisgICAgdmlydHVhbCB2b2lkIHNldENvbmZpZ3VyYXRpb24o
UmVmUHRyPE1lZGlhRW5kcG9pbnRDb25maWd1cmF0aW9uPiYmKSA9IDA7CisKKyAgICB2aXJ0dWFs
IHZvaWQgZ2VuZXJhdGVEdGxzSW5mbygpID0gMDsKKyAgICB2aXJ0dWFsIFZlY3RvcjxSZWZQdHI8
TWVkaWFQYXlsb2FkPj4gZ2V0RGVmYXVsdEF1ZGlvUGF5bG9hZHMoKSA9IDA7CisgICAgdmlydHVh
bCBWZWN0b3I8UmVmUHRyPE1lZGlhUGF5bG9hZD4+IGdldERlZmF1bHRWaWRlb1BheWxvYWRzKCkg
PSAwOworCisgICAgdmlydHVhbCBVcGRhdGVSZXN1bHQgdXBkYXRlUmVjZWl2ZUNvbmZpZ3VyYXRp
b24oTWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uKiwgYm9vbCBpc0luaXRpYXRvcikg
PSAwOworICAgIHZpcnR1YWwgVXBkYXRlUmVzdWx0IHVwZGF0ZVNlbmRDb25maWd1cmF0aW9uKE1l
ZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbiosIGJvb2wgaXNJbml0aWF0b3IpID0gMDsK
KworICAgIHZpcnR1YWwgdm9pZCBhZGRSZW1vdGVDYW5kaWRhdGUoSWNlQ2FuZGlkYXRlJiwgdW5z
aWduZWQgbWRlc2NJbmRleCwgY29uc3QgU3RyaW5nJiB1ZnJhZywgY29uc3QgU3RyaW5nJiBwYXNz
d29yZCkgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHJlcGxhY2VTZW5kU291cmNlKFJlYWx0aW1l
TWVkaWFTb3VyY2UmLCB1bnNpZ25lZCBtZGVzY0luZGV4KSA9IDA7CisKKyAgICB2aXJ0dWFsIHZv
aWQgc3RvcCgpID0gMDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IEVOQUJMRShNRURJQV9TVFJFQU0pCisKKyNlbmRpZiAvLyBNZWRpYUVuZHBvaW50X2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhRW5kcG9pbnRD
b25maWd1cmF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01l
ZGlhRW5kcG9pbnRDb25maWd1cmF0aW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5hMjZhY2IxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb24uY3BwCkBAIC0wLDAgKzEs
NzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgRXJpY3Nzb24gQUIuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAq
ICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2Yg
RXJpY3Nzb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAq
ICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk1lZGlhRW5kcG9pbnRD
b25maWd1cmF0aW9uLmgiCisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK0ljZVNlcnZlckluZm86OkljZVNlcnZlckluZm8oY29uc3QgVmVjdG9yPFN0
cmluZz4mIHVybHMsIGNvbnN0IFN0cmluZyYgY3JlZGVudGlhbCwgY29uc3QgU3RyaW5nJiB1c2Vy
bmFtZSkKKyAgICA6IG1fY3JlZGVudGlhbChjcmVkZW50aWFsKQorICAgICwgbV91c2VybmFtZSh1
c2VybmFtZSkKK3sKKyAgICBtX3VybHMucmVzZXJ2ZUNhcGFjaXR5KHVybHMuc2l6ZSgpKTsKKyAg
ICBmb3IgKGF1dG8mIHVybCA6IHVybHMpCisgICAgICAgIG1fdXJscy5hcHBlbmQoVVJMKFVSTCgp
LCB1cmwpKTsKK30KKworTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb246Ok1lZGlhRW5kcG9pbnRD
b25maWd1cmF0aW9uKFZlY3RvcjxSZWZQdHI8SWNlU2VydmVySW5mbz4+JiBpY2VTZXJ2ZXJzLCBj
b25zdCBTdHJpbmcmIGljZVRyYW5zcG9ydFBvbGljeSwgY29uc3QgU3RyaW5nJiBidW5kbGVQb2xp
Y3kpCisgICAgOiBtX2ljZVNlcnZlcnMoaWNlU2VydmVycykKK3sKKyAgICBpZiAoaWNlVHJhbnNw
b3J0UG9saWN5ID09ICJub25lIikKKyAgICAgICAgbV9pY2VUcmFuc3BvcnRQb2xpY3kgPSBJY2VU
cmFuc3BvcnRQb2xpY3k6Ok5vbmU7CisgICAgZWxzZSBpZiAoaWNlVHJhbnNwb3J0UG9saWN5ID09
ICJyZWxheSIpCisgICAgICAgIG1faWNlVHJhbnNwb3J0UG9saWN5ID0gSWNlVHJhbnNwb3J0UG9s
aWN5OjpSZWxheTsKKyAgICBlbHNlIGlmIChpY2VUcmFuc3BvcnRQb2xpY3kgPT0gImFsbCIpCisg
ICAgICAgIG1faWNlVHJhbnNwb3J0UG9saWN5ID0gSWNlVHJhbnNwb3J0UG9saWN5OjpBbGw7Cisg
ICAgZWxzZQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKworICAgIGlmIChidW5kbGVQ
b2xpY3kgPT0gImJhbGFuY2VkIikKKyAgICAgICAgbV9idW5kbGVQb2xpY3kgPSBCdW5kbGVQb2xp
Y3k6OkJhbGFuY2VkOworICAgIGVsc2UgaWYgKGJ1bmRsZVBvbGljeSA9PSAibWF4LWNvbXBhdCIp
CisgICAgICAgIG1fYnVuZGxlUG9saWN5ID0gQnVuZGxlUG9saWN5OjpNYXhDb21wYXQ7CisgICAg
ZWxzZSBpZiAoYnVuZGxlUG9saWN5ID09ICJtYXgtYnVuZGxlIikKKyAgICAgICAgbV9idW5kbGVQ
b2xpY3kgPSBCdW5kbGVQb2xpY3k6Ok1heEJ1bmRsZTsKKyAgICBlbHNlCisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBFTkFCTEUoTUVESUFfU1RSRUFNKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb24uaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhRW5kcG9pbnRDb25maWd1cmF0aW9uLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmUwMzJiNAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhRW5kcG9pbnRDb25m
aWd1cmF0aW9uLmgKQEAgLTAsMCArMSw5OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBF
cmljc3NvbiBBQi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorICogICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICog
My4gTmVpdGhlciB0aGUgbmFtZSBvZiBFcmljc3NvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250
cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20gdGhpcworICogICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIE1lZGlhRW5kcG9pbnRD
b25maWd1cmF0aW9uX2gKKyNkZWZpbmUgTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb25faAorCisj
aWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKworI2luY2x1ZGUgIlVSTC5oIgorI2luY2x1ZGUgPHd0
Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBJY2VTZXJ2ZXJJbmZvIDogcHVibGljIFJlZkNvdW50ZWQ8SWNlU2Vy
dmVySW5mbz4geworcHVibGljOgorICAgIHN0YXRpYyBSZWZQdHI8SWNlU2VydmVySW5mbz4gY3Jl
YXRlKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiB1cmxzLCBjb25zdCBTdHJpbmcmIGNyZWRlbnRpYWws
IGNvbnN0IFN0cmluZyYgdXNlcm5hbWUpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IEljZVNlcnZlckluZm8odXJscywgY3JlZGVudGlhbCwgdXNlcm5hbWUpKTsKKyAgICB9Cisg
ICAgdmlydHVhbCB+SWNlU2VydmVySW5mbygpIHsgfQorCisgICAgY29uc3QgVmVjdG9yPFVSTD4m
IHVybHMoKSBjb25zdCB7IHJldHVybiBtX3VybHM7IH0KKyAgICBjb25zdCBTdHJpbmcmIGNyZWRl
bnRpYWwoKSBjb25zdCB7IHJldHVybiBtX2NyZWRlbnRpYWw7IH0KKyAgICBjb25zdCBTdHJpbmcm
IHVzZXJuYW1lKCkgY29uc3QgeyByZXR1cm4gbV91c2VybmFtZTsgfQorCitwcml2YXRlOgorICAg
IEljZVNlcnZlckluZm8oY29uc3QgVmVjdG9yPFN0cmluZz4mIHVybHMsIGNvbnN0IFN0cmluZyYg
Y3JlZGVudGlhbCwgY29uc3QgU3RyaW5nJiB1c2VybmFtZSk7CisKKyAgICBWZWN0b3I8VVJMPiBt
X3VybHM7CisgICAgU3RyaW5nIG1fY3JlZGVudGlhbDsKKyAgICBTdHJpbmcgbV91c2VybmFtZTsK
K307CisKK2NsYXNzIE1lZGlhRW5kcG9pbnRDb25maWd1cmF0aW9uIDogcHVibGljIFJlZkNvdW50
ZWQ8TWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb24+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVm
UHRyPE1lZGlhRW5kcG9pbnRDb25maWd1cmF0aW9uPiBjcmVhdGUoVmVjdG9yPFJlZlB0cjxJY2VT
ZXJ2ZXJJbmZvPj4mIGljZVNlcnZlcnMsIGNvbnN0IFN0cmluZyYgaWNlVHJhbnNwb3J0UG9saWN5
LCBjb25zdCBTdHJpbmcmIGJ1bmRsZVBvbGljeSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb24oaWNlU2VydmVycywgaWNlVHJhbnNw
b3J0UG9saWN5LCBidW5kbGVQb2xpY3kpKTsKKyAgICB9CisKKyAgICBlbnVtIGNsYXNzIEljZVRy
YW5zcG9ydFBvbGljeSB7CisgICAgICAgIE5vbmUsCisgICAgICAgIFJlbGF5LAorICAgICAgICBB
bGwKKyAgICB9OworCisgICAgZW51bSBjbGFzcyBCdW5kbGVQb2xpY3kgeworICAgICAgICBCYWxh
bmNlZCwKKyAgICAgICAgTWF4Q29tcGF0LAorICAgICAgICBNYXhCdW5kbGUKKyAgICB9OworCisg
ICAgY29uc3QgVmVjdG9yPFJlZlB0cjxJY2VTZXJ2ZXJJbmZvPj4mIGljZVNlcnZlcnMoKSBjb25z
dCB7IHJldHVybiBtX2ljZVNlcnZlcnM7IH0KKyAgICBJY2VUcmFuc3BvcnRQb2xpY3kgaWNlVHJh
bnNwb3J0UG9saWN5KCkgY29uc3QgeyByZXR1cm4gbV9pY2VUcmFuc3BvcnRQb2xpY3k7IH0KKyAg
ICBCdW5kbGVQb2xpY3kgYnVuZGxlUG9saWN5KCkgY29uc3QgeyByZXR1cm4gbV9idW5kbGVQb2xp
Y3k7IH0KKworcHJpdmF0ZToKKyAgICBNZWRpYUVuZHBvaW50Q29uZmlndXJhdGlvbihWZWN0b3I8
UmVmUHRyPEljZVNlcnZlckluZm8+PiYsIGNvbnN0IFN0cmluZyYgaWNlVHJhbnNwb3J0UG9saWN5
LCBjb25zdCBTdHJpbmcmIGJ1bmRsZVBvbGljeSk7CisKKyAgICBWZWN0b3I8UmVmUHRyPEljZVNl
cnZlckluZm8+PiBtX2ljZVNlcnZlcnM7CisgICAgSWNlVHJhbnNwb3J0UG9saWN5IG1faWNlVHJh
bnNwb3J0UG9saWN5OworICAgIEJ1bmRsZVBvbGljeSBtX2J1bmRsZVBvbGljeTsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCisK
KyNlbmRpZiAvLyBNZWRpYUVuZHBvaW50Q29uZmlndXJhdGlvbl9oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZp
Z3VyYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhRW5k
cG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjI3OGY1ZTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24uaApAQCAtMCww
ICsxLDg2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEVyaWNzc29uIEFCLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
CisgKiAgICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEVyaWNzc29uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlz
CisgKiAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
KyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgTWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9u
X2gKKyNkZWZpbmUgTWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uX2gKKworI2lmIEVO
QUJMRShNRURJQV9TVFJFQU0pCisKKyNpbmNsdWRlICJQZWVyTWVkaWFEZXNjcmlwdGlvbi5oIgor
I2luY2x1ZGUgPHd0Zi9DcnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJlci5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbiA6
IHB1YmxpYyBSZWZDb3VudGVkPE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbj4gewor
cHVibGljOgorICAgIHN0YXRpYyBSZWZQdHI8TWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0
aW9uPiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNZWRpYUVu
ZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24oKSk7CisgICAgfQorICAgIHZpcnR1YWwgfk1lZGlh
RW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbigpIHsgfQorCisgICAgdWludDY0X3Qgc2Vzc2lv
bklkKCkgY29uc3QgeyByZXR1cm4gbV9zZXNzaW9uSWQ7IH0KKyAgICB2b2lkIHNldFNlc3Npb25J
ZCh1aW50NjRfdCBzZXNzaW9uSWQpIHsgbV9zZXNzaW9uSWQgPSBzZXNzaW9uSWQ7IH0KKworICAg
IHVuc2lnbmVkIHNlc3Npb25WZXJzaW9uKCkgY29uc3QgeyByZXR1cm4gbV9zZXNzaW9uVmVyc2lv
bjsgfQorICAgIHZvaWQgc2V0U2Vzc2lvblZlcnNpb24odW5zaWduZWQgc2Vzc2lvblZlcnNpb24p
IHsgbV9zZXNzaW9uVmVyc2lvbiA9IHNlc3Npb25WZXJzaW9uOyB9CisKKyAgICBjb25zdCBWZWN0
b3I8UmVmUHRyPFBlZXJNZWRpYURlc2NyaXB0aW9uPj4mIG1lZGlhRGVzY3JpcHRpb25zKCkgY29u
c3QgeyByZXR1cm4gbV9tZWRpYURlc2NyaXB0aW9uczsgfQorICAgIHZvaWQgYWRkTWVkaWFEZXNj
cmlwdGlvbihSZWZQdHI8UGVlck1lZGlhRGVzY3JpcHRpb24+JiYgZGVzY3JpcHRpb24pIHsgbV9t
ZWRpYURlc2NyaXB0aW9ucy5hcHBlbmQoV1RGTW92ZShkZXNjcmlwdGlvbikpOyB9CisKKyAgICBS
ZWZQdHI8TWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uPiBjbG9uZSgpIGNvbnN0Cisg
ICAgeworICAgICAgICBSZWZQdHI8TWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uPiBj
b3B5ID0gY3JlYXRlKCk7CisgICAgICAgIGNvcHktPm1fc2Vzc2lvbklkID0gbV9zZXNzaW9uSWQ7
CisgICAgICAgIGNvcHktPm1fc2Vzc2lvblZlcnNpb24gPSBtX3Nlc3Npb25WZXJzaW9uOworCisg
ICAgICAgIGZvciAoYXV0byYgbWRlc2MgOiBtX21lZGlhRGVzY3JpcHRpb25zKQorICAgICAgICAg
ICAgY29weS0+bV9tZWRpYURlc2NyaXB0aW9ucy5hcHBlbmQobWRlc2MtPmNsb25lKCkpOworCisg
ICAgICAgIHJldHVybiBjb3B5OworICAgIH0KKworcHJpdmF0ZToKKyAgICBNZWRpYUVuZHBvaW50
U2Vzc2lvbkNvbmZpZ3VyYXRpb24oKQorICAgICAgICA6IG1fc2Vzc2lvbklkKGNyeXB0b2dyYXBo
aWNhbGx5UmFuZG9tTnVtYmVyKCkpIC8vIEZJWE1FOiBzaG91bGQgYmUgNjQgYml0cworICAgICAg
ICAsIG1fc2Vzc2lvblZlcnNpb24oMCkKKyAgICB7IH0KKworICAgIHVpbnQ2NF90IG1fc2Vzc2lv
bklkOworICAgIHVuc2lnbmVkIG1fc2Vzc2lvblZlcnNpb247CisKKyAgICBWZWN0b3I8UmVmUHRy
PFBlZXJNZWRpYURlc2NyaXB0aW9uPj4gbV9tZWRpYURlc2NyaXB0aW9uczsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCisKKyNl
bmRpZiAvLyBNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb25faApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFQYXlsb2FkLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVBheWxvYWQuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jM2UyZWY2Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFQYXlsb2FkLmgKQEAgLTAsMCAr
MSwxMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgRXJpY3Nzb24gQUIuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
KyAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUg
b2YgRXJpY3Nzb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMK
KyAqICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBNZWRpYVBheWxvYWRfaAorI2RlZmluZSBNZWRpYVBheWxv
YWRfaAorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKworI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIE1lZGlhUGF5bG9hZCA6IHB1YmxpYyBSZWZDb3VudGVkPE1lZGlhUGF5bG9hZD4g
eworcHVibGljOgorICAgIHN0YXRpYyBSZWZQdHI8TWVkaWFQYXlsb2FkPiBjcmVhdGUoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNZWRpYVBheWxvYWQoKSk7CisgICAgfQor
ICAgIHZpcnR1YWwgfk1lZGlhUGF5bG9hZCgpIHsgfQorCisgICAgdW5zaWduZWQgdHlwZSgpIGNv
bnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorICAgIHZvaWQgc2V0VHlwZSh1bnNpZ25lZCB0eXBlKSB7
IG1fdHlwZSA9IHR5cGU7IH0KKworICAgIGNvbnN0IFN0cmluZyYgZW5jb2RpbmdOYW1lKCkgY29u
c3QgeyByZXR1cm4gbV9lbmNvZGluZ05hbWU7IH0KKyAgICB2b2lkIHNldEVuY29kaW5nTmFtZShj
b25zdCBTdHJpbmcgJiBlbmNvZGluZ05hbWUpIHsgbV9lbmNvZGluZ05hbWUgPSBlbmNvZGluZ05h
bWU7IH0KKworICAgIHVuc2lnbmVkIGNsb2NrUmF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2xvY2tS
YXRlOyB9CisgICAgdm9pZCBzZXRDbG9ja1JhdGUodW5zaWduZWQgY2xvY2tSYXRlKSB7IG1fY2xv
Y2tSYXRlID0gY2xvY2tSYXRlOyB9CisKKyAgICB1bnNpZ25lZCBjaGFubmVscygpIGNvbnN0IHsg
cmV0dXJuIG1fY2hhbm5lbHM7IH0KKyAgICB2b2lkIHNldENoYW5uZWxzKHVuc2lnbmVkIGNoYW5u
ZWxzKSB7IG1fY2hhbm5lbHMgPSBjaGFubmVsczsgfQorCisgICAgYm9vbCBjY21maXIoKSBjb25z
dCB7IHJldHVybiBtX2NjbWZpcjsgfQorICAgIHZvaWQgc2V0Q2NtZmlyKGJvb2wgY2NtZmlyKSB7
IG1fY2NtZmlyID0gY2NtZmlyOyB9CisKKyAgICBib29sIG5hY2twbGkoKSBjb25zdCB7IHJldHVy
biBtX25hY2twbGk7IH0KKyAgICB2b2lkIHNldE5hY2twbGkoYm9vbCBuYWNrcGxpKSB7IG1fbmFj
a3BsaSA9IG5hY2twbGk7IH0KKworICAgIGJvb2wgbmFjaygpIGNvbnN0IHsgcmV0dXJuIG1fbmFj
azsgfQorICAgIHZvaWQgc2V0TmFjayhib29sIG5hY2spIHsgbV9uYWNrID0gbmFjazsgfQorCisg
ICAgY29uc3QgSGFzaE1hcDxTdHJpbmcsIHVuc2lnbmVkPiYgcGFyYW1ldGVycygpIGNvbnN0IHsg
cmV0dXJuIG1fcGFyYW1ldGVyczsgfQorICAgIHZvaWQgYWRkUGFyYW1ldGVyKGNvbnN0IFN0cmlu
ZyYgbmFtZSwgdW5zaWduZWQgdmFsdWUpIHsgbV9wYXJhbWV0ZXJzLnNldChuYW1lLCB2YWx1ZSk7
IH0KKworICAgIFJlZlB0cjxNZWRpYVBheWxvYWQ+IGNsb25lKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIFJlZlB0cjxNZWRpYVBheWxvYWQ+IGNvcHkgPSBjcmVhdGUoKTsKKworICAgICAgICBjb3B5
LT5tX3R5cGUgPSBtX3R5cGU7CisgICAgICAgIGNvcHktPm1fZW5jb2RpbmdOYW1lID0gU3RyaW5n
KG1fZW5jb2RpbmdOYW1lKTsKKyAgICAgICAgY29weS0+bV9jbG9ja1JhdGUgPSBtX2Nsb2NrUmF0
ZTsKKworICAgICAgICBjb3B5LT5tX2NoYW5uZWxzID0gbV9jaGFubmVsczsKKworICAgICAgICBj
b3B5LT5tX2NjbWZpciA9IG1fY2NtZmlyOworICAgICAgICBjb3B5LT5tX25hY2twbGkgPSBtX25h
Y2twbGk7CisgICAgICAgIGNvcHktPm1fbmFjayA9IG1fbmFjazsKKworICAgICAgICBmb3IgKGF1
dG8mIGtleSA6IG1fcGFyYW1ldGVycy5rZXlzKCkpCisgICAgICAgICAgICBjb3B5LT5tX3BhcmFt
ZXRlcnMuYWRkKGtleSwgbV9wYXJhbWV0ZXJzLmdldChrZXkpKTsKKworICAgICAgICByZXR1cm4g
Y29weTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgTWVkaWFQYXlsb2FkKCkKKyAgICAgICAgOiBt
X3R5cGUoMCkKKyAgICAgICAgLCBtX2Nsb2NrUmF0ZSgwKQorICAgICAgICAsIG1fY2hhbm5lbHMo
MCkKKyAgICAgICAgLCBtX2NjbWZpcihmYWxzZSkKKyAgICAgICAgLCBtX25hY2twbGkoZmFsc2Up
CisgICAgICAgICwgbV9uYWNrKGZhbHNlKQorICAgIHsgfQorCisgICAgdW5zaWduZWQgbV90eXBl
OworICAgIFN0cmluZyBtX2VuY29kaW5nTmFtZTsKKyAgICB1bnNpZ25lZCBtX2Nsb2NrUmF0ZTsK
KworICAgIC8vIGF1ZGlvCisgICAgdW5zaWduZWQgbV9jaGFubmVsczsKKworICAgIC8vIHZpZGVv
CisgICAgYm9vbCBtX2NjbWZpcjsKKyAgICBib29sIG1fbmFja3BsaTsKKyAgICBib29sIG1fbmFj
azsKKworICAgIEhhc2hNYXA8U3RyaW5nLCB1bnNpZ25lZD4gbV9wYXJhbWV0ZXJzOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkK
KworI2VuZGlmIC8vIE1lZGlhUGF5bG9hZF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9QZWVyTWVkaWFEZXNjcmlwdGlvbi5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUGVlck1lZGlhRGVzY3JpcHRpb24uaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTM0ZmRjCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUGVlck1lZGlhRGVzY3JpcHRpb24uaApA
QCAtMCwwICsxLDE4OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBFcmljc3NvbiBBQi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgorICogICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0
aGUgbmFtZSBvZiBFcmljc3NvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAq
ICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20gdGhpcworICogICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFBlZXJNZWRpYURlc2NyaXB0aW9uX2gKKyNk
ZWZpbmUgUGVlck1lZGlhRGVzY3JpcHRpb25faAorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkK
KworI2luY2x1ZGUgIkljZUNhbmRpZGF0ZS5oIgorI2luY2x1ZGUgIk1lZGlhUGF5bG9hZC5oIgor
I2luY2x1ZGUgIlJlYWx0aW1lTWVkaWFTb3VyY2UuaCIKKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRl
ZC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBQZWVyTWVkaWFEZXNjcmlwdGlvbiA6IHB1YmxpYyBSZWZDb3VudGVkPFBlZXJNZWRpYURl
c2NyaXB0aW9uPiB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZlB0cjxQZWVyTWVkaWFEZXNjcmlw
dGlvbj4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgUGVlck1l
ZGlhRGVzY3JpcHRpb24oKSk7CisgICAgfQorICAgIHZpcnR1YWwgflBlZXJNZWRpYURlc2NyaXB0
aW9uKCkgeyB9CisKKyAgICBjb25zdCBTdHJpbmcmIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5
cGU7IH0KKyAgICB2b2lkIHNldFR5cGUoY29uc3QgU3RyaW5nJiB0eXBlKSB7IG1fdHlwZSA9IHR5
cGU7IH0KKworICAgIHVuc2lnbmVkIHNob3J0IHBvcnQoKSBjb25zdCB7IHJldHVybiBtX3BvcnQ7
IH0KKyAgICB2b2lkIHNldFBvcnQodW5zaWduZWQgc2hvcnQgcG9ydCkgeyBtX3BvcnQgPSBwb3J0
OyB9CisKKyAgICBjb25zdCBTdHJpbmcmIGFkZHJlc3MoKSBjb25zdCB7IHJldHVybiBtX2FkZHJl
c3M7IH0KKyAgICB2b2lkIHNldEFkZHJlc3MoY29uc3QgU3RyaW5nJiBhZGRyZXNzKSB7IG1fYWRk
cmVzcyA9IGFkZHJlc3M7IH0KKworICAgIGNvbnN0IFN0cmluZyYgbW9kZSgpIGNvbnN0IHsgcmV0
dXJuIG1fbW9kZTsgfQorICAgIHZvaWQgc2V0TW9kZShjb25zdCBTdHJpbmcmIG1vZGUpIHsgbV9t
b2RlID0gbW9kZTsgfQorCisgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxNZWRpYVBheWxvYWQ+PiYg
cGF5bG9hZHMoKSBjb25zdCB7IHJldHVybiBtX3BheWxvYWRzOyB9CisgICAgdm9pZCBhZGRQYXls
b2FkKFJlZlB0cjxNZWRpYVBheWxvYWQ+JiYgcGF5bG9hZCkgeyBtX3BheWxvYWRzLmFwcGVuZChX
VEZNb3ZlKHBheWxvYWQpKTsgfQorICAgIHZvaWQgc2V0UGF5bG9hZHMoVmVjdG9yPFJlZlB0cjxN
ZWRpYVBheWxvYWQ+PiYmIHBheWxvYWRzKSB7IG1fcGF5bG9hZHMgPSBwYXlsb2FkczsgfQorICAg
IHZvaWQgc2V0UGF5bG9hZHMoY29uc3QgVmVjdG9yPFJlZlB0cjxNZWRpYVBheWxvYWQ+PiYgcGF5
bG9hZHMpIHsgbV9wYXlsb2FkcyA9IHBheWxvYWRzOyB9CisKKyAgICBib29sIHJ0Y3BNdXgoKSBj
b25zdCB7IHJldHVybiBtX3J0Y3BNdXg7IH0KKyAgICB2b2lkIHNldFJ0Y3BNdXgoYm9vbCBydGNw
TXV4KSB7IG1fcnRjcE11eCA9IHJ0Y3BNdXg7IH0KKworICAgIGNvbnN0IFN0cmluZyYgcnRjcEFk
ZHJlc3MoKSBjb25zdCB7IHJldHVybiBtX3J0Y3BBZGRyZXNzOyB9CisgICAgdm9pZCBzZXRSdGNw
QWRkcmVzcyhjb25zdCBTdHJpbmcmIHJ0Y3BBZGRyZXNzKSB7IG1fcnRjcEFkZHJlc3MgPSBydGNw
QWRkcmVzczsgfQorCisgICAgdW5zaWduZWQgc2hvcnQgcnRjcFBvcnQoKSBjb25zdCB7IHJldHVy
biBtX3J0Y3BQb3J0OyB9CisgICAgdm9pZCBzZXRSdGNwUG9ydCh1bnNpZ25lZCBzaG9ydCBydGNw
UG9ydCkgeyBtX3J0Y3BQb3J0ID0gcnRjcFBvcnQ7IH0KKworICAgIGNvbnN0IFN0cmluZyYgbWVk
aWFTdHJlYW1JZCgpIGNvbnN0IHsgcmV0dXJuIG1fbWVkaWFTdHJlYW1JZDsgfQorICAgIHZvaWQg
c2V0TWVkaWFTdHJlYW1JZChjb25zdCBTdHJpbmcmIG1lZGlhU3RyZWFtSWQpIHsgbV9tZWRpYVN0
cmVhbUlkID0gbWVkaWFTdHJlYW1JZDsgfQorCisgICAgY29uc3QgU3RyaW5nJiBtZWRpYVN0cmVh
bVRyYWNrSWQoKSBjb25zdCB7IHJldHVybiBtX21lZGlhU3RyZWFtVHJhY2tJZDsgfQorICAgIHZv
aWQgc2V0TWVkaWFTdHJlYW1UcmFja0lkKGNvbnN0IFN0cmluZyYgbWVkaWFTdHJlYW1UcmFja0lk
KSB7IG1fbWVkaWFTdHJlYW1UcmFja0lkID0gbWVkaWFTdHJlYW1UcmFja0lkOyB9CisKKyAgICBj
b25zdCBTdHJpbmcmIGR0bHNTZXR1cCgpIGNvbnN0IHsgcmV0dXJuIG1fZHRsc1NldHVwOyB9Cisg
ICAgdm9pZCBzZXREdGxzU2V0dXAoY29uc3QgU3RyaW5nJiBkdGxzU2V0dXApIHsgbV9kdGxzU2V0
dXAgPSBkdGxzU2V0dXA7IH0KKworICAgIGNvbnN0IFN0cmluZyYgZHRsc0ZpbmdlcnByaW50SGFz
aEZ1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kdGxzRmluZ2VycHJpbnRIYXNoRnVuY3Rpb247
IH0KKyAgICB2b2lkIHNldER0bHNGaW5nZXJwcmludEhhc2hGdW5jdGlvbihjb25zdCBTdHJpbmcm
IGR0bHNGaW5nZXJwcmludEhhc2hGdW5jdGlvbikgeyBtX2R0bHNGaW5nZXJwcmludEhhc2hGdW5j
dGlvbiA9IGR0bHNGaW5nZXJwcmludEhhc2hGdW5jdGlvbjsgfQorCisgICAgY29uc3QgU3RyaW5n
JiBkdGxzRmluZ2VycHJpbnQoKSBjb25zdCB7IHJldHVybiBtX2R0bHNGaW5nZXJwcmludDsgfQor
ICAgIHZvaWQgc2V0RHRsc0ZpbmdlcnByaW50KGNvbnN0IFN0cmluZyYgZHRsc0ZpbmdlcnByaW50
KSB7IG1fZHRsc0ZpbmdlcnByaW50ID0gZHRsc0ZpbmdlcnByaW50OyB9CisKKyAgICBjb25zdCBT
dHJpbmcmIGNuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9jbmFtZTsgfQorICAgIHZvaWQgc2V0Q25h
bWUoY29uc3QgU3RyaW5nJiBjbmFtZSkgeyBtX2NuYW1lID0gY25hbWU7IH0KKworICAgIGNvbnN0
IFZlY3Rvcjx1bnNpZ25lZD4mIHNzcmNzKCkgY29uc3QgeyByZXR1cm4gbV9zc3JjczsgfQorICAg
IHZvaWQgYWRkU3NyYyh1bnNpZ25lZCBzc3JjKSB7IG1fc3NyY3MuYXBwZW5kKHNzcmMpOyB9Cisg
ICAgdm9pZCBjbGVhclNzcmNzKCkgeyBtX3NzcmNzLmNsZWFyKCk7IH0KKworICAgIGNvbnN0IFN0
cmluZyYgaWNlVWZyYWcoKSBjb25zdCB7IHJldHVybiBtX2ljZVVmcmFnOyB9CisgICAgdm9pZCBz
ZXRJY2VVZnJhZyhjb25zdCBTdHJpbmcmIGljZVVmcmFnKSB7IG1faWNlVWZyYWcgPSBpY2VVZnJh
ZzsgfQorCisgICAgY29uc3QgU3RyaW5nJiBpY2VQYXNzd29yZCgpIGNvbnN0IHsgcmV0dXJuIG1f
aWNlUGFzc3dvcmQ7IH0KKyAgICB2b2lkIHNldEljZVBhc3N3b3JkKGNvbnN0IFN0cmluZyYgaWNl
UGFzc3dvcmQpIHsgbV9pY2VQYXNzd29yZCA9IGljZVBhc3N3b3JkOyB9CisKKyAgICBjb25zdCBW
ZWN0b3I8UmVmUHRyPEljZUNhbmRpZGF0ZT4+JiBpY2VDYW5kaWRhdGVzKCkgY29uc3QgeyByZXR1
cm4gbV9pY2VDYW5kaWRhdGVzOyB9CisgICAgdm9pZCBhZGRJY2VDYW5kaWRhdGUoUmVmUHRyPElj
ZUNhbmRpZGF0ZT4mJiBjYW5kaWRhdGUpIHsgbV9pY2VDYW5kaWRhdGVzLmFwcGVuZChXVEZNb3Zl
KGNhbmRpZGF0ZSkpOyB9CisKKyAgICBSZWFsdGltZU1lZGlhU291cmNlKiBzb3VyY2UoKSBjb25z
dCB7IHJldHVybiBtX3NvdXJjZS5nZXQoKTsgfQorICAgIHZvaWQgc2V0U291cmNlKFJlZlB0cjxS
ZWFsdGltZU1lZGlhU291cmNlPiYmIHNvdXJjZSkgeyBtX3NvdXJjZSA9IHNvdXJjZTsgfQorCisg
ICAgUmVmUHRyPFBlZXJNZWRpYURlc2NyaXB0aW9uPiBjbG9uZSgpIGNvbnN0CisgICAgeworICAg
ICAgICBSZWZQdHI8UGVlck1lZGlhRGVzY3JpcHRpb24+IGNvcHkgPSBjcmVhdGUoKTsKKworICAg
ICAgICBjb3B5LT5tX3R5cGUgPSBTdHJpbmcobV90eXBlKTsKKyAgICAgICAgY29weS0+bV9wb3J0
ID0gbV9wb3J0OworICAgICAgICBjb3B5LT5tX2FkZHJlc3MgPSBTdHJpbmcobV9hZGRyZXNzKTsK
KyAgICAgICAgY29weS0+bV9tb2RlID0gU3RyaW5nKG1fbW9kZSk7CisKKyAgICAgICAgZm9yIChh
dXRvJiBwYXlsb2FkIDogbV9wYXlsb2FkcykKKyAgICAgICAgICAgIGNvcHktPm1fcGF5bG9hZHMu
YXBwZW5kKHBheWxvYWQtPmNsb25lKCkpOworCisgICAgICAgIGNvcHktPm1fcnRjcE11eCA9IG1f
cnRjcE11eDsKKyAgICAgICAgY29weS0+bV9ydGNwQWRkcmVzcyA9IFN0cmluZyhtX3J0Y3BBZGRy
ZXNzKTsKKyAgICAgICAgY29weS0+bV9ydGNwUG9ydCA9IG1fcnRjcFBvcnQ7CisKKyAgICAgICAg
Y29weS0+bV9tZWRpYVN0cmVhbUlkID0gU3RyaW5nKG1fbWVkaWFTdHJlYW1JZCk7CisgICAgICAg
IGNvcHktPm1fbWVkaWFTdHJlYW1UcmFja0lkID0gU3RyaW5nKG1fbWVkaWFTdHJlYW1UcmFja0lk
KTsKKworICAgICAgICBjb3B5LT5tX2R0bHNTZXR1cCA9IFN0cmluZyhtX2R0bHNTZXR1cCk7Cisg
ICAgICAgIGNvcHktPm1fZHRsc0ZpbmdlcnByaW50SGFzaEZ1bmN0aW9uID0gU3RyaW5nKG1fZHRs
c0ZpbmdlcnByaW50SGFzaEZ1bmN0aW9uKTsKKyAgICAgICAgY29weS0+bV9kdGxzRmluZ2VycHJp
bnQgPSBTdHJpbmcobV9kdGxzRmluZ2VycHJpbnQpOworCisgICAgICAgIGZvciAoYXV0byBzc3Jj
IDogbV9zc3JjcykKKyAgICAgICAgICAgIGNvcHktPm1fc3NyY3MuYXBwZW5kKHNzcmMpOworCisg
ICAgICAgIGNvcHktPm1fY25hbWUgPSBTdHJpbmcobV9jbmFtZSk7CisKKyAgICAgICAgY29weS0+
bV9pY2VVZnJhZyA9IFN0cmluZyhtX2ljZVVmcmFnKTsKKyAgICAgICAgY29weS0+bV9pY2VQYXNz
d29yZCA9IFN0cmluZyhtX2ljZVBhc3N3b3JkKTsKKworICAgICAgICBmb3IgKGF1dG8mIGNhbmRp
ZGF0ZSA6IG1faWNlQ2FuZGlkYXRlcykKKyAgICAgICAgICAgIGNvcHktPm1faWNlQ2FuZGlkYXRl
cy5hcHBlbmQoY2FuZGlkYXRlLT5jbG9uZSgpKTsKKworICAgICAgICByZXR1cm4gY29weTsKKyAg
ICB9CisKK3ByaXZhdGU6CisgICAgUGVlck1lZGlhRGVzY3JpcHRpb24oKQorICAgICAgICA6IG1f
cG9ydCgwKQorICAgICAgICAsIG1fcnRjcE11eChmYWxzZSkKKyAgICAgICAgLCBtX3J0Y3BQb3J0
KDApCisgICAgICAgICwgbV9zb3VyY2UobnVsbHB0cikKKyAgICB7IH0KKworICAgIFN0cmluZyBt
X3R5cGU7CisgICAgdW5zaWduZWQgc2hvcnQgbV9wb3J0OworICAgIFN0cmluZyBtX2FkZHJlc3M7
CisgICAgU3RyaW5nIG1fbW9kZTsKKworICAgIFZlY3RvcjxSZWZQdHI8TWVkaWFQYXlsb2FkPj4g
bV9wYXlsb2FkczsKKworICAgIGJvb2wgbV9ydGNwTXV4OworICAgIFN0cmluZyBtX3J0Y3BBZGRy
ZXNzOworICAgIHVuc2lnbmVkIHNob3J0IG1fcnRjcFBvcnQ7CisKKyAgICBTdHJpbmcgbV9tZWRp
YVN0cmVhbUlkOworICAgIFN0cmluZyBtX21lZGlhU3RyZWFtVHJhY2tJZDsKKworICAgIFN0cmlu
ZyBtX2R0bHNTZXR1cDsKKyAgICBTdHJpbmcgbV9kdGxzRmluZ2VycHJpbnRIYXNoRnVuY3Rpb247
CisgICAgU3RyaW5nIG1fZHRsc0ZpbmdlcnByaW50OworCisgICAgVmVjdG9yPHVuc2lnbmVkPiBt
X3NzcmNzOworICAgIFN0cmluZyBtX2NuYW1lOworCisgICAgU3RyaW5nIG1faWNlVWZyYWc7Cisg
ICAgU3RyaW5nIG1faWNlUGFzc3dvcmQ7CisgICAgVmVjdG9yPFJlZlB0cjxJY2VDYW5kaWRhdGU+
PiBtX2ljZUNhbmRpZGF0ZXM7CisKKyAgICBSZWZQdHI8UmVhbHRpbWVNZWRpYVNvdXJjZT4gbV9z
b3VyY2U7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUo
TUVESUFfU1RSRUFNKQorCisjZW5kaWYgLy8gUGVlck1lZGlhRGVzY3JpcHRpb25faAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>271795</attachid>
            <date>2016-02-19 13:50:14 -0800</date>
            <delta_ts>2016-02-23 13:31:04 -0800</delta_ts>
            <desc>Updated patch</desc>
            <filename>add-mediaendpoint_1.patch</filename>
            <type>text/plain</type>
            <size>56056</size>
            <attacher name="Adam Bergkvist">adam.bergkvist</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKaW5kZXggMTAwYWI0ZC4uNmNkZDZkOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKQEAgLTIyOTcsNiArMjI5Nyw4IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybWF0aW9uTWF0cml4LmNwcAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uLmNw
cAogCisgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFFbmRwb2ludC5jcHAKKyAgICBwbGF0
Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50Q29uZmlndXJhdGlvbi5jcHAKICAgICBwbGF0
Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVByaXZhdGUuY3BwCiAgICAgcGxhdGZvcm0vbWVk
aWFzdHJlYW0vTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUuY3BwCiAgICAgcGxhdGZvcm0vbWVkaWFz
dHJlYW0vUlRDSWNlQ2FuZGlkYXRlRGVzY3JpcHRvci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAyM2NlNGRi
Li5kOWJlNjgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTU4IEBACisyMDE2LTAyLTE5ICBBZGFt
IEJlcmdrdmlzdCAgPGFkYW0uYmVyZ2t2aXN0QGVyaWNzc29uLmNvbT4KKworICAgICAgICBXZWJS
VEM6IEFkZCBNZWRpYUVuZHBvaW50IGludGVyZmFjZSAoV2ViUlRDIGJhY2tlbmQgYWJzdHJhY3Rp
b24pCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTAx
NjUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQg
dGhlIE1lZGlhRW5kcG9pbnQgaW50ZXJmYWNlIGFsb25nIHdpdGggaXRzIGNvbXBhbmlvbiBvYmpl
Y3RzLgorCisgICAgICAgIE1lZGlhRW5kcG9pbnQgaW50ZXJmYWNlOiBBIFdlYlJUQyBwbGF0Zm9y
bSBhYnN0cmFjdGlvbiB0aGF0IGlzIHVzZWQgdG8KKyAgICAgICAgY29uZmlndXJlIHRoZSBXZWJS
VEMgYmFja2VuZCBob3cgdG8gc2VuZCBhbmQgcmVjZWl2ZS4gSXQgYWxzbyBhYnN0cmFjdHMKKyAg
ICAgICAgSUNFIGZ1bmN0aW9uYWxpdHkgc3VjaCBhcyBnZW5lcmF0aW5nIGxvY2FsIGNhbmRpZGF0
ZXMgYW5kIGRvaW5nCisgICAgICAgIGNoZWNraW5nIG9uIHJlbW90ZSBjYW5kaWRhdGVzLiBUaGUg
UlRDUGVlckNvbm5lY3Rpb24gQVBJLCBhbmQgb3RoZXIgQVBJCisgICAgICAgIG9iamVjdHMgc3Vj
aCBhcyBSVENSdHBTZW5kZXIvUmVjZWl2ZXIsIGxpdmUgYWJvdmUgTWVkaWFFbmRwb2ludC4KKwor
ICAgICAgICBNZWRpYUVuZHBvaW50Q29uZmlndXJhdGlvbjogQSBzZXR0aW5ncyBvYmplY3QgdXNl
ZCB0byBjb25maWd1cmUgYQorICAgICAgICBNZWRpYUVuZHBvaW50IHdpdGgsIGZvciBleGFtcGxl
LCBJQ0UgaGVscGVyIHNlcnZlcnMgYW5kIG90aGVyIHBvbGljZXMuCisgICAgICAgIEEgTWVkaWFF
bmRwb2ludENvbmZpZ3VyYXRpb24gaXMgdXNlZCB0byBpbml0aWFsaXplIGEgTWVkaWFFbmRwb2lu
dCwgYnV0CisgICAgICAgIGNhbiBhbHNvIGJlIHVzZWQgdG8gdXBkYXRlIHNldHRpbmdzLgorCisg
ICAgICAgIE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbjogQW4gb2JqZWN0IHRoYXQg
ZGVzY3JpYmVzIGhvdyB0aGUKKyAgICAgICAgTWVkaWFFbmRwb2ludCBzaG91bGQgc2VuZCBhbmQg
cmVjZWl2ZS4gQ29udGFpbnMgUGVlck1lZGlhRGVzY3JpcHRpb24sCisgICAgICAgIE1lZGlhUGF5
bG9hZCBhbmQgSWNlQ2FuZGlkYXRlIG9iamVjdHMuCisKKyAgICAgICAgVGVzdHM6IFRoZSBNZWRp
YUVuZHBvaW50IHBsYXRmb3JtIGludGVyZmFjZSBoYXMgbm8gaW1wbGVtZW50YXRpb25zIHlldC4K
KworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJl
YW0vTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbjo6Z290RHRsc0ZpbmdlcnByaW50KToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbjo6Z290SWNlQ2FuZGlkYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbjo6ZG9uZUdhdGhl
cmluZ0NhbmRpZGF0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFFbmRwb2ludFBlZXJDb25u
ZWN0aW9uOjpnb3RSZW1vdGVTb3VyY2UpOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0v
TWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uLmg6CisgICAgICAgICogV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL0ljZUNh
bmRpZGF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkljZUNhbmRpZGF0ZTo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OkljZUNhbmRpZGF0ZTo6fkljZUNhbmRpZGF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJY2VDYW5kaWRhdGU6OnR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6SWNl
Q2FuZGlkYXRlOjpzZXRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkljZUNhbmRpZGF0ZTo6Zm91
bmRhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJY2VDYW5kaWRhdGU6OnNldEZvdW5kYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6SWNlQ2FuZGlkYXRlOjpjb21wb25lbnRJZCk6CisgICAgICAg
IChXZWJDb3JlOjpJY2VDYW5kaWRhdGU6OnNldENvbXBvbmVudElkKToKKyAgICAgICAgKFdlYkNv
cmU6OkljZUNhbmRpZGF0ZTo6dHJhbnNwb3J0KToKKyAgICAgICAgKFdlYkNvcmU6OkljZUNhbmRp
ZGF0ZTo6c2V0VHJhbnNwb3J0KToKKyAgICAgICAgKFdlYkNvcmU6OkljZUNhbmRpZGF0ZTo6cHJp
b3JpdHkpOgorICAgICAgICAoV2ViQ29yZTo6SWNlQ2FuZGlkYXRlOjpzZXRQcmlvcml0eSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJY2VDYW5kaWRhdGU6OmFkZHJlc3MpOgorICAgICAgICAoV2ViQ29y
ZTo6SWNlQ2FuZGlkYXRlOjpzZXRBZGRyZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OkljZUNhbmRp
ZGF0ZTo6cG9ydCk6CisgICAgICAgIChXZWJDb3JlOjpJY2VDYW5kaWRhdGU6OnNldFBvcnQpOgor
ICAgICAgICAoV2ViQ29yZTo6SWNlQ2FuZGlkYXRlOjp0Y3BUeXBlKToKKyAgICAgICAgKFdlYkNv
cmU6OkljZUNhbmRpZGF0ZTo6c2V0VGNwVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpJY2VDYW5k
aWRhdGU6OnJlbGF0ZWRBZGRyZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OkljZUNhbmRpZGF0ZTo6
c2V0UmVsYXRlZEFkZHJlc3MpOgorICAgICAgICAoV2ViQ29yZTo6SWNlQ2FuZGlkYXRlOjpyZWxh
dGVkUG9ydCk6CisgICAgICAgIChXZWJDb3JlOjpJY2VDYW5kaWRhdGU6OnNldFJlbGF0ZWRQb3J0
KToKKyAgICAgICAgKFdlYkNvcmU6OkljZUNhbmRpZGF0ZTo6Y2xvbmUpOgorICAgICAgICAoV2Vi
Q29yZTo6SWNlQ2FuZGlkYXRlOjpJY2VDYW5kaWRhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL21l
ZGlhc3RyZWFtL01lZGlhRW5kcG9pbnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNy
ZWF0ZU1lZGlhRW5kcG9pbnQpOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlh
RW5kcG9pbnQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYUVuZHBvaW50Q2xpZW50
Ojp+TWVkaWFFbmRwb2ludENsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUVuZHBvaW50
Ojp+TWVkaWFFbmRwb2ludCk6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFF
bmRwb2ludENvbmZpZ3VyYXRpb24uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkljZVNl
cnZlckluZm86OkljZVNlcnZlckluZm8pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFFbmRwb2lu
dENvbmZpZ3VyYXRpb246Ok1lZGlhRW5kcG9pbnRDb25maWd1cmF0aW9uKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50Q29uZmlndXJhdGlvbi5oOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkljZVNlcnZlckluZm86OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpJY2VTZXJ2ZXJJbmZvOjp+SWNlU2VydmVySW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpJ
Y2VTZXJ2ZXJJbmZvOjp1cmxzKToKKyAgICAgICAgKFdlYkNvcmU6OkljZVNlcnZlckluZm86OmNy
ZWRlbnRpYWwpOgorICAgICAgICAoV2ViQ29yZTo6SWNlU2VydmVySW5mbzo6dXNlcm5hbWUpOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb246OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYUVuZHBvaW50Q29uZmlndXJhdGlvbjo6aWNlU2VydmVycyk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUVuZHBvaW50Q29uZmlndXJhdGlvbjo6aWNlVHJhbnNw
b3J0UG9saWN5KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhRW5kcG9pbnRDb25maWd1cmF0aW9u
OjpidW5kbGVQb2xpY3kpOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhRW5k
cG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbjo6fk1lZGlhRW5kcG9pbnRTZXNz
aW9uQ29uZmlndXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUVuZHBvaW50U2Vzc2lv
bkNvbmZpZ3VyYXRpb246OnNlc3Npb25JZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUVuZHBv
aW50U2Vzc2lvbkNvbmZpZ3VyYXRpb246OnNldFNlc3Npb25JZCk6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb246OnNlc3Npb25WZXJzaW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbjo6c2V0U2Vz
c2lvblZlcnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFFbmRwb2ludFNlc3Npb25Db25m
aWd1cmF0aW9uOjptZWRpYURlc2NyaXB0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUVu
ZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb246OmFkZE1lZGlhRGVzY3JpcHRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uOjpjbG9uZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb246Ok1lZGlh
RW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbik6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFz
dHJlYW0vTWVkaWFQYXlsb2FkLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQYXls
b2FkOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQYXlsb2FkOjp+TWVkaWFQYXls
b2FkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGF5bG9hZDo6dHlwZSk6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBheWxvYWQ6OnNldFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
YXlsb2FkOjplbmNvZGluZ05hbWUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQYXlsb2FkOjpz
ZXRFbmNvZGluZ05hbWUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQYXlsb2FkOjpjbG9ja1Jh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQYXlsb2FkOjpzZXRDbG9ja1JhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFQYXlsb2FkOjpjaGFubmVscyk6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBheWxvYWQ6OnNldENoYW5uZWxzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGF5
bG9hZDo6Y2NtZmlyKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGF5bG9hZDo6c2V0Q2NtZmly
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGF5bG9hZDo6bmFja3BsaSk6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBheWxvYWQ6OnNldE5hY2twbGkpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQYXlsb2FkOjpuYWNrKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGF5bG9hZDo6c2V0TmFj
ayk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBheWxvYWQ6OnBhcmFtZXRlcnMpOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQYXlsb2FkOjphZGRQYXJhbWV0ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQYXlsb2FkOjpjbG9uZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBheWxvYWQ6
Ok1lZGlhUGF5bG9hZCk6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vUGVlck1lZGlh
RGVzY3JpcHRpb24uaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpQZWVyTWVkaWFEZXNjcmlw
dGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJNZWRpYURlc2NyaXB0aW9uOjp+
UGVlck1lZGlhRGVzY3JpcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UGVlck1lZGlhRGVzY3Jp
cHRpb246OnR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6UGVlck1lZGlhRGVzY3JpcHRpb246OnNl
dFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6UGVlck1lZGlhRGVzY3JpcHRpb246OnBvcnQpOgor
ICAgICAgICAoV2ViQ29yZTo6UGVlck1lZGlhRGVzY3JpcHRpb246OnNldFBvcnQpOgorICAgICAg
ICAoV2ViQ29yZTo6UGVlck1lZGlhRGVzY3JpcHRpb246OmFkZHJlc3MpOgorICAgICAgICAoV2Vi
Q29yZTo6UGVlck1lZGlhRGVzY3JpcHRpb246OnNldEFkZHJlc3MpOgorICAgICAgICAoV2ViQ29y
ZTo6UGVlck1lZGlhRGVzY3JpcHRpb246Om1vZGUpOgorICAgICAgICAoV2ViQ29yZTo6UGVlck1l
ZGlhRGVzY3JpcHRpb246OnNldE1vZGUpOgorICAgICAgICAoV2ViQ29yZTo6UGVlck1lZGlhRGVz
Y3JpcHRpb246OnBheWxvYWRzKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJNZWRpYURlc2NyaXB0
aW9uOjphZGRQYXlsb2FkKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJNZWRpYURlc2NyaXB0aW9u
OjpzZXRQYXlsb2Fkcyk6CisgICAgICAgIChXZWJDb3JlOjpQZWVyTWVkaWFEZXNjcmlwdGlvbjo6
cnRjcE11eCk6CisgICAgICAgIChXZWJDb3JlOjpQZWVyTWVkaWFEZXNjcmlwdGlvbjo6c2V0UnRj
cE11eCk6CisgICAgICAgIChXZWJDb3JlOjpQZWVyTWVkaWFEZXNjcmlwdGlvbjo6cnRjcEFkZHJl
c3MpOgorICAgICAgICAoV2ViQ29yZTo6UGVlck1lZGlhRGVzY3JpcHRpb246OnNldFJ0Y3BBZGRy
ZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJNZWRpYURlc2NyaXB0aW9uOjpydGNwUG9ydCk6
CisgICAgICAgIChXZWJDb3JlOjpQZWVyTWVkaWFEZXNjcmlwdGlvbjo6c2V0UnRjcFBvcnQpOgor
ICAgICAgICAoV2ViQ29yZTo6UGVlck1lZGlhRGVzY3JpcHRpb246Om1lZGlhU3RyZWFtSWQpOgor
ICAgICAgICAoV2ViQ29yZTo6UGVlck1lZGlhRGVzY3JpcHRpb246OnNldE1lZGlhU3RyZWFtSWQp
OgorICAgICAgICAoV2ViQ29yZTo6UGVlck1lZGlhRGVzY3JpcHRpb246Om1lZGlhU3RyZWFtVHJh
Y2tJZCk6CisgICAgICAgIChXZWJDb3JlOjpQZWVyTWVkaWFEZXNjcmlwdGlvbjo6c2V0TWVkaWFT
dHJlYW1UcmFja0lkKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJNZWRpYURlc2NyaXB0aW9uOjpk
dGxzU2V0dXApOgorICAgICAgICAoV2ViQ29yZTo6UGVlck1lZGlhRGVzY3JpcHRpb246OnNldER0
bHNTZXR1cCk6CisgICAgICAgIChXZWJDb3JlOjpQZWVyTWVkaWFEZXNjcmlwdGlvbjo6ZHRsc0Zp
bmdlcnByaW50SGFzaEZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJNZWRpYURlc2Ny
aXB0aW9uOjpzZXREdGxzRmluZ2VycHJpbnRIYXNoRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6UGVlck1lZGlhRGVzY3JpcHRpb246OmR0bHNGaW5nZXJwcmludCk6CisgICAgICAgIChXZWJD
b3JlOjpQZWVyTWVkaWFEZXNjcmlwdGlvbjo6c2V0RHRsc0ZpbmdlcnByaW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlBlZXJNZWRpYURlc2NyaXB0aW9uOjpjbmFtZSk6CisgICAgICAgIChXZWJDb3Jl
OjpQZWVyTWVkaWFEZXNjcmlwdGlvbjo6c2V0Q25hbWUpOgorICAgICAgICAoV2ViQ29yZTo6UGVl
ck1lZGlhRGVzY3JpcHRpb246OnNzcmNzKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJNZWRpYURl
c2NyaXB0aW9uOjphZGRTc3JjKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJNZWRpYURlc2NyaXB0
aW9uOjpjbGVhclNzcmNzKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJNZWRpYURlc2NyaXB0aW9u
OjppY2VVZnJhZyk6CisgICAgICAgIChXZWJDb3JlOjpQZWVyTWVkaWFEZXNjcmlwdGlvbjo6c2V0
SWNlVWZyYWcpOgorICAgICAgICAoV2ViQ29yZTo6UGVlck1lZGlhRGVzY3JpcHRpb246OmljZVBh
c3N3b3JkKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJNZWRpYURlc2NyaXB0aW9uOjpzZXRJY2VQ
YXNzd29yZCk6CisgICAgICAgIChXZWJDb3JlOjpQZWVyTWVkaWFEZXNjcmlwdGlvbjo6aWNlQ2Fu
ZGlkYXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpQZWVyTWVkaWFEZXNjcmlwdGlvbjo6YWRkSWNl
Q2FuZGlkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJNZWRpYURlc2NyaXB0aW9uOjpzb3Vy
Y2UpOgorICAgICAgICAoV2ViQ29yZTo6UGVlck1lZGlhRGVzY3JpcHRpb246OnNldFNvdXJjZSk6
CisgICAgICAgIChXZWJDb3JlOjpQZWVyTWVkaWFEZXNjcmlwdGlvbjo6Y2xvbmUpOgorICAgICAg
ICAoV2ViQ29yZTo6UGVlck1lZGlhRGVzY3JpcHRpb246OlBlZXJNZWRpYURlc2NyaXB0aW9uKToK
KwogMjAxNi0wMi0xOCAgQW5kcmVhcyBLbGluZyAgPGFrbGluZ0BhcHBsZS5jb20+CiAKICAgICAg
ICAgUmVkdWNlIHRpbGluZyBjb3ZlcmFnZSBpbW1lZGlhdGVseSB3aGVuIG1lbW9yeSBwcmVzc3Vy
ZSBoaXRzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9N
ZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9t
ZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb24uY3BwCmluZGV4IGMzNGMzNzYu
LmVkNjgzZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0v
TWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc3RyZWFtL01lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbi5jcHAKQEAgLTM1LDYg
KzM1LDcgQEAKIAogI2luY2x1ZGUgIkRPTUVycm9yLmgiCiAjaW5jbHVkZSAiSlNET01FcnJvci5o
IgorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApA
QCAtMTc0LDYgKzE3NSw0NSBAQCB2b2lkIE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbjo6bWFy
a0FzTmVlZGluZ05lZ290aWF0aW9uKCkKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCit2b2lk
IE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbjo6Z290RHRsc0ZpbmdlcnByaW50KGNvbnN0IFN0
cmluZyYgZmluZ2VycHJpbnQsIGNvbnN0IFN0cmluZyYgZmluZ2VycHJpbnRGdW5jdGlvbikKK3sK
KyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgVU5VU0VEX1BBUkFNKGZpbmdlcnBy
aW50KTsKKyAgICBVTlVTRURfUEFSQU0oZmluZ2VycHJpbnRGdW5jdGlvbik7CisKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCit2b2lkIE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbjo6Z290
SWNlQ2FuZGlkYXRlKHVuc2lnbmVkIG1kZXNjSW5kZXgsIFJlZlB0cjxJY2VDYW5kaWRhdGU+JiYg
Y2FuZGlkYXRlKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAgICBVTlVTRURf
UEFSQU0obWRlc2NJbmRleCk7CisgICAgVU5VU0VEX1BBUkFNKGNhbmRpZGF0ZSk7CisKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbjo6
ZG9uZUdhdGhlcmluZ0NhbmRpZGF0ZXModW5zaWduZWQgbWRlc2NJbmRleCkKK3sKKyAgICBBU1NF
UlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgVU5VU0VEX1BBUkFNKG1kZXNjSW5kZXgpOworCisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBNZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rp
b246OmdvdFJlbW90ZVNvdXJjZSh1bnNpZ25lZCBtZGVzY0luZGV4LCBSZWZQdHI8UmVhbHRpbWVN
ZWRpYVNvdXJjZT4mJiBzb3VyY2UpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKwor
ICAgIFVOVVNFRF9QQVJBTShtZGVzY0luZGV4KTsKKyAgICBVTlVTRURfUEFSQU0oc291cmNlKTsK
KworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAog
I2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbi5oIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rp
b24uaAppbmRleCA2Y2QzYjE4Li5mYjZmNGYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbi5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0
aW9uLmgKQEAgLTMzLDYgKzMzLDcgQEAKIAogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAKKyNp
bmNsdWRlICJNZWRpYUVuZHBvaW50LmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNp
bmNsdWRlICJQZWVyQ29ubmVjdGlvbkJhY2tlbmQuaCIKICNpbmNsdWRlICJSVENTZXNzaW9uRGVz
Y3JpcHRpb24uaCIKQEAgLTQyLDcgKzQzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFz
cyBNZWRpYVN0cmVhbVRyYWNrOwogCi1jbGFzcyBNZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb24g
OiBwdWJsaWMgUGVlckNvbm5lY3Rpb25CYWNrZW5kIHsKK2NsYXNzIE1lZGlhRW5kcG9pbnRQZWVy
Q29ubmVjdGlvbiA6IHB1YmxpYyBQZWVyQ29ubmVjdGlvbkJhY2tlbmQsIHB1YmxpYyBNZWRpYUVu
ZHBvaW50Q2xpZW50IHsKIHB1YmxpYzoKICAgICBNZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb24o
UGVlckNvbm5lY3Rpb25CYWNrZW5kQ2xpZW50Kik7CiAKQEAgLTcxLDYgKzcyLDEzIEBAIHB1Ymxp
YzoKICAgICBib29sIGlzTmVnb3RpYXRpb25OZWVkZWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biBmYWxzZTsgfTsKICAgICB2b2lkIG1hcmtBc05lZWRpbmdOZWdvdGlhdGlvbigpIG92ZXJyaWRl
OwogICAgIHZvaWQgY2xlYXJOZWdvdGlhdGlvbk5lZWRlZFN0YXRlKCkgb3ZlcnJpZGUgeyBub3RJ
bXBsZW1lbnRlZCgpOyB9OworCitwcml2YXRlOgorICAgIC8vIE1lZGlhRW5kcG9pbnRDbGllbnQK
KyAgICB2aXJ0dWFsIHZvaWQgZ290RHRsc0ZpbmdlcnByaW50KGNvbnN0IFN0cmluZyYgZmluZ2Vy
cHJpbnQsIGNvbnN0IFN0cmluZyYgZmluZ2VycHJpbnRGdW5jdGlvbikgb3ZlcnJpZGU7CisgICAg
dmlydHVhbCB2b2lkIGdvdEljZUNhbmRpZGF0ZSh1bnNpZ25lZCBtZGVzY0luZGV4LCBSZWZQdHI8
SWNlQ2FuZGlkYXRlPiYmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZG9uZUdhdGhlcmlu
Z0NhbmRpZGF0ZXModW5zaWduZWQgbWRlc2NJbmRleCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2
b2lkIGdvdFJlbW90ZVNvdXJjZSh1bnNpZ25lZCBtZGVzY0luZGV4LCBSZWZQdHI8UmVhbHRpbWVN
ZWRpYVNvdXJjZT4mJikgb3ZlcnJpZGU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5k
ZXggOWRmZDc4MS4uNmQ5ODFkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjQyOCw2ICsyNDI4LDE0IEBACiAJCTVFQTcyNUQz
MUFDQUJENDcwMEVBRDE3QiAvKiBNZWRpYURldmljZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVFQTcyNUNFMUFDQUJDRDkwMEVBRDE3QiAvKiBNZWRp
YURldmljZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk1RUE3MjVENTFBQ0FCRDU3MDBFQUQxN0IgLyogTmF2aWdhdG9yTWVkaWFEZXZpY2VzLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVFQTcyNUNB
MUFDQUJDQjUwMEVBRDE3QiAvKiBOYXZpZ2F0b3JNZWRpYURldmljZXMuY3BwICovOyB9OwogCQk1
RUE3MjVENjFBQ0FCRDU3MDBFQUQxN0IgLyogTmF2aWdhdG9yTWVkaWFEZXZpY2VzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RUE3MjVDQjFBQ0FCQ0I1
MDBFQUQxN0IgLyogTmF2aWdhdG9yTWVkaWFEZXZpY2VzLmggKi87IH07CisJCTVFQkI4OTMxMUM3
Nzc3RkYwMEM2NUQ0MSAvKiBNZWRpYVBheWxvYWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVFQkI4OTJGMUM3Nzc3RDAwMEM2NUQ0MSAvKiBNZWRpYVBh
eWxvYWQuaCAqLzsgfTsKKwkJNUVCQjg5MzIxQzc3NzgyMzAwQzY1RDQxIC8qIE1lZGlhRW5kcG9p
bnRTZXNzaW9uQ29uZmlndXJhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNUVCQjg5MkUxQzc3NzdEMDAwQzY1RDQxIC8qIE1lZGlhRW5kcG9pbnRT
ZXNzaW9uQ29uZmlndXJhdGlvbi5oICovOyB9OworCQk1RUJCODkzMzFDNzc3ODI5MDBDNjVENDEg
LyogSWNlQ2FuZGlkYXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1RUJCODkzMDFDNzc3N0UxMDBDNjVENDEgLyogSWNlQ2FuZGlkYXRlLmggKi87IH07
CisJCTVFQkI4OTM0MUM3Nzc4MjkwMEM2NUQ0MSAvKiBNZWRpYUVuZHBvaW50LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVFQkI4OTJBMUM3Nzc3RDAw
MEM2NUQ0MSAvKiBNZWRpYUVuZHBvaW50LmNwcCAqLzsgfTsKKwkJNUVCQjg5MzUxQzc3NzgyOTAw
QzY1RDQxIC8qIE1lZGlhRW5kcG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDVFQkI4OTJCMUM3Nzc3RDAwMEM2NUQ0MSAvKiBNZWRpYUVuZHBvaW50
LmggKi87IH07CisJCTVFQkI4OTM2MUM3Nzc4MjkwMEM2NUQ0MSAvKiBNZWRpYUVuZHBvaW50Q29u
ZmlndXJhdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1RUJCODkyQzFDNzc3N0QwMDBDNjVENDEgLyogTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRp
b24uY3BwICovOyB9OworCQk1RUJCODkzNzFDNzc3ODI5MDBDNjVENDEgLyogTWVkaWFFbmRwb2lu
dENvbmZpZ3VyYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDVFQkI4OTJEMUM3Nzc3RDAwMEM2NUQ0MSAvKiBNZWRpYUVuZHBvaW50Q29uZmlndXJh
dGlvbi5oICovOyB9OworCQk1RUJCODkzOTFDNzdDMzk5MDBDNjVENDEgLyogUGVlck1lZGlhRGVz
Y3JpcHRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDVFQkI4OTM4MUM3N0JEQTQwMEM2NUQ0MSAvKiBQZWVyTWVkaWFEZXNjcmlwdGlvbi5oICovOyB9
OwogCQk1RjJEQkJFOTE3OEUzQzgxMDAxNDE0ODYgLyogQ2VydGlmaWNhdGVJbmZvTWFjLm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUYyREJCRTcxNzhF
MzMyRDAwMTQxNDg2IC8qIENlcnRpZmljYXRlSW5mb01hYy5tbSAqLzsgfTsKIAkJNUZBOTA0Q0Ex
NzhFNjFGNTAwNEM4QTJEIC8qIENlcnRpZmljYXRlSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUYyREJCRTgxNzhFMzM2OTAwMTQxNDg2IC8qIENl
cnRpZmljYXRlSW5mby5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTVGQzdEQzI2Q0ZFMjU2MzIwMEI4NUFFNCAvKiBKU0V2ZW50VGFyZ2V0LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RkM3REMyNkNGRTI1
NjMyMDBCODVBRTUgLyogSlNFdmVudFRhcmdldC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xMDAwMyw2ICsxMDAxMSwxNCBAQAogCQk1RUE3MjVD
RDFBQ0FCQ0Q5MDBFQUQxN0IgLyogTWVkaWFEZXZpY2VzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IE1lZGlhRGV2aWNlcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTVFQTcyNUNFMUFDQUJDRDkwMEVBRDE3QiAvKiBNZWRpYURldmljZXMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVkaWFEZXZpY2VzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTVFQTcyNUNGMUFDQUJDRDkwMEVBRDE3QiAvKiBNZWRpYURldmlj
ZXMuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IE1lZGlhRGV2aWNlcy5pZGw7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTVFQkI4OTJBMUM3Nzc3RDAwMEM2NUQ0MSAvKiBNZWRpYUVu
ZHBvaW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1lZGlhRW5k
cG9pbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1RUJCODkyQjFDNzc3N0Qw
MDBDNjVENDEgLyogTWVkaWFFbmRwb2ludC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBNZWRpYUVuZHBvaW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVFQkI4
OTJDMUM3Nzc3RDAwMEM2NUQ0MSAvKiBNZWRpYUVuZHBvaW50Q29uZmlndXJhdGlvbi5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNZWRpYUVuZHBvaW50Q29uZmlndXJh
dGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVFQkI4OTJEMUM3Nzc3RDAw
MEM2NUQ0MSAvKiBNZWRpYUVuZHBvaW50Q29uZmlndXJhdGlvbi5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBNZWRpYUVuZHBvaW50Q29uZmlndXJhdGlvbi5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk1RUJCODkyRTFDNzc3N0QwMDBDNjVENDEgLyogTWVkaWFFbmRw
b2ludFNlc3Npb25Db25maWd1cmF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk1RUJCODkyRjFDNzc3N0QwMDBDNjVENDEgLyogTWVkaWFQYXlsb2FkLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhUGF5bG9hZC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk1RUJCODkzMDFDNzc3N0UxMDBDNjVENDEgLyogSWNlQ2Fu
ZGlkYXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEljZUNhbmRpZGF0ZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1RUJCODkzODFDNzdCREE0MDBDNjVENDEg
LyogUGVlck1lZGlhRGVzY3JpcHRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUGVlck1lZGlhRGVzY3JpcHRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NUYyREJCRTcxNzhFMzMyRDAwMTQxNDg2IC8qIENlcnRpZmljYXRlSW5mb01hYy5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IENlcnRpZmljYXRlSW5mb01hYy5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUYyREJCRTgxNzhFMzM2OTAwMTQxNDg2IC8q
IENlcnRpZmljYXRlSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDZXJ0
aWZpY2F0ZUluZm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUZDN0RDMjZDRkUy
NTYzMjAwQjg1QUU1IC8qIEpTRXZlbnRUYXJnZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEpTRXZlbnRUYXJnZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTE1NDU4LDcgKzE1NDc0LDE0IEBACiAJCQljaGlsZHJlbiA9ICgKIAkJCQkwNzI5QjE0RDE3Q0ZD
Q0EwMDA0RjFENjAgLyogbWFjICovLAogCQkJCTA3RDZBNEY2MUJGMjMwN0QwMDE3NDE0NiAvKiBB
dWRpb1RyYWNrUHJpdmF0ZU1lZGlhU3RyZWFtLmggKi8sCisJCQkJNUVCQjg5MzAxQzc3NzdFMTAw
QzY1RDQxIC8qIEljZUNhbmRpZGF0ZS5oICovLAogCQkJCTA3MjIxQjk5MTdDRjBBRDQwMDg0OEU1
MSAvKiBNZWRpYUNvbnN0cmFpbnRzLmggKi8sCisJCQkJNUVCQjg5MkExQzc3NzdEMDAwQzY1RDQx
IC8qIE1lZGlhRW5kcG9pbnQuY3BwICovLAorCQkJCTVFQkI4OTJCMUM3Nzc3RDAwMEM2NUQ0MSAv
KiBNZWRpYUVuZHBvaW50LmggKi8sCisJCQkJNUVCQjg5MkMxQzc3NzdEMDAwQzY1RDQxIC8qIE1l
ZGlhRW5kcG9pbnRDb25maWd1cmF0aW9uLmNwcCAqLywKKwkJCQk1RUJCODkyRDFDNzc3N0QwMDBD
NjVENDEgLyogTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb24uaCAqLywKKwkJCQk1RUJCODkyRTFD
Nzc3N0QwMDBDNjVENDEgLyogTWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uLmggKi8s
CisJCQkJNUVCQjg5MkYxQzc3NzdEMDAwQzY1RDQxIC8qIE1lZGlhUGF5bG9hZC5oICovLAogCQkJ
CTA3MEY1NDk3MTdGMTJGNkIwMDE2OUUwNCAvKiBNZWRpYVN0cmVhbUNvbnN0cmFpbnRzVmFsaWRh
dGlvbkNsaWVudC5oICovLAogCQkJCTA3MjIxQkEwMTdDRjBBRDQwMDg0OEU1MSAvKiBNZWRpYVN0
cmVhbUNyZWF0aW9uQ2xpZW50LmggKi8sCiAJCQkJMDcxMTU4OEYxN0RGNjMzNzAwRURGRTJCIC8q
IE1lZGlhU3RyZWFtUHJpdmF0ZS5jcHAgKi8sCkBAIC0xNTQ2Niw2ICsxNTQ4OSw3IEBACiAJCQkJ
MDdGRkRFNjYxODFBRUQ0MjAwNzJENDA5IC8qIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlLmNwcCAq
LywKIAkJCQkwN0ZGREU2NzE4MUFFRDQyMDA3MkQ0MDkgLyogTWVkaWFTdHJlYW1UcmFja1ByaXZh
dGUuaCAqLywKIAkJCQkwNzYzMDZFMjE3RTIyQTQzMDA1QTdDNEUgLyogTWVkaWFTdHJlYW1UcmFj
a1NvdXJjZXNSZXF1ZXN0Q2xpZW50LmggKi8sCisJCQkJNUVCQjg5MzgxQzc3QkRBNDAwQzY1RDQx
IC8qIFBlZXJNZWRpYURlc2NyaXB0aW9uLmggKi8sCiAJCQkJNEE0RjY1NkIxQUE5OTdGMTAwRTM4
Q0REIC8qIFJlYWx0aW1lTWVkaWFTb3VyY2UuY3BwICovLAogCQkJCTRBNEY2NTZDMUFBOTk3RjEw
MEUzOENERCAvKiBSZWFsdGltZU1lZGlhU291cmNlLmggKi8sCiAJCQkJNEE0RjY1NkQxQUE5OTdG
MTAwRTM4Q0REIC8qIFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXMuaCAqLywKQEAgLTI1
MjQ4LDYgKzI1MjcyLDcgQEAKIAkJCQlCQzVFQjk1MTBFODIwNTZCMDBCMjU5NjUgLyogQ291bnRl
ckRpcmVjdGl2ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzOTJGMTRDMEFEMTg2MUIwMDY5MUJE
NCAvKiBDb3VudGVyTm9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRDBCMDU1NjgwOUM2NzAwMTAw
MzA3RTQzIC8qIENyZWF0ZUxpbmtDb21tYW5kLmggaW4gSGVhZGVycyAqLywKKwkJCQk1RUJCODkz
MjFDNzc3ODIzMDBDNjVENDEgLyogTWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk1MTRDNzY2RTBDRTkyM0ExMDA3RUYzQ0QgLyogQ3JlZGVudGlh
bC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzc5MjkxN0ExOTg1RUYzOTAwRjRCNjYxIC8qIENyZWRl
bnRpYWxCYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkzNzkyOTE3RTE5ODc2NzhGMDBGNEI2NjEg
LyogQ3JlZGVudGlhbENvY29hLmggaW4gSGVhZGVycyAqLywKQEAgLTI2MDI5LDYgKzI2MDU0LDcg
QEAKIAkJCQlDRDYyRkI5NjFBRjAxOEU3MDAxMkVEN0QgLyogR2VuZXJpY1Rhc2tRdWV1ZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJOTc0NkFGMjQxNEY0RERFNjAwM0U3QTcwIC8qIEdlb2xvY2F0aW9u
LmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzQ2QUYyNTE0RjREREU2MDAzRTdBNzEgLyogR2VvbG9j
YXRpb25DbGllbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTVFQkI4OTM5MUM3N0MzOTkwMEM2NUQ0
MSAvKiBQZWVyTWVkaWFEZXNjcmlwdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTc0NkFGMjcx
NEY0RERFNjAwM0U3QTcwIC8qIEdlb2xvY2F0aW9uQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJOTc0NkFGMjgxNEY0RERFNjAwM0U3QTcwIC8qIEdlb2xvY2F0aW9uRXJyb3IuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTk3NDZBRjI5MTRGNERERTYwMDNFN0E3MCAvKiBHZW9sb2NhdGlvblBv
c2l0aW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTI2MjU3LDYgKzI2MjgzLDcgQEAKIAkJCQk1MTg1
RkM5NzFCQjRDNEU4MDAxMjg5OEYgLyogSURCS2V5RGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NTE4NUZDOTkxQkI0QzRFODAwMTI4OThGIC8qIElEQktleVBhdGguaCBpbiBIZWFkZXJzICovLAog
CQkJCTUxODVGQzlCMUJCNEM0RTgwMDEyODk4RiAvKiBJREJLZXlSYW5nZS5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJNUVCQjg5MzUxQzc3NzgyOTAwQzY1RDQxIC8qIE1lZGlhRW5kcG9pbnQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTUxODVGQzlFMUJCNEM0RTgwMDEyODk4RiAvKiBJREJLZXlSYW5nZURh
dGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxODVGQ0EwMUJCNEM0RTgwMDEyODk4RiAvKiBJREJP
YmplY3RTdG9yZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE2MDcxMzExQkQ4MzA4NjAwREJDNEYy
IC8qIElEQk9iamVjdFN0b3JlSW1wbC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNjk5OSw2ICsyNzAy
Niw3IEBACiAJCQkJMjkxN0I1NjMxNDczNDk2QzAwNTJDOUQwIC8qIExheWVyRmx1c2hTY2hlZHVs
ZXJDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0OTE2RkY3MTk1REY2QTAwMDVBQjM0OSAv
KiBMYXllckZsdXNoVGhyb3R0bGVTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTgwMzcxNjQx
QTY2RjFEMzAwQkFGNTE5IC8qIExheWVyRnJhZ21lbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTVF
QkI4OTMzMUM3Nzc4MjkwMEM2NUQ0MSAvKiBJY2VDYW5kaWRhdGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCTdBQTNBNkEwMTk0QjU5QjYwMDFDQkQyNCAvKiBMYXllclBvb2wuaCBpbiBIZWFkZXJzICov
LAogCQkJCTkzMUQ3MkY2MTVGRTY5NTMwMEM0QzA3RSAvKiBMYXlvdXRNaWxlc3RvbmVzLmggaW4g
SGVhZGVycyAqLywKIAkJCQkxNDFEQzA1MTE2NDgzNEI5MDAzNzFFNUEgLyogTGF5b3V0UG9pbnQu
aCBpbiBIZWFkZXJzICovLApAQCAtMjgwNDYsNiArMjgwNzQsNyBAQAogCQkJCUIyMzdDOEE4MEQz
NDREMTEwMDEzRjcwNyAvKiBTVkdGb250RGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJBMUYy
QUIwQ0VGMEFCRjAwNDQyRjZBIC8qIFNWR0ZvbnRFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCMjIyN0ExNTBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHRm9udEZhY2VFbGVtZW50LmggaW4gSGVh
ZGVycyAqLywKKwkJCQk1RUJCODkzMTFDNzc3N0ZGMDBDNjVENDEgLyogTWVkaWFQYXlsb2FkLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCMjIyN0ExODBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHRm9udEZh
Y2VGb3JtYXRFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyN0ExQjBEMDBCRjIyMDA3
MUI3ODIgLyogU1ZHRm9udEZhY2VOYW1lRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIy
MjdBMUUwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0ZvbnRGYWNlU3JjRWxlbWVudC5oIGluIEhlYWRl
cnMgKi8sCkBAIC0yODM1Niw2ICsyODM4NSw3IEBACiAJCQkJN0NFNjgzNDUxOTIxNDNBODAwRjRE
OTI4IC8qIFVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTdDRTY4MzQ3MTkyMTgyMTUwMEY0RDkyOCAvKiBVc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9y
VHlwZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTdDNzNGQjA4MTkxRUY0MTcwMDdERTA2MSAvKiBV
c2VyTWVzc2FnZUhhbmRsZXJzTmFtZXNwYWNlLmggaW4gSGVhZGVycyAqLywKKwkJCQk1RUJCODkz
NzFDNzc3ODI5MDBDNjVENDEgLyogTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb24uaCBpbiBIZWFk
ZXJzICovLAogCQkJCUJDQTJCMDYxMTA1MDQ3NjAwMDQzQkQxQyAvKiBVc2VyU2NyaXB0LmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQ0EyQjA4QjEwNTA1QkNEMDA0M0JEMUMgLyogVXNlclNjcmlwdFR5
cGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzhCRjE1MTEwNTgxM0JGMDBBNDBBMDcgLyogVXNl
clN0eWxlU2hlZXQuaCBpbiBIZWFkZXJzICovLApAQCAtMzEzNjQsNiArMzEzOTQsNyBAQAogCQkJ
CTBGQjg4OTBFMTY3RDMwMTYwMDEwQ0RBNSAvKiBTY3JvbGxpbmdTdGF0ZVN0aWNreU5vZGUuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJOTMxQ0JEMTAxNjFBNDRFOTAwRTRDODc0IC8qIFNjcm9sbGlu
Z1N0YXRlVHJlZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUY2MkYyNTE0REFGRTlFMDA0MTU1
NkMgLyogU2Nyb2xsaW5nVGhyZWFkLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTVFQkI4OTM2MUM3
Nzc4MjkwMEM2NUQ0MSAvKiBNZWRpYUVuZHBvaW50Q29uZmlndXJhdGlvbi5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkxQUY2MkYyNDE0REFGRTkxMDA0MTU1NkMgLyogU2Nyb2xsaW5nVGhyZWFkTWFj
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFBQUREQTMxNERCNDA5RjAwQUY2NEIzIC8qIFNjcm9s
bGluZ1RyZWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTNDMzhDMDQxNjQ0NzNERDAwMDkxRUIy
IC8qIFNjcm9sbGluZ1RyZWVGaXhlZE5vZGUubW0gaW4gU291cmNlcyAqLywKQEAgLTMxNTMzLDYg
KzMxNTY0LDcgQEAKIAkJCQk3RTM3RUYyRTEzMzkyMDg4MDBCMjkyNTAgLyogU3VicmVzb3VyY2VM
b2FkZXJDRi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3RThGQURDNDE5OUE5NUIxMDA3MTQ5Njgg
LyogU3VicmVzb3VyY2VMb2FkZXJDb2NvYS5tbSBpbiBTb3VyY2VzICovLAogCQkJCUUxRkY4RjVG
MTgwNzQ0MjEwMDEzMjY3NCAvKiBTdWJ0bGVDcnlwdG8uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
NUVCQjg5MzQxQzc3NzgyOTAwQzY1RDQxIC8qIE1lZGlhRW5kcG9pbnQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJOTNCMkQ4MTgwRjk5MjBFRTAwNkFFNkIyIC8qIFN1ZGRlblRlcm1pbmF0aW9uLm1t
IGluIFNvdXJjZXMgKi8sCiAJCQkJNTcyQTdGMjMxQzZFNUE2NjAwOUM2MTQ5IC8qIFNpbXVsYXRl
ZENsaWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTA4NzU1OEM1MTNCNEE1N0QwMEY0OTMwNyAv
KiBTdXJyb2dhdGVQYWlyQXdhcmVUZXh0SXRlcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9JY2VDYW5kaWRhdGUu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL0ljZUNhbmRpZGF0ZS5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxMmEwN2EKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9JY2VDYW5kaWRhdGUuaApA
QCAtMCwwICsxLDEyMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBFcmljc3NvbiBBQi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgorICogICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0
aGUgbmFtZSBvZiBFcmljc3NvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAq
ICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20gdGhpcworICogICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEljZUNhbmRpZGF0ZV9oCisjZGVmaW5lIElj
ZUNhbmRpZGF0ZV9oCisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorCisjaW5jbHVkZSA8d3Rm
L1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSWNlQ2FuZGlk
YXRlIDogcHVibGljIFJlZkNvdW50ZWQ8SWNlQ2FuZGlkYXRlPiB7CitwdWJsaWM6CisgICAgc3Rh
dGljIFJlZlB0cjxJY2VDYW5kaWRhdGU+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IEljZUNhbmRpZGF0ZSgpKTsKKyAgICB9CisgICAgdmlydHVhbCB+SWNlQ2Fu
ZGlkYXRlKCkgeyB9CisKKyAgICBjb25zdCBTdHJpbmcmIHR5cGUoKSBjb25zdCB7IHJldHVybiBt
X3R5cGU7IH0KKyAgICB2b2lkIHNldFR5cGUoY29uc3QgU3RyaW5nJiB0eXBlKSB7IG1fdHlwZSA9
IHR5cGU7IH0KKworICAgIGNvbnN0IFN0cmluZyYgZm91bmRhdGlvbigpIGNvbnN0IHsgcmV0dXJu
IG1fZm91bmRhdGlvbjsgfQorICAgIHZvaWQgc2V0Rm91bmRhdGlvbihjb25zdCBTdHJpbmcmIGZv
dW5kYXRpb24pIHsgbV9mb3VuZGF0aW9uID0gZm91bmRhdGlvbjsgfQorCisgICAgdW5zaWduZWQg
Y29tcG9uZW50SWQoKSBjb25zdCB7IHJldHVybiBtX2NvbXBvbmVudElkOyB9CisgICAgdm9pZCBz
ZXRDb21wb25lbnRJZCh1bnNpZ25lZCBjb21wb25lbnRJZCkgeyBtX2NvbXBvbmVudElkID0gY29t
cG9uZW50SWQ7IH0KKworICAgIGNvbnN0IFN0cmluZyYgdHJhbnNwb3J0KCkgY29uc3QgeyByZXR1
cm4gbV90cmFuc3BvcnQ7IH0KKyAgICB2b2lkIHNldFRyYW5zcG9ydChjb25zdCBTdHJpbmcmIHRy
YW5zcG9ydCkgeyBtX3RyYW5zcG9ydCA9IHRyYW5zcG9ydDsgfQorCisgICAgaW50IHByaW9yaXR5
KCkgY29uc3QgeyByZXR1cm4gbV9wcmlvcml0eTsgfQorICAgIHZvaWQgc2V0UHJpb3JpdHkoaW50
IHByaW9yaXR5KSB7IG1fcHJpb3JpdHkgPSBwcmlvcml0eTsgfQorCisgICAgY29uc3QgU3RyaW5n
JiBhZGRyZXNzKCkgY29uc3QgeyByZXR1cm4gbV9hZGRyZXNzOyB9CisgICAgdm9pZCBzZXRBZGRy
ZXNzKGNvbnN0IFN0cmluZyYgYWRkcmVzcykgeyBtX2FkZHJlc3MgPSBhZGRyZXNzOyB9CisKKyAg
ICB1bnNpZ25lZCBwb3J0KCkgY29uc3QgeyByZXR1cm4gbV9wb3J0OyB9CisgICAgdm9pZCBzZXRQ
b3J0KHVuc2lnbmVkIHBvcnQpIHsgbV9wb3J0ID0gcG9ydDsgfQorCisgICAgY29uc3QgU3RyaW5n
JiB0Y3BUeXBlKCkgY29uc3QgeyByZXR1cm4gbV90Y3BUeXBlOyB9CisgICAgdm9pZCBzZXRUY3BU
eXBlKGNvbnN0IFN0cmluZyYgdGNwVHlwZSkgeyBtX3RjcFR5cGUgPSB0Y3BUeXBlOyB9CisKKyAg
ICBjb25zdCBTdHJpbmcmIHJlbGF0ZWRBZGRyZXNzKCkgY29uc3QgeyByZXR1cm4gbV9yZWxhdGVk
QWRkcmVzczsgfQorICAgIHZvaWQgc2V0UmVsYXRlZEFkZHJlc3MoY29uc3QgU3RyaW5nJiByZWxh
dGVkQWRkcmVzcykgeyBtX3JlbGF0ZWRBZGRyZXNzID0gcmVsYXRlZEFkZHJlc3M7IH0KKworICAg
IHVuc2lnbmVkIHJlbGF0ZWRQb3J0KCkgY29uc3QgeyByZXR1cm4gbV9yZWxhdGVkUG9ydDsgfQor
ICAgIHZvaWQgc2V0UmVsYXRlZFBvcnQodW5zaWduZWQgcmVsYXRlZFBvcnQpIHsgbV9yZWxhdGVk
UG9ydCA9IHJlbGF0ZWRQb3J0OyB9CisKKyAgICBSZWZQdHI8SWNlQ2FuZGlkYXRlPiBjbG9uZSgp
IGNvbnN0CisgICAgeworICAgICAgICBSZWZQdHI8SWNlQ2FuZGlkYXRlPiBjb3B5ID0gY3JlYXRl
KCk7CisKKyAgICAgICAgY29weS0+bV90eXBlID0gU3RyaW5nKG1fdHlwZSk7CisgICAgICAgIGNv
cHktPm1fZm91bmRhdGlvbiA9IFN0cmluZyhtX2ZvdW5kYXRpb24pOworICAgICAgICBjb3B5LT5t
X2NvbXBvbmVudElkID0gbV9jb21wb25lbnRJZDsKKyAgICAgICAgY29weS0+bV90cmFuc3BvcnQg
PSBTdHJpbmcobV90cmFuc3BvcnQpOworICAgICAgICBjb3B5LT5tX3ByaW9yaXR5ID0gbV9wcmlv
cml0eTsKKyAgICAgICAgY29weS0+bV9hZGRyZXNzID0gU3RyaW5nKG1fYWRkcmVzcyk7CisgICAg
ICAgIGNvcHktPm1fcG9ydCA9IG1fcG9ydDsKKyAgICAgICAgY29weS0+bV90Y3BUeXBlID0gU3Ry
aW5nKG1fdGNwVHlwZSk7CisgICAgICAgIGNvcHktPm1fcmVsYXRlZEFkZHJlc3MgPSBTdHJpbmco
bV9yZWxhdGVkQWRkcmVzcyk7CisgICAgICAgIGNvcHktPm1fcmVsYXRlZFBvcnQgPSBtX3JlbGF0
ZWRQb3J0OworCisgICAgICAgIHJldHVybiBjb3B5OworICAgIH0KKworcHJpdmF0ZToKKyAgICBJ
Y2VDYW5kaWRhdGUoKQorICAgICAgICA6IG1fY29tcG9uZW50SWQoMCkKKyAgICAgICAgLCBtX3By
aW9yaXR5KDApCisgICAgICAgICwgbV9wb3J0KDApCisgICAgICAgICwgbV9yZWxhdGVkUG9ydCgw
KQorICAgIHsgfQorCisgICAgU3RyaW5nIG1fdHlwZTsKKyAgICBTdHJpbmcgbV9mb3VuZGF0aW9u
OworICAgIHVuc2lnbmVkIG1fY29tcG9uZW50SWQ7CisgICAgU3RyaW5nIG1fdHJhbnNwb3J0Owor
ICAgIGludCBtX3ByaW9yaXR5OworICAgIFN0cmluZyBtX2FkZHJlc3M7CisgICAgdW5zaWduZWQg
bV9wb3J0OworICAgIFN0cmluZyBtX3RjcFR5cGU7CisgICAgU3RyaW5nIG1fcmVsYXRlZEFkZHJl
c3M7CisgICAgdW5zaWduZWQgbV9yZWxhdGVkUG9ydDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCisKKyNlbmRpZiAvLyBJY2VD
YW5kaWRhdGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vTWVkaWFFbmRwb2ludC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9NZWRpYUVuZHBvaW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4w
MWZiNmM3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vTWVkaWFFbmRwb2ludC5jcHAKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBFcmljc3NvbiBBQi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogICAgaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJp
YnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBFcmljc3NvbiBub3IgdGhlIG5hbWVz
IG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICAgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorI2luY2x1ZGUgIk1lZGlhRW5k
cG9pbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgc3RkOjp1bmlxdWVfcHRy
PE1lZGlhRW5kcG9pbnQ+IGNyZWF0ZU1lZGlhRW5kcG9pbnQoTWVkaWFFbmRwb2ludENsaWVudCop
Cit7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK0NyZWF0ZU1lZGlhRW5kcG9pbnQgTWVkaWFF
bmRwb2ludDo6Y3JlYXRlID0gY3JlYXRlTWVkaWFFbmRwb2ludDsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhRW5kcG9pbnQuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhRW5kcG9pbnQuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzA2ODhkCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFFbmRwb2ludC5oCkBAIC0wLDAg
KzEsOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgRXJpY3Nzb24gQUIuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
KyAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUg
b2YgRXJpY3Nzb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMK
KyAqICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBNZWRpYUVuZHBvaW50X2gKKyNkZWZpbmUgTWVkaWFFbmRw
b2ludF9oCisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorCisjaW5jbHVkZSAiTWVkaWFFbmRw
b2ludENvbmZpZ3VyYXRpb24uaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJY2VDYW5kaWRhdGU7CitjbGFzcyBNZWRpYUVu
ZHBvaW50OworY2xhc3MgTWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uOworY2xhc3Mg
TWVkaWFQYXlsb2FkOworY2xhc3MgUmVhbHRpbWVNZWRpYVNvdXJjZTsKKworY2xhc3MgTWVkaWFF
bmRwb2ludENsaWVudCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIGdvdER0bHNGaW5nZXJw
cmludChjb25zdCBTdHJpbmcmIGZpbmdlcnByaW50LCBjb25zdCBTdHJpbmcmIGZpbmdlcnByaW50
RnVuY3Rpb24pID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZ290SWNlQ2FuZGlkYXRlKHVuc2lnbmVk
IG1kZXNjSW5kZXgsIFJlZlB0cjxJY2VDYW5kaWRhdGU+JiYpID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgZG9uZUdhdGhlcmluZ0NhbmRpZGF0ZXModW5zaWduZWQgbWRlc2NJbmRleCkgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBnb3RSZW1vdGVTb3VyY2UodW5zaWduZWQgbWRlc2NJbmRleCwgUmVmUHRy
PFJlYWx0aW1lTWVkaWFTb3VyY2U+JiYpID0gMDsKKworICAgIHZpcnR1YWwgfk1lZGlhRW5kcG9p
bnRDbGllbnQoKSB7IH0KK307CisKK3R5cGVkZWYgc3RkOjp1bmlxdWVfcHRyPE1lZGlhRW5kcG9p
bnQ+ICgqQ3JlYXRlTWVkaWFFbmRwb2ludCkoTWVkaWFFbmRwb2ludENsaWVudCopOworCitjbGFz
cyBNZWRpYUVuZHBvaW50IHsKK3B1YmxpYzoKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgQ3Jl
YXRlTWVkaWFFbmRwb2ludCBjcmVhdGU7CisgICAgdmlydHVhbCB+TWVkaWFFbmRwb2ludCgpIHsg
fQorCisgICAgZW51bSBjbGFzcyBVcGRhdGVSZXN1bHQgeworICAgICAgICBTdWNjZXNzLAorICAg
ICAgICBTdWNjZXNzV2l0aEljZVJlc3RhcnQsCisgICAgICAgIEZhaWxlZAorICAgIH07CisKKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0Q29uZmlndXJhdGlvbihSZWZQdHI8TWVkaWFFbmRwb2ludENvbmZp
Z3VyYXRpb24+JiYpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZUR0bHNJbmZvKCkg
PSAwOworICAgIHZpcnR1YWwgVmVjdG9yPFJlZlB0cjxNZWRpYVBheWxvYWQ+PiBnZXREZWZhdWx0
QXVkaW9QYXlsb2FkcygpID0gMDsKKyAgICB2aXJ0dWFsIFZlY3RvcjxSZWZQdHI8TWVkaWFQYXls
b2FkPj4gZ2V0RGVmYXVsdFZpZGVvUGF5bG9hZHMoKSA9IDA7CisKKyAgICB2aXJ0dWFsIFVwZGF0
ZVJlc3VsdCB1cGRhdGVSZWNlaXZlQ29uZmlndXJhdGlvbihNZWRpYUVuZHBvaW50U2Vzc2lvbkNv
bmZpZ3VyYXRpb24qLCBib29sIGlzSW5pdGlhdG9yKSA9IDA7CisgICAgdmlydHVhbCBVcGRhdGVS
ZXN1bHQgdXBkYXRlU2VuZENvbmZpZ3VyYXRpb24oTWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1
cmF0aW9uKiwgYm9vbCBpc0luaXRpYXRvcikgPSAwOworCisgICAgdmlydHVhbCB2b2lkIGFkZFJl
bW90ZUNhbmRpZGF0ZShJY2VDYW5kaWRhdGUmLCB1bnNpZ25lZCBtZGVzY0luZGV4LCBjb25zdCBT
dHJpbmcmIHVmcmFnLCBjb25zdCBTdHJpbmcmIHBhc3N3b3JkKSA9IDA7CisKKyAgICB2aXJ0dWFs
IHZvaWQgcmVwbGFjZVNlbmRTb3VyY2UoUmVhbHRpbWVNZWRpYVNvdXJjZSYsIHVuc2lnbmVkIG1k
ZXNjSW5kZXgpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBzdG9wKCkgPSAwOworfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkKKwor
I2VuZGlmIC8vIE1lZGlhRW5kcG9pbnRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb24uY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb24u
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyNmFjYjEKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYUVuZHBv
aW50Q29uZmlndXJhdGlvbi5jcHAKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBFcmljc3NvbiBBQi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogICAgaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0
aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBFcmljc3NvbiBub3IgdGhlIG5hbWVzIG9m
IGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICAgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb24uaCIKKworI2lmIEVO
QUJMRShNRURJQV9TVFJFQU0pCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSWNlU2VydmVySW5m
bzo6SWNlU2VydmVySW5mbyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgdXJscywgY29uc3QgU3RyaW5n
JiBjcmVkZW50aWFsLCBjb25zdCBTdHJpbmcmIHVzZXJuYW1lKQorICAgIDogbV9jcmVkZW50aWFs
KGNyZWRlbnRpYWwpCisgICAgLCBtX3VzZXJuYW1lKHVzZXJuYW1lKQoreworICAgIG1fdXJscy5y
ZXNlcnZlQ2FwYWNpdHkodXJscy5zaXplKCkpOworICAgIGZvciAoYXV0byYgdXJsIDogdXJscykK
KyAgICAgICAgbV91cmxzLmFwcGVuZChVUkwoVVJMKCksIHVybCkpOworfQorCitNZWRpYUVuZHBv
aW50Q29uZmlndXJhdGlvbjo6TWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb24oVmVjdG9yPFJlZlB0
cjxJY2VTZXJ2ZXJJbmZvPj4mIGljZVNlcnZlcnMsIGNvbnN0IFN0cmluZyYgaWNlVHJhbnNwb3J0
UG9saWN5LCBjb25zdCBTdHJpbmcmIGJ1bmRsZVBvbGljeSkKKyAgICA6IG1faWNlU2VydmVycyhp
Y2VTZXJ2ZXJzKQoreworICAgIGlmIChpY2VUcmFuc3BvcnRQb2xpY3kgPT0gIm5vbmUiKQorICAg
ICAgICBtX2ljZVRyYW5zcG9ydFBvbGljeSA9IEljZVRyYW5zcG9ydFBvbGljeTo6Tm9uZTsKKyAg
ICBlbHNlIGlmIChpY2VUcmFuc3BvcnRQb2xpY3kgPT0gInJlbGF5IikKKyAgICAgICAgbV9pY2VU
cmFuc3BvcnRQb2xpY3kgPSBJY2VUcmFuc3BvcnRQb2xpY3k6OlJlbGF5OworICAgIGVsc2UgaWYg
KGljZVRyYW5zcG9ydFBvbGljeSA9PSAiYWxsIikKKyAgICAgICAgbV9pY2VUcmFuc3BvcnRQb2xp
Y3kgPSBJY2VUcmFuc3BvcnRQb2xpY3k6OkFsbDsKKyAgICBlbHNlCisgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworCisgICAgaWYgKGJ1bmRsZVBvbGljeSA9PSAiYmFsYW5jZWQiKQorICAg
ICAgICBtX2J1bmRsZVBvbGljeSA9IEJ1bmRsZVBvbGljeTo6QmFsYW5jZWQ7CisgICAgZWxzZSBp
ZiAoYnVuZGxlUG9saWN5ID09ICJtYXgtY29tcGF0IikKKyAgICAgICAgbV9idW5kbGVQb2xpY3kg
PSBCdW5kbGVQb2xpY3k6Ok1heENvbXBhdDsKKyAgICBlbHNlIGlmIChidW5kbGVQb2xpY3kgPT0g
Im1heC1idW5kbGUiKQorICAgICAgICBtX2J1bmRsZVBvbGljeSA9IEJ1bmRsZVBvbGljeTo6TWF4
QnVuZGxlOworICAgIGVsc2UKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYUVuZHBv
aW50Q29uZmlndXJhdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
TWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi4yZTAzMmI0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb24uaApAQCAtMCwwICsxLDk5
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEVyaWNzc29uIEFCLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiAg
ICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEVy
aWNzc29uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAg
ICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb25faAorI2RlZmluZSBN
ZWRpYUVuZHBvaW50Q29uZmlndXJhdGlvbl9oCisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQor
CisjaW5jbHVkZSAiVVJMLmgiCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRl
IDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEljZVNlcnZl
ckluZm8gOiBwdWJsaWMgUmVmQ291bnRlZDxJY2VTZXJ2ZXJJbmZvPiB7CitwdWJsaWM6CisgICAg
c3RhdGljIFJlZlB0cjxJY2VTZXJ2ZXJJbmZvPiBjcmVhdGUoY29uc3QgVmVjdG9yPFN0cmluZz4m
IHVybHMsIGNvbnN0IFN0cmluZyYgY3JlZGVudGlhbCwgY29uc3QgU3RyaW5nJiB1c2VybmFtZSkK
KyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSWNlU2VydmVySW5mbyh1cmxzLCBj
cmVkZW50aWFsLCB1c2VybmFtZSkpOworICAgIH0KKyAgICB2aXJ0dWFsIH5JY2VTZXJ2ZXJJbmZv
KCkgeyB9CisKKyAgICBjb25zdCBWZWN0b3I8VVJMPiYgdXJscygpIGNvbnN0IHsgcmV0dXJuIG1f
dXJsczsgfQorICAgIGNvbnN0IFN0cmluZyYgY3JlZGVudGlhbCgpIGNvbnN0IHsgcmV0dXJuIG1f
Y3JlZGVudGlhbDsgfQorICAgIGNvbnN0IFN0cmluZyYgdXNlcm5hbWUoKSBjb25zdCB7IHJldHVy
biBtX3VzZXJuYW1lOyB9CisKK3ByaXZhdGU6CisgICAgSWNlU2VydmVySW5mbyhjb25zdCBWZWN0
b3I8U3RyaW5nPiYgdXJscywgY29uc3QgU3RyaW5nJiBjcmVkZW50aWFsLCBjb25zdCBTdHJpbmcm
IHVzZXJuYW1lKTsKKworICAgIFZlY3RvcjxVUkw+IG1fdXJsczsKKyAgICBTdHJpbmcgbV9jcmVk
ZW50aWFsOworICAgIFN0cmluZyBtX3VzZXJuYW1lOworfTsKKworY2xhc3MgTWVkaWFFbmRwb2lu
dENvbmZpZ3VyYXRpb24gOiBwdWJsaWMgUmVmQ291bnRlZDxNZWRpYUVuZHBvaW50Q29uZmlndXJh
dGlvbj4geworcHVibGljOgorICAgIHN0YXRpYyBSZWZQdHI8TWVkaWFFbmRwb2ludENvbmZpZ3Vy
YXRpb24+IGNyZWF0ZShWZWN0b3I8UmVmUHRyPEljZVNlcnZlckluZm8+PiYgaWNlU2VydmVycywg
Y29uc3QgU3RyaW5nJiBpY2VUcmFuc3BvcnRQb2xpY3ksIGNvbnN0IFN0cmluZyYgYnVuZGxlUG9s
aWN5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNZWRpYUVuZHBvaW50Q29u
ZmlndXJhdGlvbihpY2VTZXJ2ZXJzLCBpY2VUcmFuc3BvcnRQb2xpY3ksIGJ1bmRsZVBvbGljeSkp
OworICAgIH0KKworICAgIGVudW0gY2xhc3MgSWNlVHJhbnNwb3J0UG9saWN5IHsKKyAgICAgICAg
Tm9uZSwKKyAgICAgICAgUmVsYXksCisgICAgICAgIEFsbAorICAgIH07CisKKyAgICBlbnVtIGNs
YXNzIEJ1bmRsZVBvbGljeSB7CisgICAgICAgIEJhbGFuY2VkLAorICAgICAgICBNYXhDb21wYXQs
CisgICAgICAgIE1heEJ1bmRsZQorICAgIH07CisKKyAgICBjb25zdCBWZWN0b3I8UmVmUHRyPElj
ZVNlcnZlckluZm8+PiYgaWNlU2VydmVycygpIGNvbnN0IHsgcmV0dXJuIG1faWNlU2VydmVyczsg
fQorICAgIEljZVRyYW5zcG9ydFBvbGljeSBpY2VUcmFuc3BvcnRQb2xpY3koKSBjb25zdCB7IHJl
dHVybiBtX2ljZVRyYW5zcG9ydFBvbGljeTsgfQorICAgIEJ1bmRsZVBvbGljeSBidW5kbGVQb2xp
Y3koKSBjb25zdCB7IHJldHVybiBtX2J1bmRsZVBvbGljeTsgfQorCitwcml2YXRlOgorICAgIE1l
ZGlhRW5kcG9pbnRDb25maWd1cmF0aW9uKFZlY3RvcjxSZWZQdHI8SWNlU2VydmVySW5mbz4+Jiwg
Y29uc3QgU3RyaW5nJiBpY2VUcmFuc3BvcnRQb2xpY3ksIGNvbnN0IFN0cmluZyYgYnVuZGxlUG9s
aWN5KTsKKworICAgIFZlY3RvcjxSZWZQdHI8SWNlU2VydmVySW5mbz4+IG1faWNlU2VydmVyczsK
KyAgICBJY2VUcmFuc3BvcnRQb2xpY3kgbV9pY2VUcmFuc3BvcnRQb2xpY3k7CisgICAgQnVuZGxl
UG9saWN5IG1fYnVuZGxlUG9saWN5OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkKKworI2VuZGlmIC8vIE1lZGlhRW5kcG9pbnRD
b25maWd1cmF0aW9uX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL01lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbi5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9u
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjc4ZjVlNgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhRW5kcG9p
bnRTZXNzaW9uQ29uZmlndXJhdGlvbi5oCkBAIC0wLDAgKzEsODYgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUgRXJpY3Nzb24gQUIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqICAgIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3Ry
aWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgRXJpY3Nzb24gbm9yIHRoZSBuYW1l
cyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBN
ZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb25faAorI2RlZmluZSBNZWRpYUVuZHBvaW50
U2Vzc2lvbkNvbmZpZ3VyYXRpb25faAorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKworI2lu
Y2x1ZGUgIlBlZXJNZWRpYURlc2NyaXB0aW9uLmgiCisjaW5jbHVkZSA8d3RmL0NyeXB0b2dyYXBo
aWNhbGx5UmFuZG9tTnVtYmVyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgTWVk
aWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uIDogcHVibGljIFJlZkNvdW50ZWQ8TWVkaWFF
bmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uPiB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZlB0
cjxNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24+IGNyZWF0ZSgpCisgICAgeworICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlv
bigpKTsKKyAgICB9CisgICAgdmlydHVhbCB+TWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0
aW9uKCkgeyB9CisKKyAgICB1aW50NjRfdCBzZXNzaW9uSWQoKSBjb25zdCB7IHJldHVybiBtX3Nl
c3Npb25JZDsgfQorICAgIHZvaWQgc2V0U2Vzc2lvbklkKHVpbnQ2NF90IHNlc3Npb25JZCkgeyBt
X3Nlc3Npb25JZCA9IHNlc3Npb25JZDsgfQorCisgICAgdW5zaWduZWQgc2Vzc2lvblZlcnNpb24o
KSBjb25zdCB7IHJldHVybiBtX3Nlc3Npb25WZXJzaW9uOyB9CisgICAgdm9pZCBzZXRTZXNzaW9u
VmVyc2lvbih1bnNpZ25lZCBzZXNzaW9uVmVyc2lvbikgeyBtX3Nlc3Npb25WZXJzaW9uID0gc2Vz
c2lvblZlcnNpb247IH0KKworICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8UGVlck1lZGlhRGVzY3Jp
cHRpb24+PiYgbWVkaWFEZXNjcmlwdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX21lZGlhRGVzY3Jp
cHRpb25zOyB9CisgICAgdm9pZCBhZGRNZWRpYURlc2NyaXB0aW9uKFJlZlB0cjxQZWVyTWVkaWFE
ZXNjcmlwdGlvbj4mJiBkZXNjcmlwdGlvbikgeyBtX21lZGlhRGVzY3JpcHRpb25zLmFwcGVuZChX
VEZNb3ZlKGRlc2NyaXB0aW9uKSk7IH0KKworICAgIFJlZlB0cjxNZWRpYUVuZHBvaW50U2Vzc2lv
bkNvbmZpZ3VyYXRpb24+IGNsb25lKCkgY29uc3QKKyAgICB7CisgICAgICAgIFJlZlB0cjxNZWRp
YUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24+IGNvcHkgPSBjcmVhdGUoKTsKKyAgICAgICAg
Y29weS0+bV9zZXNzaW9uSWQgPSBtX3Nlc3Npb25JZDsKKyAgICAgICAgY29weS0+bV9zZXNzaW9u
VmVyc2lvbiA9IG1fc2Vzc2lvblZlcnNpb247CisKKyAgICAgICAgZm9yIChhdXRvJiBtZGVzYyA6
IG1fbWVkaWFEZXNjcmlwdGlvbnMpCisgICAgICAgICAgICBjb3B5LT5tX21lZGlhRGVzY3JpcHRp
b25zLmFwcGVuZChtZGVzYy0+Y2xvbmUoKSk7CisKKyAgICAgICAgcmV0dXJuIGNvcHk7CisgICAg
fQorCitwcml2YXRlOgorICAgIE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbigpCisg
ICAgICAgIDogbV9zZXNzaW9uSWQoY3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1iZXIoKSkgLy8g
RklYTUU6IHNob3VsZCBiZSA2NCBiaXRzCisgICAgICAgICwgbV9zZXNzaW9uVmVyc2lvbigwKQor
ICAgIHsgfQorCisgICAgdWludDY0X3QgbV9zZXNzaW9uSWQ7CisgICAgdW5zaWduZWQgbV9zZXNz
aW9uVmVyc2lvbjsKKworICAgIFZlY3RvcjxSZWZQdHI8UGVlck1lZGlhRGVzY3JpcHRpb24+PiBt
X21lZGlhRGVzY3JpcHRpb25zOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkKKworI2VuZGlmIC8vIE1lZGlhRW5kcG9pbnRTZXNz
aW9uQ29uZmlndXJhdGlvbl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9NZWRpYVBheWxvYWQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL01lZGlhUGF5bG9hZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LmMzZTJlZjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9NZWRpYVBheWxvYWQuaApAQCAtMCwwICsxLDEyNCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBFcmljc3NvbiBBQi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogICAgaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJp
YnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBFcmljc3NvbiBub3IgdGhlIG5hbWVz
IG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICAgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIE1l
ZGlhUGF5bG9hZF9oCisjZGVmaW5lIE1lZGlhUGF5bG9hZF9oCisKKyNpZiBFTkFCTEUoTUVESUFf
U1RSRUFNKQorCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291
bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJp
bmdIYXNoLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgTWVkaWFQYXlsb2FkIDog
cHVibGljIFJlZkNvdW50ZWQ8TWVkaWFQYXlsb2FkPiB7CitwdWJsaWM6CisgICAgc3RhdGljIFJl
ZlB0cjxNZWRpYVBheWxvYWQ+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IE1lZGlhUGF5bG9hZCgpKTsKKyAgICB9CisgICAgdmlydHVhbCB+TWVkaWFQYXlsb2Fk
KCkgeyB9CisKKyAgICB1bnNpZ25lZCB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9Cisg
ICAgdm9pZCBzZXRUeXBlKHVuc2lnbmVkIHR5cGUpIHsgbV90eXBlID0gdHlwZTsgfQorCisgICAg
Y29uc3QgU3RyaW5nJiBlbmNvZGluZ05hbWUoKSBjb25zdCB7IHJldHVybiBtX2VuY29kaW5nTmFt
ZTsgfQorICAgIHZvaWQgc2V0RW5jb2RpbmdOYW1lKGNvbnN0IFN0cmluZyAmIGVuY29kaW5nTmFt
ZSkgeyBtX2VuY29kaW5nTmFtZSA9IGVuY29kaW5nTmFtZTsgfQorCisgICAgdW5zaWduZWQgY2xv
Y2tSYXRlKCkgY29uc3QgeyByZXR1cm4gbV9jbG9ja1JhdGU7IH0KKyAgICB2b2lkIHNldENsb2Nr
UmF0ZSh1bnNpZ25lZCBjbG9ja1JhdGUpIHsgbV9jbG9ja1JhdGUgPSBjbG9ja1JhdGU7IH0KKwor
ICAgIHVuc2lnbmVkIGNoYW5uZWxzKCkgY29uc3QgeyByZXR1cm4gbV9jaGFubmVsczsgfQorICAg
IHZvaWQgc2V0Q2hhbm5lbHModW5zaWduZWQgY2hhbm5lbHMpIHsgbV9jaGFubmVscyA9IGNoYW5u
ZWxzOyB9CisKKyAgICBib29sIGNjbWZpcigpIGNvbnN0IHsgcmV0dXJuIG1fY2NtZmlyOyB9Cisg
ICAgdm9pZCBzZXRDY21maXIoYm9vbCBjY21maXIpIHsgbV9jY21maXIgPSBjY21maXI7IH0KKwor
ICAgIGJvb2wgbmFja3BsaSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFja3BsaTsgfQorICAgIHZvaWQg
c2V0TmFja3BsaShib29sIG5hY2twbGkpIHsgbV9uYWNrcGxpID0gbmFja3BsaTsgfQorCisgICAg
Ym9vbCBuYWNrKCkgY29uc3QgeyByZXR1cm4gbV9uYWNrOyB9CisgICAgdm9pZCBzZXROYWNrKGJv
b2wgbmFjaykgeyBtX25hY2sgPSBuYWNrOyB9CisKKyAgICBjb25zdCBIYXNoTWFwPFN0cmluZywg
dW5zaWduZWQ+JiBwYXJhbWV0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9wYXJhbWV0ZXJzOyB9Cisg
ICAgdm9pZCBhZGRQYXJhbWV0ZXIoY29uc3QgU3RyaW5nJiBuYW1lLCB1bnNpZ25lZCB2YWx1ZSkg
eyBtX3BhcmFtZXRlcnMuc2V0KG5hbWUsIHZhbHVlKTsgfQorCisgICAgUmVmUHRyPE1lZGlhUGF5
bG9hZD4gY2xvbmUoKSBjb25zdAorICAgIHsKKyAgICAgICAgUmVmUHRyPE1lZGlhUGF5bG9hZD4g
Y29weSA9IGNyZWF0ZSgpOworCisgICAgICAgIGNvcHktPm1fdHlwZSA9IG1fdHlwZTsKKyAgICAg
ICAgY29weS0+bV9lbmNvZGluZ05hbWUgPSBTdHJpbmcobV9lbmNvZGluZ05hbWUpOworICAgICAg
ICBjb3B5LT5tX2Nsb2NrUmF0ZSA9IG1fY2xvY2tSYXRlOworCisgICAgICAgIGNvcHktPm1fY2hh
bm5lbHMgPSBtX2NoYW5uZWxzOworCisgICAgICAgIGNvcHktPm1fY2NtZmlyID0gbV9jY21maXI7
CisgICAgICAgIGNvcHktPm1fbmFja3BsaSA9IG1fbmFja3BsaTsKKyAgICAgICAgY29weS0+bV9u
YWNrID0gbV9uYWNrOworCisgICAgICAgIGZvciAoYXV0byYga2V5IDogbV9wYXJhbWV0ZXJzLmtl
eXMoKSkKKyAgICAgICAgICAgIGNvcHktPm1fcGFyYW1ldGVycy5hZGQoa2V5LCBtX3BhcmFtZXRl
cnMuZ2V0KGtleSkpOworCisgICAgICAgIHJldHVybiBjb3B5OworICAgIH0KKworcHJpdmF0ZToK
KyAgICBNZWRpYVBheWxvYWQoKQorICAgICAgICA6IG1fdHlwZSgwKQorICAgICAgICAsIG1fY2xv
Y2tSYXRlKDApCisgICAgICAgICwgbV9jaGFubmVscygwKQorICAgICAgICAsIG1fY2NtZmlyKGZh
bHNlKQorICAgICAgICAsIG1fbmFja3BsaShmYWxzZSkKKyAgICAgICAgLCBtX25hY2soZmFsc2Up
CisgICAgeyB9CisKKyAgICB1bnNpZ25lZCBtX3R5cGU7CisgICAgU3RyaW5nIG1fZW5jb2RpbmdO
YW1lOworICAgIHVuc2lnbmVkIG1fY2xvY2tSYXRlOworCisgICAgLy8gYXVkaW8KKyAgICB1bnNp
Z25lZCBtX2NoYW5uZWxzOworCisgICAgLy8gdmlkZW8KKyAgICBib29sIG1fY2NtZmlyOworICAg
IGJvb2wgbV9uYWNrcGxpOworICAgIGJvb2wgbV9uYWNrOworCisgICAgSGFzaE1hcDxTdHJpbmcs
IHVuc2lnbmVkPiBtX3BhcmFtZXRlcnM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQorCisjZW5kaWYgLy8gTWVkaWFQYXlsb2Fk
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1BlZXJN
ZWRpYURlc2NyaXB0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9Q
ZWVyTWVkaWFEZXNjcmlwdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjhhMzRmZGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9QZWVyTWVkaWFEZXNjcmlwdGlvbi5oCkBAIC0wLDAgKzEsMTg5IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEVyaWNzc29uIEFCLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiAgICBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAg
ICBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEVyaWNzc29uIG5vciB0
aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgICBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgUGVlck1lZGlhRGVzY3JpcHRpb25faAorI2RlZmluZSBQZWVyTWVkaWFEZXNjcmlwdGlv
bl9oCisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorCisjaW5jbHVkZSAiSWNlQ2FuZGlkYXRl
LmgiCisjaW5jbHVkZSAiTWVkaWFQYXlsb2FkLmgiCisjaW5jbHVkZSAiUmVhbHRpbWVNZWRpYVNv
dXJjZS5oIgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFBlZXJNZWRpYURlc2NyaXB0aW9u
IDogcHVibGljIFJlZkNvdW50ZWQ8UGVlck1lZGlhRGVzY3JpcHRpb24+IHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgUmVmUHRyPFBlZXJNZWRpYURlc2NyaXB0aW9uPiBjcmVhdGUoKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQZWVyTWVkaWFEZXNjcmlwdGlvbigpKTsKKyAgICB9
CisgICAgdmlydHVhbCB+UGVlck1lZGlhRGVzY3JpcHRpb24oKSB7IH0KKworICAgIGNvbnN0IFN0
cmluZyYgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorICAgIHZvaWQgc2V0VHlwZShj
b25zdCBTdHJpbmcmIHR5cGUpIHsgbV90eXBlID0gdHlwZTsgfQorCisgICAgdW5zaWduZWQgc2hv
cnQgcG9ydCgpIGNvbnN0IHsgcmV0dXJuIG1fcG9ydDsgfQorICAgIHZvaWQgc2V0UG9ydCh1bnNp
Z25lZCBzaG9ydCBwb3J0KSB7IG1fcG9ydCA9IHBvcnQ7IH0KKworICAgIGNvbnN0IFN0cmluZyYg
YWRkcmVzcygpIGNvbnN0IHsgcmV0dXJuIG1fYWRkcmVzczsgfQorICAgIHZvaWQgc2V0QWRkcmVz
cyhjb25zdCBTdHJpbmcmIGFkZHJlc3MpIHsgbV9hZGRyZXNzID0gYWRkcmVzczsgfQorCisgICAg
Y29uc3QgU3RyaW5nJiBtb2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2RlOyB9CisgICAgdm9pZCBz
ZXRNb2RlKGNvbnN0IFN0cmluZyYgbW9kZSkgeyBtX21vZGUgPSBtb2RlOyB9CisKKyAgICBjb25z
dCBWZWN0b3I8UmVmUHRyPE1lZGlhUGF5bG9hZD4+JiBwYXlsb2FkcygpIGNvbnN0IHsgcmV0dXJu
IG1fcGF5bG9hZHM7IH0KKyAgICB2b2lkIGFkZFBheWxvYWQoUmVmUHRyPE1lZGlhUGF5bG9hZD4m
JiBwYXlsb2FkKSB7IG1fcGF5bG9hZHMuYXBwZW5kKFdURk1vdmUocGF5bG9hZCkpOyB9CisgICAg
dm9pZCBzZXRQYXlsb2FkcyhWZWN0b3I8UmVmUHRyPE1lZGlhUGF5bG9hZD4+JiYgcGF5bG9hZHMp
IHsgbV9wYXlsb2FkcyA9IHBheWxvYWRzOyB9CisgICAgdm9pZCBzZXRQYXlsb2Fkcyhjb25zdCBW
ZWN0b3I8UmVmUHRyPE1lZGlhUGF5bG9hZD4+JiBwYXlsb2FkcykgeyBtX3BheWxvYWRzID0gcGF5
bG9hZHM7IH0KKworICAgIGJvb2wgcnRjcE11eCgpIGNvbnN0IHsgcmV0dXJuIG1fcnRjcE11eDsg
fQorICAgIHZvaWQgc2V0UnRjcE11eChib29sIHJ0Y3BNdXgpIHsgbV9ydGNwTXV4ID0gcnRjcE11
eDsgfQorCisgICAgY29uc3QgU3RyaW5nJiBydGNwQWRkcmVzcygpIGNvbnN0IHsgcmV0dXJuIG1f
cnRjcEFkZHJlc3M7IH0KKyAgICB2b2lkIHNldFJ0Y3BBZGRyZXNzKGNvbnN0IFN0cmluZyYgcnRj
cEFkZHJlc3MpIHsgbV9ydGNwQWRkcmVzcyA9IHJ0Y3BBZGRyZXNzOyB9CisKKyAgICB1bnNpZ25l
ZCBzaG9ydCBydGNwUG9ydCgpIGNvbnN0IHsgcmV0dXJuIG1fcnRjcFBvcnQ7IH0KKyAgICB2b2lk
IHNldFJ0Y3BQb3J0KHVuc2lnbmVkIHNob3J0IHJ0Y3BQb3J0KSB7IG1fcnRjcFBvcnQgPSBydGNw
UG9ydDsgfQorCisgICAgY29uc3QgU3RyaW5nJiBtZWRpYVN0cmVhbUlkKCkgY29uc3QgeyByZXR1
cm4gbV9tZWRpYVN0cmVhbUlkOyB9CisgICAgdm9pZCBzZXRNZWRpYVN0cmVhbUlkKGNvbnN0IFN0
cmluZyYgbWVkaWFTdHJlYW1JZCkgeyBtX21lZGlhU3RyZWFtSWQgPSBtZWRpYVN0cmVhbUlkOyB9
CisKKyAgICBjb25zdCBTdHJpbmcmIG1lZGlhU3RyZWFtVHJhY2tJZCgpIGNvbnN0IHsgcmV0dXJu
IG1fbWVkaWFTdHJlYW1UcmFja0lkOyB9CisgICAgdm9pZCBzZXRNZWRpYVN0cmVhbVRyYWNrSWQo
Y29uc3QgU3RyaW5nJiBtZWRpYVN0cmVhbVRyYWNrSWQpIHsgbV9tZWRpYVN0cmVhbVRyYWNrSWQg
PSBtZWRpYVN0cmVhbVRyYWNrSWQ7IH0KKworICAgIGNvbnN0IFN0cmluZyYgZHRsc1NldHVwKCkg
Y29uc3QgeyByZXR1cm4gbV9kdGxzU2V0dXA7IH0KKyAgICB2b2lkIHNldER0bHNTZXR1cChjb25z
dCBTdHJpbmcmIGR0bHNTZXR1cCkgeyBtX2R0bHNTZXR1cCA9IGR0bHNTZXR1cDsgfQorCisgICAg
Y29uc3QgU3RyaW5nJiBkdGxzRmluZ2VycHJpbnRIYXNoRnVuY3Rpb24oKSBjb25zdCB7IHJldHVy
biBtX2R0bHNGaW5nZXJwcmludEhhc2hGdW5jdGlvbjsgfQorICAgIHZvaWQgc2V0RHRsc0Zpbmdl
cnByaW50SGFzaEZ1bmN0aW9uKGNvbnN0IFN0cmluZyYgZHRsc0ZpbmdlcnByaW50SGFzaEZ1bmN0
aW9uKSB7IG1fZHRsc0ZpbmdlcnByaW50SGFzaEZ1bmN0aW9uID0gZHRsc0ZpbmdlcnByaW50SGFz
aEZ1bmN0aW9uOyB9CisKKyAgICBjb25zdCBTdHJpbmcmIGR0bHNGaW5nZXJwcmludCgpIGNvbnN0
IHsgcmV0dXJuIG1fZHRsc0ZpbmdlcnByaW50OyB9CisgICAgdm9pZCBzZXREdGxzRmluZ2VycHJp
bnQoY29uc3QgU3RyaW5nJiBkdGxzRmluZ2VycHJpbnQpIHsgbV9kdGxzRmluZ2VycHJpbnQgPSBk
dGxzRmluZ2VycHJpbnQ7IH0KKworICAgIGNvbnN0IFN0cmluZyYgY25hbWUoKSBjb25zdCB7IHJl
dHVybiBtX2NuYW1lOyB9CisgICAgdm9pZCBzZXRDbmFtZShjb25zdCBTdHJpbmcmIGNuYW1lKSB7
IG1fY25hbWUgPSBjbmFtZTsgfQorCisgICAgY29uc3QgVmVjdG9yPHVuc2lnbmVkPiYgc3NyY3Mo
KSBjb25zdCB7IHJldHVybiBtX3NzcmNzOyB9CisgICAgdm9pZCBhZGRTc3JjKHVuc2lnbmVkIHNz
cmMpIHsgbV9zc3Jjcy5hcHBlbmQoc3NyYyk7IH0KKyAgICB2b2lkIGNsZWFyU3NyY3MoKSB7IG1f
c3NyY3MuY2xlYXIoKTsgfQorCisgICAgY29uc3QgU3RyaW5nJiBpY2VVZnJhZygpIGNvbnN0IHsg
cmV0dXJuIG1faWNlVWZyYWc7IH0KKyAgICB2b2lkIHNldEljZVVmcmFnKGNvbnN0IFN0cmluZyYg
aWNlVWZyYWcpIHsgbV9pY2VVZnJhZyA9IGljZVVmcmFnOyB9CisKKyAgICBjb25zdCBTdHJpbmcm
IGljZVBhc3N3b3JkKCkgY29uc3QgeyByZXR1cm4gbV9pY2VQYXNzd29yZDsgfQorICAgIHZvaWQg
c2V0SWNlUGFzc3dvcmQoY29uc3QgU3RyaW5nJiBpY2VQYXNzd29yZCkgeyBtX2ljZVBhc3N3b3Jk
ID0gaWNlUGFzc3dvcmQ7IH0KKworICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8SWNlQ2FuZGlkYXRl
Pj4mIGljZUNhbmRpZGF0ZXMoKSBjb25zdCB7IHJldHVybiBtX2ljZUNhbmRpZGF0ZXM7IH0KKyAg
ICB2b2lkIGFkZEljZUNhbmRpZGF0ZShSZWZQdHI8SWNlQ2FuZGlkYXRlPiYmIGNhbmRpZGF0ZSkg
eyBtX2ljZUNhbmRpZGF0ZXMuYXBwZW5kKFdURk1vdmUoY2FuZGlkYXRlKSk7IH0KKworICAgIFJl
YWx0aW1lTWVkaWFTb3VyY2UqIHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlLmdldCgp
OyB9CisgICAgdm9pZCBzZXRTb3VyY2UoUmVmUHRyPFJlYWx0aW1lTWVkaWFTb3VyY2U+JiYgc291
cmNlKSB7IG1fc291cmNlID0gc291cmNlOyB9CisKKyAgICBSZWZQdHI8UGVlck1lZGlhRGVzY3Jp
cHRpb24+IGNsb25lKCkgY29uc3QKKyAgICB7CisgICAgICAgIFJlZlB0cjxQZWVyTWVkaWFEZXNj
cmlwdGlvbj4gY29weSA9IGNyZWF0ZSgpOworCisgICAgICAgIGNvcHktPm1fdHlwZSA9IFN0cmlu
ZyhtX3R5cGUpOworICAgICAgICBjb3B5LT5tX3BvcnQgPSBtX3BvcnQ7CisgICAgICAgIGNvcHkt
Pm1fYWRkcmVzcyA9IFN0cmluZyhtX2FkZHJlc3MpOworICAgICAgICBjb3B5LT5tX21vZGUgPSBT
dHJpbmcobV9tb2RlKTsKKworICAgICAgICBmb3IgKGF1dG8mIHBheWxvYWQgOiBtX3BheWxvYWRz
KQorICAgICAgICAgICAgY29weS0+bV9wYXlsb2Fkcy5hcHBlbmQocGF5bG9hZC0+Y2xvbmUoKSk7
CisKKyAgICAgICAgY29weS0+bV9ydGNwTXV4ID0gbV9ydGNwTXV4OworICAgICAgICBjb3B5LT5t
X3J0Y3BBZGRyZXNzID0gU3RyaW5nKG1fcnRjcEFkZHJlc3MpOworICAgICAgICBjb3B5LT5tX3J0
Y3BQb3J0ID0gbV9ydGNwUG9ydDsKKworICAgICAgICBjb3B5LT5tX21lZGlhU3RyZWFtSWQgPSBT
dHJpbmcobV9tZWRpYVN0cmVhbUlkKTsKKyAgICAgICAgY29weS0+bV9tZWRpYVN0cmVhbVRyYWNr
SWQgPSBTdHJpbmcobV9tZWRpYVN0cmVhbVRyYWNrSWQpOworCisgICAgICAgIGNvcHktPm1fZHRs
c1NldHVwID0gU3RyaW5nKG1fZHRsc1NldHVwKTsKKyAgICAgICAgY29weS0+bV9kdGxzRmluZ2Vy
cHJpbnRIYXNoRnVuY3Rpb24gPSBTdHJpbmcobV9kdGxzRmluZ2VycHJpbnRIYXNoRnVuY3Rpb24p
OworICAgICAgICBjb3B5LT5tX2R0bHNGaW5nZXJwcmludCA9IFN0cmluZyhtX2R0bHNGaW5nZXJw
cmludCk7CisKKyAgICAgICAgZm9yIChhdXRvIHNzcmMgOiBtX3NzcmNzKQorICAgICAgICAgICAg
Y29weS0+bV9zc3Jjcy5hcHBlbmQoc3NyYyk7CisKKyAgICAgICAgY29weS0+bV9jbmFtZSA9IFN0
cmluZyhtX2NuYW1lKTsKKworICAgICAgICBjb3B5LT5tX2ljZVVmcmFnID0gU3RyaW5nKG1faWNl
VWZyYWcpOworICAgICAgICBjb3B5LT5tX2ljZVBhc3N3b3JkID0gU3RyaW5nKG1faWNlUGFzc3dv
cmQpOworCisgICAgICAgIGZvciAoYXV0byYgY2FuZGlkYXRlIDogbV9pY2VDYW5kaWRhdGVzKQor
ICAgICAgICAgICAgY29weS0+bV9pY2VDYW5kaWRhdGVzLmFwcGVuZChjYW5kaWRhdGUtPmNsb25l
KCkpOworCisgICAgICAgIHJldHVybiBjb3B5OworICAgIH0KKworcHJpdmF0ZToKKyAgICBQZWVy
TWVkaWFEZXNjcmlwdGlvbigpCisgICAgICAgIDogbV9wb3J0KDApCisgICAgICAgICwgbV9ydGNw
TXV4KGZhbHNlKQorICAgICAgICAsIG1fcnRjcFBvcnQoMCkKKyAgICAgICAgLCBtX3NvdXJjZShu
dWxscHRyKQorICAgIHsgfQorCisgICAgU3RyaW5nIG1fdHlwZTsKKyAgICB1bnNpZ25lZCBzaG9y
dCBtX3BvcnQ7CisgICAgU3RyaW5nIG1fYWRkcmVzczsKKyAgICBTdHJpbmcgbV9tb2RlOworCisg
ICAgVmVjdG9yPFJlZlB0cjxNZWRpYVBheWxvYWQ+PiBtX3BheWxvYWRzOworCisgICAgYm9vbCBt
X3J0Y3BNdXg7CisgICAgU3RyaW5nIG1fcnRjcEFkZHJlc3M7CisgICAgdW5zaWduZWQgc2hvcnQg
bV9ydGNwUG9ydDsKKworICAgIFN0cmluZyBtX21lZGlhU3RyZWFtSWQ7CisgICAgU3RyaW5nIG1f
bWVkaWFTdHJlYW1UcmFja0lkOworCisgICAgU3RyaW5nIG1fZHRsc1NldHVwOworICAgIFN0cmlu
ZyBtX2R0bHNGaW5nZXJwcmludEhhc2hGdW5jdGlvbjsKKyAgICBTdHJpbmcgbV9kdGxzRmluZ2Vy
cHJpbnQ7CisKKyAgICBWZWN0b3I8dW5zaWduZWQ+IG1fc3NyY3M7CisgICAgU3RyaW5nIG1fY25h
bWU7CisKKyAgICBTdHJpbmcgbV9pY2VVZnJhZzsKKyAgICBTdHJpbmcgbV9pY2VQYXNzd29yZDsK
KyAgICBWZWN0b3I8UmVmUHRyPEljZUNhbmRpZGF0ZT4+IG1faWNlQ2FuZGlkYXRlczsKKworICAg
IFJlZlB0cjxSZWFsdGltZU1lZGlhU291cmNlPiBtX3NvdXJjZTsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCisKKyNlbmRpZiAv
LyBQZWVyTWVkaWFEZXNjcmlwdGlvbl9oCg==
</data>
<flag name="review"
          id="296674"
          type_id="1"
          status="+"
          setter="eric.carlson"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>272108</attachid>
            <date>2016-02-24 02:44:47 -0800</date>
            <delta_ts>2016-02-24 14:23:49 -0800</delta_ts>
            <desc>Updated patch for landing</desc>
            <filename>add-mediaendpoint_2.patch</filename>
            <type>text/plain</type>
            <size>55819</size>
            <attacher name="Adam Bergkvist">adam.bergkvist</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKaW5kZXggMTAwYWI0ZC4uNmNkZDZkOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKQEAgLTIyOTcsNiArMjI5Nyw4IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybWF0aW9uTWF0cml4LmNwcAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uLmNw
cAogCisgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFFbmRwb2ludC5jcHAKKyAgICBwbGF0
Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50Q29uZmlndXJhdGlvbi5jcHAKICAgICBwbGF0
Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVByaXZhdGUuY3BwCiAgICAgcGxhdGZvcm0vbWVk
aWFzdHJlYW0vTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUuY3BwCiAgICAgcGxhdGZvcm0vbWVkaWFz
dHJlYW0vUlRDSWNlQ2FuZGlkYXRlRGVzY3JpcHRvci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAyM2NlNGRi
Li5lMjIzODdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTU4IEBACisyMDE2LTAyLTE5ICBBZGFt
IEJlcmdrdmlzdCAgPGFkYW0uYmVyZ2t2aXN0QGVyaWNzc29uLmNvbT4KKworICAgICAgICBXZWJS
VEM6IEFkZCBNZWRpYUVuZHBvaW50IGludGVyZmFjZSAoV2ViUlRDIGJhY2tlbmQgYWJzdHJhY3Rp
b24pCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTAx
NjUKKworICAgICAgICBSZXZpZXdlZCBieSBFcmljIENhcmxzb24uCisKKyAgICAgICAgQWRkIHRo
ZSBNZWRpYUVuZHBvaW50IGludGVyZmFjZSBhbG9uZyB3aXRoIGl0cyBjb21wYW5pb24gb2JqZWN0
cy4KKworICAgICAgICBNZWRpYUVuZHBvaW50IGludGVyZmFjZTogQSBXZWJSVEMgcGxhdGZvcm0g
YWJzdHJhY3Rpb24gdGhhdCBpcyB1c2VkIHRvCisgICAgICAgIGNvbmZpZ3VyZSBob3cgdGhlIHRo
ZSBXZWJSVEMgYmFja2VuZCBzZW5kcyBhbmQgcmVjZWl2ZXMuIEl0IGFsc28gYWJzdHJhY3RzCisg
ICAgICAgIElDRSBmdW5jdGlvbmFsaXR5IHN1Y2ggYXMgZ2VuZXJhdGluZyBsb2NhbCBjYW5kaWRh
dGVzIGFuZCBkb2luZworICAgICAgICBjaGVja2luZyBvbiByZW1vdGUgY2FuZGlkYXRlcy4gVGhl
IFJUQ1BlZXJDb25uZWN0aW9uIEFQSSwgYW5kIG90aGVyIEFQSQorICAgICAgICBvYmplY3RzIHN1
Y2ggYXMgUlRDUnRwU2VuZGVyL1JlY2VpdmVyLCBsaXZlIGFib3ZlIE1lZGlhRW5kcG9pbnQuCisK
KyAgICAgICAgTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb246IEEgc2V0dGluZ3Mgb2JqZWN0IHVz
ZWQgdG8gY29uZmlndXJlIGEKKyAgICAgICAgTWVkaWFFbmRwb2ludCB3aXRoLCBmb3IgZXhhbXBs
ZSwgSUNFIGhlbHBlciBzZXJ2ZXJzIGFuZCBvdGhlciBwb2xpY2VzLgorICAgICAgICBBIE1lZGlh
RW5kcG9pbnRDb25maWd1cmF0aW9uIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSBhIE1lZGlhRW5kcG9p
bnQsIGJ1dAorICAgICAgICBjYW4gYWxzbyBiZSB1c2VkIHRvIHVwZGF0ZSBzZXR0aW5ncy4KKwor
ICAgICAgICBNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb246IEFuIG9iamVjdCB0aGF0
IGRlc2NyaWJlcyBob3cgdGhlCisgICAgICAgIE1lZGlhRW5kcG9pbnQgc2hvdWxkIHNlbmQgYW5k
IHJlY2VpdmUuIENvbnRhaW5zIFBlZXJNZWRpYURlc2NyaXB0aW9uLAorICAgICAgICBNZWRpYVBh
eWxvYWQgYW5kIEljZUNhbmRpZGF0ZSBvYmplY3RzLgorCisgICAgICAgIFRlc3RzOiBUaGUgTWVk
aWFFbmRwb2ludCBwbGF0Zm9ybSBpbnRlcmZhY2UgaGFzIG5vIGltcGxlbWVudGF0aW9ucyB5ZXQu
CisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3Ry
ZWFtL01lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb246OmdvdER0bHNGaW5nZXJwcmludCk6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb246OmdvdEljZUNhbmRpZGF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb246OmRvbmVHYXRo
ZXJpbmdDYW5kaWRhdGVzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhRW5kcG9pbnRQZWVyQ29u
bmVjdGlvbjo6Z290UmVtb3RlU291cmNlKToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFt
L01lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbi5oOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9JY2VD
YW5kaWRhdGUuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJY2VDYW5kaWRhdGU6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJY2VDYW5kaWRhdGU6On5JY2VDYW5kaWRhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6SWNlQ2FuZGlkYXRlOjp0eXBlKToKKyAgICAgICAgKFdlYkNvcmU6Oklj
ZUNhbmRpZGF0ZTo6c2V0VHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpJY2VDYW5kaWRhdGU6OmZv
dW5kYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SWNlQ2FuZGlkYXRlOjpzZXRGb3VuZGF0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OkljZUNhbmRpZGF0ZTo6Y29tcG9uZW50SWQpOgorICAgICAg
ICAoV2ViQ29yZTo6SWNlQ2FuZGlkYXRlOjpzZXRDb21wb25lbnRJZCk6CisgICAgICAgIChXZWJD
b3JlOjpJY2VDYW5kaWRhdGU6OnRyYW5zcG9ydCk6CisgICAgICAgIChXZWJDb3JlOjpJY2VDYW5k
aWRhdGU6OnNldFRyYW5zcG9ydCk6CisgICAgICAgIChXZWJDb3JlOjpJY2VDYW5kaWRhdGU6OnBy
aW9yaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkljZUNhbmRpZGF0ZTo6c2V0UHJpb3JpdHkpOgor
ICAgICAgICAoV2ViQ29yZTo6SWNlQ2FuZGlkYXRlOjphZGRyZXNzKToKKyAgICAgICAgKFdlYkNv
cmU6OkljZUNhbmRpZGF0ZTo6c2V0QWRkcmVzcyk6CisgICAgICAgIChXZWJDb3JlOjpJY2VDYW5k
aWRhdGU6OnBvcnQpOgorICAgICAgICAoV2ViQ29yZTo6SWNlQ2FuZGlkYXRlOjpzZXRQb3J0KToK
KyAgICAgICAgKFdlYkNvcmU6OkljZUNhbmRpZGF0ZTo6dGNwVHlwZSk6CisgICAgICAgIChXZWJD
b3JlOjpJY2VDYW5kaWRhdGU6OnNldFRjcFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6SWNlQ2Fu
ZGlkYXRlOjpyZWxhdGVkQWRkcmVzcyk6CisgICAgICAgIChXZWJDb3JlOjpJY2VDYW5kaWRhdGU6
OnNldFJlbGF0ZWRBZGRyZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OkljZUNhbmRpZGF0ZTo6cmVs
YXRlZFBvcnQpOgorICAgICAgICAoV2ViQ29yZTo6SWNlQ2FuZGlkYXRlOjpzZXRSZWxhdGVkUG9y
dCk6CisgICAgICAgIChXZWJDb3JlOjpJY2VDYW5kaWRhdGU6OmNsb25lKToKKyAgICAgICAgKFdl
YkNvcmU6OkljZUNhbmRpZGF0ZTo6SWNlQ2FuZGlkYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpj
cmVhdGVNZWRpYUVuZHBvaW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRp
YUVuZHBvaW50Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFFbmRwb2ludENsaWVu
dDo6fk1lZGlhRW5kcG9pbnRDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFFbmRwb2lu
dDo6fk1lZGlhRW5kcG9pbnQpOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlh
RW5kcG9pbnRDb25maWd1cmF0aW9uLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJY2VT
ZXJ2ZXJJbmZvOjpJY2VTZXJ2ZXJJbmZvKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhRW5kcG9p
bnRDb25maWd1cmF0aW9uOjpNZWRpYUVuZHBvaW50Q29uZmlndXJhdGlvbik6CisgICAgICAgICog
cGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb24uaDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpJY2VTZXJ2ZXJJbmZvOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6SWNlU2VydmVySW5mbzo6fkljZVNlcnZlckluZm8pOgorICAgICAgICAoV2ViQ29yZTo6
SWNlU2VydmVySW5mbzo6dXJscyk6CisgICAgICAgIChXZWJDb3JlOjpJY2VTZXJ2ZXJJbmZvOjpj
cmVkZW50aWFsKToKKyAgICAgICAgKFdlYkNvcmU6OkljZVNlcnZlckluZm86OnVzZXJuYW1lKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhRW5kcG9pbnRDb25maWd1cmF0aW9uOjpjcmVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb246OmljZVNlcnZlcnMp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb246OmljZVRyYW5z
cG9ydFBvbGljeSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUVuZHBvaW50Q29uZmlndXJhdGlv
bjo6YnVuZGxlUG9saWN5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYUVu
ZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24uaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb246OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb246On5NZWRpYUVuZHBvaW50U2Vz
c2lvbkNvbmZpZ3VyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFFbmRwb2ludFNlc3Np
b25Db25maWd1cmF0aW9uOjpzZXNzaW9uSWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFFbmRw
b2ludFNlc3Npb25Db25maWd1cmF0aW9uOjpzZXRTZXNzaW9uSWQpOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uOjpzZXNzaW9uVmVyc2lvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb246OnNldFNl
c3Npb25WZXJzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhRW5kcG9pbnRTZXNzaW9uQ29u
ZmlndXJhdGlvbjo6bWVkaWFEZXNjcmlwdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFF
bmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uOjphZGRNZWRpYURlc2NyaXB0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbjo6Y2xvbmUpOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uOjpNZWRp
YUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24pOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlh
c3RyZWFtL01lZGlhUGF5bG9hZC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGF5
bG9hZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGF5bG9hZDo6fk1lZGlhUGF5
bG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBheWxvYWQ6OnR5cGUpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQYXlsb2FkOjpzZXRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGF5bG9hZDo6ZW5jb2RpbmdOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGF5bG9hZDo6
c2V0RW5jb2RpbmdOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGF5bG9hZDo6Y2xvY2tS
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGF5bG9hZDo6c2V0Q2xvY2tSYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGF5bG9hZDo6Y2hhbm5lbHMpOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQYXlsb2FkOjpzZXRDaGFubmVscyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBh
eWxvYWQ6OmNjbWZpcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBheWxvYWQ6OnNldENjbWZp
cik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBheWxvYWQ6Om5hY2twbGkpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQYXlsb2FkOjpzZXROYWNrcGxpKToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGF5bG9hZDo6bmFjayk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBheWxvYWQ6OnNldE5h
Y2spOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQYXlsb2FkOjpwYXJhbWV0ZXJzKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGF5bG9hZDo6YWRkUGFyYW1ldGVyKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGF5bG9hZDo6Y2xvbmUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQYXlsb2Fk
OjpNZWRpYVBheWxvYWQpOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL1BlZXJNZWRp
YURlc2NyaXB0aW9uLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UGVlck1lZGlhRGVzY3Jp
cHRpb246OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpQZWVyTWVkaWFEZXNjcmlwdGlvbjo6
flBlZXJNZWRpYURlc2NyaXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJNZWRpYURlc2Ny
aXB0aW9uOjp0eXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJNZWRpYURlc2NyaXB0aW9uOjpz
ZXRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJNZWRpYURlc2NyaXB0aW9uOjpwb3J0KToK
KyAgICAgICAgKFdlYkNvcmU6OlBlZXJNZWRpYURlc2NyaXB0aW9uOjpzZXRQb3J0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlBlZXJNZWRpYURlc2NyaXB0aW9uOjphZGRyZXNzKToKKyAgICAgICAgKFdl
YkNvcmU6OlBlZXJNZWRpYURlc2NyaXB0aW9uOjpzZXRBZGRyZXNzKToKKyAgICAgICAgKFdlYkNv
cmU6OlBlZXJNZWRpYURlc2NyaXB0aW9uOjptb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJN
ZWRpYURlc2NyaXB0aW9uOjpzZXRNb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJNZWRpYURl
c2NyaXB0aW9uOjpwYXlsb2Fkcyk6CisgICAgICAgIChXZWJDb3JlOjpQZWVyTWVkaWFEZXNjcmlw
dGlvbjo6YWRkUGF5bG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpQZWVyTWVkaWFEZXNjcmlwdGlv
bjo6c2V0UGF5bG9hZHMpOgorICAgICAgICAoV2ViQ29yZTo6UGVlck1lZGlhRGVzY3JpcHRpb246
OnJ0Y3BNdXgpOgorICAgICAgICAoV2ViQ29yZTo6UGVlck1lZGlhRGVzY3JpcHRpb246OnNldFJ0
Y3BNdXgpOgorICAgICAgICAoV2ViQ29yZTo6UGVlck1lZGlhRGVzY3JpcHRpb246OnJ0Y3BBZGRy
ZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJNZWRpYURlc2NyaXB0aW9uOjpzZXRSdGNwQWRk
cmVzcyk6CisgICAgICAgIChXZWJDb3JlOjpQZWVyTWVkaWFEZXNjcmlwdGlvbjo6cnRjcFBvcnQp
OgorICAgICAgICAoV2ViQ29yZTo6UGVlck1lZGlhRGVzY3JpcHRpb246OnNldFJ0Y3BQb3J0KToK
KyAgICAgICAgKFdlYkNvcmU6OlBlZXJNZWRpYURlc2NyaXB0aW9uOjptZWRpYVN0cmVhbUlkKToK
KyAgICAgICAgKFdlYkNvcmU6OlBlZXJNZWRpYURlc2NyaXB0aW9uOjpzZXRNZWRpYVN0cmVhbUlk
KToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJNZWRpYURlc2NyaXB0aW9uOjptZWRpYVN0cmVhbVRy
YWNrSWQpOgorICAgICAgICAoV2ViQ29yZTo6UGVlck1lZGlhRGVzY3JpcHRpb246OnNldE1lZGlh
U3RyZWFtVHJhY2tJZCk6CisgICAgICAgIChXZWJDb3JlOjpQZWVyTWVkaWFEZXNjcmlwdGlvbjo6
ZHRsc1NldHVwKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJNZWRpYURlc2NyaXB0aW9uOjpzZXRE
dGxzU2V0dXApOgorICAgICAgICAoV2ViQ29yZTo6UGVlck1lZGlhRGVzY3JpcHRpb246OmR0bHNG
aW5nZXJwcmludEhhc2hGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpQZWVyTWVkaWFEZXNj
cmlwdGlvbjo6c2V0RHRsc0ZpbmdlcnByaW50SGFzaEZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OlBlZXJNZWRpYURlc2NyaXB0aW9uOjpkdGxzRmluZ2VycHJpbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6UGVlck1lZGlhRGVzY3JpcHRpb246OnNldER0bHNGaW5nZXJwcmludCk6CisgICAgICAg
IChXZWJDb3JlOjpQZWVyTWVkaWFEZXNjcmlwdGlvbjo6Y25hbWUpOgorICAgICAgICAoV2ViQ29y
ZTo6UGVlck1lZGlhRGVzY3JpcHRpb246OnNldENuYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlBl
ZXJNZWRpYURlc2NyaXB0aW9uOjpzc3Jjcyk6CisgICAgICAgIChXZWJDb3JlOjpQZWVyTWVkaWFE
ZXNjcmlwdGlvbjo6YWRkU3NyYyk6CisgICAgICAgIChXZWJDb3JlOjpQZWVyTWVkaWFEZXNjcmlw
dGlvbjo6Y2xlYXJTc3Jjcyk6CisgICAgICAgIChXZWJDb3JlOjpQZWVyTWVkaWFEZXNjcmlwdGlv
bjo6aWNlVWZyYWcpOgorICAgICAgICAoV2ViQ29yZTo6UGVlck1lZGlhRGVzY3JpcHRpb246OnNl
dEljZVVmcmFnKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJNZWRpYURlc2NyaXB0aW9uOjppY2VQ
YXNzd29yZCk6CisgICAgICAgIChXZWJDb3JlOjpQZWVyTWVkaWFEZXNjcmlwdGlvbjo6c2V0SWNl
UGFzc3dvcmQpOgorICAgICAgICAoV2ViQ29yZTo6UGVlck1lZGlhRGVzY3JpcHRpb246OmljZUNh
bmRpZGF0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6UGVlck1lZGlhRGVzY3JpcHRpb246OmFkZElj
ZUNhbmRpZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpQZWVyTWVkaWFEZXNjcmlwdGlvbjo6c291
cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJNZWRpYURlc2NyaXB0aW9uOjpzZXRTb3VyY2Up
OgorICAgICAgICAoV2ViQ29yZTo6UGVlck1lZGlhRGVzY3JpcHRpb246OmNsb25lKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBlZXJNZWRpYURlc2NyaXB0aW9uOjpQZWVyTWVkaWFEZXNjcmlwdGlvbik6
CisKIDIwMTYtMDItMTggIEFuZHJlYXMgS2xpbmcgIDxha2xpbmdAYXBwbGUuY29tPgogCiAgICAg
ICAgIFJlZHVjZSB0aWxpbmcgY292ZXJhZ2UgaW1tZWRpYXRlbHkgd2hlbiBtZW1vcnkgcHJlc3N1
cmUgaGl0cy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0v
TWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bWVkaWFzdHJlYW0vTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uLmNwcAppbmRleCBjMzRjMzc2
Li5lZDY4M2Q0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFt
L01lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb24uY3BwCkBAIC0zNSw2
ICszNSw3IEBACiAKICNpbmNsdWRlICJET01FcnJvci5oIgogI2luY2x1ZGUgIkpTRE9NRXJyb3Iu
aCIKKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
QEAgLTE3NCw2ICsxNzUsNDUgQEAgdm9pZCBNZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb246Om1h
cmtBc05lZWRpbmdOZWdvdGlhdGlvbigpCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAordm9p
ZCBNZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb246OmdvdER0bHNGaW5nZXJwcmludChjb25zdCBT
dHJpbmcmIGZpbmdlcnByaW50LCBjb25zdCBTdHJpbmcmIGZpbmdlcnByaW50RnVuY3Rpb24pCit7
CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIFVOVVNFRF9QQVJBTShmaW5nZXJw
cmludCk7CisgICAgVU5VU0VEX1BBUkFNKGZpbmdlcnByaW50RnVuY3Rpb24pOworCisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBNZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb246Omdv
dEljZUNhbmRpZGF0ZSh1bnNpZ25lZCBtZGVzY0luZGV4LCBSZWZQdHI8SWNlQ2FuZGlkYXRlPiYm
IGNhbmRpZGF0ZSkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgVU5VU0VE
X1BBUkFNKG1kZXNjSW5kZXgpOworICAgIFVOVVNFRF9QQVJBTShjYW5kaWRhdGUpOworCisgICAg
bm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBNZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb246
OmRvbmVHYXRoZXJpbmdDYW5kaWRhdGVzKHVuc2lnbmVkIG1kZXNjSW5kZXgpCit7CisgICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIFVOVVNFRF9QQVJBTShtZGVzY0luZGV4KTsKKwor
ICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0
aW9uOjpnb3RSZW1vdGVTb3VyY2UodW5zaWduZWQgbWRlc2NJbmRleCwgUmVmUHRyPFJlYWx0aW1l
TWVkaWFTb3VyY2U+JiYgc291cmNlKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisK
KyAgICBVTlVTRURfUEFSQU0obWRlc2NJbmRleCk7CisgICAgVU5VU0VEX1BBUkFNKHNvdXJjZSk7
CisKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAK
ICNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb24uaCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0
aW9uLmgKaW5kZXggNmNkM2IxOC4uZmI2ZjRmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb24uaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRW5kcG9pbnRQZWVyQ29ubmVj
dGlvbi5oCkBAIC0zMyw2ICszMyw3IEBACiAKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQogCisj
aW5jbHVkZSAiTWVkaWFFbmRwb2ludC5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAj
aW5jbHVkZSAiUGVlckNvbm5lY3Rpb25CYWNrZW5kLmgiCiAjaW5jbHVkZSAiUlRDU2Vzc2lvbkRl
c2NyaXB0aW9uLmgiCkBAIC00Miw3ICs0Myw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xh
c3MgTWVkaWFTdHJlYW1UcmFjazsKIAotY2xhc3MgTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9u
IDogcHVibGljIFBlZXJDb25uZWN0aW9uQmFja2VuZCB7CitjbGFzcyBNZWRpYUVuZHBvaW50UGVl
ckNvbm5lY3Rpb24gOiBwdWJsaWMgUGVlckNvbm5lY3Rpb25CYWNrZW5kLCBwdWJsaWMgTWVkaWFF
bmRwb2ludENsaWVudCB7CiBwdWJsaWM6CiAgICAgTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9u
KFBlZXJDb25uZWN0aW9uQmFja2VuZENsaWVudCopOwogCkBAIC03MSw2ICs3MiwxMyBAQCBwdWJs
aWM6CiAgICAgYm9vbCBpc05lZ290aWF0aW9uTmVlZGVkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gZmFsc2U7IH07CiAgICAgdm9pZCBtYXJrQXNOZWVkaW5nTmVnb3RpYXRpb24oKSBvdmVycmlk
ZTsKICAgICB2b2lkIGNsZWFyTmVnb3RpYXRpb25OZWVkZWRTdGF0ZSgpIG92ZXJyaWRlIHsgbm90
SW1wbGVtZW50ZWQoKTsgfTsKKworcHJpdmF0ZToKKyAgICAvLyBNZWRpYUVuZHBvaW50Q2xpZW50
CisgICAgdmlydHVhbCB2b2lkIGdvdER0bHNGaW5nZXJwcmludChjb25zdCBTdHJpbmcmIGZpbmdl
cnByaW50LCBjb25zdCBTdHJpbmcmIGZpbmdlcnByaW50RnVuY3Rpb24pIG92ZXJyaWRlOworICAg
IHZpcnR1YWwgdm9pZCBnb3RJY2VDYW5kaWRhdGUodW5zaWduZWQgbWRlc2NJbmRleCwgUmVmUHRy
PEljZUNhbmRpZGF0ZT4mJikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGRvbmVHYXRoZXJp
bmdDYW5kaWRhdGVzKHVuc2lnbmVkIG1kZXNjSW5kZXgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwg
dm9pZCBnb3RSZW1vdGVTb3VyY2UodW5zaWduZWQgbWRlc2NJbmRleCwgUmVmUHRyPFJlYWx0aW1l
TWVkaWFTb3VyY2U+JiYpIG92ZXJyaWRlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmlu
ZGV4IDlkZmQ3ODEuLjZkOTgxZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTI0MjgsNiArMjQyOCwxNCBAQAogCQk1RUE3MjVE
MzFBQ0FCRDQ3MDBFQUQxN0IgLyogTWVkaWFEZXZpY2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RUE3MjVDRTFBQ0FCQ0Q5MDBFQUQxN0IgLyogTWVk
aWFEZXZpY2VzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJNUVBNzI1RDUxQUNBQkQ1NzAwRUFEMTdCIC8qIE5hdmlnYXRvck1lZGlhRGV2aWNlcy5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RUE3MjVD
QTFBQ0FCQ0I1MDBFQUQxN0IgLyogTmF2aWdhdG9yTWVkaWFEZXZpY2VzLmNwcCAqLzsgfTsKIAkJ
NUVBNzI1RDYxQUNBQkQ1NzAwRUFEMTdCIC8qIE5hdmlnYXRvck1lZGlhRGV2aWNlcy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUVBNzI1Q0IxQUNBQkNC
NTAwRUFEMTdCIC8qIE5hdmlnYXRvck1lZGlhRGV2aWNlcy5oICovOyB9OworCQk1RUJCODkzMTFD
Nzc3N0ZGMDBDNjVENDEgLyogTWVkaWFQYXlsb2FkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RUJCODkyRjFDNzc3N0QwMDBDNjVENDEgLyogTWVkaWFQ
YXlsb2FkLmggKi87IH07CisJCTVFQkI4OTMyMUM3Nzc4MjMwMEM2NUQ0MSAvKiBNZWRpYUVuZHBv
aW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDVFQkI4OTJFMUM3Nzc3RDAwMEM2NUQ0MSAvKiBNZWRpYUVuZHBvaW50
U2Vzc2lvbkNvbmZpZ3VyYXRpb24uaCAqLzsgfTsKKwkJNUVCQjg5MzMxQzc3NzgyOTAwQzY1RDQx
IC8qIEljZUNhbmRpZGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNUVCQjg5MzAxQzc3NzdFMTAwQzY1RDQxIC8qIEljZUNhbmRpZGF0ZS5oICovOyB9
OworCQk1RUJCODkzNDFDNzc3ODI5MDBDNjVENDEgLyogTWVkaWFFbmRwb2ludC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RUJCODkyQTFDNzc3N0Qw
MDBDNjVENDEgLyogTWVkaWFFbmRwb2ludC5jcHAgKi87IH07CisJCTVFQkI4OTM1MUM3Nzc4Mjkw
MEM2NUQ0MSAvKiBNZWRpYUVuZHBvaW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1RUJCODkyQjFDNzc3N0QwMDBDNjVENDEgLyogTWVkaWFFbmRwb2lu
dC5oICovOyB9OworCQk1RUJCODkzNjFDNzc3ODI5MDBDNjVENDEgLyogTWVkaWFFbmRwb2ludENv
bmZpZ3VyYXRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNUVCQjg5MkMxQzc3NzdEMDAwQzY1RDQxIC8qIE1lZGlhRW5kcG9pbnRDb25maWd1cmF0
aW9uLmNwcCAqLzsgfTsKKwkJNUVCQjg5MzcxQzc3NzgyOTAwQzY1RDQxIC8qIE1lZGlhRW5kcG9p
bnRDb25maWd1cmF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1RUJCODkyRDFDNzc3N0QwMDBDNjVENDEgLyogTWVkaWFFbmRwb2ludENvbmZpZ3Vy
YXRpb24uaCAqLzsgfTsKKwkJNUVCQjg5MzkxQzc3QzM5OTAwQzY1RDQxIC8qIFBlZXJNZWRpYURl
c2NyaXB0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1RUJCODkzODFDNzdCREE0MDBDNjVENDEgLyogUGVlck1lZGlhRGVzY3JpcHRpb24uaCAqLzsg
fTsKIAkJNUYyREJCRTkxNzhFM0M4MTAwMTQxNDg2IC8qIENlcnRpZmljYXRlSW5mb01hYy5tbSBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVGMkRCQkU3MTc4
RTMzMkQwMDE0MTQ4NiAvKiBDZXJ0aWZpY2F0ZUluZm9NYWMubW0gKi87IH07CiAJCTVGQTkwNENB
MTc4RTYxRjUwMDRDOEEyRCAvKiBDZXJ0aWZpY2F0ZUluZm8uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVGMkRCQkU4MTc4RTMzNjkwMDE0MTQ4NiAvKiBD
ZXJ0aWZpY2F0ZUluZm8uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQk1RkM3REMyNkNGRTI1NjMyMDBCODVBRTQgLyogSlNFdmVudFRhcmdldC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUZDN0RDMjZDRkUy
NTYzMjAwQjg1QUU1IC8qIEpTRXZlbnRUYXJnZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTAwMDMsNiArMTAwMTEsMTQgQEAKIAkJNUVBNzI1
Q0QxQUNBQkNEOTAwRUFEMTdCIC8qIE1lZGlhRGV2aWNlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBNZWRpYURldmljZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1RUE3MjVDRTFBQ0FCQ0Q5MDBFQUQxN0IgLyogTWVkaWFEZXZpY2VzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhRGV2aWNlcy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1RUE3MjVDRjFBQ0FCQ0Q5MDBFQUQxN0IgLyogTWVkaWFEZXZp
Y2VzLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBNZWRpYURldmljZXMuaWRsOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk1RUJCODkyQTFDNzc3N0QwMDBDNjVENDEgLyogTWVkaWFF
bmRwb2ludC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNZWRpYUVu
ZHBvaW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUVCQjg5MkIxQzc3NzdE
MDAwQzY1RDQxIC8qIE1lZGlhRW5kcG9pbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gTWVkaWFFbmRwb2ludC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1RUJC
ODkyQzFDNzc3N0QwMDBDNjVENDEgLyogTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb24uY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWVkaWFFbmRwb2ludENvbmZpZ3Vy
YXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1RUJCODkyRDFDNzc3N0Qw
MDBDNjVENDEgLyogTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb24uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUVCQjg5MkUxQzc3NzdEMDAwQzY1RDQxIC8qIE1lZGlhRW5k
cG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24uaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNUVCQjg5MkYxQzc3NzdEMDAwQzY1RDQxIC8qIE1lZGlhUGF5bG9hZC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYVBheWxvYWQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUVCQjg5MzAxQzc3NzdFMTAwQzY1RDQxIC8qIEljZUNh
bmRpZGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJY2VDYW5kaWRhdGUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUVCQjg5MzgxQzc3QkRBNDAwQzY1RDQx
IC8qIFBlZXJNZWRpYURlc2NyaXB0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFBlZXJNZWRpYURlc2NyaXB0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTVGMkRCQkU3MTc4RTMzMkQwMDE0MTQ4NiAvKiBDZXJ0aWZpY2F0ZUluZm9NYWMubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBDZXJ0aWZpY2F0ZUluZm9NYWMubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVGMkRCQkU4MTc4RTMzNjkwMDE0MTQ4NiAv
KiBDZXJ0aWZpY2F0ZUluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2Vy
dGlmaWNhdGVJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVGQzdEQzI2Q0ZF
MjU2MzIwMEI4NUFFNSAvKiBKU0V2ZW50VGFyZ2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBKU0V2ZW50VGFyZ2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC0xNTQ1OCw3ICsxNTQ3NCwxNCBAQAogCQkJY2hpbGRyZW4gPSAoCiAJCQkJMDcyOUIxNEQxN0NG
Q0NBMDAwNEYxRDYwIC8qIG1hYyAqLywKIAkJCQkwN0Q2QTRGNjFCRjIzMDdEMDAxNzQxNDYgLyog
QXVkaW9UcmFja1ByaXZhdGVNZWRpYVN0cmVhbS5oICovLAorCQkJCTVFQkI4OTMwMUM3Nzc3RTEw
MEM2NUQ0MSAvKiBJY2VDYW5kaWRhdGUuaCAqLywKIAkJCQkwNzIyMUI5OTE3Q0YwQUQ0MDA4NDhF
NTEgLyogTWVkaWFDb25zdHJhaW50cy5oICovLAorCQkJCTVFQkI4OTJBMUM3Nzc3RDAwMEM2NUQ0
MSAvKiBNZWRpYUVuZHBvaW50LmNwcCAqLywKKwkJCQk1RUJCODkyQjFDNzc3N0QwMDBDNjVENDEg
LyogTWVkaWFFbmRwb2ludC5oICovLAorCQkJCTVFQkI4OTJDMUM3Nzc3RDAwMEM2NUQ0MSAvKiBN
ZWRpYUVuZHBvaW50Q29uZmlndXJhdGlvbi5jcHAgKi8sCisJCQkJNUVCQjg5MkQxQzc3NzdEMDAw
QzY1RDQxIC8qIE1lZGlhRW5kcG9pbnRDb25maWd1cmF0aW9uLmggKi8sCisJCQkJNUVCQjg5MkUx
Qzc3NzdEMDAwQzY1RDQxIC8qIE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbi5oICov
LAorCQkJCTVFQkI4OTJGMUM3Nzc3RDAwMEM2NUQ0MSAvKiBNZWRpYVBheWxvYWQuaCAqLywKIAkJ
CQkwNzBGNTQ5NzE3RjEyRjZCMDAxNjlFMDQgLyogTWVkaWFTdHJlYW1Db25zdHJhaW50c1ZhbGlk
YXRpb25DbGllbnQuaCAqLywKIAkJCQkwNzIyMUJBMDE3Q0YwQUQ0MDA4NDhFNTEgLyogTWVkaWFT
dHJlYW1DcmVhdGlvbkNsaWVudC5oICovLAogCQkJCTA3MTE1ODhGMTdERjYzMzcwMEVERkUyQiAv
KiBNZWRpYVN0cmVhbVByaXZhdGUuY3BwICovLApAQCAtMTU0NjYsNiArMTU0ODksNyBAQAogCQkJ
CTA3RkZERTY2MTgxQUVENDIwMDcyRDQwOSAvKiBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZS5jcHAg
Ki8sCiAJCQkJMDdGRkRFNjcxODFBRUQ0MjAwNzJENDA5IC8qIE1lZGlhU3RyZWFtVHJhY2tQcml2
YXRlLmggKi8sCiAJCQkJMDc2MzA2RTIxN0UyMkE0MzAwNUE3QzRFIC8qIE1lZGlhU3RyZWFtVHJh
Y2tTb3VyY2VzUmVxdWVzdENsaWVudC5oICovLAorCQkJCTVFQkI4OTM4MUM3N0JEQTQwMEM2NUQ0
MSAvKiBQZWVyTWVkaWFEZXNjcmlwdGlvbi5oICovLAogCQkJCTRBNEY2NTZCMUFBOTk3RjEwMEUz
OENERCAvKiBSZWFsdGltZU1lZGlhU291cmNlLmNwcCAqLywKIAkJCQk0QTRGNjU2QzFBQTk5N0Yx
MDBFMzhDREQgLyogUmVhbHRpbWVNZWRpYVNvdXJjZS5oICovLAogCQkJCTRBNEY2NTZEMUFBOTk3
RjEwMEUzOENERCAvKiBSZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzLmggKi8sCkBAIC0y
NTI0OCw2ICsyNTI3Miw3IEBACiAJCQkJQkM1RUI5NTEwRTgyMDU2QjAwQjI1OTY1IC8qIENvdW50
ZXJEaXJlY3RpdmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzkyRjE0QzBBRDE4NjFCMDA2OTFC
RDQgLyogQ291bnRlck5vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUQwQjA1NTY4MDlDNjcwMDEw
MDMwN0U0MyAvKiBDcmVhdGVMaW5rQ29tbWFuZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNUVCQjg5
MzIxQzc3NzgyMzAwQzY1RDQxIC8qIE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbi5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNTE0Qzc2NkUwQ0U5MjNBMTAwN0VGM0NEIC8qIENyZWRlbnRp
YWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTM3OTI5MTdBMTk4NUVGMzkwMEY0QjY2MSAvKiBDcmVk
ZW50aWFsQmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzc5MjkxN0UxOTg3Njc4RjAwRjRCNjYx
IC8qIENyZWRlbnRpYWxDb2NvYS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNjAyOSw2ICsyNjA1NCw3
IEBACiAJCQkJQ0Q2MkZCOTYxQUYwMThFNzAwMTJFRDdEIC8qIEdlbmVyaWNUYXNrUXVldWUuaCBp
biBIZWFkZXJzICovLAogCQkJCTk3NDZBRjI0MTRGNERERTYwMDNFN0E3MCAvKiBHZW9sb2NhdGlv
bi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTc0NkFGMjUxNEY0RERFNjAwM0U3QTcxIC8qIEdlb2xv
Y2F0aW9uQ2xpZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQk1RUJCODkzOTFDNzdDMzk5MDBDNjVE
NDEgLyogUGVlck1lZGlhRGVzY3JpcHRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTk3NDZBRjI3
MTRGNERERTYwMDNFN0E3MCAvKiBHZW9sb2NhdGlvbkNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCTk3NDZBRjI4MTRGNERERTYwMDNFN0E3MCAvKiBHZW9sb2NhdGlvbkVycm9yLmggaW4g
SGVhZGVycyAqLywKIAkJCQk5NzQ2QUYyOTE0RjREREU2MDAzRTdBNzAgLyogR2VvbG9jYXRpb25Q
b3NpdGlvbi5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNjI1Nyw2ICsyNjI4Myw3IEBACiAJCQkJNTE4
NUZDOTcxQkI0QzRFODAwMTI4OThGIC8qIElEQktleURhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTUxODVGQzk5MUJCNEM0RTgwMDEyODk4RiAvKiBJREJLZXlQYXRoLmggaW4gSGVhZGVycyAqLywK
IAkJCQk1MTg1RkM5QjFCQjRDNEU4MDAxMjg5OEYgLyogSURCS2V5UmFuZ2UuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTVFQkI4OTM1MUM3Nzc4MjkwMEM2NUQ0MSAvKiBNZWRpYUVuZHBvaW50LmggaW4g
SGVhZGVycyAqLywKIAkJCQk1MTg1RkM5RTFCQjRDNEU4MDAxMjg5OEYgLyogSURCS2V5UmFuZ2VE
YXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTg1RkNBMDFCQjRDNEU4MDAxMjg5OEYgLyogSURC
T2JqZWN0U3RvcmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxNjA3MTMxMUJEODMwODYwMERCQzRG
MiAvKiBJREJPYmplY3RTdG9yZUltcGwuaCBpbiBIZWFkZXJzICovLApAQCAtMjY5OTksNiArMjcw
MjYsNyBAQAogCQkJCTI5MTdCNTYzMTQ3MzQ5NkMwMDUyQzlEMCAvKiBMYXllckZsdXNoU2NoZWR1
bGVyQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDkxNkZGNzE5NURGNkEwMDA1QUIzNDkg
LyogTGF5ZXJGbHVzaFRocm90dGxlU3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTU4MDM3MTY0
MUE2NkYxRDMwMEJBRjUxOSAvKiBMYXllckZyYWdtZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQk1
RUJCODkzMzFDNzc3ODI5MDBDNjVENDEgLyogSWNlQ2FuZGlkYXRlLmggaW4gSGVhZGVycyAqLywK
IAkJCQk3QUEzQTZBMDE5NEI1OUI2MDAxQ0JEMjQgLyogTGF5ZXJQb29sLmggaW4gSGVhZGVycyAq
LywKIAkJCQk5MzFENzJGNjE1RkU2OTUzMDBDNEMwN0UgLyogTGF5b3V0TWlsZXN0b25lcy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMTQxREMwNTExNjQ4MzRCOTAwMzcxRTVBIC8qIExheW91dFBvaW50
LmggaW4gSGVhZGVycyAqLywKQEAgLTI4MDQ2LDYgKzI4MDc0LDcgQEAKIAkJCQlCMjM3QzhBODBE
MzQ0RDExMDAxM0Y3MDcgLyogU1ZHRm9udERhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyQTFG
MkFCMENFRjBBQkYwMDQ0MkY2QSAvKiBTVkdGb250RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQjIyMjdBMTUwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0ZvbnRGYWNlRWxlbWVudC5oIGluIEhl
YWRlcnMgKi8sCisJCQkJNUVCQjg5MzExQzc3NzdGRjAwQzY1RDQxIC8qIE1lZGlhUGF5bG9hZC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjdBMTgwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0ZvbnRG
YWNlRm9ybWF0RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjdBMUIwRDAwQkYyMjAw
NzFCNzgyIC8qIFNWR0ZvbnRGYWNlTmFtZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUIy
MjI3QTFFMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdGb250RmFjZVNyY0VsZW1lbnQuaCBpbiBIZWFk
ZXJzICovLApAQCAtMjgzNTYsNiArMjgzODUsNyBAQAogCQkJCTdDRTY4MzQ1MTkyMTQzQTgwMEY0
RDkyOCAvKiBVc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk3Q0U2ODM0NzE5MjE4MjE1MDBGNEQ5MjggLyogVXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRv
clR5cGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk3QzczRkIwODE5MUVGNDE3MDA3REUwNjEgLyog
VXNlck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFjZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNUVCQjg5
MzcxQzc3NzgyOTAwQzY1RDQxIC8qIE1lZGlhRW5kcG9pbnRDb25maWd1cmF0aW9uLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQ0EyQjA2MTEwNTA0NzYwMDA0M0JEMUMgLyogVXNlclNjcmlwdC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkNBMkIwOEIxMDUwNUJDRDAwNDNCRDFDIC8qIFVzZXJTY3JpcHRU
eXBlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM4QkYxNTExMDU4MTNCRjAwQTQwQTA3IC8qIFVz
ZXJTdHlsZVNoZWV0LmggaW4gSGVhZGVycyAqLywKQEAgLTMxMzY0LDYgKzMxMzk0LDcgQEAKIAkJ
CQkwRkI4ODkwRTE2N0QzMDE2MDAxMENEQTUgLyogU2Nyb2xsaW5nU3RhdGVTdGlja3lOb2RlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTkzMUNCRDEwMTYxQTQ0RTkwMEU0Qzg3NCAvKiBTY3JvbGxp
bmdTdGF0ZVRyZWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFGNjJGMjUxNERBRkU5RTAwNDE1
NTZDIC8qIFNjcm9sbGluZ1RocmVhZC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1RUJCODkzNjFD
Nzc3ODI5MDBDNjVENDEgLyogTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb24uY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMUFGNjJGMjQxNERBRkU5MTAwNDE1NTZDIC8qIFNjcm9sbGluZ1RocmVhZE1h
Yy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFBQUFEREEzMTREQjQwOUYwMEFGNjRCMyAvKiBTY3Jv
bGxpbmdUcmVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzQzM4QzA0MTY0NDczREQwMDA5MUVC
MiAvKiBTY3JvbGxpbmdUcmVlRml4ZWROb2RlLm1tIGluIFNvdXJjZXMgKi8sCkBAIC0zMTUzMyw2
ICszMTU2NCw3IEBACiAJCQkJN0UzN0VGMkUxMzM5MjA4ODAwQjI5MjUwIC8qIFN1YnJlc291cmNl
TG9hZGVyQ0YuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0U4RkFEQzQxOTlBOTVCMTAwNzE0OTY4
IC8qIFN1YnJlc291cmNlTG9hZGVyQ29jb2EubW0gaW4gU291cmNlcyAqLywKIAkJCQlFMUZGOEY1
RjE4MDc0NDIxMDAxMzI2NzQgLyogU3VidGxlQ3J5cHRvLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTVFQkI4OTM0MUM3Nzc4MjkwMEM2NUQ0MSAvKiBNZWRpYUVuZHBvaW50LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTkzQjJEODE4MEY5OTIwRUUwMDZBRTZCMiAvKiBTdWRkZW5UZXJtaW5hdGlvbi5t
bSBpbiBTb3VyY2VzICovLAogCQkJCTU3MkE3RjIzMUM2RTVBNjYwMDlDNjE0OSAvKiBTaW11bGF0
ZWRDbGljay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwODc1NThDNTEzQjRBNTdEMDBGNDkzMDcg
LyogU3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovLApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vSWNlQ2FuZGlkYXRl
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9JY2VDYW5kaWRhdGUuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YWMzNTVlCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vSWNlQ2FuZGlkYXRlLmgK
QEAgLTAsMCArMSwxMTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgRXJpY3Nzb24gQUIu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKyAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIg
dGhlIG5hbWUgb2YgRXJpY3Nzb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisg
KiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tIHRoaXMKKyAqICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJY2VDYW5kaWRhdGVfaAorI2RlZmluZSBJ
Y2VDYW5kaWRhdGVfaAorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKworI2luY2x1ZGUgPHd0
Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEljZUNhbmRp
ZGF0ZSA6IHB1YmxpYyBSZWZDb3VudGVkPEljZUNhbmRpZGF0ZT4geworcHVibGljOgorICAgIHN0
YXRpYyBSZWZQdHI8SWNlQ2FuZGlkYXRlPiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBJY2VDYW5kaWRhdGUoKSk7CisgICAgfQorICAgIHZpcnR1YWwgfkljZUNh
bmRpZGF0ZSgpIHsgfQorCisgICAgY29uc3QgU3RyaW5nJiB0eXBlKCkgY29uc3QgeyByZXR1cm4g
bV90eXBlOyB9CisgICAgdm9pZCBzZXRUeXBlKGNvbnN0IFN0cmluZyYgdHlwZSkgeyBtX3R5cGUg
PSB0eXBlOyB9CisKKyAgICBjb25zdCBTdHJpbmcmIGZvdW5kYXRpb24oKSBjb25zdCB7IHJldHVy
biBtX2ZvdW5kYXRpb247IH0KKyAgICB2b2lkIHNldEZvdW5kYXRpb24oY29uc3QgU3RyaW5nJiBm
b3VuZGF0aW9uKSB7IG1fZm91bmRhdGlvbiA9IGZvdW5kYXRpb247IH0KKworICAgIHVuc2lnbmVk
IGNvbXBvbmVudElkKCkgY29uc3QgeyByZXR1cm4gbV9jb21wb25lbnRJZDsgfQorICAgIHZvaWQg
c2V0Q29tcG9uZW50SWQodW5zaWduZWQgY29tcG9uZW50SWQpIHsgbV9jb21wb25lbnRJZCA9IGNv
bXBvbmVudElkOyB9CisKKyAgICBjb25zdCBTdHJpbmcmIHRyYW5zcG9ydCgpIGNvbnN0IHsgcmV0
dXJuIG1fdHJhbnNwb3J0OyB9CisgICAgdm9pZCBzZXRUcmFuc3BvcnQoY29uc3QgU3RyaW5nJiB0
cmFuc3BvcnQpIHsgbV90cmFuc3BvcnQgPSB0cmFuc3BvcnQ7IH0KKworICAgIGludCBwcmlvcml0
eSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJpb3JpdHk7IH0KKyAgICB2b2lkIHNldFByaW9yaXR5KGlu
dCBwcmlvcml0eSkgeyBtX3ByaW9yaXR5ID0gcHJpb3JpdHk7IH0KKworICAgIGNvbnN0IFN0cmlu
ZyYgYWRkcmVzcygpIGNvbnN0IHsgcmV0dXJuIG1fYWRkcmVzczsgfQorICAgIHZvaWQgc2V0QWRk
cmVzcyhjb25zdCBTdHJpbmcmIGFkZHJlc3MpIHsgbV9hZGRyZXNzID0gYWRkcmVzczsgfQorCisg
ICAgdW5zaWduZWQgcG9ydCgpIGNvbnN0IHsgcmV0dXJuIG1fcG9ydDsgfQorICAgIHZvaWQgc2V0
UG9ydCh1bnNpZ25lZCBwb3J0KSB7IG1fcG9ydCA9IHBvcnQ7IH0KKworICAgIGNvbnN0IFN0cmlu
ZyYgdGNwVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGNwVHlwZTsgfQorICAgIHZvaWQgc2V0VGNw
VHlwZShjb25zdCBTdHJpbmcmIHRjcFR5cGUpIHsgbV90Y3BUeXBlID0gdGNwVHlwZTsgfQorCisg
ICAgY29uc3QgU3RyaW5nJiByZWxhdGVkQWRkcmVzcygpIGNvbnN0IHsgcmV0dXJuIG1fcmVsYXRl
ZEFkZHJlc3M7IH0KKyAgICB2b2lkIHNldFJlbGF0ZWRBZGRyZXNzKGNvbnN0IFN0cmluZyYgcmVs
YXRlZEFkZHJlc3MpIHsgbV9yZWxhdGVkQWRkcmVzcyA9IHJlbGF0ZWRBZGRyZXNzOyB9CisKKyAg
ICB1bnNpZ25lZCByZWxhdGVkUG9ydCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVsYXRlZFBvcnQ7IH0K
KyAgICB2b2lkIHNldFJlbGF0ZWRQb3J0KHVuc2lnbmVkIHJlbGF0ZWRQb3J0KSB7IG1fcmVsYXRl
ZFBvcnQgPSByZWxhdGVkUG9ydDsgfQorCisgICAgUmVmUHRyPEljZUNhbmRpZGF0ZT4gY2xvbmUo
KSBjb25zdAorICAgIHsKKyAgICAgICAgUmVmUHRyPEljZUNhbmRpZGF0ZT4gY29weSA9IGNyZWF0
ZSgpOworCisgICAgICAgIGNvcHktPm1fdHlwZSA9IFN0cmluZyhtX3R5cGUpOworICAgICAgICBj
b3B5LT5tX2ZvdW5kYXRpb24gPSBTdHJpbmcobV9mb3VuZGF0aW9uKTsKKyAgICAgICAgY29weS0+
bV9jb21wb25lbnRJZCA9IG1fY29tcG9uZW50SWQ7CisgICAgICAgIGNvcHktPm1fdHJhbnNwb3J0
ID0gU3RyaW5nKG1fdHJhbnNwb3J0KTsKKyAgICAgICAgY29weS0+bV9wcmlvcml0eSA9IG1fcHJp
b3JpdHk7CisgICAgICAgIGNvcHktPm1fYWRkcmVzcyA9IFN0cmluZyhtX2FkZHJlc3MpOworICAg
ICAgICBjb3B5LT5tX3BvcnQgPSBtX3BvcnQ7CisgICAgICAgIGNvcHktPm1fdGNwVHlwZSA9IFN0
cmluZyhtX3RjcFR5cGUpOworICAgICAgICBjb3B5LT5tX3JlbGF0ZWRBZGRyZXNzID0gU3RyaW5n
KG1fcmVsYXRlZEFkZHJlc3MpOworICAgICAgICBjb3B5LT5tX3JlbGF0ZWRQb3J0ID0gbV9yZWxh
dGVkUG9ydDsKKworICAgICAgICByZXR1cm4gY29weTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAg
SWNlQ2FuZGlkYXRlKCkgeyB9CisKKyAgICBTdHJpbmcgbV90eXBlOworICAgIFN0cmluZyBtX2Zv
dW5kYXRpb247CisgICAgdW5zaWduZWQgbV9jb21wb25lbnRJZCB7IDAgfTsKKyAgICBTdHJpbmcg
bV90cmFuc3BvcnQ7CisgICAgaW50IG1fcHJpb3JpdHkgeyAwIH07CisgICAgU3RyaW5nIG1fYWRk
cmVzczsKKyAgICB1bnNpZ25lZCBtX3BvcnQgeyAwIH07CisgICAgU3RyaW5nIG1fdGNwVHlwZTsK
KyAgICBTdHJpbmcgbV9yZWxhdGVkQWRkcmVzczsKKyAgICB1bnNpZ25lZCBtX3JlbGF0ZWRQb3J0
IHsgMCB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxF
KE1FRElBX1NUUkVBTSkKKworI2VuZGlmIC8vIEljZUNhbmRpZGF0ZV9oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhRW5kcG9pbnQuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxZmI2YzcKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50LmNwcApA
QCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEVyaWNzc29uIEFCLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisgKiAgICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEVyaWNzc29uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICog
ICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bSB0aGlzCisgKiAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShN
RURJQV9TVFJFQU0pCisjaW5jbHVkZSAiTWVkaWFFbmRwb2ludC5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK3N0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFFbmRwb2ludD4gY3JlYXRlTWVk
aWFFbmRwb2ludChNZWRpYUVuZHBvaW50Q2xpZW50KikKK3sKKyAgICByZXR1cm4gbnVsbHB0cjsK
K30KKworQ3JlYXRlTWVkaWFFbmRwb2ludCBNZWRpYUVuZHBvaW50OjpjcmVhdGUgPSBjcmVhdGVN
ZWRpYUVuZHBvaW50OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFC
TEUoTUVESUFfU1RSRUFNKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vTWVkaWFFbmRwb2ludC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vTWVkaWFFbmRwb2ludC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjU3MDY4OGQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9NZWRpYUVuZHBvaW50LmgKQEAgLTAsMCArMSw5MCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBFcmljc3NvbiBBQi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogICAgaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJp
YnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBFcmljc3NvbiBub3IgdGhlIG5hbWVz
IG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICAgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIE1l
ZGlhRW5kcG9pbnRfaAorI2RlZmluZSBNZWRpYUVuZHBvaW50X2gKKworI2lmIEVOQUJMRShNRURJ
QV9TVFJFQU0pCisKKyNpbmNsdWRlICJNZWRpYUVuZHBvaW50Q29uZmlndXJhdGlvbi5oIgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIEljZUNhbmRpZGF0ZTsKK2NsYXNzIE1lZGlhRW5kcG9pbnQ7CitjbGFzcyBNZWRpYUVuZHBv
aW50U2Vzc2lvbkNvbmZpZ3VyYXRpb247CitjbGFzcyBNZWRpYVBheWxvYWQ7CitjbGFzcyBSZWFs
dGltZU1lZGlhU291cmNlOworCitjbGFzcyBNZWRpYUVuZHBvaW50Q2xpZW50IHsKK3B1YmxpYzoK
KyAgICB2aXJ0dWFsIHZvaWQgZ290RHRsc0ZpbmdlcnByaW50KGNvbnN0IFN0cmluZyYgZmluZ2Vy
cHJpbnQsIGNvbnN0IFN0cmluZyYgZmluZ2VycHJpbnRGdW5jdGlvbikgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBnb3RJY2VDYW5kaWRhdGUodW5zaWduZWQgbWRlc2NJbmRleCwgUmVmUHRyPEljZUNh
bmRpZGF0ZT4mJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkb25lR2F0aGVyaW5nQ2FuZGlkYXRl
cyh1bnNpZ25lZCBtZGVzY0luZGV4KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGdvdFJlbW90ZVNv
dXJjZSh1bnNpZ25lZCBtZGVzY0luZGV4LCBSZWZQdHI8UmVhbHRpbWVNZWRpYVNvdXJjZT4mJikg
PSAwOworCisgICAgdmlydHVhbCB+TWVkaWFFbmRwb2ludENsaWVudCgpIHsgfQorfTsKKwordHlw
ZWRlZiBzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFFbmRwb2ludD4gKCpDcmVhdGVNZWRpYUVuZHBvaW50
KShNZWRpYUVuZHBvaW50Q2xpZW50Kik7CisKK2NsYXNzIE1lZGlhRW5kcG9pbnQgeworcHVibGlj
OgorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBDcmVhdGVNZWRpYUVuZHBvaW50IGNyZWF0ZTsK
KyAgICB2aXJ0dWFsIH5NZWRpYUVuZHBvaW50KCkgeyB9CisKKyAgICBlbnVtIGNsYXNzIFVwZGF0
ZVJlc3VsdCB7CisgICAgICAgIFN1Y2Nlc3MsCisgICAgICAgIFN1Y2Nlc3NXaXRoSWNlUmVzdGFy
dCwKKyAgICAgICAgRmFpbGVkCisgICAgfTsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRDb25maWd1
cmF0aW9uKFJlZlB0cjxNZWRpYUVuZHBvaW50Q29uZmlndXJhdGlvbj4mJikgPSAwOworCisgICAg
dmlydHVhbCB2b2lkIGdlbmVyYXRlRHRsc0luZm8oKSA9IDA7CisgICAgdmlydHVhbCBWZWN0b3I8
UmVmUHRyPE1lZGlhUGF5bG9hZD4+IGdldERlZmF1bHRBdWRpb1BheWxvYWRzKCkgPSAwOworICAg
IHZpcnR1YWwgVmVjdG9yPFJlZlB0cjxNZWRpYVBheWxvYWQ+PiBnZXREZWZhdWx0VmlkZW9QYXls
b2FkcygpID0gMDsKKworICAgIHZpcnR1YWwgVXBkYXRlUmVzdWx0IHVwZGF0ZVJlY2VpdmVDb25m
aWd1cmF0aW9uKE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbiosIGJvb2wgaXNJbml0
aWF0b3IpID0gMDsKKyAgICB2aXJ0dWFsIFVwZGF0ZVJlc3VsdCB1cGRhdGVTZW5kQ29uZmlndXJh
dGlvbihNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24qLCBib29sIGlzSW5pdGlhdG9y
KSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgYWRkUmVtb3RlQ2FuZGlkYXRlKEljZUNhbmRpZGF0
ZSYsIHVuc2lnbmVkIG1kZXNjSW5kZXgsIGNvbnN0IFN0cmluZyYgdWZyYWcsIGNvbnN0IFN0cmlu
ZyYgcGFzc3dvcmQpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCByZXBsYWNlU2VuZFNvdXJjZShS
ZWFsdGltZU1lZGlhU291cmNlJiwgdW5zaWduZWQgbWRlc2NJbmRleCkgPSAwOworCisgICAgdmly
dHVhbCB2b2lkIHN0b3AoKSA9IDA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQorCisjZW5kaWYgLy8gTWVkaWFFbmRwb2ludF9o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYUVu
ZHBvaW50Q29uZmlndXJhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9NZWRpYUVuZHBvaW50Q29uZmlndXJhdGlvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uYTI2YWNiMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhRW5kcG9pbnRDb25maWd1cmF0aW9uLmNwcApAQCAt
MCwwICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEVyaWNzc29uIEFCLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCisgKiAgICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEVyaWNzc29uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0
aGlzCisgKiAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisg
KiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJNZWRpYUVu
ZHBvaW50Q29uZmlndXJhdGlvbi5oIgorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitJY2VTZXJ2ZXJJbmZvOjpJY2VTZXJ2ZXJJbmZvKGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiB1cmxzLCBjb25zdCBTdHJpbmcmIGNyZWRlbnRpYWwsIGNvbnN0IFN0cmlu
ZyYgdXNlcm5hbWUpCisgICAgOiBtX2NyZWRlbnRpYWwoY3JlZGVudGlhbCkKKyAgICAsIG1fdXNl
cm5hbWUodXNlcm5hbWUpCit7CisgICAgbV91cmxzLnJlc2VydmVDYXBhY2l0eSh1cmxzLnNpemUo
KSk7CisgICAgZm9yIChhdXRvJiB1cmwgOiB1cmxzKQorICAgICAgICBtX3VybHMuYXBwZW5kKFVS
TChVUkwoKSwgdXJsKSk7Cit9CisKK01lZGlhRW5kcG9pbnRDb25maWd1cmF0aW9uOjpNZWRpYUVu
ZHBvaW50Q29uZmlndXJhdGlvbihWZWN0b3I8UmVmUHRyPEljZVNlcnZlckluZm8+PiYgaWNlU2Vy
dmVycywgY29uc3QgU3RyaW5nJiBpY2VUcmFuc3BvcnRQb2xpY3ksIGNvbnN0IFN0cmluZyYgYnVu
ZGxlUG9saWN5KQorICAgIDogbV9pY2VTZXJ2ZXJzKGljZVNlcnZlcnMpCit7CisgICAgaWYgKGlj
ZVRyYW5zcG9ydFBvbGljeSA9PSAibm9uZSIpCisgICAgICAgIG1faWNlVHJhbnNwb3J0UG9saWN5
ID0gSWNlVHJhbnNwb3J0UG9saWN5OjpOb25lOworICAgIGVsc2UgaWYgKGljZVRyYW5zcG9ydFBv
bGljeSA9PSAicmVsYXkiKQorICAgICAgICBtX2ljZVRyYW5zcG9ydFBvbGljeSA9IEljZVRyYW5z
cG9ydFBvbGljeTo6UmVsYXk7CisgICAgZWxzZSBpZiAoaWNlVHJhbnNwb3J0UG9saWN5ID09ICJh
bGwiKQorICAgICAgICBtX2ljZVRyYW5zcG9ydFBvbGljeSA9IEljZVRyYW5zcG9ydFBvbGljeTo6
QWxsOworICAgIGVsc2UKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICBpZiAo
YnVuZGxlUG9saWN5ID09ICJiYWxhbmNlZCIpCisgICAgICAgIG1fYnVuZGxlUG9saWN5ID0gQnVu
ZGxlUG9saWN5OjpCYWxhbmNlZDsKKyAgICBlbHNlIGlmIChidW5kbGVQb2xpY3kgPT0gIm1heC1j
b21wYXQiKQorICAgICAgICBtX2J1bmRsZVBvbGljeSA9IEJ1bmRsZVBvbGljeTo6TWF4Q29tcGF0
OworICAgIGVsc2UgaWYgKGJ1bmRsZVBvbGljeSA9PSAibWF4LWJ1bmRsZSIpCisgICAgICAgIG1f
YnVuZGxlUG9saWN5ID0gQnVuZGxlUG9saWN5OjpNYXhCdW5kbGU7CisgICAgZWxzZQorICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhRW5kcG9pbnRDb25maWd1cmF0aW9uLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50Q29uZmlndXJhdGlv
bi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlMDMyYjQKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYUVuZHBv
aW50Q29uZmlndXJhdGlvbi5oCkBAIC0wLDAgKzEsOTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgRXJpY3Nzb24gQUIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlv
bi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgRXJpY3Nzb24gbm9yIHRoZSBuYW1lcyBvZiBp
dHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBNZWRpYUVu
ZHBvaW50Q29uZmlndXJhdGlvbl9oCisjZGVmaW5lIE1lZGlhRW5kcG9pbnRDb25maWd1cmF0aW9u
X2gKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCisKKyNpbmNsdWRlICJVUkwuaCIKKyNpbmNs
dWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSWNlU2VydmVySW5mbyA6IHB1YmxpYyBSZWZDb3VudGVk
PEljZVNlcnZlckluZm8+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmUHRyPEljZVNlcnZlcklu
Zm8+IGNyZWF0ZShjb25zdCBWZWN0b3I8U3RyaW5nPiYgdXJscywgY29uc3QgU3RyaW5nJiBjcmVk
ZW50aWFsLCBjb25zdCBTdHJpbmcmIHVzZXJuYW1lKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBJY2VTZXJ2ZXJJbmZvKHVybHMsIGNyZWRlbnRpYWwsIHVzZXJuYW1lKSk7Cisg
ICAgfQorICAgIHZpcnR1YWwgfkljZVNlcnZlckluZm8oKSB7IH0KKworICAgIGNvbnN0IFZlY3Rv
cjxVUkw+JiB1cmxzKCkgY29uc3QgeyByZXR1cm4gbV91cmxzOyB9CisgICAgY29uc3QgU3RyaW5n
JiBjcmVkZW50aWFsKCkgY29uc3QgeyByZXR1cm4gbV9jcmVkZW50aWFsOyB9CisgICAgY29uc3Qg
U3RyaW5nJiB1c2VybmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fdXNlcm5hbWU7IH0KKworcHJpdmF0
ZToKKyAgICBJY2VTZXJ2ZXJJbmZvKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiB1cmxzLCBjb25zdCBT
dHJpbmcmIGNyZWRlbnRpYWwsIGNvbnN0IFN0cmluZyYgdXNlcm5hbWUpOworCisgICAgVmVjdG9y
PFVSTD4gbV91cmxzOworICAgIFN0cmluZyBtX2NyZWRlbnRpYWw7CisgICAgU3RyaW5nIG1fdXNl
cm5hbWU7Cit9OworCitjbGFzcyBNZWRpYUVuZHBvaW50Q29uZmlndXJhdGlvbiA6IHB1YmxpYyBS
ZWZDb3VudGVkPE1lZGlhRW5kcG9pbnRDb25maWd1cmF0aW9uPiB7CitwdWJsaWM6CisgICAgc3Rh
dGljIFJlZlB0cjxNZWRpYUVuZHBvaW50Q29uZmlndXJhdGlvbj4gY3JlYXRlKFZlY3RvcjxSZWZQ
dHI8SWNlU2VydmVySW5mbz4+JiBpY2VTZXJ2ZXJzLCBjb25zdCBTdHJpbmcmIGljZVRyYW5zcG9y
dFBvbGljeSwgY29uc3QgU3RyaW5nJiBidW5kbGVQb2xpY3kpCisgICAgeworICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IE1lZGlhRW5kcG9pbnRDb25maWd1cmF0aW9uKGljZVNlcnZlcnMsIGlj
ZVRyYW5zcG9ydFBvbGljeSwgYnVuZGxlUG9saWN5KSk7CisgICAgfQorCisgICAgZW51bSBjbGFz
cyBJY2VUcmFuc3BvcnRQb2xpY3kgeworICAgICAgICBOb25lLAorICAgICAgICBSZWxheSwKKyAg
ICAgICAgQWxsCisgICAgfTsKKworICAgIGVudW0gY2xhc3MgQnVuZGxlUG9saWN5IHsKKyAgICAg
ICAgQmFsYW5jZWQsCisgICAgICAgIE1heENvbXBhdCwKKyAgICAgICAgTWF4QnVuZGxlCisgICAg
fTsKKworICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8SWNlU2VydmVySW5mbz4+JiBpY2VTZXJ2ZXJz
KCkgY29uc3QgeyByZXR1cm4gbV9pY2VTZXJ2ZXJzOyB9CisgICAgSWNlVHJhbnNwb3J0UG9saWN5
IGljZVRyYW5zcG9ydFBvbGljeSgpIGNvbnN0IHsgcmV0dXJuIG1faWNlVHJhbnNwb3J0UG9saWN5
OyB9CisgICAgQnVuZGxlUG9saWN5IGJ1bmRsZVBvbGljeSgpIGNvbnN0IHsgcmV0dXJuIG1fYnVu
ZGxlUG9saWN5OyB9CisKK3ByaXZhdGU6CisgICAgTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb24o
VmVjdG9yPFJlZlB0cjxJY2VTZXJ2ZXJJbmZvPj4mLCBjb25zdCBTdHJpbmcmIGljZVRyYW5zcG9y
dFBvbGljeSwgY29uc3QgU3RyaW5nJiBidW5kbGVQb2xpY3kpOworCisgICAgVmVjdG9yPFJlZlB0
cjxJY2VTZXJ2ZXJJbmZvPj4gbV9pY2VTZXJ2ZXJzOworICAgIEljZVRyYW5zcG9ydFBvbGljeSBt
X2ljZVRyYW5zcG9ydFBvbGljeTsKKyAgICBCdW5kbGVQb2xpY3kgbV9idW5kbGVQb2xpY3k7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RS
RUFNKQorCisjZW5kaWYgLy8gTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb25faApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFFbmRwb2ludFNlc3Np
b25Db25maWd1cmF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9N
ZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi5jZDc5MTEwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uLmgK
QEAgLTAsMCArMSw4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBFcmljc3NvbiBBQi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgorICogICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0
aGUgbmFtZSBvZiBFcmljc3NvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAq
ICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20gdGhpcworICogICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmln
dXJhdGlvbl9oCisjZGVmaW5lIE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbl9oCisK
KyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorCisjaW5jbHVkZSAiUGVlck1lZGlhRGVzY3JpcHRp
b24uaCIKKyNpbmNsdWRlIDx3dGYvQ3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1iZXIuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3Vy
YXRpb24gOiBwdWJsaWMgUmVmQ291bnRlZDxNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRp
b24+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmUHRyPE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29u
ZmlndXJhdGlvbj4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
TWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uKCkpOworICAgIH0KKyAgICB2aXJ0dWFs
IH5NZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24oKSB7IH0KKworICAgIHVpbnQ2NF90
IHNlc3Npb25JZCgpIGNvbnN0IHsgcmV0dXJuIG1fc2Vzc2lvbklkOyB9CisgICAgdm9pZCBzZXRT
ZXNzaW9uSWQodWludDY0X3Qgc2Vzc2lvbklkKSB7IG1fc2Vzc2lvbklkID0gc2Vzc2lvbklkOyB9
CisKKyAgICB1bnNpZ25lZCBzZXNzaW9uVmVyc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fc2Vzc2lv
blZlcnNpb247IH0KKyAgICB2b2lkIHNldFNlc3Npb25WZXJzaW9uKHVuc2lnbmVkIHNlc3Npb25W
ZXJzaW9uKSB7IG1fc2Vzc2lvblZlcnNpb24gPSBzZXNzaW9uVmVyc2lvbjsgfQorCisgICAgY29u
c3QgVmVjdG9yPFJlZlB0cjxQZWVyTWVkaWFEZXNjcmlwdGlvbj4+JiBtZWRpYURlc2NyaXB0aW9u
cygpIGNvbnN0IHsgcmV0dXJuIG1fbWVkaWFEZXNjcmlwdGlvbnM7IH0KKyAgICB2b2lkIGFkZE1l
ZGlhRGVzY3JpcHRpb24oUmVmUHRyPFBlZXJNZWRpYURlc2NyaXB0aW9uPiYmIGRlc2NyaXB0aW9u
KSB7IG1fbWVkaWFEZXNjcmlwdGlvbnMuYXBwZW5kKFdURk1vdmUoZGVzY3JpcHRpb24pKTsgfQor
CisgICAgUmVmUHRyPE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbj4gY2xvbmUoKSBj
b25zdAorICAgIHsKKyAgICAgICAgUmVmUHRyPE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJh
dGlvbj4gY29weSA9IGNyZWF0ZSgpOworICAgICAgICBjb3B5LT5tX3Nlc3Npb25JZCA9IG1fc2Vz
c2lvbklkOworICAgICAgICBjb3B5LT5tX3Nlc3Npb25WZXJzaW9uID0gbV9zZXNzaW9uVmVyc2lv
bjsKKworICAgICAgICBmb3IgKGF1dG8mIG1kZXNjIDogbV9tZWRpYURlc2NyaXB0aW9ucykKKyAg
ICAgICAgICAgIGNvcHktPm1fbWVkaWFEZXNjcmlwdGlvbnMuYXBwZW5kKG1kZXNjLT5jbG9uZSgp
KTsKKworICAgICAgICByZXR1cm4gY29weTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgTWVkaWFF
bmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uKCkKKyAgICB7CisgICAgICAgIG1fc2Vzc2lvbklk
ID0gY3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1iZXIoKTsKKyAgICAgICAgbV9zZXNzaW9uSWQg
PSBtX3Nlc3Npb25JZCA8PCAzMiB8IGNyeXB0b2dyYXBoaWNhbGx5UmFuZG9tTnVtYmVyKCk7Cisg
ICAgfQorCisgICAgdWludDY0X3QgbV9zZXNzaW9uSWQ7CisgICAgdW5zaWduZWQgbV9zZXNzaW9u
VmVyc2lvbiB7IDAgfTsKKworICAgIFZlY3RvcjxSZWZQdHI8UGVlck1lZGlhRGVzY3JpcHRpb24+
PiBtX21lZGlhRGVzY3JpcHRpb25zOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkKKworI2VuZGlmIC8vIE1lZGlhRW5kcG9pbnRT
ZXNzaW9uQ29uZmlndXJhdGlvbl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9NZWRpYVBheWxvYWQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL01lZGlhUGF5bG9hZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLmRiM2Y4YmYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9NZWRpYVBheWxvYWQuaApAQCAtMCwwICsxLDExNyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBFcmljc3NvbiBBQi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogICAgaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlz
dHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBFcmljc3NvbiBub3IgdGhlIG5h
bWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICAgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwor
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
IE1lZGlhUGF5bG9hZF9oCisjZGVmaW5lIE1lZGlhUGF5bG9hZF9oCisKKyNpZiBFTkFCTEUoTUVE
SUFfU1RSRUFNKQorCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvUmVm
Q291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9T
dHJpbmdIYXNoLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgTWVkaWFQYXlsb2Fk
IDogcHVibGljIFJlZkNvdW50ZWQ8TWVkaWFQYXlsb2FkPiB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFJlZlB0cjxNZWRpYVBheWxvYWQ+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IE1lZGlhUGF5bG9hZCgpKTsKKyAgICB9CisgICAgdmlydHVhbCB+TWVkaWFQYXls
b2FkKCkgeyB9CisKKyAgICB1bnNpZ25lZCB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9
CisgICAgdm9pZCBzZXRUeXBlKHVuc2lnbmVkIHR5cGUpIHsgbV90eXBlID0gdHlwZTsgfQorCisg
ICAgY29uc3QgU3RyaW5nJiBlbmNvZGluZ05hbWUoKSBjb25zdCB7IHJldHVybiBtX2VuY29kaW5n
TmFtZTsgfQorICAgIHZvaWQgc2V0RW5jb2RpbmdOYW1lKGNvbnN0IFN0cmluZyAmIGVuY29kaW5n
TmFtZSkgeyBtX2VuY29kaW5nTmFtZSA9IGVuY29kaW5nTmFtZTsgfQorCisgICAgdW5zaWduZWQg
Y2xvY2tSYXRlKCkgY29uc3QgeyByZXR1cm4gbV9jbG9ja1JhdGU7IH0KKyAgICB2b2lkIHNldENs
b2NrUmF0ZSh1bnNpZ25lZCBjbG9ja1JhdGUpIHsgbV9jbG9ja1JhdGUgPSBjbG9ja1JhdGU7IH0K
KworICAgIHVuc2lnbmVkIGNoYW5uZWxzKCkgY29uc3QgeyByZXR1cm4gbV9jaGFubmVsczsgfQor
ICAgIHZvaWQgc2V0Q2hhbm5lbHModW5zaWduZWQgY2hhbm5lbHMpIHsgbV9jaGFubmVscyA9IGNo
YW5uZWxzOyB9CisKKyAgICBib29sIGNjbWZpcigpIGNvbnN0IHsgcmV0dXJuIG1fY2NtZmlyOyB9
CisgICAgdm9pZCBzZXRDY21maXIoYm9vbCBjY21maXIpIHsgbV9jY21maXIgPSBjY21maXI7IH0K
KworICAgIGJvb2wgbmFja3BsaSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFja3BsaTsgfQorICAgIHZv
aWQgc2V0TmFja3BsaShib29sIG5hY2twbGkpIHsgbV9uYWNrcGxpID0gbmFja3BsaTsgfQorCisg
ICAgYm9vbCBuYWNrKCkgY29uc3QgeyByZXR1cm4gbV9uYWNrOyB9CisgICAgdm9pZCBzZXROYWNr
KGJvb2wgbmFjaykgeyBtX25hY2sgPSBuYWNrOyB9CisKKyAgICBjb25zdCBIYXNoTWFwPFN0cmlu
ZywgdW5zaWduZWQ+JiBwYXJhbWV0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9wYXJhbWV0ZXJzOyB9
CisgICAgdm9pZCBhZGRQYXJhbWV0ZXIoY29uc3QgU3RyaW5nJiBuYW1lLCB1bnNpZ25lZCB2YWx1
ZSkgeyBtX3BhcmFtZXRlcnMuc2V0KG5hbWUsIHZhbHVlKTsgfQorCisgICAgUmVmUHRyPE1lZGlh
UGF5bG9hZD4gY2xvbmUoKSBjb25zdAorICAgIHsKKyAgICAgICAgUmVmUHRyPE1lZGlhUGF5bG9h
ZD4gY29weSA9IGNyZWF0ZSgpOworCisgICAgICAgIGNvcHktPm1fdHlwZSA9IG1fdHlwZTsKKyAg
ICAgICAgY29weS0+bV9lbmNvZGluZ05hbWUgPSBTdHJpbmcobV9lbmNvZGluZ05hbWUpOworICAg
ICAgICBjb3B5LT5tX2Nsb2NrUmF0ZSA9IG1fY2xvY2tSYXRlOworCisgICAgICAgIGNvcHktPm1f
Y2hhbm5lbHMgPSBtX2NoYW5uZWxzOworCisgICAgICAgIGNvcHktPm1fY2NtZmlyID0gbV9jY21m
aXI7CisgICAgICAgIGNvcHktPm1fbmFja3BsaSA9IG1fbmFja3BsaTsKKyAgICAgICAgY29weS0+
bV9uYWNrID0gbV9uYWNrOworCisgICAgICAgIGZvciAoYXV0byYga2V5IDogbV9wYXJhbWV0ZXJz
LmtleXMoKSkKKyAgICAgICAgICAgIGNvcHktPm1fcGFyYW1ldGVycy5hZGQoa2V5LCBtX3BhcmFt
ZXRlcnMuZ2V0KGtleSkpOworCisgICAgICAgIHJldHVybiBjb3B5OworICAgIH0KKworcHJpdmF0
ZToKKyAgICBNZWRpYVBheWxvYWQoKSB7IH0KKworICAgIHVuc2lnbmVkIG1fdHlwZSB7IDAgfTsK
KyAgICBTdHJpbmcgbV9lbmNvZGluZ05hbWU7CisgICAgdW5zaWduZWQgbV9jbG9ja1JhdGUgeyAw
IH07CisKKyAgICAvLyBhdWRpbworICAgIHVuc2lnbmVkIG1fY2hhbm5lbHMgeyAwIH07CisKKyAg
ICAvLyB2aWRlbworICAgIGJvb2wgbV9jY21maXIgeyBmYWxzZSB9OworICAgIGJvb2wgbV9uYWNr
cGxpIHsgZmFsc2UgfTsKKyAgICBib29sIG1fbmFjayB7IGZhbHNlIH07CisKKyAgICBIYXNoTWFw
PFN0cmluZywgdW5zaWduZWQ+IG1fcGFyYW1ldGVyczsKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCisKKyNlbmRpZiAvLyBNZWRp
YVBheWxvYWRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vUGVlck1lZGlhRGVzY3JpcHRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL1BlZXJNZWRpYURlc2NyaXB0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uYWM2YzZkNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL1BlZXJNZWRpYURlc2NyaXB0aW9uLmgKQEAgLTAsMCArMSwxODQgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgRXJpY3Nzb24gQUIuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqICAgIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgRXJpY3Nz
b24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBQZWVyTWVkaWFEZXNjcmlwdGlvbl9oCisjZGVmaW5lIFBlZXJNZWRpYURl
c2NyaXB0aW9uX2gKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCisKKyNpbmNsdWRlICJJY2VD
YW5kaWRhdGUuaCIKKyNpbmNsdWRlICJNZWRpYVBheWxvYWQuaCIKKyNpbmNsdWRlICJSZWFsdGlt
ZU1lZGlhU291cmNlLmgiCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUGVlck1lZGlhRGVz
Y3JpcHRpb24gOiBwdWJsaWMgUmVmQ291bnRlZDxQZWVyTWVkaWFEZXNjcmlwdGlvbj4geworcHVi
bGljOgorICAgIHN0YXRpYyBSZWZQdHI8UGVlck1lZGlhRGVzY3JpcHRpb24+IGNyZWF0ZSgpCisg
ICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFBlZXJNZWRpYURlc2NyaXB0aW9uKCkp
OworICAgIH0KKyAgICB2aXJ0dWFsIH5QZWVyTWVkaWFEZXNjcmlwdGlvbigpIHsgfQorCisgICAg
Y29uc3QgU3RyaW5nJiB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CisgICAgdm9pZCBz
ZXRUeXBlKGNvbnN0IFN0cmluZyYgdHlwZSkgeyBtX3R5cGUgPSB0eXBlOyB9CisKKyAgICB1bnNp
Z25lZCBzaG9ydCBwb3J0KCkgY29uc3QgeyByZXR1cm4gbV9wb3J0OyB9CisgICAgdm9pZCBzZXRQ
b3J0KHVuc2lnbmVkIHNob3J0IHBvcnQpIHsgbV9wb3J0ID0gcG9ydDsgfQorCisgICAgY29uc3Qg
U3RyaW5nJiBhZGRyZXNzKCkgY29uc3QgeyByZXR1cm4gbV9hZGRyZXNzOyB9CisgICAgdm9pZCBz
ZXRBZGRyZXNzKGNvbnN0IFN0cmluZyYgYWRkcmVzcykgeyBtX2FkZHJlc3MgPSBhZGRyZXNzOyB9
CisKKyAgICBjb25zdCBTdHJpbmcmIG1vZGUoKSBjb25zdCB7IHJldHVybiBtX21vZGU7IH0KKyAg
ICB2b2lkIHNldE1vZGUoY29uc3QgU3RyaW5nJiBtb2RlKSB7IG1fbW9kZSA9IG1vZGU7IH0KKwor
ICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8TWVkaWFQYXlsb2FkPj4mIHBheWxvYWRzKCkgY29uc3Qg
eyByZXR1cm4gbV9wYXlsb2FkczsgfQorICAgIHZvaWQgYWRkUGF5bG9hZChSZWZQdHI8TWVkaWFQ
YXlsb2FkPiYmIHBheWxvYWQpIHsgbV9wYXlsb2Fkcy5hcHBlbmQoV1RGTW92ZShwYXlsb2FkKSk7
IH0KKyAgICB2b2lkIHNldFBheWxvYWRzKFZlY3RvcjxSZWZQdHI8TWVkaWFQYXlsb2FkPj4mJiBw
YXlsb2FkcykgeyBtX3BheWxvYWRzID0gcGF5bG9hZHM7IH0KKyAgICB2b2lkIHNldFBheWxvYWRz
KGNvbnN0IFZlY3RvcjxSZWZQdHI8TWVkaWFQYXlsb2FkPj4mIHBheWxvYWRzKSB7IG1fcGF5bG9h
ZHMgPSBwYXlsb2FkczsgfQorCisgICAgYm9vbCBydGNwTXV4KCkgY29uc3QgeyByZXR1cm4gbV9y
dGNwTXV4OyB9CisgICAgdm9pZCBzZXRSdGNwTXV4KGJvb2wgcnRjcE11eCkgeyBtX3J0Y3BNdXgg
PSBydGNwTXV4OyB9CisKKyAgICBjb25zdCBTdHJpbmcmIHJ0Y3BBZGRyZXNzKCkgY29uc3QgeyBy
ZXR1cm4gbV9ydGNwQWRkcmVzczsgfQorICAgIHZvaWQgc2V0UnRjcEFkZHJlc3MoY29uc3QgU3Ry
aW5nJiBydGNwQWRkcmVzcykgeyBtX3J0Y3BBZGRyZXNzID0gcnRjcEFkZHJlc3M7IH0KKworICAg
IHVuc2lnbmVkIHNob3J0IHJ0Y3BQb3J0KCkgY29uc3QgeyByZXR1cm4gbV9ydGNwUG9ydDsgfQor
ICAgIHZvaWQgc2V0UnRjcFBvcnQodW5zaWduZWQgc2hvcnQgcnRjcFBvcnQpIHsgbV9ydGNwUG9y
dCA9IHJ0Y3BQb3J0OyB9CisKKyAgICBjb25zdCBTdHJpbmcmIG1lZGlhU3RyZWFtSWQoKSBjb25z
dCB7IHJldHVybiBtX21lZGlhU3RyZWFtSWQ7IH0KKyAgICB2b2lkIHNldE1lZGlhU3RyZWFtSWQo
Y29uc3QgU3RyaW5nJiBtZWRpYVN0cmVhbUlkKSB7IG1fbWVkaWFTdHJlYW1JZCA9IG1lZGlhU3Ry
ZWFtSWQ7IH0KKworICAgIGNvbnN0IFN0cmluZyYgbWVkaWFTdHJlYW1UcmFja0lkKCkgY29uc3Qg
eyByZXR1cm4gbV9tZWRpYVN0cmVhbVRyYWNrSWQ7IH0KKyAgICB2b2lkIHNldE1lZGlhU3RyZWFt
VHJhY2tJZChjb25zdCBTdHJpbmcmIG1lZGlhU3RyZWFtVHJhY2tJZCkgeyBtX21lZGlhU3RyZWFt
VHJhY2tJZCA9IG1lZGlhU3RyZWFtVHJhY2tJZDsgfQorCisgICAgY29uc3QgU3RyaW5nJiBkdGxz
U2V0dXAoKSBjb25zdCB7IHJldHVybiBtX2R0bHNTZXR1cDsgfQorICAgIHZvaWQgc2V0RHRsc1Nl
dHVwKGNvbnN0IFN0cmluZyYgZHRsc1NldHVwKSB7IG1fZHRsc1NldHVwID0gZHRsc1NldHVwOyB9
CisKKyAgICBjb25zdCBTdHJpbmcmIGR0bHNGaW5nZXJwcmludEhhc2hGdW5jdGlvbigpIGNvbnN0
IHsgcmV0dXJuIG1fZHRsc0ZpbmdlcnByaW50SGFzaEZ1bmN0aW9uOyB9CisgICAgdm9pZCBzZXRE
dGxzRmluZ2VycHJpbnRIYXNoRnVuY3Rpb24oY29uc3QgU3RyaW5nJiBkdGxzRmluZ2VycHJpbnRI
YXNoRnVuY3Rpb24pIHsgbV9kdGxzRmluZ2VycHJpbnRIYXNoRnVuY3Rpb24gPSBkdGxzRmluZ2Vy
cHJpbnRIYXNoRnVuY3Rpb247IH0KKworICAgIGNvbnN0IFN0cmluZyYgZHRsc0ZpbmdlcnByaW50
KCkgY29uc3QgeyByZXR1cm4gbV9kdGxzRmluZ2VycHJpbnQ7IH0KKyAgICB2b2lkIHNldER0bHNG
aW5nZXJwcmludChjb25zdCBTdHJpbmcmIGR0bHNGaW5nZXJwcmludCkgeyBtX2R0bHNGaW5nZXJw
cmludCA9IGR0bHNGaW5nZXJwcmludDsgfQorCisgICAgY29uc3QgU3RyaW5nJiBjbmFtZSgpIGNv
bnN0IHsgcmV0dXJuIG1fY25hbWU7IH0KKyAgICB2b2lkIHNldENuYW1lKGNvbnN0IFN0cmluZyYg
Y25hbWUpIHsgbV9jbmFtZSA9IGNuYW1lOyB9CisKKyAgICBjb25zdCBWZWN0b3I8dW5zaWduZWQ+
JiBzc3JjcygpIGNvbnN0IHsgcmV0dXJuIG1fc3NyY3M7IH0KKyAgICB2b2lkIGFkZFNzcmModW5z
aWduZWQgc3NyYykgeyBtX3NzcmNzLmFwcGVuZChzc3JjKTsgfQorICAgIHZvaWQgY2xlYXJTc3Jj
cygpIHsgbV9zc3Jjcy5jbGVhcigpOyB9CisKKyAgICBjb25zdCBTdHJpbmcmIGljZVVmcmFnKCkg
Y29uc3QgeyByZXR1cm4gbV9pY2VVZnJhZzsgfQorICAgIHZvaWQgc2V0SWNlVWZyYWcoY29uc3Qg
U3RyaW5nJiBpY2VVZnJhZykgeyBtX2ljZVVmcmFnID0gaWNlVWZyYWc7IH0KKworICAgIGNvbnN0
IFN0cmluZyYgaWNlUGFzc3dvcmQoKSBjb25zdCB7IHJldHVybiBtX2ljZVBhc3N3b3JkOyB9Cisg
ICAgdm9pZCBzZXRJY2VQYXNzd29yZChjb25zdCBTdHJpbmcmIGljZVBhc3N3b3JkKSB7IG1faWNl
UGFzc3dvcmQgPSBpY2VQYXNzd29yZDsgfQorCisgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxJY2VD
YW5kaWRhdGU+PiYgaWNlQ2FuZGlkYXRlcygpIGNvbnN0IHsgcmV0dXJuIG1faWNlQ2FuZGlkYXRl
czsgfQorICAgIHZvaWQgYWRkSWNlQ2FuZGlkYXRlKFJlZlB0cjxJY2VDYW5kaWRhdGU+JiYgY2Fu
ZGlkYXRlKSB7IG1faWNlQ2FuZGlkYXRlcy5hcHBlbmQoV1RGTW92ZShjYW5kaWRhdGUpKTsgfQor
CisgICAgUmVhbHRpbWVNZWRpYVNvdXJjZSogc291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9zb3Vy
Y2UuZ2V0KCk7IH0KKyAgICB2b2lkIHNldFNvdXJjZShSZWZQdHI8UmVhbHRpbWVNZWRpYVNvdXJj
ZT4mJiBzb3VyY2UpIHsgbV9zb3VyY2UgPSBzb3VyY2U7IH0KKworICAgIFJlZlB0cjxQZWVyTWVk
aWFEZXNjcmlwdGlvbj4gY2xvbmUoKSBjb25zdAorICAgIHsKKyAgICAgICAgUmVmUHRyPFBlZXJN
ZWRpYURlc2NyaXB0aW9uPiBjb3B5ID0gY3JlYXRlKCk7CisKKyAgICAgICAgY29weS0+bV90eXBl
ID0gU3RyaW5nKG1fdHlwZSk7CisgICAgICAgIGNvcHktPm1fcG9ydCA9IG1fcG9ydDsKKyAgICAg
ICAgY29weS0+bV9hZGRyZXNzID0gU3RyaW5nKG1fYWRkcmVzcyk7CisgICAgICAgIGNvcHktPm1f
bW9kZSA9IFN0cmluZyhtX21vZGUpOworCisgICAgICAgIGZvciAoYXV0byYgcGF5bG9hZCA6IG1f
cGF5bG9hZHMpCisgICAgICAgICAgICBjb3B5LT5tX3BheWxvYWRzLmFwcGVuZChwYXlsb2FkLT5j
bG9uZSgpKTsKKworICAgICAgICBjb3B5LT5tX3J0Y3BNdXggPSBtX3J0Y3BNdXg7CisgICAgICAg
IGNvcHktPm1fcnRjcEFkZHJlc3MgPSBTdHJpbmcobV9ydGNwQWRkcmVzcyk7CisgICAgICAgIGNv
cHktPm1fcnRjcFBvcnQgPSBtX3J0Y3BQb3J0OworCisgICAgICAgIGNvcHktPm1fbWVkaWFTdHJl
YW1JZCA9IFN0cmluZyhtX21lZGlhU3RyZWFtSWQpOworICAgICAgICBjb3B5LT5tX21lZGlhU3Ry
ZWFtVHJhY2tJZCA9IFN0cmluZyhtX21lZGlhU3RyZWFtVHJhY2tJZCk7CisKKyAgICAgICAgY29w
eS0+bV9kdGxzU2V0dXAgPSBTdHJpbmcobV9kdGxzU2V0dXApOworICAgICAgICBjb3B5LT5tX2R0
bHNGaW5nZXJwcmludEhhc2hGdW5jdGlvbiA9IFN0cmluZyhtX2R0bHNGaW5nZXJwcmludEhhc2hG
dW5jdGlvbik7CisgICAgICAgIGNvcHktPm1fZHRsc0ZpbmdlcnByaW50ID0gU3RyaW5nKG1fZHRs
c0ZpbmdlcnByaW50KTsKKworICAgICAgICBmb3IgKGF1dG8gc3NyYyA6IG1fc3NyY3MpCisgICAg
ICAgICAgICBjb3B5LT5tX3NzcmNzLmFwcGVuZChzc3JjKTsKKworICAgICAgICBjb3B5LT5tX2Nu
YW1lID0gU3RyaW5nKG1fY25hbWUpOworCisgICAgICAgIGNvcHktPm1faWNlVWZyYWcgPSBTdHJp
bmcobV9pY2VVZnJhZyk7CisgICAgICAgIGNvcHktPm1faWNlUGFzc3dvcmQgPSBTdHJpbmcobV9p
Y2VQYXNzd29yZCk7CisKKyAgICAgICAgZm9yIChhdXRvJiBjYW5kaWRhdGUgOiBtX2ljZUNhbmRp
ZGF0ZXMpCisgICAgICAgICAgICBjb3B5LT5tX2ljZUNhbmRpZGF0ZXMuYXBwZW5kKGNhbmRpZGF0
ZS0+Y2xvbmUoKSk7CisKKyAgICAgICAgcmV0dXJuIGNvcHk7CisgICAgfQorCitwcml2YXRlOgor
ICAgIFBlZXJNZWRpYURlc2NyaXB0aW9uKCkgeyB9CisKKyAgICBTdHJpbmcgbV90eXBlOworICAg
IHVuc2lnbmVkIHNob3J0IG1fcG9ydCB7IDAgfTsKKyAgICBTdHJpbmcgbV9hZGRyZXNzOworICAg
IFN0cmluZyBtX21vZGU7CisKKyAgICBWZWN0b3I8UmVmUHRyPE1lZGlhUGF5bG9hZD4+IG1fcGF5
bG9hZHM7CisKKyAgICBib29sIG1fcnRjcE11eCB7IGZhbHNlIH07CisgICAgU3RyaW5nIG1fcnRj
cEFkZHJlc3M7CisgICAgdW5zaWduZWQgc2hvcnQgbV9ydGNwUG9ydCB7IDAgfTsKKworICAgIFN0
cmluZyBtX21lZGlhU3RyZWFtSWQ7CisgICAgU3RyaW5nIG1fbWVkaWFTdHJlYW1UcmFja0lkOwor
CisgICAgU3RyaW5nIG1fZHRsc1NldHVwOworICAgIFN0cmluZyBtX2R0bHNGaW5nZXJwcmludEhh
c2hGdW5jdGlvbjsKKyAgICBTdHJpbmcgbV9kdGxzRmluZ2VycHJpbnQ7CisKKyAgICBWZWN0b3I8
dW5zaWduZWQ+IG1fc3NyY3M7CisgICAgU3RyaW5nIG1fY25hbWU7CisKKyAgICBTdHJpbmcgbV9p
Y2VVZnJhZzsKKyAgICBTdHJpbmcgbV9pY2VQYXNzd29yZDsKKyAgICBWZWN0b3I8UmVmUHRyPElj
ZUNhbmRpZGF0ZT4+IG1faWNlQ2FuZGlkYXRlczsKKworICAgIFJlZlB0cjxSZWFsdGltZU1lZGlh
U291cmNlPiBtX3NvdXJjZSB7IG51bGxwdHIgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCisKKyNlbmRpZiAvLyBQZWVyTWVk
aWFEZXNjcmlwdGlvbl9oCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>