<?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>73279</bug_id>
          
          <creation_ts>2011-11-28 21:16:36 -0800</creation_ts>
          <short_desc>[Chromium] Commit should be fully asynchronous and non-blocking on main thread.</short_desc>
          <delta_ts>2013-04-12 07:26:25 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>72752</dependson>
    
    <dependson>75272</dependson>
    
    <dependson>76295</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="David Reveman">reveman</reporter>
          <assigned_to name="David Reveman">reveman</assigned_to>
          <cc>danakj</cc>
    
    <cc>enne</cc>
    
    <cc>jamesr</cc>
    
    <cc>nduca</cc>
    
    <cc>schenney</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>510464</commentid>
    <comment_count>0</comment_count>
    <who name="David Reveman">reveman</who>
    <bug_when>2011-11-28 21:16:36 -0800</bug_when>
    <thetext>The commit process is currently blocking on the main thread. This becomes especially bad when impl thread is using incremental texture uploads. The commit process should be made asynchronous on the main thread.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>510466</commentid>
    <comment_count>1</comment_count>
      <attachid>116883</attachid>
    <who name="David Reveman">reveman</who>
    <bug_when>2011-11-28 21:23:57 -0800</bug_when>
    <thetext>Created attachment 116883
Patch

Work in progress.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>516167</commentid>
    <comment_count>2</comment_count>
      <attachid>118095</attachid>
    <who name="David Reveman">reveman</who>
    <bug_when>2011-12-06 12:47:32 -0800</bug_when>
    <thetext>Created attachment 118095
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530660</commentid>
    <comment_count>3</comment_count>
      <attachid>121337</attachid>
    <who name="David Reveman">reveman</who>
    <bug_when>2012-01-05 15:01:46 -0800</bug_when>
    <thetext>Created attachment 121337
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532724</commentid>
    <comment_count>4</comment_count>
      <attachid>121771</attachid>
    <who name="David Reveman">reveman</who>
    <bug_when>2012-01-09 17:43:44 -0800</bug_when>
    <thetext>Created attachment 121771
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541361</commentid>
    <comment_count>5</comment_count>
      <attachid>123743</attachid>
    <who name="David Reveman">reveman</who>
    <bug_when>2012-01-24 08:51:05 -0800</bug_when>
    <thetext>Created attachment 123743
Patch</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116883</attachid>
            <date>2011-11-28 21:23:57 -0800</date>
            <delta_ts>2011-12-06 12:47:32 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>async-commit.diff</filename>
            <type>text/plain</type>
            <size>67073</size>
            <attacher name="David Reveman">reveman</attacher>
            
              <data encoding="base64">Y29tbWl0IDk5NjgzMGY3NDk3NDM3MmI4MTNjZGVhNjU0MGI0N2Y2NzYwMjEzMzAKQXV0aG9yOiBE
YXZpZCBSZXZlbWFuIDxyZXZlbWFuQGNocm9taXVtLm9yZz4KRGF0ZTogICBUdWUgTm92IDI5IDAw
OjE2OjU4IDIwMTEgLTA1MDAKCiAgICBbQ2hyb21pdW1dIENvbW1pdCBzaG91bGQgYmUgZnVsbHkg
YXN5bmNocm9ub3VzIGFuZCBub24tYmxvY2tpbmcgb24gbWFpbiB0aHJlYWQuCiAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMyNzkKICAgIAogICAgU291cmNlL1dl
YkNvcmU6CiAgICAKICAgIEFkZCBDQ1RleHR1cmVVcGRhdGVyOjpUZXh0dXJlVXBkYXRlIGNsYXNz
LgogICAgCiAgICBObyBuZXcgdGVzdHMuCiAgICAKICAgIFNvdXJjZS9XZWJLaXQvY2hyb21pdW06
CiAgICAKICAgIFRyYWNrIGNoYW5nZXMgdG8gdGV4dHVyZSB1cGRhdGVyLgoKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0JpdG1hcENhbnZhc0xh
eWVyVGV4dHVyZVVwZGF0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHAKaW5kZXggM2NkMzVm
ZC4uNGU1Y2QyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQml0bWFwQ2FudmFzTGF5ZXJUZXh0
dXJlVXBkYXRlci5jcHAKQEAgLTQ1LDExICs0NSwyNCBAQCBCaXRtYXBDYW52YXNMYXllclRleHR1
cmVVcGRhdGVyOjpUZXh0dXJlOjp+VGV4dHVyZSgpCiB7CiB9CiAKLXZvaWQgQml0bWFwQ2FudmFz
TGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZTo6dXBkYXRlUmVjdChHcmFwaGljc0NvbnRleHQz
RCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVz
dFJlY3QpCitQYXNzT3duUHRyPENDVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmVVcGRhdGU+IEJpdG1h
cENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU6OmNyZWF0ZUNDVGV4dHVyZVVwZGF0
ZSgpCiB7Ci0gICAgQVNTRVJUKHRleHR1cmUoKS0+dGV4dHVyZUlkKCkpOwotICAgIGNvbnRleHQt
PmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCB0ZXh0dXJlKCktPnRl
eHR1cmVJZCgpKTsKLSAgICB0ZXh0dXJlVXBkYXRlcigpLT51cGRhdGVUZXh0dXJlUmVjdChjb250
ZXh0LCB0ZXh0dXJlKCktPmZvcm1hdCgpLCBzb3VyY2VSZWN0LCBkZXN0UmVjdCk7CisgICAgcmV0
dXJuIENDVGV4dHVyZVVwZGF0ZXI6OlN1YkltYWdlVGV4dHVyZVVwZGF0ZTo6Y3JlYXRlKCk7Cit9
CisKK3ZvaWQgQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZTo6cHVzaFBy
b3BlcnRpZXNUbyhDQ1RleHR1cmVVcGRhdGVyOjpUZXh0dXJlVXBkYXRlKiB1cGRhdGUpCit7Cisg
ICAgQ0NUZXh0dXJlVXBkYXRlcjo6U3ViSW1hZ2VUZXh0dXJlVXBkYXRlKiBzdWJJbWFnZVVwZGF0
ZSA9IHN0YXRpY19jYXN0PENDVGV4dHVyZVVwZGF0ZXI6OlN1YkltYWdlVGV4dHVyZVVwZGF0ZSo+
KHVwZGF0ZSk7CisKKyAgICBJbnRSZWN0IGRlc3RSZWN0ID0gdXBkYXRlUmVjdCgpOworICAgIElu
dFBvaW50IG9mZnNldCA9IGNvbnRlbnRPZmZzZXQoKTsKKyAgICBJbnRSZWN0IHNvdXJjZVJlY3Qg
PSBJbnRSZWN0KEludFBvaW50KGRlc3RSZWN0LngoKSArIG9mZnNldC54KCksIGRlc3RSZWN0Lnko
KSArIG9mZnNldC55KCkpLCBkZXN0UmVjdC5zaXplKCkpOworCisgICAgc3ViSW1hZ2VVcGRhdGUt
PnNldEZvcm1hdCh0ZXh0dXJlKCktPmZvcm1hdCgpKTsKKyAgICBzdWJJbWFnZVVwZGF0ZS0+c2V0
VGV4dHVyZUlkKHRleHR1cmUoKS0+dGV4dHVyZUlkKCkpOworICAgIHN1YkltYWdlVXBkYXRlLT5z
ZXRSZWN0KGRlc3RSZWN0KTsKKyAgICBQbGF0Zm9ybUNhbnZhczo6QXV0b0xvY2tlciBsb2NrZXIo
JnRleHR1cmVVcGRhdGVyKCktPmNhbnZhcygpKTsKKyAgICBzdWJJbWFnZVVwZGF0ZS0+c2V0UGl4
ZWxEYXRhKGxvY2tlci5waXhlbHMoKSwgdGV4dHVyZVVwZGF0ZXIoKS0+Y29udGVudFJlY3QoKSwg
c291cmNlUmVjdCk7CiB9CiAKIFBhc3NSZWZQdHI8Qml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBk
YXRlcj4gQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6Y3JlYXRlKFBhc3NPd25QdHI8
TGF5ZXJQYWludGVyQ2hyb21pdW0+IHBhaW50ZXIsIGJvb2wgdXNlTWFwVGV4U3ViSW1hZ2UpCkBA
IC01OSw3ICs3Miw2IEBAIFBhc3NSZWZQdHI8Qml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRl
cj4gQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6Y3JlCiAKIEJpdG1hcENhbnZhc0xh
eWVyVGV4dHVyZVVwZGF0ZXI6OkJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIoUGFzc093
blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4gcGFpbnRlciwgYm9vbCB1c2VNYXBUZXhTdWJJbWFn
ZSkKICAgICA6IENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIocGFpbnRlcikKLSAgICAsIG1fdGV4
U3ViSW1hZ2UodXNlTWFwVGV4U3ViSW1hZ2UpCiB7CiB9CiAKQEAgLTgxLDggKzkzLDYgQEAgTGF5
ZXJUZXh0dXJlVXBkYXRlcjo6U2FtcGxlZFRleGVsRm9ybWF0IEJpdG1hcENhbnZhc0xheWVyVGV4
dHVyZVVwZGF0ZXI6OnNhbXBsZWQKIAogdm9pZCBCaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRh
dGVyOjpwYWludENvbnRlbnRzKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBJbnRT
aXplJiB0aWxlU2l6ZSwgaW50IGJvcmRlclRleGVscywgZmxvYXQgY29udGVudHNTY2FsZSkKIHsK
LSAgICBtX3RleFN1YkltYWdlLnNldFN1YkltYWdlU2l6ZSh0aWxlU2l6ZSk7Ci0KICAgICBtX2Nh
bnZhcy5yZXNpemUoY29udGVudFJlY3Quc2l6ZSgpKTsKICAgICAvLyBBc3N1bXB0aW9uOiBpZiBh
IHRpbGVyIGlzIHVzaW5nIGJvcmRlciB0ZXhlbHMsIHRoZW4gaXQgaXMgYmVjYXVzZSB0aGUKICAg
ICAvLyBsYXllciBpcyBsaWtlbHkgdG8gYmUgZmlsdGVyZWQgb3IgdHJhbnNmb3JtZWQuIEJlY2F1
c2Ugb2YgaXQgbWlnaHQgYmUKQEAgLTkzLDExICsxMDMsNSBAQCB2b2lkIEJpdG1hcENhbnZhc0xh
eWVyVGV4dHVyZVVwZGF0ZXI6OnBhaW50Q29udGVudHMoY29uc3QgSW50UmVjdCYgY29udGVudFJl
Y3QsCiAgICAgcGFpbnQoKmNhbnZhc1BhaW50ZXIuY29udGV4dCgpLCBjb250ZW50UmVjdCwgY29u
dGVudHNTY2FsZSk7CiB9CiAKLXZvaWQgQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6
dXBkYXRlVGV4dHVyZVJlY3QoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIHVuc2lnbmVkIGZv
cm1hdCwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3Qp
Ci17Ci0gICAgUGxhdGZvcm1DYW52YXM6OkF1dG9Mb2NrZXIgbG9ja2VyKCZtX2NhbnZhcyk7Ci0g
ICAgbV90ZXhTdWJJbWFnZS51cGxvYWQobG9ja2VyLnBpeGVscygpLCBjb250ZW50UmVjdCgpLCBz
b3VyY2VSZWN0LCBkZXN0UmVjdCwgZm9ybWF0LCBjb250ZXh0KTsKLX0KLQogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0JpdG1hcENh
bnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0JpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuaAppbmRleCBmNDlk
OThjLi44Yzc1MDRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9CaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQml0bWFwQ2FudmFzTGF5ZXJUZXh0
dXJlVXBkYXRlci5oCkBAIC0zMCw3ICszMCw2IEBACiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKQogCiAjaW5jbHVkZSAiQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5oIgotI2luY2x1
ZGUgIkxheWVyVGV4dHVyZVN1YkltYWdlLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1DYW52YXMuaCIK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDUsNyArNDQsOCBAQCBwdWJsaWM6CiAgICAgICAg
IFRleHR1cmUoQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlciosIFBhc3NSZWZQdHI8TWFu
YWdlZFRleHR1cmU+KTsKICAgICAgICAgdmlydHVhbCB+VGV4dHVyZSgpOwogCi0gICAgICAgIHZp
cnR1YWwgdm9pZCB1cGRhdGVSZWN0KEdyYXBoaWNzQ29udGV4dDNEKiwgY29uc3QgSW50UmVjdCYg
c291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpOworICAgICAgICB2aXJ0dWFsIFBh
c3NPd25QdHI8Q0NUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZVVwZGF0ZT4gY3JlYXRlQ0NUZXh0dXJl
VXBkYXRlKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBwdXNoUHJvcGVydGllc1RvKENDVGV4dHVy
ZVVwZGF0ZXI6OlRleHR1cmVVcGRhdGUqKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIEJpdG1h
cENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIqIHRleHR1cmVVcGRhdGVyKCkgeyByZXR1cm4gbV90
ZXh0dXJlVXBkYXRlcjsgfQpAQCAtNjAsMTMgKzYwLDEyIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IE9yaWVudGF0aW9uIG9yaWVudGF0aW9uKCkgeyByZXR1cm4gTGF5ZXJUZXh0dXJlVXBkYXRlcjo6
Qm90dG9tVXBPcmllbnRhdGlvbjsgfQogICAgIHZpcnR1YWwgU2FtcGxlZFRleGVsRm9ybWF0IHNh
bXBsZWRUZXhlbEZvcm1hdChHQzNEZW51bSB0ZXh0dXJlRm9ybWF0KTsKICAgICB2aXJ0dWFsIHZv
aWQgcGFpbnRDb250ZW50cyhjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgSW50U2l6
ZSYgdGlsZVNpemUsIGludCBib3JkZXJUZXhlbHMsIGZsb2F0IGNvbnRlbnRzU2NhbGUpOwotICAg
IHZvaWQgdXBkYXRlVGV4dHVyZVJlY3QoR3JhcGhpY3NDb250ZXh0M0QqLCB1bnNpZ25lZCBmb3Jt
YXQsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KTsK
KyAgICBQbGF0Zm9ybUNhbnZhcyYgY2FudmFzKCkgeyByZXR1cm4gbV9jYW52YXM7IH0KIAogcHJp
dmF0ZToKICAgICBCaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyKFBhc3NPd25QdHI8TGF5
ZXJQYWludGVyQ2hyb21pdW0+LCBib29sIHVzZU1hcFRleFN1YkltYWdlKTsKIAogICAgIFBsYXRm
b3JtQ2FudmFzIG1fY2FudmFzOwotICAgIExheWVyVGV4dHVyZVN1YkltYWdlIG1fdGV4U3ViSW1h
Z2U7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9CaXRtYXBTa1BpY3R1cmVDYW52YXNMYXll
clRleHR1cmVVcGRhdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0JpdG1hcFNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuY3BwCmluZGV4
IDU1NmQ1NTUuLmY4MmQ5OTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0JpdG1hcFNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0JpdG1h
cFNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuY3BwCkBAIC00NSw3ICs0NSw3IEBA
IEJpdG1hcFNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU6OlRleHR1
cmUoQml0bWFwU2tQaWN0dXJlQ2FudmFzCiB7CiB9CiAKLWJvb2wgQml0bWFwU2tQaWN0dXJlQ2Fu
dmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZTo6bmVlZFByZXBhcmVSZWN0KCkKK2Jvb2wg
Qml0bWFwU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZTo6bmVlZFBy
ZXBhcmUoKQogewogICAgIGlmICh0ZXh0dXJlVXBkYXRlcigpLT51c2VNYXBUZXhTdWJJbWFnZSgp
KQogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTUzLDQzICs1Myw0NiBAQCBib29sIEJpdG1hcFNr
UGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU6Om5lZWRQcmVwYXJlUmVj
dCgpCiAgICAgcmV0dXJuICF0ZXh0dXJlKCktPnRleHR1cmVJZCgpOwogfQogCi12b2lkIEJpdG1h
cFNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU6OnByZXBhcmVSZWN0
KEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBUZXh0dXJlQWxsb2NhdG9yKiBhbGxvY2F0b3Is
IGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KQordm9p
ZCBCaXRtYXBTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlOjpwcmVw
YXJlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBUZXh0dXJlQWxsb2NhdG9yKiBhbGxvY2F0
b3IpCiB7CiAgICAgQVNTRVJUKCFtX21hcHBlZEJ1ZmZlcik7CisgICAgQVNTRVJUKCF1cGRhdGVS
ZWN0KCkuaXNFbXB0eSgpKTsKIAogICAgIGlmICh0ZXh0dXJlVXBkYXRlcigpLT51c2VNYXBUZXhT
dWJJbWFnZSgpKSB7CiAgICAgICAgIEV4dGVuc2lvbnMzRENocm9taXVtKiBleHRlbnNpb25zID0g
c3RhdGljX2Nhc3Q8RXh0ZW5zaW9uczNEQ2hyb21pdW0qPihjb250ZXh0LT5nZXRFeHRlbnNpb25z
KCkpOwotICAgICAgICBtX21hcHBlZEJ1ZmZlciA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihleHRl
bnNpb25zLT5tYXBUZXhTdWJJbWFnZTJEQ0hST01JVU0oR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfMkQsIDAsIGRlc3RSZWN0LngoKSwgZGVzdFJlY3QueSgpLCBkZXN0UmVjdC53aWR0aCgpLCBk
ZXN0UmVjdC5oZWlnaHQoKSwgdGV4dHVyZSgpLT5mb3JtYXQoKSwgR3JhcGhpY3NDb250ZXh0M0Q6
OlVOU0lHTkVEX0JZVEUsIEV4dGVuc2lvbnMzRENocm9taXVtOjpXUklURV9PTkxZKSk7CisgICAg
ICAgIG1fbWFwcGVkQnVmZmVyID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KGV4dGVuc2lvbnMtPm1h
cFRleFN1YkltYWdlMkRDSFJPTUlVTShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwg
dXBkYXRlUmVjdCgpLngoKSwgdXBkYXRlUmVjdCgpLnkoKSwgdXBkYXRlUmVjdCgpLndpZHRoKCks
IHVwZGF0ZVJlY3QoKS5oZWlnaHQoKSwgdGV4dHVyZSgpLT5mb3JtYXQoKSwgR3JhcGhpY3NDb250
ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIEV4dGVuc2lvbnMzRENocm9taXVtOjpXUklURV9PTkxZKSk7
CiAgICAgfQogCiAgICAgdGV4dHVyZSgpLT5hbGxvY2F0ZVRleHR1cmUoY29udGV4dCwgYWxsb2Nh
dG9yKTsKIH0KIAotdm9pZCBCaXRtYXBTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVy
OjpUZXh0dXJlOjpwYWludENvbnRlbnRzUmVjdChjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0KQor
UGFzc093blB0cjxDQ1RleHR1cmVVcGRhdGVyOjpUZXh0dXJlVXBkYXRlPiBCaXRtYXBTa1BpY3R1
cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlOjpjcmVhdGVDQ1RleHR1cmVVcGRh
dGUoKQogewotICAgIHVpbnQ4X3QqIGJ1ZmZlciA9IG1fbWFwcGVkQnVmZmVyOwotICAgIGlmICgh
YnVmZmVyKSB7Ci0gICAgICAgIHNpemVfdCBidWZmZXJTaXplID0gVGV4dHVyZU1hbmFnZXI6Om1l
bW9yeVVzZUJ5dGVzKHNvdXJjZVJlY3Quc2l6ZSgpLCB0ZXh0dXJlKCktPmZvcm1hdCgpKTsKLSAg
ICAgICAgbV9idWZmZXIgPSBhZG9wdEFycmF5UHRyKG5ldyB1aW50OF90W2J1ZmZlclNpemVdKTsK
LSAgICAgICAgYnVmZmVyID0gbV9idWZmZXIuZ2V0KCk7Ci0gICAgfQotCi0gICAgT3duUHRyPFNr
Q2FudmFzPiBjYW52YXMgPSBhZG9wdFB0cihuZXcgc2tpYTo6UGxhdGZvcm1DYW52YXMoc291cmNl
UmVjdC53aWR0aCgpLCBzb3VyY2VSZWN0LmhlaWdodCgpLCBmYWxzZSwgYnVmZmVyKSk7Ci0gICAg
dGV4dHVyZVVwZGF0ZXIoKS0+cGFpbnRDb250ZW50c1JlY3QoY2FudmFzLmdldCgpLCBzb3VyY2VS
ZWN0KTsKKyAgICByZXR1cm4gQ0NUZXh0dXJlVXBkYXRlcjo6U3ViSW1hZ2VUZXh0dXJlVXBkYXRl
OjpjcmVhdGUoKTsKIH0KIAotdm9pZCBCaXRtYXBTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVV
cGRhdGVyOjpUZXh0dXJlOjp1cGRhdGVSZWN0KEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBj
b25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCkKK3ZvaWQg
Qml0bWFwU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZTo6cHVzaFBy
b3BlcnRpZXNUbyhDQ1RleHR1cmVVcGRhdGVyOjpUZXh0dXJlVXBkYXRlKiB1cGRhdGUpCiB7Ci0g
ICAgQVNTRVJUKHRleHR1cmUoKS0+dGV4dHVyZUlkKCkpOwotICAgIGNvbnRleHQtPmJpbmRUZXh0
dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCB0ZXh0dXJlKCktPnRleHR1cmVJZCgp
KTsKKyAgICBDQ1RleHR1cmVVcGRhdGVyOjpTdWJJbWFnZVRleHR1cmVVcGRhdGUqIHN1YkltYWdl
VXBkYXRlID0gc3RhdGljX2Nhc3Q8Q0NUZXh0dXJlVXBkYXRlcjo6U3ViSW1hZ2VUZXh0dXJlVXBk
YXRlKj4odXBkYXRlKTsKKworICAgIEludFJlY3QgZGVzdFJlY3QgPSB1cGRhdGVSZWN0KCk7Cisg
ICAgSW50UmVjdCBzb3VyY2VSZWN0ID0gSW50UmVjdChJbnRQb2ludChkZXN0UmVjdC54KCkgKyBj
b250ZW50T2Zmc2V0KCkueCgpLCBkZXN0UmVjdC55KCkgKyBjb250ZW50T2Zmc2V0KCkueSgpKSwg
ZGVzdFJlY3Quc2l6ZSgpKTsKKworICAgIHN1YkltYWdlVXBkYXRlLT5zZXRGb3JtYXQodGV4dHVy
ZSgpLT5mb3JtYXQoKSk7CisgICAgc3ViSW1hZ2VVcGRhdGUtPnNldFRleHR1cmVJZCh0ZXh0dXJl
KCktPnRleHR1cmVJZCgpKTsKKyAgICBzdWJJbWFnZVVwZGF0ZS0+c2V0UmVjdChkZXN0UmVjdCk7
CisKICAgICBpZiAobV9tYXBwZWRCdWZmZXIpIHsKLSAgICAgICAgRXh0ZW5zaW9uczNEQ2hyb21p
dW0qIGV4dGVuc2lvbnMgPSBzdGF0aWNfY2FzdDxFeHRlbnNpb25zM0RDaHJvbWl1bSo+KGNvbnRl
eHQtPmdldEV4dGVuc2lvbnMoKSk7Ci0gICAgICAgIGV4dGVuc2lvbnMtPnVubWFwVGV4U3ViSW1h
Z2UyRENIUk9NSVVNKG1fbWFwcGVkQnVmZmVyKTsKKyAgICAgICAgT3duUHRyPFNrQ2FudmFzPiBj
YW52YXMgPSBhZG9wdFB0cihuZXcgc2tpYTo6UGxhdGZvcm1DYW52YXMoZGVzdFJlY3Qud2lkdGgo
KSwgZGVzdFJlY3QuaGVpZ2h0KCksIGZhbHNlLCBtX21hcHBlZEJ1ZmZlcikpOworICAgICAgICB0
ZXh0dXJlVXBkYXRlcigpLT5wYWludENvbnRlbnRzUmVjdChjYW52YXMuZ2V0KCksIHNvdXJjZVJl
Y3QpOworICAgICAgICBzdWJJbWFnZVVwZGF0ZS0+c2V0TWFwcGVkQnVmZmVyKG1fbWFwcGVkQnVm
ZmVyKTsKICAgICAgICAgbV9tYXBwZWRCdWZmZXIgPSAwOwogICAgIH0gZWxzZSB7Ci0gICAgICAg
IEFTU0VSVChtX2J1ZmZlci5nZXQoKSk7Ci0gICAgICAgIHRleHR1cmVVcGRhdGVyKCktPnVwZGF0
ZVRleHR1cmVSZWN0KGNvbnRleHQsIHRleHR1cmUoKS0+Zm9ybWF0KCksIGRlc3RSZWN0LCBtX2J1
ZmZlci5nZXQoKSk7Ci0gICAgICAgIG1fYnVmZmVyLmNsZWFyKCk7CisgICAgICAgIHNpemVfdCBi
dWZmZXJTaXplID0gVGV4dHVyZU1hbmFnZXI6Om1lbW9yeVVzZUJ5dGVzKGRlc3RSZWN0LnNpemUo
KSwgdGV4dHVyZSgpLT5mb3JtYXQoKSk7CisgICAgICAgIE93bkFycmF5UHRyPHVpbnQ4X3Q+IHBp
eGVsRGF0YSA9IGFkb3B0QXJyYXlQdHIobmV3IHVpbnQ4X3RbYnVmZmVyU2l6ZV0pOworICAgICAg
ICBPd25QdHI8U2tDYW52YXM+IGNhbnZhcyA9IGFkb3B0UHRyKG5ldyBza2lhOjpQbGF0Zm9ybUNh
bnZhcyhkZXN0UmVjdC53aWR0aCgpLCBkZXN0UmVjdC5oZWlnaHQoKSwgZmFsc2UsIHBpeGVsRGF0
YS5nZXQoKSkpOworICAgICAgICB0ZXh0dXJlVXBkYXRlcigpLT5wYWludENvbnRlbnRzUmVjdChj
YW52YXMuZ2V0KCksIHNvdXJjZVJlY3QpOworICAgICAgICBzdWJJbWFnZVVwZGF0ZS0+c2V0UGl4
ZWxEYXRhKHBpeGVsRGF0YS5yZWxlYXNlKCkpOwogICAgIH0KIH0KIApAQCAtMTAxLDcgKzEwNCw2
IEBAIFBhc3NSZWZQdHI8Qml0bWFwU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcj4g
Qml0bWFwU2tQaWN0dXJlQ2FudmFzTGF5ZXJUCiBCaXRtYXBTa1BpY3R1cmVDYW52YXNMYXllclRl
eHR1cmVVcGRhdGVyOjpCaXRtYXBTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyKFBh
c3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+IHBhaW50ZXIsIGJvb2wgdXNlTWFwVGV4U3Vi
SW1hZ2UpCiAgICAgOiBTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyKHBhaW50ZXIp
CiAgICAgLCBtX3VzZU1hcFRleFN1YkltYWdlKHVzZU1hcFRleFN1YkltYWdlKQotICAgICwgbV90
ZXhTdWJJbWFnZSh1c2VNYXBUZXhTdWJJbWFnZSkKIHsKIH0KIApAQCAtMTIzLDcgKzEyNSw2IEBA
IExheWVyVGV4dHVyZVVwZGF0ZXI6OlNhbXBsZWRUZXhlbEZvcm1hdCBCaXRtYXBTa1BpY3R1cmVD
YW52YXNMYXllclRleHR1cmVVcGRhdGVyCiAKIHZvaWQgQml0bWFwU2tQaWN0dXJlQ2FudmFzTGF5
ZXJUZXh0dXJlVXBkYXRlcjo6cGFpbnRDb250ZW50cyhjb25zdCBJbnRSZWN0JiBjb250ZW50UmVj
dCwgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUsIGludCBib3JkZXJUZXhlbHMsIGZsb2F0IGNvbnRl
bnRzU2NhbGUpCiB7Ci0gICAgbV90ZXhTdWJJbWFnZS5zZXRTdWJJbWFnZVNpemUodGlsZVNpemUp
OwogICAgIFNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OnBhaW50Q29udGVudHMo
Y29udGVudFJlY3QsIHRpbGVTaXplLCBib3JkZXJUZXhlbHMsIGNvbnRlbnRzU2NhbGUpOwogfQog
CkBAIC0xMzUsMTEgKzEzNiw2IEBAIHZvaWQgQml0bWFwU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0
dXJlVXBkYXRlcjo6cGFpbnRDb250ZW50c1JlY3QoU2tDYW52YXMqIGNhbnZhCiAgICAgZHJhd1Bp
Y3R1cmUoY2FudmFzKTsKIH0KIAotdm9pZCBCaXRtYXBTa1BpY3R1cmVDYW52YXNMYXllclRleHR1
cmVVcGRhdGVyOjp1cGRhdGVUZXh0dXJlUmVjdChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwg
R0MzRGVudW0gZm9ybWF0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCwgY29uc3QgdWludDhfdCog
cGl4ZWxzKQotewotICAgIG1fdGV4U3ViSW1hZ2UudXBsb2FkKHBpeGVscywgZGVzdFJlY3QsIGRl
c3RSZWN0LCBkZXN0UmVjdCwgZm9ybWF0LCBjb250ZXh0KTsKLX0KLQogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQogI2VuZGlmIC8vIFVTRShTS0lBKQogI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0JpdG1hcFNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0JpdG1hcFNrUGljdHVyZUNh
bnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuaAppbmRleCA0Y2Q4ZGYyLi5hYzJjMTY4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9CaXRtYXBTa1Bp
Y3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQml0bWFwU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJl
VXBkYXRlci5oCkBAIC00MiwxNyArNDIsMTcgQEAgcHVibGljOgogICAgIHB1YmxpYzoKICAgICAg
ICAgVGV4dHVyZShCaXRtYXBTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyKiwgUGFz
c1JlZlB0cjxNYW5hZ2VkVGV4dHVyZT4pOwogCi0gICAgICAgIHZpcnR1YWwgYm9vbCBuZWVkUHJl
cGFyZVJlY3QoKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHByZXBhcmVSZWN0KEdyYXBoaWNzQ29u
dGV4dDNEKiwgVGV4dHVyZUFsbG9jYXRvciosIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNv
bnN0IEludFJlY3QmIGRlc3RSZWN0KTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVu
dHNSZWN0KGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QpOwotICAgICAgICB2aXJ0dWFsIHZvaWQg
dXBkYXRlUmVjdChHcmFwaGljc0NvbnRleHQzRCosIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3Qs
IGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KTsKKyAgICAgICAgdmlydHVhbCBib29sIG5lZWRQcmVw
YXJlKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlKEdyYXBoaWNzQ29udGV4dDNEKiwg
VGV4dHVyZUFsbG9jYXRvciopOworCisgICAgICAgIHZpcnR1YWwgUGFzc093blB0cjxDQ1RleHR1
cmVVcGRhdGVyOjpUZXh0dXJlVXBkYXRlPiBjcmVhdGVDQ1RleHR1cmVVcGRhdGUoKTsKKyAgICAg
ICAgdmlydHVhbCB2b2lkIHB1c2hQcm9wZXJ0aWVzVG8oQ0NUZXh0dXJlVXBkYXRlcjo6VGV4dHVy
ZVVwZGF0ZSopOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgQml0bWFwU2tQaWN0dXJlQ2FudmFz
TGF5ZXJUZXh0dXJlVXBkYXRlciogdGV4dHVyZVVwZGF0ZXIoKSB7IHJldHVybiBtX3RleHR1cmVV
cGRhdGVyOyB9CiAKICAgICAgICAgQml0bWFwU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBk
YXRlciogbV90ZXh0dXJlVXBkYXRlcjsKICAgICAgICAgdWludDhfdCogbV9tYXBwZWRCdWZmZXI7
Ci0gICAgICAgIE93bkFycmF5UHRyPHVpbnQ4X3Q+IG1fYnVmZmVyOwogICAgIH07CiAKICAgICBz
dGF0aWMgUGFzc1JlZlB0cjxCaXRtYXBTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVy
PiBjcmVhdGUoUGFzc093blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4sIGJvb2wgdXNlTWFwVGV4
U3ViSW1hZ2UpOwpAQCAtNzAsNyArNzAsNiBAQCBwcml2YXRlOgogICAgIGV4cGxpY2l0IEJpdG1h
cFNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIoUGFzc093blB0cjxMYXllclBhaW50
ZXJDaHJvbWl1bT4sIGJvb2wgdXNlTWFwVGV4U3ViSW1hZ2UpOwogCiAgICAgYm9vbCBtX3VzZU1h
cFRleFN1YkltYWdlOwotICAgIExheWVyVGV4dHVyZVN1YkltYWdlIG1fdGV4U3ViSW1hZ2U7CiB9
OwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogI2VuZGlmIC8vIFVTRShTS0lBKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXll
ckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0NhbnZhczJETGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggN2RhNTU1Ni4uZWExNmVmZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRM
YXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uY3BwCkBAIC01OCw2ICs1OCwxNSBAQCB2b2lk
IENhbnZhczJETGF5ZXJDaHJvbWl1bTo6VXBkYXRlclRleHR1cmU6OnVwZGF0ZVJlY3QoR3JhcGhp
Y3NDb250ZXh0M0QqLCBjb25zdAogICAgIG1fbGF5ZXItPnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJj
ZXMoKTsKIH0KIAorUGFzc093blB0cjxDQ1RleHR1cmVVcGRhdGVyOjpUZXh0dXJlVXBkYXRlPiBD
YW52YXMyRExheWVyQ2hyb21pdW06OlVwZGF0ZXJUZXh0dXJlOjpjcmVhdGVDQ1RleHR1cmVVcGRh
dGUoKQoreworICAgIHJldHVybiBQYXNzT3duUHRyPENDVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmVV
cGRhdGU+KCk7Cit9CisKK3ZvaWQgQ2FudmFzMkRMYXllckNocm9taXVtOjpVcGRhdGVyVGV4dHVy
ZTo6cHVzaFByb3BlcnRpZXNUbyhDQ1RleHR1cmVVcGRhdGVyOjpUZXh0dXJlVXBkYXRlKikKK3sK
K30KKwogUGFzc1JlZlB0cjxDYW52YXMyRExheWVyQ2hyb21pdW0+IENhbnZhczJETGF5ZXJDaHJv
bWl1bTo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQogewogICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgQ2FudmFzMkRMYXllckNocm9taXVtKGNvbnRleHQpKTsKQEAgLTEwMiw4ICsx
MTEsNyBAQCB2b2lkIENhbnZhczJETGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291
cmNlcygpCiAKIHZvaWQgQ2FudmFzMkRMYXllckNocm9taXVtOjpmb3JFYWNoQ29tcG9zaXRvclJl
c291cmNlKExheWVyVGV4dHVyZVVwZGF0ZXI6OkhhbmRsZXImIGhhbmRsZXIpCiB7Ci0gICAgSW50
UmVjdCBub25FbXB0eVJlY3QoMCwgMCwgMSwgMSk7Ci0gICAgaGFuZGxlci5oYW5kbGUobV91cGRh
dGVyVGV4dHVyZS5nZXQoKSwgbm9uRW1wdHlSZWN0LCBub25FbXB0eVJlY3QpOworICAgIGhhbmRs
ZXIuaGFuZGxlKG1fdXBkYXRlclRleHR1cmUuZ2V0KCkpOwogfQogCiB2b2lkIENhbnZhczJETGF5
ZXJDaHJvbWl1bTo6Y29udGVudENoYW5nZWQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21p
dW0uaAppbmRleCBlODZhNjFhLi4yODIwNGFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hy
b21pdW0uaApAQCAtNTQsNiArNTQsOSBAQCBwdWJsaWM6CiAKICAgICAgICAgdmlydHVhbCB2b2lk
IHVwZGF0ZVJlY3QoR3JhcGhpY3NDb250ZXh0M0QqLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0
LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCk7CiAKKyAgICAgICAgdmlydHVhbCBQYXNzT3duUHRy
PENDVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmVVcGRhdGU+IGNyZWF0ZUNDVGV4dHVyZVVwZGF0ZSgp
OworICAgICAgICB2aXJ0dWFsIHZvaWQgcHVzaFByb3BlcnRpZXNUbyhDQ1RleHR1cmVVcGRhdGVy
OjpUZXh0dXJlVXBkYXRlKik7CisKICAgICBwcml2YXRlOgogICAgICAgICBleHBsaWNpdCBVcGRh
dGVyVGV4dHVyZShDYW52YXMyRExheWVyQ2hyb21pdW0qKTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJUZXh0dXJlVXBk
YXRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52
YXNMYXllclRleHR1cmVVcGRhdGVyLmNwcAppbmRleCA1MzRlNzliLi40NWZhZDkzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXll
clRleHR1cmVVcGRhdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9DYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmNwcApAQCAtNTEsMTIgKzUxLDEy
IEBAIFBhc3NSZWZQdHI8TWFuYWdlZFRleHR1cmU+IENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6
OlRleHR1cmU6OnJlcGxhY2VUZXh0dXJlKFRlCiAgICAgcmV0dXJuIG9sZC5yZWxlYXNlKCk7CiB9
CiAKLWJvb2wgQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZTo6bmVlZFByZXBhcmVS
ZWN0KCkKK2Jvb2wgQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZTo6bmVlZFByZXBh
cmUoKQogewogICAgIHJldHVybiAhbV90ZXh0dXJlLT50ZXh0dXJlSWQoKTsKIH0KIAotdm9pZCBD
YW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlOjpwcmVwYXJlUmVjdChHcmFwaGljc0Nv
bnRleHQzRCogY29udGV4dCwgVGV4dHVyZUFsbG9jYXRvciogYWxsb2NhdG9yLCBjb25zdCBJbnRS
ZWN0JiAvKiBzb3VyY2VSZWN0ICovLCBjb25zdCBJbnRSZWN0JiAvKiBkZXN0UmVjdCAqLykKK3Zv
aWQgQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZTo6cHJlcGFyZShHcmFwaGljc0Nv
bnRleHQzRCogY29udGV4dCwgVGV4dHVyZUFsbG9jYXRvciogYWxsb2NhdG9yKQogewogICAgIG1f
dGV4dHVyZS0+YWxsb2NhdGVUZXh0dXJlKGNvbnRleHQsIGFsbG9jYXRvcik7CiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXll
clRleHR1cmVVcGRhdGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9DYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmgKaW5kZXggOWM1MTVmYi4uMzkzZjE1YiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2Fu
dmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuaApAQCAtNDcsMTQgKzQ3
LDIyIEBAIHB1YmxpYzoKICAgICAgICAgdmlydHVhbCBNYW5hZ2VkVGV4dHVyZSogdGV4dHVyZSgp
IHsgcmV0dXJuIG1fdGV4dHVyZS5nZXQoKTsgfQogICAgICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
TWFuYWdlZFRleHR1cmU+IHJlcGxhY2VUZXh0dXJlKFRleHR1cmVNYW5hZ2VyKik7CiAKLSAgICAg
ICAgdmlydHVhbCBib29sIG5lZWRQcmVwYXJlUmVjdCgpOwotICAgICAgICB2aXJ0dWFsIHZvaWQg
cHJlcGFyZVJlY3QoR3JhcGhpY3NDb250ZXh0M0QqLCBUZXh0dXJlQWxsb2NhdG9yKiwgY29uc3Qg
SW50UmVjdCYgLyogc291cmNlUmVjdCAqLywgY29uc3QgSW50UmVjdCYgLyogZGVzdFJlY3QgKi8p
OworICAgICAgICB2aXJ0dWFsIGJvb2wgbmVlZFByZXBhcmUoKTsKKyAgICAgICAgdmlydHVhbCB2
b2lkIHByZXBhcmUoR3JhcGhpY3NDb250ZXh0M0QqLCBUZXh0dXJlQWxsb2NhdG9yKik7CisKKyAg
ICAgICAgdmlydHVhbCB2b2lkIHNldFVwZGF0ZVJlY3QoY29uc3QgSW50UmVjdCYgdXBkYXRlUmVj
dCkgeyBtX3VwZGF0ZVJlY3QgPSB1cGRhdGVSZWN0OyB9CisgICAgICAgIHZpcnR1YWwgSW50UmVj
dCB1cGRhdGVSZWN0KCkgY29uc3QgeyByZXR1cm4gbV91cGRhdGVSZWN0OyB9CisKKyAgICAgICAg
dmlydHVhbCB2b2lkIHNldENvbnRlbnRPZmZzZXQoY29uc3QgSW50UG9pbnQmIGNvbnRlbnRPZmZz
ZXQpIHsgbV9jb250ZW50T2Zmc2V0ID0gY29udGVudE9mZnNldDsgfQorICAgICAgICB2aXJ0dWFs
IEludFBvaW50IGNvbnRlbnRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRPZmZzZXQ7
IH0KIAogICAgIHByb3RlY3RlZDoKICAgICAgICAgZXhwbGljaXQgVGV4dHVyZShQYXNzUmVmUHRy
PE1hbmFnZWRUZXh0dXJlPik7CiAKICAgICBwcml2YXRlOgogICAgICAgICBSZWZQdHI8TWFuYWdl
ZFRleHR1cmU+IG1fdGV4dHVyZTsKKyAgICAgICAgSW50UmVjdCBtX3VwZGF0ZVJlY3Q7CisgICAg
ICAgIEludFBvaW50IG1fY29udGVudE9mZnNldDsKICAgICB9OwogCiAgICAgdmlydHVhbCB+Q2Fu
dmFzTGF5ZXJUZXh0dXJlVXBkYXRlcigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRnJhbWVCdWZmZXJTa1BpY3R1cmVDYW52YXNMYXllclRl
eHR1cmVVcGRhdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0ZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHAKaW5k
ZXggNDdiZDY2Zi4uZjViNmJhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vRnJhbWVCdWZmZXJTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVV
cGRhdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9GcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuY3BwCkBAIC0x
MDUsMjUgKzEwNSw0MCBAQCBGcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVw
ZGF0ZXI6OlRleHR1cmU6On5UZXh0dXJlKCkKIHsKIH0KIAotdm9pZCBGcmFtZUJ1ZmZlclNrUGlj
dHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU6OnVwZGF0ZVJlY3QoR3JhcGhp
Y3NDb250ZXh0M0QqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IElu
dFJlY3QmIGRlc3RSZWN0KQordm9pZCBGcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4
dHVyZVVwZGF0ZXI6OlRleHR1cmU6OnByZXBhcmUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQs
IFRleHR1cmVBbGxvY2F0b3IqIGFsbG9jYXRvcikKIHsKKyAgICB0ZXh0dXJlKCktPmFsbG9jYXRl
VGV4dHVyZShjb250ZXh0LCBhbGxvY2F0b3IpOworCiAgICAgLy8gTWFrZSBzdXJlIFNLSUEgdXNl
cyB0aGUgY29ycmVjdCBHTCBjb250ZXh0LgogICAgIGNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVu
dCgpOwogICAgIC8vIE5vdGlmeSBTS0lBIHRvIHN5bmMgaXRzIGludGVybmFsIEdMIHN0YXRlLgog
ICAgIGNvbnRleHQtPmdyQ29udGV4dCgpLT5yZXNldENvbnRleHQoKTsKIAotICAgIEFTU0VSVCh0
ZXh0dXJlKCktPnRleHR1cmVJZCgpKTsKLQogICAgIC8vIENyZWF0ZSBhbiBhY2NlbGVyYXRlZCBj
YW52YXMgdG8gZHJhdyBvbi4KICAgICBGcmFtZUJ1ZmZlciBidWZmZXI7CiAgICAgU2tDYW52YXMq
IGNhbnZhcyA9IGJ1ZmZlci5pbml0aWFsaXplKGNvbnRleHQsIHRleHR1cmUoKSk7CiAKKyAgICBJ
bnRSZWN0IGRlc3RSZWN0ID0gdXBkYXRlUmVjdCgpOworICAgIEludFBvaW50IG9mZnNldCA9IGNv
bnRlbnRPZmZzZXQoKTsKKyAgICBJbnRSZWN0IHNvdXJjZVJlY3QgPSBJbnRSZWN0KEludFBvaW50
KGRlc3RSZWN0LngoKSArIG9mZnNldC54KCksIGRlc3RSZWN0LnkoKSArIG9mZnNldC55KCkpLCBk
ZXN0UmVjdC5zaXplKCkpOworCiAgICAgdGV4dHVyZVVwZGF0ZXIoKS0+dXBkYXRlVGV4dHVyZVJl
Y3QoY29udGV4dCwgY2FudmFzLCBzb3VyY2VSZWN0LCBkZXN0UmVjdCk7CiAKICAgICAvLyBGbHVz
aCBTS0lBIGNvbnRleHQgc28gdGhhdCBhbGwgdGhlIHJlbmRlcmVkIHN0dWZmIGFwcGVhcnMgb24g
dGhlIHRleHR1cmUuCiAgICAgY29udGV4dC0+Z3JDb250ZXh0KCktPmZsdXNoKCk7CiB9CiAKK1Bh
c3NPd25QdHI8Q0NUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZVVwZGF0ZT4gRnJhbWVCdWZmZXJTa1Bp
Y3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlOjpjcmVhdGVDQ1RleHR1cmVV
cGRhdGUoKQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBQYXNzT3du
UHRyPENDVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmVVcGRhdGU+KCk7Cit9CisKK3ZvaWQgRnJhbWVC
dWZmZXJTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlOjpwdXNoUHJv
cGVydGllc1RvKENDVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmVVcGRhdGUqKQoreworICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworfQorCiBQYXNzUmVmUHRyPEZyYW1lQnVmZmVyU2tQaWN0dXJlQ2Fu
dmFzTGF5ZXJUZXh0dXJlVXBkYXRlcj4gRnJhbWVCdWZmZXJTa1BpY3R1cmVDYW52YXNMYXllclRl
eHR1cmVVcGRhdGVyOjpjcmVhdGUoUGFzc093blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4gcGFp
bnRlcikKIHsKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEZyYW1lQnVmZmVyU2tQaWN0dXJlQ2Fu
dmFzTGF5ZXJUZXh0dXJlVXBkYXRlcihwYWludGVyKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9GcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZh
c0xheWVyVGV4dHVyZVVwZGF0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0ZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5o
CmluZGV4IDZjYTg0ZDUuLjMzOWY1MWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0
dXJlVXBkYXRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0ZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5oCkBAIC00
Myw3ICs0MywxMSBAQCBwdWJsaWM6CiAgICAgICAgIFRleHR1cmUoRnJhbWVCdWZmZXJTa1BpY3R1
cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyKiwgUGFzc1JlZlB0cjxNYW5hZ2VkVGV4dHVyZT4p
OwogICAgICAgICB2aXJ0dWFsIH5UZXh0dXJlKCk7CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIHVw
ZGF0ZVJlY3QoR3JhcGhpY3NDb250ZXh0M0QqLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBj
b25zdCBJbnRSZWN0JiBkZXN0UmVjdCk7CisgICAgICAgIHZpcnR1YWwgYm9vbCBuZWVkUHJlcGFy
ZSgpIHsgcmV0dXJuIHRydWU7IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIHByZXBhcmUoR3JhcGhp
Y3NDb250ZXh0M0QqLCBUZXh0dXJlQWxsb2NhdG9yKik7CisKKyAgICAgICAgdmlydHVhbCBQYXNz
T3duUHRyPENDVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmVVcGRhdGU+IGNyZWF0ZUNDVGV4dHVyZVVw
ZGF0ZSgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcHVzaFByb3BlcnRpZXNUbyhDQ1RleHR1cmVV
cGRhdGVyOjpUZXh0dXJlVXBkYXRlKik7CiAKICAgICBwcml2YXRlOgogICAgICAgICBGcmFtZUJ1
ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIqIHRleHR1cmVVcGRhdGVyKCkg
eyByZXR1cm4gbV90ZXh0dXJlVXBkYXRlcjsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5j
cHAKaW5kZXggNzQ1YzhhNS4uMTJjNDIxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0u
Y3BwCkBAIC0zNSw3ICszNSw2IEBACiAjaW5jbHVkZSAiSW1hZ2VMYXllckNocm9taXVtLmgiCiAK
ICNpbmNsdWRlICJJbWFnZS5oIgotI2luY2x1ZGUgIkxheWVyVGV4dHVyZVN1YkltYWdlLmgiCiAj
aW5jbHVkZSAiTGF5ZXJUZXh0dXJlVXBkYXRlci5oIgogI2luY2x1ZGUgIk1hbmFnZWRUZXh0dXJl
LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Db2xvci5oIgpAQCAtNTQsNyArNTMsNiBAQCBwdWJsaWM6
CiAgICAgICAgIHsKICAgICAgICAgfQogCi0gICAgICAgIHZpcnR1YWwgTWFuYWdlZFRleHR1cmUq
IHRleHR1cmUoKSB7IHJldHVybiBtX3RleHR1cmUuZ2V0KCk7IH0KICAgICAgICAgUGFzc1JlZlB0
cjxNYW5hZ2VkVGV4dHVyZT4gcmVwbGFjZVRleHR1cmUoVGV4dHVyZU1hbmFnZXIqIG1hbmFnZXIp
CiAgICAgICAgIHsKICAgICAgICAgICAgIFJlZlB0cjxNYW5hZ2VkVGV4dHVyZT4gb2xkID0gbV90
ZXh0dXJlOwpAQCAtNjIsMjcgKzYwLDcxIEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiBv
bGQucmVsZWFzZSgpOwogICAgICAgICB9CiAKLSAgICAgICAgdmlydHVhbCBib29sIG5lZWRQcmVw
YXJlUmVjdCgpCisgICAgICAgIGJvb2wgbmVlZFByZXBhcmUoKQogICAgICAgICB7CiAgICAgICAg
ICAgICByZXR1cm4gIW1fdGV4dHVyZS0+dGV4dHVyZUlkKCk7CiAgICAgICAgIH0KIAotICAgICAg
ICB2aXJ0dWFsIHZvaWQgcHJlcGFyZVJlY3QoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIFRl
eHR1cmVBbGxvY2F0b3IqIGFsbG9jYXRvciwgY29uc3QgSW50UmVjdCYgLyogc291cmNlUmVjdCAq
LywgY29uc3QgSW50UmVjdCYgLyogZGVzdFJlY3QgKi8pCisgICAgICAgIHZvaWQgcHJlcGFyZShH
cmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgVGV4dHVyZUFsbG9jYXRvciogYWxsb2NhdG9yKQog
ICAgICAgICB7CiAgICAgICAgICAgICBtX3RleHR1cmUtPmFsbG9jYXRlVGV4dHVyZShjb250ZXh0
LCBhbGxvY2F0b3IpOwogICAgICAgICB9CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVJl
Y3QoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3Qs
IGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KQorICAgICAgICB2b2lkIHNldFVwZGF0ZVJlY3QoY29u
c3QgSW50UmVjdCYgdXBkYXRlUmVjdCkKICAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKHRl
eHR1cmUoKS0+dGV4dHVyZUlkKCkpOwotICAgICAgICAgICAgY29udGV4dC0+YmluZFRleHR1cmUo
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHRleHR1cmUoKS0+dGV4dHVyZUlkKCkpOwot
ICAgICAgICAgICAgdGV4dHVyZVVwZGF0ZXIoKS0+dXBkYXRlVGV4dHVyZVJlY3QoY29udGV4dCwg
dGV4dHVyZSgpLT5mb3JtYXQoKSwgc291cmNlUmVjdCwgZGVzdFJlY3QpOworICAgICAgICAgICAg
bV91cGRhdGVSZWN0ID0gdXBkYXRlUmVjdDsKKyAgICAgICAgfQorCisgICAgICAgIEludFJlY3Qg
dXBkYXRlUmVjdCgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX3VwZGF0
ZVJlY3Q7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHNldENvbnRlbnRPZmZzZXQoY29uc3Qg
SW50UG9pbnQmIGNvbnRlbnRPZmZzZXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fY29udGVu
dE9mZnNldCA9IGNvbnRlbnRPZmZzZXQ7CisgICAgICAgIH0KKworICAgICAgICBJbnRQb2ludCBj
b250ZW50T2Zmc2V0KCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY29u
dGVudE9mZnNldDsKKyAgICAgICAgfQorCisgICAgICAgIHZpcnR1YWwgUGFzc093blB0cjxDQ1Rl
eHR1cmVVcGRhdGVyOjpUZXh0dXJlVXBkYXRlPiBjcmVhdGVDQ1RleHR1cmVVcGRhdGUoKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gQ0NUZXh0dXJlVXBkYXRlcjo6U3ViSW1hZ2VUZXh0
dXJlVXBkYXRlOjpjcmVhdGUoKTsKKyAgICAgICAgfQorCisgICAgICAgIHZpcnR1YWwgdm9pZCBw
dXNoUHJvcGVydGllc1RvKENDVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmVVcGRhdGUqIHVwZGF0ZSkK
KyAgICAgICAgeworICAgICAgICAgICAgQ0NUZXh0dXJlVXBkYXRlcjo6U3ViSW1hZ2VUZXh0dXJl
VXBkYXRlKiBzdWJJbWFnZVVwZGF0ZSA9IHN0YXRpY19jYXN0PENDVGV4dHVyZVVwZGF0ZXI6OlN1
YkltYWdlVGV4dHVyZVVwZGF0ZSo+KHVwZGF0ZSk7CisKKyAgICAgICAgICAgIEludFJlY3QgaW1h
Z2VSZWN0ID0gdGV4dHVyZVVwZGF0ZXIoKS0+aW1hZ2VSZWN0KCk7CisgICAgICAgICAgICBJbnRS
ZWN0IGRlc3RSZWN0ID0gdXBkYXRlUmVjdCgpOworICAgICAgICAgICAgSW50UG9pbnQgb2Zmc2V0
ID0gY29udGVudE9mZnNldCgpOworICAgICAgICAgICAgSW50UmVjdCBzb3VyY2VSZWN0ID0gSW50
UmVjdChJbnRQb2ludChkZXN0UmVjdC54KCkgKyBvZmZzZXQueCgpLCBkZXN0UmVjdC55KCkgKyBv
ZmZzZXQueSgpKSwgZGVzdFJlY3Quc2l6ZSgpKTsKKworICAgICAgICAgICAgLy8gU291cmNlIHJl
Y3Qgc2hvdWxkIG5ldmVyIGdvIG91dHNpZGUgdGhlIGltYWdlIHBpeGVscywgZXZlbiBpZiB0aGlz
CisgICAgICAgICAgICAvLyBpcyByZXF1ZXN0ZWQgYmVjYXVzZSB0aGUgdGV4dHVyZSBleHRlbmRz
IG91dHNpZGUgdGhlIGltYWdlLgorICAgICAgICAgICAgSW50UmVjdCBjbGlwcGVkU291cmNlUmVj
dCA9IHNvdXJjZVJlY3Q7CisgICAgICAgICAgICBjbGlwcGVkU291cmNlUmVjdC5pbnRlcnNlY3Qo
aW1hZ2VSZWN0KTsKKworICAgICAgICAgICAgSW50UmVjdCBjbGlwcGVkRGVzdFJlY3QgPSBkZXN0
UmVjdDsKKyAgICAgICAgICAgIGNsaXBwZWREZXN0UmVjdC5tb3ZlKGNsaXBwZWRTb3VyY2VSZWN0
LmxvY2F0aW9uKCkgLSBzb3VyY2VSZWN0LmxvY2F0aW9uKCkpOworICAgICAgICAgICAgY2xpcHBl
ZERlc3RSZWN0LnNldFNpemUoY2xpcHBlZFNvdXJjZVJlY3Quc2l6ZSgpKTsKKworICAgICAgICAg
ICAgc3ViSW1hZ2VVcGRhdGUtPnNldEZvcm1hdCh0ZXh0dXJlKCktPmZvcm1hdCgpKTsKKyAgICAg
ICAgICAgIHN1YkltYWdlVXBkYXRlLT5zZXRUZXh0dXJlSWQodGV4dHVyZSgpLT50ZXh0dXJlSWQo
KSk7CisgICAgICAgICAgICBzdWJJbWFnZVVwZGF0ZS0+c2V0UmVjdChjbGlwcGVkRGVzdFJlY3Qp
OworICAgICAgICAgICAgc3ViSW1hZ2VVcGRhdGUtPnNldFBpeGVsRGF0YSh0ZXh0dXJlVXBkYXRl
cigpLT5pbWFnZSgpLnBpeGVscygpLCBpbWFnZVJlY3QsIGNsaXBwZWRTb3VyY2VSZWN0KTsKICAg
ICAgICAgfQogCiAgICAgcHJpdmF0ZToKICAgICAgICAgSW1hZ2VMYXllclRleHR1cmVVcGRhdGVy
KiB0ZXh0dXJlVXBkYXRlcigpIHsgcmV0dXJuIG1fdGV4dHVyZVVwZGF0ZXI7IH0KIAogICAgICAg
ICBSZWZQdHI8TWFuYWdlZFRleHR1cmU+IG1fdGV4dHVyZTsKKyAgICAgICAgSW50UmVjdCBtX3Vw
ZGF0ZVJlY3Q7CisgICAgICAgIEludFBvaW50IG1fY29udGVudE9mZnNldDsKICAgICAgICAgSW1h
Z2VMYXllclRleHR1cmVVcGRhdGVyKiBtX3RleHR1cmVVcGRhdGVyOwogICAgIH07CiAKQEAgLTEw
Niw0OCArMTQ4LDMyIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBMYXllclRleHR1cmVVcGRh
dGVyOjpTYW1wbGVkVGV4ZWxGb3JtYXRSR0JBIDogTGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2FtcGxl
ZFRleGVsRm9ybWF0QkdSQTsKICAgICB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50
cyhjb25zdCBJbnRSZWN0JiAvKiBjb250ZW50UmVjdCAqLywgY29uc3QgSW50U2l6ZSYgdGlsZVNp
emUsIGludCAvKiBib3JkZXJUZXhlbHMgKi8sIGZsb2F0IC8qIGNvbnRlbnRzU2NhbGUgKi8pCisg
ICAgdm9pZCB1cGRhdGVGcm9tSW1hZ2UoTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2UpCiAgICAg
ewotICAgICAgICBtX3RleFN1YkltYWdlLnNldFN1YkltYWdlU2l6ZSh0aWxlU2l6ZSk7CisgICAg
ICAgIG1faW1hZ2UudXBkYXRlRnJvbUltYWdlKG5hdGl2ZUltYWdlKTsKICAgICB9CiAKLSAgICB2
aXJ0dWFsIHZvaWQgdXBkYXRlVGV4dHVyZVJlY3QoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQs
IHVuc2lnbmVkIGZvcm1hdCwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVj
dCYgZGVzdFJlY3QpCisgICAgSW50U2l6ZSBpbWFnZVNpemUoKSBjb25zdAogICAgIHsKLSAgICAg
ICAgLy8gU291cmNlIHJlY3Qgc2hvdWxkIG5ldmVyIGdvIG91dHNpZGUgdGhlIGltYWdlIHBpeGVs
cywgZXZlbiBpZiB0aGlzCi0gICAgICAgIC8vIGlzIHJlcXVlc3RlZCBiZWNhdXNlIHRoZSB0ZXh0
dXJlIGV4dGVuZHMgb3V0c2lkZSB0aGUgaW1hZ2UuCi0gICAgICAgIEludFJlY3QgY2xpcHBlZFNv
dXJjZVJlY3QgPSBzb3VyY2VSZWN0OwotICAgICAgICBjbGlwcGVkU291cmNlUmVjdC5pbnRlcnNl
Y3QoaW1hZ2VSZWN0KCkpOwotCi0gICAgICAgIEludFJlY3QgY2xpcHBlZERlc3RSZWN0ID0gZGVz
dFJlY3Q7Ci0gICAgICAgIGNsaXBwZWREZXN0UmVjdC5tb3ZlKGNsaXBwZWRTb3VyY2VSZWN0Lmxv
Y2F0aW9uKCkgLSBzb3VyY2VSZWN0LmxvY2F0aW9uKCkpOwotICAgICAgICBjbGlwcGVkRGVzdFJl
Y3Quc2V0U2l6ZShjbGlwcGVkU291cmNlUmVjdC5zaXplKCkpOwotCi0gICAgICAgIG1fdGV4U3Vi
SW1hZ2UudXBsb2FkKG1faW1hZ2UucGl4ZWxzKCksIGltYWdlUmVjdCgpLCBjbGlwcGVkU291cmNl
UmVjdCwgY2xpcHBlZERlc3RSZWN0LCBmb3JtYXQsIGNvbnRleHQpOworICAgICAgICByZXR1cm4g
bV9pbWFnZS5zaXplKCk7CiAgICAgfQogCi0gICAgdm9pZCB1cGRhdGVGcm9tSW1hZ2UoTmF0aXZl
SW1hZ2VQdHIgbmF0aXZlSW1hZ2UpCisgICAgSW50UmVjdCBpbWFnZVJlY3QoKSBjb25zdAogICAg
IHsKLSAgICAgICAgbV9pbWFnZS51cGRhdGVGcm9tSW1hZ2UobmF0aXZlSW1hZ2UpOworICAgICAg
ICByZXR1cm4gSW50UmVjdChJbnRQb2ludDo6emVybygpLCBtX2ltYWdlLnNpemUoKSk7CiAgICAg
fQogCi0gICAgSW50U2l6ZSBpbWFnZVNpemUoKSBjb25zdAorICAgIFBsYXRmb3JtSW1hZ2UmIGlt
YWdlKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBtX2ltYWdlLnNpemUoKTsKKyAgICAgICAgcmV0
dXJuIG1faW1hZ2U7CiAgICAgfQogCiBwcml2YXRlOgogICAgIGV4cGxpY2l0IEltYWdlTGF5ZXJU
ZXh0dXJlVXBkYXRlcihib29sIHVzZU1hcFRleFN1YkltYWdlKQotICAgICAgICA6IG1fdGV4U3Vi
SW1hZ2UodXNlTWFwVGV4U3ViSW1hZ2UpCi0gICAgewotICAgIH0KLQotICAgIEludFJlY3QgaW1h
Z2VSZWN0KCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBJbnRSZWN0KEludFBvaW50Ojp6
ZXJvKCksIG1faW1hZ2Uuc2l6ZSgpKTsKICAgICB9CiAKICAgICBQbGF0Zm9ybUltYWdlIG1faW1h
Z2U7Ci0gICAgTGF5ZXJUZXh0dXJlU3ViSW1hZ2UgbV90ZXhTdWJJbWFnZTsKIH07CiAKIFBhc3NS
ZWZQdHI8SW1hZ2VMYXllckNocm9taXVtPiBJbWFnZUxheWVyQ2hyb21pdW06OmNyZWF0ZShDQ0xh
eWVyRGVsZWdhdGUqIGRlbGVnYXRlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlci5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlci5oCmluZGV4
IGU4N2Q1OTkuLjU4MWQ2MjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyLmgKQEAgLTI5
LDYgKzI5LDcgQEAKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKIAorI2luY2x1
ZGUgImNjL0NDVGV4dHVyZVVwZGF0ZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc1R5cGVzM0QuaCIK
ICNpbmNsdWRlICJNYW5hZ2VkVGV4dHVyZS5oIgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+
CkBAIC00OCwxNyArNDksMjUgQEAgcHVibGljOgogCiAgICAgICAgIHZpcnR1YWwgTWFuYWdlZFRl
eHR1cmUqIHRleHR1cmUoKSB7IHJldHVybiAwOyB9CiAgICAgICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxNYW5hZ2VkVGV4dHVyZT4gcmVwbGFjZVRleHR1cmUoVGV4dHVyZU1hbmFnZXIqKSB7IHJldHVy
biBSZWZQdHI8TWFuYWdlZFRleHR1cmU+KCk7IH0KLSAgICAgICAgdmlydHVhbCBib29sIG5lZWRQ
cmVwYXJlUmVjdCgpIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBwcmVw
YXJlUmVjdChHcmFwaGljc0NvbnRleHQzRCosIFRleHR1cmVBbGxvY2F0b3IqLCBjb25zdCBJbnRS
ZWN0JiAvKiBzb3VyY2VSZWN0ICovLCBjb25zdCBJbnRSZWN0JiAvKiBkZXN0UmVjdCAqLykgeyB9
Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzUmVjdChjb25zdCBJbnRSZWN0JiAv
KiBzb3VyY2VSZWN0ICovKSB7IH0KLSAgICAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVJlY3QoR3Jh
cGhpY3NDb250ZXh0M0QqLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0
JiBkZXN0UmVjdCkgPSAwOworCisgICAgICAgIHZpcnR1YWwgYm9vbCBuZWVkUHJlcGFyZSgpIHsg
cmV0dXJuIGZhbHNlOyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlKEdyYXBoaWNzQ29u
dGV4dDNEKiwgVGV4dHVyZUFsbG9jYXRvciopIHsgfQorCisgICAgICAgIHZpcnR1YWwgdm9pZCBz
ZXRVcGRhdGVSZWN0KGNvbnN0IEludFJlY3QmKSB7IH0KKyAgICAgICAgdmlydHVhbCBJbnRSZWN0
IHVwZGF0ZVJlY3QoKSBjb25zdCB7IHJldHVybiBJbnRSZWN0KCk7IH0KKworICAgICAgICB2aXJ0
dWFsIHZvaWQgc2V0Q29udGVudE9mZnNldChjb25zdCBJbnRQb2ludCYpIHsgfQorICAgICAgICB2
aXJ0dWFsIEludFBvaW50IGNvbnRlbnRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBJbnRQb2ludCgp
OyB9CisKKyAgICAgICAgdmlydHVhbCBQYXNzT3duUHRyPENDVGV4dHVyZVVwZGF0ZXI6OlRleHR1
cmVVcGRhdGU+IGNyZWF0ZUNDVGV4dHVyZVVwZGF0ZSgpID0gMDsKKyAgICAgICAgdmlydHVhbCB2
b2lkIHB1c2hQcm9wZXJ0aWVzVG8oQ0NUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZVVwZGF0ZSopID0g
MDsKICAgICB9OwogCiAgICAgY2xhc3MgSGFuZGxlciB7CiAgICAgcHVibGljOgogICAgICAgICB2
aXJ0dWFsIH5IYW5kbGVyKCkgeyB9OwogCi0gICAgICAgIHZpcnR1YWwgdm9pZCBoYW5kbGUoTGF5
ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZSosIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNv
bnN0IEludFJlY3QmIGRlc3RSZWN0KSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBoYW5kbGUo
TGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZSopID0gMDsKICAgICB9OwogCiAgICAgdmlydHVh
bCB+TGF5ZXJUZXh0dXJlVXBkYXRlcigpIHsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5j
cHAKaW5kZXggNDJiZDQ0YS4uNDFkOTRjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0u
Y3BwCkBAIC0xNzksNDAgKzE3OSw3IEBAIHZvaWQgVGlsZWRMYXllckNocm9taXVtOjpmb3JFYWNo
Q29tcG9zaXRvclJlc291cmNlKExheWVyVGV4dHVyZVVwZGF0ZXI6OkhhbmRsZXImCiAKICAgICBm
b3IgKENDTGF5ZXJUaWxpbmdEYXRhOjpUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0gbV90
aWxlci0+dGlsZXMoKS5iZWdpbigpOyBpdGVyICE9IG1fdGlsZXItPnRpbGVzKCkuZW5kKCk7ICsr
aXRlcikgewogICAgICAgICBVcGRhdGFibGVUaWxlKiB0aWxlID0gc3RhdGljX2Nhc3Q8VXBkYXRh
YmxlVGlsZSo+KGl0ZXItPnNlY29uZC5nZXQoKSk7Ci0gICAgICAgIGlmICghdGlsZS0+bWFuYWdl
ZFRleHR1cmUoKS0+aXNWYWxpZChtX3RpbGVyLT50aWxlU2l6ZSgpLCBtX3RleHR1cmVGb3JtYXQp
KQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgSW50UmVjdCBzb3VyY2VSZWN0Owot
ICAgICAgICBJbnRSZWN0IGRlc3RSZWN0OwotCi0gICAgICAgIC8vIFBhaW50aW5nIGNvdWxkIGNh
dXNlIGNvbXBvc2l0aW5nIHRvIGdldCB0dXJuZWQgb2ZmLCB3aGljaCBtYXkgY2F1c2UgdGhlIHRp
bGVyIHRvIGJlY29tZSBpbnZhbGlkYXRlZCBtaWQtdXBkYXRlLgotICAgICAgICBpZiAoIW1fc2tp
cHNEcmF3ICYmICFtX3JlcXVlc3RlZFVwZGF0ZVJlY3QuaXNFbXB0eSgpICYmICFtX3BhaW50UmVj
dC5pc0VtcHR5KCkpCi0gICAgICAgICAgICBzb3VyY2VSZWN0ID0gdGlsZS0+bV91cGRhdGVSZWN0
OwotCi0gICAgICAgIGlmICghc291cmNlUmVjdC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIEFT
U0VSVCh0aWxlLT5tYW5hZ2VkVGV4dHVyZSgpLT5pc1Jlc2VydmVkKCkpOwotICAgICAgICAgICAg
Y29uc3QgSW50UG9pbnQgYW5jaG9yID0gbV90aWxlci0+dGlsZUNvbnRlbnRSZWN0KHRpbGUpLmxv
Y2F0aW9uKCk7Ci0KLSAgICAgICAgICAgIC8vIENhbGN1bGF0ZSB0aWxlLXNwYWNlIHJlY3Rhbmds
ZSB0byB1cGxvYWQgaW50by4KLSAgICAgICAgICAgIGRlc3RSZWN0ID0gSW50UmVjdChJbnRQb2lu
dChzb3VyY2VSZWN0LngoKSAtIGFuY2hvci54KCksIHNvdXJjZVJlY3QueSgpIC0gYW5jaG9yLnko
KSksIHNvdXJjZVJlY3Quc2l6ZSgpKTsKLSAgICAgICAgICAgIGlmIChkZXN0UmVjdC54KCkgPCAw
KQotICAgICAgICAgICAgICAgIENSQVNIKCk7Ci0gICAgICAgICAgICBpZiAoZGVzdFJlY3QueSgp
IDwgMCkKLSAgICAgICAgICAgICAgICBDUkFTSCgpOwotCi0gICAgICAgICAgICAvLyBPZmZzZXQg
ZnJvbSBwYWludCByZWN0YW5nbGUgdG8gdGhpcyB0aWxlJ3MgZGlydHkgcmVjdGFuZ2xlLgotICAg
ICAgICAgICAgSW50UG9pbnQgcGFpbnRPZmZzZXQoc291cmNlUmVjdC54KCkgLSBtX3BhaW50UmVj
dC54KCksIHNvdXJjZVJlY3QueSgpIC0gbV9wYWludFJlY3QueSgpKTsKLSAgICAgICAgICAgIGlm
IChwYWludE9mZnNldC54KCkgPCAwKQotICAgICAgICAgICAgICAgIENSQVNIKCk7Ci0gICAgICAg
ICAgICBpZiAocGFpbnRPZmZzZXQueSgpIDwgMCkKLSAgICAgICAgICAgICAgICBDUkFTSCgpOwot
ICAgICAgICAgICAgaWYgKHBhaW50T2Zmc2V0LngoKSArIGRlc3RSZWN0LndpZHRoKCkgPiBtX3Bh
aW50UmVjdC53aWR0aCgpKQotICAgICAgICAgICAgICAgIENSQVNIKCk7Ci0gICAgICAgICAgICBp
ZiAocGFpbnRPZmZzZXQueSgpICsgZGVzdFJlY3QuaGVpZ2h0KCkgPiBtX3BhaW50UmVjdC5oZWln
aHQoKSkKLSAgICAgICAgICAgICAgICBDUkFTSCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgaGFu
ZGxlci5oYW5kbGUodGlsZS0+dGV4dHVyZSgpLCBzb3VyY2VSZWN0LCBkZXN0UmVjdCk7CisgICAg
ICAgIGhhbmRsZXIuaGFuZGxlKHRpbGUtPnRleHR1cmUoKSk7CiAgICAgfQogfQogCkBAIC0zMzcs
NyArMzA0LDcgQEAgdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnByZXBhcmVUb1VwZGF0ZShjb25z
dCBJbnRSZWN0JiBjb250ZW50UmVjdCkKICAgICAvLyBSZXNldCBtX3VwZGF0ZVJlY3QgZm9yIGFs
bCB0aWxlcy4KICAgICBmb3IgKENDTGF5ZXJUaWxpbmdEYXRhOjpUaWxlTWFwOjpjb25zdF9pdGVy
YXRvciBpdGVyID0gbV90aWxlci0+dGlsZXMoKS5iZWdpbigpOyBpdGVyICE9IG1fdGlsZXItPnRp
bGVzKCkuZW5kKCk7ICsraXRlcikgewogICAgICAgICBVcGRhdGFibGVUaWxlKiB0aWxlID0gc3Rh
dGljX2Nhc3Q8VXBkYXRhYmxlVGlsZSo+KGl0ZXItPnNlY29uZC5nZXQoKSk7Ci0gICAgICAgIHRp
bGUtPm1fdXBkYXRlUmVjdCA9IEludFJlY3QoKTsKKyAgICAgICAgdGlsZS0+dGV4dHVyZSgpLT5z
ZXRVcGRhdGVSZWN0KEludFJlY3QoKSk7CiAgICAgfQogCiAgICAgaWYgKGNvbnRlbnRSZWN0Lmlz
RW1wdHkoKSkgewpAQCAtNDA0LDExICszNzEsMjkgQEAgdm9pZCBUaWxlZExheWVyQ2hyb21pdW06
OnByZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKICAgICAgICAgICAg
IC8vIG1ha2Ugc3VyZSB0aGF0IHNvdXJjZVJlY3QgZG9lc24ndCBleHRlbmQgb3V0c2lkZSBvZiBp
dC4KICAgICAgICAgICAgIHNvdXJjZVJlY3QuaW50ZXJzZWN0KG1fcGFpbnRSZWN0KTsKIAotICAg
ICAgICAgICAgLy8gdXBkYXRlQ29tcG9zaXRvclJlc291cmNlcygpIHVzZXMgbV91cGRhdGVSZWN0
IHRvIGRldGVybWluZQotICAgICAgICAgICAgLy8gdGhlIHRpbGVzIHRvIHVwZGF0ZSBzbyB3ZSBj
YW4gY2xlYXIgdGhlIGRpcnR5IHJlY3RhbmdsZSBoZXJlLgotICAgICAgICAgICAgdGlsZS0+Y2xl
YXJEaXJ0eSgpOworICAgICAgICAgICAgY29uc3QgSW50UG9pbnQgYW5jaG9yID0gbV90aWxlci0+
dGlsZUNvbnRlbnRSZWN0KHRpbGUpLmxvY2F0aW9uKCk7CisgICAgICAgICAgICAvLyBDYWxjdWxh
dGUgdGlsZS1zcGFjZSByZWN0YW5nbGUgdG8gdXBsb2FkIGludG8uCisgICAgICAgICAgICBJbnRS
ZWN0IGRlc3RSZWN0ID0gSW50UmVjdChJbnRQb2ludChzb3VyY2VSZWN0LngoKSAtIGFuY2hvci54
KCksIHNvdXJjZVJlY3QueSgpIC0gYW5jaG9yLnkoKSksIHNvdXJjZVJlY3Quc2l6ZSgpKTsKKyAg
ICAgICAgICAgIGlmIChkZXN0UmVjdC54KCkgPCAwKQorICAgICAgICAgICAgICAgIENSQVNIKCk7
CisgICAgICAgICAgICBpZiAoZGVzdFJlY3QueSgpIDwgMCkKKyAgICAgICAgICAgICAgICBDUkFT
SCgpOworCisgICAgICAgICAgICAvLyBPZmZzZXQgZnJvbSBwYWludCByZWN0YW5nbGUgdG8gdGhp
cyB0aWxlJ3MgZGlydHkgcmVjdGFuZ2xlLgorICAgICAgICAgICAgSW50UG9pbnQgcGFpbnRPZmZz
ZXQoc291cmNlUmVjdC54KCkgLSBtX3BhaW50UmVjdC54KCksIHNvdXJjZVJlY3QueSgpIC0gbV9w
YWludFJlY3QueSgpKTsKKyAgICAgICAgICAgIGlmIChwYWludE9mZnNldC54KCkgPCAwKQorICAg
ICAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgICAgICBpZiAocGFpbnRPZmZzZXQueSgpIDwg
MCkKKyAgICAgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAgaWYgKHBhaW50T2Zmc2V0
LngoKSArIGRlc3RSZWN0LndpZHRoKCkgPiBtX3BhaW50UmVjdC53aWR0aCgpKQorICAgICAgICAg
ICAgICAgIENSQVNIKCk7CisgICAgICAgICAgICBpZiAocGFpbnRPZmZzZXQueSgpICsgZGVzdFJl
Y3QuaGVpZ2h0KCkgPiBtX3BhaW50UmVjdC5oZWlnaHQoKSkKKyAgICAgICAgICAgICAgICBDUkFT
SCgpOwogCi0gICAgICAgICAgICB0aWxlLT5tX3VwZGF0ZVJlY3QgPSBzb3VyY2VSZWN0OworICAg
ICAgICAgICAgdGlsZS0+dGV4dHVyZSgpLT5zZXRVcGRhdGVSZWN0KGRlc3RSZWN0KTsKKyAgICAg
ICAgICAgIHRpbGUtPnRleHR1cmUoKS0+c2V0Q29udGVudE9mZnNldChhbmNob3IpOworCisgICAg
ICAgICAgICB0aWxlLT5jbGVhckRpcnR5KCk7CiAgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVy
Q2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
VmlkZW9MYXllckNocm9taXVtLmNwcAppbmRleCBiZTYwZTY1Li5kOGQ2M2UyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hy
b21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTYyLDcgKzYyLDcgQEAgUGFzc1JlZlB0cjxNYW5h
Z2VkVGV4dHVyZT4gVmlkZW9MYXllckNocm9taXVtOjpVcGRhdGVyVGV4dHVyZTo6cmVwbGFjZVRl
eHR1cmUoVGUKICAgICByZXR1cm4gb2xkLnJlbGVhc2UoKTsKIH0KIAotdm9pZCBWaWRlb0xheWVy
Q2hyb21pdW06OlVwZGF0ZXJUZXh0dXJlOjpwcmVwYXJlUmVjdChHcmFwaGljc0NvbnRleHQzRCog
Y29udGV4dCwgVGV4dHVyZUFsbG9jYXRvciogYWxsb2NhdG9yLCBjb25zdCBJbnRSZWN0JiAvKiBz
b3VyY2VSZWN0ICovLCBjb25zdCBJbnRSZWN0JiAvKiBkZXN0UmVjdCAqLykKK3ZvaWQgVmlkZW9M
YXllckNocm9taXVtOjpVcGRhdGVyVGV4dHVyZTo6cHJlcGFyZShHcmFwaGljc0NvbnRleHQzRCog
Y29udGV4dCwgVGV4dHVyZUFsbG9jYXRvciogYWxsb2NhdG9yKQogewogICAgIEludFNpemUgZGlt
ZW5zaW9ucyA9IG1fdGV4dHVyZS0+c2l6ZSgpOwogCkBAIC04NywxOSArODcsMjIgQEAgdm9pZCBW
aWRlb0xheWVyQ2hyb21pdW06OlVwZGF0ZXJUZXh0dXJlOjpkYXRhUmVjdChjb25zdCB2b2lkKiBk
YXRhKQogICAgICAgICBtZW1jcHkobV9idWZmZXIuZ2V0KCksIGRhdGEsIGJ1ZmZlclNpemUpOwog
fQogCi12b2lkIFZpZGVvTGF5ZXJDaHJvbWl1bTo6VXBkYXRlclRleHR1cmU6OnVwZGF0ZVJlY3Qo
R3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIC8qIHNvdXJjZVJlY3Qg
Ki8sIGNvbnN0IEludFJlY3QmIC8qIGRlc3RSZWN0ICovKQorUGFzc093blB0cjxDQ1RleHR1cmVV
cGRhdGVyOjpUZXh0dXJlVXBkYXRlPiBWaWRlb0xheWVyQ2hyb21pdW06OlVwZGF0ZXJUZXh0dXJl
OjpjcmVhdGVDQ1RleHR1cmVVcGRhdGUoKQogewotICAgIEFTU0VSVChtX3RleHR1cmUtPnRleHR1
cmVJZCgpKTsKLSAgICBjb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV8yRCwgbV90ZXh0dXJlLT50ZXh0dXJlSWQoKSk7Ci0gICAgaWYgKG1fbWFwcGVkQnVmZmVy
KSB7Ci0gICAgICAgIEV4dGVuc2lvbnMzRENocm9taXVtKiBleHRlbnNpb25zID0gc3RhdGljX2Nh
c3Q8RXh0ZW5zaW9uczNEQ2hyb21pdW0qPihjb250ZXh0LT5nZXRFeHRlbnNpb25zKCkpOwotICAg
ICAgICBHTEMoY29udGV4dCwgZXh0ZW5zaW9ucy0+dW5tYXBUZXhTdWJJbWFnZTJEQ0hST01JVU0o
bV9tYXBwZWRCdWZmZXIpKTsKLSAgICAgICAgbV9tYXBwZWRCdWZmZXIgPSAwOwotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIEludFNpemUgZGltZW5zaW9ucyA9IG1fdGV4dHVyZS0+c2l6ZSgpOwotICAg
ICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dGV4U3ViSW1hZ2UyRChHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV8yRCwgMCwgMCwgMCwgZGltZW5zaW9ucy53aWR0aCgpLCBkaW1lbnNpb25zLmhl
aWdodCgpLCBtX3RleHR1cmUtPmZvcm1hdCgpLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURf
QllURSwgbV9idWZmZXIuZ2V0KCkpKTsKLSAgICAgICAgbV9idWZmZXIuY2xlYXIoKTsKLSAgICB9
CisgICAgcmV0dXJuIENDVGV4dHVyZVVwZGF0ZXI6OlN1YkltYWdlVGV4dHVyZVVwZGF0ZTo6Y3Jl
YXRlKCk7Cit9CisKK3ZvaWQgVmlkZW9MYXllckNocm9taXVtOjpVcGRhdGVyVGV4dHVyZTo6cHVz
aFByb3BlcnRpZXNUbyhDQ1RleHR1cmVVcGRhdGVyOjpUZXh0dXJlVXBkYXRlKiB1cGRhdGUpCit7
CisgICAgQ0NUZXh0dXJlVXBkYXRlcjo6U3ViSW1hZ2VUZXh0dXJlVXBkYXRlKiBzdWJJbWFnZVVw
ZGF0ZSA9IHN0YXRpY19jYXN0PENDVGV4dHVyZVVwZGF0ZXI6OlN1YkltYWdlVGV4dHVyZVVwZGF0
ZSo+KHVwZGF0ZSk7CisKKyAgICBzdWJJbWFnZVVwZGF0ZS0+c2V0Rm9ybWF0KG1fdGV4dHVyZS0+
Zm9ybWF0KCkpOworICAgIHN1YkltYWdlVXBkYXRlLT5zZXRUZXh0dXJlSWQobV90ZXh0dXJlLT50
ZXh0dXJlSWQoKSk7CisgICAgSW50UmVjdCByZWN0ID0gSW50UmVjdChJbnRQb2ludCgpLCBtX3Rl
eHR1cmUtPnNpemUoKSk7CisgICAgc3ViSW1hZ2VVcGRhdGUtPnNldFJlY3QocmVjdCk7CisgICAg
c3ViSW1hZ2VVcGRhdGUtPnNldE1hcHBlZEJ1ZmZlcihtX21hcHBlZEJ1ZmZlcik7CisgICAgc3Vi
SW1hZ2VVcGRhdGUtPnNldFBpeGVsRGF0YShtX2J1ZmZlci5yZWxlYXNlKCkpOworICAgIG1fbWFw
cGVkQnVmZmVyID0gMDsKIH0KIAogUGFzc1JlZlB0cjxWaWRlb0xheWVyQ2hyb21pdW0+IFZpZGVv
TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKENDTGF5ZXJEZWxlZ2F0ZSogZGVsZWdhdGUsCkBAIC0yMTgs
MTAgKzIyMSw4IEBAIHZvaWQgVmlkZW9MYXllckNocm9taXVtOjpmb3JFYWNoQ29tcG9zaXRvclJl
c291cmNlKExheWVyVGV4dHVyZVVwZGF0ZXI6OkhhbmRsZXImCiAgICAgaWYgKCFtX2ZyYW1lKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBmb3IgKHVuc2lnbmVkIHBsYW5lID0gMDsgcGxhbmUgPCBt
X3BsYW5lczsgcGxhbmUrKykgewotICAgICAgICBJbnRSZWN0IHJlY3QoSW50UG9pbnQoKSwgbV90
ZXh0dXJlc1twbGFuZV0tPnZpc2libGVTaXplKCkpOwotICAgICAgICBoYW5kbGVyLmhhbmRsZSht
X3RleHR1cmVzW3BsYW5lXS5nZXQoKSwgcmVjdCwgcmVjdCk7Ci0gICAgfQorICAgIGZvciAodW5z
aWduZWQgcGxhbmUgPSAwOyBwbGFuZSA8IG1fcGxhbmVzOyBwbGFuZSsrKQorICAgICAgICBoYW5k
bGVyLmhhbmRsZShtX3RleHR1cmVzW3BsYW5lXS5nZXQoKSk7CiB9CiAKIHZvaWQgVmlkZW9MYXll
ckNocm9taXVtOjpwdXNoUHJvcGVydGllc1RvKENDTGF5ZXJJbXBsKiBsYXllcikKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJD
aHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlk
ZW9MYXllckNocm9taXVtLmgKaW5kZXggNjBmZmZlMi4uZjdjYjY2YiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVt
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9M
YXllckNocm9taXVtLmgKQEAgLTU1LDEwICs1NSwxNSBAQCBwdWJsaWM6CiAgICAgICAgIHZpcnR1
YWwgTWFuYWdlZFRleHR1cmUqIHRleHR1cmUoKSB7IHJldHVybiBtX3RleHR1cmUuZ2V0KCk7IH0K
ICAgICAgICAgdmlydHVhbCBQYXNzUmVmUHRyPE1hbmFnZWRUZXh0dXJlPiByZXBsYWNlVGV4dHVy
ZShUZXh0dXJlTWFuYWdlciopOwogCi0gICAgICAgIHZpcnR1YWwgYm9vbCBuZWVkUHJlcGFyZVJl
Y3QoKSB7IHJldHVybiB0cnVlOyB9Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlUmVjdChH
cmFwaGljc0NvbnRleHQzRCosIFRleHR1cmVBbGxvY2F0b3IqLCBjb25zdCBJbnRSZWN0JiBzb3Vy
Y2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCk7CisgICAgICAgIHZpcnR1YWwgYm9vbCBu
ZWVkUHJlcGFyZSgpIHsgcmV0dXJuIHRydWU7IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIHByZXBh
cmUoR3JhcGhpY3NDb250ZXh0M0QqLCBUZXh0dXJlQWxsb2NhdG9yKik7CiAgICAgICAgIHZvaWQg
ZGF0YVJlY3QoY29uc3Qgdm9pZCopOwotICAgICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlUmVjdChH
cmFwaGljc0NvbnRleHQzRCosIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJl
Y3QmIGRlc3RSZWN0KTsKKworICAgICAgICB2aXJ0dWFsIEludFJlY3QgdXBkYXRlUmVjdCgpIHsg
cmV0dXJuIEludFJlY3QoSW50UG9pbnQoKSwgdmlzaWJsZVNpemUoKSk7IH0KKyAgICAgICAgdmly
dHVhbCBJbnRQb2ludCBjb250ZW50T2Zmc2V0KCkgeyByZXR1cm4gSW50UG9pbnQoKTsgfQorCisg
ICAgICAgIHZpcnR1YWwgUGFzc093blB0cjxDQ1RleHR1cmVVcGRhdGVyOjpUZXh0dXJlVXBkYXRl
PiBjcmVhdGVDQ1RleHR1cmVVcGRhdGUoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHB1c2hQcm9w
ZXJ0aWVzVG8oQ0NUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZVVwZGF0ZSopOwogCiAgICAgICAgIHZv
aWQgc2V0VmlzaWJsZVNpemUoSW50U2l6ZSYgc2l6ZSkgeyBtX3Zpc2libGVTaXplID0gc2l6ZTsg
fQogICAgICAgICBJbnRTaXplJiB2aXNpYmxlU2l6ZSgpIHsgcmV0dXJuIG1fdmlzaWJsZVNpemU7
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1dlYkdMTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uY3BwCmluZGV4IDNkZjk3ZjcuLjJlMTJjMTUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dl
YkdMTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmNwcApAQCAtNTIsMTEgKzUyLDIyIEBAIFdl
YkdMTGF5ZXJDaHJvbWl1bTo6VXBkYXRlclRleHR1cmU6On5VcGRhdGVyVGV4dHVyZSgpCiB7CiB9
CiAKLXZvaWQgV2ViR0xMYXllckNocm9taXVtOjpVcGRhdGVyVGV4dHVyZTo6dXBkYXRlUmVjdChH
cmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgLyogc291cmNlUmVjdCAq
LywgY29uc3QgSW50UmVjdCYgLyogZGVzdFJlY3QgKi8pCit2b2lkIFdlYkdMTGF5ZXJDaHJvbWl1
bTo6VXBkYXRlclRleHR1cmU6OnByZXBhcmUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIFRl
eHR1cmVBbGxvY2F0b3IqKQogewogICAgIG1fbGF5ZXItPnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJj
ZXMoY29udGV4dCk7CiB9CiAKK1Bhc3NPd25QdHI8Q0NUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZVVw
ZGF0ZT4gV2ViR0xMYXllckNocm9taXVtOjpVcGRhdGVyVGV4dHVyZTo6Y3JlYXRlQ0NUZXh0dXJl
VXBkYXRlKCkKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gUGFzc093
blB0cjxDQ1RleHR1cmVVcGRhdGVyOjpUZXh0dXJlVXBkYXRlPigpOworfQorCit2b2lkIFdlYkdM
TGF5ZXJDaHJvbWl1bTo6VXBkYXRlclRleHR1cmU6OnB1c2hQcm9wZXJ0aWVzVG8oQ0NUZXh0dXJl
VXBkYXRlcjo6VGV4dHVyZVVwZGF0ZSopCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9
CisKIFBhc3NSZWZQdHI8V2ViR0xMYXllckNocm9taXVtPiBXZWJHTExheWVyQ2hyb21pdW06OmNy
ZWF0ZShDQ0xheWVyRGVsZWdhdGUqIGRlbGVnYXRlKQogewogICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgV2ViR0xMYXllckNocm9taXVtKGRlbGVnYXRlKSk7CkBAIC0xMTMsOCArMTI0LDcgQEAgdm9p
ZCBXZWJHTExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoR3JhcGhpY3ND
b250ZXh0M0QqIHJlbmRlcmVyQ28KIAogdm9pZCBXZWJHTExheWVyQ2hyb21pdW06OmZvckVhY2hD
b21wb3NpdG9yUmVzb3VyY2UoTGF5ZXJUZXh0dXJlVXBkYXRlcjo6SGFuZGxlciYgaGFuZGxlcikK
IHsKLSAgICBJbnRSZWN0IG5vbkVtcHR5UmVjdCgwLCAwLCAxLCAxKTsKLSAgICBoYW5kbGVyLmhh
bmRsZShtX3VwZGF0ZXJUZXh0dXJlLmdldCgpLCBub25FbXB0eVJlY3QsIG5vbkVtcHR5UmVjdCk7
CisgICAgaGFuZGxlci5oYW5kbGUobV91cGRhdGVyVGV4dHVyZS5nZXQoKSk7CiB9CiAKIGJvb2wg
V2ViR0xMYXllckNocm9taXVtOjpwYWludFJlbmRlcmVkUmVzdWx0c1RvQ2FudmFzKEltYWdlQnVm
ZmVyKiBpbWFnZUJ1ZmZlcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmgKaW5kZXggNTRiMjdk
NC4uMDZiZjdlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmgKQEAgLTU1LDcgKzU1LDEx
IEBAIHB1YmxpYzoKIAogICAgICAgICB2aXJ0dWFsIH5VcGRhdGVyVGV4dHVyZSgpOwogCi0gICAg
ICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVSZWN0KEdyYXBoaWNzQ29udGV4dDNEKiwgY29uc3QgSW50
UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpOworICAgICAgICB2aXJ0
dWFsIGJvb2wgbmVlZFByZXBhcmUoKSB7IHJldHVybiB0cnVlOyB9CisgICAgICAgIHZpcnR1YWwg
dm9pZCBwcmVwYXJlKEdyYXBoaWNzQ29udGV4dDNEKiwgVGV4dHVyZUFsbG9jYXRvciopOworCisg
ICAgICAgIHZpcnR1YWwgUGFzc093blB0cjxDQ1RleHR1cmVVcGRhdGVyOjpUZXh0dXJlVXBkYXRl
PiBjcmVhdGVDQ1RleHR1cmVVcGRhdGUoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHB1c2hQcm9w
ZXJ0aWVzVG8oQ0NUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZVVwZGF0ZSopOwogCiAgICAgcHJpdmF0
ZToKICAgICAgICAgZXhwbGljaXQgVXBkYXRlclRleHR1cmUoV2ViR0xMYXllckNocm9taXVtKik7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyVHJlZUhvc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcAppbmRleCBjYmU0NWQwLi5iMjVhNTk4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyVHJlZUhvc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKQEAgLTQ5LDEyICs0OSwxMiBAQCBDQ0xh
eWVyVHJlZUhvc3Q6Ok5lZWRSZXNvdXJjZUhhbmRsZXI6On5OZWVkUmVzb3VyY2VIYW5kbGVyKCkK
IHsKIH0KIAotdm9pZCBDQ0xheWVyVHJlZUhvc3Q6Ok5lZWRSZXNvdXJjZUhhbmRsZXI6OmhhbmRs
ZShMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlKiB0ZXh0dXJlLCBjb25zdCBJbnRSZWN0JiAv
KiBzb3VyY2VSZWN0ICovLCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCkKK3ZvaWQgQ0NMYXllclRy
ZWVIb3N0OjpOZWVkUmVzb3VyY2VIYW5kbGVyOjpoYW5kbGUoTGF5ZXJUZXh0dXJlVXBkYXRlcjo6
VGV4dHVyZSogdGV4dHVyZSkKIHsKLSAgICBpZiAoZGVzdFJlY3QuaXNFbXB0eSgpKQorICAgIGlm
ICh0ZXh0dXJlLT51cGRhdGVSZWN0KCkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBpZiAodGV4dHVyZS0+bmVlZFByZXBhcmVSZWN0KCkpCisgICAgaWYgKHRleHR1cmUtPm5lZWRQ
cmVwYXJlKCkpCiAgICAgICAgIG1fcmVzb3VyY2VzKys7CiB9CiAKQEAgLTY4LDMxICs2OCwzMiBA
QCBDQ0xheWVyVHJlZUhvc3Q6OlByZXBhcmVSZXNvdXJjZUhhbmRsZXI6On5QcmVwYXJlUmVzb3Vy
Y2VIYW5kbGVyKCkKIHsKIH0KIAotdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OlByZXBhcmVSZXNvdXJj
ZUhhbmRsZXI6OmhhbmRsZShMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlKiB0ZXh0dXJlLCBj
b25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCkKK3ZvaWQg
Q0NMYXllclRyZWVIb3N0OjpQcmVwYXJlUmVzb3VyY2VIYW5kbGVyOjpoYW5kbGUoTGF5ZXJUZXh0
dXJlVXBkYXRlcjo6VGV4dHVyZSogdGV4dHVyZSkKIHsKLSAgICBpZiAoZGVzdFJlY3QuaXNFbXB0
eSgpKQorICAgIGlmICh0ZXh0dXJlLT51cGRhdGVSZWN0KCkuaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBpZiAodGV4dHVyZS0+bmVlZFByZXBhcmVSZWN0KCkpCi0gICAgICAgIHRl
eHR1cmUtPnByZXBhcmVSZWN0KG1fY29udGV4dCwgbV9hbGxvY2F0b3IsIHNvdXJjZVJlY3QsIGRl
c3RSZWN0KTsKKyAgICBpZiAodGV4dHVyZS0+bmVlZFByZXBhcmUoKSkKKyAgICAgICAgdGV4dHVy
ZS0+cHJlcGFyZShtX2NvbnRleHQsIG1fYWxsb2NhdG9yKTsKIH0KIAotQ0NMYXllclRyZWVIb3N0
OjpQYWludEhhbmRsZXI6OlBhaW50SGFuZGxlcihDQ1Byb3h5KiBwcm94eSkKK0NDTGF5ZXJUcmVl
SG9zdDo6VXBkYXRlSGFuZGxlcjo6VXBkYXRlSGFuZGxlcihDQ1Byb3h5KiBwcm94eSkKICAgICA6
IG1fcHJveHkocHJveHkpCiB7CiB9CiAKLUNDTGF5ZXJUcmVlSG9zdDo6UGFpbnRIYW5kbGVyOjp+
UGFpbnRIYW5kbGVyKCkKK0NDTGF5ZXJUcmVlSG9zdDo6VXBkYXRlSGFuZGxlcjo6flVwZGF0ZUhh
bmRsZXIoKQogewogfQogCi12b2lkIENDTGF5ZXJUcmVlSG9zdDo6UGFpbnRIYW5kbGVyOjpoYW5k
bGUoTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZSogdGV4dHVyZSwgY29uc3QgSW50UmVjdCYg
c291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpCit2b2lkIENDTGF5ZXJUcmVlSG9z
dDo6VXBkYXRlSGFuZGxlcjo6aGFuZGxlKExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmUqIHRl
eHR1cmUpCiB7Ci0gICAgaWYgKGRlc3RSZWN0LmlzRW1wdHkoKSkKKyAgICBpZiAodGV4dHVyZS0+
dXBkYXRlUmVjdCgpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgdGV4dHVyZS0+
cGFpbnRDb250ZW50c1JlY3Qoc291cmNlUmVjdCk7Ci0gICAgbV9wcm94eS0+dXBkYXRlKHRleHR1
cmUsIHNvdXJjZVJlY3QsIGRlc3RSZWN0KTsKKyAgICBPd25QdHI8Q0NUZXh0dXJlVXBkYXRlcjo6
VGV4dHVyZVVwZGF0ZT4gdGV4dHVyZVVwZGF0ZSA9IHRleHR1cmUtPmNyZWF0ZUNDVGV4dHVyZVVw
ZGF0ZSgpOworICAgIHRleHR1cmUtPnB1c2hQcm9wZXJ0aWVzVG8odGV4dHVyZVVwZGF0ZS5nZXQo
KSk7CisgICAgbV9wcm94eS0+dXBkYXRlKHRleHR1cmVVcGRhdGUucmVsZWFzZSgpKTsKIH0KIAog
Q0NMYXllclRyZWVIb3N0OjpSZXBsYWNlVGV4dHVyZUhhbmRsZXI6OlJlcGxhY2VUZXh0dXJlSGFu
ZGxlcihUZXh0dXJlTWFuYWdlciogbWFuYWdlciwgVGV4dHVyZUxpc3QqIGxpc3QpCkBAIC0xMDUs
NyArMTA2LDcgQEAgQ0NMYXllclRyZWVIb3N0OjpSZXBsYWNlVGV4dHVyZUhhbmRsZXI6On5SZXBs
YWNlVGV4dHVyZUhhbmRsZXIoKQogewogfQogCi12b2lkIENDTGF5ZXJUcmVlSG9zdDo6UmVwbGFj
ZVRleHR1cmVIYW5kbGVyOjpoYW5kbGUoTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZSogdGV4
dHVyZSwgY29uc3QgSW50UmVjdCYgLyogc291cmNlUmVjdCAqLywgY29uc3QgSW50UmVjdCYgLyog
ZGVzdFJlY3QgKi8pCit2b2lkIENDTGF5ZXJUcmVlSG9zdDo6UmVwbGFjZVRleHR1cmVIYW5kbGVy
OjpoYW5kbGUoTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZSogdGV4dHVyZSkKIHsKICAgICBp
ZiAodGV4dHVyZS0+dGV4dHVyZSgpKSB7CiAgICAgICAgIG1fbGlzdC0+YXBwZW5kKHRleHR1cmUt
PnJlcGxhY2VUZXh0dXJlKG1fdGV4dHVyZU1hbmFnZXIpKTsKQEAgLTQ1MCw3ICs0NTEsNyBAQCB2
b2lkIENDTGF5ZXJUcmVlSG9zdDo6cGFpbnRDb250ZW50cyhMYXllckNocm9taXVtKiByb290TGF5
ZXIpCiAgICAgICAgIExheWVyQ2hyb21pdW0qIGxheWVyID0gbV9sYXllclVwZGF0ZUxpc3RbbGF5
ZXJJbmRleF0uZ2V0KCk7CiAgICAgICAgIGxheWVyLT5wYWludENvbnRlbnRzSWZEaXJ0eSgpOwog
Ci0gICAgICAgIFBhaW50SGFuZGxlciBoYW5kbGVyKG1fcHJveHkuZ2V0KCkpOworICAgICAgICBV
cGRhdGVIYW5kbGVyIGhhbmRsZXIobV9wcm94eS5nZXQoKSk7CiAgICAgICAgIGxheWVyLT5mb3JF
YWNoQ29tcG9zaXRvclJlc291cmNlKGhhbmRsZXIpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0LmgKaW5kZXggMWFmYTQwNi4uOGU0Y2I5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0LmgKQEAgLTIwNyw3ICsyMDcsNyBAQCBwcml2YXRlOgogICAgICAgICBOZWVkUmVzb3Vy
Y2VIYW5kbGVyKCk7CiAgICAgICAgIHZpcnR1YWwgfk5lZWRSZXNvdXJjZUhhbmRsZXIoKTsKIAot
ICAgICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlKExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmUq
LCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCk7Cisg
ICAgICAgIHZpcnR1YWwgdm9pZCBoYW5kbGUoTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZSop
OwogCiAgICAgICAgIGludCByZXNvdXJjZXMoKSB7IHJldHVybiBtX3Jlc291cmNlczsgfQogCkBA
IC0yMjAsMTkgKzIyMCwxOSBAQCBwcml2YXRlOgogICAgICAgICBQcmVwYXJlUmVzb3VyY2VIYW5k
bGVyKEdyYXBoaWNzQ29udGV4dDNEKiwgVGV4dHVyZUFsbG9jYXRvciopOwogICAgICAgICB2aXJ0
dWFsIH5QcmVwYXJlUmVzb3VyY2VIYW5kbGVyKCk7CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIGhh
bmRsZShMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlKiwgY29uc3QgSW50UmVjdCYgc291cmNl
UmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpOworICAgICAgICB2aXJ0dWFsIHZvaWQgaGFu
ZGxlKExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmUqKTsKIAogICAgIHByaXZhdGU6CiAgICAg
ICAgIEdyYXBoaWNzQ29udGV4dDNEKiBtX2NvbnRleHQ7CiAgICAgICAgIFRleHR1cmVBbGxvY2F0
b3IqIG1fYWxsb2NhdG9yOwogICAgIH07CiAKLSAgICBjbGFzcyBQYWludEhhbmRsZXIgOiBwdWJs
aWMgTGF5ZXJUZXh0dXJlVXBkYXRlcjo6SGFuZGxlciB7CisgICAgY2xhc3MgVXBkYXRlSGFuZGxl
ciA6IHB1YmxpYyBMYXllclRleHR1cmVVcGRhdGVyOjpIYW5kbGVyIHsKICAgICBwdWJsaWM6Ci0g
ICAgICAgIFBhaW50SGFuZGxlcihDQ1Byb3h5Kik7Ci0gICAgICAgIHZpcnR1YWwgflBhaW50SGFu
ZGxlcigpOworICAgICAgICBVcGRhdGVIYW5kbGVyKENDUHJveHkqKTsKKyAgICAgICAgdmlydHVh
bCB+VXBkYXRlSGFuZGxlcigpOwogCi0gICAgICAgIHZpcnR1YWwgdm9pZCBoYW5kbGUoTGF5ZXJU
ZXh0dXJlVXBkYXRlcjo6VGV4dHVyZSosIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0
IEludFJlY3QmIGRlc3RSZWN0KTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGhhbmRsZShMYXllclRl
eHR1cmVVcGRhdGVyOjpUZXh0dXJlKik7CiAKICAgICBwcml2YXRlOgogICAgICAgICBDQ1Byb3h5
KiBtX3Byb3h5OwpAQCAtMjQzLDcgKzI0Myw3IEBAIHByaXZhdGU6CiAgICAgICAgIFJlcGxhY2VU
ZXh0dXJlSGFuZGxlcihUZXh0dXJlTWFuYWdlciosIFRleHR1cmVMaXN0Kik7CiAgICAgICAgIHZp
cnR1YWwgflJlcGxhY2VUZXh0dXJlSGFuZGxlcigpOwogCi0gICAgICAgIHZpcnR1YWwgdm9pZCBo
YW5kbGUoTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZSosIGNvbnN0IEludFJlY3QmIHNvdXJj
ZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGhh
bmRsZShMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlKik7CiAKICAgICBwcml2YXRlOgogICAg
ICAgICBUZXh0dXJlTWFuYWdlciogbV90ZXh0dXJlTWFuYWdlcjsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJveHkuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJveHkuaAppbmRleCAx
YzUzMTdkLi5hZDNlNDBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1Byb3h5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcm94eS5oCkBAIC03OSw3ICs3OSw3IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIHZvaWQgc3RhcnQoKSA9IDA7IC8vIE11c3QgYmUgY2FsbGVkIGJlZm9yZSB1
c2luZyB0aGUgcHJveHkuCiAgICAgdmlydHVhbCB2b2lkIHN0b3AoKSA9IDA7IC8vIE11c3QgYmUg
Y2FsbGVkIGJlZm9yZSBkZWxldGluZyB0aGUgcHJveHkuCiAKLSAgICB2aXJ0dWFsIHZvaWQgdXBk
YXRlKExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmUqLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VS
ZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCB1cGRh
dGUoUGFzc093blB0cjxDQ1RleHR1cmVVcGRhdGVyOjpUZXh0dXJlVXBkYXRlPikgPSAwOwogCiAg
ICAgLy8gRGVidWcgaG9va3MKICNpZm5kZWYgTkRFQlVHCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xl
VGhyZWFkUHJveHkuY3BwCmluZGV4IDkyNzMzNzAuLmRkZTMwZjQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJv
eHkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwCkBAIC0yMTIsMTIgKzIxMiwxMiBAQCB2b2lkIENDU2lu
Z2xlVGhyZWFkUHJveHk6OnN0b3AoKQogICAgIG1fbGF5ZXJUcmVlSG9zdCA9IDA7CiB9CiAKLXZv
aWQgQ0NTaW5nbGVUaHJlYWRQcm94eTo6dXBkYXRlKExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1
cmUqIHRleHR1cmUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRl
c3RSZWN0KQordm9pZCBDQ1NpbmdsZVRocmVhZFByb3h5Ojp1cGRhdGUoUGFzc093blB0cjxDQ1Rl
eHR1cmVVcGRhdGVyOjpUZXh0dXJlVXBkYXRlPiBlbnRyeSkKIHsKICAgICBpZiAobV9sYXllclRy
ZWVIb3N0SW1wbC0+c2V0dGluZ3MoKS5kZWxheVRleHR1cmVVcGRhdGVzKQotICAgICAgICBtX3Rl
eHR1cmVVcGRhdGVyLmFwcGVuZCh0ZXh0dXJlLCBzb3VyY2VSZWN0LCBkZXN0UmVjdCk7CisgICAg
ICAgIG1fdGV4dHVyZVVwZGF0ZXIuYXBwZW5kKGVudHJ5KTsKICAgICBlbHNlCi0gICAgICAgIHRl
eHR1cmUtPnVwZGF0ZVJlY3QobV9sYXllclRyZWVIb3N0SW1wbC0+Y29udGV4dCgpLCBzb3VyY2VS
ZWN0LCBkZXN0UmVjdCk7CisgICAgICAgIGVudHJ5LT51cGRhdGUobV9sYXllclRyZWVIb3N0SW1w
bC0+Y29udGV4dCgpKTsKIH0KIAogLy8gQ2FsbGVkIGJ5IHRoZSBsZWdhY3kgc2NoZWR1bGluZyBw
YXRoIChlLmcuIHdoZXJlIHJlbmRlcl93aWRnZXQgZG9lcyB0aGUgc2NoZWR1bGluZykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2lu
Z2xlVGhyZWFkUHJveHkuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuaAppbmRleCA2ZDlhMTNhLi44MmQ4OWZjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Np
bmdsZVRocmVhZFByb3h5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5oCkBAIC01NSw3ICs1NSw3IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0VmlzaWJsZShib29sKTsKICAgICB2aXJ0dWFsIHZvaWQg
c3RhcnQoKTsKICAgICB2aXJ0dWFsIHZvaWQgc3RvcCgpOwotICAgIHZpcnR1YWwgdm9pZCB1cGRh
dGUoTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZSosIGNvbnN0IEludFJlY3QmIHNvdXJjZVJl
Y3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlKFBh
c3NPd25QdHI8Q0NUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZVVwZGF0ZT4pOwogCiAgICAgLy8gQ0NM
YXllclRyZWVIb3N0SW1wbENsaWVudCBpbXBsZW1lbnRhdGlvbgogICAgIHZpcnR1YWwgdm9pZCBv
blN3YXBCdWZmZXJzQ29tcGxldGVPbkltcGxUaHJlYWQoKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZXIuY3BwCmluZGV4IGE2MWMzYmIuLjU3NWI2
MjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDVGV4dHVyZVVwZGF0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZXIuY3BwCkBAIC0zMCw2ICszMCw3IEBA
CiAjaW5jbHVkZSAiY2MvQ0NUZXh0dXJlVXBkYXRlci5oIgogCiAjaW5jbHVkZSAiY2MvQ0NQcm94
eS5oIgorI2luY2x1ZGUgIkV4dGVuc2lvbnMzRENocm9taXVtLmgiCiAjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJMYXllclRleHR1cmVVcGRhdGVyLmgiCiAjaW5jbHVk
ZSAiTWFuYWdlZFRleHR1cmUuaCIKQEAgLTM4LDYgKzM5LDY0IEBAIHVzaW5nIG5hbWVzcGFjZSBz
dGQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorQ0NUZXh0dXJlVXBkYXRlcjo6U3ViSW1hZ2VU
ZXh0dXJlVXBkYXRlOjpTdWJJbWFnZVRleHR1cmVVcGRhdGUoKQorICA6IG1fZm9ybWF0KDApCisg
ICwgbV90ZXh0dXJlSWQoMCkKKyAgLCBtX21hcHBlZEJ1ZmZlcigwKQoreworfQorCitDQ1RleHR1
cmVVcGRhdGVyOjpTdWJJbWFnZVRleHR1cmVVcGRhdGU6On5TdWJJbWFnZVRleHR1cmVVcGRhdGUo
KQoreworfQorCit2b2lkIENDVGV4dHVyZVVwZGF0ZXI6OlN1YkltYWdlVGV4dHVyZVVwZGF0ZTo6
c2V0UGl4ZWxEYXRhKGNvbnN0IHVpbnQ4X3QqIHBpeGVsU291cmNlLCBjb25zdCBJbnRSZWN0JiBj
b250ZW50UmVjdCwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCkKK3sKKyAgICBBU1NFUlQobV9m
b3JtYXQpOworICAgIEFTU0VSVCghbV9yZWN0LmlzRW1wdHkoKSk7CisgICAgQVNTRVJUKG1fcmVj
dC5zaXplKCkgPT0gc291cmNlUmVjdC5zaXplKCkpOworCisgICAgdW5zaWduZWQgaW50IGNvbXBv
bmVudHNQZXJQaXhlbCA9IDQ7CisgICAgdW5zaWduZWQgaW50IGJ5dGVzUGVyQ29tcG9uZW50ID0g
MTsKKyAgICBpZiAoIUdyYXBoaWNzQ29udGV4dDNEOjpjb21wdXRlRm9ybWF0QW5kVHlwZVBhcmFt
ZXRlcnMobV9mb3JtYXQsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCAmY29tcG9u
ZW50c1BlclBpeGVsLCAmYnl0ZXNQZXJDb21wb25lbnQpKQorICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKworICAgIHVuc2lnbmVkIGludCBieXRlc1BlclBpeGVsID0gYnl0ZXNQZXJDb21w
b25lbnQgKiBjb21wb25lbnRzUGVyUGl4ZWw7CisKKyAgICBzaXplX3QgYnVmZmVyU2l6ZSA9IG1f
cmVjdC53aWR0aCgpICogbV9yZWN0LmhlaWdodCgpICogYnl0ZXNQZXJQaXhlbDsKKyAgICBtX3Bp
eGVsRGF0YSA9IGFkb3B0QXJyYXlQdHIobmV3IHVpbnQ4X3RbYnVmZmVyU2l6ZV0pOworCisgICAg
Ly8gT2Zmc2V0IGZyb20gY29udGVudC1yZWN0IHRvIHNvdXJjZS1yZWN0LgorICAgIEludFBvaW50
IG9mZnNldChzb3VyY2VSZWN0LngoKSAtIGNvbnRlbnRSZWN0LngoKSwgc291cmNlUmVjdC55KCkg
LSBjb250ZW50UmVjdC55KCkpOworCisgICAgaWYgKGNvbnRlbnRSZWN0LndpZHRoKCkgPT0gc291
cmNlUmVjdC53aWR0aCgpICYmICFvZmZzZXQueCgpKQorICAgICAgICBtZW1jcHkobV9waXhlbERh
dGEuZ2V0KCksICZwaXhlbFNvdXJjZVtieXRlc1BlclBpeGVsICogb2Zmc2V0LnkoKSAqIGNvbnRl
bnRSZWN0LndpZHRoKCldLCBjb250ZW50UmVjdC53aWR0aCgpICogbV9yZWN0LmhlaWdodCgpICog
Ynl0ZXNQZXJQaXhlbCk7CisgICAgZWxzZSB7CisgICAgICAgIC8vIFN0cmlkZXMgbm90IGVxdWFs
LCBzbyBkbyBhIHJvdy1ieS1yb3cgbWVtY3B5IGZyb20gdGhlCisgICAgICAgIC8vIHBpeGVsU291
cmNlIGludG8gdGhlIHBpeGVsRGVzdAorICAgICAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCBt
X3JlY3QuaGVpZ2h0KCk7ICsrcm93KQorICAgICAgICAgICAgbWVtY3B5KG1fcGl4ZWxEYXRhLmdl
dCgpICsgbV9yZWN0LndpZHRoKCkgKiBieXRlc1BlclBpeGVsICogcm93LAorICAgICAgICAgICAg
ICAgICAgIHBpeGVsU291cmNlICsgYnl0ZXNQZXJQaXhlbCAqIChvZmZzZXQueCgpICsgKG9mZnNl
dC55KCkgKyByb3cpICogY29udGVudFJlY3Qud2lkdGgoKSksCisgICAgICAgICAgICAgICAgICAg
bV9yZWN0LndpZHRoKCkgKiBieXRlc1BlclBpeGVsKTsKKyAgICB9Cit9CisKK3ZvaWQgQ0NUZXh0
dXJlVXBkYXRlcjo6U3ViSW1hZ2VUZXh0dXJlVXBkYXRlOjp1cGRhdGUoR3JhcGhpY3NDb250ZXh0
M0QqIGNvbnRleHQpCit7CisgICAgQVNTRVJUKG1fZm9ybWF0KTsKKyAgICBBU1NFUlQobV90ZXh0
dXJlSWQpOworICAgIEFTU0VSVCghbV9yZWN0LmlzRW1wdHkoKSk7CisKKyAgICBjb250ZXh0LT5i
aW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV90ZXh0dXJlSWQpOwor
ICAgIGlmIChtX21hcHBlZEJ1ZmZlcikgeworICAgICAgICBFeHRlbnNpb25zM0RDaHJvbWl1bSog
ZXh0ZW5zaW9ucyA9IHN0YXRpY19jYXN0PEV4dGVuc2lvbnMzRENocm9taXVtKj4oY29udGV4dC0+
Z2V0RXh0ZW5zaW9ucygpKTsKKyAgICAgICAgZXh0ZW5zaW9ucy0+dW5tYXBUZXhTdWJJbWFnZTJE
Q0hST01JVU0obV9tYXBwZWRCdWZmZXIpOworICAgIH0gZWxzZSB7CisgICAgICAgIEFTU0VSVCht
X3BpeGVsRGF0YSk7CisgICAgICAgIGNvbnRleHQtPnRleFN1YkltYWdlMkQoR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIG1fcmVjdC54KCksIG1fcmVjdC55KCksIG1fcmVjdC53aWR0
aCgpLCBtX3JlY3QuaGVpZ2h0KCksIG1fZm9ybWF0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdO
RURfQllURSwgbV9waXhlbERhdGEuZ2V0KCkpOworICAgIH0KK30KKwogQ0NUZXh0dXJlVXBkYXRl
cjo6Q0NUZXh0dXJlVXBkYXRlcigpCiB7CiB9CkBAIC00NiwxNSArMTA1LDEwIEBAIENDVGV4dHVy
ZVVwZGF0ZXI6On5DQ1RleHR1cmVVcGRhdGVyKCkKIHsKIH0KIAotdm9pZCBDQ1RleHR1cmVVcGRh
dGVyOjphcHBlbmQoTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZSogdGV4dHVyZSwgY29uc3Qg
SW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpCit2b2lkIENDVGV4
dHVyZVVwZGF0ZXI6OmFwcGVuZChQYXNzT3duUHRyPFRleHR1cmVVcGRhdGU+IHVwZGF0ZSkKIHsK
LSAgICBBU1NFUlQodGV4dHVyZSk7Ci0KLSAgICBVcGRhdGVFbnRyeSBlbnRyeTsKLSAgICBlbnRy
eS5tX3RleHR1cmUgPSB0ZXh0dXJlOwotICAgIGVudHJ5Lm1fc291cmNlUmVjdCA9IHNvdXJjZVJl
Y3Q7Ci0gICAgZW50cnkubV9kZXN0UmVjdCA9IGRlc3RSZWN0OwotICAgIG1fZW50cmllcy5hcHBl
bmQoZW50cnkpOworICAgIEFTU0VSVCh1cGRhdGUpOworICAgIG1fZW50cmllcy5hcHBlbmQodXBk
YXRlKTsKIH0KIAogYm9vbCBDQ1RleHR1cmVVcGRhdGVyOjpoYXNNb3JlVXBkYXRlcygpIGNvbnN0
CkBAIC02OCw4ICsxMjIsNyBAQCBib29sIENDVGV4dHVyZVVwZGF0ZXI6OnVwZGF0ZShHcmFwaGlj
c0NvbnRleHQzRCogY29udGV4dCwgc2l6ZV90IGNvdW50KQogICAgICAgICBpZiAoIW1fZW50cmll
cy5zaXplKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgVXBkYXRlRW50
cnkmIGVudHJ5ID0gbV9lbnRyaWVzLmxhc3QoKTsKLSAgICAgICAgZW50cnkubV90ZXh0dXJlLT51
cGRhdGVSZWN0KGNvbnRleHQsIGVudHJ5Lm1fc291cmNlUmVjdCwgZW50cnkubV9kZXN0UmVjdCk7
CisgICAgICAgIG1fZW50cmllcy5sYXN0KCktPnVwZGF0ZShjb250ZXh0KTsKICAgICAgICAgbV9l
bnRyaWVzLnJlbW92ZUxhc3QoKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZXIu
aAppbmRleCBhYjY1OWVjLi41NGIzM2Y3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5o
CkBAIC0yNyw3ICsyNyw5IEBACiAjZGVmaW5lIENDVGV4dHVyZVVwZGF0ZXJfaAogCiAjaW5jbHVk
ZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIkxheWVyVGV4dHVyZVVwZGF0ZXIuaCIKKyNpbmNsdWRl
IDx3dGYvT3duQXJyYXlQdHIuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8
d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKQEAgLTM2LDEwICszOCw0MSBAQCBjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKIAog
Y2xhc3MgQ0NUZXh0dXJlVXBkYXRlciB7CiBwdWJsaWM6CisgICAgY2xhc3MgVGV4dHVyZVVwZGF0
ZSB7CisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlKEdyYXBoaWNzQ29u
dGV4dDNEKikgPSAwOworICAgIH07CisgICAgY2xhc3MgU3ViSW1hZ2VUZXh0dXJlVXBkYXRlIDog
cHVibGljIFRleHR1cmVVcGRhdGUgeworICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCB+U3Vi
SW1hZ2VUZXh0dXJlVXBkYXRlKCk7CisKKyAgICAgICAgc3RhdGljIFBhc3NPd25QdHI8U3ViSW1h
Z2VUZXh0dXJlVXBkYXRlPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFB0cihuZXcgU3ViSW1hZ2VU
ZXh0dXJlVXBkYXRlKCkpOyB9CisKKyAgICAgICAgdm9pZCBzZXRGb3JtYXQodW5zaWduZWQgZm9y
bWF0KSB7IG1fZm9ybWF0ID0gZm9ybWF0OyB9CisgICAgICAgIHZvaWQgc2V0VGV4dHVyZUlkKHVu
c2lnbmVkIHRleHR1cmVJZCkgeyBtX3RleHR1cmVJZCA9IHRleHR1cmVJZDsgfQorICAgICAgICB2
b2lkIHNldFJlY3QoSW50UmVjdCYgcmVjdCkgeyBtX3JlY3QgPSByZWN0OyB9CisgICAgICAgIHZv
aWQgc2V0UGl4ZWxEYXRhKFBhc3NPd25BcnJheVB0cjx1aW50OF90PiBwaXhlbERhdGEpIHsgbV9w
aXhlbERhdGEgPSBwaXhlbERhdGE7IH0KKyAgICAgICAgLy8gZm9ybWF0IGFuZCByZWN0IG11c3Qg
YmUgc2V0IGJlZm9yZSB0aGlzIHZlcnNpb24gb2Ygc2V0UGl4ZWxEYXRhIGlzIHVzZWQKKyAgICAg
ICAgdm9pZCBzZXRQaXhlbERhdGEoY29uc3QgdWludDhfdCogcGl4ZWxTb3VyY2UsIGNvbnN0IElu
dFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0KTsKKyAgICAgICAg
dm9pZCBzZXRNYXBwZWRCdWZmZXIodWludDhfdCogbWFwcGVkQnVmZmVyKSB7IG1fbWFwcGVkQnVm
ZmVyID0gbWFwcGVkQnVmZmVyOyB9CisKKyAgICAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZShHcmFw
aGljc0NvbnRleHQzRCopOworCisgICAgcHJvdGVjdGVkOgorICAgICAgICBleHBsaWNpdCBTdWJJ
bWFnZVRleHR1cmVVcGRhdGUoKTsKKworICAgIHByaXZhdGU6CisgICAgICAgIHVuc2lnbmVkIG1f
Zm9ybWF0OworICAgICAgICB1bnNpZ25lZCBtX3RleHR1cmVJZDsKKyAgICAgICAgSW50UmVjdCBt
X3JlY3Q7CisgICAgICAgIE93bkFycmF5UHRyPHVpbnQ4X3Q+IG1fcGl4ZWxEYXRhOworICAgICAg
ICB1aW50OF90KiBtX21hcHBlZEJ1ZmZlcjsKKyAgICB9OworCiAgICAgQ0NUZXh0dXJlVXBkYXRl
cigpOwogICAgIH5DQ1RleHR1cmVVcGRhdGVyKCk7CiAKLSAgICB2b2lkIGFwcGVuZChMYXllclRl
eHR1cmVVcGRhdGVyOjpUZXh0dXJlKiwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3Qg
SW50UmVjdCYgZGVzdFJlY3QpOworICAgIHZvaWQgYXBwZW5kKFBhc3NPd25QdHI8VGV4dHVyZVVw
ZGF0ZT4pOwogCiAgICAgYm9vbCBoYXNNb3JlVXBkYXRlcygpIGNvbnN0OwogCkBAIC00OSwxMyAr
ODIsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBjbGVhcigpOwogCiBwcml2YXRlOgotICAgIHN0cnVj
dCBVcGRhdGVFbnRyeSB7Ci0gICAgICAgIExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmUqIG1f
dGV4dHVyZTsKLSAgICAgICAgSW50UmVjdCBtX3NvdXJjZVJlY3Q7Ci0gICAgICAgIEludFJlY3Qg
bV9kZXN0UmVjdDsKLSAgICB9OwotCi0gICAgVmVjdG9yPFVwZGF0ZUVudHJ5PiBtX2VudHJpZXM7
CisgICAgVmVjdG9yPE93blB0cjxUZXh0dXJlVXBkYXRlPiA+IG1fZW50cmllczsKIH07CiAKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDVGhyZWFkUHJveHkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NUaHJlYWRQcm94eS5jcHAKaW5kZXggNWQ5OTRkOC4uMWRhOTQ0ZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJl
YWRQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NUaHJlYWRQcm94eS5jcHAKQEAgLTI4NywxOCArMjg3LDEzIEBAIHZvaWQgQ0NUaHJl
YWRQcm94eTo6c3RvcCgpCiAgICAgbV9zdGFydGVkID0gZmFsc2U7CiB9CiAKLXZvaWQgQ0NUaHJl
YWRQcm94eTo6dXBkYXRlKExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmUqIHRleHR1cmUsIGNv
bnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KQordm9pZCBD
Q1RocmVhZFByb3h5Ojp1cGRhdGUoUGFzc093blB0cjxDQ1RleHR1cmVVcGRhdGVyOjpUZXh0dXJl
VXBkYXRlPiBlbnRyeSkKIHsKICAgICBUUkFDRV9FVkVOVCgiQ0NUaHJlYWRQcm94eTo6dXBkYXRl
IiwgdGhpcywgMCk7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBBU1NFUlQobV9z
dGFydGVkKTsKIAotICAgIFVwZGF0ZUVudHJ5KiBlbnRyeSA9IG5ldyBVcGRhdGVFbnRyeTsKLSAg
ICBlbnRyeS0+bV90ZXh0dXJlID0gdGV4dHVyZTsKLSAgICBlbnRyeS0+bV9zb3VyY2VSZWN0ID0g
c291cmNlUmVjdDsKLSAgICBlbnRyeS0+bV9kZXN0UmVjdCA9IGRlc3RSZWN0OwotCi0gICAgQ0NQ
cm94eTo6aW1wbFRocmVhZCgpLT5wb3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkND
VGhyZWFkUHJveHk6OnVwZGF0ZVRleHR1cmVPbkltcGxUaHJlYWQsIEFsbG93Q3Jvc3NUaHJlYWRB
Y2Nlc3MoZW50cnkpKSk7CisgICAgQ0NQcm94eTo6aW1wbFRocmVhZCgpLT5wb3N0VGFzayhjcmVh
dGVDQ1RocmVhZFRhc2sodGhpcywgJkNDVGhyZWFkUHJveHk6OnVwZGF0ZVRleHR1cmVPbkltcGxU
aHJlYWQsIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3MoZW50cnkubGVha1B0cigpKSkpOwogfQogCiB2
b2lkIENDVGhyZWFkUHJveHk6OmZpbmlzaEFsbFJlbmRlcmluZ09uSW1wbFRocmVhZChDQ0NvbXBs
ZXRpb25FdmVudCogY29tcGxldGlvbikKQEAgLTQ0NSw3ICs0NDAsNyBAQCB2b2lkIENDVGhyZWFk
UHJveHk6OnByZXBhcmVGcmFtZVJlc291cmNlc09uSW1wbFRocmVhZChDQ0NvbXBsZXRpb25FdmVu
dCogY29tcGxldAogICAgIGNvbXBsZXRpb24tPnNpZ25hbCgpOwogfQogCi12b2lkIENDVGhyZWFk
UHJveHk6OnVwZGF0ZVRleHR1cmVPbkltcGxUaHJlYWQoVXBkYXRlRW50cnkqIGVudHJ5KQordm9p
ZCBDQ1RocmVhZFByb3h5Ojp1cGRhdGVUZXh0dXJlT25JbXBsVGhyZWFkKENDVGV4dHVyZVVwZGF0
ZXI6OlRleHR1cmVVcGRhdGUqIGVudHJ5KQogewogICAgIEFTU0VSVCghbV9jb21taXRDb21wbGV0
aW9uRXZlbnRPbkltcGxUaHJlYWQpOwogICAgIEFTU0VSVChpc0ltcGxUaHJlYWQoKSk7CkBAIC00
NTQsMTIgKzQ0OSwxMCBAQCB2b2lkIENDVGhyZWFkUHJveHk6OnVwZGF0ZVRleHR1cmVPbkltcGxU
aHJlYWQoVXBkYXRlRW50cnkqIGVudHJ5KQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
bV90ZXh0dXJlVXBkYXRlck9uSW1wbFRocmVhZC5hcHBlbmQoZW50cnktPm1fdGV4dHVyZSwgZW50
cnktPm1fc291cmNlUmVjdCwgZW50cnktPm1fZGVzdFJlY3QpOworICAgIG1fdGV4dHVyZVVwZGF0
ZXJPbkltcGxUaHJlYWQuYXBwZW5kKGFkb3B0UHRyKGVudHJ5KSk7CiAKICAgICBpZiAoIW1fbGF5
ZXJUcmVlSG9zdEltcGwtPnNldHRpbmdzKCkuZGVsYXlUZXh0dXJlVXBkYXRlcykKICAgICAgICAg
bV9zY2hlZHVsZXJPbkltcGxUaHJlYWQtPnNldFJlc291cmNlVXBkYXRlc1BlbmRpbmcoKTsKLQot
ICAgIGRlbGV0ZSBlbnRyeTsKIH0KIAogdm9pZCBDQ1RocmVhZFByb3h5OjpiZWdpbkZyYW1lQ29t
cGxldGVPbkltcGxUaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqIGNvbXBsZXRpb24pCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVh
ZFByb3h5LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1RocmVhZFByb3h5LmgKaW5kZXggYzNjZmExMy4uNTE2NTk5MSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFk
UHJveHkuaApAQCAtNjMsNyArNjMsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldFZp
c2libGUoYm9vbCk7CiAgICAgdmlydHVhbCB2b2lkIHN0YXJ0KCk7CiAgICAgdmlydHVhbCB2b2lk
IHN0b3AoKTsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlKExheWVyVGV4dHVyZVVwZGF0ZXI6OlRl
eHR1cmUqLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVj
dCk7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZShQYXNzT3duUHRyPENDVGV4dHVyZVVwZGF0ZXI6
OlRleHR1cmVVcGRhdGU+KTsKIAogICAgIC8vIENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQgaW1w
bGVtZW50YXRpb24KICAgICB2aXJ0dWFsIHZvaWQgb25Td2FwQnVmZmVyc0NvbXBsZXRlT25JbXBs
VGhyZWFkKCk7CkBAIC04MCwxMiArODAsNiBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGV4cGxp
Y2l0IENDVGhyZWFkUHJveHkoQ0NMYXllclRyZWVIb3N0Kik7CiAKLSAgICBzdHJ1Y3QgVXBkYXRl
RW50cnkgewotICAgICAgICBMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlKiBtX3RleHR1cmU7
Ci0gICAgICAgIEludFJlY3QgbV9zb3VyY2VSZWN0OwotICAgICAgICBJbnRSZWN0IG1fZGVzdFJl
Y3Q7Ci0gICAgfTsKLQogICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxNYW5hZ2VkVGV4dHVyZT4g
PiBUZXh0dXJlTGlzdDsKIAogICAgIC8vIENhbGxlZCBvbiBtYWluIHRocmVhZApAQCAtMTAzLDcg
Kzk3LDcgQEAgcHJpdmF0ZToKICAgICBQYXNzT3duUHRyPENDVGhyZWFkOjpUYXNrPiBjcmVhdGVC
ZWdpbkZyYW1lQW5kQ29tbWl0VGFza09uSW1wbFRocmVhZCgpOwogICAgIHZvaWQgb2J0YWluQmVn
aW5GcmFtZUFuZENvbW1pdFRhc2tGcm9tQ0NUaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqLCBDQ1Ro
cmVhZDo6VGFzayoqKTsKICAgICB2b2lkIHByZXBhcmVGcmFtZVJlc291cmNlc09uSW1wbFRocmVh
ZChDQ0NvbXBsZXRpb25FdmVudCopOwotICAgIHZvaWQgdXBkYXRlVGV4dHVyZU9uSW1wbFRocmVh
ZChVcGRhdGVFbnRyeSopOworICAgIHZvaWQgdXBkYXRlVGV4dHVyZU9uSW1wbFRocmVhZChDQ1Rl
eHR1cmVVcGRhdGVyOjpUZXh0dXJlVXBkYXRlKik7CiAgICAgdm9pZCBiZWdpbkZyYW1lQ29tcGxl
dGVPbkltcGxUaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqKTsKICAgICB2b2lkIHJlcXVlc3RSZWFk
YmFja09uSW1wbFRocmVhZChSZWFkYmFja1JlcXVlc3QqKTsKICAgICB2b2lkIGZpbmlzaEFsbFJl
bmRlcmluZ09uSW1wbFRocmVhZChDQ0NvbXBsZXRpb25FdmVudCopOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcCBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAKaW5kZXggMWVj
Y2UwNC4uZDlmOWVkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9D
Q0xheWVyVHJlZUhvc3RUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwCkBAIC05NzMsNiArOTczLDI5IEBAIHB1YmxpYzoKICAg
ICBwdWJsaWM6CiAgICAgICAgIGNsYXNzIFRleHR1cmUgOiBwdWJsaWMgTGF5ZXJUZXh0dXJlVXBk
YXRlcjo6VGV4dHVyZSB7CiAgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIGNsYXNzIFRleHR1
cmVVcGRhdGUgOiBwdWJsaWMgQ0NUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZVVwZGF0ZSB7CisgICAg
ICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICAgICAgc3RhdGljIFBhc3NPd25QdHI8VGV4dHVy
ZVVwZGF0ZT4gY3JlYXRlKFRleHR1cmUqIHRleHR1cmUpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBU
ZXh0dXJlVXBkYXRlKHRleHR1cmUpKTsgfQorCisgICAgICAgICAgICAgICAgdm9pZCBzZXRUZXh0
dXJlSWQodW5zaWduZWQgdGV4dHVyZUlkKSB7IG1fdGV4dHVyZUlkID0gdGV4dHVyZUlkOyB9CisK
KyAgICAgICAgICAgICAgICB2b2lkIHVwZGF0ZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG1fdGV4dHVyZS0+dGV4dHVy
ZVVwZGF0ZXIoKS0+bGF5ZXIoKS0+dXBkYXRlKCk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRl
eHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX3RleHR1cmVJ
ZCk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwcml2YXRlOgorICAgICAgICAg
ICAgICAgIGV4cGxpY2l0IFRleHR1cmVVcGRhdGUoVGV4dHVyZSogdGV4dHVyZSkKKyAgICAgICAg
ICAgICAgICAgICAgOiBtX3RleHR1cmVJZCgwKQorICAgICAgICAgICAgICAgICAgICAsIG1fdGV4
dHVyZSh0ZXh0dXJlKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBtX3RleHR1cmVJZDsKKyAgICAgICAgICAgICAgICBUZXh0
dXJlKiBtX3RleHR1cmU7CisgICAgICAgICAgICB9OworCiAgICAgICAgICAgICBUZXh0dXJlKENv
bnRlbnRMYXllclRleHR1cmVVcGRhdGVyKiB0ZXh0dXJlVXBkYXRlciwgUGFzc1JlZlB0cjxNYW5h
Z2VkVGV4dHVyZT4gdGV4dHVyZSkKICAgICAgICAgICAgICAgICA6IG1fdGV4dHVyZSh0ZXh0dXJl
KQogICAgICAgICAgICAgICAgICwgbV90ZXh0dXJlVXBkYXRlcih0ZXh0dXJlVXBkYXRlcikKQEAg
LTk4OCwzMCArMTAxMSwzNSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIG9sZC5y
ZWxlYXNlKCk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHZpcnR1YWwgYm9vbCBuZWVk
UHJlcGFyZVJlY3QoKQorICAgICAgICAgICAgdmlydHVhbCBib29sIG5lZWRQcmVwYXJlKCkKICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbV90ZXh0dXJlVXBkYXRlci0+bGF5
ZXIoKS0+bmVlZFByZXBhcmVSZWN0KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fdGV4dHVy
ZVVwZGF0ZXItPmxheWVyKCktPm5lZWRQcmVwYXJlKCk7CiAgICAgICAgICAgICB9CiAKLSAgICAg
ICAgICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlUmVjdChHcmFwaGljc0NvbnRleHQzRCogY29udGV4
dCwgVGV4dHVyZUFsbG9jYXRvciogYWxsb2NhdG9yLCBjb25zdCBJbnRSZWN0JiAvKiBzb3VyY2VS
ZWN0ICovLCBjb25zdCBJbnRSZWN0JiAvKiBkZXN0UmVjdCAqLykKKyAgICAgICAgICAgIHZpcnR1
YWwgdm9pZCBwcmVwYXJlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBUZXh0dXJlQWxsb2Nh
dG9yKiBhbGxvY2F0b3IpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbV90ZXh0dXJl
VXBkYXRlci0+bGF5ZXIoKS0+cHJlcGFyZVJlY3QoKTsKKyAgICAgICAgICAgICAgICBtX3RleHR1
cmVVcGRhdGVyLT5sYXllcigpLT5wcmVwYXJlKCk7CiAgICAgICAgICAgICAgICAgaWYgKCFtX3Rl
eHR1cmUtPnRleHR1cmVJZCgpKQogICAgICAgICAgICAgICAgICAgICBtX3RleHR1cmUtPmFsbG9j
YXRlVGV4dHVyZShjb250ZXh0LCBhbGxvY2F0b3IpOwogICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50c1JlY3QoY29uc3QgSW50UmVjdCYgLyogc291
cmNlUmVjdCAqLykKKyAgICAgICAgICAgIHZpcnR1YWwgSW50UmVjdCB1cGRhdGVSZWN0KCkgY29u
c3QgeyByZXR1cm4gSW50UmVjdCgwLCAwLCAxLCAxKTsgfQorCisgICAgICAgICAgICB2aXJ0dWFs
IFBhc3NPd25QdHI8Q0NUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZVVwZGF0ZT4gY3JlYXRlQ0NUZXh0
dXJlVXBkYXRlKCkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtX3RleHR1cmVVcGRh
dGVyLT5sYXllcigpLT5wYWludENvbnRlbnRzUmVjdCgpOworICAgICAgICAgICAgICAgIHJldHVy
biBUZXh0dXJlVXBkYXRlOjpjcmVhdGUodGhpcyk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVSZWN0KEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBj
b25zdCBJbnRSZWN0JiAvKiBzb3VyY2VSZWN0ICovLCBjb25zdCBJbnRSZWN0JiAvKiBkZXN0UmVj
dCAqLykKKyAgICAgICAgICAgIHZpcnR1YWwgdm9pZCBwdXNoUHJvcGVydGllc1RvKENDVGV4dHVy
ZVVwZGF0ZXI6OlRleHR1cmVVcGRhdGUqIHVwZGF0ZSkKICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBtX3RleHR1cmVVcGRhdGVyLT5sYXllcigpLT51cGRhdGVSZWN0KCk7Ci0gICAgICAg
ICAgICAgICAgaWYgKG1fdGV4dHVyZS0+dGV4dHVyZUlkKCkpCi0gICAgICAgICAgICAgICAgICAg
IGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX3Rl
eHR1cmUtPnRleHR1cmVJZCgpKTsKKyAgICAgICAgICAgICAgICBtX3RleHR1cmVVcGRhdGVyLT5s
YXllcigpLT5wdXNoUHJvcGVydGllc1RvKCk7CisgICAgICAgICAgICAgICAgVGV4dHVyZVVwZGF0
ZSogdGV4dHVyZVVwZGF0ZSA9IHN0YXRpY19jYXN0PFRleHR1cmVVcGRhdGUqPih1cGRhdGUpOwor
CisgICAgICAgICAgICAgICAgdGV4dHVyZVVwZGF0ZS0+c2V0VGV4dHVyZUlkKG1fdGV4dHVyZS0+
dGV4dHVyZUlkKCkpOwogICAgICAgICAgICAgfQogCisgICAgICAgICAgICBDb250ZW50TGF5ZXJU
ZXh0dXJlVXBkYXRlciogdGV4dHVyZVVwZGF0ZXIoKSB7IHJldHVybiBtX3RleHR1cmVVcGRhdGVy
OyB9CisKICAgICAgICAgcHJpdmF0ZToKICAgICAgICAgICAgIFJlZlB0cjxNYW5hZ2VkVGV4dHVy
ZT4gbV90ZXh0dXJlOwogICAgICAgICAgICAgQ29udGVudExheWVyVGV4dHVyZVVwZGF0ZXIqIG1f
dGV4dHVyZVVwZGF0ZXI7CkBAIC0xMDQ3LDkgKzEwNzUsOSBAQCBwdWJsaWM6CiAgICAgICAgIENv
bnRlbnRMYXllckNocm9taXVtV2l0aFVwZGF0ZVRyYWNraW5nKiBtX2xheWVyOwogICAgIH07CiAK
LSAgICBzdGF0aWMgUGFzc1JlZlB0cjxDb250ZW50TGF5ZXJDaHJvbWl1bVdpdGhVcGRhdGVUcmFj
a2luZz4gY3JlYXRlKENDTGF5ZXJEZWxlZ2F0ZSAqZGVsZWdhdGUsIGJvb2wgbmVlZFByZXBhcmVS
ZWN0KQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPENvbnRlbnRMYXllckNocm9taXVtV2l0aFVwZGF0
ZVRyYWNraW5nPiBjcmVhdGUoQ0NMYXllckRlbGVnYXRlICpkZWxlZ2F0ZSwgYm9vbCBuZWVkUHJl
cGFyZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ29udGVudExheWVyQ2hy
b21pdW1XaXRoVXBkYXRlVHJhY2tpbmcoZGVsZWdhdGUsIG5lZWRQcmVwYXJlUmVjdCkpOworICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENvbnRlbnRMYXllckNocm9taXVtV2l0aFVwZGF0ZVRy
YWNraW5nKGRlbGVnYXRlLCBuZWVkUHJlcGFyZSkpOwogICAgIH0KIAogICAgIHZpcnR1YWwgdm9p
ZCBjcmVhdGVUZXh0dXJlVXBkYXRlcihjb25zdCBDQ0xheWVyVHJlZUhvc3QqKQpAQCAtMTA2MSwz
NSArMTA4OSwzNSBAQCBwdWJsaWM6CiAgICAgdm9pZCBwYWludENvbnRlbnRzKCkgeyBtX3BhaW50
Q29udGVudHNDb3VudCsrOyB9CiAgICAgaW50IHBhaW50Q29udGVudHNDb3VudCgpIHsgcmV0dXJu
IG1fcGFpbnRDb250ZW50c0NvdW50OyB9CiAKLSAgICB2b2lkIHByZXBhcmVSZWN0KCkgeyBtX3By
ZXBhcmVSZWN0Q291bnQrKzsgfQotICAgIGludCBwcmVwYXJlUmVjdENvdW50KCkgeyByZXR1cm4g
bV9wcmVwYXJlUmVjdENvdW50OyB9CisgICAgdm9pZCBwcmVwYXJlKCkgeyBtX3ByZXBhcmVDb3Vu
dCsrOyB9CisgICAgaW50IHByZXBhcmVDb3VudCgpIHsgcmV0dXJuIG1fcHJlcGFyZUNvdW50OyB9
CiAKLSAgICB2b2lkIHBhaW50Q29udGVudHNSZWN0KCkgeyBtX3BhaW50Q29udGVudHNSZWN0Q291
bnQrKzsgfQotICAgIGludCBwYWludENvbnRlbnRzUmVjdENvdW50KCkgeyByZXR1cm4gbV9wYWlu
dENvbnRlbnRzUmVjdENvdW50OyB9CisgICAgdm9pZCBwdXNoUHJvcGVydGllc1RvKCkgeyBtX3B1
c2hQcm9wZXJ0aWVzVG9Db3VudCsrOyB9CisgICAgaW50IHB1c2hQcm9wZXJ0aWVzVG9Db3VudCgp
IHsgcmV0dXJuIG1fcHVzaFByb3BlcnRpZXNUb0NvdW50OyB9CiAKLSAgICB2b2lkIHVwZGF0ZVJl
Y3QoKSB7IG1fdXBkYXRlUmVjdENvdW50Kys7IH0KLSAgICBpbnQgdXBkYXRlUmVjdENvdW50KCkg
eyByZXR1cm4gbV91cGRhdGVSZWN0Q291bnQ7IH0KKyAgICB2b2lkIHVwZGF0ZSgpIHsgbV91cGRh
dGVDb3VudCsrOyB9CisgICAgaW50IHVwZGF0ZUNvdW50KCkgeyByZXR1cm4gbV91cGRhdGVDb3Vu
dDsgfQogCi0gICAgaW50IG5lZWRQcmVwYXJlUmVjdCgpIHsgcmV0dXJuIG1fbmVlZFByZXBhcmVS
ZWN0OyB9CisgICAgaW50IG5lZWRQcmVwYXJlKCkgeyByZXR1cm4gbV9uZWVkUHJlcGFyZTsgfQog
CiBwcml2YXRlOgotICAgIGV4cGxpY2l0IENvbnRlbnRMYXllckNocm9taXVtV2l0aFVwZGF0ZVRy
YWNraW5nKENDTGF5ZXJEZWxlZ2F0ZSAqZGVsZWdhdGUsIGJvb2wgbmVlZFByZXBhcmVSZWN0KQor
ICAgIGV4cGxpY2l0IENvbnRlbnRMYXllckNocm9taXVtV2l0aFVwZGF0ZVRyYWNraW5nKENDTGF5
ZXJEZWxlZ2F0ZSAqZGVsZWdhdGUsIGJvb2wgbmVlZFByZXBhcmUpCiAgICAgICAgIDogQ29udGVu
dExheWVyQ2hyb21pdW0oZGVsZWdhdGUpCi0gICAgICAgICwgbV9uZWVkUHJlcGFyZVJlY3QobmVl
ZFByZXBhcmVSZWN0KQorICAgICAgICAsIG1fbmVlZFByZXBhcmUobmVlZFByZXBhcmUpCiAgICAg
ICAgICwgbV9wYWludENvbnRlbnRzQ291bnQoMCkKLSAgICAgICAgLCBtX3ByZXBhcmVSZWN0Q291
bnQoMCkKLSAgICAgICAgLCBtX3BhaW50Q29udGVudHNSZWN0Q291bnQoMCkKLSAgICAgICAgLCBt
X3VwZGF0ZVJlY3RDb3VudCgwKQorICAgICAgICAsIG1fcHJlcGFyZUNvdW50KDApCisgICAgICAg
ICwgbV9wdXNoUHJvcGVydGllc1RvQ291bnQoMCkKKyAgICAgICAgLCBtX3VwZGF0ZUNvdW50KDAp
CiAgICAgewogICAgICAgICBzZXRCb3VuZHMoSW50U2l6ZSgxMCwgMTApKTsKICAgICB9CiAKICAg
ICBSZWZQdHI8Q29udGVudExheWVyVGV4dHVyZVVwZGF0ZXI+IG1fY29udGVudExheWVyVGV4dHVy
ZVVwZGF0ZXI7Ci0gICAgYm9vbCBtX25lZWRQcmVwYXJlUmVjdDsKKyAgICBib29sIG1fbmVlZFBy
ZXBhcmU7CiAgICAgaW50IG1fcGFpbnRDb250ZW50c0NvdW50OwotICAgIGludCBtX3ByZXBhcmVS
ZWN0Q291bnQ7Ci0gICAgaW50IG1fcGFpbnRDb250ZW50c1JlY3RDb3VudDsKLSAgICBpbnQgbV91
cGRhdGVSZWN0Q291bnQ7CisgICAgaW50IG1fcHJlcGFyZUNvdW50OworICAgIGludCBtX3B1c2hQ
cm9wZXJ0aWVzVG9Db3VudDsKKyAgICBpbnQgbV91cGRhdGVDb3VudDsKIH07CiAKIC8vIExheWVy
IG9wYWNpdHkgY2hhbmdlIGR1cmluZyBwYWludCBzaG91bGQgbm90IHByZXZlbnQgY29tcG9zaXRv
ciByZXNvdXJjZXMgZnJvbSBiZWluZyB1cGRhdGVkIGR1cmluZyBjb21taXQuCkBAIC0xMTE5LDE1
ICsxMTQ3LDE1IEBAIHB1YmxpYzoKICAgICAgICAgLy8gcGFpbnRDb250ZW50cygpIHNob3VsZCBo
YXZlIGJlZW4gY2FsbGVkIG9uY2UuCiAgICAgICAgIEVYUEVDVF9FUSgxLCBtX3VwZGF0ZUNoZWNr
TGF5ZXItPnBhaW50Q29udGVudHNDb3VudCgpKTsKIAotICAgICAgICAvLyBwYWludENvbnRlbnRz
UmVjdCgpIHNob3VsZCBoYXZlIGJlZW4gY2FsbGVkIHRoZSBzYW1lCi0gICAgICAgIC8vIGFtb3Vu
dCBvZiB0aW1lcyBhcyBwcmVwYXJlUmVjdCgpLgotICAgICAgICBFWFBFQ1RfRVEobV91cGRhdGVD
aGVja0xheWVyLT5wcmVwYXJlUmVjdENvdW50KCksCi0gICAgICAgICAgICAgICAgICBtX3VwZGF0
ZUNoZWNrTGF5ZXItPnBhaW50Q29udGVudHNSZWN0Q291bnQoKSk7CisgICAgICAgIC8vIHB1c2hQ
cm9wZXJ0aWVzVG8oKSBzaG91bGQgaGF2ZSBiZWVuIGNhbGxlZCB0aGUgc2FtZQorICAgICAgICAv
LyBhbW91bnQgb2YgdGltZXMgYXMgcHJlcGFyZSgpLgorICAgICAgICBFWFBFQ1RfRVEobV91cGRh
dGVDaGVja0xheWVyLT5wcmVwYXJlQ291bnQoKSwKKyAgICAgICAgICAgICAgICAgIG1fdXBkYXRl
Q2hlY2tMYXllci0+cHVzaFByb3BlcnRpZXNUb0NvdW50KCkpOwogCi0gICAgICAgIC8vIHVwZGF0
ZVJlY3QoKSBzaG91bGQgaGF2ZSBiZWVuIGNhbGxlZCB0aGUgc2FtZQotICAgICAgICAvLyBhbW91
bnQgb2YgdGltZXMgYXMgcGFpbnRDb250ZW50c1JlY3QoKS4KLSAgICAgICAgRVhQRUNUX0VRKG1f
dXBkYXRlQ2hlY2tMYXllci0+cGFpbnRDb250ZW50c1JlY3RDb3VudCgpLAotICAgICAgICAgICAg
ICAgICAgbV91cGRhdGVDaGVja0xheWVyLT51cGRhdGVSZWN0Q291bnQoKSk7CisgICAgICAgIC8v
IHVwZGF0ZSgpIHNob3VsZCBoYXZlIGJlZW4gY2FsbGVkIHRoZSBzYW1lCisgICAgICAgIC8vIGFt
b3VudCBvZiB0aW1lcyBhcyBwdXNoUHJvcGVydGllc1RvKCkuCisgICAgICAgIEVYUEVDVF9FUSht
X3VwZGF0ZUNoZWNrTGF5ZXItPnB1c2hQcm9wZXJ0aWVzVG9Db3VudCgpLAorICAgICAgICAgICAg
ICAgICAgbV91cGRhdGVDaGVja0xheWVyLT51cGRhdGVDb3VudCgpKTsKICAgICB9CiAKIHByaXZh
dGU6CkBAIC0xMTY2LDEzICsxMTk0LDEzIEBAIHB1YmxpYzoKICAgICAgICAgLy8gcGFpbnRDb250
ZW50cygpIHNob3VsZCBoYXZlIGJlZW4gY2FsbGVkIG9uY2UuCiAgICAgICAgIEVYUEVDVF9FUSgx
LCBtX3VwZGF0ZUNoZWNrTGF5ZXItPnBhaW50Q29udGVudHNDb3VudCgpKTsKIAotICAgICAgICAv
LyBwcmVwYXJlUmVjdCgpIHNob3VsZCBub3QgaGF2ZSBiZWVuIGNhbGxlZC4KLSAgICAgICAgRVhQ
RUNUX0VRKDAsIG1fdXBkYXRlQ2hlY2tMYXllci0+cHJlcGFyZVJlY3RDb3VudCgpKTsKKyAgICAg
ICAgLy8gcHJlcGFyZSgpIHNob3VsZCBub3QgaGF2ZSBiZWVuIGNhbGxlZC4KKyAgICAgICAgRVhQ
RUNUX0VRKDAsIG1fdXBkYXRlQ2hlY2tMYXllci0+cHJlcGFyZUNvdW50KCkpOwogCi0gICAgICAg
IC8vIHVwZGF0ZVJlY3QoKSBzaG91bGQgaGF2ZSBiZWVuIGNhbGxlZCB0aGUgc2FtZQotICAgICAg
ICAvLyBhbW91bnQgb2YgdGltZXMgYXMgcGFpbnRDb250ZW50c1JlY3QoKS4KLSAgICAgICAgRVhQ
RUNUX0VRKG1fdXBkYXRlQ2hlY2tMYXllci0+cGFpbnRDb250ZW50c1JlY3RDb3VudCgpLAotICAg
ICAgICAgICAgICAgICAgbV91cGRhdGVDaGVja0xheWVyLT51cGRhdGVSZWN0Q291bnQoKSk7Cisg
ICAgICAgIC8vIHVwZGF0ZSgpIHNob3VsZCBoYXZlIGJlZW4gY2FsbGVkIHRoZSBzYW1lCisgICAg
ICAgIC8vIGFtb3VudCBvZiB0aW1lcyBhcyBwdXNoUHJvcGVydGllc1RvKCkuCisgICAgICAgIEVY
UEVDVF9FUShtX3VwZGF0ZUNoZWNrTGF5ZXItPnB1c2hQcm9wZXJ0aWVzVG9Db3VudCgpLAorICAg
ICAgICAgICAgICAgICAgbV91cGRhdGVDaGVja0xheWVyLT51cGRhdGVDb3VudCgpKTsKICAgICB9
CiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1Rp
bGVkTGF5ZXJDaHJvbWl1bVRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9U
aWxlZExheWVyQ2hyb21pdW1UZXN0LmNwcAppbmRleCBiMmIwODcwLi4wYWU0NTg2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RpbGVkTGF5ZXJDaHJvbWl1bVRlc3Qu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVGlsZWRMYXllckNocm9taXVt
VGVzdC5jcHAKQEAgLTQwLDE4ICs0MCwzMCBAQCBuYW1lc3BhY2UgewogCiBjbGFzcyBGYWtlSGFu
ZGxlciA6IHB1YmxpYyBMYXllclRleHR1cmVVcGRhdGVyOjpIYW5kbGVyIHsKIHB1YmxpYzoKLSAg
ICB2aXJ0dWFsIHZvaWQgaGFuZGxlKExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmUqLCBjb25z
dCBJbnRSZWN0JiwgY29uc3QgSW50UmVjdCYpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBoYW5kbGUo
TGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZSopIHsgfQogfTsKIAogY2xhc3MgRmFrZUxheWVy
VGV4dHVyZVVwZGF0ZXIgOiBwdWJsaWMgTGF5ZXJUZXh0dXJlVXBkYXRlciB7CiBwdWJsaWM6CiAg
ICAgY2xhc3MgVGV4dHVyZSA6IHB1YmxpYyBMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlIHsK
ICAgICBwdWJsaWM6CisgICAgICAgIGNsYXNzIFRleHR1cmVVcGRhdGUgOiBwdWJsaWMgQ0NUZXh0
dXJlVXBkYXRlcjo6VGV4dHVyZVVwZGF0ZSB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAg
IHN0YXRpYyBQYXNzT3duUHRyPFRleHR1cmVVcGRhdGU+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0
UHRyKG5ldyBUZXh0dXJlVXBkYXRlKCkpOyB9CisKKyAgICAgICAgICAgIHZvaWQgdXBkYXRlKEdy
YXBoaWNzQ29udGV4dDNEKikgeyB9CisKKyAgICAgICAgICAgIHByaXZhdGU6CisgICAgICAgICAg
ICAgICAgZXhwbGljaXQgVGV4dHVyZVVwZGF0ZSgpIHsgfQorICAgICAgICAgICAgfTsKKwogICAg
ICAgICBUZXh0dXJlKFBhc3NSZWZQdHI8TWFuYWdlZFRleHR1cmU+IHRleHR1cmUpIDogbV90ZXh0
dXJlKHRleHR1cmUpIHsgfQogCiAgICAgICAgIHZpcnR1YWwgTWFuYWdlZFRleHR1cmUqIHRleHR1
cmUoKSB7IHJldHVybiBtX3RleHR1cmUuZ2V0KCk7IH0KIAotICAgICAgICB2aXJ0dWFsIHZvaWQg
dXBkYXRlUmVjdChHcmFwaGljc0NvbnRleHQzRCosIGNvbnN0IEludFJlY3QmLCBjb25zdCBJbnRS
ZWN0JikgeyB9CisgICAgICAgIHZpcnR1YWwgUGFzc093blB0cjxDQ1RleHR1cmVVcGRhdGVyOjpU
ZXh0dXJlVXBkYXRlPiBjcmVhdGVDQ1RleHR1cmVVcGRhdGUoKSB7IHJldHVybiBUZXh0dXJlVXBk
YXRlOjpjcmVhdGUoKTsgfQorCisgICAgICAgIHZpcnR1YWwgdm9pZCBwdXNoUHJvcGVydGllc1Rv
KENDVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmVVcGRhdGUqKSB7IH0KIAogICAgIHByaXZhdGU6CiAg
ICAgICAgIFJlZlB0cjxNYW5hZ2VkVGV4dHVyZT4gbV90ZXh0dXJlOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>118095</attachid>
            <date>2011-12-06 12:47:32 -0800</date>
            <delta_ts>2012-01-05 15:01:46 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>async-commit.diff</filename>
            <type>text/plain</type>
            <size>86106</size>
            <attacher name="David Reveman">reveman</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Jp
dG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHAK
aW5kZXggMDc5MDVjMS4uN2ZkNTBlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQml0bWFwQ2Fu
dmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHAKQEAgLTQ1LDExICs0NSwyNCBAQCBCaXRtYXBDYW52
YXNMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlOjp+VGV4dHVyZSgpCiB7CiB9CiAKLXZvaWQg
Qml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZTo6dXBkYXRlUmVjdChHcmFw
aGljc0NvbnRleHQzRCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3Qg
SW50UmVjdCYgZGVzdFJlY3QpCitQYXNzT3duUHRyPENDVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmVV
cGRhdGU+IEJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU6OmNyZWF0ZUND
VGV4dHVyZVVwZGF0ZSgpCiB7Ci0gICAgQVNTRVJUKHRleHR1cmUoKS0+dGV4dHVyZUlkKCkpOwot
ICAgIGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCB0
ZXh0dXJlKCktPnRleHR1cmVJZCgpKTsKLSAgICB0ZXh0dXJlVXBkYXRlcigpLT51cGRhdGVUZXh0
dXJlUmVjdChjb250ZXh0LCB0ZXh0dXJlKCktPmZvcm1hdCgpLCBzb3VyY2VSZWN0LCBkZXN0UmVj
dCk7CisgICAgcmV0dXJuIENDVGV4dHVyZVVwZGF0ZXI6OlN1YkltYWdlVGV4dHVyZVVwZGF0ZTo6
Y3JlYXRlKCk7Cit9CisKK3ZvaWQgQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4
dHVyZTo6cHVzaFByb3BlcnRpZXNUbyhDQ1RleHR1cmVVcGRhdGVyOjpUZXh0dXJlVXBkYXRlKiB1
cGRhdGUpCit7CisgICAgQ0NUZXh0dXJlVXBkYXRlcjo6U3ViSW1hZ2VUZXh0dXJlVXBkYXRlKiBz
dWJJbWFnZVVwZGF0ZSA9IHN0YXRpY19jYXN0PENDVGV4dHVyZVVwZGF0ZXI6OlN1YkltYWdlVGV4
dHVyZVVwZGF0ZSo+KHVwZGF0ZSk7CisKKyAgICBJbnRSZWN0IGRlc3RSZWN0ID0gdXBkYXRlUmVj
dCgpOworICAgIEludFBvaW50IG9mZnNldCA9IGNvbnRlbnRPZmZzZXQoKTsKKyAgICBJbnRSZWN0
IHNvdXJjZVJlY3QgPSBJbnRSZWN0KEludFBvaW50KGRlc3RSZWN0LngoKSArIG9mZnNldC54KCks
IGRlc3RSZWN0LnkoKSArIG9mZnNldC55KCkpLCBkZXN0UmVjdC5zaXplKCkpOworCisgICAgc3Vi
SW1hZ2VVcGRhdGUtPnNldEZvcm1hdCh0ZXh0dXJlKCktPmZvcm1hdCgpKTsKKyAgICBzdWJJbWFn
ZVVwZGF0ZS0+c2V0VGV4dHVyZUlkKHRleHR1cmUoKS0+dGV4dHVyZUlkKCkpOworICAgIHN1Yklt
YWdlVXBkYXRlLT5zZXRSZWN0KGRlc3RSZWN0KTsKKyAgICBQbGF0Zm9ybUNhbnZhczo6QXV0b0xv
Y2tlciBsb2NrZXIoJnRleHR1cmVVcGRhdGVyKCktPmNhbnZhcygpKTsKKyAgICBzdWJJbWFnZVVw
ZGF0ZS0+c2V0UGl4ZWxEYXRhKGxvY2tlci5waXhlbHMoKSwgdGV4dHVyZVVwZGF0ZXIoKS0+Y29u
dGVudFJlY3QoKSwgc291cmNlUmVjdCk7CiB9CiAKIFBhc3NSZWZQdHI8Qml0bWFwQ2FudmFzTGF5
ZXJUZXh0dXJlVXBkYXRlcj4gQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6Y3JlYXRl
KFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+IHBhaW50ZXIsIGJvb2wgdXNlTWFwVGV4
U3ViSW1hZ2UpCkBAIC01OSw3ICs3Miw2IEBAIFBhc3NSZWZQdHI8Qml0bWFwQ2FudmFzTGF5ZXJU
ZXh0dXJlVXBkYXRlcj4gQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6Y3JlCiAKIEJp
dG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OkJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVw
ZGF0ZXIoUGFzc093blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4gcGFpbnRlciwgYm9vbCB1c2VN
YXBUZXhTdWJJbWFnZSkKICAgICA6IENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIocGFpbnRlcikK
LSAgICAsIG1fdGV4U3ViSW1hZ2UodXNlTWFwVGV4U3ViSW1hZ2UpCiB7CiB9CiAKQEAgLTY3LDcg
Kzc5LDcgQEAgQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6fkJpdG1hcENhbnZhc0xh
eWVyVGV4dHVyZVVwZGF0ZXIoKQogewogfQogCi1QYXNzT3duUHRyPExheWVyVGV4dHVyZVVwZGF0
ZXI6OlRleHR1cmU+IEJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OmNyZWF0ZVRleHR1
cmUoVGV4dHVyZU1hbmFnZXIqIG1hbmFnZXIpCitQYXNzT3duUHRyPENhbnZhc0xheWVyVGV4dHVy
ZVVwZGF0ZXI6OlRleHR1cmU+IEJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OmNyZWF0
ZVRleHR1cmUoVGV4dHVyZU1hbmFnZXIqIG1hbmFnZXIpCiB7CiAgICAgcmV0dXJuIGFkb3B0UHRy
KG5ldyBUZXh0dXJlKHRoaXMsIE1hbmFnZWRUZXh0dXJlOjpjcmVhdGUobWFuYWdlcikpKTsKIH0K
QEAgLTgxLDggKzkzLDYgQEAgTGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2FtcGxlZFRleGVsRm9ybWF0
IEJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OnNhbXBsZWQKIAogdm9pZCBCaXRtYXBD
YW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpwYWludENvbnRlbnRzKGNvbnN0IEludFJlY3QmIGNv
bnRlbnRSZWN0LCBjb25zdCBJbnRTaXplJiB0aWxlU2l6ZSwgaW50IGJvcmRlclRleGVscywgZmxv
YXQgY29udGVudHNTY2FsZSkKIHsKLSAgICBtX3RleFN1YkltYWdlLnNldFN1YkltYWdlU2l6ZSh0
aWxlU2l6ZSk7Ci0KICAgICBtX2NhbnZhcy5yZXNpemUoY29udGVudFJlY3Quc2l6ZSgpKTsKICAg
ICAvLyBBc3N1bXB0aW9uOiBpZiBhIHRpbGVyIGlzIHVzaW5nIGJvcmRlciB0ZXhlbHMsIHRoZW4g
aXQgaXMgYmVjYXVzZSB0aGUKICAgICAvLyBsYXllciBpcyBsaWtlbHkgdG8gYmUgZmlsdGVyZWQg
b3IgdHJhbnNmb3JtZWQuIEJlY2F1c2Ugb2YgaXQgbWlnaHQgYmUKQEAgLTkzLDExICsxMDMsNSBA
QCB2b2lkIEJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OnBhaW50Q29udGVudHMoY29u
c3QgSW50UmVjdCYgY29udGVudFJlY3QsCiAgICAgcGFpbnQoKmNhbnZhc1BhaW50ZXIuY29udGV4
dCgpLCBjb250ZW50UmVjdCwgY29udGVudHNTY2FsZSk7CiB9CiAKLXZvaWQgQml0bWFwQ2FudmFz
TGF5ZXJUZXh0dXJlVXBkYXRlcjo6dXBkYXRlVGV4dHVyZVJlY3QoR3JhcGhpY3NDb250ZXh0M0Qq
IGNvbnRleHQsIHVuc2lnbmVkIGZvcm1hdCwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29u
c3QgSW50UmVjdCYgZGVzdFJlY3QpCi17Ci0gICAgUGxhdGZvcm1DYW52YXM6OkF1dG9Mb2NrZXIg
bG9ja2VyKCZtX2NhbnZhcyk7Ci0gICAgbV90ZXhTdWJJbWFnZS51cGxvYWQobG9ja2VyLnBpeGVs
cygpLCBjb250ZW50UmVjdCgpLCBzb3VyY2VSZWN0LCBkZXN0UmVjdCwgZm9ybWF0LCBjb250ZXh0
KTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0JpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0JpdG1hcENhbnZhc0xheWVyVGV4dHVy
ZVVwZGF0ZXIuaAppbmRleCAyZTkxZGJhLi41MTI0M2Q4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9CaXRtYXBDYW52YXNMYXllclRleHR1cmVV
cGRhdGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Qml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5oCkBAIC0zMCw3ICszMCw2IEBACiAjaWYg
VVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogCiAjaW5jbHVkZSAiQ2FudmFzTGF5ZXJUZXh0
dXJlVXBkYXRlci5oIgotI2luY2x1ZGUgIkxheWVyVGV4dHVyZVN1YkltYWdlLmgiCiAjaW5jbHVk
ZSAiUGxhdGZvcm1DYW52YXMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDUsNyArNDQs
OCBAQCBwdWJsaWM6CiAgICAgICAgIFRleHR1cmUoQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBk
YXRlciosIFBhc3NPd25QdHI8TWFuYWdlZFRleHR1cmU+KTsKICAgICAgICAgdmlydHVhbCB+VGV4
dHVyZSgpOwogCi0gICAgICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVSZWN0KEdyYXBoaWNzQ29udGV4
dDNEKiwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3Qp
OworICAgICAgICB2aXJ0dWFsIFBhc3NPd25QdHI8Q0NUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZVVw
ZGF0ZT4gY3JlYXRlQ0NUZXh0dXJlVXBkYXRlKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBwdXNo
UHJvcGVydGllc1RvKENDVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmVVcGRhdGUqKTsKIAogICAgIHBy
aXZhdGU6CiAgICAgICAgIEJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIqIHRleHR1cmVV
cGRhdGVyKCkgeyByZXR1cm4gbV90ZXh0dXJlVXBkYXRlcjsgfQpAQCAtNTYsMTcgKzU2LDE2IEBA
IHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxCaXRtYXBDYW52YXNMYXllclRleHR1cmVV
cGRhdGVyPiBjcmVhdGUoUGFzc093blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4sIGJvb2wgdXNl
TWFwVGV4U3ViSW1hZ2UpOwogICAgIHZpcnR1YWwgfkJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVw
ZGF0ZXIoKTsKIAotICAgIHZpcnR1YWwgUGFzc093blB0cjxMYXllclRleHR1cmVVcGRhdGVyOjpU
ZXh0dXJlPiBjcmVhdGVUZXh0dXJlKFRleHR1cmVNYW5hZ2VyKik7CisgICAgdmlydHVhbCBQYXNz
T3duUHRyPENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU+IGNyZWF0ZVRleHR1cmUo
VGV4dHVyZU1hbmFnZXIqKTsKICAgICB2aXJ0dWFsIE9yaWVudGF0aW9uIG9yaWVudGF0aW9uKCkg
eyByZXR1cm4gTGF5ZXJUZXh0dXJlVXBkYXRlcjo6Qm90dG9tVXBPcmllbnRhdGlvbjsgfQogICAg
IHZpcnR1YWwgU2FtcGxlZFRleGVsRm9ybWF0IHNhbXBsZWRUZXhlbEZvcm1hdChHQzNEZW51bSB0
ZXh0dXJlRm9ybWF0KTsKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50cyhjb25zdCBJbnRS
ZWN0JiBjb250ZW50UmVjdCwgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUsIGludCBib3JkZXJUZXhl
bHMsIGZsb2F0IGNvbnRlbnRzU2NhbGUpOwotICAgIHZvaWQgdXBkYXRlVGV4dHVyZVJlY3QoR3Jh
cGhpY3NDb250ZXh0M0QqLCB1bnNpZ25lZCBmb3JtYXQsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJl
Y3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KTsKKyAgICBQbGF0Zm9ybUNhbnZhcyYgY2FudmFz
KCkgeyByZXR1cm4gbV9jYW52YXM7IH0KIAogcHJpdmF0ZToKICAgICBCaXRtYXBDYW52YXNMYXll
clRleHR1cmVVcGRhdGVyKFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+LCBib29sIHVz
ZU1hcFRleFN1YkltYWdlKTsKIAogICAgIFBsYXRmb3JtQ2FudmFzIG1fY2FudmFzOwotICAgIExh
eWVyVGV4dHVyZVN1YkltYWdlIG1fdGV4U3ViSW1hZ2U7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9CaXRtYXBTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0JpdG1hcFNrUGljdHVyZUNhbnZh
c0xheWVyVGV4dHVyZVVwZGF0ZXIuY3BwCmluZGV4IGUyN2JhOTkuLjY4Y2FlMTkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0JpdG1hcFNrUGlj
dHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0JpdG1hcFNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVy
ZVVwZGF0ZXIuY3BwCkBAIC00NSw3ICs0NSw3IEBAIEJpdG1hcFNrUGljdHVyZUNhbnZhc0xheWVy
VGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU6OlRleHR1cmUoQml0bWFwU2tQaWN0dXJlQ2FudmFzCiB7
CiB9CiAKLWJvb2wgQml0bWFwU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4
dHVyZTo6bmVlZFByZXBhcmVSZWN0KCkKK2Jvb2wgQml0bWFwU2tQaWN0dXJlQ2FudmFzTGF5ZXJU
ZXh0dXJlVXBkYXRlcjo6VGV4dHVyZTo6bmVlZFByZXBhcmUoKQogewogICAgIGlmICh0ZXh0dXJl
VXBkYXRlcigpLT51c2VNYXBUZXhTdWJJbWFnZSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAg
LTUzLDQzICs1Myw0NiBAQCBib29sIEJpdG1hcFNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVw
ZGF0ZXI6OlRleHR1cmU6Om5lZWRQcmVwYXJlUmVjdCgpCiAgICAgcmV0dXJuICF0ZXh0dXJlKCkt
PnRleHR1cmVJZCgpOwogfQogCi12b2lkIEJpdG1hcFNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVy
ZVVwZGF0ZXI6OlRleHR1cmU6OnByZXBhcmVSZWN0KEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0
LCBUZXh0dXJlQWxsb2NhdG9yKiBhbGxvY2F0b3IsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3Qs
IGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KQordm9pZCBCaXRtYXBTa1BpY3R1cmVDYW52YXNMYXll
clRleHR1cmVVcGRhdGVyOjpUZXh0dXJlOjpwcmVwYXJlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250
ZXh0LCBUZXh0dXJlQWxsb2NhdG9yKiBhbGxvY2F0b3IpCiB7CiAgICAgQVNTRVJUKCFtX21hcHBl
ZEJ1ZmZlcik7CisgICAgQVNTRVJUKCF1cGRhdGVSZWN0KCkuaXNFbXB0eSgpKTsKIAogICAgIGlm
ICh0ZXh0dXJlVXBkYXRlcigpLT51c2VNYXBUZXhTdWJJbWFnZSgpKSB7CiAgICAgICAgIEV4dGVu
c2lvbnMzRENocm9taXVtKiBleHRlbnNpb25zID0gc3RhdGljX2Nhc3Q8RXh0ZW5zaW9uczNEQ2hy
b21pdW0qPihjb250ZXh0LT5nZXRFeHRlbnNpb25zKCkpOwotICAgICAgICBtX21hcHBlZEJ1ZmZl
ciA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihleHRlbnNpb25zLT5tYXBUZXhTdWJJbWFnZTJEQ0hS
T01JVU0oR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIGRlc3RSZWN0LngoKSwgZGVz
dFJlY3QueSgpLCBkZXN0UmVjdC53aWR0aCgpLCBkZXN0UmVjdC5oZWlnaHQoKSwgdGV4dHVyZSgp
LT5mb3JtYXQoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIEV4dGVuc2lvbnMz
RENocm9taXVtOjpXUklURV9PTkxZKSk7CisgICAgICAgIG1fbWFwcGVkQnVmZmVyID0gc3RhdGlj
X2Nhc3Q8dWludDhfdCo+KGV4dGVuc2lvbnMtPm1hcFRleFN1YkltYWdlMkRDSFJPTUlVTShHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgdXBkYXRlUmVjdCgpLngoKSwgdXBkYXRlUmVj
dCgpLnkoKSwgdXBkYXRlUmVjdCgpLndpZHRoKCksIHVwZGF0ZVJlY3QoKS5oZWlnaHQoKSwgdGV4
dHVyZSgpLT5mb3JtYXQoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIEV4dGVu
c2lvbnMzRENocm9taXVtOjpXUklURV9PTkxZKSk7CiAgICAgfQogCiAgICAgdGV4dHVyZSgpLT5h
bGxvY2F0ZVRleHR1cmUoY29udGV4dCwgYWxsb2NhdG9yKTsKIH0KIAotdm9pZCBCaXRtYXBTa1Bp
Y3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlOjpwYWludENvbnRlbnRzUmVj
dChjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0KQorUGFzc093blB0cjxDQ1RleHR1cmVVcGRhdGVy
OjpUZXh0dXJlVXBkYXRlPiBCaXRtYXBTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVy
OjpUZXh0dXJlOjpjcmVhdGVDQ1RleHR1cmVVcGRhdGUoKQogewotICAgIHVpbnQ4X3QqIGJ1ZmZl
ciA9IG1fbWFwcGVkQnVmZmVyOwotICAgIGlmICghYnVmZmVyKSB7Ci0gICAgICAgIHNpemVfdCBi
dWZmZXJTaXplID0gVGV4dHVyZU1hbmFnZXI6Om1lbW9yeVVzZUJ5dGVzKHNvdXJjZVJlY3Quc2l6
ZSgpLCB0ZXh0dXJlKCktPmZvcm1hdCgpKTsKLSAgICAgICAgbV9idWZmZXIgPSBhZG9wdEFycmF5
UHRyKG5ldyB1aW50OF90W2J1ZmZlclNpemVdKTsKLSAgICAgICAgYnVmZmVyID0gbV9idWZmZXIu
Z2V0KCk7Ci0gICAgfQotCi0gICAgT3duUHRyPFNrQ2FudmFzPiBjYW52YXMgPSBhZG9wdFB0cihu
ZXcgc2tpYTo6UGxhdGZvcm1DYW52YXMoc291cmNlUmVjdC53aWR0aCgpLCBzb3VyY2VSZWN0Lmhl
aWdodCgpLCBmYWxzZSwgYnVmZmVyKSk7Ci0gICAgdGV4dHVyZVVwZGF0ZXIoKS0+cGFpbnRDb250
ZW50c1JlY3QoY2FudmFzLmdldCgpLCBzb3VyY2VSZWN0KTsKKyAgICByZXR1cm4gQ0NUZXh0dXJl
VXBkYXRlcjo6U3ViSW1hZ2VUZXh0dXJlVXBkYXRlOjpjcmVhdGUoKTsKIH0KIAotdm9pZCBCaXRt
YXBTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlOjp1cGRhdGVSZWN0
KEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBj
b25zdCBJbnRSZWN0JiBkZXN0UmVjdCkKK3ZvaWQgQml0bWFwU2tQaWN0dXJlQ2FudmFzTGF5ZXJU
ZXh0dXJlVXBkYXRlcjo6VGV4dHVyZTo6cHVzaFByb3BlcnRpZXNUbyhDQ1RleHR1cmVVcGRhdGVy
OjpUZXh0dXJlVXBkYXRlKiB1cGRhdGUpCiB7Ci0gICAgQVNTRVJUKHRleHR1cmUoKS0+dGV4dHVy
ZUlkKCkpOwotICAgIGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFXzJELCB0ZXh0dXJlKCktPnRleHR1cmVJZCgpKTsKKyAgICBDQ1RleHR1cmVVcGRhdGVyOjpT
dWJJbWFnZVRleHR1cmVVcGRhdGUqIHN1YkltYWdlVXBkYXRlID0gc3RhdGljX2Nhc3Q8Q0NUZXh0
dXJlVXBkYXRlcjo6U3ViSW1hZ2VUZXh0dXJlVXBkYXRlKj4odXBkYXRlKTsKKworICAgIEludFJl
Y3QgZGVzdFJlY3QgPSB1cGRhdGVSZWN0KCk7CisgICAgSW50UmVjdCBzb3VyY2VSZWN0ID0gSW50
UmVjdChJbnRQb2ludChkZXN0UmVjdC54KCkgKyBjb250ZW50T2Zmc2V0KCkueCgpLCBkZXN0UmVj
dC55KCkgKyBjb250ZW50T2Zmc2V0KCkueSgpKSwgZGVzdFJlY3Quc2l6ZSgpKTsKKworICAgIHN1
YkltYWdlVXBkYXRlLT5zZXRGb3JtYXQodGV4dHVyZSgpLT5mb3JtYXQoKSk7CisgICAgc3ViSW1h
Z2VVcGRhdGUtPnNldFRleHR1cmVJZCh0ZXh0dXJlKCktPnRleHR1cmVJZCgpKTsKKyAgICBzdWJJ
bWFnZVVwZGF0ZS0+c2V0UmVjdChkZXN0UmVjdCk7CisKICAgICBpZiAobV9tYXBwZWRCdWZmZXIp
IHsKLSAgICAgICAgRXh0ZW5zaW9uczNEQ2hyb21pdW0qIGV4dGVuc2lvbnMgPSBzdGF0aWNfY2Fz
dDxFeHRlbnNpb25zM0RDaHJvbWl1bSo+KGNvbnRleHQtPmdldEV4dGVuc2lvbnMoKSk7Ci0gICAg
ICAgIGV4dGVuc2lvbnMtPnVubWFwVGV4U3ViSW1hZ2UyRENIUk9NSVVNKG1fbWFwcGVkQnVmZmVy
KTsKKyAgICAgICAgT3duUHRyPFNrQ2FudmFzPiBjYW52YXMgPSBhZG9wdFB0cihuZXcgc2tpYTo6
UGxhdGZvcm1DYW52YXMoZGVzdFJlY3Qud2lkdGgoKSwgZGVzdFJlY3QuaGVpZ2h0KCksIGZhbHNl
LCBtX21hcHBlZEJ1ZmZlcikpOworICAgICAgICB0ZXh0dXJlVXBkYXRlcigpLT5wYWludENvbnRl
bnRzUmVjdChjYW52YXMuZ2V0KCksIHNvdXJjZVJlY3QpOworICAgICAgICBzdWJJbWFnZVVwZGF0
ZS0+c2V0TWFwcGVkQnVmZmVyKG1fbWFwcGVkQnVmZmVyKTsKICAgICAgICAgbV9tYXBwZWRCdWZm
ZXIgPSAwOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIEFTU0VSVChtX2J1ZmZlci5nZXQoKSk7Ci0g
ICAgICAgIHRleHR1cmVVcGRhdGVyKCktPnVwZGF0ZVRleHR1cmVSZWN0KGNvbnRleHQsIHRleHR1
cmUoKS0+Zm9ybWF0KCksIGRlc3RSZWN0LCBtX2J1ZmZlci5nZXQoKSk7Ci0gICAgICAgIG1fYnVm
ZmVyLmNsZWFyKCk7CisgICAgICAgIHNpemVfdCBidWZmZXJTaXplID0gVGV4dHVyZU1hbmFnZXI6
Om1lbW9yeVVzZUJ5dGVzKGRlc3RSZWN0LnNpemUoKSwgdGV4dHVyZSgpLT5mb3JtYXQoKSk7Cisg
ICAgICAgIE93bkFycmF5UHRyPHVpbnQ4X3Q+IHBpeGVsRGF0YSA9IGFkb3B0QXJyYXlQdHIobmV3
IHVpbnQ4X3RbYnVmZmVyU2l6ZV0pOworICAgICAgICBPd25QdHI8U2tDYW52YXM+IGNhbnZhcyA9
IGFkb3B0UHRyKG5ldyBza2lhOjpQbGF0Zm9ybUNhbnZhcyhkZXN0UmVjdC53aWR0aCgpLCBkZXN0
UmVjdC5oZWlnaHQoKSwgZmFsc2UsIHBpeGVsRGF0YS5nZXQoKSkpOworICAgICAgICB0ZXh0dXJl
VXBkYXRlcigpLT5wYWludENvbnRlbnRzUmVjdChjYW52YXMuZ2V0KCksIHNvdXJjZVJlY3QpOwor
ICAgICAgICBzdWJJbWFnZVVwZGF0ZS0+c2V0UGl4ZWxEYXRhKHBpeGVsRGF0YS5yZWxlYXNlKCkp
OwogICAgIH0KIH0KIApAQCAtMTAxLDcgKzEwNCw2IEBAIFBhc3NSZWZQdHI8Qml0bWFwU2tQaWN0
dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcj4gQml0bWFwU2tQaWN0dXJlQ2FudmFzTGF5ZXJU
CiBCaXRtYXBTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpCaXRtYXBTa1BpY3R1
cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyKFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21p
dW0+IHBhaW50ZXIsIGJvb2wgdXNlTWFwVGV4U3ViSW1hZ2UpCiAgICAgOiBTa1BpY3R1cmVDYW52
YXNMYXllclRleHR1cmVVcGRhdGVyKHBhaW50ZXIpCiAgICAgLCBtX3VzZU1hcFRleFN1YkltYWdl
KHVzZU1hcFRleFN1YkltYWdlKQotICAgICwgbV90ZXhTdWJJbWFnZSh1c2VNYXBUZXhTdWJJbWFn
ZSkKIHsKIH0KIApAQCAtMTA5LDcgKzExMSw3IEBAIEJpdG1hcFNrUGljdHVyZUNhbnZhc0xheWVy
VGV4dHVyZVVwZGF0ZXI6On5CaXRtYXBTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhCiB7
CiB9CiAKLVBhc3NPd25QdHI8TGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZT4gQml0bWFwU2tQ
aWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6Y3JlYXRlVGV4dHVyZShUZXh0dXJlTWFu
YWdlciogbWFuYWdlcikKK1Bhc3NPd25QdHI8Q2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4
dHVyZT4gQml0bWFwU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6Y3JlYXRlVGV4
dHVyZShUZXh0dXJlTWFuYWdlciogbWFuYWdlcikKIHsKICAgICByZXR1cm4gYWRvcHRQdHIobmV3
IFRleHR1cmUodGhpcywgTWFuYWdlZFRleHR1cmU6OmNyZWF0ZShtYW5hZ2VyKSkpOwogfQpAQCAt
MTIzLDcgKzEyNSw2IEBAIExheWVyVGV4dHVyZVVwZGF0ZXI6OlNhbXBsZWRUZXhlbEZvcm1hdCBC
aXRtYXBTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyCiAKIHZvaWQgQml0bWFwU2tQ
aWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6cGFpbnRDb250ZW50cyhjb25zdCBJbnRS
ZWN0JiBjb250ZW50UmVjdCwgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUsIGludCBib3JkZXJUZXhl
bHMsIGZsb2F0IGNvbnRlbnRzU2NhbGUpCiB7Ci0gICAgbV90ZXhTdWJJbWFnZS5zZXRTdWJJbWFn
ZVNpemUodGlsZVNpemUpOwogICAgIFNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6
OnBhaW50Q29udGVudHMoY29udGVudFJlY3QsIHRpbGVTaXplLCBib3JkZXJUZXhlbHMsIGNvbnRl
bnRzU2NhbGUpOwogfQogCkBAIC0xMzUsMTEgKzEzNiw2IEBAIHZvaWQgQml0bWFwU2tQaWN0dXJl
Q2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6cGFpbnRDb250ZW50c1JlY3QoU2tDYW52YXMqIGNh
bnZhCiAgICAgZHJhd1BpY3R1cmUoY2FudmFzKTsKIH0KIAotdm9pZCBCaXRtYXBTa1BpY3R1cmVD
YW52YXNMYXllclRleHR1cmVVcGRhdGVyOjp1cGRhdGVUZXh0dXJlUmVjdChHcmFwaGljc0NvbnRl
eHQzRCogY29udGV4dCwgR0MzRGVudW0gZm9ybWF0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCwg
Y29uc3QgdWludDhfdCogcGl4ZWxzKQotewotICAgIG1fdGV4U3ViSW1hZ2UudXBsb2FkKHBpeGVs
cywgZGVzdFJlY3QsIGRlc3RSZWN0LCBkZXN0UmVjdCwgZm9ybWF0LCBjb250ZXh0KTsKLX0KLQog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogI2VuZGlmIC8vIFVTRShTS0lBKQogI2VuZGlmIC8vIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0JpdG1hcFNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVy
ZVVwZGF0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Jp
dG1hcFNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuaAppbmRleCA5NGE4NThmLi43
YjU3OTRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9CaXRtYXBTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQml0bWFwU2tQaWN0dXJlQ2Fu
dmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5oCkBAIC00MiwyMyArNDIsMjMgQEAgcHVibGljOgogICAg
IHB1YmxpYzoKICAgICAgICAgVGV4dHVyZShCaXRtYXBTa1BpY3R1cmVDYW52YXNMYXllclRleHR1
cmVVcGRhdGVyKiwgUGFzc093blB0cjxNYW5hZ2VkVGV4dHVyZT4pOwogCi0gICAgICAgIHZpcnR1
YWwgYm9vbCBuZWVkUHJlcGFyZVJlY3QoKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHByZXBhcmVS
ZWN0KEdyYXBoaWNzQ29udGV4dDNEKiwgVGV4dHVyZUFsbG9jYXRvciosIGNvbnN0IEludFJlY3Qm
IHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KTsKLSAgICAgICAgdmlydHVhbCB2
b2lkIHBhaW50Q29udGVudHNSZWN0KGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QpOwotICAgICAg
ICB2aXJ0dWFsIHZvaWQgdXBkYXRlUmVjdChHcmFwaGljc0NvbnRleHQzRCosIGNvbnN0IEludFJl
Y3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KTsKKyAgICAgICAgdmlydHVh
bCBib29sIG5lZWRQcmVwYXJlKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlKEdyYXBo
aWNzQ29udGV4dDNEKiwgVGV4dHVyZUFsbG9jYXRvciopOworCisgICAgICAgIHZpcnR1YWwgUGFz
c093blB0cjxDQ1RleHR1cmVVcGRhdGVyOjpUZXh0dXJlVXBkYXRlPiBjcmVhdGVDQ1RleHR1cmVV
cGRhdGUoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHB1c2hQcm9wZXJ0aWVzVG8oQ0NUZXh0dXJl
VXBkYXRlcjo6VGV4dHVyZVVwZGF0ZSopOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgQml0bWFw
U2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlciogdGV4dHVyZVVwZGF0ZXIoKSB7IHJl
dHVybiBtX3RleHR1cmVVcGRhdGVyOyB9CiAKICAgICAgICAgQml0bWFwU2tQaWN0dXJlQ2FudmFz
TGF5ZXJUZXh0dXJlVXBkYXRlciogbV90ZXh0dXJlVXBkYXRlcjsKICAgICAgICAgdWludDhfdCog
bV9tYXBwZWRCdWZmZXI7Ci0gICAgICAgIE93bkFycmF5UHRyPHVpbnQ4X3Q+IG1fYnVmZmVyOwog
ICAgIH07CiAKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxCaXRtYXBTa1BpY3R1cmVDYW52YXNMYXll
clRleHR1cmVVcGRhdGVyPiBjcmVhdGUoUGFzc093blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4s
IGJvb2wgdXNlTWFwVGV4U3ViSW1hZ2UpOwogICAgIHZpcnR1YWwgfkJpdG1hcFNrUGljdHVyZUNh
bnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIoKTsKIAotICAgIHZpcnR1YWwgUGFzc093blB0cjxMYXll
clRleHR1cmVVcGRhdGVyOjpUZXh0dXJlPiBjcmVhdGVUZXh0dXJlKFRleHR1cmVNYW5hZ2VyKik7
CisgICAgdmlydHVhbCBQYXNzT3duUHRyPENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1
cmU+IGNyZWF0ZVRleHR1cmUoVGV4dHVyZU1hbmFnZXIqKTsKICAgICB2aXJ0dWFsIE9yaWVudGF0
aW9uIG9yaWVudGF0aW9uKCkgeyByZXR1cm4gTGF5ZXJUZXh0dXJlVXBkYXRlcjo6Qm90dG9tVXBP
cmllbnRhdGlvbjsgfQogICAgIHZpcnR1YWwgU2FtcGxlZFRleGVsRm9ybWF0IHNhbXBsZWRUZXhl
bEZvcm1hdChHQzNEZW51bSB0ZXh0dXJlRm9ybWF0KTsKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRD
b250ZW50cyhjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgSW50U2l6ZSYgdGlsZVNp
emUsIGludCBib3JkZXJUZXhlbHMsIGZsb2F0IGNvbnRlbnRzU2NhbGUpOwpAQCAtNzAsNyArNzAs
NiBAQCBwcml2YXRlOgogICAgIGV4cGxpY2l0IEJpdG1hcFNrUGljdHVyZUNhbnZhc0xheWVyVGV4
dHVyZVVwZGF0ZXIoUGFzc093blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4sIGJvb2wgdXNlTWFw
VGV4U3ViSW1hZ2UpOwogCiAgICAgYm9vbCBtX3VzZU1hcFRleFN1YkltYWdlOwotICAgIExheWVy
VGV4dHVyZVN1YkltYWdlIG1fdGV4U3ViSW1hZ2U7CiB9OwogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogI2VuZGlmIC8vIFVTRShTS0lBKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5j
cHAKaW5kZXggN2RhNTU1Ni4uZWNkOGJkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hy
b21pdW0uY3BwCkBAIC01Myw3ICs1MywxMiBAQCBDYW52YXMyRExheWVyQ2hyb21pdW06OlVwZGF0
ZXJUZXh0dXJlOjp+VXBkYXRlclRleHR1cmUoKQogewogfQogCi12b2lkIENhbnZhczJETGF5ZXJD
aHJvbWl1bTo6VXBkYXRlclRleHR1cmU6OnVwZGF0ZVJlY3QoR3JhcGhpY3NDb250ZXh0M0QqLCBj
b25zdCBJbnRSZWN0JiAvKiBzb3VyY2VSZWN0ICovLCBjb25zdCBJbnRSZWN0JiAvKiBkZXN0UmVj
dCAqLykKK2Jvb2wgQ2FudmFzMkRMYXllckNocm9taXVtOjpVcGRhdGVyVGV4dHVyZTo6bmVlZFBy
ZXBhcmUoKQoreworICAgIHJldHVybiBtX2xheWVyLT5uZWVkc0Rpc3BsYXkoKTsKK30KKwordm9p
ZCBDYW52YXMyRExheWVyQ2hyb21pdW06OlVwZGF0ZXJUZXh0dXJlOjpwcmVwYXJlKEdyYXBoaWNz
Q29udGV4dDNEKiwgVGV4dHVyZUFsbG9jYXRvciopCiB7CiAgICAgbV9sYXllci0+dXBkYXRlQ29t
cG9zaXRvclJlc291cmNlcygpOwogfQpAQCAtMTAyLDggKzEwNyw3IEBAIHZvaWQgQ2FudmFzMkRM
YXllckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKCkKIAogdm9pZCBDYW52YXMy
RExheWVyQ2hyb21pdW06OmZvckVhY2hDb21wb3NpdG9yUmVzb3VyY2UoTGF5ZXJUZXh0dXJlVXBk
YXRlcjo6SGFuZGxlciYgaGFuZGxlcikKIHsKLSAgICBJbnRSZWN0IG5vbkVtcHR5UmVjdCgwLCAw
LCAxLCAxKTsKLSAgICBoYW5kbGVyLmhhbmRsZShtX3VwZGF0ZXJUZXh0dXJlLmdldCgpLCBub25F
bXB0eVJlY3QsIG5vbkVtcHR5UmVjdCk7CisgICAgaGFuZGxlci5oYW5kbGUobV91cGRhdGVyVGV4
dHVyZS5nZXQoKSk7CiB9CiAKIHZvaWQgQ2FudmFzMkRMYXllckNocm9taXVtOjpjb250ZW50Q2hh
bmdlZCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5oCmluZGV4IGU4NmE2MWEuLjBj
MThkYzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5oCkBAIC01Miw3ICs1Miw4
IEBAIHB1YmxpYzoKIAogICAgICAgICB2aXJ0dWFsIH5VcGRhdGVyVGV4dHVyZSgpOwogCi0gICAg
ICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVSZWN0KEdyYXBoaWNzQ29udGV4dDNEKiwgY29uc3QgSW50
UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpOworICAgICAgICB2aXJ0
dWFsIGJvb2wgbmVlZFByZXBhcmUoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHByZXBhcmUoR3Jh
cGhpY3NDb250ZXh0M0QqLCBUZXh0dXJlQWxsb2NhdG9yKik7CiAKICAgICBwcml2YXRlOgogICAg
ICAgICBleHBsaWNpdCBVcGRhdGVyVGV4dHVyZShDYW52YXMyRExheWVyQ2hyb21pdW0qKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZh
c0xheWVyVGV4dHVyZVVwZGF0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHAKaW5kZXggMjgzMTY2OS4u
YmU3NmZmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHAK
QEAgLTUxLDEyICs1MSwxMiBAQCBQYXNzT3duUHRyPE1hbmFnZWRUZXh0dXJlPiBDYW52YXNMYXll
clRleHR1cmVVcGRhdGVyOjpUZXh0dXJlOjpyZXBsYWNlVGV4dHVyZShUZQogICAgIHJldHVybiBv
bGQucmVsZWFzZSgpOwogfQogCi1ib29sIENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1
cmU6Om5lZWRQcmVwYXJlUmVjdCgpCitib29sIENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OlRl
eHR1cmU6Om5lZWRQcmVwYXJlKCkKIHsKICAgICByZXR1cm4gIW1fdGV4dHVyZS0+dGV4dHVyZUlk
KCk7CiB9CiAKLXZvaWQgQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZTo6cHJlcGFy
ZVJlY3QoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIFRleHR1cmVBbGxvY2F0b3IqIGFsbG9j
YXRvciwgY29uc3QgSW50UmVjdCYgLyogc291cmNlUmVjdCAqLywgY29uc3QgSW50UmVjdCYgLyog
ZGVzdFJlY3QgKi8pCit2b2lkIENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU6OnBy
ZXBhcmUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIFRleHR1cmVBbGxvY2F0b3IqIGFsbG9j
YXRvcikKIHsKICAgICBtX3RleHR1cmUtPmFsbG9jYXRlVGV4dHVyZShjb250ZXh0LCBhbGxvY2F0
b3IpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5oCmluZGV4IDhl
NjBmMDcuLjQyZjBhOWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0NhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllclRleHR1cmVVcGRhdGVy
LmgKQEAgLTQ3LDE4ICs0NywyOCBAQCBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwgTWFuYWdlZFRl
eHR1cmUqIHRleHR1cmUoKSB7IHJldHVybiBtX3RleHR1cmUuZ2V0KCk7IH0KICAgICAgICAgdmly
dHVhbCBQYXNzT3duUHRyPE1hbmFnZWRUZXh0dXJlPiByZXBsYWNlVGV4dHVyZShUZXh0dXJlTWFu
YWdlciopOwogCi0gICAgICAgIHZpcnR1YWwgYm9vbCBuZWVkUHJlcGFyZVJlY3QoKTsKLSAgICAg
ICAgdmlydHVhbCB2b2lkIHByZXBhcmVSZWN0KEdyYXBoaWNzQ29udGV4dDNEKiwgVGV4dHVyZUFs
bG9jYXRvciosIGNvbnN0IEludFJlY3QmIC8qIHNvdXJjZVJlY3QgKi8sIGNvbnN0IEludFJlY3Qm
IC8qIGRlc3RSZWN0ICovKTsKKyAgICAgICAgdmlydHVhbCBib29sIG5lZWRQcmVwYXJlKCk7Cisg
ICAgICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlKEdyYXBoaWNzQ29udGV4dDNEKiwgVGV4dHVyZUFs
bG9jYXRvciopOworCisgICAgICAgIHZpcnR1YWwgdm9pZCBzZXRVcGRhdGVSZWN0KGNvbnN0IElu
dFJlY3QmIHVwZGF0ZVJlY3QpIHsgbV91cGRhdGVSZWN0ID0gdXBkYXRlUmVjdDsgfQorICAgICAg
ICB2aXJ0dWFsIEludFJlY3QgdXBkYXRlUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fdXBkYXRlUmVj
dDsgfQorCisgICAgICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50T2Zmc2V0KGNvbnN0IEludFBv
aW50JiBjb250ZW50T2Zmc2V0KSB7IG1fY29udGVudE9mZnNldCA9IGNvbnRlbnRPZmZzZXQ7IH0K
KyAgICAgICAgdmlydHVhbCBJbnRQb2ludCBjb250ZW50T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4g
bV9jb250ZW50T2Zmc2V0OyB9CiAKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIGV4cGxpY2l0IFRl
eHR1cmUoUGFzc093blB0cjxNYW5hZ2VkVGV4dHVyZT4pOwogCiAgICAgcHJpdmF0ZToKICAgICAg
ICAgT3duUHRyPE1hbmFnZWRUZXh0dXJlPiBtX3RleHR1cmU7CisgICAgICAgIEludFJlY3QgbV91
cGRhdGVSZWN0OworICAgICAgICBJbnRQb2ludCBtX2NvbnRlbnRPZmZzZXQ7CiAgICAgfTsKIAog
ICAgIHZpcnR1YWwgfkNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIoKTsKIAorICAgIHZpcnR1YWwg
UGFzc093blB0cjxUZXh0dXJlPiBjcmVhdGVUZXh0dXJlKFRleHR1cmVNYW5hZ2VyKikgPSAwOwor
CiBwcm90ZWN0ZWQ6CiAgICAgZXhwbGljaXQgQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcihQYXNz
T3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJv
bWl1bS5oCmluZGV4IGM1ZTlmY2MuLmIyMmY5MzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hy
b21pdW0uaApAQCAtNTksOSArNTksOSBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBjbGVh
bnVwUmVzb3VyY2VzKCk7CiAgICAgdmlydHVhbCBib29sIGRyYXdzQ29udGVudCgpIGNvbnN0Owog
ICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUZXh0dXJlVXBkYXRlcihjb25zdCBDQ0xheWVyVHJlZUhv
c3QqKTsKLSAgICB2aXJ0dWFsIExheWVyVGV4dHVyZVVwZGF0ZXIqIHRleHR1cmVVcGRhdGVyKCkg
Y29uc3QgeyByZXR1cm4gbV90ZXh0dXJlVXBkYXRlci5nZXQoKTsgfQorICAgIHZpcnR1YWwgQ2Fu
dmFzTGF5ZXJUZXh0dXJlVXBkYXRlciogdGV4dHVyZVVwZGF0ZXIoKSBjb25zdCB7IHJldHVybiBt
X3RleHR1cmVVcGRhdGVyLmdldCgpOyB9CiAKLSAgICBSZWZQdHI8TGF5ZXJUZXh0dXJlVXBkYXRl
cj4gbV90ZXh0dXJlVXBkYXRlcjsKKyAgICBSZWZQdHI8Q2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRl
cj4gbV90ZXh0dXJlVXBkYXRlcjsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5
ZXJUZXh0dXJlVXBkYXRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9GcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuY3Bw
CmluZGV4IDllZWZiNDYuLjZkYWE0ZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0
dXJlVXBkYXRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vRnJhbWVCdWZmZXJTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmNwcApA
QCAtMTA1LDI1ICsxMDUsNDAgQEAgRnJhbWVCdWZmZXJTa1BpY3R1cmVDYW52YXNMYXllclRleHR1
cmVVcGRhdGVyOjpUZXh0dXJlOjp+VGV4dHVyZSgpCiB7CiB9CiAKLXZvaWQgRnJhbWVCdWZmZXJT
a1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlOjp1cGRhdGVSZWN0KEdy
YXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25z
dCBJbnRSZWN0JiBkZXN0UmVjdCkKK3ZvaWQgRnJhbWVCdWZmZXJTa1BpY3R1cmVDYW52YXNMYXll
clRleHR1cmVVcGRhdGVyOjpUZXh0dXJlOjpwcmVwYXJlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250
ZXh0LCBUZXh0dXJlQWxsb2NhdG9yKiBhbGxvY2F0b3IpCiB7CisgICAgdGV4dHVyZSgpLT5hbGxv
Y2F0ZVRleHR1cmUoY29udGV4dCwgYWxsb2NhdG9yKTsKKwogICAgIC8vIE1ha2Ugc3VyZSBTS0lB
IHVzZXMgdGhlIGNvcnJlY3QgR0wgY29udGV4dC4KICAgICBjb250ZXh0LT5tYWtlQ29udGV4dEN1
cnJlbnQoKTsKICAgICAvLyBOb3RpZnkgU0tJQSB0byBzeW5jIGl0cyBpbnRlcm5hbCBHTCBzdGF0
ZS4KICAgICBjb250ZXh0LT5nckNvbnRleHQoKS0+cmVzZXRDb250ZXh0KCk7CiAKLSAgICBBU1NF
UlQodGV4dHVyZSgpLT50ZXh0dXJlSWQoKSk7Ci0KICAgICAvLyBDcmVhdGUgYW4gYWNjZWxlcmF0
ZWQgY2FudmFzIHRvIGRyYXcgb24uCiAgICAgRnJhbWVCdWZmZXIgYnVmZmVyOwogICAgIFNrQ2Fu
dmFzKiBjYW52YXMgPSBidWZmZXIuaW5pdGlhbGl6ZShjb250ZXh0LCB0ZXh0dXJlKCkpOwogCisg
ICAgSW50UmVjdCBkZXN0UmVjdCA9IHVwZGF0ZVJlY3QoKTsKKyAgICBJbnRQb2ludCBvZmZzZXQg
PSBjb250ZW50T2Zmc2V0KCk7CisgICAgSW50UmVjdCBzb3VyY2VSZWN0ID0gSW50UmVjdChJbnRQ
b2ludChkZXN0UmVjdC54KCkgKyBvZmZzZXQueCgpLCBkZXN0UmVjdC55KCkgKyBvZmZzZXQueSgp
KSwgZGVzdFJlY3Quc2l6ZSgpKTsKKwogICAgIHRleHR1cmVVcGRhdGVyKCktPnVwZGF0ZVRleHR1
cmVSZWN0KGNvbnRleHQsIGNhbnZhcywgc291cmNlUmVjdCwgZGVzdFJlY3QpOwogCiAgICAgLy8g
Rmx1c2ggU0tJQSBjb250ZXh0IHNvIHRoYXQgYWxsIHRoZSByZW5kZXJlZCBzdHVmZiBhcHBlYXJz
IG9uIHRoZSB0ZXh0dXJlLgogICAgIGNvbnRleHQtPmdyQ29udGV4dCgpLT5mbHVzaCgpOwogfQog
CitQYXNzT3duUHRyPENDVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmVVcGRhdGU+IEZyYW1lQnVmZmVy
U2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZTo6Y3JlYXRlQ0NUZXh0
dXJlVXBkYXRlKCkKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gUGFz
c093blB0cjxDQ1RleHR1cmVVcGRhdGVyOjpUZXh0dXJlVXBkYXRlPigpOworfQorCit2b2lkIEZy
YW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZTo6cHVz
aFByb3BlcnRpZXNUbyhDQ1RleHR1cmVVcGRhdGVyOjpUZXh0dXJlVXBkYXRlKikKK3sKKyAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwogUGFzc1JlZlB0cjxGcmFtZUJ1ZmZlclNrUGljdHVy
ZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI+IEZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5
ZXJUZXh0dXJlVXBkYXRlcjo6Y3JlYXRlKFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+
IHBhaW50ZXIpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGcmFtZUJ1ZmZlclNrUGljdHVy
ZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIocGFpbnRlcikpOwpAQCAtMTM4LDcgKzE1Myw3IEBA
IEZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6fkZyYW1lQnVm
ZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUCiB7CiB9CiAKLVBhc3NPd25QdHI8TGF5ZXJUZXh0dXJl
VXBkYXRlcjo6VGV4dHVyZT4gRnJhbWVCdWZmZXJTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVV
cGRhdGVyOjpjcmVhdGVUZXh0dXJlKFRleHR1cmVNYW5hZ2VyKiBtYW5hZ2VyKQorUGFzc093blB0
cjxDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlPiBGcmFtZUJ1ZmZlclNrUGljdHVy
ZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OmNyZWF0ZVRleHR1cmUoVGV4dHVyZU1hbmFnZXIq
IG1hbmFnZXIpCiB7CiAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBUZXh0dXJlKHRoaXMsIE1hbmFn
ZWRUZXh0dXJlOjpjcmVhdGUobWFuYWdlcikpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFz
TGF5ZXJUZXh0dXJlVXBkYXRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vRnJhbWVCdWZmZXJTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmgK
aW5kZXggYThmZjg1Zi4uNTlhZWMwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vRnJhbWVCdWZmZXJTa1BpY3R1cmVDYW52YXNMYXllclRleHR1
cmVVcGRhdGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vRnJhbWVCdWZmZXJTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmgKQEAgLTQz
LDcgKzQzLDExIEBAIHB1YmxpYzoKICAgICAgICAgVGV4dHVyZShGcmFtZUJ1ZmZlclNrUGljdHVy
ZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIqLCBQYXNzT3duUHRyPE1hbmFnZWRUZXh0dXJlPik7
CiAgICAgICAgIHZpcnR1YWwgflRleHR1cmUoKTsKIAotICAgICAgICB2aXJ0dWFsIHZvaWQgdXBk
YXRlUmVjdChHcmFwaGljc0NvbnRleHQzRCosIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNv
bnN0IEludFJlY3QmIGRlc3RSZWN0KTsKKyAgICAgICAgdmlydHVhbCBib29sIG5lZWRQcmVwYXJl
KCkgeyByZXR1cm4gdHJ1ZTsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZShHcmFwaGlj
c0NvbnRleHQzRCosIFRleHR1cmVBbGxvY2F0b3IqKTsKKworICAgICAgICB2aXJ0dWFsIFBhc3NP
d25QdHI8Q0NUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZVVwZGF0ZT4gY3JlYXRlQ0NUZXh0dXJlVXBk
YXRlKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBwdXNoUHJvcGVydGllc1RvKENDVGV4dHVyZVVw
ZGF0ZXI6OlRleHR1cmVVcGRhdGUqKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIEZyYW1lQnVm
ZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlciogdGV4dHVyZVVwZGF0ZXIoKSB7
IHJldHVybiBtX3RleHR1cmVVcGRhdGVyOyB9CkBAIC01NCw3ICs1OCw3IEBAIHB1YmxpYzoKICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxGcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVy
ZVVwZGF0ZXI+IGNyZWF0ZShQYXNzT3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPik7CiAgICAg
dmlydHVhbCB+RnJhbWVCdWZmZXJTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyKCk7
CiAKLSAgICB2aXJ0dWFsIFBhc3NPd25QdHI8TGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZT4g
Y3JlYXRlVGV4dHVyZShUZXh0dXJlTWFuYWdlciopOworICAgIHZpcnR1YWwgUGFzc093blB0cjxD
YW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlPiBjcmVhdGVUZXh0dXJlKFRleHR1cmVN
YW5hZ2VyKik7CiAgICAgdmlydHVhbCBPcmllbnRhdGlvbiBvcmllbnRhdGlvbigpIHsgcmV0dXJu
IExheWVyVGV4dHVyZVVwZGF0ZXI6OlRvcERvd25PcmllbnRhdGlvbjsgfQogICAgIHZpcnR1YWwg
U2FtcGxlZFRleGVsRm9ybWF0IHNhbXBsZWRUZXhlbEZvcm1hdChHQzNEZW51bSB0ZXh0dXJlRm9y
bWF0KTsKICAgICB2b2lkIHVwZGF0ZVRleHR1cmVSZWN0KEdyYXBoaWNzQ29udGV4dDNEKiwgU2tD
YW52YXMqLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVj
dCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9JbWFnZUxheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcAppbmRleCBhMzQwYjE0Li40Njc1ZTVj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9J
bWFnZUxheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTM0LDkgKzM0LDkgQEAKIAog
I2luY2x1ZGUgIkltYWdlTGF5ZXJDaHJvbWl1bS5oIgogCisjaW5jbHVkZSAiQ2FudmFzTGF5ZXJU
ZXh0dXJlVXBkYXRlci5oIgogI2luY2x1ZGUgIkltYWdlLmgiCi0jaW5jbHVkZSAiTGF5ZXJUZXh0
dXJlU3ViSW1hZ2UuaCIKLSNpbmNsdWRlICJMYXllclRleHR1cmVVcGRhdGVyLmgiCisjaW5jbHVk
ZSAiTGF5ZXJQYWludGVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJNYW5hZ2VkVGV4dHVyZS5oIgog
I2luY2x1ZGUgIlBsYXRmb3JtQ29sb3IuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVySW1wbC5oIgpA
QCAtNDQsNTYgKzQ0LDcyIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgSW1hZ2VM
YXllclRleHR1cmVVcGRhdGVyIDogcHVibGljIExheWVyVGV4dHVyZVVwZGF0ZXIgeworY2xhc3Mg
SW1hZ2VDYW52YXNMYXllclRleHR1cmVVcGRhdGVyIDogcHVibGljIENhbnZhc0xheWVyVGV4dHVy
ZVVwZGF0ZXIgewogcHVibGljOgotICAgIGNsYXNzIFRleHR1cmUgOiBwdWJsaWMgTGF5ZXJUZXh0
dXJlVXBkYXRlcjo6VGV4dHVyZSB7CisgICAgY2xhc3MgUGFpbnRlciA6IHB1YmxpYyBMYXllclBh
aW50ZXJDaHJvbWl1bSB7CiAgICAgcHVibGljOgotICAgICAgICBUZXh0dXJlKEltYWdlTGF5ZXJU
ZXh0dXJlVXBkYXRlciogdGV4dHVyZVVwZGF0ZXIsIFBhc3NPd25QdHI8TWFuYWdlZFRleHR1cmU+
IHRleHR1cmUpCi0gICAgICAgICAgICA6IG1fdGV4dHVyZSh0ZXh0dXJlKQotICAgICAgICAgICAg
LCBtX3RleHR1cmVVcGRhdGVyKHRleHR1cmVVcGRhdGVyKQorICAgICAgICBzdGF0aWMgUGFzc093
blB0cjxQYWludGVyPiBjcmVhdGUoKQogICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYWRv
cHRQdHIobmV3IFBhaW50ZXIoKSk7CiAgICAgICAgIH0KIAotICAgICAgICB2aXJ0dWFsIE1hbmFn
ZWRUZXh0dXJlKiB0ZXh0dXJlKCkgeyByZXR1cm4gbV90ZXh0dXJlLmdldCgpOyB9Ci0gICAgICAg
IFBhc3NPd25QdHI8TWFuYWdlZFRleHR1cmU+IHJlcGxhY2VUZXh0dXJlKFRleHR1cmVNYW5hZ2Vy
KiBtYW5hZ2VyKQorICAgICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0Jiwg
Y29uc3QgSW50UmVjdCYpCiAgICAgICAgIHsKLSAgICAgICAgICAgIE93blB0cjxNYW5hZ2VkVGV4
dHVyZT4gb2xkID0gbV90ZXh0dXJlLnJlbGVhc2UoKTsKLSAgICAgICAgICAgIG1fdGV4dHVyZSA9
IE1hbmFnZWRUZXh0dXJlOjpjcmVhdGUobWFuYWdlcik7Ci0gICAgICAgICAgICByZXR1cm4gb2xk
LnJlbGVhc2UoKTsKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9
CisgICAgfTsKIAotICAgICAgICB2aXJ0dWFsIGJvb2wgbmVlZFByZXBhcmVSZWN0KCkKKyAgICBj
bGFzcyBUZXh0dXJlIDogcHVibGljIENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmUg
eworICAgIHB1YmxpYzoKKyAgICAgICAgVGV4dHVyZShJbWFnZUNhbnZhc0xheWVyVGV4dHVyZVVw
ZGF0ZXIqIHRleHR1cmVVcGRhdGVyLCBQYXNzT3duUHRyPE1hbmFnZWRUZXh0dXJlPiB0ZXh0dXJl
KQorICAgICAgICAgICAgOiBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlKHRleHR1
cmUpCisgICAgICAgICAgICAsIG1fdGV4dHVyZVVwZGF0ZXIodGV4dHVyZVVwZGF0ZXIpCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiAhbV90ZXh0dXJlLT50ZXh0dXJlSWQoKTsKICAgICAg
ICAgfQogCi0gICAgICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlUmVjdChHcmFwaGljc0NvbnRleHQz
RCogY29udGV4dCwgVGV4dHVyZUFsbG9jYXRvciogYWxsb2NhdG9yLCBjb25zdCBJbnRSZWN0JiAv
KiBzb3VyY2VSZWN0ICovLCBjb25zdCBJbnRSZWN0JiAvKiBkZXN0UmVjdCAqLykKKyAgICAgICAg
dmlydHVhbCBQYXNzT3duUHRyPENDVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmVVcGRhdGU+IGNyZWF0
ZUNDVGV4dHVyZVVwZGF0ZSgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIG1fdGV4dHVyZS0+YWxs
b2NhdGVUZXh0dXJlKGNvbnRleHQsIGFsbG9jYXRvcik7CisgICAgICAgICAgICByZXR1cm4gQ0NU
ZXh0dXJlVXBkYXRlcjo6U3ViSW1hZ2VUZXh0dXJlVXBkYXRlOjpjcmVhdGUoKTsKICAgICAgICAg
fQogCi0gICAgICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVSZWN0KEdyYXBoaWNzQ29udGV4dDNEKiBj
b250ZXh0LCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVj
dCkKKyAgICAgICAgdmlydHVhbCB2b2lkIHB1c2hQcm9wZXJ0aWVzVG8oQ0NUZXh0dXJlVXBkYXRl
cjo6VGV4dHVyZVVwZGF0ZSogdXBkYXRlKQogICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQo
dGV4dHVyZSgpLT50ZXh0dXJlSWQoKSk7Ci0gICAgICAgICAgICBjb250ZXh0LT5iaW5kVGV4dHVy
ZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgdGV4dHVyZSgpLT50ZXh0dXJlSWQoKSk7
Ci0gICAgICAgICAgICB0ZXh0dXJlVXBkYXRlcigpLT51cGRhdGVUZXh0dXJlUmVjdChjb250ZXh0
LCB0ZXh0dXJlKCktPmZvcm1hdCgpLCBzb3VyY2VSZWN0LCBkZXN0UmVjdCk7CisgICAgICAgICAg
ICBDQ1RleHR1cmVVcGRhdGVyOjpTdWJJbWFnZVRleHR1cmVVcGRhdGUqIHN1YkltYWdlVXBkYXRl
ID0gc3RhdGljX2Nhc3Q8Q0NUZXh0dXJlVXBkYXRlcjo6U3ViSW1hZ2VUZXh0dXJlVXBkYXRlKj4o
dXBkYXRlKTsKKworICAgICAgICAgICAgSW50UmVjdCBpbWFnZVJlY3QgPSB0ZXh0dXJlVXBkYXRl
cigpLT5pbWFnZVJlY3QoKTsKKyAgICAgICAgICAgIEludFJlY3QgZGVzdFJlY3QgPSB1cGRhdGVS
ZWN0KCk7CisgICAgICAgICAgICBJbnRQb2ludCBvZmZzZXQgPSBjb250ZW50T2Zmc2V0KCk7Cisg
ICAgICAgICAgICBJbnRSZWN0IHNvdXJjZVJlY3QgPSBJbnRSZWN0KEludFBvaW50KGRlc3RSZWN0
LngoKSArIG9mZnNldC54KCksIGRlc3RSZWN0LnkoKSArIG9mZnNldC55KCkpLCBkZXN0UmVjdC5z
aXplKCkpOworCisgICAgICAgICAgICAvLyBTb3VyY2UgcmVjdCBzaG91bGQgbmV2ZXIgZ28gb3V0
c2lkZSB0aGUgaW1hZ2UgcGl4ZWxzLCBldmVuIGlmIHRoaXMKKyAgICAgICAgICAgIC8vIGlzIHJl
cXVlc3RlZCBiZWNhdXNlIHRoZSB0ZXh0dXJlIGV4dGVuZHMgb3V0c2lkZSB0aGUgaW1hZ2UuCisg
ICAgICAgICAgICBJbnRSZWN0IGNsaXBwZWRTb3VyY2VSZWN0ID0gc291cmNlUmVjdDsKKyAgICAg
ICAgICAgIGNsaXBwZWRTb3VyY2VSZWN0LmludGVyc2VjdChpbWFnZVJlY3QpOworCisgICAgICAg
ICAgICBJbnRSZWN0IGNsaXBwZWREZXN0UmVjdCA9IGRlc3RSZWN0OworICAgICAgICAgICAgY2xp
cHBlZERlc3RSZWN0Lm1vdmUoY2xpcHBlZFNvdXJjZVJlY3QubG9jYXRpb24oKSAtIHNvdXJjZVJl
Y3QubG9jYXRpb24oKSk7CisgICAgICAgICAgICBjbGlwcGVkRGVzdFJlY3Quc2V0U2l6ZShjbGlw
cGVkU291cmNlUmVjdC5zaXplKCkpOworCisgICAgICAgICAgICBzdWJJbWFnZVVwZGF0ZS0+c2V0
Rm9ybWF0KHRleHR1cmUoKS0+Zm9ybWF0KCkpOworICAgICAgICAgICAgc3ViSW1hZ2VVcGRhdGUt
PnNldFRleHR1cmVJZCh0ZXh0dXJlKCktPnRleHR1cmVJZCgpKTsKKyAgICAgICAgICAgIHN1Yklt
YWdlVXBkYXRlLT5zZXRSZWN0KGNsaXBwZWREZXN0UmVjdCk7CisgICAgICAgICAgICBzdWJJbWFn
ZVVwZGF0ZS0+c2V0UGl4ZWxEYXRhKHRleHR1cmVVcGRhdGVyKCktPmltYWdlKCkucGl4ZWxzKCks
IGltYWdlUmVjdCwgY2xpcHBlZFNvdXJjZVJlY3QpOwogICAgICAgICB9CiAKICAgICBwcml2YXRl
OgotICAgICAgICBJbWFnZUxheWVyVGV4dHVyZVVwZGF0ZXIqIHRleHR1cmVVcGRhdGVyKCkgeyBy
ZXR1cm4gbV90ZXh0dXJlVXBkYXRlcjsgfQorICAgICAgICBJbWFnZUNhbnZhc0xheWVyVGV4dHVy
ZVVwZGF0ZXIqIHRleHR1cmVVcGRhdGVyKCkgeyByZXR1cm4gbV90ZXh0dXJlVXBkYXRlcjsgfQog
Ci0gICAgICAgIE93blB0cjxNYW5hZ2VkVGV4dHVyZT4gbV90ZXh0dXJlOwotICAgICAgICBJbWFn
ZUxheWVyVGV4dHVyZVVwZGF0ZXIqIG1fdGV4dHVyZVVwZGF0ZXI7CisgICAgICAgIEltYWdlQ2Fu
dmFzTGF5ZXJUZXh0dXJlVXBkYXRlciogbV90ZXh0dXJlVXBkYXRlcjsKICAgICB9OwogCi0gICAg
c3RhdGljIFBhc3NSZWZQdHI8SW1hZ2VMYXllclRleHR1cmVVcGRhdGVyPiBjcmVhdGUoYm9vbCB1
c2VNYXBUZXhTdWJJbWFnZSkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbWFnZUNhbnZhc0xheWVy
VGV4dHVyZVVwZGF0ZXI+IGNyZWF0ZSgpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IEltYWdlTGF5ZXJUZXh0dXJlVXBkYXRlcih1c2VNYXBUZXhTdWJJbWFnZSkpOworICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IEltYWdlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcigpKTsK
ICAgICB9CiAKLSAgICB2aXJ0dWFsIH5JbWFnZUxheWVyVGV4dHVyZVVwZGF0ZXIoKSB7IH0KKyAg
ICB2aXJ0dWFsIH5JbWFnZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIoKSB7IH0KIAotICAgIHZp
cnR1YWwgUGFzc093blB0cjxMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlPiBjcmVhdGVUZXh0
dXJlKFRleHR1cmVNYW5hZ2VyKiBtYW5hZ2VyKQorICAgIHZpcnR1YWwgUGFzc093blB0cjxDYW52
YXNMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlPiBjcmVhdGVUZXh0dXJlKFRleHR1cmVNYW5h
Z2VyKiBtYW5hZ2VyKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBUZXh0dXJl
KHRoaXMsIE1hbmFnZWRUZXh0dXJlOjpjcmVhdGUobWFuYWdlcikpKTsKICAgICB9CkBAIC0xMDYs
MjUgKzEyMiw2IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBMYXllclRleHR1cmVVcGRhdGVy
OjpTYW1wbGVkVGV4ZWxGb3JtYXRSR0JBIDogTGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2FtcGxlZFRl
eGVsRm9ybWF0QkdSQTsKICAgICB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50cyhj
b25zdCBJbnRSZWN0JiAvKiBjb250ZW50UmVjdCAqLywgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUs
IGludCAvKiBib3JkZXJUZXhlbHMgKi8sIGZsb2F0IC8qIGNvbnRlbnRzU2NhbGUgKi8pCi0gICAg
ewotICAgICAgICBtX3RleFN1YkltYWdlLnNldFN1YkltYWdlU2l6ZSh0aWxlU2l6ZSk7Ci0gICAg
fQotCi0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRleHR1cmVSZWN0KEdyYXBoaWNzQ29udGV4dDNE
KiBjb250ZXh0LCB1bnNpZ25lZCBmb3JtYXQsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNv
bnN0IEludFJlY3QmIGRlc3RSZWN0KQotICAgIHsKLSAgICAgICAgLy8gU291cmNlIHJlY3Qgc2hv
dWxkIG5ldmVyIGdvIG91dHNpZGUgdGhlIGltYWdlIHBpeGVscywgZXZlbiBpZiB0aGlzCi0gICAg
ICAgIC8vIGlzIHJlcXVlc3RlZCBiZWNhdXNlIHRoZSB0ZXh0dXJlIGV4dGVuZHMgb3V0c2lkZSB0
aGUgaW1hZ2UuCi0gICAgICAgIEludFJlY3QgY2xpcHBlZFNvdXJjZVJlY3QgPSBzb3VyY2VSZWN0
OwotICAgICAgICBjbGlwcGVkU291cmNlUmVjdC5pbnRlcnNlY3QoaW1hZ2VSZWN0KCkpOwotCi0g
ICAgICAgIEludFJlY3QgY2xpcHBlZERlc3RSZWN0ID0gZGVzdFJlY3Q7Ci0gICAgICAgIGNsaXBw
ZWREZXN0UmVjdC5tb3ZlKGNsaXBwZWRTb3VyY2VSZWN0LmxvY2F0aW9uKCkgLSBzb3VyY2VSZWN0
LmxvY2F0aW9uKCkpOwotICAgICAgICBjbGlwcGVkRGVzdFJlY3Quc2V0U2l6ZShjbGlwcGVkU291
cmNlUmVjdC5zaXplKCkpOwotCi0gICAgICAgIG1fdGV4U3ViSW1hZ2UudXBsb2FkKG1faW1hZ2Uu
cGl4ZWxzKCksIGltYWdlUmVjdCgpLCBjbGlwcGVkU291cmNlUmVjdCwgY2xpcHBlZERlc3RSZWN0
LCBmb3JtYXQsIGNvbnRleHQpOwotICAgIH0KLQogICAgIHZvaWQgdXBkYXRlRnJvbUltYWdlKE5h
dGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlKQogICAgIHsKICAgICAgICAgbV9pbWFnZS51cGRhdGVG
cm9tSW1hZ2UobmF0aXZlSW1hZ2UpOwpAQCAtMTM1LDE5ICsxMzIsMjIgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gbV9pbWFnZS5zaXplKCk7CiAgICAgfQogCi1wcml2YXRlOgotICAgIGV4cGxp
Y2l0IEltYWdlTGF5ZXJUZXh0dXJlVXBkYXRlcihib29sIHVzZU1hcFRleFN1YkltYWdlKQotICAg
ICAgICA6IG1fdGV4U3ViSW1hZ2UodXNlTWFwVGV4U3ViSW1hZ2UpCisgICAgSW50UmVjdCBpbWFn
ZVJlY3QoKSBjb25zdAogICAgIHsKKyAgICAgICAgcmV0dXJuIEludFJlY3QoSW50UG9pbnQ6Onpl
cm8oKSwgbV9pbWFnZS5zaXplKCkpOwogICAgIH0KIAotICAgIEludFJlY3QgaW1hZ2VSZWN0KCkg
Y29uc3QKKyAgICBQbGF0Zm9ybUltYWdlJiBpbWFnZSgpCisgICAgeworICAgICAgICByZXR1cm4g
bV9pbWFnZTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgSW1hZ2VDYW52YXNMYXll
clRleHR1cmVVcGRhdGVyKCkgOiBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyKFBhaW50ZXI6OmNy
ZWF0ZSgpKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwg
bV9pbWFnZS5zaXplKCkpOwogICAgIH0KIAogICAgIFBsYXRmb3JtSW1hZ2UgbV9pbWFnZTsKLSAg
ICBMYXllclRleHR1cmVTdWJJbWFnZSBtX3RleFN1YkltYWdlOwogfTsKIAogUGFzc1JlZlB0cjxJ
bWFnZUxheWVyQ2hyb21pdW0+IEltYWdlTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKENDTGF5ZXJEZWxl
Z2F0ZSogZGVsZWdhdGUpCkBAIC0yMDQsNyArMjA0LDcgQEAgdm9pZCBJbWFnZUxheWVyQ2hyb21p
dW06OnByZXBhcmVUb1VwZGF0ZUlmRGlydHkoKQogICAgIHByZXBhcmVUb1VwZGF0ZSh2aXNpYmxl
TGF5ZXJSZWN0KCkpOwogfQogCi1MYXllclRleHR1cmVVcGRhdGVyKiBJbWFnZUxheWVyQ2hyb21p
dW06OnRleHR1cmVVcGRhdGVyKCkgY29uc3QKK0NhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIqIElt
YWdlTGF5ZXJDaHJvbWl1bTo6dGV4dHVyZVVwZGF0ZXIoKSBjb25zdAogewogICAgIHJldHVybiBt
X3RleHR1cmVVcGRhdGVyLmdldCgpOwogfQpAQCAtMjIzLDcgKzIyMyw3IEBAIGJvb2wgSW1hZ2VM
YXllckNocm9taXVtOjpkcmF3c0NvbnRlbnQoKSBjb25zdAogCiB2b2lkIEltYWdlTGF5ZXJDaHJv
bWl1bTo6Y3JlYXRlVGV4dHVyZVVwZGF0ZXIoY29uc3QgQ0NMYXllclRyZWVIb3N0KiBob3N0KQog
ewotICAgIG1fdGV4dHVyZVVwZGF0ZXIgPSBJbWFnZUxheWVyVGV4dHVyZVVwZGF0ZXI6OmNyZWF0
ZShob3N0LT5sYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkudXNpbmdNYXBTdWIpOworICAgIG1f
dGV4dHVyZVVwZGF0ZXIgPSBJbWFnZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OmNyZWF0ZSgp
OwogfQogCiBib29sIEltYWdlTGF5ZXJDaHJvbWl1bTo6bmVlZHNDb250ZW50c1NjYWxlKCkgY29u
c3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0ltYWdlTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmgKaW5kZXggZjZlYmM4YS4uYTkwMTE2NSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VM
YXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vSW1hZ2VMYXllckNocm9taXVtLmgKQEAgLTQ0LDcgKzQ0LDcgQEAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogY2xhc3MgSW1hZ2U7Ci1jbGFzcyBJbWFnZUxheWVyVGV4dHVyZVVwZGF0ZXI7
CitjbGFzcyBJbWFnZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI7CiAKIC8vIEEgTGF5ZXIgdGhh
dCBjb250YWlucyBvbmx5IGFuIEltYWdlIGVsZW1lbnQuCiBjbGFzcyBJbWFnZUxheWVyQ2hyb21p
dW0gOiBwdWJsaWMgVGlsZWRMYXllckNocm9taXVtIHsKQEAgLTY1LDEzICs2NSwxMyBAQCBwcml2
YXRlOgogICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUZXh0dXJlVXBkYXRlcihjb25zdCBDQ0xheWVy
VHJlZUhvc3QqKTsKICAgICB2b2lkIHNldFRpbGluZ09wdGlvbihUaWxpbmdPcHRpb24pOwogCi0g
ICAgdmlydHVhbCBMYXllclRleHR1cmVVcGRhdGVyKiB0ZXh0dXJlVXBkYXRlcigpIGNvbnN0Owor
ICAgIHZpcnR1YWwgQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlciogdGV4dHVyZVVwZGF0ZXIoKSBj
b25zdDsKICAgICB2aXJ0dWFsIEludFNpemUgY29udGVudEJvdW5kcygpIGNvbnN0OwogCiAgICAg
TmF0aXZlSW1hZ2VQdHIgbV9pbWFnZUZvckN1cnJlbnRGcmFtZTsKICAgICBSZWZQdHI8SW1hZ2U+
IG1fY29udGVudHM7CiAKLSAgICBSZWZQdHI8SW1hZ2VMYXllclRleHR1cmVVcGRhdGVyPiBtX3Rl
eHR1cmVVcGRhdGVyOworICAgIFJlZlB0cjxJbWFnZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI+
IG1fdGV4dHVyZVVwZGF0ZXI7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyLmgK
aW5kZXggYmMwYWZmYi4uY2FmZTQ2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXIuaApA
QCAtMjksNiArMjksNyBAQAogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogCisj
aW5jbHVkZSAiY2MvQ0NUZXh0dXJlVXBkYXRlci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMz
RC5oIgogI2luY2x1ZGUgIk1hbmFnZWRUZXh0dXJlLmgiCiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50
ZWQuaD4KQEAgLTQ5LDIxICs1MCwyMCBAQCBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwgTWFuYWdl
ZFRleHR1cmUqIHRleHR1cmUoKSB7IHJldHVybiAwOyB9CiAgICAgICAgIHZpcnR1YWwgUGFzc093
blB0cjxNYW5hZ2VkVGV4dHVyZT4gcmVwbGFjZVRleHR1cmUoVGV4dHVyZU1hbmFnZXIqKSB7IHJl
dHVybiBQYXNzT3duUHRyPE1hbmFnZWRUZXh0dXJlPigpOyB9CiAKLSAgICAgICAgLy8gcHJlcGFy
ZVJlY3QoKSB3aWxsIG9ubHkgYmUgY2FsbGVkIGlmIHRoaXMgcmV0dXJucyB0cnVlLgotICAgICAg
ICB2aXJ0dWFsIGJvb2wgbmVlZFByZXBhcmVSZWN0KCkgeyByZXR1cm4gZmFsc2U7IH0KKyAgICAg
ICAgLy8gcHJlcGFyZSgpIHdpbGwgb25seSBiZSBjYWxsZWQgaWYgdGhpcyByZXR1cm5zIHRydWUu
CisgICAgICAgIHZpcnR1YWwgYm9vbCBuZWVkUHJlcGFyZSgpIHsgcmV0dXJuIGZhbHNlOyB9CiAg
ICAgICAgIC8vIFRoaXMgcnVucyBzeW5jaHJvbm91c2x5IG9uIHRoZSBpbXBsIHRocmVhZCB3aXRo
IHNhZmUgYWNjZXNzIHRvIG1haW4gdGhyZWFkIHJlc291cmNlcy4KLSAgICAgICAgdmlydHVhbCB2
b2lkIHByZXBhcmVSZWN0KEdyYXBoaWNzQ29udGV4dDNEKiwgVGV4dHVyZUFsbG9jYXRvciosIGNv
bnN0IEludFJlY3QmIC8qIHNvdXJjZVJlY3QgKi8sIGNvbnN0IEludFJlY3QmIC8qIGRlc3RSZWN0
ICovKSB7IH0KLSAgICAgICAgLy8gVGhpcyBydW5zIG9uIHRoZSBtYWluIHRocmVhZCBhZnRlciBj
YWxscyB0byBuZWVkUHJlcGFyZVJlY3QoKSBhbmQgcHJlcGFyZVJlY3QoKSBidXQgYmVmb3JlIHVw
ZGF0ZVJlY3QoKS4KLSAgICAgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHNSZWN0KGNvbnN0
IEludFJlY3QmIC8qIHNvdXJjZVJlY3QgKi8pIHsgfQotICAgICAgICAvLyBUaGlzIHJ1bnMgYXN5
bmNocm9ub3VzbHkgb24gdGhlIGltcGwgdGhyZWFkLiBBY2Nlc3MgdG8gbWFpbiB0aHJlYWQgcmVz
b3VyY2VzIGlzIHVuc2FmZS4KLSAgICAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVJlY3QoR3JhcGhp
Y3NDb250ZXh0M0QqLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBk
ZXN0UmVjdCkgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZShHcmFwaGljc0NvbnRl
eHQzRCosIFRleHR1cmVBbGxvY2F0b3IqKSB7IH0KKworICAgICAgICB2aXJ0dWFsIFBhc3NPd25Q
dHI8Q0NUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZVVwZGF0ZT4gY3JlYXRlQ0NUZXh0dXJlVXBkYXRl
KCkgeyByZXR1cm4gUGFzc093blB0cjxDQ1RleHR1cmVVcGRhdGVyOjpUZXh0dXJlVXBkYXRlPigp
OyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCBwdXNoUHJvcGVydGllc1RvKENDVGV4dHVyZVVwZGF0
ZXI6OlRleHR1cmVVcGRhdGUqKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiAgICAgfTsKIAog
ICAgIGNsYXNzIEhhbmRsZXIgewogICAgIHB1YmxpYzoKICAgICAgICAgdmlydHVhbCB+SGFuZGxl
cigpIHsgfQogCi0gICAgICAgIHZpcnR1YWwgdm9pZCBoYW5kbGUoTGF5ZXJUZXh0dXJlVXBkYXRl
cjo6VGV4dHVyZSosIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRl
c3RSZWN0KSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBoYW5kbGUoTGF5ZXJUZXh0dXJlVXBk
YXRlcjo6VGV4dHVyZSopID0gMDsKICAgICB9OwogCiAgICAgdmlydHVhbCB+TGF5ZXJUZXh0dXJl
VXBkYXRlcigpIHsgfQpAQCAtNzgsNyArNzgsNiBAQCBwdWJsaWM6CiAgICAgICAgIFNhbXBsZWRU
ZXhlbEZvcm1hdEJHUkEsCiAgICAgICAgIFNhbXBsZWRUZXhlbEZvcm1hdEludmFsaWQsCiAgICAg
fTsKLSAgICB2aXJ0dWFsIFBhc3NPd25QdHI8VGV4dHVyZT4gY3JlYXRlVGV4dHVyZShUZXh0dXJl
TWFuYWdlciopID0gMDsKICAgICAvLyBSZXR1cm5zIHRoZSBvcmllbnRhdGlvbiBvZiB0aGUgdGV4
dHVyZSB1cGxvYWRlZCBieSB0aGlzIGludGVyZmFjZS4KICAgICB2aXJ0dWFsIE9yaWVudGF0aW9u
IG9yaWVudGF0aW9uKCkgPSAwOwogICAgIC8vIFJldHVybnMgdGhlIGZvcm1hdCBvZiB0aGUgdGV4
ZWwgdXBsb2FkZWQgYnkgdGhpcyBpbnRlcmZhY2UuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVt
LmNwcAppbmRleCA3ZjI0ODQ3Li41NGMxYjJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1
bS5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgIlRpbGVkTGF5ZXJDaHJvbWl1bS5o
IgogCisjaW5jbHVkZSAiQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5oIgogI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCiAj
aW5jbHVkZSAiTWFuYWdlZFRleHR1cmUuaCIKQEAgLTUyLDEzICs1MywxMyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiBjbGFzcyBVcGRhdGFibGVUaWxlIDogcHVibGljIENDTGF5ZXJUaWxpbmdEYXRh
OjpUaWxlIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShVcGRhdGFibGVUaWxlKTsKIHB1Ymxp
YzoKLSAgICBleHBsaWNpdCBVcGRhdGFibGVUaWxlKFBhc3NPd25QdHI8TGF5ZXJUZXh0dXJlVXBk
YXRlcjo6VGV4dHVyZT4gdGV4dHVyZSkKKyAgICBleHBsaWNpdCBVcGRhdGFibGVUaWxlKFBhc3NP
d25QdHI8Q2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZT4gdGV4dHVyZSkKICAgICAg
ICAgOiBtX2ZpcnN0VXBkYXRlKHRydWUpCiAgICAgICAgICwgbV90ZXh0dXJlKHRleHR1cmUpCiAg
ICAgewogICAgIH0KIAotICAgIExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmUqIHRleHR1cmUo
KSB7IHJldHVybiBtX3RleHR1cmUuZ2V0KCk7IH0KKyAgICBDYW52YXNMYXllclRleHR1cmVVcGRh
dGVyOjpUZXh0dXJlKiB0ZXh0dXJlKCkgeyByZXR1cm4gbV90ZXh0dXJlLmdldCgpOyB9CiAgICAg
TWFuYWdlZFRleHR1cmUqIG1hbmFnZWRUZXh0dXJlKCkgeyByZXR1cm4gbV90ZXh0dXJlLT50ZXh0
dXJlKCk7IH0KIAogICAgIGJvb2wgaXNEaXJ0eSgpIGNvbnN0IHsgcmV0dXJuICFtX2RpcnR5TGF5
ZXJSZWN0LmlzRW1wdHkoKTsgfQpAQCAtNjYsMTIgKzY3LDEwIEBAIHB1YmxpYzoKIAogICAgIC8v
IExheWVyLXNwYWNlIGRpcnR5IHJlY3RhbmdsZSB0aGF0IG5lZWRzIHRvIGJlIHJlcGFpbnRlZC4K
ICAgICBJbnRSZWN0IG1fZGlydHlMYXllclJlY3Q7Ci0gICAgLy8gQ29udGVudC1zcGFjZSByZWN0
YW5nbGUgdGhhdCBuZWVkcyB0byBiZSB1cGRhdGVkLgotICAgIEludFJlY3QgbV91cGRhdGVSZWN0
OwogICAgIC8vIFRydWUgdW50aWwgZmlyc3QgdXBkYXRlIGhhcyBoYXBwZW5kZWQuCiAgICAgYm9v
bCBtX2ZpcnN0VXBkYXRlOwogcHJpdmF0ZToKLSAgICBPd25QdHI8TGF5ZXJUZXh0dXJlVXBkYXRl
cjo6VGV4dHVyZT4gbV90ZXh0dXJlOworICAgIE93blB0cjxDYW52YXNMYXllclRleHR1cmVVcGRh
dGVyOjpUZXh0dXJlPiBtX3RleHR1cmU7CiB9OwogCiBUaWxlZExheWVyQ2hyb21pdW06OlRpbGVk
TGF5ZXJDaHJvbWl1bShDQ0xheWVyRGVsZWdhdGUqIGRlbGVnYXRlKQpAQCAtMTg2LDM2ICsxODUs
MTAgQEAgdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OmZvckVhY2hDb21wb3NpdG9yUmVzb3VyY2Uo
TGF5ZXJUZXh0dXJlVXBkYXRlcjo6SGFuZGxlciYKICAgICBmb3IgKENDTGF5ZXJUaWxpbmdEYXRh
OjpUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0gbV90aWxlci0+dGlsZXMoKS5iZWdpbigp
OyBpdGVyICE9IG1fdGlsZXItPnRpbGVzKCkuZW5kKCk7ICsraXRlcikgewogICAgICAgICBVcGRh
dGFibGVUaWxlKiB0aWxlID0gc3RhdGljX2Nhc3Q8VXBkYXRhYmxlVGlsZSo+KGl0ZXItPnNlY29u
ZC5nZXQoKSk7CiAKLSAgICAgICAgSW50UmVjdCBzb3VyY2VSZWN0OwotICAgICAgICBJbnRSZWN0
IGRlc3RSZWN0OwotCi0gICAgICAgIC8vIFBhaW50aW5nIGNvdWxkIGNhdXNlIGNvbXBvc2l0aW5n
IHRvIGdldCB0dXJuZWQgb2ZmLCB3aGljaCBtYXkgY2F1c2UgdGhlIHRpbGVyIHRvIGJlY29tZSBp
bnZhbGlkYXRlZCBtaWQtdXBkYXRlLgotICAgICAgICBpZiAoIW1fc2tpcHNEcmF3ICYmICFtX3Jl
cXVlc3RlZFVwZGF0ZVJlY3QuaXNFbXB0eSgpICYmICFtX3BhaW50UmVjdC5pc0VtcHR5KCkpCi0g
ICAgICAgICAgICBzb3VyY2VSZWN0ID0gdGlsZS0+bV91cGRhdGVSZWN0OwotCi0gICAgICAgIGlm
ICghc291cmNlUmVjdC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGNvbnN0IEludFBvaW50IGFu
Y2hvciA9IG1fdGlsZXItPnRpbGVDb250ZW50UmVjdCh0aWxlKS5sb2NhdGlvbigpOwotCi0gICAg
ICAgICAgICAvLyBDYWxjdWxhdGUgdGlsZS1zcGFjZSByZWN0YW5nbGUgdG8gdXBsb2FkIGludG8u
Ci0gICAgICAgICAgICBkZXN0UmVjdCA9IEludFJlY3QoSW50UG9pbnQoc291cmNlUmVjdC54KCkg
LSBhbmNob3IueCgpLCBzb3VyY2VSZWN0LnkoKSAtIGFuY2hvci55KCkpLCBzb3VyY2VSZWN0LnNp
emUoKSk7Ci0gICAgICAgICAgICBpZiAoZGVzdFJlY3QueCgpIDwgMCkKLSAgICAgICAgICAgICAg
ICBDUkFTSCgpOwotICAgICAgICAgICAgaWYgKGRlc3RSZWN0LnkoKSA8IDApCi0gICAgICAgICAg
ICAgICAgQ1JBU0goKTsKLQotICAgICAgICAgICAgLy8gT2Zmc2V0IGZyb20gcGFpbnQgcmVjdGFu
Z2xlIHRvIHRoaXMgdGlsZSdzIGRpcnR5IHJlY3RhbmdsZS4KLSAgICAgICAgICAgIEludFBvaW50
IHBhaW50T2Zmc2V0KHNvdXJjZVJlY3QueCgpIC0gbV9wYWludFJlY3QueCgpLCBzb3VyY2VSZWN0
LnkoKSAtIG1fcGFpbnRSZWN0LnkoKSk7Ci0gICAgICAgICAgICBpZiAocGFpbnRPZmZzZXQueCgp
IDwgMCkKLSAgICAgICAgICAgICAgICBDUkFTSCgpOwotICAgICAgICAgICAgaWYgKHBhaW50T2Zm
c2V0LnkoKSA8IDApCi0gICAgICAgICAgICAgICAgQ1JBU0goKTsKLSAgICAgICAgICAgIGlmIChw
YWludE9mZnNldC54KCkgKyBkZXN0UmVjdC53aWR0aCgpID4gbV9wYWludFJlY3Qud2lkdGgoKSkK
LSAgICAgICAgICAgICAgICBDUkFTSCgpOwotICAgICAgICAgICAgaWYgKHBhaW50T2Zmc2V0Lnko
KSArIGRlc3RSZWN0LmhlaWdodCgpID4gbV9wYWludFJlY3QuaGVpZ2h0KCkpCi0gICAgICAgICAg
ICAgICAgQ1JBU0goKTsKLSAgICAgICAgfQorICAgICAgICBpZiAodGlsZS0+dGV4dHVyZSgpLT51
cGRhdGVSZWN0KCkuaXNFbXB0eSgpKQorICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAg
aGFuZGxlci5oYW5kbGUodGlsZS0+dGV4dHVyZSgpLCBzb3VyY2VSZWN0LCBkZXN0UmVjdCk7Cisg
ICAgICAgIGhhbmRsZXIuaGFuZGxlKHRpbGUtPnRleHR1cmUoKSk7CiAgICAgfQogfQogCkBAIC0z
NDQsMTAgKzMxNywxMCBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6cHJlcGFyZVRvVXBkYXRl
KGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KQogCiAgICAgbV9za2lwc0RyYXcgPSBmYWxzZTsK
IAotICAgIC8vIFJlc2V0IG1fdXBkYXRlUmVjdCBmb3IgYWxsIHRpbGVzLgorICAgIC8vIFJlc2V0
IHVwZGF0ZVJlY3QgZm9yIGFsbCB0aWxlcy4KICAgICBmb3IgKENDTGF5ZXJUaWxpbmdEYXRhOjpU
aWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0gbV90aWxlci0+dGlsZXMoKS5iZWdpbigpOyBp
dGVyICE9IG1fdGlsZXItPnRpbGVzKCkuZW5kKCk7ICsraXRlcikgewogICAgICAgICBVcGRhdGFi
bGVUaWxlKiB0aWxlID0gc3RhdGljX2Nhc3Q8VXBkYXRhYmxlVGlsZSo+KGl0ZXItPnNlY29uZC5n
ZXQoKSk7Ci0gICAgICAgIHRpbGUtPm1fdXBkYXRlUmVjdCA9IEludFJlY3QoKTsKKyAgICAgICAg
dGlsZS0+dGV4dHVyZSgpLT5zZXRVcGRhdGVSZWN0KEludFJlY3QoKSk7CiAgICAgfQogCiAgICAg
aWYgKGNvbnRlbnRSZWN0LmlzRW1wdHkoKSkgewpAQCAtNDE2LDMxICszODksNTIgQEAgdm9pZCBU
aWxlZExheWVyQ2hyb21pdW06OnByZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50
UmVjdCkKICAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSB0aGF0IHNvdXJjZVJlY3QgZG9lc24ndCBl
eHRlbmQgb3V0c2lkZSBvZiBpdC4KICAgICAgICAgICAgIHNvdXJjZVJlY3QuaW50ZXJzZWN0KG1f
cGFpbnRSZWN0KTsKIAotICAgICAgICAgICAgLy8gdXBkYXRlQ29tcG9zaXRvclJlc291cmNlcygp
IHVzZXMgbV91cGRhdGVSZWN0IHRvIGRldGVybWluZQotICAgICAgICAgICAgLy8gdGhlIHRpbGVz
IHRvIHVwZGF0ZSBzbyB3ZSBjYW4gY2xlYXIgdGhlIGRpcnR5IHJlY3RhbmdsZSBoZXJlLgotICAg
ICAgICAgICAgdGlsZS0+Y2xlYXJEaXJ0eSgpOworICAgICAgICAgICAgY29uc3QgSW50UG9pbnQg
YW5jaG9yID0gbV90aWxlci0+dGlsZUNvbnRlbnRSZWN0KHRpbGUpLmxvY2F0aW9uKCk7CisgICAg
ICAgICAgICAvLyBDYWxjdWxhdGUgdGlsZS1zcGFjZSByZWN0YW5nbGUgdG8gdXBsb2FkIGludG8u
CisgICAgICAgICAgICBJbnRSZWN0IGRlc3RSZWN0ID0gSW50UmVjdChJbnRQb2ludChzb3VyY2VS
ZWN0LngoKSAtIGFuY2hvci54KCksIHNvdXJjZVJlY3QueSgpIC0gYW5jaG9yLnkoKSksIHNvdXJj
ZVJlY3Quc2l6ZSgpKTsKKyAgICAgICAgICAgIGlmIChkZXN0UmVjdC54KCkgPCAwKQorICAgICAg
ICAgICAgICAgIENSQVNIKCk7CisgICAgICAgICAgICBpZiAoZGVzdFJlY3QueSgpIDwgMCkKKyAg
ICAgICAgICAgICAgICBDUkFTSCgpOwogCi0gICAgICAgICAgICB0aWxlLT5tX3VwZGF0ZVJlY3Qg
PSBzb3VyY2VSZWN0OworICAgICAgICAgICAgLy8gT2Zmc2V0IGZyb20gcGFpbnQgcmVjdGFuZ2xl
IHRvIHRoaXMgdGlsZSdzIGRpcnR5IHJlY3RhbmdsZS4KKyAgICAgICAgICAgIEludFBvaW50IHBh
aW50T2Zmc2V0KHNvdXJjZVJlY3QueCgpIC0gbV9wYWludFJlY3QueCgpLCBzb3VyY2VSZWN0Lnko
KSAtIG1fcGFpbnRSZWN0LnkoKSk7CisgICAgICAgICAgICBpZiAocGFpbnRPZmZzZXQueCgpIDwg
MCkKKyAgICAgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAgaWYgKHBhaW50T2Zmc2V0
LnkoKSA8IDApCisgICAgICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAgIGlmIChwYWlu
dE9mZnNldC54KCkgKyBkZXN0UmVjdC53aWR0aCgpID4gbV9wYWludFJlY3Qud2lkdGgoKSkKKyAg
ICAgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAgaWYgKHBhaW50T2Zmc2V0LnkoKSAr
IGRlc3RSZWN0LmhlaWdodCgpID4gbV9wYWludFJlY3QuaGVpZ2h0KCkpCisgICAgICAgICAgICAg
ICAgQ1JBU0goKTsKKworICAgICAgICAgICAgdGlsZS0+dGV4dHVyZSgpLT5zZXRVcGRhdGVSZWN0
KGRlc3RSZWN0KTsKKyAgICAgICAgICAgIHRpbGUtPnRleHR1cmUoKS0+c2V0Q29udGVudE9mZnNl
dChhbmNob3IpOworCisgICAgICAgICAgICB0aWxlLT5jbGVhckRpcnR5KCk7CiAgICAgICAgIH0K
ICAgICB9CiB9CiAKIHZvaWQgVGlsZWRMYXllckNocm9taXVtOjpwYWludENvbnRlbnRzKGNvbnN0
IEludFJlY3QmIGNvbnRlbnRSZWN0KQogewotICAgIGlmIChtX3NraXBzRHJhdyB8fCBtX3JlcXVl
c3RlZFVwZGF0ZVJlY3QuaXNFbXB0eSgpIHx8ICFtX3RpbGVyLT5udW1UaWxlcygpIHx8IG1fcGFp
bnRSZWN0LmlzRW1wdHkoKSkKKyAgICBpZiAoIW1fdGlsZXIpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIC8vIFJlc2VydmUgdGlsZXMgYXMgbmVlZGVkLgogICAgIGZvciAoQ0NMYXllclRpbGluZ0Rh
dGE6OlRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtX3RpbGVyLT50aWxlcygpLmJlZ2lu
KCk7IGl0ZXIgIT0gbV90aWxlci0+dGlsZXMoKS5lbmQoKTsgKytpdGVyKSB7CiAgICAgICAgIFVw
ZGF0YWJsZVRpbGUqIHRpbGUgPSBzdGF0aWNfY2FzdDxVcGRhdGFibGVUaWxlKj4oaXRlci0+c2Vj
b25kLmdldCgpKTsKIAotICAgICAgICBpZiAodGlsZS0+bV91cGRhdGVSZWN0LmlzRW1wdHkoKSkK
KyAgICAgICAgaWYgKHRpbGUtPnRleHR1cmUoKS0+dXBkYXRlUmVjdCgpLmlzRW1wdHkoKSkKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIGlmICghdGlsZS0+bWFuYWdlZFRleHR1cmUo
KS0+cmVzZXJ2ZShtX3RpbGVyLT50aWxlU2l6ZSgpLCBtX3RleHR1cmVGb3JtYXQpKQotICAgICAg
ICAgICAgdGlsZS0+bV91cGRhdGVSZWN0ID0gSW50UmVjdCgpOworICAgICAgICAgICAgdGlsZS0+
dGV4dHVyZSgpLT5zZXRVcGRhdGVSZWN0KEludFJlY3QoKSk7CiAgICAgfQogCisgICAgaWYgKG1f
c2tpcHNEcmF3IHx8IG1fcmVxdWVzdGVkVXBkYXRlUmVjdC5pc0VtcHR5KCkgfHwgIW1fdGlsZXIt
Pm51bVRpbGVzKCkgfHwgbV9wYWludFJlY3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisK
ICAgICAvLyBDYWxsaW5nIHBhaW50Q29udGVudHMoKSBjYWxscyBpbnRvIFdlYktpdCB0byBwYWlu
dCwgd2hpY2ggbWF5IGhhdmUgdGhlIHNpZGUKICAgICAvLyBlZmZlY3Qgb2YgZGlzYWJsaW5nIGNv
bXBvc2l0aW5nLCB3aGljaCBjYXVzZXMgb3VyIHJlZmVyZW5jZSB0byB0aGUgdGV4dHVyZSB1cGRh
dGVyIHRvIGJlIGRlbGV0ZWQuCiAgICAgLy8gSG93ZXZlciwgd2UgY2FuJ3QgZnJlZSB0aGUgbWVt
b3J5IGJhY2tpbmcgdGhlIEdyYXBoaWNzQ29udGV4dCB1bnRpbCB0aGUgcGFpbnQgZmluaXNoZXMs
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9U
aWxlZExheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5oCmluZGV4IGU0NzgxOGYuLjhlZTYzNTkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5
ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5oCkBAIC0zNCw3ICszNCw3IEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotY2xhc3MgTGF5ZXJUZXh0dXJlVXBkYXRlcjsKK2NsYXNzIENhbnZhc0xheWVy
VGV4dHVyZVVwZGF0ZXI7CiBjbGFzcyBVcGRhdGFibGVUaWxlOwogCiBjbGFzcyBUaWxlZExheWVy
Q2hyb21pdW0gOiBwdWJsaWMgTGF5ZXJDaHJvbWl1bSB7CkBAIC03MSw3ICs3MSw3IEBAIHByb3Rl
Y3RlZDoKICAgICB2b2lkIHNldFRleHR1cmVGb3JtYXQoR0MzRGVudW0gdGV4dHVyZUZvcm1hdCkg
eyBtX3RleHR1cmVGb3JtYXQgPSB0ZXh0dXJlRm9ybWF0OyB9CiAKICAgICB2aXJ0dWFsIHZvaWQg
Y3JlYXRlVGV4dHVyZVVwZGF0ZXIoY29uc3QgQ0NMYXllclRyZWVIb3N0KikgPSAwOwotICAgIHZp
cnR1YWwgTGF5ZXJUZXh0dXJlVXBkYXRlciogdGV4dHVyZVVwZGF0ZXIoKSBjb25zdCA9IDA7Cisg
ICAgdmlydHVhbCBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyKiB0ZXh0dXJlVXBkYXRlcigpIGNv
bnN0ID0gMDsKIAogICAgIC8vIFNldCBpbnZhbGlkYXRpb25zIHRvIGJlIHBvdGVudGlhbGx5IHJl
cGFpbnRlZCBkdXJpbmcgdXBkYXRlKCkuCiAgICAgdm9pZCBpbnZhbGlkYXRlUmVjdChjb25zdCBJ
bnRSZWN0JiBjb250ZW50UmVjdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmNwcAppbmRl
eCA0YjRjNDY5Li45NTk0MzQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHAKQEAg
LTYzLDQ1ICs2Myw1MCBAQCBQYXNzT3duUHRyPE1hbmFnZWRUZXh0dXJlPiBWaWRlb0xheWVyQ2hy
b21pdW06OlVwZGF0ZXJUZXh0dXJlOjpyZXBsYWNlVGV4dHVyZShUZQogICAgIHJldHVybiBvbGQu
cmVsZWFzZSgpOwogfQogCi12b2lkIFZpZGVvTGF5ZXJDaHJvbWl1bTo6VXBkYXRlclRleHR1cmU6
OnByZXBhcmVSZWN0KEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBUZXh0dXJlQWxsb2NhdG9y
KiBhbGxvY2F0b3IsIGNvbnN0IEludFJlY3QmIC8qIHNvdXJjZVJlY3QgKi8sIGNvbnN0IEludFJl
Y3QmIC8qIGRlc3RSZWN0ICovKQorYm9vbCBWaWRlb0xheWVyQ2hyb21pdW06OlVwZGF0ZXJUZXh0
dXJlOjpuZWVkUHJlcGFyZSgpCit7CisgICAgcmV0dXJuICFtX3RleHR1cmUtPnNpemUoKS5pc0Vt
cHR5KCk7Cit9CisKK3ZvaWQgVmlkZW9MYXllckNocm9taXVtOjpVcGRhdGVyVGV4dHVyZTo6cHJl
cGFyZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgVGV4dHVyZUFsbG9jYXRvciogYWxsb2Nh
dG9yKQogewogICAgIEludFNpemUgZGltZW5zaW9ucyA9IG1fdGV4dHVyZS0+c2l6ZSgpOworICAg
IEFTU0VSVCghZGltZW5zaW9ucy5pc0VtcHR5KCkpOwogCiAgICAgRXh0ZW5zaW9uczNEQ2hyb21p
dW0qIGV4dGVuc2lvbnMgPSBzdGF0aWNfY2FzdDxFeHRlbnNpb25zM0RDaHJvbWl1bSo+KGNvbnRl
eHQtPmdldEV4dGVuc2lvbnMoKSk7CiAgICAgbV9tYXBwZWRCdWZmZXIgPSBzdGF0aWNfY2FzdDx1
aW50OF90Kj4oZXh0ZW5zaW9ucy0+bWFwVGV4U3ViSW1hZ2UyRENIUk9NSVVNKEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFXzJELCAwLCAwLCAwLCBkaW1lbnNpb25zLndpZHRoKCksIGRpbWVuc2lv
bnMuaGVpZ2h0KCksIG1fdGV4dHVyZS0+Zm9ybWF0KCksIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJ
R05FRF9CWVRFLCBFeHRlbnNpb25zM0RDaHJvbWl1bTo6V1JJVEVfT05MWSkpOwogCi0gICAgaWYg
KCFtX21hcHBlZEJ1ZmZlcikgewotICAgICAgICBzaXplX3QgYnVmZmVyU2l6ZSA9IFRleHR1cmVN
YW5hZ2VyOjptZW1vcnlVc2VCeXRlcyhkaW1lbnNpb25zLCBtX3RleHR1cmUtPmZvcm1hdCgpKTsK
LSAgICAgICAgbV9idWZmZXIgPSBhZG9wdEFycmF5UHRyKG5ldyB1aW50OF90W2J1ZmZlclNpemVd
KTsKLSAgICB9Ci0KICAgICBtX3RleHR1cmUtPmFsbG9jYXRlVGV4dHVyZShjb250ZXh0LCBhbGxv
Y2F0b3IpOwogfQogCi12b2lkIFZpZGVvTGF5ZXJDaHJvbWl1bTo6VXBkYXRlclRleHR1cmU6OnBh
aW50Q29udGVudHNSZWN0KGNvbnN0IEludFJlY3QmIC8qIHNvdXJjZVJlY3QgKi8pCitQYXNzT3du
UHRyPENDVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmVVcGRhdGU+IFZpZGVvTGF5ZXJDaHJvbWl1bTo6
VXBkYXRlclRleHR1cmU6OmNyZWF0ZUNDVGV4dHVyZVVwZGF0ZSgpCiB7Ci0gICAgc2l6ZV90IGJ1
ZmZlclNpemUgPSBUZXh0dXJlTWFuYWdlcjo6bWVtb3J5VXNlQnl0ZXMobV90ZXh0dXJlLT5zaXpl
KCksIG1fdGV4dHVyZS0+Zm9ybWF0KCkpOwotCi0gICAgQVNTRVJUKG1fZGF0YSk7Ci0gICAgaWYg
KG1fbWFwcGVkQnVmZmVyKQotICAgICAgICBtZW1jcHkobV9tYXBwZWRCdWZmZXIsIG1fZGF0YSwg
YnVmZmVyU2l6ZSk7Ci0gICAgZWxzZQotICAgICAgICBtZW1jcHkobV9idWZmZXIuZ2V0KCksIG1f
ZGF0YSwgYnVmZmVyU2l6ZSk7CisgICAgcmV0dXJuIENDVGV4dHVyZVVwZGF0ZXI6OlN1YkltYWdl
VGV4dHVyZVVwZGF0ZTo6Y3JlYXRlKCk7CiB9CiAKLXZvaWQgVmlkZW9MYXllckNocm9taXVtOjpV
cGRhdGVyVGV4dHVyZTo6dXBkYXRlUmVjdChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgY29u
c3QgSW50UmVjdCYgLyogc291cmNlUmVjdCAqLywgY29uc3QgSW50UmVjdCYgLyogZGVzdFJlY3Qg
Ki8pCit2b2lkIFZpZGVvTGF5ZXJDaHJvbWl1bTo6VXBkYXRlclRleHR1cmU6OnB1c2hQcm9wZXJ0
aWVzVG8oQ0NUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZVVwZGF0ZSogdXBkYXRlKQogewotICAgIEFT
U0VSVChtX3RleHR1cmUtPnRleHR1cmVJZCgpKTsKLSAgICBjb250ZXh0LT5iaW5kVGV4dHVyZShH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV90ZXh0dXJlLT50ZXh0dXJlSWQoKSk7Cisg
ICAgc2l6ZV90IGJ1ZmZlclNpemUgPSBUZXh0dXJlTWFuYWdlcjo6bWVtb3J5VXNlQnl0ZXMobV90
ZXh0dXJlLT5zaXplKCksIG1fdGV4dHVyZS0+Zm9ybWF0KCkpOworICAgIE93bkFycmF5UHRyPHVp
bnQ4X3Q+IGJ1ZmZlcjsKKworICAgIEFTU0VSVChtX2RhdGEpOwogICAgIGlmIChtX21hcHBlZEJ1
ZmZlcikgewotICAgICAgICBFeHRlbnNpb25zM0RDaHJvbWl1bSogZXh0ZW5zaW9ucyA9IHN0YXRp
Y19jYXN0PEV4dGVuc2lvbnMzRENocm9taXVtKj4oY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpKTsK
LSAgICAgICAgR0xDKGNvbnRleHQsIGV4dGVuc2lvbnMtPnVubWFwVGV4U3ViSW1hZ2UyRENIUk9N
SVVNKG1fbWFwcGVkQnVmZmVyKSk7Ci0gICAgICAgIG1fbWFwcGVkQnVmZmVyID0gMDsKKyAgICAg
ICAgbWVtY3B5KG1fbWFwcGVkQnVmZmVyLCBtX2RhdGEsIGJ1ZmZlclNpemUpOwogICAgIH0gZWxz
ZSB7Ci0gICAgICAgIEludFNpemUgZGltZW5zaW9ucyA9IG1fdGV4dHVyZS0+c2l6ZSgpOwotICAg
ICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dGV4U3ViSW1hZ2UyRChHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV8yRCwgMCwgMCwgMCwgZGltZW5zaW9ucy53aWR0aCgpLCBkaW1lbnNpb25zLmhl
aWdodCgpLCBtX3RleHR1cmUtPmZvcm1hdCgpLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURf
QllURSwgbV9idWZmZXIuZ2V0KCkpKTsKLSAgICAgICAgbV9idWZmZXIuY2xlYXIoKTsKKyAgICAg
ICAgc2l6ZV90IGJ1ZmZlclNpemUgPSBUZXh0dXJlTWFuYWdlcjo6bWVtb3J5VXNlQnl0ZXMobV90
ZXh0dXJlLT5zaXplKCksIG1fdGV4dHVyZS0+Zm9ybWF0KCkpOworICAgICAgICBidWZmZXIgPSBh
ZG9wdEFycmF5UHRyKG5ldyB1aW50OF90W2J1ZmZlclNpemVdKTsKKyAgICAgICAgbWVtY3B5KGJ1
ZmZlci5nZXQoKSwgbV9kYXRhLCBidWZmZXJTaXplKTsKICAgICB9CisKKyAgICBDQ1RleHR1cmVV
cGRhdGVyOjpTdWJJbWFnZVRleHR1cmVVcGRhdGUqIHN1YkltYWdlVXBkYXRlID0gc3RhdGljX2Nh
c3Q8Q0NUZXh0dXJlVXBkYXRlcjo6U3ViSW1hZ2VUZXh0dXJlVXBkYXRlKj4odXBkYXRlKTsKKwor
ICAgIHN1YkltYWdlVXBkYXRlLT5zZXRGb3JtYXQobV90ZXh0dXJlLT5mb3JtYXQoKSk7CisgICAg
c3ViSW1hZ2VVcGRhdGUtPnNldFRleHR1cmVJZChtX3RleHR1cmUtPnRleHR1cmVJZCgpKTsKKyAg
ICBJbnRSZWN0IHJlY3QgPSBJbnRSZWN0KEludFBvaW50KCksIG1fdGV4dHVyZS0+c2l6ZSgpKTsK
KyAgICBzdWJJbWFnZVVwZGF0ZS0+c2V0UmVjdChyZWN0KTsKKyAgICBzdWJJbWFnZVVwZGF0ZS0+
c2V0TWFwcGVkQnVmZmVyKG1fbWFwcGVkQnVmZmVyKTsKKyAgICBzdWJJbWFnZVVwZGF0ZS0+c2V0
UGl4ZWxEYXRhKGJ1ZmZlci5yZWxlYXNlKCkpOworICAgIG1fbWFwcGVkQnVmZmVyID0gMDsKIH0K
IAogUGFzc1JlZlB0cjxWaWRlb0xheWVyQ2hyb21pdW0+IFZpZGVvTGF5ZXJDaHJvbWl1bTo6Y3Jl
YXRlKENDTGF5ZXJEZWxlZ2F0ZSogZGVsZWdhdGUsCkBAIC0yMjIsMTAgKzIyNyw4IEBAIHZvaWQg
VmlkZW9MYXllckNocm9taXVtOjpmb3JFYWNoQ29tcG9zaXRvclJlc291cmNlKExheWVyVGV4dHVy
ZVVwZGF0ZXI6OkhhbmRsZXImCiAgICAgaWYgKCFtX2ZyYW1lKQogICAgICAgICByZXR1cm47CiAK
LSAgICBmb3IgKHVuc2lnbmVkIHBsYW5lID0gMDsgcGxhbmUgPCBtX3BsYW5lczsgcGxhbmUrKykg
ewotICAgICAgICBJbnRSZWN0IHJlY3QoSW50UG9pbnQoKSwgbV90ZXh0dXJlc1twbGFuZV0tPnZp
c2libGVTaXplKCkpOwotICAgICAgICBoYW5kbGVyLmhhbmRsZShtX3RleHR1cmVzW3BsYW5lXS5n
ZXQoKSwgcmVjdCwgcmVjdCk7Ci0gICAgfQorICAgIGZvciAodW5zaWduZWQgcGxhbmUgPSAwOyBw
bGFuZSA8IG1fcGxhbmVzOyBwbGFuZSsrKQorICAgICAgICBoYW5kbGVyLmhhbmRsZShtX3RleHR1
cmVzW3BsYW5lXS5nZXQoKSk7CiB9CiAKIHZvaWQgVmlkZW9MYXllckNocm9taXVtOjpwdXNoUHJv
cGVydGllc1RvKENDTGF5ZXJJbXBsKiBsYXllcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmgK
aW5kZXggODA4MDQ5ZS4uMmVmYmIzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmgKQEAg
LTU1LDEwICs1NSwxMyBAQCBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwgTWFuYWdlZFRleHR1cmUq
IHRleHR1cmUoKSB7IHJldHVybiBtX3RleHR1cmUuZ2V0KCk7IH0KICAgICAgICAgdmlydHVhbCBQ
YXNzT3duUHRyPE1hbmFnZWRUZXh0dXJlPiByZXBsYWNlVGV4dHVyZShUZXh0dXJlTWFuYWdlciop
OwogCi0gICAgICAgIHZpcnR1YWwgYm9vbCBuZWVkUHJlcGFyZVJlY3QoKSB7IHJldHVybiB0cnVl
OyB9Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlUmVjdChHcmFwaGljc0NvbnRleHQzRCos
IFRleHR1cmVBbGxvY2F0b3IqLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRS
ZWN0JiBkZXN0UmVjdCk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzUmVjdChj
b25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0KTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVJl
Y3QoR3JhcGhpY3NDb250ZXh0M0QqLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJ
bnRSZWN0JiBkZXN0UmVjdCk7CisgICAgICAgIHZpcnR1YWwgYm9vbCBuZWVkUHJlcGFyZSgpOwor
ICAgICAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZShHcmFwaGljc0NvbnRleHQzRCosIFRleHR1cmVB
bGxvY2F0b3IqKTsKKworICAgICAgICB2aXJ0dWFsIEludFJlY3QgdXBkYXRlUmVjdCgpIGNvbnN0
IHsgcmV0dXJuIEludFJlY3QoSW50UG9pbnQoKSwgbV90ZXh0dXJlLT5zaXplKCkpOyB9CisKKyAg
ICAgICAgdmlydHVhbCBQYXNzT3duUHRyPENDVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmVVcGRhdGU+
IGNyZWF0ZUNDVGV4dHVyZVVwZGF0ZSgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcHVzaFByb3Bl
cnRpZXNUbyhDQ1RleHR1cmVVcGRhdGVyOjpUZXh0dXJlVXBkYXRlKik7CiAKICAgICAgICAgdm9p
ZCBzZXRWaXNpYmxlU2l6ZShJbnRTaXplJiBzaXplKSB7IG1fdmlzaWJsZVNpemUgPSBzaXplOyB9
CiAgICAgICAgIEludFNpemUmIHZpc2libGVTaXplKCkgeyByZXR1cm4gbV92aXNpYmxlU2l6ZTsg
fQpAQCAtNzIsNyArNzUsNiBAQCBwdWJsaWM6CiAgICAgICAgIE93blB0cjxNYW5hZ2VkVGV4dHVy
ZT4gbV90ZXh0dXJlOwogICAgICAgICBJbnRTaXplIG1fdmlzaWJsZVNpemU7CiAgICAgICAgIHVp
bnQ4X3QqIG1fbWFwcGVkQnVmZmVyOwotICAgICAgICBPd25BcnJheVB0cjx1aW50OF90PiBtX2J1
ZmZlcjsKICAgICAgICAgY29uc3Qgdm9pZCogbV9kYXRhOwogICAgIH07CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJv
bWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJH
TExheWVyQ2hyb21pdW0uY3BwCmluZGV4IGYzOWQzZGMuLjA4OGE1YWEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1
bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2Vi
R0xMYXllckNocm9taXVtLmNwcApAQCAtNTIsNyArNTIsMTIgQEAgV2ViR0xMYXllckNocm9taXVt
OjpVcGRhdGVyVGV4dHVyZTo6flVwZGF0ZXJUZXh0dXJlKCkKIHsKIH0KIAotdm9pZCBXZWJHTExh
eWVyQ2hyb21pdW06OlVwZGF0ZXJUZXh0dXJlOjp1cGRhdGVSZWN0KEdyYXBoaWNzQ29udGV4dDNE
KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiAvKiBzb3VyY2VSZWN0ICovLCBjb25zdCBJbnRSZWN0
JiAvKiBkZXN0UmVjdCAqLykKK2Jvb2wgV2ViR0xMYXllckNocm9taXVtOjpVcGRhdGVyVGV4dHVy
ZTo6bmVlZFByZXBhcmUoKQoreworICAgIHJldHVybiBtX2xheWVyLT5uZWVkc0Rpc3BsYXkoKTsK
K30KKwordm9pZCBXZWJHTExheWVyQ2hyb21pdW06OlVwZGF0ZXJUZXh0dXJlOjpwcmVwYXJlKEdy
YXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBUZXh0dXJlQWxsb2NhdG9yKikKIHsKICAgICBtX2xh
eWVyLT51cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKGNvbnRleHQpOwogfQpAQCAtMTEzLDggKzEx
OCw3IEBAIHZvaWQgV2ViR0xMYXllckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2Vz
KEdyYXBoaWNzQ29udGV4dDNEKiByZW5kZXJlckNvCiAKIHZvaWQgV2ViR0xMYXllckNocm9taXVt
Ojpmb3JFYWNoQ29tcG9zaXRvclJlc291cmNlKExheWVyVGV4dHVyZVVwZGF0ZXI6OkhhbmRsZXIm
IGhhbmRsZXIpCiB7Ci0gICAgSW50UmVjdCBub25FbXB0eVJlY3QoMCwgMCwgMSwgMSk7Ci0gICAg
aGFuZGxlci5oYW5kbGUobV91cGRhdGVyVGV4dHVyZS5nZXQoKSwgbm9uRW1wdHlSZWN0LCBub25F
bXB0eVJlY3QpOworICAgIGhhbmRsZXIuaGFuZGxlKG1fdXBkYXRlclRleHR1cmUuZ2V0KCkpOwog
fQogCiBib29sIFdlYkdMTGF5ZXJDaHJvbWl1bTo6cGFpbnRSZW5kZXJlZFJlc3VsdHNUb0NhbnZh
cyhJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5oCmlu
ZGV4IDU0YjI3ZDQuLmUyZmI4YjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5oCkBAIC01
NSw3ICs1NSw4IEBAIHB1YmxpYzoKIAogICAgICAgICB2aXJ0dWFsIH5VcGRhdGVyVGV4dHVyZSgp
OwogCi0gICAgICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVSZWN0KEdyYXBoaWNzQ29udGV4dDNEKiwg
Y29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpOworICAg
ICAgICB2aXJ0dWFsIGJvb2wgbmVlZFByZXBhcmUoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHBy
ZXBhcmUoR3JhcGhpY3NDb250ZXh0M0QqLCBUZXh0dXJlQWxsb2NhdG9yKik7CiAKICAgICBwcml2
YXRlOgogICAgICAgICBleHBsaWNpdCBVcGRhdGVyVGV4dHVyZShXZWJHTExheWVyQ2hyb21pdW0q
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCmluZGV4IGI5ODhkMmMuLjhhODk5NzIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcApAQCAtNTgsMTIgKzU4LDkgQEAgQ0NM
YXllclRyZWVIb3N0OjpOZWVkUmVzb3VyY2VIYW5kbGVyOjp+TmVlZFJlc291cmNlSGFuZGxlcigp
CiB7CiB9CiAKLXZvaWQgQ0NMYXllclRyZWVIb3N0OjpOZWVkUmVzb3VyY2VIYW5kbGVyOjpoYW5k
bGUoTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZSogdGV4dHVyZSwgY29uc3QgSW50UmVjdCYg
Lyogc291cmNlUmVjdCAqLywgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpCit2b2lkIENDTGF5ZXJU
cmVlSG9zdDo6TmVlZFJlc291cmNlSGFuZGxlcjo6aGFuZGxlKExheWVyVGV4dHVyZVVwZGF0ZXI6
OlRleHR1cmUqIHRleHR1cmUpCiB7Ci0gICAgaWYgKGRlc3RSZWN0LmlzRW1wdHkoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgaWYgKHRleHR1cmUtPm5lZWRQcmVwYXJlUmVjdCgpKQorICAgIGlm
ICh0ZXh0dXJlLT5uZWVkUHJlcGFyZSgpKQogICAgICAgICBtX3Jlc291cmNlcysrOwogfQogCkBA
IC03NywzMSArNzQsMjggQEAgQ0NMYXllclRyZWVIb3N0OjpQcmVwYXJlUmVzb3VyY2VIYW5kbGVy
Ojp+UHJlcGFyZVJlc291cmNlSGFuZGxlcigpCiB7CiB9CiAKLXZvaWQgQ0NMYXllclRyZWVIb3N0
OjpQcmVwYXJlUmVzb3VyY2VIYW5kbGVyOjpoYW5kbGUoTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4
dHVyZSogdGV4dHVyZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYg
ZGVzdFJlY3QpCit2b2lkIENDTGF5ZXJUcmVlSG9zdDo6UHJlcGFyZVJlc291cmNlSGFuZGxlcjo6
aGFuZGxlKExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmUqIHRleHR1cmUpCiB7Ci0gICAgaWYg
KGRlc3RSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKHRleHR1cmUt
Pm5lZWRQcmVwYXJlUmVjdCgpKQotICAgICAgICB0ZXh0dXJlLT5wcmVwYXJlUmVjdChtX2NvbnRl
eHQsIG1fYWxsb2NhdG9yLCBzb3VyY2VSZWN0LCBkZXN0UmVjdCk7CisgICAgaWYgKHRleHR1cmUt
Pm5lZWRQcmVwYXJlKCkpCisgICAgICAgIHRleHR1cmUtPnByZXBhcmUobV9jb250ZXh0LCBtX2Fs
bG9jYXRvcik7CiB9CiAKLUNDTGF5ZXJUcmVlSG9zdDo6UGFpbnRIYW5kbGVyOjpQYWludEhhbmRs
ZXIoQ0NQcm94eSogcHJveHkpCitDQ0xheWVyVHJlZUhvc3Q6OlVwZGF0ZUhhbmRsZXI6OlVwZGF0
ZUhhbmRsZXIoQ0NQcm94eSogcHJveHkpCiAgICAgOiBtX3Byb3h5KHByb3h5KQogewogfQogCi1D
Q0xheWVyVHJlZUhvc3Q6OlBhaW50SGFuZGxlcjo6flBhaW50SGFuZGxlcigpCitDQ0xheWVyVHJl
ZUhvc3Q6OlVwZGF0ZUhhbmRsZXI6On5VcGRhdGVIYW5kbGVyKCkKIHsKIH0KIAotdm9pZCBDQ0xh
eWVyVHJlZUhvc3Q6OlBhaW50SGFuZGxlcjo6aGFuZGxlKExheWVyVGV4dHVyZVVwZGF0ZXI6OlRl
eHR1cmUqIHRleHR1cmUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3Qm
IGRlc3RSZWN0KQordm9pZCBDQ0xheWVyVHJlZUhvc3Q6OlVwZGF0ZUhhbmRsZXI6OmhhbmRsZShM
YXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlKiB0ZXh0dXJlKQogewotICAgIGlmIChkZXN0UmVj
dC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHRleHR1cmUtPnBhaW50Q29udGVu
dHNSZWN0KHNvdXJjZVJlY3QpOwotICAgIG1fcHJveHktPnVwZGF0ZSh0ZXh0dXJlLCBzb3VyY2VS
ZWN0LCBkZXN0UmVjdCk7CisgICAgT3duUHRyPENDVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmVVcGRh
dGU+IHRleHR1cmVVcGRhdGUgPSB0ZXh0dXJlLT5jcmVhdGVDQ1RleHR1cmVVcGRhdGUoKTsKKyAg
ICBpZiAodGV4dHVyZVVwZGF0ZS5nZXQoKSkgeworICAgICAgICB0ZXh0dXJlLT5wdXNoUHJvcGVy
dGllc1RvKHRleHR1cmVVcGRhdGUuZ2V0KCkpOworICAgICAgICBtX3Byb3h5LT51cGRhdGUodGV4
dHVyZVVwZGF0ZS5yZWxlYXNlKCkpOworICAgIH0KIH0KIAogQ0NMYXllclRyZWVIb3N0OjpSZXBs
YWNlVGV4dHVyZUhhbmRsZXI6OlJlcGxhY2VUZXh0dXJlSGFuZGxlcihUZXh0dXJlTWFuYWdlciog
bWFuYWdlciwgVGV4dHVyZUxpc3QqIGxpc3QpCkBAIC0xMTQsMTEgKzEwOCw4IEBAIENDTGF5ZXJU
cmVlSG9zdDo6UmVwbGFjZVRleHR1cmVIYW5kbGVyOjp+UmVwbGFjZVRleHR1cmVIYW5kbGVyKCkK
IHsKIH0KIAotdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OlJlcGxhY2VUZXh0dXJlSGFuZGxlcjo6aGFu
ZGxlKExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmUqIHRleHR1cmUsIGNvbnN0IEludFJlY3Qm
IC8qIHNvdXJjZVJlY3QgKi8sIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KQordm9pZCBDQ0xheWVy
VHJlZUhvc3Q6OlJlcGxhY2VUZXh0dXJlSGFuZGxlcjo6aGFuZGxlKExheWVyVGV4dHVyZVVwZGF0
ZXI6OlRleHR1cmUqIHRleHR1cmUpCiB7Ci0gICAgaWYgKGRlc3RSZWN0LmlzRW1wdHkoKSkKLSAg
ICAgICAgcmV0dXJuOwotCiAgICAgaWYgKHRleHR1cmUtPnRleHR1cmUoKSkgewogICAgICAgICBt
X2xpc3QtPmFwcGVuZCh0ZXh0dXJlLT5yZXBsYWNlVGV4dHVyZShtX3RleHR1cmVNYW5hZ2VyKSk7
CiAgICAgICAgIEFTU0VSVChtX2xpc3QtPmxhc3QoKS5nZXQoKSk7CkBAIC00ODUsNyArNDc2LDcg
QEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnVwZGF0ZUNvbnRlbnRzKExheWVyQ2hyb21pdW0qIHJv
b3RMYXllcikKICAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0Ojp1cGRhdGVDb250ZW50
cyIsIHRoaXMsIDApOwogCiAgICAgZm9yIChpbnQgbGF5ZXJJbmRleCA9IG1fbGF5ZXJVcGRhdGVM
aXN0LnNpemUoKSAtIDE7IGxheWVySW5kZXggPj0gMCA7IC0tbGF5ZXJJbmRleCkgewotICAgICAg
ICBQYWludEhhbmRsZXIgaGFuZGxlcihtX3Byb3h5LmdldCgpKTsKKyAgICAgICAgVXBkYXRlSGFu
ZGxlciBoYW5kbGVyKG1fcHJveHkuZ2V0KCkpOwogICAgICAgICBMYXllckNocm9taXVtKiBsYXll
ciA9IG1fbGF5ZXJVcGRhdGVMaXN0W2xheWVySW5kZXhdLmdldCgpOwogICAgICAgICBsYXllci0+
Zm9yRWFjaENvbXBvc2l0b3JSZXNvdXJjZShoYW5kbGVyKTsKICAgICAgICAgbGF5ZXItPmZpbmlz
aFVwZGF0ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaAppbmRleCA1YzA0ZGViLi4wZTNl
ZjJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVHJlZUhvc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaApAQCAtMjExLDcgKzIxMSw3IEBAIHBy
aXZhdGU6CiAgICAgICAgIE5lZWRSZXNvdXJjZUhhbmRsZXIoKTsKICAgICAgICAgdmlydHVhbCB+
TmVlZFJlc291cmNlSGFuZGxlcigpOwogCi0gICAgICAgIHZpcnR1YWwgdm9pZCBoYW5kbGUoTGF5
ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZSosIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNv
bnN0IEludFJlY3QmIGRlc3RSZWN0KTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGhhbmRsZShMYXll
clRleHR1cmVVcGRhdGVyOjpUZXh0dXJlKik7CiAKICAgICAgICAgaW50IHJlc291cmNlcygpIHsg
cmV0dXJuIG1fcmVzb3VyY2VzOyB9CiAKQEAgLTIyNCwxOSArMjI0LDE5IEBAIHByaXZhdGU6CiAg
ICAgICAgIFByZXBhcmVSZXNvdXJjZUhhbmRsZXIoR3JhcGhpY3NDb250ZXh0M0QqLCBUZXh0dXJl
QWxsb2NhdG9yKik7CiAgICAgICAgIHZpcnR1YWwgflByZXBhcmVSZXNvdXJjZUhhbmRsZXIoKTsK
IAotICAgICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlKExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1
cmUqLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCk7
CisgICAgICAgIHZpcnR1YWwgdm9pZCBoYW5kbGUoTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVy
ZSopOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgR3JhcGhpY3NDb250ZXh0M0QqIG1fY29udGV4
dDsKICAgICAgICAgVGV4dHVyZUFsbG9jYXRvciogbV9hbGxvY2F0b3I7CiAgICAgfTsKIAotICAg
IGNsYXNzIFBhaW50SGFuZGxlciA6IHB1YmxpYyBMYXllclRleHR1cmVVcGRhdGVyOjpIYW5kbGVy
IHsKKyAgICBjbGFzcyBVcGRhdGVIYW5kbGVyIDogcHVibGljIExheWVyVGV4dHVyZVVwZGF0ZXI6
OkhhbmRsZXIgewogICAgIHB1YmxpYzoKLSAgICAgICAgUGFpbnRIYW5kbGVyKENDUHJveHkqKTsK
LSAgICAgICAgdmlydHVhbCB+UGFpbnRIYW5kbGVyKCk7CisgICAgICAgIFVwZGF0ZUhhbmRsZXIo
Q0NQcm94eSopOworICAgICAgICB2aXJ0dWFsIH5VcGRhdGVIYW5kbGVyKCk7CiAKLSAgICAgICAg
dmlydHVhbCB2b2lkIGhhbmRsZShMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlKiwgY29uc3Qg
SW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpOworICAgICAgICB2
aXJ0dWFsIHZvaWQgaGFuZGxlKExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmUqKTsKIAogICAg
IHByaXZhdGU6CiAgICAgICAgIENDUHJveHkqIG1fcHJveHk7CkBAIC0yNDcsNyArMjQ3LDcgQEAg
cHJpdmF0ZToKICAgICAgICAgUmVwbGFjZVRleHR1cmVIYW5kbGVyKFRleHR1cmVNYW5hZ2VyKiwg
VGV4dHVyZUxpc3QqKTsKICAgICAgICAgdmlydHVhbCB+UmVwbGFjZVRleHR1cmVIYW5kbGVyKCk7
CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIGhhbmRsZShMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0
dXJlKiwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3Qp
OworICAgICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlKExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1
cmUqKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIFRleHR1cmVNYW5hZ2VyKiBtX3RleHR1cmVN
YW5hZ2VyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NQcm94eS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NQcm94eS5oCmluZGV4IGVlZTZkMTguLmUxYmM3NzYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJveHkuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Byb3h5LmgK
QEAgLTgwLDcgKzgwLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzdGFydCgpID0gMDsg
Ly8gTXVzdCBiZSBjYWxsZWQgYmVmb3JlIHVzaW5nIHRoZSBwcm94eS4KICAgICB2aXJ0dWFsIHZv
aWQgc3RvcCgpID0gMDsgLy8gTXVzdCBiZSBjYWxsZWQgYmVmb3JlIGRlbGV0aW5nIHRoZSBwcm94
eS4KIAotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGUoTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVy
ZSosIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZShQYXNzT3duUHRyPENDVGV4dHVyZVVwZGF0ZXI6
OlRleHR1cmVVcGRhdGU+KSA9IDA7CiAKICAgICAvLyBEZWJ1ZyBob29rcwogI2lmbmRlZiBOREVC
VUcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHAKaW5kZXggNWY3OTY5MS4u
NGJiMTU2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHAKQEAgLTIx
NCwxMiArMjE0LDEyIEBAIHZvaWQgQ0NTaW5nbGVUaHJlYWRQcm94eTo6c3RvcCgpCiAgICAgbV9s
YXllclRyZWVIb3N0ID0gMDsKIH0KIAotdm9pZCBDQ1NpbmdsZVRocmVhZFByb3h5Ojp1cGRhdGUo
TGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZSogdGV4dHVyZSwgY29uc3QgSW50UmVjdCYgc291
cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpCit2b2lkIENDU2luZ2xlVGhyZWFkUHJv
eHk6OnVwZGF0ZShQYXNzT3duUHRyPENDVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmVVcGRhdGU+IGVu
dHJ5KQogewogICAgIGlmIChtX2xheWVyVHJlZUhvc3RJbXBsLT5zZXR0aW5ncygpLmRlbGF5VGV4
dHVyZVVwZGF0ZXMpCi0gICAgICAgIG1fdGV4dHVyZVVwZGF0ZXIuYXBwZW5kKHRleHR1cmUsIHNv
dXJjZVJlY3QsIGRlc3RSZWN0KTsKKyAgICAgICAgbV90ZXh0dXJlVXBkYXRlci5hcHBlbmQoZW50
cnkpOwogICAgIGVsc2UKLSAgICAgICAgdGV4dHVyZS0+dXBkYXRlUmVjdChtX2xheWVyVHJlZUhv
c3RJbXBsLT5jb250ZXh0KCksIHNvdXJjZVJlY3QsIGRlc3RSZWN0KTsKKyAgICAgICAgZW50cnkt
PnVwZGF0ZShtX2xheWVyVHJlZUhvc3RJbXBsLT5jb250ZXh0KCkpOwogfQogCiAvLyBDYWxsZWQg
YnkgdGhlIGxlZ2FjeSBzY2hlZHVsaW5nIHBhdGggKGUuZy4gd2hlcmUgcmVuZGVyX3dpZGdldCBk
b2VzIHRoZSBzY2hlZHVsaW5nKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5oCmlu
ZGV4IDc4M2E4ZGIuLjA2Nzg5MjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5
LmgKQEAgLTU1LDcgKzU1LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXRWaXNpYmxl
KGJvb2wpOwogICAgIHZpcnR1YWwgdm9pZCBzdGFydCgpOwogICAgIHZpcnR1YWwgdm9pZCBzdG9w
KCk7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZShMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJl
KiwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpOwor
ICAgIHZpcnR1YWwgdm9pZCB1cGRhdGUoUGFzc093blB0cjxDQ1RleHR1cmVVcGRhdGVyOjpUZXh0
dXJlVXBkYXRlPik7CiAKICAgICAvLyBDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50IGltcGxlbWVu
dGF0aW9uCiAgICAgdmlydHVhbCB2b2lkIG9uU3dhcEJ1ZmZlcnNDb21wbGV0ZU9uSW1wbFRocmVh
ZCgpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRl
ci5jcHAKaW5kZXggYTYxYzNiYi4uNTc1YjYyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBk
YXRlci5jcHAKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJjYy9DQ1RleHR1cmVVcGRhdGVy
LmgiCiAKICNpbmNsdWRlICJjYy9DQ1Byb3h5LmgiCisjaW5jbHVkZSAiRXh0ZW5zaW9uczNEQ2hy
b21pdW0uaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIkxheWVy
VGV4dHVyZVVwZGF0ZXIuaCIKICNpbmNsdWRlICJNYW5hZ2VkVGV4dHVyZS5oIgpAQCAtMzgsNiAr
MzksNjQgQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitD
Q1RleHR1cmVVcGRhdGVyOjpTdWJJbWFnZVRleHR1cmVVcGRhdGU6OlN1YkltYWdlVGV4dHVyZVVw
ZGF0ZSgpCisgIDogbV9mb3JtYXQoMCkKKyAgLCBtX3RleHR1cmVJZCgwKQorICAsIG1fbWFwcGVk
QnVmZmVyKDApCit7Cit9CisKK0NDVGV4dHVyZVVwZGF0ZXI6OlN1YkltYWdlVGV4dHVyZVVwZGF0
ZTo6flN1YkltYWdlVGV4dHVyZVVwZGF0ZSgpCit7Cit9CisKK3ZvaWQgQ0NUZXh0dXJlVXBkYXRl
cjo6U3ViSW1hZ2VUZXh0dXJlVXBkYXRlOjpzZXRQaXhlbERhdGEoY29uc3QgdWludDhfdCogcGl4
ZWxTb3VyY2UsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBJbnRSZWN0JiBzb3Vy
Y2VSZWN0KQoreworICAgIEFTU0VSVChtX2Zvcm1hdCk7CisgICAgQVNTRVJUKCFtX3JlY3QuaXNF
bXB0eSgpKTsKKyAgICBBU1NFUlQobV9yZWN0LnNpemUoKSA9PSBzb3VyY2VSZWN0LnNpemUoKSk7
CisKKyAgICB1bnNpZ25lZCBpbnQgY29tcG9uZW50c1BlclBpeGVsID0gNDsKKyAgICB1bnNpZ25l
ZCBpbnQgYnl0ZXNQZXJDb21wb25lbnQgPSAxOworICAgIGlmICghR3JhcGhpY3NDb250ZXh0M0Q6
OmNvbXB1dGVGb3JtYXRBbmRUeXBlUGFyYW1ldGVycyhtX2Zvcm1hdCwgR3JhcGhpY3NDb250ZXh0
M0Q6OlVOU0lHTkVEX0JZVEUsICZjb21wb25lbnRzUGVyUGl4ZWwsICZieXRlc1BlckNvbXBvbmVu
dCkpCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworCisgICAgdW5zaWduZWQgaW50IGJ5
dGVzUGVyUGl4ZWwgPSBieXRlc1BlckNvbXBvbmVudCAqIGNvbXBvbmVudHNQZXJQaXhlbDsKKwor
ICAgIHNpemVfdCBidWZmZXJTaXplID0gbV9yZWN0LndpZHRoKCkgKiBtX3JlY3QuaGVpZ2h0KCkg
KiBieXRlc1BlclBpeGVsOworICAgIG1fcGl4ZWxEYXRhID0gYWRvcHRBcnJheVB0cihuZXcgdWlu
dDhfdFtidWZmZXJTaXplXSk7CisKKyAgICAvLyBPZmZzZXQgZnJvbSBjb250ZW50LXJlY3QgdG8g
c291cmNlLXJlY3QuCisgICAgSW50UG9pbnQgb2Zmc2V0KHNvdXJjZVJlY3QueCgpIC0gY29udGVu
dFJlY3QueCgpLCBzb3VyY2VSZWN0LnkoKSAtIGNvbnRlbnRSZWN0LnkoKSk7CisKKyAgICBpZiAo
Y29udGVudFJlY3Qud2lkdGgoKSA9PSBzb3VyY2VSZWN0LndpZHRoKCkgJiYgIW9mZnNldC54KCkp
CisgICAgICAgIG1lbWNweShtX3BpeGVsRGF0YS5nZXQoKSwgJnBpeGVsU291cmNlW2J5dGVzUGVy
UGl4ZWwgKiBvZmZzZXQueSgpICogY29udGVudFJlY3Qud2lkdGgoKV0sIGNvbnRlbnRSZWN0Lndp
ZHRoKCkgKiBtX3JlY3QuaGVpZ2h0KCkgKiBieXRlc1BlclBpeGVsKTsKKyAgICBlbHNlIHsKKyAg
ICAgICAgLy8gU3RyaWRlcyBub3QgZXF1YWwsIHNvIGRvIGEgcm93LWJ5LXJvdyBtZW1jcHkgZnJv
bSB0aGUKKyAgICAgICAgLy8gcGl4ZWxTb3VyY2UgaW50byB0aGUgcGl4ZWxEZXN0CisgICAgICAg
IGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IG1fcmVjdC5oZWlnaHQoKTsgKytyb3cpCisgICAgICAg
ICAgICBtZW1jcHkobV9waXhlbERhdGEuZ2V0KCkgKyBtX3JlY3Qud2lkdGgoKSAqIGJ5dGVzUGVy
UGl4ZWwgKiByb3csCisgICAgICAgICAgICAgICAgICAgcGl4ZWxTb3VyY2UgKyBieXRlc1BlclBp
eGVsICogKG9mZnNldC54KCkgKyAob2Zmc2V0LnkoKSArIHJvdykgKiBjb250ZW50UmVjdC53aWR0
aCgpKSwKKyAgICAgICAgICAgICAgICAgICBtX3JlY3Qud2lkdGgoKSAqIGJ5dGVzUGVyUGl4ZWwp
OworICAgIH0KK30KKwordm9pZCBDQ1RleHR1cmVVcGRhdGVyOjpTdWJJbWFnZVRleHR1cmVVcGRh
dGU6OnVwZGF0ZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKK3sKKyAgICBBU1NFUlQobV9m
b3JtYXQpOworICAgIEFTU0VSVChtX3RleHR1cmVJZCk7CisgICAgQVNTRVJUKCFtX3JlY3QuaXNF
bXB0eSgpKTsKKworICAgIGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFXzJELCBtX3RleHR1cmVJZCk7CisgICAgaWYgKG1fbWFwcGVkQnVmZmVyKSB7CisgICAg
ICAgIEV4dGVuc2lvbnMzRENocm9taXVtKiBleHRlbnNpb25zID0gc3RhdGljX2Nhc3Q8RXh0ZW5z
aW9uczNEQ2hyb21pdW0qPihjb250ZXh0LT5nZXRFeHRlbnNpb25zKCkpOworICAgICAgICBleHRl
bnNpb25zLT51bm1hcFRleFN1YkltYWdlMkRDSFJPTUlVTShtX21hcHBlZEJ1ZmZlcik7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgQVNTRVJUKG1fcGl4ZWxEYXRhKTsKKyAgICAgICAgY29udGV4dC0+
dGV4U3ViSW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgbV9yZWN0Lngo
KSwgbV9yZWN0LnkoKSwgbV9yZWN0LndpZHRoKCksIG1fcmVjdC5oZWlnaHQoKSwgbV9mb3JtYXQs
IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCBtX3BpeGVsRGF0YS5nZXQoKSk7Cisg
ICAgfQorfQorCiBDQ1RleHR1cmVVcGRhdGVyOjpDQ1RleHR1cmVVcGRhdGVyKCkKIHsKIH0KQEAg
LTQ2LDE1ICsxMDUsMTAgQEAgQ0NUZXh0dXJlVXBkYXRlcjo6fkNDVGV4dHVyZVVwZGF0ZXIoKQog
ewogfQogCi12b2lkIENDVGV4dHVyZVVwZGF0ZXI6OmFwcGVuZChMYXllclRleHR1cmVVcGRhdGVy
OjpUZXh0dXJlKiB0ZXh0dXJlLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRS
ZWN0JiBkZXN0UmVjdCkKK3ZvaWQgQ0NUZXh0dXJlVXBkYXRlcjo6YXBwZW5kKFBhc3NPd25QdHI8
VGV4dHVyZVVwZGF0ZT4gdXBkYXRlKQogewotICAgIEFTU0VSVCh0ZXh0dXJlKTsKLQotICAgIFVw
ZGF0ZUVudHJ5IGVudHJ5OwotICAgIGVudHJ5Lm1fdGV4dHVyZSA9IHRleHR1cmU7Ci0gICAgZW50
cnkubV9zb3VyY2VSZWN0ID0gc291cmNlUmVjdDsKLSAgICBlbnRyeS5tX2Rlc3RSZWN0ID0gZGVz
dFJlY3Q7Ci0gICAgbV9lbnRyaWVzLmFwcGVuZChlbnRyeSk7CisgICAgQVNTRVJUKHVwZGF0ZSk7
CisgICAgbV9lbnRyaWVzLmFwcGVuZCh1cGRhdGUpOwogfQogCiBib29sIENDVGV4dHVyZVVwZGF0
ZXI6Omhhc01vcmVVcGRhdGVzKCkgY29uc3QKQEAgLTY4LDggKzEyMiw3IEBAIGJvb2wgQ0NUZXh0
dXJlVXBkYXRlcjo6dXBkYXRlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBzaXplX3QgY291
bnQpCiAgICAgICAgIGlmICghbV9lbnRyaWVzLnNpemUoKSkKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgICAgICBVcGRhdGVFbnRyeSYgZW50cnkgPSBtX2VudHJpZXMubGFzdCgpOwot
ICAgICAgICBlbnRyeS5tX3RleHR1cmUtPnVwZGF0ZVJlY3QoY29udGV4dCwgZW50cnkubV9zb3Vy
Y2VSZWN0LCBlbnRyeS5tX2Rlc3RSZWN0KTsKKyAgICAgICAgbV9lbnRyaWVzLmxhc3QoKS0+dXBk
YXRlKGNvbnRleHQpOwogICAgICAgICBtX2VudHJpZXMucmVtb3ZlTGFzdCgpOwogICAgIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NUZXh0dXJlVXBkYXRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5oCmluZGV4IGFiNjU5ZWMuLjU0YjMzZjcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4
dHVyZVVwZGF0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmgKQEAgLTI3LDcgKzI3LDkgQEAKICNkZWZpbmUgQ0NU
ZXh0dXJlVXBkYXRlcl9oCiAKICNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiTGF5ZXJU
ZXh0dXJlVXBkYXRlci5oIgorI2luY2x1ZGUgPHd0Zi9Pd25BcnJheVB0ci5oPgorI2luY2x1ZGUg
PHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzYsMTAgKzM4LDQxIEBAIGNs
YXNzIEdyYXBoaWNzQ29udGV4dDNEOwogCiBjbGFzcyBDQ1RleHR1cmVVcGRhdGVyIHsKIHB1Ymxp
YzoKKyAgICBjbGFzcyBUZXh0dXJlVXBkYXRlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1
YWwgdm9pZCB1cGRhdGUoR3JhcGhpY3NDb250ZXh0M0QqKSA9IDA7CisgICAgfTsKKyAgICBjbGFz
cyBTdWJJbWFnZVRleHR1cmVVcGRhdGUgOiBwdWJsaWMgVGV4dHVyZVVwZGF0ZSB7CisgICAgcHVi
bGljOgorICAgICAgICB2aXJ0dWFsIH5TdWJJbWFnZVRleHR1cmVVcGRhdGUoKTsKKworICAgICAg
ICBzdGF0aWMgUGFzc093blB0cjxTdWJJbWFnZVRleHR1cmVVcGRhdGU+IGNyZWF0ZSgpIHsgcmV0
dXJuIGFkb3B0UHRyKG5ldyBTdWJJbWFnZVRleHR1cmVVcGRhdGUoKSk7IH0KKworICAgICAgICB2
b2lkIHNldEZvcm1hdCh1bnNpZ25lZCBmb3JtYXQpIHsgbV9mb3JtYXQgPSBmb3JtYXQ7IH0KKyAg
ICAgICAgdm9pZCBzZXRUZXh0dXJlSWQodW5zaWduZWQgdGV4dHVyZUlkKSB7IG1fdGV4dHVyZUlk
ID0gdGV4dHVyZUlkOyB9CisgICAgICAgIHZvaWQgc2V0UmVjdChJbnRSZWN0JiByZWN0KSB7IG1f
cmVjdCA9IHJlY3Q7IH0KKyAgICAgICAgdm9pZCBzZXRQaXhlbERhdGEoUGFzc093bkFycmF5UHRy
PHVpbnQ4X3Q+IHBpeGVsRGF0YSkgeyBtX3BpeGVsRGF0YSA9IHBpeGVsRGF0YTsgfQorICAgICAg
ICAvLyBmb3JtYXQgYW5kIHJlY3QgbXVzdCBiZSBzZXQgYmVmb3JlIHRoaXMgdmVyc2lvbiBvZiBz
ZXRQaXhlbERhdGEgaXMgdXNlZAorICAgICAgICB2b2lkIHNldFBpeGVsRGF0YShjb25zdCB1aW50
OF90KiBwaXhlbFNvdXJjZSwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IEludFJl
Y3QmIHNvdXJjZVJlY3QpOworICAgICAgICB2b2lkIHNldE1hcHBlZEJ1ZmZlcih1aW50OF90KiBt
YXBwZWRCdWZmZXIpIHsgbV9tYXBwZWRCdWZmZXIgPSBtYXBwZWRCdWZmZXI7IH0KKworICAgICAg
ICB2aXJ0dWFsIHZvaWQgdXBkYXRlKEdyYXBoaWNzQ29udGV4dDNEKik7CisKKyAgICBwcm90ZWN0
ZWQ6CisgICAgICAgIGV4cGxpY2l0IFN1YkltYWdlVGV4dHVyZVVwZGF0ZSgpOworCisgICAgcHJp
dmF0ZToKKyAgICAgICAgdW5zaWduZWQgbV9mb3JtYXQ7CisgICAgICAgIHVuc2lnbmVkIG1fdGV4
dHVyZUlkOworICAgICAgICBJbnRSZWN0IG1fcmVjdDsKKyAgICAgICAgT3duQXJyYXlQdHI8dWlu
dDhfdD4gbV9waXhlbERhdGE7CisgICAgICAgIHVpbnQ4X3QqIG1fbWFwcGVkQnVmZmVyOworICAg
IH07CisKICAgICBDQ1RleHR1cmVVcGRhdGVyKCk7CiAgICAgfkNDVGV4dHVyZVVwZGF0ZXIoKTsK
IAotICAgIHZvaWQgYXBwZW5kKExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmUqLCBjb25zdCBJ
bnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCk7CisgICAgdm9pZCBh
cHBlbmQoUGFzc093blB0cjxUZXh0dXJlVXBkYXRlPik7CiAKICAgICBib29sIGhhc01vcmVVcGRh
dGVzKCkgY29uc3Q7CiAKQEAgLTQ5LDEzICs4Miw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNsZWFy
KCk7CiAKIHByaXZhdGU6Ci0gICAgc3RydWN0IFVwZGF0ZUVudHJ5IHsKLSAgICAgICAgTGF5ZXJU
ZXh0dXJlVXBkYXRlcjo6VGV4dHVyZSogbV90ZXh0dXJlOwotICAgICAgICBJbnRSZWN0IG1fc291
cmNlUmVjdDsKLSAgICAgICAgSW50UmVjdCBtX2Rlc3RSZWN0OwotICAgIH07Ci0KLSAgICBWZWN0
b3I8VXBkYXRlRW50cnk+IG1fZW50cmllczsKKyAgICBWZWN0b3I8T3duUHRyPFRleHR1cmVVcGRh
dGU+ID4gbV9lbnRyaWVzOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcAppbmRl
eCA2ZDM3MjE2Li5hNGEyODY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcApAQCAtMjg3
LDE4ICsyODcsMTMgQEAgdm9pZCBDQ1RocmVhZFByb3h5OjpzdG9wKCkKICAgICBtX3N0YXJ0ZWQg
PSBmYWxzZTsKIH0KIAotdm9pZCBDQ1RocmVhZFByb3h5Ojp1cGRhdGUoTGF5ZXJUZXh0dXJlVXBk
YXRlcjo6VGV4dHVyZSogdGV4dHVyZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3Qg
SW50UmVjdCYgZGVzdFJlY3QpCit2b2lkIENDVGhyZWFkUHJveHk6OnVwZGF0ZShQYXNzT3duUHRy
PENDVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmVVcGRhdGU+IGVudHJ5KQogewogICAgIFRSQUNFX0VW
RU5UKCJDQ1RocmVhZFByb3h5Ojp1cGRhdGUiLCB0aGlzLCAwKTsKICAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOwogICAgIEFTU0VSVChtX3N0YXJ0ZWQpOwogCi0gICAgT3duUHRyPFVwZGF0ZUVu
dHJ5PiBlbnRyeSA9IGFkb3B0UHRyKG5ldyBVcGRhdGVFbnRyeSk7Ci0gICAgZW50cnktPm1fdGV4
dHVyZSA9IHRleHR1cmU7Ci0gICAgZW50cnktPm1fc291cmNlUmVjdCA9IHNvdXJjZVJlY3Q7Ci0g
ICAgZW50cnktPm1fZGVzdFJlY3QgPSBkZXN0UmVjdDsKLQotICAgIENDUHJveHk6OmltcGxUaHJl
YWQoKS0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ1RocmVhZFByb3h5Ojp1
cGRhdGVUZXh0dXJlT25JbXBsVGhyZWFkLCBlbnRyeS5yZWxlYXNlKCkpKTsKKyAgICBDQ1Byb3h5
OjppbXBsVGhyZWFkKCktPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NUaHJl
YWRQcm94eTo6dXBkYXRlVGV4dHVyZU9uSW1wbFRocmVhZCwgZW50cnkpKTsKIH0KIAogdm9pZCBD
Q1RocmVhZFByb3h5OjpmaW5pc2hBbGxSZW5kZXJpbmdPbkltcGxUaHJlYWQoQ0NDb21wbGV0aW9u
RXZlbnQqIGNvbXBsZXRpb24pCkBAIC0zODksMTAgKzM4NCwxMSBAQCB2b2lkIENDVGhyZWFkUHJv
eHk6OmJlZ2luRnJhbWVBbmRDb21taXQoaW50IHNlcXVlbmNlTnVtYmVyLCBkb3VibGUgZnJhbWVC
ZWdpblRpbQogICAgIC8vIHVwZGF0ZUxheWVycy4KICAgICBtX2NvbW1pdFJlcXVlc3RlZCA9IGZh
bHNlOwogCi0gICAgbV9sYXllclRyZWVIb3N0LT5wcmVwYXJlVG9VcGRhdGUoKTsKLQogICAgIC8v
IFJlbGVhc2UgdGV4dHVyZXMgbm8gbG9uZ2VyIHVzZWQgYnkgaW1wbCB0aHJlYWQuCiAgICAgbV91
c2VkVGV4dHVyZUxpc3QuY2xlYXIoKTsKKworICAgIG1fbGF5ZXJUcmVlSG9zdC0+cHJlcGFyZVRv
VXBkYXRlKCk7CisKICAgICAvLyBNb3ZlIHRleHR1cmVzIHVzZWQgYnkgaW1wbCB0aHJlYWQgdG8g
bV91c2VkVGV4dHVyZUxpc3QgYW5kIGNyZWF0ZSBuZXcKICAgICAvLyB0ZXh0dXJlcyBmb3IgdXBk
YXRlLgogICAgIG1fbGF5ZXJUcmVlSG9zdC0+cmVwbGFjZVRleHR1cmVzKG1fdXNlZFRleHR1cmVM
aXN0KTsKQEAgLTQ0NiwxNCArNDQyLDE0IEBAIHZvaWQgQ0NUaHJlYWRQcm94eTo6cHJlcGFyZUZy
YW1lUmVzb3VyY2VzT25JbXBsVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50KiBjb21wbGV0CiAgICAg
Y29tcGxldGlvbi0+c2lnbmFsKCk7CiB9CiAKLXZvaWQgQ0NUaHJlYWRQcm94eTo6dXBkYXRlVGV4
dHVyZU9uSW1wbFRocmVhZChQYXNzT3duUHRyPFVwZGF0ZUVudHJ5PiBlbnRyeSkKK3ZvaWQgQ0NU
aHJlYWRQcm94eTo6dXBkYXRlVGV4dHVyZU9uSW1wbFRocmVhZChQYXNzT3duUHRyPENDVGV4dHVy
ZVVwZGF0ZXI6OlRleHR1cmVVcGRhdGU+IGVudHJ5KQogewogICAgIEFTU0VSVCghbV9jb21taXRD
b21wbGV0aW9uRXZlbnRPbkltcGxUaHJlYWQpOwogICAgIEFTU0VSVChpc0ltcGxUaHJlYWQoKSk7
CiAgICAgaWYgKCFtX2xheWVyVHJlZUhvc3RJbXBsKQogICAgICAgICByZXR1cm47CiAKLSAgICBt
X3RleHR1cmVVcGRhdGVyT25JbXBsVGhyZWFkLmFwcGVuZChlbnRyeS0+bV90ZXh0dXJlLCBlbnRy
eS0+bV9zb3VyY2VSZWN0LCBlbnRyeS0+bV9kZXN0UmVjdCk7CisgICAgbV90ZXh0dXJlVXBkYXRl
ck9uSW1wbFRocmVhZC5hcHBlbmQoZW50cnkpOwogCiAgICAgaWYgKCFtX2xheWVyVHJlZUhvc3RJ
bXBsLT5zZXR0aW5ncygpLmRlbGF5VGV4dHVyZVVwZGF0ZXMpCiAgICAgICAgIG1fc2NoZWR1bGVy
T25JbXBsVGhyZWFkLT5zZXRSZXNvdXJjZVVwZGF0ZXNQZW5kaW5nKCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVh
ZFByb3h5LmgKaW5kZXggYmM2NGM4Ni4uYzI2MGFiMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHku
aApAQCAtNjMsNyArNjMsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldFZpc2libGUo
Ym9vbCk7CiAgICAgdmlydHVhbCB2b2lkIHN0YXJ0KCk7CiAgICAgdmlydHVhbCB2b2lkIHN0b3Ao
KTsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlKExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmUq
LCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCk7Cisg
ICAgdmlydHVhbCB2b2lkIHVwZGF0ZShQYXNzT3duUHRyPENDVGV4dHVyZVVwZGF0ZXI6OlRleHR1
cmVVcGRhdGU+KTsKIAogICAgIC8vIENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQgaW1wbGVtZW50
YXRpb24KICAgICB2aXJ0dWFsIHZvaWQgb25Td2FwQnVmZmVyc0NvbXBsZXRlT25JbXBsVGhyZWFk
KCk7CkBAIC04MCwxMiArODAsNiBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGV4cGxpY2l0IEND
VGhyZWFkUHJveHkoQ0NMYXllclRyZWVIb3N0Kik7CiAKLSAgICBzdHJ1Y3QgVXBkYXRlRW50cnkg
ewotICAgICAgICBMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlKiBtX3RleHR1cmU7Ci0gICAg
ICAgIEludFJlY3QgbV9zb3VyY2VSZWN0OwotICAgICAgICBJbnRSZWN0IG1fZGVzdFJlY3Q7Ci0g
ICAgfTsKLQogICAgIHR5cGVkZWYgVmVjdG9yPE93blB0cjxNYW5hZ2VkVGV4dHVyZT4gPiBUZXh0
dXJlTGlzdDsKIAogICAgIC8vIENhbGxlZCBvbiBtYWluIHRocmVhZApAQCAtMTAzLDcgKzk3LDcg
QEAgcHJpdmF0ZToKICAgICBQYXNzT3duUHRyPENDVGhyZWFkOjpUYXNrPiBjcmVhdGVCZWdpbkZy
YW1lQW5kQ29tbWl0VGFza09uSW1wbFRocmVhZCgpOwogICAgIHZvaWQgb2J0YWluQmVnaW5GcmFt
ZUFuZENvbW1pdFRhc2tGcm9tQ0NUaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqLCBDQ1RocmVhZDo6
VGFzayoqKTsKICAgICB2b2lkIHByZXBhcmVGcmFtZVJlc291cmNlc09uSW1wbFRocmVhZChDQ0Nv
bXBsZXRpb25FdmVudCopOwotICAgIHZvaWQgdXBkYXRlVGV4dHVyZU9uSW1wbFRocmVhZChQYXNz
T3duUHRyPFVwZGF0ZUVudHJ5Pik7CisgICAgdm9pZCB1cGRhdGVUZXh0dXJlT25JbXBsVGhyZWFk
KFBhc3NPd25QdHI8Q0NUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZVVwZGF0ZT4pOwogICAgIHZvaWQg
YmVnaW5GcmFtZUNvbXBsZXRlT25JbXBsVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50Kik7CiAgICAg
dm9pZCByZXF1ZXN0UmVhZGJhY2tPbkltcGxUaHJlYWQoUmVhZGJhY2tSZXF1ZXN0Kik7CiAgICAg
dm9pZCBmaW5pc2hBbGxSZW5kZXJpbmdPbkltcGxUaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0
VGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRl
c3QuY3BwCmluZGV4IDJkZThkMDcuLjVkYzhmMDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcApAQCAtMjYsOSArMjYsMTEg
QEAKIAogI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdC5oIgogCisjaW5jbHVkZSAiQ2FudmFz
TGF5ZXJUZXh0dXJlVXBkYXRlci5oIgogI2luY2x1ZGUgIkNvbnRlbnRMYXllckNocm9taXVtLmgi
CiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgiCiAjaW5jbHVkZSAiTGF5ZXJD
aHJvbWl1bS5oIgorI2luY2x1ZGUgIkxheWVyUGFpbnRlckNocm9taXVtLmgiCiAjaW5jbHVkZSAi
TWFuYWdlZFRleHR1cmUuaCIKICNpbmNsdWRlICJNb2NrV2ViR3JhcGhpY3NDb250ZXh0M0QuaCIK
ICNpbmNsdWRlICJUZXh0dXJlTWFuYWdlci5oIgpAQCAtOTg2LDUxICs5ODgsNzEgQEAgcHJpdmF0
ZToKIAogY2xhc3MgQ29udGVudExheWVyQ2hyb21pdW1XaXRoVXBkYXRlVHJhY2tpbmcgOiBwdWJs
aWMgQ29udGVudExheWVyQ2hyb21pdW0gewogcHVibGljOgotICAgIGNsYXNzIENvbnRlbnRMYXll
clRleHR1cmVVcGRhdGVyIDogcHVibGljIExheWVyVGV4dHVyZVVwZGF0ZXIgeworICAgIGNsYXNz
IENvbnRlbnRMYXllclRleHR1cmVVcGRhdGVyIDogcHVibGljIENhbnZhc0xheWVyVGV4dHVyZVVw
ZGF0ZXIgewogICAgIHB1YmxpYzoKLSAgICAgICAgY2xhc3MgVGV4dHVyZSA6IHB1YmxpYyBMYXll
clRleHR1cmVVcGRhdGVyOjpUZXh0dXJlIHsKKyAgICAgICAgY2xhc3MgUGFpbnRlciA6IHB1Ymxp
YyBMYXllclBhaW50ZXJDaHJvbWl1bSB7CiAgICAgICAgIHB1YmxpYzoKLSAgICAgICAgICAgIFRl
eHR1cmUoQ29udGVudExheWVyVGV4dHVyZVVwZGF0ZXIqIHRleHR1cmVVcGRhdGVyLCBQYXNzT3du
UHRyPE1hbmFnZWRUZXh0dXJlPiB0ZXh0dXJlKQotICAgICAgICAgICAgICAgIDogbV90ZXh0dXJl
KHRleHR1cmUpCi0gICAgICAgICAgICAgICAgLCBtX3RleHR1cmVVcGRhdGVyKHRleHR1cmVVcGRh
dGVyKQorICAgICAgICAgICAgc3RhdGljIFBhc3NPd25QdHI8UGFpbnRlcj4gY3JlYXRlKCkgeyBy
ZXR1cm4gYWRvcHRQdHIobmV3IFBhaW50ZXIoKSk7IH0KKworICAgICAgICAgICAgdmlydHVhbCB2
b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFJlY3QmKQogICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAg
IH0KKyAgICAgICAgfTsKIAotICAgICAgICAgICAgdmlydHVhbCBNYW5hZ2VkVGV4dHVyZSogdGV4
dHVyZSgpIHsgcmV0dXJuIG1fdGV4dHVyZS5nZXQoKTsgfQorICAgICAgICBjbGFzcyBUZXh0dXJl
IDogcHVibGljIENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmUgeworICAgICAgICBw
dWJsaWM6CisgICAgICAgICAgICBjbGFzcyBUZXh0dXJlVXBkYXRlIDogcHVibGljIENDVGV4dHVy
ZVVwZGF0ZXI6OlRleHR1cmVVcGRhdGUgeworICAgICAgICAgICAgcHVibGljOgorICAgICAgICAg
ICAgICAgIHN0YXRpYyBQYXNzT3duUHRyPFRleHR1cmVVcGRhdGU+IGNyZWF0ZShUZXh0dXJlKiB0
ZXh0dXJlKSB7IHJldHVybiBhZG9wdFB0cihuZXcgVGV4dHVyZVVwZGF0ZSh0ZXh0dXJlKSk7IH0K
IAotICAgICAgICAgICAgdmlydHVhbCBQYXNzT3duUHRyPE1hbmFnZWRUZXh0dXJlPiByZXBsYWNl
VGV4dHVyZShUZXh0dXJlTWFuYWdlciogbWFuYWdlcikKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBPd25QdHI8TWFuYWdlZFRleHR1cmU+IG9sZCA9IG1fdGV4dHVyZS5yZWxlYXNlKCk7
Ci0gICAgICAgICAgICAgICAgbV90ZXh0dXJlID0gTWFuYWdlZFRleHR1cmU6OmNyZWF0ZShtYW5h
Z2VyKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gb2xkLnJlbGVhc2UoKTsKLSAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB2b2lkIHNldFRleHR1cmVJZCh1bnNpZ25lZCB0ZXh0dXJlSWQp
IHsgbV90ZXh0dXJlSWQgPSB0ZXh0dXJlSWQ7IH0KKworICAgICAgICAgICAgICAgIHZvaWQgdXBk
YXRlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgbV90ZXh0dXJlLT50ZXh0dXJlVXBkYXRlcigpLT5sYXllcigpLT51cGRh
dGUoKTsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fdGV4dHVyZUlkKTsKKyAgICAgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgIHZpcnR1YWwgYm9vbCBuZWVkUHJlcGFyZVJlY3QoKQorICAgICAgICAgICAg
cHJpdmF0ZToKKyAgICAgICAgICAgICAgICBleHBsaWNpdCBUZXh0dXJlVXBkYXRlKFRleHR1cmUq
IHRleHR1cmUpCisgICAgICAgICAgICAgICAgICAgIDogbV90ZXh0dXJlSWQoMCkKKyAgICAgICAg
ICAgICAgICAgICAgLCBtX3RleHR1cmUodGV4dHVyZSkKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgdW5zaWduZWQgbV90ZXh0dXJlSWQ7Cisg
ICAgICAgICAgICAgICAgVGV4dHVyZSogbV90ZXh0dXJlOworICAgICAgICAgICAgfTsKKworICAg
ICAgICAgICAgVGV4dHVyZShDb250ZW50TGF5ZXJUZXh0dXJlVXBkYXRlciogdGV4dHVyZVVwZGF0
ZXIsIFBhc3NPd25QdHI8TWFuYWdlZFRleHR1cmU+IHRleHR1cmUpCisgICAgICAgICAgICAgICAg
OiBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlKHRleHR1cmUpCisgICAgICAgICAg
ICAgICAgLCBtX3RleHR1cmVVcGRhdGVyKHRleHR1cmVVcGRhdGVyKQogICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIHJldHVybiBtX3RleHR1cmVVcGRhdGVyLT5sYXllcigpLT5uZWVkUHJl
cGFyZVJlY3QoKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgdmlydHVhbCB2b2lkIHBy
ZXBhcmVSZWN0KEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBUZXh0dXJlQWxsb2NhdG9yKiBh
bGxvY2F0b3IsIGNvbnN0IEludFJlY3QmIC8qIHNvdXJjZVJlY3QgKi8sIGNvbnN0IEludFJlY3Qm
IC8qIGRlc3RSZWN0ICovKQorICAgICAgICAgICAgdmlydHVhbCB2b2lkIHByZXBhcmUoR3JhcGhp
Y3NDb250ZXh0M0QqIGNvbnRleHQsIFRleHR1cmVBbGxvY2F0b3IqIGFsbG9jYXRvcikKICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBtX3RleHR1cmVVcGRhdGVyLT5sYXllcigpLT5wcmVw
YXJlUmVjdCgpOwotICAgICAgICAgICAgICAgIGlmICghbV90ZXh0dXJlLT50ZXh0dXJlSWQoKSkK
LSAgICAgICAgICAgICAgICAgICAgbV90ZXh0dXJlLT5hbGxvY2F0ZVRleHR1cmUoY29udGV4dCwg
YWxsb2NhdG9yKTsKKyAgICAgICAgICAgICAgICBtX3RleHR1cmVVcGRhdGVyLT5sYXllcigpLT5w
cmVwYXJlKCk7CisgICAgICAgICAgICAgICAgQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4
dHVyZTo6cHJlcGFyZShjb250ZXh0LCBhbGxvY2F0b3IpOwogICAgICAgICAgICAgfQogCi0gICAg
ICAgICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50c1JlY3QoY29uc3QgSW50UmVjdCYgLyog
c291cmNlUmVjdCAqLykKKyAgICAgICAgICAgIHZpcnR1YWwgUGFzc093blB0cjxDQ1RleHR1cmVV
cGRhdGVyOjpUZXh0dXJlVXBkYXRlPiBjcmVhdGVDQ1RleHR1cmVVcGRhdGUoKQogICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIG1fdGV4dHVyZVVwZGF0ZXItPmxheWVyKCktPnBhaW50Q29u
dGVudHNSZWN0KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIFRleHR1cmVVcGRhdGU6OmNyZWF0
ZSh0aGlzKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgdmlydHVhbCB2b2lkIHVwZGF0
ZVJlY3QoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIC8qIHNvdXJj
ZVJlY3QgKi8sIGNvbnN0IEludFJlY3QmIC8qIGRlc3RSZWN0ICovKQorICAgICAgICAgICAgdmly
dHVhbCB2b2lkIHB1c2hQcm9wZXJ0aWVzVG8oQ0NUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZVVwZGF0
ZSogdXBkYXRlKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1fdGV4dHVyZVVwZGF0
ZXItPmxheWVyKCktPnVwZGF0ZVJlY3QoKTsKLSAgICAgICAgICAgICAgICBpZiAobV90ZXh0dXJl
LT50ZXh0dXJlSWQoKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+YmluZFRleHR1cmUo
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fdGV4dHVyZS0+dGV4dHVyZUlkKCkpOwor
ICAgICAgICAgICAgICAgIG1fdGV4dHVyZVVwZGF0ZXItPmxheWVyKCktPnB1c2hQcm9wZXJ0aWVz
VG8oKTsKKyAgICAgICAgICAgICAgICBUZXh0dXJlVXBkYXRlKiB0ZXh0dXJlVXBkYXRlID0gc3Rh
dGljX2Nhc3Q8VGV4dHVyZVVwZGF0ZSo+KHVwZGF0ZSk7CisKKyAgICAgICAgICAgICAgICB0ZXh0
dXJlVXBkYXRlLT5zZXRUZXh0dXJlSWQodGV4dHVyZSgpLT50ZXh0dXJlSWQoKSk7CiAgICAgICAg
ICAgICB9CiAKKyAgICAgICAgICAgIENvbnRlbnRMYXllclRleHR1cmVVcGRhdGVyKiB0ZXh0dXJl
VXBkYXRlcigpIHsgcmV0dXJuIG1fdGV4dHVyZVVwZGF0ZXI7IH0KKwogICAgICAgICBwcml2YXRl
OgotICAgICAgICAgICAgT3duUHRyPE1hbmFnZWRUZXh0dXJlPiBtX3RleHR1cmU7CiAgICAgICAg
ICAgICBDb250ZW50TGF5ZXJUZXh0dXJlVXBkYXRlciogbV90ZXh0dXJlVXBkYXRlcjsKICAgICAg
ICAgfTsKIApAQCAtMTAzOSw3ICsxMDYxLDcgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBDb250ZW50TGF5ZXJUZXh0dXJlVXBkYXRlcihsYXllcikpOwogICAgICAg
ICB9CiAKLSAgICAgICAgdmlydHVhbCBQYXNzT3duUHRyPExheWVyVGV4dHVyZVVwZGF0ZXI6OlRl
eHR1cmU+IGNyZWF0ZVRleHR1cmUoVGV4dHVyZU1hbmFnZXIqIG1hbmFnZXIpCisgICAgICAgIHZp
cnR1YWwgUGFzc093blB0cjxDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlPiBjcmVh
dGVUZXh0dXJlKFRleHR1cmVNYW5hZ2VyKiBtYW5hZ2VyKQogICAgICAgICB7CiAgICAgICAgICAg
ICByZXR1cm4gYWRvcHRQdHIobmV3IFRleHR1cmUodGhpcywgTWFuYWdlZFRleHR1cmU6OmNyZWF0
ZShtYW5hZ2VyKSkpOwogICAgICAgICB9CkBAIC0xMDU5LDU0ICsxMDgxLDU0IEBAIHB1YmxpYzoK
ICAgICAgICAgQ29udGVudExheWVyQ2hyb21pdW1XaXRoVXBkYXRlVHJhY2tpbmcqIGxheWVyKCkg
eyByZXR1cm4gbV9sYXllcjsgfQogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgZXhwbGljaXQgQ29u
dGVudExheWVyVGV4dHVyZVVwZGF0ZXIoQ29udGVudExheWVyQ2hyb21pdW1XaXRoVXBkYXRlVHJh
Y2tpbmcqIGxheWVyKSA6IG1fbGF5ZXIobGF5ZXIpIHsgfQorICAgICAgICBleHBsaWNpdCBDb250
ZW50TGF5ZXJUZXh0dXJlVXBkYXRlcihDb250ZW50TGF5ZXJDaHJvbWl1bVdpdGhVcGRhdGVUcmFj
a2luZyogbGF5ZXIpCisgICAgICAgICAgICA6IENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIoUGFp
bnRlcjo6Y3JlYXRlKCkpCisgICAgICAgICAgICAsIG1fbGF5ZXIobGF5ZXIpCisgICAgICAgIHsK
KyAgICAgICAgfQogCiAgICAgICAgIENvbnRlbnRMYXllckNocm9taXVtV2l0aFVwZGF0ZVRyYWNr
aW5nKiBtX2xheWVyOwogICAgIH07CiAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxDb250ZW50TGF5
ZXJDaHJvbWl1bVdpdGhVcGRhdGVUcmFja2luZz4gY3JlYXRlKENDTGF5ZXJEZWxlZ2F0ZSogZGVs
ZWdhdGUsIGJvb2wgbmVlZFByZXBhcmVSZWN0KQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPENvbnRl
bnRMYXllckNocm9taXVtV2l0aFVwZGF0ZVRyYWNraW5nPiBjcmVhdGUoQ0NMYXllckRlbGVnYXRl
KiBkZWxlZ2F0ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ29udGVudExh
eWVyQ2hyb21pdW1XaXRoVXBkYXRlVHJhY2tpbmcoZGVsZWdhdGUsIG5lZWRQcmVwYXJlUmVjdCkp
OworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENvbnRlbnRMYXllckNocm9taXVtV2l0aFVw
ZGF0ZVRyYWNraW5nKGRlbGVnYXRlKSk7CiAgICAgfQogCiAgICAgdmlydHVhbCB2b2lkIGNyZWF0
ZVRleHR1cmVVcGRhdGVyKGNvbnN0IENDTGF5ZXJUcmVlSG9zdCopCiAgICAgewogICAgICAgICBt
X2NvbnRlbnRMYXllclRleHR1cmVVcGRhdGVyID0gQ29udGVudExheWVyVGV4dHVyZVVwZGF0ZXI6
OmNyZWF0ZSh0aGlzKTsKICAgICB9Ci0gICAgdmlydHVhbCBMYXllclRleHR1cmVVcGRhdGVyKiB0
ZXh0dXJlVXBkYXRlcigpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudExheWVyVGV4dHVyZVVwZGF0
ZXIuZ2V0KCk7IH0KKyAgICB2aXJ0dWFsIENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIqIHRleHR1
cmVVcGRhdGVyKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50TGF5ZXJUZXh0dXJlVXBkYXRlci5n
ZXQoKTsgfQogCiAgICAgdm9pZCBwYWludENvbnRlbnRzKCkgeyBtX3BhaW50Q29udGVudHNDb3Vu
dCsrOyB9CiAgICAgaW50IHBhaW50Q29udGVudHNDb3VudCgpIHsgcmV0dXJuIG1fcGFpbnRDb250
ZW50c0NvdW50OyB9CiAKLSAgICB2b2lkIHByZXBhcmVSZWN0KCkgeyBtX3ByZXBhcmVSZWN0Q291
bnQrKzsgfQotICAgIGludCBwcmVwYXJlUmVjdENvdW50KCkgeyByZXR1cm4gbV9wcmVwYXJlUmVj
dENvdW50OyB9Ci0KLSAgICB2b2lkIHBhaW50Q29udGVudHNSZWN0KCkgeyBtX3BhaW50Q29udGVu
dHNSZWN0Q291bnQrKzsgfQotICAgIGludCBwYWludENvbnRlbnRzUmVjdENvdW50KCkgeyByZXR1
cm4gbV9wYWludENvbnRlbnRzUmVjdENvdW50OyB9CisgICAgdm9pZCBwcmVwYXJlKCkgeyBtX3By
ZXBhcmVDb3VudCsrOyB9CisgICAgaW50IHByZXBhcmVDb3VudCgpIHsgcmV0dXJuIG1fcHJlcGFy
ZUNvdW50OyB9CiAKLSAgICB2b2lkIHVwZGF0ZVJlY3QoKSB7IG1fdXBkYXRlUmVjdENvdW50Kys7
IH0KLSAgICBpbnQgdXBkYXRlUmVjdENvdW50KCkgeyByZXR1cm4gbV91cGRhdGVSZWN0Q291bnQ7
IH0KKyAgICB2b2lkIHB1c2hQcm9wZXJ0aWVzVG8oKSB7IG1fcHVzaFByb3BlcnRpZXNUb0NvdW50
Kys7IH0KKyAgICBpbnQgcHVzaFByb3BlcnRpZXNUb0NvdW50KCkgeyByZXR1cm4gbV9wdXNoUHJv
cGVydGllc1RvQ291bnQ7IH0KIAotICAgIGludCBuZWVkUHJlcGFyZVJlY3QoKSB7IHJldHVybiBt
X25lZWRQcmVwYXJlUmVjdDsgfQorICAgIHZvaWQgdXBkYXRlKCkgeyBtX3VwZGF0ZUNvdW50Kys7
IH0KKyAgICBpbnQgdXBkYXRlQ291bnQoKSB7IHJldHVybiBtX3VwZGF0ZUNvdW50OyB9CiAKIHBy
aXZhdGU6Ci0gICAgZXhwbGljaXQgQ29udGVudExheWVyQ2hyb21pdW1XaXRoVXBkYXRlVHJhY2tp
bmcoQ0NMYXllckRlbGVnYXRlICpkZWxlZ2F0ZSwgYm9vbCBuZWVkUHJlcGFyZVJlY3QpCisgICAg
ZXhwbGljaXQgQ29udGVudExheWVyQ2hyb21pdW1XaXRoVXBkYXRlVHJhY2tpbmcoQ0NMYXllckRl
bGVnYXRlICpkZWxlZ2F0ZSkKICAgICAgICAgOiBDb250ZW50TGF5ZXJDaHJvbWl1bShkZWxlZ2F0
ZSkKLSAgICAgICAgLCBtX25lZWRQcmVwYXJlUmVjdChuZWVkUHJlcGFyZVJlY3QpCiAgICAgICAg
ICwgbV9wYWludENvbnRlbnRzQ291bnQoMCkKLSAgICAgICAgLCBtX3ByZXBhcmVSZWN0Q291bnQo
MCkKLSAgICAgICAgLCBtX3BhaW50Q29udGVudHNSZWN0Q291bnQoMCkKLSAgICAgICAgLCBtX3Vw
ZGF0ZVJlY3RDb3VudCgwKQorICAgICAgICAsIG1fcHJlcGFyZUNvdW50KDApCisgICAgICAgICwg
bV9wdXNoUHJvcGVydGllc1RvQ291bnQoMCkKKyAgICAgICAgLCBtX3VwZGF0ZUNvdW50KDApCiAg
ICAgewogICAgICAgICBzZXRCb3VuZHMoSW50U2l6ZSgxMCwgMTApKTsKICAgICB9CiAKICAgICBS
ZWZQdHI8Q29udGVudExheWVyVGV4dHVyZVVwZGF0ZXI+IG1fY29udGVudExheWVyVGV4dHVyZVVw
ZGF0ZXI7Ci0gICAgYm9vbCBtX25lZWRQcmVwYXJlUmVjdDsKICAgICBpbnQgbV9wYWludENvbnRl
bnRzQ291bnQ7Ci0gICAgaW50IG1fcHJlcGFyZVJlY3RDb3VudDsKLSAgICBpbnQgbV9wYWludENv
bnRlbnRzUmVjdENvdW50OwotICAgIGludCBtX3VwZGF0ZVJlY3RDb3VudDsKKyAgICBpbnQgbV9w
cmVwYXJlQ291bnQ7CisgICAgaW50IG1fcHVzaFByb3BlcnRpZXNUb0NvdW50OworICAgIGludCBt
X3VwZGF0ZUNvdW50OwogfTsKIAogLy8gTGF5ZXIgb3BhY2l0eSBjaGFuZ2UgZHVyaW5nIHBhaW50
IHNob3VsZCBub3QgcHJldmVudCBjb21wb3NpdG9yIHJlc291cmNlcyBmcm9tIGJlaW5nIHVwZGF0
ZWQgZHVyaW5nIGNvbW1pdC4KQEAgLTExMTQsNyArMTEzNiw3IEBAIGNsYXNzIENDTGF5ZXJUcmVl
SG9zdFRlc3RPcGFjaXR5Q2hhbmdlIDogcHVibGljIENDTGF5ZXJUcmVlSG9zdFRlc3QgewogcHVi
bGljOgogICAgIENDTGF5ZXJUcmVlSG9zdFRlc3RPcGFjaXR5Q2hhbmdlKCkKICAgICAgICAgOiBt
X3Rlc3RPcGFjaXR5Q2hhbmdlRGVsZWdhdGUodGhpcykKLSAgICAgICAgLCBtX3VwZGF0ZUNoZWNr
TGF5ZXIoQ29udGVudExheWVyQ2hyb21pdW1XaXRoVXBkYXRlVHJhY2tpbmc6OmNyZWF0ZSgmbV90
ZXN0T3BhY2l0eUNoYW5nZURlbGVnYXRlLCB0cnVlKSkKKyAgICAgICAgLCBtX3VwZGF0ZUNoZWNr
TGF5ZXIoQ29udGVudExheWVyQ2hyb21pdW1XaXRoVXBkYXRlVHJhY2tpbmc6OmNyZWF0ZSgmbV90
ZXN0T3BhY2l0eUNoYW5nZURlbGVnYXRlKSkKICAgICB7CiAgICAgfQogCkBAIC0xMTM2LDE1ICsx
MTU4LDE1IEBAIHB1YmxpYzoKICAgICAgICAgLy8gcGFpbnRDb250ZW50cygpIHNob3VsZCBoYXZl
IGJlZW4gY2FsbGVkIG9uY2UuCiAgICAgICAgIEVYUEVDVF9FUSgxLCBtX3VwZGF0ZUNoZWNrTGF5
ZXItPnBhaW50Q29udGVudHNDb3VudCgpKTsKIAotICAgICAgICAvLyBwYWludENvbnRlbnRzUmVj
dCgpIHNob3VsZCBoYXZlIGJlZW4gY2FsbGVkIHRoZSBzYW1lCi0gICAgICAgIC8vIGFtb3VudCBv
ZiB0aW1lcyBhcyBwcmVwYXJlUmVjdCgpLgotICAgICAgICBFWFBFQ1RfRVEobV91cGRhdGVDaGVj
a0xheWVyLT5wcmVwYXJlUmVjdENvdW50KCksCi0gICAgICAgICAgICAgICAgICBtX3VwZGF0ZUNo
ZWNrTGF5ZXItPnBhaW50Q29udGVudHNSZWN0Q291bnQoKSk7CisgICAgICAgIC8vIHB1c2hQcm9w
ZXJ0aWVzVG8oKSBzaG91bGQgaGF2ZSBiZWVuIGNhbGxlZCB0aGUgc2FtZQorICAgICAgICAvLyBh
bW91bnQgb2YgdGltZXMgYXMgcHJlcGFyZSgpLgorICAgICAgICBFWFBFQ1RfRVEobV91cGRhdGVD
aGVja0xheWVyLT5wcmVwYXJlQ291bnQoKSwKKyAgICAgICAgICAgICAgICAgIG1fdXBkYXRlQ2hl
Y2tMYXllci0+cHVzaFByb3BlcnRpZXNUb0NvdW50KCkpOwogCi0gICAgICAgIC8vIHVwZGF0ZVJl
Y3QoKSBzaG91bGQgaGF2ZSBiZWVuIGNhbGxlZCB0aGUgc2FtZQotICAgICAgICAvLyBhbW91bnQg
b2YgdGltZXMgYXMgcGFpbnRDb250ZW50c1JlY3QoKS4KLSAgICAgICAgRVhQRUNUX0VRKG1fdXBk
YXRlQ2hlY2tMYXllci0+cGFpbnRDb250ZW50c1JlY3RDb3VudCgpLAotICAgICAgICAgICAgICAg
ICAgbV91cGRhdGVDaGVja0xheWVyLT51cGRhdGVSZWN0Q291bnQoKSk7CisgICAgICAgIC8vIHVw
ZGF0ZSgpIHNob3VsZCBoYXZlIGJlZW4gY2FsbGVkIHRoZSBzYW1lCisgICAgICAgIC8vIGFtb3Vu
dCBvZiB0aW1lcyBhcyBwdXNoUHJvcGVydGllc1RvKCkuCisgICAgICAgIEVYUEVDVF9FUShtX3Vw
ZGF0ZUNoZWNrTGF5ZXItPnB1c2hQcm9wZXJ0aWVzVG9Db3VudCgpLAorICAgICAgICAgICAgICAg
ICAgbV91cGRhdGVDaGVja0xheWVyLT51cGRhdGVDb3VudCgpKTsKIAogICAgICAgICAvLyBjbGVh
ciBtX3VwZGF0ZUNoZWNrTGF5ZXIgc28gQ0NMYXllclRyZWVIb3N0IGRpZXMuCiAgICAgICAgIG1f
dXBkYXRlQ2hlY2tMYXllci5jbGVhcigpOwpAQCAtMTE2MCwxMSArMTE4MiwxMiBAQCBURVNUX0Yo
Q0NMYXllclRyZWVIb3N0VGVzdE9wYWNpdHlDaGFuZ2UsIHJ1bk11bHRpVGhyZWFkKQogICAgIHJ1
blRlc3QodHJ1ZSk7CiB9CiAKLS8vIHByZXBhcmVSZWN0KCkgc2hvdWxkIG5vdCBiZSBjYWxsZWQg
d2hlbiBuZWVkUHJlcGFyZVJlY3QoKSByZXR1cm5zIGZhbHNlLgotY2xhc3MgQ0NMYXllclRyZWVI
b3N0VGVzdE5vUHJlcGFyZVJlY3QgOiBwdWJsaWMgQ0NMYXllclRyZWVIb3N0VGVzdCB7CisvLyBw
cmVwYXJlUmVjdCgpIHNob3VsZCBub3QgYmUgY2FsbGVkIHdoZW4gbmVlZFByZXBhcmUoKSByZXR1
cm5zIGZhbHNlLgorY2xhc3MgQ0NMYXllclRyZWVIb3N0VGVzdE5vUHJlcGFyZSA6IHB1YmxpYyBD
Q0xheWVyVHJlZUhvc3RUZXN0IHsKIHB1YmxpYzoKLSAgICBDQ0xheWVyVHJlZUhvc3RUZXN0Tm9Q
cmVwYXJlUmVjdCgpCi0gICAgICAgIDogbV91cGRhdGVDaGVja0xheWVyKENvbnRlbnRMYXllckNo
cm9taXVtV2l0aFVwZGF0ZVRyYWNraW5nOjpjcmVhdGUoJm1fZGVsZWdhdGUsIGZhbHNlKSkKKyAg
ICBDQ0xheWVyVHJlZUhvc3RUZXN0Tm9QcmVwYXJlKCkKKyAgICAgICAgOiBtX3VwZGF0ZUNoZWNr
TGF5ZXIoQ29udGVudExheWVyQ2hyb21pdW1XaXRoVXBkYXRlVHJhY2tpbmc6OmNyZWF0ZSgmbV9k
ZWxlZ2F0ZSkpCisgICAgICAgICwgbV9jb21taXRDb3VudCgwKQogICAgIHsKICAgICB9CiAKQEAg
LTExNzgsMjkgKzEyMDEsNDAgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIGNvbW1pdENv
bXBsZXRlT25DQ1RocmVhZChDQ0xheWVyVHJlZUhvc3RJbXBsKikKICAgICB7Ci0gICAgICAgIGVu
ZFRlc3QoKTsKKyAgICAgICAgaWYgKG1fY29tbWl0Q291bnQrKyA8IDUpCisgICAgICAgICAgICBw
b3N0U2V0TmVlZHNBbmltYXRlQW5kQ29tbWl0VG9NYWluVGhyZWFkKCk7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIGVuZFRlc3QoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0
ZUFuZExheW91dChkb3VibGUgZnJhbWVCZWdpblRpbWUpCisgICAgeworICAgICAgICBtX3VwZGF0
ZUNoZWNrTGF5ZXItPnNldE5lZWRzRGlzcGxheSgpOwogICAgIH0KIAogICAgIHZpcnR1YWwgdm9p
ZCBhZnRlclRlc3QoKQogICAgIHsKLSAgICAgICAgLy8gcGFpbnRDb250ZW50cygpIHNob3VsZCBo
YXZlIGJlZW4gY2FsbGVkIG9uY2UuCi0gICAgICAgIEVYUEVDVF9FUSgxLCBtX3VwZGF0ZUNoZWNr
TGF5ZXItPnBhaW50Q29udGVudHNDb3VudCgpKTsKKyAgICAgICAgLy8gcGFpbnRDb250ZW50cygp
IHNob3VsZCBoYXZlIGJlZW4gY2FsbGVkIHRoZSBzYW1lIGFtb3V0CisgICAgICAgIC8vIG9mIHRp
bWVzIGFzIG1fY29tbWl0Q291bnQuCisgICAgICAgIEVYUEVDVF9FUShtX2NvbW1pdENvdW50LCBt
X3VwZGF0ZUNoZWNrTGF5ZXItPnBhaW50Q29udGVudHNDb3VudCgpKTsKIAotICAgICAgICAvLyBw
cmVwYXJlUmVjdCgpIHNob3VsZCBub3QgaGF2ZSBiZWVuIGNhbGxlZC4KLSAgICAgICAgRVhQRUNU
X0VRKDAsIG1fdXBkYXRlQ2hlY2tMYXllci0+cHJlcGFyZVJlY3RDb3VudCgpKTsKKyAgICAgICAg
Ly8gcHJlcGFyZSgpIHNob3VsZCBoYXZlIGJlZW4gY2FsbGVkIHR3aWNlIGFzIG5vIHByZXBhcmUg
aXMgbmVlZGVkCisgICAgICAgIC8vIGZvciB0aGUgdGhpcmQgdXBkYXRlLgorICAgICAgICBFWFBF
Q1RfRVEoMiwgbV91cGRhdGVDaGVja0xheWVyLT5wcmVwYXJlQ291bnQoKSk7CiAKLSAgICAgICAg
Ly8gdXBkYXRlUmVjdCgpIHNob3VsZCBoYXZlIGJlZW4gY2FsbGVkIHRoZSBzYW1lCi0gICAgICAg
IC8vIGFtb3VudCBvZiB0aW1lcyBhcyBwYWludENvbnRlbnRzUmVjdCgpLgotICAgICAgICBFWFBF
Q1RfRVEobV91cGRhdGVDaGVja0xheWVyLT5wYWludENvbnRlbnRzUmVjdENvdW50KCksCi0gICAg
ICAgICAgICAgICAgICBtX3VwZGF0ZUNoZWNrTGF5ZXItPnVwZGF0ZVJlY3RDb3VudCgpKTsKKyAg
ICAgICAgLy8gdXBkYXRlKCkgc2hvdWxkIGhhdmUgYmVlbiBjYWxsZWQgdGhlIHNhbWUgYW1vdW50
IG9mIHRpbWVzIGFzCisgICAgICAgIC8vIHB1c2hQcm9wZXJ0aWVzVG8oKS4KKyAgICAgICAgRVhQ
RUNUX0VRKG1fdXBkYXRlQ2hlY2tMYXllci0+cHVzaFByb3BlcnRpZXNUb0NvdW50KCksCisgICAg
ICAgICAgICAgICAgICBtX3VwZGF0ZUNoZWNrTGF5ZXItPnVwZGF0ZUNvdW50KCkpOwogICAgIH0K
IAogcHJpdmF0ZToKICAgICBNb2NrTGF5ZXJEZWxlZ2F0ZSBtX2RlbGVnYXRlOwogICAgIFJlZlB0
cjxDb250ZW50TGF5ZXJDaHJvbWl1bVdpdGhVcGRhdGVUcmFja2luZz4gbV91cGRhdGVDaGVja0xh
eWVyOworICAgIGludCBtX2NvbW1pdENvdW50OwogfTsKIAotVEVTVF9GKENDTGF5ZXJUcmVlSG9z
dFRlc3ROb1ByZXBhcmVSZWN0LCBydW5NdWx0aVRocmVhZCkKK1RFU1RfRihDQ0xheWVyVHJlZUhv
c3RUZXN0Tm9QcmVwYXJlLCBydW5NdWx0aVRocmVhZCkKIHsKICAgICBydW5UZXN0KHRydWUpOwog
fQpAQCAtMTIwOSw4ICsxMjQzLDcgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdFRlc3ROb1ByZXBh
cmVSZWN0LCBydW5NdWx0aVRocmVhZCkKIGNsYXNzIENDTGF5ZXJUcmVlSG9zdFRlc3RBdG9taWND
b21taXQgOiBwdWJsaWMgQ0NMYXllclRyZWVIb3N0VGVzdCB7CiBwdWJsaWM6CiAgICAgQ0NMYXll
clRyZWVIb3N0VGVzdEF0b21pY0NvbW1pdCgpCi0gICAgICAgIDogbV91cGRhdGVDaGVja0xheWVy
KENvbnRlbnRMYXllckNocm9taXVtV2l0aFVwZGF0ZVRyYWNraW5nOjpjcmVhdGUoJm1fZGVsZWdh
dGUsIHRydWUpKQotICAgICAgICAsIG1fbnVtQ29tbWl0cygwKQorICAgICAgICA6IG1fdXBkYXRl
Q2hlY2tMYXllcihDb250ZW50TGF5ZXJDaHJvbWl1bVdpdGhVcGRhdGVUcmFja2luZzo6Y3JlYXRl
KCZtX2RlbGVnYXRlKSkKICAgICB7CiAgICAgfQogCkBAIC0xMjk2LDcgKzEzMjksNiBAQCBwdWJs
aWM6CiBwcml2YXRlOgogICAgIE1vY2tMYXllckRlbGVnYXRlIG1fZGVsZWdhdGU7CiAgICAgUmVm
UHRyPENvbnRlbnRMYXllckNocm9taXVtV2l0aFVwZGF0ZVRyYWNraW5nPiBtX3VwZGF0ZUNoZWNr
TGF5ZXI7Ci0gICAgaW50IG1fbnVtQ29tbWl0czsKIH07CiAKIFRFU1RfRihDQ0xheWVyVHJlZUhv
c3RUZXN0QXRvbWljQ29tbWl0LCBydW5NdWx0aVRocmVhZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvVGlsZWRMYXllckNocm9taXVtVGVzdC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RpbGVkTGF5ZXJDaHJvbWl1bVRlc3QuY3BwCmluZGV4IDkz
Y2ZiNTcuLmJhNWE5MmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
VGlsZWRMYXllckNocm9taXVtVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9UaWxlZExheWVyQ2hyb21pdW1UZXN0LmNwcApAQCAtMjYsNyArMjYsOCBAQAogCiAjaW5j
bHVkZSAiVGlsZWRMYXllckNocm9taXVtLmgiCiAKLSNpbmNsdWRlICJMYXllclRleHR1cmVVcGRh
dGVyLmgiCisjaW5jbHVkZSAiQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5oIgorI2luY2x1ZGUg
IkxheWVyUGFpbnRlckNocm9taXVtLmgiCiAjaW5jbHVkZSAiTWFuYWdlZFRleHR1cmUuaCIKICNp
bmNsdWRlICJUZXh0dXJlTWFuYWdlci5oIgogI2luY2x1ZGUgImNjL0NDU2luZ2xlVGhyZWFkUHJv
eHkuaCIgLy8gRm9yIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZApAQCAtNDAsMjcgKzQxLDQzIEBA
IG5hbWVzcGFjZSB7CiAKIGNsYXNzIEZha2VIYW5kbGVyIDogcHVibGljIExheWVyVGV4dHVyZVVw
ZGF0ZXI6OkhhbmRsZXIgewogcHVibGljOgotICAgIHZpcnR1YWwgdm9pZCBoYW5kbGUoTGF5ZXJU
ZXh0dXJlVXBkYXRlcjo6VGV4dHVyZSosIGNvbnN0IEludFJlY3QmLCBjb25zdCBJbnRSZWN0Jikg
eyB9CisgICAgdmlydHVhbCB2b2lkIGhhbmRsZShMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJl
KikgeyB9CiB9OwogCi1jbGFzcyBGYWtlTGF5ZXJUZXh0dXJlVXBkYXRlciA6IHB1YmxpYyBMYXll
clRleHR1cmVVcGRhdGVyIHsKK2NsYXNzIEZha2VMYXllclRleHR1cmVVcGRhdGVyIDogcHVibGlj
IENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIgewogcHVibGljOgotICAgIGNsYXNzIFRleHR1cmUg
OiBwdWJsaWMgTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZSB7CisgICAgY2xhc3MgUGFpbnRl
ciA6IHB1YmxpYyBMYXllclBhaW50ZXJDaHJvbWl1bSB7CiAgICAgcHVibGljOgotICAgICAgICBU
ZXh0dXJlKFBhc3NPd25QdHI8TWFuYWdlZFRleHR1cmU+IHRleHR1cmUpIDogbV90ZXh0dXJlKHRl
eHR1cmUpIHsgfQorICAgICAgICBzdGF0aWMgUGFzc093blB0cjxQYWludGVyPiBjcmVhdGUoKSB7
IHJldHVybiBhZG9wdFB0cihuZXcgUGFpbnRlcigpKTsgfQogCi0gICAgICAgIHZpcnR1YWwgTWFu
YWdlZFRleHR1cmUqIHRleHR1cmUoKSB7IHJldHVybiBtX3RleHR1cmUuZ2V0KCk7IH0KKyAgICAg
ICAgdmlydHVhbCB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFJlY3QmKQor
ICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQor
ICAgIH07CisgICAgY2xhc3MgVGV4dHVyZSA6IHB1YmxpYyBDYW52YXNMYXllclRleHR1cmVVcGRh
dGVyOjpUZXh0dXJlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIGNsYXNzIFRleHR1cmVVcGRhdGUg
OiBwdWJsaWMgQ0NUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZVVwZGF0ZSB7CisgICAgICAgIHB1Ymxp
YzoKKyAgICAgICAgICAgIHN0YXRpYyBQYXNzT3duUHRyPFRleHR1cmVVcGRhdGU+IGNyZWF0ZSgp
IHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBUZXh0dXJlVXBkYXRlKCkpOyB9CisKKyAgICAgICAgICAg
IHZvaWQgdXBkYXRlKEdyYXBoaWNzQ29udGV4dDNEKikgeyB9CisKKyAgICAgICAgICAgIHByaXZh
dGU6CisgICAgICAgICAgICAgICAgZXhwbGljaXQgVGV4dHVyZVVwZGF0ZSgpIHsgfQorICAgICAg
ICAgICAgfTsKKworICAgICAgICBUZXh0dXJlKFBhc3NPd25QdHI8TWFuYWdlZFRleHR1cmU+IHRl
eHR1cmUpIDogQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZSh0ZXh0dXJlKSB7IH0K
IAotICAgICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlUmVjdChHcmFwaGljc0NvbnRleHQzRCosIGNv
bnN0IEludFJlY3QmLCBjb25zdCBJbnRSZWN0JikgeyB9CisgICAgICAgIHZpcnR1YWwgUGFzc093
blB0cjxDQ1RleHR1cmVVcGRhdGVyOjpUZXh0dXJlVXBkYXRlPiBjcmVhdGVDQ1RleHR1cmVVcGRh
dGUoKSB7IHJldHVybiBUZXh0dXJlVXBkYXRlOjpjcmVhdGUoKTsgfQogCi0gICAgcHJpdmF0ZToK
LSAgICAgICAgT3duUHRyPE1hbmFnZWRUZXh0dXJlPiBtX3RleHR1cmU7CisgICAgICAgIHZpcnR1
YWwgdm9pZCBwdXNoUHJvcGVydGllc1RvKENDVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmVVcGRhdGUq
KSB7IH0KICAgICB9OwogCi0gICAgRmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKSB7IH0KKyAgICBG
YWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpIDogQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcihQYWlu
dGVyOjpjcmVhdGUoKSkgeyB9CiAgICAgdmlydHVhbCB+RmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIo
KSB7IH0KIAotICAgIHZpcnR1YWwgUGFzc093blB0cjxMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0
dXJlPiBjcmVhdGVUZXh0dXJlKFRleHR1cmVNYW5hZ2VyKiBtYW5hZ2VyKSB7IHJldHVybiBhZG9w
dFB0cihuZXcgVGV4dHVyZShNYW5hZ2VkVGV4dHVyZTo6Y3JlYXRlKG1hbmFnZXIpKSk7IH0KKyAg
ICB2aXJ0dWFsIFBhc3NPd25QdHI8Q2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZT4g
Y3JlYXRlVGV4dHVyZShUZXh0dXJlTWFuYWdlciogbWFuYWdlcikgeyByZXR1cm4gYWRvcHRQdHIo
bmV3IFRleHR1cmUoTWFuYWdlZFRleHR1cmU6OmNyZWF0ZShtYW5hZ2VyKSkpOyB9CiAgICAgdmly
dHVhbCBPcmllbnRhdGlvbiBvcmllbnRhdGlvbigpIHsgcmV0dXJuIEJvdHRvbVVwT3JpZW50YXRp
b247IH0KICAgICB2aXJ0dWFsIFNhbXBsZWRUZXhlbEZvcm1hdCBzYW1wbGVkVGV4ZWxGb3JtYXQo
R0MzRGVudW0pIHsgcmV0dXJuIFNhbXBsZWRUZXhlbEZvcm1hdFJHQkE7IH0KICAgICB2aXJ0dWFs
IHZvaWQgcGFpbnRDb250ZW50cyhjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50U2l6ZSYsIGludCwg
ZmxvYXQpIHsgfQpAQCAtODIsNyArOTksNyBAQCBjbGFzcyBGYWtlVGlsZWRMYXllckNocm9taXVt
IDogcHVibGljIFRpbGVkTGF5ZXJDaHJvbWl1bSB7CiBwdWJsaWM6CiAgICAgZXhwbGljaXQgRmFr
ZVRpbGVkTGF5ZXJDaHJvbWl1bShUZXh0dXJlTWFuYWdlciogdGV4dHVyZU1hbmFnZXIpCiAgICAg
ICAgIDogVGlsZWRMYXllckNocm9taXVtKDApCi0gICAgICAgICwgbV9mYWtlVGV4dHVyZVVwZGF0
ZXIoYWRvcHRSZWYobmV3IEZha2VMYXllclRleHR1cmVVcGRhdGVyKSkKKyAgICAgICAgLCBtX2Zh
a2VUZXh0dXJlVXBkYXRlcihhZG9wdFJlZihuZXcgRmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKSkp
CiAgICAgICAgICwgbV90ZXh0dXJlTWFuYWdlcih0ZXh0dXJlTWFuYWdlcikKICAgICB7CiAgICAg
ICAgIHNldFRpbGVTaXplKEludFNpemUoMTAwLCAxMDApKTsKQEAgLTExMSw3ICsxMjgsNyBAQCBw
dWJsaWM6CiBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUZXh0dXJlVXBkYXRlcihj
b25zdCBDQ0xheWVyVHJlZUhvc3QqKSB7IH0KIAotICAgIHZpcnR1YWwgTGF5ZXJUZXh0dXJlVXBk
YXRlciogdGV4dHVyZVVwZGF0ZXIoKSBjb25zdAorICAgIHZpcnR1YWwgQ2FudmFzTGF5ZXJUZXh0
dXJlVXBkYXRlciogdGV4dHVyZVVwZGF0ZXIoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJu
IG1fZmFrZVRleHR1cmVVcGRhdGVyLmdldCgpOwogICAgIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121337</attachid>
            <date>2012-01-05 15:01:46 -0800</date>
            <delta_ts>2012-01-09 17:43:44 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>async-commit.diff</filename>
            <type>text/plain</type>
            <size>125919</size>
            <attacher name="David Reveman">reveman</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Jp
dG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHAK
aW5kZXggOGVhNDFmMi4uYWZlNWEyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQml0bWFwQ2Fu
dmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHAKQEAgLTQ1LDExICs0NSwyNCBAQCBCaXRtYXBDYW52
YXNMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlOjp+VGV4dHVyZSgpCiB7CiB9CiAKLXZvaWQg
Qml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZTo6dXBkYXRlUmVjdChHcmFw
aGljc0NvbnRleHQzRCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3Qg
SW50UmVjdCYgZGVzdFJlY3QpCitQYXNzT3duUHRyPENDVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmVV
cGRhdGU+IEJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU6OmNyZWF0ZUND
VGV4dHVyZVVwZGF0ZSgpCiB7Ci0gICAgQVNTRVJUKHRleHR1cmUoKS0+dGV4dHVyZUlkKCkpOwot
ICAgIGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCB0
ZXh0dXJlKCktPnRleHR1cmVJZCgpKTsKLSAgICB0ZXh0dXJlVXBkYXRlcigpLT51cGRhdGVUZXh0
dXJlUmVjdChjb250ZXh0LCB0ZXh0dXJlKCktPmZvcm1hdCgpLCBzb3VyY2VSZWN0LCBkZXN0UmVj
dCk7CisgICAgcmV0dXJuIENDVGV4dHVyZVVwZGF0ZXI6OlN1YkltYWdlVGV4dHVyZVVwZGF0ZTo6
Y3JlYXRlKCk7Cit9CisKK3ZvaWQgQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4
dHVyZTo6cHVzaFByb3BlcnRpZXNUbyhDQ1RleHR1cmVVcGRhdGVyOjpUZXh0dXJlVXBkYXRlKiB1
cGRhdGUpCit7CisgICAgQ0NUZXh0dXJlVXBkYXRlcjo6U3ViSW1hZ2VUZXh0dXJlVXBkYXRlKiBz
dWJJbWFnZVVwZGF0ZSA9IHN0YXRpY19jYXN0PENDVGV4dHVyZVVwZGF0ZXI6OlN1YkltYWdlVGV4
dHVyZVVwZGF0ZSo+KHVwZGF0ZSk7CisKKyAgICBJbnRSZWN0IGRlc3RSZWN0ID0gdXBkYXRlUmVj
dCgpOworICAgIEludFBvaW50IG9mZnNldCA9IGNvbnRlbnRPZmZzZXQoKTsKKyAgICBJbnRSZWN0
IHNvdXJjZVJlY3QgPSBJbnRSZWN0KEludFBvaW50KGRlc3RSZWN0LngoKSArIG9mZnNldC54KCks
IGRlc3RSZWN0LnkoKSArIG9mZnNldC55KCkpLCBkZXN0UmVjdC5zaXplKCkpOworCisgICAgc3Vi
SW1hZ2VVcGRhdGUtPnNldEZvcm1hdCh0ZXh0dXJlKCktPmZvcm1hdCgpKTsKKyAgICBzdWJJbWFn
ZVVwZGF0ZS0+c2V0VGV4dHVyZUlkKHRleHR1cmUoKS0+dGV4dHVyZUlkKCkpOworICAgIHN1Yklt
YWdlVXBkYXRlLT5zZXRSZWN0KGRlc3RSZWN0KTsKKyAgICBQbGF0Zm9ybUNhbnZhczo6QXV0b0xv
Y2tlciBsb2NrZXIoJnRleHR1cmVVcGRhdGVyKCktPmNhbnZhcygpKTsKKyAgICBzdWJJbWFnZVVw
ZGF0ZS0+c2V0UGl4ZWxEYXRhKGxvY2tlci5waXhlbHMoKSwgdGV4dHVyZVVwZGF0ZXIoKS0+Y29u
dGVudFJlY3QoKSwgc291cmNlUmVjdCk7CiB9CiAKIFBhc3NSZWZQdHI8Qml0bWFwQ2FudmFzTGF5
ZXJUZXh0dXJlVXBkYXRlcj4gQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6Y3JlYXRl
KFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+IHBhaW50ZXIsIGJvb2wgdXNlTWFwVGV4
U3ViSW1hZ2UpCkBAIC01OSw3ICs3Miw2IEBAIFBhc3NSZWZQdHI8Qml0bWFwQ2FudmFzTGF5ZXJU
ZXh0dXJlVXBkYXRlcj4gQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6Y3JlCiAKIEJp
dG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OkJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVw
ZGF0ZXIoUGFzc093blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4gcGFpbnRlciwgYm9vbCB1c2VN
YXBUZXhTdWJJbWFnZSkKICAgICA6IENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIocGFpbnRlcikK
LSAgICAsIG1fdGV4U3ViSW1hZ2UodXNlTWFwVGV4U3ViSW1hZ2UpCiB7CiB9CiAKQEAgLTY3LDcg
Kzc5LDcgQEAgQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6fkJpdG1hcENhbnZhc0xh
eWVyVGV4dHVyZVVwZGF0ZXIoKQogewogfQogCi1QYXNzT3duUHRyPExheWVyVGV4dHVyZVVwZGF0
ZXI6OlRleHR1cmU+IEJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OmNyZWF0ZVRleHR1
cmUoVGV4dHVyZU1hbmFnZXIqIG1hbmFnZXIpCitQYXNzT3duUHRyPENhbnZhc0xheWVyVGV4dHVy
ZVVwZGF0ZXI6OlRleHR1cmU+IEJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OmNyZWF0
ZVRleHR1cmUoVGV4dHVyZU1hbmFnZXIqIG1hbmFnZXIpCiB7CiAgICAgcmV0dXJuIGFkb3B0UHRy
KG5ldyBUZXh0dXJlKHRoaXMsIE1hbmFnZWRUZXh0dXJlOjpjcmVhdGUobWFuYWdlcikpKTsKIH0K
QEAgLTgxLDggKzkzLDYgQEAgTGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2FtcGxlZFRleGVsRm9ybWF0
IEJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OnNhbXBsZWQKIAogdm9pZCBCaXRtYXBD
YW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpwYWludENvbnRlbnRzKGNvbnN0IEludFJlY3QmIGNv
bnRlbnRSZWN0LCBjb25zdCBJbnRTaXplJiB0aWxlU2l6ZSwgaW50IGJvcmRlclRleGVscywgZmxv
YXQgY29udGVudHNTY2FsZSkKIHsKLSAgICBtX3RleFN1YkltYWdlLnNldFN1YkltYWdlU2l6ZSh0
aWxlU2l6ZSk7Ci0KICAgICBtX2NhbnZhcy5yZXNpemUoY29udGVudFJlY3Quc2l6ZSgpKTsKICAg
ICAvLyBBc3N1bXB0aW9uOiBpZiBhIHRpbGVyIGlzIHVzaW5nIGJvcmRlciB0ZXhlbHMsIHRoZW4g
aXQgaXMgYmVjYXVzZSB0aGUKICAgICAvLyBsYXllciBpcyBsaWtlbHkgdG8gYmUgZmlsdGVyZWQg
b3IgdHJhbnNmb3JtZWQuIEJlY2F1c2Ugb2YgaXQgbWlnaHQgYmUKQEAgLTkwLDEzICsxMDAsNyBA
QCB2b2lkIEJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OnBhaW50Q29udGVudHMoY29u
c3QgSW50UmVjdCYgY29udGVudFJlY3QsCiAgICAgUGxhdGZvcm1DYW52YXM6OlBhaW50ZXI6OlRl
eHRPcHRpb24gdGV4dE9wdGlvbiA9CiAgICAgICAgIGJvcmRlclRleGVscyA/IFBsYXRmb3JtQ2Fu
dmFzOjpQYWludGVyOjpHcmF5c2NhbGVUZXh0IDogUGxhdGZvcm1DYW52YXM6OlBhaW50ZXI6OlN1
YnBpeGVsVGV4dDsKICAgICBQbGF0Zm9ybUNhbnZhczo6UGFpbnRlciBjYW52YXNQYWludGVyKCZt
X2NhbnZhcywgdGV4dE9wdGlvbik7Ci0gICAgQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6cGFp
bnRDb250ZW50cygqY2FudmFzUGFpbnRlci5jb250ZXh0KCksIGNvbnRlbnRSZWN0LCBjb250ZW50
c1NjYWxlKTsKLX0KLQotdm9pZCBCaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjp1cGRh
dGVUZXh0dXJlUmVjdChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgdW5zaWduZWQgZm9ybWF0
LCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCkKLXsK
LSAgICBQbGF0Zm9ybUNhbnZhczo6QXV0b0xvY2tlciBsb2NrZXIoJm1fY2FudmFzKTsKLSAgICBt
X3RleFN1YkltYWdlLnVwbG9hZChsb2NrZXIucGl4ZWxzKCksIGNvbnRlbnRSZWN0KCksIHNvdXJj
ZVJlY3QsIGRlc3RSZWN0LCBmb3JtYXQsIGNvbnRleHQpOworICAgIHBhaW50Q2FudmFzQ29udGVu
dHMoKmNhbnZhc1BhaW50ZXIuY29udGV4dCgpLCBjb250ZW50UmVjdCwgY29udGVudHNTY2FsZSk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0JpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0JpdG1hcENh
bnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuaAppbmRleCAxOTM4ODU1Li44NGIzN2ExIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9CaXRtYXBDYW52
YXNMYXllclRleHR1cmVVcGRhdGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5oCkBAIC0zMCw3
ICszMCw2IEBACiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogCiAjaW5jbHVkZSAi
Q2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5oIgotI2luY2x1ZGUgIkxheWVyVGV4dHVyZVN1Yklt
YWdlLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1DYW52YXMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewpAQCAtNDUsNyArNDQsOCBAQCBwdWJsaWM6CiAgICAgICAgIFRleHR1cmUoQml0bWFwQ2FudmFz
TGF5ZXJUZXh0dXJlVXBkYXRlciosIFBhc3NPd25QdHI8TWFuYWdlZFRleHR1cmU+KTsKICAgICAg
ICAgdmlydHVhbCB+VGV4dHVyZSgpOwogCi0gICAgICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVSZWN0
KEdyYXBoaWNzQ29udGV4dDNEKiwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50
UmVjdCYgZGVzdFJlY3QpOworICAgICAgICB2aXJ0dWFsIFBhc3NPd25QdHI8Q0NUZXh0dXJlVXBk
YXRlcjo6VGV4dHVyZVVwZGF0ZT4gY3JlYXRlQ0NUZXh0dXJlVXBkYXRlKCk7CisgICAgICAgIHZp
cnR1YWwgdm9pZCBwdXNoUHJvcGVydGllc1RvKENDVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmVVcGRh
dGUqKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIEJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVw
ZGF0ZXIqIHRleHR1cmVVcGRhdGVyKCkgeyByZXR1cm4gbV90ZXh0dXJlVXBkYXRlcjsgfQpAQCAt
NTYsMTYgKzU2LDE1IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxCaXRtYXBDYW52
YXNMYXllclRleHR1cmVVcGRhdGVyPiBjcmVhdGUoUGFzc093blB0cjxMYXllclBhaW50ZXJDaHJv
bWl1bT4sIGJvb2wgdXNlTWFwVGV4U3ViSW1hZ2UpOwogICAgIHZpcnR1YWwgfkJpdG1hcENhbnZh
c0xheWVyVGV4dHVyZVVwZGF0ZXIoKTsKIAotICAgIHZpcnR1YWwgUGFzc093blB0cjxMYXllclRl
eHR1cmVVcGRhdGVyOjpUZXh0dXJlPiBjcmVhdGVUZXh0dXJlKFRleHR1cmVNYW5hZ2VyKik7Cisg
ICAgdmlydHVhbCBQYXNzT3duUHRyPENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU+
IGNyZWF0ZVRleHR1cmUoVGV4dHVyZU1hbmFnZXIqKTsKICAgICB2aXJ0dWFsIFNhbXBsZWRUZXhl
bEZvcm1hdCBzYW1wbGVkVGV4ZWxGb3JtYXQoR0MzRGVudW0gdGV4dHVyZUZvcm1hdCk7CiAgICAg
dmlydHVhbCB2b2lkIHBhaW50Q29udGVudHMoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNv
bnN0IEludFNpemUmIHRpbGVTaXplLCBpbnQgYm9yZGVyVGV4ZWxzLCBmbG9hdCBjb250ZW50c1Nj
YWxlKTsKLSAgICB2b2lkIHVwZGF0ZVRleHR1cmVSZWN0KEdyYXBoaWNzQ29udGV4dDNEKiwgdW5z
aWduZWQgZm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBk
ZXN0UmVjdCk7CisgICAgUGxhdGZvcm1DYW52YXMmIGNhbnZhcygpIHsgcmV0dXJuIG1fY2FudmFz
OyB9CiAKIHByaXZhdGU6CiAgICAgQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcihQYXNz
T3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPiwgYm9vbCB1c2VNYXBUZXhTdWJJbWFnZSk7CiAK
ICAgICBQbGF0Zm9ybUNhbnZhcyBtX2NhbnZhczsKLSAgICBMYXllclRleHR1cmVTdWJJbWFnZSBt
X3RleFN1YkltYWdlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQml0bWFwU2tQaWN0dXJl
Q2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9CaXRtYXBTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVy
LmNwcAppbmRleCBkZjAwZTRhLi5lNWFiNWZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9CaXRtYXBTa1BpY3R1cmVDYW52YXNMYXllclRleHR1
cmVVcGRhdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9CaXRtYXBTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmNwcApAQCAtMzEs
NiArMzEsNyBAQAogCiAjaW5jbHVkZSAiQml0bWFwU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJl
VXBkYXRlci5oIgogCisjaW5jbHVkZSAiRXh0ZW5zaW9uczNEQ2hyb21pdW0uaCIKICNpbmNsdWRl
ICJMYXllclBhaW50ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIlNrQ2FudmFzLmgiCiAjaW5jbHVk
ZSAic2tpYS9leHQvcGxhdGZvcm1fY2FudmFzLmgiCkBAIC00MCwyNCArNDEsNTkgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogQml0bWFwU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6
VGV4dHVyZTo6VGV4dHVyZShCaXRtYXBTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVy
KiB0ZXh0dXJlVXBkYXRlciwgUGFzc093blB0cjxNYW5hZ2VkVGV4dHVyZT4gdGV4dHVyZSkKICAg
ICA6IENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmUodGV4dHVyZSkKICAgICAsIG1f
dGV4dHVyZVVwZGF0ZXIodGV4dHVyZVVwZGF0ZXIpCisgICAgLCBtX21hcHBlZEJ1ZmZlcigwKQog
ewogfQogCi12b2lkIEJpdG1hcFNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OlRl
eHR1cmU6OnBhaW50Q29udGVudHNSZWN0KGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QpCitib29s
IEJpdG1hcFNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU6Om5lZWRQ
cmVwYXJlKCkKIHsKLSAgICBzaXplX3QgYnVmZmVyU2l6ZSA9IFRleHR1cmVNYW5hZ2VyOjptZW1v
cnlVc2VCeXRlcyhzb3VyY2VSZWN0LnNpemUoKSwgdGV4dHVyZSgpLT5mb3JtYXQoKSk7Ci0gICAg
bV9waXhlbERhdGEgPSBhZG9wdEFycmF5UHRyKG5ldyB1aW50OF90W2J1ZmZlclNpemVdKTsKLSAg
ICBPd25QdHI8U2tDYW52YXM+IGNhbnZhcyA9IGFkb3B0UHRyKG5ldyBza2lhOjpQbGF0Zm9ybUNh
bnZhcyhzb3VyY2VSZWN0LndpZHRoKCksIHNvdXJjZVJlY3QuaGVpZ2h0KCksIGZhbHNlLCBtX3Bp
eGVsRGF0YS5nZXQoKSkpOwotICAgIHRleHR1cmVVcGRhdGVyKCktPnBhaW50Q29udGVudHNSZWN0
KGNhbnZhcy5nZXQoKSwgc291cmNlUmVjdCk7CisgICAgaWYgKHRleHR1cmVVcGRhdGVyKCktPnVz
ZU1hcFRleFN1YkltYWdlKCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJuICF0
ZXh0dXJlKCktPnRleHR1cmVJZCgpOworfQorCit2b2lkIEJpdG1hcFNrUGljdHVyZUNhbnZhc0xh
eWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU6OnByZXBhcmUoR3JhcGhpY3NDb250ZXh0M0QqIGNv
bnRleHQsIFRleHR1cmVBbGxvY2F0b3IqIGFsbG9jYXRvcikKK3sKKyAgICBBU1NFUlQoIW1fbWFw
cGVkQnVmZmVyKTsKKyAgICBBU1NFUlQoIXVwZGF0ZVJlY3QoKS5pc0VtcHR5KCkpOworCisgICAg
aWYgKHRleHR1cmVVcGRhdGVyKCktPnVzZU1hcFRleFN1YkltYWdlKCkpIHsKKyAgICAgICAgRXh0
ZW5zaW9uczNEQ2hyb21pdW0qIGV4dGVuc2lvbnMgPSBzdGF0aWNfY2FzdDxFeHRlbnNpb25zM0RD
aHJvbWl1bSo+KGNvbnRleHQtPmdldEV4dGVuc2lvbnMoKSk7CisgICAgICAgIG1fbWFwcGVkQnVm
ZmVyID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KGV4dGVuc2lvbnMtPm1hcFRleFN1YkltYWdlMkRD
SFJPTUlVTShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgdXBkYXRlUmVjdCgpLngo
KSwgdXBkYXRlUmVjdCgpLnkoKSwgdXBkYXRlUmVjdCgpLndpZHRoKCksIHVwZGF0ZVJlY3QoKS5o
ZWlnaHQoKSwgdGV4dHVyZSgpLT5mb3JtYXQoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVE
X0JZVEUsIEV4dGVuc2lvbnMzRENocm9taXVtOjpXUklURV9PTkxZKSk7CisgICAgfQorCisgICAg
dGV4dHVyZSgpLT5hbGxvY2F0ZShhbGxvY2F0b3IpOwogfQogCi12b2lkIEJpdG1hcFNrUGljdHVy
ZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU6OnVwZGF0ZVJlY3QoR3JhcGhpY3ND
b250ZXh0M0QqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJl
Y3QmIGRlc3RSZWN0KQorUGFzc093blB0cjxDQ1RleHR1cmVVcGRhdGVyOjpUZXh0dXJlVXBkYXRl
PiBCaXRtYXBTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlOjpjcmVh
dGVDQ1RleHR1cmVVcGRhdGUoKQogewotICAgIEFTU0VSVCh0ZXh0dXJlKCktPnRleHR1cmVJZCgp
KTsKLSAgICBjb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8y
RCwgdGV4dHVyZSgpLT50ZXh0dXJlSWQoKSk7Ci0gICAgQVNTRVJUKG1fcGl4ZWxEYXRhLmdldCgp
KTsKLSAgICB0ZXh0dXJlVXBkYXRlcigpLT51cGRhdGVUZXh0dXJlUmVjdChjb250ZXh0LCB0ZXh0
dXJlKCktPmZvcm1hdCgpLCBkZXN0UmVjdCwgbV9waXhlbERhdGEuZ2V0KCkpOwotICAgIG1fcGl4
ZWxEYXRhLmNsZWFyKCk7CisgICAgcmV0dXJuIENDVGV4dHVyZVVwZGF0ZXI6OlN1YkltYWdlVGV4
dHVyZVVwZGF0ZTo6Y3JlYXRlKCk7Cit9CisKK3ZvaWQgQml0bWFwU2tQaWN0dXJlQ2FudmFzTGF5
ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZTo6cHVzaFByb3BlcnRpZXNUbyhDQ1RleHR1cmVVcGRh
dGVyOjpUZXh0dXJlVXBkYXRlKiB1cGRhdGUpCit7CisgICAgQ0NUZXh0dXJlVXBkYXRlcjo6U3Vi
SW1hZ2VUZXh0dXJlVXBkYXRlKiBzdWJJbWFnZVVwZGF0ZSA9IHN0YXRpY19jYXN0PENDVGV4dHVy
ZVVwZGF0ZXI6OlN1YkltYWdlVGV4dHVyZVVwZGF0ZSo+KHVwZGF0ZSk7CisKKyAgICBJbnRSZWN0
IGRlc3RSZWN0ID0gdXBkYXRlUmVjdCgpOworICAgIEludFJlY3Qgc291cmNlUmVjdCA9IEludFJl
Y3QoSW50UG9pbnQoZGVzdFJlY3QueCgpICsgY29udGVudE9mZnNldCgpLngoKSwgZGVzdFJlY3Qu
eSgpICsgY29udGVudE9mZnNldCgpLnkoKSksIGRlc3RSZWN0LnNpemUoKSk7CisKKyAgICBzdWJJ
bWFnZVVwZGF0ZS0+c2V0Rm9ybWF0KHRleHR1cmUoKS0+Zm9ybWF0KCkpOworICAgIHN1YkltYWdl
VXBkYXRlLT5zZXRUZXh0dXJlSWQodGV4dHVyZSgpLT50ZXh0dXJlSWQoKSk7CisgICAgc3ViSW1h
Z2VVcGRhdGUtPnNldFJlY3QoZGVzdFJlY3QpOworCisgICAgaWYgKG1fbWFwcGVkQnVmZmVyKSB7
CisgICAgICAgIE93blB0cjxTa0NhbnZhcz4gY2FudmFzID0gYWRvcHRQdHIobmV3IHNraWE6OlBs
YXRmb3JtQ2FudmFzKGRlc3RSZWN0LndpZHRoKCksIGRlc3RSZWN0LmhlaWdodCgpLCBmYWxzZSwg
bV9tYXBwZWRCdWZmZXIpKTsKKyAgICAgICAgdGV4dHVyZVVwZGF0ZXIoKS0+cGFpbnRDb250ZW50
c1JlY3QoY2FudmFzLmdldCgpLCBzb3VyY2VSZWN0KTsKKyAgICAgICAgc3ViSW1hZ2VVcGRhdGUt
PnNldE1hcHBlZEJ1ZmZlcihtX21hcHBlZEJ1ZmZlcik7CisgICAgICAgIG1fbWFwcGVkQnVmZmVy
ID0gMDsKKyAgICB9IGVsc2UgeworICAgICAgICBzaXplX3QgYnVmZmVyU2l6ZSA9IFRleHR1cmVN
YW5hZ2VyOjptZW1vcnlVc2VCeXRlcyhkZXN0UmVjdC5zaXplKCksIHRleHR1cmUoKS0+Zm9ybWF0
KCkpOworICAgICAgICBPd25BcnJheVB0cjx1aW50OF90PiBwaXhlbERhdGEgPSBhZG9wdEFycmF5
UHRyKG5ldyB1aW50OF90W2J1ZmZlclNpemVdKTsKKyAgICAgICAgT3duUHRyPFNrQ2FudmFzPiBj
YW52YXMgPSBhZG9wdFB0cihuZXcgc2tpYTo6UGxhdGZvcm1DYW52YXMoZGVzdFJlY3Qud2lkdGgo
KSwgZGVzdFJlY3QuaGVpZ2h0KCksIGZhbHNlLCBwaXhlbERhdGEuZ2V0KCkpKTsKKyAgICAgICAg
dGV4dHVyZVVwZGF0ZXIoKS0+cGFpbnRDb250ZW50c1JlY3QoY2FudmFzLmdldCgpLCBzb3VyY2VS
ZWN0KTsKKyAgICAgICAgc3ViSW1hZ2VVcGRhdGUtPnNldFBpeGVsRGF0YShwaXhlbERhdGEucmVs
ZWFzZSgpKTsKKyAgICB9CiB9CiAKIFBhc3NSZWZQdHI8Qml0bWFwU2tQaWN0dXJlQ2FudmFzTGF5
ZXJUZXh0dXJlVXBkYXRlcj4gQml0bWFwU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRl
cjo6Y3JlYXRlKFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+IHBhaW50ZXIsIGJvb2wg
dXNlTWFwVGV4U3ViSW1hZ2UpCkBAIC02Nyw3ICsxMDMsNyBAQCBQYXNzUmVmUHRyPEJpdG1hcFNr
UGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI+IEJpdG1hcFNrUGljdHVyZUNhbnZhc0xh
eWVyVAogCiBCaXRtYXBTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpCaXRtYXBT
a1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyKFBhc3NPd25QdHI8TGF5ZXJQYWludGVy
Q2hyb21pdW0+IHBhaW50ZXIsIGJvb2wgdXNlTWFwVGV4U3ViSW1hZ2UpCiAgICAgOiBTa1BpY3R1
cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyKHBhaW50ZXIpCi0gICAgLCBtX3RleFN1YkltYWdl
KHVzZU1hcFRleFN1YkltYWdlKQorICAgICwgbV91c2VNYXBUZXhTdWJJbWFnZSh1c2VNYXBUZXhT
dWJJbWFnZSkKIHsKIH0KIApAQCAtNzUsNyArMTExLDcgQEAgQml0bWFwU2tQaWN0dXJlQ2FudmFz
TGF5ZXJUZXh0dXJlVXBkYXRlcjo6fkJpdG1hcFNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVw
ZGEKIHsKIH0KIAotUGFzc093blB0cjxMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlPiBCaXRt
YXBTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpjcmVhdGVUZXh0dXJlKFRleHR1
cmVNYW5hZ2VyKiBtYW5hZ2VyKQorUGFzc093blB0cjxDYW52YXNMYXllclRleHR1cmVVcGRhdGVy
OjpUZXh0dXJlPiBCaXRtYXBTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpjcmVh
dGVUZXh0dXJlKFRleHR1cmVNYW5hZ2VyKiBtYW5hZ2VyKQogewogICAgIHJldHVybiBhZG9wdFB0
cihuZXcgVGV4dHVyZSh0aGlzLCBNYW5hZ2VkVGV4dHVyZTo6Y3JlYXRlKG1hbmFnZXIpKSk7CiB9
CkBAIC04OSw3ICsxMjUsNiBAQCBMYXllclRleHR1cmVVcGRhdGVyOjpTYW1wbGVkVGV4ZWxGb3Jt
YXQgQml0bWFwU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcgogCiB2b2lkIEJpdG1h
cFNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OnBhaW50Q29udGVudHMoY29uc3Qg
SW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IEludFNpemUmIHRpbGVTaXplLCBpbnQgYm9yZGVy
VGV4ZWxzLCBmbG9hdCBjb250ZW50c1NjYWxlKQogewotICAgIG1fdGV4U3ViSW1hZ2Uuc2V0U3Vi
SW1hZ2VTaXplKHRpbGVTaXplKTsKICAgICBTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRh
dGVyOjpwYWludENvbnRlbnRzKGNvbnRlbnRSZWN0LCB0aWxlU2l6ZSwgYm9yZGVyVGV4ZWxzLCBj
b250ZW50c1NjYWxlKTsKIH0KIApAQCAtMTAxLDExICsxMzYsNiBAQCB2b2lkIEJpdG1hcFNrUGlj
dHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OnBhaW50Q29udGVudHNSZWN0KFNrQ2FudmFz
KiBjYW52YQogICAgIGRyYXdQaWN0dXJlKGNhbnZhcyk7CiB9CiAKLXZvaWQgQml0bWFwU2tQaWN0
dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6dXBkYXRlVGV4dHVyZVJlY3QoR3JhcGhpY3ND
b250ZXh0M0QqIGNvbnRleHQsIEdDM0RlbnVtIGZvcm1hdCwgY29uc3QgSW50UmVjdCYgZGVzdFJl
Y3QsIGNvbnN0IHVpbnQ4X3QqIHBpeGVscykKLXsKLSAgICBtX3RleFN1YkltYWdlLnVwbG9hZChw
aXhlbHMsIGRlc3RSZWN0LCBkZXN0UmVjdCwgZGVzdFJlY3QsIGZvcm1hdCwgY29udGV4dCk7Ci19
Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKICNlbmRpZiAvLyBVU0UoU0tJQSkKICNlbmRpZiAv
LyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9CaXRtYXBTa1BpY3R1cmVDYW52YXNMYXllclRl
eHR1cmVVcGRhdGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9CaXRtYXBTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmgKaW5kZXggNTYxYTgy
OS4uMGVhZDE2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vQml0bWFwU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0JpdG1hcFNrUGljdHVy
ZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuaApAQCAtNDIsMjkgKzQyLDM0IEBAIHB1YmxpYzoK
ICAgICBwdWJsaWM6CiAgICAgICAgIFRleHR1cmUoQml0bWFwU2tQaWN0dXJlQ2FudmFzTGF5ZXJU
ZXh0dXJlVXBkYXRlciosIFBhc3NPd25QdHI8TWFuYWdlZFRleHR1cmU+KTsKIAotICAgICAgICB2
aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50c1JlY3QoY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCk7
Ci0gICAgICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVSZWN0KEdyYXBoaWNzQ29udGV4dDNEKiwgY29u
c3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpOworICAgICAg
ICB2aXJ0dWFsIGJvb2wgbmVlZFByZXBhcmUoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHByZXBh
cmUoR3JhcGhpY3NDb250ZXh0M0QqLCBUZXh0dXJlQWxsb2NhdG9yKik7CisKKyAgICAgICAgdmly
dHVhbCBQYXNzT3duUHRyPENDVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmVVcGRhdGU+IGNyZWF0ZUND
VGV4dHVyZVVwZGF0ZSgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcHVzaFByb3BlcnRpZXNUbyhD
Q1RleHR1cmVVcGRhdGVyOjpUZXh0dXJlVXBkYXRlKik7CiAKICAgICBwcml2YXRlOgogICAgICAg
ICBCaXRtYXBTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyKiB0ZXh0dXJlVXBkYXRl
cigpIHsgcmV0dXJuIG1fdGV4dHVyZVVwZGF0ZXI7IH0KIAotICAgICAgICBPd25BcnJheVB0cjx1
aW50OF90PiBtX3BpeGVsRGF0YTsKICAgICAgICAgQml0bWFwU2tQaWN0dXJlQ2FudmFzTGF5ZXJU
ZXh0dXJlVXBkYXRlciogbV90ZXh0dXJlVXBkYXRlcjsKKyAgICAgICAgT3duQXJyYXlQdHI8dWlu
dDhfdD4gbV9waXhlbERhdGE7CisgICAgICAgIHVpbnQ4X3QqIG1fbWFwcGVkQnVmZmVyOwogICAg
IH07CiAKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxCaXRtYXBTa1BpY3R1cmVDYW52YXNMYXllclRl
eHR1cmVVcGRhdGVyPiBjcmVhdGUoUGFzc093blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4sIGJv
b2wgdXNlTWFwVGV4U3ViSW1hZ2UpOwogICAgIHZpcnR1YWwgfkJpdG1hcFNrUGljdHVyZUNhbnZh
c0xheWVyVGV4dHVyZVVwZGF0ZXIoKTsKIAotICAgIHZpcnR1YWwgUGFzc093blB0cjxMYXllclRl
eHR1cmVVcGRhdGVyOjpUZXh0dXJlPiBjcmVhdGVUZXh0dXJlKFRleHR1cmVNYW5hZ2VyKik7Cisg
ICAgdmlydHVhbCBQYXNzT3duUHRyPENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU+
IGNyZWF0ZVRleHR1cmUoVGV4dHVyZU1hbmFnZXIqKTsKICAgICB2aXJ0dWFsIFNhbXBsZWRUZXhl
bEZvcm1hdCBzYW1wbGVkVGV4ZWxGb3JtYXQoR0MzRGVudW0gdGV4dHVyZUZvcm1hdCk7CiAgICAg
dmlydHVhbCB2b2lkIHBhaW50Q29udGVudHMoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNv
bnN0IEludFNpemUmIHRpbGVTaXplLCBpbnQgYm9yZGVyVGV4ZWxzLCBmbG9hdCBjb250ZW50c1Nj
YWxlKTsKICAgICB2b2lkIHBhaW50Q29udGVudHNSZWN0KFNrQ2FudmFzKiwgY29uc3QgSW50UmVj
dCYgc291cmNlUmVjdCk7CiAgICAgdm9pZCB1cGRhdGVUZXh0dXJlUmVjdChHcmFwaGljc0NvbnRl
eHQzRCosIEdDM0RlbnVtIGZvcm1hdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QsIGNvbnN0IHVp
bnQ4X3QqIHBpeGVscyk7CisgICAgYm9vbCB1c2VNYXBUZXhTdWJJbWFnZSgpIHsgcmV0dXJuIG1f
dXNlTWFwVGV4U3ViSW1hZ2U7IH0KIAogcHJpdmF0ZToKICAgICBCaXRtYXBTa1BpY3R1cmVDYW52
YXNMYXllclRleHR1cmVVcGRhdGVyKFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+LCBi
b29sIHVzZU1hcFRleFN1YkltYWdlKTsKIAotICAgIExheWVyVGV4dHVyZVN1YkltYWdlIG1fdGV4
U3ViSW1hZ2U7CisgICAgYm9vbCBtX3VzZU1hcFRleFN1YkltYWdlOwogfTsKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKICNlbmRpZiAvLyBVU0UoU0tJQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVy
Q2hyb21pdW0uY3BwCmluZGV4IDNlMDU4ODEuLjJlOGM0NDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFz
MkRMYXllckNocm9taXVtLmNwcApAQCAtNTYsMTggKzU2LDE0IEBAIENhbnZhczJETGF5ZXJDaHJv
bWl1bTo6VXBkYXRlclRleHR1cmU6On5VcGRhdGVyVGV4dHVyZSgpCiB7CiB9CiAKLWJvb2wgQ2Fu
dmFzMkRMYXllckNocm9taXVtOjpVcGRhdGVyVGV4dHVyZTo6bmVlZFByZXBhcmVSZWN0KCkKK2Jv
b2wgQ2FudmFzMkRMYXllckNocm9taXVtOjpVcGRhdGVyVGV4dHVyZTo6bmVlZFByZXBhcmUoKQog
ewogICAgIHJldHVybiAhbV90ZXh0dXJlLT50ZXh0dXJlSWQoKTsKIH0KIAotdm9pZCBDYW52YXMy
RExheWVyQ2hyb21pdW06OlVwZGF0ZXJUZXh0dXJlOjpwcmVwYXJlUmVjdChHcmFwaGljc0NvbnRl
eHQzRCosIFRleHR1cmVBbGxvY2F0b3IqIGFsbG9jYXRvciwgY29uc3QgSW50UmVjdCYgLyogc291
cmNlUmVjdCAqLywgY29uc3QgSW50UmVjdCYgLyogZGVzdFJlY3QgKi8pCit2b2lkIENhbnZhczJE
TGF5ZXJDaHJvbWl1bTo6VXBkYXRlclRleHR1cmU6OnByZXBhcmUoR3JhcGhpY3NDb250ZXh0M0Qq
IGNvbnRleHQsIFRleHR1cmVBbGxvY2F0b3IqIGFsbG9jYXRvcikKIHsKICAgICBtX3RleHR1cmUt
PmFsbG9jYXRlKGFsbG9jYXRvcik7Ci19Ci0KLXZvaWQgQ2FudmFzMkRMYXllckNocm9taXVtOjpV
cGRhdGVyVGV4dHVyZTo6dXBkYXRlUmVjdChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgY29u
c3QgSW50UmVjdCYgLyogc291cmNlUmVjdCAqLywgY29uc3QgSW50UmVjdCYgLyogZGVzdFJlY3Qg
Ki8pCi17CiAgICAgbV9sYXllci0+dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhjb250ZXh0KTsK
IH0KIApAQCAtMTcyLDcgKzE2OCw3IEBAIHZvaWQgQ2FudmFzMkRMYXllckNocm9taXVtOjpmb3JF
YWNoQ29tcG9zaXRvclJlc291cmNlKExheWVyVGV4dHVyZVVwZGF0ZXI6OkhhbmRsCiAgICAgaWYg
KCFtX2JhY2tUZXh0dXJlSWQgfHwgIW1fdXBkYXRlclRleHR1cmUgfHwgIW1fdXBkYXRlclRleHR1
cmUtPnRleHR1cmUoKS0+aXNWYWxpZChtX3NpemUsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgaGFuZGxlci5oYW5kbGUobV91cGRhdGVyVGV4dHVyZS5n
ZXQoKSwgSW50UmVjdCgpLCBJbnRSZWN0KCkpOworICAgIGhhbmRsZXIuaGFuZGxlKG1fdXBkYXRl
clRleHR1cmUuZ2V0KCkpOwogfQogCiB2b2lkIENhbnZhczJETGF5ZXJDaHJvbWl1bTo6dW5yZXNl
cnZlQ29udGVudHNUZXh0dXJlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmgKaW5k
ZXggZDM4Zjg1MS4uNDEwNjM2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmgK
QEAgLTU1LDkgKzU1LDggQEAgcHVibGljOgogCiAgICAgICAgIHZpcnR1YWwgTWFuYWdlZFRleHR1
cmUqIHRleHR1cmUoKSB7IHJldHVybiBtX3RleHR1cmUuZ2V0KCk7IH0KIAotICAgICAgICB2aXJ0
dWFsIGJvb2wgbmVlZFByZXBhcmVSZWN0KCk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJl
UmVjdChHcmFwaGljc0NvbnRleHQzRCosIFRleHR1cmVBbGxvY2F0b3IqLCBjb25zdCBJbnRSZWN0
JiAvKiBzb3VyY2VSZWN0ICovLCBjb25zdCBJbnRSZWN0JiAvKiBkZXN0UmVjdCAqLyk7Ci0gICAg
ICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVSZWN0KEdyYXBoaWNzQ29udGV4dDNEKiwgY29uc3QgSW50
UmVjdCYgLyogc291cmNlUmVjdCAqLywgY29uc3QgSW50UmVjdCYgLyogZGVzdFJlY3QgKi8pOwor
ICAgICAgICB2aXJ0dWFsIGJvb2wgbmVlZFByZXBhcmUoKTsKKyAgICAgICAgdmlydHVhbCB2b2lk
IHByZXBhcmUoR3JhcGhpY3NDb250ZXh0M0QqLCBUZXh0dXJlQWxsb2NhdG9yKik7CiAKICAgICBw
cml2YXRlOgogICAgICAgICBleHBsaWNpdCBVcGRhdGVyVGV4dHVyZShDYW52YXMyRExheWVyQ2hy
b21pdW0qLCBQYXNzT3duUHRyPE1hbmFnZWRUZXh0dXJlPik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllclRleHR1cmVVcGRh
dGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZh
c0xheWVyVGV4dHVyZVVwZGF0ZXIuY3BwCmluZGV4IDk0MjFkNzMuLjI5OTg2OWYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVy
VGV4dHVyZVVwZGF0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0NhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuY3BwCkBAIC00NCwxMiArNDQsMTIg
QEAgQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZTo6flRleHR1cmUoKQogewogfQog
Ci1ib29sIENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU6Om5lZWRQcmVwYXJlUmVj
dCgpCitib29sIENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU6Om5lZWRQcmVwYXJl
KCkKIHsKICAgICByZXR1cm4gIW1fdGV4dHVyZS0+dGV4dHVyZUlkKCk7CiB9CiAKLXZvaWQgQ2Fu
dmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZTo6cHJlcGFyZVJlY3QoR3JhcGhpY3NDb250
ZXh0M0QqLCBUZXh0dXJlQWxsb2NhdG9yKiBhbGxvY2F0b3IsIGNvbnN0IEludFJlY3QmIC8qIHNv
dXJjZVJlY3QgKi8sIGNvbnN0IEludFJlY3QmIC8qIGRlc3RSZWN0ICovKQordm9pZCBDYW52YXNM
YXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlOjpwcmVwYXJlKEdyYXBoaWNzQ29udGV4dDNEKiBj
b250ZXh0LCBUZXh0dXJlQWxsb2NhdG9yKiBhbGxvY2F0b3IpCiB7CiAgICAgbV90ZXh0dXJlLT5h
bGxvY2F0ZShhbGxvY2F0b3IpOwogfQpAQCAtNjMsMTEgKzYzLDExIEBAIENhbnZhc0xheWVyVGV4
dHVyZVVwZGF0ZXI6On5DYW52YXNMYXllclRleHR1cmVVcGRhdGVyKCkKIHsKIH0KIAotdm9pZCBD
YW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpwYWludENvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGZsb2F0IGNvbnRlbnRzU2NhbGUp
Cit2b2lkIENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OnBhaW50Q2FudmFzQ29udGVudHMoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgZmxvYXQg
Y29udGVudHNTY2FsZSkKIHsKICAgICBjb250ZXh0LnRyYW5zbGF0ZSgtY29udGVudFJlY3QueCgp
LCAtY29udGVudFJlY3QueSgpKTsKICAgICB7Ci0gICAgICAgIFRSQUNFX0VWRU5UKCJMYXllclRl
eHR1cmVVcGRhdGVyQ2FudmFzOjpwYWludCIsIHRoaXMsIDApOworICAgICAgICBUUkFDRV9FVkVO
VCgiTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhczo6cGFpbnRDYW52YXNDb250ZW50IiwgdGhpcywg
MCk7CiAKICAgICAgICAgSW50UmVjdCBzY2FsZWRDb250ZW50UmVjdCA9IGNvbnRlbnRSZWN0Owog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9D
YW52YXNMYXllclRleHR1cmVVcGRhdGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9DYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmgKaW5kZXggZWIzNjI2MS4u
YTVmODIzNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuaApAQCAt
NDUsMjIgKzQ1LDMyIEBAIHB1YmxpYzoKIAogICAgICAgICB2aXJ0dWFsIE1hbmFnZWRUZXh0dXJl
KiB0ZXh0dXJlKCkgeyByZXR1cm4gbV90ZXh0dXJlLmdldCgpOyB9CiAKLSAgICAgICAgdmlydHVh
bCBib29sIG5lZWRQcmVwYXJlUmVjdCgpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZVJl
Y3QoR3JhcGhpY3NDb250ZXh0M0QqLCBUZXh0dXJlQWxsb2NhdG9yKiwgY29uc3QgSW50UmVjdCYg
Lyogc291cmNlUmVjdCAqLywgY29uc3QgSW50UmVjdCYgLyogZGVzdFJlY3QgKi8pOworICAgICAg
ICB2aXJ0dWFsIGJvb2wgbmVlZFByZXBhcmUoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHByZXBh
cmUoR3JhcGhpY3NDb250ZXh0M0QqLCBUZXh0dXJlQWxsb2NhdG9yKik7CisKKyAgICAgICAgdmly
dHVhbCB2b2lkIHNldFVwZGF0ZVJlY3QoY29uc3QgSW50UmVjdCYgdXBkYXRlUmVjdCkgeyBtX3Vw
ZGF0ZVJlY3QgPSB1cGRhdGVSZWN0OyB9CisgICAgICAgIHZpcnR1YWwgSW50UmVjdCB1cGRhdGVS
ZWN0KCkgY29uc3QgeyByZXR1cm4gbV91cGRhdGVSZWN0OyB9CisKKyAgICAgICAgdmlydHVhbCB2
b2lkIHNldENvbnRlbnRPZmZzZXQoY29uc3QgSW50UG9pbnQmIGNvbnRlbnRPZmZzZXQpIHsgbV9j
b250ZW50T2Zmc2V0ID0gY29udGVudE9mZnNldDsgfQorICAgICAgICB2aXJ0dWFsIEludFBvaW50
IGNvbnRlbnRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRPZmZzZXQ7IH0KIAogICAg
IHByb3RlY3RlZDoKICAgICAgICAgZXhwbGljaXQgVGV4dHVyZShQYXNzT3duUHRyPE1hbmFnZWRU
ZXh0dXJlPik7CiAKICAgICBwcml2YXRlOgogICAgICAgICBPd25QdHI8TWFuYWdlZFRleHR1cmU+
IG1fdGV4dHVyZTsKKyAgICAgICAgSW50UmVjdCBtX3VwZGF0ZVJlY3Q7CisgICAgICAgIEludFBv
aW50IG1fY29udGVudE9mZnNldDsKICAgICB9OwogCiAgICAgdmlydHVhbCB+Q2FudmFzTGF5ZXJU
ZXh0dXJlVXBkYXRlcigpOwogCisgICAgdmlydHVhbCBQYXNzT3duUHRyPFRleHR1cmU+IGNyZWF0
ZVRleHR1cmUoVGV4dHVyZU1hbmFnZXIqKSA9IDA7CisKIHByb3RlY3RlZDoKICAgICBleHBsaWNp
dCBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyKFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21p
dW0+KTsKIAotICAgIHZvaWQgcGFpbnRDb250ZW50cyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBJ
bnRSZWN0JiBjb250ZW50UmVjdCwgZmxvYXQgY29udGVudHNTY2FsZSk7CisgICAgdm9pZCBwYWlu
dENhbnZhc0NvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRS
ZWN0LCBmbG9hdCBjb250ZW50c1NjYWxlKTsKICAgICBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVj
dCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudFJlY3Q7IH0KIAogcHJpdmF0ZToKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXll
ckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9D
b250ZW50TGF5ZXJDaHJvbWl1bS5oCmluZGV4IGNjZDUzZGEuLmY3MmE0NGQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNo
cm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Q29udGVudExheWVyQ2hyb21pdW0uaApAQCAtNTcsOSArNTcsOSBAQCBwcm90ZWN0ZWQ6CiAKIHBy
aXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRleHR1cmVVcGRhdGVyKGNvbnN0IENDTGF5
ZXJUcmVlSG9zdCopOwotICAgIHZpcnR1YWwgTGF5ZXJUZXh0dXJlVXBkYXRlciogdGV4dHVyZVVw
ZGF0ZXIoKSBjb25zdCB7IHJldHVybiBtX3RleHR1cmVVcGRhdGVyLmdldCgpOyB9CisgICAgdmly
dHVhbCBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyKiB0ZXh0dXJlVXBkYXRlcigpIGNvbnN0IHsg
cmV0dXJuIG1fdGV4dHVyZVVwZGF0ZXIuZ2V0KCk7IH0KIAotICAgIFJlZlB0cjxMYXllclRleHR1
cmVVcGRhdGVyPiBtX3RleHR1cmVVcGRhdGVyOworICAgIFJlZlB0cjxDYW52YXNMYXllclRleHR1
cmVVcGRhdGVyPiBtX3RleHR1cmVVcGRhdGVyOwogfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgTGF5
ZXJUeXBlPiBjbGFzcyBTZXJpYWxpemFibGVDb250ZW50TGF5ZXJDaHJvbWl1bSA6IHB1YmxpYyBD
b250ZW50TGF5ZXJDaHJvbWl1bSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9EcmF3aW5nQnVmZmVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRHJhd2luZ0J1ZmZlckNocm9taXVtLmNw
cAppbmRleCBjMDZiZTY2Li41NGE1MTdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9EcmF3aW5nQnVmZmVyQ2hyb21pdW0uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0RyYXdpbmdCdWZmZXJDaHJv
bWl1bS5jcHAKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5o
IgogI2luY2x1ZGUgIldlYkdMTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgImNjL0NDQ2FudmFz
TGF5ZXJJbXBsLmgiCisjaW5jbHVkZSAiY2MvQ0NQcm94eS5oIgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKQEAgLTE0NCw3ICsxNDUsMTAgQEAgdm9pZCBEcmF3aW5nQnVmZmVyOjpwdWJsaXNoVG9Q
bGF0Zm9ybUxheWVyKCkKIFBsYXRmb3JtTGF5ZXIqIERyYXdpbmdCdWZmZXI6OnBsYXRmb3JtTGF5
ZXIoKQogewogICAgIGlmICghbV9wbGF0Zm9ybUxheWVyKSB7Ci0gICAgICAgIG1fcGxhdGZvcm1M
YXllciA9IFdlYkdMTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlPENDQ2FudmFzTGF5ZXJJbXBsPigwKTsK
KyAgICAgICAgaWYgKENDUHJveHk6Omhhc0ltcGxUaHJlYWQoKSkKKyAgICAgICAgICAgIG1fcGxh
dGZvcm1MYXllciA9IFdlYkdMTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlPENDQ2FudmFzTGF5ZXJEYXRh
PigwKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9wbGF0Zm9ybUxheWVyID0gV2ViR0xM
YXllckNocm9taXVtOjpjcmVhdGU8Q0NDYW52YXNMYXllckltcGw+KDApOwogICAgICAgICBtX3Bs
YXRmb3JtTGF5ZXItPnNldERyYXdpbmdCdWZmZXIodGhpcyk7CiAgICAgICAgIG1fcGxhdGZvcm1M
YXllci0+c2V0T3BhcXVlKCFtX2NvbnRleHQtPmdldENvbnRleHRBdHRyaWJ1dGVzKCkuYWxwaGEp
OwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0ZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9GcmFtZUJ1ZmZlclNr
UGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuY3BwCmluZGV4IGE3NWY1NjkuLjQ5Y2E0
MmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0ZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRnJhbWVCdWZmZXJTa1Bp
Y3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmNwcApAQCAtNjMsOSArNjMsNDQgQEAgRnJh
bWVCdWZmZXJTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlOjp+VGV4
dHVyZSgpCiB7CiB9CiAKLXZvaWQgRnJhbWVCdWZmZXJTa1BpY3R1cmVDYW52YXNMYXllclRleHR1
cmVVcGRhdGVyOjpUZXh0dXJlOjp1cGRhdGVSZWN0KEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0
LCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCkKK3Zv
aWQgRnJhbWVCdWZmZXJTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJl
OjpwcmVwYXJlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBUZXh0dXJlQWxsb2NhdG9yKiBh
bGxvY2F0b3IpCiB7Ci0gICAgdGV4dHVyZVVwZGF0ZXIoKS0+dXBkYXRlVGV4dHVyZVJlY3QoY29u
dGV4dCwgdGV4dHVyZSgpLCBzb3VyY2VSZWN0LCBkZXN0UmVjdCk7CisgICAgdGV4dHVyZSgpLT5h
bGxvY2F0ZShhbGxvY2F0b3IpOworCisgICAgLy8gTWFrZSBzdXJlIFNLSUEgdXNlcyB0aGUgY29y
cmVjdCBHTCBjb250ZXh0LgorICAgIGNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IC8vIE5vdGlmeSBTS0lBIHRvIHN5bmMgaXRzIGludGVybmFsIEdMIHN0YXRlLgorICAgIGNvbnRl
eHQtPmdyQ29udGV4dCgpLT5yZXNldENvbnRleHQoKTsKKworICAgIC8vIENyZWF0ZSBhbiBhY2Nl
bGVyYXRlZCBjYW52YXMgdG8gZHJhdyBvbi4KKyAgICBPd25QdHI8U2tDYW52YXM+IGNhbnZhcyA9
IGNyZWF0ZUFjY2VsZXJhdGVkQ2FudmFzKGNvbnRleHQsIHRleHR1cmUoKSk7CisKKyAgICBJbnRS
ZWN0IGRlc3RSZWN0ID0gdXBkYXRlUmVjdCgpOworICAgIEludFBvaW50IG9mZnNldCA9IGNvbnRl
bnRPZmZzZXQoKTsKKyAgICBJbnRSZWN0IHNvdXJjZVJlY3QgPSBJbnRSZWN0KEludFBvaW50KGRl
c3RSZWN0LngoKSArIG9mZnNldC54KCksIGRlc3RSZWN0LnkoKSArIG9mZnNldC55KCkpLCBkZXN0
UmVjdC5zaXplKCkpOworCisgICAgY2FudmFzLT5jbGlwUmVjdChTa1JlY3QoZGVzdFJlY3QpKTsK
KyAgICAvLyBUaGUgY29tcG9zaXRvciBleHBlY3RzIHRoZSB0ZXh0dXJlcyB0byBiZSB1cHNpZGUt
ZG93biBzbyBpdCBjYW4gZmxpcAorICAgIC8vIHRoZSBmaW5hbCBjb21wb3NpdGVkIGltYWdlLiBH
YW5lc2ggcmVuZGVycyB0aGUgaW1hZ2UgdXByaWdodCBzbyB3ZQorICAgIC8vIG5lZWQgdG8gZG8g
YSB5LWZsaXAuCisgICAgY2FudmFzLT50cmFuc2xhdGUoMC4wLCB0ZXh0dXJlKCktPnNpemUoKS5o
ZWlnaHQoKSk7CisgICAgY2FudmFzLT5zY2FsZSgxLjAsIC0xLjApOworCisgICAgdGV4dHVyZVVw
ZGF0ZXIoKS0+dXBkYXRlVGV4dHVyZVJlY3QoY29udGV4dCwgY2FudmFzLmdldCgpLCBzb3VyY2VS
ZWN0LCBkZXN0UmVjdCk7CisKKyAgICAvLyBGbHVzaCBTS0lBIGNvbnRleHQgc28gdGhhdCBhbGwg
dGhlIHJlbmRlcmVkIHN0dWZmIGFwcGVhcnMgb24gdGhlIHRleHR1cmUuCisgICAgY29udGV4dC0+
Z3JDb250ZXh0KCktPmZsdXNoKCk7Cit9CisKK1Bhc3NPd25QdHI8Q0NUZXh0dXJlVXBkYXRlcjo6
VGV4dHVyZVVwZGF0ZT4gRnJhbWVCdWZmZXJTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRh
dGVyOjpUZXh0dXJlOjpjcmVhdGVDQ1RleHR1cmVVcGRhdGUoKQoreworICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgIHJldHVybiBQYXNzT3duUHRyPENDVGV4dHVyZVVwZGF0ZXI6OlRleHR1
cmVVcGRhdGU+KCk7Cit9CisKK3ZvaWQgRnJhbWVCdWZmZXJTa1BpY3R1cmVDYW52YXNMYXllclRl
eHR1cmVVcGRhdGVyOjpUZXh0dXJlOjpwdXNoUHJvcGVydGllc1RvKENDVGV4dHVyZVVwZGF0ZXI6
OlRleHR1cmVVcGRhdGUqKQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiBQYXNz
UmVmUHRyPEZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcj4gRnJh
bWVCdWZmZXJTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpjcmVhdGUoUGFzc093
blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4gcGFpbnRlcikKQEAgLTgyLDcgKzExNyw3IEBAIEZy
YW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6fkZyYW1lQnVmZmVy
U2tQaWN0dXJlQ2FudmFzTGF5ZXJUCiB7CiB9CiAKLVBhc3NPd25QdHI8TGF5ZXJUZXh0dXJlVXBk
YXRlcjo6VGV4dHVyZT4gRnJhbWVCdWZmZXJTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRh
dGVyOjpjcmVhdGVUZXh0dXJlKFRleHR1cmVNYW5hZ2VyKiBtYW5hZ2VyKQorUGFzc093blB0cjxD
YW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlPiBGcmFtZUJ1ZmZlclNrUGljdHVyZUNh
bnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OmNyZWF0ZVRleHR1cmUoVGV4dHVyZU1hbmFnZXIqIG1h
bmFnZXIpCiB7CiAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBUZXh0dXJlKHRoaXMsIE1hbmFnZWRU
ZXh0dXJlOjpjcmVhdGUobWFuYWdlcikpKTsKIH0KQEAgLTkzLDMyICsxMjgsMTMgQEAgTGF5ZXJU
ZXh0dXJlVXBkYXRlcjo6U2FtcGxlZFRleGVsRm9ybWF0IEZyYW1lQnVmZmVyU2tQaWN0dXJlQ2Fu
dmFzTGF5ZXJUZXh0dXJlVXAKICAgICByZXR1cm4gTGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2FtcGxl
ZFRleGVsRm9ybWF0UkdCQTsKIH0KIAotdm9pZCBGcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xh
eWVyVGV4dHVyZVVwZGF0ZXI6OnVwZGF0ZVRleHR1cmVSZWN0KEdyYXBoaWNzQ29udGV4dDNEKiBj
b250ZXh0LCBNYW5hZ2VkVGV4dHVyZSogdGV4dHVyZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVj
dCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpCit2b2lkIEZyYW1lQnVmZmVyU2tQaWN0dXJlQ2Fu
dmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6dXBkYXRlVGV4dHVyZVJlY3QoR3JhcGhpY3NDb250ZXh0
M0QqIGNvbnRleHQsIFNrQ2FudmFzICpjYW52YXMsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3Qs
IGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KQogewotICAgIEFTU0VSVCh0ZXh0dXJlLT50ZXh0dXJl
SWQoKSk7Ci0KLSAgICAvLyBNYWtlIHN1cmUgU0tJQSB1c2VzIHRoZSBjb3JyZWN0IEdMIGNvbnRl
eHQuCi0gICAgY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgLy8gTm90aWZ5IFNL
SUEgdG8gc3luYyBpdHMgaW50ZXJuYWwgR0wgc3RhdGUuCi0gICAgY29udGV4dC0+Z3JDb250ZXh0
KCktPnJlc2V0Q29udGV4dCgpOwotCi0gICAgLy8gQ3JlYXRlIGFuIGFjY2VsZXJhdGVkIGNhbnZh
cyB0byBkcmF3IG9uLgotICAgIE93blB0cjxTa0NhbnZhcz4gY2FudmFzID0gY3JlYXRlQWNjZWxl
cmF0ZWRDYW52YXMoY29udGV4dCwgdGV4dHVyZSk7Ci0KLSAgICBjYW52YXMtPmNsaXBSZWN0KFNr
UmVjdChkZXN0UmVjdCkpOwotICAgIC8vIFRoZSBjb21wb3NpdG9yIGV4cGVjdHMgdGhlIHRleHR1
cmVzIHRvIGJlIHVwc2lkZS1kb3duIHNvIGl0IGNhbiBmbGlwCi0gICAgLy8gdGhlIGZpbmFsIGNv
bXBvc2l0ZWQgaW1hZ2UuIEdhbmVzaCByZW5kZXJzIHRoZSBpbWFnZSB1cHJpZ2h0IHNvIHdlCi0g
ICAgLy8gbmVlZCB0byBkbyBhIHktZmxpcC4KLSAgICBjYW52YXMtPnRyYW5zbGF0ZSgwLjAsIHRl
eHR1cmUtPnNpemUoKS5oZWlnaHQoKSk7Ci0gICAgY2FudmFzLT5zY2FsZSgxLjAsIC0xLjApOwog
ICAgIC8vIFRyYW5zbGF0ZSB0aGUgb3JpZ2luIG9mIGNvbnRlbnRSZWN0IHRvIHRoYXQgb2YgZGVz
dFJlY3QuCiAgICAgLy8gTm90ZSB0aGF0IGRlc3RSZWN0IGlzIGRlZmluZWQgcmVsYXRpdmUgdG8g
c291cmNlUmVjdC4KICAgICBjYW52YXMtPnRyYW5zbGF0ZShjb250ZW50UmVjdCgpLngoKSAtIHNv
dXJjZVJlY3QueCgpICsgZGVzdFJlY3QueCgpLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnRl
bnRSZWN0KCkueSgpIC0gc291cmNlUmVjdC55KCkgKyBkZXN0UmVjdC55KCkpOwotICAgIGRyYXdQ
aWN0dXJlKGNhbnZhcy5nZXQoKSk7Ci0KLSAgICAvLyBGbHVzaCBTS0lBIGNvbnRleHQgc28gdGhh
dCBhbGwgdGhlIHJlbmRlcmVkIHN0dWZmIGFwcGVhcnMgb24gdGhlIHRleHR1cmUuCi0gICAgY29u
dGV4dC0+Z3JDb250ZXh0KCktPmZsdXNoKCk7CisgICAgZHJhd1BpY3R1cmUoY2FudmFzKTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRnJhbWVCdWZmZXJTa1BpY3R1cmVDYW52YXNMYXllclRl
eHR1cmVVcGRhdGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9GcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuaAppbmRleCA2
ZDJhZDQxLi4zNmNhMmQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9GcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9GcmFt
ZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuaApAQCAtNDMsNyArNDMs
MTEgQEAgcHVibGljOgogICAgICAgICBUZXh0dXJlKEZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFz
TGF5ZXJUZXh0dXJlVXBkYXRlciosIFBhc3NPd25QdHI8TWFuYWdlZFRleHR1cmU+KTsKICAgICAg
ICAgdmlydHVhbCB+VGV4dHVyZSgpOwogCi0gICAgICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVSZWN0
KEdyYXBoaWNzQ29udGV4dDNEKiwgY29uc3QgSW50UmVjdCYgLyogc291cmNlUmVjdCAqLywgY29u
c3QgSW50UmVjdCYgLyogZGVzdFJlY3QgKi8pOworICAgICAgICB2aXJ0dWFsIGJvb2wgbmVlZFBy
ZXBhcmUoKSB7IHJldHVybiB0cnVlOyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlKEdy
YXBoaWNzQ29udGV4dDNEKiwgVGV4dHVyZUFsbG9jYXRvciopOworCisgICAgICAgIHZpcnR1YWwg
UGFzc093blB0cjxDQ1RleHR1cmVVcGRhdGVyOjpUZXh0dXJlVXBkYXRlPiBjcmVhdGVDQ1RleHR1
cmVVcGRhdGUoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHB1c2hQcm9wZXJ0aWVzVG8oQ0NUZXh0
dXJlVXBkYXRlcjo6VGV4dHVyZVVwZGF0ZSopOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgRnJh
bWVCdWZmZXJTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyKiB0ZXh0dXJlVXBkYXRl
cigpIHsgcmV0dXJuIG1fdGV4dHVyZVVwZGF0ZXI7IH0KQEAgLTU0LDkgKzU4LDkgQEAgcHVibGlj
OgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJU
ZXh0dXJlVXBkYXRlcj4gY3JlYXRlKFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+KTsK
ICAgICB2aXJ0dWFsIH5GcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0
ZXIoKTsKIAotICAgIHZpcnR1YWwgUGFzc093blB0cjxMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0
dXJlPiBjcmVhdGVUZXh0dXJlKFRleHR1cmVNYW5hZ2VyKik7CisgICAgdmlydHVhbCBQYXNzT3du
UHRyPENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU+IGNyZWF0ZVRleHR1cmUoVGV4
dHVyZU1hbmFnZXIqKTsKICAgICB2aXJ0dWFsIFNhbXBsZWRUZXhlbEZvcm1hdCBzYW1wbGVkVGV4
ZWxGb3JtYXQoR0MzRGVudW0gdGV4dHVyZUZvcm1hdCk7Ci0gICAgdm9pZCB1cGRhdGVUZXh0dXJl
UmVjdChHcmFwaGljc0NvbnRleHQzRCosIE1hbmFnZWRUZXh0dXJlKiwgY29uc3QgSW50UmVjdCYg
c291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpOworICAgIHZvaWQgdXBkYXRlVGV4
dHVyZVJlY3QoR3JhcGhpY3NDb250ZXh0M0QqLCBTa0NhbnZhcyosIGNvbnN0IEludFJlY3QmIHNv
dXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KTsKIAogcHJpdmF0ZToKICAgICBleHBs
aWNpdCBGcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIoUGFzc093
blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJv
bWl1bS5jcHAKaW5kZXggNTg5NGY5Yi4uN2MwYTZjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xh
eWVyQ2hyb21pdW0uY3BwCkBAIC01NCw2ICs1NCw3IEBACiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1
bS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAiU3lzdGVtVGltZS5o
IgorI2luY2x1ZGUgImNjL0NDUHJveHkuaCIKICNpbmNsdWRlICJjYy9DQ1RpbGVkTGF5ZXJJbXBs
LmgiCiAKICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KQEAgLTc1LDcgKzc2LDEwIEBAIEdy
YXBoaWNzTGF5ZXJDaHJvbWl1bTo6R3JhcGhpY3NMYXllckNocm9taXVtKEdyYXBoaWNzTGF5ZXJD
bGllbnQqIGNsaWVudCkKICAgICAsIG1fY29udGVudHNMYXllckhhc0JhY2tncm91bmRDb2xvcihm
YWxzZSkKICAgICAsIG1faW5TZXRDaGlsZHJlbihmYWxzZSkKIHsKLSAgICBtX2xheWVyID0gQ29u
dGVudExheWVyQ2hyb21pdW06OmNyZWF0ZTxDQ1RpbGVkTGF5ZXJJbXBsPih0aGlzKTsKKyAgICBp
ZiAoQ0NQcm94eTo6aGFzSW1wbFRocmVhZCgpKQorICAgICAgICBtX2xheWVyID0gQ29udGVudExh
eWVyQ2hyb21pdW06OmNyZWF0ZTxDQ1RpbGVkTGF5ZXJEYXRhPih0aGlzKTsKKyAgICBlbHNlCisg
ICAgICAgIG1fbGF5ZXIgPSBDb250ZW50TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlPENDVGlsZWRMYXll
ckltcGw+KHRoaXMpOwogCiAgICAgdXBkYXRlRGVidWdJbmRpY2F0b3JzKCk7CiB9CkBAIC0zMjgs
NyArMzMyLDExIEBAIHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRDb250ZW50c1RvSW1h
Z2UoSW1hZ2UqIGltYWdlKQogICAgIGJvb2wgY2hpbGRyZW5DaGFuZ2VkID0gZmFsc2U7CiAgICAg
aWYgKGltYWdlKSB7CiAgICAgICAgIGlmICghbV9jb250ZW50c0xheWVyLmdldCgpIHx8IG1fY29u
dGVudHNMYXllclB1cnBvc2UgIT0gQ29udGVudHNMYXllckZvckltYWdlKSB7Ci0gICAgICAgICAg
ICBSZWZQdHI8SW1hZ2VMYXllckNocm9taXVtPiBpbWFnZUxheWVyID0gSW1hZ2VMYXllckNocm9t
aXVtOjpjcmVhdGU8Q0NUaWxlZExheWVySW1wbD4odGhpcyk7CisgICAgICAgICAgICBSZWZQdHI8
SW1hZ2VMYXllckNocm9taXVtPiBpbWFnZUxheWVyOworICAgICAgICAgICAgaWYgKENDUHJveHk6
Omhhc0ltcGxUaHJlYWQoKSkKKyAgICAgICAgICAgICAgICBpbWFnZUxheWVyID0gSW1hZ2VMYXll
ckNocm9taXVtOjpjcmVhdGU8Q0NUaWxlZExheWVyRGF0YT4odGhpcyk7CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgaW1hZ2VMYXllciA9IEltYWdlTGF5ZXJDaHJvbWl1bTo6Y3Jl
YXRlPENDVGlsZWRMYXllckltcGw+KHRoaXMpOwogICAgICAgICAgICAgc2V0dXBDb250ZW50c0xh
eWVyKGltYWdlTGF5ZXIuZ2V0KCkpOwogICAgICAgICAgICAgbV9jb250ZW50c0xheWVyUHVycG9z
ZSA9IENvbnRlbnRzTGF5ZXJGb3JJbWFnZTsKICAgICAgICAgICAgIGNoaWxkcmVuQ2hhbmdlZCA9
IHRydWU7CkBAIC01MjksNyArNTM3LDEwIEBAIHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjp1
cGRhdGVMYXllclByZXNlcnZlczNEKCkKIHsKICAgICBpZiAobV9wcmVzZXJ2ZXMzRCAmJiAhbV90
cmFuc2Zvcm1MYXllcikgewogICAgICAgICAvLyBDcmVhdGUgdGhlIHRyYW5zZm9ybSBsYXllci4K
LSAgICAgICAgbV90cmFuc2Zvcm1MYXllciA9IExheWVyQ2hyb21pdW06OmNyZWF0ZTxDQ0xheWVy
SW1wbD4odGhpcyk7CisgICAgICAgIGlmIChDQ1Byb3h5OjpoYXNJbXBsVGhyZWFkKCkpCisgICAg
ICAgICAgICBtX3RyYW5zZm9ybUxheWVyID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlPENDTGF5ZXJE
YXRhPih0aGlzKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV90cmFuc2Zvcm1MYXllciA9
IExheWVyQ2hyb21pdW06OmNyZWF0ZTxDQ0xheWVySW1wbD4odGhpcyk7CiAgICAgICAgIG1fdHJh
bnNmb3JtTGF5ZXItPnNldFByZXNlcnZlczNEKHRydWUpOwogCiAgICAgICAgIC8vIENvcHkgdGhl
IHBvc2l0aW9uIGZyb20gdGhpcyBsYXllci4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uY3Bw
CmluZGV4IDBlZDAzNzQuLmM3NGNiZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNw
cApAQCAtMzYsNDQgKzM2LDc5IEBACiAKICNpbmNsdWRlICJDYW52YXNMYXllclRleHR1cmVVcGRh
dGVyLmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKLSNpbmNsdWRlICJMYXllclRleHR1cmVTdWJJbWFn
ZS5oIgorI2luY2x1ZGUgIkxheWVyUGFpbnRlckNocm9taXVtLmgiCiAjaW5jbHVkZSAiTWFuYWdl
ZFRleHR1cmUuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUNvbG9yLmgiCiAjaW5jbHVkZSAiY2MvQ0NM
YXllclRyZWVIb3N0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgSW1hZ2VMYXll
clRleHR1cmVVcGRhdGVyIDogcHVibGljIExheWVyVGV4dHVyZVVwZGF0ZXIgeworY2xhc3MgSW1h
Z2VDYW52YXNMYXllclRleHR1cmVVcGRhdGVyIDogcHVibGljIENhbnZhc0xheWVyVGV4dHVyZVVw
ZGF0ZXIgewogcHVibGljOgorICAgIGNsYXNzIFBhaW50ZXIgOiBwdWJsaWMgTGF5ZXJQYWludGVy
Q2hyb21pdW0geworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NPd25QdHI8UGFpbnRl
cj4gY3JlYXRlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBQ
YWludGVyKCkpOworICAgICAgICB9CisKKyAgICAgICAgdmlydHVhbCB2b2lkIHBhaW50KEdyYXBo
aWNzQ29udGV4dCYsIGNvbnN0IEludFJlY3QmKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH07CisKICAgICBjbGFzcyBUZXh0dXJl
IDogcHVibGljIENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmUgewogICAgIHB1Ymxp
YzoKLSAgICAgICAgVGV4dHVyZShJbWFnZUxheWVyVGV4dHVyZVVwZGF0ZXIqIHRleHR1cmVVcGRh
dGVyLCBQYXNzT3duUHRyPE1hbmFnZWRUZXh0dXJlPiB0ZXh0dXJlKQorICAgICAgICBUZXh0dXJl
KEltYWdlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlciogdGV4dHVyZVVwZGF0ZXIsIFBhc3NPd25Q
dHI8TWFuYWdlZFRleHR1cmU+IHRleHR1cmUpCiAgICAgICAgICAgICA6IENhbnZhc0xheWVyVGV4
dHVyZVVwZGF0ZXI6OlRleHR1cmUodGV4dHVyZSkKICAgICAgICAgICAgICwgbV90ZXh0dXJlVXBk
YXRlcih0ZXh0dXJlVXBkYXRlcikKICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAgICAgdmly
dHVhbCB2b2lkIHVwZGF0ZVJlY3QoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIGNvbnN0IElu
dFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KQorICAgICAgICB2aXJ0
dWFsIFBhc3NPd25QdHI8Q0NUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZVVwZGF0ZT4gY3JlYXRlQ0NU
ZXh0dXJlVXBkYXRlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIENDVGV4dHVyZVVw
ZGF0ZXI6OlN1YkltYWdlVGV4dHVyZVVwZGF0ZTo6Y3JlYXRlKCk7CisgICAgICAgIH0KKworICAg
ICAgICB2aXJ0dWFsIHZvaWQgcHVzaFByb3BlcnRpZXNUbyhDQ1RleHR1cmVVcGRhdGVyOjpUZXh0
dXJlVXBkYXRlKiB1cGRhdGUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVCh0ZXh0dXJl
KCktPnRleHR1cmVJZCgpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCB0ZXh0dXJlKCktPnRleHR1cmVJZCgpKTsKLSAgICAg
ICAgICAgIHRleHR1cmVVcGRhdGVyKCktPnVwZGF0ZVRleHR1cmVSZWN0KGNvbnRleHQsIHRleHR1
cmUoKS0+Zm9ybWF0KCksIHNvdXJjZVJlY3QsIGRlc3RSZWN0KTsKKyAgICAgICAgICAgIENDVGV4
dHVyZVVwZGF0ZXI6OlN1YkltYWdlVGV4dHVyZVVwZGF0ZSogc3ViSW1hZ2VVcGRhdGUgPSBzdGF0
aWNfY2FzdDxDQ1RleHR1cmVVcGRhdGVyOjpTdWJJbWFnZVRleHR1cmVVcGRhdGUqPih1cGRhdGUp
OworCisgICAgICAgICAgICBJbnRSZWN0IGltYWdlUmVjdCA9IHRleHR1cmVVcGRhdGVyKCktPmlt
YWdlUmVjdCgpOworICAgICAgICAgICAgSW50UmVjdCBkZXN0UmVjdCA9IHVwZGF0ZVJlY3QoKTsK
KyAgICAgICAgICAgIEludFBvaW50IG9mZnNldCA9IGNvbnRlbnRPZmZzZXQoKTsKKyAgICAgICAg
ICAgIEludFJlY3Qgc291cmNlUmVjdCA9IEludFJlY3QoSW50UG9pbnQoZGVzdFJlY3QueCgpICsg
b2Zmc2V0LngoKSwgZGVzdFJlY3QueSgpICsgb2Zmc2V0LnkoKSksIGRlc3RSZWN0LnNpemUoKSk7
CisKKyAgICAgICAgICAgIC8vIFNvdXJjZSByZWN0IHNob3VsZCBuZXZlciBnbyBvdXRzaWRlIHRo
ZSBpbWFnZSBwaXhlbHMsIGV2ZW4gaWYgdGhpcworICAgICAgICAgICAgLy8gaXMgcmVxdWVzdGVk
IGJlY2F1c2UgdGhlIHRleHR1cmUgZXh0ZW5kcyBvdXRzaWRlIHRoZSBpbWFnZS4KKyAgICAgICAg
ICAgIEludFJlY3QgY2xpcHBlZFNvdXJjZVJlY3QgPSBzb3VyY2VSZWN0OworICAgICAgICAgICAg
Y2xpcHBlZFNvdXJjZVJlY3QuaW50ZXJzZWN0KGltYWdlUmVjdCk7CisKKyAgICAgICAgICAgIElu
dFJlY3QgY2xpcHBlZERlc3RSZWN0ID0gZGVzdFJlY3Q7CisgICAgICAgICAgICBjbGlwcGVkRGVz
dFJlY3QubW92ZShjbGlwcGVkU291cmNlUmVjdC5sb2NhdGlvbigpIC0gc291cmNlUmVjdC5sb2Nh
dGlvbigpKTsKKyAgICAgICAgICAgIGNsaXBwZWREZXN0UmVjdC5zZXRTaXplKGNsaXBwZWRTb3Vy
Y2VSZWN0LnNpemUoKSk7CisKKyAgICAgICAgICAgIHN1YkltYWdlVXBkYXRlLT5zZXRGb3JtYXQo
dGV4dHVyZSgpLT5mb3JtYXQoKSk7CisgICAgICAgICAgICBzdWJJbWFnZVVwZGF0ZS0+c2V0VGV4
dHVyZUlkKHRleHR1cmUoKS0+dGV4dHVyZUlkKCkpOworICAgICAgICAgICAgc3ViSW1hZ2VVcGRh
dGUtPnNldFJlY3QoY2xpcHBlZERlc3RSZWN0KTsKKyAgICAgICAgICAgIHN1YkltYWdlVXBkYXRl
LT5zZXRQaXhlbERhdGEodGV4dHVyZVVwZGF0ZXIoKS0+aW1hZ2UoKS5waXhlbHMoKSwgaW1hZ2VS
ZWN0LCBjbGlwcGVkU291cmNlUmVjdCk7CiAgICAgICAgIH0KIAogICAgIHByaXZhdGU6Ci0gICAg
ICAgIEltYWdlTGF5ZXJUZXh0dXJlVXBkYXRlciogdGV4dHVyZVVwZGF0ZXIoKSB7IHJldHVybiBt
X3RleHR1cmVVcGRhdGVyOyB9CisgICAgICAgIEltYWdlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRl
ciogdGV4dHVyZVVwZGF0ZXIoKSB7IHJldHVybiBtX3RleHR1cmVVcGRhdGVyOyB9CiAKLSAgICAg
ICAgSW1hZ2VMYXllclRleHR1cmVVcGRhdGVyKiBtX3RleHR1cmVVcGRhdGVyOworICAgICAgICBJ
bWFnZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIqIG1fdGV4dHVyZVVwZGF0ZXI7CiAgICAgfTsK
IAotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEltYWdlTGF5ZXJUZXh0dXJlVXBkYXRlcj4gY3JlYXRl
KGJvb2wgdXNlTWFwVGV4U3ViSW1hZ2UpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8SW1hZ2VDYW52
YXNMYXllclRleHR1cmVVcGRhdGVyPiBjcmVhdGUoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBJbWFnZUxheWVyVGV4dHVyZVVwZGF0ZXIodXNlTWFwVGV4U3ViSW1hZ2UpKTsK
KyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbWFnZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0
ZXIoKSk7CiAgICAgfQogCi0gICAgdmlydHVhbCB+SW1hZ2VMYXllclRleHR1cmVVcGRhdGVyKCkg
eyB9CisgICAgdmlydHVhbCB+SW1hZ2VDYW52YXNMYXllclRleHR1cmVVcGRhdGVyKCkgeyB9CiAK
LSAgICB2aXJ0dWFsIFBhc3NPd25QdHI8TGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZT4gY3Jl
YXRlVGV4dHVyZShUZXh0dXJlTWFuYWdlciogbWFuYWdlcikKKyAgICB2aXJ0dWFsIFBhc3NPd25Q
dHI8Q2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZT4gY3JlYXRlVGV4dHVyZShUZXh0
dXJlTWFuYWdlciogbWFuYWdlcikKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcg
VGV4dHVyZSh0aGlzLCBNYW5hZ2VkVGV4dHVyZTo6Y3JlYXRlKG1hbmFnZXIpKSk7CiAgICAgfQpA
QCAtODQsMjUgKzExOSw2IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBMYXllclRleHR1cmVV
cGRhdGVyOjpTYW1wbGVkVGV4ZWxGb3JtYXRSR0JBIDogTGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2Ft
cGxlZFRleGVsRm9ybWF0QkdSQTsKICAgICB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250
ZW50cyhjb25zdCBJbnRSZWN0JiAvKiBjb250ZW50UmVjdCAqLywgY29uc3QgSW50U2l6ZSYgdGls
ZVNpemUsIGludCAvKiBib3JkZXJUZXhlbHMgKi8sIGZsb2F0IC8qIGNvbnRlbnRzU2NhbGUgKi8p
Ci0gICAgewotICAgICAgICBtX3RleFN1YkltYWdlLnNldFN1YkltYWdlU2l6ZSh0aWxlU2l6ZSk7
Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRleHR1cmVSZWN0KEdyYXBoaWNzQ29u
dGV4dDNEKiBjb250ZXh0LCB1bnNpZ25lZCBmb3JtYXQsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJl
Y3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KQotICAgIHsKLSAgICAgICAgLy8gU291cmNlIHJl
Y3Qgc2hvdWxkIG5ldmVyIGdvIG91dHNpZGUgdGhlIGltYWdlIHBpeGVscywgZXZlbiBpZiB0aGlz
Ci0gICAgICAgIC8vIGlzIHJlcXVlc3RlZCBiZWNhdXNlIHRoZSB0ZXh0dXJlIGV4dGVuZHMgb3V0
c2lkZSB0aGUgaW1hZ2UuCi0gICAgICAgIEludFJlY3QgY2xpcHBlZFNvdXJjZVJlY3QgPSBzb3Vy
Y2VSZWN0OwotICAgICAgICBjbGlwcGVkU291cmNlUmVjdC5pbnRlcnNlY3QoaW1hZ2VSZWN0KCkp
OwotCi0gICAgICAgIEludFJlY3QgY2xpcHBlZERlc3RSZWN0ID0gZGVzdFJlY3Q7Ci0gICAgICAg
IGNsaXBwZWREZXN0UmVjdC5tb3ZlKGNsaXBwZWRTb3VyY2VSZWN0LmxvY2F0aW9uKCkgLSBzb3Vy
Y2VSZWN0LmxvY2F0aW9uKCkpOwotICAgICAgICBjbGlwcGVkRGVzdFJlY3Quc2V0U2l6ZShjbGlw
cGVkU291cmNlUmVjdC5zaXplKCkpOwotCi0gICAgICAgIG1fdGV4U3ViSW1hZ2UudXBsb2FkKG1f
aW1hZ2UucGl4ZWxzKCksIGltYWdlUmVjdCgpLCBjbGlwcGVkU291cmNlUmVjdCwgY2xpcHBlZERl
c3RSZWN0LCBmb3JtYXQsIGNvbnRleHQpOwotICAgIH0KLQogICAgIHZvaWQgdXBkYXRlRnJvbUlt
YWdlKE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlKQogICAgIHsKICAgICAgICAgbV9pbWFnZS51
cGRhdGVGcm9tSW1hZ2UobmF0aXZlSW1hZ2UpOwpAQCAtMTEzLDE5ICsxMjksMjIgQEAgcHVibGlj
OgogICAgICAgICByZXR1cm4gbV9pbWFnZS5zaXplKCk7CiAgICAgfQogCi1wcml2YXRlOgotICAg
IGV4cGxpY2l0IEltYWdlTGF5ZXJUZXh0dXJlVXBkYXRlcihib29sIHVzZU1hcFRleFN1YkltYWdl
KQotICAgICAgICA6IG1fdGV4U3ViSW1hZ2UodXNlTWFwVGV4U3ViSW1hZ2UpCisgICAgSW50UmVj
dCBpbWFnZVJlY3QoKSBjb25zdAogICAgIHsKKyAgICAgICAgcmV0dXJuIEludFJlY3QoSW50UG9p
bnQ6Onplcm8oKSwgbV9pbWFnZS5zaXplKCkpOwogICAgIH0KIAotICAgIEludFJlY3QgaW1hZ2VS
ZWN0KCkgY29uc3QKKyAgICBQbGF0Zm9ybUltYWdlJiBpbWFnZSgpCisgICAgeworICAgICAgICBy
ZXR1cm4gbV9pbWFnZTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgSW1hZ2VDYW52
YXNMYXllclRleHR1cmVVcGRhdGVyKCkgOiBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyKFBhaW50
ZXI6OmNyZWF0ZSgpKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEludFJlY3QoSW50UG9pbnQ6Onpl
cm8oKSwgbV9pbWFnZS5zaXplKCkpOwogICAgIH0KIAogICAgIFBsYXRmb3JtSW1hZ2UgbV9pbWFn
ZTsKLSAgICBMYXllclRleHR1cmVTdWJJbWFnZSBtX3RleFN1YkltYWdlOwogfTsKIAogSW1hZ2VM
YXllckNocm9taXVtOjpJbWFnZUxheWVyQ2hyb21pdW0oQ0NMYXllckRlbGVnYXRlKiBkZWxlZ2F0
ZSkKQEAgLTE2NCw3ICsxODMsNyBAQCB2b2lkIEltYWdlTGF5ZXJDaHJvbWl1bTo6cHJlcGFyZVRv
VXBkYXRlSWZEaXJ0eSgpCiAgICAgcHJlcGFyZVRvVXBkYXRlKHZpc2libGVMYXllclJlY3QoKSk7
CiB9CiAKLUxheWVyVGV4dHVyZVVwZGF0ZXIqIEltYWdlTGF5ZXJDaHJvbWl1bTo6dGV4dHVyZVVw
ZGF0ZXIoKSBjb25zdAorQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlciogSW1hZ2VMYXllckNocm9t
aXVtOjp0ZXh0dXJlVXBkYXRlcigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fdGV4dHVyZVVwZGF0
ZXIuZ2V0KCk7CiB9CkBAIC0xODMsNyArMjAyLDcgQEAgYm9vbCBJbWFnZUxheWVyQ2hyb21pdW06
OmRyYXdzQ29udGVudCgpIGNvbnN0CiAKIHZvaWQgSW1hZ2VMYXllckNocm9taXVtOjpjcmVhdGVU
ZXh0dXJlVXBkYXRlcihjb25zdCBDQ0xheWVyVHJlZUhvc3QqIGhvc3QpCiB7Ci0gICAgbV90ZXh0
dXJlVXBkYXRlciA9IEltYWdlTGF5ZXJUZXh0dXJlVXBkYXRlcjo6Y3JlYXRlKGhvc3QtPmxheWVy
UmVuZGVyZXJDYXBhYmlsaXRpZXMoKS51c2luZ01hcFN1Yik7CisgICAgbV90ZXh0dXJlVXBkYXRl
ciA9IEltYWdlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6Y3JlYXRlKCk7CiB9CiAKIGJvb2wg
SW1hZ2VMYXllckNocm9taXVtOjpuZWVkc0NvbnRlbnRzU2NhbGUoKSBjb25zdApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNo
cm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFn
ZUxheWVyQ2hyb21pdW0uaAppbmRleCA0MWZjYmE4Li43ZjY0ZDhjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0u
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxh
eWVyQ2hyb21pdW0uaApAQCAtNDQsNyArNDQsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBj
bGFzcyBJbWFnZTsKLWNsYXNzIEltYWdlTGF5ZXJUZXh0dXJlVXBkYXRlcjsKK2NsYXNzIEltYWdl
Q2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjsKIAogLy8gQSBMYXllciB0aGF0IGNvbnRhaW5zIG9u
bHkgYW4gSW1hZ2UgZWxlbWVudC4KIGNsYXNzIEltYWdlTGF5ZXJDaHJvbWl1bSA6IHB1YmxpYyBU
aWxlZExheWVyQ2hyb21pdW0gewpAQCAtNjUsMTMgKzY1LDEzIEBAIHByb3RlY3RlZDoKICAgICB2
aXJ0dWFsIHZvaWQgY3JlYXRlVGV4dHVyZVVwZGF0ZXIoY29uc3QgQ0NMYXllclRyZWVIb3N0Kik7
CiAgICAgdm9pZCBzZXRUaWxpbmdPcHRpb24oVGlsaW5nT3B0aW9uKTsKIAotICAgIHZpcnR1YWwg
TGF5ZXJUZXh0dXJlVXBkYXRlciogdGV4dHVyZVVwZGF0ZXIoKSBjb25zdDsKKyAgICB2aXJ0dWFs
IENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIqIHRleHR1cmVVcGRhdGVyKCkgY29uc3Q7CiAgICAg
dmlydHVhbCBJbnRTaXplIGNvbnRlbnRCb3VuZHMoKSBjb25zdDsKIAogICAgIE5hdGl2ZUltYWdl
UHRyIG1faW1hZ2VGb3JDdXJyZW50RnJhbWU7CiAgICAgUmVmUHRyPEltYWdlPiBtX2NvbnRlbnRz
OwogCi0gICAgUmVmUHRyPEltYWdlTGF5ZXJUZXh0dXJlVXBkYXRlcj4gbV90ZXh0dXJlVXBkYXRl
cjsKKyAgICBSZWZQdHI8SW1hZ2VDYW52YXNMYXllclRleHR1cmVVcGRhdGVyPiBtX3RleHR1cmVV
cGRhdGVyOwogfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgTGF5ZXJUeXBlPiBjbGFzcyBTZXJpYWxp
emFibGVJbWFnZUxheWVyQ2hyb21pdW0gOiBwdWJsaWMgSW1hZ2VMYXllckNocm9taXVtIHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
VGV4dHVyZVVwZGF0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyVGV4dHVyZVVwZGF0ZXIuaAppbmRleCBhNjY3ZDBiLi41MDJjOTMxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1
cmVVcGRhdGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJUZXh0dXJlVXBkYXRlci5oCkBAIC0yOSw4ICsyOSw5IEBACiAKICNpZiBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCiAKLSNpbmNsdWRlICJNYW5hZ2VkVGV4dHVyZS5oIgorI2lu
Y2x1ZGUgImNjL0NDVGV4dHVyZVVwZGF0ZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc1R5cGVzM0Qu
aCIKKyNpbmNsdWRlICJNYW5hZ2VkVGV4dHVyZS5oIgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVk
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTUwLDIxICs1MSwyMiBAQCBwdWJsaWM6CiAK
ICAgICAgICAgdmlydHVhbCBNYW5hZ2VkVGV4dHVyZSogdGV4dHVyZSgpIHsgcmV0dXJuIDA7IH0K
IAotICAgICAgICAvLyBwcmVwYXJlUmVjdCgpIHdpbGwgb25seSBiZSBjYWxsZWQgaWYgdGhpcyBy
ZXR1cm5zIHRydWUuCi0gICAgICAgIHZpcnR1YWwgYm9vbCBuZWVkUHJlcGFyZVJlY3QoKSB7IHJl
dHVybiBmYWxzZTsgfQorICAgICAgICAvLyBwcmVwYXJlKCkgd2lsbCBvbmx5IGJlIGNhbGxlZCBp
ZiB0aGlzIHJldHVybnMgdHJ1ZS4KKyAgICAgICAgdmlydHVhbCBib29sIG5lZWRQcmVwYXJlKCkg
eyByZXR1cm4gZmFsc2U7IH0KICAgICAgICAgLy8gVGhpcyBydW5zIHN5bmNocm9ub3VzbHkgb24g
dGhlIGltcGwgdGhyZWFkIHdpdGggc2FmZSBhY2Nlc3MgdG8gbWFpbiB0aHJlYWQgcmVzb3VyY2Vz
LgotICAgICAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZVJlY3QoR3JhcGhpY3NDb250ZXh0M0QqLCBU
ZXh0dXJlQWxsb2NhdG9yKiwgY29uc3QgSW50UmVjdCYgLyogc291cmNlUmVjdCAqLywgY29uc3Qg
SW50UmVjdCYgLyogZGVzdFJlY3QgKi8pIHsgfQotICAgICAgICAvLyBUaGlzIHJ1bnMgb24gdGhl
IG1haW4gdGhyZWFkIGFmdGVyIGNhbGxzIHRvIG5lZWRQcmVwYXJlUmVjdCgpIGFuZCBwcmVwYXJl
UmVjdCgpIGJ1dCBiZWZvcmUgdXBkYXRlUmVjdCgpLgotICAgICAgICB2aXJ0dWFsIHZvaWQgcGFp
bnRDb250ZW50c1JlY3QoY29uc3QgSW50UmVjdCYgLyogc291cmNlUmVjdCAqLykgeyB9Ci0gICAg
ICAgIC8vIFRoaXMgcnVucyBhc3luY2hyb25vdXNseSBvbiB0aGUgaW1wbCB0aHJlYWQuIEFjY2Vz
cyB0byBtYWluIHRocmVhZCByZXNvdXJjZXMgaXMgdW5zYWZlLgotICAgICAgICB2aXJ0dWFsIHZv
aWQgdXBkYXRlUmVjdChHcmFwaGljc0NvbnRleHQzRCosIGNvbnN0IEludFJlY3QmIHNvdXJjZVJl
Y3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBw
cmVwYXJlKEdyYXBoaWNzQ29udGV4dDNEKiwgVGV4dHVyZUFsbG9jYXRvciopIHsgfQorCisgICAg
ICAgIHZpcnR1YWwgSW50UmVjdCB1cGRhdGVSZWN0KCkgY29uc3QgeyByZXR1cm4gSW50UmVjdCgp
OyB9CisKKyAgICAgICAgdmlydHVhbCBQYXNzT3duUHRyPENDVGV4dHVyZVVwZGF0ZXI6OlRleHR1
cmVVcGRhdGU+IGNyZWF0ZUNDVGV4dHVyZVVwZGF0ZSgpIHsgcmV0dXJuIFBhc3NPd25QdHI8Q0NU
ZXh0dXJlVXBkYXRlcjo6VGV4dHVyZVVwZGF0ZT4oKTsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQg
cHVzaFByb3BlcnRpZXNUbyhDQ1RleHR1cmVVcGRhdGVyOjpUZXh0dXJlVXBkYXRlKikgeyBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsgfQogICAgIH07CiAKICAgICBjbGFzcyBIYW5kbGVyIHsKICAgICBw
dWJsaWM6CiAgICAgICAgIHZpcnR1YWwgfkhhbmRsZXIoKSB7IH0KIAotICAgICAgICB2aXJ0dWFs
IHZvaWQgaGFuZGxlKExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmUqLCBjb25zdCBJbnRSZWN0
JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCkgPSAwOworICAgICAgICB2aXJ0
dWFsIHZvaWQgaGFuZGxlKExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmUqKSA9IDA7CiAgICAg
fTsKIAogICAgIHZpcnR1YWwgfkxheWVyVGV4dHVyZVVwZGF0ZXIoKSB7IH0KQEAgLTc0LDcgKzc2
LDYgQEAgcHVibGljOgogICAgICAgICBTYW1wbGVkVGV4ZWxGb3JtYXRCR1JBLAogICAgICAgICBT
YW1wbGVkVGV4ZWxGb3JtYXRJbnZhbGlkLAogICAgIH07Ci0gICAgdmlydHVhbCBQYXNzT3duUHRy
PFRleHR1cmU+IGNyZWF0ZVRleHR1cmUoVGV4dHVyZU1hbmFnZXIqKSA9IDA7CiAgICAgLy8gUmV0
dXJucyB0aGUgZm9ybWF0IG9mIHRoZSB0ZXhlbCB1cGxvYWRlZCBieSB0aGlzIGludGVyZmFjZS4K
ICAgICAvLyBUaGlzIGZvcm1hdCBzaG91bGQgbm90IGJlIGNvbmZ1c2VkIGJ5IHRleHR1cmUgaW50
ZXJuYWwgZm9ybWF0LgogICAgIC8vIFRoaXMgZm9ybWF0IHNwZWNpZmllcyB0aGUgY29tcG9uZW50
IG9yZGVyIGluIHRoZSBzYW1wbGVkIHRleGVsLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBk
YXRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Ta1Bp
Y3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmNwcAppbmRleCBlZTc0NTIzLi41MDc0NDA1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9T
a1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Ta1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVV
cGRhdGVyLmNwcApAQCAtNTQsNyArNTQsNyBAQCB2b2lkIFNrUGljdHVyZUNhbnZhc0xheWVyVGV4
dHVyZVVwZGF0ZXI6OnBhaW50Q29udGVudHMoY29uc3QgSW50UmVjdCYgY29udGVudFJlYwogICAg
IFBsYXRmb3JtQ29udGV4dFNraWEgcGxhdGZvcm1Db250ZXh0KGNhbnZhcyk7CiAgICAgcGxhdGZv
cm1Db250ZXh0LnNldERlZmVycmVkKHRydWUpOwogICAgIEdyYXBoaWNzQ29udGV4dCBncmFwaGlj
c0NvbnRleHQoJnBsYXRmb3JtQ29udGV4dCk7Ci0gICAgQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRl
cjo6cGFpbnRDb250ZW50cyhncmFwaGljc0NvbnRleHQsIGNvbnRlbnRSZWN0LCBjb250ZW50c1Nj
YWxlKTsKKyAgICBwYWludENhbnZhc0NvbnRlbnRzKGdyYXBoaWNzQ29udGV4dCwgY29udGVudFJl
Y3QsIGNvbnRlbnRzU2NhbGUpOwogICAgIG1fcGljdHVyZS5lbmRSZWNvcmRpbmcoKTsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGls
ZWRMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggMDc4ZjhkOS4uOTNiMGE0ZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRM
YXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNs
dWRlICJUaWxlZExheWVyQ2hyb21pdW0uaCIKIAorI2luY2x1ZGUgIkNhbnZhc0xheWVyVGV4dHVy
ZVVwZGF0ZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIkxh
eWVyUmVuZGVyZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIk1hbmFnZWRUZXh0dXJlLmgiCkBAIC0x
NzcsMzggKzE3OCwxMCBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6Zm9yRWFjaENvbXBvc2l0
b3JSZXNvdXJjZShMYXllclRleHR1cmVVcGRhdGVyOjpIYW5kbGVyJgogICAgICAgICBmb3IgKGlu
dCBpID0gbGVmdDsgaSA8PSByaWdodDsgKytpKSB7CiAgICAgICAgICAgICBVcGRhdGFibGVUaWxl
KiB0aWxlID0gdGlsZUF0KGksIGopOwogCi0gICAgICAgICAgICAvLyBSZXF1aXJlZCB0aWxlcyBh
cmUgY3JlYXRlZCBpbiBwcmVwYXJlVG9VcGRhdGUoKS4gQSB0aWxlIHNob3VsZAotICAgICAgICAg
ICAgLy8gbmV2ZXIgYmUgcmVtb3ZlZCBiZXR3ZWVuIHRoZSBjYWxsIHRvIHByZXBhcmVUb1VwZGF0
ZSgpIGFuZCB0aGUKLSAgICAgICAgICAgIC8vIGNhbGwgdG8gdXBkYXRlQ29tcG9zaXRvclJlc291
cmNlcygpLgotICAgICAgICAgICAgaWYgKCF0aWxlKQotICAgICAgICAgICAgICAgIENSQVNIKCk7
Ci0KLSAgICAgICAgICAgIEludFJlY3Qgc291cmNlUmVjdCA9IHRpbGUtPm1fdXBkYXRlUmVjdDsK
LSAgICAgICAgICAgIGlmICh0aWxlLT5tX3VwZGF0ZVJlY3QuaXNFbXB0eSgpKQorICAgICAgICAg
ICAgaWYgKHRpbGUtPnRleHR1cmUoKS0+dXBkYXRlUmVjdCgpLmlzRW1wdHkoKSkKICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAgQVNTRVJUKHRpbGUtPm1hbmFnZWRUZXh0
dXJlKCktPmlzUmVzZXJ2ZWQoKSk7Ci0gICAgICAgICAgICBjb25zdCBJbnRQb2ludCBhbmNob3Ig
PSBtX3RpbGVyLT50aWxlUmVjdCh0aWxlKS5sb2NhdGlvbigpOwotCi0gICAgICAgICAgICAvLyBD
YWxjdWxhdGUgdGlsZS1zcGFjZSByZWN0YW5nbGUgdG8gdXBsb2FkIGludG8uCi0gICAgICAgICAg
ICBJbnRSZWN0IGRlc3RSZWN0KEludFBvaW50KHNvdXJjZVJlY3QueCgpIC0gYW5jaG9yLngoKSwg
c291cmNlUmVjdC55KCkgLSBhbmNob3IueSgpKSwgc291cmNlUmVjdC5zaXplKCkpOwotICAgICAg
ICAgICAgaWYgKGRlc3RSZWN0LngoKSA8IDApCi0gICAgICAgICAgICAgICAgQ1JBU0goKTsKLSAg
ICAgICAgICAgIGlmIChkZXN0UmVjdC55KCkgPCAwKQotICAgICAgICAgICAgICAgIENSQVNIKCk7
Ci0KLSAgICAgICAgICAgIC8vIE9mZnNldCBmcm9tIHBhaW50IHJlY3RhbmdsZSB0byB0aGlzIHRp
bGUncyBkaXJ0eSByZWN0YW5nbGUuCi0gICAgICAgICAgICBJbnRQb2ludCBwYWludE9mZnNldChz
b3VyY2VSZWN0LngoKSAtIG1fcGFpbnRSZWN0LngoKSwgc291cmNlUmVjdC55KCkgLSBtX3BhaW50
UmVjdC55KCkpOwotICAgICAgICAgICAgaWYgKHBhaW50T2Zmc2V0LngoKSA8IDApCi0gICAgICAg
ICAgICAgICAgQ1JBU0goKTsKLSAgICAgICAgICAgIGlmIChwYWludE9mZnNldC55KCkgPCAwKQot
ICAgICAgICAgICAgICAgIENSQVNIKCk7Ci0gICAgICAgICAgICBpZiAocGFpbnRPZmZzZXQueCgp
ICsgZGVzdFJlY3Qud2lkdGgoKSA+IG1fcGFpbnRSZWN0LndpZHRoKCkpCi0gICAgICAgICAgICAg
ICAgQ1JBU0goKTsKLSAgICAgICAgICAgIGlmIChwYWludE9mZnNldC55KCkgKyBkZXN0UmVjdC5o
ZWlnaHQoKSA+IG1fcGFpbnRSZWN0LmhlaWdodCgpKQotICAgICAgICAgICAgICAgIENSQVNIKCk7
Ci0KLSAgICAgICAgICAgIGhhbmRsZXIuaGFuZGxlKHRpbGUtPnRleHR1cmUoKSwgc291cmNlUmVj
dCwgZGVzdFJlY3QpOworICAgICAgICAgICAgaGFuZGxlci5oYW5kbGUodGlsZS0+dGV4dHVyZSgp
KTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTM2MiwxMSArMzM1LDI5IEBAIHZvaWQgVGlsZWRM
YXllckNocm9taXVtOjpwcmVwYXJlVG9VcGRhdGVUaWxlcyhib29sIGlkbGUsIGludCBsZWZ0LCBp
bnQgdG9wLCBpbnQKICAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSB0aGF0IHNvdXJjZVJlY3QgZG9l
c24ndCBleHRlbmQgb3V0c2lkZSBvZiBpdC4KICAgICAgICAgICAgIHNvdXJjZVJlY3QuaW50ZXJz
ZWN0KG1fcGFpbnRSZWN0KTsKIAotICAgICAgICAgICAgLy8gdXBkYXRlQ29tcG9zaXRvclJlc291
cmNlcygpIHVzZXMgbV91cGRhdGVSZWN0IHRvIGRldGVybWluZQotICAgICAgICAgICAgLy8gdGhl
IHRpbGVzIHRvIHVwZGF0ZSBzbyB3ZSBjYW4gY2xlYXIgdGhlIGRpcnR5IHJlY3RhbmdsZSBoZXJl
LgotICAgICAgICAgICAgdGlsZS0+Y2xlYXJEaXJ0eSgpOworICAgICAgICAgICAgY29uc3QgSW50
UG9pbnQgYW5jaG9yID0gbV90aWxlci0+dGlsZVJlY3QodGlsZSkubG9jYXRpb24oKTsKKyAgICAg
ICAgICAgIC8vIENhbGN1bGF0ZSB0aWxlLXNwYWNlIHJlY3RhbmdsZSB0byB1cGxvYWQgaW50by4K
KyAgICAgICAgICAgIEludFJlY3QgZGVzdFJlY3QgPSBJbnRSZWN0KEludFBvaW50KHNvdXJjZVJl
Y3QueCgpIC0gYW5jaG9yLngoKSwgc291cmNlUmVjdC55KCkgLSBhbmNob3IueSgpKSwgc291cmNl
UmVjdC5zaXplKCkpOworICAgICAgICAgICAgaWYgKGRlc3RSZWN0LngoKSA8IDApCisgICAgICAg
ICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAgIGlmIChkZXN0UmVjdC55KCkgPCAwKQorICAg
ICAgICAgICAgICAgIENSQVNIKCk7CiAKLSAgICAgICAgICAgIHRpbGUtPm1fdXBkYXRlUmVjdCA9
IHNvdXJjZVJlY3Q7CisgICAgICAgICAgICAvLyBPZmZzZXQgZnJvbSBwYWludCByZWN0YW5nbGUg
dG8gdGhpcyB0aWxlJ3MgZGlydHkgcmVjdGFuZ2xlLgorICAgICAgICAgICAgSW50UG9pbnQgcGFp
bnRPZmZzZXQoc291cmNlUmVjdC54KCkgLSBtX3BhaW50UmVjdC54KCksIHNvdXJjZVJlY3QueSgp
IC0gbV9wYWludFJlY3QueSgpKTsKKyAgICAgICAgICAgIGlmIChwYWludE9mZnNldC54KCkgPCAw
KQorICAgICAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgICAgICBpZiAocGFpbnRPZmZzZXQu
eSgpIDwgMCkKKyAgICAgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAgaWYgKHBhaW50
T2Zmc2V0LngoKSArIGRlc3RSZWN0LndpZHRoKCkgPiBtX3BhaW50UmVjdC53aWR0aCgpKQorICAg
ICAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgICAgICBpZiAocGFpbnRPZmZzZXQueSgpICsg
ZGVzdFJlY3QuaGVpZ2h0KCkgPiBtX3BhaW50UmVjdC5oZWlnaHQoKSkKKyAgICAgICAgICAgICAg
ICBDUkFTSCgpOworCisgICAgICAgICAgICB0aWxlLT50ZXh0dXJlKCktPnNldFVwZGF0ZVJlY3Qo
ZGVzdFJlY3QpOworICAgICAgICAgICAgdGlsZS0+dGV4dHVyZSgpLT5zZXRDb250ZW50T2Zmc2V0
KGFuY2hvcik7CisKKyAgICAgICAgICAgIHRpbGUtPmNsZWFyRGlydHkoKTsKICAgICAgICAgfQog
ICAgIH0KIH0KQEAgLTM4Miw3ICszNzMsNyBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6cHJl
cGFyZVRvVXBkYXRlKGNvbnN0IEludFJlY3QmIGxheWVyUmVjdCkKICAgICAvLyBSZXNldCBtX3Vw
ZGF0ZVJlY3QgZm9yIGFsbCB0aWxlcy4KICAgICBmb3IgKENDTGF5ZXJUaWxpbmdEYXRhOjpUaWxl
TWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0gbV90aWxlci0+dGlsZXMoKS5iZWdpbigpOyBpdGVy
ICE9IG1fdGlsZXItPnRpbGVzKCkuZW5kKCk7ICsraXRlcikgewogICAgICAgICBVcGRhdGFibGVU
aWxlKiB0aWxlID0gc3RhdGljX2Nhc3Q8VXBkYXRhYmxlVGlsZSo+KGl0ZXItPnNlY29uZC5nZXQo
KSk7Ci0gICAgICAgIHRpbGUtPm1fdXBkYXRlUmVjdCA9IEludFJlY3QoKTsKKyAgICAgICAgdGls
ZS0+dGV4dHVyZSgpLT5zZXRVcGRhdGVSZWN0KEludFJlY3QoKSk7CiAgICAgfQogCiAgICAgdXBk
YXRlQm91bmRzKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5oCmluZGV4IDhjNjQ3NWIuLmFl
OWI1NDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5oCkBAIC0yOCw2ICsyOCw3IEBACiAK
ICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAKKyNpbmNsdWRlICJDYW52YXNMYXll
clRleHR1cmVVcGRhdGVyLmgiCiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUg
IkxheWVyVGV4dHVyZVVwZGF0ZXIuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyVGlsaW5nRGF0YS5o
IgpAQCAtMzcsMTggKzM4LDE3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIFVwZGF0YWJs
ZVRpbGUgOiBwdWJsaWMgQ0NMYXllclRpbGluZ0RhdGE6OlRpbGUgewogICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKFVwZGF0YWJsZVRpbGUpOwogcHVibGljOgotICAgIGV4cGxpY2l0IFVwZGF0YWJs
ZVRpbGUoUGFzc093blB0cjxMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlPiB0ZXh0dXJlKSA6
IG1fdGV4dHVyZSh0ZXh0dXJlKSB7IH0KKyAgICBleHBsaWNpdCBVcGRhdGFibGVUaWxlKFBhc3NP
d25QdHI8Q2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZT4gdGV4dHVyZSkgOiBtX3Rl
eHR1cmUodGV4dHVyZSkgeyB9CiAKLSAgICBMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlKiB0
ZXh0dXJlKCkgeyByZXR1cm4gbV90ZXh0dXJlLmdldCgpOyB9CisgICAgQ2FudmFzTGF5ZXJUZXh0
dXJlVXBkYXRlcjo6VGV4dHVyZSogdGV4dHVyZSgpIHsgcmV0dXJuIG1fdGV4dHVyZS5nZXQoKTsg
fQogICAgIE1hbmFnZWRUZXh0dXJlKiBtYW5hZ2VkVGV4dHVyZSgpIHsgcmV0dXJuIG1fdGV4dHVy
ZS0+dGV4dHVyZSgpOyB9CiAKICAgICBib29sIGlzRGlydHkoKSBjb25zdCB7IHJldHVybiAhbV9k
aXJ0eVJlY3QuaXNFbXB0eSgpOyB9CiAgICAgdm9pZCBjbGVhckRpcnR5KCkgeyBtX2RpcnR5UmVj
dCA9IEludFJlY3QoKTsgfQogCiAgICAgSW50UmVjdCBtX2RpcnR5UmVjdDsKLSAgICBJbnRSZWN0
IG1fdXBkYXRlUmVjdDsKIHByaXZhdGU6Ci0gICAgT3duUHRyPExheWVyVGV4dHVyZVVwZGF0ZXI6
OlRleHR1cmU+IG1fdGV4dHVyZTsKKyAgICBPd25QdHI8Q2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRl
cjo6VGV4dHVyZT4gbV90ZXh0dXJlOwogfTsKIAogY2xhc3MgVGlsZWRMYXllckNocm9taXVtIDog
cHVibGljIExheWVyQ2hyb21pdW0gewpAQCAtODgsNyArODgsNyBAQCBwcm90ZWN0ZWQ6CiAgICAg
dm9pZCBzZXRCb3JkZXJUZXhlbE9wdGlvbihDQ0xheWVyVGlsaW5nRGF0YTo6Qm9yZGVyVGV4ZWxP
cHRpb24pOwogCiAgICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRleHR1cmVVcGRhdGVyKGNvbnN0IEND
TGF5ZXJUcmVlSG9zdCopID0gMDsKLSAgICB2aXJ0dWFsIExheWVyVGV4dHVyZVVwZGF0ZXIqIHRl
eHR1cmVVcGRhdGVyKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgQ2FudmFzTGF5ZXJUZXh0dXJl
VXBkYXRlciogdGV4dHVyZVVwZGF0ZXIoKSBjb25zdCA9IDA7CiAKICAgICAvLyBTZXQgaW52YWxp
ZGF0aW9ucyB0byBiZSBwb3RlbnRpYWxseSByZXBhaW50ZWQgZHVyaW5nIHVwZGF0ZSgpLgogICAg
IHZvaWQgaW52YWxpZGF0ZVJlY3QoY29uc3QgSW50UmVjdCYgbGF5ZXJSZWN0KTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyZWVTeW5jaHJv
bml6ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJl
ZVN5bmNocm9uaXplci5jcHAKaW5kZXggNGQ5Y2UxOC4uZGI5MGM5NyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJlZVN5bmNocm9uaXplci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJlZVN5
bmNocm9uaXplci5jcHAKQEAgLTEwMCw0ICsxMDAsMTQgQEAgUGFzc1JlZlB0cjxDQ0xheWVySW1w
bD4gVHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVlcyhMYXllckNocm9taXVtKiBsYXll
clIKICAgICByZXR1cm4gc3luY2hyb25pemVUcmVlc0ludGVybmFsPExheWVyQ2hyb21pdW0sIEND
TGF5ZXJJbXBsPihsYXllclJvb3QsIG9sZENDTGF5ZXJJbXBsUm9vdCk7CiB9CiAKK1Bhc3NSZWZQ
dHI8Q0NMYXllckltcGw+IFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMoQ0NMYXll
ckRhdGEqIGxheWVyUm9vdCwgUGFzc1JlZlB0cjxDQ0xheWVySW1wbD4gb2xkQ0NMYXllckltcGxS
b290KQoreworICAgIHJldHVybiBzeW5jaHJvbml6ZVRyZWVzSW50ZXJuYWw8Q0NMYXllckRhdGEs
IENDTGF5ZXJJbXBsPihsYXllclJvb3QsIG9sZENDTGF5ZXJJbXBsUm9vdCk7Cit9CisKK1Bhc3NS
ZWZQdHI8Q0NMYXllckRhdGE+IFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMoTGF5
ZXJDaHJvbWl1bSogbGF5ZXJSb290KQoreworICAgIHJldHVybiBzeW5jaHJvbml6ZVRyZWVzSW50
ZXJuYWw8TGF5ZXJDaHJvbWl1bSwgQ0NMYXllckRhdGE+KGxheWVyUm9vdCwgMCk7Cit9CisKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL1RyZWVTeW5jaHJvbml6ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyZWVTeW5jaHJvbml6ZXIuaAppbmRleCBkNWIwOWVk
Li4yYWYyODc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9UcmVlU3luY2hyb25pemVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vVHJlZVN5bmNocm9uaXplci5oCkBAIC0zNCw2ICszNCw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ0NMYXllcjsKIGNsYXNzIENDTGF5ZXJJbXBsOwor
Y2xhc3MgQ0NMYXllckRhdGE7CiBjbGFzcyBMYXllckNocm9taXVtOwogCiBjbGFzcyBUcmVlU3lu
Y2hyb25pemVyIHsKQEAgLTQzLDYgKzQ0LDE0IEBAIHB1YmxpYzoKICAgICAvLyBvZiB0aGUgTGF5
ZXJDaHJvbWl1bSB0cmVlLCByZXVzaW5nIHRoZSBDQ0xheWVySW1wbHMgaW4gdGhlIHRyZWUgcHJv
dmlkZWQgYnkgb2xkQ0NMYXllckltcGxSb290IGlmIHBvc3NpYmxlLgogICAgIHN0YXRpYyBQYXNz
UmVmUHRyPENDTGF5ZXJJbXBsPiBzeW5jaHJvbml6ZVRyZWVzKExheWVyQ2hyb21pdW0qIGxheWVy
Um9vdCwgUGFzc1JlZlB0cjxDQ0xheWVySW1wbD4gb2xkQ0NMYXllckltcGxSb290KTsKIAorICAg
IC8vIEFjY2VwdHMgYSBDQ0xheWVyRGF0YSB0cmVlIGFuZCByZXR1cm5zIGEgcmVmZXJlbmNlIHRv
IGEgQ0NMYXllckltcGwgdHJlZSB0aGF0IGR1cGxpY2F0ZXMgdGhlIHN0cnVjdHVyZQorICAgIC8v
IG9mIHRoZSBDQ0xheWVyRGF0YSB0cmVlLCByZXVzaW5nIHRoZSBDQ0xheWVySW1wbHMgaW4gdGhl
IHRyZWUgcHJvdmlkZWQgYnkgb2xkQ0NMYXllckltcGxSb290IGlmIHBvc3NpYmxlLgorICAgIHN0
YXRpYyBQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBzeW5jaHJvbml6ZVRyZWVzKENDTGF5ZXJEYXRh
KiBsYXllclJvb3QsIFBhc3NSZWZQdHI8Q0NMYXllckltcGw+IG9sZENDTGF5ZXJJbXBsUm9vdCk7
CisKKyAgICAvLyBBY2NlcHRzIGEgTGF5ZXJDaHJvbWl1bSB0cmVlIGFuZCByZXR1cm5zIGEgcmVm
ZXJlbmNlIHRvIGEgQ0NMYXllckRhdGEgdHJlZSB0aGF0IGR1cGxpY2F0ZXMgdGhlIHN0cnVjdHVy
ZQorICAgIC8vIG9mIHRoZSBMYXllckNocm9taXVtIHRyZWUuCisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8Q0NMYXllckRhdGE+IHN5bmNocm9uaXplVHJlZXMoTGF5ZXJDaHJvbWl1bSogbGF5ZXJSb290
KTsKKwogcHJpdmF0ZToKICAgICBUcmVlU3luY2hyb25pemVyKCk7IC8vIE5vdCBpbnN0YW50aWFi
bGUuCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uY3BwCmluZGV4IDViMzhmYzUuLmRhZWU2
NmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1dlYkdMTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmNwcApAQCAtNTIsNyArNTIsMTIgQEAg
V2ViR0xMYXllckNocm9taXVtOjpVcGRhdGVyVGV4dHVyZTo6flVwZGF0ZXJUZXh0dXJlKCkKIHsK
IH0KIAotdm9pZCBXZWJHTExheWVyQ2hyb21pdW06OlVwZGF0ZXJUZXh0dXJlOjp1cGRhdGVSZWN0
KEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiAvKiBzb3VyY2VSZWN0
ICovLCBjb25zdCBJbnRSZWN0JiAvKiBkZXN0UmVjdCAqLykKK2Jvb2wgV2ViR0xMYXllckNocm9t
aXVtOjpVcGRhdGVyVGV4dHVyZTo6bmVlZFByZXBhcmUoKQoreworICAgIHJldHVybiBtX2xheWVy
LT5uZWVkc0Rpc3BsYXkoKTsKK30KKwordm9pZCBXZWJHTExheWVyQ2hyb21pdW06OlVwZGF0ZXJU
ZXh0dXJlOjpwcmVwYXJlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBUZXh0dXJlQWxsb2Nh
dG9yKikKIHsKICAgICBtX2xheWVyLT51cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKGNvbnRleHQp
OwogfQpAQCAtMTExLDcgKzExNiw3IEBAIHZvaWQgV2ViR0xMYXllckNocm9taXVtOjp1cGRhdGVD
b21wb3NpdG9yUmVzb3VyY2VzKEdyYXBoaWNzQ29udGV4dDNEKiByZW5kZXJlckNvCiAKIHZvaWQg
V2ViR0xMYXllckNocm9taXVtOjpmb3JFYWNoQ29tcG9zaXRvclJlc291cmNlKExheWVyVGV4dHVy
ZVVwZGF0ZXI6OkhhbmRsZXImIGhhbmRsZXIpCiB7Ci0gICAgaGFuZGxlci5oYW5kbGUobV91cGRh
dGVyVGV4dHVyZS5nZXQoKSwgSW50UmVjdCgpLCBJbnRSZWN0KCkpOworICAgIGhhbmRsZXIuaGFu
ZGxlKG1fdXBkYXRlclRleHR1cmUuZ2V0KCkpOwogfQogCiBib29sIFdlYkdMTGF5ZXJDaHJvbWl1
bTo6cGFpbnRSZW5kZXJlZFJlc3VsdHNUb0NhbnZhcyhJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9X
ZWJHTExheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5oCmluZGV4IDllYjQyNjIuLmQzZmFkZjIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5
ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5oCkBAIC01NSw3ICs1NSw4IEBAIHB1YmxpYzoKIAogICAg
ICAgICB2aXJ0dWFsIH5VcGRhdGVyVGV4dHVyZSgpOwogCi0gICAgICAgIHZpcnR1YWwgdm9pZCB1
cGRhdGVSZWN0KEdyYXBoaWNzQ29udGV4dDNEKiwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwg
Y29uc3QgSW50UmVjdCYgZGVzdFJlY3QpOworICAgICAgICB2aXJ0dWFsIGJvb2wgbmVlZFByZXBh
cmUoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHByZXBhcmUoR3JhcGhpY3NDb250ZXh0M0QqLCBU
ZXh0dXJlQWxsb2NhdG9yKik7CiAKICAgICBwcml2YXRlOgogICAgICAgICBleHBsaWNpdCBVcGRh
dGVyVGV4dHVyZShXZWJHTExheWVyQ2hyb21pdW0qKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQ2FudmFzTGF5ZXJJbXBsLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQ2FudmFzTGF5
ZXJJbXBsLmNwcAppbmRleCA2ZWNkZDkwLi42ZTMwY2RjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0NhbnZhc0xheWVySW1wbC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52
YXNMYXllckltcGwuY3BwCkBAIC0zOCw5ICszOCw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Q0NDYW52YXNMYXllckltcGw6OkNDQ2FudmFzTGF5ZXJJbXBsKGludCBpZCkKICAgICA6IENDTGF5
ZXJJbXBsKGlkKQotICAgICwgbV90ZXh0dXJlSWQoMCkKLSAgICAsIG1faGFzQWxwaGEodHJ1ZSkK
LSAgICAsIG1fcHJlbXVsdGlwbGllZEFscGhhKHRydWUpCiB7CiB9CiAKQEAgLTg1LDYgKzgyLDI0
IEBAIHZvaWQgQ0NDYW52YXNMYXllckltcGw6OmR1bXBMYXllclByb3BlcnRpZXMoVGV4dFN0cmVh
bSYgdHMsIGludCBpbmRlbnQpIGNvbnN0CiAgICAgQ0NMYXllckltcGw6OmR1bXBMYXllclByb3Bl
cnRpZXModHMsIGluZGVudCk7CiB9CiAKK0NDQ2FudmFzTGF5ZXJEYXRhOjpDQ0NhbnZhc0xheWVy
RGF0YShpbnQgaWQpCisgICAgOiBDQ0xheWVyRGF0YShpZCkKK3sKK30KKworQ0NDYW52YXNMYXll
ckRhdGE6On5DQ0NhbnZhc0xheWVyRGF0YSgpCit7Cit9CisKK3ZvaWQgQ0NDYW52YXNMYXllckRh
dGE6OnB1c2hQcm9wZXJ0aWVzKGNvbnN0IENDQ2FudmFzTGF5ZXJEYXRhKiBmcm9tLCBDQ0xheWVy
KiB0bykKK3sKKyAgICBDQ0NhbnZhc0xheWVySW1wbCogbGF5ZXIgPSBzdGF0aWNfY2FzdDxDQ0Nh
bnZhc0xheWVySW1wbCo+KHRvKTsKKworICAgIGxheWVyLT5zZXRUZXh0dXJlSWQoZnJvbS0+bV90
ZXh0dXJlSWQpOworICAgIGxheWVyLT5zZXRIYXNBbHBoYShmcm9tLT5tX2hhc0FscGhhKTsKKyAg
ICBsYXllci0+c2V0UHJlbXVsdGlwbGllZEFscGhhKGZyb20tPm1fcHJlbXVsdGlwbGllZEFscGhh
KTsKK30KKwogfQogCiAjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0ND
YW52YXNMYXllckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDQ2FudmFzTGF5ZXJJbXBsLmgKaW5kZXggMjc1YmY3Yy4uNmVlMzk3ZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52
YXNMYXllckltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0NhbnZhc0xheWVySW1wbC5oCkBAIC0zMiw3ICszMiwyMSBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLWNsYXNzIENDQ2FudmFzTGF5ZXJJbXBsIDogcHVibGljIENDTGF5ZXJJ
bXBsIHsKK2NsYXNzIENDQ2FudmFzTGF5ZXJQcm9wZXJ0aWVzIHsKK3Byb3RlY3RlZDoKKyAgICBl
eHBsaWNpdCBDQ0NhbnZhc0xheWVyUHJvcGVydGllcygpCisgICAgICAgIDogbV90ZXh0dXJlSWQo
MCkKKyAgICAgICAgLCBtX2hhc0FscGhhKHRydWUpCisgICAgICAgICwgbV9wcmVtdWx0aXBsaWVk
QWxwaGEodHJ1ZSkKKyAgICB7CisgICAgfQorCisgICAgdW5zaWduZWQgbV90ZXh0dXJlSWQ7Cisg
ICAgYm9vbCBtX2hhc0FscGhhOworICAgIGJvb2wgbV9wcmVtdWx0aXBsaWVkQWxwaGE7Cit9Owor
CitjbGFzcyBDQ0NhbnZhc0xheWVySW1wbCA6IHB1YmxpYyBDQ0xheWVySW1wbCwgcHVibGljIEND
Q2FudmFzTGF5ZXJQcm9wZXJ0aWVzIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxD
Q0NhbnZhc0xheWVySW1wbD4gY3JlYXRlKGludCBpZCkKICAgICB7CkBAIC01NCwxMCArNjgsMzUg
QEAgcHJpdmF0ZToKICAgICBleHBsaWNpdCBDQ0NhbnZhc0xheWVySW1wbChpbnQpOwogCiAgICAg
dmlydHVhbCBjb25zdCBjaGFyKiBsYXllclR5cGVBc1N0cmluZygpIGNvbnN0IHsgcmV0dXJuICJD
YW52YXNMYXllciI7IH0KK307CiAKLSAgICB1bnNpZ25lZCBtX3RleHR1cmVJZDsKLSAgICBib29s
IG1faGFzQWxwaGE7Ci0gICAgYm9vbCBtX3ByZW11bHRpcGxpZWRBbHBoYTsKK2NsYXNzIENDQ2Fu
dmFzTGF5ZXJEYXRhIDogcHVibGljIENDTGF5ZXJEYXRhLCBwdWJsaWMgQ0NDYW52YXNMYXllclBy
b3BlcnRpZXMgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPENDQ2FudmFzTGF5ZXJE
YXRhPiBjcmVhdGUoaW50IGlkKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBD
Q0NhbnZhc0xheWVyRGF0YShpZCkpOworICAgIH0KKyAgICBzdGF0aWMgdm9pZCBwdXNoUHJvcGVy
dGllcyhjb25zdCBDQ0NhbnZhc0xheWVyRGF0YSosIENDTGF5ZXIqKTsKKworICAgIHZpcnR1YWwg
fkNDQ2FudmFzTGF5ZXJEYXRhKCk7CisKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q0NMYXllcj4g
Y3JlYXRlQ0NMYXllcigpCisgICAgeworICAgICAgICByZXR1cm4gQ0NDYW52YXNMYXllckltcGw6
OmNyZWF0ZShpZCgpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcHVzaFByb3BlcnRpZXNU
byhDQ0xheWVyKiBsYXllcikKKyAgICB7CisgICAgICAgIENDTGF5ZXJEYXRhOjpwdXNoUHJvcGVy
dGllcyh0aGlzLCBsYXllcik7CisgICAgICAgIHB1c2hQcm9wZXJ0aWVzKHRoaXMsIGxheWVyKTsK
KyAgICB9CisKKyAgICB2b2lkIHNldFRleHR1cmVJZCh1bnNpZ25lZCBpZCkgeyBtX3RleHR1cmVJ
ZCA9IGlkOyB9CisgICAgdm9pZCBzZXRIYXNBbHBoYShib29sIGhhc0FscGhhKSB7IG1faGFzQWxw
aGEgPSBoYXNBbHBoYTsgfQorICAgIHZvaWQgc2V0UHJlbXVsdGlwbGllZEFscGhhKGJvb2wgcHJl
bXVsdGlwbGllZEFscGhhKSB7IG1fcHJlbXVsdGlwbGllZEFscGhhID0gcHJlbXVsdGlwbGllZEFs
cGhhOyB9CisKK3Byb3RlY3RlZDoKKyAgICBleHBsaWNpdCBDQ0NhbnZhc0xheWVyRGF0YShpbnQp
OwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCmluZGV4IDcxZmQ3N2UuLmFlNWE4ZDkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKQEAgLTQwLDMzICs0MCwyMCBAQAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBDQ0xheWVySW1wbDo6Q0NMYXllckltcGwoaW50IGlkKQotICAgIDogbV9w
YXJlbnQoMCkKKyAgICA6IENDTGF5ZXJQcm9wZXJ0aWVzKCkKKyAgICAsIG1fcGFyZW50KDApCiAg
ICAgLCBtX2xheWVySWQoaWQpCi0gICAgLCBtX2FuY2hvclBvaW50KDAuNSwgMC41KQotICAgICwg
bV9hbmNob3JQb2ludFooMCkKLSAgICAsIG1fc2Nyb2xsYWJsZShmYWxzZSkKLSAgICAsIG1fZG91
YmxlU2lkZWQodHJ1ZSkKICAgICAsIG1fbGF5ZXJQcm9wZXJ0eUNoYW5nZWQoZmFsc2UpCi0gICAg
LCBtX21hc2tzVG9Cb3VuZHMoZmFsc2UpCi0gICAgLCBtX29wYXF1ZShmYWxzZSkKLSAgICAsIG1f
b3BhY2l0eSgxLjApCi0gICAgLCBtX3ByZXNlcnZlczNEKGZhbHNlKQogICAgICwgbV91c2VzTGF5
ZXJDbGlwcGluZyhmYWxzZSkKLSAgICAsIG1faXNOb25Db21wb3NpdGVkQ29udGVudChmYWxzZSkK
LSAgICAsIG1fZHJhd3NDb250ZW50KGZhbHNlKQogICAgICwgbV9wYWdlU2NhbGVEZWx0YSgxKQog
ICAgICwgbV90YXJnZXRSZW5kZXJTdXJmYWNlKDApCiAgICAgLCBtX2RyYXdEZXB0aCgwKQogICAg
ICwgbV9kcmF3T3BhY2l0eSgwKQotICAgICwgbV9kZWJ1Z0JvcmRlckNvbG9yKDAsIDAsIDAsIDAp
Ci0gICAgLCBtX2RlYnVnQm9yZGVyV2lkdGgoMCkKIHsKLSAgICBBU1NFUlQoQ0NQcm94eTo6aXNJ
bXBsVGhyZWFkKCkpOwogfQogCiBDQ0xheWVySW1wbDo6fkNDTGF5ZXJJbXBsKCkKIHsKLSAgICBB
U1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOwogfQogCiB2b2lkIENDTGF5ZXJJbXBsOjph
ZGRDaGlsZChQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBjaGlsZCkKQEAgLTQ3NSw3ICs0NjIsNTgg
QEAgdm9pZCBDQ0xheWVySW1wbDo6c2V0RG91YmxlU2lkZWQoYm9vbCBkb3VibGVTaWRlZCkKICAg
ICBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWRGb3JTdWJ0cmVlKCk7CiB9CiAKK0NDTGF5ZXJEYXRh
OjpDQ0xheWVyRGF0YShpbnQgaWQpCisgICAgOiBDQ0xheWVyUHJvcGVydGllcygpCisgICAgLCBt
X3BhcmVudCgwKQorICAgICwgbV9sYXllcklkKGlkKQoreworfQorCitDQ0xheWVyRGF0YTo6fkND
TGF5ZXJEYXRhKCkKK3sKK30KKwordm9pZCBDQ0xheWVyRGF0YTo6YWRkQ2hpbGQoUGFzc1JlZlB0
cjxDQ0xheWVyRGF0YT4gY2hpbGQpCit7CisgICAgY2hpbGQtPnNldFBhcmVudCh0aGlzKTsKKyAg
ICBtX2NoaWxkcmVuLmFwcGVuZChjaGlsZCk7CiB9CiAKK3ZvaWQgQ0NMYXllckRhdGE6OmNsZWFy
Q2hpbGRMaXN0KCkKK3sKKyAgICBtX2NoaWxkcmVuLmNsZWFyKCk7Cit9CisKK3ZvaWQgQ0NMYXll
ckRhdGE6OnB1c2hQcm9wZXJ0aWVzKGNvbnN0IENDTGF5ZXJEYXRhKiBmcm9tLCBDQ0xheWVyKiB0
bykKK3sKKyAgICBDQ0xheWVySW1wbCogbGF5ZXIgPSBzdGF0aWNfY2FzdDxDQ0xheWVySW1wbCo+
KHRvKTsKKworICAgIGxheWVyLT5zZXRBbmNob3JQb2ludChmcm9tLT5tX2FuY2hvclBvaW50KTsK
KyAgICBsYXllci0+c2V0QW5jaG9yUG9pbnRaKGZyb20tPm1fYW5jaG9yUG9pbnRaKTsKKyAgICBs
YXllci0+c2V0QmFja2dyb3VuZENvbG9yKGZyb20tPm1fYmFja2dyb3VuZENvbG9yKTsKKyAgICBs
YXllci0+c2V0Qm91bmRzKGZyb20tPm1fYm91bmRzKTsKKyAgICBsYXllci0+c2V0Q29udGVudEJv
dW5kcyhmcm9tLT5tX2NvbnRlbnRCb3VuZHMpOworICAgIGxheWVyLT5zZXREZWJ1Z0JvcmRlckNv
bG9yKGZyb20tPm1fZGVidWdCb3JkZXJDb2xvcik7CisgICAgbGF5ZXItPnNldERlYnVnQm9yZGVy
V2lkdGgoZnJvbS0+bV9kZWJ1Z0JvcmRlcldpZHRoKTsKKyAgICBsYXllci0+c2V0RG91YmxlU2lk
ZWQoZnJvbS0+bV9kb3VibGVTaWRlZCk7CisgICAgbGF5ZXItPnNldERyYXdzQ29udGVudChmcm9t
LT5tX2RyYXdzQ29udGVudCk7CisgICAgbGF5ZXItPnNldElzTm9uQ29tcG9zaXRlZENvbnRlbnQo
ZnJvbS0+bV9pc05vbkNvbXBvc2l0ZWRDb250ZW50KTsKKyAgICBsYXllci0+c2V0TWFza3NUb0Jv
dW5kcyhmcm9tLT5tX21hc2tzVG9Cb3VuZHMpOworICAgIGxheWVyLT5zZXRTY3JvbGxhYmxlKGZy
b20tPm1fc2Nyb2xsYWJsZSk7CisgICAgbGF5ZXItPnNldE5hbWUoZnJvbS0+bV9uYW1lKTsKKyAg
ICBsYXllci0+c2V0T3BhcXVlKGZyb20tPm1fb3BhcXVlKTsKKyAgICBsYXllci0+c2V0T3BhY2l0
eShmcm9tLT5tX29wYWNpdHkpOworICAgIGxheWVyLT5zZXRQb3NpdGlvbihmcm9tLT5tX3Bvc2l0
aW9uKTsKKyAgICBsYXllci0+c2V0UHJlc2VydmVzM0QoZnJvbS0+bV9wcmVzZXJ2ZXMzRCk7Cisg
ICAgbGF5ZXItPnNldFNjcm9sbFBvc2l0aW9uKGZyb20tPm1fc2Nyb2xsUG9zaXRpb24pOworICAg
IGxheWVyLT5zZXRTdWJsYXllclRyYW5zZm9ybShmcm9tLT5tX3N1YmxheWVyVHJhbnNmb3JtKTsK
KyAgICBsYXllci0+c2V0VHJhbnNmb3JtKGZyb20tPm1fdHJhbnNmb3JtKTsKKyAgICBsYXllci0+
c2V0VXBkYXRlUmVjdChmcm9tLT5tX3VwZGF0ZVJlY3QpOworCisgICAgbGF5ZXItPnNldFNjcm9s
bERlbHRhKGxheWVyLT5zY3JvbGxEZWx0YSgpIC0gbGF5ZXItPnNlbnRTY3JvbGxEZWx0YSgpKTsK
KyAgICBsYXllci0+c2V0U2VudFNjcm9sbERlbHRhKEludFNpemUoKSk7Cit9CisKK30KIAogI2Vu
ZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCmlu
ZGV4IDgwNDMyYWQuLjgzNjJmNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaApAQCAtNDUsNyArNDUs
NTMgQEAgY2xhc3MgQ0NMYXllclNvcnRlcjsKIGNsYXNzIExheWVyQ2hyb21pdW07CiBjbGFzcyBM
YXllclJlbmRlcmVyQ2hyb21pdW07CiAKLWNsYXNzIENDTGF5ZXJJbXBsIDogcHVibGljIENDTGF5
ZXIgeworY2xhc3MgQ0NMYXllclByb3BlcnRpZXMgeworcHJvdGVjdGVkOgorICAgIGV4cGxpY2l0
IENDTGF5ZXJQcm9wZXJ0aWVzKCkKKyAgICAgICAgOiBtX2FuY2hvclBvaW50KDAuNSwgMC41KQor
ICAgICAgICAsIG1fYW5jaG9yUG9pbnRaKDApCisgICAgICAgICwgbV9kZWJ1Z0JvcmRlcldpZHRo
KDApCisgICAgICAgICwgbV9kb3VibGVTaWRlZCh0cnVlKQorICAgICAgICAsIG1fZHJhd3NDb250
ZW50KGZhbHNlKQorICAgICAgICAsIG1faXNOb25Db21wb3NpdGVkQ29udGVudChmYWxzZSkKKyAg
ICAgICAgLCBtX21hc2tzVG9Cb3VuZHMoZmFsc2UpCisgICAgICAgICwgbV9vcGFxdWUoZmFsc2Up
CisgICAgICAgICwgbV9vcGFjaXR5KDEuMCkKKyAgICAgICAgLCBtX3ByZXNlcnZlczNEKGZhbHNl
KQorICAgICAgICAsIG1fc2Nyb2xsYWJsZShmYWxzZSkKKyAgICB7CisgICAgfQorCisgICAgRmxv
YXRQb2ludCBtX2FuY2hvclBvaW50OworICAgIGZsb2F0IG1fYW5jaG9yUG9pbnRaOworICAgIENv
bG9yIG1fYmFja2dyb3VuZENvbG9yOworICAgIEludFNpemUgbV9ib3VuZHM7CisgICAgSW50U2l6
ZSBtX2NvbnRlbnRCb3VuZHM7CisgICAgLy8gRGVidWcgYm9yZGVycy4KKyAgICBDb2xvciBtX2Rl
YnVnQm9yZGVyQ29sb3I7CisgICAgZmxvYXQgbV9kZWJ1Z0JvcmRlcldpZHRoOworICAgIC8vIFdo
ZXRoZXIgdGhlICJiYWNrIiBvZiB0aGlzIGxheWVyIHNob3VsZCBkcmF3LgorICAgIGJvb2wgbV9k
b3VibGVTaWRlZDsKKyAgICBib29sIG1fZHJhd3NDb250ZW50OworICAgIGJvb2wgbV9pc05vbkNv
bXBvc2l0ZWRDb250ZW50OworICAgIGJvb2wgbV9tYXNrc1RvQm91bmRzOworICAgIFN0cmluZyBt
X25hbWU7CisgICAgYm9vbCBtX29wYXF1ZTsKKyAgICBmbG9hdCBtX29wYWNpdHk7CisgICAgRmxv
YXRQb2ludCBtX3Bvc2l0aW9uOworICAgIGJvb2wgbV9wcmVzZXJ2ZXMzRDsKKyAgICBib29sIG1f
c2Nyb2xsYWJsZTsKKyAgICBJbnRTaXplIG1fc2Nyb2xsRGVsdGE7CisgICAgSW50UG9pbnQgbV9z
Y3JvbGxQb3NpdGlvbjsKKyAgICBJbnRTaXplIG1fc2VudFNjcm9sbERlbHRhOworICAgIFRyYW5z
Zm9ybWF0aW9uTWF0cml4IG1fc3VibGF5ZXJUcmFuc2Zvcm07CisgICAgVHJhbnNmb3JtYXRpb25N
YXRyaXggbV90cmFuc2Zvcm07CisgICAgLy8gUmVjdCBpbmRpY2F0aW5nIHdoYXQgd2FzIHJlcGFp
bnRlZC91cGRhdGVkIGR1cmluZyB1cGRhdGUuCisgICAgLy8gTm90ZSB0aGF0IHBsdWdpbiBsYXll
cnMgYnlwYXNzIHRoaXMgYW5kIGxlYXZlIGl0IGVtcHR5LgorICAgIEZsb2F0UmVjdCBtX3VwZGF0
ZVJlY3Q7Cit9OworCitjbGFzcyBDQ0xheWVySW1wbCA6IHB1YmxpYyBDQ0xheWVyLCBwdWJsaWMg
Q0NMYXllclByb3BlcnRpZXMgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPENDTGF5
ZXJJbXBsPiBjcmVhdGUoaW50IGlkKQogICAgIHsKQEAgLTIyOCwzNyArMjc0LDEzIEBAIHByaXZh
dGU6CiAgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBtX3JlcGxpY2FMYXllcjsKICAgICBpbnQgbV9s
YXllcklkOwogCi0gICAgLy8gUHJvcGVydGllcyBzeW5jaHJvbml6ZWQgZnJvbSB0aGUgYXNzb2Np
YXRlZCBMYXllckNocm9taXVtLgotICAgIEZsb2F0UG9pbnQgbV9hbmNob3JQb2ludDsKLSAgICBm
bG9hdCBtX2FuY2hvclBvaW50WjsKLSAgICBJbnRTaXplIG1fYm91bmRzOwotICAgIEludFNpemUg
bV9jb250ZW50Qm91bmRzOwotICAgIEludFBvaW50IG1fc2Nyb2xsUG9zaXRpb247Ci0gICAgYm9v
bCBtX3Njcm9sbGFibGU7Ci0gICAgQ29sb3IgbV9iYWNrZ3JvdW5kQ29sb3I7Ci0KLSAgICAvLyBX
aGV0aGVyIHRoZSAiYmFjayIgb2YgdGhpcyBsYXllciBzaG91bGQgZHJhdy4KLSAgICBib29sIG1f
ZG91YmxlU2lkZWQ7Ci0KICAgICAvLyBUcmFja3MgaWYgZHJhd2luZy1yZWxhdGVkIHByb3BlcnRp
ZXMgaGF2ZSBjaGFuZ2VkIHNpbmNlIGxhc3QgcmVkcmF3LgogICAgIGJvb2wgbV9sYXllclByb3Bl
cnR5Q2hhbmdlZDsKIAogICAgIEludFJlY3QgbV92aXNpYmxlTGF5ZXJSZWN0OwotICAgIGJvb2wg
bV9tYXNrc1RvQm91bmRzOwotICAgIGJvb2wgbV9vcGFxdWU7Ci0gICAgZmxvYXQgbV9vcGFjaXR5
OwotICAgIEZsb2F0UG9pbnQgbV9wb3NpdGlvbjsKLSAgICBib29sIG1fcHJlc2VydmVzM0Q7CiAg
ICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV96b29tQW5pbWF0b3JUcmFuc2Zvcm07Ci0gICAgVHJh
bnNmb3JtYXRpb25NYXRyaXggbV9zdWJsYXllclRyYW5zZm9ybTsKLSAgICBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCBtX3RyYW5zZm9ybTsKICAgICBib29sIG1fdXNlc0xheWVyQ2xpcHBpbmc7Ci0gICAg
Ym9vbCBtX2lzTm9uQ29tcG9zaXRlZENvbnRlbnQ7Ci0KLSAgICBib29sIG1fZHJhd3NDb250ZW50
OwogCi0gICAgSW50U2l6ZSBtX3Njcm9sbERlbHRhOwotICAgIEludFNpemUgbV9zZW50U2Nyb2xs
RGVsdGE7CiAgICAgSW50U2l6ZSBtX21heFNjcm9sbFBvc2l0aW9uOwogICAgIGZsb2F0IG1fcGFn
ZVNjYWxlRGVsdGE7CiAKQEAgLTI2OCw4ICsyOTAsNiBAQCBwcml2YXRlOgogICAgIGludCBtX2Rl
YnVnSUQ7CiAjZW5kaWYKIAotICAgIFN0cmluZyBtX25hbWU7Ci0KICAgICAvLyBSZW5kZXIgc3Vy
ZmFjZSB0aGlzIGxheWVyIGRyYXdzIGludG8uIFRoaXMgaXMgYSBzdXJmYWNlIHRoYXQgY2FuIGJl
bG9uZwogICAgIC8vIGVpdGhlciB0byB0aGlzIGxheWVyIChpZiBtX3RhcmdldFJlbmRlclN1cmZh
Y2UgPT0gbV9yZW5kZXJTdXJmYWNlKSBvcgogICAgIC8vIHRvIGFuIGFuY2VzdG9yIG9mIHRoaXMg
bGF5ZXIuIFRoZSB0YXJnZXQgcmVuZGVyIHN1cmZhY2UgZGV0ZXJtaW5lcyB0aGUKQEAgLTI4MSwx
MCArMzAxLDYgQEAgcHJpdmF0ZToKICAgICBmbG9hdCBtX2RyYXdEZXB0aDsKICAgICBmbG9hdCBt
X2RyYXdPcGFjaXR5OwogCi0gICAgLy8gRGVidWcgYm9yZGVycy4KLSAgICBDb2xvciBtX2RlYnVn
Qm9yZGVyQ29sb3I7Ci0gICAgZmxvYXQgbV9kZWJ1Z0JvcmRlcldpZHRoOwotCiAgICAgVHJhbnNm
b3JtYXRpb25NYXRyaXggbV9kcmF3VHJhbnNmb3JtOwogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4
IG1fc2NyZWVuU3BhY2VUcmFuc2Zvcm07CiAKQEAgLTI5OSwxNCArMzE1LDg2IEBAIHByaXZhdGU6
CiAKICAgICAvLyBIaWVyYXJjaGljYWwgYm91bmRpbmcgcmVjdCBjb250YWluaW5nIHRoZSBsYXll
ciBhbmQgaXRzIGRlc2NlbmRhbnRzLgogICAgIEludFJlY3QgbV9kcmF3YWJsZUNvbnRlbnRSZWN0
OwotCi0gICAgLy8gUmVjdCBpbmRpY2F0aW5nIHdoYXQgd2FzIHJlcGFpbnRlZC91cGRhdGVkIGR1
cmluZyB1cGRhdGUuCi0gICAgLy8gTm90ZSB0aGF0IHBsdWdpbiBsYXllcnMgYnlwYXNzIHRoaXMg
YW5kIGxlYXZlIGl0IGVtcHR5LgotICAgIEZsb2F0UmVjdCBtX3VwZGF0ZVJlY3Q7CiB9OwogCiB2
b2lkIHNvcnRMYXllcnMoVmVjdG9yPFJlZlB0cjxDQ0xheWVySW1wbD4gPjo6aXRlcmF0b3IgZmly
c3QsIFZlY3RvcjxSZWZQdHI8Q0NMYXllckltcGw+ID46Oml0ZXJhdG9yIGVuZCwgQ0NMYXllclNv
cnRlciopOwogCitjbGFzcyBDQ0xheWVyRGF0YSA6IHB1YmxpYyBDQ0xheWVyLCBwdWJsaWMgQ0NM
YXllclByb3BlcnRpZXMgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPENDTGF5ZXJE
YXRhPiBjcmVhdGUoaW50IGlkKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBD
Q0xheWVyRGF0YShpZCkpOworICAgIH0KKyAgICBzdGF0aWMgdm9pZCBwdXNoUHJvcGVydGllcyhj
b25zdCBDQ0xheWVyRGF0YSosIENDTGF5ZXIqKTsKKworICAgIHZpcnR1YWwgfkNDTGF5ZXJEYXRh
KCk7CisKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q0NMYXllcj4gY3JlYXRlQ0NMYXllcigpCisg
ICAgeworICAgICAgICByZXR1cm4gQ0NMYXllckltcGw6OmNyZWF0ZShpZCgpKTsKKyAgICB9CisK
KyAgICB2aXJ0dWFsIHZvaWQgcHVzaFByb3BlcnRpZXNUbyhDQ0xheWVyKiBsYXllcikKKyAgICB7
CisgICAgICAgIHB1c2hQcm9wZXJ0aWVzKHRoaXMsIGxheWVyKTsKKyAgICB9CisKKyAgICAvLyBU
cmVlIHN0cnVjdHVyZS4KKyAgICBDQ0xheWVyRGF0YSogcGFyZW50KCkgY29uc3QgeyByZXR1cm4g
bV9wYXJlbnQ7IH0KKyAgICBjb25zdCBWZWN0b3I8UmVmUHRyPENDTGF5ZXJEYXRhPiA+JiBjaGls
ZHJlbigpIGNvbnN0IHsgcmV0dXJuIG1fY2hpbGRyZW47IH0KKyAgICB2b2lkIGFkZENoaWxkKFBh
c3NSZWZQdHI8Q0NMYXllckRhdGE+KTsKKworICAgIHZvaWQgc2V0TWFza0xheWVyKFBhc3NSZWZQ
dHI8Q0NMYXllckRhdGE+IG1hc2tMYXllcikgeyBtX21hc2tMYXllciA9IG1hc2tMYXllcjsgfQor
ICAgIENDTGF5ZXJEYXRhKiBtYXNrTGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX21hc2tMYXllci5n
ZXQoKTsgfQorCisgICAgdm9pZCBzZXRSZXBsaWNhTGF5ZXIoUGFzc1JlZlB0cjxDQ0xheWVyRGF0
YT4gcmVwbGljYUxheWVyKSB7IG1fcmVwbGljYUxheWVyID0gcmVwbGljYUxheWVyOyB9CisgICAg
Q0NMYXllckRhdGEqIHJlcGxpY2FMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fcmVwbGljYUxheWVy
LmdldCgpOyB9CisKKyAgICBpbnQgaWQoKSBjb25zdCB7IHJldHVybiBtX2xheWVySWQ7IH0KKwor
ICAgIHZvaWQgc2V0QW5jaG9yUG9pbnQoY29uc3QgRmxvYXRQb2ludCYgYW5jaG9yUG9pbnQpIHsg
bV9hbmNob3JQb2ludCA9IGFuY2hvclBvaW50OyB9CisgICAgdm9pZCBzZXRBbmNob3JQb2ludFoo
ZmxvYXQgYW5jaG9yUG9pbnRaKSB7IG1fYW5jaG9yUG9pbnRaID0gYW5jaG9yUG9pbnRaOyB9Cisg
ICAgdm9pZCBzZXRCYWNrZ3JvdW5kQ29sb3IoY29uc3QgQ29sb3ImIGJhY2tncm91bmRDb2xvcikg
eyBtX2JhY2tncm91bmRDb2xvciA9IGJhY2tncm91bmRDb2xvcjsgfQorICAgIHZvaWQgc2V0Qm91
bmRzKGNvbnN0IEludFNpemUmIGJvdW5kcykgeyBtX2JvdW5kcyA9IGJvdW5kczsgfQorICAgIHZv
aWQgc2V0Q29udGVudEJvdW5kcyhjb25zdCBJbnRTaXplJiBjb250ZW50Qm91bmRzKSB7IG1fY29u
dGVudEJvdW5kcyA9IGNvbnRlbnRCb3VuZHM7IH0KKyAgICB2b2lkIHNldERlYnVnQm9yZGVyQ29s
b3IoQ29sb3IgZGVidWdCb3JkZXJDb2xvcikgeyBtX2RlYnVnQm9yZGVyQ29sb3IgPSBkZWJ1Z0Jv
cmRlckNvbG9yOyB9CisgICAgdm9pZCBzZXREZWJ1Z0JvcmRlcldpZHRoKGZsb2F0IGRlYnVnQm9y
ZGVyV2lkdGgpIHsgbV9kZWJ1Z0JvcmRlcldpZHRoID0gZGVidWdCb3JkZXJXaWR0aDsgfQorICAg
IHZvaWQgc2V0RG91YmxlU2lkZWQoYm9vbCBkb3VibGVTaWRlZCkgeyBtX2RvdWJsZVNpZGVkID0g
ZG91YmxlU2lkZWQ7IH0KKyAgICB2b2lkIHNldERyYXdzQ29udGVudChib29sIGRyYXdzQ29udGVu
dCkgeyBtX2RyYXdzQ29udGVudCA9IGRyYXdzQ29udGVudDsgfQorICAgIHZvaWQgc2V0SXNOb25D
b21wb3NpdGVkQ29udGVudChib29sIGlzTm9uQ29tcG9zaXRlZENvbnRlbnQpIHsgbV9pc05vbkNv
bXBvc2l0ZWRDb250ZW50ID0gaXNOb25Db21wb3NpdGVkQ29udGVudDsgfQorICAgIHZvaWQgc2V0
TWFza3NUb0JvdW5kcyhib29sIG1hc2tzVG9Cb3VuZHMpIHsgbV9tYXNrc1RvQm91bmRzID0gbWFz
a3NUb0JvdW5kczsgfQorICAgIHZvaWQgc2V0TmFtZShjb25zdCBTdHJpbmcmIG5hbWUpIHsgbV9u
YW1lID0gbmFtZTsgfQorICAgIHZvaWQgc2V0T3BhcXVlKGJvb2wgb3BhcXVlKSB7IG1fb3BhcXVl
ID0gb3BhcXVlOyB9CisgICAgdm9pZCBzZXRPcGFjaXR5KGZsb2F0IG9wYWNpdHkpIHsgbV9vcGFj
aXR5ID0gb3BhY2l0eTsgfQorICAgIHZvaWQgc2V0UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYg
cG9zaXRpb24pIHsgbV9wb3NpdGlvbiA9IHBvc2l0aW9uOyB9CisgICAgdm9pZCBzZXRQcmVzZXJ2
ZXMzRChib29sIHByZXNlcnZlczNEKSB7IG1fcHJlc2VydmVzM0QgPSBwcmVzZXJ2ZXMzRDsgfQor
ICAgIHZvaWQgc2V0U2Nyb2xsYWJsZShib29sIHNjcm9sbGFibGUpIHsgbV9zY3JvbGxhYmxlID0g
c2Nyb2xsYWJsZTsgfQorICAgIHZvaWQgc2V0U2Nyb2xsRGVsdGEoY29uc3QgSW50U2l6ZSYgc2Ny
b2xsRGVsdGEpIHsgbV9zY3JvbGxEZWx0YSA9IHNjcm9sbERlbHRhOyB9CisgICAgdm9pZCBzZXRT
Y3JvbGxQb3NpdGlvbihjb25zdCBJbnRQb2ludCYgc2Nyb2xsUG9zaXRpb24pIHsgbV9zY3JvbGxQ
b3NpdGlvbiA9IHNjcm9sbFBvc2l0aW9uOyB9CisgICAgdm9pZCBzZXRTZW50U2Nyb2xsRGVsdGEo
Y29uc3QgSW50U2l6ZSYgc2VudFNjcm9sbERlbHRhKSB7IG1fc2VudFNjcm9sbERlbHRhID0gc2Vu
dFNjcm9sbERlbHRhOyB9CisgICAgdm9pZCBzZXRTdWJsYXllclRyYW5zZm9ybShjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgc3VibGF5ZXJUcmFuc2Zvcm0pIHsgbV9zdWJsYXllclRyYW5zZm9y
bSA9IHN1YmxheWVyVHJhbnNmb3JtOyB9CisgICAgdm9pZCBzZXRUcmFuc2Zvcm0oY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSkgeyBtX3RyYW5zZm9ybSA9IHRyYW5zZm9ybTsg
fQorICAgIHZvaWQgc2V0VXBkYXRlUmVjdChjb25zdCBGbG9hdFJlY3QmIHVwZGF0ZVJlY3QpIHsg
bV91cGRhdGVSZWN0ID0gdXBkYXRlUmVjdDsgfQorCisgICAgY29uc3QgSW50U2l6ZSYgc2Nyb2xs
RGVsdGEoKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbERlbHRhOyB9CisgICAgY29uc3QgSW50U2l6
ZSYgc2VudFNjcm9sbERlbHRhKCkgY29uc3QgeyByZXR1cm4gbV9zZW50U2Nyb2xsRGVsdGE7IH0K
KworcHJvdGVjdGVkOgorICAgIGV4cGxpY2l0IENDTGF5ZXJEYXRhKGludCk7CisKK3ByaXZhdGU6
CisgICAgdm9pZCBzZXRQYXJlbnQoQ0NMYXllckRhdGEqIHBhcmVudCkgeyBtX3BhcmVudCA9IHBh
cmVudDsgfQorICAgIGZyaWVuZCBjbGFzcyBUcmVlU3luY2hyb25pemVyOworICAgIHZvaWQgY2xl
YXJDaGlsZExpc3QoKTsgLy8gV2FybmluZzogVGhpcyBkb2VzIG5vdCBwcmVzZXJ2ZSB0cmVlIHN0
cnVjdHVyZSBpbnZhcmlhbnRzIGFuZCBzbyBpcyBvbmx5IGV4cG9zZWQgdG8gdGhlIHRyZWUgc3lu
Y2hyb25pemVyLgorCisgICAgLy8gUHJvcGVydGllcyBpbnRlcm5hbCB0byBDQ0xheWVyRGF0YQor
ICAgIENDTGF5ZXJEYXRhKiBtX3BhcmVudDsKKyAgICBWZWN0b3I8UmVmUHRyPENDTGF5ZXJEYXRh
PiA+IG1fY2hpbGRyZW47CisgICAgUmVmUHRyPENDTGF5ZXJEYXRhPiBtX21hc2tMYXllcjsKKyAg
ICBSZWZQdHI8Q0NMYXllckRhdGE+IG1fcmVwbGljYUxheWVyOworICAgIGludCBtX2xheWVySWQ7
Cit9OworCiB9CiAKICNlbmRpZiAvLyBDQ0xheWVySW1wbF9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0LmNwcAppbmRleCA5N2RjZDRkLi41Mjk2ZWM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJU
cmVlSG9zdC5jcHAKQEAgLTU4LDkgKzU4LDkgQEAgQ0NMYXllclRyZWVIb3N0OjpOZWVkUmVzb3Vy
Y2VIYW5kbGVyOjp+TmVlZFJlc291cmNlSGFuZGxlcigpCiB7CiB9CiAKLXZvaWQgQ0NMYXllclRy
ZWVIb3N0OjpOZWVkUmVzb3VyY2VIYW5kbGVyOjpoYW5kbGUoTGF5ZXJUZXh0dXJlVXBkYXRlcjo6
VGV4dHVyZSogdGV4dHVyZSwgY29uc3QgSW50UmVjdCYgLyogc291cmNlUmVjdCAqLywgY29uc3Qg
SW50UmVjdCYgLyogZGVzdFJlY3QgKi8pCit2b2lkIENDTGF5ZXJUcmVlSG9zdDo6TmVlZFJlc291
cmNlSGFuZGxlcjo6aGFuZGxlKExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmUqIHRleHR1cmUp
CiB7Ci0gICAgaWYgKHRleHR1cmUtPm5lZWRQcmVwYXJlUmVjdCgpKQorICAgIGlmICh0ZXh0dXJl
LT5uZWVkUHJlcGFyZSgpKQogICAgICAgICBtX3Jlc291cmNlcysrOwogfQogCkBAIC03NCwyNSAr
NzQsMjggQEAgQ0NMYXllclRyZWVIb3N0OjpQcmVwYXJlUmVzb3VyY2VIYW5kbGVyOjp+UHJlcGFy
ZVJlc291cmNlSGFuZGxlcigpCiB7CiB9CiAKLXZvaWQgQ0NMYXllclRyZWVIb3N0OjpQcmVwYXJl
UmVzb3VyY2VIYW5kbGVyOjpoYW5kbGUoTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZSogdGV4
dHVyZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3Qp
Cit2b2lkIENDTGF5ZXJUcmVlSG9zdDo6UHJlcGFyZVJlc291cmNlSGFuZGxlcjo6aGFuZGxlKExh
eWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmUqIHRleHR1cmUpCiB7Ci0gICAgaWYgKHRleHR1cmUt
Pm5lZWRQcmVwYXJlUmVjdCgpKQotICAgICAgICB0ZXh0dXJlLT5wcmVwYXJlUmVjdChtX2NvbnRl
eHQsIG1fYWxsb2NhdG9yLCBzb3VyY2VSZWN0LCBkZXN0UmVjdCk7CisgICAgaWYgKHRleHR1cmUt
Pm5lZWRQcmVwYXJlKCkpCisgICAgICAgIHRleHR1cmUtPnByZXBhcmUobV9jb250ZXh0LCBtX2Fs
bG9jYXRvcik7CiB9CiAKLUNDTGF5ZXJUcmVlSG9zdDo6UGFpbnRIYW5kbGVyOjpQYWludEhhbmRs
ZXIoQ0NQcm94eSogcHJveHkpCitDQ0xheWVyVHJlZUhvc3Q6OlVwZGF0ZUhhbmRsZXI6OlVwZGF0
ZUhhbmRsZXIoQ0NQcm94eSogcHJveHkpCiAgICAgOiBtX3Byb3h5KHByb3h5KQogewogfQogCi1D
Q0xheWVyVHJlZUhvc3Q6OlBhaW50SGFuZGxlcjo6flBhaW50SGFuZGxlcigpCitDQ0xheWVyVHJl
ZUhvc3Q6OlVwZGF0ZUhhbmRsZXI6On5VcGRhdGVIYW5kbGVyKCkKIHsKIH0KIAotdm9pZCBDQ0xh
eWVyVHJlZUhvc3Q6OlBhaW50SGFuZGxlcjo6aGFuZGxlKExheWVyVGV4dHVyZVVwZGF0ZXI6OlRl
eHR1cmUqIHRleHR1cmUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3Qm
IGRlc3RSZWN0KQordm9pZCBDQ0xheWVyVHJlZUhvc3Q6OlVwZGF0ZUhhbmRsZXI6OmhhbmRsZShM
YXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlKiB0ZXh0dXJlKQogewotICAgIHRleHR1cmUtPnBh
aW50Q29udGVudHNSZWN0KHNvdXJjZVJlY3QpOwotICAgIG1fcHJveHktPnVwZGF0ZSh0ZXh0dXJl
LCBzb3VyY2VSZWN0LCBkZXN0UmVjdCk7CisgICAgT3duUHRyPENDVGV4dHVyZVVwZGF0ZXI6OlRl
eHR1cmVVcGRhdGU+IHRleHR1cmVVcGRhdGUgPSB0ZXh0dXJlLT5jcmVhdGVDQ1RleHR1cmVVcGRh
dGUoKTsKKyAgICBpZiAodGV4dHVyZVVwZGF0ZS5nZXQoKSkgeworICAgICAgICB0ZXh0dXJlLT5w
dXNoUHJvcGVydGllc1RvKHRleHR1cmVVcGRhdGUuZ2V0KCkpOworICAgICAgICBtX3Byb3h5LT51
cGRhdGUodGV4dHVyZVVwZGF0ZS5yZWxlYXNlKCkpOworICAgIH0KIH0KIAogUGFzc1JlZlB0cjxD
Q0xheWVyVHJlZUhvc3Q+IENDTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlKENDTGF5ZXJUcmVlSG9zdENs
aWVudCogY2xpZW50LCBjb25zdCBDQ1NldHRpbmdzJiBzZXR0aW5ncykKQEAgLTE4NiwxNSArMTg5
LDEyIEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpiZWdpbkNvbW1pdE9uSW1wbFRocmVhZChDQ0xh
eWVyVHJlZUhvc3RJbXBsKiBob3N0SW1wbCkKIC8vIGNvZGUgdGhhdCBpcyBsb2dpY2FsbHkgYSBt
YWluIHRocmVhZCBvcGVyYXRpb24sIGUuZy4gZGVsZXRpb24gb2YgYSBMYXllckNocm9taXVtLAog
Ly8gc2hvdWxkIGJlIGRlbGF5ZWQgdW50aWwgdGhlIENDTGF5ZXJUcmVlSG9zdDo6Y29tbWl0Q29t
cGxldGUsIHdoaWNoIHdpbGwgcnVuCiAvLyBhZnRlciB0aGUgY29tbWl0LCBidXQgb24gdGhlIG1h
aW4gdGhyZWFkLgotdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmZpbmlzaENvbW1pdE9uSW1wbFRocmVh
ZChDQ0xheWVyVHJlZUhvc3RJbXBsKiBob3N0SW1wbCkKK3ZvaWQgQ0NMYXllclRyZWVIb3N0Ojpm
aW5pc2hDb21taXRPbkltcGxUaHJlYWQoQ0NMYXllclRyZWVIb3N0SW1wbCogaG9zdEltcGwsIFBh
c3NSZWZQdHI8Q0NMYXllckltcGw+IG5ld1Jvb3RMYXllcikKIHsKICAgICBBU1NFUlQoQ0NQcm94
eTo6aXNJbXBsVGhyZWFkKCkpOwogCi0gICAgLy8gU3luY2hyb25pemUgdHJlZXMsIGlmIG9uZSBl
eGlzdHMgYXQgYWxsLi4uCi0gICAgaWYgKHJvb3RMYXllcigpKQotICAgICAgICBob3N0SW1wbC0+
c2V0Um9vdExheWVyKFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMocm9vdExheWVy
KCksIGhvc3RJbXBsLT5yb290TGF5ZXIoKSkpOwotICAgIGVsc2UKLSAgICAgICAgaG9zdEltcGwt
PnNldFJvb3RMYXllcigwKTsKKyAgICAvLyBTd2l0Y2ggdG8gbmV3IHRyZWUuCisgICAgaG9zdElt
cGwtPnNldFJvb3RMYXllcihuZXdSb290TGF5ZXIpOwogCiAgICAgaG9zdEltcGwtPnNldFNvdXJj
ZUZyYW1lTnVtYmVyKGZyYW1lTnVtYmVyKCkpOwogICAgIGhvc3RJbXBsLT5zZXRIYXZlV2hlZWxF
dmVudEhhbmRsZXJzKG1faGF2ZVdoZWVsRXZlbnRIYW5kbGVycyk7CkBAIC0zNjEsOSArMzYxLDEx
IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpkaWRCZWNvbWVJbnZpc2libGVPbkltcGxUaHJlYWQo
Q0NMYXllclRyZWVIb3N0SW1wbCogaG9zdEltCiAgICAgICAgIGhvc3RJbXBsLT5zZXRSb290TGF5
ZXIoMCk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKHJvb3RMYXllcigpKQotICAg
ICAgICBob3N0SW1wbC0+c2V0Um9vdExheWVyKFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXpl
VHJlZXMocm9vdExheWVyKCksIGhvc3RJbXBsLT5yb290TGF5ZXIoKSkpOwotICAgIGVsc2UKKyAg
ICBpZiAocm9vdExheWVyKCkpIHsKKyAgICAgICAgQVNTRVJUKENDUHJveHk6Omhhc0ltcGxUaHJl
YWQoKSk7CisgICAgICAgIFJlZlB0cjxDQ0xheWVyRGF0YT4gcm9vdERhdGFMYXllciA9IFRyZWVT
eW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMocm9vdExheWVyKCkpOworICAgICAgICBob3N0
SW1wbC0+c2V0Um9vdExheWVyKFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMocm9v
dERhdGFMYXllci5nZXQoKSwgaG9zdEltcGwtPnJvb3RMYXllcigpKSk7CisgICAgfSBlbHNlCiAg
ICAgICAgIGhvc3RJbXBsLT5zZXRSb290TGF5ZXIoMCk7CiB9CiAKQEAgLTUwNiw3ICs1MDgsNyBA
QCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6cGFpbnRDb250ZW50cyhMYXllckNocm9taXVtKiByb290
TGF5ZXIpCiAgICAgICAgIExheWVyQ2hyb21pdW0qIGxheWVyID0gbV9sYXllclVwZGF0ZUxpc3Rb
bGF5ZXJJbmRleF0uZ2V0KCk7CiAgICAgICAgIGxheWVyLT5wYWludENvbnRlbnRzSWZEaXJ0eSgp
OwogCi0gICAgICAgIFBhaW50SGFuZGxlciBoYW5kbGVyKG1fcHJveHkuZ2V0KCkpOworICAgICAg
ICBVcGRhdGVIYW5kbGVyIGhhbmRsZXIobV9wcm94eS5nZXQoKSk7CiAgICAgICAgIGxheWVyLT5m
b3JFYWNoQ29tcG9zaXRvclJlc291cmNlKGhhbmRsZXIpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0LmgKaW5kZXggNzAyMzYzMi4uYzg0ODUwNyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0LmgKQEAgLTEyNCw3ICsxMjQsNyBAQCBwdWJsaWM6CiAgICAgLy8gQ0NMYXllclRy
ZWVIb3N0IGludGVyZmFjZSB0byBDQ1Byb3h5LgogICAgIHZvaWQgYW5pbWF0ZUFuZExheW91dChk
b3VibGUgZnJhbWVCZWdpblRpbWUpOwogICAgIHZvaWQgYmVnaW5Db21taXRPbkltcGxUaHJlYWQo
Q0NMYXllclRyZWVIb3N0SW1wbCopOwotICAgIHZvaWQgZmluaXNoQ29tbWl0T25JbXBsVGhyZWFk
KENDTGF5ZXJUcmVlSG9zdEltcGwqKTsKKyAgICB2b2lkIGZpbmlzaENvbW1pdE9uSW1wbFRocmVh
ZChDQ0xheWVyVHJlZUhvc3RJbXBsKiwgUGFzc1JlZlB0cjxDQ0xheWVySW1wbD4pOwogICAgIHZv
aWQgY29tbWl0Q29tcGxldGUoKTsKICAgICBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBj
cmVhdGVMYXllclRyZWVIb3N0Q29udGV4dDNEKCk7CiAgICAgdmlydHVhbCBQYXNzT3duUHRyPEND
TGF5ZXJUcmVlSG9zdEltcGw+IGNyZWF0ZUxheWVyVHJlZUhvc3RJbXBsKENDTGF5ZXJUcmVlSG9z
dEltcGxDbGllbnQqKTsKQEAgLTIxMSw3ICsyMTEsNyBAQCBwcml2YXRlOgogICAgICAgICBOZWVk
UmVzb3VyY2VIYW5kbGVyKCk7CiAgICAgICAgIHZpcnR1YWwgfk5lZWRSZXNvdXJjZUhhbmRsZXIo
KTsKIAotICAgICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlKExheWVyVGV4dHVyZVVwZGF0ZXI6OlRl
eHR1cmUqLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVj
dCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBoYW5kbGUoTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4
dHVyZSopOwogCiAgICAgICAgIGludCByZXNvdXJjZXMoKSB7IHJldHVybiBtX3Jlc291cmNlczsg
fQogCkBAIC0yMjQsMTkgKzIyNCwxOSBAQCBwcml2YXRlOgogICAgICAgICBQcmVwYXJlUmVzb3Vy
Y2VIYW5kbGVyKEdyYXBoaWNzQ29udGV4dDNEKiwgVGV4dHVyZUFsbG9jYXRvciopOwogICAgICAg
ICB2aXJ0dWFsIH5QcmVwYXJlUmVzb3VyY2VIYW5kbGVyKCk7CiAKLSAgICAgICAgdmlydHVhbCB2
b2lkIGhhbmRsZShMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlKiwgY29uc3QgSW50UmVjdCYg
c291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpOworICAgICAgICB2aXJ0dWFsIHZv
aWQgaGFuZGxlKExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmUqKTsKIAogICAgIHByaXZhdGU6
CiAgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEKiBtX2NvbnRleHQ7CiAgICAgICAgIFRleHR1cmVB
bGxvY2F0b3IqIG1fYWxsb2NhdG9yOwogICAgIH07CiAKLSAgICBjbGFzcyBQYWludEhhbmRsZXIg
OiBwdWJsaWMgTGF5ZXJUZXh0dXJlVXBkYXRlcjo6SGFuZGxlciB7CisgICAgY2xhc3MgVXBkYXRl
SGFuZGxlciA6IHB1YmxpYyBMYXllclRleHR1cmVVcGRhdGVyOjpIYW5kbGVyIHsKICAgICBwdWJs
aWM6Ci0gICAgICAgIFBhaW50SGFuZGxlcihDQ1Byb3h5Kik7Ci0gICAgICAgIHZpcnR1YWwgflBh
aW50SGFuZGxlcigpOworICAgICAgICBVcGRhdGVIYW5kbGVyKENDUHJveHkqKTsKKyAgICAgICAg
dmlydHVhbCB+VXBkYXRlSGFuZGxlcigpOwogCi0gICAgICAgIHZpcnR1YWwgdm9pZCBoYW5kbGUo
TGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZSosIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3Qs
IGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGhhbmRsZShM
YXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlKik7CiAKICAgICBwcml2YXRlOgogICAgICAgICBD
Q1Byb3h5KiBtX3Byb3h5OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5MYXllckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5MYXllckltcGwuY3BwCmluZGV4
IGJjMTA1YmIuLjRkN2RkNjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkxheWVySW1wbC5jcHAK
QEAgLTc4LDEyICs3OCw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogQ0NQbHVnaW5MYXllcklt
cGw6OkNDUGx1Z2luTGF5ZXJJbXBsKGludCBpZCkKICAgICA6IENDTGF5ZXJJbXBsKGlkKQotICAg
ICwgbV90ZXh0dXJlSWQoMCkKLSAgICAsIG1fZmxpcHBlZCh0cnVlKQotICAgICwgbV91dlJlY3Qo
MCwgMCwgMSwgMSkKLSAgICAsIG1faW9TdXJmYWNlSWQoMCkKLSAgICAsIG1faW9TdXJmYWNlV2lk
dGgoMCkKLSAgICAsIG1faW9TdXJmYWNlSGVpZ2h0KDApCiAgICAgLCBtX2lvU3VyZmFjZUNoYW5n
ZWQoZmFsc2UpCiAgICAgLCBtX2lvU3VyZmFjZVRleHR1cmVJZCgwKQogewpAQCAtMjAxLDYgKzE5
NSwzMiBAQCB2b2lkIENDUGx1Z2luTGF5ZXJJbXBsOjpjbGVhbnVwUmVzb3VyY2VzKCkKICAgICBt
X2lvU3VyZmFjZVRleHR1cmVJZCA9IDA7CiB9CiAKK0NDUGx1Z2luTGF5ZXJEYXRhOjpDQ1BsdWdp
bkxheWVyRGF0YShpbnQgaWQpCisgICAgOiBDQ0xheWVyRGF0YShpZCkKK3sKK30KKworQ0NQbHVn
aW5MYXllckRhdGE6On5DQ1BsdWdpbkxheWVyRGF0YSgpCit7Cit9CisKK3ZvaWQgQ0NQbHVnaW5M
YXllckRhdGE6OnNldElPU3VyZmFjZVByb3BlcnRpZXMoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCB1
aW50MzJfdCBpb1N1cmZhY2VJZCkKK3sKKyAgICBtX2lvU3VyZmFjZVdpZHRoID0gd2lkdGg7Cisg
ICAgbV9pb1N1cmZhY2VIZWlnaHQgPSBoZWlnaHQ7CisgICAgbV9pb1N1cmZhY2VJZCA9IGlvU3Vy
ZmFjZUlkOworfQorCit2b2lkIENDUGx1Z2luTGF5ZXJEYXRhOjpwdXNoUHJvcGVydGllcyhjb25z
dCBDQ1BsdWdpbkxheWVyRGF0YSogZnJvbSwgQ0NMYXllciogdG8pCit7CisgICAgQ0NQbHVnaW5M
YXllckltcGwqIGxheWVyID0gc3RhdGljX2Nhc3Q8Q0NQbHVnaW5MYXllckltcGwqPih0byk7CisK
KyAgICBsYXllci0+c2V0VGV4dHVyZUlkKGZyb20tPm1fdGV4dHVyZUlkKTsKKyAgICBsYXllci0+
c2V0RmxpcHBlZChmcm9tLT5tX2ZsaXBwZWQpOworICAgIGxheWVyLT5zZXRVVlJlY3QoZnJvbS0+
bV91dlJlY3QpOworICAgIGxheWVyLT5zZXRJT1N1cmZhY2VQcm9wZXJ0aWVzKGZyb20tPm1faW9T
dXJmYWNlV2lkdGgsIGZyb20tPm1faW9TdXJmYWNlSGVpZ2h0LCBmcm9tLT5tX2lvU3VyZmFjZUlk
KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5MYXllckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmgKaW5kZXggZTA5
ODI2YS4uMGNkY2Y2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5MYXllckltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkxheWVySW1wbC5oCkBAIC0zMyw3
ICszMywyNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIENDUGx1Z2luTGF5ZXJJ
bXBsIDogcHVibGljIENDTGF5ZXJJbXBsIHsKK2NsYXNzIENDUGx1Z2luTGF5ZXJQcm9wZXJ0aWVz
IHsKK3Byb3RlY3RlZDoKKyAgICBleHBsaWNpdCBDQ1BsdWdpbkxheWVyUHJvcGVydGllcygpCisg
ICAgICAgIDogbV90ZXh0dXJlSWQoMCkKKyAgICAgICAgLCBtX2ZsaXBwZWQodHJ1ZSkKKyAgICAg
ICAgLCBtX3V2UmVjdCgwLCAwLCAxLCAxKQorICAgICAgICAsIG1faW9TdXJmYWNlSWQoMCkKKyAg
ICAgICAgLCBtX2lvU3VyZmFjZVdpZHRoKDApCisgICAgICAgICwgbV9pb1N1cmZhY2VIZWlnaHQo
MCkKKyAgICB7CisgICAgfQorCisgICAgdW5zaWduZWQgbV90ZXh0dXJlSWQ7CisgICAgYm9vbCBt
X2ZsaXBwZWQ7CisgICAgRmxvYXRSZWN0IG1fdXZSZWN0OworICAgIHVpbnQzMl90IG1faW9TdXJm
YWNlSWQ7CisgICAgaW50IG1faW9TdXJmYWNlV2lkdGg7CisgICAgaW50IG1faW9TdXJmYWNlSGVp
Z2h0OworfTsKKworY2xhc3MgQ0NQbHVnaW5MYXllckltcGwgOiBwdWJsaWMgQ0NMYXllckltcGws
IHB1YmxpYyBDQ1BsdWdpbkxheWVyUHJvcGVydGllcyB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBh
c3NSZWZQdHI8Q0NQbHVnaW5MYXllckltcGw+IGNyZWF0ZShpbnQgaWQpCiAgICAgewpAQCAtNjIs
MTggKzgyLDQxIEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGNsZWFudXBSZXNvdXJjZXMoKTsKIAot
ICAgIHVuc2lnbmVkIG1fdGV4dHVyZUlkOwotICAgIGJvb2wgbV9mbGlwcGVkOwotICAgIEZsb2F0
UmVjdCBtX3V2UmVjdDsKLSAgICB1aW50MzJfdCBtX2lvU3VyZmFjZUlkOwotICAgIGludCBtX2lv
U3VyZmFjZVdpZHRoOwotICAgIGludCBtX2lvU3VyZmFjZUhlaWdodDsKLQogICAgIC8vIEludGVy
bmFscyBmb3IgdGhlIElPU3VyZmFjZSByZW5kZXJpbmcgcGF0aC4KICAgICBib29sIG1faW9TdXJm
YWNlQ2hhbmdlZDsKICAgICB1bnNpZ25lZCBtX2lvU3VyZmFjZVRleHR1cmVJZDsKIH07CiAKK2Ns
YXNzIENDUGx1Z2luTGF5ZXJEYXRhIDogcHVibGljIENDTGF5ZXJEYXRhLCBwdWJsaWMgQ0NQbHVn
aW5MYXllclByb3BlcnRpZXMgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPENDUGx1
Z2luTGF5ZXJEYXRhPiBjcmVhdGUoaW50IGlkKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBDQ1BsdWdpbkxheWVyRGF0YShpZCkpOworICAgIH0KKyAgICBzdGF0aWMgdm9pZCBw
dXNoUHJvcGVydGllcyhjb25zdCBDQ1BsdWdpbkxheWVyRGF0YSosIENDTGF5ZXIqKTsKKworICAg
IHZpcnR1YWwgfkNDUGx1Z2luTGF5ZXJEYXRhKCk7CisKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
Q0NMYXllcj4gY3JlYXRlQ0NMYXllcigpCisgICAgeworICAgICAgICByZXR1cm4gQ0NQbHVnaW5M
YXllckltcGw6OmNyZWF0ZShpZCgpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcHVzaFBy
b3BlcnRpZXNUbyhDQ0xheWVyKiBsYXllcikKKyAgICB7CisgICAgICAgIENDTGF5ZXJEYXRhOjpw
dXNoUHJvcGVydGllcyh0aGlzLCBsYXllcik7CisgICAgICAgIHB1c2hQcm9wZXJ0aWVzKHRoaXMs
IGxheWVyKTsKKyAgICB9CisKKyAgICB2b2lkIHNldFRleHR1cmVJZCh1bnNpZ25lZCBpZCkgeyBt
X3RleHR1cmVJZCA9IGlkOyB9CisgICAgdm9pZCBzZXRGbGlwcGVkKGJvb2wgZmxpcHBlZCkgeyBt
X2ZsaXBwZWQgPSBmbGlwcGVkOyB9CisgICAgdm9pZCBzZXRVVlJlY3QoY29uc3QgRmxvYXRSZWN0
JiByZWN0KSB7IG1fdXZSZWN0ID0gcmVjdDsgfQorICAgIHZvaWQgc2V0SU9TdXJmYWNlUHJvcGVy
dGllcyhpbnQgd2lkdGgsIGludCBoZWlnaHQsIHVpbnQzMl90IGlvU3VyZmFjZUlkKTsKKworcHJv
dGVjdGVkOgorICAgIGV4cGxpY2l0IENDUGx1Z2luTGF5ZXJEYXRhKGludCk7Cit9OworCiB9CiAK
ICNlbmRpZiAvLyBDQ1BsdWdpbkxheWVySW1wbF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Byb3h5LmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Byb3h5LmgKaW5kZXggZWVlNmQxOC4u
ZTFiYzc3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDUHJveHkuaApAQCAtODAsNyArODAsNyBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCB2b2lkIHN0YXJ0KCkgPSAwOyAvLyBNdXN0IGJlIGNhbGxlZCBiZWZvcmUgdXNpbmcgdGhl
IHByb3h5LgogICAgIHZpcnR1YWwgdm9pZCBzdG9wKCkgPSAwOyAvLyBNdXN0IGJlIGNhbGxlZCBi
ZWZvcmUgZGVsZXRpbmcgdGhlIHByb3h5LgogCi0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZShMYXll
clRleHR1cmVVcGRhdGVyOjpUZXh0dXJlKiwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29u
c3QgSW50UmVjdCYgZGVzdFJlY3QpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlKFBhc3NP
d25QdHI8Q0NUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZVVwZGF0ZT4pID0gMDsKIAogICAgIC8vIERl
YnVnIGhvb2tzCiAjaWZuZGVmIE5ERUJVRwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFBy
b3h5LmNwcAppbmRleCBlMzhhY2QyLi43YjE5YWIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Npbmds
ZVRocmVhZFByb3h5LmNwcApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dDNELmgiCiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCiAjaW5jbHVkZSAi
VHJhY2VFdmVudC5oIgorI2luY2x1ZGUgIlRyZWVTeW5jaHJvbml6ZXIuaCIKICNpbmNsdWRlICJj
Yy9DQ0xheWVyVHJlZUhvc3QuaCIKICNpbmNsdWRlICJjYy9DQ1RleHR1cmVVcGRhdGVyLmgiCiAj
aW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CkBAIC0xNjksOCArMTcwLDggQEAgdm9pZCBDQ1Np
bmdsZVRocmVhZFByb3h5Ojpkb0NvbW1pdCgpCiAgICAgICAgIHdoaWxlIChtX3RleHR1cmVVcGRh
dGVyLnVwZGF0ZShtX2xheWVyVHJlZUhvc3RJbXBsLT5jb250ZXh0KCksIDEpKSB7IH0KICAgICAg
ICAgbV9sYXllclRyZWVIb3N0LT5iZWdpbkNvbW1pdE9uSW1wbFRocmVhZChtX2xheWVyVHJlZUhv
c3RJbXBsLmdldCgpKTsKICAgICAgICAgbV9sYXllclRyZWVIb3N0SW1wbC0+c2V0VmlzaWJsZSht
X2xheWVyVHJlZUhvc3QtPnZpc2libGUoKSk7Ci0gICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+Zmlu
aXNoQ29tbWl0T25JbXBsVGhyZWFkKG1fbGF5ZXJUcmVlSG9zdEltcGwuZ2V0KCkpOwotCisgICAg
ICAgIEFTU0VSVCghQ0NQcm94eTo6aGFzSW1wbFRocmVhZCgpKTsKKyAgICAgICAgbV9sYXllclRy
ZWVIb3N0LT5maW5pc2hDb21taXRPbkltcGxUaHJlYWQobV9sYXllclRyZWVIb3N0SW1wbC5nZXQo
KSwgbV9sYXllclRyZWVIb3N0LT5yb290TGF5ZXIoKSA/IFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNo
cm9uaXplVHJlZXMobV9sYXllclRyZWVIb3N0LT5yb290TGF5ZXIoKSwgbV9sYXllclRyZWVIb3N0
SW1wbC0+cm9vdExheWVyKCkpIDogMCk7CiAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPmNv
bW1pdENvbXBsZXRlKCk7CiAKICNpZiAhQVNTRVJUX0RJU0FCTEVECkBAIC0yMjAsMTIgKzIyMSwx
MiBAQCB2b2lkIENDU2luZ2xlVGhyZWFkUHJveHk6OnN0b3AoKQogICAgIG1fbGF5ZXJUcmVlSG9z
dCA9IDA7CiB9CiAKLXZvaWQgQ0NTaW5nbGVUaHJlYWRQcm94eTo6dXBkYXRlKExheWVyVGV4dHVy
ZVVwZGF0ZXI6OlRleHR1cmUqIHRleHR1cmUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNv
bnN0IEludFJlY3QmIGRlc3RSZWN0KQordm9pZCBDQ1NpbmdsZVRocmVhZFByb3h5Ojp1cGRhdGUo
UGFzc093blB0cjxDQ1RleHR1cmVVcGRhdGVyOjpUZXh0dXJlVXBkYXRlPiBlbnRyeSkKIHsKICAg
ICBpZiAobV9sYXllclRyZWVIb3N0SW1wbC0+c2V0dGluZ3MoKS5kZWxheVRleHR1cmVVcGRhdGVz
KQotICAgICAgICBtX3RleHR1cmVVcGRhdGVyLmFwcGVuZCh0ZXh0dXJlLCBzb3VyY2VSZWN0LCBk
ZXN0UmVjdCk7CisgICAgICAgIG1fdGV4dHVyZVVwZGF0ZXIuYXBwZW5kKGVudHJ5KTsKICAgICBl
bHNlCi0gICAgICAgIHRleHR1cmUtPnVwZGF0ZVJlY3QobV9sYXllclRyZWVIb3N0SW1wbC0+Y29u
dGV4dCgpLCBzb3VyY2VSZWN0LCBkZXN0UmVjdCk7CisgICAgICAgIGVudHJ5LT51cGRhdGUobV9s
YXllclRyZWVIb3N0SW1wbC0+Y29udGV4dCgpKTsKIH0KIAogLy8gQ2FsbGVkIGJ5IHRoZSBsZWdh
Y3kgc2NoZWR1bGluZyBwYXRoIChlLmcuIHdoZXJlIHJlbmRlcl93aWRnZXQgZG9lcyB0aGUgc2No
ZWR1bGluZykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuaAppbmRleCA3ODNhOGRi
Li4wNjc4OTI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5oCkBAIC01NSw3
ICs1NSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0VmlzaWJsZShib29sKTsKICAg
ICB2aXJ0dWFsIHZvaWQgc3RhcnQoKTsKICAgICB2aXJ0dWFsIHZvaWQgc3RvcCgpOwotICAgIHZp
cnR1YWwgdm9pZCB1cGRhdGUoTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZSosIGNvbnN0IElu
dFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KTsKKyAgICB2aXJ0dWFs
IHZvaWQgdXBkYXRlKFBhc3NPd25QdHI8Q0NUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZVVwZGF0ZT4p
OwogCiAgICAgLy8gQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudCBpbXBsZW1lbnRhdGlvbgogICAg
IHZpcnR1YWwgdm9pZCBvblN3YXBCdWZmZXJzQ29tcGxldGVPbkltcGxUaHJlYWQoKSB7IEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZXIuY3BwCmluZGV4
IGE2MWMzYmIuLjU3NWI2MjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZXIuY3BwCkBA
IC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiY2MvQ0NUZXh0dXJlVXBkYXRlci5oIgogCiAjaW5j
bHVkZSAiY2MvQ0NQcm94eS5oIgorI2luY2x1ZGUgIkV4dGVuc2lvbnMzRENocm9taXVtLmgiCiAj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJMYXllclRleHR1cmVVcGRh
dGVyLmgiCiAjaW5jbHVkZSAiTWFuYWdlZFRleHR1cmUuaCIKQEAgLTM4LDYgKzM5LDY0IEBAIHVz
aW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorQ0NUZXh0dXJlVXBk
YXRlcjo6U3ViSW1hZ2VUZXh0dXJlVXBkYXRlOjpTdWJJbWFnZVRleHR1cmVVcGRhdGUoKQorICA6
IG1fZm9ybWF0KDApCisgICwgbV90ZXh0dXJlSWQoMCkKKyAgLCBtX21hcHBlZEJ1ZmZlcigwKQor
eworfQorCitDQ1RleHR1cmVVcGRhdGVyOjpTdWJJbWFnZVRleHR1cmVVcGRhdGU6On5TdWJJbWFn
ZVRleHR1cmVVcGRhdGUoKQoreworfQorCit2b2lkIENDVGV4dHVyZVVwZGF0ZXI6OlN1YkltYWdl
VGV4dHVyZVVwZGF0ZTo6c2V0UGl4ZWxEYXRhKGNvbnN0IHVpbnQ4X3QqIHBpeGVsU291cmNlLCBj
b25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCkKK3sK
KyAgICBBU1NFUlQobV9mb3JtYXQpOworICAgIEFTU0VSVCghbV9yZWN0LmlzRW1wdHkoKSk7Cisg
ICAgQVNTRVJUKG1fcmVjdC5zaXplKCkgPT0gc291cmNlUmVjdC5zaXplKCkpOworCisgICAgdW5z
aWduZWQgaW50IGNvbXBvbmVudHNQZXJQaXhlbCA9IDQ7CisgICAgdW5zaWduZWQgaW50IGJ5dGVz
UGVyQ29tcG9uZW50ID0gMTsKKyAgICBpZiAoIUdyYXBoaWNzQ29udGV4dDNEOjpjb21wdXRlRm9y
bWF0QW5kVHlwZVBhcmFtZXRlcnMobV9mb3JtYXQsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05F
RF9CWVRFLCAmY29tcG9uZW50c1BlclBpeGVsLCAmYnl0ZXNQZXJDb21wb25lbnQpKQorICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKworICAgIHVuc2lnbmVkIGludCBieXRlc1BlclBpeGVs
ID0gYnl0ZXNQZXJDb21wb25lbnQgKiBjb21wb25lbnRzUGVyUGl4ZWw7CisKKyAgICBzaXplX3Qg
YnVmZmVyU2l6ZSA9IG1fcmVjdC53aWR0aCgpICogbV9yZWN0LmhlaWdodCgpICogYnl0ZXNQZXJQ
aXhlbDsKKyAgICBtX3BpeGVsRGF0YSA9IGFkb3B0QXJyYXlQdHIobmV3IHVpbnQ4X3RbYnVmZmVy
U2l6ZV0pOworCisgICAgLy8gT2Zmc2V0IGZyb20gY29udGVudC1yZWN0IHRvIHNvdXJjZS1yZWN0
LgorICAgIEludFBvaW50IG9mZnNldChzb3VyY2VSZWN0LngoKSAtIGNvbnRlbnRSZWN0LngoKSwg
c291cmNlUmVjdC55KCkgLSBjb250ZW50UmVjdC55KCkpOworCisgICAgaWYgKGNvbnRlbnRSZWN0
LndpZHRoKCkgPT0gc291cmNlUmVjdC53aWR0aCgpICYmICFvZmZzZXQueCgpKQorICAgICAgICBt
ZW1jcHkobV9waXhlbERhdGEuZ2V0KCksICZwaXhlbFNvdXJjZVtieXRlc1BlclBpeGVsICogb2Zm
c2V0LnkoKSAqIGNvbnRlbnRSZWN0LndpZHRoKCldLCBjb250ZW50UmVjdC53aWR0aCgpICogbV9y
ZWN0LmhlaWdodCgpICogYnl0ZXNQZXJQaXhlbCk7CisgICAgZWxzZSB7CisgICAgICAgIC8vIFN0
cmlkZXMgbm90IGVxdWFsLCBzbyBkbyBhIHJvdy1ieS1yb3cgbWVtY3B5IGZyb20gdGhlCisgICAg
ICAgIC8vIHBpeGVsU291cmNlIGludG8gdGhlIHBpeGVsRGVzdAorICAgICAgICBmb3IgKGludCBy
b3cgPSAwOyByb3cgPCBtX3JlY3QuaGVpZ2h0KCk7ICsrcm93KQorICAgICAgICAgICAgbWVtY3B5
KG1fcGl4ZWxEYXRhLmdldCgpICsgbV9yZWN0LndpZHRoKCkgKiBieXRlc1BlclBpeGVsICogcm93
LAorICAgICAgICAgICAgICAgICAgIHBpeGVsU291cmNlICsgYnl0ZXNQZXJQaXhlbCAqIChvZmZz
ZXQueCgpICsgKG9mZnNldC55KCkgKyByb3cpICogY29udGVudFJlY3Qud2lkdGgoKSksCisgICAg
ICAgICAgICAgICAgICAgbV9yZWN0LndpZHRoKCkgKiBieXRlc1BlclBpeGVsKTsKKyAgICB9Cit9
CisKK3ZvaWQgQ0NUZXh0dXJlVXBkYXRlcjo6U3ViSW1hZ2VUZXh0dXJlVXBkYXRlOjp1cGRhdGUo
R3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCit7CisgICAgQVNTRVJUKG1fZm9ybWF0KTsKKyAg
ICBBU1NFUlQobV90ZXh0dXJlSWQpOworICAgIEFTU0VSVCghbV9yZWN0LmlzRW1wdHkoKSk7CisK
KyAgICBjb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwg
bV90ZXh0dXJlSWQpOworICAgIGlmIChtX21hcHBlZEJ1ZmZlcikgeworICAgICAgICBFeHRlbnNp
b25zM0RDaHJvbWl1bSogZXh0ZW5zaW9ucyA9IHN0YXRpY19jYXN0PEV4dGVuc2lvbnMzRENocm9t
aXVtKj4oY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpKTsKKyAgICAgICAgZXh0ZW5zaW9ucy0+dW5t
YXBUZXhTdWJJbWFnZTJEQ0hST01JVU0obV9tYXBwZWRCdWZmZXIpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIEFTU0VSVChtX3BpeGVsRGF0YSk7CisgICAgICAgIGNvbnRleHQtPnRleFN1YkltYWdl
MkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIG1fcmVjdC54KCksIG1fcmVjdC55
KCksIG1fcmVjdC53aWR0aCgpLCBtX3JlY3QuaGVpZ2h0KCksIG1fZm9ybWF0LCBHcmFwaGljc0Nv
bnRleHQzRDo6VU5TSUdORURfQllURSwgbV9waXhlbERhdGEuZ2V0KCkpOworICAgIH0KK30KKwog
Q0NUZXh0dXJlVXBkYXRlcjo6Q0NUZXh0dXJlVXBkYXRlcigpCiB7CiB9CkBAIC00NiwxNSArMTA1
LDEwIEBAIENDVGV4dHVyZVVwZGF0ZXI6On5DQ1RleHR1cmVVcGRhdGVyKCkKIHsKIH0KIAotdm9p
ZCBDQ1RleHR1cmVVcGRhdGVyOjphcHBlbmQoTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZSog
dGV4dHVyZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJl
Y3QpCit2b2lkIENDVGV4dHVyZVVwZGF0ZXI6OmFwcGVuZChQYXNzT3duUHRyPFRleHR1cmVVcGRh
dGU+IHVwZGF0ZSkKIHsKLSAgICBBU1NFUlQodGV4dHVyZSk7Ci0KLSAgICBVcGRhdGVFbnRyeSBl
bnRyeTsKLSAgICBlbnRyeS5tX3RleHR1cmUgPSB0ZXh0dXJlOwotICAgIGVudHJ5Lm1fc291cmNl
UmVjdCA9IHNvdXJjZVJlY3Q7Ci0gICAgZW50cnkubV9kZXN0UmVjdCA9IGRlc3RSZWN0OwotICAg
IG1fZW50cmllcy5hcHBlbmQoZW50cnkpOworICAgIEFTU0VSVCh1cGRhdGUpOworICAgIG1fZW50
cmllcy5hcHBlbmQodXBkYXRlKTsKIH0KIAogYm9vbCBDQ1RleHR1cmVVcGRhdGVyOjpoYXNNb3Jl
VXBkYXRlcygpIGNvbnN0CkBAIC02OCw4ICsxMjIsNyBAQCBib29sIENDVGV4dHVyZVVwZGF0ZXI6
OnVwZGF0ZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgc2l6ZV90IGNvdW50KQogICAgICAg
ICBpZiAoIW1fZW50cmllcy5zaXplKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICAgICAgVXBkYXRlRW50cnkmIGVudHJ5ID0gbV9lbnRyaWVzLmxhc3QoKTsKLSAgICAgICAgZW50
cnkubV90ZXh0dXJlLT51cGRhdGVSZWN0KGNvbnRleHQsIGVudHJ5Lm1fc291cmNlUmVjdCwgZW50
cnkubV9kZXN0UmVjdCk7CisgICAgICAgIG1fZW50cmllcy5sYXN0KCktPnVwZGF0ZShjb250ZXh0
KTsKICAgICAgICAgbV9lbnRyaWVzLnJlbW92ZUxhc3QoKTsKICAgICB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVw
ZGF0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
VGV4dHVyZVVwZGF0ZXIuaAppbmRleCBhYjY1OWVjLi41NGIzM2Y3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVy
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NU
ZXh0dXJlVXBkYXRlci5oCkBAIC0yNyw3ICsyNyw5IEBACiAjZGVmaW5lIENDVGV4dHVyZVVwZGF0
ZXJfaAogCiAjaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIkxheWVyVGV4dHVyZVVwZGF0
ZXIuaCIKKyNpbmNsdWRlIDx3dGYvT3duQXJyYXlQdHIuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRy
Lmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM2LDEwICszOCw0MSBAQCBjbGFzcyBHcmFwaGlj
c0NvbnRleHQzRDsKIAogY2xhc3MgQ0NUZXh0dXJlVXBkYXRlciB7CiBwdWJsaWM6CisgICAgY2xh
c3MgVGV4dHVyZVVwZGF0ZSB7CisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIHZvaWQgdXBk
YXRlKEdyYXBoaWNzQ29udGV4dDNEKikgPSAwOworICAgIH07CisgICAgY2xhc3MgU3ViSW1hZ2VU
ZXh0dXJlVXBkYXRlIDogcHVibGljIFRleHR1cmVVcGRhdGUgeworICAgIHB1YmxpYzoKKyAgICAg
ICAgdmlydHVhbCB+U3ViSW1hZ2VUZXh0dXJlVXBkYXRlKCk7CisKKyAgICAgICAgc3RhdGljIFBh
c3NPd25QdHI8U3ViSW1hZ2VUZXh0dXJlVXBkYXRlPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFB0
cihuZXcgU3ViSW1hZ2VUZXh0dXJlVXBkYXRlKCkpOyB9CisKKyAgICAgICAgdm9pZCBzZXRGb3Jt
YXQodW5zaWduZWQgZm9ybWF0KSB7IG1fZm9ybWF0ID0gZm9ybWF0OyB9CisgICAgICAgIHZvaWQg
c2V0VGV4dHVyZUlkKHVuc2lnbmVkIHRleHR1cmVJZCkgeyBtX3RleHR1cmVJZCA9IHRleHR1cmVJ
ZDsgfQorICAgICAgICB2b2lkIHNldFJlY3QoSW50UmVjdCYgcmVjdCkgeyBtX3JlY3QgPSByZWN0
OyB9CisgICAgICAgIHZvaWQgc2V0UGl4ZWxEYXRhKFBhc3NPd25BcnJheVB0cjx1aW50OF90PiBw
aXhlbERhdGEpIHsgbV9waXhlbERhdGEgPSBwaXhlbERhdGE7IH0KKyAgICAgICAgLy8gZm9ybWF0
IGFuZCByZWN0IG11c3QgYmUgc2V0IGJlZm9yZSB0aGlzIHZlcnNpb24gb2Ygc2V0UGl4ZWxEYXRh
IGlzIHVzZWQKKyAgICAgICAgdm9pZCBzZXRQaXhlbERhdGEoY29uc3QgdWludDhfdCogcGl4ZWxT
b3VyY2UsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBJbnRSZWN0JiBzb3VyY2VS
ZWN0KTsKKyAgICAgICAgdm9pZCBzZXRNYXBwZWRCdWZmZXIodWludDhfdCogbWFwcGVkQnVmZmVy
KSB7IG1fbWFwcGVkQnVmZmVyID0gbWFwcGVkQnVmZmVyOyB9CisKKyAgICAgICAgdmlydHVhbCB2
b2lkIHVwZGF0ZShHcmFwaGljc0NvbnRleHQzRCopOworCisgICAgcHJvdGVjdGVkOgorICAgICAg
ICBleHBsaWNpdCBTdWJJbWFnZVRleHR1cmVVcGRhdGUoKTsKKworICAgIHByaXZhdGU6CisgICAg
ICAgIHVuc2lnbmVkIG1fZm9ybWF0OworICAgICAgICB1bnNpZ25lZCBtX3RleHR1cmVJZDsKKyAg
ICAgICAgSW50UmVjdCBtX3JlY3Q7CisgICAgICAgIE93bkFycmF5UHRyPHVpbnQ4X3Q+IG1fcGl4
ZWxEYXRhOworICAgICAgICB1aW50OF90KiBtX21hcHBlZEJ1ZmZlcjsKKyAgICB9OworCiAgICAg
Q0NUZXh0dXJlVXBkYXRlcigpOwogICAgIH5DQ1RleHR1cmVVcGRhdGVyKCk7CiAKLSAgICB2b2lk
IGFwcGVuZChMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlKiwgY29uc3QgSW50UmVjdCYgc291
cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpOworICAgIHZvaWQgYXBwZW5kKFBhc3NP
d25QdHI8VGV4dHVyZVVwZGF0ZT4pOwogCiAgICAgYm9vbCBoYXNNb3JlVXBkYXRlcygpIGNvbnN0
OwogCkBAIC00OSwxMyArODIsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBjbGVhcigpOwogCiBwcml2
YXRlOgotICAgIHN0cnVjdCBVcGRhdGVFbnRyeSB7Ci0gICAgICAgIExheWVyVGV4dHVyZVVwZGF0
ZXI6OlRleHR1cmUqIG1fdGV4dHVyZTsKLSAgICAgICAgSW50UmVjdCBtX3NvdXJjZVJlY3Q7Ci0g
ICAgICAgIEludFJlY3QgbV9kZXN0UmVjdDsKLSAgICB9OwotCi0gICAgVmVjdG9yPFVwZGF0ZUVu
dHJ5PiBtX2VudHJpZXM7CisgICAgVmVjdG9yPE93blB0cjxUZXh0dXJlVXBkYXRlPiA+IG1fZW50
cmllczsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5jcHAKaW5kZXggNzYwYzBjMS4u
ZGFhM2RlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NUaHJlYWRQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5jcHAKQEAgLTI4LDkgKzI4LDExIEBA
CiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIlRyYWNlRXZlbnQu
aCIKKyNpbmNsdWRlICJUcmVlU3luY2hyb25pemVyLmgiCiAjaW5jbHVkZSAiY2MvQ0NEZWxheUJh
c2VkVGltZVNvdXJjZS5oIgogI2luY2x1ZGUgImNjL0NDRnJhbWVSYXRlQ29udHJvbGxlci5oIgog
I2luY2x1ZGUgImNjL0NDSW5wdXRIYW5kbGVyLmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllckltcGwu
aCIKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3QuaCIKICNpbmNsdWRlICJjYy9DQ1NjaGVk
dWxlci5oIgogI2luY2x1ZGUgImNjL0NDU2NvcGVkVGhyZWFkUHJveHkuaCIKQEAgLTM4LDYgKzQw
LDcgQEAKICNpbmNsdWRlICJjYy9DQ1RocmVhZFRhc2suaCIKICNpbmNsdWRlIDx3dGYvQ3VycmVu
dFRpbWUuaD4KICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQ
dHIuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdURjsKIApAQCAtNTksNyArNjIsNiBAQCBDQ1RocmVh
ZFByb3h5OjpDQ1RocmVhZFByb3h5KENDTGF5ZXJUcmVlSG9zdCogbGF5ZXJUcmVlSG9zdCkKICAg
ICAsIG1fbWFpblRocmVhZFByb3h5KENDU2NvcGVkVGhyZWFkUHJveHk6OmNyZWF0ZShDQ1Byb3h5
OjptYWluVGhyZWFkKCkpKQogICAgICwgbV9yZWFkYmFja1JlcXVlc3RPbkltcGxUaHJlYWQoMCkK
ICAgICAsIG1fZmluaXNoQWxsUmVuZGVyaW5nQ29tcGxldGlvbkV2ZW50T25JbXBsVGhyZWFkKDAp
Ci0gICAgLCBtX2NvbW1pdENvbXBsZXRpb25FdmVudE9uSW1wbFRocmVhZCgwKQogICAgICwgbV9u
ZXh0RnJhbWVJc05ld2x5Q29tbWl0dGVkRnJhbWVPbkltcGxUaHJlYWQoZmFsc2UpCiB7CiAgICAg
VFJBQ0VfRVZFTlQoIkNDVGhyZWFkUHJveHk6OkNDVGhyZWFkUHJveHkiLCB0aGlzLCAwKTsKQEAg
LTI4OCwxOCArMjkwLDEzIEBAIHZvaWQgQ0NUaHJlYWRQcm94eTo6c3RvcCgpCiAgICAgbV9zdGFy
dGVkID0gZmFsc2U7CiB9CiAKLXZvaWQgQ0NUaHJlYWRQcm94eTo6dXBkYXRlKExheWVyVGV4dHVy
ZVVwZGF0ZXI6OlRleHR1cmUqIHRleHR1cmUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNv
bnN0IEludFJlY3QmIGRlc3RSZWN0KQordm9pZCBDQ1RocmVhZFByb3h5Ojp1cGRhdGUoUGFzc093
blB0cjxDQ1RleHR1cmVVcGRhdGVyOjpUZXh0dXJlVXBkYXRlPiBlbnRyeSkKIHsKICAgICBUUkFD
RV9FVkVOVCgiQ0NUaHJlYWRQcm94eTo6dXBkYXRlIiwgdGhpcywgMCk7CiAgICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKICAgICBBU1NFUlQobV9zdGFydGVkKTsKIAotICAgIE93blB0cjxVcGRh
dGVFbnRyeT4gZW50cnkgPSBhZG9wdFB0cihuZXcgVXBkYXRlRW50cnkpOwotICAgIGVudHJ5LT5t
X3RleHR1cmUgPSB0ZXh0dXJlOwotICAgIGVudHJ5LT5tX3NvdXJjZVJlY3QgPSBzb3VyY2VSZWN0
OwotICAgIGVudHJ5LT5tX2Rlc3RSZWN0ID0gZGVzdFJlY3Q7Ci0KLSAgICBDQ1Byb3h5OjppbXBs
VGhyZWFkKCktPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NUaHJlYWRQcm94
eTo6dXBkYXRlVGV4dHVyZU9uSW1wbFRocmVhZCwgZW50cnkucmVsZWFzZSgpKSk7CisgICAgQ0NQ
cm94eTo6aW1wbFRocmVhZCgpLT5wb3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkND
VGhyZWFkUHJveHk6OnVwZGF0ZVRleHR1cmVPbkltcGxUaHJlYWQsIGVudHJ5KSk7CiB9CiAKIHZv
aWQgQ0NUaHJlYWRQcm94eTo6ZmluaXNoQWxsUmVuZGVyaW5nT25JbXBsVGhyZWFkKENDQ29tcGxl
dGlvbkV2ZW50KiBjb21wbGV0aW9uKQpAQCAtNDE3LDE2ICs0MTQsMjIgQEAgdm9pZCBDQ1RocmVh
ZFByb3h5OjpiZWdpbkZyYW1lQW5kQ29tbWl0KGludCBzZXF1ZW5jZU51bWJlciwgZG91YmxlIGZy
YW1lQmVnaW5UaW0KICAgICBpZiAobV9hbmltYXRlUmVxdWVzdGVkKQogICAgICAgICBzZXROZWVk
c0NvbW1pdCgpOwogCisgICAgQVNTRVJUKENDUHJveHk6Omhhc0ltcGxUaHJlYWQoKSk7CisgICAg
Ly8gQ3JlYXRlIG5ldyBpbXBsIHRyZWUuCisgICAgUmVmUHRyPENDTGF5ZXJEYXRhPiByb290TGF5
ZXI7CisgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdC0+cm9vdExheWVyKCkpCisgICAgICAgIHJvb3RM
YXllciA9IFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMobV9sYXllclRyZWVIb3N0
LT5yb290TGF5ZXIoKSk7CisKKyAgICBBU1NFUlQocm9vdExheWVyLT5oYXNPbmVSZWYoKSk7CisK
KyAgICAvLyBMZWFrIHRoZSByb290IGxheWVyIHBvaW50ZXIgc28gd2UgY2FuIHRyYW5zZmVyIG93
bmVyc2hpcCBvZiBpdCB0byB0aGUgb3RoZXIgc2lkZS4uLgorICAgIENDTGF5ZXJEYXRhKiByb290
TGF5ZXJQdHIgPSByb290TGF5ZXIucmVsZWFzZSgpLmxlYWtSZWYoKTsKKyAgICBBU1NFUlQocm9v
dExheWVyUHRyLT5oYXNPbmVSZWYoKSk7CisKICAgICAvLyBOb3RpZnkgdGhlIGltcGwgdGhyZWFk
IHRoYXQgdGhlIGJlZ2luRnJhbWUgaGFzIGNvbXBsZXRlZC4gVGhpcyB3aWxsCi0gICAgLy8gYmVn
aW4gdGhlIGNvbW1pdCBwcm9jZXNzLCB3aGljaCBpcyBibG9ja2luZyBmcm9tIHRoZSBtYWluIHRo
cmVhZCdzCi0gICAgLy8gcG9pbnQgb2YgdmlldywgYnV0IGFzeW5jaHJvbm91c2x5IHBlcmZvcm1l
ZCBvbiB0aGUgaW1wbCB0aHJlYWQsCi0gICAgLy8gY29vcmRpbmF0ZWQgYnkgdGhlIENDU2NoZWR1
bGVyLgotICAgIHsKLSAgICAgICAgVFJBQ0VfRVZFTlQoImNvbW1pdCIsIHRoaXMsIDApOwotICAg
ICAgICBDQ0NvbXBsZXRpb25FdmVudCBjb21wbGV0aW9uOwotICAgICAgICBDQ1Byb3h5OjppbXBs
VGhyZWFkKCktPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NUaHJlYWRQcm94
eTo6YmVnaW5GcmFtZUNvbXBsZXRlT25JbXBsVGhyZWFkLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNz
KCZjb21wbGV0aW9uKSkpOwotICAgICAgICBjb21wbGV0aW9uLndhaXQoKTsKLSAgICB9CisgICAg
Ly8gYmVnaW4gdGhlIGNvbW1pdCBwcm9jZXNzIHRoYXQgaXMgYXN5bmNocm9ub3VzbHkgcGVyZm9y
bWVkIG9uIHRoZSBpbXBsCisgICAgLy8gdGhyZWFkLCBjb29yZGluYXRlZCBieSB0aGUgQ0NTY2hl
ZHVsZXIuCisgICAgQ0NQcm94eTo6aW1wbFRocmVhZCgpLT5wb3N0VGFzayhjcmVhdGVDQ1RocmVh
ZFRhc2sodGhpcywgJkNDVGhyZWFkUHJveHk6OmJlZ2luRnJhbWVDb21wbGV0ZU9uSW1wbFRocmVh
ZCwgQWxsb3dDcm9zc1RocmVhZEFjY2Vzcyhyb290TGF5ZXJQdHIpKSk7CiAKICAgICBtX2xheWVy
VHJlZUhvc3QtPmNvbW1pdENvbXBsZXRlKCk7CiAKQEAgLTQzNiw3ICs0MzksNyBAQCB2b2lkIEND
VGhyZWFkUHJveHk6OmJlZ2luRnJhbWVBbmRDb21taXQoaW50IHNlcXVlbmNlTnVtYmVyLCBkb3Vi
bGUgZnJhbWVCZWdpblRpbQogdm9pZCBDQ1RocmVhZFByb3h5OjpwcmVwYXJlRnJhbWVSZXNvdXJj
ZXNPbkltcGxUaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqIGNvbXBsZXRpb24pCiB7CiAgICAgVFJB
Q0VfRVZFTlQoIkNDVGhyZWFkUHJveHk6OnByZXBhcmVGcmFtZVJlc291cmNlc09uT25JbXBsVGhy
ZWFkIiwgdGhpcywgMCk7Ci0gICAgQVNTRVJUKCFtX2NvbW1pdENvbXBsZXRpb25FdmVudE9uSW1w
bFRocmVhZCk7CisgICAgQVNTRVJUKCFtX2NvbW1pdE5ld1Jvb3RMYXllck9uSW1wbFRocmVhZCk7
CiAgICAgQVNTRVJUKGlzSW1wbFRocmVhZCgpKTsKICAgICBpZiAoIW1fbGF5ZXJUcmVlSG9zdElt
cGwpIHsKICAgICAgICAgY29tcGxldGlvbi0+c2lnbmFsKCk7CkBAIC00NDgsMjggKzQ1MSwzMCBA
QCB2b2lkIENDVGhyZWFkUHJveHk6OnByZXBhcmVGcmFtZVJlc291cmNlc09uSW1wbFRocmVhZChD
Q0NvbXBsZXRpb25FdmVudCogY29tcGxldAogICAgIGNvbXBsZXRpb24tPnNpZ25hbCgpOwogfQog
Ci12b2lkIENDVGhyZWFkUHJveHk6OnVwZGF0ZVRleHR1cmVPbkltcGxUaHJlYWQoUGFzc093blB0
cjxVcGRhdGVFbnRyeT4gZW50cnkpCit2b2lkIENDVGhyZWFkUHJveHk6OnVwZGF0ZVRleHR1cmVP
bkltcGxUaHJlYWQoUGFzc093blB0cjxDQ1RleHR1cmVVcGRhdGVyOjpUZXh0dXJlVXBkYXRlPiBl
bnRyeSkKIHsKLSAgICBBU1NFUlQoIW1fY29tbWl0Q29tcGxldGlvbkV2ZW50T25JbXBsVGhyZWFk
KTsKKyAgICBBU1NFUlQoIW1fY29tbWl0TmV3Um9vdExheWVyT25JbXBsVGhyZWFkKTsKICAgICBB
U1NFUlQoaXNJbXBsVGhyZWFkKCkpOwogICAgIGlmICghbV9sYXllclRyZWVIb3N0SW1wbCkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgbV90ZXh0dXJlVXBkYXRlck9uSW1wbFRocmVhZC5hcHBlbmQo
ZW50cnktPm1fdGV4dHVyZSwgZW50cnktPm1fc291cmNlUmVjdCwgZW50cnktPm1fZGVzdFJlY3Qp
OworICAgIG1fdGV4dHVyZVVwZGF0ZXJPbkltcGxUaHJlYWQuYXBwZW5kKGVudHJ5KTsKIH0KIAot
dm9pZCBDQ1RocmVhZFByb3h5OjpiZWdpbkZyYW1lQ29tcGxldGVPbkltcGxUaHJlYWQoQ0NDb21w
bGV0aW9uRXZlbnQqIGNvbXBsZXRpb24pCit2b2lkIENDVGhyZWFkUHJveHk6OmJlZ2luRnJhbWVD
b21wbGV0ZU9uSW1wbFRocmVhZChDQ0xheWVyRGF0YSogcm9vdExheWVyUHRyKQogewogICAgIFRS
QUNFX0VWRU5UKCJDQ1RocmVhZFByb3h5OjpiZWdpbkZyYW1lQ29tcGxldGVPbkltcGxUaHJlYWQi
LCB0aGlzLCAwKTsKLSAgICBBU1NFUlQoIW1fY29tbWl0Q29tcGxldGlvbkV2ZW50T25JbXBsVGhy
ZWFkKTsKKyAgICBBU1NFUlQoIW1fY29tbWl0TmV3Um9vdExheWVyT25JbXBsVGhyZWFkKTsKICAg
ICBBU1NFUlQoaXNJbXBsVGhyZWFkKCkpOwogICAgIEFTU0VSVChtX3NjaGVkdWxlck9uSW1wbFRo
cmVhZCk7Ci0gICAgaWYgKCFtX2xheWVyVHJlZUhvc3RJbXBsKSB7Ci0gICAgICAgIGNvbXBsZXRp
b24tPnNpZ25hbCgpOworICAgIFJlZlB0cjxDQ0xheWVyRGF0YT4gcm9vdExheWVyOworICAgIGlm
IChyb290TGF5ZXJQdHIpCisgICAgICAgIHJvb3RMYXllciA9IGFkb3B0UmVmKHJvb3RMYXllclB0
cik7CisKKyAgICBpZiAoIW1fbGF5ZXJUcmVlSG9zdEltcGwpCiAgICAgICAgIHJldHVybjsKLSAg
ICB9CiAKLSAgICBtX2NvbW1pdENvbXBsZXRpb25FdmVudE9uSW1wbFRocmVhZCA9IGNvbXBsZXRp
b247CisgICAgbV9jb21taXROZXdSb290TGF5ZXJPbkltcGxUaHJlYWQgPSByb290TGF5ZXI7CiAK
ICAgICBtX3NjaGVkdWxlck9uSW1wbFRocmVhZC0+YmVnaW5GcmFtZUNvbXBsZXRlKCk7CiB9CkBA
IC00OTgsMjEgKzUwMywxOCBAQCB2b2lkIENDVGhyZWFkUHJveHk6OnNjaGVkdWxlZEFjdGlvbkNv
bW1pdCgpCiB7CiAgICAgVFJBQ0VfRVZFTlQoIkNDVGhyZWFkUHJveHk6OnNjaGVkdWxlZEFjdGlv
bkNvbW1pdCIsIHRoaXMsIDApOwogICAgIEFTU0VSVCghbV90ZXh0dXJlVXBkYXRlck9uSW1wbFRo
cmVhZC5oYXNNb3JlVXBkYXRlcygpKTsKLSAgICBBU1NFUlQobV9jb21taXRDb21wbGV0aW9uRXZl
bnRPbkltcGxUaHJlYWQpOwotCi0gICAgbV90ZXh0dXJlVXBkYXRlck9uSW1wbFRocmVhZC5jbGVh
cigpOwogCiAgICAgbV9sYXllclRyZWVIb3N0SW1wbC0+YmVnaW5Db21taXQoKTsKIAogICAgIG1f
bGF5ZXJUcmVlSG9zdC0+YmVnaW5Db21taXRPbkltcGxUaHJlYWQobV9sYXllclRyZWVIb3N0SW1w
bC5nZXQoKSk7Ci0gICAgbV9sYXllclRyZWVIb3N0LT5maW5pc2hDb21taXRPbkltcGxUaHJlYWQo
bV9sYXllclRyZWVIb3N0SW1wbC5nZXQoKSk7CisgICAgbV9sYXllclRyZWVIb3N0LT5maW5pc2hD
b21taXRPbkltcGxUaHJlYWQobV9sYXllclRyZWVIb3N0SW1wbC5nZXQoKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2NvbW1pdE5ld1Jvb3RMYXllck9u
SW1wbFRocmVhZCA/IFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMobV9jb21taXRO
ZXdSb290TGF5ZXJPbkltcGxUaHJlYWQuZ2V0KCksIG1fbGF5ZXJUcmVlSG9zdEltcGwtPnJvb3RM
YXllcigpKSA6IDApOworCisgICAgbV9jb21taXROZXdSb290TGF5ZXJPbkltcGxUaHJlYWQuY2xl
YXIoKTsKIAogICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPmNvbW1pdENvbXBsZXRlKCk7CiAKICAg
ICBtX25leHRGcmFtZUlzTmV3bHlDb21taXR0ZWRGcmFtZU9uSW1wbFRocmVhZCA9IHRydWU7Ci0K
LSAgICBtX2NvbW1pdENvbXBsZXRpb25FdmVudE9uSW1wbFRocmVhZC0+c2lnbmFsKCk7Ci0gICAg
bV9jb21taXRDb21wbGV0aW9uRXZlbnRPbkltcGxUaHJlYWQgPSAwOwogfQogCiB2b2lkIENDVGhy
ZWFkUHJveHk6OnNjaGVkdWxlZEFjdGlvbkRyYXdBbmRTd2FwKCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJv
eHkuaAppbmRleCA0Y2NiZjRlLi4wMGY1ZjY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5oCkBA
IC0zNiw2ICszNiw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENDSW5wdXRIYW5k
bGVyOworY2xhc3MgQ0NMYXllckltcGw7CiBjbGFzcyBDQ0xheWVyVHJlZUhvc3Q7CiBjbGFzcyBD
Q1NjaGVkdWxlcjsKIGNsYXNzIENDU2NvcGVkVGhyZWFkUHJveHk7CkBAIC02Myw3ICs2NCw3IEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0VmlzaWJsZShib29sKTsKICAgICB2aXJ0dWFs
IHZvaWQgc3RhcnQoKTsKICAgICB2aXJ0dWFsIHZvaWQgc3RvcCgpOwotICAgIHZpcnR1YWwgdm9p
ZCB1cGRhdGUoTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZSosIGNvbnN0IEludFJlY3QmIHNv
dXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBk
YXRlKFBhc3NPd25QdHI8Q0NUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZVVwZGF0ZT4pOwogCiAgICAg
Ly8gQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudCBpbXBsZW1lbnRhdGlvbgogICAgIHZpcnR1YWwg
dm9pZCBvblN3YXBCdWZmZXJzQ29tcGxldGVPbkltcGxUaHJlYWQoKTsKQEAgLTgxLDEyICs4Miw2
IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgZXhwbGljaXQgQ0NUaHJlYWRQcm94eShDQ0xheWVy
VHJlZUhvc3QqKTsKIAotICAgIHN0cnVjdCBVcGRhdGVFbnRyeSB7Ci0gICAgICAgIExheWVyVGV4
dHVyZVVwZGF0ZXI6OlRleHR1cmUqIG1fdGV4dHVyZTsKLSAgICAgICAgSW50UmVjdCBtX3NvdXJj
ZVJlY3Q7Ci0gICAgICAgIEludFJlY3QgbV9kZXN0UmVjdDsKLSAgICB9OwotCiAgICAgLy8gQ2Fs
bGVkIG9uIG1haW4gdGhyZWFkCiAgICAgdm9pZCBiZWdpbkZyYW1lQW5kQ29tbWl0KGludCBzZXF1
ZW5jZU51bWJlciwgZG91YmxlIGZyYW1lQmVnaW5UaW1lLCBQYXNzT3duUHRyPENDU2Nyb2xsQW5k
U2NhbGVTZXQ+KTsKICAgICB2b2lkIGRpZENvbW1pdEFuZERyYXdGcmFtZSgpOwpAQCAtMTAyLDgg
Kzk3LDggQEAgcHJpdmF0ZToKICAgICBQYXNzT3duUHRyPENDVGhyZWFkOjpUYXNrPiBjcmVhdGVC
ZWdpbkZyYW1lQW5kQ29tbWl0VGFza09uSW1wbFRocmVhZCgpOwogICAgIHZvaWQgb2J0YWluQmVn
aW5GcmFtZUFuZENvbW1pdFRhc2tGcm9tQ0NUaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqLCBDQ1Ro
cmVhZDo6VGFzayoqKTsKICAgICB2b2lkIHByZXBhcmVGcmFtZVJlc291cmNlc09uSW1wbFRocmVh
ZChDQ0NvbXBsZXRpb25FdmVudCopOwotICAgIHZvaWQgdXBkYXRlVGV4dHVyZU9uSW1wbFRocmVh
ZChQYXNzT3duUHRyPFVwZGF0ZUVudHJ5Pik7Ci0gICAgdm9pZCBiZWdpbkZyYW1lQ29tcGxldGVP
bkltcGxUaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqKTsKKyAgICB2b2lkIHVwZGF0ZVRleHR1cmVP
bkltcGxUaHJlYWQoUGFzc093blB0cjxDQ1RleHR1cmVVcGRhdGVyOjpUZXh0dXJlVXBkYXRlPik7
CisgICAgdm9pZCBiZWdpbkZyYW1lQ29tcGxldGVPbkltcGxUaHJlYWQoQ0NMYXllckRhdGEqKTsK
ICAgICB2b2lkIHJlcXVlc3RSZWFkYmFja09uSW1wbFRocmVhZChSZWFkYmFja1JlcXVlc3QqKTsK
ICAgICB2b2lkIGZpbmlzaEFsbFJlbmRlcmluZ09uSW1wbFRocmVhZChDQ0NvbXBsZXRpb25FdmVu
dCopOwogICAgIHZvaWQgaW5pdGlhbGl6ZUltcGxPbkltcGxUaHJlYWQoQ0NDb21wbGV0aW9uRXZl
bnQqKTsKQEAgLTEzNiwxMyArMTMxLDEyIEBAIHByaXZhdGU6CiAgICAgLy8gU2V0IHdoZW4gdGhl
IG1haW4gdGhyZWFkIGlzIHdhaXRpbmcgb24gYSBmaW5pc2hBbGxSZW5kZXJpbmcgY2FsbC4KICAg
ICBDQ0NvbXBsZXRpb25FdmVudCogbV9maW5pc2hBbGxSZW5kZXJpbmdDb21wbGV0aW9uRXZlbnRP
bkltcGxUaHJlYWQ7CiAKLSAgICAvLyBTZXQgd2hlbiB0aGUgbWFpbiB0aHJlYWQgaXMgd2FpdGlu
ZyBvbiBhIGNvbW1pdCB0byBjb21wbGV0ZS4KLSAgICBDQ0NvbXBsZXRpb25FdmVudCogbV9jb21t
aXRDb21wbGV0aW9uRXZlbnRPbkltcGxUaHJlYWQ7Ci0KICAgICAvLyBTZXQgd2hlbiB0aGUgbmV4
dCBkcmF3IHNob3VsZCBwb3N0IGRpZENvbW1pdEFuZERyYXdGcmFtZSB0byB0aGUgbWFpbiB0aHJl
YWQuCiAgICAgYm9vbCBtX25leHRGcmFtZUlzTmV3bHlDb21taXR0ZWRGcmFtZU9uSW1wbFRocmVh
ZDsKIAogICAgIENDVGV4dHVyZVVwZGF0ZXIgbV90ZXh0dXJlVXBkYXRlck9uSW1wbFRocmVhZDsK
KworICAgIFJlZlB0cjxDQ0xheWVyRGF0YT4gbV9jb21taXROZXdSb290TGF5ZXJPbkltcGxUaHJl
YWQ7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuY3BwCmluZGV4IDZjY2I0
MDcuLjVmMzE2ZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuY3BwCkBAIC01Myw4
ICs1Myw2IEBAIHByaXZhdGU6CiAKIENDVGlsZWRMYXllckltcGw6OkNDVGlsZWRMYXllckltcGwo
aW50IGlkKQogICAgIDogQ0NMYXllckltcGwoaWQpCi0gICAgLCBtX3NraXBzRHJhdyh0cnVlKQot
ICAgICwgbV9jb250ZW50c1N3aXp6bGVkKGZhbHNlKQogewogfQogCkBAIC0xNzcsNiArMTc1LDY1
IEBAIHZvaWQgQ0NUaWxlZExheWVySW1wbDo6c3luY1RleHR1cmVJZChpbnQgaSwgaW50IGosIFBs
YXRmb3JtM0RPYmplY3QgdGV4dHVyZUlkKQogICAgIHRpbGUtPnNldFRleHR1cmVJZCh0ZXh0dXJl
SWQpOwogfQogCitDQ1RpbGVkTGF5ZXJEYXRhOjpDQ1RpbGVkTGF5ZXJEYXRhKGludCBpZCkKKyAg
ICA6IENDTGF5ZXJEYXRhKGlkKQoreworfQorCitDQ1RpbGVkTGF5ZXJEYXRhOjp+Q0NUaWxlZExh
eWVyRGF0YSgpCit7Cit9CisKK3ZvaWQgQ0NUaWxlZExheWVyRGF0YTo6c2V0VGlsaW5nRGF0YShj
b25zdCBDQ0xheWVyVGlsaW5nRGF0YSYgdGlsZXIpCit7CisgICAgaWYgKG1fdGlsZXIpCisgICAg
ICAgIG1fdGlsZXItPnJlc2V0KCk7CisgICAgZWxzZQorICAgICAgICBtX3RpbGVyID0gQ0NMYXll
clRpbGluZ0RhdGE6OmNyZWF0ZSh0aWxlci50aWxlU2l6ZSgpLCB0aWxlci5oYXNCb3JkZXJUZXhl
bHMoKSA/IENDTGF5ZXJUaWxpbmdEYXRhOjpIYXNCb3JkZXJUZXhlbHMgOiBDQ0xheWVyVGlsaW5n
RGF0YTo6Tm9Cb3JkZXJUZXhlbHMpOworICAgICptX3RpbGVyID0gdGlsZXI7Cit9CisKK3ZvaWQg
Q0NUaWxlZExheWVyRGF0YTo6c3luY1RleHR1cmVJZChpbnQgaSwgaW50IGosIFBsYXRmb3JtM0RP
YmplY3QgdGV4dHVyZUlkKQoreworICAgIERyYXdhYmxlVGlsZSogdGlsZSA9IHRpbGVBdChpLCBq
KTsKKyAgICBpZiAoIXRpbGUpCisgICAgICAgIHRpbGUgPSBjcmVhdGVUaWxlKGksIGopOworICAg
IHRpbGUtPnNldFRleHR1cmVJZCh0ZXh0dXJlSWQpOworfQorCitEcmF3YWJsZVRpbGUqIENDVGls
ZWRMYXllckRhdGE6OnRpbGVBdChpbnQgaSwgaW50IGopIGNvbnN0Cit7CisgICAgcmV0dXJuIHN0
YXRpY19jYXN0PERyYXdhYmxlVGlsZSo+KG1fdGlsZXItPnRpbGVBdChpLCBqKSk7Cit9CisKK0Ry
YXdhYmxlVGlsZSogQ0NUaWxlZExheWVyRGF0YTo6Y3JlYXRlVGlsZShpbnQgaSwgaW50IGopCit7
CisgICAgUmVmUHRyPERyYXdhYmxlVGlsZT4gdGlsZSA9IGFkb3B0UmVmKG5ldyBEcmF3YWJsZVRp
bGUoKSk7CisgICAgbV90aWxlci0+YWRkVGlsZSh0aWxlLCBpLCBqKTsKKyAgICByZXR1cm4gdGls
ZS5nZXQoKTsKK30KKwordm9pZCBDQ1RpbGVkTGF5ZXJEYXRhOjpwdXNoUHJvcGVydGllcyhjb25z
dCBDQ1RpbGVkTGF5ZXJEYXRhKiBmcm9tLCBDQ0xheWVyKiB0bykKK3sKKyAgICBDQ1RpbGVkTGF5
ZXJJbXBsKiBsYXllciA9IHN0YXRpY19jYXN0PENDVGlsZWRMYXllckltcGwqPih0byk7CisKKyAg
ICBpZiAoIWZyb20tPm1fdGlsZXIpIHsKKyAgICAgICAgbGF5ZXItPnNldFNraXBzRHJhdyh0cnVl
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGxheWVyLT5zZXRTa2lwc0RyYXcoZnJv
bS0+bV9za2lwc0RyYXcpOworICAgIGxheWVyLT5zZXRDb250ZW50c1N3aXp6bGVkKGZyb20tPm1f
Y29udGVudHNTd2l6emxlZCk7CisgICAgbGF5ZXItPnNldFRpbGluZ0RhdGEoKihmcm9tLT5tX3Rp
bGVyKSk7CisKKyAgICBmb3IgKENDTGF5ZXJUaWxpbmdEYXRhOjpUaWxlTWFwOjpjb25zdF9pdGVy
YXRvciBpdGVyID0gZnJvbS0+bV90aWxlci0+dGlsZXMoKS5iZWdpbigpOyBpdGVyICE9IGZyb20t
Pm1fdGlsZXItPnRpbGVzKCkuZW5kKCk7ICsraXRlcikgeworICAgICAgICBpbnQgaSA9IGl0ZXIt
PmZpcnN0LmZpcnN0OworICAgICAgICBpbnQgaiA9IGl0ZXItPmZpcnN0LnNlY29uZDsKKyAgICAg
ICAgRHJhd2FibGVUaWxlKiB0aWxlID0gc3RhdGljX2Nhc3Q8RHJhd2FibGVUaWxlKj4oaXRlci0+
c2Vjb25kLmdldCgpKTsKKyAgICAgICAgbGF5ZXItPnN5bmNUZXh0dXJlSWQoaSwgaiwgdGlsZS0+
dGV4dHVyZUlkKCkpOworICAgIH0KK30KKwogfQogCiAjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5oCmluZGV4IDQ3OGIwMzQu
Ljg0NTUwNzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmgKQEAgLTM1LDcgKzM1LDIw
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRHJhd2FibGVUaWxlOwogCi1jbGFzcyBD
Q1RpbGVkTGF5ZXJJbXBsIDogcHVibGljIENDTGF5ZXJJbXBsIHsKK2NsYXNzIENDVGlsZWRMYXll
clByb3BlcnRpZXMgeworcHJvdGVjdGVkOgorICAgIGV4cGxpY2l0IENDVGlsZWRMYXllclByb3Bl
cnRpZXMoKQorICAgICAgICA6IG1fc2tpcHNEcmF3KHRydWUpCisgICAgICAgICwgbV9jb250ZW50
c1N3aXp6bGVkKGZhbHNlKQorICAgIHsKKyAgICB9CisKKyAgICBib29sIG1fc2tpcHNEcmF3Owor
ICAgIGJvb2wgbV9jb250ZW50c1N3aXp6bGVkOworICAgIE93blB0cjxDQ0xheWVyVGlsaW5nRGF0
YT4gbV90aWxlcjsKK307CisKK2NsYXNzIENDVGlsZWRMYXllckltcGwgOiBwdWJsaWMgQ0NMYXll
ckltcGwsIHB1YmxpYyBDQ1RpbGVkTGF5ZXJQcm9wZXJ0aWVzIHsKIHB1YmxpYzoKICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxDQ1RpbGVkTGF5ZXJJbXBsPiBjcmVhdGUoaW50IGlkKQogICAgIHsKQEAg
LTgyLDExICs5NSw0MSBAQCBwcml2YXRlOgogCiAgICAgRHJhd2FibGVUaWxlKiB0aWxlQXQoaW50
LCBpbnQpIGNvbnN0OwogICAgIERyYXdhYmxlVGlsZSogY3JlYXRlVGlsZShpbnQsIGludCk7Cit9
OwogCi0gICAgYm9vbCBtX3NraXBzRHJhdzsKLSAgICBib29sIG1fY29udGVudHNTd2l6emxlZDsK
K2NsYXNzIENDVGlsZWRMYXllckRhdGEgOiBwdWJsaWMgQ0NMYXllckRhdGEsIHB1YmxpYyBDQ1Rp
bGVkTGF5ZXJQcm9wZXJ0aWVzIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDQ1Rp
bGVkTGF5ZXJEYXRhPiBjcmVhdGUoaW50IGlkKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBDQ1RpbGVkTGF5ZXJEYXRhKGlkKSk7CisgICAgfQorICAgIHN0YXRpYyB2b2lkIHB1
c2hQcm9wZXJ0aWVzKGNvbnN0IENDVGlsZWRMYXllckRhdGEqLCBDQ0xheWVyKik7CiAKLSAgICBP
d25QdHI8Q0NMYXllclRpbGluZ0RhdGE+IG1fdGlsZXI7CisgICAgdmlydHVhbCB+Q0NUaWxlZExh
eWVyRGF0YSgpOworCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPENDTGF5ZXI+IGNyZWF0ZUNDTGF5
ZXIoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIENDVGlsZWRMYXllckltcGw6OmNyZWF0ZShpZCgp
KTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcHVzaFByb3BlcnRpZXNUbyhDQ0xheWVyKiBs
YXllcikKKyAgICB7CisgICAgICAgIENDTGF5ZXJEYXRhOjpwdXNoUHJvcGVydGllcyh0aGlzLCBs
YXllcik7CisgICAgICAgIHB1c2hQcm9wZXJ0aWVzKHRoaXMsIGxheWVyKTsKKyAgICB9CisKKyAg
ICB2b2lkIHNldFNraXBzRHJhdyhib29sIHNraXBzRHJhdykgeyBtX3NraXBzRHJhdyA9IHNraXBz
RHJhdzsgfQorICAgIHZvaWQgc2V0Q29udGVudHNTd2l6emxlZChib29sIGNvbnRlbnRzU3dpenps
ZWQpIHsgbV9jb250ZW50c1N3aXp6bGVkID0gY29udGVudHNTd2l6emxlZDsgfQorICAgIHZvaWQg
c2V0VGlsaW5nRGF0YShjb25zdCBDQ0xheWVyVGlsaW5nRGF0YSYpOworICAgIHZvaWQgc3luY1Rl
eHR1cmVJZChpbnQsIGludCwgUGxhdGZvcm0zRE9iamVjdCk7CisKK3Byb3RlY3RlZDoKKyAgICBl
eHBsaWNpdCBDQ1RpbGVkTGF5ZXJEYXRhKGludCk7CisKKyAgICBEcmF3YWJsZVRpbGUqIHRpbGVB
dChpbnQsIGludCkgY29uc3Q7CisgICAgRHJhd2FibGVUaWxlKiBjcmVhdGVUaWxlKGludCwgaW50
KTsKKworcHJpdmF0ZToKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5jcHAK
aW5kZXggOTllN2UxMS4uZWFmZDFhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5j
cHAKQEAgLTMyNSw2ICszMjUsMTYgQEAgdm9pZCBDQ1ZpZGVvTGF5ZXJJbXBsOjpkdW1wTGF5ZXJQ
cm9wZXJ0aWVzKFRleHRTdHJlYW0mIHRzLCBpbnQgaW5kZW50KSBjb25zdAogICAgIENDTGF5ZXJJ
bXBsOjpkdW1wTGF5ZXJQcm9wZXJ0aWVzKHRzLCBpbmRlbnQpOwogfQogCitDQ1ZpZGVvTGF5ZXJE
YXRhOjpDQ1ZpZGVvTGF5ZXJEYXRhKGludCBpZCwgVmlkZW9GcmFtZVByb3ZpZGVyKiBwcm92aWRl
cikKKyAgICA6IENDTGF5ZXJEYXRhKGlkKQorICAgICwgbV9wcm92aWRlcihwcm92aWRlcikKK3sK
K30KKworQ0NWaWRlb0xheWVyRGF0YTo6fkNDVmlkZW9MYXllckRhdGEoKQoreworfQorCiB9CiAK
ICNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBs
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVv
TGF5ZXJJbXBsLmgKaW5kZXggY2M0Y2M4Mi4uODQ4YmMwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9M
YXllckltcGwuaApAQCAtODgsNiArODgsMjcgQEAgcHJpdmF0ZToKICAgICBJbnRTaXplIG1fbmF0
aXZlVGV4dHVyZVNpemU7CiB9OwogCitjbGFzcyBDQ1ZpZGVvTGF5ZXJEYXRhIDogcHVibGljIEND
TGF5ZXJEYXRhIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDQ1ZpZGVvTGF5ZXJE
YXRhPiBjcmVhdGUoaW50IGlkLCBWaWRlb0ZyYW1lUHJvdmlkZXIqIHByb3ZpZGVyKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDQ1ZpZGVvTGF5ZXJEYXRhKGlkLCBwcm92aWRl
cikpOworICAgIH0KKworICAgIHZpcnR1YWwgfkNDVmlkZW9MYXllckRhdGEoKTsKKworICAgIHZp
cnR1YWwgUGFzc1JlZlB0cjxDQ0xheWVyPiBjcmVhdGVDQ0xheWVyKCkKKyAgICB7CisgICAgICAg
IHJldHVybiBDQ1ZpZGVvTGF5ZXJJbXBsOjpjcmVhdGUoaWQoKSwgbV9wcm92aWRlcik7CisgICAg
fQorCitwcm90ZWN0ZWQ6CisgICAgQ0NWaWRlb0xheWVyRGF0YShpbnQsIFZpZGVvRnJhbWVQcm92
aWRlciopOworCitwcml2YXRlOgorICAgIFZpZGVvRnJhbWVQcm92aWRlciogbV9wcm92aWRlcjsK
K307CisKIH0KIAogI2VuZGlmIC8vIENDVmlkZW9MYXllckltcGxfaApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEuY3Bw
CmluZGV4IDliMjVjODIuLjVjMTRiNTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAKQEAgLTUwLDYgKzUw
LDcgQEAKICNpbmNsdWRlICJTa2lhVXRpbHMuaCIKICNpbmNsdWRlICJXRUJQSW1hZ2VFbmNvZGVy
LmgiCiAjaW5jbHVkZSAiY2MvQ0NDYW52YXNMYXllckltcGwuaCIKKyNpbmNsdWRlICJjYy9DQ1By
b3h5LmgiCiAKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApAQCAtODgsNyArODks
MTAgQEAgc3RhdGljIFNrQ2FudmFzKiBjcmVhdGVBY2NlbGVyYXRlZENhbnZhcyhjb25zdCBJbnRT
aXplJiBzaXplLCBJbWFnZUJ1ZmZlckRhdGEqIGQKICAgICBjYW52YXMtPnNldERldmljZShuZXcg
U2tHcHVEZXZpY2UoZ3IsIHRleHR1cmUuZ2V0KCkpKS0+dW5yZWYoKTsKICAgICBkYXRhLT5tX3Bs
YXRmb3JtQ29udGV4dC5zZXRHcmFwaGljc0NvbnRleHQzRChjb250ZXh0M0QpOwogI2lmIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICBkYXRhLT5tX3BsYXRmb3JtTGF5ZXIgPSBDYW52
YXMyRExheWVyQ2hyb21pdW06OmNyZWF0ZTxDQ0NhbnZhc0xheWVySW1wbD4oY29udGV4dDNELCBz
aXplKTsKKyAgICBpZiAoQ0NQcm94eTo6aGFzSW1wbFRocmVhZCgpKQorICAgICAgICBkYXRhLT5t
X3BsYXRmb3JtTGF5ZXIgPSBDYW52YXMyRExheWVyQ2hyb21pdW06OmNyZWF0ZTxDQ0NhbnZhc0xh
eWVyRGF0YT4oY29udGV4dDNELCBzaXplKTsKKyAgICBlbHNlCisgICAgICAgIGRhdGEtPm1fcGxh
dGZvcm1MYXllciA9IENhbnZhczJETGF5ZXJDaHJvbWl1bTo6Y3JlYXRlPENDQ2FudmFzTGF5ZXJJ
bXBsPihjb250ZXh0M0QsIHNpemUpOwogICAgIGRhdGEtPm1fcGxhdGZvcm1MYXllci0+c2V0VGV4
dHVyZUlkKHRleHR1cmUuZ2V0KCktPmdldFRleHR1cmVIYW5kbGUoKSk7CiAjZW5kaWYKICAgICBy
ZXR1cm4gY2FudmFzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
RXh0ZXJuYWxUZXh0dXJlTGF5ZXIuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
RXh0ZXJuYWxUZXh0dXJlTGF5ZXIuY3BwCmluZGV4IDZkZTMyOGYuLjI2YThhNmIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkV4dGVybmFsVGV4dHVyZUxheWVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJFeHRlcm5hbFRleHR1cmVMYXll
ci5jcHAKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJwbGF0Zm9ybS9XZWJFeHRlcm5hbFRl
eHR1cmVMYXllci5oIgogCiAjaW5jbHVkZSAiY2MvQ0NQbHVnaW5MYXllckltcGwuaCIKKyNpbmNs
dWRlICJjYy9DQ1Byb3h5LmgiCiAjaW5jbHVkZSAicGxhdGZvcm0vV2ViRmxvYXRSZWN0LmgiCiAj
aW5jbHVkZSAiV2ViRXh0ZXJuYWxUZXh0dXJlTGF5ZXJJbXBsLmgiCiAKQEAgLTM2LDcgKzM3LDEw
IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiBXZWJFeHRlcm5hbFRleHR1cmVMYXllciBXZWJFeHRl
cm5hbFRleHR1cmVMYXllcjo6Y3JlYXRlKCkKIHsKLSAgICByZXR1cm4gV2ViRXh0ZXJuYWxUZXh0
dXJlTGF5ZXIoV2ViRXh0ZXJuYWxUZXh0dXJlTGF5ZXJJbXBsOjpjcmVhdGU8Q0NQbHVnaW5MYXll
ckltcGw+KCkpOworICAgIGlmIChDQ1Byb3h5OjpoYXNJbXBsVGhyZWFkKCkpCisgICAgICAgIHJl
dHVybiBXZWJFeHRlcm5hbFRleHR1cmVMYXllcihXZWJFeHRlcm5hbFRleHR1cmVMYXllckltcGw6
OmNyZWF0ZTxDQ1BsdWdpbkxheWVyRGF0YT4oKSk7CisgICAgZWxzZQorICAgICAgICByZXR1cm4g
V2ViRXh0ZXJuYWxUZXh0dXJlTGF5ZXIoV2ViRXh0ZXJuYWxUZXh0dXJlTGF5ZXJJbXBsOjpjcmVh
dGU8Q0NQbHVnaW5MYXllckltcGw+KCkpOwogfQogCiB2b2lkIFdlYkV4dGVybmFsVGV4dHVyZUxh
eWVyOjpzZXRUZXh0dXJlSWQodW5zaWduZWQgaWQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJMYXllci5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJMYXllci5jcHAKaW5kZXggYjQ4ZjBmOS4uZGQ4NDFiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYkxheWVyLmNwcApAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgInBsYXRmb3Jt
L1dlYkxheWVyLmgiCiAKICNpbmNsdWRlICJjYy9DQ0xheWVySW1wbC5oIgorI2luY2x1ZGUgImNj
L0NDUHJveHkuaCIKICNpbmNsdWRlICJwbGF0Zm9ybS9XZWJGbG9hdFBvaW50LmgiCiAjaW5jbHVk
ZSAiQ29sb3IuaCIKICNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCkBAIC03Nyw3ICs3OCwxMCBA
QCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogV2ViTGF5ZXIgV2ViTGF5ZXI6OmNyZWF0ZSgpCiB7Ci0g
ICAgcmV0dXJuIFdlYkxheWVyKFdlYkxheWVySW1wbDo6Y3JlYXRlPENDTGF5ZXJJbXBsPigpKTsK
KyAgICBpZiAoQ0NQcm94eTo6aGFzSW1wbFRocmVhZCgpKQorICAgICAgICByZXR1cm4gV2ViTGF5
ZXIoV2ViTGF5ZXJJbXBsOjpjcmVhdGU8Q0NMYXllckRhdGE+KCkpOworICAgIGVsc2UKKyAgICAg
ICAgcmV0dXJuIFdlYkxheWVyKFdlYkxheWVySW1wbDo6Y3JlYXRlPENDTGF5ZXJJbXBsPigpKTsK
IH0KIAogdm9pZCBXZWJMYXllcjo6cmVzZXQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYk1lZGlhUGxheWVyQ2xpZW50SW1wbC5jcHAKaW5kZXggZTNkZTZjZC4u
OGRjN2ExZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTWVkaWFQ
bGF5ZXJDbGllbnRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJN
ZWRpYVBsYXllckNsaWVudEltcGwuY3BwCkBAIC0xMjEsNyArMTIxLDExIEBAIHZvaWQgV2ViTWVk
aWFQbGF5ZXJDbGllbnRJbXBsOjpyZWFkeVN0YXRlQ2hhbmdlZCgpCiAgICAgbV9tZWRpYVBsYXll
ci0+cmVhZHlTdGF0ZUNoYW5nZWQoKTsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
CiAgICAgaWYgKGhhc1ZpZGVvKCkgJiYgc3VwcG9ydHNBY2NlbGVyYXRlZFJlbmRlcmluZygpICYm
ICFtX3ZpZGVvTGF5ZXIpIHsKLSAgICAgICAgbV92aWRlb0xheWVyID0gVmlkZW9MYXllckNocm9t
aXVtOjpjcmVhdGU8Q0NWaWRlb0xheWVySW1wbD4oMCwgdGhpcyk7CisgICAgICAgIGlmIChDQ1By
b3h5OjpoYXNJbXBsVGhyZWFkKCkpCisgICAgICAgICAgICBtX3ZpZGVvTGF5ZXIgPSBWaWRlb0xh
eWVyQ2hyb21pdW06OmNyZWF0ZTxDQ1ZpZGVvTGF5ZXJEYXRhPigwLCB0aGlzKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgbV92aWRlb0xheWVyID0gVmlkZW9MYXllckNocm9taXVtOjpjcmVh
dGU8Q0NWaWRlb0xheWVySW1wbD4oMCwgdGhpcyk7CisKICAgICAgICAgbV92aWRlb0xheWVyLT5z
ZXRPcGFxdWUobV9vcGFxdWUpOwogICAgIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViUGx1Z2luQ29udGFpbmVySW1wbC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJQbHVnaW5Db250YWluZXJJbXBsLmNwcAppbmRleCAwY2QxMWQ5
Li42N2QxNmVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQbHVn
aW5Db250YWluZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQ
bHVnaW5Db250YWluZXJJbXBsLmNwcApAQCAtNTM3LDEwICs1MzcsMTMgQEAgV2ViUGx1Z2luQ29u
dGFpbmVySW1wbDo6V2ViUGx1Z2luQ29udGFpbmVySW1wbChXZWJDb3JlOjpIVE1MUGx1Z0luRWxl
bWVudCogZWxlbWUKICAgICA6IFdlYkNvcmU6OlBsdWdpblZpZXdCYXNlKDApCiAgICAgLCBtX2Vs
ZW1lbnQoZWxlbWVudCkKICAgICAsIG1fd2ViUGx1Z2luKHdlYlBsdWdpbikKK3sKICNpZiBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgLCBtX3BsYXRmb3JtTGF5ZXIoUGx1Z2luTGF5
ZXJDaHJvbWl1bTo6Y3JlYXRlPENDUGx1Z2luTGF5ZXJJbXBsPigwKSkKKyAgICBpZiAoQ0NQcm94
eTo6aGFzSW1wbFRocmVhZCgpKQorICAgICAgICBtX3BsYXRmb3JtTGF5ZXIgPSBQbHVnaW5MYXll
ckNocm9taXVtOjpjcmVhdGU8Q0NQbHVnaW5MYXllckRhdGE+KDApOworICAgIGVsc2UKKyAgICAg
ICAgbV9wbGF0Zm9ybUxheWVyID0gUGx1Z2luTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlPENDUGx1Z2lu
TGF5ZXJJbXBsPigwKTsKICNlbmRpZgotewogfQogCiBXZWJQbHVnaW5Db250YWluZXJJbXBsOjp+
V2ViUGx1Z2luQ29udGFpbmVySW1wbCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcAppbmRleCBjYjA1ZGYyLi4wYmUwODM5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRl
c3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0
VGVzdC5jcHAKQEAgLTI3LDkgKzI3LDEyIEBACiAjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0
LmgiCiAKICNpbmNsdWRlICJDb21wb3NpdG9yRmFrZUdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5j
bHVkZSAiQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5oIgogI2luY2x1ZGUgIkNvbnRlbnRMYXll
ckNocm9taXVtLmgiCiAjaW5jbHVkZSAiRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5j
bHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgIkxheWVyUGFpbnRlckNocm9taXVtLmgi
CisjaW5jbHVkZSAiTWFuYWdlZFRleHR1cmUuaCIKICNpbmNsdWRlICJUZXh0dXJlTWFuYWdlci5o
IgogI2luY2x1ZGUgIldlYkNvbXBvc2l0b3IuaCIKICNpbmNsdWRlICJXZWJLaXQuaCIKQEAgLTM4
OSw3ICszOTIsMTEgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RUZXN0Ojpkb0JlZ2luVGVzdCgpCiAg
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBtX2NsaWVudCA9IE1vY2tMYXllclRyZWVI
b3N0Q2xpZW50OjpjcmVhdGUodGhpcyk7CiAKLSAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcm9v
dExheWVyID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlPENDTGF5ZXJJbXBsPigwKTsKKyAgICBSZWZQ
dHI8TGF5ZXJDaHJvbWl1bT4gcm9vdExheWVyOworICAgIGlmIChDQ1Byb3h5OjpoYXNJbXBsVGhy
ZWFkKCkpCisgICAgICAgIHJvb3RMYXllciA9IExheWVyQ2hyb21pdW06OmNyZWF0ZTxDQ0xheWVy
RGF0YT4oMCk7CisgICAgZWxzZQorICAgICAgICByb290TGF5ZXIgPSBMYXllckNocm9taXVtOjpj
cmVhdGU8Q0NMYXllckltcGw+KDApOwogICAgIG1fbGF5ZXJUcmVlSG9zdCA9IE1vY2tMYXllclRy
ZWVIb3N0OjpjcmVhdGUodGhpcywgbV9jbGllbnQuZ2V0KCksIHJvb3RMYXllciwgbV9zZXR0aW5n
cyk7CiAgICAgQVNTRVJUX1RSVUUobV9sYXllclRyZWVIb3N0KTsKICAgICByb290TGF5ZXItPnNl
dExheWVyVHJlZUhvc3QobV9sYXllclRyZWVIb3N0LmdldCgpKTsKQEAgLTkzNSw0MCArOTQyLDcx
IEBAIHByaXZhdGU6CiAKIGNsYXNzIENvbnRlbnRMYXllckNocm9taXVtV2l0aFVwZGF0ZVRyYWNr
aW5nIDogcHVibGljIENvbnRlbnRMYXllckNocm9taXVtIHsKIHB1YmxpYzoKLSAgICBjbGFzcyBD
b250ZW50TGF5ZXJUZXh0dXJlVXBkYXRlciA6IHB1YmxpYyBMYXllclRleHR1cmVVcGRhdGVyIHsK
KyAgICBjbGFzcyBDb250ZW50TGF5ZXJUZXh0dXJlVXBkYXRlciA6IHB1YmxpYyBDYW52YXNMYXll
clRleHR1cmVVcGRhdGVyIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIGNsYXNzIFRleHR1cmUgOiBw
dWJsaWMgTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZSB7CisgICAgICAgIGNsYXNzIFBhaW50
ZXIgOiBwdWJsaWMgTGF5ZXJQYWludGVyQ2hyb21pdW0gewogICAgICAgICBwdWJsaWM6Ci0gICAg
ICAgICAgICBUZXh0dXJlKENvbnRlbnRMYXllclRleHR1cmVVcGRhdGVyKiB0ZXh0dXJlVXBkYXRl
ciwgUGFzc093blB0cjxNYW5hZ2VkVGV4dHVyZT4gdGV4dHVyZSkKLSAgICAgICAgICAgICAgICA6
IG1fdGV4dHVyZSh0ZXh0dXJlKQotICAgICAgICAgICAgICAgICwgbV90ZXh0dXJlVXBkYXRlcih0
ZXh0dXJlVXBkYXRlcikKKyAgICAgICAgICAgIHN0YXRpYyBQYXNzT3duUHRyPFBhaW50ZXI+IGNy
ZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBQYWludGVyKCkpOyB9CisKKyAgICAgICAgICAg
IHZpcnR1YWwgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQmLCBjb25zdCBJbnRSZWN0JikKICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAg
ICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgY2xhc3MgVGV4dHVyZSA6IHB1Ymxp
YyBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlIHsKKyAgICAgICAgcHVibGljOgor
ICAgICAgICAgICAgY2xhc3MgVGV4dHVyZVVwZGF0ZSA6IHB1YmxpYyBDQ1RleHR1cmVVcGRhdGVy
OjpUZXh0dXJlVXBkYXRlIHsKKyAgICAgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgICAgICBz
dGF0aWMgUGFzc093blB0cjxUZXh0dXJlVXBkYXRlPiBjcmVhdGUoVGV4dHVyZSogdGV4dHVyZSkg
eyByZXR1cm4gYWRvcHRQdHIobmV3IFRleHR1cmVVcGRhdGUodGV4dHVyZSkpOyB9CisKKyAgICAg
ICAgICAgICAgICB2b2lkIHNldFRleHR1cmVJZCh1bnNpZ25lZCB0ZXh0dXJlSWQpIHsgbV90ZXh0
dXJlSWQgPSB0ZXh0dXJlSWQ7IH0KKworICAgICAgICAgICAgICAgIHZvaWQgdXBkYXRlKEdyYXBo
aWNzQ29udGV4dDNEKiBjb250ZXh0KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgbV90ZXh0dXJlLT50ZXh0dXJlVXBkYXRlcigpLT5sYXllcigpLT51cGRhdGUoKTsKKyAg
ICAgICAgICAgICAgICAgICAgY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfMkQsIG1fdGV4dHVyZUlkKTsKKyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgIHZpcnR1YWwgTWFuYWdlZFRleHR1cmUqIHRleHR1cmUoKSB7IHJldHVybiBtX3RleHR1cmUu
Z2V0KCk7IH0KKyAgICAgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICAgICAgZXhwbGljaXQg
VGV4dHVyZVVwZGF0ZShUZXh0dXJlKiB0ZXh0dXJlKQorICAgICAgICAgICAgICAgICAgICA6IG1f
dGV4dHVyZUlkKDApCisgICAgICAgICAgICAgICAgICAgICwgbV90ZXh0dXJlKHRleHR1cmUpCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgdmlydHVh
bCBib29sIG5lZWRQcmVwYXJlUmVjdCgpCisgICAgICAgICAgICAgICAgdW5zaWduZWQgbV90ZXh0
dXJlSWQ7CisgICAgICAgICAgICAgICAgVGV4dHVyZSogbV90ZXh0dXJlOworICAgICAgICAgICAg
fTsKKworICAgICAgICAgICAgVGV4dHVyZShDb250ZW50TGF5ZXJUZXh0dXJlVXBkYXRlciogdGV4
dHVyZVVwZGF0ZXIsIFBhc3NPd25QdHI8TWFuYWdlZFRleHR1cmU+IHRleHR1cmUpCisgICAgICAg
ICAgICAgICAgOiBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlKHRleHR1cmUpCisg
ICAgICAgICAgICAgICAgLCBtX3RleHR1cmVVcGRhdGVyKHRleHR1cmVVcGRhdGVyKQogICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBtX3RleHR1cmVVcGRhdGVyLT5sYXllcigp
LT5uZWVkUHJlcGFyZVJlY3QoKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgdmlydHVh
bCB2b2lkIHByZXBhcmVSZWN0KEdyYXBoaWNzQ29udGV4dDNEKiwgVGV4dHVyZUFsbG9jYXRvcios
IGNvbnN0IEludFJlY3QmIC8qIHNvdXJjZVJlY3QgKi8sIGNvbnN0IEludFJlY3QmIC8qIGRlc3RS
ZWN0ICovKQorICAgICAgICAgICAgdmlydHVhbCB2b2lkIHByZXBhcmUoR3JhcGhpY3NDb250ZXh0
M0QqIGNvbnRleHQsIFRleHR1cmVBbGxvY2F0b3IqIGFsbG9jYXRvcikKICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBtX3RleHR1cmVVcGRhdGVyLT5sYXllcigpLT5wcmVwYXJlUmVjdCgp
OworICAgICAgICAgICAgICAgIG1fdGV4dHVyZVVwZGF0ZXItPmxheWVyKCktPnByZXBhcmUoKTsK
KyAgICAgICAgICAgICAgICBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlOjpwcmVw
YXJlKGNvbnRleHQsIGFsbG9jYXRvcik7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHZp
cnR1YWwgdm9pZCBwYWludENvbnRlbnRzUmVjdChjb25zdCBJbnRSZWN0JiAvKiBzb3VyY2VSZWN0
ICovKQorICAgICAgICAgICAgdmlydHVhbCBQYXNzT3duUHRyPENDVGV4dHVyZVVwZGF0ZXI6OlRl
eHR1cmVVcGRhdGU+IGNyZWF0ZUNDVGV4dHVyZVVwZGF0ZSgpCiAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgbV90ZXh0dXJlVXBkYXRlci0+bGF5ZXIoKS0+cGFpbnRDb250ZW50c1JlY3Qo
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gVGV4dHVyZVVwZGF0ZTo6Y3JlYXRlKHRoaXMpOwog
ICAgICAgICAgICAgfQogCi0gICAgICAgICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlUmVjdChHcmFw
aGljc0NvbnRleHQzRCosIGNvbnN0IEludFJlY3QmIC8qIHNvdXJjZVJlY3QgKi8sIGNvbnN0IElu
dFJlY3QmIC8qIGRlc3RSZWN0ICovKQorICAgICAgICAgICAgdmlydHVhbCB2b2lkIHB1c2hQcm9w
ZXJ0aWVzVG8oQ0NUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZVVwZGF0ZSogdXBkYXRlKQogICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIG1fdGV4dHVyZVVwZGF0ZXItPmxheWVyKCktPnVwZGF0
ZVJlY3QoKTsKKyAgICAgICAgICAgICAgICBtX3RleHR1cmVVcGRhdGVyLT5sYXllcigpLT5wdXNo
UHJvcGVydGllc1RvKCk7CisgICAgICAgICAgICAgICAgVGV4dHVyZVVwZGF0ZSogdGV4dHVyZVVw
ZGF0ZSA9IHN0YXRpY19jYXN0PFRleHR1cmVVcGRhdGUqPih1cGRhdGUpOworCisgICAgICAgICAg
ICAgICAgdGV4dHVyZVVwZGF0ZS0+c2V0VGV4dHVyZUlkKHRleHR1cmUoKS0+dGV4dHVyZUlkKCkp
OwogICAgICAgICAgICAgfQogCisgICAgICAgICAgICBDb250ZW50TGF5ZXJUZXh0dXJlVXBkYXRl
ciogdGV4dHVyZVVwZGF0ZXIoKSB7IHJldHVybiBtX3RleHR1cmVVcGRhdGVyOyB9CisKICAgICAg
ICAgcHJpdmF0ZToKLSAgICAgICAgICAgIE93blB0cjxNYW5hZ2VkVGV4dHVyZT4gbV90ZXh0dXJl
OwogICAgICAgICAgICAgQ29udGVudExheWVyVGV4dHVyZVVwZGF0ZXIqIG1fdGV4dHVyZVVwZGF0
ZXI7CiAgICAgICAgIH07CiAKQEAgLTk3Nyw3ICsxMDE1LDcgQEAgcHVibGljOgogICAgICAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDb250ZW50TGF5ZXJUZXh0dXJlVXBkYXRlcihsYXllcikp
OwogICAgICAgICB9CiAKLSAgICAgICAgdmlydHVhbCBQYXNzT3duUHRyPExheWVyVGV4dHVyZVVw
ZGF0ZXI6OlRleHR1cmU+IGNyZWF0ZVRleHR1cmUoVGV4dHVyZU1hbmFnZXIqIG1hbmFnZXIpCisg
ICAgICAgIHZpcnR1YWwgUGFzc093blB0cjxDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0
dXJlPiBjcmVhdGVUZXh0dXJlKFRleHR1cmVNYW5hZ2VyKiBtYW5hZ2VyKQogICAgICAgICB7CiAg
ICAgICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFRleHR1cmUodGhpcywgTWFuYWdlZFRleHR1
cmU6OmNyZWF0ZShtYW5hZ2VyKSkpOwogICAgICAgICB9CkBAIC05OTUsMjEgKzEwMzMsMjUgQEAg
cHVibGljOgogICAgICAgICBDb250ZW50TGF5ZXJDaHJvbWl1bVdpdGhVcGRhdGVUcmFja2luZyog
bGF5ZXIoKSB7IHJldHVybiBtX2xheWVyOyB9CiAKICAgICBwcml2YXRlOgotICAgICAgICBleHBs
aWNpdCBDb250ZW50TGF5ZXJUZXh0dXJlVXBkYXRlcihDb250ZW50TGF5ZXJDaHJvbWl1bVdpdGhV
cGRhdGVUcmFja2luZyogbGF5ZXIpIDogbV9sYXllcihsYXllcikgeyB9CisgICAgICAgIGV4cGxp
Y2l0IENvbnRlbnRMYXllclRleHR1cmVVcGRhdGVyKENvbnRlbnRMYXllckNocm9taXVtV2l0aFVw
ZGF0ZVRyYWNraW5nKiBsYXllcikKKyAgICAgICAgICAgIDogQ2FudmFzTGF5ZXJUZXh0dXJlVXBk
YXRlcihQYWludGVyOjpjcmVhdGUoKSkKKyAgICAgICAgICAgICwgbV9sYXllcihsYXllcikKKyAg
ICAgICAgeworICAgICAgICB9CiAKICAgICAgICAgQ29udGVudExheWVyQ2hyb21pdW1XaXRoVXBk
YXRlVHJhY2tpbmcqIG1fbGF5ZXI7CiAgICAgfTsKIAotICAgIHN0YXRpYyBQYXNzUmVmUHRyPENv
bnRlbnRMYXllckNocm9taXVtV2l0aFVwZGF0ZVRyYWNraW5nPiBjcmVhdGUoQ0NMYXllckRlbGVn
YXRlKiBkZWxlZ2F0ZSwgYm9vbCBuZWVkUHJlcGFyZVJlY3QpCisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8Q29udGVudExheWVyQ2hyb21pdW1XaXRoVXBkYXRlVHJhY2tpbmc+IGNyZWF0ZShDQ0xheWVy
RGVsZWdhdGUqIGRlbGVnYXRlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBD
b250ZW50TGF5ZXJDaHJvbWl1bVdpdGhVcGRhdGVUcmFja2luZyhkZWxlZ2F0ZSwgbmVlZFByZXBh
cmVSZWN0KSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ29udGVudExheWVyQ2hyb21p
dW1XaXRoVXBkYXRlVHJhY2tpbmcoZGVsZWdhdGUpKTsKICAgICB9CiAKICAgICB2aXJ0dWFsIHZv
aWQgY3JlYXRlVGV4dHVyZVVwZGF0ZXIoY29uc3QgQ0NMYXllclRyZWVIb3N0KikKICAgICB7CiAg
ICAgICAgIG1fY29udGVudExheWVyVGV4dHVyZVVwZGF0ZXIgPSBDb250ZW50TGF5ZXJUZXh0dXJl
VXBkYXRlcjo6Y3JlYXRlKHRoaXMpOwogICAgIH0KLSAgICB2aXJ0dWFsIExheWVyVGV4dHVyZVVw
ZGF0ZXIqIHRleHR1cmVVcGRhdGVyKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50TGF5ZXJUZXh0
dXJlVXBkYXRlci5nZXQoKTsgfQorICAgIHZpcnR1YWwgQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRl
ciogdGV4dHVyZVVwZGF0ZXIoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRMYXllclRleHR1cmVV
cGRhdGVyLmdldCgpOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZVRvVXBkYXRlSWZEaXJ0
eSgpCiAgICAgewpAQCAtMTAzMiw1MCArMTA3NCw1MiBAQCBwdWJsaWM6CiAgICAgdm9pZCBwYWlu
dENvbnRlbnRzKCkgeyBtX3BhaW50Q29udGVudHNDb3VudCsrOyB9CiAgICAgaW50IHBhaW50Q29u
dGVudHNDb3VudCgpIHsgcmV0dXJuIG1fcGFpbnRDb250ZW50c0NvdW50OyB9CiAKLSAgICB2b2lk
IHByZXBhcmVSZWN0KCkgeyBtX3ByZXBhcmVSZWN0Q291bnQrKzsgfQotICAgIGludCBwcmVwYXJl
UmVjdENvdW50KCkgeyByZXR1cm4gbV9wcmVwYXJlUmVjdENvdW50OyB9Ci0KLSAgICB2b2lkIHBh
aW50Q29udGVudHNSZWN0KCkgeyBtX3BhaW50Q29udGVudHNSZWN0Q291bnQrKzsgfQotICAgIGlu
dCBwYWludENvbnRlbnRzUmVjdENvdW50KCkgeyByZXR1cm4gbV9wYWludENvbnRlbnRzUmVjdENv
dW50OyB9CisgICAgdm9pZCBwcmVwYXJlKCkgeyBtX3ByZXBhcmVDb3VudCsrOyB9CisgICAgaW50
IHByZXBhcmVDb3VudCgpIHsgcmV0dXJuIG1fcHJlcGFyZUNvdW50OyB9CiAKLSAgICB2b2lkIHVw
ZGF0ZVJlY3QoKSB7IG1fdXBkYXRlUmVjdENvdW50Kys7IH0KLSAgICBpbnQgdXBkYXRlUmVjdENv
dW50KCkgeyByZXR1cm4gbV91cGRhdGVSZWN0Q291bnQ7IH0KKyAgICB2b2lkIHB1c2hQcm9wZXJ0
aWVzVG8oKSB7IG1fcHVzaFByb3BlcnRpZXNUb0NvdW50Kys7IH0KKyAgICBpbnQgcHVzaFByb3Bl
cnRpZXNUb0NvdW50KCkgeyByZXR1cm4gbV9wdXNoUHJvcGVydGllc1RvQ291bnQ7IH0KIAotICAg
IGludCBuZWVkUHJlcGFyZVJlY3QoKSB7IHJldHVybiBtX25lZWRQcmVwYXJlUmVjdDsgfQorICAg
IHZvaWQgdXBkYXRlKCkgeyBtX3VwZGF0ZUNvdW50Kys7IH0KKyAgICBpbnQgdXBkYXRlQ291bnQo
KSB7IHJldHVybiBtX3VwZGF0ZUNvdW50OyB9CiAKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q0NM
YXllcj4gY3JlYXRlQ0NMYXllcigpCiAgICAgewotICAgICAgICByZXR1cm4gQ0NMYXllckltcGw6
OmNyZWF0ZShtX2xheWVySWQpOworICAgICAgICBpZiAoQ0NQcm94eTo6aGFzSW1wbFRocmVhZCgp
KQorICAgICAgICAgICAgcmV0dXJuIENDTGF5ZXJEYXRhOjpjcmVhdGUobV9sYXllcklkKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIENDTGF5ZXJJbXBsOjpjcmVhdGUobV9sYXll
cklkKTsKICAgICB9CiAKICAgICB2aXJ0dWFsIHZvaWQgcHVzaFByb3BlcnRpZXNUbyhDQ0xheWVy
KiBjY0xheWVyKQogICAgIHsKLSAgICAgICAgTGF5ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXM8
Q0NMYXllckltcGw+KHRoaXMsIGNjTGF5ZXIpOworICAgICAgICBpZiAoQ0NQcm94eTo6aGFzSW1w
bFRocmVhZCgpKQorICAgICAgICAgICAgTGF5ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXM8Q0NM
YXllckRhdGE+KHRoaXMsIGNjTGF5ZXIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBMYXll
ckNocm9taXVtOjpwdXNoUHJvcGVydGllczxDQ0xheWVySW1wbD4odGhpcywgY2NMYXllcik7CiAg
ICAgfQogCiBwcml2YXRlOgotICAgIGV4cGxpY2l0IENvbnRlbnRMYXllckNocm9taXVtV2l0aFVw
ZGF0ZVRyYWNraW5nKENDTGF5ZXJEZWxlZ2F0ZSAqZGVsZWdhdGUsIGJvb2wgbmVlZFByZXBhcmVS
ZWN0KQorICAgIGV4cGxpY2l0IENvbnRlbnRMYXllckNocm9taXVtV2l0aFVwZGF0ZVRyYWNraW5n
KENDTGF5ZXJEZWxlZ2F0ZSAqZGVsZWdhdGUpCiAgICAgICAgIDogQ29udGVudExheWVyQ2hyb21p
dW0oZGVsZWdhdGUpCi0gICAgICAgICwgbV9uZWVkUHJlcGFyZVJlY3QobmVlZFByZXBhcmVSZWN0
KQogICAgICAgICAsIG1fcHJlcGFyZVRvVXBkYXRlQ291bnQoMCkKICAgICAgICAgLCBtX2lkbGVQ
cmVwYXJlVG9VcGRhdGVDb3VudCgwKQogICAgICAgICAsIG1fcGFpbnRDb250ZW50c0NvdW50KDAp
Ci0gICAgICAgICwgbV9wcmVwYXJlUmVjdENvdW50KDApCi0gICAgICAgICwgbV9wYWludENvbnRl
bnRzUmVjdENvdW50KDApCi0gICAgICAgICwgbV91cGRhdGVSZWN0Q291bnQoMCkKKyAgICAgICAg
LCBtX3ByZXBhcmVDb3VudCgwKQorICAgICAgICAsIG1fcHVzaFByb3BlcnRpZXNUb0NvdW50KDAp
CisgICAgICAgICwgbV91cGRhdGVDb3VudCgwKQogICAgIHsKICAgICAgICAgc2V0Qm91bmRzKElu
dFNpemUoMTAsIDEwKSk7CiAgICAgICAgIHNldElzRHJhd2FibGUodHJ1ZSk7CiAgICAgfQogCiAg
ICAgUmVmUHRyPENvbnRlbnRMYXllclRleHR1cmVVcGRhdGVyPiBtX2NvbnRlbnRMYXllclRleHR1
cmVVcGRhdGVyOwotICAgIGJvb2wgbV9uZWVkUHJlcGFyZVJlY3Q7CiAgICAgaW50IG1fcHJlcGFy
ZVRvVXBkYXRlQ291bnQ7CiAgICAgaW50IG1faWRsZVByZXBhcmVUb1VwZGF0ZUNvdW50OwogICAg
IGludCBtX3BhaW50Q29udGVudHNDb3VudDsKLSAgICBpbnQgbV9wcmVwYXJlUmVjdENvdW50Owot
ICAgIGludCBtX3BhaW50Q29udGVudHNSZWN0Q291bnQ7Ci0gICAgaW50IG1fdXBkYXRlUmVjdENv
dW50OworICAgIGludCBtX3ByZXBhcmVDb3VudDsKKyAgICBpbnQgbV9wdXNoUHJvcGVydGllc1Rv
Q291bnQ7CisgICAgaW50IG1fdXBkYXRlQ291bnQ7CiB9OwogCiAvLyBMYXllciBvcGFjaXR5IGNo
YW5nZSBkdXJpbmcgcGFpbnQgc2hvdWxkIG5vdCBwcmV2ZW50IGNvbXBvc2l0b3IgcmVzb3VyY2Vz
IGZyb20gYmVpbmcgdXBkYXRlZCBkdXJpbmcgY29tbWl0LgpAQCAtMTA4Myw3ICsxMTI3LDcgQEAg
Y2xhc3MgQ0NMYXllclRyZWVIb3N0VGVzdE9wYWNpdHlDaGFuZ2UgOiBwdWJsaWMgQ0NMYXllclRy
ZWVIb3N0VGVzdCB7CiBwdWJsaWM6CiAgICAgQ0NMYXllclRyZWVIb3N0VGVzdE9wYWNpdHlDaGFu
Z2UoKQogICAgICAgICA6IG1fdGVzdE9wYWNpdHlDaGFuZ2VEZWxlZ2F0ZSh0aGlzKQotICAgICAg
ICAsIG1fdXBkYXRlQ2hlY2tMYXllcihDb250ZW50TGF5ZXJDaHJvbWl1bVdpdGhVcGRhdGVUcmFj
a2luZzo6Y3JlYXRlKCZtX3Rlc3RPcGFjaXR5Q2hhbmdlRGVsZWdhdGUsIHRydWUpKQorICAgICAg
ICAsIG1fdXBkYXRlQ2hlY2tMYXllcihDb250ZW50TGF5ZXJDaHJvbWl1bVdpdGhVcGRhdGVUcmFj
a2luZzo6Y3JlYXRlKCZtX3Rlc3RPcGFjaXR5Q2hhbmdlRGVsZWdhdGUpKQogICAgIHsKICAgICB9
CiAKQEAgLTExMTEsMTUgKzExNTUsMTUgQEAgcHVibGljOgogICAgICAgICAvLyBwYWludENvbnRl
bnRzKCkgc2hvdWxkIGhhdmUgYmVlbiBjYWxsZWQgb25jZS4KICAgICAgICAgRVhQRUNUX0VRKDEs
IG1fdXBkYXRlQ2hlY2tMYXllci0+cGFpbnRDb250ZW50c0NvdW50KCkpOwogCi0gICAgICAgIC8v
IHBhaW50Q29udGVudHNSZWN0KCkgc2hvdWxkIGhhdmUgYmVlbiBjYWxsZWQgdGhlIHNhbWUKLSAg
ICAgICAgLy8gYW1vdW50IG9mIHRpbWVzIGFzIHByZXBhcmVSZWN0KCkuCi0gICAgICAgIEVYUEVD
VF9FUShtX3VwZGF0ZUNoZWNrTGF5ZXItPnByZXBhcmVSZWN0Q291bnQoKSwKLSAgICAgICAgICAg
ICAgICAgIG1fdXBkYXRlQ2hlY2tMYXllci0+cGFpbnRDb250ZW50c1JlY3RDb3VudCgpKTsKKyAg
ICAgICAgLy8gcHVzaFByb3BlcnRpZXNUbygpIHNob3VsZCBoYXZlIGJlZW4gY2FsbGVkIHRoZSBz
YW1lCisgICAgICAgIC8vIGFtb3VudCBvZiB0aW1lcyBhcyBwYWludENvbnRlbnRzKCkuCisgICAg
ICAgIEVYUEVDVF9FUShtX3VwZGF0ZUNoZWNrTGF5ZXItPnBhaW50Q29udGVudHNDb3VudCgpLAor
ICAgICAgICAgICAgICAgICAgbV91cGRhdGVDaGVja0xheWVyLT5wdXNoUHJvcGVydGllc1RvQ291
bnQoKSk7CiAKLSAgICAgICAgLy8gdXBkYXRlUmVjdCgpIHNob3VsZCBoYXZlIGJlZW4gY2FsbGVk
IHRoZSBzYW1lCi0gICAgICAgIC8vIGFtb3VudCBvZiB0aW1lcyBhcyBwYWludENvbnRlbnRzUmVj
dCgpLgotICAgICAgICBFWFBFQ1RfRVEobV91cGRhdGVDaGVja0xheWVyLT5wYWludENvbnRlbnRz
UmVjdENvdW50KCksCi0gICAgICAgICAgICAgICAgICBtX3VwZGF0ZUNoZWNrTGF5ZXItPnVwZGF0
ZVJlY3RDb3VudCgpKTsKKyAgICAgICAgLy8gdXBkYXRlKCkgc2hvdWxkIGhhdmUgYmVlbiBjYWxs
ZWQgdGhlIHNhbWUKKyAgICAgICAgLy8gYW1vdW50IG9mIHRpbWVzIGFzIHB1c2hQcm9wZXJ0aWVz
VG8oKS4KKyAgICAgICAgRVhQRUNUX0VRKG1fdXBkYXRlQ2hlY2tMYXllci0+cHVzaFByb3BlcnRp
ZXNUb0NvdW50KCksCisgICAgICAgICAgICAgICAgICBtX3VwZGF0ZUNoZWNrTGF5ZXItPnVwZGF0
ZUNvdW50KCkpOwogCiAgICAgICAgIC8vIGNsZWFyIG1fdXBkYXRlQ2hlY2tMYXllciBzbyBDQ0xh
eWVyVHJlZUhvc3QgZGllcy4KICAgICAgICAgbV91cGRhdGVDaGVja0xheWVyLmNsZWFyKCk7CkBA
IC0xMTM1LDExICsxMTc5LDEyIEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RUZXN0T3BhY2l0eUNo
YW5nZSwgcnVuTXVsdGlUaHJlYWQpCiAgICAgcnVuVGVzdCh0cnVlKTsKIH0KIAotLy8gcHJlcGFy
ZVJlY3QoKSBzaG91bGQgbm90IGJlIGNhbGxlZCB3aGVuIG5lZWRQcmVwYXJlUmVjdCgpIHJldHVy
bnMgZmFsc2UuCi1jbGFzcyBDQ0xheWVyVHJlZUhvc3RUZXN0Tm9QcmVwYXJlUmVjdCA6IHB1Ymxp
YyBDQ0xheWVyVHJlZUhvc3RUZXN0IHsKKy8vIHByZXBhcmVSZWN0KCkgc2hvdWxkIG5vdCBiZSBj
YWxsZWQgd2hlbiBuZWVkUHJlcGFyZSgpIHJldHVybnMgZmFsc2UuCitjbGFzcyBDQ0xheWVyVHJl
ZUhvc3RUZXN0Tm9QcmVwYXJlIDogcHVibGljIENDTGF5ZXJUcmVlSG9zdFRlc3QgewogcHVibGlj
OgotICAgIENDTGF5ZXJUcmVlSG9zdFRlc3ROb1ByZXBhcmVSZWN0KCkKLSAgICAgICAgOiBtX3Vw
ZGF0ZUNoZWNrTGF5ZXIoQ29udGVudExheWVyQ2hyb21pdW1XaXRoVXBkYXRlVHJhY2tpbmc6OmNy
ZWF0ZSgmbV9kZWxlZ2F0ZSwgZmFsc2UpKQorICAgIENDTGF5ZXJUcmVlSG9zdFRlc3ROb1ByZXBh
cmUoKQorICAgICAgICA6IG1fdXBkYXRlQ2hlY2tMYXllcihDb250ZW50TGF5ZXJDaHJvbWl1bVdp
dGhVcGRhdGVUcmFja2luZzo6Y3JlYXRlKCZtX2RlbGVnYXRlKSkKKyAgICAgICAgLCBtX2NvbW1p
dENvdW50KDApCiAgICAgewogICAgIH0KIApAQCAtMTE1MywzNSArMTE5OCw0OSBAQCBwdWJsaWM6
CiAKICAgICB2aXJ0dWFsIHZvaWQgY29tbWl0Q29tcGxldGVPbkNDVGhyZWFkKENDTGF5ZXJUcmVl
SG9zdEltcGwqKQogICAgIHsKLSAgICAgICAgZW5kVGVzdCgpOworICAgICAgICBpZiAobV9jb21t
aXRDb3VudCsrIDwgNSkKKyAgICAgICAgICAgIHBvc3RTZXROZWVkc0FuaW1hdGVBbmRDb21taXRU
b01haW5UaHJlYWQoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW5kVGVzdCgpOworICAg
IH0KKworICAgIHZpcnR1YWwgdm9pZCBhbmltYXRlQW5kTGF5b3V0KGRvdWJsZSBmcmFtZUJlZ2lu
VGltZSkKKyAgICB7CisgICAgICAgIG1fdXBkYXRlQ2hlY2tMYXllci0+c2V0TmVlZHNEaXNwbGF5
KCk7CiAgICAgfQogCiAgICAgdmlydHVhbCB2b2lkIGFmdGVyVGVzdCgpCiAgICAgewotICAgICAg
ICAvLyBwcmVwYXJlVG9VcGRhdGUoKSBzaG91bGQgaGF2ZSBiZWVuIGNhbGxlZCBvbmNlLgotICAg
ICAgICBFWFBFQ1RfRVEoMSwgbV91cGRhdGVDaGVja0xheWVyLT5wcmVwYXJlVG9VcGRhdGVDb3Vu
dCgpKTsKKyAgICAgICAgLy8gcHJlcGFyZVRvVXBkYXRlKCkgc2hvdWxkIGhhdmUgYmVlbiBjYWxs
ZWQgdGhlIHNhbWUgYW1vdW50CisgICAgICAgIC8vIG9mIHRpbWVzIGFzIG1fY29tbWl0Q291bnQu
CisgICAgICAgIEVYUEVDVF9FUShtX2NvbW1pdENvdW50LCBtX3VwZGF0ZUNoZWNrTGF5ZXItPnBy
ZXBhcmVUb1VwZGF0ZUNvdW50KCkpOwogCi0gICAgICAgIC8vIGlkbGVQcmVwYXJlVG9VcGRhdGUo
KSBzaG91bGQgaGF2ZSBiZWVuIGNhbGxlZCBvbmNlLgotICAgICAgICBFWFBFQ1RfRVEoMSwgbV91
cGRhdGVDaGVja0xheWVyLT5pZGxlUHJlcGFyZVRvVXBkYXRlQ291bnQoKSk7CisgICAgICAgIC8v
IGlkbGVQcmVwYXJlVG9VcGRhdGUoKSBzaG91bGQgaGF2ZSBiZWVuIGNhbGxlZCB0aGUgc2FtZSBh
bW91bnQKKyAgICAgICAgLy8gb2YgdGltZXMgYXMgbV9jb21taXRDb3VudC4KKyAgICAgICAgRVhQ
RUNUX0VRKG1fY29tbWl0Q291bnQsCisgICAgICAgICAgICAgICAgICBtX3VwZGF0ZUNoZWNrTGF5
ZXItPmlkbGVQcmVwYXJlVG9VcGRhdGVDb3VudCgpKTsKIAotICAgICAgICAvLyBwYWludENvbnRl
bnRzKCkgc2hvdWxkIGhhdmUgYmVlbiBjYWxsZWQgb25jZS4KLSAgICAgICAgRVhQRUNUX0VRKDEs
IG1fdXBkYXRlQ2hlY2tMYXllci0+cGFpbnRDb250ZW50c0NvdW50KCkpOworICAgICAgICAvLyBw
YWludENvbnRlbnRzKCkgc2hvdWxkIGhhdmUgYmVlbiBjYWxsZWQgdGhlIHNhbWUgYW1vdW50IG9m
CisgICAgICAgIC8vIHRpbWUgYXMgbV9jb21taXRDb3VudC4KKyAgICAgICAgRVhQRUNUX0VRKG1f
Y29tbWl0Q291bnQsIG1fdXBkYXRlQ2hlY2tMYXllci0+cGFpbnRDb250ZW50c0NvdW50KCkpOwog
Ci0gICAgICAgIC8vIHByZXBhcmVSZWN0KCkgc2hvdWxkIG5vdCBoYXZlIGJlZW4gY2FsbGVkLgot
ICAgICAgICBFWFBFQ1RfRVEoMCwgbV91cGRhdGVDaGVja0xheWVyLT5wcmVwYXJlUmVjdENvdW50
KCkpOworICAgICAgICAvLyBwcmVwYXJlKCkgc2hvdWxkIGhhdmUgYmVlbiBjYWxsZWQgb25jZSBh
cyBubyBwcmVwYXJlIGlzIG5lZWRlZAorICAgICAgICAvLyBmb3Igc3Vic2VxdWVudCB1cGRhdGVz
LgorICAgICAgICBFWFBFQ1RfRVEoMSwgbV91cGRhdGVDaGVja0xheWVyLT5wcmVwYXJlQ291bnQo
KSk7CiAKLSAgICAgICAgLy8gdXBkYXRlUmVjdCgpIHNob3VsZCBoYXZlIGJlZW4gY2FsbGVkIHRo
ZSBzYW1lCi0gICAgICAgIC8vIGFtb3VudCBvZiB0aW1lcyBhcyBwYWludENvbnRlbnRzUmVjdCgp
LgotICAgICAgICBFWFBFQ1RfRVEobV91cGRhdGVDaGVja0xheWVyLT5wYWludENvbnRlbnRzUmVj
dENvdW50KCksCi0gICAgICAgICAgICAgICAgICBtX3VwZGF0ZUNoZWNrTGF5ZXItPnVwZGF0ZVJl
Y3RDb3VudCgpKTsKKyAgICAgICAgLy8gdXBkYXRlKCkgc2hvdWxkIGhhdmUgYmVlbiBjYWxsZWQg
dGhlIHNhbWUgYW1vdW50IG9mIHRpbWVzIGFzCisgICAgICAgIC8vIHB1c2hQcm9wZXJ0aWVzVG8o
KS4KKyAgICAgICAgRVhQRUNUX0VRKG1fdXBkYXRlQ2hlY2tMYXllci0+cHVzaFByb3BlcnRpZXNU
b0NvdW50KCksCisgICAgICAgICAgICAgICAgICBtX3VwZGF0ZUNoZWNrTGF5ZXItPnVwZGF0ZUNv
dW50KCkpOwogICAgIH0KIAogcHJpdmF0ZToKICAgICBNb2NrTGF5ZXJEZWxlZ2F0ZSBtX2RlbGVn
YXRlOwogICAgIFJlZlB0cjxDb250ZW50TGF5ZXJDaHJvbWl1bVdpdGhVcGRhdGVUcmFja2luZz4g
bV91cGRhdGVDaGVja0xheWVyOworICAgIGludCBtX2NvbW1pdENvdW50OwogfTsKIAotVEVTVF9G
KENDTGF5ZXJUcmVlSG9zdFRlc3ROb1ByZXBhcmVSZWN0LCBydW5NdWx0aVRocmVhZCkKK1RFU1Rf
RihDQ0xheWVyVHJlZUhvc3RUZXN0Tm9QcmVwYXJlLCBydW5NdWx0aVRocmVhZCkKIHsKICAgICBy
dW5UZXN0KHRydWUpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9DYW52YXMyRExheWVyQ2hyb21pdW1UZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvQ2FudmFzMkRMYXllckNocm9taXVtVGVzdC5jcHAKaW5kZXggYmRkZGY2MS4uZTg4YmFi
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DYW52YXMyRExheWVy
Q2hyb21pdW1UZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NhbnZh
czJETGF5ZXJDaHJvbWl1bVRlc3QuY3BwCkBAIC02NywxNiArNjcsMTQgQEAgcHVibGljOgogICAg
IE1PQ0tfTUVUSE9EMyhkZWxldGVUZXh0dXJlLCB2b2lkKHVuc2lnbmVkLCBjb25zdCBJbnRTaXpl
JiwgR0MzRGVudW0pKTsKIH07CiAKLWNsYXNzIE1vY2tVcGRhdGVIYW5kbGVyIDogcHVibGljIExh
eWVyVGV4dHVyZVVwZGF0ZXI6OkhhbmRsZXIgeworY2xhc3MgTW9ja1ByZXBhcmVIYW5kbGVyIDog
cHVibGljIExheWVyVGV4dHVyZVVwZGF0ZXI6OkhhbmRsZXIgewogcHVibGljOgotICAgIE1vY2tV
cGRhdGVIYW5kbGVyKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBUZXh0dXJlQWxsb2NhdG9y
KiBhbGxvY2F0b3IpIDogbV9jb250ZXh0KGNvbnRleHQpLCBtX2FsbG9jYXRvcihhbGxvY2F0b3Ip
IHsgfQorICAgIE1vY2tQcmVwYXJlSGFuZGxlcihHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwg
VGV4dHVyZUFsbG9jYXRvciogYWxsb2NhdG9yKSA6IG1fY29udGV4dChjb250ZXh0KSwgbV9hbGxv
Y2F0b3IoYWxsb2NhdG9yKSB7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBoYW5kbGUoTGF5ZXJUZXh0
dXJlVXBkYXRlcjo6VGV4dHVyZSogdGV4dHVyZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwg
Y29uc3QgSW50UmVjdCYgZGVzdFJlY3QpCisgICAgdmlydHVhbCB2b2lkIGhhbmRsZShMYXllclRl
eHR1cmVVcGRhdGVyOjpUZXh0dXJlKiB0ZXh0dXJlKQogICAgIHsKLSAgICAgICAgaWYgKHRleHR1
cmUtPm5lZWRQcmVwYXJlUmVjdCgpKQotICAgICAgICAgICAgdGV4dHVyZS0+cHJlcGFyZVJlY3Qo
bV9jb250ZXh0LCBtX2FsbG9jYXRvciwgc291cmNlUmVjdCwgZGVzdFJlY3QpOwotCi0gICAgICAg
IHRleHR1cmUtPnVwZGF0ZVJlY3QobV9jb250ZXh0LCBzb3VyY2VSZWN0LCBkZXN0UmVjdCk7Cisg
ICAgICAgIGlmICh0ZXh0dXJlLT5uZWVkUHJlcGFyZSgpKQorICAgICAgICAgICAgdGV4dHVyZS0+
cHJlcGFyZShtX2NvbnRleHQsIG1fYWxsb2NhdG9yKTsKICAgICB9CiAKIHByaXZhdGU6CkBAIC0x
MDcsNyArMTA1LDcgQEAgcHJvdGVjdGVkOgogICAgICAgICBNb2NrQ2FudmFzQ29udGV4dCYgaW1w
bE1vY2sgPSAqc3RhdGljX2Nhc3Q8TW9ja0NhbnZhc0NvbnRleHQqPihHcmFwaGljc0NvbnRleHQz
RFByaXZhdGU6OmV4dHJhY3RXZWJHcmFwaGljc0NvbnRleHQzRChpbXBsQ29udGV4dC5nZXQoKSkp
OwogCiAgICAgICAgIE1vY2tUZXh0dXJlQWxsb2NhdG9yIGFsbG9jYXRvck1vY2s7Ci0gICAgICAg
IE1vY2tVcGRhdGVIYW5kbGVyIHVwZGF0ZUhhbmRsZXJNb2NrKGltcGxDb250ZXh0LmdldCgpLCAm
YWxsb2NhdG9yTW9jayk7CisgICAgICAgIE1vY2tQcmVwYXJlSGFuZGxlciBwcmVwYXJlSGFuZGxl
ck1vY2soaW1wbENvbnRleHQuZ2V0KCksICZhbGxvY2F0b3JNb2NrKTsKIAogICAgICAgICBjb25z
dCBJbnRTaXplIHNpemUoMzAwLCAxNTApOwogICAgICAgICBjb25zdCBzaXplX3QgbWF4VGV4dHVy
ZVNpemUgPSBzaXplLndpZHRoKCkgKiBzaXplLmhlaWdodCgpICogNDsKQEAgLTE2Myw3ICsxNjEs
NyBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgICAgICBSZWZQdHI8Q0NMYXllcj4gbGF5ZXIgPSBjYW52
YXMtPmNyZWF0ZUNDTGF5ZXIoKTsKICAgICAgICAgICAgIEVYUEVDVF9FUSgwdSwgc3RhdGljX2Nh
c3Q8Q0NDYW52YXNMYXllckltcGwqPihsYXllci5nZXQoKSktPnRleHR1cmVJZCgpKTsKIAotICAg
ICAgICAgICAgY2FudmFzLT5mb3JFYWNoQ29tcG9zaXRvclJlc291cmNlKHVwZGF0ZUhhbmRsZXJN
b2NrKTsKKyAgICAgICAgICAgIGNhbnZhcy0+Zm9yRWFjaENvbXBvc2l0b3JSZXNvdXJjZShwcmVw
YXJlSGFuZGxlck1vY2spOwogICAgICAgICAgICAgY2FudmFzLT5wdXNoUHJvcGVydGllc1RvKGxh
eWVyLmdldCgpKTsKIAogICAgICAgICAgICAgaWYgKHRocmVhZGVkKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UaWxlZExheWVyQ2hyb21pdW1UZXN0LmNwcCBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVGlsZWRMYXllckNocm9taXVtVGVzdC5jcHAKaW5k
ZXggOTVlMjQ2MC4uODNiMWFmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9UaWxlZExheWVyQ2hyb21pdW1UZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL1RpbGVkTGF5ZXJDaHJvbWl1bVRlc3QuY3BwCkBAIC0yNiw3ICsyNiw4IEBACiAK
ICNpbmNsdWRlICJUaWxlZExheWVyQ2hyb21pdW0uaCIKIAotI2luY2x1ZGUgIkxheWVyVGV4dHVy
ZVVwZGF0ZXIuaCIKKyNpbmNsdWRlICJDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmgiCisjaW5j
bHVkZSAiTGF5ZXJQYWludGVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJNYW5hZ2VkVGV4dHVyZS5o
IgogI2luY2x1ZGUgIlRleHR1cmVNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiY2MvQ0NTaW5nbGVUaHJl
YWRQcm94eS5oIiAvLyBGb3IgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkCkBAIC00MCwyNyArNDEs
NDMgQEAgbmFtZXNwYWNlIHsKIAogY2xhc3MgRmFrZUhhbmRsZXIgOiBwdWJsaWMgTGF5ZXJUZXh0
dXJlVXBkYXRlcjo6SGFuZGxlciB7CiBwdWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIGhhbmRsZShM
YXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlKiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFJl
Y3QmKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlKExheWVyVGV4dHVyZVVwZGF0ZXI6OlRl
eHR1cmUqKSB7IH0KIH07CiAKLWNsYXNzIEZha2VMYXllclRleHR1cmVVcGRhdGVyIDogcHVibGlj
IExheWVyVGV4dHVyZVVwZGF0ZXIgeworY2xhc3MgRmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIgOiBw
dWJsaWMgQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlciB7CiBwdWJsaWM6Ci0gICAgY2xhc3MgVGV4
dHVyZSA6IHB1YmxpYyBMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlIHsKKyAgICBjbGFzcyBQ
YWludGVyIDogcHVibGljIExheWVyUGFpbnRlckNocm9taXVtIHsKICAgICBwdWJsaWM6Ci0gICAg
ICAgIFRleHR1cmUoUGFzc093blB0cjxNYW5hZ2VkVGV4dHVyZT4gdGV4dHVyZSkgOiBtX3RleHR1
cmUodGV4dHVyZSkgeyB9Ci0gICAgICAgIHZpcnR1YWwgflRleHR1cmUoKSB7IH0KKyAgICAgICAg
c3RhdGljIFBhc3NPd25QdHI8UGFpbnRlcj4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRQdHIobmV3
IFBhaW50ZXIoKSk7IH0KIAotICAgICAgICB2aXJ0dWFsIE1hbmFnZWRUZXh0dXJlKiB0ZXh0dXJl
KCkgeyByZXR1cm4gbV90ZXh0dXJlLmdldCgpOyB9Ci0gICAgICAgIHZpcnR1YWwgdm9pZCB1cGRh
dGVSZWN0KEdyYXBoaWNzQ29udGV4dDNEKiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFJlY3Qm
KSB7IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0
IEludFJlY3QmKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgfQorICAgIH07CisgICAgY2xhc3MgVGV4dHVyZSA6IHB1YmxpYyBDYW52YXNMYXll
clRleHR1cmVVcGRhdGVyOjpUZXh0dXJlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIGNsYXNzIFRl
eHR1cmVVcGRhdGUgOiBwdWJsaWMgQ0NUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZVVwZGF0ZSB7Cisg
ICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIHN0YXRpYyBQYXNzT3duUHRyPFRleHR1cmVVcGRh
dGU+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBUZXh0dXJlVXBkYXRlKCkpOyB9CisK
KyAgICAgICAgICAgIHZvaWQgdXBkYXRlKEdyYXBoaWNzQ29udGV4dDNEKikgeyB9CisKKyAgICAg
ICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICAgICAgZXhwbGljaXQgVGV4dHVyZVVwZGF0ZSgp
IHsgfQorICAgICAgICAgICAgfTsKKworICAgICAgICBUZXh0dXJlKFBhc3NPd25QdHI8TWFuYWdl
ZFRleHR1cmU+IHRleHR1cmUpIDogQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZSh0
ZXh0dXJlKSB7IH0KKworICAgICAgICB2aXJ0dWFsIFBhc3NPd25QdHI8Q0NUZXh0dXJlVXBkYXRl
cjo6VGV4dHVyZVVwZGF0ZT4gY3JlYXRlQ0NUZXh0dXJlVXBkYXRlKCkgeyByZXR1cm4gVGV4dHVy
ZVVwZGF0ZTo6Y3JlYXRlKCk7IH0KIAotICAgIHByaXZhdGU6Ci0gICAgICAgIE93blB0cjxNYW5h
Z2VkVGV4dHVyZT4gbV90ZXh0dXJlOworICAgICAgICB2aXJ0dWFsIHZvaWQgcHVzaFByb3BlcnRp
ZXNUbyhDQ1RleHR1cmVVcGRhdGVyOjpUZXh0dXJlVXBkYXRlKikgeyB9CiAgICAgfTsKIAotICAg
IEZha2VMYXllclRleHR1cmVVcGRhdGVyKCkgeyB9CisgICAgRmFrZUxheWVyVGV4dHVyZVVwZGF0
ZXIoKSA6IENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIoUGFpbnRlcjo6Y3JlYXRlKCkpIHsgfQog
ICAgIHZpcnR1YWwgfkZha2VMYXllclRleHR1cmVVcGRhdGVyKCkgeyB9CiAKLSAgICB2aXJ0dWFs
IFBhc3NPd25QdHI8TGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZT4gY3JlYXRlVGV4dHVyZShU
ZXh0dXJlTWFuYWdlciogbWFuYWdlcikgeyByZXR1cm4gYWRvcHRQdHIobmV3IFRleHR1cmUoTWFu
YWdlZFRleHR1cmU6OmNyZWF0ZShtYW5hZ2VyKSkpOyB9CisgICAgdmlydHVhbCBQYXNzT3duUHRy
PENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU+IGNyZWF0ZVRleHR1cmUoVGV4dHVy
ZU1hbmFnZXIqIG1hbmFnZXIpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBUZXh0dXJlKE1hbmFnZWRU
ZXh0dXJlOjpjcmVhdGUobWFuYWdlcikpKTsgfQogICAgIHZpcnR1YWwgU2FtcGxlZFRleGVsRm9y
bWF0IHNhbXBsZWRUZXhlbEZvcm1hdChHQzNEZW51bSkgeyByZXR1cm4gU2FtcGxlZFRleGVsRm9y
bWF0UkdCQTsgfQogICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzKGNvbnN0IEludFJlY3Qm
LCBjb25zdCBJbnRTaXplJiwgaW50LCBmbG9hdCkgeyB9CiB9OwpAQCAtODEsNyArOTgsNyBAQCBj
bGFzcyBGYWtlVGlsZWRMYXllckNocm9taXVtIDogcHVibGljIFRpbGVkTGF5ZXJDaHJvbWl1bSB7
CiBwdWJsaWM6CiAgICAgZXhwbGljaXQgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bShUZXh0dXJlTWFu
YWdlciogdGV4dHVyZU1hbmFnZXIpCiAgICAgICAgIDogVGlsZWRMYXllckNocm9taXVtKDApCi0g
ICAgICAgICwgbV9mYWtlVGV4dHVyZVVwZGF0ZXIoYWRvcHRSZWYobmV3IEZha2VMYXllclRleHR1
cmVVcGRhdGVyKSkKKyAgICAgICAgLCBtX2Zha2VUZXh0dXJlVXBkYXRlcihhZG9wdFJlZihuZXcg
RmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKSkpCiAgICAgICAgICwgbV90ZXh0dXJlTWFuYWdlcih0
ZXh0dXJlTWFuYWdlcikKICAgICB7CiAgICAgICAgIHNldFRpbGVTaXplKEludFNpemUoMTAwLCAx
MDApKTsKQEAgLTEzMiw3ICsxNDksNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHZpcnR1YWwg
dm9pZCBjcmVhdGVUZXh0dXJlVXBkYXRlcihjb25zdCBDQ0xheWVyVHJlZUhvc3QqKSB7IH0KIAot
ICAgIHZpcnR1YWwgTGF5ZXJUZXh0dXJlVXBkYXRlciogdGV4dHVyZVVwZGF0ZXIoKSBjb25zdAor
ICAgIHZpcnR1YWwgQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlciogdGV4dHVyZVVwZGF0ZXIoKSBj
b25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIG1fZmFrZVRleHR1cmVVcGRhdGVyLmdldCgpOwog
ICAgIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121771</attachid>
            <date>2012-01-09 17:43:44 -0800</date>
            <delta_ts>2012-01-24 08:51:05 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>async-commit.diff</filename>
            <type>text/plain</type>
            <size>126038</size>
            <attacher name="David Reveman">reveman</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Jp
dG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHAK
aW5kZXggOGVhNDFmMi4uYWZlNWEyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQml0bWFwQ2Fu
dmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHAKQEAgLTQ1LDExICs0NSwyNCBAQCBCaXRtYXBDYW52
YXNMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlOjp+VGV4dHVyZSgpCiB7CiB9CiAKLXZvaWQg
Qml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZTo6dXBkYXRlUmVjdChHcmFw
aGljc0NvbnRleHQzRCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3Qg
SW50UmVjdCYgZGVzdFJlY3QpCitQYXNzT3duUHRyPENDVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmVV
cGRhdGU+IEJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU6OmNyZWF0ZUND
VGV4dHVyZVVwZGF0ZSgpCiB7Ci0gICAgQVNTRVJUKHRleHR1cmUoKS0+dGV4dHVyZUlkKCkpOwot
ICAgIGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCB0
ZXh0dXJlKCktPnRleHR1cmVJZCgpKTsKLSAgICB0ZXh0dXJlVXBkYXRlcigpLT51cGRhdGVUZXh0
dXJlUmVjdChjb250ZXh0LCB0ZXh0dXJlKCktPmZvcm1hdCgpLCBzb3VyY2VSZWN0LCBkZXN0UmVj
dCk7CisgICAgcmV0dXJuIENDVGV4dHVyZVVwZGF0ZXI6OlN1YkltYWdlVGV4dHVyZVVwZGF0ZTo6
Y3JlYXRlKCk7Cit9CisKK3ZvaWQgQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4
dHVyZTo6cHVzaFByb3BlcnRpZXNUbyhDQ1RleHR1cmVVcGRhdGVyOjpUZXh0dXJlVXBkYXRlKiB1
cGRhdGUpCit7CisgICAgQ0NUZXh0dXJlVXBkYXRlcjo6U3ViSW1hZ2VUZXh0dXJlVXBkYXRlKiBz
dWJJbWFnZVVwZGF0ZSA9IHN0YXRpY19jYXN0PENDVGV4dHVyZVVwZGF0ZXI6OlN1YkltYWdlVGV4
dHVyZVVwZGF0ZSo+KHVwZGF0ZSk7CisKKyAgICBJbnRSZWN0IGRlc3RSZWN0ID0gdXBkYXRlUmVj
dCgpOworICAgIEludFBvaW50IG9mZnNldCA9IGNvbnRlbnRPZmZzZXQoKTsKKyAgICBJbnRSZWN0
IHNvdXJjZVJlY3QgPSBJbnRSZWN0KEludFBvaW50KGRlc3RSZWN0LngoKSArIG9mZnNldC54KCks
IGRlc3RSZWN0LnkoKSArIG9mZnNldC55KCkpLCBkZXN0UmVjdC5zaXplKCkpOworCisgICAgc3Vi
SW1hZ2VVcGRhdGUtPnNldEZvcm1hdCh0ZXh0dXJlKCktPmZvcm1hdCgpKTsKKyAgICBzdWJJbWFn
ZVVwZGF0ZS0+c2V0VGV4dHVyZUlkKHRleHR1cmUoKS0+dGV4dHVyZUlkKCkpOworICAgIHN1Yklt
YWdlVXBkYXRlLT5zZXRSZWN0KGRlc3RSZWN0KTsKKyAgICBQbGF0Zm9ybUNhbnZhczo6QXV0b0xv
Y2tlciBsb2NrZXIoJnRleHR1cmVVcGRhdGVyKCktPmNhbnZhcygpKTsKKyAgICBzdWJJbWFnZVVw
ZGF0ZS0+c2V0UGl4ZWxEYXRhKGxvY2tlci5waXhlbHMoKSwgdGV4dHVyZVVwZGF0ZXIoKS0+Y29u
dGVudFJlY3QoKSwgc291cmNlUmVjdCk7CiB9CiAKIFBhc3NSZWZQdHI8Qml0bWFwQ2FudmFzTGF5
ZXJUZXh0dXJlVXBkYXRlcj4gQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6Y3JlYXRl
KFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+IHBhaW50ZXIsIGJvb2wgdXNlTWFwVGV4
U3ViSW1hZ2UpCkBAIC01OSw3ICs3Miw2IEBAIFBhc3NSZWZQdHI8Qml0bWFwQ2FudmFzTGF5ZXJU
ZXh0dXJlVXBkYXRlcj4gQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6Y3JlCiAKIEJp
dG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OkJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVw
ZGF0ZXIoUGFzc093blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4gcGFpbnRlciwgYm9vbCB1c2VN
YXBUZXhTdWJJbWFnZSkKICAgICA6IENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIocGFpbnRlcikK
LSAgICAsIG1fdGV4U3ViSW1hZ2UodXNlTWFwVGV4U3ViSW1hZ2UpCiB7CiB9CiAKQEAgLTY3LDcg
Kzc5LDcgQEAgQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6fkJpdG1hcENhbnZhc0xh
eWVyVGV4dHVyZVVwZGF0ZXIoKQogewogfQogCi1QYXNzT3duUHRyPExheWVyVGV4dHVyZVVwZGF0
ZXI6OlRleHR1cmU+IEJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OmNyZWF0ZVRleHR1
cmUoVGV4dHVyZU1hbmFnZXIqIG1hbmFnZXIpCitQYXNzT3duUHRyPENhbnZhc0xheWVyVGV4dHVy
ZVVwZGF0ZXI6OlRleHR1cmU+IEJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OmNyZWF0
ZVRleHR1cmUoVGV4dHVyZU1hbmFnZXIqIG1hbmFnZXIpCiB7CiAgICAgcmV0dXJuIGFkb3B0UHRy
KG5ldyBUZXh0dXJlKHRoaXMsIE1hbmFnZWRUZXh0dXJlOjpjcmVhdGUobWFuYWdlcikpKTsKIH0K
QEAgLTgxLDggKzkzLDYgQEAgTGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2FtcGxlZFRleGVsRm9ybWF0
IEJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OnNhbXBsZWQKIAogdm9pZCBCaXRtYXBD
YW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpwYWludENvbnRlbnRzKGNvbnN0IEludFJlY3QmIGNv
bnRlbnRSZWN0LCBjb25zdCBJbnRTaXplJiB0aWxlU2l6ZSwgaW50IGJvcmRlclRleGVscywgZmxv
YXQgY29udGVudHNTY2FsZSkKIHsKLSAgICBtX3RleFN1YkltYWdlLnNldFN1YkltYWdlU2l6ZSh0
aWxlU2l6ZSk7Ci0KICAgICBtX2NhbnZhcy5yZXNpemUoY29udGVudFJlY3Quc2l6ZSgpKTsKICAg
ICAvLyBBc3N1bXB0aW9uOiBpZiBhIHRpbGVyIGlzIHVzaW5nIGJvcmRlciB0ZXhlbHMsIHRoZW4g
aXQgaXMgYmVjYXVzZSB0aGUKICAgICAvLyBsYXllciBpcyBsaWtlbHkgdG8gYmUgZmlsdGVyZWQg
b3IgdHJhbnNmb3JtZWQuIEJlY2F1c2Ugb2YgaXQgbWlnaHQgYmUKQEAgLTkwLDEzICsxMDAsNyBA
QCB2b2lkIEJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OnBhaW50Q29udGVudHMoY29u
c3QgSW50UmVjdCYgY29udGVudFJlY3QsCiAgICAgUGxhdGZvcm1DYW52YXM6OlBhaW50ZXI6OlRl
eHRPcHRpb24gdGV4dE9wdGlvbiA9CiAgICAgICAgIGJvcmRlclRleGVscyA/IFBsYXRmb3JtQ2Fu
dmFzOjpQYWludGVyOjpHcmF5c2NhbGVUZXh0IDogUGxhdGZvcm1DYW52YXM6OlBhaW50ZXI6OlN1
YnBpeGVsVGV4dDsKICAgICBQbGF0Zm9ybUNhbnZhczo6UGFpbnRlciBjYW52YXNQYWludGVyKCZt
X2NhbnZhcywgdGV4dE9wdGlvbik7Ci0gICAgQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6cGFp
bnRDb250ZW50cygqY2FudmFzUGFpbnRlci5jb250ZXh0KCksIGNvbnRlbnRSZWN0LCBjb250ZW50
c1NjYWxlKTsKLX0KLQotdm9pZCBCaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjp1cGRh
dGVUZXh0dXJlUmVjdChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgdW5zaWduZWQgZm9ybWF0
LCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCkKLXsK
LSAgICBQbGF0Zm9ybUNhbnZhczo6QXV0b0xvY2tlciBsb2NrZXIoJm1fY2FudmFzKTsKLSAgICBt
X3RleFN1YkltYWdlLnVwbG9hZChsb2NrZXIucGl4ZWxzKCksIGNvbnRlbnRSZWN0KCksIHNvdXJj
ZVJlY3QsIGRlc3RSZWN0LCBmb3JtYXQsIGNvbnRleHQpOworICAgIHBhaW50Q2FudmFzQ29udGVu
dHMoKmNhbnZhc1BhaW50ZXIuY29udGV4dCgpLCBjb250ZW50UmVjdCwgY29udGVudHNTY2FsZSk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0JpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0JpdG1hcENh
bnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuaAppbmRleCAxOTM4ODU1Li44NGIzN2ExIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9CaXRtYXBDYW52
YXNMYXllclRleHR1cmVVcGRhdGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5oCkBAIC0zMCw3
ICszMCw2IEBACiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogCiAjaW5jbHVkZSAi
Q2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5oIgotI2luY2x1ZGUgIkxheWVyVGV4dHVyZVN1Yklt
YWdlLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1DYW52YXMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewpAQCAtNDUsNyArNDQsOCBAQCBwdWJsaWM6CiAgICAgICAgIFRleHR1cmUoQml0bWFwQ2FudmFz
TGF5ZXJUZXh0dXJlVXBkYXRlciosIFBhc3NPd25QdHI8TWFuYWdlZFRleHR1cmU+KTsKICAgICAg
ICAgdmlydHVhbCB+VGV4dHVyZSgpOwogCi0gICAgICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVSZWN0
KEdyYXBoaWNzQ29udGV4dDNEKiwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50
UmVjdCYgZGVzdFJlY3QpOworICAgICAgICB2aXJ0dWFsIFBhc3NPd25QdHI8Q0NUZXh0dXJlVXBk
YXRlcjo6VGV4dHVyZVVwZGF0ZT4gY3JlYXRlQ0NUZXh0dXJlVXBkYXRlKCk7CisgICAgICAgIHZp
cnR1YWwgdm9pZCBwdXNoUHJvcGVydGllc1RvKENDVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmVVcGRh
dGUqKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIEJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVw
ZGF0ZXIqIHRleHR1cmVVcGRhdGVyKCkgeyByZXR1cm4gbV90ZXh0dXJlVXBkYXRlcjsgfQpAQCAt
NTYsMTYgKzU2LDE1IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxCaXRtYXBDYW52
YXNMYXllclRleHR1cmVVcGRhdGVyPiBjcmVhdGUoUGFzc093blB0cjxMYXllclBhaW50ZXJDaHJv
bWl1bT4sIGJvb2wgdXNlTWFwVGV4U3ViSW1hZ2UpOwogICAgIHZpcnR1YWwgfkJpdG1hcENhbnZh
c0xheWVyVGV4dHVyZVVwZGF0ZXIoKTsKIAotICAgIHZpcnR1YWwgUGFzc093blB0cjxMYXllclRl
eHR1cmVVcGRhdGVyOjpUZXh0dXJlPiBjcmVhdGVUZXh0dXJlKFRleHR1cmVNYW5hZ2VyKik7Cisg
ICAgdmlydHVhbCBQYXNzT3duUHRyPENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU+
IGNyZWF0ZVRleHR1cmUoVGV4dHVyZU1hbmFnZXIqKTsKICAgICB2aXJ0dWFsIFNhbXBsZWRUZXhl
bEZvcm1hdCBzYW1wbGVkVGV4ZWxGb3JtYXQoR0MzRGVudW0gdGV4dHVyZUZvcm1hdCk7CiAgICAg
dmlydHVhbCB2b2lkIHBhaW50Q29udGVudHMoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNv
bnN0IEludFNpemUmIHRpbGVTaXplLCBpbnQgYm9yZGVyVGV4ZWxzLCBmbG9hdCBjb250ZW50c1Nj
YWxlKTsKLSAgICB2b2lkIHVwZGF0ZVRleHR1cmVSZWN0KEdyYXBoaWNzQ29udGV4dDNEKiwgdW5z
aWduZWQgZm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBk
ZXN0UmVjdCk7CisgICAgUGxhdGZvcm1DYW52YXMmIGNhbnZhcygpIHsgcmV0dXJuIG1fY2FudmFz
OyB9CiAKIHByaXZhdGU6CiAgICAgQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcihQYXNz
T3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPiwgYm9vbCB1c2VNYXBUZXhTdWJJbWFnZSk7CiAK
ICAgICBQbGF0Zm9ybUNhbnZhcyBtX2NhbnZhczsKLSAgICBMYXllclRleHR1cmVTdWJJbWFnZSBt
X3RleFN1YkltYWdlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQml0bWFwU2tQaWN0dXJl
Q2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9CaXRtYXBTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVy
LmNwcAppbmRleCBkZjAwZTRhLi5lNWFiNWZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9CaXRtYXBTa1BpY3R1cmVDYW52YXNMYXllclRleHR1
cmVVcGRhdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9CaXRtYXBTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmNwcApAQCAtMzEs
NiArMzEsNyBAQAogCiAjaW5jbHVkZSAiQml0bWFwU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJl
VXBkYXRlci5oIgogCisjaW5jbHVkZSAiRXh0ZW5zaW9uczNEQ2hyb21pdW0uaCIKICNpbmNsdWRl
ICJMYXllclBhaW50ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIlNrQ2FudmFzLmgiCiAjaW5jbHVk
ZSAic2tpYS9leHQvcGxhdGZvcm1fY2FudmFzLmgiCkBAIC00MCwyNCArNDEsNTkgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogQml0bWFwU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6
VGV4dHVyZTo6VGV4dHVyZShCaXRtYXBTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVy
KiB0ZXh0dXJlVXBkYXRlciwgUGFzc093blB0cjxNYW5hZ2VkVGV4dHVyZT4gdGV4dHVyZSkKICAg
ICA6IENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmUodGV4dHVyZSkKICAgICAsIG1f
dGV4dHVyZVVwZGF0ZXIodGV4dHVyZVVwZGF0ZXIpCisgICAgLCBtX21hcHBlZEJ1ZmZlcigwKQog
ewogfQogCi12b2lkIEJpdG1hcFNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OlRl
eHR1cmU6OnBhaW50Q29udGVudHNSZWN0KGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QpCitib29s
IEJpdG1hcFNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU6Om5lZWRQ
cmVwYXJlKCkKIHsKLSAgICBzaXplX3QgYnVmZmVyU2l6ZSA9IFRleHR1cmVNYW5hZ2VyOjptZW1v
cnlVc2VCeXRlcyhzb3VyY2VSZWN0LnNpemUoKSwgdGV4dHVyZSgpLT5mb3JtYXQoKSk7Ci0gICAg
bV9waXhlbERhdGEgPSBhZG9wdEFycmF5UHRyKG5ldyB1aW50OF90W2J1ZmZlclNpemVdKTsKLSAg
ICBPd25QdHI8U2tDYW52YXM+IGNhbnZhcyA9IGFkb3B0UHRyKG5ldyBza2lhOjpQbGF0Zm9ybUNh
bnZhcyhzb3VyY2VSZWN0LndpZHRoKCksIHNvdXJjZVJlY3QuaGVpZ2h0KCksIGZhbHNlLCBtX3Bp
eGVsRGF0YS5nZXQoKSkpOwotICAgIHRleHR1cmVVcGRhdGVyKCktPnBhaW50Q29udGVudHNSZWN0
KGNhbnZhcy5nZXQoKSwgc291cmNlUmVjdCk7CisgICAgaWYgKHRleHR1cmVVcGRhdGVyKCktPnVz
ZU1hcFRleFN1YkltYWdlKCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJuICF0
ZXh0dXJlKCktPnRleHR1cmVJZCgpOworfQorCit2b2lkIEJpdG1hcFNrUGljdHVyZUNhbnZhc0xh
eWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU6OnByZXBhcmUoR3JhcGhpY3NDb250ZXh0M0QqIGNv
bnRleHQsIFRleHR1cmVBbGxvY2F0b3IqIGFsbG9jYXRvcikKK3sKKyAgICBBU1NFUlQoIW1fbWFw
cGVkQnVmZmVyKTsKKyAgICBBU1NFUlQoIXVwZGF0ZVJlY3QoKS5pc0VtcHR5KCkpOworCisgICAg
aWYgKHRleHR1cmVVcGRhdGVyKCktPnVzZU1hcFRleFN1YkltYWdlKCkpIHsKKyAgICAgICAgRXh0
ZW5zaW9uczNEQ2hyb21pdW0qIGV4dGVuc2lvbnMgPSBzdGF0aWNfY2FzdDxFeHRlbnNpb25zM0RD
aHJvbWl1bSo+KGNvbnRleHQtPmdldEV4dGVuc2lvbnMoKSk7CisgICAgICAgIG1fbWFwcGVkQnVm
ZmVyID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KGV4dGVuc2lvbnMtPm1hcFRleFN1YkltYWdlMkRD
SFJPTUlVTShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgdXBkYXRlUmVjdCgpLngo
KSwgdXBkYXRlUmVjdCgpLnkoKSwgdXBkYXRlUmVjdCgpLndpZHRoKCksIHVwZGF0ZVJlY3QoKS5o
ZWlnaHQoKSwgdGV4dHVyZSgpLT5mb3JtYXQoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVE
X0JZVEUsIEV4dGVuc2lvbnMzRENocm9taXVtOjpXUklURV9PTkxZKSk7CisgICAgfQorCisgICAg
dGV4dHVyZSgpLT5hbGxvY2F0ZShhbGxvY2F0b3IpOwogfQogCi12b2lkIEJpdG1hcFNrUGljdHVy
ZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU6OnVwZGF0ZVJlY3QoR3JhcGhpY3ND
b250ZXh0M0QqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJl
Y3QmIGRlc3RSZWN0KQorUGFzc093blB0cjxDQ1RleHR1cmVVcGRhdGVyOjpUZXh0dXJlVXBkYXRl
PiBCaXRtYXBTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlOjpjcmVh
dGVDQ1RleHR1cmVVcGRhdGUoKQogewotICAgIEFTU0VSVCh0ZXh0dXJlKCktPnRleHR1cmVJZCgp
KTsKLSAgICBjb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8y
RCwgdGV4dHVyZSgpLT50ZXh0dXJlSWQoKSk7Ci0gICAgQVNTRVJUKG1fcGl4ZWxEYXRhLmdldCgp
KTsKLSAgICB0ZXh0dXJlVXBkYXRlcigpLT51cGRhdGVUZXh0dXJlUmVjdChjb250ZXh0LCB0ZXh0
dXJlKCktPmZvcm1hdCgpLCBkZXN0UmVjdCwgbV9waXhlbERhdGEuZ2V0KCkpOwotICAgIG1fcGl4
ZWxEYXRhLmNsZWFyKCk7CisgICAgcmV0dXJuIENDVGV4dHVyZVVwZGF0ZXI6OlN1YkltYWdlVGV4
dHVyZVVwZGF0ZTo6Y3JlYXRlKCk7Cit9CisKK3ZvaWQgQml0bWFwU2tQaWN0dXJlQ2FudmFzTGF5
ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZTo6cHVzaFByb3BlcnRpZXNUbyhDQ1RleHR1cmVVcGRh
dGVyOjpUZXh0dXJlVXBkYXRlKiB1cGRhdGUpCit7CisgICAgQ0NUZXh0dXJlVXBkYXRlcjo6U3Vi
SW1hZ2VUZXh0dXJlVXBkYXRlKiBzdWJJbWFnZVVwZGF0ZSA9IHN0YXRpY19jYXN0PENDVGV4dHVy
ZVVwZGF0ZXI6OlN1YkltYWdlVGV4dHVyZVVwZGF0ZSo+KHVwZGF0ZSk7CisKKyAgICBJbnRSZWN0
IGRlc3RSZWN0ID0gdXBkYXRlUmVjdCgpOworICAgIEludFJlY3Qgc291cmNlUmVjdCA9IEludFJl
Y3QoSW50UG9pbnQoZGVzdFJlY3QueCgpICsgY29udGVudE9mZnNldCgpLngoKSwgZGVzdFJlY3Qu
eSgpICsgY29udGVudE9mZnNldCgpLnkoKSksIGRlc3RSZWN0LnNpemUoKSk7CisKKyAgICBzdWJJ
bWFnZVVwZGF0ZS0+c2V0Rm9ybWF0KHRleHR1cmUoKS0+Zm9ybWF0KCkpOworICAgIHN1YkltYWdl
VXBkYXRlLT5zZXRUZXh0dXJlSWQodGV4dHVyZSgpLT50ZXh0dXJlSWQoKSk7CisgICAgc3ViSW1h
Z2VVcGRhdGUtPnNldFJlY3QoZGVzdFJlY3QpOworCisgICAgaWYgKG1fbWFwcGVkQnVmZmVyKSB7
CisgICAgICAgIE93blB0cjxTa0NhbnZhcz4gY2FudmFzID0gYWRvcHRQdHIobmV3IHNraWE6OlBs
YXRmb3JtQ2FudmFzKGRlc3RSZWN0LndpZHRoKCksIGRlc3RSZWN0LmhlaWdodCgpLCBmYWxzZSwg
bV9tYXBwZWRCdWZmZXIpKTsKKyAgICAgICAgdGV4dHVyZVVwZGF0ZXIoKS0+cGFpbnRDb250ZW50
c1JlY3QoY2FudmFzLmdldCgpLCBzb3VyY2VSZWN0KTsKKyAgICAgICAgc3ViSW1hZ2VVcGRhdGUt
PnNldE1hcHBlZEJ1ZmZlcihtX21hcHBlZEJ1ZmZlcik7CisgICAgICAgIG1fbWFwcGVkQnVmZmVy
ID0gMDsKKyAgICB9IGVsc2UgeworICAgICAgICBzaXplX3QgYnVmZmVyU2l6ZSA9IFRleHR1cmVN
YW5hZ2VyOjptZW1vcnlVc2VCeXRlcyhkZXN0UmVjdC5zaXplKCksIHRleHR1cmUoKS0+Zm9ybWF0
KCkpOworICAgICAgICBPd25BcnJheVB0cjx1aW50OF90PiBwaXhlbERhdGEgPSBhZG9wdEFycmF5
UHRyKG5ldyB1aW50OF90W2J1ZmZlclNpemVdKTsKKyAgICAgICAgT3duUHRyPFNrQ2FudmFzPiBj
YW52YXMgPSBhZG9wdFB0cihuZXcgc2tpYTo6UGxhdGZvcm1DYW52YXMoZGVzdFJlY3Qud2lkdGgo
KSwgZGVzdFJlY3QuaGVpZ2h0KCksIGZhbHNlLCBwaXhlbERhdGEuZ2V0KCkpKTsKKyAgICAgICAg
dGV4dHVyZVVwZGF0ZXIoKS0+cGFpbnRDb250ZW50c1JlY3QoY2FudmFzLmdldCgpLCBzb3VyY2VS
ZWN0KTsKKyAgICAgICAgc3ViSW1hZ2VVcGRhdGUtPnNldFBpeGVsRGF0YShwaXhlbERhdGEucmVs
ZWFzZSgpKTsKKyAgICB9CiB9CiAKIFBhc3NSZWZQdHI8Qml0bWFwU2tQaWN0dXJlQ2FudmFzTGF5
ZXJUZXh0dXJlVXBkYXRlcj4gQml0bWFwU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRl
cjo6Y3JlYXRlKFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+IHBhaW50ZXIsIGJvb2wg
dXNlTWFwVGV4U3ViSW1hZ2UpCkBAIC02Nyw3ICsxMDMsNyBAQCBQYXNzUmVmUHRyPEJpdG1hcFNr
UGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI+IEJpdG1hcFNrUGljdHVyZUNhbnZhc0xh
eWVyVAogCiBCaXRtYXBTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpCaXRtYXBT
a1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyKFBhc3NPd25QdHI8TGF5ZXJQYWludGVy
Q2hyb21pdW0+IHBhaW50ZXIsIGJvb2wgdXNlTWFwVGV4U3ViSW1hZ2UpCiAgICAgOiBTa1BpY3R1
cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyKHBhaW50ZXIpCi0gICAgLCBtX3RleFN1YkltYWdl
KHVzZU1hcFRleFN1YkltYWdlKQorICAgICwgbV91c2VNYXBUZXhTdWJJbWFnZSh1c2VNYXBUZXhT
dWJJbWFnZSkKIHsKIH0KIApAQCAtNzUsNyArMTExLDcgQEAgQml0bWFwU2tQaWN0dXJlQ2FudmFz
TGF5ZXJUZXh0dXJlVXBkYXRlcjo6fkJpdG1hcFNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVw
ZGEKIHsKIH0KIAotUGFzc093blB0cjxMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlPiBCaXRt
YXBTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpjcmVhdGVUZXh0dXJlKFRleHR1
cmVNYW5hZ2VyKiBtYW5hZ2VyKQorUGFzc093blB0cjxDYW52YXNMYXllclRleHR1cmVVcGRhdGVy
OjpUZXh0dXJlPiBCaXRtYXBTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpjcmVh
dGVUZXh0dXJlKFRleHR1cmVNYW5hZ2VyKiBtYW5hZ2VyKQogewogICAgIHJldHVybiBhZG9wdFB0
cihuZXcgVGV4dHVyZSh0aGlzLCBNYW5hZ2VkVGV4dHVyZTo6Y3JlYXRlKG1hbmFnZXIpKSk7CiB9
CkBAIC04OSw3ICsxMjUsNiBAQCBMYXllclRleHR1cmVVcGRhdGVyOjpTYW1wbGVkVGV4ZWxGb3Jt
YXQgQml0bWFwU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcgogCiB2b2lkIEJpdG1h
cFNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OnBhaW50Q29udGVudHMoY29uc3Qg
SW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IEludFNpemUmIHRpbGVTaXplLCBpbnQgYm9yZGVy
VGV4ZWxzLCBmbG9hdCBjb250ZW50c1NjYWxlKQogewotICAgIG1fdGV4U3ViSW1hZ2Uuc2V0U3Vi
SW1hZ2VTaXplKHRpbGVTaXplKTsKICAgICBTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRh
dGVyOjpwYWludENvbnRlbnRzKGNvbnRlbnRSZWN0LCB0aWxlU2l6ZSwgYm9yZGVyVGV4ZWxzLCBj
b250ZW50c1NjYWxlKTsKIH0KIApAQCAtMTAxLDExICsxMzYsNiBAQCB2b2lkIEJpdG1hcFNrUGlj
dHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OnBhaW50Q29udGVudHNSZWN0KFNrQ2FudmFz
KiBjYW52YQogICAgIGRyYXdQaWN0dXJlKGNhbnZhcyk7CiB9CiAKLXZvaWQgQml0bWFwU2tQaWN0
dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6dXBkYXRlVGV4dHVyZVJlY3QoR3JhcGhpY3ND
b250ZXh0M0QqIGNvbnRleHQsIEdDM0RlbnVtIGZvcm1hdCwgY29uc3QgSW50UmVjdCYgZGVzdFJl
Y3QsIGNvbnN0IHVpbnQ4X3QqIHBpeGVscykKLXsKLSAgICBtX3RleFN1YkltYWdlLnVwbG9hZChw
aXhlbHMsIGRlc3RSZWN0LCBkZXN0UmVjdCwgZGVzdFJlY3QsIGZvcm1hdCwgY29udGV4dCk7Ci19
Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKICNlbmRpZiAvLyBVU0UoU0tJQSkKICNlbmRpZiAv
LyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9CaXRtYXBTa1BpY3R1cmVDYW52YXNMYXllclRl
eHR1cmVVcGRhdGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9CaXRtYXBTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmgKaW5kZXggNTYxYTgy
OS4uMGVhZDE2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vQml0bWFwU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0JpdG1hcFNrUGljdHVy
ZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuaApAQCAtNDIsMjkgKzQyLDM0IEBAIHB1YmxpYzoK
ICAgICBwdWJsaWM6CiAgICAgICAgIFRleHR1cmUoQml0bWFwU2tQaWN0dXJlQ2FudmFzTGF5ZXJU
ZXh0dXJlVXBkYXRlciosIFBhc3NPd25QdHI8TWFuYWdlZFRleHR1cmU+KTsKIAotICAgICAgICB2
aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50c1JlY3QoY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCk7
Ci0gICAgICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVSZWN0KEdyYXBoaWNzQ29udGV4dDNEKiwgY29u
c3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpOworICAgICAg
ICB2aXJ0dWFsIGJvb2wgbmVlZFByZXBhcmUoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHByZXBh
cmUoR3JhcGhpY3NDb250ZXh0M0QqLCBUZXh0dXJlQWxsb2NhdG9yKik7CisKKyAgICAgICAgdmly
dHVhbCBQYXNzT3duUHRyPENDVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmVVcGRhdGU+IGNyZWF0ZUND
VGV4dHVyZVVwZGF0ZSgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcHVzaFByb3BlcnRpZXNUbyhD
Q1RleHR1cmVVcGRhdGVyOjpUZXh0dXJlVXBkYXRlKik7CiAKICAgICBwcml2YXRlOgogICAgICAg
ICBCaXRtYXBTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyKiB0ZXh0dXJlVXBkYXRl
cigpIHsgcmV0dXJuIG1fdGV4dHVyZVVwZGF0ZXI7IH0KIAotICAgICAgICBPd25BcnJheVB0cjx1
aW50OF90PiBtX3BpeGVsRGF0YTsKICAgICAgICAgQml0bWFwU2tQaWN0dXJlQ2FudmFzTGF5ZXJU
ZXh0dXJlVXBkYXRlciogbV90ZXh0dXJlVXBkYXRlcjsKKyAgICAgICAgT3duQXJyYXlQdHI8dWlu
dDhfdD4gbV9waXhlbERhdGE7CisgICAgICAgIHVpbnQ4X3QqIG1fbWFwcGVkQnVmZmVyOwogICAg
IH07CiAKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxCaXRtYXBTa1BpY3R1cmVDYW52YXNMYXllclRl
eHR1cmVVcGRhdGVyPiBjcmVhdGUoUGFzc093blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4sIGJv
b2wgdXNlTWFwVGV4U3ViSW1hZ2UpOwogICAgIHZpcnR1YWwgfkJpdG1hcFNrUGljdHVyZUNhbnZh
c0xheWVyVGV4dHVyZVVwZGF0ZXIoKTsKIAotICAgIHZpcnR1YWwgUGFzc093blB0cjxMYXllclRl
eHR1cmVVcGRhdGVyOjpUZXh0dXJlPiBjcmVhdGVUZXh0dXJlKFRleHR1cmVNYW5hZ2VyKik7Cisg
ICAgdmlydHVhbCBQYXNzT3duUHRyPENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU+
IGNyZWF0ZVRleHR1cmUoVGV4dHVyZU1hbmFnZXIqKTsKICAgICB2aXJ0dWFsIFNhbXBsZWRUZXhl
bEZvcm1hdCBzYW1wbGVkVGV4ZWxGb3JtYXQoR0MzRGVudW0gdGV4dHVyZUZvcm1hdCk7CiAgICAg
dmlydHVhbCB2b2lkIHBhaW50Q29udGVudHMoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNv
bnN0IEludFNpemUmIHRpbGVTaXplLCBpbnQgYm9yZGVyVGV4ZWxzLCBmbG9hdCBjb250ZW50c1Nj
YWxlKTsKICAgICB2b2lkIHBhaW50Q29udGVudHNSZWN0KFNrQ2FudmFzKiwgY29uc3QgSW50UmVj
dCYgc291cmNlUmVjdCk7CiAgICAgdm9pZCB1cGRhdGVUZXh0dXJlUmVjdChHcmFwaGljc0NvbnRl
eHQzRCosIEdDM0RlbnVtIGZvcm1hdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QsIGNvbnN0IHVp
bnQ4X3QqIHBpeGVscyk7CisgICAgYm9vbCB1c2VNYXBUZXhTdWJJbWFnZSgpIHsgcmV0dXJuIG1f
dXNlTWFwVGV4U3ViSW1hZ2U7IH0KIAogcHJpdmF0ZToKICAgICBCaXRtYXBTa1BpY3R1cmVDYW52
YXNMYXllclRleHR1cmVVcGRhdGVyKFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+LCBi
b29sIHVzZU1hcFRleFN1YkltYWdlKTsKIAotICAgIExheWVyVGV4dHVyZVN1YkltYWdlIG1fdGV4
U3ViSW1hZ2U7CisgICAgYm9vbCBtX3VzZU1hcFRleFN1YkltYWdlOwogfTsKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKICNlbmRpZiAvLyBVU0UoU0tJQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVy
Q2hyb21pdW0uY3BwCmluZGV4IDNlMDU4ODEuLjJlOGM0NDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFz
MkRMYXllckNocm9taXVtLmNwcApAQCAtNTYsMTggKzU2LDE0IEBAIENhbnZhczJETGF5ZXJDaHJv
bWl1bTo6VXBkYXRlclRleHR1cmU6On5VcGRhdGVyVGV4dHVyZSgpCiB7CiB9CiAKLWJvb2wgQ2Fu
dmFzMkRMYXllckNocm9taXVtOjpVcGRhdGVyVGV4dHVyZTo6bmVlZFByZXBhcmVSZWN0KCkKK2Jv
b2wgQ2FudmFzMkRMYXllckNocm9taXVtOjpVcGRhdGVyVGV4dHVyZTo6bmVlZFByZXBhcmUoKQog
ewogICAgIHJldHVybiAhbV90ZXh0dXJlLT50ZXh0dXJlSWQoKTsKIH0KIAotdm9pZCBDYW52YXMy
RExheWVyQ2hyb21pdW06OlVwZGF0ZXJUZXh0dXJlOjpwcmVwYXJlUmVjdChHcmFwaGljc0NvbnRl
eHQzRCosIFRleHR1cmVBbGxvY2F0b3IqIGFsbG9jYXRvciwgY29uc3QgSW50UmVjdCYgLyogc291
cmNlUmVjdCAqLywgY29uc3QgSW50UmVjdCYgLyogZGVzdFJlY3QgKi8pCit2b2lkIENhbnZhczJE
TGF5ZXJDaHJvbWl1bTo6VXBkYXRlclRleHR1cmU6OnByZXBhcmUoR3JhcGhpY3NDb250ZXh0M0Qq
IGNvbnRleHQsIFRleHR1cmVBbGxvY2F0b3IqIGFsbG9jYXRvcikKIHsKICAgICBtX3RleHR1cmUt
PmFsbG9jYXRlKGFsbG9jYXRvcik7Ci19Ci0KLXZvaWQgQ2FudmFzMkRMYXllckNocm9taXVtOjpV
cGRhdGVyVGV4dHVyZTo6dXBkYXRlUmVjdChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgY29u
c3QgSW50UmVjdCYgLyogc291cmNlUmVjdCAqLywgY29uc3QgSW50UmVjdCYgLyogZGVzdFJlY3Qg
Ki8pCi17CiAgICAgbV9sYXllci0+dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhjb250ZXh0KTsK
IH0KIApAQCAtMTcyLDcgKzE2OCw3IEBAIHZvaWQgQ2FudmFzMkRMYXllckNocm9taXVtOjpmb3JF
YWNoQ29tcG9zaXRvclJlc291cmNlKExheWVyVGV4dHVyZVVwZGF0ZXI6OkhhbmRsCiAgICAgaWYg
KCFtX2JhY2tUZXh0dXJlSWQgfHwgIW1fdXBkYXRlclRleHR1cmUgfHwgIW1fdXBkYXRlclRleHR1
cmUtPnRleHR1cmUoKS0+aXNWYWxpZChtX3NpemUsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgaGFuZGxlci5oYW5kbGUobV91cGRhdGVyVGV4dHVyZS5n
ZXQoKSwgSW50UmVjdCgpLCBJbnRSZWN0KCkpOworICAgIGhhbmRsZXIuaGFuZGxlKG1fdXBkYXRl
clRleHR1cmUuZ2V0KCkpOwogfQogCiB2b2lkIENhbnZhczJETGF5ZXJDaHJvbWl1bTo6dW5yZXNl
cnZlQ29udGVudHNUZXh0dXJlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmgKaW5k
ZXggZDM4Zjg1MS4uNDEwNjM2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmgK
QEAgLTU1LDkgKzU1LDggQEAgcHVibGljOgogCiAgICAgICAgIHZpcnR1YWwgTWFuYWdlZFRleHR1
cmUqIHRleHR1cmUoKSB7IHJldHVybiBtX3RleHR1cmUuZ2V0KCk7IH0KIAotICAgICAgICB2aXJ0
dWFsIGJvb2wgbmVlZFByZXBhcmVSZWN0KCk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJl
UmVjdChHcmFwaGljc0NvbnRleHQzRCosIFRleHR1cmVBbGxvY2F0b3IqLCBjb25zdCBJbnRSZWN0
JiAvKiBzb3VyY2VSZWN0ICovLCBjb25zdCBJbnRSZWN0JiAvKiBkZXN0UmVjdCAqLyk7Ci0gICAg
ICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVSZWN0KEdyYXBoaWNzQ29udGV4dDNEKiwgY29uc3QgSW50
UmVjdCYgLyogc291cmNlUmVjdCAqLywgY29uc3QgSW50UmVjdCYgLyogZGVzdFJlY3QgKi8pOwor
ICAgICAgICB2aXJ0dWFsIGJvb2wgbmVlZFByZXBhcmUoKTsKKyAgICAgICAgdmlydHVhbCB2b2lk
IHByZXBhcmUoR3JhcGhpY3NDb250ZXh0M0QqLCBUZXh0dXJlQWxsb2NhdG9yKik7CiAKICAgICBw
cml2YXRlOgogICAgICAgICBleHBsaWNpdCBVcGRhdGVyVGV4dHVyZShDYW52YXMyRExheWVyQ2hy
b21pdW0qLCBQYXNzT3duUHRyPE1hbmFnZWRUZXh0dXJlPik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllclRleHR1cmVVcGRh
dGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZh
c0xheWVyVGV4dHVyZVVwZGF0ZXIuY3BwCmluZGV4IDk0MjFkNzMuLjI5OTg2OWYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVy
VGV4dHVyZVVwZGF0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0NhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuY3BwCkBAIC00NCwxMiArNDQsMTIg
QEAgQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZTo6flRleHR1cmUoKQogewogfQog
Ci1ib29sIENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU6Om5lZWRQcmVwYXJlUmVj
dCgpCitib29sIENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU6Om5lZWRQcmVwYXJl
KCkKIHsKICAgICByZXR1cm4gIW1fdGV4dHVyZS0+dGV4dHVyZUlkKCk7CiB9CiAKLXZvaWQgQ2Fu
dmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZTo6cHJlcGFyZVJlY3QoR3JhcGhpY3NDb250
ZXh0M0QqLCBUZXh0dXJlQWxsb2NhdG9yKiBhbGxvY2F0b3IsIGNvbnN0IEludFJlY3QmIC8qIHNv
dXJjZVJlY3QgKi8sIGNvbnN0IEludFJlY3QmIC8qIGRlc3RSZWN0ICovKQordm9pZCBDYW52YXNM
YXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlOjpwcmVwYXJlKEdyYXBoaWNzQ29udGV4dDNEKiBj
b250ZXh0LCBUZXh0dXJlQWxsb2NhdG9yKiBhbGxvY2F0b3IpCiB7CiAgICAgbV90ZXh0dXJlLT5h
bGxvY2F0ZShhbGxvY2F0b3IpOwogfQpAQCAtNjMsMTEgKzYzLDExIEBAIENhbnZhc0xheWVyVGV4
dHVyZVVwZGF0ZXI6On5DYW52YXNMYXllclRleHR1cmVVcGRhdGVyKCkKIHsKIH0KIAotdm9pZCBD
YW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpwYWludENvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGZsb2F0IGNvbnRlbnRzU2NhbGUp
Cit2b2lkIENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OnBhaW50Q2FudmFzQ29udGVudHMoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgZmxvYXQg
Y29udGVudHNTY2FsZSkKIHsKICAgICBjb250ZXh0LnRyYW5zbGF0ZSgtY29udGVudFJlY3QueCgp
LCAtY29udGVudFJlY3QueSgpKTsKICAgICB7Ci0gICAgICAgIFRSQUNFX0VWRU5UKCJMYXllclRl
eHR1cmVVcGRhdGVyQ2FudmFzOjpwYWludCIsIHRoaXMsIDApOworICAgICAgICBUUkFDRV9FVkVO
VCgiTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhczo6cGFpbnRDYW52YXNDb250ZW50IiwgdGhpcywg
MCk7CiAKICAgICAgICAgSW50UmVjdCBzY2FsZWRDb250ZW50UmVjdCA9IGNvbnRlbnRSZWN0Owog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9D
YW52YXNMYXllclRleHR1cmVVcGRhdGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9DYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmgKaW5kZXggZWIzNjI2MS4u
YTVmODIzNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuaApAQCAt
NDUsMjIgKzQ1LDMyIEBAIHB1YmxpYzoKIAogICAgICAgICB2aXJ0dWFsIE1hbmFnZWRUZXh0dXJl
KiB0ZXh0dXJlKCkgeyByZXR1cm4gbV90ZXh0dXJlLmdldCgpOyB9CiAKLSAgICAgICAgdmlydHVh
bCBib29sIG5lZWRQcmVwYXJlUmVjdCgpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZVJl
Y3QoR3JhcGhpY3NDb250ZXh0M0QqLCBUZXh0dXJlQWxsb2NhdG9yKiwgY29uc3QgSW50UmVjdCYg
Lyogc291cmNlUmVjdCAqLywgY29uc3QgSW50UmVjdCYgLyogZGVzdFJlY3QgKi8pOworICAgICAg
ICB2aXJ0dWFsIGJvb2wgbmVlZFByZXBhcmUoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHByZXBh
cmUoR3JhcGhpY3NDb250ZXh0M0QqLCBUZXh0dXJlQWxsb2NhdG9yKik7CisKKyAgICAgICAgdmly
dHVhbCB2b2lkIHNldFVwZGF0ZVJlY3QoY29uc3QgSW50UmVjdCYgdXBkYXRlUmVjdCkgeyBtX3Vw
ZGF0ZVJlY3QgPSB1cGRhdGVSZWN0OyB9CisgICAgICAgIHZpcnR1YWwgSW50UmVjdCB1cGRhdGVS
ZWN0KCkgY29uc3QgeyByZXR1cm4gbV91cGRhdGVSZWN0OyB9CisKKyAgICAgICAgdmlydHVhbCB2
b2lkIHNldENvbnRlbnRPZmZzZXQoY29uc3QgSW50UG9pbnQmIGNvbnRlbnRPZmZzZXQpIHsgbV9j
b250ZW50T2Zmc2V0ID0gY29udGVudE9mZnNldDsgfQorICAgICAgICB2aXJ0dWFsIEludFBvaW50
IGNvbnRlbnRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRPZmZzZXQ7IH0KIAogICAg
IHByb3RlY3RlZDoKICAgICAgICAgZXhwbGljaXQgVGV4dHVyZShQYXNzT3duUHRyPE1hbmFnZWRU
ZXh0dXJlPik7CiAKICAgICBwcml2YXRlOgogICAgICAgICBPd25QdHI8TWFuYWdlZFRleHR1cmU+
IG1fdGV4dHVyZTsKKyAgICAgICAgSW50UmVjdCBtX3VwZGF0ZVJlY3Q7CisgICAgICAgIEludFBv
aW50IG1fY29udGVudE9mZnNldDsKICAgICB9OwogCiAgICAgdmlydHVhbCB+Q2FudmFzTGF5ZXJU
ZXh0dXJlVXBkYXRlcigpOwogCisgICAgdmlydHVhbCBQYXNzT3duUHRyPFRleHR1cmU+IGNyZWF0
ZVRleHR1cmUoVGV4dHVyZU1hbmFnZXIqKSA9IDA7CisKIHByb3RlY3RlZDoKICAgICBleHBsaWNp
dCBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyKFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21p
dW0+KTsKIAotICAgIHZvaWQgcGFpbnRDb250ZW50cyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBJ
bnRSZWN0JiBjb250ZW50UmVjdCwgZmxvYXQgY29udGVudHNTY2FsZSk7CisgICAgdm9pZCBwYWlu
dENhbnZhc0NvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRS
ZWN0LCBmbG9hdCBjb250ZW50c1NjYWxlKTsKICAgICBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVj
dCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudFJlY3Q7IH0KIAogcHJpdmF0ZToKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXll
ckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9D
b250ZW50TGF5ZXJDaHJvbWl1bS5oCmluZGV4IGNjZDUzZGEuLmY3MmE0NGQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNo
cm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Q29udGVudExheWVyQ2hyb21pdW0uaApAQCAtNTcsOSArNTcsOSBAQCBwcm90ZWN0ZWQ6CiAKIHBy
aXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRleHR1cmVVcGRhdGVyKGNvbnN0IENDTGF5
ZXJUcmVlSG9zdCopOwotICAgIHZpcnR1YWwgTGF5ZXJUZXh0dXJlVXBkYXRlciogdGV4dHVyZVVw
ZGF0ZXIoKSBjb25zdCB7IHJldHVybiBtX3RleHR1cmVVcGRhdGVyLmdldCgpOyB9CisgICAgdmly
dHVhbCBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyKiB0ZXh0dXJlVXBkYXRlcigpIGNvbnN0IHsg
cmV0dXJuIG1fdGV4dHVyZVVwZGF0ZXIuZ2V0KCk7IH0KIAotICAgIFJlZlB0cjxMYXllclRleHR1
cmVVcGRhdGVyPiBtX3RleHR1cmVVcGRhdGVyOworICAgIFJlZlB0cjxDYW52YXNMYXllclRleHR1
cmVVcGRhdGVyPiBtX3RleHR1cmVVcGRhdGVyOwogfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgTGF5
ZXJUeXBlPiBjbGFzcyBTZXJpYWxpemFibGVDb250ZW50TGF5ZXJDaHJvbWl1bSA6IHB1YmxpYyBD
b250ZW50TGF5ZXJDaHJvbWl1bSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9EcmF3aW5nQnVmZmVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRHJhd2luZ0J1ZmZlckNocm9taXVtLmNw
cAppbmRleCBjMDZiZTY2Li41NGE1MTdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9EcmF3aW5nQnVmZmVyQ2hyb21pdW0uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0RyYXdpbmdCdWZmZXJDaHJv
bWl1bS5jcHAKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5o
IgogI2luY2x1ZGUgIldlYkdMTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgImNjL0NDQ2FudmFz
TGF5ZXJJbXBsLmgiCisjaW5jbHVkZSAiY2MvQ0NQcm94eS5oIgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKQEAgLTE0NCw3ICsxNDUsMTAgQEAgdm9pZCBEcmF3aW5nQnVmZmVyOjpwdWJsaXNoVG9Q
bGF0Zm9ybUxheWVyKCkKIFBsYXRmb3JtTGF5ZXIqIERyYXdpbmdCdWZmZXI6OnBsYXRmb3JtTGF5
ZXIoKQogewogICAgIGlmICghbV9wbGF0Zm9ybUxheWVyKSB7Ci0gICAgICAgIG1fcGxhdGZvcm1M
YXllciA9IFdlYkdMTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlPENDQ2FudmFzTGF5ZXJJbXBsPigwKTsK
KyAgICAgICAgaWYgKENDUHJveHk6Omhhc0ltcGxUaHJlYWQoKSkKKyAgICAgICAgICAgIG1fcGxh
dGZvcm1MYXllciA9IFdlYkdMTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlPENDQ2FudmFzTGF5ZXJEYXRh
PigwKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9wbGF0Zm9ybUxheWVyID0gV2ViR0xM
YXllckNocm9taXVtOjpjcmVhdGU8Q0NDYW52YXNMYXllckltcGw+KDApOwogICAgICAgICBtX3Bs
YXRmb3JtTGF5ZXItPnNldERyYXdpbmdCdWZmZXIodGhpcyk7CiAgICAgICAgIG1fcGxhdGZvcm1M
YXllci0+c2V0T3BhcXVlKCFtX2NvbnRleHQtPmdldENvbnRleHRBdHRyaWJ1dGVzKCkuYWxwaGEp
OwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0ZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9GcmFtZUJ1ZmZlclNr
UGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuY3BwCmluZGV4IGE3NWY1NjkuLjQ5Y2E0
MmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0ZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRnJhbWVCdWZmZXJTa1Bp
Y3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmNwcApAQCAtNjMsOSArNjMsNDQgQEAgRnJh
bWVCdWZmZXJTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlOjp+VGV4
dHVyZSgpCiB7CiB9CiAKLXZvaWQgRnJhbWVCdWZmZXJTa1BpY3R1cmVDYW52YXNMYXllclRleHR1
cmVVcGRhdGVyOjpUZXh0dXJlOjp1cGRhdGVSZWN0KEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0
LCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCkKK3Zv
aWQgRnJhbWVCdWZmZXJTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJl
OjpwcmVwYXJlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBUZXh0dXJlQWxsb2NhdG9yKiBh
bGxvY2F0b3IpCiB7Ci0gICAgdGV4dHVyZVVwZGF0ZXIoKS0+dXBkYXRlVGV4dHVyZVJlY3QoY29u
dGV4dCwgdGV4dHVyZSgpLCBzb3VyY2VSZWN0LCBkZXN0UmVjdCk7CisgICAgdGV4dHVyZSgpLT5h
bGxvY2F0ZShhbGxvY2F0b3IpOworCisgICAgLy8gTWFrZSBzdXJlIFNLSUEgdXNlcyB0aGUgY29y
cmVjdCBHTCBjb250ZXh0LgorICAgIGNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IC8vIE5vdGlmeSBTS0lBIHRvIHN5bmMgaXRzIGludGVybmFsIEdMIHN0YXRlLgorICAgIGNvbnRl
eHQtPmdyQ29udGV4dCgpLT5yZXNldENvbnRleHQoKTsKKworICAgIC8vIENyZWF0ZSBhbiBhY2Nl
bGVyYXRlZCBjYW52YXMgdG8gZHJhdyBvbi4KKyAgICBPd25QdHI8U2tDYW52YXM+IGNhbnZhcyA9
IGNyZWF0ZUFjY2VsZXJhdGVkQ2FudmFzKGNvbnRleHQsIHRleHR1cmUoKSk7CisKKyAgICBJbnRS
ZWN0IGRlc3RSZWN0ID0gdXBkYXRlUmVjdCgpOworICAgIEludFBvaW50IG9mZnNldCA9IGNvbnRl
bnRPZmZzZXQoKTsKKyAgICBJbnRSZWN0IHNvdXJjZVJlY3QgPSBJbnRSZWN0KEludFBvaW50KGRl
c3RSZWN0LngoKSArIG9mZnNldC54KCksIGRlc3RSZWN0LnkoKSArIG9mZnNldC55KCkpLCBkZXN0
UmVjdC5zaXplKCkpOworCisgICAgY2FudmFzLT5jbGlwUmVjdChTa1JlY3QoZGVzdFJlY3QpKTsK
KyAgICAvLyBUaGUgY29tcG9zaXRvciBleHBlY3RzIHRoZSB0ZXh0dXJlcyB0byBiZSB1cHNpZGUt
ZG93biBzbyBpdCBjYW4gZmxpcAorICAgIC8vIHRoZSBmaW5hbCBjb21wb3NpdGVkIGltYWdlLiBH
YW5lc2ggcmVuZGVycyB0aGUgaW1hZ2UgdXByaWdodCBzbyB3ZQorICAgIC8vIG5lZWQgdG8gZG8g
YSB5LWZsaXAuCisgICAgY2FudmFzLT50cmFuc2xhdGUoMC4wLCB0ZXh0dXJlKCktPnNpemUoKS5o
ZWlnaHQoKSk7CisgICAgY2FudmFzLT5zY2FsZSgxLjAsIC0xLjApOworCisgICAgdGV4dHVyZVVw
ZGF0ZXIoKS0+dXBkYXRlVGV4dHVyZVJlY3QoY29udGV4dCwgY2FudmFzLmdldCgpLCBzb3VyY2VS
ZWN0LCBkZXN0UmVjdCk7CisKKyAgICAvLyBGbHVzaCBTS0lBIGNvbnRleHQgc28gdGhhdCBhbGwg
dGhlIHJlbmRlcmVkIHN0dWZmIGFwcGVhcnMgb24gdGhlIHRleHR1cmUuCisgICAgY29udGV4dC0+
Z3JDb250ZXh0KCktPmZsdXNoKCk7Cit9CisKK1Bhc3NPd25QdHI8Q0NUZXh0dXJlVXBkYXRlcjo6
VGV4dHVyZVVwZGF0ZT4gRnJhbWVCdWZmZXJTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRh
dGVyOjpUZXh0dXJlOjpjcmVhdGVDQ1RleHR1cmVVcGRhdGUoKQoreworICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgIHJldHVybiBQYXNzT3duUHRyPENDVGV4dHVyZVVwZGF0ZXI6OlRleHR1
cmVVcGRhdGU+KCk7Cit9CisKK3ZvaWQgRnJhbWVCdWZmZXJTa1BpY3R1cmVDYW52YXNMYXllclRl
eHR1cmVVcGRhdGVyOjpUZXh0dXJlOjpwdXNoUHJvcGVydGllc1RvKENDVGV4dHVyZVVwZGF0ZXI6
OlRleHR1cmVVcGRhdGUqKQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiBQYXNz
UmVmUHRyPEZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcj4gRnJh
bWVCdWZmZXJTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpjcmVhdGUoUGFzc093
blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4gcGFpbnRlcikKQEAgLTgyLDcgKzExNyw3IEBAIEZy
YW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6fkZyYW1lQnVmZmVy
U2tQaWN0dXJlQ2FudmFzTGF5ZXJUCiB7CiB9CiAKLVBhc3NPd25QdHI8TGF5ZXJUZXh0dXJlVXBk
YXRlcjo6VGV4dHVyZT4gRnJhbWVCdWZmZXJTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRh
dGVyOjpjcmVhdGVUZXh0dXJlKFRleHR1cmVNYW5hZ2VyKiBtYW5hZ2VyKQorUGFzc093blB0cjxD
YW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlPiBGcmFtZUJ1ZmZlclNrUGljdHVyZUNh
bnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OmNyZWF0ZVRleHR1cmUoVGV4dHVyZU1hbmFnZXIqIG1h
bmFnZXIpCiB7CiAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBUZXh0dXJlKHRoaXMsIE1hbmFnZWRU
ZXh0dXJlOjpjcmVhdGUobWFuYWdlcikpKTsKIH0KQEAgLTkzLDMyICsxMjgsMTMgQEAgTGF5ZXJU
ZXh0dXJlVXBkYXRlcjo6U2FtcGxlZFRleGVsRm9ybWF0IEZyYW1lQnVmZmVyU2tQaWN0dXJlQ2Fu
dmFzTGF5ZXJUZXh0dXJlVXAKICAgICByZXR1cm4gTGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2FtcGxl
ZFRleGVsRm9ybWF0UkdCQTsKIH0KIAotdm9pZCBGcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xh
eWVyVGV4dHVyZVVwZGF0ZXI6OnVwZGF0ZVRleHR1cmVSZWN0KEdyYXBoaWNzQ29udGV4dDNEKiBj
b250ZXh0LCBNYW5hZ2VkVGV4dHVyZSogdGV4dHVyZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVj
dCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpCit2b2lkIEZyYW1lQnVmZmVyU2tQaWN0dXJlQ2Fu
dmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6dXBkYXRlVGV4dHVyZVJlY3QoR3JhcGhpY3NDb250ZXh0
M0QqIGNvbnRleHQsIFNrQ2FudmFzICpjYW52YXMsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3Qs
IGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KQogewotICAgIEFTU0VSVCh0ZXh0dXJlLT50ZXh0dXJl
SWQoKSk7Ci0KLSAgICAvLyBNYWtlIHN1cmUgU0tJQSB1c2VzIHRoZSBjb3JyZWN0IEdMIGNvbnRl
eHQuCi0gICAgY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgLy8gTm90aWZ5IFNL
SUEgdG8gc3luYyBpdHMgaW50ZXJuYWwgR0wgc3RhdGUuCi0gICAgY29udGV4dC0+Z3JDb250ZXh0
KCktPnJlc2V0Q29udGV4dCgpOwotCi0gICAgLy8gQ3JlYXRlIGFuIGFjY2VsZXJhdGVkIGNhbnZh
cyB0byBkcmF3IG9uLgotICAgIE93blB0cjxTa0NhbnZhcz4gY2FudmFzID0gY3JlYXRlQWNjZWxl
cmF0ZWRDYW52YXMoY29udGV4dCwgdGV4dHVyZSk7Ci0KLSAgICBjYW52YXMtPmNsaXBSZWN0KFNr
UmVjdChkZXN0UmVjdCkpOwotICAgIC8vIFRoZSBjb21wb3NpdG9yIGV4cGVjdHMgdGhlIHRleHR1
cmVzIHRvIGJlIHVwc2lkZS1kb3duIHNvIGl0IGNhbiBmbGlwCi0gICAgLy8gdGhlIGZpbmFsIGNv
bXBvc2l0ZWQgaW1hZ2UuIEdhbmVzaCByZW5kZXJzIHRoZSBpbWFnZSB1cHJpZ2h0IHNvIHdlCi0g
ICAgLy8gbmVlZCB0byBkbyBhIHktZmxpcC4KLSAgICBjYW52YXMtPnRyYW5zbGF0ZSgwLjAsIHRl
eHR1cmUtPnNpemUoKS5oZWlnaHQoKSk7Ci0gICAgY2FudmFzLT5zY2FsZSgxLjAsIC0xLjApOwog
ICAgIC8vIFRyYW5zbGF0ZSB0aGUgb3JpZ2luIG9mIGNvbnRlbnRSZWN0IHRvIHRoYXQgb2YgZGVz
dFJlY3QuCiAgICAgLy8gTm90ZSB0aGF0IGRlc3RSZWN0IGlzIGRlZmluZWQgcmVsYXRpdmUgdG8g
c291cmNlUmVjdC4KICAgICBjYW52YXMtPnRyYW5zbGF0ZShjb250ZW50UmVjdCgpLngoKSAtIHNv
dXJjZVJlY3QueCgpICsgZGVzdFJlY3QueCgpLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnRl
bnRSZWN0KCkueSgpIC0gc291cmNlUmVjdC55KCkgKyBkZXN0UmVjdC55KCkpOwotICAgIGRyYXdQ
aWN0dXJlKGNhbnZhcy5nZXQoKSk7Ci0KLSAgICAvLyBGbHVzaCBTS0lBIGNvbnRleHQgc28gdGhh
dCBhbGwgdGhlIHJlbmRlcmVkIHN0dWZmIGFwcGVhcnMgb24gdGhlIHRleHR1cmUuCi0gICAgY29u
dGV4dC0+Z3JDb250ZXh0KCktPmZsdXNoKCk7CisgICAgZHJhd1BpY3R1cmUoY2FudmFzKTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRnJhbWVCdWZmZXJTa1BpY3R1cmVDYW52YXNMYXllclRl
eHR1cmVVcGRhdGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9GcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuaAppbmRleCA2
ZDJhZDQxLi4zNmNhMmQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9GcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9GcmFt
ZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuaApAQCAtNDMsNyArNDMs
MTEgQEAgcHVibGljOgogICAgICAgICBUZXh0dXJlKEZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFz
TGF5ZXJUZXh0dXJlVXBkYXRlciosIFBhc3NPd25QdHI8TWFuYWdlZFRleHR1cmU+KTsKICAgICAg
ICAgdmlydHVhbCB+VGV4dHVyZSgpOwogCi0gICAgICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVSZWN0
KEdyYXBoaWNzQ29udGV4dDNEKiwgY29uc3QgSW50UmVjdCYgLyogc291cmNlUmVjdCAqLywgY29u
c3QgSW50UmVjdCYgLyogZGVzdFJlY3QgKi8pOworICAgICAgICB2aXJ0dWFsIGJvb2wgbmVlZFBy
ZXBhcmUoKSB7IHJldHVybiB0cnVlOyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlKEdy
YXBoaWNzQ29udGV4dDNEKiwgVGV4dHVyZUFsbG9jYXRvciopOworCisgICAgICAgIHZpcnR1YWwg
UGFzc093blB0cjxDQ1RleHR1cmVVcGRhdGVyOjpUZXh0dXJlVXBkYXRlPiBjcmVhdGVDQ1RleHR1
cmVVcGRhdGUoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHB1c2hQcm9wZXJ0aWVzVG8oQ0NUZXh0
dXJlVXBkYXRlcjo6VGV4dHVyZVVwZGF0ZSopOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgRnJh
bWVCdWZmZXJTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyKiB0ZXh0dXJlVXBkYXRl
cigpIHsgcmV0dXJuIG1fdGV4dHVyZVVwZGF0ZXI7IH0KQEAgLTU0LDkgKzU4LDkgQEAgcHVibGlj
OgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJU
ZXh0dXJlVXBkYXRlcj4gY3JlYXRlKFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+KTsK
ICAgICB2aXJ0dWFsIH5GcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0
ZXIoKTsKIAotICAgIHZpcnR1YWwgUGFzc093blB0cjxMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0
dXJlPiBjcmVhdGVUZXh0dXJlKFRleHR1cmVNYW5hZ2VyKik7CisgICAgdmlydHVhbCBQYXNzT3du
UHRyPENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU+IGNyZWF0ZVRleHR1cmUoVGV4
dHVyZU1hbmFnZXIqKTsKICAgICB2aXJ0dWFsIFNhbXBsZWRUZXhlbEZvcm1hdCBzYW1wbGVkVGV4
ZWxGb3JtYXQoR0MzRGVudW0gdGV4dHVyZUZvcm1hdCk7Ci0gICAgdm9pZCB1cGRhdGVUZXh0dXJl
UmVjdChHcmFwaGljc0NvbnRleHQzRCosIE1hbmFnZWRUZXh0dXJlKiwgY29uc3QgSW50UmVjdCYg
c291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpOworICAgIHZvaWQgdXBkYXRlVGV4
dHVyZVJlY3QoR3JhcGhpY3NDb250ZXh0M0QqLCBTa0NhbnZhcyosIGNvbnN0IEludFJlY3QmIHNv
dXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KTsKIAogcHJpdmF0ZToKICAgICBleHBs
aWNpdCBGcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIoUGFzc093
blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJv
bWl1bS5jcHAKaW5kZXggNTg5NGY5Yi4uN2MwYTZjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xh
eWVyQ2hyb21pdW0uY3BwCkBAIC01NCw2ICs1NCw3IEBACiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1
bS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAiU3lzdGVtVGltZS5o
IgorI2luY2x1ZGUgImNjL0NDUHJveHkuaCIKICNpbmNsdWRlICJjYy9DQ1RpbGVkTGF5ZXJJbXBs
LmgiCiAKICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KQEAgLTc1LDcgKzc2LDEwIEBAIEdy
YXBoaWNzTGF5ZXJDaHJvbWl1bTo6R3JhcGhpY3NMYXllckNocm9taXVtKEdyYXBoaWNzTGF5ZXJD
bGllbnQqIGNsaWVudCkKICAgICAsIG1fY29udGVudHNMYXllckhhc0JhY2tncm91bmRDb2xvcihm
YWxzZSkKICAgICAsIG1faW5TZXRDaGlsZHJlbihmYWxzZSkKIHsKLSAgICBtX2xheWVyID0gQ29u
dGVudExheWVyQ2hyb21pdW06OmNyZWF0ZTxDQ1RpbGVkTGF5ZXJJbXBsPih0aGlzKTsKKyAgICBp
ZiAoQ0NQcm94eTo6aGFzSW1wbFRocmVhZCgpKQorICAgICAgICBtX2xheWVyID0gQ29udGVudExh
eWVyQ2hyb21pdW06OmNyZWF0ZTxDQ1RpbGVkTGF5ZXJEYXRhPih0aGlzKTsKKyAgICBlbHNlCisg
ICAgICAgIG1fbGF5ZXIgPSBDb250ZW50TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlPENDVGlsZWRMYXll
ckltcGw+KHRoaXMpOwogCiAgICAgdXBkYXRlRGVidWdJbmRpY2F0b3JzKCk7CiB9CkBAIC0zMjgs
NyArMzMyLDExIEBAIHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRDb250ZW50c1RvSW1h
Z2UoSW1hZ2UqIGltYWdlKQogICAgIGJvb2wgY2hpbGRyZW5DaGFuZ2VkID0gZmFsc2U7CiAgICAg
aWYgKGltYWdlKSB7CiAgICAgICAgIGlmICghbV9jb250ZW50c0xheWVyLmdldCgpIHx8IG1fY29u
dGVudHNMYXllclB1cnBvc2UgIT0gQ29udGVudHNMYXllckZvckltYWdlKSB7Ci0gICAgICAgICAg
ICBSZWZQdHI8SW1hZ2VMYXllckNocm9taXVtPiBpbWFnZUxheWVyID0gSW1hZ2VMYXllckNocm9t
aXVtOjpjcmVhdGU8Q0NUaWxlZExheWVySW1wbD4odGhpcyk7CisgICAgICAgICAgICBSZWZQdHI8
SW1hZ2VMYXllckNocm9taXVtPiBpbWFnZUxheWVyOworICAgICAgICAgICAgaWYgKENDUHJveHk6
Omhhc0ltcGxUaHJlYWQoKSkKKyAgICAgICAgICAgICAgICBpbWFnZUxheWVyID0gSW1hZ2VMYXll
ckNocm9taXVtOjpjcmVhdGU8Q0NUaWxlZExheWVyRGF0YT4odGhpcyk7CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgaW1hZ2VMYXllciA9IEltYWdlTGF5ZXJDaHJvbWl1bTo6Y3Jl
YXRlPENDVGlsZWRMYXllckltcGw+KHRoaXMpOwogICAgICAgICAgICAgc2V0dXBDb250ZW50c0xh
eWVyKGltYWdlTGF5ZXIuZ2V0KCkpOwogICAgICAgICAgICAgbV9jb250ZW50c0xheWVyUHVycG9z
ZSA9IENvbnRlbnRzTGF5ZXJGb3JJbWFnZTsKICAgICAgICAgICAgIGNoaWxkcmVuQ2hhbmdlZCA9
IHRydWU7CkBAIC01MjksNyArNTM3LDEwIEBAIHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjp1
cGRhdGVMYXllclByZXNlcnZlczNEKCkKIHsKICAgICBpZiAobV9wcmVzZXJ2ZXMzRCAmJiAhbV90
cmFuc2Zvcm1MYXllcikgewogICAgICAgICAvLyBDcmVhdGUgdGhlIHRyYW5zZm9ybSBsYXllci4K
LSAgICAgICAgbV90cmFuc2Zvcm1MYXllciA9IExheWVyQ2hyb21pdW06OmNyZWF0ZTxDQ0xheWVy
SW1wbD4odGhpcyk7CisgICAgICAgIGlmIChDQ1Byb3h5OjpoYXNJbXBsVGhyZWFkKCkpCisgICAg
ICAgICAgICBtX3RyYW5zZm9ybUxheWVyID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlPENDTGF5ZXJE
YXRhPih0aGlzKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV90cmFuc2Zvcm1MYXllciA9
IExheWVyQ2hyb21pdW06OmNyZWF0ZTxDQ0xheWVySW1wbD4odGhpcyk7CiAgICAgICAgIG1fdHJh
bnNmb3JtTGF5ZXItPnNldFByZXNlcnZlczNEKHRydWUpOwogCiAgICAgICAgIC8vIENvcHkgdGhl
IHBvc2l0aW9uIGZyb20gdGhpcyBsYXllci4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uY3Bw
CmluZGV4IDBlZDAzNzQuLmM3NGNiZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNw
cApAQCAtMzYsNDQgKzM2LDc5IEBACiAKICNpbmNsdWRlICJDYW52YXNMYXllclRleHR1cmVVcGRh
dGVyLmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKLSNpbmNsdWRlICJMYXllclRleHR1cmVTdWJJbWFn
ZS5oIgorI2luY2x1ZGUgIkxheWVyUGFpbnRlckNocm9taXVtLmgiCiAjaW5jbHVkZSAiTWFuYWdl
ZFRleHR1cmUuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUNvbG9yLmgiCiAjaW5jbHVkZSAiY2MvQ0NM
YXllclRyZWVIb3N0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgSW1hZ2VMYXll
clRleHR1cmVVcGRhdGVyIDogcHVibGljIExheWVyVGV4dHVyZVVwZGF0ZXIgeworY2xhc3MgSW1h
Z2VDYW52YXNMYXllclRleHR1cmVVcGRhdGVyIDogcHVibGljIENhbnZhc0xheWVyVGV4dHVyZVVw
ZGF0ZXIgewogcHVibGljOgorICAgIGNsYXNzIFBhaW50ZXIgOiBwdWJsaWMgTGF5ZXJQYWludGVy
Q2hyb21pdW0geworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NPd25QdHI8UGFpbnRl
cj4gY3JlYXRlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBQ
YWludGVyKCkpOworICAgICAgICB9CisKKyAgICAgICAgdmlydHVhbCB2b2lkIHBhaW50KEdyYXBo
aWNzQ29udGV4dCYsIGNvbnN0IEludFJlY3QmKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH07CisKICAgICBjbGFzcyBUZXh0dXJl
IDogcHVibGljIENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmUgewogICAgIHB1Ymxp
YzoKLSAgICAgICAgVGV4dHVyZShJbWFnZUxheWVyVGV4dHVyZVVwZGF0ZXIqIHRleHR1cmVVcGRh
dGVyLCBQYXNzT3duUHRyPE1hbmFnZWRUZXh0dXJlPiB0ZXh0dXJlKQorICAgICAgICBUZXh0dXJl
KEltYWdlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlciogdGV4dHVyZVVwZGF0ZXIsIFBhc3NPd25Q
dHI8TWFuYWdlZFRleHR1cmU+IHRleHR1cmUpCiAgICAgICAgICAgICA6IENhbnZhc0xheWVyVGV4
dHVyZVVwZGF0ZXI6OlRleHR1cmUodGV4dHVyZSkKICAgICAgICAgICAgICwgbV90ZXh0dXJlVXBk
YXRlcih0ZXh0dXJlVXBkYXRlcikKICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAgICAgdmly
dHVhbCB2b2lkIHVwZGF0ZVJlY3QoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIGNvbnN0IElu
dFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KQorICAgICAgICB2aXJ0
dWFsIFBhc3NPd25QdHI8Q0NUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZVVwZGF0ZT4gY3JlYXRlQ0NU
ZXh0dXJlVXBkYXRlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIENDVGV4dHVyZVVw
ZGF0ZXI6OlN1YkltYWdlVGV4dHVyZVVwZGF0ZTo6Y3JlYXRlKCk7CisgICAgICAgIH0KKworICAg
ICAgICB2aXJ0dWFsIHZvaWQgcHVzaFByb3BlcnRpZXNUbyhDQ1RleHR1cmVVcGRhdGVyOjpUZXh0
dXJlVXBkYXRlKiB1cGRhdGUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVCh0ZXh0dXJl
KCktPnRleHR1cmVJZCgpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCB0ZXh0dXJlKCktPnRleHR1cmVJZCgpKTsKLSAgICAg
ICAgICAgIHRleHR1cmVVcGRhdGVyKCktPnVwZGF0ZVRleHR1cmVSZWN0KGNvbnRleHQsIHRleHR1
cmUoKS0+Zm9ybWF0KCksIHNvdXJjZVJlY3QsIGRlc3RSZWN0KTsKKyAgICAgICAgICAgIENDVGV4
dHVyZVVwZGF0ZXI6OlN1YkltYWdlVGV4dHVyZVVwZGF0ZSogc3ViSW1hZ2VVcGRhdGUgPSBzdGF0
aWNfY2FzdDxDQ1RleHR1cmVVcGRhdGVyOjpTdWJJbWFnZVRleHR1cmVVcGRhdGUqPih1cGRhdGUp
OworCisgICAgICAgICAgICBJbnRSZWN0IGltYWdlUmVjdCA9IHRleHR1cmVVcGRhdGVyKCktPmlt
YWdlUmVjdCgpOworICAgICAgICAgICAgSW50UmVjdCBkZXN0UmVjdCA9IHVwZGF0ZVJlY3QoKTsK
KyAgICAgICAgICAgIEludFBvaW50IG9mZnNldCA9IGNvbnRlbnRPZmZzZXQoKTsKKyAgICAgICAg
ICAgIEludFJlY3Qgc291cmNlUmVjdCA9IEludFJlY3QoSW50UG9pbnQoZGVzdFJlY3QueCgpICsg
b2Zmc2V0LngoKSwgZGVzdFJlY3QueSgpICsgb2Zmc2V0LnkoKSksIGRlc3RSZWN0LnNpemUoKSk7
CisKKyAgICAgICAgICAgIC8vIFNvdXJjZSByZWN0IHNob3VsZCBuZXZlciBnbyBvdXRzaWRlIHRo
ZSBpbWFnZSBwaXhlbHMsIGV2ZW4gaWYgdGhpcworICAgICAgICAgICAgLy8gaXMgcmVxdWVzdGVk
IGJlY2F1c2UgdGhlIHRleHR1cmUgZXh0ZW5kcyBvdXRzaWRlIHRoZSBpbWFnZS4KKyAgICAgICAg
ICAgIEludFJlY3QgY2xpcHBlZFNvdXJjZVJlY3QgPSBzb3VyY2VSZWN0OworICAgICAgICAgICAg
Y2xpcHBlZFNvdXJjZVJlY3QuaW50ZXJzZWN0KGltYWdlUmVjdCk7CisKKyAgICAgICAgICAgIElu
dFJlY3QgY2xpcHBlZERlc3RSZWN0ID0gZGVzdFJlY3Q7CisgICAgICAgICAgICBjbGlwcGVkRGVz
dFJlY3QubW92ZShjbGlwcGVkU291cmNlUmVjdC5sb2NhdGlvbigpIC0gc291cmNlUmVjdC5sb2Nh
dGlvbigpKTsKKyAgICAgICAgICAgIGNsaXBwZWREZXN0UmVjdC5zZXRTaXplKGNsaXBwZWRTb3Vy
Y2VSZWN0LnNpemUoKSk7CisKKyAgICAgICAgICAgIHN1YkltYWdlVXBkYXRlLT5zZXRGb3JtYXQo
dGV4dHVyZSgpLT5mb3JtYXQoKSk7CisgICAgICAgICAgICBzdWJJbWFnZVVwZGF0ZS0+c2V0VGV4
dHVyZUlkKHRleHR1cmUoKS0+dGV4dHVyZUlkKCkpOworICAgICAgICAgICAgc3ViSW1hZ2VVcGRh
dGUtPnNldFJlY3QoY2xpcHBlZERlc3RSZWN0KTsKKyAgICAgICAgICAgIHN1YkltYWdlVXBkYXRl
LT5zZXRQaXhlbERhdGEodGV4dHVyZVVwZGF0ZXIoKS0+aW1hZ2UoKS5waXhlbHMoKSwgaW1hZ2VS
ZWN0LCBjbGlwcGVkU291cmNlUmVjdCk7CiAgICAgICAgIH0KIAogICAgIHByaXZhdGU6Ci0gICAg
ICAgIEltYWdlTGF5ZXJUZXh0dXJlVXBkYXRlciogdGV4dHVyZVVwZGF0ZXIoKSB7IHJldHVybiBt
X3RleHR1cmVVcGRhdGVyOyB9CisgICAgICAgIEltYWdlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRl
ciogdGV4dHVyZVVwZGF0ZXIoKSB7IHJldHVybiBtX3RleHR1cmVVcGRhdGVyOyB9CiAKLSAgICAg
ICAgSW1hZ2VMYXllclRleHR1cmVVcGRhdGVyKiBtX3RleHR1cmVVcGRhdGVyOworICAgICAgICBJ
bWFnZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIqIG1fdGV4dHVyZVVwZGF0ZXI7CiAgICAgfTsK
IAotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEltYWdlTGF5ZXJUZXh0dXJlVXBkYXRlcj4gY3JlYXRl
KGJvb2wgdXNlTWFwVGV4U3ViSW1hZ2UpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8SW1hZ2VDYW52
YXNMYXllclRleHR1cmVVcGRhdGVyPiBjcmVhdGUoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBJbWFnZUxheWVyVGV4dHVyZVVwZGF0ZXIodXNlTWFwVGV4U3ViSW1hZ2UpKTsK
KyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbWFnZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0
ZXIoKSk7CiAgICAgfQogCi0gICAgdmlydHVhbCB+SW1hZ2VMYXllclRleHR1cmVVcGRhdGVyKCkg
eyB9CisgICAgdmlydHVhbCB+SW1hZ2VDYW52YXNMYXllclRleHR1cmVVcGRhdGVyKCkgeyB9CiAK
LSAgICB2aXJ0dWFsIFBhc3NPd25QdHI8TGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZT4gY3Jl
YXRlVGV4dHVyZShUZXh0dXJlTWFuYWdlciogbWFuYWdlcikKKyAgICB2aXJ0dWFsIFBhc3NPd25Q
dHI8Q2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZT4gY3JlYXRlVGV4dHVyZShUZXh0
dXJlTWFuYWdlciogbWFuYWdlcikKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcg
VGV4dHVyZSh0aGlzLCBNYW5hZ2VkVGV4dHVyZTo6Y3JlYXRlKG1hbmFnZXIpKSk7CiAgICAgfQpA
QCAtODQsMjUgKzExOSw2IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBMYXllclRleHR1cmVV
cGRhdGVyOjpTYW1wbGVkVGV4ZWxGb3JtYXRSR0JBIDogTGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2Ft
cGxlZFRleGVsRm9ybWF0QkdSQTsKICAgICB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250
ZW50cyhjb25zdCBJbnRSZWN0JiAvKiBjb250ZW50UmVjdCAqLywgY29uc3QgSW50U2l6ZSYgdGls
ZVNpemUsIGludCAvKiBib3JkZXJUZXhlbHMgKi8sIGZsb2F0IC8qIGNvbnRlbnRzU2NhbGUgKi8p
Ci0gICAgewotICAgICAgICBtX3RleFN1YkltYWdlLnNldFN1YkltYWdlU2l6ZSh0aWxlU2l6ZSk7
Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRleHR1cmVSZWN0KEdyYXBoaWNzQ29u
dGV4dDNEKiBjb250ZXh0LCB1bnNpZ25lZCBmb3JtYXQsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJl
Y3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KQotICAgIHsKLSAgICAgICAgLy8gU291cmNlIHJl
Y3Qgc2hvdWxkIG5ldmVyIGdvIG91dHNpZGUgdGhlIGltYWdlIHBpeGVscywgZXZlbiBpZiB0aGlz
Ci0gICAgICAgIC8vIGlzIHJlcXVlc3RlZCBiZWNhdXNlIHRoZSB0ZXh0dXJlIGV4dGVuZHMgb3V0
c2lkZSB0aGUgaW1hZ2UuCi0gICAgICAgIEludFJlY3QgY2xpcHBlZFNvdXJjZVJlY3QgPSBzb3Vy
Y2VSZWN0OwotICAgICAgICBjbGlwcGVkU291cmNlUmVjdC5pbnRlcnNlY3QoaW1hZ2VSZWN0KCkp
OwotCi0gICAgICAgIEludFJlY3QgY2xpcHBlZERlc3RSZWN0ID0gZGVzdFJlY3Q7Ci0gICAgICAg
IGNsaXBwZWREZXN0UmVjdC5tb3ZlKGNsaXBwZWRTb3VyY2VSZWN0LmxvY2F0aW9uKCkgLSBzb3Vy
Y2VSZWN0LmxvY2F0aW9uKCkpOwotICAgICAgICBjbGlwcGVkRGVzdFJlY3Quc2V0U2l6ZShjbGlw
cGVkU291cmNlUmVjdC5zaXplKCkpOwotCi0gICAgICAgIG1fdGV4U3ViSW1hZ2UudXBsb2FkKG1f
aW1hZ2UucGl4ZWxzKCksIGltYWdlUmVjdCgpLCBjbGlwcGVkU291cmNlUmVjdCwgY2xpcHBlZERl
c3RSZWN0LCBmb3JtYXQsIGNvbnRleHQpOwotICAgIH0KLQogICAgIHZvaWQgdXBkYXRlRnJvbUlt
YWdlKE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlKQogICAgIHsKICAgICAgICAgbV9pbWFnZS51
cGRhdGVGcm9tSW1hZ2UobmF0aXZlSW1hZ2UpOwpAQCAtMTEzLDE5ICsxMjksMjIgQEAgcHVibGlj
OgogICAgICAgICByZXR1cm4gbV9pbWFnZS5zaXplKCk7CiAgICAgfQogCi1wcml2YXRlOgotICAg
IGV4cGxpY2l0IEltYWdlTGF5ZXJUZXh0dXJlVXBkYXRlcihib29sIHVzZU1hcFRleFN1YkltYWdl
KQotICAgICAgICA6IG1fdGV4U3ViSW1hZ2UodXNlTWFwVGV4U3ViSW1hZ2UpCisgICAgSW50UmVj
dCBpbWFnZVJlY3QoKSBjb25zdAogICAgIHsKKyAgICAgICAgcmV0dXJuIEludFJlY3QoSW50UG9p
bnQ6Onplcm8oKSwgbV9pbWFnZS5zaXplKCkpOwogICAgIH0KIAotICAgIEludFJlY3QgaW1hZ2VS
ZWN0KCkgY29uc3QKKyAgICBQbGF0Zm9ybUltYWdlJiBpbWFnZSgpCisgICAgeworICAgICAgICBy
ZXR1cm4gbV9pbWFnZTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgSW1hZ2VDYW52
YXNMYXllclRleHR1cmVVcGRhdGVyKCkgOiBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyKFBhaW50
ZXI6OmNyZWF0ZSgpKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEludFJlY3QoSW50UG9pbnQ6Onpl
cm8oKSwgbV9pbWFnZS5zaXplKCkpOwogICAgIH0KIAogICAgIFBsYXRmb3JtSW1hZ2UgbV9pbWFn
ZTsKLSAgICBMYXllclRleHR1cmVTdWJJbWFnZSBtX3RleFN1YkltYWdlOwogfTsKIAogSW1hZ2VM
YXllckNocm9taXVtOjpJbWFnZUxheWVyQ2hyb21pdW0oQ0NMYXllckRlbGVnYXRlKiBkZWxlZ2F0
ZSkKQEAgLTE2NCw3ICsxODMsNyBAQCB2b2lkIEltYWdlTGF5ZXJDaHJvbWl1bTo6cHJlcGFyZVRv
VXBkYXRlSWZEaXJ0eSgpCiAgICAgcHJlcGFyZVRvVXBkYXRlKHZpc2libGVMYXllclJlY3QoKSk7
CiB9CiAKLUxheWVyVGV4dHVyZVVwZGF0ZXIqIEltYWdlTGF5ZXJDaHJvbWl1bTo6dGV4dHVyZVVw
ZGF0ZXIoKSBjb25zdAorQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlciogSW1hZ2VMYXllckNocm9t
aXVtOjp0ZXh0dXJlVXBkYXRlcigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fdGV4dHVyZVVwZGF0
ZXIuZ2V0KCk7CiB9CkBAIC0xODMsNyArMjAyLDcgQEAgYm9vbCBJbWFnZUxheWVyQ2hyb21pdW06
OmRyYXdzQ29udGVudCgpIGNvbnN0CiAKIHZvaWQgSW1hZ2VMYXllckNocm9taXVtOjpjcmVhdGVU
ZXh0dXJlVXBkYXRlcihjb25zdCBDQ0xheWVyVHJlZUhvc3QqIGhvc3QpCiB7Ci0gICAgbV90ZXh0
dXJlVXBkYXRlciA9IEltYWdlTGF5ZXJUZXh0dXJlVXBkYXRlcjo6Y3JlYXRlKGhvc3QtPmxheWVy
UmVuZGVyZXJDYXBhYmlsaXRpZXMoKS51c2luZ01hcFN1Yik7CisgICAgbV90ZXh0dXJlVXBkYXRl
ciA9IEltYWdlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6Y3JlYXRlKCk7CiB9CiAKIGJvb2wg
SW1hZ2VMYXllckNocm9taXVtOjpuZWVkc0NvbnRlbnRzU2NhbGUoKSBjb25zdApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNo
cm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFn
ZUxheWVyQ2hyb21pdW0uaAppbmRleCA0MWZjYmE4Li43ZjY0ZDhjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0u
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxh
eWVyQ2hyb21pdW0uaApAQCAtNDQsNyArNDQsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBj
bGFzcyBJbWFnZTsKLWNsYXNzIEltYWdlTGF5ZXJUZXh0dXJlVXBkYXRlcjsKK2NsYXNzIEltYWdl
Q2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjsKIAogLy8gQSBMYXllciB0aGF0IGNvbnRhaW5zIG9u
bHkgYW4gSW1hZ2UgZWxlbWVudC4KIGNsYXNzIEltYWdlTGF5ZXJDaHJvbWl1bSA6IHB1YmxpYyBU
aWxlZExheWVyQ2hyb21pdW0gewpAQCAtNjUsMTMgKzY1LDEzIEBAIHByb3RlY3RlZDoKICAgICB2
aXJ0dWFsIHZvaWQgY3JlYXRlVGV4dHVyZVVwZGF0ZXIoY29uc3QgQ0NMYXllclRyZWVIb3N0Kik7
CiAgICAgdm9pZCBzZXRUaWxpbmdPcHRpb24oVGlsaW5nT3B0aW9uKTsKIAotICAgIHZpcnR1YWwg
TGF5ZXJUZXh0dXJlVXBkYXRlciogdGV4dHVyZVVwZGF0ZXIoKSBjb25zdDsKKyAgICB2aXJ0dWFs
IENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIqIHRleHR1cmVVcGRhdGVyKCkgY29uc3Q7CiAgICAg
dmlydHVhbCBJbnRTaXplIGNvbnRlbnRCb3VuZHMoKSBjb25zdDsKIAogICAgIE5hdGl2ZUltYWdl
UHRyIG1faW1hZ2VGb3JDdXJyZW50RnJhbWU7CiAgICAgUmVmUHRyPEltYWdlPiBtX2NvbnRlbnRz
OwogCi0gICAgUmVmUHRyPEltYWdlTGF5ZXJUZXh0dXJlVXBkYXRlcj4gbV90ZXh0dXJlVXBkYXRl
cjsKKyAgICBSZWZQdHI8SW1hZ2VDYW52YXNMYXllclRleHR1cmVVcGRhdGVyPiBtX3RleHR1cmVV
cGRhdGVyOwogfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgTGF5ZXJUeXBlPiBjbGFzcyBTZXJpYWxp
emFibGVJbWFnZUxheWVyQ2hyb21pdW0gOiBwdWJsaWMgSW1hZ2VMYXllckNocm9taXVtIHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
VGV4dHVyZVVwZGF0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyVGV4dHVyZVVwZGF0ZXIuaAppbmRleCBhNjY3ZDBiLi41MDJjOTMxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1
cmVVcGRhdGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJUZXh0dXJlVXBkYXRlci5oCkBAIC0yOSw4ICsyOSw5IEBACiAKICNpZiBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCiAKLSNpbmNsdWRlICJNYW5hZ2VkVGV4dHVyZS5oIgorI2lu
Y2x1ZGUgImNjL0NDVGV4dHVyZVVwZGF0ZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc1R5cGVzM0Qu
aCIKKyNpbmNsdWRlICJNYW5hZ2VkVGV4dHVyZS5oIgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVk
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTUwLDIxICs1MSwyMiBAQCBwdWJsaWM6CiAK
ICAgICAgICAgdmlydHVhbCBNYW5hZ2VkVGV4dHVyZSogdGV4dHVyZSgpIHsgcmV0dXJuIDA7IH0K
IAotICAgICAgICAvLyBwcmVwYXJlUmVjdCgpIHdpbGwgb25seSBiZSBjYWxsZWQgaWYgdGhpcyBy
ZXR1cm5zIHRydWUuCi0gICAgICAgIHZpcnR1YWwgYm9vbCBuZWVkUHJlcGFyZVJlY3QoKSB7IHJl
dHVybiBmYWxzZTsgfQorICAgICAgICAvLyBwcmVwYXJlKCkgd2lsbCBvbmx5IGJlIGNhbGxlZCBp
ZiB0aGlzIHJldHVybnMgdHJ1ZS4KKyAgICAgICAgdmlydHVhbCBib29sIG5lZWRQcmVwYXJlKCkg
eyByZXR1cm4gZmFsc2U7IH0KICAgICAgICAgLy8gVGhpcyBydW5zIHN5bmNocm9ub3VzbHkgb24g
dGhlIGltcGwgdGhyZWFkIHdpdGggc2FmZSBhY2Nlc3MgdG8gbWFpbiB0aHJlYWQgcmVzb3VyY2Vz
LgotICAgICAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZVJlY3QoR3JhcGhpY3NDb250ZXh0M0QqLCBU
ZXh0dXJlQWxsb2NhdG9yKiwgY29uc3QgSW50UmVjdCYgLyogc291cmNlUmVjdCAqLywgY29uc3Qg
SW50UmVjdCYgLyogZGVzdFJlY3QgKi8pIHsgfQotICAgICAgICAvLyBUaGlzIHJ1bnMgb24gdGhl
IG1haW4gdGhyZWFkIGFmdGVyIGNhbGxzIHRvIG5lZWRQcmVwYXJlUmVjdCgpIGFuZCBwcmVwYXJl
UmVjdCgpIGJ1dCBiZWZvcmUgdXBkYXRlUmVjdCgpLgotICAgICAgICB2aXJ0dWFsIHZvaWQgcGFp
bnRDb250ZW50c1JlY3QoY29uc3QgSW50UmVjdCYgLyogc291cmNlUmVjdCAqLykgeyB9Ci0gICAg
ICAgIC8vIFRoaXMgcnVucyBhc3luY2hyb25vdXNseSBvbiB0aGUgaW1wbCB0aHJlYWQuIEFjY2Vz
cyB0byBtYWluIHRocmVhZCByZXNvdXJjZXMgaXMgdW5zYWZlLgotICAgICAgICB2aXJ0dWFsIHZv
aWQgdXBkYXRlUmVjdChHcmFwaGljc0NvbnRleHQzRCosIGNvbnN0IEludFJlY3QmIHNvdXJjZVJl
Y3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBw
cmVwYXJlKEdyYXBoaWNzQ29udGV4dDNEKiwgVGV4dHVyZUFsbG9jYXRvciopIHsgfQorCisgICAg
ICAgIHZpcnR1YWwgSW50UmVjdCB1cGRhdGVSZWN0KCkgY29uc3QgeyByZXR1cm4gSW50UmVjdCgp
OyB9CisKKyAgICAgICAgdmlydHVhbCBQYXNzT3duUHRyPENDVGV4dHVyZVVwZGF0ZXI6OlRleHR1
cmVVcGRhdGU+IGNyZWF0ZUNDVGV4dHVyZVVwZGF0ZSgpIHsgcmV0dXJuIFBhc3NPd25QdHI8Q0NU
ZXh0dXJlVXBkYXRlcjo6VGV4dHVyZVVwZGF0ZT4oKTsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQg
cHVzaFByb3BlcnRpZXNUbyhDQ1RleHR1cmVVcGRhdGVyOjpUZXh0dXJlVXBkYXRlKikgeyBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsgfQogICAgIH07CiAKICAgICBjbGFzcyBIYW5kbGVyIHsKICAgICBw
dWJsaWM6CiAgICAgICAgIHZpcnR1YWwgfkhhbmRsZXIoKSB7IH0KIAotICAgICAgICB2aXJ0dWFs
IHZvaWQgaGFuZGxlKExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmUqLCBjb25zdCBJbnRSZWN0
JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCkgPSAwOworICAgICAgICB2aXJ0
dWFsIHZvaWQgaGFuZGxlKExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmUqKSA9IDA7CiAgICAg
fTsKIAogICAgIHZpcnR1YWwgfkxheWVyVGV4dHVyZVVwZGF0ZXIoKSB7IH0KQEAgLTc0LDcgKzc2
LDYgQEAgcHVibGljOgogICAgICAgICBTYW1wbGVkVGV4ZWxGb3JtYXRCR1JBLAogICAgICAgICBT
YW1wbGVkVGV4ZWxGb3JtYXRJbnZhbGlkLAogICAgIH07Ci0gICAgdmlydHVhbCBQYXNzT3duUHRy
PFRleHR1cmU+IGNyZWF0ZVRleHR1cmUoVGV4dHVyZU1hbmFnZXIqKSA9IDA7CiAgICAgLy8gUmV0
dXJucyB0aGUgZm9ybWF0IG9mIHRoZSB0ZXhlbCB1cGxvYWRlZCBieSB0aGlzIGludGVyZmFjZS4K
ICAgICAvLyBUaGlzIGZvcm1hdCBzaG91bGQgbm90IGJlIGNvbmZ1c2VkIGJ5IHRleHR1cmUgaW50
ZXJuYWwgZm9ybWF0LgogICAgIC8vIFRoaXMgZm9ybWF0IHNwZWNpZmllcyB0aGUgY29tcG9uZW50
IG9yZGVyIGluIHRoZSBzYW1wbGVkIHRleGVsLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBk
YXRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Ta1Bp
Y3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmNwcAppbmRleCBlZTc0NTIzLi41MDc0NDA1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9T
a1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Ta1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVV
cGRhdGVyLmNwcApAQCAtNTQsNyArNTQsNyBAQCB2b2lkIFNrUGljdHVyZUNhbnZhc0xheWVyVGV4
dHVyZVVwZGF0ZXI6OnBhaW50Q29udGVudHMoY29uc3QgSW50UmVjdCYgY29udGVudFJlYwogICAg
IFBsYXRmb3JtQ29udGV4dFNraWEgcGxhdGZvcm1Db250ZXh0KGNhbnZhcyk7CiAgICAgcGxhdGZv
cm1Db250ZXh0LnNldERlZmVycmVkKHRydWUpOwogICAgIEdyYXBoaWNzQ29udGV4dCBncmFwaGlj
c0NvbnRleHQoJnBsYXRmb3JtQ29udGV4dCk7Ci0gICAgQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRl
cjo6cGFpbnRDb250ZW50cyhncmFwaGljc0NvbnRleHQsIGNvbnRlbnRSZWN0LCBjb250ZW50c1Nj
YWxlKTsKKyAgICBwYWludENhbnZhc0NvbnRlbnRzKGdyYXBoaWNzQ29udGV4dCwgY29udGVudFJl
Y3QsIGNvbnRlbnRzU2NhbGUpOwogICAgIG1fcGljdHVyZS5lbmRSZWNvcmRpbmcoKTsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGls
ZWRMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggMDc4ZjhkOS4uOTNiMGE0ZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRM
YXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNs
dWRlICJUaWxlZExheWVyQ2hyb21pdW0uaCIKIAorI2luY2x1ZGUgIkNhbnZhc0xheWVyVGV4dHVy
ZVVwZGF0ZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIkxh
eWVyUmVuZGVyZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIk1hbmFnZWRUZXh0dXJlLmgiCkBAIC0x
NzcsMzggKzE3OCwxMCBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6Zm9yRWFjaENvbXBvc2l0
b3JSZXNvdXJjZShMYXllclRleHR1cmVVcGRhdGVyOjpIYW5kbGVyJgogICAgICAgICBmb3IgKGlu
dCBpID0gbGVmdDsgaSA8PSByaWdodDsgKytpKSB7CiAgICAgICAgICAgICBVcGRhdGFibGVUaWxl
KiB0aWxlID0gdGlsZUF0KGksIGopOwogCi0gICAgICAgICAgICAvLyBSZXF1aXJlZCB0aWxlcyBh
cmUgY3JlYXRlZCBpbiBwcmVwYXJlVG9VcGRhdGUoKS4gQSB0aWxlIHNob3VsZAotICAgICAgICAg
ICAgLy8gbmV2ZXIgYmUgcmVtb3ZlZCBiZXR3ZWVuIHRoZSBjYWxsIHRvIHByZXBhcmVUb1VwZGF0
ZSgpIGFuZCB0aGUKLSAgICAgICAgICAgIC8vIGNhbGwgdG8gdXBkYXRlQ29tcG9zaXRvclJlc291
cmNlcygpLgotICAgICAgICAgICAgaWYgKCF0aWxlKQotICAgICAgICAgICAgICAgIENSQVNIKCk7
Ci0KLSAgICAgICAgICAgIEludFJlY3Qgc291cmNlUmVjdCA9IHRpbGUtPm1fdXBkYXRlUmVjdDsK
LSAgICAgICAgICAgIGlmICh0aWxlLT5tX3VwZGF0ZVJlY3QuaXNFbXB0eSgpKQorICAgICAgICAg
ICAgaWYgKHRpbGUtPnRleHR1cmUoKS0+dXBkYXRlUmVjdCgpLmlzRW1wdHkoKSkKICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAgQVNTRVJUKHRpbGUtPm1hbmFnZWRUZXh0
dXJlKCktPmlzUmVzZXJ2ZWQoKSk7Ci0gICAgICAgICAgICBjb25zdCBJbnRQb2ludCBhbmNob3Ig
PSBtX3RpbGVyLT50aWxlUmVjdCh0aWxlKS5sb2NhdGlvbigpOwotCi0gICAgICAgICAgICAvLyBD
YWxjdWxhdGUgdGlsZS1zcGFjZSByZWN0YW5nbGUgdG8gdXBsb2FkIGludG8uCi0gICAgICAgICAg
ICBJbnRSZWN0IGRlc3RSZWN0KEludFBvaW50KHNvdXJjZVJlY3QueCgpIC0gYW5jaG9yLngoKSwg
c291cmNlUmVjdC55KCkgLSBhbmNob3IueSgpKSwgc291cmNlUmVjdC5zaXplKCkpOwotICAgICAg
ICAgICAgaWYgKGRlc3RSZWN0LngoKSA8IDApCi0gICAgICAgICAgICAgICAgQ1JBU0goKTsKLSAg
ICAgICAgICAgIGlmIChkZXN0UmVjdC55KCkgPCAwKQotICAgICAgICAgICAgICAgIENSQVNIKCk7
Ci0KLSAgICAgICAgICAgIC8vIE9mZnNldCBmcm9tIHBhaW50IHJlY3RhbmdsZSB0byB0aGlzIHRp
bGUncyBkaXJ0eSByZWN0YW5nbGUuCi0gICAgICAgICAgICBJbnRQb2ludCBwYWludE9mZnNldChz
b3VyY2VSZWN0LngoKSAtIG1fcGFpbnRSZWN0LngoKSwgc291cmNlUmVjdC55KCkgLSBtX3BhaW50
UmVjdC55KCkpOwotICAgICAgICAgICAgaWYgKHBhaW50T2Zmc2V0LngoKSA8IDApCi0gICAgICAg
ICAgICAgICAgQ1JBU0goKTsKLSAgICAgICAgICAgIGlmIChwYWludE9mZnNldC55KCkgPCAwKQot
ICAgICAgICAgICAgICAgIENSQVNIKCk7Ci0gICAgICAgICAgICBpZiAocGFpbnRPZmZzZXQueCgp
ICsgZGVzdFJlY3Qud2lkdGgoKSA+IG1fcGFpbnRSZWN0LndpZHRoKCkpCi0gICAgICAgICAgICAg
ICAgQ1JBU0goKTsKLSAgICAgICAgICAgIGlmIChwYWludE9mZnNldC55KCkgKyBkZXN0UmVjdC5o
ZWlnaHQoKSA+IG1fcGFpbnRSZWN0LmhlaWdodCgpKQotICAgICAgICAgICAgICAgIENSQVNIKCk7
Ci0KLSAgICAgICAgICAgIGhhbmRsZXIuaGFuZGxlKHRpbGUtPnRleHR1cmUoKSwgc291cmNlUmVj
dCwgZGVzdFJlY3QpOworICAgICAgICAgICAgaGFuZGxlci5oYW5kbGUodGlsZS0+dGV4dHVyZSgp
KTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTM2MiwxMSArMzM1LDI5IEBAIHZvaWQgVGlsZWRM
YXllckNocm9taXVtOjpwcmVwYXJlVG9VcGRhdGVUaWxlcyhib29sIGlkbGUsIGludCBsZWZ0LCBp
bnQgdG9wLCBpbnQKICAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSB0aGF0IHNvdXJjZVJlY3QgZG9l
c24ndCBleHRlbmQgb3V0c2lkZSBvZiBpdC4KICAgICAgICAgICAgIHNvdXJjZVJlY3QuaW50ZXJz
ZWN0KG1fcGFpbnRSZWN0KTsKIAotICAgICAgICAgICAgLy8gdXBkYXRlQ29tcG9zaXRvclJlc291
cmNlcygpIHVzZXMgbV91cGRhdGVSZWN0IHRvIGRldGVybWluZQotICAgICAgICAgICAgLy8gdGhl
IHRpbGVzIHRvIHVwZGF0ZSBzbyB3ZSBjYW4gY2xlYXIgdGhlIGRpcnR5IHJlY3RhbmdsZSBoZXJl
LgotICAgICAgICAgICAgdGlsZS0+Y2xlYXJEaXJ0eSgpOworICAgICAgICAgICAgY29uc3QgSW50
UG9pbnQgYW5jaG9yID0gbV90aWxlci0+dGlsZVJlY3QodGlsZSkubG9jYXRpb24oKTsKKyAgICAg
ICAgICAgIC8vIENhbGN1bGF0ZSB0aWxlLXNwYWNlIHJlY3RhbmdsZSB0byB1cGxvYWQgaW50by4K
KyAgICAgICAgICAgIEludFJlY3QgZGVzdFJlY3QgPSBJbnRSZWN0KEludFBvaW50KHNvdXJjZVJl
Y3QueCgpIC0gYW5jaG9yLngoKSwgc291cmNlUmVjdC55KCkgLSBhbmNob3IueSgpKSwgc291cmNl
UmVjdC5zaXplKCkpOworICAgICAgICAgICAgaWYgKGRlc3RSZWN0LngoKSA8IDApCisgICAgICAg
ICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAgIGlmIChkZXN0UmVjdC55KCkgPCAwKQorICAg
ICAgICAgICAgICAgIENSQVNIKCk7CiAKLSAgICAgICAgICAgIHRpbGUtPm1fdXBkYXRlUmVjdCA9
IHNvdXJjZVJlY3Q7CisgICAgICAgICAgICAvLyBPZmZzZXQgZnJvbSBwYWludCByZWN0YW5nbGUg
dG8gdGhpcyB0aWxlJ3MgZGlydHkgcmVjdGFuZ2xlLgorICAgICAgICAgICAgSW50UG9pbnQgcGFp
bnRPZmZzZXQoc291cmNlUmVjdC54KCkgLSBtX3BhaW50UmVjdC54KCksIHNvdXJjZVJlY3QueSgp
IC0gbV9wYWludFJlY3QueSgpKTsKKyAgICAgICAgICAgIGlmIChwYWludE9mZnNldC54KCkgPCAw
KQorICAgICAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgICAgICBpZiAocGFpbnRPZmZzZXQu
eSgpIDwgMCkKKyAgICAgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAgaWYgKHBhaW50
T2Zmc2V0LngoKSArIGRlc3RSZWN0LndpZHRoKCkgPiBtX3BhaW50UmVjdC53aWR0aCgpKQorICAg
ICAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgICAgICBpZiAocGFpbnRPZmZzZXQueSgpICsg
ZGVzdFJlY3QuaGVpZ2h0KCkgPiBtX3BhaW50UmVjdC5oZWlnaHQoKSkKKyAgICAgICAgICAgICAg
ICBDUkFTSCgpOworCisgICAgICAgICAgICB0aWxlLT50ZXh0dXJlKCktPnNldFVwZGF0ZVJlY3Qo
ZGVzdFJlY3QpOworICAgICAgICAgICAgdGlsZS0+dGV4dHVyZSgpLT5zZXRDb250ZW50T2Zmc2V0
KGFuY2hvcik7CisKKyAgICAgICAgICAgIHRpbGUtPmNsZWFyRGlydHkoKTsKICAgICAgICAgfQog
ICAgIH0KIH0KQEAgLTM4Miw3ICszNzMsNyBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6cHJl
cGFyZVRvVXBkYXRlKGNvbnN0IEludFJlY3QmIGxheWVyUmVjdCkKICAgICAvLyBSZXNldCBtX3Vw
ZGF0ZVJlY3QgZm9yIGFsbCB0aWxlcy4KICAgICBmb3IgKENDTGF5ZXJUaWxpbmdEYXRhOjpUaWxl
TWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0gbV90aWxlci0+dGlsZXMoKS5iZWdpbigpOyBpdGVy
ICE9IG1fdGlsZXItPnRpbGVzKCkuZW5kKCk7ICsraXRlcikgewogICAgICAgICBVcGRhdGFibGVU
aWxlKiB0aWxlID0gc3RhdGljX2Nhc3Q8VXBkYXRhYmxlVGlsZSo+KGl0ZXItPnNlY29uZC5nZXQo
KSk7Ci0gICAgICAgIHRpbGUtPm1fdXBkYXRlUmVjdCA9IEludFJlY3QoKTsKKyAgICAgICAgdGls
ZS0+dGV4dHVyZSgpLT5zZXRVcGRhdGVSZWN0KEludFJlY3QoKSk7CiAgICAgfQogCiAgICAgdXBk
YXRlQm91bmRzKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5oCmluZGV4IDhjNjQ3NWIuLmFl
OWI1NDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5oCkBAIC0yOCw2ICsyOCw3IEBACiAK
ICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAKKyNpbmNsdWRlICJDYW52YXNMYXll
clRleHR1cmVVcGRhdGVyLmgiCiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUg
IkxheWVyVGV4dHVyZVVwZGF0ZXIuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyVGlsaW5nRGF0YS5o
IgpAQCAtMzcsMTggKzM4LDE3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIFVwZGF0YWJs
ZVRpbGUgOiBwdWJsaWMgQ0NMYXllclRpbGluZ0RhdGE6OlRpbGUgewogICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKFVwZGF0YWJsZVRpbGUpOwogcHVibGljOgotICAgIGV4cGxpY2l0IFVwZGF0YWJs
ZVRpbGUoUGFzc093blB0cjxMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlPiB0ZXh0dXJlKSA6
IG1fdGV4dHVyZSh0ZXh0dXJlKSB7IH0KKyAgICBleHBsaWNpdCBVcGRhdGFibGVUaWxlKFBhc3NP
d25QdHI8Q2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZT4gdGV4dHVyZSkgOiBtX3Rl
eHR1cmUodGV4dHVyZSkgeyB9CiAKLSAgICBMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlKiB0
ZXh0dXJlKCkgeyByZXR1cm4gbV90ZXh0dXJlLmdldCgpOyB9CisgICAgQ2FudmFzTGF5ZXJUZXh0
dXJlVXBkYXRlcjo6VGV4dHVyZSogdGV4dHVyZSgpIHsgcmV0dXJuIG1fdGV4dHVyZS5nZXQoKTsg
fQogICAgIE1hbmFnZWRUZXh0dXJlKiBtYW5hZ2VkVGV4dHVyZSgpIHsgcmV0dXJuIG1fdGV4dHVy
ZS0+dGV4dHVyZSgpOyB9CiAKICAgICBib29sIGlzRGlydHkoKSBjb25zdCB7IHJldHVybiAhbV9k
aXJ0eVJlY3QuaXNFbXB0eSgpOyB9CiAgICAgdm9pZCBjbGVhckRpcnR5KCkgeyBtX2RpcnR5UmVj
dCA9IEludFJlY3QoKTsgfQogCiAgICAgSW50UmVjdCBtX2RpcnR5UmVjdDsKLSAgICBJbnRSZWN0
IG1fdXBkYXRlUmVjdDsKIHByaXZhdGU6Ci0gICAgT3duUHRyPExheWVyVGV4dHVyZVVwZGF0ZXI6
OlRleHR1cmU+IG1fdGV4dHVyZTsKKyAgICBPd25QdHI8Q2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRl
cjo6VGV4dHVyZT4gbV90ZXh0dXJlOwogfTsKIAogY2xhc3MgVGlsZWRMYXllckNocm9taXVtIDog
cHVibGljIExheWVyQ2hyb21pdW0gewpAQCAtODgsNyArODgsNyBAQCBwcm90ZWN0ZWQ6CiAgICAg
dm9pZCBzZXRCb3JkZXJUZXhlbE9wdGlvbihDQ0xheWVyVGlsaW5nRGF0YTo6Qm9yZGVyVGV4ZWxP
cHRpb24pOwogCiAgICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRleHR1cmVVcGRhdGVyKGNvbnN0IEND
TGF5ZXJUcmVlSG9zdCopID0gMDsKLSAgICB2aXJ0dWFsIExheWVyVGV4dHVyZVVwZGF0ZXIqIHRl
eHR1cmVVcGRhdGVyKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgQ2FudmFzTGF5ZXJUZXh0dXJl
VXBkYXRlciogdGV4dHVyZVVwZGF0ZXIoKSBjb25zdCA9IDA7CiAKICAgICAvLyBTZXQgaW52YWxp
ZGF0aW9ucyB0byBiZSBwb3RlbnRpYWxseSByZXBhaW50ZWQgZHVyaW5nIHVwZGF0ZSgpLgogICAg
IHZvaWQgaW52YWxpZGF0ZVJlY3QoY29uc3QgSW50UmVjdCYgbGF5ZXJSZWN0KTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyZWVTeW5jaHJv
bml6ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJl
ZVN5bmNocm9uaXplci5jcHAKaW5kZXggNGQ5Y2UxOC4uZGI5MGM5NyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJlZVN5bmNocm9uaXplci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJlZVN5
bmNocm9uaXplci5jcHAKQEAgLTEwMCw0ICsxMDAsMTQgQEAgUGFzc1JlZlB0cjxDQ0xheWVySW1w
bD4gVHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVlcyhMYXllckNocm9taXVtKiBsYXll
clIKICAgICByZXR1cm4gc3luY2hyb25pemVUcmVlc0ludGVybmFsPExheWVyQ2hyb21pdW0sIEND
TGF5ZXJJbXBsPihsYXllclJvb3QsIG9sZENDTGF5ZXJJbXBsUm9vdCk7CiB9CiAKK1Bhc3NSZWZQ
dHI8Q0NMYXllckltcGw+IFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMoQ0NMYXll
ckRhdGEqIGxheWVyUm9vdCwgUGFzc1JlZlB0cjxDQ0xheWVySW1wbD4gb2xkQ0NMYXllckltcGxS
b290KQoreworICAgIHJldHVybiBzeW5jaHJvbml6ZVRyZWVzSW50ZXJuYWw8Q0NMYXllckRhdGEs
IENDTGF5ZXJJbXBsPihsYXllclJvb3QsIG9sZENDTGF5ZXJJbXBsUm9vdCk7Cit9CisKK1Bhc3NS
ZWZQdHI8Q0NMYXllckRhdGE+IFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMoTGF5
ZXJDaHJvbWl1bSogbGF5ZXJSb290KQoreworICAgIHJldHVybiBzeW5jaHJvbml6ZVRyZWVzSW50
ZXJuYWw8TGF5ZXJDaHJvbWl1bSwgQ0NMYXllckRhdGE+KGxheWVyUm9vdCwgMCk7Cit9CisKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL1RyZWVTeW5jaHJvbml6ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyZWVTeW5jaHJvbml6ZXIuaAppbmRleCBkNWIwOWVk
Li4yYWYyODc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9UcmVlU3luY2hyb25pemVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vVHJlZVN5bmNocm9uaXplci5oCkBAIC0zNCw2ICszNCw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ0NMYXllcjsKIGNsYXNzIENDTGF5ZXJJbXBsOwor
Y2xhc3MgQ0NMYXllckRhdGE7CiBjbGFzcyBMYXllckNocm9taXVtOwogCiBjbGFzcyBUcmVlU3lu
Y2hyb25pemVyIHsKQEAgLTQzLDYgKzQ0LDE0IEBAIHB1YmxpYzoKICAgICAvLyBvZiB0aGUgTGF5
ZXJDaHJvbWl1bSB0cmVlLCByZXVzaW5nIHRoZSBDQ0xheWVySW1wbHMgaW4gdGhlIHRyZWUgcHJv
dmlkZWQgYnkgb2xkQ0NMYXllckltcGxSb290IGlmIHBvc3NpYmxlLgogICAgIHN0YXRpYyBQYXNz
UmVmUHRyPENDTGF5ZXJJbXBsPiBzeW5jaHJvbml6ZVRyZWVzKExheWVyQ2hyb21pdW0qIGxheWVy
Um9vdCwgUGFzc1JlZlB0cjxDQ0xheWVySW1wbD4gb2xkQ0NMYXllckltcGxSb290KTsKIAorICAg
IC8vIEFjY2VwdHMgYSBDQ0xheWVyRGF0YSB0cmVlIGFuZCByZXR1cm5zIGEgcmVmZXJlbmNlIHRv
IGEgQ0NMYXllckltcGwgdHJlZSB0aGF0IGR1cGxpY2F0ZXMgdGhlIHN0cnVjdHVyZQorICAgIC8v
IG9mIHRoZSBDQ0xheWVyRGF0YSB0cmVlLCByZXVzaW5nIHRoZSBDQ0xheWVySW1wbHMgaW4gdGhl
IHRyZWUgcHJvdmlkZWQgYnkgb2xkQ0NMYXllckltcGxSb290IGlmIHBvc3NpYmxlLgorICAgIHN0
YXRpYyBQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBzeW5jaHJvbml6ZVRyZWVzKENDTGF5ZXJEYXRh
KiBsYXllclJvb3QsIFBhc3NSZWZQdHI8Q0NMYXllckltcGw+IG9sZENDTGF5ZXJJbXBsUm9vdCk7
CisKKyAgICAvLyBBY2NlcHRzIGEgTGF5ZXJDaHJvbWl1bSB0cmVlIGFuZCByZXR1cm5zIGEgcmVm
ZXJlbmNlIHRvIGEgQ0NMYXllckRhdGEgdHJlZSB0aGF0IGR1cGxpY2F0ZXMgdGhlIHN0cnVjdHVy
ZQorICAgIC8vIG9mIHRoZSBMYXllckNocm9taXVtIHRyZWUuCisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8Q0NMYXllckRhdGE+IHN5bmNocm9uaXplVHJlZXMoTGF5ZXJDaHJvbWl1bSogbGF5ZXJSb290
KTsKKwogcHJpdmF0ZToKICAgICBUcmVlU3luY2hyb25pemVyKCk7IC8vIE5vdCBpbnN0YW50aWFi
bGUuCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uY3BwCmluZGV4IDViMzhmYzUuLmRhZWU2
NmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1dlYkdMTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmNwcApAQCAtNTIsNyArNTIsMTIgQEAg
V2ViR0xMYXllckNocm9taXVtOjpVcGRhdGVyVGV4dHVyZTo6flVwZGF0ZXJUZXh0dXJlKCkKIHsK
IH0KIAotdm9pZCBXZWJHTExheWVyQ2hyb21pdW06OlVwZGF0ZXJUZXh0dXJlOjp1cGRhdGVSZWN0
KEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiAvKiBzb3VyY2VSZWN0
ICovLCBjb25zdCBJbnRSZWN0JiAvKiBkZXN0UmVjdCAqLykKK2Jvb2wgV2ViR0xMYXllckNocm9t
aXVtOjpVcGRhdGVyVGV4dHVyZTo6bmVlZFByZXBhcmUoKQoreworICAgIHJldHVybiBtX2xheWVy
LT5uZWVkc0Rpc3BsYXkoKTsKK30KKwordm9pZCBXZWJHTExheWVyQ2hyb21pdW06OlVwZGF0ZXJU
ZXh0dXJlOjpwcmVwYXJlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBUZXh0dXJlQWxsb2Nh
dG9yKikKIHsKICAgICBtX2xheWVyLT51cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKGNvbnRleHQp
OwogfQpAQCAtMTExLDcgKzExNiw3IEBAIHZvaWQgV2ViR0xMYXllckNocm9taXVtOjp1cGRhdGVD
b21wb3NpdG9yUmVzb3VyY2VzKEdyYXBoaWNzQ29udGV4dDNEKiByZW5kZXJlckNvCiAKIHZvaWQg
V2ViR0xMYXllckNocm9taXVtOjpmb3JFYWNoQ29tcG9zaXRvclJlc291cmNlKExheWVyVGV4dHVy
ZVVwZGF0ZXI6OkhhbmRsZXImIGhhbmRsZXIpCiB7Ci0gICAgaGFuZGxlci5oYW5kbGUobV91cGRh
dGVyVGV4dHVyZS5nZXQoKSwgSW50UmVjdCgpLCBJbnRSZWN0KCkpOworICAgIGhhbmRsZXIuaGFu
ZGxlKG1fdXBkYXRlclRleHR1cmUuZ2V0KCkpOwogfQogCiBib29sIFdlYkdMTGF5ZXJDaHJvbWl1
bTo6cGFpbnRSZW5kZXJlZFJlc3VsdHNUb0NhbnZhcyhJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9X
ZWJHTExheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5oCmluZGV4IDllYjQyNjIuLmQzZmFkZjIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5
ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5oCkBAIC01NSw3ICs1NSw4IEBAIHB1YmxpYzoKIAogICAg
ICAgICB2aXJ0dWFsIH5VcGRhdGVyVGV4dHVyZSgpOwogCi0gICAgICAgIHZpcnR1YWwgdm9pZCB1
cGRhdGVSZWN0KEdyYXBoaWNzQ29udGV4dDNEKiwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwg
Y29uc3QgSW50UmVjdCYgZGVzdFJlY3QpOworICAgICAgICB2aXJ0dWFsIGJvb2wgbmVlZFByZXBh
cmUoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHByZXBhcmUoR3JhcGhpY3NDb250ZXh0M0QqLCBU
ZXh0dXJlQWxsb2NhdG9yKik7CiAKICAgICBwcml2YXRlOgogICAgICAgICBleHBsaWNpdCBVcGRh
dGVyVGV4dHVyZShXZWJHTExheWVyQ2hyb21pdW0qKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQ2FudmFzTGF5ZXJJbXBsLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQ2FudmFzTGF5
ZXJJbXBsLmNwcAppbmRleCA2ZWNkZDkwLi42ZTMwY2RjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0NhbnZhc0xheWVySW1wbC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52
YXNMYXllckltcGwuY3BwCkBAIC0zOCw5ICszOCw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Q0NDYW52YXNMYXllckltcGw6OkNDQ2FudmFzTGF5ZXJJbXBsKGludCBpZCkKICAgICA6IENDTGF5
ZXJJbXBsKGlkKQotICAgICwgbV90ZXh0dXJlSWQoMCkKLSAgICAsIG1faGFzQWxwaGEodHJ1ZSkK
LSAgICAsIG1fcHJlbXVsdGlwbGllZEFscGhhKHRydWUpCiB7CiB9CiAKQEAgLTg1LDYgKzgyLDI0
IEBAIHZvaWQgQ0NDYW52YXNMYXllckltcGw6OmR1bXBMYXllclByb3BlcnRpZXMoVGV4dFN0cmVh
bSYgdHMsIGludCBpbmRlbnQpIGNvbnN0CiAgICAgQ0NMYXllckltcGw6OmR1bXBMYXllclByb3Bl
cnRpZXModHMsIGluZGVudCk7CiB9CiAKK0NDQ2FudmFzTGF5ZXJEYXRhOjpDQ0NhbnZhc0xheWVy
RGF0YShpbnQgaWQpCisgICAgOiBDQ0xheWVyRGF0YShpZCkKK3sKK30KKworQ0NDYW52YXNMYXll
ckRhdGE6On5DQ0NhbnZhc0xheWVyRGF0YSgpCit7Cit9CisKK3ZvaWQgQ0NDYW52YXNMYXllckRh
dGE6OnB1c2hQcm9wZXJ0aWVzKGNvbnN0IENDQ2FudmFzTGF5ZXJEYXRhKiBmcm9tLCBDQ0xheWVy
KiB0bykKK3sKKyAgICBDQ0NhbnZhc0xheWVySW1wbCogbGF5ZXIgPSBzdGF0aWNfY2FzdDxDQ0Nh
bnZhc0xheWVySW1wbCo+KHRvKTsKKworICAgIGxheWVyLT5zZXRUZXh0dXJlSWQoZnJvbS0+bV90
ZXh0dXJlSWQpOworICAgIGxheWVyLT5zZXRIYXNBbHBoYShmcm9tLT5tX2hhc0FscGhhKTsKKyAg
ICBsYXllci0+c2V0UHJlbXVsdGlwbGllZEFscGhhKGZyb20tPm1fcHJlbXVsdGlwbGllZEFscGhh
KTsKK30KKwogfQogCiAjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0ND
YW52YXNMYXllckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDQ2FudmFzTGF5ZXJJbXBsLmgKaW5kZXggMjc1YmY3Yy4uNmVlMzk3ZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52
YXNMYXllckltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0NhbnZhc0xheWVySW1wbC5oCkBAIC0zMiw3ICszMiwyMSBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLWNsYXNzIENDQ2FudmFzTGF5ZXJJbXBsIDogcHVibGljIENDTGF5ZXJJ
bXBsIHsKK2NsYXNzIENDQ2FudmFzTGF5ZXJQcm9wZXJ0aWVzIHsKK3Byb3RlY3RlZDoKKyAgICBl
eHBsaWNpdCBDQ0NhbnZhc0xheWVyUHJvcGVydGllcygpCisgICAgICAgIDogbV90ZXh0dXJlSWQo
MCkKKyAgICAgICAgLCBtX2hhc0FscGhhKHRydWUpCisgICAgICAgICwgbV9wcmVtdWx0aXBsaWVk
QWxwaGEodHJ1ZSkKKyAgICB7CisgICAgfQorCisgICAgdW5zaWduZWQgbV90ZXh0dXJlSWQ7Cisg
ICAgYm9vbCBtX2hhc0FscGhhOworICAgIGJvb2wgbV9wcmVtdWx0aXBsaWVkQWxwaGE7Cit9Owor
CitjbGFzcyBDQ0NhbnZhc0xheWVySW1wbCA6IHB1YmxpYyBDQ0xheWVySW1wbCwgcHVibGljIEND
Q2FudmFzTGF5ZXJQcm9wZXJ0aWVzIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxD
Q0NhbnZhc0xheWVySW1wbD4gY3JlYXRlKGludCBpZCkKICAgICB7CkBAIC01NCwxMCArNjgsMzUg
QEAgcHJpdmF0ZToKICAgICBleHBsaWNpdCBDQ0NhbnZhc0xheWVySW1wbChpbnQpOwogCiAgICAg
dmlydHVhbCBjb25zdCBjaGFyKiBsYXllclR5cGVBc1N0cmluZygpIGNvbnN0IHsgcmV0dXJuICJD
YW52YXNMYXllciI7IH0KK307CiAKLSAgICB1bnNpZ25lZCBtX3RleHR1cmVJZDsKLSAgICBib29s
IG1faGFzQWxwaGE7Ci0gICAgYm9vbCBtX3ByZW11bHRpcGxpZWRBbHBoYTsKK2NsYXNzIENDQ2Fu
dmFzTGF5ZXJEYXRhIDogcHVibGljIENDTGF5ZXJEYXRhLCBwdWJsaWMgQ0NDYW52YXNMYXllclBy
b3BlcnRpZXMgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPENDQ2FudmFzTGF5ZXJE
YXRhPiBjcmVhdGUoaW50IGlkKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBD
Q0NhbnZhc0xheWVyRGF0YShpZCkpOworICAgIH0KKyAgICBzdGF0aWMgdm9pZCBwdXNoUHJvcGVy
dGllcyhjb25zdCBDQ0NhbnZhc0xheWVyRGF0YSosIENDTGF5ZXIqKTsKKworICAgIHZpcnR1YWwg
fkNDQ2FudmFzTGF5ZXJEYXRhKCk7CisKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q0NMYXllcj4g
Y3JlYXRlQ0NMYXllcigpCisgICAgeworICAgICAgICByZXR1cm4gQ0NDYW52YXNMYXllckltcGw6
OmNyZWF0ZShpZCgpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcHVzaFByb3BlcnRpZXNU
byhDQ0xheWVyKiBsYXllcikKKyAgICB7CisgICAgICAgIENDTGF5ZXJEYXRhOjpwdXNoUHJvcGVy
dGllcyh0aGlzLCBsYXllcik7CisgICAgICAgIHB1c2hQcm9wZXJ0aWVzKHRoaXMsIGxheWVyKTsK
KyAgICB9CisKKyAgICB2b2lkIHNldFRleHR1cmVJZCh1bnNpZ25lZCBpZCkgeyBtX3RleHR1cmVJ
ZCA9IGlkOyB9CisgICAgdm9pZCBzZXRIYXNBbHBoYShib29sIGhhc0FscGhhKSB7IG1faGFzQWxw
aGEgPSBoYXNBbHBoYTsgfQorICAgIHZvaWQgc2V0UHJlbXVsdGlwbGllZEFscGhhKGJvb2wgcHJl
bXVsdGlwbGllZEFscGhhKSB7IG1fcHJlbXVsdGlwbGllZEFscGhhID0gcHJlbXVsdGlwbGllZEFs
cGhhOyB9CisKK3Byb3RlY3RlZDoKKyAgICBleHBsaWNpdCBDQ0NhbnZhc0xheWVyRGF0YShpbnQp
OwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCmluZGV4IDI5YzMwNjAuLmEyYzc3OTQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKQEAgLTQwLDMzICs0MCwyMCBAQAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBDQ0xheWVySW1wbDo6Q0NMYXllckltcGwoaW50IGlkKQotICAgIDogbV9w
YXJlbnQoMCkKKyAgICA6IENDTGF5ZXJQcm9wZXJ0aWVzKCkKKyAgICAsIG1fcGFyZW50KDApCiAg
ICAgLCBtX2xheWVySWQoaWQpCi0gICAgLCBtX2FuY2hvclBvaW50KDAuNSwgMC41KQotICAgICwg
bV9hbmNob3JQb2ludFooMCkKLSAgICAsIG1fc2Nyb2xsYWJsZShmYWxzZSkKLSAgICAsIG1fZG91
YmxlU2lkZWQodHJ1ZSkKICAgICAsIG1fbGF5ZXJQcm9wZXJ0eUNoYW5nZWQoZmFsc2UpCi0gICAg
LCBtX21hc2tzVG9Cb3VuZHMoZmFsc2UpCi0gICAgLCBtX29wYXF1ZShmYWxzZSkKLSAgICAsIG1f
b3BhY2l0eSgxLjApCi0gICAgLCBtX3ByZXNlcnZlczNEKGZhbHNlKQogICAgICwgbV91c2VzTGF5
ZXJDbGlwcGluZyhmYWxzZSkKLSAgICAsIG1faXNOb25Db21wb3NpdGVkQ29udGVudChmYWxzZSkK
LSAgICAsIG1fZHJhd3NDb250ZW50KGZhbHNlKQogICAgICwgbV9wYWdlU2NhbGVEZWx0YSgxKQog
ICAgICwgbV90YXJnZXRSZW5kZXJTdXJmYWNlKDApCiAgICAgLCBtX2RyYXdEZXB0aCgwKQogICAg
ICwgbV9kcmF3T3BhY2l0eSgwKQotICAgICwgbV9kZWJ1Z0JvcmRlckNvbG9yKDAsIDAsIDAsIDAp
Ci0gICAgLCBtX2RlYnVnQm9yZGVyV2lkdGgoMCkKIHsKLSAgICBBU1NFUlQoQ0NQcm94eTo6aXNJ
bXBsVGhyZWFkKCkpOwogfQogCiBDQ0xheWVySW1wbDo6fkNDTGF5ZXJJbXBsKCkKIHsKLSAgICBB
U1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOwogfQogCiB2b2lkIENDTGF5ZXJJbXBsOjph
ZGRDaGlsZChQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBjaGlsZCkKQEAgLTQ3MSw3ICs0NTgsNTgg
QEAgdm9pZCBDQ0xheWVySW1wbDo6c2V0RG91YmxlU2lkZWQoYm9vbCBkb3VibGVTaWRlZCkKICAg
ICBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWRGb3JTdWJ0cmVlKCk7CiB9CiAKK0NDTGF5ZXJEYXRh
OjpDQ0xheWVyRGF0YShpbnQgaWQpCisgICAgOiBDQ0xheWVyUHJvcGVydGllcygpCisgICAgLCBt
X3BhcmVudCgwKQorICAgICwgbV9sYXllcklkKGlkKQoreworfQorCitDQ0xheWVyRGF0YTo6fkND
TGF5ZXJEYXRhKCkKK3sKK30KKwordm9pZCBDQ0xheWVyRGF0YTo6YWRkQ2hpbGQoUGFzc1JlZlB0
cjxDQ0xheWVyRGF0YT4gY2hpbGQpCit7CisgICAgY2hpbGQtPnNldFBhcmVudCh0aGlzKTsKKyAg
ICBtX2NoaWxkcmVuLmFwcGVuZChjaGlsZCk7CiB9CiAKK3ZvaWQgQ0NMYXllckRhdGE6OmNsZWFy
Q2hpbGRMaXN0KCkKK3sKKyAgICBtX2NoaWxkcmVuLmNsZWFyKCk7Cit9CisKK3ZvaWQgQ0NMYXll
ckRhdGE6OnB1c2hQcm9wZXJ0aWVzKGNvbnN0IENDTGF5ZXJEYXRhKiBmcm9tLCBDQ0xheWVyKiB0
bykKK3sKKyAgICBDQ0xheWVySW1wbCogbGF5ZXIgPSBzdGF0aWNfY2FzdDxDQ0xheWVySW1wbCo+
KHRvKTsKKworICAgIGxheWVyLT5zZXRBbmNob3JQb2ludChmcm9tLT5tX2FuY2hvclBvaW50KTsK
KyAgICBsYXllci0+c2V0QW5jaG9yUG9pbnRaKGZyb20tPm1fYW5jaG9yUG9pbnRaKTsKKyAgICBs
YXllci0+c2V0QmFja2dyb3VuZENvbG9yKGZyb20tPm1fYmFja2dyb3VuZENvbG9yKTsKKyAgICBs
YXllci0+c2V0Qm91bmRzKGZyb20tPm1fYm91bmRzKTsKKyAgICBsYXllci0+c2V0Q29udGVudEJv
dW5kcyhmcm9tLT5tX2NvbnRlbnRCb3VuZHMpOworICAgIGxheWVyLT5zZXREZWJ1Z0JvcmRlckNv
bG9yKGZyb20tPm1fZGVidWdCb3JkZXJDb2xvcik7CisgICAgbGF5ZXItPnNldERlYnVnQm9yZGVy
V2lkdGgoZnJvbS0+bV9kZWJ1Z0JvcmRlcldpZHRoKTsKKyAgICBsYXllci0+c2V0RG91YmxlU2lk
ZWQoZnJvbS0+bV9kb3VibGVTaWRlZCk7CisgICAgbGF5ZXItPnNldERyYXdzQ29udGVudChmcm9t
LT5tX2RyYXdzQ29udGVudCk7CisgICAgbGF5ZXItPnNldElzTm9uQ29tcG9zaXRlZENvbnRlbnQo
ZnJvbS0+bV9pc05vbkNvbXBvc2l0ZWRDb250ZW50KTsKKyAgICBsYXllci0+c2V0TWFza3NUb0Jv
dW5kcyhmcm9tLT5tX21hc2tzVG9Cb3VuZHMpOworICAgIGxheWVyLT5zZXRTY3JvbGxhYmxlKGZy
b20tPm1fc2Nyb2xsYWJsZSk7CisgICAgbGF5ZXItPnNldE5hbWUoZnJvbS0+bV9uYW1lKTsKKyAg
ICBsYXllci0+c2V0T3BhcXVlKGZyb20tPm1fb3BhcXVlKTsKKyAgICBsYXllci0+c2V0T3BhY2l0
eShmcm9tLT5tX29wYWNpdHkpOworICAgIGxheWVyLT5zZXRQb3NpdGlvbihmcm9tLT5tX3Bvc2l0
aW9uKTsKKyAgICBsYXllci0+c2V0UHJlc2VydmVzM0QoZnJvbS0+bV9wcmVzZXJ2ZXMzRCk7Cisg
ICAgbGF5ZXItPnNldFNjcm9sbFBvc2l0aW9uKGZyb20tPm1fc2Nyb2xsUG9zaXRpb24pOworICAg
IGxheWVyLT5zZXRTdWJsYXllclRyYW5zZm9ybShmcm9tLT5tX3N1YmxheWVyVHJhbnNmb3JtKTsK
KyAgICBsYXllci0+c2V0VHJhbnNmb3JtKGZyb20tPm1fdHJhbnNmb3JtKTsKKyAgICBsYXllci0+
c2V0VXBkYXRlUmVjdChmcm9tLT5tX3VwZGF0ZVJlY3QpOworCisgICAgbGF5ZXItPnNldFNjcm9s
bERlbHRhKGxheWVyLT5zY3JvbGxEZWx0YSgpIC0gbGF5ZXItPnNlbnRTY3JvbGxEZWx0YSgpKTsK
KyAgICBsYXllci0+c2V0U2VudFNjcm9sbERlbHRhKEludFNpemUoKSk7Cit9CisKK30KIAogI2Vu
ZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCmlu
ZGV4IDJjNjA1M2IuLjc2MGE0MjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaApAQCAtNDUsNyArNDUs
NTMgQEAgY2xhc3MgQ0NMYXllclNvcnRlcjsKIGNsYXNzIExheWVyQ2hyb21pdW07CiBjbGFzcyBM
YXllclJlbmRlcmVyQ2hyb21pdW07CiAKLWNsYXNzIENDTGF5ZXJJbXBsIDogcHVibGljIENDTGF5
ZXIgeworY2xhc3MgQ0NMYXllclByb3BlcnRpZXMgeworcHJvdGVjdGVkOgorICAgIGV4cGxpY2l0
IENDTGF5ZXJQcm9wZXJ0aWVzKCkKKyAgICAgICAgOiBtX2FuY2hvclBvaW50KDAuNSwgMC41KQor
ICAgICAgICAsIG1fYW5jaG9yUG9pbnRaKDApCisgICAgICAgICwgbV9kZWJ1Z0JvcmRlcldpZHRo
KDApCisgICAgICAgICwgbV9kb3VibGVTaWRlZCh0cnVlKQorICAgICAgICAsIG1fZHJhd3NDb250
ZW50KGZhbHNlKQorICAgICAgICAsIG1faXNOb25Db21wb3NpdGVkQ29udGVudChmYWxzZSkKKyAg
ICAgICAgLCBtX21hc2tzVG9Cb3VuZHMoZmFsc2UpCisgICAgICAgICwgbV9vcGFxdWUoZmFsc2Up
CisgICAgICAgICwgbV9vcGFjaXR5KDEuMCkKKyAgICAgICAgLCBtX3ByZXNlcnZlczNEKGZhbHNl
KQorICAgICAgICAsIG1fc2Nyb2xsYWJsZShmYWxzZSkKKyAgICB7CisgICAgfQorCisgICAgRmxv
YXRQb2ludCBtX2FuY2hvclBvaW50OworICAgIGZsb2F0IG1fYW5jaG9yUG9pbnRaOworICAgIENv
bG9yIG1fYmFja2dyb3VuZENvbG9yOworICAgIEludFNpemUgbV9ib3VuZHM7CisgICAgSW50U2l6
ZSBtX2NvbnRlbnRCb3VuZHM7CisgICAgLy8gRGVidWcgYm9yZGVycy4KKyAgICBDb2xvciBtX2Rl
YnVnQm9yZGVyQ29sb3I7CisgICAgZmxvYXQgbV9kZWJ1Z0JvcmRlcldpZHRoOworICAgIC8vIFdo
ZXRoZXIgdGhlICJiYWNrIiBvZiB0aGlzIGxheWVyIHNob3VsZCBkcmF3LgorICAgIGJvb2wgbV9k
b3VibGVTaWRlZDsKKyAgICBib29sIG1fZHJhd3NDb250ZW50OworICAgIGJvb2wgbV9pc05vbkNv
bXBvc2l0ZWRDb250ZW50OworICAgIGJvb2wgbV9tYXNrc1RvQm91bmRzOworICAgIFN0cmluZyBt
X25hbWU7CisgICAgYm9vbCBtX29wYXF1ZTsKKyAgICBmbG9hdCBtX29wYWNpdHk7CisgICAgRmxv
YXRQb2ludCBtX3Bvc2l0aW9uOworICAgIGJvb2wgbV9wcmVzZXJ2ZXMzRDsKKyAgICBib29sIG1f
c2Nyb2xsYWJsZTsKKyAgICBJbnRTaXplIG1fc2Nyb2xsRGVsdGE7CisgICAgSW50UG9pbnQgbV9z
Y3JvbGxQb3NpdGlvbjsKKyAgICBJbnRTaXplIG1fc2VudFNjcm9sbERlbHRhOworICAgIFRyYW5z
Zm9ybWF0aW9uTWF0cml4IG1fc3VibGF5ZXJUcmFuc2Zvcm07CisgICAgVHJhbnNmb3JtYXRpb25N
YXRyaXggbV90cmFuc2Zvcm07CisgICAgLy8gUmVjdCBpbmRpY2F0aW5nIHdoYXQgd2FzIHJlcGFp
bnRlZC91cGRhdGVkIGR1cmluZyB1cGRhdGUuCisgICAgLy8gTm90ZSB0aGF0IHBsdWdpbiBsYXll
cnMgYnlwYXNzIHRoaXMgYW5kIGxlYXZlIGl0IGVtcHR5LgorICAgIEZsb2F0UmVjdCBtX3VwZGF0
ZVJlY3Q7Cit9OworCitjbGFzcyBDQ0xheWVySW1wbCA6IHB1YmxpYyBDQ0xheWVyLCBwdWJsaWMg
Q0NMYXllclByb3BlcnRpZXMgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPENDTGF5
ZXJJbXBsPiBjcmVhdGUoaW50IGlkKQogICAgIHsKQEAgLTIyNSwzNiArMjcxLDEzIEBAIHByaXZh
dGU6CiAgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBtX3JlcGxpY2FMYXllcjsKICAgICBpbnQgbV9s
YXllcklkOwogCi0gICAgLy8gUHJvcGVydGllcyBzeW5jaHJvbml6ZWQgZnJvbSB0aGUgYXNzb2Np
YXRlZCBMYXllckNocm9taXVtLgotICAgIEZsb2F0UG9pbnQgbV9hbmNob3JQb2ludDsKLSAgICBm
bG9hdCBtX2FuY2hvclBvaW50WjsKLSAgICBJbnRTaXplIG1fYm91bmRzOwotICAgIEludFNpemUg
bV9jb250ZW50Qm91bmRzOwotICAgIEludFBvaW50IG1fc2Nyb2xsUG9zaXRpb247Ci0gICAgYm9v
bCBtX3Njcm9sbGFibGU7Ci0gICAgQ29sb3IgbV9iYWNrZ3JvdW5kQ29sb3I7Ci0KLSAgICAvLyBX
aGV0aGVyIHRoZSAiYmFjayIgb2YgdGhpcyBsYXllciBzaG91bGQgZHJhdy4KLSAgICBib29sIG1f
ZG91YmxlU2lkZWQ7Ci0KICAgICAvLyBUcmFja3MgaWYgZHJhd2luZy1yZWxhdGVkIHByb3BlcnRp
ZXMgaGF2ZSBjaGFuZ2VkIHNpbmNlIGxhc3QgcmVkcmF3LgogICAgIGJvb2wgbV9sYXllclByb3Bl
cnR5Q2hhbmdlZDsKIAogICAgIEludFJlY3QgbV92aXNpYmxlTGF5ZXJSZWN0OwotICAgIGJvb2wg
bV9tYXNrc1RvQm91bmRzOwotICAgIGJvb2wgbV9vcGFxdWU7Ci0gICAgZmxvYXQgbV9vcGFjaXR5
OwotICAgIEZsb2F0UG9pbnQgbV9wb3NpdGlvbjsKLSAgICBib29sIG1fcHJlc2VydmVzM0Q7Ci0g
ICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV9zdWJsYXllclRyYW5zZm9ybTsKLSAgICBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBtX3RyYW5zZm9ybTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX3pv
b21BbmltYXRvclRyYW5zZm9ybTsKICAgICBib29sIG1fdXNlc0xheWVyQ2xpcHBpbmc7Ci0gICAg
Ym9vbCBtX2lzTm9uQ29tcG9zaXRlZENvbnRlbnQ7Ci0KLSAgICBib29sIG1fZHJhd3NDb250ZW50
OwogCi0gICAgSW50U2l6ZSBtX3Njcm9sbERlbHRhOwotICAgIEludFNpemUgbV9zZW50U2Nyb2xs
RGVsdGE7CiAgICAgSW50U2l6ZSBtX21heFNjcm9sbFBvc2l0aW9uOwogICAgIGZsb2F0IG1fcGFn
ZVNjYWxlRGVsdGE7CiAKQEAgLTI2NCw4ICsyODcsNiBAQCBwcml2YXRlOgogICAgIGludCBtX2Rl
YnVnSUQ7CiAjZW5kaWYKIAotICAgIFN0cmluZyBtX25hbWU7Ci0KICAgICAvLyBSZW5kZXIgc3Vy
ZmFjZSB0aGlzIGxheWVyIGRyYXdzIGludG8uIFRoaXMgaXMgYSBzdXJmYWNlIHRoYXQgY2FuIGJl
bG9uZwogICAgIC8vIGVpdGhlciB0byB0aGlzIGxheWVyIChpZiBtX3RhcmdldFJlbmRlclN1cmZh
Y2UgPT0gbV9yZW5kZXJTdXJmYWNlKSBvcgogICAgIC8vIHRvIGFuIGFuY2VzdG9yIG9mIHRoaXMg
bGF5ZXIuIFRoZSB0YXJnZXQgcmVuZGVyIHN1cmZhY2UgZGV0ZXJtaW5lcyB0aGUKQEAgLTI3Nywx
MCArMjk4LDYgQEAgcHJpdmF0ZToKICAgICBmbG9hdCBtX2RyYXdEZXB0aDsKICAgICBmbG9hdCBt
X2RyYXdPcGFjaXR5OwogCi0gICAgLy8gRGVidWcgYm9yZGVycy4KLSAgICBDb2xvciBtX2RlYnVn
Qm9yZGVyQ29sb3I7Ci0gICAgZmxvYXQgbV9kZWJ1Z0JvcmRlcldpZHRoOwotCiAgICAgVHJhbnNm
b3JtYXRpb25NYXRyaXggbV9kcmF3VHJhbnNmb3JtOwogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4
IG1fc2NyZWVuU3BhY2VUcmFuc2Zvcm07CiAKQEAgLTI5NSwxNCArMzEyLDg2IEBAIHByaXZhdGU6
CiAKICAgICAvLyBIaWVyYXJjaGljYWwgYm91bmRpbmcgcmVjdCBjb250YWluaW5nIHRoZSBsYXll
ciBhbmQgaXRzIGRlc2NlbmRhbnRzLgogICAgIEludFJlY3QgbV9kcmF3YWJsZUNvbnRlbnRSZWN0
OwotCi0gICAgLy8gUmVjdCBpbmRpY2F0aW5nIHdoYXQgd2FzIHJlcGFpbnRlZC91cGRhdGVkIGR1
cmluZyB1cGRhdGUuCi0gICAgLy8gTm90ZSB0aGF0IHBsdWdpbiBsYXllcnMgYnlwYXNzIHRoaXMg
YW5kIGxlYXZlIGl0IGVtcHR5LgotICAgIEZsb2F0UmVjdCBtX3VwZGF0ZVJlY3Q7CiB9OwogCiB2
b2lkIHNvcnRMYXllcnMoVmVjdG9yPFJlZlB0cjxDQ0xheWVySW1wbD4gPjo6aXRlcmF0b3IgZmly
c3QsIFZlY3RvcjxSZWZQdHI8Q0NMYXllckltcGw+ID46Oml0ZXJhdG9yIGVuZCwgQ0NMYXllclNv
cnRlciopOwogCitjbGFzcyBDQ0xheWVyRGF0YSA6IHB1YmxpYyBDQ0xheWVyLCBwdWJsaWMgQ0NM
YXllclByb3BlcnRpZXMgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPENDTGF5ZXJE
YXRhPiBjcmVhdGUoaW50IGlkKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBD
Q0xheWVyRGF0YShpZCkpOworICAgIH0KKyAgICBzdGF0aWMgdm9pZCBwdXNoUHJvcGVydGllcyhj
b25zdCBDQ0xheWVyRGF0YSosIENDTGF5ZXIqKTsKKworICAgIHZpcnR1YWwgfkNDTGF5ZXJEYXRh
KCk7CisKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q0NMYXllcj4gY3JlYXRlQ0NMYXllcigpCisg
ICAgeworICAgICAgICByZXR1cm4gQ0NMYXllckltcGw6OmNyZWF0ZShpZCgpKTsKKyAgICB9CisK
KyAgICB2aXJ0dWFsIHZvaWQgcHVzaFByb3BlcnRpZXNUbyhDQ0xheWVyKiBsYXllcikKKyAgICB7
CisgICAgICAgIHB1c2hQcm9wZXJ0aWVzKHRoaXMsIGxheWVyKTsKKyAgICB9CisKKyAgICAvLyBU
cmVlIHN0cnVjdHVyZS4KKyAgICBDQ0xheWVyRGF0YSogcGFyZW50KCkgY29uc3QgeyByZXR1cm4g
bV9wYXJlbnQ7IH0KKyAgICBjb25zdCBWZWN0b3I8UmVmUHRyPENDTGF5ZXJEYXRhPiA+JiBjaGls
ZHJlbigpIGNvbnN0IHsgcmV0dXJuIG1fY2hpbGRyZW47IH0KKyAgICB2b2lkIGFkZENoaWxkKFBh
c3NSZWZQdHI8Q0NMYXllckRhdGE+KTsKKworICAgIHZvaWQgc2V0TWFza0xheWVyKFBhc3NSZWZQ
dHI8Q0NMYXllckRhdGE+IG1hc2tMYXllcikgeyBtX21hc2tMYXllciA9IG1hc2tMYXllcjsgfQor
ICAgIENDTGF5ZXJEYXRhKiBtYXNrTGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX21hc2tMYXllci5n
ZXQoKTsgfQorCisgICAgdm9pZCBzZXRSZXBsaWNhTGF5ZXIoUGFzc1JlZlB0cjxDQ0xheWVyRGF0
YT4gcmVwbGljYUxheWVyKSB7IG1fcmVwbGljYUxheWVyID0gcmVwbGljYUxheWVyOyB9CisgICAg
Q0NMYXllckRhdGEqIHJlcGxpY2FMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fcmVwbGljYUxheWVy
LmdldCgpOyB9CisKKyAgICBpbnQgaWQoKSBjb25zdCB7IHJldHVybiBtX2xheWVySWQ7IH0KKwor
ICAgIHZvaWQgc2V0QW5jaG9yUG9pbnQoY29uc3QgRmxvYXRQb2ludCYgYW5jaG9yUG9pbnQpIHsg
bV9hbmNob3JQb2ludCA9IGFuY2hvclBvaW50OyB9CisgICAgdm9pZCBzZXRBbmNob3JQb2ludFoo
ZmxvYXQgYW5jaG9yUG9pbnRaKSB7IG1fYW5jaG9yUG9pbnRaID0gYW5jaG9yUG9pbnRaOyB9Cisg
ICAgdm9pZCBzZXRCYWNrZ3JvdW5kQ29sb3IoY29uc3QgQ29sb3ImIGJhY2tncm91bmRDb2xvcikg
eyBtX2JhY2tncm91bmRDb2xvciA9IGJhY2tncm91bmRDb2xvcjsgfQorICAgIHZvaWQgc2V0Qm91
bmRzKGNvbnN0IEludFNpemUmIGJvdW5kcykgeyBtX2JvdW5kcyA9IGJvdW5kczsgfQorICAgIHZv
aWQgc2V0Q29udGVudEJvdW5kcyhjb25zdCBJbnRTaXplJiBjb250ZW50Qm91bmRzKSB7IG1fY29u
dGVudEJvdW5kcyA9IGNvbnRlbnRCb3VuZHM7IH0KKyAgICB2b2lkIHNldERlYnVnQm9yZGVyQ29s
b3IoQ29sb3IgZGVidWdCb3JkZXJDb2xvcikgeyBtX2RlYnVnQm9yZGVyQ29sb3IgPSBkZWJ1Z0Jv
cmRlckNvbG9yOyB9CisgICAgdm9pZCBzZXREZWJ1Z0JvcmRlcldpZHRoKGZsb2F0IGRlYnVnQm9y
ZGVyV2lkdGgpIHsgbV9kZWJ1Z0JvcmRlcldpZHRoID0gZGVidWdCb3JkZXJXaWR0aDsgfQorICAg
IHZvaWQgc2V0RG91YmxlU2lkZWQoYm9vbCBkb3VibGVTaWRlZCkgeyBtX2RvdWJsZVNpZGVkID0g
ZG91YmxlU2lkZWQ7IH0KKyAgICB2b2lkIHNldERyYXdzQ29udGVudChib29sIGRyYXdzQ29udGVu
dCkgeyBtX2RyYXdzQ29udGVudCA9IGRyYXdzQ29udGVudDsgfQorICAgIHZvaWQgc2V0SXNOb25D
b21wb3NpdGVkQ29udGVudChib29sIGlzTm9uQ29tcG9zaXRlZENvbnRlbnQpIHsgbV9pc05vbkNv
bXBvc2l0ZWRDb250ZW50ID0gaXNOb25Db21wb3NpdGVkQ29udGVudDsgfQorICAgIHZvaWQgc2V0
TWFza3NUb0JvdW5kcyhib29sIG1hc2tzVG9Cb3VuZHMpIHsgbV9tYXNrc1RvQm91bmRzID0gbWFz
a3NUb0JvdW5kczsgfQorICAgIHZvaWQgc2V0TmFtZShjb25zdCBTdHJpbmcmIG5hbWUpIHsgbV9u
YW1lID0gbmFtZTsgfQorICAgIHZvaWQgc2V0T3BhcXVlKGJvb2wgb3BhcXVlKSB7IG1fb3BhcXVl
ID0gb3BhcXVlOyB9CisgICAgdm9pZCBzZXRPcGFjaXR5KGZsb2F0IG9wYWNpdHkpIHsgbV9vcGFj
aXR5ID0gb3BhY2l0eTsgfQorICAgIHZvaWQgc2V0UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYg
cG9zaXRpb24pIHsgbV9wb3NpdGlvbiA9IHBvc2l0aW9uOyB9CisgICAgdm9pZCBzZXRQcmVzZXJ2
ZXMzRChib29sIHByZXNlcnZlczNEKSB7IG1fcHJlc2VydmVzM0QgPSBwcmVzZXJ2ZXMzRDsgfQor
ICAgIHZvaWQgc2V0U2Nyb2xsYWJsZShib29sIHNjcm9sbGFibGUpIHsgbV9zY3JvbGxhYmxlID0g
c2Nyb2xsYWJsZTsgfQorICAgIHZvaWQgc2V0U2Nyb2xsRGVsdGEoY29uc3QgSW50U2l6ZSYgc2Ny
b2xsRGVsdGEpIHsgbV9zY3JvbGxEZWx0YSA9IHNjcm9sbERlbHRhOyB9CisgICAgdm9pZCBzZXRT
Y3JvbGxQb3NpdGlvbihjb25zdCBJbnRQb2ludCYgc2Nyb2xsUG9zaXRpb24pIHsgbV9zY3JvbGxQ
b3NpdGlvbiA9IHNjcm9sbFBvc2l0aW9uOyB9CisgICAgdm9pZCBzZXRTZW50U2Nyb2xsRGVsdGEo
Y29uc3QgSW50U2l6ZSYgc2VudFNjcm9sbERlbHRhKSB7IG1fc2VudFNjcm9sbERlbHRhID0gc2Vu
dFNjcm9sbERlbHRhOyB9CisgICAgdm9pZCBzZXRTdWJsYXllclRyYW5zZm9ybShjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgc3VibGF5ZXJUcmFuc2Zvcm0pIHsgbV9zdWJsYXllclRyYW5zZm9y
bSA9IHN1YmxheWVyVHJhbnNmb3JtOyB9CisgICAgdm9pZCBzZXRUcmFuc2Zvcm0oY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSkgeyBtX3RyYW5zZm9ybSA9IHRyYW5zZm9ybTsg
fQorICAgIHZvaWQgc2V0VXBkYXRlUmVjdChjb25zdCBGbG9hdFJlY3QmIHVwZGF0ZVJlY3QpIHsg
bV91cGRhdGVSZWN0ID0gdXBkYXRlUmVjdDsgfQorCisgICAgY29uc3QgSW50U2l6ZSYgc2Nyb2xs
RGVsdGEoKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbERlbHRhOyB9CisgICAgY29uc3QgSW50U2l6
ZSYgc2VudFNjcm9sbERlbHRhKCkgY29uc3QgeyByZXR1cm4gbV9zZW50U2Nyb2xsRGVsdGE7IH0K
KworcHJvdGVjdGVkOgorICAgIGV4cGxpY2l0IENDTGF5ZXJEYXRhKGludCk7CisKK3ByaXZhdGU6
CisgICAgdm9pZCBzZXRQYXJlbnQoQ0NMYXllckRhdGEqIHBhcmVudCkgeyBtX3BhcmVudCA9IHBh
cmVudDsgfQorICAgIGZyaWVuZCBjbGFzcyBUcmVlU3luY2hyb25pemVyOworICAgIHZvaWQgY2xl
YXJDaGlsZExpc3QoKTsgLy8gV2FybmluZzogVGhpcyBkb2VzIG5vdCBwcmVzZXJ2ZSB0cmVlIHN0
cnVjdHVyZSBpbnZhcmlhbnRzIGFuZCBzbyBpcyBvbmx5IGV4cG9zZWQgdG8gdGhlIHRyZWUgc3lu
Y2hyb25pemVyLgorCisgICAgLy8gUHJvcGVydGllcyBpbnRlcm5hbCB0byBDQ0xheWVyRGF0YQor
ICAgIENDTGF5ZXJEYXRhKiBtX3BhcmVudDsKKyAgICBWZWN0b3I8UmVmUHRyPENDTGF5ZXJEYXRh
PiA+IG1fY2hpbGRyZW47CisgICAgUmVmUHRyPENDTGF5ZXJEYXRhPiBtX21hc2tMYXllcjsKKyAg
ICBSZWZQdHI8Q0NMYXllckRhdGE+IG1fcmVwbGljYUxheWVyOworICAgIGludCBtX2xheWVySWQ7
Cit9OworCiB9CiAKICNlbmRpZiAvLyBDQ0xheWVySW1wbF9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0LmNwcAppbmRleCA5YWFlNmZlLi43NDkyNzA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJU
cmVlSG9zdC5jcHAKQEAgLTU4LDkgKzU4LDkgQEAgQ0NMYXllclRyZWVIb3N0OjpOZWVkUmVzb3Vy
Y2VIYW5kbGVyOjp+TmVlZFJlc291cmNlSGFuZGxlcigpCiB7CiB9CiAKLXZvaWQgQ0NMYXllclRy
ZWVIb3N0OjpOZWVkUmVzb3VyY2VIYW5kbGVyOjpoYW5kbGUoTGF5ZXJUZXh0dXJlVXBkYXRlcjo6
VGV4dHVyZSogdGV4dHVyZSwgY29uc3QgSW50UmVjdCYgLyogc291cmNlUmVjdCAqLywgY29uc3Qg
SW50UmVjdCYgLyogZGVzdFJlY3QgKi8pCit2b2lkIENDTGF5ZXJUcmVlSG9zdDo6TmVlZFJlc291
cmNlSGFuZGxlcjo6aGFuZGxlKExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmUqIHRleHR1cmUp
CiB7Ci0gICAgaWYgKHRleHR1cmUtPm5lZWRQcmVwYXJlUmVjdCgpKQorICAgIGlmICh0ZXh0dXJl
LT5uZWVkUHJlcGFyZSgpKQogICAgICAgICBtX3Jlc291cmNlcysrOwogfQogCkBAIC03NCwyNSAr
NzQsMjggQEAgQ0NMYXllclRyZWVIb3N0OjpQcmVwYXJlUmVzb3VyY2VIYW5kbGVyOjp+UHJlcGFy
ZVJlc291cmNlSGFuZGxlcigpCiB7CiB9CiAKLXZvaWQgQ0NMYXllclRyZWVIb3N0OjpQcmVwYXJl
UmVzb3VyY2VIYW5kbGVyOjpoYW5kbGUoTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZSogdGV4
dHVyZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3Qp
Cit2b2lkIENDTGF5ZXJUcmVlSG9zdDo6UHJlcGFyZVJlc291cmNlSGFuZGxlcjo6aGFuZGxlKExh
eWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmUqIHRleHR1cmUpCiB7Ci0gICAgaWYgKHRleHR1cmUt
Pm5lZWRQcmVwYXJlUmVjdCgpKQotICAgICAgICB0ZXh0dXJlLT5wcmVwYXJlUmVjdChtX2NvbnRl
eHQsIG1fYWxsb2NhdG9yLCBzb3VyY2VSZWN0LCBkZXN0UmVjdCk7CisgICAgaWYgKHRleHR1cmUt
Pm5lZWRQcmVwYXJlKCkpCisgICAgICAgIHRleHR1cmUtPnByZXBhcmUobV9jb250ZXh0LCBtX2Fs
bG9jYXRvcik7CiB9CiAKLUNDTGF5ZXJUcmVlSG9zdDo6UGFpbnRIYW5kbGVyOjpQYWludEhhbmRs
ZXIoQ0NQcm94eSogcHJveHkpCitDQ0xheWVyVHJlZUhvc3Q6OlVwZGF0ZUhhbmRsZXI6OlVwZGF0
ZUhhbmRsZXIoQ0NQcm94eSogcHJveHkpCiAgICAgOiBtX3Byb3h5KHByb3h5KQogewogfQogCi1D
Q0xheWVyVHJlZUhvc3Q6OlBhaW50SGFuZGxlcjo6flBhaW50SGFuZGxlcigpCitDQ0xheWVyVHJl
ZUhvc3Q6OlVwZGF0ZUhhbmRsZXI6On5VcGRhdGVIYW5kbGVyKCkKIHsKIH0KIAotdm9pZCBDQ0xh
eWVyVHJlZUhvc3Q6OlBhaW50SGFuZGxlcjo6aGFuZGxlKExheWVyVGV4dHVyZVVwZGF0ZXI6OlRl
eHR1cmUqIHRleHR1cmUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3Qm
IGRlc3RSZWN0KQordm9pZCBDQ0xheWVyVHJlZUhvc3Q6OlVwZGF0ZUhhbmRsZXI6OmhhbmRsZShM
YXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlKiB0ZXh0dXJlKQogewotICAgIHRleHR1cmUtPnBh
aW50Q29udGVudHNSZWN0KHNvdXJjZVJlY3QpOwotICAgIG1fcHJveHktPnVwZGF0ZSh0ZXh0dXJl
LCBzb3VyY2VSZWN0LCBkZXN0UmVjdCk7CisgICAgT3duUHRyPENDVGV4dHVyZVVwZGF0ZXI6OlRl
eHR1cmVVcGRhdGU+IHRleHR1cmVVcGRhdGUgPSB0ZXh0dXJlLT5jcmVhdGVDQ1RleHR1cmVVcGRh
dGUoKTsKKyAgICBpZiAodGV4dHVyZVVwZGF0ZS5nZXQoKSkgeworICAgICAgICB0ZXh0dXJlLT5w
dXNoUHJvcGVydGllc1RvKHRleHR1cmVVcGRhdGUuZ2V0KCkpOworICAgICAgICBtX3Byb3h5LT51
cGRhdGUodGV4dHVyZVVwZGF0ZS5yZWxlYXNlKCkpOworICAgIH0KIH0KIAogUGFzc1JlZlB0cjxD
Q0xheWVyVHJlZUhvc3Q+IENDTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlKENDTGF5ZXJUcmVlSG9zdENs
aWVudCogY2xpZW50LCBjb25zdCBDQ1NldHRpbmdzJiBzZXR0aW5ncykKQEAgLTE5MSwxNSArMTk0
LDEyIEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpiZWdpbkNvbW1pdE9uSW1wbFRocmVhZChDQ0xh
eWVyVHJlZUhvc3RJbXBsKiBob3N0SW1wbCkKIC8vIGNvZGUgdGhhdCBpcyBsb2dpY2FsbHkgYSBt
YWluIHRocmVhZCBvcGVyYXRpb24sIGUuZy4gZGVsZXRpb24gb2YgYSBMYXllckNocm9taXVtLAog
Ly8gc2hvdWxkIGJlIGRlbGF5ZWQgdW50aWwgdGhlIENDTGF5ZXJUcmVlSG9zdDo6Y29tbWl0Q29t
cGxldGUsIHdoaWNoIHdpbGwgcnVuCiAvLyBhZnRlciB0aGUgY29tbWl0LCBidXQgb24gdGhlIG1h
aW4gdGhyZWFkLgotdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmZpbmlzaENvbW1pdE9uSW1wbFRocmVh
ZChDQ0xheWVyVHJlZUhvc3RJbXBsKiBob3N0SW1wbCkKK3ZvaWQgQ0NMYXllclRyZWVIb3N0Ojpm
aW5pc2hDb21taXRPbkltcGxUaHJlYWQoQ0NMYXllclRyZWVIb3N0SW1wbCogaG9zdEltcGwsIFBh
c3NSZWZQdHI8Q0NMYXllckltcGw+IG5ld1Jvb3RMYXllcikKIHsKICAgICBBU1NFUlQoQ0NQcm94
eTo6aXNJbXBsVGhyZWFkKCkpOwogCi0gICAgLy8gU3luY2hyb25pemUgdHJlZXMsIGlmIG9uZSBl
eGlzdHMgYXQgYWxsLi4uCi0gICAgaWYgKHJvb3RMYXllcigpKQotICAgICAgICBob3N0SW1wbC0+
c2V0Um9vdExheWVyKFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMocm9vdExheWVy
KCksIGhvc3RJbXBsLT5yb290TGF5ZXIoKSkpOwotICAgIGVsc2UKLSAgICAgICAgaG9zdEltcGwt
PnNldFJvb3RMYXllcigwKTsKKyAgICAvLyBTd2l0Y2ggdG8gbmV3IHRyZWUuCisgICAgaG9zdElt
cGwtPnNldFJvb3RMYXllcihuZXdSb290TGF5ZXIpOwogCiAgICAgaG9zdEltcGwtPnNldFNvdXJj
ZUZyYW1lTnVtYmVyKGZyYW1lTnVtYmVyKCkpOwogICAgIGhvc3RJbXBsLT5zZXRIYXZlV2hlZWxF
dmVudEhhbmRsZXJzKG1faGF2ZVdoZWVsRXZlbnRIYW5kbGVycyk7CkBAIC0zNTUsOSArMzU1LDE0
IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpkaWRCZWNvbWVJbnZpc2libGVPbkltcGxUaHJlYWQo
Q0NMYXllclRyZWVIb3N0SW1wbCogaG9zdEltCiAgICAgICAgIGhvc3RJbXBsLT5zZXRSb290TGF5
ZXIoMCk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKHJvb3RMYXllcigpKQotICAg
ICAgICBob3N0SW1wbC0+c2V0Um9vdExheWVyKFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXpl
VHJlZXMocm9vdExheWVyKCksIGhvc3RJbXBsLT5yb290TGF5ZXIoKSkpOwotICAgIGVsc2UKKyAg
ICBpZiAocm9vdExheWVyKCkpIHsKKyAgICAgICAgaWYgKENDUHJveHk6Omhhc0ltcGxUaHJlYWQo
KSkgeworICAgICAgICAgICAgUmVmUHRyPENDTGF5ZXJEYXRhPiByb290RGF0YUxheWVyID0gVHJl
ZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVlcyhyb290TGF5ZXIoKSk7CisgICAgICAgICAg
ICBob3N0SW1wbC0+c2V0Um9vdExheWVyKFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJl
ZXMocm9vdERhdGFMYXllci5nZXQoKSwgaG9zdEltcGwtPnJvb3RMYXllcigpKSk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBob3N0SW1wbC0+c2V0Um9vdExheWVyKFRyZWVTeW5jaHJv
bml6ZXI6OnN5bmNocm9uaXplVHJlZXMocm9vdExheWVyKCksIGhvc3RJbXBsLT5yb290TGF5ZXIo
KSkpOworICAgICAgICB9CisgICAgfSBlbHNlCiAgICAgICAgIGhvc3RJbXBsLT5zZXRSb290TGF5
ZXIoMCk7CiB9CiAKQEAgLTUwMCw3ICs1MDUsNyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6cGFp
bnRDb250ZW50cyhMYXllckNocm9taXVtKiByb290TGF5ZXIpCiAgICAgICAgIExheWVyQ2hyb21p
dW0qIGxheWVyID0gbV9sYXllclVwZGF0ZUxpc3RbbGF5ZXJJbmRleF0uZ2V0KCk7CiAgICAgICAg
IGxheWVyLT5wYWludENvbnRlbnRzSWZEaXJ0eSgpOwogCi0gICAgICAgIFBhaW50SGFuZGxlciBo
YW5kbGVyKG1fcHJveHkuZ2V0KCkpOworICAgICAgICBVcGRhdGVIYW5kbGVyIGhhbmRsZXIobV9w
cm94eS5nZXQoKSk7CiAgICAgICAgIGxheWVyLT5mb3JFYWNoQ29tcG9zaXRvclJlc291cmNlKGhh
bmRsZXIpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKaW5kZXggZjNhMjI0
ZC4uYzBmZmYyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKQEAgLTEyNiw3ICsxMjYs
NyBAQCBwdWJsaWM6CiAgICAgdm9pZCB1cGRhdGVBbmltYXRpb25zKGRvdWJsZSBmcmFtZUJlZ2lu
VGltZSk7CiAgICAgdm9pZCBsYXlvdXQoKTsKICAgICB2b2lkIGJlZ2luQ29tbWl0T25JbXBsVGhy
ZWFkKENDTGF5ZXJUcmVlSG9zdEltcGwqKTsKLSAgICB2b2lkIGZpbmlzaENvbW1pdE9uSW1wbFRo
cmVhZChDQ0xheWVyVHJlZUhvc3RJbXBsKik7CisgICAgdm9pZCBmaW5pc2hDb21taXRPbkltcGxU
aHJlYWQoQ0NMYXllclRyZWVIb3N0SW1wbCosIFBhc3NSZWZQdHI8Q0NMYXllckltcGw+KTsKICAg
ICB2b2lkIGNvbW1pdENvbXBsZXRlKCk7CiAgICAgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQz
RD4gY3JlYXRlTGF5ZXJUcmVlSG9zdENvbnRleHQzRCgpOwogICAgIHZpcnR1YWwgUGFzc093blB0
cjxDQ0xheWVyVHJlZUhvc3RJbXBsPiBjcmVhdGVMYXllclRyZWVIb3N0SW1wbChDQ0xheWVyVHJl
ZUhvc3RJbXBsQ2xpZW50Kik7CkBAIC0yMDcsNyArMjA3LDcgQEAgcHJpdmF0ZToKICAgICAgICAg
TmVlZFJlc291cmNlSGFuZGxlcigpOwogICAgICAgICB2aXJ0dWFsIH5OZWVkUmVzb3VyY2VIYW5k
bGVyKCk7CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIGhhbmRsZShMYXllclRleHR1cmVVcGRhdGVy
OjpUZXh0dXJlKiwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVz
dFJlY3QpOworICAgICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlKExheWVyVGV4dHVyZVVwZGF0ZXI6
OlRleHR1cmUqKTsKIAogICAgICAgICBpbnQgcmVzb3VyY2VzKCkgeyByZXR1cm4gbV9yZXNvdXJj
ZXM7IH0KIApAQCAtMjIwLDE5ICsyMjAsMTkgQEAgcHJpdmF0ZToKICAgICAgICAgUHJlcGFyZVJl
c291cmNlSGFuZGxlcihHcmFwaGljc0NvbnRleHQzRCosIFRleHR1cmVBbGxvY2F0b3IqKTsKICAg
ICAgICAgdmlydHVhbCB+UHJlcGFyZVJlc291cmNlSGFuZGxlcigpOwogCi0gICAgICAgIHZpcnR1
YWwgdm9pZCBoYW5kbGUoTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZSosIGNvbnN0IEludFJl
Y3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KTsKKyAgICAgICAgdmlydHVh
bCB2b2lkIGhhbmRsZShMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlKik7CiAKICAgICBwcml2
YXRlOgogICAgICAgICBHcmFwaGljc0NvbnRleHQzRCogbV9jb250ZXh0OwogICAgICAgICBUZXh0
dXJlQWxsb2NhdG9yKiBtX2FsbG9jYXRvcjsKICAgICB9OwogCi0gICAgY2xhc3MgUGFpbnRIYW5k
bGVyIDogcHVibGljIExheWVyVGV4dHVyZVVwZGF0ZXI6OkhhbmRsZXIgeworICAgIGNsYXNzIFVw
ZGF0ZUhhbmRsZXIgOiBwdWJsaWMgTGF5ZXJUZXh0dXJlVXBkYXRlcjo6SGFuZGxlciB7CiAgICAg
cHVibGljOgotICAgICAgICBQYWludEhhbmRsZXIoQ0NQcm94eSopOwotICAgICAgICB2aXJ0dWFs
IH5QYWludEhhbmRsZXIoKTsKKyAgICAgICAgVXBkYXRlSGFuZGxlcihDQ1Byb3h5Kik7CisgICAg
ICAgIHZpcnR1YWwgflVwZGF0ZUhhbmRsZXIoKTsKIAotICAgICAgICB2aXJ0dWFsIHZvaWQgaGFu
ZGxlKExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmUqLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VS
ZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBoYW5k
bGUoTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZSopOwogCiAgICAgcHJpdmF0ZToKICAgICAg
ICAgQ0NQcm94eSogbV9wcm94eTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmNwcApp
bmRleCBiYzEwNWJiLi40ZDdkZDY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkxheWVySW1wbC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5MYXllckltcGwu
Y3BwCkBAIC03OCwxMiArNzgsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIENDUGx1Z2luTGF5
ZXJJbXBsOjpDQ1BsdWdpbkxheWVySW1wbChpbnQgaWQpCiAgICAgOiBDQ0xheWVySW1wbChpZCkK
LSAgICAsIG1fdGV4dHVyZUlkKDApCi0gICAgLCBtX2ZsaXBwZWQodHJ1ZSkKLSAgICAsIG1fdXZS
ZWN0KDAsIDAsIDEsIDEpCi0gICAgLCBtX2lvU3VyZmFjZUlkKDApCi0gICAgLCBtX2lvU3VyZmFj
ZVdpZHRoKDApCi0gICAgLCBtX2lvU3VyZmFjZUhlaWdodCgwKQogICAgICwgbV9pb1N1cmZhY2VD
aGFuZ2VkKGZhbHNlKQogICAgICwgbV9pb1N1cmZhY2VUZXh0dXJlSWQoMCkKIHsKQEAgLTIwMSw2
ICsxOTUsMzIgQEAgdm9pZCBDQ1BsdWdpbkxheWVySW1wbDo6Y2xlYW51cFJlc291cmNlcygpCiAg
ICAgbV9pb1N1cmZhY2VUZXh0dXJlSWQgPSAwOwogfQogCitDQ1BsdWdpbkxheWVyRGF0YTo6Q0NQ
bHVnaW5MYXllckRhdGEoaW50IGlkKQorICAgIDogQ0NMYXllckRhdGEoaWQpCit7Cit9CisKK0ND
UGx1Z2luTGF5ZXJEYXRhOjp+Q0NQbHVnaW5MYXllckRhdGEoKQoreworfQorCit2b2lkIENDUGx1
Z2luTGF5ZXJEYXRhOjpzZXRJT1N1cmZhY2VQcm9wZXJ0aWVzKGludCB3aWR0aCwgaW50IGhlaWdo
dCwgdWludDMyX3QgaW9TdXJmYWNlSWQpCit7CisgICAgbV9pb1N1cmZhY2VXaWR0aCA9IHdpZHRo
OworICAgIG1faW9TdXJmYWNlSGVpZ2h0ID0gaGVpZ2h0OworICAgIG1faW9TdXJmYWNlSWQgPSBp
b1N1cmZhY2VJZDsKK30KKwordm9pZCBDQ1BsdWdpbkxheWVyRGF0YTo6cHVzaFByb3BlcnRpZXMo
Y29uc3QgQ0NQbHVnaW5MYXllckRhdGEqIGZyb20sIENDTGF5ZXIqIHRvKQoreworICAgIENDUGx1
Z2luTGF5ZXJJbXBsKiBsYXllciA9IHN0YXRpY19jYXN0PENDUGx1Z2luTGF5ZXJJbXBsKj4odG8p
OworCisgICAgbGF5ZXItPnNldFRleHR1cmVJZChmcm9tLT5tX3RleHR1cmVJZCk7CisgICAgbGF5
ZXItPnNldEZsaXBwZWQoZnJvbS0+bV9mbGlwcGVkKTsKKyAgICBsYXllci0+c2V0VVZSZWN0KGZy
b20tPm1fdXZSZWN0KTsKKyAgICBsYXllci0+c2V0SU9TdXJmYWNlUHJvcGVydGllcyhmcm9tLT5t
X2lvU3VyZmFjZVdpZHRoLCBmcm9tLT5tX2lvU3VyZmFjZUhlaWdodCwgZnJvbS0+bV9pb1N1cmZh
Y2VJZCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkxheWVySW1wbC5oCmluZGV4
IGUwOTgyNmEuLjBjZGNmNmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5MYXllckltcGwuaApAQCAt
MzMsNyArMzMsMjcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBDQ1BsdWdpbkxh
eWVySW1wbCA6IHB1YmxpYyBDQ0xheWVySW1wbCB7CitjbGFzcyBDQ1BsdWdpbkxheWVyUHJvcGVy
dGllcyB7Citwcm90ZWN0ZWQ6CisgICAgZXhwbGljaXQgQ0NQbHVnaW5MYXllclByb3BlcnRpZXMo
KQorICAgICAgICA6IG1fdGV4dHVyZUlkKDApCisgICAgICAgICwgbV9mbGlwcGVkKHRydWUpCisg
ICAgICAgICwgbV91dlJlY3QoMCwgMCwgMSwgMSkKKyAgICAgICAgLCBtX2lvU3VyZmFjZUlkKDAp
CisgICAgICAgICwgbV9pb1N1cmZhY2VXaWR0aCgwKQorICAgICAgICAsIG1faW9TdXJmYWNlSGVp
Z2h0KDApCisgICAgeworICAgIH0KKworICAgIHVuc2lnbmVkIG1fdGV4dHVyZUlkOworICAgIGJv
b2wgbV9mbGlwcGVkOworICAgIEZsb2F0UmVjdCBtX3V2UmVjdDsKKyAgICB1aW50MzJfdCBtX2lv
U3VyZmFjZUlkOworICAgIGludCBtX2lvU3VyZmFjZVdpZHRoOworICAgIGludCBtX2lvU3VyZmFj
ZUhlaWdodDsKK307CisKK2NsYXNzIENDUGx1Z2luTGF5ZXJJbXBsIDogcHVibGljIENDTGF5ZXJJ
bXBsLCBwdWJsaWMgQ0NQbHVnaW5MYXllclByb3BlcnRpZXMgewogcHVibGljOgogICAgIHN0YXRp
YyBQYXNzUmVmUHRyPENDUGx1Z2luTGF5ZXJJbXBsPiBjcmVhdGUoaW50IGlkKQogICAgIHsKQEAg
LTYyLDE4ICs4Miw0MSBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBjbGVhbnVwUmVzb3VyY2VzKCk7
CiAKLSAgICB1bnNpZ25lZCBtX3RleHR1cmVJZDsKLSAgICBib29sIG1fZmxpcHBlZDsKLSAgICBG
bG9hdFJlY3QgbV91dlJlY3Q7Ci0gICAgdWludDMyX3QgbV9pb1N1cmZhY2VJZDsKLSAgICBpbnQg
bV9pb1N1cmZhY2VXaWR0aDsKLSAgICBpbnQgbV9pb1N1cmZhY2VIZWlnaHQ7Ci0KICAgICAvLyBJ
bnRlcm5hbHMgZm9yIHRoZSBJT1N1cmZhY2UgcmVuZGVyaW5nIHBhdGguCiAgICAgYm9vbCBtX2lv
U3VyZmFjZUNoYW5nZWQ7CiAgICAgdW5zaWduZWQgbV9pb1N1cmZhY2VUZXh0dXJlSWQ7CiB9Owog
CitjbGFzcyBDQ1BsdWdpbkxheWVyRGF0YSA6IHB1YmxpYyBDQ0xheWVyRGF0YSwgcHVibGljIEND
UGx1Z2luTGF5ZXJQcm9wZXJ0aWVzIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxD
Q1BsdWdpbkxheWVyRGF0YT4gY3JlYXRlKGludCBpZCkKKyAgICB7CisgICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgQ0NQbHVnaW5MYXllckRhdGEoaWQpKTsKKyAgICB9CisgICAgc3RhdGljIHZv
aWQgcHVzaFByb3BlcnRpZXMoY29uc3QgQ0NQbHVnaW5MYXllckRhdGEqLCBDQ0xheWVyKik7CisK
KyAgICB2aXJ0dWFsIH5DQ1BsdWdpbkxheWVyRGF0YSgpOworCisgICAgdmlydHVhbCBQYXNzUmVm
UHRyPENDTGF5ZXI+IGNyZWF0ZUNDTGF5ZXIoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIENDUGx1
Z2luTGF5ZXJJbXBsOjpjcmVhdGUoaWQoKSk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIHB1
c2hQcm9wZXJ0aWVzVG8oQ0NMYXllciogbGF5ZXIpCisgICAgeworICAgICAgICBDQ0xheWVyRGF0
YTo6cHVzaFByb3BlcnRpZXModGhpcywgbGF5ZXIpOworICAgICAgICBwdXNoUHJvcGVydGllcyh0
aGlzLCBsYXllcik7CisgICAgfQorCisgICAgdm9pZCBzZXRUZXh0dXJlSWQodW5zaWduZWQgaWQp
IHsgbV90ZXh0dXJlSWQgPSBpZDsgfQorICAgIHZvaWQgc2V0RmxpcHBlZChib29sIGZsaXBwZWQp
IHsgbV9mbGlwcGVkID0gZmxpcHBlZDsgfQorICAgIHZvaWQgc2V0VVZSZWN0KGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCkgeyBtX3V2UmVjdCA9IHJlY3Q7IH0KKyAgICB2b2lkIHNldElPU3VyZmFjZVBy
b3BlcnRpZXMoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCB1aW50MzJfdCBpb1N1cmZhY2VJZCk7CisK
K3Byb3RlY3RlZDoKKyAgICBleHBsaWNpdCBDQ1BsdWdpbkxheWVyRGF0YShpbnQpOworfTsKKwog
fQogCiAjZW5kaWYgLy8gQ0NQbHVnaW5MYXllckltcGxfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcm94eS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcm94eS5oCmluZGV4IGVlZTZk
MTguLmUxYmM3NzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1Byb3h5LmgKQEAgLTgwLDcgKzgwLDcgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgdm9pZCBzdGFydCgpID0gMDsgLy8gTXVzdCBiZSBjYWxsZWQgYmVmb3JlIHVzaW5n
IHRoZSBwcm94eS4KICAgICB2aXJ0dWFsIHZvaWQgc3RvcCgpID0gMDsgLy8gTXVzdCBiZSBjYWxs
ZWQgYmVmb3JlIGRlbGV0aW5nIHRoZSBwcm94eS4KIAotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGUo
TGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZSosIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3Qs
IGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZShQ
YXNzT3duUHRyPENDVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmVVcGRhdGU+KSA9IDA7CiAKICAgICAv
LyBEZWJ1ZyBob29rcwogI2lmbmRlZiBOREVCVUcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJl
YWRQcm94eS5jcHAKaW5kZXggZTM4YWNkMi4uN2IxOWFiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NT
aW5nbGVUaHJlYWRQcm94eS5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgogI2luY2x1
ZGUgIlRyYWNlRXZlbnQuaCIKKyNpbmNsdWRlICJUcmVlU3luY2hyb25pemVyLmgiCiAjaW5jbHVk
ZSAiY2MvQ0NMYXllclRyZWVIb3N0LmgiCiAjaW5jbHVkZSAiY2MvQ0NUZXh0dXJlVXBkYXRlci5o
IgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgpAQCAtMTY5LDggKzE3MCw4IEBAIHZvaWQg
Q0NTaW5nbGVUaHJlYWRQcm94eTo6ZG9Db21taXQoKQogICAgICAgICB3aGlsZSAobV90ZXh0dXJl
VXBkYXRlci51cGRhdGUobV9sYXllclRyZWVIb3N0SW1wbC0+Y29udGV4dCgpLCAxKSkgeyB9CiAg
ICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+YmVnaW5Db21taXRPbkltcGxUaHJlYWQobV9sYXllclRy
ZWVIb3N0SW1wbC5nZXQoKSk7CiAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPnNldFZpc2li
bGUobV9sYXllclRyZWVIb3N0LT52aXNpYmxlKCkpOwotICAgICAgICBtX2xheWVyVHJlZUhvc3Qt
PmZpbmlzaENvbW1pdE9uSW1wbFRocmVhZChtX2xheWVyVHJlZUhvc3RJbXBsLmdldCgpKTsKLQor
ICAgICAgICBBU1NFUlQoIUNDUHJveHk6Omhhc0ltcGxUaHJlYWQoKSk7CisgICAgICAgIG1fbGF5
ZXJUcmVlSG9zdC0+ZmluaXNoQ29tbWl0T25JbXBsVGhyZWFkKG1fbGF5ZXJUcmVlSG9zdEltcGwu
Z2V0KCksIG1fbGF5ZXJUcmVlSG9zdC0+cm9vdExheWVyKCkgPyBUcmVlU3luY2hyb25pemVyOjpz
eW5jaHJvbml6ZVRyZWVzKG1fbGF5ZXJUcmVlSG9zdC0+cm9vdExheWVyKCksIG1fbGF5ZXJUcmVl
SG9zdEltcGwtPnJvb3RMYXllcigpKSA6IDApOwogICAgICAgICBtX2xheWVyVHJlZUhvc3RJbXBs
LT5jb21taXRDb21wbGV0ZSgpOwogCiAjaWYgIUFTU0VSVF9ESVNBQkxFRApAQCAtMjIwLDEyICsy
MjEsMTIgQEAgdm9pZCBDQ1NpbmdsZVRocmVhZFByb3h5OjpzdG9wKCkKICAgICBtX2xheWVyVHJl
ZUhvc3QgPSAwOwogfQogCi12b2lkIENDU2luZ2xlVGhyZWFkUHJveHk6OnVwZGF0ZShMYXllclRl
eHR1cmVVcGRhdGVyOjpUZXh0dXJlKiB0ZXh0dXJlLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0
LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCkKK3ZvaWQgQ0NTaW5nbGVUaHJlYWRQcm94eTo6dXBk
YXRlKFBhc3NPd25QdHI8Q0NUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZVVwZGF0ZT4gZW50cnkpCiB7
CiAgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdEltcGwtPnNldHRpbmdzKCkuZGVsYXlUZXh0dXJlVXBk
YXRlcykKLSAgICAgICAgbV90ZXh0dXJlVXBkYXRlci5hcHBlbmQodGV4dHVyZSwgc291cmNlUmVj
dCwgZGVzdFJlY3QpOworICAgICAgICBtX3RleHR1cmVVcGRhdGVyLmFwcGVuZChlbnRyeSk7CiAg
ICAgZWxzZQotICAgICAgICB0ZXh0dXJlLT51cGRhdGVSZWN0KG1fbGF5ZXJUcmVlSG9zdEltcGwt
PmNvbnRleHQoKSwgc291cmNlUmVjdCwgZGVzdFJlY3QpOworICAgICAgICBlbnRyeS0+dXBkYXRl
KG1fbGF5ZXJUcmVlSG9zdEltcGwtPmNvbnRleHQoKSk7CiB9CiAKIC8vIENhbGxlZCBieSB0aGUg
bGVnYWN5IHNjaGVkdWxpbmcgcGF0aCAoZS5nLiB3aGVyZSByZW5kZXJfd2lkZ2V0IGRvZXMgdGhl
IHNjaGVkdWxpbmcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmgKaW5kZXggNzgz
YThkYi4uMDY3ODkyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuaApAQCAt
NTUsNyArNTUsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldFZpc2libGUoYm9vbCk7
CiAgICAgdmlydHVhbCB2b2lkIHN0YXJ0KCk7CiAgICAgdmlydHVhbCB2b2lkIHN0b3AoKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgdXBkYXRlKExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmUqLCBjb25z
dCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCk7CisgICAgdmly
dHVhbCB2b2lkIHVwZGF0ZShQYXNzT3duUHRyPENDVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmVVcGRh
dGU+KTsKIAogICAgIC8vIENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQgaW1wbGVtZW50YXRpb24K
ICAgICB2aXJ0dWFsIHZvaWQgb25Td2FwQnVmZmVyc0NvbXBsZXRlT25JbXBsVGhyZWFkKCkgeyBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmNwcApp
bmRleCBhNjFjM2JiLi41NzViNjI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmNw
cApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgImNjL0NDVGV4dHVyZVVwZGF0ZXIuaCIKIAog
I2luY2x1ZGUgImNjL0NDUHJveHkuaCIKKyNpbmNsdWRlICJFeHRlbnNpb25zM0RDaHJvbWl1bS5o
IgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiTGF5ZXJUZXh0dXJl
VXBkYXRlci5oIgogI2luY2x1ZGUgIk1hbmFnZWRUZXh0dXJlLmgiCkBAIC0zOCw2ICszOSw2NCBA
QCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK0NDVGV4dHVy
ZVVwZGF0ZXI6OlN1YkltYWdlVGV4dHVyZVVwZGF0ZTo6U3ViSW1hZ2VUZXh0dXJlVXBkYXRlKCkK
KyAgOiBtX2Zvcm1hdCgwKQorICAsIG1fdGV4dHVyZUlkKDApCisgICwgbV9tYXBwZWRCdWZmZXIo
MCkKK3sKK30KKworQ0NUZXh0dXJlVXBkYXRlcjo6U3ViSW1hZ2VUZXh0dXJlVXBkYXRlOjp+U3Vi
SW1hZ2VUZXh0dXJlVXBkYXRlKCkKK3sKK30KKwordm9pZCBDQ1RleHR1cmVVcGRhdGVyOjpTdWJJ
bWFnZVRleHR1cmVVcGRhdGU6OnNldFBpeGVsRGF0YShjb25zdCB1aW50OF90KiBwaXhlbFNvdXJj
ZSwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3Qp
Cit7CisgICAgQVNTRVJUKG1fZm9ybWF0KTsKKyAgICBBU1NFUlQoIW1fcmVjdC5pc0VtcHR5KCkp
OworICAgIEFTU0VSVChtX3JlY3Quc2l6ZSgpID09IHNvdXJjZVJlY3Quc2l6ZSgpKTsKKworICAg
IHVuc2lnbmVkIGludCBjb21wb25lbnRzUGVyUGl4ZWwgPSA0OworICAgIHVuc2lnbmVkIGludCBi
eXRlc1BlckNvbXBvbmVudCA9IDE7CisgICAgaWYgKCFHcmFwaGljc0NvbnRleHQzRDo6Y29tcHV0
ZUZvcm1hdEFuZFR5cGVQYXJhbWV0ZXJzKG1fZm9ybWF0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5T
SUdORURfQllURSwgJmNvbXBvbmVudHNQZXJQaXhlbCwgJmJ5dGVzUGVyQ29tcG9uZW50KSkKKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICB1bnNpZ25lZCBpbnQgYnl0ZXNQZXJQ
aXhlbCA9IGJ5dGVzUGVyQ29tcG9uZW50ICogY29tcG9uZW50c1BlclBpeGVsOworCisgICAgc2l6
ZV90IGJ1ZmZlclNpemUgPSBtX3JlY3Qud2lkdGgoKSAqIG1fcmVjdC5oZWlnaHQoKSAqIGJ5dGVz
UGVyUGl4ZWw7CisgICAgbV9waXhlbERhdGEgPSBhZG9wdEFycmF5UHRyKG5ldyB1aW50OF90W2J1
ZmZlclNpemVdKTsKKworICAgIC8vIE9mZnNldCBmcm9tIGNvbnRlbnQtcmVjdCB0byBzb3VyY2Ut
cmVjdC4KKyAgICBJbnRQb2ludCBvZmZzZXQoc291cmNlUmVjdC54KCkgLSBjb250ZW50UmVjdC54
KCksIHNvdXJjZVJlY3QueSgpIC0gY29udGVudFJlY3QueSgpKTsKKworICAgIGlmIChjb250ZW50
UmVjdC53aWR0aCgpID09IHNvdXJjZVJlY3Qud2lkdGgoKSAmJiAhb2Zmc2V0LngoKSkKKyAgICAg
ICAgbWVtY3B5KG1fcGl4ZWxEYXRhLmdldCgpLCAmcGl4ZWxTb3VyY2VbYnl0ZXNQZXJQaXhlbCAq
IG9mZnNldC55KCkgKiBjb250ZW50UmVjdC53aWR0aCgpXSwgY29udGVudFJlY3Qud2lkdGgoKSAq
IG1fcmVjdC5oZWlnaHQoKSAqIGJ5dGVzUGVyUGl4ZWwpOworICAgIGVsc2UgeworICAgICAgICAv
LyBTdHJpZGVzIG5vdCBlcXVhbCwgc28gZG8gYSByb3ctYnktcm93IG1lbWNweSBmcm9tIHRoZQor
ICAgICAgICAvLyBwaXhlbFNvdXJjZSBpbnRvIHRoZSBwaXhlbERlc3QKKyAgICAgICAgZm9yIChp
bnQgcm93ID0gMDsgcm93IDwgbV9yZWN0LmhlaWdodCgpOyArK3JvdykKKyAgICAgICAgICAgIG1l
bWNweShtX3BpeGVsRGF0YS5nZXQoKSArIG1fcmVjdC53aWR0aCgpICogYnl0ZXNQZXJQaXhlbCAq
IHJvdywKKyAgICAgICAgICAgICAgICAgICBwaXhlbFNvdXJjZSArIGJ5dGVzUGVyUGl4ZWwgKiAo
b2Zmc2V0LngoKSArIChvZmZzZXQueSgpICsgcm93KSAqIGNvbnRlbnRSZWN0LndpZHRoKCkpLAor
ICAgICAgICAgICAgICAgICAgIG1fcmVjdC53aWR0aCgpICogYnl0ZXNQZXJQaXhlbCk7CisgICAg
fQorfQorCit2b2lkIENDVGV4dHVyZVVwZGF0ZXI6OlN1YkltYWdlVGV4dHVyZVVwZGF0ZTo6dXBk
YXRlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQoreworICAgIEFTU0VSVChtX2Zvcm1hdCk7
CisgICAgQVNTRVJUKG1fdGV4dHVyZUlkKTsKKyAgICBBU1NFUlQoIW1fcmVjdC5pc0VtcHR5KCkp
OworCisgICAgY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
MkQsIG1fdGV4dHVyZUlkKTsKKyAgICBpZiAobV9tYXBwZWRCdWZmZXIpIHsKKyAgICAgICAgRXh0
ZW5zaW9uczNEQ2hyb21pdW0qIGV4dGVuc2lvbnMgPSBzdGF0aWNfY2FzdDxFeHRlbnNpb25zM0RD
aHJvbWl1bSo+KGNvbnRleHQtPmdldEV4dGVuc2lvbnMoKSk7CisgICAgICAgIGV4dGVuc2lvbnMt
PnVubWFwVGV4U3ViSW1hZ2UyRENIUk9NSVVNKG1fbWFwcGVkQnVmZmVyKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBBU1NFUlQobV9waXhlbERhdGEpOworICAgICAgICBjb250ZXh0LT50ZXhTdWJJ
bWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCBtX3JlY3QueCgpLCBtX3Jl
Y3QueSgpLCBtX3JlY3Qud2lkdGgoKSwgbV9yZWN0LmhlaWdodCgpLCBtX2Zvcm1hdCwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIG1fcGl4ZWxEYXRhLmdldCgpKTsKKyAgICB9Cit9
CisKIENDVGV4dHVyZVVwZGF0ZXI6OkNDVGV4dHVyZVVwZGF0ZXIoKQogewogfQpAQCAtNDYsMTUg
KzEwNSwxMCBAQCBDQ1RleHR1cmVVcGRhdGVyOjp+Q0NUZXh0dXJlVXBkYXRlcigpCiB7CiB9CiAK
LXZvaWQgQ0NUZXh0dXJlVXBkYXRlcjo6YXBwZW5kKExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1
cmUqIHRleHR1cmUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRl
c3RSZWN0KQordm9pZCBDQ1RleHR1cmVVcGRhdGVyOjphcHBlbmQoUGFzc093blB0cjxUZXh0dXJl
VXBkYXRlPiB1cGRhdGUpCiB7Ci0gICAgQVNTRVJUKHRleHR1cmUpOwotCi0gICAgVXBkYXRlRW50
cnkgZW50cnk7Ci0gICAgZW50cnkubV90ZXh0dXJlID0gdGV4dHVyZTsKLSAgICBlbnRyeS5tX3Nv
dXJjZVJlY3QgPSBzb3VyY2VSZWN0OwotICAgIGVudHJ5Lm1fZGVzdFJlY3QgPSBkZXN0UmVjdDsK
LSAgICBtX2VudHJpZXMuYXBwZW5kKGVudHJ5KTsKKyAgICBBU1NFUlQodXBkYXRlKTsKKyAgICBt
X2VudHJpZXMuYXBwZW5kKHVwZGF0ZSk7CiB9CiAKIGJvb2wgQ0NUZXh0dXJlVXBkYXRlcjo6aGFz
TW9yZVVwZGF0ZXMoKSBjb25zdApAQCAtNjgsOCArMTIyLDcgQEAgYm9vbCBDQ1RleHR1cmVVcGRh
dGVyOjp1cGRhdGUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIHNpemVfdCBjb3VudCkKICAg
ICAgICAgaWYgKCFtX2VudHJpZXMuc2l6ZSgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgICAgIFVwZGF0ZUVudHJ5JiBlbnRyeSA9IG1fZW50cmllcy5sYXN0KCk7Ci0gICAgICAg
IGVudHJ5Lm1fdGV4dHVyZS0+dXBkYXRlUmVjdChjb250ZXh0LCBlbnRyeS5tX3NvdXJjZVJlY3Qs
IGVudHJ5Lm1fZGVzdFJlY3QpOworICAgICAgICBtX2VudHJpZXMubGFzdCgpLT51cGRhdGUoY29u
dGV4dCk7CiAgICAgICAgIG1fZW50cmllcy5yZW1vdmVMYXN0KCk7CiAgICAgfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1
cmVVcGRhdGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1RleHR1cmVVcGRhdGVyLmgKaW5kZXggYWI2NTllYy4uNTRiMzNmNyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBk
YXRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDVGV4dHVyZVVwZGF0ZXIuaApAQCAtMjcsNyArMjcsOSBAQAogI2RlZmluZSBDQ1RleHR1cmVV
cGRhdGVyX2gKIAogI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlICJMYXllclRleHR1cmVV
cGRhdGVyLmgiCisjaW5jbHVkZSA8d3RmL093bkFycmF5UHRyLmg+CisjaW5jbHVkZSA8d3RmL093
blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zNiwxMCArMzgsNDEgQEAgY2xhc3MgR3Jh
cGhpY3NDb250ZXh0M0Q7CiAKIGNsYXNzIENDVGV4dHVyZVVwZGF0ZXIgewogcHVibGljOgorICAg
IGNsYXNzIFRleHR1cmVVcGRhdGUgeworICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCB2b2lk
IHVwZGF0ZShHcmFwaGljc0NvbnRleHQzRCopID0gMDsKKyAgICB9OworICAgIGNsYXNzIFN1Yklt
YWdlVGV4dHVyZVVwZGF0ZSA6IHB1YmxpYyBUZXh0dXJlVXBkYXRlIHsKKyAgICBwdWJsaWM6Cisg
ICAgICAgIHZpcnR1YWwgflN1YkltYWdlVGV4dHVyZVVwZGF0ZSgpOworCisgICAgICAgIHN0YXRp
YyBQYXNzT3duUHRyPFN1YkltYWdlVGV4dHVyZVVwZGF0ZT4gY3JlYXRlKCkgeyByZXR1cm4gYWRv
cHRQdHIobmV3IFN1YkltYWdlVGV4dHVyZVVwZGF0ZSgpKTsgfQorCisgICAgICAgIHZvaWQgc2V0
Rm9ybWF0KHVuc2lnbmVkIGZvcm1hdCkgeyBtX2Zvcm1hdCA9IGZvcm1hdDsgfQorICAgICAgICB2
b2lkIHNldFRleHR1cmVJZCh1bnNpZ25lZCB0ZXh0dXJlSWQpIHsgbV90ZXh0dXJlSWQgPSB0ZXh0
dXJlSWQ7IH0KKyAgICAgICAgdm9pZCBzZXRSZWN0KEludFJlY3QmIHJlY3QpIHsgbV9yZWN0ID0g
cmVjdDsgfQorICAgICAgICB2b2lkIHNldFBpeGVsRGF0YShQYXNzT3duQXJyYXlQdHI8dWludDhf
dD4gcGl4ZWxEYXRhKSB7IG1fcGl4ZWxEYXRhID0gcGl4ZWxEYXRhOyB9CisgICAgICAgIC8vIGZv
cm1hdCBhbmQgcmVjdCBtdXN0IGJlIHNldCBiZWZvcmUgdGhpcyB2ZXJzaW9uIG9mIHNldFBpeGVs
RGF0YSBpcyB1c2VkCisgICAgICAgIHZvaWQgc2V0UGl4ZWxEYXRhKGNvbnN0IHVpbnQ4X3QqIHBp
eGVsU291cmNlLCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgSW50UmVjdCYgc291
cmNlUmVjdCk7CisgICAgICAgIHZvaWQgc2V0TWFwcGVkQnVmZmVyKHVpbnQ4X3QqIG1hcHBlZEJ1
ZmZlcikgeyBtX21hcHBlZEJ1ZmZlciA9IG1hcHBlZEJ1ZmZlcjsgfQorCisgICAgICAgIHZpcnR1
YWwgdm9pZCB1cGRhdGUoR3JhcGhpY3NDb250ZXh0M0QqKTsKKworICAgIHByb3RlY3RlZDoKKyAg
ICAgICAgZXhwbGljaXQgU3ViSW1hZ2VUZXh0dXJlVXBkYXRlKCk7CisKKyAgICBwcml2YXRlOgor
ICAgICAgICB1bnNpZ25lZCBtX2Zvcm1hdDsKKyAgICAgICAgdW5zaWduZWQgbV90ZXh0dXJlSWQ7
CisgICAgICAgIEludFJlY3QgbV9yZWN0OworICAgICAgICBPd25BcnJheVB0cjx1aW50OF90PiBt
X3BpeGVsRGF0YTsKKyAgICAgICAgdWludDhfdCogbV9tYXBwZWRCdWZmZXI7CisgICAgfTsKKwog
ICAgIENDVGV4dHVyZVVwZGF0ZXIoKTsKICAgICB+Q0NUZXh0dXJlVXBkYXRlcigpOwogCi0gICAg
dm9pZCBhcHBlbmQoTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZSosIGNvbnN0IEludFJlY3Qm
IHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KTsKKyAgICB2b2lkIGFwcGVuZChQ
YXNzT3duUHRyPFRleHR1cmVVcGRhdGU+KTsKIAogICAgIGJvb2wgaGFzTW9yZVVwZGF0ZXMoKSBj
b25zdDsKIApAQCAtNDksMTMgKzgyLDcgQEAgcHVibGljOgogICAgIHZvaWQgY2xlYXIoKTsKIAog
cHJpdmF0ZToKLSAgICBzdHJ1Y3QgVXBkYXRlRW50cnkgewotICAgICAgICBMYXllclRleHR1cmVV
cGRhdGVyOjpUZXh0dXJlKiBtX3RleHR1cmU7Ci0gICAgICAgIEludFJlY3QgbV9zb3VyY2VSZWN0
OwotICAgICAgICBJbnRSZWN0IG1fZGVzdFJlY3Q7Ci0gICAgfTsKLQotICAgIFZlY3RvcjxVcGRh
dGVFbnRyeT4gbV9lbnRyaWVzOworICAgIFZlY3RvcjxPd25QdHI8VGV4dHVyZVVwZGF0ZT4gPiBt
X2VudHJpZXM7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwCmluZGV4IDNkOTg3
YzguLjc4ODM5MmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwCkBAIC0yOCw5ICsyOCwx
MSBAQAogCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJUcmFjZUV2
ZW50LmgiCisjaW5jbHVkZSAiVHJlZVN5bmNocm9uaXplci5oIgogI2luY2x1ZGUgImNjL0NDRGVs
YXlCYXNlZFRpbWVTb3VyY2UuaCIKICNpbmNsdWRlICJjYy9DQ0ZyYW1lUmF0ZUNvbnRyb2xsZXIu
aCIKICNpbmNsdWRlICJjYy9DQ0lucHV0SGFuZGxlci5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJJ
bXBsLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0LmgiCiAjaW5jbHVkZSAiY2MvQ0NT
Y2hlZHVsZXIuaCIKICNpbmNsdWRlICJjYy9DQ1Njb3BlZFRocmVhZFByb3h5LmgiCkBAIC0zOCw2
ICs0MCw3IEBACiAjaW5jbHVkZSAiY2MvQ0NUaHJlYWRUYXNrLmgiCiAjaW5jbHVkZSA8d3RmL0N1
cnJlbnRUaW1lLmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKyNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXVEY7CiAKQEAgLTU5LDcgKzYyLDYgQEAgQ0NU
aHJlYWRQcm94eTo6Q0NUaHJlYWRQcm94eShDQ0xheWVyVHJlZUhvc3QqIGxheWVyVHJlZUhvc3Qp
CiAgICAgLCBtX21haW5UaHJlYWRQcm94eShDQ1Njb3BlZFRocmVhZFByb3h5OjpjcmVhdGUoQ0NQ
cm94eTo6bWFpblRocmVhZCgpKSkKICAgICAsIG1fcmVhZGJhY2tSZXF1ZXN0T25JbXBsVGhyZWFk
KDApCiAgICAgLCBtX2ZpbmlzaEFsbFJlbmRlcmluZ0NvbXBsZXRpb25FdmVudE9uSW1wbFRocmVh
ZCgwKQotICAgICwgbV9jb21taXRDb21wbGV0aW9uRXZlbnRPbkltcGxUaHJlYWQoMCkKICAgICAs
IG1fbmV4dEZyYW1lSXNOZXdseUNvbW1pdHRlZEZyYW1lT25JbXBsVGhyZWFkKGZhbHNlKQogewog
ICAgIFRSQUNFX0VWRU5UKCJDQ1RocmVhZFByb3h5OjpDQ1RocmVhZFByb3h5IiwgdGhpcywgMCk7
CkBAIC0yODgsMTggKzI5MCwxMyBAQCB2b2lkIENDVGhyZWFkUHJveHk6OnN0b3AoKQogICAgIG1f
c3RhcnRlZCA9IGZhbHNlOwogfQogCi12b2lkIENDVGhyZWFkUHJveHk6OnVwZGF0ZShMYXllclRl
eHR1cmVVcGRhdGVyOjpUZXh0dXJlKiB0ZXh0dXJlLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0
LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCkKK3ZvaWQgQ0NUaHJlYWRQcm94eTo6dXBkYXRlKFBh
c3NPd25QdHI8Q0NUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZVVwZGF0ZT4gZW50cnkpCiB7CiAgICAg
VFJBQ0VfRVZFTlQoIkNDVGhyZWFkUHJveHk6OnVwZGF0ZSIsIHRoaXMsIDApOwogICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7CiAgICAgQVNTRVJUKG1fc3RhcnRlZCk7CiAKLSAgICBPd25QdHI8
VXBkYXRlRW50cnk+IGVudHJ5ID0gYWRvcHRQdHIobmV3IFVwZGF0ZUVudHJ5KTsKLSAgICBlbnRy
eS0+bV90ZXh0dXJlID0gdGV4dHVyZTsKLSAgICBlbnRyeS0+bV9zb3VyY2VSZWN0ID0gc291cmNl
UmVjdDsKLSAgICBlbnRyeS0+bV9kZXN0UmVjdCA9IGRlc3RSZWN0OwotCi0gICAgQ0NQcm94eTo6
aW1wbFRocmVhZCgpLT5wb3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDVGhyZWFk
UHJveHk6OnVwZGF0ZVRleHR1cmVPbkltcGxUaHJlYWQsIGVudHJ5LnJlbGVhc2UoKSkpOworICAg
IENDUHJveHk6OmltcGxUaHJlYWQoKS0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMs
ICZDQ1RocmVhZFByb3h5Ojp1cGRhdGVUZXh0dXJlT25JbXBsVGhyZWFkLCBlbnRyeSkpOwogfQog
CiB2b2lkIENDVGhyZWFkUHJveHk6OmZpbmlzaEFsbFJlbmRlcmluZ09uSW1wbFRocmVhZChDQ0Nv
bXBsZXRpb25FdmVudCogY29tcGxldGlvbikKQEAgLTQxNSwxNiArNDEyLDIyIEBAIHZvaWQgQ0NU
aHJlYWRQcm94eTo6YmVnaW5GcmFtZUFuZENvbW1pdChpbnQgc2VxdWVuY2VOdW1iZXIsIGRvdWJs
ZSBmcmFtZUJlZ2luVGltCiAgICAgaWYgKG1fYW5pbWF0ZVJlcXVlc3RlZCkKICAgICAgICAgc2V0
TmVlZHNDb21taXQoKTsKIAorICAgIEFTU0VSVChDQ1Byb3h5OjpoYXNJbXBsVGhyZWFkKCkpOwor
ICAgIC8vIENyZWF0ZSBuZXcgaW1wbCB0cmVlLgorICAgIFJlZlB0cjxDQ0xheWVyRGF0YT4gcm9v
dExheWVyOworICAgIGlmIChtX2xheWVyVHJlZUhvc3QtPnJvb3RMYXllcigpKQorICAgICAgICBy
b290TGF5ZXIgPSBUcmVlU3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVzKG1fbGF5ZXJUcmVl
SG9zdC0+cm9vdExheWVyKCkpOworCisgICAgQVNTRVJUKHJvb3RMYXllci0+aGFzT25lUmVmKCkp
OworCisgICAgLy8gTGVhayB0aGUgcm9vdCBsYXllciBwb2ludGVyIHNvIHdlIGNhbiB0cmFuc2Zl
ciBvd25lcnNoaXAgb2YgaXQgdG8gdGhlIG90aGVyIHNpZGUuLi4KKyAgICBDQ0xheWVyRGF0YSog
cm9vdExheWVyUHRyID0gcm9vdExheWVyLnJlbGVhc2UoKS5sZWFrUmVmKCk7CisgICAgQVNTRVJU
KHJvb3RMYXllclB0ci0+aGFzT25lUmVmKCkpOworCiAgICAgLy8gTm90aWZ5IHRoZSBpbXBsIHRo
cmVhZCB0aGF0IHRoZSBiZWdpbkZyYW1lIGhhcyBjb21wbGV0ZWQuIFRoaXMgd2lsbAotICAgIC8v
IGJlZ2luIHRoZSBjb21taXQgcHJvY2Vzcywgd2hpY2ggaXMgYmxvY2tpbmcgZnJvbSB0aGUgbWFp
biB0aHJlYWQncwotICAgIC8vIHBvaW50IG9mIHZpZXcsIGJ1dCBhc3luY2hyb25vdXNseSBwZXJm
b3JtZWQgb24gdGhlIGltcGwgdGhyZWFkLAotICAgIC8vIGNvb3JkaW5hdGVkIGJ5IHRoZSBDQ1Nj
aGVkdWxlci4KLSAgICB7Ci0gICAgICAgIFRSQUNFX0VWRU5UKCJjb21taXQiLCB0aGlzLCAwKTsK
LSAgICAgICAgQ0NDb21wbGV0aW9uRXZlbnQgY29tcGxldGlvbjsKLSAgICAgICAgQ0NQcm94eTo6
aW1wbFRocmVhZCgpLT5wb3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDVGhyZWFk
UHJveHk6OmJlZ2luRnJhbWVDb21wbGV0ZU9uSW1wbFRocmVhZCwgQWxsb3dDcm9zc1RocmVhZEFj
Y2VzcygmY29tcGxldGlvbikpKTsKLSAgICAgICAgY29tcGxldGlvbi53YWl0KCk7Ci0gICAgfQor
ICAgIC8vIGJlZ2luIHRoZSBjb21taXQgcHJvY2VzcyB0aGF0IGlzIGFzeW5jaHJvbm91c2x5IHBl
cmZvcm1lZCBvbiB0aGUgaW1wbAorICAgIC8vIHRocmVhZCwgY29vcmRpbmF0ZWQgYnkgdGhlIEND
U2NoZWR1bGVyLgorICAgIENDUHJveHk6OmltcGxUaHJlYWQoKS0+cG9zdFRhc2soY3JlYXRlQ0NU
aHJlYWRUYXNrKHRoaXMsICZDQ1RocmVhZFByb3h5OjpiZWdpbkZyYW1lQ29tcGxldGVPbkltcGxU
aHJlYWQsIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3Mocm9vdExheWVyUHRyKSkpOwogCiAgICAgbV9s
YXllclRyZWVIb3N0LT5jb21taXRDb21wbGV0ZSgpOwogCkBAIC00MzQsNyArNDM3LDcgQEAgdm9p
ZCBDQ1RocmVhZFByb3h5OjpiZWdpbkZyYW1lQW5kQ29tbWl0KGludCBzZXF1ZW5jZU51bWJlciwg
ZG91YmxlIGZyYW1lQmVnaW5UaW0KIHZvaWQgQ0NUaHJlYWRQcm94eTo6cHJlcGFyZUZyYW1lUmVz
b3VyY2VzT25JbXBsVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50KiBjb21wbGV0aW9uKQogewogICAg
IFRSQUNFX0VWRU5UKCJDQ1RocmVhZFByb3h5OjpwcmVwYXJlRnJhbWVSZXNvdXJjZXNPbk9uSW1w
bFRocmVhZCIsIHRoaXMsIDApOwotICAgIEFTU0VSVCghbV9jb21taXRDb21wbGV0aW9uRXZlbnRP
bkltcGxUaHJlYWQpOworICAgIEFTU0VSVCghbV9jb21taXROZXdSb290TGF5ZXJPbkltcGxUaHJl
YWQpOwogICAgIEFTU0VSVChpc0ltcGxUaHJlYWQoKSk7CiAgICAgaWYgKCFtX2xheWVyVHJlZUhv
c3RJbXBsKSB7CiAgICAgICAgIGNvbXBsZXRpb24tPnNpZ25hbCgpOwpAQCAtNDQ2LDI4ICs0NDks
MzAgQEAgdm9pZCBDQ1RocmVhZFByb3h5OjpwcmVwYXJlRnJhbWVSZXNvdXJjZXNPbkltcGxUaHJl
YWQoQ0NDb21wbGV0aW9uRXZlbnQqIGNvbXBsZXQKICAgICBjb21wbGV0aW9uLT5zaWduYWwoKTsK
IH0KIAotdm9pZCBDQ1RocmVhZFByb3h5Ojp1cGRhdGVUZXh0dXJlT25JbXBsVGhyZWFkKFBhc3NP
d25QdHI8VXBkYXRlRW50cnk+IGVudHJ5KQordm9pZCBDQ1RocmVhZFByb3h5Ojp1cGRhdGVUZXh0
dXJlT25JbXBsVGhyZWFkKFBhc3NPd25QdHI8Q0NUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZVVwZGF0
ZT4gZW50cnkpCiB7Ci0gICAgQVNTRVJUKCFtX2NvbW1pdENvbXBsZXRpb25FdmVudE9uSW1wbFRo
cmVhZCk7CisgICAgQVNTRVJUKCFtX2NvbW1pdE5ld1Jvb3RMYXllck9uSW1wbFRocmVhZCk7CiAg
ICAgQVNTRVJUKGlzSW1wbFRocmVhZCgpKTsKICAgICBpZiAoIW1fbGF5ZXJUcmVlSG9zdEltcGwp
CiAgICAgICAgIHJldHVybjsKIAotICAgIG1fdGV4dHVyZVVwZGF0ZXJPbkltcGxUaHJlYWQuYXBw
ZW5kKGVudHJ5LT5tX3RleHR1cmUsIGVudHJ5LT5tX3NvdXJjZVJlY3QsIGVudHJ5LT5tX2Rlc3RS
ZWN0KTsKKyAgICBtX3RleHR1cmVVcGRhdGVyT25JbXBsVGhyZWFkLmFwcGVuZChlbnRyeSk7CiB9
CiAKLXZvaWQgQ0NUaHJlYWRQcm94eTo6YmVnaW5GcmFtZUNvbXBsZXRlT25JbXBsVGhyZWFkKEND
Q29tcGxldGlvbkV2ZW50KiBjb21wbGV0aW9uKQordm9pZCBDQ1RocmVhZFByb3h5OjpiZWdpbkZy
YW1lQ29tcGxldGVPbkltcGxUaHJlYWQoQ0NMYXllckRhdGEqIHJvb3RMYXllclB0cikKIHsKICAg
ICBUUkFDRV9FVkVOVCgiQ0NUaHJlYWRQcm94eTo6YmVnaW5GcmFtZUNvbXBsZXRlT25JbXBsVGhy
ZWFkIiwgdGhpcywgMCk7Ci0gICAgQVNTRVJUKCFtX2NvbW1pdENvbXBsZXRpb25FdmVudE9uSW1w
bFRocmVhZCk7CisgICAgQVNTRVJUKCFtX2NvbW1pdE5ld1Jvb3RMYXllck9uSW1wbFRocmVhZCk7
CiAgICAgQVNTRVJUKGlzSW1wbFRocmVhZCgpKTsKICAgICBBU1NFUlQobV9zY2hlZHVsZXJPbklt
cGxUaHJlYWQpOwotICAgIGlmICghbV9sYXllclRyZWVIb3N0SW1wbCkgewotICAgICAgICBjb21w
bGV0aW9uLT5zaWduYWwoKTsKKyAgICBSZWZQdHI8Q0NMYXllckRhdGE+IHJvb3RMYXllcjsKKyAg
ICBpZiAocm9vdExheWVyUHRyKQorICAgICAgICByb290TGF5ZXIgPSBhZG9wdFJlZihyb290TGF5
ZXJQdHIpOworCisgICAgaWYgKCFtX2xheWVyVHJlZUhvc3RJbXBsKQogICAgICAgICByZXR1cm47
Ci0gICAgfQogCi0gICAgbV9jb21taXRDb21wbGV0aW9uRXZlbnRPbkltcGxUaHJlYWQgPSBjb21w
bGV0aW9uOworICAgIG1fY29tbWl0TmV3Um9vdExheWVyT25JbXBsVGhyZWFkID0gcm9vdExheWVy
OwogCiAgICAgbV9zY2hlZHVsZXJPbkltcGxUaHJlYWQtPmJlZ2luRnJhbWVDb21wbGV0ZSgpOwog
fQpAQCAtNDk2LDIxICs1MDEsMTggQEAgdm9pZCBDQ1RocmVhZFByb3h5OjpzY2hlZHVsZWRBY3Rp
b25Db21taXQoKQogewogICAgIFRSQUNFX0VWRU5UKCJDQ1RocmVhZFByb3h5OjpzY2hlZHVsZWRB
Y3Rpb25Db21taXQiLCB0aGlzLCAwKTsKICAgICBBU1NFUlQoIW1fdGV4dHVyZVVwZGF0ZXJPbklt
cGxUaHJlYWQuaGFzTW9yZVVwZGF0ZXMoKSk7Ci0gICAgQVNTRVJUKG1fY29tbWl0Q29tcGxldGlv
bkV2ZW50T25JbXBsVGhyZWFkKTsKLQotICAgIG1fdGV4dHVyZVVwZGF0ZXJPbkltcGxUaHJlYWQu
Y2xlYXIoKTsKIAogICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPmJlZ2luQ29tbWl0KCk7CiAKICAg
ICBtX2xheWVyVHJlZUhvc3QtPmJlZ2luQ29tbWl0T25JbXBsVGhyZWFkKG1fbGF5ZXJUcmVlSG9z
dEltcGwuZ2V0KCkpOwotICAgIG1fbGF5ZXJUcmVlSG9zdC0+ZmluaXNoQ29tbWl0T25JbXBsVGhy
ZWFkKG1fbGF5ZXJUcmVlSG9zdEltcGwuZ2V0KCkpOworICAgIG1fbGF5ZXJUcmVlSG9zdC0+Zmlu
aXNoQ29tbWl0T25JbXBsVGhyZWFkKG1fbGF5ZXJUcmVlSG9zdEltcGwuZ2V0KCksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jb21taXROZXdSb290TGF5
ZXJPbkltcGxUaHJlYWQgPyBUcmVlU3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVzKG1fY29t
bWl0TmV3Um9vdExheWVyT25JbXBsVGhyZWFkLmdldCgpLCBtX2xheWVyVHJlZUhvc3RJbXBsLT5y
b290TGF5ZXIoKSkgOiAwKTsKKworICAgIG1fY29tbWl0TmV3Um9vdExheWVyT25JbXBsVGhyZWFk
LmNsZWFyKCk7CiAKICAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5jb21taXRDb21wbGV0ZSgpOwog
CiAgICAgbV9uZXh0RnJhbWVJc05ld2x5Q29tbWl0dGVkRnJhbWVPbkltcGxUaHJlYWQgPSB0cnVl
OwotCi0gICAgbV9jb21taXRDb21wbGV0aW9uRXZlbnRPbkltcGxUaHJlYWQtPnNpZ25hbCgpOwot
ICAgIG1fY29tbWl0Q29tcGxldGlvbkV2ZW50T25JbXBsVGhyZWFkID0gMDsKIH0KIAogdm9pZCBD
Q1RocmVhZFByb3h5OjpzY2hlZHVsZWRBY3Rpb25EcmF3QW5kU3dhcCgpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVh
ZFByb3h5LmgKaW5kZXggNGNjYmY0ZS4uMDBmNWY2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHku
aApAQCAtMzYsNiArMzYsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDQ0lucHV0
SGFuZGxlcjsKK2NsYXNzIENDTGF5ZXJJbXBsOwogY2xhc3MgQ0NMYXllclRyZWVIb3N0OwogY2xh
c3MgQ0NTY2hlZHVsZXI7CiBjbGFzcyBDQ1Njb3BlZFRocmVhZFByb3h5OwpAQCAtNjMsNyArNjQs
NyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldFZpc2libGUoYm9vbCk7CiAgICAgdmly
dHVhbCB2b2lkIHN0YXJ0KCk7CiAgICAgdmlydHVhbCB2b2lkIHN0b3AoKTsKLSAgICB2aXJ0dWFs
IHZvaWQgdXBkYXRlKExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmUqLCBjb25zdCBJbnRSZWN0
JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCk7CisgICAgdmlydHVhbCB2b2lk
IHVwZGF0ZShQYXNzT3duUHRyPENDVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmVVcGRhdGU+KTsKIAog
ICAgIC8vIENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQgaW1wbGVtZW50YXRpb24KICAgICB2aXJ0
dWFsIHZvaWQgb25Td2FwQnVmZmVyc0NvbXBsZXRlT25JbXBsVGhyZWFkKCk7CkBAIC04MSwxMiAr
ODIsNiBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGV4cGxpY2l0IENDVGhyZWFkUHJveHkoQ0NM
YXllclRyZWVIb3N0Kik7CiAKLSAgICBzdHJ1Y3QgVXBkYXRlRW50cnkgewotICAgICAgICBMYXll
clRleHR1cmVVcGRhdGVyOjpUZXh0dXJlKiBtX3RleHR1cmU7Ci0gICAgICAgIEludFJlY3QgbV9z
b3VyY2VSZWN0OwotICAgICAgICBJbnRSZWN0IG1fZGVzdFJlY3Q7Ci0gICAgfTsKLQogICAgIC8v
IENhbGxlZCBvbiBtYWluIHRocmVhZAogICAgIHZvaWQgYmVnaW5GcmFtZUFuZENvbW1pdChpbnQg
c2VxdWVuY2VOdW1iZXIsIGRvdWJsZSBmcmFtZUJlZ2luVGltZSwgUGFzc093blB0cjxDQ1Njcm9s
bEFuZFNjYWxlU2V0Pik7CiAgICAgdm9pZCBkaWRDb21taXRBbmREcmF3RnJhbWUoKTsKQEAgLTEw
Miw4ICs5Nyw4IEBAIHByaXZhdGU6CiAgICAgUGFzc093blB0cjxDQ1RocmVhZDo6VGFzaz4gY3Jl
YXRlQmVnaW5GcmFtZUFuZENvbW1pdFRhc2tPbkltcGxUaHJlYWQoKTsKICAgICB2b2lkIG9idGFp
bkJlZ2luRnJhbWVBbmRDb21taXRUYXNrRnJvbUNDVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50Kiwg
Q0NUaHJlYWQ6OlRhc2sqKik7CiAgICAgdm9pZCBwcmVwYXJlRnJhbWVSZXNvdXJjZXNPbkltcGxU
aHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqKTsKLSAgICB2b2lkIHVwZGF0ZVRleHR1cmVPbkltcGxU
aHJlYWQoUGFzc093blB0cjxVcGRhdGVFbnRyeT4pOwotICAgIHZvaWQgYmVnaW5GcmFtZUNvbXBs
ZXRlT25JbXBsVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50Kik7CisgICAgdm9pZCB1cGRhdGVUZXh0
dXJlT25JbXBsVGhyZWFkKFBhc3NPd25QdHI8Q0NUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZVVwZGF0
ZT4pOworICAgIHZvaWQgYmVnaW5GcmFtZUNvbXBsZXRlT25JbXBsVGhyZWFkKENDTGF5ZXJEYXRh
Kik7CiAgICAgdm9pZCByZXF1ZXN0UmVhZGJhY2tPbkltcGxUaHJlYWQoUmVhZGJhY2tSZXF1ZXN0
Kik7CiAgICAgdm9pZCBmaW5pc2hBbGxSZW5kZXJpbmdPbkltcGxUaHJlYWQoQ0NDb21wbGV0aW9u
RXZlbnQqKTsKICAgICB2b2lkIGluaXRpYWxpemVJbXBsT25JbXBsVGhyZWFkKENDQ29tcGxldGlv
bkV2ZW50Kik7CkBAIC0xMzYsMTMgKzEzMSwxMiBAQCBwcml2YXRlOgogICAgIC8vIFNldCB3aGVu
IHRoZSBtYWluIHRocmVhZCBpcyB3YWl0aW5nIG9uIGEgZmluaXNoQWxsUmVuZGVyaW5nIGNhbGwu
CiAgICAgQ0NDb21wbGV0aW9uRXZlbnQqIG1fZmluaXNoQWxsUmVuZGVyaW5nQ29tcGxldGlvbkV2
ZW50T25JbXBsVGhyZWFkOwogCi0gICAgLy8gU2V0IHdoZW4gdGhlIG1haW4gdGhyZWFkIGlzIHdh
aXRpbmcgb24gYSBjb21taXQgdG8gY29tcGxldGUuCi0gICAgQ0NDb21wbGV0aW9uRXZlbnQqIG1f
Y29tbWl0Q29tcGxldGlvbkV2ZW50T25JbXBsVGhyZWFkOwotCiAgICAgLy8gU2V0IHdoZW4gdGhl
IG5leHQgZHJhdyBzaG91bGQgcG9zdCBkaWRDb21taXRBbmREcmF3RnJhbWUgdG8gdGhlIG1haW4g
dGhyZWFkLgogICAgIGJvb2wgbV9uZXh0RnJhbWVJc05ld2x5Q29tbWl0dGVkRnJhbWVPbkltcGxU
aHJlYWQ7CiAKICAgICBDQ1RleHR1cmVVcGRhdGVyIG1fdGV4dHVyZVVwZGF0ZXJPbkltcGxUaHJl
YWQ7CisKKyAgICBSZWZQdHI8Q0NMYXllckRhdGE+IG1fY29tbWl0TmV3Um9vdExheWVyT25JbXBs
VGhyZWFkOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmNwcAppbmRleCA2
Y2NiNDA3Li41ZjMxNmU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmNwcApAQCAt
NTMsOCArNTMsNiBAQCBwcml2YXRlOgogCiBDQ1RpbGVkTGF5ZXJJbXBsOjpDQ1RpbGVkTGF5ZXJJ
bXBsKGludCBpZCkKICAgICA6IENDTGF5ZXJJbXBsKGlkKQotICAgICwgbV9za2lwc0RyYXcodHJ1
ZSkKLSAgICAsIG1fY29udGVudHNTd2l6emxlZChmYWxzZSkKIHsKIH0KIApAQCAtMTc3LDYgKzE3
NSw2NSBAQCB2b2lkIENDVGlsZWRMYXllckltcGw6OnN5bmNUZXh0dXJlSWQoaW50IGksIGludCBq
LCBQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmVJZCkKICAgICB0aWxlLT5zZXRUZXh0dXJlSWQodGV4
dHVyZUlkKTsKIH0KIAorQ0NUaWxlZExheWVyRGF0YTo6Q0NUaWxlZExheWVyRGF0YShpbnQgaWQp
CisgICAgOiBDQ0xheWVyRGF0YShpZCkKK3sKK30KKworQ0NUaWxlZExheWVyRGF0YTo6fkNDVGls
ZWRMYXllckRhdGEoKQoreworfQorCit2b2lkIENDVGlsZWRMYXllckRhdGE6OnNldFRpbGluZ0Rh
dGEoY29uc3QgQ0NMYXllclRpbGluZ0RhdGEmIHRpbGVyKQoreworICAgIGlmIChtX3RpbGVyKQor
ICAgICAgICBtX3RpbGVyLT5yZXNldCgpOworICAgIGVsc2UKKyAgICAgICAgbV90aWxlciA9IEND
TGF5ZXJUaWxpbmdEYXRhOjpjcmVhdGUodGlsZXIudGlsZVNpemUoKSwgdGlsZXIuaGFzQm9yZGVy
VGV4ZWxzKCkgPyBDQ0xheWVyVGlsaW5nRGF0YTo6SGFzQm9yZGVyVGV4ZWxzIDogQ0NMYXllclRp
bGluZ0RhdGE6Ok5vQm9yZGVyVGV4ZWxzKTsKKyAgICAqbV90aWxlciA9IHRpbGVyOworfQorCit2
b2lkIENDVGlsZWRMYXllckRhdGE6OnN5bmNUZXh0dXJlSWQoaW50IGksIGludCBqLCBQbGF0Zm9y
bTNET2JqZWN0IHRleHR1cmVJZCkKK3sKKyAgICBEcmF3YWJsZVRpbGUqIHRpbGUgPSB0aWxlQXQo
aSwgaik7CisgICAgaWYgKCF0aWxlKQorICAgICAgICB0aWxlID0gY3JlYXRlVGlsZShpLCBqKTsK
KyAgICB0aWxlLT5zZXRUZXh0dXJlSWQodGV4dHVyZUlkKTsKK30KKworRHJhd2FibGVUaWxlKiBD
Q1RpbGVkTGF5ZXJEYXRhOjp0aWxlQXQoaW50IGksIGludCBqKSBjb25zdAoreworICAgIHJldHVy
biBzdGF0aWNfY2FzdDxEcmF3YWJsZVRpbGUqPihtX3RpbGVyLT50aWxlQXQoaSwgaikpOworfQor
CitEcmF3YWJsZVRpbGUqIENDVGlsZWRMYXllckRhdGE6OmNyZWF0ZVRpbGUoaW50IGksIGludCBq
KQoreworICAgIFJlZlB0cjxEcmF3YWJsZVRpbGU+IHRpbGUgPSBhZG9wdFJlZihuZXcgRHJhd2Fi
bGVUaWxlKCkpOworICAgIG1fdGlsZXItPmFkZFRpbGUodGlsZSwgaSwgaik7CisgICAgcmV0dXJu
IHRpbGUuZ2V0KCk7Cit9CisKK3ZvaWQgQ0NUaWxlZExheWVyRGF0YTo6cHVzaFByb3BlcnRpZXMo
Y29uc3QgQ0NUaWxlZExheWVyRGF0YSogZnJvbSwgQ0NMYXllciogdG8pCit7CisgICAgQ0NUaWxl
ZExheWVySW1wbCogbGF5ZXIgPSBzdGF0aWNfY2FzdDxDQ1RpbGVkTGF5ZXJJbXBsKj4odG8pOwor
CisgICAgaWYgKCFmcm9tLT5tX3RpbGVyKSB7CisgICAgICAgIGxheWVyLT5zZXRTa2lwc0RyYXco
dHJ1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBsYXllci0+c2V0U2tpcHNEcmF3
KGZyb20tPm1fc2tpcHNEcmF3KTsKKyAgICBsYXllci0+c2V0Q29udGVudHNTd2l6emxlZChmcm9t
LT5tX2NvbnRlbnRzU3dpenpsZWQpOworICAgIGxheWVyLT5zZXRUaWxpbmdEYXRhKCooZnJvbS0+
bV90aWxlcikpOworCisgICAgZm9yIChDQ0xheWVyVGlsaW5nRGF0YTo6VGlsZU1hcDo6Y29uc3Rf
aXRlcmF0b3IgaXRlciA9IGZyb20tPm1fdGlsZXItPnRpbGVzKCkuYmVnaW4oKTsgaXRlciAhPSBm
cm9tLT5tX3RpbGVyLT50aWxlcygpLmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgaW50IGkgPSBp
dGVyLT5maXJzdC5maXJzdDsKKyAgICAgICAgaW50IGogPSBpdGVyLT5maXJzdC5zZWNvbmQ7Cisg
ICAgICAgIERyYXdhYmxlVGlsZSogdGlsZSA9IHN0YXRpY19jYXN0PERyYXdhYmxlVGlsZSo+KGl0
ZXItPnNlY29uZC5nZXQoKSk7CisgICAgICAgIGxheWVyLT5zeW5jVGV4dHVyZUlkKGksIGosIHRp
bGUtPnRleHR1cmVJZCgpKTsKKyAgICB9Cit9CisKIH0KIAogI2VuZGlmIC8vIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuaAppbmRleCA0Nzhi
MDM0Li44NDU1MDc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5oCkBAIC0zNSw3ICsz
NSwyMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIERyYXdhYmxlVGlsZTsKIAotY2xh
c3MgQ0NUaWxlZExheWVySW1wbCA6IHB1YmxpYyBDQ0xheWVySW1wbCB7CitjbGFzcyBDQ1RpbGVk
TGF5ZXJQcm9wZXJ0aWVzIHsKK3Byb3RlY3RlZDoKKyAgICBleHBsaWNpdCBDQ1RpbGVkTGF5ZXJQ
cm9wZXJ0aWVzKCkKKyAgICAgICAgOiBtX3NraXBzRHJhdyh0cnVlKQorICAgICAgICAsIG1fY29u
dGVudHNTd2l6emxlZChmYWxzZSkKKyAgICB7CisgICAgfQorCisgICAgYm9vbCBtX3NraXBzRHJh
dzsKKyAgICBib29sIG1fY29udGVudHNTd2l6emxlZDsKKyAgICBPd25QdHI8Q0NMYXllclRpbGlu
Z0RhdGE+IG1fdGlsZXI7Cit9OworCitjbGFzcyBDQ1RpbGVkTGF5ZXJJbXBsIDogcHVibGljIEND
TGF5ZXJJbXBsLCBwdWJsaWMgQ0NUaWxlZExheWVyUHJvcGVydGllcyB7CiBwdWJsaWM6CiAgICAg
c3RhdGljIFBhc3NSZWZQdHI8Q0NUaWxlZExheWVySW1wbD4gY3JlYXRlKGludCBpZCkKICAgICB7
CkBAIC04MiwxMSArOTUsNDEgQEAgcHJpdmF0ZToKIAogICAgIERyYXdhYmxlVGlsZSogdGlsZUF0
KGludCwgaW50KSBjb25zdDsKICAgICBEcmF3YWJsZVRpbGUqIGNyZWF0ZVRpbGUoaW50LCBpbnQp
OworfTsKIAotICAgIGJvb2wgbV9za2lwc0RyYXc7Ci0gICAgYm9vbCBtX2NvbnRlbnRzU3dpenps
ZWQ7CitjbGFzcyBDQ1RpbGVkTGF5ZXJEYXRhIDogcHVibGljIENDTGF5ZXJEYXRhLCBwdWJsaWMg
Q0NUaWxlZExheWVyUHJvcGVydGllcyB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8
Q0NUaWxlZExheWVyRGF0YT4gY3JlYXRlKGludCBpZCkKKyAgICB7CisgICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgQ0NUaWxlZExheWVyRGF0YShpZCkpOworICAgIH0KKyAgICBzdGF0aWMgdm9p
ZCBwdXNoUHJvcGVydGllcyhjb25zdCBDQ1RpbGVkTGF5ZXJEYXRhKiwgQ0NMYXllciopOwogCi0g
ICAgT3duUHRyPENDTGF5ZXJUaWxpbmdEYXRhPiBtX3RpbGVyOworICAgIHZpcnR1YWwgfkNDVGls
ZWRMYXllckRhdGEoKTsKKworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDQ0xheWVyPiBjcmVhdGVD
Q0xheWVyKCkKKyAgICB7CisgICAgICAgIHJldHVybiBDQ1RpbGVkTGF5ZXJJbXBsOjpjcmVhdGUo
aWQoKSk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIHB1c2hQcm9wZXJ0aWVzVG8oQ0NMYXll
ciogbGF5ZXIpCisgICAgeworICAgICAgICBDQ0xheWVyRGF0YTo6cHVzaFByb3BlcnRpZXModGhp
cywgbGF5ZXIpOworICAgICAgICBwdXNoUHJvcGVydGllcyh0aGlzLCBsYXllcik7CisgICAgfQor
CisgICAgdm9pZCBzZXRTa2lwc0RyYXcoYm9vbCBza2lwc0RyYXcpIHsgbV9za2lwc0RyYXcgPSBz
a2lwc0RyYXc7IH0KKyAgICB2b2lkIHNldENvbnRlbnRzU3dpenpsZWQoYm9vbCBjb250ZW50c1N3
aXp6bGVkKSB7IG1fY29udGVudHNTd2l6emxlZCA9IGNvbnRlbnRzU3dpenpsZWQ7IH0KKyAgICB2
b2lkIHNldFRpbGluZ0RhdGEoY29uc3QgQ0NMYXllclRpbGluZ0RhdGEmKTsKKyAgICB2b2lkIHN5
bmNUZXh0dXJlSWQoaW50LCBpbnQsIFBsYXRmb3JtM0RPYmplY3QpOworCitwcm90ZWN0ZWQ6Cisg
ICAgZXhwbGljaXQgQ0NUaWxlZExheWVyRGF0YShpbnQpOworCisgICAgRHJhd2FibGVUaWxlKiB0
aWxlQXQoaW50LCBpbnQpIGNvbnN0OworICAgIERyYXdhYmxlVGlsZSogY3JlYXRlVGlsZShpbnQs
IGludCk7CisKK3ByaXZhdGU6CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwu
Y3BwCmluZGV4IDk5ZTdlMTEuLmVhZmQxYWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllcklt
cGwuY3BwCkBAIC0zMjUsNiArMzI1LDE2IEBAIHZvaWQgQ0NWaWRlb0xheWVySW1wbDo6ZHVtcExh
eWVyUHJvcGVydGllcyhUZXh0U3RyZWFtJiB0cywgaW50IGluZGVudCkgY29uc3QKICAgICBDQ0xh
eWVySW1wbDo6ZHVtcExheWVyUHJvcGVydGllcyh0cywgaW5kZW50KTsKIH0KIAorQ0NWaWRlb0xh
eWVyRGF0YTo6Q0NWaWRlb0xheWVyRGF0YShpbnQgaWQsIFZpZGVvRnJhbWVQcm92aWRlciogcHJv
dmlkZXIpCisgICAgOiBDQ0xheWVyRGF0YShpZCkKKyAgICAsIG1fcHJvdmlkZXIocHJvdmlkZXIp
Cit7Cit9CisKK0NDVmlkZW9MYXllckRhdGE6On5DQ1ZpZGVvTGF5ZXJEYXRhKCkKK3sKK30KKwog
fQogCiAjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVy
SW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NW
aWRlb0xheWVySW1wbC5oCmluZGV4IGNjNGNjODIuLjg0OGJjMDMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Zp
ZGVvTGF5ZXJJbXBsLmgKQEAgLTg4LDYgKzg4LDI3IEBAIHByaXZhdGU6CiAgICAgSW50U2l6ZSBt
X25hdGl2ZVRleHR1cmVTaXplOwogfTsKIAorY2xhc3MgQ0NWaWRlb0xheWVyRGF0YSA6IHB1Ymxp
YyBDQ0xheWVyRGF0YSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q0NWaWRlb0xh
eWVyRGF0YT4gY3JlYXRlKGludCBpZCwgVmlkZW9GcmFtZVByb3ZpZGVyKiBwcm92aWRlcikKKyAg
ICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ0NWaWRlb0xheWVyRGF0YShpZCwgcHJv
dmlkZXIpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5DQ1ZpZGVvTGF5ZXJEYXRhKCk7CisKKyAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q0NMYXllcj4gY3JlYXRlQ0NMYXllcigpCisgICAgeworICAg
ICAgICByZXR1cm4gQ0NWaWRlb0xheWVySW1wbDo6Y3JlYXRlKGlkKCksIG1fcHJvdmlkZXIpOwor
ICAgIH0KKworcHJvdGVjdGVkOgorICAgIENDVmlkZW9MYXllckRhdGEoaW50LCBWaWRlb0ZyYW1l
UHJvdmlkZXIqKTsKKworcHJpdmF0ZToKKyAgICBWaWRlb0ZyYW1lUHJvdmlkZXIqIG1fcHJvdmlk
ZXI7Cit9OworCiB9CiAKICNlbmRpZiAvLyBDQ1ZpZGVvTGF5ZXJJbXBsX2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lh
LmNwcAppbmRleCA5YjI1YzgyLi41YzE0YjU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEuY3BwCkBAIC01MCw2
ICs1MCw3IEBACiAjaW5jbHVkZSAiU2tpYVV0aWxzLmgiCiAjaW5jbHVkZSAiV0VCUEltYWdlRW5j
b2Rlci5oIgogI2luY2x1ZGUgImNjL0NDQ2FudmFzTGF5ZXJJbXBsLmgiCisjaW5jbHVkZSAiY2Mv
Q0NQcm94eS5oIgogCiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTg4LDcg
Kzg5LDEwIEBAIHN0YXRpYyBTa0NhbnZhcyogY3JlYXRlQWNjZWxlcmF0ZWRDYW52YXMoY29uc3Qg
SW50U2l6ZSYgc2l6ZSwgSW1hZ2VCdWZmZXJEYXRhKiBkCiAgICAgY2FudmFzLT5zZXREZXZpY2Uo
bmV3IFNrR3B1RGV2aWNlKGdyLCB0ZXh0dXJlLmdldCgpKSktPnVucmVmKCk7CiAgICAgZGF0YS0+
bV9wbGF0Zm9ybUNvbnRleHQuc2V0R3JhcGhpY3NDb250ZXh0M0QoY29udGV4dDNEKTsKICNpZiBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgZGF0YS0+bV9wbGF0Zm9ybUxheWVyID0g
Q2FudmFzMkRMYXllckNocm9taXVtOjpjcmVhdGU8Q0NDYW52YXNMYXllckltcGw+KGNvbnRleHQz
RCwgc2l6ZSk7CisgICAgaWYgKENDUHJveHk6Omhhc0ltcGxUaHJlYWQoKSkKKyAgICAgICAgZGF0
YS0+bV9wbGF0Zm9ybUxheWVyID0gQ2FudmFzMkRMYXllckNocm9taXVtOjpjcmVhdGU8Q0NDYW52
YXNMYXllckRhdGE+KGNvbnRleHQzRCwgc2l6ZSk7CisgICAgZWxzZQorICAgICAgICBkYXRhLT5t
X3BsYXRmb3JtTGF5ZXIgPSBDYW52YXMyRExheWVyQ2hyb21pdW06OmNyZWF0ZTxDQ0NhbnZhc0xh
eWVySW1wbD4oY29udGV4dDNELCBzaXplKTsKICAgICBkYXRhLT5tX3BsYXRmb3JtTGF5ZXItPnNl
dFRleHR1cmVJZCh0ZXh0dXJlLmdldCgpLT5nZXRUZXh0dXJlSGFuZGxlKCkpOwogI2VuZGlmCiAg
ICAgcmV0dXJuIGNhbnZhczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYkV4dGVybmFsVGV4dHVyZUxheWVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYkV4dGVybmFsVGV4dHVyZUxheWVyLmNwcAppbmRleCA2ZGUzMjhmLi4yNmE4YTZiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJFeHRlcm5hbFRleHR1cmVMYXll
ci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRXh0ZXJuYWxUZXh0dXJl
TGF5ZXIuY3BwCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAicGxhdGZvcm0vV2ViRXh0ZXJu
YWxUZXh0dXJlTGF5ZXIuaCIKIAogI2luY2x1ZGUgImNjL0NDUGx1Z2luTGF5ZXJJbXBsLmgiCisj
aW5jbHVkZSAiY2MvQ0NQcm94eS5oIgogI2luY2x1ZGUgInBsYXRmb3JtL1dlYkZsb2F0UmVjdC5o
IgogI2luY2x1ZGUgIldlYkV4dGVybmFsVGV4dHVyZUxheWVySW1wbC5oIgogCkBAIC0zNiw3ICsz
NywxMCBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogV2ViRXh0ZXJuYWxUZXh0dXJlTGF5ZXIgV2Vi
RXh0ZXJuYWxUZXh0dXJlTGF5ZXI6OmNyZWF0ZSgpCiB7Ci0gICAgcmV0dXJuIFdlYkV4dGVybmFs
VGV4dHVyZUxheWVyKFdlYkV4dGVybmFsVGV4dHVyZUxheWVySW1wbDo6Y3JlYXRlPENDUGx1Z2lu
TGF5ZXJJbXBsPigpKTsKKyAgICBpZiAoQ0NQcm94eTo6aGFzSW1wbFRocmVhZCgpKQorICAgICAg
ICByZXR1cm4gV2ViRXh0ZXJuYWxUZXh0dXJlTGF5ZXIoV2ViRXh0ZXJuYWxUZXh0dXJlTGF5ZXJJ
bXBsOjpjcmVhdGU8Q0NQbHVnaW5MYXllckRhdGE+KCkpOworICAgIGVsc2UKKyAgICAgICAgcmV0
dXJuIFdlYkV4dGVybmFsVGV4dHVyZUxheWVyKFdlYkV4dGVybmFsVGV4dHVyZUxheWVySW1wbDo6
Y3JlYXRlPENDUGx1Z2luTGF5ZXJJbXBsPigpKTsKIH0KIAogdm9pZCBXZWJFeHRlcm5hbFRleHR1
cmVMYXllcjo6c2V0VGV4dHVyZUlkKHVuc2lnbmVkIGlkKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViTGF5ZXIuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViTGF5ZXIuY3BwCmluZGV4IGI0OGYwZjkuLmRkODQxYjQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJMYXllci5jcHAKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJwbGF0
Zm9ybS9XZWJMYXllci5oIgogCiAjaW5jbHVkZSAiY2MvQ0NMYXllckltcGwuaCIKKyNpbmNsdWRl
ICJjYy9DQ1Byb3h5LmgiCiAjaW5jbHVkZSAicGxhdGZvcm0vV2ViRmxvYXRQb2ludC5oIgogI2lu
Y2x1ZGUgIkNvbG9yLmgiCiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgpAQCAtNzcsNyArNzgs
MTAgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIFdlYkxheWVyIFdlYkxheWVyOjpjcmVhdGUoKQog
ewotICAgIHJldHVybiBXZWJMYXllcihXZWJMYXllckltcGw6OmNyZWF0ZTxDQ0xheWVySW1wbD4o
KSk7CisgICAgaWYgKENDUHJveHk6Omhhc0ltcGxUaHJlYWQoKSkKKyAgICAgICAgcmV0dXJuIFdl
YkxheWVyKFdlYkxheWVySW1wbDo6Y3JlYXRlPENDTGF5ZXJEYXRhPigpKTsKKyAgICBlbHNlCisg
ICAgICAgIHJldHVybiBXZWJMYXllcihXZWJMYXllckltcGw6OmNyZWF0ZTxDQ0xheWVySW1wbD4o
KSk7CiB9CiAKIHZvaWQgV2ViTGF5ZXI6OnJlc2V0KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYk1lZGlhUGxheWVyQ2xpZW50SW1wbC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJNZWRpYVBsYXllckNsaWVudEltcGwuY3BwCmluZGV4IGUzZGU2
Y2QuLjhkYzdhMWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYk1l
ZGlhUGxheWVyQ2xpZW50SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsLmNwcApAQCAtMTIxLDcgKzEyMSwxMSBAQCB2b2lkIFdl
Yk1lZGlhUGxheWVyQ2xpZW50SW1wbDo6cmVhZHlTdGF0ZUNoYW5nZWQoKQogICAgIG1fbWVkaWFQ
bGF5ZXItPnJlYWR5U3RhdGVDaGFuZ2VkKCk7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQogICAgIGlmIChoYXNWaWRlbygpICYmIHN1cHBvcnRzQWNjZWxlcmF0ZWRSZW5kZXJpbmco
KSAmJiAhbV92aWRlb0xheWVyKSB7Ci0gICAgICAgIG1fdmlkZW9MYXllciA9IFZpZGVvTGF5ZXJD
aHJvbWl1bTo6Y3JlYXRlPENDVmlkZW9MYXllckltcGw+KDAsIHRoaXMpOworICAgICAgICBpZiAo
Q0NQcm94eTo6aGFzSW1wbFRocmVhZCgpKQorICAgICAgICAgICAgbV92aWRlb0xheWVyID0gVmlk
ZW9MYXllckNocm9taXVtOjpjcmVhdGU8Q0NWaWRlb0xheWVyRGF0YT4oMCwgdGhpcyk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIG1fdmlkZW9MYXllciA9IFZpZGVvTGF5ZXJDaHJvbWl1bTo6
Y3JlYXRlPENDVmlkZW9MYXllckltcGw+KDAsIHRoaXMpOworCiAgICAgICAgIG1fdmlkZW9MYXll
ci0+c2V0T3BhcXVlKG1fb3BhcXVlKTsKICAgICB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBsdWdpbkNvbnRhaW5lckltcGwuY3BwIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUGx1Z2luQ29udGFpbmVySW1wbC5jcHAKaW5kZXggMGNk
MTFkOS4uNjdkMTZlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
UGx1Z2luQ29udGFpbmVySW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViUGx1Z2luQ29udGFpbmVySW1wbC5jcHAKQEAgLTUzNywxMCArNTM3LDEzIEBAIFdlYlBsdWdp
bkNvbnRhaW5lckltcGw6OldlYlBsdWdpbkNvbnRhaW5lckltcGwoV2ViQ29yZTo6SFRNTFBsdWdJ
bkVsZW1lbnQqIGVsZW1lCiAgICAgOiBXZWJDb3JlOjpQbHVnaW5WaWV3QmFzZSgwKQogICAgICwg
bV9lbGVtZW50KGVsZW1lbnQpCiAgICAgLCBtX3dlYlBsdWdpbih3ZWJQbHVnaW4pCit7CiAjaWYg
VVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgICwgbV9wbGF0Zm9ybUxheWVyKFBsdWdp
bkxheWVyQ2hyb21pdW06OmNyZWF0ZTxDQ1BsdWdpbkxheWVySW1wbD4oMCkpCisgICAgaWYgKEND
UHJveHk6Omhhc0ltcGxUaHJlYWQoKSkKKyAgICAgICAgbV9wbGF0Zm9ybUxheWVyID0gUGx1Z2lu
TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlPENDUGx1Z2luTGF5ZXJEYXRhPigwKTsKKyAgICBlbHNlCisg
ICAgICAgIG1fcGxhdGZvcm1MYXllciA9IFBsdWdpbkxheWVyQ2hyb21pdW06OmNyZWF0ZTxDQ1Bs
dWdpbkxheWVySW1wbD4oMCk7CiAjZW5kaWYKLXsKIH0KIAogV2ViUGx1Z2luQ29udGFpbmVySW1w
bDo6fldlYlBsdWdpbkNvbnRhaW5lckltcGwoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAKaW5kZXggMDZjMzVjNy4uOGE5NjQ3
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhv
c3RUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVl
SG9zdFRlc3QuY3BwCkBAIC0yNyw5ICsyNywxMiBAQAogI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVl
SG9zdC5oIgogCiAjaW5jbHVkZSAiQ29tcG9zaXRvckZha2VHcmFwaGljc0NvbnRleHQzRC5oIgor
I2luY2x1ZGUgIkNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuaCIKICNpbmNsdWRlICJDb250ZW50
TGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkZha2VXZWJHcmFwaGljc0NvbnRleHQzRC5oIgog
I2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJMYXllclBhaW50ZXJDaHJvbWl1
bS5oIgorI2luY2x1ZGUgIk1hbmFnZWRUZXh0dXJlLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hbmFn
ZXIuaCIKICNpbmNsdWRlICJXZWJDb21wb3NpdG9yLmgiCiAjaW5jbHVkZSAiV2ViS2l0LmgiCkBA
IC0zOTUsNyArMzk4LDExIEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0VGVzdDo6ZG9CZWdpblRlc3Qo
KQogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgbV9jbGllbnQgPSBNb2NrTGF5ZXJU
cmVlSG9zdENsaWVudDo6Y3JlYXRlKHRoaXMpOwogCi0gICAgUmVmUHRyPExheWVyQ2hyb21pdW0+
IHJvb3RMYXllciA9IExheWVyQ2hyb21pdW06OmNyZWF0ZTxDQ0xheWVySW1wbD4oMCk7CisgICAg
UmVmUHRyPExheWVyQ2hyb21pdW0+IHJvb3RMYXllcjsKKyAgICBpZiAoQ0NQcm94eTo6aGFzSW1w
bFRocmVhZCgpKQorICAgICAgICByb290TGF5ZXIgPSBMYXllckNocm9taXVtOjpjcmVhdGU8Q0NM
YXllckRhdGE+KDApOworICAgIGVsc2UKKyAgICAgICAgcm9vdExheWVyID0gTGF5ZXJDaHJvbWl1
bTo6Y3JlYXRlPENDTGF5ZXJJbXBsPigwKTsKICAgICBtX2xheWVyVHJlZUhvc3QgPSBNb2NrTGF5
ZXJUcmVlSG9zdDo6Y3JlYXRlKHRoaXMsIG1fY2xpZW50LmdldCgpLCByb290TGF5ZXIsIG1fc2V0
dGluZ3MpOwogICAgIEFTU0VSVF9UUlVFKG1fbGF5ZXJUcmVlSG9zdCk7CiAgICAgcm9vdExheWVy
LT5zZXRMYXllclRyZWVIb3N0KG1fbGF5ZXJUcmVlSG9zdC5nZXQoKSk7CkBAIC05NDEsNDAgKzk0
OCw3MSBAQCBwcml2YXRlOgogCiBjbGFzcyBDb250ZW50TGF5ZXJDaHJvbWl1bVdpdGhVcGRhdGVU
cmFja2luZyA6IHB1YmxpYyBDb250ZW50TGF5ZXJDaHJvbWl1bSB7CiBwdWJsaWM6Ci0gICAgY2xh
c3MgQ29udGVudExheWVyVGV4dHVyZVVwZGF0ZXIgOiBwdWJsaWMgTGF5ZXJUZXh0dXJlVXBkYXRl
ciB7CisgICAgY2xhc3MgQ29udGVudExheWVyVGV4dHVyZVVwZGF0ZXIgOiBwdWJsaWMgQ2FudmFz
TGF5ZXJUZXh0dXJlVXBkYXRlciB7CiAgICAgcHVibGljOgotICAgICAgICBjbGFzcyBUZXh0dXJl
IDogcHVibGljIExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmUgeworICAgICAgICBjbGFzcyBQ
YWludGVyIDogcHVibGljIExheWVyUGFpbnRlckNocm9taXVtIHsKICAgICAgICAgcHVibGljOgot
ICAgICAgICAgICAgVGV4dHVyZShDb250ZW50TGF5ZXJUZXh0dXJlVXBkYXRlciogdGV4dHVyZVVw
ZGF0ZXIsIFBhc3NPd25QdHI8TWFuYWdlZFRleHR1cmU+IHRleHR1cmUpCi0gICAgICAgICAgICAg
ICAgOiBtX3RleHR1cmUodGV4dHVyZSkKLSAgICAgICAgICAgICAgICAsIG1fdGV4dHVyZVVwZGF0
ZXIodGV4dHVyZVVwZGF0ZXIpCisgICAgICAgICAgICBzdGF0aWMgUGFzc093blB0cjxQYWludGVy
PiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFB0cihuZXcgUGFpbnRlcigpKTsgfQorCisgICAgICAg
ICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYp
CiAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIGNsYXNzIFRleHR1cmUgOiBw
dWJsaWMgQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZSB7CisgICAgICAgIHB1Ymxp
YzoKKyAgICAgICAgICAgIGNsYXNzIFRleHR1cmVVcGRhdGUgOiBwdWJsaWMgQ0NUZXh0dXJlVXBk
YXRlcjo6VGV4dHVyZVVwZGF0ZSB7CisgICAgICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICAg
ICAgc3RhdGljIFBhc3NPd25QdHI8VGV4dHVyZVVwZGF0ZT4gY3JlYXRlKFRleHR1cmUqIHRleHR1
cmUpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBUZXh0dXJlVXBkYXRlKHRleHR1cmUpKTsgfQorCisg
ICAgICAgICAgICAgICAgdm9pZCBzZXRUZXh0dXJlSWQodW5zaWduZWQgdGV4dHVyZUlkKSB7IG1f
dGV4dHVyZUlkID0gdGV4dHVyZUlkOyB9CisKKyAgICAgICAgICAgICAgICB2b2lkIHVwZGF0ZShH
cmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIG1fdGV4dHVyZS0+dGV4dHVyZVVwZGF0ZXIoKS0+bGF5ZXIoKS0+dXBkYXRlKCk7
CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFXzJELCBtX3RleHR1cmVJZCk7CisgICAgICAgICAgICAgICAgfQogCi0gICAg
ICAgICAgICB2aXJ0dWFsIE1hbmFnZWRUZXh0dXJlKiB0ZXh0dXJlKCkgeyByZXR1cm4gbV90ZXh0
dXJlLmdldCgpOyB9CisgICAgICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgICAgIGV4cGxp
Y2l0IFRleHR1cmVVcGRhdGUoVGV4dHVyZSogdGV4dHVyZSkKKyAgICAgICAgICAgICAgICAgICAg
OiBtX3RleHR1cmVJZCgwKQorICAgICAgICAgICAgICAgICAgICAsIG1fdGV4dHVyZSh0ZXh0dXJl
KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHZp
cnR1YWwgYm9vbCBuZWVkUHJlcGFyZVJlY3QoKQorICAgICAgICAgICAgICAgIHVuc2lnbmVkIG1f
dGV4dHVyZUlkOworICAgICAgICAgICAgICAgIFRleHR1cmUqIG1fdGV4dHVyZTsKKyAgICAgICAg
ICAgIH07CisKKyAgICAgICAgICAgIFRleHR1cmUoQ29udGVudExheWVyVGV4dHVyZVVwZGF0ZXIq
IHRleHR1cmVVcGRhdGVyLCBQYXNzT3duUHRyPE1hbmFnZWRUZXh0dXJlPiB0ZXh0dXJlKQorICAg
ICAgICAgICAgICAgIDogQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZSh0ZXh0dXJl
KQorICAgICAgICAgICAgICAgICwgbV90ZXh0dXJlVXBkYXRlcih0ZXh0dXJlVXBkYXRlcikKICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbV90ZXh0dXJlVXBkYXRlci0+bGF5
ZXIoKS0+bmVlZFByZXBhcmVSZWN0KCk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHZp
cnR1YWwgdm9pZCBwcmVwYXJlUmVjdChHcmFwaGljc0NvbnRleHQzRCosIFRleHR1cmVBbGxvY2F0
b3IqLCBjb25zdCBJbnRSZWN0JiAvKiBzb3VyY2VSZWN0ICovLCBjb25zdCBJbnRSZWN0JiAvKiBk
ZXN0UmVjdCAqLykKKyAgICAgICAgICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlKEdyYXBoaWNzQ29u
dGV4dDNEKiBjb250ZXh0LCBUZXh0dXJlQWxsb2NhdG9yKiBhbGxvY2F0b3IpCiAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgbV90ZXh0dXJlVXBkYXRlci0+bGF5ZXIoKS0+cHJlcGFyZVJl
Y3QoKTsKKyAgICAgICAgICAgICAgICBtX3RleHR1cmVVcGRhdGVyLT5sYXllcigpLT5wcmVwYXJl
KCk7CisgICAgICAgICAgICAgICAgQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZTo6
cHJlcGFyZShjb250ZXh0LCBhbGxvY2F0b3IpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAg
ICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50c1JlY3QoY29uc3QgSW50UmVjdCYgLyogc291cmNl
UmVjdCAqLykKKyAgICAgICAgICAgIHZpcnR1YWwgUGFzc093blB0cjxDQ1RleHR1cmVVcGRhdGVy
OjpUZXh0dXJlVXBkYXRlPiBjcmVhdGVDQ1RleHR1cmVVcGRhdGUoKQogICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIG1fdGV4dHVyZVVwZGF0ZXItPmxheWVyKCktPnBhaW50Q29udGVudHNS
ZWN0KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIFRleHR1cmVVcGRhdGU6OmNyZWF0ZSh0aGlz
KTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVJlY3Qo
R3JhcGhpY3NDb250ZXh0M0QqLCBjb25zdCBJbnRSZWN0JiAvKiBzb3VyY2VSZWN0ICovLCBjb25z
dCBJbnRSZWN0JiAvKiBkZXN0UmVjdCAqLykKKyAgICAgICAgICAgIHZpcnR1YWwgdm9pZCBwdXNo
UHJvcGVydGllc1RvKENDVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmVVcGRhdGUqIHVwZGF0ZSkKICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtX3RleHR1cmVVcGRhdGVyLT5sYXllcigpLT51
cGRhdGVSZWN0KCk7CisgICAgICAgICAgICAgICAgbV90ZXh0dXJlVXBkYXRlci0+bGF5ZXIoKS0+
cHVzaFByb3BlcnRpZXNUbygpOworICAgICAgICAgICAgICAgIFRleHR1cmVVcGRhdGUqIHRleHR1
cmVVcGRhdGUgPSBzdGF0aWNfY2FzdDxUZXh0dXJlVXBkYXRlKj4odXBkYXRlKTsKKworICAgICAg
ICAgICAgICAgIHRleHR1cmVVcGRhdGUtPnNldFRleHR1cmVJZCh0ZXh0dXJlKCktPnRleHR1cmVJ
ZCgpKTsKICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgQ29udGVudExheWVyVGV4dHVyZVVw
ZGF0ZXIqIHRleHR1cmVVcGRhdGVyKCkgeyByZXR1cm4gbV90ZXh0dXJlVXBkYXRlcjsgfQorCiAg
ICAgICAgIHByaXZhdGU6Ci0gICAgICAgICAgICBPd25QdHI8TWFuYWdlZFRleHR1cmU+IG1fdGV4
dHVyZTsKICAgICAgICAgICAgIENvbnRlbnRMYXllclRleHR1cmVVcGRhdGVyKiBtX3RleHR1cmVV
cGRhdGVyOwogICAgICAgICB9OwogCkBAIC05ODMsNyArMTAyMSw3IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ29udGVudExheWVyVGV4dHVyZVVwZGF0ZXIobGF5
ZXIpKTsKICAgICAgICAgfQogCi0gICAgICAgIHZpcnR1YWwgUGFzc093blB0cjxMYXllclRleHR1
cmVVcGRhdGVyOjpUZXh0dXJlPiBjcmVhdGVUZXh0dXJlKFRleHR1cmVNYW5hZ2VyKiBtYW5hZ2Vy
KQorICAgICAgICB2aXJ0dWFsIFBhc3NPd25QdHI8Q2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6
VGV4dHVyZT4gY3JlYXRlVGV4dHVyZShUZXh0dXJlTWFuYWdlciogbWFuYWdlcikKICAgICAgICAg
ewogICAgICAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBUZXh0dXJlKHRoaXMsIE1hbmFnZWRU
ZXh0dXJlOjpjcmVhdGUobWFuYWdlcikpKTsKICAgICAgICAgfQpAQCAtMTAwMSwyMSArMTAzOSwy
NSBAQCBwdWJsaWM6CiAgICAgICAgIENvbnRlbnRMYXllckNocm9taXVtV2l0aFVwZGF0ZVRyYWNr
aW5nKiBsYXllcigpIHsgcmV0dXJuIG1fbGF5ZXI7IH0KIAogICAgIHByaXZhdGU6Ci0gICAgICAg
IGV4cGxpY2l0IENvbnRlbnRMYXllclRleHR1cmVVcGRhdGVyKENvbnRlbnRMYXllckNocm9taXVt
V2l0aFVwZGF0ZVRyYWNraW5nKiBsYXllcikgOiBtX2xheWVyKGxheWVyKSB7IH0KKyAgICAgICAg
ZXhwbGljaXQgQ29udGVudExheWVyVGV4dHVyZVVwZGF0ZXIoQ29udGVudExheWVyQ2hyb21pdW1X
aXRoVXBkYXRlVHJhY2tpbmcqIGxheWVyKQorICAgICAgICAgICAgOiBDYW52YXNMYXllclRleHR1
cmVVcGRhdGVyKFBhaW50ZXI6OmNyZWF0ZSgpKQorICAgICAgICAgICAgLCBtX2xheWVyKGxheWVy
KQorICAgICAgICB7CisgICAgICAgIH0KIAogICAgICAgICBDb250ZW50TGF5ZXJDaHJvbWl1bVdp
dGhVcGRhdGVUcmFja2luZyogbV9sYXllcjsKICAgICB9OwogCi0gICAgc3RhdGljIFBhc3NSZWZQ
dHI8Q29udGVudExheWVyQ2hyb21pdW1XaXRoVXBkYXRlVHJhY2tpbmc+IGNyZWF0ZShDQ0xheWVy
RGVsZWdhdGUqIGRlbGVnYXRlLCBib29sIG5lZWRQcmVwYXJlUmVjdCkKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxDb250ZW50TGF5ZXJDaHJvbWl1bVdpdGhVcGRhdGVUcmFja2luZz4gY3JlYXRlKEND
TGF5ZXJEZWxlZ2F0ZSogZGVsZWdhdGUpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IENvbnRlbnRMYXllckNocm9taXVtV2l0aFVwZGF0ZVRyYWNraW5nKGRlbGVnYXRlLCBuZWVk
UHJlcGFyZVJlY3QpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDb250ZW50TGF5ZXJD
aHJvbWl1bVdpdGhVcGRhdGVUcmFja2luZyhkZWxlZ2F0ZSkpOwogICAgIH0KIAogICAgIHZpcnR1
YWwgdm9pZCBjcmVhdGVUZXh0dXJlVXBkYXRlcihjb25zdCBDQ0xheWVyVHJlZUhvc3QqKQogICAg
IHsKICAgICAgICAgbV9jb250ZW50TGF5ZXJUZXh0dXJlVXBkYXRlciA9IENvbnRlbnRMYXllclRl
eHR1cmVVcGRhdGVyOjpjcmVhdGUodGhpcyk7CiAgICAgfQotICAgIHZpcnR1YWwgTGF5ZXJUZXh0
dXJlVXBkYXRlciogdGV4dHVyZVVwZGF0ZXIoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRMYXll
clRleHR1cmVVcGRhdGVyLmdldCgpOyB9CisgICAgdmlydHVhbCBDYW52YXNMYXllclRleHR1cmVV
cGRhdGVyKiB0ZXh0dXJlVXBkYXRlcigpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudExheWVyVGV4
dHVyZVVwZGF0ZXIuZ2V0KCk7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlVG9VcGRhdGVJ
ZkRpcnR5KCkKICAgICB7CkBAIC0xMDM4LDUwICsxMDgwLDUyIEBAIHB1YmxpYzoKICAgICB2b2lk
IHBhaW50Q29udGVudHMoKSB7IG1fcGFpbnRDb250ZW50c0NvdW50Kys7IH0KICAgICBpbnQgcGFp
bnRDb250ZW50c0NvdW50KCkgeyByZXR1cm4gbV9wYWludENvbnRlbnRzQ291bnQ7IH0KIAotICAg
IHZvaWQgcHJlcGFyZVJlY3QoKSB7IG1fcHJlcGFyZVJlY3RDb3VudCsrOyB9Ci0gICAgaW50IHBy
ZXBhcmVSZWN0Q291bnQoKSB7IHJldHVybiBtX3ByZXBhcmVSZWN0Q291bnQ7IH0KKyAgICB2b2lk
IHByZXBhcmUoKSB7IG1fcHJlcGFyZUNvdW50Kys7IH0KKyAgICBpbnQgcHJlcGFyZUNvdW50KCkg
eyByZXR1cm4gbV9wcmVwYXJlQ291bnQ7IH0KIAotICAgIHZvaWQgcGFpbnRDb250ZW50c1JlY3Qo
KSB7IG1fcGFpbnRDb250ZW50c1JlY3RDb3VudCsrOyB9Ci0gICAgaW50IHBhaW50Q29udGVudHNS
ZWN0Q291bnQoKSB7IHJldHVybiBtX3BhaW50Q29udGVudHNSZWN0Q291bnQ7IH0KKyAgICB2b2lk
IHB1c2hQcm9wZXJ0aWVzVG8oKSB7IG1fcHVzaFByb3BlcnRpZXNUb0NvdW50Kys7IH0KKyAgICBp
bnQgcHVzaFByb3BlcnRpZXNUb0NvdW50KCkgeyByZXR1cm4gbV9wdXNoUHJvcGVydGllc1RvQ291
bnQ7IH0KIAotICAgIHZvaWQgdXBkYXRlUmVjdCgpIHsgbV91cGRhdGVSZWN0Q291bnQrKzsgfQot
ICAgIGludCB1cGRhdGVSZWN0Q291bnQoKSB7IHJldHVybiBtX3VwZGF0ZVJlY3RDb3VudDsgfQot
Ci0gICAgaW50IG5lZWRQcmVwYXJlUmVjdCgpIHsgcmV0dXJuIG1fbmVlZFByZXBhcmVSZWN0OyB9
CisgICAgdm9pZCB1cGRhdGUoKSB7IG1fdXBkYXRlQ291bnQrKzsgfQorICAgIGludCB1cGRhdGVD
b3VudCgpIHsgcmV0dXJuIG1fdXBkYXRlQ291bnQ7IH0KIAogICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxDQ0xheWVyPiBjcmVhdGVDQ0xheWVyKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBDQ0xheWVy
SW1wbDo6Y3JlYXRlKG1fbGF5ZXJJZCk7CisgICAgICAgIGlmIChDQ1Byb3h5OjpoYXNJbXBsVGhy
ZWFkKCkpCisgICAgICAgICAgICByZXR1cm4gQ0NMYXllckRhdGE6OmNyZWF0ZShtX2xheWVySWQp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gQ0NMYXllckltcGw6OmNyZWF0ZSht
X2xheWVySWQpOwogICAgIH0KIAogICAgIHZpcnR1YWwgdm9pZCBwdXNoUHJvcGVydGllc1RvKEND
TGF5ZXIqIGNjTGF5ZXIpCiAgICAgewotICAgICAgICBMYXllckNocm9taXVtOjpwdXNoUHJvcGVy
dGllczxDQ0xheWVySW1wbD4odGhpcywgY2NMYXllcik7CisgICAgICAgIGlmIChDQ1Byb3h5Ojpo
YXNJbXBsVGhyZWFkKCkpCisgICAgICAgICAgICBMYXllckNocm9taXVtOjpwdXNoUHJvcGVydGll
czxDQ0xheWVyRGF0YT4odGhpcywgY2NMYXllcik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IExheWVyQ2hyb21pdW06OnB1c2hQcm9wZXJ0aWVzPENDTGF5ZXJJbXBsPih0aGlzLCBjY0xheWVy
KTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgZXhwbGljaXQgQ29udGVudExheWVyQ2hyb21pdW1X
aXRoVXBkYXRlVHJhY2tpbmcoQ0NMYXllckRlbGVnYXRlICpkZWxlZ2F0ZSwgYm9vbCBuZWVkUHJl
cGFyZVJlY3QpCisgICAgZXhwbGljaXQgQ29udGVudExheWVyQ2hyb21pdW1XaXRoVXBkYXRlVHJh
Y2tpbmcoQ0NMYXllckRlbGVnYXRlICpkZWxlZ2F0ZSkKICAgICAgICAgOiBDb250ZW50TGF5ZXJD
aHJvbWl1bShkZWxlZ2F0ZSkKLSAgICAgICAgLCBtX25lZWRQcmVwYXJlUmVjdChuZWVkUHJlcGFy
ZVJlY3QpCiAgICAgICAgICwgbV9wcmVwYXJlVG9VcGRhdGVDb3VudCgwKQogICAgICAgICAsIG1f
aWRsZVByZXBhcmVUb1VwZGF0ZUNvdW50KDApCiAgICAgICAgICwgbV9wYWludENvbnRlbnRzQ291
bnQoMCkKLSAgICAgICAgLCBtX3ByZXBhcmVSZWN0Q291bnQoMCkKLSAgICAgICAgLCBtX3BhaW50
Q29udGVudHNSZWN0Q291bnQoMCkKLSAgICAgICAgLCBtX3VwZGF0ZVJlY3RDb3VudCgwKQorICAg
ICAgICAsIG1fcHJlcGFyZUNvdW50KDApCisgICAgICAgICwgbV9wdXNoUHJvcGVydGllc1RvQ291
bnQoMCkKKyAgICAgICAgLCBtX3VwZGF0ZUNvdW50KDApCiAgICAgewogICAgICAgICBzZXRCb3Vu
ZHMoSW50U2l6ZSgxMCwgMTApKTsKICAgICAgICAgc2V0SXNEcmF3YWJsZSh0cnVlKTsKICAgICB9
CiAKICAgICBSZWZQdHI8Q29udGVudExheWVyVGV4dHVyZVVwZGF0ZXI+IG1fY29udGVudExheWVy
VGV4dHVyZVVwZGF0ZXI7Ci0gICAgYm9vbCBtX25lZWRQcmVwYXJlUmVjdDsKICAgICBpbnQgbV9w
cmVwYXJlVG9VcGRhdGVDb3VudDsKICAgICBpbnQgbV9pZGxlUHJlcGFyZVRvVXBkYXRlQ291bnQ7
CiAgICAgaW50IG1fcGFpbnRDb250ZW50c0NvdW50OwotICAgIGludCBtX3ByZXBhcmVSZWN0Q291
bnQ7Ci0gICAgaW50IG1fcGFpbnRDb250ZW50c1JlY3RDb3VudDsKLSAgICBpbnQgbV91cGRhdGVS
ZWN0Q291bnQ7CisgICAgaW50IG1fcHJlcGFyZUNvdW50OworICAgIGludCBtX3B1c2hQcm9wZXJ0
aWVzVG9Db3VudDsKKyAgICBpbnQgbV91cGRhdGVDb3VudDsKIH07CiAKIC8vIExheWVyIG9wYWNp
dHkgY2hhbmdlIGR1cmluZyBwYWludCBzaG91bGQgbm90IHByZXZlbnQgY29tcG9zaXRvciByZXNv
dXJjZXMgZnJvbSBiZWluZyB1cGRhdGVkIGR1cmluZyBjb21taXQuCkBAIC0xMDg5LDcgKzExMzMs
NyBAQCBjbGFzcyBDQ0xheWVyVHJlZUhvc3RUZXN0T3BhY2l0eUNoYW5nZSA6IHB1YmxpYyBDQ0xh
eWVyVHJlZUhvc3RUZXN0IHsKIHB1YmxpYzoKICAgICBDQ0xheWVyVHJlZUhvc3RUZXN0T3BhY2l0
eUNoYW5nZSgpCiAgICAgICAgIDogbV90ZXN0T3BhY2l0eUNoYW5nZURlbGVnYXRlKHRoaXMpCi0g
ICAgICAgICwgbV91cGRhdGVDaGVja0xheWVyKENvbnRlbnRMYXllckNocm9taXVtV2l0aFVwZGF0
ZVRyYWNraW5nOjpjcmVhdGUoJm1fdGVzdE9wYWNpdHlDaGFuZ2VEZWxlZ2F0ZSwgdHJ1ZSkpCisg
ICAgICAgICwgbV91cGRhdGVDaGVja0xheWVyKENvbnRlbnRMYXllckNocm9taXVtV2l0aFVwZGF0
ZVRyYWNraW5nOjpjcmVhdGUoJm1fdGVzdE9wYWNpdHlDaGFuZ2VEZWxlZ2F0ZSkpCiAgICAgewog
ICAgIH0KIApAQCAtMTExNywxNSArMTE2MSwxNSBAQCBwdWJsaWM6CiAgICAgICAgIC8vIHBhaW50
Q29udGVudHMoKSBzaG91bGQgaGF2ZSBiZWVuIGNhbGxlZCBvbmNlLgogICAgICAgICBFWFBFQ1Rf
RVEoMSwgbV91cGRhdGVDaGVja0xheWVyLT5wYWludENvbnRlbnRzQ291bnQoKSk7CiAKLSAgICAg
ICAgLy8gcGFpbnRDb250ZW50c1JlY3QoKSBzaG91bGQgaGF2ZSBiZWVuIGNhbGxlZCB0aGUgc2Ft
ZQotICAgICAgICAvLyBhbW91bnQgb2YgdGltZXMgYXMgcHJlcGFyZVJlY3QoKS4KLSAgICAgICAg
RVhQRUNUX0VRKG1fdXBkYXRlQ2hlY2tMYXllci0+cHJlcGFyZVJlY3RDb3VudCgpLAotICAgICAg
ICAgICAgICAgICAgbV91cGRhdGVDaGVja0xheWVyLT5wYWludENvbnRlbnRzUmVjdENvdW50KCkp
OworICAgICAgICAvLyBwdXNoUHJvcGVydGllc1RvKCkgc2hvdWxkIGhhdmUgYmVlbiBjYWxsZWQg
dGhlIHNhbWUKKyAgICAgICAgLy8gYW1vdW50IG9mIHRpbWVzIGFzIHBhaW50Q29udGVudHMoKS4K
KyAgICAgICAgRVhQRUNUX0VRKG1fdXBkYXRlQ2hlY2tMYXllci0+cGFpbnRDb250ZW50c0NvdW50
KCksCisgICAgICAgICAgICAgICAgICBtX3VwZGF0ZUNoZWNrTGF5ZXItPnB1c2hQcm9wZXJ0aWVz
VG9Db3VudCgpKTsKIAotICAgICAgICAvLyB1cGRhdGVSZWN0KCkgc2hvdWxkIGhhdmUgYmVlbiBj
YWxsZWQgdGhlIHNhbWUKLSAgICAgICAgLy8gYW1vdW50IG9mIHRpbWVzIGFzIHBhaW50Q29udGVu
dHNSZWN0KCkuCi0gICAgICAgIEVYUEVDVF9FUShtX3VwZGF0ZUNoZWNrTGF5ZXItPnBhaW50Q29u
dGVudHNSZWN0Q291bnQoKSwKLSAgICAgICAgICAgICAgICAgIG1fdXBkYXRlQ2hlY2tMYXllci0+
dXBkYXRlUmVjdENvdW50KCkpOworICAgICAgICAvLyB1cGRhdGUoKSBzaG91bGQgaGF2ZSBiZWVu
IGNhbGxlZCB0aGUgc2FtZQorICAgICAgICAvLyBhbW91bnQgb2YgdGltZXMgYXMgcHVzaFByb3Bl
cnRpZXNUbygpLgorICAgICAgICBFWFBFQ1RfRVEobV91cGRhdGVDaGVja0xheWVyLT5wdXNoUHJv
cGVydGllc1RvQ291bnQoKSwKKyAgICAgICAgICAgICAgICAgIG1fdXBkYXRlQ2hlY2tMYXllci0+
dXBkYXRlQ291bnQoKSk7CiAKICAgICAgICAgLy8gY2xlYXIgbV91cGRhdGVDaGVja0xheWVyIHNv
IENDTGF5ZXJUcmVlSG9zdCBkaWVzLgogICAgICAgICBtX3VwZGF0ZUNoZWNrTGF5ZXIuY2xlYXIo
KTsKQEAgLTExNDEsMTEgKzExODUsMTIgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdFRlc3RPcGFj
aXR5Q2hhbmdlLCBydW5NdWx0aVRocmVhZCkKICAgICBydW5UZXN0KHRydWUpOwogfQogCi0vLyBw
cmVwYXJlUmVjdCgpIHNob3VsZCBub3QgYmUgY2FsbGVkIHdoZW4gbmVlZFByZXBhcmVSZWN0KCkg
cmV0dXJucyBmYWxzZS4KLWNsYXNzIENDTGF5ZXJUcmVlSG9zdFRlc3ROb1ByZXBhcmVSZWN0IDog
cHVibGljIENDTGF5ZXJUcmVlSG9zdFRlc3QgeworLy8gcHJlcGFyZVJlY3QoKSBzaG91bGQgbm90
IGJlIGNhbGxlZCB3aGVuIG5lZWRQcmVwYXJlKCkgcmV0dXJucyBmYWxzZS4KK2NsYXNzIENDTGF5
ZXJUcmVlSG9zdFRlc3ROb1ByZXBhcmUgOiBwdWJsaWMgQ0NMYXllclRyZWVIb3N0VGVzdCB7CiBw
dWJsaWM6Ci0gICAgQ0NMYXllclRyZWVIb3N0VGVzdE5vUHJlcGFyZVJlY3QoKQotICAgICAgICA6
IG1fdXBkYXRlQ2hlY2tMYXllcihDb250ZW50TGF5ZXJDaHJvbWl1bVdpdGhVcGRhdGVUcmFja2lu
Zzo6Y3JlYXRlKCZtX2RlbGVnYXRlLCBmYWxzZSkpCisgICAgQ0NMYXllclRyZWVIb3N0VGVzdE5v
UHJlcGFyZSgpCisgICAgICAgIDogbV91cGRhdGVDaGVja0xheWVyKENvbnRlbnRMYXllckNocm9t
aXVtV2l0aFVwZGF0ZVRyYWNraW5nOjpjcmVhdGUoJm1fZGVsZWdhdGUpKQorICAgICAgICAsIG1f
Y29tbWl0Q291bnQoMCkKICAgICB7CiAgICAgfQogCkBAIC0xMTU5LDM1ICsxMjA0LDQ5IEBAIHB1
YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBjb21taXRDb21wbGV0ZU9uQ0NUaHJlYWQoQ0NMYXll
clRyZWVIb3N0SW1wbCopCiAgICAgewotICAgICAgICBlbmRUZXN0KCk7CisgICAgICAgIGlmICht
X2NvbW1pdENvdW50KysgPCA1KQorICAgICAgICAgICAgcG9zdFNldE5lZWRzQW5pbWF0ZUFuZENv
bW1pdFRvTWFpblRocmVhZCgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbmRUZXN0KCk7
CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFuaW1hdGVBbmRMYXlvdXQoZG91YmxlIGZyYW1l
QmVnaW5UaW1lKQorICAgIHsKKyAgICAgICAgbV91cGRhdGVDaGVja0xheWVyLT5zZXROZWVkc0Rp
c3BsYXkoKTsKICAgICB9CiAKICAgICB2aXJ0dWFsIHZvaWQgYWZ0ZXJUZXN0KCkKICAgICB7Ci0g
ICAgICAgIC8vIHByZXBhcmVUb1VwZGF0ZSgpIHNob3VsZCBoYXZlIGJlZW4gY2FsbGVkIG9uY2Uu
Ci0gICAgICAgIEVYUEVDVF9FUSgxLCBtX3VwZGF0ZUNoZWNrTGF5ZXItPnByZXBhcmVUb1VwZGF0
ZUNvdW50KCkpOworICAgICAgICAvLyBwcmVwYXJlVG9VcGRhdGUoKSBzaG91bGQgaGF2ZSBiZWVu
IGNhbGxlZCB0aGUgc2FtZSBhbW91bnQKKyAgICAgICAgLy8gb2YgdGltZXMgYXMgbV9jb21taXRD
b3VudC4KKyAgICAgICAgRVhQRUNUX0VRKG1fY29tbWl0Q291bnQsIG1fdXBkYXRlQ2hlY2tMYXll
ci0+cHJlcGFyZVRvVXBkYXRlQ291bnQoKSk7CiAKLSAgICAgICAgLy8gaWRsZVByZXBhcmVUb1Vw
ZGF0ZSgpIHNob3VsZCBoYXZlIGJlZW4gY2FsbGVkIG9uY2UuCi0gICAgICAgIEVYUEVDVF9FUSgx
LCBtX3VwZGF0ZUNoZWNrTGF5ZXItPmlkbGVQcmVwYXJlVG9VcGRhdGVDb3VudCgpKTsKKyAgICAg
ICAgLy8gaWRsZVByZXBhcmVUb1VwZGF0ZSgpIHNob3VsZCBoYXZlIGJlZW4gY2FsbGVkIHRoZSBz
YW1lIGFtb3VudAorICAgICAgICAvLyBvZiB0aW1lcyBhcyBtX2NvbW1pdENvdW50LgorICAgICAg
ICBFWFBFQ1RfRVEobV9jb21taXRDb3VudCwKKyAgICAgICAgICAgICAgICAgIG1fdXBkYXRlQ2hl
Y2tMYXllci0+aWRsZVByZXBhcmVUb1VwZGF0ZUNvdW50KCkpOwogCi0gICAgICAgIC8vIHBhaW50
Q29udGVudHMoKSBzaG91bGQgaGF2ZSBiZWVuIGNhbGxlZCBvbmNlLgotICAgICAgICBFWFBFQ1Rf
RVEoMSwgbV91cGRhdGVDaGVja0xheWVyLT5wYWludENvbnRlbnRzQ291bnQoKSk7CisgICAgICAg
IC8vIHBhaW50Q29udGVudHMoKSBzaG91bGQgaGF2ZSBiZWVuIGNhbGxlZCB0aGUgc2FtZSBhbW91
bnQgb2YKKyAgICAgICAgLy8gdGltZSBhcyBtX2NvbW1pdENvdW50LgorICAgICAgICBFWFBFQ1Rf
RVEobV9jb21taXRDb3VudCwgbV91cGRhdGVDaGVja0xheWVyLT5wYWludENvbnRlbnRzQ291bnQo
KSk7CiAKLSAgICAgICAgLy8gcHJlcGFyZVJlY3QoKSBzaG91bGQgbm90IGhhdmUgYmVlbiBjYWxs
ZWQuCi0gICAgICAgIEVYUEVDVF9FUSgwLCBtX3VwZGF0ZUNoZWNrTGF5ZXItPnByZXBhcmVSZWN0
Q291bnQoKSk7CisgICAgICAgIC8vIHByZXBhcmUoKSBzaG91bGQgaGF2ZSBiZWVuIGNhbGxlZCBv
bmNlIGFzIG5vIHByZXBhcmUgaXMgbmVlZGVkCisgICAgICAgIC8vIGZvciBzdWJzZXF1ZW50IHVw
ZGF0ZXMuCisgICAgICAgIEVYUEVDVF9FUSgxLCBtX3VwZGF0ZUNoZWNrTGF5ZXItPnByZXBhcmVD
b3VudCgpKTsKIAotICAgICAgICAvLyB1cGRhdGVSZWN0KCkgc2hvdWxkIGhhdmUgYmVlbiBjYWxs
ZWQgdGhlIHNhbWUKLSAgICAgICAgLy8gYW1vdW50IG9mIHRpbWVzIGFzIHBhaW50Q29udGVudHNS
ZWN0KCkuCi0gICAgICAgIEVYUEVDVF9FUShtX3VwZGF0ZUNoZWNrTGF5ZXItPnBhaW50Q29udGVu
dHNSZWN0Q291bnQoKSwKLSAgICAgICAgICAgICAgICAgIG1fdXBkYXRlQ2hlY2tMYXllci0+dXBk
YXRlUmVjdENvdW50KCkpOworICAgICAgICAvLyB1cGRhdGUoKSBzaG91bGQgaGF2ZSBiZWVuIGNh
bGxlZCB0aGUgc2FtZSBhbW91bnQgb2YgdGltZXMgYXMKKyAgICAgICAgLy8gcHVzaFByb3BlcnRp
ZXNUbygpLgorICAgICAgICBFWFBFQ1RfRVEobV91cGRhdGVDaGVja0xheWVyLT5wdXNoUHJvcGVy
dGllc1RvQ291bnQoKSwKKyAgICAgICAgICAgICAgICAgIG1fdXBkYXRlQ2hlY2tMYXllci0+dXBk
YXRlQ291bnQoKSk7CiAgICAgfQogCiBwcml2YXRlOgogICAgIE1vY2tMYXllckRlbGVnYXRlIG1f
ZGVsZWdhdGU7CiAgICAgUmVmUHRyPENvbnRlbnRMYXllckNocm9taXVtV2l0aFVwZGF0ZVRyYWNr
aW5nPiBtX3VwZGF0ZUNoZWNrTGF5ZXI7CisgICAgaW50IG1fY29tbWl0Q291bnQ7CiB9OwogCi1U
RVNUX0YoQ0NMYXllclRyZWVIb3N0VGVzdE5vUHJlcGFyZVJlY3QsIHJ1bk11bHRpVGhyZWFkKQor
VEVTVF9GKENDTGF5ZXJUcmVlSG9zdFRlc3ROb1ByZXBhcmUsIHJ1bk11bHRpVGhyZWFkKQogewog
ICAgIHJ1blRlc3QodHJ1ZSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL0NhbnZhczJETGF5ZXJDaHJvbWl1bVRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9DYW52YXMyRExheWVyQ2hyb21pdW1UZXN0LmNwcAppbmRleCBiZGRkZjYxLi5l
ODhiYWJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NhbnZhczJE
TGF5ZXJDaHJvbWl1bVRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
Q2FudmFzMkRMYXllckNocm9taXVtVGVzdC5jcHAKQEAgLTY3LDE2ICs2NywxNCBAQCBwdWJsaWM6
CiAgICAgTU9DS19NRVRIT0QzKGRlbGV0ZVRleHR1cmUsIHZvaWQodW5zaWduZWQsIGNvbnN0IElu
dFNpemUmLCBHQzNEZW51bSkpOwogfTsKIAotY2xhc3MgTW9ja1VwZGF0ZUhhbmRsZXIgOiBwdWJs
aWMgTGF5ZXJUZXh0dXJlVXBkYXRlcjo6SGFuZGxlciB7CitjbGFzcyBNb2NrUHJlcGFyZUhhbmRs
ZXIgOiBwdWJsaWMgTGF5ZXJUZXh0dXJlVXBkYXRlcjo6SGFuZGxlciB7CiBwdWJsaWM6Ci0gICAg
TW9ja1VwZGF0ZUhhbmRsZXIoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIFRleHR1cmVBbGxv
Y2F0b3IqIGFsbG9jYXRvcikgOiBtX2NvbnRleHQoY29udGV4dCksIG1fYWxsb2NhdG9yKGFsbG9j
YXRvcikgeyB9CisgICAgTW9ja1ByZXBhcmVIYW5kbGVyKEdyYXBoaWNzQ29udGV4dDNEKiBjb250
ZXh0LCBUZXh0dXJlQWxsb2NhdG9yKiBhbGxvY2F0b3IpIDogbV9jb250ZXh0KGNvbnRleHQpLCBt
X2FsbG9jYXRvcihhbGxvY2F0b3IpIHsgfQogCi0gICAgdmlydHVhbCB2b2lkIGhhbmRsZShMYXll
clRleHR1cmVVcGRhdGVyOjpUZXh0dXJlKiB0ZXh0dXJlLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VS
ZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCkKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlKExh
eWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmUqIHRleHR1cmUpCiAgICAgewotICAgICAgICBpZiAo
dGV4dHVyZS0+bmVlZFByZXBhcmVSZWN0KCkpCi0gICAgICAgICAgICB0ZXh0dXJlLT5wcmVwYXJl
UmVjdChtX2NvbnRleHQsIG1fYWxsb2NhdG9yLCBzb3VyY2VSZWN0LCBkZXN0UmVjdCk7Ci0KLSAg
ICAgICAgdGV4dHVyZS0+dXBkYXRlUmVjdChtX2NvbnRleHQsIHNvdXJjZVJlY3QsIGRlc3RSZWN0
KTsKKyAgICAgICAgaWYgKHRleHR1cmUtPm5lZWRQcmVwYXJlKCkpCisgICAgICAgICAgICB0ZXh0
dXJlLT5wcmVwYXJlKG1fY29udGV4dCwgbV9hbGxvY2F0b3IpOwogICAgIH0KIAogcHJpdmF0ZToK
QEAgLTEwNyw3ICsxMDUsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIE1vY2tDYW52YXNDb250ZXh0
JiBpbXBsTW9jayA9ICpzdGF0aWNfY2FzdDxNb2NrQ2FudmFzQ29udGV4dCo+KEdyYXBoaWNzQ29u
dGV4dDNEUHJpdmF0ZTo6ZXh0cmFjdFdlYkdyYXBoaWNzQ29udGV4dDNEKGltcGxDb250ZXh0Lmdl
dCgpKSk7CiAKICAgICAgICAgTW9ja1RleHR1cmVBbGxvY2F0b3IgYWxsb2NhdG9yTW9jazsKLSAg
ICAgICAgTW9ja1VwZGF0ZUhhbmRsZXIgdXBkYXRlSGFuZGxlck1vY2soaW1wbENvbnRleHQuZ2V0
KCksICZhbGxvY2F0b3JNb2NrKTsKKyAgICAgICAgTW9ja1ByZXBhcmVIYW5kbGVyIHByZXBhcmVI
YW5kbGVyTW9jayhpbXBsQ29udGV4dC5nZXQoKSwgJmFsbG9jYXRvck1vY2spOwogCiAgICAgICAg
IGNvbnN0IEludFNpemUgc2l6ZSgzMDAsIDE1MCk7CiAgICAgICAgIGNvbnN0IHNpemVfdCBtYXhU
ZXh0dXJlU2l6ZSA9IHNpemUud2lkdGgoKSAqIHNpemUuaGVpZ2h0KCkgKiA0OwpAQCAtMTYzLDcg
KzE2MSw3IEBAIHByb3RlY3RlZDoKICAgICAgICAgICAgIFJlZlB0cjxDQ0xheWVyPiBsYXllciA9
IGNhbnZhcy0+Y3JlYXRlQ0NMYXllcigpOwogICAgICAgICAgICAgRVhQRUNUX0VRKDB1LCBzdGF0
aWNfY2FzdDxDQ0NhbnZhc0xheWVySW1wbCo+KGxheWVyLmdldCgpKS0+dGV4dHVyZUlkKCkpOwog
Ci0gICAgICAgICAgICBjYW52YXMtPmZvckVhY2hDb21wb3NpdG9yUmVzb3VyY2UodXBkYXRlSGFu
ZGxlck1vY2spOworICAgICAgICAgICAgY2FudmFzLT5mb3JFYWNoQ29tcG9zaXRvclJlc291cmNl
KHByZXBhcmVIYW5kbGVyTW9jayk7CiAgICAgICAgICAgICBjYW52YXMtPnB1c2hQcm9wZXJ0aWVz
VG8obGF5ZXIuZ2V0KCkpOwogCiAgICAgICAgICAgICBpZiAodGhyZWFkZWQpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RpbGVkTGF5ZXJDaHJvbWl1bVRlc3QuY3Bw
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UaWxlZExheWVyQ2hyb21pdW1UZXN0LmNw
cAppbmRleCA5NWUyNDYwLi44M2IxYWZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL1RpbGVkTGF5ZXJDaHJvbWl1bVRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvVGlsZWRMYXllckNocm9taXVtVGVzdC5jcHAKQEAgLTI2LDcgKzI2LDgg
QEAKIAogI2luY2x1ZGUgIlRpbGVkTGF5ZXJDaHJvbWl1bS5oIgogCi0jaW5jbHVkZSAiTGF5ZXJU
ZXh0dXJlVXBkYXRlci5oIgorI2luY2x1ZGUgIkNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuaCIK
KyNpbmNsdWRlICJMYXllclBhaW50ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIk1hbmFnZWRUZXh0
dXJlLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hbmFnZXIuaCIKICNpbmNsdWRlICJjYy9DQ1Npbmds
ZVRocmVhZFByb3h5LmgiIC8vIEZvciBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQKQEAgLTQwLDI3
ICs0MSw0MyBAQCBuYW1lc3BhY2UgewogCiBjbGFzcyBGYWtlSGFuZGxlciA6IHB1YmxpYyBMYXll
clRleHR1cmVVcGRhdGVyOjpIYW5kbGVyIHsKIHB1YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQgaGFu
ZGxlKExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmUqLCBjb25zdCBJbnRSZWN0JiwgY29uc3Qg
SW50UmVjdCYpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBoYW5kbGUoTGF5ZXJUZXh0dXJlVXBkYXRl
cjo6VGV4dHVyZSopIHsgfQogfTsKIAotY2xhc3MgRmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIgOiBw
dWJsaWMgTGF5ZXJUZXh0dXJlVXBkYXRlciB7CitjbGFzcyBGYWtlTGF5ZXJUZXh0dXJlVXBkYXRl
ciA6IHB1YmxpYyBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyIHsKIHB1YmxpYzoKLSAgICBjbGFz
cyBUZXh0dXJlIDogcHVibGljIExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmUgeworICAgIGNs
YXNzIFBhaW50ZXIgOiBwdWJsaWMgTGF5ZXJQYWludGVyQ2hyb21pdW0gewogICAgIHB1YmxpYzoK
LSAgICAgICAgVGV4dHVyZShQYXNzT3duUHRyPE1hbmFnZWRUZXh0dXJlPiB0ZXh0dXJlKSA6IG1f
dGV4dHVyZSh0ZXh0dXJlKSB7IH0KLSAgICAgICAgdmlydHVhbCB+VGV4dHVyZSgpIHsgfQorICAg
ICAgICBzdGF0aWMgUGFzc093blB0cjxQYWludGVyPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFB0
cihuZXcgUGFpbnRlcigpKTsgfQogCi0gICAgICAgIHZpcnR1YWwgTWFuYWdlZFRleHR1cmUqIHRl
eHR1cmUoKSB7IHJldHVybiBtX3RleHR1cmUuZ2V0KCk7IH0KLSAgICAgICAgdmlydHVhbCB2b2lk
IHVwZGF0ZVJlY3QoR3JhcGhpY3NDb250ZXh0M0QqLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50
UmVjdCYpIHsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0Jiwg
Y29uc3QgSW50UmVjdCYpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICB9CisgICAgfTsKKyAgICBjbGFzcyBUZXh0dXJlIDogcHVibGljIENhbnZh
c0xheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmUgeworICAgIHB1YmxpYzoKKyAgICAgICAgY2xh
c3MgVGV4dHVyZVVwZGF0ZSA6IHB1YmxpYyBDQ1RleHR1cmVVcGRhdGVyOjpUZXh0dXJlVXBkYXRl
IHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgc3RhdGljIFBhc3NPd25QdHI8VGV4dHVy
ZVVwZGF0ZT4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRQdHIobmV3IFRleHR1cmVVcGRhdGUoKSk7
IH0KKworICAgICAgICAgICAgdm9pZCB1cGRhdGUoR3JhcGhpY3NDb250ZXh0M0QqKSB7IH0KKwor
ICAgICAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgICAgICBleHBsaWNpdCBUZXh0dXJlVXBk
YXRlKCkgeyB9CisgICAgICAgICAgICB9OworCisgICAgICAgIFRleHR1cmUoUGFzc093blB0cjxN
YW5hZ2VkVGV4dHVyZT4gdGV4dHVyZSkgOiBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0
dXJlKHRleHR1cmUpIHsgfQorCisgICAgICAgIHZpcnR1YWwgUGFzc093blB0cjxDQ1RleHR1cmVV
cGRhdGVyOjpUZXh0dXJlVXBkYXRlPiBjcmVhdGVDQ1RleHR1cmVVcGRhdGUoKSB7IHJldHVybiBU
ZXh0dXJlVXBkYXRlOjpjcmVhdGUoKTsgfQogCi0gICAgcHJpdmF0ZToKLSAgICAgICAgT3duUHRy
PE1hbmFnZWRUZXh0dXJlPiBtX3RleHR1cmU7CisgICAgICAgIHZpcnR1YWwgdm9pZCBwdXNoUHJv
cGVydGllc1RvKENDVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmVVcGRhdGUqKSB7IH0KICAgICB9Owog
Ci0gICAgRmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKSB7IH0KKyAgICBGYWtlTGF5ZXJUZXh0dXJl
VXBkYXRlcigpIDogQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcihQYWludGVyOjpjcmVhdGUoKSkg
eyB9CiAgICAgdmlydHVhbCB+RmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKSB7IH0KIAotICAgIHZp
cnR1YWwgUGFzc093blB0cjxMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlPiBjcmVhdGVUZXh0
dXJlKFRleHR1cmVNYW5hZ2VyKiBtYW5hZ2VyKSB7IHJldHVybiBhZG9wdFB0cihuZXcgVGV4dHVy
ZShNYW5hZ2VkVGV4dHVyZTo6Y3JlYXRlKG1hbmFnZXIpKSk7IH0KKyAgICB2aXJ0dWFsIFBhc3NP
d25QdHI8Q2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZT4gY3JlYXRlVGV4dHVyZShU
ZXh0dXJlTWFuYWdlciogbWFuYWdlcikgeyByZXR1cm4gYWRvcHRQdHIobmV3IFRleHR1cmUoTWFu
YWdlZFRleHR1cmU6OmNyZWF0ZShtYW5hZ2VyKSkpOyB9CiAgICAgdmlydHVhbCBTYW1wbGVkVGV4
ZWxGb3JtYXQgc2FtcGxlZFRleGVsRm9ybWF0KEdDM0RlbnVtKSB7IHJldHVybiBTYW1wbGVkVGV4
ZWxGb3JtYXRSR0JBOyB9CiAgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHMoY29uc3QgSW50
UmVjdCYsIGNvbnN0IEludFNpemUmLCBpbnQsIGZsb2F0KSB7IH0KIH07CkBAIC04MSw3ICs5OCw3
IEBAIGNsYXNzIEZha2VUaWxlZExheWVyQ2hyb21pdW0gOiBwdWJsaWMgVGlsZWRMYXllckNocm9t
aXVtIHsKIHB1YmxpYzoKICAgICBleHBsaWNpdCBGYWtlVGlsZWRMYXllckNocm9taXVtKFRleHR1
cmVNYW5hZ2VyKiB0ZXh0dXJlTWFuYWdlcikKICAgICAgICAgOiBUaWxlZExheWVyQ2hyb21pdW0o
MCkKLSAgICAgICAgLCBtX2Zha2VUZXh0dXJlVXBkYXRlcihhZG9wdFJlZihuZXcgRmFrZUxheWVy
VGV4dHVyZVVwZGF0ZXIpKQorICAgICAgICAsIG1fZmFrZVRleHR1cmVVcGRhdGVyKGFkb3B0UmVm
KG5ldyBGYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpKSkKICAgICAgICAgLCBtX3RleHR1cmVNYW5h
Z2VyKHRleHR1cmVNYW5hZ2VyKQogICAgIHsKICAgICAgICAgc2V0VGlsZVNpemUoSW50U2l6ZSgx
MDAsIDEwMCkpOwpAQCAtMTMyLDcgKzE0OSw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgdmly
dHVhbCB2b2lkIGNyZWF0ZVRleHR1cmVVcGRhdGVyKGNvbnN0IENDTGF5ZXJUcmVlSG9zdCopIHsg
fQogCi0gICAgdmlydHVhbCBMYXllclRleHR1cmVVcGRhdGVyKiB0ZXh0dXJlVXBkYXRlcigpIGNv
bnN0CisgICAgdmlydHVhbCBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyKiB0ZXh0dXJlVXBkYXRl
cigpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gbV9mYWtlVGV4dHVyZVVwZGF0ZXIuZ2V0
KCk7CiAgICAgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123743</attachid>
            <date>2012-01-24 08:51:05 -0800</date>
            <delta_ts>2012-01-24 08:51:05 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>asyn-commit.diff</filename>
            <type>text/plain</type>
            <size>147171</size>
            <attacher name="David Reveman">reveman</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZ3lwaQppbmRleCA0YTMwOTg1Li4xNTYwZWY0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBA
IC0zNTcyLDggKzM1NzIsNiBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9NYW5hZ2VkVGV4dHVyZS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL01hbmFnZWRUZXh0dXJlLmgnLAotICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVN1YkltYWdlLmNwcCcsCi0gICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlU3ViSW1hZ2UuaCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBk
YXRlci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9NZWRpYVBs
YXllclByaXZhdGVDaHJvbWl1bS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9QbGF0Zm9ybUNhbnZhcy5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9CaXRtYXBD
YW52YXNMYXllclRleHR1cmVVcGRhdGVyLmNwcAppbmRleCA1NGU4NTc0Li43ZjE4ZDNiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9CaXRtYXBD
YW52YXNMYXllclRleHR1cmVVcGRhdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9CaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmNwcApA
QCAtNDYsMTAgKzQ2LDI0IEBAIEJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1
cmU6On5UZXh0dXJlKCkKIHsKIH0KIAotdm9pZCBCaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRh
dGVyOjpUZXh0dXJlOjp1cGRhdGVSZWN0KEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBUZXh0
dXJlQWxsb2NhdG9yQmluZGluZyogYmluZGluZywgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwg
Y29uc3QgSW50UmVjdCYgZGVzdFJlY3QpCitQYXNzT3duUHRyPENDVGV4dHVyZVVwZGF0ZXI6OlRl
eHR1cmVVcGRhdGU+IEJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU6OmNy
ZWF0ZUNDVGV4dHVyZVVwZGF0ZSgpCiB7Ci0gICAgdGV4dHVyZSgpLT5iaW5kVGV4dHVyZShjb250
ZXh0LCBiaW5kaW5nKTsKLSAgICB0ZXh0dXJlVXBkYXRlcigpLT51cGRhdGVUZXh0dXJlUmVjdChj
b250ZXh0LCB0ZXh0dXJlKCksIHNvdXJjZVJlY3QsIGRlc3RSZWN0KTsKKyAgICByZXR1cm4gQ0NU
ZXh0dXJlVXBkYXRlcjo6U3ViSW1hZ2VUZXh0dXJlVXBkYXRlOjpjcmVhdGUodGV4dHVyZVVwZGF0
ZXIoKS0+dXNlTWFwVGV4U3ViSW1hZ2UoKSk7Cit9CisKK3ZvaWQgQml0bWFwQ2FudmFzTGF5ZXJU
ZXh0dXJlVXBkYXRlcjo6VGV4dHVyZTo6cHVzaFByb3BlcnRpZXNUbyhDQ1RleHR1cmVVcGRhdGVy
OjpUZXh0dXJlVXBkYXRlKiB0ZXh0dXJlVXBkYXRlKQoreworICAgIENDVGV4dHVyZVVwZGF0ZXI6
OlN1YkltYWdlVGV4dHVyZVVwZGF0ZSogdXBkYXRlID0gc3RhdGljX2Nhc3Q8Q0NUZXh0dXJlVXBk
YXRlcjo6U3ViSW1hZ2VUZXh0dXJlVXBkYXRlKj4odGV4dHVyZVVwZGF0ZSk7CisKKyAgICBJbnRS
ZWN0IGRlc3RSZWN0ID0gdXBkYXRlUmVjdCgpOworICAgIEludFBvaW50IG9mZnNldCA9IGNvbnRl
bnRPZmZzZXQoKTsKKyAgICBJbnRSZWN0IHNvdXJjZVJlY3QgPSBJbnRSZWN0KEludFBvaW50KGRl
c3RSZWN0LngoKSArIG9mZnNldC54KCksIGRlc3RSZWN0LnkoKSArIG9mZnNldC55KCkpLCBkZXN0
UmVjdC5zaXplKCkpOworCisgICAgdXBkYXRlLT5zZXRGb3JtYXQodGV4dHVyZSgpLT5mb3JtYXQo
KSk7CisgICAgdXBkYXRlLT5zZXRUZXh0dXJlSWQodGV4dHVyZSgpLT50ZXh0dXJlSWQoKSk7Cisg
ICAgdXBkYXRlLT5zZXRSZWN0KGRlc3RSZWN0KTsKKyAgICBQbGF0Zm9ybUNhbnZhczo6QXV0b0xv
Y2tlciBsb2NrZXIoJnRleHR1cmVVcGRhdGVyKCktPmNhbnZhcygpKTsKKyAgICB1cGRhdGUtPnNl
dFBpeGVsRGF0YShsb2NrZXIucGl4ZWxzKCksIHRleHR1cmVVcGRhdGVyKCktPmNvbnRlbnRSZWN0
KCksIHNvdXJjZVJlY3QpOwogfQogCiBQYXNzUmVmUHRyPEJpdG1hcENhbnZhc0xheWVyVGV4dHVy
ZVVwZGF0ZXI+IEJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OmNyZWF0ZShQYXNzT3du
UHRyPExheWVyUGFpbnRlckNocm9taXVtPiBwYWludGVyLCBib29sIHVzZU1hcFRleFN1YkltYWdl
KQpAQCAtNTksNyArNzMsNyBAQCBQYXNzUmVmUHRyPEJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVw
ZGF0ZXI+IEJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OmNyZQogCiBCaXRtYXBDYW52
YXNMYXllclRleHR1cmVVcGRhdGVyOjpCaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyKFBh
c3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+IHBhaW50ZXIsIGJvb2wgdXNlTWFwVGV4U3Vi
SW1hZ2UpCiAgICAgOiBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyKHBhaW50ZXIpCi0gICAgLCBt
X3RleFN1YkltYWdlKHVzZU1hcFRleFN1YkltYWdlKQorICAgICwgbV91c2VNYXBUZXhTdWJJbWFn
ZSh1c2VNYXBUZXhTdWJJbWFnZSkKIHsKIH0KIApAQCAtNjcsNyArODEsNyBAQCBCaXRtYXBDYW52
YXNMYXllclRleHR1cmVVcGRhdGVyOjp+Qml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcigp
CiB7CiB9CiAKLVBhc3NPd25QdHI8TGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZT4gQml0bWFw
Q2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6Y3JlYXRlVGV4dHVyZShUZXh0dXJlTWFuYWdlciog
bWFuYWdlcikKK1Bhc3NPd25QdHI8Q2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZT4g
Qml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6Y3JlYXRlVGV4dHVyZShUZXh0dXJlTWFu
YWdlciogbWFuYWdlcikKIHsKICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFRleHR1cmUodGhpcywg
TWFuYWdlZFRleHR1cmU6OmNyZWF0ZShtYW5hZ2VyKSkpOwogfQpAQCAtODEsOCArOTUsNiBAQCBM
YXllclRleHR1cmVVcGRhdGVyOjpTYW1wbGVkVGV4ZWxGb3JtYXQgQml0bWFwQ2FudmFzTGF5ZXJU
ZXh0dXJlVXBkYXRlcjo6c2FtcGxlZAogCiB2b2lkIEJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVw
ZGF0ZXI6OnBhaW50Q29udGVudHMoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IElu
dFNpemUmIHRpbGVTaXplLCBpbnQgYm9yZGVyVGV4ZWxzLCBmbG9hdCBjb250ZW50c1NjYWxlLCBJ
bnRSZWN0KiByZXN1bHRpbmdPcGFxdWVSZWN0KQogewotICAgIG1fdGV4U3ViSW1hZ2Uuc2V0U3Vi
SW1hZ2VTaXplKHRpbGVTaXplKTsKLQogICAgIGJvb2wgbGF5ZXJJc09wYXF1ZSA9IG1fY2FudmFz
Lm9wYXF1ZSgpOwogCiAgICAgbV9jYW52YXMucmVzaXplKGNvbnRlbnRSZWN0LnNpemUoKSk7CkBA
IC05MywxOSArMTA1LDEyIEBAIHZvaWQgQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6
cGFpbnRDb250ZW50cyhjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwKICAgICAgICAgYm9yZGVy
VGV4ZWxzID8gUGxhdGZvcm1DYW52YXM6OlBhaW50ZXI6OkdyYXlzY2FsZVRleHQgOiBQbGF0Zm9y
bUNhbnZhczo6UGFpbnRlcjo6U3VicGl4ZWxUZXh0OwogICAgIFBsYXRmb3JtQ2FudmFzOjpQYWlu
dGVyIGNhbnZhc1BhaW50ZXIoJm1fY2FudmFzLCB0ZXh0T3B0aW9uKTsKICAgICBjYW52YXNQYWlu
dGVyLnNraWFDb250ZXh0KCktPnNldFRyYWNrT3BhcXVlUmVnaW9uKCFsYXllcklzT3BhcXVlKTsK
LSAgICBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpwYWludENvbnRlbnRzKCpjYW52YXNQYWlu
dGVyLmNvbnRleHQoKSwgY29udGVudFJlY3QsIGNvbnRlbnRzU2NhbGUpOworICAgIHBhaW50Q2Fu
dmFzQ29udGVudHMoKmNhbnZhc1BhaW50ZXIuY29udGV4dCgpLCBjb250ZW50UmVjdCwgY29udGVu
dHNTY2FsZSk7CiAKICAgICBpZiAoIWxheWVySXNPcGFxdWUpCiAgICAgICAgICpyZXN1bHRpbmdP
cGFxdWVSZWN0ID0gY2FudmFzUGFpbnRlci5za2lhQ29udGV4dCgpLT5vcGFxdWVSZWdpb24oKS5h
c1JlY3QoKTsKIH0KIAotdm9pZCBCaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjp1cGRh
dGVUZXh0dXJlUmVjdChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgTWFuYWdlZFRleHR1cmUq
IHRleHR1cmUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RS
ZWN0KQotewotICAgIFBsYXRmb3JtQ2FudmFzOjpBdXRvTG9ja2VyIGxvY2tlcigmbV9jYW52YXMp
OwotCi0gICAgbV90ZXhTdWJJbWFnZS51cGxvYWQobG9ja2VyLnBpeGVscygpLCBjb250ZW50UmVj
dCgpLCBzb3VyY2VSZWN0LCBkZXN0UmVjdCwgdGV4dHVyZS0+Zm9ybWF0KCksIGNvbnRleHQpOwot
fQotCiB2b2lkIEJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OnNldE9wYXF1ZShib29s
IG9wYXF1ZSkKIHsKICAgICBtX2NhbnZhcy5zZXRPcGFxdWUob3BhcXVlKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0JpdG1hcENhbnZhc0xh
eWVyVGV4dHVyZVVwZGF0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0JpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuaAppbmRleCAwZDBmNDg4Li5h
MWU4YWI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9CaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBk
YXRlci5oCkBAIC0zMCw3ICszMCw2IEBACiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQogCiAjaW5jbHVkZSAiQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5oIgotI2luY2x1ZGUgIkxh
eWVyVGV4dHVyZVN1YkltYWdlLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1DYW52YXMuaCIKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewpAQCAtNDcsNyArNDYsOCBAQCBwdWJsaWM6CiAgICAgICAgIFRleHR1
cmUoQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlciosIFBhc3NPd25QdHI8TWFuYWdlZFRl
eHR1cmU+KTsKICAgICAgICAgdmlydHVhbCB+VGV4dHVyZSgpOwogCi0gICAgICAgIHZpcnR1YWwg
dm9pZCB1cGRhdGVSZWN0KEdyYXBoaWNzQ29udGV4dDNEKiwgVGV4dHVyZUFsbG9jYXRvckJpbmRp
bmcqLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCk7
CisgICAgICAgIHZpcnR1YWwgUGFzc093blB0cjxDQ1RleHR1cmVVcGRhdGVyOjpUZXh0dXJlVXBk
YXRlPiBjcmVhdGVDQ1RleHR1cmVVcGRhdGUoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHB1c2hQ
cm9wZXJ0aWVzVG8oQ0NUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZVVwZGF0ZSopOwogCiAgICAgcHJp
dmF0ZToKICAgICAgICAgQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlciogdGV4dHVyZVVw
ZGF0ZXIoKSB7IHJldHVybiBtX3RleHR1cmVVcGRhdGVyOyB9CkBAIC01OCwxOCArNTgsMTggQEAg
cHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVw
ZGF0ZXI+IGNyZWF0ZShQYXNzT3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPiwgYm9vbCB1c2VN
YXBUZXhTdWJJbWFnZSk7CiAgICAgdmlydHVhbCB+Qml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBk
YXRlcigpOwogCi0gICAgdmlydHVhbCBQYXNzT3duUHRyPExheWVyVGV4dHVyZVVwZGF0ZXI6OlRl
eHR1cmU+IGNyZWF0ZVRleHR1cmUoVGV4dHVyZU1hbmFnZXIqKTsKKyAgICB2aXJ0dWFsIFBhc3NP
d25QdHI8Q2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZT4gY3JlYXRlVGV4dHVyZShU
ZXh0dXJlTWFuYWdlciopOwogICAgIHZpcnR1YWwgU2FtcGxlZFRleGVsRm9ybWF0IHNhbXBsZWRU
ZXhlbEZvcm1hdChHQzNEZW51bSB0ZXh0dXJlRm9ybWF0KTsKICAgICB2aXJ0dWFsIHZvaWQgcGFp
bnRDb250ZW50cyhjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgSW50U2l6ZSYgdGls
ZVNpemUsIGludCBib3JkZXJUZXhlbHMsIGZsb2F0IGNvbnRlbnRzU2NhbGUsIEludFJlY3QqIHJl
c3VsdGluZ09wYXF1ZVJlY3QpOwotICAgIHZvaWQgdXBkYXRlVGV4dHVyZVJlY3QoR3JhcGhpY3ND
b250ZXh0M0QqLCBNYW5hZ2VkVGV4dHVyZSosIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNv
bnN0IEludFJlY3QmIGRlc3RSZWN0KTsKLQogICAgIHZpcnR1YWwgdm9pZCBzZXRPcGFxdWUoYm9v
bCk7CisgICAgYm9vbCB1c2VNYXBUZXhTdWJJbWFnZSgpIHsgcmV0dXJuIG1fdXNlTWFwVGV4U3Vi
SW1hZ2U7IH0KKyAgICBQbGF0Zm9ybUNhbnZhcyYgY2FudmFzKCkgeyByZXR1cm4gbV9jYW52YXM7
IH0KIAogcHJpdmF0ZToKICAgICBCaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyKFBhc3NP
d25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+LCBib29sIHVzZU1hcFRleFN1YkltYWdlKTsKIAor
ICAgIGJvb2wgbV91c2VNYXBUZXhTdWJJbWFnZTsKICAgICBQbGF0Zm9ybUNhbnZhcyBtX2NhbnZh
czsKLSAgICBMYXllclRleHR1cmVTdWJJbWFnZSBtX3RleFN1YkltYWdlOwogfTsKIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vQml0bWFwU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9CaXRtYXBTa1Bp
Y3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmNwcAppbmRleCBiZjQzYTU5Li43Njk2MGMx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9C
aXRtYXBTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9CaXRtYXBTa1BpY3R1cmVDYW52YXNM
YXllclRleHR1cmVVcGRhdGVyLmNwcApAQCAtMzEsNiArMzEsNyBAQAogCiAjaW5jbHVkZSAiQml0
bWFwU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5oIgogCisjaW5jbHVkZSAiRXh0
ZW5zaW9uczNEQ2hyb21pdW0uaCIKICNpbmNsdWRlICJMYXllclBhaW50ZXJDaHJvbWl1bS5oIgog
I2luY2x1ZGUgIlNrQ2FudmFzLmgiCiAjaW5jbHVkZSAic2tpYS9leHQvcGxhdGZvcm1fY2FudmFz
LmgiCkBAIC00MywyMCArNDQsMjcgQEAgQml0bWFwU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJl
VXBkYXRlcjo6VGV4dHVyZTo6VGV4dHVyZShCaXRtYXBTa1BpY3R1cmVDYW52YXMKIHsKIH0KIAot
dm9pZCBCaXRtYXBTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlOjpw
cmVwYXJlUmVjdChjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0KQorUGFzc093blB0cjxDQ1RleHR1
cmVVcGRhdGVyOjpUZXh0dXJlVXBkYXRlPiBCaXRtYXBTa1BpY3R1cmVDYW52YXNMYXllclRleHR1
cmVVcGRhdGVyOjpUZXh0dXJlOjpjcmVhdGVDQ1RleHR1cmVVcGRhdGUoKQogewotICAgIHNpemVf
dCBidWZmZXJTaXplID0gVGV4dHVyZU1hbmFnZXI6Om1lbW9yeVVzZUJ5dGVzKHNvdXJjZVJlY3Qu
c2l6ZSgpLCB0ZXh0dXJlKCktPmZvcm1hdCgpKTsKLSAgICBtX3BpeGVsRGF0YSA9IGFkb3B0QXJy
YXlQdHIobmV3IHVpbnQ4X3RbYnVmZmVyU2l6ZV0pOwotICAgIE93blB0cjxTa0NhbnZhcz4gY2Fu
dmFzID0gYWRvcHRQdHIobmV3IHNraWE6OlBsYXRmb3JtQ2FudmFzKHNvdXJjZVJlY3Qud2lkdGgo
KSwgc291cmNlUmVjdC5oZWlnaHQoKSwgZmFsc2UsIG1fcGl4ZWxEYXRhLmdldCgpKSk7Ci0gICAg
dGV4dHVyZVVwZGF0ZXIoKS0+cGFpbnRDb250ZW50c1JlY3QoY2FudmFzLmdldCgpLCBzb3VyY2VS
ZWN0KTsKKyAgICByZXR1cm4gQ0NUZXh0dXJlVXBkYXRlcjo6U3ViSW1hZ2VUZXh0dXJlVXBkYXRl
OjpjcmVhdGUodGV4dHVyZVVwZGF0ZXIoKS0+dXNlTWFwVGV4U3ViSW1hZ2UoKSk7CiB9CiAKLXZv
aWQgQml0bWFwU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZTo6dXBk
YXRlUmVjdChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgVGV4dHVyZUFsbG9jYXRvckJpbmRp
bmcqIGJpbmRpbmcsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRl
c3RSZWN0KQordm9pZCBCaXRtYXBTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpU
ZXh0dXJlOjpwdXNoUHJvcGVydGllc1RvKENDVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmVVcGRhdGUq
IHRleHR1cmVVcGRhdGUpCiB7Ci0gICAgdGV4dHVyZSgpLT5iaW5kVGV4dHVyZShjb250ZXh0LCBi
aW5kaW5nKTsKLSAgICBBU1NFUlQobV9waXhlbERhdGEuZ2V0KCkpOwotICAgIHRleHR1cmVVcGRh
dGVyKCktPnVwZGF0ZVRleHR1cmVSZWN0KGNvbnRleHQsIHRleHR1cmUoKS0+Zm9ybWF0KCksIGRl
c3RSZWN0LCBtX3BpeGVsRGF0YS5nZXQoKSk7Ci0gICAgbV9waXhlbERhdGEuY2xlYXIoKTsKKyAg
ICBDQ1RleHR1cmVVcGRhdGVyOjpTdWJJbWFnZVRleHR1cmVVcGRhdGUqIHVwZGF0ZSA9IHN0YXRp
Y19jYXN0PENDVGV4dHVyZVVwZGF0ZXI6OlN1YkltYWdlVGV4dHVyZVVwZGF0ZSo+KHRleHR1cmVV
cGRhdGUpOworCisgICAgSW50UmVjdCBkZXN0UmVjdCA9IHVwZGF0ZVJlY3QoKTsKKyAgICBJbnRS
ZWN0IHNvdXJjZVJlY3QgPSBJbnRSZWN0KEludFBvaW50KGRlc3RSZWN0LngoKSArIGNvbnRlbnRP
ZmZzZXQoKS54KCksIGRlc3RSZWN0LnkoKSArIGNvbnRlbnRPZmZzZXQoKS55KCkpLCBkZXN0UmVj
dC5zaXplKCkpOworCisgICAgdXBkYXRlLT5zZXRGb3JtYXQodGV4dHVyZSgpLT5mb3JtYXQoKSk7
CisgICAgdXBkYXRlLT5zZXRUZXh0dXJlSWQodGV4dHVyZSgpLT50ZXh0dXJlSWQoKSk7CisgICAg
dXBkYXRlLT5zZXRSZWN0KGRlc3RSZWN0KTsKKworICAgIHNpemVfdCBidWZmZXJTaXplID0gVGV4
dHVyZU1hbmFnZXI6Om1lbW9yeVVzZUJ5dGVzKGRlc3RSZWN0LnNpemUoKSwgdGV4dHVyZSgpLT5m
b3JtYXQoKSk7CisgICAgT3duQXJyYXlQdHI8dWludDhfdD4gcGl4ZWxEYXRhID0gYWRvcHRBcnJh
eVB0cihuZXcgdWludDhfdFtidWZmZXJTaXplXSk7CisgICAgT3duUHRyPFNrQ2FudmFzPiBjYW52
YXMgPSBhZG9wdFB0cihuZXcgc2tpYTo6UGxhdGZvcm1DYW52YXMoZGVzdFJlY3Qud2lkdGgoKSwg
ZGVzdFJlY3QuaGVpZ2h0KCksIGZhbHNlLCBwaXhlbERhdGEuZ2V0KCkpKTsKKyAgICB0ZXh0dXJl
VXBkYXRlcigpLT5wYWludENvbnRlbnRzUmVjdChjYW52YXMuZ2V0KCksIHNvdXJjZVJlY3QpOwor
ICAgIHVwZGF0ZS0+c2V0UGl4ZWxEYXRhKHBpeGVsRGF0YS5yZWxlYXNlKCkpOwogfQogCiBQYXNz
UmVmUHRyPEJpdG1hcFNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI+IEJpdG1hcFNr
UGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OmNyZWF0ZShQYXNzT3duUHRyPExheWVy
UGFpbnRlckNocm9taXVtPiBwYWludGVyLCBib29sIHVzZU1hcFRleFN1YkltYWdlKQpAQCAtNjYs
NyArNzQsNyBAQCBQYXNzUmVmUHRyPEJpdG1hcFNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVw
ZGF0ZXI+IEJpdG1hcFNrUGljdHVyZUNhbnZhc0xheWVyVAogCiBCaXRtYXBTa1BpY3R1cmVDYW52
YXNMYXllclRleHR1cmVVcGRhdGVyOjpCaXRtYXBTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVV
cGRhdGVyKFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+IHBhaW50ZXIsIGJvb2wgdXNl
TWFwVGV4U3ViSW1hZ2UpCiAgICAgOiBTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVy
KHBhaW50ZXIpCi0gICAgLCBtX3RleFN1YkltYWdlKHVzZU1hcFRleFN1YkltYWdlKQorICAgICwg
bV91c2VNYXBUZXhTdWJJbWFnZSh1c2VNYXBUZXhTdWJJbWFnZSkKIHsKIH0KIApAQCAtNzQsNyAr
ODIsNyBAQCBCaXRtYXBTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjp+Qml0bWFw
U2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYQogewogfQogCi1QYXNzT3duUHRyPExheWVy
VGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU+IEJpdG1hcFNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVy
ZVVwZGF0ZXI6OmNyZWF0ZVRleHR1cmUoVGV4dHVyZU1hbmFnZXIqIG1hbmFnZXIpCitQYXNzT3du
UHRyPENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU+IEJpdG1hcFNrUGljdHVyZUNh
bnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OmNyZWF0ZVRleHR1cmUoVGV4dHVyZU1hbmFnZXIqIG1h
bmFnZXIpCiB7CiAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBUZXh0dXJlKHRoaXMsIE1hbmFnZWRU
ZXh0dXJlOjpjcmVhdGUobWFuYWdlcikpKTsKIH0KQEAgLTg4LDcgKzk2LDYgQEAgTGF5ZXJUZXh0
dXJlVXBkYXRlcjo6U2FtcGxlZFRleGVsRm9ybWF0IEJpdG1hcFNrUGljdHVyZUNhbnZhc0xheWVy
VGV4dHVyZVVwZGF0ZXIKIAogdm9pZCBCaXRtYXBTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVV
cGRhdGVyOjpwYWludENvbnRlbnRzKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBJ
bnRTaXplJiB0aWxlU2l6ZSwgaW50IGJvcmRlclRleGVscywgZmxvYXQgY29udGVudHNTY2FsZSwg
SW50UmVjdCogcmVzdWx0aW5nT3BhcXVlUmVjdCkKIHsKLSAgICBtX3RleFN1YkltYWdlLnNldFN1
YkltYWdlU2l6ZSh0aWxlU2l6ZSk7CiAgICAgU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBk
YXRlcjo6cGFpbnRDb250ZW50cyhjb250ZW50UmVjdCwgdGlsZVNpemUsIGJvcmRlclRleGVscywg
Y29udGVudHNTY2FsZSwgcmVzdWx0aW5nT3BhcXVlUmVjdCk7CiB9CiAKQEAgLTEwMCwxMSArMTA3
LDYgQEAgdm9pZCBCaXRtYXBTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpwYWlu
dENvbnRlbnRzUmVjdChTa0NhbnZhcyogY2FudmEKICAgICBkcmF3UGljdHVyZShjYW52YXMpOwog
fQogCi12b2lkIEJpdG1hcFNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OnVwZGF0
ZVRleHR1cmVSZWN0KEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBHQzNEZW51bSBmb3JtYXQs
IGNvbnN0IEludFJlY3QmIGRlc3RSZWN0LCBjb25zdCB1aW50OF90KiBwaXhlbHMpCi17Ci0gICAg
bV90ZXhTdWJJbWFnZS51cGxvYWQocGl4ZWxzLCBkZXN0UmVjdCwgZGVzdFJlY3QsIGRlc3RSZWN0
LCBmb3JtYXQsIGNvbnRleHQpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAjZW5kaWYg
Ly8gVVNFKFNLSUEpCiAjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQml0bWFw
U2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQml0bWFwU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJl
VXBkYXRlci5oCmluZGV4IDY3NTBkNTcuLjlhODlhNjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0JpdG1hcFNrUGljdHVyZUNhbnZhc0xheWVy
VGV4dHVyZVVwZGF0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9CaXRtYXBTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmgKQEAgLTMw
LDcgKzMwLDYgQEAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAjaWYgVVNFKFNL
SUEpCiAKLSNpbmNsdWRlICJMYXllclRleHR1cmVTdWJJbWFnZS5oIgogI2luY2x1ZGUgIlBsYXRm
b3JtQ29sb3IuaCIKICNpbmNsdWRlICJTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVy
LmgiCiAKQEAgLTQ0LDI5ICs0MywzMCBAQCBwdWJsaWM6CiAgICAgcHVibGljOgogICAgICAgICBU
ZXh0dXJlKEJpdG1hcFNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIqLCBQYXNzT3du
UHRyPE1hbmFnZWRUZXh0dXJlPik7CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIHByZXBhcmVSZWN0
KGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRl
UmVjdChHcmFwaGljc0NvbnRleHQzRCosIFRleHR1cmVBbGxvY2F0b3JCaW5kaW5nKiwgY29uc3Qg
SW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpOworICAgICAgICB2
aXJ0dWFsIFBhc3NPd25QdHI8Q0NUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZVVwZGF0ZT4gY3JlYXRl
Q0NUZXh0dXJlVXBkYXRlKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBwdXNoUHJvcGVydGllc1Rv
KENDVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmVVcGRhdGUqKTsKIAogICAgIHByaXZhdGU6CiAgICAg
ICAgIEJpdG1hcFNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIqIHRleHR1cmVVcGRh
dGVyKCkgeyByZXR1cm4gbV90ZXh0dXJlVXBkYXRlcjsgfQogCi0gICAgICAgIE93bkFycmF5UHRy
PHVpbnQ4X3Q+IG1fcGl4ZWxEYXRhOwogICAgICAgICBCaXRtYXBTa1BpY3R1cmVDYW52YXNMYXll
clRleHR1cmVVcGRhdGVyKiBtX3RleHR1cmVVcGRhdGVyOworICAgICAgICBPd25BcnJheVB0cjx1
aW50OF90PiBtX3BpeGVsRGF0YTsKICAgICB9OwogCiAgICAgc3RhdGljIFBhc3NSZWZQdHI8Qml0
bWFwU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcj4gY3JlYXRlKFBhc3NPd25QdHI8
TGF5ZXJQYWludGVyQ2hyb21pdW0+LCBib29sIHVzZU1hcFRleFN1YkltYWdlKTsKICAgICB2aXJ0
dWFsIH5CaXRtYXBTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyKCk7CiAKLSAgICB2
aXJ0dWFsIFBhc3NPd25QdHI8TGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZT4gY3JlYXRlVGV4
dHVyZShUZXh0dXJlTWFuYWdlciopOworICAgIHZpcnR1YWwgUGFzc093blB0cjxDYW52YXNMYXll
clRleHR1cmVVcGRhdGVyOjpUZXh0dXJlPiBjcmVhdGVUZXh0dXJlKFRleHR1cmVNYW5hZ2VyKik7
CiAgICAgdmlydHVhbCBTYW1wbGVkVGV4ZWxGb3JtYXQgc2FtcGxlZFRleGVsRm9ybWF0KEdDM0Rl
bnVtIHRleHR1cmVGb3JtYXQpOwogICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzKGNvbnN0
IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBJbnRTaXplJiB0aWxlU2l6ZSwgaW50IGJvcmRl
clRleGVscywgZmxvYXQgY29udGVudHNTY2FsZSwgSW50UmVjdCogcmVzdWx0aW5nT3BhcXVlUmVj
dCk7CiAgICAgdm9pZCBwYWludENvbnRlbnRzUmVjdChTa0NhbnZhcyosIGNvbnN0IEludFJlY3Qm
IHNvdXJjZVJlY3QpOwogICAgIHZvaWQgdXBkYXRlVGV4dHVyZVJlY3QoR3JhcGhpY3NDb250ZXh0
M0QqLCBHQzNEZW51bSBmb3JtYXQsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0LCBjb25zdCB1aW50
OF90KiBwaXhlbHMpOworICAgIGJvb2wgdXNlTWFwVGV4U3ViSW1hZ2UoKSB7IHJldHVybiBtX3Vz
ZU1hcFRleFN1YkltYWdlOyB9CiAKIHByaXZhdGU6CiAgICAgQml0bWFwU2tQaWN0dXJlQ2FudmFz
TGF5ZXJUZXh0dXJlVXBkYXRlcihQYXNzT3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPiwgYm9v
bCB1c2VNYXBUZXhTdWJJbWFnZSk7CiAKLSAgICBMYXllclRleHR1cmVTdWJJbWFnZSBtX3RleFN1
YkltYWdlOworICAgIGJvb2wgbV91c2VNYXBUZXhTdWJJbWFnZTsKIH07CiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCiAjZW5kaWYgLy8gVVNFKFNLSUEpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNo
cm9taXVtLmNwcAppbmRleCA5NDA3Zjk5Li4wOWRiMDhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJE
TGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTQ2LDE4ICs0NiwzMSBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLUNhbnZhczJETGF5ZXJDaHJvbWl1bTo6VXBkYXRlclRleHR1cmU6OlVwZGF0ZXJUZXh0
dXJlKENhbnZhczJETGF5ZXJDaHJvbWl1bSogbGF5ZXIpCitDYW52YXMyRExheWVyQ2hyb21pdW06
OlRleHR1cmU6OlRleHR1cmUoQ2FudmFzMkRMYXllckNocm9taXVtKiBsYXllciwgUGFzc093blB0
cjxNYW5hZ2VkVGV4dHVyZT4gdGV4dHVyZSkKICAgICA6IG1fbGF5ZXIobGF5ZXIpCisgICAgLCBt
X3RleHR1cmUodGV4dHVyZSkKIHsKIH0KIAotQ2FudmFzMkRMYXllckNocm9taXVtOjpVcGRhdGVy
VGV4dHVyZTo6flVwZGF0ZXJUZXh0dXJlKCkKK0NhbnZhczJETGF5ZXJDaHJvbWl1bTo6VGV4dHVy
ZTo6flRleHR1cmUoKQogewogfQogCi12b2lkIENhbnZhczJETGF5ZXJDaHJvbWl1bTo6VXBkYXRl
clRleHR1cmU6OnVwZGF0ZVJlY3QoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIFRleHR1cmVB
bGxvY2F0b3JCaW5kaW5nKiBiaW5kaW5nLCBjb25zdCBJbnRSZWN0JiAvKiBzb3VyY2VSZWN0ICov
LCBjb25zdCBJbnRSZWN0JiAvKiBkZXN0UmVjdCAqLykKK1Bhc3NPd25QdHI8Q0NUZXh0dXJlVXBk
YXRlcjo6VGV4dHVyZVVwZGF0ZT4gQ2FudmFzMkRMYXllckNocm9taXVtOjpUZXh0dXJlOjpjcmVh
dGVDQ1RleHR1cmVVcGRhdGUoKQogewotICAgIG1fbGF5ZXItPnVwZGF0ZUNvbXBvc2l0b3JSZXNv
dXJjZXMoY29udGV4dCwgYmluZGluZyk7CisgICAgcmV0dXJuIENDVGV4dHVyZVVwZGF0ZXI6OkNv
cHlUZXh0dXJlVXBkYXRlOjpjcmVhdGUoKTsKK30KKwordm9pZCBDYW52YXMyRExheWVyQ2hyb21p
dW06OlRleHR1cmU6OnB1c2hQcm9wZXJ0aWVzVG8oQ0NUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZVVw
ZGF0ZSogdGV4dHVyZVVwZGF0ZSkKK3sKKyAgICBDQ1RleHR1cmVVcGRhdGVyOjpDb3B5VGV4dHVy
ZVVwZGF0ZSogdXBkYXRlID0gc3RhdGljX2Nhc3Q8Q0NUZXh0dXJlVXBkYXRlcjo6Q29weVRleHR1
cmVVcGRhdGUqPih0ZXh0dXJlVXBkYXRlKTsKKworICAgIEludFNpemUgc2l6ZSA9IHRleHR1cmUo
KS0+c2l6ZSgpOworICAgIHVwZGF0ZS0+c2V0Rm9ybWF0KHRleHR1cmUoKS0+Zm9ybWF0KCkpOwor
ICAgIHVwZGF0ZS0+c2V0VGV4dHVyZUlkKHRleHR1cmUoKS0+dGV4dHVyZUlkKCkpOworICAgIHVw
ZGF0ZS0+c2V0U2l6ZShzaXplKTsKKyAgICB1cGRhdGUtPnNldEJhY2tUZXh0dXJlSWQobV9sYXll
ci0+YmFja1RleHR1cmVJZCgpKTsKKyAgICB1cGRhdGUtPnNldEZyYW1lYnVmZmVyKG1fbGF5ZXIt
PmZibygpKTsKIH0KIAogQ2FudmFzMkRMYXllckNocm9taXVtOjpDYW52YXMyRExheWVyQ2hyb21p
dW0oR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIGNvbnN0IEludFNpemUmIHNpemUpCkBAIC02
Nyw3ICs4MCw2IEBAIENhbnZhczJETGF5ZXJDaHJvbWl1bTo6Q2FudmFzMkRMYXllckNocm9taXVt
KEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBjb25zdCBJCiAgICAgLCBtX2JhY2tUZXh0dXJl
SWQoMCkKICAgICAsIG1fZmJvKDApCiAgICAgLCBtX3VzZURvdWJsZUJ1ZmZlcmluZyhDQ1Byb3h5
OjpoYXNJbXBsVGhyZWFkKCkpCi0gICAgLCBtX3VwZGF0ZXJUZXh0dXJlKFVwZGF0ZXJUZXh0dXJl
OjpjcmVhdGUodGhpcykpCiB7CiAgICAgaWYgKG1fdXNlRG91YmxlQnVmZmVyaW5nKQogICAgICAg
ICBHTEMobV9jb250ZXh0LCBtX2ZibyA9IG1fY29udGV4dC0+Y3JlYXRlRnJhbWVidWZmZXIoKSk7
CkBAIC03Niw3ICs4OCw3IEBAIENhbnZhczJETGF5ZXJDaHJvbWl1bTo6Q2FudmFzMkRMYXllckNo
cm9taXVtKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBjb25zdCBJCiBDYW52YXMyRExheWVy
Q2hyb21pdW06On5DYW52YXMyRExheWVyQ2hyb21pdW0oKQogewogICAgIGlmIChtX3VzZURvdWJs
ZUJ1ZmZlcmluZyAmJiBtX2ZibykKLSAgICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmRl
bGV0ZUZyYW1lYnVmZmVyKG1fZmJvKSk7CisgICAgICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4
dC0+ZGVsZXRlRnJhbWVidWZmZXIobV9mYm8pKTsKIH0KIAogdm9pZCBDYW52YXMyRExheWVyQ2hy
b21pdW06OnNldFRleHR1cmVJZCh1bnNpZ25lZCB0ZXh0dXJlSWQpCkBAIC0xMDYsNyArMTE4LDcg
QEAgdm9pZCBDYW52YXMyRExheWVyQ2hyb21pdW06OnBhaW50Q29udGVudHNJZkRpcnR5KCkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgaWYgKG1fdXNlRG91YmxlQnVmZmVyaW5nKQotICAgICAgICBt
X2Zyb250VGV4dHVyZS0+cmVzZXJ2ZShtX3NpemUsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBKTsK
KyAgICAgICAgbV9mcm9udFRleHR1cmUtPnRleHR1cmUoKS0+cmVzZXJ2ZShtX3NpemUsIEdyYXBo
aWNzQ29udGV4dDNEOjpSR0JBKTsKIAogICAgIGlmICghbmVlZHNEaXNwbGF5KCkpCiAgICAgICAg
IHJldHVybjsKQEAgLTEzNiwzNiArMTQ4LDIzIEBAIHZvaWQgQ2FudmFzMkRMYXllckNocm9taXVt
OjpzZXRMYXllclRyZWVIb3N0KENDTGF5ZXJUcmVlSG9zdCogaG9zdCkKIHZvaWQgQ2FudmFzMkRM
YXllckNocm9taXVtOjpzZXRUZXh0dXJlTWFuYWdlcihUZXh0dXJlTWFuYWdlciogdGV4dHVyZU1h
bmFnZXIpCiB7CiAgICAgaWYgKHRleHR1cmVNYW5hZ2VyICYmIG1fdXNlRG91YmxlQnVmZmVyaW5n
KQotICAgICAgICBtX2Zyb250VGV4dHVyZSA9IE1hbmFnZWRUZXh0dXJlOjpjcmVhdGUodGV4dHVy
ZU1hbmFnZXIpOworICAgICAgICBtX2Zyb250VGV4dHVyZSA9IFRleHR1cmU6OmNyZWF0ZSh0aGlz
LCBNYW5hZ2VkVGV4dHVyZTo6Y3JlYXRlKHRleHR1cmVNYW5hZ2VyKSk7CiAgICAgZWxzZQogICAg
ICAgICBtX2Zyb250VGV4dHVyZS5jbGVhcigpOwogfQogCi12b2lkIENhbnZhczJETGF5ZXJDaHJv
bWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhHcmFwaGljc0NvbnRleHQzRCogY29udGV4
dCwgVGV4dHVyZUFsbG9jYXRvckJpbmRpbmcqIGJpbmRpbmcpCit2b2lkIENhbnZhczJETGF5ZXJD
aHJvbWl1bTo6Zm9yRWFjaENvbXBvc2l0b3JSZXNvdXJjZShMYXllclRleHR1cmVVcGRhdGVyOjpI
YW5kbGVyJiBoYW5kbGVyKQogewotICAgIGlmICghbV9iYWNrVGV4dHVyZUlkIHx8ICFtX2Zyb250
VGV4dHVyZSB8fCAhbV9mcm9udFRleHR1cmUtPmlzVmFsaWQobV9zaXplLCBHcmFwaGljc0NvbnRl
eHQzRDo6UkdCQSkpCisgICAgaWYgKCFtX2JhY2tUZXh0dXJlSWQgfHwgIW1fZnJvbnRUZXh0dXJl
IHx8ICFtX2Zyb250VGV4dHVyZS0+dGV4dHVyZSgpLT5pc1ZhbGlkKG1fc2l6ZSwgR3JhcGhpY3ND
b250ZXh0M0Q6OlJHQkEpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2Zyb250VGV4dHVyZS0+
YmluZFRleHR1cmUoY29udGV4dCwgYmluZGluZyk7Ci0KLSAgICBHTEMoY29udGV4dCwgY29udGV4
dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8p
KTsKLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhp
Y3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNI
TUVOVDAsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX2JhY2tUZXh0dXJlSWQsIDAp
KTsKLSAgICAvLyBGSVhNRTogVGhlIGNvcHkgb3BlcmF0aW9uIHdpbGwgZmFpbCBpZiB0aGUgbV9i
YWNrVGV4dHVyZSBpcyBhbGxvY2F0ZWQgYXMgQkdSQSBzaW5jZSBnbENvcHlUZXgoU3ViKUltYWdl
MkQgZG9lc24ndAotICAgIC8vICAgICAgICBzdXBwb3J0IHRoZSBCR1JBIGZvcm1hdC4gU2VlIGJ1
ZyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzUxNDIKLSAgICBHTEMo
Y29udGV4dCwgY29udGV4dC0+Y29weVRleFN1YkltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfMkQsIDAsIDAsIDAsIDAsIDAsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkp
KTsKLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29u
dGV4dDNEOjpGUkFNRUJVRkZFUiwgMCkpOwotICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5mbHVz
aCgpKTsKLX0KLQotdm9pZCBDYW52YXMyRExheWVyQ2hyb21pdW06OmZvckVhY2hDb21wb3NpdG9y
UmVzb3VyY2UoTGF5ZXJUZXh0dXJlVXBkYXRlcjo6SGFuZGxlciYgaGFuZGxlcikKLXsKLSAgICBo
YW5kbGVyLmhhbmRsZShtX3VwZGF0ZXJUZXh0dXJlLmdldCgpLCBJbnRSZWN0KCksIEludFJlY3Qo
KSk7CisgICAgaGFuZGxlci5oYW5kbGUobV9mcm9udFRleHR1cmUuZ2V0KCkpOwogfQogCiB2b2lk
IENhbnZhczJETGF5ZXJDaHJvbWl1bTo6dW5yZXNlcnZlQ29udGVudHNUZXh0dXJlKCkKIHsKICAg
ICBpZiAobV91c2VEb3VibGVCdWZmZXJpbmcpCi0gICAgICAgIG1fZnJvbnRUZXh0dXJlLT51bnJl
c2VydmUoKTsKKyAgICAgICAgbV9mcm9udFRleHR1cmUtPnRleHR1cmUoKS0+dW5yZXNlcnZlKCk7
CiB9CiAKIHZvaWQgQ2FudmFzMkRMYXllckNocm9taXVtOjpjbGVhbnVwUmVzb3VyY2VzKCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZh
czJETGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmgKaW5kZXggNDAxZTFiNy4uMzc5NTZlMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFz
MkRMYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmgKQEAgLTQ0LDIxICs0NCwyNSBAQCBjbGFz
cyBHcmFwaGljc0NvbnRleHQzRDsKIC8vIEEgbGF5ZXIgY29udGFpbmluZyBhbiBhY2NlbGVyYXRl
ZCAyZCBjYW52YXMKIGNsYXNzIENhbnZhczJETGF5ZXJDaHJvbWl1bSA6IHB1YmxpYyBDYW52YXNM
YXllckNocm9taXVtIHsKIHB1YmxpYzoKLSAgICBjbGFzcyBVcGRhdGVyVGV4dHVyZSA6IHB1Ymxp
YyBMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlIHsKKyAgICBjbGFzcyBUZXh0dXJlIDogcHVi
bGljIExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmUgewogICAgIHB1YmxpYzoKLSAgICAgICAg
c3RhdGljIFBhc3NPd25QdHI8VXBkYXRlclRleHR1cmU+IGNyZWF0ZShDYW52YXMyRExheWVyQ2hy
b21pdW0qIGxheWVyKQorICAgICAgICBzdGF0aWMgUGFzc093blB0cjxUZXh0dXJlPiBjcmVhdGUo
Q2FudmFzMkRMYXllckNocm9taXVtKiBsYXllciwgUGFzc093blB0cjxNYW5hZ2VkVGV4dHVyZT4g
dGV4dHVyZSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBVcGRh
dGVyVGV4dHVyZShsYXllcikpOworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBUZXh0
dXJlKGxheWVyLCB0ZXh0dXJlKSk7CiAgICAgICAgIH0KIAotICAgICAgICB2aXJ0dWFsIH5VcGRh
dGVyVGV4dHVyZSgpOworICAgICAgICB2aXJ0dWFsIH5UZXh0dXJlKCk7CiAKLSAgICAgICAgdmly
dHVhbCB2b2lkIHVwZGF0ZVJlY3QoR3JhcGhpY3NDb250ZXh0M0QqLCBUZXh0dXJlQWxsb2NhdG9y
QmluZGluZyosIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RS
ZWN0KTsKKyAgICAgICAgdmlydHVhbCBNYW5hZ2VkVGV4dHVyZSogdGV4dHVyZSgpIHsgcmV0dXJu
IG1fdGV4dHVyZS5nZXQoKTsgfQorCisgICAgICAgIHZpcnR1YWwgUGFzc093blB0cjxDQ1RleHR1
cmVVcGRhdGVyOjpUZXh0dXJlVXBkYXRlPiBjcmVhdGVDQ1RleHR1cmVVcGRhdGUoKTsKKyAgICAg
ICAgdmlydHVhbCB2b2lkIHB1c2hQcm9wZXJ0aWVzVG8oQ0NUZXh0dXJlVXBkYXRlcjo6VGV4dHVy
ZVVwZGF0ZSopOwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgZXhwbGljaXQgVXBkYXRlclRleHR1
cmUoQ2FudmFzMkRMYXllckNocm9taXVtKik7CisgICAgICAgIFRleHR1cmUoQ2FudmFzMkRMYXll
ckNocm9taXVtKiwgUGFzc093blB0cjxNYW5hZ2VkVGV4dHVyZT4pOwogCiAgICAgICAgIENhbnZh
czJETGF5ZXJDaHJvbWl1bSogbV9sYXllcjsKKyAgICAgICAgT3duUHRyPE1hbmFnZWRUZXh0dXJl
PiBtX3RleHR1cmU7CiAgICAgfTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIExheWVyVHlwZT4g
c3RhdGljIFBhc3NSZWZQdHI8Q2FudmFzMkRMYXllckNocm9taXVtPiBjcmVhdGUoR3JhcGhpY3ND
b250ZXh0M0QqLCBjb25zdCBJbnRTaXplJik7CkBAIC03NCw3ICs3OCw2IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50c0lmRGlydHkoKTsKIAogICAgIHZpcnR1YWwgdm9p
ZCBzZXRMYXllclRyZWVIb3N0KENDTGF5ZXJUcmVlSG9zdCopOwotICAgIHZvaWQgdXBkYXRlQ29t
cG9zaXRvclJlc291cmNlcyhHcmFwaGljc0NvbnRleHQzRCosIFRleHR1cmVBbGxvY2F0b3JCaW5k
aW5nKik7CiAgICAgdmlydHVhbCB2b2lkIGZvckVhY2hDb21wb3NpdG9yUmVzb3VyY2UoTGF5ZXJU
ZXh0dXJlVXBkYXRlcjo6SGFuZGxlciYpOwogICAgIHZpcnR1YWwgdm9pZCB1bnJlc2VydmVDb250
ZW50c1RleHR1cmUoKTsKICAgICB2aXJ0dWFsIHZvaWQgY2xlYW51cFJlc291cmNlcygpOwpAQCAt
ODcsNiArOTAsOSBAQCBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBDYW52YXMyRExheWVyQ2hy
b21pdW1UZXN0OwogICAgIHZvaWQgc2V0VGV4dHVyZU1hbmFnZXIoVGV4dHVyZU1hbmFnZXIqKTsK
IAorICAgIFBsYXRmb3JtM0RPYmplY3QgZmJvKCkgeyByZXR1cm4gbV9mYm87IH0KKyAgICB1bnNp
Z25lZCBiYWNrVGV4dHVyZUlkKCkgeyByZXR1cm4gbV9iYWNrVGV4dHVyZUlkOyB9CisKICAgICBH
cmFwaGljc0NvbnRleHQzRCogbV9jb250ZXh0OwogICAgIEludFNpemUgbV9zaXplOwogICAgIHVu
c2lnbmVkIG1fYmFja1RleHR1cmVJZDsKQEAgLTk1LDggKzEwMSw3IEBAIHByaXZhdGU6CiAgICAg
Ly8gY2FudmFzJyBiYWNraW5nIHRleHR1cmUuIFRoaXMgb3B0aW9uIHNob3VsZCBiZSB1c2VkIHdp
dGggdGhlIGNvbXBvc2l0b3IgZG9lc24ndAogICAgIC8vIHN5bmNocm9uaXplIGl0cyBkcmF3cyB3
aXRoIHRoZSBjYW52YXMgdXBkYXRlcy4KICAgICBib29sIG1fdXNlRG91YmxlQnVmZmVyaW5nOwot
ICAgIE93blB0cjxNYW5hZ2VkVGV4dHVyZT4gbV9mcm9udFRleHR1cmU7Ci0gICAgT3duUHRyPFVw
ZGF0ZXJUZXh0dXJlPiBtX3VwZGF0ZXJUZXh0dXJlOworICAgIE93blB0cjxUZXh0dXJlPiBtX2Zy
b250VGV4dHVyZTsKIH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIExheWVyVHlwZT4gY2xhc3MgU2Vy
aWFsaXphYmxlQ2FudmFzMkRMYXllckNocm9taXVtIDogcHVibGljIENhbnZhczJETGF5ZXJDaHJv
bWl1bSB7CkBAIC0xMjgsNyArMTMzLDcgQEAgdm9pZCBDYW52YXMyRExheWVyQ2hyb21pdW06OnB1
c2hQcm9wZXJ0aWVzKGNvbnN0IENhbnZhczJETGF5ZXJDaHJvbWl1bSogZnJvbSwgQ0MKIAogICAg
IGxheWVyLT5zZXREb3VibGVCdWZmZXJlZChtX3VzZURvdWJsZUJ1ZmZlcmluZyk7CiAgICAgaWYg
KG1fdXNlRG91YmxlQnVmZmVyaW5nKQotICAgICAgICBsYXllci0+c2V0VGV4dHVyZUlkKGZyb20t
Pm1fZnJvbnRUZXh0dXJlLT50ZXh0dXJlSWQoKSk7CisgICAgICAgIGxheWVyLT5zZXRUZXh0dXJl
SWQoZnJvbS0+bV9mcm9udFRleHR1cmUtPnRleHR1cmUoKS0+dGV4dHVyZUlkKCkpOwogICAgIGVs
c2UKICAgICAgICAgbGF5ZXItPnNldFRleHR1cmVJZChmcm9tLT5tX2JhY2tUZXh0dXJlSWQpOwog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Q2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmNwcAppbmRleCAxZjNi
NjQ0Li41ZWYzZjE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9DYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllclRleHR1cmVVcGRhdGVy
LmNwcApAQCAtNTMsMTEgKzUzLDExIEBAIENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6On5DYW52
YXNMYXllclRleHR1cmVVcGRhdGVyKCkKIHsKIH0KIAotdm9pZCBDYW52YXNMYXllclRleHR1cmVV
cGRhdGVyOjpwYWludENvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50
UmVjdCYgY29udGVudFJlY3QsIGZsb2F0IGNvbnRlbnRzU2NhbGUpCit2b2lkIENhbnZhc0xheWVy
VGV4dHVyZVVwZGF0ZXI6OnBhaW50Q2FudmFzQ29udGVudHMoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0LCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgZmxvYXQgY29udGVudHNTY2FsZSkKIHsK
ICAgICBjb250ZXh0LnRyYW5zbGF0ZSgtY29udGVudFJlY3QueCgpLCAtY29udGVudFJlY3QueSgp
KTsKICAgICB7Ci0gICAgICAgIFRSQUNFX0VWRU5UKCJMYXllclRleHR1cmVVcGRhdGVyQ2FudmFz
OjpwYWludCIsIHRoaXMsIDApOworICAgICAgICBUUkFDRV9FVkVOVCgiTGF5ZXJUZXh0dXJlVXBk
YXRlckNhbnZhczo6cGFpbnRDYW52YXNDb250ZW50IiwgdGhpcywgMCk7CiAKICAgICAgICAgSW50
UmVjdCBzY2FsZWRDb250ZW50UmVjdCA9IGNvbnRlbnRSZWN0OwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllclRleHR1cmVV
cGRhdGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52
YXNMYXllclRleHR1cmVVcGRhdGVyLmgKaW5kZXggN2Y4ZDNkNS4uMjBjZDMxMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJU
ZXh0dXJlVXBkYXRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0NhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuaApAQCAtNDcsMTkgKzQ3LDI5IEBAIHB1
YmxpYzoKIAogICAgICAgICB2aXJ0dWFsIE1hbmFnZWRUZXh0dXJlKiB0ZXh0dXJlKCkgeyByZXR1
cm4gbV90ZXh0dXJlLmdldCgpOyB9CiAKLSAgICAgcHJvdGVjdGVkOgorICAgICAgICB2aXJ0dWFs
IHZvaWQgc2V0VXBkYXRlUmVjdChjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0KSB7IG1fdXBkYXRl
UmVjdCA9IHVwZGF0ZVJlY3Q7IH0KKyAgICAgICAgdmlydHVhbCBJbnRSZWN0IHVwZGF0ZVJlY3Qo
KSBjb25zdCB7IHJldHVybiBtX3VwZGF0ZVJlY3Q7IH0KKworICAgICAgICB2aXJ0dWFsIHZvaWQg
c2V0Q29udGVudE9mZnNldChjb25zdCBJbnRQb2ludCYgY29udGVudE9mZnNldCkgeyBtX2NvbnRl
bnRPZmZzZXQgPSBjb250ZW50T2Zmc2V0OyB9CisgICAgICAgIHZpcnR1YWwgSW50UG9pbnQgY29u
dGVudE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudE9mZnNldDsgfQorCisgICAgcHJv
dGVjdGVkOgogICAgICAgICBleHBsaWNpdCBUZXh0dXJlKFBhc3NPd25QdHI8TWFuYWdlZFRleHR1
cmU+KTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIE93blB0cjxNYW5hZ2VkVGV4dHVyZT4gbV90
ZXh0dXJlOworICAgICAgICBJbnRSZWN0IG1fdXBkYXRlUmVjdDsKKyAgICAgICAgSW50UG9pbnQg
bV9jb250ZW50T2Zmc2V0OwogICAgIH07CiAKICAgICB2aXJ0dWFsIH5DYW52YXNMYXllclRleHR1
cmVVcGRhdGVyKCk7CiAKKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8VGV4dHVyZT4gY3JlYXRlVGV4
dHVyZShUZXh0dXJlTWFuYWdlciopID0gMDsKKwogcHJvdGVjdGVkOgogICAgIGV4cGxpY2l0IENh
bnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIoUGFzc093blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4p
OwogCi0gICAgdm9pZCBwYWludENvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFJl
Y3QmIGNvbnRlbnRSZWN0LCBmbG9hdCBjb250ZW50c1NjYWxlKTsKKyAgICB2b2lkIHBhaW50Q2Fu
dmFzQ29udGVudHMoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3Qs
IGZsb2F0IGNvbnRlbnRzU2NhbGUpOwogICAgIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KCkg
Y29uc3QgeyByZXR1cm4gbV9jb250ZW50UmVjdDsgfQogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hy
b21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRl
bnRMYXllckNocm9taXVtLmgKaW5kZXggMDYxNjlhNy4uYjQ1OTgyOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21p
dW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250
ZW50TGF5ZXJDaHJvbWl1bS5oCkBAIC02NywxMCArNjcsMTAgQEAgcHJvdGVjdGVkOgogCiBwcml2
YXRlOgogICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUZXh0dXJlVXBkYXRlcihjb25zdCBDQ0xheWVy
VHJlZUhvc3QqKTsKLSAgICB2aXJ0dWFsIExheWVyVGV4dHVyZVVwZGF0ZXIqIHRleHR1cmVVcGRh
dGVyKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0dXJlVXBkYXRlci5nZXQoKTsgfQorICAgIHZpcnR1
YWwgQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlciogdGV4dHVyZVVwZGF0ZXIoKSBjb25zdCB7IHJl
dHVybiBtX3RleHR1cmVVcGRhdGVyLmdldCgpOyB9CiAKICAgICBDb250ZW50TGF5ZXJEZWxlZ2F0
ZSogbV9kZWxlZ2F0ZTsKLSAgICBSZWZQdHI8TGF5ZXJUZXh0dXJlVXBkYXRlcj4gbV90ZXh0dXJl
VXBkYXRlcjsKKyAgICBSZWZQdHI8Q2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcj4gbV90ZXh0dXJl
VXBkYXRlcjsKIH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIExheWVyVHlwZT4gY2xhc3MgU2VyaWFs
aXphYmxlQ29udGVudExheWVyQ2hyb21pdW0gOiBwdWJsaWMgQ29udGVudExheWVyQ2hyb21pdW0g
ewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
RHJhd2luZ0J1ZmZlckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0RyYXdpbmdCdWZmZXJDaHJvbWl1bS5jcHAKaW5kZXggOTAxZmE5ZC4uZGI5
OGI3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vRHJhd2luZ0J1ZmZlckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9EcmF3aW5nQnVmZmVyQ2hyb21pdW0uY3BwCkBAIC0zNyw2ICsz
Nyw3IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJXZWJHTExh
eWVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJjYy9DQ0NhbnZhc0xheWVySW1wbC5oIgorI2luY2x1
ZGUgImNjL0NDUHJveHkuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0xNDQsNyArMTQ1
LDEwIEBAIHZvaWQgRHJhd2luZ0J1ZmZlcjo6cHVibGlzaFRvUGxhdGZvcm1MYXllcigpCiBQbGF0
Zm9ybUxheWVyKiBEcmF3aW5nQnVmZmVyOjpwbGF0Zm9ybUxheWVyKCkKIHsKICAgICBpZiAoIW1f
cGxhdGZvcm1MYXllcikgewotICAgICAgICBtX3BsYXRmb3JtTGF5ZXIgPSBXZWJHTExheWVyQ2hy
b21pdW06OmNyZWF0ZTxDQ0NhbnZhc0xheWVySW1wbD4oKTsKKyAgICAgICAgaWYgKENDUHJveHk6
Omhhc0ltcGxUaHJlYWQoKSkKKyAgICAgICAgICAgIG1fcGxhdGZvcm1MYXllciA9IFdlYkdMTGF5
ZXJDaHJvbWl1bTo6Y3JlYXRlPENDQ2FudmFzTGF5ZXJEYXRhPigpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBtX3BsYXRmb3JtTGF5ZXIgPSBXZWJHTExheWVyQ2hyb21pdW06OmNyZWF0ZTxD
Q0NhbnZhc0xheWVySW1wbD4oKTsKICAgICAgICAgbV9wbGF0Zm9ybUxheWVyLT5zZXREcmF3aW5n
QnVmZmVyKHRoaXMpOwogICAgICAgICBtX3BsYXRmb3JtTGF5ZXItPnNldE9wYXF1ZSghbV9jb250
ZXh0LT5nZXRDb250ZXh0QXR0cmlidXRlcygpLmFscGhhKTsKICAgICB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9GcmFtZUJ1ZmZlclNrUGlj
dHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vRnJhbWVCdWZmZXJTa1BpY3R1cmVDYW52YXNMYXllclRleHR1
cmVVcGRhdGVyLmNwcAppbmRleCBmMGI0YmY5Li42NGNiMGNiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9GcmFtZUJ1ZmZlclNrUGljdHVyZUNh
bnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0ZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJl
VXBkYXRlci5jcHAKQEAgLTMyLDQ1ICszMiwxMDIgQEAKICNpbmNsdWRlICJGcmFtZUJ1ZmZlclNr
UGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuaCIKIAogI2luY2x1ZGUgIkxheWVyUGFp
bnRlckNocm9taXVtLmgiCisjaW5jbHVkZSAiU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QuaCIKICNp
bmNsdWRlICJTa0NhbnZhcy5oIgogI2luY2x1ZGUgIlNrR3B1RGV2aWNlLmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotc3RhdGljIFBhc3NPd25QdHI8U2tDYW52YXM+IGNyZWF0ZUFjY2VsZXJh
dGVkQ2FudmFzKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHR1cmVBbGxvY2F0b3JCaW5kaW5n
KiBiaW5kaW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIE1hbmFnZWRUZXh0dXJlKiB0ZXh0dXJlKQorc3RhdGljIFNrQ2FudmFzKiBjcmVhdGVB
Y2NlbGVyYXRlZENhbnZhcyhHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgY29uc3QgSW50U2l6
ZSYgc2l6ZSwgdW5zaWduZWQmIHRleHR1cmVJZCkKIHsKLSAgICB1bnNpZ25lZCB0ZXh0dXJlSWQg
PSBiaW5kaW5nLT50ZXh0dXJlSWQodGV4dHVyZS0+dGV4dHVyZUlkKCkpOwotICAgIGlmICghdGV4
dHVyZUlkKQotICAgICAgICB0ZXh0dXJlSWQgPSBiaW5kaW5nLT5jcmVhdGVUZXh0dXJlKHRleHR1
cmUtPnRleHR1cmVJZCgpLCB0ZXh0dXJlLT5zaXplKCksIHRleHR1cmUtPmZvcm1hdCgpKTsKLQot
ICAgIEdyQ29udGV4dCogZ3JDb250ZXh0ID0gY29udGV4dC0+Z3JDb250ZXh0KCk7Ci0gICAgSW50
U2l6ZSBjYW52YXNTaXplID0gdGV4dHVyZS0+c2l6ZSgpOwotICAgIEdyUGxhdGZvcm1UZXh0dXJl
RGVzYyB0ZXh0dXJlRGVzYzsKLSAgICB0ZXh0dXJlRGVzYy5mRmxhZ3MgPSBrUmVuZGVyVGFyZ2V0
X0dyUGxhdGZvcm1UZXh0dXJlRmxhZzsKLSAgICB0ZXh0dXJlRGVzYy5mV2lkdGggPSBjYW52YXNT
aXplLndpZHRoKCk7Ci0gICAgdGV4dHVyZURlc2MuZkhlaWdodCA9IGNhbnZhc1NpemUuaGVpZ2h0
KCk7Ci0gICAgdGV4dHVyZURlc2MuZkNvbmZpZyA9IGtSR0JBXzg4ODhfR3JQaXhlbENvbmZpZzsK
LSAgICB0ZXh0dXJlRGVzYy5mVGV4dHVyZUhhbmRsZSA9IHRleHR1cmVJZDsKLSAgICBTa0F1dG9U
VW5yZWY8R3JUZXh0dXJlPiB0YXJnZXQoZ3JDb250ZXh0LT5jcmVhdGVQbGF0Zm9ybVRleHR1cmUo
dGV4dHVyZURlc2MpKTsKLSAgICBTa0F1dG9UVW5yZWY8U2tEZXZpY2U+IGRldmljZShuZXcgU2tH
cHVEZXZpY2UoZ3JDb250ZXh0LCB0YXJnZXQuZ2V0KCkpKTsKLSAgICByZXR1cm4gYWRvcHRQdHIo
bmV3IFNrQ2FudmFzKGRldmljZS5nZXQoKSkpOworICAgIEdyQ29udGV4dCogZ3IgPSBjb250ZXh0
LT5nckNvbnRleHQoKTsKKyAgICBpZiAoIWdyKQorICAgICAgICByZXR1cm4gMDsKKyAgICBnci0+
cmVzZXRDb250ZXh0KCk7CisgICAgR3JUZXh0dXJlRGVzYyBkZXNjOworICAgIGRlc2MuZkZsYWdz
ID0ga1JlbmRlclRhcmdldF9HclRleHR1cmVGbGFnQml0OworICAgIGRlc2MuZkFBTGV2ZWwgPSBr
Tm9uZV9HckFBTGV2ZWw7CisgICAgZGVzYy5mV2lkdGggPSBzaXplLndpZHRoKCk7CisgICAgZGVz
Yy5mSGVpZ2h0ID0gc2l6ZS5oZWlnaHQoKTsKKyAgICBkZXNjLmZDb25maWcgPSBrUkdCQV84ODg4
X0dyUGl4ZWxDb25maWc7CisgICAgU2tBdXRvVFVucmVmPEdyVGV4dHVyZT4gdGV4dHVyZShnci0+
Y3JlYXRlVW5jYWNoZWRUZXh0dXJlKGRlc2MsIDAsIDApKTsKKyAgICBpZiAoIXRleHR1cmUuZ2V0
KCkpCisgICAgICAgIHJldHVybiAwOworICAgIFNrQ2FudmFzKiBjYW52YXMgPSBuZXcgU2tDYW52
YXMoKTsKKyAgICBjYW52YXMtPnNldERldmljZShuZXcgU2tHcHVEZXZpY2UoZ3IsIHRleHR1cmUu
Z2V0KCkpKS0+dW5yZWYoKTsKKyAgICB0ZXh0dXJlSWQgPSB0ZXh0dXJlLmdldCgpLT5nZXRUZXh0
dXJlSGFuZGxlKCk7CisgICAgcmV0dXJuIGNhbnZhczsKIH0KIAogRnJhbWVCdWZmZXJTa1BpY3R1
cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlOjpUZXh0dXJlKEZyYW1lQnVmZmVy
U2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlciogdGV4dHVyZVVwZGF0ZXIsIFBhc3NP
d25QdHI8TWFuYWdlZFRleHR1cmU+IHRleHR1cmUpCiAgICAgOiBDYW52YXNMYXllclRleHR1cmVV
cGRhdGVyOjpUZXh0dXJlKHRleHR1cmUpCiAgICAgLCBtX3RleHR1cmVVcGRhdGVyKHRleHR1cmVV
cGRhdGVyKQorICAgICwgbV9jb250ZXh0KFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjpnZXQoKSkK
KyAgICAsIG1fYmFja1RleHR1cmVJZCgwKQorICAgICwgbV9mYm8oMCkKIHsKKyAgICBBU1NFUlQo
bV9jb250ZXh0KTsKKyAgICBtX2ZibyA9IG1fY29udGV4dC0+Y3JlYXRlRnJhbWVidWZmZXIoKTsK
IH0KIAogRnJhbWVCdWZmZXJTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0
dXJlOjp+VGV4dHVyZSgpCiB7CisgICAgaWYgKG1fZmJvKQorICAgICAgICBtX2NvbnRleHQtPmRl
bGV0ZUZyYW1lYnVmZmVyKG1fZmJvKTsKIH0KIAotdm9pZCBGcmFtZUJ1ZmZlclNrUGljdHVyZUNh
bnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU6OnVwZGF0ZVJlY3QoR3JhcGhpY3NDb250
ZXh0M0QqIGNvbnRleHQsIFRleHR1cmVBbGxvY2F0b3JCaW5kaW5nKiBiaW5kaW5nLCBjb25zdCBJ
bnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCkKK3ZvaWQgRnJhbWVC
dWZmZXJTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlOjpwcmVwYXJl
KCkKIHsKLSAgICB0ZXh0dXJlVXBkYXRlcigpLT51cGRhdGVUZXh0dXJlUmVjdChjb250ZXh0LCBi
aW5kaW5nLCB0ZXh0dXJlKCksIHNvdXJjZVJlY3QsIGRlc3RSZWN0KTsKKyAgICAvLyBNYWtlIHN1
cmUgU0tJQSB1c2VzIHRoZSBjb3JyZWN0IEdMIGNvbnRleHQuCisgICAgbV9jb250ZXh0LT5tYWtl
Q29udGV4dEN1cnJlbnQoKTsKKworICAgIC8vIE5vdGlmeSBTS0lBIHRvIHN5bmMgaXRzIGludGVy
bmFsIEdMIHN0YXRlLgorICAgIG1fY29udGV4dC0+Z3JDb250ZXh0KCktPnJlc2V0Q29udGV4dCgp
OworCisgICAgaWYgKHRleHR1cmUoKS0+c2l6ZSgpICE9IG1fc2l6ZSkgeworICAgICAgICBtX2Nh
bnZhcyA9IGFkb3B0UHRyKGNyZWF0ZUFjY2VsZXJhdGVkQ2FudmFzKG1fY29udGV4dCwgdGV4dHVy
ZSgpLT5zaXplKCksIG1fYmFja1RleHR1cmVJZCkpOworICAgICAgICBtX3NpemUgPSB0ZXh0dXJl
KCktPnNpemUoKTsKKyAgICB9CisKKyAgICBJbnRSZWN0IGRlc3RSZWN0ID0gdXBkYXRlUmVjdCgp
OworICAgIEludFBvaW50IG9mZnNldCA9IGNvbnRlbnRPZmZzZXQoKTsKKyAgICBJbnRSZWN0IHNv
dXJjZVJlY3QgPSBJbnRSZWN0KEludFBvaW50KGRlc3RSZWN0LngoKSArIG9mZnNldC54KCksIGRl
c3RSZWN0LnkoKSArIG9mZnNldC55KCkpLCBkZXN0UmVjdC5zaXplKCkpOworCisgICAgQVNTRVJU
KG1fY2FudmFzKTsKKyAgICBtX2NhbnZhcy0+c2F2ZSgpOworCisgICAgLy8gVGhlIGNvbXBvc2l0
b3IgZXhwZWN0cyB0aGUgdGV4dHVyZXMgdG8gYmUgdXBzaWRlLWRvd24gc28gaXQgY2FuIGZsaXAK
KyAgICAvLyB0aGUgZmluYWwgY29tcG9zaXRlZCBpbWFnZS4gR2FuZXNoIHJlbmRlcnMgdGhlIGlt
YWdlIHVwcmlnaHQgc28gd2UKKyAgICAvLyBuZWVkIHRvIGRvIGEgeS1mbGlwLgorICAgIG1fY2Fu
dmFzLT50cmFuc2xhdGUoMC4wLCB0ZXh0dXJlKCktPnNpemUoKS5oZWlnaHQoKSk7CisgICAgbV9j
YW52YXMtPnNjYWxlKDEuMCwgLTEuMCk7CisKKyAgICB0ZXh0dXJlVXBkYXRlcigpLT51cGRhdGVU
ZXh0dXJlUmVjdChtX2NvbnRleHQsIG1fY2FudmFzLmdldCgpLCBzb3VyY2VSZWN0LCBkZXN0UmVj
dCk7CisKKyAgICBtX2NhbnZhcy0+cmVzdG9yZSgpOworCisgICAgLy8gRmx1c2ggU0tJQSBjb250
ZXh0IHNvIHRoYXQgYWxsIHRoZSByZW5kZXJlZCBzdHVmZiBhcHBlYXJzIG9uIHRoZSB0ZXh0dXJl
LgorICAgIG1fY29udGV4dC0+Z3JDb250ZXh0KCktPmZsdXNoKCk7CisgICAgbV9jb250ZXh0LT5m
bHVzaCgpOworfQorCitQYXNzT3duUHRyPENDVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmVVcGRhdGU+
IEZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZTo6
Y3JlYXRlQ0NUZXh0dXJlVXBkYXRlKCkKK3sKKyAgICByZXR1cm4gQ0NUZXh0dXJlVXBkYXRlcjo6
Q29weVRleHR1cmVVcGRhdGU6OmNyZWF0ZSgpOworfQorCit2b2lkIEZyYW1lQnVmZmVyU2tQaWN0
dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZTo6cHVzaFByb3BlcnRpZXNUbyhD
Q1RleHR1cmVVcGRhdGVyOjpUZXh0dXJlVXBkYXRlKiB0ZXh0dXJlVXBkYXRlKQoreworICAgIEND
VGV4dHVyZVVwZGF0ZXI6OkNvcHlUZXh0dXJlVXBkYXRlKiB1cGRhdGUgPSBzdGF0aWNfY2FzdDxD
Q1RleHR1cmVVcGRhdGVyOjpDb3B5VGV4dHVyZVVwZGF0ZSo+KHRleHR1cmVVcGRhdGUpOworCisg
ICAgcHJlcGFyZSgpOworCisgICAgSW50U2l6ZSBzaXplID0gdGV4dHVyZSgpLT5zaXplKCk7Cisg
ICAgdXBkYXRlLT5zZXRGb3JtYXQodGV4dHVyZSgpLT5mb3JtYXQoKSk7CisgICAgdXBkYXRlLT5z
ZXRUZXh0dXJlSWQodGV4dHVyZSgpLT50ZXh0dXJlSWQoKSk7CisgICAgdXBkYXRlLT5zZXRTaXpl
KHNpemUpOworICAgIHVwZGF0ZS0+c2V0QmFja1RleHR1cmVJZChtX2JhY2tUZXh0dXJlSWQpOwor
ICAgIHVwZGF0ZS0+c2V0RnJhbWVidWZmZXIobV9mYm8pOwogfQogCiBQYXNzUmVmUHRyPEZyYW1l
QnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcj4gRnJhbWVCdWZmZXJTa1Bp
Y3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpjcmVhdGUoUGFzc093blB0cjxMYXllclBh
aW50ZXJDaHJvbWl1bT4gcGFpbnRlcikKQEAgLTg3LDcgKzE0NCw3IEBAIEZyYW1lQnVmZmVyU2tQ
aWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6fkZyYW1lQnVmZmVyU2tQaWN0dXJlQ2Fu
dmFzTGF5ZXJUCiB7CiB9CiAKLVBhc3NPd25QdHI8TGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVy
ZT4gRnJhbWVCdWZmZXJTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpjcmVhdGVU
ZXh0dXJlKFRleHR1cmVNYW5hZ2VyKiBtYW5hZ2VyKQorUGFzc093blB0cjxDYW52YXNMYXllclRl
eHR1cmVVcGRhdGVyOjpUZXh0dXJlPiBGcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4
dHVyZVVwZGF0ZXI6OmNyZWF0ZVRleHR1cmUoVGV4dHVyZU1hbmFnZXIqIG1hbmFnZXIpCiB7CiAg
ICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBUZXh0dXJlKHRoaXMsIE1hbmFnZWRUZXh0dXJlOjpjcmVh
dGUobWFuYWdlcikpKTsKIH0KQEAgLTk4LDMwICsxNTUsMTMgQEAgTGF5ZXJUZXh0dXJlVXBkYXRl
cjo6U2FtcGxlZFRleGVsRm9ybWF0IEZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0
dXJlVXAKICAgICByZXR1cm4gTGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2FtcGxlZFRleGVsRm9ybWF0
UkdCQTsKIH0KIAotdm9pZCBGcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVw
ZGF0ZXI6OnVwZGF0ZVRleHR1cmVSZWN0KEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBUZXh0
dXJlQWxsb2NhdG9yQmluZGluZyogYmluZGluZywgTWFuYWdlZFRleHR1cmUqIHRleHR1cmUsIGNv
bnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KQordm9pZCBG
cmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OnVwZGF0ZVRleHR1
cmVSZWN0KEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBTa0NhbnZhcyAqY2FudmFzLCBjb25z
dCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCkKIHsKLSAgICAv
LyBNYWtlIHN1cmUgU0tJQSB1c2VzIHRoZSBjb3JyZWN0IEdMIGNvbnRleHQuCi0gICAgY29udGV4
dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgLy8gTm90aWZ5IFNLSUEgdG8gc3luYyBpdHMg
aW50ZXJuYWwgR0wgc3RhdGUuCi0gICAgY29udGV4dC0+Z3JDb250ZXh0KCktPnJlc2V0Q29udGV4
dCgpOwotCi0gICAgLy8gQ3JlYXRlIGFuIGFjY2VsZXJhdGVkIGNhbnZhcyB0byBkcmF3IG9uLgot
ICAgIE93blB0cjxTa0NhbnZhcz4gY2FudmFzID0gY3JlYXRlQWNjZWxlcmF0ZWRDYW52YXMoY29u
dGV4dCwgYmluZGluZywgdGV4dHVyZSk7Ci0KLSAgICBjYW52YXMtPmNsaXBSZWN0KFNrUmVjdChk
ZXN0UmVjdCkpOwotICAgIC8vIFRoZSBjb21wb3NpdG9yIGV4cGVjdHMgdGhlIHRleHR1cmVzIHRv
IGJlIHVwc2lkZS1kb3duIHNvIGl0IGNhbiBmbGlwCi0gICAgLy8gdGhlIGZpbmFsIGNvbXBvc2l0
ZWQgaW1hZ2UuIEdhbmVzaCByZW5kZXJzIHRoZSBpbWFnZSB1cHJpZ2h0IHNvIHdlCi0gICAgLy8g
bmVlZCB0byBkbyBhIHktZmxpcC4KLSAgICBjYW52YXMtPnRyYW5zbGF0ZSgwLjAsIHRleHR1cmUt
PnNpemUoKS5oZWlnaHQoKSk7Ci0gICAgY2FudmFzLT5zY2FsZSgxLjAsIC0xLjApOwogICAgIC8v
IFRyYW5zbGF0ZSB0aGUgb3JpZ2luIG9mIGNvbnRlbnRSZWN0IHRvIHRoYXQgb2YgZGVzdFJlY3Qu
CiAgICAgLy8gTm90ZSB0aGF0IGRlc3RSZWN0IGlzIGRlZmluZWQgcmVsYXRpdmUgdG8gc291cmNl
UmVjdC4KICAgICBjYW52YXMtPnRyYW5zbGF0ZShjb250ZW50UmVjdCgpLngoKSAtIHNvdXJjZVJl
Y3QueCgpICsgZGVzdFJlY3QueCgpLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRSZWN0
KCkueSgpIC0gc291cmNlUmVjdC55KCkgKyBkZXN0UmVjdC55KCkpOwotICAgIGRyYXdQaWN0dXJl
KGNhbnZhcy5nZXQoKSk7Ci0KLSAgICAvLyBGbHVzaCBTS0lBIGNvbnRleHQgc28gdGhhdCBhbGwg
dGhlIHJlbmRlcmVkIHN0dWZmIGFwcGVhcnMgb24gdGhlIHRleHR1cmUuCi0gICAgY29udGV4dC0+
Z3JDb250ZXh0KCktPmZsdXNoKCk7CisgICAgZHJhd1BpY3R1cmUoY2FudmFzKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vRnJhbWVCdWZmZXJTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVV
cGRhdGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9GcmFt
ZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuaAppbmRleCA3ZjlkZWE3
Li41MTU5YTA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9GcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9GcmFtZUJ1ZmZl
clNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuaApAQCAtNDQsMjAgKzQ0LDI4IEBA
IHB1YmxpYzoKICAgICAgICAgVGV4dHVyZShGcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVy
VGV4dHVyZVVwZGF0ZXIqLCBQYXNzT3duUHRyPE1hbmFnZWRUZXh0dXJlPik7CiAgICAgICAgIHZp
cnR1YWwgflRleHR1cmUoKTsKIAotICAgICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlUmVjdChHcmFw
aGljc0NvbnRleHQzRCosIFRleHR1cmVBbGxvY2F0b3JCaW5kaW5nKiwgY29uc3QgSW50UmVjdCYg
c291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpOworICAgICAgICB2b2lkIHByZXBh
cmUoKTsKKworICAgICAgICB2aXJ0dWFsIFBhc3NPd25QdHI8Q0NUZXh0dXJlVXBkYXRlcjo6VGV4
dHVyZVVwZGF0ZT4gY3JlYXRlQ0NUZXh0dXJlVXBkYXRlKCk7CisgICAgICAgIHZpcnR1YWwgdm9p
ZCBwdXNoUHJvcGVydGllc1RvKENDVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmVVcGRhdGUqKTsKIAog
ICAgIHByaXZhdGU6CiAgICAgICAgIEZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0
dXJlVXBkYXRlciogdGV4dHVyZVVwZGF0ZXIoKSB7IHJldHVybiBtX3RleHR1cmVVcGRhdGVyOyB9
CiAKICAgICAgICAgRnJhbWVCdWZmZXJTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVy
KiBtX3RleHR1cmVVcGRhdGVyOworICAgICAgICBHcmFwaGljc0NvbnRleHQzRCogbV9jb250ZXh0
OworICAgICAgICBJbnRTaXplIG1fc2l6ZTsKKyAgICAgICAgdW5zaWduZWQgbV9iYWNrVGV4dHVy
ZUlkOworICAgICAgICBQbGF0Zm9ybTNET2JqZWN0IG1fZmJvOworICAgICAgICBPd25QdHI8U2tD
YW52YXM+IG1fY2FudmFzOwogICAgIH07CiAKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxGcmFtZUJ1
ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI+IGNyZWF0ZShQYXNzT3duUHRy
PExheWVyUGFpbnRlckNocm9taXVtPik7CiAgICAgdmlydHVhbCB+RnJhbWVCdWZmZXJTa1BpY3R1
cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyKCk7CiAKLSAgICB2aXJ0dWFsIFBhc3NPd25QdHI8
TGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZT4gY3JlYXRlVGV4dHVyZShUZXh0dXJlTWFuYWdl
ciopOworICAgIHZpcnR1YWwgUGFzc093blB0cjxDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpU
ZXh0dXJlPiBjcmVhdGVUZXh0dXJlKFRleHR1cmVNYW5hZ2VyKik7CiAgICAgdmlydHVhbCBTYW1w
bGVkVGV4ZWxGb3JtYXQgc2FtcGxlZFRleGVsRm9ybWF0KEdDM0RlbnVtIHRleHR1cmVGb3JtYXQp
OwotICAgIHZvaWQgdXBkYXRlVGV4dHVyZVJlY3QoR3JhcGhpY3NDb250ZXh0M0QqLCBUZXh0dXJl
QWxsb2NhdG9yQmluZGluZyosIE1hbmFnZWRUZXh0dXJlKiwgY29uc3QgSW50UmVjdCYgc291cmNl
UmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpOworICAgIHZvaWQgdXBkYXRlVGV4dHVyZVJl
Y3QoR3JhcGhpY3NDb250ZXh0M0QqLCBTa0NhbnZhcyosIGNvbnN0IEludFJlY3QmIHNvdXJjZVJl
Y3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KTsKIAogcHJpdmF0ZToKICAgICBleHBsaWNpdCBG
cmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIoUGFzc093blB0cjxM
YXllclBhaW50ZXJDaHJvbWl1bT4pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5j
cHAKaW5kZXggNmY1NGMzMy4uOTRiYTZmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hy
b21pdW0uY3BwCkBAIC01NCw2ICs1NCw3IEBACiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgog
I2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAiU3lzdGVtVGltZS5oIgorI2lu
Y2x1ZGUgImNjL0NDUHJveHkuaCIKICNpbmNsdWRlICJjYy9DQ1RpbGVkTGF5ZXJJbXBsLmgiCiAK
ICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KQEAgLTc1LDcgKzc2LDEwIEBAIEdyYXBoaWNz
TGF5ZXJDaHJvbWl1bTo6R3JhcGhpY3NMYXllckNocm9taXVtKEdyYXBoaWNzTGF5ZXJDbGllbnQq
IGNsaWVudCkKICAgICAsIG1fY29udGVudHNMYXllckhhc0JhY2tncm91bmRDb2xvcihmYWxzZSkK
ICAgICAsIG1faW5TZXRDaGlsZHJlbihmYWxzZSkKIHsKLSAgICBtX2xheWVyID0gQ29udGVudExh
eWVyQ2hyb21pdW06OmNyZWF0ZTxDQ1RpbGVkTGF5ZXJJbXBsPih0aGlzKTsKKyAgICBpZiAoQ0NQ
cm94eTo6aGFzSW1wbFRocmVhZCgpKQorICAgICAgICBtX2xheWVyID0gQ29udGVudExheWVyQ2hy
b21pdW06OmNyZWF0ZTxDQ1RpbGVkTGF5ZXJEYXRhPih0aGlzKTsKKyAgICBlbHNlCisgICAgICAg
IG1fbGF5ZXIgPSBDb250ZW50TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlPENDVGlsZWRMYXllckltcGw+
KHRoaXMpOwogCiAgICAgdXBkYXRlRGVidWdJbmRpY2F0b3JzKCk7CiB9CkBAIC0zMjQsNyArMzI4
LDExIEBAIHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRDb250ZW50c1RvSW1hZ2UoSW1h
Z2UqIGltYWdlKQogICAgIGJvb2wgY2hpbGRyZW5DaGFuZ2VkID0gZmFsc2U7CiAgICAgaWYgKGlt
YWdlKSB7CiAgICAgICAgIGlmICghbV9jb250ZW50c0xheWVyLmdldCgpIHx8IG1fY29udGVudHNM
YXllclB1cnBvc2UgIT0gQ29udGVudHNMYXllckZvckltYWdlKSB7Ci0gICAgICAgICAgICBSZWZQ
dHI8SW1hZ2VMYXllckNocm9taXVtPiBpbWFnZUxheWVyID0gSW1hZ2VMYXllckNocm9taXVtOjpj
cmVhdGU8Q0NUaWxlZExheWVySW1wbD4oKTsKKyAgICAgICAgICAgIFJlZlB0cjxJbWFnZUxheWVy
Q2hyb21pdW0+IGltYWdlTGF5ZXI7CisgICAgICAgICAgICBpZiAoQ0NQcm94eTo6aGFzSW1wbFRo
cmVhZCgpKQorICAgICAgICAgICAgICAgIGltYWdlTGF5ZXIgPSBJbWFnZUxheWVyQ2hyb21pdW06
OmNyZWF0ZTxDQ1RpbGVkTGF5ZXJEYXRhPigpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIGltYWdlTGF5ZXIgPSBJbWFnZUxheWVyQ2hyb21pdW06OmNyZWF0ZTxDQ1RpbGVkTGF5
ZXJJbXBsPigpOwogICAgICAgICAgICAgc2V0dXBDb250ZW50c0xheWVyKGltYWdlTGF5ZXIuZ2V0
KCkpOwogICAgICAgICAgICAgbV9jb250ZW50c0xheWVyUHVycG9zZSA9IENvbnRlbnRzTGF5ZXJG
b3JJbWFnZTsKICAgICAgICAgICAgIGNoaWxkcmVuQ2hhbmdlZCA9IHRydWU7CkBAIC01MjMsNyAr
NTMxLDEwIEBAIHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjp1cGRhdGVMYXllclByZXNlcnZl
czNEKCkKIHsKICAgICBpZiAobV9wcmVzZXJ2ZXMzRCAmJiAhbV90cmFuc2Zvcm1MYXllcikgewog
ICAgICAgICAvLyBDcmVhdGUgdGhlIHRyYW5zZm9ybSBsYXllci4KLSAgICAgICAgbV90cmFuc2Zv
cm1MYXllciA9IExheWVyQ2hyb21pdW06OmNyZWF0ZTxDQ0xheWVySW1wbD4oKTsKKyAgICAgICAg
aWYgKENDUHJveHk6Omhhc0ltcGxUaHJlYWQoKSkKKyAgICAgICAgICAgIG1fdHJhbnNmb3JtTGF5
ZXIgPSBMYXllckNocm9taXVtOjpjcmVhdGU8Q0NMYXllckRhdGE+KCk7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIG1fdHJhbnNmb3JtTGF5ZXIgPSBMYXllckNocm9taXVtOjpjcmVhdGU8Q0NM
YXllckltcGw+KCk7CiAgICAgICAgIG1fdHJhbnNmb3JtTGF5ZXItPnNldFByZXNlcnZlczNEKHRy
dWUpOwogCiAgICAgICAgIC8vIENvcHkgdGhlIHBvc2l0aW9uIGZyb20gdGhpcyBsYXllci4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdl
TGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uY3BwCmluZGV4IGI2MGRlNzQuLjE0Y2Q1NzEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5
ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcApAQCAtMzYsNDQgKzM2LDc5IEBACiAKICNpbmNs
dWRlICJDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKLSNp
bmNsdWRlICJMYXllclRleHR1cmVTdWJJbWFnZS5oIgorI2luY2x1ZGUgIkxheWVyUGFpbnRlckNo
cm9taXVtLmgiCiAjaW5jbHVkZSAiTWFuYWdlZFRleHR1cmUuaCIKICNpbmNsdWRlICJQbGF0Zm9y
bUNvbG9yLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0LmgiCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotY2xhc3MgSW1hZ2VMYXllclRleHR1cmVVcGRhdGVyIDogcHVibGljIExheWVy
VGV4dHVyZVVwZGF0ZXIgeworY2xhc3MgSW1hZ2VDYW52YXNMYXllclRleHR1cmVVcGRhdGVyIDog
cHVibGljIENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIgewogcHVibGljOgorICAgIGNsYXNzIFBh
aW50ZXIgOiBwdWJsaWMgTGF5ZXJQYWludGVyQ2hyb21pdW0geworICAgIHB1YmxpYzoKKyAgICAg
ICAgc3RhdGljIFBhc3NPd25QdHI8UGFpbnRlcj4gY3JlYXRlKCkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBQYWludGVyKCkpOworICAgICAgICB9CisKKyAgICAg
ICAgdmlydHVhbCB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFJlY3QmKQor
ICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQor
ICAgIH07CisKICAgICBjbGFzcyBUZXh0dXJlIDogcHVibGljIENhbnZhc0xheWVyVGV4dHVyZVVw
ZGF0ZXI6OlRleHR1cmUgewogICAgIHB1YmxpYzoKLSAgICAgICAgVGV4dHVyZShJbWFnZUxheWVy
VGV4dHVyZVVwZGF0ZXIqIHRleHR1cmVVcGRhdGVyLCBQYXNzT3duUHRyPE1hbmFnZWRUZXh0dXJl
PiB0ZXh0dXJlKQorICAgICAgICBUZXh0dXJlKEltYWdlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRl
ciogdGV4dHVyZVVwZGF0ZXIsIFBhc3NPd25QdHI8TWFuYWdlZFRleHR1cmU+IHRleHR1cmUpCiAg
ICAgICAgICAgICA6IENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmUodGV4dHVyZSkK
ICAgICAgICAgICAgICwgbV90ZXh0dXJlVXBkYXRlcih0ZXh0dXJlVXBkYXRlcikKICAgICAgICAg
ewogICAgICAgICB9CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVJlY3QoR3JhcGhpY3ND
b250ZXh0M0QqIGNvbnRleHQsIFRleHR1cmVBbGxvY2F0b3JCaW5kaW5nKiBiaW5kaW5nLCBjb25z
dCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCkKKyAgICAgICAg
dmlydHVhbCBQYXNzT3duUHRyPENDVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmVVcGRhdGU+IGNyZWF0
ZUNDVGV4dHVyZVVwZGF0ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBDQ1RleHR1
cmVVcGRhdGVyOjpTdWJJbWFnZVRleHR1cmVVcGRhdGU6OmNyZWF0ZSh0ZXh0dXJlVXBkYXRlcigp
LT51c2VNYXBUZXhTdWJJbWFnZSgpKTsKKyAgICAgICAgfQorCisgICAgICAgIHZpcnR1YWwgdm9p
ZCBwdXNoUHJvcGVydGllc1RvKENDVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmVVcGRhdGUqIHVwZGF0
ZSkKICAgICAgICAgewotICAgICAgICAgICAgdGV4dHVyZSgpLT5iaW5kVGV4dHVyZShjb250ZXh0
LCBiaW5kaW5nKTsKLSAgICAgICAgICAgIGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFXzJELCBiaW5kaW5nLT50ZXh0dXJlSWQodGV4dHVyZSgpLT50ZXh0dXJl
SWQoKSkpOwotICAgICAgICAgICAgdGV4dHVyZVVwZGF0ZXIoKS0+dXBkYXRlVGV4dHVyZVJlY3Qo
Y29udGV4dCwgdGV4dHVyZSgpLCBzb3VyY2VSZWN0LCBkZXN0UmVjdCk7CisgICAgICAgICAgICBD
Q1RleHR1cmVVcGRhdGVyOjpTdWJJbWFnZVRleHR1cmVVcGRhdGUqIHRleHR1cmVVcGRhdGUgPSBz
dGF0aWNfY2FzdDxDQ1RleHR1cmVVcGRhdGVyOjpTdWJJbWFnZVRleHR1cmVVcGRhdGUqPih1cGRh
dGUpOworCisgICAgICAgICAgICBJbnRSZWN0IGltYWdlUmVjdCA9IHRleHR1cmVVcGRhdGVyKCkt
PmltYWdlUmVjdCgpOworICAgICAgICAgICAgSW50UmVjdCBkZXN0UmVjdCA9IHVwZGF0ZVJlY3Qo
KTsKKyAgICAgICAgICAgIEludFBvaW50IG9mZnNldCA9IGNvbnRlbnRPZmZzZXQoKTsKKyAgICAg
ICAgICAgIEludFJlY3Qgc291cmNlUmVjdCA9IEludFJlY3QoSW50UG9pbnQoZGVzdFJlY3QueCgp
ICsgb2Zmc2V0LngoKSwgZGVzdFJlY3QueSgpICsgb2Zmc2V0LnkoKSksIGRlc3RSZWN0LnNpemUo
KSk7CisKKyAgICAgICAgICAgIC8vIFNvdXJjZSByZWN0IHNob3VsZCBuZXZlciBnbyBvdXRzaWRl
IHRoZSBpbWFnZSBwaXhlbHMsIGV2ZW4gaWYgdGhpcworICAgICAgICAgICAgLy8gaXMgcmVxdWVz
dGVkIGJlY2F1c2UgdGhlIHRleHR1cmUgZXh0ZW5kcyBvdXRzaWRlIHRoZSBpbWFnZS4KKyAgICAg
ICAgICAgIEludFJlY3QgY2xpcHBlZFNvdXJjZVJlY3QgPSBzb3VyY2VSZWN0OworICAgICAgICAg
ICAgY2xpcHBlZFNvdXJjZVJlY3QuaW50ZXJzZWN0KGltYWdlUmVjdCk7CisKKyAgICAgICAgICAg
IEludFJlY3QgY2xpcHBlZERlc3RSZWN0ID0gZGVzdFJlY3Q7CisgICAgICAgICAgICBjbGlwcGVk
RGVzdFJlY3QubW92ZShjbGlwcGVkU291cmNlUmVjdC5sb2NhdGlvbigpIC0gc291cmNlUmVjdC5s
b2NhdGlvbigpKTsKKyAgICAgICAgICAgIGNsaXBwZWREZXN0UmVjdC5zZXRTaXplKGNsaXBwZWRT
b3VyY2VSZWN0LnNpemUoKSk7CisKKyAgICAgICAgICAgIHRleHR1cmVVcGRhdGUtPnNldEZvcm1h
dCh0ZXh0dXJlKCktPmZvcm1hdCgpKTsKKyAgICAgICAgICAgIHRleHR1cmVVcGRhdGUtPnNldFRl
eHR1cmVJZCh0ZXh0dXJlKCktPnRleHR1cmVJZCgpKTsKKyAgICAgICAgICAgIHRleHR1cmVVcGRh
dGUtPnNldFJlY3QoY2xpcHBlZERlc3RSZWN0KTsKKyAgICAgICAgICAgIHRleHR1cmVVcGRhdGUt
PnNldFBpeGVsRGF0YSh0ZXh0dXJlVXBkYXRlcigpLT5pbWFnZSgpLnBpeGVscygpLCBpbWFnZVJl
Y3QsIGNsaXBwZWRTb3VyY2VSZWN0KTsKICAgICAgICAgfQogCiAgICAgcHJpdmF0ZToKLSAgICAg
ICAgSW1hZ2VMYXllclRleHR1cmVVcGRhdGVyKiB0ZXh0dXJlVXBkYXRlcigpIHsgcmV0dXJuIG1f
dGV4dHVyZVVwZGF0ZXI7IH0KKyAgICAgICAgSW1hZ2VDYW52YXNMYXllclRleHR1cmVVcGRhdGVy
KiB0ZXh0dXJlVXBkYXRlcigpIHsgcmV0dXJuIG1fdGV4dHVyZVVwZGF0ZXI7IH0KIAotICAgICAg
ICBJbWFnZUxheWVyVGV4dHVyZVVwZGF0ZXIqIG1fdGV4dHVyZVVwZGF0ZXI7CisgICAgICAgIElt
YWdlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlciogbV90ZXh0dXJlVXBkYXRlcjsKICAgICB9Owog
Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SW1hZ2VMYXllclRleHR1cmVVcGRhdGVyPiBjcmVhdGUo
Ym9vbCB1c2VNYXBUZXhTdWJJbWFnZSkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbWFnZUNhbnZh
c0xheWVyVGV4dHVyZVVwZGF0ZXI+IGNyZWF0ZShib29sIHVzZU1hcFRleFN1YkltYWdlKQogICAg
IHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbWFnZUxheWVyVGV4dHVyZVVwZGF0ZXIo
dXNlTWFwVGV4U3ViSW1hZ2UpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbWFnZUNh
bnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIodXNlTWFwVGV4U3ViSW1hZ2UpKTsKICAgICB9CiAKLSAg
ICB2aXJ0dWFsIH5JbWFnZUxheWVyVGV4dHVyZVVwZGF0ZXIoKSB7IH0KKyAgICB2aXJ0dWFsIH5J
bWFnZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIoKSB7IH0KIAotICAgIHZpcnR1YWwgUGFzc093
blB0cjxMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlPiBjcmVhdGVUZXh0dXJlKFRleHR1cmVN
YW5hZ2VyKiBtYW5hZ2VyKQorICAgIHZpcnR1YWwgUGFzc093blB0cjxDYW52YXNMYXllclRleHR1
cmVVcGRhdGVyOjpUZXh0dXJlPiBjcmVhdGVUZXh0dXJlKFRleHR1cmVNYW5hZ2VyKiBtYW5hZ2Vy
KQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBUZXh0dXJlKHRoaXMsIE1hbmFn
ZWRUZXh0dXJlOjpjcmVhdGUobWFuYWdlcikpKTsKICAgICB9CkBAIC04NCwyMyArMTE5LDggQEAg
cHVibGljOgogICAgICAgICAgICAgICAgIExheWVyVGV4dHVyZVVwZGF0ZXI6OlNhbXBsZWRUZXhl
bEZvcm1hdFJHQkEgOiBMYXllclRleHR1cmVVcGRhdGVyOjpTYW1wbGVkVGV4ZWxGb3JtYXRCR1JB
OwogICAgIH0KIAotICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzKGNvbnN0IEludFJlY3Qm
IGNvbnRlbnRSZWN0LCBjb25zdCBJbnRTaXplJiB0aWxlU2l6ZSwgaW50IC8qIGJvcmRlclRleGVs
cyAqLywgZmxvYXQgLyogY29udGVudHNTY2FsZSAqLywgSW50UmVjdCogLyogcmVzdWx0aW5nT3Bh
cXVlUmVjdCAqLykKLSAgICB7Ci0gICAgICAgIG1fdGV4U3ViSW1hZ2Uuc2V0U3ViSW1hZ2VTaXpl
KHRpbGVTaXplKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGV4dHVyZVJlY3Qo
R3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIE1hbmFnZWRUZXh0dXJlKiB0ZXh0dXJlLCBjb25z
dCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCkKKyAgICB2aXJ0
dWFsIHZvaWQgcGFpbnRDb250ZW50cyhjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50U2l6ZSYsIGlu
dCwgZmxvYXQsIEludFJlY3QqKQogICAgIHsKLSAgICAgICAgLy8gU291cmNlIHJlY3Qgc2hvdWxk
IG5ldmVyIGdvIG91dHNpZGUgdGhlIGltYWdlIHBpeGVscywgZXZlbiBpZiB0aGlzCi0gICAgICAg
IC8vIGlzIHJlcXVlc3RlZCBiZWNhdXNlIHRoZSB0ZXh0dXJlIGV4dGVuZHMgb3V0c2lkZSB0aGUg
aW1hZ2UuCi0gICAgICAgIEludFJlY3QgY2xpcHBlZFNvdXJjZVJlY3QgPSBzb3VyY2VSZWN0Owot
ICAgICAgICBjbGlwcGVkU291cmNlUmVjdC5pbnRlcnNlY3QoaW1hZ2VSZWN0KCkpOwotCi0gICAg
ICAgIEludFJlY3QgY2xpcHBlZERlc3RSZWN0ID0gZGVzdFJlY3Q7Ci0gICAgICAgIGNsaXBwZWRE
ZXN0UmVjdC5tb3ZlKGNsaXBwZWRTb3VyY2VSZWN0LmxvY2F0aW9uKCkgLSBzb3VyY2VSZWN0Lmxv
Y2F0aW9uKCkpOwotICAgICAgICBjbGlwcGVkRGVzdFJlY3Quc2V0U2l6ZShjbGlwcGVkU291cmNl
UmVjdC5zaXplKCkpOwotCi0gICAgICAgIG1fdGV4U3ViSW1hZ2UudXBsb2FkKG1faW1hZ2UucGl4
ZWxzKCksIGltYWdlUmVjdCgpLCBjbGlwcGVkU291cmNlUmVjdCwgY2xpcHBlZERlc3RSZWN0LCB0
ZXh0dXJlLT5mb3JtYXQoKSwgY29udGV4dCk7CiAgICAgfQogCiAgICAgdm9pZCB1cGRhdGVGcm9t
SW1hZ2UoTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2UpCkBAIC0xMTMsMTkgKzEzMywzMCBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBtX2ltYWdlLnNpemUoKTsKICAgICB9CiAKLXByaXZhdGU6
Ci0gICAgZXhwbGljaXQgSW1hZ2VMYXllclRleHR1cmVVcGRhdGVyKGJvb2wgdXNlTWFwVGV4U3Vi
SW1hZ2UpCi0gICAgICAgIDogbV90ZXhTdWJJbWFnZSh1c2VNYXBUZXhTdWJJbWFnZSkKKyAgICBJ
bnRSZWN0IGltYWdlUmVjdCgpIGNvbnN0CiAgICAgeworICAgICAgICByZXR1cm4gSW50UmVjdChJ
bnRQb2ludDo6emVybygpLCBtX2ltYWdlLnNpemUoKSk7CiAgICAgfQogCi0gICAgSW50UmVjdCBp
bWFnZVJlY3QoKSBjb25zdAorICAgIFBsYXRmb3JtSW1hZ2UmIGltYWdlKCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBtX2ltYWdlOworICAgIH0KKworICAgIGJvb2wgdXNlTWFwVGV4U3ViSW1hZ2Uo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdXNlTWFwVGV4U3ViSW1hZ2U7CisgICAgfQorCitw
cml2YXRlOgorICAgIGV4cGxpY2l0IEltYWdlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcihib29s
IHVzZU1hcFRleFN1YkltYWdlKQorICAgICAgICA6IENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIo
UGFpbnRlcjo6Y3JlYXRlKCkpCisgICAgICAgICwgbV91c2VNYXBUZXhTdWJJbWFnZSh1c2VNYXBU
ZXhTdWJJbWFnZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBJbnRSZWN0KEludFBvaW50Ojp6ZXJv
KCksIG1faW1hZ2Uuc2l6ZSgpKTsKICAgICB9CiAKICAgICBQbGF0Zm9ybUltYWdlIG1faW1hZ2U7
Ci0gICAgTGF5ZXJUZXh0dXJlU3ViSW1hZ2UgbV90ZXhTdWJJbWFnZTsKKyAgICBib29sIG1fdXNl
TWFwVGV4U3ViSW1hZ2U7CiB9OwogCiBJbWFnZUxheWVyQ2hyb21pdW06OkltYWdlTGF5ZXJDaHJv
bWl1bSgpCkBAIC0xNjQsNyArMTk1LDcgQEAgdm9pZCBJbWFnZUxheWVyQ2hyb21pdW06OnByZXBh
cmVUb1VwZGF0ZUlmRGlydHkoKQogICAgIHByZXBhcmVUb1VwZGF0ZSh2aXNpYmxlTGF5ZXJSZWN0
KCkpOwogfQogCi1MYXllclRleHR1cmVVcGRhdGVyKiBJbWFnZUxheWVyQ2hyb21pdW06OnRleHR1
cmVVcGRhdGVyKCkgY29uc3QKK0NhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIqIEltYWdlTGF5ZXJD
aHJvbWl1bTo6dGV4dHVyZVVwZGF0ZXIoKSBjb25zdAogewogICAgIHJldHVybiBtX3RleHR1cmVV
cGRhdGVyLmdldCgpOwogfQpAQCAtMTg1LDcgKzIxNiw3IEBAIHZvaWQgSW1hZ2VMYXllckNocm9t
aXVtOjpjcmVhdGVUZXh0dXJlVXBkYXRlcihjb25zdCBDQ0xheWVyVHJlZUhvc3QqIGhvc3QpCiB7
CiAgICAgLy8gQXZvaWQgY3JlYXRpbmcgYSBuZXcgdGV4dHVyZSB1cGRhdGVyIHdoaWNoIHdvdWxk
IG5vdCBoYXZlIGEgdmFsaWQgY29weSBvZiB0aGUgY3VycmVudCBpbWFnZS4KICAgICBpZiAoIW1f
dGV4dHVyZVVwZGF0ZXIpCi0gICAgICAgIG1fdGV4dHVyZVVwZGF0ZXIgPSBJbWFnZUxheWVyVGV4
dHVyZVVwZGF0ZXI6OmNyZWF0ZShob3N0LT5sYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkudXNp
bmdNYXBTdWIpOworICAgICAgICBtX3RleHR1cmVVcGRhdGVyID0gSW1hZ2VDYW52YXNMYXllclRl
eHR1cmVVcGRhdGVyOjpjcmVhdGUoaG9zdC0+bGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpLnVz
aW5nTWFwU3ViKTsKIH0KIAogYm9vbCBJbWFnZUxheWVyQ2hyb21pdW06Om5lZWRzQ29udGVudHNT
Y2FsZSgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5oCmluZGV4IDBmMjUyZGQuLjFk
YWM4NzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5oCkBAIC00NCw3ICs0NCw3IEBACiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEltYWdlOwotY2xhc3MgSW1hZ2VMYXllclRleHR1
cmVVcGRhdGVyOworY2xhc3MgSW1hZ2VDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOwogCiAvLyBB
IExheWVyIHRoYXQgY29udGFpbnMgb25seSBhbiBJbWFnZSBlbGVtZW50LgogY2xhc3MgSW1hZ2VM
YXllckNocm9taXVtIDogcHVibGljIFRpbGVkTGF5ZXJDaHJvbWl1bSB7CkBAIC02NSwxMyArNjUs
MTMgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUZXh0dXJlVXBkYXRlcihj
b25zdCBDQ0xheWVyVHJlZUhvc3QqKTsKICAgICB2b2lkIHNldFRpbGluZ09wdGlvbihUaWxpbmdP
cHRpb24pOwogCi0gICAgdmlydHVhbCBMYXllclRleHR1cmVVcGRhdGVyKiB0ZXh0dXJlVXBkYXRl
cigpIGNvbnN0OworICAgIHZpcnR1YWwgQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlciogdGV4dHVy
ZVVwZGF0ZXIoKSBjb25zdDsKICAgICB2aXJ0dWFsIEludFNpemUgY29udGVudEJvdW5kcygpIGNv
bnN0OwogCiAgICAgTmF0aXZlSW1hZ2VQdHIgbV9pbWFnZUZvckN1cnJlbnRGcmFtZTsKICAgICBS
ZWZQdHI8SW1hZ2U+IG1fY29udGVudHM7CiAKLSAgICBSZWZQdHI8SW1hZ2VMYXllclRleHR1cmVV
cGRhdGVyPiBtX3RleHR1cmVVcGRhdGVyOworICAgIFJlZlB0cjxJbWFnZUNhbnZhc0xheWVyVGV4
dHVyZVVwZGF0ZXI+IG1fdGV4dHVyZVVwZGF0ZXI7CiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBM
YXllclR5cGU+IGNsYXNzIFNlcmlhbGl6YWJsZUltYWdlTGF5ZXJDaHJvbWl1bSA6IHB1YmxpYyBJ
bWFnZUxheWVyQ2hyb21pdW0gewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlU3ViSW1hZ2UuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlU3ViSW1hZ2UuY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZmVhMzhhLi4wMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVN1YkltYWdl
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEyNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotCi0jaW5jbHVkZSAi
TGF5ZXJUZXh0dXJlU3ViSW1hZ2UuaCIKLQotI2luY2x1ZGUgIkV4dGVuc2lvbnMzRENocm9taXVt
LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKLSNpbmNsdWRlICJUcmFjZUV2ZW50
LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotTGF5ZXJUZXh0dXJlU3ViSW1hZ2U6OkxheWVy
VGV4dHVyZVN1YkltYWdlKGJvb2wgdXNlTWFwVGV4U3ViSW1hZ2UpCi0gICAgOiBtX3VzZU1hcFRl
eFN1YkltYWdlKHVzZU1hcFRleFN1YkltYWdlKQotewotfQotCi1MYXllclRleHR1cmVTdWJJbWFn
ZTo6fkxheWVyVGV4dHVyZVN1YkltYWdlKCkKLXsKLX0KLQotdm9pZCBMYXllclRleHR1cmVTdWJJ
bWFnZTo6c2V0U3ViSW1hZ2VTaXplKGNvbnN0IEludFNpemUmIHN1YkltYWdlU2l6ZSkKLXsKLSAg
ICBpZiAoc3ViSW1hZ2VTaXplID09IG1fc3ViSW1hZ2VTaXplKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBtX3N1YkltYWdlU2l6ZSA9IHN1YkltYWdlU2l6ZTsKLSAgICBtX3N1YkltYWdlLmNsZWFy
KCk7Ci19Ci0KLXZvaWQgTGF5ZXJUZXh0dXJlU3ViSW1hZ2U6OnVwbG9hZChjb25zdCB1aW50OF90
KiBpbWFnZSwgY29uc3QgSW50UmVjdCYgaW1hZ2VSZWN0LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRl
c3RSZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1h
dCwgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCi17Ci0gICAgaWYgKG1fdXNlTWFwVGV4U3Vi
SW1hZ2UpCi0gICAgICAgIHVwbG9hZFdpdGhNYXBUZXhTdWJJbWFnZShpbWFnZSwgaW1hZ2VSZWN0
LCBzb3VyY2VSZWN0LCBkZXN0UmVjdCwgZm9ybWF0LCBjb250ZXh0KTsKLSAgICBlbHNlCi0gICAg
ICAgIHVwbG9hZFdpdGhUZXhTdWJJbWFnZShpbWFnZSwgaW1hZ2VSZWN0LCBzb3VyY2VSZWN0LCBk
ZXN0UmVjdCwgZm9ybWF0LCBjb250ZXh0KTsKLX0KLQotdm9pZCBMYXllclRleHR1cmVTdWJJbWFn
ZTo6dXBsb2FkV2l0aFRleFN1YkltYWdlKGNvbnN0IHVpbnQ4X3QqIGltYWdlLCBjb25zdCBJbnRS
ZWN0JiBpbWFnZVJlY3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJl
Y3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Mz
RGVudW0gZm9ybWF0LCBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKLXsKLSAgICBUUkFDRV9F
VkVOVCgiTGF5ZXJUZXh0dXJlU3ViSW1hZ2U6OnVwbG9hZFdpdGhUZXhTdWJJbWFnZSIsIHRoaXMs
IDApOwotICAgIGlmICghbV9zdWJJbWFnZSkKLSAgICAgICAgbV9zdWJJbWFnZSA9IGFkb3B0QXJy
YXlQdHIobmV3IHVpbnQ4X3RbbV9zdWJJbWFnZVNpemUud2lkdGgoKSAqIG1fc3ViSW1hZ2VTaXpl
LmhlaWdodCgpICogNF0pOwotCi0gICAgLy8gT2Zmc2V0IGZyb20gaW1hZ2UtcmVjdCB0byBzb3Vy
Y2UtcmVjdC4KLSAgICBJbnRQb2ludCBvZmZzZXQoc291cmNlUmVjdC54KCkgLSBpbWFnZVJlY3Qu
eCgpLCBzb3VyY2VSZWN0LnkoKSAtIGltYWdlUmVjdC55KCkpOwotCi0gICAgY29uc3QgdWludDhf
dCogcGl4ZWxTb3VyY2U7Ci0gICAgaWYgKGltYWdlUmVjdC53aWR0aCgpID09IHNvdXJjZVJlY3Qu
d2lkdGgoKSAmJiAhb2Zmc2V0LngoKSkKLSAgICAgICAgcGl4ZWxTb3VyY2UgPSAmaW1hZ2VbNCAq
IG9mZnNldC55KCkgKiBpbWFnZVJlY3Qud2lkdGgoKV07Ci0gICAgZWxzZSB7Ci0gICAgICAgIC8v
IFN0cmlkZXMgbm90IGVxdWFsLCBzbyBkbyBhIHJvdy1ieS1yb3cgbWVtY3B5IGZyb20gdGhlCi0g
ICAgICAgIC8vIHBhaW50IHJlc3VsdHMgaW50byBhIHRlbXAgYnVmZmVyIGZvciB1cGxvYWRpbmcu
Ci0gICAgICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IGRlc3RSZWN0LmhlaWdodCgpOyArK3Jv
dykKLSAgICAgICAgICAgIG1lbWNweSgmbV9zdWJJbWFnZVtkZXN0UmVjdC53aWR0aCgpICogNCAq
IHJvd10sCi0gICAgICAgICAgICAgICAgICAgJmltYWdlWzQgKiAob2Zmc2V0LngoKSArIChvZmZz
ZXQueSgpICsgcm93KSAqIGltYWdlUmVjdC53aWR0aCgpKV0sCi0gICAgICAgICAgICAgICAgICAg
ZGVzdFJlY3Qud2lkdGgoKSAqIDQpOwotCi0gICAgICAgIHBpeGVsU291cmNlID0gJm1fc3ViSW1h
Z2VbMF07Ci0gICAgfQotICAgIGNvbnRleHQtPnRleFN1YkltYWdlMkQoR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfMkQsIDAsIGRlc3RSZWN0LngoKSwgZGVzdFJlY3QueSgpLCBkZXN0UmVjdC53
aWR0aCgpLCBkZXN0UmVjdC5oZWlnaHQoKSwgZm9ybWF0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5T
SUdORURfQllURSwgcGl4ZWxTb3VyY2UpOwotfQotCi12b2lkIExheWVyVGV4dHVyZVN1YkltYWdl
Ojp1cGxvYWRXaXRoTWFwVGV4U3ViSW1hZ2UoY29uc3QgdWludDhfdCogaW1hZ2UsIGNvbnN0IElu
dFJlY3QmIGltYWdlUmVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBk
ZXN0UmVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHQzNEZW51bSBmb3JtYXQsIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQotewotICAg
IFRSQUNFX0VWRU5UKCJMYXllclRleHR1cmVTdWJJbWFnZTo6dXBsb2FkV2l0aE1hcFRleFN1Yklt
YWdlIiwgdGhpcywgMCk7Ci0gICAgLy8gT2Zmc2V0IGZyb20gaW1hZ2UtcmVjdCB0byBzb3VyY2Ut
cmVjdC4KLSAgICBJbnRQb2ludCBvZmZzZXQoc291cmNlUmVjdC54KCkgLSBpbWFnZVJlY3QueCgp
LCBzb3VyY2VSZWN0LnkoKSAtIGltYWdlUmVjdC55KCkpOwotCi0gICAgLy8gVXBsb2FkIHRpbGUg
ZGF0YSB2aWEgYSBtYXBwZWQgdHJhbnNmZXIgYnVmZmVyCi0gICAgRXh0ZW5zaW9uczNEQ2hyb21p
dW0qIGV4dGVuc2lvbnMgPSBzdGF0aWNfY2FzdDxFeHRlbnNpb25zM0RDaHJvbWl1bSo+KGNvbnRl
eHQtPmdldEV4dGVuc2lvbnMoKSk7Ci0gICAgdWludDhfdCogcGl4ZWxEZXN0ID0gc3RhdGljX2Nh
c3Q8dWludDhfdCo+KGV4dGVuc2lvbnMtPm1hcFRleFN1YkltYWdlMkRDSFJPTUlVTShHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgZGVzdFJlY3QueCgpLCBkZXN0UmVjdC55KCksIGRl
c3RSZWN0LndpZHRoKCksIGRlc3RSZWN0LmhlaWdodCgpLCBmb3JtYXQsIEdyYXBoaWNzQ29udGV4
dDNEOjpVTlNJR05FRF9CWVRFLCBFeHRlbnNpb25zM0RDaHJvbWl1bTo6V1JJVEVfT05MWSkpOwot
Ci0gICAgaWYgKCFwaXhlbERlc3QpIHsKLSAgICAgICAgdXBsb2FkV2l0aFRleFN1YkltYWdlKGlt
YWdlLCBpbWFnZVJlY3QsIHNvdXJjZVJlY3QsIGRlc3RSZWN0LCBmb3JtYXQsIGNvbnRleHQpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGltYWdlUmVjdC53aWR0aCgpID09IHNv
dXJjZVJlY3Qud2lkdGgoKSAmJiAhb2Zmc2V0LngoKSkKLSAgICAgICAgbWVtY3B5KHBpeGVsRGVz
dCwgJmltYWdlWzQgKiBvZmZzZXQueSgpICogaW1hZ2VSZWN0LndpZHRoKCldLCBpbWFnZVJlY3Qu
d2lkdGgoKSAqIGRlc3RSZWN0LmhlaWdodCgpICogNCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIC8v
IFN0cmlkZXMgbm90IGVxdWFsLCBzbyBkbyBhIHJvdy1ieS1yb3cgbWVtY3B5IGZyb20gdGhlCi0g
ICAgICAgIC8vIHBhaW50IHJlc3VsdHMgaW50byB0aGUgcGl4ZWxEZXN0Ci0gICAgICAgIGZvciAo
aW50IHJvdyA9IDA7IHJvdyA8IGRlc3RSZWN0LmhlaWdodCgpOyArK3JvdykKLSAgICAgICAgICAg
IG1lbWNweSgmcGl4ZWxEZXN0W2Rlc3RSZWN0LndpZHRoKCkgKiA0ICogcm93XSwKLSAgICAgICAg
ICAgICAgICAgICAmaW1hZ2VbNCAqIChvZmZzZXQueCgpICsgKG9mZnNldC55KCkgKyByb3cpICog
aW1hZ2VSZWN0LndpZHRoKCkpXSwKLSAgICAgICAgICAgICAgICAgICBkZXN0UmVjdC53aWR0aCgp
ICogNCk7Ci0gICAgfQotICAgIGV4dGVuc2lvbnMtPnVubWFwVGV4U3ViSW1hZ2UyRENIUk9NSVVN
KHBpeGVsRGVzdCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVN1YkltYWdlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVTdWJJbWFnZS5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOWYwODM3Li4wMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVN1Yklt
YWdlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotCi0jaWZuZGVmIExh
eWVyVGV4dHVyZVN1YkltYWdlX2gKLSNkZWZpbmUgTGF5ZXJUZXh0dXJlU3ViSW1hZ2VfaAotCi0j
aWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotCi0jaW5jbHVkZSAiR3JhcGhpY3NUeXBl
czNELmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIkludFNpemUuaCIKLSNpbmNs
dWRlIDx3dGYvT3duQXJyYXlQdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBH
cmFwaGljc0NvbnRleHQzRDsKLQotY2xhc3MgTGF5ZXJUZXh0dXJlU3ViSW1hZ2UgewotcHVibGlj
OgotICAgIGV4cGxpY2l0IExheWVyVGV4dHVyZVN1YkltYWdlKGJvb2wgdXNlTWFwU3ViRm9yVXBs
b2FkKTsKLSAgICB+TGF5ZXJUZXh0dXJlU3ViSW1hZ2UoKTsKLQotICAgIHZvaWQgc2V0U3ViSW1h
Z2VTaXplKGNvbnN0IEludFNpemUmKTsKLSAgICB2b2lkIHVwbG9hZChjb25zdCB1aW50OF90KiBp
bWFnZSwgY29uc3QgSW50UmVjdCYgaW1hZ2VSZWN0LAotICAgICAgICAgICAgICAgIGNvbnN0IElu
dFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0LAotICAgICAgICAgICAg
ICAgIEdDM0RlbnVtIGZvcm1hdCwgR3JhcGhpY3NDb250ZXh0M0QqKTsKLQotcHJpdmF0ZToKLSAg
ICB2b2lkIHVwbG9hZFdpdGhUZXhTdWJJbWFnZShjb25zdCB1aW50OF90KiBpbWFnZSwgY29uc3Qg
SW50UmVjdCYgaW1hZ2VSZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR3JhcGhpY3NDb250ZXh0M0Qq
KTsKLSAgICB2b2lkIHVwbG9hZFdpdGhNYXBUZXhTdWJJbWFnZShjb25zdCB1aW50OF90KiBpbWFn
ZSwgY29uc3QgSW50UmVjdCYgaW1hZ2VSZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR3Jh
cGhpY3NDb250ZXh0M0QqKTsKLQotICAgIGJvb2wgbV91c2VNYXBUZXhTdWJJbWFnZTsKLSAgICBJ
bnRTaXplIG1fc3ViSW1hZ2VTaXplOwotICAgIE93bkFycmF5UHRyPHVpbnQ4X3Q+IG1fc3ViSW1h
Z2U7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0jZW5kaWYgLy8gVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKQotI2VuZGlmIC8vIExheWVyVGV4dHVyZVN1YkltYWdlX2gKLQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJU
ZXh0dXJlVXBkYXRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJUZXh0dXJlVXBkYXRlci5oCmluZGV4IDQzZGQ0YzIuLmI2NDc4MDIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVy
ZVVwZGF0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllclRleHR1cmVVcGRhdGVyLmgKQEAgLTI5LDggKzI5LDkgQEAKIAogI2lmIFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykKIAotI2luY2x1ZGUgIk1hbmFnZWRUZXh0dXJlLmgiCiAjaW5j
bHVkZSAiR3JhcGhpY3NUeXBlczNELmgiCisjaW5jbHVkZSAiTWFuYWdlZFRleHR1cmUuaCIKKyNp
bmNsdWRlICJjYy9DQ1RleHR1cmVVcGRhdGVyLmgiCiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDgsMTUgKzQ5LDE4IEBAIHB1YmxpYzoKICAg
ICAgICAgdmlydHVhbCB+VGV4dHVyZSgpIHsgfQogCiAgICAgICAgIHZpcnR1YWwgTWFuYWdlZFRl
eHR1cmUqIHRleHR1cmUoKSB7IHJldHVybiAwOyB9Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBwcmVw
YXJlUmVjdChjb25zdCBJbnRSZWN0JiAvKiBzb3VyY2VSZWN0ICovKSB7IH0KLSAgICAgICAgdmly
dHVhbCB2b2lkIHVwZGF0ZVJlY3QoR3JhcGhpY3NDb250ZXh0M0QqLCBUZXh0dXJlQWxsb2NhdG9y
QmluZGluZyosIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RS
ZWN0KSA9IDA7CisKKyAgICAgICAgdmlydHVhbCBJbnRSZWN0IHVwZGF0ZVJlY3QoKSBjb25zdCB7
IHJldHVybiBJbnRSZWN0KCk7IH0KKworICAgICAgICB2aXJ0dWFsIFBhc3NPd25QdHI8Q0NUZXh0
dXJlVXBkYXRlcjo6VGV4dHVyZVVwZGF0ZT4gY3JlYXRlQ0NUZXh0dXJlVXBkYXRlKCkgeyByZXR1
cm4gUGFzc093blB0cjxDQ1RleHR1cmVVcGRhdGVyOjpUZXh0dXJlVXBkYXRlPigpOyB9CisgICAg
ICAgIHZpcnR1YWwgdm9pZCBwdXNoUHJvcGVydGllc1RvKENDVGV4dHVyZVVwZGF0ZXI6OlRleHR1
cmVVcGRhdGUqKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiAgICAgfTsKIAogICAgIGNsYXNz
IEhhbmRsZXIgewogICAgIHB1YmxpYzoKICAgICAgICAgdmlydHVhbCB+SGFuZGxlcigpIHsgfQog
Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBoYW5kbGUoTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVy
ZSosIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KSA9
IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBoYW5kbGUoTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4
dHVyZSopID0gMDsKICAgICB9OwogCiAgICAgdmlydHVhbCB+TGF5ZXJUZXh0dXJlVXBkYXRlcigp
IHsgfQpAQCAtNjYsNyArNzAsNiBAQCBwdWJsaWM6CiAgICAgICAgIFNhbXBsZWRUZXhlbEZvcm1h
dEJHUkEsCiAgICAgICAgIFNhbXBsZWRUZXhlbEZvcm1hdEludmFsaWQsCiAgICAgfTsKLSAgICB2
aXJ0dWFsIFBhc3NPd25QdHI8VGV4dHVyZT4gY3JlYXRlVGV4dHVyZShUZXh0dXJlTWFuYWdlciop
ID0gMDsKICAgICAvLyBSZXR1cm5zIHRoZSBmb3JtYXQgb2YgdGhlIHRleGVsIHVwbG9hZGVkIGJ5
IHRoaXMgaW50ZXJmYWNlLgogICAgIC8vIFRoaXMgZm9ybWF0IHNob3VsZCBub3QgYmUgY29uZnVz
ZWQgYnkgdGV4dHVyZSBpbnRlcm5hbCBmb3JtYXQuCiAgICAgLy8gVGhpcyBmb3JtYXQgc3BlY2lm
aWVzIHRoZSBjb21wb25lbnQgb3JkZXIgaW4gdGhlIHNhbXBsZWQgdGV4ZWwuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9NYW5hZ2VkVGV4dHVy
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9NYW5hZ2Vk
VGV4dHVyZS5jcHAKaW5kZXggYmQ3ZTFmNy4uZTljOGI4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTWFuYWdlZFRleHR1cmUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL01hbmFnZWRUZXh0dXJl
LmNwcApAQCAtOTUsMTUgKzk1LDYgQEAgdm9pZCBNYW5hZ2VkVGV4dHVyZTo6YmluZFRleHR1cmUo
R3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCiAgICAgY29udGV4dC0+YmluZFRleHR1cmUoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fdGV4dHVyZUlkKTsKIH0KIAotdm9pZCBNYW5h
Z2VkVGV4dHVyZTo6YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIFRleHR1
cmVBbGxvY2F0b3JCaW5kaW5nKiBiaW5kaW5nKQotewotICAgIHVuc2lnbmVkIHRleHR1cmUgPSBi
aW5kaW5nLT50ZXh0dXJlSWQobV90ZXh0dXJlSWQpOwotICAgIGlmICghdGV4dHVyZSkKLSAgICAg
ICAgdGV4dHVyZSA9IGJpbmRpbmctPmNyZWF0ZVRleHR1cmUobV90ZXh0dXJlSWQsIG1fc2l6ZSwg
bV9mb3JtYXQpOwotCi0gICAgY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfMkQsIHRleHR1cmUpOwotfQotCiB2b2lkIE1hbmFnZWRUZXh0dXJlOjpmcmFtZWJ1
ZmZlclRleHR1cmUyRChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKIHsKICAgICBBU1NFUlQo
Y29udGV4dCA9PSBtX3RleHR1cmVNYW5hZ2VyLT5hbGxvY2F0b3IoKS0+Y29udGV4dCgpKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL01hbmFn
ZWRUZXh0dXJlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9N
YW5hZ2VkVGV4dHVyZS5oCmluZGV4IDJhMDc1YjMuLjFjYjUyZDYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL01hbmFnZWRUZXh0dXJlLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTWFuYWdlZFRleHR1
cmUuaApAQCAtNTcsNyArNTcsNiBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgdm9pZCBiaW5kVGV4
dHVyZShHcmFwaGljc0NvbnRleHQzRCopOwotICAgIHZvaWQgYmluZFRleHR1cmUoR3JhcGhpY3ND
b250ZXh0M0QqLCBUZXh0dXJlQWxsb2NhdG9yQmluZGluZyopOwogICAgIHZvaWQgZnJhbWVidWZm
ZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250ZXh0M0QqKTsKIAogICAgIEludFNpemUgc2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Ta1BpY3R1cmVD
YW52YXNMYXllclRleHR1cmVVcGRhdGVyLmNwcAppbmRleCA2NGQ0NjBlLi5iMmE1YzNiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Ta1BpY3R1
cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Ta1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVy
LmNwcApAQCAtNTYsNyArNTYsNyBAQCB2b2lkIFNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVw
ZGF0ZXI6OnBhaW50Q29udGVudHMoY29uc3QgSW50UmVjdCYgY29udGVudFJlYwogICAgIHBsYXRm
b3JtQ29udGV4dC5zZXREZWZlcnJlZCh0cnVlKTsKICAgICBwbGF0Zm9ybUNvbnRleHQuc2V0VHJh
Y2tPcGFxdWVSZWdpb24oIW1fbGF5ZXJJc09wYXF1ZSk7CiAgICAgR3JhcGhpY3NDb250ZXh0IGdy
YXBoaWNzQ29udGV4dCgmcGxhdGZvcm1Db250ZXh0KTsKLSAgICBDYW52YXNMYXllclRleHR1cmVV
cGRhdGVyOjpwYWludENvbnRlbnRzKGdyYXBoaWNzQ29udGV4dCwgY29udGVudFJlY3QsIGNvbnRl
bnRzU2NhbGUpOworICAgIHBhaW50Q2FudmFzQ29udGVudHMoZ3JhcGhpY3NDb250ZXh0LCBjb250
ZW50UmVjdCwgY29udGVudHNTY2FsZSk7CiAgICAgbV9waWN0dXJlLmVuZFJlY29yZGluZygpOwog
CiAgICAgaWYgKCFtX2xheWVySXNPcGFxdWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNw
cAppbmRleCBkZmViYjBhLi5iMjNhNTJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5j
cHAKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgIlRpbGVkTGF5ZXJDaHJvbWl1bS5oIgog
CisjaW5jbHVkZSAiQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5oIgogI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCiAjaW5j
bHVkZSAiTWFuYWdlZFRleHR1cmUuaCIKQEAgLTE3NywzOCArMTc4LDEwIEBAIHZvaWQgVGlsZWRM
YXllckNocm9taXVtOjpmb3JFYWNoQ29tcG9zaXRvclJlc291cmNlKExheWVyVGV4dHVyZVVwZGF0
ZXI6OkhhbmRsZXImCiAgICAgICAgIGZvciAoaW50IGkgPSBsZWZ0OyBpIDw9IHJpZ2h0OyArK2kp
IHsKICAgICAgICAgICAgIFVwZGF0YWJsZVRpbGUqIHRpbGUgPSB0aWxlQXQoaSwgaik7CiAKLSAg
ICAgICAgICAgIC8vIFJlcXVpcmVkIHRpbGVzIGFyZSBjcmVhdGVkIGluIHByZXBhcmVUb1VwZGF0
ZSgpLiBBIHRpbGUgc2hvdWxkCi0gICAgICAgICAgICAvLyBuZXZlciBiZSByZW1vdmVkIGJldHdl
ZW4gdGhlIGNhbGwgdG8gcHJlcGFyZVRvVXBkYXRlKCkgYW5kIHRoZQotICAgICAgICAgICAgLy8g
Y2FsbCB0byB1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKCkuCi0gICAgICAgICAgICBpZiAoIXRp
bGUpCi0gICAgICAgICAgICAgICAgQ1JBU0goKTsKLQotICAgICAgICAgICAgSW50UmVjdCBzb3Vy
Y2VSZWN0ID0gdGlsZS0+bV91cGRhdGVSZWN0OwotICAgICAgICAgICAgaWYgKHRpbGUtPm1fdXBk
YXRlUmVjdC5pc0VtcHR5KCkpCisgICAgICAgICAgICBpZiAodGlsZS0+dGV4dHVyZSgpLT51cGRh
dGVSZWN0KCkuaXNFbXB0eSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAg
ICAgICBBU1NFUlQodGlsZS0+bWFuYWdlZFRleHR1cmUoKS0+aXNSZXNlcnZlZCgpKTsKLSAgICAg
ICAgICAgIGNvbnN0IEludFBvaW50IGFuY2hvciA9IG1fdGlsZXItPnRpbGVSZWN0KHRpbGUpLmxv
Y2F0aW9uKCk7Ci0KLSAgICAgICAgICAgIC8vIENhbGN1bGF0ZSB0aWxlLXNwYWNlIHJlY3Rhbmds
ZSB0byB1cGxvYWQgaW50by4KLSAgICAgICAgICAgIEludFJlY3QgZGVzdFJlY3QoSW50UG9pbnQo
c291cmNlUmVjdC54KCkgLSBhbmNob3IueCgpLCBzb3VyY2VSZWN0LnkoKSAtIGFuY2hvci55KCkp
LCBzb3VyY2VSZWN0LnNpemUoKSk7Ci0gICAgICAgICAgICBpZiAoZGVzdFJlY3QueCgpIDwgMCkK
LSAgICAgICAgICAgICAgICBDUkFTSCgpOwotICAgICAgICAgICAgaWYgKGRlc3RSZWN0LnkoKSA8
IDApCi0gICAgICAgICAgICAgICAgQ1JBU0goKTsKLQotICAgICAgICAgICAgLy8gT2Zmc2V0IGZy
b20gcGFpbnQgcmVjdGFuZ2xlIHRvIHRoaXMgdGlsZSdzIGRpcnR5IHJlY3RhbmdsZS4KLSAgICAg
ICAgICAgIEludFBvaW50IHBhaW50T2Zmc2V0KHNvdXJjZVJlY3QueCgpIC0gbV9wYWludFJlY3Qu
eCgpLCBzb3VyY2VSZWN0LnkoKSAtIG1fcGFpbnRSZWN0LnkoKSk7Ci0gICAgICAgICAgICBpZiAo
cGFpbnRPZmZzZXQueCgpIDwgMCkKLSAgICAgICAgICAgICAgICBDUkFTSCgpOwotICAgICAgICAg
ICAgaWYgKHBhaW50T2Zmc2V0LnkoKSA8IDApCi0gICAgICAgICAgICAgICAgQ1JBU0goKTsKLSAg
ICAgICAgICAgIGlmIChwYWludE9mZnNldC54KCkgKyBkZXN0UmVjdC53aWR0aCgpID4gbV9wYWlu
dFJlY3Qud2lkdGgoKSkKLSAgICAgICAgICAgICAgICBDUkFTSCgpOwotICAgICAgICAgICAgaWYg
KHBhaW50T2Zmc2V0LnkoKSArIGRlc3RSZWN0LmhlaWdodCgpID4gbV9wYWludFJlY3QuaGVpZ2h0
KCkpCi0gICAgICAgICAgICAgICAgQ1JBU0goKTsKLQotICAgICAgICAgICAgaGFuZGxlci5oYW5k
bGUodGlsZS0+dGV4dHVyZSgpLCBzb3VyY2VSZWN0LCBkZXN0UmVjdCk7CisgICAgICAgICAgICBo
YW5kbGVyLmhhbmRsZSh0aWxlLT50ZXh0dXJlKCkpOwogICAgICAgICB9CiAgICAgfQogfQpAQCAt
MzM5LDcgKzMxMiw2IEBAIHZvaWQgVGlsZWRMYXllckNocm9taXVtOjpwcmVwYXJlVG9VcGRhdGVU
aWxlcyhib29sIGlkbGUsIGludCBsZWZ0LCBpbnQgdG9wLCBpbnQKICAgICAgICAgICAgIH0KIAog
ICAgICAgICAgICAgZGlydHlMYXllclJlY3QudW5pdGUodGlsZS0+bV9kaXJ0eVJlY3QpOwotICAg
ICAgICAgICAgdGlsZS0+Y29weUFuZENsZWFyRGlydHkoKTsKICAgICAgICAgfQogICAgIH0KIApA
QCAtMzYxLDggKzMzMyw3IEBAIHZvaWQgVGlsZWRMYXllckNocm9taXVtOjpwcmVwYXJlVG9VcGRh
dGVUaWxlcyhib29sIGlkbGUsIGludCBsZWZ0LCBpbnQgdG9wLCBpbnQKICAgICAgICAgICAgIGlm
ICghdGlsZSkKICAgICAgICAgICAgICAgICBDUkFTSCgpOwogCi0gICAgICAgICAgICAvLyBVc2Ug
bV91cGRhdGVSZWN0IGFzIGNvcHlBbmRDbGVhckRpcnR5IGFib3ZlIG1vdmVkIHRoZSBleGlzdGlu
ZyBkaXJ0eSByZWN0IHRvIG1fdXBkYXRlUmVjdC4KLSAgICAgICAgICAgIGNvbnN0IEludFJlY3Qm
IGRpcnR5UmVjdCA9IHRpbGUtPm1fdXBkYXRlUmVjdDsKKyAgICAgICAgICAgIGNvbnN0IEludFJl
Y3QmIGRpcnR5UmVjdCA9IHRpbGUtPm1fZGlydHlSZWN0OwogICAgICAgICAgICAgaWYgKGRpcnR5
UmVjdC5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKQEAgLTM3Miw3ICsz
NDMsMjkgQEAgdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnByZXBhcmVUb1VwZGF0ZVRpbGVzKGJv
b2wgaWRsZSwgaW50IGxlZnQsIGludCB0b3AsIGludAogICAgICAgICAgICAgLy8gbWFrZSBzdXJl
IHRoYXQgc291cmNlUmVjdCBkb2Vzbid0IGV4dGVuZCBvdXRzaWRlIG9mIGl0LgogICAgICAgICAg
ICAgc291cmNlUmVjdC5pbnRlcnNlY3QobV9wYWludFJlY3QpOwogCi0gICAgICAgICAgICB0aWxl
LT5tX3VwZGF0ZVJlY3QgPSBzb3VyY2VSZWN0OworICAgICAgICAgICAgY29uc3QgSW50UG9pbnQg
YW5jaG9yID0gbV90aWxlci0+dGlsZVJlY3QodGlsZSkubG9jYXRpb24oKTsKKyAgICAgICAgICAg
IC8vIENhbGN1bGF0ZSB0aWxlLXNwYWNlIHJlY3RhbmdsZSB0byB1cGxvYWQgaW50by4KKyAgICAg
ICAgICAgIEludFJlY3QgZGVzdFJlY3QgPSBJbnRSZWN0KEludFBvaW50KHNvdXJjZVJlY3QueCgp
IC0gYW5jaG9yLngoKSwgc291cmNlUmVjdC55KCkgLSBhbmNob3IueSgpKSwgc291cmNlUmVjdC5z
aXplKCkpOworICAgICAgICAgICAgaWYgKGRlc3RSZWN0LngoKSA8IDApCisgICAgICAgICAgICAg
ICAgQ1JBU0goKTsKKyAgICAgICAgICAgIGlmIChkZXN0UmVjdC55KCkgPCAwKQorICAgICAgICAg
ICAgICAgIENSQVNIKCk7CisKKyAgICAgICAgICAgIC8vIE9mZnNldCBmcm9tIHBhaW50IHJlY3Rh
bmdsZSB0byB0aGlzIHRpbGUncyBkaXJ0eSByZWN0YW5nbGUuCisgICAgICAgICAgICBJbnRQb2lu
dCBwYWludE9mZnNldChzb3VyY2VSZWN0LngoKSAtIG1fcGFpbnRSZWN0LngoKSwgc291cmNlUmVj
dC55KCkgLSBtX3BhaW50UmVjdC55KCkpOworICAgICAgICAgICAgaWYgKHBhaW50T2Zmc2V0Lngo
KSA8IDApCisgICAgICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAgIGlmIChwYWludE9m
ZnNldC55KCkgPCAwKQorICAgICAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgICAgICBpZiAo
cGFpbnRPZmZzZXQueCgpICsgZGVzdFJlY3Qud2lkdGgoKSA+IG1fcGFpbnRSZWN0LndpZHRoKCkp
CisgICAgICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAgIGlmIChwYWludE9mZnNldC55
KCkgKyBkZXN0UmVjdC5oZWlnaHQoKSA+IG1fcGFpbnRSZWN0LmhlaWdodCgpKQorICAgICAgICAg
ICAgICAgIENSQVNIKCk7CisKKyAgICAgICAgICAgIHRpbGUtPnRleHR1cmUoKS0+c2V0VXBkYXRl
UmVjdChkZXN0UmVjdCk7CisgICAgICAgICAgICB0aWxlLT50ZXh0dXJlKCktPnNldENvbnRlbnRP
ZmZzZXQoYW5jaG9yKTsKKworICAgICAgICAgICAgdGlsZS0+Y2xlYXJEaXJ0eSgpOwogICAgICAg
ICB9CiAgICAgfQogfQpAQCAtMzg4LDcgKzM4MSw3IEBAIHZvaWQgVGlsZWRMYXllckNocm9taXVt
OjpwcmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVjdCYgbGF5ZXJSZWN0KQogICAgIC8vIFJlc2V0
IG1fdXBkYXRlUmVjdCBmb3IgYWxsIHRpbGVzLgogICAgIGZvciAoQ0NMYXllclRpbGluZ0RhdGE6
OlRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtX3RpbGVyLT50aWxlcygpLmJlZ2luKCk7
IGl0ZXIgIT0gbV90aWxlci0+dGlsZXMoKS5lbmQoKTsgKytpdGVyKSB7CiAgICAgICAgIFVwZGF0
YWJsZVRpbGUqIHRpbGUgPSBzdGF0aWNfY2FzdDxVcGRhdGFibGVUaWxlKj4oaXRlci0+c2Vjb25k
LmdldCgpKTsKLSAgICAgICAgdGlsZS0+bV91cGRhdGVSZWN0ID0gSW50UmVjdCgpOworICAgICAg
ICB0aWxlLT50ZXh0dXJlKCktPnNldFVwZGF0ZVJlY3QoSW50UmVjdCgpKTsKICAgICB9CiAKICAg
ICB1cGRhdGVCb3VuZHMoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmgKaW5kZXggMDAxNTQw
Ni4uZWRjMTUzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmgKQEAgLTI4LDYgKzI4LDcg
QEAKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKIAorI2luY2x1ZGUgIkNhbnZh
c0xheWVyVGV4dHVyZVVwZGF0ZXIuaCIKICNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCiAjaW5j
bHVkZSAiTGF5ZXJUZXh0dXJlVXBkYXRlci5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJUaWxpbmdE
YXRhLmgiCkBAIC0zNywyMyArMzgsMTcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgVXBk
YXRhYmxlVGlsZSA6IHB1YmxpYyBDQ0xheWVyVGlsaW5nRGF0YTo6VGlsZSB7CiAgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoVXBkYXRhYmxlVGlsZSk7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgVXBk
YXRhYmxlVGlsZShQYXNzT3duUHRyPExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU+IHRleHR1
cmUpIDogbV90ZXh0dXJlKHRleHR1cmUpIHsgfQorICAgIGV4cGxpY2l0IFVwZGF0YWJsZVRpbGUo
UGFzc093blB0cjxDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlPiB0ZXh0dXJlKSA6
IG1fdGV4dHVyZSh0ZXh0dXJlKSB7IH0KIAotICAgIExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1
cmUqIHRleHR1cmUoKSB7IHJldHVybiBtX3RleHR1cmUuZ2V0KCk7IH0KKyAgICBDYW52YXNMYXll
clRleHR1cmVVcGRhdGVyOjpUZXh0dXJlKiB0ZXh0dXJlKCkgeyByZXR1cm4gbV90ZXh0dXJlLmdl
dCgpOyB9CiAgICAgTWFuYWdlZFRleHR1cmUqIG1hbmFnZWRUZXh0dXJlKCkgeyByZXR1cm4gbV90
ZXh0dXJlLT50ZXh0dXJlKCk7IH0KIAogICAgIGJvb2wgaXNEaXJ0eSgpIGNvbnN0IHsgcmV0dXJu
ICFtX2RpcnR5UmVjdC5pc0VtcHR5KCk7IH0KICAgICB2b2lkIGNsZWFyRGlydHkoKSB7IG1fZGly
dHlSZWN0ID0gSW50UmVjdCgpOyB9Ci0gICAgdm9pZCBjb3B5QW5kQ2xlYXJEaXJ0eSgpCi0gICAg
ewotICAgICAgICBtX3VwZGF0ZVJlY3QgPSBtX2RpcnR5UmVjdDsKLSAgICAgICAgbV9kaXJ0eVJl
Y3QgPSBJbnRSZWN0KCk7Ci0gICAgfQogCiAgICAgSW50UmVjdCBtX2RpcnR5UmVjdDsKLSAgICBJ
bnRSZWN0IG1fdXBkYXRlUmVjdDsKIHByaXZhdGU6Ci0gICAgT3duUHRyPExheWVyVGV4dHVyZVVw
ZGF0ZXI6OlRleHR1cmU+IG1fdGV4dHVyZTsKKyAgICBPd25QdHI8Q2FudmFzTGF5ZXJUZXh0dXJl
VXBkYXRlcjo6VGV4dHVyZT4gbV90ZXh0dXJlOwogfTsKIAogY2xhc3MgVGlsZWRMYXllckNocm9t
aXVtIDogcHVibGljIExheWVyQ2hyb21pdW0gewpAQCAtOTMsNyArODgsNyBAQCBwcm90ZWN0ZWQ6
CiAgICAgdm9pZCBzZXRCb3JkZXJUZXhlbE9wdGlvbihDQ0xheWVyVGlsaW5nRGF0YTo6Qm9yZGVy
VGV4ZWxPcHRpb24pOwogCiAgICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRleHR1cmVVcGRhdGVyKGNv
bnN0IENDTGF5ZXJUcmVlSG9zdCopID0gMDsKLSAgICB2aXJ0dWFsIExheWVyVGV4dHVyZVVwZGF0
ZXIqIHRleHR1cmVVcGRhdGVyKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgQ2FudmFzTGF5ZXJU
ZXh0dXJlVXBkYXRlciogdGV4dHVyZVVwZGF0ZXIoKSBjb25zdCA9IDA7CiAKICAgICAvLyBTZXQg
aW52YWxpZGF0aW9ucyB0byBiZSBwb3RlbnRpYWxseSByZXBhaW50ZWQgZHVyaW5nIHVwZGF0ZSgp
LgogICAgIHZvaWQgaW52YWxpZGF0ZVJlY3QoY29uc3QgSW50UmVjdCYgbGF5ZXJSZWN0KTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyZWVT
eW5jaHJvbml6ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vVHJlZVN5bmNocm9uaXplci5jcHAKaW5kZXggNGQ5Y2UxOC4uZGI5MGM5NyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJlZVN5bmNocm9u
aXplci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
VHJlZVN5bmNocm9uaXplci5jcHAKQEAgLTEwMCw0ICsxMDAsMTQgQEAgUGFzc1JlZlB0cjxDQ0xh
eWVySW1wbD4gVHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVlcyhMYXllckNocm9taXVt
KiBsYXllclIKICAgICByZXR1cm4gc3luY2hyb25pemVUcmVlc0ludGVybmFsPExheWVyQ2hyb21p
dW0sIENDTGF5ZXJJbXBsPihsYXllclJvb3QsIG9sZENDTGF5ZXJJbXBsUm9vdCk7CiB9CiAKK1Bh
c3NSZWZQdHI8Q0NMYXllckltcGw+IFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMo
Q0NMYXllckRhdGEqIGxheWVyUm9vdCwgUGFzc1JlZlB0cjxDQ0xheWVySW1wbD4gb2xkQ0NMYXll
ckltcGxSb290KQoreworICAgIHJldHVybiBzeW5jaHJvbml6ZVRyZWVzSW50ZXJuYWw8Q0NMYXll
ckRhdGEsIENDTGF5ZXJJbXBsPihsYXllclJvb3QsIG9sZENDTGF5ZXJJbXBsUm9vdCk7Cit9CisK
K1Bhc3NSZWZQdHI8Q0NMYXllckRhdGE+IFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJl
ZXMoTGF5ZXJDaHJvbWl1bSogbGF5ZXJSb290KQoreworICAgIHJldHVybiBzeW5jaHJvbml6ZVRy
ZWVzSW50ZXJuYWw8TGF5ZXJDaHJvbWl1bSwgQ0NMYXllckRhdGE+KGxheWVyUm9vdCwgMCk7Cit9
CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyZWVTeW5jaHJvbml6ZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyZWVTeW5jaHJvbml6ZXIuaAppbmRleCBk
NWIwOWVkLi4yYWYyODc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9UcmVlU3luY2hyb25pemVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJlZVN5bmNocm9uaXplci5oCkBAIC0zNCw2ICszNCw3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ0NMYXllcjsKIGNsYXNzIENDTGF5ZXJJ
bXBsOworY2xhc3MgQ0NMYXllckRhdGE7CiBjbGFzcyBMYXllckNocm9taXVtOwogCiBjbGFzcyBU
cmVlU3luY2hyb25pemVyIHsKQEAgLTQzLDYgKzQ0LDE0IEBAIHB1YmxpYzoKICAgICAvLyBvZiB0
aGUgTGF5ZXJDaHJvbWl1bSB0cmVlLCByZXVzaW5nIHRoZSBDQ0xheWVySW1wbHMgaW4gdGhlIHRy
ZWUgcHJvdmlkZWQgYnkgb2xkQ0NMYXllckltcGxSb290IGlmIHBvc3NpYmxlLgogICAgIHN0YXRp
YyBQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBzeW5jaHJvbml6ZVRyZWVzKExheWVyQ2hyb21pdW0q
IGxheWVyUm9vdCwgUGFzc1JlZlB0cjxDQ0xheWVySW1wbD4gb2xkQ0NMYXllckltcGxSb290KTsK
IAorICAgIC8vIEFjY2VwdHMgYSBDQ0xheWVyRGF0YSB0cmVlIGFuZCByZXR1cm5zIGEgcmVmZXJl
bmNlIHRvIGEgQ0NMYXllckltcGwgdHJlZSB0aGF0IGR1cGxpY2F0ZXMgdGhlIHN0cnVjdHVyZQor
ICAgIC8vIG9mIHRoZSBDQ0xheWVyRGF0YSB0cmVlLCByZXVzaW5nIHRoZSBDQ0xheWVySW1wbHMg
aW4gdGhlIHRyZWUgcHJvdmlkZWQgYnkgb2xkQ0NMYXllckltcGxSb290IGlmIHBvc3NpYmxlLgor
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBzeW5jaHJvbml6ZVRyZWVzKENDTGF5
ZXJEYXRhKiBsYXllclJvb3QsIFBhc3NSZWZQdHI8Q0NMYXllckltcGw+IG9sZENDTGF5ZXJJbXBs
Um9vdCk7CisKKyAgICAvLyBBY2NlcHRzIGEgTGF5ZXJDaHJvbWl1bSB0cmVlIGFuZCByZXR1cm5z
IGEgcmVmZXJlbmNlIHRvIGEgQ0NMYXllckRhdGEgdHJlZSB0aGF0IGR1cGxpY2F0ZXMgdGhlIHN0
cnVjdHVyZQorICAgIC8vIG9mIHRoZSBMYXllckNocm9taXVtIHRyZWUuCisgICAgc3RhdGljIFBh
c3NSZWZQdHI8Q0NMYXllckRhdGE+IHN5bmNocm9uaXplVHJlZXMoTGF5ZXJDaHJvbWl1bSogbGF5
ZXJSb290KTsKKwogcHJpdmF0ZToKICAgICBUcmVlU3luY2hyb25pemVyKCk7IC8vIE5vdCBpbnN0
YW50aWFibGUuCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uY3BwCmluZGV4IDZmZTQxODYu
LmQ0Zjc5MDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmNwcApAQCAtNDMsMTggKzQz
LDIzIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotV2ViR0xMYXllckNocm9taXVtOjpVcGRh
dGVyVGV4dHVyZTo6VXBkYXRlclRleHR1cmUoV2ViR0xMYXllckNocm9taXVtKiBsYXllcikKK1dl
YkdMTGF5ZXJDaHJvbWl1bTo6VGV4dHVyZTo6VGV4dHVyZShXZWJHTExheWVyQ2hyb21pdW0qIGxh
eWVyKQogICAgIDogbV9sYXllcihsYXllcikKIHsKIH0KIAotV2ViR0xMYXllckNocm9taXVtOjpV
cGRhdGVyVGV4dHVyZTo6flVwZGF0ZXJUZXh0dXJlKCkKK1dlYkdMTGF5ZXJDaHJvbWl1bTo6VGV4
dHVyZTo6flRleHR1cmUoKQogewogfQogCi12b2lkIFdlYkdMTGF5ZXJDaHJvbWl1bTo6VXBkYXRl
clRleHR1cmU6OnVwZGF0ZVJlY3QoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIFRleHR1cmVB
bGxvY2F0b3JCaW5kaW5nKiwgY29uc3QgSW50UmVjdCYgLyogc291cmNlUmVjdCAqLywgY29uc3Qg
SW50UmVjdCYgLyogZGVzdFJlY3QgKi8pCitQYXNzT3duUHRyPENDVGV4dHVyZVVwZGF0ZXI6OlRl
eHR1cmVVcGRhdGU+IFdlYkdMTGF5ZXJDaHJvbWl1bTo6VGV4dHVyZTo6Y3JlYXRlQ0NUZXh0dXJl
VXBkYXRlKCkKIHsKLSAgICBtX2xheWVyLT51cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKGNvbnRl
eHQpOworICAgIHJldHVybiBQYXNzT3duUHRyPENDVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmVVcGRh
dGU+KCk7Cit9CisKK3ZvaWQgV2ViR0xMYXllckNocm9taXVtOjpUZXh0dXJlOjpwdXNoUHJvcGVy
dGllc1RvKENDVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmVVcGRhdGUqKQoreworICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogfQogCiBXZWJHTExheWVyQ2hyb21pdW06OldlYkdMTGF5ZXJDaHJvbWl1
bSgpCkBAIC02NSw3ICs3MCw3IEBAIFdlYkdMTGF5ZXJDaHJvbWl1bTo6V2ViR0xMYXllckNocm9t
aXVtKCkKICAgICAsIG1fdGV4dHVyZUNoYW5nZWQodHJ1ZSkKICAgICAsIG1fdGV4dHVyZVVwZGF0
ZWQoZmFsc2UpCiAgICAgLCBtX2RyYXdpbmdCdWZmZXIoMCkKLSAgICAsIG1fdXBkYXRlclRleHR1
cmUoVXBkYXRlclRleHR1cmU6OmNyZWF0ZSh0aGlzKSkKKyAgICAsIG1fZnJvbnRUZXh0dXJlKFRl
eHR1cmU6OmNyZWF0ZSh0aGlzKSkKIHsKIH0KIApAQCAtODAsMTEgKzg1LDE2IEBAIGJvb2wgV2Vi
R0xMYXllckNocm9taXVtOjpkcmF3c0NvbnRlbnQoKSBjb25zdAogICAgIHJldHVybiBMYXllckNo
cm9taXVtOjpkcmF3c0NvbnRlbnQoKSAmJiBjb250ZXh0KCkgJiYgKGNvbnRleHQoKS0+Z2V0RXh0
ZW5zaW9ucygpLT5nZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKCkgPT0gR3JhcGhpY3NDb250ZXh0
M0Q6Ok5PX0VSUk9SKTsKIH0KIAotdm9pZCBXZWJHTExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBv
c2l0b3JSZXNvdXJjZXMoR3JhcGhpY3NDb250ZXh0M0QqIHJlbmRlcmVyQ29udGV4dCkKK3ZvaWQg
V2ViR0xMYXllckNocm9taXVtOjpwYWludENvbnRlbnRzSWZEaXJ0eSgpCiB7Ci0gICAgaWYgKCFk
cmF3c0NvbnRlbnQoKSkKKyAgICBpZiAoIWxheWVyUmVuZGVyZXJDb250ZXh0KCkgfHwgIWRyYXdz
Q29udGVudCgpKQogICAgICAgICByZXR1cm47CiAKKyAgICB1cGRhdGVDb21wb3NpdG9yUmVzb3Vy
Y2VzKGxheWVyUmVuZGVyZXJDb250ZXh0KCkpOworfQorCit2b2lkIFdlYkdMTGF5ZXJDaHJvbWl1
bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhHcmFwaGljc0NvbnRleHQzRCogcmVuZGVyZXJD
b250ZXh0KQorewogICAgIGlmICghbV9uZWVkc0Rpc3BsYXkpCiAgICAgICAgIHJldHVybjsKIApA
QCAtMTExLDcgKzEyMSw3IEBAIHZvaWQgV2ViR0xMYXllckNocm9taXVtOjp1cGRhdGVDb21wb3Np
dG9yUmVzb3VyY2VzKEdyYXBoaWNzQ29udGV4dDNEKiByZW5kZXJlckNvCiAKIHZvaWQgV2ViR0xM
YXllckNocm9taXVtOjpmb3JFYWNoQ29tcG9zaXRvclJlc291cmNlKExheWVyVGV4dHVyZVVwZGF0
ZXI6OkhhbmRsZXImIGhhbmRsZXIpCiB7Ci0gICAgaGFuZGxlci5oYW5kbGUobV91cGRhdGVyVGV4
dHVyZS5nZXQoKSwgSW50UmVjdCgpLCBJbnRSZWN0KCkpOworICAgIGhhbmRsZXIuaGFuZGxlKG1f
ZnJvbnRUZXh0dXJlLmdldCgpKTsKIH0KIAogYm9vbCBXZWJHTExheWVyQ2hyb21pdW06OnBhaW50
UmVuZGVyZWRSZXN1bHRzVG9DYW52YXMoSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXll
ckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9X
ZWJHTExheWVyQ2hyb21pdW0uaAppbmRleCA5YmQ3NzlkLi5iY2RkM2YwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21p
dW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJH
TExheWVyQ2hyb21pdW0uaApAQCAtNDYsMTkgKzQ2LDIwIEBAIGNsYXNzIFdlYkdMTGF5ZXJDaHJv
bWl1bVJhdGVMaW1pdFRhc2s7CiAvLyBBIExheWVyIGNvbnRhaW5pbmcgYSBXZWJHTCBjYW52YXMK
IGNsYXNzIFdlYkdMTGF5ZXJDaHJvbWl1bSA6IHB1YmxpYyBDYW52YXNMYXllckNocm9taXVtIHsK
IHB1YmxpYzoKLSAgICBjbGFzcyBVcGRhdGVyVGV4dHVyZSA6IHB1YmxpYyBMYXllclRleHR1cmVV
cGRhdGVyOjpUZXh0dXJlIHsKKyAgICBjbGFzcyBUZXh0dXJlIDogcHVibGljIExheWVyVGV4dHVy
ZVVwZGF0ZXI6OlRleHR1cmUgewogICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFBhc3NPd25Q
dHI8VXBkYXRlclRleHR1cmU+IGNyZWF0ZShXZWJHTExheWVyQ2hyb21pdW0qIGxheWVyKQorICAg
ICAgICBzdGF0aWMgUGFzc093blB0cjxUZXh0dXJlPiBjcmVhdGUoV2ViR0xMYXllckNocm9taXVt
KiBsYXllcikKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBVcGRh
dGVyVGV4dHVyZShsYXllcikpOworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBUZXh0
dXJlKGxheWVyKSk7CiAgICAgICAgIH0KIAotICAgICAgICB2aXJ0dWFsIH5VcGRhdGVyVGV4dHVy
ZSgpOworICAgICAgICB2aXJ0dWFsIH5UZXh0dXJlKCk7CiAKLSAgICAgICAgdmlydHVhbCB2b2lk
IHVwZGF0ZVJlY3QoR3JhcGhpY3NDb250ZXh0M0QqLCBUZXh0dXJlQWxsb2NhdG9yQmluZGluZyos
IGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KTsKKyAg
ICAgICAgdmlydHVhbCBQYXNzT3duUHRyPENDVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmVVcGRhdGU+
IGNyZWF0ZUNDVGV4dHVyZVVwZGF0ZSgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcHVzaFByb3Bl
cnRpZXNUbyhDQ1RleHR1cmVVcGRhdGVyOjpUZXh0dXJlVXBkYXRlKik7CiAKICAgICBwcml2YXRl
OgotICAgICAgICBleHBsaWNpdCBVcGRhdGVyVGV4dHVyZShXZWJHTExheWVyQ2hyb21pdW0qKTsK
KyAgICAgICAgZXhwbGljaXQgVGV4dHVyZShXZWJHTExheWVyQ2hyb21pdW0qKTsKIAogICAgICAg
ICBXZWJHTExheWVyQ2hyb21pdW0qIG1fbGF5ZXI7CiAgICAgfTsKQEAgLTcyLDYgKzczLDggQEAg
cHVibGljOgogICAgIHZvaWQgc2V0VGV4dHVyZUlkKHVuc2lnbmVkIHRleHR1cmVJZCkgeyBtX3Rl
eHR1cmVJZCA9IHRleHR1cmVJZDsgfQogCiAgICAgdmlydHVhbCBib29sIGRyYXdzQ29udGVudCgp
IGNvbnN0OworICAgIHZvaWQgcGFpbnRDb250ZW50c0lmRGlydHkoKTsKKwogICAgIHZvaWQgdXBk
YXRlQ29tcG9zaXRvclJlc291cmNlcyhHcmFwaGljc0NvbnRleHQzRCopOwogICAgIHZpcnR1YWwg
dm9pZCBmb3JFYWNoQ29tcG9zaXRvclJlc291cmNlKExheWVyVGV4dHVyZVVwZGF0ZXI6OkhhbmRs
ZXImKTsKICAgICB2aXJ0dWFsIHZvaWQgY29udGVudENoYW5nZWQoKTsKQEAgLTEwMSw3ICsxMDQs
NyBAQCBwcml2YXRlOgogICAgIC8vIGEgcmVmZXJlbmNlIHRvIHRoZSBXZWJHTExheWVyQ2hyb21p
dW0uCiAgICAgRHJhd2luZ0J1ZmZlciogbV9kcmF3aW5nQnVmZmVyOwogCi0gICAgT3duUHRyPFVw
ZGF0ZXJUZXh0dXJlPiBtX3VwZGF0ZXJUZXh0dXJlOworICAgIE93blB0cjxUZXh0dXJlPiBtX2Zy
b250VGV4dHVyZTsKIH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIExheWVyVHlwZT4gY2xhc3MgU2Vy
aWFsaXphYmxlV2ViR0xMYXllckNocm9taXVtIDogcHVibGljIFdlYkdMTGF5ZXJDaHJvbWl1bSB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0NhbnZhc0xheWVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0NhbnZhc0xheWVySW1wbC5jcHAKaW5kZXggMGQ2MTNhYi4uYTliNjYw
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NDYW52YXNMYXllckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDQ2FudmFzTGF5ZXJJbXBsLmNwcApAQCAtMzksMTAgKzM5LDYg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBDQ0NhbnZhc0xheWVySW1wbDo6Q0NDYW52YXNMYXll
ckltcGwoaW50IGlkKQogICAgIDogQ0NMYXllckltcGwoaWQpCi0gICAgLCBtX3RleHR1cmVJZCgw
KQotICAgICwgbV9oYXNBbHBoYSh0cnVlKQotICAgICwgbV9wcmVtdWx0aXBsaWVkQWxwaGEodHJ1
ZSkKLSAgICAsIG1fZG91YmxlQnVmZmVyZWQoZmFsc2UpCiB7CiB9CiAKQEAgLTYzLDYgKzU5LDI0
IEBAIHZvaWQgQ0NDYW52YXNMYXllckltcGw6OmR1bXBMYXllclByb3BlcnRpZXMoVGV4dFN0cmVh
bSYgdHMsIGludCBpbmRlbnQpIGNvbnN0CiAgICAgQ0NMYXllckltcGw6OmR1bXBMYXllclByb3Bl
cnRpZXModHMsIGluZGVudCk7CiB9CiAKK0NDQ2FudmFzTGF5ZXJEYXRhOjpDQ0NhbnZhc0xheWVy
RGF0YShpbnQgaWQpCisgICAgOiBDQ0xheWVyRGF0YShpZCkKK3sKK30KKworQ0NDYW52YXNMYXll
ckRhdGE6On5DQ0NhbnZhc0xheWVyRGF0YSgpCit7Cit9CisKK3ZvaWQgQ0NDYW52YXNMYXllckRh
dGE6OnB1c2hQcm9wZXJ0aWVzKGNvbnN0IENDQ2FudmFzTGF5ZXJEYXRhKiBmcm9tLCBDQ0xheWVy
KiB0bykKK3sKKyAgICBDQ0NhbnZhc0xheWVySW1wbCogbGF5ZXIgPSBzdGF0aWNfY2FzdDxDQ0Nh
bnZhc0xheWVySW1wbCo+KHRvKTsKKworICAgIGxheWVyLT5zZXRUZXh0dXJlSWQoZnJvbS0+bV90
ZXh0dXJlSWQpOworICAgIGxheWVyLT5zZXRIYXNBbHBoYShmcm9tLT5tX2hhc0FscGhhKTsKKyAg
ICBsYXllci0+c2V0UHJlbXVsdGlwbGllZEFscGhhKGZyb20tPm1fcHJlbXVsdGlwbGllZEFscGhh
KTsKK30KKwogfQogCiAjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0ND
YW52YXNMYXllckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDQ2FudmFzTGF5ZXJJbXBsLmgKaW5kZXggZjA2MDNmZS4uMGI5YWUzMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52
YXNMYXllckltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0NhbnZhc0xheWVySW1wbC5oCkBAIC0zMiw3ICszMiwyNCBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLWNsYXNzIENDQ2FudmFzTGF5ZXJJbXBsIDogcHVibGljIENDTGF5ZXJJ
bXBsIHsKK2NsYXNzIENDQ2FudmFzTGF5ZXJQcm9wZXJ0aWVzIHsKK3Byb3RlY3RlZDoKKyAgICBl
eHBsaWNpdCBDQ0NhbnZhc0xheWVyUHJvcGVydGllcygpCisgICAgICAgIDogbV90ZXh0dXJlSWQo
MCkKKyAgICAgICAgLCBtX2hhc0FscGhhKHRydWUpCisgICAgICAgICwgbV9wcmVtdWx0aXBsaWVk
QWxwaGEodHJ1ZSkKKyAgICAgICAgLCBtX2RvdWJsZUJ1ZmZlcmVkKGZhbHNlKQorCisgICAgewor
ICAgIH0KKworICAgIHVuc2lnbmVkIG1fdGV4dHVyZUlkOworICAgIGJvb2wgbV9oYXNBbHBoYTsK
KyAgICBib29sIG1fcHJlbXVsdGlwbGllZEFscGhhOworICAgIGJvb2wgbV9kb3VibGVCdWZmZXJl
ZDsKK307CisKK2NsYXNzIENDQ2FudmFzTGF5ZXJJbXBsIDogcHVibGljIENDTGF5ZXJJbXBsLCBw
dWJsaWMgQ0NDYW52YXNMYXllclByb3BlcnRpZXMgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNz
UmVmUHRyPENDQ2FudmFzTGF5ZXJJbXBsPiBjcmVhdGUoaW50IGlkKQogICAgIHsKQEAgLTU2LDEx
ICs3MywzNiBAQCBwcml2YXRlOgogICAgIGV4cGxpY2l0IENDQ2FudmFzTGF5ZXJJbXBsKGludCk7
CiAKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGxheWVyVHlwZUFzU3RyaW5nKCkgY29uc3QgeyBy
ZXR1cm4gIkNhbnZhc0xheWVyIjsgfQorfTsKIAotICAgIHVuc2lnbmVkIG1fdGV4dHVyZUlkOwot
ICAgIGJvb2wgbV9oYXNBbHBoYTsKLSAgICBib29sIG1fcHJlbXVsdGlwbGllZEFscGhhOwotICAg
IGJvb2wgbV9kb3VibGVCdWZmZXJlZDsKK2NsYXNzIENDQ2FudmFzTGF5ZXJEYXRhIDogcHVibGlj
IENDTGF5ZXJEYXRhLCBwdWJsaWMgQ0NDYW52YXNMYXllclByb3BlcnRpZXMgeworcHVibGljOgor
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPENDQ2FudmFzTGF5ZXJEYXRhPiBjcmVhdGUoaW50IGlkKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDQ0NhbnZhc0xheWVyRGF0YShpZCkp
OworICAgIH0KKyAgICBzdGF0aWMgdm9pZCBwdXNoUHJvcGVydGllcyhjb25zdCBDQ0NhbnZhc0xh
eWVyRGF0YSosIENDTGF5ZXIqKTsKKworICAgIHZpcnR1YWwgfkNDQ2FudmFzTGF5ZXJEYXRhKCk7
CisKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q0NMYXllcj4gY3JlYXRlQ0NMYXllcigpCisgICAg
eworICAgICAgICByZXR1cm4gQ0NDYW52YXNMYXllckltcGw6OmNyZWF0ZShpZCgpKTsKKyAgICB9
CisKKyAgICB2aXJ0dWFsIHZvaWQgcHVzaFByb3BlcnRpZXNUbyhDQ0xheWVyKiBsYXllcikKKyAg
ICB7CisgICAgICAgIENDTGF5ZXJEYXRhOjpwdXNoUHJvcGVydGllcyh0aGlzLCBsYXllcik7Cisg
ICAgICAgIHB1c2hQcm9wZXJ0aWVzKHRoaXMsIGxheWVyKTsKKyAgICB9CisKKyAgICB2b2lkIHNl
dFRleHR1cmVJZCh1bnNpZ25lZCBpZCkgeyBtX3RleHR1cmVJZCA9IGlkOyB9CisgICAgdm9pZCBz
ZXRIYXNBbHBoYShib29sIGhhc0FscGhhKSB7IG1faGFzQWxwaGEgPSBoYXNBbHBoYTsgfQorICAg
IHZvaWQgc2V0UHJlbXVsdGlwbGllZEFscGhhKGJvb2wgcHJlbXVsdGlwbGllZEFscGhhKSB7IG1f
cHJlbXVsdGlwbGllZEFscGhhID0gcHJlbXVsdGlwbGllZEFscGhhOyB9CisgICAgdm9pZCBzZXRE
b3VibGVCdWZmZXJlZChib29sIGRvdWJsZUJ1ZmZlcmVkKSB7IG1fZG91YmxlQnVmZmVyZWQgPSBk
b3VibGVCdWZmZXJlZDsgfQorCitwcm90ZWN0ZWQ6CisgICAgZXhwbGljaXQgQ0NDYW52YXNMYXll
ckRhdGEoaW50KTsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcAppbmRleCA4NmRlMDBk
Li41OGMyZWMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCkBAIC00MCwzNCArNDAsMjAgQEAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogQ0NMYXllckltcGw6OkNDTGF5ZXJJbXBsKGludCBpZCkK
LSAgICA6IG1fcGFyZW50KDApCisgICAgOiBDQ0xheWVyUHJvcGVydGllcygpCisgICAgLCBtX3Bh
cmVudCgwKQogICAgICwgbV9sYXllcklkKGlkKQotICAgICwgbV9hbmNob3JQb2ludCgwLjUsIDAu
NSkKLSAgICAsIG1fYW5jaG9yUG9pbnRaKDApCi0gICAgLCBtX3Njcm9sbGFibGUoZmFsc2UpCi0g
ICAgLCBtX2JhY2tncm91bmRDb3ZlcnNWaWV3cG9ydChmYWxzZSkKLSAgICAsIG1fZG91YmxlU2lk
ZWQodHJ1ZSkKICAgICAsIG1fbGF5ZXJQcm9wZXJ0eUNoYW5nZWQoZmFsc2UpCi0gICAgLCBtX21h
c2tzVG9Cb3VuZHMoZmFsc2UpCi0gICAgLCBtX29wYXF1ZShmYWxzZSkKLSAgICAsIG1fb3BhY2l0
eSgxLjApCi0gICAgLCBtX3ByZXNlcnZlczNEKGZhbHNlKQogICAgICwgbV91c2VzTGF5ZXJDbGlw
cGluZyhmYWxzZSkKLSAgICAsIG1faXNOb25Db21wb3NpdGVkQ29udGVudChmYWxzZSkKLSAgICAs
IG1fZHJhd3NDb250ZW50KGZhbHNlKQogICAgICwgbV9wYWdlU2NhbGVEZWx0YSgxKQogICAgICwg
bV90YXJnZXRSZW5kZXJTdXJmYWNlKDApCiAgICAgLCBtX2RyYXdEZXB0aCgwKQogICAgICwgbV9k
cmF3T3BhY2l0eSgwKQotICAgICwgbV9kZWJ1Z0JvcmRlckNvbG9yKDAsIDAsIDAsIDApCi0gICAg
LCBtX2RlYnVnQm9yZGVyV2lkdGgoMCkKIHsKLSAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhy
ZWFkKCkpOwogfQogCiBDQ0xheWVySW1wbDo6fkNDTGF5ZXJJbXBsKCkKIHsKLSAgICBBU1NFUlQo
Q0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOwogfQogCiB2b2lkIENDTGF5ZXJJbXBsOjphZGRDaGls
ZChQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBjaGlsZCkKQEAgLTUxNSw3ICs1MDEsNTggQEAgdm9p
ZCBDQ0xheWVySW1wbDo6c2V0RG91YmxlU2lkZWQoYm9vbCBkb3VibGVTaWRlZCkKICAgICBub3Rl
TGF5ZXJQcm9wZXJ0eUNoYW5nZWRGb3JTdWJ0cmVlKCk7CiB9CiAKK0NDTGF5ZXJEYXRhOjpDQ0xh
eWVyRGF0YShpbnQgaWQpCisgICAgOiBDQ0xheWVyUHJvcGVydGllcygpCisgICAgLCBtX3BhcmVu
dCgwKQorICAgICwgbV9sYXllcklkKGlkKQoreworfQorCitDQ0xheWVyRGF0YTo6fkNDTGF5ZXJE
YXRhKCkKK3sKK30KKwordm9pZCBDQ0xheWVyRGF0YTo6YWRkQ2hpbGQoUGFzc1JlZlB0cjxDQ0xh
eWVyRGF0YT4gY2hpbGQpCit7CisgICAgY2hpbGQtPnNldFBhcmVudCh0aGlzKTsKKyAgICBtX2No
aWxkcmVuLmFwcGVuZChjaGlsZCk7CiB9CiAKK3ZvaWQgQ0NMYXllckRhdGE6OmNsZWFyQ2hpbGRM
aXN0KCkKK3sKKyAgICBtX2NoaWxkcmVuLmNsZWFyKCk7Cit9CisKK3ZvaWQgQ0NMYXllckRhdGE6
OnB1c2hQcm9wZXJ0aWVzKGNvbnN0IENDTGF5ZXJEYXRhKiBmcm9tLCBDQ0xheWVyKiB0bykKK3sK
KyAgICBDQ0xheWVySW1wbCogbGF5ZXIgPSBzdGF0aWNfY2FzdDxDQ0xheWVySW1wbCo+KHRvKTsK
KworICAgIGxheWVyLT5zZXRBbmNob3JQb2ludChmcm9tLT5tX2FuY2hvclBvaW50KTsKKyAgICBs
YXllci0+c2V0QW5jaG9yUG9pbnRaKGZyb20tPm1fYW5jaG9yUG9pbnRaKTsKKyAgICBsYXllci0+
c2V0QmFja2dyb3VuZENvbG9yKGZyb20tPm1fYmFja2dyb3VuZENvbG9yKTsKKyAgICBsYXllci0+
c2V0Qm91bmRzKGZyb20tPm1fYm91bmRzKTsKKyAgICBsYXllci0+c2V0Q29udGVudEJvdW5kcyhm
cm9tLT5tX2NvbnRlbnRCb3VuZHMpOworICAgIGxheWVyLT5zZXREZWJ1Z0JvcmRlckNvbG9yKGZy
b20tPm1fZGVidWdCb3JkZXJDb2xvcik7CisgICAgbGF5ZXItPnNldERlYnVnQm9yZGVyV2lkdGgo
ZnJvbS0+bV9kZWJ1Z0JvcmRlcldpZHRoKTsKKyAgICBsYXllci0+c2V0RG91YmxlU2lkZWQoZnJv
bS0+bV9kb3VibGVTaWRlZCk7CisgICAgbGF5ZXItPnNldERyYXdzQ29udGVudChmcm9tLT5tX2Ry
YXdzQ29udGVudCk7CisgICAgbGF5ZXItPnNldElzTm9uQ29tcG9zaXRlZENvbnRlbnQoZnJvbS0+
bV9pc05vbkNvbXBvc2l0ZWRDb250ZW50KTsKKyAgICBsYXllci0+c2V0TWFza3NUb0JvdW5kcyhm
cm9tLT5tX21hc2tzVG9Cb3VuZHMpOworICAgIGxheWVyLT5zZXRTY3JvbGxhYmxlKGZyb20tPm1f
c2Nyb2xsYWJsZSk7CisgICAgbGF5ZXItPnNldE5hbWUoZnJvbS0+bV9uYW1lKTsKKyAgICBsYXll
ci0+c2V0T3BhcXVlKGZyb20tPm1fb3BhcXVlKTsKKyAgICBsYXllci0+c2V0T3BhY2l0eShmcm9t
LT5tX29wYWNpdHkpOworICAgIGxheWVyLT5zZXRQb3NpdGlvbihmcm9tLT5tX3Bvc2l0aW9uKTsK
KyAgICBsYXllci0+c2V0UHJlc2VydmVzM0QoZnJvbS0+bV9wcmVzZXJ2ZXMzRCk7CisgICAgbGF5
ZXItPnNldFNjcm9sbFBvc2l0aW9uKGZyb20tPm1fc2Nyb2xsUG9zaXRpb24pOworICAgIGxheWVy
LT5zZXRTdWJsYXllclRyYW5zZm9ybShmcm9tLT5tX3N1YmxheWVyVHJhbnNmb3JtKTsKKyAgICBs
YXllci0+c2V0VHJhbnNmb3JtKGZyb20tPm1fdHJhbnNmb3JtKTsKKyAgICBsYXllci0+c2V0VXBk
YXRlUmVjdChmcm9tLT5tX3VwZGF0ZVJlY3QpOworCisgICAgbGF5ZXItPnNldFNjcm9sbERlbHRh
KGxheWVyLT5zY3JvbGxEZWx0YSgpIC0gbGF5ZXItPnNlbnRTY3JvbGxEZWx0YSgpKTsKKyAgICBs
YXllci0+c2V0U2VudFNjcm9sbERlbHRhKEludFNpemUoKSk7Cit9CisKK30KIAogI2VuZGlmIC8v
IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCmluZGV4IGQ1
NjNjOWUuLmIyMjZiMjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaApAQCAtNDUsNyArNDUsNTUgQEAg
Y2xhc3MgQ0NMYXllclNvcnRlcjsKIGNsYXNzIExheWVyQ2hyb21pdW07CiBjbGFzcyBMYXllclJl
bmRlcmVyQ2hyb21pdW07CiAKLWNsYXNzIENDTGF5ZXJJbXBsIDogcHVibGljIENDTGF5ZXIgewor
Y2xhc3MgQ0NMYXllclByb3BlcnRpZXMgeworcHJvdGVjdGVkOgorICAgIGV4cGxpY2l0IENDTGF5
ZXJQcm9wZXJ0aWVzKCkKKyAgICAgICAgOiBtX2FuY2hvclBvaW50KDAuNSwgMC41KQorICAgICAg
ICAsIG1fYW5jaG9yUG9pbnRaKDApCisgICAgICAgICwgbV9iYWNrZ3JvdW5kQ292ZXJzVmlld3Bv
cnQoZmFsc2UpCisgICAgICAgICwgbV9kZWJ1Z0JvcmRlcldpZHRoKDApCisgICAgICAgICwgbV9k
b3VibGVTaWRlZCh0cnVlKQorICAgICAgICAsIG1fZHJhd3NDb250ZW50KGZhbHNlKQorICAgICAg
ICAsIG1faXNOb25Db21wb3NpdGVkQ29udGVudChmYWxzZSkKKyAgICAgICAgLCBtX21hc2tzVG9C
b3VuZHMoZmFsc2UpCisgICAgICAgICwgbV9vcGFxdWUoZmFsc2UpCisgICAgICAgICwgbV9vcGFj
aXR5KDEuMCkKKyAgICAgICAgLCBtX3ByZXNlcnZlczNEKGZhbHNlKQorICAgICAgICAsIG1fc2Ny
b2xsYWJsZShmYWxzZSkKKyAgICB7CisgICAgfQorCisgICAgRmxvYXRQb2ludCBtX2FuY2hvclBv
aW50OworICAgIGZsb2F0IG1fYW5jaG9yUG9pbnRaOworICAgIENvbG9yIG1fYmFja2dyb3VuZENv
bG9yOworICAgIGJvb2wgbV9iYWNrZ3JvdW5kQ292ZXJzVmlld3BvcnQ7CisgICAgSW50U2l6ZSBt
X2JvdW5kczsKKyAgICBJbnRTaXplIG1fY29udGVudEJvdW5kczsKKyAgICAvLyBEZWJ1ZyBib3Jk
ZXJzLgorICAgIENvbG9yIG1fZGVidWdCb3JkZXJDb2xvcjsKKyAgICBmbG9hdCBtX2RlYnVnQm9y
ZGVyV2lkdGg7CisgICAgLy8gV2hldGhlciB0aGUgImJhY2siIG9mIHRoaXMgbGF5ZXIgc2hvdWxk
IGRyYXcuCisgICAgYm9vbCBtX2RvdWJsZVNpZGVkOworICAgIGJvb2wgbV9kcmF3c0NvbnRlbnQ7
CisgICAgYm9vbCBtX2lzTm9uQ29tcG9zaXRlZENvbnRlbnQ7CisgICAgYm9vbCBtX21hc2tzVG9C
b3VuZHM7CisgICAgU3RyaW5nIG1fbmFtZTsKKyAgICBib29sIG1fb3BhcXVlOworICAgIGZsb2F0
IG1fb3BhY2l0eTsKKyAgICBGbG9hdFBvaW50IG1fcG9zaXRpb247CisgICAgYm9vbCBtX3ByZXNl
cnZlczNEOworICAgIGJvb2wgbV9zY3JvbGxhYmxlOworICAgIEludFNpemUgbV9zY3JvbGxEZWx0
YTsKKyAgICBJbnRQb2ludCBtX3Njcm9sbFBvc2l0aW9uOworICAgIEludFNpemUgbV9zZW50U2Ny
b2xsRGVsdGE7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV9zdWJsYXllclRyYW5zZm9ybTsK
KyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX3RyYW5zZm9ybTsKKyAgICAvLyBSZWN0IGluZGlj
YXRpbmcgd2hhdCB3YXMgcmVwYWludGVkL3VwZGF0ZWQgZHVyaW5nIHVwZGF0ZS4KKyAgICAvLyBO
b3RlIHRoYXQgcGx1Z2luIGxheWVycyBieXBhc3MgdGhpcyBhbmQgbGVhdmUgaXQgZW1wdHkuCisg
ICAgRmxvYXRSZWN0IG1fdXBkYXRlUmVjdDsKK307CisKK2NsYXNzIENDTGF5ZXJJbXBsIDogcHVi
bGljIENDTGF5ZXIsIHB1YmxpYyBDQ0xheWVyUHJvcGVydGllcyB7CiBwdWJsaWM6CiAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8Q0NMYXllckltcGw+IGNyZWF0ZShpbnQgaWQpCiAgICAgewpAQCAtMjMx
LDM3ICsyNzksMTMgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8Q0NMYXllckltcGw+IG1fcmVwbGlj
YUxheWVyOwogICAgIGludCBtX2xheWVySWQ7CiAKLSAgICAvLyBQcm9wZXJ0aWVzIHN5bmNocm9u
aXplZCBmcm9tIHRoZSBhc3NvY2lhdGVkIExheWVyQ2hyb21pdW0uCi0gICAgRmxvYXRQb2ludCBt
X2FuY2hvclBvaW50OwotICAgIGZsb2F0IG1fYW5jaG9yUG9pbnRaOwotICAgIEludFNpemUgbV9i
b3VuZHM7Ci0gICAgSW50U2l6ZSBtX2NvbnRlbnRCb3VuZHM7Ci0gICAgSW50UG9pbnQgbV9zY3Jv
bGxQb3NpdGlvbjsKLSAgICBib29sIG1fc2Nyb2xsYWJsZTsKLSAgICBDb2xvciBtX2JhY2tncm91
bmRDb2xvcjsKLSAgICBib29sIG1fYmFja2dyb3VuZENvdmVyc1ZpZXdwb3J0OwotCi0gICAgLy8g
V2hldGhlciB0aGUgImJhY2siIG9mIHRoaXMgbGF5ZXIgc2hvdWxkIGRyYXcuCi0gICAgYm9vbCBt
X2RvdWJsZVNpZGVkOwotCiAgICAgLy8gVHJhY2tzIGlmIGRyYXdpbmctcmVsYXRlZCBwcm9wZXJ0
aWVzIGhhdmUgY2hhbmdlZCBzaW5jZSBsYXN0IHJlZHJhdy4KICAgICBib29sIG1fbGF5ZXJQcm9w
ZXJ0eUNoYW5nZWQ7CiAKICAgICBJbnRSZWN0IG1fdmlzaWJsZUxheWVyUmVjdDsKLSAgICBib29s
IG1fbWFza3NUb0JvdW5kczsKLSAgICBib29sIG1fb3BhcXVlOwotICAgIGZsb2F0IG1fb3BhY2l0
eTsKLSAgICBGbG9hdFBvaW50IG1fcG9zaXRpb247Ci0gICAgYm9vbCBtX3ByZXNlcnZlczNEOwot
ICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fc3VibGF5ZXJUcmFuc2Zvcm07Ci0gICAgVHJhbnNm
b3JtYXRpb25NYXRyaXggbV90cmFuc2Zvcm07CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV96
b29tQW5pbWF0b3JUcmFuc2Zvcm07CiAgICAgYm9vbCBtX3VzZXNMYXllckNsaXBwaW5nOwotICAg
IGJvb2wgbV9pc05vbkNvbXBvc2l0ZWRDb250ZW50OwotCi0gICAgYm9vbCBtX2RyYXdzQ29udGVu
dDsKIAotICAgIEludFNpemUgbV9zY3JvbGxEZWx0YTsKLSAgICBJbnRTaXplIG1fc2VudFNjcm9s
bERlbHRhOwogICAgIEludFNpemUgbV9tYXhTY3JvbGxQb3NpdGlvbjsKICAgICBmbG9hdCBtX3Bh
Z2VTY2FsZURlbHRhOwogCkBAIC0yNzEsOCArMjk1LDYgQEAgcHJpdmF0ZToKICAgICBpbnQgbV9k
ZWJ1Z0lEOwogI2VuZGlmCiAKLSAgICBTdHJpbmcgbV9uYW1lOwotCiAgICAgLy8gUmVuZGVyIHN1
cmZhY2UgdGhpcyBsYXllciBkcmF3cyBpbnRvLiBUaGlzIGlzIGEgc3VyZmFjZSB0aGF0IGNhbiBi
ZWxvbmcKICAgICAvLyBlaXRoZXIgdG8gdGhpcyBsYXllciAoaWYgbV90YXJnZXRSZW5kZXJTdXJm
YWNlID09IG1fcmVuZGVyU3VyZmFjZSkgb3IKICAgICAvLyB0byBhbiBhbmNlc3RvciBvZiB0aGlz
IGxheWVyLiBUaGUgdGFyZ2V0IHJlbmRlciBzdXJmYWNlIGRldGVybWluZXMgdGhlCkBAIC0yODQs
MTAgKzMwNiw2IEBAIHByaXZhdGU6CiAgICAgZmxvYXQgbV9kcmF3RGVwdGg7CiAgICAgZmxvYXQg
bV9kcmF3T3BhY2l0eTsKIAotICAgIC8vIERlYnVnIGJvcmRlcnMuCi0gICAgQ29sb3IgbV9kZWJ1
Z0JvcmRlckNvbG9yOwotICAgIGZsb2F0IG1fZGVidWdCb3JkZXJXaWR0aDsKLQogICAgIFRyYW5z
Zm9ybWF0aW9uTWF0cml4IG1fZHJhd1RyYW5zZm9ybTsKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBtX3NjcmVlblNwYWNlVHJhbnNmb3JtOwogCkBAIC0zMDIsMTQgKzMyMCw4NiBAQCBwcml2YXRl
OgogCiAgICAgLy8gSGllcmFyY2hpY2FsIGJvdW5kaW5nIHJlY3QgY29udGFpbmluZyB0aGUgbGF5
ZXIgYW5kIGl0cyBkZXNjZW5kYW50cy4KICAgICBJbnRSZWN0IG1fZHJhd2FibGVDb250ZW50UmVj
dDsKLQotICAgIC8vIFJlY3QgaW5kaWNhdGluZyB3aGF0IHdhcyByZXBhaW50ZWQvdXBkYXRlZCBk
dXJpbmcgdXBkYXRlLgotICAgIC8vIE5vdGUgdGhhdCBwbHVnaW4gbGF5ZXJzIGJ5cGFzcyB0aGlz
IGFuZCBsZWF2ZSBpdCBlbXB0eS4KLSAgICBGbG9hdFJlY3QgbV91cGRhdGVSZWN0OwogfTsKIAog
dm9pZCBzb3J0TGF5ZXJzKFZlY3RvcjxSZWZQdHI8Q0NMYXllckltcGw+ID46Oml0ZXJhdG9yIGZp
cnN0LCBWZWN0b3I8UmVmUHRyPENDTGF5ZXJJbXBsPiA+OjppdGVyYXRvciBlbmQsIENDTGF5ZXJT
b3J0ZXIqKTsKIAorY2xhc3MgQ0NMYXllckRhdGEgOiBwdWJsaWMgQ0NMYXllciwgcHVibGljIEND
TGF5ZXJQcm9wZXJ0aWVzIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDQ0xheWVy
RGF0YT4gY3JlYXRlKGludCBpZCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
Q0NMYXllckRhdGEoaWQpKTsKKyAgICB9CisgICAgc3RhdGljIHZvaWQgcHVzaFByb3BlcnRpZXMo
Y29uc3QgQ0NMYXllckRhdGEqLCBDQ0xheWVyKik7CisKKyAgICB2aXJ0dWFsIH5DQ0xheWVyRGF0
YSgpOworCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPENDTGF5ZXI+IGNyZWF0ZUNDTGF5ZXIoKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIENDTGF5ZXJJbXBsOjpjcmVhdGUoaWQoKSk7CisgICAgfQor
CisgICAgdmlydHVhbCB2b2lkIHB1c2hQcm9wZXJ0aWVzVG8oQ0NMYXllciogbGF5ZXIpCisgICAg
eworICAgICAgICBwdXNoUHJvcGVydGllcyh0aGlzLCBsYXllcik7CisgICAgfQorCisgICAgLy8g
VHJlZSBzdHJ1Y3R1cmUuCisgICAgQ0NMYXllckRhdGEqIHBhcmVudCgpIGNvbnN0IHsgcmV0dXJu
IG1fcGFyZW50OyB9CisgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxDQ0xheWVyRGF0YT4gPiYgY2hp
bGRyZW4oKSBjb25zdCB7IHJldHVybiBtX2NoaWxkcmVuOyB9CisgICAgdm9pZCBhZGRDaGlsZChQ
YXNzUmVmUHRyPENDTGF5ZXJEYXRhPik7CisKKyAgICB2b2lkIHNldE1hc2tMYXllcihQYXNzUmVm
UHRyPENDTGF5ZXJEYXRhPiBtYXNrTGF5ZXIpIHsgbV9tYXNrTGF5ZXIgPSBtYXNrTGF5ZXI7IH0K
KyAgICBDQ0xheWVyRGF0YSogbWFza0xheWVyKCkgY29uc3QgeyByZXR1cm4gbV9tYXNrTGF5ZXIu
Z2V0KCk7IH0KKworICAgIHZvaWQgc2V0UmVwbGljYUxheWVyKFBhc3NSZWZQdHI8Q0NMYXllckRh
dGE+IHJlcGxpY2FMYXllcikgeyBtX3JlcGxpY2FMYXllciA9IHJlcGxpY2FMYXllcjsgfQorICAg
IENDTGF5ZXJEYXRhKiByZXBsaWNhTGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX3JlcGxpY2FMYXll
ci5nZXQoKTsgfQorCisgICAgaW50IGlkKCkgY29uc3QgeyByZXR1cm4gbV9sYXllcklkOyB9CisK
KyAgICB2b2lkIHNldEFuY2hvclBvaW50KGNvbnN0IEZsb2F0UG9pbnQmIGFuY2hvclBvaW50KSB7
IG1fYW5jaG9yUG9pbnQgPSBhbmNob3JQb2ludDsgfQorICAgIHZvaWQgc2V0QW5jaG9yUG9pbnRa
KGZsb2F0IGFuY2hvclBvaW50WikgeyBtX2FuY2hvclBvaW50WiA9IGFuY2hvclBvaW50WjsgfQor
ICAgIHZvaWQgc2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3Ip
IHsgbV9iYWNrZ3JvdW5kQ29sb3IgPSBiYWNrZ3JvdW5kQ29sb3I7IH0KKyAgICB2b2lkIHNldEJv
dW5kcyhjb25zdCBJbnRTaXplJiBib3VuZHMpIHsgbV9ib3VuZHMgPSBib3VuZHM7IH0KKyAgICB2
b2lkIHNldENvbnRlbnRCb3VuZHMoY29uc3QgSW50U2l6ZSYgY29udGVudEJvdW5kcykgeyBtX2Nv
bnRlbnRCb3VuZHMgPSBjb250ZW50Qm91bmRzOyB9CisgICAgdm9pZCBzZXREZWJ1Z0JvcmRlckNv
bG9yKENvbG9yIGRlYnVnQm9yZGVyQ29sb3IpIHsgbV9kZWJ1Z0JvcmRlckNvbG9yID0gZGVidWdC
b3JkZXJDb2xvcjsgfQorICAgIHZvaWQgc2V0RGVidWdCb3JkZXJXaWR0aChmbG9hdCBkZWJ1Z0Jv
cmRlcldpZHRoKSB7IG1fZGVidWdCb3JkZXJXaWR0aCA9IGRlYnVnQm9yZGVyV2lkdGg7IH0KKyAg
ICB2b2lkIHNldERvdWJsZVNpZGVkKGJvb2wgZG91YmxlU2lkZWQpIHsgbV9kb3VibGVTaWRlZCA9
IGRvdWJsZVNpZGVkOyB9CisgICAgdm9pZCBzZXREcmF3c0NvbnRlbnQoYm9vbCBkcmF3c0NvbnRl
bnQpIHsgbV9kcmF3c0NvbnRlbnQgPSBkcmF3c0NvbnRlbnQ7IH0KKyAgICB2b2lkIHNldElzTm9u
Q29tcG9zaXRlZENvbnRlbnQoYm9vbCBpc05vbkNvbXBvc2l0ZWRDb250ZW50KSB7IG1faXNOb25D
b21wb3NpdGVkQ29udGVudCA9IGlzTm9uQ29tcG9zaXRlZENvbnRlbnQ7IH0KKyAgICB2b2lkIHNl
dE1hc2tzVG9Cb3VuZHMoYm9vbCBtYXNrc1RvQm91bmRzKSB7IG1fbWFza3NUb0JvdW5kcyA9IG1h
c2tzVG9Cb3VuZHM7IH0KKyAgICB2b2lkIHNldE5hbWUoY29uc3QgU3RyaW5nJiBuYW1lKSB7IG1f
bmFtZSA9IG5hbWU7IH0KKyAgICB2b2lkIHNldE9wYXF1ZShib29sIG9wYXF1ZSkgeyBtX29wYXF1
ZSA9IG9wYXF1ZTsgfQorICAgIHZvaWQgc2V0T3BhY2l0eShmbG9hdCBvcGFjaXR5KSB7IG1fb3Bh
Y2l0eSA9IG9wYWNpdHk7IH0KKyAgICB2b2lkIHNldFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQm
IHBvc2l0aW9uKSB7IG1fcG9zaXRpb24gPSBwb3NpdGlvbjsgfQorICAgIHZvaWQgc2V0UHJlc2Vy
dmVzM0QoYm9vbCBwcmVzZXJ2ZXMzRCkgeyBtX3ByZXNlcnZlczNEID0gcHJlc2VydmVzM0Q7IH0K
KyAgICB2b2lkIHNldFNjcm9sbGFibGUoYm9vbCBzY3JvbGxhYmxlKSB7IG1fc2Nyb2xsYWJsZSA9
IHNjcm9sbGFibGU7IH0KKyAgICB2b2lkIHNldFNjcm9sbERlbHRhKGNvbnN0IEludFNpemUmIHNj
cm9sbERlbHRhKSB7IG1fc2Nyb2xsRGVsdGEgPSBzY3JvbGxEZWx0YTsgfQorICAgIHZvaWQgc2V0
U2Nyb2xsUG9zaXRpb24oY29uc3QgSW50UG9pbnQmIHNjcm9sbFBvc2l0aW9uKSB7IG1fc2Nyb2xs
UG9zaXRpb24gPSBzY3JvbGxQb3NpdGlvbjsgfQorICAgIHZvaWQgc2V0U2VudFNjcm9sbERlbHRh
KGNvbnN0IEludFNpemUmIHNlbnRTY3JvbGxEZWx0YSkgeyBtX3NlbnRTY3JvbGxEZWx0YSA9IHNl
bnRTY3JvbGxEZWx0YTsgfQorICAgIHZvaWQgc2V0U3VibGF5ZXJUcmFuc2Zvcm0oY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmIHN1YmxheWVyVHJhbnNmb3JtKSB7IG1fc3VibGF5ZXJUcmFuc2Zv
cm0gPSBzdWJsYXllclRyYW5zZm9ybTsgfQorICAgIHZvaWQgc2V0VHJhbnNmb3JtKGNvbnN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0pIHsgbV90cmFuc2Zvcm0gPSB0cmFuc2Zvcm07
IH0KKyAgICB2b2lkIHNldFVwZGF0ZVJlY3QoY29uc3QgRmxvYXRSZWN0JiB1cGRhdGVSZWN0KSB7
IG1fdXBkYXRlUmVjdCA9IHVwZGF0ZVJlY3Q7IH0KKworICAgIGNvbnN0IEludFNpemUmIHNjcm9s
bERlbHRhKCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxEZWx0YTsgfQorICAgIGNvbnN0IEludFNp
emUmIHNlbnRTY3JvbGxEZWx0YSgpIGNvbnN0IHsgcmV0dXJuIG1fc2VudFNjcm9sbERlbHRhOyB9
CisKK3Byb3RlY3RlZDoKKyAgICBleHBsaWNpdCBDQ0xheWVyRGF0YShpbnQpOworCitwcml2YXRl
OgorICAgIHZvaWQgc2V0UGFyZW50KENDTGF5ZXJEYXRhKiBwYXJlbnQpIHsgbV9wYXJlbnQgPSBw
YXJlbnQ7IH0KKyAgICBmcmllbmQgY2xhc3MgVHJlZVN5bmNocm9uaXplcjsKKyAgICB2b2lkIGNs
ZWFyQ2hpbGRMaXN0KCk7IC8vIFdhcm5pbmc6IFRoaXMgZG9lcyBub3QgcHJlc2VydmUgdHJlZSBz
dHJ1Y3R1cmUgaW52YXJpYW50cyBhbmQgc28gaXMgb25seSBleHBvc2VkIHRvIHRoZSB0cmVlIHN5
bmNocm9uaXplci4KKworICAgIC8vIFByb3BlcnRpZXMgaW50ZXJuYWwgdG8gQ0NMYXllckRhdGEK
KyAgICBDQ0xheWVyRGF0YSogbV9wYXJlbnQ7CisgICAgVmVjdG9yPFJlZlB0cjxDQ0xheWVyRGF0
YT4gPiBtX2NoaWxkcmVuOworICAgIFJlZlB0cjxDQ0xheWVyRGF0YT4gbV9tYXNrTGF5ZXI7Cisg
ICAgUmVmUHRyPENDTGF5ZXJEYXRhPiBtX3JlcGxpY2FMYXllcjsKKyAgICBpbnQgbV9sYXllcklk
OworfTsKKwogfQogCiAjZW5kaWYgLy8gQ0NMYXllckltcGxfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJU
cmVlSG9zdC5jcHAKaW5kZXggMDM5NjAxMC4uZDlhYTI0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
VHJlZUhvc3QuY3BwCkBAIC01OSwxMCArNTksMTMgQEAgQ0NMYXllclRyZWVIb3N0OjpVcGRhdGVI
YW5kbGVyOjp+VXBkYXRlSGFuZGxlcigpCiB7CiB9CiAKLXZvaWQgQ0NMYXllclRyZWVIb3N0OjpV
cGRhdGVIYW5kbGVyOjpoYW5kbGUoTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZSogdGV4dHVy
ZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpCit2
b2lkIENDTGF5ZXJUcmVlSG9zdDo6VXBkYXRlSGFuZGxlcjo6aGFuZGxlKExheWVyVGV4dHVyZVVw
ZGF0ZXI6OlRleHR1cmUqIHRleHR1cmUpCiB7Ci0gICAgdGV4dHVyZS0+cHJlcGFyZVJlY3Qoc291
cmNlUmVjdCk7Ci0gICAgbV9wcm94eS0+dXBkYXRlKHRleHR1cmUsIHNvdXJjZVJlY3QsIGRlc3RS
ZWN0KTsKKyAgICBPd25QdHI8Q0NUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZVVwZGF0ZT4gdGV4dHVy
ZVVwZGF0ZSA9IHRleHR1cmUtPmNyZWF0ZUNDVGV4dHVyZVVwZGF0ZSgpOworICAgIGlmICh0ZXh0
dXJlVXBkYXRlLmdldCgpKSB7CisgICAgICAgIHRleHR1cmUtPnB1c2hQcm9wZXJ0aWVzVG8odGV4
dHVyZVVwZGF0ZS5nZXQoKSk7CisgICAgICAgIG1fcHJveHktPnVwZGF0ZSh0ZXh0dXJlVXBkYXRl
LnJlbGVhc2UoKSk7CisgICAgfQogfQogCiBQYXNzUmVmUHRyPENDTGF5ZXJUcmVlSG9zdD4gQ0NM
YXllclRyZWVIb3N0OjpjcmVhdGUoQ0NMYXllclRyZWVIb3N0Q2xpZW50KiBjbGllbnQsIGNvbnN0
IENDU2V0dGluZ3MmIHNldHRpbmdzKQpAQCAtMTY3LDE1ICsxNzAsMTIgQEAgdm9pZCBDQ0xheWVy
VHJlZUhvc3Q6OmJlZ2luQ29tbWl0T25JbXBsVGhyZWFkKENDTGF5ZXJUcmVlSG9zdEltcGwqIGhv
c3RJbXBsKQogLy8gY29kZSB0aGF0IGlzIGxvZ2ljYWxseSBhIG1haW4gdGhyZWFkIG9wZXJhdGlv
biwgZS5nLiBkZWxldGlvbiBvZiBhIExheWVyQ2hyb21pdW0sCiAvLyBzaG91bGQgYmUgZGVsYXll
ZCB1bnRpbCB0aGUgQ0NMYXllclRyZWVIb3N0Ojpjb21taXRDb21wbGV0ZSwgd2hpY2ggd2lsbCBy
dW4KIC8vIGFmdGVyIHRoZSBjb21taXQsIGJ1dCBvbiB0aGUgbWFpbiB0aHJlYWQuCi12b2lkIEND
TGF5ZXJUcmVlSG9zdDo6ZmluaXNoQ29tbWl0T25JbXBsVGhyZWFkKENDTGF5ZXJUcmVlSG9zdElt
cGwqIGhvc3RJbXBsKQordm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmZpbmlzaENvbW1pdE9uSW1wbFRo
cmVhZChDQ0xheWVyVHJlZUhvc3RJbXBsKiBob3N0SW1wbCwgUGFzc1JlZlB0cjxDQ0xheWVySW1w
bD4gbmV3Um9vdExheWVyKQogewogICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7
CiAKLSAgICAvLyBTeW5jaHJvbml6ZSB0cmVlcywgaWYgb25lIGV4aXN0cyBhdCBhbGwuLi4KLSAg
ICBpZiAocm9vdExheWVyKCkpCi0gICAgICAgIGhvc3RJbXBsLT5zZXRSb290TGF5ZXIoVHJlZVN5
bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVlcyhyb290TGF5ZXIoKSwgaG9zdEltcGwtPnJvb3RM
YXllcigpKSk7Ci0gICAgZWxzZQotICAgICAgICBob3N0SW1wbC0+c2V0Um9vdExheWVyKDApOwor
ICAgIC8vIFN3aXRjaCB0byBuZXcgdHJlZS4KKyAgICBob3N0SW1wbC0+c2V0Um9vdExheWVyKG5l
d1Jvb3RMYXllcik7CiAKICAgICBob3N0SW1wbC0+c2V0U291cmNlRnJhbWVOdW1iZXIoZnJhbWVO
dW1iZXIoKSk7CiAgICAgaG9zdEltcGwtPnNldEhhdmVXaGVlbEV2ZW50SGFuZGxlcnMobV9oYXZl
V2hlZWxFdmVudEhhbmRsZXJzKTsKQEAgLTMzMyw5ICszMzMsMTQgQEAgdm9pZCBDQ0xheWVyVHJl
ZUhvc3Q6OmRpZEJlY29tZUludmlzaWJsZU9uSW1wbFRocmVhZChDQ0xheWVyVHJlZUhvc3RJbXBs
KiBob3N0SW0KICAgICAgICAgaG9zdEltcGwtPnNldFJvb3RMYXllcigwKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KLSAgICBpZiAocm9vdExheWVyKCkpCi0gICAgICAgIGhvc3RJbXBsLT5zZXRS
b290TGF5ZXIoVHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVlcyhyb290TGF5ZXIoKSwg
aG9zdEltcGwtPnJvb3RMYXllcigpKSk7Ci0gICAgZWxzZQorICAgIGlmIChyb290TGF5ZXIoKSkg
eworICAgICAgICBpZiAoQ0NQcm94eTo6aGFzSW1wbFRocmVhZCgpKSB7CisgICAgICAgICAgICBS
ZWZQdHI8Q0NMYXllckRhdGE+IHJvb3REYXRhTGF5ZXIgPSBUcmVlU3luY2hyb25pemVyOjpzeW5j
aHJvbml6ZVRyZWVzKHJvb3RMYXllcigpKTsKKyAgICAgICAgICAgIGhvc3RJbXBsLT5zZXRSb290
TGF5ZXIoVHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVlcyhyb290RGF0YUxheWVyLmdl
dCgpLCBob3N0SW1wbC0+cm9vdExheWVyKCkpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIGhvc3RJbXBsLT5zZXRSb290TGF5ZXIoVHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVU
cmVlcyhyb290TGF5ZXIoKSwgaG9zdEltcGwtPnJvb3RMYXllcigpKSk7CisgICAgICAgIH0KKyAg
ICB9IGVsc2UKICAgICAgICAgaG9zdEltcGwtPnNldFJvb3RMYXllcigwKTsKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyVHJlZUhvc3QuaAppbmRleCA1YWNjYTZiLi4wNDA1MTkyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyVHJlZUhvc3QuaApAQCAtMTI4LDcgKzEyOCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHVw
ZGF0ZUFuaW1hdGlvbnMoZG91YmxlIGZyYW1lQmVnaW5UaW1lKTsKICAgICB2b2lkIGxheW91dCgp
OwogICAgIHZvaWQgYmVnaW5Db21taXRPbkltcGxUaHJlYWQoQ0NMYXllclRyZWVIb3N0SW1wbCop
OwotICAgIHZvaWQgZmluaXNoQ29tbWl0T25JbXBsVGhyZWFkKENDTGF5ZXJUcmVlSG9zdEltcGwq
KTsKKyAgICB2b2lkIGZpbmlzaENvbW1pdE9uSW1wbFRocmVhZChDQ0xheWVyVHJlZUhvc3RJbXBs
KiwgUGFzc1JlZlB0cjxDQ0xheWVySW1wbD4pOwogICAgIHZvaWQgY29tbWl0Q29tcGxldGUoKTsK
ICAgICBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjcmVhdGVMYXllclRyZWVIb3N0Q29u
dGV4dDNEKCk7CiAgICAgdmlydHVhbCBQYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGw+IGNy
ZWF0ZUxheWVyVHJlZUhvc3RJbXBsKENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQqKTsKQEAgLTIw
OCw3ICsyMDgsNyBAQCBwcml2YXRlOgogICAgICAgICBVcGRhdGVIYW5kbGVyKENDUHJveHkqKTsK
ICAgICAgICAgdmlydHVhbCB+VXBkYXRlSGFuZGxlcigpOwogCi0gICAgICAgIHZpcnR1YWwgdm9p
ZCBoYW5kbGUoTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZSosIGNvbnN0IEludFJlY3QmIHNv
dXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KTsKKyAgICAgICAgdmlydHVhbCB2b2lk
IGhhbmRsZShMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlKik7CiAKICAgICBwcml2YXRlOgog
ICAgICAgICBDQ1Byb3h5KiBtX3Byb3h5OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5MYXllckltcGwuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5MYXllckltcGwu
Y3BwCmluZGV4IGIyMGEyZjUuLjJiYzUzNTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkxheWVy
SW1wbC5jcHAKQEAgLTc5LDEyICs3OSw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogQ0NQbHVn
aW5MYXllckltcGw6OkNDUGx1Z2luTGF5ZXJJbXBsKGludCBpZCkKICAgICA6IENDTGF5ZXJJbXBs
KGlkKQotICAgICwgbV90ZXh0dXJlSWQoMCkKLSAgICAsIG1fZmxpcHBlZCh0cnVlKQotICAgICwg
bV91dlJlY3QoMCwgMCwgMSwgMSkKLSAgICAsIG1faW9TdXJmYWNlSWQoMCkKLSAgICAsIG1faW9T
dXJmYWNlV2lkdGgoMCkKLSAgICAsIG1faW9TdXJmYWNlSGVpZ2h0KDApCiAgICAgLCBtX2lvU3Vy
ZmFjZUNoYW5nZWQoZmFsc2UpCiAgICAgLCBtX2lvU3VyZmFjZVRleHR1cmVJZCgwKQogewpAQCAt
MjA3LDYgKzIwMSwzMiBAQCB2b2lkIENDUGx1Z2luTGF5ZXJJbXBsOjpjbGVhbnVwUmVzb3VyY2Vz
KCkKICAgICBtX2lvU3VyZmFjZVRleHR1cmVJZCA9IDA7CiB9CiAKK0NDUGx1Z2luTGF5ZXJEYXRh
OjpDQ1BsdWdpbkxheWVyRGF0YShpbnQgaWQpCisgICAgOiBDQ0xheWVyRGF0YShpZCkKK3sKK30K
KworQ0NQbHVnaW5MYXllckRhdGE6On5DQ1BsdWdpbkxheWVyRGF0YSgpCit7Cit9CisKK3ZvaWQg
Q0NQbHVnaW5MYXllckRhdGE6OnNldElPU3VyZmFjZVByb3BlcnRpZXMoaW50IHdpZHRoLCBpbnQg
aGVpZ2h0LCB1aW50MzJfdCBpb1N1cmZhY2VJZCkKK3sKKyAgICBtX2lvU3VyZmFjZVdpZHRoID0g
d2lkdGg7CisgICAgbV9pb1N1cmZhY2VIZWlnaHQgPSBoZWlnaHQ7CisgICAgbV9pb1N1cmZhY2VJ
ZCA9IGlvU3VyZmFjZUlkOworfQorCit2b2lkIENDUGx1Z2luTGF5ZXJEYXRhOjpwdXNoUHJvcGVy
dGllcyhjb25zdCBDQ1BsdWdpbkxheWVyRGF0YSogZnJvbSwgQ0NMYXllciogdG8pCit7CisgICAg
Q0NQbHVnaW5MYXllckltcGwqIGxheWVyID0gc3RhdGljX2Nhc3Q8Q0NQbHVnaW5MYXllckltcGwq
Pih0byk7CisKKyAgICBsYXllci0+c2V0VGV4dHVyZUlkKGZyb20tPm1fdGV4dHVyZUlkKTsKKyAg
ICBsYXllci0+c2V0RmxpcHBlZChmcm9tLT5tX2ZsaXBwZWQpOworICAgIGxheWVyLT5zZXRVVlJl
Y3QoZnJvbS0+bV91dlJlY3QpOworICAgIGxheWVyLT5zZXRJT1N1cmZhY2VQcm9wZXJ0aWVzKGZy
b20tPm1faW9TdXJmYWNlV2lkdGgsIGZyb20tPm1faW9TdXJmYWNlSGVpZ2h0LCBmcm9tLT5tX2lv
U3VyZmFjZUlkKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5MYXllckltcGwuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmgK
aW5kZXggOWI0ZDVhNC4uNzFmZGE3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5MYXllckltcGwuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkxheWVySW1wbC5o
CkBAIC0zMyw3ICszMywyNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIENDUGx1
Z2luTGF5ZXJJbXBsIDogcHVibGljIENDTGF5ZXJJbXBsIHsKK2NsYXNzIENDUGx1Z2luTGF5ZXJQ
cm9wZXJ0aWVzIHsKK3Byb3RlY3RlZDoKKyAgICBleHBsaWNpdCBDQ1BsdWdpbkxheWVyUHJvcGVy
dGllcygpCisgICAgICAgIDogbV90ZXh0dXJlSWQoMCkKKyAgICAgICAgLCBtX2ZsaXBwZWQodHJ1
ZSkKKyAgICAgICAgLCBtX3V2UmVjdCgwLCAwLCAxLCAxKQorICAgICAgICAsIG1faW9TdXJmYWNl
SWQoMCkKKyAgICAgICAgLCBtX2lvU3VyZmFjZVdpZHRoKDApCisgICAgICAgICwgbV9pb1N1cmZh
Y2VIZWlnaHQoMCkKKyAgICB7CisgICAgfQorCisgICAgdW5zaWduZWQgbV90ZXh0dXJlSWQ7Cisg
ICAgYm9vbCBtX2ZsaXBwZWQ7CisgICAgRmxvYXRSZWN0IG1fdXZSZWN0OworICAgIHVpbnQzMl90
IG1faW9TdXJmYWNlSWQ7CisgICAgaW50IG1faW9TdXJmYWNlV2lkdGg7CisgICAgaW50IG1faW9T
dXJmYWNlSGVpZ2h0OworfTsKKworY2xhc3MgQ0NQbHVnaW5MYXllckltcGwgOiBwdWJsaWMgQ0NM
YXllckltcGwsIHB1YmxpYyBDQ1BsdWdpbkxheWVyUHJvcGVydGllcyB7CiBwdWJsaWM6CiAgICAg
c3RhdGljIFBhc3NSZWZQdHI8Q0NQbHVnaW5MYXllckltcGw+IGNyZWF0ZShpbnQgaWQpCiAgICAg
ewpAQCAtNjQsMTggKzg0LDQxIEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGNsZWFudXBSZXNvdXJj
ZXMoKTsKIAotICAgIHVuc2lnbmVkIG1fdGV4dHVyZUlkOwotICAgIGJvb2wgbV9mbGlwcGVkOwot
ICAgIEZsb2F0UmVjdCBtX3V2UmVjdDsKLSAgICB1aW50MzJfdCBtX2lvU3VyZmFjZUlkOwotICAg
IGludCBtX2lvU3VyZmFjZVdpZHRoOwotICAgIGludCBtX2lvU3VyZmFjZUhlaWdodDsKLQogICAg
IC8vIEludGVybmFscyBmb3IgdGhlIElPU3VyZmFjZSByZW5kZXJpbmcgcGF0aC4KICAgICBib29s
IG1faW9TdXJmYWNlQ2hhbmdlZDsKICAgICB1bnNpZ25lZCBtX2lvU3VyZmFjZVRleHR1cmVJZDsK
IH07CiAKK2NsYXNzIENDUGx1Z2luTGF5ZXJEYXRhIDogcHVibGljIENDTGF5ZXJEYXRhLCBwdWJs
aWMgQ0NQbHVnaW5MYXllclByb3BlcnRpZXMgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVm
UHRyPENDUGx1Z2luTGF5ZXJEYXRhPiBjcmVhdGUoaW50IGlkKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBDQ1BsdWdpbkxheWVyRGF0YShpZCkpOworICAgIH0KKyAgICBzdGF0
aWMgdm9pZCBwdXNoUHJvcGVydGllcyhjb25zdCBDQ1BsdWdpbkxheWVyRGF0YSosIENDTGF5ZXIq
KTsKKworICAgIHZpcnR1YWwgfkNDUGx1Z2luTGF5ZXJEYXRhKCk7CisKKyAgICB2aXJ0dWFsIFBh
c3NSZWZQdHI8Q0NMYXllcj4gY3JlYXRlQ0NMYXllcigpCisgICAgeworICAgICAgICByZXR1cm4g
Q0NQbHVnaW5MYXllckltcGw6OmNyZWF0ZShpZCgpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZv
aWQgcHVzaFByb3BlcnRpZXNUbyhDQ0xheWVyKiBsYXllcikKKyAgICB7CisgICAgICAgIENDTGF5
ZXJEYXRhOjpwdXNoUHJvcGVydGllcyh0aGlzLCBsYXllcik7CisgICAgICAgIHB1c2hQcm9wZXJ0
aWVzKHRoaXMsIGxheWVyKTsKKyAgICB9CisKKyAgICB2b2lkIHNldFRleHR1cmVJZCh1bnNpZ25l
ZCBpZCkgeyBtX3RleHR1cmVJZCA9IGlkOyB9CisgICAgdm9pZCBzZXRGbGlwcGVkKGJvb2wgZmxp
cHBlZCkgeyBtX2ZsaXBwZWQgPSBmbGlwcGVkOyB9CisgICAgdm9pZCBzZXRVVlJlY3QoY29uc3Qg
RmxvYXRSZWN0JiByZWN0KSB7IG1fdXZSZWN0ID0gcmVjdDsgfQorICAgIHZvaWQgc2V0SU9TdXJm
YWNlUHJvcGVydGllcyhpbnQgd2lkdGgsIGludCBoZWlnaHQsIHVpbnQzMl90IGlvU3VyZmFjZUlk
KTsKKworcHJvdGVjdGVkOgorICAgIGV4cGxpY2l0IENDUGx1Z2luTGF5ZXJEYXRhKGludCk7Cit9
OworCiB9CiAKICNlbmRpZiAvLyBDQ1BsdWdpbkxheWVySW1wbF9oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Byb3h5LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Byb3h5LmgKaW5kZXgg
NDRmZTMyZS4uNTk0MTFhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJveHkuaApAQCAtODUsNyArODUsNyBAQCBwdWJsaWM6
CiAgICAgLy8gdXBkYXRlcyBhcmUgcmVxdWlyZWQuCiAgICAgdmlydHVhbCBib29sIHBhcnRpYWxU
ZXh0dXJlVXBkYXRlQ2FwYWJpbGl0eSgpIGNvbnN0ID0gMDsKIAotICAgIHZpcnR1YWwgdm9pZCB1
cGRhdGUoTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZSosIGNvbnN0IEludFJlY3QmIHNvdXJj
ZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHVw
ZGF0ZShQYXNzT3duUHRyPENDVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmVVcGRhdGU+KSA9IDA7CiAK
ICAgICB2aXJ0dWFsIFRleHR1cmVBbGxvY2F0b3IqIGNvbnRlbnRzVGV4dHVyZUFsbG9jYXRvcigp
ID0gMDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcAppbmRleCBiYmFk
NjMwLi4yMzRiYzU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcApA
QCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVk
ZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCiAjaW5jbHVkZSAiVHJhY2VFdmVudC5oIgorI2lu
Y2x1ZGUgIlRyZWVTeW5jaHJvbml6ZXIuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3Qu
aCIKICNpbmNsdWRlICJjYy9DQ1RleHR1cmVVcGRhdGVyLmgiCiAjaW5jbHVkZSA8d3RmL0N1cnJl
bnRUaW1lLmg+CkBAIC0xNDcsMTggKzE0OCwxNyBAQCB2b2lkIENDU2luZ2xlVGhyZWFkUHJveHk6
OnNldE5lZWRzQW5pbWF0ZSgpCiB2b2lkIENDU2luZ2xlVGhyZWFkUHJveHk6OmRvQ29tbWl0KCkK
IHsKICAgICBBU1NFUlQoQ0NQcm94eTo6aXNNYWluVGhyZWFkKCkpOwotICAgIEFTU0VSVChtX2N1
cnJlbnRUZXh0dXJlVXBkYXRlcik7CiAKICAgICAvLyBDb21taXQgaW1tZWRpYXRlbHkKICAgICB7
CiAgICAgICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsOwogICAgICAgICBtX2xheWVy
VHJlZUhvc3RJbXBsLT5iZWdpbkNvbW1pdCgpOwogCi0gICAgICAgIHdoaWxlIChtX2N1cnJlbnRU
ZXh0dXJlVXBkYXRlci0+dXBkYXRlKG1fbGF5ZXJUcmVlSG9zdEltcGwtPmNvbnRleHQoKSwgMSkp
IHsgfQorICAgICAgICB3aGlsZSAobV90ZXh0dXJlVXBkYXRlci51cGRhdGUobV9sYXllclRyZWVI
b3N0SW1wbC0+Y29udGV4dCgpLCBtX2xheWVyVHJlZUhvc3RJbXBsLT5jb250ZW50c1RleHR1cmVB
bGxvY2F0b3JCaW5kaW5nKCksIDEpKSB7IH0KICAgICAgICAgbV9sYXllclRyZWVIb3N0LT5iZWdp
bkNvbW1pdE9uSW1wbFRocmVhZChtX2xheWVyVHJlZUhvc3RJbXBsLmdldCgpKTsKICAgICAgICAg
bV9sYXllclRyZWVIb3N0SW1wbC0+c2V0VmlzaWJsZShtX2xheWVyVHJlZUhvc3QtPnZpc2libGUo
KSk7Ci0gICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+ZmluaXNoQ29tbWl0T25JbXBsVGhyZWFkKG1f
bGF5ZXJUcmVlSG9zdEltcGwuZ2V0KCkpOwotCisgICAgICAgIEFTU0VSVCghQ0NQcm94eTo6aGFz
SW1wbFRocmVhZCgpKTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5maW5pc2hDb21taXRPbklt
cGxUaHJlYWQobV9sYXllclRyZWVIb3N0SW1wbC5nZXQoKSwgbV9sYXllclRyZWVIb3N0LT5yb290
TGF5ZXIoKSA/IFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMobV9sYXllclRyZWVI
b3N0LT5yb290TGF5ZXIoKSwgbV9sYXllclRyZWVIb3N0SW1wbC0+cm9vdExheWVyKCkpIDogMCk7
CiAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPmNvbW1pdENvbXBsZXRlKCk7CiAKICNpZiAh
QVNTRVJUX0RJU0FCTEVECkBAIC0xNzEsNyArMTcxLDcgQEAgdm9pZCBDQ1NpbmdsZVRocmVhZFBy
b3h5Ojpkb0NvbW1pdCgpCiAgICAgbV9sYXllclRyZWVIb3N0LT5jb21taXRDb21wbGV0ZSgpOwog
ICAgIG1fbmV4dEZyYW1lSXNOZXdseUNvbW1pdHRlZEZyYW1lID0gdHJ1ZTsKIAotICAgIEFTU0VS
VCghbV9jdXJyZW50VGV4dHVyZVVwZGF0ZXItPmhhc01vcmVVcGRhdGVzKCkpOworICAgIEFTU0VS
VCghbV90ZXh0dXJlVXBkYXRlci5oYXNNb3JlVXBkYXRlcygpKTsKIH0KIAogdm9pZCBDQ1Npbmds
ZVRocmVhZFByb3h5OjpzZXROZWVkc0NvbW1pdCgpCkBAIC0yMDksMTQgKzIwOSwxNCBAQCB2b2lk
IENDU2luZ2xlVGhyZWFkUHJveHk6OnN0b3AoKQogICAgIG1fbGF5ZXJUcmVlSG9zdCA9IDA7CiB9
CiAKLXZvaWQgQ0NTaW5nbGVUaHJlYWRQcm94eTo6dXBkYXRlKExheWVyVGV4dHVyZVVwZGF0ZXI6
OlRleHR1cmUqIHRleHR1cmUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJl
Y3QmIGRlc3RSZWN0KQordm9pZCBDQ1NpbmdsZVRocmVhZFByb3h5Ojp1cGRhdGUoUGFzc093blB0
cjxDQ1RleHR1cmVVcGRhdGVyOjpUZXh0dXJlVXBkYXRlPiBlbnRyeSkKIHsKLSAgICBBU1NFUlQo
bV9jdXJyZW50VGV4dHVyZVVwZGF0ZXIpOworICAgIE93blB0cjxDQ1RleHR1cmVVcGRhdGVyOjpU
ZXh0dXJlVXBkYXRlPiB0ZXh0dXJlVXBkYXRlID0gZW50cnk7CiAKICAgICBpZiAobV9sYXllclRy
ZWVIb3N0SW1wbC0+c2V0dGluZ3MoKS5kZWxheVRleHR1cmVVcGRhdGVzKQotICAgICAgICBtX2N1
cnJlbnRUZXh0dXJlVXBkYXRlci0+YXBwZW5kKHRleHR1cmUsIHNvdXJjZVJlY3QsIGRlc3RSZWN0
KTsKKyAgICAgICAgbV90ZXh0dXJlVXBkYXRlci5hcHBlbmQodGV4dHVyZVVwZGF0ZS5yZWxlYXNl
KCkpOwogICAgIGVsc2UKLSAgICAgICAgdGV4dHVyZS0+dXBkYXRlUmVjdChtX2xheWVyVHJlZUhv
c3RJbXBsLT5jb250ZXh0KCksIG1fY3VycmVudFRleHR1cmVVcGRhdGVyLT5hbGxvY2F0b3JCaW5k
aW5nKCksIHNvdXJjZVJlY3QsIGRlc3RSZWN0KTsKKyAgICAgICAgdGV4dHVyZVVwZGF0ZS0+dXBk
YXRlKG1fbGF5ZXJUcmVlSG9zdEltcGwtPmNvbnRleHQoKSwgbV9sYXllclRyZWVIb3N0SW1wbC0+
Y29udGVudHNUZXh0dXJlQWxsb2NhdG9yQmluZGluZygpKTsKIH0KIAogVGV4dHVyZUFsbG9jYXRv
ciogQ0NTaW5nbGVUaHJlYWRQcm94eTo6Y29udGVudHNUZXh0dXJlQWxsb2NhdG9yKCkKQEAgLTI4
OCw5ICsyODgsNiBAQCB2b2lkIENDU2luZ2xlVGhyZWFkUHJveHk6OmNvbW1pdElmTmVlZGVkKCkK
IHsKICAgICBBU1NFUlQoQ0NQcm94eTo6aXNNYWluVGhyZWFkKCkpOwogCi0gICAgaWYgKCFtX2N1
cnJlbnRUZXh0dXJlVXBkYXRlcikKLSAgICAgICAgbV9jdXJyZW50VGV4dHVyZVVwZGF0ZXIgPSBh
ZG9wdFB0cihuZXcgQ0NUZXh0dXJlVXBkYXRlcihtX2xheWVyVHJlZUhvc3RJbXBsLT5jb250ZW50
c1RleHR1cmVBbGxvY2F0b3JCaW5kaW5nKCkpKTsKLQogICAgIG1fbGF5ZXJUcmVlSG9zdC0+cHJl
cGFyZVRvVXBkYXRlKCk7CiAgICAgbV9sYXllclRyZWVIb3N0LT51cGRhdGVMYXllcnMoKTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NTaW5nbGVUaHJlYWRQcm94eS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5oCmluZGV4IGFmMWE1MzAuLmEzZDgyZjUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDU2luZ2xlVGhyZWFkUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmgKQEAgLTU2LDcgKzU2LDcgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzdGFydCgpOwogICAgIHZpcnR1YWwgdm9pZCBzdG9w
KCk7CiAgICAgdmlydHVhbCBib29sIHBhcnRpYWxUZXh0dXJlVXBkYXRlQ2FwYWJpbGl0eSgpIGNv
bnN0IHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlKExheWVyVGV4dHVy
ZVVwZGF0ZXI6OlRleHR1cmUqLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRS
ZWN0JiBkZXN0UmVjdCk7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZShQYXNzT3duUHRyPENDVGV4
dHVyZVVwZGF0ZXI6OlRleHR1cmVVcGRhdGU+KTsKICAgICB2aXJ0dWFsIFRleHR1cmVBbGxvY2F0
b3IqIGNvbnRlbnRzVGV4dHVyZUFsbG9jYXRvcigpOwogCiAgICAgLy8gQ0NMYXllclRyZWVIb3N0
SW1wbENsaWVudCBpbXBsZW1lbnRhdGlvbgpAQCAtODcsNyArODcsNyBAQCBwcml2YXRlOgogICAg
IGludCBtX3RpbWVzUmVjcmVhdGVTaG91bGRGYWlsOyAvLyBVc2VkIGR1cmluZyB0ZXN0aW5nLgog
ICAgIGJvb2wgbV9uZXh0RnJhbWVJc05ld2x5Q29tbWl0dGVkRnJhbWU7CiAKLSAgICBPd25QdHI8
Q0NUZXh0dXJlVXBkYXRlcj4gbV9jdXJyZW50VGV4dHVyZVVwZGF0ZXI7CisgICAgQ0NUZXh0dXJl
VXBkYXRlciBtX3RleHR1cmVVcGRhdGVyOwogfTsKIAogLy8gRm9yIHVzZSBpbiB0aGUgc2luZ2xl
LXRocmVhZGVkIGNhc2UuIEluIGRlYnVnIGJ1aWxkcywgaXQgcHJldGVuZHMgdGhhdCB0aGUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
VGV4dHVyZVVwZGF0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5jcHAKaW5kZXggYmVlNDQ2Yi4uNTRmOTRhNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NU
ZXh0dXJlVXBkYXRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5jcHAKQEAgLTMwLDMzICszMCwxMzggQEAKICNp
bmNsdWRlICJjYy9DQ1RleHR1cmVVcGRhdGVyLmgiCiAKICNpbmNsdWRlICJjYy9DQ1Byb3h5Lmgi
CisjaW5jbHVkZSAiRXh0ZW5zaW9uczNEQ2hyb21pdW0uaCIKICNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQzRC5oIgogI2luY2x1ZGUgIkxheWVyVGV4dHVyZVVwZGF0ZXIuaCIKICNpbmNsdWRlICJN
YW5hZ2VkVGV4dHVyZS5oIgorI2luY2x1ZGUgIlRyYWNlRXZlbnQuaCIKIAogdXNpbmcgbmFtZXNw
YWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1DQ1RleHR1cmVVcGRhdGVyOjpDQ1Rl
eHR1cmVVcGRhdGVyKFRleHR1cmVBbGxvY2F0b3JCaW5kaW5nKiBhbGxvY2F0b3JCaW5kaW5nKQot
ICAgIDogbV9hbGxvY2F0b3JCaW5kaW5nKGFsbG9jYXRvckJpbmRpbmcpCitDQ1RleHR1cmVVcGRh
dGVyOjpUZXh0dXJlVXBkYXRlOjp+VGV4dHVyZVVwZGF0ZSgpCiB7Ci0gICAgQVNTRVJUKG1fYWxs
b2NhdG9yQmluZGluZyk7CiB9CiAKLUNDVGV4dHVyZVVwZGF0ZXI6On5DQ1RleHR1cmVVcGRhdGVy
KCkKK0NDVGV4dHVyZVVwZGF0ZXI6OlN1YkltYWdlVGV4dHVyZVVwZGF0ZTo6U3ViSW1hZ2VUZXh0
dXJlVXBkYXRlKGJvb2wgdXNlTWFwVGV4U3ViSW1hZ2UpCisgICAgOiBtX3VzZU1hcFRleFN1Yklt
YWdlKHVzZU1hcFRleFN1YkltYWdlKQorICAgICwgbV9mb3JtYXQoMCkKKyAgICAsIG1fdGV4dHVy
ZUlkKDApCit7Cit9CisKK0NDVGV4dHVyZVVwZGF0ZXI6OlN1YkltYWdlVGV4dHVyZVVwZGF0ZTo6
flN1YkltYWdlVGV4dHVyZVVwZGF0ZSgpCit7Cit9CisKK3ZvaWQgQ0NUZXh0dXJlVXBkYXRlcjo6
U3ViSW1hZ2VUZXh0dXJlVXBkYXRlOjpzZXRQaXhlbERhdGEoY29uc3QgdWludDhfdCogcGl4ZWxT
b3VyY2UsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBJbnRSZWN0JiBzb3VyY2VS
ZWN0KQoreworICAgIEFTU0VSVChtX2Zvcm1hdCk7CisgICAgQVNTRVJUKCFtX3JlY3QuaXNFbXB0
eSgpKTsKKyAgICBBU1NFUlQobV9yZWN0LnNpemUoKSA9PSBzb3VyY2VSZWN0LnNpemUoKSk7Cisg
ICAgVFJBQ0VfRVZFTlQoIkNDVGV4dHVyZVVwZGF0ZXI6OlN1YkltYWdlVGV4dHVyZVVwZGF0ZTo6
c2V0UGl4ZWxEYXRhIiwgdGhpcywgMCk7CisKKyAgICB1bnNpZ25lZCBpbnQgY29tcG9uZW50c1Bl
clBpeGVsID0gNDsKKyAgICB1bnNpZ25lZCBpbnQgYnl0ZXNQZXJDb21wb25lbnQgPSAxOworICAg
IGlmICghR3JhcGhpY3NDb250ZXh0M0Q6OmNvbXB1dGVGb3JtYXRBbmRUeXBlUGFyYW1ldGVycyht
X2Zvcm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsICZjb21wb25lbnRzUGVy
UGl4ZWwsICZieXRlc1BlckNvbXBvbmVudCkpCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworCisgICAgdW5zaWduZWQgaW50IGJ5dGVzUGVyUGl4ZWwgPSBieXRlc1BlckNvbXBvbmVudCAq
IGNvbXBvbmVudHNQZXJQaXhlbDsKKworICAgIHNpemVfdCBidWZmZXJTaXplID0gbV9yZWN0Lndp
ZHRoKCkgKiBtX3JlY3QuaGVpZ2h0KCkgKiBieXRlc1BlclBpeGVsOworICAgIG1fcGl4ZWxEYXRh
ID0gYWRvcHRBcnJheVB0cihuZXcgdWludDhfdFtidWZmZXJTaXplXSk7CisKKyAgICAvLyBPZmZz
ZXQgZnJvbSBjb250ZW50LXJlY3QgdG8gc291cmNlLXJlY3QuCisgICAgSW50UG9pbnQgb2Zmc2V0
KHNvdXJjZVJlY3QueCgpIC0gY29udGVudFJlY3QueCgpLCBzb3VyY2VSZWN0LnkoKSAtIGNvbnRl
bnRSZWN0LnkoKSk7CisKKyAgICBpZiAoY29udGVudFJlY3Qud2lkdGgoKSA9PSBzb3VyY2VSZWN0
LndpZHRoKCkgJiYgIW9mZnNldC54KCkpCisgICAgICAgIG1lbWNweSgmbV9waXhlbERhdGFbMF0s
ICZwaXhlbFNvdXJjZVtieXRlc1BlclBpeGVsICogb2Zmc2V0LnkoKSAqIGNvbnRlbnRSZWN0Lndp
ZHRoKCldLCBjb250ZW50UmVjdC53aWR0aCgpICogbV9yZWN0LmhlaWdodCgpICogYnl0ZXNQZXJQ
aXhlbCk7CisgICAgZWxzZSB7CisgICAgICAgIC8vIFN0cmlkZXMgbm90IGVxdWFsLCBzbyBkbyBh
IHJvdy1ieS1yb3cgbWVtY3B5IGZyb20gdGhlCisgICAgICAgIC8vIHBpeGVsU291cmNlIGludG8g
dGhlIHBpeGVsRGVzdAorICAgICAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCBtX3JlY3QuaGVp
Z2h0KCk7ICsrcm93KQorICAgICAgICAgICAgbWVtY3B5KCZtX3BpeGVsRGF0YVttX3JlY3Qud2lk
dGgoKSAqIGJ5dGVzUGVyUGl4ZWwgKiByb3ddLAorICAgICAgICAgICAgICAgICAgIHBpeGVsU291
cmNlICsgYnl0ZXNQZXJQaXhlbCAqIChvZmZzZXQueCgpICsgKG9mZnNldC55KCkgKyByb3cpICog
Y29udGVudFJlY3Qud2lkdGgoKSksCisgICAgICAgICAgICAgICAgICAgbV9yZWN0LndpZHRoKCkg
KiBieXRlc1BlclBpeGVsKTsKKyAgICB9Cit9CisKK3ZvaWQgQ0NUZXh0dXJlVXBkYXRlcjo6U3Vi
SW1hZ2VUZXh0dXJlVXBkYXRlOjp1cGRhdGUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIFRl
eHR1cmVBbGxvY2F0b3JCaW5kaW5nKiBiaW5kaW5nKQoreworICAgIEFTU0VSVChtX2Zvcm1hdCk7
CisgICAgQVNTRVJUKG1fdGV4dHVyZUlkKTsKKyAgICBBU1NFUlQoIW1fcmVjdC5pc0VtcHR5KCkp
OworICAgIEFTU0VSVChtX3BpeGVsRGF0YSk7CisgICAgVFJBQ0VfRVZFTlQoIkNDVGV4dHVyZVVw
ZGF0ZXI6OlN1YkltYWdlVGV4dHVyZVVwZGF0ZTo6dXBkYXRlIiwgdGhpcywgMCk7CisKKyAgICB1
bnNpZ25lZCB0ZXh0dXJlID0gYmluZGluZy0+dGV4dHVyZUlkKG1fdGV4dHVyZUlkKTsKKyAgICBp
ZiAoIXRleHR1cmUpCisgICAgICAgIHRleHR1cmUgPSBiaW5kaW5nLT5jcmVhdGVUZXh0dXJlKG1f
dGV4dHVyZUlkLCBtX3JlY3Quc2l6ZSgpLCBtX2Zvcm1hdCk7CisKKyAgICBjb250ZXh0LT5iaW5k
VGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgdGV4dHVyZSk7CisKKyAgICBF
eHRlbnNpb25zM0RDaHJvbWl1bSogZXh0ZW5zaW9ucyA9IHN0YXRpY19jYXN0PEV4dGVuc2lvbnMz
RENocm9taXVtKj4oY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpKTsKKyAgICB1aW50OF90KiBwaXhl
bERlc3QgPSAwOworICAgIC8vIFVwbG9hZCB0aWxlIGRhdGEgdmlhIGEgbWFwcGVkIHRyYW5zZmVy
IGJ1ZmZlcgorICAgIGlmIChtX3VzZU1hcFRleFN1YkltYWdlKQorICAgICAgICBwaXhlbERlc3Qg
PSBzdGF0aWNfY2FzdDx1aW50OF90Kj4oZXh0ZW5zaW9ucy0+bWFwVGV4U3ViSW1hZ2UyRENIUk9N
SVVNKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCBtX3JlY3QueCgpLCBtX3JlY3Qu
eSgpLCBtX3JlY3Qud2lkdGgoKSwgbV9yZWN0LmhlaWdodCgpLCBtX2Zvcm1hdCwgR3JhcGhpY3ND
b250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIEV4dGVuc2lvbnMzRENocm9taXVtOjpXUklURV9PTkxZ
KSk7CisKKyAgICBpZiAoIXBpeGVsRGVzdCkgeworICAgICAgICBjb250ZXh0LT50ZXhTdWJJbWFn
ZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCBtX3JlY3QueCgpLCBtX3JlY3Qu
eSgpLCBtX3JlY3Qud2lkdGgoKSwgbV9yZWN0LmhlaWdodCgpLCBtX2Zvcm1hdCwgR3JhcGhpY3ND
b250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIG1fcGl4ZWxEYXRhLmdldCgpKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIG1lbWNweShwaXhlbERlc3QsIG1fcGl4ZWxEYXRhLmdldCgpLCBt
X3JlY3Qud2lkdGgoKSAqIG1fcmVjdC5oZWlnaHQoKSAqIDQpOworICAgIGV4dGVuc2lvbnMtPnVu
bWFwVGV4U3ViSW1hZ2UyRENIUk9NSVVNKHBpeGVsRGVzdCk7Cit9CisKK0NDVGV4dHVyZVVwZGF0
ZXI6OkNvcHlUZXh0dXJlVXBkYXRlOjpDb3B5VGV4dHVyZVVwZGF0ZSgpCisgIDogbV9mb3JtYXQo
MCkKKyAgLCBtX3RleHR1cmVJZCgwKQoreworfQorCitDQ1RleHR1cmVVcGRhdGVyOjpDb3B5VGV4
dHVyZVVwZGF0ZTo6fkNvcHlUZXh0dXJlVXBkYXRlKCkKK3sKK30KKwordm9pZCBDQ1RleHR1cmVV
cGRhdGVyOjpDb3B5VGV4dHVyZVVwZGF0ZTo6dXBkYXRlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250
ZXh0LCBUZXh0dXJlQWxsb2NhdG9yQmluZGluZyogYmluZGluZykKIHsKKyAgICBBU1NFUlQobV9m
b3JtYXQpOworICAgIEFTU0VSVChtX3RleHR1cmVJZCk7CisgICAgQVNTRVJUKCFtX3NpemUuaXNF
bXB0eSgpKTsKKworICAgIHVuc2lnbmVkIHRleHR1cmUgPSBiaW5kaW5nLT50ZXh0dXJlSWQobV90
ZXh0dXJlSWQpOworICAgIGlmICghdGV4dHVyZSkKKyAgICAgICAgdGV4dHVyZSA9IGJpbmRpbmct
PmNyZWF0ZVRleHR1cmUobV90ZXh0dXJlSWQsIG1fc2l6ZSwgbV9mb3JtYXQpOworCisgICAgQVNT
RVJUKG1fYmFja1RleHR1cmVJZCk7CisgICAgQVNTRVJUKG1fZnJhbWVidWZmZXIpOworICAgIGNv
bnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1f
ZnJhbWVidWZmZXIpOworICAgIGNvbnRleHQtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNz
Q29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1F
TlQwLCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV9iYWNrVGV4dHVyZUlkLCAwKTsK
KyAgICAvLyBGSVhNRTogVGhlIGNvcHkgb3BlcmF0aW9uIHdpbGwgZmFpbCBpZiB0aGUgbV9iYWNr
VGV4dHVyZSBpcyBhbGxvY2F0ZWQgYXMgQkdSQSBzaW5jZSBnbENvcHlUZXgoU3ViKUltYWdlMkQg
ZG9lc24ndAorICAgIC8vICAgICAgICBzdXBwb3J0IHRoZSBCR1JBIGZvcm1hdC4gU2VlIGJ1ZyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzUxNDIKKworICAgIGNvbnRl
eHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCB0ZXh0dXJlKTsK
KyAgICBjb250ZXh0LT5jb3B5VGV4U3ViSW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV8yRCwgMCwgMCwgMCwgMCwgMCwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSk7Cisg
ICAgY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAp
OworICAgIGNvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVC
VUZGRVIsIDApOworICAgIGNvbnRleHQtPmZsdXNoKCk7CiB9CiAKLXZvaWQgQ0NUZXh0dXJlVXBk
YXRlcjo6YXBwZW5kKExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmUqIHRleHR1cmUsIGNvbnN0
IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KQorQ0NUZXh0dXJl
VXBkYXRlcjo6Q0NUZXh0dXJlVXBkYXRlcigpCiB7Ci0gICAgQVNTRVJUKHRleHR1cmUpOworfQog
Ci0gICAgVXBkYXRlRW50cnkgZW50cnk7Ci0gICAgZW50cnkubV90ZXh0dXJlID0gdGV4dHVyZTsK
LSAgICBlbnRyeS5tX3NvdXJjZVJlY3QgPSBzb3VyY2VSZWN0OwotICAgIGVudHJ5Lm1fZGVzdFJl
Y3QgPSBkZXN0UmVjdDsKLSAgICBtX2VudHJpZXMuYXBwZW5kKGVudHJ5KTsKK0NDVGV4dHVyZVVw
ZGF0ZXI6On5DQ1RleHR1cmVVcGRhdGVyKCkKK3sKK30KKwordm9pZCBDQ1RleHR1cmVVcGRhdGVy
OjphcHBlbmQoUGFzc093blB0cjxUZXh0dXJlVXBkYXRlPiB1cGRhdGUpCit7CisgICAgQVNTRVJU
KHVwZGF0ZSk7CisgICAgbV9lbnRyaWVzLmFwcGVuZCh1cGRhdGUpOwogfQogCiBib29sIENDVGV4
dHVyZVVwZGF0ZXI6Omhhc01vcmVVcGRhdGVzKCkgY29uc3QKQEAgLTY0LDE0ICsxNjksMTMgQEAg
Ym9vbCBDQ1RleHR1cmVVcGRhdGVyOjpoYXNNb3JlVXBkYXRlcygpIGNvbnN0CiAgICAgcmV0dXJu
IG1fZW50cmllcy5zaXplKCk7CiB9CiAKLWJvb2wgQ0NUZXh0dXJlVXBkYXRlcjo6dXBkYXRlKEdy
YXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBzaXplX3QgY291bnQpCitib29sIENDVGV4dHVyZVVw
ZGF0ZXI6OnVwZGF0ZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgVGV4dHVyZUFsbG9jYXRv
ckJpbmRpbmcqIGJpbmRpbmcsIHNpemVfdCBjb3VudCkKIHsKICAgICB3aGlsZSAoY291bnQtLSkg
ewogICAgICAgICBpZiAoIW1fZW50cmllcy5zaXplKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICAgICAgVXBkYXRlRW50cnkmIGVudHJ5ID0gbV9lbnRyaWVzLmxhc3QoKTsKLSAg
ICAgICAgZW50cnkubV90ZXh0dXJlLT51cGRhdGVSZWN0KGNvbnRleHQsIG1fYWxsb2NhdG9yQmlu
ZGluZywgZW50cnkubV9zb3VyY2VSZWN0LCBlbnRyeS5tX2Rlc3RSZWN0KTsKKyAgICAgICAgbV9l
bnRyaWVzLmxhc3QoKS0+dXBkYXRlKGNvbnRleHQsIGJpbmRpbmcpOwogICAgICAgICBtX2VudHJp
ZXMucmVtb3ZlTGFzdCgpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5oCmlu
ZGV4IDUwMDZhMDAuLmNmOWEwMTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmgKQEAg
LTI3LDcgKzI3LDEwIEBACiAjZGVmaW5lIENDVGV4dHVyZVVwZGF0ZXJfaAogCiAjaW5jbHVkZSAi
SW50UmVjdC5oIgotI2luY2x1ZGUgIkxheWVyVGV4dHVyZVVwZGF0ZXIuaCIKKyNpbmNsdWRlIDx3
dGYvT3duQXJyYXlQdHIuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L1Bhc3NPd25BcnJheVB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zNywyOSArNDAsNzgg
QEAgY2xhc3MgVGV4dHVyZUFsbG9jYXRvckJpbmRpbmc7CiAKIGNsYXNzIENDVGV4dHVyZVVwZGF0
ZXIgewogcHVibGljOgotICAgIENDVGV4dHVyZVVwZGF0ZXIoVGV4dHVyZUFsbG9jYXRvckJpbmRp
bmcqKTsKLSAgICB+Q0NUZXh0dXJlVXBkYXRlcigpOworICAgIGNsYXNzIFRleHR1cmVVcGRhdGUg
eworICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCB+VGV4dHVyZVVwZGF0ZSgpOwogCi0gICAg
dm9pZCBhcHBlbmQoTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZSosIGNvbnN0IEludFJlY3Qm
IHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KTsKKyAgICAgICAgdmlydHVhbCB2
b2lkIHVwZGF0ZShHcmFwaGljc0NvbnRleHQzRCosIFRleHR1cmVBbGxvY2F0b3JCaW5kaW5nKikg
PSAwOworICAgIH07CisKKyAgICBjbGFzcyBTdWJJbWFnZVRleHR1cmVVcGRhdGUgOiBwdWJsaWMg
VGV4dHVyZVVwZGF0ZSB7CisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIH5TdWJJbWFnZVRl
eHR1cmVVcGRhdGUoKTsKKworICAgICAgICBzdGF0aWMgUGFzc093blB0cjxTdWJJbWFnZVRleHR1
cmVVcGRhdGU+IGNyZWF0ZShib29sIHVzZU1hcFRleFN1YkltYWdlKSB7IHJldHVybiBhZG9wdFB0
cihuZXcgU3ViSW1hZ2VUZXh0dXJlVXBkYXRlKHVzZU1hcFRleFN1YkltYWdlKSk7IH0KKworICAg
ICAgICB2b2lkIHNldEZvcm1hdCh1bnNpZ25lZCBmb3JtYXQpIHsgbV9mb3JtYXQgPSBmb3JtYXQ7
IH0KKyAgICAgICAgdm9pZCBzZXRUZXh0dXJlSWQodW5zaWduZWQgdGV4dHVyZUlkKSB7IG1fdGV4
dHVyZUlkID0gdGV4dHVyZUlkOyB9CisgICAgICAgIHZvaWQgc2V0UmVjdChJbnRSZWN0JiByZWN0
KSB7IG1fcmVjdCA9IHJlY3Q7IH0KKyAgICAgICAgdm9pZCBzZXRQaXhlbERhdGEoUGFzc093bkFy
cmF5UHRyPHVpbnQ4X3Q+IHBpeGVsRGF0YSkgeyBtX3BpeGVsRGF0YSA9IHBpeGVsRGF0YTsgfQor
ICAgICAgICAvLyBtX2Zvcm1hdCBhbmQgbV9yZWN0IG11c3QgYmUgc2V0IGJlZm9yZSB0aGlzIHZl
cnNpb24gb2Ygc2V0UGl4ZWxEYXRhIGlzIHVzZWQuCisgICAgICAgIHZvaWQgc2V0UGl4ZWxEYXRh
KGNvbnN0IHVpbnQ4X3QqIHBpeGVsU291cmNlLCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwg
Y29uc3QgSW50UmVjdCYgc291cmNlUmVjdCk7CisKKyAgICAgICAgdmlydHVhbCB2b2lkIHVwZGF0
ZShHcmFwaGljc0NvbnRleHQzRCosIFRleHR1cmVBbGxvY2F0b3JCaW5kaW5nKik7CisKKyAgICBw
cm90ZWN0ZWQ6CisgICAgICAgIGV4cGxpY2l0IFN1YkltYWdlVGV4dHVyZVVwZGF0ZShib29sKTsK
KworICAgIHByaXZhdGU6CisgICAgICAgIGJvb2wgbV91c2VNYXBUZXhTdWJJbWFnZTsKKyAgICAg
ICAgdW5zaWduZWQgbV9mb3JtYXQ7CisgICAgICAgIHVuc2lnbmVkIG1fdGV4dHVyZUlkOworICAg
ICAgICBJbnRSZWN0IG1fcmVjdDsKKyAgICAgICAgT3duQXJyYXlQdHI8dWludDhfdD4gbV9waXhl
bERhdGE7CisgICAgfTsKKworICAgIGNsYXNzIENvcHlUZXh0dXJlVXBkYXRlIDogcHVibGljIEND
VGV4dHVyZVVwZGF0ZXI6OlRleHR1cmVVcGRhdGUgeworICAgIHB1YmxpYzoKKyAgICAgICAgdmly
dHVhbCB+Q29weVRleHR1cmVVcGRhdGUoKTsKKworICAgICAgICBzdGF0aWMgUGFzc093blB0cjxD
b3B5VGV4dHVyZVVwZGF0ZT4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRQdHIobmV3IENvcHlUZXh0
dXJlVXBkYXRlKCkpOyB9CisKKyAgICAgICAgdm9pZCBzZXRGb3JtYXQodW5zaWduZWQgZm9ybWF0
KSB7IG1fZm9ybWF0ID0gZm9ybWF0OyB9CisgICAgICAgIHZvaWQgc2V0VGV4dHVyZUlkKHVuc2ln
bmVkIHRleHR1cmVJZCkgeyBtX3RleHR1cmVJZCA9IHRleHR1cmVJZDsgfQorICAgICAgICB2b2lk
IHNldFNpemUoSW50U2l6ZSYgc2l6ZSkgeyBtX3NpemUgPSBzaXplOyB9CisgICAgICAgIHZvaWQg
c2V0QmFja1RleHR1cmVJZCh1bnNpZ25lZCBiYWNrVGV4dHVyZUlkKSB7IG1fYmFja1RleHR1cmVJ
ZCA9IGJhY2tUZXh0dXJlSWQ7IH0KKyAgICAgICAgdm9pZCBzZXRGcmFtZWJ1ZmZlcih1bnNpZ25l
ZCBmcmFtZWJ1ZmZlcikgeyBtX2ZyYW1lYnVmZmVyID0gZnJhbWVidWZmZXI7IH0KKworICAgICAg
ICB2aXJ0dWFsIHZvaWQgdXBkYXRlKEdyYXBoaWNzQ29udGV4dDNEKiwgVGV4dHVyZUFsbG9jYXRv
ckJpbmRpbmcqKTsKKworICAgIHByb3RlY3RlZDoKKyAgICAgICAgZXhwbGljaXQgQ29weVRleHR1
cmVVcGRhdGUoKTsKKworICAgIHByaXZhdGU6CisgICAgICAgIHVuc2lnbmVkIG1fZm9ybWF0Owor
ICAgICAgICB1bnNpZ25lZCBtX3RleHR1cmVJZDsKKyAgICAgICAgSW50U2l6ZSBtX3NpemU7Cisg
ICAgICAgIHVuc2lnbmVkIG1fYmFja1RleHR1cmVJZDsKKyAgICAgICAgdW5zaWduZWQgbV9mcmFt
ZWJ1ZmZlcjsKKyAgICB9OworCisgICAgQ0NUZXh0dXJlVXBkYXRlcigpOworICAgIHZpcnR1YWwg
fkNDVGV4dHVyZVVwZGF0ZXIoKTsKKworICAgIHZvaWQgYXBwZW5kKFBhc3NPd25QdHI8VGV4dHVy
ZVVwZGF0ZT4pOwogCiAgICAgYm9vbCBoYXNNb3JlVXBkYXRlcygpIGNvbnN0OwogCiAgICAgLy8g
VXBkYXRlIHNvbWUgdGV4dHVyZXMuIFJldHVybnMgdHJ1ZSBpZiBtb3JlIHRleHR1cmVzIGxlZnQg
dG8gcHJvY2Vzcy4KLSAgICBib29sIHVwZGF0ZShHcmFwaGljc0NvbnRleHQzRCosIHNpemVfdCBj
b3VudCk7CisgICAgYm9vbCB1cGRhdGUoR3JhcGhpY3NDb250ZXh0M0QqLCBUZXh0dXJlQWxsb2Nh
dG9yQmluZGluZyosIHNpemVfdCBjb3VudCk7CiAKICAgICB2b2lkIGNsZWFyKCk7CiAKLSAgICBU
ZXh0dXJlQWxsb2NhdG9yQmluZGluZyogYWxsb2NhdG9yQmluZGluZygpIHsgcmV0dXJuIG1fYWxs
b2NhdG9yQmluZGluZzsgfQotCiBwcml2YXRlOgotICAgIHN0cnVjdCBVcGRhdGVFbnRyeSB7Ci0g
ICAgICAgIExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmUqIG1fdGV4dHVyZTsKLSAgICAgICAg
SW50UmVjdCBtX3NvdXJjZVJlY3Q7Ci0gICAgICAgIEludFJlY3QgbV9kZXN0UmVjdDsKLSAgICB9
OwotCi0gICAgVGV4dHVyZUFsbG9jYXRvckJpbmRpbmcqIG1fYWxsb2NhdG9yQmluZGluZzsKLSAg
ICBWZWN0b3I8VXBkYXRlRW50cnk+IG1fZW50cmllczsKKyAgICBWZWN0b3I8T3duUHRyPFRleHR1
cmVVcGRhdGU+ID4gbV9lbnRyaWVzOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNw
cAppbmRleCBhYTY5MDExLi4wYWFkNWVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcApA
QCAtMzAsOSArMzAsMTEgQEAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1
ZGUgIlRyYWNlRXZlbnQuaCIKICNpbmNsdWRlICJUcmFja2luZ1RleHR1cmVBbGxvY2F0b3IuaCIK
KyNpbmNsdWRlICJUcmVlU3luY2hyb25pemVyLmgiCiAjaW5jbHVkZSAiY2MvQ0NEZWxheUJhc2Vk
VGltZVNvdXJjZS5oIgogI2luY2x1ZGUgImNjL0NDRnJhbWVSYXRlQ29udHJvbGxlci5oIgogI2lu
Y2x1ZGUgImNjL0NDSW5wdXRIYW5kbGVyLmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllckltcGwuaCIK
ICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3QuaCIKICNpbmNsdWRlICJjYy9DQ1NjaGVkdWxl
ci5oIgogI2luY2x1ZGUgImNjL0NDU2NvcGVkVGhyZWFkUHJveHkuaCIKQEAgLTQwLDYgKzQyLDcg
QEAKICNpbmNsdWRlICJjYy9DQ1RocmVhZFRhc2suaCIKICNpbmNsdWRlIDx3dGYvQ3VycmVudFRp
bWUuaD4KICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIu
aD4KIAogdXNpbmcgbmFtZXNwYWNlIFdURjsKIApAQCAtNjcsNyArNzAsNiBAQCBDQ1RocmVhZFBy
b3h5OjpDQ1RocmVhZFByb3h5KENDTGF5ZXJUcmVlSG9zdCogbGF5ZXJUcmVlSG9zdCkKICAgICAs
IG1fbWFpblRocmVhZFByb3h5KENDU2NvcGVkVGhyZWFkUHJveHk6OmNyZWF0ZShDQ1Byb3h5Ojpt
YWluVGhyZWFkKCkpKQogICAgICwgbV9yZWFkYmFja1JlcXVlc3RPbkltcGxUaHJlYWQoMCkKICAg
ICAsIG1fZmluaXNoQWxsUmVuZGVyaW5nQ29tcGxldGlvbkV2ZW50T25JbXBsVGhyZWFkKDApCi0g
ICAgLCBtX2NvbW1pdENvbXBsZXRpb25FdmVudE9uSW1wbFRocmVhZCgwKQogICAgICwgbV9uZXh0
RnJhbWVJc05ld2x5Q29tbWl0dGVkRnJhbWVPbkltcGxUaHJlYWQoZmFsc2UpCiAgICAgLCBtX2Rl
ZmVycmVkVGV4dHVyZUFsbG9jYXRvcihEZWZlcnJlZFRleHR1cmVBbGxvY2F0b3I6OmNyZWF0ZSgp
KQogewpAQCAtMjk3LDE4ICsyOTksMTMgQEAgdm9pZCBDQ1RocmVhZFByb3h5OjpzdG9wKCkKICAg
ICBtX3N0YXJ0ZWQgPSBmYWxzZTsKIH0KIAotdm9pZCBDQ1RocmVhZFByb3h5Ojp1cGRhdGUoTGF5
ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZSogdGV4dHVyZSwgY29uc3QgSW50UmVjdCYgc291cmNl
UmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpCit2b2lkIENDVGhyZWFkUHJveHk6OnVwZGF0
ZShQYXNzT3duUHRyPENDVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmVVcGRhdGU+IGVudHJ5KQogewog
ICAgIFRSQUNFX0VWRU5UKCJDQ1RocmVhZFByb3h5Ojp1cGRhdGUiLCB0aGlzLCAwKTsKICAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIEFTU0VSVChtX3N0YXJ0ZWQpOwogCi0gICAgT3du
UHRyPFVwZGF0ZUVudHJ5PiBlbnRyeSA9IGFkb3B0UHRyKG5ldyBVcGRhdGVFbnRyeSk7Ci0gICAg
ZW50cnktPm1fdGV4dHVyZSA9IHRleHR1cmU7Ci0gICAgZW50cnktPm1fc291cmNlUmVjdCA9IHNv
dXJjZVJlY3Q7Ci0gICAgZW50cnktPm1fZGVzdFJlY3QgPSBkZXN0UmVjdDsKLQotICAgIENDUHJv
eHk6OmltcGxUaHJlYWQoKS0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ1Ro
cmVhZFByb3h5Ojp1cGRhdGVUZXh0dXJlT25JbXBsVGhyZWFkLCBlbnRyeS5yZWxlYXNlKCkpKTsK
KyAgICBDQ1Byb3h5OjppbXBsVGhyZWFkKCktPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0
aGlzLCAmQ0NUaHJlYWRQcm94eTo6dXBkYXRlVGV4dHVyZU9uSW1wbFRocmVhZCwgZW50cnkpKTsK
IH0KIAogdm9pZCBDQ1RocmVhZFByb3h5OjpmaW5pc2hBbGxSZW5kZXJpbmdPbkltcGxUaHJlYWQo
Q0NDb21wbGV0aW9uRXZlbnQqIGNvbXBsZXRpb24pCkBAIC00MTAsMzMgKzQwNywzNiBAQCB2b2lk
IENDVGhyZWFkUHJveHk6OmJlZ2luRnJhbWVBbmRDb21taXQoaW50IHNlcXVlbmNlTnVtYmVyLCBk
b3VibGUgZnJhbWVCZWdpblRpbQogICAgIE93blB0cjxWZWN0b3I8dW5zaWduZWQ+ID4gZGVsZXRl
ZFRleHR1cmVzID0gYWRvcHRQdHIobmV3IFZlY3Rvcjx1bnNpZ25lZD4obV9kZWZlcnJlZFRleHR1
cmVBbGxvY2F0b3ItPmRlbGV0ZWRUZXh0dXJlcygpKSk7CiAgICAgbV9kZWZlcnJlZFRleHR1cmVB
bGxvY2F0b3ItPmRlbGV0ZWRUZXh0dXJlcygpLmNsZWFyKCk7CiAKKyAgICBBU1NFUlQoQ0NQcm94
eTo6aGFzSW1wbFRocmVhZCgpKTsKKyAgICAvLyBDcmVhdGUgbmV3IGltcGwgdHJlZS4KKyAgICBS
ZWZQdHI8Q0NMYXllckRhdGE+IHJvb3RMYXllcjsKKyAgICBpZiAobV9sYXllclRyZWVIb3N0LT5y
b290TGF5ZXIoKSkKKyAgICAgICAgcm9vdExheWVyID0gVHJlZVN5bmNocm9uaXplcjo6c3luY2hy
b25pemVUcmVlcyhtX2xheWVyVHJlZUhvc3QtPnJvb3RMYXllcigpKTsKKworICAgIEFTU0VSVChy
b290TGF5ZXItPmhhc09uZVJlZigpKTsKKworICAgIC8vIExlYWsgdGhlIHJvb3QgbGF5ZXIgcG9p
bnRlciBzbyB3ZSBjYW4gdHJhbnNmZXIgb3duZXJzaGlwIG9mIGl0IHRvIHRoZSBvdGhlciBzaWRl
Li4uCisgICAgQ0NMYXllckRhdGEqIHJvb3RMYXllclB0ciA9IHJvb3RMYXllci5yZWxlYXNlKCku
bGVha1JlZigpOworICAgIEFTU0VSVChyb290TGF5ZXJQdHItPmhhc09uZVJlZigpKTsKKwogICAg
IC8vIE5vdGlmeSB0aGUgaW1wbCB0aHJlYWQgdGhhdCB0aGUgYmVnaW5GcmFtZSBoYXMgY29tcGxl
dGVkLiBUaGlzIHdpbGwKLSAgICAvLyBiZWdpbiB0aGUgY29tbWl0IHByb2Nlc3MsIHdoaWNoIGlz
IGJsb2NraW5nIGZyb20gdGhlIG1haW4gdGhyZWFkJ3MKLSAgICAvLyBwb2ludCBvZiB2aWV3LCBi
dXQgYXN5bmNocm9ub3VzbHkgcGVyZm9ybWVkIG9uIHRoZSBpbXBsIHRocmVhZCwKLSAgICAvLyBj
b29yZGluYXRlZCBieSB0aGUgQ0NTY2hlZHVsZXIuCi0gICAgewotICAgICAgICBUUkFDRV9FVkVO
VCgiY29tbWl0IiwgdGhpcywgMCk7Ci0gICAgICAgIENDQ29tcGxldGlvbkV2ZW50IGNvbXBsZXRp
b247Ci0gICAgICAgIENDUHJveHk6OmltcGxUaHJlYWQoKS0+cG9zdFRhc2soY3JlYXRlQ0NUaHJl
YWRUYXNrKHRoaXMsICZDQ1RocmVhZFByb3h5OjpiZWdpbkZyYW1lQ29tcGxldGVPbkltcGxUaHJl
YWQsIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3MoJmNvbXBsZXRpb24pLCBkZWxldGVkVGV4dHVyZXMu
cmVsZWFzZSgpKSk7Ci0gICAgICAgIGNvbXBsZXRpb24ud2FpdCgpOwotICAgIH0KKyAgICAvLyBi
ZWdpbiB0aGUgY29tbWl0IHByb2Nlc3MgdGhhdCBpcyBhc3luY2hyb25vdXNseSBwZXJmb3JtZWQg
b24gdGhlIGltcGwKKyAgICAvLyB0aHJlYWQsIGNvb3JkaW5hdGVkIGJ5IHRoZSBDQ1NjaGVkdWxl
ci4KKyAgICBDQ1Byb3h5OjppbXBsVGhyZWFkKCktPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFz
ayh0aGlzLCAmQ0NUaHJlYWRQcm94eTo6YmVnaW5GcmFtZUNvbXBsZXRlT25JbXBsVGhyZWFkLCBB
bGxvd0Nyb3NzVGhyZWFkQWNjZXNzKHJvb3RMYXllclB0ciksIGRlbGV0ZWRUZXh0dXJlcy5yZWxl
YXNlKCkpKTsKIAogICAgIG1fbGF5ZXJUcmVlSG9zdC0+Y29tbWl0Q29tcGxldGUoKTsKIAogICAg
IEFTU0VSVChtX2xhc3RFeGVjdXRlZEJlZ2luRnJhbWVBbmRDb21taXRTZXF1ZW5jZU51bWJlciA9
PSBzZXF1ZW5jZU51bWJlcik7CiB9CiAKLXZvaWQgQ0NUaHJlYWRQcm94eTo6dXBkYXRlVGV4dHVy
ZU9uSW1wbFRocmVhZChQYXNzT3duUHRyPFVwZGF0ZUVudHJ5PiBlbnRyeSkKLXsKLSAgICBBU1NF
UlQoIW1fY29tbWl0Q29tcGxldGlvbkV2ZW50T25JbXBsVGhyZWFkKTsKK3ZvaWQgQ0NUaHJlYWRQ
cm94eTo6dXBkYXRlVGV4dHVyZU9uSW1wbFRocmVhZChQYXNzT3duUHRyPENDVGV4dHVyZVVwZGF0
ZXI6OlRleHR1cmVVcGRhdGU+IGVudHJ5KSB7CisgICAgT3duUHRyPENDVGV4dHVyZVVwZGF0ZXI6
OlRleHR1cmVVcGRhdGU+IHRleHR1cmVVcGRhdGUgPSBlbnRyeTsKKyAgICBBU1NFUlQoIW1fY29t
bWl0TmV3Um9vdExheWVyT25JbXBsVGhyZWFkKTsKICAgICBBU1NFUlQoaXNJbXBsVGhyZWFkKCkp
OwogICAgIGlmICghbV9sYXllclRyZWVIb3N0SW1wbCkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
aWYgKCFtX2N1cnJlbnRUZXh0dXJlVXBkYXRlck9uSW1wbFRocmVhZCkKLSAgICAgICAgbV9jdXJy
ZW50VGV4dHVyZVVwZGF0ZXJPbkltcGxUaHJlYWQgPSBhZG9wdFB0cihuZXcgQ0NUZXh0dXJlVXBk
YXRlcihtX2xheWVyVHJlZUhvc3RJbXBsLT5jb250ZW50c1RleHR1cmVBbGxvY2F0b3JCaW5kaW5n
KCkpKTsKLQotICAgIG1fY3VycmVudFRleHR1cmVVcGRhdGVyT25JbXBsVGhyZWFkLT5hcHBlbmQo
ZW50cnktPm1fdGV4dHVyZSwgZW50cnktPm1fc291cmNlUmVjdCwgZW50cnktPm1fZGVzdFJlY3Qp
OworICAgIG1fdGV4dHVyZVVwZGF0ZXJPbkltcGxUaHJlYWQuYXBwZW5kKHRleHR1cmVVcGRhdGUu
cmVsZWFzZSgpKTsKIH0KIAogVGV4dHVyZUFsbG9jYXRvciogQ0NUaHJlYWRQcm94eTo6Y29udGVu
dHNUZXh0dXJlQWxsb2NhdG9yKCkKQEAgLTQ0NCwxOCArNDQ0LDIwIEBAIFRleHR1cmVBbGxvY2F0
b3IqIENDVGhyZWFkUHJveHk6OmNvbnRlbnRzVGV4dHVyZUFsbG9jYXRvcigpCiAgICAgcmV0dXJu
IG1fZGVmZXJyZWRUZXh0dXJlQWxsb2NhdG9yLmdldCgpOwogfQogCi12b2lkIENDVGhyZWFkUHJv
eHk6OmJlZ2luRnJhbWVDb21wbGV0ZU9uSW1wbFRocmVhZChDQ0NvbXBsZXRpb25FdmVudCogY29t
cGxldGlvbiwgUGFzc093blB0cjxWZWN0b3I8dW5zaWduZWQ+ID4gZGVsZXRlZFRleHR1cmVzKQor
dm9pZCBDQ1RocmVhZFByb3h5OjpiZWdpbkZyYW1lQ29tcGxldGVPbkltcGxUaHJlYWQoQ0NMYXll
ckRhdGEqIHJvb3RMYXllclB0ciwgUGFzc093blB0cjxWZWN0b3I8dW5zaWduZWQ+ID4gZGVsZXRl
ZFRleHR1cmVzKQogewogICAgIFRSQUNFX0VWRU5UKCJDQ1RocmVhZFByb3h5OjpiZWdpbkZyYW1l
Q29tcGxldGVPbkltcGxUaHJlYWQiLCB0aGlzLCAwKTsKLSAgICBBU1NFUlQoIW1fY29tbWl0Q29t
cGxldGlvbkV2ZW50T25JbXBsVGhyZWFkKTsKKyAgICBBU1NFUlQoIW1fY29tbWl0TmV3Um9vdExh
eWVyT25JbXBsVGhyZWFkKTsKICAgICBBU1NFUlQoaXNJbXBsVGhyZWFkKCkpOwogICAgIEFTU0VS
VChtX3NjaGVkdWxlck9uSW1wbFRocmVhZCk7Ci0gICAgaWYgKCFtX2xheWVyVHJlZUhvc3RJbXBs
KSB7Ci0gICAgICAgIGNvbXBsZXRpb24tPnNpZ25hbCgpOworICAgIFJlZlB0cjxDQ0xheWVyRGF0
YT4gcm9vdExheWVyOworICAgIGlmIChyb290TGF5ZXJQdHIpCisgICAgICAgIHJvb3RMYXllciA9
IGFkb3B0UmVmKHJvb3RMYXllclB0cik7CisKKyAgICBpZiAoIW1fbGF5ZXJUcmVlSG9zdEltcGwp
CiAgICAgICAgIHJldHVybjsKLSAgICB9CiAKLSAgICBtX2NvbW1pdENvbXBsZXRpb25FdmVudE9u
SW1wbFRocmVhZCA9IGNvbXBsZXRpb247CisgICAgbV9jb21taXROZXdSb290TGF5ZXJPbkltcGxU
aHJlYWQgPSByb290TGF5ZXI7CiAgICAgbV9jb21taXREZWxldGVkVGV4dHVyZXNPbkltcGxUaHJl
YWQgPSBkZWxldGVkVGV4dHVyZXM7CiAKICAgICBtX3NjaGVkdWxlck9uSW1wbFRocmVhZC0+YmVn
aW5GcmFtZUNvbXBsZXRlKCk7CkBAIC00NjMsOSArNDY1LDcgQEAgdm9pZCBDQ1RocmVhZFByb3h5
OjpiZWdpbkZyYW1lQ29tcGxldGVPbkltcGxUaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqIGNvbXBs
ZXRpb24KIAogYm9vbCBDQ1RocmVhZFByb3h5OjpoYXNNb3JlUmVzb3VyY2VVcGRhdGVzKCkgY29u
c3QKIHsKLSAgICBpZiAoIW1fY3VycmVudFRleHR1cmVVcGRhdGVyT25JbXBsVGhyZWFkKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIG1fY3VycmVudFRleHR1cmVVcGRhdGVyT25J
bXBsVGhyZWFkLT5oYXNNb3JlVXBkYXRlcygpOworICAgIHJldHVybiBtX3RleHR1cmVVcGRhdGVy
T25JbXBsVGhyZWFkLmhhc01vcmVVcGRhdGVzKCk7CiB9CiAKIGJvb2wgQ0NUaHJlYWRQcm94eTo6
Y2FuRHJhdygpCkBAIC00NzksMjUgKzQ3OSwyMSBAQCBib29sIENDVGhyZWFkUHJveHk6OmNhbkRy
YXcoKQogdm9pZCBDQ1RocmVhZFByb3h5OjpzY2hlZHVsZWRBY3Rpb25VcGRhdGVNb3JlUmVzb3Vy
Y2VzKCkKIHsKICAgICBUUkFDRV9FVkVOVCgiQ0NUaHJlYWRQcm94eTo6c2NoZWR1bGVkQWN0aW9u
VXBkYXRlTW9yZVJlc291cmNlcyIsIHRoaXMsIDApOwotICAgIGlmICghbV9jdXJyZW50VGV4dHVy
ZVVwZGF0ZXJPbkltcGxUaHJlYWQpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2N1cnJlbnRUZXh0
dXJlVXBkYXRlck9uSW1wbFRocmVhZC0+dXBkYXRlKG1fbGF5ZXJUcmVlSG9zdEltcGwtPmNvbnRl
eHQoKSwgdGV4dHVyZVVwZGF0ZXNQZXJGcmFtZSA+IDAgPyB0ZXh0dXJlVXBkYXRlc1BlckZyYW1l
IDogOTk5OTkpOworICAgIG1fdGV4dHVyZVVwZGF0ZXJPbkltcGxUaHJlYWQudXBkYXRlKG1fbGF5
ZXJUcmVlSG9zdEltcGwtPmNvbnRleHQoKSwgbV9sYXllclRyZWVIb3N0SW1wbC0+Y29udGVudHNU
ZXh0dXJlQWxsb2NhdG9yQmluZGluZygpLCB0ZXh0dXJlVXBkYXRlc1BlckZyYW1lID4gMCA/IHRl
eHR1cmVVcGRhdGVzUGVyRnJhbWUgOiA5OTk5OSk7CiB9CiAKIHZvaWQgQ0NUaHJlYWRQcm94eTo6
c2NoZWR1bGVkQWN0aW9uQ29tbWl0KCkKIHsKICAgICBUUkFDRV9FVkVOVCgiQ0NUaHJlYWRQcm94
eTo6c2NoZWR1bGVkQWN0aW9uQ29tbWl0IiwgdGhpcywgMCk7Ci0gICAgQVNTRVJUKG1fY29tbWl0
Q29tcGxldGlvbkV2ZW50T25JbXBsVGhyZWFkKTsKLQotICAgIGlmIChtX2N1cnJlbnRUZXh0dXJl
VXBkYXRlck9uSW1wbFRocmVhZCkgewotICAgICAgICBBU1NFUlQoIW1fY3VycmVudFRleHR1cmVV
cGRhdGVyT25JbXBsVGhyZWFkLT5oYXNNb3JlVXBkYXRlcygpKTsKLSAgICAgICAgbV9jdXJyZW50
VGV4dHVyZVVwZGF0ZXJPbkltcGxUaHJlYWQuY2xlYXIoKTsKLSAgICB9CisgICAgQVNTRVJUKCFt
X3RleHR1cmVVcGRhdGVyT25JbXBsVGhyZWFkLmhhc01vcmVVcGRhdGVzKCkpOwogCiAgICAgbV9s
YXllclRyZWVIb3N0SW1wbC0+YmVnaW5Db21taXQoKTsKIAogICAgIG1fbGF5ZXJUcmVlSG9zdC0+
YmVnaW5Db21taXRPbkltcGxUaHJlYWQobV9sYXllclRyZWVIb3N0SW1wbC5nZXQoKSk7Ci0gICAg
bV9sYXllclRyZWVIb3N0LT5maW5pc2hDb21taXRPbkltcGxUaHJlYWQobV9sYXllclRyZWVIb3N0
SW1wbC5nZXQoKSk7CisgICAgbV9sYXllclRyZWVIb3N0LT5maW5pc2hDb21taXRPbkltcGxUaHJl
YWQobV9sYXllclRyZWVIb3N0SW1wbC5nZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtX2NvbW1pdE5ld1Jvb3RMYXllck9uSW1wbFRocmVhZCA/IFRy
ZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMobV9jb21taXROZXdSb290TGF5ZXJPbklt
cGxUaHJlYWQuZ2V0KCksIG1fbGF5ZXJUcmVlSG9zdEltcGwtPnJvb3RMYXllcigpKSA6IDApOwor
CisgICAgbV9jb21taXROZXdSb290TGF5ZXJPbkltcGxUaHJlYWQuY2xlYXIoKTsKIAogICAgIG1f
bGF5ZXJUcmVlSG9zdEltcGwtPmNvbW1pdENvbXBsZXRlKCk7CiAKQEAgLTUwNyw5ICs1MDMsNiBA
QCB2b2lkIENDVGhyZWFkUHJveHk6OnNjaGVkdWxlZEFjdGlvbkNvbW1pdCgpCiAgICAgICAgIG1f
bGF5ZXJUcmVlSG9zdEltcGwtPmNvbnRlbnRzVGV4dHVyZUFsbG9jYXRvckJpbmRpbmcoKS0+ZGVs
ZXRlVGV4dHVyZSgqaXQpOwogCiAgICAgbV9uZXh0RnJhbWVJc05ld2x5Q29tbWl0dGVkRnJhbWVP
bkltcGxUaHJlYWQgPSB0cnVlOwotCi0gICAgbV9jb21taXRDb21wbGV0aW9uRXZlbnRPbkltcGxU
aHJlYWQtPnNpZ25hbCgpOwotICAgIG1fY29tbWl0Q29tcGxldGlvbkV2ZW50T25JbXBsVGhyZWFk
ID0gMDsKIH0KIAogdm9pZCBDQ1RocmVhZFByb3h5OjpzY2hlZHVsZWRBY3Rpb25EcmF3QW5kU3dh
cCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1RocmVhZFByb3h5LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmgKaW5kZXggNzY4MThkZi4uNjE2MjBmYSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJl
YWRQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDVGhyZWFkUHJveHkuaApAQCAtMzUsNiArMzUsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBjbGFzcyBDQ0lucHV0SGFuZGxlcjsKK2NsYXNzIENDTGF5ZXJJbXBsOwogY2xhc3MgQ0NM
YXllclRyZWVIb3N0OwogY2xhc3MgQ0NTY2hlZHVsZXI7CiBjbGFzcyBDQ1Njb3BlZFRocmVhZFBy
b3h5OwpAQCAtNjQsNyArNjUsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHN0YXJ0KCk7
CiAgICAgdmlydHVhbCB2b2lkIHN0b3AoKTsKICAgICB2aXJ0dWFsIGJvb2wgcGFydGlhbFRleHR1
cmVVcGRhdGVDYXBhYmlsaXR5KCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZShMYXll
clRleHR1cmVVcGRhdGVyOjpUZXh0dXJlKiwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29u
c3QgSW50UmVjdCYgZGVzdFJlY3QpOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGUoUGFzc093blB0
cjxDQ1RleHR1cmVVcGRhdGVyOjpUZXh0dXJlVXBkYXRlPik7CiAgICAgdmlydHVhbCBUZXh0dXJl
QWxsb2NhdG9yKiBjb250ZW50c1RleHR1cmVBbGxvY2F0b3IoKTsKIAogICAgIC8vIENDTGF5ZXJU
cmVlSG9zdEltcGxDbGllbnQgaW1wbGVtZW50YXRpb24KQEAgLTgzLDEyICs4NCw2IEBAIHB1Ymxp
YzoKIHByaXZhdGU6CiAgICAgZXhwbGljaXQgQ0NUaHJlYWRQcm94eShDQ0xheWVyVHJlZUhvc3Qq
KTsKIAotICAgIHN0cnVjdCBVcGRhdGVFbnRyeSB7Ci0gICAgICAgIExheWVyVGV4dHVyZVVwZGF0
ZXI6OlRleHR1cmUqIG1fdGV4dHVyZTsKLSAgICAgICAgSW50UmVjdCBtX3NvdXJjZVJlY3Q7Ci0g
ICAgICAgIEludFJlY3QgbV9kZXN0UmVjdDsKLSAgICB9OwotCiAgICAgLy8gQ2FsbGVkIG9uIG1h
aW4gdGhyZWFkCiAgICAgdm9pZCBiZWdpbkZyYW1lQW5kQ29tbWl0KGludCBzZXF1ZW5jZU51bWJl
ciwgZG91YmxlIGZyYW1lQmVnaW5UaW1lLCBQYXNzT3duUHRyPENDU2Nyb2xsQW5kU2NhbGVTZXQ+
KTsKICAgICB2b2lkIGRpZENvbW1pdEFuZERyYXdGcmFtZSgpOwpAQCAtMTAzLDggKzk4LDggQEAg
cHJpdmF0ZToKICAgICB9OwogICAgIFBhc3NPd25QdHI8Q0NUaHJlYWQ6OlRhc2s+IGNyZWF0ZUJl
Z2luRnJhbWVBbmRDb21taXRUYXNrT25JbXBsVGhyZWFkKCk7CiAgICAgdm9pZCBvYnRhaW5CZWdp
bkZyYW1lQW5kQ29tbWl0VGFza0Zyb21DQ1RocmVhZChDQ0NvbXBsZXRpb25FdmVudCosIENDVGhy
ZWFkOjpUYXNrKiopOwotICAgIHZvaWQgdXBkYXRlVGV4dHVyZU9uSW1wbFRocmVhZChQYXNzT3du
UHRyPFVwZGF0ZUVudHJ5Pik7Ci0gICAgdm9pZCBiZWdpbkZyYW1lQ29tcGxldGVPbkltcGxUaHJl
YWQoQ0NDb21wbGV0aW9uRXZlbnQqLCBQYXNzT3duUHRyPFZlY3Rvcjx1bnNpZ25lZD4gPiBkZWxl
dGVkVGV4dHVyZXMpOworICAgIHZvaWQgdXBkYXRlVGV4dHVyZU9uSW1wbFRocmVhZChQYXNzT3du
UHRyPENDVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmVVcGRhdGU+KTsKKyAgICB2b2lkIGJlZ2luRnJh
bWVDb21wbGV0ZU9uSW1wbFRocmVhZChDQ0xheWVyRGF0YSosIFBhc3NPd25QdHI8VmVjdG9yPHVu
c2lnbmVkPiA+IGRlbGV0ZWRUZXh0dXJlcyk7CiAgICAgdm9pZCByZXF1ZXN0UmVhZGJhY2tPbklt
cGxUaHJlYWQoUmVhZGJhY2tSZXF1ZXN0Kik7CiAgICAgdm9pZCBmaW5pc2hBbGxSZW5kZXJpbmdP
bkltcGxUaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqKTsKICAgICB2b2lkIGluaXRpYWxpemVJbXBs
T25JbXBsVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50Kik7CkBAIC0xMzcsMTUgKzEzMiwxNCBAQCBw
cml2YXRlOgogICAgIC8vIFNldCB3aGVuIHRoZSBtYWluIHRocmVhZCBpcyB3YWl0aW5nIG9uIGEg
ZmluaXNoQWxsUmVuZGVyaW5nIGNhbGwuCiAgICAgQ0NDb21wbGV0aW9uRXZlbnQqIG1fZmluaXNo
QWxsUmVuZGVyaW5nQ29tcGxldGlvbkV2ZW50T25JbXBsVGhyZWFkOwogCi0gICAgLy8gU2V0IHdo
ZW4gdGhlIG1haW4gdGhyZWFkIGlzIHdhaXRpbmcgb24gYSBjb21taXQgdG8gY29tcGxldGUuCi0g
ICAgQ0NDb21wbGV0aW9uRXZlbnQqIG1fY29tbWl0Q29tcGxldGlvbkV2ZW50T25JbXBsVGhyZWFk
OwotICAgIE93blB0cjxDQ1RleHR1cmVVcGRhdGVyPiBtX2N1cnJlbnRUZXh0dXJlVXBkYXRlck9u
SW1wbFRocmVhZDsKLQogICAgIC8vIFNldCB3aGVuIHRoZSBuZXh0IGRyYXcgc2hvdWxkIHBvc3Qg
ZGlkQ29tbWl0QW5kRHJhd0ZyYW1lIHRvIHRoZSBtYWluIHRocmVhZC4KICAgICBib29sIG1fbmV4
dEZyYW1lSXNOZXdseUNvbW1pdHRlZEZyYW1lT25JbXBsVGhyZWFkOwogCiAgICAgUmVmUHRyPERl
ZmVycmVkVGV4dHVyZUFsbG9jYXRvcj4gbV9kZWZlcnJlZFRleHR1cmVBbGxvY2F0b3I7CiAKKyAg
ICBDQ1RleHR1cmVVcGRhdGVyIG1fdGV4dHVyZVVwZGF0ZXJPbkltcGxUaHJlYWQ7CisKKyAgICBS
ZWZQdHI8Q0NMYXllckRhdGE+IG1fY29tbWl0TmV3Um9vdExheWVyT25JbXBsVGhyZWFkOwogICAg
IE93blB0cjxWZWN0b3I8dW5zaWduZWQ+ID4gbV9jb21taXREZWxldGVkVGV4dHVyZXNPbkltcGxU
aHJlYWQ7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuY3BwCmluZGV4IGJiNDk2
ZTYuLjE5NjY4MzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuY3BwCkBAIC01Nyw4
ICs1Nyw2IEBAIHByaXZhdGU6CiAKIENDVGlsZWRMYXllckltcGw6OkNDVGlsZWRMYXllckltcGwo
aW50IGlkKQogICAgIDogQ0NMYXllckltcGwoaWQpCi0gICAgLCBtX3NraXBzRHJhdyh0cnVlKQot
ICAgICwgbV9jb250ZW50c1N3aXp6bGVkKGZhbHNlKQogewogfQogCkBAIC0xOTEsNiArMTg5LDY1
IEBAIHZvaWQgQ0NUaWxlZExheWVySW1wbDo6c3luY1RleHR1cmVJZChpbnQgaSwgaW50IGosIFBs
YXRmb3JtM0RPYmplY3QgdGV4dHVyZUlkKQogICAgIHRpbGUtPnNldFRleHR1cmVJZCh0ZXh0dXJl
SWQpOwogfQogCitDQ1RpbGVkTGF5ZXJEYXRhOjpDQ1RpbGVkTGF5ZXJEYXRhKGludCBpZCkKKyAg
ICA6IENDTGF5ZXJEYXRhKGlkKQoreworfQorCitDQ1RpbGVkTGF5ZXJEYXRhOjp+Q0NUaWxlZExh
eWVyRGF0YSgpCit7Cit9CisKK3ZvaWQgQ0NUaWxlZExheWVyRGF0YTo6c2V0VGlsaW5nRGF0YShj
b25zdCBDQ0xheWVyVGlsaW5nRGF0YSYgdGlsZXIpCit7CisgICAgaWYgKG1fdGlsZXIpCisgICAg
ICAgIG1fdGlsZXItPnJlc2V0KCk7CisgICAgZWxzZQorICAgICAgICBtX3RpbGVyID0gQ0NMYXll
clRpbGluZ0RhdGE6OmNyZWF0ZSh0aWxlci50aWxlU2l6ZSgpLCB0aWxlci5oYXNCb3JkZXJUZXhl
bHMoKSA/IENDTGF5ZXJUaWxpbmdEYXRhOjpIYXNCb3JkZXJUZXhlbHMgOiBDQ0xheWVyVGlsaW5n
RGF0YTo6Tm9Cb3JkZXJUZXhlbHMpOworICAgICptX3RpbGVyID0gdGlsZXI7Cit9CisKK3ZvaWQg
Q0NUaWxlZExheWVyRGF0YTo6c3luY1RleHR1cmVJZChpbnQgaSwgaW50IGosIFBsYXRmb3JtM0RP
YmplY3QgdGV4dHVyZUlkKQoreworICAgIERyYXdhYmxlVGlsZSogdGlsZSA9IHRpbGVBdChpLCBq
KTsKKyAgICBpZiAoIXRpbGUpCisgICAgICAgIHRpbGUgPSBjcmVhdGVUaWxlKGksIGopOworICAg
IHRpbGUtPnNldFRleHR1cmVJZCh0ZXh0dXJlSWQpOworfQorCitEcmF3YWJsZVRpbGUqIENDVGls
ZWRMYXllckRhdGE6OnRpbGVBdChpbnQgaSwgaW50IGopIGNvbnN0Cit7CisgICAgcmV0dXJuIHN0
YXRpY19jYXN0PERyYXdhYmxlVGlsZSo+KG1fdGlsZXItPnRpbGVBdChpLCBqKSk7Cit9CisKK0Ry
YXdhYmxlVGlsZSogQ0NUaWxlZExheWVyRGF0YTo6Y3JlYXRlVGlsZShpbnQgaSwgaW50IGopCit7
CisgICAgUmVmUHRyPERyYXdhYmxlVGlsZT4gdGlsZSA9IGFkb3B0UmVmKG5ldyBEcmF3YWJsZVRp
bGUoKSk7CisgICAgbV90aWxlci0+YWRkVGlsZSh0aWxlLCBpLCBqKTsKKyAgICByZXR1cm4gdGls
ZS5nZXQoKTsKK30KKwordm9pZCBDQ1RpbGVkTGF5ZXJEYXRhOjpwdXNoUHJvcGVydGllcyhjb25z
dCBDQ1RpbGVkTGF5ZXJEYXRhKiBmcm9tLCBDQ0xheWVyKiB0bykKK3sKKyAgICBDQ1RpbGVkTGF5
ZXJJbXBsKiBsYXllciA9IHN0YXRpY19jYXN0PENDVGlsZWRMYXllckltcGwqPih0byk7CisKKyAg
ICBpZiAoIWZyb20tPm1fdGlsZXIpIHsKKyAgICAgICAgbGF5ZXItPnNldFNraXBzRHJhdyh0cnVl
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGxheWVyLT5zZXRTa2lwc0RyYXcoZnJv
bS0+bV9za2lwc0RyYXcpOworICAgIGxheWVyLT5zZXRDb250ZW50c1N3aXp6bGVkKGZyb20tPm1f
Y29udGVudHNTd2l6emxlZCk7CisgICAgbGF5ZXItPnNldFRpbGluZ0RhdGEoKihmcm9tLT5tX3Rp
bGVyKSk7CisKKyAgICBmb3IgKENDTGF5ZXJUaWxpbmdEYXRhOjpUaWxlTWFwOjpjb25zdF9pdGVy
YXRvciBpdGVyID0gZnJvbS0+bV90aWxlci0+dGlsZXMoKS5iZWdpbigpOyBpdGVyICE9IGZyb20t
Pm1fdGlsZXItPnRpbGVzKCkuZW5kKCk7ICsraXRlcikgeworICAgICAgICBpbnQgaSA9IGl0ZXIt
PmZpcnN0LmZpcnN0OworICAgICAgICBpbnQgaiA9IGl0ZXItPmZpcnN0LnNlY29uZDsKKyAgICAg
ICAgRHJhd2FibGVUaWxlKiB0aWxlID0gc3RhdGljX2Nhc3Q8RHJhd2FibGVUaWxlKj4oaXRlci0+
c2Vjb25kLmdldCgpKTsKKyAgICAgICAgbGF5ZXItPnN5bmNUZXh0dXJlSWQoaSwgaiwgdGlsZS0+
dGV4dHVyZUlkKCkpOworICAgIH0KK30KKwogfQogCiAjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5oCmluZGV4IDQ3OGIwMzQu
Ljg0NTUwNzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmgKQEAgLTM1LDcgKzM1LDIw
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRHJhd2FibGVUaWxlOwogCi1jbGFzcyBD
Q1RpbGVkTGF5ZXJJbXBsIDogcHVibGljIENDTGF5ZXJJbXBsIHsKK2NsYXNzIENDVGlsZWRMYXll
clByb3BlcnRpZXMgeworcHJvdGVjdGVkOgorICAgIGV4cGxpY2l0IENDVGlsZWRMYXllclByb3Bl
cnRpZXMoKQorICAgICAgICA6IG1fc2tpcHNEcmF3KHRydWUpCisgICAgICAgICwgbV9jb250ZW50
c1N3aXp6bGVkKGZhbHNlKQorICAgIHsKKyAgICB9CisKKyAgICBib29sIG1fc2tpcHNEcmF3Owor
ICAgIGJvb2wgbV9jb250ZW50c1N3aXp6bGVkOworICAgIE93blB0cjxDQ0xheWVyVGlsaW5nRGF0
YT4gbV90aWxlcjsKK307CisKK2NsYXNzIENDVGlsZWRMYXllckltcGwgOiBwdWJsaWMgQ0NMYXll
ckltcGwsIHB1YmxpYyBDQ1RpbGVkTGF5ZXJQcm9wZXJ0aWVzIHsKIHB1YmxpYzoKICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxDQ1RpbGVkTGF5ZXJJbXBsPiBjcmVhdGUoaW50IGlkKQogICAgIHsKQEAg
LTgyLDExICs5NSw0MSBAQCBwcml2YXRlOgogCiAgICAgRHJhd2FibGVUaWxlKiB0aWxlQXQoaW50
LCBpbnQpIGNvbnN0OwogICAgIERyYXdhYmxlVGlsZSogY3JlYXRlVGlsZShpbnQsIGludCk7Cit9
OwogCi0gICAgYm9vbCBtX3NraXBzRHJhdzsKLSAgICBib29sIG1fY29udGVudHNTd2l6emxlZDsK
K2NsYXNzIENDVGlsZWRMYXllckRhdGEgOiBwdWJsaWMgQ0NMYXllckRhdGEsIHB1YmxpYyBDQ1Rp
bGVkTGF5ZXJQcm9wZXJ0aWVzIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDQ1Rp
bGVkTGF5ZXJEYXRhPiBjcmVhdGUoaW50IGlkKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBDQ1RpbGVkTGF5ZXJEYXRhKGlkKSk7CisgICAgfQorICAgIHN0YXRpYyB2b2lkIHB1
c2hQcm9wZXJ0aWVzKGNvbnN0IENDVGlsZWRMYXllckRhdGEqLCBDQ0xheWVyKik7CiAKLSAgICBP
d25QdHI8Q0NMYXllclRpbGluZ0RhdGE+IG1fdGlsZXI7CisgICAgdmlydHVhbCB+Q0NUaWxlZExh
eWVyRGF0YSgpOworCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPENDTGF5ZXI+IGNyZWF0ZUNDTGF5
ZXIoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIENDVGlsZWRMYXllckltcGw6OmNyZWF0ZShpZCgp
KTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcHVzaFByb3BlcnRpZXNUbyhDQ0xheWVyKiBs
YXllcikKKyAgICB7CisgICAgICAgIENDTGF5ZXJEYXRhOjpwdXNoUHJvcGVydGllcyh0aGlzLCBs
YXllcik7CisgICAgICAgIHB1c2hQcm9wZXJ0aWVzKHRoaXMsIGxheWVyKTsKKyAgICB9CisKKyAg
ICB2b2lkIHNldFNraXBzRHJhdyhib29sIHNraXBzRHJhdykgeyBtX3NraXBzRHJhdyA9IHNraXBz
RHJhdzsgfQorICAgIHZvaWQgc2V0Q29udGVudHNTd2l6emxlZChib29sIGNvbnRlbnRzU3dpenps
ZWQpIHsgbV9jb250ZW50c1N3aXp6bGVkID0gY29udGVudHNTd2l6emxlZDsgfQorICAgIHZvaWQg
c2V0VGlsaW5nRGF0YShjb25zdCBDQ0xheWVyVGlsaW5nRGF0YSYpOworICAgIHZvaWQgc3luY1Rl
eHR1cmVJZChpbnQsIGludCwgUGxhdGZvcm0zRE9iamVjdCk7CisKK3Byb3RlY3RlZDoKKyAgICBl
eHBsaWNpdCBDQ1RpbGVkTGF5ZXJEYXRhKGludCk7CisKKyAgICBEcmF3YWJsZVRpbGUqIHRpbGVB
dChpbnQsIGludCkgY29uc3Q7CisgICAgRHJhd2FibGVUaWxlKiBjcmVhdGVUaWxlKGludCwgaW50
KTsKKworcHJpdmF0ZToKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5jcHAK
aW5kZXggZTQ0ZjQxMS4uZjdmZGZmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5j
cHAKQEAgLTMzNSw2ICszMzUsMTYgQEAgdm9pZCBDQ1ZpZGVvTGF5ZXJJbXBsOjpkdW1wTGF5ZXJQ
cm9wZXJ0aWVzKFRleHRTdHJlYW0mIHRzLCBpbnQgaW5kZW50KSBjb25zdAogICAgIENDTGF5ZXJJ
bXBsOjpkdW1wTGF5ZXJQcm9wZXJ0aWVzKHRzLCBpbmRlbnQpOwogfQogCitDQ1ZpZGVvTGF5ZXJE
YXRhOjpDQ1ZpZGVvTGF5ZXJEYXRhKGludCBpZCwgVmlkZW9GcmFtZVByb3ZpZGVyKiBwcm92aWRl
cikKKyAgICA6IENDTGF5ZXJEYXRhKGlkKQorICAgICwgbV9wcm92aWRlcihwcm92aWRlcikKK3sK
K30KKworQ0NWaWRlb0xheWVyRGF0YTo6fkNDVmlkZW9MYXllckRhdGEoKQoreworfQorCiB9CiAK
ICNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBs
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVv
TGF5ZXJJbXBsLmgKaW5kZXggMTgyZjdiNS4uMTM0MTY3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9M
YXllckltcGwuaApAQCAtOTAsNiArOTAsMjcgQEAgcHJpdmF0ZToKICAgICBJbnRTaXplIG1fbmF0
aXZlVGV4dHVyZVNpemU7CiB9OwogCitjbGFzcyBDQ1ZpZGVvTGF5ZXJEYXRhIDogcHVibGljIEND
TGF5ZXJEYXRhIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDQ1ZpZGVvTGF5ZXJE
YXRhPiBjcmVhdGUoaW50IGlkLCBWaWRlb0ZyYW1lUHJvdmlkZXIqIHByb3ZpZGVyKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDQ1ZpZGVvTGF5ZXJEYXRhKGlkLCBwcm92aWRl
cikpOworICAgIH0KKworICAgIHZpcnR1YWwgfkNDVmlkZW9MYXllckRhdGEoKTsKKworICAgIHZp
cnR1YWwgUGFzc1JlZlB0cjxDQ0xheWVyPiBjcmVhdGVDQ0xheWVyKCkKKyAgICB7CisgICAgICAg
IHJldHVybiBDQ1ZpZGVvTGF5ZXJJbXBsOjpjcmVhdGUoaWQoKSwgbV9wcm92aWRlcik7CisgICAg
fQorCitwcm90ZWN0ZWQ6CisgICAgQ0NWaWRlb0xheWVyRGF0YShpbnQsIFZpZGVvRnJhbWVQcm92
aWRlciopOworCitwcml2YXRlOgorICAgIFZpZGVvRnJhbWVQcm92aWRlciogbV9wcm92aWRlcjsK
K307CisKIH0KIAogI2VuZGlmIC8vIENDVmlkZW9MYXllckltcGxfaApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEuY3Bw
CmluZGV4IDU4ZWJhYzguLmY0ZTIyYjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAKQEAgLTUwLDYgKzUw
LDcgQEAKICNpbmNsdWRlICJTa2lhVXRpbHMuaCIKICNpbmNsdWRlICJXRUJQSW1hZ2VFbmNvZGVy
LmgiCiAjaW5jbHVkZSAiY2MvQ0NDYW52YXNMYXllckltcGwuaCIKKyNpbmNsdWRlICJjYy9DQ1By
b3h5LmgiCiAKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApAQCAtODgsNyArODks
MTAgQEAgc3RhdGljIFNrQ2FudmFzKiBjcmVhdGVBY2NlbGVyYXRlZENhbnZhcyhjb25zdCBJbnRT
aXplJiBzaXplLCBJbWFnZUJ1ZmZlckRhdGEqIGQKICAgICBjYW52YXMtPnNldERldmljZShuZXcg
U2tHcHVEZXZpY2UoZ3IsIHRleHR1cmUuZ2V0KCkpKS0+dW5yZWYoKTsKICAgICBkYXRhLT5tX3Bs
YXRmb3JtQ29udGV4dC5zZXRHcmFwaGljc0NvbnRleHQzRChjb250ZXh0M0QpOwogI2lmIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICBkYXRhLT5tX3BsYXRmb3JtTGF5ZXIgPSBDYW52
YXMyRExheWVyQ2hyb21pdW06OmNyZWF0ZTxDQ0NhbnZhc0xheWVySW1wbD4oY29udGV4dDNELCBz
aXplKTsKKyAgICBpZiAoQ0NQcm94eTo6aGFzSW1wbFRocmVhZCgpKQorICAgICAgICBkYXRhLT5t
X3BsYXRmb3JtTGF5ZXIgPSBDYW52YXMyRExheWVyQ2hyb21pdW06OmNyZWF0ZTxDQ0NhbnZhc0xh
eWVyRGF0YT4oY29udGV4dDNELCBzaXplKTsKKyAgICBlbHNlCisgICAgICAgIGRhdGEtPm1fcGxh
dGZvcm1MYXllciA9IENhbnZhczJETGF5ZXJDaHJvbWl1bTo6Y3JlYXRlPENDQ2FudmFzTGF5ZXJJ
bXBsPihjb250ZXh0M0QsIHNpemUpOwogICAgIGRhdGEtPm1fcGxhdGZvcm1MYXllci0+c2V0VGV4
dHVyZUlkKHRleHR1cmUuZ2V0KCktPmdldFRleHR1cmVIYW5kbGUoKSk7CiAjZW5kaWYKICAgICBy
ZXR1cm4gY2FudmFzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
RXh0ZXJuYWxUZXh0dXJlTGF5ZXIuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
RXh0ZXJuYWxUZXh0dXJlTGF5ZXIuY3BwCmluZGV4IDZkZTMyOGYuLjI2YThhNmIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkV4dGVybmFsVGV4dHVyZUxheWVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJFeHRlcm5hbFRleHR1cmVMYXll
ci5jcHAKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJwbGF0Zm9ybS9XZWJFeHRlcm5hbFRl
eHR1cmVMYXllci5oIgogCiAjaW5jbHVkZSAiY2MvQ0NQbHVnaW5MYXllckltcGwuaCIKKyNpbmNs
dWRlICJjYy9DQ1Byb3h5LmgiCiAjaW5jbHVkZSAicGxhdGZvcm0vV2ViRmxvYXRSZWN0LmgiCiAj
aW5jbHVkZSAiV2ViRXh0ZXJuYWxUZXh0dXJlTGF5ZXJJbXBsLmgiCiAKQEAgLTM2LDcgKzM3LDEw
IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiBXZWJFeHRlcm5hbFRleHR1cmVMYXllciBXZWJFeHRl
cm5hbFRleHR1cmVMYXllcjo6Y3JlYXRlKCkKIHsKLSAgICByZXR1cm4gV2ViRXh0ZXJuYWxUZXh0
dXJlTGF5ZXIoV2ViRXh0ZXJuYWxUZXh0dXJlTGF5ZXJJbXBsOjpjcmVhdGU8Q0NQbHVnaW5MYXll
ckltcGw+KCkpOworICAgIGlmIChDQ1Byb3h5OjpoYXNJbXBsVGhyZWFkKCkpCisgICAgICAgIHJl
dHVybiBXZWJFeHRlcm5hbFRleHR1cmVMYXllcihXZWJFeHRlcm5hbFRleHR1cmVMYXllckltcGw6
OmNyZWF0ZTxDQ1BsdWdpbkxheWVyRGF0YT4oKSk7CisgICAgZWxzZQorICAgICAgICByZXR1cm4g
V2ViRXh0ZXJuYWxUZXh0dXJlTGF5ZXIoV2ViRXh0ZXJuYWxUZXh0dXJlTGF5ZXJJbXBsOjpjcmVh
dGU8Q0NQbHVnaW5MYXllckltcGw+KCkpOwogfQogCiB2b2lkIFdlYkV4dGVybmFsVGV4dHVyZUxh
eWVyOjpzZXRUZXh0dXJlSWQodW5zaWduZWQgaWQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJMYXllci5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJMYXllci5jcHAKaW5kZXggYjQ4ZjBmOS4uZGQ4NDFiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYkxheWVyLmNwcApAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgInBsYXRmb3Jt
L1dlYkxheWVyLmgiCiAKICNpbmNsdWRlICJjYy9DQ0xheWVySW1wbC5oIgorI2luY2x1ZGUgImNj
L0NDUHJveHkuaCIKICNpbmNsdWRlICJwbGF0Zm9ybS9XZWJGbG9hdFBvaW50LmgiCiAjaW5jbHVk
ZSAiQ29sb3IuaCIKICNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCkBAIC03Nyw3ICs3OCwxMCBA
QCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogV2ViTGF5ZXIgV2ViTGF5ZXI6OmNyZWF0ZSgpCiB7Ci0g
ICAgcmV0dXJuIFdlYkxheWVyKFdlYkxheWVySW1wbDo6Y3JlYXRlPENDTGF5ZXJJbXBsPigpKTsK
KyAgICBpZiAoQ0NQcm94eTo6aGFzSW1wbFRocmVhZCgpKQorICAgICAgICByZXR1cm4gV2ViTGF5
ZXIoV2ViTGF5ZXJJbXBsOjpjcmVhdGU8Q0NMYXllckRhdGE+KCkpOworICAgIGVsc2UKKyAgICAg
ICAgcmV0dXJuIFdlYkxheWVyKFdlYkxheWVySW1wbDo6Y3JlYXRlPENDTGF5ZXJJbXBsPigpKTsK
IH0KIAogdm9pZCBXZWJMYXllcjo6cmVzZXQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYk1lZGlhUGxheWVyQ2xpZW50SW1wbC5jcHAKaW5kZXggNTExZTNkNC4u
ODJjNWVhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTWVkaWFQ
bGF5ZXJDbGllbnRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJN
ZWRpYVBsYXllckNsaWVudEltcGwuY3BwCkBAIC0xMjEsNyArMTIxLDExIEBAIHZvaWQgV2ViTWVk
aWFQbGF5ZXJDbGllbnRJbXBsOjpyZWFkeVN0YXRlQ2hhbmdlZCgpCiAgICAgbV9tZWRpYVBsYXll
ci0+cmVhZHlTdGF0ZUNoYW5nZWQoKTsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
CiAgICAgaWYgKGhhc1ZpZGVvKCkgJiYgc3VwcG9ydHNBY2NlbGVyYXRlZFJlbmRlcmluZygpICYm
ICFtX3ZpZGVvTGF5ZXIpIHsKLSAgICAgICAgbV92aWRlb0xheWVyID0gVmlkZW9MYXllckNocm9t
aXVtOjpjcmVhdGU8Q0NWaWRlb0xheWVySW1wbD4odGhpcyk7CisgICAgICAgIGlmIChDQ1Byb3h5
OjpoYXNJbXBsVGhyZWFkKCkpCisgICAgICAgICAgICBtX3ZpZGVvTGF5ZXIgPSBWaWRlb0xheWVy
Q2hyb21pdW06OmNyZWF0ZTxDQ1ZpZGVvTGF5ZXJEYXRhPih0aGlzKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgbV92aWRlb0xheWVyID0gVmlkZW9MYXllckNocm9taXVtOjpjcmVhdGU8Q0NW
aWRlb0xheWVySW1wbD4odGhpcyk7CisKICAgICAgICAgbV92aWRlb0xheWVyLT5zZXRPcGFxdWUo
bV9vcGFxdWUpOwogICAgIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViUGx1Z2luQ29udGFpbmVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJQbHVnaW5Db250YWluZXJJbXBsLmNwcAppbmRleCA5Yzc3YmFlLi40MjlkNWNh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQbHVnaW5Db250YWlu
ZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQbHVnaW5Db250
YWluZXJJbXBsLmNwcApAQCAtNTM3LDEwICs1MzcsMTMgQEAgV2ViUGx1Z2luQ29udGFpbmVySW1w
bDo6V2ViUGx1Z2luQ29udGFpbmVySW1wbChXZWJDb3JlOjpIVE1MUGx1Z0luRWxlbWVudCogZWxl
bWUKICAgICA6IFdlYkNvcmU6OlBsdWdpblZpZXdCYXNlKDApCiAgICAgLCBtX2VsZW1lbnQoZWxl
bWVudCkKICAgICAsIG1fd2ViUGx1Z2luKHdlYlBsdWdpbikKK3sKICNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCi0gICAgLCBtX3BsYXRmb3JtTGF5ZXIoUGx1Z2luTGF5ZXJDaHJvbWl1
bTo6Y3JlYXRlPENDUGx1Z2luTGF5ZXJJbXBsPigpKQorICAgIGlmIChDQ1Byb3h5OjpoYXNJbXBs
VGhyZWFkKCkpCisgICAgICAgIG1fcGxhdGZvcm1MYXllciA9IFBsdWdpbkxheWVyQ2hyb21pdW06
OmNyZWF0ZTxDQ1BsdWdpbkxheWVyRGF0YT4oKTsKKyAgICBlbHNlCisgICAgICAgIG1fcGxhdGZv
cm1MYXllciA9IFBsdWdpbkxheWVyQ2hyb21pdW06OmNyZWF0ZTxDQ1BsdWdpbkxheWVySW1wbD4o
KTsKICNlbmRpZgotewogfQogCiBXZWJQbHVnaW5Db250YWluZXJJbXBsOjp+V2ViUGx1Z2luQ29u
dGFpbmVySW1wbCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ND
TGF5ZXJUcmVlSG9zdFRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xh
eWVyVHJlZUhvc3RUZXN0LmNwcAppbmRleCBiM2MyMTI3Li5jYTE3MTZkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAKQEAg
LTI2LDEwICsyNiwxMyBAQAogCiAjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0LmgiCiAKKyNp
bmNsdWRlICJDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmgiCiAjaW5jbHVkZSAiQ29tcG9zaXRv
ckZha2VXZWJHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIkNvbnRlbnRMYXllckNocm9t
aXVtLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgiCiAjaW5jbHVkZSAi
TGF5ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgIkxheWVyUGFpbnRlckNocm9taXVtLmgiCisjaW5j
bHVkZSAiTWFuYWdlZFRleHR1cmUuaCIKICNpbmNsdWRlICJUZXh0dXJlTWFuYWdlci5oIgogI2lu
Y2x1ZGUgIldlYkNvbXBvc2l0b3IuaCIKICNpbmNsdWRlICJXZWJLaXQuaCIKQEAgLTQ1MCw3ICs0
NTMsMTEgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RUZXN0Ojpkb0JlZ2luVGVzdCgpCiAgICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBtX2NsaWVudCA9IE1vY2tMYXllclRyZWVIb3N0Q2xp
ZW50OjpjcmVhdGUodGhpcyk7CiAKLSAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcm9vdExheWVy
ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlPENDTGF5ZXJJbXBsPigpOworICAgIFJlZlB0cjxMYXll
ckNocm9taXVtPiByb290TGF5ZXI7CisgICAgaWYgKENDUHJveHk6Omhhc0ltcGxUaHJlYWQoKSkK
KyAgICAgICAgcm9vdExheWVyID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlPENDTGF5ZXJEYXRhPigp
OworICAgIGVsc2UKKyAgICAgICAgcm9vdExheWVyID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlPEND
TGF5ZXJJbXBsPigpOwogICAgIG1fbGF5ZXJUcmVlSG9zdCA9IE1vY2tMYXllclRyZWVIb3N0Ojpj
cmVhdGUodGhpcywgbV9jbGllbnQuZ2V0KCksIHJvb3RMYXllciwgbV9zZXR0aW5ncyk7CiAgICAg
QVNTRVJUX1RSVUUobV9sYXllclRyZWVIb3N0KTsKICAgICByb290TGF5ZXItPnNldExheWVyVHJl
ZUhvc3QobV9sYXllclRyZWVIb3N0LmdldCgpKTsKQEAgLTk5NiwzMSArMTAwMyw3MyBAQCBwcml2
YXRlOgogCiBjbGFzcyBDb250ZW50TGF5ZXJDaHJvbWl1bVdpdGhVcGRhdGVUcmFja2luZyA6IHB1
YmxpYyBDb250ZW50TGF5ZXJDaHJvbWl1bSB7CiBwdWJsaWM6Ci0gICAgY2xhc3MgQ29udGVudExh
eWVyVGV4dHVyZVVwZGF0ZXIgOiBwdWJsaWMgTGF5ZXJUZXh0dXJlVXBkYXRlciB7CisgICAgY2xh
c3MgQ29udGVudExheWVyVGV4dHVyZVVwZGF0ZXIgOiBwdWJsaWMgQ2FudmFzTGF5ZXJUZXh0dXJl
VXBkYXRlciB7CiAgICAgcHVibGljOgotICAgICAgICBjbGFzcyBUZXh0dXJlIDogcHVibGljIExh
eWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmUgeworICAgICAgICBjbGFzcyBQYWludGVyIDogcHVi
bGljIExheWVyUGFpbnRlckNocm9taXVtIHsKICAgICAgICAgcHVibGljOgorICAgICAgICAgICAg
c3RhdGljIFBhc3NPd25QdHI8UGFpbnRlcj4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRQdHIobmV3
IFBhaW50ZXIoKSk7IH0KKworICAgICAgICAgICAgdmlydHVhbCB2b2lkIHBhaW50KEdyYXBoaWNz
Q29udGV4dCYsIGNvbnN0IEludFJlY3QmKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKwor
ICAgICAgICBjbGFzcyBUZXh0dXJlIDogcHVibGljIENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6
OlRleHR1cmUgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBjbGFzcyBUZXh0dXJlVXBk
YXRlIDogcHVibGljIENDVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmVVcGRhdGUgeworICAgICAgICAg
ICAgcHVibGljOgorICAgICAgICAgICAgICAgIHN0YXRpYyBQYXNzT3duUHRyPFRleHR1cmVVcGRh
dGU+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBUZXh0dXJlVXBkYXRlKCkpOyB9CisK
KyAgICAgICAgICAgICAgICB2b2lkIHNldEZvcm1hdCh1bnNpZ25lZCBmb3JtYXQpIHsgbV9mb3Jt
YXQgPSBmb3JtYXQ7IH0KKyAgICAgICAgICAgICAgICB2b2lkIHNldFRleHR1cmVJZCh1bnNpZ25l
ZCB0ZXh0dXJlSWQpIHsgbV90ZXh0dXJlSWQgPSB0ZXh0dXJlSWQ7IH0KKyAgICAgICAgICAgICAg
ICB2b2lkIHNldFNpemUoSW50U2l6ZSBzaXplKSB7IG1fc2l6ZSA9IHNpemU7IH0KKworICAgICAg
ICAgICAgICAgIHZvaWQgdXBkYXRlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBUZXh0dXJl
QWxsb2NhdG9yQmluZGluZyogYmluZGluZykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIHRleHR1cmUgPSBiaW5kaW5nLT50ZXh0dXJlSWQobV90ZXh0dXJl
SWQpOworICAgICAgICAgICAgICAgICAgICBpZiAoIXRleHR1cmUpCisgICAgICAgICAgICAgICAg
ICAgICAgICB0ZXh0dXJlID0gYmluZGluZy0+Y3JlYXRlVGV4dHVyZShtX3RleHR1cmVJZCwgbV9z
aXplLCBtX2Zvcm1hdCk7CisKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+YmluZFRleHR1
cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHRleHR1cmUpOworICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgICAgICBleHBsaWNpdCBU
ZXh0dXJlVXBkYXRlKCkKKyAgICAgICAgICAgICAgICAgICAgOiBtX2Zvcm1hdCgwKQorICAgICAg
ICAgICAgICAgICAgICAsIG1fdGV4dHVyZUlkKDApCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHVuc2lnbmVkIG1fZm9ybWF0OworICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIG1fdGV4dHVyZUlkOworICAgICAgICAgICAgICAgIEludFNpemUg
bV9zaXplOworICAgICAgICAgICAgfTsKKwogICAgICAgICAgICAgVGV4dHVyZShDb250ZW50TGF5
ZXJUZXh0dXJlVXBkYXRlciogdGV4dHVyZVVwZGF0ZXIsIFBhc3NPd25QdHI8TWFuYWdlZFRleHR1
cmU+IHRleHR1cmUpCi0gICAgICAgICAgICAgICAgOiBtX3RleHR1cmUodGV4dHVyZSkKKyAgICAg
ICAgICAgICAgICA6IENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmUodGV4dHVyZSkK
ICAgICAgICAgICAgICAgICAsIG1fdGV4dHVyZVVwZGF0ZXIodGV4dHVyZVVwZGF0ZXIpCiAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHZpcnR1YWwgTWFuYWdlZFRl
eHR1cmUqIHRleHR1cmUoKSB7IHJldHVybiBtX3RleHR1cmUuZ2V0KCk7IH0KLQotICAgICAgICAg
ICAgdmlydHVhbCB2b2lkIHByZXBhcmVSZWN0KGNvbnN0IEludFJlY3QmIC8qIHNvdXJjZVJlY3Qg
Ki8pCisgICAgICAgICAgICB2aXJ0dWFsIFBhc3NPd25QdHI8Q0NUZXh0dXJlVXBkYXRlcjo6VGV4
dHVyZVVwZGF0ZT4gY3JlYXRlQ0NUZXh0dXJlVXBkYXRlKCkKICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBtX3RleHR1cmVVcGRhdGVyLT5sYXllcigpLT5wcmVwYXJlUmVjdCgpOworICAg
ICAgICAgICAgICAgIHJldHVybiBUZXh0dXJlVXBkYXRlOjpjcmVhdGUoKTsKICAgICAgICAgICAg
IH0KIAotICAgICAgICAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVJlY3QoR3JhcGhpY3NDb250ZXh0
M0QqIGNvbnRleHQsIFRleHR1cmVBbGxvY2F0b3JCaW5kaW5nKiBiaW5kaW5nLCBjb25zdCBJbnRS
ZWN0JiAvKiBzb3VyY2VSZWN0ICovLCBjb25zdCBJbnRSZWN0JiAvKiBkZXN0UmVjdCAqLykKKyAg
ICAgICAgICAgIHZpcnR1YWwgdm9pZCBwdXNoUHJvcGVydGllc1RvKENDVGV4dHVyZVVwZGF0ZXI6
OlRleHR1cmVVcGRhdGUqIHRleHR1cmVVcGRhdGUpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgbV90ZXh0dXJlLT5iaW5kVGV4dHVyZShjb250ZXh0LCBiaW5kaW5nKTsKLSAgICAgICAg
ICAgICAgICBtX3RleHR1cmVVcGRhdGVyLT5sYXllcigpLT51cGRhdGVSZWN0KCk7CisgICAgICAg
ICAgICAgICAgbV90ZXh0dXJlVXBkYXRlci0+bGF5ZXIoKS0+cHVzaFByb3BlcnRpZXNUbygpOwor
ICAgICAgICAgICAgICAgIFRleHR1cmVVcGRhdGUqIHVwZGF0ZSA9IHN0YXRpY19jYXN0PFRleHR1
cmVVcGRhdGUqPih0ZXh0dXJlVXBkYXRlKTsKKworICAgICAgICAgICAgICAgIHVwZGF0ZS0+c2V0
Rm9ybWF0KHRleHR1cmUoKS0+Zm9ybWF0KCkpOworICAgICAgICAgICAgICAgIHVwZGF0ZS0+c2V0
VGV4dHVyZUlkKHRleHR1cmUoKS0+dGV4dHVyZUlkKCkpOworICAgICAgICAgICAgICAgIHVwZGF0
ZS0+c2V0U2l6ZSh0ZXh0dXJlKCktPnNpemUoKSk7CiAgICAgICAgICAgICB9CiAKKyAgICAgICAg
ICAgIENvbnRlbnRMYXllclRleHR1cmVVcGRhdGVyKiB0ZXh0dXJlVXBkYXRlcigpIHsgcmV0dXJu
IG1fdGV4dHVyZVVwZGF0ZXI7IH0KKwogICAgICAgICBwcml2YXRlOgotICAgICAgICAgICAgT3du
UHRyPE1hbmFnZWRUZXh0dXJlPiBtX3RleHR1cmU7CiAgICAgICAgICAgICBDb250ZW50TGF5ZXJU
ZXh0dXJlVXBkYXRlciogbV90ZXh0dXJlVXBkYXRlcjsKICAgICAgICAgfTsKIApAQCAtMTAyOSw3
ICsxMDc4LDcgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDb250
ZW50TGF5ZXJUZXh0dXJlVXBkYXRlcihsYXllcikpOwogICAgICAgICB9CiAKLSAgICAgICAgdmly
dHVhbCBQYXNzT3duUHRyPExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU+IGNyZWF0ZVRleHR1
cmUoVGV4dHVyZU1hbmFnZXIqIG1hbmFnZXIpCisgICAgICAgIHZpcnR1YWwgUGFzc093blB0cjxD
YW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlPiBjcmVhdGVUZXh0dXJlKFRleHR1cmVN
YW5hZ2VyKiBtYW5hZ2VyKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gYWRvcHRQdHIo
bmV3IFRleHR1cmUodGhpcywgTWFuYWdlZFRleHR1cmU6OmNyZWF0ZShtYW5hZ2VyKSkpOwogICAg
ICAgICB9CkBAIC0xMDQ3LDcgKzEwOTYsMTEgQEAgcHVibGljOgogICAgICAgICBDb250ZW50TGF5
ZXJDaHJvbWl1bVdpdGhVcGRhdGVUcmFja2luZyogbGF5ZXIoKSB7IHJldHVybiBtX2xheWVyOyB9
CiAKICAgICBwcml2YXRlOgotICAgICAgICBleHBsaWNpdCBDb250ZW50TGF5ZXJUZXh0dXJlVXBk
YXRlcihDb250ZW50TGF5ZXJDaHJvbWl1bVdpdGhVcGRhdGVUcmFja2luZyogbGF5ZXIpIDogbV9s
YXllcihsYXllcikgeyB9CisgICAgICAgIGV4cGxpY2l0IENvbnRlbnRMYXllclRleHR1cmVVcGRh
dGVyKENvbnRlbnRMYXllckNocm9taXVtV2l0aFVwZGF0ZVRyYWNraW5nKiBsYXllcikKKyAgICAg
ICAgICAgIDogQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcihQYWludGVyOjpjcmVhdGUoKSkKKyAg
ICAgICAgICAgICwgbV9sYXllcihsYXllcikKKyAgICAgICAgeworICAgICAgICB9CiAKICAgICAg
ICAgQ29udGVudExheWVyQ2hyb21pdW1XaXRoVXBkYXRlVHJhY2tpbmcqIG1fbGF5ZXI7CiAgICAg
fTsKQEAgLTEwNjEsNyArMTExNCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIG1fY29udGVu
dExheWVyVGV4dHVyZVVwZGF0ZXIgPSBDb250ZW50TGF5ZXJUZXh0dXJlVXBkYXRlcjo6Y3JlYXRl
KHRoaXMpOwogICAgIH0KLSAgICB2aXJ0dWFsIExheWVyVGV4dHVyZVVwZGF0ZXIqIHRleHR1cmVV
cGRhdGVyKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50TGF5ZXJUZXh0dXJlVXBkYXRlci5nZXQo
KTsgfQorICAgIHZpcnR1YWwgQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlciogdGV4dHVyZVVwZGF0
ZXIoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRMYXllclRleHR1cmVVcGRhdGVyLmdldCgpOyB9
CiAKICAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZVRvVXBkYXRlSWZEaXJ0eSgpCiAgICAgewpAQCAt
MTA4NCwyMSArMTEzNywyOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBwYWludENvbnRlbnRzKCkgeyBt
X3BhaW50Q29udGVudHNDb3VudCsrOyB9CiAgICAgaW50IHBhaW50Q29udGVudHNDb3VudCgpIHsg
cmV0dXJuIG1fcGFpbnRDb250ZW50c0NvdW50OyB9CiAKLSAgICB2b2lkIHByZXBhcmVSZWN0KCkg
eyBtX3ByZXBhcmVSZWN0Q291bnQrKzsgfQotICAgIGludCBwcmVwYXJlUmVjdENvdW50KCkgeyBy
ZXR1cm4gbV9wcmVwYXJlUmVjdENvdW50OyB9CisgICAgdm9pZCBwcmVwYXJlKCkgeyBtX3ByZXBh
cmVDb3VudCsrOyB9CisgICAgaW50IHByZXBhcmVDb3VudCgpIHsgcmV0dXJuIG1fcHJlcGFyZUNv
dW50OyB9CiAKLSAgICB2b2lkIHVwZGF0ZVJlY3QoKSB7IG1fdXBkYXRlUmVjdENvdW50Kys7IH0K
LSAgICBpbnQgdXBkYXRlUmVjdENvdW50KCkgeyByZXR1cm4gbV91cGRhdGVSZWN0Q291bnQ7IH0K
KyAgICB2b2lkIHB1c2hQcm9wZXJ0aWVzVG8oKSB7IG1fcHVzaFByb3BlcnRpZXNUb0NvdW50Kys7
IH0KKyAgICBpbnQgcHVzaFByb3BlcnRpZXNUb0NvdW50KCkgeyByZXR1cm4gbV9wdXNoUHJvcGVy
dGllc1RvQ291bnQ7IH0KIAogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDQ0xheWVyPiBjcmVhdGVD
Q0xheWVyKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBDQ1RpbGVkTGF5ZXJJbXBsOjpjcmVhdGUo
bV9sYXllcklkKTsKKyAgICAgICAgaWYgKENDUHJveHk6Omhhc0ltcGxUaHJlYWQoKSkKKyAgICAg
ICAgICAgIHJldHVybiBDQ1RpbGVkTGF5ZXJEYXRhOjpjcmVhdGUobV9sYXllcklkKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIENDVGlsZWRMYXllckltcGw6OmNyZWF0ZShtX2xh
eWVySWQpOwogICAgIH0KIAogICAgIHZpcnR1YWwgdm9pZCBwdXNoUHJvcGVydGllc1RvKENDTGF5
ZXIqIGNjTGF5ZXIpCiAgICAgewotICAgICAgICBMYXllckNocm9taXVtOjpwdXNoUHJvcGVydGll
czxDQ1RpbGVkTGF5ZXJJbXBsPih0aGlzLCBjY0xheWVyKTsKLSAgICAgICAgVGlsZWRMYXllckNo
cm9taXVtOjpwdXNoUHJvcGVydGllczxDQ1RpbGVkTGF5ZXJJbXBsPih0aGlzLCBjY0xheWVyKTsK
KyAgICAgICAgaWYgKENDUHJveHk6Omhhc0ltcGxUaHJlYWQoKSkgeworICAgICAgICAgICAgTGF5
ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXM8Q0NUaWxlZExheWVyRGF0YT4odGhpcywgY2NMYXll
cik7CisgICAgICAgICAgICBwdXNoUHJvcGVydGllczxDQ1RpbGVkTGF5ZXJEYXRhPih0aGlzLCBj
Y0xheWVyKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIExheWVyQ2hyb21pdW06OnB1
c2hQcm9wZXJ0aWVzPENDVGlsZWRMYXllckltcGw+KHRoaXMsIGNjTGF5ZXIpOworICAgICAgICAg
ICAgcHVzaFByb3BlcnRpZXM8Q0NUaWxlZExheWVySW1wbD4odGhpcywgY2NMYXllcik7CisgICAg
ICAgIH0KICAgICB9CiAKIHByaXZhdGU6CkBAIC0xMTA3LDggKzExNjgsOCBAQCBwcml2YXRlOgog
ICAgICAgICAsIG1fcHJlcGFyZVRvVXBkYXRlQ291bnQoMCkKICAgICAgICAgLCBtX2lkbGVQcmVw
YXJlVG9VcGRhdGVDb3VudCgwKQogICAgICAgICAsIG1fcGFpbnRDb250ZW50c0NvdW50KDApCi0g
ICAgICAgICwgbV9wcmVwYXJlUmVjdENvdW50KDApCi0gICAgICAgICwgbV91cGRhdGVSZWN0Q291
bnQoMCkKKyAgICAgICAgLCBtX3ByZXBhcmVDb3VudCgwKQorICAgICAgICAsIG1fcHVzaFByb3Bl
cnRpZXNUb0NvdW50KDApCiAgICAgewogICAgICAgICBzZXRCb3VuZHMoSW50U2l6ZSgxMCwgMTAp
KTsKICAgICAgICAgc2V0SXNEcmF3YWJsZSh0cnVlKTsKQEAgLTExMTgsOCArMTE3OSw4IEBAIHBy
aXZhdGU6CiAgICAgaW50IG1fcHJlcGFyZVRvVXBkYXRlQ291bnQ7CiAgICAgaW50IG1faWRsZVBy
ZXBhcmVUb1VwZGF0ZUNvdW50OwogICAgIGludCBtX3BhaW50Q29udGVudHNDb3VudDsKLSAgICBp
bnQgbV9wcmVwYXJlUmVjdENvdW50OwotICAgIGludCBtX3VwZGF0ZVJlY3RDb3VudDsKKyAgICBp
bnQgbV9wcmVwYXJlQ291bnQ7CisgICAgaW50IG1fcHVzaFByb3BlcnRpZXNUb0NvdW50OwogfTsK
IAogLy8gTGF5ZXIgb3BhY2l0eSBjaGFuZ2UgZHVyaW5nIHBhaW50IHNob3VsZCBub3QgcHJldmVu
dCBjb21wb3NpdG9yIHJlc291cmNlcyBmcm9tIGJlaW5nIHVwZGF0ZWQgZHVyaW5nIGNvbW1pdC4K
QEAgLTExNTUsMTAgKzEyMTYsMTAgQEAgcHVibGljOgogICAgICAgICAvLyBwYWludENvbnRlbnRz
KCkgc2hvdWxkIGhhdmUgYmVlbiBjYWxsZWQgb25jZS4KICAgICAgICAgRVhQRUNUX0VRKDEsIG1f
dXBkYXRlQ2hlY2tMYXllci0+cGFpbnRDb250ZW50c0NvdW50KCkpOwogCi0gICAgICAgIC8vIHBh
aW50Q29udGVudHNSZWN0KCkgc2hvdWxkIGhhdmUgYmVlbiBjYWxsZWQgdGhlIHNhbWUKLSAgICAg
ICAgLy8gYW1vdW50IG9mIHRpbWVzIGFzIHByZXBhcmVSZWN0KCkuCi0gICAgICAgIEVYUEVDVF9F
UShtX3VwZGF0ZUNoZWNrTGF5ZXItPnByZXBhcmVSZWN0Q291bnQoKSwKLSAgICAgICAgICAgICAg
ICAgIG1fdXBkYXRlQ2hlY2tMYXllci0+dXBkYXRlUmVjdENvdW50KCkpOworICAgICAgICAvLyBw
dXNoUHJvcGVydGllc1RvKCkgc2hvdWxkIGhhdmUgYmVlbiBjYWxsZWQgdGhlIHNhbWUKKyAgICAg
ICAgLy8gYW1vdW50IG9mIHRpbWVzIGFzIHBhaW50Q29udGVudHMoKS4KKyAgICAgICAgRVhQRUNU
X0VRKG1fdXBkYXRlQ2hlY2tMYXllci0+cGFpbnRDb250ZW50c0NvdW50KCksCisgICAgICAgICAg
ICAgICAgICBtX3VwZGF0ZUNoZWNrTGF5ZXItPnB1c2hQcm9wZXJ0aWVzVG9Db3VudCgpKTsKIAog
ICAgICAgICAvLyBjbGVhciBtX3VwZGF0ZUNoZWNrTGF5ZXIgc28gQ0NMYXllclRyZWVIb3N0IGRp
ZXMuCiAgICAgICAgIG1fdXBkYXRlQ2hlY2tMYXllci5jbGVhcigpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DYW52YXMyRExheWVyQ2hyb21pdW1UZXN0LmNwcCBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ2FudmFzMkRMYXllckNocm9taXVtVGVzdC5j
cHAKaW5kZXggN2ExMzNkYS4uY2FmM2ExOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9DYW52YXMyRExheWVyQ2hyb21pdW1UZXN0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL0NhbnZhczJETGF5ZXJDaHJvbWl1bVRlc3QuY3BwCkBAIC04OCwx
MCArODgsMTMgQEAgY2xhc3MgTW9ja1VwZGF0ZUhhbmRsZXIgOiBwdWJsaWMgTGF5ZXJUZXh0dXJl
VXBkYXRlcjo6SGFuZGxlciB7CiBwdWJsaWM6CiAgICAgTW9ja1VwZGF0ZUhhbmRsZXIoR3JhcGhp
Y3NDb250ZXh0M0QqIGNvbnRleHQsIFRleHR1cmVBbGxvY2F0b3JCaW5kaW5nKiBhbGxvY2F0b3JC
aW5kaW5nKSA6IG1fY29udGV4dChjb250ZXh0KSwgbV9hbGxvY2F0b3JCaW5kaW5nKGFsbG9jYXRv
ckJpbmRpbmcpIHsgfQogCi0gICAgdmlydHVhbCB2b2lkIGhhbmRsZShMYXllclRleHR1cmVVcGRh
dGVyOjpUZXh0dXJlKiB0ZXh0dXJlLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJ
bnRSZWN0JiBkZXN0UmVjdCkKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlKExheWVyVGV4dHVyZVVw
ZGF0ZXI6OlRleHR1cmUqIHRleHR1cmUpCiAgICAgewotICAgICAgICB0ZXh0dXJlLT5wcmVwYXJl
UmVjdChzb3VyY2VSZWN0KTsKLSAgICAgICAgdGV4dHVyZS0+dXBkYXRlUmVjdChtX2NvbnRleHQs
IG1fYWxsb2NhdG9yQmluZGluZywgc291cmNlUmVjdCwgZGVzdFJlY3QpOworICAgICAgICBPd25Q
dHI8Q0NUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZVVwZGF0ZT4gdGV4dHVyZVVwZGF0ZSA9IHRleHR1
cmUtPmNyZWF0ZUNDVGV4dHVyZVVwZGF0ZSgpOworICAgICAgICBpZiAodGV4dHVyZVVwZGF0ZS5n
ZXQoKSkgeworICAgICAgICAgICAgdGV4dHVyZS0+cHVzaFByb3BlcnRpZXNUbyh0ZXh0dXJlVXBk
YXRlLmdldCgpKTsKKyAgICAgICAgICAgIHRleHR1cmVVcGRhdGUtPnVwZGF0ZShtX2NvbnRleHQs
IG1fYWxsb2NhdG9yQmluZGluZyk7CisgICAgICAgIH0KICAgICB9CiAKIHByaXZhdGU6CkBAIC0x
NDgsNyArMTUxLDYgQEAgcHJvdGVjdGVkOgogICAgICAgICAgICAgICAgIC8vIENyZWF0ZSB0ZXh0
dXJlIGFuZCBkbyB0aGUgY29weSAob24gdGhlIGltcGwgdGhyZWFkKS4KICAgICAgICAgICAgICAg
ICBFWFBFQ1RfQ0FMTCgqYWxsb2NhdG9yTW9jay5nZXQoKSwgY3JlYXRlVGV4dHVyZShzaXplLCBH
cmFwaGljc0NvbnRleHQzRDo6UkdCQSkpCiAgICAgICAgICAgICAgICAgICAgIC5XaWxsT25jZShS
ZXR1cm4oZnJvbnRUZXh0dXJlSWQpKTsKLSAgICAgICAgICAgICAgICBFWFBFQ1RfQ0FMTChpbXBs
TW9jaywgYmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIGZyb250VGV4
dHVyZUlkKSk7CiAgICAgICAgICAgICAgICAgRVhQRUNUX0NBTEwoaW1wbE1vY2ssIGJpbmRGcmFt
ZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIGZib0lkKSk7CiAgICAgICAg
ICAgICAgICAgRVhQRUNUX0NBTEwoaW1wbE1vY2ssIGZyYW1lYnVmZmVyVGV4dHVyZTJEKEdyYXBo
aWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFD
SE1FTlQwLCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgYmFja1RleHR1cmVJZCwgMCkp
OwogICAgICAgICAgICAgICAgIEVYUEVDVF9DQUxMKGltcGxNb2NrLCBjb3B5VGV4U3ViSW1hZ2Uy
RChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgMCwgMCwgMCwgMCwgMzAwLCAxNTAp
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVGlsZWRMYXllckNo
cm9taXVtVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RpbGVkTGF5ZXJD
aHJvbWl1bVRlc3QuY3BwCmluZGV4IDdkZjgzMjkuLjJkZDRlZDkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVGlsZWRMYXllckNocm9taXVtVGVzdC5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UaWxlZExheWVyQ2hyb21pdW1UZXN0LmNwcApA
QCAtMjYsNyArMjYsOCBAQAogCiAjaW5jbHVkZSAiVGlsZWRMYXllckNocm9taXVtLmgiCiAKLSNp
bmNsdWRlICJMYXllclRleHR1cmVVcGRhdGVyLmgiCisjaW5jbHVkZSAiQ2FudmFzTGF5ZXJUZXh0
dXJlVXBkYXRlci5oIgorI2luY2x1ZGUgIkxheWVyUGFpbnRlckNocm9taXVtLmgiCiAjaW5jbHVk
ZSAiTWFuYWdlZFRleHR1cmUuaCIKICNpbmNsdWRlICJUZXh0dXJlTWFuYWdlci5oIgogI2luY2x1
ZGUgImNjL0NDU2luZ2xlVGhyZWFkUHJveHkuaCIgLy8gRm9yIERlYnVnU2NvcGVkU2V0SW1wbFRo
cmVhZApAQCAtNDAsNyArNDEsNyBAQCBuYW1lc3BhY2UgewogCiBjbGFzcyBGYWtlSGFuZGxlciA6
IHB1YmxpYyBMYXllclRleHR1cmVVcGRhdGVyOjpIYW5kbGVyIHsKIHB1YmxpYzoKLSAgICB2aXJ0
dWFsIHZvaWQgaGFuZGxlKExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmUqLCBjb25zdCBJbnRS
ZWN0JiwgY29uc3QgSW50UmVjdCYpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBoYW5kbGUoTGF5ZXJU
ZXh0dXJlVXBkYXRlcjo6VGV4dHVyZSopIHsgfQogfTsKIAogY2xhc3MgRmFrZVRleHR1cmVBbGxv
Y2F0b3IgOiBwdWJsaWMgVGV4dHVyZUFsbG9jYXRvciB7CkBAIC01OCwyMSArNTksMzcgQEAgcHJp
dmF0ZToKIAogY2xhc3MgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bTsKIAotY2xhc3MgRmFrZUxheWVy
VGV4dHVyZVVwZGF0ZXIgOiBwdWJsaWMgTGF5ZXJUZXh0dXJlVXBkYXRlciB7CitjbGFzcyBGYWtl
TGF5ZXJUZXh0dXJlVXBkYXRlciA6IHB1YmxpYyBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyIHsK
IHB1YmxpYzoKLSAgICBjbGFzcyBUZXh0dXJlIDogcHVibGljIExheWVyVGV4dHVyZVVwZGF0ZXI6
OlRleHR1cmUgeworICAgIGNsYXNzIFBhaW50ZXIgOiBwdWJsaWMgTGF5ZXJQYWludGVyQ2hyb21p
dW0gewogICAgIHB1YmxpYzoKLSAgICAgICAgVGV4dHVyZShQYXNzT3duUHRyPE1hbmFnZWRUZXh0
dXJlPiB0ZXh0dXJlKSA6IG1fdGV4dHVyZSh0ZXh0dXJlKSB7IH0KLSAgICAgICAgdmlydHVhbCB+
VGV4dHVyZSgpIHsgfQorICAgICAgICBzdGF0aWMgUGFzc093blB0cjxQYWludGVyPiBjcmVhdGUo
KSB7IHJldHVybiBhZG9wdFB0cihuZXcgUGFpbnRlcigpKTsgfQogCi0gICAgICAgIHZpcnR1YWwg
TWFuYWdlZFRleHR1cmUqIHRleHR1cmUoKSB7IHJldHVybiBtX3RleHR1cmUuZ2V0KCk7IH0KLSAg
ICAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVJlY3QoR3JhcGhpY3NDb250ZXh0M0QqLCBUZXh0dXJl
QWxsb2NhdG9yQmluZGluZyosIGNvbnN0IEludFJlY3QmLCBjb25zdCBJbnRSZWN0JikgeyB9Cisg
ICAgICAgIHZpcnR1YWwgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQmLCBjb25zdCBJbnRSZWN0
JikKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
IH0KKyAgICB9OworICAgIGNsYXNzIFRleHR1cmUgOiBwdWJsaWMgQ2FudmFzTGF5ZXJUZXh0dXJl
VXBkYXRlcjo6VGV4dHVyZSB7CisgICAgcHVibGljOgorICAgICAgICBjbGFzcyBUZXh0dXJlVXBk
YXRlIDogcHVibGljIENDVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmVVcGRhdGUgeworICAgICAgICBw
dWJsaWM6CisgICAgICAgICAgICBzdGF0aWMgUGFzc093blB0cjxUZXh0dXJlVXBkYXRlPiBjcmVh
dGUoKSB7IHJldHVybiBhZG9wdFB0cihuZXcgVGV4dHVyZVVwZGF0ZSgpKTsgfQorCisgICAgICAg
ICAgICB2b2lkIHVwZGF0ZShHcmFwaGljc0NvbnRleHQzRCosIFRleHR1cmVBbGxvY2F0b3JCaW5k
aW5nKikgeyB9CisKKyAgICAgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICAgICAgZXhwbGlj
aXQgVGV4dHVyZVVwZGF0ZSgpIHsgfQorICAgICAgICAgICAgfTsKKworICAgICAgICBUZXh0dXJl
KFBhc3NPd25QdHI8TWFuYWdlZFRleHR1cmU+IHRleHR1cmUpIDogQ2FudmFzTGF5ZXJUZXh0dXJl
VXBkYXRlcjo6VGV4dHVyZSh0ZXh0dXJlKSB7IH0KKworICAgICAgICB2aXJ0dWFsIFBhc3NPd25Q
dHI8Q0NUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZVVwZGF0ZT4gY3JlYXRlQ0NUZXh0dXJlVXBkYXRl
KCkgeyByZXR1cm4gVGV4dHVyZVVwZGF0ZTo6Y3JlYXRlKCk7IH0KIAotICAgIHByaXZhdGU6Ci0g
ICAgICAgIE93blB0cjxNYW5hZ2VkVGV4dHVyZT4gbV90ZXh0dXJlOworICAgICAgICB2aXJ0dWFs
IHZvaWQgcHVzaFByb3BlcnRpZXNUbyhDQ1RleHR1cmVVcGRhdGVyOjpUZXh0dXJlVXBkYXRlKikg
eyB9CiAgICAgfTsKIAotICAgIEZha2VMYXllclRleHR1cmVVcGRhdGVyKCkgOiBtX3BhaW50Q291
bnQoMCkgeyB9CisgICAgRmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKSA6IENhbnZhc0xheWVyVGV4
dHVyZVVwZGF0ZXIoUGFpbnRlcjo6Y3JlYXRlKCkpLCBtX3BhaW50Q291bnQoMCkgeyB9CiAgICAg
dmlydHVhbCB+RmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKSB7IH0KIAogICAgIC8vIFNldHMgdGhl
IHJlY3QgdG8gaW52YWxpZGF0ZSBkdXJpbmcgdGhlIG5leHQgY2FsbCB0byBwcmVwYXJlVG9VcGRh
dGUoKS4gQWZ0ZXIgdGhlIG5leHQKQEAgLTg2LDcgKzEwMyw3IEBAIHB1YmxpYzoKICAgICAvLyBM
YXN0IHJlY3QgcGFzc2VkIHRvIHByZXBhcmVUb1VwZGF0ZSgpLgogICAgIGNvbnN0IEludFJlY3Qm
IGxhc3RVcGRhdGVSZWN0KCkgIGNvbnN0IHsgcmV0dXJuIG1fbGFzdFVwZGF0ZVJlY3Q7IH0KIAot
ICAgIHZpcnR1YWwgUGFzc093blB0cjxMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlPiBjcmVh
dGVUZXh0dXJlKFRleHR1cmVNYW5hZ2VyKiBtYW5hZ2VyKSB7IHJldHVybiBhZG9wdFB0cihuZXcg
VGV4dHVyZShNYW5hZ2VkVGV4dHVyZTo6Y3JlYXRlKG1hbmFnZXIpKSk7IH0KKyAgICB2aXJ0dWFs
IFBhc3NPd25QdHI8Q2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZT4gY3JlYXRlVGV4
dHVyZShUZXh0dXJlTWFuYWdlciogbWFuYWdlcikgeyByZXR1cm4gYWRvcHRQdHIobmV3IFRleHR1
cmUoTWFuYWdlZFRleHR1cmU6OmNyZWF0ZShtYW5hZ2VyKSkpOyB9CiAgICAgdmlydHVhbCBTYW1w
bGVkVGV4ZWxGb3JtYXQgc2FtcGxlZFRleGVsRm9ybWF0KEdDM0RlbnVtKSB7IHJldHVybiBTYW1w
bGVkVGV4ZWxGb3JtYXRSR0JBOyB9CiAgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHMoY29u
c3QgSW50UmVjdCYsIGNvbnN0IEludFNpemUmLCBpbnQsIGZsb2F0LCBJbnRSZWN0Kik7CiAKQEAg
LTE2Niw3ICsxODMsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBjcmVh
dGVUZXh0dXJlVXBkYXRlcihjb25zdCBDQ0xheWVyVHJlZUhvc3QqKSB7IH0KIAotICAgIHZpcnR1
YWwgTGF5ZXJUZXh0dXJlVXBkYXRlciogdGV4dHVyZVVwZGF0ZXIoKSBjb25zdAorICAgIHZpcnR1
YWwgQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlciogdGV4dHVyZVVwZGF0ZXIoKSBjb25zdAogICAg
IHsKICAgICAgICAgcmV0dXJuIG1fZmFrZVRleHR1cmVVcGRhdGVyLmdldCgpOwogICAgIH0K
</data>

          </attachment>
      

    </bug>

</bugzilla>