<?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>75493</bug_id>
          
          <creation_ts>2012-01-03 14:06:06 -0800</creation_ts>
          <short_desc>Exclude Mac&apos;s PlatformEventFactory from iOS</short_desc>
          <delta_ts>2012-01-03 18:26:35 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>UI Events</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Benjamin Poulain">benjamin</reporter>
          <assigned_to name="Benjamin Poulain">benjamin</assigned_to>
          <cc>ddkilzer</cc>
    
    <cc>sam</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>529035</commentid>
    <comment_count>0</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-01-03 14:06:06 -0800</bug_when>
    <thetext>PlatformEventFactory is specific to OS X, we should exclude it from iOS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529047</commentid>
    <comment_count>1</comment_count>
      <attachid>120994</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-01-03 14:14:20 -0800</bug_when>
    <thetext>Created attachment 120994
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529052</commentid>
    <comment_count>2</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-01-03 14:15:33 -0800</bug_when>
    <thetext>The renaming is purely optional. I did it for clarity so we have PlatformEventFactoryMac and PlatformEventFactoryIOS. Different opinions are also welcome :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529225</commentid>
    <comment_count>3</comment_count>
      <attachid>120994</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-03 18:26:31 -0800</bug_when>
    <thetext>Comment on attachment 120994
Patch

Clearing flags on attachment: 120994

Committed r103997: &lt;http://trac.webkit.org/changeset/103997&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529226</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-03 18:26:35 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>120994</attachid>
            <date>2012-01-03 14:14:20 -0800</date>
            <delta_ts>2012-01-03 18:26:31 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-75493-20120103141419.patch</filename>
            <type>text/plain</type>
            <size>54370</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAzOTQ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDgyZmVlNmM4OWFiNjA3
ZjkwZDA0ZTRlODAxZDY1MGY1ZDI3MjljYy4uOTUyMTEyMWRhZWJhZjlkZDExOWFmN2YzZTE2Y2Ew
Yjk3NGFlNjQwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDEyLTAxLTAzICBCZW5q
YW1pbiBQb3VsYWluICA8YnBvdWxhaW5AYXBwbGUuY29tPgorCisgICAgICAgIEV4Y2x1ZGUgTWFj
J3MgUGxhdGZvcm1FdmVudEZhY3RvcnkgZnJvbSBpT1MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc1NDkzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZSBQbGF0Zm9ybUV2ZW50RmFjdG9yeS4oaHxjcHAp
IHRvIFBsYXRmb3JtRXZlbnRGYWN0b3J5TWFjKGh8Y3BwKSBhbmQgZXhjbHVkZSB0aGUgZmlsZQor
ICAgICAgICBmcm9tIGlPUyBidWlsZC4KKworICAgICAgICAqIENvbmZpZ3VyYXRpb25zL1dlYkNv
cmUueGNjb25maWc6IEFsc28gZXhjbHVkZSBFdmVudEhhbmRsZXJNYWMgZm9yIGNvbnNpc3RlbmN5
LgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
KiBwYWdlL21hYy9FdmVudEhhbmRsZXJNYWMubW06CisgICAgICAgICogcGxhdGZvcm0vbWFjL1Bs
YXRmb3JtRXZlbnRGYWN0b3J5TWFjLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tYWMvUGxhdGZvcm1FdmVudEZhY3RvcnkuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMv
UGxhdGZvcm1FdmVudEZhY3RvcnlNYWMubW06IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tYWMvUGxhdGZvcm1FdmVudEZhY3RvcnkubW0uCisgICAgICAgIChXZWJDb3JlOjpn
bG9iYWxQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpnbG9iYWxQb2ludEZvckV2ZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OnBvaW50Rm9yRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6bW91c2VC
dXR0b25Gb3JFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjptb3VzZUV2ZW50VHlwZUZvckV2ZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OmNsaWNrQ291bnRGb3JFdmVudCk6CisgICAgICAgIChXZWJD
b3JlOjptb21lbnR1bVBoYXNlRm9yRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6cGhhc2VGb3JF
dmVudCk6CisgICAgICAgIChXZWJDb3JlOjpnZXN0dXJlRXZlbnRUeXBlRm9yRXZlbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6dGV4dEZyb21FdmVudCk6CisgICAgICAgIChXZWJDb3JlOjp1bm1vZGlm
aWVkVGV4dEZyb21FdmVudCk6CisgICAgICAgIChXZWJDb3JlOjprZXlJZGVudGlmaWVyRm9yS2V5
RXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6aXNLZXlwYWRFdmVudCk6CisgICAgICAgIChXZWJD
b3JlOjp3aW5kb3dzS2V5Q29kZUZvcktleUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OmlzS2V5
VXBFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjptb2RpZmllcnNGb3JFdmVudCk6CisgICAgICAg
IChXZWJDb3JlOjpQbGF0Zm9ybU1vdXNlRXZlbnRCdWlsZGVyOjpQbGF0Zm9ybU1vdXNlRXZlbnRC
dWlsZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtRXZlbnRGYWN0b3J5OjpjcmVhdGVQ
bGF0Zm9ybU1vdXNlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1XaGVlbEV2ZW50
QnVpbGRlcjo6UGxhdGZvcm1XaGVlbEV2ZW50QnVpbGRlcik6CisgICAgICAgIChXZWJDb3JlOjpQ
bGF0Zm9ybUV2ZW50RmFjdG9yeTo6Y3JlYXRlUGxhdGZvcm1XaGVlbEV2ZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlBsYXRmb3JtS2V5Ym9hcmRFdmVudEJ1aWxkZXI6OlBsYXRmb3JtS2V5Ym9hcmRF
dmVudEJ1aWxkZXIpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1FdmVudEZhY3Rvcnk6OmNy
ZWF0ZVBsYXRmb3JtS2V5Ym9hcmRFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUdl
c3R1cmVFdmVudEJ1aWxkZXI6OlBsYXRmb3JtR2VzdHVyZUV2ZW50QnVpbGRlcik6CisgICAgICAg
IChXZWJDb3JlOjpQbGF0Zm9ybUV2ZW50RmFjdG9yeTo6Y3JlYXRlUGxhdGZvcm1HZXN0dXJlRXZl
bnQpOgorCiAyMDEyLTAxLTAzICBBbGV4aXMgTWVuYXJkICA8YWxleGlzLm1lbmFyZEBvcGVuYm9z
c2Eub3JnPgogCiAgICAgICAgIGdldENvbXB1dGVkU3R5bGUgZm9yIGJvcmRlciBpcyBub3QgaW1w
bGVtZW50ZWQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Db25maWd1cmF0aW9ucy9XZWJD
b3JlLnhjY29uZmlnIGIvU291cmNlL1dlYkNvcmUvQ29uZmlndXJhdGlvbnMvV2ViQ29yZS54Y2Nv
bmZpZwppbmRleCA1ZmUxMTY0YmM3MjU2NjM1YjlmY2I2YjdkZGEwYTZlNmY4NjBmY2Y1Li5hZGQz
NDE2M2I4NDNhOTZhMmY0ZWQyNjZiODZjOTU2ZWMyNDE2N2Q1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Db25maWd1cmF0aW9ucy9XZWJDb3JlLnhjY29uZmlnCisrKyBiL1NvdXJjZS9XZWJD
b3JlL0NvbmZpZ3VyYXRpb25zL1dlYkNvcmUueGNjb25maWcKQEAgLTgxLDcgKzgxLDcgQEAgRVhD
TFVERURfU09VUkNFX0ZJTEVfTkFNRVNfU1ZHX0RPTV9PQkpDX0JJTkRJTkdTXyA9IERPTVNWRyou
KiBET01IVE1MRnJhbWVFbGVtZW4KIEVYQ0xVREVEX1NPVVJDRV9GSUxFX05BTUVTX1NWR19ET01f
T0JKQ19CSU5ESU5HU19FTkFCTEVfU1ZHX0RPTV9PQkpDX0JJTkRJTkdTID0gOwogCiBFWENMVURF
RF9TT1VSQ0VfRklMRV9OQU1FUyA9ICQoRVhDTFVERURfU09VUkNFX0ZJTEVfTkFNRVNfJChSRUFM
X1BMQVRGT1JNX05BTUUpKSAkKEVYQ0xVREVEX1NPVVJDRV9GSUxFX05BTUVTX1NWR19ET01fT0JK
Q19CSU5ESU5HUyk7Ci1FWENMVURFRF9TT1VSQ0VfRklMRV9OQU1FU19pcGhvbmVvcyA9ICoudGlm
ZiAqQ3Vyc29yLnBuZyBDdXJzb3IuY3BwIEN1cnNvck1hYy5tbSBIVE1MQ29udmVydGVyLm1tIEtp
bGxSaW5nTWFjLm1tIE1lbW9yeVByZXNzdXJlSGFuZGxlck1hYy5tbSBTU0xLZXlHZW5lcmF0b3JN
YWMuY3BwIFNlYXJjaFBvcHVwTWVudU1hYy5tbSBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
Lm1tIFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIubW0gV2ViV2luZG93QW5p
bWF0aW9uLm1tIGxvY2FsaXplZFN0cmluZ3MuanM7CitFWENMVURFRF9TT1VSQ0VfRklMRV9OQU1F
U19pcGhvbmVvcyA9ICoudGlmZiAqQ3Vyc29yLnBuZyBDdXJzb3IuY3BwIEN1cnNvck1hYy5tbSBF
dmVudEhhbmRsZXJNYWMubW0gSFRNTENvbnZlcnRlci5tbSBLaWxsUmluZ01hYy5tbSBNZW1vcnlQ
cmVzc3VyZUhhbmRsZXJNYWMubW0gUGxhdGZvcm1FdmVudEZhY3RvcnlNYWMubW0gU1NMS2V5R2Vu
ZXJhdG9yTWFjLmNwcCBTZWFyY2hQb3B1cE1lbnVNYWMubW0gV2ViVmlkZW9GdWxsc2NyZWVuQ29u
dHJvbGxlci5tbSBXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyLm1tIFdlYldp
bmRvd0FuaW1hdGlvbi5tbSBsb2NhbGl6ZWRTdHJpbmdzLmpzOwogRVhDTFVERURfU09VUkNFX0ZJ
TEVfTkFNRVNfaXBob25lc2ltdWxhdG9yID0gJChFWENMVURFRF9TT1VSQ0VfRklMRV9OQU1FU19p
cGhvbmVvcyk7CiBFWENMVURFRF9TT1VSQ0VfRklMRV9OQU1FU19tYWNvc3ggPSAqSU9TLmggKklP
Uy5jcHAgKklPUy5tbSBLaWxsUmluZ05vbmUuY3BwCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAxOGM3MDczZTUyYTkyZjBlYjlj
MzFmN2I3M2NiMDEwZmMwNmI4YjZjLi43NjU0YWEwMGQwNTI1ZDE3NmE5ODczOWQwMjBiNWNhYWQw
MDFmOGE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCkBAIC01MjQ4LDggKzUyNDgsOCBAQAogCQlCQ0E4QzgxRjExRTNEMzY5MDA4MTJG
QjcgLyogQmFja0ZvcndhcmRDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDQThDODFEMTFFM0QzNjkwMDgxMkZCNyAvKiBCYWNrRm9y
d2FyZENvbnRyb2xsZXIuY3BwICovOyB9OwogCQlCQ0E4Q0E1RjExRTRFNkQxMDA4MTJGQjcgLyog
QmFja0ZvcndhcmRMaXN0SW1wbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCQ0E4Q0E1RDExRTRFNkQxMDA4MTJGQjcgLyogQmFja0ZvcndhcmRMaXN0
SW1wbC5jcHAgKi87IH07CiAJCUJDQThDQTYwMTFFNEU2RDEwMDgxMkZCNyAvKiBCYWNrRm9yd2Fy
ZExpc3RJbXBsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCQ0E4Q0E1RTExRTRFNkQxMDA4MTJGQjcgLyogQmFja0ZvcndhcmRMaXN0SW1wbC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUJDQUE0ODZGMTRB
MDUyNTMwMDg4RkFDNCAvKiBQbGF0Zm9ybUV2ZW50RmFjdG9yeS5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDQUE0ODZEMTRBMDUyNTMwMDg4RkFDNCAv
KiBQbGF0Zm9ybUV2ZW50RmFjdG9yeS5tbSAqLzsgfTsKLQkJQkNBQTQ4NzAxNEEwNTI1MzAwODhG
QUM0IC8qIFBsYXRmb3JtRXZlbnRGYWN0b3J5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0FBNDg2RTE0QTA1MjUzMDA4OEZBQzQgLyogUGxhdGZvcm1F
dmVudEZhY3RvcnkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQlCQ0FBNDg2RjE0QTA1MjUzMDA4OEZBQzQgLyogUGxhdGZvcm1FdmVudEZhY3RvcnlN
YWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0FB
NDg2RDE0QTA1MjUzMDA4OEZBQzQgLyogUGxhdGZvcm1FdmVudEZhY3RvcnlNYWMubW0gKi87IH07
CisJCUJDQUE0ODcwMTRBMDUyNTMwMDg4RkFDNCAvKiBQbGF0Zm9ybUV2ZW50RmFjdG9yeU1hYy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNBQTQ4NkUx
NEEwNTI1MzAwODhGQUM0IC8qIFBsYXRmb3JtRXZlbnRGYWN0b3J5TWFjLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkNBQTkwQzMwQTdFQkE2MDAw
OEIxMjI5IC8qIFNjcm9sbGJhci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCQ0FBOTBDMjBBN0VCQTYwMDA4QjEyMjkgLyogU2Nyb2xsYmFyLmNwcCAq
LzsgfTsKIAkJQkNBQjQxODExM0UzNTZFODAwRDhBQUYzIC8qIFJlZ2lvbi5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0FCNDE3RjEzRTM1NkU4MDBE
OEFBRjMgLyogUmVnaW9uLmNwcCAqLzsgfTsKIAkJQkNBQjQxODIxM0UzNTZFODAwRDhBQUYzIC8q
IFJlZ2lvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QkNBQjQxODAxM0UzNTZFODAwRDhBQUYzIC8qIFJlZ2lvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xMjYxOSw4ICsxMjYxOSw4IEBACiAJCUJD
QThDODFEMTFFM0QzNjkwMDgxMkZCNyAvKiBCYWNrRm9yd2FyZENvbnRyb2xsZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQmFja0ZvcndhcmRDb250cm9sbGVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNBOENBNUQxMUU0RTZEMTAwODEyRkI3
IC8qIEJhY2tGb3J3YXJkTGlzdEltcGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gQmFja0ZvcndhcmRMaXN0SW1wbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUJDQThDQTVFMTFFNEU2RDEwMDgxMkZCNyAvKiBCYWNrRm9yd2FyZExpc3RJbXBsLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJhY2tGb3J3YXJkTGlzdEltcGwuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQkNBQTQ4NkQxNEEwNTI1MzAwODhGQUM0IC8q
IFBsYXRmb3JtRXZlbnRGYWN0b3J5Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gUGxhdGZvcm1FdmVudEZhY3RvcnkubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCUJDQUE0ODZFMTRBMDUyNTMwMDg4RkFDNCAvKiBQbGF0Zm9ybUV2ZW50RmFjdG9yeS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF0Zm9ybUV2ZW50RmFjdG9yeS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQ0FBNDg2RDE0QTA1MjUzMDA4OEZBQzQg
LyogUGxhdGZvcm1FdmVudEZhY3RvcnlNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IHBhdGggPSBQbGF0Zm9ybUV2ZW50RmFjdG9yeU1hYy5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQkNBQTQ4NkUxNEEwNTI1MzAwODhGQUM0IC8qIFBsYXRmb3JtRXZlbnRG
YWN0b3J5TWFjLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRmb3JtRXZl
bnRGYWN0b3J5TWFjLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDQUE5MEMyMEE3
RUJBNjAwMDhCMTIyOSAvKiBTY3JvbGxiYXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFNjcm9sbGJhci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUJDQUI0MTdGMTNFMzU2RTgwMEQ4QUFGMyAvKiBSZWdpb24uY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gUmVnaW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQkNBQjQxODAxM0UzNTZFODAwRDhBQUYzIC8qIFJlZ2lvbi5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBSZWdpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTE1NjE2LDggKzE1NjE2LDggQEAKIAkJCQk0QjI3MDk4MTBBRjJFNUUwMDA2NTEyN0YgLyog
UGFzdGVib2FyZE1hYy5tbSAqLywKIAkJCQlDREVBNzYyRTE0NjA4NERFMDA4QjMxRjEgLyogUGxh
dGZvcm1DbG9ja0NBLmNwcCAqLywKIAkJCQlDREVBNzYyRjE0NjA4NEVFMDA4QjMxRjEgLyogUGxh
dGZvcm1DbG9ja0NBLmggKi8sCi0JCQkJQkNBQTQ4NkUxNEEwNTI1MzAwODhGQUM0IC8qIFBsYXRm
b3JtRXZlbnRGYWN0b3J5LmggKi8sCi0JCQkJQkNBQTQ4NkQxNEEwNTI1MzAwODhGQUM0IC8qIFBs
YXRmb3JtRXZlbnRGYWN0b3J5Lm1tICovLAorCQkJCUJDQUE0ODZFMTRBMDUyNTMwMDg4RkFDNCAv
KiBQbGF0Zm9ybUV2ZW50RmFjdG9yeU1hYy5oICovLAorCQkJCUJDQUE0ODZEMTRBMDUyNTMwMDg4
RkFDNCAvKiBQbGF0Zm9ybUV2ZW50RmFjdG9yeU1hYy5tbSAqLywKIAkJCQlCQzk0RDEwNzBDMjc0
Rjg4MDA2QkM2MTcgLyogUGxhdGZvcm1TY3JlZW5NYWMubW0gKi8sCiAJCQkJRDM5RDAwNkMxMUY4
RTMwODAwNjA0MUYyIC8qIFBvcHVwTWVudU1hYy5oICovLAogCQkJCTA2NjhFMThFMEFERDk2NDAw
MDQxMjhFMCAvKiBQb3B1cE1lbnVNYWMubW0gKi8sCkBAIC0yNDA2Nyw3ICsyNDA2Nyw3IEBACiAJ
CQkJNDk5QjNFQzUxMjhDQ0M0NzAwRTcyNkMyIC8qIFBsYXRmb3JtQ0FMYXllci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNDkzRTVFMDkxMkQ2NDIwNTAwMDIwMDgxIC8qIFBsYXRmb3JtQ0FMYXllckNs
aWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM1Qzc2MkIxNDk3RkUxNDAwQkM0Nzc1IC8qIFBs
YXRmb3JtRXZlbnQuaCBpbiBIZWFkZXJzICovLAotCQkJCUJDQUE0ODcwMTRBMDUyNTMwMDg4RkFD
NCAvKiBQbGF0Zm9ybUV2ZW50RmFjdG9yeS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQkNBQTQ4NzAx
NEEwNTI1MzAwODhGQUM0IC8qIFBsYXRmb3JtRXZlbnRGYWN0b3J5TWFjLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBNzIzRjc3QjE0ODRDQTRDMDA4QzZEQkUgLyogUGxhdGZvcm1FeHBvcnRNYWNyb3Mu
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDOTU4NUUxMTJGMDk4OTUwMDc1NTgyMSAvKiBQbGF0Zm9y
bUdlc3R1cmVFdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM1QzQ3NjgwOUFDNEQ0MzAwQTZB
QUI0IC8qIFBsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNzE1OCw3
ICsyNzE1OCw3IEBACiAJCQkJNDk1ODc4MjIxMkE1N0RERjAwNzIzOEFDIC8qIFBsYXRmb3JtQ0FM
YXllck1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUNERUE3NjMwMTQ2MDhBNTMwMDhCMzFGMSAv
KiBQbGF0Zm9ybUNsb2NrQ0EuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM1Qzc2MkExNDk3RkUx
NDAwQkM0Nzc1IC8qIFBsYXRmb3JtRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQkNBQTQ4
NkYxNEEwNTI1MzAwODhGQUM0IC8qIFBsYXRmb3JtRXZlbnRGYWN0b3J5Lm1tIGluIFNvdXJjZXMg
Ki8sCisJCQkJQkNBQTQ4NkYxNEEwNTI1MzAwODhGQUM0IC8qIFBsYXRmb3JtRXZlbnRGYWN0b3J5
TWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNDFCRjcwMEYwRkU4NkY2MTAwNUU4REVDIC8qIFBs
YXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDOTREMTA4
MEMyNzRGODgwMDZCQzYxNyAvKiBQbGF0Zm9ybVNjcmVlbk1hYy5tbSBpbiBTb3VyY2VzICovLAog
CQkJCTFBRDhGODFDMTFDQUI5RTkwMEU5M0U1NCAvKiBQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwIGlu
IFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9FdmVudEhh
bmRsZXJNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9FdmVudEhhbmRsZXJNYWMubW0K
aW5kZXggNWY5MTEzMjE4ODQzNGEyNjc0ZTJkMzRlODVmNzhkZjUyNGUzMDhiZi4uOTQwODFjYmE3
NjZiNzVlM2UxODg1NTE5YmU5NDk2OTZkNzE1YTQyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGFnZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
bWFjL0V2ZW50SGFuZGxlck1hYy5tbQpAQCAtNDEsNyArNDEsNyBAQAogI2luY2x1ZGUgIk1vdXNl
RXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgog
I2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUV2ZW50RmFjdG9yeS5oIgorI2lu
Y2x1ZGUgIlBsYXRmb3JtRXZlbnRGYWN0b3J5TWFjLmgiCiAjaW5jbHVkZSAiUmVuZGVyV2lkZ2V0
LmgiCiAjaW5jbHVkZSAiUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzLmgiCiAjaW5jbHVkZSAiU2Ny
b2xsYmFyLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGxhdGZv
cm1FdmVudEZhY3RvcnkuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QbGF0Zm9ybUV2
ZW50RmFjdG9yeS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YzE4M2MxOWM4NWFi
NDY3NGFjOGQ3ZTI2YjQ4ZjhiMGM2NjZjNmEzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QbGF0Zm9ybUV2
ZW50RmFjdG9yeS5oCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpZm5kZWYgUGxhdGZvcm1FdmVudEZhY3RvcnlfaAotI2RlZmluZSBQbGF0Zm9ybUV2ZW50RmFj
dG9yeV9oCi0KLSNpbmNsdWRlICJQbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCIKLSNpbmNsdWRlICJQ
bGF0Zm9ybU1vdXNlRXZlbnQuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIKLQot
I2lmIEVOQUJMRShHRVNUVVJFX0VWRU5UUykKLSNpbmNsdWRlICJQbGF0Zm9ybUdlc3R1cmVFdmVu
dC5oIgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgUGxhdGZvcm1FdmVu
dEZhY3RvcnkgewotcHVibGljOgotICAgIHN0YXRpYyBQbGF0Zm9ybU1vdXNlRXZlbnQgY3JlYXRl
UGxhdGZvcm1Nb3VzZUV2ZW50KE5TRXZlbnQgKiwgTlNWaWV3ICp3aW5kb3dWaWV3KTsKLSAgICBz
dGF0aWMgUGxhdGZvcm1XaGVlbEV2ZW50IGNyZWF0ZVBsYXRmb3JtV2hlZWxFdmVudChOU0V2ZW50
ICosIE5TVmlldyAqd2luZG93Vmlldyk7Ci0gICAgc3RhdGljIFBsYXRmb3JtS2V5Ym9hcmRFdmVu
dCBjcmVhdGVQbGF0Zm9ybUtleWJvYXJkRXZlbnQoTlNFdmVudCAqKTsKLSNpZiBFTkFCTEUoR0VT
VFVSRV9FVkVOVFMpCi0gICAgc3RhdGljIFBsYXRmb3JtR2VzdHVyZUV2ZW50IGNyZWF0ZVBsYXRm
b3JtR2VzdHVyZUV2ZW50KE5TRXZlbnQgKiwgTlNWaWV3ICp3aW5kb3dWaWV3KTsKLSNlbmRpZgot
fTsKLQotLy8gRklYTUU6IFRoaXMgZG9lc24ndCByZWFsbHkgYmVsb25nIGhlcmUuCi0KLSNpZiBQ
TEFURk9STShNQUMpICYmIGRlZmluZWQoX19PQkpDX18pCi1JbnRQb2ludCBnbG9iYWxQb2ludChj
b25zdCBOU1BvaW50JiB3aW5kb3dQb2ludCwgTlNXaW5kb3cgKik7Ci0jZW5kaWYKLQotfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gUGxhdGZvcm1FdmVudEZhY3RvcnlfaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1BsYXRmb3JtRXZlbnRGYWN0b3J5
Lm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1BsYXRmb3JtRXZlbnRGYWN0b3J5Lm1t
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3Mjc3MWE1ZTYwMTA5NjhmNDJlN2NhNDI3
NDVhZDA5ZmFkODcyYmNkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QbGF0Zm9ybUV2ZW50RmFjdG9yeS5t
bQorKysgL2Rldi9udWxsCkBAIC0xLDUzNCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIlBsYXRmb3JtRXZlbnRGYWN0b3J5LmgiCi0KLSNpbXBvcnQg
IktleUV2ZW50Q29jb2EuaCIKLSNpbXBvcnQgIkxvZ2dpbmcuaCIKLSNpbXBvcnQgIlBsYXRmb3Jt
U2NyZWVuLmgiCi0jaW1wb3J0ICJTY3JvbGxiYXIuaCIKLSNpbXBvcnQgIldlYkNvcmVTeXN0ZW1J
bnRlcmZhY2UuaCIKLSNpbXBvcnQgIldpbmRvd3NLZXlib2FyZENvZGVzLmgiCi0jaW1wb3J0IDx3
dGYvQVNDSUlDVHlwZS5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUludFBvaW50IGdsb2Jh
bFBvaW50KGNvbnN0IE5TUG9pbnQmIHdpbmRvd1BvaW50LCBOU1dpbmRvdyAqd2luZG93KQotewot
ICAgIHJldHVybiBJbnRQb2ludChmbGlwU2NyZWVuUG9pbnQoW3dpbmRvdyBjb252ZXJ0QmFzZVRv
U2NyZWVuOndpbmRvd1BvaW50XSwgc2NyZWVuRm9yV2luZG93KHdpbmRvdykpKTsKLX0KLQotc3Rh
dGljIEludFBvaW50IGdsb2JhbFBvaW50Rm9yRXZlbnQoTlNFdmVudCAqZXZlbnQpCi17Ci0gICAg
c3dpdGNoIChbZXZlbnQgdHlwZV0pIHsKLSAgICAgICAgY2FzZSBOU0xlZnRNb3VzZURvd246Ci0g
ICAgICAgIGNhc2UgTlNMZWZ0TW91c2VEcmFnZ2VkOgotICAgICAgICBjYXNlIE5TTGVmdE1vdXNl
VXA6Ci0gICAgICAgIGNhc2UgTlNNb3VzZUVudGVyZWQ6Ci0gICAgICAgIGNhc2UgTlNNb3VzZUV4
aXRlZDoKLSAgICAgICAgY2FzZSBOU01vdXNlTW92ZWQ6Ci0gICAgICAgIGNhc2UgTlNPdGhlck1v
dXNlRG93bjoKLSAgICAgICAgY2FzZSBOU090aGVyTW91c2VEcmFnZ2VkOgotICAgICAgICBjYXNl
IE5TT3RoZXJNb3VzZVVwOgotICAgICAgICBjYXNlIE5TUmlnaHRNb3VzZURvd246Ci0gICAgICAg
IGNhc2UgTlNSaWdodE1vdXNlRHJhZ2dlZDoKLSAgICAgICAgY2FzZSBOU1JpZ2h0TW91c2VVcDoK
LSAgICAgICAgY2FzZSBOU1Njcm9sbFdoZWVsOgotICAgICAgICAgICAgcmV0dXJuIGdsb2JhbFBv
aW50KFtldmVudCBsb2NhdGlvbkluV2luZG93XSwgW2V2ZW50IHdpbmRvd10pOwotICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIEludFBvaW50KCk7Ci0gICAgfQotfQotCi1zdGF0
aWMgSW50UG9pbnQgcG9pbnRGb3JFdmVudChOU0V2ZW50ICpldmVudCwgTlNWaWV3ICp3aW5kb3dW
aWV3KQotewotICAgIHN3aXRjaCAoW2V2ZW50IHR5cGVdKSB7Ci0gICAgICAgIGNhc2UgTlNMZWZ0
TW91c2VEb3duOgotICAgICAgICBjYXNlIE5TTGVmdE1vdXNlRHJhZ2dlZDoKLSAgICAgICAgY2Fz
ZSBOU0xlZnRNb3VzZVVwOgotICAgICAgICBjYXNlIE5TTW91c2VFbnRlcmVkOgotICAgICAgICBj
YXNlIE5TTW91c2VFeGl0ZWQ6Ci0gICAgICAgIGNhc2UgTlNNb3VzZU1vdmVkOgotICAgICAgICBj
YXNlIE5TT3RoZXJNb3VzZURvd246Ci0gICAgICAgIGNhc2UgTlNPdGhlck1vdXNlRHJhZ2dlZDoK
LSAgICAgICAgY2FzZSBOU090aGVyTW91c2VVcDoKLSAgICAgICAgY2FzZSBOU1JpZ2h0TW91c2VE
b3duOgotICAgICAgICBjYXNlIE5TUmlnaHRNb3VzZURyYWdnZWQ6Ci0gICAgICAgIGNhc2UgTlNS
aWdodE1vdXNlVXA6Ci0gICAgICAgIGNhc2UgTlNTY3JvbGxXaGVlbDogewotICAgICAgICAgICAg
Ly8gTm90ZTogVGhpcyB3aWxsIGhhdmUgaXRzIG9yaWdpbiBhdCB0aGUgYm90dG9tIGxlZnQgb2Yg
dGhlIHdpbmRvdyB1bmxlc3Mgd2luZG93VmlldyBpcyBmbGlwcGVkLgotICAgICAgICAgICAgLy8g
SW4gdGhvc2UgY2FzZXMsIHRoZSBZIGNvb3JkaW5hdGUgZ2V0cyBmbGlwcGVkIGJ5IFdpZGdldDo6
Y29udmVydEZyb21Db250YWluaW5nV2luZG93LgotICAgICAgICAgICAgTlNQb2ludCBsb2NhdGlv
biA9IFtldmVudCBsb2NhdGlvbkluV2luZG93XTsKLSAgICAgICAgICAgIGlmICh3aW5kb3dWaWV3
KQotICAgICAgICAgICAgICAgIGxvY2F0aW9uID0gW3dpbmRvd1ZpZXcgY29udmVydFBvaW50Omxv
Y2F0aW9uIGZyb21WaWV3Om5pbF07Ci0gICAgICAgICAgICByZXR1cm4gSW50UG9pbnQobG9jYXRp
b24pOwotICAgICAgICB9Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gSW50
UG9pbnQoKTsKLSAgICB9Ci19Ci0KLXN0YXRpYyBNb3VzZUJ1dHRvbiBtb3VzZUJ1dHRvbkZvckV2
ZW50KE5TRXZlbnQgKmV2ZW50KQotewotICAgIHN3aXRjaCAoW2V2ZW50IHR5cGVdKSB7Ci0gICAg
ICAgIGNhc2UgTlNMZWZ0TW91c2VEb3duOgotICAgICAgICBjYXNlIE5TTGVmdE1vdXNlVXA6Ci0g
ICAgICAgIGNhc2UgTlNMZWZ0TW91c2VEcmFnZ2VkOgotICAgICAgICAgICAgcmV0dXJuIExlZnRC
dXR0b247Ci0gICAgICAgIGNhc2UgTlNSaWdodE1vdXNlRG93bjoKLSAgICAgICAgY2FzZSBOU1Jp
Z2h0TW91c2VVcDoKLSAgICAgICAgY2FzZSBOU1JpZ2h0TW91c2VEcmFnZ2VkOgotICAgICAgICAg
ICAgcmV0dXJuIFJpZ2h0QnV0dG9uOwotICAgICAgICBjYXNlIE5TT3RoZXJNb3VzZURvd246Ci0g
ICAgICAgIGNhc2UgTlNPdGhlck1vdXNlVXA6Ci0gICAgICAgIGNhc2UgTlNPdGhlck1vdXNlRHJh
Z2dlZDoKLSAgICAgICAgICAgIHJldHVybiBNaWRkbGVCdXR0b247Ci0gICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICByZXR1cm4gTm9CdXR0b247Ci0gICAgfQotfQotCi1zdGF0aWMgUGxhdGZv
cm1FdmVudDo6VHlwZSBtb3VzZUV2ZW50VHlwZUZvckV2ZW50KE5TRXZlbnQqIGV2ZW50KQotewot
ICAgIHN3aXRjaCAoW2V2ZW50IHR5cGVdKSB7Ci0gICAgICAgIGNhc2UgTlNMZWZ0TW91c2VEcmFn
Z2VkOgotICAgICAgICBjYXNlIE5TTW91c2VFbnRlcmVkOgotICAgICAgICBjYXNlIE5TTW91c2VF
eGl0ZWQ6Ci0gICAgICAgIGNhc2UgTlNNb3VzZU1vdmVkOgotICAgICAgICBjYXNlIE5TT3RoZXJN
b3VzZURyYWdnZWQ6Ci0gICAgICAgIGNhc2UgTlNSaWdodE1vdXNlRHJhZ2dlZDoKLSAgICAgICAg
ICAgIHJldHVybiBQbGF0Zm9ybUV2ZW50OjpNb3VzZU1vdmVkOwotICAgICAgICBjYXNlIE5TTGVm
dE1vdXNlRG93bjoKLSAgICAgICAgY2FzZSBOU1JpZ2h0TW91c2VEb3duOgotICAgICAgICBjYXNl
IE5TT3RoZXJNb3VzZURvd246Ci0gICAgICAgICAgICByZXR1cm4gUGxhdGZvcm1FdmVudDo6TW91
c2VQcmVzc2VkOwotICAgICAgICBjYXNlIE5TTGVmdE1vdXNlVXA6Ci0gICAgICAgIGNhc2UgTlNS
aWdodE1vdXNlVXA6Ci0gICAgICAgIGNhc2UgTlNPdGhlck1vdXNlVXA6Ci0gICAgICAgICAgICBy
ZXR1cm4gUGxhdGZvcm1FdmVudDo6TW91c2VSZWxlYXNlZDsKLSAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgIHJldHVybiBQbGF0Zm9ybUV2ZW50OjpNb3VzZU1vdmVkOwotICAgIH0KLX0KLQot
c3RhdGljIGludCBjbGlja0NvdW50Rm9yRXZlbnQoTlNFdmVudCAqZXZlbnQpCi17Ci0gICAgc3dp
dGNoIChbZXZlbnQgdHlwZV0pIHsKLSAgICAgICAgY2FzZSBOU0xlZnRNb3VzZURvd246Ci0gICAg
ICAgIGNhc2UgTlNMZWZ0TW91c2VVcDoKLSAgICAgICAgY2FzZSBOU0xlZnRNb3VzZURyYWdnZWQ6
Ci0gICAgICAgIGNhc2UgTlNSaWdodE1vdXNlRG93bjoKLSAgICAgICAgY2FzZSBOU1JpZ2h0TW91
c2VVcDoKLSAgICAgICAgY2FzZSBOU1JpZ2h0TW91c2VEcmFnZ2VkOgotICAgICAgICBjYXNlIE5T
T3RoZXJNb3VzZURvd246Ci0gICAgICAgIGNhc2UgTlNPdGhlck1vdXNlVXA6Ci0gICAgICAgIGNh
c2UgTlNPdGhlck1vdXNlRHJhZ2dlZDoKLSAgICAgICAgICAgIHJldHVybiBbZXZlbnQgY2xpY2tD
b3VudF07Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci19
Ci0KLXN0YXRpYyBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZSBtb21lbnR1bVBoYXNlRm9yRXZlbnQo
TlNFdmVudCAqZXZlbnQpCi17Ci0gICAgdWludDMyX3QgcGhhc2UgPSBQbGF0Zm9ybVdoZWVsRXZl
bnRQaGFzZU5vbmU7Ci0KLSNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKSAmJiAhZGVm
aW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCi0gICAgaWYgKFtldmVudCBtb21lbnR1bVBo
YXNlXSAmIE5TRXZlbnRQaGFzZUJlZ2FuKQotICAgICAgICBwaGFzZSB8PSBQbGF0Zm9ybVdoZWVs
RXZlbnRQaGFzZUJlZ2FuOwotICAgIGlmIChbZXZlbnQgbW9tZW50dW1QaGFzZV0gJiBOU0V2ZW50
UGhhc2VTdGF0aW9uYXJ5KQotICAgICAgICBwaGFzZSB8PSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFz
ZVN0YXRpb25hcnk7Ci0gICAgaWYgKFtldmVudCBtb21lbnR1bVBoYXNlXSAmIE5TRXZlbnRQaGFz
ZUNoYW5nZWQpCi0gICAgICAgIHBoYXNlIHw9IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlQ2hhbmdl
ZDsKLSAgICBpZiAoW2V2ZW50IG1vbWVudHVtUGhhc2VdICYgTlNFdmVudFBoYXNlRW5kZWQpCi0g
ICAgICAgIHBoYXNlIHw9IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlRW5kZWQ7Ci0gICAgaWYgKFtl
dmVudCBtb21lbnR1bVBoYXNlXSAmIE5TRXZlbnRQaGFzZUNhbmNlbGxlZCkKLSAgICAgICAgcGhh
c2UgfD0gUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VDYW5jZWxsZWQ7Ci0jZWxzZQotICAgIHN3aXRj
aCAod2tHZXROU0V2ZW50TW9tZW50dW1QaGFzZShldmVudCkpIHsKLSAgICBjYXNlIHdrRXZlbnRQ
aGFzZU5vbmU6Ci0gICAgICAgIHBoYXNlID0gUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VOb25lOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIHdrRXZlbnRQaGFzZUJlZ2FuOgotICAgICAgICBwaGFz
ZSA9IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlQmVnYW47Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2Ugd2tFdmVudFBoYXNlQ2hhbmdlZDoKLSAgICAgICAgcGhhc2UgPSBQbGF0Zm9ybVdoZWVsRXZl
bnRQaGFzZUNoYW5nZWQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ugd2tFdmVudFBoYXNlRW5k
ZWQ6Ci0gICAgICAgIHBoYXNlID0gUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VFbmRlZDsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgfQotI2VuZGlmCi0KLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UGxhdGZv
cm1XaGVlbEV2ZW50UGhhc2U+KHBoYXNlKTsKLX0KLQotc3RhdGljIFBsYXRmb3JtV2hlZWxFdmVu
dFBoYXNlIHBoYXNlRm9yRXZlbnQoTlNFdmVudCAqZXZlbnQpCi17Ci0jaWYgIWRlZmluZWQoQlVJ
TERJTkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQot
ICAgIHVpbnQzMl90IHBoYXNlID0gUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VOb25lOyAKLSAgICBp
ZiAoW2V2ZW50IHBoYXNlXSAmIE5TRXZlbnRQaGFzZUJlZ2FuKQotICAgICAgICBwaGFzZSB8PSBQ
bGF0Zm9ybVdoZWVsRXZlbnRQaGFzZUJlZ2FuOwotICAgIGlmIChbZXZlbnQgcGhhc2VdICYgTlNF
dmVudFBoYXNlU3RhdGlvbmFyeSkKLSAgICAgICAgcGhhc2UgfD0gUGxhdGZvcm1XaGVlbEV2ZW50
UGhhc2VTdGF0aW9uYXJ5OwotICAgIGlmIChbZXZlbnQgcGhhc2VdICYgTlNFdmVudFBoYXNlQ2hh
bmdlZCkKLSAgICAgICAgcGhhc2UgfD0gUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VDaGFuZ2VkOwot
ICAgIGlmIChbZXZlbnQgcGhhc2VdICYgTlNFdmVudFBoYXNlRW5kZWQpCi0gICAgICAgIHBoYXNl
IHw9IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlRW5kZWQ7Ci0gICAgaWYgKFtldmVudCBwaGFzZV0g
JiBOU0V2ZW50UGhhc2VDYW5jZWxsZWQpCi0gICAgICAgIHBoYXNlIHw9IFBsYXRmb3JtV2hlZWxF
dmVudFBoYXNlQ2FuY2VsbGVkOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxQbGF0Zm9ybVdoZWVs
RXZlbnRQaGFzZT4ocGhhc2UpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oZXZlbnQpOwotICAg
IHJldHVybiBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZU5vbmU7Ci0jZW5kaWYKLX0KLQotI2lmIEVO
QUJMRShHRVNUVVJFX0VWRU5UUykKLXN0YXRpYyBQbGF0Zm9ybUV2ZW50OjpUeXBlIGdlc3R1cmVF
dmVudFR5cGVGb3JFdmVudChOU0V2ZW50ICpldmVudCkKLXsKLSAgICBzd2l0Y2ggKFtldmVudCB0
eXBlXSkgewotICAgIGNhc2UgTlNFdmVudFR5cGVCZWdpbkdlc3R1cmU6Ci0gICAgICAgIHJldHVy
biBQbGF0Zm9ybUV2ZW50OjpHZXN0dXJlU2Nyb2xsQmVnaW47Ci0gICAgY2FzZSBOU0V2ZW50VHlw
ZUVuZEdlc3R1cmU6Ci0gICAgICAgIHJldHVybiBQbGF0Zm9ybUV2ZW50OjpHZXN0dXJlU2Nyb2xs
RW5kOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAg
ICByZXR1cm4gUGxhdGZvcm1FdmVudDo6R2VzdHVyZVNjcm9sbEVuZDsKLSAgICB9Ci19Ci0jZW5k
aWYKLQotc3RhdGljIGlubGluZSBTdHJpbmcgdGV4dEZyb21FdmVudChOU0V2ZW50KiBldmVudCkK
LXsKLSAgICBpZiAoW2V2ZW50IHR5cGVdID09IE5TRmxhZ3NDaGFuZ2VkKQotICAgICAgICByZXR1
cm4gU3RyaW5nKCIiKTsKLSAgICByZXR1cm4gU3RyaW5nKFtldmVudCBjaGFyYWN0ZXJzXSk7Ci19
Ci0KLXN0YXRpYyBpbmxpbmUgU3RyaW5nIHVubW9kaWZpZWRUZXh0RnJvbUV2ZW50KE5TRXZlbnQq
IGV2ZW50KQotewotICAgIGlmIChbZXZlbnQgdHlwZV0gPT0gTlNGbGFnc0NoYW5nZWQpCi0gICAg
ICAgIHJldHVybiBTdHJpbmcoIiIpOwotICAgIHJldHVybiBTdHJpbmcoW2V2ZW50IGNoYXJhY3Rl
cnNJZ25vcmluZ01vZGlmaWVyc10pOwotfQotCi1zdGF0aWMgU3RyaW5nIGtleUlkZW50aWZpZXJG
b3JLZXlFdmVudChOU0V2ZW50KiBldmVudCkKLXsKLSAgICBpZiAoW2V2ZW50IHR5cGVdID09IE5T
RmxhZ3NDaGFuZ2VkKSAKLSAgICAgICAgc3dpdGNoIChbZXZlbnQga2V5Q29kZV0pIHsKLSAgICAg
ICAgICAgIGNhc2UgNTQ6IC8vIFJpZ2h0IENvbW1hbmQKLSAgICAgICAgICAgIGNhc2UgNTU6IC8v
IExlZnQgQ29tbWFuZAotICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmcoIk1ldGEiKTsKLSAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgNTc6IC8vIENhcHNsb2NrCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIFN0cmluZygiQ2Fwc0xvY2siKTsKLSAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgIGNhc2UgNTY6IC8vIExlZnQgU2hpZnQKLSAgICAgICAgICAgIGNhc2UgNjA6IC8v
IFJpZ2h0IFNoaWZ0Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZygiU2hpZnQiKTsKLSAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgNTg6IC8vIExlZnQgQWx0Ci0gICAgICAg
ICAgICBjYXNlIDYxOiAvLyBSaWdodCBBbHQKLSAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5n
KCJBbHQiKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgNTk6IC8vIExlZnQg
Q3RybAotICAgICAgICAgICAgY2FzZSA2MjogLy8gUmlnaHQgQ3RybAotICAgICAgICAgICAgICAg
IHJldHVybiBTdHJpbmcoIkNvbnRyb2wiKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIFN0cmluZygiIik7Ci0gICAgICAgIH0KLSAgICAKLSAgICBOU1N0cmlu
ZyAqcyA9IFtldmVudCBjaGFyYWN0ZXJzSWdub3JpbmdNb2RpZmllcnNdOwotICAgIGlmIChbcyBs
ZW5ndGhdICE9IDEpIHsKLSAgICAgICAgTE9HKEV2ZW50cywgInJlY2VpdmVkIGFuIHVuZXhwZWN0
ZWQgbnVtYmVyIG9mIGNoYXJhY3RlcnMgaW4ga2V5IGV2ZW50OiAldSIsIFtzIGxlbmd0aF0pOwot
ICAgICAgICByZXR1cm4gIlVuaWRlbnRpZmllZCI7Ci0gICAgfQotICAgIHJldHVybiBrZXlJZGVu
dGlmaWVyRm9yQ2hhckNvZGUoW3MgY2hhcmFjdGVyQXRJbmRleDowXSk7Ci19Ci0KLXN0YXRpYyBi
b29sIGlzS2V5cGFkRXZlbnQoTlNFdmVudCogZXZlbnQpCi17Ci0gICAgLy8gQ2hlY2sgdGhhdCB0
aGlzIGlzIHRoZSB0eXBlIG9mIGV2ZW50IHRoYXQgaGFzIGEga2V5Q29kZS4KLSAgICBzd2l0Y2gg
KFtldmVudCB0eXBlXSkgewotICAgICAgICBjYXNlIE5TS2V5RG93bjoKLSAgICAgICAgY2FzZSBO
U0tleVVwOgotICAgICAgICBjYXNlIE5TRmxhZ3NDaGFuZ2VkOgotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0g
ICAgaWYgKFtldmVudCBtb2RpZmllckZsYWdzXSAmIE5TTnVtZXJpY1BhZEtleU1hc2spCi0gICAg
ICAgIHJldHVybiB0cnVlOwotCi0gICAgc3dpdGNoIChbZXZlbnQga2V5Q29kZV0pIHsKLSAgICAg
ICAgY2FzZSA3MTogLy8gQ2xlYXIKLSAgICAgICAgY2FzZSA4MTogLy8gPQotICAgICAgICBjYXNl
IDc1OiAvLyAvCi0gICAgICAgIGNhc2UgNjc6IC8vICoKLSAgICAgICAgY2FzZSA3ODogLy8gLQot
ICAgICAgICBjYXNlIDY5OiAvLyArCi0gICAgICAgIGNhc2UgNzY6IC8vIEVudGVyCi0gICAgICAg
IGNhc2UgNjU6IC8vIC4KLSAgICAgICAgY2FzZSA4MjogLy8gMAotICAgICAgICBjYXNlIDgzOiAv
LyAxCi0gICAgICAgIGNhc2UgODQ6IC8vIDIKLSAgICAgICAgY2FzZSA4NTogLy8gMwotICAgICAg
ICBjYXNlIDg2OiAvLyA0Ci0gICAgICAgIGNhc2UgODc6IC8vIDUKLSAgICAgICAgY2FzZSA4ODog
Ly8gNgotICAgICAgICBjYXNlIDg5OiAvLyA3Ci0gICAgICAgIGNhc2UgOTE6IC8vIDgKLSAgICAg
ICAgY2FzZSA5MjogLy8gOQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgIH0KLSAgICAg
Ci0gICAgIHJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIGludCB3aW5kb3dzS2V5Q29kZUZvcktl
eUV2ZW50KE5TRXZlbnQqIGV2ZW50KQotewotICAgIGludCBjb2RlID0gMDsKLSAgICAvLyBUaGVy
ZSBhcmUgc2V2ZXJhbCBraW5kcyBvZiBjaGFyYWN0ZXJzIGZvciB3aGljaCB3ZSBwcm9kdWNlIGtl
eSBjb2RlIGZyb20gY2hhciBjb2RlOgotICAgIC8vIDEuIFJvbWFuIGxldHRlcnMuIFdpbmRvd3Mg
a2V5Ym9hcmQgbGF5b3V0cyBhZmZlY3QgYm90aCB2aXJ0dWFsIGtleSBjb2RlcyBhbmQgY2hhcmFj
dGVyIGNvZGVzIGZvciB0aGVzZSwKLSAgICAvLyAgICBzbyBlLmcuICdBJyBnZXRzIHRoZSBzYW1l
IGtleUNvZGUgb24gUVdFUlRZLCBBWkVSVFkgb3IgRHZvcmFrIGxheW91dHMuCi0gICAgLy8gMi4g
S2V5cyBmb3Igd2hpY2ggdGhlcmUgaXMgbm8ga25vd24gTWFjIHZpcnR1YWwga2V5IGNvZGVzLCBs
aWtlIFByaW50U2NyZWVuLgotICAgIC8vIDMuIENlcnRhaW4gcHVuY3R1YXRpb24ga2V5cy4gT24g
V2luZG93cywgdGhlc2UgYXJlIGFsc28gcmVtYXBwZWQgZGVwZW5kaW5nIG9uIGN1cnJlbnQga2V5
Ym9hcmQgbGF5b3V0LAotICAgIC8vICAgIGJ1dCBzZWUgY29tbWVudCBpbiB3aW5kb3dzS2V5Q29k
ZUZvckNoYXJDb2RlKCkuCi0gICAgaWYgKFtldmVudCB0eXBlXSA9PSBOU0tleURvd24gfHwgW2V2
ZW50IHR5cGVdID09IE5TS2V5VXApIHsKLSAgICAgICAgLy8gQ21kIHN3aXRjaGVzIFJvbWFuIGxl
dHRlcnMgZm9yIER2b3Jhay1RV0VSVFkgbGF5b3V0LCBzbyB0cnkgbW9kaWZpZWQgY2hhcmFjdGVy
cyBmaXJzdC4KLSAgICAgICAgTlNTdHJpbmcqIHMgPSBbZXZlbnQgY2hhcmFjdGVyc107Ci0gICAg
ICAgIGNvZGUgPSBbcyBsZW5ndGhdID4gMCA/IHdpbmRvd3NLZXlDb2RlRm9yQ2hhckNvZGUoW3Mg
Y2hhcmFjdGVyQXRJbmRleDowXSkgOiAwOwotICAgICAgICBpZiAoY29kZSkKLSAgICAgICAgICAg
IHJldHVybiBjb2RlOwotCi0gICAgICAgIC8vIEN0cmwrQSBvbiBhbiBBWkVSVFkga2V5Ym9hcmQg
d291bGQgZ2V0IFZLX1Ega2V5Q29kZSBpZiB3ZSByZWxpZWQgb24gLVtOU0V2ZW50IGtleUNvZGVd
IGJlbG93LgotICAgICAgICBzID0gW2V2ZW50IGNoYXJhY3RlcnNJZ25vcmluZ01vZGlmaWVyc107
Ci0gICAgICAgIGNvZGUgPSBbcyBsZW5ndGhdID4gMCA/IHdpbmRvd3NLZXlDb2RlRm9yQ2hhckNv
ZGUoW3MgY2hhcmFjdGVyQXRJbmRleDowXSkgOiAwOwotICAgICAgICBpZiAoY29kZSkKLSAgICAg
ICAgICAgIHJldHVybiBjb2RlOwotICAgIH0KLQotICAgIC8vIE1hcCBNYWMgdmlydHVhbCBrZXkg
Y29kZSBkaXJlY3RseSB0byBXaW5kb3dzIG9uZSBmb3IgYW55IGtleXMgbm90IGhhbmRsZWQgYWJv
dmUuCi0gICAgLy8gRS5nLiB0aGUga2V5IG5leHQgdG8gQ2FwcyBMb2NrIGhhcyB0aGUgc2FtZSBF
dmVudC5rZXlDb2RlIG9uIFUuUy4ga2V5Ym9hcmQgKCdBJykgYW5kIG9uIFJ1c3NpYW4ga2V5Ym9h
cmQgKENZUklMTElDIExFVFRFUiBFRikuCi0gICAgcmV0dXJuIHdpbmRvd3NLZXlDb2RlRm9yS2V5
Q29kZShbZXZlbnQga2V5Q29kZV0pOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNLZXlVcEV2
ZW50KE5TRXZlbnQgKmV2ZW50KQotewotICAgIGlmIChbZXZlbnQgdHlwZV0gIT0gTlNGbGFnc0No
YW5nZWQpCi0gICAgICAgIHJldHVybiBbZXZlbnQgdHlwZV0gPT0gTlNLZXlVcDsKLSAgICAvLyBG
SVhNRTogVGhpcyBsb2dpYyBmYWlscyBpZiB0aGUgdXNlciBwcmVzc2VzIGJvdGggU2hpZnQga2V5
cyBhdCBvbmNlLCBmb3IgZXhhbXBsZToKLSAgICAvLyB3ZSB0cmVhdCByZWxlYXNpbmcgb25lIG9m
IHRoZW0gYXMga2V5RG93bi4KLSAgICBzd2l0Y2ggKFtldmVudCBrZXlDb2RlXSkgewotICAgICAg
ICBjYXNlIDU0OiAvLyBSaWdodCBDb21tYW5kCi0gICAgICAgIGNhc2UgNTU6IC8vIExlZnQgQ29t
bWFuZAotICAgICAgICAgICAgcmV0dXJuIChbZXZlbnQgbW9kaWZpZXJGbGFnc10gJiBOU0NvbW1h
bmRLZXlNYXNrKSA9PSAwOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgNTc6IC8vIENhcHNs
b2NrCi0gICAgICAgICAgICByZXR1cm4gKFtldmVudCBtb2RpZmllckZsYWdzXSAmIE5TQWxwaGFT
aGlmdEtleU1hc2spID09IDA7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSA1NjogLy8gTGVm
dCBTaGlmdAotICAgICAgICBjYXNlIDYwOiAvLyBSaWdodCBTaGlmdAotICAgICAgICAgICAgcmV0
dXJuIChbZXZlbnQgbW9kaWZpZXJGbGFnc10gJiBOU1NoaWZ0S2V5TWFzaykgPT0gMDsKLSAgICAg
ICAgICAgIAotICAgICAgICBjYXNlIDU4OiAvLyBMZWZ0IEFsdAotICAgICAgICBjYXNlIDYxOiAv
LyBSaWdodCBBbHQKLSAgICAgICAgICAgIHJldHVybiAoW2V2ZW50IG1vZGlmaWVyRmxhZ3NdICYg
TlNBbHRlcm5hdGVLZXlNYXNrKSA9PSAwOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgNTk6
IC8vIExlZnQgQ3RybAotICAgICAgICBjYXNlIDYyOiAvLyBSaWdodCBDdHJsCi0gICAgICAgICAg
ICByZXR1cm4gKFtldmVudCBtb2RpZmllckZsYWdzXSAmIE5TQ29udHJvbEtleU1hc2spID09IDA7
Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSA2MzogLy8gRnVuY3Rpb24KLSAgICAgICAgICAg
IHJldHVybiAoW2V2ZW50IG1vZGlmaWVyRmxhZ3NdICYgTlNGdW5jdGlvbktleU1hc2spID09IDA7
Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIGlubGluZSBQbGF0Zm9ybUV2
ZW50OjpNb2RpZmllcnMgbW9kaWZpZXJzRm9yRXZlbnQoTlNFdmVudCAqZXZlbnQpCi17Ci0gICAg
dW5zaWduZWQgbW9kaWZpZXJzID0gMDsKLSAgICBpZiAoW2V2ZW50IG1vZGlmaWVyRmxhZ3NdICYg
TlNTaGlmdEtleU1hc2spCi0gICAgICAgIG1vZGlmaWVycyB8PSBQbGF0Zm9ybUV2ZW50OjpTaGlm
dEtleTsKLSAgICBpZiAoW2V2ZW50IG1vZGlmaWVyRmxhZ3NdICYgTlNDb250cm9sS2V5TWFzaykK
LSAgICAgICAgbW9kaWZpZXJzIHw9IFBsYXRmb3JtRXZlbnQ6OkN0cmxLZXk7Ci0gICAgaWYgKFtl
dmVudCBtb2RpZmllckZsYWdzXSAmIE5TQWx0ZXJuYXRlS2V5TWFzaykKLSAgICAgICAgbW9kaWZp
ZXJzIHw9IFBsYXRmb3JtRXZlbnQ6OkFsdEtleTsKLSAgICBpZiAoW2V2ZW50IG1vZGlmaWVyRmxh
Z3NdICYgTlNDb21tYW5kS2V5TWFzaykKLSAgICAgICAgbW9kaWZpZXJzIHw9IFBsYXRmb3JtRXZl
bnQ6Ok1ldGFLZXk7Ci0gICAgcmV0dXJuIChQbGF0Zm9ybUV2ZW50OjpNb2RpZmllcnMpbW9kaWZp
ZXJzOwotfQotCi0KLWNsYXNzIFBsYXRmb3JtTW91c2VFdmVudEJ1aWxkZXIgOiBwdWJsaWMgUGxh
dGZvcm1Nb3VzZUV2ZW50IHsKLXB1YmxpYzoKLSAgICBQbGF0Zm9ybU1vdXNlRXZlbnRCdWlsZGVy
KE5TRXZlbnQgKmV2ZW50LCBOU1ZpZXcgKndpbmRvd1ZpZXcpCi0gICAgewotICAgICAgICAvLyBQ
bGF0Zm9ybUV2ZW50Ci0gICAgICAgIG1fdHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ID0gbW91c2VFdmVudFR5cGVGb3JFdmVudChldmVudCk7Ci0gICAgICAgIG1fbW9kaWZpZXJzICAg
ICAgICAgICAgICAgICAgICAgICAgID0gbW9kaWZpZXJzRm9yRXZlbnQoZXZlbnQpOwotICAgICAg
ICBtX3RpbWVzdGFtcCAgICAgICAgICAgICAgICAgICAgICAgICA9IFtldmVudCB0aW1lc3RhbXBd
OwotCi0gICAgICAgIC8vIFBsYXRmb3JtTW91c2VFdmVudAotICAgICAgICBtX3Bvc2l0aW9uICAg
ICAgICAgICAgICAgICAgICAgICAgICA9IHBvaW50Rm9yRXZlbnQoZXZlbnQsIHdpbmRvd1ZpZXcp
OwotICAgICAgICBtX2dsb2JhbFBvc2l0aW9uICAgICAgICAgICAgICAgICAgICA9IGdsb2JhbFBv
aW50Rm9yRXZlbnQoZXZlbnQpOwotICAgICAgICBtX2J1dHRvbiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA9IG1vdXNlQnV0dG9uRm9yRXZlbnQoZXZlbnQpOwotICAgICAgICBtX2NsaWNrQ291
bnQgICAgICAgICAgICAgICAgICAgICAgICA9IGNsaWNrQ291bnRGb3JFdmVudChldmVudCk7Ci0g
ICAgICAgIAotICAgICAgICAvLyBNYWMgc3BlY2lmaWMKLSAgICAgICAgbV9tb2RpZmllckZsYWdz
ICAgICAgICAgICAgICAgICAgICAgPSBbZXZlbnQgbW9kaWZpZXJGbGFnc107Ci0gICAgICAgIG1f
ZXZlbnROdW1iZXIgICAgICAgICAgICAgICAgICAgICAgID0gW2V2ZW50IGV2ZW50TnVtYmVyXTsK
LSAgICB9Ci19OwotCi1QbGF0Zm9ybU1vdXNlRXZlbnQgUGxhdGZvcm1FdmVudEZhY3Rvcnk6OmNy
ZWF0ZVBsYXRmb3JtTW91c2VFdmVudChOU0V2ZW50ICpldmVudCwgTlNWaWV3ICp3aW5kb3dWaWV3
KQotewotICAgIHJldHVybiBQbGF0Zm9ybU1vdXNlRXZlbnRCdWlsZGVyKGV2ZW50LCB3aW5kb3dW
aWV3KTsKLX0KLQotCi1jbGFzcyBQbGF0Zm9ybVdoZWVsRXZlbnRCdWlsZGVyIDogcHVibGljIFBs
YXRmb3JtV2hlZWxFdmVudCB7Ci1wdWJsaWM6Ci0gICAgUGxhdGZvcm1XaGVlbEV2ZW50QnVpbGRl
cihOU0V2ZW50ICpldmVudCwgTlNWaWV3ICp3aW5kb3dWaWV3KQotICAgIHsKLSAgICAgICAgLy8g
UGxhdGZvcm1FdmVudAotICAgICAgICBtX3R5cGUgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA9IFBsYXRmb3JtRXZlbnQ6OldoZWVsOwotICAgICAgICBtX21vZGlmaWVycyAgICAgICAgICAg
ICAgICAgICAgICAgICA9IG1vZGlmaWVyc0ZvckV2ZW50KGV2ZW50KTsKLSAgICAgICAgbV90aW1l
c3RhbXAgICAgICAgICAgICAgICAgICAgICAgICAgPSBbZXZlbnQgdGltZXN0YW1wXTsKLQotICAg
ICAgICAvLyBQbGF0Zm9ybVdoZWVsRXZlbnQKLSAgICAgICAgbV9wb3NpdGlvbiAgICAgICAgICAg
ICAgICAgICAgICAgICAgPSBwb2ludEZvckV2ZW50KGV2ZW50LCB3aW5kb3dWaWV3KTsKLSAgICAg
ICAgbV9nbG9iYWxQb3NpdGlvbiAgICAgICAgICAgICAgICAgICAgPSBnbG9iYWxQb2ludEZvckV2
ZW50KGV2ZW50KTsKLSAgICAgICAgbV9ncmFudWxhcml0eSAgICAgICAgICAgICAgICAgICAgICAg
PSBTY3JvbGxCeVBpeGVsV2hlZWxFdmVudDsKLQotICAgICAgICBCT09MIGNvbnRpbnVvdXM7Ci0g
ICAgICAgIHdrR2V0V2hlZWxFdmVudERlbHRhcyhldmVudCwgJm1fZGVsdGFYLCAmbV9kZWx0YVks
ICZjb250aW51b3VzKTsKLSAgICAgICAgaWYgKGNvbnRpbnVvdXMpIHsKLSAgICAgICAgICAgIG1f
d2hlZWxUaWNrc1ggPSBtX2RlbHRhWCAvIHN0YXRpY19jYXN0PGZsb2F0PihTY3JvbGxiYXI6OnBp
eGVsc1BlckxpbmVTdGVwKCkpOwotICAgICAgICAgICAgbV93aGVlbFRpY2tzWSA9IG1fZGVsdGFZ
IC8gc3RhdGljX2Nhc3Q8ZmxvYXQ+KFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSk7Ci0g
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtX3doZWVsVGlja3NYID0gbV9kZWx0YVg7Ci0g
ICAgICAgICAgICBtX3doZWVsVGlja3NZID0gbV9kZWx0YVk7Ci0gICAgICAgICAgICBtX2RlbHRh
WCAqPSBzdGF0aWNfY2FzdDxmbG9hdD4oU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpKTsK
LSAgICAgICAgICAgIG1fZGVsdGFZICo9IHN0YXRpY19jYXN0PGZsb2F0PihTY3JvbGxiYXI6OnBp
eGVsc1BlckxpbmVTdGVwKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgbV9waGFzZSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgPSBwaGFzZUZvckV2ZW50KGV2ZW50KTsKLSAgICAgICAgbV9t
b21lbnR1bVBoYXNlICAgICAgICAgICAgICAgICAgICAgPSBtb21lbnR1bVBoYXNlRm9yRXZlbnQo
ZXZlbnQpOwotICAgICAgICBtX2hhc1ByZWNpc2VTY3JvbGxpbmdEZWx0YXMgICAgICAgICA9IGNv
bnRpbnVvdXM7Ci0KLSNpZiBIQVZFKElOVkVSVEVEX1dIRUVMX0VWRU5UUykKLSAgICAgICAgbV9k
aXJlY3Rpb25JbnZlcnRlZEZyb21EZXZpY2UgICAgICAgPSBbZXZlbnQgaXNEaXJlY3Rpb25JbnZl
cnRlZEZyb21EZXZpY2VdOwotI2Vsc2UKLSAgICAgICAgbV9kaXJlY3Rpb25JbnZlcnRlZEZyb21E
ZXZpY2UgICAgICAgPSBmYWxzZTsKLSNlbmRpZgotICAgIH0KLX07Ci0KLVBsYXRmb3JtV2hlZWxF
dmVudCBQbGF0Zm9ybUV2ZW50RmFjdG9yeTo6Y3JlYXRlUGxhdGZvcm1XaGVlbEV2ZW50KE5TRXZl
bnQgKmV2ZW50LCBOU1ZpZXcgKndpbmRvd1ZpZXcpCi17Ci0gICAgcmV0dXJuIFBsYXRmb3JtV2hl
ZWxFdmVudEJ1aWxkZXIoZXZlbnQsIHdpbmRvd1ZpZXcpOwotfQotCi0KLWNsYXNzIFBsYXRmb3Jt
S2V5Ym9hcmRFdmVudEJ1aWxkZXIgOiBwdWJsaWMgUGxhdGZvcm1LZXlib2FyZEV2ZW50IHsKLXB1
YmxpYzoKLSAgICBQbGF0Zm9ybUtleWJvYXJkRXZlbnRCdWlsZGVyKE5TRXZlbnQgKmV2ZW50KQot
ICAgIHsKLSAgICAgICAgLy8gUGxhdGZvcm1FdmVudAotICAgICAgICBtX3R5cGUgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA9IGlzS2V5VXBFdmVudChldmVudCkgPyBQbGF0Zm9ybUV2ZW50
OjpLZXlVcCA6IFBsYXRmb3JtRXZlbnQ6OktleURvd247Ci0gICAgICAgIG1fbW9kaWZpZXJzICAg
ICAgICAgICAgICAgICAgICAgICAgID0gbW9kaWZpZXJzRm9yRXZlbnQoZXZlbnQpOwotICAgICAg
ICBtX3RpbWVzdGFtcCAgICAgICAgICAgICAgICAgICAgICAgICA9IFtldmVudCB0aW1lc3RhbXBd
OwotCi0gICAgICAgIC8vIFBsYXRmb3JtS2V5Ym9hcmRFdmVudAotICAgICAgICBtX3RleHQgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA9IHRleHRGcm9tRXZlbnQoZXZlbnQpOwotICAgICAg
ICBtX3VubW9kaWZpZWRUZXh0ICAgICAgICAgICAgICAgICAgICA9IHVubW9kaWZpZWRUZXh0RnJv
bUV2ZW50KGV2ZW50KTsKLSAgICAgICAgbV9rZXlJZGVudGlmaWVyICAgICAgICAgICAgICAgICAg
ICAgPSBrZXlJZGVudGlmaWVyRm9yS2V5RXZlbnQoZXZlbnQpOwotICAgICAgICBtX3dpbmRvd3NW
aXJ0dWFsS2V5Q29kZSAgICAgICAgICAgICA9IHdpbmRvd3NLZXlDb2RlRm9yS2V5RXZlbnQoZXZl
bnQpOwotICAgICAgICBtX25hdGl2ZVZpcnR1YWxLZXlDb2RlICAgICAgICAgICAgICA9IFtldmVu
dCBrZXlDb2RlXTsKLSAgICAgICAgbV9tYWNDaGFyQ29kZSAgICAgICAgICAgICAgICAgICAgICAg
PSB3a0dldE5TRXZlbnRLZXlDaGFyKGV2ZW50KTsKLSAgICAgICAgbV9hdXRvUmVwZWF0ICAgICAg
ICAgICAgICAgICAgICAgICAgPSAoW2V2ZW50IHR5cGVdICE9IE5TRmxhZ3NDaGFuZ2VkKSAmJiBb
ZXZlbnQgaXNBUmVwZWF0XTsKLSAgICAgICAgbV9pc0tleXBhZCAgICAgICAgICAgICAgICAgICAg
ICAgICAgPSBpc0tleXBhZEV2ZW50KGV2ZW50KTsKLSAgICAgICAgbV9pc1N5c3RlbUtleSAgICAg
ICAgICAgICAgICAgICAgICAgPSBmYWxzZTsgLy8gU3lzdGVtS2V5IGlzIGFsd2F5cyBmYWxzZSBv
biB0aGUgTWFjLgotCi0gICAgICAgIC8vIEFsd2F5cyB1c2UgMTMgZm9yIEVudGVyL1JldHVybiAt
LSB3ZSBkb24ndCB3YW50IHRvIHVzZSBBcHBLaXQncyBkaWZmZXJlbnQgY2hhcmFjdGVyIGZvciBF
bnRlci4KLSAgICAgICAgaWYgKG1fd2luZG93c1ZpcnR1YWxLZXlDb2RlID09IFZLX1JFVFVSTikg
ewotICAgICAgICAgICAgbV90ZXh0ID0gIlxyIjsKLSAgICAgICAgICAgIG1fdW5tb2RpZmllZFRl
eHQgPSAiXHIiOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gQXBwS2l0IHNldHMgdGV4dCB0byAi
XHg3RiIgZm9yIGJhY2tzcGFjZSwgYnV0IHRoZSBjb3JyZWN0IEtleWJvYXJkRXZlbnQgY2hhcmFj
dGVyIGNvZGUgaXMgOC4KLSAgICAgICAgaWYgKG1fd2luZG93c1ZpcnR1YWxLZXlDb2RlID09IFZL
X0JBQ0spIHsKLSAgICAgICAgICAgIG1fdGV4dCA9ICJceDgiOwotICAgICAgICAgICAgbV91bm1v
ZGlmaWVkVGV4dCA9ICJceDgiOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gQWx3YXlzIHVzZSA5
IGZvciBUYWIgLS0gd2UgZG9uJ3Qgd2FudCB0byB1c2UgQXBwS2l0J3MgZGlmZmVyZW50IGNoYXJh
Y3RlciBmb3Igc2hpZnQtdGFiLgotICAgICAgICBpZiAobV93aW5kb3dzVmlydHVhbEtleUNvZGUg
PT0gVktfVEFCKSB7Ci0gICAgICAgICAgICBtX3RleHQgPSAiXHg5IjsKLSAgICAgICAgICAgIG1f
dW5tb2RpZmllZFRleHQgPSAiXHg5IjsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIE1hYyBzcGVj
aWZpYy4KLSAgICAgICAgbV9tYWNFdmVudCA9IGV2ZW50OwotICAgIH0KLX07Ci0KLVBsYXRmb3Jt
S2V5Ym9hcmRFdmVudCBQbGF0Zm9ybUV2ZW50RmFjdG9yeTo6Y3JlYXRlUGxhdGZvcm1LZXlib2Fy
ZEV2ZW50KE5TRXZlbnQgKmV2ZW50KQotewotICAgIHJldHVybiBQbGF0Zm9ybUtleWJvYXJkRXZl
bnRCdWlsZGVyKGV2ZW50KTsKLX0KLQotI2lmIEVOQUJMRShHRVNUVVJFX0VWRU5UUykKLWNsYXNz
IFBsYXRmb3JtR2VzdHVyZUV2ZW50QnVpbGRlciA6IHB1YmxpYyBQbGF0Zm9ybUdlc3R1cmVFdmVu
dCB7Ci1wdWJsaWM6Ci0gICAgUGxhdGZvcm1HZXN0dXJlRXZlbnRCdWlsZGVyKE5TRXZlbnQgKmV2
ZW50LCBOU1ZpZXcgKndpbmRvd1ZpZXcpCi0gICAgewotICAgICAgICAvLyBQbGF0Zm9ybUV2ZW50
Ci0gICAgICAgIG1fdHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gZ2VzdHVyZUV2
ZW50VHlwZUZvckV2ZW50KGV2ZW50KTsKLSAgICAgICAgbV9tb2RpZmllcnMgICAgICAgICAgICAg
ICAgICAgICAgICAgPSBtb2RpZmllcnNGb3JFdmVudChldmVudCk7Ci0gICAgICAgIG1fdGltZXN0
YW1wICAgICAgICAgICAgICAgICAgICAgICAgID0gW2V2ZW50IHRpbWVzdGFtcF07Ci0KLSAgICAg
ICAgLy8gUGxhdGZvcm1HZXN0dXJlRXZlbnQKLSAgICAgICAgbV9wb3NpdGlvbiAgICAgICAgICAg
ICAgICAgICAgICAgICAgPSBwb2ludEZvckV2ZW50KGV2ZW50LCB3aW5kb3dWaWV3KTsKLSAgICAg
ICAgbV9nbG9iYWxQb3NpdGlvbiAgICAgICAgICAgICAgICAgICAgPSBnbG9iYWxQb2ludEZvckV2
ZW50KGV2ZW50KTsKLSAgICAgICAgbV9kZWx0YVggICAgICAgICAgICAgICAgICAgICAgICAgICAg
PSAwOwotICAgICAgICBtX2RlbHRhWSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDA7Ci0g
ICAgfQotfTsKLQotUGxhdGZvcm1HZXN0dXJlRXZlbnQgUGxhdGZvcm1FdmVudEZhY3Rvcnk6OmNy
ZWF0ZVBsYXRmb3JtR2VzdHVyZUV2ZW50KE5TRXZlbnQgKmV2ZW50LCBOU1ZpZXcgKndpbmRvd1Zp
ZXcpCi17Ci0gICAgcmV0dXJuIFBsYXRmb3JtR2VzdHVyZUV2ZW50QnVpbGRlcihldmVudCwgd2lu
ZG93Vmlldyk7Ci19Ci0jZW5kaWYKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1BsYXRmb3JtRXZlbnRGYWN0b3J5TWFjLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGxhdGZvcm1FdmVudEZhY3RvcnlNYWMuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4xMmVkZTFmYWI3YTgxNjhhOWIyYTJlNGVjYzAzMGQyZDY4ZGIyYzE1Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1BsYXRmb3JtRXZlbnRG
YWN0b3J5TWFjLmgKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgUGxhdGZv
cm1FdmVudEZhY3RvcnlNYWNfaAorI2RlZmluZSBQbGF0Zm9ybUV2ZW50RmFjdG9yeU1hY19oCisK
KyNpbmNsdWRlICJQbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybU1v
dXNlRXZlbnQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIKKworI2lmIEVOQUJM
RShHRVNUVVJFX0VWRU5UUykKKyNpbmNsdWRlICJQbGF0Zm9ybUdlc3R1cmVFdmVudC5oIgorI2Vu
ZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUGxhdGZvcm1FdmVudEZhY3Rvcnkg
eworcHVibGljOgorICAgIHN0YXRpYyBQbGF0Zm9ybU1vdXNlRXZlbnQgY3JlYXRlUGxhdGZvcm1N
b3VzZUV2ZW50KE5TRXZlbnQgKiwgTlNWaWV3ICp3aW5kb3dWaWV3KTsKKyAgICBzdGF0aWMgUGxh
dGZvcm1XaGVlbEV2ZW50IGNyZWF0ZVBsYXRmb3JtV2hlZWxFdmVudChOU0V2ZW50ICosIE5TVmll
dyAqd2luZG93Vmlldyk7CisgICAgc3RhdGljIFBsYXRmb3JtS2V5Ym9hcmRFdmVudCBjcmVhdGVQ
bGF0Zm9ybUtleWJvYXJkRXZlbnQoTlNFdmVudCAqKTsKKyNpZiBFTkFCTEUoR0VTVFVSRV9FVkVO
VFMpCisgICAgc3RhdGljIFBsYXRmb3JtR2VzdHVyZUV2ZW50IGNyZWF0ZVBsYXRmb3JtR2VzdHVy
ZUV2ZW50KE5TRXZlbnQgKiwgTlNWaWV3ICp3aW5kb3dWaWV3KTsKKyNlbmRpZgorfTsKKworLy8g
RklYTUU6IFRoaXMgZG9lc24ndCByZWFsbHkgYmVsb25nIGhlcmUuCisKKyNpZiBQTEFURk9STShN
QUMpICYmIGRlZmluZWQoX19PQkpDX18pCitJbnRQb2ludCBnbG9iYWxQb2ludChjb25zdCBOU1Bv
aW50JiB3aW5kb3dQb2ludCwgTlNXaW5kb3cgKik7CisjZW5kaWYKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gUGxhdGZvcm1FdmVudEZhY3RvcnlNYWNfaApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1BsYXRmb3JtRXZlbnRGYWN0b3J5TWFjLm1t
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1BsYXRmb3JtRXZlbnRGYWN0b3J5TWFjLm1t
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjQzNjIzYzcxMjM1NmI5ODY2MDRkYzdiZDc5M2YzOTg0YzA0NTRmMDkKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGxhdGZvcm1FdmVu
dEZhY3RvcnlNYWMubW0KQEAgLTAsMCArMSw1MzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1FdmVudEZhY3RvcnlNYWMuaCIKKworI2ltcG9y
dCAiS2V5RXZlbnRDb2NvYS5oIgorI2ltcG9ydCAiTG9nZ2luZy5oIgorI2ltcG9ydCAiUGxhdGZv
cm1TY3JlZW4uaCIKKyNpbXBvcnQgIlNjcm9sbGJhci5oIgorI2ltcG9ydCAiV2ViQ29yZVN5c3Rl
bUludGVyZmFjZS5oIgorI2ltcG9ydCAiV2luZG93c0tleWJvYXJkQ29kZXMuaCIKKyNpbXBvcnQg
PHd0Zi9BU0NJSUNUeXBlLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSW50UG9pbnQgZ2xv
YmFsUG9pbnQoY29uc3QgTlNQb2ludCYgd2luZG93UG9pbnQsIE5TV2luZG93ICp3aW5kb3cpCit7
CisgICAgcmV0dXJuIEludFBvaW50KGZsaXBTY3JlZW5Qb2ludChbd2luZG93IGNvbnZlcnRCYXNl
VG9TY3JlZW46d2luZG93UG9pbnRdLCBzY3JlZW5Gb3JXaW5kb3cod2luZG93KSkpOworfQorCitz
dGF0aWMgSW50UG9pbnQgZ2xvYmFsUG9pbnRGb3JFdmVudChOU0V2ZW50ICpldmVudCkKK3sKKyAg
ICBzd2l0Y2ggKFtldmVudCB0eXBlXSkgeworICAgICAgICBjYXNlIE5TTGVmdE1vdXNlRG93bjoK
KyAgICAgICAgY2FzZSBOU0xlZnRNb3VzZURyYWdnZWQ6CisgICAgICAgIGNhc2UgTlNMZWZ0TW91
c2VVcDoKKyAgICAgICAgY2FzZSBOU01vdXNlRW50ZXJlZDoKKyAgICAgICAgY2FzZSBOU01vdXNl
RXhpdGVkOgorICAgICAgICBjYXNlIE5TTW91c2VNb3ZlZDoKKyAgICAgICAgY2FzZSBOU090aGVy
TW91c2VEb3duOgorICAgICAgICBjYXNlIE5TT3RoZXJNb3VzZURyYWdnZWQ6CisgICAgICAgIGNh
c2UgTlNPdGhlck1vdXNlVXA6CisgICAgICAgIGNhc2UgTlNSaWdodE1vdXNlRG93bjoKKyAgICAg
ICAgY2FzZSBOU1JpZ2h0TW91c2VEcmFnZ2VkOgorICAgICAgICBjYXNlIE5TUmlnaHRNb3VzZVVw
OgorICAgICAgICBjYXNlIE5TU2Nyb2xsV2hlZWw6CisgICAgICAgICAgICByZXR1cm4gZ2xvYmFs
UG9pbnQoW2V2ZW50IGxvY2F0aW9uSW5XaW5kb3ddLCBbZXZlbnQgd2luZG93XSk7CisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gSW50UG9pbnQoKTsKKyAgICB9Cit9CisKK3N0
YXRpYyBJbnRQb2ludCBwb2ludEZvckV2ZW50KE5TRXZlbnQgKmV2ZW50LCBOU1ZpZXcgKndpbmRv
d1ZpZXcpCit7CisgICAgc3dpdGNoIChbZXZlbnQgdHlwZV0pIHsKKyAgICAgICAgY2FzZSBOU0xl
ZnRNb3VzZURvd246CisgICAgICAgIGNhc2UgTlNMZWZ0TW91c2VEcmFnZ2VkOgorICAgICAgICBj
YXNlIE5TTGVmdE1vdXNlVXA6CisgICAgICAgIGNhc2UgTlNNb3VzZUVudGVyZWQ6CisgICAgICAg
IGNhc2UgTlNNb3VzZUV4aXRlZDoKKyAgICAgICAgY2FzZSBOU01vdXNlTW92ZWQ6CisgICAgICAg
IGNhc2UgTlNPdGhlck1vdXNlRG93bjoKKyAgICAgICAgY2FzZSBOU090aGVyTW91c2VEcmFnZ2Vk
OgorICAgICAgICBjYXNlIE5TT3RoZXJNb3VzZVVwOgorICAgICAgICBjYXNlIE5TUmlnaHRNb3Vz
ZURvd246CisgICAgICAgIGNhc2UgTlNSaWdodE1vdXNlRHJhZ2dlZDoKKyAgICAgICAgY2FzZSBO
U1JpZ2h0TW91c2VVcDoKKyAgICAgICAgY2FzZSBOU1Njcm9sbFdoZWVsOiB7CisgICAgICAgICAg
ICAvLyBOb3RlOiBUaGlzIHdpbGwgaGF2ZSBpdHMgb3JpZ2luIGF0IHRoZSBib3R0b20gbGVmdCBv
ZiB0aGUgd2luZG93IHVubGVzcyB3aW5kb3dWaWV3IGlzIGZsaXBwZWQuCisgICAgICAgICAgICAv
LyBJbiB0aG9zZSBjYXNlcywgdGhlIFkgY29vcmRpbmF0ZSBnZXRzIGZsaXBwZWQgYnkgV2lkZ2V0
Ojpjb252ZXJ0RnJvbUNvbnRhaW5pbmdXaW5kb3cuCisgICAgICAgICAgICBOU1BvaW50IGxvY2F0
aW9uID0gW2V2ZW50IGxvY2F0aW9uSW5XaW5kb3ddOworICAgICAgICAgICAgaWYgKHdpbmRvd1Zp
ZXcpCisgICAgICAgICAgICAgICAgbG9jYXRpb24gPSBbd2luZG93VmlldyBjb252ZXJ0UG9pbnQ6
bG9jYXRpb24gZnJvbVZpZXc6bmlsXTsKKyAgICAgICAgICAgIHJldHVybiBJbnRQb2ludChsb2Nh
dGlvbik7CisgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBJ
bnRQb2ludCgpOworICAgIH0KK30KKworc3RhdGljIE1vdXNlQnV0dG9uIG1vdXNlQnV0dG9uRm9y
RXZlbnQoTlNFdmVudCAqZXZlbnQpCit7CisgICAgc3dpdGNoIChbZXZlbnQgdHlwZV0pIHsKKyAg
ICAgICAgY2FzZSBOU0xlZnRNb3VzZURvd246CisgICAgICAgIGNhc2UgTlNMZWZ0TW91c2VVcDoK
KyAgICAgICAgY2FzZSBOU0xlZnRNb3VzZURyYWdnZWQ6CisgICAgICAgICAgICByZXR1cm4gTGVm
dEJ1dHRvbjsKKyAgICAgICAgY2FzZSBOU1JpZ2h0TW91c2VEb3duOgorICAgICAgICBjYXNlIE5T
UmlnaHRNb3VzZVVwOgorICAgICAgICBjYXNlIE5TUmlnaHRNb3VzZURyYWdnZWQ6CisgICAgICAg
ICAgICByZXR1cm4gUmlnaHRCdXR0b247CisgICAgICAgIGNhc2UgTlNPdGhlck1vdXNlRG93bjoK
KyAgICAgICAgY2FzZSBOU090aGVyTW91c2VVcDoKKyAgICAgICAgY2FzZSBOU090aGVyTW91c2VE
cmFnZ2VkOgorICAgICAgICAgICAgcmV0dXJuIE1pZGRsZUJ1dHRvbjsKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIHJldHVybiBOb0J1dHRvbjsKKyAgICB9Cit9CisKK3N0YXRpYyBQbGF0
Zm9ybUV2ZW50OjpUeXBlIG1vdXNlRXZlbnRUeXBlRm9yRXZlbnQoTlNFdmVudCogZXZlbnQpCit7
CisgICAgc3dpdGNoIChbZXZlbnQgdHlwZV0pIHsKKyAgICAgICAgY2FzZSBOU0xlZnRNb3VzZURy
YWdnZWQ6CisgICAgICAgIGNhc2UgTlNNb3VzZUVudGVyZWQ6CisgICAgICAgIGNhc2UgTlNNb3Vz
ZUV4aXRlZDoKKyAgICAgICAgY2FzZSBOU01vdXNlTW92ZWQ6CisgICAgICAgIGNhc2UgTlNPdGhl
ck1vdXNlRHJhZ2dlZDoKKyAgICAgICAgY2FzZSBOU1JpZ2h0TW91c2VEcmFnZ2VkOgorICAgICAg
ICAgICAgcmV0dXJuIFBsYXRmb3JtRXZlbnQ6Ok1vdXNlTW92ZWQ7CisgICAgICAgIGNhc2UgTlNM
ZWZ0TW91c2VEb3duOgorICAgICAgICBjYXNlIE5TUmlnaHRNb3VzZURvd246CisgICAgICAgIGNh
c2UgTlNPdGhlck1vdXNlRG93bjoKKyAgICAgICAgICAgIHJldHVybiBQbGF0Zm9ybUV2ZW50OjpN
b3VzZVByZXNzZWQ7CisgICAgICAgIGNhc2UgTlNMZWZ0TW91c2VVcDoKKyAgICAgICAgY2FzZSBO
U1JpZ2h0TW91c2VVcDoKKyAgICAgICAgY2FzZSBOU090aGVyTW91c2VVcDoKKyAgICAgICAgICAg
IHJldHVybiBQbGF0Zm9ybUV2ZW50OjpNb3VzZVJlbGVhc2VkOworICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgcmV0dXJuIFBsYXRmb3JtRXZlbnQ6Ok1vdXNlTW92ZWQ7CisgICAgfQorfQor
CitzdGF0aWMgaW50IGNsaWNrQ291bnRGb3JFdmVudChOU0V2ZW50ICpldmVudCkKK3sKKyAgICBz
d2l0Y2ggKFtldmVudCB0eXBlXSkgeworICAgICAgICBjYXNlIE5TTGVmdE1vdXNlRG93bjoKKyAg
ICAgICAgY2FzZSBOU0xlZnRNb3VzZVVwOgorICAgICAgICBjYXNlIE5TTGVmdE1vdXNlRHJhZ2dl
ZDoKKyAgICAgICAgY2FzZSBOU1JpZ2h0TW91c2VEb3duOgorICAgICAgICBjYXNlIE5TUmlnaHRN
b3VzZVVwOgorICAgICAgICBjYXNlIE5TUmlnaHRNb3VzZURyYWdnZWQ6CisgICAgICAgIGNhc2Ug
TlNPdGhlck1vdXNlRG93bjoKKyAgICAgICAgY2FzZSBOU090aGVyTW91c2VVcDoKKyAgICAgICAg
Y2FzZSBOU090aGVyTW91c2VEcmFnZ2VkOgorICAgICAgICAgICAgcmV0dXJuIFtldmVudCBjbGlj
a0NvdW50XTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0K
K30KKworc3RhdGljIFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlIG1vbWVudHVtUGhhc2VGb3JFdmVu
dChOU0V2ZW50ICpldmVudCkKK3sKKyAgICB1aW50MzJfdCBwaGFzZSA9IFBsYXRmb3JtV2hlZWxF
dmVudFBoYXNlTm9uZTsKKworI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpICYmICFk
ZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKKyAgICBpZiAoW2V2ZW50IG1vbWVudHVt
UGhhc2VdICYgTlNFdmVudFBoYXNlQmVnYW4pCisgICAgICAgIHBoYXNlIHw9IFBsYXRmb3JtV2hl
ZWxFdmVudFBoYXNlQmVnYW47CisgICAgaWYgKFtldmVudCBtb21lbnR1bVBoYXNlXSAmIE5TRXZl
bnRQaGFzZVN0YXRpb25hcnkpCisgICAgICAgIHBoYXNlIHw9IFBsYXRmb3JtV2hlZWxFdmVudFBo
YXNlU3RhdGlvbmFyeTsKKyAgICBpZiAoW2V2ZW50IG1vbWVudHVtUGhhc2VdICYgTlNFdmVudFBo
YXNlQ2hhbmdlZCkKKyAgICAgICAgcGhhc2UgfD0gUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VDaGFu
Z2VkOworICAgIGlmIChbZXZlbnQgbW9tZW50dW1QaGFzZV0gJiBOU0V2ZW50UGhhc2VFbmRlZCkK
KyAgICAgICAgcGhhc2UgfD0gUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VFbmRlZDsKKyAgICBpZiAo
W2V2ZW50IG1vbWVudHVtUGhhc2VdICYgTlNFdmVudFBoYXNlQ2FuY2VsbGVkKQorICAgICAgICBw
aGFzZSB8PSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZUNhbmNlbGxlZDsKKyNlbHNlCisgICAgc3dp
dGNoICh3a0dldE5TRXZlbnRNb21lbnR1bVBoYXNlKGV2ZW50KSkgeworICAgIGNhc2Ugd2tFdmVu
dFBoYXNlTm9uZToKKyAgICAgICAgcGhhc2UgPSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZU5vbmU7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugd2tFdmVudFBoYXNlQmVnYW46CisgICAgICAgIHBo
YXNlID0gUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VCZWdhbjsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSB3a0V2ZW50UGhhc2VDaGFuZ2VkOgorICAgICAgICBwaGFzZSA9IFBsYXRmb3JtV2hlZWxF
dmVudFBoYXNlQ2hhbmdlZDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSB3a0V2ZW50UGhhc2VF
bmRlZDoKKyAgICAgICAgcGhhc2UgPSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZUVuZGVkOworICAg
ICAgICBicmVhazsKKyAgICB9CisjZW5kaWYKKworICAgIHJldHVybiBzdGF0aWNfY2FzdDxQbGF0
Zm9ybVdoZWVsRXZlbnRQaGFzZT4ocGhhc2UpOworfQorCitzdGF0aWMgUGxhdGZvcm1XaGVlbEV2
ZW50UGhhc2UgcGhhc2VGb3JFdmVudChOU0V2ZW50ICpldmVudCkKK3sKKyNpZiAhZGVmaW5lZChC
VUlMRElOR19PTl9MRU9QQVJEKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQp
CisgICAgdWludDMyX3QgcGhhc2UgPSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZU5vbmU7IAorICAg
IGlmIChbZXZlbnQgcGhhc2VdICYgTlNFdmVudFBoYXNlQmVnYW4pCisgICAgICAgIHBoYXNlIHw9
IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlQmVnYW47CisgICAgaWYgKFtldmVudCBwaGFzZV0gJiBO
U0V2ZW50UGhhc2VTdGF0aW9uYXJ5KQorICAgICAgICBwaGFzZSB8PSBQbGF0Zm9ybVdoZWVsRXZl
bnRQaGFzZVN0YXRpb25hcnk7CisgICAgaWYgKFtldmVudCBwaGFzZV0gJiBOU0V2ZW50UGhhc2VD
aGFuZ2VkKQorICAgICAgICBwaGFzZSB8PSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZUNoYW5nZWQ7
CisgICAgaWYgKFtldmVudCBwaGFzZV0gJiBOU0V2ZW50UGhhc2VFbmRlZCkKKyAgICAgICAgcGhh
c2UgfD0gUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VFbmRlZDsKKyAgICBpZiAoW2V2ZW50IHBoYXNl
XSAmIE5TRXZlbnRQaGFzZUNhbmNlbGxlZCkKKyAgICAgICAgcGhhc2UgfD0gUGxhdGZvcm1XaGVl
bEV2ZW50UGhhc2VDYW5jZWxsZWQ7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFBsYXRmb3JtV2hl
ZWxFdmVudFBoYXNlPihwaGFzZSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShldmVudCk7Cisg
ICAgcmV0dXJuIFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlTm9uZTsKKyNlbmRpZgorfQorCisjaWYg
RU5BQkxFKEdFU1RVUkVfRVZFTlRTKQorc3RhdGljIFBsYXRmb3JtRXZlbnQ6OlR5cGUgZ2VzdHVy
ZUV2ZW50VHlwZUZvckV2ZW50KE5TRXZlbnQgKmV2ZW50KQoreworICAgIHN3aXRjaCAoW2V2ZW50
IHR5cGVdKSB7CisgICAgY2FzZSBOU0V2ZW50VHlwZUJlZ2luR2VzdHVyZToKKyAgICAgICAgcmV0
dXJuIFBsYXRmb3JtRXZlbnQ6Okdlc3R1cmVTY3JvbGxCZWdpbjsKKyAgICBjYXNlIE5TRXZlbnRU
eXBlRW5kR2VzdHVyZToKKyAgICAgICAgcmV0dXJuIFBsYXRmb3JtRXZlbnQ6Okdlc3R1cmVTY3Jv
bGxFbmQ7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgIHJldHVybiBQbGF0Zm9ybUV2ZW50OjpHZXN0dXJlU2Nyb2xsRW5kOworICAgIH0KK30KKyNl
bmRpZgorCitzdGF0aWMgaW5saW5lIFN0cmluZyB0ZXh0RnJvbUV2ZW50KE5TRXZlbnQqIGV2ZW50
KQoreworICAgIGlmIChbZXZlbnQgdHlwZV0gPT0gTlNGbGFnc0NoYW5nZWQpCisgICAgICAgIHJl
dHVybiBTdHJpbmcoIiIpOworICAgIHJldHVybiBTdHJpbmcoW2V2ZW50IGNoYXJhY3RlcnNdKTsK
K30KKworc3RhdGljIGlubGluZSBTdHJpbmcgdW5tb2RpZmllZFRleHRGcm9tRXZlbnQoTlNFdmVu
dCogZXZlbnQpCit7CisgICAgaWYgKFtldmVudCB0eXBlXSA9PSBOU0ZsYWdzQ2hhbmdlZCkKKyAg
ICAgICAgcmV0dXJuIFN0cmluZygiIik7CisgICAgcmV0dXJuIFN0cmluZyhbZXZlbnQgY2hhcmFj
dGVyc0lnbm9yaW5nTW9kaWZpZXJzXSk7Cit9CisKK3N0YXRpYyBTdHJpbmcga2V5SWRlbnRpZmll
ckZvcktleUV2ZW50KE5TRXZlbnQqIGV2ZW50KQoreworICAgIGlmIChbZXZlbnQgdHlwZV0gPT0g
TlNGbGFnc0NoYW5nZWQpIAorICAgICAgICBzd2l0Y2ggKFtldmVudCBrZXlDb2RlXSkgeworICAg
ICAgICAgICAgY2FzZSA1NDogLy8gUmlnaHQgQ29tbWFuZAorICAgICAgICAgICAgY2FzZSA1NTog
Ly8gTGVmdCBDb21tYW5kCisgICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZygiTWV0YSIpOwor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSA1NzogLy8gQ2Fwc2xvY2sKKyAgICAg
ICAgICAgICAgICByZXR1cm4gU3RyaW5nKCJDYXBzTG9jayIpOworICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgY2FzZSA1NjogLy8gTGVmdCBTaGlmdAorICAgICAgICAgICAgY2FzZSA2MDog
Ly8gUmlnaHQgU2hpZnQKKyAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKCJTaGlmdCIpOwor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSA1ODogLy8gTGVmdCBBbHQKKyAgICAg
ICAgICAgIGNhc2UgNjE6IC8vIFJpZ2h0IEFsdAorICAgICAgICAgICAgICAgIHJldHVybiBTdHJp
bmcoIkFsdCIpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSA1OTogLy8gTGVm
dCBDdHJsCisgICAgICAgICAgICBjYXNlIDYyOiAvLyBSaWdodCBDdHJsCisgICAgICAgICAgICAg
ICAgcmV0dXJuIFN0cmluZygiQ29udHJvbCIpOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gU3RyaW5nKCIiKTsKKyAgICAgICAgfQorICAgIAorICAgIE5TU3Ry
aW5nICpzID0gW2V2ZW50IGNoYXJhY3RlcnNJZ25vcmluZ01vZGlmaWVyc107CisgICAgaWYgKFtz
IGxlbmd0aF0gIT0gMSkgeworICAgICAgICBMT0coRXZlbnRzLCAicmVjZWl2ZWQgYW4gdW5leHBl
Y3RlZCBudW1iZXIgb2YgY2hhcmFjdGVycyBpbiBrZXkgZXZlbnQ6ICV1IiwgW3MgbGVuZ3RoXSk7
CisgICAgICAgIHJldHVybiAiVW5pZGVudGlmaWVkIjsKKyAgICB9CisgICAgcmV0dXJuIGtleUlk
ZW50aWZpZXJGb3JDaGFyQ29kZShbcyBjaGFyYWN0ZXJBdEluZGV4OjBdKTsKK30KKworc3RhdGlj
IGJvb2wgaXNLZXlwYWRFdmVudChOU0V2ZW50KiBldmVudCkKK3sKKyAgICAvLyBDaGVjayB0aGF0
IHRoaXMgaXMgdGhlIHR5cGUgb2YgZXZlbnQgdGhhdCBoYXMgYSBrZXlDb2RlLgorICAgIHN3aXRj
aCAoW2V2ZW50IHR5cGVdKSB7CisgICAgICAgIGNhc2UgTlNLZXlEb3duOgorICAgICAgICBjYXNl
IE5TS2V5VXA6CisgICAgICAgIGNhc2UgTlNGbGFnc0NoYW5nZWQ6CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICBpZiAoW2V2ZW50IG1vZGlmaWVyRmxhZ3NdICYgTlNOdW1lcmljUGFkS2V5TWFzaykKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBzd2l0Y2ggKFtldmVudCBrZXlDb2RlXSkgeworICAg
ICAgICBjYXNlIDcxOiAvLyBDbGVhcgorICAgICAgICBjYXNlIDgxOiAvLyA9CisgICAgICAgIGNh
c2UgNzU6IC8vIC8KKyAgICAgICAgY2FzZSA2NzogLy8gKgorICAgICAgICBjYXNlIDc4OiAvLyAt
CisgICAgICAgIGNhc2UgNjk6IC8vICsKKyAgICAgICAgY2FzZSA3NjogLy8gRW50ZXIKKyAgICAg
ICAgY2FzZSA2NTogLy8gLgorICAgICAgICBjYXNlIDgyOiAvLyAwCisgICAgICAgIGNhc2UgODM6
IC8vIDEKKyAgICAgICAgY2FzZSA4NDogLy8gMgorICAgICAgICBjYXNlIDg1OiAvLyAzCisgICAg
ICAgIGNhc2UgODY6IC8vIDQKKyAgICAgICAgY2FzZSA4NzogLy8gNQorICAgICAgICBjYXNlIDg4
OiAvLyA2CisgICAgICAgIGNhc2UgODk6IC8vIDcKKyAgICAgICAgY2FzZSA5MTogLy8gOAorICAg
ICAgICBjYXNlIDkyOiAvLyA5CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgfQorICAg
ICAKKyAgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgaW50IHdpbmRvd3NLZXlDb2RlRm9y
S2V5RXZlbnQoTlNFdmVudCogZXZlbnQpCit7CisgICAgaW50IGNvZGUgPSAwOworICAgIC8vIFRo
ZXJlIGFyZSBzZXZlcmFsIGtpbmRzIG9mIGNoYXJhY3RlcnMgZm9yIHdoaWNoIHdlIHByb2R1Y2Ug
a2V5IGNvZGUgZnJvbSBjaGFyIGNvZGU6CisgICAgLy8gMS4gUm9tYW4gbGV0dGVycy4gV2luZG93
cyBrZXlib2FyZCBsYXlvdXRzIGFmZmVjdCBib3RoIHZpcnR1YWwga2V5IGNvZGVzIGFuZCBjaGFy
YWN0ZXIgY29kZXMgZm9yIHRoZXNlLAorICAgIC8vICAgIHNvIGUuZy4gJ0EnIGdldHMgdGhlIHNh
bWUga2V5Q29kZSBvbiBRV0VSVFksIEFaRVJUWSBvciBEdm9yYWsgbGF5b3V0cy4KKyAgICAvLyAy
LiBLZXlzIGZvciB3aGljaCB0aGVyZSBpcyBubyBrbm93biBNYWMgdmlydHVhbCBrZXkgY29kZXMs
IGxpa2UgUHJpbnRTY3JlZW4uCisgICAgLy8gMy4gQ2VydGFpbiBwdW5jdHVhdGlvbiBrZXlzLiBP
biBXaW5kb3dzLCB0aGVzZSBhcmUgYWxzbyByZW1hcHBlZCBkZXBlbmRpbmcgb24gY3VycmVudCBr
ZXlib2FyZCBsYXlvdXQsCisgICAgLy8gICAgYnV0IHNlZSBjb21tZW50IGluIHdpbmRvd3NLZXlD
b2RlRm9yQ2hhckNvZGUoKS4KKyAgICBpZiAoW2V2ZW50IHR5cGVdID09IE5TS2V5RG93biB8fCBb
ZXZlbnQgdHlwZV0gPT0gTlNLZXlVcCkgeworICAgICAgICAvLyBDbWQgc3dpdGNoZXMgUm9tYW4g
bGV0dGVycyBmb3IgRHZvcmFrLVFXRVJUWSBsYXlvdXQsIHNvIHRyeSBtb2RpZmllZCBjaGFyYWN0
ZXJzIGZpcnN0LgorICAgICAgICBOU1N0cmluZyogcyA9IFtldmVudCBjaGFyYWN0ZXJzXTsKKyAg
ICAgICAgY29kZSA9IFtzIGxlbmd0aF0gPiAwID8gd2luZG93c0tleUNvZGVGb3JDaGFyQ29kZShb
cyBjaGFyYWN0ZXJBdEluZGV4OjBdKSA6IDA7CisgICAgICAgIGlmIChjb2RlKQorICAgICAgICAg
ICAgcmV0dXJuIGNvZGU7CisKKyAgICAgICAgLy8gQ3RybCtBIG9uIGFuIEFaRVJUWSBrZXlib2Fy
ZCB3b3VsZCBnZXQgVktfUSBrZXlDb2RlIGlmIHdlIHJlbGllZCBvbiAtW05TRXZlbnQga2V5Q29k
ZV0gYmVsb3cuCisgICAgICAgIHMgPSBbZXZlbnQgY2hhcmFjdGVyc0lnbm9yaW5nTW9kaWZpZXJz
XTsKKyAgICAgICAgY29kZSA9IFtzIGxlbmd0aF0gPiAwID8gd2luZG93c0tleUNvZGVGb3JDaGFy
Q29kZShbcyBjaGFyYWN0ZXJBdEluZGV4OjBdKSA6IDA7CisgICAgICAgIGlmIChjb2RlKQorICAg
ICAgICAgICAgcmV0dXJuIGNvZGU7CisgICAgfQorCisgICAgLy8gTWFwIE1hYyB2aXJ0dWFsIGtl
eSBjb2RlIGRpcmVjdGx5IHRvIFdpbmRvd3Mgb25lIGZvciBhbnkga2V5cyBub3QgaGFuZGxlZCBh
Ym92ZS4KKyAgICAvLyBFLmcuIHRoZSBrZXkgbmV4dCB0byBDYXBzIExvY2sgaGFzIHRoZSBzYW1l
IEV2ZW50LmtleUNvZGUgb24gVS5TLiBrZXlib2FyZCAoJ0EnKSBhbmQgb24gUnVzc2lhbiBrZXli
b2FyZCAoQ1lSSUxMSUMgTEVUVEVSIEVGKS4KKyAgICByZXR1cm4gd2luZG93c0tleUNvZGVGb3JL
ZXlDb2RlKFtldmVudCBrZXlDb2RlXSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc0tleVVw
RXZlbnQoTlNFdmVudCAqZXZlbnQpCit7CisgICAgaWYgKFtldmVudCB0eXBlXSAhPSBOU0ZsYWdz
Q2hhbmdlZCkKKyAgICAgICAgcmV0dXJuIFtldmVudCB0eXBlXSA9PSBOU0tleVVwOworICAgIC8v
IEZJWE1FOiBUaGlzIGxvZ2ljIGZhaWxzIGlmIHRoZSB1c2VyIHByZXNzZXMgYm90aCBTaGlmdCBr
ZXlzIGF0IG9uY2UsIGZvciBleGFtcGxlOgorICAgIC8vIHdlIHRyZWF0IHJlbGVhc2luZyBvbmUg
b2YgdGhlbSBhcyBrZXlEb3duLgorICAgIHN3aXRjaCAoW2V2ZW50IGtleUNvZGVdKSB7CisgICAg
ICAgIGNhc2UgNTQ6IC8vIFJpZ2h0IENvbW1hbmQKKyAgICAgICAgY2FzZSA1NTogLy8gTGVmdCBD
b21tYW5kCisgICAgICAgICAgICByZXR1cm4gKFtldmVudCBtb2RpZmllckZsYWdzXSAmIE5TQ29t
bWFuZEtleU1hc2spID09IDA7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSA1NzogLy8gQ2Fw
c2xvY2sKKyAgICAgICAgICAgIHJldHVybiAoW2V2ZW50IG1vZGlmaWVyRmxhZ3NdICYgTlNBbHBo
YVNoaWZ0S2V5TWFzaykgPT0gMDsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIDU2OiAvLyBM
ZWZ0IFNoaWZ0CisgICAgICAgIGNhc2UgNjA6IC8vIFJpZ2h0IFNoaWZ0CisgICAgICAgICAgICBy
ZXR1cm4gKFtldmVudCBtb2RpZmllckZsYWdzXSAmIE5TU2hpZnRLZXlNYXNrKSA9PSAwOworICAg
ICAgICAgICAgCisgICAgICAgIGNhc2UgNTg6IC8vIExlZnQgQWx0CisgICAgICAgIGNhc2UgNjE6
IC8vIFJpZ2h0IEFsdAorICAgICAgICAgICAgcmV0dXJuIChbZXZlbnQgbW9kaWZpZXJGbGFnc10g
JiBOU0FsdGVybmF0ZUtleU1hc2spID09IDA7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSA1
OTogLy8gTGVmdCBDdHJsCisgICAgICAgIGNhc2UgNjI6IC8vIFJpZ2h0IEN0cmwKKyAgICAgICAg
ICAgIHJldHVybiAoW2V2ZW50IG1vZGlmaWVyRmxhZ3NdICYgTlNDb250cm9sS2V5TWFzaykgPT0g
MDsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIDYzOiAvLyBGdW5jdGlvbgorICAgICAgICAg
ICAgcmV0dXJuIChbZXZlbnQgbW9kaWZpZXJGbGFnc10gJiBOU0Z1bmN0aW9uS2V5TWFzaykgPT0g
MDsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgaW5saW5lIFBsYXRmb3Jt
RXZlbnQ6Ok1vZGlmaWVycyBtb2RpZmllcnNGb3JFdmVudChOU0V2ZW50ICpldmVudCkKK3sKKyAg
ICB1bnNpZ25lZCBtb2RpZmllcnMgPSAwOworICAgIGlmIChbZXZlbnQgbW9kaWZpZXJGbGFnc10g
JiBOU1NoaWZ0S2V5TWFzaykKKyAgICAgICAgbW9kaWZpZXJzIHw9IFBsYXRmb3JtRXZlbnQ6OlNo
aWZ0S2V5OworICAgIGlmIChbZXZlbnQgbW9kaWZpZXJGbGFnc10gJiBOU0NvbnRyb2xLZXlNYXNr
KQorICAgICAgICBtb2RpZmllcnMgfD0gUGxhdGZvcm1FdmVudDo6Q3RybEtleTsKKyAgICBpZiAo
W2V2ZW50IG1vZGlmaWVyRmxhZ3NdICYgTlNBbHRlcm5hdGVLZXlNYXNrKQorICAgICAgICBtb2Rp
ZmllcnMgfD0gUGxhdGZvcm1FdmVudDo6QWx0S2V5OworICAgIGlmIChbZXZlbnQgbW9kaWZpZXJG
bGFnc10gJiBOU0NvbW1hbmRLZXlNYXNrKQorICAgICAgICBtb2RpZmllcnMgfD0gUGxhdGZvcm1F
dmVudDo6TWV0YUtleTsKKyAgICByZXR1cm4gKFBsYXRmb3JtRXZlbnQ6Ok1vZGlmaWVycyltb2Rp
ZmllcnM7Cit9CisKKworY2xhc3MgUGxhdGZvcm1Nb3VzZUV2ZW50QnVpbGRlciA6IHB1YmxpYyBQ
bGF0Zm9ybU1vdXNlRXZlbnQgeworcHVibGljOgorICAgIFBsYXRmb3JtTW91c2VFdmVudEJ1aWxk
ZXIoTlNFdmVudCAqZXZlbnQsIE5TVmlldyAqd2luZG93VmlldykKKyAgICB7CisgICAgICAgIC8v
IFBsYXRmb3JtRXZlbnQKKyAgICAgICAgbV90eXBlICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgPSBtb3VzZUV2ZW50VHlwZUZvckV2ZW50KGV2ZW50KTsKKyAgICAgICAgbV9tb2RpZmllcnMg
ICAgICAgICAgICAgICAgICAgICAgICAgPSBtb2RpZmllcnNGb3JFdmVudChldmVudCk7CisgICAg
ICAgIG1fdGltZXN0YW1wICAgICAgICAgICAgICAgICAgICAgICAgID0gW2V2ZW50IHRpbWVzdGFt
cF07CisKKyAgICAgICAgLy8gUGxhdGZvcm1Nb3VzZUV2ZW50CisgICAgICAgIG1fcG9zaXRpb24g
ICAgICAgICAgICAgICAgICAgICAgICAgID0gcG9pbnRGb3JFdmVudChldmVudCwgd2luZG93Vmll
dyk7CisgICAgICAgIG1fZ2xvYmFsUG9zaXRpb24gICAgICAgICAgICAgICAgICAgID0gZ2xvYmFs
UG9pbnRGb3JFdmVudChldmVudCk7CisgICAgICAgIG1fYnV0dG9uICAgICAgICAgICAgICAgICAg
ICAgICAgICAgID0gbW91c2VCdXR0b25Gb3JFdmVudChldmVudCk7CisgICAgICAgIG1fY2xpY2tD
b3VudCAgICAgICAgICAgICAgICAgICAgICAgID0gY2xpY2tDb3VudEZvckV2ZW50KGV2ZW50KTsK
KyAgICAgICAgCisgICAgICAgIC8vIE1hYyBzcGVjaWZpYworICAgICAgICBtX21vZGlmaWVyRmxh
Z3MgICAgICAgICAgICAgICAgICAgICA9IFtldmVudCBtb2RpZmllckZsYWdzXTsKKyAgICAgICAg
bV9ldmVudE51bWJlciAgICAgICAgICAgICAgICAgICAgICAgPSBbZXZlbnQgZXZlbnROdW1iZXJd
OworICAgIH0KK307CisKK1BsYXRmb3JtTW91c2VFdmVudCBQbGF0Zm9ybUV2ZW50RmFjdG9yeTo6
Y3JlYXRlUGxhdGZvcm1Nb3VzZUV2ZW50KE5TRXZlbnQgKmV2ZW50LCBOU1ZpZXcgKndpbmRvd1Zp
ZXcpCit7CisgICAgcmV0dXJuIFBsYXRmb3JtTW91c2VFdmVudEJ1aWxkZXIoZXZlbnQsIHdpbmRv
d1ZpZXcpOworfQorCisKK2NsYXNzIFBsYXRmb3JtV2hlZWxFdmVudEJ1aWxkZXIgOiBwdWJsaWMg
UGxhdGZvcm1XaGVlbEV2ZW50IHsKK3B1YmxpYzoKKyAgICBQbGF0Zm9ybVdoZWVsRXZlbnRCdWls
ZGVyKE5TRXZlbnQgKmV2ZW50LCBOU1ZpZXcgKndpbmRvd1ZpZXcpCisgICAgeworICAgICAgICAv
LyBQbGF0Zm9ybUV2ZW50CisgICAgICAgIG1fdHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgID0gUGxhdGZvcm1FdmVudDo6V2hlZWw7CisgICAgICAgIG1fbW9kaWZpZXJzICAgICAgICAg
ICAgICAgICAgICAgICAgID0gbW9kaWZpZXJzRm9yRXZlbnQoZXZlbnQpOworICAgICAgICBtX3Rp
bWVzdGFtcCAgICAgICAgICAgICAgICAgICAgICAgICA9IFtldmVudCB0aW1lc3RhbXBdOworCisg
ICAgICAgIC8vIFBsYXRmb3JtV2hlZWxFdmVudAorICAgICAgICBtX3Bvc2l0aW9uICAgICAgICAg
ICAgICAgICAgICAgICAgICA9IHBvaW50Rm9yRXZlbnQoZXZlbnQsIHdpbmRvd1ZpZXcpOworICAg
ICAgICBtX2dsb2JhbFBvc2l0aW9uICAgICAgICAgICAgICAgICAgICA9IGdsb2JhbFBvaW50Rm9y
RXZlbnQoZXZlbnQpOworICAgICAgICBtX2dyYW51bGFyaXR5ICAgICAgICAgICAgICAgICAgICAg
ICA9IFNjcm9sbEJ5UGl4ZWxXaGVlbEV2ZW50OworCisgICAgICAgIEJPT0wgY29udGludW91czsK
KyAgICAgICAgd2tHZXRXaGVlbEV2ZW50RGVsdGFzKGV2ZW50LCAmbV9kZWx0YVgsICZtX2RlbHRh
WSwgJmNvbnRpbnVvdXMpOworICAgICAgICBpZiAoY29udGludW91cykgeworICAgICAgICAgICAg
bV93aGVlbFRpY2tzWCA9IG1fZGVsdGFYIC8gc3RhdGljX2Nhc3Q8ZmxvYXQ+KFNjcm9sbGJhcjo6
cGl4ZWxzUGVyTGluZVN0ZXAoKSk7CisgICAgICAgICAgICBtX3doZWVsVGlja3NZID0gbV9kZWx0
YVkgLyBzdGF0aWNfY2FzdDxmbG9hdD4oU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpKTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fd2hlZWxUaWNrc1ggPSBtX2RlbHRhWDsK
KyAgICAgICAgICAgIG1fd2hlZWxUaWNrc1kgPSBtX2RlbHRhWTsKKyAgICAgICAgICAgIG1fZGVs
dGFYICo9IHN0YXRpY19jYXN0PGZsb2F0PihTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCkp
OworICAgICAgICAgICAgbV9kZWx0YVkgKj0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KFNjcm9sbGJhcjo6
cGl4ZWxzUGVyTGluZVN0ZXAoKSk7CisgICAgICAgIH0KKworICAgICAgICBtX3BoYXNlICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA9IHBoYXNlRm9yRXZlbnQoZXZlbnQpOworICAgICAgICBt
X21vbWVudHVtUGhhc2UgICAgICAgICAgICAgICAgICAgICA9IG1vbWVudHVtUGhhc2VGb3JFdmVu
dChldmVudCk7CisgICAgICAgIG1faGFzUHJlY2lzZVNjcm9sbGluZ0RlbHRhcyAgICAgICAgID0g
Y29udGludW91czsKKworI2lmIEhBVkUoSU5WRVJURURfV0hFRUxfRVZFTlRTKQorICAgICAgICBt
X2RpcmVjdGlvbkludmVydGVkRnJvbURldmljZSAgICAgICA9IFtldmVudCBpc0RpcmVjdGlvbklu
dmVydGVkRnJvbURldmljZV07CisjZWxzZQorICAgICAgICBtX2RpcmVjdGlvbkludmVydGVkRnJv
bURldmljZSAgICAgICA9IGZhbHNlOworI2VuZGlmCisgICAgfQorfTsKKworUGxhdGZvcm1XaGVl
bEV2ZW50IFBsYXRmb3JtRXZlbnRGYWN0b3J5OjpjcmVhdGVQbGF0Zm9ybVdoZWVsRXZlbnQoTlNF
dmVudCAqZXZlbnQsIE5TVmlldyAqd2luZG93VmlldykKK3sKKyAgICByZXR1cm4gUGxhdGZvcm1X
aGVlbEV2ZW50QnVpbGRlcihldmVudCwgd2luZG93Vmlldyk7Cit9CisKKworY2xhc3MgUGxhdGZv
cm1LZXlib2FyZEV2ZW50QnVpbGRlciA6IHB1YmxpYyBQbGF0Zm9ybUtleWJvYXJkRXZlbnQgewor
cHVibGljOgorICAgIFBsYXRmb3JtS2V5Ym9hcmRFdmVudEJ1aWxkZXIoTlNFdmVudCAqZXZlbnQp
CisgICAgeworICAgICAgICAvLyBQbGF0Zm9ybUV2ZW50CisgICAgICAgIG1fdHlwZSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgID0gaXNLZXlVcEV2ZW50KGV2ZW50KSA/IFBsYXRmb3JtRXZl
bnQ6OktleVVwIDogUGxhdGZvcm1FdmVudDo6S2V5RG93bjsKKyAgICAgICAgbV9tb2RpZmllcnMg
ICAgICAgICAgICAgICAgICAgICAgICAgPSBtb2RpZmllcnNGb3JFdmVudChldmVudCk7CisgICAg
ICAgIG1fdGltZXN0YW1wICAgICAgICAgICAgICAgICAgICAgICAgID0gW2V2ZW50IHRpbWVzdGFt
cF07CisKKyAgICAgICAgLy8gUGxhdGZvcm1LZXlib2FyZEV2ZW50CisgICAgICAgIG1fdGV4dCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gdGV4dEZyb21FdmVudChldmVudCk7CisgICAg
ICAgIG1fdW5tb2RpZmllZFRleHQgICAgICAgICAgICAgICAgICAgID0gdW5tb2RpZmllZFRleHRG
cm9tRXZlbnQoZXZlbnQpOworICAgICAgICBtX2tleUlkZW50aWZpZXIgICAgICAgICAgICAgICAg
ICAgICA9IGtleUlkZW50aWZpZXJGb3JLZXlFdmVudChldmVudCk7CisgICAgICAgIG1fd2luZG93
c1ZpcnR1YWxLZXlDb2RlICAgICAgICAgICAgID0gd2luZG93c0tleUNvZGVGb3JLZXlFdmVudChl
dmVudCk7CisgICAgICAgIG1fbmF0aXZlVmlydHVhbEtleUNvZGUgICAgICAgICAgICAgID0gW2V2
ZW50IGtleUNvZGVdOworICAgICAgICBtX21hY0NoYXJDb2RlICAgICAgICAgICAgICAgICAgICAg
ICA9IHdrR2V0TlNFdmVudEtleUNoYXIoZXZlbnQpOworICAgICAgICBtX2F1dG9SZXBlYXQgICAg
ICAgICAgICAgICAgICAgICAgICA9IChbZXZlbnQgdHlwZV0gIT0gTlNGbGFnc0NoYW5nZWQpICYm
IFtldmVudCBpc0FSZXBlYXRdOworICAgICAgICBtX2lzS2V5cGFkICAgICAgICAgICAgICAgICAg
ICAgICAgICA9IGlzS2V5cGFkRXZlbnQoZXZlbnQpOworICAgICAgICBtX2lzU3lzdGVtS2V5ICAg
ICAgICAgICAgICAgICAgICAgICA9IGZhbHNlOyAvLyBTeXN0ZW1LZXkgaXMgYWx3YXlzIGZhbHNl
IG9uIHRoZSBNYWMuCisKKyAgICAgICAgLy8gQWx3YXlzIHVzZSAxMyBmb3IgRW50ZXIvUmV0dXJu
IC0tIHdlIGRvbid0IHdhbnQgdG8gdXNlIEFwcEtpdCdzIGRpZmZlcmVudCBjaGFyYWN0ZXIgZm9y
IEVudGVyLgorICAgICAgICBpZiAobV93aW5kb3dzVmlydHVhbEtleUNvZGUgPT0gVktfUkVUVVJO
KSB7CisgICAgICAgICAgICBtX3RleHQgPSAiXHIiOworICAgICAgICAgICAgbV91bm1vZGlmaWVk
VGV4dCA9ICJcciI7CisgICAgICAgIH0KKworICAgICAgICAvLyBBcHBLaXQgc2V0cyB0ZXh0IHRv
ICJceDdGIiBmb3IgYmFja3NwYWNlLCBidXQgdGhlIGNvcnJlY3QgS2V5Ym9hcmRFdmVudCBjaGFy
YWN0ZXIgY29kZSBpcyA4LgorICAgICAgICBpZiAobV93aW5kb3dzVmlydHVhbEtleUNvZGUgPT0g
VktfQkFDSykgeworICAgICAgICAgICAgbV90ZXh0ID0gIlx4OCI7CisgICAgICAgICAgICBtX3Vu
bW9kaWZpZWRUZXh0ID0gIlx4OCI7CisgICAgICAgIH0KKworICAgICAgICAvLyBBbHdheXMgdXNl
IDkgZm9yIFRhYiAtLSB3ZSBkb24ndCB3YW50IHRvIHVzZSBBcHBLaXQncyBkaWZmZXJlbnQgY2hh
cmFjdGVyIGZvciBzaGlmdC10YWIuCisgICAgICAgIGlmIChtX3dpbmRvd3NWaXJ0dWFsS2V5Q29k
ZSA9PSBWS19UQUIpIHsKKyAgICAgICAgICAgIG1fdGV4dCA9ICJceDkiOworICAgICAgICAgICAg
bV91bm1vZGlmaWVkVGV4dCA9ICJceDkiOworICAgICAgICB9CisKKyAgICAgICAgLy8gTWFjIHNw
ZWNpZmljLgorICAgICAgICBtX21hY0V2ZW50ID0gZXZlbnQ7CisgICAgfQorfTsKKworUGxhdGZv
cm1LZXlib2FyZEV2ZW50IFBsYXRmb3JtRXZlbnRGYWN0b3J5OjpjcmVhdGVQbGF0Zm9ybUtleWJv
YXJkRXZlbnQoTlNFdmVudCAqZXZlbnQpCit7CisgICAgcmV0dXJuIFBsYXRmb3JtS2V5Ym9hcmRF
dmVudEJ1aWxkZXIoZXZlbnQpOworfQorCisjaWYgRU5BQkxFKEdFU1RVUkVfRVZFTlRTKQorY2xh
c3MgUGxhdGZvcm1HZXN0dXJlRXZlbnRCdWlsZGVyIDogcHVibGljIFBsYXRmb3JtR2VzdHVyZUV2
ZW50IHsKK3B1YmxpYzoKKyAgICBQbGF0Zm9ybUdlc3R1cmVFdmVudEJ1aWxkZXIoTlNFdmVudCAq
ZXZlbnQsIE5TVmlldyAqd2luZG93VmlldykKKyAgICB7CisgICAgICAgIC8vIFBsYXRmb3JtRXZl
bnQKKyAgICAgICAgbV90eXBlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBnZXN0dXJl
RXZlbnRUeXBlRm9yRXZlbnQoZXZlbnQpOworICAgICAgICBtX21vZGlmaWVycyAgICAgICAgICAg
ICAgICAgICAgICAgICA9IG1vZGlmaWVyc0ZvckV2ZW50KGV2ZW50KTsKKyAgICAgICAgbV90aW1l
c3RhbXAgICAgICAgICAgICAgICAgICAgICAgICAgPSBbZXZlbnQgdGltZXN0YW1wXTsKKworICAg
ICAgICAvLyBQbGF0Zm9ybUdlc3R1cmVFdmVudAorICAgICAgICBtX3Bvc2l0aW9uICAgICAgICAg
ICAgICAgICAgICAgICAgICA9IHBvaW50Rm9yRXZlbnQoZXZlbnQsIHdpbmRvd1ZpZXcpOworICAg
ICAgICBtX2dsb2JhbFBvc2l0aW9uICAgICAgICAgICAgICAgICAgICA9IGdsb2JhbFBvaW50Rm9y
RXZlbnQoZXZlbnQpOworICAgICAgICBtX2RlbHRhWCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA9IDA7CisgICAgICAgIG1fZGVsdGFZICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMDsK
KyAgICB9Cit9OworCitQbGF0Zm9ybUdlc3R1cmVFdmVudCBQbGF0Zm9ybUV2ZW50RmFjdG9yeTo6
Y3JlYXRlUGxhdGZvcm1HZXN0dXJlRXZlbnQoTlNFdmVudCAqZXZlbnQsIE5TVmlldyAqd2luZG93
VmlldykKK3sKKyAgICByZXR1cm4gUGxhdGZvcm1HZXN0dXJlRXZlbnRCdWlsZGVyKGV2ZW50LCB3
aW5kb3dWaWV3KTsKK30KKyNlbmRpZgorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>