<?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>189223</bug_id>
          
          <creation_ts>2018-09-01 16:45:20 -0700</creation_ts>
          <short_desc>Rename FilterEffectRenderer to CSSFilter</short_desc>
          <delta_ts>2018-09-01 20:05:20 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Simon Fraser (smfr)">simon.fraser</reporter>
          <assigned_to name="Simon Fraser (smfr)">simon.fraser</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>sam</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1455981</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2018-09-01 16:45:20 -0700</bug_when>
    <thetext>Rename FilterEffectRenderer to CSSFilter</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1455982</commentid>
    <comment_count>1</comment_count>
      <attachid>348720</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2018-09-01 16:46:45 -0700</bug_when>
    <thetext>Created attachment 348720
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1455983</commentid>
    <comment_count>2</comment_count>
      <attachid>348721</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2018-09-01 16:55:50 -0700</bug_when>
    <thetext>Created attachment 348721
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1455984</commentid>
    <comment_count>3</comment_count>
      <attachid>348722</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2018-09-01 17:16:27 -0700</bug_when>
    <thetext>Created attachment 348722
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1455985</commentid>
    <comment_count>4</comment_count>
      <attachid>348722</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2018-09-01 17:41:45 -0700</bug_when>
    <thetext>Comment on attachment 348722
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=348722&amp;action=review

&gt; Source/WebCore/ChangeLog:22
&gt; +        * rendering/CSSFilter.cpp: Copied from Source/WebCore/rendering/FilterEffectRenderer.cpp.

Seems a little weird to have something prefixed with CSS in the rendering directory (I think all the other CSS prefixed classes/files are in the css directory). Is there a way we can avoid using CSS as the prefix?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1455986</commentid>
    <comment_count>5</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2018-09-01 17:47:03 -0700</bug_when>
    <thetext>Yeah, I had the same thought. It could be StyleFilter.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1455987</commentid>
    <comment_count>6</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2018-09-01 18:08:02 -0700</bug_when>
    <thetext>(In reply to Simon Fraser (smfr) from comment #5)
&gt; Yeah, I had the same thought. It could be StyleFilter.

I think of the two choices, CSSFilter is clearer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1456000</commentid>
    <comment_count>7</comment_count>
      <attachid>348722</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-09-01 20:04:33 -0700</bug_when>
    <thetext>Comment on attachment 348722
Patch

Clearing flags on attachment: 348722

Committed r235586: &lt;https://trac.webkit.org/changeset/235586&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1456001</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-09-01 20:04:35 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1456002</commentid>
    <comment_count>9</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-09-01 20:05:20 -0700</bug_when>
    <thetext>&lt;rdar://problem/44039175&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>348720</attachid>
            <date>2018-09-01 16:46:45 -0700</date>
            <delta_ts>2018-09-01 16:55:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-189223-20180901164644.patch</filename>
            <type>text/plain</type>
            <size>42030</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM1NTc5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzBmMjU1ZWU2NjJkZGRm
NDk3YTFmMjY1NzY1ZWMzZjkzODhjOWY2NC4uODk1NTYyOGU0NDBjNmQwNzg0MGQ2OTBhZTY1NGIy
OTYwM2UxODI4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYzIEBACisyMDE4LTA5LTAxICBTaW1v
biBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgorCisgICAgICAgIFJlbmFtZSBGaWx0
ZXJFZmZlY3RSZW5kZXJlciB0byBDU1NGaWx0ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE4OTIyMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEZpbHRlciB3YXMgc3ViY2xhc3NlZCBieSBTVkdGaWx0ZXIg
Zm9yIFNWRywgYW5kIEZpbHRlckVmZmVjdFJlbmRlcmVyIGZvciBDU1MsCisgICAgICAgIHdoaWNo
IHdhcyB2ZXJ5IGNvbmZ1c2luZywgZXNwZWNpYWxseSB3aGVuIHRoZSBjb2RlIHVzZXMgcmVuZGVy
ZXIoKSB0byBnZXQgaXQuCisgICAgICAgIAorICAgICAgICBSZW5hbWUgRmlsdGVyRWZmZWN0UmVu
ZGVyZXIgdG8gQ1NTRmlsdGVyLCBhbmQgYWNjZXNzIHZpYSBmaWx0ZXIoKS4KKyAgICAgICAgCisg
ICAgICAgIEZ1dHVyZSBjbGVhbnVwIHdpbGwgZGVhbCB3aXRoIEZpbHRlckVmZmVjdFJlbmRlcmVy
SGVscGVyLgorCisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGNzcy9DU1NGaWx0ZXJJbWFnZVZhbHVl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlckltYWdlVmFsdWU6OmltYWdlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0Zm9ybUNBRmlsdGVyc0NvY29h
Lm1tOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmg6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXI6OmlzQ1NTRmlsdGVyIGNvbnN0KToKKyAgICAgICAgKiByZW5k
ZXJpbmcvRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZW5kTWF0
cml4Um93KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Omxhc3RNYXRyaXhSb3cpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0UmVuZGVyZXI6OkZpbHRlckVmZmVj
dFJlbmRlcmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om1fc291cmNlR3JhcGhpYyk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3RSZW5kZXJlcjo6Y3JlYXRl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdFJlbmRlcmVyOjppbnB1
dENvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0UmVuZGVy
ZXI6OmJ1aWxkUmVmZXJlbmNlRmlsdGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlckVmZmVjdFJlbmRlcmVyOjpidWlsZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJFZmZlY3RSZW5kZXJlcjo6dXBkYXRlQmFja2luZ1N0b3JlUmVjdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3RSZW5kZXJlcjo6YWxsb2NhdGVCYWNraW5nU3Rv
cmVJZk5lZWRlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3RSZW5k
ZXJlcjo6Y2xlYXJJbnRlcm1lZGlhdGVSZXN1bHRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlckVmZmVjdFJlbmRlcmVyOjphcHBseSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXJFZmZlY3RSZW5kZXJlcjo6Y29tcHV0ZVNvdXJjZUltYWdlUmVjdEZvckRpcnR5
UmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3RSZW5kZXJlcjo6
b3V0cHV0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdFJl
bmRlcmVyOjpzZXRNYXhFZmZlY3RSZWN0cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJFZmZlY3RSZW5kZXJlcjo6b3V0cHV0UmVjdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
ICogcmVuZGVyaW5nL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJFZmZlY3RSZW5kZXJlckhlbHBlcjo6RmlsdGVyRWZmZWN0UmVuZGVyZXJIZWxwZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0UmVuZGVyZXI6OnNldFNvdXJjZUltYWdlUmVj
dCk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHA6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZyYW1lLmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVySW1hZ2UuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6cmVxdWlyZXNGdWxsTGF5ZXJJbWFnZUZvckZp
bHRlcnMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmZpbHRlclJlbmRl
cmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpmaWx0ZXJQYWludGVy
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzZXR1cEZpbHRlcnMpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNhbGN1bGF0ZUNsaXBSZWN0cyBjb25zdCk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmg6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlckxheWVyQmFja2luZy5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVy
RmlsdGVySW5mby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6RmlsdGVySW5m
bzo6c2V0RmlsdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpGaWx0ZXJJbmZv
Ojp1cGRhdGVSZWZlcmVuY2VGaWx0ZXJDbGllbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyOjpGaWx0ZXJJbmZvOjpyZW1vdmVSZWZlcmVuY2VGaWx0ZXJDbGllbnRzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpGaWx0ZXJJbmZvOjpzZXRSZW5kZXJlcik6IERlbGV0
ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVySW5mby5oOgorICAgICAg
ICAqIHJlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlQnVpbGRlckJsb2NrLmNwcDoKKwogMjAx
OC0wOS0wMSAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAg
ICBBZGQgc29tZSBtb3JlIGZpbHRlciBsb2dnaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IDU5MTU3MzZj
NTE2ODQ5MmM1MDBiOGFlNWMyM2Y5MGFiNDg4NTQ1NjAuLjBkY2FhODMxZTdmZDc2MzYzMmVmYWE1
MTAyNmE0ZWQ2MGYyMWNiMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0xODM3LDYgKzE4MzcsNyBAQCBy
ZW5kZXJpbmcvQXV0b1RhYmxlTGF5b3V0LmNwcAogcmVuZGVyaW5nL0JpZGlSdW4uY3BwCiByZW5k
ZXJpbmcvQm9yZGVyRWRnZS5jcHAKIHJlbmRlcmluZy9CcmVha0xpbmVzLmNwcAorcmVuZGVyaW5n
L0NTU0ZpbHRlci5jcHAKIHJlbmRlcmluZy9DbGlwUmVjdC5jcHAKIHJlbmRlcmluZy9Db3VudGVy
Tm9kZS5jcHAKIHJlbmRlcmluZy9FbGxpcHNpc0JveC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA3MWNlYzhjYjExNDBmNTM4
ZTkxNGIwNWJhZGFjNjZkZDc1NGVjYzVlLi4xYWU2ODI3YWRjYzAwY2EwZmIwNDE0MzY0OTA5OTlj
MDU0Y2RiNjEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCkBAIC01NjA5LDYgKzU2MDksOCBAQAogCQkwRjQ5NjZBNzFEQjQwQzQzMDBB
Mjc0QkIgLyogSlNET01Qb2ludEluaXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSlNET01Qb2ludEluaXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0OTY2
QTgxREI0MEM0MzAwQTI3NEJCIC8qIEpTRE9NUG9pbnRSZWFkT25seS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0RPTVBvaW50UmVhZE9ubHkuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRjQ5NjZBOTFEQjQwQzQzMDBBMjc0QkIgLyogSlNET01Q
b2ludFJlYWRPbmx5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRE9NUG9p
bnRSZWFkT25seS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjUzRkI4MTIxM0Ix
QkI4MDBDNDBEMzQgLyogQ1NTRmlsdGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IENTU0ZpbHRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
NTNGQjgzMjEzQjFCQjgwMEM0MEQzNCAvKiBDU1NGaWx0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQ1NTRmlsdGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGNTREQ0UzMTg4MTA1MUQwMDNFRURCQiAvKiBUZXh0QXV0b1NpemluZy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUZXh0QXV0b1NpemluZy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNTREQ0U0MTg4MTA1MUQwMDNFRURCQiAvKiBUZXh0QXV0
b1NpemluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZXh0QXV0b1Npemlu
Zy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjU0REQwNTE4ODFENUY1MDAzRUVE
QkIgLyogVG91Y2guaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVG91Y2guaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI1NzM3LDYgKzI1NzM5LDggQEAKIAkJCQlC
Q0RENDU0RDEyMzZDOTVDMDA5QTc5ODUgLyogQ29sdW1uSW5mby5oICovLAogCQkJCTkzOTJGMTRG
MEFEMTg2MjMwMDY5MUJENCAvKiBDb3VudGVyTm9kZS5jcHAgKi8sCiAJCQkJOTM5MkYxNEIwQUQx
ODYxQjAwNjkxQkQ0IC8qIENvdW50ZXJOb2RlLmggKi8sCisJCQkJMEY1M0ZCODEyMTNCMUJCODAw
QzQwRDM0IC8qIENTU0ZpbHRlci5jcHAgKi8sCisJCQkJMEY1M0ZCODMyMTNCMUJCODAwQzQwRDM0
IC8qIENTU0ZpbHRlci5oICovLAogCQkJCUE4Q0ZGNkNBMEExNTYxQ0QwMDBBNDIzNCAvKiBFbGxp
cHNpc0JveC5jcHAgKi8sCiAJCQkJQThDRkY2QkQwQTE1NjExODAwMEE0MjM0IC8qIEVsbGlwc2lz
Qm94LmggKi8sCiAJCQkJMzEzMTNGNjMxNDQzQjM1RTAwNkUyQTkwIC8qIEZpbHRlckVmZmVjdFJl
bmRlcmVyLmNwcCAqLywKQEAgLTMxNDEyLDYgKzMxNDE2LDcgQEAKIAkJCQk1Q0REODM2NDFFNDMy
NUEwMDA2MjFFOTIgLyogTGliV2ViUlRDRGF0YUNoYW5uZWxIYW5kbGVyLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTQxNzYxMkFGMUUzQTk5NDAwMEMzRDgxRCAvKiBMaWJXZWJSVENNZWRpYUVuZHBv
aW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQxNzYxMkIxMUUzQTk5NDAwMEMzRDgxRCAvKiBM
aWJXZWJSVENQZWVyQ29ubmVjdGlvbkJhY2tlbmQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNDFE
MjhEMEQyMTM5RTA1ODAwRjQyMDZGIC8qIExpYldlYlJUQ1N0YXRzQ29sbGVjdG9yLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTk3NTlFOTNFMTRFRjFDRjgwMDI2QTJERCAvKiBMb2FkYWJsZVRleHRU
cmFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0NDU3NzVFQTIwNDczMDNDMDA4RENFNUQgLyog
TG9jYWxEZWZhdWx0U3lzdGVtQXBwZWFyYW5jZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCUZBQkU3
MkZFMTA1OUMyMTEwMEQ5OTlERCAvKiBNYXRoTUxOYW1lcy5jcHAgaW4gU291cmNlcyAqLywKQEAg
LTMxNzc5LDcgKzMxNzg0LDYgQEAKIAkJCQlERUNBN0U2NTFGOUVCRDgzMDBFM0I2NjEgLyogVW5p
ZmllZFNvdXJjZTIzNC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlERUNBN0U2NjFGOUVCRDgzMDBF
M0I2NjEgLyogVW5pZmllZFNvdXJjZTIzNS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlERUNBN0U2
NzFGOUVCRDgzMDBFM0I2NjEgLyogVW5pZmllZFNvdXJjZTIzNi5jcHAgaW4gU291cmNlcyAqLywK
LQkJCQk0MUQyOEQwRDIxMzlFMDU4MDBGNDIwNkYgLyogTGliV2ViUlRDU3RhdHNDb2xsZWN0b3Iu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJREVDQTdFNjgxRjlFQkQ4MzAwRTNCNjYxIC8qIFVuaWZp
ZWRTb3VyY2UyMzcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJREVDQTdFNjkxRjlFQkQ4MzAwRTNC
NjYxIC8qIFVuaWZpZWRTb3VyY2UyMzguY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJREVDQTdFNkEx
RjlFQkQ4MzAwRTNCNjYxIC8qIFVuaWZpZWRTb3VyY2UyMzkuY3BwIGluIFNvdXJjZXMgKi8sCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5jcHAKaW5kZXggNmFjZjc0NGVh
YjRhOWVjZWFhYjZjNmM3MmVmOWNlOTU4YjAyZTUxNS4uNmYyNTNkMTNiMzMxMzM5MjIxZTE1MmJi
ZmI2ODhmNGI5Y2Q4NDFhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZpbHRl
ckltYWdlVmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGaWx0ZXJJbWFnZVZh
bHVlLmNwcApAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IkNTU0ZpbHRlckltYWdlVmFsdWUuaCIKIAorI2luY2x1ZGUgIkNTU0ZpbHRlci5oIgogI2luY2x1
ZGUgIkNhY2hlZEltYWdlLmgiCiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaCIKICNp
bmNsdWRlICJGaWx0ZXJFZmZlY3RSZW5kZXJlci5oIgpAQCAtMTMxLDE1ICsxMzIsMTUgQEAgUmVm
UHRyPEltYWdlPiBDU1NGaWx0ZXJJbWFnZVZhbHVlOjppbWFnZShSZW5kZXJFbGVtZW50KiByZW5k
ZXJlciwgY29uc3QgRmxvYXRTaXoKICAgICBhdXRvIGltYWdlUmVjdCA9IEZsb2F0UmVjdCB7IHsg
fSwgc2l6ZSB9OwogICAgIHRleHR1cmUtPmNvbnRleHQoKS5kcmF3SW1hZ2UoKmltYWdlLCBpbWFn
ZVJlY3QpOwogCi0gICAgYXV0byBmaWx0ZXJSZW5kZXJlciA9IEZpbHRlckVmZmVjdFJlbmRlcmVy
OjpjcmVhdGUoKTsKLSAgICBmaWx0ZXJSZW5kZXJlci0+c2V0U291cmNlSW1hZ2UoV1RGTW92ZSh0
ZXh0dXJlKSk7Ci0gICAgZmlsdGVyUmVuZGVyZXItPnNldFNvdXJjZUltYWdlUmVjdChpbWFnZVJl
Y3QpOwotICAgIGZpbHRlclJlbmRlcmVyLT5zZXRGaWx0ZXJSZWdpb24oaW1hZ2VSZWN0KTsKLSAg
ICBpZiAoIWZpbHRlclJlbmRlcmVyLT5idWlsZCgqcmVuZGVyZXIsIG1fZmlsdGVyT3BlcmF0aW9u
cywgRmlsdGVyRnVuY3Rpb24pKQorICAgIGF1dG8gY3NzRmlsdGVyID0gQ1NTRmlsdGVyOjpjcmVh
dGUoKTsKKyAgICBjc3NGaWx0ZXItPnNldFNvdXJjZUltYWdlKFdURk1vdmUodGV4dHVyZSkpOwor
ICAgIGNzc0ZpbHRlci0+c2V0U291cmNlSW1hZ2VSZWN0KGltYWdlUmVjdCk7CisgICAgY3NzRmls
dGVyLT5zZXRGaWx0ZXJSZWdpb24oaW1hZ2VSZWN0KTsKKyAgICBpZiAoIWNzc0ZpbHRlci0+YnVp
bGQoKnJlbmRlcmVyLCBtX2ZpbHRlck9wZXJhdGlvbnMsIEZpbHRlckNvbnN1bWVyOjpGaWx0ZXJG
dW5jdGlvbikpCiAgICAgICAgIHJldHVybiAmSW1hZ2U6Om51bGxJbWFnZSgpOwotICAgIGZpbHRl
clJlbmRlcmVyLT5hcHBseSgpOworICAgIGNzc0ZpbHRlci0+YXBwbHkoKTsKIAotICAgIHJldHVy
biBmaWx0ZXJSZW5kZXJlci0+b3V0cHV0KCktPmNvcHlJbWFnZSgpOworICAgIHJldHVybiBjc3NG
aWx0ZXItPm91dHB1dCgpLT5jb3B5SW1hZ2UoKTsKIH0KIAogdm9pZCBDU1NGaWx0ZXJJbWFnZVZh
bHVlOjpmaWx0ZXJJbWFnZUNoYW5nZWQoY29uc3QgSW50UmVjdCYpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0Zm9ybUNBRmlsdGVyc0Nv
Y29hLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZv
cm1DQUZpbHRlcnNDb2NvYS5tbQppbmRleCAwYjVmNmZiZTBiNjBlNGY4MDNkZmYxMmE2Yzc5NDNl
NTU0NzhiZjNkLi4zYWIzOWRmZmVhNTljMzkzMzk0NTM3ZmI5MWEwMjZkMjM0NjkwMzk0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0Zm9y
bUNBRmlsdGVyc0NvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhL2NvY29hL1BsYXRmb3JtQ0FGaWx0ZXJzQ29jb2EubW0KQEAgLTM1LDcgKzM1LDcgQEAKIAog
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKLS8vIEZJWE1FOiBTaG91bGQgc2hhcmUgdGhlc2Ug
dmFsdWVzIHdpdGggRmlsdGVyRWZmZWN0UmVuZGVyZXI6OmJ1aWxkKCkgKGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NjAwOCkuCisvLyBGSVhNRTogU2hvdWxkIHNoYXJl
IHRoZXNlIHZhbHVlcyB3aXRoIENTU0ZpbHRlcjo6YnVpbGQoKSAoaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTc2MDA4KS4KIHN0YXRpYyBjb25zdCBkb3VibGUgc2VwaWFG
dWxsQ29uc3RhbnRzWzNdWzNdID0gewogICAgIHsgMC4zOTMsIDAuNzY5LCAwLjE4OSB9LAogICAg
IHsgMC4zNDksIDAuNjg2LCAwLjE2OCB9LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmgKaW5kZXggNTAxYWZkMDdmYTA3ZjZhNzg4NzNhMzcz
Yjc3NDdiYThiODMwYzIxMy4uM2JlZGVhNzA1Yjc2ZDliZjFhMWM1MTljYjJlNDM3NWE4YWU2ODI4
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
aWx0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Zp
bHRlci5oCkBAIC00OCw2ICs0OCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFJlbmRlcmluZ01v
ZGUoUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKSB7IG1fcmVuZGVyaW5nTW9kZSA9IHJlbmRl
cmluZ01vZGU7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBpc1NWR0ZpbHRlcigpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzQ1NTRmlsdGVyKCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KIAogICAgIHZpcnR1YWwgRmxvYXRTaXplIHNjYWxlZEJ5RmlsdGVyUmVzb2x1
dGlvbihGbG9hdFNpemUgc2l6ZSkgY29uc3QgeyByZXR1cm4gc2l6ZSAqIG1fZmlsdGVyUmVzb2x1
dGlvbjsgfQogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0ZpbHRl
ckVmZmVjdFJlbmRlcmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GaWx0ZXJFZmZl
Y3RSZW5kZXJlci5jcHAKaW5kZXggOGJmN2FlNDUyNjVhZDY5N2Y1MTBkZDBiNDcxMDllMGJkMzNi
ZGNkYS4uODA0ZDBmM2VmNTg2ZmQyNjMyYjMxMzEwNWNlNzk5MzY5MjZjMzVhYiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwCkBAIC0y
Nyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0
UmVuZGVyZXIuaCIKIAorI2luY2x1ZGUgIkNTU0ZpbHRlci5oIgogI2luY2x1ZGUgIkNhY2hlZFNW
R0RvY3VtZW50LmgiCiAjaW5jbHVkZSAiQ2FjaGVkU1ZHRG9jdW1lbnRSZWZlcmVuY2UuaCIKICNp
bmNsdWRlICJFbGVtZW50SXRlcmF0b3IuaCIKQEAgLTUwLDM0MyArNTEsNiBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBlbmRNYXRyaXhSb3coVmVjdG9yPGZs
b2F0PiYgcGFyYW1ldGVycykKLXsKLSAgICBwYXJhbWV0ZXJzLmFwcGVuZCgwKTsKLSAgICBwYXJh
bWV0ZXJzLmFwcGVuZCgwKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGxhc3RNYXRyaXhSb3co
VmVjdG9yPGZsb2F0PiYgcGFyYW1ldGVycykKLXsKLSAgICBwYXJhbWV0ZXJzLmFwcGVuZCgwKTsK
LSAgICBwYXJhbWV0ZXJzLmFwcGVuZCgwKTsKLSAgICBwYXJhbWV0ZXJzLmFwcGVuZCgwKTsKLSAg
ICBwYXJhbWV0ZXJzLmFwcGVuZCgxKTsKLSAgICBwYXJhbWV0ZXJzLmFwcGVuZCgwKTsKLX0KLQot
aW5saW5lIEZpbHRlckVmZmVjdFJlbmRlcmVyOjpGaWx0ZXJFZmZlY3RSZW5kZXJlcigpCi0gICAg
OiBGaWx0ZXIoRmxvYXRTaXplIHsgMSwgMSB9KQotICAgICwgbV9zb3VyY2VHcmFwaGljKFNvdXJj
ZUdyYXBoaWM6OmNyZWF0ZSgqdGhpcykpCi17Ci19Ci0KLVJlZjxGaWx0ZXJFZmZlY3RSZW5kZXJl
cj4gRmlsdGVyRWZmZWN0UmVuZGVyZXI6OmNyZWF0ZSgpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgRmlsdGVyRWZmZWN0UmVuZGVyZXIpOwotfQotCi1GaWx0ZXJFZmZlY3RSZW5kZXJlcjo6
fkZpbHRlckVmZmVjdFJlbmRlcmVyKCkgPSBkZWZhdWx0OwotCi1HcmFwaGljc0NvbnRleHQqIEZp
bHRlckVmZmVjdFJlbmRlcmVyOjppbnB1dENvbnRleHQoKQotewotICAgIHJldHVybiBzb3VyY2VJ
bWFnZSgpID8gJnNvdXJjZUltYWdlKCktPmNvbnRleHQoKSA6IG51bGxwdHI7Ci19Ci0KLVJlZlB0
cjxGaWx0ZXJFZmZlY3Q+IEZpbHRlckVmZmVjdFJlbmRlcmVyOjpidWlsZFJlZmVyZW5jZUZpbHRl
cihSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgRmlsdGVyRWZmZWN0JiBwcmV2aW91c0VmZmVjdCwg
UmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uJiBmaWx0ZXJPcGVyYXRpb24pCi17Ci0gICAgYXV0byog
Y2FjaGVkU1ZHRG9jdW1lbnRSZWZlcmVuY2UgPSBmaWx0ZXJPcGVyYXRpb24uY2FjaGVkU1ZHRG9j
dW1lbnRSZWZlcmVuY2UoKTsKLSAgICBhdXRvKiBjYWNoZWRTVkdEb2N1bWVudCA9IGNhY2hlZFNW
R0RvY3VtZW50UmVmZXJlbmNlID8gY2FjaGVkU1ZHRG9jdW1lbnRSZWZlcmVuY2UtPmRvY3VtZW50
KCkgOiBudWxscHRyOwotCi0gICAgLy8gSWYgd2UgaGF2ZSBhbiBTVkcgZG9jdW1lbnQsIHRoaXMg
aXMgYW4gZXh0ZXJuYWwgcmVmZXJlbmNlLiBPdGhlcndpc2UKLSAgICAvLyB3ZSBsb29rIHVwIHRo
ZSByZWZlcmVuY2VkIG5vZGUgaW4gdGhlIGN1cnJlbnQgZG9jdW1lbnQuCi0gICAgRG9jdW1lbnQq
IGRvY3VtZW50OwotICAgIGlmICghY2FjaGVkU1ZHRG9jdW1lbnQpCi0gICAgICAgIGRvY3VtZW50
ID0gJnJlbmRlcmVyLmRvY3VtZW50KCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGRvY3VtZW50ID0g
Y2FjaGVkU1ZHRG9jdW1lbnQtPmRvY3VtZW50KCk7Ci0gICAgICAgIGlmICghZG9jdW1lbnQpCi0g
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBhdXRvKiBmaWx0ZXIgPSBk
b2N1bWVudC0+Z2V0RWxlbWVudEJ5SWQoZmlsdGVyT3BlcmF0aW9uLmZyYWdtZW50KCkpOwotICAg
IGlmICghZmlsdGVyKSB7Ci0gICAgICAgIC8vIEFsdGhvdWdoIHdlIGRpZCBub3QgZmluZCB0aGUg
cmVmZXJlbmNlZCBmaWx0ZXIsIGl0IG1pZ2h0IGV4aXN0IGxhdGVyIGluIHRoZSBkb2N1bWVudC4K
LSAgICAgICAgLy8gRklYTUU6IFRoaXMgc2tpcHMgYW5vbnltb3VzIFJlbmRlck9iamVjdHMuIDxo
dHRwczovL3dlYmtpdC5vcmcvYi8xMzEwODU+Ci0gICAgICAgIGlmIChhdXRvKiBlbGVtZW50ID0g
cmVuZGVyZXIuZWxlbWVudCgpKQotICAgICAgICAgICAgZG9jdW1lbnQtPmFjY2Vzc1NWR0V4dGVu
c2lvbnMoKS5hZGRQZW5kaW5nUmVzb3VyY2UoZmlsdGVyT3BlcmF0aW9uLmZyYWdtZW50KCksIGVs
ZW1lbnQpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBSZWZQdHI8Rmls
dGVyRWZmZWN0PiBlZmZlY3Q7Ci0KLSAgICBhdXRvIGJ1aWxkZXIgPSBzdGQ6Om1ha2VfdW5pcXVl
PFNWR0ZpbHRlckJ1aWxkZXI+KCZwcmV2aW91c0VmZmVjdCk7Ci0KLSAgICBmb3IgKGF1dG8mIGVm
ZmVjdEVsZW1lbnQgOiBjaGlsZHJlbk9mVHlwZTxTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0
dHJpYnV0ZXM+KCpmaWx0ZXIpKSB7Ci0gICAgICAgIGVmZmVjdCA9IGVmZmVjdEVsZW1lbnQuYnVp
bGQoYnVpbGRlci5nZXQoKSwgKnRoaXMpOwotICAgICAgICBpZiAoIWVmZmVjdCkKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGVmZmVjdEVsZW1lbnQuc2V0U3RhbmRhcmRBdHRyaWJ1
dGVzKGVmZmVjdC5nZXQoKSk7Ci0gICAgICAgIGlmIChlZmZlY3RFbGVtZW50LnJlbmRlcmVyKCkp
Ci0gICAgICAgICAgICBlZmZlY3QtPnNldE9wZXJhdGluZ0NvbG9yU3BhY2UoZWZmZWN0RWxlbWVu
dC5yZW5kZXJlcigpLT5zdHlsZSgpLnN2Z1N0eWxlKCkuY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVy
cygpID09IENvbG9ySW50ZXJwb2xhdGlvbjo6TGluZWFyUkdCID8gQ29sb3JTcGFjZUxpbmVhclJH
QiA6IENvbG9yU3BhY2VTUkdCKTsKLQotICAgICAgICBidWlsZGVyLT5hZGQoZWZmZWN0RWxlbWVu
dC5yZXN1bHQoKSwgZWZmZWN0KTsKLSAgICAgICAgbV9lZmZlY3RzLmFwcGVuZCgqZWZmZWN0KTsK
LSAgICB9Ci0gICAgcmV0dXJuIGVmZmVjdDsKLX0KLQotYm9vbCBGaWx0ZXJFZmZlY3RSZW5kZXJl
cjo6YnVpbGQoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMm
IG9wZXJhdGlvbnMsIEZpbHRlckNvbnN1bWVyIGNvbnN1bWVyKQotewotICAgIG1faGFzRmlsdGVy
VGhhdE1vdmVzUGl4ZWxzID0gb3BlcmF0aW9ucy5oYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMoKTsK
LSAgICBtX2hhc0ZpbHRlclRoYXRTaG91bGRCZVJlc3RyaWN0ZWRCeVNlY3VyaXR5T3JpZ2luID0g
b3BlcmF0aW9ucy5oYXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1cml0eU9yaWdp
bigpOwotICAgIGlmIChtX2hhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscykKLSAgICAgICAgbV9vdXRz
ZXRzID0gb3BlcmF0aW9ucy5vdXRzZXRzKCk7Ci0KLSAgICBtX2VmZmVjdHMuY2xlYXIoKTsKLQot
ICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IHByZXZpb3VzRWZmZWN0ID0gbV9zb3VyY2VHcmFwaGlj
LnB0cigpOwotICAgIGZvciAoYXV0byYgb3BlcmF0aW9uIDogb3BlcmF0aW9ucy5vcGVyYXRpb25z
KCkpIHsKLSAgICAgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gZWZmZWN0OwotICAgICAgICBhdXRv
JiBmaWx0ZXJPcGVyYXRpb24gPSAqb3BlcmF0aW9uOwotICAgICAgICBzd2l0Y2ggKGZpbHRlck9w
ZXJhdGlvbi50eXBlKCkpIHsKLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlJFRkVSRU5D
RTogewotICAgICAgICAgICAgYXV0byYgcmVmZXJlbmNlT3BlcmF0aW9uID0gZG93bmNhc3Q8UmVm
ZXJlbmNlRmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgZWZm
ZWN0ID0gYnVpbGRSZWZlcmVuY2VGaWx0ZXIocmVuZGVyZXIsICpwcmV2aW91c0VmZmVjdCwgcmVm
ZXJlbmNlT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIHJlZmVyZW5jZU9wZXJhdGlvbi5zZXRGaWx0
ZXJFZmZlY3QoZWZmZWN0LmNvcHlSZWYoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6R1JBWVNDQUxFOiB7Ci0gICAgICAgICAg
ICBhdXRvJiBjb2xvck1hdHJpeE9wZXJhdGlvbiA9IGRvd25jYXN0PEJhc2ljQ29sb3JNYXRyaXhG
aWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBWZWN0b3I8Zmxv
YXQ+IGlucHV0UGFyYW1ldGVyczsKLSAgICAgICAgICAgIGRvdWJsZSBvbmVNaW51c0Ftb3VudCA9
IGNsYW1wVG8oMSAtIGNvbG9yTWF0cml4T3BlcmF0aW9uLmFtb3VudCgpLCAwLjAsIDEuMCk7Ci0K
LSAgICAgICAgICAgIC8vIFNlZSBodHRwczovL2R2Y3MudzMub3JnL2hnL0ZYVEYvcmF3LWZpbGUv
dGlwL2ZpbHRlcnMvaW5kZXguaHRtbCNncmF5c2NhbGVFcXVpdmFsZW50Ci0gICAgICAgICAgICAv
LyBmb3IgaW5mb3JtYXRpb24gb24gcGFyYW1ldGVycy4KLQotICAgICAgICAgICAgaW5wdXRQYXJh
bWV0ZXJzLmFwcGVuZChuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMjEyNiArIDAuNzg3NCAqIG9u
ZU1pbnVzQW1vdW50KSk7Ci0gICAgICAgICAgICBpbnB1dFBhcmFtZXRlcnMuYXBwZW5kKG5hcnJv
d1ByZWNpc2lvblRvRmxvYXQoMC43MTUyIC0gMC43MTUyICogb25lTWludXNBbW91bnQpKTsKLSAg
ICAgICAgICAgIGlucHV0UGFyYW1ldGVycy5hcHBlbmQobmFycm93UHJlY2lzaW9uVG9GbG9hdCgw
LjA3MjIgLSAwLjA3MjIgKiBvbmVNaW51c0Ftb3VudCkpOwotICAgICAgICAgICAgZW5kTWF0cml4
Um93KGlucHV0UGFyYW1ldGVycyk7Ci0KLSAgICAgICAgICAgIGlucHV0UGFyYW1ldGVycy5hcHBl
bmQobmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjIxMjYgLSAwLjIxMjYgKiBvbmVNaW51c0Ftb3Vu
dCkpOwotICAgICAgICAgICAgaW5wdXRQYXJhbWV0ZXJzLmFwcGVuZChuYXJyb3dQcmVjaXNpb25U
b0Zsb2F0KDAuNzE1MiArIDAuMjg0OCAqIG9uZU1pbnVzQW1vdW50KSk7Ci0gICAgICAgICAgICBp
bnB1dFBhcmFtZXRlcnMuYXBwZW5kKG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4wNzIyIC0gMC4w
NzIyICogb25lTWludXNBbW91bnQpKTsKLSAgICAgICAgICAgIGVuZE1hdHJpeFJvdyhpbnB1dFBh
cmFtZXRlcnMpOwotCi0gICAgICAgICAgICBpbnB1dFBhcmFtZXRlcnMuYXBwZW5kKG5hcnJvd1By
ZWNpc2lvblRvRmxvYXQoMC4yMTI2IC0gMC4yMTI2ICogb25lTWludXNBbW91bnQpKTsKLSAgICAg
ICAgICAgIGlucHV0UGFyYW1ldGVycy5hcHBlbmQobmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjcx
NTIgLSAwLjcxNTIgKiBvbmVNaW51c0Ftb3VudCkpOwotICAgICAgICAgICAgaW5wdXRQYXJhbWV0
ZXJzLmFwcGVuZChuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMDcyMiArIDAuOTI3OCAqIG9uZU1p
bnVzQW1vdW50KSk7Ci0gICAgICAgICAgICBlbmRNYXRyaXhSb3coaW5wdXRQYXJhbWV0ZXJzKTsK
LQotICAgICAgICAgICAgbGFzdE1hdHJpeFJvdyhpbnB1dFBhcmFtZXRlcnMpOwotCi0gICAgICAg
ICAgICBlZmZlY3QgPSBGRUNvbG9yTWF0cml4OjpjcmVhdGUoKnRoaXMsIEZFQ09MT1JNQVRSSVhf
VFlQRV9NQVRSSVgsIGlucHV0UGFyYW1ldGVycyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0VQSUE6IHsKLSAgICAgICAgICAg
IGF1dG8mIGNvbG9yTWF0cml4T3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZp
bHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIFZlY3RvcjxmbG9h
dD4gaW5wdXRQYXJhbWV0ZXJzOwotICAgICAgICAgICAgZG91YmxlIG9uZU1pbnVzQW1vdW50ID0g
Y2xhbXBUbygxIC0gY29sb3JNYXRyaXhPcGVyYXRpb24uYW1vdW50KCksIDAuMCwgMS4wKTsKLQot
ICAgICAgICAgICAgLy8gU2VlIGh0dHBzOi8vZHZjcy53My5vcmcvaGcvRlhURi9yYXctZmlsZS90
aXAvZmlsdGVycy9pbmRleC5odG1sI3NlcGlhRXF1aXZhbGVudAotICAgICAgICAgICAgLy8gZm9y
IGluZm9ybWF0aW9uIG9uIHBhcmFtZXRlcnMuCi0KLSAgICAgICAgICAgIGlucHV0UGFyYW1ldGVy
cy5hcHBlbmQobmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjM5MyArIDAuNjA3ICogb25lTWludXNB
bW91bnQpKTsKLSAgICAgICAgICAgIGlucHV0UGFyYW1ldGVycy5hcHBlbmQobmFycm93UHJlY2lz
aW9uVG9GbG9hdCgwLjc2OSAtIDAuNzY5ICogb25lTWludXNBbW91bnQpKTsKLSAgICAgICAgICAg
IGlucHV0UGFyYW1ldGVycy5hcHBlbmQobmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjE4OSAtIDAu
MTg5ICogb25lTWludXNBbW91bnQpKTsKLSAgICAgICAgICAgIGVuZE1hdHJpeFJvdyhpbnB1dFBh
cmFtZXRlcnMpOwotCi0gICAgICAgICAgICBpbnB1dFBhcmFtZXRlcnMuYXBwZW5kKG5hcnJvd1By
ZWNpc2lvblRvRmxvYXQoMC4zNDkgLSAwLjM0OSAqIG9uZU1pbnVzQW1vdW50KSk7Ci0gICAgICAg
ICAgICBpbnB1dFBhcmFtZXRlcnMuYXBwZW5kKG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC42ODYg
KyAwLjMxNCAqIG9uZU1pbnVzQW1vdW50KSk7Ci0gICAgICAgICAgICBpbnB1dFBhcmFtZXRlcnMu
YXBwZW5kKG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4xNjggLSAwLjE2OCAqIG9uZU1pbnVzQW1v
dW50KSk7Ci0gICAgICAgICAgICBlbmRNYXRyaXhSb3coaW5wdXRQYXJhbWV0ZXJzKTsKLQotICAg
ICAgICAgICAgaW5wdXRQYXJhbWV0ZXJzLmFwcGVuZChuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAu
MjcyIC0gMC4yNzIgKiBvbmVNaW51c0Ftb3VudCkpOwotICAgICAgICAgICAgaW5wdXRQYXJhbWV0
ZXJzLmFwcGVuZChuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuNTM0IC0gMC41MzQgKiBvbmVNaW51
c0Ftb3VudCkpOwotICAgICAgICAgICAgaW5wdXRQYXJhbWV0ZXJzLmFwcGVuZChuYXJyb3dQcmVj
aXNpb25Ub0Zsb2F0KDAuMTMxICsgMC44NjkgKiBvbmVNaW51c0Ftb3VudCkpOwotICAgICAgICAg
ICAgZW5kTWF0cml4Um93KGlucHV0UGFyYW1ldGVycyk7Ci0KLSAgICAgICAgICAgIGxhc3RNYXRy
aXhSb3coaW5wdXRQYXJhbWV0ZXJzKTsKLQotICAgICAgICAgICAgZWZmZWN0ID0gRkVDb2xvck1h
dHJpeDo6Y3JlYXRlKCp0aGlzLCBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYLCBpbnB1dFBhcmFt
ZXRlcnMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaWx0
ZXJPcGVyYXRpb246OlNBVFVSQVRFOiB7Ci0gICAgICAgICAgICBhdXRvJiBjb2xvck1hdHJpeE9w
ZXJhdGlvbiA9IGRvd25jYXN0PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KGZpbHRl
ck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBWZWN0b3I8ZmxvYXQ+IGlucHV0UGFyYW1ldGVyczsK
LSAgICAgICAgICAgIGlucHV0UGFyYW1ldGVycy5hcHBlbmQobmFycm93UHJlY2lzaW9uVG9GbG9h
dChjb2xvck1hdHJpeE9wZXJhdGlvbi5hbW91bnQoKSkpOwotICAgICAgICAgICAgZWZmZWN0ID0g
RkVDb2xvck1hdHJpeDo6Y3JlYXRlKCp0aGlzLCBGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEUs
IGlucHV0UGFyYW1ldGVycyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SFVFX1JPVEFURTogewotICAgICAgICAgICAgYXV0byYg
Y29sb3JNYXRyaXhPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3Bl
cmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgVmVjdG9yPGZsb2F0PiBpbnB1
dFBhcmFtZXRlcnM7Ci0gICAgICAgICAgICBpbnB1dFBhcmFtZXRlcnMuYXBwZW5kKG5hcnJvd1By
ZWNpc2lvblRvRmxvYXQoY29sb3JNYXRyaXhPcGVyYXRpb24uYW1vdW50KCkpKTsKLSAgICAgICAg
ICAgIGVmZmVjdCA9IEZFQ29sb3JNYXRyaXg6OmNyZWF0ZSgqdGhpcywgRkVDT0xPUk1BVFJJWF9U
WVBFX0hVRVJPVEFURSwgaW5wdXRQYXJhbWV0ZXJzKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpJTlZFUlQ6IHsKLSAgICAgICAg
ICAgIGF1dG8mIGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWNDb21w
b25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAg
ICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gdHJhbnNmZXJGdW5jdGlvbjsKLSAgICAgICAg
ICAgIHRyYW5zZmVyRnVuY3Rpb24udHlwZSA9IEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9UQUJM
RTsKLSAgICAgICAgICAgIFZlY3RvcjxmbG9hdD4gdHJhbnNmZXJQYXJhbWV0ZXJzOwotICAgICAg
ICAgICAgdHJhbnNmZXJQYXJhbWV0ZXJzLmFwcGVuZChuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNv
bXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uLmFtb3VudCgpKSk7Ci0gICAgICAgICAgICB0cmFuc2Zl
clBhcmFtZXRlcnMuYXBwZW5kKG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMSAtIGNvbXBvbmVudFRy
YW5zZmVyT3BlcmF0aW9uLmFtb3VudCgpKSk7Ci0gICAgICAgICAgICB0cmFuc2ZlckZ1bmN0aW9u
LnRhYmxlVmFsdWVzID0gdHJhbnNmZXJQYXJhbWV0ZXJzOwotCi0gICAgICAgICAgICBDb21wb25l
bnRUcmFuc2ZlckZ1bmN0aW9uIG51bGxGdW5jdGlvbjsKLSAgICAgICAgICAgIGVmZmVjdCA9IEZF
Q29tcG9uZW50VHJhbnNmZXI6OmNyZWF0ZSgqdGhpcywgdHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNm
ZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgbnVsbEZ1bmN0aW9uKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpBUFBMRV9J
TlZFUlRfTElHSFRORVNTOgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIEFQ
UExFX0lOVkVSVF9MSUdIVE5FU1MgaXMgb25seSB1c2VkIGluIC1hcHBsZS1jb2xvci1maWx0ZXIu
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246Ok9QQUNJ
VFk6IHsKLSAgICAgICAgICAgIGF1dG8mIGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uID0gZG93
bmNhc3Q8QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0
aW9uKTsKLSAgICAgICAgICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gdHJhbnNmZXJGdW5j
dGlvbjsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24udHlwZSA9IEZFQ09NUE9ORU5UVFJB
TlNGRVJfVFlQRV9UQUJMRTsKLSAgICAgICAgICAgIFZlY3RvcjxmbG9hdD4gdHJhbnNmZXJQYXJh
bWV0ZXJzOwotICAgICAgICAgICAgdHJhbnNmZXJQYXJhbWV0ZXJzLmFwcGVuZCgwKTsKLSAgICAg
ICAgICAgIHRyYW5zZmVyUGFyYW1ldGVycy5hcHBlbmQobmFycm93UHJlY2lzaW9uVG9GbG9hdChj
b21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbi5hbW91bnQoKSkpOwotICAgICAgICAgICAgdHJhbnNm
ZXJGdW5jdGlvbi50YWJsZVZhbHVlcyA9IHRyYW5zZmVyUGFyYW1ldGVyczsKLQotICAgICAgICAg
ICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBudWxsRnVuY3Rpb247Ci0gICAgICAgICAgICBl
ZmZlY3QgPSBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUoKnRoaXMsIG51bGxGdW5jdGlvbiwg
bnVsbEZ1bmN0aW9uLCBudWxsRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24pOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJSSUdI
VE5FU1M6IHsKLSAgICAgICAgICAgIGF1dG8mIGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uID0g
ZG93bmNhc3Q8QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3Bl
cmF0aW9uKTsKLSAgICAgICAgICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gdHJhbnNmZXJG
dW5jdGlvbjsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24udHlwZSA9IEZFQ09NUE9ORU5U
VFJBTlNGRVJfVFlQRV9MSU5FQVI7Ci0gICAgICAgICAgICB0cmFuc2ZlckZ1bmN0aW9uLnNsb3Bl
ID0gbmFycm93UHJlY2lzaW9uVG9GbG9hdChjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbi5hbW91
bnQoKSk7Ci0gICAgICAgICAgICB0cmFuc2ZlckZ1bmN0aW9uLmludGVyY2VwdCA9IDA7Ci0KLSAg
ICAgICAgICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gbnVsbEZ1bmN0aW9uOwotICAgICAg
ICAgICAgZWZmZWN0ID0gRkVDb21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRlKCp0aGlzLCB0cmFuc2Zl
ckZ1bmN0aW9uLCB0cmFuc2ZlckZ1bmN0aW9uLCB0cmFuc2ZlckZ1bmN0aW9uLCBudWxsRnVuY3Rp
b24pOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaWx0ZXJP
cGVyYXRpb246OkNPTlRSQVNUOiB7Ci0gICAgICAgICAgICBhdXRvJiBjb21wb25lbnRUcmFuc2Zl
ck9wZXJhdGlvbiA9IGRvd25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRp
b24+KGZpbHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0
aW9uIHRyYW5zZmVyRnVuY3Rpb247Ci0gICAgICAgICAgICB0cmFuc2ZlckZ1bmN0aW9uLnR5cGUg
PSBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfTElORUFSOwotICAgICAgICAgICAgZmxvYXQgYW1v
dW50ID0gbmFycm93UHJlY2lzaW9uVG9GbG9hdChjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbi5h
bW91bnQoKSk7Ci0gICAgICAgICAgICB0cmFuc2ZlckZ1bmN0aW9uLnNsb3BlID0gYW1vdW50Owot
ICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi5pbnRlcmNlcHQgPSAtMC41ICogYW1vdW50ICsg
MC41OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9u
IG51bGxGdW5jdGlvbjsKLSAgICAgICAgICAgIGVmZmVjdCA9IEZFQ29tcG9uZW50VHJhbnNmZXI6
OmNyZWF0ZSgqdGhpcywgdHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNm
ZXJGdW5jdGlvbiwgbnVsbEZ1bmN0aW9uKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCTFVSOiB7Ci0gICAgICAgICAgICBhdXRv
JiBibHVyT3BlcmF0aW9uID0gZG93bmNhc3Q8Qmx1ckZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3Bl
cmF0aW9uKTsKLSAgICAgICAgICAgIGZsb2F0IHN0ZERldmlhdGlvbiA9IGZsb2F0VmFsdWVGb3JM
ZW5ndGgoYmx1ck9wZXJhdGlvbi5zdGREZXZpYXRpb24oKSwgMCk7Ci0gICAgICAgICAgICBlZmZl
Y3QgPSBGRUdhdXNzaWFuQmx1cjo6Y3JlYXRlKCp0aGlzLCBzdGREZXZpYXRpb24sIHN0ZERldmlh
dGlvbiwgY29uc3VtZXIgPT0gRmlsdGVyUHJvcGVydHkgPyBFREdFTU9ERV9OT05FIDogRURHRU1P
REVfRFVQTElDQVRFKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNh
c2UgRmlsdGVyT3BlcmF0aW9uOjpEUk9QX1NIQURPVzogewotICAgICAgICAgICAgYXV0byYgZHJv
cFNoYWRvd09wZXJhdGlvbiA9IGRvd25jYXN0PERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb24+KGZp
bHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBlZmZlY3QgPSBGRURyb3BTaGFkb3c6OmNyZWF0
ZSgqdGhpcywgZHJvcFNoYWRvd09wZXJhdGlvbi5zdGREZXZpYXRpb24oKSwgZHJvcFNoYWRvd09w
ZXJhdGlvbi5zdGREZXZpYXRpb24oKSwKLSAgICAgICAgICAgICAgICBkcm9wU2hhZG93T3BlcmF0
aW9uLngoKSwgZHJvcFNoYWRvd09wZXJhdGlvbi55KCksIGRyb3BTaGFkb3dPcGVyYXRpb24uY29s
b3IoKSwgMSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZWZmZWN0KSB7
Ci0gICAgICAgICAgICAvLyBVbmxpa2UgU1ZHIEZpbHRlcnMgYW5kIENTU0ZpbHRlckltYWdlcywg
ZmlsdGVyIGZ1bmN0aW9ucyBvbiB0aGUgZmlsdGVyCi0gICAgICAgICAgICAvLyBwcm9wZXJ0eSBh
cHBsaWVkIGhlcmUgc2hvdWxkIG5vdCBjbGlwIHRvIHRoZWlyIHByaW1pdGl2ZSBzdWJyZWdpb25z
LgotICAgICAgICAgICAgZWZmZWN0LT5zZXRDbGlwc1RvQm91bmRzKGNvbnN1bWVyID09IEZpbHRl
ckZ1bmN0aW9uKTsKLSAgICAgICAgICAgIGVmZmVjdC0+c2V0T3BlcmF0aW5nQ29sb3JTcGFjZShD
b2xvclNwYWNlU1JHQik7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChmaWx0ZXJPcGVy
YXRpb24udHlwZSgpICE9IEZpbHRlck9wZXJhdGlvbjo6UkVGRVJFTkNFKSB7Ci0gICAgICAgICAg
ICAgICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKS5hcHBlbmQoV1RGTW92ZShwcmV2aW91c0VmZmVj
dCkpOwotICAgICAgICAgICAgICAgIG1fZWZmZWN0cy5hcHBlbmQoKmVmZmVjdCk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBwcmV2aW91c0VmZmVjdCA9IFdURk1vdmUoZWZmZWN0KTsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIC8vIElmIHdlIGRpZG4ndCBtYWtlIGFueSBlZmZlY3RzLCB0
ZWxsIG91ciBjYWxsZXIgd2UgYXJlIG5vdCB2YWxpZC4KLSAgICBpZiAobV9lZmZlY3RzLmlzRW1w
dHkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgc2V0TWF4RWZmZWN0UmVjdHMobV9z
b3VyY2VEcmF3aW5nUmVnaW9uKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBGaWx0ZXJF
ZmZlY3RSZW5kZXJlcjo6dXBkYXRlQmFja2luZ1N0b3JlUmVjdChjb25zdCBGbG9hdFJlY3QmIGZp
bHRlclJlY3QpCi17Ci0gICAgaWYgKGZpbHRlclJlY3QuaXNFbXB0eSgpIHx8IEltYWdlQnVmZmVy
OjpzaXplTmVlZHNDbGFtcGluZyhmaWx0ZXJSZWN0LnNpemUoKSkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIGlmIChmaWx0ZXJSZWN0ID09IHNvdXJjZUltYWdlUmVjdCgpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBzZXRTb3VyY2VJbWFnZVJlY3QoZmlsdGVyUmVjdCk7Ci0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgRmlsdGVyRWZmZWN0UmVuZGVyZXI6OmFsbG9jYXRl
QmFja2luZ1N0b3JlSWZOZWVkZWQoY29uc3QgR3JhcGhpY3NDb250ZXh0JiB0YXJnZXRDb250ZXh0
KQotewotICAgIC8vIEF0IHRoaXMgcG9pbnQgdGhlIGVmZmVjdCBjaGFpbiBoYXMgYmVlbiBidWls
dCwgYW5kIHRoZQotICAgIC8vIHNvdXJjZSBpbWFnZSBzaXplcyBzZXQuIFdlIGp1c3QgbmVlZCB0
byBhdHRhY2ggdGhlIGdyYXBoaWMKLSAgICAvLyBidWZmZXIgaWYgd2UgaGF2ZSBub3QgeWV0IGRv
bmUgc28uCi0KLSAgICBpZiAobV9ncmFwaGljc0J1ZmZlckF0dGFjaGVkKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBJbnRTaXplIGxvZ2ljYWxTaXplIHsgbV9zb3VyY2VEcmF3aW5nUmVnaW9uLnNp
emUoKSB9OwotICAgIGlmICghc291cmNlSW1hZ2UoKSB8fCBzb3VyY2VJbWFnZSgpLT5sb2dpY2Fs
U2l6ZSgpICE9IGxvZ2ljYWxTaXplKSB7Ci0jaWYgVVNFKERJUkVDVDJEKQotICAgICAgICBzZXRT
b3VyY2VJbWFnZShJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGxvZ2ljYWxTaXplLCByZW5kZXJpbmdNb2Rl
KCksICZ0YXJnZXRDb250ZXh0LCBmaWx0ZXJTY2FsZSgpKSk7Ci0jZWxzZQotICAgICAgICBVTlVT
RURfUEFSQU0odGFyZ2V0Q29udGV4dCk7Ci0gICAgICAgIHNldFNvdXJjZUltYWdlKEltYWdlQnVm
ZmVyOjpjcmVhdGUobG9naWNhbFNpemUsIHJlbmRlcmluZ01vZGUoKSwgZmlsdGVyU2NhbGUoKSkp
OwotI2VuZGlmCi0gICAgfQotICAgIG1fZ3JhcGhpY3NCdWZmZXJBdHRhY2hlZCA9IHRydWU7Ci19
Ci0KLXZvaWQgRmlsdGVyRWZmZWN0UmVuZGVyZXI6OmNsZWFySW50ZXJtZWRpYXRlUmVzdWx0cygp
Ci17Ci0gICAgbV9zb3VyY2VHcmFwaGljLT5jbGVhclJlc3VsdCgpOwotICAgIGZvciAoYXV0byYg
ZWZmZWN0IDogbV9lZmZlY3RzKQotICAgICAgICBlZmZlY3QtPmNsZWFyUmVzdWx0KCk7Ci19Ci0K
LXZvaWQgRmlsdGVyRWZmZWN0UmVuZGVyZXI6OmFwcGx5KCkKLXsKLSAgICBhdXRvJiBlZmZlY3Qg
PSBtX2VmZmVjdHMubGFzdCgpLmdldCgpOwotICAgIGVmZmVjdC5hcHBseSgpOwotICAgIGVmZmVj
dC50cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKENvbG9yU3BhY2VTUkdCKTsKLX0KLQotTGF5b3V0
UmVjdCBGaWx0ZXJFZmZlY3RSZW5kZXJlcjo6Y29tcHV0ZVNvdXJjZUltYWdlUmVjdEZvckRpcnR5
UmVjdChjb25zdCBMYXlvdXRSZWN0JiBmaWx0ZXJCb3hSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBk
aXJ0eVJlY3QpCi17Ci0gICAgLy8gVGhlIHJlc3VsdCBvZiB0aGlzIGZ1bmN0aW9uIGlzIHRoZSBh
cmVhIGluIHRoZSAiZmlsdGVyQm94UmVjdCIgdGhhdCBuZWVkcyB0byBiZSByZXBhaW50ZWQsIHNv
IHRoYXQgd2UgZnVsbHkgY292ZXIgdGhlICJkaXJ0eVJlY3QiLgotICAgIGF1dG8gcmVjdEZvclJl
cGFpbnQgPSBkaXJ0eVJlY3Q7Ci0gICAgaWYgKGhhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscygpKSB7
Ci0gICAgICAgIC8vIE5vdGUgdGhhdCB0aGUgb3V0c2V0cyBhcmUgcmV2ZXJzZWQgaGVyZSBiZWNh
dXNlIHdlIGFyZSBnb2luZyBiYWNrd2FyZHMgLT4gd2UgaGF2ZSB0aGUgZGlydHkgcmVjdCBhbmQK
LSAgICAgICAgLy8gbmVlZCB0byBmaW5kIG91dCB3aGF0IGlzIHRoZSByZWN0YW5nbGUgdGhhdCBt
aWdodCBpbmZsdWVuY2UgdGhlIHJlc3VsdCBpbnNpZGUgdGhhdCBkaXJ0eSByZWN0LgotICAgICAg
ICByZWN0Rm9yUmVwYWludC5tb3ZlKC1tX291dHNldHMucmlnaHQoKSwgLW1fb3V0c2V0cy5ib3R0
b20oKSk7Ci0gICAgICAgIHJlY3RGb3JSZXBhaW50LmV4cGFuZChtX291dHNldHMubGVmdCgpICsg
bV9vdXRzZXRzLnJpZ2h0KCksIG1fb3V0c2V0cy50b3AoKSArIG1fb3V0c2V0cy5ib3R0b20oKSk7
Ci0gICAgfQotICAgIHJlY3RGb3JSZXBhaW50LmludGVyc2VjdChmaWx0ZXJCb3hSZWN0KTsKLSAg
ICByZXR1cm4gcmVjdEZvclJlcGFpbnQ7Ci19Ci0KLUltYWdlQnVmZmVyKiBGaWx0ZXJFZmZlY3RS
ZW5kZXJlcjo6b3V0cHV0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9lZmZlY3RzLmxhc3QoKS0+
aW1hZ2VCdWZmZXJSZXN1bHQoKTsKLX0KLQotdm9pZCBGaWx0ZXJFZmZlY3RSZW5kZXJlcjo6c2V0
TWF4RWZmZWN0UmVjdHMoY29uc3QgRmxvYXRSZWN0JiBlZmZlY3RSZWN0KQotewotICAgIGZvciAo
YXV0byYgZWZmZWN0IDogbV9lZmZlY3RzKQotICAgICAgICBlZmZlY3QtPnNldE1heEVmZmVjdFJl
Y3QoZWZmZWN0UmVjdCk7Ci19Ci0KLUludFJlY3QgRmlsdGVyRWZmZWN0UmVuZGVyZXI6Om91dHB1
dFJlY3QoKSBjb25zdAotewotICAgIGF1dG8mIGxhc3RFZmZlY3QgPSBtX2VmZmVjdHMubGFzdCgp
LmdldCgpOwotICAgIGlmICghbGFzdEVmZmVjdC5oYXNSZXN1bHQoKSkKLSAgICAgICAgcmV0dXJu
IHsgfTsKLSAgICByZXR1cm4gbGFzdEVmZmVjdC5yZXF1ZXN0ZWRSZWdpb25PZklucHV0SW1hZ2VE
YXRhKEludFJlY3QgeyBtX2ZpbHRlclJlZ2lvbiB9KTsKLX0KLQogYm9vbCBGaWx0ZXJFZmZlY3RS
ZW5kZXJlckhlbHBlcjo6cHJlcGFyZUZpbHRlckVmZmVjdChSZW5kZXJMYXllciYgbGF5ZXIsIGNv
bnN0IExheW91dFJlY3QmIGZpbHRlckJveFJlY3QsIGNvbnN0IExheW91dFJlY3QmIGRpcnR5UmVj
dCwgY29uc3QgTGF5b3V0UmVjdCYgbGF5ZXJSZXBhaW50UmVjdCkKIHsKICAgICBBU1NFUlQobV9o
YXZlRmlsdGVyRWZmZWN0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9G
aWx0ZXJFZmZlY3RSZW5kZXJlci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0ZpbHRlckVm
ZmVjdFJlbmRlcmVyLmgKaW5kZXggNGI0NDkyZDUzMDhkNDM3ODY1M2ZkZmNkYjdhMGU1MzE1Y2Rl
NmE5Yy4uM2ZiMWEzNDI3ZjJiOTBiZDcxZTNiODc3ZTNmODEyMTkyNWZmN2Q3YSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmgKQEAgLTI1LDI3
ICsyNSwyMiBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1
ZGUgIkludFJlY3RFeHRlbnQuaCIKICNpbmNsdWRlICJMYXlvdXRSZWN0LmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogY2xhc3MgRG9jdW1lbnQ7Ci1jbGFzcyBGaWx0ZXJFZmZlY3Q7Ci1jbGFz
cyBGaWx0ZXJPcGVyYXRpb25zOwogY2xhc3MgR3JhcGhpY3NDb250ZXh0OwotY2xhc3MgUmVmZXJl
bmNlRmlsdGVyT3BlcmF0aW9uOwotY2xhc3MgUmVuZGVyRWxlbWVudDsKIGNsYXNzIFJlbmRlckxh
eWVyOwotY2xhc3MgU291cmNlR3JhcGhpYzsKLQotZW51bSBGaWx0ZXJDb25zdW1lciB7IEZpbHRl
clByb3BlcnR5LCBGaWx0ZXJGdW5jdGlvbiB9OwogCiBjbGFzcyBGaWx0ZXJFZmZlY3RSZW5kZXJl
ckhlbHBlciB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgRmls
dGVyRWZmZWN0UmVuZGVyZXJIZWxwZXIoYm9vbCBoYXZlRmlsdGVyRWZmZWN0LCBHcmFwaGljc0Nv
bnRleHQmIHRhcmdldENvbnRleHQpOworICAgIEZpbHRlckVmZmVjdFJlbmRlcmVySGVscGVyKGJv
b2wgaGF2ZUZpbHRlckVmZmVjdCwgR3JhcGhpY3NDb250ZXh0JiB0YXJnZXRDb250ZXh0KQorICAg
ICAgICA6IG1fdGFyZ2V0Q29udGV4dCh0YXJnZXRDb250ZXh0KQorICAgICAgICAsIG1faGF2ZUZp
bHRlckVmZmVjdChoYXZlRmlsdGVyRWZmZWN0KQorICAgIHsKKyAgICB9CiAKICAgICBib29sIGhh
dmVGaWx0ZXJFZmZlY3QoKSBjb25zdCB7IHJldHVybiBtX2hhdmVGaWx0ZXJFZmZlY3Q7IH0KICAg
ICBib29sIGhhc1N0YXJ0ZWRGaWx0ZXJFZmZlY3QoKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0ZWRG
aWx0ZXJFZmZlY3Q7IH0KQEAgLTU5LDcgKzU0LDcgQEAgcHVibGljOgogICAgIGNvbnN0IExheW91
dFJlY3QmIHJlcGFpbnRSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZXBhaW50UmVjdDsgfQogCiBw
cml2YXRlOgotICAgIFJlbmRlckxheWVyKiBtX3JlbmRlckxheWVyIHsgbnVsbHB0ciB9OyAvLyBG
SVhNRTogdGhpcyBpcyBtYWlubHkgdXNlZCB0byBnZXQgdGhlIEZpbHRlckVmZmVjdFJlbmRlcmVy
LiBGaWx0ZXJFZmZlY3RSZW5kZXJlckhlbHBlciBzaG91bGQgYmUgd2VhbmVkIG9mZiBpdC4KKyAg
ICBSZW5kZXJMYXllciogbV9yZW5kZXJMYXllciB7IG51bGxwdHIgfTsgLy8gRklYTUU6IHRoaXMg
aXMgbWFpbmx5IHVzZWQgdG8gZ2V0IHRoZSBDU1NGaWx0ZXIuIEZpbHRlckVmZmVjdFJlbmRlcmVy
SGVscGVyIHNob3VsZCBiZSB3ZWFuZWQgb2ZmIGl0LgogICAgIExheW91dFBvaW50IG1fcGFpbnRP
ZmZzZXQ7CiAgICAgTGF5b3V0UmVjdCBtX3JlcGFpbnRSZWN0OwogICAgIGNvbnN0IEdyYXBoaWNz
Q29udGV4dCYgbV90YXJnZXRDb250ZXh0OwpAQCAtNjcsNzEgKzYyLDQgQEAgcHJpdmF0ZToKICAg
ICBib29sIG1fc3RhcnRlZEZpbHRlckVmZmVjdCB7IGZhbHNlIH07CiB9OwogCi0vLyBUaGlzIGlz
IHVzZWQgdG8gcmVuZGVyIGZpbHRlcnMgZm9yIHRoZSBDU1MgZmlsdGVyOiBwcm9wZXJ0eSwgYW5k
IHRoZSBmaWx0ZXIoKSBpbWFnZSBmdW5jdGlvbi4KLWNsYXNzIEZpbHRlckVmZmVjdFJlbmRlcmVy
IGZpbmFsIDogcHVibGljIEZpbHRlciB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1w
dWJsaWM6Ci0gICAgZnJpZW5kIGNsYXNzIEZpbHRlckVmZmVjdFJlbmRlcmVySGVscGVyOwotCi0g
ICAgc3RhdGljIFJlZjxGaWx0ZXJFZmZlY3RSZW5kZXJlcj4gY3JlYXRlKCk7Ci0KLSAgICB2b2lk
IHNldFNvdXJjZUltYWdlUmVjdChjb25zdCBGbG9hdFJlY3QmKTsKLSAgICB2b2lkIHNldEZpbHRl
clJlZ2lvbihjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lvbikgeyBtX2ZpbHRlclJlZ2lvbiA9
IGZpbHRlclJlZ2lvbjsgfQotCi0gICAgSW1hZ2VCdWZmZXIqIG91dHB1dCgpIGNvbnN0OwotCi0g
ICAgYm9vbCBidWlsZChSZW5kZXJFbGVtZW50JiwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYsIEZp
bHRlckNvbnN1bWVyKTsKLSAgICB2b2lkIGNsZWFySW50ZXJtZWRpYXRlUmVzdWx0cygpOwotICAg
IHZvaWQgYXBwbHkoKTsKLQotICAgIGJvb2wgaGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzKCkgY29u
c3QgeyByZXR1cm4gbV9oYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHM7IH0KLSAgICBib29sIGhhc0Zp
bHRlclRoYXRTaG91bGRCZVJlc3RyaWN0ZWRCeVNlY3VyaXR5T3JpZ2luKCkgY29uc3QgeyByZXR1
cm4gbV9oYXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1cml0eU9yaWdpbjsgfQot
Ci1wcml2YXRlOgotICAgIEZpbHRlckVmZmVjdFJlbmRlcmVyKCk7Ci0gICAgdmlydHVhbCB+Rmls
dGVyRWZmZWN0UmVuZGVyZXIoKTsKLQotICAgIEZsb2F0UmVjdCBzb3VyY2VJbWFnZVJlY3QoKSBj
b25zdCBmaW5hbCB7IHJldHVybiBtX3NvdXJjZURyYXdpbmdSZWdpb247IH0KLSAgICBGbG9hdFJl
Y3QgZmlsdGVyUmVnaW9uKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9maWx0ZXJSZWdpb247IH0K
LQotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkUmVmZXJlbmNlRmlsdGVyKFJlbmRlckVs
ZW1lbnQmLCBGaWx0ZXJFZmZlY3QmIHByZXZpb3VzRWZmZWN0LCBSZWZlcmVuY2VGaWx0ZXJPcGVy
YXRpb24mKTsKLQotICAgIHZvaWQgc2V0TWF4RWZmZWN0UmVjdHMoY29uc3QgRmxvYXRSZWN0Jik7
Ci0KLSAgICBHcmFwaGljc0NvbnRleHQqIGlucHV0Q29udGV4dCgpOwotCi0gICAgYm9vbCB1cGRh
dGVCYWNraW5nU3RvcmVSZWN0KGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVjdCk7Ci0gICAgdm9p
ZCBhbGxvY2F0ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOwot
Ci0gICAgSW50UmVjdCBvdXRwdXRSZWN0KCkgY29uc3Q7Ci0KLSAgICBMYXlvdXRSZWN0IGNvbXB1
dGVTb3VyY2VJbWFnZVJlY3RGb3JEaXJ0eVJlY3QoY29uc3QgTGF5b3V0UmVjdCYgZmlsdGVyQm94
UmVjdCwgY29uc3QgTGF5b3V0UmVjdCYgZGlydHlSZWN0KTsKLQotICAgIEZsb2F0UmVjdCBtX3Nv
dXJjZURyYXdpbmdSZWdpb247Ci0gICAgRmxvYXRSZWN0IG1fZmlsdGVyUmVnaW9uOwotCi0gICAg
VmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+PiBtX2VmZmVjdHM7Ci0gICAgUmVmPFNvdXJjZUdyYXBo
aWM+IG1fc291cmNlR3JhcGhpYzsKLQotICAgIEludFJlY3RFeHRlbnQgbV9vdXRzZXRzOwotCi0g
ICAgYm9vbCBtX2dyYXBoaWNzQnVmZmVyQXR0YWNoZWQgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9o
YXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9oYXNGaWx0ZXJU
aGF0U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1cml0eU9yaWdpbiB7IGZhbHNlIH07Ci19OwotCi1p
bmxpbmUgRmlsdGVyRWZmZWN0UmVuZGVyZXJIZWxwZXI6OkZpbHRlckVmZmVjdFJlbmRlcmVySGVs
cGVyKGJvb2wgaGF2ZUZpbHRlckVmZmVjdCwgR3JhcGhpY3NDb250ZXh0JiB0YXJnZXRDb250ZXh0
KQotICAgIDogbV90YXJnZXRDb250ZXh0KHRhcmdldENvbnRleHQpCi0gICAgLCBtX2hhdmVGaWx0
ZXJFZmZlY3QoaGF2ZUZpbHRlckVmZmVjdCkKLXsKLX0KLQotaW5saW5lIHZvaWQgRmlsdGVyRWZm
ZWN0UmVuZGVyZXI6OnNldFNvdXJjZUltYWdlUmVjdChjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUlt
YWdlUmVjdCkKLXsKLSAgICBtX3NvdXJjZURyYXdpbmdSZWdpb24gPSBzb3VyY2VJbWFnZVJlY3Q7
Ci0gICAgc2V0TWF4RWZmZWN0UmVjdHMoc291cmNlSW1hZ2VSZWN0KTsKLSAgICBzZXRGaWx0ZXJS
ZWdpb24oc291cmNlSW1hZ2VSZWN0KTsKLSAgICBtX2dyYXBoaWNzQnVmZmVyQXR0YWNoZWQgPSBm
YWxzZTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcAppbmRleCAzOWE5MDAzYmQ2ZmMzZTMxYzQ2ZGMwZDcz
M2M1ODRhZmM3YTlkNTUxLi4xOTQxNDI3NjEzZTIzYzFlMTU0MTQzMzYzMmU3YWViNDMxZmIzYzU0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcApAQCAt
MzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIkhpdFRlc3RMb2NhdGlvbi5oIgogI2luY2x1ZGUgIklu
bGluZVRleHRCb3guaCIKICNpbmNsdWRlICJMYXlvdXRSZXBhaW50ZXIuaCIKKyNpbmNsdWRlICJM
YXlvdXRTdGF0ZS5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJSZW5kZXJDb21i
aW5lVGV4dC5oIgogI2luY2x1ZGUgIlJlbmRlckZsZXhpYmxlQm94LmgiCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhbWUuY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckZyYW1lLmNwcAppbmRleCAxYzI5MTU1Y2RhMmNjNWRjZDRiZTM1Zjlh
MTlmNTg0YWQ3YTE3OTI4Li4zN2NjZDMwZWFjMDljNWM0NTliMTk2OWMyZDcwMWQ4M2EyY2NkMTk0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhbWUuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFtZS5jcHAKQEAgLTI2LDYgKzI2
LDcgQEAKIAogI2luY2x1ZGUgIkhUTUxGcmFtZUVsZW1lbnQuaCIKICNpbmNsdWRlICJSZW5kZXJG
cmFtZVNldC5oIgorI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAKaW5k
ZXggNmM2YWFmYjdlNDU4NmYxN2Q3ZjI3MDhlMjUyYTEzZmZlMjJhYmU4MS4uZTAyMGQ3NzlhNTFm
OWE2ZTVjMTBlMjM2YTZhNjY3NjQxOGEyZWZlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVySW1hZ2UuY3BwCkBAIC00NSw2ICs0NSw3IEBACiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgi
CiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIklubGluZUVsZW1lbnRCb3gu
aCIKKyNpbmNsdWRlICJMYXlvdXRTdGF0ZS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRl
ICJQYWludEluZm8uaCIKICNpbmNsdWRlICJSZW5kZXJGcmFnbWVudGVkRmxvdy5oIgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKaW5kZXggOTgxYWIzMGQ2OTQ3ZDZlZTk5
ZGEyY2E0NjdlZjJjNTFiZTlkNmZiYy4uZGVjM2FiMTNhZTQzMzZmMGQyMTgyMmEwODRjMDQzOTMy
MGNhMGNhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCkBAIC00
Niw2ICs0Niw3IEBACiAKICNpbmNsdWRlICJCb3hTaGFwZS5oIgogI2luY2x1ZGUgIkNTU0FuaW1h
dGlvbkNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJDU1NGaWx0ZXIuaCIKICNpbmNsdWRlICJDU1NQ
cm9wZXJ0eU5hbWVzLmgiCiAjaW5jbHVkZSAiQ2hyb21lLmgiCiAjaW5jbHVkZSAiRGVidWdQYWdl
T3ZlcmxheXMuaCIKQEAgLTQ2MSwxNCArNDYyLDE0IEBAIGJvb2wgUmVuZGVyTGF5ZXI6OnJlcXVp
cmVzRnVsbExheWVySW1hZ2VGb3JGaWx0ZXJzKCkgY29uc3QKIHsKICAgICBpZiAoIXBhaW50c1dp
dGhGaWx0ZXJzKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBhdXRvKiByZW5kZXJlciA9
IGZpbHRlclJlbmRlcmVyKCk7Ci0gICAgcmV0dXJuIHJlbmRlcmVyICYmIHJlbmRlcmVyLT5oYXNG
aWx0ZXJUaGF0TW92ZXNQaXhlbHMoKTsKKyAgICBhdXRvKiBjc3NGaWx0ZXIgPSBmaWx0ZXJSZW5k
ZXJlcigpOworICAgIHJldHVybiBjc3NGaWx0ZXIgJiYgY3NzRmlsdGVyLT5oYXNGaWx0ZXJUaGF0
TW92ZXNQaXhlbHMoKTsKIH0KIAotRmlsdGVyRWZmZWN0UmVuZGVyZXIqIFJlbmRlckxheWVyOjpm
aWx0ZXJSZW5kZXJlcigpIGNvbnN0CitDU1NGaWx0ZXIqIFJlbmRlckxheWVyOjpmaWx0ZXJSZW5k
ZXJlcigpIGNvbnN0CiB7CiAgICAgYXV0byogZmlsdGVySW5mbyA9IEZpbHRlckluZm86OmdldElm
RXhpc3RzKCp0aGlzKTsKLSAgICByZXR1cm4gZmlsdGVySW5mbyA/IGZpbHRlckluZm8tPnJlbmRl
cmVyKCkgOiBudWxscHRyOworICAgIHJldHVybiBmaWx0ZXJJbmZvID8gZmlsdGVySW5mby0+Zmls
dGVyKCkgOiBudWxscHRyOwogfQogCiB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0
aW9uc0FmdGVyTGF5b3V0KGNvbnN0IFJlbmRlckxheWVyKiByb290TGF5ZXIsIE9wdGlvblNldDxV
cGRhdGVMYXllclBvc2l0aW9uc0ZsYWc+IGZsYWdzKQpAQCAtNDIwNyw3ICs0MjA4LDcgQEAgc3Rk
OjpwYWlyPFJlbmRlckxheWVyOjpGaWx0ZXJJbmZvKiwgc3RkOjp1bmlxdWVfcHRyPEZpbHRlckVm
ZmVjdFJlbmRlcmVySGVscGVyPj4KICAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIGF1dG8qIGlu
Zm8gPSBGaWx0ZXJJbmZvOjpnZXRJZkV4aXN0cygqdGhpcyk7Ci0gICAgaWYgKCFpbmZvIHx8ICFp
bmZvLT5yZW5kZXJlcigpKQorICAgIGlmICghaW5mbyB8fCAhaW5mby0+ZmlsdGVyKCkpCiAgICAg
ICAgIHJldHVybiB7IH07CiAKICAgICBhdXRvIGhlbHBlciA9IHN0ZDo6bWFrZV91bmlxdWU8Rmls
dGVyRWZmZWN0UmVuZGVyZXJIZWxwZXI+KHRydWUsIGNvbnRleHQpOwpAQCAtNDI1Myw5ICs0MjU0
LDkgQEAgc3RkOjp1bmlxdWVfcHRyPEZpbHRlckVmZmVjdFJlbmRlcmVySGVscGVyPiBSZW5kZXJM
YXllcjo6c2V0dXBGaWx0ZXJzKEdyYXBoaWNzQ28KICAgICAvLyBJZiB0aGUgZmlsdGVyIG5lZWRz
IHRoZSBmdWxsIHNvdXJjZSBpbWFnZSwgd2UgbmVlZCB0byBhdm9pZCB1c2luZyB0aGUgY2xpcCBy
ZWN0YW5nbGVzLgogICAgIC8vIE90aGVyd2lzZSwgaWYgZm9yIGV4YW1wbGUgdGhpcyBsYXllciBo
YXMgb3ZlcmZsb3c6aGlkZGVuLCBhIGRyb3Agc2hhZG93IHdpbGwgbm90IGNvbXB1dGUgY29ycmVj
dGx5LgogICAgIC8vIE5vdGUgdGhhdCB3ZSB3aWxsIHN0aWxsIGFwcGx5IHRoZSBjbGlwcGluZyBv
biB0aGUgZmluYWwgcmVuZGVyaW5nIG9mIHRoZSBmaWx0ZXIuCi0gICAgcGFpbnRpbmdJbmZvLmNs
aXBUb0RpcnR5UmVjdCA9ICFmaWx0ZXJJbmZvLnJlbmRlcmVyKCktPmhhc0ZpbHRlclRoYXRNb3Zl
c1BpeGVscygpOworICAgIHBhaW50aW5nSW5mby5jbGlwVG9EaXJ0eVJlY3QgPSAhZmlsdGVySW5m
by5maWx0ZXIoKS0+aGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzKCk7CiAKLSAgICBwYWludGluZ0lu
Zm8ucmVxdWlyZVNlY3VyaXR5T3JpZ2luQWNjZXNzRm9yV2lkZ2V0cyA9IGZpbHRlckluZm8ucmVu
ZGVyZXIoKS0+aGFzRmlsdGVyVGhhdFNob3VsZEJlUmVzdHJpY3RlZEJ5U2VjdXJpdHlPcmlnaW4o
KTsKKyAgICBwYWludGluZ0luZm8ucmVxdWlyZVNlY3VyaXR5T3JpZ2luQWNjZXNzRm9yV2lkZ2V0
cyA9IGZpbHRlckluZm8uZmlsdGVyKCktPmhhc0ZpbHRlclRoYXRTaG91bGRCZVJlc3RyaWN0ZWRC
eVNlY3VyaXR5T3JpZ2luKCk7CiAKICAgICByZXR1cm4gV1RGTW92ZShwYWludGVyLnNlY29uZCk7
CiB9CkBAIC02ODgyLDcgKzY4ODMsNyBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVPclJlbW92
ZUZpbHRlckVmZmVjdFJlbmRlcmVyKCkKICAgICAgICAgLy8gRG9uJ3QgZGVsZXRlIHRoZSB3aG9s
ZSBmaWx0ZXIgaW5mbyBoZXJlLCBiZWNhdXNlIHdlIG1pZ2h0IHVzZSBpdAogICAgICAgICAvLyBm
b3IgbG9hZGluZyBTVkcgcmVmZXJlbmNlIGZpbHRlciBmaWxlcy4KICAgICAgICAgaWYgKEZpbHRl
ckluZm8qIGZpbHRlckluZm8gPSBGaWx0ZXJJbmZvOjpnZXRJZkV4aXN0cygqdGhpcykpCi0gICAg
ICAgICAgICBmaWx0ZXJJbmZvLT5zZXRSZW5kZXJlcihudWxscHRyKTsKKyAgICAgICAgICAgIGZp
bHRlckluZm8tPnNldEZpbHRlcihudWxscHRyKTsKIAogICAgICAgICAvLyBFYXJseS1yZXR1cm4g
b25seSBpZiB3ZSAqZG9uJ3QqIGhhdmUgcmVmZXJlbmNlIGZpbHRlcnMuCiAgICAgICAgIC8vIEZv
ciByZWZlcmVuY2UgZmlsdGVycywgd2Ugc3RpbGwgd2FudCB0aGUgRmlsdGVyRWZmZWN0IGdyYXBo
IGJ1aWx0CkBAIC02ODkyLDIzICs2ODkzLDIzIEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZU9y
UmVtb3ZlRmlsdGVyRWZmZWN0UmVuZGVyZXIoKQogICAgIH0KICAgICAKICAgICBGaWx0ZXJJbmZv
JiBmaWx0ZXJJbmZvID0gRmlsdGVySW5mbzo6Z2V0KCp0aGlzKTsKLSAgICBpZiAoIWZpbHRlcklu
Zm8ucmVuZGVyZXIoKSkgewotICAgICAgICBSZWZQdHI8RmlsdGVyRWZmZWN0UmVuZGVyZXI+IGZp
bHRlclJlbmRlcmVyID0gRmlsdGVyRWZmZWN0UmVuZGVyZXI6OmNyZWF0ZSgpOwotICAgICAgICBm
aWx0ZXJSZW5kZXJlci0+c2V0RmlsdGVyU2NhbGUocGFnZSgpLmRldmljZVNjYWxlRmFjdG9yKCkp
OwotICAgICAgICBmaWx0ZXJSZW5kZXJlci0+c2V0UmVuZGVyaW5nTW9kZShyZW5kZXJlcigpLnNl
dHRpbmdzKCkuYWNjZWxlcmF0ZWRGaWx0ZXJzRW5hYmxlZCgpID8gQWNjZWxlcmF0ZWQgOiBVbmFj
Y2VsZXJhdGVkKTsKLSAgICAgICAgZmlsdGVySW5mby5zZXRSZW5kZXJlcihXVEZNb3ZlKGZpbHRl
clJlbmRlcmVyKSk7CisgICAgaWYgKCFmaWx0ZXJJbmZvLmZpbHRlcigpKSB7CisgICAgICAgIGF1
dG8gY3NzRmlsdGVyID0gQ1NTRmlsdGVyOjpjcmVhdGUoKTsKKyAgICAgICAgY3NzRmlsdGVyLT5z
ZXRGaWx0ZXJTY2FsZShwYWdlKCkuZGV2aWNlU2NhbGVGYWN0b3IoKSk7CisgICAgICAgIGNzc0Zp
bHRlci0+c2V0UmVuZGVyaW5nTW9kZShyZW5kZXJlcigpLnNldHRpbmdzKCkuYWNjZWxlcmF0ZWRG
aWx0ZXJzRW5hYmxlZCgpID8gQWNjZWxlcmF0ZWQgOiBVbmFjY2VsZXJhdGVkKTsKKyAgICAgICAg
ZmlsdGVySW5mby5zZXRGaWx0ZXIoV1RGTW92ZShjc3NGaWx0ZXIpKTsKICAgICAgICAgCiAgICAg
ICAgIC8vIFdlIGNhbiBvcHRpbWl6ZSBhd2F5IGNvZGUgcGF0aHMgaW4gb3RoZXIgcGxhY2VzIGlm
IHdlIGtub3cgdGhhdCB0aGVyZSBhcmUgbm8gc29mdHdhcmUgZmlsdGVycy4KICAgICAgICAgcmVu
ZGVyZXIoKS52aWV3KCkuc2V0SGFzU29mdHdhcmVGaWx0ZXJzKHRydWUpOwotICAgIH0gZWxzZSBp
ZiAoZmlsdGVySW5mby5yZW5kZXJlcigpLT5maWx0ZXJTY2FsZSgpICE9IHBhZ2UoKS5kZXZpY2VT
Y2FsZUZhY3RvcigpKSB7Ci0gICAgICAgIGZpbHRlckluZm8ucmVuZGVyZXIoKS0+c2V0RmlsdGVy
U2NhbGUocGFnZSgpLmRldmljZVNjYWxlRmFjdG9yKCkpOwotICAgICAgICBmaWx0ZXJJbmZvLnJl
bmRlcmVyKCktPmNsZWFySW50ZXJtZWRpYXRlUmVzdWx0cygpOworICAgIH0gZWxzZSBpZiAoZmls
dGVySW5mby5maWx0ZXIoKS0+ZmlsdGVyU2NhbGUoKSAhPSBwYWdlKCkuZGV2aWNlU2NhbGVGYWN0
b3IoKSkgeworICAgICAgICBmaWx0ZXJJbmZvLmZpbHRlcigpLT5zZXRGaWx0ZXJTY2FsZShwYWdl
KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSk7CisgICAgICAgIGZpbHRlckluZm8uZmlsdGVyKCktPmNs
ZWFySW50ZXJtZWRpYXRlUmVzdWx0cygpOwogICAgIH0KIAogICAgIC8vIElmIHRoZSBmaWx0ZXIg
ZmFpbHMgdG8gYnVpbGQsIHJlbW92ZSBpdCBmcm9tIHRoZSBsYXllci4gSXQgd2lsbCBzdGlsbCBh
dHRlbXB0IHRvCiAgICAgLy8gZ28gdGhyb3VnaCByZWd1bGFyIHByb2Nlc3NpbmcgKGUuZy4gY29t
cG9zaXRpbmcpLCBidXQgbmV2ZXIgYXBwbHkgYW55dGhpbmcuCi0gICAgaWYgKCFmaWx0ZXJJbmZv
LnJlbmRlcmVyKCktPmJ1aWxkKHJlbmRlcmVyKCksIHJlbmRlcmVyKCkuc3R5bGUoKS5maWx0ZXIo
KSwgRmlsdGVyUHJvcGVydHkpKQotICAgICAgICBmaWx0ZXJJbmZvLnNldFJlbmRlcmVyKG51bGxw
dHIpOworICAgIGlmICghZmlsdGVySW5mby5maWx0ZXIoKS0+YnVpbGQocmVuZGVyZXIoKSwgcmVu
ZGVyZXIoKS5zdHlsZSgpLmZpbHRlcigpLCBGaWx0ZXJDb25zdW1lcjo6RmlsdGVyUHJvcGVydHkp
KQorICAgICAgICBmaWx0ZXJJbmZvLnNldEZpbHRlcihudWxscHRyKTsKIH0KIAogdm9pZCBSZW5k
ZXJMYXllcjo6ZmlsdGVyTmVlZHNSZXBhaW50KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyLmgKaW5kZXggZDZmZTNkZjFiY2IwM2YzM2YyZmJmY2Y1NmNhMmY0ZjUzYTFiM2YzNC4u
ODAyNDljOTgyYTVjY2U0NGU2NzRkNDJmNGJhOWRkMjNkZTFkZTRjZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxheWVyLmgKQEAgLTYwLDkgKzYwLDkgQEAgY2xhc3MgVGV4dFN0cmVh
bTsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBDU1NGaWx0ZXI7CiBjbGFzcyBDbGlw
UmVjdHM7CiBjbGFzcyBDbGlwUmVjdHNDYWNoZTsKLWNsYXNzIEZpbHRlckVmZmVjdFJlbmRlcmVy
OwogY2xhc3MgRmlsdGVyRWZmZWN0UmVuZGVyZXJIZWxwZXI7CiBjbGFzcyBGaWx0ZXJPcGVyYXRp
b25zOwogY2xhc3MgSGl0VGVzdFJlcXVlc3Q7CkBAIC02NzksNyArNjc5LDcgQEAgcHVibGljOgog
CiAgICAgYm9vbCBwYWludHNXaXRoRmlsdGVycygpIGNvbnN0OwogICAgIGJvb2wgcmVxdWlyZXNG
dWxsTGF5ZXJJbWFnZUZvckZpbHRlcnMoKSBjb25zdDsKLSAgICBGaWx0ZXJFZmZlY3RSZW5kZXJl
ciogZmlsdGVyUmVuZGVyZXIoKSBjb25zdDsKKyAgICBDU1NGaWx0ZXIqIGZpbHRlclJlbmRlcmVy
KCkgY29uc3Q7IC8vIEZJWE1FOiByZW5hbWUuCiAKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAg
Ym9vbCBsYXllckxpc3RNdXRhdGlvbkFsbG93ZWQoKSBjb25zdCB7IHJldHVybiBtX2xheWVyTGlz
dE11dGF0aW9uQWxsb3dlZDsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyQmFja2luZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXJCYWNraW5nLmNwcAppbmRleCA4YmI1OWVhM2YyOWIwYzNmMjg3NDBjYjhmYmM4YTk2NzE2
YWRlZjczLi4wYWEwMGRkMTg0ZTk1MTlkNWEwZjExYzNhZDFkM2JmZjc3MDhiNjAyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcApAQCAtMzQs
NyArMzQsNiBAQAogI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCiAjaW5jbHVkZSAiQ2hyb21lLmgi
CiAjaW5jbHVkZSAiRG9jdW1lbnRUaW1lbGluZS5oIgotI2luY2x1ZGUgIkZpbHRlckVmZmVjdFJl
bmRlcmVyLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllckZpbHRlckluZm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyRmlsdGVySW5mby5jcHAKaW5kZXggNzc0NmJkNGFlMDhiMzgyNmE1MTIx
OWRiNzZhZGE3MjcwMjY0NzA2NC4uYmExNjU4MGZjZTYzNzkwNjNiMGU0MWJlYTEzOTlhYzBkZWRh
ZGM4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmls
dGVySW5mby5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmls
dGVySW5mby5jcHAKQEAgLTg0LDkgKzg0LDkgQEAgUmVuZGVyTGF5ZXI6OkZpbHRlckluZm86On5G
aWx0ZXJJbmZvKCkKICAgICByZW1vdmVSZWZlcmVuY2VGaWx0ZXJDbGllbnRzKCk7CiB9CiAKLXZv
aWQgUmVuZGVyTGF5ZXI6OkZpbHRlckluZm86OnNldFJlbmRlcmVyKFJlZlB0cjxGaWx0ZXJFZmZl
Y3RSZW5kZXJlcj4mJiByZW5kZXJlcikKK3ZvaWQgUmVuZGVyTGF5ZXI6OkZpbHRlckluZm86OnNl
dEZpbHRlcihSZWZQdHI8Q1NTRmlsdGVyPiYmIGZpbHRlcikKIHsKLSAgICBtX3JlbmRlcmVyID0g
cmVuZGVyZXI7CisgICAgbV9maWx0ZXIgPSBmaWx0ZXI7CiB9CiAKIHZvaWQgUmVuZGVyTGF5ZXI6
OkZpbHRlckluZm86Om5vdGlmeUZpbmlzaGVkKENhY2hlZFJlc291cmNlJikKQEAgLTEwOCwxNCAr
MTA4LDE0IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OkZpbHRlckluZm86OnVwZGF0ZVJlZmVyZW5jZUZp
bHRlckNsaWVudHMoY29uc3QgRmlsdGVyT3BlcmF0aW9uCiAgICAgICAgICAgICBtX2V4dGVybmFs
U1ZHUmVmZXJlbmNlcy5hcHBlbmQoY2FjaGVkU1ZHRG9jdW1lbnQpOwogICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgLy8gUmVmZXJlbmNlIGlzIGludGVybmFsOyBhZGQgbGF5ZXIgYXMgYSBj
bGllbnQgc28gd2UgY2FuIHRyaWdnZXIgZmlsdGVyIHJlcGFpbnQgb24gU1ZHIGF0dHJpYnV0ZSBj
aGFuZ2UuCi0gICAgICAgICAgICBhdXRvKiBmaWx0ZXIgPSBtX2xheWVyLnJlbmRlcmVyKCkuZG9j
dW1lbnQoKS5nZXRFbGVtZW50QnlJZChyZWZlcmVuY2VPcGVyYXRpb24uZnJhZ21lbnQoKSk7Ci0g
ICAgICAgICAgICBpZiAoIWZpbHRlcikKKyAgICAgICAgICAgIGF1dG8qIGZpbHRlckVsZW1lbnQg
PSBtX2xheWVyLnJlbmRlcmVyKCkuZG9jdW1lbnQoKS5nZXRFbGVtZW50QnlJZChyZWZlcmVuY2VP
cGVyYXRpb24uZnJhZ21lbnQoKSk7CisgICAgICAgICAgICBpZiAoIWZpbHRlckVsZW1lbnQpCiAg
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBhdXRvKiByZW5kZXJlciA9IGZp
bHRlci0+cmVuZGVyZXIoKTsKKyAgICAgICAgICAgIGF1dG8qIHJlbmRlcmVyID0gZmlsdGVyRWxl
bWVudC0+cmVuZGVyZXIoKTsKICAgICAgICAgICAgIGlmICghaXM8UmVuZGVyU1ZHUmVzb3VyY2VG
aWx0ZXI+KHJlbmRlcmVyKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAg
IGRvd25jYXN0PFJlbmRlclNWR1Jlc291cmNlRmlsdGVyPigqcmVuZGVyZXIpLmFkZENsaWVudFJl
bmRlckxheWVyKCZtX2xheWVyKTsKLSAgICAgICAgICAgIG1faW50ZXJuYWxTVkdSZWZlcmVuY2Vz
LmFwcGVuZChmaWx0ZXIpOworICAgICAgICAgICAgbV9pbnRlcm5hbFNWR1JlZmVyZW5jZXMuYXBw
ZW5kKGZpbHRlckVsZW1lbnQpOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtMTI0LDEwICsxMjQs
MTEgQEAgdm9pZCBSZW5kZXJMYXllcjo6RmlsdGVySW5mbzo6cmVtb3ZlUmVmZXJlbmNlRmlsdGVy
Q2xpZW50cygpCiB7CiAgICAgZm9yIChhdXRvJiByZXNvdXJjZUhhbmRsZSA6IG1fZXh0ZXJuYWxT
VkdSZWZlcmVuY2VzKQogICAgICAgICByZXNvdXJjZUhhbmRsZS0+cmVtb3ZlQ2xpZW50KCp0aGlz
KTsKKwogICAgIG1fZXh0ZXJuYWxTVkdSZWZlcmVuY2VzLmNsZWFyKCk7CiAKLSAgICBmb3IgKGF1
dG8mIGZpbHRlciA6IG1faW50ZXJuYWxTVkdSZWZlcmVuY2VzKSB7Ci0gICAgICAgIGlmIChhdXRv
KiByZW5kZXJlciA9IGZpbHRlci0+cmVuZGVyZXIoKSkKKyAgICBmb3IgKGF1dG8mIGZpbHRlckVs
ZW1lbnQgOiBtX2ludGVybmFsU1ZHUmVmZXJlbmNlcykgeworICAgICAgICBpZiAoYXV0byogcmVu
ZGVyZXIgPSBmaWx0ZXJFbGVtZW50LT5yZW5kZXJlcigpKQogICAgICAgICAgICAgZG93bmNhc3Q8
UmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXI+KCpyZW5kZXJlcikucmVtb3ZlQ2xpZW50UmVuZGVy
TGF5ZXIoJm1fbGF5ZXIpOwogICAgIH0KICAgICBtX2ludGVybmFsU1ZHUmVmZXJlbmNlcy5jbGVh
cigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmls
dGVySW5mby5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVySW5m
by5oCmluZGV4IGQwYWNkM2NmNWZiYjEyYTMxMjU5M2MwOWNjMWI0YWM4MDcwMjU4Y2YuLjQ3ODJj
NDE3MzgyMTAyNTQwNWNmZjdjYTM5ZTAwMmE4MzUxMjU3ZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlckluZm8uaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJJbmZvLmgKQEAgLTU1LDggKzU1LDggQEAg
cHVibGljOgogICAgIHZvaWQgZXhwYW5kRGlydHlTb3VyY2VSZWN0KGNvbnN0IExheW91dFJlY3Qm
IHJlY3QpIHsgbV9kaXJ0eVNvdXJjZVJlY3QudW5pdGUocmVjdCk7IH0KICAgICB2b2lkIHJlc2V0
RGlydHlTb3VyY2VSZWN0KCkgeyBtX2RpcnR5U291cmNlUmVjdCA9IExheW91dFJlY3QoKTsgfQog
Ci0gICAgRmlsdGVyRWZmZWN0UmVuZGVyZXIqIHJlbmRlcmVyKCkgY29uc3QgeyByZXR1cm4gbV9y
ZW5kZXJlci5nZXQoKTsgfQotICAgIHZvaWQgc2V0UmVuZGVyZXIoUmVmUHRyPEZpbHRlckVmZmVj
dFJlbmRlcmVyPiYmKTsKKyAgICBDU1NGaWx0ZXIqIGZpbHRlcigpIGNvbnN0IHsgcmV0dXJuIG1f
ZmlsdGVyLmdldCgpOyB9CisgICAgdm9pZCBzZXRGaWx0ZXIoUmVmUHRyPENTU0ZpbHRlcj4mJik7
CiAKICAgICB2b2lkIHVwZGF0ZVJlZmVyZW5jZUZpbHRlckNsaWVudHMoY29uc3QgRmlsdGVyT3Bl
cmF0aW9ucyYpOwogICAgIHZvaWQgcmVtb3ZlUmVmZXJlbmNlRmlsdGVyQ2xpZW50cygpOwpAQCAt
NjgsNyArNjgsNyBAQCBwcml2YXRlOgogCiAgICAgUmVuZGVyTGF5ZXImIG1fbGF5ZXI7CiAKLSAg
ICBSZWZQdHI8RmlsdGVyRWZmZWN0UmVuZGVyZXI+IG1fcmVuZGVyZXI7CisgICAgUmVmUHRyPENT
U0ZpbHRlcj4gbV9maWx0ZXI7CiAgICAgTGF5b3V0UmVjdCBtX2RpcnR5U291cmNlUmVjdDsKIAog
ICAgIFZlY3RvcjxSZWZQdHI8RWxlbWVudD4+IG1faW50ZXJuYWxTVkdSZWZlcmVuY2VzOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVCdWls
ZGVyQmxvY2suY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRy
ZWVCdWlsZGVyQmxvY2suY3BwCmluZGV4IDgzMzU3MmYyMTA0YmExYmQ5OGE4YzM0MGViYjRjOTNh
MDE1ODY4MTAuLmU1Y2ExNGVkMzA2NWZkMWI1NjQwNzdhZTgzMDRmNDQ3NDk4OWVkMWYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlQnVpbGRl
ckJsb2NrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVy
VHJlZUJ1aWxkZXJCbG9jay5jcHAKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJSZW5kZXJS
dWJ5LmgiCiAjaW5jbHVkZSAiUmVuZGVyUnVieVJ1bi5oIgogI2luY2x1ZGUgIlJlbmRlclRleHRD
b250cm9sLmgiCisjaW5jbHVkZSAiUmVuZGVyVHJlZUJ1aWxkZXJNdWx0aUNvbHVtbi5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>348721</attachid>
            <date>2018-09-01 16:55:50 -0700</date>
            <delta_ts>2018-09-01 17:16:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-189223-20180901165548.patch</filename>
            <type>text/plain</type>
            <size>66555</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM1NTc5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzBmMjU1ZWU2NjJkZGRm
NDk3YTFmMjY1NzY1ZWMzZjkzODhjOWY2NC4uMWFmYTk0YTA2YWNkMjJmZTE5NGEwZDVkNjhhM2Nh
OGVjYmY5MTMzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg4IEBACisyMDE4LTA5LTAxICBTaW1v
biBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgorCisgICAgICAgIFJlbmFtZSBGaWx0
ZXJFZmZlY3RSZW5kZXJlciB0byBDU1NGaWx0ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE4OTIyMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEZpbHRlciB3YXMgc3ViY2xhc3NlZCBieSBTVkdGaWx0ZXIg
Zm9yIFNWRywgYW5kIEZpbHRlckVmZmVjdFJlbmRlcmVyIGZvciBDU1MsCisgICAgICAgIHdoaWNo
IHdhcyB2ZXJ5IGNvbmZ1c2luZywgZXNwZWNpYWxseSB3aGVuIHRoZSBjb2RlIHVzZXMgcmVuZGVy
ZXIoKSB0byBnZXQgaXQuCisgICAgICAgIAorICAgICAgICBSZW5hbWUgRmlsdGVyRWZmZWN0UmVu
ZGVyZXIgdG8gQ1NTRmlsdGVyLCBhbmQgYWNjZXNzIHZpYSBmaWx0ZXIoKS4KKyAgICAgICAgCisg
ICAgICAgIEZ1dHVyZSBjbGVhbnVwIHdpbGwgZGVhbCB3aXRoIEZpbHRlckVmZmVjdFJlbmRlcmVy
SGVscGVyLgorCisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGNzcy9DU1NGaWx0ZXJJbWFnZVZhbHVl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlckltYWdlVmFsdWU6OmltYWdlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0Zm9ybUNBRmlsdGVyc0NvY29h
Lm1tOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmg6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXI6OmlzQ1NTRmlsdGVyIGNvbnN0KToKKyAgICAgICAgKiByZW5k
ZXJpbmcvQ1NTRmlsdGVyLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0ZpbHRlckVmZmVjdFJlbmRlcmVyLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OmVuZE1hdHJpeFJv
dyk6CisgICAgICAgIChXZWJDb3JlOjpsYXN0TWF0cml4Um93KToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU0ZpbHRlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6Q1NTRmls
dGVyKToKKyAgICAgICAgKFdlYkNvcmU6Om1fc291cmNlR3JhcGhpYyk6CisgICAgICAgIChXZWJD
b3JlOjpDU1NGaWx0ZXI6OmlucHV0Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0
ZXI6OmJ1aWxkUmVmZXJlbmNlRmlsdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6
YnVpbGQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjp1cGRhdGVCYWNraW5nU3RvcmVS
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6YWxsb2NhdGVCYWNraW5nU3RvcmVJ
Zk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmNsZWFySW50ZXJtZWRpYXRl
UmVzdWx0cyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmFwcGx5KToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU0ZpbHRlcjo6Y29tcHV0ZVNvdXJjZUltYWdlUmVjdEZvckRpcnR5UmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6Om91dHB1dCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NGaWx0ZXI6OnNldFNvdXJjZUltYWdlUmVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NGaWx0ZXI6OnNldE1heEVmZmVjdFJlY3RzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0Zp
bHRlcjo6b3V0cHV0UmVjdCBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL0NTU0ZpbHRlci5o
OiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmlsdGVyRWZmZWN0UmVuZGVy
ZXIuaC4KKyAgICAgICAgKGlzVHlwZSk6CisgICAgICAgICogcmVuZGVyaW5nL0ZpbHRlckVmZmVj
dFJlbmRlcmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdFJlbmRlcmVySGVs
cGVyOjpwcmVwYXJlRmlsdGVyRWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dFJlbmRlcmVySGVscGVyOjpmaWx0ZXJDb250ZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlckVmZmVjdFJlbmRlcmVySGVscGVyOjpiZWdpbkZpbHRlckVmZmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3RSZW5kZXJlckhlbHBlcjo6YXBwbHlGaWx0ZXJFZmZlY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6ZW5kTWF0cml4Um93KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6Omxhc3RNYXRyaXhSb3cpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVy
RWZmZWN0UmVuZGVyZXI6OkZpbHRlckVmZmVjdFJlbmRlcmVyKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6Om1fc291cmNlR3JhcGhpYyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJFZmZlY3RSZW5kZXJlcjo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlckVmZmVjdFJlbmRlcmVyOjppbnB1dENvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyRWZmZWN0UmVuZGVyZXI6OmJ1aWxkUmVmZXJlbmNlRmlsdGVyKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdFJlbmRlcmVyOjpidWlsZCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3RSZW5kZXJlcjo6dXBkYXRlQmFj
a2luZ1N0b3JlUmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3RS
ZW5kZXJlcjo6YWxsb2NhdGVCYWNraW5nU3RvcmVJZk5lZWRlZCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3RSZW5kZXJlcjo6Y2xlYXJJbnRlcm1lZGlhdGVSZXN1bHRz
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdFJlbmRlcmVyOjphcHBs
eSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3RSZW5kZXJlcjo6Y29t
cHV0ZVNvdXJjZUltYWdlUmVjdEZvckRpcnR5UmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXJFZmZlY3RSZW5kZXJlcjo6b3V0cHV0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdFJlbmRlcmVyOjpzZXRNYXhFZmZlY3RSZWN0cyk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3RSZW5kZXJlcjo6b3V0cHV0UmVj
dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL0ZpbHRlckVmZmVjdFJlbmRl
cmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3RSZW5kZXJlckhlbHBlcjo6Rmls
dGVyRWZmZWN0UmVuZGVyZXJIZWxwZXIpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0
UmVuZGVyZXI6OnNldFNvdXJjZUltYWdlUmVjdCk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckJsb2NrRmxvdy5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZyYW1l
LmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6
cmVxdWlyZXNGdWxsTGF5ZXJJbWFnZUZvckZpbHRlcnMgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXI6OmZpbHRlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllcjo6ZmlsdGVyUGFpbnRlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
cjo6c2V0dXBGaWx0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpjYWxjdWxh
dGVDbGlwUmVjdHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmZpbHRl
clJlbmRlcmVyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5
ZXIuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcDoKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJJbmZvLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyOjpGaWx0ZXJJbmZvOjpzZXRGaWx0ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXI6OkZpbHRlckluZm86OnVwZGF0ZVJlZmVyZW5jZUZpbHRlckNsaWVudHMp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OkZpbHRlckluZm86OnJlbW92ZVJlZmVy
ZW5jZUZpbHRlckNsaWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OkZpbHRl
ckluZm86OnNldFJlbmRlcmVyKTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
TGF5ZXJGaWx0ZXJJbmZvLmg6CisgICAgICAgICogcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRy
ZWVCdWlsZGVyQmxvY2suY3BwOgorCiAyMDE4LTA5LTAxICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5m
cmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBzb21lIG1vcmUgZmlsdGVyIGxvZ2dpbmcK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUv
U291cmNlcy50eHQKaW5kZXggNTkxNTczNmM1MTY4NDkyYzUwMGI4YWU1YzIzZjkwYWI0ODg1NDU2
MC4uMGRjYWE4MzFlN2ZkNzYzNjMyZWZhYTUxMDI2YTRlZDYwZjIxY2IwNyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50
eHQKQEAgLTE4MzcsNiArMTgzNyw3IEBAIHJlbmRlcmluZy9BdXRvVGFibGVMYXlvdXQuY3BwCiBy
ZW5kZXJpbmcvQmlkaVJ1bi5jcHAKIHJlbmRlcmluZy9Cb3JkZXJFZGdlLmNwcAogcmVuZGVyaW5n
L0JyZWFrTGluZXMuY3BwCityZW5kZXJpbmcvQ1NTRmlsdGVyLmNwcAogcmVuZGVyaW5nL0NsaXBS
ZWN0LmNwcAogcmVuZGVyaW5nL0NvdW50ZXJOb2RlLmNwcAogcmVuZGVyaW5nL0VsbGlwc2lzQm94
LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCmluZGV4IDcxY2VjOGNiMTE0MGY1MzhlOTE0YjA1YmFkYWM2NmRkNzU0ZWNjNWUuLjFhZTY4
MjdhZGNjMDBjYTBmYjA0MTQzNjQ5MDk5OWMwNTRjZGI2MTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTU2MDksNiArNTYwOSw4
IEBACiAJCTBGNDk2NkE3MURCNDBDNDMwMEEyNzRCQiAvKiBKU0RPTVBvaW50SW5pdC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0RPTVBvaW50SW5pdC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjQ5NjZBODFEQjQwQzQzMDBBMjc0QkIgLyogSlNET01Qb2lu
dFJlYWRPbmx5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRE9N
UG9pbnRSZWFkT25seS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDk2NkE5
MURCNDBDNDMwMEEyNzRCQiAvKiBKU0RPTVBvaW50UmVhZE9ubHkuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSlNET01Qb2ludFJlYWRPbmx5Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGNTNGQjgxMjEzQjFCQjgwMEM0MEQzNCAvKiBDU1NGaWx0ZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTRmlsdGVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY1M0ZCODMyMTNCMUJCODAwQzQwRDM0IC8qIENTU0Zp
bHRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDU1NGaWx0ZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1NERDRTMxODgxMDUxRDAwM0VFREJCIC8qIFRl
eHRBdXRvU2l6aW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRl
eHRBdXRvU2l6aW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1NERDRTQx
ODgxMDUxRDAwM0VFREJCIC8qIFRleHRBdXRvU2l6aW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFRleHRBdXRvU2l6aW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGNTRERDA1MTg4MUQ1RjUwMDNFRURCQiAvKiBUb3VjaC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBUb3VjaC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MjU3MzcsNiArMjU3MzksOCBAQAogCQkJCUJDREQ0NTREMTIzNkM5NUMwMDlBNzk4NSAvKiBDb2x1
bW5JbmZvLmggKi8sCiAJCQkJOTM5MkYxNEYwQUQxODYyMzAwNjkxQkQ0IC8qIENvdW50ZXJOb2Rl
LmNwcCAqLywKIAkJCQk5MzkyRjE0QjBBRDE4NjFCMDA2OTFCRDQgLyogQ291bnRlck5vZGUuaCAq
LywKKwkJCQkwRjUzRkI4MTIxM0IxQkI4MDBDNDBEMzQgLyogQ1NTRmlsdGVyLmNwcCAqLywKKwkJ
CQkwRjUzRkI4MzIxM0IxQkI4MDBDNDBEMzQgLyogQ1NTRmlsdGVyLmggKi8sCiAJCQkJQThDRkY2
Q0EwQTE1NjFDRDAwMEE0MjM0IC8qIEVsbGlwc2lzQm94LmNwcCAqLywKIAkJCQlBOENGRjZCRDBB
MTU2MTE4MDAwQTQyMzQgLyogRWxsaXBzaXNCb3guaCAqLywKIAkJCQkzMTMxM0Y2MzE0NDNCMzVF
MDA2RTJBOTAgLyogRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwICovLApAQCAtMzE0MTIsNiArMzE0
MTYsNyBAQAogCQkJCTVDREQ4MzY0MUU0MzI1QTAwMDYyMUU5MiAvKiBMaWJXZWJSVENEYXRhQ2hh
bm5lbEhhbmRsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDE3NjEyQUYxRTNBOTk0MDAwQzNE
ODFEIC8qIExpYldlYlJUQ01lZGlhRW5kcG9pbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDE3
NjEyQjExRTNBOTk0MDAwQzNEODFEIC8qIExpYldlYlJUQ1BlZXJDb25uZWN0aW9uQmFja2VuZC5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQk0MUQyOEQwRDIxMzlFMDU4MDBGNDIwNkYgLyogTGliV2Vi
UlRDU3RhdHNDb2xsZWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTc1OUU5M0UxNEVGMUNG
ODAwMjZBMkREIC8qIExvYWRhYmxlVGV4dFRyYWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQ0
NTc3NUVBMjA0NzMwM0MwMDhEQ0U1RCAvKiBMb2NhbERlZmF1bHRTeXN0ZW1BcHBlYXJhbmNlLm1t
IGluIFNvdXJjZXMgKi8sCiAJCQkJRkFCRTcyRkUxMDU5QzIxMTAwRDk5OUREIC8qIE1hdGhNTE5h
bWVzLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMzE3NzksNyArMzE3ODQsNiBAQAogCQkJCURFQ0E3
RTY1MUY5RUJEODMwMEUzQjY2MSAvKiBVbmlmaWVkU291cmNlMjM0LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCURFQ0E3RTY2MUY5RUJEODMwMEUzQjY2MSAvKiBVbmlmaWVkU291cmNlMjM1LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCURFQ0E3RTY3MUY5RUJEODMwMEUzQjY2MSAvKiBVbmlmaWVkU291
cmNlMjM2LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTQxRDI4RDBEMjEzOUUwNTgwMEY0MjA2RiAv
KiBMaWJXZWJSVENTdGF0c0NvbGxlY3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlERUNBN0U2
ODFGOUVCRDgzMDBFM0I2NjEgLyogVW5pZmllZFNvdXJjZTIzNy5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlERUNBN0U2OTFGOUVCRDgzMDBFM0I2NjEgLyogVW5pZmllZFNvdXJjZTIzOC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlERUNBN0U2QTFGOUVCRDgzMDBFM0I2NjEgLyogVW5pZmllZFNvdXJj
ZTIzOS5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NGaWx0ZXJJbWFnZVZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGaWx0ZXJJbWFn
ZVZhbHVlLmNwcAppbmRleCA2YWNmNzQ0ZWFiNGE5ZWNlYWFiNmM2YzcyZWY5Y2U5NThiMDJlNTE1
Li42ZjI1M2QxM2IzMzEzMzkyMjFlMTUyYmJmYjY4OGY0YjljZDg0MWFlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvY3NzL0NTU0ZpbHRlckltYWdlVmFsdWUuY3BwCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ1NTRmlsdGVySW1hZ2VWYWx1ZS5oIgogCisjaW5j
bHVkZSAiQ1NTRmlsdGVyLmgiCiAjaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKICNpbmNsdWRlICJD
YWNoZWRSZXNvdXJjZUxvYWRlci5oIgogI2luY2x1ZGUgIkZpbHRlckVmZmVjdFJlbmRlcmVyLmgi
CkBAIC0xMzEsMTUgKzEzMiwxNSBAQCBSZWZQdHI8SW1hZ2U+IENTU0ZpbHRlckltYWdlVmFsdWU6
OmltYWdlKFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyLCBjb25zdCBGbG9hdFNpegogICAgIGF1dG8g
aW1hZ2VSZWN0ID0gRmxvYXRSZWN0IHsgeyB9LCBzaXplIH07CiAgICAgdGV4dHVyZS0+Y29udGV4
dCgpLmRyYXdJbWFnZSgqaW1hZ2UsIGltYWdlUmVjdCk7CiAKLSAgICBhdXRvIGZpbHRlclJlbmRl
cmVyID0gRmlsdGVyRWZmZWN0UmVuZGVyZXI6OmNyZWF0ZSgpOwotICAgIGZpbHRlclJlbmRlcmVy
LT5zZXRTb3VyY2VJbWFnZShXVEZNb3ZlKHRleHR1cmUpKTsKLSAgICBmaWx0ZXJSZW5kZXJlci0+
c2V0U291cmNlSW1hZ2VSZWN0KGltYWdlUmVjdCk7Ci0gICAgZmlsdGVyUmVuZGVyZXItPnNldEZp
bHRlclJlZ2lvbihpbWFnZVJlY3QpOwotICAgIGlmICghZmlsdGVyUmVuZGVyZXItPmJ1aWxkKCpy
ZW5kZXJlciwgbV9maWx0ZXJPcGVyYXRpb25zLCBGaWx0ZXJGdW5jdGlvbikpCisgICAgYXV0byBj
c3NGaWx0ZXIgPSBDU1NGaWx0ZXI6OmNyZWF0ZSgpOworICAgIGNzc0ZpbHRlci0+c2V0U291cmNl
SW1hZ2UoV1RGTW92ZSh0ZXh0dXJlKSk7CisgICAgY3NzRmlsdGVyLT5zZXRTb3VyY2VJbWFnZVJl
Y3QoaW1hZ2VSZWN0KTsKKyAgICBjc3NGaWx0ZXItPnNldEZpbHRlclJlZ2lvbihpbWFnZVJlY3Qp
OworICAgIGlmICghY3NzRmlsdGVyLT5idWlsZCgqcmVuZGVyZXIsIG1fZmlsdGVyT3BlcmF0aW9u
cywgRmlsdGVyQ29uc3VtZXI6OkZpbHRlckZ1bmN0aW9uKSkKICAgICAgICAgcmV0dXJuICZJbWFn
ZTo6bnVsbEltYWdlKCk7Ci0gICAgZmlsdGVyUmVuZGVyZXItPmFwcGx5KCk7CisgICAgY3NzRmls
dGVyLT5hcHBseSgpOwogCi0gICAgcmV0dXJuIGZpbHRlclJlbmRlcmVyLT5vdXRwdXQoKS0+Y29w
eUltYWdlKCk7CisgICAgcmV0dXJuIGNzc0ZpbHRlci0+b3V0cHV0KCktPmNvcHlJbWFnZSgpOwog
fQogCiB2b2lkIENTU0ZpbHRlckltYWdlVmFsdWU6OmZpbHRlckltYWdlQ2hhbmdlZChjb25zdCBJ
bnRSZWN0JikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
L2NvY29hL1BsYXRmb3JtQ0FGaWx0ZXJzQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0Zm9ybUNBRmlsdGVyc0NvY29hLm1tCmluZGV4IDBiNWY2
ZmJlMGI2MGU0ZjgwM2RmZjEyYTZjNzk0M2U1NTQ3OGJmM2QuLjNhYjM5ZGZmZWE1OWMzOTMzOTQ1
MzdmYjkxYTAyNmQyMzQ2OTAzOTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FGaWx0ZXJzQ29jb2EubW0KKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUZpbHRlcnNDb2Nv
YS5tbQpAQCAtMzUsNyArMzUsNyBAQAogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotLy8g
RklYTUU6IFNob3VsZCBzaGFyZSB0aGVzZSB2YWx1ZXMgd2l0aCBGaWx0ZXJFZmZlY3RSZW5kZXJl
cjo6YnVpbGQoKSAoaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc2MDA4
KS4KKy8vIEZJWE1FOiBTaG91bGQgc2hhcmUgdGhlc2UgdmFsdWVzIHdpdGggQ1NTRmlsdGVyOjpi
dWlsZCgpIChodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzYwMDgpLgog
c3RhdGljIGNvbnN0IGRvdWJsZSBzZXBpYUZ1bGxDb25zdGFudHNbM11bM10gPSB7CiAgICAgeyAw
LjM5MywgMC43NjksIDAuMTg5IH0sCiAgICAgeyAwLjM0OSwgMC42ODYsIDAuMTY4IH0sCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaAppbmRl
eCA1MDFhZmQwN2ZhMDdmNmE3ODg3M2EzNzNiNzc0N2JhOGI4MzBjMjEzLi4zYmVkZWE3MDViNzZk
OWJmMWExYzUxOWNiMmU0Mzc1YThhZTY4MjgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmgKQEAgLTQ4LDYgKzQ4LDcgQEAgcHVibGlj
OgogICAgIHZvaWQgc2V0UmVuZGVyaW5nTW9kZShSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUp
IHsgbV9yZW5kZXJpbmdNb2RlID0gcmVuZGVyaW5nTW9kZTsgfQogCiAgICAgdmlydHVhbCBib29s
IGlzU1ZHRmlsdGVyKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wg
aXNDU1NGaWx0ZXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgdmlydHVhbCBGbG9h
dFNpemUgc2NhbGVkQnlGaWx0ZXJSZXNvbHV0aW9uKEZsb2F0U2l6ZSBzaXplKSBjb25zdCB7IHJl
dHVybiBzaXplICogbV9maWx0ZXJSZXNvbHV0aW9uOyB9CiAgICAgCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9DU1NGaWx0ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg1Yjg0NWFlNGFlNTgxYzFhYzcxMjNkMDZl
MDljNzc5Y2QyN2EwZTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvQ1NTRmlsdGVyLmNwcApAQCAtMCwwICsxLDM5OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkNTU0ZpbHRlci5oIgorCisjaW5jbHVkZSAiQ2FjaGVkU1ZHRG9jdW1lbnQuaCIKKyNpbmNs
dWRlICJDYWNoZWRTVkdEb2N1bWVudFJlZmVyZW5jZS5oIgorI2luY2x1ZGUgIkVsZW1lbnRJdGVy
YXRvci5oIgorI2luY2x1ZGUgIkZFQ29sb3JNYXRyaXguaCIKKyNpbmNsdWRlICJGRUNvbXBvbmVu
dFRyYW5zZmVyLmgiCisjaW5jbHVkZSAiRkVEcm9wU2hhZG93LmgiCisjaW5jbHVkZSAiRkVHYXVz
c2lhbkJsdXIuaCIKKyNpbmNsdWRlICJGRU1lcmdlLmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgor
I2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5jbHVkZSAiU1ZHRWxlbWVudC5oIgorI2luY2x1
ZGUgIlNWR0ZpbHRlckJ1aWxkZXIuaCIKKyNpbmNsdWRlICJTVkdGaWx0ZXJQcmltaXRpdmVTdGFu
ZGFyZEF0dHJpYnV0ZXMuaCIKKyNpbmNsdWRlICJTb3VyY2VHcmFwaGljLmgiCisjaW5jbHVkZSA8
YWxnb3JpdGhtPgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisKKyNpZiBVU0UoRElSRUNU
MkQpCisjaW5jbHVkZSA8ZDJkMS5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
c3RhdGljIGlubGluZSB2b2lkIGVuZE1hdHJpeFJvdyhWZWN0b3I8ZmxvYXQ+JiBwYXJhbWV0ZXJz
KQoreworICAgIHBhcmFtZXRlcnMuYXBwZW5kKDApOworICAgIHBhcmFtZXRlcnMuYXBwZW5kKDAp
OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbGFzdE1hdHJpeFJvdyhWZWN0b3I8ZmxvYXQ+JiBw
YXJhbWV0ZXJzKQoreworICAgIHBhcmFtZXRlcnMuYXBwZW5kKDApOworICAgIHBhcmFtZXRlcnMu
YXBwZW5kKDApOworICAgIHBhcmFtZXRlcnMuYXBwZW5kKDApOworICAgIHBhcmFtZXRlcnMuYXBw
ZW5kKDEpOworICAgIHBhcmFtZXRlcnMuYXBwZW5kKDApOworfQorCitSZWY8Q1NTRmlsdGVyPiBD
U1NGaWx0ZXI6OmNyZWF0ZSgpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ1NTRmlsdGVy
KTsKK30KKworQ1NTRmlsdGVyOjpDU1NGaWx0ZXIoKQorICAgIDogRmlsdGVyKEZsb2F0U2l6ZSB7
IDEsIDEgfSkKKyAgICAsIG1fc291cmNlR3JhcGhpYyhTb3VyY2VHcmFwaGljOjpjcmVhdGUoKnRo
aXMpKQoreworfQorCitDU1NGaWx0ZXI6On5DU1NGaWx0ZXIoKSA9IGRlZmF1bHQ7CisKK0dyYXBo
aWNzQ29udGV4dCogQ1NTRmlsdGVyOjppbnB1dENvbnRleHQoKQoreworICAgIHJldHVybiBzb3Vy
Y2VJbWFnZSgpID8gJnNvdXJjZUltYWdlKCktPmNvbnRleHQoKSA6IG51bGxwdHI7Cit9CisKK1Jl
ZlB0cjxGaWx0ZXJFZmZlY3Q+IENTU0ZpbHRlcjo6YnVpbGRSZWZlcmVuY2VGaWx0ZXIoUmVuZGVy
RWxlbWVudCYgcmVuZGVyZXIsIEZpbHRlckVmZmVjdCYgcHJldmlvdXNFZmZlY3QsIFJlZmVyZW5j
ZUZpbHRlck9wZXJhdGlvbiYgZmlsdGVyT3BlcmF0aW9uKQoreworICAgIGF1dG8qIGNhY2hlZFNW
R0RvY3VtZW50UmVmZXJlbmNlID0gZmlsdGVyT3BlcmF0aW9uLmNhY2hlZFNWR0RvY3VtZW50UmVm
ZXJlbmNlKCk7CisgICAgYXV0byogY2FjaGVkU1ZHRG9jdW1lbnQgPSBjYWNoZWRTVkdEb2N1bWVu
dFJlZmVyZW5jZSA/IGNhY2hlZFNWR0RvY3VtZW50UmVmZXJlbmNlLT5kb2N1bWVudCgpIDogbnVs
bHB0cjsKKworICAgIC8vIElmIHdlIGhhdmUgYW4gU1ZHIGRvY3VtZW50LCB0aGlzIGlzIGFuIGV4
dGVybmFsIHJlZmVyZW5jZS4gT3RoZXJ3aXNlCisgICAgLy8gd2UgbG9vayB1cCB0aGUgcmVmZXJl
bmNlZCBub2RlIGluIHRoZSBjdXJyZW50IGRvY3VtZW50LgorICAgIERvY3VtZW50KiBkb2N1bWVu
dDsKKyAgICBpZiAoIWNhY2hlZFNWR0RvY3VtZW50KQorICAgICAgICBkb2N1bWVudCA9ICZyZW5k
ZXJlci5kb2N1bWVudCgpOworICAgIGVsc2UgeworICAgICAgICBkb2N1bWVudCA9IGNhY2hlZFNW
R0RvY3VtZW50LT5kb2N1bWVudCgpOworICAgICAgICBpZiAoIWRvY3VtZW50KQorICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgYXV0byogZmlsdGVyID0gZG9jdW1lbnQt
PmdldEVsZW1lbnRCeUlkKGZpbHRlck9wZXJhdGlvbi5mcmFnbWVudCgpKTsKKyAgICBpZiAoIWZp
bHRlcikgeworICAgICAgICAvLyBBbHRob3VnaCB3ZSBkaWQgbm90IGZpbmQgdGhlIHJlZmVyZW5j
ZWQgZmlsdGVyLCBpdCBtaWdodCBleGlzdCBsYXRlciBpbiB0aGUgZG9jdW1lbnQuCisgICAgICAg
IC8vIEZJWE1FOiBUaGlzIHNraXBzIGFub255bW91cyBSZW5kZXJPYmplY3RzLiA8aHR0cHM6Ly93
ZWJraXQub3JnL2IvMTMxMDg1PgorICAgICAgICBpZiAoYXV0byogZWxlbWVudCA9IHJlbmRlcmVy
LmVsZW1lbnQoKSkKKyAgICAgICAgICAgIGRvY3VtZW50LT5hY2Nlc3NTVkdFeHRlbnNpb25zKCku
YWRkUGVuZGluZ1Jlc291cmNlKGZpbHRlck9wZXJhdGlvbi5mcmFnbWVudCgpLCBlbGVtZW50KTsK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgUmVmUHRyPEZpbHRlckVmZmVj
dD4gZWZmZWN0OworCisgICAgYXV0byBidWlsZGVyID0gc3RkOjptYWtlX3VuaXF1ZTxTVkdGaWx0
ZXJCdWlsZGVyPigmcHJldmlvdXNFZmZlY3QpOworCisgICAgZm9yIChhdXRvJiBlZmZlY3RFbGVt
ZW50IDogY2hpbGRyZW5PZlR5cGU8U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVz
PigqZmlsdGVyKSkgeworICAgICAgICBlZmZlY3QgPSBlZmZlY3RFbGVtZW50LmJ1aWxkKGJ1aWxk
ZXIuZ2V0KCksICp0aGlzKTsKKyAgICAgICAgaWYgKCFlZmZlY3QpCisgICAgICAgICAgICBjb250
aW51ZTsKKworICAgICAgICBlZmZlY3RFbGVtZW50LnNldFN0YW5kYXJkQXR0cmlidXRlcyhlZmZl
Y3QuZ2V0KCkpOworICAgICAgICBpZiAoZWZmZWN0RWxlbWVudC5yZW5kZXJlcigpKQorICAgICAg
ICAgICAgZWZmZWN0LT5zZXRPcGVyYXRpbmdDb2xvclNwYWNlKGVmZmVjdEVsZW1lbnQucmVuZGVy
ZXIoKS0+c3R5bGUoKS5zdmdTdHlsZSgpLmNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnMoKSA9PSBD
b2xvckludGVycG9sYXRpb246OkxpbmVhclJHQiA/IENvbG9yU3BhY2VMaW5lYXJSR0IgOiBDb2xv
clNwYWNlU1JHQik7CisKKyAgICAgICAgYnVpbGRlci0+YWRkKGVmZmVjdEVsZW1lbnQucmVzdWx0
KCksIGVmZmVjdCk7CisgICAgICAgIG1fZWZmZWN0cy5hcHBlbmQoKmVmZmVjdCk7CisgICAgfQor
ICAgIHJldHVybiBlZmZlY3Q7Cit9CisKK2Jvb2wgQ1NTRmlsdGVyOjpidWlsZChSZW5kZXJFbGVt
ZW50JiByZW5kZXJlciwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgb3BlcmF0aW9ucywgRmlsdGVy
Q29uc3VtZXIgY29uc3VtZXIpCit7CisgICAgbV9oYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMgPSBv
cGVyYXRpb25zLmhhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscygpOworICAgIG1faGFzRmlsdGVyVGhh
dFNob3VsZEJlUmVzdHJpY3RlZEJ5U2VjdXJpdHlPcmlnaW4gPSBvcGVyYXRpb25zLmhhc0ZpbHRl
clRoYXRTaG91bGRCZVJlc3RyaWN0ZWRCeVNlY3VyaXR5T3JpZ2luKCk7CisgICAgaWYgKG1faGFz
RmlsdGVyVGhhdE1vdmVzUGl4ZWxzKQorICAgICAgICBtX291dHNldHMgPSBvcGVyYXRpb25zLm91
dHNldHMoKTsKKworICAgIG1fZWZmZWN0cy5jbGVhcigpOworCisgICAgUmVmUHRyPEZpbHRlckVm
ZmVjdD4gcHJldmlvdXNFZmZlY3QgPSBtX3NvdXJjZUdyYXBoaWMucHRyKCk7CisgICAgZm9yIChh
dXRvJiBvcGVyYXRpb24gOiBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKSkgeworICAgICAgICBSZWZQ
dHI8RmlsdGVyRWZmZWN0PiBlZmZlY3Q7CisgICAgICAgIGF1dG8mIGZpbHRlck9wZXJhdGlvbiA9
ICpvcGVyYXRpb247CisgICAgICAgIHN3aXRjaCAoZmlsdGVyT3BlcmF0aW9uLnR5cGUoKSkgewor
ICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6UkVGRVJFTkNFOiB7CisgICAgICAgICAgICBh
dXRvJiByZWZlcmVuY2VPcGVyYXRpb24gPSBkb3duY2FzdDxSZWZlcmVuY2VGaWx0ZXJPcGVyYXRp
b24+KGZpbHRlck9wZXJhdGlvbik7CisgICAgICAgICAgICBlZmZlY3QgPSBidWlsZFJlZmVyZW5j
ZUZpbHRlcihyZW5kZXJlciwgKnByZXZpb3VzRWZmZWN0LCByZWZlcmVuY2VPcGVyYXRpb24pOwor
ICAgICAgICAgICAgcmVmZXJlbmNlT3BlcmF0aW9uLnNldEZpbHRlckVmZmVjdChlZmZlY3QuY29w
eVJlZigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgRmls
dGVyT3BlcmF0aW9uOjpHUkFZU0NBTEU6IHsKKyAgICAgICAgICAgIGF1dG8mIGNvbG9yTWF0cml4
T3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4oZmls
dGVyT3BlcmF0aW9uKTsKKyAgICAgICAgICAgIFZlY3RvcjxmbG9hdD4gaW5wdXRQYXJhbWV0ZXJz
OworICAgICAgICAgICAgZG91YmxlIG9uZU1pbnVzQW1vdW50ID0gY2xhbXBUbygxIC0gY29sb3JN
YXRyaXhPcGVyYXRpb24uYW1vdW50KCksIDAuMCwgMS4wKTsKKworICAgICAgICAgICAgLy8gU2Vl
IGh0dHBzOi8vZHZjcy53My5vcmcvaGcvRlhURi9yYXctZmlsZS90aXAvZmlsdGVycy9pbmRleC5o
dG1sI2dyYXlzY2FsZUVxdWl2YWxlbnQKKyAgICAgICAgICAgIC8vIGZvciBpbmZvcm1hdGlvbiBv
biBwYXJhbWV0ZXJzLgorCisgICAgICAgICAgICBpbnB1dFBhcmFtZXRlcnMuYXBwZW5kKG5hcnJv
d1ByZWNpc2lvblRvRmxvYXQoMC4yMTI2ICsgMC43ODc0ICogb25lTWludXNBbW91bnQpKTsKKyAg
ICAgICAgICAgIGlucHV0UGFyYW1ldGVycy5hcHBlbmQobmFycm93UHJlY2lzaW9uVG9GbG9hdCgw
LjcxNTIgLSAwLjcxNTIgKiBvbmVNaW51c0Ftb3VudCkpOworICAgICAgICAgICAgaW5wdXRQYXJh
bWV0ZXJzLmFwcGVuZChuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMDcyMiAtIDAuMDcyMiAqIG9u
ZU1pbnVzQW1vdW50KSk7CisgICAgICAgICAgICBlbmRNYXRyaXhSb3coaW5wdXRQYXJhbWV0ZXJz
KTsKKworICAgICAgICAgICAgaW5wdXRQYXJhbWV0ZXJzLmFwcGVuZChuYXJyb3dQcmVjaXNpb25U
b0Zsb2F0KDAuMjEyNiAtIDAuMjEyNiAqIG9uZU1pbnVzQW1vdW50KSk7CisgICAgICAgICAgICBp
bnB1dFBhcmFtZXRlcnMuYXBwZW5kKG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC43MTUyICsgMC4y
ODQ4ICogb25lTWludXNBbW91bnQpKTsKKyAgICAgICAgICAgIGlucHV0UGFyYW1ldGVycy5hcHBl
bmQobmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjA3MjIgLSAwLjA3MjIgKiBvbmVNaW51c0Ftb3Vu
dCkpOworICAgICAgICAgICAgZW5kTWF0cml4Um93KGlucHV0UGFyYW1ldGVycyk7CisKKyAgICAg
ICAgICAgIGlucHV0UGFyYW1ldGVycy5hcHBlbmQobmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjIx
MjYgLSAwLjIxMjYgKiBvbmVNaW51c0Ftb3VudCkpOworICAgICAgICAgICAgaW5wdXRQYXJhbWV0
ZXJzLmFwcGVuZChuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuNzE1MiAtIDAuNzE1MiAqIG9uZU1p
bnVzQW1vdW50KSk7CisgICAgICAgICAgICBpbnB1dFBhcmFtZXRlcnMuYXBwZW5kKG5hcnJvd1By
ZWNpc2lvblRvRmxvYXQoMC4wNzIyICsgMC45Mjc4ICogb25lTWludXNBbW91bnQpKTsKKyAgICAg
ICAgICAgIGVuZE1hdHJpeFJvdyhpbnB1dFBhcmFtZXRlcnMpOworCisgICAgICAgICAgICBsYXN0
TWF0cml4Um93KGlucHV0UGFyYW1ldGVycyk7CisKKyAgICAgICAgICAgIGVmZmVjdCA9IEZFQ29s
b3JNYXRyaXg6OmNyZWF0ZSgqdGhpcywgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWCwgaW5wdXRQ
YXJhbWV0ZXJzKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ug
RmlsdGVyT3BlcmF0aW9uOjpTRVBJQTogeworICAgICAgICAgICAgYXV0byYgY29sb3JNYXRyaXhP
cGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPihmaWx0
ZXJPcGVyYXRpb24pOworICAgICAgICAgICAgVmVjdG9yPGZsb2F0PiBpbnB1dFBhcmFtZXRlcnM7
CisgICAgICAgICAgICBkb3VibGUgb25lTWludXNBbW91bnQgPSBjbGFtcFRvKDEgLSBjb2xvck1h
dHJpeE9wZXJhdGlvbi5hbW91bnQoKSwgMC4wLCAxLjApOworCisgICAgICAgICAgICAvLyBTZWUg
aHR0cHM6Ly9kdmNzLnczLm9yZy9oZy9GWFRGL3Jhdy1maWxlL3RpcC9maWx0ZXJzL2luZGV4Lmh0
bWwjc2VwaWFFcXVpdmFsZW50CisgICAgICAgICAgICAvLyBmb3IgaW5mb3JtYXRpb24gb24gcGFy
YW1ldGVycy4KKworICAgICAgICAgICAgaW5wdXRQYXJhbWV0ZXJzLmFwcGVuZChuYXJyb3dQcmVj
aXNpb25Ub0Zsb2F0KDAuMzkzICsgMC42MDcgKiBvbmVNaW51c0Ftb3VudCkpOworICAgICAgICAg
ICAgaW5wdXRQYXJhbWV0ZXJzLmFwcGVuZChuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuNzY5IC0g
MC43NjkgKiBvbmVNaW51c0Ftb3VudCkpOworICAgICAgICAgICAgaW5wdXRQYXJhbWV0ZXJzLmFw
cGVuZChuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMTg5IC0gMC4xODkgKiBvbmVNaW51c0Ftb3Vu
dCkpOworICAgICAgICAgICAgZW5kTWF0cml4Um93KGlucHV0UGFyYW1ldGVycyk7CisKKyAgICAg
ICAgICAgIGlucHV0UGFyYW1ldGVycy5hcHBlbmQobmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjM0
OSAtIDAuMzQ5ICogb25lTWludXNBbW91bnQpKTsKKyAgICAgICAgICAgIGlucHV0UGFyYW1ldGVy
cy5hcHBlbmQobmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjY4NiArIDAuMzE0ICogb25lTWludXNB
bW91bnQpKTsKKyAgICAgICAgICAgIGlucHV0UGFyYW1ldGVycy5hcHBlbmQobmFycm93UHJlY2lz
aW9uVG9GbG9hdCgwLjE2OCAtIDAuMTY4ICogb25lTWludXNBbW91bnQpKTsKKyAgICAgICAgICAg
IGVuZE1hdHJpeFJvdyhpbnB1dFBhcmFtZXRlcnMpOworCisgICAgICAgICAgICBpbnB1dFBhcmFt
ZXRlcnMuYXBwZW5kKG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4yNzIgLSAwLjI3MiAqIG9uZU1p
bnVzQW1vdW50KSk7CisgICAgICAgICAgICBpbnB1dFBhcmFtZXRlcnMuYXBwZW5kKG5hcnJvd1By
ZWNpc2lvblRvRmxvYXQoMC41MzQgLSAwLjUzNCAqIG9uZU1pbnVzQW1vdW50KSk7CisgICAgICAg
ICAgICBpbnB1dFBhcmFtZXRlcnMuYXBwZW5kKG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4xMzEg
KyAwLjg2OSAqIG9uZU1pbnVzQW1vdW50KSk7CisgICAgICAgICAgICBlbmRNYXRyaXhSb3coaW5w
dXRQYXJhbWV0ZXJzKTsKKworICAgICAgICAgICAgbGFzdE1hdHJpeFJvdyhpbnB1dFBhcmFtZXRl
cnMpOworCisgICAgICAgICAgICBlZmZlY3QgPSBGRUNvbG9yTWF0cml4OjpjcmVhdGUoKnRoaXMs
IEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVgsIGlucHV0UGFyYW1ldGVycyk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0FUVVJB
VEU6IHsKKyAgICAgICAgICAgIGF1dG8mIGNvbG9yTWF0cml4T3BlcmF0aW9uID0gZG93bmNhc3Q8
QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKKyAgICAg
ICAgICAgIFZlY3RvcjxmbG9hdD4gaW5wdXRQYXJhbWV0ZXJzOworICAgICAgICAgICAgaW5wdXRQ
YXJhbWV0ZXJzLmFwcGVuZChuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbG9yTWF0cml4T3BlcmF0
aW9uLmFtb3VudCgpKSk7CisgICAgICAgICAgICBlZmZlY3QgPSBGRUNvbG9yTWF0cml4OjpjcmVh
dGUoKnRoaXMsIEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRVUkFURSwgaW5wdXRQYXJhbWV0ZXJzKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0
aW9uOjpIVUVfUk9UQVRFOiB7CisgICAgICAgICAgICBhdXRvJiBjb2xvck1hdHJpeE9wZXJhdGlv
biA9IGRvd25jYXN0PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJh
dGlvbik7CisgICAgICAgICAgICBWZWN0b3I8ZmxvYXQ+IGlucHV0UGFyYW1ldGVyczsKKyAgICAg
ICAgICAgIGlucHV0UGFyYW1ldGVycy5hcHBlbmQobmFycm93UHJlY2lzaW9uVG9GbG9hdChjb2xv
ck1hdHJpeE9wZXJhdGlvbi5hbW91bnQoKSkpOworICAgICAgICAgICAgZWZmZWN0ID0gRkVDb2xv
ck1hdHJpeDo6Y3JlYXRlKCp0aGlzLCBGRUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRFLCBpbnB1
dFBhcmFtZXRlcnMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2Fz
ZSBGaWx0ZXJPcGVyYXRpb246OklOVkVSVDogeworICAgICAgICAgICAgYXV0byYgY29tcG9uZW50
VHJhbnNmZXJPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVy
T3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOworICAgICAgICAgICAgQ29tcG9uZW50VHJhbnNm
ZXJGdW5jdGlvbiB0cmFuc2ZlckZ1bmN0aW9uOworICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlv
bi50eXBlID0gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX1RBQkxFOworICAgICAgICAgICAgVmVj
dG9yPGZsb2F0PiB0cmFuc2ZlclBhcmFtZXRlcnM7CisgICAgICAgICAgICB0cmFuc2ZlclBhcmFt
ZXRlcnMuYXBwZW5kKG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50VHJhbnNmZXJPcGVy
YXRpb24uYW1vdW50KCkpKTsKKyAgICAgICAgICAgIHRyYW5zZmVyUGFyYW1ldGVycy5hcHBlbmQo
bmFycm93UHJlY2lzaW9uVG9GbG9hdCgxIC0gY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24uYW1v
dW50KCkpKTsKKyAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24udGFibGVWYWx1ZXMgPSB0cmFu
c2ZlclBhcmFtZXRlcnM7CisKKyAgICAgICAgICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24g
bnVsbEZ1bmN0aW9uOworICAgICAgICAgICAgZWZmZWN0ID0gRkVDb21wb25lbnRUcmFuc2Zlcjo6
Y3JlYXRlKCp0aGlzLCB0cmFuc2ZlckZ1bmN0aW9uLCB0cmFuc2ZlckZ1bmN0aW9uLCB0cmFuc2Zl
ckZ1bmN0aW9uLCBudWxsRnVuY3Rpb24pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkFQUExFX0lOVkVSVF9MSUdIVE5FU1M6Cisg
ICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gQVBQTEVfSU5WRVJUX0xJR0hUTkVT
UyBpcyBvbmx5IHVzZWQgaW4gLWFwcGxlLWNvbG9yLWZpbHRlci4KKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6T1BBQ0lUWTogeworICAgICAgICAgICAg
YXV0byYgY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbXBvbmVu
dFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOworICAgICAgICAgICAg
Q29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiB0cmFuc2ZlckZ1bmN0aW9uOworICAgICAgICAgICAg
dHJhbnNmZXJGdW5jdGlvbi50eXBlID0gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX1RBQkxFOwor
ICAgICAgICAgICAgVmVjdG9yPGZsb2F0PiB0cmFuc2ZlclBhcmFtZXRlcnM7CisgICAgICAgICAg
ICB0cmFuc2ZlclBhcmFtZXRlcnMuYXBwZW5kKDApOworICAgICAgICAgICAgdHJhbnNmZXJQYXJh
bWV0ZXJzLmFwcGVuZChuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbXBvbmVudFRyYW5zZmVyT3Bl
cmF0aW9uLmFtb3VudCgpKSk7CisgICAgICAgICAgICB0cmFuc2ZlckZ1bmN0aW9uLnRhYmxlVmFs
dWVzID0gdHJhbnNmZXJQYXJhbWV0ZXJzOworCisgICAgICAgICAgICBDb21wb25lbnRUcmFuc2Zl
ckZ1bmN0aW9uIG51bGxGdW5jdGlvbjsKKyAgICAgICAgICAgIGVmZmVjdCA9IEZFQ29tcG9uZW50
VHJhbnNmZXI6OmNyZWF0ZSgqdGhpcywgbnVsbEZ1bmN0aW9uLCBudWxsRnVuY3Rpb24sIG51bGxG
dW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QlJJR0hUTkVTUzogeworICAgICAgICAg
ICAgYXV0byYgY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbXBv
bmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOworICAgICAgICAg
ICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiB0cmFuc2ZlckZ1bmN0aW9uOworICAgICAgICAg
ICAgdHJhbnNmZXJGdW5jdGlvbi50eXBlID0gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVB
UjsKKyAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24uc2xvcGUgPSBuYXJyb3dQcmVjaXNpb25U
b0Zsb2F0KGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uLmFtb3VudCgpKTsKKyAgICAgICAgICAg
IHRyYW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0ID0gMDsKKworICAgICAgICAgICAgQ29tcG9uZW50
VHJhbnNmZXJGdW5jdGlvbiBudWxsRnVuY3Rpb247CisgICAgICAgICAgICBlZmZlY3QgPSBGRUNv
bXBvbmVudFRyYW5zZmVyOjpjcmVhdGUoKnRoaXMsIHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVy
RnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIG51bGxGdW5jdGlvbik7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6Q09OVFJBU1Q6
IHsKKyAgICAgICAgICAgIGF1dG8mIGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uID0gZG93bmNh
c3Q8QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9u
KTsKKyAgICAgICAgICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gdHJhbnNmZXJGdW5jdGlv
bjsKKyAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24udHlwZSA9IEZFQ09NUE9ORU5UVFJBTlNG
RVJfVFlQRV9MSU5FQVI7CisgICAgICAgICAgICBmbG9hdCBhbW91bnQgPSBuYXJyb3dQcmVjaXNp
b25Ub0Zsb2F0KGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uLmFtb3VudCgpKTsKKyAgICAgICAg
ICAgIHRyYW5zZmVyRnVuY3Rpb24uc2xvcGUgPSBhbW91bnQ7CisgICAgICAgICAgICB0cmFuc2Zl
ckZ1bmN0aW9uLmludGVyY2VwdCA9IC0wLjUgKiBhbW91bnQgKyAwLjU7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gbnVsbEZ1bmN0aW9uOworICAg
ICAgICAgICAgZWZmZWN0ID0gRkVDb21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRlKCp0aGlzLCB0cmFu
c2ZlckZ1bmN0aW9uLCB0cmFuc2ZlckZ1bmN0aW9uLCB0cmFuc2ZlckZ1bmN0aW9uLCBudWxsRnVu
Y3Rpb24pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBGaWx0
ZXJPcGVyYXRpb246OkJMVVI6IHsKKyAgICAgICAgICAgIGF1dG8mIGJsdXJPcGVyYXRpb24gPSBk
b3duY2FzdDxCbHVyRmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOworICAgICAgICAg
ICAgZmxvYXQgc3RkRGV2aWF0aW9uID0gZmxvYXRWYWx1ZUZvckxlbmd0aChibHVyT3BlcmF0aW9u
LnN0ZERldmlhdGlvbigpLCAwKTsKKyAgICAgICAgICAgIGVmZmVjdCA9IEZFR2F1c3NpYW5CbHVy
OjpjcmVhdGUoKnRoaXMsIHN0ZERldmlhdGlvbiwgc3RkRGV2aWF0aW9uLCBjb25zdW1lciA9PSBG
aWx0ZXJDb25zdW1lcjo6RmlsdGVyUHJvcGVydHkgPyBFREdFTU9ERV9OT05FIDogRURHRU1PREVf
RFVQTElDQVRFKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ug
RmlsdGVyT3BlcmF0aW9uOjpEUk9QX1NIQURPVzogeworICAgICAgICAgICAgYXV0byYgZHJvcFNo
YWRvd09wZXJhdGlvbiA9IGRvd25jYXN0PERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb24+KGZpbHRl
ck9wZXJhdGlvbik7CisgICAgICAgICAgICBlZmZlY3QgPSBGRURyb3BTaGFkb3c6OmNyZWF0ZSgq
dGhpcywgZHJvcFNoYWRvd09wZXJhdGlvbi5zdGREZXZpYXRpb24oKSwgZHJvcFNoYWRvd09wZXJh
dGlvbi5zdGREZXZpYXRpb24oKSwKKyAgICAgICAgICAgICAgICBkcm9wU2hhZG93T3BlcmF0aW9u
LngoKSwgZHJvcFNoYWRvd09wZXJhdGlvbi55KCksIGRyb3BTaGFkb3dPcGVyYXRpb24uY29sb3Io
KSwgMSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZWZmZWN0KSB7Cisg
ICAgICAgICAgICAvLyBVbmxpa2UgU1ZHIEZpbHRlcnMgYW5kIENTU0ZpbHRlckltYWdlcywgZmls
dGVyIGZ1bmN0aW9ucyBvbiB0aGUgZmlsdGVyCisgICAgICAgICAgICAvLyBwcm9wZXJ0eSBhcHBs
aWVkIGhlcmUgc2hvdWxkIG5vdCBjbGlwIHRvIHRoZWlyIHByaW1pdGl2ZSBzdWJyZWdpb25zLgor
ICAgICAgICAgICAgZWZmZWN0LT5zZXRDbGlwc1RvQm91bmRzKGNvbnN1bWVyID09IEZpbHRlckNv
bnN1bWVyOjpGaWx0ZXJGdW5jdGlvbik7CisgICAgICAgICAgICBlZmZlY3QtPnNldE9wZXJhdGlu
Z0NvbG9yU3BhY2UoQ29sb3JTcGFjZVNSR0IpOworICAgICAgICAgICAgCisgICAgICAgICAgICBp
ZiAoZmlsdGVyT3BlcmF0aW9uLnR5cGUoKSAhPSBGaWx0ZXJPcGVyYXRpb246OlJFRkVSRU5DRSkg
eworICAgICAgICAgICAgICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkuYXBwZW5kKFdURk1vdmUo
cHJldmlvdXNFZmZlY3QpKTsKKyAgICAgICAgICAgICAgICBtX2VmZmVjdHMuYXBwZW5kKCplZmZl
Y3QpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcHJldmlvdXNFZmZlY3QgPSBXVEZNb3Zl
KGVmZmVjdCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBJZiB3ZSBkaWRuJ3QgbWFrZSBh
bnkgZWZmZWN0cywgdGVsbCBvdXIgY2FsbGVyIHdlIGFyZSBub3QgdmFsaWQuCisgICAgaWYgKG1f
ZWZmZWN0cy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHNldE1heEVm
ZmVjdFJlY3RzKG1fc291cmNlRHJhd2luZ1JlZ2lvbik7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K2Jvb2wgQ1NTRmlsdGVyOjp1cGRhdGVCYWNraW5nU3RvcmVSZWN0KGNvbnN0IEZsb2F0UmVjdCYg
ZmlsdGVyUmVjdCkKK3sKKyAgICBpZiAoZmlsdGVyUmVjdC5pc0VtcHR5KCkgfHwgSW1hZ2VCdWZm
ZXI6OnNpemVOZWVkc0NsYW1waW5nKGZpbHRlclJlY3Quc2l6ZSgpKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgaWYgKGZpbHRlclJlY3QgPT0gc291cmNlSW1hZ2VSZWN0KCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIHNldFNvdXJjZUltYWdlUmVjdChmaWx0ZXJSZWN0KTsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBDU1NGaWx0ZXI6OmFsbG9jYXRlQmFja2luZ1N0
b3JlSWZOZWVkZWQoY29uc3QgR3JhcGhpY3NDb250ZXh0JiB0YXJnZXRDb250ZXh0KQoreworICAg
IC8vIEF0IHRoaXMgcG9pbnQgdGhlIGVmZmVjdCBjaGFpbiBoYXMgYmVlbiBidWlsdCwgYW5kIHRo
ZQorICAgIC8vIHNvdXJjZSBpbWFnZSBzaXplcyBzZXQuIFdlIGp1c3QgbmVlZCB0byBhdHRhY2gg
dGhlIGdyYXBoaWMKKyAgICAvLyBidWZmZXIgaWYgd2UgaGF2ZSBub3QgeWV0IGRvbmUgc28uCisK
KyAgICBpZiAobV9ncmFwaGljc0J1ZmZlckF0dGFjaGVkKQorICAgICAgICByZXR1cm47CisKKyAg
ICBJbnRTaXplIGxvZ2ljYWxTaXplIHsgbV9zb3VyY2VEcmF3aW5nUmVnaW9uLnNpemUoKSB9Owor
ICAgIGlmICghc291cmNlSW1hZ2UoKSB8fCBzb3VyY2VJbWFnZSgpLT5sb2dpY2FsU2l6ZSgpICE9
IGxvZ2ljYWxTaXplKSB7CisjaWYgVVNFKERJUkVDVDJEKQorICAgICAgICBzZXRTb3VyY2VJbWFn
ZShJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGxvZ2ljYWxTaXplLCByZW5kZXJpbmdNb2RlKCksICZ0YXJn
ZXRDb250ZXh0LCBmaWx0ZXJTY2FsZSgpKSk7CisjZWxzZQorICAgICAgICBVTlVTRURfUEFSQU0o
dGFyZ2V0Q29udGV4dCk7CisgICAgICAgIHNldFNvdXJjZUltYWdlKEltYWdlQnVmZmVyOjpjcmVh
dGUobG9naWNhbFNpemUsIHJlbmRlcmluZ01vZGUoKSwgZmlsdGVyU2NhbGUoKSkpOworI2VuZGlm
CisgICAgfQorICAgIG1fZ3JhcGhpY3NCdWZmZXJBdHRhY2hlZCA9IHRydWU7Cit9CisKK3ZvaWQg
Q1NTRmlsdGVyOjpjbGVhckludGVybWVkaWF0ZVJlc3VsdHMoKQoreworICAgIG1fc291cmNlR3Jh
cGhpYy0+Y2xlYXJSZXN1bHQoKTsKKyAgICBmb3IgKGF1dG8mIGVmZmVjdCA6IG1fZWZmZWN0cykK
KyAgICAgICAgZWZmZWN0LT5jbGVhclJlc3VsdCgpOworfQorCit2b2lkIENTU0ZpbHRlcjo6YXBw
bHkoKQoreworICAgIGF1dG8mIGVmZmVjdCA9IG1fZWZmZWN0cy5sYXN0KCkuZ2V0KCk7CisgICAg
ZWZmZWN0LmFwcGx5KCk7CisgICAgZWZmZWN0LnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoQ29s
b3JTcGFjZVNSR0IpOworfQorCitMYXlvdXRSZWN0IENTU0ZpbHRlcjo6Y29tcHV0ZVNvdXJjZUlt
YWdlUmVjdEZvckRpcnR5UmVjdChjb25zdCBMYXlvdXRSZWN0JiBmaWx0ZXJCb3hSZWN0LCBjb25z
dCBMYXlvdXRSZWN0JiBkaXJ0eVJlY3QpCit7CisgICAgLy8gVGhlIHJlc3VsdCBvZiB0aGlzIGZ1
bmN0aW9uIGlzIHRoZSBhcmVhIGluIHRoZSAiZmlsdGVyQm94UmVjdCIgdGhhdCBuZWVkcyB0byBi
ZSByZXBhaW50ZWQsIHNvIHRoYXQgd2UgZnVsbHkgY292ZXIgdGhlICJkaXJ0eVJlY3QiLgorICAg
IGF1dG8gcmVjdEZvclJlcGFpbnQgPSBkaXJ0eVJlY3Q7CisgICAgaWYgKGhhc0ZpbHRlclRoYXRN
b3Zlc1BpeGVscygpKSB7CisgICAgICAgIC8vIE5vdGUgdGhhdCB0aGUgb3V0c2V0cyBhcmUgcmV2
ZXJzZWQgaGVyZSBiZWNhdXNlIHdlIGFyZSBnb2luZyBiYWNrd2FyZHMgLT4gd2UgaGF2ZSB0aGUg
ZGlydHkgcmVjdCBhbmQKKyAgICAgICAgLy8gbmVlZCB0byBmaW5kIG91dCB3aGF0IGlzIHRoZSBy
ZWN0YW5nbGUgdGhhdCBtaWdodCBpbmZsdWVuY2UgdGhlIHJlc3VsdCBpbnNpZGUgdGhhdCBkaXJ0
eSByZWN0LgorICAgICAgICByZWN0Rm9yUmVwYWludC5tb3ZlKC1tX291dHNldHMucmlnaHQoKSwg
LW1fb3V0c2V0cy5ib3R0b20oKSk7CisgICAgICAgIHJlY3RGb3JSZXBhaW50LmV4cGFuZChtX291
dHNldHMubGVmdCgpICsgbV9vdXRzZXRzLnJpZ2h0KCksIG1fb3V0c2V0cy50b3AoKSArIG1fb3V0
c2V0cy5ib3R0b20oKSk7CisgICAgfQorICAgIHJlY3RGb3JSZXBhaW50LmludGVyc2VjdChmaWx0
ZXJCb3hSZWN0KTsKKyAgICByZXR1cm4gcmVjdEZvclJlcGFpbnQ7Cit9CisKK0ltYWdlQnVmZmVy
KiBDU1NGaWx0ZXI6Om91dHB1dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZWZmZWN0cy5sYXN0
KCktPmltYWdlQnVmZmVyUmVzdWx0KCk7Cit9CisKK3ZvaWQgQ1NTRmlsdGVyOjpzZXRTb3VyY2VJ
bWFnZVJlY3QoY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QpCit7CisgICAgbV9zb3Vy
Y2VEcmF3aW5nUmVnaW9uID0gc291cmNlSW1hZ2VSZWN0OworICAgIHNldE1heEVmZmVjdFJlY3Rz
KHNvdXJjZUltYWdlUmVjdCk7CisgICAgc2V0RmlsdGVyUmVnaW9uKHNvdXJjZUltYWdlUmVjdCk7
CisgICAgbV9ncmFwaGljc0J1ZmZlckF0dGFjaGVkID0gZmFsc2U7Cit9CisKKwordm9pZCBDU1NG
aWx0ZXI6OnNldE1heEVmZmVjdFJlY3RzKGNvbnN0IEZsb2F0UmVjdCYgZWZmZWN0UmVjdCkKK3sK
KyAgICBmb3IgKGF1dG8mIGVmZmVjdCA6IG1fZWZmZWN0cykKKyAgICAgICAgZWZmZWN0LT5zZXRN
YXhFZmZlY3RSZWN0KGVmZmVjdFJlY3QpOworfQorCitJbnRSZWN0IENTU0ZpbHRlcjo6b3V0cHV0
UmVjdCgpIGNvbnN0Cit7CisgICAgYXV0byYgbGFzdEVmZmVjdCA9IG1fZWZmZWN0cy5sYXN0KCku
Z2V0KCk7CisgICAgaWYgKCFsYXN0RWZmZWN0Lmhhc1Jlc3VsdCgpKQorICAgICAgICByZXR1cm4g
eyB9OworICAgIHJldHVybiBsYXN0RWZmZWN0LnJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRJbWFnZURh
dGEoSW50UmVjdCB7IG1fZmlsdGVyUmVnaW9uIH0pOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVyLmggYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzJhMjM4Nzgw
YjEwM2I3Y2I5YjE3ODAwNjg4ZmYwOThjOTQzY2M1NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuaApAQCAtMCwwICsxLDEwMiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSAiRmlsdGVyLmgiCisjaW5jbHVkZSAiSW50UmVjdEV4dGVudC5oIgorI2lu
Y2x1ZGUgIkxheW91dFJlY3QuaCIKKyNpbmNsdWRlIDx3dGYvVHlwZUNhc3RzLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRmlsdGVyRWZmZWN0OworY2xhc3MgRmlsdGVyT3BlcmF0
aW9uczsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDsKK2NsYXNzIFJlZmVyZW5jZUZpbHRlck9wZXJh
dGlvbjsKK2NsYXNzIFJlbmRlckVsZW1lbnQ7CitjbGFzcyBTb3VyY2VHcmFwaGljOworCitlbnVt
IGNsYXNzIEZpbHRlckNvbnN1bWVyIHsgRmlsdGVyUHJvcGVydHksIEZpbHRlckZ1bmN0aW9uIH07
CisKK2NsYXNzIENTU0ZpbHRlciBmaW5hbCA6IHB1YmxpYyBGaWx0ZXIgeworICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIGZyaWVuZCBjbGFzcyBGaWx0ZXJFZmZlY3RS
ZW5kZXJlckhlbHBlcjsKKworICAgIHN0YXRpYyBSZWY8Q1NTRmlsdGVyPiBjcmVhdGUoKTsKKwor
ICAgIHZvaWQgc2V0U291cmNlSW1hZ2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOworICAgIHZvaWQg
c2V0RmlsdGVyUmVnaW9uKGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uKSB7IG1fZmlsdGVy
UmVnaW9uID0gZmlsdGVyUmVnaW9uOyB9CisKKyAgICBJbWFnZUJ1ZmZlciogb3V0cHV0KCkgY29u
c3Q7CisKKyAgICBib29sIGJ1aWxkKFJlbmRlckVsZW1lbnQmLCBjb25zdCBGaWx0ZXJPcGVyYXRp
b25zJiwgRmlsdGVyQ29uc3VtZXIpOworICAgIHZvaWQgY2xlYXJJbnRlcm1lZGlhdGVSZXN1bHRz
KCk7CisgICAgdm9pZCBhcHBseSgpOworCisgICAgYm9vbCBoYXNGaWx0ZXJUaGF0TW92ZXNQaXhl
bHMoKSBjb25zdCB7IHJldHVybiBtX2hhc0ZpbHRlclRoYXRNb3Zlc1BpeGVsczsgfQorICAgIGJv
b2wgaGFzRmlsdGVyVGhhdFNob3VsZEJlUmVzdHJpY3RlZEJ5U2VjdXJpdHlPcmlnaW4oKSBjb25z
dCB7IHJldHVybiBtX2hhc0ZpbHRlclRoYXRTaG91bGRCZVJlc3RyaWN0ZWRCeVNlY3VyaXR5T3Jp
Z2luOyB9CisKK3ByaXZhdGU6CisgICAgQ1NTRmlsdGVyKCk7CisgICAgdmlydHVhbCB+Q1NTRmls
dGVyKCk7CisKKyAgICBib29sIGlzQ1NTRmlsdGVyKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1
ZTsgfQorCisgICAgRmxvYXRSZWN0IHNvdXJjZUltYWdlUmVjdCgpIGNvbnN0IGZpbmFsIHsgcmV0
dXJuIG1fc291cmNlRHJhd2luZ1JlZ2lvbjsgfQorICAgIEZsb2F0UmVjdCBmaWx0ZXJSZWdpb24o
KSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2ZpbHRlclJlZ2lvbjsgfQorCisgICAgUmVmUHRyPEZp
bHRlckVmZmVjdD4gYnVpbGRSZWZlcmVuY2VGaWx0ZXIoUmVuZGVyRWxlbWVudCYsIEZpbHRlckVm
ZmVjdCYgcHJldmlvdXNFZmZlY3QsIFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbiYpOworCisgICAg
dm9pZCBzZXRNYXhFZmZlY3RSZWN0cyhjb25zdCBGbG9hdFJlY3QmKTsKKworICAgIEdyYXBoaWNz
Q29udGV4dCogaW5wdXRDb250ZXh0KCk7CisKKyAgICBib29sIHVwZGF0ZUJhY2tpbmdTdG9yZVJl
Y3QoY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWN0KTsKKyAgICB2b2lkIGFsbG9jYXRlQmFja2lu
Z1N0b3JlSWZOZWVkZWQoY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CisKKyAgICBJbnRSZWN0IG91
dHB1dFJlY3QoKSBjb25zdDsKKworICAgIExheW91dFJlY3QgY29tcHV0ZVNvdXJjZUltYWdlUmVj
dEZvckRpcnR5UmVjdChjb25zdCBMYXlvdXRSZWN0JiBmaWx0ZXJCb3hSZWN0LCBjb25zdCBMYXlv
dXRSZWN0JiBkaXJ0eVJlY3QpOworCisgICAgRmxvYXRSZWN0IG1fc291cmNlRHJhd2luZ1JlZ2lv
bjsKKyAgICBGbG9hdFJlY3QgbV9maWx0ZXJSZWdpb247CisKKyAgICBWZWN0b3I8UmVmPEZpbHRl
ckVmZmVjdD4+IG1fZWZmZWN0czsKKyAgICBSZWY8U291cmNlR3JhcGhpYz4gbV9zb3VyY2VHcmFw
aGljOworCisgICAgSW50UmVjdEV4dGVudCBtX291dHNldHM7CisKKyAgICBib29sIG1fZ3JhcGhp
Y3NCdWZmZXJBdHRhY2hlZCB7IGZhbHNlIH07CisgICAgYm9vbCBtX2hhc0ZpbHRlclRoYXRNb3Zl
c1BpeGVscyB7IGZhbHNlIH07CisgICAgYm9vbCBtX2hhc0ZpbHRlclRoYXRTaG91bGRCZVJlc3Ry
aWN0ZWRCeVNlY3VyaXR5T3JpZ2luIHsgZmFsc2UgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpDU1NGaWx0ZXIp
CisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OkZpbHRlciYgZmlsdGVyKSB7
IHJldHVybiBmaWx0ZXIuaXNDU1NGaWx0ZXIoKTsgfQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19F
TkQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0ZpbHRlckVmZmVjdFJl
bmRlcmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GaWx0ZXJFZmZlY3RSZW5kZXJl
ci5jcHAKaW5kZXggOGJmN2FlNDUyNjVhZDY5N2Y1MTBkZDBiNDcxMDllMGJkMzNiZGNkYS4uZDNi
NWQyNTk4NDY2ODg5ZWIxNjAwNWYwM2FhZDgwOGNkMjVmMDExMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwCkBAIC0yNyw2ICsyNyw3
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0UmVuZGVyZXIu
aCIKIAorI2luY2x1ZGUgIkNTU0ZpbHRlci5oIgogI2luY2x1ZGUgIkNhY2hlZFNWR0RvY3VtZW50
LmgiCiAjaW5jbHVkZSAiQ2FjaGVkU1ZHRG9jdW1lbnRSZWZlcmVuY2UuaCIKICNpbmNsdWRlICJF
bGVtZW50SXRlcmF0b3IuaCIKQEAgLTUwLDM0OSArNTEsMTIgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1zdGF0aWMgaW5saW5lIHZvaWQgZW5kTWF0cml4Um93KFZlY3RvcjxmbG9hdD4mIHBh
cmFtZXRlcnMpCi17Ci0gICAgcGFyYW1ldGVycy5hcHBlbmQoMCk7Ci0gICAgcGFyYW1ldGVycy5h
cHBlbmQoMCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBsYXN0TWF0cml4Um93KFZlY3Rvcjxm
bG9hdD4mIHBhcmFtZXRlcnMpCi17Ci0gICAgcGFyYW1ldGVycy5hcHBlbmQoMCk7Ci0gICAgcGFy
YW1ldGVycy5hcHBlbmQoMCk7Ci0gICAgcGFyYW1ldGVycy5hcHBlbmQoMCk7Ci0gICAgcGFyYW1l
dGVycy5hcHBlbmQoMSk7Ci0gICAgcGFyYW1ldGVycy5hcHBlbmQoMCk7Ci19Ci0KLWlubGluZSBG
aWx0ZXJFZmZlY3RSZW5kZXJlcjo6RmlsdGVyRWZmZWN0UmVuZGVyZXIoKQotICAgIDogRmlsdGVy
KEZsb2F0U2l6ZSB7IDEsIDEgfSkKLSAgICAsIG1fc291cmNlR3JhcGhpYyhTb3VyY2VHcmFwaGlj
OjpjcmVhdGUoKnRoaXMpKQotewotfQotCi1SZWY8RmlsdGVyRWZmZWN0UmVuZGVyZXI+IEZpbHRl
ckVmZmVjdFJlbmRlcmVyOjpjcmVhdGUoKQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZp
bHRlckVmZmVjdFJlbmRlcmVyKTsKLX0KLQotRmlsdGVyRWZmZWN0UmVuZGVyZXI6On5GaWx0ZXJF
ZmZlY3RSZW5kZXJlcigpID0gZGVmYXVsdDsKLQotR3JhcGhpY3NDb250ZXh0KiBGaWx0ZXJFZmZl
Y3RSZW5kZXJlcjo6aW5wdXRDb250ZXh0KCkKLXsKLSAgICByZXR1cm4gc291cmNlSW1hZ2UoKSA/
ICZzb3VyY2VJbWFnZSgpLT5jb250ZXh0KCkgOiBudWxscHRyOwotfQotCi1SZWZQdHI8RmlsdGVy
RWZmZWN0PiBGaWx0ZXJFZmZlY3RSZW5kZXJlcjo6YnVpbGRSZWZlcmVuY2VGaWx0ZXIoUmVuZGVy
RWxlbWVudCYgcmVuZGVyZXIsIEZpbHRlckVmZmVjdCYgcHJldmlvdXNFZmZlY3QsIFJlZmVyZW5j
ZUZpbHRlck9wZXJhdGlvbiYgZmlsdGVyT3BlcmF0aW9uKQotewotICAgIGF1dG8qIGNhY2hlZFNW
R0RvY3VtZW50UmVmZXJlbmNlID0gZmlsdGVyT3BlcmF0aW9uLmNhY2hlZFNWR0RvY3VtZW50UmVm
ZXJlbmNlKCk7Ci0gICAgYXV0byogY2FjaGVkU1ZHRG9jdW1lbnQgPSBjYWNoZWRTVkdEb2N1bWVu
dFJlZmVyZW5jZSA/IGNhY2hlZFNWR0RvY3VtZW50UmVmZXJlbmNlLT5kb2N1bWVudCgpIDogbnVs
bHB0cjsKLQotICAgIC8vIElmIHdlIGhhdmUgYW4gU1ZHIGRvY3VtZW50LCB0aGlzIGlzIGFuIGV4
dGVybmFsIHJlZmVyZW5jZS4gT3RoZXJ3aXNlCi0gICAgLy8gd2UgbG9vayB1cCB0aGUgcmVmZXJl
bmNlZCBub2RlIGluIHRoZSBjdXJyZW50IGRvY3VtZW50LgotICAgIERvY3VtZW50KiBkb2N1bWVu
dDsKLSAgICBpZiAoIWNhY2hlZFNWR0RvY3VtZW50KQotICAgICAgICBkb2N1bWVudCA9ICZyZW5k
ZXJlci5kb2N1bWVudCgpOwotICAgIGVsc2UgewotICAgICAgICBkb2N1bWVudCA9IGNhY2hlZFNW
R0RvY3VtZW50LT5kb2N1bWVudCgpOwotICAgICAgICBpZiAoIWRvY3VtZW50KQotICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgYXV0byogZmlsdGVyID0gZG9jdW1lbnQt
PmdldEVsZW1lbnRCeUlkKGZpbHRlck9wZXJhdGlvbi5mcmFnbWVudCgpKTsKLSAgICBpZiAoIWZp
bHRlcikgewotICAgICAgICAvLyBBbHRob3VnaCB3ZSBkaWQgbm90IGZpbmQgdGhlIHJlZmVyZW5j
ZWQgZmlsdGVyLCBpdCBtaWdodCBleGlzdCBsYXRlciBpbiB0aGUgZG9jdW1lbnQuCi0gICAgICAg
IC8vIEZJWE1FOiBUaGlzIHNraXBzIGFub255bW91cyBSZW5kZXJPYmplY3RzLiA8aHR0cHM6Ly93
ZWJraXQub3JnL2IvMTMxMDg1PgotICAgICAgICBpZiAoYXV0byogZWxlbWVudCA9IHJlbmRlcmVy
LmVsZW1lbnQoKSkKLSAgICAgICAgICAgIGRvY3VtZW50LT5hY2Nlc3NTVkdFeHRlbnNpb25zKCku
YWRkUGVuZGluZ1Jlc291cmNlKGZpbHRlck9wZXJhdGlvbi5mcmFnbWVudCgpLCBlbGVtZW50KTsK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgUmVmUHRyPEZpbHRlckVmZmVj
dD4gZWZmZWN0OwotCi0gICAgYXV0byBidWlsZGVyID0gc3RkOjptYWtlX3VuaXF1ZTxTVkdGaWx0
ZXJCdWlsZGVyPigmcHJldmlvdXNFZmZlY3QpOwotCi0gICAgZm9yIChhdXRvJiBlZmZlY3RFbGVt
ZW50IDogY2hpbGRyZW5PZlR5cGU8U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVz
PigqZmlsdGVyKSkgewotICAgICAgICBlZmZlY3QgPSBlZmZlY3RFbGVtZW50LmJ1aWxkKGJ1aWxk
ZXIuZ2V0KCksICp0aGlzKTsKLSAgICAgICAgaWYgKCFlZmZlY3QpCi0gICAgICAgICAgICBjb250
aW51ZTsKLQotICAgICAgICBlZmZlY3RFbGVtZW50LnNldFN0YW5kYXJkQXR0cmlidXRlcyhlZmZl
Y3QuZ2V0KCkpOwotICAgICAgICBpZiAoZWZmZWN0RWxlbWVudC5yZW5kZXJlcigpKQotICAgICAg
ICAgICAgZWZmZWN0LT5zZXRPcGVyYXRpbmdDb2xvclNwYWNlKGVmZmVjdEVsZW1lbnQucmVuZGVy
ZXIoKS0+c3R5bGUoKS5zdmdTdHlsZSgpLmNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnMoKSA9PSBD
b2xvckludGVycG9sYXRpb246OkxpbmVhclJHQiA/IENvbG9yU3BhY2VMaW5lYXJSR0IgOiBDb2xv
clNwYWNlU1JHQik7Ci0KLSAgICAgICAgYnVpbGRlci0+YWRkKGVmZmVjdEVsZW1lbnQucmVzdWx0
KCksIGVmZmVjdCk7Ci0gICAgICAgIG1fZWZmZWN0cy5hcHBlbmQoKmVmZmVjdCk7Ci0gICAgfQot
ICAgIHJldHVybiBlZmZlY3Q7Ci19Ci0KLWJvb2wgRmlsdGVyRWZmZWN0UmVuZGVyZXI6OmJ1aWxk
KFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBvcGVyYXRp
b25zLCBGaWx0ZXJDb25zdW1lciBjb25zdW1lcikKLXsKLSAgICBtX2hhc0ZpbHRlclRoYXRNb3Zl
c1BpeGVscyA9IG9wZXJhdGlvbnMuaGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzKCk7Ci0gICAgbV9o
YXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1cml0eU9yaWdpbiA9IG9wZXJhdGlv
bnMuaGFzRmlsdGVyVGhhdFNob3VsZEJlUmVzdHJpY3RlZEJ5U2VjdXJpdHlPcmlnaW4oKTsKLSAg
ICBpZiAobV9oYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMpCi0gICAgICAgIG1fb3V0c2V0cyA9IG9w
ZXJhdGlvbnMub3V0c2V0cygpOwotCi0gICAgbV9lZmZlY3RzLmNsZWFyKCk7Ci0KLSAgICBSZWZQ
dHI8RmlsdGVyRWZmZWN0PiBwcmV2aW91c0VmZmVjdCA9IG1fc291cmNlR3JhcGhpYy5wdHIoKTsK
LSAgICBmb3IgKGF1dG8mIG9wZXJhdGlvbiA6IG9wZXJhdGlvbnMub3BlcmF0aW9ucygpKSB7Ci0g
ICAgICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGVmZmVjdDsKLSAgICAgICAgYXV0byYgZmlsdGVy
T3BlcmF0aW9uID0gKm9wZXJhdGlvbjsKLSAgICAgICAgc3dpdGNoIChmaWx0ZXJPcGVyYXRpb24u
dHlwZSgpKSB7Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpSRUZFUkVOQ0U6IHsKLSAg
ICAgICAgICAgIGF1dG8mIHJlZmVyZW5jZU9wZXJhdGlvbiA9IGRvd25jYXN0PFJlZmVyZW5jZUZp
bHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIGVmZmVjdCA9IGJ1
aWxkUmVmZXJlbmNlRmlsdGVyKHJlbmRlcmVyLCAqcHJldmlvdXNFZmZlY3QsIHJlZmVyZW5jZU9w
ZXJhdGlvbik7Ci0gICAgICAgICAgICByZWZlcmVuY2VPcGVyYXRpb24uc2V0RmlsdGVyRWZmZWN0
KGVmZmVjdC5jb3B5UmVmKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAg
ICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkdSQVlTQ0FMRTogewotICAgICAgICAgICAgYXV0byYg
Y29sb3JNYXRyaXhPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3Bl
cmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgVmVjdG9yPGZsb2F0PiBpbnB1
dFBhcmFtZXRlcnM7Ci0gICAgICAgICAgICBkb3VibGUgb25lTWludXNBbW91bnQgPSBjbGFtcFRv
KDEgLSBjb2xvck1hdHJpeE9wZXJhdGlvbi5hbW91bnQoKSwgMC4wLCAxLjApOwotCi0gICAgICAg
ICAgICAvLyBTZWUgaHR0cHM6Ly9kdmNzLnczLm9yZy9oZy9GWFRGL3Jhdy1maWxlL3RpcC9maWx0
ZXJzL2luZGV4Lmh0bWwjZ3JheXNjYWxlRXF1aXZhbGVudAotICAgICAgICAgICAgLy8gZm9yIGlu
Zm9ybWF0aW9uIG9uIHBhcmFtZXRlcnMuCi0KLSAgICAgICAgICAgIGlucHV0UGFyYW1ldGVycy5h
cHBlbmQobmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjIxMjYgKyAwLjc4NzQgKiBvbmVNaW51c0Ft
b3VudCkpOwotICAgICAgICAgICAgaW5wdXRQYXJhbWV0ZXJzLmFwcGVuZChuYXJyb3dQcmVjaXNp
b25Ub0Zsb2F0KDAuNzE1MiAtIDAuNzE1MiAqIG9uZU1pbnVzQW1vdW50KSk7Ci0gICAgICAgICAg
ICBpbnB1dFBhcmFtZXRlcnMuYXBwZW5kKG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4wNzIyIC0g
MC4wNzIyICogb25lTWludXNBbW91bnQpKTsKLSAgICAgICAgICAgIGVuZE1hdHJpeFJvdyhpbnB1
dFBhcmFtZXRlcnMpOwotCi0gICAgICAgICAgICBpbnB1dFBhcmFtZXRlcnMuYXBwZW5kKG5hcnJv
d1ByZWNpc2lvblRvRmxvYXQoMC4yMTI2IC0gMC4yMTI2ICogb25lTWludXNBbW91bnQpKTsKLSAg
ICAgICAgICAgIGlucHV0UGFyYW1ldGVycy5hcHBlbmQobmFycm93UHJlY2lzaW9uVG9GbG9hdCgw
LjcxNTIgKyAwLjI4NDggKiBvbmVNaW51c0Ftb3VudCkpOwotICAgICAgICAgICAgaW5wdXRQYXJh
bWV0ZXJzLmFwcGVuZChuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMDcyMiAtIDAuMDcyMiAqIG9u
ZU1pbnVzQW1vdW50KSk7Ci0gICAgICAgICAgICBlbmRNYXRyaXhSb3coaW5wdXRQYXJhbWV0ZXJz
KTsKLQotICAgICAgICAgICAgaW5wdXRQYXJhbWV0ZXJzLmFwcGVuZChuYXJyb3dQcmVjaXNpb25U
b0Zsb2F0KDAuMjEyNiAtIDAuMjEyNiAqIG9uZU1pbnVzQW1vdW50KSk7Ci0gICAgICAgICAgICBp
bnB1dFBhcmFtZXRlcnMuYXBwZW5kKG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC43MTUyIC0gMC43
MTUyICogb25lTWludXNBbW91bnQpKTsKLSAgICAgICAgICAgIGlucHV0UGFyYW1ldGVycy5hcHBl
bmQobmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjA3MjIgKyAwLjkyNzggKiBvbmVNaW51c0Ftb3Vu
dCkpOwotICAgICAgICAgICAgZW5kTWF0cml4Um93KGlucHV0UGFyYW1ldGVycyk7Ci0KLSAgICAg
ICAgICAgIGxhc3RNYXRyaXhSb3coaW5wdXRQYXJhbWV0ZXJzKTsKLQotICAgICAgICAgICAgZWZm
ZWN0ID0gRkVDb2xvck1hdHJpeDo6Y3JlYXRlKCp0aGlzLCBGRUNPTE9STUFUUklYX1RZUEVfTUFU
UklYLCBpbnB1dFBhcmFtZXRlcnMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNFUElBOiB7Ci0gICAgICAgICAgICBhdXRvJiBj
b2xvck1hdHJpeE9wZXJhdGlvbiA9IGRvd25jYXN0PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVy
YXRpb24+KGZpbHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBWZWN0b3I8ZmxvYXQ+IGlucHV0
UGFyYW1ldGVyczsKLSAgICAgICAgICAgIGRvdWJsZSBvbmVNaW51c0Ftb3VudCA9IGNsYW1wVG8o
MSAtIGNvbG9yTWF0cml4T3BlcmF0aW9uLmFtb3VudCgpLCAwLjAsIDEuMCk7Ci0KLSAgICAgICAg
ICAgIC8vIFNlZSBodHRwczovL2R2Y3MudzMub3JnL2hnL0ZYVEYvcmF3LWZpbGUvdGlwL2ZpbHRl
cnMvaW5kZXguaHRtbCNzZXBpYUVxdWl2YWxlbnQKLSAgICAgICAgICAgIC8vIGZvciBpbmZvcm1h
dGlvbiBvbiBwYXJhbWV0ZXJzLgotCi0gICAgICAgICAgICBpbnB1dFBhcmFtZXRlcnMuYXBwZW5k
KG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4zOTMgKyAwLjYwNyAqIG9uZU1pbnVzQW1vdW50KSk7
Ci0gICAgICAgICAgICBpbnB1dFBhcmFtZXRlcnMuYXBwZW5kKG5hcnJvd1ByZWNpc2lvblRvRmxv
YXQoMC43NjkgLSAwLjc2OSAqIG9uZU1pbnVzQW1vdW50KSk7Ci0gICAgICAgICAgICBpbnB1dFBh
cmFtZXRlcnMuYXBwZW5kKG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4xODkgLSAwLjE4OSAqIG9u
ZU1pbnVzQW1vdW50KSk7Ci0gICAgICAgICAgICBlbmRNYXRyaXhSb3coaW5wdXRQYXJhbWV0ZXJz
KTsKLQotICAgICAgICAgICAgaW5wdXRQYXJhbWV0ZXJzLmFwcGVuZChuYXJyb3dQcmVjaXNpb25U
b0Zsb2F0KDAuMzQ5IC0gMC4zNDkgKiBvbmVNaW51c0Ftb3VudCkpOwotICAgICAgICAgICAgaW5w
dXRQYXJhbWV0ZXJzLmFwcGVuZChuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuNjg2ICsgMC4zMTQg
KiBvbmVNaW51c0Ftb3VudCkpOwotICAgICAgICAgICAgaW5wdXRQYXJhbWV0ZXJzLmFwcGVuZChu
YXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMTY4IC0gMC4xNjggKiBvbmVNaW51c0Ftb3VudCkpOwot
ICAgICAgICAgICAgZW5kTWF0cml4Um93KGlucHV0UGFyYW1ldGVycyk7Ci0KLSAgICAgICAgICAg
IGlucHV0UGFyYW1ldGVycy5hcHBlbmQobmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjI3MiAtIDAu
MjcyICogb25lTWludXNBbW91bnQpKTsKLSAgICAgICAgICAgIGlucHV0UGFyYW1ldGVycy5hcHBl
bmQobmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjUzNCAtIDAuNTM0ICogb25lTWludXNBbW91bnQp
KTsKLSAgICAgICAgICAgIGlucHV0UGFyYW1ldGVycy5hcHBlbmQobmFycm93UHJlY2lzaW9uVG9G
bG9hdCgwLjEzMSArIDAuODY5ICogb25lTWludXNBbW91bnQpKTsKLSAgICAgICAgICAgIGVuZE1h
dHJpeFJvdyhpbnB1dFBhcmFtZXRlcnMpOwotCi0gICAgICAgICAgICBsYXN0TWF0cml4Um93KGlu
cHV0UGFyYW1ldGVycyk7Ci0KLSAgICAgICAgICAgIGVmZmVjdCA9IEZFQ29sb3JNYXRyaXg6OmNy
ZWF0ZSgqdGhpcywgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWCwgaW5wdXRQYXJhbWV0ZXJzKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0
aW9uOjpTQVRVUkFURTogewotICAgICAgICAgICAgYXV0byYgY29sb3JNYXRyaXhPcGVyYXRpb24g
PSBkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRp
b24pOwotICAgICAgICAgICAgVmVjdG9yPGZsb2F0PiBpbnB1dFBhcmFtZXRlcnM7Ci0gICAgICAg
ICAgICBpbnB1dFBhcmFtZXRlcnMuYXBwZW5kKG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29sb3JN
YXRyaXhPcGVyYXRpb24uYW1vdW50KCkpKTsKLSAgICAgICAgICAgIGVmZmVjdCA9IEZFQ29sb3JN
YXRyaXg6OmNyZWF0ZSgqdGhpcywgRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFLCBpbnB1dFBh
cmFtZXRlcnMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBG
aWx0ZXJPcGVyYXRpb246OkhVRV9ST1RBVEU6IHsKLSAgICAgICAgICAgIGF1dG8mIGNvbG9yTWF0
cml4T3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4o
ZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIFZlY3RvcjxmbG9hdD4gaW5wdXRQYXJhbWV0
ZXJzOwotICAgICAgICAgICAgaW5wdXRQYXJhbWV0ZXJzLmFwcGVuZChuYXJyb3dQcmVjaXNpb25U
b0Zsb2F0KGNvbG9yTWF0cml4T3BlcmF0aW9uLmFtb3VudCgpKSk7Ci0gICAgICAgICAgICBlZmZl
Y3QgPSBGRUNvbG9yTWF0cml4OjpjcmVhdGUoKnRoaXMsIEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVS
T1RBVEUsIGlucHV0UGFyYW1ldGVycyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SU5WRVJUOiB7Ci0gICAgICAgICAgICBhdXRv
JiBjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbiA9IGRvd25jYXN0PEJhc2ljQ29tcG9uZW50VHJh
bnNmZXJGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBDb21w
b25lbnRUcmFuc2ZlckZ1bmN0aW9uIHRyYW5zZmVyRnVuY3Rpb247Ci0gICAgICAgICAgICB0cmFu
c2ZlckZ1bmN0aW9uLnR5cGUgPSBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfVEFCTEU7Ci0gICAg
ICAgICAgICBWZWN0b3I8ZmxvYXQ+IHRyYW5zZmVyUGFyYW1ldGVyczsKLSAgICAgICAgICAgIHRy
YW5zZmVyUGFyYW1ldGVycy5hcHBlbmQobmFycm93UHJlY2lzaW9uVG9GbG9hdChjb21wb25lbnRU
cmFuc2Zlck9wZXJhdGlvbi5hbW91bnQoKSkpOwotICAgICAgICAgICAgdHJhbnNmZXJQYXJhbWV0
ZXJzLmFwcGVuZChuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDEgLSBjb21wb25lbnRUcmFuc2Zlck9w
ZXJhdGlvbi5hbW91bnQoKSkpOwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi50YWJsZVZh
bHVlcyA9IHRyYW5zZmVyUGFyYW1ldGVyczsKLQotICAgICAgICAgICAgQ29tcG9uZW50VHJhbnNm
ZXJGdW5jdGlvbiBudWxsRnVuY3Rpb247Ci0gICAgICAgICAgICBlZmZlY3QgPSBGRUNvbXBvbmVu
dFRyYW5zZmVyOjpjcmVhdGUoKnRoaXMsIHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rp
b24sIHRyYW5zZmVyRnVuY3Rpb24sIG51bGxGdW5jdGlvbik7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QVBQTEVfSU5WRVJUX0xJ
R0hUTkVTUzoKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBBUFBMRV9JTlZF
UlRfTElHSFRORVNTIGlzIG9ubHkgdXNlZCBpbiAtYXBwbGUtY29sb3ItZmlsdGVyLgotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpPUEFDSVRZOiB7Ci0g
ICAgICAgICAgICBhdXRvJiBjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbiA9IGRvd25jYXN0PEJh
c2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbik7Ci0g
ICAgICAgICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIHRyYW5zZmVyRnVuY3Rpb247Ci0g
ICAgICAgICAgICB0cmFuc2ZlckZ1bmN0aW9uLnR5cGUgPSBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZ
UEVfVEFCTEU7Ci0gICAgICAgICAgICBWZWN0b3I8ZmxvYXQ+IHRyYW5zZmVyUGFyYW1ldGVyczsK
LSAgICAgICAgICAgIHRyYW5zZmVyUGFyYW1ldGVycy5hcHBlbmQoMCk7Ci0gICAgICAgICAgICB0
cmFuc2ZlclBhcmFtZXRlcnMuYXBwZW5kKG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50
VHJhbnNmZXJPcGVyYXRpb24uYW1vdW50KCkpKTsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rp
b24udGFibGVWYWx1ZXMgPSB0cmFuc2ZlclBhcmFtZXRlcnM7Ci0KLSAgICAgICAgICAgIENvbXBv
bmVudFRyYW5zZmVyRnVuY3Rpb24gbnVsbEZ1bmN0aW9uOwotICAgICAgICAgICAgZWZmZWN0ID0g
RkVDb21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRlKCp0aGlzLCBudWxsRnVuY3Rpb24sIG51bGxGdW5j
dGlvbiwgbnVsbEZ1bmN0aW9uLCB0cmFuc2ZlckZ1bmN0aW9uKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCUklHSFRORVNTOiB7
Ci0gICAgICAgICAgICBhdXRvJiBjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbiA9IGRvd25jYXN0
PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbik7
Ci0gICAgICAgICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIHRyYW5zZmVyRnVuY3Rpb247
Ci0gICAgICAgICAgICB0cmFuc2ZlckZ1bmN0aW9uLnR5cGUgPSBGRUNPTVBPTkVOVFRSQU5TRkVS
X1RZUEVfTElORUFSOwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSA9IG5hcnJv
d1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24uYW1vdW50KCkpOwot
ICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi5pbnRlcmNlcHQgPSAwOwotCi0gICAgICAgICAg
ICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIG51bGxGdW5jdGlvbjsKLSAgICAgICAgICAgIGVm
ZmVjdCA9IEZFQ29tcG9uZW50VHJhbnNmZXI6OmNyZWF0ZSgqdGhpcywgdHJhbnNmZXJGdW5jdGlv
biwgdHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgbnVsbEZ1bmN0aW9uKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9u
OjpDT05UUkFTVDogewotICAgICAgICAgICAgYXV0byYgY29tcG9uZW50VHJhbnNmZXJPcGVyYXRp
b24gPSBkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPihmaWx0
ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiB0cmFu
c2ZlckZ1bmN0aW9uOwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi50eXBlID0gRkVDT01Q
T05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVBUjsKLSAgICAgICAgICAgIGZsb2F0IGFtb3VudCA9IG5h
cnJvd1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24uYW1vdW50KCkp
OwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSA9IGFtb3VudDsKLSAgICAgICAg
ICAgIHRyYW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0ID0gLTAuNSAqIGFtb3VudCArIDAuNTsKLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBudWxsRnVu
Y3Rpb247Ci0gICAgICAgICAgICBlZmZlY3QgPSBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUo
KnRoaXMsIHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rp
b24sIG51bGxGdW5jdGlvbik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QkxVUjogewotICAgICAgICAgICAgYXV0byYgYmx1ck9w
ZXJhdGlvbiA9IGRvd25jYXN0PEJsdXJGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbik7
Ci0gICAgICAgICAgICBmbG9hdCBzdGREZXZpYXRpb24gPSBmbG9hdFZhbHVlRm9yTGVuZ3RoKGJs
dXJPcGVyYXRpb24uc3RkRGV2aWF0aW9uKCksIDApOwotICAgICAgICAgICAgZWZmZWN0ID0gRkVH
YXVzc2lhbkJsdXI6OmNyZWF0ZSgqdGhpcywgc3RkRGV2aWF0aW9uLCBzdGREZXZpYXRpb24sIGNv
bnN1bWVyID09IEZpbHRlclByb3BlcnR5ID8gRURHRU1PREVfTk9ORSA6IEVER0VNT0RFX0RVUExJ
Q0FURSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEZpbHRl
ck9wZXJhdGlvbjo6RFJPUF9TSEFET1c6IHsKLSAgICAgICAgICAgIGF1dG8mIGRyb3BTaGFkb3dP
cGVyYXRpb24gPSBkb3duY2FzdDxEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVy
YXRpb24pOwotICAgICAgICAgICAgZWZmZWN0ID0gRkVEcm9wU2hhZG93OjpjcmVhdGUoKnRoaXMs
IGRyb3BTaGFkb3dPcGVyYXRpb24uc3RkRGV2aWF0aW9uKCksIGRyb3BTaGFkb3dPcGVyYXRpb24u
c3RkRGV2aWF0aW9uKCksCi0gICAgICAgICAgICAgICAgZHJvcFNoYWRvd09wZXJhdGlvbi54KCks
IGRyb3BTaGFkb3dPcGVyYXRpb24ueSgpLCBkcm9wU2hhZG93T3BlcmF0aW9uLmNvbG9yKCksIDEp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGVmZmVjdCkgewotICAgICAg
ICAgICAgLy8gVW5saWtlIFNWRyBGaWx0ZXJzIGFuZCBDU1NGaWx0ZXJJbWFnZXMsIGZpbHRlciBm
dW5jdGlvbnMgb24gdGhlIGZpbHRlcgotICAgICAgICAgICAgLy8gcHJvcGVydHkgYXBwbGllZCBo
ZXJlIHNob3VsZCBub3QgY2xpcCB0byB0aGVpciBwcmltaXRpdmUgc3VicmVnaW9ucy4KLSAgICAg
ICAgICAgIGVmZmVjdC0+c2V0Q2xpcHNUb0JvdW5kcyhjb25zdW1lciA9PSBGaWx0ZXJGdW5jdGlv
bik7Ci0gICAgICAgICAgICBlZmZlY3QtPnNldE9wZXJhdGluZ0NvbG9yU3BhY2UoQ29sb3JTcGFj
ZVNSR0IpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoZmlsdGVyT3BlcmF0aW9uLnR5
cGUoKSAhPSBGaWx0ZXJPcGVyYXRpb246OlJFRkVSRU5DRSkgewotICAgICAgICAgICAgICAgIGVm
ZmVjdC0+aW5wdXRFZmZlY3RzKCkuYXBwZW5kKFdURk1vdmUocHJldmlvdXNFZmZlY3QpKTsKLSAg
ICAgICAgICAgICAgICBtX2VmZmVjdHMuYXBwZW5kKCplZmZlY3QpOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgcHJldmlvdXNFZmZlY3QgPSBXVEZNb3ZlKGVmZmVjdCk7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICAvLyBJZiB3ZSBkaWRuJ3QgbWFrZSBhbnkgZWZmZWN0cywgdGVsbCBvdXIg
Y2FsbGVyIHdlIGFyZSBub3QgdmFsaWQuCi0gICAgaWYgKG1fZWZmZWN0cy5pc0VtcHR5KCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHNldE1heEVmZmVjdFJlY3RzKG1fc291cmNlRHJh
d2luZ1JlZ2lvbik7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRmlsdGVyRWZmZWN0UmVu
ZGVyZXI6OnVwZGF0ZUJhY2tpbmdTdG9yZVJlY3QoY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWN0
KQotewotICAgIGlmIChmaWx0ZXJSZWN0LmlzRW1wdHkoKSB8fCBJbWFnZUJ1ZmZlcjo6c2l6ZU5l
ZWRzQ2xhbXBpbmcoZmlsdGVyUmVjdC5zaXplKCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBpZiAoZmlsdGVyUmVjdCA9PSBzb3VyY2VJbWFnZVJlY3QoKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgc2V0U291cmNlSW1hZ2VSZWN0KGZpbHRlclJlY3QpOwotICAgIHJldHVy
biB0cnVlOwotfQotCi12b2lkIEZpbHRlckVmZmVjdFJlbmRlcmVyOjphbGxvY2F0ZUJhY2tpbmdT
dG9yZUlmTmVlZGVkKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgdGFyZ2V0Q29udGV4dCkKLXsKLSAg
ICAvLyBBdCB0aGlzIHBvaW50IHRoZSBlZmZlY3QgY2hhaW4gaGFzIGJlZW4gYnVpbHQsIGFuZCB0
aGUKLSAgICAvLyBzb3VyY2UgaW1hZ2Ugc2l6ZXMgc2V0LiBXZSBqdXN0IG5lZWQgdG8gYXR0YWNo
IHRoZSBncmFwaGljCi0gICAgLy8gYnVmZmVyIGlmIHdlIGhhdmUgbm90IHlldCBkb25lIHNvLgot
Ci0gICAgaWYgKG1fZ3JhcGhpY3NCdWZmZXJBdHRhY2hlZCkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgSW50U2l6ZSBsb2dpY2FsU2l6ZSB7IG1fc291cmNlRHJhd2luZ1JlZ2lvbi5zaXplKCkgfTsK
LSAgICBpZiAoIXNvdXJjZUltYWdlKCkgfHwgc291cmNlSW1hZ2UoKS0+bG9naWNhbFNpemUoKSAh
PSBsb2dpY2FsU2l6ZSkgewotI2lmIFVTRShESVJFQ1QyRCkKLSAgICAgICAgc2V0U291cmNlSW1h
Z2UoSW1hZ2VCdWZmZXI6OmNyZWF0ZShsb2dpY2FsU2l6ZSwgcmVuZGVyaW5nTW9kZSgpLCAmdGFy
Z2V0Q29udGV4dCwgZmlsdGVyU2NhbGUoKSkpOwotI2Vsc2UKLSAgICAgICAgVU5VU0VEX1BBUkFN
KHRhcmdldENvbnRleHQpOwotICAgICAgICBzZXRTb3VyY2VJbWFnZShJbWFnZUJ1ZmZlcjo6Y3Jl
YXRlKGxvZ2ljYWxTaXplLCByZW5kZXJpbmdNb2RlKCksIGZpbHRlclNjYWxlKCkpKTsKLSNlbmRp
ZgotICAgIH0KLSAgICBtX2dyYXBoaWNzQnVmZmVyQXR0YWNoZWQgPSB0cnVlOwotfQotCi12b2lk
IEZpbHRlckVmZmVjdFJlbmRlcmVyOjpjbGVhckludGVybWVkaWF0ZVJlc3VsdHMoKQotewotICAg
IG1fc291cmNlR3JhcGhpYy0+Y2xlYXJSZXN1bHQoKTsKLSAgICBmb3IgKGF1dG8mIGVmZmVjdCA6
IG1fZWZmZWN0cykKLSAgICAgICAgZWZmZWN0LT5jbGVhclJlc3VsdCgpOwotfQotCi12b2lkIEZp
bHRlckVmZmVjdFJlbmRlcmVyOjphcHBseSgpCi17Ci0gICAgYXV0byYgZWZmZWN0ID0gbV9lZmZl
Y3RzLmxhc3QoKS5nZXQoKTsKLSAgICBlZmZlY3QuYXBwbHkoKTsKLSAgICBlZmZlY3QudHJhbnNm
b3JtUmVzdWx0Q29sb3JTcGFjZShDb2xvclNwYWNlU1JHQik7Ci19Ci0KLUxheW91dFJlY3QgRmls
dGVyRWZmZWN0UmVuZGVyZXI6OmNvbXB1dGVTb3VyY2VJbWFnZVJlY3RGb3JEaXJ0eVJlY3QoY29u
c3QgTGF5b3V0UmVjdCYgZmlsdGVyQm94UmVjdCwgY29uc3QgTGF5b3V0UmVjdCYgZGlydHlSZWN0
KQotewotICAgIC8vIFRoZSByZXN1bHQgb2YgdGhpcyBmdW5jdGlvbiBpcyB0aGUgYXJlYSBpbiB0
aGUgImZpbHRlckJveFJlY3QiIHRoYXQgbmVlZHMgdG8gYmUgcmVwYWludGVkLCBzbyB0aGF0IHdl
IGZ1bGx5IGNvdmVyIHRoZSAiZGlydHlSZWN0Ii4KLSAgICBhdXRvIHJlY3RGb3JSZXBhaW50ID0g
ZGlydHlSZWN0OwotICAgIGlmIChoYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMoKSkgewotICAgICAg
ICAvLyBOb3RlIHRoYXQgdGhlIG91dHNldHMgYXJlIHJldmVyc2VkIGhlcmUgYmVjYXVzZSB3ZSBh
cmUgZ29pbmcgYmFja3dhcmRzIC0+IHdlIGhhdmUgdGhlIGRpcnR5IHJlY3QgYW5kCi0gICAgICAg
IC8vIG5lZWQgdG8gZmluZCBvdXQgd2hhdCBpcyB0aGUgcmVjdGFuZ2xlIHRoYXQgbWlnaHQgaW5m
bHVlbmNlIHRoZSByZXN1bHQgaW5zaWRlIHRoYXQgZGlydHkgcmVjdC4KLSAgICAgICAgcmVjdEZv
clJlcGFpbnQubW92ZSgtbV9vdXRzZXRzLnJpZ2h0KCksIC1tX291dHNldHMuYm90dG9tKCkpOwot
ICAgICAgICByZWN0Rm9yUmVwYWludC5leHBhbmQobV9vdXRzZXRzLmxlZnQoKSArIG1fb3V0c2V0
cy5yaWdodCgpLCBtX291dHNldHMudG9wKCkgKyBtX291dHNldHMuYm90dG9tKCkpOwotICAgIH0K
LSAgICByZWN0Rm9yUmVwYWludC5pbnRlcnNlY3QoZmlsdGVyQm94UmVjdCk7Ci0gICAgcmV0dXJu
IHJlY3RGb3JSZXBhaW50OwotfQotCi1JbWFnZUJ1ZmZlciogRmlsdGVyRWZmZWN0UmVuZGVyZXI6
Om91dHB1dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZWZmZWN0cy5sYXN0KCktPmltYWdlQnVm
ZmVyUmVzdWx0KCk7Ci19Ci0KLXZvaWQgRmlsdGVyRWZmZWN0UmVuZGVyZXI6OnNldE1heEVmZmVj
dFJlY3RzKGNvbnN0IEZsb2F0UmVjdCYgZWZmZWN0UmVjdCkKLXsKLSAgICBmb3IgKGF1dG8mIGVm
ZmVjdCA6IG1fZWZmZWN0cykKLSAgICAgICAgZWZmZWN0LT5zZXRNYXhFZmZlY3RSZWN0KGVmZmVj
dFJlY3QpOwotfQotCi1JbnRSZWN0IEZpbHRlckVmZmVjdFJlbmRlcmVyOjpvdXRwdXRSZWN0KCkg
Y29uc3QKLXsKLSAgICBhdXRvJiBsYXN0RWZmZWN0ID0gbV9lZmZlY3RzLmxhc3QoKS5nZXQoKTsK
LSAgICBpZiAoIWxhc3RFZmZlY3QuaGFzUmVzdWx0KCkpCi0gICAgICAgIHJldHVybiB7IH07Ci0g
ICAgcmV0dXJuIGxhc3RFZmZlY3QucmVxdWVzdGVkUmVnaW9uT2ZJbnB1dEltYWdlRGF0YShJbnRS
ZWN0IHsgbV9maWx0ZXJSZWdpb24gfSk7Ci19Ci0KIGJvb2wgRmlsdGVyRWZmZWN0UmVuZGVyZXJI
ZWxwZXI6OnByZXBhcmVGaWx0ZXJFZmZlY3QoUmVuZGVyTGF5ZXImIGxheWVyLCBjb25zdCBMYXlv
dXRSZWN0JiBmaWx0ZXJCb3hSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBkaXJ0eVJlY3QsIGNvbnN0
IExheW91dFJlY3QmIGxheWVyUmVwYWludFJlY3QpCiB7CiAgICAgQVNTRVJUKG1faGF2ZUZpbHRl
ckVmZmVjdCk7Ci0gICAgQVNTRVJUKGxheWVyLmZpbHRlclJlbmRlcmVyKCkpOworICAgIEFTU0VS
VChsYXllci5maWx0ZXIoKSk7CiAKLSAgICBhdXRvJiBmaWx0ZXIgPSAqbGF5ZXIuZmlsdGVyUmVu
ZGVyZXIoKTsKKyAgICBhdXRvJiBmaWx0ZXIgPSAqbGF5ZXIuZmlsdGVyKCk7CiAgICAgYXV0byBm
aWx0ZXJTb3VyY2VSZWN0ID0gZmlsdGVyLmNvbXB1dGVTb3VyY2VJbWFnZVJlY3RGb3JEaXJ0eVJl
Y3QoZmlsdGVyQm94UmVjdCwgZGlydHlSZWN0KTsKIAogICAgIGlmIChmaWx0ZXJTb3VyY2VSZWN0
LmlzRW1wdHkoKSkgewpAQCAtNDI0LDE1ICs4OCwxNSBAQCBHcmFwaGljc0NvbnRleHQqIEZpbHRl
ckVmZmVjdFJlbmRlcmVySGVscGVyOjpmaWx0ZXJDb250ZXh0KCkgY29uc3QKIHsKICAgICBpZiAo
IW1faGF2ZUZpbHRlckVmZmVjdCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJu
IG1fcmVuZGVyTGF5ZXItPmZpbHRlclJlbmRlcmVyKCktPmlucHV0Q29udGV4dCgpOworICAgIHJl
dHVybiBtX3JlbmRlckxheWVyLT5maWx0ZXIoKS0+aW5wdXRDb250ZXh0KCk7CiB9CiAKIGJvb2wg
RmlsdGVyRWZmZWN0UmVuZGVyZXJIZWxwZXI6OmJlZ2luRmlsdGVyRWZmZWN0KCkKIHsKICAgICBB
U1NFUlQobV9yZW5kZXJMYXllcik7Ci0gICAgQVNTRVJUKG1fcmVuZGVyTGF5ZXItPmZpbHRlclJl
bmRlcmVyKCkpOworICAgIEFTU0VSVChtX3JlbmRlckxheWVyLT5maWx0ZXIoKSk7CiAKLSAgICBh
dXRvJiBmaWx0ZXIgPSAqbV9yZW5kZXJMYXllci0+ZmlsdGVyUmVuZGVyZXIoKTsKKyAgICBhdXRv
JiBmaWx0ZXIgPSAqbV9yZW5kZXJMYXllci0+ZmlsdGVyKCk7CiAgICAgZmlsdGVyLmFsbG9jYXRl
QmFja2luZ1N0b3JlSWZOZWVkZWQobV90YXJnZXRDb250ZXh0KTsKICAgICAvLyBQYWludCBpbnRv
IHRoZSBjb250ZXh0IHRoYXQgcmVwcmVzZW50cyB0aGUgU291cmNlR3JhcGhpYyBvZiB0aGUgZmls
dGVyLgogICAgIGF1dG8qIHNvdXJjZUdyYXBoaWNzQ29udGV4dCA9IGZpbHRlci5pbnB1dENvbnRl
eHQoKTsKQEAgLTQ1NiwxMiArMTIwLDEyIEBAIHZvaWQgRmlsdGVyRWZmZWN0UmVuZGVyZXJIZWxw
ZXI6OmFwcGx5RmlsdGVyRWZmZWN0KEdyYXBoaWNzQ29udGV4dCYgZGVzdGluYXRpb25DCiB7CiAg
ICAgQVNTRVJUKG1faGF2ZUZpbHRlckVmZmVjdCk7CiAgICAgQVNTRVJUKG1fcmVuZGVyTGF5ZXIp
OwotICAgIEFTU0VSVChtX3JlbmRlckxheWVyLT5maWx0ZXJSZW5kZXJlcigpKTsKLSAgICBBU1NF
UlQobV9yZW5kZXJMYXllci0+ZmlsdGVyUmVuZGVyZXIoKS0+aW5wdXRDb250ZXh0KCkpOworICAg
IEFTU0VSVChtX3JlbmRlckxheWVyLT5maWx0ZXIoKSk7CisgICAgQVNTRVJUKG1fcmVuZGVyTGF5
ZXItPmZpbHRlcigpLT5pbnB1dENvbnRleHQoKSk7CiAKICAgICBMT0dfV0lUSF9TVFJFQU0oRmls
dGVycywgc3RyZWFtIDw8ICJcbkZpbHRlckVmZmVjdFJlbmRlcmVySGVscGVyICIgPDwgdGhpcyA8
PCAiIGFwcGx5RmlsdGVyRWZmZWN0Iik7CiAKLSAgICBhdXRvJiBmaWx0ZXIgPSAqbV9yZW5kZXJM
YXllci0+ZmlsdGVyUmVuZGVyZXIoKTsKKyAgICBhdXRvJiBmaWx0ZXIgPSAqbV9yZW5kZXJMYXll
ci0+ZmlsdGVyKCk7CiAgICAgZmlsdGVyLmlucHV0Q29udGV4dCgpLT5yZXN0b3JlKCk7CiAKICAg
ICBmaWx0ZXIuYXBwbHkoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9G
aWx0ZXJFZmZlY3RSZW5kZXJlci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0ZpbHRlckVm
ZmVjdFJlbmRlcmVyLmgKaW5kZXggNGI0NDkyZDUzMDhkNDM3ODY1M2ZkZmNkYjdhMGU1MzE1Y2Rl
NmE5Yy4uM2ZiMWEzNDI3ZjJiOTBiZDcxZTNiODc3ZTNmODEyMTkyNWZmN2Q3YSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmgKQEAgLTI1LDI3
ICsyNSwyMiBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1
ZGUgIkludFJlY3RFeHRlbnQuaCIKICNpbmNsdWRlICJMYXlvdXRSZWN0LmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogY2xhc3MgRG9jdW1lbnQ7Ci1jbGFzcyBGaWx0ZXJFZmZlY3Q7Ci1jbGFz
cyBGaWx0ZXJPcGVyYXRpb25zOwogY2xhc3MgR3JhcGhpY3NDb250ZXh0OwotY2xhc3MgUmVmZXJl
bmNlRmlsdGVyT3BlcmF0aW9uOwotY2xhc3MgUmVuZGVyRWxlbWVudDsKIGNsYXNzIFJlbmRlckxh
eWVyOwotY2xhc3MgU291cmNlR3JhcGhpYzsKLQotZW51bSBGaWx0ZXJDb25zdW1lciB7IEZpbHRl
clByb3BlcnR5LCBGaWx0ZXJGdW5jdGlvbiB9OwogCiBjbGFzcyBGaWx0ZXJFZmZlY3RSZW5kZXJl
ckhlbHBlciB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgRmls
dGVyRWZmZWN0UmVuZGVyZXJIZWxwZXIoYm9vbCBoYXZlRmlsdGVyRWZmZWN0LCBHcmFwaGljc0Nv
bnRleHQmIHRhcmdldENvbnRleHQpOworICAgIEZpbHRlckVmZmVjdFJlbmRlcmVySGVscGVyKGJv
b2wgaGF2ZUZpbHRlckVmZmVjdCwgR3JhcGhpY3NDb250ZXh0JiB0YXJnZXRDb250ZXh0KQorICAg
ICAgICA6IG1fdGFyZ2V0Q29udGV4dCh0YXJnZXRDb250ZXh0KQorICAgICAgICAsIG1faGF2ZUZp
bHRlckVmZmVjdChoYXZlRmlsdGVyRWZmZWN0KQorICAgIHsKKyAgICB9CiAKICAgICBib29sIGhh
dmVGaWx0ZXJFZmZlY3QoKSBjb25zdCB7IHJldHVybiBtX2hhdmVGaWx0ZXJFZmZlY3Q7IH0KICAg
ICBib29sIGhhc1N0YXJ0ZWRGaWx0ZXJFZmZlY3QoKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0ZWRG
aWx0ZXJFZmZlY3Q7IH0KQEAgLTU5LDcgKzU0LDcgQEAgcHVibGljOgogICAgIGNvbnN0IExheW91
dFJlY3QmIHJlcGFpbnRSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZXBhaW50UmVjdDsgfQogCiBw
cml2YXRlOgotICAgIFJlbmRlckxheWVyKiBtX3JlbmRlckxheWVyIHsgbnVsbHB0ciB9OyAvLyBG
SVhNRTogdGhpcyBpcyBtYWlubHkgdXNlZCB0byBnZXQgdGhlIEZpbHRlckVmZmVjdFJlbmRlcmVy
LiBGaWx0ZXJFZmZlY3RSZW5kZXJlckhlbHBlciBzaG91bGQgYmUgd2VhbmVkIG9mZiBpdC4KKyAg
ICBSZW5kZXJMYXllciogbV9yZW5kZXJMYXllciB7IG51bGxwdHIgfTsgLy8gRklYTUU6IHRoaXMg
aXMgbWFpbmx5IHVzZWQgdG8gZ2V0IHRoZSBDU1NGaWx0ZXIuIEZpbHRlckVmZmVjdFJlbmRlcmVy
SGVscGVyIHNob3VsZCBiZSB3ZWFuZWQgb2ZmIGl0LgogICAgIExheW91dFBvaW50IG1fcGFpbnRP
ZmZzZXQ7CiAgICAgTGF5b3V0UmVjdCBtX3JlcGFpbnRSZWN0OwogICAgIGNvbnN0IEdyYXBoaWNz
Q29udGV4dCYgbV90YXJnZXRDb250ZXh0OwpAQCAtNjcsNzEgKzYyLDQgQEAgcHJpdmF0ZToKICAg
ICBib29sIG1fc3RhcnRlZEZpbHRlckVmZmVjdCB7IGZhbHNlIH07CiB9OwogCi0vLyBUaGlzIGlz
IHVzZWQgdG8gcmVuZGVyIGZpbHRlcnMgZm9yIHRoZSBDU1MgZmlsdGVyOiBwcm9wZXJ0eSwgYW5k
IHRoZSBmaWx0ZXIoKSBpbWFnZSBmdW5jdGlvbi4KLWNsYXNzIEZpbHRlckVmZmVjdFJlbmRlcmVy
IGZpbmFsIDogcHVibGljIEZpbHRlciB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1w
dWJsaWM6Ci0gICAgZnJpZW5kIGNsYXNzIEZpbHRlckVmZmVjdFJlbmRlcmVySGVscGVyOwotCi0g
ICAgc3RhdGljIFJlZjxGaWx0ZXJFZmZlY3RSZW5kZXJlcj4gY3JlYXRlKCk7Ci0KLSAgICB2b2lk
IHNldFNvdXJjZUltYWdlUmVjdChjb25zdCBGbG9hdFJlY3QmKTsKLSAgICB2b2lkIHNldEZpbHRl
clJlZ2lvbihjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lvbikgeyBtX2ZpbHRlclJlZ2lvbiA9
IGZpbHRlclJlZ2lvbjsgfQotCi0gICAgSW1hZ2VCdWZmZXIqIG91dHB1dCgpIGNvbnN0OwotCi0g
ICAgYm9vbCBidWlsZChSZW5kZXJFbGVtZW50JiwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYsIEZp
bHRlckNvbnN1bWVyKTsKLSAgICB2b2lkIGNsZWFySW50ZXJtZWRpYXRlUmVzdWx0cygpOwotICAg
IHZvaWQgYXBwbHkoKTsKLQotICAgIGJvb2wgaGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzKCkgY29u
c3QgeyByZXR1cm4gbV9oYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHM7IH0KLSAgICBib29sIGhhc0Zp
bHRlclRoYXRTaG91bGRCZVJlc3RyaWN0ZWRCeVNlY3VyaXR5T3JpZ2luKCkgY29uc3QgeyByZXR1
cm4gbV9oYXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1cml0eU9yaWdpbjsgfQot
Ci1wcml2YXRlOgotICAgIEZpbHRlckVmZmVjdFJlbmRlcmVyKCk7Ci0gICAgdmlydHVhbCB+Rmls
dGVyRWZmZWN0UmVuZGVyZXIoKTsKLQotICAgIEZsb2F0UmVjdCBzb3VyY2VJbWFnZVJlY3QoKSBj
b25zdCBmaW5hbCB7IHJldHVybiBtX3NvdXJjZURyYXdpbmdSZWdpb247IH0KLSAgICBGbG9hdFJl
Y3QgZmlsdGVyUmVnaW9uKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9maWx0ZXJSZWdpb247IH0K
LQotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkUmVmZXJlbmNlRmlsdGVyKFJlbmRlckVs
ZW1lbnQmLCBGaWx0ZXJFZmZlY3QmIHByZXZpb3VzRWZmZWN0LCBSZWZlcmVuY2VGaWx0ZXJPcGVy
YXRpb24mKTsKLQotICAgIHZvaWQgc2V0TWF4RWZmZWN0UmVjdHMoY29uc3QgRmxvYXRSZWN0Jik7
Ci0KLSAgICBHcmFwaGljc0NvbnRleHQqIGlucHV0Q29udGV4dCgpOwotCi0gICAgYm9vbCB1cGRh
dGVCYWNraW5nU3RvcmVSZWN0KGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVjdCk7Ci0gICAgdm9p
ZCBhbGxvY2F0ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOwot
Ci0gICAgSW50UmVjdCBvdXRwdXRSZWN0KCkgY29uc3Q7Ci0KLSAgICBMYXlvdXRSZWN0IGNvbXB1
dGVTb3VyY2VJbWFnZVJlY3RGb3JEaXJ0eVJlY3QoY29uc3QgTGF5b3V0UmVjdCYgZmlsdGVyQm94
UmVjdCwgY29uc3QgTGF5b3V0UmVjdCYgZGlydHlSZWN0KTsKLQotICAgIEZsb2F0UmVjdCBtX3Nv
dXJjZURyYXdpbmdSZWdpb247Ci0gICAgRmxvYXRSZWN0IG1fZmlsdGVyUmVnaW9uOwotCi0gICAg
VmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+PiBtX2VmZmVjdHM7Ci0gICAgUmVmPFNvdXJjZUdyYXBo
aWM+IG1fc291cmNlR3JhcGhpYzsKLQotICAgIEludFJlY3RFeHRlbnQgbV9vdXRzZXRzOwotCi0g
ICAgYm9vbCBtX2dyYXBoaWNzQnVmZmVyQXR0YWNoZWQgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9o
YXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9oYXNGaWx0ZXJU
aGF0U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1cml0eU9yaWdpbiB7IGZhbHNlIH07Ci19OwotCi1p
bmxpbmUgRmlsdGVyRWZmZWN0UmVuZGVyZXJIZWxwZXI6OkZpbHRlckVmZmVjdFJlbmRlcmVySGVs
cGVyKGJvb2wgaGF2ZUZpbHRlckVmZmVjdCwgR3JhcGhpY3NDb250ZXh0JiB0YXJnZXRDb250ZXh0
KQotICAgIDogbV90YXJnZXRDb250ZXh0KHRhcmdldENvbnRleHQpCi0gICAgLCBtX2hhdmVGaWx0
ZXJFZmZlY3QoaGF2ZUZpbHRlckVmZmVjdCkKLXsKLX0KLQotaW5saW5lIHZvaWQgRmlsdGVyRWZm
ZWN0UmVuZGVyZXI6OnNldFNvdXJjZUltYWdlUmVjdChjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUlt
YWdlUmVjdCkKLXsKLSAgICBtX3NvdXJjZURyYXdpbmdSZWdpb24gPSBzb3VyY2VJbWFnZVJlY3Q7
Ci0gICAgc2V0TWF4RWZmZWN0UmVjdHMoc291cmNlSW1hZ2VSZWN0KTsKLSAgICBzZXRGaWx0ZXJS
ZWdpb24oc291cmNlSW1hZ2VSZWN0KTsKLSAgICBtX2dyYXBoaWNzQnVmZmVyQXR0YWNoZWQgPSBm
YWxzZTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcAppbmRleCAzOWE5MDAzYmQ2ZmMzZTMxYzQ2ZGMwZDcz
M2M1ODRhZmM3YTlkNTUxLi4xOTQxNDI3NjEzZTIzYzFlMTU0MTQzMzYzMmU3YWViNDMxZmIzYzU0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcApAQCAt
MzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIkhpdFRlc3RMb2NhdGlvbi5oIgogI2luY2x1ZGUgIklu
bGluZVRleHRCb3guaCIKICNpbmNsdWRlICJMYXlvdXRSZXBhaW50ZXIuaCIKKyNpbmNsdWRlICJM
YXlvdXRTdGF0ZS5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJSZW5kZXJDb21i
aW5lVGV4dC5oIgogI2luY2x1ZGUgIlJlbmRlckZsZXhpYmxlQm94LmgiCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhbWUuY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckZyYW1lLmNwcAppbmRleCAxYzI5MTU1Y2RhMmNjNWRjZDRiZTM1Zjlh
MTlmNTg0YWQ3YTE3OTI4Li4zN2NjZDMwZWFjMDljNWM0NTliMTk2OWMyZDcwMWQ4M2EyY2NkMTk0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhbWUuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFtZS5jcHAKQEAgLTI2LDYgKzI2
LDcgQEAKIAogI2luY2x1ZGUgIkhUTUxGcmFtZUVsZW1lbnQuaCIKICNpbmNsdWRlICJSZW5kZXJG
cmFtZVNldC5oIgorI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAKaW5k
ZXggNmM2YWFmYjdlNDU4NmYxN2Q3ZjI3MDhlMjUyYTEzZmZlMjJhYmU4MS4uZTAyMGQ3NzlhNTFm
OWE2ZTVjMTBlMjM2YTZhNjY3NjQxOGEyZWZlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVySW1hZ2UuY3BwCkBAIC00NSw2ICs0NSw3IEBACiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgi
CiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIklubGluZUVsZW1lbnRCb3gu
aCIKKyNpbmNsdWRlICJMYXlvdXRTdGF0ZS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRl
ICJQYWludEluZm8uaCIKICNpbmNsdWRlICJSZW5kZXJGcmFnbWVudGVkRmxvdy5oIgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKaW5kZXggOTgxYWIzMGQ2OTQ3ZDZlZTk5
ZGEyY2E0NjdlZjJjNTFiZTlkNmZiYy4uOGEwNzRiNDIwNjZmMjFlMDU5ZWIxOWEyMzg2NDE1YTE3
ODhiODM1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCkBAIC00
Niw2ICs0Niw3IEBACiAKICNpbmNsdWRlICJCb3hTaGFwZS5oIgogI2luY2x1ZGUgIkNTU0FuaW1h
dGlvbkNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJDU1NGaWx0ZXIuaCIKICNpbmNsdWRlICJDU1NQ
cm9wZXJ0eU5hbWVzLmgiCiAjaW5jbHVkZSAiQ2hyb21lLmgiCiAjaW5jbHVkZSAiRGVidWdQYWdl
T3ZlcmxheXMuaCIKQEAgLTQ2MSwxNCArNDYyLDE0IEBAIGJvb2wgUmVuZGVyTGF5ZXI6OnJlcXVp
cmVzRnVsbExheWVySW1hZ2VGb3JGaWx0ZXJzKCkgY29uc3QKIHsKICAgICBpZiAoIXBhaW50c1dp
dGhGaWx0ZXJzKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBhdXRvKiByZW5kZXJlciA9
IGZpbHRlclJlbmRlcmVyKCk7Ci0gICAgcmV0dXJuIHJlbmRlcmVyICYmIHJlbmRlcmVyLT5oYXNG
aWx0ZXJUaGF0TW92ZXNQaXhlbHMoKTsKKyAgICBhdXRvKiBjc3NGaWx0ZXIgPSBmaWx0ZXIoKTsK
KyAgICByZXR1cm4gY3NzRmlsdGVyICYmIGNzc0ZpbHRlci0+aGFzRmlsdGVyVGhhdE1vdmVzUGl4
ZWxzKCk7CiB9CiAKLUZpbHRlckVmZmVjdFJlbmRlcmVyKiBSZW5kZXJMYXllcjo6ZmlsdGVyUmVu
ZGVyZXIoKSBjb25zdAorQ1NTRmlsdGVyKiBSZW5kZXJMYXllcjo6ZmlsdGVyKCkgY29uc3QKIHsK
ICAgICBhdXRvKiBmaWx0ZXJJbmZvID0gRmlsdGVySW5mbzo6Z2V0SWZFeGlzdHMoKnRoaXMpOwot
ICAgIHJldHVybiBmaWx0ZXJJbmZvID8gZmlsdGVySW5mby0+cmVuZGVyZXIoKSA6IG51bGxwdHI7
CisgICAgcmV0dXJuIGZpbHRlckluZm8gPyBmaWx0ZXJJbmZvLT5maWx0ZXIoKSA6IG51bGxwdHI7
CiB9CiAKIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJMYXlvdXQo
Y29uc3QgUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgT3B0aW9uU2V0PFVwZGF0ZUxheWVyUG9zaXRp
b25zRmxhZz4gZmxhZ3MpCkBAIC00MjA3LDcgKzQyMDgsNyBAQCBzdGQ6OnBhaXI8UmVuZGVyTGF5
ZXI6OkZpbHRlckluZm8qLCBzdGQ6OnVuaXF1ZV9wdHI8RmlsdGVyRWZmZWN0UmVuZGVyZXJIZWxw
ZXI+PgogICAgICAgICByZXR1cm4geyB9OwogCiAgICAgYXV0byogaW5mbyA9IEZpbHRlckluZm86
OmdldElmRXhpc3RzKCp0aGlzKTsKLSAgICBpZiAoIWluZm8gfHwgIWluZm8tPnJlbmRlcmVyKCkp
CisgICAgaWYgKCFpbmZvIHx8ICFpbmZvLT5maWx0ZXIoKSkKICAgICAgICAgcmV0dXJuIHsgfTsK
IAogICAgIGF1dG8gaGVscGVyID0gc3RkOjptYWtlX3VuaXF1ZTxGaWx0ZXJFZmZlY3RSZW5kZXJl
ckhlbHBlcj4odHJ1ZSwgY29udGV4dCk7CkBAIC00MjUzLDkgKzQyNTQsOSBAQCBzdGQ6OnVuaXF1
ZV9wdHI8RmlsdGVyRWZmZWN0UmVuZGVyZXJIZWxwZXI+IFJlbmRlckxheWVyOjpzZXR1cEZpbHRl
cnMoR3JhcGhpY3NDbwogICAgIC8vIElmIHRoZSBmaWx0ZXIgbmVlZHMgdGhlIGZ1bGwgc291cmNl
IGltYWdlLCB3ZSBuZWVkIHRvIGF2b2lkIHVzaW5nIHRoZSBjbGlwIHJlY3RhbmdsZXMuCiAgICAg
Ly8gT3RoZXJ3aXNlLCBpZiBmb3IgZXhhbXBsZSB0aGlzIGxheWVyIGhhcyBvdmVyZmxvdzpoaWRk
ZW4sIGEgZHJvcCBzaGFkb3cgd2lsbCBub3QgY29tcHV0ZSBjb3JyZWN0bHkuCiAgICAgLy8gTm90
ZSB0aGF0IHdlIHdpbGwgc3RpbGwgYXBwbHkgdGhlIGNsaXBwaW5nIG9uIHRoZSBmaW5hbCByZW5k
ZXJpbmcgb2YgdGhlIGZpbHRlci4KLSAgICBwYWludGluZ0luZm8uY2xpcFRvRGlydHlSZWN0ID0g
IWZpbHRlckluZm8ucmVuZGVyZXIoKS0+aGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzKCk7CisgICAg
cGFpbnRpbmdJbmZvLmNsaXBUb0RpcnR5UmVjdCA9ICFmaWx0ZXJJbmZvLmZpbHRlcigpLT5oYXNG
aWx0ZXJUaGF0TW92ZXNQaXhlbHMoKTsKIAotICAgIHBhaW50aW5nSW5mby5yZXF1aXJlU2VjdXJp
dHlPcmlnaW5BY2Nlc3NGb3JXaWRnZXRzID0gZmlsdGVySW5mby5yZW5kZXJlcigpLT5oYXNGaWx0
ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1cml0eU9yaWdpbigpOworICAgIHBhaW50aW5n
SW5mby5yZXF1aXJlU2VjdXJpdHlPcmlnaW5BY2Nlc3NGb3JXaWRnZXRzID0gZmlsdGVySW5mby5m
aWx0ZXIoKS0+aGFzRmlsdGVyVGhhdFNob3VsZEJlUmVzdHJpY3RlZEJ5U2VjdXJpdHlPcmlnaW4o
KTsKIAogICAgIHJldHVybiBXVEZNb3ZlKHBhaW50ZXIuc2Vjb25kKTsKIH0KQEAgLTY4ODIsNyAr
Njg4Myw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZU9yUmVtb3ZlRmlsdGVyRWZmZWN0UmVu
ZGVyZXIoKQogICAgICAgICAvLyBEb24ndCBkZWxldGUgdGhlIHdob2xlIGZpbHRlciBpbmZvIGhl
cmUsIGJlY2F1c2Ugd2UgbWlnaHQgdXNlIGl0CiAgICAgICAgIC8vIGZvciBsb2FkaW5nIFNWRyBy
ZWZlcmVuY2UgZmlsdGVyIGZpbGVzLgogICAgICAgICBpZiAoRmlsdGVySW5mbyogZmlsdGVySW5m
byA9IEZpbHRlckluZm86OmdldElmRXhpc3RzKCp0aGlzKSkKLSAgICAgICAgICAgIGZpbHRlcklu
Zm8tPnNldFJlbmRlcmVyKG51bGxwdHIpOworICAgICAgICAgICAgZmlsdGVySW5mby0+c2V0Rmls
dGVyKG51bGxwdHIpOwogCiAgICAgICAgIC8vIEVhcmx5LXJldHVybiBvbmx5IGlmIHdlICpkb24n
dCogaGF2ZSByZWZlcmVuY2UgZmlsdGVycy4KICAgICAgICAgLy8gRm9yIHJlZmVyZW5jZSBmaWx0
ZXJzLCB3ZSBzdGlsbCB3YW50IHRoZSBGaWx0ZXJFZmZlY3QgZ3JhcGggYnVpbHQKQEAgLTY4OTIs
MjMgKzY4OTMsMjMgQEAgdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlT3JSZW1vdmVGaWx0ZXJFZmZl
Y3RSZW5kZXJlcigpCiAgICAgfQogICAgIAogICAgIEZpbHRlckluZm8mIGZpbHRlckluZm8gPSBG
aWx0ZXJJbmZvOjpnZXQoKnRoaXMpOwotICAgIGlmICghZmlsdGVySW5mby5yZW5kZXJlcigpKSB7
Ci0gICAgICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3RSZW5kZXJlcj4gZmlsdGVyUmVuZGVyZXIgPSBG
aWx0ZXJFZmZlY3RSZW5kZXJlcjo6Y3JlYXRlKCk7Ci0gICAgICAgIGZpbHRlclJlbmRlcmVyLT5z
ZXRGaWx0ZXJTY2FsZShwYWdlKCkuZGV2aWNlU2NhbGVGYWN0b3IoKSk7Ci0gICAgICAgIGZpbHRl
clJlbmRlcmVyLT5zZXRSZW5kZXJpbmdNb2RlKHJlbmRlcmVyKCkuc2V0dGluZ3MoKS5hY2NlbGVy
YXRlZEZpbHRlcnNFbmFibGVkKCkgPyBBY2NlbGVyYXRlZCA6IFVuYWNjZWxlcmF0ZWQpOwotICAg
ICAgICBmaWx0ZXJJbmZvLnNldFJlbmRlcmVyKFdURk1vdmUoZmlsdGVyUmVuZGVyZXIpKTsKKyAg
ICBpZiAoIWZpbHRlckluZm8uZmlsdGVyKCkpIHsKKyAgICAgICAgYXV0byBjc3NGaWx0ZXIgPSBD
U1NGaWx0ZXI6OmNyZWF0ZSgpOworICAgICAgICBjc3NGaWx0ZXItPnNldEZpbHRlclNjYWxlKHBh
Z2UoKS5kZXZpY2VTY2FsZUZhY3RvcigpKTsKKyAgICAgICAgY3NzRmlsdGVyLT5zZXRSZW5kZXJp
bmdNb2RlKHJlbmRlcmVyKCkuc2V0dGluZ3MoKS5hY2NlbGVyYXRlZEZpbHRlcnNFbmFibGVkKCkg
PyBBY2NlbGVyYXRlZCA6IFVuYWNjZWxlcmF0ZWQpOworICAgICAgICBmaWx0ZXJJbmZvLnNldEZp
bHRlcihXVEZNb3ZlKGNzc0ZpbHRlcikpOwogICAgICAgICAKICAgICAgICAgLy8gV2UgY2FuIG9w
dGltaXplIGF3YXkgY29kZSBwYXRocyBpbiBvdGhlciBwbGFjZXMgaWYgd2Uga25vdyB0aGF0IHRo
ZXJlIGFyZSBubyBzb2Z0d2FyZSBmaWx0ZXJzLgogICAgICAgICByZW5kZXJlcigpLnZpZXcoKS5z
ZXRIYXNTb2Z0d2FyZUZpbHRlcnModHJ1ZSk7Ci0gICAgfSBlbHNlIGlmIChmaWx0ZXJJbmZvLnJl
bmRlcmVyKCktPmZpbHRlclNjYWxlKCkgIT0gcGFnZSgpLmRldmljZVNjYWxlRmFjdG9yKCkpIHsK
LSAgICAgICAgZmlsdGVySW5mby5yZW5kZXJlcigpLT5zZXRGaWx0ZXJTY2FsZShwYWdlKCkuZGV2
aWNlU2NhbGVGYWN0b3IoKSk7Ci0gICAgICAgIGZpbHRlckluZm8ucmVuZGVyZXIoKS0+Y2xlYXJJ
bnRlcm1lZGlhdGVSZXN1bHRzKCk7CisgICAgfSBlbHNlIGlmIChmaWx0ZXJJbmZvLmZpbHRlcigp
LT5maWx0ZXJTY2FsZSgpICE9IHBhZ2UoKS5kZXZpY2VTY2FsZUZhY3RvcigpKSB7CisgICAgICAg
IGZpbHRlckluZm8uZmlsdGVyKCktPnNldEZpbHRlclNjYWxlKHBhZ2UoKS5kZXZpY2VTY2FsZUZh
Y3RvcigpKTsKKyAgICAgICAgZmlsdGVySW5mby5maWx0ZXIoKS0+Y2xlYXJJbnRlcm1lZGlhdGVS
ZXN1bHRzKCk7CiAgICAgfQogCiAgICAgLy8gSWYgdGhlIGZpbHRlciBmYWlscyB0byBidWlsZCwg
cmVtb3ZlIGl0IGZyb20gdGhlIGxheWVyLiBJdCB3aWxsIHN0aWxsIGF0dGVtcHQgdG8KICAgICAv
LyBnbyB0aHJvdWdoIHJlZ3VsYXIgcHJvY2Vzc2luZyAoZS5nLiBjb21wb3NpdGluZyksIGJ1dCBu
ZXZlciBhcHBseSBhbnl0aGluZy4KLSAgICBpZiAoIWZpbHRlckluZm8ucmVuZGVyZXIoKS0+YnVp
bGQocmVuZGVyZXIoKSwgcmVuZGVyZXIoKS5zdHlsZSgpLmZpbHRlcigpLCBGaWx0ZXJQcm9wZXJ0
eSkpCi0gICAgICAgIGZpbHRlckluZm8uc2V0UmVuZGVyZXIobnVsbHB0cik7CisgICAgaWYgKCFm
aWx0ZXJJbmZvLmZpbHRlcigpLT5idWlsZChyZW5kZXJlcigpLCByZW5kZXJlcigpLnN0eWxlKCku
ZmlsdGVyKCksIEZpbHRlckNvbnN1bWVyOjpGaWx0ZXJQcm9wZXJ0eSkpCisgICAgICAgIGZpbHRl
ckluZm8uc2V0RmlsdGVyKG51bGxwdHIpOwogfQogCiB2b2lkIFJlbmRlckxheWVyOjpmaWx0ZXJO
ZWVkc1JlcGFpbnQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAppbmRleCBk
NmZlM2RmMWJjYjAzZjMzZjJmYmZjZjU2Y2EyZjRmNTNhMWIzZjM0Li44MjBhYjQ1Zjg4YmQyNTY0
NjZkNmM0YWYyZWI2MTI0NDhlOTg5ZTJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXIuaApAQCAtNjAsOSArNjAsOSBAQCBjbGFzcyBUZXh0U3RyZWFtOwogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKK2NsYXNzIENTU0ZpbHRlcjsKIGNsYXNzIENsaXBSZWN0czsKIGNsYXNzIENs
aXBSZWN0c0NhY2hlOwotY2xhc3MgRmlsdGVyRWZmZWN0UmVuZGVyZXI7CiBjbGFzcyBGaWx0ZXJF
ZmZlY3RSZW5kZXJlckhlbHBlcjsKIGNsYXNzIEZpbHRlck9wZXJhdGlvbnM7CiBjbGFzcyBIaXRU
ZXN0UmVxdWVzdDsKQEAgLTY3OSw3ICs2NzksNyBAQCBwdWJsaWM6CiAKICAgICBib29sIHBhaW50
c1dpdGhGaWx0ZXJzKCkgY29uc3Q7CiAgICAgYm9vbCByZXF1aXJlc0Z1bGxMYXllckltYWdlRm9y
RmlsdGVycygpIGNvbnN0OwotICAgIEZpbHRlckVmZmVjdFJlbmRlcmVyKiBmaWx0ZXJSZW5kZXJl
cigpIGNvbnN0OworICAgIENTU0ZpbHRlciogZmlsdGVyKCkgY29uc3Q7CiAKICNpZiAhQVNTRVJU
X0RJU0FCTEVECiAgICAgYm9vbCBsYXllckxpc3RNdXRhdGlvbkFsbG93ZWQoKSBjb25zdCB7IHJl
dHVybiBtX2xheWVyTGlzdE11dGF0aW9uQWxsb3dlZDsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAppbmRleCA4YmI1OWVhM2YyOWIwYzNmMjg3
NDBjYjhmYmM4YTk2NzE2YWRlZjczLi4wYWEwMGRkMTg0ZTk1MTlkNWEwZjExYzNhZDFkM2JmZjc3
MDhiNjAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJC
YWNraW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNr
aW5nLmNwcApAQCAtMzQsNyArMzQsNiBAQAogI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCiAjaW5j
bHVkZSAiQ2hyb21lLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRUaW1lbGluZS5oIgotI2luY2x1ZGUg
IkZpbHRlckVmZmVjdFJlbmRlcmVyLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJG
cmFtZVZpZXcuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlckluZm8uY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVySW5mby5jcHAKaW5kZXggNzc0NmJk
NGFlMDhiMzgyNmE1MTIxOWRiNzZhZGE3MjcwMjY0NzA2NC4uYmExNjU4MGZjZTYzNzkwNjNiMGU0
MWJlYTEzOTlhYzBkZWRhZGM4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyRmlsdGVySW5mby5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyRmlsdGVySW5mby5jcHAKQEAgLTg0LDkgKzg0LDkgQEAgUmVuZGVyTGF5ZXI6
OkZpbHRlckluZm86On5GaWx0ZXJJbmZvKCkKICAgICByZW1vdmVSZWZlcmVuY2VGaWx0ZXJDbGll
bnRzKCk7CiB9CiAKLXZvaWQgUmVuZGVyTGF5ZXI6OkZpbHRlckluZm86OnNldFJlbmRlcmVyKFJl
ZlB0cjxGaWx0ZXJFZmZlY3RSZW5kZXJlcj4mJiByZW5kZXJlcikKK3ZvaWQgUmVuZGVyTGF5ZXI6
OkZpbHRlckluZm86OnNldEZpbHRlcihSZWZQdHI8Q1NTRmlsdGVyPiYmIGZpbHRlcikKIHsKLSAg
ICBtX3JlbmRlcmVyID0gcmVuZGVyZXI7CisgICAgbV9maWx0ZXIgPSBmaWx0ZXI7CiB9CiAKIHZv
aWQgUmVuZGVyTGF5ZXI6OkZpbHRlckluZm86Om5vdGlmeUZpbmlzaGVkKENhY2hlZFJlc291cmNl
JikKQEAgLTEwOCwxNCArMTA4LDE0IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OkZpbHRlckluZm86OnVw
ZGF0ZVJlZmVyZW5jZUZpbHRlckNsaWVudHMoY29uc3QgRmlsdGVyT3BlcmF0aW9uCiAgICAgICAg
ICAgICBtX2V4dGVybmFsU1ZHUmVmZXJlbmNlcy5hcHBlbmQoY2FjaGVkU1ZHRG9jdW1lbnQpOwog
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gUmVmZXJlbmNlIGlzIGludGVybmFsOyBh
ZGQgbGF5ZXIgYXMgYSBjbGllbnQgc28gd2UgY2FuIHRyaWdnZXIgZmlsdGVyIHJlcGFpbnQgb24g
U1ZHIGF0dHJpYnV0ZSBjaGFuZ2UuCi0gICAgICAgICAgICBhdXRvKiBmaWx0ZXIgPSBtX2xheWVy
LnJlbmRlcmVyKCkuZG9jdW1lbnQoKS5nZXRFbGVtZW50QnlJZChyZWZlcmVuY2VPcGVyYXRpb24u
ZnJhZ21lbnQoKSk7Ci0gICAgICAgICAgICBpZiAoIWZpbHRlcikKKyAgICAgICAgICAgIGF1dG8q
IGZpbHRlckVsZW1lbnQgPSBtX2xheWVyLnJlbmRlcmVyKCkuZG9jdW1lbnQoKS5nZXRFbGVtZW50
QnlJZChyZWZlcmVuY2VPcGVyYXRpb24uZnJhZ21lbnQoKSk7CisgICAgICAgICAgICBpZiAoIWZp
bHRlckVsZW1lbnQpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBhdXRv
KiByZW5kZXJlciA9IGZpbHRlci0+cmVuZGVyZXIoKTsKKyAgICAgICAgICAgIGF1dG8qIHJlbmRl
cmVyID0gZmlsdGVyRWxlbWVudC0+cmVuZGVyZXIoKTsKICAgICAgICAgICAgIGlmICghaXM8UmVu
ZGVyU1ZHUmVzb3VyY2VGaWx0ZXI+KHJlbmRlcmVyKSkKICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgIGRvd25jYXN0PFJlbmRlclNWR1Jlc291cmNlRmlsdGVyPigqcmVuZGVy
ZXIpLmFkZENsaWVudFJlbmRlckxheWVyKCZtX2xheWVyKTsKLSAgICAgICAgICAgIG1faW50ZXJu
YWxTVkdSZWZlcmVuY2VzLmFwcGVuZChmaWx0ZXIpOworICAgICAgICAgICAgbV9pbnRlcm5hbFNW
R1JlZmVyZW5jZXMuYXBwZW5kKGZpbHRlckVsZW1lbnQpOwogICAgICAgICB9CiAgICAgfQogfQpA
QCAtMTI0LDEwICsxMjQsMTEgQEAgdm9pZCBSZW5kZXJMYXllcjo6RmlsdGVySW5mbzo6cmVtb3Zl
UmVmZXJlbmNlRmlsdGVyQ2xpZW50cygpCiB7CiAgICAgZm9yIChhdXRvJiByZXNvdXJjZUhhbmRs
ZSA6IG1fZXh0ZXJuYWxTVkdSZWZlcmVuY2VzKQogICAgICAgICByZXNvdXJjZUhhbmRsZS0+cmVt
b3ZlQ2xpZW50KCp0aGlzKTsKKwogICAgIG1fZXh0ZXJuYWxTVkdSZWZlcmVuY2VzLmNsZWFyKCk7
CiAKLSAgICBmb3IgKGF1dG8mIGZpbHRlciA6IG1faW50ZXJuYWxTVkdSZWZlcmVuY2VzKSB7Ci0g
ICAgICAgIGlmIChhdXRvKiByZW5kZXJlciA9IGZpbHRlci0+cmVuZGVyZXIoKSkKKyAgICBmb3Ig
KGF1dG8mIGZpbHRlckVsZW1lbnQgOiBtX2ludGVybmFsU1ZHUmVmZXJlbmNlcykgeworICAgICAg
ICBpZiAoYXV0byogcmVuZGVyZXIgPSBmaWx0ZXJFbGVtZW50LT5yZW5kZXJlcigpKQogICAgICAg
ICAgICAgZG93bmNhc3Q8UmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXI+KCpyZW5kZXJlcikucmVt
b3ZlQ2xpZW50UmVuZGVyTGF5ZXIoJm1fbGF5ZXIpOwogICAgIH0KICAgICBtX2ludGVybmFsU1ZH
UmVmZXJlbmNlcy5jbGVhcigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyRmlsdGVySW5mby5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyRmlsdGVySW5mby5oCmluZGV4IGQwYWNkM2NmNWZiYjEyYTMxMjU5M2MwOWNjMWI0YWM4
MDcwMjU4Y2YuLjQ3ODJjNDE3MzgyMTAyNTQwNWNmZjdjYTM5ZTAwMmE4MzUxMjU3ZTQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlckluZm8uaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJJbmZvLmgKQEAg
LTU1LDggKzU1LDggQEAgcHVibGljOgogICAgIHZvaWQgZXhwYW5kRGlydHlTb3VyY2VSZWN0KGNv
bnN0IExheW91dFJlY3QmIHJlY3QpIHsgbV9kaXJ0eVNvdXJjZVJlY3QudW5pdGUocmVjdCk7IH0K
ICAgICB2b2lkIHJlc2V0RGlydHlTb3VyY2VSZWN0KCkgeyBtX2RpcnR5U291cmNlUmVjdCA9IExh
eW91dFJlY3QoKTsgfQogCi0gICAgRmlsdGVyRWZmZWN0UmVuZGVyZXIqIHJlbmRlcmVyKCkgY29u
c3QgeyByZXR1cm4gbV9yZW5kZXJlci5nZXQoKTsgfQotICAgIHZvaWQgc2V0UmVuZGVyZXIoUmVm
UHRyPEZpbHRlckVmZmVjdFJlbmRlcmVyPiYmKTsKKyAgICBDU1NGaWx0ZXIqIGZpbHRlcigpIGNv
bnN0IHsgcmV0dXJuIG1fZmlsdGVyLmdldCgpOyB9CisgICAgdm9pZCBzZXRGaWx0ZXIoUmVmUHRy
PENTU0ZpbHRlcj4mJik7CiAKICAgICB2b2lkIHVwZGF0ZVJlZmVyZW5jZUZpbHRlckNsaWVudHMo
Y29uc3QgRmlsdGVyT3BlcmF0aW9ucyYpOwogICAgIHZvaWQgcmVtb3ZlUmVmZXJlbmNlRmlsdGVy
Q2xpZW50cygpOwpAQCAtNjgsNyArNjgsNyBAQCBwcml2YXRlOgogCiAgICAgUmVuZGVyTGF5ZXIm
IG1fbGF5ZXI7CiAKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0UmVuZGVyZXI+IG1fcmVuZGVyZXI7
CisgICAgUmVmUHRyPENTU0ZpbHRlcj4gbV9maWx0ZXI7CiAgICAgTGF5b3V0UmVjdCBtX2RpcnR5
U291cmNlUmVjdDsKIAogICAgIFZlY3RvcjxSZWZQdHI8RWxlbWVudD4+IG1faW50ZXJuYWxTVkdS
ZWZlcmVuY2VzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5n
L1JlbmRlclRyZWVCdWlsZGVyQmxvY2suY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3Vw
ZGF0aW5nL1JlbmRlclRyZWVCdWlsZGVyQmxvY2suY3BwCmluZGV4IDgzMzU3MmYyMTA0YmExYmQ5
OGE4YzM0MGViYjRjOTNhMDE1ODY4MTAuLmU1Y2ExNGVkMzA2NWZkMWI1NjQwNzdhZTgzMDRmNDQ3
NDk4OWVkMWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy91cGRhdGluZy9S
ZW5kZXJUcmVlQnVpbGRlckJsb2NrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
dXBkYXRpbmcvUmVuZGVyVHJlZUJ1aWxkZXJCbG9jay5jcHAKQEAgLTMzLDYgKzMzLDcgQEAKICNp
bmNsdWRlICJSZW5kZXJSdWJ5LmgiCiAjaW5jbHVkZSAiUmVuZGVyUnVieVJ1bi5oIgogI2luY2x1
ZGUgIlJlbmRlclRleHRDb250cm9sLmgiCisjaW5jbHVkZSAiUmVuZGVyVHJlZUJ1aWxkZXJNdWx0
aUNvbHVtbi5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>348722</attachid>
            <date>2018-09-01 17:16:27 -0700</date>
            <delta_ts>2018-09-01 20:04:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-189223-20180901171626.patch</filename>
            <type>text/plain</type>
            <size>66747</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM1NTc5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzBmMjU1ZWU2NjJkZGRm
NDk3YTFmMjY1NzY1ZWMzZjkzODhjOWY2NC4uMWFmYTk0YTA2YWNkMjJmZTE5NGEwZDVkNjhhM2Nh
OGVjYmY5MTMzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg4IEBACisyMDE4LTA5LTAxICBTaW1v
biBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgorCisgICAgICAgIFJlbmFtZSBGaWx0
ZXJFZmZlY3RSZW5kZXJlciB0byBDU1NGaWx0ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE4OTIyMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEZpbHRlciB3YXMgc3ViY2xhc3NlZCBieSBTVkdGaWx0ZXIg
Zm9yIFNWRywgYW5kIEZpbHRlckVmZmVjdFJlbmRlcmVyIGZvciBDU1MsCisgICAgICAgIHdoaWNo
IHdhcyB2ZXJ5IGNvbmZ1c2luZywgZXNwZWNpYWxseSB3aGVuIHRoZSBjb2RlIHVzZXMgcmVuZGVy
ZXIoKSB0byBnZXQgaXQuCisgICAgICAgIAorICAgICAgICBSZW5hbWUgRmlsdGVyRWZmZWN0UmVu
ZGVyZXIgdG8gQ1NTRmlsdGVyLCBhbmQgYWNjZXNzIHZpYSBmaWx0ZXIoKS4KKyAgICAgICAgCisg
ICAgICAgIEZ1dHVyZSBjbGVhbnVwIHdpbGwgZGVhbCB3aXRoIEZpbHRlckVmZmVjdFJlbmRlcmVy
SGVscGVyLgorCisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGNzcy9DU1NGaWx0ZXJJbWFnZVZhbHVl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlckltYWdlVmFsdWU6OmltYWdlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0Zm9ybUNBRmlsdGVyc0NvY29h
Lm1tOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmg6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXI6OmlzQ1NTRmlsdGVyIGNvbnN0KToKKyAgICAgICAgKiByZW5k
ZXJpbmcvQ1NTRmlsdGVyLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0ZpbHRlckVmZmVjdFJlbmRlcmVyLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OmVuZE1hdHJpeFJv
dyk6CisgICAgICAgIChXZWJDb3JlOjpsYXN0TWF0cml4Um93KToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU0ZpbHRlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6Q1NTRmls
dGVyKToKKyAgICAgICAgKFdlYkNvcmU6Om1fc291cmNlR3JhcGhpYyk6CisgICAgICAgIChXZWJD
b3JlOjpDU1NGaWx0ZXI6OmlucHV0Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0
ZXI6OmJ1aWxkUmVmZXJlbmNlRmlsdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6
YnVpbGQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjp1cGRhdGVCYWNraW5nU3RvcmVS
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6YWxsb2NhdGVCYWNraW5nU3RvcmVJ
Zk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmNsZWFySW50ZXJtZWRpYXRl
UmVzdWx0cyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmFwcGx5KToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU0ZpbHRlcjo6Y29tcHV0ZVNvdXJjZUltYWdlUmVjdEZvckRpcnR5UmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6Om91dHB1dCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NGaWx0ZXI6OnNldFNvdXJjZUltYWdlUmVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NGaWx0ZXI6OnNldE1heEVmZmVjdFJlY3RzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0Zp
bHRlcjo6b3V0cHV0UmVjdCBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL0NTU0ZpbHRlci5o
OiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmlsdGVyRWZmZWN0UmVuZGVy
ZXIuaC4KKyAgICAgICAgKGlzVHlwZSk6CisgICAgICAgICogcmVuZGVyaW5nL0ZpbHRlckVmZmVj
dFJlbmRlcmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdFJlbmRlcmVySGVs
cGVyOjpwcmVwYXJlRmlsdGVyRWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dFJlbmRlcmVySGVscGVyOjpmaWx0ZXJDb250ZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlckVmZmVjdFJlbmRlcmVySGVscGVyOjpiZWdpbkZpbHRlckVmZmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3RSZW5kZXJlckhlbHBlcjo6YXBwbHlGaWx0ZXJFZmZlY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6ZW5kTWF0cml4Um93KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6Omxhc3RNYXRyaXhSb3cpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVy
RWZmZWN0UmVuZGVyZXI6OkZpbHRlckVmZmVjdFJlbmRlcmVyKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6Om1fc291cmNlR3JhcGhpYyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJFZmZlY3RSZW5kZXJlcjo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlckVmZmVjdFJlbmRlcmVyOjppbnB1dENvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyRWZmZWN0UmVuZGVyZXI6OmJ1aWxkUmVmZXJlbmNlRmlsdGVyKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdFJlbmRlcmVyOjpidWlsZCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3RSZW5kZXJlcjo6dXBkYXRlQmFj
a2luZ1N0b3JlUmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3RS
ZW5kZXJlcjo6YWxsb2NhdGVCYWNraW5nU3RvcmVJZk5lZWRlZCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3RSZW5kZXJlcjo6Y2xlYXJJbnRlcm1lZGlhdGVSZXN1bHRz
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdFJlbmRlcmVyOjphcHBs
eSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3RSZW5kZXJlcjo6Y29t
cHV0ZVNvdXJjZUltYWdlUmVjdEZvckRpcnR5UmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXJFZmZlY3RSZW5kZXJlcjo6b3V0cHV0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdFJlbmRlcmVyOjpzZXRNYXhFZmZlY3RSZWN0cyk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3RSZW5kZXJlcjo6b3V0cHV0UmVj
dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL0ZpbHRlckVmZmVjdFJlbmRl
cmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3RSZW5kZXJlckhlbHBlcjo6Rmls
dGVyRWZmZWN0UmVuZGVyZXJIZWxwZXIpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0
UmVuZGVyZXI6OnNldFNvdXJjZUltYWdlUmVjdCk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckJsb2NrRmxvdy5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZyYW1l
LmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6
cmVxdWlyZXNGdWxsTGF5ZXJJbWFnZUZvckZpbHRlcnMgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXI6OmZpbHRlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllcjo6ZmlsdGVyUGFpbnRlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
cjo6c2V0dXBGaWx0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpjYWxjdWxh
dGVDbGlwUmVjdHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmZpbHRl
clJlbmRlcmVyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5
ZXIuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcDoKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJJbmZvLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyOjpGaWx0ZXJJbmZvOjpzZXRGaWx0ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXI6OkZpbHRlckluZm86OnVwZGF0ZVJlZmVyZW5jZUZpbHRlckNsaWVudHMp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OkZpbHRlckluZm86OnJlbW92ZVJlZmVy
ZW5jZUZpbHRlckNsaWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OkZpbHRl
ckluZm86OnNldFJlbmRlcmVyKTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
TGF5ZXJGaWx0ZXJJbmZvLmg6CisgICAgICAgICogcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRy
ZWVCdWlsZGVyQmxvY2suY3BwOgorCiAyMDE4LTA5LTAxICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5m
cmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBzb21lIG1vcmUgZmlsdGVyIGxvZ2dpbmcK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUv
U291cmNlcy50eHQKaW5kZXggNTkxNTczNmM1MTY4NDkyYzUwMGI4YWU1YzIzZjkwYWI0ODg1NDU2
MC4uMGRjYWE4MzFlN2ZkNzYzNjMyZWZhYTUxMDI2YTRlZDYwZjIxY2IwNyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50
eHQKQEAgLTE4MzcsNiArMTgzNyw3IEBAIHJlbmRlcmluZy9BdXRvVGFibGVMYXlvdXQuY3BwCiBy
ZW5kZXJpbmcvQmlkaVJ1bi5jcHAKIHJlbmRlcmluZy9Cb3JkZXJFZGdlLmNwcAogcmVuZGVyaW5n
L0JyZWFrTGluZXMuY3BwCityZW5kZXJpbmcvQ1NTRmlsdGVyLmNwcAogcmVuZGVyaW5nL0NsaXBS
ZWN0LmNwcAogcmVuZGVyaW5nL0NvdW50ZXJOb2RlLmNwcAogcmVuZGVyaW5nL0VsbGlwc2lzQm94
LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCmluZGV4IDcxY2VjOGNiMTE0MGY1MzhlOTE0YjA1YmFkYWM2NmRkNzU0ZWNjNWUuLjFhZTY4
MjdhZGNjMDBjYTBmYjA0MTQzNjQ5MDk5OWMwNTRjZGI2MTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTU2MDksNiArNTYwOSw4
IEBACiAJCTBGNDk2NkE3MURCNDBDNDMwMEEyNzRCQiAvKiBKU0RPTVBvaW50SW5pdC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0RPTVBvaW50SW5pdC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjQ5NjZBODFEQjQwQzQzMDBBMjc0QkIgLyogSlNET01Qb2lu
dFJlYWRPbmx5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRE9N
UG9pbnRSZWFkT25seS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDk2NkE5
MURCNDBDNDMwMEEyNzRCQiAvKiBKU0RPTVBvaW50UmVhZE9ubHkuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSlNET01Qb2ludFJlYWRPbmx5Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGNTNGQjgxMjEzQjFCQjgwMEM0MEQzNCAvKiBDU1NGaWx0ZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTRmlsdGVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY1M0ZCODMyMTNCMUJCODAwQzQwRDM0IC8qIENTU0Zp
bHRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDU1NGaWx0ZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1NERDRTMxODgxMDUxRDAwM0VFREJCIC8qIFRl
eHRBdXRvU2l6aW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRl
eHRBdXRvU2l6aW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1NERDRTQx
ODgxMDUxRDAwM0VFREJCIC8qIFRleHRBdXRvU2l6aW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFRleHRBdXRvU2l6aW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGNTRERDA1MTg4MUQ1RjUwMDNFRURCQiAvKiBUb3VjaC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBUb3VjaC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MjU3MzcsNiArMjU3MzksOCBAQAogCQkJCUJDREQ0NTREMTIzNkM5NUMwMDlBNzk4NSAvKiBDb2x1
bW5JbmZvLmggKi8sCiAJCQkJOTM5MkYxNEYwQUQxODYyMzAwNjkxQkQ0IC8qIENvdW50ZXJOb2Rl
LmNwcCAqLywKIAkJCQk5MzkyRjE0QjBBRDE4NjFCMDA2OTFCRDQgLyogQ291bnRlck5vZGUuaCAq
LywKKwkJCQkwRjUzRkI4MTIxM0IxQkI4MDBDNDBEMzQgLyogQ1NTRmlsdGVyLmNwcCAqLywKKwkJ
CQkwRjUzRkI4MzIxM0IxQkI4MDBDNDBEMzQgLyogQ1NTRmlsdGVyLmggKi8sCiAJCQkJQThDRkY2
Q0EwQTE1NjFDRDAwMEE0MjM0IC8qIEVsbGlwc2lzQm94LmNwcCAqLywKIAkJCQlBOENGRjZCRDBB
MTU2MTE4MDAwQTQyMzQgLyogRWxsaXBzaXNCb3guaCAqLywKIAkJCQkzMTMxM0Y2MzE0NDNCMzVF
MDA2RTJBOTAgLyogRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwICovLApAQCAtMzE0MTIsNiArMzE0
MTYsNyBAQAogCQkJCTVDREQ4MzY0MUU0MzI1QTAwMDYyMUU5MiAvKiBMaWJXZWJSVENEYXRhQ2hh
bm5lbEhhbmRsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDE3NjEyQUYxRTNBOTk0MDAwQzNE
ODFEIC8qIExpYldlYlJUQ01lZGlhRW5kcG9pbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDE3
NjEyQjExRTNBOTk0MDAwQzNEODFEIC8qIExpYldlYlJUQ1BlZXJDb25uZWN0aW9uQmFja2VuZC5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQk0MUQyOEQwRDIxMzlFMDU4MDBGNDIwNkYgLyogTGliV2Vi
UlRDU3RhdHNDb2xsZWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTc1OUU5M0UxNEVGMUNG
ODAwMjZBMkREIC8qIExvYWRhYmxlVGV4dFRyYWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQ0
NTc3NUVBMjA0NzMwM0MwMDhEQ0U1RCAvKiBMb2NhbERlZmF1bHRTeXN0ZW1BcHBlYXJhbmNlLm1t
IGluIFNvdXJjZXMgKi8sCiAJCQkJRkFCRTcyRkUxMDU5QzIxMTAwRDk5OUREIC8qIE1hdGhNTE5h
bWVzLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMzE3NzksNyArMzE3ODQsNiBAQAogCQkJCURFQ0E3
RTY1MUY5RUJEODMwMEUzQjY2MSAvKiBVbmlmaWVkU291cmNlMjM0LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCURFQ0E3RTY2MUY5RUJEODMwMEUzQjY2MSAvKiBVbmlmaWVkU291cmNlMjM1LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCURFQ0E3RTY3MUY5RUJEODMwMEUzQjY2MSAvKiBVbmlmaWVkU291
cmNlMjM2LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTQxRDI4RDBEMjEzOUUwNTgwMEY0MjA2RiAv
KiBMaWJXZWJSVENTdGF0c0NvbGxlY3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlERUNBN0U2
ODFGOUVCRDgzMDBFM0I2NjEgLyogVW5pZmllZFNvdXJjZTIzNy5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlERUNBN0U2OTFGOUVCRDgzMDBFM0I2NjEgLyogVW5pZmllZFNvdXJjZTIzOC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlERUNBN0U2QTFGOUVCRDgzMDBFM0I2NjEgLyogVW5pZmllZFNvdXJj
ZTIzOS5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NGaWx0ZXJJbWFnZVZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGaWx0ZXJJbWFn
ZVZhbHVlLmNwcAppbmRleCA2YWNmNzQ0ZWFiNGE5ZWNlYWFiNmM2YzcyZWY5Y2U5NThiMDJlNTE1
Li42ZjI1M2QxM2IzMzEzMzkyMjFlMTUyYmJmYjY4OGY0YjljZDg0MWFlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvY3NzL0NTU0ZpbHRlckltYWdlVmFsdWUuY3BwCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ1NTRmlsdGVySW1hZ2VWYWx1ZS5oIgogCisjaW5j
bHVkZSAiQ1NTRmlsdGVyLmgiCiAjaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKICNpbmNsdWRlICJD
YWNoZWRSZXNvdXJjZUxvYWRlci5oIgogI2luY2x1ZGUgIkZpbHRlckVmZmVjdFJlbmRlcmVyLmgi
CkBAIC0xMzEsMTUgKzEzMiwxNSBAQCBSZWZQdHI8SW1hZ2U+IENTU0ZpbHRlckltYWdlVmFsdWU6
OmltYWdlKFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyLCBjb25zdCBGbG9hdFNpegogICAgIGF1dG8g
aW1hZ2VSZWN0ID0gRmxvYXRSZWN0IHsgeyB9LCBzaXplIH07CiAgICAgdGV4dHVyZS0+Y29udGV4
dCgpLmRyYXdJbWFnZSgqaW1hZ2UsIGltYWdlUmVjdCk7CiAKLSAgICBhdXRvIGZpbHRlclJlbmRl
cmVyID0gRmlsdGVyRWZmZWN0UmVuZGVyZXI6OmNyZWF0ZSgpOwotICAgIGZpbHRlclJlbmRlcmVy
LT5zZXRTb3VyY2VJbWFnZShXVEZNb3ZlKHRleHR1cmUpKTsKLSAgICBmaWx0ZXJSZW5kZXJlci0+
c2V0U291cmNlSW1hZ2VSZWN0KGltYWdlUmVjdCk7Ci0gICAgZmlsdGVyUmVuZGVyZXItPnNldEZp
bHRlclJlZ2lvbihpbWFnZVJlY3QpOwotICAgIGlmICghZmlsdGVyUmVuZGVyZXItPmJ1aWxkKCpy
ZW5kZXJlciwgbV9maWx0ZXJPcGVyYXRpb25zLCBGaWx0ZXJGdW5jdGlvbikpCisgICAgYXV0byBj
c3NGaWx0ZXIgPSBDU1NGaWx0ZXI6OmNyZWF0ZSgpOworICAgIGNzc0ZpbHRlci0+c2V0U291cmNl
SW1hZ2UoV1RGTW92ZSh0ZXh0dXJlKSk7CisgICAgY3NzRmlsdGVyLT5zZXRTb3VyY2VJbWFnZVJl
Y3QoaW1hZ2VSZWN0KTsKKyAgICBjc3NGaWx0ZXItPnNldEZpbHRlclJlZ2lvbihpbWFnZVJlY3Qp
OworICAgIGlmICghY3NzRmlsdGVyLT5idWlsZCgqcmVuZGVyZXIsIG1fZmlsdGVyT3BlcmF0aW9u
cywgRmlsdGVyQ29uc3VtZXI6OkZpbHRlckZ1bmN0aW9uKSkKICAgICAgICAgcmV0dXJuICZJbWFn
ZTo6bnVsbEltYWdlKCk7Ci0gICAgZmlsdGVyUmVuZGVyZXItPmFwcGx5KCk7CisgICAgY3NzRmls
dGVyLT5hcHBseSgpOwogCi0gICAgcmV0dXJuIGZpbHRlclJlbmRlcmVyLT5vdXRwdXQoKS0+Y29w
eUltYWdlKCk7CisgICAgcmV0dXJuIGNzc0ZpbHRlci0+b3V0cHV0KCktPmNvcHlJbWFnZSgpOwog
fQogCiB2b2lkIENTU0ZpbHRlckltYWdlVmFsdWU6OmZpbHRlckltYWdlQ2hhbmdlZChjb25zdCBJ
bnRSZWN0JikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
L2NvY29hL1BsYXRmb3JtQ0FGaWx0ZXJzQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0Zm9ybUNBRmlsdGVyc0NvY29hLm1tCmluZGV4IDBiNWY2
ZmJlMGI2MGU0ZjgwM2RmZjEyYTZjNzk0M2U1NTQ3OGJmM2QuLjNhYjM5ZGZmZWE1OWMzOTMzOTQ1
MzdmYjkxYTAyNmQyMzQ2OTAzOTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FGaWx0ZXJzQ29jb2EubW0KKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUZpbHRlcnNDb2Nv
YS5tbQpAQCAtMzUsNyArMzUsNyBAQAogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotLy8g
RklYTUU6IFNob3VsZCBzaGFyZSB0aGVzZSB2YWx1ZXMgd2l0aCBGaWx0ZXJFZmZlY3RSZW5kZXJl
cjo6YnVpbGQoKSAoaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc2MDA4
KS4KKy8vIEZJWE1FOiBTaG91bGQgc2hhcmUgdGhlc2UgdmFsdWVzIHdpdGggQ1NTRmlsdGVyOjpi
dWlsZCgpIChodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzYwMDgpLgog
c3RhdGljIGNvbnN0IGRvdWJsZSBzZXBpYUZ1bGxDb25zdGFudHNbM11bM10gPSB7CiAgICAgeyAw
LjM5MywgMC43NjksIDAuMTg5IH0sCiAgICAgeyAwLjM0OSwgMC42ODYsIDAuMTY4IH0sCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaAppbmRl
eCA1MDFhZmQwN2ZhMDdmNmE3ODg3M2EzNzNiNzc0N2JhOGI4MzBjMjEzLi4zYmVkZWE3MDViNzZk
OWJmMWExYzUxOWNiMmU0Mzc1YThhZTY4MjgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmgKQEAgLTQ4LDYgKzQ4LDcgQEAgcHVibGlj
OgogICAgIHZvaWQgc2V0UmVuZGVyaW5nTW9kZShSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUp
IHsgbV9yZW5kZXJpbmdNb2RlID0gcmVuZGVyaW5nTW9kZTsgfQogCiAgICAgdmlydHVhbCBib29s
IGlzU1ZHRmlsdGVyKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wg
aXNDU1NGaWx0ZXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgdmlydHVhbCBGbG9h
dFNpemUgc2NhbGVkQnlGaWx0ZXJSZXNvbHV0aW9uKEZsb2F0U2l6ZSBzaXplKSBjb25zdCB7IHJl
dHVybiBzaXplICogbV9maWx0ZXJSZXNvbHV0aW9uOyB9CiAgICAgCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9DU1NGaWx0ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg1Yjg0NWFlNGFlNTgxYzFhYzcxMjNkMDZl
MDljNzc5Y2QyN2EwZTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvQ1NTRmlsdGVyLmNwcApAQCAtMCwwICsxLDM5OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkNTU0ZpbHRlci5oIgorCisjaW5jbHVkZSAiQ2FjaGVkU1ZHRG9jdW1lbnQuaCIKKyNpbmNs
dWRlICJDYWNoZWRTVkdEb2N1bWVudFJlZmVyZW5jZS5oIgorI2luY2x1ZGUgIkVsZW1lbnRJdGVy
YXRvci5oIgorI2luY2x1ZGUgIkZFQ29sb3JNYXRyaXguaCIKKyNpbmNsdWRlICJGRUNvbXBvbmVu
dFRyYW5zZmVyLmgiCisjaW5jbHVkZSAiRkVEcm9wU2hhZG93LmgiCisjaW5jbHVkZSAiRkVHYXVz
c2lhbkJsdXIuaCIKKyNpbmNsdWRlICJGRU1lcmdlLmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgor
I2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5jbHVkZSAiU1ZHRWxlbWVudC5oIgorI2luY2x1
ZGUgIlNWR0ZpbHRlckJ1aWxkZXIuaCIKKyNpbmNsdWRlICJTVkdGaWx0ZXJQcmltaXRpdmVTdGFu
ZGFyZEF0dHJpYnV0ZXMuaCIKKyNpbmNsdWRlICJTb3VyY2VHcmFwaGljLmgiCisjaW5jbHVkZSA8
YWxnb3JpdGhtPgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisKKyNpZiBVU0UoRElSRUNU
MkQpCisjaW5jbHVkZSA8ZDJkMS5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
c3RhdGljIGlubGluZSB2b2lkIGVuZE1hdHJpeFJvdyhWZWN0b3I8ZmxvYXQ+JiBwYXJhbWV0ZXJz
KQoreworICAgIHBhcmFtZXRlcnMuYXBwZW5kKDApOworICAgIHBhcmFtZXRlcnMuYXBwZW5kKDAp
OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbGFzdE1hdHJpeFJvdyhWZWN0b3I8ZmxvYXQ+JiBw
YXJhbWV0ZXJzKQoreworICAgIHBhcmFtZXRlcnMuYXBwZW5kKDApOworICAgIHBhcmFtZXRlcnMu
YXBwZW5kKDApOworICAgIHBhcmFtZXRlcnMuYXBwZW5kKDApOworICAgIHBhcmFtZXRlcnMuYXBw
ZW5kKDEpOworICAgIHBhcmFtZXRlcnMuYXBwZW5kKDApOworfQorCitSZWY8Q1NTRmlsdGVyPiBD
U1NGaWx0ZXI6OmNyZWF0ZSgpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ1NTRmlsdGVy
KTsKK30KKworQ1NTRmlsdGVyOjpDU1NGaWx0ZXIoKQorICAgIDogRmlsdGVyKEZsb2F0U2l6ZSB7
IDEsIDEgfSkKKyAgICAsIG1fc291cmNlR3JhcGhpYyhTb3VyY2VHcmFwaGljOjpjcmVhdGUoKnRo
aXMpKQoreworfQorCitDU1NGaWx0ZXI6On5DU1NGaWx0ZXIoKSA9IGRlZmF1bHQ7CisKK0dyYXBo
aWNzQ29udGV4dCogQ1NTRmlsdGVyOjppbnB1dENvbnRleHQoKQoreworICAgIHJldHVybiBzb3Vy
Y2VJbWFnZSgpID8gJnNvdXJjZUltYWdlKCktPmNvbnRleHQoKSA6IG51bGxwdHI7Cit9CisKK1Jl
ZlB0cjxGaWx0ZXJFZmZlY3Q+IENTU0ZpbHRlcjo6YnVpbGRSZWZlcmVuY2VGaWx0ZXIoUmVuZGVy
RWxlbWVudCYgcmVuZGVyZXIsIEZpbHRlckVmZmVjdCYgcHJldmlvdXNFZmZlY3QsIFJlZmVyZW5j
ZUZpbHRlck9wZXJhdGlvbiYgZmlsdGVyT3BlcmF0aW9uKQoreworICAgIGF1dG8qIGNhY2hlZFNW
R0RvY3VtZW50UmVmZXJlbmNlID0gZmlsdGVyT3BlcmF0aW9uLmNhY2hlZFNWR0RvY3VtZW50UmVm
ZXJlbmNlKCk7CisgICAgYXV0byogY2FjaGVkU1ZHRG9jdW1lbnQgPSBjYWNoZWRTVkdEb2N1bWVu
dFJlZmVyZW5jZSA/IGNhY2hlZFNWR0RvY3VtZW50UmVmZXJlbmNlLT5kb2N1bWVudCgpIDogbnVs
bHB0cjsKKworICAgIC8vIElmIHdlIGhhdmUgYW4gU1ZHIGRvY3VtZW50LCB0aGlzIGlzIGFuIGV4
dGVybmFsIHJlZmVyZW5jZS4gT3RoZXJ3aXNlCisgICAgLy8gd2UgbG9vayB1cCB0aGUgcmVmZXJl
bmNlZCBub2RlIGluIHRoZSBjdXJyZW50IGRvY3VtZW50LgorICAgIERvY3VtZW50KiBkb2N1bWVu
dDsKKyAgICBpZiAoIWNhY2hlZFNWR0RvY3VtZW50KQorICAgICAgICBkb2N1bWVudCA9ICZyZW5k
ZXJlci5kb2N1bWVudCgpOworICAgIGVsc2UgeworICAgICAgICBkb2N1bWVudCA9IGNhY2hlZFNW
R0RvY3VtZW50LT5kb2N1bWVudCgpOworICAgICAgICBpZiAoIWRvY3VtZW50KQorICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgYXV0byogZmlsdGVyID0gZG9jdW1lbnQt
PmdldEVsZW1lbnRCeUlkKGZpbHRlck9wZXJhdGlvbi5mcmFnbWVudCgpKTsKKyAgICBpZiAoIWZp
bHRlcikgeworICAgICAgICAvLyBBbHRob3VnaCB3ZSBkaWQgbm90IGZpbmQgdGhlIHJlZmVyZW5j
ZWQgZmlsdGVyLCBpdCBtaWdodCBleGlzdCBsYXRlciBpbiB0aGUgZG9jdW1lbnQuCisgICAgICAg
IC8vIEZJWE1FOiBUaGlzIHNraXBzIGFub255bW91cyBSZW5kZXJPYmplY3RzLiA8aHR0cHM6Ly93
ZWJraXQub3JnL2IvMTMxMDg1PgorICAgICAgICBpZiAoYXV0byogZWxlbWVudCA9IHJlbmRlcmVy
LmVsZW1lbnQoKSkKKyAgICAgICAgICAgIGRvY3VtZW50LT5hY2Nlc3NTVkdFeHRlbnNpb25zKCku
YWRkUGVuZGluZ1Jlc291cmNlKGZpbHRlck9wZXJhdGlvbi5mcmFnbWVudCgpLCBlbGVtZW50KTsK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgUmVmUHRyPEZpbHRlckVmZmVj
dD4gZWZmZWN0OworCisgICAgYXV0byBidWlsZGVyID0gc3RkOjptYWtlX3VuaXF1ZTxTVkdGaWx0
ZXJCdWlsZGVyPigmcHJldmlvdXNFZmZlY3QpOworCisgICAgZm9yIChhdXRvJiBlZmZlY3RFbGVt
ZW50IDogY2hpbGRyZW5PZlR5cGU8U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVz
PigqZmlsdGVyKSkgeworICAgICAgICBlZmZlY3QgPSBlZmZlY3RFbGVtZW50LmJ1aWxkKGJ1aWxk
ZXIuZ2V0KCksICp0aGlzKTsKKyAgICAgICAgaWYgKCFlZmZlY3QpCisgICAgICAgICAgICBjb250
aW51ZTsKKworICAgICAgICBlZmZlY3RFbGVtZW50LnNldFN0YW5kYXJkQXR0cmlidXRlcyhlZmZl
Y3QuZ2V0KCkpOworICAgICAgICBpZiAoZWZmZWN0RWxlbWVudC5yZW5kZXJlcigpKQorICAgICAg
ICAgICAgZWZmZWN0LT5zZXRPcGVyYXRpbmdDb2xvclNwYWNlKGVmZmVjdEVsZW1lbnQucmVuZGVy
ZXIoKS0+c3R5bGUoKS5zdmdTdHlsZSgpLmNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnMoKSA9PSBD
b2xvckludGVycG9sYXRpb246OkxpbmVhclJHQiA/IENvbG9yU3BhY2VMaW5lYXJSR0IgOiBDb2xv
clNwYWNlU1JHQik7CisKKyAgICAgICAgYnVpbGRlci0+YWRkKGVmZmVjdEVsZW1lbnQucmVzdWx0
KCksIGVmZmVjdCk7CisgICAgICAgIG1fZWZmZWN0cy5hcHBlbmQoKmVmZmVjdCk7CisgICAgfQor
ICAgIHJldHVybiBlZmZlY3Q7Cit9CisKK2Jvb2wgQ1NTRmlsdGVyOjpidWlsZChSZW5kZXJFbGVt
ZW50JiByZW5kZXJlciwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgb3BlcmF0aW9ucywgRmlsdGVy
Q29uc3VtZXIgY29uc3VtZXIpCit7CisgICAgbV9oYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMgPSBv
cGVyYXRpb25zLmhhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscygpOworICAgIG1faGFzRmlsdGVyVGhh
dFNob3VsZEJlUmVzdHJpY3RlZEJ5U2VjdXJpdHlPcmlnaW4gPSBvcGVyYXRpb25zLmhhc0ZpbHRl
clRoYXRTaG91bGRCZVJlc3RyaWN0ZWRCeVNlY3VyaXR5T3JpZ2luKCk7CisgICAgaWYgKG1faGFz
RmlsdGVyVGhhdE1vdmVzUGl4ZWxzKQorICAgICAgICBtX291dHNldHMgPSBvcGVyYXRpb25zLm91
dHNldHMoKTsKKworICAgIG1fZWZmZWN0cy5jbGVhcigpOworCisgICAgUmVmUHRyPEZpbHRlckVm
ZmVjdD4gcHJldmlvdXNFZmZlY3QgPSBtX3NvdXJjZUdyYXBoaWMucHRyKCk7CisgICAgZm9yIChh
dXRvJiBvcGVyYXRpb24gOiBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKSkgeworICAgICAgICBSZWZQ
dHI8RmlsdGVyRWZmZWN0PiBlZmZlY3Q7CisgICAgICAgIGF1dG8mIGZpbHRlck9wZXJhdGlvbiA9
ICpvcGVyYXRpb247CisgICAgICAgIHN3aXRjaCAoZmlsdGVyT3BlcmF0aW9uLnR5cGUoKSkgewor
ICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6UkVGRVJFTkNFOiB7CisgICAgICAgICAgICBh
dXRvJiByZWZlcmVuY2VPcGVyYXRpb24gPSBkb3duY2FzdDxSZWZlcmVuY2VGaWx0ZXJPcGVyYXRp
b24+KGZpbHRlck9wZXJhdGlvbik7CisgICAgICAgICAgICBlZmZlY3QgPSBidWlsZFJlZmVyZW5j
ZUZpbHRlcihyZW5kZXJlciwgKnByZXZpb3VzRWZmZWN0LCByZWZlcmVuY2VPcGVyYXRpb24pOwor
ICAgICAgICAgICAgcmVmZXJlbmNlT3BlcmF0aW9uLnNldEZpbHRlckVmZmVjdChlZmZlY3QuY29w
eVJlZigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgRmls
dGVyT3BlcmF0aW9uOjpHUkFZU0NBTEU6IHsKKyAgICAgICAgICAgIGF1dG8mIGNvbG9yTWF0cml4
T3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4oZmls
dGVyT3BlcmF0aW9uKTsKKyAgICAgICAgICAgIFZlY3RvcjxmbG9hdD4gaW5wdXRQYXJhbWV0ZXJz
OworICAgICAgICAgICAgZG91YmxlIG9uZU1pbnVzQW1vdW50ID0gY2xhbXBUbygxIC0gY29sb3JN
YXRyaXhPcGVyYXRpb24uYW1vdW50KCksIDAuMCwgMS4wKTsKKworICAgICAgICAgICAgLy8gU2Vl
IGh0dHBzOi8vZHZjcy53My5vcmcvaGcvRlhURi9yYXctZmlsZS90aXAvZmlsdGVycy9pbmRleC5o
dG1sI2dyYXlzY2FsZUVxdWl2YWxlbnQKKyAgICAgICAgICAgIC8vIGZvciBpbmZvcm1hdGlvbiBv
biBwYXJhbWV0ZXJzLgorCisgICAgICAgICAgICBpbnB1dFBhcmFtZXRlcnMuYXBwZW5kKG5hcnJv
d1ByZWNpc2lvblRvRmxvYXQoMC4yMTI2ICsgMC43ODc0ICogb25lTWludXNBbW91bnQpKTsKKyAg
ICAgICAgICAgIGlucHV0UGFyYW1ldGVycy5hcHBlbmQobmFycm93UHJlY2lzaW9uVG9GbG9hdCgw
LjcxNTIgLSAwLjcxNTIgKiBvbmVNaW51c0Ftb3VudCkpOworICAgICAgICAgICAgaW5wdXRQYXJh
bWV0ZXJzLmFwcGVuZChuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMDcyMiAtIDAuMDcyMiAqIG9u
ZU1pbnVzQW1vdW50KSk7CisgICAgICAgICAgICBlbmRNYXRyaXhSb3coaW5wdXRQYXJhbWV0ZXJz
KTsKKworICAgICAgICAgICAgaW5wdXRQYXJhbWV0ZXJzLmFwcGVuZChuYXJyb3dQcmVjaXNpb25U
b0Zsb2F0KDAuMjEyNiAtIDAuMjEyNiAqIG9uZU1pbnVzQW1vdW50KSk7CisgICAgICAgICAgICBp
bnB1dFBhcmFtZXRlcnMuYXBwZW5kKG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC43MTUyICsgMC4y
ODQ4ICogb25lTWludXNBbW91bnQpKTsKKyAgICAgICAgICAgIGlucHV0UGFyYW1ldGVycy5hcHBl
bmQobmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjA3MjIgLSAwLjA3MjIgKiBvbmVNaW51c0Ftb3Vu
dCkpOworICAgICAgICAgICAgZW5kTWF0cml4Um93KGlucHV0UGFyYW1ldGVycyk7CisKKyAgICAg
ICAgICAgIGlucHV0UGFyYW1ldGVycy5hcHBlbmQobmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjIx
MjYgLSAwLjIxMjYgKiBvbmVNaW51c0Ftb3VudCkpOworICAgICAgICAgICAgaW5wdXRQYXJhbWV0
ZXJzLmFwcGVuZChuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuNzE1MiAtIDAuNzE1MiAqIG9uZU1p
bnVzQW1vdW50KSk7CisgICAgICAgICAgICBpbnB1dFBhcmFtZXRlcnMuYXBwZW5kKG5hcnJvd1By
ZWNpc2lvblRvRmxvYXQoMC4wNzIyICsgMC45Mjc4ICogb25lTWludXNBbW91bnQpKTsKKyAgICAg
ICAgICAgIGVuZE1hdHJpeFJvdyhpbnB1dFBhcmFtZXRlcnMpOworCisgICAgICAgICAgICBsYXN0
TWF0cml4Um93KGlucHV0UGFyYW1ldGVycyk7CisKKyAgICAgICAgICAgIGVmZmVjdCA9IEZFQ29s
b3JNYXRyaXg6OmNyZWF0ZSgqdGhpcywgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWCwgaW5wdXRQ
YXJhbWV0ZXJzKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ug
RmlsdGVyT3BlcmF0aW9uOjpTRVBJQTogeworICAgICAgICAgICAgYXV0byYgY29sb3JNYXRyaXhP
cGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPihmaWx0
ZXJPcGVyYXRpb24pOworICAgICAgICAgICAgVmVjdG9yPGZsb2F0PiBpbnB1dFBhcmFtZXRlcnM7
CisgICAgICAgICAgICBkb3VibGUgb25lTWludXNBbW91bnQgPSBjbGFtcFRvKDEgLSBjb2xvck1h
dHJpeE9wZXJhdGlvbi5hbW91bnQoKSwgMC4wLCAxLjApOworCisgICAgICAgICAgICAvLyBTZWUg
aHR0cHM6Ly9kdmNzLnczLm9yZy9oZy9GWFRGL3Jhdy1maWxlL3RpcC9maWx0ZXJzL2luZGV4Lmh0
bWwjc2VwaWFFcXVpdmFsZW50CisgICAgICAgICAgICAvLyBmb3IgaW5mb3JtYXRpb24gb24gcGFy
YW1ldGVycy4KKworICAgICAgICAgICAgaW5wdXRQYXJhbWV0ZXJzLmFwcGVuZChuYXJyb3dQcmVj
aXNpb25Ub0Zsb2F0KDAuMzkzICsgMC42MDcgKiBvbmVNaW51c0Ftb3VudCkpOworICAgICAgICAg
ICAgaW5wdXRQYXJhbWV0ZXJzLmFwcGVuZChuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuNzY5IC0g
MC43NjkgKiBvbmVNaW51c0Ftb3VudCkpOworICAgICAgICAgICAgaW5wdXRQYXJhbWV0ZXJzLmFw
cGVuZChuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMTg5IC0gMC4xODkgKiBvbmVNaW51c0Ftb3Vu
dCkpOworICAgICAgICAgICAgZW5kTWF0cml4Um93KGlucHV0UGFyYW1ldGVycyk7CisKKyAgICAg
ICAgICAgIGlucHV0UGFyYW1ldGVycy5hcHBlbmQobmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjM0
OSAtIDAuMzQ5ICogb25lTWludXNBbW91bnQpKTsKKyAgICAgICAgICAgIGlucHV0UGFyYW1ldGVy
cy5hcHBlbmQobmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjY4NiArIDAuMzE0ICogb25lTWludXNB
bW91bnQpKTsKKyAgICAgICAgICAgIGlucHV0UGFyYW1ldGVycy5hcHBlbmQobmFycm93UHJlY2lz
aW9uVG9GbG9hdCgwLjE2OCAtIDAuMTY4ICogb25lTWludXNBbW91bnQpKTsKKyAgICAgICAgICAg
IGVuZE1hdHJpeFJvdyhpbnB1dFBhcmFtZXRlcnMpOworCisgICAgICAgICAgICBpbnB1dFBhcmFt
ZXRlcnMuYXBwZW5kKG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4yNzIgLSAwLjI3MiAqIG9uZU1p
bnVzQW1vdW50KSk7CisgICAgICAgICAgICBpbnB1dFBhcmFtZXRlcnMuYXBwZW5kKG5hcnJvd1By
ZWNpc2lvblRvRmxvYXQoMC41MzQgLSAwLjUzNCAqIG9uZU1pbnVzQW1vdW50KSk7CisgICAgICAg
ICAgICBpbnB1dFBhcmFtZXRlcnMuYXBwZW5kKG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4xMzEg
KyAwLjg2OSAqIG9uZU1pbnVzQW1vdW50KSk7CisgICAgICAgICAgICBlbmRNYXRyaXhSb3coaW5w
dXRQYXJhbWV0ZXJzKTsKKworICAgICAgICAgICAgbGFzdE1hdHJpeFJvdyhpbnB1dFBhcmFtZXRl
cnMpOworCisgICAgICAgICAgICBlZmZlY3QgPSBGRUNvbG9yTWF0cml4OjpjcmVhdGUoKnRoaXMs
IEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVgsIGlucHV0UGFyYW1ldGVycyk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0FUVVJB
VEU6IHsKKyAgICAgICAgICAgIGF1dG8mIGNvbG9yTWF0cml4T3BlcmF0aW9uID0gZG93bmNhc3Q8
QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKKyAgICAg
ICAgICAgIFZlY3RvcjxmbG9hdD4gaW5wdXRQYXJhbWV0ZXJzOworICAgICAgICAgICAgaW5wdXRQ
YXJhbWV0ZXJzLmFwcGVuZChuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbG9yTWF0cml4T3BlcmF0
aW9uLmFtb3VudCgpKSk7CisgICAgICAgICAgICBlZmZlY3QgPSBGRUNvbG9yTWF0cml4OjpjcmVh
dGUoKnRoaXMsIEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRVUkFURSwgaW5wdXRQYXJhbWV0ZXJzKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0
aW9uOjpIVUVfUk9UQVRFOiB7CisgICAgICAgICAgICBhdXRvJiBjb2xvck1hdHJpeE9wZXJhdGlv
biA9IGRvd25jYXN0PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJh
dGlvbik7CisgICAgICAgICAgICBWZWN0b3I8ZmxvYXQ+IGlucHV0UGFyYW1ldGVyczsKKyAgICAg
ICAgICAgIGlucHV0UGFyYW1ldGVycy5hcHBlbmQobmFycm93UHJlY2lzaW9uVG9GbG9hdChjb2xv
ck1hdHJpeE9wZXJhdGlvbi5hbW91bnQoKSkpOworICAgICAgICAgICAgZWZmZWN0ID0gRkVDb2xv
ck1hdHJpeDo6Y3JlYXRlKCp0aGlzLCBGRUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRFLCBpbnB1
dFBhcmFtZXRlcnMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2Fz
ZSBGaWx0ZXJPcGVyYXRpb246OklOVkVSVDogeworICAgICAgICAgICAgYXV0byYgY29tcG9uZW50
VHJhbnNmZXJPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVy
T3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOworICAgICAgICAgICAgQ29tcG9uZW50VHJhbnNm
ZXJGdW5jdGlvbiB0cmFuc2ZlckZ1bmN0aW9uOworICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlv
bi50eXBlID0gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX1RBQkxFOworICAgICAgICAgICAgVmVj
dG9yPGZsb2F0PiB0cmFuc2ZlclBhcmFtZXRlcnM7CisgICAgICAgICAgICB0cmFuc2ZlclBhcmFt
ZXRlcnMuYXBwZW5kKG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50VHJhbnNmZXJPcGVy
YXRpb24uYW1vdW50KCkpKTsKKyAgICAgICAgICAgIHRyYW5zZmVyUGFyYW1ldGVycy5hcHBlbmQo
bmFycm93UHJlY2lzaW9uVG9GbG9hdCgxIC0gY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24uYW1v
dW50KCkpKTsKKyAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24udGFibGVWYWx1ZXMgPSB0cmFu
c2ZlclBhcmFtZXRlcnM7CisKKyAgICAgICAgICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24g
bnVsbEZ1bmN0aW9uOworICAgICAgICAgICAgZWZmZWN0ID0gRkVDb21wb25lbnRUcmFuc2Zlcjo6
Y3JlYXRlKCp0aGlzLCB0cmFuc2ZlckZ1bmN0aW9uLCB0cmFuc2ZlckZ1bmN0aW9uLCB0cmFuc2Zl
ckZ1bmN0aW9uLCBudWxsRnVuY3Rpb24pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkFQUExFX0lOVkVSVF9MSUdIVE5FU1M6Cisg
ICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gQVBQTEVfSU5WRVJUX0xJR0hUTkVT
UyBpcyBvbmx5IHVzZWQgaW4gLWFwcGxlLWNvbG9yLWZpbHRlci4KKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6T1BBQ0lUWTogeworICAgICAgICAgICAg
YXV0byYgY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbXBvbmVu
dFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOworICAgICAgICAgICAg
Q29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiB0cmFuc2ZlckZ1bmN0aW9uOworICAgICAgICAgICAg
dHJhbnNmZXJGdW5jdGlvbi50eXBlID0gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX1RBQkxFOwor
ICAgICAgICAgICAgVmVjdG9yPGZsb2F0PiB0cmFuc2ZlclBhcmFtZXRlcnM7CisgICAgICAgICAg
ICB0cmFuc2ZlclBhcmFtZXRlcnMuYXBwZW5kKDApOworICAgICAgICAgICAgdHJhbnNmZXJQYXJh
bWV0ZXJzLmFwcGVuZChuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbXBvbmVudFRyYW5zZmVyT3Bl
cmF0aW9uLmFtb3VudCgpKSk7CisgICAgICAgICAgICB0cmFuc2ZlckZ1bmN0aW9uLnRhYmxlVmFs
dWVzID0gdHJhbnNmZXJQYXJhbWV0ZXJzOworCisgICAgICAgICAgICBDb21wb25lbnRUcmFuc2Zl
ckZ1bmN0aW9uIG51bGxGdW5jdGlvbjsKKyAgICAgICAgICAgIGVmZmVjdCA9IEZFQ29tcG9uZW50
VHJhbnNmZXI6OmNyZWF0ZSgqdGhpcywgbnVsbEZ1bmN0aW9uLCBudWxsRnVuY3Rpb24sIG51bGxG
dW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QlJJR0hUTkVTUzogeworICAgICAgICAg
ICAgYXV0byYgY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbXBv
bmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOworICAgICAgICAg
ICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiB0cmFuc2ZlckZ1bmN0aW9uOworICAgICAgICAg
ICAgdHJhbnNmZXJGdW5jdGlvbi50eXBlID0gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVB
UjsKKyAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24uc2xvcGUgPSBuYXJyb3dQcmVjaXNpb25U
b0Zsb2F0KGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uLmFtb3VudCgpKTsKKyAgICAgICAgICAg
IHRyYW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0ID0gMDsKKworICAgICAgICAgICAgQ29tcG9uZW50
VHJhbnNmZXJGdW5jdGlvbiBudWxsRnVuY3Rpb247CisgICAgICAgICAgICBlZmZlY3QgPSBGRUNv
bXBvbmVudFRyYW5zZmVyOjpjcmVhdGUoKnRoaXMsIHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVy
RnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIG51bGxGdW5jdGlvbik7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6Q09OVFJBU1Q6
IHsKKyAgICAgICAgICAgIGF1dG8mIGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uID0gZG93bmNh
c3Q8QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9u
KTsKKyAgICAgICAgICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gdHJhbnNmZXJGdW5jdGlv
bjsKKyAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24udHlwZSA9IEZFQ09NUE9ORU5UVFJBTlNG
RVJfVFlQRV9MSU5FQVI7CisgICAgICAgICAgICBmbG9hdCBhbW91bnQgPSBuYXJyb3dQcmVjaXNp
b25Ub0Zsb2F0KGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uLmFtb3VudCgpKTsKKyAgICAgICAg
ICAgIHRyYW5zZmVyRnVuY3Rpb24uc2xvcGUgPSBhbW91bnQ7CisgICAgICAgICAgICB0cmFuc2Zl
ckZ1bmN0aW9uLmludGVyY2VwdCA9IC0wLjUgKiBhbW91bnQgKyAwLjU7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gbnVsbEZ1bmN0aW9uOworICAg
ICAgICAgICAgZWZmZWN0ID0gRkVDb21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRlKCp0aGlzLCB0cmFu
c2ZlckZ1bmN0aW9uLCB0cmFuc2ZlckZ1bmN0aW9uLCB0cmFuc2ZlckZ1bmN0aW9uLCBudWxsRnVu
Y3Rpb24pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBGaWx0
ZXJPcGVyYXRpb246OkJMVVI6IHsKKyAgICAgICAgICAgIGF1dG8mIGJsdXJPcGVyYXRpb24gPSBk
b3duY2FzdDxCbHVyRmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOworICAgICAgICAg
ICAgZmxvYXQgc3RkRGV2aWF0aW9uID0gZmxvYXRWYWx1ZUZvckxlbmd0aChibHVyT3BlcmF0aW9u
LnN0ZERldmlhdGlvbigpLCAwKTsKKyAgICAgICAgICAgIGVmZmVjdCA9IEZFR2F1c3NpYW5CbHVy
OjpjcmVhdGUoKnRoaXMsIHN0ZERldmlhdGlvbiwgc3RkRGV2aWF0aW9uLCBjb25zdW1lciA9PSBG
aWx0ZXJDb25zdW1lcjo6RmlsdGVyUHJvcGVydHkgPyBFREdFTU9ERV9OT05FIDogRURHRU1PREVf
RFVQTElDQVRFKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ug
RmlsdGVyT3BlcmF0aW9uOjpEUk9QX1NIQURPVzogeworICAgICAgICAgICAgYXV0byYgZHJvcFNo
YWRvd09wZXJhdGlvbiA9IGRvd25jYXN0PERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb24+KGZpbHRl
ck9wZXJhdGlvbik7CisgICAgICAgICAgICBlZmZlY3QgPSBGRURyb3BTaGFkb3c6OmNyZWF0ZSgq
dGhpcywgZHJvcFNoYWRvd09wZXJhdGlvbi5zdGREZXZpYXRpb24oKSwgZHJvcFNoYWRvd09wZXJh
dGlvbi5zdGREZXZpYXRpb24oKSwKKyAgICAgICAgICAgICAgICBkcm9wU2hhZG93T3BlcmF0aW9u
LngoKSwgZHJvcFNoYWRvd09wZXJhdGlvbi55KCksIGRyb3BTaGFkb3dPcGVyYXRpb24uY29sb3Io
KSwgMSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZWZmZWN0KSB7Cisg
ICAgICAgICAgICAvLyBVbmxpa2UgU1ZHIEZpbHRlcnMgYW5kIENTU0ZpbHRlckltYWdlcywgZmls
dGVyIGZ1bmN0aW9ucyBvbiB0aGUgZmlsdGVyCisgICAgICAgICAgICAvLyBwcm9wZXJ0eSBhcHBs
aWVkIGhlcmUgc2hvdWxkIG5vdCBjbGlwIHRvIHRoZWlyIHByaW1pdGl2ZSBzdWJyZWdpb25zLgor
ICAgICAgICAgICAgZWZmZWN0LT5zZXRDbGlwc1RvQm91bmRzKGNvbnN1bWVyID09IEZpbHRlckNv
bnN1bWVyOjpGaWx0ZXJGdW5jdGlvbik7CisgICAgICAgICAgICBlZmZlY3QtPnNldE9wZXJhdGlu
Z0NvbG9yU3BhY2UoQ29sb3JTcGFjZVNSR0IpOworICAgICAgICAgICAgCisgICAgICAgICAgICBp
ZiAoZmlsdGVyT3BlcmF0aW9uLnR5cGUoKSAhPSBGaWx0ZXJPcGVyYXRpb246OlJFRkVSRU5DRSkg
eworICAgICAgICAgICAgICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkuYXBwZW5kKFdURk1vdmUo
cHJldmlvdXNFZmZlY3QpKTsKKyAgICAgICAgICAgICAgICBtX2VmZmVjdHMuYXBwZW5kKCplZmZl
Y3QpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcHJldmlvdXNFZmZlY3QgPSBXVEZNb3Zl
KGVmZmVjdCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBJZiB3ZSBkaWRuJ3QgbWFrZSBh
bnkgZWZmZWN0cywgdGVsbCBvdXIgY2FsbGVyIHdlIGFyZSBub3QgdmFsaWQuCisgICAgaWYgKG1f
ZWZmZWN0cy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHNldE1heEVm
ZmVjdFJlY3RzKG1fc291cmNlRHJhd2luZ1JlZ2lvbik7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K2Jvb2wgQ1NTRmlsdGVyOjp1cGRhdGVCYWNraW5nU3RvcmVSZWN0KGNvbnN0IEZsb2F0UmVjdCYg
ZmlsdGVyUmVjdCkKK3sKKyAgICBpZiAoZmlsdGVyUmVjdC5pc0VtcHR5KCkgfHwgSW1hZ2VCdWZm
ZXI6OnNpemVOZWVkc0NsYW1waW5nKGZpbHRlclJlY3Quc2l6ZSgpKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgaWYgKGZpbHRlclJlY3QgPT0gc291cmNlSW1hZ2VSZWN0KCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIHNldFNvdXJjZUltYWdlUmVjdChmaWx0ZXJSZWN0KTsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBDU1NGaWx0ZXI6OmFsbG9jYXRlQmFja2luZ1N0
b3JlSWZOZWVkZWQoY29uc3QgR3JhcGhpY3NDb250ZXh0JiB0YXJnZXRDb250ZXh0KQoreworICAg
IC8vIEF0IHRoaXMgcG9pbnQgdGhlIGVmZmVjdCBjaGFpbiBoYXMgYmVlbiBidWlsdCwgYW5kIHRo
ZQorICAgIC8vIHNvdXJjZSBpbWFnZSBzaXplcyBzZXQuIFdlIGp1c3QgbmVlZCB0byBhdHRhY2gg
dGhlIGdyYXBoaWMKKyAgICAvLyBidWZmZXIgaWYgd2UgaGF2ZSBub3QgeWV0IGRvbmUgc28uCisK
KyAgICBpZiAobV9ncmFwaGljc0J1ZmZlckF0dGFjaGVkKQorICAgICAgICByZXR1cm47CisKKyAg
ICBJbnRTaXplIGxvZ2ljYWxTaXplIHsgbV9zb3VyY2VEcmF3aW5nUmVnaW9uLnNpemUoKSB9Owor
ICAgIGlmICghc291cmNlSW1hZ2UoKSB8fCBzb3VyY2VJbWFnZSgpLT5sb2dpY2FsU2l6ZSgpICE9
IGxvZ2ljYWxTaXplKSB7CisjaWYgVVNFKERJUkVDVDJEKQorICAgICAgICBzZXRTb3VyY2VJbWFn
ZShJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGxvZ2ljYWxTaXplLCByZW5kZXJpbmdNb2RlKCksICZ0YXJn
ZXRDb250ZXh0LCBmaWx0ZXJTY2FsZSgpKSk7CisjZWxzZQorICAgICAgICBVTlVTRURfUEFSQU0o
dGFyZ2V0Q29udGV4dCk7CisgICAgICAgIHNldFNvdXJjZUltYWdlKEltYWdlQnVmZmVyOjpjcmVh
dGUobG9naWNhbFNpemUsIHJlbmRlcmluZ01vZGUoKSwgZmlsdGVyU2NhbGUoKSkpOworI2VuZGlm
CisgICAgfQorICAgIG1fZ3JhcGhpY3NCdWZmZXJBdHRhY2hlZCA9IHRydWU7Cit9CisKK3ZvaWQg
Q1NTRmlsdGVyOjpjbGVhckludGVybWVkaWF0ZVJlc3VsdHMoKQoreworICAgIG1fc291cmNlR3Jh
cGhpYy0+Y2xlYXJSZXN1bHQoKTsKKyAgICBmb3IgKGF1dG8mIGVmZmVjdCA6IG1fZWZmZWN0cykK
KyAgICAgICAgZWZmZWN0LT5jbGVhclJlc3VsdCgpOworfQorCit2b2lkIENTU0ZpbHRlcjo6YXBw
bHkoKQoreworICAgIGF1dG8mIGVmZmVjdCA9IG1fZWZmZWN0cy5sYXN0KCkuZ2V0KCk7CisgICAg
ZWZmZWN0LmFwcGx5KCk7CisgICAgZWZmZWN0LnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoQ29s
b3JTcGFjZVNSR0IpOworfQorCitMYXlvdXRSZWN0IENTU0ZpbHRlcjo6Y29tcHV0ZVNvdXJjZUlt
YWdlUmVjdEZvckRpcnR5UmVjdChjb25zdCBMYXlvdXRSZWN0JiBmaWx0ZXJCb3hSZWN0LCBjb25z
dCBMYXlvdXRSZWN0JiBkaXJ0eVJlY3QpCit7CisgICAgLy8gVGhlIHJlc3VsdCBvZiB0aGlzIGZ1
bmN0aW9uIGlzIHRoZSBhcmVhIGluIHRoZSAiZmlsdGVyQm94UmVjdCIgdGhhdCBuZWVkcyB0byBi
ZSByZXBhaW50ZWQsIHNvIHRoYXQgd2UgZnVsbHkgY292ZXIgdGhlICJkaXJ0eVJlY3QiLgorICAg
IGF1dG8gcmVjdEZvclJlcGFpbnQgPSBkaXJ0eVJlY3Q7CisgICAgaWYgKGhhc0ZpbHRlclRoYXRN
b3Zlc1BpeGVscygpKSB7CisgICAgICAgIC8vIE5vdGUgdGhhdCB0aGUgb3V0c2V0cyBhcmUgcmV2
ZXJzZWQgaGVyZSBiZWNhdXNlIHdlIGFyZSBnb2luZyBiYWNrd2FyZHMgLT4gd2UgaGF2ZSB0aGUg
ZGlydHkgcmVjdCBhbmQKKyAgICAgICAgLy8gbmVlZCB0byBmaW5kIG91dCB3aGF0IGlzIHRoZSBy
ZWN0YW5nbGUgdGhhdCBtaWdodCBpbmZsdWVuY2UgdGhlIHJlc3VsdCBpbnNpZGUgdGhhdCBkaXJ0
eSByZWN0LgorICAgICAgICByZWN0Rm9yUmVwYWludC5tb3ZlKC1tX291dHNldHMucmlnaHQoKSwg
LW1fb3V0c2V0cy5ib3R0b20oKSk7CisgICAgICAgIHJlY3RGb3JSZXBhaW50LmV4cGFuZChtX291
dHNldHMubGVmdCgpICsgbV9vdXRzZXRzLnJpZ2h0KCksIG1fb3V0c2V0cy50b3AoKSArIG1fb3V0
c2V0cy5ib3R0b20oKSk7CisgICAgfQorICAgIHJlY3RGb3JSZXBhaW50LmludGVyc2VjdChmaWx0
ZXJCb3hSZWN0KTsKKyAgICByZXR1cm4gcmVjdEZvclJlcGFpbnQ7Cit9CisKK0ltYWdlQnVmZmVy
KiBDU1NGaWx0ZXI6Om91dHB1dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZWZmZWN0cy5sYXN0
KCktPmltYWdlQnVmZmVyUmVzdWx0KCk7Cit9CisKK3ZvaWQgQ1NTRmlsdGVyOjpzZXRTb3VyY2VJ
bWFnZVJlY3QoY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QpCit7CisgICAgbV9zb3Vy
Y2VEcmF3aW5nUmVnaW9uID0gc291cmNlSW1hZ2VSZWN0OworICAgIHNldE1heEVmZmVjdFJlY3Rz
KHNvdXJjZUltYWdlUmVjdCk7CisgICAgc2V0RmlsdGVyUmVnaW9uKHNvdXJjZUltYWdlUmVjdCk7
CisgICAgbV9ncmFwaGljc0J1ZmZlckF0dGFjaGVkID0gZmFsc2U7Cit9CisKKwordm9pZCBDU1NG
aWx0ZXI6OnNldE1heEVmZmVjdFJlY3RzKGNvbnN0IEZsb2F0UmVjdCYgZWZmZWN0UmVjdCkKK3sK
KyAgICBmb3IgKGF1dG8mIGVmZmVjdCA6IG1fZWZmZWN0cykKKyAgICAgICAgZWZmZWN0LT5zZXRN
YXhFZmZlY3RSZWN0KGVmZmVjdFJlY3QpOworfQorCitJbnRSZWN0IENTU0ZpbHRlcjo6b3V0cHV0
UmVjdCgpIGNvbnN0Cit7CisgICAgYXV0byYgbGFzdEVmZmVjdCA9IG1fZWZmZWN0cy5sYXN0KCku
Z2V0KCk7CisgICAgaWYgKCFsYXN0RWZmZWN0Lmhhc1Jlc3VsdCgpKQorICAgICAgICByZXR1cm4g
eyB9OworICAgIHJldHVybiBsYXN0RWZmZWN0LnJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRJbWFnZURh
dGEoSW50UmVjdCB7IG1fZmlsdGVyUmVnaW9uIH0pOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVyLmggYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzJhMjM4Nzgw
YjEwM2I3Y2I5YjE3ODAwNjg4ZmYwOThjOTQzY2M1NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuaApAQCAtMCwwICsxLDEwMiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSAiRmlsdGVyLmgiCisjaW5jbHVkZSAiSW50UmVjdEV4dGVudC5oIgorI2lu
Y2x1ZGUgIkxheW91dFJlY3QuaCIKKyNpbmNsdWRlIDx3dGYvVHlwZUNhc3RzLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRmlsdGVyRWZmZWN0OworY2xhc3MgRmlsdGVyT3BlcmF0
aW9uczsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDsKK2NsYXNzIFJlZmVyZW5jZUZpbHRlck9wZXJh
dGlvbjsKK2NsYXNzIFJlbmRlckVsZW1lbnQ7CitjbGFzcyBTb3VyY2VHcmFwaGljOworCitlbnVt
IGNsYXNzIEZpbHRlckNvbnN1bWVyIHsgRmlsdGVyUHJvcGVydHksIEZpbHRlckZ1bmN0aW9uIH07
CisKK2NsYXNzIENTU0ZpbHRlciBmaW5hbCA6IHB1YmxpYyBGaWx0ZXIgeworICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIGZyaWVuZCBjbGFzcyBGaWx0ZXJFZmZlY3RS
ZW5kZXJlckhlbHBlcjsKKworICAgIHN0YXRpYyBSZWY8Q1NTRmlsdGVyPiBjcmVhdGUoKTsKKwor
ICAgIHZvaWQgc2V0U291cmNlSW1hZ2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOworICAgIHZvaWQg
c2V0RmlsdGVyUmVnaW9uKGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uKSB7IG1fZmlsdGVy
UmVnaW9uID0gZmlsdGVyUmVnaW9uOyB9CisKKyAgICBJbWFnZUJ1ZmZlciogb3V0cHV0KCkgY29u
c3Q7CisKKyAgICBib29sIGJ1aWxkKFJlbmRlckVsZW1lbnQmLCBjb25zdCBGaWx0ZXJPcGVyYXRp
b25zJiwgRmlsdGVyQ29uc3VtZXIpOworICAgIHZvaWQgY2xlYXJJbnRlcm1lZGlhdGVSZXN1bHRz
KCk7CisgICAgdm9pZCBhcHBseSgpOworCisgICAgYm9vbCBoYXNGaWx0ZXJUaGF0TW92ZXNQaXhl
bHMoKSBjb25zdCB7IHJldHVybiBtX2hhc0ZpbHRlclRoYXRNb3Zlc1BpeGVsczsgfQorICAgIGJv
b2wgaGFzRmlsdGVyVGhhdFNob3VsZEJlUmVzdHJpY3RlZEJ5U2VjdXJpdHlPcmlnaW4oKSBjb25z
dCB7IHJldHVybiBtX2hhc0ZpbHRlclRoYXRTaG91bGRCZVJlc3RyaWN0ZWRCeVNlY3VyaXR5T3Jp
Z2luOyB9CisKK3ByaXZhdGU6CisgICAgQ1NTRmlsdGVyKCk7CisgICAgdmlydHVhbCB+Q1NTRmls
dGVyKCk7CisKKyAgICBib29sIGlzQ1NTRmlsdGVyKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1
ZTsgfQorCisgICAgRmxvYXRSZWN0IHNvdXJjZUltYWdlUmVjdCgpIGNvbnN0IGZpbmFsIHsgcmV0
dXJuIG1fc291cmNlRHJhd2luZ1JlZ2lvbjsgfQorICAgIEZsb2F0UmVjdCBmaWx0ZXJSZWdpb24o
KSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2ZpbHRlclJlZ2lvbjsgfQorCisgICAgUmVmUHRyPEZp
bHRlckVmZmVjdD4gYnVpbGRSZWZlcmVuY2VGaWx0ZXIoUmVuZGVyRWxlbWVudCYsIEZpbHRlckVm
ZmVjdCYgcHJldmlvdXNFZmZlY3QsIFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbiYpOworCisgICAg
dm9pZCBzZXRNYXhFZmZlY3RSZWN0cyhjb25zdCBGbG9hdFJlY3QmKTsKKworICAgIEdyYXBoaWNz
Q29udGV4dCogaW5wdXRDb250ZXh0KCk7CisKKyAgICBib29sIHVwZGF0ZUJhY2tpbmdTdG9yZVJl
Y3QoY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWN0KTsKKyAgICB2b2lkIGFsbG9jYXRlQmFja2lu
Z1N0b3JlSWZOZWVkZWQoY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CisKKyAgICBJbnRSZWN0IG91
dHB1dFJlY3QoKSBjb25zdDsKKworICAgIExheW91dFJlY3QgY29tcHV0ZVNvdXJjZUltYWdlUmVj
dEZvckRpcnR5UmVjdChjb25zdCBMYXlvdXRSZWN0JiBmaWx0ZXJCb3hSZWN0LCBjb25zdCBMYXlv
dXRSZWN0JiBkaXJ0eVJlY3QpOworCisgICAgRmxvYXRSZWN0IG1fc291cmNlRHJhd2luZ1JlZ2lv
bjsKKyAgICBGbG9hdFJlY3QgbV9maWx0ZXJSZWdpb247CisKKyAgICBWZWN0b3I8UmVmPEZpbHRl
ckVmZmVjdD4+IG1fZWZmZWN0czsKKyAgICBSZWY8U291cmNlR3JhcGhpYz4gbV9zb3VyY2VHcmFw
aGljOworCisgICAgSW50UmVjdEV4dGVudCBtX291dHNldHM7CisKKyAgICBib29sIG1fZ3JhcGhp
Y3NCdWZmZXJBdHRhY2hlZCB7IGZhbHNlIH07CisgICAgYm9vbCBtX2hhc0ZpbHRlclRoYXRNb3Zl
c1BpeGVscyB7IGZhbHNlIH07CisgICAgYm9vbCBtX2hhc0ZpbHRlclRoYXRTaG91bGRCZVJlc3Ry
aWN0ZWRCeVNlY3VyaXR5T3JpZ2luIHsgZmFsc2UgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpDU1NGaWx0ZXIp
CisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OkZpbHRlciYgZmlsdGVyKSB7
IHJldHVybiBmaWx0ZXIuaXNDU1NGaWx0ZXIoKTsgfQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19F
TkQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0ZpbHRlckVmZmVjdFJl
bmRlcmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GaWx0ZXJFZmZlY3RSZW5kZXJl
ci5jcHAKaW5kZXggOGJmN2FlNDUyNjVhZDY5N2Y1MTBkZDBiNDcxMDllMGJkMzNiZGNkYS4uZDNi
NWQyNTk4NDY2ODg5ZWIxNjAwNWYwM2FhZDgwOGNkMjVmMDExMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwCkBAIC0yNyw2ICsyNyw3
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0UmVuZGVyZXIu
aCIKIAorI2luY2x1ZGUgIkNTU0ZpbHRlci5oIgogI2luY2x1ZGUgIkNhY2hlZFNWR0RvY3VtZW50
LmgiCiAjaW5jbHVkZSAiQ2FjaGVkU1ZHRG9jdW1lbnRSZWZlcmVuY2UuaCIKICNpbmNsdWRlICJF
bGVtZW50SXRlcmF0b3IuaCIKQEAgLTUwLDM0OSArNTEsMTIgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1zdGF0aWMgaW5saW5lIHZvaWQgZW5kTWF0cml4Um93KFZlY3RvcjxmbG9hdD4mIHBh
cmFtZXRlcnMpCi17Ci0gICAgcGFyYW1ldGVycy5hcHBlbmQoMCk7Ci0gICAgcGFyYW1ldGVycy5h
cHBlbmQoMCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBsYXN0TWF0cml4Um93KFZlY3Rvcjxm
bG9hdD4mIHBhcmFtZXRlcnMpCi17Ci0gICAgcGFyYW1ldGVycy5hcHBlbmQoMCk7Ci0gICAgcGFy
YW1ldGVycy5hcHBlbmQoMCk7Ci0gICAgcGFyYW1ldGVycy5hcHBlbmQoMCk7Ci0gICAgcGFyYW1l
dGVycy5hcHBlbmQoMSk7Ci0gICAgcGFyYW1ldGVycy5hcHBlbmQoMCk7Ci19Ci0KLWlubGluZSBG
aWx0ZXJFZmZlY3RSZW5kZXJlcjo6RmlsdGVyRWZmZWN0UmVuZGVyZXIoKQotICAgIDogRmlsdGVy
KEZsb2F0U2l6ZSB7IDEsIDEgfSkKLSAgICAsIG1fc291cmNlR3JhcGhpYyhTb3VyY2VHcmFwaGlj
OjpjcmVhdGUoKnRoaXMpKQotewotfQotCi1SZWY8RmlsdGVyRWZmZWN0UmVuZGVyZXI+IEZpbHRl
ckVmZmVjdFJlbmRlcmVyOjpjcmVhdGUoKQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZp
bHRlckVmZmVjdFJlbmRlcmVyKTsKLX0KLQotRmlsdGVyRWZmZWN0UmVuZGVyZXI6On5GaWx0ZXJF
ZmZlY3RSZW5kZXJlcigpID0gZGVmYXVsdDsKLQotR3JhcGhpY3NDb250ZXh0KiBGaWx0ZXJFZmZl
Y3RSZW5kZXJlcjo6aW5wdXRDb250ZXh0KCkKLXsKLSAgICByZXR1cm4gc291cmNlSW1hZ2UoKSA/
ICZzb3VyY2VJbWFnZSgpLT5jb250ZXh0KCkgOiBudWxscHRyOwotfQotCi1SZWZQdHI8RmlsdGVy
RWZmZWN0PiBGaWx0ZXJFZmZlY3RSZW5kZXJlcjo6YnVpbGRSZWZlcmVuY2VGaWx0ZXIoUmVuZGVy
RWxlbWVudCYgcmVuZGVyZXIsIEZpbHRlckVmZmVjdCYgcHJldmlvdXNFZmZlY3QsIFJlZmVyZW5j
ZUZpbHRlck9wZXJhdGlvbiYgZmlsdGVyT3BlcmF0aW9uKQotewotICAgIGF1dG8qIGNhY2hlZFNW
R0RvY3VtZW50UmVmZXJlbmNlID0gZmlsdGVyT3BlcmF0aW9uLmNhY2hlZFNWR0RvY3VtZW50UmVm
ZXJlbmNlKCk7Ci0gICAgYXV0byogY2FjaGVkU1ZHRG9jdW1lbnQgPSBjYWNoZWRTVkdEb2N1bWVu
dFJlZmVyZW5jZSA/IGNhY2hlZFNWR0RvY3VtZW50UmVmZXJlbmNlLT5kb2N1bWVudCgpIDogbnVs
bHB0cjsKLQotICAgIC8vIElmIHdlIGhhdmUgYW4gU1ZHIGRvY3VtZW50LCB0aGlzIGlzIGFuIGV4
dGVybmFsIHJlZmVyZW5jZS4gT3RoZXJ3aXNlCi0gICAgLy8gd2UgbG9vayB1cCB0aGUgcmVmZXJl
bmNlZCBub2RlIGluIHRoZSBjdXJyZW50IGRvY3VtZW50LgotICAgIERvY3VtZW50KiBkb2N1bWVu
dDsKLSAgICBpZiAoIWNhY2hlZFNWR0RvY3VtZW50KQotICAgICAgICBkb2N1bWVudCA9ICZyZW5k
ZXJlci5kb2N1bWVudCgpOwotICAgIGVsc2UgewotICAgICAgICBkb2N1bWVudCA9IGNhY2hlZFNW
R0RvY3VtZW50LT5kb2N1bWVudCgpOwotICAgICAgICBpZiAoIWRvY3VtZW50KQotICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgYXV0byogZmlsdGVyID0gZG9jdW1lbnQt
PmdldEVsZW1lbnRCeUlkKGZpbHRlck9wZXJhdGlvbi5mcmFnbWVudCgpKTsKLSAgICBpZiAoIWZp
bHRlcikgewotICAgICAgICAvLyBBbHRob3VnaCB3ZSBkaWQgbm90IGZpbmQgdGhlIHJlZmVyZW5j
ZWQgZmlsdGVyLCBpdCBtaWdodCBleGlzdCBsYXRlciBpbiB0aGUgZG9jdW1lbnQuCi0gICAgICAg
IC8vIEZJWE1FOiBUaGlzIHNraXBzIGFub255bW91cyBSZW5kZXJPYmplY3RzLiA8aHR0cHM6Ly93
ZWJraXQub3JnL2IvMTMxMDg1PgotICAgICAgICBpZiAoYXV0byogZWxlbWVudCA9IHJlbmRlcmVy
LmVsZW1lbnQoKSkKLSAgICAgICAgICAgIGRvY3VtZW50LT5hY2Nlc3NTVkdFeHRlbnNpb25zKCku
YWRkUGVuZGluZ1Jlc291cmNlKGZpbHRlck9wZXJhdGlvbi5mcmFnbWVudCgpLCBlbGVtZW50KTsK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgUmVmUHRyPEZpbHRlckVmZmVj
dD4gZWZmZWN0OwotCi0gICAgYXV0byBidWlsZGVyID0gc3RkOjptYWtlX3VuaXF1ZTxTVkdGaWx0
ZXJCdWlsZGVyPigmcHJldmlvdXNFZmZlY3QpOwotCi0gICAgZm9yIChhdXRvJiBlZmZlY3RFbGVt
ZW50IDogY2hpbGRyZW5PZlR5cGU8U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVz
PigqZmlsdGVyKSkgewotICAgICAgICBlZmZlY3QgPSBlZmZlY3RFbGVtZW50LmJ1aWxkKGJ1aWxk
ZXIuZ2V0KCksICp0aGlzKTsKLSAgICAgICAgaWYgKCFlZmZlY3QpCi0gICAgICAgICAgICBjb250
aW51ZTsKLQotICAgICAgICBlZmZlY3RFbGVtZW50LnNldFN0YW5kYXJkQXR0cmlidXRlcyhlZmZl
Y3QuZ2V0KCkpOwotICAgICAgICBpZiAoZWZmZWN0RWxlbWVudC5yZW5kZXJlcigpKQotICAgICAg
ICAgICAgZWZmZWN0LT5zZXRPcGVyYXRpbmdDb2xvclNwYWNlKGVmZmVjdEVsZW1lbnQucmVuZGVy
ZXIoKS0+c3R5bGUoKS5zdmdTdHlsZSgpLmNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnMoKSA9PSBD
b2xvckludGVycG9sYXRpb246OkxpbmVhclJHQiA/IENvbG9yU3BhY2VMaW5lYXJSR0IgOiBDb2xv
clNwYWNlU1JHQik7Ci0KLSAgICAgICAgYnVpbGRlci0+YWRkKGVmZmVjdEVsZW1lbnQucmVzdWx0
KCksIGVmZmVjdCk7Ci0gICAgICAgIG1fZWZmZWN0cy5hcHBlbmQoKmVmZmVjdCk7Ci0gICAgfQot
ICAgIHJldHVybiBlZmZlY3Q7Ci19Ci0KLWJvb2wgRmlsdGVyRWZmZWN0UmVuZGVyZXI6OmJ1aWxk
KFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBvcGVyYXRp
b25zLCBGaWx0ZXJDb25zdW1lciBjb25zdW1lcikKLXsKLSAgICBtX2hhc0ZpbHRlclRoYXRNb3Zl
c1BpeGVscyA9IG9wZXJhdGlvbnMuaGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzKCk7Ci0gICAgbV9o
YXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1cml0eU9yaWdpbiA9IG9wZXJhdGlv
bnMuaGFzRmlsdGVyVGhhdFNob3VsZEJlUmVzdHJpY3RlZEJ5U2VjdXJpdHlPcmlnaW4oKTsKLSAg
ICBpZiAobV9oYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMpCi0gICAgICAgIG1fb3V0c2V0cyA9IG9w
ZXJhdGlvbnMub3V0c2V0cygpOwotCi0gICAgbV9lZmZlY3RzLmNsZWFyKCk7Ci0KLSAgICBSZWZQ
dHI8RmlsdGVyRWZmZWN0PiBwcmV2aW91c0VmZmVjdCA9IG1fc291cmNlR3JhcGhpYy5wdHIoKTsK
LSAgICBmb3IgKGF1dG8mIG9wZXJhdGlvbiA6IG9wZXJhdGlvbnMub3BlcmF0aW9ucygpKSB7Ci0g
ICAgICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGVmZmVjdDsKLSAgICAgICAgYXV0byYgZmlsdGVy
T3BlcmF0aW9uID0gKm9wZXJhdGlvbjsKLSAgICAgICAgc3dpdGNoIChmaWx0ZXJPcGVyYXRpb24u
dHlwZSgpKSB7Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpSRUZFUkVOQ0U6IHsKLSAg
ICAgICAgICAgIGF1dG8mIHJlZmVyZW5jZU9wZXJhdGlvbiA9IGRvd25jYXN0PFJlZmVyZW5jZUZp
bHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIGVmZmVjdCA9IGJ1
aWxkUmVmZXJlbmNlRmlsdGVyKHJlbmRlcmVyLCAqcHJldmlvdXNFZmZlY3QsIHJlZmVyZW5jZU9w
ZXJhdGlvbik7Ci0gICAgICAgICAgICByZWZlcmVuY2VPcGVyYXRpb24uc2V0RmlsdGVyRWZmZWN0
KGVmZmVjdC5jb3B5UmVmKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAg
ICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkdSQVlTQ0FMRTogewotICAgICAgICAgICAgYXV0byYg
Y29sb3JNYXRyaXhPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3Bl
cmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgVmVjdG9yPGZsb2F0PiBpbnB1
dFBhcmFtZXRlcnM7Ci0gICAgICAgICAgICBkb3VibGUgb25lTWludXNBbW91bnQgPSBjbGFtcFRv
KDEgLSBjb2xvck1hdHJpeE9wZXJhdGlvbi5hbW91bnQoKSwgMC4wLCAxLjApOwotCi0gICAgICAg
ICAgICAvLyBTZWUgaHR0cHM6Ly9kdmNzLnczLm9yZy9oZy9GWFRGL3Jhdy1maWxlL3RpcC9maWx0
ZXJzL2luZGV4Lmh0bWwjZ3JheXNjYWxlRXF1aXZhbGVudAotICAgICAgICAgICAgLy8gZm9yIGlu
Zm9ybWF0aW9uIG9uIHBhcmFtZXRlcnMuCi0KLSAgICAgICAgICAgIGlucHV0UGFyYW1ldGVycy5h
cHBlbmQobmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjIxMjYgKyAwLjc4NzQgKiBvbmVNaW51c0Ft
b3VudCkpOwotICAgICAgICAgICAgaW5wdXRQYXJhbWV0ZXJzLmFwcGVuZChuYXJyb3dQcmVjaXNp
b25Ub0Zsb2F0KDAuNzE1MiAtIDAuNzE1MiAqIG9uZU1pbnVzQW1vdW50KSk7Ci0gICAgICAgICAg
ICBpbnB1dFBhcmFtZXRlcnMuYXBwZW5kKG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4wNzIyIC0g
MC4wNzIyICogb25lTWludXNBbW91bnQpKTsKLSAgICAgICAgICAgIGVuZE1hdHJpeFJvdyhpbnB1
dFBhcmFtZXRlcnMpOwotCi0gICAgICAgICAgICBpbnB1dFBhcmFtZXRlcnMuYXBwZW5kKG5hcnJv
d1ByZWNpc2lvblRvRmxvYXQoMC4yMTI2IC0gMC4yMTI2ICogb25lTWludXNBbW91bnQpKTsKLSAg
ICAgICAgICAgIGlucHV0UGFyYW1ldGVycy5hcHBlbmQobmFycm93UHJlY2lzaW9uVG9GbG9hdCgw
LjcxNTIgKyAwLjI4NDggKiBvbmVNaW51c0Ftb3VudCkpOwotICAgICAgICAgICAgaW5wdXRQYXJh
bWV0ZXJzLmFwcGVuZChuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMDcyMiAtIDAuMDcyMiAqIG9u
ZU1pbnVzQW1vdW50KSk7Ci0gICAgICAgICAgICBlbmRNYXRyaXhSb3coaW5wdXRQYXJhbWV0ZXJz
KTsKLQotICAgICAgICAgICAgaW5wdXRQYXJhbWV0ZXJzLmFwcGVuZChuYXJyb3dQcmVjaXNpb25U
b0Zsb2F0KDAuMjEyNiAtIDAuMjEyNiAqIG9uZU1pbnVzQW1vdW50KSk7Ci0gICAgICAgICAgICBp
bnB1dFBhcmFtZXRlcnMuYXBwZW5kKG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC43MTUyIC0gMC43
MTUyICogb25lTWludXNBbW91bnQpKTsKLSAgICAgICAgICAgIGlucHV0UGFyYW1ldGVycy5hcHBl
bmQobmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjA3MjIgKyAwLjkyNzggKiBvbmVNaW51c0Ftb3Vu
dCkpOwotICAgICAgICAgICAgZW5kTWF0cml4Um93KGlucHV0UGFyYW1ldGVycyk7Ci0KLSAgICAg
ICAgICAgIGxhc3RNYXRyaXhSb3coaW5wdXRQYXJhbWV0ZXJzKTsKLQotICAgICAgICAgICAgZWZm
ZWN0ID0gRkVDb2xvck1hdHJpeDo6Y3JlYXRlKCp0aGlzLCBGRUNPTE9STUFUUklYX1RZUEVfTUFU
UklYLCBpbnB1dFBhcmFtZXRlcnMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNFUElBOiB7Ci0gICAgICAgICAgICBhdXRvJiBj
b2xvck1hdHJpeE9wZXJhdGlvbiA9IGRvd25jYXN0PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVy
YXRpb24+KGZpbHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBWZWN0b3I8ZmxvYXQ+IGlucHV0
UGFyYW1ldGVyczsKLSAgICAgICAgICAgIGRvdWJsZSBvbmVNaW51c0Ftb3VudCA9IGNsYW1wVG8o
MSAtIGNvbG9yTWF0cml4T3BlcmF0aW9uLmFtb3VudCgpLCAwLjAsIDEuMCk7Ci0KLSAgICAgICAg
ICAgIC8vIFNlZSBodHRwczovL2R2Y3MudzMub3JnL2hnL0ZYVEYvcmF3LWZpbGUvdGlwL2ZpbHRl
cnMvaW5kZXguaHRtbCNzZXBpYUVxdWl2YWxlbnQKLSAgICAgICAgICAgIC8vIGZvciBpbmZvcm1h
dGlvbiBvbiBwYXJhbWV0ZXJzLgotCi0gICAgICAgICAgICBpbnB1dFBhcmFtZXRlcnMuYXBwZW5k
KG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4zOTMgKyAwLjYwNyAqIG9uZU1pbnVzQW1vdW50KSk7
Ci0gICAgICAgICAgICBpbnB1dFBhcmFtZXRlcnMuYXBwZW5kKG5hcnJvd1ByZWNpc2lvblRvRmxv
YXQoMC43NjkgLSAwLjc2OSAqIG9uZU1pbnVzQW1vdW50KSk7Ci0gICAgICAgICAgICBpbnB1dFBh
cmFtZXRlcnMuYXBwZW5kKG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4xODkgLSAwLjE4OSAqIG9u
ZU1pbnVzQW1vdW50KSk7Ci0gICAgICAgICAgICBlbmRNYXRyaXhSb3coaW5wdXRQYXJhbWV0ZXJz
KTsKLQotICAgICAgICAgICAgaW5wdXRQYXJhbWV0ZXJzLmFwcGVuZChuYXJyb3dQcmVjaXNpb25U
b0Zsb2F0KDAuMzQ5IC0gMC4zNDkgKiBvbmVNaW51c0Ftb3VudCkpOwotICAgICAgICAgICAgaW5w
dXRQYXJhbWV0ZXJzLmFwcGVuZChuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuNjg2ICsgMC4zMTQg
KiBvbmVNaW51c0Ftb3VudCkpOwotICAgICAgICAgICAgaW5wdXRQYXJhbWV0ZXJzLmFwcGVuZChu
YXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMTY4IC0gMC4xNjggKiBvbmVNaW51c0Ftb3VudCkpOwot
ICAgICAgICAgICAgZW5kTWF0cml4Um93KGlucHV0UGFyYW1ldGVycyk7Ci0KLSAgICAgICAgICAg
IGlucHV0UGFyYW1ldGVycy5hcHBlbmQobmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjI3MiAtIDAu
MjcyICogb25lTWludXNBbW91bnQpKTsKLSAgICAgICAgICAgIGlucHV0UGFyYW1ldGVycy5hcHBl
bmQobmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjUzNCAtIDAuNTM0ICogb25lTWludXNBbW91bnQp
KTsKLSAgICAgICAgICAgIGlucHV0UGFyYW1ldGVycy5hcHBlbmQobmFycm93UHJlY2lzaW9uVG9G
bG9hdCgwLjEzMSArIDAuODY5ICogb25lTWludXNBbW91bnQpKTsKLSAgICAgICAgICAgIGVuZE1h
dHJpeFJvdyhpbnB1dFBhcmFtZXRlcnMpOwotCi0gICAgICAgICAgICBsYXN0TWF0cml4Um93KGlu
cHV0UGFyYW1ldGVycyk7Ci0KLSAgICAgICAgICAgIGVmZmVjdCA9IEZFQ29sb3JNYXRyaXg6OmNy
ZWF0ZSgqdGhpcywgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWCwgaW5wdXRQYXJhbWV0ZXJzKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0
aW9uOjpTQVRVUkFURTogewotICAgICAgICAgICAgYXV0byYgY29sb3JNYXRyaXhPcGVyYXRpb24g
PSBkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRp
b24pOwotICAgICAgICAgICAgVmVjdG9yPGZsb2F0PiBpbnB1dFBhcmFtZXRlcnM7Ci0gICAgICAg
ICAgICBpbnB1dFBhcmFtZXRlcnMuYXBwZW5kKG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29sb3JN
YXRyaXhPcGVyYXRpb24uYW1vdW50KCkpKTsKLSAgICAgICAgICAgIGVmZmVjdCA9IEZFQ29sb3JN
YXRyaXg6OmNyZWF0ZSgqdGhpcywgRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFLCBpbnB1dFBh
cmFtZXRlcnMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBG
aWx0ZXJPcGVyYXRpb246OkhVRV9ST1RBVEU6IHsKLSAgICAgICAgICAgIGF1dG8mIGNvbG9yTWF0
cml4T3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4o
ZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIFZlY3RvcjxmbG9hdD4gaW5wdXRQYXJhbWV0
ZXJzOwotICAgICAgICAgICAgaW5wdXRQYXJhbWV0ZXJzLmFwcGVuZChuYXJyb3dQcmVjaXNpb25U
b0Zsb2F0KGNvbG9yTWF0cml4T3BlcmF0aW9uLmFtb3VudCgpKSk7Ci0gICAgICAgICAgICBlZmZl
Y3QgPSBGRUNvbG9yTWF0cml4OjpjcmVhdGUoKnRoaXMsIEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVS
T1RBVEUsIGlucHV0UGFyYW1ldGVycyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SU5WRVJUOiB7Ci0gICAgICAgICAgICBhdXRv
JiBjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbiA9IGRvd25jYXN0PEJhc2ljQ29tcG9uZW50VHJh
bnNmZXJGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBDb21w
b25lbnRUcmFuc2ZlckZ1bmN0aW9uIHRyYW5zZmVyRnVuY3Rpb247Ci0gICAgICAgICAgICB0cmFu
c2ZlckZ1bmN0aW9uLnR5cGUgPSBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfVEFCTEU7Ci0gICAg
ICAgICAgICBWZWN0b3I8ZmxvYXQ+IHRyYW5zZmVyUGFyYW1ldGVyczsKLSAgICAgICAgICAgIHRy
YW5zZmVyUGFyYW1ldGVycy5hcHBlbmQobmFycm93UHJlY2lzaW9uVG9GbG9hdChjb21wb25lbnRU
cmFuc2Zlck9wZXJhdGlvbi5hbW91bnQoKSkpOwotICAgICAgICAgICAgdHJhbnNmZXJQYXJhbWV0
ZXJzLmFwcGVuZChuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDEgLSBjb21wb25lbnRUcmFuc2Zlck9w
ZXJhdGlvbi5hbW91bnQoKSkpOwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi50YWJsZVZh
bHVlcyA9IHRyYW5zZmVyUGFyYW1ldGVyczsKLQotICAgICAgICAgICAgQ29tcG9uZW50VHJhbnNm
ZXJGdW5jdGlvbiBudWxsRnVuY3Rpb247Ci0gICAgICAgICAgICBlZmZlY3QgPSBGRUNvbXBvbmVu
dFRyYW5zZmVyOjpjcmVhdGUoKnRoaXMsIHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rp
b24sIHRyYW5zZmVyRnVuY3Rpb24sIG51bGxGdW5jdGlvbik7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QVBQTEVfSU5WRVJUX0xJ
R0hUTkVTUzoKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBBUFBMRV9JTlZF
UlRfTElHSFRORVNTIGlzIG9ubHkgdXNlZCBpbiAtYXBwbGUtY29sb3ItZmlsdGVyLgotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpPUEFDSVRZOiB7Ci0g
ICAgICAgICAgICBhdXRvJiBjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbiA9IGRvd25jYXN0PEJh
c2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbik7Ci0g
ICAgICAgICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIHRyYW5zZmVyRnVuY3Rpb247Ci0g
ICAgICAgICAgICB0cmFuc2ZlckZ1bmN0aW9uLnR5cGUgPSBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZ
UEVfVEFCTEU7Ci0gICAgICAgICAgICBWZWN0b3I8ZmxvYXQ+IHRyYW5zZmVyUGFyYW1ldGVyczsK
LSAgICAgICAgICAgIHRyYW5zZmVyUGFyYW1ldGVycy5hcHBlbmQoMCk7Ci0gICAgICAgICAgICB0
cmFuc2ZlclBhcmFtZXRlcnMuYXBwZW5kKG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50
VHJhbnNmZXJPcGVyYXRpb24uYW1vdW50KCkpKTsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rp
b24udGFibGVWYWx1ZXMgPSB0cmFuc2ZlclBhcmFtZXRlcnM7Ci0KLSAgICAgICAgICAgIENvbXBv
bmVudFRyYW5zZmVyRnVuY3Rpb24gbnVsbEZ1bmN0aW9uOwotICAgICAgICAgICAgZWZmZWN0ID0g
RkVDb21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRlKCp0aGlzLCBudWxsRnVuY3Rpb24sIG51bGxGdW5j
dGlvbiwgbnVsbEZ1bmN0aW9uLCB0cmFuc2ZlckZ1bmN0aW9uKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCUklHSFRORVNTOiB7
Ci0gICAgICAgICAgICBhdXRvJiBjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbiA9IGRvd25jYXN0
PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbik7
Ci0gICAgICAgICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIHRyYW5zZmVyRnVuY3Rpb247
Ci0gICAgICAgICAgICB0cmFuc2ZlckZ1bmN0aW9uLnR5cGUgPSBGRUNPTVBPTkVOVFRSQU5TRkVS
X1RZUEVfTElORUFSOwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSA9IG5hcnJv
d1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24uYW1vdW50KCkpOwot
ICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi5pbnRlcmNlcHQgPSAwOwotCi0gICAgICAgICAg
ICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIG51bGxGdW5jdGlvbjsKLSAgICAgICAgICAgIGVm
ZmVjdCA9IEZFQ29tcG9uZW50VHJhbnNmZXI6OmNyZWF0ZSgqdGhpcywgdHJhbnNmZXJGdW5jdGlv
biwgdHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgbnVsbEZ1bmN0aW9uKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9u
OjpDT05UUkFTVDogewotICAgICAgICAgICAgYXV0byYgY29tcG9uZW50VHJhbnNmZXJPcGVyYXRp
b24gPSBkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPihmaWx0
ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiB0cmFu
c2ZlckZ1bmN0aW9uOwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi50eXBlID0gRkVDT01Q
T05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVBUjsKLSAgICAgICAgICAgIGZsb2F0IGFtb3VudCA9IG5h
cnJvd1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24uYW1vdW50KCkp
OwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSA9IGFtb3VudDsKLSAgICAgICAg
ICAgIHRyYW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0ID0gLTAuNSAqIGFtb3VudCArIDAuNTsKLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBudWxsRnVu
Y3Rpb247Ci0gICAgICAgICAgICBlZmZlY3QgPSBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUo
KnRoaXMsIHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rp
b24sIG51bGxGdW5jdGlvbik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QkxVUjogewotICAgICAgICAgICAgYXV0byYgYmx1ck9w
ZXJhdGlvbiA9IGRvd25jYXN0PEJsdXJGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbik7
Ci0gICAgICAgICAgICBmbG9hdCBzdGREZXZpYXRpb24gPSBmbG9hdFZhbHVlRm9yTGVuZ3RoKGJs
dXJPcGVyYXRpb24uc3RkRGV2aWF0aW9uKCksIDApOwotICAgICAgICAgICAgZWZmZWN0ID0gRkVH
YXVzc2lhbkJsdXI6OmNyZWF0ZSgqdGhpcywgc3RkRGV2aWF0aW9uLCBzdGREZXZpYXRpb24sIGNv
bnN1bWVyID09IEZpbHRlclByb3BlcnR5ID8gRURHRU1PREVfTk9ORSA6IEVER0VNT0RFX0RVUExJ
Q0FURSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEZpbHRl
ck9wZXJhdGlvbjo6RFJPUF9TSEFET1c6IHsKLSAgICAgICAgICAgIGF1dG8mIGRyb3BTaGFkb3dP
cGVyYXRpb24gPSBkb3duY2FzdDxEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVy
YXRpb24pOwotICAgICAgICAgICAgZWZmZWN0ID0gRkVEcm9wU2hhZG93OjpjcmVhdGUoKnRoaXMs
IGRyb3BTaGFkb3dPcGVyYXRpb24uc3RkRGV2aWF0aW9uKCksIGRyb3BTaGFkb3dPcGVyYXRpb24u
c3RkRGV2aWF0aW9uKCksCi0gICAgICAgICAgICAgICAgZHJvcFNoYWRvd09wZXJhdGlvbi54KCks
IGRyb3BTaGFkb3dPcGVyYXRpb24ueSgpLCBkcm9wU2hhZG93T3BlcmF0aW9uLmNvbG9yKCksIDEp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGVmZmVjdCkgewotICAgICAg
ICAgICAgLy8gVW5saWtlIFNWRyBGaWx0ZXJzIGFuZCBDU1NGaWx0ZXJJbWFnZXMsIGZpbHRlciBm
dW5jdGlvbnMgb24gdGhlIGZpbHRlcgotICAgICAgICAgICAgLy8gcHJvcGVydHkgYXBwbGllZCBo
ZXJlIHNob3VsZCBub3QgY2xpcCB0byB0aGVpciBwcmltaXRpdmUgc3VicmVnaW9ucy4KLSAgICAg
ICAgICAgIGVmZmVjdC0+c2V0Q2xpcHNUb0JvdW5kcyhjb25zdW1lciA9PSBGaWx0ZXJGdW5jdGlv
bik7Ci0gICAgICAgICAgICBlZmZlY3QtPnNldE9wZXJhdGluZ0NvbG9yU3BhY2UoQ29sb3JTcGFj
ZVNSR0IpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoZmlsdGVyT3BlcmF0aW9uLnR5
cGUoKSAhPSBGaWx0ZXJPcGVyYXRpb246OlJFRkVSRU5DRSkgewotICAgICAgICAgICAgICAgIGVm
ZmVjdC0+aW5wdXRFZmZlY3RzKCkuYXBwZW5kKFdURk1vdmUocHJldmlvdXNFZmZlY3QpKTsKLSAg
ICAgICAgICAgICAgICBtX2VmZmVjdHMuYXBwZW5kKCplZmZlY3QpOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgcHJldmlvdXNFZmZlY3QgPSBXVEZNb3ZlKGVmZmVjdCk7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICAvLyBJZiB3ZSBkaWRuJ3QgbWFrZSBhbnkgZWZmZWN0cywgdGVsbCBvdXIg
Y2FsbGVyIHdlIGFyZSBub3QgdmFsaWQuCi0gICAgaWYgKG1fZWZmZWN0cy5pc0VtcHR5KCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHNldE1heEVmZmVjdFJlY3RzKG1fc291cmNlRHJh
d2luZ1JlZ2lvbik7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRmlsdGVyRWZmZWN0UmVu
ZGVyZXI6OnVwZGF0ZUJhY2tpbmdTdG9yZVJlY3QoY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWN0
KQotewotICAgIGlmIChmaWx0ZXJSZWN0LmlzRW1wdHkoKSB8fCBJbWFnZUJ1ZmZlcjo6c2l6ZU5l
ZWRzQ2xhbXBpbmcoZmlsdGVyUmVjdC5zaXplKCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBpZiAoZmlsdGVyUmVjdCA9PSBzb3VyY2VJbWFnZVJlY3QoKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgc2V0U291cmNlSW1hZ2VSZWN0KGZpbHRlclJlY3QpOwotICAgIHJldHVy
biB0cnVlOwotfQotCi12b2lkIEZpbHRlckVmZmVjdFJlbmRlcmVyOjphbGxvY2F0ZUJhY2tpbmdT
dG9yZUlmTmVlZGVkKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgdGFyZ2V0Q29udGV4dCkKLXsKLSAg
ICAvLyBBdCB0aGlzIHBvaW50IHRoZSBlZmZlY3QgY2hhaW4gaGFzIGJlZW4gYnVpbHQsIGFuZCB0
aGUKLSAgICAvLyBzb3VyY2UgaW1hZ2Ugc2l6ZXMgc2V0LiBXZSBqdXN0IG5lZWQgdG8gYXR0YWNo
IHRoZSBncmFwaGljCi0gICAgLy8gYnVmZmVyIGlmIHdlIGhhdmUgbm90IHlldCBkb25lIHNvLgot
Ci0gICAgaWYgKG1fZ3JhcGhpY3NCdWZmZXJBdHRhY2hlZCkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgSW50U2l6ZSBsb2dpY2FsU2l6ZSB7IG1fc291cmNlRHJhd2luZ1JlZ2lvbi5zaXplKCkgfTsK
LSAgICBpZiAoIXNvdXJjZUltYWdlKCkgfHwgc291cmNlSW1hZ2UoKS0+bG9naWNhbFNpemUoKSAh
PSBsb2dpY2FsU2l6ZSkgewotI2lmIFVTRShESVJFQ1QyRCkKLSAgICAgICAgc2V0U291cmNlSW1h
Z2UoSW1hZ2VCdWZmZXI6OmNyZWF0ZShsb2dpY2FsU2l6ZSwgcmVuZGVyaW5nTW9kZSgpLCAmdGFy
Z2V0Q29udGV4dCwgZmlsdGVyU2NhbGUoKSkpOwotI2Vsc2UKLSAgICAgICAgVU5VU0VEX1BBUkFN
KHRhcmdldENvbnRleHQpOwotICAgICAgICBzZXRTb3VyY2VJbWFnZShJbWFnZUJ1ZmZlcjo6Y3Jl
YXRlKGxvZ2ljYWxTaXplLCByZW5kZXJpbmdNb2RlKCksIGZpbHRlclNjYWxlKCkpKTsKLSNlbmRp
ZgotICAgIH0KLSAgICBtX2dyYXBoaWNzQnVmZmVyQXR0YWNoZWQgPSB0cnVlOwotfQotCi12b2lk
IEZpbHRlckVmZmVjdFJlbmRlcmVyOjpjbGVhckludGVybWVkaWF0ZVJlc3VsdHMoKQotewotICAg
IG1fc291cmNlR3JhcGhpYy0+Y2xlYXJSZXN1bHQoKTsKLSAgICBmb3IgKGF1dG8mIGVmZmVjdCA6
IG1fZWZmZWN0cykKLSAgICAgICAgZWZmZWN0LT5jbGVhclJlc3VsdCgpOwotfQotCi12b2lkIEZp
bHRlckVmZmVjdFJlbmRlcmVyOjphcHBseSgpCi17Ci0gICAgYXV0byYgZWZmZWN0ID0gbV9lZmZl
Y3RzLmxhc3QoKS5nZXQoKTsKLSAgICBlZmZlY3QuYXBwbHkoKTsKLSAgICBlZmZlY3QudHJhbnNm
b3JtUmVzdWx0Q29sb3JTcGFjZShDb2xvclNwYWNlU1JHQik7Ci19Ci0KLUxheW91dFJlY3QgRmls
dGVyRWZmZWN0UmVuZGVyZXI6OmNvbXB1dGVTb3VyY2VJbWFnZVJlY3RGb3JEaXJ0eVJlY3QoY29u
c3QgTGF5b3V0UmVjdCYgZmlsdGVyQm94UmVjdCwgY29uc3QgTGF5b3V0UmVjdCYgZGlydHlSZWN0
KQotewotICAgIC8vIFRoZSByZXN1bHQgb2YgdGhpcyBmdW5jdGlvbiBpcyB0aGUgYXJlYSBpbiB0
aGUgImZpbHRlckJveFJlY3QiIHRoYXQgbmVlZHMgdG8gYmUgcmVwYWludGVkLCBzbyB0aGF0IHdl
IGZ1bGx5IGNvdmVyIHRoZSAiZGlydHlSZWN0Ii4KLSAgICBhdXRvIHJlY3RGb3JSZXBhaW50ID0g
ZGlydHlSZWN0OwotICAgIGlmIChoYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMoKSkgewotICAgICAg
ICAvLyBOb3RlIHRoYXQgdGhlIG91dHNldHMgYXJlIHJldmVyc2VkIGhlcmUgYmVjYXVzZSB3ZSBh
cmUgZ29pbmcgYmFja3dhcmRzIC0+IHdlIGhhdmUgdGhlIGRpcnR5IHJlY3QgYW5kCi0gICAgICAg
IC8vIG5lZWQgdG8gZmluZCBvdXQgd2hhdCBpcyB0aGUgcmVjdGFuZ2xlIHRoYXQgbWlnaHQgaW5m
bHVlbmNlIHRoZSByZXN1bHQgaW5zaWRlIHRoYXQgZGlydHkgcmVjdC4KLSAgICAgICAgcmVjdEZv
clJlcGFpbnQubW92ZSgtbV9vdXRzZXRzLnJpZ2h0KCksIC1tX291dHNldHMuYm90dG9tKCkpOwot
ICAgICAgICByZWN0Rm9yUmVwYWludC5leHBhbmQobV9vdXRzZXRzLmxlZnQoKSArIG1fb3V0c2V0
cy5yaWdodCgpLCBtX291dHNldHMudG9wKCkgKyBtX291dHNldHMuYm90dG9tKCkpOwotICAgIH0K
LSAgICByZWN0Rm9yUmVwYWludC5pbnRlcnNlY3QoZmlsdGVyQm94UmVjdCk7Ci0gICAgcmV0dXJu
IHJlY3RGb3JSZXBhaW50OwotfQotCi1JbWFnZUJ1ZmZlciogRmlsdGVyRWZmZWN0UmVuZGVyZXI6
Om91dHB1dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZWZmZWN0cy5sYXN0KCktPmltYWdlQnVm
ZmVyUmVzdWx0KCk7Ci19Ci0KLXZvaWQgRmlsdGVyRWZmZWN0UmVuZGVyZXI6OnNldE1heEVmZmVj
dFJlY3RzKGNvbnN0IEZsb2F0UmVjdCYgZWZmZWN0UmVjdCkKLXsKLSAgICBmb3IgKGF1dG8mIGVm
ZmVjdCA6IG1fZWZmZWN0cykKLSAgICAgICAgZWZmZWN0LT5zZXRNYXhFZmZlY3RSZWN0KGVmZmVj
dFJlY3QpOwotfQotCi1JbnRSZWN0IEZpbHRlckVmZmVjdFJlbmRlcmVyOjpvdXRwdXRSZWN0KCkg
Y29uc3QKLXsKLSAgICBhdXRvJiBsYXN0RWZmZWN0ID0gbV9lZmZlY3RzLmxhc3QoKS5nZXQoKTsK
LSAgICBpZiAoIWxhc3RFZmZlY3QuaGFzUmVzdWx0KCkpCi0gICAgICAgIHJldHVybiB7IH07Ci0g
ICAgcmV0dXJuIGxhc3RFZmZlY3QucmVxdWVzdGVkUmVnaW9uT2ZJbnB1dEltYWdlRGF0YShJbnRS
ZWN0IHsgbV9maWx0ZXJSZWdpb24gfSk7Ci19Ci0KIGJvb2wgRmlsdGVyRWZmZWN0UmVuZGVyZXJI
ZWxwZXI6OnByZXBhcmVGaWx0ZXJFZmZlY3QoUmVuZGVyTGF5ZXImIGxheWVyLCBjb25zdCBMYXlv
dXRSZWN0JiBmaWx0ZXJCb3hSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBkaXJ0eVJlY3QsIGNvbnN0
IExheW91dFJlY3QmIGxheWVyUmVwYWludFJlY3QpCiB7CiAgICAgQVNTRVJUKG1faGF2ZUZpbHRl
ckVmZmVjdCk7Ci0gICAgQVNTRVJUKGxheWVyLmZpbHRlclJlbmRlcmVyKCkpOworICAgIEFTU0VS
VChsYXllci5maWx0ZXIoKSk7CiAKLSAgICBhdXRvJiBmaWx0ZXIgPSAqbGF5ZXIuZmlsdGVyUmVu
ZGVyZXIoKTsKKyAgICBhdXRvJiBmaWx0ZXIgPSAqbGF5ZXIuZmlsdGVyKCk7CiAgICAgYXV0byBm
aWx0ZXJTb3VyY2VSZWN0ID0gZmlsdGVyLmNvbXB1dGVTb3VyY2VJbWFnZVJlY3RGb3JEaXJ0eVJl
Y3QoZmlsdGVyQm94UmVjdCwgZGlydHlSZWN0KTsKIAogICAgIGlmIChmaWx0ZXJTb3VyY2VSZWN0
LmlzRW1wdHkoKSkgewpAQCAtNDI0LDE1ICs4OCwxNSBAQCBHcmFwaGljc0NvbnRleHQqIEZpbHRl
ckVmZmVjdFJlbmRlcmVySGVscGVyOjpmaWx0ZXJDb250ZXh0KCkgY29uc3QKIHsKICAgICBpZiAo
IW1faGF2ZUZpbHRlckVmZmVjdCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJu
IG1fcmVuZGVyTGF5ZXItPmZpbHRlclJlbmRlcmVyKCktPmlucHV0Q29udGV4dCgpOworICAgIHJl
dHVybiBtX3JlbmRlckxheWVyLT5maWx0ZXIoKS0+aW5wdXRDb250ZXh0KCk7CiB9CiAKIGJvb2wg
RmlsdGVyRWZmZWN0UmVuZGVyZXJIZWxwZXI6OmJlZ2luRmlsdGVyRWZmZWN0KCkKIHsKICAgICBB
U1NFUlQobV9yZW5kZXJMYXllcik7Ci0gICAgQVNTRVJUKG1fcmVuZGVyTGF5ZXItPmZpbHRlclJl
bmRlcmVyKCkpOworICAgIEFTU0VSVChtX3JlbmRlckxheWVyLT5maWx0ZXIoKSk7CiAKLSAgICBh
dXRvJiBmaWx0ZXIgPSAqbV9yZW5kZXJMYXllci0+ZmlsdGVyUmVuZGVyZXIoKTsKKyAgICBhdXRv
JiBmaWx0ZXIgPSAqbV9yZW5kZXJMYXllci0+ZmlsdGVyKCk7CiAgICAgZmlsdGVyLmFsbG9jYXRl
QmFja2luZ1N0b3JlSWZOZWVkZWQobV90YXJnZXRDb250ZXh0KTsKICAgICAvLyBQYWludCBpbnRv
IHRoZSBjb250ZXh0IHRoYXQgcmVwcmVzZW50cyB0aGUgU291cmNlR3JhcGhpYyBvZiB0aGUgZmls
dGVyLgogICAgIGF1dG8qIHNvdXJjZUdyYXBoaWNzQ29udGV4dCA9IGZpbHRlci5pbnB1dENvbnRl
eHQoKTsKQEAgLTQ1NiwxMiArMTIwLDEyIEBAIHZvaWQgRmlsdGVyRWZmZWN0UmVuZGVyZXJIZWxw
ZXI6OmFwcGx5RmlsdGVyRWZmZWN0KEdyYXBoaWNzQ29udGV4dCYgZGVzdGluYXRpb25DCiB7CiAg
ICAgQVNTRVJUKG1faGF2ZUZpbHRlckVmZmVjdCk7CiAgICAgQVNTRVJUKG1fcmVuZGVyTGF5ZXIp
OwotICAgIEFTU0VSVChtX3JlbmRlckxheWVyLT5maWx0ZXJSZW5kZXJlcigpKTsKLSAgICBBU1NF
UlQobV9yZW5kZXJMYXllci0+ZmlsdGVyUmVuZGVyZXIoKS0+aW5wdXRDb250ZXh0KCkpOworICAg
IEFTU0VSVChtX3JlbmRlckxheWVyLT5maWx0ZXIoKSk7CisgICAgQVNTRVJUKG1fcmVuZGVyTGF5
ZXItPmZpbHRlcigpLT5pbnB1dENvbnRleHQoKSk7CiAKICAgICBMT0dfV0lUSF9TVFJFQU0oRmls
dGVycywgc3RyZWFtIDw8ICJcbkZpbHRlckVmZmVjdFJlbmRlcmVySGVscGVyICIgPDwgdGhpcyA8
PCAiIGFwcGx5RmlsdGVyRWZmZWN0Iik7CiAKLSAgICBhdXRvJiBmaWx0ZXIgPSAqbV9yZW5kZXJM
YXllci0+ZmlsdGVyUmVuZGVyZXIoKTsKKyAgICBhdXRvJiBmaWx0ZXIgPSAqbV9yZW5kZXJMYXll
ci0+ZmlsdGVyKCk7CiAgICAgZmlsdGVyLmlucHV0Q29udGV4dCgpLT5yZXN0b3JlKCk7CiAKICAg
ICBmaWx0ZXIuYXBwbHkoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9G
aWx0ZXJFZmZlY3RSZW5kZXJlci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0ZpbHRlckVm
ZmVjdFJlbmRlcmVyLmgKaW5kZXggNGI0NDkyZDUzMDhkNDM3ODY1M2ZkZmNkYjdhMGU1MzE1Y2Rl
NmE5Yy4uM2ZiMWEzNDI3ZjJiOTBiZDcxZTNiODc3ZTNmODEyMTkyNWZmN2Q3YSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmgKQEAgLTI1LDI3
ICsyNSwyMiBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1
ZGUgIkludFJlY3RFeHRlbnQuaCIKICNpbmNsdWRlICJMYXlvdXRSZWN0LmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogY2xhc3MgRG9jdW1lbnQ7Ci1jbGFzcyBGaWx0ZXJFZmZlY3Q7Ci1jbGFz
cyBGaWx0ZXJPcGVyYXRpb25zOwogY2xhc3MgR3JhcGhpY3NDb250ZXh0OwotY2xhc3MgUmVmZXJl
bmNlRmlsdGVyT3BlcmF0aW9uOwotY2xhc3MgUmVuZGVyRWxlbWVudDsKIGNsYXNzIFJlbmRlckxh
eWVyOwotY2xhc3MgU291cmNlR3JhcGhpYzsKLQotZW51bSBGaWx0ZXJDb25zdW1lciB7IEZpbHRl
clByb3BlcnR5LCBGaWx0ZXJGdW5jdGlvbiB9OwogCiBjbGFzcyBGaWx0ZXJFZmZlY3RSZW5kZXJl
ckhlbHBlciB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgRmls
dGVyRWZmZWN0UmVuZGVyZXJIZWxwZXIoYm9vbCBoYXZlRmlsdGVyRWZmZWN0LCBHcmFwaGljc0Nv
bnRleHQmIHRhcmdldENvbnRleHQpOworICAgIEZpbHRlckVmZmVjdFJlbmRlcmVySGVscGVyKGJv
b2wgaGF2ZUZpbHRlckVmZmVjdCwgR3JhcGhpY3NDb250ZXh0JiB0YXJnZXRDb250ZXh0KQorICAg
ICAgICA6IG1fdGFyZ2V0Q29udGV4dCh0YXJnZXRDb250ZXh0KQorICAgICAgICAsIG1faGF2ZUZp
bHRlckVmZmVjdChoYXZlRmlsdGVyRWZmZWN0KQorICAgIHsKKyAgICB9CiAKICAgICBib29sIGhh
dmVGaWx0ZXJFZmZlY3QoKSBjb25zdCB7IHJldHVybiBtX2hhdmVGaWx0ZXJFZmZlY3Q7IH0KICAg
ICBib29sIGhhc1N0YXJ0ZWRGaWx0ZXJFZmZlY3QoKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0ZWRG
aWx0ZXJFZmZlY3Q7IH0KQEAgLTU5LDcgKzU0LDcgQEAgcHVibGljOgogICAgIGNvbnN0IExheW91
dFJlY3QmIHJlcGFpbnRSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZXBhaW50UmVjdDsgfQogCiBw
cml2YXRlOgotICAgIFJlbmRlckxheWVyKiBtX3JlbmRlckxheWVyIHsgbnVsbHB0ciB9OyAvLyBG
SVhNRTogdGhpcyBpcyBtYWlubHkgdXNlZCB0byBnZXQgdGhlIEZpbHRlckVmZmVjdFJlbmRlcmVy
LiBGaWx0ZXJFZmZlY3RSZW5kZXJlckhlbHBlciBzaG91bGQgYmUgd2VhbmVkIG9mZiBpdC4KKyAg
ICBSZW5kZXJMYXllciogbV9yZW5kZXJMYXllciB7IG51bGxwdHIgfTsgLy8gRklYTUU6IHRoaXMg
aXMgbWFpbmx5IHVzZWQgdG8gZ2V0IHRoZSBDU1NGaWx0ZXIuIEZpbHRlckVmZmVjdFJlbmRlcmVy
SGVscGVyIHNob3VsZCBiZSB3ZWFuZWQgb2ZmIGl0LgogICAgIExheW91dFBvaW50IG1fcGFpbnRP
ZmZzZXQ7CiAgICAgTGF5b3V0UmVjdCBtX3JlcGFpbnRSZWN0OwogICAgIGNvbnN0IEdyYXBoaWNz
Q29udGV4dCYgbV90YXJnZXRDb250ZXh0OwpAQCAtNjcsNzEgKzYyLDQgQEAgcHJpdmF0ZToKICAg
ICBib29sIG1fc3RhcnRlZEZpbHRlckVmZmVjdCB7IGZhbHNlIH07CiB9OwogCi0vLyBUaGlzIGlz
IHVzZWQgdG8gcmVuZGVyIGZpbHRlcnMgZm9yIHRoZSBDU1MgZmlsdGVyOiBwcm9wZXJ0eSwgYW5k
IHRoZSBmaWx0ZXIoKSBpbWFnZSBmdW5jdGlvbi4KLWNsYXNzIEZpbHRlckVmZmVjdFJlbmRlcmVy
IGZpbmFsIDogcHVibGljIEZpbHRlciB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1w
dWJsaWM6Ci0gICAgZnJpZW5kIGNsYXNzIEZpbHRlckVmZmVjdFJlbmRlcmVySGVscGVyOwotCi0g
ICAgc3RhdGljIFJlZjxGaWx0ZXJFZmZlY3RSZW5kZXJlcj4gY3JlYXRlKCk7Ci0KLSAgICB2b2lk
IHNldFNvdXJjZUltYWdlUmVjdChjb25zdCBGbG9hdFJlY3QmKTsKLSAgICB2b2lkIHNldEZpbHRl
clJlZ2lvbihjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lvbikgeyBtX2ZpbHRlclJlZ2lvbiA9
IGZpbHRlclJlZ2lvbjsgfQotCi0gICAgSW1hZ2VCdWZmZXIqIG91dHB1dCgpIGNvbnN0OwotCi0g
ICAgYm9vbCBidWlsZChSZW5kZXJFbGVtZW50JiwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYsIEZp
bHRlckNvbnN1bWVyKTsKLSAgICB2b2lkIGNsZWFySW50ZXJtZWRpYXRlUmVzdWx0cygpOwotICAg
IHZvaWQgYXBwbHkoKTsKLQotICAgIGJvb2wgaGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzKCkgY29u
c3QgeyByZXR1cm4gbV9oYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHM7IH0KLSAgICBib29sIGhhc0Zp
bHRlclRoYXRTaG91bGRCZVJlc3RyaWN0ZWRCeVNlY3VyaXR5T3JpZ2luKCkgY29uc3QgeyByZXR1
cm4gbV9oYXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1cml0eU9yaWdpbjsgfQot
Ci1wcml2YXRlOgotICAgIEZpbHRlckVmZmVjdFJlbmRlcmVyKCk7Ci0gICAgdmlydHVhbCB+Rmls
dGVyRWZmZWN0UmVuZGVyZXIoKTsKLQotICAgIEZsb2F0UmVjdCBzb3VyY2VJbWFnZVJlY3QoKSBj
b25zdCBmaW5hbCB7IHJldHVybiBtX3NvdXJjZURyYXdpbmdSZWdpb247IH0KLSAgICBGbG9hdFJl
Y3QgZmlsdGVyUmVnaW9uKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9maWx0ZXJSZWdpb247IH0K
LQotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkUmVmZXJlbmNlRmlsdGVyKFJlbmRlckVs
ZW1lbnQmLCBGaWx0ZXJFZmZlY3QmIHByZXZpb3VzRWZmZWN0LCBSZWZlcmVuY2VGaWx0ZXJPcGVy
YXRpb24mKTsKLQotICAgIHZvaWQgc2V0TWF4RWZmZWN0UmVjdHMoY29uc3QgRmxvYXRSZWN0Jik7
Ci0KLSAgICBHcmFwaGljc0NvbnRleHQqIGlucHV0Q29udGV4dCgpOwotCi0gICAgYm9vbCB1cGRh
dGVCYWNraW5nU3RvcmVSZWN0KGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVjdCk7Ci0gICAgdm9p
ZCBhbGxvY2F0ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOwot
Ci0gICAgSW50UmVjdCBvdXRwdXRSZWN0KCkgY29uc3Q7Ci0KLSAgICBMYXlvdXRSZWN0IGNvbXB1
dGVTb3VyY2VJbWFnZVJlY3RGb3JEaXJ0eVJlY3QoY29uc3QgTGF5b3V0UmVjdCYgZmlsdGVyQm94
UmVjdCwgY29uc3QgTGF5b3V0UmVjdCYgZGlydHlSZWN0KTsKLQotICAgIEZsb2F0UmVjdCBtX3Nv
dXJjZURyYXdpbmdSZWdpb247Ci0gICAgRmxvYXRSZWN0IG1fZmlsdGVyUmVnaW9uOwotCi0gICAg
VmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+PiBtX2VmZmVjdHM7Ci0gICAgUmVmPFNvdXJjZUdyYXBo
aWM+IG1fc291cmNlR3JhcGhpYzsKLQotICAgIEludFJlY3RFeHRlbnQgbV9vdXRzZXRzOwotCi0g
ICAgYm9vbCBtX2dyYXBoaWNzQnVmZmVyQXR0YWNoZWQgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9o
YXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9oYXNGaWx0ZXJU
aGF0U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1cml0eU9yaWdpbiB7IGZhbHNlIH07Ci19OwotCi1p
bmxpbmUgRmlsdGVyRWZmZWN0UmVuZGVyZXJIZWxwZXI6OkZpbHRlckVmZmVjdFJlbmRlcmVySGVs
cGVyKGJvb2wgaGF2ZUZpbHRlckVmZmVjdCwgR3JhcGhpY3NDb250ZXh0JiB0YXJnZXRDb250ZXh0
KQotICAgIDogbV90YXJnZXRDb250ZXh0KHRhcmdldENvbnRleHQpCi0gICAgLCBtX2hhdmVGaWx0
ZXJFZmZlY3QoaGF2ZUZpbHRlckVmZmVjdCkKLXsKLX0KLQotaW5saW5lIHZvaWQgRmlsdGVyRWZm
ZWN0UmVuZGVyZXI6OnNldFNvdXJjZUltYWdlUmVjdChjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUlt
YWdlUmVjdCkKLXsKLSAgICBtX3NvdXJjZURyYXdpbmdSZWdpb24gPSBzb3VyY2VJbWFnZVJlY3Q7
Ci0gICAgc2V0TWF4RWZmZWN0UmVjdHMoc291cmNlSW1hZ2VSZWN0KTsKLSAgICBzZXRGaWx0ZXJS
ZWdpb24oc291cmNlSW1hZ2VSZWN0KTsKLSAgICBtX2dyYXBoaWNzQnVmZmVyQXR0YWNoZWQgPSBm
YWxzZTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcAppbmRleCAzOWE5MDAzYmQ2ZmMzZTMxYzQ2ZGMwZDcz
M2M1ODRhZmM3YTlkNTUxLi4xOTQxNDI3NjEzZTIzYzFlMTU0MTQzMzYzMmU3YWViNDMxZmIzYzU0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcApAQCAt
MzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIkhpdFRlc3RMb2NhdGlvbi5oIgogI2luY2x1ZGUgIklu
bGluZVRleHRCb3guaCIKICNpbmNsdWRlICJMYXlvdXRSZXBhaW50ZXIuaCIKKyNpbmNsdWRlICJM
YXlvdXRTdGF0ZS5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJSZW5kZXJDb21i
aW5lVGV4dC5oIgogI2luY2x1ZGUgIlJlbmRlckZsZXhpYmxlQm94LmgiCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhbWUuY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckZyYW1lLmNwcAppbmRleCAxYzI5MTU1Y2RhMmNjNWRjZDRiZTM1Zjlh
MTlmNTg0YWQ3YTE3OTI4Li4zN2NjZDMwZWFjMDljNWM0NTliMTk2OWMyZDcwMWQ4M2EyY2NkMTk0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhbWUuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFtZS5jcHAKQEAgLTI2LDYgKzI2
LDcgQEAKIAogI2luY2x1ZGUgIkhUTUxGcmFtZUVsZW1lbnQuaCIKICNpbmNsdWRlICJSZW5kZXJG
cmFtZVNldC5oIgorI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAKaW5k
ZXggNmM2YWFmYjdlNDU4NmYxN2Q3ZjI3MDhlMjUyYTEzZmZlMjJhYmU4MS4uN2JjZmE2YWRmNDYx
OTcxN2QyN2I5NjI5MzliOTIyYTVmYmE5NzQwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVySW1hZ2UuY3BwCkBAIC00NSw2ICs0NSw3IEBACiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgi
CiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIklubGluZUVsZW1lbnRCb3gu
aCIKKyNpbmNsdWRlICJMYXlvdXRTdGF0ZS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRl
ICJQYWludEluZm8uaCIKICNpbmNsdWRlICJSZW5kZXJGcmFnbWVudGVkRmxvdy5oIgpAQCAtNTMs
NiArNTQsNyBAQAogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJSdW50aW1lRW5h
YmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiU1ZHSW1hZ2UuaCIKKyNpbmNsdWRlICJTZXR0aW5n
cy5oIgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CiAjaW5jbHVkZSA8d3RmL1N0
YWNrU3RhdHMuaD4KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKaW5k
ZXggOTgxYWIzMGQ2OTQ3ZDZlZTk5ZGEyY2E0NjdlZjJjNTFiZTlkNmZiYy4uOGEwNzRiNDIwNjZm
MjFlMDU5ZWIxOWEyMzg2NDE1YTE3ODhiODM1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXIuY3BwCkBAIC00Niw2ICs0Niw3IEBACiAKICNpbmNsdWRlICJCb3hTaGFwZS5o
IgogI2luY2x1ZGUgIkNTU0FuaW1hdGlvbkNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJDU1NGaWx0
ZXIuaCIKICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCiAjaW5jbHVkZSAiQ2hyb21lLmgi
CiAjaW5jbHVkZSAiRGVidWdQYWdlT3ZlcmxheXMuaCIKQEAgLTQ2MSwxNCArNDYyLDE0IEBAIGJv
b2wgUmVuZGVyTGF5ZXI6OnJlcXVpcmVzRnVsbExheWVySW1hZ2VGb3JGaWx0ZXJzKCkgY29uc3QK
IHsKICAgICBpZiAoIXBhaW50c1dpdGhGaWx0ZXJzKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBhdXRvKiByZW5kZXJlciA9IGZpbHRlclJlbmRlcmVyKCk7Ci0gICAgcmV0dXJuIHJlbmRl
cmVyICYmIHJlbmRlcmVyLT5oYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMoKTsKKyAgICBhdXRvKiBj
c3NGaWx0ZXIgPSBmaWx0ZXIoKTsKKyAgICByZXR1cm4gY3NzRmlsdGVyICYmIGNzc0ZpbHRlci0+
aGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzKCk7CiB9CiAKLUZpbHRlckVmZmVjdFJlbmRlcmVyKiBS
ZW5kZXJMYXllcjo6ZmlsdGVyUmVuZGVyZXIoKSBjb25zdAorQ1NTRmlsdGVyKiBSZW5kZXJMYXll
cjo6ZmlsdGVyKCkgY29uc3QKIHsKICAgICBhdXRvKiBmaWx0ZXJJbmZvID0gRmlsdGVySW5mbzo6
Z2V0SWZFeGlzdHMoKnRoaXMpOwotICAgIHJldHVybiBmaWx0ZXJJbmZvID8gZmlsdGVySW5mby0+
cmVuZGVyZXIoKSA6IG51bGxwdHI7CisgICAgcmV0dXJuIGZpbHRlckluZm8gPyBmaWx0ZXJJbmZv
LT5maWx0ZXIoKSA6IG51bGxwdHI7CiB9CiAKIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVy
UG9zaXRpb25zQWZ0ZXJMYXlvdXQoY29uc3QgUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgT3B0aW9u
U2V0PFVwZGF0ZUxheWVyUG9zaXRpb25zRmxhZz4gZmxhZ3MpCkBAIC00MjA3LDcgKzQyMDgsNyBA
QCBzdGQ6OnBhaXI8UmVuZGVyTGF5ZXI6OkZpbHRlckluZm8qLCBzdGQ6OnVuaXF1ZV9wdHI8Rmls
dGVyRWZmZWN0UmVuZGVyZXJIZWxwZXI+PgogICAgICAgICByZXR1cm4geyB9OwogCiAgICAgYXV0
byogaW5mbyA9IEZpbHRlckluZm86OmdldElmRXhpc3RzKCp0aGlzKTsKLSAgICBpZiAoIWluZm8g
fHwgIWluZm8tPnJlbmRlcmVyKCkpCisgICAgaWYgKCFpbmZvIHx8ICFpbmZvLT5maWx0ZXIoKSkK
ICAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIGF1dG8gaGVscGVyID0gc3RkOjptYWtlX3VuaXF1
ZTxGaWx0ZXJFZmZlY3RSZW5kZXJlckhlbHBlcj4odHJ1ZSwgY29udGV4dCk7CkBAIC00MjUzLDkg
KzQyNTQsOSBAQCBzdGQ6OnVuaXF1ZV9wdHI8RmlsdGVyRWZmZWN0UmVuZGVyZXJIZWxwZXI+IFJl
bmRlckxheWVyOjpzZXR1cEZpbHRlcnMoR3JhcGhpY3NDbwogICAgIC8vIElmIHRoZSBmaWx0ZXIg
bmVlZHMgdGhlIGZ1bGwgc291cmNlIGltYWdlLCB3ZSBuZWVkIHRvIGF2b2lkIHVzaW5nIHRoZSBj
bGlwIHJlY3RhbmdsZXMuCiAgICAgLy8gT3RoZXJ3aXNlLCBpZiBmb3IgZXhhbXBsZSB0aGlzIGxh
eWVyIGhhcyBvdmVyZmxvdzpoaWRkZW4sIGEgZHJvcCBzaGFkb3cgd2lsbCBub3QgY29tcHV0ZSBj
b3JyZWN0bHkuCiAgICAgLy8gTm90ZSB0aGF0IHdlIHdpbGwgc3RpbGwgYXBwbHkgdGhlIGNsaXBw
aW5nIG9uIHRoZSBmaW5hbCByZW5kZXJpbmcgb2YgdGhlIGZpbHRlci4KLSAgICBwYWludGluZ0lu
Zm8uY2xpcFRvRGlydHlSZWN0ID0gIWZpbHRlckluZm8ucmVuZGVyZXIoKS0+aGFzRmlsdGVyVGhh
dE1vdmVzUGl4ZWxzKCk7CisgICAgcGFpbnRpbmdJbmZvLmNsaXBUb0RpcnR5UmVjdCA9ICFmaWx0
ZXJJbmZvLmZpbHRlcigpLT5oYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMoKTsKIAotICAgIHBhaW50
aW5nSW5mby5yZXF1aXJlU2VjdXJpdHlPcmlnaW5BY2Nlc3NGb3JXaWRnZXRzID0gZmlsdGVySW5m
by5yZW5kZXJlcigpLT5oYXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1cml0eU9y
aWdpbigpOworICAgIHBhaW50aW5nSW5mby5yZXF1aXJlU2VjdXJpdHlPcmlnaW5BY2Nlc3NGb3JX
aWRnZXRzID0gZmlsdGVySW5mby5maWx0ZXIoKS0+aGFzRmlsdGVyVGhhdFNob3VsZEJlUmVzdHJp
Y3RlZEJ5U2VjdXJpdHlPcmlnaW4oKTsKIAogICAgIHJldHVybiBXVEZNb3ZlKHBhaW50ZXIuc2Vj
b25kKTsKIH0KQEAgLTY4ODIsNyArNjg4Myw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZU9y
UmVtb3ZlRmlsdGVyRWZmZWN0UmVuZGVyZXIoKQogICAgICAgICAvLyBEb24ndCBkZWxldGUgdGhl
IHdob2xlIGZpbHRlciBpbmZvIGhlcmUsIGJlY2F1c2Ugd2UgbWlnaHQgdXNlIGl0CiAgICAgICAg
IC8vIGZvciBsb2FkaW5nIFNWRyByZWZlcmVuY2UgZmlsdGVyIGZpbGVzLgogICAgICAgICBpZiAo
RmlsdGVySW5mbyogZmlsdGVySW5mbyA9IEZpbHRlckluZm86OmdldElmRXhpc3RzKCp0aGlzKSkK
LSAgICAgICAgICAgIGZpbHRlckluZm8tPnNldFJlbmRlcmVyKG51bGxwdHIpOworICAgICAgICAg
ICAgZmlsdGVySW5mby0+c2V0RmlsdGVyKG51bGxwdHIpOwogCiAgICAgICAgIC8vIEVhcmx5LXJl
dHVybiBvbmx5IGlmIHdlICpkb24ndCogaGF2ZSByZWZlcmVuY2UgZmlsdGVycy4KICAgICAgICAg
Ly8gRm9yIHJlZmVyZW5jZSBmaWx0ZXJzLCB3ZSBzdGlsbCB3YW50IHRoZSBGaWx0ZXJFZmZlY3Qg
Z3JhcGggYnVpbHQKQEAgLTY4OTIsMjMgKzY4OTMsMjMgQEAgdm9pZCBSZW5kZXJMYXllcjo6dXBk
YXRlT3JSZW1vdmVGaWx0ZXJFZmZlY3RSZW5kZXJlcigpCiAgICAgfQogICAgIAogICAgIEZpbHRl
ckluZm8mIGZpbHRlckluZm8gPSBGaWx0ZXJJbmZvOjpnZXQoKnRoaXMpOwotICAgIGlmICghZmls
dGVySW5mby5yZW5kZXJlcigpKSB7Ci0gICAgICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3RSZW5kZXJl
cj4gZmlsdGVyUmVuZGVyZXIgPSBGaWx0ZXJFZmZlY3RSZW5kZXJlcjo6Y3JlYXRlKCk7Ci0gICAg
ICAgIGZpbHRlclJlbmRlcmVyLT5zZXRGaWx0ZXJTY2FsZShwYWdlKCkuZGV2aWNlU2NhbGVGYWN0
b3IoKSk7Ci0gICAgICAgIGZpbHRlclJlbmRlcmVyLT5zZXRSZW5kZXJpbmdNb2RlKHJlbmRlcmVy
KCkuc2V0dGluZ3MoKS5hY2NlbGVyYXRlZEZpbHRlcnNFbmFibGVkKCkgPyBBY2NlbGVyYXRlZCA6
IFVuYWNjZWxlcmF0ZWQpOwotICAgICAgICBmaWx0ZXJJbmZvLnNldFJlbmRlcmVyKFdURk1vdmUo
ZmlsdGVyUmVuZGVyZXIpKTsKKyAgICBpZiAoIWZpbHRlckluZm8uZmlsdGVyKCkpIHsKKyAgICAg
ICAgYXV0byBjc3NGaWx0ZXIgPSBDU1NGaWx0ZXI6OmNyZWF0ZSgpOworICAgICAgICBjc3NGaWx0
ZXItPnNldEZpbHRlclNjYWxlKHBhZ2UoKS5kZXZpY2VTY2FsZUZhY3RvcigpKTsKKyAgICAgICAg
Y3NzRmlsdGVyLT5zZXRSZW5kZXJpbmdNb2RlKHJlbmRlcmVyKCkuc2V0dGluZ3MoKS5hY2NlbGVy
YXRlZEZpbHRlcnNFbmFibGVkKCkgPyBBY2NlbGVyYXRlZCA6IFVuYWNjZWxlcmF0ZWQpOworICAg
ICAgICBmaWx0ZXJJbmZvLnNldEZpbHRlcihXVEZNb3ZlKGNzc0ZpbHRlcikpOwogICAgICAgICAK
ICAgICAgICAgLy8gV2UgY2FuIG9wdGltaXplIGF3YXkgY29kZSBwYXRocyBpbiBvdGhlciBwbGFj
ZXMgaWYgd2Uga25vdyB0aGF0IHRoZXJlIGFyZSBubyBzb2Z0d2FyZSBmaWx0ZXJzLgogICAgICAg
ICByZW5kZXJlcigpLnZpZXcoKS5zZXRIYXNTb2Z0d2FyZUZpbHRlcnModHJ1ZSk7Ci0gICAgfSBl
bHNlIGlmIChmaWx0ZXJJbmZvLnJlbmRlcmVyKCktPmZpbHRlclNjYWxlKCkgIT0gcGFnZSgpLmRl
dmljZVNjYWxlRmFjdG9yKCkpIHsKLSAgICAgICAgZmlsdGVySW5mby5yZW5kZXJlcigpLT5zZXRG
aWx0ZXJTY2FsZShwYWdlKCkuZGV2aWNlU2NhbGVGYWN0b3IoKSk7Ci0gICAgICAgIGZpbHRlcklu
Zm8ucmVuZGVyZXIoKS0+Y2xlYXJJbnRlcm1lZGlhdGVSZXN1bHRzKCk7CisgICAgfSBlbHNlIGlm
IChmaWx0ZXJJbmZvLmZpbHRlcigpLT5maWx0ZXJTY2FsZSgpICE9IHBhZ2UoKS5kZXZpY2VTY2Fs
ZUZhY3RvcigpKSB7CisgICAgICAgIGZpbHRlckluZm8uZmlsdGVyKCktPnNldEZpbHRlclNjYWxl
KHBhZ2UoKS5kZXZpY2VTY2FsZUZhY3RvcigpKTsKKyAgICAgICAgZmlsdGVySW5mby5maWx0ZXIo
KS0+Y2xlYXJJbnRlcm1lZGlhdGVSZXN1bHRzKCk7CiAgICAgfQogCiAgICAgLy8gSWYgdGhlIGZp
bHRlciBmYWlscyB0byBidWlsZCwgcmVtb3ZlIGl0IGZyb20gdGhlIGxheWVyLiBJdCB3aWxsIHN0
aWxsIGF0dGVtcHQgdG8KICAgICAvLyBnbyB0aHJvdWdoIHJlZ3VsYXIgcHJvY2Vzc2luZyAoZS5n
LiBjb21wb3NpdGluZyksIGJ1dCBuZXZlciBhcHBseSBhbnl0aGluZy4KLSAgICBpZiAoIWZpbHRl
ckluZm8ucmVuZGVyZXIoKS0+YnVpbGQocmVuZGVyZXIoKSwgcmVuZGVyZXIoKS5zdHlsZSgpLmZp
bHRlcigpLCBGaWx0ZXJQcm9wZXJ0eSkpCi0gICAgICAgIGZpbHRlckluZm8uc2V0UmVuZGVyZXIo
bnVsbHB0cik7CisgICAgaWYgKCFmaWx0ZXJJbmZvLmZpbHRlcigpLT5idWlsZChyZW5kZXJlcigp
LCByZW5kZXJlcigpLnN0eWxlKCkuZmlsdGVyKCksIEZpbHRlckNvbnN1bWVyOjpGaWx0ZXJQcm9w
ZXJ0eSkpCisgICAgICAgIGZpbHRlckluZm8uc2V0RmlsdGVyKG51bGxwdHIpOwogfQogCiB2b2lk
IFJlbmRlckxheWVyOjpmaWx0ZXJOZWVkc1JlcGFpbnQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXIuaAppbmRleCBkNmZlM2RmMWJjYjAzZjMzZjJmYmZjZjU2Y2EyZjRmNTNhMWIz
ZjM0Li44MjBhYjQ1Zjg4YmQyNTY0NjZkNmM0YWYyZWI2MTI0NDhlOTg5ZTJiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaApAQCAtNjAsOSArNjAsOSBAQCBjbGFzcyBUZXh0
U3RyZWFtOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIENTU0ZpbHRlcjsKIGNsYXNz
IENsaXBSZWN0czsKIGNsYXNzIENsaXBSZWN0c0NhY2hlOwotY2xhc3MgRmlsdGVyRWZmZWN0UmVu
ZGVyZXI7CiBjbGFzcyBGaWx0ZXJFZmZlY3RSZW5kZXJlckhlbHBlcjsKIGNsYXNzIEZpbHRlck9w
ZXJhdGlvbnM7CiBjbGFzcyBIaXRUZXN0UmVxdWVzdDsKQEAgLTY3OSw3ICs2NzksNyBAQCBwdWJs
aWM6CiAKICAgICBib29sIHBhaW50c1dpdGhGaWx0ZXJzKCkgY29uc3Q7CiAgICAgYm9vbCByZXF1
aXJlc0Z1bGxMYXllckltYWdlRm9yRmlsdGVycygpIGNvbnN0OwotICAgIEZpbHRlckVmZmVjdFJl
bmRlcmVyKiBmaWx0ZXJSZW5kZXJlcigpIGNvbnN0OworICAgIENTU0ZpbHRlciogZmlsdGVyKCkg
Y29uc3Q7CiAKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgYm9vbCBsYXllckxpc3RNdXRhdGlv
bkFsbG93ZWQoKSBjb25zdCB7IHJldHVybiBtX2xheWVyTGlzdE11dGF0aW9uQWxsb3dlZDsgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAppbmRl
eCA4YmI1OWVhM2YyOWIwYzNmMjg3NDBjYjhmYmM4YTk2NzE2YWRlZjczLi4wYWEwMGRkMTg0ZTk1
MTlkNWEwZjExYzNhZDFkM2JmZjc3MDhiNjAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcApAQCAtMzQsNyArMzQsNiBAQAogI2luY2x1ZGUg
IkNhY2hlZEltYWdlLmgiCiAjaW5jbHVkZSAiQ2hyb21lLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRU
aW1lbGluZS5oIgotI2luY2x1ZGUgIkZpbHRlckVmZmVjdFJlbmRlcmVyLmgiCiAjaW5jbHVkZSAi
RnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZp
bHRlckluZm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVy
SW5mby5jcHAKaW5kZXggNzc0NmJkNGFlMDhiMzgyNmE1MTIxOWRiNzZhZGE3MjcwMjY0NzA2NC4u
YmExNjU4MGZjZTYzNzkwNjNiMGU0MWJlYTEzOTlhYzBkZWRhZGM4ZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVySW5mby5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVySW5mby5jcHAKQEAgLTg0LDkg
Kzg0LDkgQEAgUmVuZGVyTGF5ZXI6OkZpbHRlckluZm86On5GaWx0ZXJJbmZvKCkKICAgICByZW1v
dmVSZWZlcmVuY2VGaWx0ZXJDbGllbnRzKCk7CiB9CiAKLXZvaWQgUmVuZGVyTGF5ZXI6OkZpbHRl
ckluZm86OnNldFJlbmRlcmVyKFJlZlB0cjxGaWx0ZXJFZmZlY3RSZW5kZXJlcj4mJiByZW5kZXJl
cikKK3ZvaWQgUmVuZGVyTGF5ZXI6OkZpbHRlckluZm86OnNldEZpbHRlcihSZWZQdHI8Q1NTRmls
dGVyPiYmIGZpbHRlcikKIHsKLSAgICBtX3JlbmRlcmVyID0gcmVuZGVyZXI7CisgICAgbV9maWx0
ZXIgPSBmaWx0ZXI7CiB9CiAKIHZvaWQgUmVuZGVyTGF5ZXI6OkZpbHRlckluZm86Om5vdGlmeUZp
bmlzaGVkKENhY2hlZFJlc291cmNlJikKQEAgLTEwOCwxNCArMTA4LDE0IEBAIHZvaWQgUmVuZGVy
TGF5ZXI6OkZpbHRlckluZm86OnVwZGF0ZVJlZmVyZW5jZUZpbHRlckNsaWVudHMoY29uc3QgRmls
dGVyT3BlcmF0aW9uCiAgICAgICAgICAgICBtX2V4dGVybmFsU1ZHUmVmZXJlbmNlcy5hcHBlbmQo
Y2FjaGVkU1ZHRG9jdW1lbnQpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gUmVm
ZXJlbmNlIGlzIGludGVybmFsOyBhZGQgbGF5ZXIgYXMgYSBjbGllbnQgc28gd2UgY2FuIHRyaWdn
ZXIgZmlsdGVyIHJlcGFpbnQgb24gU1ZHIGF0dHJpYnV0ZSBjaGFuZ2UuCi0gICAgICAgICAgICBh
dXRvKiBmaWx0ZXIgPSBtX2xheWVyLnJlbmRlcmVyKCkuZG9jdW1lbnQoKS5nZXRFbGVtZW50QnlJ
ZChyZWZlcmVuY2VPcGVyYXRpb24uZnJhZ21lbnQoKSk7Ci0gICAgICAgICAgICBpZiAoIWZpbHRl
cikKKyAgICAgICAgICAgIGF1dG8qIGZpbHRlckVsZW1lbnQgPSBtX2xheWVyLnJlbmRlcmVyKCku
ZG9jdW1lbnQoKS5nZXRFbGVtZW50QnlJZChyZWZlcmVuY2VPcGVyYXRpb24uZnJhZ21lbnQoKSk7
CisgICAgICAgICAgICBpZiAoIWZpbHRlckVsZW1lbnQpCiAgICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgICBhdXRvKiByZW5kZXJlciA9IGZpbHRlci0+cmVuZGVyZXIoKTsKKyAg
ICAgICAgICAgIGF1dG8qIHJlbmRlcmVyID0gZmlsdGVyRWxlbWVudC0+cmVuZGVyZXIoKTsKICAg
ICAgICAgICAgIGlmICghaXM8UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI+KHJlbmRlcmVyKSkKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGRvd25jYXN0PFJlbmRlclNWR1Jl
c291cmNlRmlsdGVyPigqcmVuZGVyZXIpLmFkZENsaWVudFJlbmRlckxheWVyKCZtX2xheWVyKTsK
LSAgICAgICAgICAgIG1faW50ZXJuYWxTVkdSZWZlcmVuY2VzLmFwcGVuZChmaWx0ZXIpOworICAg
ICAgICAgICAgbV9pbnRlcm5hbFNWR1JlZmVyZW5jZXMuYXBwZW5kKGZpbHRlckVsZW1lbnQpOwog
ICAgICAgICB9CiAgICAgfQogfQpAQCAtMTI0LDEwICsxMjQsMTEgQEAgdm9pZCBSZW5kZXJMYXll
cjo6RmlsdGVySW5mbzo6cmVtb3ZlUmVmZXJlbmNlRmlsdGVyQ2xpZW50cygpCiB7CiAgICAgZm9y
IChhdXRvJiByZXNvdXJjZUhhbmRsZSA6IG1fZXh0ZXJuYWxTVkdSZWZlcmVuY2VzKQogICAgICAg
ICByZXNvdXJjZUhhbmRsZS0+cmVtb3ZlQ2xpZW50KCp0aGlzKTsKKwogICAgIG1fZXh0ZXJuYWxT
VkdSZWZlcmVuY2VzLmNsZWFyKCk7CiAKLSAgICBmb3IgKGF1dG8mIGZpbHRlciA6IG1faW50ZXJu
YWxTVkdSZWZlcmVuY2VzKSB7Ci0gICAgICAgIGlmIChhdXRvKiByZW5kZXJlciA9IGZpbHRlci0+
cmVuZGVyZXIoKSkKKyAgICBmb3IgKGF1dG8mIGZpbHRlckVsZW1lbnQgOiBtX2ludGVybmFsU1ZH
UmVmZXJlbmNlcykgeworICAgICAgICBpZiAoYXV0byogcmVuZGVyZXIgPSBmaWx0ZXJFbGVtZW50
LT5yZW5kZXJlcigpKQogICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVyU1ZHUmVzb3VyY2VDb250
YWluZXI+KCpyZW5kZXJlcikucmVtb3ZlQ2xpZW50UmVuZGVyTGF5ZXIoJm1fbGF5ZXIpOwogICAg
IH0KICAgICBtX2ludGVybmFsU1ZHUmVmZXJlbmNlcy5jbGVhcigpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVySW5mby5oIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVySW5mby5oCmluZGV4IGQwYWNkM2NmNWZi
YjEyYTMxMjU5M2MwOWNjMWI0YWM4MDcwMjU4Y2YuLjQ3ODJjNDE3MzgyMTAyNTQwNWNmZjdjYTM5
ZTAwMmE4MzUxMjU3ZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllckZpbHRlckluZm8uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXJGaWx0ZXJJbmZvLmgKQEAgLTU1LDggKzU1LDggQEAgcHVibGljOgogICAgIHZvaWQgZXhw
YW5kRGlydHlTb3VyY2VSZWN0KGNvbnN0IExheW91dFJlY3QmIHJlY3QpIHsgbV9kaXJ0eVNvdXJj
ZVJlY3QudW5pdGUocmVjdCk7IH0KICAgICB2b2lkIHJlc2V0RGlydHlTb3VyY2VSZWN0KCkgeyBt
X2RpcnR5U291cmNlUmVjdCA9IExheW91dFJlY3QoKTsgfQogCi0gICAgRmlsdGVyRWZmZWN0UmVu
ZGVyZXIqIHJlbmRlcmVyKCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJlci5nZXQoKTsgfQotICAg
IHZvaWQgc2V0UmVuZGVyZXIoUmVmUHRyPEZpbHRlckVmZmVjdFJlbmRlcmVyPiYmKTsKKyAgICBD
U1NGaWx0ZXIqIGZpbHRlcigpIGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVyLmdldCgpOyB9CisgICAg
dm9pZCBzZXRGaWx0ZXIoUmVmUHRyPENTU0ZpbHRlcj4mJik7CiAKICAgICB2b2lkIHVwZGF0ZVJl
ZmVyZW5jZUZpbHRlckNsaWVudHMoY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYpOwogICAgIHZvaWQg
cmVtb3ZlUmVmZXJlbmNlRmlsdGVyQ2xpZW50cygpOwpAQCAtNjgsNyArNjgsNyBAQCBwcml2YXRl
OgogCiAgICAgUmVuZGVyTGF5ZXImIG1fbGF5ZXI7CiAKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0
UmVuZGVyZXI+IG1fcmVuZGVyZXI7CisgICAgUmVmUHRyPENTU0ZpbHRlcj4gbV9maWx0ZXI7CiAg
ICAgTGF5b3V0UmVjdCBtX2RpcnR5U291cmNlUmVjdDsKIAogICAgIFZlY3RvcjxSZWZQdHI8RWxl
bWVudD4+IG1faW50ZXJuYWxTVkdSZWZlcmVuY2VzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVCdWlsZGVyQmxvY2suY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVCdWlsZGVyQmxvY2suY3BwCmlu
ZGV4IDgzMzU3MmYyMTA0YmExYmQ5OGE4YzM0MGViYjRjOTNhMDE1ODY4MTAuLmU1Y2ExNGVkMzA2
NWZkMWI1NjQwNzdhZTgzMDRmNDQ3NDk4OWVkMWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlQnVpbGRlckJsb2NrLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZUJ1aWxkZXJCbG9jay5jcHAK
QEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJSZW5kZXJSdWJ5LmgiCiAjaW5jbHVkZSAiUmVu
ZGVyUnVieVJ1bi5oIgogI2luY2x1ZGUgIlJlbmRlclRleHRDb250cm9sLmgiCisjaW5jbHVkZSAi
UmVuZGVyVHJlZUJ1aWxkZXJNdWx0aUNvbHVtbi5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>