<?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>174453</bug_id>
          
          <creation_ts>2017-07-12 19:35:11 -0700</creation_ts>
          <short_desc>Rename GraphicsContext[3D]Mac to Cocoa and move things into graphics/cocoa</short_desc>
          <delta_ts>2017-07-13 16:18:11 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dean Jackson">dino</reporter>
          <assigned_to name="Dean Jackson">dino</assigned_to>
          <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1328349</commentid>
    <comment_count>0</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2017-07-12 19:35:11 -0700</bug_when>
    <thetext>Rename GraphicsContext[3D]Mac to Cocoa and move things into graphics/cocoa</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1328350</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-07-12 19:35:59 -0700</bug_when>
    <thetext>&lt;rdar://problem/33281481&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1328358</commentid>
    <comment_count>2</comment_count>
      <attachid>315329</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2017-07-12 19:47:15 -0700</bug_when>
    <thetext>Created attachment 315329
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1328599</commentid>
    <comment_count>3</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2017-07-13 16:18:11 -0700</bug_when>
    <thetext>Committed r219474: &lt;http://trac.webkit.org/changeset/219474&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>315329</attachid>
            <date>2017-07-12 19:47:15 -0700</date>
            <delta_ts>2017-07-13 14:15:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-174453-20170713124713.patch</filename>
            <type>text/plain</type>
            <size>103583</size>
            <attacher name="Dean Jackson">dino</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE5NDIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWU5YzJlZWZkZTE4MTJk
MDQwZTQzNzdiMGRhZDc0YWQ3ZjM0MGZlYS4uN2Y2YTQ2ZWFhNDE3YzhhNTA2MDcwYjExYjE3ZmMx
YjdmNjgzY2I2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDI2IEBACiAyMDE3LTA3LTEyICBEZWFu
IEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KIAorICAgICAgICBSZW5hbWUgR3JhcGhpY3NDb250
ZXh0WzNEXU1hYyB0byBDb2NvYSBhbmQgbW92ZSB0aGluZ3MgaW50byBncmFwaGljcy9jb2NvYQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc0NDUzCisg
ICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMzI4MTQ4MT4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUd28gcmVuYW1lcywgdHdvIG1vdmVzOgorICAgICAg
ICBncmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0M0RNYWMubW0gLT4gZ3JhcGhpY3MvY29jb2Ev
R3JhcGhpY3NDb250ZXh0M0RDb2NvYS5tbQorICAgICAgICBncmFwaGljcy9tYWMvR3JhcGhpY3ND
b250ZXh0Lm1tIC0+IGdyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dENvY29hLm1tCisgICAg
ICAgIGdyYXBoaWNzL21hYy9XZWJHTExheWVyLmggLT4gZ3JhcGhpY3MvY29jb2EvV2ViR0xMYXll
ci5oCisgICAgICAgIGdyYXBoaWNzL21hYy9XZWJHTExheWVyLm1tIC0+IGdyYXBoaWNzL2NvY29h
L1dlYkdMTGF5ZXIubW0KKworICAgICAgICAqIFBsYXRmb3JtTWFjLmNtYWtlOgorICAgICAgICAq
IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jb2NvYS9HcmFwaGljc0NvbnRleHQzRENvY29hLm1tOiBSZW5hbWVkIGZyb20gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLm1t
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dENvY29h
Lm1tOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dy
YXBoaWNzQ29udGV4dE1hYy5tbS4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9X
ZWJHTExheWVyLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9tYWMvV2ViR0xMYXllci5oLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dl
YkdMTGF5ZXIubW06IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9tYWMvV2ViR0xMYXllci5tbS4KKworMjAxNy0wNy0xMiAgRGVhbiBKYWNrc29uICA8ZGlub0Bh
cHBsZS5jb20+CisKICAgICAgICAgQ2xlYW4tdXAgc29tZSB0aGluZ3MgaW4gR3JhcGhpY3NDb250
ZXh0M0QKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3
NDQ1MgogICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzMyODEyNTc+CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFj
LmNtYWtlCmluZGV4IDRkMjIwN2M3YzZmYmJjYWQ1MGVlYTBiNzFlYTQ1ZjViOGE4YjU0Y2EuLjQy
NDBhMWQyZjAyYjk5MTUyMjE1Yzg3NTAxM2FlYmExZWU3ZmIzZDEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3Jt
TWFjLmNtYWtlCkBAIC00NTgsNiArNDU4LDggQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VT
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR1BVUmVuZGVyUGlwZWxpbmVTdGF0ZU1ldGFs
Lm1tCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR1BVVGV4dHVyZURlc2NyaXB0b3JNZXRh
bC5tbQogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dQVVRleHR1cmVNZXRhbC5tbQorICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dDNEQ29jb2EubW0KKyAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFwaGljc0NvbnRleHRDb2NvYS5tbQogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0LmNwcAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NvY29hL0ZvbnRDYXNjYWRlQ29jb2EubW0KICAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
b2NvYS9Gb250Q29jb2EubW0KQEAgLTQ2OSw3ICs0NzEsOSBAQCBsaXN0KEFQUEVORCBXZWJDb3Jl
X1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJBY3Rpb25EaXNhYmxpbmdD
QUxheWVyRGVsZWdhdGUubW0KICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJDb3JlQ0FM
YXllckV4dHJhcy5tbQogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYkNvcmVEZWNvbXBy
ZXNzaW9uU2Vzc2lvbi5tbQorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYkdMTGF5ZXIu
bW0KICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJHUFVMYXllci5tbQorICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2NvY29hL1dlYkxheWVyLm1tCiAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
di9QaXhlbEJ1ZmZlckNvbmZvcm1lckNWLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2N2L1Rl
eHR1cmVDYWNoZUNWLm1tCkBAIC00ODcsOCArNDkxLDYgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9T
T1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDYWNoZU1hYy5tbQogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL21hYy9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL21hYy9HbHlwaFBhZ2VNYWMuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLm1tCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dy
YXBoaWNzQ29udGV4dE1hYy5tbQogICAgIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9JY29uTWFjLm1t
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ltYWdlTWFjLm1tCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvbWFjL0ludFBvaW50TWFjLm1tCkBAIC00OTgsOCArNTAwLDYgQEAgbGlzdChBUFBFTkQg
V2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL01lZGlhVGltZVFUS2l0
Lm1tCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1BERkRvY3VtZW50SW1hZ2VNYWMubW0KICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxlRm9udERhdGFDb3JlVGV4dC5jcHAKLSAgICBw
bGF0Zm9ybS9ncmFwaGljcy9tYWMvV2ViR0xMYXllci5tbQotICAgIHBsYXRmb3JtL2dyYXBoaWNz
L21hYy9XZWJMYXllci5tbQogCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lv
bnMzRE9wZW5HTC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNE
T3BlbkdMQ29tbW9uLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCmluZGV4IDkzZWM4NjE5NGY0Zjg0ZTU0ZDc2YzBmNDlkMmU3NmU4NzYy
M2NhMmYuLjAzZDUxZmUxYzBlOTNkYzA2OWZkOTZkOTM2NWJjNGE2NzAyZDA4ODIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTIw
ODgsNyArMjA4OCw3IEBACiAJCTQ5RUVEMTRFMTA1MTk3MUEwMDA5OUZBQiAvKiBKU0NhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0OUVFRDE0QjEwNTE5NzE5MDAwOTlGQUIgLyogSlNDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwICovOyB9OwogCQk0OUVFRDE0RjEwNTE5NzFBMDAwOTlG
QUIgLyogSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlFRUQxNEMxMDUxOTcxQTAwMDk5RkFCIC8q
IEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcCAqLzsgfTsKIAkJNDlGQzdBNTAxNDQ0
QUY1RjAwQTVEODY0IC8qIERpc3BsYXlSZWZyZXNoTW9uaXRvci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUZDN0E0RjE0NDRBRjVGMDBBNUQ4NjQg
LyogRGlzcGxheVJlZnJlc2hNb25pdG9yLmNwcCAqLzsgfTsKLQkJNDlGRkJGMUQxMUM4NTUwRTAw
NkE3MTE4IC8qIEdyYXBoaWNzQ29udGV4dDNETWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlGRkJGMUMxMUM4NTUwRTAwNkE3MTE4IC8qIEdyYXBo
aWNzQ29udGV4dDNETWFjLm1tICovOyB9OworCQk0OUZGQkYxRDExQzg1NTBFMDA2QTcxMTggLyog
R3JhcGhpY3NDb250ZXh0M0RDb2NvYS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDQ5RkZCRjFDMTFDODU1MEUwMDZBNzExOCAvKiBHcmFwaGljc0NvbnRl
eHQzRENvY29hLm1tICovOyB9OwogCQk0OUZGQkYzRjExQzkzRUUzMDA2QTcxMTggLyogV2ViR0xM
YXllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlG
RkJGM0QxMUM5M0VFMzAwNkE3MTE4IC8qIFdlYkdMTGF5ZXIuaCAqLzsgfTsKIAkJNDlGRkJGNDAx
MUM5M0VFMzAwNkE3MTE4IC8qIFdlYkdMTGF5ZXIubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUZGQkYzRTExQzkzRUUzMDA2QTcxMTggLyogV2ViR0xM
YXllci5tbSAqLzsgfTsKIAkJNEEwREEyRkUxMjlCMjQxOTAwQUI2MUUxIC8qIEZvcm1Bc3NvY2lh
dGVkRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA0QTBEQTJGQzEyOUIyNDE5MDBBQjYxRTEgLyogRm9ybUFzc29jaWF0ZWRFbGVtZW50LmNw
cCAqLzsgfTsKQEAgLTUxOTMsNyArNTE5Myw3IEBACiAJCUIyNzUzNTdGMEIwNTM4MTQwMDJDRTY0
RiAvKiBQYXRoLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEIyNzUzNTUyMEIwNTM4MTQwMDJDRTY0RiAvKiBQYXRoLmNwcCAqLzsgfTsKIAkJQjI3NTM1
ODAwQjA1MzgxNDAwMkNFNjRGIC8qIFBhdGguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEIyNzUzNTUzMEIwNTM4MTQwMDJDRTY0RiAvKiBQYXRoLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQjI3NTM1OEUw
QjA1M0E2NjAwMkNFNjRGIC8qIEljb25NYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBCMjc1MzU4RDBCMDUzQTY2MDAyQ0U2NEYgLyogSWNvbk1hYy5t
bSAqLzsgfTsKLQkJQjI3N0I0MDQwQjIyRjM3QzAwMDRCRUM2IC8qIEdyYXBoaWNzQ29udGV4dE1h
Yy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNzdC
NDAzMEIyMkYzN0MwMDA0QkVDNiAvKiBHcmFwaGljc0NvbnRleHRNYWMubW0gKi87IH07CisJCUIy
NzdCNDA0MEIyMkYzN0MwMDA0QkVDNiAvKiBHcmFwaGljc0NvbnRleHRDb2NvYS5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNzdCNDAzMEIyMkYzN0Mw
MDA0QkVDNiAvKiBHcmFwaGljc0NvbnRleHRDb2NvYS5tbSAqLzsgfTsKIAkJQjI3QjI4MjUwQ0VG
MEMwNzAwRDM5RDU0IC8qIEpTU1ZHRm9udEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI3QjI4MUYwQ0VGMEMwNzAwRDM5RDU0IC8qIEpT
U1ZHRm9udEVsZW1lbnQuY3BwICovOyB9OwogCQlCMjdCMjgyNjBDRUYwQzA3MDBEMzlENTQgLyog
SlNTVkdGb250RWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQjI3QjI4MjAwQ0VGMEMwNzAwRDM5RDU0IC8qIEpTU1ZHRm9udEVsZW1lbnQuaCAq
LzsgfTsKIAkJQjI3QjI4MjcwQ0VGMEMwNzAwRDM5RDU0IC8qIEpTU1ZHR2x5cGhFbGVtZW50LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyN0IyODIx
MENFRjBDMDcwMEQzOUQ1NCAvKiBKU1NWR0dseXBoRWxlbWVudC5jcHAgKi87IH07CkBAIC05ODEw
LDcgKzk4MTAsNyBAQAogCQk0OUVFRDE0QjEwNTE5NzE5MDAwOTlGQUIgLyogSlNDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk0OUVFRDE0QzEwNTE5NzFBMDAwOTlGQUIgLyogSlNXZWJHTFJlbmRl
cmluZ0NvbnRleHRDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk0OUZDN0E0RjE0NDRBRjVGMDBBNUQ4NjQgLyogRGlzcGxheVJlZnJlc2hNb25p
dG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERpc3BsYXlSZWZy
ZXNoTW9uaXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5RkZCRjFDMTFD
ODU1MEUwMDZBNzExOCAvKiBHcmFwaGljc0NvbnRleHQzRE1hYy5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dDNETWFjLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk0OUZGQkYxQzExQzg1NTBFMDA2QTcxMTggLyogR3JhcGhp
Y3NDb250ZXh0M0RDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IEdyYXBoaWNzQ29udGV4dDNEQ29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTQ5RkZCRjNEMTFDOTNFRTMwMDZBNzExOCAvKiBXZWJHTExheWVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkdMTGF5ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNDlGRkJGM0UxMUM5M0VFMzAwNkE3MTE4IC8qIFdlYkdMTGF5ZXIubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJHTExheWVyLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk0QTBEQTJGQzEyOUIyNDE5MDBBQjYxRTEgLyogRm9ybUFz
c29jaWF0ZWRFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEZvcm1Bc3NvY2lhdGVkRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC0xMzY0Myw3ICsxMzY0Myw3IEBACiAJCUIyNzUzNTUyMEIwNTM4MTQwMDJDRTY0RiAvKiBQYXRo
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQYXRoLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjI3NTM1NTMwQjA1MzgxNDAwMkNFNjRGIC8qIFBh
dGguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhdGguaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjI3NTM1OEQwQjA1M0E2NjAwMkNFNjRGIC8qIEljb25NYWMu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gSWNvbk1hYy5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQjI3N0I0MDMwQjIyRjM3QzAwMDRCRUM2IC8q
IEdyYXBoaWNzQ29udGV4dE1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7
IHBhdGggPSBHcmFwaGljc0NvbnRleHRNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUIyNzdCNDAzMEIyMkYzN0MwMDA0QkVDNiAvKiBHcmFwaGljc0NvbnRleHRDb2NvYS5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBHcmFwaGljc0NvbnRleHRD
b2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjI3QjI4MUYwQ0VGMEMwNzAw
RDM5RDU0IC8qIEpTU1ZHRm9udEVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEpTU1ZHRm9udEVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlCMjdCMjgyMDBDRUYwQzA3MDBEMzlENTQgLyogSlNTVkdGb250RWxlbWVudC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNTVkdGb250RWxlbWVudC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMjdCMjgyMTBDRUYwQzA3MDBEMzlENTQgLyogSlNT
VkdHbHlwaEVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEpTU1ZHR2x5cGhFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIz
MDcwLDggKzIzMDcwLDYgQEAKIAkJCQlCMkFGRkM3NTBEMDBBNUMxMDAzMDA3NEQgLyogRm9udEN1
c3RvbVBsYXRmb3JtRGF0YS5jcHAgKi8sCiAJCQkJQjJBRkZDNzYwRDAwQTVDMTAwMzAwNzREIC8q
IEZvbnRDdXN0b21QbGF0Zm9ybURhdGEuaCAqLywKIAkJCQlCMkFGRkM3QjBEMDBBNUMxMDAzMDA3
NEQgLyogR2x5cGhQYWdlTWFjLmNwcCAqLywKLQkJCQk0OUZGQkYxQzExQzg1NTBFMDA2QTcxMTgg
LyogR3JhcGhpY3NDb250ZXh0M0RNYWMubW0gKi8sCi0JCQkJQjI3N0I0MDMwQjIyRjM3QzAwMDRC
RUM2IC8qIEdyYXBoaWNzQ29udGV4dE1hYy5tbSAqLywKIAkJCQlCMjc1MzU4RDBCMDUzQTY2MDAy
Q0U2NEYgLyogSWNvbk1hYy5tbSAqLywKIAkJCQlCMjc1MzU0RTBCMDUzODE0MDAyQ0U2NEYgLyog
SW1hZ2VNYWMubW0gKi8sCiAJCQkJQjI3NTM1NEYwQjA1MzgxNDAwMkNFNjRGIC8qIEludFBvaW50
TWFjLm1tICovLApAQCAtMjMwODMsOCArMjMwODEsNiBAQAogCQkJCUNENjBDMEM0MTkzRTg3Qzcw
MDNDNjU2QiAvKiBNZWRpYVRpbWVRVEtpdC5tbSAqLywKIAkJCQkyRDZFNDY4MjE3RDY2MEY1MDBF
Q0Y4QkIgLyogUERGRG9jdW1lbnRJbWFnZU1hYy5tbSAqLywKIAkJCQkxNjNFODhGNTExOEEzOUQy
MDBFRDkyMzEgLyogU2ltcGxlRm9udERhdGFDb3JlVGV4dC5jcHAgKi8sCi0JCQkJNDlGRkJGM0Qx
MUM5M0VFMzAwNkE3MTE4IC8qIFdlYkdMTGF5ZXIuaCAqLywKLQkJCQk0OUZGQkYzRTExQzkzRUUz
MDA2QTcxMTggLyogV2ViR0xMYXllci5tbSAqLywKIAkJCQkwRkNGMzMyQjBGMkI5QTI1MDA0QjY3
OTUgLyogV2ViTGF5ZXIuaCAqLywKIAkJCQkwRkNGMzMyQTBGMkI5QTI1MDA0QjY3OTUgLyogV2Vi
TGF5ZXIubW0gKi8sCiAJCQkpOwpAQCAtMjM0NjAsNiArMjM0NTYsOCBAQAogCQkJCTMxNkJEQzA1
MUU3NjJGN0UwMERFMEQ1QSAvKiBHUFVSZW5kZXJQaXBlbGluZVN0YXRlTWV0YWwubW0gKi8sCiAJ
CQkJMzE2QkRCQjMxRTczNTdCMDAwREUwRDVBIC8qIEdQVVRleHR1cmVEZXNjcmlwdG9yTWV0YWwu
bW0gKi8sCiAJCQkJMzE2QkRCQUQxRTczNTQ5QzAwREUwRDVBIC8qIEdQVVRleHR1cmVNZXRhbC5t
bSAqLywKKwkJCQlCMjc3QjQwMzBCMjJGMzdDMDAwNEJFQzYgLyogR3JhcGhpY3NDb250ZXh0Q29j
b2EubW0gKi8sCisJCQkJNDlGRkJGMUMxMUM4NTUwRTAwNkE3MTE4IC8qIEdyYXBoaWNzQ29udGV4
dDNEQ29jb2EubW0gKi8sCiAJCQkJMkQwQjRBQTkxOERBMUNDRDAwNDM0REUxIC8qIElPU3VyZmFj
ZS5oICovLAogCQkJCTJEMEI0QUFBMThEQTFDQ0QwMDQzNERFMSAvKiBJT1N1cmZhY2UubW0gKi8s
CiAJCQkJQUQ5RkY2RTAxOTA4MzkxRDAwM0I2MUUwIC8qIElPU3VyZmFjZVBvb2xDb2NvYS5tbSAq
LywKQEAgLTIzNDczLDYgKzIzNDcxLDggQEAKIAkJCQlDRDVEMjc3NTFFODMxOEUwMDBEODBBM0Qg
LyogV2ViQ29yZURlY29tcHJlc3Npb25TZXNzaW9uLm1tICovLAogCQkJCTMxNkJEQjhBMUU2RTE1
MzAwMERFMEQ1QSAvKiBXZWJHUFVMYXllci5oICovLAogCQkJCTMxNkJEQjg5MUU2RTE1MzAwMERF
MEQ1QSAvKiBXZWJHUFVMYXllci5tbSAqLywKKwkJCQk0OUZGQkYzRDExQzkzRUUzMDA2QTcxMTgg
LyogV2ViR0xMYXllci5oICovLAorCQkJCTQ5RkZCRjNFMTFDOTNFRTMwMDZBNzExOCAvKiBXZWJH
TExheWVyLm1tICovLAogCQkJKTsKIAkJCXBhdGggPSBjb2NvYTsKIAkJCXNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7CkBAIC0zMTQyNSwxMSArMzE0MjUsMTEgQEAKIAkJCQlCMkEwMTVBODBBRjZDRDUz
MDA2QkNFMEUgLyogR3JhcGhpY3NDb250ZXh0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTZFMjFD
NkMwMTEyNjMzODUwMEE3QkUwMiAvKiBHcmFwaGljc0NvbnRleHQzRC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk2RTIxQzZDMjExMjYzMzk5MDBBN0JFMDIgLyogR3JhcGhpY3NDb250ZXh0M0RDRy5j
cHAgaW4gU291cmNlcyAqLywKLQkJCQk0OUZGQkYxRDExQzg1NTBFMDA2QTcxMTggLyogR3JhcGhp
Y3NDb250ZXh0M0RNYWMubW0gaW4gU291cmNlcyAqLywKKwkJCQk0OUZGQkYxRDExQzg1NTBFMDA2
QTcxMTggLyogR3JhcGhpY3NDb250ZXh0M0RDb2NvYS5tbSBpbiBTb3VyY2VzICovLAogCQkJCUZC
QzIyMERGMTIzN0ZCRUIwMEJDRjc4OCAvKiBHcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk5NkFCQTQyMzE0QkNCODBFMDBENTYyMDQgLyogR3JhcGhpY3NDb250
ZXh0M0RPcGVuR0xDb21tb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJFRDk3NzEwQjFGNTVD
RTAwMjU3RDBGIC8qIEdyYXBoaWNzQ29udGV4dENHLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUIy
NzdCNDA0MEIyMkYzN0MwMDA0QkVDNiAvKiBHcmFwaGljc0NvbnRleHRNYWMubW0gaW4gU291cmNl
cyAqLywKKwkJCQlCMjc3QjQwNDBCMjJGMzdDMDAwNEJFQzYgLyogR3JhcGhpY3NDb250ZXh0Q29j
b2EubW0gaW4gU291cmNlcyAqLywKIAkJCQkwRjU4MEIwQzBGMTJBMjY5MDA1MUQ2ODkgLyogR3Jh
cGhpY3NMYXllci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0OTlCM0VENjEyOENEMzE0MDBFNzI2
QzIgLyogR3JhcGhpY3NMYXllckNBLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQTI0RDc5MTYy
REY5MTkwMEEzRjRDMCAvKiBHcmFwaGljc0xheWVyVXBkYXRlci5jcHAgaW4gU291cmNlcyAqLywK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dyYXBo
aWNzQ29udGV4dDNEQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
b2NvYS9HcmFwaGljc0NvbnRleHQzRENvY29hLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE1YTZjZDRhYjFlMTBh
ZGU1MDgwNjRkMzgyZWZhNmE1MjNhM2JkYmUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFwaGljc0NvbnRleHQzRENvY29hLm1tCkBA
IC0wLDAgKzEsNzEzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKEdSQVBISUNTX0NP
TlRFWFRfM0QpCisjaW1wb3J0ICJHcmFwaGljc0NvbnRleHQzRC5oIgorCisjaWYgUExBVEZPUk0o
SU9TKQorI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0M0RJT1MuaCIKKyNlbmRpZgorCisjaW1wb3J0
ICJDYW52YXNSZW5kZXJpbmdDb250ZXh0LmgiCisjaW1wb3J0ICJFeHRlbnNpb25zM0RPcGVuR0wu
aCIKKyNpbXBvcnQgIkdyYXBoaWNzQ29udGV4dC5oIgorI2ltcG9ydCAiSFRNTENhbnZhc0VsZW1l
bnQuaCIKKyNpbXBvcnQgIkltYWdlQnVmZmVyLmgiCisjaW1wb3J0ICJMb2dnaW5nLmgiCisjaW1w
b3J0ICJXZWJHTExheWVyLmgiCisjaW1wb3J0ICJXZWJHTE9iamVjdC5oIgorI2ltcG9ydCAiV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oIgorI2ltcG9ydCA8Q29yZUdyYXBoaWNzL0NHQml0bWFw
Q29udGV4dC5oPgorI2ltcG9ydCA8c3lzL3N5c2N0bC5oPgorI2ltcG9ydCA8c3lzZXhpdHMuaD4K
KyNpbXBvcnQgPHd0Zi9CbG9ja09iakNFeGNlcHRpb25zLmg+CisjaW1wb3J0IDx3dGYvdGV4dC9D
U3RyaW5nLmg+CisKKyNpZiBQTEFURk9STShJT1MpCisjaW1wb3J0ICJPcGVuR0xFU1NQSS5oIgor
I2ltcG9ydCA8T3BlbkdMRVMvRUFHTC5oPgorI2ltcG9ydCA8T3BlbkdMRVMvRUFHTERyYXdhYmxl
Lmg+CisjaW1wb3J0IDxPcGVuR0xFUy9FUzIvZ2xleHQuaD4KKyNpbXBvcnQgPFF1YXJ0ekNvcmUv
UXVhcnR6Q29yZS5oPgorI2Vsc2UKKyNpbXBvcnQgPElPS2l0L0lPS2l0TGliLmg+CisjaW1wb3J0
IDxPcGVuR0wvQ0dMUmVuZGVyZXJzLmg+CisjaW1wb3J0IDxPcGVuR0wvZ2wuaD4KKyNlbmRpZgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzdGF0dXNDaGVj
a1RocmVzaG9sZCA9IDU7CisKKyNpZiBQTEFURk9STShNQUMpCisKK2VudW0geworICAgIGtBR0NP
cGVuLAorICAgIGtBR0NDbG9zZQorfTsKKworc3RhdGljIGlvX2Nvbm5lY3RfdCBhdHRhY2hUb0Fw
cGxlR3JhcGhpY3NDb250cm9sKCkKK3sKKyAgICBtYWNoX3BvcnRfdCBtYXN0ZXJQb3J0OworCisg
ICAgaWYgKElPTWFzdGVyUG9ydChNQUNIX1BPUlRfTlVMTCwgJm1hc3RlclBvcnQpICE9IEtFUk5f
U1VDQ0VTUykKKyAgICAgICAgcmV0dXJuIE1BQ0hfUE9SVF9OVUxMOworCisgICAgQ0ZEaWN0aW9u
YXJ5UmVmIGNsYXNzVG9NYXRjaCA9IElPU2VydmljZU1hdGNoaW5nKCJBcHBsZUdyYXBoaWNzQ29u
dHJvbCIpOworICAgIGlmICghY2xhc3NUb01hdGNoKQorICAgICAgICByZXR1cm4gTUFDSF9QT1JU
X05VTEw7CisKKyAgICBrZXJuX3JldHVybl90IGtlcm5SZXN1bHQ7CisgICAgaW9faXRlcmF0b3Jf
dCBpdGVyYXRvcjsKKyAgICBpZiAoKGtlcm5SZXN1bHQgPSBJT1NlcnZpY2VHZXRNYXRjaGluZ1Nl
cnZpY2VzKG1hc3RlclBvcnQsIGNsYXNzVG9NYXRjaCwgJml0ZXJhdG9yKSkgIT0gS0VSTl9TVUND
RVNTKQorICAgICAgICByZXR1cm4gTUFDSF9QT1JUX05VTEw7CisKKyAgICBpb19zZXJ2aWNlX3Qg
c2VydmljZU9iamVjdCA9IElPSXRlcmF0b3JOZXh0KGl0ZXJhdG9yKTsKKyAgICBJT09iamVjdFJl
bGVhc2UoaXRlcmF0b3IpOworICAgIGlmICghc2VydmljZU9iamVjdCkKKyAgICAgICAgcmV0dXJu
IE1BQ0hfUE9SVF9OVUxMOworCisgICAgaW9fY29ubmVjdF90IGRhdGFQb3J0OworICAgIElPT2Jq
ZWN0UmV0YWluKHNlcnZpY2VPYmplY3QpOworICAgIGtlcm5SZXN1bHQgPSBJT1NlcnZpY2VPcGVu
KHNlcnZpY2VPYmplY3QsIG1hY2hfdGFza19zZWxmKCksIDAsICZkYXRhUG9ydCk7CisgICAgSU9P
YmplY3RSZWxlYXNlKHNlcnZpY2VPYmplY3QpOworCisgICAgcmV0dXJuIChrZXJuUmVzdWx0ID09
IEtFUk5fU1VDQ0VTUykgPyBkYXRhUG9ydCA6IE1BQ0hfUE9SVF9OVUxMOworfQorCitzdGF0aWMg
Ym9vbCBoYXNNdXhDYXBhYmlsaXR5KCkKK3sKKyAgICBpb19jb25uZWN0X3QgZGF0YVBvcnQgPSBh
dHRhY2hUb0FwcGxlR3JhcGhpY3NDb250cm9sKCk7CisKKyAgICBpZiAoZGF0YVBvcnQgPT0gTUFD
SF9QT1JUX05VTEwpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGJvb2wgcmVzdWx0Owor
ICAgIGlmIChJT0Nvbm5lY3RDYWxsU2NhbGFyTWV0aG9kKGRhdGFQb3J0LCBrQUdDT3BlbiwgbnVs
bHB0ciwgMCwgbnVsbHB0ciwgbnVsbHB0cikgPT0gS0VSTl9TVUNDRVNTKSB7CisgICAgICAgIElP
Q29ubmVjdENhbGxTY2FsYXJNZXRob2QoZGF0YVBvcnQsIGtBR0NDbG9zZSwgbnVsbHB0ciwgMCwg
bnVsbHB0ciwgbnVsbHB0cik7CisgICAgICAgIHJlc3VsdCA9IHRydWU7CisgICAgfSBlbHNlCisg
ICAgICAgIHJlc3VsdCA9IGZhbHNlOworCisgICAgSU9TZXJ2aWNlQ2xvc2UoZGF0YVBvcnQpOwor
CisgICAgaWYgKHJlc3VsdCkgeworICAgICAgICAvLyBUaGlzIGlzIGRldGVjdGluZyBNYWMgaGFy
ZHdhcmUgd2l0aCBhbiBJbnRlbCBnNTc1IEdQVSwgd2hpY2gKKyAgICAgICAgLy8gd2UgZG9uJ3Qg
d2FudCB0byBtYWtlIGF2YWlsYWJsZSB0byBtdXhpbmcuCisgICAgICAgIC8vIEJhc2VkIG9uIGlu
Zm9ybWF0aW9uIGZyb20gQXBwbGUncyBPcGVuR0wgdGVhbSwgc3VjaCBkZXZpY2VzCisgICAgICAg
IC8vIGhhdmUgZm91ciBvciBmZXdlciBwcm9jZXNzb3JzLgorICAgICAgICAvLyA8cmRhcjovL3By
b2JsZW0vMzAwNjAzNzg+CisgICAgICAgIGludCBuYW1lc1syXSA9IHsgQ1RMX0hXLCBIV19OQ1BV
IH07CisgICAgICAgIGludCBjcHVDb3VudDsKKyAgICAgICAgc2l6ZV90IGNwdUNvdW50TGVuZ3Ro
ID0gc2l6ZW9mKGNwdUNvdW50KTsKKyAgICAgICAgc3lzY3RsKG5hbWVzLCAyLCAmY3B1Q291bnQs
ICZjcHVDb3VudExlbmd0aCwgbnVsbHB0ciwgMCk7CisgICAgICAgIHJlc3VsdCA9IGNwdUNvdW50
ID4gNDsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGJvb2wg
aGFzTXV4YWJsZUdQVSgpCit7CisgICAgc3RhdGljIGJvb2wgY2FuTXV4ID0gaGFzTXV4Q2FwYWJp
bGl0eSgpOworICAgIHJldHVybiBjYW5NdXg7Cit9CisKKyNlbmRpZgorCitjb25zdCB1bnNpZ25l
ZCBNYXhDb250ZXh0cyA9IDE2OworCitjbGFzcyBHcmFwaGljc0NvbnRleHQzRE1hbmFnZXIgewor
cHVibGljOgorICAgIEdyYXBoaWNzQ29udGV4dDNETWFuYWdlcigpCisgICAgICAgIDogbV9kaXNh
YmxlSGlnaFBlcmZvcm1hbmNlR1BVVGltZXIoKnRoaXMsICZHcmFwaGljc0NvbnRleHQzRE1hbmFn
ZXI6OmRpc2FibGVIaWdoUGVyZm9ybWFuY2VHUFVUaW1lckZpcmVkKQorICAgIHsKKyAgICB9CisK
KyAgICB2b2lkIGFkZENvbnRleHQoR3JhcGhpY3NDb250ZXh0M0QqKTsKKyAgICB2b2lkIHJlbW92
ZUNvbnRleHQoR3JhcGhpY3NDb250ZXh0M0QqKTsKKworICAgIHZvaWQgYWRkQ29udGV4dFJlcXVp
cmluZ0hpZ2hQZXJmb3JtYW5jZShHcmFwaGljc0NvbnRleHQzRCopOworICAgIHZvaWQgcmVtb3Zl
Q29udGV4dFJlcXVpcmluZ0hpZ2hQZXJmb3JtYW5jZShHcmFwaGljc0NvbnRleHQzRCopOworCisg
ICAgdm9pZCByZWN5Y2xlQ29udGV4dElmTmVjZXNzYXJ5KCk7CisgICAgYm9vbCBoYXNUb29NYW55
Q29udGV4dHMoKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHRzLnNpemUoKSA+PSBNYXhDb250ZXh0
czsgfQorCisgICAgdm9pZCB1cGRhdGVBbGxDb250ZXh0cygpOworCitwcml2YXRlOgorICAgIHZv
aWQgdXBkYXRlSGlnaFBlcmZvcm1hbmNlU3RhdGUoKTsKKyAgICB2b2lkIGRpc2FibGVIaWdoUGVy
Zm9ybWFuY2VHUFVUaW1lckZpcmVkKCk7CisKKyAgICBWZWN0b3I8R3JhcGhpY3NDb250ZXh0M0Qq
PiBtX2NvbnRleHRzOworICAgIEhhc2hTZXQ8R3JhcGhpY3NDb250ZXh0M0QqPiBtX2NvbnRleHRz
UmVxdWlyaW5nSGlnaFBlcmZvcm1hbmNlOworCisgICAgVGltZXIgbV9kaXNhYmxlSGlnaFBlcmZv
cm1hbmNlR1BVVGltZXI7CisKKyNpZiBQTEFURk9STShNQUMpCisgICAgQ0dMUGl4ZWxGb3JtYXRP
YmogbV9waXhlbEZvcm1hdE9iaiB7IG51bGxwdHIgfTsKKyNlbmRpZgorfTsKKworc3RhdGljIEdy
YXBoaWNzQ29udGV4dDNETWFuYWdlciYgbWFuYWdlcigpCit7CisgICAgc3RhdGljIE5ldmVyRGVz
dHJveWVkPEdyYXBoaWNzQ29udGV4dDNETWFuYWdlcj4gc19tYW5hZ2VyOworICAgIHJldHVybiBz
X21hbmFnZXI7Cit9CisKKyNpZiBQTEFURk9STShNQUMpCitzdGF0aWMgdm9pZCBkaXNwbGF5V2Fz
UmVjb25maWd1cmVkKENHRGlyZWN0RGlzcGxheUlELCBDR0Rpc3BsYXlDaGFuZ2VTdW1tYXJ5Rmxh
Z3MgZmxhZ3MsIHZvaWQqKQoreworICAgIGlmIChmbGFncyAmIGtDR0Rpc3BsYXlTZXRNb2RlRmxh
ZykKKyAgICAgICAgbWFuYWdlcigpLnVwZGF0ZUFsbENvbnRleHRzKCk7Cit9CisjZW5kaWYKKwor
dm9pZCBHcmFwaGljc0NvbnRleHQzRE1hbmFnZXI6OnVwZGF0ZUFsbENvbnRleHRzKCkKK3sKKyNp
ZiBQTEFURk9STShNQUMpCisgICAgZm9yIChhdXRvKiBjb250ZXh0IDogbV9jb250ZXh0cykgewor
ICAgICAgICBjb250ZXh0LT51cGRhdGVDR0xDb250ZXh0KCk7CisgICAgICAgIGNvbnRleHQtPmRp
c3BhdGNoQ29udGV4dENoYW5nZWROb3RpZmljYXRpb24oKTsKKyAgICB9CisjZW5kaWYKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHQzRE1hbmFnZXI6OmFkZENvbnRleHQoR3JhcGhpY3NDb250ZXh0
M0QqIGNvbnRleHQpCit7CisgICAgQVNTRVJUKGNvbnRleHQpOworICAgIGlmICghY29udGV4dCkK
KyAgICAgICAgcmV0dXJuOworCisjaWYgUExBVEZPUk0oTUFDKQorICAgIGlmICghbV9jb250ZXh0
cy5zaXplKCkpCisgICAgICAgIENHRGlzcGxheVJlZ2lzdGVyUmVjb25maWd1cmF0aW9uQ2FsbGJh
Y2soZGlzcGxheVdhc1JlY29uZmlndXJlZCwgbnVsbHB0cik7CisjZW5kaWYKKworICAgIEFTU0VS
VCghbV9jb250ZXh0cy5jb250YWlucyhjb250ZXh0KSk7CisgICAgbV9jb250ZXh0cy5hcHBlbmQo
Y29udGV4dCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RNYW5hZ2VyOjpyZW1vdmVDb250
ZXh0KEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQoreworICAgIEFTU0VSVChtX2NvbnRleHRz
LmNvbnRhaW5zKGNvbnRleHQpKTsKKyAgICBtX2NvbnRleHRzLnJlbW92ZUZpcnN0KGNvbnRleHQp
OworICAgIHJlbW92ZUNvbnRleHRSZXF1aXJpbmdIaWdoUGVyZm9ybWFuY2UoY29udGV4dCk7CisK
KyNpZiBQTEFURk9STShNQUMpCisgICAgaWYgKCFtX2NvbnRleHRzLnNpemUoKSkKKyAgICAgICAg
Q0dEaXNwbGF5UmVtb3ZlUmVjb25maWd1cmF0aW9uQ2FsbGJhY2soZGlzcGxheVdhc1JlY29uZmln
dXJlZCwgbnVsbHB0cik7CisjZW5kaWYKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRE1hbmFn
ZXI6OmFkZENvbnRleHRSZXF1aXJpbmdIaWdoUGVyZm9ybWFuY2UoR3JhcGhpY3NDb250ZXh0M0Qq
IGNvbnRleHQpCit7CisgICAgQVNTRVJUKGNvbnRleHQpOworICAgIGlmICghY29udGV4dCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKG1fY29udGV4dHMuY29udGFpbnMoY29udGV4dCkp
OworICAgIEFTU0VSVCghbV9jb250ZXh0c1JlcXVpcmluZ0hpZ2hQZXJmb3JtYW5jZS5jb250YWlu
cyhjb250ZXh0KSk7CisKKyAgICBMT0coV2ViR0wsICJUaGlzIGNvbnRleHQgKCVwKSByZXF1aXJl
cyB0aGUgaGlnaC1wZXJmb3JtYW5jZSBHUFUuIiwgY29udGV4dCk7CisgICAgbV9jb250ZXh0c1Jl
cXVpcmluZ0hpZ2hQZXJmb3JtYW5jZS5hZGQoY29udGV4dCk7CisKKyAgICB1cGRhdGVIaWdoUGVy
Zm9ybWFuY2VTdGF0ZSgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNETWFuYWdlcjo6cmVt
b3ZlQ29udGV4dFJlcXVpcmluZ0hpZ2hQZXJmb3JtYW5jZShHcmFwaGljc0NvbnRleHQzRCogY29u
dGV4dCkKK3sKKyAgICBpZiAoIW1fY29udGV4dHNSZXF1aXJpbmdIaWdoUGVyZm9ybWFuY2UuY29u
dGFpbnMoY29udGV4dCkpCisgICAgICAgIHJldHVybjsKKworICAgIExPRyhXZWJHTCwgIlRoaXMg
Y29udGV4dCAoJXApIG5vIGxvbmdlciByZXF1aXJlcyB0aGUgaGlnaC1wZXJmb3JtYW5jZSBHUFUu
IiwgY29udGV4dCk7CisgICAgbV9jb250ZXh0c1JlcXVpcmluZ0hpZ2hQZXJmb3JtYW5jZS5yZW1v
dmUoY29udGV4dCk7CisKKyAgICB1cGRhdGVIaWdoUGVyZm9ybWFuY2VTdGF0ZSgpOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dDNETWFuYWdlcjo6dXBkYXRlSGlnaFBlcmZvcm1hbmNlU3RhdGUo
KQoreworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBpZiAoIWhhc011eGFibGVHUFUoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaWYgKG1fY29udGV4dHNSZXF1aXJpbmdIaWdoUGVyZm9ybWFuY2Uu
c2l6ZSgpKSB7CisKKyAgICAgICAgaWYgKG1fZGlzYWJsZUhpZ2hQZXJmb3JtYW5jZUdQVVRpbWVy
LmlzQWN0aXZlKCkpIHsKKyAgICAgICAgICAgIExPRyhXZWJHTCwgIkNhbmNlbCBwZW5kaW5nIHRp
bWVyIGZvciB0dXJuaW5nIG9mZiBoaWdoLXBlcmZvcm1hbmNlIEdQVS4iKTsKKyAgICAgICAgICAg
IG1fZGlzYWJsZUhpZ2hQZXJmb3JtYW5jZUdQVVRpbWVyLnN0b3AoKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmICghbV9waXhlbEZvcm1hdE9iaikgeworICAgICAgICAgICAgTE9HKFdlYkdMLCAi
VHVybmluZyBvbiBoaWdoLXBlcmZvcm1hbmNlIEdQVS4iKTsKKworICAgICAgICAgICAgQ0dMUGl4
ZWxGb3JtYXRBdHRyaWJ1dGUgYXR0cmlidXRlc1tdID0geyBrQ0dMUEZBQWNjZWxlcmF0ZWQsIGtD
R0xQRkFDb2xvclNpemUsIHN0YXRpY19jYXN0PENHTFBpeGVsRm9ybWF0QXR0cmlidXRlPigzMiks
IHN0YXRpY19jYXN0PENHTFBpeGVsRm9ybWF0QXR0cmlidXRlPigwKSB9OworICAgICAgICAgICAg
R0xpbnQgbnVtUGl4ZWxGb3JtYXRzID0gMDsKKyAgICAgICAgICAgIENHTENob29zZVBpeGVsRm9y
bWF0KGF0dHJpYnV0ZXMsICZtX3BpeGVsRm9ybWF0T2JqLCAmbnVtUGl4ZWxGb3JtYXRzKTsKKyAg
ICAgICAgfQorCisgICAgfSBlbHNlIGlmIChtX3BpeGVsRm9ybWF0T2JqKSB7CisgICAgICAgIC8v
IERvbid0IGltbWVkaWF0ZWx5IHR1cm4gb2ZmIHRoZSBoaWdoLXBlcmZvcm1hbmNlIEdQVS4gVGhl
IHVzZXIgbWlnaHQgYmUKKyAgICAgICAgLy8gc3dhcHBpbmcgYmFjayBhbmQgZm9ydGggYmV0d2Vl
biB0YWJzIG9yIHdpbmRvd3MsIGFuZCB3ZSBkb24ndCB3YW50IHRvIGNhdXNlCisgICAgICAgIC8v
IGNodXJuIGlmIHdlIGNhbiBhdm9pZCBpdC4KKyAgICAgICAgaWYgKCFtX2Rpc2FibGVIaWdoUGVy
Zm9ybWFuY2VHUFVUaW1lci5pc0FjdGl2ZSgpKSB7CisgICAgICAgICAgICBMT0coV2ViR0wsICJT
ZXQgYSB0aW1lciB0byB0dXJuIG9mZiBoaWdoLXBlcmZvcm1hbmNlIEdQVS4iKTsKKyAgICAgICAg
ICAgIC8vIEZJWE1FOiBFeHBvc2UgdGhpcyB2YWx1ZSBhcyBhIFNldHRpbmcsIHdoaWNoIHdvdWxk
IHJlcXVpcmUgdGhpcyBjbGFzcworICAgICAgICAgICAgLy8gdG8gcmVmZXJlbmNlIGEgZnJhbWUs
IHBhZ2Ugb3IgZG9jdW1lbnQuCisgICAgICAgICAgICBzdGF0aWMgY29uc3QgU2Vjb25kcyB0aW1l
VG9LZWVwSGlnaFBlcmZvcm1hbmNlR1BVQWxpdmUgeyAxMF9zIH07CisgICAgICAgICAgICBtX2Rp
c2FibGVIaWdoUGVyZm9ybWFuY2VHUFVUaW1lci5zdGFydE9uZVNob3QodGltZVRvS2VlcEhpZ2hQ
ZXJmb3JtYW5jZUdQVUFsaXZlKTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dDNETWFuYWdlcjo6ZGlzYWJsZUhpZ2hQZXJmb3JtYW5jZUdQVVRpbWVy
RmlyZWQoKQoreworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBpZiAoIW1fY29udGV4dHNSZXF1aXJp
bmdIaWdoUGVyZm9ybWFuY2Uuc2l6ZSgpICYmIG1fcGl4ZWxGb3JtYXRPYmopIHsKKyAgICAgICAg
TE9HKFdlYkdMLCAiVHVybmluZyBvZmYgaGlnaC1wZXJmb3JtYW5jZSBHUFUuIik7CisgICAgICAg
IENHTFJlbGVhc2VQaXhlbEZvcm1hdChtX3BpeGVsRm9ybWF0T2JqKTsKKyAgICAgICAgbV9waXhl
bEZvcm1hdE9iaiA9IG51bGxwdHI7CisgICAgfQorI2VuZGlmCit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0M0RNYW5hZ2VyOjpyZWN5Y2xlQ29udGV4dElmTmVjZXNzYXJ5KCkKK3sKKyAgICBpZiAo
aGFzVG9vTWFueUNvbnRleHRzKCkpIHsKKyAgICAgICAgTE9HKFdlYkdMLCAiTWFuYWdlciByZWN5
Y2xlZCBjb250ZXh0ICglcCkuIiwgbV9jb250ZXh0cy5hdCgwKSk7CisgICAgICAgIG1fY29udGV4
dHMuYXQoMCktPnJlY3ljbGVDb250ZXh0KCk7CisgICAgfQorfQorCisvLyBGSVhNRTogVGhpcyBj
bGFzcyBpcyBjdXJyZW50bHkgZW1wdHkgb24gTWFjLCBidXQgd2lsbCBnZXQgcG9wdWxhdGVkIGFz
CisvLyB0aGUgcmVzdHJ1Y3R1cmluZyBpbiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NjY5MDMgaXMgZG9uZQorY2xhc3MgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlIHsK
K3B1YmxpYzoKKyAgICBHcmFwaGljc0NvbnRleHQzRFByaXZhdGUoR3JhcGhpY3NDb250ZXh0M0Qq
KSB7IH0KKyAgICAKKyAgICB+R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKCkgeyB9Cit9OworCisj
aWYgUExBVEZPUk0oTUFDKQorCitzdGF0aWMgdm9pZCBzZXRQaXhlbEZvcm1hdChWZWN0b3I8Q0dM
UGl4ZWxGb3JtYXRBdHRyaWJ1dGU+JiBhdHRyaWJzLCBpbnQgY29sb3JCaXRzLCBpbnQgZGVwdGhC
aXRzLCBib29sIGFjY2VsZXJhdGVkLCBib29sIHN1cGVyc2FtcGxlLCBib29sIGNsb3Nlc3QsIGJv
b2wgYW50aWFsaWFzLCBib29sIHVzZUdMRVMzKQoreworICAgIGF0dHJpYnMuY2xlYXIoKTsKKyAg
ICAKKyAgICBhdHRyaWJzLmFwcGVuZChrQ0dMUEZBQ29sb3JTaXplKTsKKyAgICBhdHRyaWJzLmFw
cGVuZChzdGF0aWNfY2FzdDxDR0xQaXhlbEZvcm1hdEF0dHJpYnV0ZT4oY29sb3JCaXRzKSk7Cisg
ICAgYXR0cmlicy5hcHBlbmQoa0NHTFBGQURlcHRoU2l6ZSk7CisgICAgYXR0cmlicy5hcHBlbmQo
c3RhdGljX2Nhc3Q8Q0dMUGl4ZWxGb3JtYXRBdHRyaWJ1dGU+KGRlcHRoQml0cykpOworCisgICAg
Ly8gVGhpcyBhdHRyaWJ1dGUsIHdoaWxlIG1lbnRpb25pbmcgb2ZmbGluZSByZW5kZXJlcnMsIGlz
IGFjdHVhbGx5CisgICAgLy8gYWxsb3dpbmcgdXMgdG8gcmVxdWVzdCB0aGUgaW50ZWdyYXRlZCBn
cmFwaGljcyBvbiBhIGR1YWwgR1BVCisgICAgLy8gc3lzdGVtLCBhbmQgbm90IGZvcmNlIHRoZSBk
aXNjcmV0ZSBHUFUuCisgICAgLy8gU2VlIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9saWJy
YXJ5L21hYy90ZWNobm90ZXMvdG4yMjI5L19pbmRleC5odG1sCisgICAgaWYgKGhhc011eGFibGVH
UFUoKSkKKyAgICAgICAgYXR0cmlicy5hcHBlbmQoa0NHTFBGQUFsbG93T2ZmbGluZVJlbmRlcmVy
cyk7CisKKyAgICBpZiAoYWNjZWxlcmF0ZWQpCisgICAgICAgIGF0dHJpYnMuYXBwZW5kKGtDR0xQ
RkFBY2NlbGVyYXRlZCk7CisgICAgZWxzZSB7CisgICAgICAgIGF0dHJpYnMuYXBwZW5kKGtDR0xQ
RkFSZW5kZXJlcklEKTsKKyAgICAgICAgYXR0cmlicy5hcHBlbmQoc3RhdGljX2Nhc3Q8Q0dMUGl4
ZWxGb3JtYXRBdHRyaWJ1dGU+KGtDR0xSZW5kZXJlckdlbmVyaWNGbG9hdElEKSk7CisgICAgfQor
ICAgICAgICAKKyAgICBpZiAoc3VwZXJzYW1wbGUgJiYgIWFudGlhbGlhcykKKyAgICAgICAgYXR0
cmlicy5hcHBlbmQoa0NHTFBGQVN1cGVyc2FtcGxlKTsKKworICAgIGlmIChjbG9zZXN0KQorICAg
ICAgICBhdHRyaWJzLmFwcGVuZChrQ0dMUEZBQ2xvc2VzdFBvbGljeSk7CisKKyAgICBpZiAoYW50
aWFsaWFzKSB7CisgICAgICAgIGF0dHJpYnMuYXBwZW5kKGtDR0xQRkFNdWx0aXNhbXBsZSk7Cisg
ICAgICAgIGF0dHJpYnMuYXBwZW5kKGtDR0xQRkFTYW1wbGVCdWZmZXJzKTsKKyAgICAgICAgYXR0
cmlicy5hcHBlbmQoc3RhdGljX2Nhc3Q8Q0dMUGl4ZWxGb3JtYXRBdHRyaWJ1dGU+KDEpKTsKKyAg
ICAgICAgYXR0cmlicy5hcHBlbmQoa0NHTFBGQVNhbXBsZXMpOworICAgICAgICBhdHRyaWJzLmFw
cGVuZChzdGF0aWNfY2FzdDxDR0xQaXhlbEZvcm1hdEF0dHJpYnV0ZT4oNCkpOworICAgIH0KKwor
ICAgIGlmICh1c2VHTEVTMykgeworICAgICAgICAvLyBGSVhNRTogSW5zdGVhZCBvZiBiYWNraW5n
IGEgV2ViR0wyIEdyYXBoaWNzQ29udGV4dDNEIHdpdGggYSBPcGVuR0wgMy4yIGNvbnRleHQsIHdl
IHNob3VsZCBpbnN0ZWFkIGJhY2sgaXQgd2l0aCBBTkdMRS4KKyAgICAgICAgLy8gVXNlIGFuIE9w
ZW5HTCAzLjIgY29udGV4dCBmb3Igbm93IHVudGlsIHRoZSBBTkdMRSBiYWNrZW5kIGlzIHJlYWR5
LgorICAgICAgICBhdHRyaWJzLmFwcGVuZChrQ0dMUEZBT3BlbkdMUHJvZmlsZSk7CisgICAgICAg
IGF0dHJpYnMuYXBwZW5kKHN0YXRpY19jYXN0PENHTFBpeGVsRm9ybWF0QXR0cmlidXRlPihrQ0dM
T0dMUFZlcnNpb25fM18yX0NvcmUpKTsKKyAgICB9CisgICAgICAgIAorICAgIGF0dHJpYnMuYXBw
ZW5kKHN0YXRpY19jYXN0PENHTFBpeGVsRm9ybWF0QXR0cmlidXRlPigwKSk7Cit9CisjZW5kaWYg
Ly8gIVBMQVRGT1JNKElPUykKKworUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBHcmFwaGljc0Nv
bnRleHQzRDo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEQXR0cmlidXRlcyBhdHRycywgSG9zdFdp
bmRvdyogaG9zdFdpbmRvdywgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlclN0eWxlIHJlbmRlclN0
eWxlKQoreworICAgIC8vIFRoaXMgaW1wbGVtZW50YXRpb24gZG9lc24ndCBjdXJyZW50bHkgc3Vw
cG9ydCByZW5kZXJpbmcgZGlyZWN0bHkgdG8gdGhlIEhvc3RXaW5kb3cuCisgICAgaWYgKHJlbmRl
clN0eWxlID09IFJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKworICAgIC8vIE1ha2Ugc3BhY2UgZm9yIHRoZSBpbmNvbWluZyBjb250ZXh0IGlmIHdl
J3JlIGZ1bGwuCisgICAgbWFuYWdlcigpLnJlY3ljbGVDb250ZXh0SWZOZWNlc3NhcnkoKTsKKyAg
ICBpZiAobWFuYWdlcigpLmhhc1Rvb01hbnlDb250ZXh0cygpKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKworICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9IGFkb3B0UmVm
KG5ldyBHcmFwaGljc0NvbnRleHQzRChhdHRycywgaG9zdFdpbmRvdywgcmVuZGVyU3R5bGUpKTsK
KworICAgIGlmICghY29udGV4dC0+bV9jb250ZXh0T2JqKQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKworICAgIG1hbmFnZXIoKS5hZGRDb250ZXh0KGNvbnRleHQuZ2V0KCkpOworCisgICAgcmV0
dXJuIGNvbnRleHQ7Cit9CisKK0dyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChH
cmFwaGljc0NvbnRleHQzREF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaW5kb3cqLCBHcmFwaGljc0Nv
bnRleHQzRDo6UmVuZGVyU3R5bGUpCisgICAgOiBtX2F0dHJzKGF0dHJzKQorI2lmIFBMQVRGT1JN
KElPUykKKyAgICAsIG1fY29tcGlsZXIoU0hfRVNTTF9PVVRQVVQpCisjZW5kaWYKKyAgICAsIG1f
cHJpdmF0ZShzdGQ6Om1ha2VfdW5pcXVlPEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZT4odGhpcykp
Cit7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIEVBR0xSZW5kZXJpbmdBUEkgYXBpID0gbV9hdHRy
cy51c2VHTEVTMyA/IGtFQUdMUmVuZGVyaW5nQVBJT3BlbkdMRVMzIDoga0VBR0xSZW5kZXJpbmdB
UElPcGVuR0xFUzI7CisgICAgbV9jb250ZXh0T2JqID0gW1tFQUdMQ29udGV4dCBhbGxvY10gaW5p
dFdpdGhBUEk6YXBpXTsKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyNlbHNlCisgICAgVmVj
dG9yPENHTFBpeGVsRm9ybWF0QXR0cmlidXRlPiBhdHRyaWJzOworICAgIENHTFBpeGVsRm9ybWF0
T2JqIHBpeGVsRm9ybWF0T2JqID0gMDsKKyAgICBHTGludCBudW1QaXhlbEZvcm1hdHMgPSAwOwor
ICAgIAorICAgIC8vIElmIHdlJ3JlIGNvbmZpZ3VyZWQgdG8gZGVtYW5kIHRoZSBzb2Z0d2FyZSBy
ZW5kZXJlciwgd2UnbGwKKyAgICAvLyBkbyBzby4gV2UgYXR0ZW1wdCB0byBjcmVhdGUgY29udGV4
dHMgaW4gdGhpcyBvcmRlcjoKKyAgICAvLworICAgIC8vIDEpIDMyIGJpdCBSR0JBLzMyIGJpdCBk
ZXB0aC9zdXBlcnNhbXBsZWQKKyAgICAvLyAyKSAzMiBiaXQgUkdCQS8zMiBiaXQgZGVwdGgKKyAg
ICAvLyAzKSAzMiBiaXQgUkdCQS8xNiBiaXQgZGVwdGgKKyAgICAvLworICAgIC8vIElmIHdlIHdl
cmUgbm90IGZvcmNlZCBpbnRvIHNvZnR3YXJlIG1vZGUgYWxyZWFkeSwgb3VyIGZpbmFsIGF0dGVt
cHQgaXMKKyAgICAvLyB0byB0cnkgdGhhdDoKKyAgICAvLworICAgIC8vIDQpIGNsb3Nlc3QgdG8g
MzIgYml0IFJHQkEvMTYgYml0IGRlcHRoL3NvZnR3YXJlIHJlbmRlcmVyCisgICAgLy8KKyAgICAv
LyBJZiBub25lIG9mIHRoYXQgd29ya3MsIHdlIHNpbXBseSBmYWlsIGFuZCBzZXQgbV9jb250ZXh0
T2JqIHRvIDAuCisKKyAgICBib29sIHVzZU11bHRpc2FtcGxpbmcgPSBtX2F0dHJzLmFudGlhbGlh
czsKKworICAgIG1fcG93ZXJQcmVmZXJlbmNlVXNlZEZvckNyZWF0aW9uID0gKGhhc011eGFibGVH
UFUoKSAmJiBhdHRycy5wb3dlclByZWZlcmVuY2UgPT0gR3JhcGhpY3NDb250ZXh0M0RQb3dlclBy
ZWZlcmVuY2U6OkhpZ2hQZXJmb3JtYW5jZSkgPyBHcmFwaGljc0NvbnRleHQzRFBvd2VyUHJlZmVy
ZW5jZTo6SGlnaFBlcmZvcm1hbmNlIDogR3JhcGhpY3NDb250ZXh0M0RQb3dlclByZWZlcmVuY2U6
OkRlZmF1bHQ7CisKKyAgICBzZXRQaXhlbEZvcm1hdChhdHRyaWJzLCAzMiwgMzIsICFhdHRycy5m
b3JjZVNvZnR3YXJlUmVuZGVyZXIsIHRydWUsIGZhbHNlLCB1c2VNdWx0aXNhbXBsaW5nLCBhdHRy
cy51c2VHTEVTMyk7CisgICAgQ0dMQ2hvb3NlUGl4ZWxGb3JtYXQoYXR0cmlicy5kYXRhKCksICZw
aXhlbEZvcm1hdE9iaiwgJm51bVBpeGVsRm9ybWF0cyk7CisKKyAgICBpZiAoIW51bVBpeGVsRm9y
bWF0cykgeworICAgICAgICBzZXRQaXhlbEZvcm1hdChhdHRyaWJzLCAzMiwgMzIsICFhdHRycy5m
b3JjZVNvZnR3YXJlUmVuZGVyZXIsIGZhbHNlLCBmYWxzZSwgdXNlTXVsdGlzYW1wbGluZywgYXR0
cnMudXNlR0xFUzMpOworICAgICAgICBDR0xDaG9vc2VQaXhlbEZvcm1hdChhdHRyaWJzLmRhdGEo
KSwgJnBpeGVsRm9ybWF0T2JqLCAmbnVtUGl4ZWxGb3JtYXRzKTsKKworICAgICAgICBpZiAoIW51
bVBpeGVsRm9ybWF0cykgeworICAgICAgICAgICAgc2V0UGl4ZWxGb3JtYXQoYXR0cmlicywgMzIs
IDE2LCAhYXR0cnMuZm9yY2VTb2Z0d2FyZVJlbmRlcmVyLCBmYWxzZSwgZmFsc2UsIHVzZU11bHRp
c2FtcGxpbmcsIGF0dHJzLnVzZUdMRVMzKTsKKyAgICAgICAgICAgIENHTENob29zZVBpeGVsRm9y
bWF0KGF0dHJpYnMuZGF0YSgpLCAmcGl4ZWxGb3JtYXRPYmosICZudW1QaXhlbEZvcm1hdHMpOwor
CisgICAgICAgICAgICBpZiAoIWF0dHJzLmZvcmNlU29mdHdhcmVSZW5kZXJlciAmJiAhbnVtUGl4
ZWxGb3JtYXRzKSB7CisgICAgICAgICAgICAgICAgc2V0UGl4ZWxGb3JtYXQoYXR0cmlicywgMzIs
IDE2LCBmYWxzZSwgZmFsc2UsIHRydWUsIGZhbHNlLCBhdHRycy51c2VHTEVTMyk7CisgICAgICAg
ICAgICAgICAgQ0dMQ2hvb3NlUGl4ZWxGb3JtYXQoYXR0cmlicy5kYXRhKCksICZwaXhlbEZvcm1h
dE9iaiwgJm51bVBpeGVsRm9ybWF0cyk7CisgICAgICAgICAgICAgICAgdXNlTXVsdGlzYW1wbGlu
ZyA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFu
dW1QaXhlbEZvcm1hdHMpCisgICAgICAgIHJldHVybjsKKworICAgIENHTEVycm9yIGVyciA9IENH
TENyZWF0ZUNvbnRleHQocGl4ZWxGb3JtYXRPYmosIDAsICZtX2NvbnRleHRPYmopOworICAgIEdM
aW50IGFib3J0T25CbGFja2xpc3QgPSAwOworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBDR0xTZXRQ
YXJhbWV0ZXIobV9jb250ZXh0T2JqLCBrQ0dMQ1BBYm9ydE9uR1BVUmVzdGFydFN0YXR1c0JsYWNr
bGlzdGVkLCAmYWJvcnRPbkJsYWNrbGlzdCk7CisjZWxpZiBQTEFURk9STShJT1MpCisgICAgQ0dM
U2V0UGFyYW1ldGVyKG1fY29udGV4dE9iaiwga0VBR0xDUEFib3J0T25HUFVSZXN0YXJ0U3RhdHVz
QmxhY2tsaXN0ZWQsICZhYm9ydE9uQmxhY2tsaXN0KTsKKyNlbmRpZgorCisgICAgQ0dMRGVzdHJv
eVBpeGVsRm9ybWF0KHBpeGVsRm9ybWF0T2JqKTsKKyAgICAKKyAgICBpZiAoZXJyICE9IGtDR0xO
b0Vycm9yIHx8ICFtX2NvbnRleHRPYmopIHsKKyAgICAgICAgLy8gV2Ugd2VyZSB1bmFibGUgdG8g
Y3JlYXRlIHRoZSBjb250ZXh0LgorICAgICAgICBtX2NvbnRleHRPYmogPSAwOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgbV9pc0ZvcldlYkdMMiA9IGF0dHJzLnVzZUdMRVMzOworCisg
ICAgLy8gU2V0IHRoZSBjdXJyZW50IGNvbnRleHQgdG8gdGhlIG9uZSBnaXZlbiB0byB1cy4KKyAg
ICBDR0xTZXRDdXJyZW50Q29udGV4dChtX2NvbnRleHRPYmopOworCisjZW5kaWYgLy8gIVBMQVRG
T1JNKElPUykKKyAgICAKKyAgICB2YWxpZGF0ZUF0dHJpYnV0ZXMoKTsKKworICAgIC8vIENyZWF0
ZSB0aGUgV2ViR0xMYXllcgorICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUworICAgICAg
ICBtX3dlYkdMTGF5ZXIgPSBhZG9wdE5TKFtbV2ViR0xMYXllciBhbGxvY10gaW5pdFdpdGhHcmFw
aGljc0NvbnRleHQzRDp0aGlzXSk7CisjaWZuZGVmIE5ERUJVRworICAgICAgICBbbV93ZWJHTExh
eWVyIHNldE5hbWU6QCJXZWJHTCBMYXllciJdOworI2VuZGlmCisgICAgRU5EX0JMT0NLX09CSkNf
RVhDRVBUSU9OUworCisjaWYgIVBMQVRGT1JNKElPUykKKyAgICBpZiAodXNlTXVsdGlzYW1wbGlu
ZykKKyAgICAgICAgOjpnbEVuYWJsZShHTF9NVUxUSVNBTVBMRSk7CisjZW5kaWYKKworI2lmIFBM
QVRGT1JNKElPUykKKyAgICA6OmdsR2VuUmVuZGVyYnVmZmVycygxLCAmbV90ZXh0dXJlKTsKKyNl
bHNlCisgICAgLy8gY3JlYXRlIGEgdGV4dHVyZSB0byByZW5kZXIgaW50bworICAgIDo6Z2xHZW5U
ZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKKyAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8y
RCwgbV90ZXh0dXJlKTsKKyAgICA6OmdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9U
RVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7CisgICAgOjpnbFRleFBhcmFtZXRlcmkoR0xf
VEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOworICAgIDo6Z2xU
ZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9U
T19FREdFKTsKKyAgICA6OmdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJF
X1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRV
UkVfMkQsIDApOworI2VuZGlmCisKKyAgICAvLyBjcmVhdGUgYW4gRkJPCisgICAgOjpnbEdlbkZy
YW1lYnVmZmVyc0VYVCgxLCAmbV9mYm8pOworICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xf
RlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7CisKKyAgICBtX3N0YXRlLmJvdW5kRkJPID0gbV9mYm87
CisgICAgaWYgKCFtX2F0dHJzLmFudGlhbGlhcyAmJiAobV9hdHRycy5zdGVuY2lsIHx8IG1fYXR0
cnMuZGVwdGgpKQorICAgICAgICA6OmdsR2VuUmVuZGVyYnVmZmVyc0VYVCgxLCAmbV9kZXB0aFN0
ZW5jaWxCdWZmZXIpOworCisgICAgLy8gY3JlYXRlIGFuIG11bHRpc2FtcGxlIEZCTworICAgIGlm
IChtX2F0dHJzLmFudGlhbGlhcykgeworICAgICAgICA6OmdsR2VuRnJhbWVidWZmZXJzRVhUKDEs
ICZtX211bHRpc2FtcGxlRkJPKTsKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9G
UkFNRUJVRkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVGQk8pOworICAgICAgICBtX3N0YXRlLmJvdW5k
RkJPID0gbV9tdWx0aXNhbXBsZUZCTzsKKyAgICAgICAgOjpnbEdlblJlbmRlcmJ1ZmZlcnNFWFQo
MSwgJm1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7CisgICAgICAgIGlmIChtX2F0dHJzLnN0ZW5j
aWwgfHwgbV9hdHRycy5kZXB0aCkKKyAgICAgICAgICAgIDo6Z2xHZW5SZW5kZXJidWZmZXJzRVhU
KDEsICZtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICB9CisgICAgCisgICAg
Ly8gQU5HTEUgaW5pdGlhbGl6YXRpb24uCisKKyAgICBTaEJ1aWx0SW5SZXNvdXJjZXMgQU5HTEVS
ZXNvdXJjZXM7CisgICAgc2g6OkluaXRCdWlsdEluUmVzb3VyY2VzKCZBTkdMRVJlc291cmNlcyk7
CisKKyAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZFUlRFWF9BVFRSSUJT
LCAmQU5HTEVSZXNvdXJjZXMuTWF4VmVydGV4QXR0cmlicyk7CisgICAgZ2V0SW50ZWdlcnYoR3Jh
cGhpY3NDb250ZXh0M0Q6Ok1BWF9WRVJURVhfVU5JRk9STV9WRUNUT1JTLCAmQU5HTEVSZXNvdXJj
ZXMuTWF4VmVydGV4VW5pZm9ybVZlY3RvcnMpOworICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29u
dGV4dDNEOjpNQVhfVkFSWUlOR19WRUNUT1JTLCAmQU5HTEVSZXNvdXJjZXMuTWF4VmFyeWluZ1Zl
Y3RvcnMpOworICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVkVSVEVYX1RF
WFRVUkVfSU1BR0VfVU5JVFMsICZBTkdMRVJlc291cmNlcy5NYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VV
bml0cyk7CisgICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9DT01CSU5FRF9U
RVhUVVJFX0lNQUdFX1VOSVRTLCAmQU5HTEVSZXNvdXJjZXMuTWF4Q29tYmluZWRUZXh0dXJlSW1h
Z2VVbml0cyk7CisgICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9URVhUVVJF
X0lNQUdFX1VOSVRTLCAmQU5HTEVSZXNvdXJjZXMuTWF4VGV4dHVyZUltYWdlVW5pdHMpOworICAg
IGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNU
T1JTLCAmQU5HTEVSZXNvdXJjZXMuTWF4RnJhZ21lbnRVbmlmb3JtVmVjdG9ycyk7CisKKyAgICAv
LyBBbHdheXMgc2V0IHRvIDEgZm9yIE9wZW5HTCBFUy4KKyAgICBBTkdMRVJlc291cmNlcy5NYXhE
cmF3QnVmZmVycyA9IDE7CisgICAgCisgICAgR0MzRGludCByYW5nZVsyXSwgcHJlY2lzaW9uOwor
ICAgIGdldFNoYWRlclByZWNpc2lvbkZvcm1hdChHcmFwaGljc0NvbnRleHQzRDo6RlJBR01FTlRf
U0hBREVSLCBHcmFwaGljc0NvbnRleHQzRDo6SElHSF9GTE9BVCwgcmFuZ2UsICZwcmVjaXNpb24p
OworICAgIEFOR0xFUmVzb3VyY2VzLkZyYWdtZW50UHJlY2lzaW9uSGlnaCA9IChyYW5nZVswXSB8
fCByYW5nZVsxXSB8fCBwcmVjaXNpb24pOworCisgICAgbV9jb21waWxlci5zZXRSZXNvdXJjZXMo
QU5HTEVSZXNvdXJjZXMpOworICAgIAorI2lmICFQTEFURk9STShJT1MpCisgICAgOjpnbEVuYWJs
ZShHTF9WRVJURVhfUFJPR1JBTV9QT0lOVF9TSVpFKTsKKyAgICBpZiAoIWlzR0xFUzJDb21wbGlh
bnQoKSkKKyAgICAgICAgOjpnbEVuYWJsZShHTF9QT0lOVF9TUFJJVEUpOworI2VuZGlmCisKKyAg
ICA6OmdsQ2xlYXJDb2xvcigwLCAwLCAwLCAwKTsKKworICAgIExPRyhXZWJHTCwgIkNyZWF0ZWQg
YSBHcmFwaGljc0NvbnRleHQzRCAoJXApLiIsIHRoaXMpOworfQorCitHcmFwaGljc0NvbnRleHQz
RDo6fkdyYXBoaWNzQ29udGV4dDNEKCkKK3sKKyAgICBtYW5hZ2VyKCkucmVtb3ZlQ29udGV4dCh0
aGlzKTsKKworICAgIGlmIChtX2NvbnRleHRPYmopIHsKKyNpZiBQTEFURk9STShJT1MpCisgICAg
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgICAgICBbbV9jb250ZXh0T2JqIHJlbmRlcmJ1
ZmZlclN0b3JhZ2U6R0xfUkVOREVSQlVGRkVSIGZyb21EcmF3YWJsZTpuaWxdOworICAgICAgICA6
OmdsRGVsZXRlUmVuZGVyYnVmZmVycygxLCAmbV90ZXh0dXJlKTsKKyNlbHNlCisgICAgICAgIENH
TFNldEN1cnJlbnRDb250ZXh0KG1fY29udGV4dE9iaik7CisgICAgICAgIDo6Z2xEZWxldGVUZXh0
dXJlcygxLCAmbV90ZXh0dXJlKTsKKyNlbmRpZgorICAgICAgICBpZiAobV9hdHRycy5hbnRpYWxp
YXMpIHsKKyAgICAgICAgICAgIDo6Z2xEZWxldGVSZW5kZXJidWZmZXJzRVhUKDEsICZtX211bHRp
c2FtcGxlQ29sb3JCdWZmZXIpOworICAgICAgICAgICAgaWYgKG1fYXR0cnMuc3RlbmNpbCB8fCBt
X2F0dHJzLmRlcHRoKQorICAgICAgICAgICAgICAgIDo6Z2xEZWxldGVSZW5kZXJidWZmZXJzRVhU
KDEsICZtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICAgICAgICAgIDo6Z2xE
ZWxldGVGcmFtZWJ1ZmZlcnNFWFQoMSwgJm1fbXVsdGlzYW1wbGVGQk8pOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgaWYgKG1fYXR0cnMuc3RlbmNpbCB8fCBtX2F0dHJzLmRlcHRoKQor
ICAgICAgICAgICAgICAgIDo6Z2xEZWxldGVSZW5kZXJidWZmZXJzRVhUKDEsICZtX2RlcHRoU3Rl
bmNpbEJ1ZmZlcik7CisgICAgICAgIH0KKyAgICAgICAgOjpnbERlbGV0ZUZyYW1lYnVmZmVyc0VY
VCgxLCAmbV9mYm8pOworI2lmIFBMQVRGT1JNKElPUykKKyAgICAgICAgW0VBR0xDb250ZXh0IHNl
dEN1cnJlbnRDb250ZXh0OjBdOworICAgICAgICBbc3RhdGljX2Nhc3Q8RUFHTENvbnRleHQqPiht
X2NvbnRleHRPYmopIHJlbGVhc2VdOworI2Vsc2UKKyAgICAgICAgQ0dMU2V0Q3VycmVudENvbnRl
eHQoMCk7CisgICAgICAgIENHTERlc3Ryb3lDb250ZXh0KG1fY29udGV4dE9iaik7CisjZW5kaWYK
KyAgICAgICAgW21fd2ViR0xMYXllciBzZXRDb250ZXh0Om51bGxwdHJdOworICAgIH0KKworICAg
IExPRyhXZWJHTCwgIkRlc3Ryb3llZCBhIEdyYXBoaWNzQ29udGV4dDNEICglcCkuIiwgdGhpcyk7
Cit9CisKKyNpZiBQTEFURk9STShJT1MpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzZXRSZW5k
ZXJidWZmZXJTdG9yYWdlRnJvbURyYXdhYmxlKEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhl
aWdodCkKK3sKKyAgICAvLyBXZSBuZWVkIHRvIG1ha2UgYSBjYWxsIHRvIHNldEJvdW5kcyBiZWxv
dyB0byB1cGRhdGUgdGhlIGJhY2tpbmcgc3RvcmUgc2l6ZSBidXQgd2UgYWxzbworICAgIC8vIGRv
IG5vdCB3YW50IHRvIGNsb2JiZXIgdGhlIGJvdW5kcyBzZXQgZHVyaW5nIGxheW91dC4KKyAgICBD
R1JlY3QgcHJldmlvdXNCb3VuZHMgPSBbbV93ZWJHTExheWVyLmdldCgpIGJvdW5kc107CisKKyAg
ICBbbV93ZWJHTExheWVyIHNldEJvdW5kczpDR1JlY3RNYWtlKDAsIDAsIHdpZHRoLCBoZWlnaHQp
XTsKKyAgICBbbV93ZWJHTExheWVyIHNldE9wYXF1ZToobV9pbnRlcm5hbENvbG9yRm9ybWF0ICE9
IEdMX1JHQkE4KV07CisKKyAgICBbbV9jb250ZXh0T2JqIHJlbmRlcmJ1ZmZlclN0b3JhZ2U6R0xf
UkVOREVSQlVGRkVSIGZyb21EcmF3YWJsZTpzdGF0aWNfY2FzdDxpZDxFQUdMRHJhd2FibGU+Piht
X3dlYkdMTGF5ZXIuZ2V0KCkpXTsKKworICAgIFttX3dlYkdMTGF5ZXIgc2V0Qm91bmRzOnByZXZp
b3VzQm91bmRzXTsKK30KKyNlbmRpZgorCitib29sIEdyYXBoaWNzQ29udGV4dDNEOjptYWtlQ29u
dGV4dEN1cnJlbnQoKQoreworICAgIGlmICghbV9jb250ZXh0T2JqKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyNpZiBQTEFURk9STShJT1MpCisgICAgaWYgKFtFQUdMQ29udGV4dCBjdXJyZW50
Q29udGV4dF0gIT0gbV9jb250ZXh0T2JqKQorICAgICAgICByZXR1cm4gW0VBR0xDb250ZXh0IHNl
dEN1cnJlbnRDb250ZXh0OnN0YXRpY19jYXN0PEVBR0xDb250ZXh0Kj4obV9jb250ZXh0T2JqKV07
CisjZWxzZQorICAgIENHTENvbnRleHRPYmogY3VycmVudENvbnRleHQgPSBDR0xHZXRDdXJyZW50
Q29udGV4dCgpOworICAgIGlmIChjdXJyZW50Q29udGV4dCAhPSBtX2NvbnRleHRPYmopCisgICAg
ICAgIHJldHVybiBDR0xTZXRDdXJyZW50Q29udGV4dChtX2NvbnRleHRPYmopID09IGtDR0xOb0Vy
cm9yOworI2VuZGlmCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmNoZWNrR1BVU3RhdHVzKCkKK3sKKyAgICBpZiAobV9mYWlsTmV4dFN0YXR1c0NoZWNrKSB7
CisgICAgICAgIExPRyhXZWJHTCwgIlByZXRlbmRpbmcgdGhlIEdQVSBoYXMgcmVzZXQgKCVwKS4g
TG9zZSB0aGUgY29udGV4dC4iLCB0aGlzKTsKKyAgICAgICAgbV9mYWlsTmV4dFN0YXR1c0NoZWNr
ID0gZmFsc2U7CisgICAgICAgIGZvcmNlQ29udGV4dExvc3QoKTsKKyNpZiBQTEFURk9STShNQUMp
CisgICAgICAgIENHTFNldEN1cnJlbnRDb250ZXh0KDApOworI2Vsc2UKKyAgICAgICAgW0VBR0xD
b250ZXh0IHNldEN1cnJlbnRDb250ZXh0OjBdOworI2VuZGlmCisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICAvLyBPbmx5IGRvIHRoZSBjaGVjayBldmVyeSBzdGF0dXNDaGVja1RocmVzaG9s
ZCBjYWxscy4KKyAgICBpZiAobV9zdGF0dXNDaGVja0NvdW50KQorICAgICAgICByZXR1cm47CisK
KyAgICBtX3N0YXR1c0NoZWNrQ291bnQgPSAobV9zdGF0dXNDaGVja0NvdW50ICsgMSkgJSBzdGF0
dXNDaGVja1RocmVzaG9sZDsKKworICAgIEdMaW50IHJlc3RhcnRTdGF0dXMgPSAwOworI2lmIFBM
QVRGT1JNKE1BQykKKyAgICBDR0xHZXRQYXJhbWV0ZXIocGxhdGZvcm1HcmFwaGljc0NvbnRleHQz
RCgpLCBrQ0dMQ1BHUFVSZXN0YXJ0U3RhdHVzLCAmcmVzdGFydFN0YXR1cyk7CisgICAgaWYgKHJl
c3RhcnRTdGF0dXMgPT0ga0NHTENQR1BVUmVzdGFydFN0YXR1c0JsYWNrbGlzdGVkKSB7CisgICAg
ICAgIExPRyhXZWJHTCwgIlRoZSBHUFUgaGFzIGJsYWNrbGlzdGVkIHVzICglcCkuIFRlcm1pbmF0
aW5nLiIsIHRoaXMpOworICAgICAgICBleGl0KEVYX09TRVJSKTsKKyAgICB9CisgICAgaWYgKHJl
c3RhcnRTdGF0dXMgPT0ga0NHTENQR1BVUmVzdGFydFN0YXR1c0NhdXNlZCkgeworICAgICAgICBM
T0coV2ViR0wsICJUaGUgR1BVIGhhcyByZXNldCB1cyAoJXApLiBMb3NlIHRoZSBjb250ZXh0LiIs
IHRoaXMpOworICAgICAgICBmb3JjZUNvbnRleHRMb3N0KCk7CisgICAgICAgIENHTFNldEN1cnJl
bnRDb250ZXh0KDApOworICAgIH0KKyNlbHNlCisgICAgRUFHTENvbnRleHQqIGN1cnJlbnRDb250
ZXh0ID0gc3RhdGljX2Nhc3Q8RUFHTENvbnRleHQqPihQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNE
KCkpOworICAgIFtjdXJyZW50Q29udGV4dCBnZXRQYXJhbWV0ZXI6a0VBR0xDUEdQVVJlc3RhcnRT
dGF0dXMgdG86JnJlc3RhcnRTdGF0dXNdOworICAgIGlmIChyZXN0YXJ0U3RhdHVzID09IGtFQUdM
Q1BHUFVSZXN0YXJ0U3RhdHVzQ2F1c2VkIHx8IHJlc3RhcnRTdGF0dXMgPT0ga0VBR0xDUEdQVVJl
c3RhcnRTdGF0dXNCbGFja2xpc3RlZCkgeworICAgICAgICBMT0coV2ViR0wsICJUaGUgR1BVIGhh
cyBlaXRoZXIgcmVzZXQgb3IgYmxhY2tsaXN0ZWQgdXMgKCVwKS4gTG9zZSB0aGUgY29udGV4dC4i
LCB0aGlzKTsKKyAgICAgICAgZm9yY2VDb250ZXh0TG9zdCgpOworICAgICAgICBbRUFHTENvbnRl
eHQgc2V0Q3VycmVudENvbnRleHQ6MF07CisgICAgfQorI2VuZGlmCit9CisKKyNpZiBQTEFURk9S
TShJT1MpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjplbmRQYWludCgpCit7CisgICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzKQorICAgICAgICByZXNv
bHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5KCk7CisgICAgOjpnbEZsdXNoKCk7CisgICAgOjpn
bEJpbmRSZW5kZXJidWZmZXIoR0xfUkVOREVSQlVGRkVSLCBtX3RleHR1cmUpOworICAgIFtzdGF0
aWNfY2FzdDxFQUdMQ29udGV4dCo+KG1fY29udGV4dE9iaikgcHJlc2VudFJlbmRlcmJ1ZmZlcjpH
TF9SRU5ERVJCVUZGRVJdOworICAgIFtFQUdMQ29udGV4dCBzZXRDdXJyZW50Q29udGV4dDpuaWxd
OworfQorI2VuZGlmCisKKyNpZiBQTEFURk9STShNQUMpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNE
Ojp1cGRhdGVDR0xDb250ZXh0KCkKK3sKKyAgICBpZiAoIW1fY29udGV4dE9iaikKKyAgICAgICAg
cmV0dXJuOworCisgICAgTE9HKFdlYkdMLCAiRGV0ZWN0ZWQgYSBtdXggc3dpdGNoIG9yIGRpc3Bs
YXkgcmVjb25maWd1cmF0aW9uLiBDYWxsIENHTFVwZGF0ZUNvbnRleHQuICglcCkiLCB0aGlzKTsK
KworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIENHTFVwZGF0ZUNvbnRleHQobV9jb250
ZXh0T2JqKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c2V0Q29udGV4dFZpc2liaWxp
dHkoYm9vbCBpc1Zpc2libGUpCit7CisgICAgaWYgKG1fcG93ZXJQcmVmZXJlbmNlVXNlZEZvckNy
ZWF0aW9uID09IEdyYXBoaWNzQ29udGV4dDNEUG93ZXJQcmVmZXJlbmNlOjpIaWdoUGVyZm9ybWFu
Y2UpIHsKKyAgICAgICAgaWYgKGlzVmlzaWJsZSkKKyAgICAgICAgICAgIG1hbmFnZXIoKS5hZGRD
b250ZXh0UmVxdWlyaW5nSGlnaFBlcmZvcm1hbmNlKHRoaXMpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBtYW5hZ2VyKCkucmVtb3ZlQ29udGV4dFJlcXVpcmluZ0hpZ2hQZXJmb3JtYW5jZSh0
aGlzKTsKKyAgICB9Cit9CisjZW5kaWYKKworYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6aXNHTEVT
MkNvbXBsaWFudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faXNGb3JXZWJHTDI7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OnNldENvbnRleHRMb3N0Q2FsbGJhY2soc3RkOjp1bmlxdWVf
cHRyPENvbnRleHRMb3N0Q2FsbGJhY2s+KQoreworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpzZXRFcnJvck1lc3NhZ2VDYWxsYmFjayhzdGQ6OnVuaXF1ZV9wdHI8RXJyb3JNZXNzYWdlQ2Fs
bGJhY2s+KQoreworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzaW11bGF0ZUNvbnRleHRD
aGFuZ2VkKCkKK3sKKyAgICBtYW5hZ2VyKCkudXBkYXRlQWxsQ29udGV4dHMoKTsKK30KKworfQor
CisjZW5kaWYgLy8gRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfM0QpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFwaGljc0NvbnRleHRDb2NvYS5t
bSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4
dENvY29hLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY3ZjRkZWIxNzJiNmMwZmUyM2MxYjFkMWZiMDllYWI4YWRh
ZTEzMWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jb2NvYS9HcmFwaGljc0NvbnRleHRDb2NvYS5tbQpAQCAtMCwwICsxLDMyMyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAxMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIkdyYXBoaWNzQ29udGV4dC5oIgor
CisjaW1wb3J0ICJHcmFwaGljc0NvbnRleHRDRy5oIgorI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0
UGxhdGZvcm1Qcml2YXRlQ0cuaCIKKyNpbXBvcnQgIkludFJlY3QuaCIKKyNpZiBVU0UoQVBQS0lU
KQorI2ltcG9ydCA8QXBwS2l0L0FwcEtpdC5oPgorI2VuZGlmCisjaW1wb3J0IDx3dGYvU3RkTGli
RXh0cmFzLmg+CisKKyNpZiBQTEFURk9STShJT1MpCisjaW1wb3J0ICJDb2xvci5oIgorI2ltcG9y
dCAiV0tHcmFwaGljcy5oIgorI2ltcG9ydCAiV0tHcmFwaGljc0ludGVybmFsLmgiCisjZW5kaWYK
KworI2lmICFQTEFURk9STShJT1MpCisjaW1wb3J0ICJMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRl
eHQuaCIKKyNlbmRpZgorI2ltcG9ydCAiV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oIgorCitAY2xh
c3MgTlNDb2xvcjsKKworLy8gRklYTUU6IE1vcmUgb2YgdGhpcyBzaG91bGQgdXNlIENvcmVHcmFw
aGljcyBpbnN0ZWFkIG9mIEFwcEtpdC4KKy8vIEZJWE1FOiBNb3JlIG9mIHRoaXMgc2hvdWxkIG1v
dmUgaW50byBHcmFwaGljc0NvbnRleHRDRy5jcHAuCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Ly8gTlNDb2xvciwgTlNCZXppZXJQYXRoLCBhbmQgTlNHcmFwaGljc0NvbnRleHQKKy8vIGNhbGxz
IGluIHRoaXMgZmlsZSBhcmUgYWxsIGV4Y2VwdGlvbi1zYWZlLCBzbyB3ZSBkb24ndCBibG9jawor
Ly8gZXhjZXB0aW9ucyBmb3IgdGhvc2UuCisKKyNpZiAhUExBVEZPUk0oSU9TKQorc3RhdGljIHZv
aWQgZHJhd0ZvY3VzUmluZ1RvQ29udGV4dChDR0NvbnRleHRSZWYgY29udGV4dCwgQ0dQYXRoUmVm
IGZvY3VzUmluZ1BhdGgpCit7CisgICAgQ0dDb250ZXh0QmVnaW5QYXRoKGNvbnRleHQpOworICAg
IENHQ29udGV4dEFkZFBhdGgoY29udGV4dCwgZm9jdXNSaW5nUGF0aCk7CisgICAgd2tEcmF3Rm9j
dXNSaW5nKGNvbnRleHQsIG51bGxwdHIsIDApOworfQorCitzdGF0aWMgYm9vbCBkcmF3Rm9jdXNS
aW5nVG9Db250ZXh0QXRUaW1lKENHQ29udGV4dFJlZiBjb250ZXh0LCBDR1BhdGhSZWYgZm9jdXNS
aW5nUGF0aCwgZG91YmxlIHRpbWVPZmZzZXQpCit7CisgICAgVU5VU0VEX1BBUkFNKHRpbWVPZmZz
ZXQpOworICAgIENHQ29udGV4dEJlZ2luUGF0aChjb250ZXh0KTsKKyAgICBDR0NvbnRleHRBZGRQ
YXRoKGNvbnRleHQsIGZvY3VzUmluZ1BhdGgpOworICAgIHJldHVybiB3a0RyYXdGb2N1c1JpbmdB
dFRpbWUoY29udGV4dCwgc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjptYXgoKSk7Cit9Cisj
ZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1
c1JpbmcoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgLyogd2lkdGggKi8sIGZsb2F0IC8qIG9mZnNl
dCAqLywgY29uc3QgQ29sb3ImKQoreworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpIHx8IHBhdGguaXNOdWxsKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGRy
YXdGb2N1c1JpbmdUb0NvbnRleHQocGxhdGZvcm1Db250ZXh0KCksIHBhdGgucGxhdGZvcm1QYXRo
KCkpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0ocGF0aCk7CisjZW5kaWYKK30KKworI2lmIFBM
QVRGT1JNKE1BQykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFBh
dGgmIHBhdGgsIGRvdWJsZSB0aW1lT2Zmc2V0LCBib29sJiBuZWVkc1JlZHJhdykKK3sKKyAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpIHx8IHBhdGguaXNOdWxsKCkpCisgICAgICAgIHJldHVybjsK
KyAgICAKKyAgICBuZWVkc1JlZHJhdyA9IGRyYXdGb2N1c1JpbmdUb0NvbnRleHRBdFRpbWUocGxh
dGZvcm1Db250ZXh0KCksIHBhdGgucGxhdGZvcm1QYXRoKCksIHRpbWVPZmZzZXQpOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0
PiYgcmVjdHMsIGRvdWJsZSB0aW1lT2Zmc2V0LCBib29sJiBuZWVkc1JlZHJhdykKK3sKKyAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBSZXRhaW5QdHI8
Q0dNdXRhYmxlUGF0aFJlZj4gZm9jdXNSaW5nUGF0aCA9IGFkb3B0Q0YoQ0dQYXRoQ3JlYXRlTXV0
YWJsZSgpKTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHJlY3QgOiByZWN0cykKKyAgICAgICAgQ0dQ
YXRoQWRkUmVjdChmb2N1c1JpbmdQYXRoLmdldCgpLCAwLCBDR1JlY3QocmVjdCkpOworCisgICAg
bmVlZHNSZWRyYXcgPSBkcmF3Rm9jdXNSaW5nVG9Db250ZXh0QXRUaW1lKHBsYXRmb3JtQ29udGV4
dCgpLCBmb2N1c1JpbmdQYXRoLmdldCgpLCB0aW1lT2Zmc2V0KTsKK30KKyNlbmRpZgorCit2b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYg
cmVjdHMsIGZsb2F0LCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJikKK3sKKyNpZiAhUExBVEZP
Uk0oSU9TKQorICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIFJldGFpblB0cjxDR011dGFibGVQYXRoUmVmPiBmb2N1c1JpbmdQYXRoID0gYWRvcHRDRihD
R1BhdGhDcmVhdGVNdXRhYmxlKCkpOworICAgIGZvciAoYXV0byYgcmVjdCA6IHJlY3RzKQorICAg
ICAgICBDR1BhdGhBZGRSZWN0KGZvY3VzUmluZ1BhdGguZ2V0KCksIDAsIENHUmVjdEluc2V0KHJl
Y3QsIC1vZmZzZXQsIC1vZmZzZXQpKTsKKworICAgIGRyYXdGb2N1c1JpbmdUb0NvbnRleHQocGxh
dGZvcm1Db250ZXh0KCksIGZvY3VzUmluZ1BhdGguZ2V0KCkpOworI2Vsc2UKKyAgICBVTlVTRURf
UEFSQU0ocmVjdHMpOworICAgIFVOVVNFRF9QQVJBTShvZmZzZXQpOworI2VuZGlmCit9CisKKyNp
ZiAhUExBVEZPUk0oSU9TKQorc3RhdGljIE5TSW1hZ2UgKmZpbmRJbWFnZShOU1N0cmluZyogZmly
c3RDaG9pY2VOYW1lLCBOU1N0cmluZyogc2Vjb25kQ2hvaWNlTmFtZSwgYm9vbCYgdXNpbmdEb3Qp
Cit7CisgICAgLy8gRXZlbnR1YWxseSB3ZSBzaG91bGQgYmUgYWJsZSB0byBnZXQgcmlkIG9mIHRo
ZSBzZWNvbmRDaG9pY2VOYW1lLiBGb3IgdGhlIHRpbWUgYmVpbmcgd2UgbmVlZCBib3RoIHRvIGtl
ZXAKKyAgICAvLyB0aGlzIHdvcmtpbmcgb24gYWxsIHBsYXRmb3Jtcy4KKyAgICBOU0ltYWdlICpp
bWFnZSA9IFtOU0ltYWdlIGltYWdlTmFtZWQ6Zmlyc3RDaG9pY2VOYW1lXTsKKyAgICBpZiAoIWlt
YWdlKQorICAgICAgICBpbWFnZSA9IFtOU0ltYWdlIGltYWdlTmFtZWQ6c2Vjb25kQ2hvaWNlTmFt
ZV07CisgICAgQVNTRVJUKGltYWdlKTsgLy8gaWYgaW1hZ2UgaXMgbm90IGF2YWlsYWJsZSwgd2Ug
d2FudCB0byBrbm93CisgICAgdXNpbmdEb3QgPSBpbWFnZTsKKyAgICByZXR1cm4gaW1hZ2U7Cit9
CisjZWxzZQorc3RhdGljIFJldGFpblB0cjxDR1BhdHRlcm5SZWY+IGNyZWF0ZURvdFBhdHRlcm4o
Ym9vbCYgdXNpbmdEb3QsIGNvbnN0IGNoYXIqIHJlc291cmNlTmFtZSkKK3sKKyAgICBSZXRhaW5Q
dHI8Q0dJbWFnZVJlZj4gaW1hZ2UgPSBhZG9wdENGKFdLR3JhcGhpY3NDcmVhdGVJbWFnZUZyb21C
dW5kbGVXaXRoTmFtZShyZXNvdXJjZU5hbWUpKTsKKyAgICBBU1NFUlQoaW1hZ2UpOyAvLyBpZiBp
bWFnZSBpcyBub3QgYXZhaWxhYmxlLCB3ZSB3YW50IHRvIGtub3cKKyAgICB1c2luZ0RvdCA9IHRy
dWU7CisgICAgcmV0dXJuIGFkb3B0Q0YoV0tDcmVhdGVQYXR0ZXJuRnJvbUNHSW1hZ2UoaW1hZ2Uu
Z2V0KCkpKTsKK30KKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQorCitzdGF0aWMgTlNJbWFnZSAq
c3BlbGxpbmdJbWFnZSA9IG51bGxwdHI7CitzdGF0aWMgTlNJbWFnZSAqZ3JhbW1hckltYWdlID0g
bnVsbHB0cjsKK3N0YXRpYyBOU0ltYWdlICpjb3JyZWN0aW9uSW1hZ2UgPSBudWxscHRyOworCit2
b2lkIEdyYXBoaWNzQ29udGV4dDo6dXBkYXRlRG9jdW1lbnRNYXJrZXJSZXNvdXJjZXMoKQorewor
ICAgIFtzcGVsbGluZ0ltYWdlIHJlbGVhc2VdOworICAgIHNwZWxsaW5nSW1hZ2UgPSBudWxscHRy
OworICAgIFtncmFtbWFySW1hZ2UgcmVsZWFzZV07CisgICAgZ3JhbW1hckltYWdlID0gbnVsbHB0
cjsKKyAgICBbY29ycmVjdGlvbkltYWdlIHJlbGVhc2VdOworICAgIGNvcnJlY3Rpb25JbWFnZSA9
IG51bGxwdHI7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRQYXR0ZXJuUGhhc2VJblVzZXJT
cGFjZShDR0NvbnRleHRSZWYgY29udGV4dCwgQ0dQb2ludCBwaGFzZVBvaW50KQoreworICAgIENH
QWZmaW5lVHJhbnNmb3JtIHVzZXJUb0Jhc2UgPSBnZXRVc2VyVG9CYXNlQ1RNKGNvbnRleHQpOwor
ICAgIENHUG9pbnQgcGhhc2UgPSBDR1BvaW50QXBwbHlBZmZpbmVUcmFuc2Zvcm0ocGhhc2VQb2lu
dCwgdXNlclRvQmFzZSk7CisKKyAgICBDR0NvbnRleHRTZXRQYXR0ZXJuUGhhc2UoY29udGV4dCwg
Q0dTaXplTWFrZShwaGFzZS54LCBwaGFzZS55KSk7Cit9CisKKy8vIFdlYktpdCBvbiBNYWMgaXMg
YSBzdGFuZGFyZCBwbGF0Zm9ybSBjb21wb25lbnQsIHNvIGl0IG11c3QgdXNlIHRoZSBzdGFuZGFy
ZCBwbGF0Zm9ybSBhcnR3b3JrIGZvciB1bmRlcmxpbmUuCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6
ZHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQg
d2lkdGgsIERvY3VtZW50TWFya2VyTGluZVN0eWxlIHN0eWxlKQoreworICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFRoZXNlIGFyZSB0aGUgc2Ft
ZSBmb3IgbWlzc3BlbGxpbmcgb3IgYmFkIGdyYW1tYXIuCisgICAgaW50IHBhdHRlcm5IZWlnaHQg
PSBjTWlzc3BlbGxpbmdMaW5lVGhpY2tuZXNzOworICAgIGZsb2F0IHBhdHRlcm5XaWR0aCA9IGNN
aXNzcGVsbGluZ0xpbmVQYXR0ZXJuV2lkdGg7CisKKyAgICBib29sIHVzaW5nRG90OworI2lmICFQ
TEFURk9STShJT1MpCisgICAgTlNJbWFnZSAqaW1hZ2U7CisgICAgTlNDb2xvciAqZmFsbGJhY2tD
b2xvcjsKKyNlbHNlCisgICAgQ0dQYXR0ZXJuUmVmIGRvdFBhdHRlcm47CisjZW5kaWYKKyAgICBz
d2l0Y2ggKHN0eWxlKSB7CisgICAgY2FzZSBEb2N1bWVudE1hcmtlclNwZWxsaW5nTGluZVN0eWxl
OiB7CisgICAgICAgIC8vIENvbnN0YW50cyBmb3Igc3BlbGxpbmcgcGF0dGVybiBjb2xvci4KKyAg
ICAgICAgc3RhdGljIGJvb2wgdXNpbmdEb3RGb3JTcGVsbGluZyA9IGZhbHNlOworI2lmICFQTEFU
Rk9STShJT1MpCisgICAgICAgIGlmICghc3BlbGxpbmdJbWFnZSkKKyAgICAgICAgICAgIHNwZWxs
aW5nSW1hZ2UgPSBbZmluZEltYWdlKEAiTlNTcGVsbGluZ0RvdCIsIEAiU3BlbGxpbmdEb3QiLCB1
c2luZ0RvdEZvclNwZWxsaW5nKSByZXRhaW5dOworICAgICAgICBpbWFnZSA9IHNwZWxsaW5nSW1h
Z2U7CisgICAgICAgIGZhbGxiYWNrQ29sb3IgPSBbTlNDb2xvciByZWRDb2xvcl07CisjZWxzZQor
ICAgICAgICBzdGF0aWMgQ0dQYXR0ZXJuUmVmIHNwZWxsaW5nUGF0dGVybiA9IGNyZWF0ZURvdFBh
dHRlcm4odXNpbmdEb3RGb3JTcGVsbGluZywgIlNwZWxsaW5nRG90IikubGVha1JlZigpOworICAg
ICAgICBkb3RQYXR0ZXJuID0gc3BlbGxpbmdQYXR0ZXJuOworI2VuZGlmCisgICAgICAgIHVzaW5n
RG90ID0gdXNpbmdEb3RGb3JTcGVsbGluZzsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNh
c2UgRG9jdW1lbnRNYXJrZXJHcmFtbWFyTGluZVN0eWxlOiB7CisjaWYgIVBMQVRGT1JNKElPUykK
KyAgICAgICAgLy8gQ29uc3RhbnRzIGZvciBncmFtbWFyIHBhdHRlcm4gY29sb3IuCisgICAgICAg
IHN0YXRpYyBib29sIHVzaW5nRG90Rm9yR3JhbW1hciA9IGZhbHNlOworICAgICAgICBpZiAoIWdy
YW1tYXJJbWFnZSkKKyAgICAgICAgICAgIGdyYW1tYXJJbWFnZSA9IFtmaW5kSW1hZ2UoQCJOU0dy
YW1tYXJEb3QiLCBAIkdyYW1tYXJEb3QiLCB1c2luZ0RvdEZvckdyYW1tYXIpIHJldGFpbl07Cisg
ICAgICAgIHVzaW5nRG90ID0gZ3JhbW1hckltYWdlOworICAgICAgICBpbWFnZSA9IGdyYW1tYXJJ
bWFnZTsKKyAgICAgICAgZmFsbGJhY2tDb2xvciA9IFtOU0NvbG9yIGdyZWVuQ29sb3JdOworICAg
ICAgICBicmVhazsKKyNlbHNlCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICByZXR1cm47CisjZW5kaWYKKyAgICB9CisjaWYgUExBVEZPUk0oTUFDKQorICAgIC8vIFRvIHN1
cHBvcnQgY29ycmVjdGlvbiBwYW5lbC4KKyAgICBjYXNlIERvY3VtZW50TWFya2VyQXV0b2NvcnJl
Y3Rpb25SZXBsYWNlbWVudExpbmVTdHlsZToKKyAgICBjYXNlIERvY3VtZW50TWFya2VyRGljdGF0
aW9uQWx0ZXJuYXRpdmVzTGluZVN0eWxlOiB7CisgICAgICAgIC8vIENvbnN0YW50cyBmb3Igc3Bl
bGxpbmcgcGF0dGVybiBjb2xvci4KKyAgICAgICAgc3RhdGljIGJvb2wgdXNpbmdEb3RGb3JTcGVs
bGluZyA9IGZhbHNlOworICAgICAgICBpZiAoIWNvcnJlY3Rpb25JbWFnZSkKKyAgICAgICAgICAg
IGNvcnJlY3Rpb25JbWFnZSA9IFtmaW5kSW1hZ2UoQCJOU0NvcnJlY3Rpb25Eb3QiLCBAIkNvcnJl
Y3Rpb25Eb3QiLCB1c2luZ0RvdEZvclNwZWxsaW5nKSByZXRhaW5dOworICAgICAgICB1c2luZ0Rv
dCA9IHVzaW5nRG90Rm9yU3BlbGxpbmc7CisgICAgICAgIGltYWdlID0gY29ycmVjdGlvbkltYWdl
OworICAgICAgICBmYWxsYmFja0NvbG9yID0gW05TQ29sb3IgYmx1ZUNvbG9yXTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorI2VuZGlmCisjaWYgUExBVEZPUk0oSU9TKQorICAgIGNhc2UgVGV4dENo
ZWNraW5nRGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlc0xpbmVTdHlsZTogeworICAgICAg
ICBzdGF0aWMgYm9vbCB1c2luZ0RvdEZvckRpY3RhdGlvblBocmFzZVdpdGhBbHRlcm5hdGl2ZXMg
PSBmYWxzZTsKKyAgICAgICAgc3RhdGljIENHUGF0dGVyblJlZiBkaWN0YXRpb25QaHJhc2VXaXRo
QWx0ZXJuYXRpdmVzUGF0dGVybiA9IGNyZWF0ZURvdFBhdHRlcm4odXNpbmdEb3RGb3JEaWN0YXRp
b25QaHJhc2VXaXRoQWx0ZXJuYXRpdmVzLCAiRGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZl
c0RvdCIpLmxlYWtSZWYoKTsKKyAgICAgICAgZG90UGF0dGVybiA9IGRpY3RhdGlvblBocmFzZVdp
dGhBbHRlcm5hdGl2ZXNQYXR0ZXJuOworICAgICAgICB1c2luZ0RvdCA9IHVzaW5nRG90Rm9yRGlj
dGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlczsKKyAgICAgICAgYnJlYWs7CisgICAgfQorI2Vu
ZGlmIC8vIFBMQVRGT1JNKElPUykKKyAgICBkZWZhdWx0OgorI2lmIFBMQVRGT1JNKElPUykKKyAg
ICAgICAgLy8gRklYTUU6IFNob3VsZCByZW1vdmUgZGVmYXVsdCBjYXNlIHNvIHdlIGdldCBjb21w
aWxlLXRpbWUgZXJyb3JzLgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyNlbmRpZiAv
LyBQTEFURk9STShJT1MpCisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgRmxvYXRQ
b2ludCBvZmZzZXRQb2ludCA9IHBvaW50OworCisgICAgLy8gTWFrZSBzdXJlIHRvIGRyYXcgb25s
eSBjb21wbGV0ZSBkb3RzLgorICAgIGlmICh1c2luZ0RvdCkgeworICAgICAgICAvLyBhbGxvdyBz
bGlnaHRseSBtb3JlIGNvbnNpZGVyaW5nIHRoYXQgdGhlIHBhdHRlcm4gZW5kcyB3aXRoIGEgdHJh
bnNwYXJlbnQgcGl4ZWwKKyAgICAgICAgZmxvYXQgd2lkdGhNb2QgPSBmbW9kZih3aWR0aCwgcGF0
dGVybldpZHRoKTsKKyAgICAgICAgaWYgKHBhdHRlcm5XaWR0aCAtIHdpZHRoTW9kID4gY01pc3Nw
ZWxsaW5nTGluZVBhdHRlcm5HYXBXaWR0aCkgeworICAgICAgICAgICAgZmxvYXQgZ2FwSW5jbHVk
ZVdpZHRoID0gMDsKKyAgICAgICAgICAgIGlmICh3aWR0aCA+IHBhdHRlcm5XaWR0aCkKKyAgICAg
ICAgICAgICAgICBnYXBJbmNsdWRlV2lkdGggPSBjTWlzc3BlbGxpbmdMaW5lUGF0dGVybkdhcFdp
ZHRoOworICAgICAgICAgICAgb2Zmc2V0UG9pbnQubW92ZShmbG9vcigod2lkdGhNb2QgKyBnYXBJ
bmNsdWRlV2lkdGgpIC8gMiksIDApOworICAgICAgICAgICAgd2lkdGggLT0gd2lkdGhNb2Q7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLy8gRklYTUU6IFRoaXMgY29kZSBzaG91bGQgbm90
IHVzZSBOU0dyYXBoaWNzQ29udGV4dCBjdXJyZW50Q29udGV4dAorICAgIC8vIEluIG9yZGVyIHRv
IHJlbW92ZSB0aGlzIHJlcXVpcmVtZW50IHdlIHdpbGwgbmVlZCB0byB1c2UgQ0dQYXR0ZXJuIGlu
c3RlYWQgb2YgTlNDb2xvcgorICAgIC8vIEZJWE1FOiBUaGlzIGNvZGUgc2hvdWxkIG5vdCBiZSB1
c2luZyBzZXRQYXR0ZXJuUGhhc2VJblVzZXJTcGFjZSwgYXMgdGhpcyBhcHByb2FjaCBpcyB3cm9u
ZworICAgIC8vIGZvciB0cmFuc2Zvcm1zLgorCisgICAgLy8gRHJhdyB1bmRlcmxpbmUuCisgICAg
Q0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKKyAgICBDR0NvbnRleHRT
YXZlR1N0YXRlKGNvbnRleHQpOworCisjaWYgUExBVEZPUk0oSU9TKQorICAgIFdLU2V0UGF0dGVy
bihjb250ZXh0LCBkb3RQYXR0ZXJuLCBZRVMsIFlFUyk7CisjZW5kaWYKKworICAgIHNldFBhdHRl
cm5QaGFzZUluVXNlclNwYWNlKGNvbnRleHQsIG9mZnNldFBvaW50KTsKKworICAgIENHUmVjdCBk
ZXN0aW5hdGlvblJlY3QgPSBDR1JlY3RNYWtlKG9mZnNldFBvaW50LngoKSwgb2Zmc2V0UG9pbnQu
eSgpLCB3aWR0aCwgcGF0dGVybkhlaWdodCk7CisjaWYgIVBMQVRGT1JNKElPUykKKyAgICBpZiAo
aW1hZ2UpIHsKKyAgICAgICAgLy8gRklYTUU6IFJhdGhlciB0aGFuIGdldHRpbmcgdGhlIE5TSW1h
Z2UgYW5kIHRoZW4gcGlja2luZyB0aGUgQ0dJbWFnZSBmcm9tIGl0LCB3ZSBzaG91bGQgZG8gd2hh
dCBpT1MgZG9lcyBhbmQKKyAgICAgICAgLy8ganVzdCBsb2FkIHRoZSBDR0ltYWdlIGluIHRoZSBm
aXJzdCBwbGFjZS4KKyAgICAgICAgTlNSZWN0IGRvdFJlY3QgPSBOU01ha2VSZWN0KG9mZnNldFBv
aW50LngoKSwgb2Zmc2V0UG9pbnQueSgpLCBwYXR0ZXJuV2lkdGgsIHBhdHRlcm5IZWlnaHQpOwor
ICAgICAgICBDR0ltYWdlUmVmIGNnSW1hZ2UgPSBbaW1hZ2UgQ0dJbWFnZUZvclByb3Bvc2VkUmVj
dDomZG90UmVjdCBjb250ZXh0OltOU0dyYXBoaWNzQ29udGV4dCBncmFwaGljc0NvbnRleHRXaXRo
R3JhcGhpY3NQb3J0OmNvbnRleHQgZmxpcHBlZDpZRVNdIGhpbnRzOm51bGxwdHJdOworICAgICAg
ICBDR0NvbnRleHRDbGlwVG9SZWN0KGNvbnRleHQsIGRlc3RpbmF0aW9uUmVjdCk7CisgICAgICAg
IENHQ29udGV4dERyYXdUaWxlZEltYWdlKGNvbnRleHQsIE5TUmVjdFRvQ0dSZWN0KGRvdFJlY3Qp
LCBjZ0ltYWdlKTsKKyAgICB9IGVsc2UgeworICAgICAgICBDR0NvbnRleHRTZXRGaWxsQ29sb3JX
aXRoQ29sb3IoY29udGV4dCwgW2ZhbGxiYWNrQ29sb3IgQ0dDb2xvcl0pOworICAgICAgICBDR0Nv
bnRleHRGaWxsUmVjdChjb250ZXh0LCBkZXN0aW5hdGlvblJlY3QpOworICAgIH0KKyNlbHNlCisg
ICAgV0tSZWN0RmlsbFVzaW5nT3BlcmF0aW9uKGNvbnRleHQsIGRlc3RpbmF0aW9uUmVjdCwga0NH
Q29tcG9zaXRlU292ZXIpOworI2VuZGlmCisgICAgCisgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0
ZShjb250ZXh0KTsKK30KKworQ0dDb2xvclNwYWNlUmVmIGxpbmVhclJHQkNvbG9yU3BhY2VSZWYo
KQoreworICAgIHN0YXRpYyBDR0NvbG9yU3BhY2VSZWYgbGluZWFyU1JHQlNwYWNlID0gbnVsbHB0
cjsKKworICAgIGlmIChsaW5lYXJTUkdCU3BhY2UpCisgICAgICAgIHJldHVybiBsaW5lYXJTUkdC
U3BhY2U7CisKKyAgICBSZXRhaW5QdHI8TlNTdHJpbmc+IGljY1Byb2ZpbGVQYXRoID0gW1tOU0J1
bmRsZSBidW5kbGVXaXRoSWRlbnRpZmllcjpAImNvbS5hcHBsZS5XZWJDb3JlIl0gcGF0aEZvclJl
c291cmNlOkAibGluZWFyU1JHQiIgb2ZUeXBlOkAiaWNjIl07CisgICAgUmV0YWluUHRyPE5TRGF0
YT4gaWNjUHJvZmlsZURhdGEgPSBhZG9wdE5TKFtbTlNEYXRhIGFsbG9jXSBpbml0V2l0aENvbnRl
bnRzT2ZGaWxlOmljY1Byb2ZpbGVQYXRoLmdldCgpXSk7CisKKyAgICBpZiAoaWNjUHJvZmlsZURh
dGEpCisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaAorI3ByYWdtYSBjbGFuZyBkaWFnbm9z
dGljIGlnbm9yZWQgIi1XZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMiCisgICAgICAgIGxpbmVhclNS
R0JTcGFjZSA9IENHQ29sb3JTcGFjZUNyZWF0ZVdpdGhJQ0NQcm9maWxlKChDRkRhdGFSZWYpaWNj
UHJvZmlsZURhdGEuZ2V0KCkpOworI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcAorCisgICAg
Ly8gSWYgd2UgZmFpbCB0byBsb2FkIHRoZSBsaW5lYXJpemVkIHNSR0IgSUNDIHByb2ZpbGUsIGZh
bGwgYmFjayB0byBzUkdCLgorICAgIGlmICghbGluZWFyU1JHQlNwYWNlKQorICAgICAgICByZXR1
cm4gc1JHQkNvbG9yU3BhY2VSZWYoKTsKKworICAgIHJldHVybiBsaW5lYXJTUkdCU3BhY2U7Cit9
CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29h
L1dlYkdMTGF5ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dl
YkdMTGF5ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wODU1ZDAxNDZiM2RlYjVmMjBjMDFhYmU2OTQyOGEyNWRh
ZGI4ZTY1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY29jb2EvV2ViR0xMYXllci5oCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDktMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2ltcG9y
dCA8UXVhcnR6Q29yZS9RdWFydHpDb3JlLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNz
IEdyYXBoaWNzTGF5ZXI7CitjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKK30KKworI2lmIFBMQVRG
T1JNKElPUykKK0BpbnRlcmZhY2UgV2ViR0xMYXllciA6IENBRUFHTExheWVyCisjZWxzZQorQGlu
dGVyZmFjZSBXZWJHTExheWVyIDogQ0FPcGVuR0xMYXllcgorI2VuZGlmCit7CisgICAgV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0QqIF9jb250ZXh0OworICAgIGZsb2F0IF9kZXZpY2VQaXhlbFJh
dGlvOworfQorCitAcHJvcGVydHkgKG5vbmF0b21pYykgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0QqIGNvbnRleHQ7CisKKy0gKGlkKWluaXRXaXRoR3JhcGhpY3NDb250ZXh0M0Q6KFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEKiljb250ZXh0OworCistIChDR0ltYWdlUmVmKWNvcHlJbWFnZVNu
YXBzaG90V2l0aENvbG9yU3BhY2U6KENHQ29sb3JTcGFjZVJlZiljb2xvclNwYWNlOworCitAZW5k
CisKKyNlbmRpZiAvLyBXZWJHTExheWVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYkdMTGF5ZXIubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJHTExheWVyLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIxMzY4MWZkYTRl
OGNkYmM4NDY1NTliODk5NjBlZDk0YzEyYTA3NjMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJHTExheWVyLm1tCkBAIC0wLDAgKzEs
MTg1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFdFQkdMKQorI2ltcG9ydCAiV2Vi
R0xMYXllci5oIgorCisjaW1wb3J0ICJHcmFwaGljc0NvbnRleHQzRC5oIgorI2ltcG9ydCAiR3Jh
cGhpY3NDb250ZXh0Q0cuaCIKKyNpbXBvcnQgIkdyYXBoaWNzTGF5ZXIuaCIKKyNpbXBvcnQgIkdy
YXBoaWNzTGF5ZXJDQS5oIgorI2ltcG9ydCAiUGxhdGZvcm1DQUxheWVyLmgiCisjaW1wb3J0IDx3
dGYvRmFzdE1hbGxvYy5oPgorI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgorCisjaWYgIVBMQVRG
T1JNKElPUykKKyNpbXBvcnQgPE9wZW5HTC9PcGVuR0wuaD4KKyNpbXBvcnQgPE9wZW5HTC9nbC5o
PgorI2VuZGlmCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitAaW1wbGVtZW50YXRpb24g
V2ViR0xMYXllcgorCitAc3ludGhlc2l6ZSBjb250ZXh0PV9jb250ZXh0OworCistKGlkKWluaXRX
aXRoR3JhcGhpY3NDb250ZXh0M0Q6KEdyYXBoaWNzQ29udGV4dDNEKiljb250ZXh0Cit7CisgICAg
X2NvbnRleHQgPSBjb250ZXh0OworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgX2Rldmlj
ZVBpeGVsUmF0aW8gPSBjb250ZXh0LT5nZXRDb250ZXh0QXR0cmlidXRlcygpLmRldmljZVBpeGVs
UmF0aW87CisjaWYgUExBVEZPUk0oTUFDKQorICAgIHNlbGYuY29udGVudHNTY2FsZSA9IF9kZXZp
Y2VQaXhlbFJhdGlvOworICAgIHNlbGYuY29sb3JzcGFjZSA9IHNSR0JDb2xvclNwYWNlUmVmKCk7
CisjZW5kaWYKKyAgICByZXR1cm4gc2VsZjsKK30KKworI2lmICFQTEFURk9STShJT1MpCistKENH
TFBpeGVsRm9ybWF0T2JqKWNvcHlDR0xQaXhlbEZvcm1hdEZvckRpc3BsYXlNYXNrOih1aW50MzJf
dCltYXNrCit7CisgICAgLy8gRklYTUU6IFRoZSBtYXNrIHBhcmFtIHRlbGxzIHlvdSB3aGljaCBk
aXNwbGF5IChvbiBhIG11bHRpLWRpc3BsYXkgc3lzdGVtKQorICAgIC8vIGlzIHRvIGJlIHVzZWQu
IEJ1dCBzaW5jZSB3ZSBhcmUgbm93IGdldHRpbmcgdGhlIHBpeGVsIGZvcm1hdCBmcm9tIHRoZQor
ICAgIC8vIENhbnZhcyBDR0wgY29udGV4dCwgd2UgZG9uJ3QgdXNlIGl0LiBUaGlzIHNlZW1zIHRv
IGRvIHRoZSByaWdodCB0aGluZyBvbgorICAgIC8vIG9uZSBtdWx0aS1kaXNwbGF5IHN5c3RlbS4g
QnV0IHRoZXJlIG1heSBiZSBjYXNlcyB3aGVyZSB0aGlzIGlzIG5vdCB0aGUgY2FzZS4KKyAgICAv
LyBJZiBuZWVkZWQgd2Ugd2lsbCBoYXZlIHRvIHNldCB0aGUgZGlzcGxheSBtYXNrIGluIHRoZSBD
YW52YXMgQ0dMQ29udGV4dCBhbmQKKyAgICAvLyBtYWtlIHN1cmUgaXQgbWF0Y2hlcy4KKyAgICBV
TlVTRURfUEFSQU0obWFzayk7CisgICAgcmV0dXJuIENHTFJldGFpblBpeGVsRm9ybWF0KENHTEdl
dFBpeGVsRm9ybWF0KF9jb250ZXh0LT5wbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCkpKTsKK30K
KworLShDR0xDb250ZXh0T2JqKWNvcHlDR0xDb250ZXh0Rm9yUGl4ZWxGb3JtYXQ6KENHTFBpeGVs
Rm9ybWF0T2JqKXBpeGVsRm9ybWF0Cit7CisgICAgQ0dMQ29udGV4dE9iaiBjb250ZXh0T2JqOwor
ICAgIENHTENyZWF0ZUNvbnRleHQocGl4ZWxGb3JtYXQsIF9jb250ZXh0LT5wbGF0Zm9ybUdyYXBo
aWNzQ29udGV4dDNEKCksICZjb250ZXh0T2JqKTsKKyAgICByZXR1cm4gY29udGV4dE9iajsKK30K
KworLSh2b2lkKWRyYXdJbkNHTENvbnRleHQ6KENHTENvbnRleHRPYmopZ2xDb250ZXh0IHBpeGVs
Rm9ybWF0OihDR0xQaXhlbEZvcm1hdE9iailwaXhlbEZvcm1hdCBmb3JMYXllclRpbWU6KENGVGlt
ZUludGVydmFsKXRpbWVJbnRlcnZhbCBkaXNwbGF5VGltZTooY29uc3QgQ1ZUaW1lU3RhbXAgKil0
aW1lU3RhbXAKK3sKKyAgICBpZiAoIV9jb250ZXh0KQorICAgICAgICByZXR1cm47CisKKyAgICBf
Y29udGV4dC0+cHJlcGFyZVRleHR1cmUoKTsKKworICAgIENHTFNldEN1cnJlbnRDb250ZXh0KGds
Q29udGV4dCk7CisKKyAgICBDR1JlY3QgZnJhbWUgPSBbc2VsZiBmcmFtZV07CisgICAgZnJhbWUu
c2l6ZS53aWR0aCAqPSBfZGV2aWNlUGl4ZWxSYXRpbzsKKyAgICBmcmFtZS5zaXplLmhlaWdodCAq
PSBfZGV2aWNlUGl4ZWxSYXRpbzsKKworICAgIC8vIGRyYXcgdGhlIEZCTyBpbnRvIHRoZSBsYXll
cgorICAgIGdsVmlld3BvcnQoMCwgMCwgZnJhbWUuc2l6ZS53aWR0aCwgZnJhbWUuc2l6ZS5oZWln
aHQpOworICAgIGdsTWF0cml4TW9kZShHTF9QUk9KRUNUSU9OKTsKKyAgICBnbExvYWRJZGVudGl0
eSgpOworICAgIGdsT3J0aG8oLTEsIDEsIC0xLCAxLCAtMSwgMSk7CisgICAgZ2xNYXRyaXhNb2Rl
KEdMX01PREVMVklFVyk7CisgICAgZ2xMb2FkSWRlbnRpdHkoKTsKKworICAgIGdsRW5hYmxlKEdM
X1RFWFRVUkVfMkQpOworICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgX2NvbnRleHQt
PnBsYXRmb3JtVGV4dHVyZSgpKTsKKworICAgIGdsQmVnaW4oR0xfVFJJQU5HTEVfRkFOKTsKKyAg
ICAgICAgZ2xUZXhDb29yZDJmKDAsIDApOworICAgICAgICBnbFZlcnRleDJmKC0xLCAtMSk7Cisg
ICAgICAgIGdsVGV4Q29vcmQyZigxLCAwKTsKKyAgICAgICAgZ2xWZXJ0ZXgyZigxLCAtMSk7Cisg
ICAgICAgIGdsVGV4Q29vcmQyZigxLCAxKTsKKyAgICAgICAgZ2xWZXJ0ZXgyZigxLCAxKTsKKyAg
ICAgICAgZ2xUZXhDb29yZDJmKDAsIDEpOworICAgICAgICBnbFZlcnRleDJmKC0xLCAxKTsKKyAg
ICBnbEVuZCgpOworCisgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCAwKTsKKyAgICBn
bERpc2FibGUoR0xfVEVYVFVSRV8yRCk7CisKKyAgICAvLyBDYWxsIHN1cGVyIHRvIGZpbmFsaXpl
IHRoZSBkcmF3aW5nLiBCeSBkZWZhdWx0IGFsbCBpdCBkb2VzIGlzIGNhbGwgZ2xGbHVzaCgpLgor
ICAgIFtzdXBlciBkcmF3SW5DR0xDb250ZXh0OmdsQ29udGV4dCBwaXhlbEZvcm1hdDpwaXhlbEZv
cm1hdCBmb3JMYXllclRpbWU6dGltZUludGVydmFsIGRpc3BsYXlUaW1lOnRpbWVTdGFtcF07Cit9
CisKK3N0YXRpYyB2b2lkIGZyZWVEYXRhKHZvaWQgKiwgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90
IC8qIHNpemUgKi8pCit7CisgICAgZmFzdEZyZWUoY29uc3RfY2FzdDx2b2lkICo+KGRhdGEpKTsK
K30KKyNlbmRpZgorCistKENHSW1hZ2VSZWYpY29weUltYWdlU25hcHNob3RXaXRoQ29sb3JTcGFj
ZTooQ0dDb2xvclNwYWNlUmVmKWNvbG9yU3BhY2UKK3sKKyAgICBpZiAoIV9jb250ZXh0KQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKworI2lmIFBMQVRGT1JNKElPUykKKyAgICBVTlVTRURfUEFS
QU0oY29sb3JTcGFjZSk7CisgICAgcmV0dXJuIG51bGxwdHI7CisjZWxzZQorICAgIENHTFNldEN1
cnJlbnRDb250ZXh0KF9jb250ZXh0LT5wbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCkpOworCisg
ICAgUmV0YWluUHRyPENHQ29sb3JTcGFjZVJlZj4gaW1hZ2VDb2xvclNwYWNlID0gY29sb3JTcGFj
ZTsKKyAgICBpZiAoIWltYWdlQ29sb3JTcGFjZSkKKyAgICAgICAgaW1hZ2VDb2xvclNwYWNlID0g
c1JHQkNvbG9yU3BhY2VSZWYoKTsKKworICAgIENHUmVjdCBsYXllckJvdW5kcyA9IENHUmVjdElu
dGVncmFsKFtzZWxmIGJvdW5kc10pOworCisgICAgc2l6ZV90IHdpZHRoID0gbGF5ZXJCb3VuZHMu
c2l6ZS53aWR0aCAqIF9kZXZpY2VQaXhlbFJhdGlvOworICAgIHNpemVfdCBoZWlnaHQgPSBsYXll
ckJvdW5kcy5zaXplLmhlaWdodCAqIF9kZXZpY2VQaXhlbFJhdGlvOworCisgICAgc2l6ZV90IHJv
d0J5dGVzID0gKHdpZHRoICogNCArIDE1KSAmIH4xNTsKKyAgICBzaXplX3QgZGF0YVNpemUgPSBy
b3dCeXRlcyAqIGhlaWdodDsKKyAgICB2b2lkKiBkYXRhID0gZmFzdE1hbGxvYyhkYXRhU2l6ZSk7
CisgICAgaWYgKCFkYXRhKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGdsUGl4ZWxT
dG9yZWkoR0xfUEFDS19ST1dfTEVOR1RILCByb3dCeXRlcyAvIDQpOworICAgIGdsUmVhZFBpeGVs
cygwLCAwLCB3aWR0aCwgaGVpZ2h0LCBHTF9CR1JBLCBHTF9VTlNJR05FRF9JTlRfOF84XzhfOF9S
RVYsIGRhdGEpOworCisgICAgQ0dEYXRhUHJvdmlkZXJSZWYgcHJvdmlkZXIgPSBDR0RhdGFQcm92
aWRlckNyZWF0ZVdpdGhEYXRhKDAsIGRhdGEsIGRhdGFTaXplLCBmcmVlRGF0YSk7CisgICAgQ0dJ
bWFnZVJlZiBpbWFnZSA9IENHSW1hZ2VDcmVhdGUod2lkdGgsIGhlaWdodCwgOCwgMzIsIHJvd0J5
dGVzLCBpbWFnZUNvbG9yU3BhY2UuZ2V0KCksCisgICAgICAgIGtDR0ltYWdlQWxwaGFQcmVtdWx0
aXBsaWVkRmlyc3QgfCBrQ0dCaXRtYXBCeXRlT3JkZXIzMkhvc3QsIHByb3ZpZGVyLCAwLCB0cnVl
LCBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0KTsKKyAgICBDR0RhdGFQcm92aWRlclJlbGVhc2Uo
cHJvdmlkZXIpOworICAgIHJldHVybiBpbWFnZTsKKyNlbmRpZgorfQorCistICh2b2lkKWRpc3Bs
YXkKK3sKKyAgICBpZiAoIV9jb250ZXh0KQorICAgICAgICByZXR1cm47CisKKyNpZiBQTEFURk9S
TShJT1MpCisgICAgX2NvbnRleHQtPmVuZFBhaW50KCk7CisjZWxzZQorICAgIFtzdXBlciBkaXNw
bGF5XTsKKyNlbmRpZgorICAgIF9jb250ZXh0LT5tYXJrTGF5ZXJDb21wb3NpdGVkKCk7CisgICAg
UGxhdGZvcm1DQUxheWVyKiBsYXllciA9IFBsYXRmb3JtQ0FMYXllcjo6cGxhdGZvcm1DQUxheWVy
KHNlbGYpOworICAgIGlmIChsYXllciAmJiBsYXllci0+b3duZXIoKSkKKyAgICAgICAgbGF5ZXIt
Pm93bmVyKCktPnBsYXRmb3JtQ0FMYXllckxheWVyRGlkRGlzcGxheShsYXllcik7Cit9CisKK0Bl
bmQKKworI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHQzRE1hYy5tbSBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHQzRE1hYy5tbQpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjJjMWU0OWQyMjFmYTQ3ZTBmZDJkM2Q1NGQ4OTc2
M2Y5MjdkMjljOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0M0RN
YWMubW0KKysrIC9kZXYvbnVsbApAQCAtMSw3MTQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBF
TkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF8zRCkKLQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNE
LmgiCi0jaWYgUExBVEZPUk0oSU9TKQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNESU9TLmgi
Ci0jZW5kaWYKLQotI2ltcG9ydCA8d3RmL0Jsb2NrT2JqQ0V4Y2VwdGlvbnMuaD4KLQotI2luY2x1
ZGUgIkNhbnZhc1JlbmRlcmluZ0NvbnRleHQuaCIKLSNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dC
aXRtYXBDb250ZXh0Lmg+Ci0jaW5jbHVkZSAiRXh0ZW5zaW9uczNET3BlbkdMLmgiCi0jaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSFRNTENhbnZhc0VsZW1lbnQuaCIKLSNp
bmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJX
ZWJHTExheWVyLmgiCi0jaW5jbHVkZSAiV2ViR0xPYmplY3QuaCIKLSNpbmNsdWRlICJXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlLmgiCi0jaW5jbHVkZSA8c3lzL3N5c2N0bC5oPgotI2luY2x1ZGUg
PHN5c2V4aXRzLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi0jaWYgUExBVEZP
Uk0oSU9TKQotI2ltcG9ydCAiT3BlbkdMRVNTUEkuaCIKLSNpbXBvcnQgPE9wZW5HTEVTL0VTMi9n
bGV4dC5oPgotI2ltcG9ydCA8T3BlbkdMRVMvRUFHTC5oPgotI2ltcG9ydCA8T3BlbkdMRVMvRUFH
TERyYXdhYmxlLmg+Ci0jaW1wb3J0IDxRdWFydHpDb3JlL1F1YXJ0ekNvcmUuaD4KLSNlbHNlCi0j
aW5jbHVkZSA8SU9LaXQvSU9LaXRMaWIuaD4KLSNpbmNsdWRlIDxPcGVuR0wvQ0dMUmVuZGVyZXJz
Lmg+Ci0jaW5jbHVkZSA8T3BlbkdML2dsLmg+Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgc3RhdHVzQ2hlY2tUaHJlc2hvbGQgPSA1OwotCi0j
aWYgUExBVEZPUk0oTUFDKQotCi1lbnVtIHsKLSAgICBrQUdDT3BlbiwKLSAgICBrQUdDQ2xvc2UK
LX07Ci0KLXN0YXRpYyBpb19jb25uZWN0X3QgYXR0YWNoVG9BcHBsZUdyYXBoaWNzQ29udHJvbCgp
Ci17Ci0gICAgbWFjaF9wb3J0X3QgbWFzdGVyUG9ydDsKLQotICAgIGlmIChJT01hc3RlclBvcnQo
TUFDSF9QT1JUX05VTEwsICZtYXN0ZXJQb3J0KSAhPSBLRVJOX1NVQ0NFU1MpCi0gICAgICAgIHJl
dHVybiBNQUNIX1BPUlRfTlVMTDsKLQotICAgIENGRGljdGlvbmFyeVJlZiBjbGFzc1RvTWF0Y2gg
PSBJT1NlcnZpY2VNYXRjaGluZygiQXBwbGVHcmFwaGljc0NvbnRyb2wiKTsKLSAgICBpZiAoIWNs
YXNzVG9NYXRjaCkKLSAgICAgICAgcmV0dXJuIE1BQ0hfUE9SVF9OVUxMOwotCi0gICAga2Vybl9y
ZXR1cm5fdCBrZXJuUmVzdWx0OwotICAgIGlvX2l0ZXJhdG9yX3QgaXRlcmF0b3I7Ci0gICAgaWYg
KChrZXJuUmVzdWx0ID0gSU9TZXJ2aWNlR2V0TWF0Y2hpbmdTZXJ2aWNlcyhtYXN0ZXJQb3J0LCBj
bGFzc1RvTWF0Y2gsICZpdGVyYXRvcikpICE9IEtFUk5fU1VDQ0VTUykKLSAgICAgICAgcmV0dXJu
IE1BQ0hfUE9SVF9OVUxMOwotCi0gICAgaW9fc2VydmljZV90IHNlcnZpY2VPYmplY3QgPSBJT0l0
ZXJhdG9yTmV4dChpdGVyYXRvcik7Ci0gICAgSU9PYmplY3RSZWxlYXNlKGl0ZXJhdG9yKTsKLSAg
ICBpZiAoIXNlcnZpY2VPYmplY3QpCi0gICAgICAgIHJldHVybiBNQUNIX1BPUlRfTlVMTDsKLQot
ICAgIGlvX2Nvbm5lY3RfdCBkYXRhUG9ydDsKLSAgICBJT09iamVjdFJldGFpbihzZXJ2aWNlT2Jq
ZWN0KTsKLSAgICBrZXJuUmVzdWx0ID0gSU9TZXJ2aWNlT3BlbihzZXJ2aWNlT2JqZWN0LCBtYWNo
X3Rhc2tfc2VsZigpLCAwLCAmZGF0YVBvcnQpOwotICAgIElPT2JqZWN0UmVsZWFzZShzZXJ2aWNl
T2JqZWN0KTsKLQotICAgIHJldHVybiAoa2VyblJlc3VsdCA9PSBLRVJOX1NVQ0NFU1MpID8gZGF0
YVBvcnQgOiBNQUNIX1BPUlRfTlVMTDsKLX0KLQotc3RhdGljIGJvb2wgaGFzTXV4Q2FwYWJpbGl0
eSgpCi17Ci0gICAgaW9fY29ubmVjdF90IGRhdGFQb3J0ID0gYXR0YWNoVG9BcHBsZUdyYXBoaWNz
Q29udHJvbCgpOwotCi0gICAgaWYgKGRhdGFQb3J0ID09IE1BQ0hfUE9SVF9OVUxMKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBib29sIHJlc3VsdDsKLSAgICBpZiAoSU9Db25uZWN0Q2Fs
bFNjYWxhck1ldGhvZChkYXRhUG9ydCwga0FHQ09wZW4sIG51bGxwdHIsIDAsIG51bGxwdHIsIG51
bGxwdHIpID09IEtFUk5fU1VDQ0VTUykgewotICAgICAgICBJT0Nvbm5lY3RDYWxsU2NhbGFyTWV0
aG9kKGRhdGFQb3J0LCBrQUdDQ2xvc2UsIG51bGxwdHIsIDAsIG51bGxwdHIsIG51bGxwdHIpOwot
ICAgICAgICByZXN1bHQgPSB0cnVlOwotICAgIH0gZWxzZQotICAgICAgICByZXN1bHQgPSBmYWxz
ZTsKLQotICAgIElPU2VydmljZUNsb3NlKGRhdGFQb3J0KTsKLQotICAgIGlmIChyZXN1bHQpIHsK
LSAgICAgICAgLy8gVGhpcyBpcyBkZXRlY3RpbmcgTWFjIGhhcmR3YXJlIHdpdGggYW4gSW50ZWwg
ZzU3NSBHUFUsIHdoaWNoCi0gICAgICAgIC8vIHdlIGRvbid0IHdhbnQgdG8gbWFrZSBhdmFpbGFi
bGUgdG8gbXV4aW5nLgotICAgICAgICAvLyBCYXNlZCBvbiBpbmZvcm1hdGlvbiBmcm9tIEFwcGxl
J3MgT3BlbkdMIHRlYW0sIHN1Y2ggZGV2aWNlcwotICAgICAgICAvLyBoYXZlIGZvdXIgb3IgZmV3
ZXIgcHJvY2Vzc29ycy4KLSAgICAgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzMwMDYwMzc4PgotICAg
ICAgICBpbnQgbmFtZXNbMl0gPSB7IENUTF9IVywgSFdfTkNQVSB9OwotICAgICAgICBpbnQgY3B1
Q291bnQ7Ci0gICAgICAgIHNpemVfdCBjcHVDb3VudExlbmd0aCA9IHNpemVvZihjcHVDb3VudCk7
Ci0gICAgICAgIHN5c2N0bChuYW1lcywgMiwgJmNwdUNvdW50LCAmY3B1Q291bnRMZW5ndGgsIG51
bGxwdHIsIDApOwotICAgICAgICByZXN1bHQgPSBjcHVDb3VudCA+IDQ7Ci0gICAgfQotICAgIAot
ICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBib29sIGhhc011eGFibGVHUFUoKQotewot
ICAgIHN0YXRpYyBib29sIGNhbk11eCA9IGhhc011eENhcGFiaWxpdHkoKTsKLSAgICByZXR1cm4g
Y2FuTXV4OwotfQotCi0jZW5kaWYKLQotY29uc3QgdW5zaWduZWQgTWF4Q29udGV4dHMgPSAxNjsK
LQotY2xhc3MgR3JhcGhpY3NDb250ZXh0M0RNYW5hZ2VyIHsKLXB1YmxpYzoKLSAgICBHcmFwaGlj
c0NvbnRleHQzRE1hbmFnZXIoKQotICAgICAgICA6IG1fZGlzYWJsZUhpZ2hQZXJmb3JtYW5jZUdQ
VVRpbWVyKCp0aGlzLCAmR3JhcGhpY3NDb250ZXh0M0RNYW5hZ2VyOjpkaXNhYmxlSGlnaFBlcmZv
cm1hbmNlR1BVVGltZXJGaXJlZCkKLSAgICB7Ci0gICAgfQotCi0gICAgdm9pZCBhZGRDb250ZXh0
KEdyYXBoaWNzQ29udGV4dDNEKik7Ci0gICAgdm9pZCByZW1vdmVDb250ZXh0KEdyYXBoaWNzQ29u
dGV4dDNEKik7Ci0KLSAgICB2b2lkIGFkZENvbnRleHRSZXF1aXJpbmdIaWdoUGVyZm9ybWFuY2Uo
R3JhcGhpY3NDb250ZXh0M0QqKTsKLSAgICB2b2lkIHJlbW92ZUNvbnRleHRSZXF1aXJpbmdIaWdo
UGVyZm9ybWFuY2UoR3JhcGhpY3NDb250ZXh0M0QqKTsKLQotICAgIHZvaWQgcmVjeWNsZUNvbnRl
eHRJZk5lY2Vzc2FyeSgpOwotICAgIGJvb2wgaGFzVG9vTWFueUNvbnRleHRzKCkgY29uc3QgeyBy
ZXR1cm4gbV9jb250ZXh0cy5zaXplKCkgPj0gTWF4Q29udGV4dHM7IH0KLQotICAgIHZvaWQgdXBk
YXRlQWxsQ29udGV4dHMoKTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIHVwZGF0ZUhpZ2hQZXJmb3Jt
YW5jZVN0YXRlKCk7Ci0gICAgdm9pZCBkaXNhYmxlSGlnaFBlcmZvcm1hbmNlR1BVVGltZXJGaXJl
ZCgpOwotCi0gICAgVmVjdG9yPEdyYXBoaWNzQ29udGV4dDNEKj4gbV9jb250ZXh0czsKLSAgICBI
YXNoU2V0PEdyYXBoaWNzQ29udGV4dDNEKj4gbV9jb250ZXh0c1JlcXVpcmluZ0hpZ2hQZXJmb3Jt
YW5jZTsKLQotICAgIFRpbWVyIG1fZGlzYWJsZUhpZ2hQZXJmb3JtYW5jZUdQVVRpbWVyOwotCi0j
aWYgUExBVEZPUk0oTUFDKQotICAgIENHTFBpeGVsRm9ybWF0T2JqIG1fcGl4ZWxGb3JtYXRPYmog
eyBudWxscHRyIH07Ci0jZW5kaWYKLX07Ci0KLXN0YXRpYyBHcmFwaGljc0NvbnRleHQzRE1hbmFn
ZXImIG1hbmFnZXIoKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxHcmFwaGljc0NvbnRl
eHQzRE1hbmFnZXI+IHNfbWFuYWdlcjsKLSAgICByZXR1cm4gc19tYW5hZ2VyOwotfQotCi0jaWYg
UExBVEZPUk0oTUFDKQotc3RhdGljIHZvaWQgZGlzcGxheVdhc1JlY29uZmlndXJlZChDR0RpcmVj
dERpc3BsYXlJRCwgQ0dEaXNwbGF5Q2hhbmdlU3VtbWFyeUZsYWdzIGZsYWdzLCB2b2lkKikKLXsK
LSAgICBpZiAoZmxhZ3MgJiBrQ0dEaXNwbGF5U2V0TW9kZUZsYWcpCi0gICAgICAgIG1hbmFnZXIo
KS51cGRhdGVBbGxDb250ZXh0cygpOwotfQotI2VuZGlmCi0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0RNYW5hZ2VyOjp1cGRhdGVBbGxDb250ZXh0cygpCi17Ci0jaWYgUExBVEZPUk0oTUFDKQotICAg
IGZvciAoYXV0byogY29udGV4dCA6IG1fY29udGV4dHMpIHsKLSAgICAgICAgY29udGV4dC0+dXBk
YXRlQ0dMQ29udGV4dCgpOwotICAgICAgICBjb250ZXh0LT5kaXNwYXRjaENvbnRleHRDaGFuZ2Vk
Tm90aWZpY2F0aW9uKCk7Ci0gICAgfQotI2VuZGlmCi19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0RNYW5hZ2VyOjphZGRDb250ZXh0KEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQotewotICAg
IEFTU0VSVChjb250ZXh0KTsKLSAgICBpZiAoIWNvbnRleHQpCi0gICAgICAgIHJldHVybjsKLQot
I2lmIFBMQVRGT1JNKE1BQykKLSAgICBpZiAoIW1fY29udGV4dHMuc2l6ZSgpKQotICAgICAgICBD
R0Rpc3BsYXlSZWdpc3RlclJlY29uZmlndXJhdGlvbkNhbGxiYWNrKGRpc3BsYXlXYXNSZWNvbmZp
Z3VyZWQsIG51bGxwdHIpOwotI2VuZGlmCi0KLSAgICBBU1NFUlQoIW1fY29udGV4dHMuY29udGFp
bnMoY29udGV4dCkpOwotICAgIG1fY29udGV4dHMuYXBwZW5kKGNvbnRleHQpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDNETWFuYWdlcjo6cmVtb3ZlQ29udGV4dChHcmFwaGljc0NvbnRleHQz
RCogY29udGV4dCkKLXsKLSAgICBBU1NFUlQobV9jb250ZXh0cy5jb250YWlucyhjb250ZXh0KSk7
Ci0gICAgbV9jb250ZXh0cy5yZW1vdmVGaXJzdChjb250ZXh0KTsKLSAgICByZW1vdmVDb250ZXh0
UmVxdWlyaW5nSGlnaFBlcmZvcm1hbmNlKGNvbnRleHQpOwotCi0jaWYgUExBVEZPUk0oTUFDKQot
ICAgIGlmICghbV9jb250ZXh0cy5zaXplKCkpCi0gICAgICAgIENHRGlzcGxheVJlbW92ZVJlY29u
ZmlndXJhdGlvbkNhbGxiYWNrKGRpc3BsYXlXYXNSZWNvbmZpZ3VyZWQsIG51bGxwdHIpOwotI2Vu
ZGlmCi19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RNYW5hZ2VyOjphZGRDb250ZXh0UmVxdWly
aW5nSGlnaFBlcmZvcm1hbmNlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQotewotICAgIEFT
U0VSVChjb250ZXh0KTsKLSAgICBpZiAoIWNvbnRleHQpCi0gICAgICAgIHJldHVybjsKLQotICAg
IEFTU0VSVChtX2NvbnRleHRzLmNvbnRhaW5zKGNvbnRleHQpKTsKLSAgICBBU1NFUlQoIW1fY29u
dGV4dHNSZXF1aXJpbmdIaWdoUGVyZm9ybWFuY2UuY29udGFpbnMoY29udGV4dCkpOwotCi0gICAg
TE9HKFdlYkdMLCAiVGhpcyBjb250ZXh0ICglcCkgcmVxdWlyZXMgdGhlIGhpZ2gtcGVyZm9ybWFu
Y2UgR1BVLiIsIGNvbnRleHQpOwotICAgIG1fY29udGV4dHNSZXF1aXJpbmdIaWdoUGVyZm9ybWFu
Y2UuYWRkKGNvbnRleHQpOwotCi0gICAgdXBkYXRlSGlnaFBlcmZvcm1hbmNlU3RhdGUoKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQzRE1hbmFnZXI6OnJlbW92ZUNvbnRleHRSZXF1aXJpbmdI
aWdoUGVyZm9ybWFuY2UoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCi17Ci0gICAgaWYgKCFt
X2NvbnRleHRzUmVxdWlyaW5nSGlnaFBlcmZvcm1hbmNlLmNvbnRhaW5zKGNvbnRleHQpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBMT0coV2ViR0wsICJUaGlzIGNvbnRleHQgKCVwKSBubyBsb25n
ZXIgcmVxdWlyZXMgdGhlIGhpZ2gtcGVyZm9ybWFuY2UgR1BVLiIsIGNvbnRleHQpOwotICAgIG1f
Y29udGV4dHNSZXF1aXJpbmdIaWdoUGVyZm9ybWFuY2UucmVtb3ZlKGNvbnRleHQpOwotCi0gICAg
dXBkYXRlSGlnaFBlcmZvcm1hbmNlU3RhdGUoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQz
RE1hbmFnZXI6OnVwZGF0ZUhpZ2hQZXJmb3JtYW5jZVN0YXRlKCkKLXsKLSNpZiBQTEFURk9STShN
QUMpCi0gICAgaWYgKCFoYXNNdXhhYmxlR1BVKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
IChtX2NvbnRleHRzUmVxdWlyaW5nSGlnaFBlcmZvcm1hbmNlLnNpemUoKSkgewotCi0gICAgICAg
IGlmIChtX2Rpc2FibGVIaWdoUGVyZm9ybWFuY2VHUFVUaW1lci5pc0FjdGl2ZSgpKSB7Ci0gICAg
ICAgICAgICBMT0coV2ViR0wsICJDYW5jZWwgcGVuZGluZyB0aW1lciBmb3IgdHVybmluZyBvZmYg
aGlnaC1wZXJmb3JtYW5jZSBHUFUuIik7Ci0gICAgICAgICAgICBtX2Rpc2FibGVIaWdoUGVyZm9y
bWFuY2VHUFVUaW1lci5zdG9wKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIW1fcGl4ZWxG
b3JtYXRPYmopIHsKLSAgICAgICAgICAgIExPRyhXZWJHTCwgIlR1cm5pbmcgb24gaGlnaC1wZXJm
b3JtYW5jZSBHUFUuIik7Ci0KLSAgICAgICAgICAgIENHTFBpeGVsRm9ybWF0QXR0cmlidXRlIGF0
dHJpYnV0ZXNbXSA9IHsga0NHTFBGQUFjY2VsZXJhdGVkLCBrQ0dMUEZBQ29sb3JTaXplLCBzdGF0
aWNfY2FzdDxDR0xQaXhlbEZvcm1hdEF0dHJpYnV0ZT4oMzIpLCBzdGF0aWNfY2FzdDxDR0xQaXhl
bEZvcm1hdEF0dHJpYnV0ZT4oMCkgfTsKLSAgICAgICAgICAgIEdMaW50IG51bVBpeGVsRm9ybWF0
cyA9IDA7Ci0gICAgICAgICAgICBDR0xDaG9vc2VQaXhlbEZvcm1hdChhdHRyaWJ1dGVzLCAmbV9w
aXhlbEZvcm1hdE9iaiwgJm51bVBpeGVsRm9ybWF0cyk7Ci0gICAgICAgIH0KLQotICAgIH0gZWxz
ZSBpZiAobV9waXhlbEZvcm1hdE9iaikgewotICAgICAgICAvLyBEb24ndCBpbW1lZGlhdGVseSB0
dXJuIG9mZiB0aGUgaGlnaC1wZXJmb3JtYW5jZSBHUFUuIFRoZSB1c2VyIG1pZ2h0IGJlCi0gICAg
ICAgIC8vIHN3YXBwaW5nIGJhY2sgYW5kIGZvcnRoIGJldHdlZW4gdGFicyBvciB3aW5kb3dzLCBh
bmQgd2UgZG9uJ3Qgd2FudCB0byBjYXVzZQotICAgICAgICAvLyBjaHVybiBpZiB3ZSBjYW4gYXZv
aWQgaXQuCi0gICAgICAgIGlmICghbV9kaXNhYmxlSGlnaFBlcmZvcm1hbmNlR1BVVGltZXIuaXNB
Y3RpdmUoKSkgewotICAgICAgICAgICAgTE9HKFdlYkdMLCAiU2V0IGEgdGltZXIgdG8gdHVybiBv
ZmYgaGlnaC1wZXJmb3JtYW5jZSBHUFUuIik7Ci0gICAgICAgICAgICAvLyBGSVhNRTogRXhwb3Nl
IHRoaXMgdmFsdWUgYXMgYSBTZXR0aW5nLCB3aGljaCB3b3VsZCByZXF1aXJlIHRoaXMgY2xhc3MK
LSAgICAgICAgICAgIC8vIHRvIHJlZmVyZW5jZSBhIGZyYW1lLCBwYWdlIG9yIGRvY3VtZW50Lgot
ICAgICAgICAgICAgc3RhdGljIGNvbnN0IFNlY29uZHMgdGltZVRvS2VlcEhpZ2hQZXJmb3JtYW5j
ZUdQVUFsaXZlIHsgMTBfcyB9OwotICAgICAgICAgICAgbV9kaXNhYmxlSGlnaFBlcmZvcm1hbmNl
R1BVVGltZXIuc3RhcnRPbmVTaG90KHRpbWVUb0tlZXBIaWdoUGVyZm9ybWFuY2VHUFVBbGl2ZSk7
Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRE1h
bmFnZXI6OmRpc2FibGVIaWdoUGVyZm9ybWFuY2VHUFVUaW1lckZpcmVkKCkKLXsKLSNpZiBQTEFU
Rk9STShNQUMpCi0gICAgaWYgKCFtX2NvbnRleHRzUmVxdWlyaW5nSGlnaFBlcmZvcm1hbmNlLnNp
emUoKSAmJiBtX3BpeGVsRm9ybWF0T2JqKSB7Ci0gICAgICAgIExPRyhXZWJHTCwgIlR1cm5pbmcg
b2ZmIGhpZ2gtcGVyZm9ybWFuY2UgR1BVLiIpOwotICAgICAgICBDR0xSZWxlYXNlUGl4ZWxGb3Jt
YXQobV9waXhlbEZvcm1hdE9iaik7Ci0gICAgICAgIG1fcGl4ZWxGb3JtYXRPYmogPSBudWxscHRy
OwotICAgIH0KLSNlbmRpZgotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNETWFuYWdlcjo6cmVj
eWNsZUNvbnRleHRJZk5lY2Vzc2FyeSgpCi17Ci0gICAgaWYgKGhhc1Rvb01hbnlDb250ZXh0cygp
KSB7Ci0gICAgICAgIExPRyhXZWJHTCwgIk1hbmFnZXIgcmVjeWNsZWQgY29udGV4dCAoJXApLiIs
IG1fY29udGV4dHMuYXQoMCkpOwotICAgICAgICBtX2NvbnRleHRzLmF0KDApLT5yZWN5Y2xlQ29u
dGV4dCgpOwotICAgIH0KLX0KLQotLy8gRklYTUU6IFRoaXMgY2xhc3MgaXMgY3VycmVudGx5IGVt
cHR5IG9uIE1hYywgYnV0IHdpbGwgZ2V0IHBvcHVsYXRlZCBhcwotLy8gdGhlIHJlc3RydWN0dXJp
bmcgaW4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY2OTAzIGlzIGRv
bmUKLWNsYXNzIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZSB7Ci1wdWJsaWM6Ci0gICAgR3JhcGhp
Y3NDb250ZXh0M0RQcml2YXRlKEdyYXBoaWNzQ29udGV4dDNEKikgeyB9Ci0gICAgCi0gICAgfkdy
YXBoaWNzQ29udGV4dDNEUHJpdmF0ZSgpIHsgfQotfTsKLQotI2lmIFBMQVRGT1JNKE1BQykKLQot
c3RhdGljIHZvaWQgc2V0UGl4ZWxGb3JtYXQoVmVjdG9yPENHTFBpeGVsRm9ybWF0QXR0cmlidXRl
PiYgYXR0cmlicywgaW50IGNvbG9yQml0cywgaW50IGRlcHRoQml0cywgYm9vbCBhY2NlbGVyYXRl
ZCwgYm9vbCBzdXBlcnNhbXBsZSwgYm9vbCBjbG9zZXN0LCBib29sIGFudGlhbGlhcywgYm9vbCB1
c2VHTEVTMykKLXsKLSAgICBhdHRyaWJzLmNsZWFyKCk7Ci0gICAgCi0gICAgYXR0cmlicy5hcHBl
bmQoa0NHTFBGQUNvbG9yU2l6ZSk7Ci0gICAgYXR0cmlicy5hcHBlbmQoc3RhdGljX2Nhc3Q8Q0dM
UGl4ZWxGb3JtYXRBdHRyaWJ1dGU+KGNvbG9yQml0cykpOwotICAgIGF0dHJpYnMuYXBwZW5kKGtD
R0xQRkFEZXB0aFNpemUpOwotICAgIGF0dHJpYnMuYXBwZW5kKHN0YXRpY19jYXN0PENHTFBpeGVs
Rm9ybWF0QXR0cmlidXRlPihkZXB0aEJpdHMpKTsKLQotICAgIC8vIFRoaXMgYXR0cmlidXRlLCB3
aGlsZSBtZW50aW9uaW5nIG9mZmxpbmUgcmVuZGVyZXJzLCBpcyBhY3R1YWxseQotICAgIC8vIGFs
bG93aW5nIHVzIHRvIHJlcXVlc3QgdGhlIGludGVncmF0ZWQgZ3JhcGhpY3Mgb24gYSBkdWFsIEdQ
VQotICAgIC8vIHN5c3RlbSwgYW5kIG5vdCBmb3JjZSB0aGUgZGlzY3JldGUgR1BVLgotICAgIC8v
IFNlZSBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vbGlicmFyeS9tYWMvdGVjaG5vdGVzL3Ru
MjIyOS9faW5kZXguaHRtbAotICAgIGlmIChoYXNNdXhhYmxlR1BVKCkpCi0gICAgICAgIGF0dHJp
YnMuYXBwZW5kKGtDR0xQRkFBbGxvd09mZmxpbmVSZW5kZXJlcnMpOwotCi0gICAgaWYgKGFjY2Vs
ZXJhdGVkKQotICAgICAgICBhdHRyaWJzLmFwcGVuZChrQ0dMUEZBQWNjZWxlcmF0ZWQpOwotICAg
IGVsc2UgewotICAgICAgICBhdHRyaWJzLmFwcGVuZChrQ0dMUEZBUmVuZGVyZXJJRCk7Ci0gICAg
ICAgIGF0dHJpYnMuYXBwZW5kKHN0YXRpY19jYXN0PENHTFBpeGVsRm9ybWF0QXR0cmlidXRlPihr
Q0dMUmVuZGVyZXJHZW5lcmljRmxvYXRJRCkpOwotICAgIH0KLSAgICAgICAgCi0gICAgaWYgKHN1
cGVyc2FtcGxlICYmICFhbnRpYWxpYXMpCi0gICAgICAgIGF0dHJpYnMuYXBwZW5kKGtDR0xQRkFT
dXBlcnNhbXBsZSk7Ci0gICAgICAgIAotICAgIGlmIChjbG9zZXN0KQotICAgICAgICBhdHRyaWJz
LmFwcGVuZChrQ0dMUEZBQ2xvc2VzdFBvbGljeSk7Ci0KLSAgICBpZiAoYW50aWFsaWFzKSB7Ci0g
ICAgICAgIGF0dHJpYnMuYXBwZW5kKGtDR0xQRkFNdWx0aXNhbXBsZSk7Ci0gICAgICAgIGF0dHJp
YnMuYXBwZW5kKGtDR0xQRkFTYW1wbGVCdWZmZXJzKTsKLSAgICAgICAgYXR0cmlicy5hcHBlbmQo
c3RhdGljX2Nhc3Q8Q0dMUGl4ZWxGb3JtYXRBdHRyaWJ1dGU+KDEpKTsKLSAgICAgICAgYXR0cmli
cy5hcHBlbmQoa0NHTFBGQVNhbXBsZXMpOwotICAgICAgICBhdHRyaWJzLmFwcGVuZChzdGF0aWNf
Y2FzdDxDR0xQaXhlbEZvcm1hdEF0dHJpYnV0ZT4oNCkpOwotICAgIH0KLQotICAgIGlmICh1c2VH
TEVTMykgewotICAgICAgICAvLyBGSVhNRTogSW5zdGVhZCBvZiBiYWNraW5nIGEgV2ViR0wyIEdy
YXBoaWNzQ29udGV4dDNEIHdpdGggYSBPcGVuR0wgMy4yIGNvbnRleHQsIHdlIHNob3VsZCBpbnN0
ZWFkIGJhY2sgaXQgd2l0aCBBTkdMRS4KLSAgICAgICAgLy8gVXNlIGFuIE9wZW5HTCAzLjIgY29u
dGV4dCBmb3Igbm93IHVudGlsIHRoZSBBTkdMRSBiYWNrZW5kIGlzIHJlYWR5LgotICAgICAgICBh
dHRyaWJzLmFwcGVuZChrQ0dMUEZBT3BlbkdMUHJvZmlsZSk7Ci0gICAgICAgIGF0dHJpYnMuYXBw
ZW5kKHN0YXRpY19jYXN0PENHTFBpeGVsRm9ybWF0QXR0cmlidXRlPihrQ0dMT0dMUFZlcnNpb25f
M18yX0NvcmUpKTsKLSAgICB9Ci0gICAgICAgIAotICAgIGF0dHJpYnMuYXBwZW5kKHN0YXRpY19j
YXN0PENHTFBpeGVsRm9ybWF0QXR0cmlidXRlPigwKSk7Ci19Ci0jZW5kaWYgLy8gIVBMQVRGT1JN
KElPUykKLQotUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBHcmFwaGljc0NvbnRleHQzRDo6Y3Jl
YXRlKEdyYXBoaWNzQ29udGV4dDNEQXR0cmlidXRlcyBhdHRycywgSG9zdFdpbmRvdyogaG9zdFdp
bmRvdywgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlclN0eWxlIHJlbmRlclN0eWxlKQotewotICAg
IC8vIFRoaXMgaW1wbGVtZW50YXRpb24gZG9lc24ndCBjdXJyZW50bHkgc3VwcG9ydCByZW5kZXJp
bmcgZGlyZWN0bHkgdG8gdGhlIEhvc3RXaW5kb3cuCi0gICAgaWYgKHJlbmRlclN0eWxlID09IFJl
bmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAg
IC8vIE1ha2Ugc3BhY2UgZm9yIHRoZSBpbmNvbWluZyBjb250ZXh0IGlmIHdlJ3JlIGZ1bGwuCi0g
ICAgbWFuYWdlcigpLnJlY3ljbGVDb250ZXh0SWZOZWNlc3NhcnkoKTsKLSAgICBpZiAobWFuYWdl
cigpLmhhc1Rvb01hbnlDb250ZXh0cygpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAg
IFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9IGFkb3B0UmVmKG5ldyBHcmFwaGlj
c0NvbnRleHQzRChhdHRycywgaG9zdFdpbmRvdywgcmVuZGVyU3R5bGUpKTsKLQotICAgIGlmICgh
Y29udGV4dC0+bV9jb250ZXh0T2JqKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIG1h
bmFnZXIoKS5hZGRDb250ZXh0KGNvbnRleHQuZ2V0KCkpOwotCi0gICAgcmV0dXJuIGNvbnRleHQ7
Ci19Ci0KLUdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRl
eHQzREF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaW5kb3cqLCBHcmFwaGljc0NvbnRleHQzRDo6UmVu
ZGVyU3R5bGUpCi0gICAgOiBtX2F0dHJzKGF0dHJzKQotI2lmIFBMQVRGT1JNKElPUykKLSAgICAs
IG1fY29tcGlsZXIoU0hfRVNTTF9PVVRQVVQpCi0jZW5kaWYKLSAgICAsIG1fcHJpdmF0ZShzdGQ6
Om1ha2VfdW5pcXVlPEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZT4odGhpcykpCi17Ci0jaWYgUExB
VEZPUk0oSU9TKQotICAgIEVBR0xSZW5kZXJpbmdBUEkgYXBpID0gbV9hdHRycy51c2VHTEVTMyA/
IGtFQUdMUmVuZGVyaW5nQVBJT3BlbkdMRVMzIDoga0VBR0xSZW5kZXJpbmdBUElPcGVuR0xFUzI7
Ci0gICAgbV9jb250ZXh0T2JqID0gW1tFQUdMQ29udGV4dCBhbGxvY10gaW5pdFdpdGhBUEk6YXBp
XTsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSNlbHNlCi0gICAgVmVjdG9yPENHTFBpeGVs
Rm9ybWF0QXR0cmlidXRlPiBhdHRyaWJzOwotICAgIENHTFBpeGVsRm9ybWF0T2JqIHBpeGVsRm9y
bWF0T2JqID0gMDsKLSAgICBHTGludCBudW1QaXhlbEZvcm1hdHMgPSAwOwotICAgIAotICAgIC8v
IElmIHdlJ3JlIGNvbmZpZ3VyZWQgdG8gZGVtYW5kIHRoZSBzb2Z0d2FyZSByZW5kZXJlciwgd2Un
bGwKLSAgICAvLyBkbyBzby4gV2UgYXR0ZW1wdCB0byBjcmVhdGUgY29udGV4dHMgaW4gdGhpcyBv
cmRlcjoKLSAgICAvLwotICAgIC8vIDEpIDMyIGJpdCBSR0JBLzMyIGJpdCBkZXB0aC9zdXBlcnNh
bXBsZWQKLSAgICAvLyAyKSAzMiBiaXQgUkdCQS8zMiBiaXQgZGVwdGgKLSAgICAvLyAzKSAzMiBi
aXQgUkdCQS8xNiBiaXQgZGVwdGgKLSAgICAvLwotICAgIC8vIElmIHdlIHdlcmUgbm90IGZvcmNl
ZCBpbnRvIHNvZnR3YXJlIG1vZGUgYWxyZWFkeSwgb3VyIGZpbmFsIGF0dGVtcHQgaXMKLSAgICAv
LyB0byB0cnkgdGhhdDoKLSAgICAvLwotICAgIC8vIDQpIGNsb3Nlc3QgdG8gMzIgYml0IFJHQkEv
MTYgYml0IGRlcHRoL3NvZnR3YXJlIHJlbmRlcmVyCi0gICAgLy8KLSAgICAvLyBJZiBub25lIG9m
IHRoYXQgd29ya3MsIHdlIHNpbXBseSBmYWlsIGFuZCBzZXQgbV9jb250ZXh0T2JqIHRvIDAuCi0K
LSAgICBib29sIHVzZU11bHRpc2FtcGxpbmcgPSBtX2F0dHJzLmFudGlhbGlhczsKLQotICAgIG1f
cG93ZXJQcmVmZXJlbmNlVXNlZEZvckNyZWF0aW9uID0gKGhhc011eGFibGVHUFUoKSAmJiBhdHRy
cy5wb3dlclByZWZlcmVuY2UgPT0gR3JhcGhpY3NDb250ZXh0M0RQb3dlclByZWZlcmVuY2U6Okhp
Z2hQZXJmb3JtYW5jZSkgPyBHcmFwaGljc0NvbnRleHQzRFBvd2VyUHJlZmVyZW5jZTo6SGlnaFBl
cmZvcm1hbmNlIDogR3JhcGhpY3NDb250ZXh0M0RQb3dlclByZWZlcmVuY2U6OkRlZmF1bHQ7Ci0K
LSAgICBzZXRQaXhlbEZvcm1hdChhdHRyaWJzLCAzMiwgMzIsICFhdHRycy5mb3JjZVNvZnR3YXJl
UmVuZGVyZXIsIHRydWUsIGZhbHNlLCB1c2VNdWx0aXNhbXBsaW5nLCBhdHRycy51c2VHTEVTMyk7
Ci0gICAgQ0dMQ2hvb3NlUGl4ZWxGb3JtYXQoYXR0cmlicy5kYXRhKCksICZwaXhlbEZvcm1hdE9i
aiwgJm51bVBpeGVsRm9ybWF0cyk7Ci0KLSAgICBpZiAoIW51bVBpeGVsRm9ybWF0cykgewotICAg
ICAgICBzZXRQaXhlbEZvcm1hdChhdHRyaWJzLCAzMiwgMzIsICFhdHRycy5mb3JjZVNvZnR3YXJl
UmVuZGVyZXIsIGZhbHNlLCBmYWxzZSwgdXNlTXVsdGlzYW1wbGluZywgYXR0cnMudXNlR0xFUzMp
OwotICAgICAgICBDR0xDaG9vc2VQaXhlbEZvcm1hdChhdHRyaWJzLmRhdGEoKSwgJnBpeGVsRm9y
bWF0T2JqLCAmbnVtUGl4ZWxGb3JtYXRzKTsKLQotICAgICAgICBpZiAoIW51bVBpeGVsRm9ybWF0
cykgewotICAgICAgICAgICAgc2V0UGl4ZWxGb3JtYXQoYXR0cmlicywgMzIsIDE2LCAhYXR0cnMu
Zm9yY2VTb2Z0d2FyZVJlbmRlcmVyLCBmYWxzZSwgZmFsc2UsIHVzZU11bHRpc2FtcGxpbmcsIGF0
dHJzLnVzZUdMRVMzKTsKLSAgICAgICAgICAgIENHTENob29zZVBpeGVsRm9ybWF0KGF0dHJpYnMu
ZGF0YSgpLCAmcGl4ZWxGb3JtYXRPYmosICZudW1QaXhlbEZvcm1hdHMpOwotCi0gICAgICAgICAg
ICBpZiAoIWF0dHJzLmZvcmNlU29mdHdhcmVSZW5kZXJlciAmJiAhbnVtUGl4ZWxGb3JtYXRzKSB7
Ci0gICAgICAgICAgICAgICAgc2V0UGl4ZWxGb3JtYXQoYXR0cmlicywgMzIsIDE2LCBmYWxzZSwg
ZmFsc2UsIHRydWUsIGZhbHNlLCBhdHRycy51c2VHTEVTMyk7Ci0gICAgICAgICAgICAgICAgQ0dM
Q2hvb3NlUGl4ZWxGb3JtYXQoYXR0cmlicy5kYXRhKCksICZwaXhlbEZvcm1hdE9iaiwgJm51bVBp
eGVsRm9ybWF0cyk7Ci0gICAgICAgICAgICAgICAgdXNlTXVsdGlzYW1wbGluZyA9IGZhbHNlOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG51bVBpeGVsRm9ybWF0
cyA9PSAwKQotICAgICAgICByZXR1cm47Ci0KLSAgICBDR0xFcnJvciBlcnIgPSBDR0xDcmVhdGVD
b250ZXh0KHBpeGVsRm9ybWF0T2JqLCAwLCAmbV9jb250ZXh0T2JqKTsKLSAgICBHTGludCBhYm9y
dE9uQmxhY2tsaXN0ID0gMDsKLSNpZiBQTEFURk9STShNQUMpCi0gICAgQ0dMU2V0UGFyYW1ldGVy
KG1fY29udGV4dE9iaiwga0NHTENQQWJvcnRPbkdQVVJlc3RhcnRTdGF0dXNCbGFja2xpc3RlZCwg
JmFib3J0T25CbGFja2xpc3QpOwotI2VsaWYgUExBVEZPUk0oSU9TKQotICAgIENHTFNldFBhcmFt
ZXRlcihtX2NvbnRleHRPYmosIGtFQUdMQ1BBYm9ydE9uR1BVUmVzdGFydFN0YXR1c0JsYWNrbGlz
dGVkLCAmYWJvcnRPbkJsYWNrbGlzdCk7Ci0jZW5kaWYKLQotICAgIENHTERlc3Ryb3lQaXhlbEZv
cm1hdChwaXhlbEZvcm1hdE9iaik7Ci0gICAgCi0gICAgaWYgKGVyciAhPSBrQ0dMTm9FcnJvciB8
fCAhbV9jb250ZXh0T2JqKSB7Ci0gICAgICAgIC8vIFdlIHdlcmUgdW5hYmxlIHRvIGNyZWF0ZSB0
aGUgY29udGV4dC4KLSAgICAgICAgbV9jb250ZXh0T2JqID0gMDsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIG1faXNGb3JXZWJHTDIgPSBhdHRycy51c2VHTEVTMzsKLQotICAgIC8vIFNl
dCB0aGUgY3VycmVudCBjb250ZXh0IHRvIHRoZSBvbmUgZ2l2ZW4gdG8gdXMuCi0gICAgQ0dMU2V0
Q3VycmVudENvbnRleHQobV9jb250ZXh0T2JqKTsKLQotI2VuZGlmIC8vICFQTEFURk9STShJT1Mp
Ci0gICAgCi0gICAgdmFsaWRhdGVBdHRyaWJ1dGVzKCk7Ci0KLSAgICAvLyBDcmVhdGUgdGhlIFdl
YkdMTGF5ZXIKLSAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKLSAgICAgICAgbV93ZWJH
TExheWVyID0gYWRvcHROUyhbW1dlYkdMTGF5ZXIgYWxsb2NdIGluaXRXaXRoR3JhcGhpY3NDb250
ZXh0M0Q6dGhpc10pOwotI2lmbmRlZiBOREVCVUcKLSAgICAgICAgW21fd2ViR0xMYXllciBzZXRO
YW1lOkAiV2ViR0wgTGF5ZXIiXTsKLSNlbmRpZgotICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElP
TlMKLQotI2lmICFQTEFURk9STShJT1MpCi0gICAgaWYgKHVzZU11bHRpc2FtcGxpbmcpCi0gICAg
ICAgIDo6Z2xFbmFibGUoR0xfTVVMVElTQU1QTEUpOwotI2VuZGlmCi0KLSNpZiBQTEFURk9STShJ
T1MpCi0gICAgOjpnbEdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1fdGV4dHVyZSk7Ci0jZWxzZQotICAg
IC8vIGNyZWF0ZSBhIHRleHR1cmUgdG8gcmVuZGVyIGludG8KLSAgICA6OmdsR2VuVGV4dHVyZXMo
MSwgJm1fdGV4dHVyZSk7Ci0gICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fdGV4
dHVyZSk7Ci0gICAgOjpnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9N
QUdfRklMVEVSLCBHTF9MSU5FQVIpOwotICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVf
MkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKLSAgICA6OmdsVGV4UGFyYW1l
dGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7
Ci0gICAgOjpnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1Qs
IEdMX0NMQU1QX1RPX0VER0UpOwotICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCAw
KTsKLSNlbmRpZgotCi0gICAgLy8gY3JlYXRlIGFuIEZCTwotICAgIDo6Z2xHZW5GcmFtZWJ1ZmZl
cnNFWFQoMSwgJm1fZmJvKTsKLSAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVG
RkVSX0VYVCwgbV9mYm8pOwotCi0gICAgbV9zdGF0ZS5ib3VuZEZCTyA9IG1fZmJvOwotICAgIGlm
ICghbV9hdHRycy5hbnRpYWxpYXMgJiYgKG1fYXR0cnMuc3RlbmNpbCB8fCBtX2F0dHJzLmRlcHRo
KSkKLSAgICAgICAgOjpnbEdlblJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm1fZGVwdGhTdGVuY2lsQnVm
ZmVyKTsKLQotICAgIC8vIGNyZWF0ZSBhbiBtdWx0aXNhbXBsZSBGQk8KLSAgICBpZiAobV9hdHRy
cy5hbnRpYWxpYXMpIHsKLSAgICAgICAgOjpnbEdlbkZyYW1lYnVmZmVyc0VYVCgxLCAmbV9tdWx0
aXNhbXBsZUZCTyk7Ci0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZG
RVJfRVhULCBtX211bHRpc2FtcGxlRkJPKTsKLSAgICAgICAgbV9zdGF0ZS5ib3VuZEZCTyA9IG1f
bXVsdGlzYW1wbGVGQk87Ci0gICAgICAgIDo6Z2xHZW5SZW5kZXJidWZmZXJzRVhUKDEsICZtX211
bHRpc2FtcGxlQ29sb3JCdWZmZXIpOwotICAgICAgICBpZiAobV9hdHRycy5zdGVuY2lsIHx8IG1f
YXR0cnMuZGVwdGgpCi0gICAgICAgICAgICA6OmdsR2VuUmVuZGVyYnVmZmVyc0VYVCgxLCAmbV9t
dWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcik7Ci0gICAgfQotICAgIAotICAgIC8vIEFOR0xF
IGluaXRpYWxpemF0aW9uLgotCi0gICAgU2hCdWlsdEluUmVzb3VyY2VzIEFOR0xFUmVzb3VyY2Vz
OwotICAgIHNoOjpJbml0QnVpbHRJblJlc291cmNlcygmQU5HTEVSZXNvdXJjZXMpOwotCi0gICAg
Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WRVJURVhfQVRUUklCUywgJkFOR0xF
UmVzb3VyY2VzLk1heFZlcnRleEF0dHJpYnMpOwotICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29u
dGV4dDNEOjpNQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SUywgJkFOR0xFUmVzb3VyY2VzLk1heFZl
cnRleFVuaWZvcm1WZWN0b3JzKTsKLSAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6
TUFYX1ZBUllJTkdfVkVDVE9SUywgJkFOR0xFUmVzb3VyY2VzLk1heFZhcnlpbmdWZWN0b3JzKTsK
LSAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZFUlRFWF9URVhUVVJFX0lN
QUdFX1VOSVRTLCAmQU5HTEVSZXNvdXJjZXMuTWF4VmVydGV4VGV4dHVyZUltYWdlVW5pdHMpOwot
ICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfQ09NQklORURfVEVYVFVSRV9J
TUFHRV9VTklUUywgJkFOR0xFUmVzb3VyY2VzLk1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMp
OwotICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVEVYVFVSRV9JTUFHRV9V
TklUUywgJkFOR0xFUmVzb3VyY2VzLk1heFRleHR1cmVJbWFnZVVuaXRzKTsKLSAgICBnZXRJbnRl
Z2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SUywgJkFO
R0xFUmVzb3VyY2VzLk1heEZyYWdtZW50VW5pZm9ybVZlY3RvcnMpOwotCi0gICAgLy8gQWx3YXlz
IHNldCB0byAxIGZvciBPcGVuR0wgRVMuCi0gICAgQU5HTEVSZXNvdXJjZXMuTWF4RHJhd0J1ZmZl
cnMgPSAxOwotICAgIAotICAgIEdDM0RpbnQgcmFuZ2VbMl0sIHByZWNpc2lvbjsKLSAgICBnZXRT
aGFkZXJQcmVjaXNpb25Gb3JtYXQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQUdNRU5UX1NIQURFUiwg
R3JhcGhpY3NDb250ZXh0M0Q6OkhJR0hfRkxPQVQsIHJhbmdlLCAmcHJlY2lzaW9uKTsKLSAgICBB
TkdMRVJlc291cmNlcy5GcmFnbWVudFByZWNpc2lvbkhpZ2ggPSAocmFuZ2VbMF0gfHwgcmFuZ2Vb
MV0gfHwgcHJlY2lzaW9uKTsKLQotICAgIG1fY29tcGlsZXIuc2V0UmVzb3VyY2VzKEFOR0xFUmVz
b3VyY2VzKTsKLSAgICAKLSNpZiAhUExBVEZPUk0oSU9TKQotICAgIDo6Z2xFbmFibGUoR0xfVkVS
VEVYX1BST0dSQU1fUE9JTlRfU0laRSk7Ci0gICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkpCi0g
ICAgICAgIDo6Z2xFbmFibGUoR0xfUE9JTlRfU1BSSVRFKTsKLSNlbmRpZgotCi0gICAgOjpnbENs
ZWFyQ29sb3IoMCwgMCwgMCwgMCk7Ci0KLSAgICBMT0coV2ViR0wsICJDcmVhdGVkIGEgR3JhcGhp
Y3NDb250ZXh0M0QgKCVwKS4iLCB0aGlzKTsKLX0KLQotR3JhcGhpY3NDb250ZXh0M0Q6On5HcmFw
aGljc0NvbnRleHQzRCgpCi17Ci0gICAgbWFuYWdlcigpLnJlbW92ZUNvbnRleHQodGhpcyk7Ci0K
LSAgICBpZiAobV9jb250ZXh0T2JqKSB7Ci0jaWYgUExBVEZPUk0oSU9TKQotICAgICAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKLSAgICAgICAgW21fY29udGV4dE9iaiByZW5kZXJidWZmZXJTdG9y
YWdlOkdMX1JFTkRFUkJVRkZFUiBmcm9tRHJhd2FibGU6bmlsXTsKLSAgICAgICAgOjpnbERlbGV0
ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fdGV4dHVyZSk7Ci0jZWxzZQotICAgICAgICBDR0xTZXRDdXJy
ZW50Q29udGV4dChtX2NvbnRleHRPYmopOwotICAgICAgICA6OmdsRGVsZXRlVGV4dHVyZXMoMSwg
Jm1fdGV4dHVyZSk7Ci0jZW5kaWYKLSAgICAgICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzKSB7Ci0g
ICAgICAgICAgICA6OmdsRGVsZXRlUmVuZGVyYnVmZmVyc0VYVCgxLCAmbV9tdWx0aXNhbXBsZUNv
bG9yQnVmZmVyKTsKLSAgICAgICAgICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwgfHwgbV9hdHRycy5k
ZXB0aCkKLSAgICAgICAgICAgICAgICA6OmdsRGVsZXRlUmVuZGVyYnVmZmVyc0VYVCgxLCAmbV9t
dWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcik7Ci0gICAgICAgICAgICA6OmdsRGVsZXRlRnJh
bWVidWZmZXJzRVhUKDEsICZtX211bHRpc2FtcGxlRkJPKTsKLSAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwgfHwgbV9hdHRycy5kZXB0aCkKLSAgICAgICAg
ICAgICAgICA6OmdsRGVsZXRlUmVuZGVyYnVmZmVyc0VYVCgxLCAmbV9kZXB0aFN0ZW5jaWxCdWZm
ZXIpOwotICAgICAgICB9Ci0gICAgICAgIDo6Z2xEZWxldGVGcmFtZWJ1ZmZlcnNFWFQoMSwgJm1f
ZmJvKTsKLSNpZiBQTEFURk9STShJT1MpCi0gICAgICAgIFtFQUdMQ29udGV4dCBzZXRDdXJyZW50
Q29udGV4dDowXTsKLSAgICAgICAgW3N0YXRpY19jYXN0PEVBR0xDb250ZXh0Kj4obV9jb250ZXh0
T2JqKSByZWxlYXNlXTsKLSNlbHNlCi0gICAgICAgIENHTFNldEN1cnJlbnRDb250ZXh0KDApOwot
ICAgICAgICBDR0xEZXN0cm95Q29udGV4dChtX2NvbnRleHRPYmopOwotI2VuZGlmCi0gICAgICAg
IFttX3dlYkdMTGF5ZXIgc2V0Q29udGV4dDpudWxscHRyXTsKLSAgICB9Ci0KLSAgICBMT0coV2Vi
R0wsICJEZXN0cm95ZWQgYSBHcmFwaGljc0NvbnRleHQzRCAoJXApLiIsIHRoaXMpOwotfQotCi0j
aWYgUExBVEZPUk0oSU9TKQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c2V0UmVuZGVyYnVmZmVy
U3RvcmFnZUZyb21EcmF3YWJsZShHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCi17
Ci0gICAgLy8gV2UgbmVlZCB0byBtYWtlIGEgY2FsbCB0byBzZXRCb3VuZHMgYmVsb3cgdG8gdXBk
YXRlIHRoZSBiYWNraW5nIHN0b3JlIHNpemUgYnV0IHdlIGFsc28KLSAgICAvLyBkbyBub3Qgd2Fu
dCB0byBjbG9iYmVyIHRoZSBib3VuZHMgc2V0IGR1cmluZyBsYXlvdXQuCi0gICAgQ0dSZWN0IHBy
ZXZpb3VzQm91bmRzID0gW21fd2ViR0xMYXllci5nZXQoKSBib3VuZHNdOwotCi0gICAgW21fd2Vi
R0xMYXllciBzZXRCb3VuZHM6Q0dSZWN0TWFrZSgwLCAwLCB3aWR0aCwgaGVpZ2h0KV07Ci0gICAg
W21fd2ViR0xMYXllciBzZXRPcGFxdWU6KG1faW50ZXJuYWxDb2xvckZvcm1hdCAhPSBHTF9SR0JB
OCldOwotCi0gICAgW21fY29udGV4dE9iaiByZW5kZXJidWZmZXJTdG9yYWdlOkdMX1JFTkRFUkJV
RkZFUiBmcm9tRHJhd2FibGU6c3RhdGljX2Nhc3Q8aWQ8RUFHTERyYXdhYmxlPj4obV93ZWJHTExh
eWVyLmdldCgpKV07Ci0KLSAgICBbbV93ZWJHTExheWVyIHNldEJvdW5kczpwcmV2aW91c0JvdW5k
c107Ci19Ci0jZW5kaWYKLQotYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6bWFrZUNvbnRleHRDdXJy
ZW50KCkKLXsKLSAgICBpZiAoIW1fY29udGV4dE9iaikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0jaWYgUExBVEZPUk0oSU9TKQotICAgIGlmIChbRUFHTENvbnRleHQgY3VycmVudENvbnRleHRd
ICE9IG1fY29udGV4dE9iaikKLSAgICAgICAgcmV0dXJuIFtFQUdMQ29udGV4dCBzZXRDdXJyZW50
Q29udGV4dDpzdGF0aWNfY2FzdDxFQUdMQ29udGV4dCo+KG1fY29udGV4dE9iaildOwotI2Vsc2UK
LSAgICBDR0xDb250ZXh0T2JqIGN1cnJlbnRDb250ZXh0ID0gQ0dMR2V0Q3VycmVudENvbnRleHQo
KTsKLSAgICBpZiAoY3VycmVudENvbnRleHQgIT0gbV9jb250ZXh0T2JqKQotICAgICAgICByZXR1
cm4gQ0dMU2V0Q3VycmVudENvbnRleHQobV9jb250ZXh0T2JqKSA9PSBrQ0dMTm9FcnJvcjsKLSNl
bmRpZgotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjaGVj
a0dQVVN0YXR1cygpCi17Ci0gICAgaWYgKG1fZmFpbE5leHRTdGF0dXNDaGVjaykgewotICAgICAg
ICBMT0coV2ViR0wsICJQcmV0ZW5kaW5nIHRoZSBHUFUgaGFzIHJlc2V0ICglcCkuIExvc2UgdGhl
IGNvbnRleHQuIiwgdGhpcyk7Ci0gICAgICAgIG1fZmFpbE5leHRTdGF0dXNDaGVjayA9IGZhbHNl
OwotICAgICAgICBmb3JjZUNvbnRleHRMb3N0KCk7Ci0jaWYgUExBVEZPUk0oTUFDKQotICAgICAg
ICBDR0xTZXRDdXJyZW50Q29udGV4dCgwKTsKLSNlbHNlCi0gICAgICAgIFtFQUdMQ29udGV4dCBz
ZXRDdXJyZW50Q29udGV4dDowXTsKLSNlbmRpZgotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgLy8gT25seSBkbyB0aGUgY2hlY2sgZXZlcnkgc3RhdHVzQ2hlY2tUaHJlc2hvbGQgY2FsbHMu
Ci0gICAgaWYgKG1fc3RhdHVzQ2hlY2tDb3VudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9z
dGF0dXNDaGVja0NvdW50ID0gKG1fc3RhdHVzQ2hlY2tDb3VudCArIDEpICUgc3RhdHVzQ2hlY2tU
aHJlc2hvbGQ7Ci0KLSAgICBHTGludCByZXN0YXJ0U3RhdHVzID0gMDsKLSNpZiBQTEFURk9STShN
QUMpCi0gICAgQ0dMR2V0UGFyYW1ldGVyKHBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QoKSwga0NH
TENQR1BVUmVzdGFydFN0YXR1cywgJnJlc3RhcnRTdGF0dXMpOwotICAgIGlmIChyZXN0YXJ0U3Rh
dHVzID09IGtDR0xDUEdQVVJlc3RhcnRTdGF0dXNCbGFja2xpc3RlZCkgewotICAgICAgICBMT0co
V2ViR0wsICJUaGUgR1BVIGhhcyBibGFja2xpc3RlZCB1cyAoJXApLiBUZXJtaW5hdGluZy4iLCB0
aGlzKTsKLSAgICAgICAgZXhpdChFWF9PU0VSUik7Ci0gICAgfQotICAgIGlmIChyZXN0YXJ0U3Rh
dHVzID09IGtDR0xDUEdQVVJlc3RhcnRTdGF0dXNDYXVzZWQpIHsKLSAgICAgICAgTE9HKFdlYkdM
LCAiVGhlIEdQVSBoYXMgcmVzZXQgdXMgKCVwKS4gTG9zZSB0aGUgY29udGV4dC4iLCB0aGlzKTsK
LSAgICAgICAgZm9yY2VDb250ZXh0TG9zdCgpOwotICAgICAgICBDR0xTZXRDdXJyZW50Q29udGV4
dCgwKTsKLSAgICB9Ci0jZWxzZQotICAgIEVBR0xDb250ZXh0KiBjdXJyZW50Q29udGV4dCA9IHN0
YXRpY19jYXN0PEVBR0xDb250ZXh0Kj4oUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgpKTsKLSAg
ICBbY3VycmVudENvbnRleHQgZ2V0UGFyYW1ldGVyOmtFQUdMQ1BHUFVSZXN0YXJ0U3RhdHVzIHRv
OiZyZXN0YXJ0U3RhdHVzXTsKLSAgICBpZiAocmVzdGFydFN0YXR1cyA9PSBrRUFHTENQR1BVUmVz
dGFydFN0YXR1c0NhdXNlZCB8fCByZXN0YXJ0U3RhdHVzID09IGtFQUdMQ1BHUFVSZXN0YXJ0U3Rh
dHVzQmxhY2tsaXN0ZWQpIHsKLSAgICAgICAgTE9HKFdlYkdMLCAiVGhlIEdQVSBoYXMgZWl0aGVy
IHJlc2V0IG9yIGJsYWNrbGlzdGVkIHVzICglcCkuIExvc2UgdGhlIGNvbnRleHQuIiwgdGhpcyk7
Ci0gICAgICAgIGZvcmNlQ29udGV4dExvc3QoKTsKLSAgICAgICAgW0VBR0xDb250ZXh0IHNldEN1
cnJlbnRDb250ZXh0OjBdOwotICAgIH0KLSNlbmRpZgotfQotCi0jaWYgUExBVEZPUk0oSU9TKQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZW5kUGFpbnQoKQotewotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOwotICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcykKLSAgICAgICAgcmVzb2x2ZU11bHRp
c2FtcGxpbmdJZk5lY2Vzc2FyeSgpOwotICAgIDo6Z2xGbHVzaCgpOwotICAgIDo6Z2xCaW5kUmVu
ZGVyYnVmZmVyKEdMX1JFTkRFUkJVRkZFUiwgbV90ZXh0dXJlKTsKLSAgICBbc3RhdGljX2Nhc3Q8
RUFHTENvbnRleHQqPihtX2NvbnRleHRPYmopIHByZXNlbnRSZW5kZXJidWZmZXI6R0xfUkVOREVS
QlVGRkVSXTsKLSAgICBbRUFHTENvbnRleHQgc2V0Q3VycmVudENvbnRleHQ6bmlsXTsKLX0KLSNl
bmRpZgotCi0jaWYgUExBVEZPUk0oTUFDKQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dXBkYXRl
Q0dMQ29udGV4dCgpCi17Ci0gICAgaWYgKCFtX2NvbnRleHRPYmopCi0gICAgICAgIHJldHVybjsK
LQotICAgIExPRyhXZWJHTCwgIkRldGVjdGVkIGEgbXV4IHN3aXRjaCBvciBkaXNwbGF5IHJlY29u
ZmlndXJhdGlvbi4gQ2FsbCBDR0xVcGRhdGVDb250ZXh0LiAoJXApIiwgdGhpcyk7Ci0KLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBDR0xVcGRhdGVDb250ZXh0KG1fY29udGV4dE9iaik7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnNldENvbnRleHRWaXNpYmlsaXR5KGJvb2wg
aXNWaXNpYmxlKQotewotICAgIGlmIChtX3Bvd2VyUHJlZmVyZW5jZVVzZWRGb3JDcmVhdGlvbiA9
PSBHcmFwaGljc0NvbnRleHQzRFBvd2VyUHJlZmVyZW5jZTo6SGlnaFBlcmZvcm1hbmNlKSB7Ci0g
ICAgICAgIGlmIChpc1Zpc2libGUpCi0gICAgICAgICAgICBtYW5hZ2VyKCkuYWRkQ29udGV4dFJl
cXVpcmluZ0hpZ2hQZXJmb3JtYW5jZSh0aGlzKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
bWFuYWdlcigpLnJlbW92ZUNvbnRleHRSZXF1aXJpbmdIaWdoUGVyZm9ybWFuY2UodGhpcyk7Ci0g
ICAgfQotfQotI2VuZGlmCi0KLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmlzR0xFUzJDb21wbGlh
bnQoKSBjb25zdAotewotICAgIHJldHVybiBtX2lzRm9yV2ViR0wyOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpzZXRDb250ZXh0TG9zdENhbGxiYWNrKHN0ZDo6dW5pcXVlX3B0cjxDb250
ZXh0TG9zdENhbGxiYWNrPikKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c2V0RXJy
b3JNZXNzYWdlQ2FsbGJhY2soc3RkOjp1bmlxdWVfcHRyPEVycm9yTWVzc2FnZUNhbGxiYWNrPikK
LXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c2ltdWxhdGVDb250ZXh0Q2hhbmdlZCgp
Ci17Ci0gICAgbWFuYWdlcigpLnVwZGF0ZUFsbENvbnRleHRzKCk7Ci19Ci0KLX0KLQotI2VuZGlm
IC8vIEVOQUJMRShHUkFQSElDU19DT05URVhUXzNEKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dE1hYy5tbSBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHRNYWMubW0KZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmODUwZWE2ZDE4MTExNzEzYWQ4MTgxNmUwMTNhZWRk
MTlkNjA3ZmYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dE1hYy5t
bQorKysgL2Rldi9udWxsCkBAIC0xLDMyNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbXBvcnQg
ImNvbmZpZy5oIgotI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0LmgiCi0KLSNpbXBvcnQgIkdyYXBo
aWNzQ29udGV4dENHLmgiCi0jaW1wb3J0ICJHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVD
Ry5oIgotI2ltcG9ydCAiSW50UmVjdC5oIgotI2lmIFVTRShBUFBLSVQpCi0jaW1wb3J0IDxBcHBL
aXQvQXBwS2l0Lmg+Ci0jZW5kaWYKLSNpbXBvcnQgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KLQotI2lm
IFBMQVRGT1JNKElPUykKLSNpbXBvcnQgIkNvbG9yLmgiCi0jaW1wb3J0ICJXS0dyYXBoaWNzLmgi
Ci0jaW1wb3J0ICJXS0dyYXBoaWNzSW50ZXJuYWwuaCIKLSNlbmRpZgotCi0jaWYgIVBMQVRGT1JN
KElPUykKLSNpbXBvcnQgIkxvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dC5oIgotI2VuZGlmCi0j
aW1wb3J0ICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgiCi0KLUBjbGFzcyBOU0NvbG9yOwotCi0v
LyBGSVhNRTogTW9yZSBvZiB0aGlzIHNob3VsZCB1c2UgQ29yZUdyYXBoaWNzIGluc3RlYWQgb2Yg
QXBwS2l0LgotLy8gRklYTUU6IE1vcmUgb2YgdGhpcyBzaG91bGQgbW92ZSBpbnRvIEdyYXBoaWNz
Q29udGV4dENHLmNwcC4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0vLyBOU0NvbG9yLCBOU0Jl
emllclBhdGgsIGFuZCBOU0dyYXBoaWNzQ29udGV4dAotLy8gY2FsbHMgaW4gdGhpcyBmaWxlIGFy
ZSBhbGwgZXhjZXB0aW9uLXNhZmUsIHNvIHdlIGRvbid0IGJsb2NrCi0vLyBleGNlcHRpb25zIGZv
ciB0aG9zZS4KLQotI2lmICFQTEFURk9STShJT1MpCi1zdGF0aWMgdm9pZCBkcmF3Rm9jdXNSaW5n
VG9Db250ZXh0KENHQ29udGV4dFJlZiBjb250ZXh0LCBDR1BhdGhSZWYgZm9jdXNSaW5nUGF0aCkK
LXsKLSAgICBDR0NvbnRleHRCZWdpblBhdGgoY29udGV4dCk7Ci0gICAgQ0dDb250ZXh0QWRkUGF0
aChjb250ZXh0LCBmb2N1c1JpbmdQYXRoKTsKLSAgICB3a0RyYXdGb2N1c1JpbmcoY29udGV4dCwg
bnVsbHB0ciwgMCk7Ci19Ci0KLXN0YXRpYyBib29sIGRyYXdGb2N1c1JpbmdUb0NvbnRleHRBdFRp
bWUoQ0dDb250ZXh0UmVmIGNvbnRleHQsIENHUGF0aFJlZiBmb2N1c1JpbmdQYXRoLCBkb3VibGUg
dGltZU9mZnNldCkKLXsKLSAgICBVTlVTRURfUEFSQU0odGltZU9mZnNldCk7Ci0gICAgQ0dDb250
ZXh0QmVnaW5QYXRoKGNvbnRleHQpOwotICAgIENHQ29udGV4dEFkZFBhdGgoY29udGV4dCwgZm9j
dXNSaW5nUGF0aCk7Ci0gICAgcmV0dXJuIHdrRHJhd0ZvY3VzUmluZ0F0VGltZShjb250ZXh0LCBz
dGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46Om1heCgpKTsKLX0KLSNlbmRpZiAvLyAhUExBVEZP
Uk0oSU9TKQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRo
JiBwYXRoLCBmbG9hdCAvKiB3aWR0aCAqLywgZmxvYXQgLyogb2Zmc2V0ICovLCBjb25zdCBDb2xv
ciYpCi17Ci0jaWYgUExBVEZPUk0oTUFDKQotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkgfHwg
cGF0aC5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZHJhd0ZvY3VzUmluZ1RvQ29u
dGV4dChwbGF0Zm9ybUNvbnRleHQoKSwgcGF0aC5wbGF0Zm9ybVBhdGgoKSk7Ci0jZWxzZQotICAg
IFVOVVNFRF9QQVJBTShwYXRoKTsKLSNlbmRpZgotfQotCi0jaWYgUExBVEZPUk0oTUFDKQotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYgcGF0aCwgZG91Ymxl
IHRpbWVPZmZzZXQsIGJvb2wmIG5lZWRzUmVkcmF3KQotewotICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkgfHwgcGF0aC5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIG5lZWRz
UmVkcmF3ID0gZHJhd0ZvY3VzUmluZ1RvQ29udGV4dEF0VGltZShwbGF0Zm9ybUNvbnRleHQoKSwg
cGF0aC5wbGF0Zm9ybVBhdGgoKSwgdGltZU9mZnNldCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZG91Ymxl
IHRpbWVPZmZzZXQsIGJvb2wmIG5lZWRzUmVkcmF3KQotewotICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJldGFpblB0cjxDR011dGFibGVQYXRoUmVm
PiBmb2N1c1JpbmdQYXRoID0gYWRvcHRDRihDR1BhdGhDcmVhdGVNdXRhYmxlKCkpOwotICAgIGZv
ciAoY29uc3QgYXV0byYgcmVjdCA6IHJlY3RzKQotICAgICAgICBDR1BhdGhBZGRSZWN0KGZvY3Vz
UmluZ1BhdGguZ2V0KCksIDAsIENHUmVjdChyZWN0KSk7Ci0KLSAgICBuZWVkc1JlZHJhdyA9IGRy
YXdGb2N1c1JpbmdUb0NvbnRleHRBdFRpbWUocGxhdGZvcm1Db250ZXh0KCksIGZvY3VzUmluZ1Bh
dGguZ2V0KCksIHRpbWVPZmZzZXQpOwotfQotI2VuZGlmCi0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZmxvYXQsIGZs
b2F0IG9mZnNldCwgY29uc3QgQ29sb3ImKQotewotI2lmICFQTEFURk9STShJT1MpCi0gICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmV0YWluUHRyPENH
TXV0YWJsZVBhdGhSZWY+IGZvY3VzUmluZ1BhdGggPSBhZG9wdENGKENHUGF0aENyZWF0ZU11dGFi
bGUoKSk7Ci0gICAgZm9yIChhdXRvJiByZWN0IDogcmVjdHMpCi0gICAgICAgIENHUGF0aEFkZFJl
Y3QoZm9jdXNSaW5nUGF0aC5nZXQoKSwgMCwgQ0dSZWN0SW5zZXQocmVjdCwgLW9mZnNldCwgLW9m
ZnNldCkpOwotCi0gICAgZHJhd0ZvY3VzUmluZ1RvQ29udGV4dChwbGF0Zm9ybUNvbnRleHQoKSwg
Zm9jdXNSaW5nUGF0aC5nZXQoKSk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShyZWN0cyk7Ci0g
ICAgVU5VU0VEX1BBUkFNKG9mZnNldCk7Ci0jZW5kaWYKLX0KLQotI2lmICFQTEFURk9STShJT1Mp
Ci1zdGF0aWMgTlNJbWFnZSAqZmluZEltYWdlKE5TU3RyaW5nKiBmaXJzdENob2ljZU5hbWUsIE5T
U3RyaW5nKiBzZWNvbmRDaG9pY2VOYW1lLCBib29sJiB1c2luZ0RvdCkKLXsKLSAgICAvLyBFdmVu
dHVhbGx5IHdlIHNob3VsZCBiZSBhYmxlIHRvIGdldCByaWQgb2YgdGhlIHNlY29uZENob2ljZU5h
bWUuIEZvciB0aGUgdGltZSBiZWluZyB3ZSBuZWVkIGJvdGggdG8ga2VlcAotICAgIC8vIHRoaXMg
d29ya2luZyBvbiBhbGwgcGxhdGZvcm1zLgotICAgIE5TSW1hZ2UgKmltYWdlID0gW05TSW1hZ2Ug
aW1hZ2VOYW1lZDpmaXJzdENob2ljZU5hbWVdOwotICAgIGlmICghaW1hZ2UpCi0gICAgICAgIGlt
YWdlID0gW05TSW1hZ2UgaW1hZ2VOYW1lZDpzZWNvbmRDaG9pY2VOYW1lXTsKLSAgICBBU1NFUlQo
aW1hZ2UpOyAvLyBpZiBpbWFnZSBpcyBub3QgYXZhaWxhYmxlLCB3ZSB3YW50IHRvIGtub3cKLSAg
ICB1c2luZ0RvdCA9IGltYWdlOwotICAgIHJldHVybiBpbWFnZTsKLX0KLSNlbHNlCi1zdGF0aWMg
UmV0YWluUHRyPENHUGF0dGVyblJlZj4gY3JlYXRlRG90UGF0dGVybihib29sJiB1c2luZ0RvdCwg
Y29uc3QgY2hhciogcmVzb3VyY2VOYW1lKQotewotICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBp
bWFnZSA9IGFkb3B0Q0YoV0tHcmFwaGljc0NyZWF0ZUltYWdlRnJvbUJ1bmRsZVdpdGhOYW1lKHJl
c291cmNlTmFtZSkpOwotICAgIEFTU0VSVChpbWFnZSk7IC8vIGlmIGltYWdlIGlzIG5vdCBhdmFp
bGFibGUsIHdlIHdhbnQgdG8ga25vdwotICAgIHVzaW5nRG90ID0gdHJ1ZTsKLSAgICByZXR1cm4g
YWRvcHRDRihXS0NyZWF0ZVBhdHRlcm5Gcm9tQ0dJbWFnZShpbWFnZS5nZXQoKSkpOwotfQotI2Vu
ZGlmIC8vICFQTEFURk9STShJT1MpCi0KLXN0YXRpYyBOU0ltYWdlICpzcGVsbGluZ0ltYWdlID0g
bnVsbHB0cjsKLXN0YXRpYyBOU0ltYWdlICpncmFtbWFySW1hZ2UgPSBudWxscHRyOwotc3RhdGlj
IE5TSW1hZ2UgKmNvcnJlY3Rpb25JbWFnZSA9IG51bGxwdHI7Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0Ojp1cGRhdGVEb2N1bWVudE1hcmtlclJlc291cmNlcygpCi17Ci0gICAgW3NwZWxsaW5nSW1h
Z2UgcmVsZWFzZV07Ci0gICAgc3BlbGxpbmdJbWFnZSA9IG51bGxwdHI7Ci0gICAgW2dyYW1tYXJJ
bWFnZSByZWxlYXNlXTsKLSAgICBncmFtbWFySW1hZ2UgPSBudWxscHRyOwotICAgIFtjb3JyZWN0
aW9uSW1hZ2UgcmVsZWFzZV07Ci0gICAgY29ycmVjdGlvbkltYWdlID0gbnVsbHB0cjsKLX0KLQot
c3RhdGljIGlubGluZSB2b2lkIHNldFBhdHRlcm5QaGFzZUluVXNlclNwYWNlKENHQ29udGV4dFJl
ZiBjb250ZXh0LCBDR1BvaW50IHBoYXNlUG9pbnQpCi17Ci0gICAgQ0dBZmZpbmVUcmFuc2Zvcm0g
dXNlclRvQmFzZSA9IGdldFVzZXJUb0Jhc2VDVE0oY29udGV4dCk7Ci0gICAgQ0dQb2ludCBwaGFz
ZSA9IENHUG9pbnRBcHBseUFmZmluZVRyYW5zZm9ybShwaGFzZVBvaW50LCB1c2VyVG9CYXNlKTsK
LQotICAgIENHQ29udGV4dFNldFBhdHRlcm5QaGFzZShjb250ZXh0LCBDR1NpemVNYWtlKHBoYXNl
LngsIHBoYXNlLnkpKTsKLX0KLQotLy8gV2ViS2l0IG9uIE1hYyBpcyBhIHN0YW5kYXJkIHBsYXRm
b3JtIGNvbXBvbmVudCwgc28gaXQgbXVzdCB1c2UgdGhlIHN0YW5kYXJkIHBsYXRmb3JtIGFydHdv
cmsgZm9yIHVuZGVybGluZS4KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvckRvY3Vt
ZW50TWFya2VyKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB3aWR0aCwgRG9jdW1lbnRN
YXJrZXJMaW5lU3R5bGUgc3R5bGUpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAg
ICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICAvLyBUaGVzZSBhcmUgdGhlIHNhbWUgZm9yIG1p
c3NwZWxsaW5nIG9yIGJhZCBncmFtbWFyLgotICAgIGludCBwYXR0ZXJuSGVpZ2h0ID0gY01pc3Nw
ZWxsaW5nTGluZVRoaWNrbmVzczsKLSAgICBmbG9hdCBwYXR0ZXJuV2lkdGggPSBjTWlzc3BlbGxp
bmdMaW5lUGF0dGVybldpZHRoOwotCi0gICAgYm9vbCB1c2luZ0RvdDsKLSNpZiAhUExBVEZPUk0o
SU9TKQotICAgIE5TSW1hZ2UgKmltYWdlOwotICAgIE5TQ29sb3IgKmZhbGxiYWNrQ29sb3I7Ci0j
ZWxzZQotICAgIENHUGF0dGVyblJlZiBkb3RQYXR0ZXJuOwotI2VuZGlmCi0gICAgc3dpdGNoIChz
dHlsZSkgewotICAgICAgICBjYXNlIERvY3VtZW50TWFya2VyU3BlbGxpbmdMaW5lU3R5bGU6Ci0g
ICAgICAgIHsKLSAgICAgICAgICAgIC8vIENvbnN0YW50cyBmb3Igc3BlbGxpbmcgcGF0dGVybiBj
b2xvci4KLSAgICAgICAgICAgIHN0YXRpYyBib29sIHVzaW5nRG90Rm9yU3BlbGxpbmcgPSBmYWxz
ZTsKLSNpZiAhUExBVEZPUk0oSU9TKQotICAgICAgICAgICAgaWYgKCFzcGVsbGluZ0ltYWdlKQot
ICAgICAgICAgICAgICAgIHNwZWxsaW5nSW1hZ2UgPSBbZmluZEltYWdlKEAiTlNTcGVsbGluZ0Rv
dCIsIEAiU3BlbGxpbmdEb3QiLCB1c2luZ0RvdEZvclNwZWxsaW5nKSByZXRhaW5dOwotICAgICAg
ICAgICAgaW1hZ2UgPSBzcGVsbGluZ0ltYWdlOwotICAgICAgICAgICAgZmFsbGJhY2tDb2xvciA9
IFtOU0NvbG9yIHJlZENvbG9yXTsKLSNlbHNlCi0gICAgICAgICAgICBzdGF0aWMgQ0dQYXR0ZXJu
UmVmIHNwZWxsaW5nUGF0dGVybiA9IGNyZWF0ZURvdFBhdHRlcm4odXNpbmdEb3RGb3JTcGVsbGlu
ZywgIlNwZWxsaW5nRG90IikubGVha1JlZigpOwotICAgICAgICAgICAgZG90UGF0dGVybiA9IHNw
ZWxsaW5nUGF0dGVybjsKLSNlbmRpZgotICAgICAgICAgICAgdXNpbmdEb3QgPSB1c2luZ0RvdEZv
clNwZWxsaW5nOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBE
b2N1bWVudE1hcmtlckdyYW1tYXJMaW5lU3R5bGU6Ci0gICAgICAgIHsKLSNpZiAhUExBVEZPUk0o
SU9TKQotICAgICAgICAgICAgLy8gQ29uc3RhbnRzIGZvciBncmFtbWFyIHBhdHRlcm4gY29sb3Iu
Ci0gICAgICAgICAgICBzdGF0aWMgYm9vbCB1c2luZ0RvdEZvckdyYW1tYXIgPSBmYWxzZTsKLSAg
ICAgICAgICAgIGlmICghZ3JhbW1hckltYWdlKQotICAgICAgICAgICAgICAgIGdyYW1tYXJJbWFn
ZSA9IFtmaW5kSW1hZ2UoQCJOU0dyYW1tYXJEb3QiLCBAIkdyYW1tYXJEb3QiLCB1c2luZ0RvdEZv
ckdyYW1tYXIpIHJldGFpbl07Ci0gICAgICAgICAgICB1c2luZ0RvdCA9IGdyYW1tYXJJbWFnZTsK
LSAgICAgICAgICAgIGltYWdlID0gZ3JhbW1hckltYWdlOwotICAgICAgICAgICAgZmFsbGJhY2tD
b2xvciA9IFtOU0NvbG9yIGdyZWVuQ29sb3JdOwotICAgICAgICAgICAgYnJlYWs7Ci0jZWxzZQot
ICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0j
ZW5kaWYKLSAgICAgICAgfQotI2lmIFBMQVRGT1JNKE1BQykKLSAgICAgICAgLy8gVG8gc3VwcG9y
dCBjb3JyZWN0aW9uIHBhbmVsLgotICAgICAgICBjYXNlIERvY3VtZW50TWFya2VyQXV0b2NvcnJl
Y3Rpb25SZXBsYWNlbWVudExpbmVTdHlsZToKLSAgICAgICAgY2FzZSBEb2N1bWVudE1hcmtlckRp
Y3RhdGlvbkFsdGVybmF0aXZlc0xpbmVTdHlsZToKLSAgICAgICAgewotICAgICAgICAgICAgLy8g
Q29uc3RhbnRzIGZvciBzcGVsbGluZyBwYXR0ZXJuIGNvbG9yLgotICAgICAgICAgICAgc3RhdGlj
IGJvb2wgdXNpbmdEb3RGb3JTcGVsbGluZyA9IGZhbHNlOwotICAgICAgICAgICAgaWYgKCFjb3Jy
ZWN0aW9uSW1hZ2UpCi0gICAgICAgICAgICAgICAgY29ycmVjdGlvbkltYWdlID0gW2ZpbmRJbWFn
ZShAIk5TQ29ycmVjdGlvbkRvdCIsIEAiQ29ycmVjdGlvbkRvdCIsIHVzaW5nRG90Rm9yU3BlbGxp
bmcpIHJldGFpbl07Ci0gICAgICAgICAgICB1c2luZ0RvdCA9IHVzaW5nRG90Rm9yU3BlbGxpbmc7
Ci0gICAgICAgICAgICBpbWFnZSA9IGNvcnJlY3Rpb25JbWFnZTsKLSAgICAgICAgICAgIGZhbGxi
YWNrQ29sb3IgPSBbTlNDb2xvciBibHVlQ29sb3JdOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSNlbmRpZgotI2lmIFBMQVRGT1JNKElPUykKLSAgICAgICAgY2FzZSBUZXh0Q2hlY2tp
bmdEaWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJuYXRpdmVzTGluZVN0eWxlOgotICAgICAgICB7Ci0g
ICAgICAgICAgICBzdGF0aWMgYm9vbCB1c2luZ0RvdEZvckRpY3RhdGlvblBocmFzZVdpdGhBbHRl
cm5hdGl2ZXMgPSBmYWxzZTsKLSAgICAgICAgICAgIHN0YXRpYyBDR1BhdHRlcm5SZWYgZGljdGF0
aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlc1BhdHRlcm4gPSBjcmVhdGVEb3RQYXR0ZXJuKHVzaW5n
RG90Rm9yRGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlcywgIkRpY3RhdGlvblBocmFzZVdp
dGhBbHRlcm5hdGl2ZXNEb3QiKS5sZWFrUmVmKCk7Ci0gICAgICAgICAgICBkb3RQYXR0ZXJuID0g
ZGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlc1BhdHRlcm47Ci0gICAgICAgICAgICB1c2lu
Z0RvdCA9IHVzaW5nRG90Rm9yRGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlczsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0jZW5kaWYgLy8gUExBVEZPUk0oSU9TKQotICAgICAg
ICBkZWZhdWx0OgotI2lmIFBMQVRGT1JNKElPUykKLSAgICAgICAgICAgIC8vIEZJWE1FOiBTaG91
bGQgcmVtb3ZlIGRlZmF1bHQgY2FzZSBzbyB3ZSBnZXQgY29tcGlsZS10aW1lIGVycm9ycy4KLSAg
ICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotI2VuZGlmIC8vIFBMQVRGT1JNKElPUykK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgRmxvYXRQb2ludCBvZmZzZXRQ
b2ludCA9IHBvaW50OwotCi0gICAgLy8gTWFrZSBzdXJlIHRvIGRyYXcgb25seSBjb21wbGV0ZSBk
b3RzLgotICAgIGlmICh1c2luZ0RvdCkgewotICAgICAgICAvLyBhbGxvdyBzbGlnaHRseSBtb3Jl
IGNvbnNpZGVyaW5nIHRoYXQgdGhlIHBhdHRlcm4gZW5kcyB3aXRoIGEgdHJhbnNwYXJlbnQgcGl4
ZWwKLSAgICAgICAgZmxvYXQgd2lkdGhNb2QgPSBmbW9kZih3aWR0aCwgcGF0dGVybldpZHRoKTsK
LSAgICAgICAgaWYgKHBhdHRlcm5XaWR0aCAtIHdpZHRoTW9kID4gY01pc3NwZWxsaW5nTGluZVBh
dHRlcm5HYXBXaWR0aCkgewotICAgICAgICAgICAgZmxvYXQgZ2FwSW5jbHVkZVdpZHRoID0gMDsK
LSAgICAgICAgICAgIGlmICh3aWR0aCA+IHBhdHRlcm5XaWR0aCkKLSAgICAgICAgICAgICAgICBn
YXBJbmNsdWRlV2lkdGggPSBjTWlzc3BlbGxpbmdMaW5lUGF0dGVybkdhcFdpZHRoOwotICAgICAg
ICAgICAgb2Zmc2V0UG9pbnQubW92ZShmbG9vcigod2lkdGhNb2QgKyBnYXBJbmNsdWRlV2lkdGgp
IC8gMiksIDApOwotICAgICAgICAgICAgd2lkdGggLT0gd2lkdGhNb2Q7Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgCi0gICAgLy8gRklYTUU6IFRoaXMgY29kZSBzaG91bGQgbm90IHVzZSBOU0dyYXBo
aWNzQ29udGV4dCBjdXJyZW50Q29udGV4dAotICAgIC8vIEluIG9yZGVyIHRvIHJlbW92ZSB0aGlz
IHJlcXVpcmVtZW50IHdlIHdpbGwgbmVlZCB0byB1c2UgQ0dQYXR0ZXJuIGluc3RlYWQgb2YgTlND
b2xvcgotICAgIC8vIEZJWE1FOiBUaGlzIGNvZGUgc2hvdWxkIG5vdCBiZSB1c2luZyBzZXRQYXR0
ZXJuUGhhc2VJblVzZXJTcGFjZSwgYXMgdGhpcyBhcHByb2FjaCBpcyB3cm9uZwotICAgIC8vIGZv
ciB0cmFuc2Zvcm1zLgotCi0gICAgLy8gRHJhdyB1bmRlcmxpbmUuCi0gICAgQ0dDb250ZXh0UmVm
IGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKLSAgICBDR0NvbnRleHRTYXZlR1N0YXRlKGNv
bnRleHQpOwotCi0jaWYgUExBVEZPUk0oSU9TKQotICAgIFdLU2V0UGF0dGVybihjb250ZXh0LCBk
b3RQYXR0ZXJuLCBZRVMsIFlFUyk7Ci0jZW5kaWYKLQotICAgIHNldFBhdHRlcm5QaGFzZUluVXNl
clNwYWNlKGNvbnRleHQsIG9mZnNldFBvaW50KTsKLQotICAgIENHUmVjdCBkZXN0aW5hdGlvblJl
Y3QgPSBDR1JlY3RNYWtlKG9mZnNldFBvaW50LngoKSwgb2Zmc2V0UG9pbnQueSgpLCB3aWR0aCwg
cGF0dGVybkhlaWdodCk7Ci0jaWYgIVBMQVRGT1JNKElPUykKLSAgICBpZiAoaW1hZ2UpIHsKLSAg
ICAgICAgLy8gRklYTUU6IFJhdGhlciB0aGFuIGdldHRpbmcgdGhlIE5TSW1hZ2UgYW5kIHRoZW4g
cGlja2luZyB0aGUgQ0dJbWFnZSBmcm9tIGl0LCB3ZSBzaG91bGQgZG8gd2hhdCBpT1MgZG9lcyBh
bmQKLSAgICAgICAgLy8ganVzdCBsb2FkIHRoZSBDR0ltYWdlIGluIHRoZSBmaXJzdCBwbGFjZS4K
LSAgICAgICAgTlNSZWN0IGRvdFJlY3QgPSBOU01ha2VSZWN0KG9mZnNldFBvaW50LngoKSwgb2Zm
c2V0UG9pbnQueSgpLCBwYXR0ZXJuV2lkdGgsIHBhdHRlcm5IZWlnaHQpOwotICAgICAgICBDR0lt
YWdlUmVmIGNnSW1hZ2UgPSBbaW1hZ2UgQ0dJbWFnZUZvclByb3Bvc2VkUmVjdDomZG90UmVjdCBj
b250ZXh0OltOU0dyYXBoaWNzQ29udGV4dCBncmFwaGljc0NvbnRleHRXaXRoR3JhcGhpY3NQb3J0
OmNvbnRleHQgZmxpcHBlZDpZRVNdIGhpbnRzOm51bGxwdHJdOwotICAgICAgICBDR0NvbnRleHRD
bGlwVG9SZWN0KGNvbnRleHQsIGRlc3RpbmF0aW9uUmVjdCk7Ci0gICAgICAgIENHQ29udGV4dERy
YXdUaWxlZEltYWdlKGNvbnRleHQsIE5TUmVjdFRvQ0dSZWN0KGRvdFJlY3QpLCBjZ0ltYWdlKTsK
LSAgICB9IGVsc2UgewotICAgICAgICBDR0NvbnRleHRTZXRGaWxsQ29sb3JXaXRoQ29sb3IoY29u
dGV4dCwgW2ZhbGxiYWNrQ29sb3IgQ0dDb2xvcl0pOwotICAgICAgICBDR0NvbnRleHRGaWxsUmVj
dChjb250ZXh0LCBkZXN0aW5hdGlvblJlY3QpOwotICAgIH0KLSNlbHNlCi0gICAgV0tSZWN0Rmls
bFVzaW5nT3BlcmF0aW9uKGNvbnRleHQsIGRlc3RpbmF0aW9uUmVjdCwga0NHQ29tcG9zaXRlU292
ZXIpOwotI2VuZGlmCi0gICAgCi0gICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShjb250ZXh0KTsK
LX0KLQotQ0dDb2xvclNwYWNlUmVmIGxpbmVhclJHQkNvbG9yU3BhY2VSZWYoKQotewotICAgIHN0
YXRpYyBDR0NvbG9yU3BhY2VSZWYgbGluZWFyU1JHQlNwYWNlID0gbnVsbHB0cjsKLQotICAgIGlm
IChsaW5lYXJTUkdCU3BhY2UpCi0gICAgICAgIHJldHVybiBsaW5lYXJTUkdCU3BhY2U7Ci0KLSAg
ICBSZXRhaW5QdHI8TlNTdHJpbmc+IGljY1Byb2ZpbGVQYXRoID0gW1tOU0J1bmRsZSBidW5kbGVX
aXRoSWRlbnRpZmllcjpAImNvbS5hcHBsZS5XZWJDb3JlIl0gcGF0aEZvclJlc291cmNlOkAibGlu
ZWFyU1JHQiIgb2ZUeXBlOkAiaWNjIl07Ci0gICAgUmV0YWluUHRyPE5TRGF0YT4gaWNjUHJvZmls
ZURhdGEgPSBhZG9wdE5TKFtbTlNEYXRhIGFsbG9jXSBpbml0V2l0aENvbnRlbnRzT2ZGaWxlOmlj
Y1Byb2ZpbGVQYXRoLmdldCgpXSk7Ci0KLSAgICBpZiAoaWNjUHJvZmlsZURhdGEpCi0jcHJhZ21h
IGNsYW5nIGRpYWdub3N0aWMgcHVzaAotI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQg
Ii1XZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMiCi0gICAgICAgIGxpbmVhclNSR0JTcGFjZSA9IENH
Q29sb3JTcGFjZUNyZWF0ZVdpdGhJQ0NQcm9maWxlKChDRkRhdGFSZWYpaWNjUHJvZmlsZURhdGEu
Z2V0KCkpOwotI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcAotCi0gICAgLy8gSWYgd2UgZmFp
bCB0byBsb2FkIHRoZSBsaW5lYXJpemVkIHNSR0IgSUNDIHByb2ZpbGUsIGZhbGwgYmFjayB0byBz
UkdCLgotICAgIGlmICghbGluZWFyU1JHQlNwYWNlKQotICAgICAgICByZXR1cm4gc1JHQkNvbG9y
U3BhY2VSZWYoKTsKLQotICAgIHJldHVybiBsaW5lYXJTUkdCU3BhY2U7Ci19Ci0KLX0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9XZWJHTExheWVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvV2ViR0xMYXllci5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNTczNTkwYTNmZGZjN2U2NmRlNTgzNzMzMjI5YjRk
NTFhZTFhNjk3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9XZWJHTExheWVyLmgKKysrIC9k
ZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAotICovCi0KLSNpZm5kZWYgV2ViR0xMYXllcl9oCi0jZGVmaW5lIFdlYkdMTGF5ZXJf
aAotCi0jaW1wb3J0IDxRdWFydHpDb3JlL1F1YXJ0ekNvcmUuaD4KLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotICAgIGNsYXNzIEdyYXBoaWNzTGF5ZXI7Ci0gICAgY2xhc3MgR3JhcGhpY3NDb250ZXh0
M0Q7Ci19Ci0KLSNpZiBQTEFURk9STShJT1MpCi1AaW50ZXJmYWNlIFdlYkdMTGF5ZXIgOiBDQUVB
R0xMYXllcgotI2Vsc2UKLUBpbnRlcmZhY2UgV2ViR0xMYXllciA6IENBT3BlbkdMTGF5ZXIKLSNl
bmRpZgotewotICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEKiBfY29udGV4dDsKLSAgICBm
bG9hdCBfZGV2aWNlUGl4ZWxSYXRpbzsKLX0KLQotQHByb3BlcnR5IChub25hdG9taWMpIFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0OwotCi0tIChpZClpbml0V2l0aEdyYXBoaWNz
Q29udGV4dDNEOihXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRCopY29udGV4dDsKLQotLSAoQ0dJ
bWFnZVJlZiljb3B5SW1hZ2VTbmFwc2hvdFdpdGhDb2xvclNwYWNlOihDR0NvbG9yU3BhY2VSZWYp
Y29sb3JTcGFjZTsKLQotQGVuZAotCi0jZW5kaWYgLy8gV2ViR0xMYXllcl9oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvV2ViR0xMYXllci5tbSBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9XZWJHTExheWVyLm1tCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NjUwODg0NzFhNTRhMzAyZTlmNmY5NGY2NDhmMjY4YmM0
MGQxNDk3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9XZWJHTExheWVyLm1tCisrKyAvZGV2
L251bGwKQEAgLTEsMTg4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFdFQkdMKQot
Ci0jaW1wb3J0ICJXZWJHTExheWVyLmgiCi0KLSNpbXBvcnQgIkdyYXBoaWNzQ29udGV4dDNELmgi
Ci0jaW1wb3J0ICJHcmFwaGljc0NvbnRleHRDRy5oIgotI2ltcG9ydCAiR3JhcGhpY3NMYXllci5o
IgotI2ltcG9ydCAiR3JhcGhpY3NMYXllckNBLmgiCi0jaW1wb3J0ICJQbGF0Zm9ybUNBTGF5ZXIu
aCIKLSNpbXBvcnQgPHd0Zi9GYXN0TWFsbG9jLmg+Ci0jaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+
Ci0KLSNpZiAhUExBVEZPUk0oSU9TKQotI2ltcG9ydCA8T3BlbkdML09wZW5HTC5oPgotI2ltcG9y
dCA8T3BlbkdML2dsLmg+Ci0jZW5kaWYKLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLUBp
bXBsZW1lbnRhdGlvbiBXZWJHTExheWVyCi0KLUBzeW50aGVzaXplIGNvbnRleHQ9X2NvbnRleHQ7
Ci0KLS0oaWQpaW5pdFdpdGhHcmFwaGljc0NvbnRleHQzRDooR3JhcGhpY3NDb250ZXh0M0QqKWNv
bnRleHQKLXsKLSAgICBfY29udGV4dCA9IGNvbnRleHQ7Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0
XTsKLSAgICBfZGV2aWNlUGl4ZWxSYXRpbyA9IGNvbnRleHQtPmdldENvbnRleHRBdHRyaWJ1dGVz
KCkuZGV2aWNlUGl4ZWxSYXRpbzsKLSNpZiBQTEFURk9STShNQUMpCi0gICAgc2VsZi5jb250ZW50
c1NjYWxlID0gX2RldmljZVBpeGVsUmF0aW87Ci0gICAgc2VsZi5jb2xvcnNwYWNlID0gc1JHQkNv
bG9yU3BhY2VSZWYoKTsKLSNlbmRpZgotICAgIHJldHVybiBzZWxmOwotfQotCi0jaWYgIVBMQVRG
T1JNKElPUykKLS0oQ0dMUGl4ZWxGb3JtYXRPYmopY29weUNHTFBpeGVsRm9ybWF0Rm9yRGlzcGxh
eU1hc2s6KHVpbnQzMl90KW1hc2sKLXsKLSAgICAvLyBGSVhNRTogVGhlIG1hc2sgcGFyYW0gdGVs
bHMgeW91IHdoaWNoIGRpc3BsYXkgKG9uIGEgbXVsdGktZGlzcGxheSBzeXN0ZW0pCi0gICAgLy8g
aXMgdG8gYmUgdXNlZC4gQnV0IHNpbmNlIHdlIGFyZSBub3cgZ2V0dGluZyB0aGUgcGl4ZWwgZm9y
bWF0IGZyb20gdGhlCi0gICAgLy8gQ2FudmFzIENHTCBjb250ZXh0LCB3ZSBkb24ndCB1c2UgaXQu
IFRoaXMgc2VlbXMgdG8gZG8gdGhlIHJpZ2h0IHRoaW5nIG9uCi0gICAgLy8gb25lIG11bHRpLWRp
c3BsYXkgc3lzdGVtLiBCdXQgdGhlcmUgbWF5IGJlIGNhc2VzIHdoZXJlIHRoaXMgaXMgbm90IHRo
ZSBjYXNlLgotICAgIC8vIElmIG5lZWRlZCB3ZSB3aWxsIGhhdmUgdG8gc2V0IHRoZSBkaXNwbGF5
IG1hc2sgaW4gdGhlIENhbnZhcyBDR0xDb250ZXh0IGFuZAotICAgIC8vIG1ha2Ugc3VyZSBpdCBt
YXRjaGVzLgotICAgIFVOVVNFRF9QQVJBTShtYXNrKTsKLSAgICByZXR1cm4gQ0dMUmV0YWluUGl4
ZWxGb3JtYXQoQ0dMR2V0UGl4ZWxGb3JtYXQoX2NvbnRleHQtPnBsYXRmb3JtR3JhcGhpY3NDb250
ZXh0M0QoKSkpOwotfQotCi0tKENHTENvbnRleHRPYmopY29weUNHTENvbnRleHRGb3JQaXhlbEZv
cm1hdDooQ0dMUGl4ZWxGb3JtYXRPYmopcGl4ZWxGb3JtYXQKLXsKLSAgICBDR0xDb250ZXh0T2Jq
IGNvbnRleHRPYmo7Ci0gICAgQ0dMQ3JlYXRlQ29udGV4dChwaXhlbEZvcm1hdCwgX2NvbnRleHQt
PnBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QoKSwgJmNvbnRleHRPYmopOwotICAgIHJldHVybiBj
b250ZXh0T2JqOwotfQotCi0tKHZvaWQpZHJhd0luQ0dMQ29udGV4dDooQ0dMQ29udGV4dE9iailn
bENvbnRleHQgcGl4ZWxGb3JtYXQ6KENHTFBpeGVsRm9ybWF0T2JqKXBpeGVsRm9ybWF0IGZvckxh
eWVyVGltZTooQ0ZUaW1lSW50ZXJ2YWwpdGltZUludGVydmFsIGRpc3BsYXlUaW1lOihjb25zdCBD
VlRpbWVTdGFtcCAqKXRpbWVTdGFtcAotewotICAgIGlmICghX2NvbnRleHQpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIF9jb250ZXh0LT5wcmVwYXJlVGV4dHVyZSgpOwotCi0gICAgQ0dMU2V0Q3Vy
cmVudENvbnRleHQoZ2xDb250ZXh0KTsKLQotICAgIENHUmVjdCBmcmFtZSA9IFtzZWxmIGZyYW1l
XTsKLSAgICBmcmFtZS5zaXplLndpZHRoICo9IF9kZXZpY2VQaXhlbFJhdGlvOwotICAgIGZyYW1l
LnNpemUuaGVpZ2h0ICo9IF9kZXZpY2VQaXhlbFJhdGlvOwotCi0gICAgLy8gZHJhdyB0aGUgRkJP
IGludG8gdGhlIGxheWVyCi0gICAgZ2xWaWV3cG9ydCgwLCAwLCBmcmFtZS5zaXplLndpZHRoLCBm
cmFtZS5zaXplLmhlaWdodCk7Ci0gICAgZ2xNYXRyaXhNb2RlKEdMX1BST0pFQ1RJT04pOwotICAg
IGdsTG9hZElkZW50aXR5KCk7Ci0gICAgZ2xPcnRobygtMSwgMSwgLTEsIDEsIC0xLCAxKTsKLSAg
ICBnbE1hdHJpeE1vZGUoR0xfTU9ERUxWSUVXKTsKLSAgICBnbExvYWRJZGVudGl0eSgpOwotCi0g
ICAgZ2xFbmFibGUoR0xfVEVYVFVSRV8yRCk7Ci0gICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJF
XzJELCBfY29udGV4dC0+cGxhdGZvcm1UZXh0dXJlKCkpOwotCi0gICAgZ2xCZWdpbihHTF9UUklB
TkdMRV9GQU4pOwotICAgICAgICBnbFRleENvb3JkMmYoMCwgMCk7Ci0gICAgICAgIGdsVmVydGV4
MmYoLTEsIC0xKTsKLSAgICAgICAgZ2xUZXhDb29yZDJmKDEsIDApOwotICAgICAgICBnbFZlcnRl
eDJmKDEsIC0xKTsKLSAgICAgICAgZ2xUZXhDb29yZDJmKDEsIDEpOwotICAgICAgICBnbFZlcnRl
eDJmKDEsIDEpOwotICAgICAgICBnbFRleENvb3JkMmYoMCwgMSk7Ci0gICAgICAgIGdsVmVydGV4
MmYoLTEsIDEpOwotICAgIGdsRW5kKCk7Ci0KLSAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVf
MkQsIDApOwotICAgIGdsRGlzYWJsZShHTF9URVhUVVJFXzJEKTsKLQotICAgIC8vIENhbGwgc3Vw
ZXIgdG8gZmluYWxpemUgdGhlIGRyYXdpbmcuIEJ5IGRlZmF1bHQgYWxsIGl0IGRvZXMgaXMgY2Fs
bCBnbEZsdXNoKCkuCi0gICAgW3N1cGVyIGRyYXdJbkNHTENvbnRleHQ6Z2xDb250ZXh0IHBpeGVs
Rm9ybWF0OnBpeGVsRm9ybWF0IGZvckxheWVyVGltZTp0aW1lSW50ZXJ2YWwgZGlzcGxheVRpbWU6
dGltZVN0YW1wXTsKLX0KLQotc3RhdGljIHZvaWQgZnJlZURhdGEodm9pZCAqLCBjb25zdCB2b2lk
ICpkYXRhLCBzaXplX3QgLyogc2l6ZSAqLykKLXsKLSAgICBmYXN0RnJlZShjb25zdF9jYXN0PHZv
aWQgKj4oZGF0YSkpOwotfQotI2VuZGlmCi0KLS0oQ0dJbWFnZVJlZiljb3B5SW1hZ2VTbmFwc2hv
dFdpdGhDb2xvclNwYWNlOihDR0NvbG9yU3BhY2VSZWYpY29sb3JTcGFjZQotewotICAgIGlmICgh
X2NvbnRleHQpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0jaWYgUExBVEZPUk0oSU9TKQot
ICAgIFVOVVNFRF9QQVJBTShjb2xvclNwYWNlKTsKLSAgICByZXR1cm4gbnVsbHB0cjsKLSNlbHNl
Ci0gICAgQ0dMU2V0Q3VycmVudENvbnRleHQoX2NvbnRleHQtPnBsYXRmb3JtR3JhcGhpY3NDb250
ZXh0M0QoKSk7Ci0KLSAgICBSZXRhaW5QdHI8Q0dDb2xvclNwYWNlUmVmPiBpbWFnZUNvbG9yU3Bh
Y2UgPSBjb2xvclNwYWNlOwotICAgIGlmICghaW1hZ2VDb2xvclNwYWNlKQotICAgICAgICBpbWFn
ZUNvbG9yU3BhY2UgPSBzUkdCQ29sb3JTcGFjZVJlZigpOwotCi0gICAgQ0dSZWN0IGxheWVyQm91
bmRzID0gQ0dSZWN0SW50ZWdyYWwoW3NlbGYgYm91bmRzXSk7Ci0KLSAgICBzaXplX3Qgd2lkdGgg
PSBsYXllckJvdW5kcy5zaXplLndpZHRoICogX2RldmljZVBpeGVsUmF0aW87Ci0gICAgc2l6ZV90
IGhlaWdodCA9IGxheWVyQm91bmRzLnNpemUuaGVpZ2h0ICogX2RldmljZVBpeGVsUmF0aW87Ci0K
LSAgICBzaXplX3Qgcm93Qnl0ZXMgPSAod2lkdGggKiA0ICsgMTUpICYgfjE1OwotICAgIHNpemVf
dCBkYXRhU2l6ZSA9IHJvd0J5dGVzICogaGVpZ2h0OwotICAgIHZvaWQqIGRhdGEgPSBmYXN0TWFs
bG9jKGRhdGFTaXplKTsKLSAgICBpZiAoIWRhdGEpCi0gICAgICAgIHJldHVybiBudWxscHRyOwot
Ci0gICAgZ2xQaXhlbFN0b3JlaShHTF9QQUNLX1JPV19MRU5HVEgsIHJvd0J5dGVzIC8gNCk7Ci0g
ICAgZ2xSZWFkUGl4ZWxzKDAsIDAsIHdpZHRoLCBoZWlnaHQsIEdMX0JHUkEsIEdMX1VOU0lHTkVE
X0lOVF84XzhfOF84X1JFViwgZGF0YSk7Ci0KLSAgICBDR0RhdGFQcm92aWRlclJlZiBwcm92aWRl
ciA9IENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEoMCwgZGF0YSwgZGF0YVNpemUsIGZyZWVE
YXRhKTsKLSAgICBDR0ltYWdlUmVmIGltYWdlID0gQ0dJbWFnZUNyZWF0ZSh3aWR0aCwgaGVpZ2h0
LCA4LCAzMiwgcm93Qnl0ZXMsIGltYWdlQ29sb3JTcGFjZS5nZXQoKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrQ0dJbWFnZUFscGhhUHJlbXVsdGlw
bGllZEZpcnN0IHwga0NHQml0bWFwQnl0ZU9yZGVyMzJIb3N0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGVyLCAwLCB0cnVlLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtDR1JlbmRlcmluZ0lu
dGVudERlZmF1bHQpOwotICAgIENHRGF0YVByb3ZpZGVyUmVsZWFzZShwcm92aWRlcik7Ci0gICAg
cmV0dXJuIGltYWdlOwotI2VuZGlmCi19Ci0KLS0gKHZvaWQpZGlzcGxheQotewotICAgIGlmICgh
X2NvbnRleHQpCi0gICAgICAgIHJldHVybjsKLQotI2lmIFBMQVRGT1JNKElPUykKLSAgICBfY29u
dGV4dC0+ZW5kUGFpbnQoKTsKLSNlbHNlCi0gICAgW3N1cGVyIGRpc3BsYXldOwotI2VuZGlmCi0g
ICAgX2NvbnRleHQtPm1hcmtMYXllckNvbXBvc2l0ZWQoKTsKLSAgICBQbGF0Zm9ybUNBTGF5ZXIq
IGxheWVyID0gUGxhdGZvcm1DQUxheWVyOjpwbGF0Zm9ybUNBTGF5ZXIoc2VsZik7Ci0gICAgaWYg
KGxheWVyICYmIGxheWVyLT5vd25lcigpKQotICAgICAgICBsYXllci0+b3duZXIoKS0+cGxhdGZv
cm1DQUxheWVyTGF5ZXJEaWREaXNwbGF5KGxheWVyKTsKLX0KLQotQGVuZAotCi0jZW5kaWYgLy8g
RU5BQkxFKFdFQkdMKQo=
</data>
<flag name="review"
          id="336173"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>