<?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>218803</bug_id>
          
          <creation_ts>2020-11-11 08:15:39 -0800</creation_ts>
          <short_desc>REGRESSION(r269680): Broke a webgl test on ios-wk2</short_desc>
          <delta_ts>2020-11-11 08:18:23 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>218178</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="WebKit Commit Bot">commit-queue</reporter>
          <assigned_to name="WebKit Commit Bot">commit-queue</assigned_to>
          <cc>aakash_jain</cc>
    
    <cc>dino</cc>
    
    <cc>kimmo.t.kinnunen</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1706457</commentid>
    <comment_count>0</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2020-11-11 08:15:39 -0800</bug_when>
    <thetext>https://trac.webkit.org/changeset/269680 broke the build:
Broke a webgl test on ios-wk2

This is an automatic bug report generated by webkitbot. If this bug
report was created because of a flaky test, please file a bug for the flaky
test (if we don&apos;t already have one on file) and dup this bug against that bug
so that we can track how often these flaky tests fail.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1706459</commentid>
    <comment_count>1</comment_count>
      <attachid>413822</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2020-11-11 08:15:46 -0800</bug_when>
    <thetext>Created attachment 413822
REVERT of r269680

Any committer can land this patch automatically by marking it commit-queue+.  The commit-queue will build and test the patch before landing to ensure that the revert will be successful.  This process takes approximately 15 minutes.

If you would like to land the revert faster, you can use the following command:

  webkit-patch land-attachment ATTACHMENT_ID

where ATTACHMENT_ID is the ID of this attachment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1706460</commentid>
    <comment_count>2</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-11-11 08:17:53 -0800</bug_when>
    <thetext>Committed r269686: &lt;https://trac.webkit.org/changeset/269686&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 413822.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1706461</commentid>
    <comment_count>3</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-11-11 08:18:23 -0800</bug_when>
    <thetext>&lt;rdar://problem/71283794&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>413822</attachid>
            <date>2020-11-11 08:15:46 -0800</date>
            <delta_ts>2020-11-11 08:17:54 -0800</delta_ts>
            <desc>REVERT of r269680</desc>
            <filename>bug-218803-20201111161545.patch</filename>
            <type>text/plain</type>
            <size>166677</size>
            <attacher name="WebKit Commit Bot">commit-queue</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY5Njg1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmIyMDE4MTcyZTg3YjI1
OWIzOGExODgxM2NjMzk5NzU2NDQ1YTNiOC4uZTdhNTUyYWUxMmZlOWIzYWE2ZDZjOTJiODlkZWEy
ZmY2MzczMjYzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDIwLTExLTExICBDb21t
aXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Via2l0Lm9yZz4KKworICAgICAgICBVbnJldmlld2Vk
LCByZXZlcnRpbmcgcjI2OTY4MC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIxODgwMworCisgICAgICAgIEJyb2tlIGEgd2ViZ2wgdGVzdCBvbiBpb3Mt
d2syCisKKyAgICAgICAgUmV2ZXJ0ZWQgY2hhbmdlc2V0OgorCisgICAgICAgICJSZW1vdmUgdXNl
cyBvZiBNYWtlQ3VycmVudCBmcm9tIFdlYkdMIGltcGxlbWVudGF0aW9uIgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE4MTc4CisgICAgICAgIGh0dHBz
Oi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC8yNjk2ODAKKwogMjAyMC0xMS0xMSAgQWRyaWFu
IFBlcmV6IGRlIENhc3RybyAgPGFwZXJlekBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHU3RyZWFt
ZXJdIEZpeCBidWlsZCBkdWUgdG8gdW5oYW5kbGVkIEF1ZGlvQ29uZmlndXJhdGlvbiBPcHRpb25h
bDxUPiBtZW1iZXJzIGludHJvZHVjZWQgaW4gcjI2OTYzMQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAppbmRleCA5
YTg3NjkzZGExNzk5OGY3YTZiMjgyZGFiZmQxZDcxZmVjN2I1NjUxLi5hMTdjZDc1NTllOWYzNmQ5
YTViNTI3ZTQ0M2VmOTAzMDE5MTFlZTJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcApAQCAtNzExLDcgKzcx
MSw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlPiBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjpjcmVhdGUoQ2FuCiAgICAgfQogCiAgICAgYXV0byBjb250ZXh0
ID0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZShhdHRyaWJ1dGVzLCBob3N0V2luZG93
KTsKLSAgICBpZiAoIWNvbnRleHQpIHsKKyAgICBpZiAoIWNvbnRleHQgfHwgIWNvbnRleHQtPm1h
a2VDb250ZXh0Q3VycmVudCgpKSB7CiAgICAgICAgIGlmIChjYW52YXNFbGVtZW50KSB7CiAgICAg
ICAgICAgICBjYW52YXNFbGVtZW50LT5kaXNwYXRjaEV2ZW50KFdlYkdMQ29udGV4dEV2ZW50Ojpj
cmVhdGUoZXZlbnROYW1lcygpLndlYmdsY29udGV4dGNyZWF0aW9uZXJyb3JFdmVudCwKICAgICAg
ICAgICAgICAgICBFdmVudDo6Q2FuQnViYmxlOjpObywgRXZlbnQ6OklzQ2FuY2VsYWJsZTo6WWVz
LCAiQ291bGQgbm90IGNyZWF0ZSBhIFdlYkdMIGNvbnRleHQuIikpOwpAQCAtNDM0OSwxMCArNDM0
OSw5IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6cmVhZFBpeGVscyhHQ0dMaW50
IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoCiAgICAgdm9pZCogZGF0YSA9IHBpeGVscy5i
YXNlQWRkcmVzcygpOwogCiAjaWYgVVNFKEFOR0xFKQotICAgIEdDR0xzaXplaSBsZW5ndGggPSAw
OwotICAgIEdDR0xzaXplaSBjb2x1bW5zID0gMDsKLSAgICBHQ0dMc2l6ZWkgcm93cyA9IDA7Ci0g
ICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCkucmVhZG5QaXhlbHNSb2J1c3RBTkdMRSh4LCB5
LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHBpeGVscy5ieXRlTGVuZ3RoKCksICZsZW5n
dGgsICZjb2x1bW5zLCAmcm93cywgZGF0YSwgZmFsc2UpOworICAgICAgICBHQ0dMc2l6ZWkgbGVu
Z3RoLCBjb2x1bW5zLCByb3dzOworICAgICAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS5yZWFkblBpeGVsc1JvYnVz
dEFOR0xFKHgsIHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzLmJ5dGVMZW5n
dGgoKSwgJmxlbmd0aCwgJmNvbHVtbnMsICZyb3dzLCBkYXRhLCBmYWxzZSk7CiAjZWxzZQogICAg
IGlmIChtX2lzUm9idXN0bmVzc0VYVFN1cHBvcnRlZCkKICAgICAgICAgbV9jb250ZXh0LT5nZXRF
eHRlbnNpb25zKCkucmVhZG5QaXhlbHNFWFQoeCwgeSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0
eXBlLCBwaXhlbHMuYnl0ZUxlbmd0aCgpLCBkYXRhKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0V4dGVuc2lvbnNHTEFOR0xFLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0V4dGVuc2lvbnNHTEFOR0xFLmNwcApp
bmRleCAxM2ZhZjVkYjY0ZmZiMjg2YmU2YWQ5NTc5NTA5NWZjYzkzZjMzMzk0Li40YjRkZmJiM2Y3
M2M1ZjJkMjdiZjE3ZjkyNTU5YTZmODdhYzU1ZDJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9FeHRlbnNpb25zR0xBTkdMRS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvRXh0ZW5zaW9uc0dMQU5HTEUuY3Bw
CkBAIC03NCwxMSArNzQsOSBAQCBFeHRlbnNpb25zR0xBTkdMRTo6fkV4dGVuc2lvbnNHTEFOR0xF
KCkgPSBkZWZhdWx0OwogCiBib29sIEV4dGVuc2lvbnNHTEFOR0xFOjpzdXBwb3J0cyhjb25zdCBT
dHJpbmcmIG5hbWUpCiB7Ci0gICAgaWYgKCFtX2luaXRpYWxpemVkQXZhaWxhYmxlRXh0ZW5zaW9u
cykgewotICAgICAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFtX2luaXRpYWxpemVkQXZhaWxhYmxlRXh0
ZW5zaW9ucykKICAgICAgICAgaW5pdGlhbGl6ZUF2YWlsYWJsZUV4dGVuc2lvbnMoKTsKLSAgICB9
CisKICAgICByZXR1cm4gc3VwcG9ydHNFeHRlbnNpb24obmFtZSk7CiB9CiAKQEAgLTg2LDggKzg0
LDcgQEAgdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6ZW5zdXJlRW5hYmxlZChjb25zdCBTdHJpbmcm
IG5hbWUpCiB7CiAgICAgLy8gRW5hYmxlIHN1cHBvcnQgaW4gQU5HTEUgKGlmIG5vdCBlbmFibGVk
IGFscmVhZHkpLgogICAgIGlmIChtX3JlcXVlc3RhYmxlRXh0ZW5zaW9ucy5jb250YWlucyhuYW1l
KSAmJiAhbV9lbmFibGVkRXh0ZW5zaW9ucy5jb250YWlucyhuYW1lKSkgewotICAgICAgICBpZiAo
IW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgICAgIGdsOjpSZXF1
ZXN0RXh0ZW5zaW9uQU5HTEUobmFtZS5hc2NpaSgpLmRhdGEoKSk7CiAgICAgICAgIG1fZW5hYmxl
ZEV4dGVuc2lvbnMuYWRkKG5hbWUpOwogCkBAIC0xMTAsOSArMTA3LDcgQEAgaW50IEV4dGVuc2lv
bnNHTEFOR0xFOjpnZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKCkKIAogU3RyaW5nIEV4dGVuc2lv
bnNHTEFOR0xFOjpnZXRUcmFuc2xhdGVkU2hhZGVyU291cmNlQU5HTEUoUGxhdGZvcm1HTE9iamVj
dCBzaGFkZXIpCiB7Ci0gICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQot
ICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KKyAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3Vy
cmVudCgpOwogICAgIGludCBzb3VyY2VMZW5ndGggPSAwOwogICAgIG1fY29udGV4dC0+Z2V0U2hh
ZGVyaXYoc2hhZGVyLCBHTF9UUkFOU0xBVEVEX1NIQURFUl9TT1VSQ0VfTEVOR1RIX0FOR0xFLCAm
c291cmNlTGVuZ3RoKTsKICAgICBpZiAoIXNvdXJjZUxlbmd0aCkKQEAgLTE2NiwyNSArMTYxLDE5
IEBAIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmdldG5Vbmlmb3JtaXZFWFQoR0NHTHVpbnQsIGlu
dCwgR0NHTHNpemVpLCBpbnQgKikKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmJsaXRGcmFtZWJ1
ZmZlcihsb25nIHNyY1gwLCBsb25nIHNyY1kwLCBsb25nIHNyY1gxLCBsb25nIHNyY1kxLCBsb25n
IGRzdFgwLCBsb25nIGRzdFkwLCBsb25nIGRzdFgxLCBsb25nIGRzdFkxLCB1bnNpZ25lZCBsb25n
IG1hc2ssIHVuc2lnbmVkIGxvbmcgZmlsdGVyKQogewogICAgIC8vIEZJWE1FOiBjb25zaWRlciBh
ZGRpbmcgc3VwcG9ydCBmb3IgQVBQTEVfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUuCi0gICAgaWYg
KCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KKyAg
ICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIGdsOjpCbGl0RnJhbWVidWZm
ZXJBTkdMRShzcmNYMCwgc3JjWTAsIHNyY1gxLCBzcmNZMSwgZHN0WDAsIGRzdFkwLCBkc3RYMSwg
ZHN0WTEsIG1hc2ssIGZpbHRlcik7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OnJlbmRl
cmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQg
bG9uZyBzYW1wbGVzLCB1bnNpZ25lZCBsb25nIGludGVybmFsZm9ybWF0LCB1bnNpZ25lZCBsb25n
IHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCkKIHsKLSAgICBpZiAoIW1fY29udGV4dC0+bWFr
ZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQorICAgIG1fY29udGV4dC0+bWFr
ZUNvbnRleHRDdXJyZW50KCk7CiAgICAgZ2w6OlJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBs
ZUFOR0xFKHRhcmdldCwgc2FtcGxlcywgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwog
fQogCiBQbGF0Zm9ybUdMT2JqZWN0IEV4dGVuc2lvbnNHTEFOR0xFOjpjcmVhdGVWZXJ0ZXhBcnJh
eU9FUygpCiB7Ci0gICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQotICAg
ICAgICByZXR1cm4gMDsKLQorICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CiAg
ICAgR0x1aW50IGFycmF5ID0gMDsKICAgICBnbDo6R2VuVmVydGV4QXJyYXlzT0VTKDEsICZhcnJh
eSk7CiAgICAgcmV0dXJuIGFycmF5OwpAQCAtMTk1LDkgKzE4NCw3IEBAIHZvaWQgRXh0ZW5zaW9u
c0dMQU5HTEU6OmRlbGV0ZVZlcnRleEFycmF5T0VTKFBsYXRmb3JtR0xPYmplY3QgYXJyYXkpCiAg
ICAgaWYgKCFhcnJheSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFtX2NvbnRleHQtPm1h
a2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KKyAgICBtX2NvbnRleHQtPm1h
a2VDb250ZXh0Q3VycmVudCgpOwogICAgIGdsOjpEZWxldGVWZXJ0ZXhBcnJheXNPRVMoMSwgJmFy
cmF5KTsKIH0KIApAQCAtMjA2LDE3ICsxOTMsMTMgQEAgR0NHTGJvb2xlYW4gRXh0ZW5zaW9uc0dM
QU5HTEU6OmlzVmVydGV4QXJyYXlPRVMoUGxhdGZvcm1HTE9iamVjdCBhcnJheSkKICAgICBpZiAo
IWFycmF5KQogICAgICAgICByZXR1cm4gR0xfRkFMU0U7CiAKLSAgICBpZiAoIW1fY29udGV4dC0+
bWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiBHTF9GQUxTRTsKLQorICAgIG1f
Y29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgcmV0dXJuIGdsOjpJc1ZlcnRleEFy
cmF5T0VTKGFycmF5KTsKIH0KIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6YmluZFZlcnRleEFy
cmF5T0VTKFBsYXRmb3JtR0xPYmplY3QgYXJyYXkpCiB7Ci0gICAgaWYgKCFtX2NvbnRleHQtPm1h
a2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KKyAgICBtX2NvbnRleHQtPm1h
a2VDb250ZXh0Q3VycmVudCgpOwogICAgIGdsOjpCaW5kVmVydGV4QXJyYXlPRVMoYXJyYXkpOwog
fQogCkBAIC0yNDUsMzMgKzIyOCwyNSBAQCBib29sIEV4dGVuc2lvbnNHTEFOR0xFOjpzdXBwb3J0
c0V4dGVuc2lvbihjb25zdCBTdHJpbmcmIG5hbWUpCiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6
OmRyYXdCdWZmZXJzRVhUKEdDR0xzaXplaSBuLCBjb25zdCBHQ0dMZW51bSogYnVmcykKIHsKLSAg
ICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsK
LQorICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgZ2w6OkRyYXdCdWZm
ZXJzRVhUKG4sIGJ1ZnMpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpkcmF3QXJyYXlz
SW5zdGFuY2VkKEdDR0xlbnVtIG1vZGUsIEdDR0xpbnQgZmlyc3QsIEdDR0xzaXplaSBjb3VudCwg
R0NHTHNpemVpIHByaW1jb3VudCkKIHsKLSAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRD
dXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQorICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRD
dXJyZW50KCk7CiAgICAgZ2w6OkRyYXdBcnJheXNJbnN0YW5jZWRBTkdMRShtb2RlLCBmaXJzdCwg
Y291bnQsIHByaW1jb3VudCk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmRyYXdFbGVt
ZW50c0luc3RhbmNlZChHQ0dMZW51bSBtb2RlLCBHQ0dMc2l6ZWkgY291bnQsIEdDR0xlbnVtIHR5
cGUsIGxvbmcgbG9uZyBvZmZzZXQsIEdDR0xzaXplaSBwcmltY291bnQpCiB7Ci0gICAgaWYgKCFt
X2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KKyAgICBt
X2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIGdsOjpEcmF3RWxlbWVudHNJbnN0
YW5jZWRBTkdMRShtb2RlLCBjb3VudCwgdHlwZSwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihz
dGF0aWNfY2FzdDxpbnRwdHJfdD4ob2Zmc2V0KSksIHByaW1jb3VudCk7CiB9CiAKIHZvaWQgRXh0
ZW5zaW9uc0dMQU5HTEU6OnZlcnRleEF0dHJpYkRpdmlzb3IoR0NHTHVpbnQgaW5kZXgsIEdDR0x1
aW50IGRpdmlzb3IpCiB7Ci0gICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgp
KQotICAgICAgICByZXR1cm47Ci0KKyAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgp
OwogICAgIGdsOjpWZXJ0ZXhBdHRyaWJEaXZpc29yQU5HTEUoaW5kZXgsIGRpdmlzb3IpOwogfQog
CkBAIC0yOTYsMTI5ICsyNzEsOTcgQEAgR0NHTGVudW0gRXh0ZW5zaW9uc0dMQU5HTEU6OmFkanVz
dFdlYkdMMVRleHR1cmVJbnRlcm5hbEZvcm1hdChHQ0dMZW51bSBpbnRlcm5hbGYKIC8vIEdMX0FO
R0xFX3JvYnVzdF9jbGllbnRfbWVtb3J5CiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRCb29s
ZWFudlJvYnVzdEFOR0xFKEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNp
emVpICpsZW5ndGgsIEdDR0xib29sZWFuICpkYXRhKQogewotICAgIGlmICghbV9jb250ZXh0LT5t
YWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCisgICAgbV9jb250ZXh0LT5t
YWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBnbDo6R2V0Qm9vbGVhbnZSb2J1c3RBTkdMRShwbmFt
ZSwgYnVmU2l6ZSwgbGVuZ3RoLCBkYXRhKTsKIH0KIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6
Z2V0QnVmZmVyUGFyYW1ldGVyaXZSb2J1c3RBTkdMRShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVt
IHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdDR0xpbnQgKnBh
cmFtcykKIHsKLSAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAg
ICAgIHJldHVybjsKLQorICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAg
Z2w6OkdldEJ1ZmZlclBhcmFtZXRlcml2Um9idXN0QU5HTEUodGFyZ2V0LCBwbmFtZSwgYnVmU2l6
ZSwgbGVuZ3RoLCBwYXJhbXMpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRGbG9h
dHZSb2J1c3RBTkdMRShHQ0dMZW51bSBwbmFtZSwgR0NHTHNpemVpIGJ1ZlNpemUsIEdDR0xzaXpl
aSAqbGVuZ3RoLCBHQ0dMZmxvYXQgKmRhdGEpCiB7Ci0gICAgaWYgKCFtX2NvbnRleHQtPm1ha2VD
b250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KKyAgICBtX2NvbnRleHQtPm1ha2VD
b250ZXh0Q3VycmVudCgpOwogICAgIGdsOjpHZXRGbG9hdHZSb2J1c3RBTkdMRShwbmFtZSwgYnVm
U2l6ZSwgbGVuZ3RoLCBkYXRhKTsKIH0KIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6Z2V0RnJh
bWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXZSb2J1c3RBTkdMRShHQ0dMZW51bSB0YXJnZXQs
IEdDR0xlbnVtIGF0dGFjaG1lbnQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwg
R0NHTHNpemVpICpsZW5ndGgsIEdDR0xpbnQgKnBhcmFtcykKIHsKLSAgICBpZiAoIW1fY29udGV4
dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQorICAgIG1fY29udGV4
dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgZ2w6OkdldEZyYW1lYnVmZmVyQXR0YWNobWVu
dFBhcmFtZXRlcml2Um9idXN0QU5HTEUodGFyZ2V0LCBhdHRhY2htZW50LCBwbmFtZSwgYnVmU2l6
ZSwgbGVuZ3RoLCBwYXJhbXMpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRJbnRl
Z2VydlJvYnVzdEFOR0xFKEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNp
emVpICpsZW5ndGgsIEdDR0xpbnQgKmRhdGEpCiB7Ci0gICAgaWYgKCFtX2NvbnRleHQtPm1ha2VD
b250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KKyAgICBtX2NvbnRleHQtPm1ha2VD
b250ZXh0Q3VycmVudCgpOwogICAgIGdsOjpHZXRJbnRlZ2VydlJvYnVzdEFOR0xFKHBuYW1lLCBi
dWZTaXplLCBsZW5ndGgsIGRhdGEpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRQ
cm9ncmFtaXZSb2J1c3RBTkdMRShHQ0dMdWludCBwcm9ncmFtLCBHQ0dMZW51bSBwbmFtZSwgR0NH
THNpemVpIGJ1ZlNpemUsIEdDR0xzaXplaSAqbGVuZ3RoLCBHQ0dMaW50ICpwYXJhbXMpCiB7Ci0g
ICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47
Ci0KKyAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIGdsOjpHZXRQcm9n
cmFtaXZSb2J1c3RBTkdMRShwcm9ncmFtLCBwbmFtZSwgYnVmU2l6ZSwgbGVuZ3RoLCBwYXJhbXMp
OwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJp
dlJvYnVzdEFOR0xFKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUsIEdDR0xzaXplaSBi
dWZTaXplLCBHQ0dMc2l6ZWkgKmxlbmd0aCwgR0NHTGludCAqcGFyYW1zKQogewotICAgIGlmICgh
bV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCisgICAg
bV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBnbDo6R2V0UmVuZGVyYnVmZmVy
UGFyYW1ldGVyaXZSb2J1c3RBTkdMRSh0YXJnZXQsIHBuYW1lLCBidWZTaXplLCBsZW5ndGgsIHBh
cmFtcyk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmdldFNoYWRlcml2Um9idXN0QU5H
TEUoR0NHTHVpbnQgc2hhZGVyLCBHQ0dMZW51bSBwbmFtZSwgR0NHTHNpemVpIGJ1ZlNpemUsIEdD
R0xzaXplaSAqbGVuZ3RoLCBHQ0dMaW50ICpwYXJhbXMpCiB7Ci0gICAgaWYgKCFtX2NvbnRleHQt
Pm1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KKyAgICBtX2NvbnRleHQt
Pm1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIGdsOjpHZXRTaGFkZXJpdlJvYnVzdEFOR0xFKHNo
YWRlciwgcG5hbWUsIGJ1ZlNpemUsIGxlbmd0aCwgcGFyYW1zKTsKIH0KIAogdm9pZCBFeHRlbnNp
b25zR0xBTkdMRTo6Z2V0VGV4UGFyYW1ldGVyZnZSb2J1c3RBTkdMRShHQ0dMZW51bSB0YXJnZXQs
IEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdD
R0xmbG9hdCAqcGFyYW1zKQogewotICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJl
bnQoKSkKLSAgICAgICAgcmV0dXJuOwotCisgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJl
bnQoKTsKICAgICBnbDo6R2V0VGV4UGFyYW1ldGVyZnZSb2J1c3RBTkdMRSh0YXJnZXQsIHBuYW1l
LCBidWZTaXplLCBsZW5ndGgsIHBhcmFtcyk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6
OmdldFRleFBhcmFtZXRlcml2Um9idXN0QU5HTEUoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBw
bmFtZSwgR0NHTHNpemVpIGJ1ZlNpemUsIEdDR0xzaXplaSAqbGVuZ3RoLCBHQ0dMaW50ICpwYXJh
bXMpCiB7Ci0gICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAg
ICByZXR1cm47Ci0KKyAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIGds
OjpHZXRUZXhQYXJhbWV0ZXJpdlJvYnVzdEFOR0xFKHRhcmdldCwgcG5hbWUsIGJ1ZlNpemUsIGxl
bmd0aCwgcGFyYW1zKTsKIH0KIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6Z2V0VW5pZm9ybWZ2
Um9idXN0QU5HTEUoR0NHTHVpbnQgcHJvZ3JhbSwgaW50IGxvY2F0aW9uLCBHQ0dMc2l6ZWkgYnVm
U2l6ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdDR0xmbG9hdCAqcGFyYW1zKQogewotICAgIGlmICgh
bV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCisgICAg
bV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBnbDo6R2V0VW5pZm9ybWZ2Um9i
dXN0QU5HTEUocHJvZ3JhbSwgbG9jYXRpb24sIGJ1ZlNpemUsIGxlbmd0aCwgcGFyYW1zKTsKIH0K
IAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6Z2V0VW5pZm9ybWl2Um9idXN0QU5HTEUoR0NHTHVp
bnQgcHJvZ3JhbSwgaW50IGxvY2F0aW9uLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICps
ZW5ndGgsIEdDR0xpbnQgKnBhcmFtcykKIHsKLSAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRl
eHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQorICAgIG1fY29udGV4dC0+bWFrZUNvbnRl
eHRDdXJyZW50KCk7CiAgICAgZ2w6OkdldFVuaWZvcm1pdlJvYnVzdEFOR0xFKHByb2dyYW0sIGxv
Y2F0aW9uLCBidWZTaXplLCBsZW5ndGgsIHBhcmFtcyk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dM
QU5HTEU6OmdldFZlcnRleEF0dHJpYmZ2Um9idXN0QU5HTEUoR0NHTHVpbnQgaW5kZXgsIEdDR0xl
bnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdDR0xmbG9h
dCAqcGFyYW1zKQogewotICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkK
LSAgICAgICAgcmV0dXJuOwotCisgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsK
ICAgICBnbDo6R2V0VmVydGV4QXR0cmliZnZSb2J1c3RBTkdMRShpbmRleCwgcG5hbWUsIGJ1ZlNp
emUsIGxlbmd0aCwgcGFyYW1zKTsKIH0KIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6Z2V0VmVy
dGV4QXR0cmliaXZSb2J1c3RBTkdMRShHQ0dMdWludCBpbmRleCwgR0NHTGVudW0gcG5hbWUsIEdD
R0xzaXplaSBidWZTaXplLCBHQ0dMc2l6ZWkgKmxlbmd0aCwgR0NHTGludCAqcGFyYW1zKQogewot
ICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJu
OwotCisgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBnbDo6R2V0VmVy
dGV4QXR0cmliaXZSb2J1c3RBTkdMRShpbmRleCwgcG5hbWUsIGJ1ZlNpemUsIGxlbmd0aCwgcGFy
YW1zKTsKIH0KIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6Z2V0VmVydGV4QXR0cmliUG9pbnRl
cnZSb2J1c3RBTkdMRShHQ0dMdWludCBpbmRleCwgR0NHTGVudW0gcG5hbWUsIEdDR0xzaXplaSBi
dWZTaXplLCBHQ0dMc2l6ZWkgKmxlbmd0aCwgdm9pZCAqKnBvaW50ZXIpCiB7Ci0gICAgaWYgKCFt
X2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KKyAgICBt
X2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIGdsOjpHZXRWZXJ0ZXhBdHRyaWJQ
b2ludGVydlJvYnVzdEFOR0xFKGluZGV4LCBwbmFtZSwgYnVmU2l6ZSwgbGVuZ3RoLCBwb2ludGVy
KTsKIH0KIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6cmVhZFBpeGVsc1JvYnVzdEFOR0xFKGlu
dCB4LCBpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBm
b3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xzaXplaSBidWZTaXplLCBHQ0dMc2l6ZWkgKmxlbmd0
aCwgR0NHTHNpemVpICpjb2x1bW5zLCBHQ0dMc2l6ZWkgKnJvd3MsIHZvaWQgKnBpeGVscykKIHsK
LSAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVy
bjsKLQorICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgZ2w6OlJlYWRQ
aXhlbHNSb2J1c3RBTkdMRSh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGJ1ZlNp
emUsIGxlbmd0aCwgY29sdW1ucywgcm93cywgcGl4ZWxzKTsKIH0KIApAQCAtNDI2LDI2OCArMzY5
LDIwMiBAQCB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjp0ZXhJbWFnZTJEUm9idXN0QU5HTEUoR0NH
TGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCBpbgogewogICAgIGlmICghbV9jb250ZXh0LT5t
X2lzRm9yV2ViR0wyKQogICAgICAgICBpbnRlcm5hbGZvcm1hdCA9IGFkanVzdFdlYkdMMVRleHR1
cmVJbnRlcm5hbEZvcm1hdChpbnRlcm5hbGZvcm1hdCwgZm9ybWF0LCB0eXBlKTsKLSAgICBpZiAo
IW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQorICAg
IG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgZ2w6OlRleEltYWdlMkRSb2J1
c3RBTkdMRSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9y
ZGVyLCBmb3JtYXQsIHR5cGUsIGJ1ZlNpemUsIHBpeGVscyk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9u
c0dMQU5HTEU6OnRleFBhcmFtZXRlcmZ2Um9idXN0QU5HTEUoR0NHTGVudW0gdGFyZ2V0LCBHQ0dM
ZW51bSBwbmFtZSwgR0NHTHNpemVpIGJ1ZlNpemUsIGNvbnN0IEdDR0xmbG9hdCAqcGFyYW1zKQog
ewotICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0
dXJuOwotCisgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBnbDo6VGV4
UGFyYW1ldGVyZnZSb2J1c3RBTkdMRSh0YXJnZXQsIHBuYW1lLCBidWZTaXplLCBwYXJhbXMpOwog
fQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjp0ZXhQYXJhbWV0ZXJpdlJvYnVzdEFOR0xFKEdD
R0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUsIEdDR0xzaXplaSBidWZTaXplLCBjb25zdCBH
Q0dMaW50ICpwYXJhbXMpCiB7Ci0gICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVu
dCgpKQotICAgICAgICByZXR1cm47Ci0KKyAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVu
dCgpOwogICAgIGdsOjpUZXhQYXJhbWV0ZXJpdlJvYnVzdEFOR0xFKHRhcmdldCwgcG5hbWUsIGJ1
ZlNpemUsIHBhcmFtcyk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OnRleFN1YkltYWdl
MkRSb2J1c3RBTkdMRShHQ0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwgaW50IHhvZmZzZXQsIGlu
dCB5b2Zmc2V0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZv
cm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTHNpemVpIGJ1ZlNpemUsIGNvbnN0IHZvaWQgKnBpeGVs
cykKIHsKLSAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAg
IHJldHVybjsKLQorICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgZ2w6
OlRleFN1YkltYWdlMkRSb2J1c3RBTkdMRSh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0
LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGJ1ZlNpemUsIHBpeGVscyk7CiB9CiAKIHZv
aWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmNvbXByZXNzZWRUZXhJbWFnZTJEUm9idXN0QU5HTEUoR0NH
TGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6
ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIGludCBib3JkZXIsIEdDR0xzaXplaSBpbWFnZVNp
emUsIEdDR0xzaXplaSBidWZTaXplLCBjb25zdCB2b2lkKiBkYXRhKQogewotICAgIGlmICghbV9j
b250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCisgICAgbV9j
b250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBnbDo6Q29tcHJlc3NlZFRleEltYWdl
MkRSb2J1c3RBTkdMRSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdo
dCwgYm9yZGVyLCBpbWFnZVNpemUsIGJ1ZlNpemUsIGRhdGEpOwogfQogCiB2b2lkIEV4dGVuc2lv
bnNHTEFOR0xFOjpjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRFJvYnVzdEFOR0xFKEdDR0xlbnVtIHRh
cmdldCwgaW50IGxldmVsLCBpbnQgeG9mZnNldCwgaW50IHlvZmZzZXQsIEdDR0xzaXplaSB3aWR0
aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMc2l6ZWkgaW1hZ2VTaXpl
LCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgY29uc3Qgdm9pZCogZGF0YSkKIHsKLSAgICBpZiAoIW1fY29u
dGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQorICAgIG1fY29u
dGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgZ2w6OkNvbXByZXNzZWRUZXhTdWJJbWFn
ZTJEUm9idXN0QU5HTEUodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhl
aWdodCwgZm9ybWF0LCBpbWFnZVNpemUsIGJ1ZlNpemUsIGRhdGEpOwogfQogCiB2b2lkIEV4dGVu
c2lvbnNHTEFOR0xFOjpjb21wcmVzc2VkVGV4SW1hZ2UzRFJvYnVzdEFOR0xFKEdDR0xlbnVtIHRh
cmdldCwgaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRo
LCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgsIGludCBib3JkZXIsIEdDR0xzaXpl
aSBpbWFnZVNpemUsIEdDR0xzaXplaSBidWZTaXplLCBjb25zdCB2b2lkKiBkYXRhKQogewotICAg
IGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwot
CisgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBnbDo6Q29tcHJlc3Nl
ZFRleEltYWdlM0RSb2J1c3RBTkdMRSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lk
dGgsIGhlaWdodCwgZGVwdGgsIGJvcmRlciwgaW1hZ2VTaXplLCBidWZTaXplLCBkYXRhKTsKIH0K
IAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6Y29tcHJlc3NlZFRleFN1YkltYWdlM0RSb2J1c3RB
TkdMRShHQ0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwgaW50IHhvZmZzZXQsIGludCB5b2Zmc2V0
LCBpbnQgem9mZnNldCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6
ZWkgZGVwdGgsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTHNpemVpIGltYWdlU2l6ZSwgR0NHTHNpemVp
IGJ1ZlNpemUsIGNvbnN0IHZvaWQqIGRhdGEpCiB7Ci0gICAgaWYgKCFtX2NvbnRleHQtPm1ha2VD
b250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KKyAgICBtX2NvbnRleHQtPm1ha2VD
b250ZXh0Q3VycmVudCgpOwogICAgIGdsOjpDb21wcmVzc2VkVGV4U3ViSW1hZ2UzRFJvYnVzdEFO
R0xFKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQsIHdpZHRoLCBoZWln
aHQsIGRlcHRoLCBmb3JtYXQsIGltYWdlU2l6ZSwgYnVmU2l6ZSwgZGF0YSk7CiB9CiAKIAogdm9p
ZCBFeHRlbnNpb25zR0xBTkdMRTo6dGV4SW1hZ2UzRFJvYnVzdEFOR0xFKEdDR0xlbnVtIHRhcmdl
dCwgaW50IGxldmVsLCBpbnQgaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNp
emVpIGhlaWdodCwgR0NHTHNpemVpIGRlcHRoLCBpbnQgYm9yZGVyLCBHQ0dMZW51bSBmb3JtYXQs
IEdDR0xlbnVtIHR5cGUsIEdDR0xzaXplaSBidWZTaXplLCBjb25zdCB2b2lkICpwaXhlbHMpCiB7
Ci0gICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1
cm47Ci0KKyAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIGdsOjpUZXhJ
bWFnZTNEUm9idXN0QU5HTEUodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBo
ZWlnaHQsIGRlcHRoLCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgYnVmU2l6ZSwgcGl4ZWxzKTsKIH0K
IAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6dGV4U3ViSW1hZ2UzRFJvYnVzdEFOR0xFKEdDR0xl
bnVtIHRhcmdldCwgaW50IGxldmVsLCBpbnQgeG9mZnNldCwgaW50IHlvZmZzZXQsIGludCB6b2Zm
c2V0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xzaXplaSBkZXB0aCwg
R0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgY29uc3Qg
dm9pZCAqcGl4ZWxzKQogewotICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQo
KSkKLSAgICAgICAgcmV0dXJuOwotCisgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQo
KTsKICAgICBnbDo6VGV4U3ViSW1hZ2UzRFJvYnVzdEFOR0xFKHRhcmdldCwgbGV2ZWwsIHhvZmZz
ZXQsIHlvZmZzZXQsIHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBmb3JtYXQsIHR5cGUs
IGJ1ZlNpemUsIHBpeGVscyk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmdldFF1ZXJ5
aXZSb2J1c3RBTkdMRShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkg
YnVmU2l6ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdDR0xpbnQgKnBhcmFtcykKIHsKLSAgICBpZiAo
IW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQorICAg
IG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgZ2w6OkdldFF1ZXJ5aXZSb2J1
c3RBTkdMRSh0YXJnZXQsIHBuYW1lLCBidWZTaXplLCBsZW5ndGgsIHBhcmFtcyk7CiB9CiAKIHZv
aWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmdldFF1ZXJ5T2JqZWN0dWl2Um9idXN0QU5HTEUoR0NHTHVp
bnQgaWQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5n
dGgsIEdDR0x1aW50ICpwYXJhbXMpCiB7Ci0gICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0
Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KKyAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0
Q3VycmVudCgpOwogICAgIGdsOjpHZXRRdWVyeU9iamVjdHVpdlJvYnVzdEFOR0xFKGlkLCBwbmFt
ZSwgYnVmU2l6ZSwgbGVuZ3RoLCBwYXJhbXMpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xF
OjpnZXRCdWZmZXJQb2ludGVydlJvYnVzdEFOR0xFKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0g
cG5hbWUsIEdDR0xzaXplaSBidWZTaXplLCBHQ0dMc2l6ZWkgKmxlbmd0aCwgdm9pZCAqKnBhcmFt
cykKIHsKLSAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAg
IHJldHVybjsKLQorICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgZ2w6
OkdldEJ1ZmZlclBvaW50ZXJ2Um9idXN0QU5HTEUodGFyZ2V0LCBwbmFtZSwgYnVmU2l6ZSwgbGVu
Z3RoLCBwYXJhbXMpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRJbnRlZ2VyaV92
Um9idXN0QU5HTEUoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMdWludCBpbmRleCwgR0NHTHNpemVpIGJ1
ZlNpemUsIEdDR0xzaXplaSAqbGVuZ3RoLCBHQ0dMaW50ICpkYXRhKQogewotICAgIGlmICghbV9j
b250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCisgICAgbV9j
b250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBnbDo6R2V0SW50ZWdlcmlfdlJvYnVz
dEFOR0xFKHRhcmdldCwgaW5kZXgsIGJ1ZlNpemUsIGxlbmd0aCwgZGF0YSk7CiB9CiAKIHZvaWQg
RXh0ZW5zaW9uc0dMQU5HTEU6OmdldEludGVybmFsZm9ybWF0aXZSb2J1c3RBTkdMRShHQ0dMZW51
bSB0YXJnZXQsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTHNp
emVpIGJ1ZlNpemUsIEdDR0xzaXplaSAqbGVuZ3RoLCBHQ0dMaW50ICpwYXJhbXMpCiB7Ci0gICAg
aWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0K
KyAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIGdsOjpHZXRJbnRlcm5h
bGZvcm1hdGl2Um9idXN0QU5HTEUodGFyZ2V0LCBpbnRlcm5hbGZvcm1hdCwgcG5hbWUsIGJ1ZlNp
emUsIGxlbmd0aCwgcGFyYW1zKTsKIH0KIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6Z2V0VmVy
dGV4QXR0cmliSWl2Um9idXN0QU5HTEUoR0NHTHVpbnQgaW5kZXgsIEdDR0xlbnVtIHBuYW1lLCBH
Q0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdDR0xpbnQgKnBhcmFtcykKIHsK
LSAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVy
bjsKLQorICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgZ2w6OkdldFZl
cnRleEF0dHJpYklpdlJvYnVzdEFOR0xFKGluZGV4LCBwbmFtZSwgYnVmU2l6ZSwgbGVuZ3RoLCBw
YXJhbXMpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRWZXJ0ZXhBdHRyaWJJdWl2
Um9idXN0QU5HTEUoR0NHTHVpbnQgaW5kZXgsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVm
U2l6ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdDR0x1aW50ICpwYXJhbXMpCiB7Ci0gICAgaWYgKCFt
X2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KKyAgICBt
X2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIGdsOjpHZXRWZXJ0ZXhBdHRyaWJJ
dWl2Um9idXN0QU5HTEUoaW5kZXgsIHBuYW1lLCBidWZTaXplLCBsZW5ndGgsIHBhcmFtcyk7CiB9
CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmdldFVuaWZvcm11aXZSb2J1c3RBTkdMRShHQ0dM
dWludCBwcm9ncmFtLCBpbnQgbG9jYXRpb24sIEdDR0xzaXplaSBidWZTaXplLCBHQ0dMc2l6ZWkg
Kmxlbmd0aCwgR0NHTHVpbnQgKnBhcmFtcykKIHsKLSAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNv
bnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQorICAgIG1fY29udGV4dC0+bWFrZUNv
bnRleHRDdXJyZW50KCk7CiAgICAgZ2w6OkdldFVuaWZvcm11aXZSb2J1c3RBTkdMRShwcm9ncmFt
LCBsb2NhdGlvbiwgYnVmU2l6ZSwgbGVuZ3RoLCBwYXJhbXMpOwogfQogCiB2b2lkIEV4dGVuc2lv
bnNHTEFOR0xFOjpnZXRBY3RpdmVVbmlmb3JtQmxvY2tpdlJvYnVzdEFOR0xFKEdDR0x1aW50IHBy
b2dyYW0sIEdDR0x1aW50IHVuaWZvcm1CbG9ja0luZGV4LCBHQ0dMZW51bSBwbmFtZSwgR0NHTHNp
emVpIGJ1ZlNpemUsIEdDR0xzaXplaSAqbGVuZ3RoLCBHQ0dMaW50ICpwYXJhbXMpCiB7Ci0gICAg
aWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0K
KyAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIGdsOjpHZXRBY3RpdmVV
bmlmb3JtQmxvY2tpdlJvYnVzdEFOR0xFKHByb2dyYW0sIHVuaWZvcm1CbG9ja0luZGV4LCBwbmFt
ZSwgYnVmU2l6ZSwgbGVuZ3RoLCBwYXJhbXMpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xF
OjpnZXRJbnRlZ2VyNjR2Um9idXN0QU5HTEUoR0NHTGVudW0gcG5hbWUsIEdDR0xzaXplaSBidWZT
aXplLCBHQ0dMc2l6ZWkgKmxlbmd0aCwgR0NHTGludDY0ICpkYXRhKQogewotICAgIGlmICghbV9j
b250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCisgICAgbV9j
b250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBnbDo6R2V0SW50ZWdlcjY0dlJvYnVz
dEFOR0xFKHBuYW1lLCBidWZTaXplLCBsZW5ndGgsIHJlaW50ZXJwcmV0X2Nhc3Q8R0xpbnQ2NCo+
KGRhdGEpKTsKIH0KIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6Z2V0SW50ZWdlcjY0aV92Um9i
dXN0QU5HTEUoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMdWludCBpbmRleCwgR0NHTHNpemVpIGJ1ZlNp
emUsIEdDR0xzaXplaSAqbGVuZ3RoLCBHQ0dMaW50NjQgKmRhdGEpCiB7Ci0gICAgaWYgKCFtX2Nv
bnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KKyAgICBtX2Nv
bnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIGdsOjpHZXRJbnRlZ2VyNjRpX3ZSb2J1
c3RBTkdMRSh0YXJnZXQsIGluZGV4LCBidWZTaXplLCBsZW5ndGgsIHJlaW50ZXJwcmV0X2Nhc3Q8
R0xpbnQ2NCo+KGRhdGEpKTsKIH0KIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6Z2V0QnVmZmVy
UGFyYW1ldGVyaTY0dlJvYnVzdEFOR0xFKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUs
IEdDR0xzaXplaSBidWZTaXplLCBHQ0dMc2l6ZWkgKmxlbmd0aCwgR0NHTGludDY0ICpwYXJhbXMp
CiB7Ci0gICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICBy
ZXR1cm47Ci0KKyAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIGdsOjpH
ZXRCdWZmZXJQYXJhbWV0ZXJpNjR2Um9idXN0QU5HTEUodGFyZ2V0LCBwbmFtZSwgYnVmU2l6ZSwg
bGVuZ3RoLCByZWludGVycHJldF9jYXN0PEdMaW50NjQqPihwYXJhbXMpKTsKIH0KIAogdm9pZCBF
eHRlbnNpb25zR0xBTkdMRTo6c2FtcGxlclBhcmFtZXRlcml2Um9idXN0QU5HTEUoR0NHTHVpbnQg
c2FtcGxlciwgR0NHTGVudW0gcG5hbWUsIEdDR0xzaXplaSBidWZTaXplLCBjb25zdCBHQ0dMaW50
ICpwYXJhbSkKIHsKLSAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCi0g
ICAgICAgIHJldHVybjsKLQorICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CiAg
ICAgZ2w6OlNhbXBsZXJQYXJhbWV0ZXJpdlJvYnVzdEFOR0xFKHNhbXBsZXIsIHBuYW1lLCBidWZT
aXplLCBwYXJhbSk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OnNhbXBsZXJQYXJhbWV0
ZXJmdlJvYnVzdEFOR0xFKEdDR0x1aW50IHNhbXBsZXIsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6
ZWkgYnVmU2l6ZSwgY29uc3QgR0NHTGZsb2F0ICpwYXJhbSkKIHsKLSAgICBpZiAoIW1fY29udGV4
dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQorICAgIG1fY29udGV4
dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgZ2w6OlNhbXBsZXJQYXJhbWV0ZXJmdlJvYnVz
dEFOR0xFKHNhbXBsZXIsIHBuYW1lLCBidWZTaXplLCBwYXJhbSk7CiB9CiAKIHZvaWQgRXh0ZW5z
aW9uc0dMQU5HTEU6OmdldFNhbXBsZXJQYXJhbWV0ZXJpdlJvYnVzdEFOR0xFKEdDR0x1aW50IHNh
bXBsZXIsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5n
dGgsIEdDR0xpbnQgKnBhcmFtcykKIHsKLSAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRD
dXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQorICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRD
dXJyZW50KCk7CiAgICAgZ2w6OkdldFNhbXBsZXJQYXJhbWV0ZXJpdlJvYnVzdEFOR0xFKHNhbXBs
ZXIsIHBuYW1lLCBidWZTaXplLCBsZW5ndGgsIHBhcmFtcyk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9u
c0dMQU5HTEU6OmdldFNhbXBsZXJQYXJhbWV0ZXJmdlJvYnVzdEFOR0xFKEdDR0x1aW50IHNhbXBs
ZXIsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5ndGgs
IEdDR0xmbG9hdCAqcGFyYW1zKQogewotICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1
cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCisgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1
cnJlbnQoKTsKICAgICBnbDo6R2V0U2FtcGxlclBhcmFtZXRlcmZ2Um9idXN0QU5HTEUoc2FtcGxl
ciwgcG5hbWUsIGJ1ZlNpemUsIGxlbmd0aCwgcGFyYW1zKTsKIH0KIAogCiB2b2lkIEV4dGVuc2lv
bnNHTEFOR0xFOjpnZXRGcmFtZWJ1ZmZlclBhcmFtZXRlcml2Um9idXN0QU5HTEUoR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTHNpemVpIGJ1ZlNpemUsIEdDR0xzaXplaSAqbGVu
Z3RoLCBHQ0dMaW50ICpwYXJhbXMpCiB7Ci0gICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0
Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KKyAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0
Q3VycmVudCgpOwogICAgIGdsOjpHZXRGcmFtZWJ1ZmZlclBhcmFtZXRlcml2Um9idXN0QU5HTEUo
dGFyZ2V0LCBwbmFtZSwgYnVmU2l6ZSwgbGVuZ3RoLCBwYXJhbXMpOwogfQogCiB2b2lkIEV4dGVu
c2lvbnNHTEFOR0xFOjpnZXRQcm9ncmFtSW50ZXJmYWNlaXZSb2J1c3RBTkdMRShHQ0dMdWludCBw
cm9ncmFtLCBHQ0dMZW51bSBwcm9ncmFtSW50ZXJmYWNlLCBHQ0dMZW51bSBwbmFtZSwgR0NHTHNp
emVpIGJ1ZlNpemUsIEdDR0xzaXplaSAqbGVuZ3RoLCBHQ0dMaW50ICpwYXJhbXMpCiB7Ci0gICAg
aWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0K
KyAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIGdsOjpHZXRQcm9ncmFt
SW50ZXJmYWNlaXZSb2J1c3RBTkdMRShwcm9ncmFtLCBwcm9ncmFtSW50ZXJmYWNlLCBwbmFtZSwg
YnVmU2l6ZSwgbGVuZ3RoLCBwYXJhbXMpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpn
ZXRCb29sZWFuaV92Um9idXN0QU5HTEUoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMdWludCBpbmRleCwg
R0NHTHNpemVpIGJ1ZlNpemUsIEdDR0xzaXplaSAqbGVuZ3RoLCBHQ0dMYm9vbGVhbiAqZGF0YSkK
IHsKLSAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJl
dHVybjsKLQorICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgZ2w6Okdl
dEJvb2xlYW5pX3ZSb2J1c3RBTkdMRSh0YXJnZXQsIGluZGV4LCBidWZTaXplLCBsZW5ndGgsIGRh
dGEpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRNdWx0aXNhbXBsZWZ2Um9idXN0
QU5HTEUoR0NHTGVudW0gcG5hbWUsIEdDR0x1aW50IGluZGV4LCBHQ0dMc2l6ZWkgYnVmU2l6ZSwg
R0NHTHNpemVpICpsZW5ndGgsIEdDR0xmbG9hdCAqdmFsKQogewotICAgIGlmICghbV9jb250ZXh0
LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCisgICAgbV9jb250ZXh0
LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBnbDo6R2V0TXVsdGlzYW1wbGVmdlJvYnVzdEFO
R0xFKHBuYW1lLCBpbmRleCwgYnVmU2l6ZSwgbGVuZ3RoLCB2YWwpOwogfQogCiB2b2lkIEV4dGVu
c2lvbnNHTEFOR0xFOjpnZXRUZXhMZXZlbFBhcmFtZXRlcml2Um9idXN0QU5HTEUoR0NHTGVudW0g
dGFyZ2V0LCBpbnQgbGV2ZWwsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NH
THNpemVpICpsZW5ndGgsIEdDR0xpbnQgKnBhcmFtcykKIHsKLSAgICBpZiAoIW1fY29udGV4dC0+
bWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQorICAgIG1fY29udGV4dC0+
bWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgZ2w6OkdldFRleExldmVsUGFyYW1ldGVyaXZSb2J1
c3RBTkdMRSh0YXJnZXQsIGxldmVsLCBwbmFtZSwgYnVmU2l6ZSwgbGVuZ3RoLCBwYXJhbXMpOwog
fQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRUZXhMZXZlbFBhcmFtZXRlcmZ2Um9idXN0
QU5HTEUoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6
ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdDR0xmbG9hdCAqcGFyYW1zKQogewotICAg
IGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwot
CisgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBnbDo6R2V0VGV4TGV2
ZWxQYXJhbWV0ZXJmdlJvYnVzdEFOR0xFKHRhcmdldCwgbGV2ZWwsIHBuYW1lLCBidWZTaXplLCBs
ZW5ndGgsIHBhcmFtcyk7CiB9CiAKIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6Z2V0UG9pbnRl
cnZSb2J1c3RBTkdMRVJvYnVzdEFOR0xFKEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6
ZSwgR0NHTHNpemVpICpsZW5ndGgsIHZvaWQgKipwYXJhbXMpCiB7Ci0gICAgaWYgKCFtX2NvbnRl
eHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KKyAgICBtX2NvbnRl
eHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIGdsOjpHZXRQb2ludGVydlJvYnVzdEFOR0xF
Um9idXN0QU5HTEUocG5hbWUsIGJ1ZlNpemUsIGxlbmd0aCwgcGFyYW1zKTsKIH0KIApAQCAtNzA0
LDkgKzU4MSw3IEBAIHN0YXRpYyB2b2lkIHdpcGVBbHBoYUNoYW5uZWxGcm9tUGl4ZWxzKGludCB3
aWR0aCwgaW50IGhlaWdodCwgdW5zaWduZWQgY2hhciogcGl4CiAKIHZvaWQgRXh0ZW5zaW9uc0dM
QU5HTEU6OnJlYWRuUGl4ZWxzUm9idXN0QU5HTEUoaW50IHgsIGludCB5LCBHQ0dMc2l6ZWkgd2lk
dGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NH
THNpemVpIGJ1ZlNpemUsIEdDR0xzaXplaSAqbGVuZ3RoLCBHQ0dMc2l6ZWkgKmNvbHVtbnMsIEdD
R0xzaXplaSAqcm93cywgdm9pZCAqZGF0YSwgYm9vbCByZWFkaW5nVG9QaXhlbEJ1ZmZlck9iamVj
dCkKIHsKLSAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAg
IHJldHVybjsKLQorICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgLy8g
RklYTUU6IHJlbW92ZSB0aGUgdHdvIGdsRmx1c2ggY2FsbHMgd2hlbiB0aGUgZHJpdmVyIGJ1ZyBp
cyBmaXhlZCwgaS5lLiwKICAgICAvLyBhbGwgcHJldmlvdXMgcmVuZGVyaW5nIGNhbGxzIHNob3Vs
ZCBiZSBkb25lIGJlZm9yZSByZWFkaW5nIHBpeGVscy4KICAgICBnbDo6Rmx1c2goKTsKQEAgLTc0
MSwxMTQgKzYxNiw4NiBAQCB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpyZWFkblBpeGVsc1JvYnVz
dEFOR0xFKGludCB4LCBpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQwogCiB2b2lkIEV4dGVuc2lv
bnNHTEFOR0xFOjpnZXRuVW5pZm9ybWZ2Um9idXN0QU5HTEUoR0NHTHVpbnQgcHJvZ3JhbSwgaW50
IGxvY2F0aW9uLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdDR0xmbG9h
dCAqcGFyYW1zKQogewotICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkK
LSAgICAgICAgcmV0dXJuOwotCisgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsK
ICAgICBnbDo6R2V0blVuaWZvcm1mdlJvYnVzdEFOR0xFKHByb2dyYW0sIGxvY2F0aW9uLCBidWZT
aXplLCBsZW5ndGgsIHBhcmFtcyk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmdldG5V
bmlmb3JtaXZSb2J1c3RBTkdMRShHQ0dMdWludCBwcm9ncmFtLCBpbnQgbG9jYXRpb24sIEdDR0xz
aXplaSBidWZTaXplLCBHQ0dMc2l6ZWkgKmxlbmd0aCwgR0NHTGludCAqcGFyYW1zKQogewotICAg
IGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwot
CisgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBnbDo6R2V0blVuaWZv
cm1pdlJvYnVzdEFOR0xFKHByb2dyYW0sIGxvY2F0aW9uLCBidWZTaXplLCBsZW5ndGgsIHBhcmFt
cyk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmdldG5Vbmlmb3JtdWl2Um9idXN0QU5H
TEUoR0NHTHVpbnQgcHJvZ3JhbSwgaW50IGxvY2F0aW9uLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NH
THNpemVpICpsZW5ndGgsIEdDR0x1aW50ICpwYXJhbXMpCiB7Ci0gICAgaWYgKCFtX2NvbnRleHQt
Pm1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KKyAgICBtX2NvbnRleHQt
Pm1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIGdsOjpHZXRuVW5pZm9ybXVpdlJvYnVzdEFOR0xF
KHByb2dyYW0sIGxvY2F0aW9uLCBidWZTaXplLCBsZW5ndGgsIHBhcmFtcyk7CiB9CiAKIHZvaWQg
RXh0ZW5zaW9uc0dMQU5HTEU6OnRleFBhcmFtZXRlcklpdlJvYnVzdEFOR0xFKEdDR0xlbnVtIHRh
cmdldCwgR0NHTGVudW0gcG5hbWUsIEdDR0xzaXplaSBidWZTaXplLCBjb25zdCBHQ0dMaW50ICpw
YXJhbXMpCiB7Ci0gICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQotICAg
ICAgICByZXR1cm47Ci0KKyAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwogICAg
IGdsOjpUZXhQYXJhbWV0ZXJJaXZSb2J1c3RBTkdMRSh0YXJnZXQsIHBuYW1lLCBidWZTaXplLCBw
YXJhbXMpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjp0ZXhQYXJhbWV0ZXJJdWl2Um9i
dXN0QU5HTEUoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTHNpemVpIGJ1ZlNp
emUsIGNvbnN0IEdDR0x1aW50ICpwYXJhbXMpCiB7Ci0gICAgaWYgKCFtX2NvbnRleHQtPm1ha2VD
b250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KKyAgICBtX2NvbnRleHQtPm1ha2VD
b250ZXh0Q3VycmVudCgpOwogICAgIGdsOjpUZXhQYXJhbWV0ZXJJdWl2Um9idXN0QU5HTEUodGFy
Z2V0LCBwbmFtZSwgYnVmU2l6ZSwgcGFyYW1zKTsKIH0KIAogdm9pZCBFeHRlbnNpb25zR0xBTkdM
RTo6Z2V0VGV4UGFyYW1ldGVySWl2Um9idXN0QU5HTEUoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51
bSBwbmFtZSwgR0NHTHNpemVpIGJ1ZlNpemUsIEdDR0xzaXplaSAqbGVuZ3RoLCBHQ0dMaW50ICpw
YXJhbXMpCiB7Ci0gICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQotICAg
ICAgICByZXR1cm47Ci0KKyAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwogICAg
IGdsOjpHZXRUZXhQYXJhbWV0ZXJJaXZSb2J1c3RBTkdMRSh0YXJnZXQsIHBuYW1lLCBidWZTaXpl
LCBsZW5ndGgsIHBhcmFtcyk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmdldFRleFBh
cmFtZXRlckl1aXZSb2J1c3RBTkdMRShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lLCBH
Q0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdDR0x1aW50ICpwYXJhbXMpCiB7
Ci0gICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1
cm47Ci0KKyAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIGdsOjpHZXRU
ZXhQYXJhbWV0ZXJJdWl2Um9idXN0QU5HTEUodGFyZ2V0LCBwbmFtZSwgYnVmU2l6ZSwgbGVuZ3Ro
LCBwYXJhbXMpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpzYW1wbGVyUGFyYW1ldGVy
SWl2Um9idXN0QU5HTEUoR0NHTHVpbnQgc2FtcGxlciwgR0NHTGVudW0gcG5hbWUsIEdDR0xzaXpl
aSBidWZTaXplLCBjb25zdCBHQ0dMaW50ICpwYXJhbSkKIHsKLSAgICBpZiAoIW1fY29udGV4dC0+
bWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQorICAgIG1fY29udGV4dC0+
bWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgZ2w6OlNhbXBsZXJQYXJhbWV0ZXJJaXZSb2J1c3RB
TkdMRShzYW1wbGVyLCBwbmFtZSwgYnVmU2l6ZSwgcGFyYW0pOwogfQogCiB2b2lkIEV4dGVuc2lv
bnNHTEFOR0xFOjpzYW1wbGVyUGFyYW1ldGVySXVpdlJvYnVzdEFOR0xFKEdDR0x1aW50IHNhbXBs
ZXIsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgY29uc3QgR0NHTHVpbnQgKnBh
cmFtKQogewotICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAg
ICAgcmV0dXJuOwotCisgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBn
bDo6U2FtcGxlclBhcmFtZXRlckl1aXZSb2J1c3RBTkdMRShzYW1wbGVyLCBwbmFtZSwgYnVmU2l6
ZSwgcGFyYW0pOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRTYW1wbGVyUGFyYW1l
dGVySWl2Um9idXN0QU5HTEUoR0NHTHVpbnQgc2FtcGxlciwgR0NHTGVudW0gcG5hbWUsIEdDR0xz
aXplaSBidWZTaXplLCBHQ0dMc2l6ZWkgKmxlbmd0aCwgR0NHTGludCAqcGFyYW1zKQogewotICAg
IGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwot
CisgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBnbDo6R2V0U2FtcGxl
clBhcmFtZXRlcklpdlJvYnVzdEFOR0xFKHNhbXBsZXIsIHBuYW1lLCBidWZTaXplLCBsZW5ndGgs
IHBhcmFtcyk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmdldFNhbXBsZXJQYXJhbWV0
ZXJJdWl2Um9idXN0QU5HTEUoR0NHTHVpbnQgc2FtcGxlciwgR0NHTGVudW0gcG5hbWUsIEdDR0xz
aXplaSBidWZTaXplLCBHQ0dMc2l6ZWkgKmxlbmd0aCwgR0NHTHVpbnQgKnBhcmFtcykKIHsKLSAg
ICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsK
LQorICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgZ2w6OkdldFNhbXBs
ZXJQYXJhbWV0ZXJJdWl2Um9idXN0QU5HTEUoc2FtcGxlciwgcG5hbWUsIGJ1ZlNpemUsIGxlbmd0
aCwgcGFyYW1zKTsKIH0KIAogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRRdWVyeU9iamVj
dGl2Um9idXN0QU5HTEUoR0NHTHVpbnQgaWQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVm
U2l6ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdDR0xpbnQgKnBhcmFtcykKIHsKLSAgICBpZiAoIW1f
Y29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQorICAgIG1f
Y29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgZ2w6OkdldFF1ZXJ5T2JqZWN0aXZS
b2J1c3RBTkdMRShpZCwgcG5hbWUsIGJ1ZlNpemUsIGxlbmd0aCwgcGFyYW1zKTsKIH0KIAogdm9p
ZCBFeHRlbnNpb25zR0xBTkdMRTo6Z2V0UXVlcnlPYmplY3RpNjR2Um9idXN0QU5HTEUoR0NHTHVp
bnQgaWQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5n
dGgsIEdDR0xpbnQ2NCAqcGFyYW1zKQogewotICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4
dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCisgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4
dEN1cnJlbnQoKTsKICAgICBnbDo6R2V0UXVlcnlPYmplY3RpNjR2Um9idXN0QU5HTEUoaWQsIHBu
YW1lLCBidWZTaXplLCBsZW5ndGgsIHJlaW50ZXJwcmV0X2Nhc3Q8R0xpbnQ2NCo+KHBhcmFtcykp
OwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRRdWVyeU9iamVjdHVpNjR2Um9idXN0
QU5HTEUoR0NHTHVpbnQgaWQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NH
THNpemVpICpsZW5ndGgsIEdDR0x1aW50NjQgKnBhcmFtcykKIHsKLSAgICBpZiAoIW1fY29udGV4
dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQorICAgIG1fY29udGV4
dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgZ2w6OkdldFF1ZXJ5T2JqZWN0dWk2NHZSb2J1
c3RBTkdMRShpZCwgcG5hbWUsIGJ1ZlNpemUsIGxlbmd0aCwgcmVpbnRlcnByZXRfY2FzdDxHTHVp
bnQ2NCo+KHBhcmFtcykpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9hbmdsZS9HcmFwaGljc0NvbnRleHRHTEFOR0xFLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dEdMQU5HTEUuY3BwCmlu
ZGV4IGYyNTlhY2I4YjgxYTkzMzliZmIzMjE1MmM3ZjM3OWMzYTUzZDZmYTguLjRjMjI0MjIxNTgx
NzY2YTdjNGFlN2E2ZTY3ZjdjZTZlNGJhZjFlYWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dEdMQU5HTEUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dEdM
QU5HTEUuY3BwCkBAIC0xODUsMTEgKzE4NSwxMSBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpyZXNoYXBlRkJPcyhjb25zdCBJbnRTaXplJiBzaXplKQogICAgICAgICBHTGludCBzYW1w
bGVDb3VudCA9IHN0ZDo6bWluKDQsIG1heFNhbXBsZUNvdW50KTsKICAgICAgICAgZ2w6OkJpbmRG
cmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBsZUZCTyk7CiAgICAgICAgIGds
OjpCaW5kUmVuZGVyYnVmZmVyKEdMX1JFTkRFUkJVRkZFUiwgbV9tdWx0aXNhbXBsZUNvbG9yQnVm
ZmVyKTsKLSAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUFOR0xFKEdM
X1JFTkRFUkJVRkZFUiwgc2FtcGxlQ291bnQsIG1faW50ZXJuYWxDb2xvckZvcm1hdCwgd2lkdGgs
IGhlaWdodCk7CisgICAgICAgIGdldEV4dGVuc2lvbnMoKS5yZW5kZXJidWZmZXJTdG9yYWdlTXVs
dGlzYW1wbGUoR0xfUkVOREVSQlVGRkVSLCBzYW1wbGVDb3VudCwgbV9pbnRlcm5hbENvbG9yRm9y
bWF0LCB3aWR0aCwgaGVpZ2h0KTsKICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyUmVuZGVyYnVmZmVy
KEdMX0ZSQU1FQlVGRkVSLCBHTF9DT0xPUl9BVFRBQ0hNRU5UMCwgR0xfUkVOREVSQlVGRkVSLCBt
X211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOwogICAgICAgICBpZiAoYXR0cnMuc3RlbmNpbCB8fCBh
dHRycy5kZXB0aCkgewogICAgICAgICAgICAgZ2w6OkJpbmRSZW5kZXJidWZmZXIoR0xfUkVOREVS
QlVGRkVSLCBtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICAgICAgICAgIGds
OjpSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVBTkdMRShHTF9SRU5ERVJCVUZGRVIsIHNh
bXBsZUNvdW50LCBpbnRlcm5hbERlcHRoU3RlbmNpbEZvcm1hdCwgd2lkdGgsIGhlaWdodCk7Cisg
ICAgICAgICAgICBnZXRFeHRlbnNpb25zKCkucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxl
KEdMX1JFTkRFUkJVRkZFUiwgc2FtcGxlQ291bnQsIGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0
LCB3aWR0aCwgaGVpZ2h0KTsKICAgICAgICAgICAgIC8vIFdlYkdMIDEuMCdzIHJ1bGVzIHN0YXRl
IHRoYXQgY29tYmluZWQgZGVwdGgvc3RlbmNpbCByZW5kZXJidWZmZXJzCiAgICAgICAgICAgICAv
LyBoYXZlIHRvIGJlIGF0dGFjaGVkIHRvIHRoZSBzeW50aGV0aWMgREVQVEhfU1RFTkNJTF9BVFRB
Q0hNRU5UIHBvaW50LgogICAgICAgICAgICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkgJiYgaW50
ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQgPT0gR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVMpCkBAIC0z
MjQsMTcgKzMyNCwxMyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZXNvbHZlTXVs
dGlzYW1wbGluZ0lmTmVjZXNzYXJ5KGNvbnN0IEludFJlY3QmIHJlYwogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpyZW5kZXJidWZmZXJTdG9yYWdlKEdDR0xlbnVtIHRhcmdldCwgR0NH
TGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkK
IHsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KKyAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBnbDo6UmVuZGVyYnVmZmVyU3RvcmFnZSh0YXJn
ZXQsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKIH0KIAogdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Z2V0SW50ZWdlcnYoR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQqIHZhbHVl
KQogewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQor
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIHN3aXRjaCAocG5hbWUpIHsKICAgICBjYXNl
IE1BWF9URVhUVVJFX1NJWkU6CiAgICAgICAgIGdsOjpHZXRJbnRlZ2VydihNQVhfVEVYVFVSRV9T
SVpFLCB2YWx1ZSk7CkBAIC0zNjcsMTcgKzM2MywxMyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRJbnRlZ2VydihHQ0dMZW51bSBwbmFtZSwgR0NHTGludCogdmFsdWUpCiAKIHZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXJpX3YoR0NHTGVudW0gcG5hbWUs
IEdDR0x1aW50IGluZGV4LCBHQ0dMaW50KiB2YWx1ZSkKIHsKLSAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
ICAgICBnbDo6R2V0SW50ZWdlcmlfdihwbmFtZSwgaW5kZXgsIHZhbHVlKTsKIH0KIAogdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KEdDR0xlbnVt
IHNoYWRlclR5cGUsIEdDR0xlbnVtIHByZWNpc2lvblR5cGUsIEdDR0xpbnQqIHJhbmdlLCBHQ0dM
aW50KiBwcmVjaXNpb24pCiB7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAg
ICAgcmV0dXJuOwotCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgZ2w6OkdldFNoYWRl
clByZWNpc2lvbkZvcm1hdChzaGFkZXJUeXBlLCBwcmVjaXNpb25UeXBlLCByYW5nZSwgcHJlY2lz
aW9uKTsKIH0KIApAQCAtMzk0LDE3ICszODYsMTMgQEAgYm9vbCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dGV4SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnUK
IAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVwdGhSYW5nZShHQ0dMY2xhbXBmIHpO
ZWFyLCBHQ0dMY2xhbXBmIHpGYXIpCiB7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
LSAgICAgICAgcmV0dXJuOwotCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgZ2w6OkRl
cHRoUmFuZ2VmKHN0YXRpY19jYXN0PGZsb2F0Pih6TmVhciksIHN0YXRpY19jYXN0PGZsb2F0Pih6
RmFyKSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyRGVwdGgoR0NH
TGNsYW1wZiBkZXB0aCkKIHsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAg
ICByZXR1cm47Ci0KKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBnbDo6Q2xlYXJEZXB0
aGYoc3RhdGljX2Nhc3Q8ZmxvYXQ+KGRlcHRoKSk7CiB9CiAKQEAgLTQxOSw5ICs0MDcsNyBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkUGl4ZWxzKEdDR0xpbnQgeCwgR0NHTGlu
dCB5LCBHQ0dMc2l6ZWkgd2lkdGgsCiB7CiAgICAgLy8gRklYTUU6IHJlbW92ZSB0aGUgdHdvIGds
Rmx1c2ggY2FsbHMgd2hlbiB0aGUgZHJpdmVyIGJ1ZyBpcyBmaXhlZCwgaS5lLiwKICAgICAvLyBh
bGwgcHJldmlvdXMgcmVuZGVyaW5nIGNhbGxzIHNob3VsZCBiZSBkb25lIGJlZm9yZSByZWFkaW5n
IHBpeGVscy4KLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47
Ci0KKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBnbDo6Rmx1c2goKTsKICAgICBhdXRv
IGF0dHJzID0gY29udGV4dEF0dHJpYnV0ZXMoKTsKICAgICBHQ0dMZW51bSBmcmFtZWJ1ZmZlclRh
cmdldCA9IG1faXNGb3JXZWJHTDIgPyBHcmFwaGljc0NvbnRleHRHTDo6UkVBRF9GUkFNRUJVRkZF
UiA6IEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUjsKQEAgLTUzNiw5ICs1MjIsNyBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwcmVwYXJlVGV4dHVyZSgpCiAgICAgaWYgKG1f
bGF5ZXJDb21wb3NpdGVkKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
ICAgICBwcmVwYXJlVGV4dHVyZUltcGwoKTsKIH0KIApAQCAtNTg4LDkgKzU3Miw3IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRSZW5kZXJpbmdSZXN1bHRzKHVuc2lnbmVkIGNo
YXIgKnBpeGVscywgaW50IHBpCiAgICAgaWYgKHBpeGVsc1NpemUgPCBtX2N1cnJlbnRXaWR0aCAq
IG1fY3VycmVudEhlaWdodCAqIDQpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQorICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwogCiAgICAgR0NHTGVudW0gZnJhbWVidWZmZXJUYXJnZXQgPSBtX2lzRm9yV2ViR0wyID8g
R3JhcGhpY3NDb250ZXh0R0w6OlJFQURfRlJBTUVCVUZGRVIgOiBHcmFwaGljc0NvbnRleHRHTDo6
RlJBTUVCVUZGRVI7CiAKQEAgLTY0Niw2ICs2MjgsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpyZWFkUmVuZGVyaW5nUmVzdWx0cyh1bnNpZ25lZCBjaGFyICpwaXhlbHMsIGludCBw
aQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZXNoYXBlKGludCB3aWR0aCwgaW50
IGhlaWdodCkKIHsKKyAgICBpZiAoIXBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0woKSkKKyAgICAg
ICAgcmV0dXJuOworCiAgICAgaWYgKHdpZHRoID09IG1fY3VycmVudFdpZHRoICYmIGhlaWdodCA9
PSBtX2N1cnJlbnRIZWlnaHQpCiAgICAgICAgIHJldHVybjsKIApAQCAtNjUzLDE3ICs2MzgsMTMg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzaGFwZShpbnQgd2lkdGgsIGludCBo
ZWlnaHQpCiAgICAgaWYgKHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwKQogICAgICAgICByZXR1cm47
CiAKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICAvLyBGSVhNRTogdGhpcyB3aWxsIGNhbGwgbWFrZUN1cnJlbnRDb250ZXh0IGFnYWluLCB3ZSBu
ZWVkIHRvIGRvIHRoaXMgYmVmb3JlIGNoYW5naW5nIHRoZSBzaXplLgotICAgIG1vdmVFcnJvcnNU
b1N5bnRoZXRpY0Vycm9yTGlzdCgpOwotCiAgICAgbWFya0NvbnRleHRDaGFuZ2VkKCk7CiAKICAg
ICBtX2N1cnJlbnRXaWR0aCA9IHdpZHRoOwogICAgIG1fY3VycmVudEhlaWdodCA9IGhlaWdodDsK
IAorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIG1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vy
cm9yTGlzdCgpOwogICAgIHZhbGlkYXRlQXR0cmlidXRlcygpOwogCiAgICAgVGVtcG9yYXJ5QU5H
TEVTZXR0aW5nIHNjb3BlZFNjaXNzb3IoR0xfU0NJU1NPUl9URVNULCBHTF9GQUxTRSk7CkBAIC02
ODUsMTIgKzY2NiwxMSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZXNoYXBlKGlu
dCB3aWR0aCwgaW50IGhlaWdodCkKICAgICBnbDo6Q29sb3JNYXNrKEdMX1RSVUUsIEdMX1RSVUUs
IEdMX1RSVUUsIEdMX1RSVUUpOwogICAgIGlmIChhdHRycy5kZXB0aCkgewogICAgICAgICBnbDo6
R2V0RmxvYXR2KEdMX0RFUFRIX0NMRUFSX1ZBTFVFLCAmY2xlYXJEZXB0aCk7Ci0gICAgICAgIGds
OjpDbGVhckRlcHRoZigxLjBmKTsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNs
ZWFyRGVwdGgoMSk7CiAgICAgICAgIGdsOjpHZXRCb29sZWFudihHTF9ERVBUSF9XUklURU1BU0ss
ICZkZXB0aE1hc2spOwogICAgICAgICBnbDo6RGVwdGhNYXNrKEdMX1RSVUUpOwogICAgICAgICBj
bGVhck1hc2sgfD0gR0xfREVQVEhfQlVGRkVSX0JJVDsKICAgICB9Ci0KICAgICBpZiAoYXR0cnMu
c3RlbmNpbCkgewogICAgICAgICBnbDo6R2V0SW50ZWdlcnYoR0xfU1RFTkNJTF9DTEVBUl9WQUxV
RSwgJmNsZWFyU3RlbmNpbCk7CiAgICAgICAgIGdsOjpDbGVhclN0ZW5jaWwoMCk7CkBAIC03MDYs
NyArNjg2LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzaGFwZShpbnQgd2lk
dGgsIGludCBoZWlnaHQpCiAgICAgZ2w6OkNsZWFyQ29sb3IoY2xlYXJDb2xvclswXSwgY2xlYXJD
b2xvclsxXSwgY2xlYXJDb2xvclsyXSwgY2xlYXJDb2xvclszXSk7CiAgICAgZ2w6OkNvbG9yTWFz
ayhjb2xvck1hc2tbMF0sIGNvbG9yTWFza1sxXSwgY29sb3JNYXNrWzJdLCBjb2xvck1hc2tbM10p
OwogICAgIGlmIChhdHRycy5kZXB0aCkgewotICAgICAgICBnbDo6Q2xlYXJEZXB0aGYoY2xlYXJE
ZXB0aCk7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckRlcHRoKGNsZWFy
RGVwdGgpOwogICAgICAgICBnbDo6RGVwdGhNYXNrKGRlcHRoTWFzayk7CiAgICAgfQogICAgIGlm
IChhdHRycy5zdGVuY2lsKSB7CkBAIC03MzMsOSArNzEzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6cmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmFjdGl2ZVRleHR1cmUoR0NHTGVudW0gdGV4dHVyZSkKIHsKLSAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KKyAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKICAgICBtX3N0YXRlLmFjdGl2ZVRleHR1cmVVbml0ID0gdGV4dHVy
ZTsKICAgICBnbDo6QWN0aXZlVGV4dHVyZSh0ZXh0dXJlKTsKIH0KQEAgLTc0NCwzNCArNzIyLDI2
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmF0dGFjaFNoYWRlcihQbGF0Zm9ybUdM
T2JqZWN0IHByb2dyYW0sIFBsYXRmb3JtR0xPCiB7CiAgICAgQVNTRVJUKHByb2dyYW0pOwogICAg
IEFTU0VSVChzaGFkZXIpOwotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAg
IHJldHVybjsKLQorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIGdsOjpBdHRhY2hTaGFk
ZXIocHJvZ3JhbSwgc2hhZGVyKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
YmluZEF0dHJpYkxvY2F0aW9uKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5k
ZXgsIGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKICAgICBBU1NFUlQocHJvZ3JhbSk7Ci0gICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCisgICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CiAgICAgZ2w6OkJpbmRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBpbmRleCwg
bmFtZS51dGY4KCkuZGF0YSgpKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
YmluZEJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgYnVmZmVyKQogewot
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQorICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwogICAgIGdsOjpCaW5kQnVmZmVyKHRhcmdldCwgYnVmZmVyKTsK
IH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEZyYW1lYnVmZmVyKEdDR0xl
bnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCiB7Ci0gICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCisgICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CiAgICAgR0x1aW50IGZibzsKICAgICBpZiAoYnVmZmVyKQogICAgICAgICBmYm8gPSBidWZm
ZXI7CkBAIC03OTAsMTQxICs3NjAsMTA3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmJpbmRGcmFtZWJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QKIAogdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFJlbmRlcmJ1ZmZlcihHQ0dMZW51bSB0YXJn
ZXQsIFBsYXRmb3JtR0xPYmplY3QgcmVuZGVyYnVmZmVyKQogewotICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQorICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwogICAgIGdsOjpCaW5kUmVuZGVyYnVmZmVyKHRhcmdldCwgcmVuZGVyYnVmZmVyKTsKIH0KIAog
CiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kVGV4dHVyZShHQ0dMZW51bSB0YXJn
ZXQsIFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSkKIHsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQotICAgICAgICByZXR1cm47Ci0KKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAg
ICBtX3N0YXRlLnNldEJvdW5kVGV4dHVyZShtX3N0YXRlLmFjdGl2ZVRleHR1cmVVbml0LCB0ZXh0
dXJlLCB0YXJnZXQpOwogICAgIGdsOjpCaW5kVGV4dHVyZSh0YXJnZXQsIHRleHR1cmUpOwogfQog
CiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZENvbG9yKEdDR0xjbGFtcGYgcmVk
LCBHQ0dMY2xhbXBmIGdyZWVuLCBHQ0dMY2xhbXBmIGJsdWUsIEdDR0xjbGFtcGYgYWxwaGEpCiB7
Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCisgICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgZ2w6OkJsZW5kQ29sb3IocmVkLCBncmVlbiwgYmx1
ZSwgYWxwaGEpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVxdWF0
aW9uKEdDR0xlbnVtIG1vZGUpCiB7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAg
ICAgICAgcmV0dXJuOwotCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgZ2w6OkJsZW5k
RXF1YXRpb24obW9kZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5k
RXF1YXRpb25TZXBhcmF0ZShHQ0dMZW51bSBtb2RlUkdCLCBHQ0dMZW51bSBtb2RlQWxwaGEpCiB7
Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCisgICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgZ2w6OkJsZW5kRXF1YXRpb25TZXBhcmF0ZShtb2Rl
UkdCLCBtb2RlQWxwaGEpOwogfQogCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJs
ZW5kRnVuYyhHQ0dMZW51bSBzZmFjdG9yLCBHQ0dMZW51bSBkZmFjdG9yKQogewotICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQorICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOwogICAgIGdsOjpCbGVuZEZ1bmMoc2ZhY3RvciwgZGZhY3Rvcik7CiB9CiAKIHZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kRnVuY1NlcGFyYXRlKEdDR0xlbnVtIHNy
Y1JHQiwgR0NHTGVudW0gZHN0UkdCLCBHQ0dMZW51bSBzcmNBbHBoYSwgR0NHTGVudW0gZHN0QWxw
aGEpCiB7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwot
CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgZ2w6OkJsZW5kRnVuY1NlcGFyYXRlKHNy
Y1JHQiwgZHN0UkdCLCBzcmNBbHBoYSwgZHN0QWxwaGEpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpidWZmZXJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVpcHRyIHNp
emUsIEdDR0xlbnVtIHVzYWdlKQogewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0g
ICAgICAgIHJldHVybjsKLQorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIGdsOjpCdWZm
ZXJEYXRhKHRhcmdldCwgc2l6ZSwgMCwgdXNhZ2UpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpidWZmZXJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVpcHRyIHNpemUs
IGNvbnN0IHZvaWQqIGRhdGEsIEdDR0xlbnVtIHVzYWdlKQogewotICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQorICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwogICAgIGdsOjpCdWZmZXJEYXRhKHRhcmdldCwgc2l6ZSwgZGF0YSwgdXNhZ2UpOwogfQogCiB2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpidWZmZXJTdWJEYXRhKEdDR0xlbnVtIHRhcmdl
dCwgR0NHTGludHB0ciBvZmZzZXQsIEdDR0xzaXplaXB0ciBzaXplLCBjb25zdCB2b2lkKiBkYXRh
KQogewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQor
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIGdsOjpCdWZmZXJTdWJEYXRhKHRhcmdldCwg
b2Zmc2V0LCBzaXplLCBkYXRhKTsKIH0KIAogdm9pZCogR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
Om1hcEJ1ZmZlclJhbmdlKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludHB0ciBvZmZzZXQsIEdDR0xz
aXplaXB0ciBsZW5ndGgsIEdDR0xiaXRmaWVsZCBhY2Nlc3MpCiB7Ci0gICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KKyAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKICAgICByZXR1cm4gZ2w6Ok1hcEJ1ZmZlclJhbmdlKHRhcmdldCwgb2Zmc2V0
LCBsZW5ndGgsIGFjY2Vzcyk7CiB9CiAKIEdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bm1hcEJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQpCiB7Ci0gICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwotCisgICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CiAgICAgcmV0dXJuIGdsOjpVbm1hcEJ1ZmZlcih0YXJnZXQpOwogfQogCiB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5QnVmZmVyU3ViRGF0YShHQ0dMZW51bSByZWFk
VGFyZ2V0LCBHQ0dMZW51bSB3cml0ZVRhcmdldCwgR0NHTGludHB0ciByZWFkT2Zmc2V0LCBHQ0dM
aW50cHRyIHdyaXRlT2Zmc2V0LCBHQ0dMc2l6ZWlwdHIgc2l6ZSkKIHsKLSAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KKyAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKICAgICBnbDo6Q29weUJ1ZmZlclN1YkRhdGEocmVhZFRhcmdldCwgd3JpdGVUYXJnZXQs
IHJlYWRPZmZzZXQsIHdyaXRlT2Zmc2V0LCBzaXplKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0SW50ZXJuYWxmb3JtYXRpdihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVt
IGludGVybmFsZm9ybWF0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTHNpemVpIGJ1ZlNpemUsIEdDR0xp
bnQqIHBhcmFtcykKIHsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICBy
ZXR1cm47Ci0KKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBnbDo6R2V0SW50ZXJuYWxm
b3JtYXRpdih0YXJnZXQsIGludGVybmFsZm9ybWF0LCBwbmFtZSwgYnVmU2l6ZSwgcGFyYW1zKTsK
IH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVuZGVyYnVmZmVyU3RvcmFnZU11
bHRpc2FtcGxlKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVpIHNhbXBsZXMsIEdDR0xlbnVtIGlu
dGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCiB7Ci0gICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCisgICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CiAgICAgZ2w6OlJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSh0
YXJnZXQsIHNhbXBsZXMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKIH0KIAogdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3RvcmFnZTJEKEdDR0xlbnVtIHRhcmdldCwg
R0NHTHNpemVpIGxldmVscywgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0
aCwgR0NHTHNpemVpIGhlaWdodCkKIHsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQot
ICAgICAgICByZXR1cm47Ci0KKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBnbDo6VGV4
U3RvcmFnZTJEKHRhcmdldCwgbGV2ZWxzLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7
CiAgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRlLmN1cnJlbnRCb3VuZFRl
eHR1cmUoKSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN0b3JhZ2Uz
RChHQ0dMZW51bSB0YXJnZXQsIEdDR0xzaXplaSBsZXZlbHMsIEdDR0xlbnVtIGludGVybmFsZm9y
bWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xzaXplaSBkZXB0aCkK
IHsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KKyAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBnbDo6VGV4U3RvcmFnZTNEKHRhcmdldCwgbGV2
ZWxzLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZGVwdGgpOwogICAgIG1fc3RhdGUu
dGV4dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOwogfQpA
QCAtOTMyLDYwICs4NjgsNDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3Rv
cmFnZTNEKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVpIGxldmVscywgR0MKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1zKFBsYXRmb3JtR0xPYmplY3QgcHJv
Z3JhbSwgY29uc3QgVmVjdG9yPEdDR0x1aW50PiYgdW5pZm9ybUluZGljZXMsIEdDR0xlbnVtIHBu
YW1lLCBWZWN0b3I8R0NHTGludD4mIHBhcmFtcykKIHsKICAgICBBU1NFUlQocHJvZ3JhbSk7Ci0g
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCisgICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CiAKICAgICBnbDo6R2V0QWN0aXZlVW5pZm9ybXNpdihwcm9ncmFt
LCB1bmlmb3JtSW5kaWNlcy5zaXplKCksIHVuaWZvcm1JbmRpY2VzLmRhdGEoKSwgcG5hbWUsIHBh
cmFtcy5kYXRhKCkpOwogfQogCiBHQ0dMZW51bSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2hl
Y2tGcmFtZWJ1ZmZlclN0YXR1cyhHQ0dMZW51bSB0YXJnZXQpCiB7Ci0gICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIEdMX0lOVkFMSURfT1BFUkFUSU9OOwotCisg
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgcmV0dXJuIGdsOjpDaGVja0ZyYW1lYnVmZmVy
U3RhdHVzKHRhcmdldCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFy
Q29sb3IoR0NHTGNsYW1wZiByLCBHQ0dMY2xhbXBmIGcsIEdDR0xjbGFtcGYgYiwgR0NHTGNsYW1w
ZiBhKQogewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsK
LQorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIGdsOjpDbGVhckNvbG9yKHIsIGcsIGIs
IGEpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhcihHQ0dMYml0Zmll
bGQgbWFzaykKIHsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1
cm47Ci0KKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBnbDo6Q2xlYXIobWFzayk7CiAg
ICAgY2hlY2tHUFVTdGF0dXMoKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Y2xlYXJTdGVuY2lsKEdDR0xpbnQgcykKIHsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQotICAgICAgICByZXR1cm47Ci0KKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBnbDo6
Q2xlYXJTdGVuY2lsKHMpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb2xv
ck1hc2soR0NHTGJvb2xlYW4gcmVkLCBHQ0dMYm9vbGVhbiBncmVlbiwgR0NHTGJvb2xlYW4gYmx1
ZSwgR0NHTGJvb2xlYW4gYWxwaGEpCiB7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
LSAgICAgICAgcmV0dXJuOwotCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgZ2w6OkNv
bG9yTWFzayhyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNvbXBpbGVTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCiB7CiAg
ICAgQVNTRVJUKHNoYWRlcik7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAg
ICAgcmV0dXJuOwotCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgLy8gV2UgbmVlZCB0
aGUgQU5HTEVfdGV4dHVyZV9yZWN0YW5nbGUgZXh0ZW5zaW9uIHRvIHN1cHBvcnQgSU9TdXJmYWNl
CiAgICAgLy8gYmFja2J1ZmZlcnMsIGJ1dCB3ZSBkb24ndCB3YW50IGl0IGV4cG9zZWQgdG8gV2Vi
R0wgdXNlciBzaGFkZXJzLgogICAgIC8vIFRlbXBvcmFyaWx5IGRpc2FibGUgaXQgZHVyaW5nIHNo
YWRlciBjb21waWxhdGlvbi4KQEAgLTk5NywxNyArOTE5LDEzIEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNvbXBpbGVTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCiB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21waWxlU2hhZGVyRGlyZWN0KFBsYXRmb3JtR0xP
YmplY3Qgc2hhZGVyKQogewogICAgIEFTU0VSVChzaGFkZXIpOwotICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQorICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwogICAgIGdsOjpDb21waWxlU2hhZGVyKHNoYWRlcik7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNvcHlUZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZl
bCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6
ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyKQogewotICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQorICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOwogICAgIGF1dG8gYXR0cnMgPSBjb250ZXh0QXR0cmlidXRlcygpOwogICAgIEdD
R0xlbnVtIGZyYW1lYnVmZmVyVGFyZ2V0ID0gbV9pc0ZvcldlYkdMMiA/IEdyYXBoaWNzQ29udGV4
dEdMOjpSRUFEX0ZSQU1FQlVGRkVSIDogR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSOwog
CkBAIC0xMDIyLDkgKzk0MCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlU
ZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHCiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwg
R0NHTGludCBsZXZlbCwgR0NHTGludCB4b2Zmc2V0LCBHQ0dMaW50IHlvZmZzZXQsIEdDR0xpbnQg
eCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCiB7Ci0gICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCisgICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CiAgICAgYXV0byBhdHRycyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7CiAg
ICAgR0NHTGVudW0gZnJhbWVidWZmZXJUYXJnZXQgPSBtX2lzRm9yV2ViR0wyID8gR3JhcGhpY3ND
b250ZXh0R0w6OlJFQURfRlJBTUVCVUZGRVIgOiBHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZG
RVI7CiAKQEAgLTEwMzksMjUgKzk1NSwxOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojpjb3B5VGV4U3ViSW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsCiAKIHZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmN1bGxGYWNlKEdDR0xlbnVtIG1vZGUpCiB7Ci0g
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCisgICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CiAgICAgZ2w6OkN1bGxGYWNlKG1vZGUpOwogfQogCiB2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZXB0aEZ1bmMoR0NHTGVudW0gZnVuYykKIHsKLSAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KKyAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKICAgICBnbDo6RGVwdGhGdW5jKGZ1bmMpOwogfQogCiB2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpkZXB0aE1hc2soR0NHTGJvb2xlYW4gZmxhZykKIHsKLSAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KKyAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKICAgICBnbDo6RGVwdGhNYXNrKGZsYWcpOwogfQogCkBAIC0xMDY1LDEw
OCArOTc1LDgyIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRldGFjaFNoYWRlcihQ
bGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIFBsYXRmb3JtR0xPCiB7CiAgICAgQVNTRVJUKHByb2dy
YW0pOwogICAgIEFTU0VSVChzaGFkZXIpOwotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
Ci0gICAgICAgIHJldHVybjsKLQorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIGdsOjpE
ZXRhY2hTaGFkZXIocHJvZ3JhbSwgc2hhZGVyKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6ZGlzYWJsZShHQ0dMZW51bSBjYXApCiB7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAg
ICAgZ2w6OkRpc2FibGUoY2FwKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDR0x1aW50IGluZGV4KQogewotICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQorICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOwogICAgIGdsOjpEaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoaW5kZXgpOwogfQogCiB2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3QXJyYXlzKEdDR0xlbnVtIG1vZGUsIEdD
R0xpbnQgZmlyc3QsIEdDR0xzaXplaSBjb3VudCkKIHsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQotICAgICAgICByZXR1cm47Ci0KKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAg
ICBnbDo6RHJhd0FycmF5cyhtb2RlLCBmaXJzdCwgY291bnQpOwogICAgIGNoZWNrR1BVU3RhdHVz
KCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdFbGVtZW50cyhHQ0dM
ZW51bSBtb2RlLCBHQ0dMc2l6ZWkgY291bnQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnRwdHIgb2Zm
c2V0KQogewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsK
LQorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIGdsOjpEcmF3RWxlbWVudHMobW9kZSwg
Y291bnQsIHR5cGUsIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2b2lkKj4oc3RhdGljX2Nhc3Q8aW50cHRy
X3Q+KG9mZnNldCkpKTsKICAgICBjaGVja0dQVVN0YXR1cygpOwogfQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjplbmFibGUoR0NHTGVudW0gY2FwKQogewotICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQorICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwogICAgIGdsOjpFbmFibGUoY2FwKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoR0NHTHVpbnQgaW5kZXgpCiB7Ci0gICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCisgICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CiAgICAgZ2w6OkVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGluZGV4KTsKIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZmluaXNoKCkKIHsKLSAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KKyAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKICAgICBnbDo6RmluaXNoKCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmZsdXNoKCkKIHsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAg
ICByZXR1cm47Ci0KKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBnbDo6Rmx1c2goKTsK
IH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJhbWVidWZmZXJSZW5kZXJidWZm
ZXIoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50LCBHQ0dMZW51bSByZW5kZXJi
dWZmZXJ0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgYnVmZmVyKQogewotICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQorICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwogICAgIGdsOjpGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih0YXJnZXQsIGF0dGFjaG1lbnQs
IHJlbmRlcmJ1ZmZlcnRhcmdldCwgYnVmZmVyKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6ZnJhbWVidWZmZXJUZXh0dXJlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBh
dHRhY2htZW50LCBHQ0dMZW51bSB0ZXh0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSwg
R0NHTGludCBsZXZlbCkKIHsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAg
ICByZXR1cm47Ci0KKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBnbDo6RnJhbWVidWZm
ZXJUZXh0dXJlMkQodGFyZ2V0LCBhdHRhY2htZW50LCB0ZXh0YXJnZXQsIHRleHR1cmUsIGxldmVs
KTsKICAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVudEJvdW5k
VGV4dHVyZSgpKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJvbnRGYWNl
KEdDR0xlbnVtIG1vZGUpCiB7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAg
ICAgcmV0dXJuOwotCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgZ2w6OkZyb250RmFj
ZShtb2RlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2VuZXJhdGVNaXBt
YXAoR0NHTGVudW0gdGFyZ2V0KQogewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0g
ICAgICAgIHJldHVybjsKLQorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIGdsOjpHZW5l
cmF0ZU1pcG1hcCh0YXJnZXQpOwogfQogCkBAIC0xMTc2LDkgKzEwNjAsNyBAQCBib29sIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVBdHRyaWJJbXBsKFBsYXRmb3JtR0xPYmplY3Qg
cHJvZ3JhbSwgR0NHTAogICAgICAgICBzeW50aGVzaXplR0xFcnJvcihJTlZBTElEX1ZBTFVFKTsK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
ICAgICBHTGludCBtYXhBdHRyaWJ1dGVTaXplID0gMDsKICAgICBnbDo6R2V0UHJvZ3JhbWl2KHBy
b2dyYW0sIEdMX0FDVElWRV9BVFRSSUJVVEVfTUFYX0xFTkdUSCwgJm1heEF0dHJpYnV0ZVNpemUp
OwogICAgIFZlY3RvcjxHTGNoYXI+IG5hbWUobWF4QXR0cmlidXRlU2l6ZSk7IC8vIEdMX0FDVElW
RV9BVFRSSUJVVEVfTUFYX0xFTkdUSCBpbmNsdWRlcyBudWxsIHRlcm1pbmF0aW9uLgpAQCAtMTIw
Nyw5ICsxMDg5LDcgQEAgYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5p
Zm9ybUltcGwoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0cKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0KIAotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIEdMaW50IG1heFVu
aWZvcm1TaXplID0gMDsKICAgICBnbDo6R2V0UHJvZ3JhbWl2KHByb2dyYW0sIEdMX0FDVElWRV9V
TklGT1JNX01BWF9MRU5HVEgsICZtYXhVbmlmb3JtU2l6ZSk7CiAKQEAgLTEyMzgsOSArMTExOCw3
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dGFjaGVkU2hhZGVycyhQbGF0
Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0xzCiAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKElO
VkFMSURfVkFMVUUpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQorICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwogICAgIGdsOjpHZXRBdHRhY2hlZFNoYWRlcnMocHJvZ3JhbSwgbWF4Q291bnQsIGNvdW50LCBz
aGFkZXJzKTsKIH0KIApAQCAtMTI0OSw5ICsxMTI3LDcgQEAgaW50IEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0
IFMKICAgICBpZiAoIXByb2dyYW0pCiAgICAgICAgIHJldHVybiAtMTsKIAotICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiAtMTsKLQorICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOwogCiAgICAgcmV0dXJuIGdsOjpHZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBu
YW1lLnV0ZjgoKS5kYXRhKCkpOwogfQpAQCAtMTI2Myw5ICsxMTM5LDcgQEAgaW50IEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpnZXRBdHRyaWJMb2NhdGlvbkRpcmVjdChQbGF0Zm9ybUdMT2JqZWN0
IHByb2dyYW0sIGMKIAogYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bW92ZUVycm9yc1Rv
U3ludGhldGljRXJyb3JMaXN0KCkKIHsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBi
b29sIG1vdmVkQW5FcnJvciA9IGZhbHNlOwogCiAgICAgLy8gU2V0IGFuIGFyYml0cmFyeSBsaW1p
dCBvZiAxMDAgaGVyZSB0byBhdm9pZCBjcmVhdGluZyBhIGhhbmcgaWYKQEAgLTEyOTIsMjUgKzEx
NjYsMTkgQEAgR0NHTGVudW0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEVycm9yKCkKICAg
ICAgICAgcmV0dXJuIG1fc3ludGhldGljRXJyb3JzLnRha2VGaXJzdCgpOwogICAgIH0KIAotICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiBHTF9JTlZBTElEX09Q
RVJBVElPTjsKLQorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIHJldHVybiBnbDo6R2V0
RXJyb3IoKTsKIH0KIAogU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTdHJpbmco
R0NHTGVudW0gbmFtZSkKIHsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAg
ICByZXR1cm4gU3RyaW5nKCk7Ci0KKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICByZXR1
cm4gU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGdsOjpHZXRTdHJpbmcobmFt
ZSkpKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aGludChHQ0dMZW51bSB0
YXJnZXQsIEdDR0xlbnVtIG1vZGUpCiB7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
LSAgICAgICAgcmV0dXJuOwotCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgZ2w6Okhp
bnQodGFyZ2V0LCBtb2RlKTsKIH0KIApAQCAtMTMxOSwxNyArMTE4NywxMyBAQCBHQ0dMYm9vbGVh
biBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNCdWZmZXIoUGxhdGZvcm1HTE9iamVjdCBidWZm
ZXIpCiAgICAgaWYgKCFidWZmZXIpCiAgICAgICAgIHJldHVybiBHTF9GQUxTRTsKIAotICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiBHTF9GQUxTRTsKLQorICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIHJldHVybiBnbDo6SXNCdWZmZXIoYnVmZmVyKTsK
IH0KIAogR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzRW5hYmxlZChHQ0dM
ZW51bSBjYXApCiB7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0
dXJuIEdMX0ZBTFNFOwotCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgcmV0dXJuIGds
OjpJc0VuYWJsZWQoY2FwKTsKIH0KIApAQCAtMTMzOCw5ICsxMjAyLDcgQEAgR0NHTGJvb2xlYW4g
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzRnJhbWVidWZmZXIoUGxhdGZvcm1HTE9iamVjdCBm
cmFtZWJ1ZmZlcikKICAgICBpZiAoIWZyYW1lYnVmZmVyKQogICAgICAgICByZXR1cm4gR0xfRkFM
U0U7CiAKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gR0xf
RkFMU0U7Ci0KKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICByZXR1cm4gZ2w6OklzRnJh
bWVidWZmZXIoZnJhbWVidWZmZXIpOwogfQogCkBAIC0xMzQ5LDkgKzEyMTEsNyBAQCBHQ0dMYm9v
bGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNQcm9ncmFtKFBsYXRmb3JtR0xPYmplY3Qg
cHJvZ3JhbSkKICAgICBpZiAoIXByb2dyYW0pCiAgICAgICAgIHJldHVybiBHTF9GQUxTRTsKIAot
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiBHTF9GQUxTRTsK
LQorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIHJldHVybiBnbDo6SXNQcm9ncmFtKHBy
b2dyYW0pOwogfQogCkBAIC0xMzYwLDkgKzEyMjAsNyBAQCBHQ0dMYm9vbGVhbiBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6aXNSZW5kZXJidWZmZXIoUGxhdGZvcm1HTE9iamVjdCByZW5kZXJidWZm
ZQogICAgIGlmICghcmVuZGVyYnVmZmVyKQogICAgICAgICByZXR1cm4gR0xfRkFMU0U7CiAKLSAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gR0xfRkFMU0U7Ci0K
KyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICByZXR1cm4gZ2w6OklzUmVuZGVyYnVmZmVy
KHJlbmRlcmJ1ZmZlcik7CiB9CiAKQEAgLTEzNzEsOSArMTIyOSw3IEBAIEdDR0xib29sZWFuIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1NoYWRlcihQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikK
ICAgICBpZiAoIXNoYWRlcikKICAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwogCi0gICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwotCisgICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CiAgICAgcmV0dXJuIGdsOjpJc1NoYWRlcihzaGFkZXIpOwogfQog
CkBAIC0xMzgyLDU4ICsxMjM4LDQ0IEBAIEdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjppc1RleHR1cmUoUGxhdGZvcm1HTE9iamVjdCB0ZXh0dXJlKQogICAgIGlmICghdGV4dHVy
ZSkKICAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwogCi0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKLSAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwotCisgICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CiAgICAgcmV0dXJuIGdsOjpJc1RleHR1cmUodGV4dHVyZSk7CiB9CiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmxpbmVXaWR0aChHQ0dMZmxvYXQgd2lkdGgpCiB7Ci0gICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCisgICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CiAgICAgZ2w6OkxpbmVXaWR0aCh3aWR0aCk7CiB9CiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmxpbmtQcm9ncmFtKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkK
IHsKICAgICBBU1NFUlQocHJvZ3JhbSk7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
LSAgICAgICAgcmV0dXJuOwotCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgZ2w6Okxp
bmtQcm9ncmFtKHByb2dyYW0pOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpw
aXhlbFN0b3JlaShHQ0dMZW51bSBwbmFtZSwgR0NHTGludCBwYXJhbSkKIHsKLSAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KKyAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKICAgICBnbDo6UGl4ZWxTdG9yZWkocG5hbWUsIHBhcmFtKTsKIH0KIAogdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cG9seWdvbk9mZnNldChHQ0dMZmxvYXQgZmFjdG9yLCBH
Q0dMZmxvYXQgdW5pdHMpCiB7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAg
ICAgcmV0dXJuOwotCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgZ2w6OlBvbHlnb25P
ZmZzZXQoZmFjdG9yLCB1bml0cyk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnNhbXBsZUNvdmVyYWdlKEdDR0xjbGFtcGYgdmFsdWUsIEdDR0xib29sZWFuIGludmVydCkKIHsK
LSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KKyAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBnbDo6U2FtcGxlQ292ZXJhZ2UodmFsdWUsIGludmVy
dCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNjaXNzb3IoR0NHTGludCB4
LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKIHsKLSAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KKyAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKICAgICBnbDo6U2Npc3Nvcih4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKIH0K
IApAQCAtMTQ0MSw4ICsxMjgzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2hh
ZGVyU291cmNlKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyLCBjb25zdCBTdHJpbmcKIHsKICAgICBB
U1NFUlQoc2hhZGVyKTsKIAotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAg
IHJldHVybjsKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKIAogICAgIGNvbnN0IENTdHJpbmcm
IHNoYWRlclNvdXJjZUNTdHJpbmcgPSBzdHJpbmcudXRmOCgpOwogICAgIGNvbnN0IGNoYXIqIHNo
YWRlclNvdXJjZVB0ciA9IHNoYWRlclNvdXJjZUNTdHJpbmcuZGF0YSgpOwpAQCAtMTQ1MiwyMzQg
KzEyOTMsMTc4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNoYWRlclNvdXJjZShQ
bGF0Zm9ybUdMT2JqZWN0IHNoYWRlciwgY29uc3QgU3RyaW5nCiAKIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnN0ZW5jaWxGdW5jKEdDR0xlbnVtIGZ1bmMsIEdDR0xpbnQgcmVmLCBHQ0dM
dWludCBtYXNrKQogewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJl
dHVybjsKLQorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIGdsOjpTdGVuY2lsRnVuYyhm
dW5jLCByZWYsIG1hc2spOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVu
Y2lsRnVuY1NlcGFyYXRlKEdDR0xlbnVtIGZhY2UsIEdDR0xlbnVtIGZ1bmMsIEdDR0xpbnQgcmVm
LCBHQ0dMdWludCBtYXNrKQogewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAg
ICAgIHJldHVybjsKLQorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIGdsOjpTdGVuY2ls
RnVuY1NlcGFyYXRlKGZhY2UsIGZ1bmMsIHJlZiwgbWFzayk7CiB9CiAKIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrKEdDR0x1aW50IG1hc2spCiB7Ci0gICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCisgICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CiAgICAgZ2w6OlN0ZW5jaWxNYXNrKG1hc2spOwogfQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpzdGVuY2lsTWFza1NlcGFyYXRlKEdDR0xlbnVtIGZhY2UsIEdDR0x1
aW50IG1hc2spCiB7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0
dXJuOwotCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgZ2w6OlN0ZW5jaWxNYXNrU2Vw
YXJhdGUoZmFjZSwgbWFzayk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0
ZW5jaWxPcChHQ0dMZW51bSBmYWlsLCBHQ0dMZW51bSB6ZmFpbCwgR0NHTGVudW0genBhc3MpCiB7
Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCisgICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgZ2w6OlN0ZW5jaWxPcChmYWlsLCB6ZmFpbCwgenBh
c3MpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsT3BTZXBhcmF0
ZShHQ0dMZW51bSBmYWNlLCBHQ0dMZW51bSBmYWlsLCBHQ0dMZW51bSB6ZmFpbCwgR0NHTGVudW0g
enBhc3MpCiB7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJu
OwotCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgZ2w6OlN0ZW5jaWxPcFNlcGFyYXRl
KGZhY2UsIGZhaWwsIHpmYWlsLCB6cGFzcyk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnRleFBhcmFtZXRlcmYoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NH
TGZsb2F0IHZhbHVlKQogewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAg
IHJldHVybjsKLQorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIGdsOjpUZXhQYXJhbWV0
ZXJmKHRhcmdldCwgcG5hbWUsIHZhbHVlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dGV4UGFyYW1ldGVyaShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dM
aW50IHZhbHVlKQogewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJl
dHVybjsKLQorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIGdsOjpUZXhQYXJhbWV0ZXJp
KHRhcmdldCwgcG5hbWUsIHZhbHVlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dW5pZm9ybTFmKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xmbG9hdCB2MCkKIHsKLSAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KKyAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKICAgICBnbDo6VW5pZm9ybTFmKGxvY2F0aW9uLCB2MCk7CiB9CiAKIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xZnYoR0NHTGludCBsb2NhdGlvbiwgR0NH
THNpemVpIHNpemUsIGNvbnN0IEdDR0xmbG9hdCogYXJyYXkpCiB7Ci0gICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCisgICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CiAgICAgZ2w6OlVuaWZvcm0xZnYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKIH0KIAogdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJmKEdDR0xpbnQgbG9jYXRpb24sIEdD
R0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYxKQogewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCi0gICAgICAgIHJldHVybjsKLQorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIGds
OjpVbmlmb3JtMmYobG9jYXRpb24sIHYwLCB2MSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnVuaWZvcm0yZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTHNpemVpIHNpemUsIGNv
bnN0IEdDR0xmbG9hdCogYXJyYXkpCiB7CiAgICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBi
ZSBhIG11bHRpcGxlIG9mIDIuCi0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAg
ICAgcmV0dXJuOwotCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgZ2w6OlVuaWZvcm0y
ZnYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dW5pZm9ybTNmKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2F0
IHYxLCBHQ0dMZmxvYXQgdjIpCiB7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAg
ICAgICAgcmV0dXJuOwotCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgZ2w6OlVuaWZv
cm0zZihsb2NhdGlvbiwgdjAsIHYxLCB2Mik7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnVuaWZvcm0zZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTHNpemVpIHNpemUsIGNvbnN0
IEdDR0xmbG9hdCogYXJyYXkpCiB7CiAgICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBh
IG11bHRpcGxlIG9mIDMuCi0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAg
cmV0dXJuOwotCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgZ2w6OlVuaWZvcm0zZnYo
bG9jYXRpb24sIHNpemUsIGFycmF5KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dW5pZm9ybTRmKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYx
LCBHQ0dMZmxvYXQgdjIsIEdDR0xmbG9hdCB2MykKIHsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQotICAgICAgICByZXR1cm47Ci0KKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAg
ICBnbDo6VW5pZm9ybTRmKGxvY2F0aW9uLCB2MCwgdjEsIHYyLCB2Myk7CiB9CiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTHNp
emVpIHNpemUsIGNvbnN0IEdDR0xmbG9hdCogYXJyYXkpCiB7CiAgICAgLy8gRklYTUU6IGxlbmd0
aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDQuCi0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKLSAgICAgICAgcmV0dXJuOwotCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAg
Z2w6OlVuaWZvcm00ZnYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKIH0KIAogdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xpbnQgdjAp
CiB7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCisg
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgZ2w6OlVuaWZvcm0xaShsb2NhdGlvbiwgdjAp
OwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMWl2KEdDR0xpbnQg
bG9jYXRpb24sIEdDR0xzaXplaSBzaXplLCBjb25zdCBHQ0dMaW50KiBhcnJheSkKIHsKLSAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KKyAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKICAgICBnbDo6VW5pZm9ybTFpdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkp
OwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMmkoR0NHTGludCBs
b2NhdGlvbiwgR0NHTGludCB2MCwgR0NHTGludCB2MSkKIHsKLSAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
ICAgICBnbDo6VW5pZm9ybTJpKGxvY2F0aW9uLCB2MCwgdjEpOwogfQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMml2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xzaXplaSBz
aXplLCBjb25zdCBHQ0dMaW50KiBhcnJheSkKIHsKICAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRz
IHRvIGJlIGEgbXVsdGlwbGUgb2YgMi4KLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQot
ICAgICAgICByZXR1cm47Ci0KKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBnbDo6VW5p
Zm9ybTJpdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp1bmlmb3JtM2koR0NHTGludCBsb2NhdGlvbiwgR0NHTGludCB2MCwgR0NHTGlu
dCB2MSwgR0NHTGludCB2MikKIHsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAg
ICAgICByZXR1cm47Ci0KKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBnbDo6VW5pZm9y
bTNpKGxvY2F0aW9uLCB2MCwgdjEsIHYyKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dW5pZm9ybTNpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMc2l6ZWkgc2l6ZSwgY29uc3Qg
R0NHTGludCogYXJyYXkpCiB7CiAgICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11
bHRpcGxlIG9mIDMuCi0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0
dXJuOwotCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgZ2w6OlVuaWZvcm0zaXYobG9j
YXRpb24sIHNpemUsIGFycmF5KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybTRpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xpbnQgdjAsIEdDR0xpbnQgdjEsIEdDR0xp
bnQgdjIsIEdDR0xpbnQgdjMpCiB7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAg
ICAgICAgcmV0dXJuOwotCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgZ2w6OlVuaWZv
cm00aShsb2NhdGlvbiwgdjAsIHYxLCB2MiwgdjMpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp1bmlmb3JtNGl2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xzaXplaSBzaXplLCBj
b25zdCBHQ0dMaW50KiBhcnJheSkKIHsKICAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJl
IGEgbXVsdGlwbGUgb2YgNC4KLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAg
ICByZXR1cm47Ci0KKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBnbDo6VW5pZm9ybTRp
dihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bmlmb3JtTWF0cml4MmZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xzaXplaSBzaXplLCBH
Q0dMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdDR0xmbG9hdCogYXJyYXkpCiB7CiAgICAgLy8g
RklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDQuCi0gICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCisgICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CiAgICAgZ2w6OlVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIHNpemUsIHRyYW5zcG9z
ZSwgYXJyYXkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0
cml4M2Z2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xzaXplaSBzaXplLCBHQ0dMYm9vbGVhbiB0cmFu
c3Bvc2UsIGNvbnN0IEdDR0xmbG9hdCogYXJyYXkpCiB7CiAgICAgLy8gRklYTUU6IGxlbmd0aCBu
ZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDkuCi0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKLSAgICAgICAgcmV0dXJuOwotCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgZ2w6
OlVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIHNpemUsIHRyYW5zcG9zZSwgYXJyYXkpOwogfQog
CiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4NGZ2KEdDR0xpbnQg
bG9jYXRpb24sIEdDR0xzaXplaSBzaXplLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdD
R0xmbG9hdCogYXJyYXkpCiB7CiAgICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11
bHRpcGxlIG9mIDE2LgotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJl
dHVybjsKLQorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIGdsOjpVbmlmb3JtTWF0cml4
NGZ2KGxvY2F0aW9uLCBzaXplLCB0cmFuc3Bvc2UsIGFycmF5KTsKIH0KIAogdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dXNlUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCiB7
Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCisgICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgZ2w6OlVzZVByb2dyYW0ocHJvZ3JhbSk7CiB9CiAK
QEAgLTE2ODcsMTA1ICsxNDcyLDc5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZh
bGlkYXRlUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCiB7CiAgICAgQVNTRVJUKHBy
b2dyYW0pOwogCi0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJu
OwotCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgZ2w6OlZhbGlkYXRlUHJvZ3JhbShw
cm9ncmFtKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmli
MWYoR0NHTHVpbnQgaW5kZXgsIEdDR0xmbG9hdCB2MCkKIHsKLSAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
ICAgICBnbDo6VmVydGV4QXR0cmliMWYoaW5kZXgsIHYwKTsKIH0KIAogdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMWZ2KEdDR0x1aW50IGluZGV4LCBjb25zdCBHQ0dM
ZmxvYXQqIGFycmF5KQogewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAg
IHJldHVybjsKLQorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIGdsOjpWZXJ0ZXhBdHRy
aWIxZnYoaW5kZXgsIGFycmF5KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dmVydGV4QXR0cmliMmYoR0NHTHVpbnQgaW5kZXgsIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYx
KQogewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQor
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIGdsOjpWZXJ0ZXhBdHRyaWIyZihpbmRleCwg
djAsIHYxKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmli
MmZ2KEdDR0x1aW50IGluZGV4LCBjb25zdCBHQ0dMZmxvYXQqIGFycmF5KQogewotICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQorICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOwogICAgIGdsOjpWZXJ0ZXhBdHRyaWIyZnYoaW5kZXgsIGFycmF5KTsKIH0KIAog
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliM2YoR0NHTHVpbnQgaW5k
ZXgsIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYxLCBHQ0dMZmxvYXQgdjIpCiB7Ci0gICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCisgICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CiAgICAgZ2w6OlZlcnRleEF0dHJpYjNmKGluZGV4LCB2MCwgdjEsIHYyKTsK
IH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliM2Z2KEdDR0x1
aW50IGluZGV4LCBjb25zdCBHQ0dMZmxvYXQqIGFycmF5KQogewotICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQorICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwogICAgIGdsOjpWZXJ0ZXhBdHRyaWIzZnYoaW5kZXgsIGFycmF5KTsKIH0KIAogdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliNGYoR0NHTHVpbnQgaW5kZXgsIEdDR0xm
bG9hdCB2MCwgR0NHTGZsb2F0IHYxLCBHQ0dMZmxvYXQgdjIsIEdDR0xmbG9hdCB2MykKIHsKLSAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KKyAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKICAgICBnbDo6VmVydGV4QXR0cmliNGYoaW5kZXgsIHYwLCB2MSwg
djIsIHYzKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmli
NGZ2KEdDR0x1aW50IGluZGV4LCBjb25zdCBHQ0dMZmxvYXQqIGFycmF5KQogewotICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQorICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOwogICAgIGdsOjpWZXJ0ZXhBdHRyaWI0ZnYoaW5kZXgsIGFycmF5KTsKIH0KIAog
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliUG9pbnRlcihHQ0dMdWlu
dCBpbmRleCwgR0NHTGludCBzaXplLCBHQ0dMZW51bSB0eXBlLCBHQ0dMYm9vbGVhbiBub3JtYWxp
emVkLCBHQ0dMc2l6ZWkgc3RyaWRlLCBHQ0dMaW50cHRyIG9mZnNldCkKIHsKLSAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KKyAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKICAgICBnbDo6VmVydGV4QXR0cmliUG9pbnRlcihpbmRleCwgc2l6ZSwgdHlwZSwg
bm9ybWFsaXplZCwgc3RyaWRlLCByZWludGVycHJldF9jYXN0PEdMdm9pZCo+KHN0YXRpY19jYXN0
PGludHB0cl90PihvZmZzZXQpKSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnZlcnRleEF0dHJpYklQb2ludGVyKEdDR0x1aW50IGluZGV4LCBHQ0dMaW50IHNpemUsIEdDR0xl
bnVtIHR5cGUsIEdDR0xzaXplaSBzdHJpZGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQogewotICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQorICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOwogICAgIGdsOjpWZXJ0ZXhBdHRyaWJJUG9pbnRlcihpbmRleCwgc2l6ZSwg
dHlwZSwgc3RyaWRlLCByZWludGVycHJldF9jYXN0PEdMdm9pZCo+KHN0YXRpY19jYXN0PGludHB0
cl90PihvZmZzZXQpKSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZpZXdw
b3J0KEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWln
aHQpCiB7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwot
CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgZ2w6OlZpZXdwb3J0KHgsIHksIHdpZHRo
LCBoZWlnaHQpOwogfQogCiBQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpjcmVhdGVWZXJ0ZXhBcnJheSgpCiB7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
LSAgICAgICAgcmV0dXJuIDA7Ci0KKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBHTHVp
bnQgYXJyYXkgPSAwOwogICAgIGdsOjpHZW5WZXJ0ZXhBcnJheXMoMSwgJmFycmF5KTsKICAgICBy
ZXR1cm4gYXJyYXk7CkBAIC0xNzk1LDkgKzE1NTQsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpkZWxldGVWZXJ0ZXhBcnJheShQbGF0Zm9ybUdMT2JqZWN0IGFycmF5KQogewogICAg
IGlmICghYXJyYXkpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQotICAgICAgICByZXR1cm47Ci0KKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBn
bDo6RGVsZXRlVmVydGV4QXJyYXlzKDEsICZhcnJheSk7CiB9CiAKQEAgLTE4MDUsNjcgKzE1NjIs
NTEgQEAgR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzVmVydGV4QXJyYXko
UGxhdGZvcm1HTE9iamVjdCBhcnJheSkKIHsKICAgICBpZiAoIWFycmF5KQogICAgICAgICByZXR1
cm4gR0xfRkFMU0U7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0
dXJuIEdMX0ZBTFNFOwotCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgcmV0dXJuIGds
OjpJc1ZlcnRleEFycmF5KGFycmF5KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6YmluZFZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3QgYXJyYXkpCiB7Ci0gICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCisgICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CiAgICAgZ2w6OkJpbmRWZXJ0ZXhBcnJheShhcnJheSk7CiB9CiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEJvb2xlYW52KEdDR0xlbnVtIHBuYW1lLCBHQ0dMYm9v
bGVhbiogdmFsdWUpCiB7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAg
cmV0dXJuOwotCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgZ2w6OkdldEJvb2xlYW52
KHBuYW1lLCB2YWx1ZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEJ1
ZmZlclBhcmFtZXRlcml2KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQq
IHZhbHVlKQogewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVy
bjsKLQorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIGdsOjpHZXRCdWZmZXJQYXJhbWV0
ZXJpdih0YXJnZXQsIHBuYW1lLCB2YWx1ZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmdldEZsb2F0dihHQ0dMZW51bSBwbmFtZSwgR0NHTGZsb2F0KiB2YWx1ZSkKIHsKLSAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KKyAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKICAgICBnbDo6R2V0RmxvYXR2KHBuYW1lLCB2YWx1ZSk7CiB9CiAg
ICAgCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRlZ2VyNjR2KEdDR0xlbnVt
IHBuYW1lLCBHQ0dMaW50NjQqIHZhbHVlKQogewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCi0gICAgICAgIHJldHVybjsKLQorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgICp2
YWx1ZSA9IDA7CiAgICAgZ2w6OkdldEludGVnZXI2NHYocG5hbWUsIHZhbHVlKTsKIH0KIAogdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZWdlcjY0aV92KEdDR0xlbnVtIHBuYW1l
LCBHQ0dMdWludCBpbmRleCwgR0NHTGludDY0KiB2YWx1ZSkKIHsKLSAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KKyAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKICAgICAqdmFsdWUgPSAwOwogICAgIGdsOjpHZXRJbnRlZ2VyNjRpX3YocG5hbWUsIGluZGV4
LCB2YWx1ZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEZyYW1lYnVm
ZmVyQXR0YWNobWVudFBhcmFtZXRlcml2KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gYXR0YWNo
bWVudCwgR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQqIHZhbHVlKQogewotICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQorICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwogICAgIGlmIChhdHRhY2htZW50ID09IERFUFRIX1NURU5DSUxfQVRUQUNITUVOVCkKICAg
ICAgICAgYXR0YWNobWVudCA9IERFUFRIX0FUVEFDSE1FTlQ7IC8vIE9yIFNURU5DSUxfQVRUQUNI
TUVOVCwgZWl0aGVyIHdvcmtzLgogICAgIGdsOjpHZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJh
bWV0ZXJpdih0YXJnZXQsIGF0dGFjaG1lbnQsIHBuYW1lLCB2YWx1ZSk7CkBAIC0xODczLDkgKzE2
MTQsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGcmFtZWJ1ZmZlckF0dGFj
aG1lbnRQYXJhbWV0ZXJpdihHQ0dMZW51bSB0YXJnZQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRQcm9ncmFtaXYoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMZW51bSBw
bmFtZSwgR0NHTGludCogdmFsdWUpCiB7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
LSAgICAgICAgcmV0dXJuOwotCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgZ2w6Okdl
dFByb2dyYW1pdihwcm9ncmFtLCBwbmFtZSwgdmFsdWUpOwogfQogCkBAIC0xOTAzLDkgKzE2NDIs
NyBAQCBTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFByb2dyYW1JbmZvTG9nKFBs
YXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKIHsKICAgICBBU1NFUlQocHJvZ3JhbSk7CiAKLSAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KKyAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBHTGludCBsZW5ndGggPSAwOwogICAgIGdsOjpH
ZXRQcm9ncmFtaXYocHJvZ3JhbSwgR0xfSU5GT19MT0dfTEVOR1RILCAmbGVuZ3RoKTsKICAgICBp
ZiAoIWxlbmd0aCkKQEAgLTE5MjQsOSArMTY2MSw3IEBAIFN0cmluZyBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0UHJvZ3JhbUluZm9Mb2coUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtKQogCiB2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdihH
Q0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50KiB2YWx1ZSkKIHsKLSAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KKyAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKICAgICBnbDo6R2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYodGFyZ2V0
LCBwbmFtZSwgdmFsdWUpOwogfQogCkBAIC0xOTM0LDkgKzE2NjksNyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpnZXRTaGFkZXJpdihQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlciwgR0NH
TGVudW0gcG5hbQogewogICAgIEFTU0VSVChzaGFkZXIpOwogCi0gICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CiAgICAgZ2w6OkdldFNoYWRlcml2KHNoYWRlciwgcG5hbWUsIHZhbHVlKTsKIH0KIApAQCAtMTk0
NCw5ICsxNjc3LDcgQEAgU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTaGFkZXJJ
bmZvTG9nKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQogewogICAgIEFTU0VSVChzaGFkZXIpOwog
Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygp
OwotCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgR0xpbnQgbGVuZ3RoID0gMDsKICAg
ICBnbDo6R2V0U2hhZGVyaXYoc2hhZGVyLCBHTF9JTkZPX0xPR19MRU5HVEgsICZsZW5ndGgpOwog
ICAgIGlmICghbGVuZ3RoKQpAQCAtMTk2Nyw0MSArMTY5OCwzMSBAQCBTdHJpbmcgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldFNoYWRlclNvdXJjZShQbGF0Zm9ybUdMT2JqZWN0KQogCiB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJmdihHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMZmxvYXQqIHZhbHVlKQogewotICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQorICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwogICAgIGdsOjpHZXRUZXhQYXJhbWV0ZXJmdih0YXJnZXQsIHBuYW1lLCB2YWx1ZSk7CiB9
CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFRleFBhcmFtZXRlcml2KEdDR0xl
bnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQqIHZhbHVlKQogewotICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQorICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOwogICAgIGdsOjpHZXRUZXhQYXJhbWV0ZXJpdih0YXJnZXQsIHBuYW1lLCB2YWx1
ZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1mdihQbGF0
Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0xpbnQgbG9jYXRpb24sIEdDR0xmbG9hdCogdmFsdWUp
CiB7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCisg
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgZ2w6OkdldFVuaWZvcm1mdihwcm9ncmFtLCBs
b2NhdGlvbiwgdmFsdWUpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRV
bmlmb3JtaXYoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMaW50IGxvY2F0aW9uLCBHQ0dM
aW50KiB2YWx1ZSkKIHsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICBy
ZXR1cm47Ci0KKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBnbDo6R2V0VW5pZm9ybWl2
KHByb2dyYW0sIGxvY2F0aW9uLCB2YWx1ZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmdldFVuaWZvcm11aXYoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMaW50IGxv
Y2F0aW9uLCBHQ0dMdWludCogdmFsdWUpCiB7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKLSAgICAgICAgcmV0dXJuOwotCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgZ2w6
OkdldFVuaWZvcm11aXYocHJvZ3JhbSwgbG9jYXRpb24sIHZhbHVlKTsKIH0KIApAQCAtMjAwOSwz
MiArMTczMCwyNSBAQCBHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3Jt
TG9jYXRpb24oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjbwogewogICAgIEFTU0VSVChwcm9n
cmFtKTsKIAotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiAt
MTsKLQorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIHJldHVybiBnbDo6R2V0VW5pZm9y
bUxvY2F0aW9uKHByb2dyYW0sIG5hbWUudXRmOCgpLmRhdGEoKSk7CiB9CiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldFZlcnRleEF0dHJpYmZ2KEdDR0x1aW50IGluZGV4LCBHQ0dM
ZW51bSBwbmFtZSwgR0NHTGZsb2F0KiB2YWx1ZSkKIHsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQotICAgICAgICByZXR1cm47Ci0KKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAg
ICBnbDo6R2V0VmVydGV4QXR0cmliZnYoaW5kZXgsIHBuYW1lLCB2YWx1ZSk7CiB9CiAKIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFZlcnRleEF0dHJpYml2KEdDR0x1aW50IGluZGV4
LCBHQ0dMZW51bSBwbmFtZSwgR0NHTGludCogdmFsdWUpCiB7Ci0gICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CiAgICAgZ2w6OkdldFZlcnRleEF0dHJpYml2KGluZGV4LCBwbmFtZSwgdmFsdWUpOwogfQogCiBH
Q0dMc2l6ZWlwdHIgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFZlcnRleEF0dHJpYk9mZnNl
dChHQ0dMdWludCBpbmRleCwgR0NHTGVudW0gcG5hbWUpCiB7Ci0gICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CiAKICAgICBHTHZvaWQqIHBvaW50ZXIgPSAwOwogICAgIGdsOjpHZXRWZXJ0ZXhBdHRyaWJQb2lu
dGVydihpbmRleCwgcG5hbWUsICZwb2ludGVyKTsKQEAgLTIwNDMsOCArMTc1Nyw3IEBAIEdDR0xz
aXplaXB0ciBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VmVydGV4QXR0cmliT2Zmc2V0KEdD
R0x1aW50IGluZGV4LCBHQ0dMCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN1
YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmYsIEdD
R0xpbnQgeW9mZiwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBm
b3JtYXQsIEdDR0xlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscykKIHsKLSAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47CisgICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CiAKICAgICAvLyBGSVhNRTogd2Ugd2lsbCBuZWVkIHRvIGRlYWwgd2l0aCBQaXhlbFN0
b3JlIHBhcmFtcyB3aGVuIGRlYWxpbmcgd2l0aCBpbWFnZSBidWZmZXJzIHRoYXQgZGlmZmVyIGZy
b20gdGhlIHN1YmltYWdlIHNpemUuCiAgICAgZ2w6OlRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZl
bCwgeG9mZiwgeW9mZiwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOwpAQCAt
MjA1MywyNyArMTc2NiwyMSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhTdWJJ
bWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTAogCiB2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQs
IEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgs
IEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyLCBHQ0dMc2l6ZWkgaW1hZ2VTaXplLCBj
b25zdCB2b2lkKiBkYXRhKQogewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAg
ICAgIHJldHVybjsKLQorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIGdsOjpDb21wcmVz
c2VkVGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdo
dCwgYm9yZGVyLCBpbWFnZVNpemUsIGRhdGEpOwogICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3Vu
dC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOwogfQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQs
IEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgeG9mZnNldCwgR0NHTGludCB5b2Zmc2V0LCBHQ0dMc2l6
ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTHNpemVpIGlt
YWdlU2l6ZSwgY29uc3Qgdm9pZCogZGF0YSkKIHsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQotICAgICAgICByZXR1cm47Ci0KKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBn
bDo6Q29tcHJlc3NlZFRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNl
dCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCBpbWFnZVNpemUsIGRhdGEpOwogICAgIG1fc3RhdGUu
dGV4dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOwogfQog
CiBQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVCdWZmZXIo
KQogewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiAwOwot
CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgR0x1aW50IG8gPSAwOwogICAgIGdsOjpH
ZW5CdWZmZXJzKDEsICZvKTsKICAgICByZXR1cm4gbzsKQEAgLTIwODEsOSArMTc4OCw3IEBAIFBs
YXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZUJ1ZmZlcigpCiAK
IFBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZUZyYW1lYnVm
ZmVyKCkKIHsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4g
MDsKLQorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIEdMdWludCBvID0gMDsKICAgICBn
bDo6R2VuRnJhbWVidWZmZXJzKDEsICZvKTsKICAgICByZXR1cm4gbzsKQEAgLTIwOTEsMTcgKzE3
OTYsMTMgQEAgUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRl
RnJhbWVidWZmZXIoKQogCiBQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpjcmVhdGVQcm9ncmFtKCkKIHsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAg
ICAgICByZXR1cm4gMDsKLQorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIHJldHVybiBn
bDo6Q3JlYXRlUHJvZ3JhbSgpOwogfQogCiBQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjcmVhdGVSZW5kZXJidWZmZXIoKQogewotICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCi0gICAgICAgIHJldHVybiAwOwotCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CiAgICAgR0x1aW50IG8gPSAwOwogICAgIGdsOjpHZW5SZW5kZXJidWZmZXJzKDEsICZvKTsKICAg
ICByZXR1cm4gbzsKQEAgLTIxMDksMTcgKzE4MTAsMTMgQEAgUGxhdGZvcm1HTE9iamVjdCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUmVuZGVyYnVmZmVyKCkKIAogUGxhdGZvcm1HTE9i
amVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlU2hhZGVyKEdDR0xlbnVtIHR5cGUp
CiB7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0K
KyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICByZXR1cm4gZ2w6OkNyZWF0ZVNoYWRlcigo
dHlwZSA9PSBGUkFHTUVOVF9TSEFERVIpID8gR0xfRlJBR01FTlRfU0hBREVSIDogR0xfVkVSVEVY
X1NIQURFUik7CiB9CiAKIFBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNyZWF0ZVRleHR1cmUoKQogewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAg
ICAgIHJldHVybiAwOwotCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgR0x1aW50IG8g
PSAwOwogICAgIGdsOjpHZW5UZXh0dXJlcygxLCAmbyk7CiAgICAgbV9zdGF0ZS50ZXh0dXJlU2Vl
ZENvdW50LmFkZChvKTsKQEAgLTIxMjgsMTcgKzE4MjUsMTMgQEAgUGxhdGZvcm1HTE9iamVjdCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlVGV4dHVyZSgpCiAKIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmRlbGV0ZUJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZlcikKIHsK
LSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KKyAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBnbDo6RGVsZXRlQnVmZmVycygxLCAmYnVmZmVyKTsK
IH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlRnJhbWVidWZmZXIoUGxh
dGZvcm1HTE9iamVjdCBmcmFtZWJ1ZmZlcikKIHsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQotICAgICAgICByZXR1cm47Ci0KKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICAv
LyBNYWtlIHN1cmUgdGhlIGZyYW1lYnVmZmVyIGlzIG5vdCBnb2luZyB0byBiZSB1c2VkIGZvciBk
cmF3aW5nCiAgICAgLy8gb3BlcmF0aW9ucyBhZnRlciBpdCBnZXRzIGRlbGV0ZWQuCiAgICAgaWYg
KG1faXNGb3JXZWJHTDIpIHsKQEAgLTIxNTMsMzMgKzE4NDYsMjUgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6ZGVsZXRlRnJhbWVidWZmZXIoUGxhdGZvcm1HTE9iamVjdCBmcmFtZWJ1
ZmZlcikKIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlUHJvZ3JhbShQbGF0
Zm9ybUdMT2JqZWN0IHByb2dyYW0pCiB7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
LSAgICAgICAgcmV0dXJuOwotCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgZ2w6OkRl
bGV0ZVByb2dyYW0ocHJvZ3JhbSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmRlbGV0ZVJlbmRlcmJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0IHJlbmRlcmJ1ZmZlcikKIHsKLSAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KKyAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKICAgICBnbDo6RGVsZXRlUmVuZGVyYnVmZmVycygxLCAmcmVuZGVy
YnVmZmVyKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlU2hhZGVy
KFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQogewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCi0gICAgICAgIHJldHVybjsKLQorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIGds
OjpEZWxldGVTaGFkZXIoc2hhZGVyKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6ZGVsZXRlVGV4dHVyZShQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUpCiB7Ci0gICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCisgICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CiAgICAgbV9zdGF0ZS5ib3VuZFRleHR1cmVNYXAucmVtb3ZlSWYoW3RleHR1cmVd
IChhdXRvJiBrZXlWYWx1ZSkgewogICAgICAgICByZXR1cm4ga2V5VmFsdWUudmFsdWUuZmlyc3Qg
PT0gdGV4dHVyZTsKICAgICB9KTsKQEAgLTIyMzUsOSArMTkyMCw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmRpc3BhdGNoQ29udGV4dENoYW5nZWROb3RpZmljYXRpb24oKQogCiB2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTJERGlyZWN0KEdDR0xlbnVtIHRh
cmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3
aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBib3JkZXIsIEdDR0xlbnVtIGZvcm1hdCwg
R0NHTGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzKQogewotICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQorICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwogICAgIGlmICghbV9pc0ZvcldlYkdMMiAmJiBtX2V4dGVuc2lvbnMpCiAgICAgICAgIGludGVy
bmFsZm9ybWF0ID0gbV9leHRlbnNpb25zLT5hZGp1c3RXZWJHTDFUZXh0dXJlSW50ZXJuYWxGb3Jt
YXQoaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSk7CiAgICAgZ2w6OlRleEltYWdlMkQodGFy
Z2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0
LCB0eXBlLCBwaXhlbHMpOwpAQCAtMjI0Niw0NSArMTkyOSwzNCBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTJERGlyZWN0KEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBs
ZXZlbCwgRwogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3QXJyYXlzSW5zdGFu
Y2VkKEdDR0xlbnVtIG1vZGUsIEdDR0xpbnQgZmlyc3QsIEdDR0xzaXplaSBjb3VudCwgR0NHTHNp
emVpIHByaW1jb3VudCkKIHsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAg
ICByZXR1cm47Ci0KICAgICBpZiAobV9pc0ZvcldlYkdMMikKICAgICAgICAgZ2w6OkRyYXdBcnJh
eXNJbnN0YW5jZWQobW9kZSwgZmlyc3QsIGNvdW50LCBwcmltY291bnQpOwogICAgIGVsc2UKLSAg
ICAgICAgZ2w6OkRyYXdBcnJheXNJbnN0YW5jZWRBTkdMRShtb2RlLCBmaXJzdCwgY291bnQsIHBy
aW1jb3VudCk7CisgICAgICAgIGdldEV4dGVuc2lvbnMoKS5kcmF3QXJyYXlzSW5zdGFuY2VkKG1v
ZGUsIGZpcnN0LCBjb3VudCwgcHJpbWNvdW50KTsKICAgICBjaGVja0dQVVN0YXR1cygpOwogfQog
CiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3RWxlbWVudHNJbnN0YW5jZWQoR0NH
TGVudW0gbW9kZSwgR0NHTHNpemVpIGNvdW50LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50cHRyIG9m
ZnNldCwgR0NHTHNpemVpIHByaW1jb3VudCkKIHsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQotICAgICAgICByZXR1cm47Ci0KICAgICBpZiAobV9pc0ZvcldlYkdMMikKICAgICAgICAg
Z2w6OkRyYXdFbGVtZW50c0luc3RhbmNlZChtb2RlLCBjb3VudCwgdHlwZSwgcmVpbnRlcnByZXRf
Y2FzdDx2b2lkKj4ob2Zmc2V0KSwgcHJpbWNvdW50KTsKICAgICBlbHNlCi0gICAgICAgIGdsOjpE
cmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRShtb2RlLCBjb3VudCwgdHlwZSwgcmVpbnRlcnByZXRf
Y2FzdDx2b2lkKj4ob2Zmc2V0KSwgcHJpbWNvdW50KTsKKyAgICAgICAgZ2V0RXh0ZW5zaW9ucygp
LmRyYXdFbGVtZW50c0luc3RhbmNlZChtb2RlLCBjb3VudCwgdHlwZSwgb2Zmc2V0LCBwcmltY291
bnQpOwogICAgIGNoZWNrR1BVU3RhdHVzKCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnZlcnRleEF0dHJpYkRpdmlzb3IoR0NHTHVpbnQgaW5kZXgsIEdDR0x1aW50IGRpdmlz
b3IpCiB7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwot
CiAgICAgaWYgKG1faXNGb3JXZWJHTDIpCiAgICAgICAgIGdsOjpWZXJ0ZXhBdHRyaWJEaXZpc29y
KGluZGV4LCBkaXZpc29yKTsKICAgICBlbHNlCi0gICAgICAgIGdsOjpWZXJ0ZXhBdHRyaWJEaXZp
c29yQU5HTEUoaW5kZXgsIGRpdmlzb3IpOworICAgICAgICBnZXRFeHRlbnNpb25zKCkudmVydGV4
QXR0cmliRGl2aXNvcihpbmRleCwgZGl2aXNvcik7CiB9CiAKIEdDR0x1aW50IEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtQmxvY2tJbmRleChQbGF0Zm9ybUdMT2JqZWN0IHByb2dy
YW0sIGNvbnN0IFN0cmluZyYgdW5pZm9ybUJsb2NrTmFtZSkKIHsKICAgICBBU1NFUlQocHJvZ3Jh
bSk7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIEdMX0lO
VkFMSURfSU5ERVg7Ci0KKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICByZXR1cm4gZ2w6
OkdldFVuaWZvcm1CbG9ja0luZGV4KHByb2dyYW0sIHVuaWZvcm1CbG9ja05hbWUudXRmOCgpLmRh
dGEoKSk7CiB9CiAKQEAgLTIzMDEsOSArMTk3Myw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1CbG9ja2l2KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwK
IFN0cmluZyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybUJsb2NrTmFt
ZShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1aW50IHVuaWZvcm1CbG9ja0luZGV4KQog
ewogICAgIEFTU0VSVChwcm9ncmFtKTsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQot
ICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAg
ICBHTGludCBtYXhMZW5ndGggPSAwOwogICAgIGdsOjpHZXRQcm9ncmFtaXYocHJvZ3JhbSwgR0xf
QUNUSVZFX1VOSUZPUk1fQkxPQ0tfTUFYX05BTUVfTEVOR1RILCAmbWF4TGVuZ3RoKTsKICAgICBp
ZiAobWF4TGVuZ3RoIDw9IDApIHsKQEAgLTIzMjEsOSArMTk5MSw3IEBAIFN0cmluZyBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybUJsb2NrTmFtZShQbGF0Zm9ybUdMT2Jq
ZWN0IHByb2dyCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtQmxvY2tCaW5k
aW5nKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgdW5pZm9ybUJsb2NrSW5kZXgs
IEdDR0x1aW50IHVuaWZvcm1CbG9ja0JpbmRpbmcpCiB7CiAgICAgQVNTRVJUKHByb2dyYW0pOwot
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQorICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwogICAgIGdsOjpVbmlmb3JtQmxvY2tCaW5kaW5nKHByb2dyYW0s
IHVuaWZvcm1CbG9ja0luZGV4LCB1bmlmb3JtQmxvY2tCaW5kaW5nKTsKIH0KIApAQCAtMjMzMSw5
ICsxOTk5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybUJsb2NrQmlu
ZGluZyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0wKIAogUGxhdGZvcm1HTE9iamVjdCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUXVlcnkoKQogewotICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiAwOwotCisgICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CiAgICAgR0x1aW50IG5hbWUgPSAwOwogICAgIGdsOjpHZW5RdWVyaWVzKDEsICZuYW1l
KTsKICAgICByZXR1cm4gbmFtZTsKQEAgLTIzNDEsMjUgKzIwMDcsMTkgQEAgUGxhdGZvcm1HTE9i
amVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUXVlcnkoKQogCiB2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpiZWdpblF1ZXJ5KEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1H
TE9iamVjdCBxdWVyeSkKIHsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAg
ICByZXR1cm47Ci0KKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBnbDo6QmVnaW5RdWVy
eSh0YXJnZXQsIHF1ZXJ5KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZW5k
UXVlcnkoR0NHTGVudW0gdGFyZ2V0KQogewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
Ci0gICAgICAgIHJldHVybjsKLQorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIGdsOjpF
bmRRdWVyeSh0YXJnZXQpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRR
dWVyeU9iamVjdHVpdihHQ0dMdWludCBpZCwgR0NHTGVudW0gcG5hbWUsIEdDR0x1aW50KiBwYXJh
bXMpCiB7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwot
CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgZ2w6OkdldFF1ZXJ5T2JqZWN0dWl2KGlk
LCBwbmFtZSwgcGFyYW1zKTsKIH0KIApAQCAtMjM2Nyw5ICsyMDI3LDcgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0UXVlcnlPYmplY3R1aXYoR0NHTHVpbnQgaWQsIEdDR0xlbnVt
IHBuYW1lLCBHQ0cKIAogUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Y3JlYXRlVHJhbnNmb3JtRmVlZGJhY2soKQogewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCi0gICAgICAgIHJldHVybiAwOwotCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAg
R0x1aW50IG5hbWUgPSAwOwogICAgIGdsOjpHZW5UcmFuc2Zvcm1GZWVkYmFja3MoMSwgJm5hbWUp
OwogICAgIHJldHVybiBuYW1lOwpAQCAtMjM3Nyw2NCArMjAzNSw0OSBAQCBQbGF0Zm9ybUdMT2Jq
ZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVUcmFuc2Zvcm1GZWVkYmFjaygpCiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVRyYW5zZm9ybUZlZWRiYWNrKFBs
YXRmb3JtR0xPYmplY3QgdHJhbnNmb3JtRmVlZGJhY2spCiB7Ci0gICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CiAgICAgZ2w6OkRlbGV0ZVRyYW5zZm9ybUZlZWRiYWNrcygxLCAmdHJhbnNmb3JtRmVlZGJhY2sp
OwogfQogCiBHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNUcmFuc2Zvcm1G
ZWVkYmFjayhQbGF0Zm9ybUdMT2JqZWN0IHRyYW5zZm9ybUZlZWRiYWNrKQogewotICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiBHTF9GQUxTRTsKLQorICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwogICAgIHJldHVybiBnbDo6SXNUcmFuc2Zvcm1GZWVkYmFjayh0
cmFuc2Zvcm1GZWVkYmFjayk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJp
bmRUcmFuc2Zvcm1GZWVkYmFjayhHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgdHJh
bnNmb3JtRmVlZGJhY2spCiB7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAg
ICAgcmV0dXJuOwotCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgZ2w6OkJpbmRUcmFu
c2Zvcm1GZWVkYmFjayh0YXJnZXQsIHRyYW5zZm9ybUZlZWRiYWNrKTsKIH0KIAogdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6YmVnaW5UcmFuc2Zvcm1GZWVkYmFjayhHQ0dMZW51bSBwcmlt
aXRpdmVNb2RlKQogewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJl
dHVybjsKLQorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIGdsOjpCZWdpblRyYW5zZm9y
bUZlZWRiYWNrKHByaW1pdGl2ZU1vZGUpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjplbmRUcmFuc2Zvcm1GZWVkYmFjaygpCiB7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKLSAgICAgICAgcmV0dXJuOwotCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAg
Z2w6OkVuZFRyYW5zZm9ybUZlZWRiYWNrKCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFt
LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgdmFyeWluZ3MsIEdDR0xlbnVtIGJ1ZmZlck1vZGUpCiB7
Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAg
VmVjdG9yPENTdHJpbmc+IGNvbnZlcnRlZFZhcnlpbmdzID0gdmFyeWluZ3MubWFwKFtdKGNvbnN0
IFN0cmluZyYgdmFyeWluZykgewogICAgICAgICByZXR1cm4gdmFyeWluZy51dGY4KCk7CiAgICAg
fSk7CiAgICAgVmVjdG9yPGNvbnN0IGNoYXIqPiBwb2ludGVyc1RvVmFyeWluZ3MgPSBjb252ZXJ0
ZWRWYXJ5aW5ncy5tYXAoW10oY29uc3QgQ1N0cmluZyYgdmFyeWluZykgewogICAgICAgICByZXR1
cm4gdmFyeWluZy5kYXRhKCk7CiAgICAgfSk7Ci0KKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
ICAgICBnbDo6VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncyhwcm9ncmFtLCBwb2ludGVyc1RvVmFy
eWluZ3Muc2l6ZSgpLCBwb2ludGVyc1RvVmFyeWluZ3MuZGF0YSgpLCBidWZmZXJNb2RlKTsKIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5
aW5nKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8m
IGluZm8pCiB7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJu
OwotCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgR0NHTHNpemVpIGJ1ZlNpemUgPSAw
OwogICAgIGdsOjpHZXRQcm9ncmFtaXYocHJvZ3JhbSwgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OlRSQU5TRk9STV9GRUVEQkFDS19WQVJZSU5HX01BWF9MRU5HVEgsICZidWZTaXplKTsKICAgICBp
ZiAoIWJ1ZlNpemUpCkBAIC0yNDU0LDkgKzIwOTcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmcoUGxhdGZvcm1HTE9iamVjdCBwcm9n
cgogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyQmFzZShHQ0dMZW51
bSB0YXJnZXQsIEdDR0x1aW50IGluZGV4LCBQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZlcikKIHsKLSAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KKyAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKICAgICBnbDo6QmluZEJ1ZmZlckJhc2UodGFyZ2V0LCBpbmRleCwg
YnVmZmVyKTsKIH0KIApAQCAtMjQ5MCw0OSArMjEzMSwzMiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpnZXRCdWZmZXJTdWJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludHB0ciBz
cmNCeQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGl0RnJhbWVidWZmZXIoR0NH
TGludCBzcmNYMCwgR0NHTGludCBzcmNZMCwgR0NHTGludCBzcmNYMSwgR0NHTGludCBzcmNZMSwg
R0NHTGludCBkc3RYMCwgR0NHTGludCBkc3RZMCwgR0NHTGludCBkc3RYMSwgR0NHTGludCBkc3RZ
MSwgR0NHTGJpdGZpZWxkIG1hc2ssIEdDR0xlbnVtIGZpbHRlcikKIHsKLSAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KICAgICBnbDo6QmxpdEZyYW1lYnVm
ZmVyKHNyY1gwLCBzcmNZMCwgc3JjWDEsIHNyY1kxLCBkc3RYMCwgZHN0WTAsIGRzdFgxLCBkc3RZ
MSwgbWFzaywgZmlsdGVyKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJh
bWVidWZmZXJUZXh0dXJlTGF5ZXIoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50
LCBQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgbGF5ZXIp
CiB7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCiAg
ICAgZ2w6OkZyYW1lYnVmZmVyVGV4dHVyZUxheWVyKHRhcmdldCwgYXR0YWNobWVudCwgdGV4dHVy
ZSwgbGV2ZWwsIGxheWVyKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aW52
YWxpZGF0ZUZyYW1lYnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVpIG51bUF0dGFjaG1l
bnRzLCBjb25zdCBHQ0dMZW51bSogYXR0YWNobWVudHMpCiB7Ci0gICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgZ2w6OkludmFsaWRhdGVGcmFtZWJ1
ZmZlcih0YXJnZXQsIG51bUF0dGFjaG1lbnRzLCBhdHRhY2htZW50cyk7CiB9CiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmludmFsaWRhdGVTdWJGcmFtZWJ1ZmZlcihHQ0dMZW51bSB0
YXJnZXQsIEdDR0xzaXplaSBudW1BdHRhY2htZW50cywgY29uc3QgR0NHTGVudW0qIGF0dGFjaG1l
bnRzLCBHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVp
Z2h0KQogewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsK
LQogICAgIGdsOjpJbnZhbGlkYXRlU3ViRnJhbWVidWZmZXIodGFyZ2V0LCBudW1BdHRhY2htZW50
cywgYXR0YWNobWVudHMsIHgsIHksIHdpZHRoLCBoZWlnaHQpOwogfQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpyZWFkQnVmZmVyKEdDR0xlbnVtIHNyYykKIHsKLSAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KICAgICBnbDo6UmVhZEJ1ZmZl
cihzcmMpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5VGV4U3ViSW1h
Z2UzRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgeG9mZnNldCwgR0NH
TGludCB5b2Zmc2V0LCBHQ0dMaW50IHpvZmZzZXQsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dM
c2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCiB7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAg
ICAgYXV0byBhdHRycyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7CiAgICAgR0NHTGVudW0gZnJhbWVi
dWZmZXJUYXJnZXQgPSBtX2lzRm9yV2ViR0wyID8gR3JhcGhpY3NDb250ZXh0R0w6OlJFQURfRlJB
TUVCVUZGRVIgOiBHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVI7CiAKQEAgLTI1NDcsMjI1
ICsyMTcxLDE2MyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5VGV4U3ViSW1h
Z2UzRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsCiAKIEdDR0xpbnQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldEZyYWdEYXRhTG9jYXRpb24oUGxhdGZvcm1HTE9iamVjdCBwcm9n
cmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCiB7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKLSAgICAgICAgcmV0dXJuIC0xOwotCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAg
cmV0dXJuIGdsOjpHZXRGcmFnRGF0YUxvY2F0aW9uKHByb2dyYW0sIG5hbWUudXRmOCgpLmRhdGEo
KSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xdWkoR0NHTGlu
dCBsb2NhdGlvbiwgR0NHTHVpbnQgdjApCiB7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKLSAgICAgICAgcmV0dXJuOwotCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgZ2w6
OlVuaWZvcm0xdWkobG9jYXRpb24sIHYwKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dW5pZm9ybTJ1aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCwgR0NHTHVpbnQg
djEpCiB7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwot
CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgZ2w6OlVuaWZvcm0ydWkobG9jYXRpb24s
IHYwLCB2MSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zdWko
R0NHTGludCBsb2NhdGlvbiwgR0NHTHVpbnQgdjAsIEdDR0x1aW50IHYxLCBHQ0dMdWludCB2MikK
IHsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KKyAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBnbDo6VW5pZm9ybTN1aShsb2NhdGlvbiwgdjAs
IHYxLCB2Mik7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00dWko
R0NHTGludCBsb2NhdGlvbiwgR0NHTHVpbnQgdjAsIEdDR0x1aW50IHYxLCBHQ0dMdWludCB2Miwg
R0NHTHVpbnQgdjMpCiB7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAg
cmV0dXJuOwotCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgZ2w6OlVuaWZvcm00dWko
bG9jYXRpb24sIHYwLCB2MSwgdjIsIHYzKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dW5pZm9ybTF1aXYoR0NHTGludCBsb2NhdGlvbiwgY29uc3QgR0NHTHVpbnQqIGRhdGEs
IEdDR0x1aW50IHNyY09mZnNldCwgR0NHTHVpbnQgc3JjTGVuZ3RoKQogewotICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQorICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOwogICAgIGdsOjpVbmlmb3JtMXVpdihsb2NhdGlvbiwgc3JjTGVuZ3RoLCBkYXRhICsg
c3JjT2Zmc2V0KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJ1
aXYoR0NHTGludCBsb2NhdGlvbiwgY29uc3QgR0NHTHVpbnQqIGRhdGEsIEdDR0x1aW50IHNyY09m
ZnNldCwgR0NHTHVpbnQgc3JjTGVuZ3RoKQogewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCi0gICAgICAgIHJldHVybjsKLQorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIGds
OjpVbmlmb3JtMnVpdihsb2NhdGlvbiwgc3JjTGVuZ3RoLCBkYXRhICsgc3JjT2Zmc2V0KTsKIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTN1aXYoR0NHTGludCBsb2Nh
dGlvbiwgY29uc3QgR0NHTHVpbnQqIGRhdGEsIEdDR0x1aW50IHNyY09mZnNldCwgR0NHTHVpbnQg
c3JjTGVuZ3RoKQogewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJl
dHVybjsKLQorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIGdsOjpVbmlmb3JtM3Vpdihs
b2NhdGlvbiwgc3JjTGVuZ3RoLCBkYXRhICsgc3JjT2Zmc2V0KTsKIH0KIAogdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTR1aXYoR0NHTGludCBsb2NhdGlvbiwgY29uc3QgR0NH
THVpbnQqIGRhdGEsIEdDR0x1aW50IHNyY09mZnNldCwgR0NHTHVpbnQgc3JjTGVuZ3RoKQogewot
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQorICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwogICAgIGdsOjpVbmlmb3JtNHVpdihsb2NhdGlvbiwgc3JjTGVu
Z3RoLCBkYXRhICsgc3JjT2Zmc2V0KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dW5pZm9ybU1hdHJpeDJ4M2Z2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5z
cG9zZSwgY29uc3QgR0NHTGZsb2F0KiBkYXRhLCBHQ0dMdWludCBzcmNPZmZzZXQsIEdDR0x1aW50
IHNyY0xlbmd0aCkKIHsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICBy
ZXR1cm47Ci0KKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBnbDo6VW5pZm9ybU1hdHJp
eDJ4M2Z2KGxvY2F0aW9uLCBzcmNMZW5ndGgsIHRyYW5zcG9zZSwgZGF0YSArIHNyY09mZnNldCk7
CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgzeDJmdihH
Q0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdDR0xmbG9hdCog
ZGF0YSwgR0NHTHVpbnQgc3JjT2Zmc2V0LCBHQ0dMdWludCBzcmNMZW5ndGgpCiB7Ci0gICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCisgICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CiAgICAgZ2w6OlVuaWZvcm1NYXRyaXgzeDJmdihsb2NhdGlvbiwgc3JjTGVu
Z3RoLCB0cmFuc3Bvc2UsIGRhdGEgKyBzcmNPZmZzZXQpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4Mng0ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJv
b2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHQ0dMZmxvYXQqIGRhdGEsIEdDR0x1aW50IHNyY09mZnNl
dCwgR0NHTHVpbnQgc3JjTGVuZ3RoKQogewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
Ci0gICAgICAgIHJldHVybjsKLQorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIGdsOjpV
bmlmb3JtTWF0cml4Mng0ZnYobG9jYXRpb24sIHNyY0xlbmd0aCwgdHJhbnNwb3NlLCBkYXRhICsg
c3JjT2Zmc2V0KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1h
dHJpeDR4MmZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3Qg
R0NHTGZsb2F0KiBkYXRhLCBHQ0dMdWludCBzcmNPZmZzZXQsIEdDR0x1aW50IHNyY0xlbmd0aCkK
IHsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KKyAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBnbDo6VW5pZm9ybU1hdHJpeDR4MmZ2KGxvY2F0
aW9uLCBzcmNMZW5ndGgsIHRyYW5zcG9zZSwgZGF0YSArIHNyY09mZnNldCk7CiB9CiAKIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgzeDRmdihHQ0dMaW50IGxvY2F0
aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdDR0xmbG9hdCogZGF0YSwgR0NHTHVp
bnQgc3JjT2Zmc2V0LCBHQ0dMdWludCBzcmNMZW5ndGgpCiB7Ci0gICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CiAgICAgZ2w6OlVuaWZvcm1NYXRyaXgzeDRmdihsb2NhdGlvbiwgc3JjTGVuZ3RoLCB0cmFuc3Bv
c2UsIGRhdGEgKyBzcmNPZmZzZXQpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtTWF0cml4NHgzZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNw
b3NlLCBjb25zdCBHQ0dMZmxvYXQqIGRhdGEsIEdDR0x1aW50IHNyY09mZnNldCwgR0NHTHVpbnQg
c3JjTGVuZ3RoKQogewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJl
dHVybjsKLQorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIGdsOjpVbmlmb3JtTWF0cml4
NHgzZnYobG9jYXRpb24sIHNyY0xlbmd0aCwgdHJhbnNwb3NlLCBkYXRhICsgc3JjT2Zmc2V0KTsK
IH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliSTRpKEdDR0x1
aW50IGluZGV4LCBHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTGludCB6LCBHQ0dMaW50IHcpCiB7
Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCisgICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgZ2w6OlZlcnRleEF0dHJpYkk0aShpbmRleCwgeCwg
eSwgeiwgdyk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJp
Ykk0aXYoR0NHTHVpbnQgaW5kZXgsIGNvbnN0IEdDR0xpbnQqIHZhbHVlcykKIHsKLSAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KKyAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKICAgICBnbDo6VmVydGV4QXR0cmliSTRpdihpbmRleCwgdmFsdWVzKTsKIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliSTR1aShHQ0dMdWlu
dCBpbmRleCwgR0NHTHVpbnQgeCwgR0NHTHVpbnQgeSwgR0NHTHVpbnQgeiwgR0NHTHVpbnQgdykK
IHsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KKyAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBnbDo6VmVydGV4QXR0cmliSTR1aShpbmRleCwg
eCwgeSwgeiwgdyk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0
dHJpYkk0dWl2KEdDR0x1aW50IGluZGV4LCBjb25zdCBHQ0dMdWludCogdmFsdWVzKQogewotICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQorICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOwogICAgIGdsOjpWZXJ0ZXhBdHRyaWJJNHVpdihpbmRleCwgdmFsdWVz
KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd1JhbmdlRWxlbWVudHMo
R0NHTGVudW0gbW9kZSwgR0NHTHVpbnQgc3RhcnQsIEdDR0x1aW50IGVuZCwgR0NHTHNpemVpIGNv
dW50LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50cHRyIG9mZnNldCkKIHsKLSAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KICAgICBnbDo6RHJhd1JhbmdlRWxl
bWVudHMobW9kZSwgc3RhcnQsIGVuZCwgY291bnQsIHR5cGUsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCo+KG9mZnNldCkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3QnVm
ZmVycyhHQ0dMc2l6ZWkgbiwgY29uc3QgR0NHTGVudW0qIGJ1ZnMpCiB7Ci0gICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgZ2w6OkRyYXdCdWZmZXJz
KG4sIGJ1ZnMpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckJ1ZmZl
cml2KEdDR0xlbnVtIGJ1ZmZlciwgR0NHTGludCBkcmF3YnVmZmVyLCBjb25zdCBHQ0dMaW50KiB2
YWx1ZXMsIEdDR0x1aW50IHNyY09mZnNldCkKIHsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQotICAgICAgICByZXR1cm47Ci0KICAgICBnbDo6Q2xlYXJCdWZmZXJpdihidWZmZXIsIGRy
YXdidWZmZXIsIHZhbHVlcyArIHNyY09mZnNldCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNsZWFyQnVmZmVydWl2KEdDR0xlbnVtIGJ1ZmZlciwgR0NHTGludCBkcmF3YnVm
ZmVyLCBjb25zdCBHQ0dMdWludCogdmFsdWVzLCBHQ0dMdWludCBzcmNPZmZzZXQpCiB7Ci0gICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgZ2w6OkNs
ZWFyQnVmZmVydWl2KGJ1ZmZlciwgZHJhd2J1ZmZlciwgdmFsdWVzICsgc3JjT2Zmc2V0KTsKIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJmdihHQ0dMZW51bSBi
dWZmZXIsIEdDR0xpbnQgZHJhd2J1ZmZlciwgY29uc3QgR0NHTGZsb2F0KiB2YWx1ZXMsIEdDR0x1
aW50IHNyY09mZnNldCkKIHsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAg
ICByZXR1cm47Ci0KICAgICBnbDo6Q2xlYXJCdWZmZXJmdihidWZmZXIsIGRyYXdidWZmZXIsIHZh
bHVlcyArIHNyY09mZnNldCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNs
ZWFyQnVmZmVyZmkoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdidWZmZXIsIEdDR0xmbG9h
dCBkZXB0aCwgR0NHTGludCBzdGVuY2lsKQogewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIGdsOjpDbGVhckJ1ZmZlcmZpKGJ1ZmZlciwgZHJh
d2J1ZmZlciwgZGVwdGgsIHN0ZW5jaWwpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpkZWxldGVRdWVyeShQbGF0Zm9ybUdMT2JqZWN0IHF1ZXJ5KQogewotICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQorICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOwogICAgIGdsOjpEZWxldGVRdWVyaWVzKDEsICZxdWVyeSk7CiB9CiAKIEdDR0xib29s
ZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1F1ZXJ5KFBsYXRmb3JtR0xPYmplY3QgcXVl
cnkpCiB7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIEdM
X0ZBTFNFOwotCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgcmV0dXJuIGdsOjpJc1F1
ZXJ5KHF1ZXJ5KTsKIH0KIAogUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0UXVlcnkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkKIHsKLSAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gMDsKLQorICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOwogICAgIEdMaW50IHZhbHVlOwogICAgIGdsOjpHZXRRdWVyeWl2KHRhcmdl
dCwgcG5hbWUsICZ2YWx1ZSk7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFBsYXRmb3JtR0xPYmpl
Y3Q+KHZhbHVlKTsKQEAgLTI3NzMsOSArMjMzNSw3IEBAIFBsYXRmb3JtR0xPYmplY3QgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldFF1ZXJ5KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5h
CiAKIFBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVNhbXBs
ZXIoKQogewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiAw
OwotCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgR0x1aW50IG5hbWUgPSAwOwogICAg
IGdsOjpHZW5TYW1wbGVycygxLCAmbmFtZSk7CiAgICAgcmV0dXJuIG5hbWU7CkBAIC0yNzgzLDEz
OCArMjM0MywxMDQgQEAgUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Y3JlYXRlU2FtcGxlcigpCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVNh
bXBsZXIoUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyKQogewotICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwog
ICAgIGdsOjpEZWxldGVTYW1wbGVycygxLCAmc2FtcGxlcik7CiB9CiAKIEdDR0xib29sZWFuIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1NhbXBsZXIoUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVy
KQogewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiBHTF9G
QUxTRTsKLQorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIHJldHVybiBnbDo6SXNTYW1w
bGVyKHNhbXBsZXIpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kU2Ft
cGxlcihHQ0dMdWludCB1bml0LCBQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIpCiB7Ci0gICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCisgICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CiAgICAgZ2w6OkJpbmRTYW1wbGVyKHVuaXQsIHNhbXBsZXIpOwogfQogCiB2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVyUGFyYW1ldGVyaShQbGF0Zm9ybUdM
T2JqZWN0IHNhbXBsZXIsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50IHBhcmFtKQogewotICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQorICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOwogICAgIGdsOjpTYW1wbGVyUGFyYW1ldGVyaShzYW1wbGVyLCBwbmFtZSwg
cGFyYW0pOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVyUGFyYW1l
dGVyZihQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMZmxvYXQg
cGFyYW0pCiB7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJu
OwotCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgZ2w6OlNhbXBsZXJQYXJhbWV0ZXJm
KHNhbXBsZXIsIHBuYW1lLCBwYXJhbSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldFNhbXBsZXJQYXJhbWV0ZXJmdihQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIsIEdDR0xl
bnVtIHBuYW1lLCBHQ0dMZmxvYXQqIHZhbHVlKQogewotICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCi0gICAgICAgIHJldHVybjsKLQorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAg
IGdsOjpHZXRTYW1wbGVyUGFyYW1ldGVyZnYoc2FtcGxlciwgcG5hbWUsIHZhbHVlKTsKIH0KIAog
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2FtcGxlclBhcmFtZXRlcml2KFBsYXRm
b3JtR0xPYmplY3Qgc2FtcGxlciwgR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQqIHZhbHVlKQogewot
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQorICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwogICAgIGdsOjpHZXRTYW1wbGVyUGFyYW1ldGVyaXYoc2FtcGxl
ciwgcG5hbWUsIHZhbHVlKTsKIH0KIAogR0NHTHN5bmMgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmZlbmNlU3luYyhHQ0dMZW51bSBjb25kaXRpb24sIEdDR0xiaXRmaWVsZCBmbGFncykKIHsKLSAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gMDsKLQorICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwogICAgIHJldHVybiBnbDo6RmVuY2VTeW5jKGNvbmRpdGlvbiwg
ZmxhZ3MpOwogfQogCiBHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNTeW5j
KEdDR0xzeW5jIHN5bmMpCiB7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAg
ICAgcmV0dXJuIEdMX0ZBTFNFOwotCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgcmV0
dXJuIGdsOjpJc1N5bmMoc3luYyk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmRlbGV0ZVN5bmMoR0NHTHN5bmMgc3luYykKIHsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQotICAgICAgICByZXR1cm47Ci0KKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBn
bDo6RGVsZXRlU3luYyhzeW5jKTsKIH0KIAogR0NHTGVudW0gR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNsaWVudFdhaXRTeW5jKEdDR0xzeW5jIHN5bmMsIEdDR0xiaXRmaWVsZCBmbGFncywgR0NH
THVpbnQ2NCB0aW1lb3V0KQogewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAg
ICAgIHJldHVybiBHTF9XQUlUX0ZBSUxFRDsKLQorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwog
ICAgIHJldHVybiBnbDo6Q2xpZW50V2FpdFN5bmMoc3luYywgZmxhZ3MsIHRpbWVvdXQpOwogfQog
CiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp3YWl0U3luYyhHQ0dMc3luYyBzeW5jLCBH
Q0dMYml0ZmllbGQgZmxhZ3MsIEdDR0xpbnQ2NCB0aW1lb3V0KQogewotICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQorICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwogICAgIGdsOjpXYWl0U3luYyhzeW5jLCBmbGFncywgdGltZW91dCk7CiB9CiAKIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFN5bmNpdihHQ0dMc3luYyBzeW5jLCBHQ0dMZW51
bSBwbmFtZSwgR0NHTHNpemVpIGJ1ZlNpemUsIEdDR0xpbnQgKnZhbHVlKQogewotICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQorICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOwogICAgIGdsOjpHZXRTeW5jaXYoc3luYywgcG5hbWUsIGJ1ZlNpemUsIG51bGxw
dHIsIHZhbHVlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGF1c2VUcmFu
c2Zvcm1GZWVkYmFjaygpCiB7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAg
ICAgcmV0dXJuOwotCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgZ2w6OlBhdXNlVHJh
bnNmb3JtRmVlZGJhY2soKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVz
dW1lVHJhbnNmb3JtRmVlZGJhY2soKQogewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
Ci0gICAgICAgIHJldHVybjsKLQorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIGdsOjpS
ZXN1bWVUcmFuc2Zvcm1GZWVkYmFjaygpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpiaW5kQnVmZmVyUmFuZ2UoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMdWludCBpbmRleCwgUGxh
dGZvcm1HTE9iamVjdCBidWZmZXIsIEdDR0xpbnRwdHIgb2Zmc2V0LCBHQ0dMc2l6ZWlwdHIgc2l6
ZSkKIHsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0K
KyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBnbDo6QmluZEJ1ZmZlclJhbmdlKHRhcmdl
dCwgaW5kZXgsIGJ1ZmZlciwgb2Zmc2V0LCBzaXplKTsKIH0KIAogVmVjdG9yPEdDR0x1aW50PiBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUluZGljZXMoUGxhdGZvcm1HTE9iamVj
dCBwcm9ncmFtLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgdW5pZm9ybU5hbWVzKQogewogICAgIEFT
U0VSVChwcm9ncmFtKTsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICBy
ZXR1cm4geyB9OwotCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgVmVjdG9yPENTdHJp
bmc+IHV0ZjggPSB1bmlmb3JtTmFtZXMubWFwKFtdKGF1dG8mIHgpIHsgcmV0dXJuIHgudXRmOCgp
OyB9KTsKICAgICBWZWN0b3I8Y29uc3QgY2hhcio+IGNzdHIgPSB1dGY4Lm1hcChbXShhdXRvJiB4
KSB7IHJldHVybiB4LmRhdGEoKTsgfSk7CiAgICAgVmVjdG9yPEdDR0x1aW50PiByZXN1bHQoY3N0
ci5zaXplKCksIDApOwpAQCAtMjk3Niw4OSArMjUwMiw2NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xp
bnQgbAogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMWZ2KEdDR0xpbnQg
bG9jYXRpb24sIGNvbnN0IEdDR0xmbG9hdCogZGF0YSwgR0NHTHVpbnQgc3JjT2Zmc2V0LCBHQ0dM
dWludCBzcmNMZW5ndGgpCiB7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAg
ICAgcmV0dXJuOwotCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgZ2w6OlVuaWZvcm0x
ZnYobG9jYXRpb24sIHNyY0xlbmd0aCwgZGF0YSArIHNyY09mZnNldCk7CiB9CiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0yZnYoR0NHTGludCBsb2NhdGlvbiwgY29uc3Qg
R0NHTGZsb2F0KiBkYXRhLCBHQ0dMdWludCBzcmNPZmZzZXQsIEdDR0x1aW50IHNyY0xlbmd0aCkK
IHsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KKyAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBnbDo6VW5pZm9ybTJmdihsb2NhdGlvbiwgc3Jj
TGVuZ3RoLCBkYXRhICsgc3JjT2Zmc2V0KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dW5pZm9ybTNmdihHQ0dMaW50IGxvY2F0aW9uLCBjb25zdCBHQ0dMZmxvYXQqIGRhdGEs
IEdDR0x1aW50IHNyY09mZnNldCwgR0NHTHVpbnQgc3JjTGVuZ3RoKQogewotICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQorICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOwogICAgIGdsOjpVbmlmb3JtM2Z2KGxvY2F0aW9uLCBzcmNMZW5ndGgsIGRhdGEgKyBz
cmNPZmZzZXQpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNGZ2
KEdDR0xpbnQgbG9jYXRpb24sIGNvbnN0IEdDR0xmbG9hdCogZGF0YSwgR0NHTHVpbnQgc3JjT2Zm
c2V0LCBHQ0dMdWludCBzcmNMZW5ndGgpCiB7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKLSAgICAgICAgcmV0dXJuOwotCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgZ2w6
OlVuaWZvcm00ZnYobG9jYXRpb24sIHNyY0xlbmd0aCwgZGF0YSArIHNyY09mZnNldCk7CiB9CiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xaXYoR0NHTGludCBsb2NhdGlv
biwgY29uc3QgR0NHTGludCogZGF0YSwgR0NHTHVpbnQgc3JjT2Zmc2V0LCBHQ0dMdWludCBzcmNM
ZW5ndGgpCiB7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJu
OwotCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgZ2w6OlVuaWZvcm0xaXYobG9jYXRp
b24sIHNyY0xlbmd0aCwgZGF0YSArIHNyY09mZnNldCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnVuaWZvcm0yaXYoR0NHTGludCBsb2NhdGlvbiwgY29uc3QgR0NHTGludCog
ZGF0YSwgR0NHTHVpbnQgc3JjT2Zmc2V0LCBHQ0dMdWludCBzcmNMZW5ndGgpCiB7Ci0gICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCisgICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CiAgICAgZ2w6OlVuaWZvcm0yaXYobG9jYXRpb24sIHNyY0xlbmd0aCwgZGF0
YSArIHNyY09mZnNldCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZv
cm0zaXYoR0NHTGludCBsb2NhdGlvbiwgY29uc3QgR0NHTGludCogZGF0YSwgR0NHTHVpbnQgc3Jj
T2Zmc2V0LCBHQ0dMdWludCBzcmNMZW5ndGgpCiB7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKLSAgICAgICAgcmV0dXJuOwotCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAg
Z2w6OlVuaWZvcm0zaXYobG9jYXRpb24sIHNyY0xlbmd0aCwgZGF0YSArIHNyY09mZnNldCk7CiB9
CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00aXYoR0NHTGludCBsb2Nh
dGlvbiwgY29uc3QgR0NHTGludCogZGF0YSwgR0NHTHVpbnQgc3JjT2Zmc2V0LCBHQ0dMdWludCBz
cmNMZW5ndGgpCiB7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0
dXJuOwotCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgZ2w6OlVuaWZvcm00aXYobG9j
YXRpb24sIHNyY0xlbmd0aCwgZGF0YSArIHNyY09mZnNldCk7CiB9CiAKIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgyZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJv
b2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHQ0dMZmxvYXQqIGRhdGEsIEdDR0x1aW50IHNyY09mZnNl
dCwgR0NHTHVpbnQgc3JjTGVuZ3RoKQogewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
Ci0gICAgICAgIHJldHVybjsKLQorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIGdsOjpV
bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCBzcmNMZW5ndGgsIHRyYW5zcG9zZSwgZGF0YSArIHNy
Y09mZnNldCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRy
aXgzZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHQ0dM
ZmxvYXQqIGRhdGEsIEdDR0x1aW50IHNyY09mZnNldCwgR0NHTHVpbnQgc3JjTGVuZ3RoKQogewot
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQorICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwogICAgIGdsOjpVbmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCBz
cmNMZW5ndGgsIHRyYW5zcG9zZSwgZGF0YSArIHNyY09mZnNldCk7CiB9CiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXg0ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NH
TGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHQ0dMZmxvYXQqIGRhdGEsIEdDR0x1aW50IHNyY09m
ZnNldCwgR0NHTHVpbnQgc3JjTGVuZ3RoKQogewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCi0gICAgICAgIHJldHVybjsKLQorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIGds
OjpVbmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLCBzcmNMZW5ndGgsIHRyYW5zcG9zZSwgZGF0YSAr
IHNyY09mZnNldCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29jb2EubW0gYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFwaGljc0NvbnRleHRHTE9wZW5HTENvY29h
Lm1tCmluZGV4IDJlMWM3OTllODI4NTNiMzIwYjhjZWRkZDRhNmZlNWU1MDRhOWQ4OWMuLmJkMGY5
M2UyMDRiZGQ4ZDkyYTQyYWRkODk5NmRkNGZiZWY5YWQ1ZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29j
b2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0xDb2NvYS5tbQpAQCAtMzg3LDggKzM4NywxMCBAQCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0woR3JhcGhpY3NDb250ZXh0R0xB
dHRyaWJ1dGVzIGF0dAogR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6On5HcmFwaGljc0NvbnRleHRH
TE9wZW5HTCgpCiB7CiAgICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyOjpzaGFyZWRN
YW5hZ2VyKCkucmVtb3ZlQ29udGV4dCh0aGlzKTsKLSAgICBpZiAobWFrZUNvbnRleHRDdXJyZW50
KCkpIHsKKworICAgIGlmIChtX2NvbnRleHRPYmopIHsKICAgICAgICAgR3JhcGhpY3NDb250ZXh0
R0xBdHRyaWJ1dGVzIGF0dHJzID0gY29udGV4dEF0dHJpYnV0ZXMoKTsKKyAgICAgICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7IC8vIFRPRE86IGNoZWNrIHJlc3VsdC4KICAgICAgICAgZ2w6OkRlbGV0
ZVRleHR1cmVzKDEsICZtX3RleHR1cmUpOwogCiAgICAgICAgIGlmIChhdHRycy5hbnRpYWxpYXMp
IHsKQEAgLTQwNSwxOCArNDA3LDE4IEBAIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp+R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0woKQogICAgICAgICAgICAgZ2w6OkRlbGV0ZVRleHR1cmVzKDEsICZt
X3ByZXNlcnZlRHJhd2luZ0J1ZmZlclRleHR1cmUpOwogICAgICAgICBpZiAobV9wcmVzZXJ2ZURy
YXdpbmdCdWZmZXJGQk8pCiAgICAgICAgICAgICBnbDo6RGVsZXRlRnJhbWVidWZmZXJzKDEsICZt
X3ByZXNlcnZlRHJhd2luZ0J1ZmZlckZCTyk7Ci0gICAgfQotICAgIGlmIChtX2Rpc3BsYXlCdWZm
ZXJQYnVmZmVyKQotICAgICAgICBFR0xfRGVzdHJveVN1cmZhY2UobV9kaXNwbGF5T2JqLCBtX2Rp
c3BsYXlCdWZmZXJQYnVmZmVyKTsKLSAgICBpZiAobV93ZWJHTExheWVyKSB7CisKKyAgICAgICAg
aWYgKG1fZGlzcGxheUJ1ZmZlclBidWZmZXIpIHsKKyAgICAgICAgICAgIEVHTF9SZWxlYXNlVGV4
SW1hZ2UobV9kaXNwbGF5T2JqLCBtX2Rpc3BsYXlCdWZmZXJQYnVmZmVyLCBFR0xfQkFDS19CVUZG
RVIpOworICAgICAgICAgICAgRUdMX0Rlc3Ryb3lTdXJmYWNlKG1fZGlzcGxheU9iaiwgbV9kaXNw
bGF5QnVmZmVyUGJ1ZmZlcik7CisgICAgICAgIH0KICAgICAgICAgYXV0byByZWN5Y2xlZEJ1ZmZl
ciA9IFttX3dlYkdMTGF5ZXIgcmVjeWNsZUJ1ZmZlcl07CiAgICAgICAgIGlmIChyZWN5Y2xlZEJ1
ZmZlci5oYW5kbGUpCiAgICAgICAgICAgICBFR0xfRGVzdHJveVN1cmZhY2UobV9kaXNwbGF5T2Jq
LCByZWN5Y2xlZEJ1ZmZlci5oYW5kbGUpOwogICAgICAgICBhdXRvIGNvbnRlbnRzSGFuZGxlID0g
W21fd2ViR0xMYXllciBkZXRhY2hDbGllbnRdOwogICAgICAgICBpZiAoY29udGVudHNIYW5kbGUp
CiAgICAgICAgICAgICBFR0xfRGVzdHJveVN1cmZhY2UobV9kaXNwbGF5T2JqLCBjb250ZW50c0hh
bmRsZSk7Ci0gICAgfQotICAgIGlmIChtX2NvbnRleHRPYmopIHsKKwogICAgICAgICBFR0xfTWFr
ZUN1cnJlbnQobV9kaXNwbGF5T2JqLCBFR0xfTk9fU1VSRkFDRSwgRUdMX05PX1NVUkZBQ0UsIEVH
TF9OT19DT05URVhUKTsKICAgICAgICAgRUdMX0Rlc3Ryb3lDb250ZXh0KG1fZGlzcGxheU9iaiwg
bV9jb250ZXh0T2JqKTsKICAgICB9CkBAIC01NTAsMTAgKzU1MiwxMiBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpzZXRDb250ZXh0VmlzaWJpbGl0eShib29sIGlzVmlzaWJsZSkKICNp
ZiBQTEFURk9STShNQUMpCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1cGRhdGVDR0xD
b250ZXh0KCkKIHsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgIGlmICghbV9j
b250ZXh0T2JqKQogICAgICAgICByZXR1cm47CisKICAgICBMT0coV2ViR0wsICJEZXRlY3RlZCBh
IG11eCBzd2l0Y2ggb3IgZGlzcGxheSByZWNvbmZpZ3VyYXRpb24uIENhbGwgQ0dMVXBkYXRlQ29u
dGV4dC4gKCVwKSIsIHRoaXMpOwogCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgRUdM
RGV2aWNlRVhUIGRldmljZSA9IG51bGxwdHI7CiAgICAgRUdMX1F1ZXJ5RGlzcGxheUF0dHJpYkVY
VChtX2Rpc3BsYXlPYmosIEVHTF9ERVZJQ0VfRVhULCByZWludGVycHJldF9jYXN0PEVHTEF0dHJp
Yio+KCZkZXZpY2UpKTsKICAgICBDR0xDb250ZXh0T2JqIGNnbENvbnRleHQgPSBudWxscHRyOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVu
c2lvbnNHTE9wZW5HTC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVu
Z2wvRXh0ZW5zaW9uc0dMT3BlbkdMLmNwcAppbmRleCAxNzc4NmE2NGJhNGUxZGEwMDk2NGVhZTk5
N2QyOTI3NjRkYWQxODk2Li5iYmQ5ZDQ0NmY5MWVkNWUxYmJiYTRkMzcwMmQ0MzJmNzFlZmZhNGUw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0
ZW5zaW9uc0dMT3BlbkdMLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9vcGVuZ2wvRXh0ZW5zaW9uc0dMT3BlbkdMLmNwcApAQCAtNTAsMjUgKzUwLDE3IEBAIEV4dGVu
c2lvbnNHTE9wZW5HTDo6fkV4dGVuc2lvbnNHTE9wZW5HTCgpID0gZGVmYXVsdDsKIAogdm9pZCBF
eHRlbnNpb25zR0xPcGVuR0w6OmJsaXRGcmFtZWJ1ZmZlcihsb25nIHNyY1gwLCBsb25nIHNyY1kw
LCBsb25nIHNyY1gxLCBsb25nIHNyY1kxLCBsb25nIGRzdFgwLCBsb25nIGRzdFkwLCBsb25nIGRz
dFgxLCBsb25nIGRzdFkxLCB1bnNpZ25lZCBsb25nIG1hc2ssIHVuc2lnbmVkIGxvbmcgZmlsdGVy
KQogewotICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAg
cmV0dXJuOwotCiAgICAgOjpnbEJsaXRGcmFtZWJ1ZmZlckVYVChzcmNYMCwgc3JjWTAsIHNyY1gx
LCBzcmNZMSwgZHN0WDAsIGRzdFkwLCBkc3RYMSwgZHN0WTEsIG1hc2ssIGZpbHRlcik7CiB9CiAK
IHZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdMOjpyZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUo
dW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgc2FtcGxlcywgdW5zaWduZWQgbG9u
ZyBpbnRlcm5hbGZvcm1hdCwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWln
aHQpCiB7Ci0gICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAg
ICByZXR1cm47Ci0KICAgICA6OmdsUmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlRVhUKHRh
cmdldCwgc2FtcGxlcywgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwogfQogCiBQbGF0
Zm9ybUdMT2JqZWN0IEV4dGVuc2lvbnNHTE9wZW5HTDo6Y3JlYXRlVmVydGV4QXJyYXlPRVMoKQog
ewotICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0
dXJuIDA7Ci0KKyAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIEdMdWlu
dCBhcnJheSA9IDA7CiAjaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShXSU4pCiAgICAgaWYg
KGlzVmVydGV4QXJyYXlPYmplY3RTdXBwb3J0ZWQoKSkKQEAgLTg0LDkgKzc2LDcgQEAgdm9pZCBF
eHRlbnNpb25zR0xPcGVuR0w6OmRlbGV0ZVZlcnRleEFycmF5T0VTKFBsYXRmb3JtR0xPYmplY3Qg
YXJyYXkpCiAgICAgaWYgKCFhcnJheSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFtX2Nv
bnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KKyAgICBtX2Nv
bnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwogI2lmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZP
Uk0oV0lOKQogICAgIGlmIChpc1ZlcnRleEFycmF5T2JqZWN0U3VwcG9ydGVkKCkpCiAgICAgICAg
IGdsRGVsZXRlVmVydGV4QXJyYXlzKDEsICZhcnJheSk7CkBAIC0xMDAsOSArOTAsNyBAQCBHQ0dM
Ym9vbGVhbiBFeHRlbnNpb25zR0xPcGVuR0w6OmlzVmVydGV4QXJyYXlPRVMoUGxhdGZvcm1HTE9i
amVjdCBhcnJheSkKICAgICBpZiAoIWFycmF5KQogICAgICAgICByZXR1cm4gR0xfRkFMU0U7CiAK
LSAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVy
biBHTF9GQUxTRTsKLQorICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CiAjaWYg
UExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShXSU4pCiAgICAgaWYgKGlzVmVydGV4QXJyYXlPYmpl
Y3RTdXBwb3J0ZWQoKSkKICAgICAgICAgcmV0dXJuIGdsSXNWZXJ0ZXhBcnJheShhcnJheSk7CkBA
IC0xMTQsOSArMTAyLDcgQEAgR0NHTGJvb2xlYW4gRXh0ZW5zaW9uc0dMT3BlbkdMOjppc1ZlcnRl
eEFycmF5T0VTKFBsYXRmb3JtR0xPYmplY3QgYXJyYXkpCiAKIHZvaWQgRXh0ZW5zaW9uc0dMT3Bl
bkdMOjpiaW5kVmVydGV4QXJyYXlPRVMoUGxhdGZvcm1HTE9iamVjdCBhcnJheSkKIHsKLSAgICBp
ZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQor
ICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CiAjaWYgUExBVEZPUk0oR1RLKSB8
fCBQTEFURk9STShXSU4pCiAgICAgaWYgKGlzVmVydGV4QXJyYXlPYmplY3RTdXBwb3J0ZWQoKSkK
ICAgICAgICAgZ2xCaW5kVmVydGV4QXJyYXkoYXJyYXkpOwpAQCAtMjEwLDkgKzE5Niw2IEBAIGJv
b2wgRXh0ZW5zaW9uc0dMT3BlbkdMOjpzdXBwb3J0c0V4dGVuc2lvbihjb25zdCBTdHJpbmcmIG5h
bWUpCiAKIHZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdMOjpkcmF3QnVmZmVyc0VYVChHQ0dMc2l6ZWkg
biwgY29uc3QgR0NHTGVudW0qIGJ1ZnMpCiB7Ci0gICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250
ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KICAgICAvLyAgRklYTUU6IGltcGxlbWVu
dCBzdXBwb3J0IGZvciBvdGhlciBwbGF0Zm9ybXMuCiAjaWYgUExBVEZPUk0oR1RLKQogICAgIDo6
Z2xEcmF3QnVmZmVycyhuLCBidWZzKTsKQEAgLTIyNCw5ICsyMDcsNyBAQCB2b2lkIEV4dGVuc2lv
bnNHTE9wZW5HTDo6ZHJhd0J1ZmZlcnNFWFQoR0NHTHNpemVpIG4sIGNvbnN0IEdDR0xlbnVtKiBi
dWZzKQogCiB2b2lkIEV4dGVuc2lvbnNHTE9wZW5HTDo6ZHJhd0FycmF5c0luc3RhbmNlZChHQ0dM
ZW51bSBtb2RlLCBHQ0dMaW50IGZpcnN0LCBHQ0dMc2l6ZWkgY291bnQsIEdDR0xzaXplaSBwcmlt
Y291bnQpCiB7Ci0gICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQotICAg
ICAgICByZXR1cm47Ci0KKyAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwogI2lm
IFBMQVRGT1JNKEdUSykKICAgICA6OmdsRHJhd0FycmF5c0luc3RhbmNlZChtb2RlLCBmaXJzdCwg
Y291bnQsIHByaW1jb3VudCk7CiAjZWxzZQpAQCAtMjM5LDkgKzIyMCw3IEBAIHZvaWQgRXh0ZW5z
aW9uc0dMT3BlbkdMOjpkcmF3QXJyYXlzSW5zdGFuY2VkKEdDR0xlbnVtIG1vZGUsIEdDR0xpbnQg
Zmlyc3QsIEdDR0xzCiAKIHZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdMOjpkcmF3RWxlbWVudHNJbnN0
YW5jZWQoR0NHTGVudW0gbW9kZSwgR0NHTHNpemVpIGNvdW50LCBHQ0dMZW51bSB0eXBlLCBsb25n
IGxvbmcgb2Zmc2V0LCBHQ0dMc2l6ZWkgcHJpbWNvdW50KQogewotICAgIGlmICghbV9jb250ZXh0
LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCisgICAgbV9jb250ZXh0
LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKICNpZiBQTEFURk9STShHVEspCiAgICAgOjpnbERyYXdF
bGVtZW50c0luc3RhbmNlZChtb2RlLCBjb3VudCwgdHlwZSwgcmVpbnRlcnByZXRfY2FzdDxHTHZv
aWQqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4ob2Zmc2V0KSksIHByaW1jb3VudCk7CiAjZWxzZQpA
QCAtMjU1LDkgKzIzNCw3IEBAIHZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdMOjpkcmF3RWxlbWVudHNJ
bnN0YW5jZWQoR0NHTGVudW0gbW9kZSwgR0NHTHNpemVpIGNvdW50LCBHCiAKIHZvaWQgRXh0ZW5z
aW9uc0dMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJEaXZpc29yKEdDR0x1aW50IGluZGV4LCBHQ0dMdWlu
dCBkaXZpc29yKQogewotICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkK
LSAgICAgICAgcmV0dXJuOwotCisgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsK
ICNpZiBQTEFURk9STShHVEspCiAgICAgOjpnbFZlcnRleEF0dHJpYkRpdmlzb3IoaW5kZXgsIGRp
dmlzb3IpOwogI2Vsc2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9FeHRlbnNpb25zR0xPcGVuR0xFUy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uc0dMT3BlbkdMRVMuY3BwCmluZGV4IGFiOGNi
NTRmNWU4NzllZjRiOGE5MGQxOWE3ZWM5MmM4OWNlMjA1N2IuLmY2NGJkZWUzMTI5MzNiZjNlZGQ1
ZmJkZjUzMTkyZGI0NTRhN2VkYzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zR0xPcGVuR0xFUy5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnNHTE9wZW5HTEVTLmNwcApA
QCAtODUsOCArODUsNiBAQCBib29sIEV4dGVuc2lvbnNHTE9wZW5HTEVTOjppc0VuYWJsZWQoY29u
c3QgU3RyaW5nJiBuYW1lKQogCiB2b2lkIEV4dGVuc2lvbnNHTE9wZW5HTEVTOjpmcmFtZWJ1ZmZl
clRleHR1cmUyRE11bHRpc2FtcGxlSU1HKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBs
b25nIGF0dGFjaG1lbnQsIHVuc2lnbmVkIGxvbmcgdGV4dGFyZ2V0LCB1bnNpZ25lZCB0ZXh0dXJl
LCBpbnQgbGV2ZWwsIHVuc2lnbmVkIGxvbmcgc2FtcGxlcykKIHsKLSAgICBpZiAoIW1fY29udGV4
dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKICAgICBpZiAobV9nbEZy
YW1lYnVmZmVyVGV4dHVyZTJETXVsdGlzYW1wbGVJTUcpCiAgICAgICAgIG1fZ2xGcmFtZWJ1ZmZl
clRleHR1cmUyRE11bHRpc2FtcGxlSU1HKHRhcmdldCwgYXR0YWNobWVudCwgdGV4dGFyZ2V0LCB0
ZXh0dXJlLCBsZXZlbCwgc2FtcGxlcyk7CiAgICAgZWxzZQpAQCAtOTUsOCArOTMsNiBAQCB2b2lk
IEV4dGVuc2lvbnNHTE9wZW5HTEVTOjpmcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlSU1H
KHVuc2lnbmVkIGxvbmcgdGFyZwogCiB2b2lkIEV4dGVuc2lvbnNHTE9wZW5HTEVTOjpyZW5kZXJi
dWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVJTUcodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVk
IGxvbmcgc2FtcGxlcywgdW5zaWduZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCwgdW5zaWduZWQgbG9u
ZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQpCiB7Ci0gICAgaWYgKCFtX2NvbnRleHQtPm1h
a2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47CiAgICAgaWYgKG1fZ2xSZW5kZXJi
dWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVJTUcpCiAgICAgICAgIG1fZ2xSZW5kZXJidWZmZXJTdG9y
YWdlTXVsdGlzYW1wbGVJTUcodGFyZ2V0LCBzYW1wbGVzLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgs
IGhlaWdodCk7CiAgICAgZWxzZQpAQCAtMTEwLDggKzEwNiw2IEBAIHZvaWQgRXh0ZW5zaW9uc0dM
T3BlbkdMRVM6OmJsaXRGcmFtZWJ1ZmZlcihsb25nIC8qIHNyY1gwICovLCBsb25nIC8qIHNyY1kw
ICovLCBsCiAKIHZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdMRVM6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VN
dWx0aXNhbXBsZSh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBzYW1wbGVzLCB1
bnNpZ25lZCBsb25nIGludGVybmFsZm9ybWF0LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25l
ZCBsb25nIGhlaWdodCkKIHsKLSAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50
KCkpCi0gICAgICAgIHJldHVybjsKICAgICBpZiAobV9nbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0
aXNhbXBsZUlNRykKICAgICAgICAgcmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlSU1HKHRh
cmdldCwgc2FtcGxlcywgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwogICAgIGVsc2UK
QEAgLTEzNSw5ICsxMjksOCBAQCB2b2lkIEV4dGVuc2lvbnNHTE9wZW5HTEVTOjpwb3BHcm91cE1h
cmtlckVYVCh2b2lkKQogCiBQbGF0Zm9ybUdMT2JqZWN0IEV4dGVuc2lvbnNHTE9wZW5HTEVTOjpj
cmVhdGVWZXJ0ZXhBcnJheU9FUygpCiB7CisgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJl
bnQoKTsKICAgICBpZiAobV9nbEdlblZlcnRleEFycmF5c09FUykgewotICAgICAgICBpZiAoIW1f
Y29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgICAgICByZXR1cm4gMDsKICAg
ICAgICAgR0x1aW50IGFycmF5ID0gMDsKICAgICAgICAgbV9nbEdlblZlcnRleEFycmF5c09FUygx
LCAmYXJyYXkpOwogICAgICAgICByZXR1cm4gYXJyYXk7CkBAIC0xNTEsMzUgKzE0NCwzMyBAQCB2
b2lkIEV4dGVuc2lvbnNHTE9wZW5HTEVTOjpkZWxldGVWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybUdM
T2JqZWN0IGFycmF5KQogewogICAgIGlmICghYXJyYXkpCiAgICAgICAgIHJldHVybjsKLSAgICBp
ZiAobV9nbERlbGV0ZVZlcnRleEFycmF5c09FUykgewotICAgICAgICBpZiAoIW1fY29udGV4dC0+
bWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgICAgICByZXR1cm47CisKKyAgICBtX2NvbnRl
eHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmIChtX2dsRGVsZXRlVmVydGV4QXJyYXlz
T0VTKQogICAgICAgICBtX2dsRGVsZXRlVmVydGV4QXJyYXlzT0VTKDEsICZhcnJheSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7CisgICAgZWxzZQorICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNp
emVHTEVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKIH0KIAogR0NHTGJvb2xlYW4gRXh0ZW5z
aW9uc0dMT3BlbkdMRVM6OmlzVmVydGV4QXJyYXlPRVMoUGxhdGZvcm1HTE9iamVjdCBhcnJheSkK
IHsKICAgICBpZiAoIWFycmF5KQogICAgICAgICByZXR1cm4gR0xfRkFMU0U7Ci0gICAgaWYgKG1f
Z2xJc1ZlcnRleEFycmF5T0VTKSB7Ci0gICAgICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4
dEN1cnJlbnQoKSkKLSAgICAgICAgICAgIHJldHVybiBHTF9GQUxTRTsKKworICAgIG1fY29udGV4
dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKG1fZ2xJc1ZlcnRleEFycmF5T0VTKQog
ICAgICAgICByZXR1cm4gbV9nbElzVmVydGV4QXJyYXlPRVMoYXJyYXkpOwotICAgIH0KKwogICAg
IG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAg
IHJldHVybiBmYWxzZTsKIH0KIAogdm9pZCBFeHRlbnNpb25zR0xPcGVuR0xFUzo6YmluZFZlcnRl
eEFycmF5T0VTKFBsYXRmb3JtR0xPYmplY3QgYXJyYXkpCiB7Ci0gICAgaWYgKG1fZ2xCaW5kVmVy
dGV4QXJyYXlPRVMpIHsKLSAgICAgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVu
dCgpKQotICAgICAgICAgICAgcmV0dXJuOworICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgaWYgKG1fZ2xCaW5kVmVydGV4QXJyYXlPRVMpCiAgICAgICAgIG1fZ2xCaW5k
VmVydGV4QXJyYXlPRVMoYXJyYXkpOwotICAgIH0gZWxzZQorICAgIGVsc2UKICAgICAgICAgbV9j
b250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiB9CiAKQEAg
LTE5Nyw5ICsxODgsOCBAQCBpbnQgRXh0ZW5zaW9uc0dMT3BlbkdMRVM6OmdldEdyYXBoaWNzUmVz
ZXRTdGF0dXNBUkIoKQogICAgIGlmIChtX2NvbnRleHRSZXNldFN0YXR1cyAhPSBHTF9OT19FUlJP
UikKICAgICAgICAgcmV0dXJuIG1fY29udGV4dFJlc2V0U3RhdHVzOwogICAgIGlmIChtX2dsR2V0
R3JhcGhpY3NSZXNldFN0YXR1c0VYVCkgewotICAgICAgICBpbnQgcmVhc29uRm9yUmVzZXQgPSBV
TktOT1dOX0NPTlRFWFRfUkVTRVRfQVJCOwotICAgICAgICBpZiAobV9jb250ZXh0LT5tYWtlQ29u
dGV4dEN1cnJlbnQoKSkKLSAgICAgICAgICAgIHJlYXNvbkZvclJlc2V0ID0gbV9nbEdldEdyYXBo
aWNzUmVzZXRTdGF0dXNFWFQoKTsKKyAgICAgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICAgICAgaW50IHJlYXNvbkZvclJlc2V0ID0gbV9nbEdldEdyYXBoaWNzUmVzZXRT
dGF0dXNFWFQoKTsKICAgICAgICAgaWYgKHJlYXNvbkZvclJlc2V0ICE9IEdMX05PX0VSUk9SKQog
ICAgICAgICAgICAgbV9jb250ZXh0UmVzZXRTdGF0dXMgPSByZWFzb25Gb3JSZXNldDsKICAgICAg
ICAgcmV0dXJuIHJlYXNvbkZvclJlc2V0OwpAQCAtMjEyLDkgKzIwMiw3IEBAIGludCBFeHRlbnNp
b25zR0xPcGVuR0xFUzo6Z2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQigpCiB2b2lkIEV4dGVuc2lv
bnNHTE9wZW5HTEVTOjpyZWFkblBpeGVsc0VYVChpbnQgeCwgaW50IHksIEdDR0xzaXplaSB3aWR0
aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dM
c2l6ZWkgYnVmU2l6ZSwgdm9pZCAqZGF0YSkKIHsKICAgICBpZiAobV9nbFJlYWRuUGl4ZWxzRVhU
KSB7Ci0gICAgICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAg
ICAgICAgIHJldHVybjsKLQorICAgICAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgp
OwogICAgICAgICAvLyBGSVhNRTogcmVtb3ZlIHRoZSB0d28gZ2xGbHVzaCBjYWxscyB3aGVuIHRo
ZSBkcml2ZXIgYnVnIGlzIGZpeGVkLCBpLmUuLAogICAgICAgICAvLyBhbGwgcHJldmlvdXMgcmVu
ZGVyaW5nIGNhbGxzIHNob3VsZCBiZSBkb25lIGJlZm9yZSByZWFkaW5nIHBpeGVscy4KICAgICAg
ICAgOjpnbEZsdXNoKCk7CkBAIC0yMzEsOSArMjE5LDcgQEAgdm9pZCBFeHRlbnNpb25zR0xPcGVu
R0xFUzo6cmVhZG5QaXhlbHNFWFQoaW50IHgsIGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xz
aXoKIHZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdMRVM6OmdldG5Vbmlmb3JtZnZFWFQoR0NHTHVpbnQg
cHJvZ3JhbSwgaW50IGxvY2F0aW9uLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgZmxvYXQgKnBhcmFtcykK
IHsKICAgICBpZiAobV9nbEdldG5Vbmlmb3JtZnZFWFQpIHsKLSAgICAgICAgaWYgKCFtX2NvbnRl
eHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICAgICAgcmV0dXJuOwotCisgICAgICAg
IG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgICAgIG1fZ2xHZXRuVW5pZm9y
bWZ2RVhUKHByb2dyYW0sIGxvY2F0aW9uLCBidWZTaXplLCBwYXJhbXMpOwogICAgICAgICByZXR1
cm47CiAgICAgfQpAQCAtMjQ0LDkgKzIzMCw3IEBAIHZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdMRVM6
OmdldG5Vbmlmb3JtZnZFWFQoR0NHTHVpbnQgcHJvZ3JhbSwgaW50IGxvY2F0aW9uLCBHQ0dMCiB2
b2lkIEV4dGVuc2lvbnNHTE9wZW5HTEVTOjpnZXRuVW5pZm9ybWl2RVhUKEdDR0x1aW50IHByb2dy
YW0sIGludCBsb2NhdGlvbiwgR0NHTHNpemVpIGJ1ZlNpemUsIGludCAqcGFyYW1zKQogewogICAg
IGlmIChtX2dsR2V0blVuaWZvcm1pdkVYVCkgewotICAgICAgICBpZiAoIW1fY29udGV4dC0+bWFr
ZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KKyAgICAgICAgbV9jb250
ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICAgICAgbV9nbEdldG5Vbmlmb3JtaXZFWFQo
cHJvZ3JhbSwgbG9jYXRpb24sIGJ1ZlNpemUsIHBhcmFtcyk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CkBAIC0yNjEsOSArMjQ1LDcgQEAgdm9pZCBFeHRlbnNpb25zR0xPcGVuR0xFUzo6ZHJhd0Fy
cmF5c0luc3RhbmNlZChHQ0dMZW51bSBtb2RlLCBHQ0dMaW50IGZpcnN0LCBHQ0cKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQo
KSkKLSAgICAgICAgcmV0dXJuOwotCisgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQo
KTsKICAgICBtX2dsRHJhd0FycmF5c0luc3RhbmNlZEFOR0xFKG1vZGUsIGZpcnN0LCBjb3VudCwg
cHJpbWNvdW50KTsKIH0KIApAQCAtMjc0LDkgKzI1Niw3IEBAIHZvaWQgRXh0ZW5zaW9uc0dMT3Bl
bkdMRVM6OmRyYXdFbGVtZW50c0luc3RhbmNlZChHQ0dMZW51bSBtb2RlLCBHQ0dMc2l6ZWkgY291
bnQsCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNv
bnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQorICAgIG1fY29udGV4dC0+bWFrZUNv
bnRleHRDdXJyZW50KCk7CiAgICAgbV9nbERyYXdFbGVtZW50c0luc3RhbmNlZEFOR0xFKG1vZGUs
IGNvdW50LCB0eXBlLCByZWludGVycHJldF9jYXN0PEdMdm9pZCo+KHN0YXRpY19jYXN0PGludHB0
cl90PihvZmZzZXQpKSwgcHJpbWNvdW50KTsKIH0KIApAQCAtMjg3LDkgKzI2Nyw3IEBAIHZvaWQg
RXh0ZW5zaW9uc0dMT3BlbkdMRVM6OnZlcnRleEF0dHJpYkRpdmlzb3IoR0NHTHVpbnQgaW5kZXgs
IEdDR0x1aW50IGRpdmlzb3IpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoIW1f
Y29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQorICAgIG1f
Y29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgbV9nbFZlcnRleEF0dHJpYkRpdmlz
b3JBTkdMRShpbmRleCwgZGl2aXNvcik7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMLmgKaW5kZXggMjQ0Mjg5ZDViZWQyMGI5MGMwZTY2YzNjMzc1NDM1MTJmMjQ5MDlhYi4uZDFl
ZjYzNDgxZTdkNTUwNmY4NGJmMmE3MzllMTk3ODg2ZTYyMmY0NiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdM
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNz
Q29udGV4dEdMT3BlbkdMLmgKQEAgLTEwOCw2ICsxMDgsNyBAQCBwdWJsaWM6CiAgICAgUGxhdGZv
cm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0IGZpbmFsOwogI2VuZGlmCiAKKyAgICBib29s
IG1ha2VDb250ZXh0Q3VycmVudCgpOwogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgZW51
bSBjbGFzcyBSZWxlYXNlQmVoYXZpb3IgewogICAgICAgICBQcmVzZXJ2ZVRocmVhZFJlc291cmNl
cywKQEAgLTUxNiw5ICs1MTcsNiBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMKEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcywgSG9zdFdpbmRvdyosIERl
c3RpbmF0aW9uID0gRGVzdGluYXRpb246Ok9mZnNjcmVlbiwgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0wqIHNoYXJlZENvbnRleHQgPSBudWxscHRyKTsKIAotICAgIC8vIENhbGxlZCBvbmNlIGJ5IGFs
bCB0aGUgcHVibGljIGVudHJ5IHBvaW50cyB0aGF0IGV2ZW50dWFsbHkgY2FsbCBPcGVuR0wuCi0g
ICAgLy8gQ2FsbGVkIG9uY2UgYnkgYWxsIHRoZSBwdWJsaWMgZW50cnkgcG9pbnRzIG9mIEV4dGVu
c2lvbnNHTCB0aGF0IGV2ZW50dWFsbHkgY2FsbCBPcGVuR0wuCi0gICAgYm9vbCBtYWtlQ29udGV4
dEN1cnJlbnQoKSBXQVJOX1VOVVNFRF9SRVRVUk47CiAKICAgICAvLyBUYWtlIGludG8gYWNjb3Vu
dCB0aGUgdXNlcidzIHJlcXVlc3RlZCBjb250ZXh0IGNyZWF0aW9uIGF0dHJpYnV0ZXMsCiAgICAg
Ly8gaW4gcGFydGljdWxhciBzdGVuY2lsIGFuZCBhbnRpYWxpYXMsIGFuZCBkZXRlcm1pbmUgd2hp
Y2ggY291bGQgb3IKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTEJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQmFzZS5jcHAK
aW5kZXggNzUwZWQzMjZlY2U2NWU4OGY2YjQxMzYwMTVjNGY5MzM3NDQ4OWNhNS4uMjBiZjJmNGY5
ODRjYzdmMmJiNzNjNmRhNTU5ZjA4MDBhMzNhMTQ5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQmFzZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNz
Q29udGV4dEdMT3BlbkdMQmFzZS5jcHAKQEAgLTIzNyw5ICsyMzcsNyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpyZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5KGNvbnN0IElu
dFJlY3QmIHJlYwogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZW5kZXJidWZmZXJT
dG9yYWdlKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXpl
aSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKIHsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQotICAgICAgICByZXR1cm47Ci0KKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICNpZiBV
U0UoT1BFTkdMKQogICAgIHN3aXRjaCAoaW50ZXJuYWxmb3JtYXQpIHsKICAgICBjYXNlIERFUFRI
X1NURU5DSUw6CkBAIC0yNjYsOSArMjY0LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0SW50ZWdlcnYoR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQqIHZhbHVlKQogICAgIC8vIGJl
Y2F1c2UgZGVza3RvcCBHTCdzIGNvcnJlc3BvbmRpbmcgcXVlcmllcyByZXR1cm4gdGhlIG51bWJl
ciBvZiBjb21wb25lbnRzCiAgICAgLy8gd2hlcmVhcyBHTEVTMiByZXR1cm4gdGhlIG51bWJlciBv
ZiB2ZWN0b3JzIChlYWNoIHZlY3RvciBoYXMgNCBjb21wb25lbnRzKS4KICAgICAvLyBUaGVyZWZv
cmUsIHRoZSB2YWx1ZSByZXR1cm5lZCBieSBkZXNrdG9wIEdMIG5lZWRzIHRvIGJlIGRpdmlkZWQg
YnkgNC4KLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0K
KyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBzd2l0Y2ggKHBuYW1lKSB7CiAjaWYgVVNF
KE9QRU5HTCkKICAgICBjYXNlIE1BWF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlM6CkBAIC0zMTQs
OSArMzEwLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVyUHJlY2lz
aW9uRm9ybWF0KEdDR0xlbnVtIHNoYWRlclR5cGUsIEdDR0wKICAgICBBU1NFUlQocmFuZ2UpOwog
ICAgIEFTU0VSVChwcmVjaXNpb24pOwogCi0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
LSAgICAgICAgcmV0dXJuOwotCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAKICAgICBzd2l0
Y2ggKHByZWNpc2lvblR5cGUpIHsKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpMT1dfSU5U
OgpAQCAtNDA5LDE3ICs0MDMsMTMgQEAgYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4
SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnUKIAogdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVwdGhSYW5nZShHQ0dMY2xhbXBmIHpOZWFyLCBHQ0dM
Y2xhbXBmIHpGYXIpCiB7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAg
cmV0dXJuOwotCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgOjpnbERlcHRoUmFuZ2Uo
ek5lYXIsIHpGYXIpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckRl
cHRoKEdDR0xjbGFtcGYgZGVwdGgpCiB7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
LSAgICAgICAgcmV0dXJuOwotCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgOjpnbENs
ZWFyRGVwdGgoZGVwdGgpOwogfQogCkBAIC00MzgsOSArNDI4LDcgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6cmVhZFBpeGVscyhHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVp
IHdpZHRoLAogCiAgICAgLy8gRklYTUU6IHJlbW92ZSB0aGUgdHdvIGdsRmx1c2ggY2FsbHMgd2hl
biB0aGUgZHJpdmVyIGJ1ZyBpcyBmaXhlZCwgaS5lLiwKICAgICAvLyBhbGwgcHJldmlvdXMgcmVu
ZGVyaW5nIGNhbGxzIHNob3VsZCBiZSBkb25lIGJlZm9yZSByZWFkaW5nIHBpeGVscy4KLSAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KKyAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKICAgICA6OmdsRmx1c2goKTsKICAgICBBU1NFUlQobV9zdGF0ZS5ib3Vu
ZFJlYWRGQk8gPT0gbV9zdGF0ZS5ib3VuZERyYXdGQk8pOwogICAgIGlmIChhdHRycy5hbnRpYWxp
YXMgJiYgbV9zdGF0ZS5ib3VuZERyYXdGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykgewpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMQ29tbW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTENvbW1vbi5jcHAKaW5kZXggOTg0ZjYyZDBi
NTRkZDhhOGFlYTM5N2IwODE3N2ViOGI0NmM5ZmY3MS4uYjE0YjYyZDVlNGZiZWE4ZWEyYzg3ODU2
ZTdiZmVkNmI4ZDM4NjdiMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29tbW9uLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0xDb21tb24uY3BwCkBAIC0yMDAsOSArMjAwLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6cHJlcGFyZVRleHR1cmUoKQogICAgIGlmIChtX2xheWVyQ29tcG9zaXRlZCkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0
dXJuOwotCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAKICNpZiAhVVNFKENPT1JESU5BVEVE
X0dSQVBISUNTKQogICAgIFRlbXBvcmFyeU9wZW5HTFNldHRpbmcgc2NvcGVkU2Npc3NvcihHTF9T
Q0lTU09SX1RFU1QsIEdMX0ZBTFNFKTsKQEAgLTI0MSw5ICsyMzksNyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpyZWFkUmVuZGVyaW5nUmVzdWx0cyh1bnNpZ25lZCBjaGFyICpwaXhl
bHMsIGludCBwaQogICAgIGlmIChwaXhlbHNTaXplIDwgbV9jdXJyZW50V2lkdGggKiBtX2N1cnJl
bnRIZWlnaHQgKiA0KQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQotICAgICAgICByZXR1cm47Ci0KKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKIAog
ICAgIGJvb2wgbXVzdFJlc3RvcmVGQk8gPSBmYWxzZTsKICAgICBpZiAoY29udGV4dEF0dHJpYnV0
ZXMoKS5hbnRpYWxpYXMpIHsKQEAgLTI3Nyw2ICsyNzMsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpyZWFkUmVuZGVyaW5nUmVzdWx0cyh1bnNpZ25lZCBjaGFyICpwaXhlbHMsIGlu
dCBwaQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZXNoYXBlKGludCB3aWR0aCwg
aW50IGhlaWdodCkKIHsKKyAgICBpZiAoIXBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0woKSkKKyAg
ICAgICAgcmV0dXJuOworCiAgICAgaWYgKHdpZHRoID09IG1fY3VycmVudFdpZHRoICYmIGhlaWdo
dCA9PSBtX2N1cnJlbnRIZWlnaHQpCiAgICAgICAgIHJldHVybjsKIApAQCAtMjg0LDE0ICsyODMs
MTIgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzaGFwZShpbnQgd2lkdGgsIGlu
dCBoZWlnaHQpCiAgICAgaWYgKHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwKQogICAgICAgICByZXR1
cm47CiAKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0K
ICAgICBtYXJrQ29udGV4dENoYW5nZWQoKTsKIAogICAgIG1fY3VycmVudFdpZHRoID0gd2lkdGg7
CiAgICAgbV9jdXJyZW50SGVpZ2h0ID0gaGVpZ2h0OwogCisgICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CiAgICAgdmFsaWRhdGVBdHRyaWJ1dGVzKCk7CiAKICAgICBUZW1wb3JhcnlPcGVuR0xTZXR0
aW5nIHNjb3BlZFNjaXNzb3IoR0xfU0NJU1NPUl9URVNULCBHTF9GQUxTRSk7CkBAIC00MzAsOSAr
NDI3LDcgQEAgYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cHJlY2lzaW9uc01hdGNoKFBs
YXRmb3JtR0xPYmplY3QgdmVydGV4U2hhZGVyLCBQbGEKIAogdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6YWN0aXZlVGV4dHVyZShHQ0dMZW51bSB0ZXh0dXJlKQogewotICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQorICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOwogICAgIG1fc3RhdGUuYWN0aXZlVGV4dHVyZVVuaXQgPSB0ZXh0dXJlOwogICAgIDo6
Z2xBY3RpdmVUZXh0dXJlKHRleHR1cmUpOwogfQpAQCAtNDQxLDkgKzQzNiw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmF0dGFjaFNoYWRlcihQbGF0Zm9ybUdMT2JqZWN0IHByb2dy
YW0sIFBsYXRmb3JtR0xPCiB7CiAgICAgQVNTRVJUKHByb2dyYW0pOwogICAgIEFTU0VSVChzaGFk
ZXIpOwotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQor
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50
TWFwLnJlbW92ZShwcm9ncmFtKTsKICAgICA6OmdsQXR0YWNoU2hhZGVyKHByb2dyYW0sIHNoYWRl
cik7CiB9CkBAIC00NTEsOCArNDQ0LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
YXR0YWNoU2hhZGVyKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgUGxhdGZvcm1HTE8KIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybUdMT2Jq
ZWN0IHByb2dyYW0sIEdDR0x1aW50IGluZGV4LCBjb25zdCBTdHJpbmcmIG5hbWUpCiB7CiAgICAg
QVNTRVJUKHByb2dyYW0pOwotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAg
IHJldHVybjsKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKIAogICAgIFN0cmluZyBtYXBwZWRO
YW1lID0gbWFwcGVkU3ltYm9sTmFtZShwcm9ncmFtLCBTSEFERVJfU1lNQk9MX1RZUEVfQVRUUklC
VVRFLCBuYW1lKTsKICAgICBMT0coV2ViR0wsICI6OmJpbmRBdHRyaWJMb2NhdGlvbiBpcyBtYXBw
aW5nICVzIHRvICVzIiwgbmFtZS51dGY4KCkuZGF0YSgpLCBtYXBwZWROYW1lLnV0ZjgoKS5kYXRh
KCkpOwpAQCAtNDYxLDE3ICs0NTMsMTMgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
YmluZEF0dHJpYkxvY2F0aW9uKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHUKIAogdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQsIFBs
YXRmb3JtR0xPYmplY3QgYnVmZmVyKQogewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
Ci0gICAgICAgIHJldHVybjsKLQorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIDo6Z2xC
aW5kQnVmZmVyKHRhcmdldCwgYnVmZmVyKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6YmluZEZyYW1lYnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBi
dWZmZXIpCiB7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJu
OwotCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgR0x1aW50IGZibzsKICAgICBpZiAo
YnVmZmVyKQogICAgICAgICBmYm8gPSBidWZmZXI7CkBAIC00ODcsMTMzICs0NzUsMTAyIEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRGcmFtZWJ1ZmZlcihHQ0dMZW51bSB0YXJn
ZXQsIFBsYXRmb3JtR0xPYmplY3QKIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Ymlu
ZFJlbmRlcmJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgcmVuZGVyYnVm
ZmVyKQogewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsK
LQorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyRVhU
KHRhcmdldCwgcmVuZGVyYnVmZmVyKTsKIH0KIAogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpiaW5kVGV4dHVyZShHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgdGV4dHVy
ZSkKIHsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0K
KyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBtX3N0YXRlLnNldEJvdW5kVGV4dHVyZSht
X3N0YXRlLmFjdGl2ZVRleHR1cmVVbml0LCB0ZXh0dXJlLCB0YXJnZXQpOwogICAgIDo6Z2xCaW5k
VGV4dHVyZSh0YXJnZXQsIHRleHR1cmUpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpibGVuZENvbG9yKEdDR0xjbGFtcGYgcmVkLCBHQ0dMY2xhbXBmIGdyZWVuLCBHQ0dMY2xh
bXBmIGJsdWUsIEdDR0xjbGFtcGYgYWxwaGEpCiB7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKLSAgICAgICAgcmV0dXJuOwotCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAg
OjpnbEJsZW5kQ29sb3IocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwogfQogCiB2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVxdWF0aW9uKEdDR0xlbnVtIG1vZGUpCiB7Ci0gICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCisgICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CiAgICAgOjpnbEJsZW5kRXF1YXRpb24obW9kZSk7CiB9CiAKIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kRXF1YXRpb25TZXBhcmF0ZShHQ0dMZW51bSBt
b2RlUkdCLCBHQ0dMZW51bSBtb2RlQWxwaGEpCiB7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKLSAgICAgICAgcmV0dXJuOwotCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAg
OjpnbEJsZW5kRXF1YXRpb25TZXBhcmF0ZShtb2RlUkdCLCBtb2RlQWxwaGEpOwogfQogCiAKIHZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kRnVuYyhHQ0dMZW51bSBzZmFjdG9yLCBH
Q0dMZW51bSBkZmFjdG9yKQogewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAg
ICAgIHJldHVybjsKLQorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIDo6Z2xCbGVuZEZ1
bmMoc2ZhY3RvciwgZGZhY3Rvcik7CiB9ICAgICAgIAogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpibGVuZEZ1bmNTZXBhcmF0ZShHQ0dMZW51bSBzcmNSR0IsIEdDR0xlbnVtIGRzdFJH
QiwgR0NHTGVudW0gc3JjQWxwaGEsIEdDR0xlbnVtIGRzdEFscGhhKQogewotICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQorICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOwogICAgIDo6Z2xCbGVuZEZ1bmNTZXBhcmF0ZShzcmNSR0IsIGRzdFJHQiwgc3JjQWxw
aGEsIGRzdEFscGhhKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YnVmZmVy
RGF0YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xzaXplaXB0ciBzaXplLCBHQ0dMZW51bSB1c2FnZSkK
IHsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KKyAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICA6OmdsQnVmZmVyRGF0YSh0YXJnZXQsIHNpemUs
IDAsIHVzYWdlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YnVmZmVyRGF0
YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xzaXplaXB0ciBzaXplLCBjb25zdCB2b2lkKiBkYXRhLCBH
Q0dMZW51bSB1c2FnZSkKIHsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAg
ICByZXR1cm47Ci0KKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICA6OmdsQnVmZmVyRGF0
YSh0YXJnZXQsIHNpemUsIGRhdGEsIHVzYWdlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6YnVmZmVyU3ViRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnRwdHIgb2Zmc2V0
LCBHQ0dMc2l6ZWlwdHIgc2l6ZSwgY29uc3Qgdm9pZCogZGF0YSkKIHsKLSAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KKyAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKICAgICA6OmdsQnVmZmVyU3ViRGF0YSh0YXJnZXQsIG9mZnNldCwgc2l6ZSwgZGF0YSk7
CiB9CiAKIEdDR0xlbnVtIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjaGVja0ZyYW1lYnVmZmVy
U3RhdHVzKEdDR0xlbnVtIHRhcmdldCkKIHsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQotICAgICAgICByZXR1cm4gR0xfSU5WQUxJRF9PUEVSQVRJT047Ci0KKyAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKICAgICByZXR1cm4gOjpnbENoZWNrRnJhbWVidWZmZXJTdGF0dXNFWFQodGFy
Z2V0KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJDb2xvcihHQ0dM
Y2xhbXBmIHIsIEdDR0xjbGFtcGYgZywgR0NHTGNsYW1wZiBiLCBHQ0dMY2xhbXBmIGEpCiB7Ci0g
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCisgICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CiAgICAgOjpnbENsZWFyQ29sb3IociwgZywgYiwgYSk7CiB9CiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyKEdDR0xiaXRmaWVsZCBtYXNrKQog
ewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQorICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIDo6Z2xDbGVhcihtYXNrKTsKICAgICBjaGVja0dQ
VVN0YXR1cygpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhclN0ZW5j
aWwoR0NHTGludCBzKQogewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAg
IHJldHVybjsKLQorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIDo6Z2xDbGVhclN0ZW5j
aWwocyk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbG9yTWFzayhHQ0dM
Ym9vbGVhbiByZWQsIEdDR0xib29sZWFuIGdyZWVuLCBHQ0dMYm9vbGVhbiBibHVlLCBHQ0dMYm9v
bGVhbiBhbHBoYSkKIHsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICBy
ZXR1cm47Ci0KKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICA6OmdsQ29sb3JNYXNrKHJl
ZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Y29tcGlsZVNoYWRlcihQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKIHsKICAgICBBU1NFUlQo
c2hhZGVyKTsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47
CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAKICAgICAvLyBUdXJuIG9uIG5hbWUgbWFwcGlu
Zy4gRHVlIHRvIHRoZSB3YXkgQU5HTEUgbmFtZSBoYXNoaW5nIHdvcmtzLCB3ZQogICAgIC8vIHBv
aW50IGEgZ2xvYmFsIGhhc2htYXAgdG8gdGhlIG1hcCBvd25lZCBieSB0aGlzIGNvbnRleHQuCkBA
IC02NzUsOCArNjMyLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGlsZVNo
YWRlcihQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNvbXBpbGVTaGFkZXJEaXJlY3QoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCiB7CiAgICAg
QVNTRVJUKHNoYWRlcik7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAg
cmV0dXJuOworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogCiAgICAgSGFzaE1hcDxQbGF0Zm9y
bUdMT2JqZWN0LCBTaGFkZXJTb3VyY2VFbnRyeT46Oml0ZXJhdG9yIHJlc3VsdCA9IG1fc2hhZGVy
U291cmNlTWFwLmZpbmQoc2hhZGVyKTsKIApAQCAtNzEwLDkgKzY2Niw3IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNvbXBpbGVTaGFkZXJEaXJlY3QoUGxhdGZvcm1HTE9iamVjdCBz
aGFkZXIpCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhJbWFnZTJEKEdD
R0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdD
R0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdD
R0xpbnQgYm9yZGVyKQogewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAg
IHJldHVybjsKLQorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIGF1dG8gYXR0cnMgPSBj
b250ZXh0QXR0cmlidXRlcygpOwogCiAgICAgQVNTRVJUKG1fc3RhdGUuYm91bmRSZWFkRkJPID09
IG1fc3RhdGUuYm91bmREcmF3RkJPKTsKQEAgLTcyNyw5ICs2ODEsNyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpjb3B5VGV4SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQg
bGV2ZWwsIEdDRwogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5VGV4U3ViSW1h
Z2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgeG9mZnNldCwgR0NH
TGludCB5b2Zmc2V0LCBHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dM
c2l6ZWkgaGVpZ2h0KQogewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAg
IHJldHVybjsKLQorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIGF1dG8gYXR0cnMgPSBj
b250ZXh0QXR0cmlidXRlcygpOwogCiAgICAgQVNTRVJUKG1fc3RhdGUuYm91bmRSZWFkRkJPID09
IG1fc3RhdGUuYm91bmREcmF3RkJPKTsKQEAgLTc0NCwyNSArNjk2LDE5IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NH
TGludCBsZXZlbCwKIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3VsbEZhY2UoR0NH
TGVudW0gbW9kZSkKIHsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICBy
ZXR1cm47Ci0KKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICA6OmdsQ3VsbEZhY2UobW9k
ZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlcHRoRnVuYyhHQ0dMZW51
bSBmdW5jKQogewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVy
bjsKLQorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIDo6Z2xEZXB0aEZ1bmMoZnVuYyk7
CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlcHRoTWFzayhHQ0dMYm9vbGVh
biBmbGFnKQogewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVy
bjsKLQorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIDo6Z2xEZXB0aE1hc2soZmxhZyk7
CiB9CiAKQEAgLTc3MCwxMDkgKzcxNiw4MyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpkZXRhY2hTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBQbGF0Zm9ybUdMTwogewog
ICAgIEFTU0VSVChwcm9ncmFtKTsKICAgICBBU1NFUlQoc2hhZGVyKTsKLSAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KKyAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKICAgICBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5yZW1vdmUocHJvZ3JhbSk7
CiAgICAgOjpnbERldGFjaFNoYWRlcihwcm9ncmFtLCBzaGFkZXIpOwogfQogCiB2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpkaXNhYmxlKEdDR0xlbnVtIGNhcCkKIHsKLSAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KKyAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKICAgICA6OmdsRGlzYWJsZShjYXApOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpkaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoR0NHTHVpbnQgaW5kZXgpCiB7Ci0g
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCisgICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CiAgICAgOjpnbERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRl
eCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdBcnJheXMoR0NHTGVu
dW0gbW9kZSwgR0NHTGludCBmaXJzdCwgR0NHTHNpemVpIGNvdW50KQogewotICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQorICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOwogICAgIDo6Z2xEcmF3QXJyYXlzKG1vZGUsIGZpcnN0LCBjb3VudCk7CiAgICAgY2hl
Y2tHUFVTdGF0dXMoKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0Vs
ZW1lbnRzKEdDR0xlbnVtIG1vZGUsIEdDR0xzaXplaSBjb3VudCwgR0NHTGVudW0gdHlwZSwgR0NH
TGludHB0ciBvZmZzZXQpCiB7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAg
ICAgcmV0dXJuOwotCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgOjpnbERyYXdFbGVt
ZW50cyhtb2RlLCBjb3VudCwgdHlwZSwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihzdGF0aWNf
Y2FzdDxpbnRwdHJfdD4ob2Zmc2V0KSkpOwogICAgIGNoZWNrR1BVU3RhdHVzKCk7CiB9CiAKIHZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmVuYWJsZShHQ0dMZW51bSBjYXApCiB7Ci0gICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCisgICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CiAgICAgOjpnbEVuYWJsZShjYXApOwogfQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjplbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShHQ0dMdWludCBpbmRleCkK
IHsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KKyAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICA6OmdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXko
aW5kZXgpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmaW5pc2goKQogewot
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQorICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwogICAgIDo6Z2xGaW5pc2goKTsKIH0KIAogdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Zmx1c2goKQogewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCi0gICAgICAgIHJldHVybjsKLQorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIDo6
Z2xGbHVzaCgpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZl
clJlbmRlcmJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQsIEdDR0xl
bnVtIHJlbmRlcmJ1ZmZlcnRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCiB7Ci0gICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCisgICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CiAgICAgOjpnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyRVhUKHRhcmdl
dCwgYXR0YWNobWVudCwgcmVuZGVyYnVmZmVydGFyZ2V0LCBidWZmZXIpOwogfQogCiB2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclRleHR1cmUyRChHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQsIEdDR0xlbnVtIHRleHRhcmdldCwgUGxhdGZvcm1HTE9i
amVjdCB0ZXh0dXJlLCBHQ0dMaW50IGxldmVsKQogewotICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCi0gICAgICAgIHJldHVybjsKLQorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAg
IDo6Z2xGcmFtZWJ1ZmZlclRleHR1cmUyREVYVCh0YXJnZXQsIGF0dGFjaG1lbnQsIHRleHRhcmdl
dCwgdGV4dHVyZSwgbGV2ZWwpOwogICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQobV9z
dGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpmcm9udEZhY2UoR0NHTGVudW0gbW9kZSkKIHsKLSAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
ICAgICA6OmdsRnJvbnRGYWNlKG1vZGUpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZW5lcmF0ZU1pcG1hcChHQ0dMZW51bSB0YXJnZXQpCiB7Ci0gICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCisgICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CiAgICAgOjpnbEdlbmVyYXRlTWlwbWFwKHRhcmdldCk7CiB9CiAKQEAgLTg4Miw5ICs4MDIs
NyBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVBdHRyaWJJbXBsKFBs
YXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTAogICAgICAgICBzeW50aGVzaXplR0xFcnJvcihJ
TlZBTElEX1ZBTFVFKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KKyAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKICAgICBHTGludCBtYXhBdHRyaWJ1dGVTaXplID0gMDsKICAgICA6Omds
R2V0UHJvZ3JhbWl2KHByb2dyYW0sIEdMX0FDVElWRV9BVFRSSUJVVEVfTUFYX0xFTkdUSCwgJm1h
eEF0dHJpYnV0ZVNpemUpOwogICAgIFZlY3RvcjxHTGNoYXI+IG5hbWUobWF4QXR0cmlidXRlU2l6
ZSk7IC8vIEdMX0FDVElWRV9BVFRSSUJVVEVfTUFYX0xFTkdUSCBpbmNsdWRlcyBudWxsIHRlcm1p
bmF0aW9uLgpAQCAtOTMwLDkgKzg0OCw3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmdldEFjdGl2ZVVuaWZvcm1JbXBsKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAg
ICBHTGludCBtYXhVbmlmb3JtU2l6ZSA9IDA7CiAgICAgOjpnbEdldFByb2dyYW1pdihwcm9ncmFt
LCBHTF9BQ1RJVkVfVU5JRk9STV9NQVhfTEVOR1RILCAmbWF4VW5pZm9ybVNpemUpOwogCkBAIC05
NzgsOSArODk0LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QXR0YWNoZWRT
aGFkZXJzKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHMKICAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoSU5WQUxJRF9WQUxVRSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCisgICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CiAgICAgOjpnbEdldEF0dGFjaGVkU2hhZGVycyhwcm9ncmFtLCBtYXhDb3Vu
dCwgY291bnQsIHNoYWRlcnMpOwogfQogCkBAIC0xMTIzLDkgKzEwMzcsNyBAQCBpbnQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dHJpYkxvY2F0aW9uKFBsYXRmb3JtR0xPYmplY3QgcHJv
Z3JhbSwgY29uc3QgUwogICAgIGlmICghcHJvZ3JhbSkKICAgICAgICAgcmV0dXJuIC0xOwogCi0g
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIC0xOwotCisgICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CiAKICAgICBTdHJpbmcgbWFwcGVkTmFtZSA9IG1hcHBlZFN5
bWJvbE5hbWUocHJvZ3JhbSwgU0hBREVSX1NZTUJPTF9UWVBFX0FUVFJJQlVURSwgbmFtZSk7CiAg
ICAgTE9HKFdlYkdMLCAiOjpnbEdldEF0dHJpYkxvY2F0aW9uIGlzIG1hcHBpbmcgJXMgdG8gJXMi
LCBuYW1lLnV0ZjgoKS5kYXRhKCksIG1hcHBlZE5hbWUudXRmOCgpLmRhdGEoKSk7CkBAIC0xMTM3
LDE4ICsxMDQ5LDE0IEBAIGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QXR0cmliTG9j
YXRpb25EaXJlY3QoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjCiAgICAgaWYgKCFwcm9ncmFt
KQogICAgICAgICByZXR1cm4gLTE7CiAKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQot
ICAgICAgICByZXR1cm4gLTE7Ci0KKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKIAogICAgIHJl
dHVybiA6OmdsR2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgbmFtZS51dGY4KCkuZGF0YSgpKTsK
IH0KIAogYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bW92ZUVycm9yc1RvU3ludGhldGlj
RXJyb3JMaXN0KCkKIHsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBib29sIG1vdmVk
QW5FcnJvciA9IGZhbHNlOwogCiAgICAgLy8gU2V0IGFuIGFyYml0cmFyeSBsaW1pdCBvZiAxMDAg
aGVyZSB0byBhdm9pZCBjcmVhdGluZyBhIGhhbmcgaWYKQEAgLTExNzUsMjUgKzEwODMsMTkgQEAg
R0NHTGVudW0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEVycm9yKCkKICAgICAgICAgcmV0
dXJuIG1fc3ludGhldGljRXJyb3JzLnRha2VGaXJzdCgpOwogICAgIH0KIAotICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiBHTF9JTlZBTElEX09QRVJBVElPTjsK
LQorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIHJldHVybiA6OmdsR2V0RXJyb3IoKTsK
IH0KIAogU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTdHJpbmcoR0NHTGVudW0g
bmFtZSkKIHsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4g
U3RyaW5nKCk7Ci0KKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICByZXR1cm4gU3RyaW5n
KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KDo6Z2xHZXRTdHJpbmcobmFtZSkpKTsKIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aGludChHQ0dMZW51bSB0YXJnZXQsIEdD
R0xlbnVtIG1vZGUpCiB7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAg
cmV0dXJuOwotCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgOjpnbEhpbnQodGFyZ2V0
LCBtb2RlKTsKIH0KIApAQCAtMTIwMiwxNyArMTEwNCwxMyBAQCBHQ0dMYm9vbGVhbiBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6aXNCdWZmZXIoUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCiAgICAg
aWYgKCFidWZmZXIpCiAgICAgICAgIHJldHVybiBHTF9GQUxTRTsKIAotICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiBHTF9GQUxTRTsKLQorICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOwogICAgIHJldHVybiA6OmdsSXNCdWZmZXIoYnVmZmVyKTsKIH0KIAogR0NH
TGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzRW5hYmxlZChHQ0dMZW51bSBjYXAp
CiB7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIEdMX0ZB
TFNFOwotCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgcmV0dXJuIDo6Z2xJc0VuYWJs
ZWQoY2FwKTsKIH0KIApAQCAtMTIyMSw5ICsxMTE5LDcgQEAgR0NHTGJvb2xlYW4gR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmlzRnJhbWVidWZmZXIoUGxhdGZvcm1HTE9iamVjdCBmcmFtZWJ1ZmZl
cikKICAgICBpZiAoIWZyYW1lYnVmZmVyKQogICAgICAgICByZXR1cm4gR0xfRkFMU0U7CiAKLSAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gR0xfRkFMU0U7Ci0K
KyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICByZXR1cm4gOjpnbElzRnJhbWVidWZmZXJF
WFQoZnJhbWVidWZmZXIpOwogfQogCkBAIC0xMjMyLDkgKzExMjgsNyBAQCBHQ0dMYm9vbGVhbiBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNQcm9ncmFtKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3Jh
bSkKICAgICBpZiAoIXByb2dyYW0pCiAgICAgICAgIHJldHVybiBHTF9GQUxTRTsKIAotICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiBHTF9GQUxTRTsKLQorICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIHJldHVybiA6OmdsSXNQcm9ncmFtKHByb2dyYW0p
OwogfQogCkBAIC0xMjQzLDkgKzExMzcsNyBAQCBHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6aXNSZW5kZXJidWZmZXIoUGxhdGZvcm1HTE9iamVjdCByZW5kZXJidWZmZQogICAg
IGlmICghcmVuZGVyYnVmZmVyKQogICAgICAgICByZXR1cm4gR0xfRkFMU0U7CiAKLSAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gR0xfRkFMU0U7Ci0KKyAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICByZXR1cm4gOjpnbElzUmVuZGVyYnVmZmVyRVhUKHJl
bmRlcmJ1ZmZlcik7CiB9CiAKQEAgLTEyNTQsOSArMTE0Niw3IEBAIEdDR0xib29sZWFuIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjppc1NoYWRlcihQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKICAg
ICBpZiAoIXNoYWRlcikKICAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwogCi0gICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwotCisgICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CiAgICAgcmV0dXJuIDo6Z2xJc1NoYWRlcihzaGFkZXIpOwogfQogCkBA
IC0xMjY1LDI2ICsxMTU1LDIwIEBAIEdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojppc1RleHR1cmUoUGxhdGZvcm1HTE9iamVjdCB0ZXh0dXJlKQogICAgIGlmICghdGV4dHVyZSkK
ICAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwogCi0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKLSAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwotCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CiAgICAgcmV0dXJuIDo6Z2xJc1RleHR1cmUodGV4dHVyZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmxpbmVXaWR0aChHQ0dMZmxvYXQgd2lkdGgpCiB7Ci0gICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCisgICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CiAgICAgOjpnbExpbmVXaWR0aCh3aWR0aCk7CiB9CiAKIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmxpbmtQcm9ncmFtKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKIHsK
ICAgICBBU1NFUlQocHJvZ3JhbSk7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAg
ICAgICAgcmV0dXJuOwotCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAKICAgICBHQ0dMc2l6
ZWkgY291bnQgPSAwOwogICAgIFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyc1syXSA9IHsgfTsKQEAg
LTEyOTgsMzMgKzExODIsMjUgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bGlua1By
b2dyYW0oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtKQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpwaXhlbFN0b3JlaShHQ0dMZW51bSBwbmFtZSwgR0NHTGludCBwYXJhbSkKIHsKLSAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KKyAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKICAgICA6OmdsUGl4ZWxTdG9yZWkocG5hbWUsIHBhcmFtKTsKIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cG9seWdvbk9mZnNldChHQ0dMZmxvYXQg
ZmFjdG9yLCBHQ0dMZmxvYXQgdW5pdHMpCiB7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKLSAgICAgICAgcmV0dXJuOwotCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgOjpn
bFBvbHlnb25PZmZzZXQoZmFjdG9yLCB1bml0cyk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnNhbXBsZUNvdmVyYWdlKEdDR0xjbGFtcGYgdmFsdWUsIEdDR0xib29sZWFuIGlu
dmVydCkKIHsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47
Ci0KKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICA6OmdsU2FtcGxlQ292ZXJhZ2UodmFs
dWUsIGludmVydCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNjaXNzb3Io
R0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkK
IHsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KKyAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICA6OmdsU2Npc3Nvcih4LCB5LCB3aWR0aCwgaGVp
Z2h0KTsKIH0KIApAQCAtMTMzMiw5ICsxMjA4LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6c2hhZGVyU291cmNlKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyLCBjb25zdCBTdHJpbmcK
IHsKICAgICBBU1NFUlQoc2hhZGVyKTsKIAotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
Ci0gICAgICAgIHJldHVybjsKLQorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogCiAgICAgU2hh
ZGVyU291cmNlRW50cnkgZW50cnk7CiAKQEAgLTEzNDUsMjM0ICsxMjE5LDE3OCBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzaGFkZXJTb3VyY2UoUGxhdGZvcm1HTE9iamVjdCBzaGFk
ZXIsIGNvbnN0IFN0cmluZwogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2ls
RnVuYyhHQ0dMZW51bSBmdW5jLCBHQ0dMaW50IHJlZiwgR0NHTHVpbnQgbWFzaykKIHsKLSAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KKyAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKICAgICA6OmdsU3RlbmNpbEZ1bmMoZnVuYywgcmVmLCBtYXNrKTsKIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbEZ1bmNTZXBhcmF0ZShHQ0dM
ZW51bSBmYWNlLCBHQ0dMZW51bSBmdW5jLCBHQ0dMaW50IHJlZiwgR0NHTHVpbnQgbWFzaykKIHsK
LSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KKyAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICA6OmdsU3RlbmNpbEZ1bmNTZXBhcmF0ZShmYWNlLCBm
dW5jLCByZWYsIG1hc2spOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVu
Y2lsTWFzayhHQ0dMdWludCBtYXNrKQogewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
Ci0gICAgICAgIHJldHVybjsKLQorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIDo6Z2xT
dGVuY2lsTWFzayhtYXNrKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3Rl
bmNpbE1hc2tTZXBhcmF0ZShHQ0dMZW51bSBmYWNlLCBHQ0dMdWludCBtYXNrKQogewotICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQorICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOwogICAgIDo6Z2xTdGVuY2lsTWFza1NlcGFyYXRlKGZhY2UsIG1hc2spOwog
fQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsT3AoR0NHTGVudW0gZmFp
bCwgR0NHTGVudW0gemZhaWwsIEdDR0xlbnVtIHpwYXNzKQogewotICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQorICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwogICAgIDo6Z2xTdGVuY2lsT3AoZmFpbCwgemZhaWwsIHpwYXNzKTsKIH0KIAogdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE9wU2VwYXJhdGUoR0NHTGVudW0gZmFjZSwgR0NH
TGVudW0gZmFpbCwgR0NHTGVudW0gemZhaWwsIEdDR0xlbnVtIHpwYXNzKQogewotICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQorICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOwogICAgIDo6Z2xTdGVuY2lsT3BTZXBhcmF0ZShmYWNlLCBmYWlsLCB6ZmFpbCwg
enBhc3MpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhQYXJhbWV0ZXJm
KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUsIEdDR0xmbG9hdCB2YWx1ZSkKIHsKLSAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KKyAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKICAgICA6OmdsVGV4UGFyYW1ldGVyZih0YXJnZXQsIHBuYW1lLCB2
YWx1ZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFBhcmFtZXRlcmko
R0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTGludCB2YWx1ZSkKIHsKLSAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KKyAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKICAgICA6OmdsVGV4UGFyYW1ldGVyaSh0YXJnZXQsIHBuYW1lLCB2YWx1
ZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xZihHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMZmxvYXQgdjApCiB7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKLSAgICAgICAgcmV0dXJuOwotCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgOjpn
bFVuaWZvcm0xZihsb2NhdGlvbiwgdjApOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bmlmb3JtMWZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xzaXplaSBzaXplLCBjb25zdCBH
Q0dMZmxvYXQqIGFycmF5KQogewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAg
ICAgIHJldHVybjsKLQorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIDo6Z2xVbmlmb3Jt
MWZ2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnVuaWZvcm0yZihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMZmxvYXQgdjAsIEdDR0xmbG9h
dCB2MSkKIHsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47
Ci0KKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICA6OmdsVW5pZm9ybTJmKGxvY2F0aW9u
LCB2MCwgdjEpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMmZ2
KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xzaXplaSBzaXplLCBjb25zdCBHQ0dMZmxvYXQqIGFycmF5
KQogewogICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAyLgot
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQorICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwogICAgIDo6Z2xVbmlmb3JtMmZ2KGxvY2F0aW9uLCBzaXplLCBh
cnJheSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zZihHQ0dM
aW50IGxvY2F0aW9uLCBHQ0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYyKQog
ewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQorICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIDo6Z2xVbmlmb3JtM2YobG9jYXRpb24sIHYwLCB2
MSwgdjIpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2Z2KEdD
R0xpbnQgbG9jYXRpb24sIEdDR0xzaXplaSBzaXplLCBjb25zdCBHQ0dMZmxvYXQqIGFycmF5KQog
ewogICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAzLgotICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQorICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOwogICAgIDo6Z2xVbmlmb3JtM2Z2KGxvY2F0aW9uLCBzaXplLCBhcnJh
eSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00ZihHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYyLCBHQ0dM
ZmxvYXQgdjMpCiB7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0
dXJuOwotCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgOjpnbFVuaWZvcm00Zihsb2Nh
dGlvbiwgdjAsIHYxLCB2MiwgdjMpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtNGZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xzaXplaSBzaXplLCBjb25zdCBHQ0dM
ZmxvYXQqIGFycmF5KQogewogICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0
aXBsZSBvZiA0LgotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVy
bjsKLQorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIDo6Z2xVbmlmb3JtNGZ2KGxvY2F0
aW9uLCBzaXplLCBhcnJheSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVu
aWZvcm0xaShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50IHYwKQogewotICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQorICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwogICAgIDo6Z2xVbmlmb3JtMWkobG9jYXRpb24sIHYwKTsKIH0KIAogdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMc2l6ZWkg
c2l6ZSwgY29uc3QgR0NHTGludCogYXJyYXkpCiB7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKLSAgICAgICAgcmV0dXJuOwotCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAg
OjpnbFVuaWZvcm0xaXYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKIH0KIAogdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xpbnQgdjAs
IEdDR0xpbnQgdjEpCiB7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAg
cmV0dXJuOwotCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgOjpnbFVuaWZvcm0yaShs
b2NhdGlvbiwgdjAsIHYxKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5p
Zm9ybTJpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMc2l6ZWkgc2l6ZSwgY29uc3QgR0NHTGludCog
YXJyYXkpCiB7CiAgICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9m
IDIuCi0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCisg
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgOjpnbFVuaWZvcm0yaXYobG9jYXRpb24sIHNp
emUsIGFycmF5KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNp
KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xpbnQgdjAsIEdDR0xpbnQgdjEsIEdDR0xpbnQgdjIpCiB7
Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCisgICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgOjpnbFVuaWZvcm0zaShsb2NhdGlvbiwgdjAsIHYx
LCB2Mik7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zaXYoR0NH
TGludCBsb2NhdGlvbiwgR0NHTHNpemVpIHNpemUsIGNvbnN0IEdDR0xpbnQqIGFycmF5KQogewog
ICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAzLgotICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQorICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOwogICAgIDo6Z2xVbmlmb3JtM2l2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7
CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00aShHQ0dMaW50IGxv
Y2F0aW9uLCBHQ0dMaW50IHYwLCBHQ0dMaW50IHYxLCBHQ0dMaW50IHYyLCBHQ0dMaW50IHYzKQog
ewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQorICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIDo6Z2xVbmlmb3JtNGkobG9jYXRpb24sIHYwLCB2
MSwgdjIsIHYzKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRp
dihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMc2l6ZWkgc2l6ZSwgY29uc3QgR0NHTGludCogYXJyYXkp
CiB7CiAgICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDQuCi0g
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCisgICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CiAgICAgOjpnbFVuaWZvcm00aXYobG9jYXRpb24sIHNpemUsIGFy
cmF5KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDJm
dihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMc2l6ZWkgc2l6ZSwgR0NHTGJvb2xlYW4gdHJhbnNwb3Nl
LCBjb25zdCBHQ0dMZmxvYXQqIGFycmF5KQogewogICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMg
dG8gYmUgYSBtdWx0aXBsZSBvZiA0LgotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0g
ICAgICAgIHJldHVybjsKLQorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIDo6Z2xVbmlm
b3JtTWF0cml4MmZ2KGxvY2F0aW9uLCBzaXplLCB0cmFuc3Bvc2UsIGFycmF5KTsKIH0KIAogdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDNmdihHQ0dMaW50IGxvY2F0
aW9uLCBHQ0dMc2l6ZWkgc2l6ZSwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHQ0dMZmxv
YXQqIGFycmF5KQogewogICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBs
ZSBvZiA5LgotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsK
LQorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIDo6Z2xVbmlmb3JtTWF0cml4M2Z2KGxv
Y2F0aW9uLCBzaXplLCB0cmFuc3Bvc2UsIGFycmF5KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDRmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMc2l6ZWkg
c2l6ZSwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHQ0dMZmxvYXQqIGFycmF5KQogewog
ICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAxNi4KLSAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KKyAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKICAgICA6OmdsVW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgc2l6ZSwg
dHJhbnNwb3NlLCBhcnJheSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVz
ZVByb2dyYW0oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtKQogewotICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQorICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwogICAgIDo6Z2xVc2VQcm9ncmFtKHByb2dyYW0pOwogfQogCkBAIC0xNTgwLDk3ICsxMzk4LDcz
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZhbGlkYXRlUHJvZ3JhbShQbGF0Zm9y
bUdMT2JqZWN0IHByb2dyYW0pCiB7CiAgICAgQVNTRVJUKHByb2dyYW0pOwogCi0gICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCisgICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CiAgICAgOjpnbFZhbGlkYXRlUHJvZ3JhbShwcm9ncmFtKTsKIH0KIAogdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMWYoR0NHTHVpbnQgaW5kZXgsIEdD
R0xmbG9hdCB2MCkKIHsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICBy
ZXR1cm47Ci0KKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICA6OmdsVmVydGV4QXR0cmli
MWYoaW5kZXgsIHYwKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4
QXR0cmliMWZ2KEdDR0x1aW50IGluZGV4LCBjb25zdCBHQ0dMZmxvYXQqIGFycmF5KQogewotICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQorICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOwogICAgIDo6Z2xWZXJ0ZXhBdHRyaWIxZnYoaW5kZXgsIGFycmF5KTsK
IH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMmYoR0NHTHVp
bnQgaW5kZXgsIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYxKQogewotICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQorICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwogICAgIDo6Z2xWZXJ0ZXhBdHRyaWIyZihpbmRleCwgdjAsIHYxKTsKIH0KIAogdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMmZ2KEdDR0x1aW50IGluZGV4LCBj
b25zdCBHQ0dMZmxvYXQqIGFycmF5KQogewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
Ci0gICAgICAgIHJldHVybjsKLQorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIDo6Z2xW
ZXJ0ZXhBdHRyaWIyZnYoaW5kZXgsIGFycmF5KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dmVydGV4QXR0cmliM2YoR0NHTHVpbnQgaW5kZXgsIEdDR0xmbG9hdCB2MCwgR0NH
TGZsb2F0IHYxLCBHQ0dMZmxvYXQgdjIpCiB7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKLSAgICAgICAgcmV0dXJuOwotCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgOjpn
bFZlcnRleEF0dHJpYjNmKGluZGV4LCB2MCwgdjEsIHYyKTsKIH0KIAogdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliM2Z2KEdDR0x1aW50IGluZGV4LCBjb25zdCBHQ0dM
ZmxvYXQqIGFycmF5KQogewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAg
IHJldHVybjsKLQorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIDo6Z2xWZXJ0ZXhBdHRy
aWIzZnYoaW5kZXgsIGFycmF5KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dmVydGV4QXR0cmliNGYoR0NHTHVpbnQgaW5kZXgsIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYx
LCBHQ0dMZmxvYXQgdjIsIEdDR0xmbG9hdCB2MykKIHsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQotICAgICAgICByZXR1cm47Ci0KKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAg
ICA6OmdsVmVydGV4QXR0cmliNGYoaW5kZXgsIHYwLCB2MSwgdjIsIHYzKTsKIH0KIAogdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliNGZ2KEdDR0x1aW50IGluZGV4LCBj
b25zdCBHQ0dMZmxvYXQqIGFycmF5KQogewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
Ci0gICAgICAgIHJldHVybjsKLQorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIDo6Z2xW
ZXJ0ZXhBdHRyaWI0ZnYoaW5kZXgsIGFycmF5KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dmVydGV4QXR0cmliUG9pbnRlcihHQ0dMdWludCBpbmRleCwgR0NHTGludCBzaXpl
LCBHQ0dMZW51bSB0eXBlLCBHQ0dMYm9vbGVhbiBub3JtYWxpemVkLCBHQ0dMc2l6ZWkgc3RyaWRl
LCBHQ0dMaW50cHRyIG9mZnNldCkKIHsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQot
ICAgICAgICByZXR1cm47Ci0KKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICA6OmdsVmVy
dGV4QXR0cmliUG9pbnRlcihpbmRleCwgc2l6ZSwgdHlwZSwgbm9ybWFsaXplZCwgc3RyaWRlLCBy
ZWludGVycHJldF9jYXN0PEdMdm9pZCo+KHN0YXRpY19jYXN0PGludHB0cl90PihvZmZzZXQpKSk7
CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZpZXdwb3J0KEdDR0xpbnQgeCwg
R0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCiB7Ci0gICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCisgICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CiAgICAgOjpnbFZpZXdwb3J0KHgsIHksIHdpZHRoLCBoZWlnaHQpOwogfQog
CiBQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVWZXJ0ZXhB
cnJheSgpCiB7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJu
IDA7Ci0KKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBHTHVpbnQgYXJyYXkgPSAwOwog
I2lmICghVVNFKE9QRU5HTF9FUykgJiYgKFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oV0lOKSkp
IHx8IFBMQVRGT1JNKENPQ09BKQogICAgIDo6Z2xHZW5WZXJ0ZXhBcnJheXMoMSwgJmFycmF5KTsK
QEAgLTE2ODMsOSArMTQ3Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0
ZVZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3QgYXJyYXkpCiAgICAgaWYgKCFhcnJheSkKICAg
ICAgICAgcmV0dXJuOwogICAgIAotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAg
ICAgIHJldHVybjsKLQorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogI2lmICghVVNFKE9QRU5H
TF9FUykgJiYgKFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oV0lOKSkpIHx8IFBMQVRGT1JNKENP
Q09BKQogICAgIDo6Z2xEZWxldGVWZXJ0ZXhBcnJheXMoMSwgJmFycmF5KTsKICNlbmRpZgpAQCAt
MTY5Niw5ICsxNDg4LDcgQEAgR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omlz
VmVydGV4QXJyYXkoUGxhdGZvcm1HTE9iamVjdCBhcnJheSkKICAgICBpZiAoIWFycmF5KQogICAg
ICAgICByZXR1cm4gR0xfRkFMU0U7CiAgICAgCi0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKLSAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwotCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CiAjaWYgKCFVU0UoT1BFTkdMX0VTKSAmJiAoUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShXSU4p
KSkgfHwgUExBVEZPUk0oQ09DT0EpCiAgICAgcmV0dXJuIDo6Z2xJc1ZlcnRleEFycmF5KGFycmF5
KTsKICNlbmRpZgpAQCAtMTcwNyw5ICsxNDk3LDcgQEAgR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmlzVmVydGV4QXJyYXkoUGxhdGZvcm1HTE9iamVjdCBhcnJheSkKIAogdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmpl
Y3QgYXJyYXkpCiB7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0
dXJuOwotCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAjaWYgKCFVU0UoT1BFTkdMX0VTKSAm
JiAoUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShXSU4pKSkgfHwgUExBVEZPUk0oQ09DT0EpCiAg
ICAgOjpnbEJpbmRWZXJ0ZXhBcnJheShhcnJheSk7CiAjZWxzZQpAQCAtMTcxOSwyNSArMTUwNywx
OSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kVmVydGV4QXJyYXkoUGxhdGZv
cm1HTE9iamVjdCBhcnJheSkKIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0Qm9v
bGVhbnYoR0NHTGVudW0gcG5hbWUsIEdDR0xib29sZWFuKiB2YWx1ZSkKIHsKLSAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KKyAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKICAgICA6OmdsR2V0Qm9vbGVhbnYocG5hbWUsIHZhbHVlKTsKIH0KIAogdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QnVmZmVyUGFyYW1ldGVyaXYoR0NHTGVudW0gdGFy
Z2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTGludCogdmFsdWUpCiB7Ci0gICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCisgICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CiAgICAgOjpnbEdldEJ1ZmZlclBhcmFtZXRlcml2KHRhcmdldCwgcG5hbWUsIHZhbHVlKTsK
IH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0RmxvYXR2KEdDR0xlbnVtIHBu
YW1lLCBHQ0dMZmxvYXQqIHZhbHVlKQogewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
Ci0gICAgICAgIHJldHVybjsKLQorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIDo6Z2xH
ZXRGbG9hdHYocG5hbWUsIHZhbHVlKTsKIH0KIApAQCAtMTc0NSw5ICsxNTI3LDcgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZWdlcmlfdihHQ0dMZW51bSBwbmFtZSwgR0NH
THVpbnQgaW5kZXgsIEdDR0wKIHsKICAgICBVTlVTRURfUEFSQU0ocG5hbWUpOwogICAgIFVOVVNF
RF9QQVJBTShpbmRleCk7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAg
cmV0dXJuOwotCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgKnZhbHVlID0gMDsKICAg
ICAvLyBGSVhNRSAxNDExNzg6IEJlZm9yZSBlbmFibGluZyB0aGlzIHdlIG11c3QgZmlyc3Qgc3dp
dGNoIG92ZXIgdG8gdXNpbmcgZ2wzLmggYW5kIGNyZWF0aW5nIGFuZCBpbml0aWFsaW5nIHRoZSBX
ZWJHTDIgY29udGV4dCB1c2luZyBPcGVuR0wgRVMgMy4wLgogICAgIC8vIDo6Z2xHZXRJbnRlZ2Vy
aV92KHBuYW1lLCBpbmRleCwgdmFsdWUpOwpAQCAtMTc1Niw5ICsxNTM2LDcgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZWdlcmlfdihHQ0dMZW51bSBwbmFtZSwgR0NHTHVp
bnQgaW5kZXgsIEdDR0wKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXI2
NHYoR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQ2NCogdmFsdWUpCiB7CiAgICAgVU5VU0VEX1BBUkFN
KHBuYW1lKTsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47
Ci0KKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICAqdmFsdWUgPSAwOwogICAgIC8vIEZJ
WE1FIDE0MTE3ODogQmVmb3JlIGVuYWJsaW5nIHRoaXMgd2UgbXVzdCBmaXJzdCBzd2l0Y2ggb3Zl
ciB0byB1c2luZyBnbDMuaCBhbmQgY3JlYXRpbmcgYW5kIGluaXRpYWxpbmcgdGhlIFdlYkdMMiBj
b250ZXh0IHVzaW5nIE9wZW5HTCBFUyAzLjAuCiAgICAgLy8gOjpnbEdldEludGVnZXI2NHYocG5h
bWUsIHZhbHVlKTsKQEAgLTE3NjgsOSArMTU0Niw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmdldEludGVnZXI2NGlfdihHQ0dMZW51bSBwbmFtZSwgR0NHTHVpbnQgaW5kZXgsIEdD
CiB7CiAgICAgVU5VU0VEX1BBUkFNKHBuYW1lKTsKICAgICBVTlVTRURfUEFSQU0oaW5kZXgpOwot
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQorICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwogICAgICp2YWx1ZSA9IDA7CiAgICAgLy8gRklYTUUgMTQxMTc4
OiBCZWZvcmUgZW5hYmxpbmcgdGhpcyB3ZSBtdXN0IGZpcnN0IHN3aXRjaCBvdmVyIHRvIHVzaW5n
IGdsMy5oIGFuZCBjcmVhdGluZyBhbmQgaW5pdGlhbGluZyB0aGUgV2ViR0wyIGNvbnRleHQgdXNp
bmcgT3BlbkdMIEVTIDMuMC4KICAgICAvLyA6OmdsR2V0SW50ZWdlcjY0aV92KHBuYW1lLCBpbmRl
eCwgdmFsdWUpOwpAQCAtMTc3OCw5ICsxNTU0LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0SW50ZWdlcjY0aV92KEdDR0xlbnVtIHBuYW1lLCBHQ0dMdWludCBpbmRleCwgR0MK
IAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50
UGFyYW1ldGVyaXYoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50LCBHQ0dMZW51
bSBwbmFtZSwgR0NHTGludCogdmFsdWUpCiB7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKLSAgICAgICAgcmV0dXJuOwotCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgaWYg
KGF0dGFjaG1lbnQgPT0gREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UKQogICAgICAgICBhdHRhY2ht
ZW50ID0gREVQVEhfQVRUQUNITUVOVDsgLy8gT3IgU1RFTkNJTF9BVFRBQ0hNRU5ULCBlaXRoZXIg
d29ya3MuCiAgICAgOjpnbEdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2RVhUKHRh
cmdldCwgYXR0YWNobWVudCwgcG5hbWUsIHZhbHVlKTsKQEAgLTE3ODgsOSArMTU2Miw3IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFt
ZXRlcml2KEdDR0xlbnVtIHRhcmdlCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dFByb2dyYW1pdihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0xlbnVtIHBuYW1lLCBHQ0dM
aW50KiB2YWx1ZSkKIHsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICBy
ZXR1cm47Ci0KKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICA6OmdsR2V0UHJvZ3JhbWl2
KHByb2dyYW0sIHBuYW1lLCB2YWx1ZSk7CiB9CiAKQEAgLTE4MDAsOSArMTU3Miw3IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldE5vbkJ1aWx0SW5BY3RpdmVTeW1ib2xDb3VudChQ
bGF0Zm9ybUdMT2JqZWN0IHByCiAgICAgaWYgKCF2YWx1ZSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCisgICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CiAgICAgY29uc3QgYXV0byYgcmVzdWx0ID0gbV9zaGFkZXJQcm9n
cmFtU3ltYm9sQ291bnRNYXAuZmluZChwcm9ncmFtKTsKICAgICBpZiAocmVzdWx0ICE9IG1fc2hh
ZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLmVuZCgpKSB7CiAgICAgICAgICp2YWx1ZSA9IHJlc3Vs
dC0+dmFsdWUuY291bnRGb3JUeXBlKHBuYW1lKTsKQEAgLTE4ODAsOSArMTY1MCw3IEBAIFN0cmlu
ZyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UHJvZ3JhbUluZm9Mb2coUGxhdGZvcm1HTE9i
amVjdCBwcm9ncmFtKQogewogICAgIEFTU0VSVChwcm9ncmFtKTsKIAotICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQorICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOwogICAgIEdMaW50IGxlbmd0aCA9IDA7CiAgICAgOjpnbEdldFByb2dyYW1p
dihwcm9ncmFtLCBHTF9JTkZPX0xPR19MRU5HVEgsICZsZW5ndGgpOwogICAgIGlmICghbGVuZ3Ro
KQpAQCAtMTkwMSw5ICsxNjY5LDcgQEAgU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpn
ZXRQcm9ncmFtSW5mb0xvZyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2KEdDR0xlbnVtIHRh
cmdldCwgR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQqIHZhbHVlKQogewotICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQorICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwogICAgIDo6Z2xHZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdkVYVCh0YXJnZXQsIHBuYW1l
LCB2YWx1ZSk7CiB9CiAKQEAgLTE5MTEsOSArMTY3Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldFNoYWRlcml2KFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyLCBHQ0dMZW51bSBw
bmFtCiB7CiAgICAgQVNTRVJUKHNoYWRlcik7CiAKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQotICAgICAgICByZXR1cm47Ci0KKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKIAogICAg
IGNvbnN0IGF1dG8mIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKICAg
ICAKQEAgLTE5NDgsOCArMTcxMiw3IEBAIFN0cmluZyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0U2hhZGVySW5mb0xvZyhQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKIHsKICAgICBBU1NFUlQo
c2hhZGVyKTsKIAotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVy
biBTdHJpbmcoKTsKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKIAogICAgIGNvbnN0IGF1dG8m
IHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKICAgICBpZiAocmVzdWx0
ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQpAQCAtMTk3Niw4ICsxNzM5LDcgQEAgU3RyaW5n
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTaGFkZXJTb3VyY2UoUGxhdGZvcm1HTE9iamVj
dCBzaGFkZXIpCiB7CiAgICAgQVNTRVJUKHNoYWRlcik7CiAKLSAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CiAKICAgICBjb25zdCBhdXRvJiByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5k
KHNoYWRlcik7CiAgICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkKQEAg
LTE5ODgsMzMgKzE3NTAsMjUgQEAgU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRT
aGFkZXJTb3VyY2UoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCiAKIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldFRleFBhcmFtZXRlcmZ2KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0g
cG5hbWUsIEdDR0xmbG9hdCogdmFsdWUpCiB7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKLSAgICAgICAgcmV0dXJuOwotCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgOjpn
bEdldFRleFBhcmFtZXRlcmZ2KHRhcmdldCwgcG5hbWUsIHZhbHVlKTsKIH0KIAogdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VGV4UGFyYW1ldGVyaXYoR0NHTGVudW0gdGFyZ2V0LCBH
Q0dMZW51bSBwbmFtZSwgR0NHTGludCogdmFsdWUpCiB7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAg
ICAgOjpnbEdldFRleFBhcmFtZXRlcml2KHRhcmdldCwgcG5hbWUsIHZhbHVlKTsKIH0KIAogdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybWZ2KFBsYXRmb3JtR0xPYmplY3Qg
cHJvZ3JhbSwgR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0KiB2YWx1ZSkKIHsKLSAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KKyAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKICAgICA6OmdsR2V0VW5pZm9ybWZ2KHByb2dyYW0sIGxvY2F0aW9uLCB2YWx1
ZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1pdihQbGF0
Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0xpbnQgbG9jYXRpb24sIEdDR0xpbnQqIHZhbHVlKQog
ewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQorICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIDo6Z2xHZXRVbmlmb3JtaXYocHJvZ3JhbSwgbG9j
YXRpb24sIHZhbHVlKTsKIH0KIApAQCAtMjAyOSw4ICsxNzgzLDcgQEAgR0NHTGludCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUxvY2F0aW9uKFBsYXRmb3JtR0xPYmplY3QgcHJv
Z3JhbSwgY28KIHsKICAgICBBU1NFUlQocHJvZ3JhbSk7CiAKLSAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gLTE7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CiAKICAgICBTdHJpbmcgbWFwcGVkTmFtZSA9IG1hcHBlZFN5bWJvbE5hbWUocHJvZ3JhbSwgU0hB
REVSX1NZTUJPTF9UWVBFX1VOSUZPUk0sIG5hbWUpOwogICAgIExPRyhXZWJHTCwgIjo6Z2V0VW5p
Zm9ybUxvY2F0aW9uIGlzIG1hcHBpbmcgJXMgdG8gJXMiLCBuYW1lLnV0ZjgoKS5kYXRhKCksIG1h
cHBlZE5hbWUudXRmOCgpLmRhdGEoKSk7CkBAIC0yMDM5LDI0ICsxNzkyLDE5IEBAIEdDR0xpbnQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1Mb2NhdGlvbihQbGF0Zm9ybUdMT2Jq
ZWN0IHByb2dyYW0sIGNvCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFZlcnRl
eEF0dHJpYmZ2KEdDR0x1aW50IGluZGV4LCBHQ0dMZW51bSBwbmFtZSwgR0NHTGZsb2F0KiB2YWx1
ZSkKIHsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0K
KyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICA6OmdsR2V0VmVydGV4QXR0cmliZnYoaW5k
ZXgsIHBuYW1lLCB2YWx1ZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dFZlcnRleEF0dHJpYml2KEdDR0x1aW50IGluZGV4LCBHQ0dMZW51bSBwbmFtZSwgR0NHTGludCog
dmFsdWUpCiB7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJu
OwotCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgOjpnbEdldFZlcnRleEF0dHJpYml2
KGluZGV4LCBwbmFtZSwgdmFsdWUpOwogfQogCiBHQ0dMc2l6ZWlwdHIgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldFZlcnRleEF0dHJpYk9mZnNldChHQ0dMdWludCBpbmRleCwgR0NHTGVudW0g
cG5hbWUpCiB7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJu
IDA7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAKICAgICBHTHZvaWQqIHBvaW50ZXIgPSAw
OwogICAgIDo6Z2xHZXRWZXJ0ZXhBdHRyaWJQb2ludGVydihpbmRleCwgcG5hbWUsICZwb2ludGVy
KTsKQEAgLTIwNjUsOCArMTgxMyw3IEBAIEdDR0xzaXplaXB0ciBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0VmVydGV4QXR0cmliT2Zmc2V0KEdDR0x1aW50IGluZGV4LCBHQ0dMCiAKIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBH
Q0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmYsIEdDR0xpbnQgeW9mZiwgR0NHTHNpemVpIHdpZHRo
LCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIGNvbnN0
IHZvaWQqIHBpeGVscykKIHsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAg
ICByZXR1cm47CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAKICNpZiAhVVNFKE9QRU5HTF9F
UykKICAgICBpZiAodHlwZSA9PSBIQUxGX0ZMT0FUX09FUykKQEAgLTIwOTcsMjcgKzE4NDQsMjEg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3ViSW1hZ2UyRChHQ0dMZW51bSB0
YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0wKIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Y29tcHJlc3NlZFRleEltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBH
Q0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0
LCBHQ0dMaW50IGJvcmRlciwgR0NHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCogZGF0YSkK
IHsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KKyAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICA6OmdsQ29tcHJlc3NlZFRleEltYWdlMkQodGFy
Z2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgaW1hZ2VT
aXplLCBkYXRhKTsKICAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUuY3Vy
cmVudEJvdW5kVGV4dHVyZSgpKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Y29tcHJlc3NlZFRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBH
Q0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6
ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZv
aWQqIGRhdGEpCiB7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0
dXJuOwotCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgOjpnbENvbXByZXNzZWRUZXhT
dWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQs
IGZvcm1hdCwgaW1hZ2VTaXplLCBkYXRhKTsKICAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQu
YWRkKG1fc3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsKIH0KIAogUGxhdGZvcm1HTE9iamVj
dCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlQnVmZmVyKCkKIHsKLSAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gMDsKLQorICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOwogICAgIEdMdWludCBvID0gMDsKICAgICBnbEdlbkJ1ZmZlcnMoMSwgJm8pOwog
ICAgIHJldHVybiBvOwpAQCAtMjEyNSw5ICsxODY2LDcgQEAgUGxhdGZvcm1HTE9iamVjdCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlQnVmZmVyKCkKIAogUGxhdGZvcm1HTE9iamVjdCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlRnJhbWVidWZmZXIoKQogewotICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiAwOwotCisgICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CiAgICAgR0x1aW50IG8gPSAwOwogICAgIGdsR2VuRnJhbWVidWZmZXJzRVhU
KDEsICZvKTsKICAgICByZXR1cm4gbzsKQEAgLTIxMzUsMTcgKzE4NzQsMTMgQEAgUGxhdGZvcm1H
TE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlRnJhbWVidWZmZXIoKQogCiBQ
bGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVQcm9ncmFtKCkK
IHsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gMDsKLQor
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIHJldHVybiBnbENyZWF0ZVByb2dyYW0oKTsK
IH0KIAogUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUmVu
ZGVyYnVmZmVyKCkKIHsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICBy
ZXR1cm4gMDsKLQorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIEdMdWludCBvID0gMDsK
ICAgICBnbEdlblJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm8pOwogICAgIHJldHVybiBvOwpAQCAtMjE1
MywxNyArMTg4OCwxMyBAQCBQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpjcmVhdGVSZW5kZXJidWZmZXIoKQogCiBQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjcmVhdGVTaGFkZXIoR0NHTGVudW0gdHlwZSkKIHsKLSAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gMDsKLQorICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOwogICAgIHJldHVybiBnbENyZWF0ZVNoYWRlcigodHlwZSA9PSBGUkFHTUVOVF9TSEFE
RVIpID8gR0xfRlJBR01FTlRfU0hBREVSIDogR0xfVkVSVEVYX1NIQURFUik7CiB9CiAKIFBsYXRm
b3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRleHR1cmUoKQogewot
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiAwOwotCisgICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgR0x1aW50IG8gPSAwOwogICAgIGdsR2VuVGV4dHVy
ZXMoMSwgJm8pOwogICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQobyk7CkBAIC0yMTcy
LDE3ICsxOTAzLDEzIEBAIFBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNyZWF0ZVRleHR1cmUoKQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVC
dWZmZXIoUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCiB7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAg
ICAgZ2xEZWxldGVCdWZmZXJzKDEsICZidWZmZXIpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpkZWxldGVGcmFtZWJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0IGZyYW1lYnVmZmVy
KQogewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQor
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIEFTU0VSVChtX3N0YXRlLmJvdW5kUmVhZEZC
TyA9PSBtX3N0YXRlLmJvdW5kRHJhd0ZCTyk7CiAgICAgaWYgKGZyYW1lYnVmZmVyID09IG1fc3Rh
dGUuYm91bmREcmF3RkJPKSB7CiAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgZnJhbWVidWZmZXIg
aXMgbm90IGdvaW5nIHRvIGJlIHVzZWQgZm9yIGRyYXdpbmcKQEAgLTIxOTQsMzQgKzE5MjEsMjYg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlRnJhbWVidWZmZXIoUGxhdGZv
cm1HTE9iamVjdCBmcmFtZWJ1ZmZlcikKIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
ZGVsZXRlUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCiB7Ci0gICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCisgICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CiAgICAgbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAucmVtb3ZlKHByb2dyYW0p
OwogICAgIGdsRGVsZXRlUHJvZ3JhbShwcm9ncmFtKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6ZGVsZXRlUmVuZGVyYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgcmVuZGVyYnVm
ZmVyKQogewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsK
LQorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIGdsRGVsZXRlUmVuZGVyYnVmZmVyc0VY
VCgxLCAmcmVuZGVyYnVmZmVyKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
ZGVsZXRlU2hhZGVyKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQogewotICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQorICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwogICAgIGdsRGVsZXRlU2hhZGVyKHNoYWRlcik7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmRlbGV0ZVRleHR1cmUoUGxhdGZvcm1HTE9iamVjdCB0ZXh0dXJlKQogewot
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQorICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwogICAgIG1fc3RhdGUuYm91bmRUZXh0dXJlTWFwLnJlbW92ZUlm
KFt0ZXh0dXJlXSAoYXV0byYga2V5VmFsdWUpIHsKICAgICAgICAgcmV0dXJuIGtleVZhbHVlLnZh
bHVlLmZpcnN0ID09IHRleHR1cmU7CiAgICAgfSk7CkBAIC0yMjc3LDkgKzE5OTYsNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkaXNwYXRjaENvbnRleHRDaGFuZ2VkTm90aWZpY2F0
aW9uKCkKIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4SW1hZ2UyRERpcmVjdChH
Q0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBH
Q0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyLCBHQ0dMZW51
bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscykKIHsKLSAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KKyAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKICAgICA6OmdsVGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZv
cm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7CiAgICAg
bV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRlLmN1cnJlbnRCb3VuZFRleHR1cmUo
KSk7CiB9CkBAIC0yMzA0LDkgKzIwMjEsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp2ZXJ0ZXhBdHRyaWJEaXZpc29yKEdDR0x1aW50IGluZGV4LCBHQ0dMdWludCBkaXZpcwogI2lm
IEhBVkUoT1BFTkdMXzQpICYmIEVOQUJMRShXRUJHTDIpCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpwcmltaXRpdmVSZXN0YXJ0SW5kZXgoR0NHTHVpbnQgaW5kZXgpCiB7Ci0gICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCisgICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CiAgICAgOjpnbFByaW1pdGl2ZVJlc3RhcnRJbmRleChpbmRleCk7CiB9CiAj
ZW5kaWYKQEAgLTIzMzIsOSArMjA0Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50cHRyIGRzdEJ5dGVPCiAjaWYg
SEFWRShPUEVOR0xfNCkgfHwgSEFWRShPUEVOR0xfRVNfMykKIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNvcHlCdWZmZXJTdWJEYXRhKEdDR0xlbnVtIHJlYWRUYXJnZXQsIEdDR0xlbnVt
IHdyaXRlVGFyZ2V0LCBHQ0dMaW50cHRyIHJlYWRPZmZzZXQsIEdDR0xpbnRwdHIgd3JpdGVPZmZz
ZXQsIEdDR0xzaXplaXB0ciBzaXplKQogewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
Ci0gICAgICAgIHJldHVybjsKLQorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIDo6Z2xD
b3B5QnVmZmVyU3ViRGF0YShyZWFkVGFyZ2V0LCB3cml0ZVRhcmdldCwgcmVhZE9mZnNldCwgd3Jp
dGVPZmZzZXQsIHNpemUpOwogfQogI2Vsc2UKQEAgLTIzNTUsMTcgKzIwNjgsMTMgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QnVmZmVyU3ViRGF0YShHQ0dMZW51bSB0YXJnZXQs
IEdDR0xpbnRwdHIgc3JjQnkKICNpZiBIQVZFKE9QRU5HTF80KSB8fCBIQVZFKE9QRU5HTF9FU18z
KQogdm9pZCogR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om1hcEJ1ZmZlclJhbmdlKEdDR0xlbnVt
IHRhcmdldCwgR0NHTGludHB0ciBvZmZzZXQsIEdDR0xzaXplaXB0ciBsZW5ndGgsIEdDR0xiaXRm
aWVsZCBhY2Nlc3MpCiB7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0KKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICByZXR1cm4g
OjpnbE1hcEJ1ZmZlclJhbmdlKHRhcmdldCwgb2Zmc2V0LCBsZW5ndGgsIGFjY2Vzcyk7CiB9CiAK
IEdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bm1hcEJ1ZmZlcihHQ0dMZW51
bSB0YXJnZXQpCiB7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0
dXJuIEdMX0ZBTFNFOwotCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgcmV0dXJuIDo6
Z2xVbm1hcEJ1ZmZlcih0YXJnZXQpOwogfQogI2Vsc2UKQEAgLTI0MzAsOSArMjEzOSw3IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRCdWZmZXIoR0NHTGVudW0gc3JjKQogdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZXJuYWxmb3JtYXRpdihHQ0dMZW51bSB0
YXJnZXQsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTHNpemVp
IGJ1ZlNpemUsIEdDR0xpbnQqIHBhcmFtcykKIHsKICNpZiBVU0UoT1BFTkdMX0VTKQotICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQorICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOwogICAgIDo6Z2xHZXRJbnRlcm5hbGZvcm1hdGl2KHRhcmdldCwgaW50ZXJu
YWxmb3JtYXQsIHBuYW1lLCBidWZTaXplLCBwYXJhbXMpOwogI2Vsc2UKICAgICBVTlVTRURfUEFS
QU0odGFyZ2V0KTsKQEAgLTI0NDUsMjYgKzIxNTIsMjAgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0SW50ZXJuYWxmb3JtYXRpdihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGlu
dGUKIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVuZGVyYnVmZmVyU3RvcmFnZU11
bHRpc2FtcGxlKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVpIHNhbXBsZXMsIEdDR0xlbnVtIGlu
dGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCiB7Ci0gICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCisgICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CiAgICAgOjpnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSh0
YXJnZXQsIHNhbXBsZXMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKIH0KIAogdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3RvcmFnZTJEKEdDR0xlbnVtIHRhcmdldCwg
R0NHTHNpemVpIGxldmVscywgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0
aCwgR0NHTHNpemVpIGhlaWdodCkKIHsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQot
ICAgICAgICByZXR1cm47Ci0KKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICA6OmdsVGV4
U3RvcmFnZTJEKHRhcmdldCwgbGV2ZWxzLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7
CiAgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRlLmN1cnJlbnRCb3VuZFRl
eHR1cmUoKSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN0b3JhZ2Uz
RChHQ0dMZW51bSB0YXJnZXQsIEdDR0xzaXplaSBsZXZlbHMsIEdDR0xlbnVtIGludGVybmFsZm9y
bWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xzaXplaSBkZXB0aCkK
IHsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KKyAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICA6OmdsVGV4U3RvcmFnZTNEKHRhcmdldCwgbGV2
ZWxzLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZGVwdGgpOwogICAgIG1fc3RhdGUu
dGV4dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOwogfQpA
QCAtMjkyOSw4ICsyNjMwLDcgQEAgVmVjdG9yPEdDR0x1aW50PiBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0VW5pZm9ybUluZGljZXMoUGxhdGZvcm1HTE9iamVjdCBwcm8KIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1zKFBsYXRmb3JtR0xPYmplY3QgcHJv
Z3JhbSwgY29uc3QgVmVjdG9yPEdDR0x1aW50PiYgdW5pZm9ybUluZGljZXMsIEdDR0xlbnVtIHBu
YW1lLCBWZWN0b3I8R0NHTGludD4mIHBhcmFtcykKIHsKICAgICBBU1NFUlQocHJvZ3JhbSk7Ci0g
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOworICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOwogCiAgICAgOjpnbEdldEFjdGl2ZVVuaWZvcm1zaXYocHJvZ3JhbSwg
dW5pZm9ybUluZGljZXMuc2l6ZSgpLCB1bmlmb3JtSW5kaWNlcy5kYXRhKCksIHBuYW1lLCBwYXJh
bXMuZGF0YSgpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTEVTLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTEVTLmNwcApp
bmRleCA2MGZkZmM2NWY4NzM5NTg5NTc5NWE4NGVmMWUwOWFiZjZkN2FhODQzLi45Mzg5NWU1NmIw
YzVhNWJkODRjYjBhYTQ5ODY4MjBhYTY3MTE0ODE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xFUy5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMRVMuY3BwCkBAIC00Miw5ICs0Miw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFBpeGVscyhHQ0dMaW50IHgsIEdD
R0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3Jt
YXQsIEdDR0xlbnVtIHR5cGUsIHZvaWQqIGRhdGEpCiB7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAK
ICAgICBhdXRvIGF0dHJpYnV0ZXMgPSBjb250ZXh0QXR0cmlidXRlcygpOwogCkBAIC0xOTAsMTcg
KzE4OCwxMyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZXNvbHZlTXVsdGlzYW1w
bGluZ0lmTmVjZXNzYXJ5KGNvbnN0IEludFJlY3QmKQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpyZW5kZXJidWZmZXJTdG9yYWdlKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gaW50
ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKIHsKLSAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KKyAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKICAgICA6OmdsUmVuZGVyYnVmZmVyU3RvcmFnZSh0YXJnZXQsIGludGVy
bmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0SW50ZWdlcnYoR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQqIHZhbHVlKQogewotICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQorICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOwogICAgIDo6Z2xHZXRJbnRlZ2VydihwbmFtZSwgdmFsdWUpOwogfQog
CkBAIC0yMDksOSArMjAzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hh
ZGVyUHJlY2lzaW9uRm9ybWF0KEdDR0xlbnVtIHNoYWRlclR5cGUsIEdDR0wKICAgICBBU1NFUlQo
cmFuZ2UpOwogICAgIEFTU0VSVChwcmVjaXNpb24pOwogCi0gICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAg
ICAgOjpnbEdldFNoYWRlclByZWNpc2lvbkZvcm1hdChzaGFkZXJUeXBlLCBwcmVjaXNpb25UeXBl
LCByYW5nZSwgcHJlY2lzaW9uKTsKIH0KIApAQCAtMjQwLDE3ICsyMzIsMTMgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dmFsaWRhdGVBdHRyaWJ1dGVzKCkKIAogdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6ZGVwdGhSYW5nZShHQ0dMY2xhbXBmIHpOZWFyLCBHQ0dMY2xhbXBm
IHpGYXIpCiB7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJu
OwotCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgOjpnbERlcHRoUmFuZ2VmKHpOZWFy
LCB6RmFyKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJEZXB0aChH
Q0dMY2xhbXBmIGRlcHRoKQogewotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAg
ICAgIHJldHVybjsKLQorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIDo6Z2xDbGVhckRl
cHRoZihkZXB0aCk7CiB9CiAKQEAgLTI5MCw5ICsyNzgsNyBAQCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0woR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVz
IGF0dAogICAgICwgbV9wcml2YXRlKG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0R0xPcGVuR0xQ
cml2YXRlPih0aGlzLCBkZXN0aW5hdGlvbikpCiB7CiAgICAgQVNTRVJUX1VOVVNFRChzaGFyZWRD
b250ZXh0LCAhc2hhcmVkQ29udGV4dCk7Ci0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
LSAgICAgICAgcmV0dXJuOwotCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgCiAgICAg
dmFsaWRhdGVBdHRyaWJ1dGVzKCk7CiAgICAgYXR0cmlidXRlcyA9IGNvbnRleHRBdHRyaWJ1dGVz
KCk7IC8vIFRoZXkgbWF5IGhhdmUgY2hhbmdlZCBkdXJpbmcgdmFsaWRhdGlvbi4KQEAgLTM1Nyw5
ICszNDMsNyBAQCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0woR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzIGF0dAogCiBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6fkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKCkKIHsKLSAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
ICAgICA6OmdsRGVsZXRlVGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7CiAKICAgICBhdXRvIGF0dHJp
YnV0ZXMgPSBjb250ZXh0QXR0cmlidXRlcygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NDb250
ZXh0R0xUZXh0dXJlTWFwcGVyLmNwcAppbmRleCA4OWQxNGQyOTU2YjcyZmE0MmVlOTgzNjJhYjgw
ZDJiYjMwYWIzZWQyLi5jMGEyZWNiODc0N2MxMThmMDcwNWRmOTE4OThkNDQ5ODJlOTBmMmE3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhp
Y3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyLmNwcApAQCAt
MTM5LDggKzEzOSw3IEBAIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTChHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMgYXR0CiAjZWxzZQogICAgIG1fdGV4
bWFwTGF5ZXIgPSBXVEY6Om1ha2VVbmlxdWU8VGV4dHVyZU1hcHBlckdDR0xQbGF0Zm9ybUxheWVy
PigqdGhpcywgZGVzdGluYXRpb24pOwogI2VuZGlmCi0gICAgYm9vbCBzdWNjZXNzID0gbWFrZUNv
bnRleHRDdXJyZW50KCk7Ci0gICAgQVNTRVJUX1VOVVNFRChzdWNjZXNzLCBzdWNjZXNzKTsKKyAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKIAogICAgIHZhbGlkYXRlQXR0cmlidXRlcygpOwogICAg
IGF0dHJpYnV0ZXMgPSBjb250ZXh0QXR0cmlidXRlcygpOyAvLyBUaGV5IG1heSBoYXZlIGNoYW5n
ZWQgZHVyaW5nIHZhbGlkYXRpb24uCkBAIC0yMTQsOCArMjEzLDcgQEAgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKEdyYXBoaWNzQ29udGV4dEdMQXR0cmli
dXRlcyBhdHQKICAgICBtX3RleG1hcExheWVyID0gbWFrZVVuaXF1ZTxUZXh0dXJlTWFwcGVyR0NH
TFBsYXRmb3JtTGF5ZXI+KCp0aGlzLCBkZXN0aW5hdGlvbik7CiAjZW5kaWYKIAotICAgIGJvb2wg
c3VjY2VzcyA9IG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIEFTU0VSVF9VTlVTRUQoc3VjY2Vz
cywgc3VjY2Vzcyk7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAKICAgICB2YWxpZGF0ZUF0
dHJpYnV0ZXMoKTsKICAgICBhdHRyaWJ1dGVzID0gY29udGV4dEF0dHJpYnV0ZXMoKTsgLy8gVGhl
eSBtYXkgaGF2ZSBjaGFuZ2VkIGR1cmluZyB2YWxpZGF0aW9uLgpAQCAtMzM1LDggKzMzMyw3IEBA
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTChHcmFwaGlj
c0NvbnRleHRHTEF0dHJpYnV0ZXMgYXR0CiAjaWYgVVNFKEFOR0xFKQogR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6On5HcmFwaGljc0NvbnRleHRHTE9wZW5HTCgpCiB7Ci0gICAgYm9vbCBzdWNjZXNz
ID0gbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgQVNTRVJUX1VOVVNFRChzdWNjZXNzLCBzdWNj
ZXNzKTsKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBpZiAobV90ZXh0dXJlKQogICAg
ICAgICBnbDo6RGVsZXRlVGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7CiAjaWYgVVNFKENPT1JESU5B
VEVEX0dSQVBISUNTKQpAQCAtMzgwLDggKzM3Nyw3IEBAIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp+R3JhcGhpY3NDb250ZXh0R0xPcGVuR0woKQogI2Vsc2UKIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp+R3JhcGhpY3NDb250ZXh0R0xPcGVuR0woKQogewotICAgIGJvb2wgc3VjY2VzcyA9IG1h
a2VDb250ZXh0Q3VycmVudCgpOwotICAgIEFTU0VSVF9VTlVTRUQoc3VjY2Vzcywgc3VjY2Vzcyk7
CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgaWYgKG1fdGV4dHVyZSkKICAgICAgICAg
OjpnbERlbGV0ZVRleHR1cmVzKDEsICZtX3RleHR1cmUpOwogI2lmIFVTRShDT09SRElOQVRFRF9H
UkFQSElDUykK
</data>

          </attachment>
      

    </bug>

</bugzilla>