<?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>224971</bug_id>
          
          <creation_ts>2021-04-23 01:57:57 -0700</creation_ts>
          <short_desc>Asserting that function or variable is accessed in a certain thread should be simpler and more robust</short_desc>
          <delta_ts>2021-04-28 06:31:34 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Template Framework</component>
          <version>WebKit Local 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>
          
          <blocked>221614</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Kimmo Kinnunen">kkinnunen</reporter>
          <assigned_to name="Kimmo Kinnunen">kkinnunen</assigned_to>
          <cc>annulen</cc>
    
    <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>darin</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1753501</commentid>
    <comment_count>0</comment_count>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-04-23 01:57:57 -0700</bug_when>
    <thetext>Asserting that function or variable is accessed in a certain thread should be simpler and more robust

Currently thread assertions are of form:
ASSERT(isMainThread());
ASSERT(!isMainThread());

These are sometimes applied and sometimes not.

Especially the latter is quite vague.

This creates small consistency problems.
For example, WeakPtr has the property that it must be dereferenced in the thread that owns the WeakPtrFactory. However, the assertion is only done for main thread.

It would be beneficial to have following additions:
1) Possibility to assert arbitrary thread
2) Possibility to enforce the thread access compile-time through thread safety analysis.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1753511</commentid>
    <comment_count>1</comment_count>
      <attachid>426895</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-04-23 02:44:39 -0700</bug_when>
    <thetext>Created attachment 426895
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1753523</commentid>
    <comment_count>2</comment_count>
      <attachid>426897</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-04-23 02:49:50 -0700</bug_when>
    <thetext>Created attachment 426897
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1754055</commentid>
    <comment_count>3</comment_count>
      <attachid>426897</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-04-25 13:16:47 -0700</bug_when>
    <thetext>Comment on attachment 426897
Patch

Would be nice to use this in at least one place in the non-test code in this initial patch, but clean to do the patch as-is, too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1754566</commentid>
    <comment_count>4</comment_count>
      <attachid>427140</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-04-27 06:07:28 -0700</bug_when>
    <thetext>Created attachment 427140
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1754999</commentid>
    <comment_count>5</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-04-28 06:30:24 -0700</bug_when>
    <thetext>Committed r276706 (237115@main): &lt;https://commits.webkit.org/237115@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 427140.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1755002</commentid>
    <comment_count>6</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-04-28 06:31:34 -0700</bug_when>
    <thetext>&lt;rdar://problem/77262811&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>426895</attachid>
            <date>2021-04-23 02:44:39 -0700</date>
            <delta_ts>2021-04-23 02:49:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-224971-20210423124437.patch</filename>
            <type>text/plain</type>
            <size>18211</size>
            <attacher name="Kimmo Kinnunen">kkinnunen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc2NDIyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGRlMTk3NmRjNWI4NDExM2MzMDQ1MGE0
YmY0OTkwMDA2OGUyNzMzM2MuLmI3MWUyZjk1ZjI4MDFlNDg4MjE2Y2ZmNmUwNjk2MzhkYzM2M2I3
ODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsNDEgQEAKKzIwMjEtMDQtMjMgIEtpbW1vIEtpbm51bmVuICA8a2tp
bm51bmVuQGFwcGxlLmNvbT4KKworICAgICAgICBBc3NlcnRpbmcgdGhhdCBmdW5jdGlvbiBvciB2
YXJpYWJsZSBpcyBhY2Nlc3NlZCBpbiBhIGNlcnRhaW4gdGhyZWFkIHNob3VsZCBiZSBzaW1wbGVy
IGFuZCBtb3JlIHJvYnVzdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjI0OTcxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgQWRkcyBzdXBwb3J0IGZvciBtb3JlIGZpbmUtZ3JhaW5lZCB0aHJlYWQgYXNzZXJ0
aW9uIHRoYW4KKyAgICAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKSAvIEFTU0VSVCghaXNNYWlu
VGhyZWFkKCkpCisKKyAgICAgICAgKiBXVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAg
ICAgICAgKiB3dGYvQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogd3RmL0NvbXBpbGVyLmg6Cisg
ICAgICAgIEFkZCBOT19VTklRVUVfQUREUkVTUyB3aGljaCBjYW4gYmUgdXNlZCB0byBkZWNsYXJl
IG1lbWJlcnMgdGhhdCBhcmUgZW1wdHkgaW4KKyAgICAgICAgUkVMRUFTRSBidWlsZHMuIFRoZSBk
ZWNsYXJhdGlvbiBhdm9pZHMgaW5jcmVhc2luZyB0aGUgc2l6ZSBvZiB0aGUgZW5jbG9zaW5nIHR5
cGUuCisgICAgICAgIFRoaXMgc2hvdWxkIGJlIHVzZWQgd2l0aCBUaHJlYWRBc3NlcnRpb246Cisg
ICAgICAgIGNsYXNzIE15VGhyZWFkQXdhcmUgeworICAgICAgICAgICAgLi4uLgorICAgICAgICAg
ICAgTk9fVU5JUVVFX0FERFJFU1MgVGhyZWFkQXNzZXJ0aW9uIG1fb3duZXJUaHJlYWQ7CisgICAg
ICAgIH07CisKKyAgICAgICAgKiB3dGYvVGhyZWFkQXNzZXJ0aW9ucy5oOiBBZGRlZC4KKyAgICAg
ICAgQWRkIFRocmVhZEFzc2VydGlvbiBjbGFzcyB0aGF0IGNhbiBiZSBoZWxkIGFzIGEgbWVtYmVy
IG9mIGEgdHlwZS4KKyAgICAgICAgVGhpcyBhbGxvd3MgY29uc2lzdGVudCBhc3NlcnRpb25zIHRo
YXQgdGhlIGNvZGUgaW4gdGhlIHR5cGUKKyAgICAgICAgcnVucyBpbiB0aGUgZXhwZWN0ZWQgdGhy
ZWFkLgorCisgICAgICAgIEFkZCBOYW1lZEFzc2VydGlvbiYgV1RGOjptYWluVGhyZWFkLgorICAg
ICAgICBBZGQgTmFtZWRBc3NlcnRpb24mIFdURjo6bWFpblJ1bkxvb3AuCisgICAgICAgIFRoZXNl
IGFyZSBvbmx5IHRvIGJlIHVzZWQgaW4gdGhyZWFkIHNhZmV0eSBhbmFseXNpcyBwaGFzZS4gVGhl
c2UgYXJlIHVuZGVmaW5lZAorICAgICAgICBzeW1ib2xzLCBpdCBpcyBhbiBlcnJvciB0byByZWZl
cmVuY2UgdGhlbS4KKworICAgICAgICBBZGRzIGZ1bmN0aW9ucyBhc3NlcnRJc01haW5UaHJlYWQo
KSBhbmQgYXNzZXJ0SXNNYWluUnVuTG9vcCgpIHRvIHJlcGxhY2UKKyAgICAgICAgcGF0dGVybnMg
b2YgIEFTU0VSVChpc01haW5UaHJlYWQoKSksIEFTU0VSVChpc01haW5SdW5Mb29wKCkuCisgICAg
ICAgIEluIGFkZGl0aW9uIHRvIGJlaGF2aW5nIGFzIHRoZSBkaXJlY3QgQVNTRVJUIGJlaGF2ZXMs
IHRoZSBmdW5jdGlvbnMKKyAgICAgICAgZW5hYmxlIGNvbXBpbGUtdGltZSB0aHJlYWQgc2FmZXR5
IGFuYWx5c2lzIHRvIGtub3cgdGhhdCB0aGUgY2FsbGluZworICAgICAgICBzY29wZSBoYXMgdGhl
IGFzc2VydGlvbnMuIFRoZXNlIGNhbiBiZSBvcHRpb25hbGx5IHRoZW4gdXNlZCBpbiB0aGUKKyAg
ICAgICAgZnVuY3Rpb24gYW5kIG1lbWJlciBzaWduYXR1cmVzIHRvIHJlcXVpcmUgdGhlIGFzc2Vy
dGlvbnMuCisKIDIwMjEtMDQtMjIgIEtpbW1vIEtpbm51bmVuICA8a2tpbm51bmVuQGFwcGxlLmNv
bT4KIAogICAgICAgICBBZGQgYSBDb25kaXRpb24gdHlwZSB0aGF0IHN1cHBvcnRzIHRocmVhZCBz
YWZldHkgYW5hbHlzaXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2ogYi9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmlu
ZGV4IDNiMDMzN2YyNGUxMTM0YzVmMmUxZTAxZjNjNDM0OTBkN2RjNzBlZGUuLjY4MWU5MGY1ZjBl
Njc4YjVkNDRkMmFiYmFhMjJmZmY2NTA1MzIyNDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvV1RG
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dURi9XVEYueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagpAQCAtNDU3LDYgKzQ1Nyw3IEBACiAJCTdCMjczOURDMjYyNERBQUEw
MDQwRjE4MiAvKiBUaHJlYWRTYWZldHlBbmFseXNpcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUaHJlYWRT
YWZldHlBbmFseXNpcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QjI3MzlERDI2
MjREQUMzMDA0MEYxODIgLyogQ2hlY2tlZExvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2hlY2tlZExv
Y2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0IyNzM5RjAyNjMxNzlDMzAwNDBG
MTgyIC8qIENoZWNrZWRDb25kaXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2hlY2tlZENvbmRpdGlv
bi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3QjI3MzlGMTI2MzJBODk0MDA0MEYx
ODIgLyogVGhyZWFkQXNzZXJ0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUaHJlYWRBc3NlcnRpb25z
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDMTM3OTQxMjIyMzI2QzcwMEQ3QTgy
NCAvKiBBVVRIT1JTICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gdGV4dDsgcGF0aCA9IEFVVEhPUlM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTdDMTM3OTQyMjIyMzI2RDUwMEQ3QTgyNCAvKiBpZWVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGllZWUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0MxMzc5NDMyMjIzMjZENTAwRDdBODI0
IC8qIFJFQURNRS5tZCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IG5ldC5kYXJpbmdmaXJlYmFsbC5tYXJrZG93bjsgcGF0aCA9IFJFQURNRS5tZDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEyODMsNiArMTI4NCw3IEBACiAJCQkJRTNFMTU4
MjUxRUFEQTUzQzAwNEEwNzlEIC8qIFN5c3RlbUZyZWUuaCAqLywKIAkJCQkwRkIzMTdDMzFDNDg4
MDAxMDA3RTM5NUEgLyogU3lzdGVtVHJhY2luZy5oICovLAogCQkJCURFRjdGRTVGMjI1ODFBQzgw
MEMxNTEyOSAvKiBUYWdnZWRBcnJheVN0b3JhZ2VQdHIuaCAqLywKKwkJCQk3QjI3MzlGMTI2MzJB
ODk0MDA0MEYxODIgLyogVGhyZWFkQXNzZXJ0aW9ucy5oICovLAogCQkJCUUzMTFGQjE1MUYwQTU2
OEIwMDNDMDhERSAvKiBUaHJlYWRHcm91cC5jcHAgKi8sCiAJCQkJRTMxMUZCMTYxRjBBNTY4QjAw
M0MwOERFIC8qIFRocmVhZEdyb3VwLmggKi8sCiAJCQkJQThBNDczMzIxNTFBODI1QjAwNDEyM0ZG
IC8qIFRocmVhZGluZy5jcHAgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9DTWFrZUxp
c3RzLnR4dCBiL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CmluZGV4IDA2NmRmYjBlZDhh
M2Q0ZDA3OWZhODliODhkN2Y3YjcxYzAwNGUzZTMuLjhjOGU1YzQ4OWViZDQ3NDEwZjk5ZjJlOTAw
Njg1OTQ4OWFiYTAzNDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0
CisrKyBiL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CkBAIC0yNjUsNiArMjY1LDcgQEAg
c2V0KFdURl9QVUJMSUNfSEVBREVSUwogICAgIFN5c3RlbUZyZWUuaAogICAgIFN5c3RlbVRyYWNp
bmcuaAogICAgIFRhZ2dlZEFycmF5U3RvcmFnZVB0ci5oCisgICAgVGhyZWFkQXNzZXJ0aW9ucy5o
CiAgICAgVGhyZWFkR3JvdXAuaAogICAgIFRocmVhZE1lc3NhZ2UuaAogICAgIFRocmVhZFNhZmV0
eUFuYWx5c2lzLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0NvbXBpbGVyLmggYi9Tb3Vy
Y2UvV1RGL3d0Zi9Db21waWxlci5oCmluZGV4IGI4MTFmOWFkZWJmYTkwODFkNTg4ZDVjYjgxYWI1
ZDQxNzFkM2E4Y2MuLmJlNDVkYmU5YjJlMmQ5ZTAzNDA4NmE1MGUzYjFkOTViM2M1OWRjZDIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0NvbXBpbGVyLmgKKysrIGIvU291cmNlL1dURi93dGYv
Q29tcGlsZXIuaApAQCAtNTA2LDMgKzUwNiwxNSBAQAogLyogaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIyNDQ1MiAqLwogI2RlZmluZSBJR05PUkVfRVJST05FT1VTX0dD
Q19OVUxMX0NIRUNLX1dBUk5JTkdTX0JFR0lOIElHTk9SRV9HQ0NfV0FSTklOR1NfQkVHSU4oIm5v
bm51bGwiKQogI2RlZmluZSBJR05PUkVfRVJST05FT1VTX0dDQ19OVUxMX0NIRUNLX1dBUk5JTkdT
X0VORCBJR05PUkVfR0NDX1dBUk5JTkdTX0VORAorCisvKiBOT19VTklRVUVfQUREUkVTUyAqLwor
CisjaWYgIWRlZmluZWQoTk9fVU5JUVVFX0FERFJFU1MpICYmIGRlZmluZWQoX19oYXNfY3BwX2F0
dHJpYnV0ZSkKKyNpZiBfX2hhc19jcHBfYXR0cmlidXRlKG5vX3VuaXF1ZV9hZGRyZXNzKQorI2Rl
ZmluZSBOT19VTklRVUVfQUREUkVTUyBbW25vX3VuaXF1ZV9hZGRyZXNzXV0gLy8gTk9MSU5UOiBj
aGVjay13ZWJraXQtc3R5bGUgZG9lcyBub3QgdW5kZXJzdGFuZCBhbm5vdGF0aW9ucy4KKyNlbmRp
ZgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChOT19VTklRVUVfQUREUkVTUykKKyNkZWZpbmUgTk9f
VU5JUVVFX0FERFJFU1MKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVGhyZWFk
QXNzZXJ0aW9ucy5oIGIvU291cmNlL1dURi93dGYvVGhyZWFkQXNzZXJ0aW9ucy5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmJjMjA4OGRjNGI3MmY1MGE0YWEwNDJhOTkwNGIzNDI0YTA1ODViOWUKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRBc3NlcnRpb25zLmgKQEAgLTAsMCArMSwxMDQg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2luY2x1ZGUgPHd0Zi9Db21waWxlci5oPgorI2luY2x1ZGUgPHd0Zi9NYWluVGhy
ZWFkLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmV0eUFuYWx5c2lzLmg+CisjaW5jbHVkZSA8
d3RmL1RocmVhZGluZy5oPgorCituYW1lc3BhY2UgV1RGIHsKKworLy8gQSB0eXBlIHRvIHVzZSBm
b3IgYXNzZXJ0aW5nIHRoYXQgcHJpdmF0ZSBtZW1iZXIgZnVuY3Rpb25zIG9yIHByaXZhdGUgbWVt
YmVyIHZhcmlhYmxlcworLy8gb2YgYSBjbGFzcyBhcmUgYWNjZXNzZWQgZnJvbSBjb3JyZWN0IHRo
cmVhZHMuCisvLyBTdXBwb3J0cyBydW4tdGltZSBjaGVja2luZyB3aXRoIGFzc2VydGlvbiBlbmFi
bGVkIGJ1aWxkcy4KKy8vIFN1cHBvcnRzIGNvbXBpbGUtdGltZSBkZWNsYXJhdGlvbiBhbmQgY2hl
Y2tpbmcuCisvLyBFeGFtcGxlOgorLy8gc3RydWN0IE15Q2xhc3MgeworLy8gICAgIHZvaWQgZG9U
YXNrKCkgeyBhc3NlcnRJc0N1cnJlbnQobV9vd25lclRocmVhZCk7IGRvVGFza0ltcGwoKTsgfQor
Ly8gICAgIHRlbXBsYXRlPHR5cGVuYW1lPiB2b2lkIGRvVGFza0NvbXBpbGVGYWlsdXJlKCkgeyBk
b1Rhc2tJbXBsKCk7IH0KKy8vIHByaXZhdGU6CisvLyAgICAgdm9pZCBkb1Rhc2tJbXBsKCkgV1RG
X1JFUVVJUkVTX0xPQ0sobV9vd25lclRocmVhZCk7CisvLyAgICAgaW50IG1fdmFsdWUgV1RGX0dV
QVJERURfQllfTE9DSyhtX293bmVyVGhyZWFkKSB7IDAgfTsKKy8vICAgICBOT19VTklRVUVfQURE
UkVTUyBUaHJlYWRBc3NlcnRpb24gbV9vd25lclRocmVhZDsKKy8vIH07CitjbGFzcyBXVEZfQ0FQ
QUJJTElUWV9MT0NLIFRocmVhZEFzc2VydGlvbiB7CitwdWJsaWM6CisgICAgVGhyZWFkQXNzZXJ0
aW9uKCkgPSBkZWZhdWx0OworICAgIGVudW0gVW5pbml0aWFsaXplZFRhZyB7IFVuaW5pdGlhbGl6
ZWQgfTsKKyAgICBjb25zdGV4cHIgVGhyZWFkQXNzZXJ0aW9uKFVuaW5pdGlhbGl6ZWRUYWcpCisj
aWYgQVNTRVJUX0VOQUJMRUQKKyAgICAgICAgOiBtX3VpZCgwKSAvLyBUaHJlYWQ6OnVpZCgpIGRv
ZXMgbm90IHJldHVybiB0aGlzLgorI2VuZGlmCisgICAgeworICAgIH0KKyAgICB+VGhyZWFkQXNz
ZXJ0aW9uKCkgeyBhc3NlcnRJc0N1cnJlbnQoKnRoaXMpOyB9CisgICAgdm9pZCByZXNldCgpIHsg
KnRoaXMgPSBUaHJlYWRBc3NlcnRpb24geyB9OyB9Citwcml2YXRlOgorI2lmIEFTU0VSVF9FTkFC
TEVECisgICAgdWludDMyX3QgbV91aWQgeyBUaHJlYWQ6OmN1cnJlbnQoKS51aWQoKSB9OworI2Vu
ZGlmCisgICAgZnJpZW5kIHZvaWQgYXNzZXJ0SXNDdXJyZW50KGNvbnN0IFRocmVhZEFzc2VydGlv
biYpOworfTsKKwordm9pZCBhc3NlcnRJc0N1cnJlbnQoY29uc3QgVGhyZWFkQXNzZXJ0aW9uJiB0
aHJlYWRBc3NlcnRpb24pIFdURl9BU1NFUlRTX0FDUVVJUkVEX0xPQ0sodGhyZWFkQXNzZXJ0aW9u
KQoreworICAgIEFTU0VSVChUaHJlYWQ6OmN1cnJlbnQoKS51aWQoKSA9PSB0aHJlYWRBc3NlcnRp
b24ubV91aWQpOworfQorCisvLyBUeXBlIGZvciBnbG9iYWxseSBuYW1lZCBhc3NlcnRpb25zIGZv
ciBkZXNjcmliaW5nIGFjY2VzcyByZXF1aXJlbWVudHMuCisvLyBDYW4gYmUgdXNlZCwgZm9yIGV4
YW1wbGUsIHRvIHJlcXVpcmUgdGhhdCBhIHZhcmlhYmxlIGlzIGFjY2Vzc2VkIG9ubHkgaW4KKy8v
IGEga25vd24gbmFtZWQgdGhyZWFkLgorLy8gRXhhbXBsZToKKy8vIGV4dGVybiBOYW1lZEFzc2Vy
dGlvbiYgbWFpblRocmVhZDsKKy8vIGlubGluZSB2b2lkIGFzc2VydElzTWFpblRocmVhZCgpIFdU
Rl9BU1NFUlRTX0FDUVVJUkVEX0xPQ0sobWFpblRocmVhZCk7CisvLyB2b2lkIG15VGFzaygpIFdU
Rl9SRVFVSVJFU19MT0NLKG1haW5UaHJlYWQpIHsgcHJpbnRmKCJteSB0YXNrIGlzIHJ1bm5pbmci
KTsgfQorLy8gdm9pZCBydW5uZXIoKSB7CisvLyAgICAgYXNzZXJ0SXNNYWluVGhyZWFkKCk7Cisv
LyAgICAgbXlUYXNrKCk7CisvLyB9CisvLyB0ZW1wbGF0ZTx0eXBlbmFtZT4gcnVubmVyQ29tcGls
ZUZhaWx1cmUoKSB7CisvLyAgICAgbXlUYXNrKCk7CisvLyB9CitjbGFzcyBXVEZfQ0FQQUJJTElU
WV9MT0NLIE5hbWVkQXNzZXJ0aW9uIHsgfTsKKworLy8gVG8gYmUgdXNlZCB3aXRoIFdURl9SRVFV
SVJFU19MT0NLKG1haW5UaHJlYWQpLiBTeW1ib2wgaXMgdW5kZWZpbmVkLgorZXh0ZXJuIE5hbWVk
QXNzZXJ0aW9uJiBtYWluVGhyZWFkOworaW5saW5lIHZvaWQgYXNzZXJ0SXNNYWluVGhyZWFkKCkg
V1RGX0FTU0VSVFNfQUNRVUlSRURfTE9DSyhtYWluVGhyZWFkKSB7IEFTU0VSVChpc01haW5UaHJl
YWQoKSk7IH0KKworLy8gVG8gYmUgdXNlZCB3aXRoIFdURl9SRVFVSVJFU19MT0NLKG1haW5SdW5M
b29wKS4gU3ltYm9sIGlzIHVuZGVmaW5lZC4KK2V4dGVybiBOYW1lZEFzc2VydGlvbiYgbWFpblJ1
bkxvb3A7CitpbmxpbmUgdm9pZCBhc3NlcnRJc01haW5SdW5Mb29wKCkgV1RGX0FTU0VSVFNfQUNR
VUlSRURfTE9DSyhtYWluUnVuTG9vcCkgeyBBU1NFUlQoaXNNYWluUnVuTG9vcCgpKTsgfQorCit9
CisKK3VzaW5nIFdURjo6VGhyZWFkQXNzZXJ0aW9uOwordXNpbmcgV1RGOjphc3NlcnRJc0N1cnJl
bnQ7Cit1c2luZyBXVEY6Ok5hbWVkQXNzZXJ0aW9uOwordXNpbmcgV1RGOjphc3NlcnRJc01haW5U
aHJlYWQ7Cit1c2luZyBXVEY6OmFzc2VydElzTWFpblJ1bkxvb3A7Cit1c2luZyBXVEY6Om1haW5U
aHJlYWQ7Cit1c2luZyBXVEY6Om1haW5SdW5Mb29wOwpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdl
TG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDQyN2Q0ODhiMjU0MzVlY2U0ZDBkZDI0MzczMGI0
OTBiZTc3ZWVmMmQuLmIzNzRmOWJkOTM0OTFlNzZhYTU1NmU3Yzg2MWYzMjZkOWIwZWI1YjEgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxOCBAQAorMjAyMS0wNC0yMyAgS2ltbW8gS2lubnVuZW4gIDxra2lubnVuZW5AYXBwbGUuY29t
PgorCisgICAgICAgIEFzc2VydGluZyB0aGF0IGZ1bmN0aW9uIG9yIHZhcmlhYmxlIGlzIGFjY2Vz
c2VkIGluIGEgY2VydGFpbiB0aHJlYWQgc2hvdWxkIGJlIHNpbXBsZXIgYW5kIG1vcmUgcm9idXN0
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjQ5NzEK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgc2lt
cGxlIHRlc3RzIHRvIG1ha2Ugc3VyZSBjb2RlIGluIFRocmVhZEFzc2VydGlvbnMuaAorICAgICAg
ICBjb21waWxlcy4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RG
L1RocmVhZEFzc2VydGlvbnNUZXN0LmNwcDogQWRkZWQuCisgICAgICAgIChUZXN0V2ViS2l0QVBJ
OjpURVNUKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OldURl9SRVFVSVJFU19MT0NLKToKKwog
MjAyMS0wNC0yMiAgS2ltbW8gS2lubnVuZW4gIDxra2lubnVuZW5AYXBwbGUuY29tPgogCiAgICAg
ICAgIEFkZCBhIENvbmRpdGlvbiB0eXBlIHRoYXQgc3VwcG9ydHMgdGhyZWFkIHNhZmV0eSBhbmFs
eXNpcwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2ogYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEku
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBjOGFjZDVlNDlmMjRhN2U5OGRiZGI4MDk3
NGY4YmE2YzAyMTc2MDI1Li5jMDc4NGRmM2YwMjIyYTU0MGE1NDQ5N2VkM2Y5YmNlZGVhOGU3MDVh
IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEku
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNTgyLDYgKzU4Miw3IEBACiAJCTdBRUFENDgx
MUUyMDEyMjcwMDQxNkVGRSAvKiBDcm9zc1BhcnRpdGlvbkZpbGVTY2hlbWVBY2Nlc3MuaHRtbCBp
biBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QUVB
RDQ3RDFFMjAxMTRFMDA0MTZFRkUgLyogQ3Jvc3NQYXJ0aXRpb25GaWxlU2NoZW1lQWNjZXNzLmh0
bWwgKi87IH07CiAJCTdCMjczOUUwMjYyNTcxQ0MwMDQwRjE4MiAvKiBDaGVja2VkTG9ja1Rlc3Qu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0IyNzM5
REYyNjI1NzFDQzAwNDBGMTgyIC8qIENoZWNrZWRMb2NrVGVzdC5jcHAgKi87IH07CiAJCTdCMjcz
OUVGMjYzMTVFN0UwMDQwRjE4MiAvKiBDaGVja2VkQ29uZGl0aW9uVGVzdC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QjI3MzlFRTI2MzE1RTdEMDA0
MEYxODIgLyogQ2hlY2tlZENvbmRpdGlvblRlc3QuY3BwICovOyB9OworCQk3QjI3MzlGMzI2MzJB
QjY0MDA0MEYxODIgLyogVGhyZWFkQXNzZXJ0aW9uc1Rlc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0IyNzM5RjIyNjMyQUI2NDAwNDBGMTgyIC8q
IFRocmVhZEFzc2VydGlvbnNUZXN0LmNwcCAqLzsgfTsKIAkJN0I3RDA5NkEyNTE5RjhGOTAwMTdB
MDc4IC8qIFdlYkdMTm9DcmFzaE9uT3RoZXJUaHJlYWRBY2Nlc3MubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QjdEMDk2OTI1MTlGOEY5MDAxN0EwNzgg
LyogV2ViR0xOb0NyYXNoT25PdGhlclRocmVhZEFjY2Vzcy5tbSAqLzsgfTsKIAkJN0MxQUY3OTUx
RThEQ0JBQjAwMjY0NUI5IC8qIFByZXBhcmVGb3JNb3ZlVG9XaW5kb3cubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzFBRjc5MzFFOERDQkFCMDAyNjQ1
QjkgLyogUHJlcGFyZUZvck1vdmVUb1dpbmRvdy5tbSAqLzsgfTsKIAkJN0MzOTY1MDYxQ0RENzRG
OTAwOTREQkI4IC8qIENvbG9yVGVzdHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gN0MzOTY1MDUxQ0RENzRGOTAwOTREQkI4IC8qIENvbG9yVGVzdHMu
Y3BwICovOyB9OwpAQCAtMjQyOCw2ICsyNDI5LDcgQEAKIAkJN0FFQUQ0N0QxRTIwMTE0RTAwNDE2
RUZFIC8qIENyb3NzUGFydGl0aW9uRmlsZVNjaGVtZUFjY2Vzcy5odG1sICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4
dC5odG1sOyBuYW1lID0gQ3Jvc3NQYXJ0aXRpb25GaWxlU2NoZW1lQWNjZXNzLmh0bWw7IHBhdGgg
PSBUZXN0cy9tYWMvQ3Jvc3NQYXJ0aXRpb25GaWxlU2NoZW1lQWNjZXNzLmh0bWw7IHNvdXJjZVRy
ZWUgPSBTT1VSQ0VfUk9PVDsgfTsKIAkJN0IyNzM5REYyNjI1NzFDQzAwNDBGMTgyIC8qIENoZWNr
ZWRMb2NrVGVzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDaGVj
a2VkTG9ja1Rlc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QjI3MzlFRTI2
MzE1RTdEMDA0MEYxODIgLyogQ2hlY2tlZENvbmRpdGlvblRlc3QuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2hlY2tlZENvbmRpdGlvblRlc3QuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3QjI3MzlGMjI2MzJBQjY0MDA0MEYxODIgLyogVGhyZWFk
QXNzZXJ0aW9uc1Rlc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
VGhyZWFkQXNzZXJ0aW9uc1Rlc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
QjdEMDk2OTI1MTlGOEY5MDAxN0EwNzggLyogV2ViR0xOb0NyYXNoT25PdGhlclRocmVhZEFjY2Vz
cy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkdMTm9DcmFzaE9uT3RoZXJUaHJlYWRBY2Nl
c3MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDMUFGNzkzMUU4RENCQUIwMDI2
NDVCOSAvKiBQcmVwYXJlRm9yTW92ZVRvV2luZG93Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBwYXRoID0gUHJlcGFyZUZvck1vdmVUb1dpbmRvdy5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJN0MzOTY1MDUxQ0RENzRGOTAwOTREQkI4IC8qIENvbG9yVGVzdHMu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29sb3JUZXN0cy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00NDQ1LDYgKzQ0NDcsNyBAQAogCQkJCTdD
NzRENDJEMTg4MjI4RjMwMEU1RUQ1NyAvKiBTdHJpbmdWaWV3LmNwcCAqLywKIAkJCQk1NTk3Rjgz
NDFEOTU5NkM4MDA2NkJDMjEgLyogU3luY2hyb25pemVkRml4ZWRRdWV1ZS5jcHAgKi8sCiAJCQkJ
OTMyOUFBMjgxREUzRjgxRTAwM0FCRDA3IC8qIFRleHRCcmVha0l0ZXJhdG9yLmNwcCAqLywKKwkJ
CQk3QjI3MzlGMjI2MzJBQjY0MDA0MEYxODIgLyogVGhyZWFkQXNzZXJ0aW9uc1Rlc3QuY3BwICov
LAogCQkJCUUzREVBODEwMUYwQTU4ODAwMENCQzJFOCAvKiBUaHJlYWRHcm91cC5jcHAgKi8sCiAJ
CQkJRTM4QTBEMzQxRkQ1MENCQzAwRTk4QzhCIC8qIFRocmVhZGluZy5jcHAgKi8sCiAJCQkJNTMx
MUJENUQxRUE5NDkwRDAwNTI1MjgxIC8qIFRocmVhZE1lc3NhZ2VzLmNwcCAqLywKQEAgLTUxMjYs
NiArNTEyOSw3IEBACiAJCQkJMDREQjIzOTYyMzVFNDNFQzAwMzI4RjE3IC8qIEJ1bXBQb2ludGVy
QWxsb2NhdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDODNERUEwMUQwQTU5MEMwMEZFQkNG
MyAvKiBDaGVja2VkQXJpdGhtZXRpY09wZXJhdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
N0IyNzM5RUYyNjMxNUU3RTAwNDBGMTgyIC8qIENoZWNrZWRDb25kaXRpb25UZXN0LmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTdCMjczOUYzMjYzMkFCNjQwMDQwRjE4MiAvKiBUaHJlYWRBc3NlcnRp
b25zVGVzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QjI3MzlFMDI2MjU3MUNDMDA0MEYxODIg
LyogQ2hlY2tlZExvY2tUZXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUzMDJCREFBMjQwNEI5
MjQwMDg2NTI3NyAvKiBDb21wYWN0UmVmUHRyVHVwbGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
OUIwQzA1MTkyNEZERkI3RDAwRjJGRTMxIC8qIENvbXBhY3RVbmlxdWVQdHJUdXBsZS5jcHAgaW4g
U291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1Ro
cmVhZEFzc2VydGlvbnNUZXN0LmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1Ro
cmVhZEFzc2VydGlvbnNUZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wNzQ5ZDZmNjJkNjQ5NGM2ZTI4MDY1
NTY4NTkwODI4MTdiOGE3YzAwCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XVEYvVGhyZWFkQXNzZXJ0aW9uc1Rlc3QuY3BwCkBAIC0wLDAgKzEsOTUgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJVdGlsaXRpZXMuaCIK
KyNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRBc3NlcnRpb25z
Lmg+IC8vIE5PTElOVDogY2hlY2std2Via2l0LXN0eWxlIGhhcyBwcm9ibGVtcyB3aXRoIGZpbGVz
IHRoYXQgZG8gbm90IGhhdmUgcHJpbWFyeSBoZWFkZXIuCisKK25hbWVzcGFjZSBUZXN0V2ViS2l0
QVBJIHsKK25hbWVzcGFjZSB7CitjbGFzcyBNeUNsYXNzIHsKK3B1YmxpYzoKKyAgICBpbnQgZG9U
YXNrKGludCBuKQorICAgIHsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fb3duZXJUaHJlYWQp
OworICAgICAgICByZXR1cm4gZG9UYXNrSW1wbChuKTsKKyAgICB9CisgICAgdm9pZCBhY2Nlc3NW
YXJpYWJsZShpbnQgbikKKyAgICB7CisgICAgICAgIGFzc2VydElzQ3VycmVudChtX293bmVyVGhy
ZWFkKTsKKyAgICAgICAgbV92YWx1ZSA9IG47CisgICAgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+IGludCBkb1Rhc2tDb21waWxlRmFpbHVyZShUIG4pIHsgcmV0dXJuIGRvVGFza0ltcGwobik7
IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIGFjY2Vzc1ZhcmlhYmxlQ29tcGlsZUZh
aWx1cmUoVCBuKSB7IG1fdmFsdWUgPSBuOyB9Citwcml2YXRlOgorICAgIGludCBkb1Rhc2tJbXBs
KGludCBuKSBXVEZfUkVRVUlSRVNfTE9DSyhtX293bmVyVGhyZWFkKSB7IHJldHVybiBuICsgMTsg
fQorICAgIGludCBtX3ZhbHVlIFdURl9HVUFSREVEX0JZX0xPQ0sobV9vd25lclRocmVhZCkgeyAw
IH07CisgICAgTk9fVU5JUVVFX0FERFJFU1MgVGhyZWFkQXNzZXJ0aW9uIG1fb3duZXJUaHJlYWQ7
Cit9OworfQorCitURVNUKFdURl9UaHJlYWRBc3NlcnRpb25zLCBUZXN0VGhyZWFkQXNzZXJ0aW9u
KQoreworICAgIFdURjo6aW5pdGlhbGl6ZU1haW5UaHJlYWQoKTsKKworICAgIE15Q2xhc3MgaW5z
dGFuY2U7CisgICAgRVhQRUNUX0VRKDksIGluc3RhbmNlLmRvVGFzayg4KSk7CisgICAgaW5zdGFu
Y2UuYWNjZXNzVmFyaWFibGUoNyk7CisgICAgLy8gVXNlIGZvbGxvd2luZyB0byBtYW51YWxseSBl
bnN1cmUgY29tcGlsZSB3aWxsIGZhaWw6CisgICAgLy8gaW5zdGFuY2UuZG9UYXNrQ29tcGlsZUZh
aWx1cmUoOSk7CisgICAgLy8gaW5zdGFuY2UuYWNjZXNzVmFyaWFibGVDb21waWxlRmFpbHVyZSgx
MCk7Cit9CisKK3N0YXRpYyBpbnQgdGVzdE1haW5UaHJlYWRGdW5jdGlvbigpIFdURl9SRVFVSVJF
U19MT0NLKG1haW5UaHJlYWQpIHsgcmV0dXJuIDExOyB9CisKK1RFU1QoV1RGX1RocmVhZEFzc2Vy
dGlvbnMsIFRlc3RNYWluVGhyZWFkTmFtZWRBc3NlcnRpb24pCit7CisgICAgV1RGOjppbml0aWFs
aXplTWFpblRocmVhZCgpOworICAgIC8vIFVzZSBmb2xsb3dpbmcgdG8gbWFudWFsbHkgZW5zdXJl
IGNvbXBpbGUgd2lsbCBmYWlsOgorICAgIC8vIHRlc3RNYWluVGhyZWFkRnVuY3Rpb24oKTsKKyAg
ICBhc3NlcnRJc01haW5UaHJlYWQoKTsKKyAgICBFWFBFQ1RfRVEoMTEsIHRlc3RNYWluVGhyZWFk
RnVuY3Rpb24oKSk7Cit9CisKK3N0YXRpYyBpbnQgdGVzdE1haW5SdW5Mb29wRnVuY3Rpb24oKSBX
VEZfUkVRVUlSRVNfTE9DSyhtYWluUnVuTG9vcCkgeyByZXR1cm4gMTI7IH0KKworVEVTVChXVEZf
VGhyZWFkQXNzZXJ0aW9ucywgVGVzdE1haW5SdW5Mb29wTmFtZWRBc3NlcnRpb24pCit7CisgICAg
V1RGOjppbml0aWFsaXplTWFpblRocmVhZCgpOworCisgICAgYm9vbCBkb25lID0gZmFsc2U7Cisg
ICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFsmZG9uZV0geworICAgICAgICAvLyBVc2UgZm9s
bG93aW5nIHRvIG1hbnVhbGx5IGVuc3VyZSBjb21waWxlIHdpbGwgZmFpbDoKKyAgICAgICAgLy8g
dGVzdE1haW5SdW5Mb29wRnVuY3Rpb24oKTsKKyAgICAgICAgYXNzZXJ0SXNNYWluUnVuTG9vcCgp
OworICAgICAgICBFWFBFQ1RfRVEoMTIsIHRlc3RNYWluUnVuTG9vcEZ1bmN0aW9uKCkpOworICAg
ICAgICBkb25lID0gdHJ1ZTsKKyAgICB9KTsKKyAgICBVdGlsOjpydW4oJmRvbmUpOworfQorCit9
IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>426897</attachid>
            <date>2021-04-23 02:49:50 -0700</date>
            <delta_ts>2021-04-27 06:07:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-224971-20210423124948.patch</filename>
            <type>text/plain</type>
            <size>14602</size>
            <attacher name="Kimmo Kinnunen">kkinnunen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc2NDIyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDEyNzUxNDJlNGU1NzU0ZmQ4MDZkYjk5
ODVjZmViYzY0MTFmOTA0ZTUuLmRlMTk3NmRjNWI4NDExM2MzMDQ1MGE0YmY0OTkwMDA2OGUyNzMz
M2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMjEtMDQtMjIgIEtpbW1vIEtpbm51bmVuICA8a2tp
bm51bmVuQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgYSBDb25kaXRpb24gdHlwZSB0aGF0IHN1
cHBvcnRzIHRocmVhZCBzYWZldHkgYW5hbHlzaXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNDk3MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEFkZCBDaGVja2VkQ29uZGl0aW9uLCBhIGNvbmRpdGlvbiB2
YXJpYWJsZSB0byBiZSB1c2VkIHdpdGggQ2hlY2tlZExvY2suCisgICAgICAgIFVzZSB0aHJlYWQg
c2FmZXR5IGFuYWx5c2lzIGFubm90YXRpb25zIGZvciBDaGVja2VkQ29uZGl0aW9uLgorCisgICAg
ICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogd3RmL0NNYWtl
TGlzdHMudHh0OgorICAgICAgICAqIHd0Zi9DaGVja2VkQ29uZGl0aW9uLmg6IEFkZGVkLgorICAg
ICAgICAqIHd0Zi9DaGVja2VkTG9jay5oOgorCiAyMDIxLTA0LTIxICBBZGl0eWEgS2VlcnRoaSAg
PGFrZWVydGhpQGFwcGxlLmNvbT4KIAogICAgICAgICBbaU9TXSBGaXggaW50ZXJuYWwgYnVpbGRz
IGFmdGVyIHIyNzYzMjUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2ogYi9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmlu
ZGV4IDIzY2E1NTZlYzEyYjU3YzIxYWI1ZjNlMjBlMmU4Njg4MWJmOGEwMDEuLjNiMDMzN2YyNGUx
MTM0YzVmMmUxZTAxZjNjNDM0OTBkN2RjNzBlZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvV1RG
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dURi9XVEYueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagpAQCAtNDU2LDYgKzQ1Niw3IEBACiAJCTdBRkVDNkIwMUVCMjJCNTkw
MERBREUzNiAvKiBVVUlELmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFVVSUQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QjI3MzlEQzI2MjREQUFB
MDA0MEYxODIgLyogVGhyZWFkU2FmZXR5QW5hbHlzaXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGhyZWFk
U2FmZXR5QW5hbHlzaXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0IyNzM5REQy
NjI0REFDMzAwNDBGMTgyIC8qIENoZWNrZWRMb2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENoZWNrZWRM
b2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdCMjczOUYwMjYzMTc5QzMwMDQw
RjE4MiAvKiBDaGVja2VkQ29uZGl0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENoZWNrZWRDb25kaXRp
b24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0MxMzc5NDEyMjIzMjZDNzAwRDdB
ODI0IC8qIEFVVEhPUlMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0OyBwYXRoID0gQVVUSE9SUzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJN0MxMzc5NDIyMjIzMjZENTAwRDdBODI0IC8qIGllZWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gaWVl
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzEzNzk0MzIyMjMyNkQ1MDBEN0E4
MjQgLyogUkVBRE1FLm1kICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gbmV0LmRhcmluZ2ZpcmViYWxsLm1hcmtkb3duOyBwYXRoID0gUkVBRE1FLm1kOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTgxLDYgKzk4Miw3IEBACiAJCQkJNDEzRkU4
RjUxRjhEMkVBQjAwRjZEN0Q3IC8qIENhbGxiYWNrQWdncmVnYXRvci5oICovLAogCQkJCUE4QTQ3
MjZBMTUxQTgyNUEwMDQxMjNGRiAvKiBDaGVja2VkQXJpdGhtZXRpYy5oICovLAogCQkJCUE4QTQ3
MjZCMTUxQTgyNUEwMDQxMjNGRiAvKiBDaGVja2VkQm9vbGVhbi5oICovLAorCQkJCTdCMjczOUYw
MjYzMTc5QzMwMDQwRjE4MiAvKiBDaGVja2VkQ29uZGl0aW9uLmggKi8sCiAJCQkJN0IyNzM5REQy
NjI0REFDMzAwNDBGMTgyIC8qIENoZWNrZWRMb2NrLmggKi8sCiAJCQkJMEY2NkIyODAxREM5N0JB
QjAwNEExRDNGIC8qIENsb2NrVHlwZS5jcHAgKi8sCiAJCQkJMEY2NkIyODExREM5N0JBQjAwNEEx
RDNGIC8qIENsb2NrVHlwZS5oICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvQ01ha2VM
aXN0cy50eHQgYi9Tb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAppbmRleCAzODExYTU5YjA4
MjZhMjQ0ZmQ4OGIxOWQwYjM0OTMyOTJmZmEzMDc3Li4wNjZkZmIwZWQ4YTNkNGQwNzlmYTg5Yjg4
ZDdmN2I3MWMwMDRlM2UzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4
dAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dApAQCAtMjgsNiArMjgsNyBAQCBz
ZXQoV1RGX1BVQkxJQ19IRUFERVJTCiAgICAgQ2FsbGJhY2tBZ2dyZWdhdG9yLmgKICAgICBDaGVj
a2VkQXJpdGhtZXRpYy5oCiAgICAgQ2hlY2tlZEJvb2xlYW4uaAorICAgIENoZWNrZWRDb25kaXRp
b24uaAogICAgIENoZWNrZWRMb2NrLmgKICAgICBDbG9ja1R5cGUuaAogICAgIENvbW1hUHJpbnRl
ci5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9DaGVja2VkQ29uZGl0aW9uLmggYi9Tb3Vy
Y2UvV1RGL3d0Zi9DaGVja2VkQ29uZGl0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWE0YjU2ODBjNjU3MGU2
MDU0NGVlMzljNTBmNTYxNDQ4MjFiNjE1YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYv
d3RmL0NoZWNrZWRDb25kaXRpb24uaApAQCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8
d3RmL0NoZWNrZWRMb2NrLmg+CisjaW5jbHVkZSA8d3RmL0NvbmRpdGlvbi5oPgorCituYW1lc3Bh
Y2UgV1RGIHsKKworLy8gQSBjb25kaXRpb24gdmFyaWFibGUgdHlwZSBmb3IgQ2hlY2tlZExvY2su
CitjbGFzcyBDaGVja2VkQ29uZGl0aW9uIGZpbmFsIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShDaGVja2VkQ29uZGl0aW9uKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1Ymxp
YzoKKyAgICBjb25zdGV4cHIgQ2hlY2tlZENvbmRpdGlvbigpID0gZGVmYXVsdDsKKworICAgIGJv
b2wgd2FpdFVudGlsKENoZWNrZWRMb2NrJiBsb2NrLCBjb25zdCBUaW1lV2l0aER5bmFtaWNDbG9j
a1R5cGUmIHRpbWVvdXQpIFdURl9SRVFVSVJFU19MT0NLKGxvY2spCisgICAgeworICAgICAgICBy
ZXR1cm4gbV9jb25kaXRpb24ud2FpdFVudGlsKHVuY2hlY2tlZENhc3QobG9jayksIHRpbWVvdXQp
OworICAgIH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIGJvb2wgd2FpdFVu
dGlsKENoZWNrZWRMb2NrJiBsb2NrLCBjb25zdCBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUmIHRp
bWVvdXQsIGNvbnN0IEZ1bmN0b3ImIHByZWRpY2F0ZSkgV1RGX1JFUVVJUkVTX0xPQ0sobG9jaykK
KyAgICB7CisgICAgICAgIHJldHVybiBtX2NvbmRpdGlvbi53YWl0VW50aWwodW5jaGVja2VkQ2Fz
dChsb2NrKSwgdGltZW91dCwgcHJlZGljYXRlKTsKKyAgICB9CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgRnVuY3Rvcj4KKyAgICBib29sIHdhaXRGb3IoQ2hlY2tlZExvY2smIGxvY2ssIFNlY29uZHMg
cmVsYXRpdmVUaW1lb3V0LCBjb25zdCBGdW5jdG9yJiBwcmVkaWNhdGUpIFdURl9SRVFVSVJFU19M
T0NLKGxvY2spCisgICAgeworICAgICAgICByZXR1cm4gbV9jb25kaXRpb24ud2FpdEZvcih1bmNo
ZWNrZWRDYXN0KGxvY2spLCByZWxhdGl2ZVRpbWVvdXQsIHByZWRpY2F0ZSk7CisgICAgfQorICAg
IGJvb2wgd2FpdEZvcihDaGVja2VkTG9jayYgbG9jaywgU2Vjb25kcyByZWxhdGl2ZVRpbWVvdXQp
IFdURl9SRVFVSVJFU19MT0NLKGxvY2spCisgICAgeworICAgICAgICByZXR1cm4gbV9jb25kaXRp
b24ud2FpdEZvcih1bmNoZWNrZWRDYXN0KGxvY2spLCByZWxhdGl2ZVRpbWVvdXQpOworICAgIH0K
KyAgICB2b2lkIHdhaXQoQ2hlY2tlZExvY2smIGxvY2spIFdURl9SRVFVSVJFU19MT0NLKGxvY2sp
CisgICAgeworICAgICAgICByZXR1cm4gbV9jb25kaXRpb24ud2FpdCh1bmNoZWNrZWRDYXN0KGxv
Y2spKTsKKyAgICB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIHdh
aXQoQ2hlY2tlZExvY2smIGxvY2ssIGNvbnN0IEZ1bmN0b3ImIHByZWRpY2F0ZSkgV1RGX1JFUVVJ
UkVTX0xPQ0sobG9jaykKKyAgICB7CisgICAgICAgIG1fY29uZGl0aW9uLndhaXQodW5jaGVja2Vk
Q2FzdChsb2NrKSwgcHJlZGljYXRlKTsKKyAgICB9CisgICAgYm9vbCBub3RpZnlPbmUoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1fY29uZGl0aW9uLm5vdGlmeU9uZSgpOworICAgIH0KKyAgICB2
b2lkIG5vdGlmeUFsbCgpCisgICAgeworICAgICAgICBtX2NvbmRpdGlvbi5ub3RpZnlBbGwoKTsK
KyAgICB9Citwcml2YXRlOgorICAgIHN0YXRpYyBMb2NrJiB1bmNoZWNrZWRDYXN0KENoZWNrZWRM
b2NrJiBsb2NrKSB7IHJldHVybiBzdGF0aWNfY2FzdDxMb2NrJj4obG9jayk7IH0KKyAgICBDb25k
aXRpb24gbV9jb25kaXRpb247Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RG
OjpDaGVja2VkQ29uZGl0aW9uOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvQ2hlY2tlZExv
Y2suaCBiL1NvdXJjZS9XVEYvd3RmL0NoZWNrZWRMb2NrLmgKaW5kZXggYzE5YzE3ZTk0NzUwNzQ3
NjRkMjIxYTBlYWRmZjNiNmVlNDI0NDNiZC4uZTk3YjRhOTY5YzE3OGUxMjM1NmFmOWQxYjIyODg1
M2FhOWQ5NmJiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvQ2hlY2tlZExvY2suaAorKysg
Yi9Tb3VyY2UvV1RGL3d0Zi9DaGVja2VkTG9jay5oCkBAIC02Nyw2ICs2Nyw3IEBAIHB1YmxpYzoK
ICAgICB2b2lkIHNhZmVwb2ludCgpIHsgTG9jazo6c2FmZXBvaW50KCk7IH0KICAgICBib29sIGlz
SGVsZCgpIGNvbnN0IHsgcmV0dXJuIExvY2s6OmlzSGVsZCgpOyB9CiAgICAgYm9vbCBpc0xvY2tl
ZCgpIGNvbnN0IHsgcmV0dXJuIExvY2s6OmlzTG9ja2VkKCk7IH0KKyAgICBmcmllbmQgY2xhc3Mg
Q2hlY2tlZENvbmRpdGlvbjsKIH07CiAKIHVzaW5nIEFkb3B0TG9ja1RhZyA9IHN0ZDo6YWRvcHRf
bG9ja190OwpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmlu
ZGV4IGRlMzJkYTM2OWEyNmNiYWViNTgxMTQ0MDg4NGE2NWI3ZGVjM2YwOWIuLjQyN2Q0ODhiMjU0
MzVlY2U0ZDBkZDI0MzczMGI0OTBiZTc3ZWVmMmQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxv
ZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAyMS0wNC0yMiAgS2lt
bW8gS2lubnVuZW4gIDxra2lubnVuZW5AYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBhIENvbmRp
dGlvbiB0eXBlIHRoYXQgc3VwcG9ydHMgdGhyZWFkIHNhZmV0eSBhbmFseXNpcworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI0OTcwCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQSBzaW1wbGUgdGVzdCBmb3Ig
Q2hlY2tlZENvbmRpdGlvbiB0byBtYWtlIHN1cmUKKyAgICAgICAgaXQgY29tcGlsZXMuCisKKyAg
ICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9DaGVja2VkQ29uZGl0aW9u
VGVzdC5jcHA6IENvcGllZCBmcm9tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0NoZWNr
ZWRMb2NrVGVzdC5jcHAuCisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAgICAgICAg
KiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9DaGVja2VkTG9ja1Rlc3QuY3BwOgorCiAyMDIxLTA0
LTIxICBDb21taXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Via2l0Lm9yZz4KIAogICAgICAgICBV
bnJldmlld2VkLCByZXZlcnRpbmcgcjI3NjM4MCBhbmQgcjI3NjM4Ni4KZGlmZiAtLWdpdCBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKaW5kZXggYjRmYjFhZjdhNTU1OWJhZjMxYWZmNjg5MTYyZjRmMDQyMDI4NTgyMy4uYzhh
Y2Q1ZTQ5ZjI0YTdlOThkYmRiODA5NzRmOGJhNmMwMjE3NjAyNSAxMDA2NDQKLS0tIGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysr
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKQEAgLTU4MSw2ICs1ODEsNyBAQAogCQk3QUVBRDQ3RjFFMjAxMTZDMDA0MTZFRkUgLyog
Q3Jvc3NQYXJ0aXRpb25GaWxlU2NoZW1lQWNjZXNzLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0FFQUQ0N0MxRTIwMTEzODAwNDE2RUZFIC8qIENyb3Nz
UGFydGl0aW9uRmlsZVNjaGVtZUFjY2Vzcy5tbSAqLzsgfTsKIAkJN0FFQUQ0ODExRTIwMTIyNzAw
NDE2RUZFIC8qIENyb3NzUGFydGl0aW9uRmlsZVNjaGVtZUFjY2Vzcy5odG1sIGluIENvcHkgUmVz
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBRUFENDdEMUUyMDEx
NEUwMDQxNkVGRSAvKiBDcm9zc1BhcnRpdGlvbkZpbGVTY2hlbWVBY2Nlc3MuaHRtbCAqLzsgfTsK
IAkJN0IyNzM5RTAyNjI1NzFDQzAwNDBGMTgyIC8qIENoZWNrZWRMb2NrVGVzdC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QjI3MzlERjI2MjU3MUND
MDA0MEYxODIgLyogQ2hlY2tlZExvY2tUZXN0LmNwcCAqLzsgfTsKKwkJN0IyNzM5RUYyNjMxNUU3
RTAwNDBGMTgyIC8qIENoZWNrZWRDb25kaXRpb25UZXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCMjczOUVFMjYzMTVFN0QwMDQwRjE4MiAvKiBD
aGVja2VkQ29uZGl0aW9uVGVzdC5jcHAgKi87IH07CiAJCTdCN0QwOTZBMjUxOUY4RjkwMDE3QTA3
OCAvKiBXZWJHTE5vQ3Jhc2hPbk90aGVyVGhyZWFkQWNjZXNzLm1tIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0I3RDA5NjkyNTE5RjhGOTAwMTdBMDc4IC8q
IFdlYkdMTm9DcmFzaE9uT3RoZXJUaHJlYWRBY2Nlc3MubW0gKi87IH07CiAJCTdDMUFGNzk1MUU4
RENCQUIwMDI2NDVCOSAvKiBQcmVwYXJlRm9yTW92ZVRvV2luZG93Lm1tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0MxQUY3OTMxRThEQ0JBQjAwMjY0NUI5
IC8qIFByZXBhcmVGb3JNb3ZlVG9XaW5kb3cubW0gKi87IH07CiAJCTdDMzk2NTA2MUNERDc0Rjkw
MDk0REJCOCAvKiBDb2xvclRlc3RzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDdDMzk2NTA1MUNERDc0RjkwMDk0REJCOCAvKiBDb2xvclRlc3RzLmNw
cCAqLzsgfTsKQEAgLTI0MjYsNiArMjQyNyw3IEBACiAJCTdBRUFENDdDMUUyMDExMzgwMDQxNkVG
RSAvKiBDcm9zc1BhcnRpdGlvbkZpbGVTY2hlbWVBY2Nlc3MubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5vYmpjcHA7IHBhdGggPSBDcm9zc1BhcnRpdGlvbkZpbGVTY2hlbWVBY2Nlc3MubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdBRUFENDdEMUUyMDExNEUwMDQxNkVGRSAv
KiBDcm9zc1BhcnRpdGlvbkZpbGVTY2hlbWVBY2Nlc3MuaHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuaHRt
bDsgbmFtZSA9IENyb3NzUGFydGl0aW9uRmlsZVNjaGVtZUFjY2Vzcy5odG1sOyBwYXRoID0gVGVz
dHMvbWFjL0Nyb3NzUGFydGl0aW9uRmlsZVNjaGVtZUFjY2Vzcy5odG1sOyBzb3VyY2VUcmVlID0g
U09VUkNFX1JPT1Q7IH07CiAJCTdCMjczOURGMjYyNTcxQ0MwMDQwRjE4MiAvKiBDaGVja2VkTG9j
a1Rlc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2hlY2tlZExv
Y2tUZXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0IyNzM5RUUyNjMxNUU3
RDAwNDBGMTgyIC8qIENoZWNrZWRDb25kaXRpb25UZXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IENoZWNrZWRDb25kaXRpb25UZXN0LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJN0I3RDA5NjkyNTE5RjhGOTAwMTdBMDc4IC8qIFdlYkdMTm9DcmFz
aE9uT3RoZXJUaHJlYWRBY2Nlc3MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJHTE5vQ3Jh
c2hPbk90aGVyVGhyZWFkQWNjZXNzLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
QzFBRjc5MzFFOERDQkFCMDAyNjQ1QjkgLyogUHJlcGFyZUZvck1vdmVUb1dpbmRvdy5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFByZXBhcmVGb3JNb3ZlVG9XaW5k
b3cubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDMzk2NTA1MUNERDc0RjkwMDk0
REJCOCAvKiBDb2xvclRlc3RzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IENvbG9yVGVzdHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDM2Niw2
ICs0MzY4LDcgQEAKIAkJCQk5M0E0MjdBRTE4MERBNjBGMDBDRDI0RDcgLyogQm94UHRyLmNwcCAq
LywKIAkJCQkwNDUxQTVBNjIzNUU0MzhFMDA5REY5NDUgLyogQnVtcFBvaW50ZXJBbGxvY2F0b3Iu
Y3BwICovLAogCQkJCUE3QTk2NkRBMTQwRUNDQzgwMDVFRjlCNCAvKiBDaGVja2VkQXJpdGhtZXRp
Y09wZXJhdGlvbnMuY3BwICovLAorCQkJCTdCMjczOUVFMjYzMTVFN0QwMDQwRjE4MiAvKiBDaGVj
a2VkQ29uZGl0aW9uVGVzdC5jcHAgKi8sCiAJCQkJN0IyNzM5REYyNjI1NzFDQzAwNDBGMTgyIC8q
IENoZWNrZWRMb2NrVGVzdC5jcHAgKi8sCiAJCQkJRTMwMkJEQTkyNDA0QjkyMzAwODY1Mjc3IC8q
IENvbXBhY3RSZWZQdHJUdXBsZS5jcHAgKi8sCiAJCQkJOUIwQzA1MTgyNEZERkI3MDAwRjJGRTMx
IC8qIENvbXBhY3RVbmlxdWVQdHJUdXBsZS5jcHAgKi8sCkBAIC01MTIyLDYgKzUxMjUsNyBAQAog
CQkJCTdDODNERjE4MUQwQTU5MEMwMEZFQkNGMyAvKiBCb3hQdHIuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMDREQjIzOTYyMzVFNDNFQzAwMzI4RjE3IC8qIEJ1bXBQb2ludGVyQWxsb2NhdG9yLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTdDODNERUEwMUQwQTU5MEMwMEZFQkNGMyAvKiBDaGVja2Vk
QXJpdGhtZXRpY09wZXJhdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJN0IyNzM5RUYyNjMx
NUU3RTAwNDBGMTgyIC8qIENoZWNrZWRDb25kaXRpb25UZXN0LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTdCMjczOUUwMjYyNTcxQ0MwMDQwRjE4MiAvKiBDaGVja2VkTG9ja1Rlc3QuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJRTMwMkJEQUEyNDA0QjkyNDAwODY1Mjc3IC8qIENvbXBhY3RSZWZQdHJU
dXBsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5QjBDMDUxOTI0RkRGQjdEMDBGMkZFMzEgLyog
Q29tcGFjdFVuaXF1ZVB0clR1cGxlLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQ2hlY2tlZENvbmRpdGlvblRlc3QuY3BwIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQ2hlY2tlZENvbmRpdGlvblRlc3QuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjkyOGFhMTkwM2NkZTM2ZWEzMmRjMTAxZjI2YmYzY2M5OTI2OWI4OTMKLS0tIC9kZXYv
bnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9DaGVja2VkQ29uZGl0aW9u
VGVzdC5jcHAKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlIDx3dGYvQ2hlY2tlZENvbmRpdGlvbi5oPgorCituYW1lc3BhY2UgVGVzdFdl
YktpdEFQSSB7CisKK1RFU1QoV1RGX0NoZWNrZWRMb2NrLCBDaGVja2VkQ29uZGl0aW9uQ29tcGls
ZXMpCit7CisgICAgQ2hlY2tlZExvY2sgbG9jazsKKyAgICBDaGVja2VkQ29uZGl0aW9uIGNvbmRp
dGlvbjsKKyAgICBMb2NrZXIgbG9ja2VyIHsgbG9jayB9OyAvLyBDb21tZW50IHRoaXMgdG8gZW5z
dXJlIHRoYXQgdGhyZWFkIHNhZmV0eSBhbmFseXNpcyBjcmVhdGVzIGEgY29tcGlsZSBlcnJvci4K
KyAgICBib29sIHJlc3VsdCA9IGNvbmRpdGlvbi53YWl0Rm9yKGxvY2ssIDBfcyk7CisgICAgRVhQ
RUNUX0ZBTFNFKHJlc3VsdCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0NoZWNrZWRMb2NrVGVzdC5j
cHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9DaGVja2VkTG9ja1Rlc3QuY3BwCmlu
ZGV4IGFmZjk4MTllOTI1MDNhNWM2Njg4ZGMxMzYxNWUzNmJjYTk1NDRkNWEuLmQ4MmVlMWEyZTVi
ZGUwZGNhYmYzNWNlOWRjNzMxMTIxMTAyMjYyNGEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV1RGL0NoZWNrZWRMb2NrVGVzdC5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XVEYvQ2hlY2tlZExvY2tUZXN0LmNwcApAQCAtMjYsOCArMjYsNiBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgPHd0Zi9DaGVja2VkTG9jay5oPgogCi0jaW5jbHVk
ZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgotCiBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CiAKIG5h
bWVzcGFjZSB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>427140</attachid>
            <date>2021-04-27 06:07:28 -0700</date>
            <delta_ts>2021-04-28 06:30:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-224971-20210427160726.patch</filename>
            <type>text/plain</type>
            <size>97994</size>
            <attacher name="Kimmo Kinnunen">kkinnunen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc2NDIyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGE2ZGY5MmRmODM5ZmVmNTk4NDMzNTgx
YTI0YjE4NjUxZDE4MGY0ZjMuLjdkODNlYzdiOWEzNmEwMmJhZTU4YTQ4MWFkNmNlOGM2NDhmNzIy
OGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsNDEgQEAKKzIwMjEtMDQtMjMgIEtpbW1vIEtpbm51bmVuICA8a2tp
bm51bmVuQGFwcGxlLmNvbT4KKworICAgICAgICBBc3NlcnRpbmcgdGhhdCBmdW5jdGlvbiBvciB2
YXJpYWJsZSBpcyBhY2Nlc3NlZCBpbiBhIGNlcnRhaW4gdGhyZWFkIHNob3VsZCBiZSBzaW1wbGVy
IGFuZCBtb3JlIHJvYnVzdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjI0OTcxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCisKKyAg
ICAgICAgQWRkcyBzdXBwb3J0IGZvciBtb3JlIGZpbmUtZ3JhaW5lZCB0aHJlYWQgYXNzZXJ0aW9u
IHRoYW4KKyAgICAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKSAvIEFTU0VSVCghaXNNYWluVGhy
ZWFkKCkpCisKKyAgICAgICAgKiBXVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAg
ICAgKiB3dGYvQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogd3RmL0NvbXBpbGVyLmg6CisgICAg
ICAgIEFkZCBOT19VTklRVUVfQUREUkVTUyB3aGljaCBjYW4gYmUgdXNlZCB0byBkZWNsYXJlIG1l
bWJlcnMgdGhhdCBhcmUgZW1wdHkgaW4KKyAgICAgICAgUkVMRUFTRSBidWlsZHMuIFRoZSBkZWNs
YXJhdGlvbiBhdm9pZHMgaW5jcmVhc2luZyB0aGUgc2l6ZSBvZiB0aGUgZW5jbG9zaW5nIHR5cGUu
CisgICAgICAgIFRoaXMgc2hvdWxkIGJlIHVzZWQgd2l0aCBUaHJlYWRBc3NlcnRpb246CisgICAg
ICAgIGNsYXNzIE15VGhyZWFkQXdhcmUgeworICAgICAgICAgICAgLi4uLgorICAgICAgICAgICAg
Tk9fVU5JUVVFX0FERFJFU1MgVGhyZWFkQXNzZXJ0aW9uIG1fb3duZXJUaHJlYWQ7CisgICAgICAg
IH07CisKKyAgICAgICAgKiB3dGYvVGhyZWFkQXNzZXJ0aW9ucy5oOiBBZGRlZC4KKyAgICAgICAg
QWRkIFRocmVhZEFzc2VydGlvbiBjbGFzcyB0aGF0IGNhbiBiZSBoZWxkIGFzIGEgbWVtYmVyIG9m
IGEgdHlwZS4KKyAgICAgICAgVGhpcyBhbGxvd3MgY29uc2lzdGVudCBhc3NlcnRpb25zIHRoYXQg
dGhlIGNvZGUgaW4gdGhlIHR5cGUKKyAgICAgICAgcnVucyBpbiB0aGUgZXhwZWN0ZWQgdGhyZWFk
LgorCisgICAgICAgIEFkZCBOYW1lZEFzc2VydGlvbiYgV1RGOjptYWluVGhyZWFkLgorICAgICAg
ICBBZGQgTmFtZWRBc3NlcnRpb24mIFdURjo6bWFpblJ1bkxvb3AuCisgICAgICAgIFRoZXNlIGFy
ZSBvbmx5IHRvIGJlIHVzZWQgaW4gdGhyZWFkIHNhZmV0eSBhbmFseXNpcyBwaGFzZS4gVGhlc2Ug
YXJlIHVuZGVmaW5lZAorICAgICAgICBzeW1ib2xzLCBpdCBpcyBhbiBlcnJvciB0byByZWZlcmVu
Y2UgdGhlbS4KKworICAgICAgICBBZGRzIGZ1bmN0aW9ucyBhc3NlcnRJc01haW5UaHJlYWQoKSBh
bmQgYXNzZXJ0SXNNYWluUnVuTG9vcCgpIHRvIHJlcGxhY2UKKyAgICAgICAgcGF0dGVybnMgb2Yg
IEFTU0VSVChpc01haW5UaHJlYWQoKSksIEFTU0VSVChpc01haW5SdW5Mb29wKCkuCisgICAgICAg
IEluIGFkZGl0aW9uIHRvIGJlaGF2aW5nIGFzIHRoZSBkaXJlY3QgQVNTRVJUIGJlaGF2ZXMsIHRo
ZSBmdW5jdGlvbnMKKyAgICAgICAgZW5hYmxlIGNvbXBpbGUtdGltZSB0aHJlYWQgc2FmZXR5IGFu
YWx5c2lzIHRvIGtub3cgdGhhdCB0aGUgY2FsbGluZworICAgICAgICBzY29wZSBoYXMgdGhlIGFz
c2VydGlvbnMuIFRoZXNlIGNhbiBiZSBvcHRpb25hbGx5IHRoZW4gdXNlZCBpbiB0aGUKKyAgICAg
ICAgZnVuY3Rpb24gYW5kIG1lbWJlciBzaWduYXR1cmVzIHRvIHJlcXVpcmUgdGhlIGFzc2VydGlv
bnMuCisKIDIwMjEtMDQtMjIgIEtpbW1vIEtpbm51bmVuICA8a2tpbm51bmVuQGFwcGxlLmNvbT4K
IAogICAgICAgICBBZGQgYSBDb25kaXRpb24gdHlwZSB0aGF0IHN1cHBvcnRzIHRocmVhZCBzYWZl
dHkgYW5hbHlzaXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggOGIzMjQ1ZmQ0MDA3MDk2MzM0ZDNmMjA2NGFlNWNhMjgx
MDhkNDE3NS4uNzdmOGVjMjliNjMwNGVkZjAyNTgxNDc1MTY0M2ViMTIwYzdmM2U2MSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cKQEAgLTEsMyArMSw0MSBAQAorMjAyMS0wNC0yNyAgS2ltbW8gS2lubnVuZW4gIDxra2lubnVu
ZW5AYXBwbGUuY29tPgorCisgICAgICAgIEFzc2VydGluZyB0aGF0IGZ1bmN0aW9uIG9yIHZhcmlh
YmxlIGlzIGFjY2Vzc2VkIGluIGEgY2VydGFpbiB0aHJlYWQgc2hvdWxkIGJlIHNpbXBsZXIgYW5k
IG1vcmUgcm9idXN0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMjQ5NzEKKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAg
ICBVc2UgVGhyZWFkQXNzZXJ0aW9ucyBpbiBSZW1vdGVHcmFwaGljc0NvbnRleHRHTCBpbXBsZW1l
bnRhdGlvbnMKKyAgICAgICAgYXMgYW4gZXhhbXBsZS4KKworICAgICAgICAqIEdQVVByb2Nlc3Mv
Z3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wuY3BwOgorICAgICAgICAoV2ViS2l0OjpS
ZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0wpOgorICAgICAg
ICAoV2ViS2l0OjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6flJlbW90ZUdyYXBoaWNzQ29udGV4
dEdMKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OmluaXRpYWxp
emUpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6c3RvcExpc3Rl
bmluZ0ZvcklQQyk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpk
aXNwbGF5V2FzUmVjb25maWd1cmVkKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlR3JhcGhpY3ND
b250ZXh0R0w6OndvcmtRdWV1ZUluaXRpYWxpemUpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVH
cmFwaGljc0NvbnRleHRHTDo6d29ya1F1ZXVlVW5pbml0aWFsaXplKToKKyAgICAgICAgKFdlYktp
dDo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OmRpZENvbXBvc2l0ZSk6CisgICAgICAgIChXZWJL
aXQ6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpmb3JjZUNvbnRleHRMb3N0KToKKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OmRpc3BhdGNoQ29udGV4dENoYW5nZWRO
b3RpZmljYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6
cmVzaGFwZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpwcmVw
YXJlRm9yRGlzcGxheSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdM
OjpzeW50aGVzaXplR0xFcnJvcik6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUdyYXBoaWNzQ29u
dGV4dEdMOjpnZXRFcnJvcik6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUdyYXBoaWNzQ29udGV4
dEdMOjplbnN1cmVFeHRlbnNpb25FbmFibGVkKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlR3Jh
cGhpY3NDb250ZXh0R0w6Om5vdGlmeU1hcmtDb250ZXh0Q2hhbmdlZCk6CisgICAgICAgIChXZWJL
aXQ6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZh
cyk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpwYWludENvbXBv
c2l0ZWRSZXN1bHRzVG9DYW52YXMpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVHcmFwaGljc0Nv
bnRleHRHTDo6cGFpbnRJbWFnZURhdGFUb0ltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6
UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OmNvcHlUZXh0dXJlRnJvbU1lZGlhKToKKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OnNpbXVsYXRlRXZlbnRGb3JUZXN0aW5n
KToKKyAgICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdM
Lmg6CisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRH
TENvY29hLmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0xDb2Nv
YTo6cGxhdGZvcm1Xb3JrUXVldWVJbml0aWFsaXplKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3Rl
R3JhcGhpY3NDb250ZXh0R0xDb2NvYTo6cHJlcGFyZUZvckRpc3BsYXkpOgorICAgICAgICAqIEdQ
VVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xGdW5jdGlvbnNHZW5lcmF0
ZWQuaDoKKwogMjAyMS0wNC0yNyAgS2ltbW8gS2lubnVuZW4gIDxra2lubnVuZW5AYXBwbGUuY29t
PgogCiAgICAgICAgIEFkZCBhIENvbmRpdGlvbiB0eXBlIHRoYXQgc3VwcG9ydHMgdGhyZWFkIHNh
ZmV0eSBhbmFseXNpcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvaiBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5k
ZXggM2IwMzM3ZjI0ZTExMzRjNWYyZTFlMDFmM2M0MzQ5MGQ3ZGM3MGVkZS4uNjgxZTkwZjVmMGU2
NzhiNWQ0NGQyYWJiYWEyMmZmZjY1MDUzMjI0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9XVEYu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCkBAIC00NTcsNiArNDU3LDcgQEAKIAkJN0IyNzM5REMyNjI0REFBQTAw
NDBGMTgyIC8qIFRocmVhZFNhZmV0eUFuYWx5c2lzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRocmVhZFNh
ZmV0eUFuYWx5c2lzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdCMjczOUREMjYy
NERBQzMwMDQwRjE4MiAvKiBDaGVja2VkTG9jay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDaGVja2VkTG9j
ay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QjI3MzlGMDI2MzE3OUMzMDA0MEYx
ODIgLyogQ2hlY2tlZENvbmRpdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDaGVja2VkQ29uZGl0aW9u
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdCMjczOUYxMjYzMkE4OTQwMDQwRjE4
MiAvKiBUaHJlYWRBc3NlcnRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRocmVhZEFzc2VydGlvbnMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0MxMzc5NDEyMjIzMjZDNzAwRDdBODI0
IC8qIEFVVEhPUlMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSB0ZXh0OyBwYXRoID0gQVVUSE9SUzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
N0MxMzc5NDIyMjIzMjZENTAwRDdBODI0IC8qIGllZWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gaWVlZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzEzNzk0MzIyMjMyNkQ1MDBEN0E4MjQg
LyogUkVBRE1FLm1kICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gbmV0LmRhcmluZ2ZpcmViYWxsLm1hcmtkb3duOyBwYXRoID0gUkVBRE1FLm1kOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTI4Myw2ICsxMjg0LDcgQEAKIAkJCQlFM0UxNTgy
NTFFQURBNTNDMDA0QTA3OUQgLyogU3lzdGVtRnJlZS5oICovLAogCQkJCTBGQjMxN0MzMUM0ODgw
MDEwMDdFMzk1QSAvKiBTeXN0ZW1UcmFjaW5nLmggKi8sCiAJCQkJREVGN0ZFNUYyMjU4MUFDODAw
QzE1MTI5IC8qIFRhZ2dlZEFycmF5U3RvcmFnZVB0ci5oICovLAorCQkJCTdCMjczOUYxMjYzMkE4
OTQwMDQwRjE4MiAvKiBUaHJlYWRBc3NlcnRpb25zLmggKi8sCiAJCQkJRTMxMUZCMTUxRjBBNTY4
QjAwM0MwOERFIC8qIFRocmVhZEdyb3VwLmNwcCAqLywKIAkJCQlFMzExRkIxNjFGMEE1NjhCMDAz
QzA4REUgLyogVGhyZWFkR3JvdXAuaCAqLywKIAkJCQlBOEE0NzMzMjE1MUE4MjVCMDA0MTIzRkYg
LyogVGhyZWFkaW5nLmNwcCAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlz
dHMudHh0IGIvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKaW5kZXggMDY2ZGZiMGVkOGEz
ZDRkMDc5ZmE4OWI4OGQ3ZjdiNzFjMDA0ZTNlMy4uOGM4ZTVjNDg5ZWJkNDc0MTBmOTlmMmU5MDA2
ODU5NDg5YWJhMDM0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQK
KysrIGIvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKQEAgLTI2NSw2ICsyNjUsNyBAQCBz
ZXQoV1RGX1BVQkxJQ19IRUFERVJTCiAgICAgU3lzdGVtRnJlZS5oCiAgICAgU3lzdGVtVHJhY2lu
Zy5oCiAgICAgVGFnZ2VkQXJyYXlTdG9yYWdlUHRyLmgKKyAgICBUaHJlYWRBc3NlcnRpb25zLmgK
ICAgICBUaHJlYWRHcm91cC5oCiAgICAgVGhyZWFkTWVzc2FnZS5oCiAgICAgVGhyZWFkU2FmZXR5
QW5hbHlzaXMuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvQ2hlY2tlZENvbmRpdGlvbi5o
IGIvU291cmNlL1dURi93dGYvQ2hlY2tlZENvbmRpdGlvbi5oCmluZGV4IDc1OTBjZmJmZGRjMjVj
YjA0MWM4MDE3MTRkYzk2M2UxYTU2M2I5YzIuLjExOTEwZTAzOTkxM2I0YjYwYTQ0OTQ3ZWJjOTFk
MDFhYmM3OGIyNzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0NoZWNrZWRDb25kaXRpb24u
aAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9DaGVja2VkQ29uZGl0aW9uLmgKQEAgLTMxLDYgKzMxLDcg
QEAKIG5hbWVzcGFjZSBXVEYgewogCiAvLyBBIGNvbmRpdGlvbiB2YXJpYWJsZSB0eXBlIGZvciBD
aGVja2VkTG9jay4KKy8vIEZvciBwcmVkaWNhdGVzIHRoYXQgYWNjZXNzIHRoZSBndWFyZGVkIHZh
cmlhYmxlcywgdXNlIGFzc2VydElzSGVsZChsb2NrKS4KIGNsYXNzIENoZWNrZWRDb25kaXRpb24g
ZmluYWwgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENoZWNrZWRDb25kaXRpb24pOwogICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwpAQCAtNTcsNyArNTgsNyBAQCBwdWJsaWM6CiAgICAg
fQogICAgIHZvaWQgd2FpdChDaGVja2VkTG9jayYgbG9jaykgV1RGX1JFUVVJUkVTX0xPQ0sobG9j
aykKICAgICB7Ci0gICAgICAgIHJldHVybiBtX2NvbmRpdGlvbi53YWl0KHVuY2hlY2tlZENhc3Qo
bG9jaykpOworICAgICAgICBtX2NvbmRpdGlvbi53YWl0KHVuY2hlY2tlZENhc3QobG9jaykpOwog
ICAgIH0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgogICAgIHZvaWQgd2FpdChDaGVj
a2VkTG9jayYgbG9jaywgY29uc3QgRnVuY3RvciYgcHJlZGljYXRlKSBXVEZfUkVRVUlSRVNfTE9D
Syhsb2NrKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvQ2hlY2tlZExvY2suaCBiL1NvdXJj
ZS9XVEYvd3RmL0NoZWNrZWRMb2NrLmgKaW5kZXggZTk3YjRhOTY5YzE3OGUxMjM1NmFmOWQxYjIy
ODg1M2FhOWQ5NmJiNy4uNDRiODk5OTY5MTIzNDUyMDAxOThmZDg2NGE5OTg5NjY3NzYzOTk0MiAx
MDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvQ2hlY2tlZExvY2suaAorKysgYi9Tb3VyY2UvV1RG
L3d0Zi9DaGVja2VkTG9jay5oCkBAIC03MCw2ICs3MCwxMSBAQCBwdWJsaWM6CiAgICAgZnJpZW5k
IGNsYXNzIENoZWNrZWRDb25kaXRpb247CiB9OwogCisvLyBBc3NlcnRzIHRoYXQgdGhlIGxvY2sg
aXMgaGVsZC4KKy8vIFRoaXMgY2FuIGJlIHVzZWQgaW4gY2FzZXMgd2hlcmUgdGhlIGFubm90YXRp
b25zIGNhbm5vdCBiZSBhZGRlZCB0byB0aGUgZnVuY3Rpb24KKy8vIGRlY2xhcmF0aW9uLgoraW5s
aW5lIHZvaWQgYXNzZXJ0SXNIZWxkKGNvbnN0IENoZWNrZWRMb2NrJiBsb2NrKSBXVEZfQVNTRVJU
U19BQ1FVSVJFRF9MT0NLKGxvY2spIHsgQVNTRVJUX1VOVVNFRChsb2NrLCBsb2NrLmlzSGVsZCgp
KTsgfQorCiB1c2luZyBBZG9wdExvY2tUYWcgPSBzdGQ6OmFkb3B0X2xvY2tfdDsKIAogLy8gTG9j
a2VyIHNwZWNpYWxpemF0aW9uIHRvIHVzZSB3aXRoIENoZWNrZWRMb2NrLgpAQCAtMTAyLDUgKzEw
Nyw2IEBAIExvY2tlcihBZG9wdExvY2tUYWcsIENoZWNrZWRMb2NrJikgLT4gTG9ja2VyPENoZWNr
ZWRMb2NrPjsKIAogfSAvLyBuYW1lc3BhY2UgV1RGCiAKK3VzaW5nIFdURjo6YXNzZXJ0SXNIZWxk
OwogdXNpbmcgV1RGOjpDaGVja2VkTG9jazsKIHVzaW5nIFdURjo6QWRvcHRMb2NrVGFnOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi93dGYvQ29tcGlsZXIuaCBiL1NvdXJjZS9XVEYvd3RmL0NvbXBp
bGVyLmgKaW5kZXggNGRmODdjOGY5ZGRkYTUzNmE3MGY4MWJmZWIyNDY1OTRmOGYxZjRkYS4uZWE0
ZDYxZTE0MTY1YTZlOTQxYjNjYmQwMWExYjE1NjgwMTU4YjYzMCAxMDA2NDQKLS0tIGEvU291cmNl
L1dURi93dGYvQ29tcGlsZXIuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9Db21waWxlci5oCkBAIC01
MDYsMyArNTA2LDE1IEBACiAvKiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjI0NDUyICovCiAjZGVmaW5lIElHTk9SRV9FUlJPTkVPVVNfR0NDX05VTExfQ0hFQ0tfV0FS
TklOR1NfQkVHSU4gSUdOT1JFX0dDQ19XQVJOSU5HU19CRUdJTigibm9ubnVsbCIpCiAjZGVmaW5l
IElHTk9SRV9FUlJPTkVPVVNfR0NDX05VTExfQ0hFQ0tfV0FSTklOR1NfRU5EIElHTk9SRV9HQ0Nf
V0FSTklOR1NfRU5ECisKKy8qIE5PX1VOSVFVRV9BRERSRVNTICovCisKKyNpZiAhZGVmaW5lZChO
T19VTklRVUVfQUREUkVTUykgJiYgZGVmaW5lZChfX2hhc19jcHBfYXR0cmlidXRlKQorI2lmIF9f
aGFzX2NwcF9hdHRyaWJ1dGUobm9fdW5pcXVlX2FkZHJlc3MpCisjZGVmaW5lIE5PX1VOSVFVRV9B
RERSRVNTIFtbbm9fdW5pcXVlX2FkZHJlc3NdXSAvLyBOT0xJTlQ6IGNoZWNrLXdlYmtpdC1zdHls
ZSBkb2VzIG5vdCB1bmRlcnN0YW5kIGFubm90YXRpb25zLgorI2VuZGlmCisjZW5kaWYKKworI2lm
ICFkZWZpbmVkKE5PX1VOSVFVRV9BRERSRVNTKQorI2RlZmluZSBOT19VTklRVUVfQUREUkVTUwor
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRBc3NlcnRpb25zLmggYi9T
b3VyY2UvV1RGL3d0Zi9UaHJlYWRBc3NlcnRpb25zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWNhMTZiNGQwNTg5
YzkwMjE2ZDBlYmUwMGE5NzA4MzJkOGVhMGVkNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
VEYvd3RmL1RocmVhZEFzc2VydGlvbnMuaApAQCAtMCwwICsxLDEwNCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSA8d3RmL0NvbXBpbGVyLmg+CisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKyNpbmNsdWRl
IDx3dGYvVGhyZWFkU2FmZXR5QW5hbHlzaXMuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+
CisKK25hbWVzcGFjZSBXVEYgeworCisvLyBBIHR5cGUgdG8gdXNlIGZvciBhc3NlcnRpbmcgdGhh
dCBwcml2YXRlIG1lbWJlciBmdW5jdGlvbnMgb3IgcHJpdmF0ZSBtZW1iZXIgdmFyaWFibGVzCisv
LyBvZiBhIGNsYXNzIGFyZSBhY2Nlc3NlZCBmcm9tIGNvcnJlY3QgdGhyZWFkcy4KKy8vIFN1cHBv
cnRzIHJ1bi10aW1lIGNoZWNraW5nIHdpdGggYXNzZXJ0aW9uIGVuYWJsZWQgYnVpbGRzLgorLy8g
U3VwcG9ydHMgY29tcGlsZS10aW1lIGRlY2xhcmF0aW9uIGFuZCBjaGVja2luZy4KKy8vIEV4YW1w
bGU6CisvLyBzdHJ1Y3QgTXlDbGFzcyB7CisvLyAgICAgdm9pZCBkb1Rhc2soKSB7IGFzc2VydElz
Q3VycmVudChtX293bmVyVGhyZWFkKTsgZG9UYXNrSW1wbCgpOyB9CisvLyAgICAgdGVtcGxhdGU8
dHlwZW5hbWU+IHZvaWQgZG9UYXNrQ29tcGlsZUZhaWx1cmUoKSB7IGRvVGFza0ltcGwoKTsgfQor
Ly8gcHJpdmF0ZToKKy8vICAgICB2b2lkIGRvVGFza0ltcGwoKSBXVEZfUkVRVUlSRVNfTE9DSyht
X293bmVyVGhyZWFkKTsKKy8vICAgICBpbnQgbV92YWx1ZSBXVEZfR1VBUkRFRF9CWV9MT0NLKG1f
b3duZXJUaHJlYWQpIHsgMCB9OworLy8gICAgIE5PX1VOSVFVRV9BRERSRVNTIFRocmVhZEFzc2Vy
dGlvbiBtX293bmVyVGhyZWFkOworLy8gfTsKK2NsYXNzIFdURl9DQVBBQklMSVRZX0xPQ0sgVGhy
ZWFkQXNzZXJ0aW9uIHsKK3B1YmxpYzoKKyAgICBUaHJlYWRBc3NlcnRpb24oKSA9IGRlZmF1bHQ7
CisgICAgZW51bSBVbmluaXRpYWxpemVkVGFnIHsgVW5pbml0aWFsaXplZCB9OworICAgIGNvbnN0
ZXhwciBUaHJlYWRBc3NlcnRpb24oVW5pbml0aWFsaXplZFRhZykKKyNpZiBBU1NFUlRfRU5BQkxF
RAorICAgICAgICA6IG1fdWlkKDApIC8vIFRocmVhZDo6dWlkKCkgZG9lcyBub3QgcmV0dXJuIHRo
aXMuCisjZW5kaWYKKyAgICB7CisgICAgfQorICAgIH5UaHJlYWRBc3NlcnRpb24oKSB7IGFzc2Vy
dElzQ3VycmVudCgqdGhpcyk7IH0KKyAgICB2b2lkIHJlc2V0KCkgeyAqdGhpcyA9IFRocmVhZEFz
c2VydGlvbiB7IH07IH0KK3ByaXZhdGU6CisjaWYgQVNTRVJUX0VOQUJMRUQKKyAgICB1aW50MzJf
dCBtX3VpZCB7IFRocmVhZDo6Y3VycmVudCgpLnVpZCgpIH07CisjZW5kaWYKKyAgICBmcmllbmQg
dm9pZCBhc3NlcnRJc0N1cnJlbnQoY29uc3QgVGhyZWFkQXNzZXJ0aW9uJik7Cit9OworCitpbmxp
bmUgdm9pZCBhc3NlcnRJc0N1cnJlbnQoY29uc3QgVGhyZWFkQXNzZXJ0aW9uJiB0aHJlYWRBc3Nl
cnRpb24pIFdURl9BU1NFUlRTX0FDUVVJUkVEX0xPQ0sodGhyZWFkQXNzZXJ0aW9uKQoreworICAg
IEFTU0VSVF9VTlVTRUQodGhyZWFkQXNzZXJ0aW9uLCBUaHJlYWQ6OmN1cnJlbnQoKS51aWQoKSA9
PSB0aHJlYWRBc3NlcnRpb24ubV91aWQpOworfQorCisvLyBUeXBlIGZvciBnbG9iYWxseSBuYW1l
ZCBhc3NlcnRpb25zIGZvciBkZXNjcmliaW5nIGFjY2VzcyByZXF1aXJlbWVudHMuCisvLyBDYW4g
YmUgdXNlZCwgZm9yIGV4YW1wbGUsIHRvIHJlcXVpcmUgdGhhdCBhIHZhcmlhYmxlIGlzIGFjY2Vz
c2VkIG9ubHkgaW4KKy8vIGEga25vd24gbmFtZWQgdGhyZWFkLgorLy8gRXhhbXBsZToKKy8vIGV4
dGVybiBOYW1lZEFzc2VydGlvbiYgbWFpblRocmVhZDsKKy8vIGlubGluZSB2b2lkIGFzc2VydElz
TWFpblRocmVhZCgpIFdURl9BU1NFUlRTX0FDUVVJUkVEX0xPQ0sobWFpblRocmVhZCk7CisvLyB2
b2lkIG15VGFzaygpIFdURl9SRVFVSVJFU19MT0NLKG1haW5UaHJlYWQpIHsgcHJpbnRmKCJteSB0
YXNrIGlzIHJ1bm5pbmciKTsgfQorLy8gdm9pZCBydW5uZXIoKSB7CisvLyAgICAgYXNzZXJ0SXNN
YWluVGhyZWFkKCk7CisvLyAgICAgbXlUYXNrKCk7CisvLyB9CisvLyB0ZW1wbGF0ZTx0eXBlbmFt
ZT4gcnVubmVyQ29tcGlsZUZhaWx1cmUoKSB7CisvLyAgICAgbXlUYXNrKCk7CisvLyB9CitjbGFz
cyBXVEZfQ0FQQUJJTElUWV9MT0NLIE5hbWVkQXNzZXJ0aW9uIHsgfTsKKworLy8gVG8gYmUgdXNl
ZCB3aXRoIFdURl9SRVFVSVJFU19MT0NLKG1haW5UaHJlYWQpLiBTeW1ib2wgaXMgdW5kZWZpbmVk
LgorZXh0ZXJuIE5hbWVkQXNzZXJ0aW9uJiBtYWluVGhyZWFkOworaW5saW5lIHZvaWQgYXNzZXJ0
SXNNYWluVGhyZWFkKCkgV1RGX0FTU0VSVFNfQUNRVUlSRURfTE9DSyhtYWluVGhyZWFkKSB7IEFT
U0VSVChpc01haW5UaHJlYWQoKSk7IH0KKworLy8gVG8gYmUgdXNlZCB3aXRoIFdURl9SRVFVSVJF
U19MT0NLKG1haW5SdW5Mb29wKS4gU3ltYm9sIGlzIHVuZGVmaW5lZC4KK2V4dGVybiBOYW1lZEFz
c2VydGlvbiYgbWFpblJ1bkxvb3A7CitpbmxpbmUgdm9pZCBhc3NlcnRJc01haW5SdW5Mb29wKCkg
V1RGX0FTU0VSVFNfQUNRVUlSRURfTE9DSyhtYWluUnVuTG9vcCkgeyBBU1NFUlQoaXNNYWluUnVu
TG9vcCgpKTsgfQorCit9CisKK3VzaW5nIFdURjo6VGhyZWFkQXNzZXJ0aW9uOwordXNpbmcgV1RG
Ojphc3NlcnRJc0N1cnJlbnQ7Cit1c2luZyBXVEY6Ok5hbWVkQXNzZXJ0aW9uOwordXNpbmcgV1RG
Ojphc3NlcnRJc01haW5UaHJlYWQ7Cit1c2luZyBXVEY6OmFzc2VydElzTWFpblJ1bkxvb3A7Cit1
c2luZyBXVEY6Om1haW5UaHJlYWQ7Cit1c2luZyBXVEY6Om1haW5SdW5Mb29wOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4
dEdMLmNwcCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGlj
c0NvbnRleHRHTC5jcHAKaW5kZXggYjA3MmIyMzhhMmE2ZDQ5MTJlMjliZGUwMDk3OWIxNDQ5YWQz
Nzg5Zi4uM2ZiOWFkNzY5MTQ2ODc5OWM4MTU3MjgzZTdkMmViODQxMDA5ZTc3YyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4
dEdMLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3Jh
cGhpY3NDb250ZXh0R0wuY3BwCkBAIC02OSwxOCArNjksMjAgQEAgUmVtb3RlR3JhcGhpY3NDb250
ZXh0R0w6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMKEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3Mm
IGdwdUMKICAgICAsIG1fcmVuZGVyaW5nQmFja2VuZChtYWtlUmVmKHJlbmRlcmluZ0JhY2tlbmQp
KQogICAgICwgbV9yZW5kZXJpbmdSZXNvdXJjZXNSZXF1ZXN0KFNjb3BlZFdlYkdMUmVuZGVyaW5n
UmVzb3VyY2VzUmVxdWVzdDo6YWNxdWlyZSgpKQogewotICAgIEFTU0VSVChSdW5Mb29wOjppc01h
aW4oKSk7CisgICAgYXNzZXJ0SXNNYWluUnVuTG9vcCgpOwogfQogCiBSZW1vdGVHcmFwaGljc0Nv
bnRleHRHTDo6flJlbW90ZUdyYXBoaWNzQ29udGV4dEdMKCkKIHsKICAgICBBU1NFUlQoIW1fc3Ry
ZWFtQ29ubmVjdGlvbik7CiAgICAgQVNTRVJUKCFtX2NvbnRleHQpOworICAgIC8vIE1pZ2h0IGJl
IGRlc3Ryb3llZCBvbiBtYWluIHRocmVhZCBvciBzdHJlYW0gcHJvY2Vzc2luZyB0aHJlYWQuCisg
ICAgbV9zdHJlYW1UaHJlYWQucmVzZXQoKTsKIH0KIAogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRl
eHRHTDo6aW5pdGlhbGl6ZShHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMmJiBhdHRyaWJ1dGVz
KQogewotICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisgICAgYXNzZXJ0SXNNYWluUnVu
TG9vcCgpOwogICAgIHJlbW90ZUdyYXBoaWNzQ29udGV4dEdMU3RyZWFtV29ya1F1ZXVlKCkuZGlz
cGF0Y2goW2F0dHJpYnV0ZXMgPSBXVEZNb3ZlKGF0dHJpYnV0ZXMpLCBwcm90ZWN0ZWRUaGlzID0g
bWFrZVJlZigqdGhpcyldKCkgbXV0YWJsZSB7CiAgICAgICAgIHByb3RlY3RlZFRoaXMtPndvcmtR
dWV1ZUluaXRpYWxpemUoV1RGTW92ZShhdHRyaWJ1dGVzKSk7CiAgICAgfSk7CkBAIC04OSw3ICs5
MSw3IEBAIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OmluaXRpYWxpemUoR3JhcGhpY3ND
b250ZXh0R0xBdHRyaWJ1dGVzJiYgYXR0cmlidXRlCiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250
ZXh0R0w6OnN0b3BMaXN0ZW5pbmdGb3JJUEMoUmVmPFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMPiYm
IHJlZkZyb21Db25uZWN0aW9uKQogewotICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Cisg
ICAgYXNzZXJ0SXNNYWluUnVuTG9vcCgpOwogICAgIG1fc3RyZWFtQ29ubmVjdGlvbi0+c3RvcFJl
Y2VpdmluZ01lc3NhZ2VzKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6bWVzc2Fn
ZVJlY2VpdmVyTmFtZSgpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllci50b1VJbnQ2NCgp
KTsKICAgICByZW1vdGVHcmFwaGljc0NvbnRleHRHTFN0cmVhbVdvcmtRdWV1ZSgpLmRpc3BhdGNo
KFtwcm90ZWN0ZWRUaGlzID0gV1RGTW92ZShyZWZGcm9tQ29ubmVjdGlvbildKCkgewogICAgICAg
ICBwcm90ZWN0ZWRUaGlzLT53b3JrUXVldWVVbmluaXRpYWxpemUoKTsKQEAgLTEwMCw3ICsxMDIs
OSBAQCB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpzdG9wTGlzdGVuaW5nRm9ySVBDKFJl
ZjxSZW1vdGVHcmFwaGljc0NvbnRleHRHTD4mJgogI2lmIFBMQVRGT1JNKE1BQykKIHZvaWQgUmVt
b3RlR3JhcGhpY3NDb250ZXh0R0w6OmRpc3BsYXlXYXNSZWNvbmZpZ3VyZWQoKQogeworICAgIGFz
c2VydElzTWFpblJ1bkxvb3AoKTsKICAgICByZW1vdGVHcmFwaGljc0NvbnRleHRHTFN0cmVhbVdv
cmtRdWV1ZSgpLmRpc3BhdGNoKFtwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldKCkgewor
ICAgICAgICBhc3NlcnRJc0N1cnJlbnQocHJvdGVjdGVkVGhpcy0+bV9zdHJlYW1UaHJlYWQpOwog
ICAgICAgICBwcm90ZWN0ZWRUaGlzLT5tX2NvbnRleHQtPmRpc3BsYXlXYXNSZWNvbmZpZ3VyZWQo
KTsKICAgICB9KTsKIH0KQEAgLTEwOCw2ICsxMTIsOCBAQCB2b2lkIFJlbW90ZUdyYXBoaWNzQ29u
dGV4dEdMOjpkaXNwbGF5V2FzUmVjb25maWd1cmVkKCkKIAogdm9pZCBSZW1vdGVHcmFwaGljc0Nv
bnRleHRHTDo6d29ya1F1ZXVlSW5pdGlhbGl6ZShXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEF0
dHJpYnV0ZXMmJiBhdHRyaWJ1dGVzKQogeworICAgIG1fc3RyZWFtVGhyZWFkLnJlc2V0KCk7Cisg
ICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKICAgICBwbGF0Zm9ybVdvcmtRdWV1
ZUluaXRpYWxpemUoV1RGTW92ZShhdHRyaWJ1dGVzKSk7CiAgICAgaWYgKG1fY29udGV4dCkgewog
ICAgICAgICBtX2NvbnRleHQtPmFkZENsaWVudCgqdGhpcyk7CkBAIC0xMjAsMTYgKzEyNiwxOSBA
QCB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjp3b3JrUXVldWVJbml0aWFsaXplKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMQXR0cgogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdM
Ojp3b3JrUXVldWVVbmluaXRpYWxpemUoKQogeworICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVh
bVRocmVhZCk7CiAgICAgbV9jb250ZXh0ID0gbnVsbHB0cjsKICAgICBtX3N0cmVhbUNvbm5lY3Rp
b24gPSBudWxscHRyOwogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpkaWRDb21w
b3NpdGUoKQogeworICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CiB9CiAKIHZv
aWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OmZvcmNlQ29udGV4dExvc3QoKQogeworICAgIGFz
c2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CiAgICAgc2VuZChNZXNzYWdlczo6UmVtb3Rl
R3JhcGhpY3NDb250ZXh0R0xQcm94eTo6V2FzTG9zdCgpKTsKIH0KIApAQCAtMTQwLDExICsxNDks
MTMgQEAgdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6cmVjeWNsZUNvbnRleHQoKQogCiB2
b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpkaXNwYXRjaENvbnRleHRDaGFuZ2VkTm90aWZp
Y2F0aW9uKCkKIHsKKyAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOwogICAgIHNl
bmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6Oldhc0NoYW5nZWQoKSk7
CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OnJlc2hhcGUoaW50MzJfdCB3aWR0
aCwgaW50MzJfdCBoZWlnaHQpCiB7CisgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFk
KTsKICAgICBpZiAod2lkdGggJiYgaGVpZ2h0KQogICAgICAgICBtX2NvbnRleHQtPnJlc2hhcGUo
d2lkdGgsIGhlaWdodCk7CiAgICAgZWxzZQpAQCAtMTU0LDYgKzE2NSw3IEBAIHZvaWQgUmVtb3Rl
R3JhcGhpY3NDb250ZXh0R0w6OnJlc2hhcGUoaW50MzJfdCB3aWR0aCwgaW50MzJfdCBoZWlnaHQp
CiAjaWYgIVBMQVRGT1JNKENPQ09BKSAmJiAhUExBVEZPUk0oV0lOKQogdm9pZCBSZW1vdGVHcmFw
aGljc0NvbnRleHRHTDo6cHJlcGFyZUZvckRpc3BsYXkoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQogeworICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRo
cmVhZCk7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwog
fQpAQCAtMTYxLDQ3ICsxNzMsNTQgQEAgdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6cHJl
cGFyZUZvckRpc3BsYXkoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXAKIAogdm9pZCBS
ZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6c3ludGhlc2l6ZUdMRXJyb3IodWludDMyX3QgZXJyb3Ip
CiB7CisgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKICAgICBtX2NvbnRleHQt
PnN5bnRoZXNpemVHTEVycm9yKHN0YXRpY19jYXN0PEdDR0xlbnVtPihlcnJvcikpOwogfQogCiB2
b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpnZXRFcnJvcihDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKHVpbnQzMl90KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKKyAgICBhc3NlcnRJc0N1cnJl
bnQobV9zdHJlYW1UaHJlYWQpOwogICAgIGNvbXBsZXRpb25IYW5kbGVyKHN0YXRpY19jYXN0PHVp
bnQzMl90PihtX2NvbnRleHQtPmdldEVycm9yKCkpKTsKIH0KIAogdm9pZCBSZW1vdGVHcmFwaGlj
c0NvbnRleHRHTDo6ZW5zdXJlRXh0ZW5zaW9uRW5hYmxlZChTdHJpbmcmJiBleHRlbnNpb24pCiB7
CisgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKICAgICBtX2NvbnRleHQtPmdl
dEV4dGVuc2lvbnMoKS5lbnN1cmVFbmFibGVkKGV4dGVuc2lvbik7CiB9CiAKIHZvaWQgUmVtb3Rl
R3JhcGhpY3NDb250ZXh0R0w6Om5vdGlmeU1hcmtDb250ZXh0Q2hhbmdlZCgpCiB7CisgICAgYXNz
ZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKICAgICBtX2NvbnRleHQtPm1hcmtDb250ZXh0
Q2hhbmdlZCgpOwogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpwYWludFJlbmRl
cmluZ1Jlc3VsdHNUb0NhbnZhcyhXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIg
aW1hZ2VCdWZmZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKIHsKKyAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOwogICAgIHBhaW50SW1h
Z2VEYXRhVG9JbWFnZUJ1ZmZlcihtX2NvbnRleHQtPnJlYWRSZW5kZXJpbmdSZXN1bHRzRm9yUGFp
bnRpbmcoKSwgaW1hZ2VCdWZmZXIsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAog
dm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6cGFpbnRDb21wb3NpdGVkUmVzdWx0c1RvQ2Fu
dmFzKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUJ1ZmZlciwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogeworICAgIGFzc2Vy
dElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CiAgICAgcGFpbnRJbWFnZURhdGFUb0ltYWdlQnVm
ZmVyKG1fY29udGV4dC0+cmVhZENvbXBvc2l0ZWRSZXN1bHRzRm9yUGFpbnRpbmcoKSwgaW1hZ2VC
dWZmZXIsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBSZW1vdGVHcmFw
aGljc0NvbnRleHRHTDo6cGFpbnRJbWFnZURhdGFUb0ltYWdlQnVmZmVyKFJlZlB0cjxXZWJDb3Jl
OjpJbWFnZURhdGE+JiYgaW1hZ2VEYXRhLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50
aWZpZXIgdGFyZ2V0LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCiB7CisgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKICAgICAvLyBGSVhN
RTogV2UgZG8gbm90IGhhdmUgZnVuY3Rpb25pbmcgcmVhZC93cml0ZSBmZW5jZXMgaW4gUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZC4gVGh1cyB0aGlzIGlzIHN5bmNocm9ub3VzLAogICAgIC8vIGFzIGFy
ZSB0aGUgbWVzc2FnZXMgdGhhdCBjYWxsIHRoZXNlLgogICAgIExvY2sgbXV0ZXg7CiAgICAgQ29u
ZGl0aW9uIGNvbmRpdGlvblZhcmlhYmxlOwogICAgIGJvb2wgaXNGaW5pc2hlZCA9IGZhbHNlOwot
ICAgIG1fcmVuZGVyaW5nQmFja2VuZC0+ZGlzcGF0Y2goWyZdKCkgbXV0YWJsZSB7CisgICAgbV9y
ZW5kZXJpbmdCYWNrZW5kLT5kaXNwYXRjaChbJiwgY29udGV4dEF0dHJpYnV0ZXMgPSBtX2NvbnRl
eHQtPmNvbnRleHRBdHRyaWJ1dGVzKCldKCkgbXV0YWJsZSB7CiAgICAgICAgIGlmIChhdXRvIGlt
YWdlQnVmZmVyID0gbV9yZW5kZXJpbmdCYWNrZW5kLT5yZW1vdGVSZXNvdXJjZUNhY2hlKCkuY2Fj
aGVkSW1hZ2VCdWZmZXIodGFyZ2V0KSkgewogICAgICAgICAgICAgLy8gSGVyZSB3ZSBkbyBub3Qg
dHJ5IHRvIHBsYXkgYmFjayBwZW5kaW5nIGNvbW1hbmRzIGZvciBpbWFnZUJ1ZmZlci4gQ3VycmVu
dGx5IHRoaXMgY2FsbCBpcyBvbmx5IG1hZGUgZm9yIGVtcHR5CiAgICAgICAgICAgICAvLyBpbWFn
ZSBidWZmZXJzIGFuZCB0aGVyZSdzIG5vIGdvb2Qgd2F5IHRvIGFkZCBkaXNwbGF5IGxpc3RzLgog
ICAgICAgICAgICAgaWYgKGltYWdlRGF0YSkKLSAgICAgICAgICAgICAgICBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6cGFpbnRUb0NhbnZhcyhtX2NvbnRleHQtPmNvbnRleHRBdHRyaWJ1dGVzKCks
IGltYWdlRGF0YS5yZWxlYXNlTm9uTnVsbCgpLCBpbWFnZUJ1ZmZlci0+YmFja2VuZFNpemUoKSwg
aW1hZ2VCdWZmZXItPmNvbnRleHQoKSk7CisgICAgICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnBhaW50VG9DYW52YXMoY29udGV4dEF0dHJpYnV0ZXMsIGltYWdlRGF0YS5yZWxl
YXNlTm9uTnVsbCgpLCBpbWFnZUJ1ZmZlci0+YmFja2VuZFNpemUoKSwgaW1hZ2VCdWZmZXItPmNv
bnRleHQoKSk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgaW1hZ2VCdWZmZXIt
PmNvbnRleHQoKS5jbGVhclJlY3QoeyBJbnRQb2ludCgpLCBpbWFnZUJ1ZmZlci0+YmFja2VuZFNp
emUoKSB9KTsKICAgICAgICAgICAgIC8vIFVuZm9ydHVuYXRlbHkgImZsdXNoIiBpbXBsZW1lbnRh
dGlvbiBpbiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kIG92ZXJsb2FkcyBvcmRlcmluZyBhbmQgZWZm
ZWN0cy4KQEAgLTIyMCw2ICsyMzksNyBAQCB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpw
YWludEltYWdlRGF0YVRvSW1hZ2VCdWZmZXIoUmVmUHRyPFdlYkNvcmU6OkltYWdlRAogCiB2b2lk
IFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpjb3B5VGV4dHVyZUZyb21NZWRpYShXZWJDb3JlOjpN
ZWRpYVBsYXllcklkZW50aWZpZXIgbWVkaWFQbGF5ZXJJZGVudGlmaWVyLCB1aW50MzJfdCB0ZXh0
dXJlLCB1aW50MzJfdCB0YXJnZXQsIGludDMyX3QgbGV2ZWwsIHVpbnQzMl90IGludGVybmFsRm9y
bWF0LCB1aW50MzJfdCBmb3JtYXQsIHVpbnQzMl90IHR5cGUsIGJvb2wgcHJlbXVsdGlwbHlBbHBo
YSwgYm9vbCBmbGlwWSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKIHsKKyAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOwogI2lmIFVT
RShBVkZPVU5EQVRJT04pCiAgICAgVU5VU0VEX1ZBUklBQkxFKHByZW11bHRpcGx5QWxwaGEpOwog
ICAgIEFTU0VSVF9VTlVTRUQodGFyZ2V0LCB0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0R0w6OlRF
WFRVUkVfMkQpOwpAQCAtMjY1LDYgKzI4NSw3IEBAIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0
R0w6OmNvcHlUZXh0dXJlRnJvbU1lZGlhKFdlYkNvcmU6Ok1lZGlhUGxheWVySWRlbnRpZmllCiAK
IHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OnNpbXVsYXRlRXZlbnRGb3JUZXN0aW5nKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpTaW11bGF0ZWRFdmVudEZvclRlc3Rpbmcg
ZXZlbnQpCiB7CisgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKICAgICAvLyBG
SVhNRTogb25seSBydW4gdGhpcyBpbiB0ZXN0aW5nIG1vZGUuIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMjI1NDQKICAgICBpZiAoZXZlbnQgPT0gV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OlNpbXVsYXRlZEV2ZW50Rm9yVGVzdGluZzo6VGltZW91dCkg
ewogICAgICAgICAvLyBTaW11bGF0ZSB0aGUgdGltZW91dCBieSBqdXN0IGRpc2NhcmRpbmcgdGhl
IGNvbnRleHQuIFRoZSBzdWJzZXF1ZW50IG1lc3NhZ2VzIGFjdCBsaWtlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wu
aCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRl
eHRHTC5oCmluZGV4IDRlZTQ1Mjk5NGUwNjczNDliOGE4Y2YzNWY2MjM4ZTljOTgwNTk3MDcuLjI1
MTBiZDY4ZTdhOGU3OTdlNjViNTQzMmY4NDE3MDA2YzBmZjFkZDEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTC5oCisr
KyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRl
eHRHTC5oCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9FeHRlbnNpb25zR0wu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRBc3NlcnRp
b25zLmg+CiAjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KIAogI2lmIFBMQVRGT1JNKENPQ09BKQpA
QCAtMTA4LDEwICsxMDksMTEgQEAgcHJvdGVjdGVkOgogCiAgICAgV2Vha1B0cjxHUFVDb25uZWN0
aW9uVG9XZWJQcm9jZXNzPiBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M7CiAgICAgUmVmUHRy
PElQQzo6U3RyZWFtU2VydmVyQ29ubmVjdGlvbjxSZW1vdGVHcmFwaGljc0NvbnRleHRHTD4+IG1f
c3RyZWFtQ29ubmVjdGlvbjsKLSAgICBSZWZQdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w+IG1fY29udGV4dDsKKyAgICBSZWZQdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w+IG1fY29udGV4dCBXVEZfR1VBUkRFRF9CWV9MT0NLKG1fc3RyZWFtVGhyZWFkKTsKICAg
ICBHcmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZp
ZXI7CiAgICAgUmVmPFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ+IG1fcmVuZGVyaW5nQmFja2VuZDsK
ICAgICBTY29wZWRXZWJHTFJlbmRlcmluZ1Jlc291cmNlc1JlcXVlc3QgbV9yZW5kZXJpbmdSZXNv
dXJjZXNSZXF1ZXN0OworICAgIE5PX1VOSVFVRV9BRERSRVNTIFRocmVhZEFzc2VydGlvbiBtX3N0
cmVhbVRocmVhZDsKIH07CiAKIElQQzo6U3RyZWFtQ29ubmVjdGlvbldvcmtRdWV1ZSYgcmVtb3Rl
R3JhcGhpY3NDb250ZXh0R0xTdHJlYW1Xb3JrUXVldWUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTENvY29hLmNw
cCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRl
eHRHTENvY29hLmNwcAppbmRleCAwNTlhYmRkM2QzYzIxM2I5MWNiYWNhNDI0ZDUwNGQ5MTdhMjEz
YzRlLi45NzBkOGMyZTc5MDllOGY3MWZhZDBjOWJkMmM2NDMxZmNkOTVhZDMyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0
R0xDb2NvYS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90
ZUdyYXBoaWNzQ29udGV4dEdMQ29jb2EuY3BwCkBAIC00Niw3ICs0Niw3IEBAIHB1YmxpYzoKICAg
ICB2b2lkIHBsYXRmb3JtV29ya1F1ZXVlSW5pdGlhbGl6ZShXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTEF0dHJpYnV0ZXMmJikgZmluYWw7CiAgICAgdm9pZCBwcmVwYXJlRm9yRGlzcGxheShDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKFdURjo6TWFjaFNlbmRSaWdodCYmKT4mJikgZmluYWw7CiBwcml2
YXRlOgotICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMSU9TdXJmYWNlU3dhcENoYWluIG1f
c3dhcENoYWluOworICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMSU9TdXJmYWNlU3dhcENo
YWluIG1fc3dhcENoYWluIFdURl9HVUFSREVEX0JZX0xPQ0sobV9zdHJlYW1UaHJlYWQpOwogI2lm
IEhBVkUoSU9TVVJGQUNFX1NFVF9PV05FUlNISVBfSURFTlRJVFkpCiAgICAgdGFza19pZF90b2tl
bl90IG1fd2ViUHJvY2Vzc0lkZW50aXR5VG9rZW47CiAjZW5kaWYKQEAgLTcyLDExICs3MiwxMyBA
QCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTENvY29hOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTENv
Y29hKEdQVUNvbm5lY3Rpb25Ub1dlYlBybwogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdM
Q29jb2E6OnBsYXRmb3JtV29ya1F1ZXVlSW5pdGlhbGl6ZShXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTEF0dHJpYnV0ZXMmJiBhdHRyaWJ1dGVzKQogeworICAgIGFzc2VydElzQ3VycmVudChtX3N0
cmVhbVRocmVhZCk7CiAgICAgbV9jb250ZXh0ID0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNy
ZWF0ZUZvckdQVVByb2Nlc3MoV1RGTW92ZShhdHRyaWJ1dGVzKSwgJm1fc3dhcENoYWluKTsKIH0K
IAogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTENvY29hOjpwcmVwYXJlRm9yRGlzcGxheShD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKFdURjo6TWFjaFNlbmRSaWdodCYmKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKIHsKKyAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOwogICAgIG1f
Y29udGV4dC0+cHJlcGFyZUZvckRpc3BsYXkoKTsKICAgICBNYWNoU2VuZFJpZ2h0IHNlbmRSaWdo
dDsKICAgICBpZiAoYXV0byogc3VyZmFjZSA9IG1fc3dhcENoYWluLmRpc3BsYXlCdWZmZXIoKS5z
dXJmYWNlLmdldCgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3Jh
cGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xGdW5jdGlvbnNHZW5lcmF0ZWQuaCBiL1NvdXJj
ZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTEZ1bmN0
aW9uc0dlbmVyYXRlZC5oCmluZGV4IGJjNTUxNjc4MGNhMDBmNWVlYmM3ZTRkYTJkMjliNzA4ODNl
YWQxODUuLmI3NWE0MDRmM2ZkMDIyYzQ4Mzc5Zjk3NTU4ZjhlOWIzNDE4OTgxMzIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRl
eHRHTEZ1bmN0aW9uc0dlbmVyYXRlZC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9n
cmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTEZ1bmN0aW9uc0dlbmVyYXRlZC5oCkBAIC0y
OCwyMjcgKzI4LDI3OSBAQAogICAgIHZvaWQgbW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0
KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiAgICAg
ewogICAgICAgICBib29sIHJldHVyblZhbHVlID0geyB9OworICAgICAgICBhc3NlcnRJc0N1cnJl
bnQobV9zdHJlYW1UaHJlYWQpOwogICAgICAgICByZXR1cm5WYWx1ZSA9IG1fY29udGV4dC0+bW92
ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0KCk7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KHJldHVyblZhbHVlKTsKICAgICB9CiAgICAgdm9pZCBhY3RpdmVUZXh0dXJlKHVpbnQzMl90IHRl
eHR1cmUpCiAgICAgeworICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOwog
ICAgICAgICBtX2NvbnRleHQtPmFjdGl2ZVRleHR1cmUodGV4dHVyZSk7CiAgICAgfQogICAgIHZv
aWQgYXR0YWNoU2hhZGVyKHVpbnQzMl90IHByb2dyYW0sIHVpbnQzMl90IHNoYWRlcikKICAgICB7
CisgICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CiAgICAgICAgIG1fY29u
dGV4dC0+YXR0YWNoU2hhZGVyKHByb2dyYW0sIHNoYWRlcik7CiAgICAgfQogICAgIHZvaWQgYmlu
ZEF0dHJpYkxvY2F0aW9uKHVpbnQzMl90IGFyZzAsIHVpbnQzMl90IGluZGV4LCBTdHJpbmcmJiBu
YW1lKQogICAgIHsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKICAg
ICAgICAgbV9jb250ZXh0LT5iaW5kQXR0cmliTG9jYXRpb24oYXJnMCwgaW5kZXgsIG5hbWUpOwog
ICAgIH0KICAgICB2b2lkIGJpbmRCdWZmZXIodWludDMyX3QgdGFyZ2V0LCB1aW50MzJfdCBhcmcx
KQogICAgIHsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKICAgICAg
ICAgbV9jb250ZXh0LT5iaW5kQnVmZmVyKHRhcmdldCwgYXJnMSk7CiAgICAgfQogICAgIHZvaWQg
YmluZEZyYW1lYnVmZmVyKHVpbnQzMl90IHRhcmdldCwgdWludDMyX3QgYXJnMSkKICAgICB7Cisg
ICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CiAgICAgICAgIG1fY29udGV4
dC0+YmluZEZyYW1lYnVmZmVyKHRhcmdldCwgYXJnMSk7CiAgICAgfQogICAgIHZvaWQgYmluZFJl
bmRlcmJ1ZmZlcih1aW50MzJfdCB0YXJnZXQsIHVpbnQzMl90IGFyZzEpCiAgICAgeworICAgICAg
ICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOwogICAgICAgICBtX2NvbnRleHQtPmJp
bmRSZW5kZXJidWZmZXIodGFyZ2V0LCBhcmcxKTsKICAgICB9CiAgICAgdm9pZCBiaW5kVGV4dHVy
ZSh1aW50MzJfdCB0YXJnZXQsIHVpbnQzMl90IGFyZzEpCiAgICAgeworICAgICAgICBhc3NlcnRJ
c0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOwogICAgICAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJl
KHRhcmdldCwgYXJnMSk7CiAgICAgfQogICAgIHZvaWQgYmxlbmRDb2xvcihmbG9hdCByZWQsIGZs
b2F0IGdyZWVuLCBmbG9hdCBibHVlLCBmbG9hdCBhbHBoYSkKICAgICB7CisgICAgICAgIGFzc2Vy
dElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CiAgICAgICAgIG1fY29udGV4dC0+YmxlbmRDb2xv
cihyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7CiAgICAgfQogICAgIHZvaWQgYmxlbmRFcXVhdGlv
bih1aW50MzJfdCBtb2RlKQogICAgIHsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFt
VGhyZWFkKTsKICAgICAgICAgbV9jb250ZXh0LT5ibGVuZEVxdWF0aW9uKG1vZGUpOwogICAgIH0K
ICAgICB2b2lkIGJsZW5kRXF1YXRpb25TZXBhcmF0ZSh1aW50MzJfdCBtb2RlUkdCLCB1aW50MzJf
dCBtb2RlQWxwaGEpCiAgICAgeworICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJl
YWQpOwogICAgICAgICBtX2NvbnRleHQtPmJsZW5kRXF1YXRpb25TZXBhcmF0ZShtb2RlUkdCLCBt
b2RlQWxwaGEpOwogICAgIH0KICAgICB2b2lkIGJsZW5kRnVuYyh1aW50MzJfdCBzZmFjdG9yLCB1
aW50MzJfdCBkZmFjdG9yKQogICAgIHsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFt
VGhyZWFkKTsKICAgICAgICAgbV9jb250ZXh0LT5ibGVuZEZ1bmMoc2ZhY3RvciwgZGZhY3Rvcik7
CiAgICAgfQogICAgIHZvaWQgYmxlbmRGdW5jU2VwYXJhdGUodWludDMyX3Qgc3JjUkdCLCB1aW50
MzJfdCBkc3RSR0IsIHVpbnQzMl90IHNyY0FscGhhLCB1aW50MzJfdCBkc3RBbHBoYSkKICAgICB7
CisgICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CiAgICAgICAgIG1fY29u
dGV4dC0+YmxlbmRGdW5jU2VwYXJhdGUoc3JjUkdCLCBkc3RSR0IsIHNyY0FscGhhLCBkc3RBbHBo
YSk7CiAgICAgfQogICAgIHZvaWQgY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyh1aW50MzJfdCB0YXJn
ZXQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQodWludDMyX3QpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQogICAgIHsKICAgICAgICAgR0NHTGVudW0gcmV0dXJuVmFsdWUgPSB7IH07CisgICAgICAgIGFz
c2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CiAgICAgICAgIHJldHVyblZhbHVlID0gbV9j
b250ZXh0LT5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKHRhcmdldCk7CiAgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKHJldHVyblZhbHVlKTsKICAgICB9CiAgICAgdm9pZCBjbGVhcih1aW50MzJfdCBt
YXNrKQogICAgIHsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKICAg
ICAgICAgbV9jb250ZXh0LT5jbGVhcihtYXNrKTsKICAgICB9CiAgICAgdm9pZCBjbGVhckNvbG9y
KGZsb2F0IHJlZCwgZmxvYXQgZ3JlZW4sIGZsb2F0IGJsdWUsIGZsb2F0IGFscGhhKQogICAgIHsK
KyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKICAgICAgICAgbV9jb250
ZXh0LT5jbGVhckNvbG9yKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKICAgICB9CiAgICAgdm9p
ZCBjbGVhckRlcHRoKGZsb2F0IGRlcHRoKQogICAgIHsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50
KG1fc3RyZWFtVGhyZWFkKTsKICAgICAgICAgbV9jb250ZXh0LT5jbGVhckRlcHRoKGRlcHRoKTsK
ICAgICB9CiAgICAgdm9pZCBjbGVhclN0ZW5jaWwoaW50MzJfdCBzKQogICAgIHsKKyAgICAgICAg
YXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKICAgICAgICAgbV9jb250ZXh0LT5jbGVh
clN0ZW5jaWwocyk7CiAgICAgfQogICAgIHZvaWQgY29sb3JNYXNrKGJvb2wgcmVkLCBib29sIGdy
ZWVuLCBib29sIGJsdWUsIGJvb2wgYWxwaGEpCiAgICAgeworICAgICAgICBhc3NlcnRJc0N1cnJl
bnQobV9zdHJlYW1UaHJlYWQpOwogICAgICAgICBtX2NvbnRleHQtPmNvbG9yTWFzayhzdGF0aWNf
Y2FzdDxHQ0dMYm9vbGVhbj4ocmVkKSwgc3RhdGljX2Nhc3Q8R0NHTGJvb2xlYW4+KGdyZWVuKSwg
c3RhdGljX2Nhc3Q8R0NHTGJvb2xlYW4+KGJsdWUpLCBzdGF0aWNfY2FzdDxHQ0dMYm9vbGVhbj4o
YWxwaGEpKTsKICAgICB9CiAgICAgdm9pZCBjb21waWxlU2hhZGVyKHVpbnQzMl90IGFyZzApCiAg
ICAgeworICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOwogICAgICAgICBt
X2NvbnRleHQtPmNvbXBpbGVTaGFkZXIoYXJnMCk7CiAgICAgfQogICAgIHZvaWQgY29weVRleElt
YWdlMkQodWludDMyX3QgdGFyZ2V0LCBpbnQzMl90IGxldmVsLCB1aW50MzJfdCBpbnRlcm5hbGZv
cm1hdCwgaW50MzJfdCB4LCBpbnQzMl90IHksIGludDMyX3Qgd2lkdGgsIGludDMyX3QgaGVpZ2h0
LCBpbnQzMl90IGJvcmRlcikKICAgICB7CisgICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVh
bVRocmVhZCk7CiAgICAgICAgIG1fY29udGV4dC0+Y29weVRleEltYWdlMkQodGFyZ2V0LCBsZXZl
bCwgaW50ZXJuYWxmb3JtYXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGJvcmRlcik7CiAgICAgfQog
ICAgIHZvaWQgY29weVRleFN1YkltYWdlMkQodWludDMyX3QgdGFyZ2V0LCBpbnQzMl90IGxldmVs
LCBpbnQzMl90IHhvZmZzZXQsIGludDMyX3QgeW9mZnNldCwgaW50MzJfdCB4LCBpbnQzMl90IHks
IGludDMyX3Qgd2lkdGgsIGludDMyX3QgaGVpZ2h0KQogICAgIHsKKyAgICAgICAgYXNzZXJ0SXND
dXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKICAgICAgICAgbV9jb250ZXh0LT5jb3B5VGV4U3ViSW1h
Z2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0
KTsKICAgICB9CiAgICAgdm9pZCBjcmVhdGVCdWZmZXIoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCh1
aW50MzJfdCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiAgICAgewogICAgICAgICBQbGF0Zm9ybUdM
T2JqZWN0IHJldHVyblZhbHVlID0geyB9OworICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJl
YW1UaHJlYWQpOwogICAgICAgICByZXR1cm5WYWx1ZSA9IG1fY29udGV4dC0+Y3JlYXRlQnVmZmVy
KCk7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHJldHVyblZhbHVlKTsKICAgICB9CiAgICAg
dm9pZCBjcmVhdGVGcmFtZWJ1ZmZlcihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHVpbnQzMl90KT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKICAgICB7CiAgICAgICAgIFBsYXRmb3JtR0xPYmplY3QgcmV0
dXJuVmFsdWUgPSB7IH07CisgICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7
CiAgICAgICAgIHJldHVyblZhbHVlID0gbV9jb250ZXh0LT5jcmVhdGVGcmFtZWJ1ZmZlcigpOwog
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihyZXR1cm5WYWx1ZSk7CiAgICAgfQogICAgIHZvaWQg
Y3JlYXRlUHJvZ3JhbShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHVpbnQzMl90KT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKICAgICB7CiAgICAgICAgIFBsYXRmb3JtR0xPYmplY3QgcmV0dXJuVmFsdWUg
PSB7IH07CisgICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CiAgICAgICAg
IHJldHVyblZhbHVlID0gbV9jb250ZXh0LT5jcmVhdGVQcm9ncmFtKCk7CiAgICAgICAgIGNvbXBs
ZXRpb25IYW5kbGVyKHJldHVyblZhbHVlKTsKICAgICB9CiAgICAgdm9pZCBjcmVhdGVSZW5kZXJi
dWZmZXIoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCh1aW50MzJfdCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCiAgICAgewogICAgICAgICBQbGF0Zm9ybUdMT2JqZWN0IHJldHVyblZhbHVlID0geyB9Owor
ICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOwogICAgICAgICByZXR1cm5W
YWx1ZSA9IG1fY29udGV4dC0+Y3JlYXRlUmVuZGVyYnVmZmVyKCk7CiAgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKHJldHVyblZhbHVlKTsKICAgICB9CiAgICAgdm9pZCBjcmVhdGVTaGFkZXIodWlu
dDMyX3QgYXJnMCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCh1aW50MzJfdCk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCiAgICAgewogICAgICAgICBQbGF0Zm9ybUdMT2JqZWN0IHJldHVyblZhbHVlID0g
eyB9OworICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOwogICAgICAgICBy
ZXR1cm5WYWx1ZSA9IG1fY29udGV4dC0+Y3JlYXRlU2hhZGVyKGFyZzApOwogICAgICAgICBjb21w
bGV0aW9uSGFuZGxlcihyZXR1cm5WYWx1ZSk7CiAgICAgfQogICAgIHZvaWQgY3JlYXRlVGV4dHVy
ZShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHVpbnQzMl90KT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
ICAgICB7CiAgICAgICAgIFBsYXRmb3JtR0xPYmplY3QgcmV0dXJuVmFsdWUgPSB7IH07CisgICAg
ICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CiAgICAgICAgIHJldHVyblZhbHVl
ID0gbV9jb250ZXh0LT5jcmVhdGVUZXh0dXJlKCk7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KHJldHVyblZhbHVlKTsKICAgICB9CiAgICAgdm9pZCBjdWxsRmFjZSh1aW50MzJfdCBtb2RlKQog
ICAgIHsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKICAgICAgICAg
bV9jb250ZXh0LT5jdWxsRmFjZShtb2RlKTsKICAgICB9CiAgICAgdm9pZCBkZWxldGVCdWZmZXIo
dWludDMyX3QgYXJnMCkKICAgICB7CisgICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRo
cmVhZCk7CiAgICAgICAgIG1fY29udGV4dC0+ZGVsZXRlQnVmZmVyKGFyZzApOwogICAgIH0KICAg
ICB2b2lkIGRlbGV0ZUZyYW1lYnVmZmVyKHVpbnQzMl90IGFyZzApCiAgICAgeworICAgICAgICBh
c3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOwogICAgICAgICBtX2NvbnRleHQtPmRlbGV0
ZUZyYW1lYnVmZmVyKGFyZzApOwogICAgIH0KICAgICB2b2lkIGRlbGV0ZVByb2dyYW0odWludDMy
X3QgYXJnMCkKICAgICB7CisgICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7
CiAgICAgICAgIG1fY29udGV4dC0+ZGVsZXRlUHJvZ3JhbShhcmcwKTsKICAgICB9CiAgICAgdm9p
ZCBkZWxldGVSZW5kZXJidWZmZXIodWludDMyX3QgYXJnMCkKICAgICB7CisgICAgICAgIGFzc2Vy
dElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CiAgICAgICAgIG1fY29udGV4dC0+ZGVsZXRlUmVu
ZGVyYnVmZmVyKGFyZzApOwogICAgIH0KICAgICB2b2lkIGRlbGV0ZVNoYWRlcih1aW50MzJfdCBh
cmcwKQogICAgIHsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKICAg
ICAgICAgbV9jb250ZXh0LT5kZWxldGVTaGFkZXIoYXJnMCk7CiAgICAgfQogICAgIHZvaWQgZGVs
ZXRlVGV4dHVyZSh1aW50MzJfdCBhcmcwKQogICAgIHsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50
KG1fc3RyZWFtVGhyZWFkKTsKICAgICAgICAgbV9jb250ZXh0LT5kZWxldGVUZXh0dXJlKGFyZzAp
OwogICAgIH0KICAgICB2b2lkIGRlcHRoRnVuYyh1aW50MzJfdCBmdW5jKQogICAgIHsKKyAgICAg
ICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKICAgICAgICAgbV9jb250ZXh0LT5k
ZXB0aEZ1bmMoZnVuYyk7CiAgICAgfQogICAgIHZvaWQgZGVwdGhNYXNrKGJvb2wgZmxhZykKICAg
ICB7CisgICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CiAgICAgICAgIG1f
Y29udGV4dC0+ZGVwdGhNYXNrKHN0YXRpY19jYXN0PEdDR0xib29sZWFuPihmbGFnKSk7CiAgICAg
fQogICAgIHZvaWQgZGVwdGhSYW5nZShmbG9hdCB6TmVhciwgZmxvYXQgekZhcikKICAgICB7Cisg
ICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CiAgICAgICAgIG1fY29udGV4
dC0+ZGVwdGhSYW5nZSh6TmVhciwgekZhcik7CiAgICAgfQogICAgIHZvaWQgZGV0YWNoU2hhZGVy
KHVpbnQzMl90IGFyZzAsIHVpbnQzMl90IGFyZzEpCiAgICAgeworICAgICAgICBhc3NlcnRJc0N1
cnJlbnQobV9zdHJlYW1UaHJlYWQpOwogICAgICAgICBtX2NvbnRleHQtPmRldGFjaFNoYWRlcihh
cmcwLCBhcmcxKTsKICAgICB9CiAgICAgdm9pZCBkaXNhYmxlKHVpbnQzMl90IGNhcCkKICAgICB7
CisgICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CiAgICAgICAgIG1fY29u
dGV4dC0+ZGlzYWJsZShjYXApOwogICAgIH0KICAgICB2b2lkIGRpc2FibGVWZXJ0ZXhBdHRyaWJB
cnJheSh1aW50MzJfdCBpbmRleCkKICAgICB7CisgICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0
cmVhbVRocmVhZCk7CiAgICAgICAgIG1fY29udGV4dC0+ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5
KGluZGV4KTsKICAgICB9CiAgICAgdm9pZCBkcmF3QXJyYXlzKHVpbnQzMl90IG1vZGUsIGludDMy
X3QgZmlyc3QsIGludDMyX3QgY291bnQpCiAgICAgeworICAgICAgICBhc3NlcnRJc0N1cnJlbnQo
bV9zdHJlYW1UaHJlYWQpOwogICAgICAgICBtX2NvbnRleHQtPmRyYXdBcnJheXMobW9kZSwgZmly
c3QsIGNvdW50KTsKICAgICB9CiAgICAgdm9pZCBkcmF3RWxlbWVudHModWludDMyX3QgbW9kZSwg
aW50MzJfdCBjb3VudCwgdWludDMyX3QgdHlwZSwgdWludDY0X3Qgb2Zmc2V0KQogICAgIHsKKyAg
ICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKICAgICAgICAgbV9jb250ZXh0
LT5kcmF3RWxlbWVudHMobW9kZSwgY291bnQsIHR5cGUsIHN0YXRpY19jYXN0PEdDR0xpbnRwdHI+
KG9mZnNldCkpOwogICAgIH0KICAgICB2b2lkIGVuYWJsZSh1aW50MzJfdCBjYXApCiAgICAgewor
ICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOwogICAgICAgICBtX2NvbnRl
eHQtPmVuYWJsZShjYXApOwogICAgIH0KICAgICB2b2lkIGVuYWJsZVZlcnRleEF0dHJpYkFycmF5
KHVpbnQzMl90IGluZGV4KQogICAgIHsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFt
VGhyZWFkKTsKICAgICAgICAgbV9jb250ZXh0LT5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRl
eCk7CiAgICAgfQogICAgIHZvaWQgZmluaXNoKCkKICAgICB7CisgICAgICAgIGFzc2VydElzQ3Vy
cmVudChtX3N0cmVhbVRocmVhZCk7CiAgICAgICAgIG1fY29udGV4dC0+ZmluaXNoKCk7CiAgICAg
fQogICAgIHZvaWQgZmx1c2goKQogICAgIHsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3Ry
ZWFtVGhyZWFkKTsKICAgICAgICAgbV9jb250ZXh0LT5mbHVzaCgpOwogICAgIH0KICAgICB2b2lk
IGZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKHVpbnQzMl90IHRhcmdldCwgdWludDMyX3QgYXR0YWNo
bWVudCwgdWludDMyX3QgcmVuZGVyYnVmZmVydGFyZ2V0LCB1aW50MzJfdCBhcmczKQogICAgIHsK
KyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKICAgICAgICAgbV9jb250
ZXh0LT5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih0YXJnZXQsIGF0dGFjaG1lbnQsIHJlbmRlcmJ1
ZmZlcnRhcmdldCwgYXJnMyk7CiAgICAgfQogICAgIHZvaWQgZnJhbWVidWZmZXJUZXh0dXJlMkQo
dWludDMyX3QgdGFyZ2V0LCB1aW50MzJfdCBhdHRhY2htZW50LCB1aW50MzJfdCB0ZXh0YXJnZXQs
IHVpbnQzMl90IGFyZzMsIGludDMyX3QgbGV2ZWwpCiAgICAgeworICAgICAgICBhc3NlcnRJc0N1
cnJlbnQobV9zdHJlYW1UaHJlYWQpOwogICAgICAgICBtX2NvbnRleHQtPmZyYW1lYnVmZmVyVGV4
dHVyZTJEKHRhcmdldCwgYXR0YWNobWVudCwgdGV4dGFyZ2V0LCBhcmczLCBsZXZlbCk7CiAgICAg
fQogICAgIHZvaWQgZnJvbnRGYWNlKHVpbnQzMl90IG1vZGUpCiAgICAgeworICAgICAgICBhc3Nl
cnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOwogICAgICAgICBtX2NvbnRleHQtPmZyb250RmFj
ZShtb2RlKTsKICAgICB9CiAgICAgdm9pZCBnZW5lcmF0ZU1pcG1hcCh1aW50MzJfdCB0YXJnZXQp
CiAgICAgeworICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOwogICAgICAg
ICBtX2NvbnRleHQtPmdlbmVyYXRlTWlwbWFwKHRhcmdldCk7CiAgICAgfQogICAgIHZvaWQgZ2V0
QWN0aXZlQXR0cmliKHVpbnQzMl90IHByb2dyYW0sIHVpbnQzMl90IGluZGV4LCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKGJvb2wsIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMOjpBY3RpdmVJbmZv
JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogICAgIHsKICAgICAgICAgYm9vbCByZXR1cm5WYWx1
ZSA9IHsgfTsKICAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0w6OkFjdGl2ZUluZm8g
YXJnMiB7IH07CisgICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CiAgICAg
ICAgIHJldHVyblZhbHVlID0gbV9jb250ZXh0LT5nZXRBY3RpdmVBdHRyaWIocHJvZ3JhbSwgaW5k
ZXgsIGFyZzIpOwogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihyZXR1cm5WYWx1ZSwgV1RGTW92
ZShhcmcyKSk7CiAgICAgfQpAQCAtMjU2LDkwICszMDgsMTA1IEBACiAgICAgewogICAgICAgICBi
b29sIHJldHVyblZhbHVlID0geyB9OwogICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TDo6QWN0aXZlSW5mbyBhcmcyIHsgfTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFt
VGhyZWFkKTsKICAgICAgICAgcmV0dXJuVmFsdWUgPSBtX2NvbnRleHQtPmdldEFjdGl2ZVVuaWZv
cm0ocHJvZ3JhbSwgaW5kZXgsIGFyZzIpOwogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihyZXR1
cm5WYWx1ZSwgV1RGTW92ZShhcmcyKSk7CiAgICAgfQogICAgIHZvaWQgZ2V0QXR0cmliTG9jYXRp
b24odWludDMyX3QgYXJnMCwgU3RyaW5nJiYgbmFtZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChp
bnQzMl90KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKICAgICB7CiAgICAgICAgIEdDR0xpbnQgcmV0
dXJuVmFsdWUgPSB7IH07CisgICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7
CiAgICAgICAgIHJldHVyblZhbHVlID0gbV9jb250ZXh0LT5nZXRBdHRyaWJMb2NhdGlvbihhcmcw
LCBuYW1lKTsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIocmV0dXJuVmFsdWUpOwogICAgIH0K
ICAgICB2b2lkIGdldEJ1ZmZlclBhcmFtZXRlcmkodWludDMyX3QgdGFyZ2V0LCB1aW50MzJfdCBw
bmFtZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChpbnQzMl90KT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKICAgICB7CiAgICAgICAgIEdDR0xpbnQgcmV0dXJuVmFsdWUgPSB7IH07CisgICAgICAgIGFz
c2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CiAgICAgICAgIHJldHVyblZhbHVlID0gbV9j
b250ZXh0LT5nZXRCdWZmZXJQYXJhbWV0ZXJpKHRhcmdldCwgcG5hbWUpOwogICAgICAgICBjb21w
bGV0aW9uSGFuZGxlcihyZXR1cm5WYWx1ZSk7CiAgICAgfQogICAgIHZvaWQgZ2V0U3RyaW5nKHVp
bnQzMl90IG5hbWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3RyaW5nJiYpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQogICAgIHsKICAgICAgICAgU3RyaW5nIHJldHVyblZhbHVlID0geyB9OworICAg
ICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOwogICAgICAgICByZXR1cm5WYWx1
ZSA9IG1fY29udGV4dC0+Z2V0U3RyaW5nKG5hbWUpOwogICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cihXVEZNb3ZlKHJldHVyblZhbHVlKSk7CiAgICAgfQogICAgIHZvaWQgZ2V0RmxvYXR2KHVpbnQz
Ml90IHBuYW1lLCB1aW50NjRfdCB2YWx1ZVNpemUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoSVBD
OjpBcnJheVJlZmVyZW5jZTxmbG9hdD4pPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogICAgIHsKICAg
ICAgICAgVmVjdG9yPEdDR0xmbG9hdCwgMTY+IHZhbHVlKHN0YXRpY19jYXN0PHNpemVfdD4odmFs
dWVTaXplKSwgMCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CiAg
ICAgICAgIG1fY29udGV4dC0+Z2V0RmxvYXR2KHBuYW1lLCB2YWx1ZSk7CiAgICAgICAgIGNvbXBs
ZXRpb25IYW5kbGVyKElQQzo6QXJyYXlSZWZlcmVuY2U8ZmxvYXQ+KHJlaW50ZXJwcmV0X2Nhc3Q8
ZmxvYXQqPih2YWx1ZS5kYXRhKCkpLCB2YWx1ZS5zaXplKCkpKTsKICAgICB9CiAgICAgdm9pZCBn
ZXRJbnRlZ2Vydih1aW50MzJfdCBwbmFtZSwgdWludDY0X3QgdmFsdWVTaXplLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKElQQzo6QXJyYXlSZWZlcmVuY2U8aW50MzJfdD4pPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQogICAgIHsKICAgICAgICAgVmVjdG9yPEdDR0xpbnQsIDQ+IHZhbHVlKHN0YXRpY19j
YXN0PHNpemVfdD4odmFsdWVTaXplKSwgMCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0
cmVhbVRocmVhZCk7CiAgICAgICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYocG5hbWUsIHZhbHVl
KTsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoSVBDOjpBcnJheVJlZmVyZW5jZTxpbnQzMl90
PihyZWludGVycHJldF9jYXN0PGludDMyX3QqPih2YWx1ZS5kYXRhKCkpLCB2YWx1ZS5zaXplKCkp
KTsKICAgICB9CiAgICAgdm9pZCBnZXRJbnRlZ2VyNjQodWludDMyX3QgcG5hbWUsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoaW50NjRfdCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiAgICAgewogICAg
ICAgICBHQ0dMaW50NjQgcmV0dXJuVmFsdWUgPSB7IH07CisgICAgICAgIGFzc2VydElzQ3VycmVu
dChtX3N0cmVhbVRocmVhZCk7CiAgICAgICAgIHJldHVyblZhbHVlID0gbV9jb250ZXh0LT5nZXRJ
bnRlZ2VyNjQocG5hbWUpOwogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihzdGF0aWNfY2FzdDxp
bnQ2NF90PihyZXR1cm5WYWx1ZSkpOwogICAgIH0KICAgICB2b2lkIGdldEludGVnZXI2NGkodWlu
dDMyX3QgcG5hbWUsIHVpbnQzMl90IGluZGV4LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGludDY0
X3QpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogICAgIHsKICAgICAgICAgR0NHTGludDY0IHJldHVy
blZhbHVlID0geyB9OworICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOwog
ICAgICAgICByZXR1cm5WYWx1ZSA9IG1fY29udGV4dC0+Z2V0SW50ZWdlcjY0aShwbmFtZSwgaW5k
ZXgpOwogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihzdGF0aWNfY2FzdDxpbnQ2NF90PihyZXR1
cm5WYWx1ZSkpOwogICAgIH0KICAgICB2b2lkIGdldFByb2dyYW1pKHVpbnQzMl90IHByb2dyYW0s
IHVpbnQzMl90IHBuYW1lLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGludDMyX3QpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQogICAgIHsKICAgICAgICAgR0NHTGludCByZXR1cm5WYWx1ZSA9IHsgfTsK
KyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKICAgICAgICAgcmV0dXJu
VmFsdWUgPSBtX2NvbnRleHQtPmdldFByb2dyYW1pKHByb2dyYW0sIHBuYW1lKTsKICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIocmV0dXJuVmFsdWUpOwogICAgIH0KICAgICB2b2lkIGdldEJvb2xl
YW52KHVpbnQzMl90IHBuYW1lLCB1aW50NjRfdCB2YWx1ZVNpemUsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoSVBDOjpBcnJheVJlZmVyZW5jZTxib29sPik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiAg
ICAgewogICAgICAgICBWZWN0b3I8R0NHTGJvb2xlYW4sIDQ+IHZhbHVlKHN0YXRpY19jYXN0PHNp
emVfdD4odmFsdWVTaXplKSwgMCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRo
cmVhZCk7CiAgICAgICAgIG1fY29udGV4dC0+Z2V0Qm9vbGVhbnYocG5hbWUsIHZhbHVlKTsKICAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoSVBDOjpBcnJheVJlZmVyZW5jZTxib29sPihyZWludGVy
cHJldF9jYXN0PGJvb2wqPih2YWx1ZS5kYXRhKCkpLCB2YWx1ZS5zaXplKCkpKTsKICAgICB9CiAg
ICAgdm9pZCBnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpKHVpbnQzMl90IHRhcmdl
dCwgdWludDMyX3QgYXR0YWNobWVudCwgdWludDMyX3QgcG5hbWUsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoaW50MzJfdCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiAgICAgewogICAgICAgICBHQ0dM
aW50IHJldHVyblZhbHVlID0geyB9OworICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1U
aHJlYWQpOwogICAgICAgICByZXR1cm5WYWx1ZSA9IG1fY29udGV4dC0+Z2V0RnJhbWVidWZmZXJB
dHRhY2htZW50UGFyYW1ldGVyaSh0YXJnZXQsIGF0dGFjaG1lbnQsIHBuYW1lKTsKICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIocmV0dXJuVmFsdWUpOwogICAgIH0KICAgICB2b2lkIGdldFByb2dy
YW1JbmZvTG9nKHVpbnQzMl90IGFyZzAsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3RyaW5nJiYp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQogICAgIHsKICAgICAgICAgU3RyaW5nIHJldHVyblZhbHVl
ID0geyB9OworICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOwogICAgICAg
ICByZXR1cm5WYWx1ZSA9IG1fY29udGV4dC0+Z2V0UHJvZ3JhbUluZm9Mb2coYXJnMCk7CiAgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUocmV0dXJuVmFsdWUpKTsKICAgICB9CiAgICAg
dm9pZCBnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpKHVpbnQzMl90IHRhcmdldCwgdWludDMyX3Qg
cG5hbWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoaW50MzJfdCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCiAgICAgewogICAgICAgICBHQ0dMaW50IHJldHVyblZhbHVlID0geyB9OworICAgICAgICBh
c3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOwogICAgICAgICByZXR1cm5WYWx1ZSA9IG1f
Y29udGV4dC0+Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaSh0YXJnZXQsIHBuYW1lKTsKICAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIocmV0dXJuVmFsdWUpOwogICAgIH0KICAgICB2b2lkIGdldFNo
YWRlcmkodWludDMyX3QgYXJnMCwgdWludDMyX3QgcG5hbWUsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoaW50MzJfdCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiAgICAgewogICAgICAgICBHQ0dMaW50
IHJldHVyblZhbHVlID0geyB9OworICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJl
YWQpOwogICAgICAgICByZXR1cm5WYWx1ZSA9IG1fY29udGV4dC0+Z2V0U2hhZGVyaShhcmcwLCBw
bmFtZSk7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHJldHVyblZhbHVlKTsKICAgICB9CiAg
ICAgdm9pZCBnZXRTaGFkZXJJbmZvTG9nKHVpbnQzMl90IGFyZzAsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoU3RyaW5nJiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogICAgIHsKICAgICAgICAgU3Ry
aW5nIHJldHVyblZhbHVlID0geyB9OworICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1U
aHJlYWQpOwogICAgICAgICByZXR1cm5WYWx1ZSA9IG1fY29udGV4dC0+Z2V0U2hhZGVySW5mb0xv
ZyhhcmcwKTsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShyZXR1cm5WYWx1ZSkp
OwogICAgIH0KQEAgLTM0Nyw3OTggKzQxNCw5NzUgQEAKICAgICB7CiAgICAgICAgIHN0ZDo6YXJy
YXk8R0NHTGludCwgMj4gcmFuZ2UgeyB9OwogICAgICAgICBHQ0dMaW50IHByZWNpc2lvbiA9IHsg
fTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKICAgICAgICAgbV9j
b250ZXh0LT5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoc2hhZGVyVHlwZSwgcHJlY2lzaW9uVHlw
ZSwgcmFuZ2UsICZwcmVjaXNpb24pOwogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihJUEM6OkFy
cmF5UmVmZXJlbmNlPGludDMyX3QsIDI+KHJlaW50ZXJwcmV0X2Nhc3Q8aW50MzJfdCo+KHJhbmdl
LmRhdGEoKSksIHJhbmdlLnNpemUoKSksIHByZWNpc2lvbik7CiAgICAgfQogICAgIHZvaWQgZ2V0
U2hhZGVyU291cmNlKHVpbnQzMl90IGFyZzAsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3RyaW5n
JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogICAgIHsKICAgICAgICAgU3RyaW5nIHJldHVyblZh
bHVlID0geyB9OworICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOwogICAg
ICAgICByZXR1cm5WYWx1ZSA9IG1fY29udGV4dC0+Z2V0U2hhZGVyU291cmNlKGFyZzApOwogICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKHJldHVyblZhbHVlKSk7CiAgICAgfQogICAg
IHZvaWQgZ2V0VGV4UGFyYW1ldGVyZih1aW50MzJfdCB0YXJnZXQsIHVpbnQzMl90IHBuYW1lLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKGZsb2F0KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKICAgICB7
CiAgICAgICAgIEdDR0xmbG9hdCByZXR1cm5WYWx1ZSA9IHsgfTsKKyAgICAgICAgYXNzZXJ0SXND
dXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKICAgICAgICAgcmV0dXJuVmFsdWUgPSBtX2NvbnRleHQt
PmdldFRleFBhcmFtZXRlcmYodGFyZ2V0LCBwbmFtZSk7CiAgICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKHJldHVyblZhbHVlKTsKICAgICB9CiAgICAgdm9pZCBnZXRUZXhQYXJhbWV0ZXJpKHVpbnQz
Ml90IHRhcmdldCwgdWludDMyX3QgcG5hbWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoaW50MzJf
dCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiAgICAgewogICAgICAgICBHQ0dMaW50IHJldHVyblZh
bHVlID0geyB9OworICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOwogICAg
ICAgICByZXR1cm5WYWx1ZSA9IG1fY29udGV4dC0+Z2V0VGV4UGFyYW1ldGVyaSh0YXJnZXQsIHBu
YW1lKTsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIocmV0dXJuVmFsdWUpOwogICAgIH0KICAg
ICB2b2lkIGdldFVuaWZvcm1mdih1aW50MzJfdCBwcm9ncmFtLCBpbnQzMl90IGxvY2F0aW9uLCB1
aW50NjRfdCB2YWx1ZVNpemUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoSVBDOjpBcnJheVJlZmVy
ZW5jZTxmbG9hdD4pPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogICAgIHsKICAgICAgICAgVmVjdG9y
PEdDR0xmbG9hdCwgMTY+IHZhbHVlKHN0YXRpY19jYXN0PHNpemVfdD4odmFsdWVTaXplKSwgMCk7
CisgICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CiAgICAgICAgIG1fY29u
dGV4dC0+Z2V0VW5pZm9ybWZ2KHByb2dyYW0sIGxvY2F0aW9uLCB2YWx1ZSk7CiAgICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKElQQzo6QXJyYXlSZWZlcmVuY2U8ZmxvYXQ+KHJlaW50ZXJwcmV0X2Nh
c3Q8ZmxvYXQqPih2YWx1ZS5kYXRhKCkpLCB2YWx1ZS5zaXplKCkpKTsKICAgICB9CiAgICAgdm9p
ZCBnZXRVbmlmb3JtaXYodWludDMyX3QgcHJvZ3JhbSwgaW50MzJfdCBsb2NhdGlvbiwgdWludDY0
X3QgdmFsdWVTaXplLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKElQQzo6QXJyYXlSZWZlcmVuY2U8
aW50MzJfdD4pPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogICAgIHsKICAgICAgICAgVmVjdG9yPEdD
R0xpbnQsIDQ+IHZhbHVlKHN0YXRpY19jYXN0PHNpemVfdD4odmFsdWVTaXplKSwgMCk7CisgICAg
ICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CiAgICAgICAgIG1fY29udGV4dC0+
Z2V0VW5pZm9ybWl2KHByb2dyYW0sIGxvY2F0aW9uLCB2YWx1ZSk7CiAgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKElQQzo6QXJyYXlSZWZlcmVuY2U8aW50MzJfdD4ocmVpbnRlcnByZXRfY2FzdDxp
bnQzMl90Kj4odmFsdWUuZGF0YSgpKSwgdmFsdWUuc2l6ZSgpKSk7CiAgICAgfQogICAgIHZvaWQg
Z2V0VW5pZm9ybXVpdih1aW50MzJfdCBwcm9ncmFtLCBpbnQzMl90IGxvY2F0aW9uLCB1aW50NjRf
dCB2YWx1ZVNpemUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoSVBDOjpBcnJheVJlZmVyZW5jZTx1
aW50MzJfdD4pPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogICAgIHsKICAgICAgICAgVmVjdG9yPEdD
R0x1aW50LCA0PiB2YWx1ZShzdGF0aWNfY2FzdDxzaXplX3Q+KHZhbHVlU2l6ZSksIDApOworICAg
ICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOwogICAgICAgICBtX2NvbnRleHQt
PmdldFVuaWZvcm11aXYocHJvZ3JhbSwgbG9jYXRpb24sIHZhbHVlKTsKICAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIoSVBDOjpBcnJheVJlZmVyZW5jZTx1aW50MzJfdD4ocmVpbnRlcnByZXRfY2Fz
dDx1aW50MzJfdCo+KHZhbHVlLmRhdGEoKSksIHZhbHVlLnNpemUoKSkpOwogICAgIH0KICAgICB2
b2lkIGdldFVuaWZvcm1Mb2NhdGlvbih1aW50MzJfdCBhcmcwLCBTdHJpbmcmJiBuYW1lLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKGludDMyX3QpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogICAgIHsK
ICAgICAgICAgR0NHTGludCByZXR1cm5WYWx1ZSA9IHsgfTsKKyAgICAgICAgYXNzZXJ0SXNDdXJy
ZW50KG1fc3RyZWFtVGhyZWFkKTsKICAgICAgICAgcmV0dXJuVmFsdWUgPSBtX2NvbnRleHQtPmdl
dFVuaWZvcm1Mb2NhdGlvbihhcmcwLCBuYW1lKTsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
cmV0dXJuVmFsdWUpOwogICAgIH0KICAgICB2b2lkIGdldFZlcnRleEF0dHJpYk9mZnNldCh1aW50
MzJfdCBpbmRleCwgdWludDMyX3QgcG5hbWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQodWludDY0
X3QpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogICAgIHsKICAgICAgICAgR0NHTHNpemVpcHRyIHJl
dHVyblZhbHVlID0geyB9OworICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQp
OwogICAgICAgICByZXR1cm5WYWx1ZSA9IG1fY29udGV4dC0+Z2V0VmVydGV4QXR0cmliT2Zmc2V0
KGluZGV4LCBwbmFtZSk7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHN0YXRpY19jYXN0PHVp
bnQ2NF90PihyZXR1cm5WYWx1ZSkpOwogICAgIH0KICAgICB2b2lkIGhpbnQodWludDMyX3QgdGFy
Z2V0LCB1aW50MzJfdCBtb2RlKQogICAgIHsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3Ry
ZWFtVGhyZWFkKTsKICAgICAgICAgbV9jb250ZXh0LT5oaW50KHRhcmdldCwgbW9kZSk7CiAgICAg
fQogICAgIHZvaWQgaXNCdWZmZXIodWludDMyX3QgYXJnMCwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKICAgICB7CiAgICAgICAgIEdDR0xib29sZWFu
IHJldHVyblZhbHVlID0geyB9OworICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJl
YWQpOwogICAgICAgICByZXR1cm5WYWx1ZSA9IG1fY29udGV4dC0+aXNCdWZmZXIoYXJnMCk7CiAg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHN0YXRpY19jYXN0PGJvb2w+KHJldHVyblZhbHVlKSk7
CiAgICAgfQogICAgIHZvaWQgaXNFbmFibGVkKHVpbnQzMl90IGNhcCwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKICAgICB7CiAgICAgICAgIEdDR0xi
b29sZWFuIHJldHVyblZhbHVlID0geyB9OworICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJl
YW1UaHJlYWQpOwogICAgICAgICByZXR1cm5WYWx1ZSA9IG1fY29udGV4dC0+aXNFbmFibGVkKGNh
cCk7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHN0YXRpY19jYXN0PGJvb2w+KHJldHVyblZh
bHVlKSk7CiAgICAgfQogICAgIHZvaWQgaXNGcmFtZWJ1ZmZlcih1aW50MzJfdCBhcmcwLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogICAgIHsKICAg
ICAgICAgR0NHTGJvb2xlYW4gcmV0dXJuVmFsdWUgPSB7IH07CisgICAgICAgIGFzc2VydElzQ3Vy
cmVudChtX3N0cmVhbVRocmVhZCk7CiAgICAgICAgIHJldHVyblZhbHVlID0gbV9jb250ZXh0LT5p
c0ZyYW1lYnVmZmVyKGFyZzApOwogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihzdGF0aWNfY2Fz
dDxib29sPihyZXR1cm5WYWx1ZSkpOwogICAgIH0KICAgICB2b2lkIGlzUHJvZ3JhbSh1aW50MzJf
dCBhcmcwLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQogICAgIHsKICAgICAgICAgR0NHTGJvb2xlYW4gcmV0dXJuVmFsdWUgPSB7IH07CisgICAgICAg
IGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CiAgICAgICAgIHJldHVyblZhbHVlID0g
bV9jb250ZXh0LT5pc1Byb2dyYW0oYXJnMCk7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHN0
YXRpY19jYXN0PGJvb2w+KHJldHVyblZhbHVlKSk7CiAgICAgfQogICAgIHZvaWQgaXNSZW5kZXJi
dWZmZXIodWludDMyX3QgYXJnMCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKICAgICB7CiAgICAgICAgIEdDR0xib29sZWFuIHJldHVyblZhbHVlID0g
eyB9OworICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOwogICAgICAgICBy
ZXR1cm5WYWx1ZSA9IG1fY29udGV4dC0+aXNSZW5kZXJidWZmZXIoYXJnMCk7CiAgICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKHN0YXRpY19jYXN0PGJvb2w+KHJldHVyblZhbHVlKSk7CiAgICAgfQog
ICAgIHZvaWQgaXNTaGFkZXIodWludDMyX3QgYXJnMCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChi
b29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKICAgICB7CiAgICAgICAgIEdDR0xib29sZWFuIHJl
dHVyblZhbHVlID0geyB9OworICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQp
OwogICAgICAgICByZXR1cm5WYWx1ZSA9IG1fY29udGV4dC0+aXNTaGFkZXIoYXJnMCk7CiAgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKHN0YXRpY19jYXN0PGJvb2w+KHJldHVyblZhbHVlKSk7CiAg
ICAgfQogICAgIHZvaWQgaXNUZXh0dXJlKHVpbnQzMl90IGFyZzAsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiAgICAgewogICAgICAgICBHQ0dMYm9v
bGVhbiByZXR1cm5WYWx1ZSA9IHsgfTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFt
VGhyZWFkKTsKICAgICAgICAgcmV0dXJuVmFsdWUgPSBtX2NvbnRleHQtPmlzVGV4dHVyZShhcmcw
KTsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoc3RhdGljX2Nhc3Q8Ym9vbD4ocmV0dXJuVmFs
dWUpKTsKICAgICB9CiAgICAgdm9pZCBsaW5lV2lkdGgoZmxvYXQgYXJnMCkKICAgICB7CisgICAg
ICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CiAgICAgICAgIG1fY29udGV4dC0+
bGluZVdpZHRoKGFyZzApOwogICAgIH0KICAgICB2b2lkIGxpbmtQcm9ncmFtKHVpbnQzMl90IGFy
ZzApCiAgICAgeworICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOwogICAg
ICAgICBtX2NvbnRleHQtPmxpbmtQcm9ncmFtKGFyZzApOwogICAgIH0KICAgICB2b2lkIHBpeGVs
U3RvcmVpKHVpbnQzMl90IHBuYW1lLCBpbnQzMl90IHBhcmFtKQogICAgIHsKKyAgICAgICAgYXNz
ZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKICAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0
b3JlaShwbmFtZSwgcGFyYW0pOwogICAgIH0KICAgICB2b2lkIHBvbHlnb25PZmZzZXQoZmxvYXQg
ZmFjdG9yLCBmbG9hdCB1bml0cykKICAgICB7CisgICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0
cmVhbVRocmVhZCk7CiAgICAgICAgIG1fY29udGV4dC0+cG9seWdvbk9mZnNldChmYWN0b3IsIHVu
aXRzKTsKICAgICB9CiAgICAgdm9pZCByZW5kZXJidWZmZXJTdG9yYWdlKHVpbnQzMl90IHRhcmdl
dCwgdWludDMyX3QgaW50ZXJuYWxmb3JtYXQsIGludDMyX3Qgd2lkdGgsIGludDMyX3QgaGVpZ2h0
KQogICAgIHsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKICAgICAg
ICAgbV9jb250ZXh0LT5yZW5kZXJidWZmZXJTdG9yYWdlKHRhcmdldCwgaW50ZXJuYWxmb3JtYXQs
IHdpZHRoLCBoZWlnaHQpOwogICAgIH0KICAgICB2b2lkIHNhbXBsZUNvdmVyYWdlKGZsb2F0IHZh
bHVlLCBib29sIGludmVydCkKICAgICB7CisgICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVh
bVRocmVhZCk7CiAgICAgICAgIG1fY29udGV4dC0+c2FtcGxlQ292ZXJhZ2UodmFsdWUsIHN0YXRp
Y19jYXN0PEdDR0xib29sZWFuPihpbnZlcnQpKTsKICAgICB9CiAgICAgdm9pZCBzY2lzc29yKGlu
dDMyX3QgeCwgaW50MzJfdCB5LCBpbnQzMl90IHdpZHRoLCBpbnQzMl90IGhlaWdodCkKICAgICB7
CisgICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CiAgICAgICAgIG1fY29u
dGV4dC0+c2Npc3Nvcih4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKICAgICB9CiAgICAgdm9pZCBzaGFk
ZXJTb3VyY2UodWludDMyX3QgYXJnMCwgU3RyaW5nJiYgYXJnMSkKICAgICB7CisgICAgICAgIGFz
c2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CiAgICAgICAgIG1fY29udGV4dC0+c2hhZGVy
U291cmNlKGFyZzAsIGFyZzEpOwogICAgIH0KICAgICB2b2lkIHN0ZW5jaWxGdW5jKHVpbnQzMl90
IGZ1bmMsIGludDMyX3QgcmVmLCB1aW50MzJfdCBtYXNrKQogICAgIHsKKyAgICAgICAgYXNzZXJ0
SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKICAgICAgICAgbV9jb250ZXh0LT5zdGVuY2lsRnVu
YyhmdW5jLCByZWYsIG1hc2spOwogICAgIH0KICAgICB2b2lkIHN0ZW5jaWxGdW5jU2VwYXJhdGUo
dWludDMyX3QgZmFjZSwgdWludDMyX3QgZnVuYywgaW50MzJfdCByZWYsIHVpbnQzMl90IG1hc2sp
CiAgICAgeworICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOwogICAgICAg
ICBtX2NvbnRleHQtPnN0ZW5jaWxGdW5jU2VwYXJhdGUoZmFjZSwgZnVuYywgcmVmLCBtYXNrKTsK
ICAgICB9CiAgICAgdm9pZCBzdGVuY2lsTWFzayh1aW50MzJfdCBtYXNrKQogICAgIHsKKyAgICAg
ICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKICAgICAgICAgbV9jb250ZXh0LT5z
dGVuY2lsTWFzayhtYXNrKTsKICAgICB9CiAgICAgdm9pZCBzdGVuY2lsTWFza1NlcGFyYXRlKHVp
bnQzMl90IGZhY2UsIHVpbnQzMl90IG1hc2spCiAgICAgeworICAgICAgICBhc3NlcnRJc0N1cnJl
bnQobV9zdHJlYW1UaHJlYWQpOwogICAgICAgICBtX2NvbnRleHQtPnN0ZW5jaWxNYXNrU2VwYXJh
dGUoZmFjZSwgbWFzayk7CiAgICAgfQogICAgIHZvaWQgc3RlbmNpbE9wKHVpbnQzMl90IGZhaWws
IHVpbnQzMl90IHpmYWlsLCB1aW50MzJfdCB6cGFzcykKICAgICB7CisgICAgICAgIGFzc2VydElz
Q3VycmVudChtX3N0cmVhbVRocmVhZCk7CiAgICAgICAgIG1fY29udGV4dC0+c3RlbmNpbE9wKGZh
aWwsIHpmYWlsLCB6cGFzcyk7CiAgICAgfQogICAgIHZvaWQgc3RlbmNpbE9wU2VwYXJhdGUodWlu
dDMyX3QgZmFjZSwgdWludDMyX3QgZmFpbCwgdWludDMyX3QgemZhaWwsIHVpbnQzMl90IHpwYXNz
KQogICAgIHsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKICAgICAg
ICAgbV9jb250ZXh0LT5zdGVuY2lsT3BTZXBhcmF0ZShmYWNlLCBmYWlsLCB6ZmFpbCwgenBhc3Mp
OwogICAgIH0KICAgICB2b2lkIHRleFBhcmFtZXRlcmYodWludDMyX3QgdGFyZ2V0LCB1aW50MzJf
dCBwbmFtZSwgZmxvYXQgcGFyYW0pCiAgICAgeworICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9z
dHJlYW1UaHJlYWQpOwogICAgICAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmYodGFyZ2V0LCBw
bmFtZSwgcGFyYW0pOwogICAgIH0KICAgICB2b2lkIHRleFBhcmFtZXRlcmkodWludDMyX3QgdGFy
Z2V0LCB1aW50MzJfdCBwbmFtZSwgaW50MzJfdCBwYXJhbSkKICAgICB7CisgICAgICAgIGFzc2Vy
dElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CiAgICAgICAgIG1fY29udGV4dC0+dGV4UGFyYW1l
dGVyaSh0YXJnZXQsIHBuYW1lLCBwYXJhbSk7CiAgICAgfQogICAgIHZvaWQgdW5pZm9ybTFmKGlu
dDMyX3QgbG9jYXRpb24sIGZsb2F0IHgpCiAgICAgeworICAgICAgICBhc3NlcnRJc0N1cnJlbnQo
bV9zdHJlYW1UaHJlYWQpOwogICAgICAgICBtX2NvbnRleHQtPnVuaWZvcm0xZihsb2NhdGlvbiwg
eCk7CiAgICAgfQogICAgIHZvaWQgdW5pZm9ybTFmdihpbnQzMl90IGxvY2F0aW9uLCBJUEM6OkFy
cmF5UmVmZXJlbmNlPGZsb2F0PiYmIHYpCiAgICAgeworICAgICAgICBhc3NlcnRJc0N1cnJlbnQo
bV9zdHJlYW1UaHJlYWQpOwogICAgICAgICBtX2NvbnRleHQtPnVuaWZvcm0xZnYobG9jYXRpb24s
IG1ha2VHQ0dMU3BhbihyZWludGVycHJldF9jYXN0PGNvbnN0IEdDR0xmbG9hdCo+KHYuZGF0YSgp
KSwgdi5zaXplKCkpKTsKICAgICB9CiAgICAgdm9pZCB1bmlmb3JtMWkoaW50MzJfdCBsb2NhdGlv
biwgaW50MzJfdCB4KQogICAgIHsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhy
ZWFkKTsKICAgICAgICAgbV9jb250ZXh0LT51bmlmb3JtMWkobG9jYXRpb24sIHgpOwogICAgIH0K
ICAgICB2b2lkIHVuaWZvcm0xaXYoaW50MzJfdCBsb2NhdGlvbiwgSVBDOjpBcnJheVJlZmVyZW5j
ZTxpbnQzMl90PiYmIHYpCiAgICAgeworICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1U
aHJlYWQpOwogICAgICAgICBtX2NvbnRleHQtPnVuaWZvcm0xaXYobG9jYXRpb24sIG1ha2VHQ0dM
U3BhbihyZWludGVycHJldF9jYXN0PGNvbnN0IEdDR0xpbnQqPih2LmRhdGEoKSksIHYuc2l6ZSgp
KSk7CiAgICAgfQogICAgIHZvaWQgdW5pZm9ybTJmKGludDMyX3QgbG9jYXRpb24sIGZsb2F0IHgs
IGZsb2F0IHkpCiAgICAgeworICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQp
OwogICAgICAgICBtX2NvbnRleHQtPnVuaWZvcm0yZihsb2NhdGlvbiwgeCwgeSk7CiAgICAgfQog
ICAgIHZvaWQgdW5pZm9ybTJmdihpbnQzMl90IGxvY2F0aW9uLCBJUEM6OkFycmF5UmVmZXJlbmNl
PGZsb2F0PiYmIHYpCiAgICAgeworICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJl
YWQpOwogICAgICAgICBtX2NvbnRleHQtPnVuaWZvcm0yZnYobG9jYXRpb24sIG1ha2VHQ0dMU3Bh
bihyZWludGVycHJldF9jYXN0PGNvbnN0IEdDR0xmbG9hdCo+KHYuZGF0YSgpKSwgdi5zaXplKCkp
KTsKICAgICB9CiAgICAgdm9pZCB1bmlmb3JtMmkoaW50MzJfdCBsb2NhdGlvbiwgaW50MzJfdCB4
LCBpbnQzMl90IHkpCiAgICAgeworICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJl
YWQpOwogICAgICAgICBtX2NvbnRleHQtPnVuaWZvcm0yaShsb2NhdGlvbiwgeCwgeSk7CiAgICAg
fQogICAgIHZvaWQgdW5pZm9ybTJpdihpbnQzMl90IGxvY2F0aW9uLCBJUEM6OkFycmF5UmVmZXJl
bmNlPGludDMyX3Q+JiYgdikKICAgICB7CisgICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVh
bVRocmVhZCk7CiAgICAgICAgIG1fY29udGV4dC0+dW5pZm9ybTJpdihsb2NhdGlvbiwgbWFrZUdD
R0xTcGFuKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0NHTGludCo+KHYuZGF0YSgpKSwgdi5zaXpl
KCkpKTsKICAgICB9CiAgICAgdm9pZCB1bmlmb3JtM2YoaW50MzJfdCBsb2NhdGlvbiwgZmxvYXQg
eCwgZmxvYXQgeSwgZmxvYXQgeikKICAgICB7CisgICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0
cmVhbVRocmVhZCk7CiAgICAgICAgIG1fY29udGV4dC0+dW5pZm9ybTNmKGxvY2F0aW9uLCB4LCB5
LCB6KTsKICAgICB9CiAgICAgdm9pZCB1bmlmb3JtM2Z2KGludDMyX3QgbG9jYXRpb24sIElQQzo6
QXJyYXlSZWZlcmVuY2U8ZmxvYXQ+JiYgdikKICAgICB7CisgICAgICAgIGFzc2VydElzQ3VycmVu
dChtX3N0cmVhbVRocmVhZCk7CiAgICAgICAgIG1fY29udGV4dC0+dW5pZm9ybTNmdihsb2NhdGlv
biwgbWFrZUdDR0xTcGFuKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0NHTGZsb2F0Kj4odi5kYXRh
KCkpLCB2LnNpemUoKSkpOwogICAgIH0KICAgICB2b2lkIHVuaWZvcm0zaShpbnQzMl90IGxvY2F0
aW9uLCBpbnQzMl90IHgsIGludDMyX3QgeSwgaW50MzJfdCB6KQogICAgIHsKKyAgICAgICAgYXNz
ZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKICAgICAgICAgbV9jb250ZXh0LT51bmlmb3Jt
M2kobG9jYXRpb24sIHgsIHksIHopOwogICAgIH0KICAgICB2b2lkIHVuaWZvcm0zaXYoaW50MzJf
dCBsb2NhdGlvbiwgSVBDOjpBcnJheVJlZmVyZW5jZTxpbnQzMl90PiYmIHYpCiAgICAgeworICAg
ICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOwogICAgICAgICBtX2NvbnRleHQt
PnVuaWZvcm0zaXYobG9jYXRpb24sIG1ha2VHQ0dMU3BhbihyZWludGVycHJldF9jYXN0PGNvbnN0
IEdDR0xpbnQqPih2LmRhdGEoKSksIHYuc2l6ZSgpKSk7CiAgICAgfQogICAgIHZvaWQgdW5pZm9y
bTRmKGludDMyX3QgbG9jYXRpb24sIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHosIGZsb2F0IHcp
CiAgICAgeworICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOwogICAgICAg
ICBtX2NvbnRleHQtPnVuaWZvcm00Zihsb2NhdGlvbiwgeCwgeSwgeiwgdyk7CiAgICAgfQogICAg
IHZvaWQgdW5pZm9ybTRmdihpbnQzMl90IGxvY2F0aW9uLCBJUEM6OkFycmF5UmVmZXJlbmNlPGZs
b2F0PiYmIHYpCiAgICAgeworICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQp
OwogICAgICAgICBtX2NvbnRleHQtPnVuaWZvcm00ZnYobG9jYXRpb24sIG1ha2VHQ0dMU3Bhbihy
ZWludGVycHJldF9jYXN0PGNvbnN0IEdDR0xmbG9hdCo+KHYuZGF0YSgpKSwgdi5zaXplKCkpKTsK
ICAgICB9CiAgICAgdm9pZCB1bmlmb3JtNGkoaW50MzJfdCBsb2NhdGlvbiwgaW50MzJfdCB4LCBp
bnQzMl90IHksIGludDMyX3QgeiwgaW50MzJfdCB3KQogICAgIHsKKyAgICAgICAgYXNzZXJ0SXND
dXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKICAgICAgICAgbV9jb250ZXh0LT51bmlmb3JtNGkobG9j
YXRpb24sIHgsIHksIHosIHcpOwogICAgIH0KICAgICB2b2lkIHVuaWZvcm00aXYoaW50MzJfdCBs
b2NhdGlvbiwgSVBDOjpBcnJheVJlZmVyZW5jZTxpbnQzMl90PiYmIHYpCiAgICAgeworICAgICAg
ICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOwogICAgICAgICBtX2NvbnRleHQtPnVu
aWZvcm00aXYobG9jYXRpb24sIG1ha2VHQ0dMU3BhbihyZWludGVycHJldF9jYXN0PGNvbnN0IEdD
R0xpbnQqPih2LmRhdGEoKSksIHYuc2l6ZSgpKSk7CiAgICAgfQogICAgIHZvaWQgdW5pZm9ybU1h
dHJpeDJmdihpbnQzMl90IGxvY2F0aW9uLCBib29sIHRyYW5zcG9zZSwgSVBDOjpBcnJheVJlZmVy
ZW5jZTxmbG9hdD4mJiB2YWx1ZSkKICAgICB7CisgICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0
cmVhbVRocmVhZCk7CiAgICAgICAgIG1fY29udGV4dC0+dW5pZm9ybU1hdHJpeDJmdihsb2NhdGlv
biwgc3RhdGljX2Nhc3Q8R0NHTGJvb2xlYW4+KHRyYW5zcG9zZSksIG1ha2VHQ0dMU3BhbihyZWlu
dGVycHJldF9jYXN0PGNvbnN0IEdDR0xmbG9hdCo+KHZhbHVlLmRhdGEoKSksIHZhbHVlLnNpemUo
KSkpOwogICAgIH0KICAgICB2b2lkIHVuaWZvcm1NYXRyaXgzZnYoaW50MzJfdCBsb2NhdGlvbiwg
Ym9vbCB0cmFuc3Bvc2UsIElQQzo6QXJyYXlSZWZlcmVuY2U8ZmxvYXQ+JiYgdmFsdWUpCiAgICAg
eworICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOwogICAgICAgICBtX2Nv
bnRleHQtPnVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIHN0YXRpY19jYXN0PEdDR0xib29sZWFu
Pih0cmFuc3Bvc2UpLCBtYWtlR0NHTFNwYW4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBHQ0dMZmxv
YXQqPih2YWx1ZS5kYXRhKCkpLCB2YWx1ZS5zaXplKCkpKTsKICAgICB9CiAgICAgdm9pZCB1bmlm
b3JtTWF0cml4NGZ2KGludDMyX3QgbG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCBJUEM6OkFycmF5
UmVmZXJlbmNlPGZsb2F0PiYmIHZhbHVlKQogICAgIHsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50
KG1fc3RyZWFtVGhyZWFkKTsKICAgICAgICAgbV9jb250ZXh0LT51bmlmb3JtTWF0cml4NGZ2KGxv
Y2F0aW9uLCBzdGF0aWNfY2FzdDxHQ0dMYm9vbGVhbj4odHJhbnNwb3NlKSwgbWFrZUdDR0xTcGFu
KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0NHTGZsb2F0Kj4odmFsdWUuZGF0YSgpKSwgdmFsdWUu
c2l6ZSgpKSk7CiAgICAgfQogICAgIHZvaWQgdXNlUHJvZ3JhbSh1aW50MzJfdCBhcmcwKQogICAg
IHsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKICAgICAgICAgbV9j
b250ZXh0LT51c2VQcm9ncmFtKGFyZzApOwogICAgIH0KICAgICB2b2lkIHZhbGlkYXRlUHJvZ3Jh
bSh1aW50MzJfdCBhcmcwKQogICAgIHsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFt
VGhyZWFkKTsKICAgICAgICAgbV9jb250ZXh0LT52YWxpZGF0ZVByb2dyYW0oYXJnMCk7CiAgICAg
fQogICAgIHZvaWQgdmVydGV4QXR0cmliMWYodWludDMyX3QgaW5kZXgsIGZsb2F0IHgpCiAgICAg
eworICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOwogICAgICAgICBtX2Nv
bnRleHQtPnZlcnRleEF0dHJpYjFmKGluZGV4LCB4KTsKICAgICB9CiAgICAgdm9pZCB2ZXJ0ZXhB
dHRyaWIxZnYodWludDMyX3QgaW5kZXgsIElQQzo6QXJyYXlSZWZlcmVuY2U8ZmxvYXQsIDE+JiYg
dmFsdWVzKQogICAgIHsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsK
ICAgICAgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWIxZnYoaW5kZXgsIG1ha2VHQ0dMU3Bhbjwx
PihyZWludGVycHJldF9jYXN0PGNvbnN0IEdDR0xmbG9hdCo+KHZhbHVlcy5kYXRhKCkpKSk7CiAg
ICAgfQogICAgIHZvaWQgdmVydGV4QXR0cmliMmYodWludDMyX3QgaW5kZXgsIGZsb2F0IHgsIGZs
b2F0IHkpCiAgICAgeworICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOwog
ICAgICAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYjJmKGluZGV4LCB4LCB5KTsKICAgICB9CiAg
ICAgdm9pZCB2ZXJ0ZXhBdHRyaWIyZnYodWludDMyX3QgaW5kZXgsIElQQzo6QXJyYXlSZWZlcmVu
Y2U8ZmxvYXQsIDI+JiYgdmFsdWVzKQogICAgIHsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1f
c3RyZWFtVGhyZWFkKTsKICAgICAgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWIyZnYoaW5kZXgs
IG1ha2VHQ0dMU3BhbjwyPihyZWludGVycHJldF9jYXN0PGNvbnN0IEdDR0xmbG9hdCo+KHZhbHVl
cy5kYXRhKCkpKSk7CiAgICAgfQogICAgIHZvaWQgdmVydGV4QXR0cmliM2YodWludDMyX3QgaW5k
ZXgsIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHopCiAgICAgeworICAgICAgICBhc3NlcnRJc0N1
cnJlbnQobV9zdHJlYW1UaHJlYWQpOwogICAgICAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYjNm
KGluZGV4LCB4LCB5LCB6KTsKICAgICB9CiAgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIzZnYodWludDMy
X3QgaW5kZXgsIElQQzo6QXJyYXlSZWZlcmVuY2U8ZmxvYXQsIDM+JiYgdmFsdWVzKQogICAgIHsK
KyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKICAgICAgICAgbV9jb250
ZXh0LT52ZXJ0ZXhBdHRyaWIzZnYoaW5kZXgsIG1ha2VHQ0dMU3BhbjwzPihyZWludGVycHJldF9j
YXN0PGNvbnN0IEdDR0xmbG9hdCo+KHZhbHVlcy5kYXRhKCkpKSk7CiAgICAgfQogICAgIHZvaWQg
dmVydGV4QXR0cmliNGYodWludDMyX3QgaW5kZXgsIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHos
IGZsb2F0IHcpCiAgICAgeworICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQp
OwogICAgICAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYjRmKGluZGV4LCB4LCB5LCB6LCB3KTsK
ICAgICB9CiAgICAgdm9pZCB2ZXJ0ZXhBdHRyaWI0ZnYodWludDMyX3QgaW5kZXgsIElQQzo6QXJy
YXlSZWZlcmVuY2U8ZmxvYXQsIDQ+JiYgdmFsdWVzKQogICAgIHsKKyAgICAgICAgYXNzZXJ0SXND
dXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKICAgICAgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWI0
ZnYoaW5kZXgsIG1ha2VHQ0dMU3Bhbjw0PihyZWludGVycHJldF9jYXN0PGNvbnN0IEdDR0xmbG9h
dCo+KHZhbHVlcy5kYXRhKCkpKSk7CiAgICAgfQogICAgIHZvaWQgdmVydGV4QXR0cmliUG9pbnRl
cih1aW50MzJfdCBpbmRleCwgaW50MzJfdCBzaXplLCB1aW50MzJfdCB0eXBlLCBib29sIG5vcm1h
bGl6ZWQsIGludDMyX3Qgc3RyaWRlLCB1aW50NjRfdCBvZmZzZXQpCiAgICAgeworICAgICAgICBh
c3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOwogICAgICAgICBtX2NvbnRleHQtPnZlcnRl
eEF0dHJpYlBvaW50ZXIoaW5kZXgsIHNpemUsIHR5cGUsIHN0YXRpY19jYXN0PEdDR0xib29sZWFu
Pihub3JtYWxpemVkKSwgc3RyaWRlLCBzdGF0aWNfY2FzdDxHQ0dMaW50cHRyPihvZmZzZXQpKTsK
ICAgICB9CiAgICAgdm9pZCB2aWV3cG9ydChpbnQzMl90IHgsIGludDMyX3QgeSwgaW50MzJfdCB3
aWR0aCwgaW50MzJfdCBoZWlnaHQpCiAgICAgeworICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9z
dHJlYW1UaHJlYWQpOwogICAgICAgICBtX2NvbnRleHQtPnZpZXdwb3J0KHgsIHksIHdpZHRoLCBo
ZWlnaHQpOwogICAgIH0KICAgICB2b2lkIGJ1ZmZlckRhdGEwKHVpbnQzMl90IHRhcmdldCwgdWlu
dDY0X3QgYXJnMSwgdWludDMyX3QgdXNhZ2UpCiAgICAgeworICAgICAgICBhc3NlcnRJc0N1cnJl
bnQobV9zdHJlYW1UaHJlYWQpOwogICAgICAgICBtX2NvbnRleHQtPmJ1ZmZlckRhdGEodGFyZ2V0
LCBzdGF0aWNfY2FzdDxHQ0dMc2l6ZWlwdHI+KGFyZzEpLCB1c2FnZSk7CiAgICAgfQogICAgIHZv
aWQgYnVmZmVyRGF0YTEodWludDMyX3QgdGFyZ2V0LCBJUEM6OkFycmF5UmVmZXJlbmNlPHVpbnQ4
X3Q+JiYgZGF0YSwgdWludDMyX3QgdXNhZ2UpCiAgICAgeworICAgICAgICBhc3NlcnRJc0N1cnJl
bnQobV9zdHJlYW1UaHJlYWQpOwogICAgICAgICBtX2NvbnRleHQtPmJ1ZmZlckRhdGEodGFyZ2V0
LCBtYWtlR0NHTFNwYW4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBHQ0dMdm9pZCo+KGRhdGEuZGF0
YSgpKSwgZGF0YS5zaXplKCkpLCB1c2FnZSk7CiAgICAgfQogICAgIHZvaWQgYnVmZmVyU3ViRGF0
YSh1aW50MzJfdCB0YXJnZXQsIHVpbnQ2NF90IG9mZnNldCwgSVBDOjpBcnJheVJlZmVyZW5jZTx1
aW50OF90PiYmIGRhdGEpCiAgICAgeworICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1U
aHJlYWQpOwogICAgICAgICBtX2NvbnRleHQtPmJ1ZmZlclN1YkRhdGEodGFyZ2V0LCBzdGF0aWNf
Y2FzdDxHQ0dMaW50cHRyPihvZmZzZXQpLCBtYWtlR0NHTFNwYW4ocmVpbnRlcnByZXRfY2FzdDxj
b25zdCBHQ0dMdm9pZCo+KGRhdGEuZGF0YSgpKSwgZGF0YS5zaXplKCkpKTsKICAgICB9CiAgICAg
dm9pZCByZWFkblBpeGVsczAoaW50MzJfdCB4LCBpbnQzMl90IHksIGludDMyX3Qgd2lkdGgsIGlu
dDMyX3QgaGVpZ2h0LCB1aW50MzJfdCBmb3JtYXQsIHVpbnQzMl90IHR5cGUsIHVpbnQ2NF90IGRh
dGFTaXplLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKElQQzo6QXJyYXlSZWZlcmVuY2U8dWludDhf
dD4pPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogICAgIHsKICAgICAgICAgVmVjdG9yPEdDR0xjaGFy
LCA0PiBkYXRhKHN0YXRpY19jYXN0PHNpemVfdD4oZGF0YVNpemUpLCAwKTsKKyAgICAgICAgYXNz
ZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKICAgICAgICAgbV9jb250ZXh0LT5yZWFkblBp
eGVscyh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGRhdGEpOwogICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcihJUEM6OkFycmF5UmVmZXJlbmNlPHVpbnQ4X3Q+KHJlaW50ZXJwcmV0
X2Nhc3Q8dWludDhfdCo+KGRhdGEuZGF0YSgpKSwgZGF0YS5zaXplKCkpKTsKICAgICB9CiAgICAg
dm9pZCByZWFkblBpeGVsczEoaW50MzJfdCB4LCBpbnQzMl90IHksIGludDMyX3Qgd2lkdGgsIGlu
dDMyX3QgaGVpZ2h0LCB1aW50MzJfdCBmb3JtYXQsIHVpbnQzMl90IHR5cGUsIHVpbnQ2NF90IG9m
ZnNldCkKICAgICB7CisgICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CiAg
ICAgICAgIG1fY29udGV4dC0+cmVhZG5QaXhlbHMoeCwgeSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0
LCB0eXBlLCBzdGF0aWNfY2FzdDxHQ0dMaW50cHRyPihvZmZzZXQpKTsKICAgICB9CiAgICAgdm9p
ZCB0ZXhJbWFnZTJEMCh1aW50MzJfdCB0YXJnZXQsIGludDMyX3QgbGV2ZWwsIHVpbnQzMl90IGlu
dGVybmFsZm9ybWF0LCBpbnQzMl90IHdpZHRoLCBpbnQzMl90IGhlaWdodCwgaW50MzJfdCBib3Jk
ZXIsIHVpbnQzMl90IGZvcm1hdCwgdWludDMyX3QgdHlwZSwgSVBDOjpBcnJheVJlZmVyZW5jZTx1
aW50OF90PiYmIHBpeGVscykKICAgICB7CisgICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVh
bVRocmVhZCk7CiAgICAgICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBp
bnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIG1ha2VH
Q0dMU3BhbihyZWludGVycHJldF9jYXN0PGNvbnN0IEdDR0x2b2lkKj4ocGl4ZWxzLmRhdGEoKSks
IHBpeGVscy5zaXplKCkpKTsKICAgICB9CiAgICAgdm9pZCB0ZXhJbWFnZTJEMSh1aW50MzJfdCB0
YXJnZXQsIGludDMyX3QgbGV2ZWwsIHVpbnQzMl90IGludGVybmFsZm9ybWF0LCBpbnQzMl90IHdp
ZHRoLCBpbnQzMl90IGhlaWdodCwgaW50MzJfdCBib3JkZXIsIHVpbnQzMl90IGZvcm1hdCwgdWlu
dDMyX3QgdHlwZSwgdWludDY0X3Qgb2Zmc2V0KQogICAgIHsKKyAgICAgICAgYXNzZXJ0SXNDdXJy
ZW50KG1fc3RyZWFtVGhyZWFkKTsKICAgICAgICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEKHRhcmdl
dCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwg
dHlwZSwgc3RhdGljX2Nhc3Q8R0NHTGludHB0cj4ob2Zmc2V0KSk7CiAgICAgfQogICAgIHZvaWQg
dGV4U3ViSW1hZ2UyRDAodWludDMyX3QgdGFyZ2V0LCBpbnQzMl90IGxldmVsLCBpbnQzMl90IHhv
ZmZzZXQsIGludDMyX3QgeW9mZnNldCwgaW50MzJfdCB3aWR0aCwgaW50MzJfdCBoZWlnaHQsIHVp
bnQzMl90IGZvcm1hdCwgdWludDMyX3QgdHlwZSwgSVBDOjpBcnJheVJlZmVyZW5jZTx1aW50OF90
PiYmIHBpeGVscykKICAgICB7CisgICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVh
ZCk7CiAgICAgICAgIG1fY29udGV4dC0+dGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zm
c2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIG1ha2VHQ0dMU3Bhbihy
ZWludGVycHJldF9jYXN0PGNvbnN0IEdDR0x2b2lkKj4ocGl4ZWxzLmRhdGEoKSksIHBpeGVscy5z
aXplKCkpKTsKICAgICB9CiAgICAgdm9pZCB0ZXhTdWJJbWFnZTJEMSh1aW50MzJfdCB0YXJnZXQs
IGludDMyX3QgbGV2ZWwsIGludDMyX3QgeG9mZnNldCwgaW50MzJfdCB5b2Zmc2V0LCBpbnQzMl90
IHdpZHRoLCBpbnQzMl90IGhlaWdodCwgdWludDMyX3QgZm9ybWF0LCB1aW50MzJfdCB0eXBlLCB1
aW50NjRfdCBvZmZzZXQpCiAgICAgeworICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1U
aHJlYWQpOwogICAgICAgICBtX2NvbnRleHQtPnRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwg
eG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBzdGF0aWNfY2Fz
dDxHQ0dMaW50cHRyPihvZmZzZXQpKTsKICAgICB9CiAgICAgdm9pZCBjb21wcmVzc2VkVGV4SW1h
Z2UyRDAodWludDMyX3QgdGFyZ2V0LCBpbnQzMl90IGxldmVsLCB1aW50MzJfdCBpbnRlcm5hbGZv
cm1hdCwgaW50MzJfdCB3aWR0aCwgaW50MzJfdCBoZWlnaHQsIGludDMyX3QgYm9yZGVyLCBpbnQz
Ml90IGltYWdlU2l6ZSwgSVBDOjpBcnJheVJlZmVyZW5jZTx1aW50OF90PiYmIGRhdGEpCiAgICAg
eworICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOwogICAgICAgICBtX2Nv
bnRleHQtPmNvbXByZXNzZWRUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0
LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGltYWdlU2l6ZSwgbWFrZUdDR0xTcGFuKHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgR0NHTHZvaWQqPihkYXRhLmRhdGEoKSksIGRhdGEuc2l6ZSgpKSk7CiAg
ICAgfQogICAgIHZvaWQgY29tcHJlc3NlZFRleEltYWdlMkQxKHVpbnQzMl90IHRhcmdldCwgaW50
MzJfdCBsZXZlbCwgdWludDMyX3QgaW50ZXJuYWxmb3JtYXQsIGludDMyX3Qgd2lkdGgsIGludDMy
X3QgaGVpZ2h0LCBpbnQzMl90IGJvcmRlciwgaW50MzJfdCBpbWFnZVNpemUsIHVpbnQ2NF90IG9m
ZnNldCkKICAgICB7CisgICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CiAg
ICAgICAgIG1fY29udGV4dC0+Y29tcHJlc3NlZFRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50
ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgaW1hZ2VTaXplLCBzdGF0aWNfY2Fz
dDxHQ0dMaW50cHRyPihvZmZzZXQpKTsKICAgICB9CiAgICAgdm9pZCBjb21wcmVzc2VkVGV4U3Vi
SW1hZ2UyRDAodWludDMyX3QgdGFyZ2V0LCBpbnQzMl90IGxldmVsLCBpbnQzMl90IHhvZmZzZXQs
IGludDMyX3QgeW9mZnNldCwgaW50MzJfdCB3aWR0aCwgaW50MzJfdCBoZWlnaHQsIHVpbnQzMl90
IGZvcm1hdCwgaW50MzJfdCBpbWFnZVNpemUsIElQQzo6QXJyYXlSZWZlcmVuY2U8dWludDhfdD4m
JiBkYXRhKQogICAgIHsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsK
ICAgICAgICAgbV9jb250ZXh0LT5jb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVs
LCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIGltYWdlU2l6ZSwgbWFr
ZUdDR0xTcGFuKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0NHTHZvaWQqPihkYXRhLmRhdGEoKSks
IGRhdGEuc2l6ZSgpKSk7CiAgICAgfQogICAgIHZvaWQgY29tcHJlc3NlZFRleFN1YkltYWdlMkQx
KHVpbnQzMl90IHRhcmdldCwgaW50MzJfdCBsZXZlbCwgaW50MzJfdCB4b2Zmc2V0LCBpbnQzMl90
IHlvZmZzZXQsIGludDMyX3Qgd2lkdGgsIGludDMyX3QgaGVpZ2h0LCB1aW50MzJfdCBmb3JtYXQs
IGludDMyX3QgaW1hZ2VTaXplLCB1aW50NjRfdCBvZmZzZXQpCiAgICAgeworICAgICAgICBhc3Nl
cnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOwogICAgICAgICBtX2NvbnRleHQtPmNvbXByZXNz
ZWRUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBo
ZWlnaHQsIGZvcm1hdCwgaW1hZ2VTaXplLCBzdGF0aWNfY2FzdDxHQ0dMaW50cHRyPihvZmZzZXQp
KTsKICAgICB9CiAgICAgdm9pZCBkcmF3QXJyYXlzSW5zdGFuY2VkKHVpbnQzMl90IG1vZGUsIGlu
dDMyX3QgZmlyc3QsIGludDMyX3QgY291bnQsIGludDMyX3QgcHJpbWNvdW50KQogICAgIHsKKyAg
ICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKICAgICAgICAgbV9jb250ZXh0
LT5kcmF3QXJyYXlzSW5zdGFuY2VkKG1vZGUsIGZpcnN0LCBjb3VudCwgcHJpbWNvdW50KTsKICAg
ICB9CiAgICAgdm9pZCBkcmF3RWxlbWVudHNJbnN0YW5jZWQodWludDMyX3QgbW9kZSwgaW50MzJf
dCBjb3VudCwgdWludDMyX3QgdHlwZSwgdWludDY0X3Qgb2Zmc2V0LCBpbnQzMl90IHByaW1jb3Vu
dCkKICAgICB7CisgICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CiAgICAg
ICAgIG1fY29udGV4dC0+ZHJhd0VsZW1lbnRzSW5zdGFuY2VkKG1vZGUsIGNvdW50LCB0eXBlLCBz
dGF0aWNfY2FzdDxHQ0dMaW50cHRyPihvZmZzZXQpLCBwcmltY291bnQpOwogICAgIH0KICAgICB2
b2lkIHZlcnRleEF0dHJpYkRpdmlzb3IodWludDMyX3QgaW5kZXgsIHVpbnQzMl90IGRpdmlzb3Ip
CiAgICAgeworICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOwogICAgICAg
ICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYkRpdmlzb3IoaW5kZXgsIGRpdmlzb3IpOwogICAgIH0K
ICAgICB2b2lkIGNyZWF0ZVZlcnRleEFycmF5KENvbXBsZXRpb25IYW5kbGVyPHZvaWQodWludDMy
X3QpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogICAgIHsKICAgICAgICAgUGxhdGZvcm1HTE9iamVj
dCByZXR1cm5WYWx1ZSA9IHsgfTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhy
ZWFkKTsKICAgICAgICAgcmV0dXJuVmFsdWUgPSBtX2NvbnRleHQtPmNyZWF0ZVZlcnRleEFycmF5
KCk7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHJldHVyblZhbHVlKTsKICAgICB9CiAgICAg
dm9pZCBkZWxldGVWZXJ0ZXhBcnJheSh1aW50MzJfdCBhcmcwKQogICAgIHsKKyAgICAgICAgYXNz
ZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKICAgICAgICAgbV9jb250ZXh0LT5kZWxldGVW
ZXJ0ZXhBcnJheShhcmcwKTsKICAgICB9CiAgICAgdm9pZCBpc1ZlcnRleEFycmF5KHVpbnQzMl90
IGFyZzAsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
CiAgICAgewogICAgICAgICBHQ0dMYm9vbGVhbiByZXR1cm5WYWx1ZSA9IHsgfTsKKyAgICAgICAg
YXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKICAgICAgICAgcmV0dXJuVmFsdWUgPSBt
X2NvbnRleHQtPmlzVmVydGV4QXJyYXkoYXJnMCk7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KHN0YXRpY19jYXN0PGJvb2w+KHJldHVyblZhbHVlKSk7CiAgICAgfQogICAgIHZvaWQgYmluZFZl
cnRleEFycmF5KHVpbnQzMl90IGFyZzApCiAgICAgeworICAgICAgICBhc3NlcnRJc0N1cnJlbnQo
bV9zdHJlYW1UaHJlYWQpOwogICAgICAgICBtX2NvbnRleHQtPmJpbmRWZXJ0ZXhBcnJheShhcmcw
KTsKICAgICB9CiAgICAgdm9pZCBjb3B5QnVmZmVyU3ViRGF0YSh1aW50MzJfdCByZWFkVGFyZ2V0
LCB1aW50MzJfdCB3cml0ZVRhcmdldCwgdWludDY0X3QgcmVhZE9mZnNldCwgdWludDY0X3Qgd3Jp
dGVPZmZzZXQsIHVpbnQ2NF90IGFyZzQpCiAgICAgeworICAgICAgICBhc3NlcnRJc0N1cnJlbnQo
bV9zdHJlYW1UaHJlYWQpOwogICAgICAgICBtX2NvbnRleHQtPmNvcHlCdWZmZXJTdWJEYXRhKHJl
YWRUYXJnZXQsIHdyaXRlVGFyZ2V0LCBzdGF0aWNfY2FzdDxHQ0dMaW50cHRyPihyZWFkT2Zmc2V0
KSwgc3RhdGljX2Nhc3Q8R0NHTGludHB0cj4od3JpdGVPZmZzZXQpLCBzdGF0aWNfY2FzdDxHQ0dM
c2l6ZWlwdHI+KGFyZzQpKTsKICAgICB9CiAgICAgdm9pZCBnZXRCdWZmZXJTdWJEYXRhKHVpbnQz
Ml90IHRhcmdldCwgdWludDY0X3Qgb2Zmc2V0LCB1aW50NjRfdCBkYXRhU2l6ZSwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChJUEM6OkFycmF5UmVmZXJlbmNlPHVpbnQ4X3Q+KT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKICAgICB7CiAgICAgICAgIFZlY3RvcjxHQ0dMY2hhciwgND4gZGF0YShzdGF0aWNf
Y2FzdDxzaXplX3Q+KGRhdGFTaXplKSwgMCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0
cmVhbVRocmVhZCk7CiAgICAgICAgIG1fY29udGV4dC0+Z2V0QnVmZmVyU3ViRGF0YSh0YXJnZXQs
IHN0YXRpY19jYXN0PEdDR0xpbnRwdHI+KG9mZnNldCksIGRhdGEpOwogICAgICAgICBjb21wbGV0
aW9uSGFuZGxlcihJUEM6OkFycmF5UmVmZXJlbmNlPHVpbnQ4X3Q+KHJlaW50ZXJwcmV0X2Nhc3Q8
dWludDhfdCo+KGRhdGEuZGF0YSgpKSwgZGF0YS5zaXplKCkpKTsKICAgICB9CiAgICAgdm9pZCBi
bGl0RnJhbWVidWZmZXIoaW50MzJfdCBzcmNYMCwgaW50MzJfdCBzcmNZMCwgaW50MzJfdCBzcmNY
MSwgaW50MzJfdCBzcmNZMSwgaW50MzJfdCBkc3RYMCwgaW50MzJfdCBkc3RZMCwgaW50MzJfdCBk
c3RYMSwgaW50MzJfdCBkc3RZMSwgdWludDMyX3QgbWFzaywgdWludDMyX3QgZmlsdGVyKQogICAg
IHsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKICAgICAgICAgbV9j
b250ZXh0LT5ibGl0RnJhbWVidWZmZXIoc3JjWDAsIHNyY1kwLCBzcmNYMSwgc3JjWTEsIGRzdFgw
LCBkc3RZMCwgZHN0WDEsIGRzdFkxLCBtYXNrLCBmaWx0ZXIpOwogICAgIH0KICAgICB2b2lkIGZy
YW1lYnVmZmVyVGV4dHVyZUxheWVyKHVpbnQzMl90IHRhcmdldCwgdWludDMyX3QgYXR0YWNobWVu
dCwgdWludDMyX3QgdGV4dHVyZSwgaW50MzJfdCBsZXZlbCwgaW50MzJfdCBsYXllcikKICAgICB7
CisgICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CiAgICAgICAgIG1fY29u
dGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlTGF5ZXIodGFyZ2V0LCBhdHRhY2htZW50LCB0ZXh0dXJl
LCBsZXZlbCwgbGF5ZXIpOwogICAgIH0KICAgICB2b2lkIGludmFsaWRhdGVGcmFtZWJ1ZmZlcih1
aW50MzJfdCB0YXJnZXQsIElQQzo6QXJyYXlSZWZlcmVuY2U8dWludDMyX3Q+JiYgYXR0YWNobWVu
dHMpCiAgICAgeworICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOwogICAg
ICAgICBtX2NvbnRleHQtPmludmFsaWRhdGVGcmFtZWJ1ZmZlcih0YXJnZXQsIG1ha2VHQ0dMU3Bh
bihyZWludGVycHJldF9jYXN0PGNvbnN0IEdDR0xlbnVtKj4oYXR0YWNobWVudHMuZGF0YSgpKSwg
YXR0YWNobWVudHMuc2l6ZSgpKSk7CiAgICAgfQogICAgIHZvaWQgaW52YWxpZGF0ZVN1YkZyYW1l
YnVmZmVyKHVpbnQzMl90IHRhcmdldCwgSVBDOjpBcnJheVJlZmVyZW5jZTx1aW50MzJfdD4mJiBh
dHRhY2htZW50cywgaW50MzJfdCB4LCBpbnQzMl90IHksIGludDMyX3Qgd2lkdGgsIGludDMyX3Qg
aGVpZ2h0KQogICAgIHsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsK
ICAgICAgICAgbV9jb250ZXh0LT5pbnZhbGlkYXRlU3ViRnJhbWVidWZmZXIodGFyZ2V0LCBtYWtl
R0NHTFNwYW4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBHQ0dMZW51bSo+KGF0dGFjaG1lbnRzLmRh
dGEoKSksIGF0dGFjaG1lbnRzLnNpemUoKSksIHgsIHksIHdpZHRoLCBoZWlnaHQpOwogICAgIH0K
ICAgICB2b2lkIHJlYWRCdWZmZXIodWludDMyX3Qgc3JjKQogICAgIHsKKyAgICAgICAgYXNzZXJ0
SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKICAgICAgICAgbV9jb250ZXh0LT5yZWFkQnVmZmVy
KHNyYyk7CiAgICAgfQogICAgIHZvaWQgcmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKHVp
bnQzMl90IHRhcmdldCwgaW50MzJfdCBzYW1wbGVzLCB1aW50MzJfdCBpbnRlcm5hbGZvcm1hdCwg
aW50MzJfdCB3aWR0aCwgaW50MzJfdCBoZWlnaHQpCiAgICAgeworICAgICAgICBhc3NlcnRJc0N1
cnJlbnQobV9zdHJlYW1UaHJlYWQpOwogICAgICAgICBtX2NvbnRleHQtPnJlbmRlcmJ1ZmZlclN0
b3JhZ2VNdWx0aXNhbXBsZSh0YXJnZXQsIHNhbXBsZXMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwg
aGVpZ2h0KTsKICAgICB9CiAgICAgdm9pZCB0ZXhTdG9yYWdlMkQodWludDMyX3QgdGFyZ2V0LCBp
bnQzMl90IGxldmVscywgdWludDMyX3QgaW50ZXJuYWxmb3JtYXQsIGludDMyX3Qgd2lkdGgsIGlu
dDMyX3QgaGVpZ2h0KQogICAgIHsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhy
ZWFkKTsKICAgICAgICAgbV9jb250ZXh0LT50ZXhTdG9yYWdlMkQodGFyZ2V0LCBsZXZlbHMsIGlu
dGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKICAgICB9CiAgICAgdm9pZCB0ZXhTdG9yYWdl
M0QodWludDMyX3QgdGFyZ2V0LCBpbnQzMl90IGxldmVscywgdWludDMyX3QgaW50ZXJuYWxmb3Jt
YXQsIGludDMyX3Qgd2lkdGgsIGludDMyX3QgaGVpZ2h0LCBpbnQzMl90IGRlcHRoKQogICAgIHsK
KyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKICAgICAgICAgbV9jb250
ZXh0LT50ZXhTdG9yYWdlM0QodGFyZ2V0LCBsZXZlbHMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwg
aGVpZ2h0LCBkZXB0aCk7CiAgICAgfQogICAgIHZvaWQgdGV4SW1hZ2UzRDAodWludDMyX3QgdGFy
Z2V0LCBpbnQzMl90IGxldmVsLCBpbnQzMl90IGludGVybmFsZm9ybWF0LCBpbnQzMl90IHdpZHRo
LCBpbnQzMl90IGhlaWdodCwgaW50MzJfdCBkZXB0aCwgaW50MzJfdCBib3JkZXIsIHVpbnQzMl90
IGZvcm1hdCwgdWludDMyX3QgdHlwZSwgSVBDOjpBcnJheVJlZmVyZW5jZTx1aW50OF90PiYmIHBp
eGVscykKICAgICB7CisgICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CiAg
ICAgICAgIG1fY29udGV4dC0+dGV4SW1hZ2UzRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1h
dCwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBtYWtlR0NHTFNw
YW4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBHQ0dMdm9pZCo+KHBpeGVscy5kYXRhKCkpLCBwaXhl
bHMuc2l6ZSgpKSk7CiAgICAgfQogICAgIHZvaWQgdGV4SW1hZ2UzRDEodWludDMyX3QgdGFyZ2V0
LCBpbnQzMl90IGxldmVsLCBpbnQzMl90IGludGVybmFsZm9ybWF0LCBpbnQzMl90IHdpZHRoLCBp
bnQzMl90IGhlaWdodCwgaW50MzJfdCBkZXB0aCwgaW50MzJfdCBib3JkZXIsIHVpbnQzMl90IGZv
cm1hdCwgdWludDMyX3QgdHlwZSwgdWludDY0X3Qgb2Zmc2V0KQogICAgIHsKKyAgICAgICAgYXNz
ZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKICAgICAgICAgbV9jb250ZXh0LT50ZXhJbWFn
ZTNEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwg
Ym9yZGVyLCBmb3JtYXQsIHR5cGUsIHN0YXRpY19jYXN0PEdDR0xpbnRwdHI+KG9mZnNldCkpOwog
ICAgIH0KICAgICB2b2lkIHRleFN1YkltYWdlM0QwKHVpbnQzMl90IHRhcmdldCwgaW50MzJfdCBs
ZXZlbCwgaW50MzJfdCB4b2Zmc2V0LCBpbnQzMl90IHlvZmZzZXQsIGludDMyX3Qgem9mZnNldCwg
aW50MzJfdCB3aWR0aCwgaW50MzJfdCBoZWlnaHQsIGludDMyX3QgZGVwdGgsIHVpbnQzMl90IGZv
cm1hdCwgdWludDMyX3QgdHlwZSwgSVBDOjpBcnJheVJlZmVyZW5jZTx1aW50OF90PiYmIHBpeGVs
cykKICAgICB7CisgICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CiAgICAg
ICAgIG1fY29udGV4dC0+dGV4U3ViSW1hZ2UzRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zm
c2V0LCB6b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgZm9ybWF0LCB0eXBlLCBtYWtlR0NH
TFNwYW4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBHQ0dMdm9pZCo+KHBpeGVscy5kYXRhKCkpLCBw
aXhlbHMuc2l6ZSgpKSk7CiAgICAgfQogICAgIHZvaWQgdGV4U3ViSW1hZ2UzRDEodWludDMyX3Qg
dGFyZ2V0LCBpbnQzMl90IGxldmVsLCBpbnQzMl90IHhvZmZzZXQsIGludDMyX3QgeW9mZnNldCwg
aW50MzJfdCB6b2Zmc2V0LCBpbnQzMl90IHdpZHRoLCBpbnQzMl90IGhlaWdodCwgaW50MzJfdCBk
ZXB0aCwgdWludDMyX3QgZm9ybWF0LCB1aW50MzJfdCB0eXBlLCB1aW50NjRfdCBvZmZzZXQpCiAg
ICAgeworICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOwogICAgICAgICBt
X2NvbnRleHQtPnRleFN1YkltYWdlM0QodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwg
em9mZnNldCwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIGZvcm1hdCwgdHlwZSwgc3RhdGljX2Nhc3Q8
R0NHTGludHB0cj4ob2Zmc2V0KSk7CiAgICAgfQogICAgIHZvaWQgY29weVRleFN1YkltYWdlM0Qo
dWludDMyX3QgdGFyZ2V0LCBpbnQzMl90IGxldmVsLCBpbnQzMl90IHhvZmZzZXQsIGludDMyX3Qg
eW9mZnNldCwgaW50MzJfdCB6b2Zmc2V0LCBpbnQzMl90IHgsIGludDMyX3QgeSwgaW50MzJfdCB3
aWR0aCwgaW50MzJfdCBoZWlnaHQpCiAgICAgeworICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9z
dHJlYW1UaHJlYWQpOwogICAgICAgICBtX2NvbnRleHQtPmNvcHlUZXhTdWJJbWFnZTNEKHRhcmdl
dCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQsIHgsIHksIHdpZHRoLCBoZWlnaHQp
OwogICAgIH0KICAgICB2b2lkIGNvbXByZXNzZWRUZXhJbWFnZTNEMCh1aW50MzJfdCB0YXJnZXQs
IGludDMyX3QgbGV2ZWwsIHVpbnQzMl90IGludGVybmFsZm9ybWF0LCBpbnQzMl90IHdpZHRoLCBp
bnQzMl90IGhlaWdodCwgaW50MzJfdCBkZXB0aCwgaW50MzJfdCBib3JkZXIsIGludDMyX3QgaW1h
Z2VTaXplLCBJUEM6OkFycmF5UmVmZXJlbmNlPHVpbnQ4X3Q+JiYgZGF0YSkKICAgICB7CisgICAg
ICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CiAgICAgICAgIG1fY29udGV4dC0+
Y29tcHJlc3NlZFRleEltYWdlM0QodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRo
LCBoZWlnaHQsIGRlcHRoLCBib3JkZXIsIGltYWdlU2l6ZSwgbWFrZUdDR0xTcGFuKHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgR0NHTHZvaWQqPihkYXRhLmRhdGEoKSksIGRhdGEuc2l6ZSgpKSk7CiAg
ICAgfQogICAgIHZvaWQgY29tcHJlc3NlZFRleEltYWdlM0QxKHVpbnQzMl90IHRhcmdldCwgaW50
MzJfdCBsZXZlbCwgdWludDMyX3QgaW50ZXJuYWxmb3JtYXQsIGludDMyX3Qgd2lkdGgsIGludDMy
X3QgaGVpZ2h0LCBpbnQzMl90IGRlcHRoLCBpbnQzMl90IGJvcmRlciwgaW50MzJfdCBpbWFnZVNp
emUsIHVpbnQ2NF90IG9mZnNldCkKICAgICB7CisgICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0
cmVhbVRocmVhZCk7CiAgICAgICAgIG1fY29udGV4dC0+Y29tcHJlc3NlZFRleEltYWdlM0QodGFy
Z2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBib3JkZXIs
IGltYWdlU2l6ZSwgc3RhdGljX2Nhc3Q8R0NHTGludHB0cj4ob2Zmc2V0KSk7CiAgICAgfQogICAg
IHZvaWQgY29tcHJlc3NlZFRleFN1YkltYWdlM0QwKHVpbnQzMl90IHRhcmdldCwgaW50MzJfdCBs
ZXZlbCwgaW50MzJfdCB4b2Zmc2V0LCBpbnQzMl90IHlvZmZzZXQsIGludDMyX3Qgem9mZnNldCwg
aW50MzJfdCB3aWR0aCwgaW50MzJfdCBoZWlnaHQsIGludDMyX3QgZGVwdGgsIHVpbnQzMl90IGZv
cm1hdCwgaW50MzJfdCBpbWFnZVNpemUsIElQQzo6QXJyYXlSZWZlcmVuY2U8dWludDhfdD4mJiBk
YXRhKQogICAgIHsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKICAg
ICAgICAgbV9jb250ZXh0LT5jb21wcmVzc2VkVGV4U3ViSW1hZ2UzRCh0YXJnZXQsIGxldmVsLCB4
b2Zmc2V0LCB5b2Zmc2V0LCB6b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgZm9ybWF0LCBp
bWFnZVNpemUsIG1ha2VHQ0dMU3BhbihyZWludGVycHJldF9jYXN0PGNvbnN0IEdDR0x2b2lkKj4o
ZGF0YS5kYXRhKCkpLCBkYXRhLnNpemUoKSkpOwogICAgIH0KICAgICB2b2lkIGNvbXByZXNzZWRU
ZXhTdWJJbWFnZTNEMSh1aW50MzJfdCB0YXJnZXQsIGludDMyX3QgbGV2ZWwsIGludDMyX3QgeG9m
ZnNldCwgaW50MzJfdCB5b2Zmc2V0LCBpbnQzMl90IHpvZmZzZXQsIGludDMyX3Qgd2lkdGgsIGlu
dDMyX3QgaGVpZ2h0LCBpbnQzMl90IGRlcHRoLCB1aW50MzJfdCBmb3JtYXQsIGludDMyX3QgaW1h
Z2VTaXplLCB1aW50NjRfdCBvZmZzZXQpCiAgICAgeworICAgICAgICBhc3NlcnRJc0N1cnJlbnQo
bV9zdHJlYW1UaHJlYWQpOwogICAgICAgICBtX2NvbnRleHQtPmNvbXByZXNzZWRUZXhTdWJJbWFn
ZTNEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQsIHdpZHRoLCBoZWln
aHQsIGRlcHRoLCBmb3JtYXQsIGltYWdlU2l6ZSwgc3RhdGljX2Nhc3Q8R0NHTGludHB0cj4ob2Zm
c2V0KSk7CiAgICAgfQogICAgIHZvaWQgZ2V0RnJhZ0RhdGFMb2NhdGlvbih1aW50MzJfdCBwcm9n
cmFtLCBTdHJpbmcmJiBuYW1lLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGludDMyX3QpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQogICAgIHsKICAgICAgICAgR0NHTGludCByZXR1cm5WYWx1ZSA9IHsg
fTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKICAgICAgICAgcmV0
dXJuVmFsdWUgPSBtX2NvbnRleHQtPmdldEZyYWdEYXRhTG9jYXRpb24ocHJvZ3JhbSwgbmFtZSk7
CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHJldHVyblZhbHVlKTsKICAgICB9CiAgICAgdm9p
ZCB1bmlmb3JtMXVpKGludDMyX3QgbG9jYXRpb24sIHVpbnQzMl90IHYwKQogICAgIHsKKyAgICAg
ICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKICAgICAgICAgbV9jb250ZXh0LT51
bmlmb3JtMXVpKGxvY2F0aW9uLCB2MCk7CiAgICAgfQogICAgIHZvaWQgdW5pZm9ybTJ1aShpbnQz
Ml90IGxvY2F0aW9uLCB1aW50MzJfdCB2MCwgdWludDMyX3QgdjEpCiAgICAgeworICAgICAgICBh
c3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOwogICAgICAgICBtX2NvbnRleHQtPnVuaWZv
cm0ydWkobG9jYXRpb24sIHYwLCB2MSk7CiAgICAgfQogICAgIHZvaWQgdW5pZm9ybTN1aShpbnQz
Ml90IGxvY2F0aW9uLCB1aW50MzJfdCB2MCwgdWludDMyX3QgdjEsIHVpbnQzMl90IHYyKQogICAg
IHsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKICAgICAgICAgbV9j
b250ZXh0LT51bmlmb3JtM3VpKGxvY2F0aW9uLCB2MCwgdjEsIHYyKTsKICAgICB9CiAgICAgdm9p
ZCB1bmlmb3JtNHVpKGludDMyX3QgbG9jYXRpb24sIHVpbnQzMl90IHYwLCB1aW50MzJfdCB2MSwg
dWludDMyX3QgdjIsIHVpbnQzMl90IHYzKQogICAgIHsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50
KG1fc3RyZWFtVGhyZWFkKTsKICAgICAgICAgbV9jb250ZXh0LT51bmlmb3JtNHVpKGxvY2F0aW9u
LCB2MCwgdjEsIHYyLCB2Myk7CiAgICAgfQogICAgIHZvaWQgdW5pZm9ybTF1aXYoaW50MzJfdCBs
b2NhdGlvbiwgSVBDOjpBcnJheVJlZmVyZW5jZTx1aW50MzJfdD4mJiBkYXRhKQogICAgIHsKKyAg
ICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKICAgICAgICAgbV9jb250ZXh0
LT51bmlmb3JtMXVpdihsb2NhdGlvbiwgbWFrZUdDR0xTcGFuKHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgR0NHTHVpbnQqPihkYXRhLmRhdGEoKSksIGRhdGEuc2l6ZSgpKSk7CiAgICAgfQogICAgIHZv
aWQgdW5pZm9ybTJ1aXYoaW50MzJfdCBsb2NhdGlvbiwgSVBDOjpBcnJheVJlZmVyZW5jZTx1aW50
MzJfdD4mJiBkYXRhKQogICAgIHsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhy
ZWFkKTsKICAgICAgICAgbV9jb250ZXh0LT51bmlmb3JtMnVpdihsb2NhdGlvbiwgbWFrZUdDR0xT
cGFuKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0NHTHVpbnQqPihkYXRhLmRhdGEoKSksIGRhdGEu
c2l6ZSgpKSk7CiAgICAgfQogICAgIHZvaWQgdW5pZm9ybTN1aXYoaW50MzJfdCBsb2NhdGlvbiwg
SVBDOjpBcnJheVJlZmVyZW5jZTx1aW50MzJfdD4mJiBkYXRhKQogICAgIHsKKyAgICAgICAgYXNz
ZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKICAgICAgICAgbV9jb250ZXh0LT51bmlmb3Jt
M3Vpdihsb2NhdGlvbiwgbWFrZUdDR0xTcGFuKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0NHTHVp
bnQqPihkYXRhLmRhdGEoKSksIGRhdGEuc2l6ZSgpKSk7CiAgICAgfQogICAgIHZvaWQgdW5pZm9y
bTR1aXYoaW50MzJfdCBsb2NhdGlvbiwgSVBDOjpBcnJheVJlZmVyZW5jZTx1aW50MzJfdD4mJiBk
YXRhKQogICAgIHsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKICAg
ICAgICAgbV9jb250ZXh0LT51bmlmb3JtNHVpdihsb2NhdGlvbiwgbWFrZUdDR0xTcGFuKHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgR0NHTHVpbnQqPihkYXRhLmRhdGEoKSksIGRhdGEuc2l6ZSgpKSk7
CiAgICAgfQogICAgIHZvaWQgdW5pZm9ybU1hdHJpeDJ4M2Z2KGludDMyX3QgbG9jYXRpb24sIGJv
b2wgdHJhbnNwb3NlLCBJUEM6OkFycmF5UmVmZXJlbmNlPGZsb2F0PiYmIGRhdGEpCiAgICAgewor
ICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOwogICAgICAgICBtX2NvbnRl
eHQtPnVuaWZvcm1NYXRyaXgyeDNmdihsb2NhdGlvbiwgc3RhdGljX2Nhc3Q8R0NHTGJvb2xlYW4+
KHRyYW5zcG9zZSksIG1ha2VHQ0dMU3BhbihyZWludGVycHJldF9jYXN0PGNvbnN0IEdDR0xmbG9h
dCo+KGRhdGEuZGF0YSgpKSwgZGF0YS5zaXplKCkpKTsKICAgICB9CiAgICAgdm9pZCB1bmlmb3Jt
TWF0cml4M3gyZnYoaW50MzJfdCBsb2NhdGlvbiwgYm9vbCB0cmFuc3Bvc2UsIElQQzo6QXJyYXlS
ZWZlcmVuY2U8ZmxvYXQ+JiYgZGF0YSkKICAgICB7CisgICAgICAgIGFzc2VydElzQ3VycmVudCht
X3N0cmVhbVRocmVhZCk7CiAgICAgICAgIG1fY29udGV4dC0+dW5pZm9ybU1hdHJpeDN4MmZ2KGxv
Y2F0aW9uLCBzdGF0aWNfY2FzdDxHQ0dMYm9vbGVhbj4odHJhbnNwb3NlKSwgbWFrZUdDR0xTcGFu
KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0NHTGZsb2F0Kj4oZGF0YS5kYXRhKCkpLCBkYXRhLnNp
emUoKSkpOwogICAgIH0KICAgICB2b2lkIHVuaWZvcm1NYXRyaXgyeDRmdihpbnQzMl90IGxvY2F0
aW9uLCBib29sIHRyYW5zcG9zZSwgSVBDOjpBcnJheVJlZmVyZW5jZTxmbG9hdD4mJiBkYXRhKQog
ICAgIHsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKICAgICAgICAg
bV9jb250ZXh0LT51bmlmb3JtTWF0cml4Mng0ZnYobG9jYXRpb24sIHN0YXRpY19jYXN0PEdDR0xi
b29sZWFuPih0cmFuc3Bvc2UpLCBtYWtlR0NHTFNwYW4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBH
Q0dMZmxvYXQqPihkYXRhLmRhdGEoKSksIGRhdGEuc2l6ZSgpKSk7CiAgICAgfQogICAgIHZvaWQg
dW5pZm9ybU1hdHJpeDR4MmZ2KGludDMyX3QgbG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCBJUEM6
OkFycmF5UmVmZXJlbmNlPGZsb2F0PiYmIGRhdGEpCiAgICAgeworICAgICAgICBhc3NlcnRJc0N1
cnJlbnQobV9zdHJlYW1UaHJlYWQpOwogICAgICAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXg0
eDJmdihsb2NhdGlvbiwgc3RhdGljX2Nhc3Q8R0NHTGJvb2xlYW4+KHRyYW5zcG9zZSksIG1ha2VH
Q0dMU3BhbihyZWludGVycHJldF9jYXN0PGNvbnN0IEdDR0xmbG9hdCo+KGRhdGEuZGF0YSgpKSwg
ZGF0YS5zaXplKCkpKTsKICAgICB9CiAgICAgdm9pZCB1bmlmb3JtTWF0cml4M3g0ZnYoaW50MzJf
dCBsb2NhdGlvbiwgYm9vbCB0cmFuc3Bvc2UsIElQQzo6QXJyYXlSZWZlcmVuY2U8ZmxvYXQ+JiYg
ZGF0YSkKICAgICB7CisgICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CiAg
ICAgICAgIG1fY29udGV4dC0+dW5pZm9ybU1hdHJpeDN4NGZ2KGxvY2F0aW9uLCBzdGF0aWNfY2Fz
dDxHQ0dMYm9vbGVhbj4odHJhbnNwb3NlKSwgbWFrZUdDR0xTcGFuKHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgR0NHTGZsb2F0Kj4oZGF0YS5kYXRhKCkpLCBkYXRhLnNpemUoKSkpOwogICAgIH0KICAg
ICB2b2lkIHVuaWZvcm1NYXRyaXg0eDNmdihpbnQzMl90IGxvY2F0aW9uLCBib29sIHRyYW5zcG9z
ZSwgSVBDOjpBcnJheVJlZmVyZW5jZTxmbG9hdD4mJiBkYXRhKQogICAgIHsKKyAgICAgICAgYXNz
ZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKICAgICAgICAgbV9jb250ZXh0LT51bmlmb3Jt
TWF0cml4NHgzZnYobG9jYXRpb24sIHN0YXRpY19jYXN0PEdDR0xib29sZWFuPih0cmFuc3Bvc2Up
LCBtYWtlR0NHTFNwYW4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBHQ0dMZmxvYXQqPihkYXRhLmRh
dGEoKSksIGRhdGEuc2l6ZSgpKSk7CiAgICAgfQogICAgIHZvaWQgdmVydGV4QXR0cmliSTRpKHVp
bnQzMl90IGluZGV4LCBpbnQzMl90IHgsIGludDMyX3QgeSwgaW50MzJfdCB6LCBpbnQzMl90IHcp
CiAgICAgeworICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOwogICAgICAg
ICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYkk0aShpbmRleCwgeCwgeSwgeiwgdyk7CiAgICAgfQog
ICAgIHZvaWQgdmVydGV4QXR0cmliSTRpdih1aW50MzJfdCBpbmRleCwgSVBDOjpBcnJheVJlZmVy
ZW5jZTxpbnQzMl90LCA0PiYmIHZhbHVlcykKICAgICB7CisgICAgICAgIGFzc2VydElzQ3VycmVu
dChtX3N0cmVhbVRocmVhZCk7CiAgICAgICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliSTRpdihp
bmRleCwgbWFrZUdDR0xTcGFuPDQ+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0NHTGludCo+KHZh
bHVlcy5kYXRhKCkpKSk7CiAgICAgfQogICAgIHZvaWQgdmVydGV4QXR0cmliSTR1aSh1aW50MzJf
dCBpbmRleCwgdWludDMyX3QgeCwgdWludDMyX3QgeSwgdWludDMyX3QgeiwgdWludDMyX3QgdykK
ICAgICB7CisgICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CiAgICAgICAg
IG1fY29udGV4dC0+dmVydGV4QXR0cmliSTR1aShpbmRleCwgeCwgeSwgeiwgdyk7CiAgICAgfQog
ICAgIHZvaWQgdmVydGV4QXR0cmliSTR1aXYodWludDMyX3QgaW5kZXgsIElQQzo6QXJyYXlSZWZl
cmVuY2U8dWludDMyX3QsIDQ+JiYgdmFsdWVzKQogICAgIHsKKyAgICAgICAgYXNzZXJ0SXNDdXJy
ZW50KG1fc3RyZWFtVGhyZWFkKTsKICAgICAgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWJJNHVp
dihpbmRleCwgbWFrZUdDR0xTcGFuPDQ+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0NHTHVpbnQq
Pih2YWx1ZXMuZGF0YSgpKSkpOwogICAgIH0KICAgICB2b2lkIHZlcnRleEF0dHJpYklQb2ludGVy
KHVpbnQzMl90IGluZGV4LCBpbnQzMl90IHNpemUsIHVpbnQzMl90IHR5cGUsIGludDMyX3Qgc3Ry
aWRlLCB1aW50NjRfdCBvZmZzZXQpCiAgICAgeworICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9z
dHJlYW1UaHJlYWQpOwogICAgICAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYklQb2ludGVyKGlu
ZGV4LCBzaXplLCB0eXBlLCBzdHJpZGUsIHN0YXRpY19jYXN0PEdDR0xpbnRwdHI+KG9mZnNldCkp
OwogICAgIH0KICAgICB2b2lkIGRyYXdSYW5nZUVsZW1lbnRzKHVpbnQzMl90IG1vZGUsIHVpbnQz
Ml90IHN0YXJ0LCB1aW50MzJfdCBlbmQsIGludDMyX3QgY291bnQsIHVpbnQzMl90IHR5cGUsIHVp
bnQ2NF90IG9mZnNldCkKICAgICB7CisgICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRo
cmVhZCk7CiAgICAgICAgIG1fY29udGV4dC0+ZHJhd1JhbmdlRWxlbWVudHMobW9kZSwgc3RhcnQs
IGVuZCwgY291bnQsIHR5cGUsIHN0YXRpY19jYXN0PEdDR0xpbnRwdHI+KG9mZnNldCkpOwogICAg
IH0KICAgICB2b2lkIGRyYXdCdWZmZXJzKElQQzo6QXJyYXlSZWZlcmVuY2U8dWludDMyX3Q+JiYg
YnVmcykKICAgICB7CisgICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CiAg
ICAgICAgIG1fY29udGV4dC0+ZHJhd0J1ZmZlcnMobWFrZUdDR0xTcGFuKHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgR0NHTGVudW0qPihidWZzLmRhdGEoKSksIGJ1ZnMuc2l6ZSgpKSk7CiAgICAgfQog
ICAgIHZvaWQgY2xlYXJCdWZmZXJpdih1aW50MzJfdCBidWZmZXIsIGludDMyX3QgZHJhd2J1ZmZl
ciwgSVBDOjpBcnJheVJlZmVyZW5jZTxpbnQzMl90PiYmIHZhbHVlcykKICAgICB7CisgICAgICAg
IGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CiAgICAgICAgIG1fY29udGV4dC0+Y2xl
YXJCdWZmZXJpdihidWZmZXIsIGRyYXdidWZmZXIsIG1ha2VHQ0dMU3BhbihyZWludGVycHJldF9j
YXN0PGNvbnN0IEdDR0xpbnQqPih2YWx1ZXMuZGF0YSgpKSwgdmFsdWVzLnNpemUoKSkpOwogICAg
IH0KICAgICB2b2lkIGNsZWFyQnVmZmVydWl2KHVpbnQzMl90IGJ1ZmZlciwgaW50MzJfdCBkcmF3
YnVmZmVyLCBJUEM6OkFycmF5UmVmZXJlbmNlPHVpbnQzMl90PiYmIHZhbHVlcykKICAgICB7Cisg
ICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CiAgICAgICAgIG1fY29udGV4
dC0+Y2xlYXJCdWZmZXJ1aXYoYnVmZmVyLCBkcmF3YnVmZmVyLCBtYWtlR0NHTFNwYW4ocmVpbnRl
cnByZXRfY2FzdDxjb25zdCBHQ0dMdWludCo+KHZhbHVlcy5kYXRhKCkpLCB2YWx1ZXMuc2l6ZSgp
KSk7CiAgICAgfQogICAgIHZvaWQgY2xlYXJCdWZmZXJmdih1aW50MzJfdCBidWZmZXIsIGludDMy
X3QgZHJhd2J1ZmZlciwgSVBDOjpBcnJheVJlZmVyZW5jZTxmbG9hdD4mJiB2YWx1ZXMpCiAgICAg
eworICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOwogICAgICAgICBtX2Nv
bnRleHQtPmNsZWFyQnVmZmVyZnYoYnVmZmVyLCBkcmF3YnVmZmVyLCBtYWtlR0NHTFNwYW4ocmVp
bnRlcnByZXRfY2FzdDxjb25zdCBHQ0dMZmxvYXQqPih2YWx1ZXMuZGF0YSgpKSwgdmFsdWVzLnNp
emUoKSkpOwogICAgIH0KICAgICB2b2lkIGNsZWFyQnVmZmVyZmkodWludDMyX3QgYnVmZmVyLCBp
bnQzMl90IGRyYXdidWZmZXIsIGZsb2F0IGRlcHRoLCBpbnQzMl90IHN0ZW5jaWwpCiAgICAgewor
ICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOwogICAgICAgICBtX2NvbnRl
eHQtPmNsZWFyQnVmZmVyZmkoYnVmZmVyLCBkcmF3YnVmZmVyLCBkZXB0aCwgc3RlbmNpbCk7CiAg
ICAgfQogICAgIHZvaWQgY3JlYXRlUXVlcnkoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCh1aW50MzJf
dCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiAgICAgewogICAgICAgICBQbGF0Zm9ybUdMT2JqZWN0
IHJldHVyblZhbHVlID0geyB9OworICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJl
YWQpOwogICAgICAgICByZXR1cm5WYWx1ZSA9IG1fY29udGV4dC0+Y3JlYXRlUXVlcnkoKTsKICAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIocmV0dXJuVmFsdWUpOwogICAgIH0KICAgICB2b2lkIGRl
bGV0ZVF1ZXJ5KHVpbnQzMl90IHF1ZXJ5KQogICAgIHsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50
KG1fc3RyZWFtVGhyZWFkKTsKICAgICAgICAgbV9jb250ZXh0LT5kZWxldGVRdWVyeShxdWVyeSk7
CiAgICAgfQogICAgIHZvaWQgaXNRdWVyeSh1aW50MzJfdCBxdWVyeSwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKICAgICB7CiAgICAgICAgIEdDR0xi
b29sZWFuIHJldHVyblZhbHVlID0geyB9OworICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJl
YW1UaHJlYWQpOwogICAgICAgICByZXR1cm5WYWx1ZSA9IG1fY29udGV4dC0+aXNRdWVyeShxdWVy
eSk7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHN0YXRpY19jYXN0PGJvb2w+KHJldHVyblZh
bHVlKSk7CiAgICAgfQogICAgIHZvaWQgYmVnaW5RdWVyeSh1aW50MzJfdCB0YXJnZXQsIHVpbnQz
Ml90IHF1ZXJ5KQogICAgIHsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFk
KTsKICAgICAgICAgbV9jb250ZXh0LT5iZWdpblF1ZXJ5KHRhcmdldCwgcXVlcnkpOwogICAgIH0K
ICAgICB2b2lkIGVuZFF1ZXJ5KHVpbnQzMl90IHRhcmdldCkKICAgICB7CisgICAgICAgIGFzc2Vy
dElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CiAgICAgICAgIG1fY29udGV4dC0+ZW5kUXVlcnko
dGFyZ2V0KTsKICAgICB9CiAgICAgdm9pZCBnZXRRdWVyeSh1aW50MzJfdCB0YXJnZXQsIHVpbnQz
Ml90IHBuYW1lLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHVpbnQzMl90KT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKICAgICB7CiAgICAgICAgIFBsYXRmb3JtR0xPYmplY3QgcmV0dXJuVmFsdWUgPSB7
IH07CisgICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CiAgICAgICAgIHJl
dHVyblZhbHVlID0gbV9jb250ZXh0LT5nZXRRdWVyeSh0YXJnZXQsIHBuYW1lKTsKICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIocmV0dXJuVmFsdWUpOwogICAgIH0KICAgICB2b2lkIGdldFF1ZXJ5
T2JqZWN0dWkodWludDMyX3QgcXVlcnksIHVpbnQzMl90IHBuYW1lLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKHVpbnQzMl90KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKICAgICB7CiAgICAgICAgIEdD
R0x1aW50IHJldHVyblZhbHVlID0geyB9OworICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJl
YW1UaHJlYWQpOwogICAgICAgICByZXR1cm5WYWx1ZSA9IG1fY29udGV4dC0+Z2V0UXVlcnlPYmpl
Y3R1aShxdWVyeSwgcG5hbWUpOwogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihyZXR1cm5WYWx1
ZSk7CiAgICAgfQogICAgIHZvaWQgY3JlYXRlU2FtcGxlcihDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KHVpbnQzMl90KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKICAgICB7CiAgICAgICAgIFBsYXRmb3Jt
R0xPYmplY3QgcmV0dXJuVmFsdWUgPSB7IH07CisgICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0
cmVhbVRocmVhZCk7CiAgICAgICAgIHJldHVyblZhbHVlID0gbV9jb250ZXh0LT5jcmVhdGVTYW1w
bGVyKCk7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHJldHVyblZhbHVlKTsKICAgICB9CiAg
ICAgdm9pZCBkZWxldGVTYW1wbGVyKHVpbnQzMl90IHNhbXBsZXIpCiAgICAgeworICAgICAgICBh
c3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOwogICAgICAgICBtX2NvbnRleHQtPmRlbGV0
ZVNhbXBsZXIoc2FtcGxlcik7CiAgICAgfQogICAgIHZvaWQgaXNTYW1wbGVyKHVpbnQzMl90IHNh
bXBsZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
CiAgICAgewogICAgICAgICBHQ0dMYm9vbGVhbiByZXR1cm5WYWx1ZSA9IHsgfTsKKyAgICAgICAg
YXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKICAgICAgICAgcmV0dXJuVmFsdWUgPSBt
X2NvbnRleHQtPmlzU2FtcGxlcihzYW1wbGVyKTsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
c3RhdGljX2Nhc3Q8Ym9vbD4ocmV0dXJuVmFsdWUpKTsKICAgICB9CiAgICAgdm9pZCBiaW5kU2Ft
cGxlcih1aW50MzJfdCB1bml0LCB1aW50MzJfdCBzYW1wbGVyKQogICAgIHsKKyAgICAgICAgYXNz
ZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKICAgICAgICAgbV9jb250ZXh0LT5iaW5kU2Ft
cGxlcih1bml0LCBzYW1wbGVyKTsKICAgICB9CiAgICAgdm9pZCBzYW1wbGVyUGFyYW1ldGVyaSh1
aW50MzJfdCBzYW1wbGVyLCB1aW50MzJfdCBwbmFtZSwgaW50MzJfdCBwYXJhbSkKICAgICB7Cisg
ICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CiAgICAgICAgIG1fY29udGV4
dC0+c2FtcGxlclBhcmFtZXRlcmkoc2FtcGxlciwgcG5hbWUsIHBhcmFtKTsKICAgICB9CiAgICAg
dm9pZCBzYW1wbGVyUGFyYW1ldGVyZih1aW50MzJfdCBzYW1wbGVyLCB1aW50MzJfdCBwbmFtZSwg
ZmxvYXQgcGFyYW0pCiAgICAgeworICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJl
YWQpOwogICAgICAgICBtX2NvbnRleHQtPnNhbXBsZXJQYXJhbWV0ZXJmKHNhbXBsZXIsIHBuYW1l
LCBwYXJhbSk7CiAgICAgfQogICAgIHZvaWQgZ2V0U2FtcGxlclBhcmFtZXRlcmYodWludDMyX3Qg
c2FtcGxlciwgdWludDMyX3QgcG5hbWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoZmxvYXQpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQogICAgIHsKICAgICAgICAgR0NHTGZsb2F0IHJldHVyblZhbHVl
ID0geyB9OworICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOwogICAgICAg
ICByZXR1cm5WYWx1ZSA9IG1fY29udGV4dC0+Z2V0U2FtcGxlclBhcmFtZXRlcmYoc2FtcGxlciwg
cG5hbWUpOwogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihyZXR1cm5WYWx1ZSk7CiAgICAgfQog
ICAgIHZvaWQgZ2V0U2FtcGxlclBhcmFtZXRlcmkodWludDMyX3Qgc2FtcGxlciwgdWludDMyX3Qg
cG5hbWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoaW50MzJfdCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCiAgICAgewogICAgICAgICBHQ0dMaW50IHJldHVyblZhbHVlID0geyB9OworICAgICAgICBh
c3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOwogICAgICAgICByZXR1cm5WYWx1ZSA9IG1f
Y29udGV4dC0+Z2V0U2FtcGxlclBhcmFtZXRlcmkoc2FtcGxlciwgcG5hbWUpOwogICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcihyZXR1cm5WYWx1ZSk7CiAgICAgfQogICAgIHZvaWQgZmVuY2VTeW5j
KHVpbnQzMl90IGNvbmRpdGlvbiwgdWludDMyX3QgZmxhZ3MsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQodWludDY0X3QpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogICAgIHsKICAgICAgICAgR0NHTHN5
bmMgcmV0dXJuVmFsdWUgPSB7IH07CisgICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRo
cmVhZCk7CiAgICAgICAgIHJldHVyblZhbHVlID0gbV9jb250ZXh0LT5mZW5jZVN5bmMoY29uZGl0
aW9uLCBmbGFncyk7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHN0YXRpY19jYXN0PHVpbnQ2
NF90PihyZWludGVycHJldF9jYXN0PGludHB0cl90PihyZXR1cm5WYWx1ZSkpKTsKICAgICB9CiAg
ICAgdm9pZCBpc1N5bmModWludDY0X3QgYXJnMCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29s
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKICAgICB7CiAgICAgICAgIEdDR0xib29sZWFuIHJldHVy
blZhbHVlID0geyB9OworICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOwog
ICAgICAgICByZXR1cm5WYWx1ZSA9IG1fY29udGV4dC0+aXNTeW5jKHJlaW50ZXJwcmV0X2Nhc3Q8
R0NHTHN5bmM+KHN0YXRpY19jYXN0PGludHB0cl90PihhcmcwKSkpOwogICAgICAgICBjb21wbGV0
aW9uSGFuZGxlcihzdGF0aWNfY2FzdDxib29sPihyZXR1cm5WYWx1ZSkpOwogICAgIH0KICAgICB2
b2lkIGRlbGV0ZVN5bmModWludDY0X3QgYXJnMCkKICAgICB7CisgICAgICAgIGFzc2VydElzQ3Vy
cmVudChtX3N0cmVhbVRocmVhZCk7CiAgICAgICAgIG1fY29udGV4dC0+ZGVsZXRlU3luYyhyZWlu
dGVycHJldF9jYXN0PEdDR0xzeW5jPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4oYXJnMCkpKTsKICAg
ICB9CiAgICAgdm9pZCBjbGllbnRXYWl0U3luYyh1aW50NjRfdCBhcmcwLCB1aW50MzJfdCBmbGFn
cywgdWludDY0X3QgdGltZW91dCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCh1aW50MzJfdCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCiAgICAgewogICAgICAgICBHQ0dMZW51bSByZXR1cm5WYWx1ZSA9
IHsgfTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKICAgICAgICAg
cmV0dXJuVmFsdWUgPSBtX2NvbnRleHQtPmNsaWVudFdhaXRTeW5jKHJlaW50ZXJwcmV0X2Nhc3Q8
R0NHTHN5bmM+KHN0YXRpY19jYXN0PGludHB0cl90PihhcmcwKSksIGZsYWdzLCBzdGF0aWNfY2Fz
dDxHQ0dMdWludDY0Pih0aW1lb3V0KSk7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHJldHVy
blZhbHVlKTsKICAgICB9CiAgICAgdm9pZCB3YWl0U3luYyh1aW50NjRfdCBhcmcwLCB1aW50MzJf
dCBmbGFncywgaW50NjRfdCB0aW1lb3V0KQogICAgIHsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50
KG1fc3RyZWFtVGhyZWFkKTsKICAgICAgICAgbV9jb250ZXh0LT53YWl0U3luYyhyZWludGVycHJl
dF9jYXN0PEdDR0xzeW5jPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4oYXJnMCkpLCBmbGFncywgc3Rh
dGljX2Nhc3Q8R0NHTGludDY0Pih0aW1lb3V0KSk7CiAgICAgfQogICAgIHZvaWQgZ2V0U3luY2ko
dWludDY0X3QgYXJnMCwgdWludDMyX3QgcG5hbWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoaW50
MzJfdCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiAgICAgewogICAgICAgICBHQ0dMaW50IHJldHVy
blZhbHVlID0geyB9OworICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOwog
ICAgICAgICByZXR1cm5WYWx1ZSA9IG1fY29udGV4dC0+Z2V0U3luY2kocmVpbnRlcnByZXRfY2Fz
dDxHQ0dMc3luYz4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KGFyZzApKSwgcG5hbWUpOwogICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcihyZXR1cm5WYWx1ZSk7CiAgICAgfQogICAgIHZvaWQgY3JlYXRl
VHJhbnNmb3JtRmVlZGJhY2soQ29tcGxldGlvbkhhbmRsZXI8dm9pZCh1aW50MzJfdCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCiAgICAgewogICAgICAgICBQbGF0Zm9ybUdMT2JqZWN0IHJldHVyblZh
bHVlID0geyB9OworICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOwogICAg
ICAgICByZXR1cm5WYWx1ZSA9IG1fY29udGV4dC0+Y3JlYXRlVHJhbnNmb3JtRmVlZGJhY2soKTsK
ICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIocmV0dXJuVmFsdWUpOwogICAgIH0KICAgICB2b2lk
IGRlbGV0ZVRyYW5zZm9ybUZlZWRiYWNrKHVpbnQzMl90IGlkKQogICAgIHsKKyAgICAgICAgYXNz
ZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKICAgICAgICAgbV9jb250ZXh0LT5kZWxldGVU
cmFuc2Zvcm1GZWVkYmFjayhpZCk7CiAgICAgfQogICAgIHZvaWQgaXNUcmFuc2Zvcm1GZWVkYmFj
ayh1aW50MzJfdCBpZCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKICAgICB7CiAgICAgICAgIEdDR0xib29sZWFuIHJldHVyblZhbHVlID0geyB9Owor
ICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOwogICAgICAgICByZXR1cm5W
YWx1ZSA9IG1fY29udGV4dC0+aXNUcmFuc2Zvcm1GZWVkYmFjayhpZCk7CiAgICAgICAgIGNvbXBs
ZXRpb25IYW5kbGVyKHN0YXRpY19jYXN0PGJvb2w+KHJldHVyblZhbHVlKSk7CiAgICAgfQogICAg
IHZvaWQgYmluZFRyYW5zZm9ybUZlZWRiYWNrKHVpbnQzMl90IHRhcmdldCwgdWludDMyX3QgaWQp
CiAgICAgeworICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOwogICAgICAg
ICBtX2NvbnRleHQtPmJpbmRUcmFuc2Zvcm1GZWVkYmFjayh0YXJnZXQsIGlkKTsKICAgICB9CiAg
ICAgdm9pZCBiZWdpblRyYW5zZm9ybUZlZWRiYWNrKHVpbnQzMl90IHByaW1pdGl2ZU1vZGUpCiAg
ICAgeworICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOwogICAgICAgICBt
X2NvbnRleHQtPmJlZ2luVHJhbnNmb3JtRmVlZGJhY2socHJpbWl0aXZlTW9kZSk7CiAgICAgfQog
ICAgIHZvaWQgZW5kVHJhbnNmb3JtRmVlZGJhY2soKQogICAgIHsKKyAgICAgICAgYXNzZXJ0SXND
dXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKICAgICAgICAgbV9jb250ZXh0LT5lbmRUcmFuc2Zvcm1G
ZWVkYmFjaygpOwogICAgIH0KICAgICB2b2lkIHRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3ModWlu
dDMyX3QgcHJvZ3JhbSwgVmVjdG9yPFN0cmluZz4mJiB2YXJ5aW5ncywgdWludDMyX3QgYnVmZmVy
TW9kZSkKICAgICB7CisgICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CiAg
ICAgICAgIG1fY29udGV4dC0+dHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncyhwcm9ncmFtLCB2YXJ5
aW5ncywgYnVmZmVyTW9kZSk7CiAgICAgfQogICAgIHZvaWQgZ2V0VHJhbnNmb3JtRmVlZGJhY2tW
YXJ5aW5nKHVpbnQzMl90IHByb2dyYW0sIHVpbnQzMl90IGluZGV4LCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMOjpBY3RpdmVJbmZvJiYpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQogICAgIHsKICAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0w6
OkFjdGl2ZUluZm8gYXJnMiB7IH07CisgICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRo
cmVhZCk7CiAgICAgICAgIG1fY29udGV4dC0+Z2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nKHBy
b2dyYW0sIGluZGV4LCBhcmcyKTsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShh
cmcyKSk7CiAgICAgfQogICAgIHZvaWQgcGF1c2VUcmFuc2Zvcm1GZWVkYmFjaygpCiAgICAgewor
ICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOwogICAgICAgICBtX2NvbnRl
eHQtPnBhdXNlVHJhbnNmb3JtRmVlZGJhY2soKTsKICAgICB9CiAgICAgdm9pZCByZXN1bWVUcmFu
c2Zvcm1GZWVkYmFjaygpCiAgICAgeworICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1U
aHJlYWQpOwogICAgICAgICBtX2NvbnRleHQtPnJlc3VtZVRyYW5zZm9ybUZlZWRiYWNrKCk7CiAg
ICAgfQogICAgIHZvaWQgYmluZEJ1ZmZlckJhc2UodWludDMyX3QgdGFyZ2V0LCB1aW50MzJfdCBp
bmRleCwgdWludDMyX3QgYnVmZmVyKQogICAgIHsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1f
c3RyZWFtVGhyZWFkKTsKICAgICAgICAgbV9jb250ZXh0LT5iaW5kQnVmZmVyQmFzZSh0YXJnZXQs
IGluZGV4LCBidWZmZXIpOwogICAgIH0KICAgICB2b2lkIGJpbmRCdWZmZXJSYW5nZSh1aW50MzJf
dCB0YXJnZXQsIHVpbnQzMl90IGluZGV4LCB1aW50MzJfdCBidWZmZXIsIHVpbnQ2NF90IG9mZnNl
dCwgdWludDY0X3QgYXJnNCkKICAgICB7CisgICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVh
bVRocmVhZCk7CiAgICAgICAgIG1fY29udGV4dC0+YmluZEJ1ZmZlclJhbmdlKHRhcmdldCwgaW5k
ZXgsIGJ1ZmZlciwgc3RhdGljX2Nhc3Q8R0NHTGludHB0cj4ob2Zmc2V0KSwgc3RhdGljX2Nhc3Q8
R0NHTHNpemVpcHRyPihhcmc0KSk7CiAgICAgfQogICAgIHZvaWQgZ2V0VW5pZm9ybUluZGljZXMo
dWludDMyX3QgcHJvZ3JhbSwgVmVjdG9yPFN0cmluZz4mJiB1bmlmb3JtTmFtZXMsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoVmVjdG9yPHVpbnQzMl90PiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
ICAgICB7CiAgICAgICAgIFZlY3RvcjxHQ0dMdWludD4gcmV0dXJuVmFsdWUgPSB7IH07CisgICAg
ICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CiAgICAgICAgIHJldHVyblZhbHVl
ID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtSW5kaWNlcyhwcm9ncmFtLCB1bmlmb3JtTmFtZXMpOwog
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKHJldHVyblZhbHVlKSk7CiAgICAgfQog
ICAgIHZvaWQgZ2V0QWN0aXZlVW5pZm9ybXModWludDMyX3QgcHJvZ3JhbSwgVmVjdG9yPHVpbnQz
Ml90PiYmIHVuaWZvcm1JbmRpY2VzLCB1aW50MzJfdCBwbmFtZSwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChWZWN0b3I8aW50MzJfdD4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiAgICAgewogICAg
ICAgICBWZWN0b3I8R0NHTGludD4gcmV0dXJuVmFsdWUgPSB7IH07CisgICAgICAgIGFzc2VydElz
Q3VycmVudChtX3N0cmVhbVRocmVhZCk7CiAgICAgICAgIHJldHVyblZhbHVlID0gbV9jb250ZXh0
LT5nZXRBY3RpdmVVbmlmb3Jtcyhwcm9ncmFtLCB1bmlmb3JtSW5kaWNlcywgcG5hbWUpOwogICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKHJldHVyblZhbHVlKSk7CiAgICAgfQogICAg
IHZvaWQgZ2V0VW5pZm9ybUJsb2NrSW5kZXgodWludDMyX3QgcHJvZ3JhbSwgU3RyaW5nJiYgdW5p
Zm9ybUJsb2NrTmFtZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCh1aW50MzJfdCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCiAgICAgewogICAgICAgICBHQ0dMdWludCByZXR1cm5WYWx1ZSA9IHsgfTsK
KyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKICAgICAgICAgcmV0dXJu
VmFsdWUgPSBtX2NvbnRleHQtPmdldFVuaWZvcm1CbG9ja0luZGV4KHByb2dyYW0sIHVuaWZvcm1C
bG9ja05hbWUpOwogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihyZXR1cm5WYWx1ZSk7CiAgICAg
fQogICAgIHZvaWQgZ2V0QWN0aXZlVW5pZm9ybUJsb2NrTmFtZSh1aW50MzJfdCBwcm9ncmFtLCB1
aW50MzJfdCB1bmlmb3JtQmxvY2tJbmRleCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTdHJpbmcm
Jik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiAgICAgewogICAgICAgICBTdHJpbmcgcmV0dXJuVmFs
dWUgPSB7IH07CisgICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CiAgICAg
ICAgIHJldHVyblZhbHVlID0gbV9jb250ZXh0LT5nZXRBY3RpdmVVbmlmb3JtQmxvY2tOYW1lKHBy
b2dyYW0sIHVuaWZvcm1CbG9ja0luZGV4KTsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RG
TW92ZShyZXR1cm5WYWx1ZSkpOwogICAgIH0KICAgICB2b2lkIHVuaWZvcm1CbG9ja0JpbmRpbmco
dWludDMyX3QgcHJvZ3JhbSwgdWludDMyX3QgdW5pZm9ybUJsb2NrSW5kZXgsIHVpbnQzMl90IHVu
aWZvcm1CbG9ja0JpbmRpbmcpCiAgICAgeworICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJl
YW1UaHJlYWQpOwogICAgICAgICBtX2NvbnRleHQtPnVuaWZvcm1CbG9ja0JpbmRpbmcocHJvZ3Jh
bSwgdW5pZm9ybUJsb2NrSW5kZXgsIHVuaWZvcm1CbG9ja0JpbmRpbmcpOwogICAgIH0KICAgICB2
b2lkIGdldEFjdGl2ZVVuaWZvcm1CbG9ja2l2KHVpbnQzMl90IHByb2dyYW0sIHVpbnQzMl90IHVu
aWZvcm1CbG9ja0luZGV4LCB1aW50MzJfdCBwbmFtZSwgdWludDY0X3QgcGFyYW1zU2l6ZSwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChJUEM6OkFycmF5UmVmZXJlbmNlPGludDMyX3Q+KT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKICAgICB7CiAgICAgICAgIFZlY3RvcjxHQ0dMaW50LCA0PiBwYXJhbXMo
c3RhdGljX2Nhc3Q8c2l6ZV90PihwYXJhbXNTaXplKSwgMCk7CisgICAgICAgIGFzc2VydElzQ3Vy
cmVudChtX3N0cmVhbVRocmVhZCk7CiAgICAgICAgIG1fY29udGV4dC0+Z2V0QWN0aXZlVW5pZm9y
bUJsb2NraXYocHJvZ3JhbSwgdW5pZm9ybUJsb2NrSW5kZXgsIHBuYW1lLCBwYXJhbXMpOwogICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcihJUEM6OkFycmF5UmVmZXJlbmNlPGludDMyX3Q+KHJlaW50
ZXJwcmV0X2Nhc3Q8aW50MzJfdCo+KHBhcmFtcy5kYXRhKCkpLCBwYXJhbXMuc2l6ZSgpKSk7CiAg
ICAgfQogICAgIHZvaWQgZ2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQihDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKGludDMyX3QpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogICAgIHsKICAgICAgICAgR0NH
TGludCByZXR1cm5WYWx1ZSA9IHsgfTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFt
VGhyZWFkKTsKICAgICAgICAgcmV0dXJuVmFsdWUgPSBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMo
KS5nZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKCk7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KHJldHVyblZhbHVlKTsKICAgICB9CiAgICAgdm9pZCBnZXRUcmFuc2xhdGVkU2hhZGVyU291cmNl
QU5HTEUodWludDMyX3QgYXJnMCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTdHJpbmcmJik+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCiAgICAgewogICAgICAgICBTdHJpbmcgcmV0dXJuVmFsdWUgPSB7
IH07CisgICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CiAgICAgICAgIHJl
dHVyblZhbHVlID0gbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCkuZ2V0VHJhbnNsYXRlZFNoYWRl
clNvdXJjZUFOR0xFKGFyZzApOwogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKHJl
dHVyblZhbHVlKSk7CiAgICAgfQogICAgIHZvaWQgZHJhd0J1ZmZlcnNFWFQoSVBDOjpBcnJheVJl
ZmVyZW5jZTx1aW50MzJfdD4mJiBidWZzKQogICAgIHsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50
KG1fc3RyZWFtVGhyZWFkKTsKICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCkuZHJh
d0J1ZmZlcnNFWFQobWFrZUdDR0xTcGFuKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0NHTGVudW0q
PihidWZzLmRhdGEoKSksIGJ1ZnMuc2l6ZSgpKSk7CiAgICAgfQogICAgIHZvaWQgZ2V0SW50ZXJu
YWxmb3JtYXRpdih1aW50MzJfdCB0YXJnZXQsIHVpbnQzMl90IGludGVybmFsZm9ybWF0LCB1aW50
MzJfdCBwbmFtZSwgdWludDY0X3QgcGFyYW1zU2l6ZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChJ
UEM6OkFycmF5UmVmZXJlbmNlPGludDMyX3Q+KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKICAgICB7
CiAgICAgICAgIFZlY3RvcjxHQ0dMaW50LCA0PiBwYXJhbXMoc3RhdGljX2Nhc3Q8c2l6ZV90Pihw
YXJhbXNTaXplKSwgMCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7
CiAgICAgICAgIG1fY29udGV4dC0+Z2V0SW50ZXJuYWxmb3JtYXRpdih0YXJnZXQsIGludGVybmFs
Zm9ybWF0LCBwbmFtZSwgcGFyYW1zKTsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoSVBDOjpB
cnJheVJlZmVyZW5jZTxpbnQzMl90PihyZWludGVycHJldF9jYXN0PGludDMyX3QqPihwYXJhbXMu
ZGF0YSgpKSwgcGFyYW1zLnNpemUoKSkpOwogICAgIH0KICAgICB2b2lkIG11bHRpRHJhd0FycmF5
c0FOR0xFKHVpbnQzMl90IG1vZGUsIElQQzo6QXJyYXlSZWZlcmVuY2U8aW50MzJfdD4mJiBmaXJz
dHMsIElQQzo6QXJyYXlSZWZlcmVuY2U8aW50MzJfdD4mJiBjb3VudHMsIGludDMyX3QgZHJhd2Nv
dW50KQogICAgIHsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKICAg
ICAgICAgbV9jb250ZXh0LT5tdWx0aURyYXdBcnJheXNBTkdMRShtb2RlLCBtYWtlR0NHTFNwYW4o
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBHQ0dMaW50Kj4oZmlyc3RzLmRhdGEoKSksIGZpcnN0cy5z
aXplKCkpLCBtYWtlR0NHTFNwYW4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBHQ0dMc2l6ZWkqPihj
b3VudHMuZGF0YSgpKSwgY291bnRzLnNpemUoKSksIGRyYXdjb3VudCk7CiAgICAgfQogICAgIHZv
aWQgbXVsdGlEcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUodWludDMyX3QgbW9kZSwgSVBDOjpBcnJh
eVJlZmVyZW5jZTxpbnQzMl90PiYmIGZpcnN0cywgSVBDOjpBcnJheVJlZmVyZW5jZTxpbnQzMl90
PiYmIGNvdW50cywgSVBDOjpBcnJheVJlZmVyZW5jZTxpbnQzMl90PiYmIGluc3RhbmNlQ291bnRz
LCBpbnQzMl90IGRyYXdjb3VudCkKICAgICB7CisgICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0
cmVhbVRocmVhZCk7CiAgICAgICAgIG1fY29udGV4dC0+bXVsdGlEcmF3QXJyYXlzSW5zdGFuY2Vk
QU5HTEUobW9kZSwgbWFrZUdDR0xTcGFuKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0NHTGludCo+
KGZpcnN0cy5kYXRhKCkpLCBmaXJzdHMuc2l6ZSgpKSwgbWFrZUdDR0xTcGFuKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgR0NHTHNpemVpKj4oY291bnRzLmRhdGEoKSksIGNvdW50cy5zaXplKCkpLCBt
YWtlR0NHTFNwYW4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBHQ0dMc2l6ZWkqPihpbnN0YW5jZUNv
dW50cy5kYXRhKCkpLCBpbnN0YW5jZUNvdW50cy5zaXplKCkpLCBkcmF3Y291bnQpOwogICAgIH0K
ICAgICB2b2lkIG11bHRpRHJhd0VsZW1lbnRzQU5HTEUodWludDMyX3QgbW9kZSwgSVBDOjpBcnJh
eVJlZmVyZW5jZTxpbnQzMl90PiYmIGNvdW50cywgdWludDMyX3QgdHlwZSwgSVBDOjpBcnJheVJl
ZmVyZW5jZTxpbnQzMl90PiYmIG9mZnNldHMsIGludDMyX3QgZHJhd2NvdW50KQogICAgIHsKKyAg
ICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKICAgICAgICAgbV9jb250ZXh0
LT5tdWx0aURyYXdFbGVtZW50c0FOR0xFKG1vZGUsIG1ha2VHQ0dMU3BhbihyZWludGVycHJldF9j
YXN0PGNvbnN0IEdDR0xzaXplaSo+KGNvdW50cy5kYXRhKCkpLCBjb3VudHMuc2l6ZSgpKSwgdHlw
ZSwgbWFrZUdDR0xTcGFuKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0NHTGludCo+KG9mZnNldHMu
ZGF0YSgpKSwgb2Zmc2V0cy5zaXplKCkpLCBkcmF3Y291bnQpOwogICAgIH0KICAgICB2b2lkIG11
bHRpRHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUodWludDMyX3QgbW9kZSwgSVBDOjpBcnJheVJl
ZmVyZW5jZTxpbnQzMl90PiYmIGNvdW50cywgdWludDMyX3QgdHlwZSwgSVBDOjpBcnJheVJlZmVy
ZW5jZTxpbnQzMl90PiYmIG9mZnNldHMsIElQQzo6QXJyYXlSZWZlcmVuY2U8aW50MzJfdD4mJiBp
bnN0YW5jZUNvdW50cywgaW50MzJfdCBkcmF3Y291bnQpCiAgICAgeworICAgICAgICBhc3NlcnRJ
c0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOwogICAgICAgICBtX2NvbnRleHQtPm11bHRpRHJhd0Vs
ZW1lbnRzSW5zdGFuY2VkQU5HTEUobW9kZSwgbWFrZUdDR0xTcGFuKHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgR0NHTHNpemVpKj4oY291bnRzLmRhdGEoKSksIGNvdW50cy5zaXplKCkpLCB0eXBlLCBt
YWtlR0NHTFNwYW4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBHQ0dMaW50Kj4ob2Zmc2V0cy5kYXRh
KCkpLCBvZmZzZXRzLnNpemUoKSksIG1ha2VHQ0dMU3BhbihyZWludGVycHJldF9jYXN0PGNvbnN0
IEdDR0xzaXplaSo+KGluc3RhbmNlQ291bnRzLmRhdGEoKSksIGluc3RhbmNlQ291bnRzLnNpemUo
KSksIGRyYXdjb3VudCk7CiAgICAgfQogICAgIHZvaWQgcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9J
bWFnZURhdGEoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChSZWZQdHI8V2ViQ29yZTo6SW1hZ2VEYXRh
PiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKICAgICB7CiAgICAgICAgIFJlZlB0cjxXZWJDb3Jl
OjpJbWFnZURhdGE+IHJldHVyblZhbHVlID0geyB9OworICAgICAgICBhc3NlcnRJc0N1cnJlbnQo
bV9zdHJlYW1UaHJlYWQpOwogICAgICAgICByZXR1cm5WYWx1ZSA9IG1fY29udGV4dC0+cGFpbnRS
ZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoKTsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
V1RGTW92ZShyZXR1cm5WYWx1ZSkpOwogICAgIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxv
ZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBkYjhhNmEwYzBkOWFmMDkwMGNiMDQzZDg3NDI3Yjg3
YjNhMjRhM2M0Li45NTkwZmIwMjBiYjc3NzM5OGJhYjAzMDFiMzYyMjE2ZTVjZDg3NTY0IDEwMDY0
NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MjIgQEAKKzIwMjEtMDQtMjMgIEtpbW1vIEtpbm51bmVuICA8a2tpbm51bmVuQGFwcGxlLmNvbT4K
KworICAgICAgICBBc3NlcnRpbmcgdGhhdCBmdW5jdGlvbiBvciB2YXJpYWJsZSBpcyBhY2Nlc3Nl
ZCBpbiBhIGNlcnRhaW4gdGhyZWFkIHNob3VsZCBiZSBzaW1wbGVyIGFuZCBtb3JlIHJvYnVzdAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI0OTcxCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgQWRkIHNpbXBsZSB0
ZXN0cyB0byBtYWtlIHN1cmUgY29kZSBpbiBUaHJlYWRBc3NlcnRpb25zLmgKKyAgICAgICAgY29t
cGlsZXMuCisKKyAgICAgICAgKiBTY3JpcHRzL2dlbmVyYXRlLWdwdXAtd2ViZ2w6CisgICAgICAg
IFVzZSBUaHJlYWRBc3NlcnRpb25zIGluIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMIGltcGxlbWVu
dGF0aW9uCisgICAgICAgIGFzIGFuIGV4YW1wbGUuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJ
L1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBUZXN0
V2ViS2l0QVBJL1Rlc3RzL1dURi9UaHJlYWRBc3NlcnRpb25zVGVzdC5jcHA6IEFkZGVkLgorICAg
ICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpXVEZf
UkVRVUlSRVNfTE9DSyk6CisKIDIwMjEtMDQtMjIgIEtpbW1vIEtpbm51bmVuICA8a2tpbm51bmVu
QGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgYSBDb25kaXRpb24gdHlwZSB0aGF0IHN1cHBvcnRz
IHRocmVhZCBzYWZldHkgYW5hbHlzaXMKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvZ2VuZXJh
dGUtZ3B1cC13ZWJnbCBiL1Rvb2xzL1NjcmlwdHMvZ2VuZXJhdGUtZ3B1cC13ZWJnbAppbmRleCA2
ZjhmNzAzYTJmNWJkZWQ0MzA5YmVmNzk0ZGYwMzM3MGE3YTJiMWViLi4zMGY3ZmQ4MmIzMzFhMDZm
NGM0ZTBjYjRlM2I4OWY3NWZmZTZiMTgxIDEwMDc1NQotLS0gYS9Ub29scy9TY3JpcHRzL2dlbmVy
YXRlLWdwdXAtd2ViZ2wKKysrIGIvVG9vbHMvU2NyaXB0cy9nZW5lcmF0ZS1ncHVwLXdlYmdsCkBA
IC03MzcsNiArNzM3LDcgQEAgY2xhc3Mgd2Via2l0X2lwY19jcHBfaW1wbChvYmplY3QpOgogICAg
ICAgICBzZWxmLnByb2Nlc3NfY2FsbCgpCiAKICAgICBkZWYgcHJvY2Vzc19jYWxsKHNlbGYpOgor
ICAgICAgICBzZWxmLmNhbGxfc3RtdHMgKz0gWyAiYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhy
ZWFkKTsiIF0KICAgICAgICAgZXh0ID0gImdldEV4dGVuc2lvbnMoKS4iIGlmIHNlbGYuaXNfZXh0
ZW5zaW9uIGVsc2UgIiIKIAogICAgICAgICBpbl9leHBycyA9ICIsICIuam9pbihzdHIoZSkgZm9y
IGUgaW4gc2VsZi5pbl9leHBycykKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYzhhY2Q1ZTQ5
ZjI0YTdlOThkYmRiODA5NzRmOGJhNmMwMjE3NjAyNS4uMmUwYjdmZjMyMGRmOTk5OGY3ZjQ5ZDk2
NzBiOTAzYTgyODQzNzhhMCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2Vi
S2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTU4Miw2ICs1ODIs
NyBAQAogCQk3QUVBRDQ4MTFFMjAxMjI3MDA0MTZFRkUgLyogQ3Jvc3NQYXJ0aXRpb25GaWxlU2No
ZW1lQWNjZXNzLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gN0FFQUQ0N0QxRTIwMTE0RTAwNDE2RUZFIC8qIENyb3NzUGFydGl0aW9uRmls
ZVNjaGVtZUFjY2Vzcy5odG1sICovOyB9OwogCQk3QjI3MzlFMDI2MjU3MUNDMDA0MEYxODIgLyog
Q2hlY2tlZExvY2tUZXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDdCMjczOURGMjYyNTcxQ0MwMDQwRjE4MiAvKiBDaGVja2VkTG9ja1Rlc3QuY3Bw
ICovOyB9OwogCQk3QjI3MzlFRjI2MzE1RTdFMDA0MEYxODIgLyogQ2hlY2tlZENvbmRpdGlvblRl
c3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0Iy
NzM5RUUyNjMxNUU3RDAwNDBGMTgyIC8qIENoZWNrZWRDb25kaXRpb25UZXN0LmNwcCAqLzsgfTsK
KwkJN0IyNzM5RjMyNjMyQUI2NDAwNDBGMTgyIC8qIFRocmVhZEFzc2VydGlvbnNUZXN0LmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCMjczOUYyMjYz
MkFCNjQwMDQwRjE4MiAvKiBUaHJlYWRBc3NlcnRpb25zVGVzdC5jcHAgKi87IH07CiAJCTdCN0Qw
OTZBMjUxOUY4RjkwMDE3QTA3OCAvKiBXZWJHTE5vQ3Jhc2hPbk90aGVyVGhyZWFkQWNjZXNzLm1t
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0I3RDA5Njky
NTE5RjhGOTAwMTdBMDc4IC8qIFdlYkdMTm9DcmFzaE9uT3RoZXJUaHJlYWRBY2Nlc3MubW0gKi87
IH07CiAJCTdDMUFGNzk1MUU4RENCQUIwMDI2NDVCOSAvKiBQcmVwYXJlRm9yTW92ZVRvV2luZG93
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0MxQUY3
OTMxRThEQ0JBQjAwMjY0NUI5IC8qIFByZXBhcmVGb3JNb3ZlVG9XaW5kb3cubW0gKi87IH07CiAJ
CTdDMzk2NTA2MUNERDc0RjkwMDk0REJCOCAvKiBDb2xvclRlc3RzLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDMzk2NTA1MUNERDc0RjkwMDk0REJC
OCAvKiBDb2xvclRlc3RzLmNwcCAqLzsgfTsKQEAgLTI0MjgsNiArMjQyOSw3IEBACiAJCTdBRUFE
NDdEMUUyMDExNEUwMDQxNkVGRSAvKiBDcm9zc1BhcnRpdGlvbkZpbGVTY2hlbWVBY2Nlc3MuaHRt
bCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHRleHQuaHRtbDsgbmFtZSA9IENyb3NzUGFydGl0aW9uRmlsZVNjaGVtZUFj
Y2Vzcy5odG1sOyBwYXRoID0gVGVzdHMvbWFjL0Nyb3NzUGFydGl0aW9uRmlsZVNjaGVtZUFjY2Vz
cy5odG1sOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CiAJCTdCMjczOURGMjYyNTcxQ0Mw
MDQwRjE4MiAvKiBDaGVja2VkTG9ja1Rlc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gQ2hlY2tlZExvY2tUZXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJN0IyNzM5RUUyNjMxNUU3RDAwNDBGMTgyIC8qIENoZWNrZWRDb25kaXRpb25UZXN0LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENoZWNrZWRDb25kaXRpb25U
ZXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0IyNzM5RjIyNjMyQUI2NDAw
NDBGMTgyIC8qIFRocmVhZEFzc2VydGlvbnNUZXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFRocmVhZEFzc2VydGlvbnNUZXN0LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJN0I3RDA5NjkyNTE5RjhGOTAwMTdBMDc4IC8qIFdlYkdMTm9DcmFzaE9u
T3RoZXJUaHJlYWRBY2Nlc3MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJHTE5vQ3Jhc2hP
bk90aGVyVGhyZWFkQWNjZXNzLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzFB
Rjc5MzFFOERDQkFCMDAyNjQ1QjkgLyogUHJlcGFyZUZvck1vdmVUb1dpbmRvdy5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFByZXBhcmVGb3JNb3ZlVG9XaW5kb3cu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDMzk2NTA1MUNERDc0RjkwMDk0REJC
OCAvKiBDb2xvclRlc3RzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IENvbG9yVGVzdHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDQ0NSw2ICs0
NDQ3LDcgQEAKIAkJCQk3Qzc0RDQyRDE4ODIyOEYzMDBFNUVENTcgLyogU3RyaW5nVmlldy5jcHAg
Ki8sCiAJCQkJNTU5N0Y4MzQxRDk1OTZDODAwNjZCQzIxIC8qIFN5bmNocm9uaXplZEZpeGVkUXVl
dWUuY3BwICovLAogCQkJCTkzMjlBQTI4MURFM0Y4MUUwMDNBQkQwNyAvKiBUZXh0QnJlYWtJdGVy
YXRvci5jcHAgKi8sCisJCQkJN0IyNzM5RjIyNjMyQUI2NDAwNDBGMTgyIC8qIFRocmVhZEFzc2Vy
dGlvbnNUZXN0LmNwcCAqLywKIAkJCQlFM0RFQTgxMDFGMEE1ODgwMDBDQkMyRTggLyogVGhyZWFk
R3JvdXAuY3BwICovLAogCQkJCUUzOEEwRDM0MUZENTBDQkMwMEU5OEM4QiAvKiBUaHJlYWRpbmcu
Y3BwICovLAogCQkJCTUzMTFCRDVEMUVBOTQ5MEQwMDUyNTI4MSAvKiBUaHJlYWRNZXNzYWdlcy5j
cHAgKi8sCkBAIC01MTk4LDYgKzUyMDEsNyBAQAogCQkJCTU1OTdGODM2MUQ5NTk2QzgwMDY2QkMy
MSAvKiBTeW5jaHJvbml6ZWRGaXhlZFF1ZXVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDODNE
RjQwMUQwQTU5MEMwMEZFQkNGMyAvKiBUZXN0c0NvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJOTMyOUFBMjkxREUzRjgxRTAwM0FCRDA3IC8qIFRleHRCcmVha0l0ZXJhdG9yLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTdCMjczOUYzMjYzMkFCNjQwMDQwRjE4MiAvKiBUaHJlYWRBc3Nl
cnRpb25zVGVzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFM0RFQTgxMTFGMEE1ODkwMDBDQkMy
RTggLyogVGhyZWFkR3JvdXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTM4QTBEMzUxRkQ1MEND
MzAwRTk4QzhCIC8qIFRocmVhZGluZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MzExQkQ1RTFF
QTk0OTBFMDA1MjUyODEgLyogVGhyZWFkTWVzc2FnZXMuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYg
LS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9UaHJlYWRBc3NlcnRpb25zVGVz
dC5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9UaHJlYWRBc3NlcnRpb25zVGVz
dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMDc0OWQ2ZjYyZDY0OTRjNmUyODA2NTU2ODU5MDgyODE3YjhhN2Mw
MAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1RocmVh
ZEFzc2VydGlvbnNUZXN0LmNwcApAQCAtMCwwICsxLDk1IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiVXRpbGl0aWVzLmgiCisjaW5jbHVkZSA8d3RmL1J1
bkxvb3AuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkQXNzZXJ0aW9ucy5oPiAvLyBOT0xJTlQ6IGNo
ZWNrLXdlYmtpdC1zdHlsZSBoYXMgcHJvYmxlbXMgd2l0aCBmaWxlcyB0aGF0IGRvIG5vdCBoYXZl
IHByaW1hcnkgaGVhZGVyLgorCituYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CituYW1lc3BhY2Ug
eworY2xhc3MgTXlDbGFzcyB7CitwdWJsaWM6CisgICAgaW50IGRvVGFzayhpbnQgbikKKyAgICB7
CisgICAgICAgIGFzc2VydElzQ3VycmVudChtX293bmVyVGhyZWFkKTsKKyAgICAgICAgcmV0dXJu
IGRvVGFza0ltcGwobik7CisgICAgfQorICAgIHZvaWQgYWNjZXNzVmFyaWFibGUoaW50IG4pCisg
ICAgeworICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9vd25lclRocmVhZCk7CisgICAgICAgIG1f
dmFsdWUgPSBuOworICAgIH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbnQgZG9UYXNrQ29t
cGlsZUZhaWx1cmUoVCBuKSB7IHJldHVybiBkb1Rhc2tJbXBsKG4pOyB9CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4gdm9pZCBhY2Nlc3NWYXJpYWJsZUNvbXBpbGVGYWlsdXJlKFQgbikgeyBtX3Zh
bHVlID0gbjsgfQorcHJpdmF0ZToKKyAgICBpbnQgZG9UYXNrSW1wbChpbnQgbikgV1RGX1JFUVVJ
UkVTX0xPQ0sobV9vd25lclRocmVhZCkgeyByZXR1cm4gbiArIDE7IH0KKyAgICBpbnQgbV92YWx1
ZSBXVEZfR1VBUkRFRF9CWV9MT0NLKG1fb3duZXJUaHJlYWQpIHsgMCB9OworICAgIE5PX1VOSVFV
RV9BRERSRVNTIFRocmVhZEFzc2VydGlvbiBtX293bmVyVGhyZWFkOworfTsKK30KKworVEVTVChX
VEZfVGhyZWFkQXNzZXJ0aW9ucywgVGVzdFRocmVhZEFzc2VydGlvbikKK3sKKyAgICBXVEY6Omlu
aXRpYWxpemVNYWluVGhyZWFkKCk7CisKKyAgICBNeUNsYXNzIGluc3RhbmNlOworICAgIEVYUEVD
VF9FUSg5LCBpbnN0YW5jZS5kb1Rhc2soOCkpOworICAgIGluc3RhbmNlLmFjY2Vzc1ZhcmlhYmxl
KDcpOworICAgIC8vIFVzZSBmb2xsb3dpbmcgdG8gbWFudWFsbHkgZW5zdXJlIGNvbXBpbGUgd2ls
bCBmYWlsOgorICAgIC8vIGluc3RhbmNlLmRvVGFza0NvbXBpbGVGYWlsdXJlKDkpOworICAgIC8v
IGluc3RhbmNlLmFjY2Vzc1ZhcmlhYmxlQ29tcGlsZUZhaWx1cmUoMTApOworfQorCitzdGF0aWMg
aW50IHRlc3RNYWluVGhyZWFkRnVuY3Rpb24oKSBXVEZfUkVRVUlSRVNfTE9DSyhtYWluVGhyZWFk
KSB7IHJldHVybiAxMTsgfQorCitURVNUKFdURl9UaHJlYWRBc3NlcnRpb25zLCBUZXN0TWFpblRo
cmVhZE5hbWVkQXNzZXJ0aW9uKQoreworICAgIFdURjo6aW5pdGlhbGl6ZU1haW5UaHJlYWQoKTsK
KyAgICAvLyBVc2UgZm9sbG93aW5nIHRvIG1hbnVhbGx5IGVuc3VyZSBjb21waWxlIHdpbGwgZmFp
bDoKKyAgICAvLyB0ZXN0TWFpblRocmVhZEZ1bmN0aW9uKCk7CisgICAgYXNzZXJ0SXNNYWluVGhy
ZWFkKCk7CisgICAgRVhQRUNUX0VRKDExLCB0ZXN0TWFpblRocmVhZEZ1bmN0aW9uKCkpOworfQor
CitzdGF0aWMgaW50IHRlc3RNYWluUnVuTG9vcEZ1bmN0aW9uKCkgV1RGX1JFUVVJUkVTX0xPQ0so
bWFpblJ1bkxvb3ApIHsgcmV0dXJuIDEyOyB9CisKK1RFU1QoV1RGX1RocmVhZEFzc2VydGlvbnMs
IFRlc3RNYWluUnVuTG9vcE5hbWVkQXNzZXJ0aW9uKQoreworICAgIFdURjo6aW5pdGlhbGl6ZU1h
aW5UaHJlYWQoKTsKKworICAgIGJvb2wgZG9uZSA9IGZhbHNlOworICAgIFJ1bkxvb3A6Om1haW4o
KS5kaXNwYXRjaChbJmRvbmVdIHsKKyAgICAgICAgLy8gVXNlIGZvbGxvd2luZyB0byBtYW51YWxs
eSBlbnN1cmUgY29tcGlsZSB3aWxsIGZhaWw6CisgICAgICAgIC8vIHRlc3RNYWluUnVuTG9vcEZ1
bmN0aW9uKCk7CisgICAgICAgIGFzc2VydElzTWFpblJ1bkxvb3AoKTsKKyAgICAgICAgRVhQRUNU
X0VRKDEyLCB0ZXN0TWFpblJ1bkxvb3BGdW5jdGlvbigpKTsKKyAgICAgICAgZG9uZSA9IHRydWU7
CisgICAgfSk7CisgICAgVXRpbDo6cnVuKCZkb25lKTsKK30KKworfSAvLyBuYW1lc3BhY2UgVGVz
dFdlYktpdEFQSQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>