<?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>193929</bug_id>
          
          <creation_ts>2019-01-28 15:18:56 -0800</creation_ts>
          <short_desc>Move platform-specific files out of WTF root directory.</short_desc>
          <delta_ts>2019-01-28 20:01:38 -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>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="Ross Kirsling">ross.kirsling</reporter>
          <assigned_to name="Ross Kirsling">ross.kirsling</assigned_to>
          <cc>achristensen</cc>
    
    <cc>commit-queue</cc>
    
    <cc>don.olmstead</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1499222</commentid>
    <comment_count>0</comment_count>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2019-01-28 15:18:56 -0800</bug_when>
    <thetext>Move platform-specific files out of WTF root directory.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1499223</commentid>
    <comment_count>1</comment_count>
      <attachid>360384</attachid>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2019-01-28 15:19:41 -0800</bug_when>
    <thetext>Created attachment 360384
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1499226</commentid>
    <comment_count>2</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-01-28 15:23:15 -0800</bug_when>
    <thetext>Attachment 360384 did not pass style-queue:


ERROR: Source/WTF/wtf/posix/OSAllocatorPOSIX.cpp:28:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WTF/wtf/cf/RunLoopTimerCF.cpp:34:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WTF/wtf/win/ThreadingWin.cpp:88:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WTF/wtf/win/ThreadingWin.cpp:116:  MS_VC_EXCEPTION is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/win/ThreadingWin.cpp:214:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/win/ThreadingWin.cpp:342:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/win/OSAllocatorWin.cpp:28:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 7 in 16 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1499269</commentid>
    <comment_count>3</comment_count>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2019-01-28 16:35:40 -0800</bug_when>
    <thetext>I&apos;d be happy to move ThreadingPthreads.cpp to posix/ at the same time, but I wonder if the filename should be updated to ThreadingPOSIX.cpp then?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1499356</commentid>
    <comment_count>4</comment_count>
      <attachid>360419</attachid>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2019-01-28 19:15:46 -0800</bug_when>
    <thetext>Created attachment 360419
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1499371</commentid>
    <comment_count>5</comment_count>
      <attachid>360419</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-01-28 20:00:15 -0800</bug_when>
    <thetext>Comment on attachment 360419
Patch for landing

Clearing flags on attachment: 360419

Committed r240636: &lt;https://trac.webkit.org/changeset/240636&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1499372</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-01-28 20:00:18 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1499375</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-01-28 20:01:38 -0800</bug_when>
    <thetext>&lt;rdar://problem/47621312&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>360384</attachid>
            <date>2019-01-28 15:19:41 -0800</date>
            <delta_ts>2019-01-28 19:15:44 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-193929-20190128151940.patch</filename>
            <type>text/plain</type>
            <size>106763</size>
            <attacher name="Ross Kirsling">ross.kirsling</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQwNjAwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGNjY2NhNDk3ZTc5N2Y4ZGM5ZjQzNWNj
ZTQyYzY5MzJhNjNlODYxMTIuLjljZjBlYzE0NjBjZDhjM2U4OWEzMTY2YWU3YjM4MDdmM2I5MGM0
ZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjcgQEAKKzIwMTktMDEtMjggIFJvc3MgS2lyc2xpbmcgIDxyb3Nz
LmtpcnNsaW5nQHNvbnkuY29tPgorCisgICAgICAgIE1vdmUgcGxhdGZvcm0tc3BlY2lmaWMgZmls
ZXMgb3V0IG9mIFdURiByb290IGRpcmVjdG9yeS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MzkyOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6Cisg
ICAgICAgICogd3RmL0NNYWtlTGlzdHMudHh0OgorICAgICAgICAqIHd0Zi9QbGF0Zm9ybUdUSy5j
bWFrZToKKyAgICAgICAgKiB3dGYvUGxhdGZvcm1KU0NPbmx5LmNtYWtlOgorICAgICAgICAqIHd0
Zi9QbGF0Zm9ybU1hYy5jbWFrZToKKyAgICAgICAgKiB3dGYvUGxhdGZvcm1QbGF5U3RhdGlvbi5j
bWFrZToKKyAgICAgICAgKiB3dGYvUGxhdGZvcm1XUEUuY21ha2U6CisgICAgICAgICogd3RmL1Bs
YXRmb3JtV2luLmNtYWtlOgorICAgICAgICAqIHd0Zi9jZi9SdW5Mb29wVGltZXJDRi5jcHA6IFJl
bmFtZWQgZnJvbSBTb3VyY2UvV1RGL3d0Zi9SdW5Mb29wVGltZXJDRi5jcHAuCisgICAgICAgICog
d3RmL2NmL1NjaGVkdWxlUGFpckNGLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XVEYvd3RmL1Nj
aGVkdWxlUGFpckNGLmNwcC4KKyAgICAgICAgKiB3dGYvbWFjL1NjaGVkdWxlUGFpck1hYy5tbTog
UmVuYW1lZCBmcm9tIFNvdXJjZS9XVEYvd3RmL1NjaGVkdWxlUGFpck1hYy5tbS4KKyAgICAgICAg
KiB3dGYvcG9zaXgvT1NBbGxvY2F0b3JQT1NJWC5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV1RG
L3d0Zi9PU0FsbG9jYXRvclBvc2l4LmNwcC4KKyAgICAgICAgKiB3dGYvd2luL0NPTlRSSUJVVE9S
Uy5wdGhyZWFkcy13aW4zMjogUmVuYW1lZCBmcm9tIFNvdXJjZS9XVEYvd3RmL0NPTlRSSUJVVE9S
Uy5wdGhyZWFkcy13aW4zMi4KKyAgICAgICAgKiB3dGYvd2luL09TQWxsb2NhdG9yV2luLmNwcDog
UmVuYW1lZCBmcm9tIFNvdXJjZS9XVEYvd3RmL09TQWxsb2NhdG9yV2luLmNwcC4KKyAgICAgICAg
KiB3dGYvd2luL1RocmVhZFNwZWNpZmljV2luLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XVEYv
d3RmL1RocmVhZFNwZWNpZmljV2luLmNwcC4KKyAgICAgICAgKiB3dGYvd2luL1RocmVhZGluZ1dp
bi5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmdXaW4uY3BwLgorCiAy
MDE5LTAxLTI4ICBSb3NzIEtpcnNsaW5nICA8cm9zcy5raXJzbGluZ0Bzb255LmNvbT4KIAogICAg
ICAgICBbSlNDT25seV1bV1RGXSBFeHBvc2UgRmlsZVN5c3RlbS4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV1RGL1dURi54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGQ5NTNiMWJhZjdlNzI3MTg5ZDAwOGNhYThhZGIx
ZjMyODE5ZjE2ODYuLjA3ODE0MjM2Yjg3NjUxNmQxM2U5NmY5YzAxMWViMmI4YWM0ODA1ODMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIv
U291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNDYsOSArNDYsNiBA
QAogCQkxNDAyMkY0MTE4RjVDM0ZDMDA3RkYwRUIgLyogbGliYm1hbGxvYy5hIGluIEZyYW1ld29y
a3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQwMjJGNDAxOEY1QzNGQzAw
N0ZGMEVCIC8qIGxpYmJtYWxsb2MuYSAqLzsgfTsKIAkJMTQzRERFOTYyMEM4QkMzNzAwN0Y3NkZB
IC8qIEVudGl0bGVtZW50cy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDE0M0RERTk1MjBDOEJDMzcwMDdGNzZGQSAvKiBFbnRpdGxlbWVudHMubW0gKi87
IH07CiAJCTE0M0Y2MTFGMTU2NUYwRjkwMERCNTE0QSAvKiBSQU1TaXplLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0M0Y2MTFEMTU2NUYwRjkwMERC
NTE0QSAvKiBSQU1TaXplLmNwcCAqLzsgfTsKLQkJMTQ2OTQxOTMxNkVBQUY2RDAwMjRFMTQ2IC8q
IFJ1bkxvb3BUaW1lckNGLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDE0Njk0MTkxMTZFQUFGNkQwMDI0RTE0NiAvKiBSdW5Mb29wVGltZXJDRi5jcHAg
Ki87IH07Ci0JCTE0Njk0MTk3MTZFQUFGRjgwMDI0RTE0NiAvKiBTY2hlZHVsZVBhaXJNYWMubW0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDY5NDE5NTE2
RUFBRkY4MDAyNEUxNDYgLyogU2NoZWR1bGVQYWlyTWFjLm1tICovOyB9OwotCQkxNDY5NDE5OTE2
RUFCMDQxMDAyNEUxNDYgLyogU2NoZWR1bGVQYWlyQ0YuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ2OTQxOTgxNkVBQjA0MTAwMjRFMTQ2IC8qIFNj
aGVkdWxlUGFpckNGLmNwcCAqLzsgfTsKIAkJMTQ2OTQxOUQxNkVBQjEwQTAwMjRFMTQ2IC8qIEF1
dG9kcmFpbmVkUG9vbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAxNDY5NDE5QjE2RUFCMTBBMDAyNEUxNDYgLyogQXV0b2RyYWluZWRQb29sLmNwcCAq
LzsgfTsKIAkJMUExRDhCOUUxNzMxODc5ODAwMTQxREE0IC8qIEZ1bmN0aW9uRGlzcGF0Y2hlci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTFEOEI5
RDE3MzE4Nzk4MDAxNDFEQTQgLyogRnVuY3Rpb25EaXNwYXRjaGVyLmNwcCAqLzsgfTsKIAkJMUFD
QUREODQxODg0NDgwMTAwRDhCNzFEIC8qIERlcHJlY2F0ZWRTeW1ib2xzVXNlZEJ5U2FmYXJpLm1t
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFDQUREODIx
ODg0NDgwMTAwRDhCNzFEIC8qIERlcHJlY2F0ZWRTeW1ib2xzVXNlZEJ5U2FmYXJpLm1tICovOyB9
OwpAQCAtOTcsNiArOTQsMTAgQEAKIAkJQTMzMUQ5NjcyMUYyNEFCRDAwOUYwMkFBIC8qIEZpbGVT
eXN0ZW1QT1NJWC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBMzMxRDk2NjIxRjI0QUJEMDA5RjAyQUEgLyogRmlsZVN5c3RlbVBPU0lYLmNwcCAqLzsg
fTsKIAkJQTNCNzI1RUM5ODc0NDZBRDkzRjFBNDQwIC8qIFJhbmRvbURldmljZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDOEY1OTdDQTJBNTc0MTdG
QkFCOTJGRDYgLyogUmFuZG9tRGV2aWNlLmNwcCAqLzsgfTsKIAkJQTNFNEREOTMxRjNBODAzNDAw
REVEMEI0IC8qIFRleHRTdHJlYW0uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTNFNEREOTExRjNBODAzNDAwREVEMEI0IC8qIFRleHRTdHJlYW0uY3Bw
ICovOyB9OworCQlBM0VFNUMzQTIxRkZBQzVGMDBGQUJENjEgLyogT1NBbGxvY2F0b3JQT1NJWC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBM0VFNUMz
OTIxRkZBQzVFMDBGQUJENjEgLyogT1NBbGxvY2F0b3JQT1NJWC5jcHAgKi87IH07CisJCUEzRUU1
QzNEMjFGRkFDN0QwMEZBQkQ2MSAvKiBTY2hlZHVsZVBhaXJDRi5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBM0VFNUMzQjIxRkZBQzdDMDBGQUJENjEg
LyogU2NoZWR1bGVQYWlyQ0YuY3BwICovOyB9OworCQlBM0VFNUMzRTIxRkZBQzdEMDBGQUJENjEg
LyogUnVuTG9vcFRpbWVyQ0YuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTNFRTVDM0MyMUZGQUM3RDAwRkFCRDYxIC8qIFJ1bkxvb3BUaW1lckNGLmNw
cCAqLzsgfTsKKwkJQTNFRTVDNDAyMUZGQUNBMjAwRkFCRDYxIC8qIFNjaGVkdWxlUGFpck1hYy5t
bSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEzRUU1QzNG
MjFGRkFDQTIwMEZBQkQ2MSAvKiBTY2hlZHVsZVBhaXJNYWMubW0gKi87IH07CiAJCUE1QkExNUYz
MTgyNDMzQTkwMEE4MkU2OSAvKiBTdHJpbmdDb2NvYS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1QkExNUYyMTgyNDMzQTkwMEE4MkU2OSAvKiBTdHJp
bmdDb2NvYS5tbSAqLzsgfTsKIAkJQTVCQTE1RjUxODI0MzQ4MDAwQTgyRTY5IC8qIFN0cmluZ0lt
cGxDb2NvYS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE1QkExNUY0MTgyNDM0ODAwMEE4MkU2OSAvKiBTdHJpbmdJbXBsQ29jb2EubW0gKi87IH07CiAJ
CUE1QkExNUZBMTgyNDM1QTYwMEE4MkU2OSAvKiBBdG9taWNTdHJpbmdJbXBsQ0YuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTVCQTE1RjcxODI0MzVB
NjAwQTgyRTY5IC8qIEF0b21pY1N0cmluZ0ltcGxDRi5jcHAgKi87IH07CkBAIC0xMjYsNyArMTI3
LDYgQEAKIAkJQThBNDczRTkxNTFBODI1QjAwNDEyM0ZGIC8qIE1ENS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEE0NzJDQTE1MUE4MjVCMDA0MTIz
RkYgLyogTUQ1LmNwcCAqLzsgfTsKIAkJQThBNDczRUMxNTFBODI1QjAwNDEyM0ZGIC8qIE1ldGFB
bGxvY2F0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQThBNDcyQ0QxNTFBODI1QjAwNDEyM0ZGIC8qIE1ldGFBbGxvY2F0b3IuY3BwICovOyB9Owog
CQlBOEE0NzNGNDE1MUE4MjVCMDA0MTIzRkYgLyogTnVtYmVyT2ZDb3Jlcy5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEE0NzJENTE1MUE4MjVCMDA0
MTIzRkYgLyogTnVtYmVyT2ZDb3Jlcy5jcHAgKi87IH07Ci0JCUE4QTQ3M0Y3MTUxQTgyNUIwMDQx
MjNGRiAvKiBPU0FsbG9jYXRvclBvc2l4LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEE4QTQ3MkQ4MTUxQTgyNUIwMDQxMjNGRiAvKiBPU0FsbG9jYXRv
clBvc2l4LmNwcCAqLzsgfTsKIAkJQThBNDczRjkxNTFBODI1QjAwNDEyM0ZGIC8qIE9TUmFuZG9t
U291cmNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE4QTQ3MkRBMTUxQTgyNUIwMDQxMjNGRiAvKiBPU1JhbmRvbVNvdXJjZS5jcHAgKi87IH07CiAJ
CUE4QTQ3NDAyMTUxQTgyNUIwMDQxMjNGRiAvKiBQYWdlQmxvY2suY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThBNDcyRTMxNTFBODI1QjAwNDEyM0ZG
IC8qIFBhZ2VCbG9jay5jcHAgKi87IH07CiAJCUE4QTQ3NDE0MTUxQTgyNUIwMDQxMjNGRiAvKiBS
YW5kb21OdW1iZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQThBNDcyRkIxNTFBODI1QjAwNDEyM0ZGIC8qIFJhbmRvbU51bWJlci5jcHAgKi87IH07
CkBAIC0yODEsMTAgKzI4MSw3IEBACiAJCTE0NDdBRUM1MThGQ0U1NzcwMEIzRDdGRiAvKiBGb3Vu
ZGF0aW9uLmZyYW1ld29yayAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHdyYXBwZXIuZnJhbWV3b3JrOyBuYW1lID0gRm91bmRhdGlvbi5mcmFtZXdvcms7
IHBhdGggPSAvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9Gb3VuZGF0aW9uLmZyYW1ld29yazsg
c291cmNlVHJlZSA9ICI8YWJzb2x1dGU+IjsgfTsKIAkJMTQ0N0FFQ0ExOEZDRTVCOTAwQjNEN0ZG
IC8qIGxpYmljdWNvcmUuZHlsaWIgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSAiY29tcGlsZWQubWFjaC1vLmR5bGliIjsgbmFtZSA9IGxpYmljdWNvcmUu
ZHlsaWI7IHBhdGggPSAvdXNyL2xpYi9saWJpY3Vjb3JlLmR5bGliOyBzb3VyY2VUcmVlID0gIjxh
YnNvbHV0ZT4iOyB9OwogCQkxNDY5NDE5MDE2RUFBRjZEMDAyNEUxNDYgLyogUnVuTG9vcFRpbWVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJ1bkxvb3BUaW1lci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxNDY5NDE5MTE2RUFBRjZEMDAyNEUxNDYgLyogUnVu
TG9vcFRpbWVyQ0YuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUnVu
TG9vcFRpbWVyQ0YuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDY5NDE5NDE2
RUFBRkY4MDAyNEUxNDYgLyogU2NoZWR1bGVQYWlyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFNjaGVkdWxlUGFpci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkx
NDY5NDE5NTE2RUFBRkY4MDAyNEUxNDYgLyogU2NoZWR1bGVQYWlyTWFjLm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gU2NoZWR1bGVQYWlyTWFjLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQkxNDY5NDE5ODE2RUFCMDQxMDAyNEUxNDYgLyogU2NoZWR1
bGVQYWlyQ0YuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2NoZWR1
bGVQYWlyQ0YuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDY5NDE5QTE2RUFC
MTBBMDAyNEUxNDYgLyogQXV0b2RyYWluZWRQb29sLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEF1dG9kcmFpbmVkUG9vbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkxNDY5NDE5QjE2RUFCMTBBMDAyNEUxNDYgLyogQXV0b2RyYWluZWRQb29sLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEF1dG9kcmFpbmVkUG9vbC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0OUVGMTYyMTZCQkZFMEQwMDBBNDMzMSAvKiBUcmlT
dGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUcmlTdGF0ZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDQ5LDYgKzQ0NiwxMCBAQAogCQlBM0QyNzNCOTIx
RjJFRTkxMDA4NjY5NzEgLyogTWV0YWRhdGFTUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gTWV0YWRhdGFTUEkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTNF
NEREOTExRjNBODAzNDAwREVEMEI0IC8qIFRleHRTdHJlYW0uY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gVGV4dFN0cmVhbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUEzRTRERDkyMUYzQTgwMzQwMERFRDBCNCAvKiBUZXh0U3RyZWFtLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRleHRTdHJlYW0uaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQTNFRTVDMzkyMUZGQUM1RTAwRkFCRDYxIC8qIE9TQWxsb2NhdG9yUE9T
SVguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gT1NBbGxvY2F0b3JQ
T1NJWC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEzRUU1QzNCMjFGRkFDN0Mw
MEZBQkQ2MSAvKiBTY2hlZHVsZVBhaXJDRi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBTY2hlZHVsZVBhaXJDRi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUEzRUU1QzNDMjFGRkFDN0QwMEZBQkQ2MSAvKiBSdW5Mb29wVGltZXJDRi5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSdW5Mb29wVGltZXJDRi5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEzRUU1QzNGMjFGRkFDQTIwMEZBQkQ2MSAvKiBTY2hl
ZHVsZVBhaXJNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBT
Y2hlZHVsZVBhaXJNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE1MDk4QUZG
MUMxNjlFMDcwMDA4Nzc5NyAvKiBTYW5kYm94U1BJLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFNhbmRib3hTUEkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTUw
OThCMDExQzE2QTRGOTAwMDg3Nzk3IC8qIFNlY3VyaXR5U1BJLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFNlY3VyaXR5U1BJLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUE1NjFGMzBGMURGMjY0MjEwMEZGNjc1RCAvKiBEZXByZWNhdGVkT3B0aW9uYWwuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGVwcmVjYXRlZE9wdGlvbmFsLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01NDAsNyArNTQxLDYgQEAKIAkJQThBNDcyRDUxNTFB
ODI1QjAwNDEyM0ZGIC8qIE51bWJlck9mQ29yZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gTnVtYmVyT2ZDb3Jlcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUE4QTQ3MkQ2MTUxQTgyNUIwMDQxMjNGRiAvKiBOdW1iZXJPZkNvcmVzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE51bWJlck9mQ29yZXMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQThBNDcyRDcxNTFBODI1QjAwNDEyM0ZGIC8qIE9TQWxsb2NhdG9y
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE9TQWxsb2NhdG9yLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE4QTQ3MkQ4MTUxQTgyNUIwMDQxMjNGRiAvKiBPU0Fs
bG9jYXRvclBvc2l4LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE9T
QWxsb2NhdG9yUG9zaXguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBOEE0NzJE
QTE1MUE4MjVCMDA0MTIzRkYgLyogT1NSYW5kb21Tb3VyY2UuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gT1NSYW5kb21Tb3VyY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlBOEE0NzJEQjE1MUE4MjVCMDA0MTIzRkYgLyogT1NSYW5kb21Tb3VyY2Uu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT1NSYW5kb21Tb3VyY2UuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThBNDcyREYxNTFBODI1QjAwNDEyM0ZGIC8qIFBh
Y2tlZEludFZlY3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYWNrZWRJ
bnRWZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTczNSw2ICs3MzUsOCBA
QAogCQkJCUEzMzFEOTVDMjFGMjQ5RTQwMDlGMDJBQSAvKiBGaWxlU3lzdGVtQ0YuY3BwICovLAog
CQkJCUMyQkNGQzQxMUY2MUQ2MTYwMEM5MjIyQyAvKiBMYW5ndWFnZUNGLmNwcCAqLywKIAkJCQky
Q0RFRDBFRTE4MTE1QzM4MDA0REJBNzAgLyogUnVuTG9vcENGLmNwcCAqLywKKwkJCQlBM0VFNUMz
QzIxRkZBQzdEMDBGQUJENjEgLyogUnVuTG9vcFRpbWVyQ0YuY3BwICovLAorCQkJCUEzRUU1QzNC
MjFGRkFDN0MwMEZBQkQ2MSAvKiBTY2hlZHVsZVBhaXJDRi5jcHAgKi8sCiAJCQkJMUFGREU2NDcx
OTUyMDFDMzAwQzQ4RkZBIC8qIFR5cGVDYXN0c0NGLmggKi8sCiAJCQkJNUMxRjA1OTQyMTY0MzdC
MzAwMzkzMDJDIC8qIFVSTENGLmNwcCAqLywKIAkJCSk7CkBAIC03OTQsNiArNzk2LDcgQEAKIAkJ
CWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCiAJCQkJQTMzMUQ5NjYyMUYyNEFCRDAw
OUYwMkFBIC8qIEZpbGVTeXN0ZW1QT1NJWC5jcHAgKi8sCisJCQkJQTNFRTVDMzkyMUZGQUM1RTAw
RkFCRDYxIC8qIE9TQWxsb2NhdG9yUE9TSVguY3BwICovLAogCQkJKTsKIAkJCXBhdGggPSBwb3Np
eDsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0xMDM0LDcgKzEwMzcsNiBAQAogCQkJ
CTFBNDY1NjE4MUM3RkM2OEUwMEY1OTIwRiAvKiBPcHRpb25TZXQuaCAqLywKIAkJCQkwRjk0OTU4
MzFDNTcxQ0M5MDA0MTNBNDggLyogT3JkZXJNYWtlci5oICovLAogCQkJCUE4QTQ3MkQ3MTUxQTgy
NUIwMDQxMjNGRiAvKiBPU0FsbG9jYXRvci5oICovLAotCQkJCUE4QTQ3MkQ4MTUxQTgyNUIwMDQx
MjNGRiAvKiBPU0FsbG9jYXRvclBvc2l4LmNwcCAqLywKIAkJCQk3Q0JCQTA3MzE5QkI3RkRDMDBC
QkYwMjUgLyogT1NPYmplY3RQdHIuaCAqLywKIAkJCQlBOEE0NzJEQTE1MUE4MjVCMDA0MTIzRkYg
LyogT1NSYW5kb21Tb3VyY2UuY3BwICovLAogCQkJCUE4QTQ3MkRCMTUxQTgyNUIwMDQxMjNGRiAv
KiBPU1JhbmRvbVNvdXJjZS5oICovLApAQCAtMTA5MCwxMSArMTA5Miw4IEBACiAJCQkJMkNERUQw
RjExODExNUM4NTAwNERCQTcwIC8qIFJ1bkxvb3AuY3BwICovLAogCQkJCTJDREVEMEYyMTgxMTVD
ODUwMDREQkE3MCAvKiBSdW5Mb29wLmggKi8sCiAJCQkJMTQ2OTQxOTAxNkVBQUY2RDAwMjRFMTQ2
IC8qIFJ1bkxvb3BUaW1lci5oICovLAotCQkJCTE0Njk0MTkxMTZFQUFGNkQwMDI0RTE0NiAvKiBS
dW5Mb29wVGltZXJDRi5jcHAgKi8sCiAJCQkJMTRGM0IwRjYxNUU0NUU0NjAwMjEwMDY5IC8qIFNh
dHVyYXRlZEFyaXRobWV0aWMuaCAqLywKIAkJCQkxNDY5NDE5NDE2RUFBRkY4MDAyNEUxNDYgLyog
U2NoZWR1bGVQYWlyLmggKi8sCi0JCQkJMTQ2OTQxOTgxNkVBQjA0MTAwMjRFMTQ2IC8qIFNjaGVk
dWxlUGFpckNGLmNwcCAqLywKLQkJCQkxNDY5NDE5NTE2RUFBRkY4MDAyNEUxNDYgLyogU2NoZWR1
bGVQYWlyTWFjLm1tICovLAogCQkJCTFBMzUyNEFBMUQ2M0EyRkYwMDMxNzI5QiAvKiBTY29wZS5o
ICovLAogCQkJCTBGRUM4NEIwMUJEQUNEMzkwMDgwRkY3NCAvKiBTY29wZWRMYW1iZGEuaCAqLywK
IAkJCQkwRjY2QjI4NDFEQzk3QkFCMDA0QTFEM0YgLyogU2Vjb25kcy5jcHAgKi8sCkBAIC0xMjI5
LDYgKzEyMjgsNyBAQAogCQkJCTFBQ0FERDgyMTg4NDQ4MDEwMEQ4QjcxRCAvKiBEZXByZWNhdGVk
U3ltYm9sc1VzZWRCeVNhZmFyaS5tbSAqLywKIAkJCQlBMzMxRDk2MDIxRjI0QTBBMDA5RjAyQUEg
LyogRmlsZVN5c3RlbU1hYy5tbSAqLywKIAkJCQk1MzUzNEYyOTFFQzBFMTBFMDAxNDFCMkYgLyog
TWFjaEV4Y2VwdGlvbnMuZGVmcyAqLywKKwkJCQlBM0VFNUMzRjIxRkZBQ0EyMDBGQUJENjEgLyog
U2NoZWR1bGVQYWlyTWFjLm1tICovLAogCQkJKTsKIAkJCXBhdGggPSBtYWM7CiAJCQlzb3VyY2VU
cmVlID0gIjxncm91cD4iOwpAQCAtMTU0OCw3ICsxNTQ4LDcgQEAKIAkJCQkwRjY2QjI4QzFEQzk3
QkFCMDA0QTFEM0YgLyogTW9ub3RvbmljVGltZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1Q0Mw
RUU4QTIxNjJCQzIyMDBBMUE4NDIgLyogTlNVUkxFeHRyYXMubW0gaW4gU291cmNlcyAqLywKIAkJ
CQlBOEE0NzNGNDE1MUE4MjVCMDA0MTIzRkYgLyogTnVtYmVyT2ZDb3Jlcy5jcHAgaW4gU291cmNl
cyAqLywKLQkJCQlBOEE0NzNGNzE1MUE4MjVCMDA0MTIzRkYgLyogT1NBbGxvY2F0b3JQb3NpeC5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQlBM0VFNUMzQTIxRkZBQzVGMDBGQUJENjEgLyogT1NBbGxv
Y2F0b3JQT1NJWC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzNGOTE1MUE4MjVCMDA0MTIz
RkYgLyogT1NSYW5kb21Tb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThBNDc0MDIxNTFB
ODI1QjAwNDEyM0ZGIC8qIFBhZ2VCbG9jay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkZGMTlE
QzFCQjMzNEVCMDA4ODZEOTEgLyogUGFyYWxsZWxIZWxwZXJQb29sLmNwcCBpbiBTb3VyY2VzICov
LApAQCAtMTU2Niw5ICsxNTY2LDkgQEAKIAkJCQlBOEE0NzQxQTE1MUE4MjVCMDA0MTIzRkYgLyog
UmVmQ291bnRlZExlYWtDb3VudGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJDREVEMEYzMTgx
MTVDODUwMDREQkE3MCAvKiBSdW5Mb29wLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJDREVEMEVG
MTgxMTVDMzgwMDREQkE3MCAvKiBSdW5Mb29wQ0YuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMTQ2
OTQxOTMxNkVBQUY2RDAwMjRFMTQ2IC8qIFJ1bkxvb3BUaW1lckNGLmNwcCBpbiBTb3VyY2VzICov
LAotCQkJCTE0Njk0MTk5MTZFQUIwNDEwMDI0RTE0NiAvKiBTY2hlZHVsZVBhaXJDRi5jcHAgaW4g
U291cmNlcyAqLywKLQkJCQkxNDY5NDE5NzE2RUFBRkY4MDAyNEUxNDYgLyogU2NoZWR1bGVQYWly
TWFjLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJQTNFRTVDM0UyMUZGQUM3RDAwRkFCRDYxIC8qIFJ1
bkxvb3BUaW1lckNGLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEzRUU1QzNEMjFGRkFDN0QwMEZB
QkQ2MSAvKiBTY2hlZHVsZVBhaXJDRi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBM0VFNUM0MDIx
RkZBQ0EyMDBGQUJENjEgLyogU2NoZWR1bGVQYWlyTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEY2NkIyOEUxREM5N0JBQjAwNEExRDNGIC8qIFNlY29uZHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQThBNDc0MjExNTFBODI1QjAwNDEyM0ZGIC8qIFNIQTEuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNTMxMUJENTMxRUE3MUNBRDAwNTI1MjgxIC8qIFNpZ25hbHMuY3BwIGluIFNvdXJjZXMgKi8s
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XVEYv
d3RmL0NNYWtlTGlzdHMudHh0CmluZGV4IDZiZmJjZjViMGJjMTRmMmNjZDZkYmVjMDY5ZjQ0ZTEz
N2ZmMGU2MDUuLjE3ODM4M2RmZjQ5MWI0YjFiYjFhMmQ2OTAwMGQyZjZhNDMwZTBiNTIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XVEYvd3Rm
L0NNYWtlTGlzdHMudHh0CkBAIC00OTIsMjMgKzQ5Miw2IEBAIGxpc3QoQVBQRU5EIFdURl9MSUJS
QVJJRVMKICAgICAke0lDVV9MSUJSQVJJRVN9CiApCiAKLWlmIChXSU4zMikKLSAgICBsaXN0KEFQ
UEVORCBXVEZfU09VUkNFUwotICAgICAgICBPU0FsbG9jYXRvcldpbi5jcHAKLSAgICAgICAgVGhy
ZWFkU3BlY2lmaWNXaW4uY3BwCi0gICAgICAgIFRocmVhZGluZ1dpbi5jcHAKLSAgICApCi0gICAg
bGlzdChBUFBFTkQgV1RGX0xJQlJBUklFUwotICAgICAgICBEYmdIZWxwCi0gICAgICAgIHdpbm1t
Ci0gICAgKQotZWxzZSAoKQotICAgIGxpc3QoQVBQRU5EIFdURl9TT1VSQ0VTCi0gICAgICAgIE9T
QWxsb2NhdG9yUG9zaXguY3BwCi0gICAgICAgIFRocmVhZGluZ1B0aHJlYWRzLmNwcAotICAgICkK
LWVuZGlmICgpCi0KIFdFQktJVF9GUkFNRVdPUktfREVDTEFSRShXVEYpCiBXRUJLSVRfSU5DTFVE
RV9DT05GSUdfRklMRVNfSUZfRVhJU1RTKCkKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYv
Q09OVFJJQlVUT1JTLnB0aHJlYWRzLXdpbjMyIGIvU291cmNlL1dURi93dGYvQ09OVFJJQlVUT1JT
LnB0aHJlYWRzLXdpbjMyCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZGUwZjI2MDY1
OWU0NGU0ZTZmNzI4ZGQ4N2ZlOWNkOWIwZDk4ZDE0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XVEYvd3RmL0NPTlRSSUJVVE9SUy5wdGhyZWFk
cy13aW4zMgorKysgL2Rldi9udWxsCkBAIC0xLDEzNyArMCwwIEBACi1UaGlzIGlzIGEgY29weSBv
ZiBDT05UUklCVVRPUlMgZmlsZSBmb3IgdGhlIFB0aHJlYWRzLXdpbjMyIGxpYnJhcnksIGRvd25s
b2FkZWQKLWZyb20gaHR0cDovL3NvdXJjZXdhcmUub3JnL2NnaS1iaW4vY3Zzd2ViLmNnaS9+Y2hl
Y2tvdXR+L3B0aHJlYWRzL0NPTlRSSUJVVE9SUz9yZXY9MS4zMiZjdnNyb290PXB0aHJlYWRzLXdp
bjMyCi0KLUluY2x1ZGVkIGhlcmUgdG8gY29tcGxpbWVudCB0aGUgUHRocmVhZHMtd2luMzIgbGlj
ZW5zZSBoZWFkZXIgaW4gd3RmL1RocmVhZGluZ1dpbi5jcHAgZmlsZS4KLVdlYktpdCBpcyB1c2lu
ZyBkZXJpdmVkIHNvdXJjZXMgb2YgVGhyZWFkQ29uZGl0aW9uIGNvZGUgZnJvbSBQdGhyZWFkcy13
aW4zMi4KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1Db250cmlidXRvcnMgKGluIGFwcHJv
eGltYXRlIG9yZGVyIG9mIGFwcGVhcmFuY2UpCi0KLVtTZWUgYWxzbyB0aGUgQ2hhbmdlTG9nIGZp
bGUgd2hlcmUgaW5kaXZpZHVhbHMgYXJlCi1hdHRyaWJ1dGVkIGluIGxvZyBlbnRyaWVzLiBMaWtl
d2lzZSBpbiB0aGUgRkFRIGZpbGUuXQotCi1CZW4gRWxsaXN0b24JCWJqZSBhdCBjeWdudXMgZG90
IGNvbQotCQkJCQlJbml0aWF0ZWQgdGhlIHByb2plY3Q7Ci0JCQkJCXNldHVwIHRoZSBwcm9qZWN0
IGluZnJhc3RydWN0dXJlIChDVlMsIHdlYiBwYWdlLCBldGMuKTsKLQkJCQkJZWFybHkgcHJvdG90
eXBlIHJvdXRpbmVzLgotUm9zcyBKb2huc29uCQlycGogYXQgY2FsbGlzdG8gZG90IGNhbmJlcnJh
IGRvdCBlZHUgZG90IGF1Ci0JCQkJCWVhcmx5IHByb3RvdHlwZSByb3V0aW5lczsKLQkJCQkJb25n
b2luZyBwcm9qZWN0IGNvb3JkaW5hdGlvbi9tYWludGVuYW5jZTsKLQkJCQkJaW1wbGVtZW50YXRp
b24gb2Ygc3BpbiBsb2NrcyBhbmQgYmFycmllcnM7Ci0JCQkJCXZhcmlvdXMgZW5oYW5jZW1lbnRz
OwotCQkJCQlidWcgZml4ZXM7Ci0JCQkJCWRvY3VtZW50YXRpb247Ci0JCQkJCXRlc3RzdWl0ZS4K
LVJvYmVydCBDb2xxdWhvdW4JcmpjIGF0IHRydW1wIGRvdCBuZXQgZG90IGF1Ci0JCQkJCUVhcmx5
IGJ1ZyBmaXhlcy4KLUpvaG4gRS4gQm9zc29tCQlKb2huIGRvdCBCb3Nzb20gYXQgY29nbm9zIGRv
dCBjb20KLQkJCQkJQ29udHJpYnV0ZWQgc3Vic3RhbnRpYWwgb3JpZ2luYWwgd29ya2luZyBpbXBs
ZW1lbnRhdGlvbjsKLQkJCQkJYnVnIGZpeGVzOwotCQkJCQlvbmdvaW5nIGd1aWRhbmNlIGFuZCBz
dGFuZGFyZHMgaW50ZXJwcmV0YXRpb24uCi1BbmRlcnMgTm9ybGFuZGVyCWFub3JsYW5kIGF0IGhl
bTIgZG90IHBhc3NhZ2VuIGRvdCBzZQotCQkJCQlFYXJseSBlbmhhbmNlbWVudHMgYW5kIHJ1bnRp
bWUgY2hlY2tpbmcgZm9yIHN1cHBvcnRlZAotCQkJCQlXaW4zMiByb3V0aW5lcy4KLVRvciBMaWxs
cXZpc3QJCXRtbCBhdCBpa2kgZG90IGZpCi0JCQkJCUdlbmVyYWwgZW5oYW5jZW1lbnRzOwotCQkJ
CQllYXJseSBidWcgZml4ZXMgdG8gY29uZGl0aW9uIHZhcmlhYmxlcy4KLVNjb3R0IExpZ2h0bmVy
CQlzY290dCBhdCBjdXJyaWN1bHVtIGRvdCBjb20KLQkJCQkJQnVnIGZpeC4KLUtldmluIFJ1bGFu
ZAkJS2V2aW4gZG90IFJ1bGFuZCBhdCBhbmhldXNlci1idXNjaCBkb3QgY29tCi0JCQkJCVZhcmlv
dXMgYnVnIGZpeGVzLgotTWlrZSBSdXNzbwkJbWlrZXIgYXQgZWFpIGRvdCBjb20KLQkJCQkJQnVn
IGZpeC4KLU1hcmsgRS4gQXJtc3Ryb25nCWF2YWlsIGF0IHBhY2JlbGwgZG90IG5ldAotCQkJCQlC
dWcgZml4ZXMuCi1Mb3JpbiBIb2Noc3RlaW4gCWxtaCBhdCB4aXBob3MgZG90IGNhCi0JCQkJCWdl
bmVyYWwgYnVnIGZpeGVzOyBidWcgZml4ZXMgdG8gY29uZGl0aW9uIHZhcmlhYmxlcy4KLVBldGVy
IFNsYWNpawkJUGV0ZXIgZG90IFNsYWNpayBhdCB0YXRyYW1lZCBkb3Qgc2sKLQkJCQkJQnVnIGZp
eGVzLgotTXVtaXQgS2hhbgkJa2hhbiBhdCB4cmF5bGl0aCBkb3Qgd2lzYyBkb3QgZWR1Ci0JCQkJ
CUZpeGVzIHRvIHdvcmsgd2l0aCBNaW5ndzMyLgotTWlsYW4gR2FyZGlhbgkJbWcgYXQgdGF0cmFt
ZWQgZG90IHNrCi0JCQkJCUJ1ZyBmaXhlcyBhbmQgcmVwb3J0cy9hbmFseXNlcyBvZiBvYnNjdXJl
IHByb2JsZW1zLgotQXVyZWxpbyBNZWRpbmEJCWF1cmVsaW9tIGF0IGNydCBkb3QgY29tCi0JCQkJ
CUZpcnN0IGltcGxlbWVudGF0aW9uIG9mIHJlYWQtd3JpdGUgbG9ja3MuCi1HcmFoYW0gRHVtcGxl
dG9uCUdyYWhhbSBkb3QgRHVtcGxldG9uIGF0IHJhIGRvdCBwYWQgZG90IG90YyBkb3QgdGVsc3Ry
YSBkb3QgY29tIGRvdCBhdQotCQkJCQlCdWcgZml4IGluIGNvbmRpdGlvbiB2YXJpYWJsZXMuCi1U
cmlzdGFuIFNhdmF0aWVyCXRyaXN0YW4gYXQgbXBlZ3R2IGRvdCBjb20KLQkJCQkJV2luQ0UgcG9y
dC4KLUVyaWsgSGVuc2VtYQkJZXJpayBhdCBoZW5zZW1hIGRvdCB4czRhbGwgZG90IG5sCi0JCQkJ
CUJ1ZyBmaXhlcy4KLVJpY2ggUGV0ZXJzCQlycGV0ZXJzIGF0IG1pY3JvLW1hZ2ljIGRvdCBjb20K
LVRvZGQgT3dlbgkJdG93ZW4gYXQgbHVjaWRjYWxtIGRvdCBkcm9wYmVhciBkb3QgaWQgZG90IGF1
Ci0JCQkJCUJ1ZyBmaXhlcyB0byBkbGwgbG9hZGluZy4KLUphc29uIE55ZQkJam55ZSBhdCBuYm5l
dCBkb3QgbmIgZG90IGNhCi0JCQkJCUltcGxlbWVudGF0aW9uIG9mIGFzeW5jIGNhbmNlbGF0aW9u
LgotRnJlZCBGb3Jlc3RlcgkJZmZvcmVzdCBhdCBldGljb21tIGRvdCBuZXQKLUtldmluIEQuIENs
YXJrCQlrY2xhcmsgYXQgY2FibGV0cm9uIGRvdCBjb20KLURhdmlkIEJhZ2dldHQJCWRtYiBhdCBp
dGFzb2Z0d2FyZSBkb3QgY29tCi0JCQkJCUJ1ZyBmaXhlcy4KLVBhdWwgUmVkb25kbwkJcGF1bCBh
dCBtYXRjaHZpc2lvbiBkb3QgY29tCi1TY290dCBNY0Nhc2tpbGwgCXNjb3R0IGF0IDNkZnggZG90
IGNvbQotCQkJCQlCdWcgZml4ZXMuCi1KZWYgR2VhcmhhcnQJCWpnZWFyaGFydCBhdCB0cHNzeXMg
ZG90IGNvbQotCQkJCQlCdWcgZml4LgotQXJ0aHVyIEthbnRvcgkJYWthbnRvciBhdCBiZXh1c2Eg
ZG90IGNvbQotCQkJCQlNdXRleCBlbmhhbmNlbWVudHMuCi1TdGV2ZW4gUmVkZGllCQlzbXIgYXQg
ZXNzZW1lciBkb3QgY29tIGRvdCBhdQotCQkJCQlCdWcgZml4LgotQWxleGFuZGVyIFRlcmVraG92
CVRFUkVLSE9WIGF0IGRlIGRvdCBpYm0gZG90IGNvbQotCQkJCQlSZS1pbXBsZW1lbnRlZCBhbmQg
aW1wcm92ZWQgcmVhZC13cml0ZSBsb2NrczsKLQkJCQkJKHdpdGggTG91aXMgVGhvbWFzKSByZS1p
bXBsZW1lbnRlZCBhbmQgaW1wcm92ZWQKLQkJCQkJY29uZGl0aW9uIHZhcmlhYmxlczsKLQkJCQkJ
ZW5oYW5jZW1lbnRzIHRvIHNlbWFwaG9yZXM7Ci0JCQkJCWVuaGFuY2VtZW50cyB0byBtdXRleGVz
OwotCQkJCQluZXcgbXV0ZXggaW1wbGVtZW50YXRpb24gaW4gJ2Z1dGV4JyBzdHlsZTsKLQkJCQkJ
c3VnZ2VzdGVkIGEgcm9idXN0IGltcGxlbWVudGF0aW9uIG9mIHB0aHJlYWRfb25jZQotCQkJCQlz
aW1pbGFyIHRvIHRoYXQgaW1wbGVtZW50ZWQgYnkgVi5LbGlhdGhja287Ci0JCQkJCXN5c3RlbSBj
bG9jayBjaGFuZ2UgaGFuZGxpbmcgcmUgQ1YgdGltZW91dHM7Ci0JCQkJCWJ1ZyBmaXhlcy4KLVRo
b21hcyBQZmFmZgkJdHBmYWZmIGF0IGdteCBkb3QgbmV0Ci0JCQkJCUNoYW5nZXMgdG8gbWFrZSBD
IHZlcnNpb24gdXNhYmxlIHdpdGggQysrIGFwcGxpY2F0aW9uczsKLQkJCQkJcmUtaW1wbGVtZW50
ZWQgbXV0ZXggcm91dGluZXMgdG8gYXZvaWQgV2luMzIgbXV0ZXhlcwotCQkJCQlhbmQgVHJ5RW50
ZXJDcml0aWNhbFNlY3Rpb247Ci0JCQkJCXByb2NlZHVyZSB0byBmaXggTWluZ3czMiB0aHJlYWQt
c2FmZXR5IGlzc3Vlcy4KLUZyYW5jbyBCZXoJCWZyYW5jbyBkb3QgYmV6IGF0IGdteCBkb3QgZGUK
LQkJCQkJcHJvY2VkdXJlIHRvIGZpeCBNaW5ndzMyIHRocmVhZC1zYWZldHkgaXNzdWVzLgotTG91
aXMgVGhvbWFzCQlsdGhvbWFzIGF0IGFyYml0cmFkZSBkb3QgY29tCi0JCQkJCSh3aXRoIEFsZXhh
bmRlciBUZXJla2hvdikgcmUtaW1wbGVtZW50ZWQgYW5kIGltcHJvdmVkCi0JCQkJCWNvbmRpdGlv
biB2YXJpYWJsZXMuCi1EYXZpZCBLb3JuCQlkZ2sgYXQgcmVzZWFyY2ggZG90IGF0dCBkb3QgY29t
Ci0JCQkJCVBvcnRlZCB0byBVV0lOLgotUGhpbCBGcmlzYmllLCBKci4JcGhpbCBhdCBoYXdrc29m
dCBkb3QgY29tCi0JCQkJCUJ1ZyBmaXguCi1SYWxmIEJyZXNlCQlSYWxmIGRvdCBCcmVzZSBhdCBw
ZGI0IGRvdCBzaWVtZW5zIGRvdCBkZQotCQkJCQlCdWcgZml4LgotcHJpb254IGF0IGp1bm8gZG90
IGNvbSAJcHJpb254IGF0IGp1bm8gZG90IGNvbQotCQkJCQlCdWcgZml4ZXMuCi1NYXggV29vZGJ1
cnkJCW10ZXcgYXQgY2RzIGRvdCBkdWtlIGRvdCBlZHUKLQkJCQkJUE9TSVggdmVyc2lvbmluZyBj
b25kaXRpb25hbHM7Ci0JCQkJCXJlZHVjZWQgbmFtZXNwYWNlIHBvbGx1dGlvbjsKLQkJCQkJaWRl
YSB0byBzZXBhcmF0ZSByb3V0aW5lcyB0byByZWR1Y2Ugc3RhdGljYWxseQotCQkJCQlsaW5rZWQg
aW1hZ2Ugc2l6ZXMuCi1Sb2IgRmFubmVyCQlyZmFubmVyIGF0IHN0b25ldGhyZWUgZG90IGNvbQot
CQkJCQlCdWcgZml4LgotTWljaGFlbCBKb2huc29uIAltaWNoYWVsaiBhdCBtYWluZSBkb3QgcnIg
ZG90IGNvbQotCQkJCQlCdWcgZml4LgotTmljb2xhcyBCYXJyeQkJYm9vemFpIGF0IHlhaG9vIGRv
dCBjb20KLQkJCQkJQnVnIGZpeGVzLgotUGlldCB2YW4gQnJ1Z2dlbglwaWV0dmIgYXQgbmV3YnJp
ZGdlcyBkb3QgbmwKLQkJCQkJQnVnIGZpeC4KLU1ha290byBLYXRvCQlyYXZlbiBhdCBvbGRza29v
bCBkb3QganAKLQkJCQkJQU1ENjQgcG9ydC4KLVBhbmFnaW90aXMgRS4gSGFkamlkb3VrYXMJcGVo
IGF0IGhwY2xhYiBkb3QgY2VpZCBkb3QgdXBhdHJhcyBkb3QgZ3IKLQkJCQkJQ29udHJpYnV0ZWQg
dGhlIFF1ZXVlVXNlckFQQ0V4IHBhY2thZ2Ugd2hpY2gKLQkJCQkJbWFrZXMgcHJlZW1wdGl2ZSBh
c3luYyBjYW5jZWxhdGlvbiBwb3NzaWJsZS4KLVdpbGwgQnJ5YW50CQl3aWxsIGRvdCBicnlhbnQg
YXQgZWNvc20gZG90IGNvbQotCQkJCQlCb3JsYW5kIGNvbXBpbGVyIHBhdGNoIGFuZCBtYWtlZmls
ZS4KLUFudWogR295YWwJCWFudWogZG90IGdveWFsIGF0IGdtYWlsIGRvdCBjb20KLQkJCQkJUG9y
dCB0byBEaWdpdGFsIE1hcnMgY29tcGlsZXIuCi1Hb3R0bG9iIEZyZWdlCQlnb3R0bG9iZnJlZ2Ug
YXQgIGdtYWlsIGRvdCBjb20KLQkJCQkJcmUtaW1wbGVtZW50ZWQgcHRocmVhZF9vbmNlICh2ZXJz
aW9uIDIpCi0JCQkJCShwdGhyZWFkX29uY2UgY2FuY2VsbGF0aW9uIGFkZGVkIGJ5IHJwaikuCi1W
bGFkaW1pciBLbGlhdGNoa28JdmxhZGltaXIgYXQga2xpYXRjaGtvIGRvdCBjb20KLQkJCQkJcmVp
bXBsZW1lbnRlZCBwdGhyZWFkX29uY2Ugd2l0aCB0aGUgc2FtZSBmb3JtCi0JCQkJCWFzIGRlc2Ny
aWJlZCBieSBBLlRlcmVraG92IChsYXRlciB2ZXJzaW9uIDIpOwotCQkJCQlpbXBsZW1lbnRhdGlv
biBvZiBNQ1MgKE1lbGxvci1DcnVtbWV5L1Njb3R0KSBsb2Nrcy4KXCBObyBuZXdsaW5lIGF0IGVu
ZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9PU0FsbG9jYXRvclBvc2l4LmNw
cCBiL1NvdXJjZS9XVEYvd3RmL09TQWxsb2NhdG9yUG9zaXguY3BwCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA5MjNhODg0M2VlYjdhZDRiNjU4NDgyNGUwZTlkOWMzMzNkMTE0YWQ2Li4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XVEYv
d3RmL09TQWxsb2NhdG9yUG9zaXguY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTg2ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSA8d3RmL09TQWxsb2Nh
dG9yLmg+Ci0KLSNpZiBPUyhVTklYKQotCi0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDxz
eXMvbW1hbi5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW5jbHVkZSA8d3RmL1Bh
Z2VBbGxvY2F0aW9uLmg+Ci0KLW5hbWVzcGFjZSBXVEYgewotCi12b2lkKiBPU0FsbG9jYXRvcjo6
cmVzZXJ2ZVVuY29tbWl0dGVkKHNpemVfdCBieXRlcywgVXNhZ2UgdXNhZ2UsIGJvb2wgd3JpdGFi
bGUsIGJvb2wgZXhlY3V0YWJsZSwgYm9vbCBpbmNsdWRlc0d1YXJkUGFnZXMpCi17Ci0jaWYgT1Mo
TElOVVgpCi0gICAgVU5VU0VEX1BBUkFNKHVzYWdlKTsKLSAgICBVTlVTRURfUEFSQU0od3JpdGFi
bGUpOwotICAgIFVOVVNFRF9QQVJBTShleGVjdXRhYmxlKTsKLSAgICBVTlVTRURfUEFSQU0oaW5j
bHVkZXNHdWFyZFBhZ2VzKTsKLQotICAgIHZvaWQqIHJlc3VsdCA9IG1tYXAoMCwgYnl0ZXMsIFBS
T1RfTk9ORSwgTUFQX05PUkVTRVJWRSB8IE1BUF9QUklWQVRFIHwgTUFQX0FOT04sIC0xLCAwKTsK
LSAgICBpZiAocmVzdWx0ID09IE1BUF9GQUlMRUQpCi0gICAgICAgIENSQVNIKCk7Ci0gICAgbWFk
dmlzZShyZXN1bHQsIGJ5dGVzLCBNQURWX0RPTlRORUVEKTsKLSNlbHNlCi0gICAgdm9pZCogcmVz
dWx0ID0gcmVzZXJ2ZUFuZENvbW1pdChieXRlcywgdXNhZ2UsIHdyaXRhYmxlLCBleGVjdXRhYmxl
LCBpbmNsdWRlc0d1YXJkUGFnZXMpOwotI2lmIEhBVkUoTUFEVl9GUkVFX1JFVVNFKQotICAgIGlm
IChyZXN1bHQpIHsKLSAgICAgICAgLy8gVG8gc3VwcG9ydCB0aGUgInJlc2VydmUgdGhlbiBjb21t
aXQiIG1vZGVsLCB3ZSBoYXZlIHRvIGluaXRpYWxseSBkZWNvbW1pdC4KLSAgICAgICAgd2hpbGUg
KG1hZHZpc2UocmVzdWx0LCBieXRlcywgTUFEVl9GUkVFX1JFVVNBQkxFKSA9PSAtMSAmJiBlcnJu
byA9PSBFQUdBSU4pIHsgfQotICAgIH0KLSNlbmRpZgotCi0jZW5kaWYKLQotICAgIHJldHVybiBy
ZXN1bHQ7Ci19Ci0KLXZvaWQqIE9TQWxsb2NhdG9yOjpyZXNlcnZlQW5kQ29tbWl0KHNpemVfdCBi
eXRlcywgVXNhZ2UgdXNhZ2UsIGJvb2wgd3JpdGFibGUsIGJvb2wgZXhlY3V0YWJsZSwgYm9vbCBp
bmNsdWRlc0d1YXJkUGFnZXMpCi17Ci0gICAgLy8gQWxsIFBPU0lYIHJlc2VydmF0aW9ucyBzdGFy
dCBvdXQgbG9naWNhbGx5IGNvbW1pdHRlZC4KLSAgICBpbnQgcHJvdGVjdGlvbiA9IFBST1RfUkVB
RDsKLSAgICBpZiAod3JpdGFibGUpCi0gICAgICAgIHByb3RlY3Rpb24gfD0gUFJPVF9XUklURTsK
LSAgICBpZiAoZXhlY3V0YWJsZSkKLSAgICAgICAgcHJvdGVjdGlvbiB8PSBQUk9UX0VYRUM7Ci0K
LSAgICBpbnQgZmxhZ3MgPSBNQVBfUFJJVkFURSB8IE1BUF9BTk9OOwotI2lmIE9TKERBUldJTikK
LSAgICBpZiAoZXhlY3V0YWJsZSkKLSAgICAgICAgZmxhZ3MgfD0gTUFQX0pJVDsKLSNlbmRpZgot
Ci0jaWYgT1MoREFSV0lOKQotICAgIGludCBmZCA9IHVzYWdlOwotI2Vsc2UKLSAgICBVTlVTRURf
UEFSQU0odXNhZ2UpOwotICAgIGludCBmZCA9IC0xOwotI2VuZGlmCi0KLSAgICB2b2lkKiByZXN1
bHQgPSAwOwotI2lmIChPUyhEQVJXSU4pICYmIENQVShYODZfNjQpKQotICAgIGlmIChleGVjdXRh
YmxlKSB7Ci0gICAgICAgIEFTU0VSVChpbmNsdWRlc0d1YXJkUGFnZXMpOwotICAgICAgICAvLyBD
b29rIHVwIGFuIGFkZHJlc3MgdG8gYWxsb2NhdGUgYXQsIHVzaW5nIHRoZSBmb2xsb3dpbmcgcmVj
aXBlOgotICAgICAgICAvLyAgIDE3IGJpdHMgb2YgemVybywgc3RheSBpbiB1c2Vyc3BhY2Uga2lk
cy4KLSAgICAgICAgLy8gICAyNiBiaXRzIG9mIHJhbmRvbW5lc3MgZm9yIEFTTFIuCi0gICAgICAg
IC8vICAgMjEgYml0cyBvZiB6ZXJvLCBhdCBsZWFzdCBzdGF5IGFsaWduZWQgd2l0aGluIG9uZSBs
ZXZlbCBvZiB0aGUgcGFnZXRhYmxlcy4KLSAgICAgICAgLy8KLSAgICAgICAgLy8gQnV0ISAtIGFz
IGEgdGVtcG9yYXJ5IHdvcmthcm91bmQgZm9yIHNvbWUgcGx1Z2luIHByb2JsZW1zIChyZGFyOi8v
cHJvYmxlbS82ODEyODU0KSwKLSAgICAgICAgLy8gZm9yIG5vdyBpbnN0ZWFkIG9mIDJeMjYgYml0
cyBvZiBBU0xSIGxldHMgc3RpY2sgd2l0aCAyNSBiaXRzIG9mIHJhbmRvbWl6YXRpb24gcGx1cwot
ICAgICAgICAvLyAyXjI0LCB3aGljaCBzaG91bGQgcHV0IHVwIHNvbWV3aGVyZSBpbiB0aGUgbWlk
ZGxlIG9mIHVzZXJzcGFjZSAoaW4gdGhlIGFkZHJlc3MgcmFuZ2UKLSAgICAgICAgLy8gMHgyMDAw
MDAwMDAwMDAgLi4gMHg1ZmZmZmZmZmZmZmYpLgotICAgICAgICBpbnRwdHJfdCByYW5kb21Mb2Nh
dGlvbiA9IDA7Ci0gICAgICAgIHJhbmRvbUxvY2F0aW9uID0gYXJjNHJhbmRvbSgpICYgKCgxIDw8
IDI1KSAtIDEpOwotICAgICAgICByYW5kb21Mb2NhdGlvbiArPSAoMSA8PCAyNCk7Ci0gICAgICAg
IHJhbmRvbUxvY2F0aW9uIDw8PSAyMTsKLSAgICAgICAgcmVzdWx0ID0gcmVpbnRlcnByZXRfY2Fz
dDx2b2lkKj4ocmFuZG9tTG9jYXRpb24pOwotICAgIH0KLSNlbmRpZgotCi0gICAgcmVzdWx0ID0g
bW1hcChyZXN1bHQsIGJ5dGVzLCBwcm90ZWN0aW9uLCBmbGFncywgZmQsIDApOwotICAgIGlmIChy
ZXN1bHQgPT0gTUFQX0ZBSUxFRCkgewotICAgICAgICBpZiAoZXhlY3V0YWJsZSkKLSAgICAgICAg
ICAgIHJlc3VsdCA9IDA7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIENSQVNIKCk7Ci0gICAg
fQotICAgIGlmIChyZXN1bHQgJiYgaW5jbHVkZXNHdWFyZFBhZ2VzKSB7Ci0gICAgICAgIC8vIFdl
IHVzZSBtbWFwIHRvIHJlbWFwIHRoZSBndWFyZHBhZ2VzIHJhdGhlciB0aGFuIHVzaW5nIG1wcm90
ZWN0IGFzCi0gICAgICAgIC8vIG1wcm90ZWN0IHJlc3VsdHMgaW4gbXVsdGlwbGUgcmVmZXJlbmNl
cyB0byB0aGUgY29kZSByZWdpb24uICBUaGlzCi0gICAgICAgIC8vIGJyZWFrcyB0aGUgbWFkdmlz
ZSBiYXNlZCBtZWNoYW5pc20gd2UgdXNlIHRvIHJldHVybiBwaHlzaWNhbCBtZW1vcnkKLSAgICAg
ICAgLy8gdG8gdGhlIE9TLgotICAgICAgICBtbWFwKHJlc3VsdCwgcGFnZVNpemUoKSwgUFJPVF9O
T05FLCBNQVBfRklYRUQgfCBNQVBfUFJJVkFURSB8IE1BUF9BTk9OLCBmZCwgMCk7Ci0gICAgICAg
IG1tYXAoc3RhdGljX2Nhc3Q8Y2hhcio+KHJlc3VsdCkgKyBieXRlcyAtIHBhZ2VTaXplKCksIHBh
Z2VTaXplKCksIFBST1RfTk9ORSwgTUFQX0ZJWEVEIHwgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTiwg
ZmQsIDApOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIE9TQWxsb2NhdG9y
Ojpjb21taXQodm9pZCogYWRkcmVzcywgc2l6ZV90IGJ5dGVzLCBib29sIHdyaXRhYmxlLCBib29s
IGV4ZWN1dGFibGUpCi17Ci0jaWYgT1MoTElOVVgpCi0gICAgaW50IHByb3RlY3Rpb24gPSBQUk9U
X1JFQUQ7Ci0gICAgaWYgKHdyaXRhYmxlKQotICAgICAgICBwcm90ZWN0aW9uIHw9IFBST1RfV1JJ
VEU7Ci0gICAgaWYgKGV4ZWN1dGFibGUpCi0gICAgICAgIHByb3RlY3Rpb24gfD0gUFJPVF9FWEVD
OwotICAgIGlmIChtcHJvdGVjdChhZGRyZXNzLCBieXRlcywgcHJvdGVjdGlvbikpCi0gICAgICAg
IENSQVNIKCk7Ci0gICAgbWFkdmlzZShhZGRyZXNzLCBieXRlcywgTUFEVl9XSUxMTkVFRCk7Ci0j
ZWxpZiBIQVZFKE1BRFZfRlJFRV9SRVVTRSkKLSAgICBVTlVTRURfUEFSQU0od3JpdGFibGUpOwot
ICAgIFVOVVNFRF9QQVJBTShleGVjdXRhYmxlKTsKLSAgICB3aGlsZSAobWFkdmlzZShhZGRyZXNz
LCBieXRlcywgTUFEVl9GUkVFX1JFVVNFKSA9PSAtMSAmJiBlcnJubyA9PSBFQUdBSU4pIHsgfQot
I2Vsc2UKLSAgICAvLyBOb24tTUFEVl9GUkVFX1JFVVNFIHJlc2VydmF0aW9ucyBhdXRvbWF0aWNh
bGx5IGNvbW1pdCBvbiBkZW1hbmQuCi0gICAgVU5VU0VEX1BBUkFNKGFkZHJlc3MpOwotICAgIFVO
VVNFRF9QQVJBTShieXRlcyk7Ci0gICAgVU5VU0VEX1BBUkFNKHdyaXRhYmxlKTsKLSAgICBVTlVT
RURfUEFSQU0oZXhlY3V0YWJsZSk7Ci0jZW5kaWYKLX0KLQotdm9pZCBPU0FsbG9jYXRvcjo6ZGVj
b21taXQodm9pZCogYWRkcmVzcywgc2l6ZV90IGJ5dGVzKQotewotI2lmIE9TKExJTlVYKQotICAg
IG1hZHZpc2UoYWRkcmVzcywgYnl0ZXMsIE1BRFZfRE9OVE5FRUQpOwotICAgIGlmIChtcHJvdGVj
dChhZGRyZXNzLCBieXRlcywgUFJPVF9OT05FKSkKLSAgICAgICAgQ1JBU0goKTsKLSNlbGlmIEhB
VkUoTUFEVl9GUkVFX1JFVVNFKQotICAgIHdoaWxlIChtYWR2aXNlKGFkZHJlc3MsIGJ5dGVzLCBN
QURWX0ZSRUVfUkVVU0FCTEUpID09IC0xICYmIGVycm5vID09IEVBR0FJTikgeyB9Ci0jZWxpZiBI
QVZFKE1BRFZfRlJFRSkKLSAgICB3aGlsZSAobWFkdmlzZShhZGRyZXNzLCBieXRlcywgTUFEVl9G
UkVFKSA9PSAtMSAmJiBlcnJubyA9PSBFQUdBSU4pIHsgfQotI2VsaWYgSEFWRShNQURWX0RPTlRO
RUVEKQotICAgIHdoaWxlIChtYWR2aXNlKGFkZHJlc3MsIGJ5dGVzLCBNQURWX0RPTlRORUVEKSA9
PSAtMSAmJiBlcnJubyA9PSBFQUdBSU4pIHsgfQotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oYWRk
cmVzcyk7Ci0gICAgVU5VU0VEX1BBUkFNKGJ5dGVzKTsKLSNlbmRpZgotfQotCi12b2lkIE9TQWxs
b2NhdG9yOjpoaW50TWVtb3J5Tm90TmVlZGVkU29vbih2b2lkKiBhZGRyZXNzLCBzaXplX3QgYnl0
ZXMpCi17Ci0jaWYgSEFWRShNQURWX0RPTlRORUVEKQotICAgIHdoaWxlIChtYWR2aXNlKGFkZHJl
c3MsIGJ5dGVzLCBNQURWX0RPTlRORUVEKSA9PSAtMSAmJiBlcnJubyA9PSBFQUdBSU4pIHsgfQot
I2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oYWRkcmVzcyk7Ci0gICAgVU5VU0VEX1BBUkFNKGJ5dGVz
KTsKLSNlbmRpZgotfQotCi12b2lkIE9TQWxsb2NhdG9yOjpyZWxlYXNlRGVjb21taXR0ZWQodm9p
ZCogYWRkcmVzcywgc2l6ZV90IGJ5dGVzKQotewotICAgIGludCByZXN1bHQgPSBtdW5tYXAoYWRk
cmVzcywgYnl0ZXMpOwotICAgIGlmIChyZXN1bHQgPT0gLTEpCi0gICAgICAgIENSQVNIKCk7Ci19
Ci0KLX0gLy8gbmFtZXNwYWNlIFdURgotCi0jZW5kaWYgLy8gT1MoVU5JWCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvd3RmL09TQWxsb2NhdG9yV2luLmNwcCBiL1NvdXJjZS9XVEYvd3RmL09TQWxs
b2NhdG9yV2luLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDYxNTQ5OGM5OTRm
Y2E1ZDhiNTE5NTRjNWY2NTI1NDNhOTdjNGI3NC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9PU0FsbG9jYXRvcldpbi5jcHAKKysr
IC9kZXYvbnVsbApAQCAtMSwxMDIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwg
MjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlIDx3dGYvT1NBbGxvY2F0b3IuaD4KLQotI2lmIE9TKFdJTkRP
V1MpCi0KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotI2luY2x1ZGUgPHdpbmRvd3MuaD4K
LQotbmFtZXNwYWNlIFdURiB7Ci0KLXN0YXRpYyBpbmxpbmUgRFdPUkQgcHJvdGVjdGlvbihib29s
IHdyaXRhYmxlLCBib29sIGV4ZWN1dGFibGUpCi17Ci0gICAgcmV0dXJuIGV4ZWN1dGFibGUgPwot
ICAgICAgICAod3JpdGFibGUgPyBQQUdFX0VYRUNVVEVfUkVBRFdSSVRFIDogUEFHRV9FWEVDVVRF
X1JFQUQpIDoKLSAgICAgICAgKHdyaXRhYmxlID8gUEFHRV9SRUFEV1JJVEUgOiBQQUdFX1JFQURP
TkxZKTsKLX0KLQotdm9pZCogT1NBbGxvY2F0b3I6OnJlc2VydmVVbmNvbW1pdHRlZChzaXplX3Qg
Ynl0ZXMsIFVzYWdlLCBib29sIHdyaXRhYmxlLCBib29sIGV4ZWN1dGFibGUsIGJvb2wpCi17Ci0g
ICAgdm9pZCogcmVzdWx0ID0gVmlydHVhbEFsbG9jKDAsIGJ5dGVzLCBNRU1fUkVTRVJWRSwgcHJv
dGVjdGlvbih3cml0YWJsZSwgZXhlY3V0YWJsZSkpOwotICAgIGlmICghcmVzdWx0KQotICAgICAg
ICBDUkFTSCgpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQqIE9TQWxsb2NhdG9yOjpy
ZXNlcnZlQW5kQ29tbWl0KHNpemVfdCBieXRlcywgVXNhZ2UsIGJvb2wgd3JpdGFibGUsIGJvb2wg
ZXhlY3V0YWJsZSwgYm9vbCkKLXsKLSAgICB2b2lkKiByZXN1bHQgPSBWaXJ0dWFsQWxsb2MoMCwg
Ynl0ZXMsIE1FTV9SRVNFUlZFIHwgTUVNX0NPTU1JVCwgcHJvdGVjdGlvbih3cml0YWJsZSwgZXhl
Y3V0YWJsZSkpOwotICAgIGlmICghcmVzdWx0KQotICAgICAgICBDUkFTSCgpOwotICAgIHJldHVy
biByZXN1bHQ7Ci19Ci0KLXZvaWQgT1NBbGxvY2F0b3I6OmNvbW1pdCh2b2lkKiBhZGRyZXNzLCBz
aXplX3QgYnl0ZXMsIGJvb2wgd3JpdGFibGUsIGJvb2wgZXhlY3V0YWJsZSkKLXsKLSAgICB2b2lk
KiByZXN1bHQgPSBWaXJ0dWFsQWxsb2MoYWRkcmVzcywgYnl0ZXMsIE1FTV9DT01NSVQsIHByb3Rl
Y3Rpb24od3JpdGFibGUsIGV4ZWN1dGFibGUpKTsKLSAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAg
Q1JBU0goKTsKLX0KLQotdm9pZCBPU0FsbG9jYXRvcjo6ZGVjb21taXQodm9pZCogYWRkcmVzcywg
c2l6ZV90IGJ5dGVzKQotewotICAgIC8vIEFjY29yZGluZyB0byBodHRwOi8vbXNkbi5taWNyb3Nv
ZnQuY29tL2VuLXVzL2xpYnJhcnkvYWEzNjY4OTIoVlMuODUpLmFzcHgsCi0gICAgLy8gYnl0ZXMg
KGkuZS4gZHdTaXplKSBiZWluZyAwIHdoZW4gZHdGcmVlVHlwZSBpcyBNRU1fREVDT01NSVQgbWVh
bnMgdGhhdCB3ZSdsbAotICAgIC8vIGRlY29tbWl0IHRoZSBlbnRpcmUgcmVnaW9uIGFsbG9jYXRl
ZCBieSBWaXJ0dWFsQWxsb2MoKSBpbnN0ZWFkIG9mIGRlY29tbWl0dGluZwotICAgIC8vIG5vdGhp
bmcgYXMgd2Ugd291bGQgZXhwZWN0LiBIZW5jZSwgd2Ugc2hvdWxkIGNoZWNrIGlmIGJ5dGVzIGlz
IDAgYW5kIGhhbmRsZSBpdAotICAgIC8vIGFwcHJvcHJpYXRlbHkgYmVmb3JlIGNhbGxpbmcgVmly
dHVhbEZyZWUoKS4KLSAgICAvLyBTZWU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMjE5NzIuCi0gICAgaWYgKCFieXRlcykKLSAgICAgICAgcmV0dXJuOwotICAgIC8v
IFNpbGVuY2Ugd2FybmluZyBhYm91dCB1c2luZyBNRU1fREVDT01NSVQgaW5zdGVhZCBvZiBNRU1f
UkVMRUFTRToKLSNwcmFnbWEgd2FybmluZyhzdXBwcmVzczogNjI1MCkKLSAgICBib29sIHJlc3Vs
dCA9IFZpcnR1YWxGcmVlKGFkZHJlc3MsIGJ5dGVzLCBNRU1fREVDT01NSVQpOwotICAgIGlmICgh
cmVzdWx0KQotICAgICAgICBDUkFTSCgpOwotfQotCi12b2lkIE9TQWxsb2NhdG9yOjpyZWxlYXNl
RGVjb21taXR0ZWQodm9pZCogYWRkcmVzcywgc2l6ZV90IGJ5dGVzKQotewotICAgIC8vIFNlZSBj
b21tZW50IGluIE9TQWxsb2NhdG9yOjpkZWNvbW1pdCgpLiBTaW1pbGFybHksIHdoZW4gYnl0ZXMg
aXMgMCwgd2UKLSAgICAvLyBkb24ndCB3YW50IHRvIHJlbGVhc2UgYW55dGhpbmcuIFNvLCBkb24n
dCBjYWxsIFZpcnR1YWxGcmVlKCkgYmVsb3cuCi0gICAgaWYgKCFieXRlcykKLSAgICAgICAgcmV0
dXJuOwotICAgIC8vIEFjY29yZGluZyB0byBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVz
L2xpYnJhcnkvYWEzNjY4OTIoVlMuODUpLmFzcHgsCi0gICAgLy8gZHdTaXplIG11c3QgYmUgMCBp
ZiBkd0ZyZWVUeXBlIGlzIE1FTV9SRUxFQVNFLgotICAgIGJvb2wgcmVzdWx0ID0gVmlydHVhbEZy
ZWUoYWRkcmVzcywgMCwgTUVNX1JFTEVBU0UpOwotICAgIGlmICghcmVzdWx0KQotICAgICAgICBD
UkFTSCgpOwotfQotCi12b2lkIE9TQWxsb2NhdG9yOjpoaW50TWVtb3J5Tm90TmVlZGVkU29vbih2
b2lkKiwgc2l6ZV90KQotewotfQotCi19IC8vIG5hbWVzcGFjZSBXVEYKLQotI2VuZGlmIC8vIE9T
KFdJTkRPV1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUdUSy5jbWFrZSBi
L1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtR1RLLmNtYWtlCmluZGV4IDdmZWMxMmRjMmZjMzE1YmM1
MTY4ZjAyYjNiZjc2NDcwYzBkOWNiYWQuLmViNjExN2VkMDI3ZGFiZWQyNzljMmM1ZDhkY2FjODNm
Njc1YTBhYmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtR1RLLmNtYWtlCisr
KyBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtR1RLLmNtYWtlCkBAIC0xNyw2ICsxNyw3IEBAIGlm
IChDTUFLRV9TWVNURU1fTkFNRSBNQVRDSEVTICJMaW51eCIpCiBlbmRpZiAoKQogCiBsaXN0KEFQ
UEVORCBXVEZfU09VUkNFUworICAgIFRocmVhZGluZ1B0aHJlYWRzLmNwcAogICAgIFVuaVN0ZEV4
dHJhcy5jcHAKIAogICAgIGdlbmVyaWMvTWFpblRocmVhZEdlbmVyaWMuY3BwCkBAIC0yOCw2ICsy
OSw4IEBAIGxpc3QoQVBQRU5EIFdURl9TT1VSQ0VTCiAgICAgZ2xpYi9SdW5Mb29wR0xpYi5jcHAK
ICAgICBnbGliL1VSTEdMaWIuY3BwCiAKKyAgICBwb3NpeC9PU0FsbG9jYXRvclBPU0lYLmNwcAor
CiAgICAgdGV4dC91bml4L1RleHRCcmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1VVbml4LmNwcAogCiAg
ICAgdW5peC9DUFVUaW1lVW5peC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1BsYXRm
b3JtSlNDT25seS5jbWFrZSBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtSlNDT25seS5jbWFrZQpp
bmRleCBlYmFmNmJhN2EzZjRiODc2YjNiNDM4MzU0ODBmNzhkNjcxMzkwN2Y4Li5iZTZjMTQxMzc5
NjA3ZTliMzNiMGMwNjgyZWM5N2U1MDQxYTI2ZTlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0
Zi9QbGF0Zm9ybUpTQ09ubHkuY21ha2UKKysrIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm1KU0NP
bmx5LmNtYWtlCkBAIC0xMSw3ICsxMSwxMCBAQCBpZiAoV0lOMzIpCiAgICAgICAgIHdpbi9GaWxl
U3lzdGVtV2luLmNwcAogICAgICAgICB3aW4vTGFuZ3VhZ2VXaW4uY3BwCiAgICAgICAgIHdpbi9N
YWluVGhyZWFkV2luLmNwcAorICAgICAgICB3aW4vT1NBbGxvY2F0b3JXaW4uY3BwCiAgICAgICAg
IHdpbi9QYXRoV2Fsa2VyLmNwcAorICAgICAgICB3aW4vVGhyZWFkU3BlY2lmaWNXaW4uY3BwCisg
ICAgICAgIHdpbi9UaHJlYWRpbmdXaW4uY3BwCiAgICAgKQogICAgIGxpc3QoQVBQRU5EIFdURl9Q
VUJMSUNfSEVBREVSUwogICAgICAgICB3aW4vRGJnSGVscGVyV2luLmgKQEAgLTIwLDE1ICsyMywx
OSBAQCBpZiAoV0lOMzIpCiAgICAgICAgIHRleHQvd2luL1dDaGFyU3RyaW5nRXh0cmFzLmgKICAg
ICApCiAgICAgbGlzdChBUFBFTkQgV1RGX0xJQlJBUklFUworICAgICAgICBEYmdIZWxwCiAgICAg
ICAgIHNobHdhcGkKKyAgICAgICAgd2lubW0KICAgICApCiBlbHNlICgpCiAgICAgbGlzdChBUFBF
TkQgV1RGX1NPVVJDRVMKKyAgICAgICAgVGhyZWFkaW5nUHRocmVhZHMuY3BwCiAgICAgICAgIFVu
aVN0ZEV4dHJhcy5jcHAKIAogICAgICAgICBnZW5lcmljL01haW5UaHJlYWRHZW5lcmljLmNwcAog
CiAgICAgICAgIHBvc2l4L0ZpbGVTeXN0ZW1QT1NJWC5jcHAKKyAgICAgICAgcG9zaXgvT1NBbGxv
Y2F0b3JQT1NJWC5jcHAKIAogICAgICAgICB0ZXh0L3VuaXgvVGV4dEJyZWFrSXRlcmF0b3JJbnRl
cm5hbElDVVVuaXguY3BwCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtTWFj
LmNtYWtlIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm1NYWMuY21ha2UKaW5kZXggMGUzZTE0MTYw
OTEyYjc4NjE3NzM0MzUwYTkyNWQ5OWRiYTJjZGEwMS4uZDFlY2VhZDRlZTJkM2QzYTc5NWRiZTVi
YzNlYzE2NWMxNmUzNzI5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvUGxhdGZvcm1NYWMu
Y21ha2UKKysrIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm1NYWMuY21ha2UKQEAgLTM4LDE1ICsz
OCwxNSBAQCBsaXN0KEFQUEVORCBXVEZfUFVCTElDX0hFQURFUlMKICkKIAogbGlzdChBUFBFTkQg
V1RGX1NPVVJDRVMKKyAgICBUaHJlYWRpbmdQdGhyZWFkcy5jcHAKICAgICBCbG9ja09iakNFeGNl
cHRpb25zLm1tCi0gICAgUnVuTG9vcFRpbWVyQ0YuY3BwCi0gICAgU2NoZWR1bGVQYWlyQ0YuY3Bw
Ci0gICAgU2NoZWR1bGVQYWlyTWFjLm1tCiAKICAgICBjZi9DRlVSTEV4dHJhcy5jcHAKICAgICBj
Zi9GaWxlU3lzdGVtQ0YuY3BwCiAgICAgY2YvTGFuZ3VhZ2VDRi5jcHAKICAgICBjZi9SdW5Mb29w
Q0YuY3BwCisgICAgY2YvUnVuTG9vcFRpbWVyQ0YuY3BwCisgICAgY2YvU2NoZWR1bGVQYWlyQ0Yu
Y3BwCiAgICAgY2YvVVJMQ0YuY3BwCiAKICAgICBjb2NvYS9BdXRvZHJhaW5lZFBvb2wuY3BwCkBA
IC02Myw4ICs2MywxMCBAQCBsaXN0KEFQUEVORCBXVEZfU09VUkNFUwogCiAgICAgbWFjL0RlcHJl
Y2F0ZWRTeW1ib2xzVXNlZEJ5U2FmYXJpLm1tCiAgICAgbWFjL0ZpbGVTeXN0ZW1NYWMubW0KKyAg
ICBtYWMvU2NoZWR1bGVQYWlyTWFjLm1tCiAKICAgICBwb3NpeC9GaWxlU3lzdGVtUE9TSVguY3Bw
CisgICAgcG9zaXgvT1NBbGxvY2F0b3JQT1NJWC5jcHAKIAogICAgIHRleHQvY2YvQXRvbWljU3Ry
aW5nSW1wbENGLmNwcAogICAgIHRleHQvY2YvU3RyaW5nQ0YuY3BwCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL3d0Zi9QbGF0Zm9ybVBsYXlTdGF0aW9uLmNtYWtlIGIvU291cmNlL1dURi93dGYvUGxh
dGZvcm1QbGF5U3RhdGlvbi5jbWFrZQppbmRleCAzZTllNzVjOTI4YTZjOTQ2MDViNGJmY2FhN2Zi
YjJiOWY0MmY4MzkwLi44MjJiMDkxYzYyNDU5Y2NkYzY2ZTI4MzZmZTI0M2E5NzVlZGQ5NmU3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybVBsYXlTdGF0aW9uLmNtYWtlCisrKyBi
L1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtUGxheVN0YXRpb24uY21ha2UKQEAgLTEsNCArMSw2IEBA
CiBsaXN0KEFQUEVORCBXVEZfU09VUkNFUworICAgIFRocmVhZGluZ1B0aHJlYWRzLmNwcAorCiAg
ICAgZ2VuZXJpYy9NYWluVGhyZWFkR2VuZXJpYy5jcHAKICAgICBnZW5lcmljL01lbW9yeUZvb3Rw
cmludEdlbmVyaWMuY3BwCiAgICAgZ2VuZXJpYy9NZW1vcnlQcmVzc3VyZUhhbmRsZXJHZW5lcmlj
LmNwcApAQCAtNiw2ICs4LDcgQEAgbGlzdChBUFBFTkQgV1RGX1NPVVJDRVMKICAgICBnZW5lcmlj
L1dvcmtRdWV1ZUdlbmVyaWMuY3BwCiAKICAgICBwb3NpeC9GaWxlU3lzdGVtUE9TSVguY3BwCisg
ICAgcG9zaXgvT1NBbGxvY2F0b3JQT1NJWC5jcHAKIAogICAgIHRleHQvdW5peC9UZXh0QnJlYWtJ
dGVyYXRvckludGVybmFsSUNVVW5peC5jcHAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYv
UGxhdGZvcm1XUEUuY21ha2UgYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybVdQRS5jbWFrZQppbmRl
eCAwODZhZGQzYWE5MTlmYzQ5MjM5ZDcxYzFjYzg2ODVjNWZjNzM5YmQ0Li4zMWRmYzU4Zjc5NDU3
ZWIyYTRhMmU0ZTc5OTJiMWEwNWE5N2YwOTM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9Q
bGF0Zm9ybVdQRS5jbWFrZQorKysgYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybVdQRS5jbWFrZQpA
QCAtMTEsNiArMTEsNyBAQCBsaXN0KEFQUEVORCBXVEZfUFVCTElDX0hFQURFUlMKICkKIAogbGlz
dChBUFBFTkQgV1RGX1NPVVJDRVMKKyAgICBUaHJlYWRpbmdQdGhyZWFkcy5jcHAKICAgICBVbmlT
dGRFeHRyYXMuY3BwCiAKICAgICBnZW5lcmljL01haW5UaHJlYWRHZW5lcmljLmNwcApAQCAtMjYs
NiArMjcsOCBAQCBsaXN0KEFQUEVORCBXVEZfU09VUkNFUwogICAgIGxpbnV4L01lbW9yeUZvb3Rw
cmludExpbnV4LmNwcAogICAgIGxpbnV4L01lbW9yeVByZXNzdXJlSGFuZGxlckxpbnV4LmNwcAog
CisgICAgcG9zaXgvT1NBbGxvY2F0b3JQT1NJWC5jcHAKKwogICAgIHRleHQvdW5peC9UZXh0QnJl
YWtJdGVyYXRvckludGVybmFsSUNVVW5peC5jcHAKIAogICAgIHVuaXgvQ1BVVGltZVVuaXguY3Bw
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybVdpbi5jbWFrZSBiL1NvdXJjZS9X
VEYvd3RmL1BsYXRmb3JtV2luLmNtYWtlCmluZGV4IGI2YzBhYzZmNGRlNWUwNWYyN2Q0ZDlhYzBm
ZmJkNWNjNDA5N2E2ZTMuLjJjMzQwMjI1NDlkODg0MGViOTIzMDI4NGExZGRkOWQyODUyMzlhYWUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtV2luLmNtYWtlCisrKyBiL1NvdXJj
ZS9XVEYvd3RmL1BsYXRmb3JtV2luLmNtYWtlCkBAIC0xNywxMyArMTcsMTggQEAgbGlzdChBUFBF
TkQgV1RGX1NPVVJDRVMKICAgICB3aW4vTWFpblRocmVhZFdpbi5jcHAKICAgICB3aW4vTWVtb3J5
Rm9vdHByaW50V2luLmNwcAogICAgIHdpbi9NZW1vcnlQcmVzc3VyZUhhbmRsZXJXaW4uY3BwCisg
ICAgd2luL09TQWxsb2NhdG9yV2luLmNwcAogICAgIHdpbi9QYXRoV2Fsa2VyLmNwcAogICAgIHdp
bi9SdW5Mb29wV2luLmNwcAorICAgIHdpbi9UaHJlYWRTcGVjaWZpY1dpbi5jcHAKKyAgICB3aW4v
VGhyZWFkaW5nV2luLmNwcAogICAgIHdpbi9Xb3JrUXVldWVXaW4uY3BwCiApCiAKIGxpc3QoQVBQ
RU5EIFdURl9MSUJSQVJJRVMKKyAgICBEYmdIZWxwCiAgICAgc2hsd2FwaQorICAgIHdpbm1tCiAp
CiAKIGlmIChVU0VfQ0YpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9SdW5Mb29wVGltZXJD
Ri5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9SdW5Mb29wVGltZXJDRi5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDc0MThmZGQzZWEyN2RiZjg5NDA1MDJlOTBkOTE0M2I1MjgzNTJhODUu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dU
Ri93dGYvUnVuTG9vcFRpbWVyQ0YuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsOTIgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgot
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBs
ZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICog
ICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJ
VFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
LSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0KLSNpZiBQTEFURk9STShDT0NPQSkgJiYgSEFWRShSVU5MT09QX1RJ
TUVSKQotCi0jaW5jbHVkZSA8d3RmL1J1bkxvb3BUaW1lci5oPgotCi0jaW5jbHVkZSA8d3RmL0F1
dG9kcmFpbmVkUG9vbC5oPgotCi1uYW1lc3BhY2UgV1RGIHsKLQotUnVuTG9vcFRpbWVyQmFzZTo6
flJ1bkxvb3BUaW1lckJhc2UoKQotewotICAgIHN0b3AoKTsKLX0KLQotc3RhdGljIHZvaWQgdGlt
ZXJGaXJlZChDRlJ1bkxvb3BUaW1lclJlZiwgdm9pZCogY29udGV4dCkKLXsKLSAgICAvLyBDRlJ1
bkxvb3BUaW1lciBkb2VzIG5vdCBjcmVhdGUgYW4gTlNBdXRvcmVsZWFzZVBvb2wsIGxpa2UgTlNU
aW1lciBkb2VzLiBUaGlzIGNhbiBsZWFkIHRvCi0gICAgLy8gYXV0b3JlbGVhc2VkIG9iamVjdHMg
YmVpbmcgcHVzaGVkIGludG8gTlNBdXRvcmVsZWFzZVBvb2xzIHVuZGVybmVhdGggdGhlIHJ1biBs
b29wLCB3aGljaAotICAgIC8vIGFyZSB2ZXJ5IGluZnJlcXVlbnRseSBkcmFpbmVkLiBDcmVhdGUg
YSBuZXcgYXV0b3JlbGVhc2UgcG9vbCBoZXJlIHRvIGdpdmUgYXV0b3JlbGVhc2VkIG9iamVjdHMK
LSAgICAvLyBhIHBsYWNlIHRvIGNvbGxlY3QuCi0gICAgQXV0b2RyYWluZWRQb29sIHBvb2w7Ci0g
ICAgUnVuTG9vcFRpbWVyQmFzZSogdGltZXIgPSBzdGF0aWNfY2FzdDxSdW5Mb29wVGltZXJCYXNl
Kj4oY29udGV4dCk7Ci0gICAgdGltZXItPmZpcmVkKCk7Ci19Ci0KLXZvaWQgUnVuTG9vcFRpbWVy
QmFzZTo6c3RhcnQoU2Vjb25kcyBuZXh0RmlyZUludGVydmFsLCBTZWNvbmRzIHJlcGVhdEludGVy
dmFsKQotewotICAgIGlmIChtX3RpbWVyKQotICAgICAgICBDRlJ1bkxvb3BUaW1lckludmFsaWRh
dGUobV90aW1lci5nZXQoKSk7Ci0gICAgQ0ZSdW5Mb29wVGltZXJDb250ZXh0IGNvbnRleHQgPSB7
IDAsIHRoaXMsIDAsIDAsIDAgfTsKLSAgICBtX3RpbWVyID0gYWRvcHRDRihDRlJ1bkxvb3BUaW1l
ckNyZWF0ZSgwLCBDRkFic29sdXRlVGltZUdldEN1cnJlbnQoKSArIG5leHRGaXJlSW50ZXJ2YWwu
c2Vjb25kcygpLCByZXBlYXRJbnRlcnZhbC5zZWNvbmRzKCksIDAsIDAsIHRpbWVyRmlyZWQsICZj
b250ZXh0KSk7Ci19Ci0KLXZvaWQgUnVuTG9vcFRpbWVyQmFzZTo6c2NoZWR1bGUoY29uc3QgU2No
ZWR1bGVQYWlyKiBzY2hlZHVsZVBhaXIpCi17Ci0gICAgQVNTRVJUX0FSRyhzY2hlZHVsZVBhaXIs
IHNjaGVkdWxlUGFpcik7Ci0gICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX3RpbWVyLCAiVGltZXIg
bXVzdCBoYXZlIG9uZSBvZiB0aGUgc3RhcnQgZnVuY3Rpb25zIGNhbGxlZCBiZWZvcmUgY2FsbGlu
ZyBzY2hlZHVsZSgpLiIpOwotICAgIENGUnVuTG9vcEFkZFRpbWVyKHNjaGVkdWxlUGFpci0+cnVu
TG9vcCgpLCBtX3RpbWVyLmdldCgpLCBzY2hlZHVsZVBhaXItPm1vZGUoKSk7Ci19Ci0KLXZvaWQg
UnVuTG9vcFRpbWVyQmFzZTo6c2NoZWR1bGUoY29uc3QgU2NoZWR1bGVQYWlySGFzaFNldCYgc2No
ZWR1bGVQYWlycykKLXsKLSAgICBTY2hlZHVsZVBhaXJIYXNoU2V0Ojpjb25zdF9pdGVyYXRvciBl
bmQgPSBzY2hlZHVsZVBhaXJzLmVuZCgpOwotICAgIGZvciAoU2NoZWR1bGVQYWlySGFzaFNldDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBzY2hlZHVsZVBhaXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkKLSAgICAgICAgc2NoZWR1bGUoKCppdCkuZ2V0KCkpOwotfQotCi12b2lkIFJ1bkxvb3BUaW1l
ckJhc2U6OnN0b3AoKQotewotICAgIGlmICghbV90aW1lcikKLSAgICAgICAgcmV0dXJuOwotICAg
IENGUnVuTG9vcFRpbWVySW52YWxpZGF0ZShtX3RpbWVyLmdldCgpKTsKLSAgICBtX3RpbWVyID0g
MDsKLX0KLQotYm9vbCBSdW5Mb29wVGltZXJCYXNlOjppc0FjdGl2ZSgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIG1fdGltZXIgJiYgQ0ZSdW5Mb29wVGltZXJJc1ZhbGlkKG1fdGltZXIuZ2V0KCkpOwot
fQotCi19IC8vIG5hbWVzcGFjZSBXVEYKLQotI2VuZGlmIC8vIFBMQVRGT1JNKENPQ09BKSAmJiBI
QVZFKFJVTkxPT1BfVElNRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9TY2hlZHVsZVBh
aXJDRi5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9TY2hlZHVsZVBhaXJDRi5jcHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDQ2ZjY1YzMzZjAwYjdkYTE1MmY4MGU1MjY4ZjA0NzMwMTM1Y2Nh
MzUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dURi93dGYvU2NoZWR1bGVQYWlyQ0YuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBB
cHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAot
ICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAot
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSA8d3RmL1NjaGVkdWxlUGFpci5oPgotCi1uYW1l
c3BhY2UgV1RGIHsKLQotYm9vbCBTY2hlZHVsZVBhaXI6Om9wZXJhdG9yPT0oY29uc3QgU2NoZWR1
bGVQYWlyJiBvdGhlcikgY29uc3QKLXsKLSAgICBpZiAocnVuTG9vcCgpICE9IG90aGVyLnJ1bkxv
b3AoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIENGU3RyaW5nUmVmIHRoaXNNb2RlID0g
bW9kZSgpOwotICAgIENGU3RyaW5nUmVmIG90aGVyTW9kZSA9IG90aGVyLm1vZGUoKTsKLSAgICBp
ZiAoIXRoaXNNb2RlIHx8ICFvdGhlck1vZGUpCi0gICAgICAgIHJldHVybiB0aGlzTW9kZSA9PSBv
dGhlck1vZGU7Ci0gICAgcmV0dXJuIENGRXF1YWwodGhpc01vZGUsIG90aGVyTW9kZSk7Ci19Ci0K
LX0gLy8gbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9TY2hlZHVsZVBhaXJN
YWMubW0gYi9Tb3VyY2UvV1RGL3d0Zi9TY2hlZHVsZVBhaXJNYWMubW0KZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDYyMjYxYWQzZjlkNmE2NjEyMDNiZGIxNDE2YzMxOGViMmU0ZWU3N2Eu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dU
Ri93dGYvU2NoZWR1bGVQYWlyTWFjLm1tCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgot
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBs
ZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICog
ICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJ
VFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
LSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSA8d3RmL1NjaGVkdWxlUGFpci5oPgotCi1uYW1lc3Bh
Y2UgV1RGIHsKLQotU2NoZWR1bGVQYWlyOjpTY2hlZHVsZVBhaXIoTlNSdW5Mb29wKiBydW5Mb29w
LCBDRlN0cmluZ1JlZiBtb2RlKQotICAgIDogbV9uc1J1bkxvb3AocnVuTG9vcCkKLSAgICAsIG1f
cnVuTG9vcChbcnVuTG9vcCBnZXRDRlJ1bkxvb3BdKQotewotICAgIGlmIChtb2RlKQotICAgICAg
ICBtX21vZGUgPSBhZG9wdENGKENGU3RyaW5nQ3JlYXRlQ29weSgwLCBtb2RlKSk7Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRTcGVjaWZpY1dp
bi5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRTcGVjaWZpY1dpbi5jcHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGFlN2FlODQ3Y2JhYmZjNDAzNjI4NzJjYTM2MDZkYmZhMDkxMjdm
ZGUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dURi93dGYvVGhyZWFkU3BlY2lmaWNXaW4uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBKaWFuIExpIDxqaWFubGlAY2hyb21pdW0u
b3JnPgotICogQ29weXJpZ2h0IChDKSAyMDEyIFBhdHJpY2sgR2Fuc3RlcmVyIDxwYXJvZ2FAcGFy
b2dhLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
Ci0gKgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlIDx3dGYvVGhyZWFkU3Bl
Y2lmaWMuaD4KLQotI2lmIE9TKFdJTkRPV1MpCi0KLSNpZiAhVVNFKFBUSFJFQURTKQotCi1uYW1l
c3BhY2UgV1RGIHsKLQotbG9uZyYgZmxzS2V5Q291bnQoKQotewotICAgIHN0YXRpYyBsb25nIGNv
dW50OwotICAgIHJldHVybiBjb3VudDsKLX0KLQotRFdPUkQqIGZsc0tleXMoKQotewotICAgIHN0
YXRpYyBEV09SRCBrZXlzW2tNYXhGbHNLZXlTaXplXTsKLSAgICByZXR1cm4ga2V5czsKLX0KLQot
fSAvLyBuYW1lc3BhY2UgV1RGCi0KLSNlbmRpZiAvLyAhVVNFKFBUSFJFQURTKQotCi0jZW5kaWYg
Ly8gT1MoV0lORE9XUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZ1dpbi5j
cHAgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmdXaW4uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAxMGQ0NmFjOGFkOGM5NDcxYTkzM2FjNzgxNjI5ODcwNTA3MWEyZTAyLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XVEYvd3Rm
L1RocmVhZGluZ1dpbi5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0NjQgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBUb3JjaCBNb2JpbGUsIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAotICogMy4gIE5laXRoZXIgdGhlIG5hbWUg
b2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uIAotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0g
KiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8qCi0gKiBUaGVyZSBhcmUgbnVtZXJvdXMgYWNhZGVtaWMgYW5kIHByYWN0aWNhbCB3b3Jr
cyBvbiBob3cgdG8gaW1wbGVtZW50IHB0aHJlYWRfY29uZF93YWl0L3B0aHJlYWRfY29uZF9zaWdu
YWwvcHRocmVhZF9jb25kX2Jyb2FkY2FzdAotICogZnVuY3Rpb25zIG9uIFdpbjMyLiBIZXJlIGlz
IG9uZSBleGFtcGxlOiBodHRwOi8vd3d3LmNzLnd1c3RsLmVkdS9+c2NobWlkdC93aW4zMi1jdi0x
Lmh0bWwgd2hpY2ggaXMgd2lkZWx5IGNyZWRpdGVkIGFzIGEgJ3N0YXJ0aW5nIHBvaW50JwotICog
b2YgbW9kZXJuIGF0dGVtcHRzLiBUaGVyZSBhcmUgc2V2ZXJhbCBtb3JlIG9yIGxlc3MgcHJvdmVu
IGltcGxlbWVudGF0aW9ucywgb25lIGluIEJvb3N0IEMrKyBsaWJyYXJ5IChodHRwOi8vd3d3LmJv
b3N0Lm9yZykgYW5kIGFub3RoZXIKLSAqIGluIHB0aHJlYWRzLXdpbjMyIChodHRwOi8vc291cmNl
d2FyZS5vcmcvcHRocmVhZHMtd2luMzIvKS4KLSAqCi0gKiBUaGUgbnVtYmVyIG9mIGFydGljbGVz
IGFuZCBkaXNjdXNzaW9ucyBpcyB0aGUgZXZpZGVuY2Ugb2Ygc2lnbmlmaWNhbnQgZGlmZmljdWx0
aWVzIGluIGltcGxlbWVudGluZyB0aGVzZSBwcmltaXRpdmVzIGNvcnJlY3RseS4KLSAqIFRoZSBi
cmllZiBzZWFyY2ggb2YgcmV2aXNpb25zLCBDaGFuZ2VMb2cgZW50cmllcywgZGlzY3Vzc2lvbnMg
aW4gY29tcC5wcm9ncmFtbWluZy50aHJlYWRzIGFuZCBvdGhlciBwbGFjZXMgY2xlYXJseSBkb2N1
bWVudHMKLSAqIG51bWVyb3VzIHBpdGZhbGxzIGFuZCBwZXJmb3JtYW5jZSBwcm9ibGVtcyB0aGUg
YXV0aG9ycyBoYWQgdG8gb3ZlcmNvbWUgdG8gYXJyaXZlIHRvIHRoZSBzdWl0YWJsZSBpbXBsZW1l
bnRhdGlvbnMuCi0gKiBPcHRpbWFsbHksIFdlYktpdCB3b3VsZCB1c2Ugb25lIG9mIHRob3NlIHN1
cHBvcnRlZC90ZXN0ZWQgbGlicmFyaWVzIGRpcmVjdGx5LiBUbyByb2xsIG91dCBvdXIgb3duIGlt
cGxlbWVudGF0aW9uIGlzIGltcHJhY3RpY2FsLAotICogaWYgZXZlbiBmb3IgdGhlIGxhY2sgb2Yg
c3VmZmljaWVudCB0ZXN0aW5nLiBIb3dldmVyLCBhIGZhaXRoZnVsIHJlcHJvZHVjdGlvbiBvZiB0
aGUgY29kZSBmcm9tIG9uZSBvZiB0aGUgcG9wdWxhciBzdXBwb3J0ZWQKLSAqIGxpYnJhcmllcyBz
ZWVtcyB0byBiZSBhIGdvb2QgY29tcHJvbWlzZS4KLSAqCi0gKiBUaGUgZWFybHkgQm9vc3QgaW1w
bGVtZW50YXRpb24gKGh0dHA6Ly93d3cuYm94YmFja3VwLm9yZy90cmFjL2Jyb3dzZXIvYm94L25p
Y2svd2luL2xpYi93aW4zMi9ib29zdF8xXzMyXzAvbGlicy90aHJlYWQvc3JjL2NvbmRpdGlvbi5j
cHA/cmV2PTMwKQotICogaXMgaWRlbnRpY2FsIHRvIHB0aHJlYWRzLXdpbjMyIChodHRwOi8vc291
cmNld2FyZS5vcmcvY2dpLWJpbi9jdnN3ZWIuY2dpL3B0aHJlYWRzL3B0aHJlYWRfY29uZF93YWl0
LmM/cmV2PTEuMTAmY29udGVudC10eXBlPXRleHQveC1jdnN3ZWItbWFya3VwJmN2c3Jvb3Q9cHRo
cmVhZHMtd2luMzIpLgotICogQ3VycmVudCBCb29zdCB1c2VzIHlldCBhbm90aGVyIChhbHRob3Vn
aCBzZWVtaW5nbHkgZXF1aXZhbGVudCkgYWxnb3JpdGhtIHdoaWNoIGNhbWUgZnJvbSB0aGVpciAn
dGhyZWFkIHJld3JpdGUnIGVmZm9ydC4KLSAqCi0gKiBUaGlzIGZpbGUgaW5jbHVkZXMgdGltZWRX
YWl0L3NpZ25hbC9icm9hZGNhc3QgaW1wbGVtZW50YXRpb25zIHRyYW5zbGF0ZWQgdG8gV2ViS2l0
IGNvZGluZyBzdHlsZSBmcm9tIHRoZSBsYXRlc3QgYWxnb3JpdGhtIGJ5Ci0gKiBBbGV4YW5kZXIg
VGVyZWtob3YgYW5kIExvdWlzIFRob21hcywgYXMgY2FwdHVyZWQgaGVyZTogaHR0cDovL3NvdXJj
ZXdhcmUub3JnL2NnaS1iaW4vY3Zzd2ViLmNnaS9wdGhyZWFkcy9wdGhyZWFkX2NvbmRfd2FpdC5j
P3Jldj0xLjEwJmNvbnRlbnQtdHlwZT10ZXh0L3gtY3Zzd2ViLW1hcmt1cCZjdnNyb290PXB0aHJl
YWRzLXdpbjMyCi0gKiBJdCByZXBsYWNlcyB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlaXIgcHJl
dmlvdXMgYWxnb3JpdGhtLCBhbHNvIGRvY3VtZW50ZWQgaW4gdGhlIHNhbWUgc291cmNlIGFib3Zl
LgotICogVGhlIG5hbWluZyBhbmQgY29tbWVudHMgYXJlIGxlZnQgdmVyeSBjbG9zZSB0byBvcmln
aW5hbCB0byBlbmFibGUgZWFzeSBjcm9zcy1jaGVjay4KLSAqCi0gKiBUaGUgY29ycmVzcG9uZGlu
ZyBQdGhyZWFkcy13aW4zMiBMaWNlbnNlIGlzIGluY2x1ZGVkIGJlbG93LCBhbmQgQ09OVFJJQlVU
T1JTIGZpbGUgd2hpY2ggaXQgcmVmZXJzIHRvIGlzIGFkZGVkIHRvCi0gKiBzb3VyY2UgZGlyZWN0
b3J5IChhcyBDT05UUklCVVRPUlMucHRocmVhZHMtd2luMzIpLgotICovCi0KLS8qCi0gKiAgICAg
IFB0aHJlYWRzLXdpbjMyIC0gUE9TSVggVGhyZWFkcyBMaWJyYXJ5IGZvciBXaW4zMgotICogICAg
ICBDb3B5cmlnaHQoQykgMTk5OCBKb2huIEUuIEJvc3NvbQotICogICAgICBDb3B5cmlnaHQoQykg
MTk5OSwyMDA1IFB0aHJlYWRzLXdpbjMyIGNvbnRyaWJ1dG9ycwotICoKLSAqICAgICAgQ29udGFj
dCBFbWFpbDogcnBqQGNhbGxpc3RvLmNhbmJlcnJhLmVkdS5hdQotICoKLSAqICAgICAgVGhlIGN1
cnJlbnQgbGlzdCBvZiBjb250cmlidXRvcnMgaXMgY29udGFpbmVkCi0gKiAgICAgIGluIHRoZSBm
aWxlIENPTlRSSUJVVE9SUyBpbmNsdWRlZCB3aXRoIHRoZSBzb3VyY2UKLSAqICAgICAgY29kZSBk
aXN0cmlidXRpb24uIFRoZSBsaXN0IGNhbiBhbHNvIGJlIHNlZW4gYXQgdGhlCi0gKiAgICAgIGZv
bGxvd2luZyBXb3JsZCBXaWRlIFdlYiBsb2NhdGlvbjoKLSAqICAgICAgaHR0cDovL3NvdXJjZXMu
cmVkaGF0LmNvbS9wdGhyZWFkcy13aW4zMi9jb250cmlidXRvcnMuaHRtbAotICoKLSAqICAgICAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgotICogICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCi0gKiAgICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogICAgICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogICAg
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKLSAqICAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICAgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICAgICAgTGVzc2Vy
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgICAgIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKLSAqICAgICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeSBpbiB0aGUgZmls
ZSBDT1BZSU5HLkxJQjsKLSAqICAgICAgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLAotICogICAgICA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAs
IEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KLQotI2lmIE9TKFdJTkRPV1MpCi0KLSNpbmNsdWRl
IDxlcnJuby5oPgotI2luY2x1ZGUgPHByb2Nlc3MuaD4KLSNpbmNsdWRlIDx3aW5kb3dzLmg+Ci0j
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvTG9jay5oPgotI2luY2x1ZGUg
PHd0Zi9NYWluVGhyZWFkLmg+Ci0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLSNpbmNsdWRl
IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nUHJpbWl0aXZl
cy5oPgotCi1uYW1lc3BhY2UgV1RGIHsKLQotc3RhdGljIExvY2sgZ2xvYmFsU3VzcGVuZExvY2s7
Ci0KLVRocmVhZDo6flRocmVhZCgpCi17Ci0gICAgLy8gSXQgaXMgT0sgYmVjYXVzZSBGTFNBbGxv
YydzIGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIGV2ZW4gYmVmb3JlIHRoZXJlIGFyZSBzb21lIG9w
ZW4gaGFuZGxlcy4KLSAgICAvLyBUaGlzIGVhc2lseSBlbnN1cmVzIHRoYXQgYWxsIHRoZSB0aHJl
YWQgcmVzb3VyY2VzIGFyZSBhdXRvbWF0aWNhbGx5IGNsb3NlZC4KLSAgICBpZiAobV9oYW5kbGUg
IT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpCi0gICAgICAgIENsb3NlSGFuZGxlKG1faGFuZGxlKTsK
LX0KLQotdm9pZCBUaHJlYWQ6OmluaXRpYWxpemVDdXJyZW50VGhyZWFkRXZlbklmTm9uV1RGQ3Jl
YXRlZCgpCi17Ci19Ci0KLS8vIE1TX1ZDX0VYQ0VQVElPTiwgVEhSRUFETkFNRV9JTkZPLCBhbmQg
c2V0VGhyZWFkTmFtZUludGVybmFsIGFsbCBjb21lIGZyb20gPGh0dHA6Ly9tc2RuLm1pY3Jvc29m
dC5jb20vZW4tdXMvbGlicmFyeS94Y2Iyejhocy5hc3B4Pi4KLXN0YXRpYyBjb25zdCBEV09SRCBN
U19WQ19FWENFUFRJT04gPSAweDQwNkQxMzg4OwotCi0jcHJhZ21hIHBhY2socHVzaCwgOCkKLXR5
cGVkZWYgc3RydWN0IHRhZ1RIUkVBRE5BTUVfSU5GTyB7Ci0gICAgRFdPUkQgZHdUeXBlOyAvLyBt
dXN0IGJlIDB4MTAwMAotICAgIExQQ1NUUiBzek5hbWU7IC8vIHBvaW50ZXIgdG8gbmFtZSAoaW4g
dXNlciBhZGRyIHNwYWNlKQotICAgIERXT1JEIGR3VGhyZWFkSUQ7IC8vIHRocmVhZCBJRCAoLTE9
Y2FsbGVyIHRocmVhZCkKLSAgICBEV09SRCBkd0ZsYWdzOyAvLyByZXNlcnZlZCBmb3IgZnV0dXJl
IHVzZSwgbXVzdCBiZSB6ZXJvCi19IFRIUkVBRE5BTUVfSU5GTzsKLSNwcmFnbWEgcGFjayhwb3Ap
Ci0KLXZvaWQgVGhyZWFkOjppbml0aWFsaXplQ3VycmVudFRocmVhZEludGVybmFsKGNvbnN0IGNo
YXIqIHN6VGhyZWFkTmFtZSkKLXsKLSNpZiBDT01QSUxFUihNSU5HVykKLSAgICAvLyBGSVhNRTog
SW1wbGVtZW50IHRocmVhZCBuYW1lIHNldHRpbmcgd2l0aCBNaW5nVy4KLSAgICBVTlVTRURfUEFS
QU0oc3pUaHJlYWROYW1lKTsKLSNlbHNlCi0gICAgVEhSRUFETkFNRV9JTkZPIGluZm87Ci0gICAg
aW5mby5kd1R5cGUgPSAweDEwMDA7Ci0gICAgaW5mby5zek5hbWUgPSBUaHJlYWQ6Om5vcm1hbGl6
ZVRocmVhZE5hbWUoc3pUaHJlYWROYW1lKTsKLSAgICBpbmZvLmR3VGhyZWFkSUQgPSBHZXRDdXJy
ZW50VGhyZWFkSWQoKTsKLSAgICBpbmZvLmR3RmxhZ3MgPSAwOwotCi0gICAgX190cnkgewotICAg
ICAgICBSYWlzZUV4Y2VwdGlvbihNU19WQ19FWENFUFRJT04sIDAsIHNpemVvZihpbmZvKS9zaXpl
b2YoVUxPTkdfUFRSKSwgcmVpbnRlcnByZXRfY2FzdDxVTE9OR19QVFIqPigmaW5mbykpOwotICAg
IH0gX19leGNlcHQgKEVYQ0VQVElPTl9DT05USU5VRV9FWEVDVVRJT04pIHsKLSAgICB9Ci0jZW5k
aWYKLSAgICBpbml0aWFsaXplQ3VycmVudFRocmVhZEV2ZW5JZk5vbldURkNyZWF0ZWQoKTsKLX0K
LQotdm9pZCBUaHJlYWQ6OmluaXRpYWxpemVQbGF0Zm9ybVRocmVhZGluZygpCi17Ci19Ci0KLXN0
YXRpYyB1bnNpZ25lZCBfX3N0ZGNhbGwgd3RmVGhyZWFkRW50cnlQb2ludCh2b2lkKiBkYXRhKQot
ewotICAgIFRocmVhZDo6ZW50cnlQb2ludChyZWludGVycHJldF9jYXN0PFRocmVhZDo6TmV3VGhy
ZWFkQ29udGV4dCo+KGRhdGEpKTsKLSAgICByZXR1cm4gMDsKLX0KLQotYm9vbCBUaHJlYWQ6OmVz
dGFibGlzaEhhbmRsZShOZXdUaHJlYWRDb250ZXh0KiBkYXRhKQotewotICAgIHVuc2lnbmVkIHRo
cmVhZElkZW50aWZpZXIgPSAwOwotICAgIEhBTkRMRSB0aHJlYWRIYW5kbGUgPSByZWludGVycHJl
dF9jYXN0PEhBTkRMRT4oX2JlZ2ludGhyZWFkZXgoMCwgMCwgd3RmVGhyZWFkRW50cnlQb2ludCwg
ZGF0YSwgMCwgJnRocmVhZElkZW50aWZpZXIpKTsKLSAgICBpZiAoIXRocmVhZEhhbmRsZSkgewot
ICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBjcmVhdGUgdGhyZWFkIGF0IGVudHJ5IHBvaW50
ICVwIHdpdGggZGF0YSAlcDogJWxkIiwgd3RmVGhyZWFkRW50cnlQb2ludCwgZGF0YSwgZXJybm8p
OwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGVzdGFibGlzaFBsYXRmb3JtU3Bl
Y2lmaWNIYW5kbGUodGhyZWFkSGFuZGxlLCB0aHJlYWRJZGVudGlmaWVyKTsKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotdm9pZCBUaHJlYWQ6OmNoYW5nZVByaW9yaXR5KGludCBkZWx0YSkKLXsKLSAg
ICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbXV0ZXgpOwotICAgIFNldFRocmVhZFByaW9yaXR5
KG1faGFuZGxlLCBUSFJFQURfUFJJT1JJVFlfTk9STUFMICsgZGVsdGEpOwotfQotCi1pbnQgVGhy
ZWFkOjp3YWl0Rm9yQ29tcGxldGlvbigpCi17Ci0gICAgSEFORExFIGhhbmRsZTsKLSAgICB7Ci0g
ICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9tdXRleCk7Ci0gICAgICAgIGhhbmRsZSA9
IG1faGFuZGxlOwotICAgIH0KLQotICAgIERXT1JEIGpvaW5SZXN1bHQgPSBXYWl0Rm9yU2luZ2xl
T2JqZWN0KGhhbmRsZSwgSU5GSU5JVEUpOwotICAgIGlmIChqb2luUmVzdWx0ID09IFdBSVRfRkFJ
TEVEKQotICAgICAgICBMT0dfRVJST1IoIlRocmVhZCAlcCB3YXMgZm91bmQgdG8gYmUgZGVhZGxv
Y2tlZCB0cnlpbmcgdG8gcXVpdCIsIHRoaXMpOwotCi0gICAgYXV0byBsb2NrZXIgPSBob2xkTG9j
ayhtX211dGV4KTsKLSAgICBBU1NFUlQoam9pbmFibGVTdGF0ZSgpID09IEpvaW5hYmxlKTsKLQot
ICAgIC8vIFRoZSB0aHJlYWQgaGFzIGFscmVhZHkgZXhpdGVkLCBkbyBub3RoaW5nLgotICAgIC8v
IFRoZSB0aHJlYWQgaGFzbid0IGV4aXRlZCB5ZXQsIHNvIGRvbid0IGNsZWFuIGFueXRoaW5nIHVw
LiBKdXN0IHNpZ25hbCB0aGF0IHdlJ3ZlIGFscmVhZHkgam9pbmVkIG9uIGl0IHNvIHRoYXQgaXQg
d2lsbCBjbGVhbiB1cCBhZnRlciBpdHNlbGYuCi0gICAgaWYgKCFoYXNFeGl0ZWQoKSkKLSAgICAg
ICAgZGlkSm9pbigpOwotCi0gICAgcmV0dXJuIGpvaW5SZXN1bHQ7Ci19Ci0KLXZvaWQgVGhyZWFk
OjpkZXRhY2goKQotewotICAgIC8vIFdlIGZvbGxvdyB0aGUgcHRocmVhZCBzZW1hbnRpY3M6IGV2
ZW4gYWZ0ZXIgdGhlIGRldGFjaCBpcyBjYWxsZWQsCi0gICAgLy8gd2UgY2FuIHN0aWxsIHBlcmZv
cm0gdmFyaW91cyBvcGVyYXRpb25zIG9udG8gdGhlIHRocmVhZC4gRm9yIGV4YW1wbGUsCi0gICAg
Ly8gd2UgY2FuIGRvIHB0aHJlYWRfa2lsbCBmb3IgdGhlIGRldGFjaGVkIHRocmVhZC4gVGhlIHBy
b2JsZW0gaW4gV2luZG93cwotICAgIC8vIGlzIHRoYXQgY2xvc2luZyBIQU5ETEUgbG9zZXMgdGhl
IHdheSB0byBkbyBzdWNoIG9wZXJhdGlvbnMuCi0gICAgLy8gVG8gZG8gc28sIHdlIGRvIG5vdGhp
bmcgaGVyZSBpbiBXaW5kb3dzLiBPcmlnaW5hbCBkZXRhY2gncyBwdXJwb3NlLAotICAgIC8vIHJl
bGVhc2luZyB0aHJlYWQgcmVzb3VyY2Ugd2hlbiB0aGUgdGhyZWFkIGV4aXRzLCB3aWxsIGJlIGFj
aGlldmVkIGJ5Ci0gICAgLy8gRmxzQ2FsbGJhY2sgYXV0b21hdGljYWxseS4gRmxzQ2FsbGJhY2sg
d2lsbCBjYWxsIENsb3NlSGFuZGxlIHRvIGNsZWFuIHVwCi0gICAgLy8gcmVzb3VyY2UuIFNvIGlu
IHRoaXMgZnVuY3Rpb24sIHdlIGp1c3QgbWFyayB0aGUgdGhyZWFkIGFzIGRldGFjaGVkIHRvCi0g
ICAgLy8gYXZvaWQgY2FsbGluZyB3YWl0Rm9yQ29tcGxldGlvbiBmb3IgdGhpcyB0aHJlYWQuCi0g
ICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX211dGV4KTsKLSAgICBpZiAoIWhhc0V4aXRlZCgp
KQotICAgICAgICBkaWRCZWNvbWVEZXRhY2hlZCgpOwotfQotCi1hdXRvIFRocmVhZDo6c3VzcGVu
ZCgpIC0+IEV4cGVjdGVkPHZvaWQsIFBsYXRmb3JtU3VzcGVuZEVycm9yPgotewotICAgIFJFTEVB
U0VfQVNTRVJUX1dJVEhfTUVTU0FHRSh0aGlzICE9ICZUaHJlYWQ6OmN1cnJlbnQoKSwgIldlIGRv
IG5vdCBzdXBwb3J0IHN1c3BlbmRpbmcgdGhlIGN1cnJlbnQgdGhyZWFkIGl0c2VsZi4iKTsKLSAg
ICBMb2NrSG9sZGVyIGxvY2tlcihnbG9iYWxTdXNwZW5kTG9jayk7Ci0gICAgRFdPUkQgcmVzdWx0
ID0gU3VzcGVuZFRocmVhZChtX2hhbmRsZSk7Ci0gICAgaWYgKHJlc3VsdCAhPSAoRFdPUkQpLTEp
Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKHJlc3VsdCk7
Ci19Ci0KLS8vIER1cmluZyByZXN1bWUsIHN1c3BlbmQgb3IgcmVzdW1lIHNob3VsZCBub3QgYmUg
ZXhlY3V0ZWQgZnJvbSB0aGUgb3RoZXIgdGhyZWFkcy4KLXZvaWQgVGhyZWFkOjpyZXN1bWUoKQot
ewotICAgIExvY2tIb2xkZXIgbG9ja2VyKGdsb2JhbFN1c3BlbmRMb2NrKTsKLSAgICBSZXN1bWVU
aHJlYWQobV9oYW5kbGUpOwotfQotCi1zaXplX3QgVGhyZWFkOjpnZXRSZWdpc3RlcnMoUGxhdGZv
cm1SZWdpc3RlcnMmIHJlZ2lzdGVycykKLXsKLSAgICBMb2NrSG9sZGVyIGxvY2tlcihnbG9iYWxT
dXNwZW5kTG9jayk7Ci0gICAgcmVnaXN0ZXJzLkNvbnRleHRGbGFncyA9IENPTlRFWFRfSU5URUdF
UiB8IENPTlRFWFRfQ09OVFJPTDsKLSAgICBHZXRUaHJlYWRDb250ZXh0KG1faGFuZGxlLCAmcmVn
aXN0ZXJzKTsKLSAgICByZXR1cm4gc2l6ZW9mKENPTlRFWFQpOwotfQotCi1UaHJlYWQmIFRocmVh
ZDo6aW5pdGlhbGl6ZUN1cnJlbnRUTFMoKQotewotICAgIC8vIE5vdCBhIFdURi1jcmVhdGVkIHRo
cmVhZCwgVGhyZWFkSWRlbnRpZmllciBpcyBub3QgZXN0YWJsaXNoZWQgeWV0LgotICAgIFJlZjxU
aHJlYWQ+IHRocmVhZCA9IGFkb3B0UmVmKCpuZXcgVGhyZWFkKCkpOwotCi0gICAgSEFORExFIGhh
bmRsZTsKLSAgICBib29sIGlzU3VjY2Vzc2Z1bCA9IER1cGxpY2F0ZUhhbmRsZShHZXRDdXJyZW50
UHJvY2VzcygpLCBHZXRDdXJyZW50VGhyZWFkKCksIEdldEN1cnJlbnRQcm9jZXNzKCksICZoYW5k
bGUsIDAsIEZBTFNFLCBEVVBMSUNBVEVfU0FNRV9BQ0NFU1MpOwotICAgIFJFTEVBU0VfQVNTRVJU
KGlzU3VjY2Vzc2Z1bCk7Ci0KLSAgICB0aHJlYWQtPmVzdGFibGlzaFBsYXRmb3JtU3BlY2lmaWNI
YW5kbGUoaGFuZGxlLCBjdXJyZW50SUQoKSk7Ci0gICAgdGhyZWFkLT5pbml0aWFsaXplSW5UaHJl
YWQoKTsKLSAgICBpbml0aWFsaXplQ3VycmVudFRocmVhZEV2ZW5JZk5vbldURkNyZWF0ZWQoKTsK
LQotICAgIHJldHVybiBpbml0aWFsaXplVExTKFdURk1vdmUodGhyZWFkKSk7Ci19Ci0KLVRocmVh
ZElkZW50aWZpZXIgVGhyZWFkOjpjdXJyZW50SUQoKQotewotICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxUaHJlYWRJZGVudGlmaWVyPihHZXRDdXJyZW50VGhyZWFkSWQoKSk7Ci19Ci0KLXZvaWQgVGhy
ZWFkOjplc3RhYmxpc2hQbGF0Zm9ybVNwZWNpZmljSGFuZGxlKEhBTkRMRSBoYW5kbGUsIFRocmVh
ZElkZW50aWZpZXIgdGhyZWFkSUQpCi17Ci0gICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX211
dGV4KTsKLSAgICBtX2hhbmRsZSA9IGhhbmRsZTsKLSAgICBtX2lkID0gdGhyZWFkSUQ7Ci19Ci0K
LSNkZWZpbmUgSW52YWxpZFRocmVhZCByZWludGVycHJldF9jYXN0PFRocmVhZCo+KHN0YXRpY19j
YXN0PHVpbnRwdHJfdD4oMHhiYmFkYmVlZikpCi0KLXN0YXRpYyBXb3JkTG9jayB0aHJlYWRNYXBN
dXRleDsKLQotc3RhdGljIEhhc2hNYXA8VGhyZWFkSWRlbnRpZmllciwgVGhyZWFkKj4mIHRocmVh
ZE1hcCgpCi17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hNYXA8VGhyZWFkSWRlbnRp
ZmllciwgVGhyZWFkKj4+IG1hcDsKLSAgICByZXR1cm4gbWFwLmdldCgpOwotfQotCi12b2lkIFRo
cmVhZDo6aW5pdGlhbGl6ZVRMU0tleSgpCi17Ci0gICAgdGhyZWFkTWFwKCk7Ci0gICAgdGhyZWFk
U3BlY2lmaWNLZXlDcmVhdGUoJnNfa2V5LCBkZXN0cnVjdFRMUyk7Ci19Ci0KLVRocmVhZCogVGhy
ZWFkOjpjdXJyZW50RHlpbmcoKQotewotICAgIEFTU0VSVChzX2tleSAhPSBJbnZhbGlkVGhyZWFk
U3BlY2lmaWNLZXkpOwotICAgIC8vIEFmdGVyIEZMUyBpcyBkZXN0cm95ZWQsIHRoaXMgbWFwIG9m
ZmVycyB0aGUgdmFsdWUgdW50aWwgdGhlIHNlY29uZCB0aHJlYWQgZXhpdCBjYWxsYmFjayBpcyBj
YWxsZWQuCi0gICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayh0aHJlYWRNYXBNdXRleCk7Ci0gICAg
cmV0dXJuIHRocmVhZE1hcCgpLmdldChjdXJyZW50SUQoKSk7Ci19Ci0KLS8vIEZJWE1FOiBSZW1v
dmUgdGhpcyB3b3JrYXJvdW5kIGNvZGUgb25jZSA8cmRhcjovL3Byb2JsZW0vMzE3OTMyMTM+IGlz
IGZpeGVkLgotUmVmUHRyPFRocmVhZD4gVGhyZWFkOjpnZXQoVGhyZWFkSWRlbnRpZmllciBpZCkK
LXsKLSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKHRocmVhZE1hcE11dGV4KTsKLSAgICBUaHJl
YWQqIHRocmVhZCA9IHRocmVhZE1hcCgpLmdldChpZCk7Ci0gICAgaWYgKHRocmVhZCkKLSAgICAg
ICAgcmV0dXJuIHRocmVhZDsKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotVGhyZWFkJiBUaHJl
YWQ6OmluaXRpYWxpemVUTFMoUmVmPFRocmVhZD4mJiB0aHJlYWQpCi17Ci0gICAgQVNTRVJUKHNf
a2V5ICE9IEludmFsaWRUaHJlYWRTcGVjaWZpY0tleSk7Ci0gICAgLy8gRklYTUU6IFJlbW92ZSB0
aGlzIHdvcmthcm91bmQgY29kZSBvbmNlIDxyZGFyOi8vcHJvYmxlbS8zMTc5MzIxMz4gaXMgZml4
ZWQuCi0gICAgYXV0byBpZCA9IHRocmVhZC0+aWQoKTsKLSAgICAvLyBXZSBsZWFrIHRoZSByZWYg
dG8ga2VlcCB0aGUgVGhyZWFkIGFsaXZlIHdoaWxlIGl0IGlzIGhlbGQgaW4gVExTLiBkZXN0cnVj
dFRMUyB3aWxsIGRlcmVmIGl0IGxhdGVyIGF0IHRocmVhZCBkZXN0cnVjdGlvbiB0aW1lLgotICAg
IGF1dG8mIHRocmVhZEluVExTID0gdGhyZWFkLmxlYWtSZWYoKTsKLSAgICB0aHJlYWRTcGVjaWZp
Y1NldChzX2tleSwgJnRocmVhZEluVExTKTsKLSAgICB7Ci0gICAgICAgIGF1dG8gbG9ja2VyID0g
aG9sZExvY2sodGhyZWFkTWFwTXV0ZXgpOwotICAgICAgICB0aHJlYWRNYXAoKS5hZGQoaWQsICZ0
aHJlYWRJblRMUyk7Ci0gICAgfQotICAgIHJldHVybiB0aHJlYWRJblRMUzsKLX0KLQotdm9pZCBU
aHJlYWQ6OmRlc3RydWN0VExTKHZvaWQqIGRhdGEpCi17Ci0gICAgaWYgKGRhdGEgPT0gSW52YWxp
ZFRocmVhZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgVGhyZWFkKiB0aHJlYWQgPSBzdGF0aWNf
Y2FzdDxUaHJlYWQqPihkYXRhKTsKLSAgICBBU1NFUlQodGhyZWFkKTsKLQotICAgIC8vIERlbGF5
IHRoZSBkZWFsbG9jYXRpb24gb2YgVGhyZWFkIG1vcmUuCi0gICAgLy8gSXQgZGVmZXJzIFRocmVh
ZCBkZWFsbG9jYXRpb24gYWZ0ZXIgdGhlIG90aGVyIFRocmVhZFNwZWNpZmljIHZhbHVlcyBhcmUg
ZGVhbGxvY2F0ZWQuCi0gICAgc3RhdGljIHRocmVhZF9sb2NhbCBjbGFzcyBUaHJlYWRFeGl0Q2Fs
bGJhY2sgewotICAgIHB1YmxpYzoKLSAgICAgICAgVGhyZWFkRXhpdENhbGxiYWNrKFRocmVhZCog
dGhyZWFkKQotICAgICAgICAgICAgOiBtX3RocmVhZCh0aHJlYWQpCi0gICAgICAgIHsKLSAgICAg
ICAgfQotCi0gICAgICAgIH5UaHJlYWRFeGl0Q2FsbGJhY2soKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBUaHJlYWQ6OmRlc3RydWN0VExTKG1fdGhyZWFkKTsKLSAgICAgICAgfQotCi0gICAgcHJp
dmF0ZToKLSAgICAgICAgVGhyZWFkKiBtX3RocmVhZDsKLSAgICB9IGNhbGxiYWNrKHRocmVhZCk7
Ci0KLSAgICBpZiAodGhyZWFkLT5tX2lzRGVzdHJveWVkT25jZSkgewotICAgICAgICB7Ci0gICAg
ICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKHRocmVhZE1hcE11dGV4KTsKLSAgICAgICAg
ICAgIEFTU0VSVCh0aHJlYWRNYXAoKS5jb250YWlucyh0aHJlYWQtPmlkKCkpKTsKLSAgICAgICAg
ICAgIHRocmVhZE1hcCgpLnJlbW92ZSh0aHJlYWQtPmlkKCkpOwotICAgICAgICB9Ci0gICAgICAg
IHRocmVhZC0+ZGlkRXhpdCgpOwotICAgICAgICB0aHJlYWQtPmRlcmVmKCk7Ci0KLSAgICAgICAg
Ly8gRmlsbCB0aGUgRkxTIHdpdGggdGhlIG5vbi1udWxscHRyIHZhbHVlLiBXaGlsZSBGTFMgZGVz
dHJ1Y3RvciB3b24ndCBiZSBjYWxsZWQgZm9yIHRoYXQsCi0gICAgICAgIC8vIG5vbi1udWxscHRy
IHZhbHVlIHRlbGxzIHVzIHRoYXQgd2UgYWxyZWFkeSBkZXN0cnVjdGVkIFRocmVhZC4gVGhpcyBh
bGxvd3MgdXMgdG8KLSAgICAgICAgLy8gZGV0ZWN0IGluY29ycmVjdCB1c2Ugb2YgVGhyZWFkOjpj
dXJyZW50KCkgYWZ0ZXIgdGhpcyBwb2ludCBiZWNhdXNlIGl0IHdpbGwgY3Jhc2guCi0gICAgICAg
IHRocmVhZFNwZWNpZmljU2V0KHNfa2V5LCBJbnZhbGlkVGhyZWFkKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLSAgICB0aHJlYWRTcGVjaWZpY1NldChzX2tleSwgSW52YWxpZFRocmVhZCk7Ci0g
ICAgdGhyZWFkLT5tX2lzRGVzdHJveWVkT25jZSA9IHRydWU7Ci19Ci0KLU11dGV4Ojp+TXV0ZXgo
KQotewotfQotCi12b2lkIE11dGV4Ojpsb2NrKCkKLXsKLSAgICBBY3F1aXJlU1JXTG9ja0V4Y2x1
c2l2ZSgmbV9tdXRleCk7Ci19Ci0KLWJvb2wgTXV0ZXg6OnRyeUxvY2soKQotewotICAgIHJldHVy
biBUcnlBY3F1aXJlU1JXTG9ja0V4Y2x1c2l2ZSgmbV9tdXRleCk7Ci19Ci0KLXZvaWQgTXV0ZXg6
OnVubG9jaygpCi17Ci0gICAgUmVsZWFzZVNSV0xvY2tFeGNsdXNpdmUoJm1fbXV0ZXgpOwotfQot
Ci0vLyBSZXR1cm5zIGFuIGludGVydmFsIGluIG1pbGxpc2Vjb25kcyBzdWl0YWJsZSBmb3IgcGFz
c2luZyB0byBvbmUgb2YgdGhlIFdpbjMyIHdhaXQgZnVuY3Rpb25zIChlLmcuLCA6OldhaXRGb3JT
aW5nbGVPYmplY3QpLgotc3RhdGljIERXT1JEIGFic29sdXRlVGltZVRvV2FpdFRpbWVvdXRJbnRl
cnZhbChXYWxsVGltZSBhYnNvbHV0ZVRpbWUpCi17Ci0gICAgV2FsbFRpbWUgY3VycmVudFRpbWUg
PSBXYWxsVGltZTo6bm93KCk7Ci0KLSAgICAvLyBUaW1lIGlzIGluIHRoZSBwYXN0IC0gcmV0dXJu
IGltbWVkaWF0ZWx5LgotICAgIGlmIChhYnNvbHV0ZVRpbWUgPCBjdXJyZW50VGltZSkKLSAgICAg
ICAgcmV0dXJuIDA7Ci0KLSAgICAvLyBUaW1lIGlzIHRvbyBmYXIgaW4gdGhlIGZ1dHVyZSAoYW5k
IHdvdWxkIG92ZXJmbG93IHVuc2lnbmVkIGxvbmcpIC0gd2FpdCBmb3JldmVyLgotICAgIGlmICgo
YWJzb2x1dGVUaW1lIC0gY3VycmVudFRpbWUpID4gU2Vjb25kczo6ZnJvbU1pbGxpc2Vjb25kcyhJ
TlRfTUFYKSkKLSAgICAgICAgcmV0dXJuIElORklOSVRFOwotCi0gICAgcmV0dXJuIHN0YXRpY19j
YXN0PERXT1JEPigoYWJzb2x1dGVUaW1lIC0gY3VycmVudFRpbWUpLm1pbGxpc2Vjb25kcygpKTsK
LX0KLQotVGhyZWFkQ29uZGl0aW9uOjp+VGhyZWFkQ29uZGl0aW9uKCkKLXsKLX0KLQotdm9pZCBU
aHJlYWRDb25kaXRpb246OndhaXQoTXV0ZXgmIG11dGV4KQotewotICAgIFNsZWVwQ29uZGl0aW9u
VmFyaWFibGVTUlcoJm1fY29uZGl0aW9uLCAmbXV0ZXguaW1wbCgpLCBJTkZJTklURSwgMCk7Ci19
Ci0KLWJvb2wgVGhyZWFkQ29uZGl0aW9uOjp0aW1lZFdhaXQoTXV0ZXgmIG11dGV4LCBXYWxsVGlt
ZSBhYnNvbHV0ZVRpbWUpCi17Ci0gICAgLy8gaHR0cHM6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4t
dXMvbGlicmFyeS93aW5kb3dzL2Rlc2t0b3AvbXM2ODYzMDQodj12cy44NSkuYXNweAotICAgIERX
T1JEIGludGVydmFsID0gYWJzb2x1dGVUaW1lVG9XYWl0VGltZW91dEludGVydmFsKGFic29sdXRl
VGltZSk7Ci0gICAgaWYgKCFpbnRlcnZhbCkgewotICAgICAgICAvLyBDb25zaWRlciB0aGUgd2Fp
dCB0byBoYXZlIHRpbWVkIG91dCwgZXZlbiBpZiBvdXIgY29uZGl0aW9uIGhhcyBhbHJlYWR5IGJl
ZW4gc2lnbmFsZWQsIHRvCi0gICAgICAgIC8vIG1hdGNoIHRoZSBwdGhyZWFkcyBpbXBsZW1lbnRh
dGlvbi4KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmIChTbGVlcENvbmRp
dGlvblZhcmlhYmxlU1JXKCZtX2NvbmRpdGlvbiwgJm11dGV4LmltcGwoKSwgaW50ZXJ2YWwsIDAp
KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBBU1NFUlQoR2V0TGFzdEVycm9yKCkgPT0gRVJS
T1JfVElNRU9VVCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFRocmVhZENvbmRpdGlv
bjo6c2lnbmFsKCkKLXsKLSAgICBXYWtlQ29uZGl0aW9uVmFyaWFibGUoJm1fY29uZGl0aW9uKTsK
LX0KLQotdm9pZCBUaHJlYWRDb25kaXRpb246OmJyb2FkY2FzdCgpCi17Ci0gICAgV2FrZUFsbENv
bmRpdGlvblZhcmlhYmxlKCZtX2NvbmRpdGlvbik7Ci19Ci0KLS8vIFJlbW92ZSB0aGlzIHdvcmth
cm91bmQgY29kZSB3aGVuIDxyZGFyOi8vcHJvYmxlbS8zMTc5MzIxMz4gaXMgZml4ZWQuCi1UaHJl
YWRJZGVudGlmaWVyIGNyZWF0ZVRocmVhZChUaHJlYWRGdW5jdGlvbiBmdW5jdGlvbiwgdm9pZCog
ZGF0YSwgY29uc3QgY2hhciogdGhyZWFkTmFtZSkKLXsKLSAgICByZXR1cm4gVGhyZWFkOjpjcmVh
dGUodGhyZWFkTmFtZSwgW2Z1bmN0aW9uLCBkYXRhXSB7Ci0gICAgICAgIGZ1bmN0aW9uKGRhdGEp
OwotICAgIH0pLT5pZCgpOwotfQotCi1pbnQgd2FpdEZvclRocmVhZENvbXBsZXRpb24oVGhyZWFk
SWRlbnRpZmllciB0aHJlYWRJRCkKLXsKLSAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIGltcGxlbWVu
dGVkIGJhc2VkIG9uIHRoZSBvbGQgVGhyZWFkaW5nIGltcGxlbWVudGF0aW9uLgotICAgIC8vIEl0
IHJlbWFpbnMgb25seSBkdWUgdG8gdGhlIHN1cHBvcnQgbGlicmFyeSB1c2luZyBvbGQgVGhyZWFk
aW5nIEFQSXMgYW5kCi0gICAgLy8gaXQgc2hvdWxkIG5vdCBiZSB1c2VkIGluIG5ldyBjb2RlLgot
ICAgIEFTU0VSVCh0aHJlYWRJRCk7Ci0KLSAgICBSZWZQdHI8VGhyZWFkPiB0aHJlYWQgPSBUaHJl
YWQ6OmdldCh0aHJlYWRJRCk7Ci0gICAgaWYgKCF0aHJlYWQpIHsKLSAgICAgICAgTE9HX0VSUk9S
KCJUaHJlYWRJZGVudGlmaWVyICV1IGRpZCBub3QgY29ycmVzcG9uZCB0byBhbiBhY3RpdmUgdGhy
ZWFkIHdoZW4gdHJ5aW5nIHRvIHF1aXQiLCB0aHJlYWRJRCk7Ci0gICAgICAgIHJldHVybiBXQUlU
X0ZBSUxFRDsKLSAgICB9Ci0gICAgcmV0dXJuIHRocmVhZC0+d2FpdEZvckNvbXBsZXRpb24oKTsK
LQotfQotCi12b2lkIFRocmVhZDo6eWllbGQoKQotewotICAgIFN3aXRjaFRvVGhyZWFkKCk7Ci19
Ci0KLX0gLy8gbmFtZXNwYWNlIFdURgotCi0jZW5kaWYgLy8gT1MoV0lORE9XUykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvd3RmL2NmL1J1bkxvb3BUaW1lckNGLmNwcCBiL1NvdXJjZS9XVEYvd3Rm
L2NmL1J1bkxvb3BUaW1lckNGLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43NDE4ZmRkM2VhMjdkYmY4OTQwNTAy
ZTkwZDkxNDNiNTI4MzUyYTg1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYvY2Yv
UnVuTG9vcFRpbWVyQ0YuY3BwCkBAIC0wLDAgKzEsOTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDksIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9y
IHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisj
aWYgUExBVEZPUk0oQ09DT0EpICYmIEhBVkUoUlVOTE9PUF9USU1FUikKKworI2luY2x1ZGUgPHd0
Zi9SdW5Mb29wVGltZXIuaD4KKworI2luY2x1ZGUgPHd0Zi9BdXRvZHJhaW5lZFBvb2wuaD4KKwor
bmFtZXNwYWNlIFdURiB7CisKK1J1bkxvb3BUaW1lckJhc2U6On5SdW5Mb29wVGltZXJCYXNlKCkK
K3sKKyAgICBzdG9wKCk7Cit9CisKK3N0YXRpYyB2b2lkIHRpbWVyRmlyZWQoQ0ZSdW5Mb29wVGlt
ZXJSZWYsIHZvaWQqIGNvbnRleHQpCit7CisgICAgLy8gQ0ZSdW5Mb29wVGltZXIgZG9lcyBub3Qg
Y3JlYXRlIGFuIE5TQXV0b3JlbGVhc2VQb29sLCBsaWtlIE5TVGltZXIgZG9lcy4gVGhpcyBjYW4g
bGVhZCB0bworICAgIC8vIGF1dG9yZWxlYXNlZCBvYmplY3RzIGJlaW5nIHB1c2hlZCBpbnRvIE5T
QXV0b3JlbGVhc2VQb29scyB1bmRlcm5lYXRoIHRoZSBydW4gbG9vcCwgd2hpY2gKKyAgICAvLyBh
cmUgdmVyeSBpbmZyZXF1ZW50bHkgZHJhaW5lZC4gQ3JlYXRlIGEgbmV3IGF1dG9yZWxlYXNlIHBv
b2wgaGVyZSB0byBnaXZlIGF1dG9yZWxlYXNlZCBvYmplY3RzCisgICAgLy8gYSBwbGFjZSB0byBj
b2xsZWN0LgorICAgIEF1dG9kcmFpbmVkUG9vbCBwb29sOworICAgIFJ1bkxvb3BUaW1lckJhc2Uq
IHRpbWVyID0gc3RhdGljX2Nhc3Q8UnVuTG9vcFRpbWVyQmFzZSo+KGNvbnRleHQpOworICAgIHRp
bWVyLT5maXJlZCgpOworfQorCit2b2lkIFJ1bkxvb3BUaW1lckJhc2U6OnN0YXJ0KFNlY29uZHMg
bmV4dEZpcmVJbnRlcnZhbCwgU2Vjb25kcyByZXBlYXRJbnRlcnZhbCkKK3sKKyAgICBpZiAobV90
aW1lcikKKyAgICAgICAgQ0ZSdW5Mb29wVGltZXJJbnZhbGlkYXRlKG1fdGltZXIuZ2V0KCkpOwor
ICAgIENGUnVuTG9vcFRpbWVyQ29udGV4dCBjb250ZXh0ID0geyAwLCB0aGlzLCAwLCAwLCAwIH07
CisgICAgbV90aW1lciA9IGFkb3B0Q0YoQ0ZSdW5Mb29wVGltZXJDcmVhdGUoMCwgQ0ZBYnNvbHV0
ZVRpbWVHZXRDdXJyZW50KCkgKyBuZXh0RmlyZUludGVydmFsLnNlY29uZHMoKSwgcmVwZWF0SW50
ZXJ2YWwuc2Vjb25kcygpLCAwLCAwLCB0aW1lckZpcmVkLCAmY29udGV4dCkpOworfQorCit2b2lk
IFJ1bkxvb3BUaW1lckJhc2U6OnNjaGVkdWxlKGNvbnN0IFNjaGVkdWxlUGFpciogc2NoZWR1bGVQ
YWlyKQoreworICAgIEFTU0VSVF9BUkcoc2NoZWR1bGVQYWlyLCBzY2hlZHVsZVBhaXIpOworICAg
IEFTU0VSVF9XSVRIX01FU1NBR0UobV90aW1lciwgIlRpbWVyIG11c3QgaGF2ZSBvbmUgb2YgdGhl
IHN0YXJ0IGZ1bmN0aW9ucyBjYWxsZWQgYmVmb3JlIGNhbGxpbmcgc2NoZWR1bGUoKS4iKTsKKyAg
ICBDRlJ1bkxvb3BBZGRUaW1lcihzY2hlZHVsZVBhaXItPnJ1bkxvb3AoKSwgbV90aW1lci5nZXQo
KSwgc2NoZWR1bGVQYWlyLT5tb2RlKCkpOworfQorCit2b2lkIFJ1bkxvb3BUaW1lckJhc2U6OnNj
aGVkdWxlKGNvbnN0IFNjaGVkdWxlUGFpckhhc2hTZXQmIHNjaGVkdWxlUGFpcnMpCit7CisgICAg
U2NoZWR1bGVQYWlySGFzaFNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gc2NoZWR1bGVQYWlycy5l
bmQoKTsKKyAgICBmb3IgKFNjaGVkdWxlUGFpckhhc2hTZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
c2NoZWR1bGVQYWlycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIHNjaGVkdWxl
KCgqaXQpLmdldCgpKTsKK30KKwordm9pZCBSdW5Mb29wVGltZXJCYXNlOjpzdG9wKCkKK3sKKyAg
ICBpZiAoIW1fdGltZXIpCisgICAgICAgIHJldHVybjsKKyAgICBDRlJ1bkxvb3BUaW1lckludmFs
aWRhdGUobV90aW1lci5nZXQoKSk7CisgICAgbV90aW1lciA9IDA7Cit9CisKK2Jvb2wgUnVuTG9v
cFRpbWVyQmFzZTo6aXNBY3RpdmUoKSBjb25zdAoreworICAgIHJldHVybiBtX3RpbWVyICYmIENG
UnVuTG9vcFRpbWVySXNWYWxpZChtX3RpbWVyLmdldCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V1RGCisKKyNlbmRpZiAvLyBQTEFURk9STShDT0NPQSkgJiYgSEFWRShSVU5MT09QX1RJTUVSKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvY2YvU2NoZWR1bGVQYWlyQ0YuY3BwIGIvU291cmNl
L1dURi93dGYvY2YvU2NoZWR1bGVQYWlyQ0YuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ2ZjY1YzMzZjAwYjdk
YTE1MmY4MGU1MjY4ZjA0NzMwMTM1Y2NhMzUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RG
L3d0Zi9jZi9TY2hlZHVsZVBhaXJDRi5jcHAKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwOCwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBw
bGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSA8d3RmL1NjaGVkdWxlUGFpci5oPgorCituYW1lc3BhY2UgV1RGIHsKKwor
Ym9vbCBTY2hlZHVsZVBhaXI6Om9wZXJhdG9yPT0oY29uc3QgU2NoZWR1bGVQYWlyJiBvdGhlcikg
Y29uc3QKK3sKKyAgICBpZiAocnVuTG9vcCgpICE9IG90aGVyLnJ1bkxvb3AoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIENGU3RyaW5nUmVmIHRoaXNNb2RlID0gbW9kZSgpOworICAgIENG
U3RyaW5nUmVmIG90aGVyTW9kZSA9IG90aGVyLm1vZGUoKTsKKyAgICBpZiAoIXRoaXNNb2RlIHx8
ICFvdGhlck1vZGUpCisgICAgICAgIHJldHVybiB0aGlzTW9kZSA9PSBvdGhlck1vZGU7CisgICAg
cmV0dXJuIENGRXF1YWwodGhpc01vZGUsIG90aGVyTW9kZSk7Cit9CisKK30gLy8gbmFtZXNwYWNl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9tYWMvU2NoZWR1bGVQYWlyTWFjLm1tIGIvU291
cmNlL1dURi93dGYvbWFjL1NjaGVkdWxlUGFpck1hYy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42MjI2MWFkM2Y5
ZDZhNjYxMjAzYmRiMTQxNmMzMThlYjJlNGVlNzdhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dURi93dGYvbWFjL1NjaGVkdWxlUGFpck1hYy5tbQpAQCAtMCwwICsxLDQyIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA4LCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4g
KCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJv
bSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlIDx3dGYvU2NoZWR1bGVQYWlyLmg+CisKK25hbWVzcGFjZSBXVEYg
eworCitTY2hlZHVsZVBhaXI6OlNjaGVkdWxlUGFpcihOU1J1bkxvb3AqIHJ1bkxvb3AsIENGU3Ry
aW5nUmVmIG1vZGUpCisgICAgOiBtX25zUnVuTG9vcChydW5Mb29wKQorICAgICwgbV9ydW5Mb29w
KFtydW5Mb29wIGdldENGUnVuTG9vcF0pCit7CisgICAgaWYgKG1vZGUpCisgICAgICAgIG1fbW9k
ZSA9IGFkb3B0Q0YoQ0ZTdHJpbmdDcmVhdGVDb3B5KDAsIG1vZGUpKTsKK30KKworfSAvLyBuYW1l
c3BhY2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3Bvc2l4L09TQWxsb2NhdG9yUE9TSVgu
Y3BwIGIvU291cmNlL1dURi93dGYvcG9zaXgvT1NBbGxvY2F0b3JQT1NJWC5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uZTAxMWQ2MTkxYmZjODQ4MzUxMmNmNjc2NTkzMzI0MTY1Yzc3ZDY1NgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XVEYvd3RmL3Bvc2l4L09TQWxsb2NhdG9yUE9TSVguY3BwCkBAIC0wLDAg
KzEsMTgyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHd0
Zi9PU0FsbG9jYXRvci5oPgorCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzeXMvbW1h
bi5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL1BhZ2VBbGxv
Y2F0aW9uLmg+CisKK25hbWVzcGFjZSBXVEYgeworCit2b2lkKiBPU0FsbG9jYXRvcjo6cmVzZXJ2
ZVVuY29tbWl0dGVkKHNpemVfdCBieXRlcywgVXNhZ2UgdXNhZ2UsIGJvb2wgd3JpdGFibGUsIGJv
b2wgZXhlY3V0YWJsZSwgYm9vbCBpbmNsdWRlc0d1YXJkUGFnZXMpCit7CisjaWYgT1MoTElOVVgp
CisgICAgVU5VU0VEX1BBUkFNKHVzYWdlKTsKKyAgICBVTlVTRURfUEFSQU0od3JpdGFibGUpOwor
ICAgIFVOVVNFRF9QQVJBTShleGVjdXRhYmxlKTsKKyAgICBVTlVTRURfUEFSQU0oaW5jbHVkZXNH
dWFyZFBhZ2VzKTsKKworICAgIHZvaWQqIHJlc3VsdCA9IG1tYXAoMCwgYnl0ZXMsIFBST1RfTk9O
RSwgTUFQX05PUkVTRVJWRSB8IE1BUF9QUklWQVRFIHwgTUFQX0FOT04sIC0xLCAwKTsKKyAgICBp
ZiAocmVzdWx0ID09IE1BUF9GQUlMRUQpCisgICAgICAgIENSQVNIKCk7CisgICAgbWFkdmlzZShy
ZXN1bHQsIGJ5dGVzLCBNQURWX0RPTlRORUVEKTsKKyNlbHNlCisgICAgdm9pZCogcmVzdWx0ID0g
cmVzZXJ2ZUFuZENvbW1pdChieXRlcywgdXNhZ2UsIHdyaXRhYmxlLCBleGVjdXRhYmxlLCBpbmNs
dWRlc0d1YXJkUGFnZXMpOworI2lmIEhBVkUoTUFEVl9GUkVFX1JFVVNFKQorICAgIGlmIChyZXN1
bHQpIHsKKyAgICAgICAgLy8gVG8gc3VwcG9ydCB0aGUgInJlc2VydmUgdGhlbiBjb21taXQiIG1v
ZGVsLCB3ZSBoYXZlIHRvIGluaXRpYWxseSBkZWNvbW1pdC4KKyAgICAgICAgd2hpbGUgKG1hZHZp
c2UocmVzdWx0LCBieXRlcywgTUFEVl9GUkVFX1JFVVNBQkxFKSA9PSAtMSAmJiBlcnJubyA9PSBF
QUdBSU4pIHsgfQorICAgIH0KKyNlbmRpZgorCisjZW5kaWYKKworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK3ZvaWQqIE9TQWxsb2NhdG9yOjpyZXNlcnZlQW5kQ29tbWl0KHNpemVfdCBieXRlcywg
VXNhZ2UgdXNhZ2UsIGJvb2wgd3JpdGFibGUsIGJvb2wgZXhlY3V0YWJsZSwgYm9vbCBpbmNsdWRl
c0d1YXJkUGFnZXMpCit7CisgICAgLy8gQWxsIFBPU0lYIHJlc2VydmF0aW9ucyBzdGFydCBvdXQg
bG9naWNhbGx5IGNvbW1pdHRlZC4KKyAgICBpbnQgcHJvdGVjdGlvbiA9IFBST1RfUkVBRDsKKyAg
ICBpZiAod3JpdGFibGUpCisgICAgICAgIHByb3RlY3Rpb24gfD0gUFJPVF9XUklURTsKKyAgICBp
ZiAoZXhlY3V0YWJsZSkKKyAgICAgICAgcHJvdGVjdGlvbiB8PSBQUk9UX0VYRUM7CisKKyAgICBp
bnQgZmxhZ3MgPSBNQVBfUFJJVkFURSB8IE1BUF9BTk9OOworI2lmIE9TKERBUldJTikKKyAgICBp
ZiAoZXhlY3V0YWJsZSkKKyAgICAgICAgZmxhZ3MgfD0gTUFQX0pJVDsKKyNlbmRpZgorCisjaWYg
T1MoREFSV0lOKQorICAgIGludCBmZCA9IHVzYWdlOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0o
dXNhZ2UpOworICAgIGludCBmZCA9IC0xOworI2VuZGlmCisKKyAgICB2b2lkKiByZXN1bHQgPSAw
OworI2lmIChPUyhEQVJXSU4pICYmIENQVShYODZfNjQpKQorICAgIGlmIChleGVjdXRhYmxlKSB7
CisgICAgICAgIEFTU0VSVChpbmNsdWRlc0d1YXJkUGFnZXMpOworICAgICAgICAvLyBDb29rIHVw
IGFuIGFkZHJlc3MgdG8gYWxsb2NhdGUgYXQsIHVzaW5nIHRoZSBmb2xsb3dpbmcgcmVjaXBlOgor
ICAgICAgICAvLyAgIDE3IGJpdHMgb2YgemVybywgc3RheSBpbiB1c2Vyc3BhY2Uga2lkcy4KKyAg
ICAgICAgLy8gICAyNiBiaXRzIG9mIHJhbmRvbW5lc3MgZm9yIEFTTFIuCisgICAgICAgIC8vICAg
MjEgYml0cyBvZiB6ZXJvLCBhdCBsZWFzdCBzdGF5IGFsaWduZWQgd2l0aGluIG9uZSBsZXZlbCBv
ZiB0aGUgcGFnZXRhYmxlcy4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gQnV0ISAtIGFzIGEgdGVt
cG9yYXJ5IHdvcmthcm91bmQgZm9yIHNvbWUgcGx1Z2luIHByb2JsZW1zIChyZGFyOi8vcHJvYmxl
bS82ODEyODU0KSwKKyAgICAgICAgLy8gZm9yIG5vdyBpbnN0ZWFkIG9mIDJeMjYgYml0cyBvZiBB
U0xSIGxldHMgc3RpY2sgd2l0aCAyNSBiaXRzIG9mIHJhbmRvbWl6YXRpb24gcGx1cworICAgICAg
ICAvLyAyXjI0LCB3aGljaCBzaG91bGQgcHV0IHVwIHNvbWV3aGVyZSBpbiB0aGUgbWlkZGxlIG9m
IHVzZXJzcGFjZSAoaW4gdGhlIGFkZHJlc3MgcmFuZ2UKKyAgICAgICAgLy8gMHgyMDAwMDAwMDAw
MDAgLi4gMHg1ZmZmZmZmZmZmZmYpLgorICAgICAgICBpbnRwdHJfdCByYW5kb21Mb2NhdGlvbiA9
IDA7CisgICAgICAgIHJhbmRvbUxvY2F0aW9uID0gYXJjNHJhbmRvbSgpICYgKCgxIDw8IDI1KSAt
IDEpOworICAgICAgICByYW5kb21Mb2NhdGlvbiArPSAoMSA8PCAyNCk7CisgICAgICAgIHJhbmRv
bUxvY2F0aW9uIDw8PSAyMTsKKyAgICAgICAgcmVzdWx0ID0gcmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4ocmFuZG9tTG9jYXRpb24pOworICAgIH0KKyNlbmRpZgorCisgICAgcmVzdWx0ID0gbW1hcChy
ZXN1bHQsIGJ5dGVzLCBwcm90ZWN0aW9uLCBmbGFncywgZmQsIDApOworICAgIGlmIChyZXN1bHQg
PT0gTUFQX0ZBSUxFRCkgeworICAgICAgICBpZiAoZXhlY3V0YWJsZSkKKyAgICAgICAgICAgIHJl
c3VsdCA9IDA7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIENSQVNIKCk7CisgICAgfQorICAg
IGlmIChyZXN1bHQgJiYgaW5jbHVkZXNHdWFyZFBhZ2VzKSB7CisgICAgICAgIC8vIFdlIHVzZSBt
bWFwIHRvIHJlbWFwIHRoZSBndWFyZHBhZ2VzIHJhdGhlciB0aGFuIHVzaW5nIG1wcm90ZWN0IGFz
CisgICAgICAgIC8vIG1wcm90ZWN0IHJlc3VsdHMgaW4gbXVsdGlwbGUgcmVmZXJlbmNlcyB0byB0
aGUgY29kZSByZWdpb24uIFRoaXMKKyAgICAgICAgLy8gYnJlYWtzIHRoZSBtYWR2aXNlIGJhc2Vk
IG1lY2hhbmlzbSB3ZSB1c2UgdG8gcmV0dXJuIHBoeXNpY2FsIG1lbW9yeQorICAgICAgICAvLyB0
byB0aGUgT1MuCisgICAgICAgIG1tYXAocmVzdWx0LCBwYWdlU2l6ZSgpLCBQUk9UX05PTkUsIE1B
UF9GSVhFRCB8IE1BUF9QUklWQVRFIHwgTUFQX0FOT04sIGZkLCAwKTsKKyAgICAgICAgbW1hcChz
dGF0aWNfY2FzdDxjaGFyKj4ocmVzdWx0KSArIGJ5dGVzIC0gcGFnZVNpemUoKSwgcGFnZVNpemUo
KSwgUFJPVF9OT05FLCBNQVBfRklYRUQgfCBNQVBfUFJJVkFURSB8IE1BUF9BTk9OLCBmZCwgMCk7
CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgT1NBbGxvY2F0b3I6OmNvbW1p
dCh2b2lkKiBhZGRyZXNzLCBzaXplX3QgYnl0ZXMsIGJvb2wgd3JpdGFibGUsIGJvb2wgZXhlY3V0
YWJsZSkKK3sKKyNpZiBPUyhMSU5VWCkKKyAgICBpbnQgcHJvdGVjdGlvbiA9IFBST1RfUkVBRDsK
KyAgICBpZiAod3JpdGFibGUpCisgICAgICAgIHByb3RlY3Rpb24gfD0gUFJPVF9XUklURTsKKyAg
ICBpZiAoZXhlY3V0YWJsZSkKKyAgICAgICAgcHJvdGVjdGlvbiB8PSBQUk9UX0VYRUM7CisgICAg
aWYgKG1wcm90ZWN0KGFkZHJlc3MsIGJ5dGVzLCBwcm90ZWN0aW9uKSkKKyAgICAgICAgQ1JBU0go
KTsKKyAgICBtYWR2aXNlKGFkZHJlc3MsIGJ5dGVzLCBNQURWX1dJTExORUVEKTsKKyNlbGlmIEhB
VkUoTUFEVl9GUkVFX1JFVVNFKQorICAgIFVOVVNFRF9QQVJBTSh3cml0YWJsZSk7CisgICAgVU5V
U0VEX1BBUkFNKGV4ZWN1dGFibGUpOworICAgIHdoaWxlIChtYWR2aXNlKGFkZHJlc3MsIGJ5dGVz
LCBNQURWX0ZSRUVfUkVVU0UpID09IC0xICYmIGVycm5vID09IEVBR0FJTikgeyB9CisjZWxzZQor
ICAgIC8vIE5vbi1NQURWX0ZSRUVfUkVVU0UgcmVzZXJ2YXRpb25zIGF1dG9tYXRpY2FsbHkgY29t
bWl0IG9uIGRlbWFuZC4KKyAgICBVTlVTRURfUEFSQU0oYWRkcmVzcyk7CisgICAgVU5VU0VEX1BB
UkFNKGJ5dGVzKTsKKyAgICBVTlVTRURfUEFSQU0od3JpdGFibGUpOworICAgIFVOVVNFRF9QQVJB
TShleGVjdXRhYmxlKTsKKyNlbmRpZgorfQorCit2b2lkIE9TQWxsb2NhdG9yOjpkZWNvbW1pdCh2
b2lkKiBhZGRyZXNzLCBzaXplX3QgYnl0ZXMpCit7CisjaWYgT1MoTElOVVgpCisgICAgbWFkdmlz
ZShhZGRyZXNzLCBieXRlcywgTUFEVl9ET05UTkVFRCk7CisgICAgaWYgKG1wcm90ZWN0KGFkZHJl
c3MsIGJ5dGVzLCBQUk9UX05PTkUpKQorICAgICAgICBDUkFTSCgpOworI2VsaWYgSEFWRShNQURW
X0ZSRUVfUkVVU0UpCisgICAgd2hpbGUgKG1hZHZpc2UoYWRkcmVzcywgYnl0ZXMsIE1BRFZfRlJF
RV9SRVVTQUJMRSkgPT0gLTEgJiYgZXJybm8gPT0gRUFHQUlOKSB7IH0KKyNlbGlmIEhBVkUoTUFE
Vl9GUkVFKQorICAgIHdoaWxlIChtYWR2aXNlKGFkZHJlc3MsIGJ5dGVzLCBNQURWX0ZSRUUpID09
IC0xICYmIGVycm5vID09IEVBR0FJTikgeyB9CisjZWxpZiBIQVZFKE1BRFZfRE9OVE5FRUQpCisg
ICAgd2hpbGUgKG1hZHZpc2UoYWRkcmVzcywgYnl0ZXMsIE1BRFZfRE9OVE5FRUQpID09IC0xICYm
IGVycm5vID09IEVBR0FJTikgeyB9CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShhZGRyZXNzKTsK
KyAgICBVTlVTRURfUEFSQU0oYnl0ZXMpOworI2VuZGlmCit9CisKK3ZvaWQgT1NBbGxvY2F0b3I6
OmhpbnRNZW1vcnlOb3ROZWVkZWRTb29uKHZvaWQqIGFkZHJlc3MsIHNpemVfdCBieXRlcykKK3sK
KyNpZiBIQVZFKE1BRFZfRE9OVE5FRUQpCisgICAgd2hpbGUgKG1hZHZpc2UoYWRkcmVzcywgYnl0
ZXMsIE1BRFZfRE9OVE5FRUQpID09IC0xICYmIGVycm5vID09IEVBR0FJTikgeyB9CisjZWxzZQor
ICAgIFVOVVNFRF9QQVJBTShhZGRyZXNzKTsKKyAgICBVTlVTRURfUEFSQU0oYnl0ZXMpOworI2Vu
ZGlmCit9CisKK3ZvaWQgT1NBbGxvY2F0b3I6OnJlbGVhc2VEZWNvbW1pdHRlZCh2b2lkKiBhZGRy
ZXNzLCBzaXplX3QgYnl0ZXMpCit7CisgICAgaW50IHJlc3VsdCA9IG11bm1hcChhZGRyZXNzLCBi
eXRlcyk7CisgICAgaWYgKHJlc3VsdCA9PSAtMSkKKyAgICAgICAgQ1JBU0goKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi93aW4vQ09OVFJJQlVU
T1JTLnB0aHJlYWRzLXdpbjMyIGIvU291cmNlL1dURi93dGYvd2luL0NPTlRSSUJVVE9SUy5wdGhy
ZWFkcy13aW4zMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yNGZhYzAwNmMzMDgzZTJjZDczNzczZDQzOGEzNjE0N2Qw
OWY0ZTAyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYvd2luL0NPTlRSSUJVVE9S
Uy5wdGhyZWFkcy13aW4zMgpAQCAtMCwwICsxLDEzNyBAQAorVGhpcyBpcyBhIGNvcHkgb2YgQ09O
VFJJQlVUT1JTIGZpbGUgZm9yIHRoZSBQdGhyZWFkcy13aW4zMiBsaWJyYXJ5LCBkb3dubG9hZGVk
Citmcm9tIGh0dHA6Ly9zb3VyY2V3YXJlLm9yZy9jZ2ktYmluL2N2c3dlYi5jZ2kvfmNoZWNrb3V0
fi9wdGhyZWFkcy9DT05UUklCVVRPUlM/cmV2PTEuMzImY3Zzcm9vdD1wdGhyZWFkcy13aW4zMgor
CitJbmNsdWRlZCBoZXJlIHRvIGNvbXBsaW1lbnQgdGhlIFB0aHJlYWRzLXdpbjMyIGxpY2Vuc2Ug
aGVhZGVyIGluIFRocmVhZGluZ1dpbi5jcHAgZmlsZS4KK1dlYktpdCBpcyB1c2luZyBkZXJpdmVk
IHNvdXJjZXMgb2YgVGhyZWFkQ29uZGl0aW9uIGNvZGUgZnJvbSBQdGhyZWFkcy13aW4zMi4KKwor
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb250cmlidXRvcnMgKGluIGFwcHJveGltYXRlIG9y
ZGVyIG9mIGFwcGVhcmFuY2UpCisKK1tTZWUgYWxzbyB0aGUgQ2hhbmdlTG9nIGZpbGUgd2hlcmUg
aW5kaXZpZHVhbHMgYXJlCithdHRyaWJ1dGVkIGluIGxvZyBlbnRyaWVzLiBMaWtld2lzZSBpbiB0
aGUgRkFRIGZpbGUuXQorCitCZW4gRWxsaXN0b24JCWJqZSBhdCBjeWdudXMgZG90IGNvbQorCQkJ
CQlJbml0aWF0ZWQgdGhlIHByb2plY3Q7CisJCQkJCXNldHVwIHRoZSBwcm9qZWN0IGluZnJhc3Ry
dWN0dXJlIChDVlMsIHdlYiBwYWdlLCBldGMuKTsKKwkJCQkJZWFybHkgcHJvdG90eXBlIHJvdXRp
bmVzLgorUm9zcyBKb2huc29uCQlycGogYXQgY2FsbGlzdG8gZG90IGNhbmJlcnJhIGRvdCBlZHUg
ZG90IGF1CisJCQkJCWVhcmx5IHByb3RvdHlwZSByb3V0aW5lczsKKwkJCQkJb25nb2luZyBwcm9q
ZWN0IGNvb3JkaW5hdGlvbi9tYWludGVuYW5jZTsKKwkJCQkJaW1wbGVtZW50YXRpb24gb2Ygc3Bp
biBsb2NrcyBhbmQgYmFycmllcnM7CisJCQkJCXZhcmlvdXMgZW5oYW5jZW1lbnRzOworCQkJCQli
dWcgZml4ZXM7CisJCQkJCWRvY3VtZW50YXRpb247CisJCQkJCXRlc3RzdWl0ZS4KK1JvYmVydCBD
b2xxdWhvdW4JcmpjIGF0IHRydW1wIGRvdCBuZXQgZG90IGF1CisJCQkJCUVhcmx5IGJ1ZyBmaXhl
cy4KK0pvaG4gRS4gQm9zc29tCQlKb2huIGRvdCBCb3Nzb20gYXQgY29nbm9zIGRvdCBjb20KKwkJ
CQkJQ29udHJpYnV0ZWQgc3Vic3RhbnRpYWwgb3JpZ2luYWwgd29ya2luZyBpbXBsZW1lbnRhdGlv
bjsKKwkJCQkJYnVnIGZpeGVzOworCQkJCQlvbmdvaW5nIGd1aWRhbmNlIGFuZCBzdGFuZGFyZHMg
aW50ZXJwcmV0YXRpb24uCitBbmRlcnMgTm9ybGFuZGVyCWFub3JsYW5kIGF0IGhlbTIgZG90IHBh
c3NhZ2VuIGRvdCBzZQorCQkJCQlFYXJseSBlbmhhbmNlbWVudHMgYW5kIHJ1bnRpbWUgY2hlY2tp
bmcgZm9yIHN1cHBvcnRlZAorCQkJCQlXaW4zMiByb3V0aW5lcy4KK1RvciBMaWxscXZpc3QJCXRt
bCBhdCBpa2kgZG90IGZpCisJCQkJCUdlbmVyYWwgZW5oYW5jZW1lbnRzOworCQkJCQllYXJseSBi
dWcgZml4ZXMgdG8gY29uZGl0aW9uIHZhcmlhYmxlcy4KK1Njb3R0IExpZ2h0bmVyCQlzY290dCBh
dCBjdXJyaWN1bHVtIGRvdCBjb20KKwkJCQkJQnVnIGZpeC4KK0tldmluIFJ1bGFuZAkJS2V2aW4g
ZG90IFJ1bGFuZCBhdCBhbmhldXNlci1idXNjaCBkb3QgY29tCisJCQkJCVZhcmlvdXMgYnVnIGZp
eGVzLgorTWlrZSBSdXNzbwkJbWlrZXIgYXQgZWFpIGRvdCBjb20KKwkJCQkJQnVnIGZpeC4KK01h
cmsgRS4gQXJtc3Ryb25nCWF2YWlsIGF0IHBhY2JlbGwgZG90IG5ldAorCQkJCQlCdWcgZml4ZXMu
CitMb3JpbiBIb2Noc3RlaW4gCWxtaCBhdCB4aXBob3MgZG90IGNhCisJCQkJCWdlbmVyYWwgYnVn
IGZpeGVzOyBidWcgZml4ZXMgdG8gY29uZGl0aW9uIHZhcmlhYmxlcy4KK1BldGVyIFNsYWNpawkJ
UGV0ZXIgZG90IFNsYWNpayBhdCB0YXRyYW1lZCBkb3Qgc2sKKwkJCQkJQnVnIGZpeGVzLgorTXVt
aXQgS2hhbgkJa2hhbiBhdCB4cmF5bGl0aCBkb3Qgd2lzYyBkb3QgZWR1CisJCQkJCUZpeGVzIHRv
IHdvcmsgd2l0aCBNaW5ndzMyLgorTWlsYW4gR2FyZGlhbgkJbWcgYXQgdGF0cmFtZWQgZG90IHNr
CisJCQkJCUJ1ZyBmaXhlcyBhbmQgcmVwb3J0cy9hbmFseXNlcyBvZiBvYnNjdXJlIHByb2JsZW1z
LgorQXVyZWxpbyBNZWRpbmEJCWF1cmVsaW9tIGF0IGNydCBkb3QgY29tCisJCQkJCUZpcnN0IGlt
cGxlbWVudGF0aW9uIG9mIHJlYWQtd3JpdGUgbG9ja3MuCitHcmFoYW0gRHVtcGxldG9uCUdyYWhh
bSBkb3QgRHVtcGxldG9uIGF0IHJhIGRvdCBwYWQgZG90IG90YyBkb3QgdGVsc3RyYSBkb3QgY29t
IGRvdCBhdQorCQkJCQlCdWcgZml4IGluIGNvbmRpdGlvbiB2YXJpYWJsZXMuCitUcmlzdGFuIFNh
dmF0aWVyCXRyaXN0YW4gYXQgbXBlZ3R2IGRvdCBjb20KKwkJCQkJV2luQ0UgcG9ydC4KK0VyaWsg
SGVuc2VtYQkJZXJpayBhdCBoZW5zZW1hIGRvdCB4czRhbGwgZG90IG5sCisJCQkJCUJ1ZyBmaXhl
cy4KK1JpY2ggUGV0ZXJzCQlycGV0ZXJzIGF0IG1pY3JvLW1hZ2ljIGRvdCBjb20KK1RvZGQgT3dl
bgkJdG93ZW4gYXQgbHVjaWRjYWxtIGRvdCBkcm9wYmVhciBkb3QgaWQgZG90IGF1CisJCQkJCUJ1
ZyBmaXhlcyB0byBkbGwgbG9hZGluZy4KK0phc29uIE55ZQkJam55ZSBhdCBuYm5ldCBkb3QgbmIg
ZG90IGNhCisJCQkJCUltcGxlbWVudGF0aW9uIG9mIGFzeW5jIGNhbmNlbGF0aW9uLgorRnJlZCBG
b3Jlc3RlcgkJZmZvcmVzdCBhdCBldGljb21tIGRvdCBuZXQKK0tldmluIEQuIENsYXJrCQlrY2xh
cmsgYXQgY2FibGV0cm9uIGRvdCBjb20KK0RhdmlkIEJhZ2dldHQJCWRtYiBhdCBpdGFzb2Z0d2Fy
ZSBkb3QgY29tCisJCQkJCUJ1ZyBmaXhlcy4KK1BhdWwgUmVkb25kbwkJcGF1bCBhdCBtYXRjaHZp
c2lvbiBkb3QgY29tCitTY290dCBNY0Nhc2tpbGwgCXNjb3R0IGF0IDNkZnggZG90IGNvbQorCQkJ
CQlCdWcgZml4ZXMuCitKZWYgR2VhcmhhcnQJCWpnZWFyaGFydCBhdCB0cHNzeXMgZG90IGNvbQor
CQkJCQlCdWcgZml4LgorQXJ0aHVyIEthbnRvcgkJYWthbnRvciBhdCBiZXh1c2EgZG90IGNvbQor
CQkJCQlNdXRleCBlbmhhbmNlbWVudHMuCitTdGV2ZW4gUmVkZGllCQlzbXIgYXQgZXNzZW1lciBk
b3QgY29tIGRvdCBhdQorCQkJCQlCdWcgZml4LgorQWxleGFuZGVyIFRlcmVraG92CVRFUkVLSE9W
IGF0IGRlIGRvdCBpYm0gZG90IGNvbQorCQkJCQlSZS1pbXBsZW1lbnRlZCBhbmQgaW1wcm92ZWQg
cmVhZC13cml0ZSBsb2NrczsKKwkJCQkJKHdpdGggTG91aXMgVGhvbWFzKSByZS1pbXBsZW1lbnRl
ZCBhbmQgaW1wcm92ZWQKKwkJCQkJY29uZGl0aW9uIHZhcmlhYmxlczsKKwkJCQkJZW5oYW5jZW1l
bnRzIHRvIHNlbWFwaG9yZXM7CisJCQkJCWVuaGFuY2VtZW50cyB0byBtdXRleGVzOworCQkJCQlu
ZXcgbXV0ZXggaW1wbGVtZW50YXRpb24gaW4gJ2Z1dGV4JyBzdHlsZTsKKwkJCQkJc3VnZ2VzdGVk
IGEgcm9idXN0IGltcGxlbWVudGF0aW9uIG9mIHB0aHJlYWRfb25jZQorCQkJCQlzaW1pbGFyIHRv
IHRoYXQgaW1wbGVtZW50ZWQgYnkgVi5LbGlhdGhja287CisJCQkJCXN5c3RlbSBjbG9jayBjaGFu
Z2UgaGFuZGxpbmcgcmUgQ1YgdGltZW91dHM7CisJCQkJCWJ1ZyBmaXhlcy4KK1Rob21hcyBQZmFm
ZgkJdHBmYWZmIGF0IGdteCBkb3QgbmV0CisJCQkJCUNoYW5nZXMgdG8gbWFrZSBDIHZlcnNpb24g
dXNhYmxlIHdpdGggQysrIGFwcGxpY2F0aW9uczsKKwkJCQkJcmUtaW1wbGVtZW50ZWQgbXV0ZXgg
cm91dGluZXMgdG8gYXZvaWQgV2luMzIgbXV0ZXhlcworCQkJCQlhbmQgVHJ5RW50ZXJDcml0aWNh
bFNlY3Rpb247CisJCQkJCXByb2NlZHVyZSB0byBmaXggTWluZ3czMiB0aHJlYWQtc2FmZXR5IGlz
c3Vlcy4KK0ZyYW5jbyBCZXoJCWZyYW5jbyBkb3QgYmV6IGF0IGdteCBkb3QgZGUKKwkJCQkJcHJv
Y2VkdXJlIHRvIGZpeCBNaW5ndzMyIHRocmVhZC1zYWZldHkgaXNzdWVzLgorTG91aXMgVGhvbWFz
CQlsdGhvbWFzIGF0IGFyYml0cmFkZSBkb3QgY29tCisJCQkJCSh3aXRoIEFsZXhhbmRlciBUZXJl
a2hvdikgcmUtaW1wbGVtZW50ZWQgYW5kIGltcHJvdmVkCisJCQkJCWNvbmRpdGlvbiB2YXJpYWJs
ZXMuCitEYXZpZCBLb3JuCQlkZ2sgYXQgcmVzZWFyY2ggZG90IGF0dCBkb3QgY29tCisJCQkJCVBv
cnRlZCB0byBVV0lOLgorUGhpbCBGcmlzYmllLCBKci4JcGhpbCBhdCBoYXdrc29mdCBkb3QgY29t
CisJCQkJCUJ1ZyBmaXguCitSYWxmIEJyZXNlCQlSYWxmIGRvdCBCcmVzZSBhdCBwZGI0IGRvdCBz
aWVtZW5zIGRvdCBkZQorCQkJCQlCdWcgZml4LgorcHJpb254IGF0IGp1bm8gZG90IGNvbSAJcHJp
b254IGF0IGp1bm8gZG90IGNvbQorCQkJCQlCdWcgZml4ZXMuCitNYXggV29vZGJ1cnkJCW10ZXcg
YXQgY2RzIGRvdCBkdWtlIGRvdCBlZHUKKwkJCQkJUE9TSVggdmVyc2lvbmluZyBjb25kaXRpb25h
bHM7CisJCQkJCXJlZHVjZWQgbmFtZXNwYWNlIHBvbGx1dGlvbjsKKwkJCQkJaWRlYSB0byBzZXBh
cmF0ZSByb3V0aW5lcyB0byByZWR1Y2Ugc3RhdGljYWxseQorCQkJCQlsaW5rZWQgaW1hZ2Ugc2l6
ZXMuCitSb2IgRmFubmVyCQlyZmFubmVyIGF0IHN0b25ldGhyZWUgZG90IGNvbQorCQkJCQlCdWcg
Zml4LgorTWljaGFlbCBKb2huc29uIAltaWNoYWVsaiBhdCBtYWluZSBkb3QgcnIgZG90IGNvbQor
CQkJCQlCdWcgZml4LgorTmljb2xhcyBCYXJyeQkJYm9vemFpIGF0IHlhaG9vIGRvdCBjb20KKwkJ
CQkJQnVnIGZpeGVzLgorUGlldCB2YW4gQnJ1Z2dlbglwaWV0dmIgYXQgbmV3YnJpZGdlcyBkb3Qg
bmwKKwkJCQkJQnVnIGZpeC4KK01ha290byBLYXRvCQlyYXZlbiBhdCBvbGRza29vbCBkb3QganAK
KwkJCQkJQU1ENjQgcG9ydC4KK1BhbmFnaW90aXMgRS4gSGFkamlkb3VrYXMJcGVoIGF0IGhwY2xh
YiBkb3QgY2VpZCBkb3QgdXBhdHJhcyBkb3QgZ3IKKwkJCQkJQ29udHJpYnV0ZWQgdGhlIFF1ZXVl
VXNlckFQQ0V4IHBhY2thZ2Ugd2hpY2gKKwkJCQkJbWFrZXMgcHJlZW1wdGl2ZSBhc3luYyBjYW5j
ZWxhdGlvbiBwb3NzaWJsZS4KK1dpbGwgQnJ5YW50CQl3aWxsIGRvdCBicnlhbnQgYXQgZWNvc20g
ZG90IGNvbQorCQkJCQlCb3JsYW5kIGNvbXBpbGVyIHBhdGNoIGFuZCBtYWtlZmlsZS4KK0FudWog
R295YWwJCWFudWogZG90IGdveWFsIGF0IGdtYWlsIGRvdCBjb20KKwkJCQkJUG9ydCB0byBEaWdp
dGFsIE1hcnMgY29tcGlsZXIuCitHb3R0bG9iIEZyZWdlCQlnb3R0bG9iZnJlZ2UgYXQgIGdtYWls
IGRvdCBjb20KKwkJCQkJcmUtaW1wbGVtZW50ZWQgcHRocmVhZF9vbmNlICh2ZXJzaW9uIDIpCisJ
CQkJCShwdGhyZWFkX29uY2UgY2FuY2VsbGF0aW9uIGFkZGVkIGJ5IHJwaikuCitWbGFkaW1pciBL
bGlhdGNoa28JdmxhZGltaXIgYXQga2xpYXRjaGtvIGRvdCBjb20KKwkJCQkJcmVpbXBsZW1lbnRl
ZCBwdGhyZWFkX29uY2Ugd2l0aCB0aGUgc2FtZSBmb3JtCisJCQkJCWFzIGRlc2NyaWJlZCBieSBB
LlRlcmVraG92IChsYXRlciB2ZXJzaW9uIDIpOworCQkJCQlpbXBsZW1lbnRhdGlvbiBvZiBNQ1Mg
KE1lbGxvci1DcnVtbWV5L1Njb3R0KSBsb2Nrcy4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi93aW4vT1NBbGxvY2F0b3JXaW4uY3BwIGIvU291
cmNlL1dURi93dGYvd2luL09TQWxsb2NhdG9yV2luLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iMzA1ODEzM2Q1
MTZlMmNmN2ZlYjliNjkzMjUzZWEwNGZhZmQ3MDRhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dURi93dGYvd2luL09TQWxsb2NhdG9yV2luLmNwcApAQCAtMCwwICsxLDk4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEwLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHd0Zi9PU0FsbG9jYXRv
ci5oPgorCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+
CisKK25hbWVzcGFjZSBXVEYgeworCitzdGF0aWMgaW5saW5lIERXT1JEIHByb3RlY3Rpb24oYm9v
bCB3cml0YWJsZSwgYm9vbCBleGVjdXRhYmxlKQoreworICAgIHJldHVybiBleGVjdXRhYmxlID8K
KyAgICAgICAgKHdyaXRhYmxlID8gUEFHRV9FWEVDVVRFX1JFQURXUklURSA6IFBBR0VfRVhFQ1VU
RV9SRUFEKSA6CisgICAgICAgICh3cml0YWJsZSA/IFBBR0VfUkVBRFdSSVRFIDogUEFHRV9SRUFE
T05MWSk7Cit9CisKK3ZvaWQqIE9TQWxsb2NhdG9yOjpyZXNlcnZlVW5jb21taXR0ZWQoc2l6ZV90
IGJ5dGVzLCBVc2FnZSwgYm9vbCB3cml0YWJsZSwgYm9vbCBleGVjdXRhYmxlLCBib29sKQorewor
ICAgIHZvaWQqIHJlc3VsdCA9IFZpcnR1YWxBbGxvYygwLCBieXRlcywgTUVNX1JFU0VSVkUsIHBy
b3RlY3Rpb24od3JpdGFibGUsIGV4ZWN1dGFibGUpKTsKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAg
ICAgQ1JBU0goKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkKiBPU0FsbG9jYXRvcjo6
cmVzZXJ2ZUFuZENvbW1pdChzaXplX3QgYnl0ZXMsIFVzYWdlLCBib29sIHdyaXRhYmxlLCBib29s
IGV4ZWN1dGFibGUsIGJvb2wpCit7CisgICAgdm9pZCogcmVzdWx0ID0gVmlydHVhbEFsbG9jKDAs
IGJ5dGVzLCBNRU1fUkVTRVJWRSB8IE1FTV9DT01NSVQsIHByb3RlY3Rpb24od3JpdGFibGUsIGV4
ZWN1dGFibGUpKTsKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgQ1JBU0goKTsKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCit2b2lkIE9TQWxsb2NhdG9yOjpjb21taXQodm9pZCogYWRkcmVzcywg
c2l6ZV90IGJ5dGVzLCBib29sIHdyaXRhYmxlLCBib29sIGV4ZWN1dGFibGUpCit7CisgICAgdm9p
ZCogcmVzdWx0ID0gVmlydHVhbEFsbG9jKGFkZHJlc3MsIGJ5dGVzLCBNRU1fQ09NTUlULCBwcm90
ZWN0aW9uKHdyaXRhYmxlLCBleGVjdXRhYmxlKSk7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAg
IENSQVNIKCk7Cit9CisKK3ZvaWQgT1NBbGxvY2F0b3I6OmRlY29tbWl0KHZvaWQqIGFkZHJlc3Ms
IHNpemVfdCBieXRlcykKK3sKKyAgICAvLyBBY2NvcmRpbmcgdG8gaHR0cDovL21zZG4ubWljcm9z
b2Z0LmNvbS9lbi11cy9saWJyYXJ5L2FhMzY2ODkyKFZTLjg1KS5hc3B4LAorICAgIC8vIGJ5dGVz
IChpLmUuIGR3U2l6ZSkgYmVpbmcgMCB3aGVuIGR3RnJlZVR5cGUgaXMgTUVNX0RFQ09NTUlUIG1l
YW5zIHRoYXQgd2UnbGwKKyAgICAvLyBkZWNvbW1pdCB0aGUgZW50aXJlIHJlZ2lvbiBhbGxvY2F0
ZWQgYnkgVmlydHVhbEFsbG9jKCkgaW5zdGVhZCBvZiBkZWNvbW1pdHRpbmcKKyAgICAvLyBub3Ro
aW5nIGFzIHdlIHdvdWxkIGV4cGVjdC4gSGVuY2UsIHdlIHNob3VsZCBjaGVjayBpZiBieXRlcyBp
cyAwIGFuZCBoYW5kbGUgaXQKKyAgICAvLyBhcHByb3ByaWF0ZWx5IGJlZm9yZSBjYWxsaW5nIFZp
cnR1YWxGcmVlKCkuCisgICAgLy8gU2VlOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTIxOTcyLgorICAgIGlmICghYnl0ZXMpCisgICAgICAgIHJldHVybjsKKyAgICAv
LyBTaWxlbmNlIHdhcm5pbmcgYWJvdXQgdXNpbmcgTUVNX0RFQ09NTUlUIGluc3RlYWQgb2YgTUVN
X1JFTEVBU0U6CisjcHJhZ21hIHdhcm5pbmcoc3VwcHJlc3M6IDYyNTApCisgICAgYm9vbCByZXN1
bHQgPSBWaXJ0dWFsRnJlZShhZGRyZXNzLCBieXRlcywgTUVNX0RFQ09NTUlUKTsKKyAgICBpZiAo
IXJlc3VsdCkKKyAgICAgICAgQ1JBU0goKTsKK30KKwordm9pZCBPU0FsbG9jYXRvcjo6cmVsZWFz
ZURlY29tbWl0dGVkKHZvaWQqIGFkZHJlc3MsIHNpemVfdCBieXRlcykKK3sKKyAgICAvLyBTZWUg
Y29tbWVudCBpbiBPU0FsbG9jYXRvcjo6ZGVjb21taXQoKS4gU2ltaWxhcmx5LCB3aGVuIGJ5dGVz
IGlzIDAsIHdlCisgICAgLy8gZG9uJ3Qgd2FudCB0byByZWxlYXNlIGFueXRoaW5nLiBTbywgZG9u
J3QgY2FsbCBWaXJ0dWFsRnJlZSgpIGJlbG93LgorICAgIGlmICghYnl0ZXMpCisgICAgICAgIHJl
dHVybjsKKyAgICAvLyBBY2NvcmRpbmcgdG8gaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11
cy9saWJyYXJ5L2FhMzY2ODkyKFZTLjg1KS5hc3B4LAorICAgIC8vIGR3U2l6ZSBtdXN0IGJlIDAg
aWYgZHdGcmVlVHlwZSBpcyBNRU1fUkVMRUFTRS4KKyAgICBib29sIHJlc3VsdCA9IFZpcnR1YWxG
cmVlKGFkZHJlc3MsIDAsIE1FTV9SRUxFQVNFKTsKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAg
Q1JBU0goKTsKK30KKwordm9pZCBPU0FsbG9jYXRvcjo6aGludE1lbW9yeU5vdE5lZWRlZFNvb24o
dm9pZCosIHNpemVfdCkKK3sKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL3d0Zi93aW4vVGhyZWFkU3BlY2lmaWNXaW4uY3BwIGIvU291cmNlL1dURi93dGYv
d2luL1RocmVhZFNwZWNpZmljV2luLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yYThlZjMyYzBhZjNjNjI2Njc4
N2ZhMGU4OTQ0OTY1NmQxMTUwMDFmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYv
d2luL1RocmVhZFNwZWNpZmljV2luLmNwcApAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA5IEppYW4gTGkgPGppYW5saUBjaHJvbWl1bS5vcmc+CisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgUGF0cmljayBHYW5zdGVyZXIgPHBhcm9nYUBwYXJvZ2EuY29tPgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRTcGVjaWZpYy5oPgorCisjaWYgIVVT
RShQVEhSRUFEUykKKworbmFtZXNwYWNlIFdURiB7CisKK2xvbmcmIGZsc0tleUNvdW50KCkKK3sK
KyAgICBzdGF0aWMgbG9uZyBjb3VudDsKKyAgICByZXR1cm4gY291bnQ7Cit9CisKK0RXT1JEKiBm
bHNLZXlzKCkKK3sKKyAgICBzdGF0aWMgRFdPUkQga2V5c1trTWF4RmxzS2V5U2l6ZV07CisgICAg
cmV0dXJuIGtleXM7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gIVVTRShQ
VEhSRUFEUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3dpbi9UaHJlYWRpbmdXaW4uY3Bw
IGIvU291cmNlL1dURi93dGYvd2luL1RocmVhZGluZ1dpbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDc3MzRk
OTQ3MzIwNzhkZDI3N2VkODQzMmNjZTlkYWUxYzYwNTBmYwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XVEYvd3RmL3dpbi9UaHJlYWRpbmdXaW4uY3BwCkBAIC0wLDAgKzEsNDU5IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IFRvcmNoIE1vYmlsZSwgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAzLiAgTmVpdGhlciB0aGUgbmFt
ZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4gCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQK
KyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLyoKKyAqIFRoZXJlIGFyZSBudW1lcm91cyBhY2FkZW1pYyBhbmQgcHJhY3RpY2FsIHdv
cmtzIG9uIGhvdyB0byBpbXBsZW1lbnQgcHRocmVhZF9jb25kX3dhaXQvcHRocmVhZF9jb25kX3Np
Z25hbC9wdGhyZWFkX2NvbmRfYnJvYWRjYXN0CisgKiBmdW5jdGlvbnMgb24gV2luMzIuIEhlcmUg
aXMgb25lIGV4YW1wbGU6IGh0dHA6Ly93d3cuY3Mud3VzdGwuZWR1L35zY2htaWR0L3dpbjMyLWN2
LTEuaHRtbCB3aGljaCBpcyB3aWRlbHkgY3JlZGl0ZWQgYXMgYSAnc3RhcnRpbmcgcG9pbnQnCisg
KiBvZiBtb2Rlcm4gYXR0ZW1wdHMuIFRoZXJlIGFyZSBzZXZlcmFsIG1vcmUgb3IgbGVzcyBwcm92
ZW4gaW1wbGVtZW50YXRpb25zLCBvbmUgaW4gQm9vc3QgQysrIGxpYnJhcnkgKGh0dHA6Ly93d3cu
Ym9vc3Qub3JnKSBhbmQgYW5vdGhlcgorICogaW4gcHRocmVhZHMtd2luMzIgKGh0dHA6Ly9zb3Vy
Y2V3YXJlLm9yZy9wdGhyZWFkcy13aW4zMi8pLgorICoKKyAqIFRoZSBudW1iZXIgb2YgYXJ0aWNs
ZXMgYW5kIGRpc2N1c3Npb25zIGlzIHRoZSBldmlkZW5jZSBvZiBzaWduaWZpY2FudCBkaWZmaWN1
bHRpZXMgaW4gaW1wbGVtZW50aW5nIHRoZXNlIHByaW1pdGl2ZXMgY29ycmVjdGx5LgorICogVGhl
IGJyaWVmIHNlYXJjaCBvZiByZXZpc2lvbnMsIENoYW5nZUxvZyBlbnRyaWVzLCBkaXNjdXNzaW9u
cyBpbiBjb21wLnByb2dyYW1taW5nLnRocmVhZHMgYW5kIG90aGVyIHBsYWNlcyBjbGVhcmx5IGRv
Y3VtZW50cworICogbnVtZXJvdXMgcGl0ZmFsbHMgYW5kIHBlcmZvcm1hbmNlIHByb2JsZW1zIHRo
ZSBhdXRob3JzIGhhZCB0byBvdmVyY29tZSB0byBhcnJpdmUgdG8gdGhlIHN1aXRhYmxlIGltcGxl
bWVudGF0aW9ucy4KKyAqIE9wdGltYWxseSwgV2ViS2l0IHdvdWxkIHVzZSBvbmUgb2YgdGhvc2Ug
c3VwcG9ydGVkL3Rlc3RlZCBsaWJyYXJpZXMgZGlyZWN0bHkuIFRvIHJvbGwgb3V0IG91ciBvd24g
aW1wbGVtZW50YXRpb24gaXMgaW1wcmFjdGljYWwsCisgKiBpZiBldmVuIGZvciB0aGUgbGFjayBv
ZiBzdWZmaWNpZW50IHRlc3RpbmcuIEhvd2V2ZXIsIGEgZmFpdGhmdWwgcmVwcm9kdWN0aW9uIG9m
IHRoZSBjb2RlIGZyb20gb25lIG9mIHRoZSBwb3B1bGFyIHN1cHBvcnRlZAorICogbGlicmFyaWVz
IHNlZW1zIHRvIGJlIGEgZ29vZCBjb21wcm9taXNlLgorICoKKyAqIFRoZSBlYXJseSBCb29zdCBp
bXBsZW1lbnRhdGlvbiAoaHR0cDovL3d3dy5ib3hiYWNrdXAub3JnL3RyYWMvYnJvd3Nlci9ib3gv
bmljay93aW4vbGliL3dpbjMyL2Jvb3N0XzFfMzJfMC9saWJzL3RocmVhZC9zcmMvY29uZGl0aW9u
LmNwcD9yZXY9MzApCisgKiBpcyBpZGVudGljYWwgdG8gcHRocmVhZHMtd2luMzIgKGh0dHA6Ly9z
b3VyY2V3YXJlLm9yZy9jZ2ktYmluL2N2c3dlYi5jZ2kvcHRocmVhZHMvcHRocmVhZF9jb25kX3dh
aXQuYz9yZXY9MS4xMCZjb250ZW50LXR5cGU9dGV4dC94LWN2c3dlYi1tYXJrdXAmY3Zzcm9vdD1w
dGhyZWFkcy13aW4zMikuCisgKiBDdXJyZW50IEJvb3N0IHVzZXMgeWV0IGFub3RoZXIgKGFsdGhv
dWdoIHNlZW1pbmdseSBlcXVpdmFsZW50KSBhbGdvcml0aG0gd2hpY2ggY2FtZSBmcm9tIHRoZWly
ICd0aHJlYWQgcmV3cml0ZScgZWZmb3J0LgorICoKKyAqIFRoaXMgZmlsZSBpbmNsdWRlcyB0aW1l
ZFdhaXQvc2lnbmFsL2Jyb2FkY2FzdCBpbXBsZW1lbnRhdGlvbnMgdHJhbnNsYXRlZCB0byBXZWJL
aXQgY29kaW5nIHN0eWxlIGZyb20gdGhlIGxhdGVzdCBhbGdvcml0aG0gYnkKKyAqIEFsZXhhbmRl
ciBUZXJla2hvdiBhbmQgTG91aXMgVGhvbWFzLCBhcyBjYXB0dXJlZCBoZXJlOiBodHRwOi8vc291
cmNld2FyZS5vcmcvY2dpLWJpbi9jdnN3ZWIuY2dpL3B0aHJlYWRzL3B0aHJlYWRfY29uZF93YWl0
LmM/cmV2PTEuMTAmY29udGVudC10eXBlPXRleHQveC1jdnN3ZWItbWFya3VwJmN2c3Jvb3Q9cHRo
cmVhZHMtd2luMzIKKyAqIEl0IHJlcGxhY2VzIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGVpciBw
cmV2aW91cyBhbGdvcml0aG0sIGFsc28gZG9jdW1lbnRlZCBpbiB0aGUgc2FtZSBzb3VyY2UgYWJv
dmUuCisgKiBUaGUgbmFtaW5nIGFuZCBjb21tZW50cyBhcmUgbGVmdCB2ZXJ5IGNsb3NlIHRvIG9y
aWdpbmFsIHRvIGVuYWJsZSBlYXN5IGNyb3NzLWNoZWNrLgorICoKKyAqIFRoZSBjb3JyZXNwb25k
aW5nIFB0aHJlYWRzLXdpbjMyIExpY2Vuc2UgaXMgaW5jbHVkZWQgYmVsb3csIGFuZCBDT05UUklC
VVRPUlMgZmlsZSB3aGljaCBpdCByZWZlcnMgdG8gaXMgYWRkZWQgdG8KKyAqIHNvdXJjZSBkaXJl
Y3RvcnkgKGFzIENPTlRSSUJVVE9SUy5wdGhyZWFkcy13aW4zMikuCisgKi8KKworLyoKKyAqICAg
ICAgUHRocmVhZHMtd2luMzIgLSBQT1NJWCBUaHJlYWRzIExpYnJhcnkgZm9yIFdpbjMyCisgKiAg
ICAgIENvcHlyaWdodChDKSAxOTk4IEpvaG4gRS4gQm9zc29tCisgKiAgICAgIENvcHlyaWdodChD
KSAxOTk5LDIwMDUgUHRocmVhZHMtd2luMzIgY29udHJpYnV0b3JzCisgKgorICogICAgICBDb250
YWN0IEVtYWlsOiBycGpAY2FsbGlzdG8uY2FuYmVycmEuZWR1LmF1CisgKgorICogICAgICBUaGUg
Y3VycmVudCBsaXN0IG9mIGNvbnRyaWJ1dG9ycyBpcyBjb250YWluZWQKKyAqICAgICAgaW4gdGhl
IGZpbGUgQ09OVFJJQlVUT1JTIGluY2x1ZGVkIHdpdGggdGhlIHNvdXJjZQorICogICAgICBjb2Rl
IGRpc3RyaWJ1dGlvbi4gVGhlIGxpc3QgY2FuIGFsc28gYmUgc2VlbiBhdCB0aGUKKyAqICAgICAg
Zm9sbG93aW5nIFdvcmxkIFdpZGUgV2ViIGxvY2F0aW9uOgorICogICAgICBodHRwOi8vc291cmNl
cy5yZWRoYXQuY29tL3B0aHJlYWRzLXdpbjMyL2NvbnRyaWJ1dG9ycy5odG1sCisgKgorICogICAg
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiAgICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKKyAqICAgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgICAgIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAg
ICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogICAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogICAgICBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgICAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYworICogICAgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5IGluIHRoZSBm
aWxlIENPUFlJTkcuTElCOworICogICAgICBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiAgICAgIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMz
MCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNs
dWRlIDxwcm9jZXNzLmg+CisjaW5jbHVkZSA8d2luZG93cy5oPgorI2luY2x1ZGUgPHd0Zi9IYXNo
TWFwLmg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5o
PgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJv
eWVkLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZ1ByaW1pdGl2ZXMuaD4KKworbmFtZXNwYWNl
IFdURiB7CisKK3N0YXRpYyBMb2NrIGdsb2JhbFN1c3BlbmRMb2NrOworCitUaHJlYWQ6On5UaHJl
YWQoKQoreworICAgIC8vIEl0IGlzIE9LIGJlY2F1c2UgRkxTQWxsb2MncyBjYWxsYmFjayB3aWxs
IGJlIGNhbGxlZCBldmVuIGJlZm9yZSB0aGVyZSBhcmUgc29tZSBvcGVuIGhhbmRsZXMuCisgICAg
Ly8gVGhpcyBlYXNpbHkgZW5zdXJlcyB0aGF0IGFsbCB0aGUgdGhyZWFkIHJlc291cmNlcyBhcmUg
YXV0b21hdGljYWxseSBjbG9zZWQuCisgICAgaWYgKG1faGFuZGxlICE9IElOVkFMSURfSEFORExF
X1ZBTFVFKQorICAgICAgICBDbG9zZUhhbmRsZShtX2hhbmRsZSk7Cit9CisKK3ZvaWQgVGhyZWFk
Ojppbml0aWFsaXplQ3VycmVudFRocmVhZEV2ZW5JZk5vbldURkNyZWF0ZWQoKQoreworfQorCisv
LyBNU19WQ19FWENFUFRJT04sIFRIUkVBRE5BTUVfSU5GTywgYW5kIHNldFRocmVhZE5hbWVJbnRl
cm5hbCBhbGwgY29tZSBmcm9tIDxodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJh
cnkveGNiMno4aHMuYXNweD4uCitzdGF0aWMgY29uc3QgRFdPUkQgTVNfVkNfRVhDRVBUSU9OID0g
MHg0MDZEMTM4ODsKKworI3ByYWdtYSBwYWNrKHB1c2gsIDgpCit0eXBlZGVmIHN0cnVjdCB0YWdU
SFJFQUROQU1FX0lORk8geworICAgIERXT1JEIGR3VHlwZTsgLy8gbXVzdCBiZSAweDEwMDAKKyAg
ICBMUENTVFIgc3pOYW1lOyAvLyBwb2ludGVyIHRvIG5hbWUgKGluIHVzZXIgYWRkciBzcGFjZSkK
KyAgICBEV09SRCBkd1RocmVhZElEOyAvLyB0aHJlYWQgSUQgKC0xPWNhbGxlciB0aHJlYWQpCisg
ICAgRFdPUkQgZHdGbGFnczsgLy8gcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UsIG11c3QgYmUgemVy
bworfSBUSFJFQUROQU1FX0lORk87CisjcHJhZ21hIHBhY2socG9wKQorCit2b2lkIFRocmVhZDo6
aW5pdGlhbGl6ZUN1cnJlbnRUaHJlYWRJbnRlcm5hbChjb25zdCBjaGFyKiBzelRocmVhZE5hbWUp
Cit7CisjaWYgQ09NUElMRVIoTUlOR1cpCisgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aHJlYWQg
bmFtZSBzZXR0aW5nIHdpdGggTWluZ1cuCisgICAgVU5VU0VEX1BBUkFNKHN6VGhyZWFkTmFtZSk7
CisjZWxzZQorICAgIFRIUkVBRE5BTUVfSU5GTyBpbmZvOworICAgIGluZm8uZHdUeXBlID0gMHgx
MDAwOworICAgIGluZm8uc3pOYW1lID0gVGhyZWFkOjpub3JtYWxpemVUaHJlYWROYW1lKHN6VGhy
ZWFkTmFtZSk7CisgICAgaW5mby5kd1RocmVhZElEID0gR2V0Q3VycmVudFRocmVhZElkKCk7Cisg
ICAgaW5mby5kd0ZsYWdzID0gMDsKKworICAgIF9fdHJ5IHsKKyAgICAgICAgUmFpc2VFeGNlcHRp
b24oTVNfVkNfRVhDRVBUSU9OLCAwLCBzaXplb2YoaW5mbykgLyBzaXplb2YoVUxPTkdfUFRSKSwg
cmVpbnRlcnByZXRfY2FzdDxVTE9OR19QVFIqPigmaW5mbykpOworICAgIH0gX19leGNlcHQoRVhD
RVBUSU9OX0NPTlRJTlVFX0VYRUNVVElPTikgeyB9CisjZW5kaWYKKyAgICBpbml0aWFsaXplQ3Vy
cmVudFRocmVhZEV2ZW5JZk5vbldURkNyZWF0ZWQoKTsKK30KKwordm9pZCBUaHJlYWQ6OmluaXRp
YWxpemVQbGF0Zm9ybVRocmVhZGluZygpCit7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBfX3N0ZGNh
bGwgd3RmVGhyZWFkRW50cnlQb2ludCh2b2lkKiBkYXRhKQoreworICAgIFRocmVhZDo6ZW50cnlQ
b2ludChyZWludGVycHJldF9jYXN0PFRocmVhZDo6TmV3VGhyZWFkQ29udGV4dCo+KGRhdGEpKTsK
KyAgICByZXR1cm4gMDsKK30KKworYm9vbCBUaHJlYWQ6OmVzdGFibGlzaEhhbmRsZShOZXdUaHJl
YWRDb250ZXh0KiBkYXRhKQoreworICAgIHVuc2lnbmVkIHRocmVhZElkZW50aWZpZXIgPSAwOwor
ICAgIEhBTkRMRSB0aHJlYWRIYW5kbGUgPSByZWludGVycHJldF9jYXN0PEhBTkRMRT4oX2JlZ2lu
dGhyZWFkZXgoMCwgMCwgd3RmVGhyZWFkRW50cnlQb2ludCwgZGF0YSwgMCwgJnRocmVhZElkZW50
aWZpZXIpKTsKKyAgICBpZiAoIXRocmVhZEhhbmRsZSkgeworICAgICAgICBMT0dfRVJST1IoIkZh
aWxlZCB0byBjcmVhdGUgdGhyZWFkIGF0IGVudHJ5IHBvaW50ICVwIHdpdGggZGF0YSAlcDogJWxk
Iiwgd3RmVGhyZWFkRW50cnlQb2ludCwgZGF0YSwgZXJybm8pOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorICAgIGVzdGFibGlzaFBsYXRmb3JtU3BlY2lmaWNIYW5kbGUodGhyZWFkSGFu
ZGxlLCB0aHJlYWRJZGVudGlmaWVyKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBUaHJl
YWQ6OmNoYW5nZVByaW9yaXR5KGludCBkZWx0YSkKK3sKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRM
b2NrKG1fbXV0ZXgpOworICAgIFNldFRocmVhZFByaW9yaXR5KG1faGFuZGxlLCBUSFJFQURfUFJJ
T1JJVFlfTk9STUFMICsgZGVsdGEpOworfQorCitpbnQgVGhyZWFkOjp3YWl0Rm9yQ29tcGxldGlv
bigpCit7CisgICAgSEFORExFIGhhbmRsZTsKKyAgICB7CisgICAgICAgIGF1dG8gbG9ja2VyID0g
aG9sZExvY2sobV9tdXRleCk7CisgICAgICAgIGhhbmRsZSA9IG1faGFuZGxlOworICAgIH0KKwor
ICAgIERXT1JEIGpvaW5SZXN1bHQgPSBXYWl0Rm9yU2luZ2xlT2JqZWN0KGhhbmRsZSwgSU5GSU5J
VEUpOworICAgIGlmIChqb2luUmVzdWx0ID09IFdBSVRfRkFJTEVEKQorICAgICAgICBMT0dfRVJS
T1IoIlRocmVhZCAlcCB3YXMgZm91bmQgdG8gYmUgZGVhZGxvY2tlZCB0cnlpbmcgdG8gcXVpdCIs
IHRoaXMpOworCisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX211dGV4KTsKKyAgICBBU1NF
UlQoam9pbmFibGVTdGF0ZSgpID09IEpvaW5hYmxlKTsKKworICAgIC8vIFRoZSB0aHJlYWQgaGFz
IGFscmVhZHkgZXhpdGVkLCBkbyBub3RoaW5nLgorICAgIC8vIFRoZSB0aHJlYWQgaGFzbid0IGV4
aXRlZCB5ZXQsIHNvIGRvbid0IGNsZWFuIGFueXRoaW5nIHVwLiBKdXN0IHNpZ25hbCB0aGF0IHdl
J3ZlIGFscmVhZHkgam9pbmVkIG9uIGl0IHNvIHRoYXQgaXQgd2lsbCBjbGVhbiB1cCBhZnRlciBp
dHNlbGYuCisgICAgaWYgKCFoYXNFeGl0ZWQoKSkKKyAgICAgICAgZGlkSm9pbigpOworCisgICAg
cmV0dXJuIGpvaW5SZXN1bHQ7Cit9CisKK3ZvaWQgVGhyZWFkOjpkZXRhY2goKQoreworICAgIC8v
IFdlIGZvbGxvdyB0aGUgcHRocmVhZCBzZW1hbnRpY3M6IGV2ZW4gYWZ0ZXIgdGhlIGRldGFjaCBp
cyBjYWxsZWQsCisgICAgLy8gd2UgY2FuIHN0aWxsIHBlcmZvcm0gdmFyaW91cyBvcGVyYXRpb25z
IG9udG8gdGhlIHRocmVhZC4gRm9yIGV4YW1wbGUsCisgICAgLy8gd2UgY2FuIGRvIHB0aHJlYWRf
a2lsbCBmb3IgdGhlIGRldGFjaGVkIHRocmVhZC4gVGhlIHByb2JsZW0gaW4gV2luZG93cworICAg
IC8vIGlzIHRoYXQgY2xvc2luZyBIQU5ETEUgbG9zZXMgdGhlIHdheSB0byBkbyBzdWNoIG9wZXJh
dGlvbnMuCisgICAgLy8gVG8gZG8gc28sIHdlIGRvIG5vdGhpbmcgaGVyZSBpbiBXaW5kb3dzLiBP
cmlnaW5hbCBkZXRhY2gncyBwdXJwb3NlLAorICAgIC8vIHJlbGVhc2luZyB0aHJlYWQgcmVzb3Vy
Y2Ugd2hlbiB0aGUgdGhyZWFkIGV4aXRzLCB3aWxsIGJlIGFjaGlldmVkIGJ5CisgICAgLy8gRmxz
Q2FsbGJhY2sgYXV0b21hdGljYWxseS4gRmxzQ2FsbGJhY2sgd2lsbCBjYWxsIENsb3NlSGFuZGxl
IHRvIGNsZWFuIHVwCisgICAgLy8gcmVzb3VyY2UuIFNvIGluIHRoaXMgZnVuY3Rpb24sIHdlIGp1
c3QgbWFyayB0aGUgdGhyZWFkIGFzIGRldGFjaGVkIHRvCisgICAgLy8gYXZvaWQgY2FsbGluZyB3
YWl0Rm9yQ29tcGxldGlvbiBmb3IgdGhpcyB0aHJlYWQuCisgICAgYXV0byBsb2NrZXIgPSBob2xk
TG9jayhtX211dGV4KTsKKyAgICBpZiAoIWhhc0V4aXRlZCgpKQorICAgICAgICBkaWRCZWNvbWVE
ZXRhY2hlZCgpOworfQorCithdXRvIFRocmVhZDo6c3VzcGVuZCgpIC0+IEV4cGVjdGVkPHZvaWQs
IFBsYXRmb3JtU3VzcGVuZEVycm9yPgoreworICAgIFJFTEVBU0VfQVNTRVJUX1dJVEhfTUVTU0FH
RSh0aGlzICE9ICZUaHJlYWQ6OmN1cnJlbnQoKSwgIldlIGRvIG5vdCBzdXBwb3J0IHN1c3BlbmRp
bmcgdGhlIGN1cnJlbnQgdGhyZWFkIGl0c2VsZi4iKTsKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihn
bG9iYWxTdXNwZW5kTG9jayk7CisgICAgRFdPUkQgcmVzdWx0ID0gU3VzcGVuZFRocmVhZChtX2hh
bmRsZSk7CisgICAgaWYgKHJlc3VsdCAhPSAoRFdPUkQpLTEpCisgICAgICAgIHJldHVybiB7IH07
CisgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKHJlc3VsdCk7Cit9CisKKy8vIER1cmluZyByZXN1
bWUsIHN1c3BlbmQgb3IgcmVzdW1lIHNob3VsZCBub3QgYmUgZXhlY3V0ZWQgZnJvbSB0aGUgb3Ro
ZXIgdGhyZWFkcy4KK3ZvaWQgVGhyZWFkOjpyZXN1bWUoKQoreworICAgIExvY2tIb2xkZXIgbG9j
a2VyKGdsb2JhbFN1c3BlbmRMb2NrKTsKKyAgICBSZXN1bWVUaHJlYWQobV9oYW5kbGUpOworfQor
CitzaXplX3QgVGhyZWFkOjpnZXRSZWdpc3RlcnMoUGxhdGZvcm1SZWdpc3RlcnMmIHJlZ2lzdGVy
cykKK3sKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihnbG9iYWxTdXNwZW5kTG9jayk7CisgICAgcmVn
aXN0ZXJzLkNvbnRleHRGbGFncyA9IENPTlRFWFRfSU5URUdFUiB8IENPTlRFWFRfQ09OVFJPTDsK
KyAgICBHZXRUaHJlYWRDb250ZXh0KG1faGFuZGxlLCAmcmVnaXN0ZXJzKTsKKyAgICByZXR1cm4g
c2l6ZW9mKENPTlRFWFQpOworfQorCitUaHJlYWQmIFRocmVhZDo6aW5pdGlhbGl6ZUN1cnJlbnRU
TFMoKQoreworICAgIC8vIE5vdCBhIFdURi1jcmVhdGVkIHRocmVhZCwgVGhyZWFkSWRlbnRpZmll
ciBpcyBub3QgZXN0YWJsaXNoZWQgeWV0LgorICAgIFJlZjxUaHJlYWQ+IHRocmVhZCA9IGFkb3B0
UmVmKCpuZXcgVGhyZWFkKCkpOworCisgICAgSEFORExFIGhhbmRsZTsKKyAgICBib29sIGlzU3Vj
Y2Vzc2Z1bCA9IER1cGxpY2F0ZUhhbmRsZShHZXRDdXJyZW50UHJvY2VzcygpLCBHZXRDdXJyZW50
VGhyZWFkKCksIEdldEN1cnJlbnRQcm9jZXNzKCksICZoYW5kbGUsIDAsIEZBTFNFLCBEVVBMSUNB
VEVfU0FNRV9BQ0NFU1MpOworICAgIFJFTEVBU0VfQVNTRVJUKGlzU3VjY2Vzc2Z1bCk7CisKKyAg
ICB0aHJlYWQtPmVzdGFibGlzaFBsYXRmb3JtU3BlY2lmaWNIYW5kbGUoaGFuZGxlLCBjdXJyZW50
SUQoKSk7CisgICAgdGhyZWFkLT5pbml0aWFsaXplSW5UaHJlYWQoKTsKKyAgICBpbml0aWFsaXpl
Q3VycmVudFRocmVhZEV2ZW5JZk5vbldURkNyZWF0ZWQoKTsKKworICAgIHJldHVybiBpbml0aWFs
aXplVExTKFdURk1vdmUodGhyZWFkKSk7Cit9CisKK1RocmVhZElkZW50aWZpZXIgVGhyZWFkOjpj
dXJyZW50SUQoKQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxUaHJlYWRJZGVudGlmaWVyPihH
ZXRDdXJyZW50VGhyZWFkSWQoKSk7Cit9CisKK3ZvaWQgVGhyZWFkOjplc3RhYmxpc2hQbGF0Zm9y
bVNwZWNpZmljSGFuZGxlKEhBTkRMRSBoYW5kbGUsIFRocmVhZElkZW50aWZpZXIgdGhyZWFkSUQp
Cit7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX211dGV4KTsKKyAgICBtX2hhbmRsZSA9
IGhhbmRsZTsKKyAgICBtX2lkID0gdGhyZWFkSUQ7Cit9CisKKyNkZWZpbmUgSW52YWxpZFRocmVh
ZCByZWludGVycHJldF9jYXN0PFRocmVhZCo+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oMHhiYmFk
YmVlZikpCisKK3N0YXRpYyBXb3JkTG9jayB0aHJlYWRNYXBNdXRleDsKKworc3RhdGljIEhhc2hN
YXA8VGhyZWFkSWRlbnRpZmllciwgVGhyZWFkKj4mIHRocmVhZE1hcCgpCit7CisgICAgc3RhdGlj
IE5ldmVyRGVzdHJveWVkPEhhc2hNYXA8VGhyZWFkSWRlbnRpZmllciwgVGhyZWFkKj4+IG1hcDsK
KyAgICByZXR1cm4gbWFwLmdldCgpOworfQorCit2b2lkIFRocmVhZDo6aW5pdGlhbGl6ZVRMU0tl
eSgpCit7CisgICAgdGhyZWFkTWFwKCk7CisgICAgdGhyZWFkU3BlY2lmaWNLZXlDcmVhdGUoJnNf
a2V5LCBkZXN0cnVjdFRMUyk7Cit9CisKK1RocmVhZCogVGhyZWFkOjpjdXJyZW50RHlpbmcoKQor
eworICAgIEFTU0VSVChzX2tleSAhPSBJbnZhbGlkVGhyZWFkU3BlY2lmaWNLZXkpOworICAgIC8v
IEFmdGVyIEZMUyBpcyBkZXN0cm95ZWQsIHRoaXMgbWFwIG9mZmVycyB0aGUgdmFsdWUgdW50aWwg
dGhlIHNlY29uZCB0aHJlYWQgZXhpdCBjYWxsYmFjayBpcyBjYWxsZWQuCisgICAgYXV0byBsb2Nr
ZXIgPSBob2xkTG9jayh0aHJlYWRNYXBNdXRleCk7CisgICAgcmV0dXJuIHRocmVhZE1hcCgpLmdl
dChjdXJyZW50SUQoKSk7Cit9CisKKy8vIEZJWE1FOiBSZW1vdmUgdGhpcyB3b3JrYXJvdW5kIGNv
ZGUgb25jZSA8cmRhcjovL3Byb2JsZW0vMzE3OTMyMTM+IGlzIGZpeGVkLgorUmVmUHRyPFRocmVh
ZD4gVGhyZWFkOjpnZXQoVGhyZWFkSWRlbnRpZmllciBpZCkKK3sKKyAgICBhdXRvIGxvY2tlciA9
IGhvbGRMb2NrKHRocmVhZE1hcE11dGV4KTsKKyAgICBUaHJlYWQqIHRocmVhZCA9IHRocmVhZE1h
cCgpLmdldChpZCk7CisgICAgaWYgKHRocmVhZCkKKyAgICAgICAgcmV0dXJuIHRocmVhZDsKKyAg
ICByZXR1cm4gbnVsbHB0cjsKK30KKworVGhyZWFkJiBUaHJlYWQ6OmluaXRpYWxpemVUTFMoUmVm
PFRocmVhZD4mJiB0aHJlYWQpCit7CisgICAgQVNTRVJUKHNfa2V5ICE9IEludmFsaWRUaHJlYWRT
cGVjaWZpY0tleSk7CisgICAgLy8gRklYTUU6IFJlbW92ZSB0aGlzIHdvcmthcm91bmQgY29kZSBv
bmNlIDxyZGFyOi8vcHJvYmxlbS8zMTc5MzIxMz4gaXMgZml4ZWQuCisgICAgYXV0byBpZCA9IHRo
cmVhZC0+aWQoKTsKKyAgICAvLyBXZSBsZWFrIHRoZSByZWYgdG8ga2VlcCB0aGUgVGhyZWFkIGFs
aXZlIHdoaWxlIGl0IGlzIGhlbGQgaW4gVExTLiBkZXN0cnVjdFRMUyB3aWxsIGRlcmVmIGl0IGxh
dGVyIGF0IHRocmVhZCBkZXN0cnVjdGlvbiB0aW1lLgorICAgIGF1dG8mIHRocmVhZEluVExTID0g
dGhyZWFkLmxlYWtSZWYoKTsKKyAgICB0aHJlYWRTcGVjaWZpY1NldChzX2tleSwgJnRocmVhZElu
VExTKTsKKyAgICB7CisgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sodGhyZWFkTWFwTXV0
ZXgpOworICAgICAgICB0aHJlYWRNYXAoKS5hZGQoaWQsICZ0aHJlYWRJblRMUyk7CisgICAgfQor
ICAgIHJldHVybiB0aHJlYWRJblRMUzsKK30KKwordm9pZCBUaHJlYWQ6OmRlc3RydWN0VExTKHZv
aWQqIGRhdGEpCit7CisgICAgaWYgKGRhdGEgPT0gSW52YWxpZFRocmVhZCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgVGhyZWFkKiB0aHJlYWQgPSBzdGF0aWNfY2FzdDxUaHJlYWQqPihkYXRhKTsK
KyAgICBBU1NFUlQodGhyZWFkKTsKKworICAgIC8vIERlbGF5IHRoZSBkZWFsbG9jYXRpb24gb2Yg
VGhyZWFkIG1vcmUuCisgICAgLy8gSXQgZGVmZXJzIFRocmVhZCBkZWFsbG9jYXRpb24gYWZ0ZXIg
dGhlIG90aGVyIFRocmVhZFNwZWNpZmljIHZhbHVlcyBhcmUgZGVhbGxvY2F0ZWQuCisgICAgc3Rh
dGljIHRocmVhZF9sb2NhbCBjbGFzcyBUaHJlYWRFeGl0Q2FsbGJhY2sgeworICAgIHB1YmxpYzoK
KyAgICAgICAgVGhyZWFkRXhpdENhbGxiYWNrKFRocmVhZCogdGhyZWFkKQorICAgICAgICAgICAg
OiBtX3RocmVhZCh0aHJlYWQpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIH5UaHJl
YWRFeGl0Q2FsbGJhY2soKQorICAgICAgICB7CisgICAgICAgICAgICBUaHJlYWQ6OmRlc3RydWN0
VExTKG1fdGhyZWFkKTsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgVGhyZWFk
KiBtX3RocmVhZDsKKyAgICB9IGNhbGxiYWNrKHRocmVhZCk7CisKKyAgICBpZiAodGhyZWFkLT5t
X2lzRGVzdHJveWVkT25jZSkgeworICAgICAgICB7CisgICAgICAgICAgICBhdXRvIGxvY2tlciA9
IGhvbGRMb2NrKHRocmVhZE1hcE11dGV4KTsKKyAgICAgICAgICAgIEFTU0VSVCh0aHJlYWRNYXAo
KS5jb250YWlucyh0aHJlYWQtPmlkKCkpKTsKKyAgICAgICAgICAgIHRocmVhZE1hcCgpLnJlbW92
ZSh0aHJlYWQtPmlkKCkpOworICAgICAgICB9CisgICAgICAgIHRocmVhZC0+ZGlkRXhpdCgpOwor
ICAgICAgICB0aHJlYWQtPmRlcmVmKCk7CisKKyAgICAgICAgLy8gRmlsbCB0aGUgRkxTIHdpdGgg
dGhlIG5vbi1udWxscHRyIHZhbHVlLiBXaGlsZSBGTFMgZGVzdHJ1Y3RvciB3b24ndCBiZSBjYWxs
ZWQgZm9yIHRoYXQsCisgICAgICAgIC8vIG5vbi1udWxscHRyIHZhbHVlIHRlbGxzIHVzIHRoYXQg
d2UgYWxyZWFkeSBkZXN0cnVjdGVkIFRocmVhZC4gVGhpcyBhbGxvd3MgdXMgdG8KKyAgICAgICAg
Ly8gZGV0ZWN0IGluY29ycmVjdCB1c2Ugb2YgVGhyZWFkOjpjdXJyZW50KCkgYWZ0ZXIgdGhpcyBw
b2ludCBiZWNhdXNlIGl0IHdpbGwgY3Jhc2guCisgICAgICAgIHRocmVhZFNwZWNpZmljU2V0KHNf
a2V5LCBJbnZhbGlkVGhyZWFkKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICB0aHJlYWRT
cGVjaWZpY1NldChzX2tleSwgSW52YWxpZFRocmVhZCk7CisgICAgdGhyZWFkLT5tX2lzRGVzdHJv
eWVkT25jZSA9IHRydWU7Cit9CisKK011dGV4Ojp+TXV0ZXgoKQoreworfQorCit2b2lkIE11dGV4
Ojpsb2NrKCkKK3sKKyAgICBBY3F1aXJlU1JXTG9ja0V4Y2x1c2l2ZSgmbV9tdXRleCk7Cit9CisK
K2Jvb2wgTXV0ZXg6OnRyeUxvY2soKQoreworICAgIHJldHVybiBUcnlBY3F1aXJlU1JXTG9ja0V4
Y2x1c2l2ZSgmbV9tdXRleCk7Cit9CisKK3ZvaWQgTXV0ZXg6OnVubG9jaygpCit7CisgICAgUmVs
ZWFzZVNSV0xvY2tFeGNsdXNpdmUoJm1fbXV0ZXgpOworfQorCisvLyBSZXR1cm5zIGFuIGludGVy
dmFsIGluIG1pbGxpc2Vjb25kcyBzdWl0YWJsZSBmb3IgcGFzc2luZyB0byBvbmUgb2YgdGhlIFdp
bjMyIHdhaXQgZnVuY3Rpb25zIChlLmcuLCA6OldhaXRGb3JTaW5nbGVPYmplY3QpLgorc3RhdGlj
IERXT1JEIGFic29sdXRlVGltZVRvV2FpdFRpbWVvdXRJbnRlcnZhbChXYWxsVGltZSBhYnNvbHV0
ZVRpbWUpCit7CisgICAgV2FsbFRpbWUgY3VycmVudFRpbWUgPSBXYWxsVGltZTo6bm93KCk7CisK
KyAgICAvLyBUaW1lIGlzIGluIHRoZSBwYXN0IC0gcmV0dXJuIGltbWVkaWF0ZWx5LgorICAgIGlm
IChhYnNvbHV0ZVRpbWUgPCBjdXJyZW50VGltZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAv
LyBUaW1lIGlzIHRvbyBmYXIgaW4gdGhlIGZ1dHVyZSAoYW5kIHdvdWxkIG92ZXJmbG93IHVuc2ln
bmVkIGxvbmcpIC0gd2FpdCBmb3JldmVyLgorICAgIGlmICgoYWJzb2x1dGVUaW1lIC0gY3VycmVu
dFRpbWUpID4gU2Vjb25kczo6ZnJvbU1pbGxpc2Vjb25kcyhJTlRfTUFYKSkKKyAgICAgICAgcmV0
dXJuIElORklOSVRFOworCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PERXT1JEPigoYWJzb2x1dGVU
aW1lIC0gY3VycmVudFRpbWUpLm1pbGxpc2Vjb25kcygpKTsKK30KKworVGhyZWFkQ29uZGl0aW9u
Ojp+VGhyZWFkQ29uZGl0aW9uKCkKK3sKK30KKwordm9pZCBUaHJlYWRDb25kaXRpb246OndhaXQo
TXV0ZXgmIG11dGV4KQoreworICAgIFNsZWVwQ29uZGl0aW9uVmFyaWFibGVTUlcoJm1fY29uZGl0
aW9uLCAmbXV0ZXguaW1wbCgpLCBJTkZJTklURSwgMCk7Cit9CisKK2Jvb2wgVGhyZWFkQ29uZGl0
aW9uOjp0aW1lZFdhaXQoTXV0ZXgmIG11dGV4LCBXYWxsVGltZSBhYnNvbHV0ZVRpbWUpCit7Cisg
ICAgLy8gaHR0cHM6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS93aW5kb3dzL2Rl
c2t0b3AvbXM2ODYzMDQodj12cy44NSkuYXNweAorICAgIERXT1JEIGludGVydmFsID0gYWJzb2x1
dGVUaW1lVG9XYWl0VGltZW91dEludGVydmFsKGFic29sdXRlVGltZSk7CisgICAgaWYgKCFpbnRl
cnZhbCkgeworICAgICAgICAvLyBDb25zaWRlciB0aGUgd2FpdCB0byBoYXZlIHRpbWVkIG91dCwg
ZXZlbiBpZiBvdXIgY29uZGl0aW9uIGhhcyBhbHJlYWR5IGJlZW4gc2lnbmFsZWQsIHRvCisgICAg
ICAgIC8vIG1hdGNoIHRoZSBwdGhyZWFkcyBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIGlmIChTbGVlcENvbmRpdGlvblZhcmlhYmxlU1JXKCZtX2Nv
bmRpdGlvbiwgJm11dGV4LmltcGwoKSwgaW50ZXJ2YWwsIDApKQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICBBU1NFUlQoR2V0TGFzdEVycm9yKCkgPT0gRVJST1JfVElNRU9VVCk7CisgICAgcmV0
dXJuIGZhbHNlOworfQorCit2b2lkIFRocmVhZENvbmRpdGlvbjo6c2lnbmFsKCkKK3sKKyAgICBX
YWtlQ29uZGl0aW9uVmFyaWFibGUoJm1fY29uZGl0aW9uKTsKK30KKwordm9pZCBUaHJlYWRDb25k
aXRpb246OmJyb2FkY2FzdCgpCit7CisgICAgV2FrZUFsbENvbmRpdGlvblZhcmlhYmxlKCZtX2Nv
bmRpdGlvbik7Cit9CisKKy8vIFJlbW92ZSB0aGlzIHdvcmthcm91bmQgY29kZSB3aGVuIDxyZGFy
Oi8vcHJvYmxlbS8zMTc5MzIxMz4gaXMgZml4ZWQuCitUaHJlYWRJZGVudGlmaWVyIGNyZWF0ZVRo
cmVhZChUaHJlYWRGdW5jdGlvbiBmdW5jdGlvbiwgdm9pZCogZGF0YSwgY29uc3QgY2hhciogdGhy
ZWFkTmFtZSkKK3sKKyAgICByZXR1cm4gVGhyZWFkOjpjcmVhdGUodGhyZWFkTmFtZSwgW2Z1bmN0
aW9uLCBkYXRhXSB7CisgICAgICAgIGZ1bmN0aW9uKGRhdGEpOworICAgIH0pLT5pZCgpOworfQor
CitpbnQgd2FpdEZvclRocmVhZENvbXBsZXRpb24oVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJRCkK
K3sKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIGltcGxlbWVudGVkIGJhc2VkIG9uIHRoZSBvbGQg
VGhyZWFkaW5nIGltcGxlbWVudGF0aW9uLgorICAgIC8vIEl0IHJlbWFpbnMgb25seSBkdWUgdG8g
dGhlIHN1cHBvcnQgbGlicmFyeSB1c2luZyBvbGQgVGhyZWFkaW5nIEFQSXMgYW5kCisgICAgLy8g
aXQgc2hvdWxkIG5vdCBiZSB1c2VkIGluIG5ldyBjb2RlLgorICAgIEFTU0VSVCh0aHJlYWRJRCk7
CisKKyAgICBSZWZQdHI8VGhyZWFkPiB0aHJlYWQgPSBUaHJlYWQ6OmdldCh0aHJlYWRJRCk7Cisg
ICAgaWYgKCF0aHJlYWQpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJUaHJlYWRJZGVudGlmaWVyICV1
IGRpZCBub3QgY29ycmVzcG9uZCB0byBhbiBhY3RpdmUgdGhyZWFkIHdoZW4gdHJ5aW5nIHRvIHF1
aXQiLCB0aHJlYWRJRCk7CisgICAgICAgIHJldHVybiBXQUlUX0ZBSUxFRDsKKyAgICB9CisgICAg
cmV0dXJuIHRocmVhZC0+d2FpdEZvckNvbXBsZXRpb24oKTsKKworfQorCit2b2lkIFRocmVhZDo6
eWllbGQoKQoreworICAgIFN3aXRjaFRvVGhyZWFkKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdU
Rgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>360419</attachid>
            <date>2019-01-28 19:15:46 -0800</date>
            <delta_ts>2019-01-28 20:00:15 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-193929-20190128191545.patch</filename>
            <type>text/plain</type>
            <size>150411</size>
            <attacher name="Ross Kirsling">ross.kirsling</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQwNjMyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGNjY2NhNDk3ZTc5N2Y4ZGM5ZjQzNWNj
ZTQyYzY5MzJhNjNlODYxMTIuLjZmYTVjZGRhYTM3Mzk3NzI0ZGY0NjIwMWM3NTI3YmYyMTgxMjEw
ODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjggQEAKKzIwMTktMDEtMjggIFJvc3MgS2lyc2xpbmcgIDxyb3Nz
LmtpcnNsaW5nQHNvbnkuY29tPgorCisgICAgICAgIE1vdmUgcGxhdGZvcm0tc3BlY2lmaWMgZmls
ZXMgb3V0IG9mIFdURiByb290IGRpcmVjdG9yeS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MzkyOQorCisgICAgICAgIFJldmlld2VkIGJ5IEFsZXgg
Q2hyaXN0ZW5zZW4uCisKKyAgICAgICAgKiBXVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoK
KyAgICAgICAgKiB3dGYvQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogd3RmL1BsYXRmb3JtR1RL
LmNtYWtlOgorICAgICAgICAqIHd0Zi9QbGF0Zm9ybUpTQ09ubHkuY21ha2U6CisgICAgICAgICog
d3RmL1BsYXRmb3JtTWFjLmNtYWtlOgorICAgICAgICAqIHd0Zi9QbGF0Zm9ybVBsYXlTdGF0aW9u
LmNtYWtlOgorICAgICAgICAqIHd0Zi9QbGF0Zm9ybVdQRS5jbWFrZToKKyAgICAgICAgKiB3dGYv
UGxhdGZvcm1XaW4uY21ha2U6CisgICAgICAgICogd3RmL2NmL1J1bkxvb3BUaW1lckNGLmNwcDog
UmVuYW1lZCBmcm9tIFNvdXJjZS9XVEYvd3RmL1J1bkxvb3BUaW1lckNGLmNwcC4KKyAgICAgICAg
KiB3dGYvY2YvU2NoZWR1bGVQYWlyQ0YuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dURi93dGYv
U2NoZWR1bGVQYWlyQ0YuY3BwLgorICAgICAgICAqIHd0Zi9tYWMvU2NoZWR1bGVQYWlyTWFjLm1t
OiBSZW5hbWVkIGZyb20gU291cmNlL1dURi93dGYvU2NoZWR1bGVQYWlyTWFjLm1tLgorICAgICAg
ICAqIHd0Zi9wb3NpeC9PU0FsbG9jYXRvclBPU0lYLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9X
VEYvd3RmL09TQWxsb2NhdG9yUG9zaXguY3BwLgorICAgICAgICAqIHd0Zi9wb3NpeC9UaHJlYWRp
bmdQT1NJWC5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmdQdGhyZWFk
cy5jcHAuCisgICAgICAgICogd3RmL3dpbi9DT05UUklCVVRPUlMucHRocmVhZHMtd2luMzI6IFJl
bmFtZWQgZnJvbSBTb3VyY2UvV1RGL3d0Zi9DT05UUklCVVRPUlMucHRocmVhZHMtd2luMzIuCisg
ICAgICAgICogd3RmL3dpbi9PU0FsbG9jYXRvcldpbi5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2Uv
V1RGL3d0Zi9PU0FsbG9jYXRvcldpbi5jcHAuCisgICAgICAgICogd3RmL3dpbi9UaHJlYWRTcGVj
aWZpY1dpbi5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV1RGL3d0Zi9UaHJlYWRTcGVjaWZpY1dp
bi5jcHAuCisgICAgICAgICogd3RmL3dpbi9UaHJlYWRpbmdXaW4uY3BwOiBSZW5hbWVkIGZyb20g
U291cmNlL1dURi93dGYvVGhyZWFkaW5nV2luLmNwcC4KKwogMjAxOS0wMS0yOCAgUm9zcyBLaXJz
bGluZyAgPHJvc3Mua2lyc2xpbmdAc29ueS5jb20+CiAKICAgICAgICAgW0pTQ09ubHldW1dURl0g
RXhwb3NlIEZpbGVTeXN0ZW0uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agppbmRleCBkOTUzYjFiYWY3ZTcyNzE4OWQwMDhjYWE4YWRiMWYzMjgxOWYxNjg2Li4xMjdjYTUw
OWQ3MjdkMDkyYWNkZmFjMmFiZTcxN2RhZjFhMzBkZWJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RG
L1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XVEYvV1RGLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTQ2LDkgKzQ2LDYgQEAKIAkJMTQwMjJGNDExOEY1QzNG
QzAwN0ZGMEVCIC8qIGxpYmJtYWxsb2MuYSBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDE0MDIyRjQwMThGNUMzRkMwMDdGRjBFQiAvKiBsaWJibWFsbG9j
LmEgKi87IH07CiAJCTE0M0RERTk2MjBDOEJDMzcwMDdGNzZGQSAvKiBFbnRpdGxlbWVudHMubW0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDNEREU5NTIw
QzhCQzM3MDA3Rjc2RkEgLyogRW50aXRsZW1lbnRzLm1tICovOyB9OwogCQkxNDNGNjExRjE1NjVG
MEY5MDBEQjUxNEEgLyogUkFNU2l6ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAxNDNGNjExRDE1NjVGMEY5MDBEQjUxNEEgLyogUkFNU2l6ZS5jcHAg
Ki87IH07Ci0JCTE0Njk0MTkzMTZFQUFGNkQwMDI0RTE0NiAvKiBSdW5Mb29wVGltZXJDRi5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDY5NDE5MTE2
RUFBRjZEMDAyNEUxNDYgLyogUnVuTG9vcFRpbWVyQ0YuY3BwICovOyB9OwotCQkxNDY5NDE5NzE2
RUFBRkY4MDAyNEUxNDYgLyogU2NoZWR1bGVQYWlyTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ2OTQxOTUxNkVBQUZGODAwMjRFMTQ2IC8qIFNj
aGVkdWxlUGFpck1hYy5tbSAqLzsgfTsKLQkJMTQ2OTQxOTkxNkVBQjA0MTAwMjRFMTQ2IC8qIFNj
aGVkdWxlUGFpckNGLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDE0Njk0MTk4MTZFQUIwNDEwMDI0RTE0NiAvKiBTY2hlZHVsZVBhaXJDRi5jcHAgKi87
IH07CiAJCTE0Njk0MTlEMTZFQUIxMEEwMDI0RTE0NiAvKiBBdXRvZHJhaW5lZFBvb2wuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ2OTQxOUIxNkVB
QjEwQTAwMjRFMTQ2IC8qIEF1dG9kcmFpbmVkUG9vbC5jcHAgKi87IH07CiAJCTFBMUQ4QjlFMTcz
MTg3OTgwMDE0MURBNCAvKiBGdW5jdGlvbkRpc3BhdGNoZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUExRDhCOUQxNzMxODc5ODAwMTQxREE0IC8q
IEZ1bmN0aW9uRGlzcGF0Y2hlci5jcHAgKi87IH07CiAJCTFBQ0FERDg0MTg4NDQ4MDEwMEQ4Qjcx
RCAvKiBEZXByZWNhdGVkU3ltYm9sc1VzZWRCeVNhZmFyaS5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBQ0FERDgyMTg4NDQ4MDEwMEQ4QjcxRCAvKiBE
ZXByZWNhdGVkU3ltYm9sc1VzZWRCeVNhZmFyaS5tbSAqLzsgfTsKQEAgLTkwLDYgKzg3LDcgQEAK
IAkJOTM5MzRCRDUxOEExRjE2OTAwRDBENkExIC8qIFN0cmluZ1ZpZXdDRi5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzkzNEJENDE4QTFGMTY5MDBE
MEQ2QTEgLyogU3RyaW5nVmlld0NGLmNwcCAqLzsgfTsKIAkJOTNGMTk5M0UxOUQ3OTU4RDAwQzIz
OTBCIC8qIFN0cmluZ1ZpZXcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gOTNGMTk5M0QxOUQ3OTU4RDAwQzIzOTBCIC8qIFN0cmluZ1ZpZXcuY3BwICov
OyB9OwogCQk5QkM3MEYwNTE3NkMzNzlEMDAxMDFERUMgLyogQXRvbWljU3RyaW5nVGFibGUuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUJDNzBGMDQx
NzZDMzc5RDAwMTAxREVDIC8qIEF0b21pY1N0cmluZ1RhYmxlLmNwcCAqLzsgfTsKKwkJQTMyRDhG
QTUyMUZGRkFCNDAwNzgwNjYyIC8qIFRocmVhZGluZ1BPU0lYLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEzMkQ4RkE0MjFGRkZBQjQwMDc4MDY2MiAv
KiBUaHJlYWRpbmdQT1NJWC5jcHAgKi87IH07CiAJCUEzMzFEOTVCMjFGMjQ5OTIwMDlGMDJBQSAv
KiBGaWxlU3lzdGVtLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEEzMzFEOTVBMjFGMjQ5OTIwMDlGMDJBQSAvKiBGaWxlU3lzdGVtLmNwcCAqLzsgfTsK
IAkJQTMzMUQ5NUQyMUYyNDlFNDAwOUYwMkFBIC8qIEZpbGVTeXN0ZW1DRi5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMzMxRDk1QzIxRjI0OUU0MDA5
RjAyQUEgLyogRmlsZVN5c3RlbUNGLmNwcCAqLzsgfTsKIAkJQTMzMUQ5NUYyMUYyNDlGNjAwOUYw
MkFBIC8qIEZpbGVTeXN0ZW1Db2NvYS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEEzMzFEOTVFMjFGMjQ5RjYwMDlGMDJBQSAvKiBGaWxlU3lzdGVtQ29j
b2EubW0gKi87IH07CkBAIC05Nyw2ICs5NSwxMCBAQAogCQlBMzMxRDk2NzIxRjI0QUJEMDA5RjAy
QUEgLyogRmlsZVN5c3RlbVBPU0lYLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEEzMzFEOTY2MjFGMjRBQkQwMDlGMDJBQSAvKiBGaWxlU3lzdGVtUE9T
SVguY3BwICovOyB9OwogCQlBM0I3MjVFQzk4NzQ0NkFEOTNGMUE0NDAgLyogUmFuZG9tRGV2aWNl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM4RjU5
N0NBMkE1NzQxN0ZCQUI5MkZENiAvKiBSYW5kb21EZXZpY2UuY3BwICovOyB9OwogCQlBM0U0REQ5
MzFGM0E4MDM0MDBERUQwQjQgLyogVGV4dFN0cmVhbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBM0U0REQ5MTFGM0E4MDM0MDBERUQwQjQgLyogVGV4
dFN0cmVhbS5jcHAgKi87IH07CisJCUEzRUU1QzNBMjFGRkFDNUYwMEZBQkQ2MSAvKiBPU0FsbG9j
YXRvclBPU0lYLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEEzRUU1QzM5MjFGRkFDNUUwMEZBQkQ2MSAvKiBPU0FsbG9jYXRvclBPU0lYLmNwcCAqLzsg
fTsKKwkJQTNFRTVDM0QyMUZGQUM3RDAwRkFCRDYxIC8qIFNjaGVkdWxlUGFpckNGLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEzRUU1QzNCMjFGRkFD
N0MwMEZBQkQ2MSAvKiBTY2hlZHVsZVBhaXJDRi5jcHAgKi87IH07CisJCUEzRUU1QzNFMjFGRkFD
N0QwMEZBQkQ2MSAvKiBSdW5Mb29wVGltZXJDRi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBM0VFNUMzQzIxRkZBQzdEMDBGQUJENjEgLyogUnVuTG9v
cFRpbWVyQ0YuY3BwICovOyB9OworCQlBM0VFNUM0MDIxRkZBQ0EyMDBGQUJENjEgLyogU2NoZWR1
bGVQYWlyTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTNFRTVDM0YyMUZGQUNBMjAwRkFCRDYxIC8qIFNjaGVkdWxlUGFpck1hYy5tbSAqLzsgfTsK
IAkJQTVCQTE1RjMxODI0MzNBOTAwQTgyRTY5IC8qIFN0cmluZ0NvY29hLm1tIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTVCQTE1RjIxODI0MzNBOTAwQTgy
RTY5IC8qIFN0cmluZ0NvY29hLm1tICovOyB9OwogCQlBNUJBMTVGNTE4MjQzNDgwMDBBODJFNjkg
LyogU3RyaW5nSW1wbENvY29hLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTVCQTE1RjQxODI0MzQ4MDAwQTgyRTY5IC8qIFN0cmluZ0ltcGxDb2NvYS5t
bSAqLzsgfTsKIAkJQTVCQTE1RkExODI0MzVBNjAwQTgyRTY5IC8qIEF0b21pY1N0cmluZ0ltcGxD
Ri5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNUJB
MTVGNzE4MjQzNUE2MDBBODJFNjkgLyogQXRvbWljU3RyaW5nSW1wbENGLmNwcCAqLzsgfTsKQEAg
LTEyNiw3ICsxMjgsNiBAQAogCQlBOEE0NzNFOTE1MUE4MjVCMDA0MTIzRkYgLyogTUQ1LmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QTQ3MkNBMTUx
QTgyNUIwMDQxMjNGRiAvKiBNRDUuY3BwICovOyB9OwogCQlBOEE0NzNFQzE1MUE4MjVCMDA0MTIz
RkYgLyogTWV0YUFsbG9jYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBOEE0NzJDRDE1MUE4MjVCMDA0MTIzRkYgLyogTWV0YUFsbG9jYXRvci5j
cHAgKi87IH07CiAJCUE4QTQ3M0Y0MTUxQTgyNUIwMDQxMjNGRiAvKiBOdW1iZXJPZkNvcmVzLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QTQ3MkQ1
MTUxQTgyNUIwMDQxMjNGRiAvKiBOdW1iZXJPZkNvcmVzLmNwcCAqLzsgfTsKLQkJQThBNDczRjcx
NTFBODI1QjAwNDEyM0ZGIC8qIE9TQWxsb2NhdG9yUG9zaXguY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThBNDcyRDgxNTFBODI1QjAwNDEyM0ZGIC8q
IE9TQWxsb2NhdG9yUG9zaXguY3BwICovOyB9OwogCQlBOEE0NzNGOTE1MUE4MjVCMDA0MTIzRkYg
LyogT1NSYW5kb21Tb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQThBNDcyREExNTFBODI1QjAwNDEyM0ZGIC8qIE9TUmFuZG9tU291cmNlLmNw
cCAqLzsgfTsKIAkJQThBNDc0MDIxNTFBODI1QjAwNDEyM0ZGIC8qIFBhZ2VCbG9jay5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEE0NzJFMzE1MUE4
MjVCMDA0MTIzRkYgLyogUGFnZUJsb2NrLmNwcCAqLzsgfTsKIAkJQThBNDc0MTQxNTFBODI1QjAw
NDEyM0ZGIC8qIFJhbmRvbU51bWJlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBOEE0NzJGQjE1MUE4MjVCMDA0MTIzRkYgLyogUmFuZG9tTnVtYmVy
LmNwcCAqLzsgfTsKQEAgLTE0MCw3ICsxNDEsNiBAQAogCQlBOEE0NzQ0MDE1MUE4MjVCMDA0MTIz
RkYgLyogU3RyaW5nSW1wbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBOEE0NzMyODE1MUE4MjVCMDA0MTIzRkYgLyogU3RyaW5nSW1wbC5jcHAgKi87
IH07CiAJCUE4QTQ3NDQ1MTUxQTgyNUIwMDQxMjNGRiAvKiBXVEZTdHJpbmcuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThBNDczMkQxNTFBODI1QjAw
NDEyM0ZGIC8qIFdURlN0cmluZy5jcHAgKi87IH07CiAJCUE4QTQ3NDRBMTUxQTgyNUIwMDQxMjNG
RiAvKiBUaHJlYWRpbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQThBNDczMzIxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZy5jcHAgKi87IH07
Ci0JCUE4QTQ3NDRFMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRpbmdQdGhyZWFkcy5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEE0NzMzNjE1MUE4
MjVCMDA0MTIzRkYgLyogVGhyZWFkaW5nUHRocmVhZHMuY3BwICovOyB9OwogCQlBOEE0NzQ1MTE1
MUE4MjVCMDA0MTIzRkYgLyogQmluYXJ5U2VtYXBob3JlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QTQ3MzNBMTUxQTgyNUIwMDQxMjNGRiAvKiBC
aW5hcnlTZW1hcGhvcmUuY3BwICovOyB9OwogCQlBOEE0NzQ2MDE1MUE4MjVCMDA0MTIzRkYgLyog
Q29sbGF0b3JEZWZhdWx0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE4QTQ3MzRCMTUxQTgyNUIwMDQxMjNGRiAvKiBDb2xsYXRvckRlZmF1bHQuY3Bw
ICovOyB9OwogCQlBOEE0NzQ2MzE1MUE4MjVCMDA0MTIzRkYgLyogQ29sbGF0b3JJQ1UuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThBNDczNTAxNTFB
ODI1QjAwNDEyM0ZGIC8qIENvbGxhdG9ySUNVLmNwcCAqLzsgfTsKQEAgLTI4MSwxMCArMjgxLDcg
QEAKIAkJMTQ0N0FFQzUxOEZDRTU3NzAwQjNEN0ZGIC8qIEZvdW5kYXRpb24uZnJhbWV3b3JrICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gd3JhcHBlci5m
cmFtZXdvcms7IG5hbWUgPSBGb3VuZGF0aW9uLmZyYW1ld29yazsgcGF0aCA9IC9TeXN0ZW0vTGli
cmFyeS9GcmFtZXdvcmtzL0ZvdW5kYXRpb24uZnJhbWV3b3JrOyBzb3VyY2VUcmVlID0gIjxhYnNv
bHV0ZT4iOyB9OwogCQkxNDQ3QUVDQTE4RkNFNUI5MDBCM0Q3RkYgLyogbGliaWN1Y29yZS5keWxp
YiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9ICJjb21w
aWxlZC5tYWNoLW8uZHlsaWIiOyBuYW1lID0gbGliaWN1Y29yZS5keWxpYjsgcGF0aCA9IC91c3Iv
bGliL2xpYmljdWNvcmUuZHlsaWI7IHNvdXJjZVRyZWUgPSAiPGFic29sdXRlPiI7IH07CiAJCTE0
Njk0MTkwMTZFQUFGNkQwMDI0RTE0NiAvKiBSdW5Mb29wVGltZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUnVuTG9vcFRpbWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTE0Njk0MTkxMTZFQUFGNkQwMDI0RTE0NiAvKiBSdW5Mb29wVGltZXJDRi5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSdW5Mb29wVGltZXJDRi5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0Njk0MTk0MTZFQUFGRjgwMDI0RTE0NiAvKiBT
Y2hlZHVsZVBhaXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2NoZWR1bGVQ
YWlyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTE0Njk0MTk1MTZFQUFGRjgwMDI0
RTE0NiAvKiBTY2hlZHVsZVBhaXJNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IHBhdGggPSBTY2hlZHVsZVBhaXJNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTE0Njk0MTk4MTZFQUIwNDEwMDI0RTE0NiAvKiBTY2hlZHVsZVBhaXJDRi5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTY2hlZHVsZVBhaXJDRi5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0Njk0MTlBMTZFQUIxMEEwMDI0RTE0NiAvKiBBdXRv
ZHJhaW5lZFBvb2wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXV0b2RyYWlu
ZWRQb29sLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0Njk0MTlCMTZFQUIxMEEw
MDI0RTE0NiAvKiBBdXRvZHJhaW5lZFBvb2wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gQXV0b2RyYWluZWRQb29sLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMTQ5RUYxNjIxNkJCRkUwRDAwMEE0MzMxIC8qIFRyaVN0YXRlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRyaVN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC00MzcsNiArNDM0LDcgQEAKIAkJOUM2N0M1NDI1ODkzNDhFMjg1QjQ5Njk5IC8qIElu
ZGV4ZWRDb250YWluZXJJdGVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBJbmRleGVkQ29udGFpbmVySXRlcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQTMwRDQxMkMxRjBERTBCQTAwQjcxOTU0IC8qIFNvZnRMaW5raW5nLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNvZnRMaW5raW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUEzMEQ0MTJEMUYwREUxM0YwMEI3MTk1NCAvKiBTb2Z0TGlua2luZy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTb2Z0TGlua2luZy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlBMzJEOEZBNDIxRkZGQUI0MDA3ODA2NjIgLyogVGhyZWFkaW5nUE9T
SVguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGhyZWFkaW5nUE9T
SVguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMzMxRDk1ODIxRjI0OTc4MDA5
RjAyQUEgLyogRmlsZU1ldGFkYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEZpbGVNZXRhZGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMzMxRDk1OTIx
RjI0OTkyMDA5RjAyQUEgLyogRmlsZVN5c3RlbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBGaWxlU3lzdGVtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUEzMzFE
OTVBMjFGMjQ5OTIwMDlGMDJBQSAvKiBGaWxlU3lzdGVtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEZpbGVTeXN0ZW0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtNDQ5LDYgKzQ0NywxMCBAQAogCQlBM0QyNzNCOTIxRjJFRTkxMDA4NjY5NzEgLyog
TWV0YWRhdGFTUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWV0YWRhdGFT
UEkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTNFNEREOTExRjNBODAzNDAwREVE
MEI0IC8qIFRleHRTdHJlYW0uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gVGV4dFN0cmVhbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUEzRTRERDky
MUYzQTgwMzQwMERFRDBCNCAvKiBUZXh0U3RyZWFtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFRleHRTdHJlYW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTNF
RTVDMzkyMUZGQUM1RTAwRkFCRDYxIC8qIE9TQWxsb2NhdG9yUE9TSVguY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gT1NBbGxvY2F0b3JQT1NJWC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUEzRUU1QzNCMjFGRkFDN0MwMEZBQkQ2MSAvKiBTY2hlZHVs
ZVBhaXJDRi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTY2hlZHVs
ZVBhaXJDRi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEzRUU1QzNDMjFGRkFD
N0QwMEZBQkQ2MSAvKiBSdW5Mb29wVGltZXJDRi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBSdW5Mb29wVGltZXJDRi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUEzRUU1QzNGMjFGRkFDQTIwMEZBQkQ2MSAvKiBTY2hlZHVsZVBhaXJNYWMubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBTY2hlZHVsZVBhaXJNYWMubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE1MDk4QUZGMUMxNjlFMDcwMDA4Nzc5NyAv
KiBTYW5kYm94U1BJLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNhbmRib3hT
UEkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTUwOThCMDExQzE2QTRGOTAwMDg3
Nzk3IC8qIFNlY3VyaXR5U1BJLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNl
Y3VyaXR5U1BJLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE1NjFGMzBGMURGMjY0
MjEwMEZGNjc1RCAvKiBEZXByZWNhdGVkT3B0aW9uYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gRGVwcmVjYXRlZE9wdGlvbmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC01NDAsNyArNTQyLDYgQEAKIAkJQThBNDcyRDUxNTFBODI1QjAwNDEyM0ZGIC8qIE51
bWJlck9mQ29yZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTnVt
YmVyT2ZDb3Jlcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4QTQ3MkQ2MTUx
QTgyNUIwMDQxMjNGRiAvKiBOdW1iZXJPZkNvcmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IE51bWJlck9mQ29yZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QThBNDcyRDcxNTFBODI1QjAwNDEyM0ZGIC8qIE9TQWxsb2NhdG9yLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IE9TQWxsb2NhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCUE4QTQ3MkQ4MTUxQTgyNUIwMDQxMjNGRiAvKiBPU0FsbG9jYXRvclBvc2l4LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE9TQWxsb2NhdG9yUG9zaXguY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBOEE0NzJEQTE1MUE4MjVCMDA0MTIzRkYg
LyogT1NSYW5kb21Tb3VyY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gT1NSYW5kb21Tb3VyY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBOEE0
NzJEQjE1MUE4MjVCMDA0MTIzRkYgLyogT1NSYW5kb21Tb3VyY2UuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gT1NSYW5kb21Tb3VyY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQThBNDcyREYxNTFBODI1QjAwNDEyM0ZGIC8qIFBhY2tlZEludFZlY3Rvci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYWNrZWRJbnRWZWN0b3IuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU5NSw3ICs1OTYsNiBAQAogCQlBOEE0NzMzMjE1MUE4
MjVCMDA0MTIzRkYgLyogVGhyZWFkaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFRocmVhZGluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4
QTQ3MzMzMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gVGhyZWFkaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUE4QTQ3MzM1MTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRpbmdQcmltaXRpdmVzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRocmVhZGluZ1ByaW1pdGl2ZXMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQThBNDczMzYxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVh
ZGluZ1B0aHJlYWRzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRo
cmVhZGluZ1B0aHJlYWRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThBNDcz
M0ExNTFBODI1QjAwNDEyM0ZGIC8qIEJpbmFyeVNlbWFwaG9yZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBCaW5hcnlTZW1hcGhvcmUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlBOEE0NzMzQjE1MUE4MjVCMDA0MTIzRkYgLyogQmluYXJ5U2VtYXBo
b3JlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJpbmFyeVNlbWFwaG9yZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBOEE0NzMzRTE1MUE4MjVCMDA0MTIzRkYg
LyogVGhyZWFkU2FmZVJlZkNvdW50ZWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gVGhyZWFkU2FmZVJlZkNvdW50ZWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTczNSw2ICs3MzUsOCBAQAogCQkJCUEzMzFEOTVDMjFGMjQ5RTQwMDlGMDJBQSAvKiBGaWxlU3lz
dGVtQ0YuY3BwICovLAogCQkJCUMyQkNGQzQxMUY2MUQ2MTYwMEM5MjIyQyAvKiBMYW5ndWFnZUNG
LmNwcCAqLywKIAkJCQkyQ0RFRDBFRTE4MTE1QzM4MDA0REJBNzAgLyogUnVuTG9vcENGLmNwcCAq
LywKKwkJCQlBM0VFNUMzQzIxRkZBQzdEMDBGQUJENjEgLyogUnVuTG9vcFRpbWVyQ0YuY3BwICov
LAorCQkJCUEzRUU1QzNCMjFGRkFDN0MwMEZBQkQ2MSAvKiBTY2hlZHVsZVBhaXJDRi5jcHAgKi8s
CiAJCQkJMUFGREU2NDcxOTUyMDFDMzAwQzQ4RkZBIC8qIFR5cGVDYXN0c0NGLmggKi8sCiAJCQkJ
NUMxRjA1OTQyMTY0MzdCMzAwMzkzMDJDIC8qIFVSTENGLmNwcCAqLywKIAkJCSk7CkBAIC03OTQs
NiArNzk2LDggQEAKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCiAJCQkJQTMz
MUQ5NjYyMUYyNEFCRDAwOUYwMkFBIC8qIEZpbGVTeXN0ZW1QT1NJWC5jcHAgKi8sCisJCQkJQTNF
RTVDMzkyMUZGQUM1RTAwRkFCRDYxIC8qIE9TQWxsb2NhdG9yUE9TSVguY3BwICovLAorCQkJCUEz
MkQ4RkE0MjFGRkZBQjQwMDc4MDY2MiAvKiBUaHJlYWRpbmdQT1NJWC5jcHAgKi8sCiAJCQkpOwog
CQkJcGF0aCA9IHBvc2l4OwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTEwMzQsNyAr
MTAzOCw2IEBACiAJCQkJMUE0NjU2MTgxQzdGQzY4RTAwRjU5MjBGIC8qIE9wdGlvblNldC5oICov
LAogCQkJCTBGOTQ5NTgzMUM1NzFDQzkwMDQxM0E0OCAvKiBPcmRlck1ha2VyLmggKi8sCiAJCQkJ
QThBNDcyRDcxNTFBODI1QjAwNDEyM0ZGIC8qIE9TQWxsb2NhdG9yLmggKi8sCi0JCQkJQThBNDcy
RDgxNTFBODI1QjAwNDEyM0ZGIC8qIE9TQWxsb2NhdG9yUG9zaXguY3BwICovLAogCQkJCTdDQkJB
MDczMTlCQjdGREMwMEJCRjAyNSAvKiBPU09iamVjdFB0ci5oICovLAogCQkJCUE4QTQ3MkRBMTUx
QTgyNUIwMDQxMjNGRiAvKiBPU1JhbmRvbVNvdXJjZS5jcHAgKi8sCiAJCQkJQThBNDcyREIxNTFB
ODI1QjAwNDEyM0ZGIC8qIE9TUmFuZG9tU291cmNlLmggKi8sCkBAIC0xMDkwLDExICsxMDkzLDgg
QEAKIAkJCQkyQ0RFRDBGMTE4MTE1Qzg1MDA0REJBNzAgLyogUnVuTG9vcC5jcHAgKi8sCiAJCQkJ
MkNERUQwRjIxODExNUM4NTAwNERCQTcwIC8qIFJ1bkxvb3AuaCAqLywKIAkJCQkxNDY5NDE5MDE2
RUFBRjZEMDAyNEUxNDYgLyogUnVuTG9vcFRpbWVyLmggKi8sCi0JCQkJMTQ2OTQxOTExNkVBQUY2
RDAwMjRFMTQ2IC8qIFJ1bkxvb3BUaW1lckNGLmNwcCAqLywKIAkJCQkxNEYzQjBGNjE1RTQ1RTQ2
MDAyMTAwNjkgLyogU2F0dXJhdGVkQXJpdGhtZXRpYy5oICovLAogCQkJCTE0Njk0MTk0MTZFQUFG
RjgwMDI0RTE0NiAvKiBTY2hlZHVsZVBhaXIuaCAqLywKLQkJCQkxNDY5NDE5ODE2RUFCMDQxMDAy
NEUxNDYgLyogU2NoZWR1bGVQYWlyQ0YuY3BwICovLAotCQkJCTE0Njk0MTk1MTZFQUFGRjgwMDI0
RTE0NiAvKiBTY2hlZHVsZVBhaXJNYWMubW0gKi8sCiAJCQkJMUEzNTI0QUExRDYzQTJGRjAwMzE3
MjlCIC8qIFNjb3BlLmggKi8sCiAJCQkJMEZFQzg0QjAxQkRBQ0QzOTAwODBGRjc0IC8qIFNjb3Bl
ZExhbWJkYS5oICovLAogCQkJCTBGNjZCMjg0MURDOTdCQUIwMDRBMUQzRiAvKiBTZWNvbmRzLmNw
cCAqLywKQEAgLTExNDUsNyArMTE0NSw2IEBACiAJCQkJQThBNDczMzIxNTFBODI1QjAwNDEyM0ZG
IC8qIFRocmVhZGluZy5jcHAgKi8sCiAJCQkJQThBNDczMzMxNTFBODI1QjAwNDEyM0ZGIC8qIFRo
cmVhZGluZy5oICovLAogCQkJCUE4QTQ3MzM1MTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRpbmdQ
cmltaXRpdmVzLmggKi8sCi0JCQkJQThBNDczMzYxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGlu
Z1B0aHJlYWRzLmNwcCAqLywKIAkJCQk1MzExQkQ1QjFFQTgyMkY5MDA1MjUyODEgLyogVGhyZWFk
TWVzc2FnZS5jcHAgKi8sCiAJCQkJNTMxMUJENTkxRUE4MUE5NjAwNTI1MjgxIC8qIFRocmVhZE1l
c3NhZ2UuaCAqLywKIAkJCQlBOEE0NzMzRTE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkU2FmZVJl
ZkNvdW50ZWQuaCAqLywKQEAgLTEyMjksNiArMTIyOCw3IEBACiAJCQkJMUFDQUREODIxODg0NDgw
MTAwRDhCNzFEIC8qIERlcHJlY2F0ZWRTeW1ib2xzVXNlZEJ5U2FmYXJpLm1tICovLAogCQkJCUEz
MzFEOTYwMjFGMjRBMEEwMDlGMDJBQSAvKiBGaWxlU3lzdGVtTWFjLm1tICovLAogCQkJCTUzNTM0
RjI5MUVDMEUxMEUwMDE0MUIyRiAvKiBNYWNoRXhjZXB0aW9ucy5kZWZzICovLAorCQkJCUEzRUU1
QzNGMjFGRkFDQTIwMEZBQkQ2MSAvKiBTY2hlZHVsZVBhaXJNYWMubW0gKi8sCiAJCQkpOwogCQkJ
cGF0aCA9IG1hYzsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0xNTQ4LDcgKzE1NDgs
NyBAQAogCQkJCTBGNjZCMjhDMURDOTdCQUIwMDRBMUQzRiAvKiBNb25vdG9uaWNUaW1lLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTVDQzBFRThBMjE2MkJDMjIwMEExQTg0MiAvKiBOU1VSTEV4dHJh
cy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3M0Y0MTUxQTgyNUIwMDQxMjNGRiAvKiBOdW1i
ZXJPZkNvcmVzLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUE4QTQ3M0Y3MTUxQTgyNUIwMDQxMjNG
RiAvKiBPU0FsbG9jYXRvclBvc2l4LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEzRUU1QzNBMjFG
RkFDNUYwMEZBQkQ2MSAvKiBPU0FsbG9jYXRvclBPU0lYLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUE4QTQ3M0Y5MTUxQTgyNUIwMDQxMjNGRiAvKiBPU1JhbmRvbVNvdXJjZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBOEE0NzQwMjE1MUE4MjVCMDA0MTIzRkYgLyogUGFnZUJsb2NrLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGRkYxOURDMUJCMzM0RUIwMDg4NkQ5MSAvKiBQYXJhbGxlbEhlbHBl
clBvb2wuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0xNTY2LDkgKzE1NjYsOSBAQAogCQkJCUE4QTQ3
NDFBMTUxQTgyNUIwMDQxMjNGRiAvKiBSZWZDb3VudGVkTGVha0NvdW50ZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMkNERUQwRjMxODExNUM4NTAwNERCQTcwIC8qIFJ1bkxvb3AuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMkNERUQwRUYxODExNUMzODAwNERCQTcwIC8qIFJ1bkxvb3BDRi5jcHAg
aW4gU291cmNlcyAqLywKLQkJCQkxNDY5NDE5MzE2RUFBRjZEMDAyNEUxNDYgLyogUnVuTG9vcFRp
bWVyQ0YuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMTQ2OTQxOTkxNkVBQjA0MTAwMjRFMTQ2IC8q
IFNjaGVkdWxlUGFpckNGLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTE0Njk0MTk3MTZFQUFGRjgw
MDI0RTE0NiAvKiBTY2hlZHVsZVBhaXJNYWMubW0gaW4gU291cmNlcyAqLywKKwkJCQlBM0VFNUMz
RTIxRkZBQzdEMDBGQUJENjEgLyogUnVuTG9vcFRpbWVyQ0YuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJQTNFRTVDM0QyMUZGQUM3RDAwRkFCRDYxIC8qIFNjaGVkdWxlUGFpckNGLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCUEzRUU1QzQwMjFGRkFDQTIwMEZBQkQ2MSAvKiBTY2hlZHVsZVBhaXJNYWMu
bW0gaW4gU291cmNlcyAqLywKIAkJCQkwRjY2QjI4RTFEQzk3QkFCMDA0QTFEM0YgLyogU2Vjb25k
cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzQyMTE1MUE4MjVCMDA0MTIzRkYgLyogU0hB
MS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MzExQkQ1MzFFQTcxQ0FEMDA1MjUyODEgLyogU2ln
bmFscy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTE1OTcsNyArMTU5Nyw3IEBACiAJCQkJQTNFNERE
OTMxRjNBODAzNDAwREVEMEI0IC8qIFRleHRTdHJlYW0uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
RTMxMUZCMTcxRjBBNTY4QjAwM0MwOERFIC8qIFRocmVhZEdyb3VwLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUE4QTQ3NDRBMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRpbmcuY3BwIGluIFNvdXJj
ZXMgKi8sCi0JCQkJQThBNDc0NEUxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZ1B0aHJlYWRz
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEzMkQ4RkE1MjFGRkZBQjQwMDc4MDY2MiAvKiBUaHJl
YWRpbmdQT1NJWC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MzExQkQ1QzFFQTgyMkY5MDA1MjUy
ODEgLyogVGhyZWFkTWVzc2FnZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjY2QjI5MDFEQzk3
QkFCMDA0QTFEM0YgLyogVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGNzA3NUY1MUZCRjUzQ0QwMDQ4OUFGMCAvKiBUaW1pbmdTY29wZS5jcHAgaW4gU291
cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0IGIvU291
cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKaW5kZXggNmJmYmNmNWIwYmMxNGYyY2NkNmRiZWMw
NjlmNDRlMTM3ZmYwZTYwNS4uMTc4MzgzZGZmNDkxYjRiMWJiMWEyZDY5MDAwZDJmNmE0MzBlMGI1
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNl
L1dURi93dGYvQ01ha2VMaXN0cy50eHQKQEAgLTQ5MiwyMyArNDkyLDYgQEAgbGlzdChBUFBFTkQg
V1RGX0xJQlJBUklFUwogICAgICR7SUNVX0xJQlJBUklFU30KICkKIAotaWYgKFdJTjMyKQotICAg
IGxpc3QoQVBQRU5EIFdURl9TT1VSQ0VTCi0gICAgICAgIE9TQWxsb2NhdG9yV2luLmNwcAotICAg
ICAgICBUaHJlYWRTcGVjaWZpY1dpbi5jcHAKLSAgICAgICAgVGhyZWFkaW5nV2luLmNwcAotICAg
ICkKLSAgICBsaXN0KEFQUEVORCBXVEZfTElCUkFSSUVTCi0gICAgICAgIERiZ0hlbHAKLSAgICAg
ICAgd2lubW0KLSAgICApCi1lbHNlICgpCi0gICAgbGlzdChBUFBFTkQgV1RGX1NPVVJDRVMKLSAg
ICAgICAgT1NBbGxvY2F0b3JQb3NpeC5jcHAKLSAgICAgICAgVGhyZWFkaW5nUHRocmVhZHMuY3Bw
Ci0gICAgKQotZW5kaWYgKCkKLQogV0VCS0lUX0ZSQU1FV09SS19ERUNMQVJFKFdURikKIFdFQktJ
VF9JTkNMVURFX0NPTkZJR19GSUxFU19JRl9FWElTVFMoKQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V1RGL3d0Zi9DT05UUklCVVRPUlMucHRocmVhZHMtd2luMzIgYi9Tb3VyY2UvV1RGL3d0Zi9DT05U
UklCVVRPUlMucHRocmVhZHMtd2luMzIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdk
ZTBmMjYwNjU5ZTQ0ZTRlNmY3MjhkZDg3ZmU5Y2Q5YjBkOThkMTQuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dURi93dGYvQ09OVFJJQlVUT1JT
LnB0aHJlYWRzLXdpbjMyCisrKyAvZGV2L251bGwKQEAgLTEsMTM3ICswLDAgQEAKLVRoaXMgaXMg
YSBjb3B5IG9mIENPTlRSSUJVVE9SUyBmaWxlIGZvciB0aGUgUHRocmVhZHMtd2luMzIgbGlicmFy
eSwgZG93bmxvYWRlZAotZnJvbSBodHRwOi8vc291cmNld2FyZS5vcmcvY2dpLWJpbi9jdnN3ZWIu
Y2dpL35jaGVja291dH4vcHRocmVhZHMvQ09OVFJJQlVUT1JTP3Jldj0xLjMyJmN2c3Jvb3Q9cHRo
cmVhZHMtd2luMzIKLQotSW5jbHVkZWQgaGVyZSB0byBjb21wbGltZW50IHRoZSBQdGhyZWFkcy13
aW4zMiBsaWNlbnNlIGhlYWRlciBpbiB3dGYvVGhyZWFkaW5nV2luLmNwcCBmaWxlLgotV2ViS2l0
IGlzIHVzaW5nIGRlcml2ZWQgc291cmNlcyBvZiBUaHJlYWRDb25kaXRpb24gY29kZSBmcm9tIFB0
aHJlYWRzLXdpbjMyLgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUNvbnRyaWJ1dG9ycyAo
aW4gYXBwcm94aW1hdGUgb3JkZXIgb2YgYXBwZWFyYW5jZSkKLQotW1NlZSBhbHNvIHRoZSBDaGFu
Z2VMb2cgZmlsZSB3aGVyZSBpbmRpdmlkdWFscyBhcmUKLWF0dHJpYnV0ZWQgaW4gbG9nIGVudHJp
ZXMuIExpa2V3aXNlIGluIHRoZSBGQVEgZmlsZS5dCi0KLUJlbiBFbGxpc3RvbgkJYmplIGF0IGN5
Z251cyBkb3QgY29tCi0JCQkJCUluaXRpYXRlZCB0aGUgcHJvamVjdDsKLQkJCQkJc2V0dXAgdGhl
IHByb2plY3QgaW5mcmFzdHJ1Y3R1cmUgKENWUywgd2ViIHBhZ2UsIGV0Yy4pOwotCQkJCQllYXJs
eSBwcm90b3R5cGUgcm91dGluZXMuCi1Sb3NzIEpvaG5zb24JCXJwaiBhdCBjYWxsaXN0byBkb3Qg
Y2FuYmVycmEgZG90IGVkdSBkb3QgYXUKLQkJCQkJZWFybHkgcHJvdG90eXBlIHJvdXRpbmVzOwot
CQkJCQlvbmdvaW5nIHByb2plY3QgY29vcmRpbmF0aW9uL21haW50ZW5hbmNlOwotCQkJCQlpbXBs
ZW1lbnRhdGlvbiBvZiBzcGluIGxvY2tzIGFuZCBiYXJyaWVyczsKLQkJCQkJdmFyaW91cyBlbmhh
bmNlbWVudHM7Ci0JCQkJCWJ1ZyBmaXhlczsKLQkJCQkJZG9jdW1lbnRhdGlvbjsKLQkJCQkJdGVz
dHN1aXRlLgotUm9iZXJ0IENvbHF1aG91bglyamMgYXQgdHJ1bXAgZG90IG5ldCBkb3QgYXUKLQkJ
CQkJRWFybHkgYnVnIGZpeGVzLgotSm9obiBFLiBCb3Nzb20JCUpvaG4gZG90IEJvc3NvbSBhdCBj
b2dub3MgZG90IGNvbQotCQkJCQlDb250cmlidXRlZCBzdWJzdGFudGlhbCBvcmlnaW5hbCB3b3Jr
aW5nIGltcGxlbWVudGF0aW9uOwotCQkJCQlidWcgZml4ZXM7Ci0JCQkJCW9uZ29pbmcgZ3VpZGFu
Y2UgYW5kIHN0YW5kYXJkcyBpbnRlcnByZXRhdGlvbi4KLUFuZGVycyBOb3JsYW5kZXIJYW5vcmxh
bmQgYXQgaGVtMiBkb3QgcGFzc2FnZW4gZG90IHNlCi0JCQkJCUVhcmx5IGVuaGFuY2VtZW50cyBh
bmQgcnVudGltZSBjaGVja2luZyBmb3Igc3VwcG9ydGVkCi0JCQkJCVdpbjMyIHJvdXRpbmVzLgot
VG9yIExpbGxxdmlzdAkJdG1sIGF0IGlraSBkb3QgZmkKLQkJCQkJR2VuZXJhbCBlbmhhbmNlbWVu
dHM7Ci0JCQkJCWVhcmx5IGJ1ZyBmaXhlcyB0byBjb25kaXRpb24gdmFyaWFibGVzLgotU2NvdHQg
TGlnaHRuZXIJCXNjb3R0IGF0IGN1cnJpY3VsdW0gZG90IGNvbQotCQkJCQlCdWcgZml4LgotS2V2
aW4gUnVsYW5kCQlLZXZpbiBkb3QgUnVsYW5kIGF0IGFuaGV1c2VyLWJ1c2NoIGRvdCBjb20KLQkJ
CQkJVmFyaW91cyBidWcgZml4ZXMuCi1NaWtlIFJ1c3NvCQltaWtlciBhdCBlYWkgZG90IGNvbQot
CQkJCQlCdWcgZml4LgotTWFyayBFLiBBcm1zdHJvbmcJYXZhaWwgYXQgcGFjYmVsbCBkb3QgbmV0
Ci0JCQkJCUJ1ZyBmaXhlcy4KLUxvcmluIEhvY2hzdGVpbiAJbG1oIGF0IHhpcGhvcyBkb3QgY2EK
LQkJCQkJZ2VuZXJhbCBidWcgZml4ZXM7IGJ1ZyBmaXhlcyB0byBjb25kaXRpb24gdmFyaWFibGVz
LgotUGV0ZXIgU2xhY2lrCQlQZXRlciBkb3QgU2xhY2lrIGF0IHRhdHJhbWVkIGRvdCBzawotCQkJ
CQlCdWcgZml4ZXMuCi1NdW1pdCBLaGFuCQlraGFuIGF0IHhyYXlsaXRoIGRvdCB3aXNjIGRvdCBl
ZHUKLQkJCQkJRml4ZXMgdG8gd29yayB3aXRoIE1pbmd3MzIuCi1NaWxhbiBHYXJkaWFuCQltZyBh
dCB0YXRyYW1lZCBkb3Qgc2sKLQkJCQkJQnVnIGZpeGVzIGFuZCByZXBvcnRzL2FuYWx5c2VzIG9m
IG9ic2N1cmUgcHJvYmxlbXMuCi1BdXJlbGlvIE1lZGluYQkJYXVyZWxpb20gYXQgY3J0IGRvdCBj
b20KLQkJCQkJRmlyc3QgaW1wbGVtZW50YXRpb24gb2YgcmVhZC13cml0ZSBsb2Nrcy4KLUdyYWhh
bSBEdW1wbGV0b24JR3JhaGFtIGRvdCBEdW1wbGV0b24gYXQgcmEgZG90IHBhZCBkb3Qgb3RjIGRv
dCB0ZWxzdHJhIGRvdCBjb20gZG90IGF1Ci0JCQkJCUJ1ZyBmaXggaW4gY29uZGl0aW9uIHZhcmlh
Ymxlcy4KLVRyaXN0YW4gU2F2YXRpZXIJdHJpc3RhbiBhdCBtcGVndHYgZG90IGNvbQotCQkJCQlX
aW5DRSBwb3J0LgotRXJpayBIZW5zZW1hCQllcmlrIGF0IGhlbnNlbWEgZG90IHhzNGFsbCBkb3Qg
bmwKLQkJCQkJQnVnIGZpeGVzLgotUmljaCBQZXRlcnMJCXJwZXRlcnMgYXQgbWljcm8tbWFnaWMg
ZG90IGNvbQotVG9kZCBPd2VuCQl0b3dlbiBhdCBsdWNpZGNhbG0gZG90IGRyb3BiZWFyIGRvdCBp
ZCBkb3QgYXUKLQkJCQkJQnVnIGZpeGVzIHRvIGRsbCBsb2FkaW5nLgotSmFzb24gTnllCQlqbnll
IGF0IG5ibmV0IGRvdCBuYiBkb3QgY2EKLQkJCQkJSW1wbGVtZW50YXRpb24gb2YgYXN5bmMgY2Fu
Y2VsYXRpb24uCi1GcmVkIEZvcmVzdGVyCQlmZm9yZXN0IGF0IGV0aWNvbW0gZG90IG5ldAotS2V2
aW4gRC4gQ2xhcmsJCWtjbGFyayBhdCBjYWJsZXRyb24gZG90IGNvbQotRGF2aWQgQmFnZ2V0dAkJ
ZG1iIGF0IGl0YXNvZnR3YXJlIGRvdCBjb20KLQkJCQkJQnVnIGZpeGVzLgotUGF1bCBSZWRvbmRv
CQlwYXVsIGF0IG1hdGNodmlzaW9uIGRvdCBjb20KLVNjb3R0IE1jQ2Fza2lsbCAJc2NvdHQgYXQg
M2RmeCBkb3QgY29tCi0JCQkJCUJ1ZyBmaXhlcy4KLUplZiBHZWFyaGFydAkJamdlYXJoYXJ0IGF0
IHRwc3N5cyBkb3QgY29tCi0JCQkJCUJ1ZyBmaXguCi1BcnRodXIgS2FudG9yCQlha2FudG9yIGF0
IGJleHVzYSBkb3QgY29tCi0JCQkJCU11dGV4IGVuaGFuY2VtZW50cy4KLVN0ZXZlbiBSZWRkaWUJ
CXNtciBhdCBlc3NlbWVyIGRvdCBjb20gZG90IGF1Ci0JCQkJCUJ1ZyBmaXguCi1BbGV4YW5kZXIg
VGVyZWtob3YJVEVSRUtIT1YgYXQgZGUgZG90IGlibSBkb3QgY29tCi0JCQkJCVJlLWltcGxlbWVu
dGVkIGFuZCBpbXByb3ZlZCByZWFkLXdyaXRlIGxvY2tzOwotCQkJCQkod2l0aCBMb3VpcyBUaG9t
YXMpIHJlLWltcGxlbWVudGVkIGFuZCBpbXByb3ZlZAotCQkJCQljb25kaXRpb24gdmFyaWFibGVz
OwotCQkJCQllbmhhbmNlbWVudHMgdG8gc2VtYXBob3JlczsKLQkJCQkJZW5oYW5jZW1lbnRzIHRv
IG11dGV4ZXM7Ci0JCQkJCW5ldyBtdXRleCBpbXBsZW1lbnRhdGlvbiBpbiAnZnV0ZXgnIHN0eWxl
OwotCQkJCQlzdWdnZXN0ZWQgYSByb2J1c3QgaW1wbGVtZW50YXRpb24gb2YgcHRocmVhZF9vbmNl
Ci0JCQkJCXNpbWlsYXIgdG8gdGhhdCBpbXBsZW1lbnRlZCBieSBWLktsaWF0aGNrbzsKLQkJCQkJ
c3lzdGVtIGNsb2NrIGNoYW5nZSBoYW5kbGluZyByZSBDViB0aW1lb3V0czsKLQkJCQkJYnVnIGZp
eGVzLgotVGhvbWFzIFBmYWZmCQl0cGZhZmYgYXQgZ214IGRvdCBuZXQKLQkJCQkJQ2hhbmdlcyB0
byBtYWtlIEMgdmVyc2lvbiB1c2FibGUgd2l0aCBDKysgYXBwbGljYXRpb25zOwotCQkJCQlyZS1p
bXBsZW1lbnRlZCBtdXRleCByb3V0aW5lcyB0byBhdm9pZCBXaW4zMiBtdXRleGVzCi0JCQkJCWFu
ZCBUcnlFbnRlckNyaXRpY2FsU2VjdGlvbjsKLQkJCQkJcHJvY2VkdXJlIHRvIGZpeCBNaW5ndzMy
IHRocmVhZC1zYWZldHkgaXNzdWVzLgotRnJhbmNvIEJlegkJZnJhbmNvIGRvdCBiZXogYXQgZ214
IGRvdCBkZQotCQkJCQlwcm9jZWR1cmUgdG8gZml4IE1pbmd3MzIgdGhyZWFkLXNhZmV0eSBpc3N1
ZXMuCi1Mb3VpcyBUaG9tYXMJCWx0aG9tYXMgYXQgYXJiaXRyYWRlIGRvdCBjb20KLQkJCQkJKHdp
dGggQWxleGFuZGVyIFRlcmVraG92KSByZS1pbXBsZW1lbnRlZCBhbmQgaW1wcm92ZWQKLQkJCQkJ
Y29uZGl0aW9uIHZhcmlhYmxlcy4KLURhdmlkIEtvcm4JCWRnayBhdCByZXNlYXJjaCBkb3QgYXR0
IGRvdCBjb20KLQkJCQkJUG9ydGVkIHRvIFVXSU4uCi1QaGlsIEZyaXNiaWUsIEpyLglwaGlsIGF0
IGhhd2tzb2Z0IGRvdCBjb20KLQkJCQkJQnVnIGZpeC4KLVJhbGYgQnJlc2UJCVJhbGYgZG90IEJy
ZXNlIGF0IHBkYjQgZG90IHNpZW1lbnMgZG90IGRlCi0JCQkJCUJ1ZyBmaXguCi1wcmlvbnggYXQg
anVubyBkb3QgY29tIAlwcmlvbnggYXQganVubyBkb3QgY29tCi0JCQkJCUJ1ZyBmaXhlcy4KLU1h
eCBXb29kYnVyeQkJbXRldyBhdCBjZHMgZG90IGR1a2UgZG90IGVkdQotCQkJCQlQT1NJWCB2ZXJz
aW9uaW5nIGNvbmRpdGlvbmFsczsKLQkJCQkJcmVkdWNlZCBuYW1lc3BhY2UgcG9sbHV0aW9uOwot
CQkJCQlpZGVhIHRvIHNlcGFyYXRlIHJvdXRpbmVzIHRvIHJlZHVjZSBzdGF0aWNhbGx5Ci0JCQkJ
CWxpbmtlZCBpbWFnZSBzaXplcy4KLVJvYiBGYW5uZXIJCXJmYW5uZXIgYXQgc3RvbmV0aHJlZSBk
b3QgY29tCi0JCQkJCUJ1ZyBmaXguCi1NaWNoYWVsIEpvaG5zb24gCW1pY2hhZWxqIGF0IG1haW5l
IGRvdCByciBkb3QgY29tCi0JCQkJCUJ1ZyBmaXguCi1OaWNvbGFzIEJhcnJ5CQlib296YWkgYXQg
eWFob28gZG90IGNvbQotCQkJCQlCdWcgZml4ZXMuCi1QaWV0IHZhbiBCcnVnZ2VuCXBpZXR2YiBh
dCBuZXdicmlkZ2VzIGRvdCBubAotCQkJCQlCdWcgZml4LgotTWFrb3RvIEthdG8JCXJhdmVuIGF0
IG9sZHNrb29sIGRvdCBqcAotCQkJCQlBTUQ2NCBwb3J0LgotUGFuYWdpb3RpcyBFLiBIYWRqaWRv
dWthcwlwZWggYXQgaHBjbGFiIGRvdCBjZWlkIGRvdCB1cGF0cmFzIGRvdCBncgotCQkJCQlDb250
cmlidXRlZCB0aGUgUXVldWVVc2VyQVBDRXggcGFja2FnZSB3aGljaAotCQkJCQltYWtlcyBwcmVl
bXB0aXZlIGFzeW5jIGNhbmNlbGF0aW9uIHBvc3NpYmxlLgotV2lsbCBCcnlhbnQJCXdpbGwgZG90
IGJyeWFudCBhdCBlY29zbSBkb3QgY29tCi0JCQkJCUJvcmxhbmQgY29tcGlsZXIgcGF0Y2ggYW5k
IG1ha2VmaWxlLgotQW51aiBHb3lhbAkJYW51aiBkb3QgZ295YWwgYXQgZ21haWwgZG90IGNvbQot
CQkJCQlQb3J0IHRvIERpZ2l0YWwgTWFycyBjb21waWxlci4KLUdvdHRsb2IgRnJlZ2UJCWdvdHRs
b2JmcmVnZSBhdCAgZ21haWwgZG90IGNvbQotCQkJCQlyZS1pbXBsZW1lbnRlZCBwdGhyZWFkX29u
Y2UgKHZlcnNpb24gMikKLQkJCQkJKHB0aHJlYWRfb25jZSBjYW5jZWxsYXRpb24gYWRkZWQgYnkg
cnBqKS4KLVZsYWRpbWlyIEtsaWF0Y2hrbwl2bGFkaW1pciBhdCBrbGlhdGNoa28gZG90IGNvbQot
CQkJCQlyZWltcGxlbWVudGVkIHB0aHJlYWRfb25jZSB3aXRoIHRoZSBzYW1lIGZvcm0KLQkJCQkJ
YXMgZGVzY3JpYmVkIGJ5IEEuVGVyZWtob3YgKGxhdGVyIHZlcnNpb24gMik7Ci0JCQkJCWltcGxl
bWVudGF0aW9uIG9mIE1DUyAoTWVsbG9yLUNydW1tZXkvU2NvdHQpIGxvY2tzLgpcIE5vIG5ld2xp
bmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL09TQWxsb2NhdG9y
UG9zaXguY3BwIGIvU291cmNlL1dURi93dGYvT1NBbGxvY2F0b3JQb3NpeC5jcHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkyM2E4ODQzZWViN2FkNGI2NTg0ODI0ZTBlOWQ5YzMzM2Qx
MTRhZDYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dURi93dGYvT1NBbGxvY2F0b3JQb3NpeC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxODYg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlIDx3dGYv
T1NBbGxvY2F0b3IuaD4KLQotI2lmIE9TKFVOSVgpCi0KLSNpbmNsdWRlIDxlcnJuby5oPgotI2lu
Y2x1ZGUgPHN5cy9tbWFuLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbmNsdWRl
IDx3dGYvUGFnZUFsbG9jYXRpb24uaD4KLQotbmFtZXNwYWNlIFdURiB7Ci0KLXZvaWQqIE9TQWxs
b2NhdG9yOjpyZXNlcnZlVW5jb21taXR0ZWQoc2l6ZV90IGJ5dGVzLCBVc2FnZSB1c2FnZSwgYm9v
bCB3cml0YWJsZSwgYm9vbCBleGVjdXRhYmxlLCBib29sIGluY2x1ZGVzR3VhcmRQYWdlcykKLXsK
LSNpZiBPUyhMSU5VWCkKLSAgICBVTlVTRURfUEFSQU0odXNhZ2UpOwotICAgIFVOVVNFRF9QQVJB
TSh3cml0YWJsZSk7Ci0gICAgVU5VU0VEX1BBUkFNKGV4ZWN1dGFibGUpOwotICAgIFVOVVNFRF9Q
QVJBTShpbmNsdWRlc0d1YXJkUGFnZXMpOwotCi0gICAgdm9pZCogcmVzdWx0ID0gbW1hcCgwLCBi
eXRlcywgUFJPVF9OT05FLCBNQVBfTk9SRVNFUlZFIHwgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTiwg
LTEsIDApOwotICAgIGlmIChyZXN1bHQgPT0gTUFQX0ZBSUxFRCkKLSAgICAgICAgQ1JBU0goKTsK
LSAgICBtYWR2aXNlKHJlc3VsdCwgYnl0ZXMsIE1BRFZfRE9OVE5FRUQpOwotI2Vsc2UKLSAgICB2
b2lkKiByZXN1bHQgPSByZXNlcnZlQW5kQ29tbWl0KGJ5dGVzLCB1c2FnZSwgd3JpdGFibGUsIGV4
ZWN1dGFibGUsIGluY2x1ZGVzR3VhcmRQYWdlcyk7Ci0jaWYgSEFWRShNQURWX0ZSRUVfUkVVU0Up
Ci0gICAgaWYgKHJlc3VsdCkgewotICAgICAgICAvLyBUbyBzdXBwb3J0IHRoZSAicmVzZXJ2ZSB0
aGVuIGNvbW1pdCIgbW9kZWwsIHdlIGhhdmUgdG8gaW5pdGlhbGx5IGRlY29tbWl0LgotICAgICAg
ICB3aGlsZSAobWFkdmlzZShyZXN1bHQsIGJ5dGVzLCBNQURWX0ZSRUVfUkVVU0FCTEUpID09IC0x
ICYmIGVycm5vID09IEVBR0FJTikgeyB9Ci0gICAgfQotI2VuZGlmCi0KLSNlbmRpZgotCi0gICAg
cmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCogT1NBbGxvY2F0b3I6OnJlc2VydmVBbmRDb21taXQo
c2l6ZV90IGJ5dGVzLCBVc2FnZSB1c2FnZSwgYm9vbCB3cml0YWJsZSwgYm9vbCBleGVjdXRhYmxl
LCBib29sIGluY2x1ZGVzR3VhcmRQYWdlcykKLXsKLSAgICAvLyBBbGwgUE9TSVggcmVzZXJ2YXRp
b25zIHN0YXJ0IG91dCBsb2dpY2FsbHkgY29tbWl0dGVkLgotICAgIGludCBwcm90ZWN0aW9uID0g
UFJPVF9SRUFEOwotICAgIGlmICh3cml0YWJsZSkKLSAgICAgICAgcHJvdGVjdGlvbiB8PSBQUk9U
X1dSSVRFOwotICAgIGlmIChleGVjdXRhYmxlKQotICAgICAgICBwcm90ZWN0aW9uIHw9IFBST1Rf
RVhFQzsKLQotICAgIGludCBmbGFncyA9IE1BUF9QUklWQVRFIHwgTUFQX0FOT047Ci0jaWYgT1Mo
REFSV0lOKQotICAgIGlmIChleGVjdXRhYmxlKQotICAgICAgICBmbGFncyB8PSBNQVBfSklUOwot
I2VuZGlmCi0KLSNpZiBPUyhEQVJXSU4pCi0gICAgaW50IGZkID0gdXNhZ2U7Ci0jZWxzZQotICAg
IFVOVVNFRF9QQVJBTSh1c2FnZSk7Ci0gICAgaW50IGZkID0gLTE7Ci0jZW5kaWYKLQotICAgIHZv
aWQqIHJlc3VsdCA9IDA7Ci0jaWYgKE9TKERBUldJTikgJiYgQ1BVKFg4Nl82NCkpCi0gICAgaWYg
KGV4ZWN1dGFibGUpIHsKLSAgICAgICAgQVNTRVJUKGluY2x1ZGVzR3VhcmRQYWdlcyk7Ci0gICAg
ICAgIC8vIENvb2sgdXAgYW4gYWRkcmVzcyB0byBhbGxvY2F0ZSBhdCwgdXNpbmcgdGhlIGZvbGxv
d2luZyByZWNpcGU6Ci0gICAgICAgIC8vICAgMTcgYml0cyBvZiB6ZXJvLCBzdGF5IGluIHVzZXJz
cGFjZSBraWRzLgotICAgICAgICAvLyAgIDI2IGJpdHMgb2YgcmFuZG9tbmVzcyBmb3IgQVNMUi4K
LSAgICAgICAgLy8gICAyMSBiaXRzIG9mIHplcm8sIGF0IGxlYXN0IHN0YXkgYWxpZ25lZCB3aXRo
aW4gb25lIGxldmVsIG9mIHRoZSBwYWdldGFibGVzLgotICAgICAgICAvLwotICAgICAgICAvLyBC
dXQhIC0gYXMgYSB0ZW1wb3Jhcnkgd29ya2Fyb3VuZCBmb3Igc29tZSBwbHVnaW4gcHJvYmxlbXMg
KHJkYXI6Ly9wcm9ibGVtLzY4MTI4NTQpLAotICAgICAgICAvLyBmb3Igbm93IGluc3RlYWQgb2Yg
Ml4yNiBiaXRzIG9mIEFTTFIgbGV0cyBzdGljayB3aXRoIDI1IGJpdHMgb2YgcmFuZG9taXphdGlv
biBwbHVzCi0gICAgICAgIC8vIDJeMjQsIHdoaWNoIHNob3VsZCBwdXQgdXAgc29tZXdoZXJlIGlu
IHRoZSBtaWRkbGUgb2YgdXNlcnNwYWNlIChpbiB0aGUgYWRkcmVzcyByYW5nZQotICAgICAgICAv
LyAweDIwMDAwMDAwMDAwMCAuLiAweDVmZmZmZmZmZmZmZikuCi0gICAgICAgIGludHB0cl90IHJh
bmRvbUxvY2F0aW9uID0gMDsKLSAgICAgICAgcmFuZG9tTG9jYXRpb24gPSBhcmM0cmFuZG9tKCkg
JiAoKDEgPDwgMjUpIC0gMSk7Ci0gICAgICAgIHJhbmRvbUxvY2F0aW9uICs9ICgxIDw8IDI0KTsK
LSAgICAgICAgcmFuZG9tTG9jYXRpb24gPDw9IDIxOwotICAgICAgICByZXN1bHQgPSByZWludGVy
cHJldF9jYXN0PHZvaWQqPihyYW5kb21Mb2NhdGlvbik7Ci0gICAgfQotI2VuZGlmCi0KLSAgICBy
ZXN1bHQgPSBtbWFwKHJlc3VsdCwgYnl0ZXMsIHByb3RlY3Rpb24sIGZsYWdzLCBmZCwgMCk7Ci0g
ICAgaWYgKHJlc3VsdCA9PSBNQVBfRkFJTEVEKSB7Ci0gICAgICAgIGlmIChleGVjdXRhYmxlKQot
ICAgICAgICAgICAgcmVzdWx0ID0gMDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgQ1JBU0go
KTsKLSAgICB9Ci0gICAgaWYgKHJlc3VsdCAmJiBpbmNsdWRlc0d1YXJkUGFnZXMpIHsKLSAgICAg
ICAgLy8gV2UgdXNlIG1tYXAgdG8gcmVtYXAgdGhlIGd1YXJkcGFnZXMgcmF0aGVyIHRoYW4gdXNp
bmcgbXByb3RlY3QgYXMKLSAgICAgICAgLy8gbXByb3RlY3QgcmVzdWx0cyBpbiBtdWx0aXBsZSBy
ZWZlcmVuY2VzIHRvIHRoZSBjb2RlIHJlZ2lvbi4gIFRoaXMKLSAgICAgICAgLy8gYnJlYWtzIHRo
ZSBtYWR2aXNlIGJhc2VkIG1lY2hhbmlzbSB3ZSB1c2UgdG8gcmV0dXJuIHBoeXNpY2FsIG1lbW9y
eQotICAgICAgICAvLyB0byB0aGUgT1MuCi0gICAgICAgIG1tYXAocmVzdWx0LCBwYWdlU2l6ZSgp
LCBQUk9UX05PTkUsIE1BUF9GSVhFRCB8IE1BUF9QUklWQVRFIHwgTUFQX0FOT04sIGZkLCAwKTsK
LSAgICAgICAgbW1hcChzdGF0aWNfY2FzdDxjaGFyKj4ocmVzdWx0KSArIGJ5dGVzIC0gcGFnZVNp
emUoKSwgcGFnZVNpemUoKSwgUFJPVF9OT05FLCBNQVBfRklYRUQgfCBNQVBfUFJJVkFURSB8IE1B
UF9BTk9OLCBmZCwgMCk7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgT1NB
bGxvY2F0b3I6OmNvbW1pdCh2b2lkKiBhZGRyZXNzLCBzaXplX3QgYnl0ZXMsIGJvb2wgd3JpdGFi
bGUsIGJvb2wgZXhlY3V0YWJsZSkKLXsKLSNpZiBPUyhMSU5VWCkKLSAgICBpbnQgcHJvdGVjdGlv
biA9IFBST1RfUkVBRDsKLSAgICBpZiAod3JpdGFibGUpCi0gICAgICAgIHByb3RlY3Rpb24gfD0g
UFJPVF9XUklURTsKLSAgICBpZiAoZXhlY3V0YWJsZSkKLSAgICAgICAgcHJvdGVjdGlvbiB8PSBQ
Uk9UX0VYRUM7Ci0gICAgaWYgKG1wcm90ZWN0KGFkZHJlc3MsIGJ5dGVzLCBwcm90ZWN0aW9uKSkK
LSAgICAgICAgQ1JBU0goKTsKLSAgICBtYWR2aXNlKGFkZHJlc3MsIGJ5dGVzLCBNQURWX1dJTExO
RUVEKTsKLSNlbGlmIEhBVkUoTUFEVl9GUkVFX1JFVVNFKQotICAgIFVOVVNFRF9QQVJBTSh3cml0
YWJsZSk7Ci0gICAgVU5VU0VEX1BBUkFNKGV4ZWN1dGFibGUpOwotICAgIHdoaWxlIChtYWR2aXNl
KGFkZHJlc3MsIGJ5dGVzLCBNQURWX0ZSRUVfUkVVU0UpID09IC0xICYmIGVycm5vID09IEVBR0FJ
TikgeyB9Ci0jZWxzZQotICAgIC8vIE5vbi1NQURWX0ZSRUVfUkVVU0UgcmVzZXJ2YXRpb25zIGF1
dG9tYXRpY2FsbHkgY29tbWl0IG9uIGRlbWFuZC4KLSAgICBVTlVTRURfUEFSQU0oYWRkcmVzcyk7
Ci0gICAgVU5VU0VEX1BBUkFNKGJ5dGVzKTsKLSAgICBVTlVTRURfUEFSQU0od3JpdGFibGUpOwot
ICAgIFVOVVNFRF9QQVJBTShleGVjdXRhYmxlKTsKLSNlbmRpZgotfQotCi12b2lkIE9TQWxsb2Nh
dG9yOjpkZWNvbW1pdCh2b2lkKiBhZGRyZXNzLCBzaXplX3QgYnl0ZXMpCi17Ci0jaWYgT1MoTElO
VVgpCi0gICAgbWFkdmlzZShhZGRyZXNzLCBieXRlcywgTUFEVl9ET05UTkVFRCk7Ci0gICAgaWYg
KG1wcm90ZWN0KGFkZHJlc3MsIGJ5dGVzLCBQUk9UX05PTkUpKQotICAgICAgICBDUkFTSCgpOwot
I2VsaWYgSEFWRShNQURWX0ZSRUVfUkVVU0UpCi0gICAgd2hpbGUgKG1hZHZpc2UoYWRkcmVzcywg
Ynl0ZXMsIE1BRFZfRlJFRV9SRVVTQUJMRSkgPT0gLTEgJiYgZXJybm8gPT0gRUFHQUlOKSB7IH0K
LSNlbGlmIEhBVkUoTUFEVl9GUkVFKQotICAgIHdoaWxlIChtYWR2aXNlKGFkZHJlc3MsIGJ5dGVz
LCBNQURWX0ZSRUUpID09IC0xICYmIGVycm5vID09IEVBR0FJTikgeyB9Ci0jZWxpZiBIQVZFKE1B
RFZfRE9OVE5FRUQpCi0gICAgd2hpbGUgKG1hZHZpc2UoYWRkcmVzcywgYnl0ZXMsIE1BRFZfRE9O
VE5FRUQpID09IC0xICYmIGVycm5vID09IEVBR0FJTikgeyB9Ci0jZWxzZQotICAgIFVOVVNFRF9Q
QVJBTShhZGRyZXNzKTsKLSAgICBVTlVTRURfUEFSQU0oYnl0ZXMpOwotI2VuZGlmCi19Ci0KLXZv
aWQgT1NBbGxvY2F0b3I6OmhpbnRNZW1vcnlOb3ROZWVkZWRTb29uKHZvaWQqIGFkZHJlc3MsIHNp
emVfdCBieXRlcykKLXsKLSNpZiBIQVZFKE1BRFZfRE9OVE5FRUQpCi0gICAgd2hpbGUgKG1hZHZp
c2UoYWRkcmVzcywgYnl0ZXMsIE1BRFZfRE9OVE5FRUQpID09IC0xICYmIGVycm5vID09IEVBR0FJ
TikgeyB9Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShhZGRyZXNzKTsKLSAgICBVTlVTRURfUEFS
QU0oYnl0ZXMpOwotI2VuZGlmCi19Ci0KLXZvaWQgT1NBbGxvY2F0b3I6OnJlbGVhc2VEZWNvbW1p
dHRlZCh2b2lkKiBhZGRyZXNzLCBzaXplX3QgYnl0ZXMpCi17Ci0gICAgaW50IHJlc3VsdCA9IG11
bm1hcChhZGRyZXNzLCBieXRlcyk7Ci0gICAgaWYgKHJlc3VsdCA9PSAtMSkKLSAgICAgICAgQ1JB
U0goKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV1RGCi0KLSNlbmRpZiAvLyBPUyhVTklYKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi93dGYvT1NBbGxvY2F0b3JXaW4uY3BwIGIvU291cmNlL1dURi93
dGYvT1NBbGxvY2F0b3JXaW4uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNjE1
NDk4Yzk5NGZjYTVkOGI1MTk1NGM1ZjY1MjU0M2E5N2M0Yjc0Li4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XVEYvd3RmL09TQWxsb2NhdG9yV2lu
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEwMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEwLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgPHd0Zi9PU0FsbG9jYXRvci5oPgotCi0jaWYg
T1MoV0lORE9XUykKLQotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW5jbHVkZSA8d2lu
ZG93cy5oPgotCi1uYW1lc3BhY2UgV1RGIHsKLQotc3RhdGljIGlubGluZSBEV09SRCBwcm90ZWN0
aW9uKGJvb2wgd3JpdGFibGUsIGJvb2wgZXhlY3V0YWJsZSkKLXsKLSAgICByZXR1cm4gZXhlY3V0
YWJsZSA/Ci0gICAgICAgICh3cml0YWJsZSA/IFBBR0VfRVhFQ1VURV9SRUFEV1JJVEUgOiBQQUdF
X0VYRUNVVEVfUkVBRCkgOgotICAgICAgICAod3JpdGFibGUgPyBQQUdFX1JFQURXUklURSA6IFBB
R0VfUkVBRE9OTFkpOwotfQotCi12b2lkKiBPU0FsbG9jYXRvcjo6cmVzZXJ2ZVVuY29tbWl0dGVk
KHNpemVfdCBieXRlcywgVXNhZ2UsIGJvb2wgd3JpdGFibGUsIGJvb2wgZXhlY3V0YWJsZSwgYm9v
bCkKLXsKLSAgICB2b2lkKiByZXN1bHQgPSBWaXJ0dWFsQWxsb2MoMCwgYnl0ZXMsIE1FTV9SRVNF
UlZFLCBwcm90ZWN0aW9uKHdyaXRhYmxlLCBleGVjdXRhYmxlKSk7Ci0gICAgaWYgKCFyZXN1bHQp
Ci0gICAgICAgIENSQVNIKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCogT1NBbGxv
Y2F0b3I6OnJlc2VydmVBbmRDb21taXQoc2l6ZV90IGJ5dGVzLCBVc2FnZSwgYm9vbCB3cml0YWJs
ZSwgYm9vbCBleGVjdXRhYmxlLCBib29sKQotewotICAgIHZvaWQqIHJlc3VsdCA9IFZpcnR1YWxB
bGxvYygwLCBieXRlcywgTUVNX1JFU0VSVkUgfCBNRU1fQ09NTUlULCBwcm90ZWN0aW9uKHdyaXRh
YmxlLCBleGVjdXRhYmxlKSk7Ci0gICAgaWYgKCFyZXN1bHQpCi0gICAgICAgIENSQVNIKCk7Ci0g
ICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBPU0FsbG9jYXRvcjo6Y29tbWl0KHZvaWQqIGFk
ZHJlc3MsIHNpemVfdCBieXRlcywgYm9vbCB3cml0YWJsZSwgYm9vbCBleGVjdXRhYmxlKQotewot
ICAgIHZvaWQqIHJlc3VsdCA9IFZpcnR1YWxBbGxvYyhhZGRyZXNzLCBieXRlcywgTUVNX0NPTU1J
VCwgcHJvdGVjdGlvbih3cml0YWJsZSwgZXhlY3V0YWJsZSkpOwotICAgIGlmICghcmVzdWx0KQot
ICAgICAgICBDUkFTSCgpOwotfQotCi12b2lkIE9TQWxsb2NhdG9yOjpkZWNvbW1pdCh2b2lkKiBh
ZGRyZXNzLCBzaXplX3QgYnl0ZXMpCi17Ci0gICAgLy8gQWNjb3JkaW5nIHRvIGh0dHA6Ly9tc2Ru
Lm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9hYTM2Njg5MihWUy44NSkuYXNweCwKLSAgICAv
LyBieXRlcyAoaS5lLiBkd1NpemUpIGJlaW5nIDAgd2hlbiBkd0ZyZWVUeXBlIGlzIE1FTV9ERUNP
TU1JVCBtZWFucyB0aGF0IHdlJ2xsCi0gICAgLy8gZGVjb21taXQgdGhlIGVudGlyZSByZWdpb24g
YWxsb2NhdGVkIGJ5IFZpcnR1YWxBbGxvYygpIGluc3RlYWQgb2YgZGVjb21taXR0aW5nCi0gICAg
Ly8gbm90aGluZyBhcyB3ZSB3b3VsZCBleHBlY3QuIEhlbmNlLCB3ZSBzaG91bGQgY2hlY2sgaWYg
Ynl0ZXMgaXMgMCBhbmQgaGFuZGxlIGl0Ci0gICAgLy8gYXBwcm9wcmlhdGVseSBiZWZvcmUgY2Fs
bGluZyBWaXJ0dWFsRnJlZSgpLgotICAgIC8vIFNlZTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEyMTk3Mi4KLSAgICBpZiAoIWJ5dGVzKQotICAgICAgICByZXR1cm47
Ci0gICAgLy8gU2lsZW5jZSB3YXJuaW5nIGFib3V0IHVzaW5nIE1FTV9ERUNPTU1JVCBpbnN0ZWFk
IG9mIE1FTV9SRUxFQVNFOgotI3ByYWdtYSB3YXJuaW5nKHN1cHByZXNzOiA2MjUwKQotICAgIGJv
b2wgcmVzdWx0ID0gVmlydHVhbEZyZWUoYWRkcmVzcywgYnl0ZXMsIE1FTV9ERUNPTU1JVCk7Ci0g
ICAgaWYgKCFyZXN1bHQpCi0gICAgICAgIENSQVNIKCk7Ci19Ci0KLXZvaWQgT1NBbGxvY2F0b3I6
OnJlbGVhc2VEZWNvbW1pdHRlZCh2b2lkKiBhZGRyZXNzLCBzaXplX3QgYnl0ZXMpCi17Ci0gICAg
Ly8gU2VlIGNvbW1lbnQgaW4gT1NBbGxvY2F0b3I6OmRlY29tbWl0KCkuIFNpbWlsYXJseSwgd2hl
biBieXRlcyBpcyAwLCB3ZQotICAgIC8vIGRvbid0IHdhbnQgdG8gcmVsZWFzZSBhbnl0aGluZy4g
U28sIGRvbid0IGNhbGwgVmlydHVhbEZyZWUoKSBiZWxvdy4KLSAgICBpZiAoIWJ5dGVzKQotICAg
ICAgICByZXR1cm47Ci0gICAgLy8gQWNjb3JkaW5nIHRvIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5j
b20vZW4tdXMvbGlicmFyeS9hYTM2Njg5MihWUy44NSkuYXNweCwKLSAgICAvLyBkd1NpemUgbXVz
dCBiZSAwIGlmIGR3RnJlZVR5cGUgaXMgTUVNX1JFTEVBU0UuCi0gICAgYm9vbCByZXN1bHQgPSBW
aXJ0dWFsRnJlZShhZGRyZXNzLCAwLCBNRU1fUkVMRUFTRSk7Ci0gICAgaWYgKCFyZXN1bHQpCi0g
ICAgICAgIENSQVNIKCk7Ci19Ci0KLXZvaWQgT1NBbGxvY2F0b3I6OmhpbnRNZW1vcnlOb3ROZWVk
ZWRTb29uKHZvaWQqLCBzaXplX3QpCi17Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdURgotCi0jZW5k
aWYgLy8gT1MoV0lORE9XUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtR1RL
LmNtYWtlIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm1HVEsuY21ha2UKaW5kZXggN2ZlYzEyZGMy
ZmMzMTViYzUxNjhmMDJiM2JmNzY0NzBjMGQ5Y2JhZC4uMjk3ZDBmYTJjNzhmMzk2MWIwZjRjM2Ux
NzE5M2ZiYTZlNWU0YTNmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvUGxhdGZvcm1HVEsu
Y21ha2UKKysrIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm1HVEsuY21ha2UKQEAgLTI4LDYgKzI4
LDkgQEAgbGlzdChBUFBFTkQgV1RGX1NPVVJDRVMKICAgICBnbGliL1J1bkxvb3BHTGliLmNwcAog
ICAgIGdsaWIvVVJMR0xpYi5jcHAKIAorICAgIHBvc2l4L09TQWxsb2NhdG9yUE9TSVguY3BwCisg
ICAgcG9zaXgvVGhyZWFkaW5nUE9TSVguY3BwCisKICAgICB0ZXh0L3VuaXgvVGV4dEJyZWFrSXRl
cmF0b3JJbnRlcm5hbElDVVVuaXguY3BwCiAKICAgICB1bml4L0NQVVRpbWVVbml4LmNwcApkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi93dGYvUGxhdGZvcm1KU0NPbmx5LmNtYWtlIGIvU291cmNlL1dU
Ri93dGYvUGxhdGZvcm1KU0NPbmx5LmNtYWtlCmluZGV4IGViYWY2YmE3YTNmNGI4NzZiM2I0Mzgz
NTQ4MGY3OGQ2NzEzOTA3ZjguLjM1NDJmZWY2ZjkwZWUwYTY1ODkxYjNhMzc2MDY1NDVjOWFjNzdj
NDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtSlNDT25seS5jbWFrZQorKysg
Yi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUpTQ09ubHkuY21ha2UKQEAgLTExLDcgKzExLDEwIEBA
IGlmIChXSU4zMikKICAgICAgICAgd2luL0ZpbGVTeXN0ZW1XaW4uY3BwCiAgICAgICAgIHdpbi9M
YW5ndWFnZVdpbi5jcHAKICAgICAgICAgd2luL01haW5UaHJlYWRXaW4uY3BwCisgICAgICAgIHdp
bi9PU0FsbG9jYXRvcldpbi5jcHAKICAgICAgICAgd2luL1BhdGhXYWxrZXIuY3BwCisgICAgICAg
IHdpbi9UaHJlYWRTcGVjaWZpY1dpbi5jcHAKKyAgICAgICAgd2luL1RocmVhZGluZ1dpbi5jcHAK
ICAgICApCiAgICAgbGlzdChBUFBFTkQgV1RGX1BVQkxJQ19IRUFERVJTCiAgICAgICAgIHdpbi9E
YmdIZWxwZXJXaW4uaApAQCAtMjAsNyArMjMsOSBAQCBpZiAoV0lOMzIpCiAgICAgICAgIHRleHQv
d2luL1dDaGFyU3RyaW5nRXh0cmFzLmgKICAgICApCiAgICAgbGlzdChBUFBFTkQgV1RGX0xJQlJB
UklFUworICAgICAgICBEYmdIZWxwCiAgICAgICAgIHNobHdhcGkKKyAgICAgICAgd2lubW0KICAg
ICApCiBlbHNlICgpCiAgICAgbGlzdChBUFBFTkQgV1RGX1NPVVJDRVMKQEAgLTI5LDYgKzM0LDgg
QEAgZWxzZSAoKQogICAgICAgICBnZW5lcmljL01haW5UaHJlYWRHZW5lcmljLmNwcAogCiAgICAg
ICAgIHBvc2l4L0ZpbGVTeXN0ZW1QT1NJWC5jcHAKKyAgICAgICAgcG9zaXgvT1NBbGxvY2F0b3JQ
T1NJWC5jcHAKKyAgICAgICAgcG9zaXgvVGhyZWFkaW5nUE9TSVguY3BwCiAKICAgICAgICAgdGV4
dC91bml4L1RleHRCcmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1VVbml4LmNwcAogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybU1hYy5jbWFrZSBiL1NvdXJjZS9XVEYvd3RmL1BsYXRm
b3JtTWFjLmNtYWtlCmluZGV4IDBlM2UxNDE2MDkxMmI3ODYxNzczNDM1MGE5MjVkOTlkYmEyY2Rh
MDEuLjlhMWY1MTBiNDA5ZjEwZTAyMzJmMWYxZTBlMmUyZTU5ZGYxNGNiMTYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtTWFjLmNtYWtlCisrKyBiL1NvdXJjZS9XVEYvd3RmL1Bs
YXRmb3JtTWFjLmNtYWtlCkBAIC0zOSwxNCArMzksMTMgQEAgbGlzdChBUFBFTkQgV1RGX1BVQkxJ
Q19IRUFERVJTCiAKIGxpc3QoQVBQRU5EIFdURl9TT1VSQ0VTCiAgICAgQmxvY2tPYmpDRXhjZXB0
aW9ucy5tbQotICAgIFJ1bkxvb3BUaW1lckNGLmNwcAotICAgIFNjaGVkdWxlUGFpckNGLmNwcAot
ICAgIFNjaGVkdWxlUGFpck1hYy5tbQogCiAgICAgY2YvQ0ZVUkxFeHRyYXMuY3BwCiAgICAgY2Yv
RmlsZVN5c3RlbUNGLmNwcAogICAgIGNmL0xhbmd1YWdlQ0YuY3BwCiAgICAgY2YvUnVuTG9vcENG
LmNwcAorICAgIGNmL1J1bkxvb3BUaW1lckNGLmNwcAorICAgIGNmL1NjaGVkdWxlUGFpckNGLmNw
cAogICAgIGNmL1VSTENGLmNwcAogCiAgICAgY29jb2EvQXV0b2RyYWluZWRQb29sLmNwcApAQCAt
NjMsOCArNjIsMTEgQEAgbGlzdChBUFBFTkQgV1RGX1NPVVJDRVMKIAogICAgIG1hYy9EZXByZWNh
dGVkU3ltYm9sc1VzZWRCeVNhZmFyaS5tbQogICAgIG1hYy9GaWxlU3lzdGVtTWFjLm1tCisgICAg
bWFjL1NjaGVkdWxlUGFpck1hYy5tbQogCiAgICAgcG9zaXgvRmlsZVN5c3RlbVBPU0lYLmNwcAor
ICAgIHBvc2l4L09TQWxsb2NhdG9yUE9TSVguY3BwCisgICAgcG9zaXgvVGhyZWFkaW5nUE9TSVgu
Y3BwCiAKICAgICB0ZXh0L2NmL0F0b21pY1N0cmluZ0ltcGxDRi5jcHAKICAgICB0ZXh0L2NmL1N0
cmluZ0NGLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUGxhdGZvcm1QbGF5U3RhdGlv
bi5jbWFrZSBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtUGxheVN0YXRpb24uY21ha2UKaW5kZXgg
M2U5ZTc1YzkyOGE2Yzk0NjA1YjRiZmNhYTdmYmIyYjlmNDJmODM5MC4uNGI2OTE5MDc2ZjM5MTA1
MWI4NWUzOWIwNmYyMTVkYzlhYjQ1ODY4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvUGxh
dGZvcm1QbGF5U3RhdGlvbi5jbWFrZQorKysgYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybVBsYXlT
dGF0aW9uLmNtYWtlCkBAIC02LDYgKzYsOCBAQCBsaXN0KEFQUEVORCBXVEZfU09VUkNFUwogICAg
IGdlbmVyaWMvV29ya1F1ZXVlR2VuZXJpYy5jcHAKIAogICAgIHBvc2l4L0ZpbGVTeXN0ZW1QT1NJ
WC5jcHAKKyAgICBwb3NpeC9PU0FsbG9jYXRvclBPU0lYLmNwcAorICAgIHBvc2l4L1RocmVhZGlu
Z1BPU0lYLmNwcAogCiAgICAgdGV4dC91bml4L1RleHRCcmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1VV
bml4LmNwcAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybVdQRS5jbWFrZSBi
L1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtV1BFLmNtYWtlCmluZGV4IDA4NmFkZDNhYTkxOWZjNDky
MzlkNzFjMWNjODY4NWM1ZmM3MzliZDQuLjM4ZTYzMmMzZWY4YjMxMzdhYTk3MTE5OTBlNzE0NTVm
YmFhMDMyY2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtV1BFLmNtYWtlCisr
KyBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtV1BFLmNtYWtlCkBAIC0yNiw2ICsyNiw5IEBAIGxp
c3QoQVBQRU5EIFdURl9TT1VSQ0VTCiAgICAgbGludXgvTWVtb3J5Rm9vdHByaW50TGludXguY3Bw
CiAgICAgbGludXgvTWVtb3J5UHJlc3N1cmVIYW5kbGVyTGludXguY3BwCiAKKyAgICBwb3NpeC9P
U0FsbG9jYXRvclBPU0lYLmNwcAorICAgIHBvc2l4L1RocmVhZGluZ1BPU0lYLmNwcAorCiAgICAg
dGV4dC91bml4L1RleHRCcmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1VVbml4LmNwcAogCiAgICAgdW5p
eC9DUFVUaW1lVW5peC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtV2lu
LmNtYWtlIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm1XaW4uY21ha2UKaW5kZXggYjZjMGFjNmY0
ZGU1ZTA1ZjI3ZDRkOWFjMGZmYmQ1Y2M0MDk3YTZlMy4uMmMzNDAyMjU0OWQ4ODQwZWI5MjMwMjg0
YTFkZGQ5ZDI4NTIzOWFhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvUGxhdGZvcm1XaW4u
Y21ha2UKKysrIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm1XaW4uY21ha2UKQEAgLTE3LDEzICsx
NywxOCBAQCBsaXN0KEFQUEVORCBXVEZfU09VUkNFUwogICAgIHdpbi9NYWluVGhyZWFkV2luLmNw
cAogICAgIHdpbi9NZW1vcnlGb290cHJpbnRXaW4uY3BwCiAgICAgd2luL01lbW9yeVByZXNzdXJl
SGFuZGxlcldpbi5jcHAKKyAgICB3aW4vT1NBbGxvY2F0b3JXaW4uY3BwCiAgICAgd2luL1BhdGhX
YWxrZXIuY3BwCiAgICAgd2luL1J1bkxvb3BXaW4uY3BwCisgICAgd2luL1RocmVhZFNwZWNpZmlj
V2luLmNwcAorICAgIHdpbi9UaHJlYWRpbmdXaW4uY3BwCiAgICAgd2luL1dvcmtRdWV1ZVdpbi5j
cHAKICkKIAogbGlzdChBUFBFTkQgV1RGX0xJQlJBUklFUworICAgIERiZ0hlbHAKICAgICBzaGx3
YXBpCisgICAgd2lubW0KICkKIAogaWYgKFVTRV9DRikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYv
d3RmL1J1bkxvb3BUaW1lckNGLmNwcCBiL1NvdXJjZS9XVEYvd3RmL1J1bkxvb3BUaW1lckNGLmNw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzQxOGZkZDNlYTI3ZGJmODk0MDUwMmU5
MGQ5MTQzYjUyODM1MmE4NS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9SdW5Mb29wVGltZXJDRi5jcHAKKysrIC9kZXYvbnVsbApA
QCAtMSw5MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVy
IHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAg
ICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIFBMQVRGT1JNKENPQ09BKSAm
JiBIQVZFKFJVTkxPT1BfVElNRVIpCi0KLSNpbmNsdWRlIDx3dGYvUnVuTG9vcFRpbWVyLmg+Ci0K
LSNpbmNsdWRlIDx3dGYvQXV0b2RyYWluZWRQb29sLmg+Ci0KLW5hbWVzcGFjZSBXVEYgewotCi1S
dW5Mb29wVGltZXJCYXNlOjp+UnVuTG9vcFRpbWVyQmFzZSgpCi17Ci0gICAgc3RvcCgpOwotfQot
Ci1zdGF0aWMgdm9pZCB0aW1lckZpcmVkKENGUnVuTG9vcFRpbWVyUmVmLCB2b2lkKiBjb250ZXh0
KQotewotICAgIC8vIENGUnVuTG9vcFRpbWVyIGRvZXMgbm90IGNyZWF0ZSBhbiBOU0F1dG9yZWxl
YXNlUG9vbCwgbGlrZSBOU1RpbWVyIGRvZXMuIFRoaXMgY2FuIGxlYWQgdG8KLSAgICAvLyBhdXRv
cmVsZWFzZWQgb2JqZWN0cyBiZWluZyBwdXNoZWQgaW50byBOU0F1dG9yZWxlYXNlUG9vbHMgdW5k
ZXJuZWF0aCB0aGUgcnVuIGxvb3AsIHdoaWNoCi0gICAgLy8gYXJlIHZlcnkgaW5mcmVxdWVudGx5
IGRyYWluZWQuIENyZWF0ZSBhIG5ldyBhdXRvcmVsZWFzZSBwb29sIGhlcmUgdG8gZ2l2ZSBhdXRv
cmVsZWFzZWQgb2JqZWN0cwotICAgIC8vIGEgcGxhY2UgdG8gY29sbGVjdC4KLSAgICBBdXRvZHJh
aW5lZFBvb2wgcG9vbDsKLSAgICBSdW5Mb29wVGltZXJCYXNlKiB0aW1lciA9IHN0YXRpY19jYXN0
PFJ1bkxvb3BUaW1lckJhc2UqPihjb250ZXh0KTsKLSAgICB0aW1lci0+ZmlyZWQoKTsKLX0KLQot
dm9pZCBSdW5Mb29wVGltZXJCYXNlOjpzdGFydChTZWNvbmRzIG5leHRGaXJlSW50ZXJ2YWwsIFNl
Y29uZHMgcmVwZWF0SW50ZXJ2YWwpCi17Ci0gICAgaWYgKG1fdGltZXIpCi0gICAgICAgIENGUnVu
TG9vcFRpbWVySW52YWxpZGF0ZShtX3RpbWVyLmdldCgpKTsKLSAgICBDRlJ1bkxvb3BUaW1lckNv
bnRleHQgY29udGV4dCA9IHsgMCwgdGhpcywgMCwgMCwgMCB9OwotICAgIG1fdGltZXIgPSBhZG9w
dENGKENGUnVuTG9vcFRpbWVyQ3JlYXRlKDAsIENGQWJzb2x1dGVUaW1lR2V0Q3VycmVudCgpICsg
bmV4dEZpcmVJbnRlcnZhbC5zZWNvbmRzKCksIHJlcGVhdEludGVydmFsLnNlY29uZHMoKSwgMCwg
MCwgdGltZXJGaXJlZCwgJmNvbnRleHQpKTsKLX0KLQotdm9pZCBSdW5Mb29wVGltZXJCYXNlOjpz
Y2hlZHVsZShjb25zdCBTY2hlZHVsZVBhaXIqIHNjaGVkdWxlUGFpcikKLXsKLSAgICBBU1NFUlRf
QVJHKHNjaGVkdWxlUGFpciwgc2NoZWR1bGVQYWlyKTsKLSAgICBBU1NFUlRfV0lUSF9NRVNTQUdF
KG1fdGltZXIsICJUaW1lciBtdXN0IGhhdmUgb25lIG9mIHRoZSBzdGFydCBmdW5jdGlvbnMgY2Fs
bGVkIGJlZm9yZSBjYWxsaW5nIHNjaGVkdWxlKCkuIik7Ci0gICAgQ0ZSdW5Mb29wQWRkVGltZXIo
c2NoZWR1bGVQYWlyLT5ydW5Mb29wKCksIG1fdGltZXIuZ2V0KCksIHNjaGVkdWxlUGFpci0+bW9k
ZSgpKTsKLX0KLQotdm9pZCBSdW5Mb29wVGltZXJCYXNlOjpzY2hlZHVsZShjb25zdCBTY2hlZHVs
ZVBhaXJIYXNoU2V0JiBzY2hlZHVsZVBhaXJzKQotewotICAgIFNjaGVkdWxlUGFpckhhc2hTZXQ6
OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHNjaGVkdWxlUGFpcnMuZW5kKCk7Ci0gICAgZm9yIChTY2hl
ZHVsZVBhaXJIYXNoU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IHNjaGVkdWxlUGFpcnMuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBzY2hlZHVsZSgoKml0KS5nZXQoKSk7Ci19Ci0K
LXZvaWQgUnVuTG9vcFRpbWVyQmFzZTo6c3RvcCgpCi17Ci0gICAgaWYgKCFtX3RpbWVyKQotICAg
ICAgICByZXR1cm47Ci0gICAgQ0ZSdW5Mb29wVGltZXJJbnZhbGlkYXRlKG1fdGltZXIuZ2V0KCkp
OwotICAgIG1fdGltZXIgPSAwOwotfQotCi1ib29sIFJ1bkxvb3BUaW1lckJhc2U6OmlzQWN0aXZl
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV90aW1lciAmJiBDRlJ1bkxvb3BUaW1lcklzVmFsaWQo
bV90aW1lci5nZXQoKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdURgotCi0jZW5kaWYgLy8gUExB
VEZPUk0oQ09DT0EpICYmIEhBVkUoUlVOTE9PUF9USU1FUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
VEYvd3RmL1NjaGVkdWxlUGFpckNGLmNwcCBiL1NvdXJjZS9XVEYvd3RmL1NjaGVkdWxlUGFpckNG
LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDZmNjVjMzNmMDBiN2RhMTUyZjgw
ZTUyNjhmMDQ3MzAxMzVjY2EzNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9TY2hlZHVsZVBhaXJDRi5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSw0NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDEzIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0
aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAq
ICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0g
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlIDx3dGYvU2NoZWR1
bGVQYWlyLmg+Ci0KLW5hbWVzcGFjZSBXVEYgewotCi1ib29sIFNjaGVkdWxlUGFpcjo6b3BlcmF0
b3I9PShjb25zdCBTY2hlZHVsZVBhaXImIG90aGVyKSBjb25zdAotewotICAgIGlmIChydW5Mb29w
KCkgIT0gb3RoZXIucnVuTG9vcCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgQ0ZTdHJp
bmdSZWYgdGhpc01vZGUgPSBtb2RlKCk7Ci0gICAgQ0ZTdHJpbmdSZWYgb3RoZXJNb2RlID0gb3Ro
ZXIubW9kZSgpOwotICAgIGlmICghdGhpc01vZGUgfHwgIW90aGVyTW9kZSkKLSAgICAgICAgcmV0
dXJuIHRoaXNNb2RlID09IG90aGVyTW9kZTsKLSAgICByZXR1cm4gQ0ZFcXVhbCh0aGlzTW9kZSwg
b3RoZXJNb2RlKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYv
d3RmL1NjaGVkdWxlUGFpck1hYy5tbSBiL1NvdXJjZS9XVEYvd3RmL1NjaGVkdWxlUGFpck1hYy5t
bQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjIyNjFhZDNmOWQ2YTY2MTIwM2JkYjE0
MTZjMzE4ZWIyZTRlZTc3YS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9TY2hlZHVsZVBhaXJNYWMubW0KKysrIC9kZXYvbnVsbApA
QCAtMSw0MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVy
IHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAg
ICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlIDx3dGYvU2NoZWR1bGVQ
YWlyLmg+Ci0KLW5hbWVzcGFjZSBXVEYgewotCi1TY2hlZHVsZVBhaXI6OlNjaGVkdWxlUGFpcihO
U1J1bkxvb3AqIHJ1bkxvb3AsIENGU3RyaW5nUmVmIG1vZGUpCi0gICAgOiBtX25zUnVuTG9vcChy
dW5Mb29wKQotICAgICwgbV9ydW5Mb29wKFtydW5Mb29wIGdldENGUnVuTG9vcF0pCi17Ci0gICAg
aWYgKG1vZGUpCi0gICAgICAgIG1fbW9kZSA9IGFkb3B0Q0YoQ0ZTdHJpbmdDcmVhdGVDb3B5KDAs
IG1vZGUpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3Rm
L1RocmVhZFNwZWNpZmljV2luLmNwcCBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZFNwZWNpZmljV2lu
LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWU3YWU4NDdjYmFiZmM0MDM2Mjg3
MmNhMzYwNmRiZmEwOTEyN2ZkZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRTcGVjaWZpY1dpbi5jcHAKKysrIC9kZXYv
bnVsbApAQCAtMSw0NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEppYW4gTGkg
PGppYW5saUBjaHJvbWl1bS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgUGF0cmljayBHYW5z
dGVyZXIgPHBhcm9nYUBwYXJvZ2EuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgPHd0Zi9UaHJlYWRTcGVjaWZpYy5oPgotCi0jaWYgT1MoV0lORE9XUykKLQotI2lmICFVU0Uo
UFRIUkVBRFMpCi0KLW5hbWVzcGFjZSBXVEYgewotCi1sb25nJiBmbHNLZXlDb3VudCgpCi17Ci0g
ICAgc3RhdGljIGxvbmcgY291bnQ7Ci0gICAgcmV0dXJuIGNvdW50OwotfQotCi1EV09SRCogZmxz
S2V5cygpCi17Ci0gICAgc3RhdGljIERXT1JEIGtleXNba01heEZsc0tleVNpemVdOwotICAgIHJl
dHVybiBrZXlzOwotfQotCi19IC8vIG5hbWVzcGFjZSBXVEYKLQotI2VuZGlmIC8vICFVU0UoUFRI
UkVBRFMpCi0KLSNlbmRpZiAvLyBPUyhXSU5ET1dTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93
dGYvVGhyZWFkaW5nUHRocmVhZHMuY3BwIGIvU291cmNlL1dURi93dGYvVGhyZWFkaW5nUHRocmVh
ZHMuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNDhkZDliNTdlZGQ0Y2Y1NWYy
NTMzMTY0NTgyM2YzMTA5ZGE0MjIxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZ1B0aHJlYWRzLmNwcAorKysgL2Rl
di9udWxsCkBAIC0xLDU2NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA5
LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAwNyBKdXN0aW4gSGF5Z29vZCA8amhheWdvb2RAcmVha3RpeC5jb20+Ci0gKiBDb3B5cmlnaHQg
KEMpIDIwMTEgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwu
Y29tPgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBs
ZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICog
ICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4gCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
Ci0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KLQotI2lmIFVTRShQ
VEhSRUFEUykKLQotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4K
LSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvUmF3UG9pbnRl
ci5oPgotI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvVGhyZWFk
R3JvdXAuaD4KLSNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nUHJpbWl0aXZlcy5oPgotI2luY2x1ZGUg
PHd0Zi9Xb3JkTG9jay5oPgotCi0jaWYgT1MoTElOVVgpCi0jaW5jbHVkZSA8c3lzL3ByY3RsLmg+
Ci0jZW5kaWYKLQotI2lmICFDT01QSUxFUihNU1ZDKQotI2luY2x1ZGUgPGxpbWl0cy5oPgotI2lu
Y2x1ZGUgPHNjaGVkLmg+Ci0jaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSNlbmRpZgotCi0jaWYgIU9T
KERBUldJTikgJiYgT1MoVU5JWCkKLQotI2luY2x1ZGUgPHNlbWFwaG9yZS5oPgotI2luY2x1ZGUg
PHN5cy9tbWFuLmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8cHRocmVhZC5oPgot
Ci0jaWYgSEFWRShQVEhSRUFEX05QX0gpCi0jaW5jbHVkZSA8cHRocmVhZF9ucC5oPgotI2VuZGlm
Ci0KLSNlbmRpZgotCi1uYW1lc3BhY2UgV1RGIHsKLQotc3RhdGljIExvY2sgZ2xvYmFsU3VzcGVu
ZExvY2s7Ci0KLVRocmVhZDo6flRocmVhZCgpCi17Ci19Ci0KLSNpZiAhT1MoREFSV0lOKQotY2xh
c3MgU2VtYXBob3JlIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTZW1hcGhvcmUpOwotICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIGV4cGxpY2l0IFNlbWFwaG9y
ZSh1bnNpZ25lZCBpbml0aWFsVmFsdWUpCi0gICAgewotICAgICAgICBpbnQgc2hhcmVkQmV0d2Vl
blByb2Nlc3NlcyA9IDA7Ci0gICAgICAgIHNlbV9pbml0KCZtX3BsYXRmb3JtU2VtYXBob3JlLCBz
aGFyZWRCZXR3ZWVuUHJvY2Vzc2VzLCBpbml0aWFsVmFsdWUpOwotICAgIH0KLQotICAgIH5TZW1h
cGhvcmUoKQotICAgIHsKLSAgICAgICAgc2VtX2Rlc3Ryb3koJm1fcGxhdGZvcm1TZW1hcGhvcmUp
OwotICAgIH0KLQotICAgIHZvaWQgd2FpdCgpCi0gICAgewotICAgICAgICBzZW1fd2FpdCgmbV9w
bGF0Zm9ybVNlbWFwaG9yZSk7Ci0gICAgfQotCi0gICAgdm9pZCBwb3N0KCkKLSAgICB7Ci0gICAg
ICAgIHNlbV9wb3N0KCZtX3BsYXRmb3JtU2VtYXBob3JlKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0g
ICAgc2VtX3QgbV9wbGF0Zm9ybVNlbWFwaG9yZTsKLX07Ci1zdGF0aWMgTGF6eU5ldmVyRGVzdHJv
eWVkPFNlbWFwaG9yZT4gZ2xvYmFsU2VtYXBob3JlRm9yU3VzcGVuZFJlc3VtZTsKLQotLy8gV2Ug
dXNlIFNJR1VTUjEgdG8gc3VzcGVuZCBhbmQgcmVzdW1lIG1hY2hpbmUgdGhyZWFkcyBpbiBKYXZh
U2NyaXB0Q29yZS4KLXN0YXRpYyBjb25zdGV4cHIgY29uc3QgaW50IFNpZ1RocmVhZFN1c3BlbmRS
ZXN1bWUgPSBTSUdVU1IxOwotc3RhdGljIHN0ZDo6YXRvbWljPFRocmVhZCo+IHRhcmdldFRocmVh
ZCB7IG51bGxwdHIgfTsKLQotdm9pZCBUaHJlYWQ6OnNpZ25hbEhhbmRsZXJTdXNwZW5kUmVzdW1l
KGludCwgc2lnaW5mb190Kiwgdm9pZCogdWNvbnRleHQpCi17Ci0gICAgLy8gVG91Y2hpbmcgYSBn
bG9iYWwgdmFyaWFibGUgYXRvbWljIHR5cGVzIGZyb20gc2lnbmFsIGhhbmRsZXJzIGlzIGFsbG93
ZWQuCi0gICAgVGhyZWFkKiB0aHJlYWQgPSB0YXJnZXRUaHJlYWQubG9hZCgpOwotCi0gICAgaWYg
KHRocmVhZC0+bV9zdXNwZW5kQ291bnQpIHsKLSAgICAgICAgLy8gVGhpcyBpcyBzaWduYWwgaGFu
ZGxlciBpbnZvY2F0aW9uIHRoYXQgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCB0byByZXN1bWUgc2ln
c3VzcGVuZC4KLSAgICAgICAgLy8gU28gdGhpcyBoYW5kbGVyIGludm9jYXRpb24gaXRzZWxmIHNo
b3VsZCBub3QgcHJvY2Vzcy4KLSAgICAgICAgLy8KLSAgICAgICAgLy8gV2hlbiBzaWduYWwgY29t
ZXMsIGZpcnN0LCB0aGUgc3lzdGVtIGNhbGxzIHNpZ25hbCBoYW5kbGVyLiBBbmQgbGF0ZXIsIHNp
Z3N1c3BlbmQgd2lsbCBiZSByZXN1bWVkLiBTaWduYWwgaGFuZGxlciBpbnZvY2F0aW9uIGFsd2F5
cyBwcmVjZWRlcy4KLSAgICAgICAgLy8gU28sIHRoZSBwcm9ibGVtIG5ldmVyIGhhcHBlbnMgdGhh
dCBzdXNwZW5kZWQuc3RvcmUodHJ1ZSwgLi4uKSB3aWxsIGJlIGV4ZWN1dGVkIGJlZm9yZSB0aGUg
aGFuZGxlciBpcyBjYWxsZWQuCi0gICAgICAgIC8vIGh0dHA6Ly9wdWJzLm9wZW5ncm91cC5vcmcv
b25saW5lcHVicy8wMDk2OTUzOTkvZnVuY3Rpb25zL3NpZ3N1c3BlbmQuaHRtbAotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgdm9pZCogYXBwcm94aW1hdGVTdGFja1BvaW50ZXIgPSBjdXJy
ZW50U3RhY2tQb2ludGVyKCk7Ci0gICAgaWYgKCF0aHJlYWQtPm1fc3RhY2suY29udGFpbnMoYXBw
cm94aW1hdGVTdGFja1BvaW50ZXIpKSB7Ci0gICAgICAgIC8vIFRoaXMgaGFwcGVucyBpZiB3ZSB1
c2UgYW4gYWx0ZXJuYXRpdmUgc2lnbmFsIHN0YWNrLgotICAgICAgICAvLyAxLiBBIHVzZXItZGVm
aW5lZCBzaWduYWwgaGFuZGxlciBpcyBpbnZva2VkIHdpdGggYW4gYWx0ZXJuYXRpdmUgc2lnbmFs
IHN0YWNrLgotICAgICAgICAvLyAyLiBJbiB0aGUgbWlkZGxlIG9mIHRoZSBleGVjdXRpb24gb2Yg
dGhlIGhhbmRsZXIsIHdlIGF0dGVtcHQgdG8gc3VzcGVuZCB0aGUgdGFyZ2V0IHRocmVhZC4KLSAg
ICAgICAgLy8gMy4gQSBuZXN0ZWQgc2lnbmFsIGhhbmRsZXIgaXMgZXhlY3V0ZWQuCi0gICAgICAg
IC8vIDQuIFRoZSBzdGFjayBwb2ludGVyIHNhdmVkIGluIHRoZSBtYWNoaW5lIGNvbnRleHQgd2ls
bCBiZSBwb2ludGluZyB0byB0aGUgYWx0ZXJuYXRpdmUgc2lnbmFsIHN0YWNrLgotICAgICAgICAv
LyBJbiB0aGlzIGNhc2UsIHdlIGJhY2sgb2ZmIHRoZSBzdXNwZW5zaW9uIGFuZCByZXRyeSBhIGJp
dCBsYXRlci4KLSAgICAgICAgdGhyZWFkLT5tX3BsYXRmb3JtUmVnaXN0ZXJzID0gbnVsbHB0cjsK
LSAgICAgICAgZ2xvYmFsU2VtYXBob3JlRm9yU3VzcGVuZFJlc3VtZS0+cG9zdCgpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0jaWYgSEFWRShNQUNISU5FX0NPTlRFWFQpCi0gICAgdWNvbnRl
eHRfdCogdXNlckNvbnRleHQgPSBzdGF0aWNfY2FzdDx1Y29udGV4dF90Kj4odWNvbnRleHQpOwot
ICAgIHRocmVhZC0+bV9wbGF0Zm9ybVJlZ2lzdGVycyA9ICZyZWdpc3RlcnNGcm9tVUNvbnRleHQo
dXNlckNvbnRleHQpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0odWNvbnRleHQpOwotICAgIFBs
YXRmb3JtUmVnaXN0ZXJzIHBsYXRmb3JtUmVnaXN0ZXJzIHsgYXBwcm94aW1hdGVTdGFja1BvaW50
ZXIgfTsKLSAgICB0aHJlYWQtPm1fcGxhdGZvcm1SZWdpc3RlcnMgPSAmcGxhdGZvcm1SZWdpc3Rl
cnM7Ci0jZW5kaWYKLQotICAgIC8vIEFsbG93IHN1c3BlbmQgY2FsbGVyIHRvIHNlZSB0aGF0IHRo
aXMgdGhyZWFkIGlzIHN1c3BlbmRlZC4KLSAgICAvLyBzZW1fcG9zdCBpcyBhc3luYy1zaWduYWwt
c2FmZSBmdW5jdGlvbi4gSXQgbWVhbnMgdGhhdCB3ZSBjYW4gY2FsbCB0aGlzIGZyb20gYSBzaWdu
YWwgaGFuZGxlci4KLSAgICAvLyBodHRwOi8vcHVicy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMv
MDA5Njk1Mzk5L2Z1bmN0aW9ucy94c2hfY2hhcDAyXzA0Lmh0bWwjdGFnXzAyXzA0XzAzCi0gICAg
Ly8KLSAgICAvLyBBbmQgc2VtX3Bvc3QgZW1pdHMgbWVtb3J5IGJhcnJpZXIgdGhhdCBlbnN1cmVz
IHRoYXQgUGxhdGZvcm1SZWdpc3RlcnMgYXJlIGNvcnJlY3RseSBzYXZlZC4KLSAgICAvLyBodHRw
Oi8vcHVicy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvOTY5OTkxOTc5OS9iYXNlZGVmcy9WMV9j
aGFwMDQuaHRtbCN0YWdfMDRfMTEKLSAgICBnbG9iYWxTZW1hcGhvcmVGb3JTdXNwZW5kUmVzdW1l
LT5wb3N0KCk7Ci0KLSAgICAvLyBSZWFjaGluZyBoZXJlLCBTaWdUaHJlYWRTdXNwZW5kUmVzdW1l
IGlzIGJsb2NrZWQgaW4gdGhpcyBoYW5kbGVyICh0aGlzIGlzIGNvbmZpZ3VyZWQgYnkgc2lnYWN0
aW9uJ3Mgc2FfbWFzaykuCi0gICAgLy8gU28gYmVmb3JlIGNhbGxpbmcgc2lnc3VzcGVuZCwgU2ln
VGhyZWFkU3VzcGVuZFJlc3VtZSB0byB0aGlzIHRocmVhZCBpcyBkZWZlcnJlZC4gVGhpcyBlbnN1
cmVzIHRoYXQgdGhlIGhhbmRsZXIgaXMgbm90IGV4ZWN1dGVkIHJlY3Vyc2l2ZWx5LgotICAgIHNp
Z3NldF90IGJsb2NrZWRTaWduYWxTZXQ7Ci0gICAgc2lnZmlsbHNldCgmYmxvY2tlZFNpZ25hbFNl
dCk7Ci0gICAgc2lnZGVsc2V0KCZibG9ja2VkU2lnbmFsU2V0LCBTaWdUaHJlYWRTdXNwZW5kUmVz
dW1lKTsKLSAgICBzaWdzdXNwZW5kKCZibG9ja2VkU2lnbmFsU2V0KTsKLQotICAgIHRocmVhZC0+
bV9wbGF0Zm9ybVJlZ2lzdGVycyA9IG51bGxwdHI7Ci0KLSAgICAvLyBBbGxvdyByZXN1bWUgY2Fs
bGVyIHRvIHNlZSB0aGF0IHRoaXMgdGhyZWFkIGlzIHJlc3VtZWQuCi0gICAgZ2xvYmFsU2VtYXBo
b3JlRm9yU3VzcGVuZFJlc3VtZS0+cG9zdCgpOwotfQotCi0jZW5kaWYgLy8gIU9TKERBUldJTikK
LQotdm9pZCBUaHJlYWQ6OmluaXRpYWxpemVQbGF0Zm9ybVRocmVhZGluZygpCi17Ci0jaWYgIU9T
KERBUldJTikKLSAgICBnbG9iYWxTZW1hcGhvcmVGb3JTdXNwZW5kUmVzdW1lLmNvbnN0cnVjdCgw
KTsKLQotICAgIC8vIFNpZ25hbCBoYW5kbGVycyBhcmUgcHJvY2VzcyBnbG9iYWwgY29uZmlndXJh
dGlvbi4KLSAgICAvLyBJbnRlbnRpb25hbGx5IGJsb2NrIFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUg
aW4gdGhlIGhhbmRsZXIuCi0gICAgLy8gU2lnVGhyZWFkU3VzcGVuZFJlc3VtZSB3aWxsIGJlIGFs
bG93ZWQgaW4gdGhlIGhhbmRsZXIgYnkgc2lnc3VzcGVuZC4KLSAgICBzdHJ1Y3Qgc2lnYWN0aW9u
IGFjdGlvbjsKLSAgICBzaWdlbXB0eXNldCgmYWN0aW9uLnNhX21hc2spOwotICAgIHNpZ2FkZHNl
dCgmYWN0aW9uLnNhX21hc2ssIFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUpOwotCi0gICAgYWN0aW9u
LnNhX3NpZ2FjdGlvbiA9ICZzaWduYWxIYW5kbGVyU3VzcGVuZFJlc3VtZTsKLSAgICBhY3Rpb24u
c2FfZmxhZ3MgPSBTQV9SRVNUQVJUIHwgU0FfU0lHSU5GTzsKLSAgICBzaWdhY3Rpb24oU2lnVGhy
ZWFkU3VzcGVuZFJlc3VtZSwgJmFjdGlvbiwgMCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBUaHJlYWQ6
OmluaXRpYWxpemVDdXJyZW50VGhyZWFkRXZlbklmTm9uV1RGQ3JlYXRlZCgpCi17Ci0jaWYgIU9T
KERBUldJTikKLSAgICBzaWdzZXRfdCBtYXNrOwotICAgIHNpZ2VtcHR5c2V0KCZtYXNrKTsKLSAg
ICBzaWdhZGRzZXQoJm1hc2ssIFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUpOwotICAgIHB0aHJlYWRf
c2lnbWFzayhTSUdfVU5CTE9DSywgJm1hc2ssIDApOwotI2VuZGlmCi19Ci0KLXN0YXRpYyB2b2lk
KiB3dGZUaHJlYWRFbnRyeVBvaW50KHZvaWQqIGNvbnRleHQpCi17Ci0gICAgVGhyZWFkOjplbnRy
eVBvaW50KHJlaW50ZXJwcmV0X2Nhc3Q8VGhyZWFkOjpOZXdUaHJlYWRDb250ZXh0Kj4oY29udGV4
dCkpOwotICAgIHJldHVybiBudWxscHRyOwotfQotCi1ib29sIFRocmVhZDo6ZXN0YWJsaXNoSGFu
ZGxlKE5ld1RocmVhZENvbnRleHQqIGNvbnRleHQpCi17Ci0gICAgcHRocmVhZF90IHRocmVhZEhh
bmRsZTsKLSAgICBwdGhyZWFkX2F0dHJfdCBhdHRyOwotICAgIHB0aHJlYWRfYXR0cl9pbml0KCZh
dHRyKTsKLSNpZiBIQVZFKFFPU19DTEFTU0VTKQotICAgIHB0aHJlYWRfYXR0cl9zZXRfcW9zX2Ns
YXNzX25wKCZhdHRyLCBhZGp1c3RlZFFPU0NsYXNzKFFPU19DTEFTU19VU0VSX0lOSVRJQVRFRCks
IDApOwotI2VuZGlmCi0gICAgaW50IGVycm9yID0gcHRocmVhZF9jcmVhdGUoJnRocmVhZEhhbmRs
ZSwgJmF0dHIsIHd0ZlRocmVhZEVudHJ5UG9pbnQsIGNvbnRleHQpOwotICAgIHB0aHJlYWRfYXR0
cl9kZXN0cm95KCZhdHRyKTsKLSAgICBpZiAoZXJyb3IpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJG
YWlsZWQgdG8gY3JlYXRlIHB0aHJlYWQgYXQgZW50cnkgcG9pbnQgJXAgd2l0aCBjb250ZXh0ICVw
Iiwgd3RmVGhyZWFkRW50cnlQb2ludCwgY29udGV4dCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0gICAgZXN0YWJsaXNoUGxhdGZvcm1TcGVjaWZpY0hhbmRsZSh0aHJlYWRIYW5kbGUp
OwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFRocmVhZDo6aW5pdGlhbGl6ZUN1cnJlbnRU
aHJlYWRJbnRlcm5hbChjb25zdCBjaGFyKiB0aHJlYWROYW1lKQotewotI2lmIEhBVkUoUFRIUkVB
RF9TRVROQU1FX05QKQotICAgIHB0aHJlYWRfc2V0bmFtZV9ucChub3JtYWxpemVUaHJlYWROYW1l
KHRocmVhZE5hbWUpKTsKLSNlbGlmIE9TKExJTlVYKQotICAgIHByY3RsKFBSX1NFVF9OQU1FLCBu
b3JtYWxpemVUaHJlYWROYW1lKHRocmVhZE5hbWUpKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFN
KHRocmVhZE5hbWUpOwotI2VuZGlmCi0gICAgaW5pdGlhbGl6ZUN1cnJlbnRUaHJlYWRFdmVuSWZO
b25XVEZDcmVhdGVkKCk7Ci19Ci0KLXZvaWQgVGhyZWFkOjpjaGFuZ2VQcmlvcml0eShpbnQgZGVs
dGEpCi17Ci0jaWYgSEFWRShQVEhSRUFEX1NFVFNDSEVEUEFSQU0pCi0gICAgYXV0byBsb2NrZXIg
PSBob2xkTG9jayhtX211dGV4KTsKLQotICAgIGludCBwb2xpY3k7Ci0gICAgc3RydWN0IHNjaGVk
X3BhcmFtIHBhcmFtOwotCi0gICAgaWYgKHB0aHJlYWRfZ2V0c2NoZWRwYXJhbShtX2hhbmRsZSwg
JnBvbGljeSwgJnBhcmFtKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcGFyYW0uc2NoZWRfcHJp
b3JpdHkgKz0gZGVsdGE7Ci0KLSAgICBwdGhyZWFkX3NldHNjaGVkcGFyYW0obV9oYW5kbGUsIHBv
bGljeSwgJnBhcmFtKTsKLSNlbmRpZgotfQotCi1pbnQgVGhyZWFkOjp3YWl0Rm9yQ29tcGxldGlv
bigpCi17Ci0gICAgcHRocmVhZF90IGhhbmRsZTsKLSAgICB7Ci0gICAgICAgIGF1dG8gbG9ja2Vy
ID0gaG9sZExvY2sobV9tdXRleCk7Ci0gICAgICAgIGhhbmRsZSA9IG1faGFuZGxlOwotICAgIH0K
LQotICAgIGludCBqb2luUmVzdWx0ID0gcHRocmVhZF9qb2luKGhhbmRsZSwgMCk7Ci0KLSAgICBp
ZiAoam9pblJlc3VsdCA9PSBFREVBRExLKQotICAgICAgICBMT0dfRVJST1IoIlRocmVhZCAlcCB3
YXMgZm91bmQgdG8gYmUgZGVhZGxvY2tlZCB0cnlpbmcgdG8gcXVpdCIsIHRoaXMpOwotICAgIGVs
c2UgaWYgKGpvaW5SZXN1bHQpCi0gICAgICAgIExPR19FUlJPUigiVGhyZWFkICVwIHdhcyB1bmFi
bGUgdG8gYmUgam9pbmVkLlxuIiwgdGhpcyk7Ci0KLSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2Nr
KG1fbXV0ZXgpOwotICAgIEFTU0VSVChqb2luYWJsZVN0YXRlKCkgPT0gSm9pbmFibGUpOwotCi0g
ICAgLy8gSWYgdGhlIHRocmVhZCBoYXMgYWxyZWFkeSBleGl0ZWQsIHRoZW4gZG8gbm90aGluZy4g
SWYgdGhlIHRocmVhZCBoYXNuJ3QgZXhpdGVkIHlldCwgdGhlbiBqdXN0IHNpZ25hbCB0aGF0IHdl
J3ZlIGFscmVhZHkgam9pbmVkIG9uIGl0LgotICAgIC8vIEluIGJvdGggY2FzZXMsIFRocmVhZDo6
ZGVzdHJ1Y3RUTFMoKSB3aWxsIHRha2UgY2FyZSBvZiBkZXN0cm95aW5nIFRocmVhZC4KLSAgICBp
ZiAoIWhhc0V4aXRlZCgpKQotICAgICAgICBkaWRKb2luKCk7Ci0KLSAgICByZXR1cm4gam9pblJl
c3VsdDsKLX0KLQotdm9pZCBUaHJlYWQ6OmRldGFjaCgpCi17Ci0gICAgYXV0byBsb2NrZXIgPSBo
b2xkTG9jayhtX211dGV4KTsKLSAgICBpbnQgZGV0YWNoUmVzdWx0ID0gcHRocmVhZF9kZXRhY2go
bV9oYW5kbGUpOwotICAgIGlmIChkZXRhY2hSZXN1bHQpCi0gICAgICAgIExPR19FUlJPUigiVGhy
ZWFkICVwIHdhcyB1bmFibGUgdG8gYmUgZGV0YWNoZWRcbiIsIHRoaXMpOwotCi0gICAgaWYgKCFo
YXNFeGl0ZWQoKSkKLSAgICAgICAgZGlkQmVjb21lRGV0YWNoZWQoKTsKLX0KLQotVGhyZWFkJiBU
aHJlYWQ6OmluaXRpYWxpemVDdXJyZW50VExTKCkKLXsKLSAgICAvLyBOb3QgYSBXVEYtY3JlYXRl
ZCB0aHJlYWQsIFRocmVhZCBpcyBub3QgZXN0YWJsaXNoZWQgeWV0LgotICAgIFJlZjxUaHJlYWQ+
IHRocmVhZCA9IGFkb3B0UmVmKCpuZXcgVGhyZWFkKCkpOwotICAgIHRocmVhZC0+ZXN0YWJsaXNo
UGxhdGZvcm1TcGVjaWZpY0hhbmRsZShwdGhyZWFkX3NlbGYoKSk7Ci0gICAgdGhyZWFkLT5pbml0
aWFsaXplSW5UaHJlYWQoKTsKLSAgICBpbml0aWFsaXplQ3VycmVudFRocmVhZEV2ZW5JZk5vbldU
RkNyZWF0ZWQoKTsKLQotICAgIHJldHVybiBpbml0aWFsaXplVExTKFdURk1vdmUodGhyZWFkKSk7
Ci19Ci0KLWJvb2wgVGhyZWFkOjpzaWduYWwoaW50IHNpZ25hbE51bWJlcikKLXsKLSAgICBhdXRv
IGxvY2tlciA9IGhvbGRMb2NrKG1fbXV0ZXgpOwotICAgIGlmIChoYXNFeGl0ZWQoKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIGludCBlcnJObyA9IHB0aHJlYWRfa2lsbChtX2hhbmRsZSwg
c2lnbmFsTnVtYmVyKTsKLSAgICByZXR1cm4gIWVyck5vOyAvLyBBIDAgZXJyTm8gbWVhbnMgc3Vj
Y2Vzcy4KLX0KLQotYXV0byBUaHJlYWQ6OnN1c3BlbmQoKSAtPiBFeHBlY3RlZDx2b2lkLCBQbGF0
Zm9ybVN1c3BlbmRFcnJvcj4KLXsKLSAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UodGhp
cyAhPSAmVGhyZWFkOjpjdXJyZW50KCksICJXZSBkbyBub3Qgc3VwcG9ydCBzdXNwZW5kaW5nIHRo
ZSBjdXJyZW50IHRocmVhZCBpdHNlbGYuIik7Ci0gICAgLy8gRHVyaW5nIHN1c3BlbmQsIHN1c3Bl
bmQgb3IgcmVzdW1lIHNob3VsZCBub3QgYmUgZXhlY3V0ZWQgZnJvbSB0aGUgb3RoZXIgdGhyZWFk
cy4KLSAgICAvLyBXZSB1c2UgZ2xvYmFsIGxvY2sgaW5zdGVhZCBvZiBwZXIgdGhyZWFkIGxvY2su
Ci0gICAgLy8gQ29uc2lkZXIgdGhlIGZvbGxvd2luZyBjYXNlLCB0aGVyZSBhcmUgdGhyZWFkcyBB
IGFuZCBCLgotICAgIC8vIEFuZCBBIGF0dGVtcHQgdG8gc3VzcGVuZCBCIGFuZCBCIGF0dGVtcHQg
dG8gc3VzcGVuZCBBLgotICAgIC8vIEEgYW5kIEIgc2VuZCBzaWduYWxzLiBBbmQgbGF0ZXIsIHNp
Z25hbHMgYXJlIGRlbGl2ZXJlZCB0byBBIGFuZCBCLgotICAgIC8vIEluIHRoYXQgY2FzZSwgYm90
aCB3aWxsIGJlIHN1c3BlbmRlZC4KLSAgICAvLwotICAgIC8vIEFuZCBpdCBpcyBpbXBvcnRhbnQg
dG8gdXNlIGEgZ2xvYmFsIGxvY2sgdG8gc3VzcGVuZCBhbmQgcmVzdW1lLiBMZXQncyBjb25zaWRl
ciB1c2luZyBwZXItdGhyZWFkIGxvY2suCi0gICAgLy8gWW91ciBpc3N1aW5nIHRocmVhZCAoQSkg
YXR0ZW1wdHMgdG8gc3VzcGVuZCB0aGUgdGFyZ2V0IHRocmVhZCAoQikuIFRoZW4sIHlvdSB3aWxs
IHN1c3BlbmQgdGhlIHRocmVhZCAoQykgYWRkaXRpb25hbGx5LgotICAgIC8vIFRoaXMgY2FzZSBm
cmVxdWVudGx5IGhhcHBlbnMgaWYgeW91IHN0b3AgdGhyZWFkcyB0byBwZXJmb3JtIHN0YWNrIHNj
YW5uaW5nLiBCdXQgdGhyZWFkIChCKSBtYXkgaG9sZCB0aGUgbG9jayBvZiB0aHJlYWQgKEMpLgot
ICAgIC8vIEluIHRoYXQgY2FzZSwgZGVhZCBsb2NrIGhhcHBlbnMuIFVzaW5nIGdsb2JhbCBsb2Nr
IGhlcmUgYXZvaWRzIHRoaXMgZGVhZCBsb2NrLgotICAgIExvY2tIb2xkZXIgbG9ja2VyKGdsb2Jh
bFN1c3BlbmRMb2NrKTsKLSNpZiBPUyhEQVJXSU4pCi0gICAga2Vybl9yZXR1cm5fdCByZXN1bHQg
PSB0aHJlYWRfc3VzcGVuZChtX3BsYXRmb3JtVGhyZWFkKTsKLSAgICBpZiAocmVzdWx0ICE9IEtF
Uk5fU1VDQ0VTUykKLSAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKHJlc3VsdCk7Ci0gICAg
cmV0dXJuIHsgfTsKLSNlbHNlCi0gICAgaWYgKCFtX3N1c3BlbmRDb3VudCkgewotICAgICAgICAv
LyBJZGVhbGx5LCB3ZSB3b3VsZCBsaWtlIHRvIHVzZSBwdGhyZWFkX3NpZ3F1ZXVlLiBJdCBhbGxv
d3MgdXMgdG8gcGFzcyB0aGUgYXJndW1lbnQgdG8gdGhlIHNpZ25hbCBoYW5kbGVyLgotICAgICAg
ICAvLyBCdXQgaXQgY2FuIGJlIHVzZWQgaW4gYSBmZXcgcGxhdGZvcm1zLCBsaWtlIExpbnV4Lgot
ICAgICAgICAvLyBJbnN0ZWFkLCB3ZSB1c2UgVGhyZWFkKiBzdG9yZWQgaW4gYSBnbG9iYWwgdmFy
aWFibGUgdG8gcGFzcyBpdCB0byB0aGUgc2lnbmFsIGhhbmRsZXIuCi0gICAgICAgIHRhcmdldFRo
cmVhZC5zdG9yZSh0aGlzKTsKLQotICAgICAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICAgICAg
aW50IHJlc3VsdCA9IHB0aHJlYWRfa2lsbChtX2hhbmRsZSwgU2lnVGhyZWFkU3VzcGVuZFJlc3Vt
ZSk7Ci0gICAgICAgICAgICBpZiAocmVzdWx0KQotICAgICAgICAgICAgICAgIHJldHVybiBtYWtl
VW5leHBlY3RlZChyZXN1bHQpOwotICAgICAgICAgICAgZ2xvYmFsU2VtYXBob3JlRm9yU3VzcGVu
ZFJlc3VtZS0+d2FpdCgpOwotICAgICAgICAgICAgaWYgKG1fcGxhdGZvcm1SZWdpc3RlcnMpCi0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAvLyBCZWNhdXNlIG9mIGFuIGFsdGVy
bmF0aXZlIHNpZ25hbCBzdGFjaywgd2UgZmFpbGVkIHRvIHN1c3BlbmQgdGhpcyB0aHJlYWQuCi0g
ICAgICAgICAgICAvLyBSZXRyeSBzdXNwZW5zaW9uIGFnYWluIGFmdGVyIHlpZWxkaW5nLgotICAg
ICAgICAgICAgVGhyZWFkOjp5aWVsZCgpOwotICAgICAgICB9Ci0gICAgfQotICAgICsrbV9zdXNw
ZW5kQ291bnQ7Ci0gICAgcmV0dXJuIHsgfTsKLSNlbmRpZgotfQotCi12b2lkIFRocmVhZDo6cmVz
dW1lKCkKLXsKLSAgICAvLyBEdXJpbmcgcmVzdW1lLCBzdXNwZW5kIG9yIHJlc3VtZSBzaG91bGQg
bm90IGJlIGV4ZWN1dGVkIGZyb20gdGhlIG90aGVyIHRocmVhZHMuCi0gICAgTG9ja0hvbGRlciBs
b2NrZXIoZ2xvYmFsU3VzcGVuZExvY2spOwotI2lmIE9TKERBUldJTikKLSAgICB0aHJlYWRfcmVz
dW1lKG1fcGxhdGZvcm1UaHJlYWQpOwotI2Vsc2UKLSAgICBpZiAobV9zdXNwZW5kQ291bnQgPT0g
MSkgewotICAgICAgICAvLyBXaGVuIGFsbG93aW5nIFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUgaW50
ZXJydXB0IGluIHRoZSBzaWduYWwgaGFuZGxlciBieSBzaWdzdXNwZW5kIGFuZCBTaWdUaHJlYWRT
dXNwZW5kUmVzdW1lIGlzIGFjdHVhbGx5IGlzc3VlZCwKLSAgICAgICAgLy8gdGhlIHNpZ25hbCBo
YW5kbGVyIGl0c2VsZiB3aWxsIGJlIGNhbGxlZCBvbmNlIGFnYWluLgotICAgICAgICAvLyBUaGVy
ZSBhcmUgc2V2ZXJhbCB3YXlzIHRvIGRpc3Rpbmd1aXNoIHRoZSBoYW5kbGVyIGludm9jYXRpb24g
Zm9yIHN1c3BlbmQgYW5kIHJlc3VtZS4KLSAgICAgICAgLy8gMS4gVXNlIGRpZmZlcmVudCBzaWdu
YWwgbnVtYmVycy4gQW5kIGNoZWNrIHRoZSBzaWduYWwgbnVtYmVyIGluIHRoZSBoYW5kbGVyLgot
ICAgICAgICAvLyAyLiBVc2Ugc29tZSBhcmd1bWVudHMgdG8gZGlzdGluZ3Vpc2ggc3VzcGVuZCBh
bmQgcmVzdW1lIGluIHRoZSBoYW5kbGVyLiBJZiBwdGhyZWFkX3NpZ3F1ZXVlIGNhbiBiZSB1c2Vk
LCB3ZSBjYW4gdGFrZSB0aGlzLgotICAgICAgICAvLyAzLiBVc2UgdGhyZWFkJ3MgZmxhZy4KLSAg
ICAgICAgLy8gSW4gdGhpcyBpbXBsZW1lbnRhaXRvbiwgd2UgdGFrZSAoMykuIG1fc3VzcGVuZENv
dW50IGlzIHVzZWQgdG8gZGlzdGluZ3Vpc2ggaXQuCi0gICAgICAgIHRhcmdldFRocmVhZC5zdG9y
ZSh0aGlzKTsKLSAgICAgICAgaWYgKHB0aHJlYWRfa2lsbChtX2hhbmRsZSwgU2lnVGhyZWFkU3Vz
cGVuZFJlc3VtZSkgPT0gRVNSQ0gpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGdsb2Jh
bFNlbWFwaG9yZUZvclN1c3BlbmRSZXN1bWUtPndhaXQoKTsKLSAgICB9Ci0gICAgLS1tX3N1c3Bl
bmRDb3VudDsKLSNlbmRpZgotfQotCi0jaWYgT1MoREFSV0lOKQotc3RydWN0IFRocmVhZFN0YXRl
TWV0YWRhdGEgewotICAgIHVuc2lnbmVkIHVzZXJDb3VudDsKLSAgICB0aHJlYWRfc3RhdGVfZmxh
dm9yX3QgZmxhdm9yOwotfTsKLQotc3RhdGljIFRocmVhZFN0YXRlTWV0YWRhdGEgdGhyZWFkU3Rh
dGVNZXRhZGF0YSgpCi17Ci0jaWYgQ1BVKFg4NikKLSAgICB1bnNpZ25lZCB1c2VyQ291bnQgPSBz
aXplb2YoUGxhdGZvcm1SZWdpc3RlcnMpIC8gc2l6ZW9mKGludCk7Ci0gICAgdGhyZWFkX3N0YXRl
X2ZsYXZvcl90IGZsYXZvciA9IGkzODZfVEhSRUFEX1NUQVRFOwotI2VsaWYgQ1BVKFg4Nl82NCkK
LSAgICB1bnNpZ25lZCB1c2VyQ291bnQgPSB4ODZfVEhSRUFEX1NUQVRFNjRfQ09VTlQ7Ci0gICAg
dGhyZWFkX3N0YXRlX2ZsYXZvcl90IGZsYXZvciA9IHg4Nl9USFJFQURfU1RBVEU2NDsKLSNlbGlm
IENQVShQUEMpCi0gICAgdW5zaWduZWQgdXNlckNvdW50ID0gUFBDX1RIUkVBRF9TVEFURV9DT1VO
VDsKLSAgICB0aHJlYWRfc3RhdGVfZmxhdm9yX3QgZmxhdm9yID0gUFBDX1RIUkVBRF9TVEFURTsK
LSNlbGlmIENQVShQUEM2NCkKLSAgICB1bnNpZ25lZCB1c2VyQ291bnQgPSBQUENfVEhSRUFEX1NU
QVRFNjRfQ09VTlQ7Ci0gICAgdGhyZWFkX3N0YXRlX2ZsYXZvcl90IGZsYXZvciA9IFBQQ19USFJF
QURfU1RBVEU2NDsKLSNlbGlmIENQVShBUk0pCi0gICAgdW5zaWduZWQgdXNlckNvdW50ID0gQVJN
X1RIUkVBRF9TVEFURV9DT1VOVDsKLSAgICB0aHJlYWRfc3RhdGVfZmxhdm9yX3QgZmxhdm9yID0g
QVJNX1RIUkVBRF9TVEFURTsKLSNlbGlmIENQVShBUk02NCkKLSAgICB1bnNpZ25lZCB1c2VyQ291
bnQgPSBBUk1fVEhSRUFEX1NUQVRFNjRfQ09VTlQ7Ci0gICAgdGhyZWFkX3N0YXRlX2ZsYXZvcl90
IGZsYXZvciA9IEFSTV9USFJFQURfU1RBVEU2NDsKLSNlbHNlCi0jZXJyb3IgVW5rbm93biBBcmNo
aXRlY3R1cmUKLSNlbmRpZgotICAgIHJldHVybiBUaHJlYWRTdGF0ZU1ldGFkYXRhIHsgdXNlckNv
dW50LCBmbGF2b3IgfTsKLX0KLSNlbmRpZiAvLyBPUyhEQVJXSU4pCi0KLXNpemVfdCBUaHJlYWQ6
OmdldFJlZ2lzdGVycyhQbGF0Zm9ybVJlZ2lzdGVycyYgcmVnaXN0ZXJzKQotewotICAgIExvY2tI
b2xkZXIgbG9ja2VyKGdsb2JhbFN1c3BlbmRMb2NrKTsKLSNpZiBPUyhEQVJXSU4pCi0gICAgYXV0
byBtZXRhZGF0YSA9IHRocmVhZFN0YXRlTWV0YWRhdGEoKTsKLSAgICBrZXJuX3JldHVybl90IHJl
c3VsdCA9IHRocmVhZF9nZXRfc3RhdGUobV9wbGF0Zm9ybVRocmVhZCwgbWV0YWRhdGEuZmxhdm9y
LCAodGhyZWFkX3N0YXRlX3QpJnJlZ2lzdGVycywgJm1ldGFkYXRhLnVzZXJDb3VudCk7Ci0gICAg
aWYgKHJlc3VsdCAhPSBLRVJOX1NVQ0NFU1MpIHsKLSAgICAgICAgV1RGUmVwb3J0RmF0YWxFcnJv
cihfX0ZJTEVfXywgX19MSU5FX18sIFdURl9QUkVUVFlfRlVOQ1RJT04sICJKYXZhU2NyaXB0IGdh
cmJhZ2UgY29sbGVjdGlvbiBmYWlsZWQgYmVjYXVzZSB0aHJlYWRfZ2V0X3N0YXRlIHJldHVybmVk
IGFuIGVycm9yICglZCkuIFRoaXMgaXMgcHJvYmFibHkgdGhlIHJlc3VsdCBvZiBydW5uaW5nIGlu
c2lkZSBSb3NldHRhLCB3aGljaCBpcyBub3Qgc3VwcG9ydGVkLiIsIHJlc3VsdCk7Ci0gICAgICAg
IENSQVNIKCk7Ci0gICAgfQotICAgIHJldHVybiBtZXRhZGF0YS51c2VyQ291bnQgKiBzaXplb2Yo
dWludHB0cl90KTsKLSNlbHNlCi0gICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX3N1c3BlbmRDb3Vu
dCwgIldlIGNhbiBnZXQgcmVnaXN0ZXJzIG9ubHkgaWYgdGhlIHRocmVhZCBpcyBzdXNwZW5kZWQu
Iik7Ci0gICAgQVNTRVJUKG1fcGxhdGZvcm1SZWdpc3RlcnMpOwotICAgIHJlZ2lzdGVycyA9ICpt
X3BsYXRmb3JtUmVnaXN0ZXJzOwotICAgIHJldHVybiBzaXplb2YoUGxhdGZvcm1SZWdpc3RlcnMp
OwotI2VuZGlmCi19Ci0KLXZvaWQgVGhyZWFkOjplc3RhYmxpc2hQbGF0Zm9ybVNwZWNpZmljSGFu
ZGxlKHB0aHJlYWRfdCBoYW5kbGUpCi17Ci0gICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX211
dGV4KTsKLSAgICBtX2hhbmRsZSA9IGhhbmRsZTsKLSNpZiBPUyhEQVJXSU4pCi0gICAgbV9wbGF0
Zm9ybVRocmVhZCA9IHB0aHJlYWRfbWFjaF90aHJlYWRfbnAoaGFuZGxlKTsKLSNlbmRpZgotfQot
Ci0jaWYgIUhBVkUoRkFTVF9UTFMpCi12b2lkIFRocmVhZDo6aW5pdGlhbGl6ZVRMU0tleSgpCi17
Ci0gICAgdGhyZWFkU3BlY2lmaWNLZXlDcmVhdGUoJnNfa2V5LCBkZXN0cnVjdFRMUyk7Ci19Ci0j
ZW5kaWYKLQotVGhyZWFkJiBUaHJlYWQ6OmluaXRpYWxpemVUTFMoUmVmPFRocmVhZD4mJiB0aHJl
YWQpCi17Ci0gICAgLy8gV2UgbGVhayB0aGUgcmVmIHRvIGtlZXAgdGhlIFRocmVhZCBhbGl2ZSB3
aGlsZSBpdCBpcyBoZWxkIGluIFRMUy4gZGVzdHJ1Y3RUTFMgd2lsbCBkZXJlZiBpdCBsYXRlciBh
dCB0aHJlYWQgZGVzdHJ1Y3Rpb24gdGltZS4KLSAgICBhdXRvJiB0aHJlYWRJblRMUyA9IHRocmVh
ZC5sZWFrUmVmKCk7Ci0jaWYgIUhBVkUoRkFTVF9UTFMpCi0gICAgQVNTRVJUKHNfa2V5ICE9IElu
dmFsaWRUaHJlYWRTcGVjaWZpY0tleSk7Ci0gICAgdGhyZWFkU3BlY2lmaWNTZXQoc19rZXksICZ0
aHJlYWRJblRMUyk7Ci0jZWxzZQotICAgIF9wdGhyZWFkX3NldHNwZWNpZmljX2RpcmVjdChXVEZf
VEhSRUFEX0RBVEFfS0VZLCAmdGhyZWFkSW5UTFMpOwotICAgIHB0aHJlYWRfa2V5X2luaXRfbnAo
V1RGX1RIUkVBRF9EQVRBX0tFWSwgJmRlc3RydWN0VExTKTsKLSNlbmRpZgotICAgIHJldHVybiB0
aHJlYWRJblRMUzsKLX0KLQotdm9pZCBUaHJlYWQ6OmRlc3RydWN0VExTKHZvaWQqIGRhdGEpCi17
Ci0gICAgVGhyZWFkKiB0aHJlYWQgPSBzdGF0aWNfY2FzdDxUaHJlYWQqPihkYXRhKTsKLSAgICBB
U1NFUlQodGhyZWFkKTsKLQotICAgIGlmICh0aHJlYWQtPm1faXNEZXN0cm95ZWRPbmNlKSB7Ci0g
ICAgICAgIHRocmVhZC0+ZGlkRXhpdCgpOwotICAgICAgICB0aHJlYWQtPmRlcmVmKCk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICB0aHJlYWQtPm1faXNEZXN0cm95ZWRPbmNlID0gdHJ1
ZTsKLSAgICAvLyBSZS1zZXR0aW5nIHRoZSB2YWx1ZSBmb3Iga2V5IGNhdXNlcyBhbm90aGVyIGRl
c3RydWN0VExTKCkgY2FsbCBhZnRlciBhbGwgb3RoZXIgdGhyZWFkLXNwZWNpZmljIGRlc3RydWN0
b3JzIHdlcmUgY2FsbGVkLgotI2lmICFIQVZFKEZBU1RfVExTKQotICAgIEFTU0VSVChzX2tleSAh
PSBJbnZhbGlkVGhyZWFkU3BlY2lmaWNLZXkpOwotICAgIHRocmVhZFNwZWNpZmljU2V0KHNfa2V5
LCB0aHJlYWQpOwotI2Vsc2UKLSAgICBfcHRocmVhZF9zZXRzcGVjaWZpY19kaXJlY3QoV1RGX1RI
UkVBRF9EQVRBX0tFWSwgdGhyZWFkKTsKLSAgICBwdGhyZWFkX2tleV9pbml0X25wKFdURl9USFJF
QURfREFUQV9LRVksICZkZXN0cnVjdFRMUyk7Ci0jZW5kaWYKLX0KLQotTXV0ZXg6On5NdXRleCgp
Ci17Ci0gICAgaW50IHJlc3VsdCA9IHB0aHJlYWRfbXV0ZXhfZGVzdHJveSgmbV9tdXRleCk7Ci0g
ICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsICFyZXN1bHQpOwotfQotCi12b2lkIE11dGV4Ojpsb2Nr
KCkKLXsKLSAgICBpbnQgcmVzdWx0ID0gcHRocmVhZF9tdXRleF9sb2NrKCZtX211dGV4KTsKLSAg
ICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgIXJlc3VsdCk7Ci19Ci0KLWJvb2wgTXV0ZXg6OnRyeUxv
Y2soKQotewotICAgIGludCByZXN1bHQgPSBwdGhyZWFkX211dGV4X3RyeWxvY2soJm1fbXV0ZXgp
OwotCi0gICAgaWYgKHJlc3VsdCA9PSAwKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAo
cmVzdWx0ID09IEVCVVNZKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgTXV0ZXg6OnVubG9jaygp
Ci17Ci0gICAgaW50IHJlc3VsdCA9IHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZtX211dGV4KTsKLSAg
ICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgIXJlc3VsdCk7Ci19Ci0KLVRocmVhZENvbmRpdGlvbjo6
flRocmVhZENvbmRpdGlvbigpCi17Ci0gICAgcHRocmVhZF9jb25kX2Rlc3Ryb3koJm1fY29uZGl0
aW9uKTsKLX0KLSAgICAKLXZvaWQgVGhyZWFkQ29uZGl0aW9uOjp3YWl0KE11dGV4JiBtdXRleCkK
LXsKLSAgICBpbnQgcmVzdWx0ID0gcHRocmVhZF9jb25kX3dhaXQoJm1fY29uZGl0aW9uLCAmbXV0
ZXguaW1wbCgpKTsKLSAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgIXJlc3VsdCk7Ci19Ci0KLWJv
b2wgVGhyZWFkQ29uZGl0aW9uOjp0aW1lZFdhaXQoTXV0ZXgmIG11dGV4LCBXYWxsVGltZSBhYnNv
bHV0ZVRpbWUpCi17Ci0gICAgaWYgKGFic29sdXRlVGltZSA8IFdhbGxUaW1lOjpub3coKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGFic29sdXRlVGltZSA+IFdhbGxUaW1lOjpm
cm9tUmF3U2Vjb25kcyhJTlRfTUFYKSkgewotICAgICAgICB3YWl0KG11dGV4KTsKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgZG91YmxlIHJhd1NlY29uZHMgPSBhYnNvbHV0ZVRp
bWUuc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgpOwotCi0gICAgaW50IHRpbWVTZWNvbmRzID0g
c3RhdGljX2Nhc3Q8aW50PihyYXdTZWNvbmRzKTsKLSAgICBpbnQgdGltZU5hbm9zZWNvbmRzID0g
c3RhdGljX2Nhc3Q8aW50PigocmF3U2Vjb25kcyAtIHRpbWVTZWNvbmRzKSAqIDFFOSk7Ci0KLSAg
ICB0aW1lc3BlYyB0YXJnZXRUaW1lOwotICAgIHRhcmdldFRpbWUudHZfc2VjID0gdGltZVNlY29u
ZHM7Ci0gICAgdGFyZ2V0VGltZS50dl9uc2VjID0gdGltZU5hbm9zZWNvbmRzOwotCi0gICAgcmV0
dXJuIHB0aHJlYWRfY29uZF90aW1lZHdhaXQoJm1fY29uZGl0aW9uLCAmbXV0ZXguaW1wbCgpLCAm
dGFyZ2V0VGltZSkgPT0gMDsKLX0KLQotdm9pZCBUaHJlYWRDb25kaXRpb246OnNpZ25hbCgpCi17
Ci0gICAgaW50IHJlc3VsdCA9IHB0aHJlYWRfY29uZF9zaWduYWwoJm1fY29uZGl0aW9uKTsKLSAg
ICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgIXJlc3VsdCk7Ci19Ci0KLXZvaWQgVGhyZWFkQ29uZGl0
aW9uOjpicm9hZGNhc3QoKQotewotICAgIGludCByZXN1bHQgPSBwdGhyZWFkX2NvbmRfYnJvYWRj
YXN0KCZtX2NvbmRpdGlvbik7Ci0gICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsICFyZXN1bHQpOwot
fQotCi12b2lkIFRocmVhZDo6eWllbGQoKQotewotICAgIHNjaGVkX3lpZWxkKCk7Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdURgotCi0jZW5kaWYgLy8gVVNFKFBUSFJFQURTKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dURi93dGYvVGhyZWFkaW5nV2luLmNwcCBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZGlu
Z1dpbi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEwZDQ2YWM4YWQ4Yzk0NzFh
OTMzYWM3ODE2Mjk4NzA1MDcxYTJlMDIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dURi93dGYvVGhyZWFkaW5nV2luLmNwcAorKysgL2Rldi9u
dWxsCkBAIC0xLDQ2NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAw
OSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA5
IFRvcmNoIE1vYmlsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4gCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4gCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3Ig
dGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLyoKLSAqIFRoZXJlIGFyZSBudW1lcm91
cyBhY2FkZW1pYyBhbmQgcHJhY3RpY2FsIHdvcmtzIG9uIGhvdyB0byBpbXBsZW1lbnQgcHRocmVh
ZF9jb25kX3dhaXQvcHRocmVhZF9jb25kX3NpZ25hbC9wdGhyZWFkX2NvbmRfYnJvYWRjYXN0Ci0g
KiBmdW5jdGlvbnMgb24gV2luMzIuIEhlcmUgaXMgb25lIGV4YW1wbGU6IGh0dHA6Ly93d3cuY3Mu
d3VzdGwuZWR1L35zY2htaWR0L3dpbjMyLWN2LTEuaHRtbCB3aGljaCBpcyB3aWRlbHkgY3JlZGl0
ZWQgYXMgYSAnc3RhcnRpbmcgcG9pbnQnCi0gKiBvZiBtb2Rlcm4gYXR0ZW1wdHMuIFRoZXJlIGFy
ZSBzZXZlcmFsIG1vcmUgb3IgbGVzcyBwcm92ZW4gaW1wbGVtZW50YXRpb25zLCBvbmUgaW4gQm9v
c3QgQysrIGxpYnJhcnkgKGh0dHA6Ly93d3cuYm9vc3Qub3JnKSBhbmQgYW5vdGhlcgotICogaW4g
cHRocmVhZHMtd2luMzIgKGh0dHA6Ly9zb3VyY2V3YXJlLm9yZy9wdGhyZWFkcy13aW4zMi8pLgot
ICoKLSAqIFRoZSBudW1iZXIgb2YgYXJ0aWNsZXMgYW5kIGRpc2N1c3Npb25zIGlzIHRoZSBldmlk
ZW5jZSBvZiBzaWduaWZpY2FudCBkaWZmaWN1bHRpZXMgaW4gaW1wbGVtZW50aW5nIHRoZXNlIHBy
aW1pdGl2ZXMgY29ycmVjdGx5LgotICogVGhlIGJyaWVmIHNlYXJjaCBvZiByZXZpc2lvbnMsIENo
YW5nZUxvZyBlbnRyaWVzLCBkaXNjdXNzaW9ucyBpbiBjb21wLnByb2dyYW1taW5nLnRocmVhZHMg
YW5kIG90aGVyIHBsYWNlcyBjbGVhcmx5IGRvY3VtZW50cwotICogbnVtZXJvdXMgcGl0ZmFsbHMg
YW5kIHBlcmZvcm1hbmNlIHByb2JsZW1zIHRoZSBhdXRob3JzIGhhZCB0byBvdmVyY29tZSB0byBh
cnJpdmUgdG8gdGhlIHN1aXRhYmxlIGltcGxlbWVudGF0aW9ucy4KLSAqIE9wdGltYWxseSwgV2Vi
S2l0IHdvdWxkIHVzZSBvbmUgb2YgdGhvc2Ugc3VwcG9ydGVkL3Rlc3RlZCBsaWJyYXJpZXMgZGly
ZWN0bHkuIFRvIHJvbGwgb3V0IG91ciBvd24gaW1wbGVtZW50YXRpb24gaXMgaW1wcmFjdGljYWws
Ci0gKiBpZiBldmVuIGZvciB0aGUgbGFjayBvZiBzdWZmaWNpZW50IHRlc3RpbmcuIEhvd2V2ZXIs
IGEgZmFpdGhmdWwgcmVwcm9kdWN0aW9uIG9mIHRoZSBjb2RlIGZyb20gb25lIG9mIHRoZSBwb3B1
bGFyIHN1cHBvcnRlZAotICogbGlicmFyaWVzIHNlZW1zIHRvIGJlIGEgZ29vZCBjb21wcm9taXNl
LgotICoKLSAqIFRoZSBlYXJseSBCb29zdCBpbXBsZW1lbnRhdGlvbiAoaHR0cDovL3d3dy5ib3hi
YWNrdXAub3JnL3RyYWMvYnJvd3Nlci9ib3gvbmljay93aW4vbGliL3dpbjMyL2Jvb3N0XzFfMzJf
MC9saWJzL3RocmVhZC9zcmMvY29uZGl0aW9uLmNwcD9yZXY9MzApCi0gKiBpcyBpZGVudGljYWwg
dG8gcHRocmVhZHMtd2luMzIgKGh0dHA6Ly9zb3VyY2V3YXJlLm9yZy9jZ2ktYmluL2N2c3dlYi5j
Z2kvcHRocmVhZHMvcHRocmVhZF9jb25kX3dhaXQuYz9yZXY9MS4xMCZjb250ZW50LXR5cGU9dGV4
dC94LWN2c3dlYi1tYXJrdXAmY3Zzcm9vdD1wdGhyZWFkcy13aW4zMikuCi0gKiBDdXJyZW50IEJv
b3N0IHVzZXMgeWV0IGFub3RoZXIgKGFsdGhvdWdoIHNlZW1pbmdseSBlcXVpdmFsZW50KSBhbGdv
cml0aG0gd2hpY2ggY2FtZSBmcm9tIHRoZWlyICd0aHJlYWQgcmV3cml0ZScgZWZmb3J0LgotICoK
LSAqIFRoaXMgZmlsZSBpbmNsdWRlcyB0aW1lZFdhaXQvc2lnbmFsL2Jyb2FkY2FzdCBpbXBsZW1l
bnRhdGlvbnMgdHJhbnNsYXRlZCB0byBXZWJLaXQgY29kaW5nIHN0eWxlIGZyb20gdGhlIGxhdGVz
dCBhbGdvcml0aG0gYnkKLSAqIEFsZXhhbmRlciBUZXJla2hvdiBhbmQgTG91aXMgVGhvbWFzLCBh
cyBjYXB0dXJlZCBoZXJlOiBodHRwOi8vc291cmNld2FyZS5vcmcvY2dpLWJpbi9jdnN3ZWIuY2dp
L3B0aHJlYWRzL3B0aHJlYWRfY29uZF93YWl0LmM/cmV2PTEuMTAmY29udGVudC10eXBlPXRleHQv
eC1jdnN3ZWItbWFya3VwJmN2c3Jvb3Q9cHRocmVhZHMtd2luMzIKLSAqIEl0IHJlcGxhY2VzIHRo
ZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGVpciBwcmV2aW91cyBhbGdvcml0aG0sIGFsc28gZG9jdW1l
bnRlZCBpbiB0aGUgc2FtZSBzb3VyY2UgYWJvdmUuCi0gKiBUaGUgbmFtaW5nIGFuZCBjb21tZW50
cyBhcmUgbGVmdCB2ZXJ5IGNsb3NlIHRvIG9yaWdpbmFsIHRvIGVuYWJsZSBlYXN5IGNyb3NzLWNo
ZWNrLgotICoKLSAqIFRoZSBjb3JyZXNwb25kaW5nIFB0aHJlYWRzLXdpbjMyIExpY2Vuc2UgaXMg
aW5jbHVkZWQgYmVsb3csIGFuZCBDT05UUklCVVRPUlMgZmlsZSB3aGljaCBpdCByZWZlcnMgdG8g
aXMgYWRkZWQgdG8KLSAqIHNvdXJjZSBkaXJlY3RvcnkgKGFzIENPTlRSSUJVVE9SUy5wdGhyZWFk
cy13aW4zMikuCi0gKi8KLQotLyoKLSAqICAgICAgUHRocmVhZHMtd2luMzIgLSBQT1NJWCBUaHJl
YWRzIExpYnJhcnkgZm9yIFdpbjMyCi0gKiAgICAgIENvcHlyaWdodChDKSAxOTk4IEpvaG4gRS4g
Qm9zc29tCi0gKiAgICAgIENvcHlyaWdodChDKSAxOTk5LDIwMDUgUHRocmVhZHMtd2luMzIgY29u
dHJpYnV0b3JzCi0gKgotICogICAgICBDb250YWN0IEVtYWlsOiBycGpAY2FsbGlzdG8uY2FuYmVy
cmEuZWR1LmF1Ci0gKgotICogICAgICBUaGUgY3VycmVudCBsaXN0IG9mIGNvbnRyaWJ1dG9ycyBp
cyBjb250YWluZWQKLSAqICAgICAgaW4gdGhlIGZpbGUgQ09OVFJJQlVUT1JTIGluY2x1ZGVkIHdp
dGggdGhlIHNvdXJjZQotICogICAgICBjb2RlIGRpc3RyaWJ1dGlvbi4gVGhlIGxpc3QgY2FuIGFs
c28gYmUgc2VlbiBhdCB0aGUKLSAqICAgICAgZm9sbG93aW5nIFdvcmxkIFdpZGUgV2ViIGxvY2F0
aW9uOgotICogICAgICBodHRwOi8vc291cmNlcy5yZWRoYXQuY29tL3B0aHJlYWRzLXdpbjMyL2Nv
bnRyaWJ1dG9ycy5odG1sCi0gKgotICogICAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgICAgIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICAgICAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
Ci0gKiAgICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogICAgICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICog
ICAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQotICogICAgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgotICoKLSAqICAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogICAgICBMaWNlbnNlIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5IGluIHRoZSBmaWxlIENPUFlJTkcuTElCOwotICogICAgICBpZiBu
b3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiAgICAg
IDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EK
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgot
Ci0jaWYgT1MoV0lORE9XUykKLQotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8cHJvY2Vz
cy5oPgotI2luY2x1ZGUgPHdpbmRvd3MuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2lu
Y2x1ZGUgPHd0Zi9Mb2NrLmg+Ci0jaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KLSNpbmNsdWRl
IDx3dGYvTWF0aEV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2lu
Y2x1ZGUgPHd0Zi9UaHJlYWRpbmdQcmltaXRpdmVzLmg+Ci0KLW5hbWVzcGFjZSBXVEYgewotCi1z
dGF0aWMgTG9jayBnbG9iYWxTdXNwZW5kTG9jazsKLQotVGhyZWFkOjp+VGhyZWFkKCkKLXsKLSAg
ICAvLyBJdCBpcyBPSyBiZWNhdXNlIEZMU0FsbG9jJ3MgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQg
ZXZlbiBiZWZvcmUgdGhlcmUgYXJlIHNvbWUgb3BlbiBoYW5kbGVzLgotICAgIC8vIFRoaXMgZWFz
aWx5IGVuc3VyZXMgdGhhdCBhbGwgdGhlIHRocmVhZCByZXNvdXJjZXMgYXJlIGF1dG9tYXRpY2Fs
bHkgY2xvc2VkLgotICAgIGlmIChtX2hhbmRsZSAhPSBJTlZBTElEX0hBTkRMRV9WQUxVRSkKLSAg
ICAgICAgQ2xvc2VIYW5kbGUobV9oYW5kbGUpOwotfQotCi12b2lkIFRocmVhZDo6aW5pdGlhbGl6
ZUN1cnJlbnRUaHJlYWRFdmVuSWZOb25XVEZDcmVhdGVkKCkKLXsKLX0KLQotLy8gTVNfVkNfRVhD
RVBUSU9OLCBUSFJFQUROQU1FX0lORk8sIGFuZCBzZXRUaHJlYWROYW1lSW50ZXJuYWwgYWxsIGNv
bWUgZnJvbSA8aHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L3hjYjJ6OGhz
LmFzcHg+Lgotc3RhdGljIGNvbnN0IERXT1JEIE1TX1ZDX0VYQ0VQVElPTiA9IDB4NDA2RDEzODg7
Ci0KLSNwcmFnbWEgcGFjayhwdXNoLCA4KQotdHlwZWRlZiBzdHJ1Y3QgdGFnVEhSRUFETkFNRV9J
TkZPIHsKLSAgICBEV09SRCBkd1R5cGU7IC8vIG11c3QgYmUgMHgxMDAwCi0gICAgTFBDU1RSIHN6
TmFtZTsgLy8gcG9pbnRlciB0byBuYW1lIChpbiB1c2VyIGFkZHIgc3BhY2UpCi0gICAgRFdPUkQg
ZHdUaHJlYWRJRDsgLy8gdGhyZWFkIElEICgtMT1jYWxsZXIgdGhyZWFkKQotICAgIERXT1JEIGR3
RmxhZ3M7IC8vIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlLCBtdXN0IGJlIHplcm8KLX0gVEhSRUFE
TkFNRV9JTkZPOwotI3ByYWdtYSBwYWNrKHBvcCkKLQotdm9pZCBUaHJlYWQ6OmluaXRpYWxpemVD
dXJyZW50VGhyZWFkSW50ZXJuYWwoY29uc3QgY2hhciogc3pUaHJlYWROYW1lKQotewotI2lmIENP
TVBJTEVSKE1JTkdXKQotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhyZWFkIG5hbWUgc2V0dGlu
ZyB3aXRoIE1pbmdXLgotICAgIFVOVVNFRF9QQVJBTShzelRocmVhZE5hbWUpOwotI2Vsc2UKLSAg
ICBUSFJFQUROQU1FX0lORk8gaW5mbzsKLSAgICBpbmZvLmR3VHlwZSA9IDB4MTAwMDsKLSAgICBp
bmZvLnN6TmFtZSA9IFRocmVhZDo6bm9ybWFsaXplVGhyZWFkTmFtZShzelRocmVhZE5hbWUpOwot
ICAgIGluZm8uZHdUaHJlYWRJRCA9IEdldEN1cnJlbnRUaHJlYWRJZCgpOwotICAgIGluZm8uZHdG
bGFncyA9IDA7Ci0KLSAgICBfX3RyeSB7Ci0gICAgICAgIFJhaXNlRXhjZXB0aW9uKE1TX1ZDX0VY
Q0VQVElPTiwgMCwgc2l6ZW9mKGluZm8pL3NpemVvZihVTE9OR19QVFIpLCByZWludGVycHJldF9j
YXN0PFVMT05HX1BUUio+KCZpbmZvKSk7Ci0gICAgfSBfX2V4Y2VwdCAoRVhDRVBUSU9OX0NPTlRJ
TlVFX0VYRUNVVElPTikgewotICAgIH0KLSNlbmRpZgotICAgIGluaXRpYWxpemVDdXJyZW50VGhy
ZWFkRXZlbklmTm9uV1RGQ3JlYXRlZCgpOwotfQotCi12b2lkIFRocmVhZDo6aW5pdGlhbGl6ZVBs
YXRmb3JtVGhyZWFkaW5nKCkKLXsKLX0KLQotc3RhdGljIHVuc2lnbmVkIF9fc3RkY2FsbCB3dGZU
aHJlYWRFbnRyeVBvaW50KHZvaWQqIGRhdGEpCi17Ci0gICAgVGhyZWFkOjplbnRyeVBvaW50KHJl
aW50ZXJwcmV0X2Nhc3Q8VGhyZWFkOjpOZXdUaHJlYWRDb250ZXh0Kj4oZGF0YSkpOwotICAgIHJl
dHVybiAwOwotfQotCi1ib29sIFRocmVhZDo6ZXN0YWJsaXNoSGFuZGxlKE5ld1RocmVhZENvbnRl
eHQqIGRhdGEpCi17Ci0gICAgdW5zaWduZWQgdGhyZWFkSWRlbnRpZmllciA9IDA7Ci0gICAgSEFO
RExFIHRocmVhZEhhbmRsZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8SEFORExFPihfYmVnaW50aHJlYWRl
eCgwLCAwLCB3dGZUaHJlYWRFbnRyeVBvaW50LCBkYXRhLCAwLCAmdGhyZWFkSWRlbnRpZmllcikp
OwotICAgIGlmICghdGhyZWFkSGFuZGxlKSB7Ci0gICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRv
IGNyZWF0ZSB0aHJlYWQgYXQgZW50cnkgcG9pbnQgJXAgd2l0aCBkYXRhICVwOiAlbGQiLCB3dGZU
aHJlYWRFbnRyeVBvaW50LCBkYXRhLCBlcnJubyk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0gICAgZXN0YWJsaXNoUGxhdGZvcm1TcGVjaWZpY0hhbmRsZSh0aHJlYWRIYW5kbGUsIHRo
cmVhZElkZW50aWZpZXIpOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFRocmVhZDo6Y2hh
bmdlUHJpb3JpdHkoaW50IGRlbHRhKQotewotICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9t
dXRleCk7Ci0gICAgU2V0VGhyZWFkUHJpb3JpdHkobV9oYW5kbGUsIFRIUkVBRF9QUklPUklUWV9O
T1JNQUwgKyBkZWx0YSk7Ci19Ci0KLWludCBUaHJlYWQ6OndhaXRGb3JDb21wbGV0aW9uKCkKLXsK
LSAgICBIQU5ETEUgaGFuZGxlOwotICAgIHsKLSAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9j
ayhtX211dGV4KTsKLSAgICAgICAgaGFuZGxlID0gbV9oYW5kbGU7Ci0gICAgfQotCi0gICAgRFdP
UkQgam9pblJlc3VsdCA9IFdhaXRGb3JTaW5nbGVPYmplY3QoaGFuZGxlLCBJTkZJTklURSk7Ci0g
ICAgaWYgKGpvaW5SZXN1bHQgPT0gV0FJVF9GQUlMRUQpCi0gICAgICAgIExPR19FUlJPUigiVGhy
ZWFkICVwIHdhcyBmb3VuZCB0byBiZSBkZWFkbG9ja2VkIHRyeWluZyB0byBxdWl0IiwgdGhpcyk7
Ci0KLSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbXV0ZXgpOwotICAgIEFTU0VSVChqb2lu
YWJsZVN0YXRlKCkgPT0gSm9pbmFibGUpOwotCi0gICAgLy8gVGhlIHRocmVhZCBoYXMgYWxyZWFk
eSBleGl0ZWQsIGRvIG5vdGhpbmcuCi0gICAgLy8gVGhlIHRocmVhZCBoYXNuJ3QgZXhpdGVkIHll
dCwgc28gZG9uJ3QgY2xlYW4gYW55dGhpbmcgdXAuIEp1c3Qgc2lnbmFsIHRoYXQgd2UndmUgYWxy
ZWFkeSBqb2luZWQgb24gaXQgc28gdGhhdCBpdCB3aWxsIGNsZWFuIHVwIGFmdGVyIGl0c2VsZi4K
LSAgICBpZiAoIWhhc0V4aXRlZCgpKQotICAgICAgICBkaWRKb2luKCk7Ci0KLSAgICByZXR1cm4g
am9pblJlc3VsdDsKLX0KLQotdm9pZCBUaHJlYWQ6OmRldGFjaCgpCi17Ci0gICAgLy8gV2UgZm9s
bG93IHRoZSBwdGhyZWFkIHNlbWFudGljczogZXZlbiBhZnRlciB0aGUgZGV0YWNoIGlzIGNhbGxl
ZCwKLSAgICAvLyB3ZSBjYW4gc3RpbGwgcGVyZm9ybSB2YXJpb3VzIG9wZXJhdGlvbnMgb250byB0
aGUgdGhyZWFkLiBGb3IgZXhhbXBsZSwKLSAgICAvLyB3ZSBjYW4gZG8gcHRocmVhZF9raWxsIGZv
ciB0aGUgZGV0YWNoZWQgdGhyZWFkLiBUaGUgcHJvYmxlbSBpbiBXaW5kb3dzCi0gICAgLy8gaXMg
dGhhdCBjbG9zaW5nIEhBTkRMRSBsb3NlcyB0aGUgd2F5IHRvIGRvIHN1Y2ggb3BlcmF0aW9ucy4K
LSAgICAvLyBUbyBkbyBzbywgd2UgZG8gbm90aGluZyBoZXJlIGluIFdpbmRvd3MuIE9yaWdpbmFs
IGRldGFjaCdzIHB1cnBvc2UsCi0gICAgLy8gcmVsZWFzaW5nIHRocmVhZCByZXNvdXJjZSB3aGVu
IHRoZSB0aHJlYWQgZXhpdHMsIHdpbGwgYmUgYWNoaWV2ZWQgYnkKLSAgICAvLyBGbHNDYWxsYmFj
ayBhdXRvbWF0aWNhbGx5LiBGbHNDYWxsYmFjayB3aWxsIGNhbGwgQ2xvc2VIYW5kbGUgdG8gY2xl
YW4gdXAKLSAgICAvLyByZXNvdXJjZS4gU28gaW4gdGhpcyBmdW5jdGlvbiwgd2UganVzdCBtYXJr
IHRoZSB0aHJlYWQgYXMgZGV0YWNoZWQgdG8KLSAgICAvLyBhdm9pZCBjYWxsaW5nIHdhaXRGb3JD
b21wbGV0aW9uIGZvciB0aGlzIHRocmVhZC4KLSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1f
bXV0ZXgpOwotICAgIGlmICghaGFzRXhpdGVkKCkpCi0gICAgICAgIGRpZEJlY29tZURldGFjaGVk
KCk7Ci19Ci0KLWF1dG8gVGhyZWFkOjpzdXNwZW5kKCkgLT4gRXhwZWN0ZWQ8dm9pZCwgUGxhdGZv
cm1TdXNwZW5kRXJyb3I+Ci17Ci0gICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNTQUdFKHRoaXMg
IT0gJlRocmVhZDo6Y3VycmVudCgpLCAiV2UgZG8gbm90IHN1cHBvcnQgc3VzcGVuZGluZyB0aGUg
Y3VycmVudCB0aHJlYWQgaXRzZWxmLiIpOwotICAgIExvY2tIb2xkZXIgbG9ja2VyKGdsb2JhbFN1
c3BlbmRMb2NrKTsKLSAgICBEV09SRCByZXN1bHQgPSBTdXNwZW5kVGhyZWFkKG1faGFuZGxlKTsK
LSAgICBpZiAocmVzdWx0ICE9IChEV09SRCktMSkKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICBy
ZXR1cm4gbWFrZVVuZXhwZWN0ZWQocmVzdWx0KTsKLX0KLQotLy8gRHVyaW5nIHJlc3VtZSwgc3Vz
cGVuZCBvciByZXN1bWUgc2hvdWxkIG5vdCBiZSBleGVjdXRlZCBmcm9tIHRoZSBvdGhlciB0aHJl
YWRzLgotdm9pZCBUaHJlYWQ6OnJlc3VtZSgpCi17Ci0gICAgTG9ja0hvbGRlciBsb2NrZXIoZ2xv
YmFsU3VzcGVuZExvY2spOwotICAgIFJlc3VtZVRocmVhZChtX2hhbmRsZSk7Ci19Ci0KLXNpemVf
dCBUaHJlYWQ6OmdldFJlZ2lzdGVycyhQbGF0Zm9ybVJlZ2lzdGVycyYgcmVnaXN0ZXJzKQotewot
ICAgIExvY2tIb2xkZXIgbG9ja2VyKGdsb2JhbFN1c3BlbmRMb2NrKTsKLSAgICByZWdpc3RlcnMu
Q29udGV4dEZsYWdzID0gQ09OVEVYVF9JTlRFR0VSIHwgQ09OVEVYVF9DT05UUk9MOwotICAgIEdl
dFRocmVhZENvbnRleHQobV9oYW5kbGUsICZyZWdpc3RlcnMpOwotICAgIHJldHVybiBzaXplb2Yo
Q09OVEVYVCk7Ci19Ci0KLVRocmVhZCYgVGhyZWFkOjppbml0aWFsaXplQ3VycmVudFRMUygpCi17
Ci0gICAgLy8gTm90IGEgV1RGLWNyZWF0ZWQgdGhyZWFkLCBUaHJlYWRJZGVudGlmaWVyIGlzIG5v
dCBlc3RhYmxpc2hlZCB5ZXQuCi0gICAgUmVmPFRocmVhZD4gdGhyZWFkID0gYWRvcHRSZWYoKm5l
dyBUaHJlYWQoKSk7Ci0KLSAgICBIQU5ETEUgaGFuZGxlOwotICAgIGJvb2wgaXNTdWNjZXNzZnVs
ID0gRHVwbGljYXRlSGFuZGxlKEdldEN1cnJlbnRQcm9jZXNzKCksIEdldEN1cnJlbnRUaHJlYWQo
KSwgR2V0Q3VycmVudFByb2Nlc3MoKSwgJmhhbmRsZSwgMCwgRkFMU0UsIERVUExJQ0FURV9TQU1F
X0FDQ0VTUyk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoaXNTdWNjZXNzZnVsKTsKLQotICAgIHRocmVh
ZC0+ZXN0YWJsaXNoUGxhdGZvcm1TcGVjaWZpY0hhbmRsZShoYW5kbGUsIGN1cnJlbnRJRCgpKTsK
LSAgICB0aHJlYWQtPmluaXRpYWxpemVJblRocmVhZCgpOwotICAgIGluaXRpYWxpemVDdXJyZW50
VGhyZWFkRXZlbklmTm9uV1RGQ3JlYXRlZCgpOwotCi0gICAgcmV0dXJuIGluaXRpYWxpemVUTFMo
V1RGTW92ZSh0aHJlYWQpKTsKLX0KLQotVGhyZWFkSWRlbnRpZmllciBUaHJlYWQ6OmN1cnJlbnRJ
RCgpCi17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFRocmVhZElkZW50aWZpZXI+KEdldEN1cnJl
bnRUaHJlYWRJZCgpKTsKLX0KLQotdm9pZCBUaHJlYWQ6OmVzdGFibGlzaFBsYXRmb3JtU3BlY2lm
aWNIYW5kbGUoSEFORExFIGhhbmRsZSwgVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJRCkKLXsKLSAg
ICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbXV0ZXgpOwotICAgIG1faGFuZGxlID0gaGFuZGxl
OwotICAgIG1faWQgPSB0aHJlYWRJRDsKLX0KLQotI2RlZmluZSBJbnZhbGlkVGhyZWFkIHJlaW50
ZXJwcmV0X2Nhc3Q8VGhyZWFkKj4oc3RhdGljX2Nhc3Q8dWludHB0cl90PigweGJiYWRiZWVmKSkK
LQotc3RhdGljIFdvcmRMb2NrIHRocmVhZE1hcE11dGV4OwotCi1zdGF0aWMgSGFzaE1hcDxUaHJl
YWRJZGVudGlmaWVyLCBUaHJlYWQqPiYgdGhyZWFkTWFwKCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8SGFzaE1hcDxUaHJlYWRJZGVudGlmaWVyLCBUaHJlYWQqPj4gbWFwOwotICAgIHJl
dHVybiBtYXAuZ2V0KCk7Ci19Ci0KLXZvaWQgVGhyZWFkOjppbml0aWFsaXplVExTS2V5KCkKLXsK
LSAgICB0aHJlYWRNYXAoKTsKLSAgICB0aHJlYWRTcGVjaWZpY0tleUNyZWF0ZSgmc19rZXksIGRl
c3RydWN0VExTKTsKLX0KLQotVGhyZWFkKiBUaHJlYWQ6OmN1cnJlbnREeWluZygpCi17Ci0gICAg
QVNTRVJUKHNfa2V5ICE9IEludmFsaWRUaHJlYWRTcGVjaWZpY0tleSk7Ci0gICAgLy8gQWZ0ZXIg
RkxTIGlzIGRlc3Ryb3llZCwgdGhpcyBtYXAgb2ZmZXJzIHRoZSB2YWx1ZSB1bnRpbCB0aGUgc2Vj
b25kIHRocmVhZCBleGl0IGNhbGxiYWNrIGlzIGNhbGxlZC4KLSAgICBhdXRvIGxvY2tlciA9IGhv
bGRMb2NrKHRocmVhZE1hcE11dGV4KTsKLSAgICByZXR1cm4gdGhyZWFkTWFwKCkuZ2V0KGN1cnJl
bnRJRCgpKTsKLX0KLQotLy8gRklYTUU6IFJlbW92ZSB0aGlzIHdvcmthcm91bmQgY29kZSBvbmNl
IDxyZGFyOi8vcHJvYmxlbS8zMTc5MzIxMz4gaXMgZml4ZWQuCi1SZWZQdHI8VGhyZWFkPiBUaHJl
YWQ6OmdldChUaHJlYWRJZGVudGlmaWVyIGlkKQotewotICAgIGF1dG8gbG9ja2VyID0gaG9sZExv
Y2sodGhyZWFkTWFwTXV0ZXgpOwotICAgIFRocmVhZCogdGhyZWFkID0gdGhyZWFkTWFwKCkuZ2V0
KGlkKTsKLSAgICBpZiAodGhyZWFkKQotICAgICAgICByZXR1cm4gdGhyZWFkOwotICAgIHJldHVy
biBudWxscHRyOwotfQotCi1UaHJlYWQmIFRocmVhZDo6aW5pdGlhbGl6ZVRMUyhSZWY8VGhyZWFk
PiYmIHRocmVhZCkKLXsKLSAgICBBU1NFUlQoc19rZXkgIT0gSW52YWxpZFRocmVhZFNwZWNpZmlj
S2V5KTsKLSAgICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMgd29ya2Fyb3VuZCBjb2RlIG9uY2UgPHJk
YXI6Ly9wcm9ibGVtLzMxNzkzMjEzPiBpcyBmaXhlZC4KLSAgICBhdXRvIGlkID0gdGhyZWFkLT5p
ZCgpOwotICAgIC8vIFdlIGxlYWsgdGhlIHJlZiB0byBrZWVwIHRoZSBUaHJlYWQgYWxpdmUgd2hp
bGUgaXQgaXMgaGVsZCBpbiBUTFMuIGRlc3RydWN0VExTIHdpbGwgZGVyZWYgaXQgbGF0ZXIgYXQg
dGhyZWFkIGRlc3RydWN0aW9uIHRpbWUuCi0gICAgYXV0byYgdGhyZWFkSW5UTFMgPSB0aHJlYWQu
bGVha1JlZigpOwotICAgIHRocmVhZFNwZWNpZmljU2V0KHNfa2V5LCAmdGhyZWFkSW5UTFMpOwot
ICAgIHsKLSAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayh0aHJlYWRNYXBNdXRleCk7Ci0g
ICAgICAgIHRocmVhZE1hcCgpLmFkZChpZCwgJnRocmVhZEluVExTKTsKLSAgICB9Ci0gICAgcmV0
dXJuIHRocmVhZEluVExTOwotfQotCi12b2lkIFRocmVhZDo6ZGVzdHJ1Y3RUTFModm9pZCogZGF0
YSkKLXsKLSAgICBpZiAoZGF0YSA9PSBJbnZhbGlkVGhyZWFkKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBUaHJlYWQqIHRocmVhZCA9IHN0YXRpY19jYXN0PFRocmVhZCo+KGRhdGEpOwotICAgIEFT
U0VSVCh0aHJlYWQpOwotCi0gICAgLy8gRGVsYXkgdGhlIGRlYWxsb2NhdGlvbiBvZiBUaHJlYWQg
bW9yZS4KLSAgICAvLyBJdCBkZWZlcnMgVGhyZWFkIGRlYWxsb2NhdGlvbiBhZnRlciB0aGUgb3Ro
ZXIgVGhyZWFkU3BlY2lmaWMgdmFsdWVzIGFyZSBkZWFsbG9jYXRlZC4KLSAgICBzdGF0aWMgdGhy
ZWFkX2xvY2FsIGNsYXNzIFRocmVhZEV4aXRDYWxsYmFjayB7Ci0gICAgcHVibGljOgotICAgICAg
ICBUaHJlYWRFeGl0Q2FsbGJhY2soVGhyZWFkKiB0aHJlYWQpCi0gICAgICAgICAgICA6IG1fdGhy
ZWFkKHRocmVhZCkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgflRocmVhZEV4aXRD
YWxsYmFjaygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFRocmVhZDo6ZGVzdHJ1Y3RUTFMobV90
aHJlYWQpOwotICAgICAgICB9Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBUaHJlYWQqIG1fdGhy
ZWFkOwotICAgIH0gY2FsbGJhY2sodGhyZWFkKTsKLQotICAgIGlmICh0aHJlYWQtPm1faXNEZXN0
cm95ZWRPbmNlKSB7Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExv
Y2sodGhyZWFkTWFwTXV0ZXgpOwotICAgICAgICAgICAgQVNTRVJUKHRocmVhZE1hcCgpLmNvbnRh
aW5zKHRocmVhZC0+aWQoKSkpOwotICAgICAgICAgICAgdGhyZWFkTWFwKCkucmVtb3ZlKHRocmVh
ZC0+aWQoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgdGhyZWFkLT5kaWRFeGl0KCk7Ci0gICAgICAg
IHRocmVhZC0+ZGVyZWYoKTsKLQotICAgICAgICAvLyBGaWxsIHRoZSBGTFMgd2l0aCB0aGUgbm9u
LW51bGxwdHIgdmFsdWUuIFdoaWxlIEZMUyBkZXN0cnVjdG9yIHdvbid0IGJlIGNhbGxlZCBmb3Ig
dGhhdCwKLSAgICAgICAgLy8gbm9uLW51bGxwdHIgdmFsdWUgdGVsbHMgdXMgdGhhdCB3ZSBhbHJl
YWR5IGRlc3RydWN0ZWQgVGhyZWFkLiBUaGlzIGFsbG93cyB1cyB0bwotICAgICAgICAvLyBkZXRl
Y3QgaW5jb3JyZWN0IHVzZSBvZiBUaHJlYWQ6OmN1cnJlbnQoKSBhZnRlciB0aGlzIHBvaW50IGJl
Y2F1c2UgaXQgd2lsbCBjcmFzaC4KLSAgICAgICAgdGhyZWFkU3BlY2lmaWNTZXQoc19rZXksIElu
dmFsaWRUaHJlYWQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIHRocmVhZFNwZWNpZmlj
U2V0KHNfa2V5LCBJbnZhbGlkVGhyZWFkKTsKLSAgICB0aHJlYWQtPm1faXNEZXN0cm95ZWRPbmNl
ID0gdHJ1ZTsKLX0KLQotTXV0ZXg6On5NdXRleCgpCi17Ci19Ci0KLXZvaWQgTXV0ZXg6OmxvY2so
KQotewotICAgIEFjcXVpcmVTUldMb2NrRXhjbHVzaXZlKCZtX211dGV4KTsKLX0KLQotYm9vbCBN
dXRleDo6dHJ5TG9jaygpCi17Ci0gICAgcmV0dXJuIFRyeUFjcXVpcmVTUldMb2NrRXhjbHVzaXZl
KCZtX211dGV4KTsKLX0KLQotdm9pZCBNdXRleDo6dW5sb2NrKCkKLXsKLSAgICBSZWxlYXNlU1JX
TG9ja0V4Y2x1c2l2ZSgmbV9tdXRleCk7Ci19Ci0KLS8vIFJldHVybnMgYW4gaW50ZXJ2YWwgaW4g
bWlsbGlzZWNvbmRzIHN1aXRhYmxlIGZvciBwYXNzaW5nIHRvIG9uZSBvZiB0aGUgV2luMzIgd2Fp
dCBmdW5jdGlvbnMgKGUuZy4sIDo6V2FpdEZvclNpbmdsZU9iamVjdCkuCi1zdGF0aWMgRFdPUkQg
YWJzb2x1dGVUaW1lVG9XYWl0VGltZW91dEludGVydmFsKFdhbGxUaW1lIGFic29sdXRlVGltZSkK
LXsKLSAgICBXYWxsVGltZSBjdXJyZW50VGltZSA9IFdhbGxUaW1lOjpub3coKTsKLQotICAgIC8v
IFRpbWUgaXMgaW4gdGhlIHBhc3QgLSByZXR1cm4gaW1tZWRpYXRlbHkuCi0gICAgaWYgKGFic29s
dXRlVGltZSA8IGN1cnJlbnRUaW1lKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIC8vIFRpbWUg
aXMgdG9vIGZhciBpbiB0aGUgZnV0dXJlIChhbmQgd291bGQgb3ZlcmZsb3cgdW5zaWduZWQgbG9u
ZykgLSB3YWl0IGZvcmV2ZXIuCi0gICAgaWYgKChhYnNvbHV0ZVRpbWUgLSBjdXJyZW50VGltZSkg
PiBTZWNvbmRzOjpmcm9tTWlsbGlzZWNvbmRzKElOVF9NQVgpKQotICAgICAgICByZXR1cm4gSU5G
SU5JVEU7Ci0KLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RFdPUkQ+KChhYnNvbHV0ZVRpbWUgLSBj
dXJyZW50VGltZSkubWlsbGlzZWNvbmRzKCkpOwotfQotCi1UaHJlYWRDb25kaXRpb246On5UaHJl
YWRDb25kaXRpb24oKQotewotfQotCi12b2lkIFRocmVhZENvbmRpdGlvbjo6d2FpdChNdXRleCYg
bXV0ZXgpCi17Ci0gICAgU2xlZXBDb25kaXRpb25WYXJpYWJsZVNSVygmbV9jb25kaXRpb24sICZt
dXRleC5pbXBsKCksIElORklOSVRFLCAwKTsKLX0KLQotYm9vbCBUaHJlYWRDb25kaXRpb246OnRp
bWVkV2FpdChNdXRleCYgbXV0ZXgsIFdhbGxUaW1lIGFic29sdXRlVGltZSkKLXsKLSAgICAvLyBo
dHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L3dpbmRvd3MvZGVza3RvcC9t
czY4NjMwNCh2PXZzLjg1KS5hc3B4Ci0gICAgRFdPUkQgaW50ZXJ2YWwgPSBhYnNvbHV0ZVRpbWVU
b1dhaXRUaW1lb3V0SW50ZXJ2YWwoYWJzb2x1dGVUaW1lKTsKLSAgICBpZiAoIWludGVydmFsKSB7
Ci0gICAgICAgIC8vIENvbnNpZGVyIHRoZSB3YWl0IHRvIGhhdmUgdGltZWQgb3V0LCBldmVuIGlm
IG91ciBjb25kaXRpb24gaGFzIGFscmVhZHkgYmVlbiBzaWduYWxlZCwgdG8KLSAgICAgICAgLy8g
bWF0Y2ggdGhlIHB0aHJlYWRzIGltcGxlbWVudGF0aW9uLgotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCi0gICAgaWYgKFNsZWVwQ29uZGl0aW9uVmFyaWFibGVTUlcoJm1fY29uZGl0aW9u
LCAmbXV0ZXguaW1wbCgpLCBpbnRlcnZhbCwgMCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAg
IEFTU0VSVChHZXRMYXN0RXJyb3IoKSA9PSBFUlJPUl9USU1FT1VUKTsKLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLXZvaWQgVGhyZWFkQ29uZGl0aW9uOjpzaWduYWwoKQotewotICAgIFdha2VDb25k
aXRpb25WYXJpYWJsZSgmbV9jb25kaXRpb24pOwotfQotCi12b2lkIFRocmVhZENvbmRpdGlvbjo6
YnJvYWRjYXN0KCkKLXsKLSAgICBXYWtlQWxsQ29uZGl0aW9uVmFyaWFibGUoJm1fY29uZGl0aW9u
KTsKLX0KLQotLy8gUmVtb3ZlIHRoaXMgd29ya2Fyb3VuZCBjb2RlIHdoZW4gPHJkYXI6Ly9wcm9i
bGVtLzMxNzkzMjEzPiBpcyBmaXhlZC4KLVRocmVhZElkZW50aWZpZXIgY3JlYXRlVGhyZWFkKFRo
cmVhZEZ1bmN0aW9uIGZ1bmN0aW9uLCB2b2lkKiBkYXRhLCBjb25zdCBjaGFyKiB0aHJlYWROYW1l
KQotewotICAgIHJldHVybiBUaHJlYWQ6OmNyZWF0ZSh0aHJlYWROYW1lLCBbZnVuY3Rpb24sIGRh
dGFdIHsKLSAgICAgICAgZnVuY3Rpb24oZGF0YSk7Ci0gICAgfSktPmlkKCk7Ci19Ci0KLWludCB3
YWl0Rm9yVGhyZWFkQ29tcGxldGlvbihUaHJlYWRJZGVudGlmaWVyIHRocmVhZElEKQotewotICAg
IC8vIFRoaXMgZnVuY3Rpb24gaXMgaW1wbGVtZW50ZWQgYmFzZWQgb24gdGhlIG9sZCBUaHJlYWRp
bmcgaW1wbGVtZW50YXRpb24uCi0gICAgLy8gSXQgcmVtYWlucyBvbmx5IGR1ZSB0byB0aGUgc3Vw
cG9ydCBsaWJyYXJ5IHVzaW5nIG9sZCBUaHJlYWRpbmcgQVBJcyBhbmQKLSAgICAvLyBpdCBzaG91
bGQgbm90IGJlIHVzZWQgaW4gbmV3IGNvZGUuCi0gICAgQVNTRVJUKHRocmVhZElEKTsKLQotICAg
IFJlZlB0cjxUaHJlYWQ+IHRocmVhZCA9IFRocmVhZDo6Z2V0KHRocmVhZElEKTsKLSAgICBpZiAo
IXRocmVhZCkgewotICAgICAgICBMT0dfRVJST1IoIlRocmVhZElkZW50aWZpZXIgJXUgZGlkIG5v
dCBjb3JyZXNwb25kIHRvIGFuIGFjdGl2ZSB0aHJlYWQgd2hlbiB0cnlpbmcgdG8gcXVpdCIsIHRo
cmVhZElEKTsKLSAgICAgICAgcmV0dXJuIFdBSVRfRkFJTEVEOwotICAgIH0KLSAgICByZXR1cm4g
dGhyZWFkLT53YWl0Rm9yQ29tcGxldGlvbigpOwotCi19Ci0KLXZvaWQgVGhyZWFkOjp5aWVsZCgp
Ci17Ci0gICAgU3dpdGNoVG9UaHJlYWQoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV1RGCi0KLSNl
bmRpZiAvLyBPUyhXSU5ET1dTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvY2YvUnVuTG9v
cFRpbWVyQ0YuY3BwIGIvU291cmNlL1dURi93dGYvY2YvUnVuTG9vcFRpbWVyQ0YuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjc0MThmZGQzZWEyN2RiZjg5NDA1MDJlOTBkOTE0M2I1MjgzNTJhODUKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9jZi9SdW5Mb29wVGltZXJDRi5jcHAKQEAgLTAsMCAr
MSw5MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFt
ZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAor
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBQTEFURk9STShDT0NPQSkgJiYgSEFWRShS
VU5MT09QX1RJTUVSKQorCisjaW5jbHVkZSA8d3RmL1J1bkxvb3BUaW1lci5oPgorCisjaW5jbHVk
ZSA8d3RmL0F1dG9kcmFpbmVkUG9vbC5oPgorCituYW1lc3BhY2UgV1RGIHsKKworUnVuTG9vcFRp
bWVyQmFzZTo6flJ1bkxvb3BUaW1lckJhc2UoKQoreworICAgIHN0b3AoKTsKK30KKworc3RhdGlj
IHZvaWQgdGltZXJGaXJlZChDRlJ1bkxvb3BUaW1lclJlZiwgdm9pZCogY29udGV4dCkKK3sKKyAg
ICAvLyBDRlJ1bkxvb3BUaW1lciBkb2VzIG5vdCBjcmVhdGUgYW4gTlNBdXRvcmVsZWFzZVBvb2ws
IGxpa2UgTlNUaW1lciBkb2VzLiBUaGlzIGNhbiBsZWFkIHRvCisgICAgLy8gYXV0b3JlbGVhc2Vk
IG9iamVjdHMgYmVpbmcgcHVzaGVkIGludG8gTlNBdXRvcmVsZWFzZVBvb2xzIHVuZGVybmVhdGgg
dGhlIHJ1biBsb29wLCB3aGljaAorICAgIC8vIGFyZSB2ZXJ5IGluZnJlcXVlbnRseSBkcmFpbmVk
LiBDcmVhdGUgYSBuZXcgYXV0b3JlbGVhc2UgcG9vbCBoZXJlIHRvIGdpdmUgYXV0b3JlbGVhc2Vk
IG9iamVjdHMKKyAgICAvLyBhIHBsYWNlIHRvIGNvbGxlY3QuCisgICAgQXV0b2RyYWluZWRQb29s
IHBvb2w7CisgICAgUnVuTG9vcFRpbWVyQmFzZSogdGltZXIgPSBzdGF0aWNfY2FzdDxSdW5Mb29w
VGltZXJCYXNlKj4oY29udGV4dCk7CisgICAgdGltZXItPmZpcmVkKCk7Cit9CisKK3ZvaWQgUnVu
TG9vcFRpbWVyQmFzZTo6c3RhcnQoU2Vjb25kcyBuZXh0RmlyZUludGVydmFsLCBTZWNvbmRzIHJl
cGVhdEludGVydmFsKQoreworICAgIGlmIChtX3RpbWVyKQorICAgICAgICBDRlJ1bkxvb3BUaW1l
ckludmFsaWRhdGUobV90aW1lci5nZXQoKSk7CisgICAgQ0ZSdW5Mb29wVGltZXJDb250ZXh0IGNv
bnRleHQgPSB7IDAsIHRoaXMsIDAsIDAsIDAgfTsKKyAgICBtX3RpbWVyID0gYWRvcHRDRihDRlJ1
bkxvb3BUaW1lckNyZWF0ZSgwLCBDRkFic29sdXRlVGltZUdldEN1cnJlbnQoKSArIG5leHRGaXJl
SW50ZXJ2YWwuc2Vjb25kcygpLCByZXBlYXRJbnRlcnZhbC5zZWNvbmRzKCksIDAsIDAsIHRpbWVy
RmlyZWQsICZjb250ZXh0KSk7Cit9CisKK3ZvaWQgUnVuTG9vcFRpbWVyQmFzZTo6c2NoZWR1bGUo
Y29uc3QgU2NoZWR1bGVQYWlyKiBzY2hlZHVsZVBhaXIpCit7CisgICAgQVNTRVJUX0FSRyhzY2hl
ZHVsZVBhaXIsIHNjaGVkdWxlUGFpcik7CisgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX3RpbWVy
LCAiVGltZXIgbXVzdCBoYXZlIG9uZSBvZiB0aGUgc3RhcnQgZnVuY3Rpb25zIGNhbGxlZCBiZWZv
cmUgY2FsbGluZyBzY2hlZHVsZSgpLiIpOworICAgIENGUnVuTG9vcEFkZFRpbWVyKHNjaGVkdWxl
UGFpci0+cnVuTG9vcCgpLCBtX3RpbWVyLmdldCgpLCBzY2hlZHVsZVBhaXItPm1vZGUoKSk7Cit9
CisKK3ZvaWQgUnVuTG9vcFRpbWVyQmFzZTo6c2NoZWR1bGUoY29uc3QgU2NoZWR1bGVQYWlySGFz
aFNldCYgc2NoZWR1bGVQYWlycykKK3sKKyAgICBTY2hlZHVsZVBhaXJIYXNoU2V0Ojpjb25zdF9p
dGVyYXRvciBlbmQgPSBzY2hlZHVsZVBhaXJzLmVuZCgpOworICAgIGZvciAoU2NoZWR1bGVQYWly
SGFzaFNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBzY2hlZHVsZVBhaXJzLmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkKKyAgICAgICAgc2NoZWR1bGUoKCppdCkuZ2V0KCkpOworfQorCit2b2lkIFJ1
bkxvb3BUaW1lckJhc2U6OnN0b3AoKQoreworICAgIGlmICghbV90aW1lcikKKyAgICAgICAgcmV0
dXJuOworICAgIENGUnVuTG9vcFRpbWVySW52YWxpZGF0ZShtX3RpbWVyLmdldCgpKTsKKyAgICBt
X3RpbWVyID0gMDsKK30KKworYm9vbCBSdW5Mb29wVGltZXJCYXNlOjppc0FjdGl2ZSgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fdGltZXIgJiYgQ0ZSdW5Mb29wVGltZXJJc1ZhbGlkKG1fdGltZXIu
Z2V0KCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIFBMQVRGT1JNKENP
Q09BKSAmJiBIQVZFKFJVTkxPT1BfVElNRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9j
Zi9TY2hlZHVsZVBhaXJDRi5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9jZi9TY2hlZHVsZVBhaXJDRi5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNDZmNjVjMzNmMDBiN2RhMTUyZjgwZTUyNjhmMDQ3MzAxMzVjY2EzNQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL2NmL1NjaGVkdWxlUGFpckNGLmNwcApA
QCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVy
IHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAg
ICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDx3dGYvU2NoZWR1bGVQ
YWlyLmg+CisKK25hbWVzcGFjZSBXVEYgeworCitib29sIFNjaGVkdWxlUGFpcjo6b3BlcmF0b3I9
PShjb25zdCBTY2hlZHVsZVBhaXImIG90aGVyKSBjb25zdAoreworICAgIGlmIChydW5Mb29wKCkg
IT0gb3RoZXIucnVuTG9vcCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgQ0ZTdHJpbmdS
ZWYgdGhpc01vZGUgPSBtb2RlKCk7CisgICAgQ0ZTdHJpbmdSZWYgb3RoZXJNb2RlID0gb3RoZXIu
bW9kZSgpOworICAgIGlmICghdGhpc01vZGUgfHwgIW90aGVyTW9kZSkKKyAgICAgICAgcmV0dXJu
IHRoaXNNb2RlID09IG90aGVyTW9kZTsKKyAgICByZXR1cm4gQ0ZFcXVhbCh0aGlzTW9kZSwgb3Ro
ZXJNb2RlKTsKK30KKworfSAvLyBuYW1lc3BhY2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3Rm
L21hYy9TY2hlZHVsZVBhaXJNYWMubW0gYi9Tb3VyY2UvV1RGL3d0Zi9tYWMvU2NoZWR1bGVQYWly
TWFjLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjYyMjYxYWQzZjlkNmE2NjEyMDNiZGIxNDE2YzMxOGViMmU0ZWU3
N2EKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9tYWMvU2NoZWR1bGVQYWlyTWFj
Lm1tCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5l
aXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgor
ICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
KyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAq
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHd0Zi9TY2hl
ZHVsZVBhaXIuaD4KKworbmFtZXNwYWNlIFdURiB7CisKK1NjaGVkdWxlUGFpcjo6U2NoZWR1bGVQ
YWlyKE5TUnVuTG9vcCogcnVuTG9vcCwgQ0ZTdHJpbmdSZWYgbW9kZSkKKyAgICA6IG1fbnNSdW5M
b29wKHJ1bkxvb3ApCisgICAgLCBtX3J1bkxvb3AoW3J1bkxvb3AgZ2V0Q0ZSdW5Mb29wXSkKK3sK
KyAgICBpZiAobW9kZSkKKyAgICAgICAgbV9tb2RlID0gYWRvcHRDRihDRlN0cmluZ0NyZWF0ZUNv
cHkoMCwgbW9kZSkpOworfQorCit9IC8vIG5hbWVzcGFjZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dU
Ri93dGYvcG9zaXgvT1NBbGxvY2F0b3JQT1NJWC5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9wb3NpeC9P
U0FsbG9jYXRvclBPU0lYLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lMDExZDYxOTFiZmM4NDgzNTEyY2Y2NzY1
OTMzMjQxNjVjNzdkNjU2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYvcG9zaXgv
T1NBbGxvY2F0b3JQT1NJWC5jcHAKQEAgLTAsMCArMSwxODIgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8d3RmL09TQWxsb2NhdG9yLmg+CisKKyNpbmNsdWRl
IDxlcnJuby5oPgorI2luY2x1ZGUgPHN5cy9tbWFuLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlv
bnMuaD4KKyNpbmNsdWRlIDx3dGYvUGFnZUFsbG9jYXRpb24uaD4KKworbmFtZXNwYWNlIFdURiB7
CisKK3ZvaWQqIE9TQWxsb2NhdG9yOjpyZXNlcnZlVW5jb21taXR0ZWQoc2l6ZV90IGJ5dGVzLCBV
c2FnZSB1c2FnZSwgYm9vbCB3cml0YWJsZSwgYm9vbCBleGVjdXRhYmxlLCBib29sIGluY2x1ZGVz
R3VhcmRQYWdlcykKK3sKKyNpZiBPUyhMSU5VWCkKKyAgICBVTlVTRURfUEFSQU0odXNhZ2UpOwor
ICAgIFVOVVNFRF9QQVJBTSh3cml0YWJsZSk7CisgICAgVU5VU0VEX1BBUkFNKGV4ZWN1dGFibGUp
OworICAgIFVOVVNFRF9QQVJBTShpbmNsdWRlc0d1YXJkUGFnZXMpOworCisgICAgdm9pZCogcmVz
dWx0ID0gbW1hcCgwLCBieXRlcywgUFJPVF9OT05FLCBNQVBfTk9SRVNFUlZFIHwgTUFQX1BSSVZB
VEUgfCBNQVBfQU5PTiwgLTEsIDApOworICAgIGlmIChyZXN1bHQgPT0gTUFQX0ZBSUxFRCkKKyAg
ICAgICAgQ1JBU0goKTsKKyAgICBtYWR2aXNlKHJlc3VsdCwgYnl0ZXMsIE1BRFZfRE9OVE5FRUQp
OworI2Vsc2UKKyAgICB2b2lkKiByZXN1bHQgPSByZXNlcnZlQW5kQ29tbWl0KGJ5dGVzLCB1c2Fn
ZSwgd3JpdGFibGUsIGV4ZWN1dGFibGUsIGluY2x1ZGVzR3VhcmRQYWdlcyk7CisjaWYgSEFWRShN
QURWX0ZSRUVfUkVVU0UpCisgICAgaWYgKHJlc3VsdCkgeworICAgICAgICAvLyBUbyBzdXBwb3J0
IHRoZSAicmVzZXJ2ZSB0aGVuIGNvbW1pdCIgbW9kZWwsIHdlIGhhdmUgdG8gaW5pdGlhbGx5IGRl
Y29tbWl0LgorICAgICAgICB3aGlsZSAobWFkdmlzZShyZXN1bHQsIGJ5dGVzLCBNQURWX0ZSRUVf
UkVVU0FCTEUpID09IC0xICYmIGVycm5vID09IEVBR0FJTikgeyB9CisgICAgfQorI2VuZGlmCisK
KyNlbmRpZgorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCogT1NBbGxvY2F0b3I6OnJl
c2VydmVBbmRDb21taXQoc2l6ZV90IGJ5dGVzLCBVc2FnZSB1c2FnZSwgYm9vbCB3cml0YWJsZSwg
Ym9vbCBleGVjdXRhYmxlLCBib29sIGluY2x1ZGVzR3VhcmRQYWdlcykKK3sKKyAgICAvLyBBbGwg
UE9TSVggcmVzZXJ2YXRpb25zIHN0YXJ0IG91dCBsb2dpY2FsbHkgY29tbWl0dGVkLgorICAgIGlu
dCBwcm90ZWN0aW9uID0gUFJPVF9SRUFEOworICAgIGlmICh3cml0YWJsZSkKKyAgICAgICAgcHJv
dGVjdGlvbiB8PSBQUk9UX1dSSVRFOworICAgIGlmIChleGVjdXRhYmxlKQorICAgICAgICBwcm90
ZWN0aW9uIHw9IFBST1RfRVhFQzsKKworICAgIGludCBmbGFncyA9IE1BUF9QUklWQVRFIHwgTUFQ
X0FOT047CisjaWYgT1MoREFSV0lOKQorICAgIGlmIChleGVjdXRhYmxlKQorICAgICAgICBmbGFn
cyB8PSBNQVBfSklUOworI2VuZGlmCisKKyNpZiBPUyhEQVJXSU4pCisgICAgaW50IGZkID0gdXNh
Z2U7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTSh1c2FnZSk7CisgICAgaW50IGZkID0gLTE7Cisj
ZW5kaWYKKworICAgIHZvaWQqIHJlc3VsdCA9IDA7CisjaWYgKE9TKERBUldJTikgJiYgQ1BVKFg4
Nl82NCkpCisgICAgaWYgKGV4ZWN1dGFibGUpIHsKKyAgICAgICAgQVNTRVJUKGluY2x1ZGVzR3Vh
cmRQYWdlcyk7CisgICAgICAgIC8vIENvb2sgdXAgYW4gYWRkcmVzcyB0byBhbGxvY2F0ZSBhdCwg
dXNpbmcgdGhlIGZvbGxvd2luZyByZWNpcGU6CisgICAgICAgIC8vICAgMTcgYml0cyBvZiB6ZXJv
LCBzdGF5IGluIHVzZXJzcGFjZSBraWRzLgorICAgICAgICAvLyAgIDI2IGJpdHMgb2YgcmFuZG9t
bmVzcyBmb3IgQVNMUi4KKyAgICAgICAgLy8gICAyMSBiaXRzIG9mIHplcm8sIGF0IGxlYXN0IHN0
YXkgYWxpZ25lZCB3aXRoaW4gb25lIGxldmVsIG9mIHRoZSBwYWdldGFibGVzLgorICAgICAgICAv
LworICAgICAgICAvLyBCdXQhIC0gYXMgYSB0ZW1wb3Jhcnkgd29ya2Fyb3VuZCBmb3Igc29tZSBw
bHVnaW4gcHJvYmxlbXMgKHJkYXI6Ly9wcm9ibGVtLzY4MTI4NTQpLAorICAgICAgICAvLyBmb3Ig
bm93IGluc3RlYWQgb2YgMl4yNiBiaXRzIG9mIEFTTFIgbGV0cyBzdGljayB3aXRoIDI1IGJpdHMg
b2YgcmFuZG9taXphdGlvbiBwbHVzCisgICAgICAgIC8vIDJeMjQsIHdoaWNoIHNob3VsZCBwdXQg
dXAgc29tZXdoZXJlIGluIHRoZSBtaWRkbGUgb2YgdXNlcnNwYWNlIChpbiB0aGUgYWRkcmVzcyBy
YW5nZQorICAgICAgICAvLyAweDIwMDAwMDAwMDAwMCAuLiAweDVmZmZmZmZmZmZmZikuCisgICAg
ICAgIGludHB0cl90IHJhbmRvbUxvY2F0aW9uID0gMDsKKyAgICAgICAgcmFuZG9tTG9jYXRpb24g
PSBhcmM0cmFuZG9tKCkgJiAoKDEgPDwgMjUpIC0gMSk7CisgICAgICAgIHJhbmRvbUxvY2F0aW9u
ICs9ICgxIDw8IDI0KTsKKyAgICAgICAgcmFuZG9tTG9jYXRpb24gPDw9IDIxOworICAgICAgICBy
ZXN1bHQgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihyYW5kb21Mb2NhdGlvbik7CisgICAgfQor
I2VuZGlmCisKKyAgICByZXN1bHQgPSBtbWFwKHJlc3VsdCwgYnl0ZXMsIHByb3RlY3Rpb24sIGZs
YWdzLCBmZCwgMCk7CisgICAgaWYgKHJlc3VsdCA9PSBNQVBfRkFJTEVEKSB7CisgICAgICAgIGlm
IChleGVjdXRhYmxlKQorICAgICAgICAgICAgcmVzdWx0ID0gMDsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgQ1JBU0goKTsKKyAgICB9CisgICAgaWYgKHJlc3VsdCAmJiBpbmNsdWRlc0d1YXJk
UGFnZXMpIHsKKyAgICAgICAgLy8gV2UgdXNlIG1tYXAgdG8gcmVtYXAgdGhlIGd1YXJkcGFnZXMg
cmF0aGVyIHRoYW4gdXNpbmcgbXByb3RlY3QgYXMKKyAgICAgICAgLy8gbXByb3RlY3QgcmVzdWx0
cyBpbiBtdWx0aXBsZSByZWZlcmVuY2VzIHRvIHRoZSBjb2RlIHJlZ2lvbi4gVGhpcworICAgICAg
ICAvLyBicmVha3MgdGhlIG1hZHZpc2UgYmFzZWQgbWVjaGFuaXNtIHdlIHVzZSB0byByZXR1cm4g
cGh5c2ljYWwgbWVtb3J5CisgICAgICAgIC8vIHRvIHRoZSBPUy4KKyAgICAgICAgbW1hcChyZXN1
bHQsIHBhZ2VTaXplKCksIFBST1RfTk9ORSwgTUFQX0ZJWEVEIHwgTUFQX1BSSVZBVEUgfCBNQVBf
QU5PTiwgZmQsIDApOworICAgICAgICBtbWFwKHN0YXRpY19jYXN0PGNoYXIqPihyZXN1bHQpICsg
Ynl0ZXMgLSBwYWdlU2l6ZSgpLCBwYWdlU2l6ZSgpLCBQUk9UX05PTkUsIE1BUF9GSVhFRCB8IE1B
UF9QUklWQVRFIHwgTUFQX0FOT04sIGZkLCAwKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKwordm9pZCBPU0FsbG9jYXRvcjo6Y29tbWl0KHZvaWQqIGFkZHJlc3MsIHNpemVfdCBieXRl
cywgYm9vbCB3cml0YWJsZSwgYm9vbCBleGVjdXRhYmxlKQoreworI2lmIE9TKExJTlVYKQorICAg
IGludCBwcm90ZWN0aW9uID0gUFJPVF9SRUFEOworICAgIGlmICh3cml0YWJsZSkKKyAgICAgICAg
cHJvdGVjdGlvbiB8PSBQUk9UX1dSSVRFOworICAgIGlmIChleGVjdXRhYmxlKQorICAgICAgICBw
cm90ZWN0aW9uIHw9IFBST1RfRVhFQzsKKyAgICBpZiAobXByb3RlY3QoYWRkcmVzcywgYnl0ZXMs
IHByb3RlY3Rpb24pKQorICAgICAgICBDUkFTSCgpOworICAgIG1hZHZpc2UoYWRkcmVzcywgYnl0
ZXMsIE1BRFZfV0lMTE5FRUQpOworI2VsaWYgSEFWRShNQURWX0ZSRUVfUkVVU0UpCisgICAgVU5V
U0VEX1BBUkFNKHdyaXRhYmxlKTsKKyAgICBVTlVTRURfUEFSQU0oZXhlY3V0YWJsZSk7CisgICAg
d2hpbGUgKG1hZHZpc2UoYWRkcmVzcywgYnl0ZXMsIE1BRFZfRlJFRV9SRVVTRSkgPT0gLTEgJiYg
ZXJybm8gPT0gRUFHQUlOKSB7IH0KKyNlbHNlCisgICAgLy8gTm9uLU1BRFZfRlJFRV9SRVVTRSBy
ZXNlcnZhdGlvbnMgYXV0b21hdGljYWxseSBjb21taXQgb24gZGVtYW5kLgorICAgIFVOVVNFRF9Q
QVJBTShhZGRyZXNzKTsKKyAgICBVTlVTRURfUEFSQU0oYnl0ZXMpOworICAgIFVOVVNFRF9QQVJB
TSh3cml0YWJsZSk7CisgICAgVU5VU0VEX1BBUkFNKGV4ZWN1dGFibGUpOworI2VuZGlmCit9CisK
K3ZvaWQgT1NBbGxvY2F0b3I6OmRlY29tbWl0KHZvaWQqIGFkZHJlc3MsIHNpemVfdCBieXRlcykK
K3sKKyNpZiBPUyhMSU5VWCkKKyAgICBtYWR2aXNlKGFkZHJlc3MsIGJ5dGVzLCBNQURWX0RPTlRO
RUVEKTsKKyAgICBpZiAobXByb3RlY3QoYWRkcmVzcywgYnl0ZXMsIFBST1RfTk9ORSkpCisgICAg
ICAgIENSQVNIKCk7CisjZWxpZiBIQVZFKE1BRFZfRlJFRV9SRVVTRSkKKyAgICB3aGlsZSAobWFk
dmlzZShhZGRyZXNzLCBieXRlcywgTUFEVl9GUkVFX1JFVVNBQkxFKSA9PSAtMSAmJiBlcnJubyA9
PSBFQUdBSU4pIHsgfQorI2VsaWYgSEFWRShNQURWX0ZSRUUpCisgICAgd2hpbGUgKG1hZHZpc2Uo
YWRkcmVzcywgYnl0ZXMsIE1BRFZfRlJFRSkgPT0gLTEgJiYgZXJybm8gPT0gRUFHQUlOKSB7IH0K
KyNlbGlmIEhBVkUoTUFEVl9ET05UTkVFRCkKKyAgICB3aGlsZSAobWFkdmlzZShhZGRyZXNzLCBi
eXRlcywgTUFEVl9ET05UTkVFRCkgPT0gLTEgJiYgZXJybm8gPT0gRUFHQUlOKSB7IH0KKyNlbHNl
CisgICAgVU5VU0VEX1BBUkFNKGFkZHJlc3MpOworICAgIFVOVVNFRF9QQVJBTShieXRlcyk7Cisj
ZW5kaWYKK30KKwordm9pZCBPU0FsbG9jYXRvcjo6aGludE1lbW9yeU5vdE5lZWRlZFNvb24odm9p
ZCogYWRkcmVzcywgc2l6ZV90IGJ5dGVzKQoreworI2lmIEhBVkUoTUFEVl9ET05UTkVFRCkKKyAg
ICB3aGlsZSAobWFkdmlzZShhZGRyZXNzLCBieXRlcywgTUFEVl9ET05UTkVFRCkgPT0gLTEgJiYg
ZXJybm8gPT0gRUFHQUlOKSB7IH0KKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGFkZHJlc3MpOwor
ICAgIFVOVVNFRF9QQVJBTShieXRlcyk7CisjZW5kaWYKK30KKwordm9pZCBPU0FsbG9jYXRvcjo6
cmVsZWFzZURlY29tbWl0dGVkKHZvaWQqIGFkZHJlc3MsIHNpemVfdCBieXRlcykKK3sKKyAgICBp
bnQgcmVzdWx0ID0gbXVubWFwKGFkZHJlc3MsIGJ5dGVzKTsKKyAgICBpZiAocmVzdWx0ID09IC0x
KQorICAgICAgICBDUkFTSCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvd3RmL3Bvc2l4L1RocmVhZGluZ1BPU0lYLmNwcCBiL1NvdXJjZS9XVEYvd3Rm
L3Bvc2l4L1RocmVhZGluZ1BPU0lYLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lNDhkZDliNTdlZGQ0Y2Y1NWYy
NTMzMTY0NTgyM2YzMTA5ZGE0MjIxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYv
cG9zaXgvVGhyZWFkaW5nUE9TSVguY3BwCkBAIC0wLDAgKzEsNTY1IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA3LCAyMDA5LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwNyBKdXN0aW4gSGF5Z29vZCA8amhheWdvb2RAcmVha3RpeC5j
b20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgWXVzdWtlIFN1enVraSA8
dXRhdGFuZS50ZWFAZ21haWwuY29tPgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAzLiAgTmVpdGhl
ciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAg
ICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRp
bmcuaD4KKworI2lmIFVTRShQVEhSRUFEUykKKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVk
ZSA8d3RmL0RhdGFMb2cuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNs
dWRlIDx3dGYvUmF3UG9pbnRlci5oPgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKyNp
bmNsdWRlIDx3dGYvVGhyZWFkR3JvdXAuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nUHJpbWl0
aXZlcy5oPgorI2luY2x1ZGUgPHd0Zi9Xb3JkTG9jay5oPgorCisjaWYgT1MoTElOVVgpCisjaW5j
bHVkZSA8c3lzL3ByY3RsLmg+CisjZW5kaWYKKworI2lmICFDT01QSUxFUihNU1ZDKQorI2luY2x1
ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPHNjaGVkLmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4K
KyNlbmRpZgorCisjaWYgIU9TKERBUldJTikgJiYgT1MoVU5JWCkKKworI2luY2x1ZGUgPHNlbWFw
aG9yZS5oPgorI2luY2x1ZGUgPHN5cy9tbWFuLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5j
bHVkZSA8cHRocmVhZC5oPgorCisjaWYgSEFWRShQVEhSRUFEX05QX0gpCisjaW5jbHVkZSA8cHRo
cmVhZF9ucC5oPgorI2VuZGlmCisKKyNlbmRpZgorCituYW1lc3BhY2UgV1RGIHsKKworc3RhdGlj
IExvY2sgZ2xvYmFsU3VzcGVuZExvY2s7CisKK1RocmVhZDo6flRocmVhZCgpCit7Cit9CisKKyNp
ZiAhT1MoREFSV0lOKQorY2xhc3MgU2VtYXBob3JlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShTZW1hcGhvcmUpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAg
IGV4cGxpY2l0IFNlbWFwaG9yZSh1bnNpZ25lZCBpbml0aWFsVmFsdWUpCisgICAgeworICAgICAg
ICBpbnQgc2hhcmVkQmV0d2VlblByb2Nlc3NlcyA9IDA7CisgICAgICAgIHNlbV9pbml0KCZtX3Bs
YXRmb3JtU2VtYXBob3JlLCBzaGFyZWRCZXR3ZWVuUHJvY2Vzc2VzLCBpbml0aWFsVmFsdWUpOwor
ICAgIH0KKworICAgIH5TZW1hcGhvcmUoKQorICAgIHsKKyAgICAgICAgc2VtX2Rlc3Ryb3koJm1f
cGxhdGZvcm1TZW1hcGhvcmUpOworICAgIH0KKworICAgIHZvaWQgd2FpdCgpCisgICAgeworICAg
ICAgICBzZW1fd2FpdCgmbV9wbGF0Zm9ybVNlbWFwaG9yZSk7CisgICAgfQorCisgICAgdm9pZCBw
b3N0KCkKKyAgICB7CisgICAgICAgIHNlbV9wb3N0KCZtX3BsYXRmb3JtU2VtYXBob3JlKTsKKyAg
ICB9CisKK3ByaXZhdGU6CisgICAgc2VtX3QgbV9wbGF0Zm9ybVNlbWFwaG9yZTsKK307CitzdGF0
aWMgTGF6eU5ldmVyRGVzdHJveWVkPFNlbWFwaG9yZT4gZ2xvYmFsU2VtYXBob3JlRm9yU3VzcGVu
ZFJlc3VtZTsKKworLy8gV2UgdXNlIFNJR1VTUjEgdG8gc3VzcGVuZCBhbmQgcmVzdW1lIG1hY2hp
bmUgdGhyZWFkcyBpbiBKYXZhU2NyaXB0Q29yZS4KK3N0YXRpYyBjb25zdGV4cHIgY29uc3QgaW50
IFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUgPSBTSUdVU1IxOworc3RhdGljIHN0ZDo6YXRvbWljPFRo
cmVhZCo+IHRhcmdldFRocmVhZCB7IG51bGxwdHIgfTsKKwordm9pZCBUaHJlYWQ6OnNpZ25hbEhh
bmRsZXJTdXNwZW5kUmVzdW1lKGludCwgc2lnaW5mb190Kiwgdm9pZCogdWNvbnRleHQpCit7Cisg
ICAgLy8gVG91Y2hpbmcgYSBnbG9iYWwgdmFyaWFibGUgYXRvbWljIHR5cGVzIGZyb20gc2lnbmFs
IGhhbmRsZXJzIGlzIGFsbG93ZWQuCisgICAgVGhyZWFkKiB0aHJlYWQgPSB0YXJnZXRUaHJlYWQu
bG9hZCgpOworCisgICAgaWYgKHRocmVhZC0+bV9zdXNwZW5kQ291bnQpIHsKKyAgICAgICAgLy8g
VGhpcyBpcyBzaWduYWwgaGFuZGxlciBpbnZvY2F0aW9uIHRoYXQgaXMgaW50ZW5kZWQgdG8gYmUg
dXNlZCB0byByZXN1bWUgc2lnc3VzcGVuZC4KKyAgICAgICAgLy8gU28gdGhpcyBoYW5kbGVyIGlu
dm9jYXRpb24gaXRzZWxmIHNob3VsZCBub3QgcHJvY2Vzcy4KKyAgICAgICAgLy8KKyAgICAgICAg
Ly8gV2hlbiBzaWduYWwgY29tZXMsIGZpcnN0LCB0aGUgc3lzdGVtIGNhbGxzIHNpZ25hbCBoYW5k
bGVyLiBBbmQgbGF0ZXIsIHNpZ3N1c3BlbmQgd2lsbCBiZSByZXN1bWVkLiBTaWduYWwgaGFuZGxl
ciBpbnZvY2F0aW9uIGFsd2F5cyBwcmVjZWRlcy4KKyAgICAgICAgLy8gU28sIHRoZSBwcm9ibGVt
IG5ldmVyIGhhcHBlbnMgdGhhdCBzdXNwZW5kZWQuc3RvcmUodHJ1ZSwgLi4uKSB3aWxsIGJlIGV4
ZWN1dGVkIGJlZm9yZSB0aGUgaGFuZGxlciBpcyBjYWxsZWQuCisgICAgICAgIC8vIGh0dHA6Ly9w
dWJzLm9wZW5ncm91cC5vcmcvb25saW5lcHVicy8wMDk2OTUzOTkvZnVuY3Rpb25zL3NpZ3N1c3Bl
bmQuaHRtbAorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgdm9pZCogYXBwcm94aW1hdGVT
dGFja1BvaW50ZXIgPSBjdXJyZW50U3RhY2tQb2ludGVyKCk7CisgICAgaWYgKCF0aHJlYWQtPm1f
c3RhY2suY29udGFpbnMoYXBwcm94aW1hdGVTdGFja1BvaW50ZXIpKSB7CisgICAgICAgIC8vIFRo
aXMgaGFwcGVucyBpZiB3ZSB1c2UgYW4gYWx0ZXJuYXRpdmUgc2lnbmFsIHN0YWNrLgorICAgICAg
ICAvLyAxLiBBIHVzZXItZGVmaW5lZCBzaWduYWwgaGFuZGxlciBpcyBpbnZva2VkIHdpdGggYW4g
YWx0ZXJuYXRpdmUgc2lnbmFsIHN0YWNrLgorICAgICAgICAvLyAyLiBJbiB0aGUgbWlkZGxlIG9m
IHRoZSBleGVjdXRpb24gb2YgdGhlIGhhbmRsZXIsIHdlIGF0dGVtcHQgdG8gc3VzcGVuZCB0aGUg
dGFyZ2V0IHRocmVhZC4KKyAgICAgICAgLy8gMy4gQSBuZXN0ZWQgc2lnbmFsIGhhbmRsZXIgaXMg
ZXhlY3V0ZWQuCisgICAgICAgIC8vIDQuIFRoZSBzdGFjayBwb2ludGVyIHNhdmVkIGluIHRoZSBt
YWNoaW5lIGNvbnRleHQgd2lsbCBiZSBwb2ludGluZyB0byB0aGUgYWx0ZXJuYXRpdmUgc2lnbmFs
IHN0YWNrLgorICAgICAgICAvLyBJbiB0aGlzIGNhc2UsIHdlIGJhY2sgb2ZmIHRoZSBzdXNwZW5z
aW9uIGFuZCByZXRyeSBhIGJpdCBsYXRlci4KKyAgICAgICAgdGhyZWFkLT5tX3BsYXRmb3JtUmVn
aXN0ZXJzID0gbnVsbHB0cjsKKyAgICAgICAgZ2xvYmFsU2VtYXBob3JlRm9yU3VzcGVuZFJlc3Vt
ZS0+cG9zdCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisjaWYgSEFWRShNQUNISU5FX0NP
TlRFWFQpCisgICAgdWNvbnRleHRfdCogdXNlckNvbnRleHQgPSBzdGF0aWNfY2FzdDx1Y29udGV4
dF90Kj4odWNvbnRleHQpOworICAgIHRocmVhZC0+bV9wbGF0Zm9ybVJlZ2lzdGVycyA9ICZyZWdp
c3RlcnNGcm9tVUNvbnRleHQodXNlckNvbnRleHQpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0o
dWNvbnRleHQpOworICAgIFBsYXRmb3JtUmVnaXN0ZXJzIHBsYXRmb3JtUmVnaXN0ZXJzIHsgYXBw
cm94aW1hdGVTdGFja1BvaW50ZXIgfTsKKyAgICB0aHJlYWQtPm1fcGxhdGZvcm1SZWdpc3RlcnMg
PSAmcGxhdGZvcm1SZWdpc3RlcnM7CisjZW5kaWYKKworICAgIC8vIEFsbG93IHN1c3BlbmQgY2Fs
bGVyIHRvIHNlZSB0aGF0IHRoaXMgdGhyZWFkIGlzIHN1c3BlbmRlZC4KKyAgICAvLyBzZW1fcG9z
dCBpcyBhc3luYy1zaWduYWwtc2FmZSBmdW5jdGlvbi4gSXQgbWVhbnMgdGhhdCB3ZSBjYW4gY2Fs
bCB0aGlzIGZyb20gYSBzaWduYWwgaGFuZGxlci4KKyAgICAvLyBodHRwOi8vcHVicy5vcGVuZ3Jv
dXAub3JnL29ubGluZXB1YnMvMDA5Njk1Mzk5L2Z1bmN0aW9ucy94c2hfY2hhcDAyXzA0Lmh0bWwj
dGFnXzAyXzA0XzAzCisgICAgLy8KKyAgICAvLyBBbmQgc2VtX3Bvc3QgZW1pdHMgbWVtb3J5IGJh
cnJpZXIgdGhhdCBlbnN1cmVzIHRoYXQgUGxhdGZvcm1SZWdpc3RlcnMgYXJlIGNvcnJlY3RseSBz
YXZlZC4KKyAgICAvLyBodHRwOi8vcHVicy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvOTY5OTkx
OTc5OS9iYXNlZGVmcy9WMV9jaGFwMDQuaHRtbCN0YWdfMDRfMTEKKyAgICBnbG9iYWxTZW1hcGhv
cmVGb3JTdXNwZW5kUmVzdW1lLT5wb3N0KCk7CisKKyAgICAvLyBSZWFjaGluZyBoZXJlLCBTaWdU
aHJlYWRTdXNwZW5kUmVzdW1lIGlzIGJsb2NrZWQgaW4gdGhpcyBoYW5kbGVyICh0aGlzIGlzIGNv
bmZpZ3VyZWQgYnkgc2lnYWN0aW9uJ3Mgc2FfbWFzaykuCisgICAgLy8gU28gYmVmb3JlIGNhbGxp
bmcgc2lnc3VzcGVuZCwgU2lnVGhyZWFkU3VzcGVuZFJlc3VtZSB0byB0aGlzIHRocmVhZCBpcyBk
ZWZlcnJlZC4gVGhpcyBlbnN1cmVzIHRoYXQgdGhlIGhhbmRsZXIgaXMgbm90IGV4ZWN1dGVkIHJl
Y3Vyc2l2ZWx5LgorICAgIHNpZ3NldF90IGJsb2NrZWRTaWduYWxTZXQ7CisgICAgc2lnZmlsbHNl
dCgmYmxvY2tlZFNpZ25hbFNldCk7CisgICAgc2lnZGVsc2V0KCZibG9ja2VkU2lnbmFsU2V0LCBT
aWdUaHJlYWRTdXNwZW5kUmVzdW1lKTsKKyAgICBzaWdzdXNwZW5kKCZibG9ja2VkU2lnbmFsU2V0
KTsKKworICAgIHRocmVhZC0+bV9wbGF0Zm9ybVJlZ2lzdGVycyA9IG51bGxwdHI7CisKKyAgICAv
LyBBbGxvdyByZXN1bWUgY2FsbGVyIHRvIHNlZSB0aGF0IHRoaXMgdGhyZWFkIGlzIHJlc3VtZWQu
CisgICAgZ2xvYmFsU2VtYXBob3JlRm9yU3VzcGVuZFJlc3VtZS0+cG9zdCgpOworfQorCisjZW5k
aWYgLy8gIU9TKERBUldJTikKKwordm9pZCBUaHJlYWQ6OmluaXRpYWxpemVQbGF0Zm9ybVRocmVh
ZGluZygpCit7CisjaWYgIU9TKERBUldJTikKKyAgICBnbG9iYWxTZW1hcGhvcmVGb3JTdXNwZW5k
UmVzdW1lLmNvbnN0cnVjdCgwKTsKKworICAgIC8vIFNpZ25hbCBoYW5kbGVycyBhcmUgcHJvY2Vz
cyBnbG9iYWwgY29uZmlndXJhdGlvbi4KKyAgICAvLyBJbnRlbnRpb25hbGx5IGJsb2NrIFNpZ1Ro
cmVhZFN1c3BlbmRSZXN1bWUgaW4gdGhlIGhhbmRsZXIuCisgICAgLy8gU2lnVGhyZWFkU3VzcGVu
ZFJlc3VtZSB3aWxsIGJlIGFsbG93ZWQgaW4gdGhlIGhhbmRsZXIgYnkgc2lnc3VzcGVuZC4KKyAg
ICBzdHJ1Y3Qgc2lnYWN0aW9uIGFjdGlvbjsKKyAgICBzaWdlbXB0eXNldCgmYWN0aW9uLnNhX21h
c2spOworICAgIHNpZ2FkZHNldCgmYWN0aW9uLnNhX21hc2ssIFNpZ1RocmVhZFN1c3BlbmRSZXN1
bWUpOworCisgICAgYWN0aW9uLnNhX3NpZ2FjdGlvbiA9ICZzaWduYWxIYW5kbGVyU3VzcGVuZFJl
c3VtZTsKKyAgICBhY3Rpb24uc2FfZmxhZ3MgPSBTQV9SRVNUQVJUIHwgU0FfU0lHSU5GTzsKKyAg
ICBzaWdhY3Rpb24oU2lnVGhyZWFkU3VzcGVuZFJlc3VtZSwgJmFjdGlvbiwgMCk7CisjZW5kaWYK
K30KKwordm9pZCBUaHJlYWQ6OmluaXRpYWxpemVDdXJyZW50VGhyZWFkRXZlbklmTm9uV1RGQ3Jl
YXRlZCgpCit7CisjaWYgIU9TKERBUldJTikKKyAgICBzaWdzZXRfdCBtYXNrOworICAgIHNpZ2Vt
cHR5c2V0KCZtYXNrKTsKKyAgICBzaWdhZGRzZXQoJm1hc2ssIFNpZ1RocmVhZFN1c3BlbmRSZXN1
bWUpOworICAgIHB0aHJlYWRfc2lnbWFzayhTSUdfVU5CTE9DSywgJm1hc2ssIDApOworI2VuZGlm
Cit9CisKK3N0YXRpYyB2b2lkKiB3dGZUaHJlYWRFbnRyeVBvaW50KHZvaWQqIGNvbnRleHQpCit7
CisgICAgVGhyZWFkOjplbnRyeVBvaW50KHJlaW50ZXJwcmV0X2Nhc3Q8VGhyZWFkOjpOZXdUaHJl
YWRDb250ZXh0Kj4oY29udGV4dCkpOworICAgIHJldHVybiBudWxscHRyOworfQorCitib29sIFRo
cmVhZDo6ZXN0YWJsaXNoSGFuZGxlKE5ld1RocmVhZENvbnRleHQqIGNvbnRleHQpCit7CisgICAg
cHRocmVhZF90IHRocmVhZEhhbmRsZTsKKyAgICBwdGhyZWFkX2F0dHJfdCBhdHRyOworICAgIHB0
aHJlYWRfYXR0cl9pbml0KCZhdHRyKTsKKyNpZiBIQVZFKFFPU19DTEFTU0VTKQorICAgIHB0aHJl
YWRfYXR0cl9zZXRfcW9zX2NsYXNzX25wKCZhdHRyLCBhZGp1c3RlZFFPU0NsYXNzKFFPU19DTEFT
U19VU0VSX0lOSVRJQVRFRCksIDApOworI2VuZGlmCisgICAgaW50IGVycm9yID0gcHRocmVhZF9j
cmVhdGUoJnRocmVhZEhhbmRsZSwgJmF0dHIsIHd0ZlRocmVhZEVudHJ5UG9pbnQsIGNvbnRleHQp
OworICAgIHB0aHJlYWRfYXR0cl9kZXN0cm95KCZhdHRyKTsKKyAgICBpZiAoZXJyb3IpIHsKKyAg
ICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIHB0aHJlYWQgYXQgZW50cnkgcG9pbnQg
JXAgd2l0aCBjb250ZXh0ICVwIiwgd3RmVGhyZWFkRW50cnlQb2ludCwgY29udGV4dCk7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgZXN0YWJsaXNoUGxhdGZvcm1TcGVjaWZpY0hh
bmRsZSh0aHJlYWRIYW5kbGUpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFRocmVhZDo6
aW5pdGlhbGl6ZUN1cnJlbnRUaHJlYWRJbnRlcm5hbChjb25zdCBjaGFyKiB0aHJlYWROYW1lKQor
eworI2lmIEhBVkUoUFRIUkVBRF9TRVROQU1FX05QKQorICAgIHB0aHJlYWRfc2V0bmFtZV9ucChu
b3JtYWxpemVUaHJlYWROYW1lKHRocmVhZE5hbWUpKTsKKyNlbGlmIE9TKExJTlVYKQorICAgIHBy
Y3RsKFBSX1NFVF9OQU1FLCBub3JtYWxpemVUaHJlYWROYW1lKHRocmVhZE5hbWUpKTsKKyNlbHNl
CisgICAgVU5VU0VEX1BBUkFNKHRocmVhZE5hbWUpOworI2VuZGlmCisgICAgaW5pdGlhbGl6ZUN1
cnJlbnRUaHJlYWRFdmVuSWZOb25XVEZDcmVhdGVkKCk7Cit9CisKK3ZvaWQgVGhyZWFkOjpjaGFu
Z2VQcmlvcml0eShpbnQgZGVsdGEpCit7CisjaWYgSEFWRShQVEhSRUFEX1NFVFNDSEVEUEFSQU0p
CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX211dGV4KTsKKworICAgIGludCBwb2xpY3k7
CisgICAgc3RydWN0IHNjaGVkX3BhcmFtIHBhcmFtOworCisgICAgaWYgKHB0aHJlYWRfZ2V0c2No
ZWRwYXJhbShtX2hhbmRsZSwgJnBvbGljeSwgJnBhcmFtKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgcGFyYW0uc2NoZWRfcHJpb3JpdHkgKz0gZGVsdGE7CisKKyAgICBwdGhyZWFkX3NldHNjaGVk
cGFyYW0obV9oYW5kbGUsIHBvbGljeSwgJnBhcmFtKTsKKyNlbmRpZgorfQorCitpbnQgVGhyZWFk
Ojp3YWl0Rm9yQ29tcGxldGlvbigpCit7CisgICAgcHRocmVhZF90IGhhbmRsZTsKKyAgICB7Cisg
ICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9tdXRleCk7CisgICAgICAgIGhhbmRsZSA9
IG1faGFuZGxlOworICAgIH0KKworICAgIGludCBqb2luUmVzdWx0ID0gcHRocmVhZF9qb2luKGhh
bmRsZSwgMCk7CisKKyAgICBpZiAoam9pblJlc3VsdCA9PSBFREVBRExLKQorICAgICAgICBMT0df
RVJST1IoIlRocmVhZCAlcCB3YXMgZm91bmQgdG8gYmUgZGVhZGxvY2tlZCB0cnlpbmcgdG8gcXVp
dCIsIHRoaXMpOworICAgIGVsc2UgaWYgKGpvaW5SZXN1bHQpCisgICAgICAgIExPR19FUlJPUigi
VGhyZWFkICVwIHdhcyB1bmFibGUgdG8gYmUgam9pbmVkLlxuIiwgdGhpcyk7CisKKyAgICBhdXRv
IGxvY2tlciA9IGhvbGRMb2NrKG1fbXV0ZXgpOworICAgIEFTU0VSVChqb2luYWJsZVN0YXRlKCkg
PT0gSm9pbmFibGUpOworCisgICAgLy8gSWYgdGhlIHRocmVhZCBoYXMgYWxyZWFkeSBleGl0ZWQs
IHRoZW4gZG8gbm90aGluZy4gSWYgdGhlIHRocmVhZCBoYXNuJ3QgZXhpdGVkIHlldCwgdGhlbiBq
dXN0IHNpZ25hbCB0aGF0IHdlJ3ZlIGFscmVhZHkgam9pbmVkIG9uIGl0LgorICAgIC8vIEluIGJv
dGggY2FzZXMsIFRocmVhZDo6ZGVzdHJ1Y3RUTFMoKSB3aWxsIHRha2UgY2FyZSBvZiBkZXN0cm95
aW5nIFRocmVhZC4KKyAgICBpZiAoIWhhc0V4aXRlZCgpKQorICAgICAgICBkaWRKb2luKCk7CisK
KyAgICByZXR1cm4gam9pblJlc3VsdDsKK30KKwordm9pZCBUaHJlYWQ6OmRldGFjaCgpCit7Cisg
ICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX211dGV4KTsKKyAgICBpbnQgZGV0YWNoUmVzdWx0
ID0gcHRocmVhZF9kZXRhY2gobV9oYW5kbGUpOworICAgIGlmIChkZXRhY2hSZXN1bHQpCisgICAg
ICAgIExPR19FUlJPUigiVGhyZWFkICVwIHdhcyB1bmFibGUgdG8gYmUgZGV0YWNoZWRcbiIsIHRo
aXMpOworCisgICAgaWYgKCFoYXNFeGl0ZWQoKSkKKyAgICAgICAgZGlkQmVjb21lRGV0YWNoZWQo
KTsKK30KKworVGhyZWFkJiBUaHJlYWQ6OmluaXRpYWxpemVDdXJyZW50VExTKCkKK3sKKyAgICAv
LyBOb3QgYSBXVEYtY3JlYXRlZCB0aHJlYWQsIFRocmVhZCBpcyBub3QgZXN0YWJsaXNoZWQgeWV0
LgorICAgIFJlZjxUaHJlYWQ+IHRocmVhZCA9IGFkb3B0UmVmKCpuZXcgVGhyZWFkKCkpOworICAg
IHRocmVhZC0+ZXN0YWJsaXNoUGxhdGZvcm1TcGVjaWZpY0hhbmRsZShwdGhyZWFkX3NlbGYoKSk7
CisgICAgdGhyZWFkLT5pbml0aWFsaXplSW5UaHJlYWQoKTsKKyAgICBpbml0aWFsaXplQ3VycmVu
dFRocmVhZEV2ZW5JZk5vbldURkNyZWF0ZWQoKTsKKworICAgIHJldHVybiBpbml0aWFsaXplVExT
KFdURk1vdmUodGhyZWFkKSk7Cit9CisKK2Jvb2wgVGhyZWFkOjpzaWduYWwoaW50IHNpZ25hbE51
bWJlcikKK3sKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbXV0ZXgpOworICAgIGlmICho
YXNFeGl0ZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGludCBlcnJObyA9IHB0aHJl
YWRfa2lsbChtX2hhbmRsZSwgc2lnbmFsTnVtYmVyKTsKKyAgICByZXR1cm4gIWVyck5vOyAvLyBB
IDAgZXJyTm8gbWVhbnMgc3VjY2Vzcy4KK30KKworYXV0byBUaHJlYWQ6OnN1c3BlbmQoKSAtPiBF
eHBlY3RlZDx2b2lkLCBQbGF0Zm9ybVN1c3BlbmRFcnJvcj4KK3sKKyAgICBSRUxFQVNFX0FTU0VS
VF9XSVRIX01FU1NBR0UodGhpcyAhPSAmVGhyZWFkOjpjdXJyZW50KCksICJXZSBkbyBub3Qgc3Vw
cG9ydCBzdXNwZW5kaW5nIHRoZSBjdXJyZW50IHRocmVhZCBpdHNlbGYuIik7CisgICAgLy8gRHVy
aW5nIHN1c3BlbmQsIHN1c3BlbmQgb3IgcmVzdW1lIHNob3VsZCBub3QgYmUgZXhlY3V0ZWQgZnJv
bSB0aGUgb3RoZXIgdGhyZWFkcy4KKyAgICAvLyBXZSB1c2UgZ2xvYmFsIGxvY2sgaW5zdGVhZCBv
ZiBwZXIgdGhyZWFkIGxvY2suCisgICAgLy8gQ29uc2lkZXIgdGhlIGZvbGxvd2luZyBjYXNlLCB0
aGVyZSBhcmUgdGhyZWFkcyBBIGFuZCBCLgorICAgIC8vIEFuZCBBIGF0dGVtcHQgdG8gc3VzcGVu
ZCBCIGFuZCBCIGF0dGVtcHQgdG8gc3VzcGVuZCBBLgorICAgIC8vIEEgYW5kIEIgc2VuZCBzaWdu
YWxzLiBBbmQgbGF0ZXIsIHNpZ25hbHMgYXJlIGRlbGl2ZXJlZCB0byBBIGFuZCBCLgorICAgIC8v
IEluIHRoYXQgY2FzZSwgYm90aCB3aWxsIGJlIHN1c3BlbmRlZC4KKyAgICAvLworICAgIC8vIEFu
ZCBpdCBpcyBpbXBvcnRhbnQgdG8gdXNlIGEgZ2xvYmFsIGxvY2sgdG8gc3VzcGVuZCBhbmQgcmVz
dW1lLiBMZXQncyBjb25zaWRlciB1c2luZyBwZXItdGhyZWFkIGxvY2suCisgICAgLy8gWW91ciBp
c3N1aW5nIHRocmVhZCAoQSkgYXR0ZW1wdHMgdG8gc3VzcGVuZCB0aGUgdGFyZ2V0IHRocmVhZCAo
QikuIFRoZW4sIHlvdSB3aWxsIHN1c3BlbmQgdGhlIHRocmVhZCAoQykgYWRkaXRpb25hbGx5Lgor
ICAgIC8vIFRoaXMgY2FzZSBmcmVxdWVudGx5IGhhcHBlbnMgaWYgeW91IHN0b3AgdGhyZWFkcyB0
byBwZXJmb3JtIHN0YWNrIHNjYW5uaW5nLiBCdXQgdGhyZWFkIChCKSBtYXkgaG9sZCB0aGUgbG9j
ayBvZiB0aHJlYWQgKEMpLgorICAgIC8vIEluIHRoYXQgY2FzZSwgZGVhZCBsb2NrIGhhcHBlbnMu
IFVzaW5nIGdsb2JhbCBsb2NrIGhlcmUgYXZvaWRzIHRoaXMgZGVhZCBsb2NrLgorICAgIExvY2tI
b2xkZXIgbG9ja2VyKGdsb2JhbFN1c3BlbmRMb2NrKTsKKyNpZiBPUyhEQVJXSU4pCisgICAga2Vy
bl9yZXR1cm5fdCByZXN1bHQgPSB0aHJlYWRfc3VzcGVuZChtX3BsYXRmb3JtVGhyZWFkKTsKKyAg
ICBpZiAocmVzdWx0ICE9IEtFUk5fU1VDQ0VTUykKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVj
dGVkKHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKKyNlbHNlCisgICAgaWYgKCFtX3N1c3BlbmRD
b3VudCkgeworICAgICAgICAvLyBJZGVhbGx5LCB3ZSB3b3VsZCBsaWtlIHRvIHVzZSBwdGhyZWFk
X3NpZ3F1ZXVlLiBJdCBhbGxvd3MgdXMgdG8gcGFzcyB0aGUgYXJndW1lbnQgdG8gdGhlIHNpZ25h
bCBoYW5kbGVyLgorICAgICAgICAvLyBCdXQgaXQgY2FuIGJlIHVzZWQgaW4gYSBmZXcgcGxhdGZv
cm1zLCBsaWtlIExpbnV4LgorICAgICAgICAvLyBJbnN0ZWFkLCB3ZSB1c2UgVGhyZWFkKiBzdG9y
ZWQgaW4gYSBnbG9iYWwgdmFyaWFibGUgdG8gcGFzcyBpdCB0byB0aGUgc2lnbmFsIGhhbmRsZXIu
CisgICAgICAgIHRhcmdldFRocmVhZC5zdG9yZSh0aGlzKTsKKworICAgICAgICB3aGlsZSAodHJ1
ZSkgeworICAgICAgICAgICAgaW50IHJlc3VsdCA9IHB0aHJlYWRfa2lsbChtX2hhbmRsZSwgU2ln
VGhyZWFkU3VzcGVuZFJlc3VtZSk7CisgICAgICAgICAgICBpZiAocmVzdWx0KQorICAgICAgICAg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChyZXN1bHQpOworICAgICAgICAgICAgZ2xvYmFs
U2VtYXBob3JlRm9yU3VzcGVuZFJlc3VtZS0+d2FpdCgpOworICAgICAgICAgICAgaWYgKG1fcGxh
dGZvcm1SZWdpc3RlcnMpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAvLyBC
ZWNhdXNlIG9mIGFuIGFsdGVybmF0aXZlIHNpZ25hbCBzdGFjaywgd2UgZmFpbGVkIHRvIHN1c3Bl
bmQgdGhpcyB0aHJlYWQuCisgICAgICAgICAgICAvLyBSZXRyeSBzdXNwZW5zaW9uIGFnYWluIGFm
dGVyIHlpZWxkaW5nLgorICAgICAgICAgICAgVGhyZWFkOjp5aWVsZCgpOworICAgICAgICB9Cisg
ICAgfQorICAgICsrbV9zdXNwZW5kQ291bnQ7CisgICAgcmV0dXJuIHsgfTsKKyNlbmRpZgorfQor
Cit2b2lkIFRocmVhZDo6cmVzdW1lKCkKK3sKKyAgICAvLyBEdXJpbmcgcmVzdW1lLCBzdXNwZW5k
IG9yIHJlc3VtZSBzaG91bGQgbm90IGJlIGV4ZWN1dGVkIGZyb20gdGhlIG90aGVyIHRocmVhZHMu
CisgICAgTG9ja0hvbGRlciBsb2NrZXIoZ2xvYmFsU3VzcGVuZExvY2spOworI2lmIE9TKERBUldJ
TikKKyAgICB0aHJlYWRfcmVzdW1lKG1fcGxhdGZvcm1UaHJlYWQpOworI2Vsc2UKKyAgICBpZiAo
bV9zdXNwZW5kQ291bnQgPT0gMSkgeworICAgICAgICAvLyBXaGVuIGFsbG93aW5nIFNpZ1RocmVh
ZFN1c3BlbmRSZXN1bWUgaW50ZXJydXB0IGluIHRoZSBzaWduYWwgaGFuZGxlciBieSBzaWdzdXNw
ZW5kIGFuZCBTaWdUaHJlYWRTdXNwZW5kUmVzdW1lIGlzIGFjdHVhbGx5IGlzc3VlZCwKKyAgICAg
ICAgLy8gdGhlIHNpZ25hbCBoYW5kbGVyIGl0c2VsZiB3aWxsIGJlIGNhbGxlZCBvbmNlIGFnYWlu
LgorICAgICAgICAvLyBUaGVyZSBhcmUgc2V2ZXJhbCB3YXlzIHRvIGRpc3Rpbmd1aXNoIHRoZSBo
YW5kbGVyIGludm9jYXRpb24gZm9yIHN1c3BlbmQgYW5kIHJlc3VtZS4KKyAgICAgICAgLy8gMS4g
VXNlIGRpZmZlcmVudCBzaWduYWwgbnVtYmVycy4gQW5kIGNoZWNrIHRoZSBzaWduYWwgbnVtYmVy
IGluIHRoZSBoYW5kbGVyLgorICAgICAgICAvLyAyLiBVc2Ugc29tZSBhcmd1bWVudHMgdG8gZGlz
dGluZ3Vpc2ggc3VzcGVuZCBhbmQgcmVzdW1lIGluIHRoZSBoYW5kbGVyLiBJZiBwdGhyZWFkX3Np
Z3F1ZXVlIGNhbiBiZSB1c2VkLCB3ZSBjYW4gdGFrZSB0aGlzLgorICAgICAgICAvLyAzLiBVc2Ug
dGhyZWFkJ3MgZmxhZy4KKyAgICAgICAgLy8gSW4gdGhpcyBpbXBsZW1lbnRhaXRvbiwgd2UgdGFr
ZSAoMykuIG1fc3VzcGVuZENvdW50IGlzIHVzZWQgdG8gZGlzdGluZ3Vpc2ggaXQuCisgICAgICAg
IHRhcmdldFRocmVhZC5zdG9yZSh0aGlzKTsKKyAgICAgICAgaWYgKHB0aHJlYWRfa2lsbChtX2hh
bmRsZSwgU2lnVGhyZWFkU3VzcGVuZFJlc3VtZSkgPT0gRVNSQ0gpCisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIGdsb2JhbFNlbWFwaG9yZUZvclN1c3BlbmRSZXN1bWUtPndhaXQoKTsKKyAg
ICB9CisgICAgLS1tX3N1c3BlbmRDb3VudDsKKyNlbmRpZgorfQorCisjaWYgT1MoREFSV0lOKQor
c3RydWN0IFRocmVhZFN0YXRlTWV0YWRhdGEgeworICAgIHVuc2lnbmVkIHVzZXJDb3VudDsKKyAg
ICB0aHJlYWRfc3RhdGVfZmxhdm9yX3QgZmxhdm9yOworfTsKKworc3RhdGljIFRocmVhZFN0YXRl
TWV0YWRhdGEgdGhyZWFkU3RhdGVNZXRhZGF0YSgpCit7CisjaWYgQ1BVKFg4NikKKyAgICB1bnNp
Z25lZCB1c2VyQ291bnQgPSBzaXplb2YoUGxhdGZvcm1SZWdpc3RlcnMpIC8gc2l6ZW9mKGludCk7
CisgICAgdGhyZWFkX3N0YXRlX2ZsYXZvcl90IGZsYXZvciA9IGkzODZfVEhSRUFEX1NUQVRFOwor
I2VsaWYgQ1BVKFg4Nl82NCkKKyAgICB1bnNpZ25lZCB1c2VyQ291bnQgPSB4ODZfVEhSRUFEX1NU
QVRFNjRfQ09VTlQ7CisgICAgdGhyZWFkX3N0YXRlX2ZsYXZvcl90IGZsYXZvciA9IHg4Nl9USFJF
QURfU1RBVEU2NDsKKyNlbGlmIENQVShQUEMpCisgICAgdW5zaWduZWQgdXNlckNvdW50ID0gUFBD
X1RIUkVBRF9TVEFURV9DT1VOVDsKKyAgICB0aHJlYWRfc3RhdGVfZmxhdm9yX3QgZmxhdm9yID0g
UFBDX1RIUkVBRF9TVEFURTsKKyNlbGlmIENQVShQUEM2NCkKKyAgICB1bnNpZ25lZCB1c2VyQ291
bnQgPSBQUENfVEhSRUFEX1NUQVRFNjRfQ09VTlQ7CisgICAgdGhyZWFkX3N0YXRlX2ZsYXZvcl90
IGZsYXZvciA9IFBQQ19USFJFQURfU1RBVEU2NDsKKyNlbGlmIENQVShBUk0pCisgICAgdW5zaWdu
ZWQgdXNlckNvdW50ID0gQVJNX1RIUkVBRF9TVEFURV9DT1VOVDsKKyAgICB0aHJlYWRfc3RhdGVf
Zmxhdm9yX3QgZmxhdm9yID0gQVJNX1RIUkVBRF9TVEFURTsKKyNlbGlmIENQVShBUk02NCkKKyAg
ICB1bnNpZ25lZCB1c2VyQ291bnQgPSBBUk1fVEhSRUFEX1NUQVRFNjRfQ09VTlQ7CisgICAgdGhy
ZWFkX3N0YXRlX2ZsYXZvcl90IGZsYXZvciA9IEFSTV9USFJFQURfU1RBVEU2NDsKKyNlbHNlCisj
ZXJyb3IgVW5rbm93biBBcmNoaXRlY3R1cmUKKyNlbmRpZgorICAgIHJldHVybiBUaHJlYWRTdGF0
ZU1ldGFkYXRhIHsgdXNlckNvdW50LCBmbGF2b3IgfTsKK30KKyNlbmRpZiAvLyBPUyhEQVJXSU4p
CisKK3NpemVfdCBUaHJlYWQ6OmdldFJlZ2lzdGVycyhQbGF0Zm9ybVJlZ2lzdGVycyYgcmVnaXN0
ZXJzKQoreworICAgIExvY2tIb2xkZXIgbG9ja2VyKGdsb2JhbFN1c3BlbmRMb2NrKTsKKyNpZiBP
UyhEQVJXSU4pCisgICAgYXV0byBtZXRhZGF0YSA9IHRocmVhZFN0YXRlTWV0YWRhdGEoKTsKKyAg
ICBrZXJuX3JldHVybl90IHJlc3VsdCA9IHRocmVhZF9nZXRfc3RhdGUobV9wbGF0Zm9ybVRocmVh
ZCwgbWV0YWRhdGEuZmxhdm9yLCAodGhyZWFkX3N0YXRlX3QpJnJlZ2lzdGVycywgJm1ldGFkYXRh
LnVzZXJDb3VudCk7CisgICAgaWYgKHJlc3VsdCAhPSBLRVJOX1NVQ0NFU1MpIHsKKyAgICAgICAg
V1RGUmVwb3J0RmF0YWxFcnJvcihfX0ZJTEVfXywgX19MSU5FX18sIFdURl9QUkVUVFlfRlVOQ1RJ
T04sICJKYXZhU2NyaXB0IGdhcmJhZ2UgY29sbGVjdGlvbiBmYWlsZWQgYmVjYXVzZSB0aHJlYWRf
Z2V0X3N0YXRlIHJldHVybmVkIGFuIGVycm9yICglZCkuIFRoaXMgaXMgcHJvYmFibHkgdGhlIHJl
c3VsdCBvZiBydW5uaW5nIGluc2lkZSBSb3NldHRhLCB3aGljaCBpcyBub3Qgc3VwcG9ydGVkLiIs
IHJlc3VsdCk7CisgICAgICAgIENSQVNIKCk7CisgICAgfQorICAgIHJldHVybiBtZXRhZGF0YS51
c2VyQ291bnQgKiBzaXplb2YodWludHB0cl90KTsKKyNlbHNlCisgICAgQVNTRVJUX1dJVEhfTUVT
U0FHRShtX3N1c3BlbmRDb3VudCwgIldlIGNhbiBnZXQgcmVnaXN0ZXJzIG9ubHkgaWYgdGhlIHRo
cmVhZCBpcyBzdXNwZW5kZWQuIik7CisgICAgQVNTRVJUKG1fcGxhdGZvcm1SZWdpc3RlcnMpOwor
ICAgIHJlZ2lzdGVycyA9ICptX3BsYXRmb3JtUmVnaXN0ZXJzOworICAgIHJldHVybiBzaXplb2Yo
UGxhdGZvcm1SZWdpc3RlcnMpOworI2VuZGlmCit9CisKK3ZvaWQgVGhyZWFkOjplc3RhYmxpc2hQ
bGF0Zm9ybVNwZWNpZmljSGFuZGxlKHB0aHJlYWRfdCBoYW5kbGUpCit7CisgICAgYXV0byBsb2Nr
ZXIgPSBob2xkTG9jayhtX211dGV4KTsKKyAgICBtX2hhbmRsZSA9IGhhbmRsZTsKKyNpZiBPUyhE
QVJXSU4pCisgICAgbV9wbGF0Zm9ybVRocmVhZCA9IHB0aHJlYWRfbWFjaF90aHJlYWRfbnAoaGFu
ZGxlKTsKKyNlbmRpZgorfQorCisjaWYgIUhBVkUoRkFTVF9UTFMpCit2b2lkIFRocmVhZDo6aW5p
dGlhbGl6ZVRMU0tleSgpCit7CisgICAgdGhyZWFkU3BlY2lmaWNLZXlDcmVhdGUoJnNfa2V5LCBk
ZXN0cnVjdFRMUyk7Cit9CisjZW5kaWYKKworVGhyZWFkJiBUaHJlYWQ6OmluaXRpYWxpemVUTFMo
UmVmPFRocmVhZD4mJiB0aHJlYWQpCit7CisgICAgLy8gV2UgbGVhayB0aGUgcmVmIHRvIGtlZXAg
dGhlIFRocmVhZCBhbGl2ZSB3aGlsZSBpdCBpcyBoZWxkIGluIFRMUy4gZGVzdHJ1Y3RUTFMgd2ls
bCBkZXJlZiBpdCBsYXRlciBhdCB0aHJlYWQgZGVzdHJ1Y3Rpb24gdGltZS4KKyAgICBhdXRvJiB0
aHJlYWRJblRMUyA9IHRocmVhZC5sZWFrUmVmKCk7CisjaWYgIUhBVkUoRkFTVF9UTFMpCisgICAg
QVNTRVJUKHNfa2V5ICE9IEludmFsaWRUaHJlYWRTcGVjaWZpY0tleSk7CisgICAgdGhyZWFkU3Bl
Y2lmaWNTZXQoc19rZXksICZ0aHJlYWRJblRMUyk7CisjZWxzZQorICAgIF9wdGhyZWFkX3NldHNw
ZWNpZmljX2RpcmVjdChXVEZfVEhSRUFEX0RBVEFfS0VZLCAmdGhyZWFkSW5UTFMpOworICAgIHB0
aHJlYWRfa2V5X2luaXRfbnAoV1RGX1RIUkVBRF9EQVRBX0tFWSwgJmRlc3RydWN0VExTKTsKKyNl
bmRpZgorICAgIHJldHVybiB0aHJlYWRJblRMUzsKK30KKwordm9pZCBUaHJlYWQ6OmRlc3RydWN0
VExTKHZvaWQqIGRhdGEpCit7CisgICAgVGhyZWFkKiB0aHJlYWQgPSBzdGF0aWNfY2FzdDxUaHJl
YWQqPihkYXRhKTsKKyAgICBBU1NFUlQodGhyZWFkKTsKKworICAgIGlmICh0aHJlYWQtPm1faXNE
ZXN0cm95ZWRPbmNlKSB7CisgICAgICAgIHRocmVhZC0+ZGlkRXhpdCgpOworICAgICAgICB0aHJl
YWQtPmRlcmVmKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB0aHJlYWQtPm1faXNE
ZXN0cm95ZWRPbmNlID0gdHJ1ZTsKKyAgICAvLyBSZS1zZXR0aW5nIHRoZSB2YWx1ZSBmb3Iga2V5
IGNhdXNlcyBhbm90aGVyIGRlc3RydWN0VExTKCkgY2FsbCBhZnRlciBhbGwgb3RoZXIgdGhyZWFk
LXNwZWNpZmljIGRlc3RydWN0b3JzIHdlcmUgY2FsbGVkLgorI2lmICFIQVZFKEZBU1RfVExTKQor
ICAgIEFTU0VSVChzX2tleSAhPSBJbnZhbGlkVGhyZWFkU3BlY2lmaWNLZXkpOworICAgIHRocmVh
ZFNwZWNpZmljU2V0KHNfa2V5LCB0aHJlYWQpOworI2Vsc2UKKyAgICBfcHRocmVhZF9zZXRzcGVj
aWZpY19kaXJlY3QoV1RGX1RIUkVBRF9EQVRBX0tFWSwgdGhyZWFkKTsKKyAgICBwdGhyZWFkX2tl
eV9pbml0X25wKFdURl9USFJFQURfREFUQV9LRVksICZkZXN0cnVjdFRMUyk7CisjZW5kaWYKK30K
KworTXV0ZXg6On5NdXRleCgpCit7CisgICAgaW50IHJlc3VsdCA9IHB0aHJlYWRfbXV0ZXhfZGVz
dHJveSgmbV9tdXRleCk7CisgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsICFyZXN1bHQpOworfQor
Cit2b2lkIE11dGV4Ojpsb2NrKCkKK3sKKyAgICBpbnQgcmVzdWx0ID0gcHRocmVhZF9tdXRleF9s
b2NrKCZtX211dGV4KTsKKyAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgIXJlc3VsdCk7Cit9CisK
K2Jvb2wgTXV0ZXg6OnRyeUxvY2soKQoreworICAgIGludCByZXN1bHQgPSBwdGhyZWFkX211dGV4
X3RyeWxvY2soJm1fbXV0ZXgpOworCisgICAgaWYgKHJlc3VsdCA9PSAwKQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICBpZiAocmVzdWx0ID09IEVCVVNZKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3Zv
aWQgTXV0ZXg6OnVubG9jaygpCit7CisgICAgaW50IHJlc3VsdCA9IHB0aHJlYWRfbXV0ZXhfdW5s
b2NrKCZtX211dGV4KTsKKyAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgIXJlc3VsdCk7Cit9CisK
K1RocmVhZENvbmRpdGlvbjo6flRocmVhZENvbmRpdGlvbigpCit7CisgICAgcHRocmVhZF9jb25k
X2Rlc3Ryb3koJm1fY29uZGl0aW9uKTsKK30KKyAgICAKK3ZvaWQgVGhyZWFkQ29uZGl0aW9uOjp3
YWl0KE11dGV4JiBtdXRleCkKK3sKKyAgICBpbnQgcmVzdWx0ID0gcHRocmVhZF9jb25kX3dhaXQo
Jm1fY29uZGl0aW9uLCAmbXV0ZXguaW1wbCgpKTsKKyAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwg
IXJlc3VsdCk7Cit9CisKK2Jvb2wgVGhyZWFkQ29uZGl0aW9uOjp0aW1lZFdhaXQoTXV0ZXgmIG11
dGV4LCBXYWxsVGltZSBhYnNvbHV0ZVRpbWUpCit7CisgICAgaWYgKGFic29sdXRlVGltZSA8IFdh
bGxUaW1lOjpub3coKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGFic29sdXRl
VGltZSA+IFdhbGxUaW1lOjpmcm9tUmF3U2Vjb25kcyhJTlRfTUFYKSkgeworICAgICAgICB3YWl0
KG11dGV4KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgZG91YmxlIHJhd1Nl
Y29uZHMgPSBhYnNvbHV0ZVRpbWUuc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgpOworCisgICAg
aW50IHRpbWVTZWNvbmRzID0gc3RhdGljX2Nhc3Q8aW50PihyYXdTZWNvbmRzKTsKKyAgICBpbnQg
dGltZU5hbm9zZWNvbmRzID0gc3RhdGljX2Nhc3Q8aW50PigocmF3U2Vjb25kcyAtIHRpbWVTZWNv
bmRzKSAqIDFFOSk7CisKKyAgICB0aW1lc3BlYyB0YXJnZXRUaW1lOworICAgIHRhcmdldFRpbWUu
dHZfc2VjID0gdGltZVNlY29uZHM7CisgICAgdGFyZ2V0VGltZS50dl9uc2VjID0gdGltZU5hbm9z
ZWNvbmRzOworCisgICAgcmV0dXJuIHB0aHJlYWRfY29uZF90aW1lZHdhaXQoJm1fY29uZGl0aW9u
LCAmbXV0ZXguaW1wbCgpLCAmdGFyZ2V0VGltZSkgPT0gMDsKK30KKwordm9pZCBUaHJlYWRDb25k
aXRpb246OnNpZ25hbCgpCit7CisgICAgaW50IHJlc3VsdCA9IHB0aHJlYWRfY29uZF9zaWduYWwo
Jm1fY29uZGl0aW9uKTsKKyAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgIXJlc3VsdCk7Cit9CisK
K3ZvaWQgVGhyZWFkQ29uZGl0aW9uOjpicm9hZGNhc3QoKQoreworICAgIGludCByZXN1bHQgPSBw
dGhyZWFkX2NvbmRfYnJvYWRjYXN0KCZtX2NvbmRpdGlvbik7CisgICAgQVNTRVJUX1VOVVNFRChy
ZXN1bHQsICFyZXN1bHQpOworfQorCit2b2lkIFRocmVhZDo6eWllbGQoKQoreworICAgIHNjaGVk
X3lpZWxkKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gVVNFKFBUSFJF
QURTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvd2luL0NPTlRSSUJVVE9SUy5wdGhyZWFk
cy13aW4zMiBiL1NvdXJjZS9XVEYvd3RmL3dpbi9DT05UUklCVVRPUlMucHRocmVhZHMtd2luMzIK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMjRmYWMwMDZjMzA4M2UyY2Q3Mzc3M2Q0MzhhMzYxNDdkMDlmNGUwMgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL3dpbi9DT05UUklCVVRPUlMucHRocmVhZHMt
d2luMzIKQEAgLTAsMCArMSwxMzcgQEAKK1RoaXMgaXMgYSBjb3B5IG9mIENPTlRSSUJVVE9SUyBm
aWxlIGZvciB0aGUgUHRocmVhZHMtd2luMzIgbGlicmFyeSwgZG93bmxvYWRlZAorZnJvbSBodHRw
Oi8vc291cmNld2FyZS5vcmcvY2dpLWJpbi9jdnN3ZWIuY2dpL35jaGVja291dH4vcHRocmVhZHMv
Q09OVFJJQlVUT1JTP3Jldj0xLjMyJmN2c3Jvb3Q9cHRocmVhZHMtd2luMzIKKworSW5jbHVkZWQg
aGVyZSB0byBjb21wbGltZW50IHRoZSBQdGhyZWFkcy13aW4zMiBsaWNlbnNlIGhlYWRlciBpbiBU
aHJlYWRpbmdXaW4uY3BwIGZpbGUuCitXZWJLaXQgaXMgdXNpbmcgZGVyaXZlZCBzb3VyY2VzIG9m
IFRocmVhZENvbmRpdGlvbiBjb2RlIGZyb20gUHRocmVhZHMtd2luMzIuCisKKy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKworQ29udHJpYnV0b3JzIChpbiBhcHByb3hpbWF0ZSBvcmRlciBvZiBhcHBl
YXJhbmNlKQorCitbU2VlIGFsc28gdGhlIENoYW5nZUxvZyBmaWxlIHdoZXJlIGluZGl2aWR1YWxz
IGFyZQorYXR0cmlidXRlZCBpbiBsb2cgZW50cmllcy4gTGlrZXdpc2UgaW4gdGhlIEZBUSBmaWxl
Ll0KKworQmVuIEVsbGlzdG9uCQliamUgYXQgY3lnbnVzIGRvdCBjb20KKwkJCQkJSW5pdGlhdGVk
IHRoZSBwcm9qZWN0OworCQkJCQlzZXR1cCB0aGUgcHJvamVjdCBpbmZyYXN0cnVjdHVyZSAoQ1ZT
LCB3ZWIgcGFnZSwgZXRjLik7CisJCQkJCWVhcmx5IHByb3RvdHlwZSByb3V0aW5lcy4KK1Jvc3Mg
Sm9obnNvbgkJcnBqIGF0IGNhbGxpc3RvIGRvdCBjYW5iZXJyYSBkb3QgZWR1IGRvdCBhdQorCQkJ
CQllYXJseSBwcm90b3R5cGUgcm91dGluZXM7CisJCQkJCW9uZ29pbmcgcHJvamVjdCBjb29yZGlu
YXRpb24vbWFpbnRlbmFuY2U7CisJCQkJCWltcGxlbWVudGF0aW9uIG9mIHNwaW4gbG9ja3MgYW5k
IGJhcnJpZXJzOworCQkJCQl2YXJpb3VzIGVuaGFuY2VtZW50czsKKwkJCQkJYnVnIGZpeGVzOwor
CQkJCQlkb2N1bWVudGF0aW9uOworCQkJCQl0ZXN0c3VpdGUuCitSb2JlcnQgQ29scXVob3VuCXJq
YyBhdCB0cnVtcCBkb3QgbmV0IGRvdCBhdQorCQkJCQlFYXJseSBidWcgZml4ZXMuCitKb2huIEUu
IEJvc3NvbQkJSm9obiBkb3QgQm9zc29tIGF0IGNvZ25vcyBkb3QgY29tCisJCQkJCUNvbnRyaWJ1
dGVkIHN1YnN0YW50aWFsIG9yaWdpbmFsIHdvcmtpbmcgaW1wbGVtZW50YXRpb247CisJCQkJCWJ1
ZyBmaXhlczsKKwkJCQkJb25nb2luZyBndWlkYW5jZSBhbmQgc3RhbmRhcmRzIGludGVycHJldGF0
aW9uLgorQW5kZXJzIE5vcmxhbmRlcglhbm9ybGFuZCBhdCBoZW0yIGRvdCBwYXNzYWdlbiBkb3Qg
c2UKKwkJCQkJRWFybHkgZW5oYW5jZW1lbnRzIGFuZCBydW50aW1lIGNoZWNraW5nIGZvciBzdXBw
b3J0ZWQKKwkJCQkJV2luMzIgcm91dGluZXMuCitUb3IgTGlsbHF2aXN0CQl0bWwgYXQgaWtpIGRv
dCBmaQorCQkJCQlHZW5lcmFsIGVuaGFuY2VtZW50czsKKwkJCQkJZWFybHkgYnVnIGZpeGVzIHRv
IGNvbmRpdGlvbiB2YXJpYWJsZXMuCitTY290dCBMaWdodG5lcgkJc2NvdHQgYXQgY3VycmljdWx1
bSBkb3QgY29tCisJCQkJCUJ1ZyBmaXguCitLZXZpbiBSdWxhbmQJCUtldmluIGRvdCBSdWxhbmQg
YXQgYW5oZXVzZXItYnVzY2ggZG90IGNvbQorCQkJCQlWYXJpb3VzIGJ1ZyBmaXhlcy4KK01pa2Ug
UnVzc28JCW1pa2VyIGF0IGVhaSBkb3QgY29tCisJCQkJCUJ1ZyBmaXguCitNYXJrIEUuIEFybXN0
cm9uZwlhdmFpbCBhdCBwYWNiZWxsIGRvdCBuZXQKKwkJCQkJQnVnIGZpeGVzLgorTG9yaW4gSG9j
aHN0ZWluIAlsbWggYXQgeGlwaG9zIGRvdCBjYQorCQkJCQlnZW5lcmFsIGJ1ZyBmaXhlczsgYnVn
IGZpeGVzIHRvIGNvbmRpdGlvbiB2YXJpYWJsZXMuCitQZXRlciBTbGFjaWsJCVBldGVyIGRvdCBT
bGFjaWsgYXQgdGF0cmFtZWQgZG90IHNrCisJCQkJCUJ1ZyBmaXhlcy4KK011bWl0IEtoYW4JCWto
YW4gYXQgeHJheWxpdGggZG90IHdpc2MgZG90IGVkdQorCQkJCQlGaXhlcyB0byB3b3JrIHdpdGgg
TWluZ3czMi4KK01pbGFuIEdhcmRpYW4JCW1nIGF0IHRhdHJhbWVkIGRvdCBzaworCQkJCQlCdWcg
Zml4ZXMgYW5kIHJlcG9ydHMvYW5hbHlzZXMgb2Ygb2JzY3VyZSBwcm9ibGVtcy4KK0F1cmVsaW8g
TWVkaW5hCQlhdXJlbGlvbSBhdCBjcnQgZG90IGNvbQorCQkJCQlGaXJzdCBpbXBsZW1lbnRhdGlv
biBvZiByZWFkLXdyaXRlIGxvY2tzLgorR3JhaGFtIER1bXBsZXRvbglHcmFoYW0gZG90IER1bXBs
ZXRvbiBhdCByYSBkb3QgcGFkIGRvdCBvdGMgZG90IHRlbHN0cmEgZG90IGNvbSBkb3QgYXUKKwkJ
CQkJQnVnIGZpeCBpbiBjb25kaXRpb24gdmFyaWFibGVzLgorVHJpc3RhbiBTYXZhdGllcgl0cmlz
dGFuIGF0IG1wZWd0diBkb3QgY29tCisJCQkJCVdpbkNFIHBvcnQuCitFcmlrIEhlbnNlbWEJCWVy
aWsgYXQgaGVuc2VtYSBkb3QgeHM0YWxsIGRvdCBubAorCQkJCQlCdWcgZml4ZXMuCitSaWNoIFBl
dGVycwkJcnBldGVycyBhdCBtaWNyby1tYWdpYyBkb3QgY29tCitUb2RkIE93ZW4JCXRvd2VuIGF0
IGx1Y2lkY2FsbSBkb3QgZHJvcGJlYXIgZG90IGlkIGRvdCBhdQorCQkJCQlCdWcgZml4ZXMgdG8g
ZGxsIGxvYWRpbmcuCitKYXNvbiBOeWUJCWpueWUgYXQgbmJuZXQgZG90IG5iIGRvdCBjYQorCQkJ
CQlJbXBsZW1lbnRhdGlvbiBvZiBhc3luYyBjYW5jZWxhdGlvbi4KK0ZyZWQgRm9yZXN0ZXIJCWZm
b3Jlc3QgYXQgZXRpY29tbSBkb3QgbmV0CitLZXZpbiBELiBDbGFyawkJa2NsYXJrIGF0IGNhYmxl
dHJvbiBkb3QgY29tCitEYXZpZCBCYWdnZXR0CQlkbWIgYXQgaXRhc29mdHdhcmUgZG90IGNvbQor
CQkJCQlCdWcgZml4ZXMuCitQYXVsIFJlZG9uZG8JCXBhdWwgYXQgbWF0Y2h2aXNpb24gZG90IGNv
bQorU2NvdHQgTWNDYXNraWxsIAlzY290dCBhdCAzZGZ4IGRvdCBjb20KKwkJCQkJQnVnIGZpeGVz
LgorSmVmIEdlYXJoYXJ0CQlqZ2VhcmhhcnQgYXQgdHBzc3lzIGRvdCBjb20KKwkJCQkJQnVnIGZp
eC4KK0FydGh1ciBLYW50b3IJCWFrYW50b3IgYXQgYmV4dXNhIGRvdCBjb20KKwkJCQkJTXV0ZXgg
ZW5oYW5jZW1lbnRzLgorU3RldmVuIFJlZGRpZQkJc21yIGF0IGVzc2VtZXIgZG90IGNvbSBkb3Qg
YXUKKwkJCQkJQnVnIGZpeC4KK0FsZXhhbmRlciBUZXJla2hvdglURVJFS0hPViBhdCBkZSBkb3Qg
aWJtIGRvdCBjb20KKwkJCQkJUmUtaW1wbGVtZW50ZWQgYW5kIGltcHJvdmVkIHJlYWQtd3JpdGUg
bG9ja3M7CisJCQkJCSh3aXRoIExvdWlzIFRob21hcykgcmUtaW1wbGVtZW50ZWQgYW5kIGltcHJv
dmVkCisJCQkJCWNvbmRpdGlvbiB2YXJpYWJsZXM7CisJCQkJCWVuaGFuY2VtZW50cyB0byBzZW1h
cGhvcmVzOworCQkJCQllbmhhbmNlbWVudHMgdG8gbXV0ZXhlczsKKwkJCQkJbmV3IG11dGV4IGlt
cGxlbWVudGF0aW9uIGluICdmdXRleCcgc3R5bGU7CisJCQkJCXN1Z2dlc3RlZCBhIHJvYnVzdCBp
bXBsZW1lbnRhdGlvbiBvZiBwdGhyZWFkX29uY2UKKwkJCQkJc2ltaWxhciB0byB0aGF0IGltcGxl
bWVudGVkIGJ5IFYuS2xpYXRoY2tvOworCQkJCQlzeXN0ZW0gY2xvY2sgY2hhbmdlIGhhbmRsaW5n
IHJlIENWIHRpbWVvdXRzOworCQkJCQlidWcgZml4ZXMuCitUaG9tYXMgUGZhZmYJCXRwZmFmZiBh
dCBnbXggZG90IG5ldAorCQkJCQlDaGFuZ2VzIHRvIG1ha2UgQyB2ZXJzaW9uIHVzYWJsZSB3aXRo
IEMrKyBhcHBsaWNhdGlvbnM7CisJCQkJCXJlLWltcGxlbWVudGVkIG11dGV4IHJvdXRpbmVzIHRv
IGF2b2lkIFdpbjMyIG11dGV4ZXMKKwkJCQkJYW5kIFRyeUVudGVyQ3JpdGljYWxTZWN0aW9uOwor
CQkJCQlwcm9jZWR1cmUgdG8gZml4IE1pbmd3MzIgdGhyZWFkLXNhZmV0eSBpc3N1ZXMuCitGcmFu
Y28gQmV6CQlmcmFuY28gZG90IGJleiBhdCBnbXggZG90IGRlCisJCQkJCXByb2NlZHVyZSB0byBm
aXggTWluZ3czMiB0aHJlYWQtc2FmZXR5IGlzc3Vlcy4KK0xvdWlzIFRob21hcwkJbHRob21hcyBh
dCBhcmJpdHJhZGUgZG90IGNvbQorCQkJCQkod2l0aCBBbGV4YW5kZXIgVGVyZWtob3YpIHJlLWlt
cGxlbWVudGVkIGFuZCBpbXByb3ZlZAorCQkJCQljb25kaXRpb24gdmFyaWFibGVzLgorRGF2aWQg
S29ybgkJZGdrIGF0IHJlc2VhcmNoIGRvdCBhdHQgZG90IGNvbQorCQkJCQlQb3J0ZWQgdG8gVVdJ
Ti4KK1BoaWwgRnJpc2JpZSwgSnIuCXBoaWwgYXQgaGF3a3NvZnQgZG90IGNvbQorCQkJCQlCdWcg
Zml4LgorUmFsZiBCcmVzZQkJUmFsZiBkb3QgQnJlc2UgYXQgcGRiNCBkb3Qgc2llbWVucyBkb3Qg
ZGUKKwkJCQkJQnVnIGZpeC4KK3ByaW9ueCBhdCBqdW5vIGRvdCBjb20gCXByaW9ueCBhdCBqdW5v
IGRvdCBjb20KKwkJCQkJQnVnIGZpeGVzLgorTWF4IFdvb2RidXJ5CQltdGV3IGF0IGNkcyBkb3Qg
ZHVrZSBkb3QgZWR1CisJCQkJCVBPU0lYIHZlcnNpb25pbmcgY29uZGl0aW9uYWxzOworCQkJCQly
ZWR1Y2VkIG5hbWVzcGFjZSBwb2xsdXRpb247CisJCQkJCWlkZWEgdG8gc2VwYXJhdGUgcm91dGlu
ZXMgdG8gcmVkdWNlIHN0YXRpY2FsbHkKKwkJCQkJbGlua2VkIGltYWdlIHNpemVzLgorUm9iIEZh
bm5lcgkJcmZhbm5lciBhdCBzdG9uZXRocmVlIGRvdCBjb20KKwkJCQkJQnVnIGZpeC4KK01pY2hh
ZWwgSm9obnNvbiAJbWljaGFlbGogYXQgbWFpbmUgZG90IHJyIGRvdCBjb20KKwkJCQkJQnVnIGZp
eC4KK05pY29sYXMgQmFycnkJCWJvb3phaSBhdCB5YWhvbyBkb3QgY29tCisJCQkJCUJ1ZyBmaXhl
cy4KK1BpZXQgdmFuIEJydWdnZW4JcGlldHZiIGF0IG5ld2JyaWRnZXMgZG90IG5sCisJCQkJCUJ1
ZyBmaXguCitNYWtvdG8gS2F0bwkJcmF2ZW4gYXQgb2xkc2tvb2wgZG90IGpwCisJCQkJCUFNRDY0
IHBvcnQuCitQYW5hZ2lvdGlzIEUuIEhhZGppZG91a2FzCXBlaCBhdCBocGNsYWIgZG90IGNlaWQg
ZG90IHVwYXRyYXMgZG90IGdyCisJCQkJCUNvbnRyaWJ1dGVkIHRoZSBRdWV1ZVVzZXJBUENFeCBw
YWNrYWdlIHdoaWNoCisJCQkJCW1ha2VzIHByZWVtcHRpdmUgYXN5bmMgY2FuY2VsYXRpb24gcG9z
c2libGUuCitXaWxsIEJyeWFudAkJd2lsbCBkb3QgYnJ5YW50IGF0IGVjb3NtIGRvdCBjb20KKwkJ
CQkJQm9ybGFuZCBjb21waWxlciBwYXRjaCBhbmQgbWFrZWZpbGUuCitBbnVqIEdveWFsCQlhbnVq
IGRvdCBnb3lhbCBhdCBnbWFpbCBkb3QgY29tCisJCQkJCVBvcnQgdG8gRGlnaXRhbCBNYXJzIGNv
bXBpbGVyLgorR290dGxvYiBGcmVnZQkJZ290dGxvYmZyZWdlIGF0ICBnbWFpbCBkb3QgY29tCisJ
CQkJCXJlLWltcGxlbWVudGVkIHB0aHJlYWRfb25jZSAodmVyc2lvbiAyKQorCQkJCQkocHRocmVh
ZF9vbmNlIGNhbmNlbGxhdGlvbiBhZGRlZCBieSBycGopLgorVmxhZGltaXIgS2xpYXRjaGtvCXZs
YWRpbWlyIGF0IGtsaWF0Y2hrbyBkb3QgY29tCisJCQkJCXJlaW1wbGVtZW50ZWQgcHRocmVhZF9v
bmNlIHdpdGggdGhlIHNhbWUgZm9ybQorCQkJCQlhcyBkZXNjcmliZWQgYnkgQS5UZXJla2hvdiAo
bGF0ZXIgdmVyc2lvbiAyKTsKKwkJCQkJaW1wbGVtZW50YXRpb24gb2YgTUNTIChNZWxsb3ItQ3J1
bW1leS9TY290dCkgbG9ja3MuClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dURi93dGYvd2luL09TQWxsb2NhdG9yV2luLmNwcCBiL1NvdXJjZS9XVEYvd3Rm
L3dpbi9PU0FsbG9jYXRvcldpbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjMwNTgxMzNkNTE2ZTJjZjdmZWI5
YjY5MzI1M2VhMDRmYWZkNzA0YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL3dp
bi9PU0FsbG9jYXRvcldpbi5jcHAKQEAgLTAsMCArMSw5OCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMCwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDx3dGYvT1NBbGxvY2F0b3IuaD4KKworI2lu
Y2x1ZGUgPHdpbmRvd3MuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCituYW1lc3Bh
Y2UgV1RGIHsKKworc3RhdGljIGlubGluZSBEV09SRCBwcm90ZWN0aW9uKGJvb2wgd3JpdGFibGUs
IGJvb2wgZXhlY3V0YWJsZSkKK3sKKyAgICByZXR1cm4gZXhlY3V0YWJsZSA/CisgICAgICAgICh3
cml0YWJsZSA/IFBBR0VfRVhFQ1VURV9SRUFEV1JJVEUgOiBQQUdFX0VYRUNVVEVfUkVBRCkgOgor
ICAgICAgICAod3JpdGFibGUgPyBQQUdFX1JFQURXUklURSA6IFBBR0VfUkVBRE9OTFkpOworfQor
Cit2b2lkKiBPU0FsbG9jYXRvcjo6cmVzZXJ2ZVVuY29tbWl0dGVkKHNpemVfdCBieXRlcywgVXNh
Z2UsIGJvb2wgd3JpdGFibGUsIGJvb2wgZXhlY3V0YWJsZSwgYm9vbCkKK3sKKyAgICB2b2lkKiBy
ZXN1bHQgPSBWaXJ0dWFsQWxsb2MoMCwgYnl0ZXMsIE1FTV9SRVNFUlZFLCBwcm90ZWN0aW9uKHdy
aXRhYmxlLCBleGVjdXRhYmxlKSk7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIENSQVNIKCk7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCogT1NBbGxvY2F0b3I6OnJlc2VydmVBbmRD
b21taXQoc2l6ZV90IGJ5dGVzLCBVc2FnZSwgYm9vbCB3cml0YWJsZSwgYm9vbCBleGVjdXRhYmxl
LCBib29sKQoreworICAgIHZvaWQqIHJlc3VsdCA9IFZpcnR1YWxBbGxvYygwLCBieXRlcywgTUVN
X1JFU0VSVkUgfCBNRU1fQ09NTUlULCBwcm90ZWN0aW9uKHdyaXRhYmxlLCBleGVjdXRhYmxlKSk7
CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIENSQVNIKCk7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKwordm9pZCBPU0FsbG9jYXRvcjo6Y29tbWl0KHZvaWQqIGFkZHJlc3MsIHNpemVfdCBieXRl
cywgYm9vbCB3cml0YWJsZSwgYm9vbCBleGVjdXRhYmxlKQoreworICAgIHZvaWQqIHJlc3VsdCA9
IFZpcnR1YWxBbGxvYyhhZGRyZXNzLCBieXRlcywgTUVNX0NPTU1JVCwgcHJvdGVjdGlvbih3cml0
YWJsZSwgZXhlY3V0YWJsZSkpOworICAgIGlmICghcmVzdWx0KQorICAgICAgICBDUkFTSCgpOwor
fQorCit2b2lkIE9TQWxsb2NhdG9yOjpkZWNvbW1pdCh2b2lkKiBhZGRyZXNzLCBzaXplX3QgYnl0
ZXMpCit7CisgICAgLy8gQWNjb3JkaW5nIHRvIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4t
dXMvbGlicmFyeS9hYTM2Njg5MihWUy44NSkuYXNweCwKKyAgICAvLyBieXRlcyAoaS5lLiBkd1Np
emUpIGJlaW5nIDAgd2hlbiBkd0ZyZWVUeXBlIGlzIE1FTV9ERUNPTU1JVCBtZWFucyB0aGF0IHdl
J2xsCisgICAgLy8gZGVjb21taXQgdGhlIGVudGlyZSByZWdpb24gYWxsb2NhdGVkIGJ5IFZpcnR1
YWxBbGxvYygpIGluc3RlYWQgb2YgZGVjb21taXR0aW5nCisgICAgLy8gbm90aGluZyBhcyB3ZSB3
b3VsZCBleHBlY3QuIEhlbmNlLCB3ZSBzaG91bGQgY2hlY2sgaWYgYnl0ZXMgaXMgMCBhbmQgaGFu
ZGxlIGl0CisgICAgLy8gYXBwcm9wcmlhdGVseSBiZWZvcmUgY2FsbGluZyBWaXJ0dWFsRnJlZSgp
LgorICAgIC8vIFNlZTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEy
MTk3Mi4KKyAgICBpZiAoIWJ5dGVzKQorICAgICAgICByZXR1cm47CisgICAgLy8gU2lsZW5jZSB3
YXJuaW5nIGFib3V0IHVzaW5nIE1FTV9ERUNPTU1JVCBpbnN0ZWFkIG9mIE1FTV9SRUxFQVNFOgor
I3ByYWdtYSB3YXJuaW5nKHN1cHByZXNzOiA2MjUwKQorICAgIGJvb2wgcmVzdWx0ID0gVmlydHVh
bEZyZWUoYWRkcmVzcywgYnl0ZXMsIE1FTV9ERUNPTU1JVCk7CisgICAgaWYgKCFyZXN1bHQpCisg
ICAgICAgIENSQVNIKCk7Cit9CisKK3ZvaWQgT1NBbGxvY2F0b3I6OnJlbGVhc2VEZWNvbW1pdHRl
ZCh2b2lkKiBhZGRyZXNzLCBzaXplX3QgYnl0ZXMpCit7CisgICAgLy8gU2VlIGNvbW1lbnQgaW4g
T1NBbGxvY2F0b3I6OmRlY29tbWl0KCkuIFNpbWlsYXJseSwgd2hlbiBieXRlcyBpcyAwLCB3ZQor
ICAgIC8vIGRvbid0IHdhbnQgdG8gcmVsZWFzZSBhbnl0aGluZy4gU28sIGRvbid0IGNhbGwgVmly
dHVhbEZyZWUoKSBiZWxvdy4KKyAgICBpZiAoIWJ5dGVzKQorICAgICAgICByZXR1cm47CisgICAg
Ly8gQWNjb3JkaW5nIHRvIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9h
YTM2Njg5MihWUy44NSkuYXNweCwKKyAgICAvLyBkd1NpemUgbXVzdCBiZSAwIGlmIGR3RnJlZVR5
cGUgaXMgTUVNX1JFTEVBU0UuCisgICAgYm9vbCByZXN1bHQgPSBWaXJ0dWFsRnJlZShhZGRyZXNz
LCAwLCBNRU1fUkVMRUFTRSk7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIENSQVNIKCk7Cit9
CisKK3ZvaWQgT1NBbGxvY2F0b3I6OmhpbnRNZW1vcnlOb3ROZWVkZWRTb29uKHZvaWQqLCBzaXpl
X3QpCit7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93
dGYvd2luL1RocmVhZFNwZWNpZmljV2luLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3dpbi9UaHJlYWRT
cGVjaWZpY1dpbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmE4ZWYzMmMwYWYzYzYyNjY3ODdmYTBlODk0NDk2
NTZkMTE1MDAxZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL3dpbi9UaHJlYWRT
cGVjaWZpY1dpbi5jcHAKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
OSBKaWFuIExpIDxqaWFubGlAY2hyb21pdW0ub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDEyIFBh
dHJpY2sgR2Fuc3RlcmVyIDxwYXJvZ2FAcGFyb2dhLmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlIDx3dGYvVGhyZWFkU3BlY2lmaWMuaD4KKworI2lmICFVU0UoUFRIUkVBRFMp
CisKK25hbWVzcGFjZSBXVEYgeworCitsb25nJiBmbHNLZXlDb3VudCgpCit7CisgICAgc3RhdGlj
IGxvbmcgY291bnQ7CisgICAgcmV0dXJuIGNvdW50OworfQorCitEV09SRCogZmxzS2V5cygpCit7
CisgICAgc3RhdGljIERXT1JEIGtleXNba01heEZsc0tleVNpemVdOworICAgIHJldHVybiBrZXlz
OworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vICFVU0UoUFRIUkVBRFMpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi93aW4vVGhyZWFkaW5nV2luLmNwcCBiL1NvdXJjZS9X
VEYvd3RmL3dpbi9UaHJlYWRpbmdXaW4uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM2ZmVkMWJiMGQyYmFlZDMz
MmRhMWI1N2UzMWU3NTgzYWY4MzJjZjMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0
Zi93aW4vVGhyZWFkaW5nV2luLmNwcApAQCAtMCwwICsxLDQ1OSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwNywgMjAwOCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwOSBUb3JjaCBNb2JpbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIElu
Yy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAg
ZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qCisgKiBU
aGVyZSBhcmUgbnVtZXJvdXMgYWNhZGVtaWMgYW5kIHByYWN0aWNhbCB3b3JrcyBvbiBob3cgdG8g
aW1wbGVtZW50IHB0aHJlYWRfY29uZF93YWl0L3B0aHJlYWRfY29uZF9zaWduYWwvcHRocmVhZF9j
b25kX2Jyb2FkY2FzdAorICogZnVuY3Rpb25zIG9uIFdpbjMyLiBIZXJlIGlzIG9uZSBleGFtcGxl
OiBodHRwOi8vd3d3LmNzLnd1c3RsLmVkdS9+c2NobWlkdC93aW4zMi1jdi0xLmh0bWwgd2hpY2gg
aXMgd2lkZWx5IGNyZWRpdGVkIGFzIGEgJ3N0YXJ0aW5nIHBvaW50JworICogb2YgbW9kZXJuIGF0
dGVtcHRzLiBUaGVyZSBhcmUgc2V2ZXJhbCBtb3JlIG9yIGxlc3MgcHJvdmVuIGltcGxlbWVudGF0
aW9ucywgb25lIGluIEJvb3N0IEMrKyBsaWJyYXJ5IChodHRwOi8vd3d3LmJvb3N0Lm9yZykgYW5k
IGFub3RoZXIKKyAqIGluIHB0aHJlYWRzLXdpbjMyIChodHRwOi8vc291cmNld2FyZS5vcmcvcHRo
cmVhZHMtd2luMzIvKS4KKyAqCisgKiBUaGUgbnVtYmVyIG9mIGFydGljbGVzIGFuZCBkaXNjdXNz
aW9ucyBpcyB0aGUgZXZpZGVuY2Ugb2Ygc2lnbmlmaWNhbnQgZGlmZmljdWx0aWVzIGluIGltcGxl
bWVudGluZyB0aGVzZSBwcmltaXRpdmVzIGNvcnJlY3RseS4KKyAqIFRoZSBicmllZiBzZWFyY2gg
b2YgcmV2aXNpb25zLCBDaGFuZ2VMb2cgZW50cmllcywgZGlzY3Vzc2lvbnMgaW4gY29tcC5wcm9n
cmFtbWluZy50aHJlYWRzIGFuZCBvdGhlciBwbGFjZXMgY2xlYXJseSBkb2N1bWVudHMKKyAqIG51
bWVyb3VzIHBpdGZhbGxzIGFuZCBwZXJmb3JtYW5jZSBwcm9ibGVtcyB0aGUgYXV0aG9ycyBoYWQg
dG8gb3ZlcmNvbWUgdG8gYXJyaXZlIHRvIHRoZSBzdWl0YWJsZSBpbXBsZW1lbnRhdGlvbnMuCisg
KiBPcHRpbWFsbHksIFdlYktpdCB3b3VsZCB1c2Ugb25lIG9mIHRob3NlIHN1cHBvcnRlZC90ZXN0
ZWQgbGlicmFyaWVzIGRpcmVjdGx5LiBUbyByb2xsIG91dCBvdXIgb3duIGltcGxlbWVudGF0aW9u
IGlzIGltcHJhY3RpY2FsLAorICogaWYgZXZlbiBmb3IgdGhlIGxhY2sgb2Ygc3VmZmljaWVudCB0
ZXN0aW5nLiBIb3dldmVyLCBhIGZhaXRoZnVsIHJlcHJvZHVjdGlvbiBvZiB0aGUgY29kZSBmcm9t
IG9uZSBvZiB0aGUgcG9wdWxhciBzdXBwb3J0ZWQKKyAqIGxpYnJhcmllcyBzZWVtcyB0byBiZSBh
IGdvb2QgY29tcHJvbWlzZS4KKyAqCisgKiBUaGUgZWFybHkgQm9vc3QgaW1wbGVtZW50YXRpb24g
KGh0dHA6Ly93d3cuYm94YmFja3VwLm9yZy90cmFjL2Jyb3dzZXIvYm94L25pY2svd2luL2xpYi93
aW4zMi9ib29zdF8xXzMyXzAvbGlicy90aHJlYWQvc3JjL2NvbmRpdGlvbi5jcHA/cmV2PTMwKQor
ICogaXMgaWRlbnRpY2FsIHRvIHB0aHJlYWRzLXdpbjMyIChodHRwOi8vc291cmNld2FyZS5vcmcv
Y2dpLWJpbi9jdnN3ZWIuY2dpL3B0aHJlYWRzL3B0aHJlYWRfY29uZF93YWl0LmM/cmV2PTEuMTAm
Y29udGVudC10eXBlPXRleHQveC1jdnN3ZWItbWFya3VwJmN2c3Jvb3Q9cHRocmVhZHMtd2luMzIp
LgorICogQ3VycmVudCBCb29zdCB1c2VzIHlldCBhbm90aGVyIChhbHRob3VnaCBzZWVtaW5nbHkg
ZXF1aXZhbGVudCkgYWxnb3JpdGhtIHdoaWNoIGNhbWUgZnJvbSB0aGVpciAndGhyZWFkIHJld3Jp
dGUnIGVmZm9ydC4KKyAqCisgKiBUaGlzIGZpbGUgaW5jbHVkZXMgdGltZWRXYWl0L3NpZ25hbC9i
cm9hZGNhc3QgaW1wbGVtZW50YXRpb25zIHRyYW5zbGF0ZWQgdG8gV2ViS2l0IGNvZGluZyBzdHls
ZSBmcm9tIHRoZSBsYXRlc3QgYWxnb3JpdGhtIGJ5CisgKiBBbGV4YW5kZXIgVGVyZWtob3YgYW5k
IExvdWlzIFRob21hcywgYXMgY2FwdHVyZWQgaGVyZTogaHR0cDovL3NvdXJjZXdhcmUub3JnL2Nn
aS1iaW4vY3Zzd2ViLmNnaS9wdGhyZWFkcy9wdGhyZWFkX2NvbmRfd2FpdC5jP3Jldj0xLjEwJmNv
bnRlbnQtdHlwZT10ZXh0L3gtY3Zzd2ViLW1hcmt1cCZjdnNyb290PXB0aHJlYWRzLXdpbjMyCisg
KiBJdCByZXBsYWNlcyB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlaXIgcHJldmlvdXMgYWxnb3Jp
dGhtLCBhbHNvIGRvY3VtZW50ZWQgaW4gdGhlIHNhbWUgc291cmNlIGFib3ZlLgorICogVGhlIG5h
bWluZyBhbmQgY29tbWVudHMgYXJlIGxlZnQgdmVyeSBjbG9zZSB0byBvcmlnaW5hbCB0byBlbmFi
bGUgZWFzeSBjcm9zcy1jaGVjay4KKyAqCisgKiBUaGUgY29ycmVzcG9uZGluZyBQdGhyZWFkcy13
aW4zMiBMaWNlbnNlIGlzIGluY2x1ZGVkIGJlbG93LCBhbmQgQ09OVFJJQlVUT1JTIGZpbGUgd2hp
Y2ggaXQgcmVmZXJzIHRvIGlzIGFkZGVkIHRvCisgKiBzb3VyY2UgZGlyZWN0b3J5IChhcyBDT05U
UklCVVRPUlMucHRocmVhZHMtd2luMzIpLgorICovCisKKy8qCisgKiAgICAgIFB0aHJlYWRzLXdp
bjMyIC0gUE9TSVggVGhyZWFkcyBMaWJyYXJ5IGZvciBXaW4zMgorICogICAgICBDb3B5cmlnaHQo
QykgMTk5OCBKb2huIEUuIEJvc3NvbQorICogICAgICBDb3B5cmlnaHQoQykgMTk5OSwyMDA1IFB0
aHJlYWRzLXdpbjMyIGNvbnRyaWJ1dG9ycworICoKKyAqICAgICAgQ29udGFjdCBFbWFpbDogcnBq
QGNhbGxpc3RvLmNhbmJlcnJhLmVkdS5hdQorICoKKyAqICAgICAgVGhlIGN1cnJlbnQgbGlzdCBv
ZiBjb250cmlidXRvcnMgaXMgY29udGFpbmVkCisgKiAgICAgIGluIHRoZSBmaWxlIENPTlRSSUJV
VE9SUyBpbmNsdWRlZCB3aXRoIHRoZSBzb3VyY2UKKyAqICAgICAgY29kZSBkaXN0cmlidXRpb24u
IFRoZSBsaXN0IGNhbiBhbHNvIGJlIHNlZW4gYXQgdGhlCisgKiAgICAgIGZvbGxvd2luZyBXb3Js
ZCBXaWRlIFdlYiBsb2NhdGlvbjoKKyAqICAgICAgaHR0cDovL3NvdXJjZXMucmVkaGF0LmNvbS9w
dGhyZWFkcy13aW4zMi9jb250cmlidXRvcnMuaHRtbAorICoKKyAqICAgICAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICAg
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCisgKiAgICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogICAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICAgICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
ICAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqICAgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICAgICAgTGVzc2VyIEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgICAgIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICAg
ICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeSBpbiB0aGUgZmlsZSBDT1BZSU5HLkxJ
QjsKKyAqICAgICAgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLAorICogICAgICA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEg
MDIxMTEtMTMwNywgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHd0
Zi9UaHJlYWRpbmcuaD4KKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8cHJvY2Vzcy5o
PgorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1
ZGUgPHd0Zi9Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKyNpbmNsdWRlIDx3
dGYvTWF0aEV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1
ZGUgPHd0Zi9UaHJlYWRpbmdQcmltaXRpdmVzLmg+CisKK25hbWVzcGFjZSBXVEYgeworCitzdGF0
aWMgTG9jayBnbG9iYWxTdXNwZW5kTG9jazsKKworVGhyZWFkOjp+VGhyZWFkKCkKK3sKKyAgICAv
LyBJdCBpcyBPSyBiZWNhdXNlIEZMU0FsbG9jJ3MgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgZXZl
biBiZWZvcmUgdGhlcmUgYXJlIHNvbWUgb3BlbiBoYW5kbGVzLgorICAgIC8vIFRoaXMgZWFzaWx5
IGVuc3VyZXMgdGhhdCBhbGwgdGhlIHRocmVhZCByZXNvdXJjZXMgYXJlIGF1dG9tYXRpY2FsbHkg
Y2xvc2VkLgorICAgIGlmIChtX2hhbmRsZSAhPSBJTlZBTElEX0hBTkRMRV9WQUxVRSkKKyAgICAg
ICAgQ2xvc2VIYW5kbGUobV9oYW5kbGUpOworfQorCit2b2lkIFRocmVhZDo6aW5pdGlhbGl6ZUN1
cnJlbnRUaHJlYWRFdmVuSWZOb25XVEZDcmVhdGVkKCkKK3sKK30KKworLy8gTVNfVkNfRVhDRVBU
SU9OLCBUSFJFQUROQU1FX0lORk8sIGFuZCBzZXRUaHJlYWROYW1lSW50ZXJuYWwgYWxsIGNvbWUg
ZnJvbSA8aHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L3hjYjJ6OGhzLmFz
cHg+Lgorc3RhdGljIGNvbnN0IERXT1JEIE1TX1ZDX0VYQ0VQVElPTiA9IDB4NDA2RDEzODg7CisK
KyNwcmFnbWEgcGFjayhwdXNoLCA4KQordHlwZWRlZiBzdHJ1Y3QgdGFnVEhSRUFETkFNRV9JTkZP
IHsKKyAgICBEV09SRCBkd1R5cGU7IC8vIG11c3QgYmUgMHgxMDAwCisgICAgTFBDU1RSIHN6TmFt
ZTsgLy8gcG9pbnRlciB0byBuYW1lIChpbiB1c2VyIGFkZHIgc3BhY2UpCisgICAgRFdPUkQgZHdU
aHJlYWRJRDsgLy8gdGhyZWFkIElEICgtMT1jYWxsZXIgdGhyZWFkKQorICAgIERXT1JEIGR3Rmxh
Z3M7IC8vIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlLCBtdXN0IGJlIHplcm8KK30gVEhSRUFETkFN
RV9JTkZPOworI3ByYWdtYSBwYWNrKHBvcCkKKwordm9pZCBUaHJlYWQ6OmluaXRpYWxpemVDdXJy
ZW50VGhyZWFkSW50ZXJuYWwoY29uc3QgY2hhciogc3pUaHJlYWROYW1lKQoreworI2lmIENPTVBJ
TEVSKE1JTkdXKQorICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhyZWFkIG5hbWUgc2V0dGluZyB3
aXRoIE1pbmdXLgorICAgIFVOVVNFRF9QQVJBTShzelRocmVhZE5hbWUpOworI2Vsc2UKKyAgICBU
SFJFQUROQU1FX0lORk8gaW5mbzsKKyAgICBpbmZvLmR3VHlwZSA9IDB4MTAwMDsKKyAgICBpbmZv
LnN6TmFtZSA9IFRocmVhZDo6bm9ybWFsaXplVGhyZWFkTmFtZShzelRocmVhZE5hbWUpOworICAg
IGluZm8uZHdUaHJlYWRJRCA9IEdldEN1cnJlbnRUaHJlYWRJZCgpOworICAgIGluZm8uZHdGbGFn
cyA9IDA7CisKKyAgICBfX3RyeSB7CisgICAgICAgIFJhaXNlRXhjZXB0aW9uKE1TX1ZDX0VYQ0VQ
VElPTiwgMCwgc2l6ZW9mKGluZm8pIC8gc2l6ZW9mKFVMT05HX1BUUiksIHJlaW50ZXJwcmV0X2Nh
c3Q8VUxPTkdfUFRSKj4oJmluZm8pKTsKKyAgICB9IF9fZXhjZXB0KEVYQ0VQVElPTl9DT05USU5V
RV9FWEVDVVRJT04pIHsgfQorI2VuZGlmCisgICAgaW5pdGlhbGl6ZUN1cnJlbnRUaHJlYWRFdmVu
SWZOb25XVEZDcmVhdGVkKCk7Cit9CisKK3ZvaWQgVGhyZWFkOjppbml0aWFsaXplUGxhdGZvcm1U
aHJlYWRpbmcoKQoreworfQorCitzdGF0aWMgdW5zaWduZWQgX19zdGRjYWxsIHd0ZlRocmVhZEVu
dHJ5UG9pbnQodm9pZCogZGF0YSkKK3sKKyAgICBUaHJlYWQ6OmVudHJ5UG9pbnQocmVpbnRlcnBy
ZXRfY2FzdDxUaHJlYWQ6Ok5ld1RocmVhZENvbnRleHQqPihkYXRhKSk7CisgICAgcmV0dXJuIDA7
Cit9CisKK2Jvb2wgVGhyZWFkOjplc3RhYmxpc2hIYW5kbGUoTmV3VGhyZWFkQ29udGV4dCogZGF0
YSkKK3sKKyAgICB1bnNpZ25lZCB0aHJlYWRJZGVudGlmaWVyID0gMDsKKyAgICBIQU5ETEUgdGhy
ZWFkSGFuZGxlID0gcmVpbnRlcnByZXRfY2FzdDxIQU5ETEU+KF9iZWdpbnRocmVhZGV4KDAsIDAs
IHd0ZlRocmVhZEVudHJ5UG9pbnQsIGRhdGEsIDAsICZ0aHJlYWRJZGVudGlmaWVyKSk7CisgICAg
aWYgKCF0aHJlYWRIYW5kbGUpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRl
IHRocmVhZCBhdCBlbnRyeSBwb2ludCAlcCB3aXRoIGRhdGEgJXA6ICVsZCIsIHd0ZlRocmVhZEVu
dHJ5UG9pbnQsIGRhdGEsIGVycm5vKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAg
ICBlc3RhYmxpc2hQbGF0Zm9ybVNwZWNpZmljSGFuZGxlKHRocmVhZEhhbmRsZSwgdGhyZWFkSWRl
bnRpZmllcik7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgVGhyZWFkOjpjaGFuZ2VQcmlv
cml0eShpbnQgZGVsdGEpCit7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX211dGV4KTsK
KyAgICBTZXRUaHJlYWRQcmlvcml0eShtX2hhbmRsZSwgVEhSRUFEX1BSSU9SSVRZX05PUk1BTCAr
IGRlbHRhKTsKK30KKworaW50IFRocmVhZDo6d2FpdEZvckNvbXBsZXRpb24oKQoreworICAgIEhB
TkRMRSBoYW5kbGU7CisgICAgeworICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbXV0
ZXgpOworICAgICAgICBoYW5kbGUgPSBtX2hhbmRsZTsKKyAgICB9CisKKyAgICBEV09SRCBqb2lu
UmVzdWx0ID0gV2FpdEZvclNpbmdsZU9iamVjdChoYW5kbGUsIElORklOSVRFKTsKKyAgICBpZiAo
am9pblJlc3VsdCA9PSBXQUlUX0ZBSUxFRCkKKyAgICAgICAgTE9HX0VSUk9SKCJUaHJlYWQgJXAg
d2FzIGZvdW5kIHRvIGJlIGRlYWRsb2NrZWQgdHJ5aW5nIHRvIHF1aXQiLCB0aGlzKTsKKworICAg
IGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9tdXRleCk7CisgICAgQVNTRVJUKGpvaW5hYmxlU3Rh
dGUoKSA9PSBKb2luYWJsZSk7CisKKyAgICAvLyBUaGUgdGhyZWFkIGhhcyBhbHJlYWR5IGV4aXRl
ZCwgZG8gbm90aGluZy4KKyAgICAvLyBUaGUgdGhyZWFkIGhhc24ndCBleGl0ZWQgeWV0LCBzbyBk
b24ndCBjbGVhbiBhbnl0aGluZyB1cC4gSnVzdCBzaWduYWwgdGhhdCB3ZSd2ZSBhbHJlYWR5IGpv
aW5lZCBvbiBpdCBzbyB0aGF0IGl0IHdpbGwgY2xlYW4gdXAgYWZ0ZXIgaXRzZWxmLgorICAgIGlm
ICghaGFzRXhpdGVkKCkpCisgICAgICAgIGRpZEpvaW4oKTsKKworICAgIHJldHVybiBqb2luUmVz
dWx0OworfQorCit2b2lkIFRocmVhZDo6ZGV0YWNoKCkKK3sKKyAgICAvLyBXZSBmb2xsb3cgdGhl
IHB0aHJlYWQgc2VtYW50aWNzOiBldmVuIGFmdGVyIHRoZSBkZXRhY2ggaXMgY2FsbGVkLAorICAg
IC8vIHdlIGNhbiBzdGlsbCBwZXJmb3JtIHZhcmlvdXMgb3BlcmF0aW9ucyBvbnRvIHRoZSB0aHJl
YWQuIEZvciBleGFtcGxlLAorICAgIC8vIHdlIGNhbiBkbyBwdGhyZWFkX2tpbGwgZm9yIHRoZSBk
ZXRhY2hlZCB0aHJlYWQuIFRoZSBwcm9ibGVtIGluIFdpbmRvd3MKKyAgICAvLyBpcyB0aGF0IGNs
b3NpbmcgSEFORExFIGxvc2VzIHRoZSB3YXkgdG8gZG8gc3VjaCBvcGVyYXRpb25zLgorICAgIC8v
IFRvIGRvIHNvLCB3ZSBkbyBub3RoaW5nIGhlcmUgaW4gV2luZG93cy4gT3JpZ2luYWwgZGV0YWNo
J3MgcHVycG9zZSwKKyAgICAvLyByZWxlYXNpbmcgdGhyZWFkIHJlc291cmNlIHdoZW4gdGhlIHRo
cmVhZCBleGl0cywgd2lsbCBiZSBhY2hpZXZlZCBieQorICAgIC8vIEZsc0NhbGxiYWNrIGF1dG9t
YXRpY2FsbHkuIEZsc0NhbGxiYWNrIHdpbGwgY2FsbCBDbG9zZUhhbmRsZSB0byBjbGVhbiB1cAor
ICAgIC8vIHJlc291cmNlLiBTbyBpbiB0aGlzIGZ1bmN0aW9uLCB3ZSBqdXN0IG1hcmsgdGhlIHRo
cmVhZCBhcyBkZXRhY2hlZCB0bworICAgIC8vIGF2b2lkIGNhbGxpbmcgd2FpdEZvckNvbXBsZXRp
b24gZm9yIHRoaXMgdGhyZWFkLgorICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9tdXRleCk7
CisgICAgaWYgKCFoYXNFeGl0ZWQoKSkKKyAgICAgICAgZGlkQmVjb21lRGV0YWNoZWQoKTsKK30K
KworYXV0byBUaHJlYWQ6OnN1c3BlbmQoKSAtPiBFeHBlY3RlZDx2b2lkLCBQbGF0Zm9ybVN1c3Bl
bmRFcnJvcj4KK3sKKyAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UodGhpcyAhPSAmVGhy
ZWFkOjpjdXJyZW50KCksICJXZSBkbyBub3Qgc3VwcG9ydCBzdXNwZW5kaW5nIHRoZSBjdXJyZW50
IHRocmVhZCBpdHNlbGYuIik7CisgICAgTG9ja0hvbGRlciBsb2NrZXIoZ2xvYmFsU3VzcGVuZExv
Y2spOworICAgIERXT1JEIHJlc3VsdCA9IFN1c3BlbmRUaHJlYWQobV9oYW5kbGUpOworICAgIGlm
IChyZXN1bHQgIT0gKERXT1JEKS0xKQorICAgICAgICByZXR1cm4geyB9OworICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZChyZXN1bHQpOworfQorCisvLyBEdXJpbmcgcmVzdW1lLCBzdXNwZW5kIG9y
IHJlc3VtZSBzaG91bGQgbm90IGJlIGV4ZWN1dGVkIGZyb20gdGhlIG90aGVyIHRocmVhZHMuCit2
b2lkIFRocmVhZDo6cmVzdW1lKCkKK3sKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihnbG9iYWxTdXNw
ZW5kTG9jayk7CisgICAgUmVzdW1lVGhyZWFkKG1faGFuZGxlKTsKK30KKworc2l6ZV90IFRocmVh
ZDo6Z2V0UmVnaXN0ZXJzKFBsYXRmb3JtUmVnaXN0ZXJzJiByZWdpc3RlcnMpCit7CisgICAgTG9j
a0hvbGRlciBsb2NrZXIoZ2xvYmFsU3VzcGVuZExvY2spOworICAgIHJlZ2lzdGVycy5Db250ZXh0
RmxhZ3MgPSBDT05URVhUX0lOVEVHRVIgfCBDT05URVhUX0NPTlRST0w7CisgICAgR2V0VGhyZWFk
Q29udGV4dChtX2hhbmRsZSwgJnJlZ2lzdGVycyk7CisgICAgcmV0dXJuIHNpemVvZihDT05URVhU
KTsKK30KKworVGhyZWFkJiBUaHJlYWQ6OmluaXRpYWxpemVDdXJyZW50VExTKCkKK3sKKyAgICAv
LyBOb3QgYSBXVEYtY3JlYXRlZCB0aHJlYWQsIFRocmVhZElkZW50aWZpZXIgaXMgbm90IGVzdGFi
bGlzaGVkIHlldC4KKyAgICBSZWY8VGhyZWFkPiB0aHJlYWQgPSBhZG9wdFJlZigqbmV3IFRocmVh
ZCgpKTsKKworICAgIEhBTkRMRSBoYW5kbGU7CisgICAgYm9vbCBpc1N1Y2Nlc3NmdWwgPSBEdXBs
aWNhdGVIYW5kbGUoR2V0Q3VycmVudFByb2Nlc3MoKSwgR2V0Q3VycmVudFRocmVhZCgpLCBHZXRD
dXJyZW50UHJvY2VzcygpLCAmaGFuZGxlLCAwLCBGQUxTRSwgRFVQTElDQVRFX1NBTUVfQUNDRVNT
KTsKKyAgICBSRUxFQVNFX0FTU0VSVChpc1N1Y2Nlc3NmdWwpOworCisgICAgdGhyZWFkLT5lc3Rh
Ymxpc2hQbGF0Zm9ybVNwZWNpZmljSGFuZGxlKGhhbmRsZSwgY3VycmVudElEKCkpOworICAgIHRo
cmVhZC0+aW5pdGlhbGl6ZUluVGhyZWFkKCk7CisgICAgaW5pdGlhbGl6ZUN1cnJlbnRUaHJlYWRF
dmVuSWZOb25XVEZDcmVhdGVkKCk7CisKKyAgICByZXR1cm4gaW5pdGlhbGl6ZVRMUyhXVEZNb3Zl
KHRocmVhZCkpOworfQorCitUaHJlYWRJZGVudGlmaWVyIFRocmVhZDo6Y3VycmVudElEKCkKK3sK
KyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VGhyZWFkSWRlbnRpZmllcj4oR2V0Q3VycmVudFRocmVh
ZElkKCkpOworfQorCit2b2lkIFRocmVhZDo6ZXN0YWJsaXNoUGxhdGZvcm1TcGVjaWZpY0hhbmRs
ZShIQU5ETEUgaGFuZGxlLCBUaHJlYWRJZGVudGlmaWVyIHRocmVhZElEKQoreworICAgIGF1dG8g
bG9ja2VyID0gaG9sZExvY2sobV9tdXRleCk7CisgICAgbV9oYW5kbGUgPSBoYW5kbGU7CisgICAg
bV9pZCA9IHRocmVhZElEOworfQorCisjZGVmaW5lIEludmFsaWRUaHJlYWQgcmVpbnRlcnByZXRf
Y2FzdDxUaHJlYWQqPihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KDB4YmJhZGJlZWYpKQorCitzdGF0
aWMgV29yZExvY2sgdGhyZWFkTWFwTXV0ZXg7CisKK3N0YXRpYyBIYXNoTWFwPFRocmVhZElkZW50
aWZpZXIsIFRocmVhZCo+JiB0aHJlYWRNYXAoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxIYXNoTWFwPFRocmVhZElkZW50aWZpZXIsIFRocmVhZCo+PiBtYXA7CisgICAgcmV0dXJuIG1h
cC5nZXQoKTsKK30KKwordm9pZCBUaHJlYWQ6OmluaXRpYWxpemVUTFNLZXkoKQoreworICAgIHRo
cmVhZE1hcCgpOworICAgIHRocmVhZFNwZWNpZmljS2V5Q3JlYXRlKCZzX2tleSwgZGVzdHJ1Y3RU
TFMpOworfQorCitUaHJlYWQqIFRocmVhZDo6Y3VycmVudER5aW5nKCkKK3sKKyAgICBBU1NFUlQo
c19rZXkgIT0gSW52YWxpZFRocmVhZFNwZWNpZmljS2V5KTsKKyAgICAvLyBBZnRlciBGTFMgaXMg
ZGVzdHJveWVkLCB0aGlzIG1hcCBvZmZlcnMgdGhlIHZhbHVlIHVudGlsIHRoZSBzZWNvbmQgdGhy
ZWFkIGV4aXQgY2FsbGJhY2sgaXMgY2FsbGVkLgorICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2so
dGhyZWFkTWFwTXV0ZXgpOworICAgIHJldHVybiB0aHJlYWRNYXAoKS5nZXQoY3VycmVudElEKCkp
OworfQorCisvLyBGSVhNRTogUmVtb3ZlIHRoaXMgd29ya2Fyb3VuZCBjb2RlIG9uY2UgPHJkYXI6
Ly9wcm9ibGVtLzMxNzkzMjEzPiBpcyBmaXhlZC4KK1JlZlB0cjxUaHJlYWQ+IFRocmVhZDo6Z2V0
KFRocmVhZElkZW50aWZpZXIgaWQpCit7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayh0aHJl
YWRNYXBNdXRleCk7CisgICAgVGhyZWFkKiB0aHJlYWQgPSB0aHJlYWRNYXAoKS5nZXQoaWQpOwor
ICAgIGlmICh0aHJlYWQpCisgICAgICAgIHJldHVybiB0aHJlYWQ7CisgICAgcmV0dXJuIG51bGxw
dHI7Cit9CisKK1RocmVhZCYgVGhyZWFkOjppbml0aWFsaXplVExTKFJlZjxUaHJlYWQ+JiYgdGhy
ZWFkKQoreworICAgIEFTU0VSVChzX2tleSAhPSBJbnZhbGlkVGhyZWFkU3BlY2lmaWNLZXkpOwor
ICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhpcyB3b3JrYXJvdW5kIGNvZGUgb25jZSA8cmRhcjovL3By
b2JsZW0vMzE3OTMyMTM+IGlzIGZpeGVkLgorICAgIGF1dG8gaWQgPSB0aHJlYWQtPmlkKCk7Cisg
ICAgLy8gV2UgbGVhayB0aGUgcmVmIHRvIGtlZXAgdGhlIFRocmVhZCBhbGl2ZSB3aGlsZSBpdCBp
cyBoZWxkIGluIFRMUy4gZGVzdHJ1Y3RUTFMgd2lsbCBkZXJlZiBpdCBsYXRlciBhdCB0aHJlYWQg
ZGVzdHJ1Y3Rpb24gdGltZS4KKyAgICBhdXRvJiB0aHJlYWRJblRMUyA9IHRocmVhZC5sZWFrUmVm
KCk7CisgICAgdGhyZWFkU3BlY2lmaWNTZXQoc19rZXksICZ0aHJlYWRJblRMUyk7CisgICAgewor
ICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKHRocmVhZE1hcE11dGV4KTsKKyAgICAgICAg
dGhyZWFkTWFwKCkuYWRkKGlkLCAmdGhyZWFkSW5UTFMpOworICAgIH0KKyAgICByZXR1cm4gdGhy
ZWFkSW5UTFM7Cit9CisKK3ZvaWQgVGhyZWFkOjpkZXN0cnVjdFRMUyh2b2lkKiBkYXRhKQorewor
ICAgIGlmIChkYXRhID09IEludmFsaWRUaHJlYWQpCisgICAgICAgIHJldHVybjsKKworICAgIFRo
cmVhZCogdGhyZWFkID0gc3RhdGljX2Nhc3Q8VGhyZWFkKj4oZGF0YSk7CisgICAgQVNTRVJUKHRo
cmVhZCk7CisKKyAgICAvLyBEZWxheSB0aGUgZGVhbGxvY2F0aW9uIG9mIFRocmVhZCBtb3JlLgor
ICAgIC8vIEl0IGRlZmVycyBUaHJlYWQgZGVhbGxvY2F0aW9uIGFmdGVyIHRoZSBvdGhlciBUaHJl
YWRTcGVjaWZpYyB2YWx1ZXMgYXJlIGRlYWxsb2NhdGVkLgorICAgIHN0YXRpYyB0aHJlYWRfbG9j
YWwgY2xhc3MgVGhyZWFkRXhpdENhbGxiYWNrIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFRocmVh
ZEV4aXRDYWxsYmFjayhUaHJlYWQqIHRocmVhZCkKKyAgICAgICAgICAgIDogbV90aHJlYWQodGhy
ZWFkKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICB+VGhyZWFkRXhpdENhbGxiYWNr
KCkKKyAgICAgICAgeworICAgICAgICAgICAgVGhyZWFkOjpkZXN0cnVjdFRMUyhtX3RocmVhZCk7
CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIFRocmVhZCogbV90aHJlYWQ7Cisg
ICAgfSBjYWxsYmFjayh0aHJlYWQpOworCisgICAgaWYgKHRocmVhZC0+bV9pc0Rlc3Ryb3llZE9u
Y2UpIHsKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayh0aHJl
YWRNYXBNdXRleCk7CisgICAgICAgICAgICBBU1NFUlQodGhyZWFkTWFwKCkuY29udGFpbnModGhy
ZWFkLT5pZCgpKSk7CisgICAgICAgICAgICB0aHJlYWRNYXAoKS5yZW1vdmUodGhyZWFkLT5pZCgp
KTsKKyAgICAgICAgfQorICAgICAgICB0aHJlYWQtPmRpZEV4aXQoKTsKKyAgICAgICAgdGhyZWFk
LT5kZXJlZigpOworCisgICAgICAgIC8vIEZpbGwgdGhlIEZMUyB3aXRoIHRoZSBub24tbnVsbHB0
ciB2YWx1ZS4gV2hpbGUgRkxTIGRlc3RydWN0b3Igd29uJ3QgYmUgY2FsbGVkIGZvciB0aGF0LAor
ICAgICAgICAvLyBub24tbnVsbHB0ciB2YWx1ZSB0ZWxscyB1cyB0aGF0IHdlIGFscmVhZHkgZGVz
dHJ1Y3RlZCBUaHJlYWQuIFRoaXMgYWxsb3dzIHVzIHRvCisgICAgICAgIC8vIGRldGVjdCBpbmNv
cnJlY3QgdXNlIG9mIFRocmVhZDo6Y3VycmVudCgpIGFmdGVyIHRoaXMgcG9pbnQgYmVjYXVzZSBp
dCB3aWxsIGNyYXNoLgorICAgICAgICB0aHJlYWRTcGVjaWZpY1NldChzX2tleSwgSW52YWxpZFRo
cmVhZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgdGhyZWFkU3BlY2lmaWNTZXQoc19r
ZXksIEludmFsaWRUaHJlYWQpOworICAgIHRocmVhZC0+bV9pc0Rlc3Ryb3llZE9uY2UgPSB0cnVl
OworfQorCitNdXRleDo6fk11dGV4KCkKK3sKK30KKwordm9pZCBNdXRleDo6bG9jaygpCit7Cisg
ICAgQWNxdWlyZVNSV0xvY2tFeGNsdXNpdmUoJm1fbXV0ZXgpOworfQorCitib29sIE11dGV4Ojp0
cnlMb2NrKCkKK3sKKyAgICByZXR1cm4gVHJ5QWNxdWlyZVNSV0xvY2tFeGNsdXNpdmUoJm1fbXV0
ZXgpOworfQorCit2b2lkIE11dGV4Ojp1bmxvY2soKQoreworICAgIFJlbGVhc2VTUldMb2NrRXhj
bHVzaXZlKCZtX211dGV4KTsKK30KKworLy8gUmV0dXJucyBhbiBpbnRlcnZhbCBpbiBtaWxsaXNl
Y29uZHMgc3VpdGFibGUgZm9yIHBhc3NpbmcgdG8gb25lIG9mIHRoZSBXaW4zMiB3YWl0IGZ1bmN0
aW9ucyAoZS5nLiwgOjpXYWl0Rm9yU2luZ2xlT2JqZWN0KS4KK3N0YXRpYyBEV09SRCBhYnNvbHV0
ZVRpbWVUb1dhaXRUaW1lb3V0SW50ZXJ2YWwoV2FsbFRpbWUgYWJzb2x1dGVUaW1lKQoreworICAg
IFdhbGxUaW1lIGN1cnJlbnRUaW1lID0gV2FsbFRpbWU6Om5vdygpOworCisgICAgLy8gVGltZSBp
cyBpbiB0aGUgcGFzdCAtIHJldHVybiBpbW1lZGlhdGVseS4KKyAgICBpZiAoYWJzb2x1dGVUaW1l
IDwgY3VycmVudFRpbWUpCisgICAgICAgIHJldHVybiAwOworCisgICAgLy8gVGltZSBpcyB0b28g
ZmFyIGluIHRoZSBmdXR1cmUgKGFuZCB3b3VsZCBvdmVyZmxvdyB1bnNpZ25lZCBsb25nKSAtIHdh
aXQgZm9yZXZlci4KKyAgICBpZiAoKGFic29sdXRlVGltZSAtIGN1cnJlbnRUaW1lKSA+IFNlY29u
ZHM6OmZyb21NaWxsaXNlY29uZHMoSU5UX01BWCkpCisgICAgICAgIHJldHVybiBJTkZJTklURTsK
KworICAgIHJldHVybiBzdGF0aWNfY2FzdDxEV09SRD4oKGFic29sdXRlVGltZSAtIGN1cnJlbnRU
aW1lKS5taWxsaXNlY29uZHMoKSk7Cit9CisKK1RocmVhZENvbmRpdGlvbjo6flRocmVhZENvbmRp
dGlvbigpCit7Cit9CisKK3ZvaWQgVGhyZWFkQ29uZGl0aW9uOjp3YWl0KE11dGV4JiBtdXRleCkK
K3sKKyAgICBTbGVlcENvbmRpdGlvblZhcmlhYmxlU1JXKCZtX2NvbmRpdGlvbiwgJm11dGV4Lmlt
cGwoKSwgSU5GSU5JVEUsIDApOworfQorCitib29sIFRocmVhZENvbmRpdGlvbjo6dGltZWRXYWl0
KE11dGV4JiBtdXRleCwgV2FsbFRpbWUgYWJzb2x1dGVUaW1lKQoreworICAgIC8vIGh0dHBzOi8v
bXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvd2luZG93cy9kZXNrdG9wL21zNjg2MzA0
KHY9dnMuODUpLmFzcHgKKyAgICBEV09SRCBpbnRlcnZhbCA9IGFic29sdXRlVGltZVRvV2FpdFRp
bWVvdXRJbnRlcnZhbChhYnNvbHV0ZVRpbWUpOworICAgIGlmICghaW50ZXJ2YWwpIHsKKyAgICAg
ICAgLy8gQ29uc2lkZXIgdGhlIHdhaXQgdG8gaGF2ZSB0aW1lZCBvdXQsIGV2ZW4gaWYgb3VyIGNv
bmRpdGlvbiBoYXMgYWxyZWFkeSBiZWVuIHNpZ25hbGVkLCB0bworICAgICAgICAvLyBtYXRjaCB0
aGUgcHRocmVhZHMgaW1wbGVtZW50YXRpb24uCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKyAgICBpZiAoU2xlZXBDb25kaXRpb25WYXJpYWJsZVNSVygmbV9jb25kaXRpb24sICZtdXRl
eC5pbXBsKCksIGludGVydmFsLCAwKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgQVNTRVJU
KEdldExhc3RFcnJvcigpID09IEVSUk9SX1RJTUVPVVQpOworICAgIHJldHVybiBmYWxzZTsKK30K
Kwordm9pZCBUaHJlYWRDb25kaXRpb246OnNpZ25hbCgpCit7CisgICAgV2FrZUNvbmRpdGlvblZh
cmlhYmxlKCZtX2NvbmRpdGlvbik7Cit9CisKK3ZvaWQgVGhyZWFkQ29uZGl0aW9uOjpicm9hZGNh
c3QoKQoreworICAgIFdha2VBbGxDb25kaXRpb25WYXJpYWJsZSgmbV9jb25kaXRpb24pOworfQor
CisvLyBSZW1vdmUgdGhpcyB3b3JrYXJvdW5kIGNvZGUgd2hlbiA8cmRhcjovL3Byb2JsZW0vMzE3
OTMyMTM+IGlzIGZpeGVkLgorVGhyZWFkSWRlbnRpZmllciBjcmVhdGVUaHJlYWQoVGhyZWFkRnVu
Y3Rpb24gZnVuY3Rpb24sIHZvaWQqIGRhdGEsIGNvbnN0IGNoYXIqIHRocmVhZE5hbWUpCit7Cisg
ICAgcmV0dXJuIFRocmVhZDo6Y3JlYXRlKHRocmVhZE5hbWUsIFtmdW5jdGlvbiwgZGF0YV0gewor
ICAgICAgICBmdW5jdGlvbihkYXRhKTsKKyAgICB9KS0+aWQoKTsKK30KKworaW50IHdhaXRGb3JU
aHJlYWRDb21wbGV0aW9uKFRocmVhZElkZW50aWZpZXIgdGhyZWFkSUQpCit7CisgICAgLy8gVGhp
cyBmdW5jdGlvbiBpcyBpbXBsZW1lbnRlZCBiYXNlZCBvbiB0aGUgb2xkIFRocmVhZGluZyBpbXBs
ZW1lbnRhdGlvbi4KKyAgICAvLyBJdCByZW1haW5zIG9ubHkgZHVlIHRvIHRoZSBzdXBwb3J0IGxp
YnJhcnkgdXNpbmcgb2xkIFRocmVhZGluZyBBUElzIGFuZAorICAgIC8vIGl0IHNob3VsZCBub3Qg
YmUgdXNlZCBpbiBuZXcgY29kZS4KKyAgICBBU1NFUlQodGhyZWFkSUQpOworCisgICAgUmVmUHRy
PFRocmVhZD4gdGhyZWFkID0gVGhyZWFkOjpnZXQodGhyZWFkSUQpOworICAgIGlmICghdGhyZWFk
KSB7CisgICAgICAgIExPR19FUlJPUigiVGhyZWFkSWRlbnRpZmllciAldSBkaWQgbm90IGNvcnJl
c3BvbmQgdG8gYW4gYWN0aXZlIHRocmVhZCB3aGVuIHRyeWluZyB0byBxdWl0IiwgdGhyZWFkSUQp
OworICAgICAgICByZXR1cm4gV0FJVF9GQUlMRUQ7CisgICAgfQorICAgIHJldHVybiB0aHJlYWQt
PndhaXRGb3JDb21wbGV0aW9uKCk7CisKK30KKwordm9pZCBUaHJlYWQ6OnlpZWxkKCkKK3sKKyAg
ICBTd2l0Y2hUb1RocmVhZCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYK
</data>

          </attachment>
      

    </bug>

</bugzilla>