<?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>198982</bug_id>
          
          <creation_ts>2019-06-18 16:41:44 -0700</creation_ts>
          <short_desc>Hook up WebGL&apos;s back buffer in ANGLE backend on macOS</short_desc>
          <delta_ts>2019-07-10 11:44:15 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebGL</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>197755</dependson>
          <blocked>198948</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Kenneth Russell">kbr</reporter>
          <assigned_to name="Kenneth Russell">kbr</assigned_to>
          <cc>achristensen</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>graouts</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1545888</commentid>
    <comment_count>0</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2019-06-18 16:41:44 -0700</bug_when>
    <thetext>In bug 197755 a preliminary ANGLE backend was added to WebCore&apos;s WebGL implementation which doesn&apos;t render anything yet. The back buffer needs to be hooked up on the macOS port as a start.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1551589</commentid>
    <comment_count>1</comment_count>
      <attachid>373816</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2019-07-09 20:56:26 -0700</bug_when>
    <thetext>Created attachment 373816
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1551590</commentid>
    <comment_count>2</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-07-09 20:58:47 -0700</bug_when>
    <thetext>Note that there are important steps to take when updating ANGLE. See http://trac.webkit.org/wiki/UpdatingANGLE</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1551591</commentid>
    <comment_count>3</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2019-07-09 20:59:09 -0700</bug_when>
    <thetext>The attached patch fixes many bugs encountered along the way toward getting the ANGLE backend for WebKit&apos;s WebGL implementation to draw correctly to the screen on desktop macOS. It runs the San Angeles demo correctly, as well as parts of the WebGL 1.0 conformance suite.

If necessary the patch can be split up, though this will be a bit difficult since the intermediate patches can&apos;t be tested until all of them land.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1551752</commentid>
    <comment_count>4</comment_count>
      <attachid>373816</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-07-10 11:43:08 -0700</bug_when>
    <thetext>Comment on attachment 373816
Patch

Clearing flags on attachment: 373816

Committed r247315: &lt;https://trac.webkit.org/changeset/247315&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1551753</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-07-10 11:43:10 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1551755</commentid>
    <comment_count>6</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-07-10 11:44:15 -0700</bug_when>
    <thetext>&lt;rdar://problem/52903988&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>373816</attachid>
            <date>2019-07-09 20:56:26 -0700</date>
            <delta_ts>2019-07-10 11:43:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-198982-20190709205625.patch</filename>
            <type>text/plain</type>
            <size>108453</size>
            <attacher name="Kenneth Russell">kbr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ3MjkxCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9DaGFuZ2VMb2cgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9DaGFuZ2VMb2cKaW5k
ZXggOTU2ZWRmZGFlZmY3ODVlNmFhOTcwY2YwNzY3MzJiZjY2ZTc4OTJhZS4uNTRiMzdhOWNmYTg4
MGE5YTE4NmJkMWIxNjZiN2I0NmRkYmE2MWZlOSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDI2IEBACisyMDE5LTA3LTA5ICBLZW5uZXRoIFJ1c3NlbGwgIDxrYnJAY2hy
b21pdW0ub3JnPgorCisgICAgICAgIEhvb2sgdXAgV2ViR0wncyBiYWNrIGJ1ZmZlciBpbiBBTkdM
RSBiYWNrZW5kIG9uIG1hY09TCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xOTg5ODIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBBZGQgc291cmNlIGZpbGVzIG5lZWRlZCB0byBpbXBsZW1lbnQgYW5kIGNhbGwg
QU5HTEUgZXh0ZW5zaW9ucywgYW5kCisgICAgICAgIGV4cG9ydCBoZWFkZXJzIG5lY2Vzc2FyeSBm
b3IgdGhvc2UgZXh0ZW5zaW9ucy4gVXBkYXRlIHRoZSBzY3JpcHQgd2hpY2gKKyAgICAgICAgYWRq
dXN0cyBpbmNsdWRlIHBhdGhzIHRvIGhhbmRsZSB0aGUgbmV3IGhlYWRlcnMuCisKKyAgICAgICAg
Q2hlcnJ5LXBpY2sgZml4IGZvciBBTkdMRSBidWcgY3JidWcuY29tL2FuZ2xlcHJvamVjdC8zNjY5
IHRvIHN1cHBvcnQKKyAgICAgICAgYW50aWFsaWFzOnRydWUgZm9yIEFOR0xFLWJhY2tlZCBXZWJH
TCBjb250ZXh0cy4KKworICAgICAgICAqIEFOR0xFLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
CisgICAgICAgICogYWRqdXN0LWFuZ2xlLWluY2x1ZGUtcGF0aHMuc2g6CisgICAgICAgICogc3Jj
L2xpYkFOR0xFL0ZyYW1lYnVmZmVyQXR0YWNobWVudC5jcHA6CisgICAgICAgIChnbDo6RnJhbWVi
dWZmZXJBdHRhY2htZW50OjpnZXRUZXh0dXJlSW1hZ2VJbmRleCBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgICogc3JjL2xpYkFOR0xFL0ZyYW1lYnVmZmVyQXR0YWNobWVudC5oOgorICAgICAgICAo
Z2w6OkZyYW1lYnVmZmVyQXR0YWNobWVudDo6Z2V0VGV4dHVyZUltYWdlSW5kZXggY29uc3QpOgor
ICAgICAgICAqIHNyYy9saWJBTkdMRS92YWxpZGF0aW9uRVMyLmNwcDoKKyAgICAgICAgKGdsOjpW
YWxpZGF0ZUJsaXRGcmFtZWJ1ZmZlckFOR0xFKToKKwogMjAxOS0wNi0yNyAgQmV0aCBEYWtpbiAg
PGJkYWtpbkBhcHBsZS5jb20+CiAKICAgICAgICAgVXBzdHJlYW0gdXNlIG9mIE1BQ0NBVEFMWVNU
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cKaW5kZXggNjliMThkMzZlNGRkN2QzODRkNjQ3N2Y4Nzk0Yjc2YTgzMGYxOWM2OS4u
N2M1MTgzZWMyOWQ4MWY5MzliZWE1MzJkNmI2YTVjNmNmMWU1YjcyNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDExOSBAQAorMjAxOS0wNy0wOSAgS2VubmV0aCBSdXNzZWxsICA8a2JyQGNocm9taXVt
Lm9yZz4KKworICAgICAgICBIb29rIHVwIFdlYkdMJ3MgYmFjayBidWZmZXIgaW4gQU5HTEUgYmFj
a2VuZCBvbiBtYWNPUworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTk4OTgyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgRml4IGEgZmV3IHBsYWNlcyB3aGljaCB3ZXJlIGFjY2lkZW50YWxseSBjYWxsaW5nIGRl
c2t0b3AgT3BlbkdMIHJhdGhlcgorICAgICAgICB0aGFuIEFOR0xFLiBGaXggc29tZSBjYWxscyB3
aGljaCB3ZXJlIHVzaW5nIEFOR0xFJ3MgT3BlbkdMIEVTIDMuMAorICAgICAgICBlbnRyeSBwb2lu
dHMgcmF0aGVyIHRoYW4gdGhlIE9wZW5HTCBFUyAyLjAgZXh0ZW5zaW9uIEFQSXMsIGNhdXNpbmcK
KyAgICAgICAgdGhlbSB0byBnZW5lcmF0ZSBlcnJvcnMgaW4gV2ViR0wgMS4wJ3MgYmFja2VuZC4g
Q2hhbmdlCisgICAgICAgIEV4dGVuc2lvbnMzREFOR0xFIHRvIHVzZSBBTkdMRSdzIHJlcXVlc3Rh
YmxlIGV4dGVuc2lvbiBtZWNoYW5pc20uCisKKyAgICAgICAgRml4IGZyYW1lYnVmZmVyIHNldHVw
IHdoZW4gdXNpbmcgQU5HTEUgZm9yIFdlYkdMIDEuMCBjb250ZXh0cywgZm9yCisgICAgICAgIGJv
dGggYW50aWFsaWFzOnRydWUgYW5kIGZhbHNlLgorCisgICAgICAgIFJlbW92ZSBBTkdMRVdlYktp
dEJyaWRnZSBpbiBBTkdMRSBiYWNrZW5kLiBJdCBpbnRlcmZlcmVkIHdpdGggdGhlCisgICAgICAg
IGNvcnJlY3Qgb3BlcmF0aW9uIG9mIEFOR0xFJ3MgaW50ZXJuYWwgc2hhZGVyIGNvbXBpbGVyLCBh
bmQgd2FzCisgICAgICAgIHVubmVjZXNzYXJ5IGdpdmVuIHRoZSB1c2Ugb2YgQU5HTEUuIFJlbW92
ZSBhbGwgbWFudWFsIHNoYWRlciBuYW1lCisgICAgICAgIGhhc2hpbmcgYW5kIG1hcHBpbmcgaW4g
QU5HTEUgYmFja2VuZC4KKworICAgICAgICBUZXN0ZWQgd2l0aCBwYXJ0cyBvZiB0aGUgV2ViR0wg
Y29uZm9ybWFuY2Ugc3VpdGUgYW5kIHRoZSBTYW4KKyAgICAgICAgQW5nZWxlcyBkZW1vLCB3aGlj
aCBub3cgcnVucyBwcm9wZXJseSB3aXRoIFdlYktpdCdzIEFOR0xFIGJhY2tlbmQKKyAgICAgICAg
Zm9yIFdlYkdMLgorCisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpn
ZXRQcm9ncmFtUGFyYW1ldGVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OmdldFVuaWZvcm1Mb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjpsaW5rUHJvZ3JhbVdpdGhvdXRJbnZhbGlkYXRpbmdBdHRyaWJM
b2NhdGlvbnMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNE
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvRXh0ZW5zaW9uczNEQU5HTEUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNEQU5HTEU6OkV4dGVuc2lvbnMzREFO
R0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzREFOR0xFOjpzdXBwb3J0cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RBTkdMRTo6ZW5zdXJlRW5hYmxlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RBTkdMRTo6aXNFbmFibGVkKToKKyAgICAgICAgKFdl
YkNvcmU6OkV4dGVuc2lvbnMzREFOR0xFOjpnZXRUcmFuc2xhdGVkU2hhZGVyU291cmNlQU5HTEUp
OgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNEQU5HTEU6OmluaXRpYWxpemVBdmFpbGFi
bGVFeHRlbnNpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzREFOR0xFOjpibGl0
RnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNEQU5HTEU6OnJlbmRl
cmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25z
M0RBTkdMRTo6Y3JlYXRlVmVydGV4QXJyYXlPRVMpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5z
aW9uczNEQU5HTEU6OmRlbGV0ZVZlcnRleEFycmF5T0VTKToKKyAgICAgICAgKFdlYkNvcmU6OkV4
dGVuc2lvbnMzREFOR0xFOjppc1ZlcnRleEFycmF5T0VTKToKKyAgICAgICAgKFdlYkNvcmU6OkV4
dGVuc2lvbnMzREFOR0xFOjpiaW5kVmVydGV4QXJyYXlPRVMpOgorICAgICAgICAoV2ViQ29yZTo6
RXh0ZW5zaW9uczNEQU5HTEU6OnN1cHBvcnRzRXh0ZW5zaW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OkV4dGVuc2lvbnMzREFOR0xFOjpkcmF3QnVmZmVyc0VYVCk6CisgICAgICAgIChXZWJDb3JlOjpF
eHRlbnNpb25zM0RBTkdMRTo6ZHJhd0FycmF5c0luc3RhbmNlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpFeHRlbnNpb25zM0RBTkdMRTo6ZHJhd0VsZW1lbnRzSW5zdGFuY2VkKToKKyAgICAgICAgKFdl
YkNvcmU6OkV4dGVuc2lvbnMzREFOR0xFOjp2ZXJ0ZXhBdHRyaWJEaXZpc29yKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9FeHRlbnNpb25zM0RBTkdMRS5oOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dDNEQU5HTEUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZhbGlkYXRlQXR0cmlidXRlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cmVzaGFwZUZCT3MpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmF0dGFjaERlcHRoQW5kU3RlbmNpbEJ1ZmZl
cklmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpyZXNvbHZl
TXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjp2YWxpZGF0ZURlcHRoU3RlbmNpbCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRDo6cHJlcGFyZVRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OmF0dGFjaFNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRDo6YmluZEF0dHJpYkxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjpjb21waWxlU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjpjb21waWxlU2hhZGVyRGlyZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjpkZXRhY2hTaGFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0Q6OmdldEFjdGl2ZUF0dHJpYkltcGwpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0Q6OmdldEFjdGl2ZUF0dHJpYik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRDo6Z2V0QWN0aXZlVW5pZm9ybUltcGwpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OmdldEFjdGl2ZVVuaWZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OmdldEF0dHJpYkxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjpnZXRBdHRyaWJMb2NhdGlvbkRpcmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6bW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpsaW5rUHJvZ3JhbSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6c2hhZGVyU291cmNlKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRVbm1hbmdsZWRJbmZvTG9nKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJpdik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0U2hhZGVySW5mb0xvZyk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0VW5pZm9ybUxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZUZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjpjcmVhdGVSZW5kZXJidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6Y3JlYXRlVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRDo6ZGVsZXRlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjpkZWxldGVGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6ZGVsZXRlUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRDo6ZGVsZXRlUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjpkZWxldGVTaGFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0Q6OmRlbGV0ZVRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6
OnN5bnRoZXNpemVHTEVycm9yKToKKyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpzZXRDdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFkZXIpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6bmFtZUhhc2hGb3JTaGFkZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OmNoZWNrVmFyeWluZ3NQYWNraW5nIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwcmVjaXNpb25zTWF0Y2ggY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Z2VuZXJhdGVIYXNoZWROYW1lKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjptYXBwZWRTeW1ib2xJ
blNoYWRlclNvdXJjZU1hcCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6bWFwcGVkU3ltYm9sTmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6b3JpZ2luYWxTeW1ib2xJblNoYWRlclNvdXJjZU1hcCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6b3JpZ2luYWxTeW1ib2xO
YW1lKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRO
b25CdWlsdEluQWN0aXZlU3ltYm9sQ291bnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlclNvdXJjZSk6IERlbGV0ZWQuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250ZXh0M0RDb2NvYS5tbToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6fkdyYXBoaWNzQ29udGV4dDNEKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjptYWtlQ29udGV4dEN1cnJlbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNoZWNrR1BVU3RhdHVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjphbGxvY2F0ZUlPU3VyZmFjZUJhY2tp
bmdTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dXBkYXRlRnJh
bWVidWZmZXJUZXh0dXJlQmFja2luZ1N0b3JlRnJvbUxheWVyKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jb2NvYS9XZWJHTExheWVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY29jb2EvV2ViR0xMYXllci5tbToKKyAgICAgICAgKC1bV2ViR0xMYXllciBpbml0V2l0aEdy
YXBoaWNzQ29udGV4dDNEOl0pOgorICAgICAgICAoLVtXZWJHTExheWVyIGNvcHlJbWFnZVNuYXBz
aG90V2l0aENvbG9yU3BhY2U6XSk6CisgICAgICAgICgtW1dlYkdMTGF5ZXIgZGlzcGxheV0pOgor
ICAgICAgICAoLVtXZWJHTExheWVyIHNldEVHTERpc3BsYXk6YW5kQ29uZmlnOl0pOgorICAgICAg
ICAoLVtXZWJHTExheWVyIGRlYWxsb2NdKToKKyAgICAgICAgKC1bV2ViR0xMYXllciBhbGxvY2F0
ZUlPU3VyZmFjZUJhY2tpbmdTdG9yZVdpdGhTaXplOnVzaW5nQWxwaGE6XSk6CisgICAgICAgICgt
W1dlYkdMTGF5ZXIgYmluZEZyYW1lYnVmZmVyVG9OZXh0QXZhaWxhYmxlU3VyZmFjZV0pOgorCiAy
MDE5LTA3LTA5ICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgogCiAgICAg
ICAgIEZpeGVkIGVsZW1lbnRzIGFwcGVhciBpbiB0aGUgbWlkZGxlIG9mIGZ1bGwgcGFnZSBzY3Jl
ZW5zaG90cyB0YWtlbiB3aGVuIHNjcm9sbGVkCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9BTkdMRS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvQU5HTEUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA3Y2VmYzU5ZTVh
ZTlmZWE2MGZhMzM3ZGIxNGRjMTZkMzZkNzNjNjJhLi5lMjNlYjA2ZGI2MmRjYzk0NzdjNmJjNzhh
ZWMxMjcwYjQ3NTBkNmZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9BTkdM
RS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L0FOR0xFLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTUxMCw3ICs1MTAsNiBAQAogCQk1
Q0IzMDUwMTFERTQxNjQ4MDBEMkM0MDUgLyogVHJhbnNmb3JtRmVlZGJhY2tJbXBsX21vY2suaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDQjMwNEQ3MURF
NDE2NDgwMEQyQzQwNSAvKiBUcmFuc2Zvcm1GZWVkYmFja0ltcGxfbW9jay5oICovOyB9OwogCQk1
Q0IzMDUwMjFERTQxNjQ4MDBEMkM0MDUgLyogVHJhbnNmb3JtRmVlZGJhY2tJbXBsLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0IzMDREODFERTQxNjQ4
MDBEMkM0MDUgLyogVHJhbnNmb3JtRmVlZGJhY2tJbXBsLmggKi87IH07CiAJCTVDQjMwNTAzMURF
NDE2NDgwMEQyQzQwNSAvKiBWZXJ0ZXhBcnJheUltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDQjMwNEQ5MURFNDE2NDgwMEQyQzQwNSAvKiBWZXJ0
ZXhBcnJheUltcGwuaCAqLzsgfTsKLQkJNUNCNUUxQTcxREZCOEFGNjAwRjkwRkM5IC8qIGxpYkVH
TC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0Iz
MDBCNTFERTM5RTYzMDBEMkM0MDUgLyogbGliRUdMLmNwcCAqLzsgfTsKIAkJNUNDN0Q0NTcxOTEw
MjRFNDAwMEI4QzFGIC8qIFZhbGlkYXRlT3V0cHV0cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0M3RDQ1MDE5MTAyNEU0MDAwQjhDMUYgLyogVmFs
aWRhdGVPdXRwdXRzLmNwcCAqLzsgfTsKIAkJNUNDN0Q0NTgxOTEwMjRFNDAwMEI4QzFGIC8qIFZh
bGlkYXRlT3V0cHV0cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNUNDN0Q0NTExOTEwMjRFNDAwMEI4QzFGIC8qIFZhbGlkYXRlT3V0cHV0cy5oICovOyB9
OwogCQk1Q0M3RDQ2QjE5MTAyNjIwMDAwQjhDMUYgLyogYW5nbGV1dGlscy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNDN0Q0NUExOTEwMjYyMDAwMEI4
QzFGIC8qIGFuZ2xldXRpbHMuaCAqLzsgfTsKQEAgLTU5MCw2ICs1ODksMTcgQEAKIAkJNUNDRDgx
QjAxREJGRUE1QzAwNjA2NkI4IC8qIENvbnN0YW50VW5pb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNDRDgxOTkxREJGRUE1QzAwNjA2NkI4IC8q
IENvbnN0YW50VW5pb24uY3BwICovOyB9OwogCQk1Q0NEODFCNTFEQkZFQTVDMDA2MDY2QjggLyog
UXVhbGlmaWVyVHlwZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNUNDRDgxOUUxREJGRUE1QzAwNjA2NkI4IC8qIFF1YWxpZmllclR5cGVzLmNwcCAq
LzsgfTsKIAkJNUNDRDgxQjYxREJGRUE1QzAwNjA2NkI4IC8qIFF1YWxpZmllclR5cGVzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0NEODE5RjFEQkZF
QTVDMDA2MDY2QjggLyogUXVhbGlmaWVyVHlwZXMuaCAqLzsgfTsKKwkJNkUzNDRBQjEyMkJDMzVD
MzAwMUREQjJDIC8qIGVudHJ5X3BvaW50c19lbnVtX2F1dG9nZW4uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFMzQ0QUFEMjJCQzM1QzMwMDFEREIyQyAv
KiBlbnRyeV9wb2ludHNfZW51bV9hdXRvZ2VuLmggKi87IH07CisJCTZFMzQ0QUIyMjJCQzM1QzMw
MDFEREIyQyAvKiBlbnRyeV9wb2ludHNfZ2xlc19leHRfYXV0b2dlbi5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkUzNDRBQUUyMkJDMzVDMzAwMUREQjJD
IC8qIGVudHJ5X3BvaW50c19nbGVzX2V4dF9hdXRvZ2VuLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQk2RTM0NEFCMzIyQkMzNUMzMDAxRERCMkMgLyog
ZW50cnlfcG9pbnRzX2dsZXNfZXh0X2F1dG9nZW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkUzNDRBQUYyMkJDMzVDMzAwMUREQjJDIC8qIGVudHJ5
X3BvaW50c19nbGVzX2V4dF9hdXRvZ2VuLmNwcCAqLzsgfTsKKwkJNkUzNDRBQjYyMkJDNTdDODAw
MUREQjJDIC8qIGVudHJ5X3BvaW50c19nbGVzXzFfMF9hdXRvZ2VuLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFMzQ0QUI0MjJCQzU3QzgwMDFEREIy
QyAvKiBlbnRyeV9wb2ludHNfZ2xlc18xXzBfYXV0b2dlbi5jcHAgKi87IH07CisJCTZFMzQ0QUI3
MjJCQzU3QzgwMDFEREIyQyAvKiBlbnRyeV9wb2ludHNfZ2xlc18xXzBfYXV0b2dlbi5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkUzNDRBQjUyMkJDNTdD
ODAwMUREQjJDIC8qIGVudHJ5X3BvaW50c19nbGVzXzFfMF9hdXRvZ2VuLmggKi87IH07CisJCTZF
RDcwQTBDMjJDRDYzMEUwMDg2ODhDRSAvKiBnbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNkVENzBBMDkyMkNENjMwRTAwODY4OENFIC8qIGdsLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQk2RUQ3MEEwRDIy
Q0Q2MzBFMDA4Njg4Q0UgLyogZ2xleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDZFRDcwQTBBMjJDRDYzMEUwMDg2ODhDRSAvKiBnbGV4dC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJNkVENzBBMEUyMkNE
NjMwRTAwODY4OENFIC8qIGdscGxhdGZvcm0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDZFRDcwQTBCMjJDRDYzMEUwMDg2ODhDRSAvKiBnbHBsYXRmb3Jt
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQk2RUQ3
MEExMDIyQ0Q2ODIyMDA4Njg4Q0UgLyogZ2xleHRfYW5nbGUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFRDcwQTBGMjJDRDY4MjIwMDg2ODhDRSAvKiBn
bGV4dF9hbmdsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsg
fTsKKwkJNkVFMkZEMkQyMkJBRTk5QzAwMUQzNjlFIC8qIGVnbGV4dF9hbmdsZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkVFMkZEMkMyMkJBRTk5QzAw
MUQzNjlFIC8qIGVnbGV4dF9hbmdsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1
YmxpYywgKTsgfTsgfTsKKwkJNkVFMkZEMkYyMkJBRTlDRDAwMUQzNjlFIC8qIGdsMmV4dF9hbmds
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkVFMkZE
MkUyMkJBRTlDRDAwMUQzNjlFIC8qIGdsMmV4dF9hbmdsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKIAkJNzIzMDlBNTYxODNDMjdERTAwMzcwQjkzIC8q
IFRva2VuaXplci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3MjMwOUE1NTE4M0MyN0RCMDAzNzBCOTMgLyogVG9rZW5pemVyLmNwcCAqLzsgc2V0dGlu
Z3MgPSB7Q09NUElMRVJfRkxBR1MgPSAiLVduby11bnJlYWNoYWJsZS1jb2RlIjsgfTsgfTsKIAkJ
NzIzMDlBNTgxODNDMjdGMzAwMzcwQjkzIC8qIEV4cHJlc3Npb25QYXJzZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzIzMDlBNTcxODNDMjdGMTAw
MzcwQjkzIC8qIEV4cHJlc3Npb25QYXJzZXIuY3BwICovOyBzZXR0aW5ncyA9IHtDT01QSUxFUl9G
TEFHUyA9ICItV25vLXVucmVhY2hhYmxlLWNvZGUiOyB9OyB9OwogCQlBMDhDM0NEQzE2RDZDQjYx
MDAzRjBCODMgLyogQXJyYXlCb3VuZHNDbGFtcGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEwOEMzQ0RBMTZENkNCNjEwMDNGMEI4MyAvKiBBcnJh
eUJvdW5kc0NsYW1wZXIuY3BwICovOyB9OwpAQCAtMTA0OSw3ICsxMDU5LDYgQEAKIAkJNUM1NUQ3
MzIyMjgyNzRERTAwQjVCQTJDIC8qIERlY2xhcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gRGVjbGFyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1
QzlGRkY0QzE5MTAyQTAwMDAyNUI4RkEgLyogRmxhZ1N0ZDE0MFN0cnVjdHMuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRmxhZ1N0ZDE0MFN0cnVjdHMuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1QzlGRkY0RDE5MTAyQTAwMDAyNUI4RkEgLyogRmxh
Z1N0ZDE0MFN0cnVjdHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmxhZ1N0
ZDE0MFN0cnVjdHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNUNCMzAwQjUxREUz
OUU2MzAwRDJDNDA1IC8qIGxpYkVHTC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBsaWJFR0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1Q0IzMDBC
ODFERTM5RTYzMDBEMkM0MDUgLyogcmVzb3VyY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gcmVzb3VyY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUNCMzAw
QkIxREUzOUU3NTAwRDJDNDA1IC8qIGVudHJ5X3BvaW50c19lZ2xfZXh0LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IGVudHJ5X3BvaW50c19lZ2xfZXh0LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUNCMzAwQkMxREUzOUU3NTAwRDJDNDA1IC8qIGVu
dHJ5X3BvaW50c19lZ2xfZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGVu
dHJ5X3BvaW50c19lZ2xfZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMjM3
LDYgKzEyNDYsMTcgQEAKIAkJNUQ3QzU5QzUxMjA4QzY4QjAwMUM4NzNFIC8qIEFOR0xFLnhjY29u
ZmlnICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZpZzsgcGF0aCA9IEFOR0xFLnhjY29uZmlnOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1RDdDNTlDNjEyMDhDNjhCMDAxQzg3M0UgLyogQmFz
ZS54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7IHBhdGggPSBCYXNlLnhjY29uZmln
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1RDdDNTlDNzEyMDhDNjhCMDAxQzg3M0Ug
LyogRGVidWdSZWxlYXNlLnhjY29uZmlnICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZpZzsgcGF0aCA9
IERlYnVnUmVsZWFzZS54Y2NvbmZpZzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkUz
NDRBQUQyMkJDMzVDMzAwMUREQjJDIC8qIGVudHJ5X3BvaW50c19lbnVtX2F1dG9nZW4uaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gZW50cnlfcG9pbnRzX2VudW1fYXV0b2dlbi5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2RTM0NEFBRTIyQkMzNUMzMDAxRERCMkMg
LyogZW50cnlfcG9pbnRzX2dsZXNfZXh0X2F1dG9nZW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gZW50cnlfcG9pbnRzX2dsZXNfZXh0X2F1dG9nZW4uaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNkUzNDRBQUYyMkJDMzVDMzAwMUREQjJDIC8qIGVudHJ5X3BvaW50
c19nbGVzX2V4dF9hdXRvZ2VuLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IGVudHJ5X3BvaW50c19nbGVzX2V4dF9hdXRvZ2VuLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNkUzNDRBQjQyMkJDNTdDODAwMUREQjJDIC8qIGVudHJ5X3BvaW50c19nbGVz
XzFfMF9hdXRvZ2VuLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IGVu
dHJ5X3BvaW50c19nbGVzXzFfMF9hdXRvZ2VuLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNkUzNDRBQjUyMkJDNTdDODAwMUREQjJDIC8qIGVudHJ5X3BvaW50c19nbGVzXzFfMF9h
dXRvZ2VuLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGVudHJ5X3BvaW50c19n
bGVzXzFfMF9hdXRvZ2VuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTZFRDcwQTA5
MjJDRDYzMEUwMDg2ODhDRSAvKiBnbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBnbC5oOyBwYXRoID0gaW5jbHVkZS9HTEVTL2dsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTZFRDcwQTBBMjJDRDYzMEUwMDg2ODhDRSAvKiBnbGV4dC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBnbGV4dC5oOyBwYXRoID0gaW5jbHVkZS9HTEVTL2dsZXh0Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTZFRDcwQTBCMjJDRDYzMEUwMDg2ODhDRSAv
KiBnbHBsYXRmb3JtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IGdscGxhdGZv
cm0uaDsgcGF0aCA9IGluY2x1ZGUvR0xFUy9nbHBsYXRmb3JtLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTZFRDcwQTBGMjJDRDY4MjIwMDg2ODhDRSAvKiBnbGV4dF9hbmdsZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBnbGV4dF9hbmdsZS5oOyBwYXRoID0gaW5j
bHVkZS9HTEVTL2dsZXh0X2FuZ2xlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTZF
RTJGRDJDMjJCQUU5OUMwMDFEMzY5RSAvKiBlZ2xleHRfYW5nbGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gZWdsZXh0X2FuZ2xlLmg7IHBhdGggPSBpbmNsdWRlL0VHTC9lZ2xl
eHRfYW5nbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkVFMkZEMkUyMkJBRTlD
RDAwMUQzNjlFIC8qIGdsMmV4dF9hbmdsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBnbDJleHRfYW5nbGUuaDsgcGF0aCA9IGluY2x1ZGUvR0xFUzIvZ2wyZXh0X2FuZ2xlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyMzA5QTU1MTgzQzI3REIwMDM3MEI5MyAv
KiBUb2tlbml6ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVG9rZW5pemVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzIzMDlBNTcxODNDMjdGMTAwMzcwQjkzIC8qIEV4cHJl
c3Npb25QYXJzZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXhwcmVzc2lvblBhcnNlci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUEwOEMzQ0RBMTZENkNCNjEwMDNGMEI4MyAv
KiBBcnJheUJvdW5kc0NsYW1wZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gQXJyYXlCb3VuZHNDbGFtcGVyLmNwcDsgcGF0aCA9IGNvbXBpbGVyL0FycmF5Qm91bmRz
Q2xhbXBlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNTA1LDYgKzE1MjUs
NyBAQAogCQkJY2hpbGRyZW4gPSAoCiAJCQkJNUMxQkFBQTYxREZCNjEyNDAwMjkwNkJCIC8qIGVn
bC5oICovLAogCQkJCTVDMUJBQUE3MURGQjYxMjQwMDI5MDZCQiAvKiBlZ2xleHQuaCAqLywKKwkJ
CQk2RUUyRkQyQzIyQkFFOTlDMDAxRDM2OUUgLyogZWdsZXh0X2FuZ2xlLmggKi8sCiAJCQkJNUMx
QkFBQTgxREZCNjEyNDAwMjkwNkJCIC8qIGVnbHBsYXRmb3JtLmggKi8sCiAJCQkpOwogCQkJbmFt
ZSA9IEVHTDsKQEAgLTE1MTUsNiArMTUzNiw3IEBACiAJCQljaGlsZHJlbiA9ICgKIAkJCQk1QzFC
QUE5RTFERkI2MTBFMDAyOTA2QkIgLyogZ2wyLmggKi8sCiAJCQkJNUMxQkFBOUYxREZCNjEwRTAw
MjkwNkJCIC8qIGdsMmV4dC5oICovLAorCQkJCTZFRTJGRDJFMjJCQUU5Q0QwMDFEMzY5RSAvKiBn
bDJleHRfYW5nbGUuaCAqLywKIAkJCQk1QzFCQUFBMDFERkI2MTBFMDAyOTA2QkIgLyogZ2wycGxh
dGZvcm0uaCAqLywKIAkJCSk7CiAJCQluYW1lID0gR0xFUzI7CkBAIC0xNjk2LDcgKzE3MTgsNiBA
QAogCQk1Q0IzMDBCNDFERTM5RTU0MDBEMkM0MDUgLyogbGliRUdMICovID0gewogCQkJaXNhID0g
UEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQk1Q0IzMDBCNTFERTM5RTYzMDBEMkM0MDUg
LyogbGliRUdMLmNwcCAqLywKIAkJCQk1Q0IzMDBCODFERTM5RTYzMDBEMkM0MDUgLyogcmVzb3Vy
Y2UuaCAqLywKIAkJCSk7CiAJCQlwYXRoID0gbGliRUdMOwpAQCAtMTcwOSwxMiArMTczMCwxNyBA
QAogCQkJCTVDQjMwMEJFMURFMzlFNzUwMEQyQzQwNSAvKiBlbnRyeV9wb2ludHNfZWdsLmggKi8s
CiAJCQkJNUNCMzAwQkIxREUzOUU3NTAwRDJDNDA1IC8qIGVudHJ5X3BvaW50c19lZ2xfZXh0LmNw
cCAqLywKIAkJCQk1Q0IzMDBCQzFERTM5RTc1MDBEMkM0MDUgLyogZW50cnlfcG9pbnRzX2VnbF9l
eHQuaCAqLywKKwkJCQk2RTM0NEFBRDIyQkMzNUMzMDAxRERCMkMgLyogZW50cnlfcG9pbnRzX2Vu
dW1fYXV0b2dlbi5oICovLAorCQkJCTZFMzQ0QUI0MjJCQzU3QzgwMDFEREIyQyAvKiBlbnRyeV9w
b2ludHNfZ2xlc18xXzBfYXV0b2dlbi5jcHAgKi8sCisJCQkJNkUzNDRBQjUyMkJDNTdDODAwMURE
QjJDIC8qIGVudHJ5X3BvaW50c19nbGVzXzFfMF9hdXRvZ2VuLmggKi8sCiAJCQkJMzE1RUJFMDIx
RkNFNDU2MjAwQUM3QTg5IC8qIGVudHJ5X3BvaW50c19nbGVzXzJfMF9hdXRvZ2VuLmNwcCAqLywK
IAkJCQkzMTVFQkRGRTFGQ0U0NTYxMDBBQzdBODkgLyogZW50cnlfcG9pbnRzX2dsZXNfMl8wX2F1
dG9nZW4uaCAqLywKIAkJCQkzMTVFQkUwMDFGQ0U0NTYxMDBBQzdBODkgLyogZW50cnlfcG9pbnRz
X2dsZXNfM18wX2F1dG9nZW4uY3BwICovLAogCQkJCTMxNUVCREZEMUZDRTQ1NjEwMEFDN0E4OSAv
KiBlbnRyeV9wb2ludHNfZ2xlc18zXzBfYXV0b2dlbi5oICovLAogCQkJCTMxNUVCRTAxMUZDRTQ1
NjEwMEFDN0E4OSAvKiBlbnRyeV9wb2ludHNfZ2xlc18zXzFfYXV0b2dlbi5jcHAgKi8sCiAJCQkJ
MzE1RUJERkYxRkNFNDU2MTAwQUM3QTg5IC8qIGVudHJ5X3BvaW50c19nbGVzXzNfMV9hdXRvZ2Vu
LmggKi8sCisJCQkJNkUzNDRBQUYyMkJDMzVDMzAwMUREQjJDIC8qIGVudHJ5X3BvaW50c19nbGVz
X2V4dF9hdXRvZ2VuLmNwcCAqLywKKwkJCQk2RTM0NEFBRTIyQkMzNUMzMDAxRERCMkMgLyogZW50
cnlfcG9pbnRzX2dsZXNfZXh0X2F1dG9nZW4uaCAqLywKIAkJCQk1Q0IzMDBDNzFERTM5RTc1MDBE
MkM0MDUgLyogZ2xvYmFsX3N0YXRlLmNwcCAqLywKIAkJCQk1Q0IzMDBDODFERTM5RTc1MDBEMkM0
MDUgLyogZ2xvYmFsX3N0YXRlLmggKi8sCiAJCQkJMzE1RUJERkMxRkNFNDU2MTAwQUM3QTg5IC8q
IHByb2NfdGFibGUuaCAqLywKQEAgLTIwNzMsNiArMjA5OSwxNyBAQAogCQkJcGF0aCA9IENvbmZp
Z3VyYXRpb25zOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJNkVENzBBMDgy
MkNENjJFODAwODY4OENFIC8qIEdMRVMgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNo
aWxkcmVuID0gKAorCQkJCTZFRDcwQTA5MjJDRDYzMEUwMDg2ODhDRSAvKiBnbC5oICovLAorCQkJ
CTZFRDcwQTBBMjJDRDYzMEUwMDg2ODhDRSAvKiBnbGV4dC5oICovLAorCQkJCTZFRDcwQTBGMjJD
RDY4MjIwMDg2ODhDRSAvKiBnbGV4dF9hbmdsZS5oICovLAorCQkJCTZFRDcwQTBCMjJDRDYzMEUw
MDg2ODhDRSAvKiBnbHBsYXRmb3JtLmggKi8sCisJCQkpOworCQkJbmFtZSA9IEdMRVM7CisJCQlz
b3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQlBMDhDM0NEODE2RDZDQjM1MDAzRjBCODMg
LyogdGhpcmRfcGFydHkgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0g
KApAQCAtMjEwNCw2ICsyMTQxLDcgQEAKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4g
PSAoCiAJCQkJNUMxQkFBOTMxREZCNjBFMjAwMjkwNkJCIC8qIEVHTCAqLywKKwkJCQk2RUQ3MEEw
ODIyQ0Q2MkU4MDA4Njg4Q0UgLyogR0xFUyAqLywKIAkJCQk1QzFCQUE5NDFERkI2MEVBMDAyOTA2
QkIgLyogR0xFUzIgKi8sCiAJCQkJNUMxQkFBOTUxREZCNjBFRjAwMjkwNkJCIC8qIEdMRVMzICov
LAogCQkJCUZCMzlEMkJEMTIwMEYzRTYwMDA4OEU2OSAvKiBHTFNMQU5HICovLApAQCAtMjI2OSw2
ICsyMzA3LDcgQEAKIAkJCQkzMTVFQkRDOTFGQ0U0NEU0MDBBQzdBODkgLyogZHJpdmVyX3V0aWxz
LmggaW4gSGVhZGVycyAqLywKIAkJCQk1QzFCQUFBQTFERkI2MTI0MDAyOTA2QkIgLyogZWdsLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk1QzFCQUFBQjFERkI2MTI0MDAyOTA2QkIgLyogZWdsZXh0Lmgg
aW4gSGVhZGVycyAqLywKKwkJCQk2RUUyRkQyRDIyQkFFOTlDMDAxRDM2OUUgLyogZWdsZXh0X2Fu
Z2xlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1Q0IzMDRFMzFERTQxNjQ4MDBEMkM0MDUgLyogRUdM
SW1wbEZhY3RvcnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDMUJBQUFDMURGQjYxMjQwMDI5MDZC
QiAvKiBlZ2xwbGF0Zm9ybS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUNDRDU5NjcyMjg0Rjc5NjAw
MThGMkQ4IC8qIEVHTFN5bmMuaCBpbiBIZWFkZXJzICovLApAQCAtMjI3Nyw5ICsyMzE2LDEyIEBA
CiAJCQkJNUM1NUQ2QTMyMjgyNkI5RjAwQjVCQTJDIC8qIEVtdWxhdGVQcmVjaXNpb24uaCBpbiBI
ZWFkZXJzICovLAogCQkJCTVDQjMwNDk4MURFNDE1N0IwMEQyQzQwNSAvKiBlbnRyeV9wb2ludHNf
ZWdsLmggaW4gSGVhZGVycyAqLywKIAkJCQk1Q0IzMDQ5NjFERTQxNTdCMDBEMkM0MDUgLyogZW50
cnlfcG9pbnRzX2VnbF9leHQuaCBpbiBIZWFkZXJzICovLAorCQkJCTZFMzQ0QUIxMjJCQzM1QzMw
MDFEREIyQyAvKiBlbnRyeV9wb2ludHNfZW51bV9hdXRvZ2VuLmggaW4gSGVhZGVycyAqLywKKwkJ
CQk2RTM0NEFCNzIyQkM1N0M4MDAxRERCMkMgLyogZW50cnlfcG9pbnRzX2dsZXNfMV8wX2F1dG9n
ZW4uaCBpbiBIZWFkZXJzICovLAogCQkJCTMxNUVCRTA2MUZDRTQ1NjIwMEFDN0E4OSAvKiBlbnRy
eV9wb2ludHNfZ2xlc18yXzBfYXV0b2dlbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzE1RUJFMDUx
RkNFNDU2MjAwQUM3QTg5IC8qIGVudHJ5X3BvaW50c19nbGVzXzNfMF9hdXRvZ2VuLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkzMTVFQkUwNzFGQ0U0NTYyMDBBQzdBODkgLyogZW50cnlfcG9pbnRzX2ds
ZXNfM18xX2F1dG9nZW4uaCBpbiBIZWFkZXJzICovLAorCQkJCTZFMzQ0QUIyMjJCQzM1QzMwMDFE
REIyQyAvKiBlbnRyeV9wb2ludHNfZ2xlc19leHRfYXV0b2dlbi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNUMxREJERUIxQjA0MzhEMzAwMjM1NTUyIC8qIEVycm9yLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkzMTVFQkRFOTFGQ0U0NTJEMDBBQzdBODkgLyogRXJyb3JTdHJpbmdzLmggaW4gSGVhZGVycyAq
LywKIAkJCQk1Q0M3RDQ3MTE5MTAyNjIxMDAwQjhDMUYgLyogZXZlbnRfdHJhY2VyLmggaW4gSGVh
ZGVycyAqLywKQEAgLTIzMTIsOCArMjM1NCwxMCBAQAogCQkJCTVDQjMwMTI5MURFMzlGMUEwMEQy
QzQwNSAvKiBmdW5jdGlvbnNnbF9lbnVtcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUNCMzAxMkEx
REUzOUYxQTAwRDJDNDA1IC8qIGZ1bmN0aW9uc2dsX3R5cGVkZWZzLmggaW4gSGVhZGVycyAqLywK
IAkJCQk1Q0NENTk5NDIyODRGQzQwMDAxOEYyRDggLyogZ2VuZXJhdGVtaXAuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTZFRDcwQTBDMjJDRDYzMEUwMDg2ODhDRSAvKiBnbC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNUMxQkFBQTIxREZCNjEwRTAwMjkwNkJCIC8qIGdsMi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNUMxQkFBQTMxREZCNjEwRTAwMjkwNkJCIC8qIGdsMmV4dC5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJNkVFMkZEMkYyMkJBRTlDRDAwMUQzNjlFIC8qIGdsMmV4dF9hbmdsZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNUMxQkFBQTQxREZCNjEwRTAwMjkwNkJCIC8qIGdsMnBsYXRmb3JtLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk1QzFCQUE5QTFERkI2MEZGMDAyOTA2QkIgLyogZ2wzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk1QzFCQUE5QzFERkI2MEZGMDAyOTA2QkIgLyogZ2wzMS5oIGluIEhlYWRlcnMg
Ki8sCkBAIC0yMzIxLDggKzIzNjUsMTEgQEAKIAkJCQk1QzFCQUE5QjFERkI2MEZGMDAyOTA2QkIg
LyogZ2wzcGxhdGZvcm0uaCBpbiBIZWFkZXJzICovLAogCQkJCTVDQ0Q1OTYwMjI4NEY3OTYwMDE4
RjJEOCAvKiBHTEVTMVJlbmRlcmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1Q0NENTk2MjIyODRG
Nzk2MDAxOEYyRDggLyogR0xFUzFTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNkVENzBBMEQy
MkNENjMwRTAwODY4OENFIC8qIGdsZXh0LmggaW4gSGVhZGVycyAqLywKKwkJCQk2RUQ3MEExMDIy
Q0Q2ODIyMDA4Njg4Q0UgLyogZ2xleHRfYW5nbGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDQjMw
NEVDMURFNDE2NDgwMEQyQzQwNSAvKiBHTEltcGxGYWN0b3J5LmggaW4gSGVhZGVycyAqLywKIAkJ
CQk1Q0IzMDRBMjFERTQxNTdCMDBEMkM0MDUgLyogZ2xvYmFsX3N0YXRlLmggaW4gSGVhZGVycyAq
LywKKwkJCQk2RUQ3MEEwRTIyQ0Q2MzBFMDA4Njg4Q0UgLyogZ2xwbGF0Zm9ybS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMzEwMTJFMkQxOEI5N0I5QjAwMzkwNjJGIC8qIGdsc2xhbmcuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTMxMDEyRTMyMThCOTdCOUIwMDM5MDYyRiAvKiBnbHNsYW5nX3RhYi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNUMxREJERjkxQjA0MzhEMzAwMjM1NTUyIC8qIEhhbmRsZUFsbG9j
YXRvci5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNjgzLDkgKzI3MzAsMTEgQEAKIAkJCQk1QzU1RDZC
MjIyODI2QkM4MDBCNUJBMkMgLyogRW11bGF0ZVByZWNpc2lvbi5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk1QzFCQUFCNTFERkI2RjU0MDAyOTA2QkIgLyogZW50cnlfcG9pbnRzX2VnbC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk1QzFCQUFCNjFERkI2RjU4MDAyOTA2QkIgLyogZW50cnlfcG9pbnRz
X2VnbF9leHQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNkUzNDRBQjYyMkJDNTdDODAwMUREQjJD
IC8qIGVudHJ5X3BvaW50c19nbGVzXzFfMF9hdXRvZ2VuLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTMxNUVCRTBBMUZDRTQ1NjIwMEFDN0E4OSAvKiBlbnRyeV9wb2ludHNfZ2xlc18yXzBfYXV0b2dl
bi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTVFQkUwODFGQ0U0NTYyMDBBQzdBODkgLyogZW50
cnlfcG9pbnRzX2dsZXNfM18wX2F1dG9nZW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzE1RUJF
MDkxRkNFNDU2MjAwQUM3QTg5IC8qIGVudHJ5X3BvaW50c19nbGVzXzNfMV9hdXRvZ2VuLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTZFMzQ0QUIzMjJCQzM1QzMwMDFEREIyQyAvKiBlbnRyeV9wb2lu
dHNfZ2xlc19leHRfYXV0b2dlbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1QzFEQkRFQTFCMDQz
OEQzMDAyMzU1NTIgLyogRXJyb3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzE1RUJERUYxRkNF
NDUyRDAwQUM3QTg5IC8qIGVzM19jb3B5X2NvbnZlcnNpb25fdGFibGVfYXV0b2dlbi5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk1Q0M3RDQ3MDE5MTAyNjIxMDAwQjhDMUYgLyogZXZlbnRfdHJhY2Vy
LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjczNiw3ICsyNzg1LDYgQEAKIAkJCQk1Q0NENTk3OTIy
ODRGQTgzMDAxOEYyRDggLyogSU9TdXJmYWNlU3VyZmFjZUNHTC5tbSBpbiBTb3VyY2VzICovLAog
CQkJCTMxNUVCRDlDMUZDRTQ0MzYwMEFDN0E4OSAvKiBJc0FTVERlcHRoQmVsb3dMaW1pdC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBMjY0RjhCNjE2OTc0REVEMDA2RkFBNUEgLyogTGV4ZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCi0JCQkJNUNCNUUxQTcxREZCOEFGNjAwRjkwRkM5IC8qIGxpYkVHTC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk1Q0IzMDRFRjFERTQxNjQ4MDBEMkM0MDUgLyogbG9hZF9m
dW5jdGlvbnNfdGFibGVfYXV0b2dlbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1Q0NENTk5NTIy
ODRGQzQwMDAxOEYyRDggLyogbG9hZGltYWdlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDQ0Q1
OTkyMjI4NEZDNDAwMDE4RjJEOCAvKiBsb2FkaW1hZ2VfZXRjLmNwcCBpbiBTb3VyY2VzICovLApk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvYWRqdXN0LWFuZ2xlLWluY2x1ZGUt
cGF0aHMuc2ggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9hZGp1c3QtYW5nbGUtaW5jbHVkZS1w
YXRocy5zaAppbmRleCBmNzU5M2U4NWMwZGM0MzRkYTczZDM3NzBlMThmZGYzNjRmYmViOTQzLi5i
NjgzZmRkMmMyYTBhZTJjZTQ2ZmU0ZWIyYjdkMWJmYzEzYzkxZWRkIDEwMDc1NQotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9hZGp1c3QtYW5nbGUtaW5jbHVkZS1wYXRocy5zaAorKysgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9hZGp1c3QtYW5nbGUtaW5jbHVkZS1wYXRocy5zaApAQCAt
MzEsNiArMzEsNyBAQCBmb3IgaSBpbiAkb3V0cHV0X2Rpci8qLmggOyBkbwogICAgIGlmIFsgISAt
ZiAkb3V0cHV0X2Rpci9hbmdsZS50aW1lc3RhbXAgXSB8fCBbICRpIC1udCAkb3V0cHV0X2Rpci9h
bmdsZS50aW1lc3RhbXAgXSA7IHRoZW4KICAgICAgICAgc2VkIC1lICcKIHMvXiNpbmNsdWRlIDxF
R0xcL1woLipcKT4vI2luY2x1ZGUgPEFOR0xFXC9cMT4vCitzL14jaW5jbHVkZSA8R0xFU1wvXCgu
KlwpPi8jaW5jbHVkZSA8QU5HTEVcL1wxPi8KIHMvXiNpbmNsdWRlIDxHTEVTMlwvXCguKlwpPi8j
aW5jbHVkZSA8QU5HTEVcL1wxPi8KIHMvXiNpbmNsdWRlIDxHTEVTM1wvXCguKlwpPi8jaW5jbHVk
ZSA8QU5HTEVcL1wxPi8KIHMvXiNpbmNsdWRlIDxLSFJcL1woLipcKT4vI2luY2x1ZGUgPEFOR0xF
XC9cMT4vCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUv
RnJhbWVidWZmZXJBdHRhY2htZW50LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJBTkdMRS9GcmFtZWJ1ZmZlckF0dGFjaG1lbnQuY3BwCmluZGV4IDgyMzg1NDFkZmQ3NjZhNmI5
NmJiOWVhMDQ2NWU5MzViNzhmN2IzZWUuLmNhZDg4M2RjYzAyMTBjYTc1ZTc5OWYzN2VlMTEyYWMw
MjljNjg0MDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdM
RS9GcmFtZWJ1ZmZlckF0dGFjaG1lbnQuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJBTkdMRS9GcmFtZWJ1ZmZlckF0dGFjaG1lbnQuY3BwCkBAIC0xNzgsMTIgKzE3OCw2
IEBAIEdMdWludCBGcmFtZWJ1ZmZlckF0dGFjaG1lbnQ6OmlkKCkgY29uc3QKICAgICByZXR1cm4g
bVJlc291cmNlLT5nZXRJZCgpOwogfQogCi1jb25zdCBJbWFnZUluZGV4ICZGcmFtZWJ1ZmZlckF0
dGFjaG1lbnQ6OmdldFRleHR1cmVJbWFnZUluZGV4KCkgY29uc3QKLXsKLSAgICBBU1NFUlQodHlw
ZSgpID09IEdMX1RFWFRVUkUpOwotICAgIHJldHVybiBtVGFyZ2V0LnRleHR1cmVJbmRleCgpOwot
fQotCiBUZXh0dXJlVGFyZ2V0IEZyYW1lYnVmZmVyQXR0YWNobWVudDo6Y3ViZU1hcEZhY2UoKSBj
b25zdAogewogICAgIEFTU0VSVChtVHlwZSA9PSBHTF9URVhUVVJFKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9GcmFtZWJ1ZmZlckF0dGFjaG1lbnQu
aCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9GcmFtZWJ1ZmZlckF0dGFj
aG1lbnQuaAppbmRleCAxMGQ4Yzk5MGI1NzA5Y2M5MmJkYmZhNWJlY2I1MjBmYTVmMDg0NTQ3Li4y
MGM0ZDU0YWFiYTNhNjAwYzU4NmM1ZTczMGNjYzdkNzE0NzIyOThhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvRnJhbWVidWZmZXJBdHRhY2htZW50LmgK
KysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL0ZyYW1lYnVmZmVyQXR0
YWNobWVudC5oCkBAIC0yMTYsNiArMjE2LDEyIEBAIGNsYXNzIEZyYW1lYnVmZmVyQXR0YWNobWVu
dE9iamVjdCA6IHB1YmxpYyBhbmdsZTo6U3ViamVjdAogICAgIHZpcnR1YWwgcng6OkZyYW1lYnVm
ZmVyQXR0YWNobWVudE9iamVjdEltcGwgKmdldEF0dGFjaG1lbnRJbXBsKCkgY29uc3QgPSAwOwog
fTsKIAoraW5saW5lIGNvbnN0IEltYWdlSW5kZXggJkZyYW1lYnVmZmVyQXR0YWNobWVudDo6Z2V0
VGV4dHVyZUltYWdlSW5kZXgoKSBjb25zdAoreworICAgIEFTU0VSVCh0eXBlKCkgPT0gR0xfVEVY
VFVSRSk7CisgICAgcmV0dXJuIG1UYXJnZXQudGV4dHVyZUluZGV4KCk7Cit9CisKIGlubGluZSBF
eHRlbnRzIEZyYW1lYnVmZmVyQXR0YWNobWVudDo6Z2V0U2l6ZSgpIGNvbnN0CiB7CiAgICAgQVNT
RVJUKG1SZXNvdXJjZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliQU5HTEUvdmFsaWRhdGlvbkVTMi5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliQU5HTEUvdmFsaWRhdGlvbkVTMi5jcHAKaW5kZXggMjU0ZGI1YjlkMzkzMjkwYjc1YmYxMjgx
MDNhNGU0NWVkZDhkODZjMS4uMzgxM2U3ZTJmMTUwNjRkNmQ5M2I0Yjk1NGJiYzY3MzhlYzQzYWEx
NyAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3ZhbGlk
YXRpb25FUzIuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS92
YWxpZGF0aW9uRVMyLmNwcApAQCAtMjU3Miw3ICsyNTcyLDggQEAgYm9vbCBWYWxpZGF0ZUJsaXRG
cmFtZWJ1ZmZlckFOR0xFKENvbnRleHQgKmNvbnRleHQsCiAgICAgICAgIGlmIChyZWFkQ29sb3JB
dHRhY2htZW50ICYmIGRyYXdDb2xvckF0dGFjaG1lbnQpCiAgICAgICAgIHsKICAgICAgICAgICAg
IGlmICghKHJlYWRDb2xvckF0dGFjaG1lbnQtPnR5cGUoKSA9PSBHTF9URVhUVVJFICYmCi0gICAg
ICAgICAgICAgICAgICByZWFkQ29sb3JBdHRhY2htZW50LT5nZXRUZXh0dXJlSW1hZ2VJbmRleCgp
LmdldFR5cGUoKSA9PSBUZXh0dXJlVHlwZTo6XzJEKSAmJgorICAgICAgICAgICAgICAgICAgKHJl
YWRDb2xvckF0dGFjaG1lbnQtPmdldFRleHR1cmVJbWFnZUluZGV4KCkuZ2V0VHlwZSgpID09IFRl
eHR1cmVUeXBlOjpfMkQgfHwKKyAgICAgICAgICAgICAgICAgICByZWFkQ29sb3JBdHRhY2htZW50
LT5nZXRUZXh0dXJlSW1hZ2VJbmRleCgpLmdldFR5cGUoKSA9PSBUZXh0dXJlVHlwZTo6UmVjdGFu
Z2xlKSkgJiYKICAgICAgICAgICAgICAgICByZWFkQ29sb3JBdHRhY2htZW50LT50eXBlKCkgIT0g
R0xfUkVOREVSQlVGRkVSICYmCiAgICAgICAgICAgICAgICAgcmVhZENvbG9yQXR0YWNobWVudC0+
dHlwZSgpICE9IEdMX0ZSQU1FQlVGRkVSX0RFRkFVTFQpCiAgICAgICAgICAgICB7CkBAIC0yNTg5
LDcgKzI1OTAsOCBAQCBib29sIFZhbGlkYXRlQmxpdEZyYW1lYnVmZmVyQU5HTEUoQ29udGV4dCAq
Y29udGV4dCwKICAgICAgICAgICAgICAgICBpZiAoYXR0YWNobWVudCkKICAgICAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgICAgIGlmICghKGF0dGFjaG1lbnQtPnR5cGUoKSA9PSBHTF9U
RVhUVVJFICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnQtPmdldFRleHR1
cmVJbWFnZUluZGV4KCkuZ2V0VHlwZSgpID09IFRleHR1cmVUeXBlOjpfMkQpICYmCisgICAgICAg
ICAgICAgICAgICAgICAgICAgIChhdHRhY2htZW50LT5nZXRUZXh0dXJlSW1hZ2VJbmRleCgpLmdl
dFR5cGUoKSA9PSBUZXh0dXJlVHlwZTo6XzJEIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICBhdHRhY2htZW50LT5nZXRUZXh0dXJlSW1hZ2VJbmRleCgpLmdldFR5cGUoKSA9PSBUZXh0dXJl
VHlwZTo6UmVjdGFuZ2xlKSkgJiYKICAgICAgICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnQt
PnR5cGUoKSAhPSBHTF9SRU5ERVJCVUZGRVIgJiYKICAgICAgICAgICAgICAgICAgICAgICAgIGF0
dGFjaG1lbnQtPnR5cGUoKSAhPSBHTF9GUkFNRUJVRkZFUl9ERUZBVUxUKQogICAgICAgICAgICAg
ICAgICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwCmluZGV4IDIxYTNhZDNjNmNlNWI3MTFjYzY1YjZjN2E4
NGIyYjNlZGZiOWExNTcuLjQ3MzdiNDkwODA3ZTQyY2M0OTE0ODliZTYzMTkyZjg2MDkyNzcyZTQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2UuY3BwCkBAIC0yNjc1LDcgKzI2NzUsMTEgQEAgV2ViR0xBbnkgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0UHJvZ3JhbVBhcmFtZXRlcihXZWJHTFByb2dyYW0qIHBy
b2dyYW0sIEcKICAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkFDVElWRV9BVFRSSUJVVEVTOgogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFDVElW
RV9VTklGT1JNUzoKKyNpZiBVU0UoQU5HTEUpCisgICAgICAgIG1fY29udGV4dC0+Z2V0UHJvZ3Jh
bWl2KG9iamVjdE9yWmVybyhwcm9ncmFtKSwgcG5hbWUsICZ2YWx1ZSk7CisjZWxzZQogICAgICAg
ICBtX2NvbnRleHQtPmdldE5vbkJ1aWx0SW5BY3RpdmVTeW1ib2xDb3VudChvYmplY3RPclplcm8o
cHJvZ3JhbSksIHBuYW1lLCAmdmFsdWUpOworI2VuZGlmIC8vIFVTRShBTkdMRSkKICAgICAgICAg
cmV0dXJuIHZhbHVlOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRQcm9ncmFtUGFyYW1ldGVyIiwgImlu
dmFsaWQgcGFyYW1ldGVyIG5hbWUiKTsKQEAgLTI5OTQsNyArMjk5OCwxMSBAQCBSZWZQdHI8V2Vi
R0xVbmlmb3JtTG9jYXRpb24+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFVuaWZvcm1M
b2NhdGlvbihXZWJHTAogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIEdDM0RpbnQgYWN0
aXZlVW5pZm9ybXMgPSAwOworI2lmIFVTRShBTkdMRSkKKyAgICBtX2NvbnRleHQtPmdldFByb2dy
YW1pdihvYmplY3RPclplcm8ocHJvZ3JhbSksIEdyYXBoaWNzQ29udGV4dDNEOjpBQ1RJVkVfVU5J
Rk9STVMsICZhY3RpdmVVbmlmb3Jtcyk7CisjZWxzZQogICAgIG1fY29udGV4dC0+Z2V0Tm9uQnVp
bHRJbkFjdGl2ZVN5bWJvbENvdW50KG9iamVjdE9yWmVybyhwcm9ncmFtKSwgR3JhcGhpY3NDb250
ZXh0M0Q6OkFDVElWRV9VTklGT1JNUywgJmFjdGl2ZVVuaWZvcm1zKTsKKyNlbmRpZgogICAgIGZv
ciAoR0MzRGludCBpID0gMDsgaSA8IGFjdGl2ZVVuaWZvcm1zOyBpKyspIHsKICAgICAgICAgQWN0
aXZlSW5mbyBpbmZvOwogICAgICAgICBpZiAoIW1fY29udGV4dC0+Z2V0QWN0aXZlVW5pZm9ybShv
YmplY3RPclplcm8ocHJvZ3JhbSksIGksIGluZm8pKQpAQCAtMzIwOCwxMSArMzIxNiwxOSBAQCBi
b29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmxpbmtQcm9ncmFtV2l0aG91dEludmFsaWRh
dGluZ0F0dHJpYkxvY2F0aW9ucyhXZQogCiAgICAgUmVmUHRyPFdlYkdMU2hhZGVyPiB2ZXJ0ZXhT
aGFkZXIgPSBwcm9ncmFtLT5nZXRBdHRhY2hlZFNoYWRlcihHcmFwaGljc0NvbnRleHQzRDo6VkVS
VEVYX1NIQURFUik7CiAgICAgUmVmUHRyPFdlYkdMU2hhZGVyPiBmcmFnbWVudFNoYWRlciA9IHBy
b2dyYW0tPmdldEF0dGFjaGVkU2hhZGVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFHTUVOVF9TSEFE
RVIpOwotICAgIGlmICghdmVydGV4U2hhZGVyIHx8ICF2ZXJ0ZXhTaGFkZXItPmlzVmFsaWQoKSB8
fCAhZnJhZ21lbnRTaGFkZXIgfHwgIWZyYWdtZW50U2hhZGVyLT5pc1ZhbGlkKCkgfHwgIW1fY29u
dGV4dC0+cHJlY2lzaW9uc01hdGNoKG9iamVjdE9yWmVybyh2ZXJ0ZXhTaGFkZXIuZ2V0KCkpLCBv
YmplY3RPclplcm8oZnJhZ21lbnRTaGFkZXIuZ2V0KCkpKSB8fCAhbV9jb250ZXh0LT5jaGVja1Zh
cnlpbmdzUGFja2luZyhvYmplY3RPclplcm8odmVydGV4U2hhZGVyLmdldCgpKSwgb2JqZWN0T3Ja
ZXJvKGZyYWdtZW50U2hhZGVyLmdldCgpKSkpIHsKKyAgICBpZiAoIXZlcnRleFNoYWRlciB8fCAh
dmVydGV4U2hhZGVyLT5pc1ZhbGlkKCkgfHwgIWZyYWdtZW50U2hhZGVyIHx8ICFmcmFnbWVudFNo
YWRlci0+aXNWYWxpZCgpKSB7CiAgICAgICAgIHByb2dyYW0tPnNldExpbmtTdGF0dXMoZmFsc2Up
OwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCisjaWYgIVVTRShBTkdMRSkKKyAgICBp
ZiAoIW1fY29udGV4dC0+cHJlY2lzaW9uc01hdGNoKG9iamVjdE9yWmVybyh2ZXJ0ZXhTaGFkZXIu
Z2V0KCkpLCBvYmplY3RPclplcm8oZnJhZ21lbnRTaGFkZXIuZ2V0KCkpKQorICAgICAgICB8fCAh
bV9jb250ZXh0LT5jaGVja1ZhcnlpbmdzUGFja2luZyhvYmplY3RPclplcm8odmVydGV4U2hhZGVy
LmdldCgpKSwgb2JqZWN0T3JaZXJvKGZyYWdtZW50U2hhZGVyLmdldCgpKSkpIHsKKyAgICAgICAg
cHJvZ3JhbS0+c2V0TGlua1N0YXR1cyhmYWxzZSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisjZW5kaWYKKwogICAgIG1fY29udGV4dC0+bGlua1Byb2dyYW0ob2JqZWN0T3JaZXJvKHBy
b2dyYW0pKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCmluZGV4IDQ5ZWJhN2EyZmQ5YzQy
OTU4M2Y3M2RjN2EyYTZmZDQyZjg4YTM4NDguLjNjZjU4ZWI4MzNhMWRlZDAyOTE2NzlmMGJmNjNl
ZDM0YjRmYjA0MDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dDNELmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NDb250ZXh0M0QuaApAQCAtNzEsNiArNzEsOSBAQCB0eXBlZGVmIENHTENvbnRl
eHRPYmogUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRDsKIAogI2lmIFVTRShBTkdMRSkKIHR5cGVk
ZWYgdm9pZCogUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRDsKK3R5cGVkZWYgdm9pZCogUGxhdGZv
cm1HcmFwaGljc0NvbnRleHQzRERpc3BsYXk7Cit0eXBlZGVmIHZvaWQqIFBsYXRmb3JtR3JhcGhp
Y3NDb250ZXh0M0RTdXJmYWNlOwordHlwZWRlZiB2b2lkKiBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4
dDNEQ29uZmlnOwogI2VuZGlmIC8vIFVTRShBTkdMRSkKIAogT0JKQ19DTEFTUyBDQUxheWVyOwpA
QCAtMTA1NCwxNCArMTA1NywxOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBnZXRJbnRlZ2VydihHQzNE
ZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpOwogICAgIHZvaWQgZ2V0SW50ZWdlcjY0dihHQzNE
ZW51bSBwbmFtZSwgR0MzRGludDY0KiB2YWx1ZSk7CiAgICAgdm9pZCBnZXRQcm9ncmFtaXYoUGxh
dGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpOwor
I2lmICFVU0UoQU5HTEUpCiAgICAgdm9pZCBnZXROb25CdWlsdEluQWN0aXZlU3ltYm9sQ291bnQo
UGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUp
OworI2VuZGlmIC8vICFVU0UoQU5HTEUpCiAgICAgU3RyaW5nIGdldFByb2dyYW1JbmZvTG9nKFBs
YXRmb3JtM0RPYmplY3QpOwogICAgIFN0cmluZyBnZXRVbm1hbmdsZWRJbmZvTG9nKFBsYXRmb3Jt
M0RPYmplY3RbMl0sIEdDM0RzaXplaSwgY29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCBnZXRSZW5k
ZXJidWZmZXJQYXJhbWV0ZXJpdihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNE
aW50KiB2YWx1ZSk7CiAgICAgdm9pZCBnZXRTaGFkZXJpdihQbGF0Zm9ybTNET2JqZWN0LCBHQzNE
ZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpOwogICAgIFN0cmluZyBnZXRTaGFkZXJJbmZvTG9n
KFBsYXRmb3JtM0RPYmplY3QpOwogICAgIHZvaWQgZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KEdD
M0RlbnVtIHNoYWRlclR5cGUsIEdDM0RlbnVtIHByZWNpc2lvblR5cGUsIEdDM0RpbnQqIHJhbmdl
LCBHQzNEaW50KiBwcmVjaXNpb24pOworI2lmICFVU0UoQU5HTEUpCiAgICAgU3RyaW5nIGdldFNo
YWRlclNvdXJjZShQbGF0Zm9ybTNET2JqZWN0KTsKKyNlbmRpZiAvLyAhVVNFKEFOR0xFKQogICAg
IFN0cmluZyBnZXRTdHJpbmcoR0MzRGVudW0gbmFtZSk7CiAgICAgdm9pZCBnZXRUZXhQYXJhbWV0
ZXJmdihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEZmxvYXQqIHZhbHVlKTsK
ICAgICB2b2lkIGdldFRleFBhcmFtZXRlcml2KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5h
bWUsIEdDM0RpbnQqIHZhbHVlKTsKQEAgLTExMjcsOCArMTEzNCwxMCBAQCBwdWJsaWM6CiAKICAg
ICB2b2lkIHVzZVByb2dyYW0oUGxhdGZvcm0zRE9iamVjdCk7CiAgICAgdm9pZCB2YWxpZGF0ZVBy
b2dyYW0oUGxhdGZvcm0zRE9iamVjdCk7CisjaWYgIVVTRShBTkdMRSkKICAgICBib29sIGNoZWNr
VmFyeWluZ3NQYWNraW5nKFBsYXRmb3JtM0RPYmplY3QgdmVydGV4U2hhZGVyLCBQbGF0Zm9ybTNE
T2JqZWN0IGZyYWdtZW50U2hhZGVyKSBjb25zdDsKICAgICBib29sIHByZWNpc2lvbnNNYXRjaChQ
bGF0Zm9ybTNET2JqZWN0IHZlcnRleFNoYWRlciwgUGxhdGZvcm0zRE9iamVjdCBmcmFnbWVudFNo
YWRlcikgY29uc3Q7CisjZW5kaWYKIAogICAgIHZvaWQgdmVydGV4QXR0cmliMWYoR0MzRHVpbnQg
aW5kZXgsIEdDM0RmbG9hdCB4KTsKICAgICB2b2lkIHZlcnRleEF0dHJpYjFmdihHQzNEdWludCBp
bmRleCwgY29uc3QgR0MzRGZsb2F0KiB2YWx1ZXMpOwpAQCAtMTE4Niw2ICsxMTk1LDExIEBAIHB1
YmxpYzoKICAgICB2b2lkIHVwZGF0ZUZyYW1lYnVmZmVyVGV4dHVyZUJhY2tpbmdTdG9yZUZyb21M
YXllcigpOwogICAgIHZvaWQgdXBkYXRlQ0dMQ29udGV4dCgpOwogI2VuZGlmCisKKyNpZiBVU0Uo
QU5HTEUpICYmIFBMQVRGT1JNKE1BQykKKyAgICB2b2lkIGFsbG9jYXRlSU9TdXJmYWNlQmFja2lu
Z1N0b3JlKEludFNpemUpOworICAgIHZvaWQgdXBkYXRlRnJhbWVidWZmZXJUZXh0dXJlQmFja2lu
Z1N0b3JlRnJvbUxheWVyKCk7CisjZW5kaWYKICNlbmRpZiAvLyBQTEFURk9STShDT0NPQSkKIAog
ICAgIHZvaWQgc2V0Q29udGV4dFZpc2liaWxpdHkoYm9vbCk7CkBAIC0xMzYyLDcgKzEzNzYsMTAg
QEAgcHJpdmF0ZToKICNpZiBQTEFURk9STShDT0NPQSkKICAgICBSZXRhaW5QdHI8V2ViR0xMYXll
cj4gbV93ZWJHTExheWVyOwogICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgbV9jb250ZXh0
T2JqIHsgbnVsbHB0ciB9OwotI2VuZGlmCisjaWYgVVNFKEFOR0xFKQorICAgIFBsYXRmb3JtR3Jh
cGhpY3NDb250ZXh0M0REaXNwbGF5IG1fZGlzcGxheU9iaiB7IG51bGxwdHIgfTsKKyNlbmRpZiAv
LyBVU0UoQU5HTEUpCisjZW5kaWYgLy8gUExBVEZPUk0oQ09DT0EpCiAKICNpZiBQTEFURk9STShX
SU4pICYmIFVTRShDQSkKICAgICBSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBtX3dlYkdMTGF5ZXI7
CkBAIC0xMzk2LDYgKzE0MTMsNyBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgfTsKIAorI2lm
ICFVU0UoQU5HTEUpCiAgICAgLy8gRklYTUU6IFNoYWRlcnMgYXJlIG5ldmVyIHJlbW92ZWQgZnJv
bSB0aGlzIG1hcCwgZXZlbiBpZiB0aGV5IGFuZCB0aGVpciBwcm9ncmFtIGFyZSBkZWxldGVkLgog
ICAgIC8vIFRoaXMgaXMgYmFkLCBhbmQgaXQgYWxzbyByZWxpZXMgb24gdGhlIGZhY3Qgd2UgbmV2
ZXIgcmV1c2UgUGxhdGZvcm0zRE9iamVjdCBudW1iZXJzLgogICAgIHR5cGVkZWYgSGFzaE1hcDxQ
bGF0Zm9ybTNET2JqZWN0LCBTaGFkZXJTb3VyY2VFbnRyeT4gU2hhZGVyU291cmNlTWFwOwpAQCAt
MTQzNCw2ICsxNDUyLDcgQEAgcHJpdmF0ZToKICAgICBPcHRpb25hbDxTdHJpbmc+IG9yaWdpbmFs
U3ltYm9sSW5TaGFkZXJTb3VyY2VNYXAoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIsIEFOR0xFU2hh
ZGVyU3ltYm9sVHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lKTsKIAogICAgIHN0ZDo6dW5pcXVlX3B0
cjxTaGFkZXJOYW1lSGFzaD4gbmFtZUhhc2hNYXBGb3JTaGFkZXJzOworI2VuZGlmIC8vICFVU0Uo
QU5HTEUpCiAKICNpZiAhUExBVEZPUk0oQ09DT0EpICYmIFVTRShPUEVOR0xfRVMpCiAgICAgZnJp
ZW5kIGNsYXNzIEV4dGVuc2lvbnMzRE9wZW5HTEVTOwpAQCAtMTQ1Myw3ICsxNDcyLDkgQEAgcHJp
dmF0ZToKICAgICBSZW5kZXJTdHlsZSBtX3JlbmRlclN0eWxlOwogICAgIFZlY3RvcjxWZWN0b3I8
ZmxvYXQ+PiBtX3ZlcnRleEFycmF5OwogCisjaWYgIVVTRShBTkdMRSkKICAgICBBTkdMRVdlYktp
dEJyaWRnZSBtX2NvbXBpbGVyOworI2VuZGlmCiAKICAgICBHQzNEdWludCBtX3RleHR1cmUgeyAw
IH07CiAgICAgR0MzRHVpbnQgbV9mYm8geyAwIH07CkBAIC0xNDY5LDYgKzE0OTAsMTAgQEAgcHJp
dmF0ZToKICAgICBib29sIG1fbGF5ZXJDb21wb3NpdGVkIHsgZmFsc2UgfTsKICAgICBHQzNEdWlu
dCBtX2ludGVybmFsQ29sb3JGb3JtYXQgeyAwIH07CiAKKyNpZiBVU0UoQU5HTEUpCisgICAgUGxh
dGZvcm1HcmFwaGljc0NvbnRleHQzRFN1cmZhY2UgbV9wYnVmZmVyOworI2VuZGlmCisKICAgICBz
dHJ1Y3QgR3JhcGhpY3NDb250ZXh0M0RTdGF0ZSB7CiAgICAgICAgIEdDM0R1aW50IGJvdW5kRkJP
IHsgMCB9OwogICAgICAgICBHQzNEZW51bSBhY3RpdmVUZXh0dXJlVW5pdCB7IEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFMCB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvYW5nbGUvRXh0ZW5zaW9uczNEQU5HTEUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvYW5nbGUvRXh0ZW5zaW9uczNEQU5HTEUuY3BwCmluZGV4IDVlZjkwMTE3
NWMwMzg3NzQyZWY5YTZjZTcxMDAwMTkwOGI0ZGU2MGMuLmFhMTQzZDA5MTE3M2E2YWEwN2E5Y2Uy
NjdjODg3OTExOTRkNWUwMzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2FuZ2xlL0V4dGVuc2lvbnMzREFOR0xFLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9FeHRlbnNpb25zM0RBTkdMRS5jcHAKQEAgLTMyLDYgKzMy
LDExIEBACiAKICNpbmNsdWRlIDxBTkdMRS9lbnRyeV9wb2ludHNfZ2xlc18yXzBfYXV0b2dlbi5o
PgogI2luY2x1ZGUgPEFOR0xFL2VudHJ5X3BvaW50c19nbGVzXzNfMF9hdXRvZ2VuLmg+CisvLyBT
a2lwIHRoZSBpbmNsdXNpb24gb2YgQU5HTEUncyBleHBsaWNpdCBjb250ZXh0IGVudHJ5IHBvaW50
cyBmb3Igbm93LgorI2RlZmluZSBHTF9BTkdMRV9leHBsaWNpdF9jb250ZXh0CisjZGVmaW5lIEdM
X0FOR0xFX2V4cGxpY2l0X2NvbnRleHRfZ2xlczEKK3R5cGVkZWYgdm9pZCogR0xlZ2xDb250ZXh0
OworI2luY2x1ZGUgPEFOR0xFL2VudHJ5X3BvaW50c19nbGVzX2V4dF9hdXRvZ2VuLmg+CiAKIC8v
IE5vdGU6IHRoaXMgZmlsZSBjYW4ndCBiZSBjb21waWxlZCBpbiB0aGUgc2FtZSB1bmlmaWVkIHNv
dXJjZSBmaWxlCiAvLyBhcyBvdGhlcnMgd2hpY2ggaW5jbHVkZSB0aGUgc3lzdGVtJ3MgT3BlbkdM
IGhlYWRlcnMuCkBAIC01MSw4ICs1Niw4IEBAIEV4dGVuc2lvbnMzREFOR0xFOjpFeHRlbnNpb25z
M0RBTkdMRShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgYm9vbCB1c2VJbmRleGVkCiB7CiAg
ICAgLy8gRklYTUU6IGlkZWFsbHksIHJlbW92ZSB0aGlzIGluaXRpYWxpemF0aW9uIGFsdG9nZXRo
ZXIuIEFOR0xFCiAgICAgLy8gc3Vic3VtZXMgdGhlIHJlc3BvbnNpYmlsaXR5IGZvciBncmFwaGlj
cyBkcml2ZXIgd29ya2Fyb3VuZHMuCi0gICAgbV92ZW5kb3IgPSBTdHJpbmcocmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBjaGFyKj4oOjpnbEdldFN0cmluZyhHTF9WRU5ET1IpKSk7Ci0gICAgbV9yZW5k
ZXJlciA9IFN0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPig6OmdsR2V0U3RyaW5n
KEdMX1JFTkRFUkVSKSkpOworICAgIG1fdmVuZG9yID0gU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgY2hhcio+KGdsOjpHZXRTdHJpbmcoR0xfVkVORE9SKSkpOworICAgIG1fcmVuZGVyZXIg
PSBTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oZ2w6OkdldFN0cmluZyhHTF9S
RU5ERVJFUikpKTsKIAogICAgIFZlY3RvcjxTdHJpbmc+IHZlbmRvckNvbXBvbmVudHMgPSBtX3Zl
bmRvci5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpLnNwbGl0KCcgJyk7CiAgICAgaWYgKHZlbmRv
ckNvbXBvbmVudHMuY29udGFpbnMoIm52aWRpYSIpKQpAQCAtNzIsNjIgKzc3LDIyIEBAIGJvb2wg
RXh0ZW5zaW9uczNEQU5HTEU6OnN1cHBvcnRzKGNvbnN0IFN0cmluZyYgbmFtZSkKICAgICBpZiAo
IW1faW5pdGlhbGl6ZWRBdmFpbGFibGVFeHRlbnNpb25zKQogICAgICAgICBpbml0aWFsaXplQXZh
aWxhYmxlRXh0ZW5zaW9ucygpOwogCi0gICAgLy8gV2UgZXhwbGljaXRseSBkbyBub3Qgc3VwcG9y
dCB0aGlzIGV4dGVuc2lvbiB1bnRpbAotICAgIC8vIHdlIGZpeCB0aGUgZm9sbG93aW5nIGJ1ZzoK
LSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ5NzM0Ci0g
ICAgLy8gRklYTUU6IGdpdmVuIHRoYXQgQU5HTEUgaXMgaW4gdXNlLCByZXdyaXRlIHRoaXMgaW4g
dGVybXMgb2YKLSAgICAvLyBBTkdMRSBxdWVyaWVzIGFuZCBlbmFibGUgdGhpcyBleHRlbnNpb24u
Ci0gICAgaWYgKG5hbWUgPT0gIkdMX0FOR0xFX3RyYW5zbGF0ZWRfc2hhZGVyX3NvdXJjZSIpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQogICAgIHJldHVybiBzdXBwb3J0c0V4dGVuc2lvbihuYW1l
KTsKIH0KIAogdm9pZCBFeHRlbnNpb25zM0RBTkdMRTo6ZW5zdXJlRW5hYmxlZChjb25zdCBTdHJp
bmcmIG5hbWUpCiB7Ci0gICAgaWYgKG5hbWUgPT0gIkdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZl
cyIpIHsKLSAgICAgICAgLy8gRW5hYmxlIHN1cHBvcnQgaW4gQU5HTEUgKGlmIG5vdCBlbmFibGVk
IGFscmVhZHkpLgotICAgICAgICBBTkdMRVdlYktpdEJyaWRnZSYgY29tcGlsZXIgPSBtX2NvbnRl
eHQtPm1fY29tcGlsZXI7Ci0gICAgICAgIFNoQnVpbHRJblJlc291cmNlcyBBTkdMRVJlc291cmNl
cyA9IGNvbXBpbGVyLmdldFJlc291cmNlcygpOwotICAgICAgICBpZiAoIUFOR0xFUmVzb3VyY2Vz
Lk9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcykgewotICAgICAgICAgICAgQU5HTEVSZXNvdXJjZXMu
T0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzID0gMTsKLSAgICAgICAgICAgIGNvbXBpbGVyLnNldFJl
c291cmNlcyhBTkdMRVJlc291cmNlcyk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKG5hbWUg
PT0gIkdMX0VYVF9kcmF3X2J1ZmZlcnMiKSB7Ci0gICAgICAgIC8vIEVuYWJsZSBzdXBwb3J0IGlu
IEFOR0xFIChpZiBub3QgZW5hYmxlZCBhbHJlYWR5KS4KLSAgICAgICAgQU5HTEVXZWJLaXRCcmlk
Z2UmIGNvbXBpbGVyID0gbV9jb250ZXh0LT5tX2NvbXBpbGVyOwotICAgICAgICBTaEJ1aWx0SW5S
ZXNvdXJjZXMgQU5HTEVSZXNvdXJjZXMgPSBjb21waWxlci5nZXRSZXNvdXJjZXMoKTsKLSAgICAg
ICAgaWYgKCFBTkdMRVJlc291cmNlcy5FWFRfZHJhd19idWZmZXJzKSB7Ci0gICAgICAgICAgICBB
TkdMRVJlc291cmNlcy5FWFRfZHJhd19idWZmZXJzID0gMTsKLSAgICAgICAgICAgIG1fY29udGV4
dC0+Z2V0SW50ZWdlcnYoRXh0ZW5zaW9uczNEOjpNQVhfRFJBV19CVUZGRVJTX0VYVCwgJkFOR0xF
UmVzb3VyY2VzLk1heERyYXdCdWZmZXJzKTsKLSAgICAgICAgICAgIGNvbXBpbGVyLnNldFJlc291
cmNlcyhBTkdMRVJlc291cmNlcyk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKG5hbWUgPT0g
IkdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QiKSB7Ci0gICAgICAgIC8vIEVuYWJsZSBzdXBwb3J0
IGluIEFOR0xFIChpZiBub3QgZW5hYmxlZCBhbHJlYWR5KS4KLSAgICAgICAgQU5HTEVXZWJLaXRC
cmlkZ2UmIGNvbXBpbGVyID0gbV9jb250ZXh0LT5tX2NvbXBpbGVyOwotICAgICAgICBTaEJ1aWx0
SW5SZXNvdXJjZXMgQU5HTEVSZXNvdXJjZXMgPSBjb21waWxlci5nZXRSZXNvdXJjZXMoKTsKLSAg
ICAgICAgaWYgKCFBTkdMRVJlc291cmNlcy5FWFRfc2hhZGVyX3RleHR1cmVfbG9kKSB7Ci0gICAg
ICAgICAgICBBTkdMRVJlc291cmNlcy5FWFRfc2hhZGVyX3RleHR1cmVfbG9kID0gMTsKLSAgICAg
ICAgICAgIGNvbXBpbGVyLnNldFJlc291cmNlcyhBTkdMRVJlc291cmNlcyk7Ci0gICAgICAgIH0K
LSAgICB9IGVsc2UgaWYgKG5hbWUgPT0gIkdMX0VYVF9mcmFnX2RlcHRoIikgewotICAgICAgICAv
LyBFbmFibGUgc3VwcG9ydCBpbiBBTkdMRSAoaWYgbm90IGVuYWJsZWQgYWxyZWFkeSkuCi0gICAg
ICAgIEFOR0xFV2ViS2l0QnJpZGdlJiBjb21waWxlciA9IG1fY29udGV4dC0+bV9jb21waWxlcjsK
LSAgICAgICAgU2hCdWlsdEluUmVzb3VyY2VzIEFOR0xFUmVzb3VyY2VzID0gY29tcGlsZXIuZ2V0
UmVzb3VyY2VzKCk7Ci0gICAgICAgIGlmICghQU5HTEVSZXNvdXJjZXMuRVhUX2ZyYWdfZGVwdGgp
IHsKLSAgICAgICAgICAgIEFOR0xFUmVzb3VyY2VzLkVYVF9mcmFnX2RlcHRoID0gMTsKLSAgICAg
ICAgICAgIGNvbXBpbGVyLnNldFJlc291cmNlcyhBTkdMRVJlc291cmNlcyk7Ci0gICAgICAgIH0K
KyAgICAvLyBFbmFibGUgc3VwcG9ydCBpbiBBTkdMRSAoaWYgbm90IGVuYWJsZWQgYWxyZWFkeSku
CisgICAgaWYgKG1fcmVxdWVzdGFibGVFeHRlbnNpb25zLmNvbnRhaW5zKG5hbWUpICYmICFtX2Vu
YWJsZWRFeHRlbnNpb25zLmNvbnRhaW5zKG5hbWUpKSB7CisgICAgICAgIG1fY29udGV4dC0+bWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgICAgIGdsOjpSZXF1ZXN0RXh0ZW5zaW9uQU5HTEUobmFt
ZS5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgIG1fZW5hYmxlZEV4dGVuc2lvbnMuYWRkKG5hbWUp
OwogICAgIH0KIH0KIAogYm9vbCBFeHRlbnNpb25zM0RBTkdMRTo6aXNFbmFibGVkKGNvbnN0IFN0
cmluZyYgbmFtZSkKIHsKLSAgICBpZiAobmFtZSA9PSAiR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRp
dmVzIikgewotICAgICAgICBBTkdMRVdlYktpdEJyaWRnZSYgY29tcGlsZXIgPSBtX2NvbnRleHQt
Pm1fY29tcGlsZXI7Ci0gICAgICAgIHJldHVybiBjb21waWxlci5nZXRSZXNvdXJjZXMoKS5PRVNf
c3RhbmRhcmRfZGVyaXZhdGl2ZXM7Ci0gICAgfQotICAgIHJldHVybiBzdXBwb3J0cyhuYW1lKTsK
KyAgICByZXR1cm4gbV9hdmFpbGFibGVFeHRlbnNpb25zLmNvbnRhaW5zKG5hbWUpIHx8IG1fZW5h
YmxlZEV4dGVuc2lvbnMuY29udGFpbnMobmFtZSk7CiB9CiAKIGludCBFeHRlbnNpb25zM0RBTkdM
RTo6Z2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQigpCkBAIC0xMzcsNTEgKzEwMiwxNyBAQCBpbnQg
RXh0ZW5zaW9uczNEQU5HTEU6OmdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKQogCiBTdHJpbmcg
RXh0ZW5zaW9uczNEQU5HTEU6OmdldFRyYW5zbGF0ZWRTaGFkZXJTb3VyY2VBTkdMRShQbGF0Zm9y
bTNET2JqZWN0IHNoYWRlcikKIHsKLSAgICAvLyBGSVhNRTogcG9ydCB0byB1c2UgQU5HTEUncyBp
bXBsZW1lbnRhdGlvbiBkaXJlY3RseS4KLSAgICBBU1NFUlQoc2hhZGVyKTsKLSAgICBpbnQgR0xz
aGFkZXJUeXBlOwotICAgIEFOR0xFU2hhZGVyVHlwZSBzaGFkZXJUeXBlOwotCi0gICAgQU5HTEVX
ZWJLaXRCcmlkZ2UmIGNvbXBpbGVyID0gbV9jb250ZXh0LT5tX2NvbXBpbGVyOwotCi0gICAgbV9j
b250ZXh0LT5nZXRTaGFkZXJpdihzaGFkZXIsIEdyYXBoaWNzQ29udGV4dDNEOjpTSEFERVJfVFlQ
RSwgJkdMc2hhZGVyVHlwZSk7Ci0KLSAgICBpZiAoR0xzaGFkZXJUeXBlID09IEdyYXBoaWNzQ29u
dGV4dDNEOjpWRVJURVhfU0hBREVSKQotICAgICAgICBzaGFkZXJUeXBlID0gU0hBREVSX1RZUEVf
VkVSVEVYOwotICAgIGVsc2UgaWYgKEdMc2hhZGVyVHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6
RlJBR01FTlRfU0hBREVSKQotICAgICAgICBzaGFkZXJUeXBlID0gU0hBREVSX1RZUEVfRlJBR01F
TlQ7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsgLy8gSW52YWxpZCBz
aGFkZXIgdHlwZS4KLQotICAgIEhhc2hNYXA8UGxhdGZvcm0zRE9iamVjdCwgR3JhcGhpY3NDb250
ZXh0M0Q6OlNoYWRlclNvdXJjZUVudHJ5Pjo6aXRlcmF0b3IgcmVzdWx0ID0gbV9jb250ZXh0LT5t
X3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7Ci0KLSAgICBpZiAocmVzdWx0ID09IG1fY29u
dGV4dC0+bV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpCisgICAgaW50IHNvdXJjZUxlbmd0aCA9IDA7
CisgICAgbV9jb250ZXh0LT5nZXRTaGFkZXJpdihzaGFkZXIsIEdMX1RSQU5TTEFURURfU0hBREVS
X1NPVVJDRV9MRU5HVEhfQU5HTEUsICZzb3VyY2VMZW5ndGgpOworICAgIGlmICghc291cmNlTGVu
Z3RoKQogICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLQotICAgIEdyYXBoaWNzQ29udGV4
dDNEOjpTaGFkZXJTb3VyY2VFbnRyeSYgZW50cnkgPSByZXN1bHQtPnZhbHVlOwotCi0gICAgU3Ry
aW5nIHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2U7Ci0gICAgU3RyaW5nIHNoYWRlckluZm9Mb2c7Ci0g
ICAgdWludDY0X3QgZXh0cmFDb21waWxlT3B0aW9ucyA9IFNIX0NMQU1QX0lORElSRUNUX0FSUkFZ
X0JPVU5EUyB8IFNIX1VORk9MRF9TSE9SVF9DSVJDVUlUIHwgU0hfSU5JVF9PVVRQVVRfVkFSSUFC
TEVTIHwgU0hfRU5GT1JDRV9QQUNLSU5HX1JFU1RSSUNUSU9OUyB8IFNIX0xJTUlUX0VYUFJFU1NJ
T05fQ09NUExFWElUWSB8IFNIX0xJTUlUX0NBTExfU1RBQ0tfREVQVEggfCBTSF9JTklUSUFMSVpF
X1VOSU5JVElBTElaRURfTE9DQUxTOwotCi0gICAgaWYgKG1fcmVxdWlyZXNCdWlsdEluRnVuY3Rp
b25FbXVsYXRpb24pCi0gICAgICAgIGV4dHJhQ29tcGlsZU9wdGlvbnMgfD0gU0hfRU1VTEFURV9B
QlNfSU5UX0ZVTkNUSU9OOwotCi0gICAgVmVjdG9yPHN0ZDo6cGFpcjxBTkdMRVNoYWRlclN5bWJv
bFR5cGUsIHNoOjpTaGFkZXJWYXJpYWJsZT4+IHN5bWJvbHM7Ci0gICAgYm9vbCBpc1ZhbGlkID0g
Y29tcGlsZXIuY29tcGlsZVNoYWRlclNvdXJjZShlbnRyeS5zb3VyY2UudXRmOCgpLmRhdGEoKSwg
c2hhZGVyVHlwZSwgdHJhbnNsYXRlZFNoYWRlclNvdXJjZSwgc2hhZGVySW5mb0xvZywgc3ltYm9s
cywgZXh0cmFDb21waWxlT3B0aW9ucyk7Ci0KLSAgICBlbnRyeS5sb2cgPSBzaGFkZXJJbmZvTG9n
OwotICAgIGVudHJ5LmlzVmFsaWQgPSBpc1ZhbGlkOwotCi0gICAgZm9yIChjb25zdCBzdGQ6OnBh
aXI8QU5HTEVTaGFkZXJTeW1ib2xUeXBlLCBzaDo6U2hhZGVyVmFyaWFibGU+JiBwYWlyIDogc3lt
Ym9scykgewotICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSA9IHBhaXIuc2Vjb25kLm5h
bWU7Ci0gICAgICAgIGVudHJ5LnN5bWJvbE1hcChwYWlyLmZpcnN0KS5zZXQoU3RyaW5nKG5hbWUu
Y19zdHIoKSwgbmFtZS5sZW5ndGgoKSksIHBhaXIuc2Vjb25kKTsKLSAgICB9Ci0KLSAgICBpZiAo
IWlzVmFsaWQpCisgICAgVmVjdG9yPEdMY2hhcj4gbmFtZShzb3VyY2VMZW5ndGgpOyAvLyBHTF9U
UkFOU0xBVEVEX1NIQURFUl9TT1VSQ0VfTEVOR1RIX0FOR0xFIGluY2x1ZGVzIG51bGwgdGVybWlu
YXRpb24uCisgICAgaW50IHJldHVybmVkTGVuZ3RoID0gMDsKKyAgICBnbDo6R2V0VHJhbnNsYXRl
ZFNoYWRlclNvdXJjZUFOR0xFKHNoYWRlciwgc291cmNlTGVuZ3RoLCAmcmV0dXJuZWRMZW5ndGgs
IG5hbWUuZGF0YSgpKTsKKyAgICBpZiAoIXJldHVybmVkTGVuZ3RoKQogICAgICAgICByZXR1cm4g
ZW1wdHlTdHJpbmcoKTsKLQotICAgIHJldHVybiB0cmFuc2xhdGVkU2hhZGVyU291cmNlOworICAg
IEFTU0VSVChyZXR1cm5lZExlbmd0aCA9PSBzb3VyY2VMZW5ndGgpOworICAgIHJldHVybiBTdHJp
bmcobmFtZS5kYXRhKCksIHJldHVybmVkTGVuZ3RoKTsKIH0KIAogdm9pZCBFeHRlbnNpb25zM0RB
TkdMRTo6aW5pdGlhbGl6ZUF2YWlsYWJsZUV4dGVuc2lvbnMoKQpAQCAtMTkwLDExICsxMjEsMTcg
QEAgdm9pZCBFeHRlbnNpb25zM0RBTkdMRTo6aW5pdGlhbGl6ZUF2YWlsYWJsZUV4dGVuc2lvbnMo
KQogICAgICAgICBHTGludCBudW1FeHRlbnNpb25zID0gMDsKICAgICAgICAgZ2w6OkdldEludGVn
ZXJ2KEdMX05VTV9FWFRFTlNJT05TLCAmbnVtRXh0ZW5zaW9ucyk7CiAgICAgICAgIGZvciAoR0xp
bnQgaSA9IDA7IGkgPCBudW1FeHRlbnNpb25zOyArK2kpCi0gICAgICAgICAgICBtX2F2YWlsYWJs
ZUV4dGVuc2lvbnMuYWRkKGdsR2V0U3RyaW5naShHTF9FWFRFTlNJT05TLCBpKSk7CisgICAgICAg
ICAgICBtX2F2YWlsYWJsZUV4dGVuc2lvbnMuYWRkKGdsOjpHZXRTdHJpbmdpKEdMX0VYVEVOU0lP
TlMsIGkpKTsKKyAgICAgICAgZ2w6OkdldEludGVnZXJ2KEdMX05VTV9SRVFVRVNUQUJMRV9FWFRF
TlNJT05TX0FOR0xFLCAmbnVtRXh0ZW5zaW9ucyk7CisgICAgICAgIGZvciAoR0xpbnQgaSA9IDA7
IGkgPCBudW1FeHRlbnNpb25zOyArK2kpCisgICAgICAgICAgICBtX3JlcXVlc3RhYmxlRXh0ZW5z
aW9ucy5hZGQoZ2w6OkdldFN0cmluZ2koR0xfUkVRVUVTVEFCTEVfRVhURU5TSU9OU19BTkdMRSwg
aSkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIFN0cmluZyBleHRlbnNpb25zU3RyaW5nID0gZ2V0
RXh0ZW5zaW9ucygpOwogICAgICAgICBmb3IgKGF1dG8mIGV4dGVuc2lvbiA6IGV4dGVuc2lvbnNT
dHJpbmcuc3BsaXQoJyAnKSkKICAgICAgICAgICAgIG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5hZGQo
ZXh0ZW5zaW9uKTsKKyAgICAgICAgZXh0ZW5zaW9uc1N0cmluZyA9IFN0cmluZyhyZWludGVycHJl
dF9jYXN0PGNvbnN0IGNoYXIqPihnbDo6R2V0U3RyaW5nKEdMX1JFUVVFU1RBQkxFX0VYVEVOU0lP
TlNfQU5HTEUpKSk7CisgICAgICAgIGZvciAoYXV0byYgZXh0ZW5zaW9uIDogZXh0ZW5zaW9uc1N0
cmluZy5zcGxpdCgnICcpKQorICAgICAgICAgICAgbV9yZXF1ZXN0YWJsZUV4dGVuc2lvbnMuYWRk
KGV4dGVuc2lvbik7CiAgICAgfQogICAgIG1faW5pdGlhbGl6ZWRBdmFpbGFibGVFeHRlbnNpb25z
ID0gdHJ1ZTsKIH0KQEAgLTIxNywxOSArMTU0LDE5IEBAIHZvaWQgRXh0ZW5zaW9uczNEQU5HTEU6
OmdldG5Vbmlmb3JtaXZFWFQoR0MzRHVpbnQsIGludCwgR0MzRHNpemVpLCBpbnQgKikKIHZvaWQg
RXh0ZW5zaW9uczNEQU5HTEU6OmJsaXRGcmFtZWJ1ZmZlcihsb25nIHNyY1gwLCBsb25nIHNyY1kw
LCBsb25nIHNyY1gxLCBsb25nIHNyY1kxLCBsb25nIGRzdFgwLCBsb25nIGRzdFkwLCBsb25nIGRz
dFgxLCBsb25nIGRzdFkxLCB1bnNpZ25lZCBsb25nIG1hc2ssIHVuc2lnbmVkIGxvbmcgZmlsdGVy
KQogewogICAgIC8vIEZJWE1FOiBjb25zaWRlciBhZGRpbmcgc3VwcG9ydCBmb3IgQVBQTEVfZnJh
bWVidWZmZXJfbXVsdGlzYW1wbGUuCi0gICAgZ2w6OkJsaXRGcmFtZWJ1ZmZlcihzcmNYMCwgc3Jj
WTAsIHNyY1gxLCBzcmNZMSwgZHN0WDAsIGRzdFkwLCBkc3RYMSwgZHN0WTEsIG1hc2ssIGZpbHRl
cik7CisgICAgZ2w6OkJsaXRGcmFtZWJ1ZmZlckFOR0xFKHNyY1gwLCBzcmNZMCwgc3JjWDEsIHNy
Y1kxLCBkc3RYMCwgZHN0WTAsIGRzdFgxLCBkc3RZMSwgbWFzaywgZmlsdGVyKTsKIH0KIAogdm9p
ZCBFeHRlbnNpb25zM0RBTkdMRTo6cmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKHVuc2ln
bmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHNhbXBsZXMsIHVuc2lnbmVkIGxvbmcgaW50
ZXJuYWxmb3JtYXQsIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0KQog
ewotICAgIGdsOjpSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUodGFyZ2V0LCBzYW1wbGVz
LCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7CisgICAgZ2w6OlJlbmRlcmJ1ZmZlclN0
b3JhZ2VNdWx0aXNhbXBsZUFOR0xFKHRhcmdldCwgc2FtcGxlcywgaW50ZXJuYWxmb3JtYXQsIHdp
ZHRoLCBoZWlnaHQpOwogfQogCiBQbGF0Zm9ybTNET2JqZWN0IEV4dGVuc2lvbnMzREFOR0xFOjpj
cmVhdGVWZXJ0ZXhBcnJheU9FUygpCiB7CiAgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJl
bnQoKTsKICAgICBHTHVpbnQgYXJyYXkgPSAwOwotICAgIGdsOjpHZW5WZXJ0ZXhBcnJheXMoMSwg
JmFycmF5KTsKKyAgICBnbDo6R2VuVmVydGV4QXJyYXlzT0VTKDEsICZhcnJheSk7CiAgICAgcmV0
dXJuIGFycmF5OwogfQogCkBAIC0yMzksNyArMTc2LDcgQEAgdm9pZCBFeHRlbnNpb25zM0RBTkdM
RTo6ZGVsZXRlVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCBhcnJheSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6
RGVsZXRlVmVydGV4QXJyYXlzKDEsICZhcnJheSk7CisgICAgZ2w6OkRlbGV0ZVZlcnRleEFycmF5
c09FUygxLCAmYXJyYXkpOwogfQogCiBHQzNEYm9vbGVhbiBFeHRlbnNpb25zM0RBTkdMRTo6aXNW
ZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0IGFycmF5KQpAQCAtMjQ4LDEzICsxODUsMTMg
QEAgR0MzRGJvb2xlYW4gRXh0ZW5zaW9uczNEQU5HTEU6OmlzVmVydGV4QXJyYXlPRVMoUGxhdGZv
cm0zRE9iamVjdCBhcnJheSkKICAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwogCiAgICAgbV9jb250
ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICByZXR1cm4gZ2w6OklzVmVydGV4QXJyYXko
YXJyYXkpOworICAgIHJldHVybiBnbDo6SXNWZXJ0ZXhBcnJheU9FUyhhcnJheSk7CiB9CiAKIHZv
aWQgRXh0ZW5zaW9uczNEQU5HTEU6OmJpbmRWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0
IGFycmF5KQogewogICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6
OkJpbmRWZXJ0ZXhBcnJheShhcnJheSk7CisgICAgZ2w6OkJpbmRWZXJ0ZXhBcnJheU9FUyhhcnJh
eSk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uczNEQU5HTEU6Omluc2VydEV2ZW50TWFya2VyRVhUKGNv
bnN0IFN0cmluZyYpCkBAIC0yNzcsMzAgKzIxNCwzMCBAQCB2b2lkIEV4dGVuc2lvbnMzREFOR0xF
Ojpwb3BHcm91cE1hcmtlckVYVCh2b2lkKQogCiBib29sIEV4dGVuc2lvbnMzREFOR0xFOjpzdXBw
b3J0c0V4dGVuc2lvbihjb25zdCBTdHJpbmcmIG5hbWUpCiB7Ci0gICAgcmV0dXJuIG1fYXZhaWxh
YmxlRXh0ZW5zaW9ucy5jb250YWlucyhuYW1lKTsKKyAgICByZXR1cm4gbV9hdmFpbGFibGVFeHRl
bnNpb25zLmNvbnRhaW5zKG5hbWUpIHx8IG1fcmVxdWVzdGFibGVFeHRlbnNpb25zLmNvbnRhaW5z
KG5hbWUpOwogfQogCiB2b2lkIEV4dGVuc2lvbnMzREFOR0xFOjpkcmF3QnVmZmVyc0VYVChHQzNE
c2l6ZWkgbiwgY29uc3QgR0MzRGVudW0qIGJ1ZnMpCiB7Ci0gICAgZ2w6OkRyYXdCdWZmZXJzKG4s
IGJ1ZnMpOworICAgIGdsOjpEcmF3QnVmZmVyc0VYVChuLCBidWZzKTsKIH0KIAogdm9pZCBFeHRl
bnNpb25zM0RBTkdMRTo6ZHJhd0FycmF5c0luc3RhbmNlZChHQzNEZW51bSBtb2RlLCBHQzNEaW50
IGZpcnN0LCBHQzNEc2l6ZWkgY291bnQsIEdDM0RzaXplaSBwcmltY291bnQpCiB7CiAgICAgbV9j
b250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6RHJhd0FycmF5c0luc3RhbmNl
ZChtb2RlLCBmaXJzdCwgY291bnQsIHByaW1jb3VudCk7CisgICAgZ2w6OkRyYXdBcnJheXNJbnN0
YW5jZWRBTkdMRShtb2RlLCBmaXJzdCwgY291bnQsIHByaW1jb3VudCk7CiB9CiAKIHZvaWQgRXh0
ZW5zaW9uczNEQU5HTEU6OmRyYXdFbGVtZW50c0luc3RhbmNlZChHQzNEZW51bSBtb2RlLCBHQzNE
c2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUsIGxvbmcgbG9uZyBvZmZzZXQsIEdDM0RzaXplaSBw
cmltY291bnQpCiB7CiAgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBn
bDo6RHJhd0VsZW1lbnRzSW5zdGFuY2VkKG1vZGUsIGNvdW50LCB0eXBlLCByZWludGVycHJldF9j
YXN0PEdMdm9pZCo+KHN0YXRpY19jYXN0PGludHB0cl90PihvZmZzZXQpKSwgcHJpbWNvdW50KTsK
KyAgICBnbDo6RHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUobW9kZSwgY291bnQsIHR5cGUsIHJl
aW50ZXJwcmV0X2Nhc3Q8R0x2b2lkKj4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG9mZnNldCkpLCBw
cmltY291bnQpOwogfQogCiB2b2lkIEV4dGVuc2lvbnMzREFOR0xFOjp2ZXJ0ZXhBdHRyaWJEaXZp
c29yKEdDM0R1aW50IGluZGV4LCBHQzNEdWludCBkaXZpc29yKQogewogICAgIG1fY29udGV4dC0+
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6OlZlcnRleEF0dHJpYkRpdmlzb3IoaW5kZXgs
IGRpdmlzb3IpOworICAgIGdsOjpWZXJ0ZXhBdHRyaWJEaXZpc29yQU5HTEUoaW5kZXgsIGRpdmlz
b3IpOwogfQogCiBTdHJpbmcgRXh0ZW5zaW9uczNEQU5HTEU6OmdldEV4dGVuc2lvbnMoKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvRXh0ZW5zaW9u
czNEQU5HTEUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0V4dGVu
c2lvbnMzREFOR0xFLmgKaW5kZXggZGMyOWFmNmRkOGIwOGRkOWUzMGQxYjExMTViMTI0OTI4ZTQ4
YjZhZS4uMjNhN2EyODJlN2YzOTRhYzdmOWY2NjgzOTU2ZjBjM2E1YmM1YWZkNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvRXh0ZW5zaW9uczNEQU5H
TEUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9FeHRlbnNp
b25zM0RBTkdMRS5oCkBAIC04NCw2ICs4NCw4IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lk
IGluaXRpYWxpemVBdmFpbGFibGVFeHRlbnNpb25zKCk7CiAgICAgYm9vbCBtX2luaXRpYWxpemVk
QXZhaWxhYmxlRXh0ZW5zaW9uczsKICAgICBIYXNoU2V0PFN0cmluZz4gbV9hdmFpbGFibGVFeHRl
bnNpb25zOworICAgIEhhc2hTZXQ8U3RyaW5nPiBtX3JlcXVlc3RhYmxlRXh0ZW5zaW9uczsKKyAg
ICBIYXNoU2V0PFN0cmluZz4gbV9lbmFibGVkRXh0ZW5zaW9uczsKIAogICAgIC8vIFdlYWsgcG9p
bnRlciBiYWNrIHRvIEdyYXBoaWNzQ29udGV4dDNELgogICAgIEdyYXBoaWNzQ29udGV4dDNEKiBt
X2NvbnRleHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9h
bmdsZS9HcmFwaGljc0NvbnRleHQzREFOR0xFLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dDNEQU5HTEUuY3BwCmluZGV4IDk0ZTVhZjNh
NDgzODc5ZDBjMDFmNTRmNjkxYzkxN2EyZTBiMjRmMDMuLjc3YTNlMThjMWM2YzJlMjdkZDYzYWUy
OTZmNmVjOWExZWEyZmFlMWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dDNEQU5HTEUuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dDNEQU5HTEUuY3BwCkBA
IC01Miw4ICs1MiwxNSBAQAogI2luY2x1ZGUgPEFjY2VsZXJhdGUvQWNjZWxlcmF0ZS5oPgogI2Vu
ZGlmCiAKKy8vIFNraXAgdGhlIGluY2x1c2lvbiBvZiBBTkdMRSdzIGV4cGxpY2l0IGNvbnRleHQg
ZW50cnkgcG9pbnRzIGZvciBub3cuCisjZGVmaW5lIEdMX0FOR0xFX2V4cGxpY2l0X2NvbnRleHQK
KyNkZWZpbmUgR0xfQU5HTEVfZXhwbGljaXRfY29udGV4dF9nbGVzMQordHlwZWRlZiB2b2lkKiBH
TGVnbENvbnRleHQ7CiAjaW5jbHVkZSA8QU5HTEUvZW50cnlfcG9pbnRzX2dsZXNfMl8wX2F1dG9n
ZW4uaD4KICNpbmNsdWRlIDxBTkdMRS9lbnRyeV9wb2ludHNfZ2xlc18zXzBfYXV0b2dlbi5oPgor
I2luY2x1ZGUgPEFOR0xFL2VudHJ5X3BvaW50c19nbGVzX2V4dF9hdXRvZ2VuLmg+CisjaW5jbHVk
ZSA8QU5HTEUvZ2wyZXh0Lmg+CisjaW5jbHVkZSA8QU5HTEUvZ2wyZXh0X2FuZ2xlLmg+CiAKIC8v
IE5vdGU6IHRoaXMgZmlsZSBjYW4ndCBiZSBjb21waWxlZCBpbiB0aGUgc2FtZSB1bmlmaWVkIHNv
dXJjZSBmaWxlCiAvLyBhcyBvdGhlcnMgd2hpY2ggaW5jbHVkZSB0aGUgc3lzdGVtJ3MgT3BlbkdM
IGhlYWRlcnMuCkBAIC02NCw2ICs3MSw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorc3Rh
dGljIGNvbnN0IGNoYXIqIHBhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvbk5hbWUgPSAiR0xfT0VT
X3BhY2tlZF9kZXB0aF9zdGVuY2lsIjsKKwogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVsZWFz
ZVNoYWRlckNvbXBpbGVyKCkKIHsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKQEAgLTExNSw3
ICsxMjQsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZWFkUGl4ZWxzQW5kQ29udmVydFRv
QkdSQUlmTmVjZXNzYXJ5KGludCB4LCBpbnQgeSwgaW50CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OnZhbGlkYXRlQXR0cmlidXRlcygpCiB7Ci0gICAgdmFsaWRhdGVEZXB0aFN0ZW5jaWwoIkdM
X0VYVF9wYWNrZWRfZGVwdGhfc3RlbmNpbCIpOworICAgIHZhbGlkYXRlRGVwdGhTdGVuY2lsKHBh
Y2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvbk5hbWUpOwogfQogCiBib29sIEdyYXBoaWNzQ29udGV4
dDNEOjpyZXNoYXBlRkJPcyhjb25zdCBJbnRTaXplJiBzaXplKQpAQCAtMTM3LDcgKzE0Niw3IEBA
IGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnJlc2hhcGVGQk9zKGNvbnN0IEludFNpemUmIHNpemUp
CiAgICAgICAgIEV4dGVuc2lvbnMzRCYgZXh0ZW5zaW9ucyA9IGdldEV4dGVuc2lvbnMoKTsKICAg
ICAgICAgLy8gVXNlIGEgMjQgYml0IGRlcHRoIGJ1ZmZlciB3aGVyZSB3ZSBrbm93IHdlIGhhdmUg
aXQuCiAgICAgICAgIGlmIChleHRlbnNpb25zLnN1cHBvcnRzKCJHTF9PRVNfcGFja2VkX2RlcHRo
X3N0ZW5jaWwiKSkKLSAgICAgICAgICAgIGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0ID0gR0xf
REVQVEgyNF9TVEVOQ0lMODsKKyAgICAgICAgICAgIGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0
ID0gR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGlu
dGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0ID0gR0xfREVQVEhfQ09NUE9ORU5UMTY7CiAgICAgfQpA
QCAtMTQ1LDI0ICsxNTQsMzAgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6cmVzaGFwZUZCT3Mo
Y29uc3QgSW50U2l6ZSYgc2l6ZSkKICAgICAvLyBSZXNpemUgbXVsdGlzYW1wbGUgRkJPLgogICAg
IGlmIChtX2F0dHJzLmFudGlhbGlhcykgewogICAgICAgICBHTGludCBtYXhTYW1wbGVDb3VudDsK
LSAgICAgICAgZ2w6OkdldEludGVnZXJ2KEdMX01BWF9TQU1QTEVTX0VYVCwgJm1heFNhbXBsZUNv
dW50KTsKKyAgICAgICAgZ2w6OkdldEludGVnZXJ2KEdMX01BWF9TQU1QTEVTX0FOR0xFLCAmbWF4
U2FtcGxlQ291bnQpOwogICAgICAgICAvLyBVc2luZyBtb3JlIHRoYW4gNCBzYW1wbGVzIGlzIHNs
b3cgb24gc29tZSBoYXJkd2FyZSBhbmQgaXMgdW5saWtlbHkgdG8KICAgICAgICAgLy8gcHJvZHVj
ZSBhIHNpZ25pZmljYW50bHkgYmV0dGVyIHJlc3VsdC4KICAgICAgICAgR0xpbnQgc2FtcGxlQ291
bnQgPSBzdGQ6Om1pbig0LCBtYXhTYW1wbGVDb3VudCk7CiAgICAgICAgIGdsOjpCaW5kRnJhbWVi
dWZmZXIoR0xfRlJBTUVCVUZGRVIsIG1fbXVsdGlzYW1wbGVGQk8pOwogICAgICAgICBnbDo6Qmlu
ZFJlbmRlcmJ1ZmZlcihHTF9SRU5ERVJCVUZGRVIsIG1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7
Ci0gICAgICAgIGdsOjpSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoR0xfUkVOREVSQlVG
RkVSLCBzYW1wbGVDb3VudCwgR0xfUkdCQTgsIHdpZHRoLCBoZWlnaHQpOworICAgICAgICBnZXRF
eHRlbnNpb25zKCkucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKEdMX1JFTkRFUkJVRkZF
Uiwgc2FtcGxlQ291bnQsIEdMX1JHQkE4LCB3aWR0aCwgaGVpZ2h0KTsKICAgICAgICAgZ2w6OkZy
YW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBHTF9DT0xPUl9BVFRBQ0hNRU5U
MCwgR0xfUkVOREVSQlVGRkVSLCBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOwogICAgICAgICBp
ZiAobV9hdHRycy5zdGVuY2lsIHx8IG1fYXR0cnMuZGVwdGgpIHsKICAgICAgICAgICAgIGdsOjpC
aW5kUmVuZGVyYnVmZmVyKEdMX1JFTkRFUkJVRkZFUiwgbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNp
bEJ1ZmZlcik7Ci0gICAgICAgICAgICBnbDo6UmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxl
KEdMX1JFTkRFUkJVRkZFUiwgc2FtcGxlQ291bnQsIGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0
LCB3aWR0aCwgaGVpZ2h0KTsKLSAgICAgICAgICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwpCi0gICAg
ICAgICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBH
TF9TVEVOQ0lMX0FUVEFDSE1FTlQsIEdMX1JFTkRFUkJVRkZFUiwgbV9tdWx0aXNhbXBsZURlcHRo
U3RlbmNpbEJ1ZmZlcik7Ci0gICAgICAgICAgICBpZiAobV9hdHRycy5kZXB0aCkKLSAgICAgICAg
ICAgICAgICBnbDo6RnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0xfRlJBTUVCVUZGRVIsIEdMX0RF
UFRIX0FUVEFDSE1FTlQsIEdMX1JFTkRFUkJVRkZFUiwgbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNp
bEJ1ZmZlcik7CisgICAgICAgICAgICBnZXRFeHRlbnNpb25zKCkucmVuZGVyYnVmZmVyU3RvcmFn
ZU11bHRpc2FtcGxlKEdMX1JFTkRFUkJVRkZFUiwgc2FtcGxlQ291bnQsIGludGVybmFsRGVwdGhT
dGVuY2lsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgICAgIC8vIFdlYkdMIDEuMCdz
IHJ1bGVzIHN0YXRlIHRoYXQgY29tYmluZWQgZGVwdGgvc3RlbmNpbCByZW5kZXJidWZmZXJzCisg
ICAgICAgICAgICAvLyBoYXZlIHRvIGJlIGF0dGFjaGVkIHRvIHRoZSBzeW50aGV0aWMgREVQVEhf
U1RFTkNJTF9BVFRBQ0hNRU5UIHBvaW50LgorICAgICAgICAgICAgaWYgKCFpc0dMRVMyQ29tcGxp
YW50KCkgJiYgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQgPT0gR0xfREVQVEgyNF9TVEVOQ0lM
OF9PRVMpCisgICAgICAgICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdMX0ZS
QU1FQlVGRkVSLCBERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQsIEdMX1JFTkRFUkJVRkZFUiwgbV9t
dWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgICAgICBpZiAobV9hdHRycy5zdGVuY2lsKQorICAgICAgICAgICAgICAgICAgICBnbDo6
RnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0xfRlJBTUVCVUZGRVIsIEdMX1NURU5DSUxfQVRUQUNI
TUVOVCwgR0xfUkVOREVSQlVGRkVSLCBtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsK
KyAgICAgICAgICAgICAgICBpZiAobV9hdHRycy5kZXB0aCkKKyAgICAgICAgICAgICAgICAgICAg
Z2w6OkZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBHTF9ERVBUSF9BVFRB
Q0hNRU5ULCBHTF9SRU5ERVJCVUZGRVIsIG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIp
OworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGdsOjpCaW5kUmVuZGVyYnVmZmVy
KEdMX1JFTkRFUkJVRkZFUiwgMCk7Ci0gICAgICAgIGlmIChnbENoZWNrRnJhbWVidWZmZXJTdGF0
dXMoR0xfRlJBTUVCVUZGRVIpICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFKSB7CisgICAgICAg
IGlmIChnbDo6Q2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHTF9GUkFNRUJVRkZFUikgIT0gR0xfRlJB
TUVCVUZGRVJfQ09NUExFVEUpIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBjbGVhbnVwLgogICAg
ICAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICAgICAgfQpAQCAtMTc0LDMzICsxODksMjEg
QEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6cmVzaGFwZUZCT3MoY29uc3QgSW50U2l6ZSYgc2l6
ZSkKICNpZiBQTEFURk9STShDT0NPQSkKIAogI2lmIFBMQVRGT1JNKE1BQykKLSAgICAvLyBGSVhN
RTogaW1wbGVtZW50IGJhY2sgYnVmZmVyIHBhdGggdXNpbmcgQU5HTEUgYW5kIHBidWZmZXJzLgot
ICAgIC8vIGFsbG9jYXRlSU9TdXJmYWNlQmFja2luZ1N0b3JlKEludFNpemUod2lkdGgsIGhlaWdo
dCkpOwotICAgIC8vIHVwZGF0ZUZyYW1lYnVmZmVyVGV4dHVyZUJhY2tpbmdTdG9yZUZyb21MYXll
cigpOwotICAgIC8vIGdsOjpGcmFtZWJ1ZmZlclRleHR1cmUyRChHTF9GUkFNRUJVRkZFUiwgR0xf
Q09MT1JfQVRUQUNITUVOVDAsIEdMX1RFWFRVUkVfUkVDVEFOR0xFX0FSQiwgbV90ZXh0dXJlLCAw
KTsKKyAgICBhbGxvY2F0ZUlPU3VyZmFjZUJhY2tpbmdTdG9yZShJbnRTaXplKHdpZHRoLCBoZWln
aHQpKTsKKyAgICB1cGRhdGVGcmFtZWJ1ZmZlclRleHR1cmVCYWNraW5nU3RvcmVGcm9tTGF5ZXIo
KTsKKyAgICBnbDo6RnJhbWVidWZmZXJUZXh0dXJlMkQoR0xfRlJBTUVCVUZGRVIsIEdMX0NPTE9S
X0FUVEFDSE1FTlQwLCBHTF9URVhUVVJFX1JFQ1RBTkdMRV9BTkdMRSwgbV90ZXh0dXJlLCAwKTsK
ICNlbGlmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgLy8gRklYTUUgKGticik6IGltcGxlbWVu
dCBpT1MgcGF0aCwgaWRlYWxseSB1c2luZyBnbEZyYW1lYnVmZmVyVGV4dHVyZTJETXVsdGlzYW1w
bGUuCiAgICAgLy8gZ2w6OkJpbmRSZW5kZXJidWZmZXIoR0xfUkVOREVSQlVGRkVSLCBtX3RleHR1
cmUpOwogICAgIC8vIGdsOjpGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwg
R0xfQ09MT1JfQVRUQUNITUVOVDAsIEdMX1JFTkRFUkJVRkZFUiwgbV90ZXh0dXJlKTsKICAgICAv
LyBzZXRSZW5kZXJidWZmZXJTdG9yYWdlRnJvbURyYXdhYmxlKG1fY3VycmVudFdpZHRoLCBtX2N1
cnJlbnRIZWlnaHQpOwogI2Vsc2UKLSNlcnJvciBVbmtub3duIHBsYXRmb3JtCisjZXJyb3IgVW5r
bm93biBDb2NvYSBwbGF0Zm9ybQogI2VuZGlmCiAjZWxzZQotICAgIGdsOjpCaW5kVGV4dHVyZShH
TF9URVhUVVJFXzJELCBtX3RleHR1cmUpOwotICAgIGdsOjpUZXhJbWFnZTJEKEdMX1RFWFRVUkVf
MkQsIDAsIG1faW50ZXJuYWxDb2xvckZvcm1hdCwgd2lkdGgsIGhlaWdodCwgMCwgY29sb3JGb3Jt
YXQsIEdMX1VOU0lHTkVEX0JZVEUsIDApOwotICAgIGdsOjpGcmFtZWJ1ZmZlclRleHR1cmUyRChH
TF9GUkFNRUJVRkZFUiwgR0xfQ09MT1JfQVRUQUNITUVOVDAsIEdMX1RFWFRVUkVfMkQsIG1fdGV4
dHVyZSwgMCk7Ci0KLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0gICAgaWYgKG1fY29t
cG9zaXRvclRleHR1cmUpIHsKLSAgICAgICAgZ2w6OkJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQs
IG1fY29tcG9zaXRvclRleHR1cmUpOwotICAgICAgICBnbDo6VGV4SW1hZ2UyRChHTF9URVhUVVJF
XzJELCAwLCBtX2ludGVybmFsQ29sb3JGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIDAsIGNvbG9yRm9y
bWF0LCBHTF9VTlNJR05FRF9CWVRFLCAwKTsKLSAgICAgICAgZ2w6OkJpbmRUZXh0dXJlKEdMX1RF
WFRVUkVfMkQsIDApOwotICAgICAgICBnbDo6QmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9p
bnRlcm1lZGlhdGVUZXh0dXJlKTsKLSAgICAgICAgZ2w6OlRleEltYWdlMkQoR0xfVEVYVFVSRV8y
RCwgMCwgbV9pbnRlcm5hbENvbG9yRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCAwLCBjb2xvckZvcm1h
dCwgR0xfVU5TSUdORURfQllURSwgMCk7Ci0gICAgICAgIGdsOjpCaW5kVGV4dHVyZShHTF9URVhU
VVJFXzJELCAwKTsKLSAgICB9Ci0jZW5kaWYKKworI2Vycm9yIE11c3QgcG9ydCB0byBub24tQ29j
b2EgcGxhdGZvcm1zCisKICNlbmRpZiAvLyBQTEFURk9STShDT0NPQSkKIAogICAgIGF0dGFjaERl
cHRoQW5kU3RlbmNpbEJ1ZmZlcklmTmVlZGVkKGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0LCB3
aWR0aCwgaGVpZ2h0KTsKQEAgLTIyMywxNCArMjI2LDIwIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmF0dGFjaERlcHRoQW5kU3RlbmNpbEJ1ZmZlcklmTmVlZGVkKEdMdWludCBpbnRlcm5hbERl
cHRoCiAgICAgaWYgKCFtX2F0dHJzLmFudGlhbGlhcyAmJiAobV9hdHRycy5zdGVuY2lsIHx8IG1f
YXR0cnMuZGVwdGgpKSB7CiAgICAgICAgIGdsOjpCaW5kUmVuZGVyYnVmZmVyKEdMX1JFTkRFUkJV
RkZFUiwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOwogICAgICAgICBnbDo6UmVuZGVyYnVmZmVyU3Rv
cmFnZShHTF9SRU5ERVJCVUZGRVIsIGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0LCB3aWR0aCwg
aGVpZ2h0KTsKLSAgICAgICAgaWYgKG1fYXR0cnMuc3RlbmNpbCkKLSAgICAgICAgICAgIGdsOjpG
cmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgR0xfU1RFTkNJTF9BVFRBQ0hN
RU5ULCBHTF9SRU5ERVJCVUZGRVIsIG1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICAgICAgaWYg
KG1fYXR0cnMuZGVwdGgpCi0gICAgICAgICAgICBnbDo6RnJhbWVidWZmZXJSZW5kZXJidWZmZXIo
R0xfRlJBTUVCVUZGRVIsIEdMX0RFUFRIX0FUVEFDSE1FTlQsIEdMX1JFTkRFUkJVRkZFUiwgbV9k
ZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICAvLyBXZWJHTCAxLjAncyBydWxlcyBzdGF0ZSB0
aGF0IGNvbWJpbmVkIGRlcHRoL3N0ZW5jaWwgcmVuZGVyYnVmZmVycworICAgICAgICAvLyBoYXZl
IHRvIGJlIGF0dGFjaGVkIHRvIHRoZSBzeW50aGV0aWMgREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5U
IHBvaW50LgorICAgICAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSAmJiBpbnRlcm5hbERlcHRo
U3RlbmNpbEZvcm1hdCA9PSBHTF9ERVBUSDI0X1NURU5DSUw4X09FUykKKyAgICAgICAgICAgIGds
OjpGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgREVQVEhfU1RFTkNJTF9B
VFRBQ0hNRU5ULCBHTF9SRU5ERVJCVUZGRVIsIG1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICBpZiAobV9hdHRycy5zdGVuY2lsKQorICAgICAgICAgICAg
ICAgIGdsOjpGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgR0xfU1RFTkNJ
TF9BVFRBQ0hNRU5ULCBHTF9SRU5ERVJCVUZGRVIsIG1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAg
ICAgICAgICAgIGlmIChtX2F0dHJzLmRlcHRoKQorICAgICAgICAgICAgICAgIGdsOjpGcmFtZWJ1
ZmZlclJlbmRlcmJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgR0xfREVQVEhfQVRUQUNITUVOVCwgR0xf
UkVOREVSQlVGRkVSLCBtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgICAgIH0KICAgICAgICAg
Z2w6OkJpbmRSZW5kZXJidWZmZXIoR0xfUkVOREVSQlVGRkVSLCAwKTsKICAgICB9CiAKLSAgICBp
ZiAoZ2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdMX0ZSQU1FQlVGRkVSKSAhPSBHTF9GUkFNRUJV
RkZFUl9DT01QTEVURSkgeworICAgIGlmIChnbDo6Q2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHTF9G
UkFNRUJVRkZFUikgIT0gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEUpIHsKICAgICAgICAgLy8gRklY
TUU6IGNsZWFudXAKICAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICB9CkBAIC0yNDAsMTUg
KzI0OSwyMSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZXNvbHZlTXVsdGlzYW1wbGluZ0lm
TmVjZXNzYXJ5KGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgVGVtcG9yYXJ5QU5HTEVTZXR0
aW5nIHNjb3BlZFNjaXNzb3IoR0xfU0NJU1NPUl9URVNULCBHTF9GQUxTRSk7CiAgICAgVGVtcG9y
YXJ5QU5HTEVTZXR0aW5nIHNjb3BlZERpdGhlcihHTF9ESVRIRVIsIEdMX0ZBTFNFKTsKLSAgICBU
ZW1wb3JhcnlBTkdMRVNldHRpbmcgc2NvcGVkRGVwdGgoR0xfREVQVEhfVEVTVCwgR0xfRkFMU0Up
OwotICAgIFRlbXBvcmFyeUFOR0xFU2V0dGluZyBzY29wZWRTdGVuY2lsKEdMX1NURU5DSUxfVEVT
VCwgR0xfRkFMU0UpOworCisgICAgR0xpbnQgYm91bmRGcmFtZUJ1ZmZlcjsKKyAgICBnbDo6R2V0
SW50ZWdlcnYoR0xfRlJBTUVCVUZGRVJfQklORElORywgJmJvdW5kRnJhbWVCdWZmZXIpOworICAg
IGdsOjpCaW5kRnJhbWVidWZmZXIoR0xfUkVBRF9GUkFNRUJVRkZFUl9BTkdMRSwgbV9tdWx0aXNh
bXBsZUZCTyk7CisgICAgZ2w6OkJpbmRGcmFtZWJ1ZmZlcihHTF9EUkFXX0ZSQU1FQlVGRkVSX0FO
R0xFLCBtX2Zibyk7CiAKICAgICAvLyBGSVhNRTogZmlndXJlIG91dCBtb3JlIGVmZmljaWVudCBz
b2x1dGlvbiBmb3IgaU9TLgogICAgIEludFJlY3QgcmVzb2x2ZVJlY3QgPSByZWN0OwotICAgIGlm
IChyZWN0LmlzRW1wdHkoKSkKKyAgICAvLyBXaGVuIHVzaW5nIGFuIEVTIDIuMCBjb250ZXh0LCB0
aGUgZnVsbCBmcmFtZWJ1ZmZlciBtdXN0IGFsd2F5cyBiZQorICAgIC8vIHJlc29sdmVkOyBwYXJ0
aWFsIGJsaXRzIGFyZSBub3QgYWxsb3dlZC4KKyAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSB8
fCByZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmVzb2x2ZVJlY3QgPSBJbnRSZWN0KDAsIDAsIG1f
Y3VycmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQpOwogCi0gICAgZ2w6OkJsaXRGcmFtZWJ1ZmZl
cihyZXNvbHZlUmVjdC54KCksIHJlc29sdmVSZWN0LnkoKSwgcmVzb2x2ZVJlY3QubWF4WCgpLCBy
ZXNvbHZlUmVjdC5tYXhZKCksIHJlc29sdmVSZWN0LngoKSwgcmVzb2x2ZVJlY3QueSgpLCByZXNv
bHZlUmVjdC5tYXhYKCksIHJlc29sdmVSZWN0Lm1heFkoKSwgR0xfQ09MT1JfQlVGRkVSX0JJVCwg
R0xfTElORUFSKTsKKyAgICBnbDo6QmxpdEZyYW1lYnVmZmVyQU5HTEUocmVzb2x2ZVJlY3QueCgp
LCByZXNvbHZlUmVjdC55KCksIHJlc29sdmVSZWN0Lm1heFgoKSwgcmVzb2x2ZVJlY3QubWF4WSgp
LCByZXNvbHZlUmVjdC54KCksIHJlc29sdmVSZWN0LnkoKSwgcmVzb2x2ZVJlY3QubWF4WCgpLCBy
ZXNvbHZlUmVjdC5tYXhZKCksIEdMX0NPTE9SX0JVRkZFUl9CSVQsIEdMX05FQVJFU1QpOworICAg
IGdsOjpCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIGJvdW5kRnJhbWVCdWZmZXIpOwog
fQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZW5kZXJidWZmZXJTdG9yYWdlKEdDM0RlbnVt
IHRhcmdldCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNp
emVpIGhlaWdodCkKQEAgLTM3NSw3MSArMzkwLDI1IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OnJlYWRQaXhlbHMoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNp
CiAKIC8vIFRoZSBjb250ZW50cyBvZiBHcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbiBmb2xs
b3csIHBvcnRlZCB0byB1c2UgQU5HTEUuCiAKLXN0YXRpYyBUaHJlYWRTcGVjaWZpYzxTaGFkZXJO
YW1lSGFzaCo+JiBnZXRDdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFkZXIoKQotewotICAgIHN0YXRp
YyBzdGQ6Om9uY2VfZmxhZyBvbmNlRmxhZzsKLSAgICBzdGF0aWMgVGhyZWFkU3BlY2lmaWM8U2hh
ZGVyTmFtZUhhc2gqPiogc2hhcmVkTmFtZUhhc2g7Ci0gICAgc3RkOjpjYWxsX29uY2Uob25jZUZs
YWcsIFtdIHsKLSAgICAgICAgc2hhcmVkTmFtZUhhc2ggPSBuZXcgVGhyZWFkU3BlY2lmaWM8U2hh
ZGVyTmFtZUhhc2gqPjsKLSAgICB9KTsKLQotICAgIHJldHVybiAqc2hhcmVkTmFtZUhhc2g7Ci19
Ci0KLXN0YXRpYyB2b2lkIHNldEN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlcihTaGFkZXJOYW1l
SGFzaCogc2hhZGVyTmFtZUhhc2gpCi17Ci0gICAgKmdldEN1cnJlbnROYW1lSGFzaE1hcEZvclNo
YWRlcigpID0gc2hhZGVyTmFtZUhhc2g7Ci19Ci0KLS8vIEhhc2ggZnVuY3Rpb24gdXNlZCBieSB0
aGUgQU5HTEUgdHJhbnNsYXRvci9jb21waWxlciB0byBkbwotLy8gc3ltYm9sIG5hbWUgbWFuZ2xp
bmcuIFNpbmNlIHRoaXMgaXMgYSBzdGF0aWMgbWV0aG9kLCBiZWZvcmUKLS8vIGNhbGxpbmcgY29t
cGlsZVNoYWRlciB3ZSBzZXQgY3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVyCi0vLyB0byBwb2lu
dCB0byB0aGUgbWFwIGtlcHQgYnkgdGhlIGN1cnJlbnQgaW5zdGFuY2Ugb2YgR3JhcGhpY3NDb250
ZXh0M0QuCi0KLXN0YXRpYyB1aW50NjRfdCBuYW1lSGFzaEZvclNoYWRlcihjb25zdCBjaGFyKiBu
YW1lLCBzaXplX3QgbGVuZ3RoKQotewotICAgIGlmICghbGVuZ3RoKQotICAgICAgICByZXR1cm4g
MDsKLQotICAgIENTdHJpbmcgbmFtZUFzQ1N0cmluZyA9IENTdHJpbmcobmFtZSk7Ci0KLSAgICAv
LyBMb29rIHVwIG5hbWUgaW4gb3VyIGxvY2FsIG1hcC4KLSAgICBTaGFkZXJOYW1lSGFzaComIGN1
cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlciA9ICpnZXRDdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFk
ZXIoKTsKLSAgICBTaGFkZXJOYW1lSGFzaDo6aXRlcmF0b3IgZmluZFJlc3VsdCA9IGN1cnJlbnRO
YW1lSGFzaE1hcEZvclNoYWRlci0+ZmluZChuYW1lQXNDU3RyaW5nKTsKLSAgICBpZiAoZmluZFJl
c3VsdCAhPSBjdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFkZXItPmVuZCgpKQotICAgICAgICByZXR1
cm4gZmluZFJlc3VsdC0+dmFsdWU7Ci0KLSAgICB1bnNpZ25lZCBoYXNoVmFsdWUgPSBuYW1lQXND
U3RyaW5nLmhhc2goKTsKLQotICAgIC8vIENvbnZlcnQgdGhlIDMyLWJpdCBoYXNoIGZyb20gQ1N0
cmluZzo6aGFzaCBpbnRvIGEgNjQtYml0IHJlc3VsdAotICAgIC8vIGJ5IHNoaWZ0aW5nIHRoZW4g
YWRkaW5nIHRoZSBzaXplIG9mIG91ciB0YWJsZS4gT3ZlcmZsb3cgd291bGQKLSAgICAvLyBvbmx5
IGJlIGEgcHJvYmxlbSBpZiB3ZSdyZSBhbHJlYWR5IGhhc2hpbmcgdG8gdGhlIHNhbWUgdmFsdWUg
KGFuZAotICAgIC8vIHdlJ3JlIGhvcGluZyB0aGF0IG92ZXIgdGhlIGxpZmV0aW1lIG9mIHRoZSBj
b250ZXh0IHdlCi0gICAgLy8gZG9uJ3QgaGF2ZSB0aGF0IG1hbnkgc3ltYm9scykuCi0KLSAgICB1
aW50NjRfdCByZXN1bHQgPSBoYXNoVmFsdWU7Ci0gICAgcmVzdWx0ID0gKHJlc3VsdCA8PCAzMikg
KyAoY3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVyLT5zaXplKCkgKyAxKTsKLQotICAgIGN1cnJl
bnROYW1lSGFzaE1hcEZvclNoYWRlci0+c2V0KG5hbWVBc0NTdHJpbmcsIHJlc3VsdCk7Ci0gICAg
cmV0dXJuIHJlc3VsdDsKLX0KLQogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmFsaWRhdGVEZXB0
aFN0ZW5jaWwoY29uc3QgY2hhciogcGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uKQogeworICAg
IC8vIE5vdGUgdGhlcmUgYXJlIG5vIEV4dGVuc2lvbnMzRDo6ZW5zdXJlRW5hYmxlZCBjYWxscyBo
ZXJlLiBUaGUgQU5HTEUKKyAgICAvLyBiYWNrZW5kIGN1cnJlbnRseSBhc3N1bWVzIGF0IGEgZmFp
cmx5IGRlZXAgbGV2ZWwgdGhhdAorICAgIC8vIEVHTF9FWFRFTlNJT05TX0VOQUJMRURfQU5HTEUg
aXMgc2V0IHRvIHRydWUgZHVyaW5nIGNvbnRleHQgY3JlYXRpb246IGZvcgorICAgIC8vIHRoZSBh
bGxvY2F0aW9uIG9mIHJlY3Rhbmd1bGFyIHRleHR1cmVzLCBldGMuCiAgICAgRXh0ZW5zaW9uczNE
JiBleHRlbnNpb25zID0gZ2V0RXh0ZW5zaW9ucygpOwogICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwp
IHsKICAgICAgICAgaWYgKGV4dGVuc2lvbnMuc3VwcG9ydHMocGFja2VkRGVwdGhTdGVuY2lsRXh0
ZW5zaW9uKSkgewotICAgICAgICAgICAgZXh0ZW5zaW9ucy5lbnN1cmVFbmFibGVkKHBhY2tlZERl
cHRoU3RlbmNpbEV4dGVuc2lvbik7CiAgICAgICAgICAgICAvLyBGb3JjZSBkZXB0aCBpZiBzdGVu
Y2lsIGlzIHRydWUuCiAgICAgICAgICAgICBtX2F0dHJzLmRlcHRoID0gdHJ1ZTsKICAgICAgICAg
fSBlbHNlCiAgICAgICAgICAgICBtX2F0dHJzLnN0ZW5jaWwgPSBmYWxzZTsKKwogICAgIH0KICAg
ICBpZiAobV9hdHRycy5hbnRpYWxpYXMpIHsKLSAgICAgICAgaWYgKCFleHRlbnNpb25zLnN1cHBv
cnRzKCJHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZSIpIHx8IGlzR0xFUzJDb21wbGlh
bnQoKSkKKyAgICAgICAgLy8gRklYTUU6IG11c3QgYWRqdXN0IHRoaXMgd2hlbiB1cGdyYWRpbmcg
dG8gV2ViR0wgMi4wIC8gT3BlbkdMIEVTIDMuMCBzdXBwb3J0LgorICAgICAgICBpZiAoIWV4dGVu
c2lvbnMuc3VwcG9ydHMoIkdMX0FOR0xFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlIikgfHwgIWV4
dGVuc2lvbnMuc3VwcG9ydHMoIkdMX0FOR0xFX2ZyYW1lYnVmZmVyX2JsaXQiKSB8fCAhZXh0ZW5z
aW9ucy5zdXBwb3J0cygiR0xfT0VTX3JnYjhfcmdiYTgiKSB8fCBpc0dMRVMyQ29tcGxpYW50KCkp
CiAgICAgICAgICAgICBtX2F0dHJzLmFudGlhbGlhcyA9IGZhbHNlOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBleHRlbnNpb25zLmVuc3VyZUVuYWJsZWQoIkdMX0FOR0xFX2ZyYW1lYnVmZmVy
X211bHRpc2FtcGxlIik7CiAgICAgfQogfQogCkBAIC01MTMsMzMgKzQ4Miw5IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OnByZXBhcmVUZXh0dXJlKCkKIAogICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwogCi0jaWYgIVVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSAgICBUZW1wb3JhcnlBTkdM
RVNldHRpbmcgc2NvcGVkU2Npc3NvcihHTF9TQ0lTU09SX1RFU1QsIEdMX0ZBTFNFKTsKLSAgICBU
ZW1wb3JhcnlBTkdMRVNldHRpbmcgc2NvcGVkRGl0aGVyKEdMX0RJVEhFUiwgR0xfRkFMU0UpOwot
I2VuZGlmCi0KICAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMpCiAgICAgICAgIHJlc29sdmVNdWx0
aXNhbXBsaW5nSWZOZWNlc3NhcnkoKTsKIAotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykK
LSAgICBzdGQ6OnN3YXAobV90ZXh0dXJlLCBtX2NvbXBvc2l0b3JUZXh0dXJlKTsKLSAgICBzdGQ6
OnN3YXAobV90ZXh0dXJlLCBtX2ludGVybWVkaWF0ZVRleHR1cmUpOwotICAgIGdsOjpCaW5kRnJh
bWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIG1fZmJvKTsKLSAgICBnbDo6RnJhbWVidWZmZXJUZXh0
dXJlMkQoR0xfRlJBTUVCVUZGRVJfRVhULCBHTF9DT0xPUl9BVFRBQ0hNRU5UMF9FWFQsIEdMX1RF
WFRVUkVfMkQsIG1fdGV4dHVyZSwgMCk7Ci0gICAgZ2xGbHVzaCgpOwotCi0gICAgaWYgKG1fc3Rh
dGUuYm91bmRGQk8gIT0gbV9mYm8pCi0gICAgICAgIGdsOjpCaW5kRnJhbWVidWZmZXIoR3JhcGhp
Y3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX3N0YXRlLmJvdW5kRkJPKTsKLSAgICBlbHNlCi0g
ICAgICAgIGdsOjpCaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVS
LCBtX2Zibyk7Ci0gICAgcmV0dXJuOwotI2VuZGlmCi0KLSAgICBnbDo6QWN0aXZlVGV4dHVyZShH
TF9URVhUVVJFMCk7Ci0gICAgZ2w6OkJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fc3RhdGUu
Ym91bmRUYXJnZXQoR0xfVEVYVFVSRTApID09IEdMX1RFWFRVUkVfMkQgPyBtX3N0YXRlLmJvdW5k
VGV4dHVyZShHTF9URVhUVVJFMCkgOiAwKTsKLSAgICBnbDo6QWN0aXZlVGV4dHVyZShtX3N0YXRl
LmFjdGl2ZVRleHR1cmVVbml0KTsKLSAgICBpZiAobV9zdGF0ZS5ib3VuZEZCTyAhPSBtX2ZibykK
LSAgICAgICAgZ2w6OkJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZG
RVIsIG1fc3RhdGUuYm91bmRGQk8pOwogICAgIGdsOjpGbHVzaCgpOwogfQogCkBAIC02NTEsNjgg
KzU5Niw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlc2hhcGUoaW50IHdpZHRoLCBpbnQg
aGVpZ2h0KQogICAgIGdsOjpGbHVzaCgpOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dDNEOjpj
aGVja1ZhcnlpbmdzUGFja2luZyhQbGF0Zm9ybTNET2JqZWN0IHZlcnRleFNoYWRlciwgUGxhdGZv
cm0zRE9iamVjdCBmcmFnbWVudFNoYWRlcikgY29uc3QKLXsKLSAgICBBU1NFUlQobV9zaGFkZXJT
b3VyY2VNYXAuY29udGFpbnModmVydGV4U2hhZGVyKSk7Ci0gICAgQVNTRVJUKG1fc2hhZGVyU291
cmNlTWFwLmNvbnRhaW5zKGZyYWdtZW50U2hhZGVyKSk7Ci0gICAgY29uc3QgYXV0byYgdmVydGV4
RW50cnkgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHZlcnRleFNoYWRlciktPnZhbHVlOwotICAg
IGNvbnN0IGF1dG8mIGZyYWdtZW50RW50cnkgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKGZyYWdt
ZW50U2hhZGVyKS0+dmFsdWU7Ci0KLSAgICBIYXNoTWFwPFN0cmluZywgc2g6OlNoYWRlclZhcmlh
YmxlPiBjb21iaW5lZFZhcnlpbmdzOwotICAgIGZvciAoY29uc3QgYXV0byYgdmVydGV4U3ltYm9s
IDogdmVydGV4RW50cnkudmFyeWluZ01hcCkgewotICAgICAgICBjb25zdCBTdHJpbmcmIHN5bWJv
bE5hbWUgPSB2ZXJ0ZXhTeW1ib2wua2V5OwotICAgICAgICAvLyBUaGUgdmFyeWluZyBtYXAgaW5j
bHVkZXMgdmFyaWFibGVzIGZvciBlYWNoIGluZGV4IG9mIGFuIGFycmF5IHZhcmlhYmxlLgotICAg
ICAgICAvLyBXZSBvbmx5IHdhbnQgYSBzaW5nbGUgdmFyaWFibGUgdG8gcmVwcmVzZW50IHRoZSBh
cnJheS4KLSAgICAgICAgaWYgKHN5bWJvbE5hbWUuZW5kc1dpdGgoIl0iKSkKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotCi0gICAgICAgIC8vIERvbid0IGNvdW50IGJ1aWx0IGluIHZhcnlpbmdzLgot
ICAgICAgICBpZiAoc3ltYm9sTmFtZSA9PSAiZ2xfRnJhZ0Nvb3JkIiB8fCBzeW1ib2xOYW1lID09
ICJnbF9Gcm9udEZhY2luZyIgfHwgc3ltYm9sTmFtZSA9PSAiZ2xfUG9pbnRDb29yZCIpCi0gICAg
ICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBjb25zdCBhdXRvJiBmcmFnbWVudFN5bWJvbCA9
IGZyYWdtZW50RW50cnkudmFyeWluZ01hcC5maW5kKHN5bWJvbE5hbWUpOwotICAgICAgICBpZiAo
ZnJhZ21lbnRTeW1ib2wgIT0gZnJhZ21lbnRFbnRyeS52YXJ5aW5nTWFwLmVuZCgpKQotICAgICAg
ICAgICAgY29tYmluZWRWYXJ5aW5ncy5hZGQoc3ltYm9sTmFtZSwgZnJhZ21lbnRTeW1ib2wtPnZh
bHVlKTsKLSAgICB9Ci0KLSAgICBzaXplX3QgbnVtVmFyeWluZ3MgPSBjb21iaW5lZFZhcnlpbmdz
LnNpemUoKTsKLSAgICBpZiAoIW51bVZhcnlpbmdzKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQot
ICAgIHN0ZDo6dmVjdG9yPHNoOjpTaGFkZXJWYXJpYWJsZT4gdmFyaWFibGVzOwotICAgIHZhcmlh
Ymxlcy5yZXNlcnZlKGNvbWJpbmVkVmFyeWluZ3Muc2l6ZSgpKTsKLSAgICBmb3IgKGNvbnN0IGF1
dG8mIHZhcnlpbmdTeW1ib2wgOiBjb21iaW5lZFZhcnlpbmdzLnZhbHVlcygpKQotICAgICAgICB2
YXJpYWJsZXMucHVzaF9iYWNrKHZhcnlpbmdTeW1ib2wpOwotCi0gICAgR0MzRGludCBtYXhWYXJ5
aW5nVmVjdG9ycyA9IDA7Ci0gICAgZ2w6OkdldEludGVnZXJ2KE1BWF9WQVJZSU5HX1ZFQ1RPUlMs
ICZtYXhWYXJ5aW5nVmVjdG9ycyk7Ci0gICAgcmV0dXJuIHNoOjpDaGVja1ZhcmlhYmxlc1dpdGhp
blBhY2tpbmdMaW1pdHMobWF4VmFyeWluZ1ZlY3RvcnMsIHZhcmlhYmxlcyk7Ci19Ci0KLWJvb2wg
R3JhcGhpY3NDb250ZXh0M0Q6OnByZWNpc2lvbnNNYXRjaChQbGF0Zm9ybTNET2JqZWN0IHZlcnRl
eFNoYWRlciwgUGxhdGZvcm0zRE9iamVjdCBmcmFnbWVudFNoYWRlcikgY29uc3QKLXsKLSAgICBB
U1NFUlQobV9zaGFkZXJTb3VyY2VNYXAuY29udGFpbnModmVydGV4U2hhZGVyKSk7Ci0gICAgQVNT
RVJUKG1fc2hhZGVyU291cmNlTWFwLmNvbnRhaW5zKGZyYWdtZW50U2hhZGVyKSk7Ci0gICAgY29u
c3QgYXV0byYgdmVydGV4RW50cnkgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHZlcnRleFNoYWRl
ciktPnZhbHVlOwotICAgIGNvbnN0IGF1dG8mIGZyYWdtZW50RW50cnkgPSBtX3NoYWRlclNvdXJj
ZU1hcC5maW5kKGZyYWdtZW50U2hhZGVyKS0+dmFsdWU7Ci0KLSAgICBIYXNoTWFwPFN0cmluZywg
c2g6OkdMZW51bT4gdmVydGV4U3ltYm9sUHJlY2lzaW9uTWFwOwotCi0gICAgZm9yIChjb25zdCBh
dXRvJiBlbnRyeSA6IHZlcnRleEVudHJ5LnVuaWZvcm1NYXApIHsKLSAgICAgICAgY29uc3Qgc3Rk
OjpzdHJpbmcmIG1hcHBlZE5hbWUgPSBlbnRyeS52YWx1ZS5tYXBwZWROYW1lOwotICAgICAgICB2
ZXJ0ZXhTeW1ib2xQcmVjaXNpb25NYXAuYWRkKFN0cmluZyhtYXBwZWROYW1lLmNfc3RyKCksIG1h
cHBlZE5hbWUubGVuZ3RoKCkpLCBlbnRyeS52YWx1ZS5wcmVjaXNpb24pOwotICAgIH0KLQotICAg
IGZvciAoY29uc3QgYXV0byYgZW50cnkgOiBmcmFnbWVudEVudHJ5LnVuaWZvcm1NYXApIHsKLSAg
ICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG1hcHBlZE5hbWUgPSBlbnRyeS52YWx1ZS5tYXBwZWRO
YW1lOwotICAgICAgICBjb25zdCBhdXRvJiB2ZXJ0ZXhTeW1ib2wgPSB2ZXJ0ZXhTeW1ib2xQcmVj
aXNpb25NYXAuZmluZChTdHJpbmcobWFwcGVkTmFtZS5jX3N0cigpLCBtYXBwZWROYW1lLmxlbmd0
aCgpKSk7Ci0gICAgICAgIGlmICh2ZXJ0ZXhTeW1ib2wgIT0gdmVydGV4U3ltYm9sUHJlY2lzaW9u
TWFwLmVuZCgpICYmIHZlcnRleFN5bWJvbC0+dmFsdWUgIT0gZW50cnkudmFsdWUucHJlY2lzaW9u
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwot
fQotCiBJbnRTaXplIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6
ZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEludFNpemUobV9jdXJyZW50V2lkdGgsIG1fY3VycmVu
dEhlaWdodCk7CkBAIC03MzAsNyArNjEzLDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YXR0
YWNoU2hhZGVyKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgUGxhdGZvcm0zRE9iamVjdAogICAg
IEFTU0VSVChwcm9ncmFtKTsKICAgICBBU1NFUlQoc2hhZGVyKTsKICAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKLSAgICBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5yZW1vdmUocHJvZ3Jh
bSk7CiAgICAgZ2w6OkF0dGFjaFNoYWRlcihwcm9ncmFtLCBzaGFkZXIpOwogfQogCkBAIC03Mzgs
MTAgKzYyMCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRBdHRyaWJMb2NhdGlvbihQ
bGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0R1aW50IGluCiB7CiAgICAgQVNTRVJUKHByb2dy
YW0pOwogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotCi0gICAgU3RyaW5nIG1hcHBlZE5hbWUg
PSBtYXBwZWRTeW1ib2xOYW1lKHByb2dyYW0sIFNIQURFUl9TWU1CT0xfVFlQRV9BVFRSSUJVVEUs
IG5hbWUpOwotICAgIExPRyhXZWJHTCwgIjo6YmluZEF0dHJpYkxvY2F0aW9uIGlzIG1hcHBpbmcg
JXMgdG8gJXMiLCBuYW1lLnV0ZjgoKS5kYXRhKCksIG1hcHBlZE5hbWUudXRmOCgpLmRhdGEoKSk7
Ci0gICAgZ2w6OkJpbmRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBpbmRleCwgbWFwcGVkTmFtZS51
dGY4KCkuZGF0YSgpKTsKKyAgICBnbDo6QmluZEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIGluZGV4
LCBuYW1lLnV0ZjgoKS5kYXRhKCkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpiaW5k
QnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCBidWZmZXIpCkBAIC05MTQs
OTcgKzc5MywxMiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjb21waWxlU2hhZGVyKFBsYXRm
b3JtM0RPYmplY3Qgc2hhZGVyKQogewogICAgIEFTU0VSVChzaGFkZXIpOwogICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOwotCi0gICAgLy8gVHVybiBvbiBuYW1lIG1hcHBpbmcuIER1ZSB0byB0aGUg
d2F5IEFOR0xFIG5hbWUgaGFzaGluZyB3b3Jrcywgd2UKLSAgICAvLyBwb2ludCBhIGdsb2JhbCBo
YXNobWFwIHRvIHRoZSBtYXAgb3duZWQgYnkgdGhpcyBjb250ZXh0LgotICAgIFNoQnVpbHRJblJl
c291cmNlcyBBTkdMRVJlc291cmNlcyA9IG1fY29tcGlsZXIuZ2V0UmVzb3VyY2VzKCk7Ci0gICAg
U2hIYXNoRnVuY3Rpb242NCBwcmV2aW91c0hhc2hGdW5jdGlvbiA9IEFOR0xFUmVzb3VyY2VzLkhh
c2hGdW5jdGlvbjsKLSAgICBBTkdMRVJlc291cmNlcy5IYXNoRnVuY3Rpb24gPSBuYW1lSGFzaEZv
clNoYWRlcjsKLQotICAgIGlmICghbmFtZUhhc2hNYXBGb3JTaGFkZXJzKQotICAgICAgICBuYW1l
SGFzaE1hcEZvclNoYWRlcnMgPSBzdGQ6Om1ha2VfdW5pcXVlPFNoYWRlck5hbWVIYXNoPigpOwot
ICAgIHNldEN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlcihuYW1lSGFzaE1hcEZvclNoYWRlcnMu
Z2V0KCkpOwotICAgIG1fY29tcGlsZXIuc2V0UmVzb3VyY2VzKEFOR0xFUmVzb3VyY2VzKTsKLQot
ICAgIFN0cmluZyB0cmFuc2xhdGVkU2hhZGVyU291cmNlID0gbV9leHRlbnNpb25zLT5nZXRUcmFu
c2xhdGVkU2hhZGVyU291cmNlQU5HTEUoc2hhZGVyKTsKLQotICAgIEFOR0xFUmVzb3VyY2VzLkhh
c2hGdW5jdGlvbiA9IHByZXZpb3VzSGFzaEZ1bmN0aW9uOwotICAgIG1fY29tcGlsZXIuc2V0UmVz
b3VyY2VzKEFOR0xFUmVzb3VyY2VzKTsKLSAgICBzZXRDdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFk
ZXIobnVsbHB0cik7Ci0KLSAgICBpZiAoIXRyYW5zbGF0ZWRTaGFkZXJTb3VyY2UubGVuZ3RoKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGNvbnN0IENTdHJpbmcmIHRyYW5zbGF0ZWRTaGFkZXJD
U3RyaW5nID0gdHJhbnNsYXRlZFNoYWRlclNvdXJjZS51dGY4KCk7Ci0gICAgY29uc3QgY2hhciog
dHJhbnNsYXRlZFNoYWRlclB0ciA9IHRyYW5zbGF0ZWRTaGFkZXJDU3RyaW5nLmRhdGEoKTsKLSAg
ICBpbnQgdHJhbnNsYXRlZFNoYWRlckxlbmd0aCA9IHRyYW5zbGF0ZWRTaGFkZXJDU3RyaW5nLmxl
bmd0aCgpOwotCi0gICAgTE9HKFdlYkdMLCAiLS0tIGJlZ2luIG9yaWdpbmFsIHNoYWRlciBzb3Vy
Y2UgLS0tXG4lc1xuLS0tIGVuZCBvcmlnaW5hbCBzaGFkZXIgc291cmNlIC0tLVxuIiwgZ2V0U2hh
ZGVyU291cmNlKHNoYWRlcikudXRmOCgpLmRhdGEoKSk7Ci0gICAgTE9HKFdlYkdMLCAiLS0tIGJl
Z2luIHRyYW5zbGF0ZWQgc2hhZGVyIHNvdXJjZSAtLS1cbiVzXG4tLS0gZW5kIHRyYW5zbGF0ZWQg
c2hhZGVyIHNvdXJjZSAtLS0iLCB0cmFuc2xhdGVkU2hhZGVyUHRyKTsKLQotICAgIGdsOjpTaGFk
ZXJTb3VyY2Uoc2hhZGVyLCAxLCAmdHJhbnNsYXRlZFNoYWRlclB0ciwgJnRyYW5zbGF0ZWRTaGFk
ZXJMZW5ndGgpOwotCi0gICAgOjpnbENvbXBpbGVTaGFkZXIoc2hhZGVyKTsKLQotICAgIGludCBj
b21waWxlU3RhdHVzOwotCi0gICAgZ2w6OkdldFNoYWRlcml2KHNoYWRlciwgQ09NUElMRV9TVEFU
VVMsICZjb21waWxlU3RhdHVzKTsKLQotICAgIFNoYWRlclNvdXJjZU1hcDo6aXRlcmF0b3IgcmVz
dWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChzaGFkZXIpOwotICAgIEdyYXBoaWNzQ29udGV4
dDNEOjpTaGFkZXJTb3VyY2VFbnRyeSYgZW50cnkgPSByZXN1bHQtPnZhbHVlOwotCi0gICAgLy8g
UG9wdWxhdGUgdGhlIHNoYWRlciBsb2cKLSAgICBHTGludCBsZW5ndGggPSAwOwotICAgIGdsOjpH
ZXRTaGFkZXJpdihzaGFkZXIsIEdMX0lORk9fTE9HX0xFTkdUSCwgJmxlbmd0aCk7Ci0KLSAgICBp
ZiAobGVuZ3RoKSB7Ci0gICAgICAgIEdMc2l6ZWkgc2l6ZSA9IDA7Ci0gICAgICAgIFZlY3RvcjxH
TGNoYXI+IGluZm8obGVuZ3RoKTsKLSAgICAgICAgZ2w6OkdldFNoYWRlckluZm9Mb2coc2hhZGVy
LCBsZW5ndGgsICZzaXplLCBpbmZvLmRhdGEoKSk7Ci0KLSAgICAgICAgUGxhdGZvcm0zRE9iamVj
dCBzaGFkZXJzWzJdID0geyBzaGFkZXIsIDAgfTsKLSAgICAgICAgZW50cnkubG9nID0gZ2V0VW5t
YW5nbGVkSW5mb0xvZyhzaGFkZXJzLCAxLCBTdHJpbmcoaW5mby5kYXRhKCksIHNpemUpKTsKLSAg
ICB9Ci0KLSAgICBpZiAoY29tcGlsZVN0YXR1cyAhPSBHTF9UUlVFKSB7Ci0gICAgICAgIGVudHJ5
LmlzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgTE9HKFdlYkdMLCAiRXJyb3I6IHNoYWRlciB0cmFu
c2xhdG9yIHByb2R1Y2VkIGEgc2hhZGVyIHRoYXQgT3BlbkdMIHdvdWxkIG5vdCBjb21waWxlLiIp
OwotICAgIH0KKyAgICBnbDo6Q29tcGlsZVNoYWRlcihzaGFkZXIpOwogfQogCiB2b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpjb21waWxlU2hhZGVyRGlyZWN0KFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVy
KQogewotICAgIEFTU0VSVChzaGFkZXIpOwotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotCi0g
ICAgSGFzaE1hcDxQbGF0Zm9ybTNET2JqZWN0LCBTaGFkZXJTb3VyY2VFbnRyeT46Oml0ZXJhdG9y
IHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKLQotICAgIGlmIChyZXN1
bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFNo
YWRlclNvdXJjZUVudHJ5JiBlbnRyeSA9IHJlc3VsdC0+dmFsdWU7Ci0KLSAgICBjb25zdCBDU3Ry
aW5nJiBzaGFkZXJTb3VyY2VDU3RyaW5nID0gZW50cnkuc291cmNlLnV0ZjgoKTsKLSAgICBjb25z
dCBjaGFyKiBzaGFkZXJTb3VyY2VQdHIgPSBzaGFkZXJTb3VyY2VDU3RyaW5nLmRhdGEoKTsKLSAg
ICBpbnQgc2hhZGVyU291cmNlTGVuZ3RoID0gc2hhZGVyU291cmNlQ1N0cmluZy5sZW5ndGgoKTsK
LQotICAgIExPRyhXZWJHTCwgIi0tLSBiZWdpbiBkaXJlY3Qgc2hhZGVyIHNvdXJjZSAtLS1cbiVz
XG4tLS0gZW5kIGRpcmVjdCBzaGFkZXIgc291cmNlIC0tLVxuIiwgc2hhZGVyU291cmNlUHRyKTsK
LQotICAgIGdsOjpTaGFkZXJTb3VyY2Uoc2hhZGVyLCAxLCAmc2hhZGVyU291cmNlUHRyLCAmc2hh
ZGVyU291cmNlTGVuZ3RoKTsKLQotICAgIGdsOjpDb21waWxlU2hhZGVyKHNoYWRlcik7Ci0KLSAg
ICBpbnQgY29tcGlsZVN0YXR1czsKLQotICAgIGdsOjpHZXRTaGFkZXJpdihzaGFkZXIsIENPTVBJ
TEVfU1RBVFVTLCAmY29tcGlsZVN0YXR1cyk7Ci0KLSAgICBpZiAoY29tcGlsZVN0YXR1cyA9PSBH
TF9UUlVFKSB7Ci0gICAgICAgIGVudHJ5LmlzVmFsaWQgPSB0cnVlOwotICAgICAgICBMT0coV2Vi
R0wsICJEaXJlY3QgY29tcGlsYXRpb24gb2Ygc2hhZGVyIHN1Y2NlZWRlZC4iKTsKLSAgICB9IGVs
c2UgewotICAgICAgICBlbnRyeS5pc1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgIExPRyhXZWJHTCwg
IkVycm9yOiBkaXJlY3QgY29tcGlsYXRpb24gb2Ygc2hhZGVyIGZhaWxlZC4iKTsKLSAgICB9Cisg
ICAgY29tcGlsZVNoYWRlcihzaGFkZXIpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpj
b3B5VGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGlu
dGVybmFsZm9ybWF0LCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNE
c2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlcikKQEAgLTEwNTQsNyArODQ4LDYgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6ZGV0YWNoU2hhZGVyKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwg
UGxhdGZvcm0zRE9iamVjdAogICAgIEFTU0VSVChwcm9ncmFtKTsKICAgICBBU1NFUlQoc2hhZGVy
KTsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX3NoYWRlclByb2dyYW1TeW1ib2xD
b3VudE1hcC5yZW1vdmUocHJvZ3JhbSk7CiAgICAgZ2w6OkRldGFjaFNoYWRlcihwcm9ncmFtLCBz
aGFkZXIpOwogfQogCkBAIC0xMTUwLDE0ICs5NDMsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNE
OjpnZXRBY3RpdmVBdHRyaWJJbXBsKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHVpbnQg
aQogICAgIGlmICghbmFtZUxlbmd0aCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgU3Ry
aW5nIG9yaWdpbmFsTmFtZSA9IG9yaWdpbmFsU3ltYm9sTmFtZShwcm9ncmFtLCBTSEFERVJfU1lN
Qk9MX1RZUEVfQVRUUklCVVRFLCBTdHJpbmcobmFtZS5kYXRhKCksIG5hbWVMZW5ndGgpKTsKLQot
I2lmbmRlZiBOREVCVUcKLSAgICBTdHJpbmcgdW5pZm9ybU5hbWUobmFtZS5kYXRhKCksIG5hbWVM
ZW5ndGgpOwotICAgIExPRyhXZWJHTCwgIlByb2dyYW0gJWQgaXMgbWFwcGluZyBhY3RpdmUgYXR0
cmlidXRlICVkIGZyb20gJyVzJyB0byAnJXMnIiwgcHJvZ3JhbSwgaW5kZXgsIHVuaWZvcm1OYW1l
LnV0ZjgoKS5kYXRhKCksIG9yaWdpbmFsTmFtZS51dGY4KCkuZGF0YSgpKTsKLSNlbmRpZgotCi0g
ICAgaW5mby5uYW1lID0gb3JpZ2luYWxOYW1lOworICAgIGluZm8ubmFtZSA9IFN0cmluZyhuYW1l
LmRhdGEoKSwgbmFtZUxlbmd0aCk7CiAgICAgaW5mby50eXBlID0gdHlwZTsKICAgICBpbmZvLnNp
emUgPSBzaXplOwogICAgIHJldHVybiB0cnVlOwpAQCAtMTE2NSwxNyArOTUxLDcgQEAgYm9vbCBH
cmFwaGljc0NvbnRleHQzRDo6Z2V0QWN0aXZlQXR0cmliSW1wbChQbGF0Zm9ybTNET2JqZWN0IHBy
b2dyYW0sIEdDM0R1aW50IGkKIAogYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0QWN0aXZlQXR0
cmliKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8m
IGluZm8pCiB7Ci0gICAgR0MzRGludCBzeW1ib2xDb3VudDsKLSAgICBhdXRvIHJlc3VsdCA9IG1f
c2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLmZpbmQocHJvZ3JhbSk7Ci0gICAgaWYgKHJlc3Vs
dCA9PSBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5lbmQoKSkgewotICAgICAgICBnZXRO
b25CdWlsdEluQWN0aXZlU3ltYm9sQ291bnQocHJvZ3JhbSwgR3JhcGhpY3NDb250ZXh0M0Q6OkFD
VElWRV9BVFRSSUJVVEVTLCAmc3ltYm9sQ291bnQpOwotICAgICAgICByZXN1bHQgPSBtX3NoYWRl
clByb2dyYW1TeW1ib2xDb3VudE1hcC5maW5kKHByb2dyYW0pOwotICAgIH0KLQotICAgIEFjdGl2
ZVNoYWRlclN5bWJvbENvdW50cyYgc3ltYm9sQ291bnRzID0gcmVzdWx0LT52YWx1ZTsKLSAgICBH
QzNEdWludCByYXdJbmRleCA9IChpbmRleCA8IHN5bWJvbENvdW50cy5maWx0ZXJlZFRvQWN0dWFs
QXR0cmlidXRlSW5kZXhNYXAuc2l6ZSgpKSA/IHN5bWJvbENvdW50cy5maWx0ZXJlZFRvQWN0dWFs
QXR0cmlidXRlSW5kZXhNYXBbaW5kZXhdIDogLTE7Ci0KLSAgICByZXR1cm4gZ2V0QWN0aXZlQXR0
cmliSW1wbChwcm9ncmFtLCByYXdJbmRleCwgaW5mbyk7CisgICAgcmV0dXJuIGdldEFjdGl2ZUF0
dHJpYkltcGwocHJvZ3JhbSwgaW5kZXgsIGluZm8pOwogfQogCiBib29sIEdyYXBoaWNzQ29udGV4
dDNEOjpnZXRBY3RpdmVVbmlmb3JtSW1wbChQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0R1
aW50IGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQpAQCAtMTE5NywxNCArOTczLDcgQEAgYm9vbCBH
cmFwaGljc0NvbnRleHQzRDo6Z2V0QWN0aXZlVW5pZm9ybUltcGwoUGxhdGZvcm0zRE9iamVjdCBw
cm9ncmFtLCBHQzNEdWludAogICAgIGlmICghbmFtZUxlbmd0aCkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgU3RyaW5nIG9yaWdpbmFsTmFtZSA9IG9yaWdpbmFsU3ltYm9sTmFtZShwcm9n
cmFtLCBTSEFERVJfU1lNQk9MX1RZUEVfVU5JRk9STSwgU3RyaW5nKG5hbWUuZGF0YSgpLCBuYW1l
TGVuZ3RoKSk7Ci0KLSNpZm5kZWYgTkRFQlVHCi0gICAgU3RyaW5nIHVuaWZvcm1OYW1lKG5hbWUu
ZGF0YSgpLCBuYW1lTGVuZ3RoKTsKLSAgICBMT0coV2ViR0wsICJQcm9ncmFtICVkIGlzIG1hcHBp
bmcgYWN0aXZlIHVuaWZvcm0gJWQgZnJvbSAnJXMnIHRvICclcyciLCBwcm9ncmFtLCBpbmRleCwg
dW5pZm9ybU5hbWUudXRmOCgpLmRhdGEoKSwgb3JpZ2luYWxOYW1lLnV0ZjgoKS5kYXRhKCkpOwot
I2VuZGlmCi0KLSAgICBpbmZvLm5hbWUgPSBvcmlnaW5hbE5hbWU7CisgICAgaW5mby5uYW1lID0g
U3RyaW5nKG5hbWUuZGF0YSgpLCBuYW1lTGVuZ3RoKTsKICAgICBpbmZvLnR5cGUgPSB0eXBlOwog
ICAgIGluZm8uc2l6ZSA9IHNpemU7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0xMjEyLDE3ICs5ODEs
NyBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRBY3RpdmVVbmlmb3JtSW1wbChQbGF0Zm9y
bTNET2JqZWN0IHByb2dyYW0sIEdDM0R1aW50CiAKIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6Omdl
dEFjdGl2ZVVuaWZvcm0oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEdWludCBpbmRleCwg
QWN0aXZlSW5mbyYgaW5mbykKIHsKLSAgICBHQzNEaW50IHN5bWJvbENvdW50OwotICAgIGF1dG8g
cmVzdWx0ID0gbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAuZmluZChwcm9ncmFtKTsKLSAg
ICBpZiAocmVzdWx0ID09IG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLmVuZCgpKSB7Ci0g
ICAgICAgIGdldE5vbkJ1aWx0SW5BY3RpdmVTeW1ib2xDb3VudChwcm9ncmFtLCBHcmFwaGljc0Nv
bnRleHQzRDo6QUNUSVZFX1VOSUZPUk1TLCAmc3ltYm9sQ291bnQpOwotICAgICAgICByZXN1bHQg
PSBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5maW5kKHByb2dyYW0pOwotICAgIH0KLSAg
ICAKLSAgICBBY3RpdmVTaGFkZXJTeW1ib2xDb3VudHMmIHN5bWJvbENvdW50cyA9IHJlc3VsdC0+
dmFsdWU7Ci0gICAgR0MzRHVpbnQgcmF3SW5kZXggPSAoaW5kZXggPCBzeW1ib2xDb3VudHMuZmls
dGVyZWRUb0FjdHVhbFVuaWZvcm1JbmRleE1hcC5zaXplKCkpID8gc3ltYm9sQ291bnRzLmZpbHRl
cmVkVG9BY3R1YWxVbmlmb3JtSW5kZXhNYXBbaW5kZXhdIDogLTE7Ci0gICAgCi0gICAgcmV0dXJu
IGdldEFjdGl2ZVVuaWZvcm1JbXBsKHByb2dyYW0sIHJhd0luZGV4LCBpbmZvKTsKKyAgICByZXR1
cm4gZ2V0QWN0aXZlVW5pZm9ybUltcGwocHJvZ3JhbSwgaW5kZXgsIGluZm8pOwogfQogCiB2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRBdHRhY2hlZFNoYWRlcnMoUGxhdGZvcm0zRE9iamVjdCBw
cm9ncmFtLCBHQzNEc2l6ZWkgbWF4Q291bnQsIEdDM0RzaXplaSogY291bnQsIFBsYXRmb3JtM0RP
YmplY3QqIHNoYWRlcnMpCkBAIC0xMjM1LDE0MyArOTk0LDYgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6Z2V0QXR0YWNoZWRTaGFkZXJzKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHNp
emVpIG0KICAgICBnbDo6R2V0QXR0YWNoZWRTaGFkZXJzKHByb2dyYW0sIG1heENvdW50LCBjb3Vu
dCwgc2hhZGVycyk7CiB9CiAKLXN0YXRpYyBTdHJpbmcgZ2VuZXJhdGVIYXNoZWROYW1lKGNvbnN0
IFN0cmluZyYgbmFtZSkKLXsKLSAgICBpZiAobmFtZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVy
biBuYW1lOwotICAgIHVpbnQ2NF90IG51bWJlciA9IG5hbWVIYXNoRm9yU2hhZGVyKG5hbWUudXRm
OCgpLmRhdGEoKSwgbmFtZS5sZW5ndGgoKSk7Ci0gICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwot
ICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgid2ViZ2xfIik7Ci0gICAgYXBwZW5kVW5zaWduZWRB
c0hleChudW1iZXIsIGJ1aWxkZXIsIExvd2VyY2FzZSk7Ci0gICAgcmV0dXJuIGJ1aWxkZXIudG9T
dHJpbmcoKTsKLX0KLQotT3B0aW9uYWw8U3RyaW5nPiBHcmFwaGljc0NvbnRleHQzRDo6bWFwcGVk
U3ltYm9sSW5TaGFkZXJTb3VyY2VNYXAoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIsIEFOR0xFU2hh
ZGVyU3ltYm9sVHlwZSBzeW1ib2xUeXBlLCBjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgYXV0
byByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7Ci0gICAgaWYgKHJlc3Vs
dCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKLQotICAgIGNvbnN0IGF1dG8mIHN5bWJvbE1hcCA9IHJlc3VsdC0+dmFsdWUuc3ltYm9sTWFw
KHN5bWJvbFR5cGUpOwotICAgIGF1dG8gc3ltYm9sRW50cnkgPSBzeW1ib2xNYXAuZmluZChuYW1l
KTsKLSAgICBpZiAoc3ltYm9sRW50cnkgPT0gc3ltYm9sTWFwLmVuZCgpKQotICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwotCi0gICAgYXV0byYgbWFwcGVkTmFtZSA9IHN5bWJvbEVudHJ5LT52
YWx1ZS5tYXBwZWROYW1lOwotICAgIHJldHVybiBTdHJpbmcobWFwcGVkTmFtZS5jX3N0cigpLCBt
YXBwZWROYW1lLmxlbmd0aCgpKTsKLX0KLQotU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNEOjptYXBw
ZWRTeW1ib2xOYW1lKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgQU5HTEVTaGFkZXJTeW1ib2xU
eXBlIHN5bWJvbFR5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICBHQzNEc2l6ZWkgY291
bnQgPSAwOwotICAgIFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyc1syXSA9IHsgfTsKLSAgICBnZXRB
dHRhY2hlZFNoYWRlcnMocHJvZ3JhbSwgMiwgJmNvdW50LCBzaGFkZXJzKTsKLQotICAgIGZvciAo
R0MzRHNpemVpIGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICBhdXRvIG1hcHBlZE5h
bWUgPSBtYXBwZWRTeW1ib2xJblNoYWRlclNvdXJjZU1hcChzaGFkZXJzW2ldLCBzeW1ib2xUeXBl
LCBuYW1lKTsKLSAgICAgICAgaWYgKG1hcHBlZE5hbWUpCi0gICAgICAgICAgICByZXR1cm4gbWFw
cGVkTmFtZS52YWx1ZSgpOwotICAgIH0KLQotICAgIC8vIFdlIG1pZ2h0IGhhdmUgZGV0YWNoZWQg
b3IgZGVsZXRlZCB0aGUgc2hhZGVycyBhZnRlciBsaW5raW5nLgotICAgIGF1dG8gcmVzdWx0ID0g
bV9saW5rZWRTaGFkZXJNYXAuZmluZChwcm9ncmFtKTsKLSAgICBpZiAocmVzdWx0ICE9IG1fbGlu
a2VkU2hhZGVyTWFwLmVuZCgpKSB7Ci0gICAgICAgIGF1dG8gbGlua2VkU2hhZGVycyA9IHJlc3Vs
dC0+dmFsdWU7Ci0gICAgICAgIGF1dG8gbWFwcGVkTmFtZSA9IG1hcHBlZFN5bWJvbEluU2hhZGVy
U291cmNlTWFwKGxpbmtlZFNoYWRlcnMuZmlyc3QsIHN5bWJvbFR5cGUsIG5hbWUpOwotICAgICAg
ICBpZiAobWFwcGVkTmFtZSkKLSAgICAgICAgICAgIHJldHVybiBtYXBwZWROYW1lLnZhbHVlKCk7
Ci0gICAgICAgIG1hcHBlZE5hbWUgPSBtYXBwZWRTeW1ib2xJblNoYWRlclNvdXJjZU1hcChsaW5r
ZWRTaGFkZXJzLnNlY29uZCwgc3ltYm9sVHlwZSwgbmFtZSk7Ci0gICAgICAgIGlmIChtYXBwZWRO
YW1lKQotICAgICAgICAgICAgcmV0dXJuIG1hcHBlZE5hbWUudmFsdWUoKTsKLSAgICB9Ci0KLSAg
ICBpZiAoc3ltYm9sVHlwZSA9PSBTSEFERVJfU1lNQk9MX1RZUEVfQVRUUklCVVRFICYmICFuYW1l
LmlzRW1wdHkoKSkgewotICAgICAgICAvLyBBdHRyaWJ1dGVzIGFyZSBhIHNwZWNpYWwgY2FzZTog
dGhleSBtYXkgYmUgcmVxdWVzdGVkIGJlZm9yZSBhbnkgc2hhZGVycyBoYXZlIGJlZW4gY29tcGls
ZWQsCi0gICAgICAgIC8vIGFuZCBhcmVuJ3QgZXZlbiByZXF1aXJlZCB0byBiZSB1c2VkIGluIGFu
eSBzaGFkZXIgcHJvZ3JhbS4KLSAgICAgICAgaWYgKCFuYW1lSGFzaE1hcEZvclNoYWRlcnMpCi0g
ICAgICAgICAgICBuYW1lSGFzaE1hcEZvclNoYWRlcnMgPSBzdGQ6Om1ha2VfdW5pcXVlPFNoYWRl
ck5hbWVIYXNoPigpOwotICAgICAgICBzZXRDdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFkZXIobmFt
ZUhhc2hNYXBGb3JTaGFkZXJzLmdldCgpKTsKLQotICAgICAgICBhdXRvIGdlbmVyYXRlZE5hbWUg
PSBnZW5lcmF0ZUhhc2hlZE5hbWUobmFtZSk7Ci0KLSAgICAgICAgc2V0Q3VycmVudE5hbWVIYXNo
TWFwRm9yU2hhZGVyKG51bGxwdHIpOwotCi0gICAgICAgIG1fcG9zc2libHlVbnVzZWRBdHRyaWJ1
dGVNYXAuc2V0KGdlbmVyYXRlZE5hbWUsIG5hbWUpOwotCi0gICAgICAgIHJldHVybiBnZW5lcmF0
ZWROYW1lOwotICAgIH0KLQotICAgIHJldHVybiBuYW1lOwotfQotCi1PcHRpb25hbDxTdHJpbmc+
IEdyYXBoaWNzQ29udGV4dDNEOjpvcmlnaW5hbFN5bWJvbEluU2hhZGVyU291cmNlTWFwKFBsYXRm
b3JtM0RPYmplY3Qgc2hhZGVyLCBBTkdMRVNoYWRlclN5bWJvbFR5cGUgc3ltYm9sVHlwZSwgY29u
c3QgU3RyaW5nJiBuYW1lKQotewotICAgIGF1dG8gcmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAu
ZmluZChzaGFkZXIpOwotICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkp
Ci0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICBjb25zdCBhdXRvJiBzeW1ib2xN
YXAgPSByZXN1bHQtPnZhbHVlLnN5bWJvbE1hcChzeW1ib2xUeXBlKTsKLSAgICBmb3IgKGNvbnN0
IGF1dG8mIHN5bWJvbEVudHJ5IDogc3ltYm9sTWFwKSB7Ci0gICAgICAgIGlmIChuYW1lID09IHN5
bWJvbEVudHJ5LnZhbHVlLm1hcHBlZE5hbWUuY19zdHIoKSkKLSAgICAgICAgICAgIHJldHVybiBz
eW1ib2xFbnRyeS5rZXk7Ci0gICAgfQotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLVN0
cmluZyBHcmFwaGljc0NvbnRleHQzRDo6b3JpZ2luYWxTeW1ib2xOYW1lKFBsYXRmb3JtM0RPYmpl
Y3QgcHJvZ3JhbSwgQU5HTEVTaGFkZXJTeW1ib2xUeXBlIHN5bWJvbFR5cGUsIGNvbnN0IFN0cmlu
ZyYgbmFtZSkKLXsKLSAgICBHQzNEc2l6ZWkgY291bnQ7Ci0gICAgUGxhdGZvcm0zRE9iamVjdCBz
aGFkZXJzWzJdOwotICAgIGdldEF0dGFjaGVkU2hhZGVycyhwcm9ncmFtLCAyLCAmY291bnQsIHNo
YWRlcnMpOwotICAgIAotICAgIGZvciAoR0MzRHNpemVpIGkgPSAwOyBpIDwgY291bnQ7ICsraSkg
ewotICAgICAgICBhdXRvIG9yaWdpbmFsTmFtZSA9IG9yaWdpbmFsU3ltYm9sSW5TaGFkZXJTb3Vy
Y2VNYXAoc2hhZGVyc1tpXSwgc3ltYm9sVHlwZSwgbmFtZSk7Ci0gICAgICAgIGlmIChvcmlnaW5h
bE5hbWUpCi0gICAgICAgICAgICByZXR1cm4gb3JpZ2luYWxOYW1lLnZhbHVlKCk7Ci0gICAgfQot
Ci0gICAgLy8gV2UgbWlnaHQgaGF2ZSBkZXRhY2hlZCBvciBkZWxldGVkIHRoZSBzaGFkZXJzIGFm
dGVyIGxpbmtpbmcuCi0gICAgYXV0byByZXN1bHQgPSBtX2xpbmtlZFNoYWRlck1hcC5maW5kKHBy
b2dyYW0pOwotICAgIGlmIChyZXN1bHQgIT0gbV9saW5rZWRTaGFkZXJNYXAuZW5kKCkpIHsKLSAg
ICAgICAgYXV0byBsaW5rZWRTaGFkZXJzID0gcmVzdWx0LT52YWx1ZTsKLSAgICAgICAgYXV0byBv
cmlnaW5hbE5hbWUgPSBvcmlnaW5hbFN5bWJvbEluU2hhZGVyU291cmNlTWFwKGxpbmtlZFNoYWRl
cnMuZmlyc3QsIHN5bWJvbFR5cGUsIG5hbWUpOwotICAgICAgICBpZiAob3JpZ2luYWxOYW1lKQot
ICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsTmFtZS52YWx1ZSgpOwotICAgICAgICBvcmlnaW5h
bE5hbWUgPSBvcmlnaW5hbFN5bWJvbEluU2hhZGVyU291cmNlTWFwKGxpbmtlZFNoYWRlcnMuc2Vj
b25kLCBzeW1ib2xUeXBlLCBuYW1lKTsKLSAgICAgICAgaWYgKG9yaWdpbmFsTmFtZSkKLSAgICAg
ICAgICAgIHJldHVybiBvcmlnaW5hbE5hbWUudmFsdWUoKTsKLSAgICB9Ci0KLSAgICBpZiAoc3lt
Ym9sVHlwZSA9PSBTSEFERVJfU1lNQk9MX1RZUEVfQVRUUklCVVRFICYmICFuYW1lLmlzRW1wdHko
KSkgewotICAgICAgICAvLyBBdHRyaWJ1dGVzIGFyZSBhIHNwZWNpYWwgY2FzZTogdGhleSBtYXkg
YmUgcmVxdWVzdGVkIGJlZm9yZSBhbnkgc2hhZGVycyBoYXZlIGJlZW4gY29tcGlsZWQsCi0gICAg
ICAgIC8vIGFuZCBhcmVuJ3QgZXZlbiByZXF1aXJlZCB0byBiZSB1c2VkIGluIGFueSBzaGFkZXIg
cHJvZ3JhbS4KLQotICAgICAgICBjb25zdCBhdXRvJiBjYWNoZWQgPSBtX3Bvc3NpYmx5VW51c2Vk
QXR0cmlidXRlTWFwLmZpbmQobmFtZSk7Ci0gICAgICAgIGlmIChjYWNoZWQgIT0gbV9wb3NzaWJs
eVVudXNlZEF0dHJpYnV0ZU1hcC5lbmQoKSkKLSAgICAgICAgICAgIHJldHVybiBjYWNoZWQtPnZh
bHVlOwotICAgIH0KLQotICAgIHJldHVybiBuYW1lOwotfQotCi1TdHJpbmcgR3JhcGhpY3NDb250
ZXh0M0Q6Om1hcHBlZFN5bWJvbE5hbWUoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXJzWzJdLCBzaXpl
X3QgY291bnQsIGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICBmb3IgKHNpemVfdCBzeW1ib2xU
eXBlID0gMDsgc3ltYm9sVHlwZSA8PSBzdGF0aWNfY2FzdDxzaXplX3Q+KFNIQURFUl9TWU1CT0xf
VFlQRV9WQVJZSU5HKTsgKytzeW1ib2xUeXBlKSB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICAgICAgU2hhZGVyU291cmNlTWFwOjppdGVyYXRv
ciByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcnNbaV0pOwotICAgICAgICAg
ICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkKLSAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgY29uc3QgU2hhZGVyU3ltYm9s
TWFwJiBzeW1ib2xNYXAgPSByZXN1bHQtPnZhbHVlLnN5bWJvbE1hcChzdGF0aWNfY2FzdDxlbnVt
IEFOR0xFU2hhZGVyU3ltYm9sVHlwZT4oc3ltYm9sVHlwZSkpOwotICAgICAgICAgICAgZm9yIChj
b25zdCBhdXRvJiBzeW1ib2xFbnRyeSA6IHN5bWJvbE1hcCkgewotICAgICAgICAgICAgICAgIGlm
IChuYW1lID09IHN5bWJvbEVudHJ5LnZhbHVlLm1hcHBlZE5hbWUuY19zdHIoKSkKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHN5bWJvbEVudHJ5LmtleTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgIH0KLSAgICByZXR1cm4gbmFtZTsKLX0KLQogaW50IEdyYXBoaWNzQ29udGV4dDNE
OjpnZXRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0cmlu
ZyYgbmFtZSkKIHsKICAgICBpZiAoIXByb2dyYW0pCkBAIC0xMzc5LDE5ICsxMDAxLDEyIEBAIGlu
dCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0QXR0cmliTG9jYXRpb24oUGxhdGZvcm0zRE9iamVjdCBw
cm9ncmFtLCBjb25zdCBTdHJpbmcmCiAKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKIAotICAg
IFN0cmluZyBtYXBwZWROYW1lID0gbWFwcGVkU3ltYm9sTmFtZShwcm9ncmFtLCBTSEFERVJfU1lN
Qk9MX1RZUEVfQVRUUklCVVRFLCBuYW1lKTsKLSAgICBMT0coV2ViR0wsICJnbDo6R2V0QXR0cmli
TG9jYXRpb24gaXMgbWFwcGluZyAlcyB0byAlcyIsIG5hbWUudXRmOCgpLmRhdGEoKSwgbWFwcGVk
TmFtZS51dGY4KCkuZGF0YSgpKTsKLSAgICByZXR1cm4gZ2w6OkdldEF0dHJpYkxvY2F0aW9uKHBy
b2dyYW0sIG1hcHBlZE5hbWUudXRmOCgpLmRhdGEoKSk7CisgICAgcmV0dXJuIGdsOjpHZXRBdHRy
aWJMb2NhdGlvbihwcm9ncmFtLCBuYW1lLnV0ZjgoKS5kYXRhKCkpOwogfQogCiBpbnQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmdldEF0dHJpYkxvY2F0aW9uRGlyZWN0KFBsYXRmb3JtM0RPYmplY3QgcHJv
Z3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQogewotICAgIGlmICghcHJvZ3JhbSkKLSAgICAgICAg
cmV0dXJuIC0xOwotCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KLSAgICByZXR1cm4gZ2w6
OkdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIG5hbWUudXRmOCgpLmRhdGEoKSk7CisgICAgcmV0
dXJuIGdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIG5hbWUpOwogfQogCiBHcmFwaGljc0NvbnRl
eHQzREF0dHJpYnV0ZXMgR3JhcGhpY3NDb250ZXh0M0Q6OmdldENvbnRleHRBdHRyaWJ1dGVzKCkK
QEAgLTE0MDgsNyArMTAyMyw3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6Om1vdmVFcnJvcnNU
b1N5bnRoZXRpY0Vycm9yTGlzdCgpCiAgICAgLy8gYSBwcm9ibGVtIGRyaXZlciBoYXMgYSBidWcg
dGhhdCBjYXVzZXMgaXQgdG8gbmV2ZXIgY2xlYXIgdGhlIGVycm9yLgogICAgIC8vIE90aGVyd2lz
ZSwgd2Ugd291bGQganVzdCBsb29wIHVudGlsIHdlIGdvdCBOT19FUlJPUi4KICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgMTAwOyArK2kpIHsKLSAgICAgICAgR0MzRGVudW0gZXJyb3IgPSBn
bEdldEVycm9yKCk7CisgICAgICAgIEdDM0RlbnVtIGVycm9yID0gZ2w6OkdldEVycm9yKCk7CiAg
ICAgICAgIGlmIChlcnJvciA9PSBOT19FUlJPUikKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBtX3N5bnRoZXRpY0Vycm9ycy5hZGQoZXJyb3IpOwpAQCAtMTUxNCwxNCArMTEyOSw2IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OmxpbmtQcm9ncmFtKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3Jh
bSkKIHsKICAgICBBU1NFUlQocHJvZ3JhbSk7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0K
LSAgICBHQzNEc2l6ZWkgY291bnQgPSAwOwotICAgIFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyc1sy
XSA9IHsgfTsKLSAgICBnZXRBdHRhY2hlZFNoYWRlcnMocHJvZ3JhbSwgMiwgJmNvdW50LCBzaGFk
ZXJzKTsKLQotICAgIGlmIChjb3VudCA9PSAyKQotICAgICAgICBtX2xpbmtlZFNoYWRlck1hcC5z
ZXQocHJvZ3JhbSwgc3RkOjptYWtlX3BhaXIoc2hhZGVyc1swXSwgc2hhZGVyc1sxXSkpOwotCiAg
ICAgZ2w6OkxpbmtQcm9ncmFtKHByb2dyYW0pOwogfQogCkBAIC0xNTU1LDExICsxMTYyLDEwIEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnNoYWRlclNvdXJjZShQbGF0Zm9ybTNET2JqZWN0IHNo
YWRlciwgY29uc3QgU3RyaW5nJiBzdHJpCiAKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKIAot
ICAgIFNoYWRlclNvdXJjZUVudHJ5IGVudHJ5OwotCi0gICAgZW50cnkuc291cmNlID0gc3RyaW5n
OwotCi0gICAgbV9zaGFkZXJTb3VyY2VNYXAuc2V0KHNoYWRlciwgZW50cnkpOworICAgIGNvbnN0
IENTdHJpbmcmIHNoYWRlclNvdXJjZUNTdHJpbmcgPSBzdHJpbmcudXRmOCgpOworICAgIGNvbnN0
IGNoYXIqIHNoYWRlclNvdXJjZVB0ciA9IHNoYWRlclNvdXJjZUNTdHJpbmcuZGF0YSgpOworICAg
IGludCBzaGFkZXJTb3VyY2VMZW5ndGggPSBzaGFkZXJTb3VyY2VDU3RyaW5nLmxlbmd0aCgpOwor
ICAgIGdsOjpTaGFkZXJTb3VyY2Uoc2hhZGVyLCAxLCAmc2hhZGVyU291cmNlUHRyLCAmc2hhZGVy
U291cmNlTGVuZ3RoKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbEZ1bmMo
R0MzRGVudW0gZnVuYywgR0MzRGludCByZWYsIEdDM0R1aW50IG1hc2spCkBAIC0xODc4LDgwICsx
NDg0LDIwIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFByb2dyYW1pdihQbGF0Zm9ybTNE
T2JqZWN0IHByb2dyYW0sIEdDM0RlbnVtIHBuYW1lLCBHCiAgICAgZ2w6OkdldFByb2dyYW1pdihw
cm9ncmFtLCBwbmFtZSwgdmFsdWUpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRO
b25CdWlsdEluQWN0aXZlU3ltYm9sQ291bnQoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNE
ZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpCi17Ci0gICAgQVNTRVJUKEFDVElWRV9BVFRSSUJV
VEVTID09IHBuYW1lIHx8IEFDVElWRV9VTklGT1JNUyA9PSBwbmFtZSk7Ci0gICAgaWYgKCF2YWx1
ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgY29u
c3QgYXV0byYgcmVzdWx0ID0gbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAuZmluZChwcm9n
cmFtKTsKLSAgICBpZiAocmVzdWx0ICE9IG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLmVu
ZCgpKSB7Ci0gICAgICAgICp2YWx1ZSA9IHJlc3VsdC0+dmFsdWUuY291bnRGb3JUeXBlKHBuYW1l
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENv
dW50TWFwLnNldChwcm9ncmFtLCBBY3RpdmVTaGFkZXJTeW1ib2xDb3VudHMoKSk7Ci0gICAgQWN0
aXZlU2hhZGVyU3ltYm9sQ291bnRzJiBzeW1ib2xDb3VudHMgPSBtX3NoYWRlclByb2dyYW1TeW1i
b2xDb3VudE1hcC5maW5kKHByb2dyYW0pLT52YWx1ZTsKLQotICAgIC8vIFJldHJpZXZlIHRoZSBh
Y3RpdmUgYXR0cmlidXRlcywgYnVpbGQgYSBmaWx0ZXJlZCBjb3VudCwgYW5kIGEgbWFwcGluZyBv
ZgotICAgIC8vIG91ciBpbnRlcm5hbCBhdHRyaWJ1dGVzIGluZGV4ZXMgdG8gdGhlIHJlYWwgdW5m
aWx0ZXJlZCBpbmRleGVzIGluc2lkZSBPcGVuR0wuCi0gICAgR0MzRGludCBhdHRyaWJ1dGVDb3Vu
dCA9IDA7Ci0gICAgZ2w6OkdldFByb2dyYW1pdihwcm9ncmFtLCBBQ1RJVkVfQVRUUklCVVRFUywg
JmF0dHJpYnV0ZUNvdW50KTsKLSAgICBmb3IgKEdDM0RpbnQgaSA9IDA7IGkgPCBhdHRyaWJ1dGVD
b3VudDsgKytpKSB7Ci0gICAgICAgIEFjdGl2ZUluZm8gaW5mbzsKLSAgICAgICAgZ2V0QWN0aXZl
QXR0cmliSW1wbChwcm9ncmFtLCBpLCBpbmZvKTsKLSAgICAgICAgaWYgKGluZm8ubmFtZS5zdGFy
dHNXaXRoKCJnbF8iKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIHN5bWJvbENv
dW50cy5maWx0ZXJlZFRvQWN0dWFsQXR0cmlidXRlSW5kZXhNYXAuYXBwZW5kKGkpOwotICAgIH0K
LSAgICAKLSAgICAvLyBEbyB0aGUgc2FtZSBmb3IgdW5pZm9ybXMuCi0gICAgR0MzRGludCB1bmlm
b3JtQ291bnQgPSAwOwotICAgIGdsOjpHZXRQcm9ncmFtaXYocHJvZ3JhbSwgQUNUSVZFX1VOSUZP
Uk1TLCAmdW5pZm9ybUNvdW50KTsKLSAgICBmb3IgKEdDM0RpbnQgaSA9IDA7IGkgPCB1bmlmb3Jt
Q291bnQ7ICsraSkgewotICAgICAgICBBY3RpdmVJbmZvIGluZm87Ci0gICAgICAgIGdldEFjdGl2
ZVVuaWZvcm1JbXBsKHByb2dyYW0sIGksIGluZm8pOwotICAgICAgICBpZiAoaW5mby5uYW1lLnN0
YXJ0c1dpdGgoImdsXyIpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIAotICAgICAg
ICBzeW1ib2xDb3VudHMuZmlsdGVyZWRUb0FjdHVhbFVuaWZvcm1JbmRleE1hcC5hcHBlbmQoaSk7
Ci0gICAgfQotICAgIAotICAgICp2YWx1ZSA9IHN5bWJvbENvdW50cy5jb3VudEZvclR5cGUocG5h
bWUpOwotfQotCiBTdHJpbmcgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFVubWFuZ2xlZEluZm9Mb2co
UGxhdGZvcm0zRE9iamVjdCBzaGFkZXJzWzJdLCBHQzNEc2l6ZWkgY291bnQsIGNvbnN0IFN0cmlu
ZyYgbG9nKQogeworICAgIFVOVVNFRF9QQVJBTShzaGFkZXJzKTsKKyAgICBVTlVTRURfUEFSQU0o
Y291bnQpOwogICAgIExPRyhXZWJHTCwgIk9yaWdpbmFsIFNoYWRlckluZm9Mb2c6XG4lcyIsIGxv
Zy51dGY4KCkuZGF0YSgpKTsKIAotICAgIEpTQzo6WWFycjo6UmVndWxhckV4cHJlc3Npb24gcmVn
RXhwKCJ3ZWJnbF9bMDEyMzQ1Njc4OWFiY2RlZkFCQ0RFRl0rIik7Ci0KICAgICBTdHJpbmdCdWls
ZGVyIHByb2Nlc3NlZExvZzsKLSAgICAKKwogICAgIC8vIEFOR0xFIGluc2VydHMgYSAiI2V4dGVu
c2lvbiIgbGluZSBpbnRvIHRoZSBzaGFkZXIgc291cmNlIHRoYXQKICAgICAvLyBjYXVzZXMgYSB3
YXJuaW5nIGluIHNvbWUgY29tcGlsZXJzLiBUaGVyZSBpcyBubyBwb2ludCBzaG93aW5nCiAgICAg
Ly8gdGhpcyB3YXJuaW5nIHRvIHRoZSB1c2VyIHNpbmNlIHRoZXkgZGlkbid0IHdyaXRlIHRoZSBj
b2RlIHRoYXQKICAgICAvLyBpcyBjYXVzaW5nIGl0LgogICAgIHN0YXRpYyBjb25zdCBOZXZlckRl
c3Ryb3llZDxTdHJpbmc+IGFuZ2xlV2FybmluZyB7ICJXQVJOSU5HOiAwOjE6IGV4dGVuc2lvbiAn
R0xfQVJCX2dwdV9zaGFkZXI1JyBpcyBub3Qgc3VwcG9ydGVkXG4iX3MgfTsKICAgICBpbnQgc3Rh
cnRGcm9tID0gbG9nLnN0YXJ0c1dpdGgoYW5nbGVXYXJuaW5nKSA/IGFuZ2xlV2FybmluZy5nZXQo
KS5sZW5ndGgoKSA6IDA7Ci0gICAgaW50IG1hdGNoZWRMZW5ndGggPSAwOwotCi0gICAgZG8gewot
ICAgICAgICBpbnQgc3RhcnQgPSByZWdFeHAubWF0Y2gobG9nLCBzdGFydEZyb20sICZtYXRjaGVk
TGVuZ3RoKTsKLSAgICAgICAgaWYgKHN0YXJ0ID09IC0xKQotICAgICAgICAgICAgYnJlYWs7Ci0K
LSAgICAgICAgcHJvY2Vzc2VkTG9nLmFwcGVuZChsb2cuc3Vic3RyaW5nKHN0YXJ0RnJvbSwgc3Rh
cnQgLSBzdGFydEZyb20pKTsKLSAgICAgICAgc3RhcnRGcm9tID0gc3RhcnQgKyBtYXRjaGVkTGVu
Z3RoOwotCi0gICAgICAgIGNvbnN0IFN0cmluZyYgbWFuZ2xlZFN5bWJvbCA9IGxvZy5zdWJzdHJp
bmcoc3RhcnQsIG1hdGNoZWRMZW5ndGgpOwotICAgICAgICBjb25zdCBTdHJpbmcmIG1hcHBlZFN5
bWJvbCA9IG1hcHBlZFN5bWJvbE5hbWUoc2hhZGVycywgY291bnQsIG1hbmdsZWRTeW1ib2wpOwot
ICAgICAgICBMT0coV2ViR0wsICJEZW1hbmdsaW5nOiAlcyB0byAlcyIsIG1hbmdsZWRTeW1ib2wu
dXRmOCgpLmRhdGEoKSwgbWFwcGVkU3ltYm9sLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICBwcm9j
ZXNzZWRMb2cuYXBwZW5kKG1hcHBlZFN5bWJvbCk7Ci0gICAgfSB3aGlsZSAoc3RhcnRGcm9tIDwg
c3RhdGljX2Nhc3Q8aW50Pihsb2cubGVuZ3RoKCkpKTsKLQogICAgIHByb2Nlc3NlZExvZy5hcHBl
bmQobG9nLnN1YnN0cmluZyhzdGFydEZyb20sIGxvZy5sZW5ndGgoKSAtIHN0YXJ0RnJvbSkpOwog
CiAgICAgTE9HKFdlYkdMLCAiVW5tYW5nbGVkIFNoYWRlckluZm9Mb2c6XG4lcyIsIHByb2Nlc3Nl
ZExvZy50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwpAQCAtMTk5MCwzNCArMTUzNiw3IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlcml2KFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVy
LCBHQzNEZW51bSBwbmFtZSwgR0MzCiAgICAgQVNTRVJUKHNoYWRlcik7CiAKICAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLQotICAgIGNvbnN0IGF1dG8mIHJlc3VsdCA9IG1fc2hhZGVyU291cmNl
TWFwLmZpbmQoc2hhZGVyKTsKLSAgICAKLSAgICBzd2l0Y2ggKHBuYW1lKSB7Ci0gICAgY2FzZSBE
RUxFVEVfU1RBVFVTOgotICAgIGNhc2UgU0hBREVSX1RZUEU6Ci0gICAgICAgIGdsOjpHZXRTaGFk
ZXJpdihzaGFkZXIsIHBuYW1lLCB2YWx1ZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ09N
UElMRV9TVEFUVVM6Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5k
KCkpIHsKLSAgICAgICAgICAgICp2YWx1ZSA9IHN0YXRpY19jYXN0PGludD4oZmFsc2UpOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgICp2YWx1ZSA9IHN0YXRpY19jYXN0
PGludD4ocmVzdWx0LT52YWx1ZS5pc1ZhbGlkKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJ
TkZPX0xPR19MRU5HVEg6Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAu
ZW5kKCkpIHsKLSAgICAgICAgICAgICp2YWx1ZSA9IDA7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLSAgICAgICAgKnZhbHVlID0gZ2V0U2hhZGVySW5mb0xvZyhzaGFkZXIpLmxlbmd0
aCgpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNIQURFUl9TT1VSQ0VfTEVOR1RIOgotICAg
ICAgICAqdmFsdWUgPSBnZXRTaGFkZXJTb3VyY2Uoc2hhZGVyKS5sZW5ndGgoKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9F
TlVNKTsKLSAgICB9CisgICAgZ2w6OkdldFNoYWRlcml2KHNoYWRlciwgcG5hbWUsIHZhbHVlKTsK
IH0KIAogU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJJbmZvTG9nKFBsYXRmb3Jt
M0RPYmplY3Qgc2hhZGVyKQpAQCAtMjAyNSwxNSArMTU0NCw2IEBAIFN0cmluZyBHcmFwaGljc0Nv
bnRleHQzRDo6Z2V0U2hhZGVySW5mb0xvZyhQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKICAgICBB
U1NFUlQoc2hhZGVyKTsKIAogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotCi0gICAgY29uc3Qg
YXV0byYgcmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChzaGFkZXIpOwotICAgIGlmIChy
ZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpCi0gICAgICAgIHJldHVybiBTdHJpbmco
KTsgCi0KLSAgICBjb25zdCBTaGFkZXJTb3VyY2VFbnRyeSYgZW50cnkgPSByZXN1bHQtPnZhbHVl
OwotICAgIGlmICghZW50cnkuaXNWYWxpZCkKLSAgICAgICAgcmV0dXJuIGVudHJ5LmxvZzsKLQog
ICAgIEdMaW50IGxlbmd0aCA9IDA7CiAgICAgZ2w6OkdldFNoYWRlcml2KHNoYWRlciwgR0xfSU5G
T19MT0dfTEVOR1RILCAmbGVuZ3RoKTsKICAgICBpZiAoIWxlbmd0aCkKQEAgLTIwNDcsMjAgKzE1
NTcsNiBAQCBTdHJpbmcgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlckluZm9Mb2coUGxhdGZv
cm0zRE9iamVjdCBzaGFkZXIpCiAgICAgcmV0dXJuIGdldFVubWFuZ2xlZEluZm9Mb2coc2hhZGVy
cywgMSwgU3RyaW5nKGluZm8uZGF0YSgpLCBzaXplKSk7CiB9CiAKLVN0cmluZyBHcmFwaGljc0Nv
bnRleHQzRDo6Z2V0U2hhZGVyU291cmNlKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQotewotICAg
IEFTU0VSVChzaGFkZXIpOwotCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KLSAgICBjb25z
dCBhdXRvJiByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7Ci0gICAgaWYg
KHJlc3VsdCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIFN0cmlu
ZygpOyAKLQotICAgIHJldHVybiByZXN1bHQtPnZhbHVlLnNvdXJjZTsKLX0KLQotCiB2b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpnZXRUZXhQYXJhbWV0ZXJmdihHQzNEZW51bSB0YXJnZXQsIEdDM0Rl
bnVtIHBuYW1lLCBHQzNEZmxvYXQqIHZhbHVlKQogewogICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwpAQCAtMjA5MCwxMCArMTU4Niw3IEBAIEdDM0RpbnQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFVu
aWZvcm1Mb2NhdGlvbihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0CiAgICAgQVNT
RVJUKHByb2dyYW0pOwogCiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KLSAgICBTdHJpbmcg
bWFwcGVkTmFtZSA9IG1hcHBlZFN5bWJvbE5hbWUocHJvZ3JhbSwgU0hBREVSX1NZTUJPTF9UWVBF
X1VOSUZPUk0sIG5hbWUpOwotICAgIExPRyhXZWJHTCwgIjo6Z2V0VW5pZm9ybUxvY2F0aW9uIGlz
IG1hcHBpbmcgJXMgdG8gJXMiLCBuYW1lLnV0ZjgoKS5kYXRhKCksIG1hcHBlZE5hbWUudXRmOCgp
LmRhdGEoKSk7Ci0gICAgcmV0dXJuIGdsOjpHZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgbWFw
cGVkTmFtZS51dGY4KCkuZGF0YSgpKTsKKyAgICByZXR1cm4gZ2w6OkdldFVuaWZvcm1Mb2NhdGlv
bihwcm9ncmFtLCBuYW1lLnV0ZjgoKS5kYXRhKCkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpnZXRWZXJ0ZXhBdHRyaWJmdihHQzNEdWludCBpbmRleCwgR0MzRGVudW0gcG5hbWUsIEdD
M0RmbG9hdCogdmFsdWUpCkBAIC0yMTQ0LDcgKzE2MzcsNyBAQCBQbGF0Zm9ybTNET2JqZWN0IEdy
YXBoaWNzQ29udGV4dDNEOjpjcmVhdGVCdWZmZXIoKQogewogICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwogICAgIEdMdWludCBvID0gMDsKLSAgICBnbEdlbkJ1ZmZlcnMoMSwgJm8pOworICAgIGds
OjpHZW5CdWZmZXJzKDEsICZvKTsKICAgICByZXR1cm4gbzsKIH0KIApAQCAtMjE1MiwzNSArMTY0
NSwzNSBAQCBQbGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVGcmFtZWJ1
ZmZlcigpCiB7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgR0x1aW50IG8gPSAwOwot
ICAgIGdsR2VuRnJhbWVidWZmZXJzKDEsICZvKTsKKyAgICBnbDo6R2VuRnJhbWVidWZmZXJzKDEs
ICZvKTsKICAgICByZXR1cm4gbzsKIH0KIAogUGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRl
eHQzRDo6Y3JlYXRlUHJvZ3JhbSgpCiB7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAg
cmV0dXJuIGdsQ3JlYXRlUHJvZ3JhbSgpOworICAgIHJldHVybiBnbDo6Q3JlYXRlUHJvZ3JhbSgp
OwogfQogCiBQbGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVSZW5kZXJi
dWZmZXIoKQogewogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIEdMdWludCBvID0gMDsK
LSAgICBnbEdlblJlbmRlcmJ1ZmZlcnMoMSwgJm8pOworICAgIGdsOjpHZW5SZW5kZXJidWZmZXJz
KDEsICZvKTsKICAgICByZXR1cm4gbzsKIH0KIAogUGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0Nv
bnRleHQzRDo6Y3JlYXRlU2hhZGVyKEdDM0RlbnVtIHR5cGUpCiB7CiAgICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7Ci0gICAgcmV0dXJuIGdsQ3JlYXRlU2hhZGVyKCh0eXBlID09IEZSQUdNRU5UX1NI
QURFUikgPyBHTF9GUkFHTUVOVF9TSEFERVIgOiBHTF9WRVJURVhfU0hBREVSKTsKKyAgICByZXR1
cm4gZ2w6OkNyZWF0ZVNoYWRlcigodHlwZSA9PSBGUkFHTUVOVF9TSEFERVIpID8gR0xfRlJBR01F
TlRfU0hBREVSIDogR0xfVkVSVEVYX1NIQURFUik7CiB9CiAKIFBsYXRmb3JtM0RPYmplY3QgR3Jh
cGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVRleHR1cmUoKQogewogICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwogICAgIEdMdWludCBvID0gMDsKLSAgICBnbEdlblRleHR1cmVzKDEsICZvKTsKKyAgICBn
bDo6R2VuVGV4dHVyZXMoMSwgJm8pOwogICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQo
byk7CiAgICAgcmV0dXJuIG87CiB9CkBAIC0yMTg4LDcgKzE2ODEsNyBAQCBQbGF0Zm9ybTNET2Jq
ZWN0IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVUZXh0dXJlKCkKIHZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OmRlbGV0ZUJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0IGJ1ZmZlcikKIHsKICAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKLSAgICBnbERlbGV0ZUJ1ZmZlcnMoMSwgJmJ1ZmZlcik7CisgICAg
Z2w6OkRlbGV0ZUJ1ZmZlcnMoMSwgJmJ1ZmZlcik7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmRlbGV0ZUZyYW1lYnVmZmVyKFBsYXRmb3JtM0RPYmplY3QgZnJhbWVidWZmZXIpCkBAIC0y
MTk5LDI2ICsxNjkyLDI1IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZUZyYW1lYnVm
ZmVyKFBsYXRmb3JtM0RPYmplY3QgZnJhbWVidWZmZXIpCiAgICAgICAgIC8vIG9wZXJhdGlvbnMg
YWZ0ZXIgaXQgZ2V0cyBkZWxldGVkLgogICAgICAgICBiaW5kRnJhbWVidWZmZXIoRlJBTUVCVUZG
RVIsIDApOwogICAgIH0KLSAgICBnbERlbGV0ZUZyYW1lYnVmZmVycygxLCAmZnJhbWVidWZmZXIp
OworICAgIGdsOjpEZWxldGVGcmFtZWJ1ZmZlcnMoMSwgJmZyYW1lYnVmZmVyKTsKIH0KIAogdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0IHByb2dy
YW0pCiB7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9zaGFkZXJQcm9ncmFtU3lt
Ym9sQ291bnRNYXAucmVtb3ZlKHByb2dyYW0pOwotICAgIGdsRGVsZXRlUHJvZ3JhbShwcm9ncmFt
KTsKKyAgICBnbDo6RGVsZXRlUHJvZ3JhbShwcm9ncmFtKTsKIH0KIAogdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6ZGVsZXRlUmVuZGVyYnVmZmVyKFBsYXRmb3JtM0RPYmplY3QgcmVuZGVyYnVmZmVy
KQogewogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsRGVsZXRlUmVuZGVyYnVmZmVy
cygxLCAmcmVuZGVyYnVmZmVyKTsKKyAgICBnbDo6RGVsZXRlUmVuZGVyYnVmZmVycygxLCAmcmVu
ZGVyYnVmZmVyKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlU2hhZGVyKFBs
YXRmb3JtM0RPYmplY3Qgc2hhZGVyKQogewogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAg
IGdsRGVsZXRlU2hhZGVyKHNoYWRlcik7CisgICAgZ2w6OkRlbGV0ZVNoYWRlcihzaGFkZXIpOwog
fQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVUZXh0dXJlKFBsYXRmb3JtM0RPYmpl
Y3QgdGV4dHVyZSkKQEAgLTIyMjcsNyArMTcxOSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OmRlbGV0ZVRleHR1cmUoUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlKQogICAgIG1fc3RhdGUuYm91
bmRUZXh0dXJlTWFwLnJlbW92ZUlmKFt0ZXh0dXJlXSAoYXV0byYga2V5VmFsdWUpIHsKICAgICAg
ICAgcmV0dXJuIGtleVZhbHVlLnZhbHVlLmZpcnN0ID09IHRleHR1cmU7CiAgICAgfSk7Ci0gICAg
Z2xEZWxldGVUZXh0dXJlcygxLCAmdGV4dHVyZSk7CisgICAgZ2w6OkRlbGV0ZVRleHR1cmVzKDEs
ICZ0ZXh0dXJlKTsKICAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQucmVtb3ZlQWxsKHRleHR1
cmUpOwogfQogCkBAIC0yMjM1LDcgKzE3MjcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpz
eW50aGVzaXplR0xFcnJvcihHQzNEZW51bSBlcnJvcikKIHsKICAgICAvLyBOZWVkIHRvIG1vdmUg
dGhlIGN1cnJlbnQgZXJyb3JzIHRvIHRoZSBzeW50aGV0aWMgZXJyb3IgbGlzdCB0bwogICAgIC8v
IHByZXNlcnZlIHRoZSBvcmRlciBvZiBlcnJvcnMsIHNvIGEgY2FsbGVyIHRvIGdldEVycm9yIHdp
bGwgZ2V0Ci0gICAgLy8gYW55IGVycm9ycyBmcm9tIGdsRXJyb3IgYmVmb3JlIHRoZSBlcnJvciB3
ZSBhcmUgc3ludGhlc2l6aW5nLgorICAgIC8vIGFueSBlcnJvcnMgZnJvbSBnbDo6RXJyb3IgYmVm
b3JlIHRoZSBlcnJvciB3ZSBhcmUgc3ludGhlc2l6aW5nLgogICAgIG1vdmVFcnJvcnNUb1N5bnRo
ZXRpY0Vycm9yTGlzdCgpOwogICAgIG1fc3ludGhldGljRXJyb3JzLmFkZChlcnJvcik7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFwaGlj
c0NvbnRleHQzRENvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29j
b2EvR3JhcGhpY3NDb250ZXh0M0RDb2NvYS5tbQppbmRleCAyZGVmYmEyNDI3NDc2MzUwMTZkNGNi
MTAwNmFhZjMyYTZhNGRmNzAyLi5lM2UyODdkMTZkNmIxYTk0YjEzMjYwNWEyNWNlNjg2ZDU1NWI2
YjZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9H
cmFwaGljc0NvbnRleHQzRENvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dDNEQ29jb2EubW0KQEAgLTYwLDcgKzYwLDE5IEBA
CiAjaW1wb3J0IDxPcGVuR0wvQ0dMUmVuZGVyZXJzLmg+CiAjaW1wb3J0IDxPcGVuR0wvZ2wuaD4K
ICNlbGlmIFVTRShBTkdMRSkKKyNkZWZpbmUgRUdMX0VHTF9QUk9UT1RZUEVTIDAKKy8vIFNraXAg
dGhlIGluY2x1c2lvbiBvZiBBTkdMRSdzIGV4cGxpY2l0IGNvbnRleHQgZW50cnkgcG9pbnRzIGZv
ciBub3cuCisjZGVmaW5lIEdMX0FOR0xFX2V4cGxpY2l0X2NvbnRleHQKKyNkZWZpbmUgR0xfQU5H
TEVfZXhwbGljaXRfY29udGV4dF9nbGVzMQordHlwZWRlZiB2b2lkKiBHTGVnbENvbnRleHQ7Cisj
aW5jbHVkZSA8QU5HTEUvZWdsLmg+CisjaW5jbHVkZSA8QU5HTEUvZWdsZXh0Lmg+CisjaW5jbHVk
ZSA8QU5HTEUvZWdsZXh0X2FuZ2xlLmg+CisjaW5jbHVkZSA8QU5HTEUvZW50cnlfcG9pbnRzX2Vn
bC5oPgogI2luY2x1ZGUgPEFOR0xFL2VudHJ5X3BvaW50c19nbGVzXzJfMF9hdXRvZ2VuLmg+Cisj
aW5jbHVkZSA8QU5HTEUvZW50cnlfcG9pbnRzX2dsZXNfZXh0X2F1dG9nZW4uaD4KKyNpbmNsdWRl
IDxBTkdMRS9nbDJleHQuaD4KKyNpbmNsdWRlIDxBTkdMRS9nbDJleHRfYW5nbGUuaD4KICNlbmRp
ZgogCiAjaWYgVVNFKE9QRU5HTF9FUykgfHwgVVNFKE9QRU5HTCkKQEAgLTI1NCwxMCArMjY2LDgg
QEAgR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNE
QXR0cmlidXRlcyBhdHRycywgSG9zdFdpbmQKICAgICAsIG1fcHJpdmF0ZShzdGQ6Om1ha2VfdW5p
cXVlPEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZT4odGhpcykpCiB7CiAjaWYgVVNFKEFOR0xFKQot
ICAgIGlmIChtX2F0dHJzLmlzV2ViR0wyKQotICAgICAgICBtX2NvbXBpbGVyID0gQU5HTEVXZWJL
aXRCcmlkZ2UoU0hfRVNTTF9PVVRQVVQsIFNIX1dFQkdMMl9TUEVDKTsKLSAgICBlbHNlCi0gICAg
ICAgIG1fY29tcGlsZXIgPSBBTkdMRVdlYktpdEJyaWRnZShTSF9FU1NMX09VVFBVVCk7CisgICAg
Ly8gSW4gdGhlIEFOR0xFIGJhY2tlbmQsIHRoZSBvbmx5IHNoYWRlciBjb21waWxlciBpbnN0YW50
aWF0ZWQgaXMKKyAgICAvLyB0aGUgb25lIEFOR0xFIHVzZXMgaW50ZXJuYWxseS4KICNlbHNlCiAj
aWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBpZiAobV9hdHRycy5pc1dlYkdMMikKQEAgLTM2
OCwxMyArMzc4LDcwIEBAIEdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmFw
aGljc0NvbnRleHQzREF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaW5kCiAgICAgICAgIDo6Z2xFbmFi
bGUoR3JhcGhpY3NDb250ZXh0M0Q6OlBSSU1JVElWRV9SRVNUQVJUKTsKIAogI2VsaWYgVVNFKEFO
R0xFKQotCi0gICAgLy8gRklYTUU6IGltcGxlbWVudCBjb250ZXh0IHNldHVwIHZpYSBBTkdMRS4K
ICAgICBVTlVTRURfUEFSQU0oaG9zdFdpbmRvdyk7CiAgICAgVU5VU0VEX1BBUkFNKHNoYXJlZENv
bnRleHQpOwogCi0jZW5kaWYKLSAgICAKKyAgICBtX2Rpc3BsYXlPYmogPSBFR0xfR2V0RGlzcGxh
eShFR0xfREVGQVVMVF9ESVNQTEFZKTsKKyAgICBpZiAobV9kaXNwbGF5T2JqID09IEVHTF9OT19E
SVNQTEFZKQorICAgICAgICByZXR1cm47CisgICAgRUdMaW50IG1ham9yVmVyc2lvbiwgbWlub3JW
ZXJzaW9uOworICAgIGlmIChFR0xfSW5pdGlhbGl6ZShtX2Rpc3BsYXlPYmosICZtYWpvclZlcnNp
b24sICZtaW5vclZlcnNpb24pID09IEVHTF9GQUxTRSkgeworICAgICAgICBMT0coV2ViR0wsICJF
R0xEaXNwbGF5IEluaXRpYWxpemF0aW9uIGZhaWxlZC4iKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBMT0coV2ViR0wsICJBTkdMRSBpbml0aWFsaXNlZCBNYWpvcjogJWQgTWlub3I6ICVk
IiwgbWFqb3JWZXJzaW9uLCBtaW5vclZlcnNpb24pOworICAgIGNvbnN0IGNoYXIgKmRpc3BsYXlF
eHRlbnNpb25zID0gRUdMX1F1ZXJ5U3RyaW5nKG1fZGlzcGxheU9iaiwgRUdMX0VYVEVOU0lPTlMp
OworICAgIExPRyhXZWJHTCwgIkV4dGVuc2lvbnM6ICVzIiwgZGlzcGxheUV4dGVuc2lvbnMpOwor
CisgICAgRUdMQ29uZmlnIGNvbmZpZzsKKyAgICBFR0xpbnQgY29uZmlnQXR0cmlidXRlc1tdID0g
eworICAgICAgICBFR0xfUkVOREVSQUJMRV9UWVBFLCBFR0xfT1BFTkdMX0VTMl9CSVQsCisgICAg
ICAgIEVHTF9SRURfU0laRSwgOCwKKyAgICAgICAgRUdMX0dSRUVOX1NJWkUsIDgsCisgICAgICAg
IEVHTF9CTFVFX1NJWkUsIDgsCisgICAgICAgIEVHTF9BTFBIQV9TSVpFLCA4LAorICAgICAgICBF
R0xfTk9ORQorICAgIH07CisgICAgRUdMaW50IG51bWJlckNvbmZpZ3NSZXR1cm5lZCA9IDA7Cisg
ICAgRUdMX0Nob29zZUNvbmZpZyhtX2Rpc3BsYXlPYmosIGNvbmZpZ0F0dHJpYnV0ZXMsICZjb25m
aWcsIDEsICZudW1iZXJDb25maWdzUmV0dXJuZWQpOworICAgIGlmIChudW1iZXJDb25maWdzUmV0
dXJuZWQgIT0gMSkgeworICAgICAgICBMT0coV2ViR0wsICJFR0xDb25maWcgSW5pdGlhbGl6YXRp
b24gZmFpbGVkLiIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIExPRyhXZWJHTCwgIkdv
dCBFR0xDb25maWciKTsKKworICAgIEVHTF9CaW5kQVBJKEVHTF9PUEVOR0xfRVNfQVBJKTsKKyAg
ICBpZiAoRUdMX0dldEVycm9yKCkgIT0gRUdMX1NVQ0NFU1MpIHsKKyAgICAgICAgTE9HKFdlYkdM
LCAiVW5hYmxlIHRvIGJpbmQgdG8gT1BFTkdMX0VTX0FQSSIpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgc3RkOjp2ZWN0b3I8RUdMaW50PiBjb250ZXh0QXR0cmlidXRlczsKKyAgICBj
b250ZXh0QXR0cmlidXRlcy5wdXNoX2JhY2soRUdMX0NPTlRFWFRfQ0xJRU5UX1ZFUlNJT04pOwor
ICAgIGNvbnRleHRBdHRyaWJ1dGVzLnB1c2hfYmFjaygyKTsKKyAgICBjb250ZXh0QXR0cmlidXRl
cy5wdXNoX2JhY2soRUdMX0NPTlRFWFRfV0VCR0xfQ09NUEFUSUJJTElUWV9BTkdMRSk7CisgICAg
Y29udGV4dEF0dHJpYnV0ZXMucHVzaF9iYWNrKEVHTF9UUlVFKTsKKyAgICBjb250ZXh0QXR0cmli
dXRlcy5wdXNoX2JhY2soRUdMX0VYVEVOU0lPTlNfRU5BQkxFRF9BTkdMRSk7CisgICAgY29udGV4
dEF0dHJpYnV0ZXMucHVzaF9iYWNrKEVHTF9UUlVFKTsKKyAgICBpZiAoc3Ryc3RyKGRpc3BsYXlF
eHRlbnNpb25zLCAiRUdMX0FOR0xFX3Bvd2VyX3ByZWZlcmVuY2UiKSkgeworICAgICAgICBjb250
ZXh0QXR0cmlidXRlcy5wdXNoX2JhY2soRUdMX1BPV0VSX1BSRUZFUkVOQ0VfQU5HTEUpOworICAg
ICAgICAvLyBFR0xfTE9XX1BPV0VSX0FOR0xFIGlzIHRoZSBkZWZhdWx0LiBDaGFuZ2UgdG8KKyAg
ICAgICAgLy8gRUdMX0hJR0hfUE9XRVJfQU5HTEUgaWYgZGVzaXJlZC4KKyAgICAgICAgY29udGV4
dEF0dHJpYnV0ZXMucHVzaF9iYWNrKEVHTF9MT1dfUE9XRVJfQU5HTEUpOworICAgIH0KKyAgICBj
b250ZXh0QXR0cmlidXRlcy5wdXNoX2JhY2soRUdMX05PTkUpOworCisgICAgbV9jb250ZXh0T2Jq
ID0gRUdMX0NyZWF0ZUNvbnRleHQobV9kaXNwbGF5T2JqLCBjb25maWcsIEVHTF9OT19DT05URVhU
LCBjb250ZXh0QXR0cmlidXRlcy5kYXRhKCkpOworICAgIGlmIChtX2NvbnRleHRPYmogPT0gRUdM
X05PX0NPTlRFWFQpIHsKKyAgICAgICAgTE9HKFdlYkdMLCAiRUdMQ29udGV4dCBJbml0aWFsaXph
dGlvbiBmYWlsZWQuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgTE9HKFdlYkdMLCAi
R290IEVHTENvbnRleHQiKTsKKworICAgIEVHTF9NYWtlQ3VycmVudChtX2Rpc3BsYXlPYmosIEVH
TF9OT19TVVJGQUNFLCBFR0xfTk9fU1VSRkFDRSwgbV9jb250ZXh0T2JqKTsKKworI2VuZGlmIC8v
ICNlbGlmIFVTRShBTkdMRSkKKwogICAgIHZhbGlkYXRlQXR0cmlidXRlcygpOwogCiAgICAgLy8g
Q3JlYXRlIHRoZSBXZWJHTExheWVyCkBAIC0zODIsNiArNDQ5LDkgQEAgR3JhcGhpY3NDb250ZXh0
M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEQXR0cmlidXRlcyBhdHRycywg
SG9zdFdpbmQKICAgICAgICAgbV93ZWJHTExheWVyID0gYWRvcHROUyhbW1dlYkdMTGF5ZXIgYWxs
b2NdIGluaXRXaXRoR3JhcGhpY3NDb250ZXh0M0Q6dGhpc10pOwogI2lmbmRlZiBOREVCVUcKICAg
ICAgICAgW21fd2ViR0xMYXllciBzZXROYW1lOkAiV2ViR0wgTGF5ZXIiXTsKKyNlbmRpZgorI2lm
IFVTRShBTkdMRSkKKyAgICAgICAgW21fd2ViR0xMYXllciBzZXRFR0xEaXNwbGF5Om1fZGlzcGxh
eU9iaiBhbmRDb25maWc6Y29uZmlnXTsKICNlbmRpZgogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQ
VElPTlMKIApAQCAtNDA0LDcgKzQ3NCwxMyBAQCBHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3ND
b250ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0RBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2luZAogICAg
IDo6Z2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfUkVDVEFOR0xFX0VYVCwgR0xfVEVYVFVSRV9X
UkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOwogICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJF
X1JFQ1RBTkdMRV9FWFQsIDApOwogI2VsaWYgVVNFKEFOR0xFKQotICAgIC8vIEZJWE1FOiBpbXBs
ZW1lbnQgYmFjayBidWZmZXIgc2V0dXAgdmlhIEFOR0xFLgorICAgIGdsOjpHZW5UZXh0dXJlcygx
LCAmbV90ZXh0dXJlKTsKKyAgICBnbDo6QmluZFRleHR1cmUoR0xfVEVYVFVSRV9SRUNUQU5HTEVf
QU5HTEUsIG1fdGV4dHVyZSk7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV9SRUNU
QU5HTEVfQU5HTEUsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICBnbDo6
VGV4UGFyYW1ldGVyaShHTF9URVhUVVJFX1JFQ1RBTkdMRV9BTkdMRSwgR0xfVEVYVFVSRV9NSU5f
RklMVEVSLCBHTF9MSU5FQVIpOworICAgIGdsOjpUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfUkVD
VEFOR0xFX0FOR0xFLCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAg
Z2w6OlRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV9SRUNUQU5HTEVfQU5HTEUsIEdMX1RFWFRVUkVf
V1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsKKyAgICBnbDo6QmluZFRleHR1cmUoR0xfVEVYVFVS
RV9SRUNUQU5HTEVfQU5HTEUsIDApOwogI2Vsc2UKICNlcnJvciBVbnN1cHBvcnRlZCBjb25maWd1
cmF0aW9uCiAjZW5kaWYKQEAgLTQyNyw5ICs1MDMsMjggQEAgR3JhcGhpY3NDb250ZXh0M0Q6Okdy
YXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEQXR0cmlidXRlcyBhdHRycywgSG9zdFdp
bmQKICAgICAgICAgaWYgKG1fYXR0cnMuc3RlbmNpbCB8fCBtX2F0dHJzLmRlcHRoKQogICAgICAg
ICAgICAgOjpnbEdlblJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5j
aWxCdWZmZXIpOwogICAgIH0KLSNlbmRpZiAvLyBVU0UoQU5HTEUpIHx8IFVTRShPUEVOR0xfRVMp
CisjZWxpZiBVU0UoQU5HTEUpCisgICAgZ2w6OkdlbkZyYW1lYnVmZmVycygxLCAmbV9mYm8pOwor
ICAgIGdsOjpCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIG1fZmJvKTsKKyAgICBtX3N0
YXRlLmJvdW5kRkJPID0gbV9mYm87CisKKyAgICBpZiAoIW1fYXR0cnMuYW50aWFsaWFzICYmICht
X2F0dHJzLnN0ZW5jaWwgfHwgbV9hdHRycy5kZXB0aCkpCisgICAgICAgIGdsOjpHZW5SZW5kZXJi
dWZmZXJzKDEsICZtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7CisKKyAgICAvLyBJZiBuZWNlc3Nhcnks
IGNyZWF0ZSBhbm90aGVyIGZyYW1lYnVmZmVyIGZvciB0aGUgbXVsdGlzYW1wbGUgcmVzdWx0cy4K
KyAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMpIHsKKyAgICAgICAgZ2w6OkdlbkZyYW1lYnVmZmVy
cygxLCAmbV9tdWx0aXNhbXBsZUZCTyk7CisgICAgICAgIGdsOjpCaW5kRnJhbWVidWZmZXIoR0xf
RlJBTUVCVUZGRVIsIG1fbXVsdGlzYW1wbGVGQk8pOworICAgICAgICBtX3N0YXRlLmJvdW5kRkJP
ID0gbV9tdWx0aXNhbXBsZUZCTzsKKyAgICAgICAgZ2w6OkdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1f
bXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7CisgICAgICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwgfHwg
bV9hdHRycy5kZXB0aCkKKyAgICAgICAgICAgIGdsOjpHZW5SZW5kZXJidWZmZXJzKDEsICZtX211
bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICB9CisKKyNlbmRpZiAvLyBVU0UoQU5H
TEUpCiAKLSAgICAvLyBBTkdMRSBpbml0aWFsaXphdGlvbi4KKyNpZiAhVVNFKEFOR0xFKQorICAg
IC8vIEFOR0xFIHNoYWRlciBjb21waWxlciBpbml0aWFsaXphdGlvbi4KIAogICAgIFNoQnVpbHRJ
blJlc291cmNlcyBBTkdMRVJlc291cmNlczsKICAgICBzaDo6SW5pdEJ1aWx0SW5SZXNvdXJjZXMo
JkFOR0xFUmVzb3VyY2VzKTsKQEAgLTQ1MCw2ICs1NDUsNyBAQCBHcmFwaGljc0NvbnRleHQzRDo6
R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0RBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0
V2luZAogICAgIEFOR0xFUmVzb3VyY2VzLkZyYWdtZW50UHJlY2lzaW9uSGlnaCA9IChyYW5nZVsw
XSB8fCByYW5nZVsxXSB8fCBwcmVjaXNpb24pOwogCiAgICAgbV9jb21waWxlci5zZXRSZXNvdXJj
ZXMoQU5HTEVSZXNvdXJjZXMpOworI2VuZGlmIC8vICFVU0UoQU5HTEUpCiAgICAgCiAjaWYgVVNF
KE9QRU5HTCkKICAgICA6OmdsRW5hYmxlKEdMX1ZFUlRFWF9QUk9HUkFNX1BPSU5UX1NJWkUpOwpA
QCAtNDU5LDYgKzU1NSw4IEBAIEdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChH
cmFwaGljc0NvbnRleHQzREF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaW5kCiAKICNpZiBVU0UoT1BF
TkdMKSB8fCBVU0UoT1BFTkdMX0VTKQogICAgIDo6Z2xDbGVhckNvbG9yKDAsIDAsIDAsIDApOwor
I2VsaWYgVVNFKEFOR0xFKQorICAgIGdsOjpDbGVhckNvbG9yKDAsIDAsIDAsIDApOwogI2VuZGlm
CiAKICAgICBMT0coV2ViR0wsICJDcmVhdGVkIGEgR3JhcGhpY3NDb250ZXh0M0QgKCVwKS4iLCB0
aGlzKTsKQEAgLTQ3Nyw3ICs1NzUsOCBAQCBHcmFwaGljc0NvbnRleHQzRDo6fkdyYXBoaWNzQ29u
dGV4dDNEKCkKICAgICAgICAgQ0dMU2V0Q3VycmVudENvbnRleHQobV9jb250ZXh0T2JqKTsKICAg
ICAgICAgOjpnbERlbGV0ZVRleHR1cmVzKDEsICZtX3RleHR1cmUpOwogI2VsaWYgVVNFKEFOR0xF
KQotICAgICAgICAvLyBGSVhNRTogbWFrZSBjb250ZXh0IGN1cnJlbnQgdmlhIEFOR0xFLgorICAg
ICAgICBFR0xfTWFrZUN1cnJlbnQobV9kaXNwbGF5T2JqLCBFR0xfTk9fU1VSRkFDRSwgRUdMX05P
X1NVUkZBQ0UsIG1fY29udGV4dE9iaik7CisgICAgICAgIGdsOjpEZWxldGVUZXh0dXJlcygxLCAm
bV90ZXh0dXJlKTsKICNlbmRpZgogCiAjaWYgVVNFKE9QRU5HTCkgfHwgVVNFKE9QRU5HTF9FUykK
QEAgLTQ5MSw2ICs1OTAsMTcgQEAgR3JhcGhpY3NDb250ZXh0M0Q6On5HcmFwaGljc0NvbnRleHQz
RCgpCiAgICAgICAgICAgICAgICAgOjpnbERlbGV0ZVJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm1fZGVw
dGhTdGVuY2lsQnVmZmVyKTsKICAgICAgICAgfQogICAgICAgICA6OmdsRGVsZXRlRnJhbWVidWZm
ZXJzRVhUKDEsICZtX2Zibyk7CisjZWxpZiBVU0UoQU5HTEUpCisgICAgICAgIGlmIChtX2F0dHJz
LmFudGlhbGlhcykgeworICAgICAgICAgICAgZ2w6OkRlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1f
bXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7CisgICAgICAgICAgICBpZiAobV9hdHRycy5zdGVuY2ls
IHx8IG1fYXR0cnMuZGVwdGgpCisgICAgICAgICAgICAgICAgZ2w6OkRlbGV0ZVJlbmRlcmJ1ZmZl
cnMoMSwgJm1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICAgICAgZ2w6
OkRlbGV0ZUZyYW1lYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZUZCTyk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBpZiAobV9hdHRycy5zdGVuY2lsIHx8IG1fYXR0cnMuZGVwdGgpCisg
ICAgICAgICAgICAgICAgZ2w6OkRlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fZGVwdGhTdGVuY2ls
QnVmZmVyKTsKKyAgICAgICAgfQorICAgICAgICBnbDo6RGVsZXRlRnJhbWVidWZmZXJzKDEsICZt
X2Zibyk7CiAjZW5kaWYKIAogI2lmIFVTRShPUEVOR0xfRVMpCkBAIC01MDAsNyArNjEwLDggQEAg
R3JhcGhpY3NDb250ZXh0M0Q6On5HcmFwaGljc0NvbnRleHQzRCgpCiAgICAgICAgIENHTFNldEN1
cnJlbnRDb250ZXh0KDApOwogICAgICAgICBDR0xEZXN0cm95Q29udGV4dChtX2NvbnRleHRPYmop
OwogI2VsaWYgVVNFKEFOR0xFKQotICAgICAgICAvLyBGSVhNRTogaW1wbGVtZW50IGNvbnRleHQg
dGVhcmRvd24gdmlhIEFOR0xFLgorICAgICAgICBFR0xfTWFrZUN1cnJlbnQobV9kaXNwbGF5T2Jq
LCBFR0xfTk9fU1VSRkFDRSwgRUdMX05PX1NVUkZBQ0UsIEVHTF9OT19DT05URVhUKTsKKyAgICAg
ICAgRUdMX0Rlc3Ryb3lDb250ZXh0KG1fZGlzcGxheU9iaiwgbV9jb250ZXh0T2JqKTsKICNlbmRp
ZgogICAgICAgICBbbV93ZWJHTExheWVyIHNldENvbnRleHQ6bnVsbHB0cl07CiAgICAgfQpAQCAt
NTM3LDcgKzY0OCw4IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6Om1ha2VDb250ZXh0Q3VycmVu
dCgpCiAgICAgaWYgKGN1cnJlbnRDb250ZXh0ICE9IG1fY29udGV4dE9iaikKICAgICAgICAgcmV0
dXJuIENHTFNldEN1cnJlbnRDb250ZXh0KG1fY29udGV4dE9iaikgPT0ga0NHTE5vRXJyb3I7CiAj
ZWxpZiBVU0UoQU5HTEUpCi0gICAgLy8gRklYTUU6IGltcGxlbWVudCBtYWtpbmcgY29udGV4dCBj
dXJyZW50IHZpYSBBTkdMRS4KKyAgICBpZiAoRUdMX0dldEN1cnJlbnRDb250ZXh0KCkgIT0gbV9j
b250ZXh0T2JqKQorICAgICAgICByZXR1cm4gRUdMX01ha2VDdXJyZW50KG1fZGlzcGxheU9iaiwg
RUdMX05PX1NVUkZBQ0UsIEVHTF9OT19TVVJGQUNFLCBtX2NvbnRleHRPYmopOwogI2VuZGlmCiAg
ICAgcmV0dXJuIHRydWU7CiB9CkBAIC01NTMsNyArNjY1LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6Y2hlY2tHUFVTdGF0dXMoKQogI2VsaWYgVVNFKE9QRU5HTF9FUykKICAgICAgICAgW0VB
R0xDb250ZXh0IHNldEN1cnJlbnRDb250ZXh0OjBdOwogI2VsaWYgVVNFKEFOR0xFKQotICAgICAg
ICAvLyBGSVhNRTogaW1wbGVtZW50IGZvcmNlZCBjb250ZXh0IGxvc3MgdmlhIEFOR0xFLgorICAg
ICAgICBFR0xfTWFrZUN1cnJlbnQobV9kaXNwbGF5T2JqLCBFR0xfTk9fU1VSRkFDRSwgRUdMX05P
X1NVUkZBQ0UsIEVHTF9OT19DT05URVhUKTsKICNlbmRpZgogICAgICAgICByZXR1cm47CiAgICAg
fQpAQCAtNjU3LDcgKzc2OSwyMSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzZXRDb250ZXh0
VmlzaWJpbGl0eShib29sIGlzVmlzaWJsZSkKICAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dDNE
TWFuYWdlcjo6c2hhcmVkTWFuYWdlcigpLnJlbW92ZUNvbnRleHRSZXF1aXJpbmdIaWdoUGVyZm9y
bWFuY2UodGhpcyk7CiAgICAgfQogfQotI2VuZGlmCisjZW5kaWYgLy8gVVNFKE9QRU5HTCkKKwor
I2lmIFVTRShBTkdMRSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmFsbG9jYXRlSU9TdXJmYWNl
QmFja2luZ1N0b3JlKEludFNpemUgc2l6ZSkKK3sKKyAgICBMT0coV2ViR0wsICJHcmFwaGljc0Nv
bnRleHQzRDo6YWxsb2NhdGVJT1N1cmZhY2VCYWNraW5nU3RvcmUgYXQgJWQgeCAlZC4gKCVwKSIs
IHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwgdGhpcyk7CisgICAgW21fd2ViR0xMYXllciBh
bGxvY2F0ZUlPU3VyZmFjZUJhY2tpbmdTdG9yZVdpdGhTaXplOnNpemUgdXNpbmdBbHBoYTptX2F0
dHJzLmFscGhhXTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dXBkYXRlRnJhbWVidWZm
ZXJUZXh0dXJlQmFja2luZ1N0b3JlRnJvbUxheWVyKCkKK3sKKyAgICBMT0coV2ViR0wsICJHcmFw
aGljc0NvbnRleHQzRDo6dXBkYXRlRnJhbWVidWZmZXJUZXh0dXJlQmFja2luZ1N0b3JlRnJvbUxh
eWVyKCkuICglcCkiLCB0aGlzKTsKKyAgICBbbV93ZWJHTExheWVyIGJpbmRGcmFtZWJ1ZmZlclRv
TmV4dEF2YWlsYWJsZVN1cmZhY2VdOworfQorI2VuZGlmIC8vIFVTRShBTkdMRSkKIAogYm9vbCBH
cmFwaGljc0NvbnRleHQzRDo6aXNHTEVTMkNvbXBsaWFudCgpIGNvbnN0CiB7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJHTExheWVyLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJHTExheWVyLmgKaW5kZXgg
MjM0ZThlMTdkZjcyOWZmNWNjNzgxZWY2NzU0NWNlZGVkZmY0MzIxMy4uMWQzYjZkNWFjOGE4MWE4
YzIxZjI3NGNhYTY0ODNhM2RlMTRiZTVkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvV2ViR0xMYXllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYkdMTGF5ZXIuaApAQCAtNTAsMTMgKzUwLDIxIEBAIEFM
TE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0JFR0lOCiB7CiAgICAgV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0QqIF9jb250ZXh0OwogICAgIGZsb2F0IF9kZXZpY2VQaXhlbFJhdGlvOwotI2lm
IFVTRShPUEVOR0wpCisjaWYgVVNFKE9QRU5HTCkgfHwgKFVTRShBTkdMRSkgJiYgUExBVEZPUk0o
TUFDKSkKICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6SU9TdXJmYWNlPiBfY29udGVudHNC
dWZmZXI7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OklPU3VyZmFjZT4gX2RyYXdpbmdC
dWZmZXI7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OklPU3VyZmFjZT4gX3NwYXJlQnVm
ZmVyOwogICAgIFdlYkNvcmU6OkludFNpemUgX2J1ZmZlclNpemU7CiAgICAgQk9PTCBfdXNpbmdB
bHBoYTsKICNlbmRpZgorI2lmIFVTRShBTkdMRSkgJiYgUExBVEZPUk0oTUFDKQorICAgIHZvaWQq
IF9lZ2xEaXNwbGF5OworICAgIHZvaWQqIF9lZ2xDb25maWc7CisgICAgdm9pZCogX2NvbnRlbnRz
UGJ1ZmZlcjsKKyAgICB2b2lkKiBfZHJhd2luZ1BidWZmZXI7CisgICAgdm9pZCogX3NwYXJlUGJ1
ZmZlcjsKKyAgICB2b2lkKiBfbGF0Y2hlZFBidWZmZXI7CisjZW5kaWYKIH0KIAogQHByb3BlcnR5
IChub25hdG9taWMpIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0OwpAQCAtNjUs
MTEgKzczLDE2IEBAIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0JFR0lOCiAKIC0gKENH
SW1hZ2VSZWYpY29weUltYWdlU25hcHNob3RXaXRoQ29sb3JTcGFjZTooQ0dDb2xvclNwYWNlUmVm
KWNvbG9yU3BhY2U7CiAKLSNpZiBVU0UoT1BFTkdMKQorI2lmIFVTRShPUEVOR0wpIHx8IChVU0Uo
QU5HTEUpICYmIFBMQVRGT1JNKE1BQykpCiAtICh2b2lkKWFsbG9jYXRlSU9TdXJmYWNlQmFja2lu
Z1N0b3JlV2l0aFNpemU6KFdlYkNvcmU6OkludFNpemUpc2l6ZSB1c2luZ0FscGhhOihCT09MKXVz
aW5nQWxwaGE7CiAtICh2b2lkKWJpbmRGcmFtZWJ1ZmZlclRvTmV4dEF2YWlsYWJsZVN1cmZhY2U7
CiAjZW5kaWYKIAorI2lmIChVU0UoQU5HTEUpICYmIFBMQVRGT1JNKE1BQykpCistICh2b2lkKXNl
dEVHTERpc3BsYXk6KHZvaWQqKWVnbERpc3BsYXkgYW5kQ29uZmlnOih2b2lkKillZ2xDb25maWc7
CistICh2b2lkKWRlYWxsb2M7CisjZW5kaWYKKwogQGVuZAogCiBBTExPV19ERVBSRUNBVEVEX0RF
Q0xBUkFUSU9OU19FTkQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NvY29hL1dlYkdMTGF5ZXIubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jb2NvYS9XZWJHTExheWVyLm1tCmluZGV4IGY0ZDJkMDBhMTc3ZDc2NTZjZDkyOThmYjkxMWE5
MzRjMDhiYWNmNDkuLjg1ZDgzNjJjMmU4N2E0NWNlZTRiNDM1MzM0NWE2YzhkZTljMDM5MzcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYkdMTGF5
ZXIubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvV2ViR0xM
YXllci5tbQpAQCAtNDMsNiArNDMsMTkgQEAKICNpbXBvcnQgPE9wZW5HTC9nbC5oPgogI2VuZGlm
CiAKKyNpZiBVU0UoQU5HTEUpCisjZGVmaW5lIEVHTF9FR0xfUFJPVE9UWVBFUyAwCisjaW5jbHVk
ZSA8QU5HTEUvZWdsLmg+CisjaW5jbHVkZSA8QU5HTEUvZWdsZXh0Lmg+CisjaW5jbHVkZSA8QU5H
TEUvZWdsZXh0X2FuZ2xlLmg+CisjaW5jbHVkZSA8QU5HTEUvZW50cnlfcG9pbnRzX2VnbC5oPgor
I2luY2x1ZGUgPEFOR0xFL2VudHJ5X3BvaW50c19nbGVzXzJfMF9hdXRvZ2VuLmg+CisvLyBTa2lw
IHRoZSBpbmNsdXNpb24gb2YgQU5HTEUncyBleHBsaWNpdCBjb250ZXh0IGVudHJ5IHBvaW50cyBm
b3Igbm93LgorI2RlZmluZSBHTF9BTkdMRV9leHBsaWNpdF9jb250ZXh0CisjaW5jbHVkZSA8QU5H
TEUvZ2wyZXh0Lmg+CisjaW5jbHVkZSA8QU5HTEUvZ2wyZXh0X2FuZ2xlLmg+CisjZW5kaWYKKwog
QGltcGxlbWVudGF0aW9uIFdlYkdMTGF5ZXIKIAogQHN5bnRoZXNpemUgY29udGV4dD1fY29udGV4
dDsKQEAgLTUyLDcgKzY1LDcgQEAKICAgICBfY29udGV4dCA9IGNvbnRleHQ7CiAgICAgc2VsZiA9
IFtzdXBlciBpbml0XTsKICAgICBfZGV2aWNlUGl4ZWxSYXRpbyA9IGNvbnRleHQtPmdldENvbnRl
eHRBdHRyaWJ1dGVzKCkuZGV2aWNlUGl4ZWxSYXRpbzsKLSNpZiBVU0UoT1BFTkdMKQorI2lmIFVT
RShPUEVOR0wpIHx8IFVTRShBTkdMRSkgJiYgUExBVEZPUk0oTUFDKQogICAgIHNlbGYuY29udGVu
dHNPcGFxdWUgPSAhY29udGV4dC0+Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKS5hbHBoYTsKICAgICBz
ZWxmLnRyYW5zZm9ybSA9IENBVHJhbnNmb3JtM0RJZGVudGl0eTsKICAgICBzZWxmLmNvbnRlbnRz
U2NhbGUgPSBfZGV2aWNlUGl4ZWxSYXRpbzsKQEAgLTYyLDcgKzc1LDcgQEAKICAgICByZXR1cm4g
c2VsZjsKIH0KIAotI2lmIFVTRShPUEVOR0wpCisjaWYgVVNFKE9QRU5HTCkgfHwgKFVTRShBTkdM
RSkgJiYgUExBVEZPUk0oTUFDKSkKIC8vIFdoZW4gdXNpbmcgYW4gSU9TdXJmYWNlIGFzIGxheWVy
IGNvbnRlbnRzLCB3ZSBuZWVkIHRvIGZsaXAgdGhlCiAvLyBsYXllciB0byB0YWtlIGludG8gYWNj
b3VudCB0aGF0IHRoZSBJT1N1cmZhY2UgcHJvdmlkZXMgY29udGVudAogLy8gaW4gWS11cC4gVGhp
cyBtZWFucyB0aGF0IGFueSBpbmNvbWluZyB0cmFuc2Zvcm0gKHVubGlrZWx5LCBzaW5jZQpAQCAt
NzgsMTIgKzkxLDE0IEBACiB7CiAgICAgW3N1cGVyIHNldEFuY2hvclBvaW50OkNHUG9pbnRNYWtl
KHAueCwgMS4wIC0gcC55KV07CiB9CisjZW5kaWYgLy8gVVNFKE9QRU5HTCkgfHwgKFVTRShBTkdM
RSkgJiYgUExBVEZPUk0oTUFDKSkKIAorI2lmIFVTRShPUEVOR0wpCiBzdGF0aWMgdm9pZCBmcmVl
RGF0YSh2b2lkICosIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCAvKiBzaXplICovKQogewogICAg
IGZhc3RGcmVlKGNvbnN0X2Nhc3Q8dm9pZCAqPihkYXRhKSk7CiB9Ci0jZW5kaWYKKyNlbmRpZiAv
LyBVU0UoT1BFTkdMKQogCiAtIChDR0ltYWdlUmVmKWNvcHlJbWFnZVNuYXBzaG90V2l0aENvbG9y
U3BhY2U6KENHQ29sb3JTcGFjZVJlZiljb2xvclNwYWNlCiB7CkBAIC0xMTgsNiArMTMzLDcgQEAg
c3RhdGljIHZvaWQgZnJlZURhdGEodm9pZCAqLCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgLyog
c2l6ZSAqLykKICAgICBDR0RhdGFQcm92aWRlclJlbGVhc2UocHJvdmlkZXIpOwogICAgIHJldHVy
biBpbWFnZTsKICNlbHNlCisgICAgLy8gRklYTUU6IGltcGxlbWVudC4KICAgICBVTlVTRURfUEFS
QU0oY29sb3JTcGFjZSk7CiAgICAgcmV0dXJuIG51bGxwdHI7CiAjZW5kaWYKQEAgLTEzOSw3ICsx
NTUsMjMgQEAgc3RhdGljIHZvaWQgZnJlZURhdGEodm9pZCAqLCBjb25zdCB2b2lkICpkYXRhLCBz
aXplX3QgLyogc2l6ZSAqLykKICNlbGlmIFVTRShPUEVOR0xfRVMpCiAgICAgX2NvbnRleHQtPnBy
ZXNlbnRSZW5kZXJidWZmZXIoKTsKICNlbGlmIFVTRShBTkdMRSkKLSAgICAvLyBGSVhNRTogZGlz
cGxheSByZW5kZXJpbmcgcmVzdWx0cyB2aWEgQU5HTEUuCisgICAgX2NvbnRleHQtPnByZXBhcmVU
ZXh0dXJlKCk7CisgICAgaWYgKF9kcmF3aW5nQnVmZmVyKSB7CisgICAgICAgIGlmIChfbGF0Y2hl
ZFBidWZmZXIpIHsKKyAgICAgICAgICAgIEdDM0RlbnVtIHRleHR1cmUgPSBfY29udGV4dC0+cGxh
dGZvcm1UZXh0dXJlKCk7CisgICAgICAgICAgICBnbDo6QmluZFRleHR1cmUoR0xfVEVYVFVSRV9S
RUNUQU5HTEVfQU5HTEUsIHRleHR1cmUpOworICAgICAgICAgICAgaWYgKCFFR0xfUmVsZWFzZVRl
eEltYWdlKF9lZ2xEaXNwbGF5LCBfbGF0Y2hlZFBidWZmZXIsIEVHTF9CQUNLX0JVRkZFUikpIHsK
KyAgICAgICAgICAgICAgICAvLyBGSVhNRTogcmVwb3J0IGVycm9yLgorICAgICAgICAgICAgICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBfbGF0Y2hlZFBi
dWZmZXIgPSBudWxscHRyOworICAgICAgICB9CisgICAgICAgIHN0ZDo6c3dhcChfY29udGVudHNC
dWZmZXIsIF9kcmF3aW5nQnVmZmVyKTsKKyAgICAgICAgc3RkOjpzd2FwKF9jb250ZW50c1BidWZm
ZXIsIF9kcmF3aW5nUGJ1ZmZlcik7CisgICAgICAgIHNlbGYuY29udGVudHMgPSBfY29udGVudHNC
dWZmZXItPmFzTGF5ZXJDb250ZW50cygpOworICAgICAgICBbc2VsZiByZWxvYWRWYWx1ZUZvcktl
eVBhdGg6QCJjb250ZW50cyJdOworICAgICAgICBbc2VsZiBiaW5kRnJhbWVidWZmZXJUb05leHRB
dmFpbGFibGVTdXJmYWNlXTsKKyAgICB9CiAjZW5kaWYKIAogICAgIF9jb250ZXh0LT5tYXJrTGF5
ZXJDb21wb3NpdGVkKCk7CkBAIC0xNDgsNyArMTgwLDIzIEBAIHN0YXRpYyB2b2lkIGZyZWVEYXRh
KHZvaWQgKiwgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IC8qIHNpemUgKi8pCiAgICAgICAgIGxh
eWVyLT5vd25lcigpLT5wbGF0Zm9ybUNBTGF5ZXJMYXllckRpZERpc3BsYXkobGF5ZXIpOwogfQog
Ci0jaWYgVVNFKE9QRU5HTCkKKyNpZiAoVVNFKEFOR0xFKSAmJiBQTEFURk9STShNQUMpKQorLSAo
dm9pZClzZXRFR0xEaXNwbGF5Oih2b2lkKilkaXNwbGF5IGFuZENvbmZpZzoodm9pZCopY29uZmln
Cit7CisgICAgX2VnbERpc3BsYXkgPSBkaXNwbGF5OworICAgIF9lZ2xDb25maWcgPSBjb25maWc7
Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIEVHTF9EZXN0cm95U3VyZmFjZShfZWdsRGlz
cGxheSwgX2NvbnRlbnRzUGJ1ZmZlcik7CisgICAgRUdMX0Rlc3Ryb3lTdXJmYWNlKF9lZ2xEaXNw
bGF5LCBfZHJhd2luZ1BidWZmZXIpOworICAgIEVHTF9EZXN0cm95U3VyZmFjZShfZWdsRGlzcGxh
eSwgX3NwYXJlUGJ1ZmZlcik7CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorI2VuZGlmCisKKyNp
ZiBVU0UoT1BFTkdMKSB8fCAoVVNFKEFOR0xFKSAmJiBQTEFURk9STShNQUMpKQogLSAodm9pZClh
bGxvY2F0ZUlPU3VyZmFjZUJhY2tpbmdTdG9yZVdpdGhTaXplOihXZWJDb3JlOjpJbnRTaXplKXNp
emUgdXNpbmdBbHBoYTooQk9PTCl1c2luZ0FscGhhCiB7CiAgICAgX2J1ZmZlclNpemUgPSBzaXpl
OwpAQCAtMTY0LDEwICsyMTIsMjggQEAgc3RhdGljIHZvaWQgZnJlZURhdGEodm9pZCAqLCBjb25z
dCB2b2lkICpkYXRhLCBzaXplX3QgLyogc2l6ZSAqLykKICAgICBfY29udGVudHNCdWZmZXItPm1p
Z3JhdGVDb2xvclNwYWNlVG9Qcm9wZXJ0aWVzKCk7CiAgICAgX2RyYXdpbmdCdWZmZXItPm1pZ3Jh
dGVDb2xvclNwYWNlVG9Qcm9wZXJ0aWVzKCk7CiAgICAgX3NwYXJlQnVmZmVyLT5taWdyYXRlQ29s
b3JTcGFjZVRvUHJvcGVydGllcygpOworCisjaWYgVVNFKEFOR0xFKSAmJiBQTEFURk9STShNQUMp
CisgICAgY29uc3QgRUdMaW50IHN1cmZhY2VBdHRyaWJ1dGVzW10gPSB7CisgICAgICAgIEVHTF9X
SURUSCwgc2l6ZS53aWR0aCgpLAorICAgICAgICBFR0xfSEVJR0hULCBzaXplLmhlaWdodCgpLAor
ICAgICAgICBFR0xfSU9TVVJGQUNFX1BMQU5FX0FOR0xFLCAwLAorICAgICAgICBFR0xfVEVYVFVS
RV9UQVJHRVQsIEVHTF9URVhUVVJFX1JFQ1RBTkdMRV9BTkdMRSwKKyAgICAgICAgRUdMX1RFWFRV
UkVfSU5URVJOQUxfRk9STUFUX0FOR0xFLCBHTF9CR1JBX0VYVCwKKyAgICAgICAgRUdMX1RFWFRV
UkVfRk9STUFULCBFR0xfVEVYVFVSRV9SR0JBLAorICAgICAgICBFR0xfVEVYVFVSRV9UWVBFX0FO
R0xFLCBHTF9VTlNJR05FRF9CWVRFLAorICAgICAgICBFR0xfTk9ORSwgRUdMX05PTkUKKyAgICB9
OworCisgICAgX2NvbnRlbnRzUGJ1ZmZlciA9IEVHTF9DcmVhdGVQYnVmZmVyRnJvbUNsaWVudEJ1
ZmZlcihfZWdsRGlzcGxheSwgRUdMX0lPU1VSRkFDRV9BTkdMRSwgX2NvbnRlbnRzQnVmZmVyLT5z
dXJmYWNlKCksIF9lZ2xDb25maWcsIHN1cmZhY2VBdHRyaWJ1dGVzKTsKKyAgICBfZHJhd2luZ1Bi
dWZmZXIgPSBFR0xfQ3JlYXRlUGJ1ZmZlckZyb21DbGllbnRCdWZmZXIoX2VnbERpc3BsYXksIEVH
TF9JT1NVUkZBQ0VfQU5HTEUsIF9kcmF3aW5nQnVmZmVyLT5zdXJmYWNlKCksIF9lZ2xDb25maWcs
IHN1cmZhY2VBdHRyaWJ1dGVzKTsKKyAgICBfc3BhcmVQYnVmZmVyID0gRUdMX0NyZWF0ZVBidWZm
ZXJGcm9tQ2xpZW50QnVmZmVyKF9lZ2xEaXNwbGF5LCBFR0xfSU9TVVJGQUNFX0FOR0xFLCBfc3Bh
cmVCdWZmZXItPnN1cmZhY2UoKSwgX2VnbENvbmZpZywgc3VyZmFjZUF0dHJpYnV0ZXMpOworI2Vu
ZGlmCiB9CiAKIC0gKHZvaWQpYmluZEZyYW1lYnVmZmVyVG9OZXh0QXZhaWxhYmxlU3VyZmFjZQog
eworI2lmIFVTRShPUEVOR0wpCiAgICAgR0MzRGVudW0gdGV4dHVyZSA9IF9jb250ZXh0LT5wbGF0
Zm9ybVRleHR1cmUoKTsKICAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfUkVDVEFOR0xFX0FS
QiwgdGV4dHVyZSk7CiAKQEAgLTE4MCw4ICsyNDYsMzIgQEAgc3RhdGljIHZvaWQgZnJlZURhdGEo
dm9pZCAqLCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgLyogc2l6ZSAqLykKICAgICAvLyBMaW5r
IHRoZSBJT1N1cmZhY2UgdG8gdGhlIHRleHR1cmUuCiAgICAgQ0dMRXJyb3IgZXJyb3IgPSBDR0xU
ZXhJbWFnZUlPU3VyZmFjZTJEKF9jb250ZXh0LT5wbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCks
IEdMX1RFWFRVUkVfUkVDVEFOR0xFX0FSQiwgaW50ZXJuYWxGb3JtYXQsIF9idWZmZXJTaXplLndp
ZHRoKCksIF9idWZmZXJTaXplLmhlaWdodCgpLCBHTF9CR1JBLCBHTF9VTlNJR05FRF9JTlRfOF84
XzhfOF9SRVYsIGlvU3VyZmFjZSwgMCk7CiAgICAgQVNTRVJUX1VOVVNFRChlcnJvciwgZXJyb3Ig
PT0ga0NHTE5vRXJyb3IpOwotfQorI2VsaWYgVVNFKEFOR0xFKQorICAgIEdDM0RlbnVtIHRleHR1
cmUgPSBfY29udGV4dC0+cGxhdGZvcm1UZXh0dXJlKCk7CisgICAgZ2w6OkJpbmRUZXh0dXJlKEdM
X1RFWFRVUkVfUkVDVEFOR0xFX0FOR0xFLCB0ZXh0dXJlKTsKKworICAgIGlmIChfbGF0Y2hlZFBi
dWZmZXIpIHsKKyAgICAgICAgaWYgKCFFR0xfUmVsZWFzZVRleEltYWdlKF9lZ2xEaXNwbGF5LCBf
bGF0Y2hlZFBidWZmZXIsIEVHTF9CQUNLX0JVRkZFUikpIHsKKyAgICAgICAgICAgIC8vIEZJWE1F
OiByZXBvcnQgZXJyb3IuCisgICAgICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworICAgICAgICB9
CisgICAgICAgIF9sYXRjaGVkUGJ1ZmZlciA9IG51bGxwdHI7CisgICAgfQorCisgICAgaWYgKF9k
cmF3aW5nQnVmZmVyICYmIF9kcmF3aW5nQnVmZmVyLT5pc0luVXNlKCkpIHsKKyAgICAgICAgc3Rk
Ojpzd2FwKF9kcmF3aW5nQnVmZmVyLCBfc3BhcmVCdWZmZXIpOworICAgICAgICBzdGQ6OnN3YXAo
X2RyYXdpbmdQYnVmZmVyLCBfc3BhcmVQYnVmZmVyKTsKKyAgICB9CisKKyAgICAvLyBMaW5rIHRo
ZSBJT1N1cmZhY2UgdG8gdGhlIHRleHR1cmUgdmlhIHRoZSBwcmV2aW91c2x5LWNyZWF0ZWQgcGJ1
ZmZlci4KKyAgICBpZiAoIUVHTF9CaW5kVGV4SW1hZ2UoX2VnbERpc3BsYXksIF9kcmF3aW5nUGJ1
ZmZlciwgRUdMX0JBQ0tfQlVGRkVSKSkgeworICAgICAgICAvLyBGSVhNRTogcmVwb3J0IGVycm9y
LgorICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIH0KKyAgICBfbGF0Y2hlZFBidWZmZXIg
PSBfZHJhd2luZ1BidWZmZXI7CiAjZW5kaWYKK30KKyNlbmRpZiAvLyBVU0UoT1BFTkdMKSB8fCAo
VVNFKEFOR0xFKSAmJiBQTEFURk9STShNQUMpKQogCiBAZW5kCiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>