<?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>218748</bug_id>
          
          <creation_ts>2020-11-10 06:02:07 -0800</creation_ts>
          <short_desc>[GStreamer] refactor video encoder with WebKit style</short_desc>
          <delta_ts>2020-11-27 02:23:16 -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>WebRTC</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Víctor M. Jáquez L.">vjaquez</reporter>
          <assigned_to name="Víctor M. Jáquez L.">vjaquez</assigned_to>
          <cc>alex</cc>
    
    <cc>calvaris</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>hta</cc>
    
    <cc>jer.noble</cc>
    
    <cc>philipj</cc>
    
    <cc>pnormand</cc>
    
    <cc>sergio</cc>
    
    <cc>tommyw</cc>
    
    <cc>tsaunier</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1706058</commentid>
    <comment_count>0</comment_count>
    <who name="Víctor M. Jáquez L.">vjaquez</who>
    <bug_when>2020-11-10 06:02:07 -0800</bug_when>
    <thetext>libwebrtc/GStreamerVideoEncoder is written in a GStreamer code-style. It would be better to refactor it using C++/WebKit style, as the other GStreamer elements inside WebKit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1706076</commentid>
    <comment_count>1</comment_count>
      <attachid>413694</attachid>
    <who name="Víctor M. Jáquez L.">vjaquez</who>
    <bug_when>2020-11-10 07:27:06 -0800</bug_when>
    <thetext>Created attachment 413694
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1706415</commentid>
    <comment_count>2</comment_count>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2020-11-11 03:44:56 -0800</bug_when>
    <thetext>Let&apos;s wait for Phil and Thibault&apos;s comments, since IIRC, it was their idea to keep it this way to ease a possible upstreaming process to GStreamer eventually.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1706425</commentid>
    <comment_count>3</comment_count>
    <who name="Thibault Saunier">tsaunier</who>
    <bug_when>2020-11-11 04:33:09 -0800</bug_when>
    <thetext>(In reply to Xabier Rodríguez Calvar from comment #2)
&gt; Let&apos;s wait for Phil and Thibault&apos;s comments, since IIRC, it was their idea
&gt; to keep it this way to ease a possible upstreaming process to GStreamer
&gt; eventually.

It indeed was the plan and the reason why we used the GStreamer coding style. I never took the time to make it happen and am not 100% sure what other GStreamer maintainer will think of it so I have no hard opinion at that point.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1709868</commentid>
    <comment_count>4</comment_count>
      <attachid>413694</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2020-11-23 01:32:44 -0800</bug_when>
    <thetext>Comment on attachment 413694
Patch

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

&gt; Source/WebCore/platform/mediastream/libwebrtc/GStreamerVideoEncoder.cpp:39
&gt; +    GST_STATIC_PAD_TEMPLATE (&quot;src&quot;, GST_PAD_SRC, GST_PAD_ALWAYS, GST_STATIC_CAPS (&quot;video/x-h264;video/x-vp8;video/x-vp9&quot;));

vp9 is added here, but I see no mention of a vp9enc below. Maybe add vp9 in a follow-up patch, if this patch is meant to be a refactoring only.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1709878</commentid>
    <comment_count>5</comment_count>
      <attachid>414799</attachid>
    <who name="Víctor M. Jáquez L.">vjaquez</who>
    <bug_when>2020-11-23 03:58:03 -0800</bug_when>
    <thetext>Created attachment 414799
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1710249</commentid>
    <comment_count>6</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-11-27 02:22:08 -0800</bug_when>
    <thetext>Committed r270187: &lt;https://trac.webkit.org/changeset/270187&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 414799.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1710250</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-11-27 02:23:16 -0800</bug_when>
    <thetext>&lt;rdar://problem/71761576&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>413694</attachid>
            <date>2020-11-10 07:27:06 -0800</date>
            <delta_ts>2020-11-23 03:57:58 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-218748-20201110162705.patch</filename>
            <type>text/plain</type>
            <size>26514</size>
            <attacher name="Víctor M. Jáquez L.">vjaquez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY5NjI4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmUzNDM2Yjk5MmEyNDk2
NGIxNzIxZmE4ODFlYjAxYWM4ODI4MDFiMi4uMjQ1NmFjNGFiNDg1Njc4MDQ2YjQ1MDAxNWNhNjQ4
ODY2OWRlZWJlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3IEBACisyMDIwLTExLTEwICBWw61j
dG9yIE1hbnVlbCBKw6FxdWV6IExlYWwgIDx2amFxdWV6QGlnYWxpYS5jb20+CisKKyAgICAgICAg
W0dTdHJlYW1lcl0gcmVmYWN0b3IgdmlkZW8gZW5jb2RlciB3aXRoIFdlYktpdCBzdHlsZQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE4NzQ4CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQXBwbHkgV2ViS2l0
IGNvZGUgc3R5bGUgdG8gR1N0cmVhbWVyVmlkZW9FbmNvZGVyCisKKyAgICAgICAgTm8gbmV3IHRl
c3RzIHJlcXVpcmVkIHNpbmNlIGl0J3MgYSByZWZhY3Rvci4KKworICAgICAgICAqIHBsYXRmb3Jt
L21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9HU3RyZWFtZXJWaWRlb0VuY29kZXIuY3BwOgorICAgICAg
ICAoRW5jb2RlcnM6OnNpbmdsZXRvbik6IEluc3RlYWQgb2YgYW4gYXJyYXkgd2l0aCB0aGUgYXZh
aWxhYmxlIGVuY29kZXJzLCBhIHNpbmdsZXRvbiBtYXAgaXMKKyAgICAgICAgdXNlZCwgd2l0aCBi
ZXR0ZXIgbWVtb3J5IGhhbmRsaW5nLgorICAgICAgICAoRW5jb2RlcnM6OnJlZ2lzdGVyRW5jb2Rl
cik6IHN0YXRpYyBtZXRob2QgdG8gcmVnaXN0ZXIgYSBwb3NzaWJsZSBlbmNvZGVyIHRvIGhhbmRs
ZQorICAgICAgICAoRW5jb2RlcnM6OmRlZmluaXRpb24pOiBnZXR0ZXIKKyAgICAgICAgKHdlYnJ0
Y1ZpZGVvRW5jb2RlckdldFByb3BlcnR5KTogcmVuYW1lZAorICAgICAgICAod2VicnRjVmlkZW9F
bmNvZGVyU2V0Qml0cmF0ZSk6IHJlbmFtZWQKKyAgICAgICAgKHdlYnJ0Y1ZpZGVvRW5jb2RlclNl
dEZvcm1hdCk6IFVzZSBnZXR0ZXIgZm9yIHN0YXRpYyBwYWRzOyBHUmVmUHRyIGZvciBtZW1vcnkg
aGFuZGxpbmc7CisgICAgICAgIGRvbid0IGNhbGwgZ3N0X2dob3N0X3BhZF9zZXRfdGFyZ2V0KCkg
aW5zaWRlIGEgZ19hc3NlcnQgc2luY2UgaXQgY2FuIGJlIGRpc2FibGVkLgorICAgICAgICAod2Vi
cnRjVmlkZW9FbmNvZGVyU2V0UHJvcGVydHkpOiByZW5hbWVkCisgICAgICAgIChzZXR1cFgyNjRl
bmMpOiByZW5hbWVkCisgICAgICAgIChzZXR1cE9wZW5oMjY0ZW5jKTogcmVuYW1lZAorICAgICAg
ICAoc2V0dXBPbXhoMjY0ZW5jKTogcmVuYW1lZAorICAgICAgICAoc2V0Qml0cmF0ZUtiaXRQZXJT
ZWMpOiByZW5hbWVkCisgICAgICAgIChzZXRCaXRyYXRlQml0UGVyU2VjKTogcmVuYW1lZAorICAg
ICAgICAod2VicnRjX3ZpZGVvX2VuY29kZXJfY2xhc3NfaW5pdCk6IHJlbmFtZWQKKyAgICAgICAg
KHdlYnJ0Y192aWRlb19lbmNvZGVyX2luaXQpOiByZW5hbWVkCisgICAgICAgICogcGxhdGZvcm0v
bWVkaWFzdHJlYW0vbGlid2VicnRjL0dTdHJlYW1lclZpZGVvRW5jb2Rlci5oOiB1c2UgR19ERUNM
QVJFX0ZJTkFMX1RZUEUgbWFjcm8gYW5kCisgICAgICAgIGNoYW5nZSB0aGUgbmFtZSBvZiB0aGUg
Z2xpYiB0eXBlIHRvIFdFQlJUQ19UWVBFX1ZJREVPX0VOQ09ERVIKKyAgICAgICAgKiBwbGF0Zm9y
bS9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvR1N0cmVhbWVyVmlkZW9FbmNvZGVyRmFjdG9yeS5jcHA6
IHJlbW92ZSB1bnVzZWQgbWFjcm8KKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclZpZGVvRW5j
b2RlckZhY3Rvcnk6OkdTdHJlYW1lclZpZGVvRW5jb2RlckZhY3RvcnkpOiBEb24ndCByZWdpc3Rl
ciB0aGUKKyAgICAgICAgZWxlbWVudCBhcyBwcmltYXJ5LCBidXQgbm9uZS4KKwogMjAyMC0xMS0x
MCAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgW0xGQ11bSW50
ZWdyYXRpb25dIEFsbG93IG9iamVjdC1maXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9HU3RyZWFtZXJWaWRlb0VuY29kZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbGlid2VicnRjL0dTdHJlYW1lclZp
ZGVvRW5jb2Rlci5jcHAKaW5kZXggNmExZDRhN2E0MTAyNWQ3ZTU1YmUyYTY0OGMwZWU2ODBhZjc1
ZGVkMC4uMTdjYjM5OTczNDZhNjIxNjdlZWRkZWEyOGY4ZWFjMmU5YmM5Yzc4YiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbGlid2VicnRjL0dTdHJlYW1l
clZpZGVvRW5jb2Rlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vbGlid2VicnRjL0dTdHJlYW1lclZpZGVvRW5jb2Rlci5jcHAKQEAgLTEsNiArMSw2IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE4IE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTggSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxOC0yMDIwIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTgtMjAyMCBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCkBAIC0yMiwzNDQgKzIyLDI4MSBAQAogICogdGhhdCBlbGVtZW50IGluIHRoZSBm
dXR1cmUgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdTdHJlYW1lclZpZGVv
RW5jb2Rlci5oIgogCiAjaWYgRU5BQkxFKFZJREVPKSAmJiBFTkFCTEUoTUVESUFfU1RSRUFNKSAm
JiBVU0UoTElCV0VCUlRDKSAmJiBVU0UoR1NUUkVBTUVSKQotI2luY2x1ZGUgIkdTdHJlYW1lclZp
ZGVvRW5jb2Rlci5oIgorI2luY2x1ZGUgIkdSZWZQdHJHU3RyZWFtZXIuaCIKKyNpbmNsdWRlIDx3
dGYvU3RkTWFwLmg+CiAKLUdTVF9ERUJVR19DQVRFR09SWSAoZ3N0X3dlYnJ0Y2VuY19kZWJ1Zyk7
Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBnc3Rfd2VicnRjZW5jX2RlYnVnCitHU1RfREVCVUdf
Q0FURUdPUlkgKHdlYnJ0Y192ZW5jX2RlYnVnKTsKKyNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIHdl
YnJ0Y192ZW5jX2RlYnVnCiAKICNkZWZpbmUgS0JJVF9UT19CSVQgMTAyNAogCi1zdGF0aWMgR3N0
U3RhdGljUGFkVGVtcGxhdGUgc2lua1RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUg
KCJzaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NU
X1NUQVRJQ19DQVBTICgidmlkZW8veC1yYXcoQU5ZKTsiKSk7CitzdGF0aWMgR3N0U3RhdGljUGFk
VGVtcGxhdGUgc2lua1RlbXBsYXRlID0KKyAgICBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNp
bmsiLCBHU1RfUEFEX1NJTkssIEdTVF9QQURfQUxXQVlTLCBHU1RfU1RBVElDX0NBUFMgKCJ2aWRl
by94LXJhdyhBTlkpOyIpKTsKK3N0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzcmNUZW1wbGF0
ZSA9CisgICAgR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzcmMiLCBHU1RfUEFEX1NSQywgR1NU
X1BBRF9BTFdBWVMsIEdTVF9TVEFUSUNfQ0FQUyAoInZpZGVvL3gtaDI2NDt2aWRlby94LXZwODt2
aWRlby94LXZwOSIpKTsKKwordHlwZWRlZiB2b2lkICgqU2V0Qml0cmF0ZUZ1bmMpIChHT2JqZWN0
ICogZW5jb2RlciwgY29uc3QgZ2NoYXIgKiBwcm9wbmFtZSwgIGdpbnQgYml0cmF0ZSk7Cit0eXBl
ZGVmIHZvaWQgKCpTZXR1cEZ1bmMpIChXZWJydGNWaWRlb0VuY29kZXIgKiBzZWxmKTsKKworc3Ry
dWN0IEVuY29kZXJEZWZpbml0aW9uIHsKKyAgICBHUmVmUHRyPEdzdENhcHM+IGNhcHM7CisgICAg
Y29uc3QgZ2NoYXIqIG5hbWU7CisgICAgY29uc3QgZ2NoYXIqIHBhcnNlck5hbWU7CisgICAgR1Jl
ZlB0cjxHc3RDYXBzPiBlbmNvZGVkRm9ybWF0OworICAgIFNldEJpdHJhdGVGdW5jIHNldEJpdHJh
dGU7CisgICAgU2V0dXBGdW5jIHNldHVwRW5jb2RlcjsKKyAgICBjb25zdCBnY2hhciogYml0cmF0
ZVByb3BlcnR5TmFtZTsKKyAgICBjb25zdCBnY2hhcioga2V5ZnJhbWVJbnRlcnZhbFByb3BlcnR5
TmFtZTsKK307CiAKLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzcmNUZW1wbGF0ZSA9IEdT
VF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1Rf
UEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJ2aWRlby94LWgyNjQ7dmlkZW8veC12
cDgiKSk7CitlbnVtIEVuY29kZXJJZCB7IE5vbmUsIFgyNjQsIE9wZW5IMjY0LCBPbXhIMjY0LCBW
cDggfTsKIAotdHlwZWRlZiB2b2lkICgqU2V0Qml0cmF0ZUZ1bmMpIChHT2JqZWN0ICogZW5jb2Rl
ciwgY29uc3QgZ2NoYXIgKiBwcm9wbmFtZSwKLSAgICBnaW50IGJpdHJhdGUpOwotdHlwZWRlZiB2
b2lkICgqU2V0dXBGdW5jKSAoR3N0V2VicnRjVmlkZW9FbmNvZGVyICogc2VsZik7Ci10eXBlZGVm
IHN0cnVjdAotewotICBnYm9vbGVhbiBhdmFsYWlibGU7Ci0gIEdzdENhcHMgKmNhcHM7Ci0gIGNv
bnN0IGdjaGFyICpuYW1lOwotICBjb25zdCBnY2hhciAqcGFyc2VyX25hbWU7Ci0gIEdzdENhcHMg
KmVuY29kZWRfZm9ybWF0OwotICBTZXRCaXRyYXRlRnVuYyBzZXRCaXRyYXRlOwotICBTZXR1cEZ1
bmMgc2V0dXBFbmNvZGVyOwotICBjb25zdCBnY2hhciAqYml0cmF0ZV9wcm9wbmFtZTsKLSAgY29u
c3QgZ2NoYXIgKmtleWZyYW1lX2ludGVydmFsX3Byb3BuYW1lOwotfSBFbmNvZGVyRGVmaW5pdGlv
bjsKLQotdHlwZWRlZiBlbnVtCi17Ci0gIEVOQ09ERVJfTk9ORSA9IDAsCi0gIEVOQ09ERVJfWDI2
NCwKLSAgRU5DT0RFUl9PUEVOSDI2NCwKLSAgRU5DT0RFUl9PTVhIMjY0LAotICBFTkNPREVSX1ZQ
OCwKLSAgRU5DT0RFUl9MQVNULAotfSBFbmNvZGVySWQ7CitjbGFzcyBFbmNvZGVycyB7CitwdWJs
aWM6CisgICAgc3RhdGljIFN0ZE1hcDxFbmNvZGVySWQsIEVuY29kZXJEZWZpbml0aW9uPiYgc2lu
Z2xldG9uKCkKKyAgICB7CisgICAgICAgIHN0YXRpYyBTdGRNYXA8RW5jb2RlcklkLCBFbmNvZGVy
RGVmaW5pdGlvbj4gZW5jb2RlcnM7CisgICAgICAgIHJldHVybiBlbmNvZGVyczsKKyAgICB9CiAK
LUVuY29kZXJEZWZpbml0aW9uIGVuY29kZXJzW0VOQ09ERVJfTEFTVF0gPSB7IHsgfSB9OworICAg
IHN0YXRpYyB2b2lkIHJlZ2lzdGVyRW5jb2RlcihFbmNvZGVySWQgaWQsIGNvbnN0IGdjaGFyKiBu
YW1lLCBjb25zdCBnY2hhciogcGFyc2VyX25hbWUsIGNvbnN0IGdjaGFyKiBjYXBzLCBjb25zdCBn
Y2hhciogZW5jb2RlZF9mb3JtYXQsCisgICAgICAgIFNldHVwRnVuYyBzZXR1cEVuY29kZXIsIGNv
bnN0IGdjaGFyKiBiaXRyYXRlX3Byb3BuYW1lLCBTZXRCaXRyYXRlRnVuYyBzZXRCaXRyYXRlLCBj
b25zdCBnY2hhcioga2V5ZnJhbWVfaW50ZXJ2YWxfcHJvcG5hbWUpCisgICAgeworICAgICAgICBH
c3RQbHVnaW5GZWF0dXJlICpmZWF0dXJlID0gZ3N0X3JlZ2lzdHJ5X2xvb2t1cF9mZWF0dXJlKGdz
dF9yZWdpc3RyeV9nZXQoKSwgbmFtZSk7CisgICAgICAgIGlmICghZmVhdHVyZSkKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgZ3N0X29iamVjdF91bnJlZihmZWF0dXJlKTsKKworICAgICAg
ICBzaW5nbGV0b24oKS5lbXBsYWNlKHN0ZDo6bWFrZV9wYWlyKGlkLCAoRW5jb2RlckRlZmluaXRp
b24pIHsKKyAgICAgICAgICAgIC5jYXBzID0gYWRvcHRHUmVmKGdzdF9jYXBzX2Zyb21fc3RyaW5n
KGNhcHMpKSwKKyAgICAgICAgICAgIC5uYW1lID0gbmFtZSwKKyAgICAgICAgICAgIC5wYXJzZXJO
YW1lID0gcGFyc2VyX25hbWUsCisgICAgICAgICAgICAuZW5jb2RlZEZvcm1hdCA9IChlbmNvZGVk
X2Zvcm1hdCkgPyBhZG9wdEdSZWYoZ3N0X2NhcHNfZnJvbV9zdHJpbmcoZW5jb2RlZF9mb3JtYXQp
KSA6IG51bGxwdHIsCisgICAgICAgICAgICAuc2V0Qml0cmF0ZSA9IHNldEJpdHJhdGUsCisgICAg
ICAgICAgICAuc2V0dXBFbmNvZGVyID0gc2V0dXBFbmNvZGVyLAorICAgICAgICAgICAgLmJpdHJh
dGVQcm9wZXJ0eU5hbWUgPSBiaXRyYXRlX3Byb3BuYW1lLAorICAgICAgICAgICAgLmtleWZyYW1l
SW50ZXJ2YWxQcm9wZXJ0eU5hbWUgPSBrZXlmcmFtZV9pbnRlcnZhbF9wcm9wbmFtZSwKKyAgICAg
ICAgfSkpOworICAgIH0KIAotdHlwZWRlZiBzdHJ1Y3QKLXsKLSAgRW5jb2RlcklkIGVuY29kZXJJ
ZDsKLSAgR3N0RWxlbWVudCAqZW5jb2RlcjsKLSAgR3N0RWxlbWVudCAqcGFyc2VyOwotICBHc3RF
bGVtZW50ICpjYXBzZmlsdGVyOwotICBndWludCBiaXRyYXRlOwotfSBHc3RXZWJydGNWaWRlb0Vu
Y29kZXJQcml2YXRlOwotCi0vKiAgKklOREVOVC1PRkYqICovCi1HX0RFRklORV9UWVBFX1dJVEhf
UFJJVkFURSAoR3N0V2VicnRjVmlkZW9FbmNvZGVyLCBnc3Rfd2VicnRjX3ZpZGVvX2VuY29kZXIs
Ci0gICAgR1NUX1RZUEVfQklOKQotI2RlZmluZSBQUklWKHNlbGYpICgoR3N0V2VicnRjVmlkZW9F
bmNvZGVyUHJpdmF0ZSopZ3N0X3dlYnJ0Y192aWRlb19lbmNvZGVyX2dldF9pbnN0YW5jZV9wcml2
YXRlKHNlbGYpKQotLyogICpJTkRFTlQtT04qICovCi0KLWVudW0KLXsKLSAgUFJPUF8wLAotICBQ
Uk9QX0ZPUk1BVCwKLSAgUFJPUF9FTkNPREVSLAotICBQUk9QX0JJVFJBVEUsCi0gIFBST1BfS0VZ
RlJBTUVfSU5URVJWQUwsCi0gIE5fUFJPUFMKKyAgICBzdGF0aWMgY29uc3QgRW5jb2RlckRlZmlu
aXRpb24mIGRlZmluaXRpb24oRW5jb2RlcklkIGlkKSB7CisgICAgICAgIEFTU0VSVChpZCAhPSBO
b25lKTsKKyAgICAgICAgcmV0dXJuIHNpbmdsZXRvbigpW2lkXTsKKyAgICB9CiB9OwogCi1zdGF0
aWMgdm9pZAotZ3N0X3dlYnJ0Y192aWRlb19lbmNvZGVyX2ZpbmFsaXplIChHT2JqZWN0ICogb2Jq
ZWN0KQotewotICBHX09CSkVDVF9DTEFTUyAoZ3N0X3dlYnJ0Y192aWRlb19lbmNvZGVyX3BhcmVu
dF9jbGFzcyktPmZpbmFsaXplIChvYmplY3QpOwotfQorc3RydWN0IF9XZWJydGNWaWRlb0VuY29k
ZXIgeworICAgIEdzdEJpbiBwYXJlbnQ7CisKKyAgICBFbmNvZGVySWQgZW5jb2RlcklkOworICAg
IEdzdEVsZW1lbnQqIGVuY29kZXI7CisgICAgR3N0RWxlbWVudCogcGFyc2VyOworICAgIGd1aW50
IGJpdHJhdGU7Cit9OworCitHX0RFRklORV9UWVBFKFdlYnJ0Y1ZpZGVvRW5jb2Rlciwgd2VicnRj
X3ZpZGVvX2VuY29kZXIsIEdTVF9UWVBFX0JJTik7CisKK2VudW0geworICAgICBQUk9QX0ZPUk1B
VCA9IDEsCisgICAgIFBST1BfRU5DT0RFUiwKKyAgICAgUFJPUF9CSVRSQVRFLAorICAgICBQUk9Q
X0tFWUZSQU1FX0lOVEVSVkFMLAorICAgICBOX1BST1BTCit9OwogCi1zdGF0aWMgdm9pZAotZ3N0
X3dlYnJ0Y192aWRlb19lbmNvZGVyX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwKLSAg
ICBndWludCBwcm9wX2lkLCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQorc3Rh
dGljIHZvaWQgd2VicnRjVmlkZW9FbmNvZGVyR2V0UHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBn
dWludCBwcm9wX2lkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKIHsKLSAgR3N0
V2VicnRjVmlkZW9FbmNvZGVyICpzZWxmID0gR1NUX1dFQlJUQ19WSURFT19FTkNPREVSIChvYmpl
Y3QpOwotICBHc3RXZWJydGNWaWRlb0VuY29kZXJQcml2YXRlICpwcml2ID0gUFJJViAoc2VsZik7
CisgICAgV2VicnRjVmlkZW9FbmNvZGVyKiBzZWxmID0gV0VCUlRDX1ZJREVPX0VOQ09ERVIob2Jq
ZWN0KTsKIAotICBzd2l0Y2ggKHByb3BfaWQpIHsKKyAgICBzd2l0Y2ggKHByb3BfaWQpIHsKICAg
ICBjYXNlIFBST1BfRk9STUFUOgotICAgICAgaWYgKHByaXYtPmVuY29kZXJJZCAhPSBFTkNPREVS
X05PTkUpCi0gICAgICAgIGdfdmFsdWVfc2V0X2JveGVkICh2YWx1ZSwgZW5jb2RlcnNbcHJpdi0+
ZW5jb2RlcklkXS5jYXBzKTsKLSAgICAgIGVsc2UKLSAgICAgICAgZ192YWx1ZV9zZXRfYm94ZWQg
KHZhbHVlLCBOVUxMKTsKLSAgICAgIGJyZWFrOworICAgICAgICBpZiAoc2VsZi0+ZW5jb2Rlcklk
ICE9IE5vbmUpIHsKKyAgICAgICAgICAgIGF1dG8gJmVuY29kZXIgPSBFbmNvZGVyczo6ZGVmaW5p
dGlvbihzZWxmLT5lbmNvZGVySWQpOworICAgICAgICAgICAgZ192YWx1ZV9zZXRfYm94ZWQodmFs
dWUsIGVuY29kZXIuY2Fwcy5nZXQoKSk7CisgICAgICAgIH0gIGVsc2UKKyAgICAgICAgICAgIGdf
dmFsdWVfc2V0X2JveGVkKHZhbHVlLCBudWxscHRyKTsKKyAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBQUk9QX0VOQ09ERVI6Ci0gICAgICBnX3ZhbHVlX3NldF9vYmplY3QgKHZhbHVlLCBwcml2LT5l
bmNvZGVyKTsKLSAgICAgIGJyZWFrOworICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUs
IHNlbGYtPmVuY29kZXIpOworICAgICAgICBicmVhazsKICAgICBjYXNlIFBST1BfQklUUkFURToK
LSAgICAgIGdfdmFsdWVfc2V0X3VpbnQgKHZhbHVlLCBwcml2LT5iaXRyYXRlKTsKLSAgICAgIGJy
ZWFrOworICAgICAgICBnX3ZhbHVlX3NldF91aW50KHZhbHVlLCBzZWxmLT5iaXRyYXRlKTsKKyAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBQUk9QX0tFWUZSQU1FX0lOVEVSVkFMOgotICAgICAgaWYg
KHByaXYtPmVuY29kZXIpCi0gICAgICAgIGdfb2JqZWN0X2dldF9wcm9wZXJ0eSAoR19PQkpFQ1Qg
KHByaXYtPmVuY29kZXIpLAotICAgICAgICAgICAgZW5jb2RlcnNbcHJpdi0+ZW5jb2RlcklkXS5r
ZXlmcmFtZV9pbnRlcnZhbF9wcm9wbmFtZSwgdmFsdWUpOwotICAgICAgYnJlYWs7CisgICAgICAg
IGlmIChzZWxmLT5lbmNvZGVyKSB7CisgICAgICAgICAgICBhdXRvICZlbmNvZGVyID0gRW5jb2Rl
cnM6OmRlZmluaXRpb24oc2VsZi0+ZW5jb2RlcklkKTsKKyAgICAgICAgICAgIGdfb2JqZWN0X2dl
dF9wcm9wZXJ0eShHX09CSkVDVChzZWxmLT5lbmNvZGVyKSwgZW5jb2Rlci5rZXlmcmFtZUludGVy
dmFsUHJvcGVydHlOYW1lLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CiAgICAg
ZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0
LCBwcm9wX2lkLCBwc3BlYyk7CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJU
WV9JRChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CiAgIH0KIH0KIAot
c3RhdGljIHZvaWQKLWdzdF93ZWJydGNfdmlkZW9fZW5jb2Rlcl9zZXRfYml0cmF0ZSAoR3N0V2Vi
cnRjVmlkZW9FbmNvZGVyICogc2VsZiwKLSAgICBndWludCBiaXRyYXRlKQorc3RhdGljIHZvaWQg
d2VicnRjVmlkZW9FbmNvZGVyU2V0Qml0cmF0ZShXZWJydGNWaWRlb0VuY29kZXIqIHNlbGYsIGd1
aW50IGJpdHJhdGUpCiB7Ci0gIEdzdFdlYnJ0Y1ZpZGVvRW5jb2RlclByaXZhdGUgKnByaXYgPSBQ
UklWIChzZWxmKTsKLQotICBwcml2LT5iaXRyYXRlID0gYml0cmF0ZTsKLSAgaWYgKHByaXYtPmVu
Y29kZXIpIHsKLSAgICBlbmNvZGVyc1twcml2LT5lbmNvZGVySWRdLnNldEJpdHJhdGUgKEdfT0JK
RUNUIChwcml2LT5lbmNvZGVyKSwKLSAgICAgICAgZW5jb2RlcnNbcHJpdi0+ZW5jb2RlcklkXS5i
aXRyYXRlX3Byb3BuYW1lLCBwcml2LT5iaXRyYXRlKTsKLSAgfQorICAgIHNlbGYtPmJpdHJhdGUg
PSBiaXRyYXRlOworICAgIGlmIChzZWxmLT5lbmNvZGVyKSB7CisgICAgICAgIGF1dG8gJmVuY29k
ZXIgPSBFbmNvZGVyczo6ZGVmaW5pdGlvbihzZWxmLT5lbmNvZGVySWQpOworICAgICAgICBlbmNv
ZGVyLnNldEJpdHJhdGUoR19PQkpFQ1Qoc2VsZi0+ZW5jb2RlciksIGVuY29kZXIuYml0cmF0ZVBy
b3BlcnR5TmFtZSwgc2VsZi0+Yml0cmF0ZSk7CisgICAgfQogfQogCi1zdGF0aWMgdm9pZAotZ3N0
X3dlYnJ0Y192aWRlb19lbmNvZGVyX3NldF9mb3JtYXQgKEdzdFdlYnJ0Y1ZpZGVvRW5jb2RlciAq
IHNlbGYsCi0gICAgY29uc3QgR3N0Q2FwcyAqIGNhcHMpCitzdGF0aWMgdm9pZCB3ZWJydGNWaWRl
b0VuY29kZXJTZXRGb3JtYXQoV2VicnRjVmlkZW9FbmNvZGVyKiBzZWxmLCBjb25zdCBHc3RDYXBz
KiBjYXBzKQogewotICBnaW50IGk7Ci0gIEdzdFdlYnJ0Y1ZpZGVvRW5jb2RlclByaXZhdGUgKnBy
aXYgPSBQUklWIChzZWxmKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAocHJpdi0+ZW5jb2RlcklkID09
IEVOQ09ERVJfTk9ORSk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKGNhcHMpOwotCi0gIGZvciAoaSA9
IDE7IGkgPCBFTkNPREVSX0xBU1Q7IGkrKykgewotICAgIGlmIChlbmNvZGVyc1tpXS5hdmFsYWli
bGUKLSAgICAgICAgJiYgZ3N0X2NhcHNfY2FuX2ludGVyc2VjdCAoZW5jb2RlcnNbaV0uY2Fwcywg
Y2FwcykpIHsKLSAgICAgIEdzdFBhZCAqdG1wcGFkOwotICAgICAgcHJpdi0+ZW5jb2RlcklkID0g
KEVuY29kZXJJZCkgaTsKLSAgICAgIHByaXYtPmVuY29kZXIgPSBnc3RfZWxlbWVudF9mYWN0b3J5
X21ha2UgKGVuY29kZXJzW2ldLm5hbWUsIE5VTEwpOwotCi0gICAgICBpZiAoZW5jb2RlcnNbaV0u
cGFyc2VyX25hbWUpCi0gICAgICAgIHByaXYtPnBhcnNlciA9IGdzdF9lbGVtZW50X2ZhY3Rvcnlf
bWFrZSAoZW5jb2RlcnNbaV0ucGFyc2VyX25hbWUsIE5VTEwpOwotCi0gICAgICBlbmNvZGVyc1tw
cml2LT5lbmNvZGVySWRdLnNldHVwRW5jb2RlciAoc2VsZik7Ci0gICAgICBpZiAoZW5jb2RlcnNb
aV0uZW5jb2RlZF9mb3JtYXQpIHsKLSAgICAgICAgcHJpdi0+Y2Fwc2ZpbHRlciA9IGdzdF9lbGVt
ZW50X2ZhY3RvcnlfbWFrZSAoImNhcHNmaWx0ZXIiLCBOVUxMKTsKLSAgICAgICAgZ19vYmplY3Rf
c2V0IChwcml2LT5jYXBzZmlsdGVyLCAiY2FwcyIsIGVuY29kZXJzW2ldLmVuY29kZWRfZm9ybWF0
LAotICAgICAgICAgICAgTlVMTCk7Ci0gICAgICB9Ci0KLSAgICAgIGdzdF9iaW5fYWRkIChHU1Rf
QklOIChzZWxmKSwgcHJpdi0+ZW5jb2Rlcik7Ci0KLSAgICAgIHRtcHBhZCA9IGdzdF9lbGVtZW50
X2dldF9zdGF0aWNfcGFkIChwcml2LT5lbmNvZGVyLCAic2luayIpOwotICAgICAgZ3N0X2dob3N0
X3BhZF9zZXRfdGFyZ2V0IChHU1RfR0hPU1RfUEFEIChHU1RfRUxFTUVOVCAoc2VsZiktPgotICAg
ICAgICAgICAgICBzaW5rcGFkcy0+ZGF0YSksIHRtcHBhZCk7Ci0gICAgICBnc3Rfb2JqZWN0X3Vu
cmVmICh0bXBwYWQpOwotCi0gICAgICB0bXBwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3Bh
ZCAocHJpdi0+ZW5jb2RlciwgInNyYyIpOwotICAgICAgaWYgKHByaXYtPnBhcnNlcikgewotICAg
ICAgICBnc3RfYmluX2FkZCAoR1NUX0JJTiAoc2VsZiksIHByaXYtPnBhcnNlcik7Ci0gICAgICAg
IGdzdF9lbGVtZW50X2xpbmsgKHByaXYtPmVuY29kZXIsIHByaXYtPnBhcnNlcik7Ci0gICAgICAg
IGdzdF9vYmplY3RfdW5yZWYgKHRtcHBhZCk7Ci0gICAgICAgIHRtcHBhZCA9IGdzdF9lbGVtZW50
X2dldF9zdGF0aWNfcGFkIChwcml2LT5wYXJzZXIsICJzcmMiKTsKLSAgICAgIH0KLQotICAgICAg
aWYgKHByaXYtPmNhcHNmaWx0ZXIpIHsKLSAgICAgICAgR3N0UGFkICp0bXBwYWQyID0gZ3N0X2Vs
ZW1lbnRfZ2V0X3N0YXRpY19wYWQgKHByaXYtPmNhcHNmaWx0ZXIsICJzaW5rIik7Ci0KLSAgICAg
ICAgZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHNlbGYpLCBwcml2LT5jYXBzZmlsdGVyKTsKLSAgICAg
ICAgZ3N0X3BhZF9saW5rICh0bXBwYWQsIHRtcHBhZDIpOwotICAgICAgICBnc3Rfb2JqZWN0X3Vu
cmVmICh0bXBwYWQpOwotICAgICAgICB0bXBwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3Bh
ZCAocHJpdi0+Y2Fwc2ZpbHRlciwgInNyYyIpOwotICAgICAgICBnc3Rfb2JqZWN0X3VucmVmICh0
bXBwYWQyKTsKLSAgICAgIH0KLQotICAgICAgZ19hc3NlcnQgKGdzdF9naG9zdF9wYWRfc2V0X3Rh
cmdldCAoR1NUX0dIT1NUX1BBRCAoR1NUX0VMRU1FTlQKLSAgICAgICAgICAgICAgICAgIChzZWxm
KS0+c3JjcGFkcy0+ZGF0YSksIHRtcHBhZCkpOwotICAgICAgZ3N0X29iamVjdF91bnJlZiAodG1w
cGFkKTsKLQotICAgICAgZ3N0X3dlYnJ0Y192aWRlb19lbmNvZGVyX3NldF9iaXRyYXRlIChzZWxm
LCBwcml2LT5iaXRyYXRlKTsKLSAgICAgIHJldHVybjsKKyAgICBnX3JldHVybl9pZl9mYWlsKHNl
bGYtPmVuY29kZXJJZCA9PSBOb25lKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKGNhcHMpOworCisg
ICAgZm9yIChjb25zdCBhdXRvICZwYWlyIDogRW5jb2RlcnM6OnNpbmdsZXRvbigpKSB7CisgICAg
ICAgIGNvbnN0IGF1dG8gJmVuY29kZXIgPSBwYWlyLnNlY29uZDsKKyAgICAgICAgR3N0RWxlbWVu
dCogY2Fwc2ZpbHRlciA9IG51bGxwdHI7CisKKyAgICAgICAgaWYgKGdzdF9jYXBzX2Nhbl9pbnRl
cnNlY3QoZW5jb2Rlci5jYXBzLmdldCgpLCBjYXBzKSkgeworICAgICAgICAgICAgR1JlZlB0cjxH
c3RQYWQ+IHRtcHBhZDsKKyAgICAgICAgICAgIHNlbGYtPmVuY29kZXJJZCA9IHBhaXIuZmlyc3Q7
CisgICAgICAgICAgICBzZWxmLT5lbmNvZGVyID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKGVu
Y29kZXIubmFtZSwgbnVsbHB0cik7CisKKyAgICAgICAgICAgIGlmIChlbmNvZGVyLnBhcnNlck5h
bWUpCisgICAgICAgICAgICAgICAgc2VsZi0+cGFyc2VyID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9t
YWtlKGVuY29kZXIucGFyc2VyTmFtZSwgbnVsbHB0cik7CisKKyAgICAgICAgICAgIGVuY29kZXIu
c2V0dXBFbmNvZGVyKHNlbGYpOworICAgICAgICAgICAgaWYgKGVuY29kZXIuZW5jb2RlZEZvcm1h
dC5nZXQoKSkgeworICAgICAgICAgICAgICAgIGNhcHNmaWx0ZXIgPSBnc3RfZWxlbWVudF9mYWN0
b3J5X21ha2UoImNhcHNmaWx0ZXIiLCBudWxscHRyKTsKKyAgICAgICAgICAgICAgICBnX29iamVj
dF9zZXQoY2Fwc2ZpbHRlciwgImNhcHMiLCBlbmNvZGVyLmVuY29kZWRGb3JtYXQuZ2V0KCksIG51
bGxwdHIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnc3RfYmluX2FkZChHU1RfQklO
KHNlbGYpLCBzZWxmLT5lbmNvZGVyKTsKKworICAgICAgICAgICAgdG1wcGFkID0gYWRvcHRHUmVm
KGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKHNlbGYtPmVuY29kZXIsICJzaW5rIikpOworICAg
ICAgICAgICAgR1JlZlB0cjxHc3RQYWQ+IHNpbmtwYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRf
Z2V0X3N0YXRpY19wYWQoR1NUX0VMRU1FTlQoc2VsZiksICJzaW5rIikpOworICAgICAgICAgICAg
Z3N0X2dob3N0X3BhZF9zZXRfdGFyZ2V0KEdTVF9HSE9TVF9QQUQoc2lua3BhZC5nZXQoKSksIHRt
cHBhZC5nZXQoKSk7CisKKyAgICAgICAgICAgIHRtcHBhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVu
dF9nZXRfc3RhdGljX3BhZChzZWxmLT5lbmNvZGVyLCAic3JjIikpOworICAgICAgICAgICAgaWYg
KHNlbGYtPnBhcnNlcikgeworICAgICAgICAgICAgICAgIGdzdF9iaW5fYWRkKEdTVF9CSU4oc2Vs
ZiksIHNlbGYtPnBhcnNlcik7CisgICAgICAgICAgICAgICAgZ3N0X2VsZW1lbnRfbGluayhzZWxm
LT5lbmNvZGVyLCBzZWxmLT5wYXJzZXIpOworICAgICAgICAgICAgICAgIHRtcHBhZCA9IGFkb3B0
R1JlZihnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZChzZWxmLT5wYXJzZXIsICJzcmMiKSk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChjYXBzZmlsdGVyKSB7CisgICAgICAgICAg
ICAgICAgR1JlZlB0cjxHc3RQYWQ+IHRtcHBhZDIgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0
X3N0YXRpY19wYWQoY2Fwc2ZpbHRlciwgInNpbmsiKSk7CisKKyAgICAgICAgICAgICAgICBnc3Rf
YmluX2FkZChHU1RfQklOKHNlbGYpLCBjYXBzZmlsdGVyKTsKKyAgICAgICAgICAgICAgICBnc3Rf
cGFkX2xpbmsodG1wcGFkLmdldCgpLCB0bXBwYWQyLmdldCgpKTsKKyAgICAgICAgICAgICAgICB0
bXBwYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQoY2Fwc2ZpbHRlciwg
InNyYyIpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgR1JlZlB0cjxHc3RQYWQ+IHNy
Y3BhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZChHU1RfRUxFTUVOVCAo
c2VsZiksICJzcmMiKSk7CisgICAgICAgICAgICBnYm9vbGVhbiByZXQgPSBnc3RfZ2hvc3RfcGFk
X3NldF90YXJnZXQoR1NUX0dIT1NUX1BBRChzcmNwYWQuZ2V0KCkpLCB0bXBwYWQuZ2V0KCkpOwor
CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXQpOworCisgICAgICAgICAgICB3ZWJydGNW
aWRlb0VuY29kZXJTZXRCaXRyYXRlKHNlbGYsIHNlbGYtPmJpdHJhdGUpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CiAgICAgfQotICB9CiAKLSAgR1NUX0VSUk9SICgiTm8gZW5jb2Rl
ciBmb3VuZCBmb3IgZm9ybWF0ICUiIEdTVF9QVFJfRk9STUFULCBjYXBzKTsKKyAgICBHU1RfRVJS
T1IoIk5vIGVuY29kZXIgZm91bmQgZm9yIGZvcm1hdCAlIiBHU1RfUFRSX0ZPUk1BVCwgY2Fwcyk7
CiB9CiAKLXN0YXRpYyB2b2lkCi1nc3Rfd2VicnRjX3ZpZGVvX2VuY29kZXJfc2V0X3Byb3BlcnR5
IChHT2JqZWN0ICogb2JqZWN0LAotICAgIGd1aW50IHByb3BfaWQsIGNvbnN0IEdWYWx1ZSAqIHZh
bHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCitzdGF0aWMgdm9pZCB3ZWJydGNWaWRlb0VuY29kZXJT
ZXRQcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BfaWQsIGNvbnN0IEdWYWx1ZSog
dmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQogewotICBHc3RXZWJydGNWaWRlb0VuY29kZXIgKnNl
bGYgPSBHU1RfV0VCUlRDX1ZJREVPX0VOQ09ERVIgKG9iamVjdCk7Ci0gIEdzdFdlYnJ0Y1ZpZGVv
RW5jb2RlclByaXZhdGUgKnByaXYgPSBQUklWIChzZWxmKTsKKyAgICBXZWJydGNWaWRlb0VuY29k
ZXIqIHNlbGYgPSBXRUJSVENfVklERU9fRU5DT0RFUihvYmplY3QpOwogCi0gIHN3aXRjaCAocHJv
cF9pZCkgeworICAgIHN3aXRjaCAocHJvcF9pZCkgewogICAgIGNhc2UgUFJPUF9GT1JNQVQ6Ci0g
ICAgICBnc3Rfd2VicnRjX3ZpZGVvX2VuY29kZXJfc2V0X2Zvcm1hdCAoc2VsZiwgZ3N0X3ZhbHVl
X2dldF9jYXBzICh2YWx1ZSkpOwotICAgICAgYnJlYWs7CisgICAgICAgIHdlYnJ0Y1ZpZGVvRW5j
b2RlclNldEZvcm1hdChzZWxmLCBnc3RfdmFsdWVfZ2V0X2NhcHModmFsdWUpKTsKKyAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBQUk9QX0JJVFJBVEU6Ci0gICAgICBnc3Rfd2VicnRjX3ZpZGVvX2Vu
Y29kZXJfc2V0X2JpdHJhdGUgKHNlbGYsIGdfdmFsdWVfZ2V0X3VpbnQgKHZhbHVlKSk7Ci0gICAg
ICBicmVhazsKKyAgICAgICAgd2VicnRjVmlkZW9FbmNvZGVyU2V0Qml0cmF0ZShzZWxmLCBnX3Zh
bHVlX2dldF91aW50KHZhbHVlKSk7CisgICAgICAgIGJyZWFrOwogICAgIGNhc2UgUFJPUF9LRVlG
UkFNRV9JTlRFUlZBTDoKLSAgICAgIGlmIChwcml2LT5lbmNvZGVyKQotICAgICAgICBnX29iamVj
dF9zZXQgKHByaXYtPmVuY29kZXIsCi0gICAgICAgICAgICBlbmNvZGVyc1twcml2LT5lbmNvZGVy
SWRdLmtleWZyYW1lX2ludGVydmFsX3Byb3BuYW1lLAotICAgICAgICAgICAgZ192YWx1ZV9nZXRf
dWludCAodmFsdWUpLCBOVUxMKTsKLQotICAgICAgYnJlYWs7CisgICAgICAgIGlmIChzZWxmLT5l
bmNvZGVyKSB7CisgICAgICAgICAgICBhdXRvICZlbmNvZGVyID0gRW5jb2RlcnM6OmRlZmluaXRp
b24oc2VsZi0+ZW5jb2RlcklkKTsKKyAgICAgICAgICAgIGdfb2JqZWN0X3NldChzZWxmLT5lbmNv
ZGVyLCBlbmNvZGVyLmtleWZyYW1lSW50ZXJ2YWxQcm9wZXJ0eU5hbWUsIGdfdmFsdWVfZ2V0X3Vp
bnQodmFsdWUpLCBudWxscHRyKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKICAgICBkZWZh
dWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHBy
b3BfaWQsIHBzcGVjKTsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotcmVnaXN0ZXJfa25vd25fZW5j
b2RlciAoRW5jb2RlcklkIGVuY0lkLCBjb25zdCBnY2hhciAqIG5hbWUsCi0gICAgY29uc3QgZ2No
YXIgKiBwYXJzZXJfbmFtZSwgY29uc3QgZ2NoYXIgKiBjYXBzLCBjb25zdCBnY2hhciAqIGVuY29k
ZWRfZm9ybWF0LAotICAgIFNldHVwRnVuYyBzZXR1cEVuY29kZXIsIGNvbnN0IGdjaGFyICogYml0
cmF0ZV9wcm9wbmFtZSwKLSAgICBTZXRCaXRyYXRlRnVuYyBzZXRCaXRyYXRlLCBjb25zdCBnY2hh
ciAqIGtleWZyYW1lX2ludGVydmFsX3Byb3BuYW1lKQotewotICBHc3RQbHVnaW5GZWF0dXJlICpm
ZWF0dXJlID0KLSAgICAgIGdzdF9yZWdpc3RyeV9sb29rdXBfZmVhdHVyZSAoZ3N0X3JlZ2lzdHJ5
X2dldCAoKSwgbmFtZSk7Ci0gIGlmICghZmVhdHVyZSkgewotICAgIEdTVF9XQVJOSU5HICgiQ291
bGQgbm90IGZpbmQgJXMiLCBuYW1lKTsKLSAgICBlbmNvZGVyc1tlbmNJZF0uYXZhbGFpYmxlID0g
RkFMU0U7Ci0KLSAgICByZXR1cm47Ci0gIH0KLSAgZ3N0X29iamVjdF91bnJlZiAoZmVhdHVyZSk7
Ci0KLSAgZW5jb2RlcnNbZW5jSWRdLmF2YWxhaWJsZSA9IFRSVUU7Ci0gIGVuY29kZXJzW2VuY0lk
XS5uYW1lID0gbmFtZTsKLSAgZW5jb2RlcnNbZW5jSWRdLnBhcnNlcl9uYW1lID0gcGFyc2VyX25h
bWU7Ci0gIGVuY29kZXJzW2VuY0lkXS5jYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKGNhcHMp
OwotICBpZiAoZW5jb2RlZF9mb3JtYXQpCi0gICAgZW5jb2RlcnNbZW5jSWRdLmVuY29kZWRfZm9y
bWF0ID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKGVuY29kZWRfZm9ybWF0KTsKLSAgZWxzZQotICAg
IGVuY29kZXJzW2VuY0lkXS5lbmNvZGVkX2Zvcm1hdCA9IE5VTEw7Ci0gIGVuY29kZXJzW2VuY0lk
XS5zZXR1cEVuY29kZXIgPSBzZXR1cEVuY29kZXI7Ci0gIGVuY29kZXJzW2VuY0lkXS5iaXRyYXRl
X3Byb3BuYW1lID0gYml0cmF0ZV9wcm9wbmFtZTsKLSAgZW5jb2RlcnNbZW5jSWRdLnNldEJpdHJh
dGUgPSBzZXRCaXRyYXRlOwotICBlbmNvZGVyc1tlbmNJZF0ua2V5ZnJhbWVfaW50ZXJ2YWxfcHJv
cG5hbWUgPSBrZXlmcmFtZV9pbnRlcnZhbF9wcm9wbmFtZTsKKyAgICAgICAgR19PQkpFQ1RfV0FS
Tl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOworICAgICAgICBi
cmVhazsKKyAgICB9CiB9CiAKLXN0YXRpYyB2b2lkCi1zZXR1cF94MjY0ZW5jIChHc3RXZWJydGNW
aWRlb0VuY29kZXIgKiBzZWxmKQorc3RhdGljIHZvaWQgc2V0dXBYMjY0ZW5jKFdlYnJ0Y1ZpZGVv
RW5jb2Rlciogc2VsZikKIHsKLSAgZ3N0X3V0aWxfc2V0X29iamVjdF9hcmcgKEdfT0JKRUNUIChQ
UklWIChzZWxmKS0+ZW5jb2RlciksICJ0dW5lIiwKLSAgICAgICJ6ZXJvbGF0ZW5jeSIpOwotICBn
X29iamVjdF9zZXQgKFBSSVYgKHNlbGYpLT5wYXJzZXIsICJjb25maWctaW50ZXJ2YWwiLCAxLCBO
VUxMKTsKKyAgICBnc3RfdXRpbF9zZXRfb2JqZWN0X2FyZyhHX09CSkVDVCAoc2VsZi0+ZW5jb2Rl
ciksICJ0dW5lIiwgInplcm9sYXRlbmN5Iik7CisgICAgZ19vYmplY3Rfc2V0KHNlbGYtPnBhcnNl
ciwgImNvbmZpZy1pbnRlcnZhbCIsIDEsIG51bGxwdHIpOwogfQogCi1zdGF0aWMgdm9pZAotc2V0
dXBfb3BlbmgyNjRlbmMgKEdzdFdlYnJ0Y1ZpZGVvRW5jb2RlciAqIHNlbGYpCitzdGF0aWMgdm9p
ZCBzZXR1cE9wZW5oMjY0ZW5jKFdlYnJ0Y1ZpZGVvRW5jb2Rlciogc2VsZikKIHsKLSAgZ19vYmpl
Y3Rfc2V0IChQUklWIChzZWxmKS0+cGFyc2VyLCAiY29uZmlnLWludGVydmFsIiwgMSwgTlVMTCk7
CisgICAgZ19vYmplY3Rfc2V0IChzZWxmLT5wYXJzZXIsICJjb25maWctaW50ZXJ2YWwiLCAxLCBu
dWxscHRyKTsKIH0KIAotc3RhdGljIHZvaWQKLXNldHVwX29teGgyNjRlbmMgKEdzdFdlYnJ0Y1Zp
ZGVvRW5jb2RlciAqIHNlbGYpCitzdGF0aWMgdm9pZCBzZXR1cE9teGgyNjRlbmMoV2VicnRjVmlk
ZW9FbmNvZGVyKiBzZWxmKQogewotICBnc3RfdXRpbF9zZXRfb2JqZWN0X2FyZyAoR19PQkpFQ1Qg
KFBSSVYgKHNlbGYpLT5lbmNvZGVyKSwgImNvbnRyb2wtcmF0ZSIsCi0gICAgICAidmFyaWFibGUi
KTsKLSAgZ19vYmplY3Rfc2V0IChQUklWIChzZWxmKS0+cGFyc2VyLCAiY29uZmlnLWludGVydmFs
IiwgMSwgTlVMTCk7CisgIGdzdF91dGlsX3NldF9vYmplY3RfYXJnKEdfT0JKRUNUKHNlbGYtPmVu
Y29kZXIpLCAiY29udHJvbC1yYXRlIiwgInZhcmlhYmxlIik7CisgIGdfb2JqZWN0X3NldChzZWxm
LT5wYXJzZXIsICJjb25maWctaW50ZXJ2YWwiLCAxLCBudWxscHRyKTsKIH0KIAotCi1zdGF0aWMg
dm9pZAotc2V0X2JpdHJhdGVfa2JpdF9wZXJfc2VjIChHT2JqZWN0ICogZW5jb2RlciwgY29uc3Qg
Z2NoYXIgKiBwcm9wX25hbWUsCi0gICAgZ2ludCBiaXRyYXRlKQorc3RhdGljIHZvaWQgc2V0Qml0
cmF0ZUtiaXRQZXJTZWMoR09iamVjdCogZW5jb2RlciwgY29uc3QgZ2NoYXIqIHByb3BfbmFtZSwg
Z2ludCBiaXRyYXRlKQogewotICBnX29iamVjdF9zZXQgKGVuY29kZXIsIHByb3BfbmFtZSwgYml0
cmF0ZSwgTlVMTCk7CisgIGdfb2JqZWN0X3NldChlbmNvZGVyLCBwcm9wX25hbWUsIGJpdHJhdGUs
IG51bGxwdHIpOwogfQogCi1zdGF0aWMgdm9pZAotc2V0X2JpdHJhdGVfYml0X3Blcl9zZWMgKEdP
YmplY3QgKiBlbmNvZGVyLCBjb25zdCBnY2hhciAqIHByb3BfbmFtZSwKLSAgICBnaW50IGJpdHJh
dGUpCitzdGF0aWMgdm9pZCBzZXRCaXRyYXRlQml0UGVyU2VjKEdPYmplY3QqIGVuY29kZXIsIGNv
bnN0IGdjaGFyKiBwcm9wX25hbWUsIGdpbnQgYml0cmF0ZSkKIHsKLSAgZ19vYmplY3Rfc2V0IChl
bmNvZGVyLCBwcm9wX25hbWUsIGJpdHJhdGUgKiBLQklUX1RPX0JJVCwgTlVMTCk7CisgIGdfb2Jq
ZWN0X3NldChlbmNvZGVyLCBwcm9wX25hbWUsIGJpdHJhdGUgKiBLQklUX1RPX0JJVCwgbnVsbHB0
cik7CiB9CiAKLXN0YXRpYyB2b2lkCi1nc3Rfd2VicnRjX3ZpZGVvX2VuY29kZXJfY2xhc3NfaW5p
dCAoR3N0V2VicnRjVmlkZW9FbmNvZGVyQ2xhc3MgKiBrbGFzcykKK3N0YXRpYyB2b2lkIHdlYnJ0
Y192aWRlb19lbmNvZGVyX2NsYXNzX2luaXQoV2VicnRjVmlkZW9FbmNvZGVyQ2xhc3MqIGtsYXNz
KQogewotICBHT2JqZWN0Q2xhc3MgKm9iamVjdF9jbGFzcyA9IEdfT0JKRUNUX0NMQVNTIChrbGFz
cyk7Ci0KLSAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKGdzdF93ZWJydGNlbmNfZGVidWcsICJ3
ZWJydGNlbmNvZGVyIiwgMCwKLSAgICAgICJWaWRlbyBlbmNvZGVyIGZvciBXZWJSVEMiKTsKLQot
ICBvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gZ3N0X3dlYnJ0Y192aWRlb19lbmNvZGVyX2ZpbmFs
aXplOwotICBvYmplY3RfY2xhc3MtPmdldF9wcm9wZXJ0eSA9IGdzdF93ZWJydGNfdmlkZW9fZW5j
b2Rlcl9nZXRfcHJvcGVydHk7Ci0gIG9iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gZ3N0X3dl
YnJ0Y192aWRlb19lbmNvZGVyX3NldF9wcm9wZXJ0eTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0
YWxsX3Byb3BlcnR5IChvYmplY3RfY2xhc3MsIFBST1BfRk9STUFULAotICAgICAgZ19wYXJhbV9z
cGVjX2JveGVkICgiZm9ybWF0IiwgIkZvcm1hdCBhcyBjYXBzIiwKLSAgICAgICAgICAiU2V0IHRo
ZSBjYXBzIG9mIHRoZSBmb3JtYXQgdG8gYmUgdXNlZC4iLAotICAgICAgICAgIEdTVF9UWVBFX0NB
UFMsCi0gICAgICAgICAgKEdQYXJhbUZsYWdzKSAoR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFN
X1NUQVRJQ19TVFJJTkdTKSkpOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkg
KG9iamVjdF9jbGFzcywgUFJPUF9FTkNPREVSLAotICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCAo
ImVuY29kZXIiLCAiVGhlIGFjdHVhbCBlbmNvZGVyIGVsZW1lbnQiLAotICAgICAgICAgICJUaGUg
ZW5jb2RlciBlbGVtZW50IiwgR1NUX1RZUEVfRUxFTUVOVCwKLSAgICAgICAgICAoR1BhcmFtRmxh
Z3MpIChHX1BBUkFNX1JFQURBQkxFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpKTsKLQotICBn
X29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChvYmplY3RfY2xhc3MsIFBST1BfQklUUkFU
RSwKLSAgICAgIGdfcGFyYW1fc3BlY191aW50ICgiYml0cmF0ZSIsICJCaXRyYXRlIiwKLSAgICAg
ICAgICAiVGhlIGJpdHJhdGUgaW4ga2JpdCBwZXIgc2Vjb25kIiwgMCwgR19NQVhJTlQsIDIwNDgs
Ci0gICAgICAgICAgKEdQYXJhbUZsYWdzKSAoR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NU
QVRJQ19TVFJJTkdTIHwKLSAgICAgICAgICAgICAgR19QQVJBTV9DT05TVFJVQ1QpKSk7Ci0KLSAg
Z19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAob2JqZWN0X2NsYXNzLCBQUk9QX0tFWUZS
QU1FX0lOVEVSVkFMLAotICAgICAgZ19wYXJhbV9zcGVjX3VpbnQgKCJrZXlmcmFtZS1pbnRlcnZh
bCIsICJLZXlmcmFtZSBpbnRlcnZhbCIsCi0gICAgICAgICAgIlRoZSBpbnRlcnZhbCBiZXR3ZWVu
IGtleWZyYW1lcyIsIDAsIEdfTUFYSU5ULCAwLAotICAgICAgICAgIChHUGFyYW1GbGFncykgKEdf
UEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUyB8Ci0gICAgICAgICAgICAg
IEdfUEFSQU1fQ09OU1RSVUNUKSkpOwotCi0gIHJlZ2lzdGVyX2tub3duX2VuY29kZXIgKEVOQ09E
RVJfT01YSDI2NCwgIm9teGgyNjRlbmMiLCAiaDI2NHBhcnNlIiwKLSAgICAgICJ2aWRlby94LWgy
NjQiLAotICAgICAgInZpZGVvL3gtaDI2NCxhbGlnbm1lbnQ9YXUsc3RyZWFtLWZvcm1hdD1ieXRl
LXN0cmVhbSxwcm9maWxlPWJhc2VsaW5lIiwKLSAgICAgIHNldHVwX29teGgyNjRlbmMsICJ0YXJn
ZXQtYml0cmF0ZSIsIHNldF9iaXRyYXRlX2JpdF9wZXJfc2VjLCAiaW50ZXJ2YWwtaW50cmFmcmFt
ZXMiKTsKLSAgcmVnaXN0ZXJfa25vd25fZW5jb2RlciAoRU5DT0RFUl9YMjY0LCAieDI2NGVuYyIs
ICJoMjY0cGFyc2UiLCAidmlkZW8veC1oMjY0IiwKLSAgICAgICJ2aWRlby94LWgyNjQsYWxpZ25t
ZW50PWF1LHN0cmVhbS1mb3JtYXQ9Ynl0ZS1zdHJlYW0scHJvZmlsZT1iYXNlbGluZSIsCi0gICAg
ICBzZXR1cF94MjY0ZW5jLCAiYml0cmF0ZSIsIHNldF9iaXRyYXRlX2tiaXRfcGVyX3NlYywgImtl
eS1pbnQtbWF4Iik7Ci0gIHJlZ2lzdGVyX2tub3duX2VuY29kZXIgKEVOQ09ERVJfT1BFTkgyNjQs
ICJvcGVuaDI2NGVuYyIsICJoMjY0cGFyc2UiLAotICAgICAgInZpZGVvL3gtaDI2NCIsCi0gICAg
ICAidmlkZW8veC1oMjY0LGFsaWdubWVudD1hdSxzdHJlYW0tZm9ybWF0PWJ5dGUtc3RyZWFtLHBy
b2ZpbGU9YmFzZWxpbmUiLAotICAgICAgc2V0dXBfb3BlbmgyNjRlbmMsICJiaXRyYXRlIiwgc2V0
X2JpdHJhdGVfYml0X3Blcl9zZWMsICJnb3Atc2l6ZSIpOworICAgIEdPYmplY3RDbGFzcyogb2Jq
ZWN0X2NsYXNzID0gR19PQkpFQ1RfQ0xBU1MgKGtsYXNzKTsKKworICAgIEdTVF9ERUJVR19DQVRF
R09SWV9JTklUICh3ZWJydGNfdmVuY19kZWJ1ZywgIndlYnJ0Y2VuY29kZXIiLCAwLCAiVmlkZW8g
ZW5jb2RlciBmb3IgV2ViUlRDIik7CisKKyAgICBvYmplY3RfY2xhc3MtPmdldF9wcm9wZXJ0eSA9
IHdlYnJ0Y1ZpZGVvRW5jb2RlckdldFByb3BlcnR5OworICAgIG9iamVjdF9jbGFzcy0+c2V0X3By
b3BlcnR5ID0gd2VicnRjVmlkZW9FbmNvZGVyU2V0UHJvcGVydHk7CisKKyAgICBnX29iamVjdF9j
bGFzc19pbnN0YWxsX3Byb3BlcnR5KG9iamVjdF9jbGFzcywgUFJPUF9GT1JNQVQsCisgICAgICAg
IGdfcGFyYW1fc3BlY19ib3hlZCgiZm9ybWF0IiwgIkZvcm1hdCBhcyBjYXBzIiwgIlNldCB0aGUg
Y2FwcyBvZiB0aGUgZm9ybWF0IHRvIGJlIHVzZWQuIiwgR1NUX1RZUEVfQ0FQUywKKyAgICAgICAg
c3RhdGljX2Nhc3Q8R1BhcmFtRmxhZ3M+KEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFU
SUNfU1RSSU5HUykpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkob2Jq
ZWN0X2NsYXNzLCBQUk9QX0VOQ09ERVIsCisgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoImVu
Y29kZXIiLCAiVGhlIGFjdHVhbCBlbmNvZGVyIGVsZW1lbnQiLCAiVGhlIGVuY29kZXIgZWxlbWVu
dCIsIEdTVF9UWVBFX0VMRU1FTlQsCisgICAgICAgIHN0YXRpY19jYXN0PEdQYXJhbUZsYWdzPihH
X1BBUkFNX1JFQURBQkxFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpKTsKKworICAgIGdfb2Jq
ZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkob2JqZWN0X2NsYXNzLCBQUk9QX0JJVFJBVEUsCisg
ICAgICAgIGdfcGFyYW1fc3BlY191aW50KCJiaXRyYXRlIiwgIkJpdHJhdGUiLCAgIlRoZSBiaXRy
YXRlIGluIGtiaXQgcGVyIHNlY29uZCIsIDAsIEdfTUFYSU5ULCAyMDQ4LAorICAgICAgICBzdGF0
aWNfY2FzdDxHUGFyYW1GbGFncz4oR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19T
VFJJTkdTIHwgR19QQVJBTV9DT05TVFJVQ1QpKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0
YWxsX3Byb3BlcnR5KG9iamVjdF9jbGFzcywgUFJPUF9LRVlGUkFNRV9JTlRFUlZBTCwKKyAgICAg
ICAgZ19wYXJhbV9zcGVjX3VpbnQoImtleWZyYW1lLWludGVydmFsIiwgIktleWZyYW1lIGludGVy
dmFsIiwgIlRoZSBpbnRlcnZhbCBiZXR3ZWVuIGtleWZyYW1lcyIsIDAsIEdfTUFYSU5ULCAwLAor
ICAgICAgICBzdGF0aWNfY2FzdDxHUGFyYW1GbGFncz4oR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BB
UkFNX1NUQVRJQ19TVFJJTkdTIHwgR19QQVJBTV9DT05TVFJVQ1QpKSk7CisKKyAgICBFbmNvZGVy
czo6cmVnaXN0ZXJFbmNvZGVyKE9teEgyNjQsICJvbXhoMjY0ZW5jIiwgImgyNjRwYXJzZSIsICJ2
aWRlby94LWgyNjQiLAorICAgICAgICAidmlkZW8veC1oMjY0LGFsaWdubWVudD1hdSxzdHJlYW0t
Zm9ybWF0PWJ5dGUtc3RyZWFtLHByb2ZpbGU9YmFzZWxpbmUiLAorICAgICAgICBzZXR1cE9teGgy
NjRlbmMsICJ0YXJnZXQtYml0cmF0ZSIsIHNldEJpdHJhdGVCaXRQZXJTZWMsICJpbnRlcnZhbC1p
bnRyYWZyYW1lcyIpOworICAgIEVuY29kZXJzOjpyZWdpc3RlckVuY29kZXIoWDI2NCwgIngyNjRl
bmMiLCAiaDI2NHBhcnNlIiwgInZpZGVvL3gtaDI2NCIsCisgICAgICAgICJ2aWRlby94LWgyNjQs
YWxpZ25tZW50PWF1LHN0cmVhbS1mb3JtYXQ9Ynl0ZS1zdHJlYW0scHJvZmlsZT1iYXNlbGluZSIs
CisgICAgICAgIHNldHVwWDI2NGVuYywgImJpdHJhdGUiLCBzZXRCaXRyYXRlS2JpdFBlclNlYywg
ImtleS1pbnQtbWF4Iik7CisgICAgRW5jb2RlcnM6OnJlZ2lzdGVyRW5jb2RlcihPcGVuSDI2NCwg
Im9wZW5oMjY0ZW5jIiwgImgyNjRwYXJzZSIsICJ2aWRlby94LWgyNjQiLAorICAgICAgICAidmlk
ZW8veC1oMjY0LGFsaWdubWVudD1hdSxzdHJlYW0tZm9ybWF0PWJ5dGUtc3RyZWFtLHByb2ZpbGU9
YmFzZWxpbmUiLAorICAgICAgICBzZXR1cE9wZW5oMjY0ZW5jLCAiYml0cmF0ZSIsIHNldEJpdHJh
dGVCaXRQZXJTZWMsICJnb3Atc2l6ZSIpOwogfQogCi1zdGF0aWMgdm9pZAotZ3N0X3dlYnJ0Y192
aWRlb19lbmNvZGVyX2luaXQgKEdzdFdlYnJ0Y1ZpZGVvRW5jb2RlciAqIHNlbGYpCitzdGF0aWMg
dm9pZCB3ZWJydGNfdmlkZW9fZW5jb2Rlcl9pbml0IChXZWJydGNWaWRlb0VuY29kZXIqIHNlbGYp
CiB7Ci0gIEdzdFdlYnJ0Y1ZpZGVvRW5jb2RlclByaXZhdGUgKnByaXYgPSBQUklWIChzZWxmKTsK
LQotICBwcml2LT5lbmNvZGVySWQgPSBFTkNPREVSX05PTkU7Ci0gIGdzdF9lbGVtZW50X2FkZF9w
YWQgKEdTVF9FTEVNRU5UIChzZWxmKSwKLSAgICAgIGdzdF9naG9zdF9wYWRfbmV3X25vX3Rhcmdl
dF9mcm9tX3RlbXBsYXRlICgic2luayIsCi0gICAgICAgICAgZ3N0X3N0YXRpY19wYWRfdGVtcGxh
dGVfZ2V0ICgmc2lua1RlbXBsYXRlKSkpOworICAgIHNlbGYtPmVuY29kZXJJZCA9IE5vbmU7Cisg
ICAgZ3N0X2VsZW1lbnRfYWRkX3BhZChHU1RfRUxFTUVOVChzZWxmKSwKKyAgICAgICAgZ3N0X2do
b3N0X3BhZF9uZXdfbm9fdGFyZ2V0X2Zyb21fdGVtcGxhdGUoInNpbmsiLCBnc3Rfc3RhdGljX3Bh
ZF90ZW1wbGF0ZV9nZXQoJnNpbmtUZW1wbGF0ZSkpKTsKIAotICBnc3RfZWxlbWVudF9hZGRfcGFk
IChHU1RfRUxFTUVOVCAoc2VsZiksCi0gICAgICBnc3RfZ2hvc3RfcGFkX25ld19ub190YXJnZXRf
ZnJvbV90ZW1wbGF0ZSAoInNyYyIsCi0gICAgICAgICAgZ3N0X3N0YXRpY19wYWRfdGVtcGxhdGVf
Z2V0ICgmc3JjVGVtcGxhdGUpKSk7CisgICAgZ3N0X2VsZW1lbnRfYWRkX3BhZChHU1RfRUxFTUVO
VChzZWxmKSwKKyAgICAgICAgZ3N0X2dob3N0X3BhZF9uZXdfbm9fdGFyZ2V0X2Zyb21fdGVtcGxh
dGUoInNyYyIsIGdzdF9zdGF0aWNfcGFkX3RlbXBsYXRlX2dldCgmc3JjVGVtcGxhdGUpKSk7CiB9
CiAKICNlbmRpZiAvLyBFTkFCTEUoVklERU8pICYmIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVT
RShMSUJXRUJSVEMpICYmIFVTRShHU1RSRUFNRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvR1N0cmVhbWVyVmlkZW9FbmNvZGVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvR1N0cmVhbWVy
VmlkZW9FbmNvZGVyLmgKaW5kZXggMTBlYTI1YzRlZWUzZTE4ZjE5ODE5MjhlOGQ0ZmUxNjQ0ZTVh
ZjFiMy4uMjVhYzQzZDBjN2M2YTYzYWYyODBkNDlkZGU3MTNmNDc3MDZiYjk0NCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbGlid2VicnRjL0dTdHJlYW1l
clZpZGVvRW5jb2Rlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L2xpYndlYnJ0Yy9HU3RyZWFtZXJWaWRlb0VuY29kZXIuaApAQCAtMjQsMTMgKzI0LDggQEAKIAog
R19CRUdJTl9ERUNMUwogCi0jZGVmaW5lIEdTVF9UWVBFX1dFQlJUQ19WSURFT19FTkNPREVSIChn
c3Rfd2VicnRjX3ZpZGVvX2VuY29kZXJfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCUlRDX1RZUEVf
VklERU9fRU5DT0RFUiAod2VicnRjX3ZpZGVvX2VuY29kZXJfZ2V0X3R5cGUoKSkKIAotR19ERUNM
QVJFX0RFUklWQUJMRV9UWVBFIChHc3RXZWJydGNWaWRlb0VuY29kZXIsIGdzdF93ZWJydGNfdmlk
ZW9fZW5jb2RlciwgR1NULCBXRUJSVENfVklERU9fRU5DT0RFUiwgR3N0QmluKQotCi1zdHJ1Y3Qg
X0dzdFdlYnJ0Y1ZpZGVvRW5jb2RlckNsYXNzCi17Ci0gIEdzdEJpbkNsYXNzIHBhcmVudF9jbGFz
czsKLX07CitHX0RFQ0xBUkVfRklOQUxfVFlQRSAoV2VicnRjVmlkZW9FbmNvZGVyLCB3ZWJydGNf
dmlkZW9fZW5jb2RlciwgV0VCUlRDLCBWSURFT19FTkNPREVSLCBHc3RCaW4pCiAKIEdfRU5EX0RF
Q0xTCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9saWJ3
ZWJydGMvR1N0cmVhbWVyVmlkZW9FbmNvZGVyRmFjdG9yeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvR1N0cmVhbWVyVmlkZW9FbmNvZGVyRmFjdG9y
eS5jcHAKaW5kZXggMDgwMzliY2Y5NTZmZDYwODA5MzYyYWU0NGVmNDM2YjFmNmY3MjE4ZC4uZTgw
MmI4NWY5NmM2ZjZkZjU5MzI4MDE2M2YwN2ZiZjI4MzhjNGQxZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbGlid2VicnRjL0dTdHJlYW1lclZpZGVvRW5j
b2RlckZhY3RvcnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L2xpYndlYnJ0Yy9HU3RyZWFtZXJWaWRlb0VuY29kZXJGYWN0b3J5LmNwcApAQCAtNTUsOCArNTUs
NiBAQAogR1NUX0RFQlVHX0NBVEVHT1JZKHdlYmtpdF93ZWJydGNlbmNfZGVidWcpOwogI2RlZmlu
ZSBHU1RfQ0FUX0RFRkFVTFQgd2Via2l0X3dlYnJ0Y2VuY19kZWJ1ZwogCi0jZGVmaW5lIEtCSVRf
VE9fQklUIDEwMjQKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBHU3RyZWFtZXJWaWRl
b0VuY29kZXIgOiBwdWJsaWMgd2VicnRjOjpWaWRlb0VuY29kZXIgewpAQCAtNTE2LDcgKzUxNCw3
IEBAIEdTdHJlYW1lclZpZGVvRW5jb2RlckZhY3Rvcnk6OkdTdHJlYW1lclZpZGVvRW5jb2RlckZh
Y3RvcnkoKQogCiAgICAgc3RkOjpjYWxsX29uY2UoZGVidWdSZWdpc3RlcmVkRmxhZywgW10gewog
ICAgICAgICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCh3ZWJraXRfd2VicnRjZW5jX2RlYnVnLCAi
d2Via2l0bGlid2VicnRjdmlkZW9lbmNvZGVyIiwgMCwgIldlYktpdCBXZWJSVEMgdmlkZW8gZW5j
b2RlciIpOwotICAgICAgICBnc3RfZWxlbWVudF9yZWdpc3RlcihudWxscHRyLCAid2VicnRjdmlk
ZW9lbmNvZGVyIiwgR1NUX1JBTktfUFJJTUFSWSwgR1NUX1RZUEVfV0VCUlRDX1ZJREVPX0VOQ09E
RVIpOworICAgICAgICBnc3RfZWxlbWVudF9yZWdpc3RlcihudWxscHRyLCAid2VicnRjdmlkZW9l
bmNvZGVyIiwgR1NUX1JBTktfTk9ORSwgV0VCUlRDX1RZUEVfVklERU9fRU5DT0RFUik7CiAgICAg
fSk7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>414799</attachid>
            <date>2020-11-23 03:58:03 -0800</date>
            <delta_ts>2020-11-27 02:22:09 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-218748-20201123125801.patch</filename>
            <type>text/plain</type>
            <size>26571</size>
            <attacher name="Víctor M. Jáquez L.">vjaquez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcwMTY1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzIzYWI2YjRlNmM0NDFj
MDYzZWM1Mzg0YzZmOTA5NDdiZDFhNDY5ZC4uNzQ2NWJmZDdlOGUwM2U2MWQwZGJiMzA3N2Q3NjI2
MDk0NWZlZWQ4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3IEBACisyMDIwLTExLTEwICBWw61j
dG9yIE1hbnVlbCBKw6FxdWV6IExlYWwgIDx2amFxdWV6QGlnYWxpYS5jb20+CisKKyAgICAgICAg
W0dTdHJlYW1lcl0gcmVmYWN0b3IgdmlkZW8gZW5jb2RlciB3aXRoIFdlYktpdCBzdHlsZQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE4NzQ4CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgUGhpbGlwcGUgTm9ybWFuZC4KKworICAgICAgICBBcHBseSBXZWJL
aXQgY29kZSBzdHlsZSB0byBHU3RyZWFtZXJWaWRlb0VuY29kZXIKKworICAgICAgICBObyBuZXcg
dGVzdHMgcmVxdWlyZWQgc2luY2UgaXQncyBhIHJlZmFjdG9yLgorCisgICAgICAgICogcGxhdGZv
cm0vbWVkaWFzdHJlYW0vbGlid2VicnRjL0dTdHJlYW1lclZpZGVvRW5jb2Rlci5jcHA6CisgICAg
ICAgIChFbmNvZGVyczo6c2luZ2xldG9uKTogSW5zdGVhZCBvZiBhbiBhcnJheSB3aXRoIHRoZSBh
dmFpbGFibGUgZW5jb2RlcnMsIGEgc2luZ2xldG9uIG1hcCBpcworICAgICAgICB1c2VkLCB3aXRo
IGJldHRlciBtZW1vcnkgaGFuZGxpbmcuCisgICAgICAgIChFbmNvZGVyczo6cmVnaXN0ZXJFbmNv
ZGVyKTogc3RhdGljIG1ldGhvZCB0byByZWdpc3RlciBhIHBvc3NpYmxlIGVuY29kZXIgdG8gaGFu
ZGxlCisgICAgICAgIChFbmNvZGVyczo6ZGVmaW5pdGlvbik6IGdldHRlcgorICAgICAgICAod2Vi
cnRjVmlkZW9FbmNvZGVyR2V0UHJvcGVydHkpOiByZW5hbWVkCisgICAgICAgICh3ZWJydGNWaWRl
b0VuY29kZXJTZXRCaXRyYXRlKTogcmVuYW1lZAorICAgICAgICAod2VicnRjVmlkZW9FbmNvZGVy
U2V0Rm9ybWF0KTogVXNlIGdldHRlciBmb3Igc3RhdGljIHBhZHM7IEdSZWZQdHIgZm9yIG1lbW9y
eSBoYW5kbGluZzsKKyAgICAgICAgZG9uJ3QgY2FsbCBnc3RfZ2hvc3RfcGFkX3NldF90YXJnZXQo
KSBpbnNpZGUgYSBnX2Fzc2VydCBzaW5jZSBpdCBjYW4gYmUgZGlzYWJsZWQuCisgICAgICAgICh3
ZWJydGNWaWRlb0VuY29kZXJTZXRQcm9wZXJ0eSk6IHJlbmFtZWQKKyAgICAgICAgKHNldHVwWDI2
NGVuYyk6IHJlbmFtZWQKKyAgICAgICAgKHNldHVwT3BlbmgyNjRlbmMpOiByZW5hbWVkCisgICAg
ICAgIChzZXR1cE9teGgyNjRlbmMpOiByZW5hbWVkCisgICAgICAgIChzZXRCaXRyYXRlS2JpdFBl
clNlYyk6IHJlbmFtZWQKKyAgICAgICAgKHNldEJpdHJhdGVCaXRQZXJTZWMpOiByZW5hbWVkCisg
ICAgICAgICh3ZWJydGNfdmlkZW9fZW5jb2Rlcl9jbGFzc19pbml0KTogcmVuYW1lZAorICAgICAg
ICAod2VicnRjX3ZpZGVvX2VuY29kZXJfaW5pdCk6IHJlbmFtZWQKKyAgICAgICAgKiBwbGF0Zm9y
bS9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvR1N0cmVhbWVyVmlkZW9FbmNvZGVyLmg6IHVzZSBHX0RF
Q0xBUkVfRklOQUxfVFlQRSBtYWNybyBhbmQKKyAgICAgICAgY2hhbmdlIHRoZSBuYW1lIG9mIHRo
ZSBnbGliIHR5cGUgdG8gV0VCUlRDX1RZUEVfVklERU9fRU5DT0RFUgorICAgICAgICAqIHBsYXRm
b3JtL21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9HU3RyZWFtZXJWaWRlb0VuY29kZXJGYWN0b3J5LmNw
cDogcmVtb3ZlIHVudXNlZCBtYWNybworICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyVmlkZW9F
bmNvZGVyRmFjdG9yeTo6R1N0cmVhbWVyVmlkZW9FbmNvZGVyRmFjdG9yeSk6IERvbid0IHJlZ2lz
dGVyIHRoZQorICAgICAgICBlbGVtZW50IGFzIHByaW1hcnksIGJ1dCBub25lLgorCiAyMDIwLTEx
LTIyICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KIAogICAgICAgICBbTEZDXVtJ
bnRlZ3JhdGlvbl0gQ29udmVydCBzb21lIHJlbWFpbmluZyBJbmxpbmVCb3ggYWNjZXNzIHRvIHVz
ZSBpbmxpbmUgaXRlcmF0b3IKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL2xpYndlYnJ0Yy9HU3RyZWFtZXJWaWRlb0VuY29kZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbGlid2VicnRjL0dTdHJlYW1lclZpZGVvRW5jb2Rl
ci5jcHAKaW5kZXggNmExZDRhN2E0MTAyNWQ3ZTU1YmUyYTY0OGMwZWU2ODBhZjc1ZGVkMC4uNTU4
ODM4M2ZhNmYxYzMyNWQ2NGRkM2JjYzg2MGYyZTA0ZmQzM2E5YiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbGlid2VicnRjL0dTdHJlYW1lclZpZGVvRW5j
b2Rlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbGlid2Vi
cnRjL0dTdHJlYW1lclZpZGVvRW5jb2Rlci5jcHAKQEAgLTEsNiArMSw2IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE4IE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTggSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxOC0yMDIwIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgt
MjAyMCBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CkBAIC0yMiwzNDQgKzIyLDI4MSBAQAogICogdGhhdCBlbGVtZW50IGluIHRoZSBmdXR1cmUgKi8K
IAogI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdTdHJlYW1lclZpZGVvRW5jb2Rlci5o
IgogCiAjaWYgRU5BQkxFKFZJREVPKSAmJiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoTElC
V0VCUlRDKSAmJiBVU0UoR1NUUkVBTUVSKQotI2luY2x1ZGUgIkdTdHJlYW1lclZpZGVvRW5jb2Rl
ci5oIgorI2luY2x1ZGUgIkdSZWZQdHJHU3RyZWFtZXIuaCIKKyNpbmNsdWRlIDx3dGYvU3RkTWFw
Lmg+CiAKLUdTVF9ERUJVR19DQVRFR09SWSAoZ3N0X3dlYnJ0Y2VuY19kZWJ1Zyk7Ci0jZGVmaW5l
IEdTVF9DQVRfREVGQVVMVCBnc3Rfd2VicnRjZW5jX2RlYnVnCitHU1RfREVCVUdfQ0FURUdPUlkg
KHdlYnJ0Y192ZW5jX2RlYnVnKTsKKyNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIHdlYnJ0Y192ZW5j
X2RlYnVnCiAKICNkZWZpbmUgS0JJVF9UT19CSVQgMTAyNAogCi1zdGF0aWMgR3N0U3RhdGljUGFk
VGVtcGxhdGUgc2lua1RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwK
LSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19D
QVBTICgidmlkZW8veC1yYXcoQU5ZKTsiKSk7CitzdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUg
c2lua1RlbXBsYXRlID0KKyAgICBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLCBHU1Rf
UEFEX1NJTkssIEdTVF9QQURfQUxXQVlTLCBHU1RfU1RBVElDX0NBUFMgKCJ2aWRlby94LXJhdyhB
TlkpOyIpKTsKK3N0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzcmNUZW1wbGF0ZSA9CisgICAg
R1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzcmMiLCBHU1RfUEFEX1NSQywgR1NUX1BBRF9BTFdB
WVMsIEdTVF9TVEFUSUNfQ0FQUyAoInZpZGVvL3gtaDI2NDt2aWRlby94LXZwOCIpKTsKKwordHlw
ZWRlZiB2b2lkICgqU2V0Qml0cmF0ZUZ1bmMpIChHT2JqZWN0ICogZW5jb2RlciwgY29uc3QgZ2No
YXIgKiBwcm9wbmFtZSwgIGdpbnQgYml0cmF0ZSk7Cit0eXBlZGVmIHZvaWQgKCpTZXR1cEZ1bmMp
IChXZWJydGNWaWRlb0VuY29kZXIgKiBzZWxmKTsKKworc3RydWN0IEVuY29kZXJEZWZpbml0aW9u
IHsKKyAgICBHUmVmUHRyPEdzdENhcHM+IGNhcHM7CisgICAgY29uc3QgZ2NoYXIqIG5hbWU7Cisg
ICAgY29uc3QgZ2NoYXIqIHBhcnNlck5hbWU7CisgICAgR1JlZlB0cjxHc3RDYXBzPiBlbmNvZGVk
Rm9ybWF0OworICAgIFNldEJpdHJhdGVGdW5jIHNldEJpdHJhdGU7CisgICAgU2V0dXBGdW5jIHNl
dHVwRW5jb2RlcjsKKyAgICBjb25zdCBnY2hhciogYml0cmF0ZVByb3BlcnR5TmFtZTsKKyAgICBj
b25zdCBnY2hhcioga2V5ZnJhbWVJbnRlcnZhbFByb3BlcnR5TmFtZTsKK307CiAKLXN0YXRpYyBH
c3RTdGF0aWNQYWRUZW1wbGF0ZSBzcmNUZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRF
ICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1Rf
U1RBVElDX0NBUFMgKCJ2aWRlby94LWgyNjQ7dmlkZW8veC12cDgiKSk7CitlbnVtIEVuY29kZXJJ
ZCB7IE5vbmUsIFgyNjQsIE9wZW5IMjY0LCBPbXhIMjY0LCBWcDggfTsKIAotdHlwZWRlZiB2b2lk
ICgqU2V0Qml0cmF0ZUZ1bmMpIChHT2JqZWN0ICogZW5jb2RlciwgY29uc3QgZ2NoYXIgKiBwcm9w
bmFtZSwKLSAgICBnaW50IGJpdHJhdGUpOwotdHlwZWRlZiB2b2lkICgqU2V0dXBGdW5jKSAoR3N0
V2VicnRjVmlkZW9FbmNvZGVyICogc2VsZik7Ci10eXBlZGVmIHN0cnVjdAotewotICBnYm9vbGVh
biBhdmFsYWlibGU7Ci0gIEdzdENhcHMgKmNhcHM7Ci0gIGNvbnN0IGdjaGFyICpuYW1lOwotICBj
b25zdCBnY2hhciAqcGFyc2VyX25hbWU7Ci0gIEdzdENhcHMgKmVuY29kZWRfZm9ybWF0OwotICBT
ZXRCaXRyYXRlRnVuYyBzZXRCaXRyYXRlOwotICBTZXR1cEZ1bmMgc2V0dXBFbmNvZGVyOwotICBj
b25zdCBnY2hhciAqYml0cmF0ZV9wcm9wbmFtZTsKLSAgY29uc3QgZ2NoYXIgKmtleWZyYW1lX2lu
dGVydmFsX3Byb3BuYW1lOwotfSBFbmNvZGVyRGVmaW5pdGlvbjsKLQotdHlwZWRlZiBlbnVtCi17
Ci0gIEVOQ09ERVJfTk9ORSA9IDAsCi0gIEVOQ09ERVJfWDI2NCwKLSAgRU5DT0RFUl9PUEVOSDI2
NCwKLSAgRU5DT0RFUl9PTVhIMjY0LAotICBFTkNPREVSX1ZQOCwKLSAgRU5DT0RFUl9MQVNULAot
fSBFbmNvZGVySWQ7CitjbGFzcyBFbmNvZGVycyB7CitwdWJsaWM6CisgICAgc3RhdGljIFN0ZE1h
cDxFbmNvZGVySWQsIEVuY29kZXJEZWZpbml0aW9uPiYgc2luZ2xldG9uKCkKKyAgICB7CisgICAg
ICAgIHN0YXRpYyBTdGRNYXA8RW5jb2RlcklkLCBFbmNvZGVyRGVmaW5pdGlvbj4gZW5jb2RlcnM7
CisgICAgICAgIHJldHVybiBlbmNvZGVyczsKKyAgICB9CiAKLUVuY29kZXJEZWZpbml0aW9uIGVu
Y29kZXJzW0VOQ09ERVJfTEFTVF0gPSB7IHsgfSB9OworICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVy
RW5jb2RlcihFbmNvZGVySWQgaWQsIGNvbnN0IGdjaGFyKiBuYW1lLCBjb25zdCBnY2hhciogcGFy
c2VyX25hbWUsIGNvbnN0IGdjaGFyKiBjYXBzLCBjb25zdCBnY2hhciogZW5jb2RlZF9mb3JtYXQs
CisgICAgICAgIFNldHVwRnVuYyBzZXR1cEVuY29kZXIsIGNvbnN0IGdjaGFyKiBiaXRyYXRlX3By
b3BuYW1lLCBTZXRCaXRyYXRlRnVuYyBzZXRCaXRyYXRlLCBjb25zdCBnY2hhcioga2V5ZnJhbWVf
aW50ZXJ2YWxfcHJvcG5hbWUpCisgICAgeworICAgICAgICBHc3RQbHVnaW5GZWF0dXJlICpmZWF0
dXJlID0gZ3N0X3JlZ2lzdHJ5X2xvb2t1cF9mZWF0dXJlKGdzdF9yZWdpc3RyeV9nZXQoKSwgbmFt
ZSk7CisgICAgICAgIGlmICghZmVhdHVyZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
Z3N0X29iamVjdF91bnJlZihmZWF0dXJlKTsKKworICAgICAgICBzaW5nbGV0b24oKS5lbXBsYWNl
KHN0ZDo6bWFrZV9wYWlyKGlkLCAoRW5jb2RlckRlZmluaXRpb24pIHsKKyAgICAgICAgICAgIC5j
YXBzID0gYWRvcHRHUmVmKGdzdF9jYXBzX2Zyb21fc3RyaW5nKGNhcHMpKSwKKyAgICAgICAgICAg
IC5uYW1lID0gbmFtZSwKKyAgICAgICAgICAgIC5wYXJzZXJOYW1lID0gcGFyc2VyX25hbWUsCisg
ICAgICAgICAgICAuZW5jb2RlZEZvcm1hdCA9IChlbmNvZGVkX2Zvcm1hdCkgPyBhZG9wdEdSZWYo
Z3N0X2NhcHNfZnJvbV9zdHJpbmcoZW5jb2RlZF9mb3JtYXQpKSA6IG51bGxwdHIsCisgICAgICAg
ICAgICAuc2V0Qml0cmF0ZSA9IHNldEJpdHJhdGUsCisgICAgICAgICAgICAuc2V0dXBFbmNvZGVy
ID0gc2V0dXBFbmNvZGVyLAorICAgICAgICAgICAgLmJpdHJhdGVQcm9wZXJ0eU5hbWUgPSBiaXRy
YXRlX3Byb3BuYW1lLAorICAgICAgICAgICAgLmtleWZyYW1lSW50ZXJ2YWxQcm9wZXJ0eU5hbWUg
PSBrZXlmcmFtZV9pbnRlcnZhbF9wcm9wbmFtZSwKKyAgICAgICAgfSkpOworICAgIH0KIAotdHlw
ZWRlZiBzdHJ1Y3QKLXsKLSAgRW5jb2RlcklkIGVuY29kZXJJZDsKLSAgR3N0RWxlbWVudCAqZW5j
b2RlcjsKLSAgR3N0RWxlbWVudCAqcGFyc2VyOwotICBHc3RFbGVtZW50ICpjYXBzZmlsdGVyOwot
ICBndWludCBiaXRyYXRlOwotfSBHc3RXZWJydGNWaWRlb0VuY29kZXJQcml2YXRlOwotCi0vKiAg
KklOREVOVC1PRkYqICovCi1HX0RFRklORV9UWVBFX1dJVEhfUFJJVkFURSAoR3N0V2VicnRjVmlk
ZW9FbmNvZGVyLCBnc3Rfd2VicnRjX3ZpZGVvX2VuY29kZXIsCi0gICAgR1NUX1RZUEVfQklOKQot
I2RlZmluZSBQUklWKHNlbGYpICgoR3N0V2VicnRjVmlkZW9FbmNvZGVyUHJpdmF0ZSopZ3N0X3dl
YnJ0Y192aWRlb19lbmNvZGVyX2dldF9pbnN0YW5jZV9wcml2YXRlKHNlbGYpKQotLyogICpJTkRF
TlQtT04qICovCi0KLWVudW0KLXsKLSAgUFJPUF8wLAotICBQUk9QX0ZPUk1BVCwKLSAgUFJPUF9F
TkNPREVSLAotICBQUk9QX0JJVFJBVEUsCi0gIFBST1BfS0VZRlJBTUVfSU5URVJWQUwsCi0gIE5f
UFJPUFMKKyAgICBzdGF0aWMgY29uc3QgRW5jb2RlckRlZmluaXRpb24mIGRlZmluaXRpb24oRW5j
b2RlcklkIGlkKSB7CisgICAgICAgIEFTU0VSVChpZCAhPSBOb25lKTsKKyAgICAgICAgcmV0dXJu
IHNpbmdsZXRvbigpW2lkXTsKKyAgICB9CiB9OwogCi1zdGF0aWMgdm9pZAotZ3N0X3dlYnJ0Y192
aWRlb19lbmNvZGVyX2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KQotewotICBHX09CSkVDVF9D
TEFTUyAoZ3N0X3dlYnJ0Y192aWRlb19lbmNvZGVyX3BhcmVudF9jbGFzcyktPmZpbmFsaXplIChv
YmplY3QpOwotfQorc3RydWN0IF9XZWJydGNWaWRlb0VuY29kZXIgeworICAgIEdzdEJpbiBwYXJl
bnQ7CisKKyAgICBFbmNvZGVySWQgZW5jb2RlcklkOworICAgIEdzdEVsZW1lbnQqIGVuY29kZXI7
CisgICAgR3N0RWxlbWVudCogcGFyc2VyOworICAgIGd1aW50IGJpdHJhdGU7Cit9OworCitHX0RF
RklORV9UWVBFKFdlYnJ0Y1ZpZGVvRW5jb2Rlciwgd2VicnRjX3ZpZGVvX2VuY29kZXIsIEdTVF9U
WVBFX0JJTik7CisKK2VudW0geworICAgICBQUk9QX0ZPUk1BVCA9IDEsCisgICAgIFBST1BfRU5D
T0RFUiwKKyAgICAgUFJPUF9CSVRSQVRFLAorICAgICBQUk9QX0tFWUZSQU1FX0lOVEVSVkFMLAor
ICAgICBOX1BST1BTCit9OwogCi1zdGF0aWMgdm9pZAotZ3N0X3dlYnJ0Y192aWRlb19lbmNvZGVy
X2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwKLSAgICBndWludCBwcm9wX2lkLCBHVmFs
dWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQorc3RhdGljIHZvaWQgd2VicnRjVmlkZW9F
bmNvZGVyR2V0UHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wX2lkLCBHVmFsdWUq
IHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKIHsKLSAgR3N0V2VicnRjVmlkZW9FbmNvZGVyICpz
ZWxmID0gR1NUX1dFQlJUQ19WSURFT19FTkNPREVSIChvYmplY3QpOwotICBHc3RXZWJydGNWaWRl
b0VuY29kZXJQcml2YXRlICpwcml2ID0gUFJJViAoc2VsZik7CisgICAgV2VicnRjVmlkZW9FbmNv
ZGVyKiBzZWxmID0gV0VCUlRDX1ZJREVPX0VOQ09ERVIob2JqZWN0KTsKIAotICBzd2l0Y2ggKHBy
b3BfaWQpIHsKKyAgICBzd2l0Y2ggKHByb3BfaWQpIHsKICAgICBjYXNlIFBST1BfRk9STUFUOgot
ICAgICAgaWYgKHByaXYtPmVuY29kZXJJZCAhPSBFTkNPREVSX05PTkUpCi0gICAgICAgIGdfdmFs
dWVfc2V0X2JveGVkICh2YWx1ZSwgZW5jb2RlcnNbcHJpdi0+ZW5jb2RlcklkXS5jYXBzKTsKLSAg
ICAgIGVsc2UKLSAgICAgICAgZ192YWx1ZV9zZXRfYm94ZWQgKHZhbHVlLCBOVUxMKTsKLSAgICAg
IGJyZWFrOworICAgICAgICBpZiAoc2VsZi0+ZW5jb2RlcklkICE9IE5vbmUpIHsKKyAgICAgICAg
ICAgIGF1dG8gJmVuY29kZXIgPSBFbmNvZGVyczo6ZGVmaW5pdGlvbihzZWxmLT5lbmNvZGVySWQp
OworICAgICAgICAgICAgZ192YWx1ZV9zZXRfYm94ZWQodmFsdWUsIGVuY29kZXIuY2Fwcy5nZXQo
KSk7CisgICAgICAgIH0gIGVsc2UKKyAgICAgICAgICAgIGdfdmFsdWVfc2V0X2JveGVkKHZhbHVl
LCBudWxscHRyKTsKKyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBQUk9QX0VOQ09ERVI6Ci0gICAg
ICBnX3ZhbHVlX3NldF9vYmplY3QgKHZhbHVlLCBwcml2LT5lbmNvZGVyKTsKLSAgICAgIGJyZWFr
OworICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHNlbGYtPmVuY29kZXIpOworICAg
ICAgICBicmVhazsKICAgICBjYXNlIFBST1BfQklUUkFURToKLSAgICAgIGdfdmFsdWVfc2V0X3Vp
bnQgKHZhbHVlLCBwcml2LT5iaXRyYXRlKTsKLSAgICAgIGJyZWFrOworICAgICAgICBnX3ZhbHVl
X3NldF91aW50KHZhbHVlLCBzZWxmLT5iaXRyYXRlKTsKKyAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBQUk9QX0tFWUZSQU1FX0lOVEVSVkFMOgotICAgICAgaWYgKHByaXYtPmVuY29kZXIpCi0gICAg
ICAgIGdfb2JqZWN0X2dldF9wcm9wZXJ0eSAoR19PQkpFQ1QgKHByaXYtPmVuY29kZXIpLAotICAg
ICAgICAgICAgZW5jb2RlcnNbcHJpdi0+ZW5jb2RlcklkXS5rZXlmcmFtZV9pbnRlcnZhbF9wcm9w
bmFtZSwgdmFsdWUpOwotICAgICAgYnJlYWs7CisgICAgICAgIGlmIChzZWxmLT5lbmNvZGVyKSB7
CisgICAgICAgICAgICBhdXRvICZlbmNvZGVyID0gRW5jb2RlcnM6OmRlZmluaXRpb24oc2VsZi0+
ZW5jb2RlcklkKTsKKyAgICAgICAgICAgIGdfb2JqZWN0X2dldF9wcm9wZXJ0eShHX09CSkVDVChz
ZWxmLT5lbmNvZGVyKSwgZW5jb2Rlci5rZXlmcmFtZUludGVydmFsUHJvcGVydHlOYW1lLCB2YWx1
ZSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKLSAgICAgIEdfT0JK
RUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Cisg
ICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BfaWQs
IHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CiAgIH0KIH0KIAotc3RhdGljIHZvaWQKLWdzdF93ZWJy
dGNfdmlkZW9fZW5jb2Rlcl9zZXRfYml0cmF0ZSAoR3N0V2VicnRjVmlkZW9FbmNvZGVyICogc2Vs
ZiwKLSAgICBndWludCBiaXRyYXRlKQorc3RhdGljIHZvaWQgd2VicnRjVmlkZW9FbmNvZGVyU2V0
Qml0cmF0ZShXZWJydGNWaWRlb0VuY29kZXIqIHNlbGYsIGd1aW50IGJpdHJhdGUpCiB7Ci0gIEdz
dFdlYnJ0Y1ZpZGVvRW5jb2RlclByaXZhdGUgKnByaXYgPSBQUklWIChzZWxmKTsKLQotICBwcml2
LT5iaXRyYXRlID0gYml0cmF0ZTsKLSAgaWYgKHByaXYtPmVuY29kZXIpIHsKLSAgICBlbmNvZGVy
c1twcml2LT5lbmNvZGVySWRdLnNldEJpdHJhdGUgKEdfT0JKRUNUIChwcml2LT5lbmNvZGVyKSwK
LSAgICAgICAgZW5jb2RlcnNbcHJpdi0+ZW5jb2RlcklkXS5iaXRyYXRlX3Byb3BuYW1lLCBwcml2
LT5iaXRyYXRlKTsKLSAgfQorICAgIHNlbGYtPmJpdHJhdGUgPSBiaXRyYXRlOworICAgIGlmIChz
ZWxmLT5lbmNvZGVyKSB7CisgICAgICAgIGF1dG8gJmVuY29kZXIgPSBFbmNvZGVyczo6ZGVmaW5p
dGlvbihzZWxmLT5lbmNvZGVySWQpOworICAgICAgICBlbmNvZGVyLnNldEJpdHJhdGUoR19PQkpF
Q1Qoc2VsZi0+ZW5jb2RlciksIGVuY29kZXIuYml0cmF0ZVByb3BlcnR5TmFtZSwgc2VsZi0+Yml0
cmF0ZSk7CisgICAgfQogfQogCi1zdGF0aWMgdm9pZAotZ3N0X3dlYnJ0Y192aWRlb19lbmNvZGVy
X3NldF9mb3JtYXQgKEdzdFdlYnJ0Y1ZpZGVvRW5jb2RlciAqIHNlbGYsCi0gICAgY29uc3QgR3N0
Q2FwcyAqIGNhcHMpCitzdGF0aWMgdm9pZCB3ZWJydGNWaWRlb0VuY29kZXJTZXRGb3JtYXQoV2Vi
cnRjVmlkZW9FbmNvZGVyKiBzZWxmLCBjb25zdCBHc3RDYXBzKiBjYXBzKQogewotICBnaW50IGk7
Ci0gIEdzdFdlYnJ0Y1ZpZGVvRW5jb2RlclByaXZhdGUgKnByaXYgPSBQUklWIChzZWxmKTsKLSAg
Z19yZXR1cm5faWZfZmFpbCAocHJpdi0+ZW5jb2RlcklkID09IEVOQ09ERVJfTk9ORSk7Ci0gIGdf
cmV0dXJuX2lmX2ZhaWwgKGNhcHMpOwotCi0gIGZvciAoaSA9IDE7IGkgPCBFTkNPREVSX0xBU1Q7
IGkrKykgewotICAgIGlmIChlbmNvZGVyc1tpXS5hdmFsYWlibGUKLSAgICAgICAgJiYgZ3N0X2Nh
cHNfY2FuX2ludGVyc2VjdCAoZW5jb2RlcnNbaV0uY2FwcywgY2FwcykpIHsKLSAgICAgIEdzdFBh
ZCAqdG1wcGFkOwotICAgICAgcHJpdi0+ZW5jb2RlcklkID0gKEVuY29kZXJJZCkgaTsKLSAgICAg
IHByaXYtPmVuY29kZXIgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKGVuY29kZXJzW2ldLm5h
bWUsIE5VTEwpOwotCi0gICAgICBpZiAoZW5jb2RlcnNbaV0ucGFyc2VyX25hbWUpCi0gICAgICAg
IHByaXYtPnBhcnNlciA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoZW5jb2RlcnNbaV0ucGFy
c2VyX25hbWUsIE5VTEwpOwotCi0gICAgICBlbmNvZGVyc1twcml2LT5lbmNvZGVySWRdLnNldHVw
RW5jb2RlciAoc2VsZik7Ci0gICAgICBpZiAoZW5jb2RlcnNbaV0uZW5jb2RlZF9mb3JtYXQpIHsK
LSAgICAgICAgcHJpdi0+Y2Fwc2ZpbHRlciA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImNh
cHNmaWx0ZXIiLCBOVUxMKTsKLSAgICAgICAgZ19vYmplY3Rfc2V0IChwcml2LT5jYXBzZmlsdGVy
LCAiY2FwcyIsIGVuY29kZXJzW2ldLmVuY29kZWRfZm9ybWF0LAotICAgICAgICAgICAgTlVMTCk7
Ci0gICAgICB9Ci0KLSAgICAgIGdzdF9iaW5fYWRkIChHU1RfQklOIChzZWxmKSwgcHJpdi0+ZW5j
b2Rlcik7Ci0KLSAgICAgIHRtcHBhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChwcml2
LT5lbmNvZGVyLCAic2luayIpOwotICAgICAgZ3N0X2dob3N0X3BhZF9zZXRfdGFyZ2V0IChHU1Rf
R0hPU1RfUEFEIChHU1RfRUxFTUVOVCAoc2VsZiktPgotICAgICAgICAgICAgICBzaW5rcGFkcy0+
ZGF0YSksIHRtcHBhZCk7Ci0gICAgICBnc3Rfb2JqZWN0X3VucmVmICh0bXBwYWQpOwotCi0gICAg
ICB0bXBwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAocHJpdi0+ZW5jb2RlciwgInNy
YyIpOwotICAgICAgaWYgKHByaXYtPnBhcnNlcikgewotICAgICAgICBnc3RfYmluX2FkZCAoR1NU
X0JJTiAoc2VsZiksIHByaXYtPnBhcnNlcik7Ci0gICAgICAgIGdzdF9lbGVtZW50X2xpbmsgKHBy
aXYtPmVuY29kZXIsIHByaXYtPnBhcnNlcik7Ci0gICAgICAgIGdzdF9vYmplY3RfdW5yZWYgKHRt
cHBhZCk7Ci0gICAgICAgIHRtcHBhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChwcml2
LT5wYXJzZXIsICJzcmMiKTsKLSAgICAgIH0KLQotICAgICAgaWYgKHByaXYtPmNhcHNmaWx0ZXIp
IHsKLSAgICAgICAgR3N0UGFkICp0bXBwYWQyID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQg
KHByaXYtPmNhcHNmaWx0ZXIsICJzaW5rIik7Ci0KLSAgICAgICAgZ3N0X2Jpbl9hZGQgKEdTVF9C
SU4gKHNlbGYpLCBwcml2LT5jYXBzZmlsdGVyKTsKLSAgICAgICAgZ3N0X3BhZF9saW5rICh0bXBw
YWQsIHRtcHBhZDIpOwotICAgICAgICBnc3Rfb2JqZWN0X3VucmVmICh0bXBwYWQpOwotICAgICAg
ICB0bXBwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAocHJpdi0+Y2Fwc2ZpbHRlciwg
InNyYyIpOwotICAgICAgICBnc3Rfb2JqZWN0X3VucmVmICh0bXBwYWQyKTsKLSAgICAgIH0KLQot
ICAgICAgZ19hc3NlcnQgKGdzdF9naG9zdF9wYWRfc2V0X3RhcmdldCAoR1NUX0dIT1NUX1BBRCAo
R1NUX0VMRU1FTlQKLSAgICAgICAgICAgICAgICAgIChzZWxmKS0+c3JjcGFkcy0+ZGF0YSksIHRt
cHBhZCkpOwotICAgICAgZ3N0X29iamVjdF91bnJlZiAodG1wcGFkKTsKLQotICAgICAgZ3N0X3dl
YnJ0Y192aWRlb19lbmNvZGVyX3NldF9iaXRyYXRlIChzZWxmLCBwcml2LT5iaXRyYXRlKTsKLSAg
ICAgIHJldHVybjsKKyAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYtPmVuY29kZXJJZCA9PSBOb25l
KTsKKyAgICBnX3JldHVybl9pZl9mYWlsKGNhcHMpOworCisgICAgZm9yIChjb25zdCBhdXRvICZw
YWlyIDogRW5jb2RlcnM6OnNpbmdsZXRvbigpKSB7CisgICAgICAgIGNvbnN0IGF1dG8gJmVuY29k
ZXIgPSBwYWlyLnNlY29uZDsKKyAgICAgICAgR3N0RWxlbWVudCogY2Fwc2ZpbHRlciA9IG51bGxw
dHI7CisKKyAgICAgICAgaWYgKGdzdF9jYXBzX2Nhbl9pbnRlcnNlY3QoZW5jb2Rlci5jYXBzLmdl
dCgpLCBjYXBzKSkgeworICAgICAgICAgICAgR1JlZlB0cjxHc3RQYWQ+IHRtcHBhZDsKKyAgICAg
ICAgICAgIHNlbGYtPmVuY29kZXJJZCA9IHBhaXIuZmlyc3Q7CisgICAgICAgICAgICBzZWxmLT5l
bmNvZGVyID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKGVuY29kZXIubmFtZSwgbnVsbHB0cik7
CisKKyAgICAgICAgICAgIGlmIChlbmNvZGVyLnBhcnNlck5hbWUpCisgICAgICAgICAgICAgICAg
c2VsZi0+cGFyc2VyID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKGVuY29kZXIucGFyc2VyTmFt
ZSwgbnVsbHB0cik7CisKKyAgICAgICAgICAgIGVuY29kZXIuc2V0dXBFbmNvZGVyKHNlbGYpOwor
ICAgICAgICAgICAgaWYgKGVuY29kZXIuZW5jb2RlZEZvcm1hdC5nZXQoKSkgeworICAgICAgICAg
ICAgICAgIGNhcHNmaWx0ZXIgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoImNhcHNmaWx0ZXIi
LCBudWxscHRyKTsKKyAgICAgICAgICAgICAgICBnX29iamVjdF9zZXQoY2Fwc2ZpbHRlciwgImNh
cHMiLCBlbmNvZGVyLmVuY29kZWRGb3JtYXQuZ2V0KCksIG51bGxwdHIpOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBnc3RfYmluX2FkZChHU1RfQklOKHNlbGYpLCBzZWxmLT5lbmNvZGVy
KTsKKworICAgICAgICAgICAgdG1wcGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0
aWNfcGFkKHNlbGYtPmVuY29kZXIsICJzaW5rIikpOworICAgICAgICAgICAgR1JlZlB0cjxHc3RQ
YWQ+IHNpbmtwYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQoR1NUX0VM
RU1FTlQoc2VsZiksICJzaW5rIikpOworICAgICAgICAgICAgZ3N0X2dob3N0X3BhZF9zZXRfdGFy
Z2V0KEdTVF9HSE9TVF9QQUQoc2lua3BhZC5nZXQoKSksIHRtcHBhZC5nZXQoKSk7CisKKyAgICAg
ICAgICAgIHRtcHBhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZChzZWxm
LT5lbmNvZGVyLCAic3JjIikpOworICAgICAgICAgICAgaWYgKHNlbGYtPnBhcnNlcikgeworICAg
ICAgICAgICAgICAgIGdzdF9iaW5fYWRkKEdTVF9CSU4oc2VsZiksIHNlbGYtPnBhcnNlcik7Cisg
ICAgICAgICAgICAgICAgZ3N0X2VsZW1lbnRfbGluayhzZWxmLT5lbmNvZGVyLCBzZWxmLT5wYXJz
ZXIpOworICAgICAgICAgICAgICAgIHRtcHBhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRf
c3RhdGljX3BhZChzZWxmLT5wYXJzZXIsICJzcmMiKSk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGlmIChjYXBzZmlsdGVyKSB7CisgICAgICAgICAgICAgICAgR1JlZlB0cjxHc3RQYWQ+
IHRtcHBhZDIgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQoY2Fwc2ZpbHRl
ciwgInNpbmsiKSk7CisKKyAgICAgICAgICAgICAgICBnc3RfYmluX2FkZChHU1RfQklOKHNlbGYp
LCBjYXBzZmlsdGVyKTsKKyAgICAgICAgICAgICAgICBnc3RfcGFkX2xpbmsodG1wcGFkLmdldCgp
LCB0bXBwYWQyLmdldCgpKTsKKyAgICAgICAgICAgICAgICB0bXBwYWQgPSBhZG9wdEdSZWYoZ3N0
X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQoY2Fwc2ZpbHRlciwgInNyYyIpKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgR1JlZlB0cjxHc3RQYWQ+IHNyY3BhZCA9IGFkb3B0R1JlZihnc3Rf
ZWxlbWVudF9nZXRfc3RhdGljX3BhZChHU1RfRUxFTUVOVCAoc2VsZiksICJzcmMiKSk7CisgICAg
ICAgICAgICBnYm9vbGVhbiByZXQgPSBnc3RfZ2hvc3RfcGFkX3NldF90YXJnZXQoR1NUX0dIT1NU
X1BBRChzcmNwYWQuZ2V0KCkpLCB0bXBwYWQuZ2V0KCkpOworCisgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVChyZXQpOworCisgICAgICAgICAgICB3ZWJydGNWaWRlb0VuY29kZXJTZXRCaXRyYXRl
KHNlbGYsIHNlbGYtPmJpdHJhdGUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAg
ICAgfQotICB9CiAKLSAgR1NUX0VSUk9SICgiTm8gZW5jb2RlciBmb3VuZCBmb3IgZm9ybWF0ICUi
IEdTVF9QVFJfRk9STUFULCBjYXBzKTsKKyAgICBHU1RfRVJST1IoIk5vIGVuY29kZXIgZm91bmQg
Zm9yIGZvcm1hdCAlIiBHU1RfUFRSX0ZPUk1BVCwgY2Fwcyk7CiB9CiAKLXN0YXRpYyB2b2lkCi1n
c3Rfd2VicnRjX3ZpZGVvX2VuY29kZXJfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LAot
ICAgIGd1aW50IHByb3BfaWQsIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNw
ZWMpCitzdGF0aWMgdm9pZCB3ZWJydGNWaWRlb0VuY29kZXJTZXRQcm9wZXJ0eShHT2JqZWN0KiBv
YmplY3QsIGd1aW50IHByb3BfaWQsIGNvbnN0IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBz
cGVjKQogewotICBHc3RXZWJydGNWaWRlb0VuY29kZXIgKnNlbGYgPSBHU1RfV0VCUlRDX1ZJREVP
X0VOQ09ERVIgKG9iamVjdCk7Ci0gIEdzdFdlYnJ0Y1ZpZGVvRW5jb2RlclByaXZhdGUgKnByaXYg
PSBQUklWIChzZWxmKTsKKyAgICBXZWJydGNWaWRlb0VuY29kZXIqIHNlbGYgPSBXRUJSVENfVklE
RU9fRU5DT0RFUihvYmplY3QpOwogCi0gIHN3aXRjaCAocHJvcF9pZCkgeworICAgIHN3aXRjaCAo
cHJvcF9pZCkgewogICAgIGNhc2UgUFJPUF9GT1JNQVQ6Ci0gICAgICBnc3Rfd2VicnRjX3ZpZGVv
X2VuY29kZXJfc2V0X2Zvcm1hdCAoc2VsZiwgZ3N0X3ZhbHVlX2dldF9jYXBzICh2YWx1ZSkpOwot
ICAgICAgYnJlYWs7CisgICAgICAgIHdlYnJ0Y1ZpZGVvRW5jb2RlclNldEZvcm1hdChzZWxmLCBn
c3RfdmFsdWVfZ2V0X2NhcHModmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBQUk9Q
X0JJVFJBVEU6Ci0gICAgICBnc3Rfd2VicnRjX3ZpZGVvX2VuY29kZXJfc2V0X2JpdHJhdGUgKHNl
bGYsIGdfdmFsdWVfZ2V0X3VpbnQgKHZhbHVlKSk7Ci0gICAgICBicmVhazsKKyAgICAgICAgd2Vi
cnRjVmlkZW9FbmNvZGVyU2V0Qml0cmF0ZShzZWxmLCBnX3ZhbHVlX2dldF91aW50KHZhbHVlKSk7
CisgICAgICAgIGJyZWFrOwogICAgIGNhc2UgUFJPUF9LRVlGUkFNRV9JTlRFUlZBTDoKLSAgICAg
IGlmIChwcml2LT5lbmNvZGVyKQotICAgICAgICBnX29iamVjdF9zZXQgKHByaXYtPmVuY29kZXIs
Ci0gICAgICAgICAgICBlbmNvZGVyc1twcml2LT5lbmNvZGVySWRdLmtleWZyYW1lX2ludGVydmFs
X3Byb3BuYW1lLAotICAgICAgICAgICAgZ192YWx1ZV9nZXRfdWludCAodmFsdWUpLCBOVUxMKTsK
LQotICAgICAgYnJlYWs7CisgICAgICAgIGlmIChzZWxmLT5lbmNvZGVyKSB7CisgICAgICAgICAg
ICBhdXRvICZlbmNvZGVyID0gRW5jb2RlcnM6OmRlZmluaXRpb24oc2VsZi0+ZW5jb2RlcklkKTsK
KyAgICAgICAgICAgIGdfb2JqZWN0X3NldChzZWxmLT5lbmNvZGVyLCBlbmNvZGVyLmtleWZyYW1l
SW50ZXJ2YWxQcm9wZXJ0eU5hbWUsIGdfdmFsdWVfZ2V0X3VpbnQodmFsdWUpLCBudWxscHRyKTsK
KyAgICAgICAgfQorICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1Rf
V0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgfQot
fQotCi1zdGF0aWMgdm9pZAotcmVnaXN0ZXJfa25vd25fZW5jb2RlciAoRW5jb2RlcklkIGVuY0lk
LCBjb25zdCBnY2hhciAqIG5hbWUsCi0gICAgY29uc3QgZ2NoYXIgKiBwYXJzZXJfbmFtZSwgY29u
c3QgZ2NoYXIgKiBjYXBzLCBjb25zdCBnY2hhciAqIGVuY29kZWRfZm9ybWF0LAotICAgIFNldHVw
RnVuYyBzZXR1cEVuY29kZXIsIGNvbnN0IGdjaGFyICogYml0cmF0ZV9wcm9wbmFtZSwKLSAgICBT
ZXRCaXRyYXRlRnVuYyBzZXRCaXRyYXRlLCBjb25zdCBnY2hhciAqIGtleWZyYW1lX2ludGVydmFs
X3Byb3BuYW1lKQotewotICBHc3RQbHVnaW5GZWF0dXJlICpmZWF0dXJlID0KLSAgICAgIGdzdF9y
ZWdpc3RyeV9sb29rdXBfZmVhdHVyZSAoZ3N0X3JlZ2lzdHJ5X2dldCAoKSwgbmFtZSk7Ci0gIGlm
ICghZmVhdHVyZSkgewotICAgIEdTVF9XQVJOSU5HICgiQ291bGQgbm90IGZpbmQgJXMiLCBuYW1l
KTsKLSAgICBlbmNvZGVyc1tlbmNJZF0uYXZhbGFpYmxlID0gRkFMU0U7Ci0KLSAgICByZXR1cm47
Ci0gIH0KLSAgZ3N0X29iamVjdF91bnJlZiAoZmVhdHVyZSk7Ci0KLSAgZW5jb2RlcnNbZW5jSWRd
LmF2YWxhaWJsZSA9IFRSVUU7Ci0gIGVuY29kZXJzW2VuY0lkXS5uYW1lID0gbmFtZTsKLSAgZW5j
b2RlcnNbZW5jSWRdLnBhcnNlcl9uYW1lID0gcGFyc2VyX25hbWU7Ci0gIGVuY29kZXJzW2VuY0lk
XS5jYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKGNhcHMpOwotICBpZiAoZW5jb2RlZF9mb3Jt
YXQpCi0gICAgZW5jb2RlcnNbZW5jSWRdLmVuY29kZWRfZm9ybWF0ID0gZ3N0X2NhcHNfZnJvbV9z
dHJpbmcgKGVuY29kZWRfZm9ybWF0KTsKLSAgZWxzZQotICAgIGVuY29kZXJzW2VuY0lkXS5lbmNv
ZGVkX2Zvcm1hdCA9IE5VTEw7Ci0gIGVuY29kZXJzW2VuY0lkXS5zZXR1cEVuY29kZXIgPSBzZXR1
cEVuY29kZXI7Ci0gIGVuY29kZXJzW2VuY0lkXS5iaXRyYXRlX3Byb3BuYW1lID0gYml0cmF0ZV9w
cm9wbmFtZTsKLSAgZW5jb2RlcnNbZW5jSWRdLnNldEJpdHJhdGUgPSBzZXRCaXRyYXRlOwotICBl
bmNvZGVyc1tlbmNJZF0ua2V5ZnJhbWVfaW50ZXJ2YWxfcHJvcG5hbWUgPSBrZXlmcmFtZV9pbnRl
cnZhbF9wcm9wbmFtZTsKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lE
KG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9CiB9CiAKLXN0
YXRpYyB2b2lkCi1zZXR1cF94MjY0ZW5jIChHc3RXZWJydGNWaWRlb0VuY29kZXIgKiBzZWxmKQor
c3RhdGljIHZvaWQgc2V0dXBYMjY0ZW5jKFdlYnJ0Y1ZpZGVvRW5jb2Rlciogc2VsZikKIHsKLSAg
Z3N0X3V0aWxfc2V0X29iamVjdF9hcmcgKEdfT0JKRUNUIChQUklWIChzZWxmKS0+ZW5jb2Rlciks
ICJ0dW5lIiwKLSAgICAgICJ6ZXJvbGF0ZW5jeSIpOwotICBnX29iamVjdF9zZXQgKFBSSVYgKHNl
bGYpLT5wYXJzZXIsICJjb25maWctaW50ZXJ2YWwiLCAxLCBOVUxMKTsKKyAgICBnc3RfdXRpbF9z
ZXRfb2JqZWN0X2FyZyhHX09CSkVDVCAoc2VsZi0+ZW5jb2RlciksICJ0dW5lIiwgInplcm9sYXRl
bmN5Iik7CisgICAgZ19vYmplY3Rfc2V0KHNlbGYtPnBhcnNlciwgImNvbmZpZy1pbnRlcnZhbCIs
IDEsIG51bGxwdHIpOwogfQogCi1zdGF0aWMgdm9pZAotc2V0dXBfb3BlbmgyNjRlbmMgKEdzdFdl
YnJ0Y1ZpZGVvRW5jb2RlciAqIHNlbGYpCitzdGF0aWMgdm9pZCBzZXR1cE9wZW5oMjY0ZW5jKFdl
YnJ0Y1ZpZGVvRW5jb2Rlciogc2VsZikKIHsKLSAgZ19vYmplY3Rfc2V0IChQUklWIChzZWxmKS0+
cGFyc2VyLCAiY29uZmlnLWludGVydmFsIiwgMSwgTlVMTCk7CisgICAgZ19vYmplY3Rfc2V0IChz
ZWxmLT5wYXJzZXIsICJjb25maWctaW50ZXJ2YWwiLCAxLCBudWxscHRyKTsKIH0KIAotc3RhdGlj
IHZvaWQKLXNldHVwX29teGgyNjRlbmMgKEdzdFdlYnJ0Y1ZpZGVvRW5jb2RlciAqIHNlbGYpCitz
dGF0aWMgdm9pZCBzZXR1cE9teGgyNjRlbmMoV2VicnRjVmlkZW9FbmNvZGVyKiBzZWxmKQogewot
ICBnc3RfdXRpbF9zZXRfb2JqZWN0X2FyZyAoR19PQkpFQ1QgKFBSSVYgKHNlbGYpLT5lbmNvZGVy
KSwgImNvbnRyb2wtcmF0ZSIsCi0gICAgICAidmFyaWFibGUiKTsKLSAgZ19vYmplY3Rfc2V0IChQ
UklWIChzZWxmKS0+cGFyc2VyLCAiY29uZmlnLWludGVydmFsIiwgMSwgTlVMTCk7CisgIGdzdF91
dGlsX3NldF9vYmplY3RfYXJnKEdfT0JKRUNUKHNlbGYtPmVuY29kZXIpLCAiY29udHJvbC1yYXRl
IiwgInZhcmlhYmxlIik7CisgIGdfb2JqZWN0X3NldChzZWxmLT5wYXJzZXIsICJjb25maWctaW50
ZXJ2YWwiLCAxLCBudWxscHRyKTsKIH0KIAotCi1zdGF0aWMgdm9pZAotc2V0X2JpdHJhdGVfa2Jp
dF9wZXJfc2VjIChHT2JqZWN0ICogZW5jb2RlciwgY29uc3QgZ2NoYXIgKiBwcm9wX25hbWUsCi0g
ICAgZ2ludCBiaXRyYXRlKQorc3RhdGljIHZvaWQgc2V0Qml0cmF0ZUtiaXRQZXJTZWMoR09iamVj
dCogZW5jb2RlciwgY29uc3QgZ2NoYXIqIHByb3BfbmFtZSwgZ2ludCBiaXRyYXRlKQogewotICBn
X29iamVjdF9zZXQgKGVuY29kZXIsIHByb3BfbmFtZSwgYml0cmF0ZSwgTlVMTCk7CisgIGdfb2Jq
ZWN0X3NldChlbmNvZGVyLCBwcm9wX25hbWUsIGJpdHJhdGUsIG51bGxwdHIpOwogfQogCi1zdGF0
aWMgdm9pZAotc2V0X2JpdHJhdGVfYml0X3Blcl9zZWMgKEdPYmplY3QgKiBlbmNvZGVyLCBjb25z
dCBnY2hhciAqIHByb3BfbmFtZSwKLSAgICBnaW50IGJpdHJhdGUpCitzdGF0aWMgdm9pZCBzZXRC
aXRyYXRlQml0UGVyU2VjKEdPYmplY3QqIGVuY29kZXIsIGNvbnN0IGdjaGFyKiBwcm9wX25hbWUs
IGdpbnQgYml0cmF0ZSkKIHsKLSAgZ19vYmplY3Rfc2V0IChlbmNvZGVyLCBwcm9wX25hbWUsIGJp
dHJhdGUgKiBLQklUX1RPX0JJVCwgTlVMTCk7CisgIGdfb2JqZWN0X3NldChlbmNvZGVyLCBwcm9w
X25hbWUsIGJpdHJhdGUgKiBLQklUX1RPX0JJVCwgbnVsbHB0cik7CiB9CiAKLXN0YXRpYyB2b2lk
Ci1nc3Rfd2VicnRjX3ZpZGVvX2VuY29kZXJfY2xhc3NfaW5pdCAoR3N0V2VicnRjVmlkZW9FbmNv
ZGVyQ2xhc3MgKiBrbGFzcykKK3N0YXRpYyB2b2lkIHdlYnJ0Y192aWRlb19lbmNvZGVyX2NsYXNz
X2luaXQoV2VicnRjVmlkZW9FbmNvZGVyQ2xhc3MqIGtsYXNzKQogewotICBHT2JqZWN0Q2xhc3Mg
Km9iamVjdF9jbGFzcyA9IEdfT0JKRUNUX0NMQVNTIChrbGFzcyk7Ci0KLSAgR1NUX0RFQlVHX0NB
VEVHT1JZX0lOSVQgKGdzdF93ZWJydGNlbmNfZGVidWcsICJ3ZWJydGNlbmNvZGVyIiwgMCwKLSAg
ICAgICJWaWRlbyBlbmNvZGVyIGZvciBXZWJSVEMiKTsKLQotICBvYmplY3RfY2xhc3MtPmZpbmFs
aXplID0gZ3N0X3dlYnJ0Y192aWRlb19lbmNvZGVyX2ZpbmFsaXplOwotICBvYmplY3RfY2xhc3Mt
PmdldF9wcm9wZXJ0eSA9IGdzdF93ZWJydGNfdmlkZW9fZW5jb2Rlcl9nZXRfcHJvcGVydHk7Ci0g
IG9iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gZ3N0X3dlYnJ0Y192aWRlb19lbmNvZGVyX3Nl
dF9wcm9wZXJ0eTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChvYmplY3Rf
Y2xhc3MsIFBST1BfRk9STUFULAotICAgICAgZ19wYXJhbV9zcGVjX2JveGVkICgiZm9ybWF0Iiwg
IkZvcm1hdCBhcyBjYXBzIiwKLSAgICAgICAgICAiU2V0IHRoZSBjYXBzIG9mIHRoZSBmb3JtYXQg
dG8gYmUgdXNlZC4iLAotICAgICAgICAgIEdTVF9UWVBFX0NBUFMsCi0gICAgICAgICAgKEdQYXJh
bUZsYWdzKSAoR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSkpOwot
Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKG9iamVjdF9jbGFzcywgUFJPUF9F
TkNPREVSLAotICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCAoImVuY29kZXIiLCAiVGhlIGFjdHVh
bCBlbmNvZGVyIGVsZW1lbnQiLAotICAgICAgICAgICJUaGUgZW5jb2RlciBlbGVtZW50IiwgR1NU
X1RZUEVfRUxFTUVOVCwKLSAgICAgICAgICAoR1BhcmFtRmxhZ3MpIChHX1BBUkFNX1JFQURBQkxF
IHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxs
X3Byb3BlcnR5IChvYmplY3RfY2xhc3MsIFBST1BfQklUUkFURSwKLSAgICAgIGdfcGFyYW1fc3Bl
Y191aW50ICgiYml0cmF0ZSIsICJCaXRyYXRlIiwKLSAgICAgICAgICAiVGhlIGJpdHJhdGUgaW4g
a2JpdCBwZXIgc2Vjb25kIiwgMCwgR19NQVhJTlQsIDIwNDgsCi0gICAgICAgICAgKEdQYXJhbUZs
YWdzKSAoR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTIHwKLSAgICAg
ICAgICAgICAgR19QQVJBTV9DT05TVFJVQ1QpKSk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFs
bF9wcm9wZXJ0eSAob2JqZWN0X2NsYXNzLCBQUk9QX0tFWUZSQU1FX0lOVEVSVkFMLAotICAgICAg
Z19wYXJhbV9zcGVjX3VpbnQgKCJrZXlmcmFtZS1pbnRlcnZhbCIsICJLZXlmcmFtZSBpbnRlcnZh
bCIsCi0gICAgICAgICAgIlRoZSBpbnRlcnZhbCBiZXR3ZWVuIGtleWZyYW1lcyIsIDAsIEdfTUFY
SU5ULCAwLAotICAgICAgICAgIChHUGFyYW1GbGFncykgKEdfUEFSQU1fUkVBRFdSSVRFIHwgR19Q
QVJBTV9TVEFUSUNfU1RSSU5HUyB8Ci0gICAgICAgICAgICAgIEdfUEFSQU1fQ09OU1RSVUNUKSkp
OwotCi0gIHJlZ2lzdGVyX2tub3duX2VuY29kZXIgKEVOQ09ERVJfT01YSDI2NCwgIm9teGgyNjRl
bmMiLCAiaDI2NHBhcnNlIiwKLSAgICAgICJ2aWRlby94LWgyNjQiLAotICAgICAgInZpZGVvL3gt
aDI2NCxhbGlnbm1lbnQ9YXUsc3RyZWFtLWZvcm1hdD1ieXRlLXN0cmVhbSxwcm9maWxlPWJhc2Vs
aW5lIiwKLSAgICAgIHNldHVwX29teGgyNjRlbmMsICJ0YXJnZXQtYml0cmF0ZSIsIHNldF9iaXRy
YXRlX2JpdF9wZXJfc2VjLCAiaW50ZXJ2YWwtaW50cmFmcmFtZXMiKTsKLSAgcmVnaXN0ZXJfa25v
d25fZW5jb2RlciAoRU5DT0RFUl9YMjY0LCAieDI2NGVuYyIsICJoMjY0cGFyc2UiLCAidmlkZW8v
eC1oMjY0IiwKLSAgICAgICJ2aWRlby94LWgyNjQsYWxpZ25tZW50PWF1LHN0cmVhbS1mb3JtYXQ9
Ynl0ZS1zdHJlYW0scHJvZmlsZT1iYXNlbGluZSIsCi0gICAgICBzZXR1cF94MjY0ZW5jLCAiYml0
cmF0ZSIsIHNldF9iaXRyYXRlX2tiaXRfcGVyX3NlYywgImtleS1pbnQtbWF4Iik7Ci0gIHJlZ2lz
dGVyX2tub3duX2VuY29kZXIgKEVOQ09ERVJfT1BFTkgyNjQsICJvcGVuaDI2NGVuYyIsICJoMjY0
cGFyc2UiLAotICAgICAgInZpZGVvL3gtaDI2NCIsCi0gICAgICAidmlkZW8veC1oMjY0LGFsaWdu
bWVudD1hdSxzdHJlYW0tZm9ybWF0PWJ5dGUtc3RyZWFtLHByb2ZpbGU9YmFzZWxpbmUiLAotICAg
ICAgc2V0dXBfb3BlbmgyNjRlbmMsICJiaXRyYXRlIiwgc2V0X2JpdHJhdGVfYml0X3Blcl9zZWMs
ICJnb3Atc2l6ZSIpOworICAgIEdPYmplY3RDbGFzcyogb2JqZWN0X2NsYXNzID0gR19PQkpFQ1Rf
Q0xBU1MgKGtsYXNzKTsKKworICAgIEdTVF9ERUJVR19DQVRFR09SWV9JTklUICh3ZWJydGNfdmVu
Y19kZWJ1ZywgIndlYnJ0Y2VuY29kZXIiLCAwLCAiVmlkZW8gZW5jb2RlciBmb3IgV2ViUlRDIik7
CisKKyAgICBvYmplY3RfY2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYnJ0Y1ZpZGVvRW5jb2Rlckdl
dFByb3BlcnR5OworICAgIG9iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gd2VicnRjVmlkZW9F
bmNvZGVyU2V0UHJvcGVydHk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5
KG9iamVjdF9jbGFzcywgUFJPUF9GT1JNQVQsCisgICAgICAgIGdfcGFyYW1fc3BlY19ib3hlZCgi
Zm9ybWF0IiwgIkZvcm1hdCBhcyBjYXBzIiwgIlNldCB0aGUgY2FwcyBvZiB0aGUgZm9ybWF0IHRv
IGJlIHVzZWQuIiwgR1NUX1RZUEVfQ0FQUywKKyAgICAgICAgc3RhdGljX2Nhc3Q8R1BhcmFtRmxh
Z3M+KEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpKTsKKworICAg
IGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkob2JqZWN0X2NsYXNzLCBQUk9QX0VOQ09E
RVIsCisgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoImVuY29kZXIiLCAiVGhlIGFjdHVhbCBl
bmNvZGVyIGVsZW1lbnQiLCAiVGhlIGVuY29kZXIgZWxlbWVudCIsIEdTVF9UWVBFX0VMRU1FTlQs
CisgICAgICAgIHN0YXRpY19jYXN0PEdQYXJhbUZsYWdzPihHX1BBUkFNX1JFQURBQkxFIHwgR19Q
QVJBTV9TVEFUSUNfU1RSSU5HUykpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJv
cGVydHkob2JqZWN0X2NsYXNzLCBQUk9QX0JJVFJBVEUsCisgICAgICAgIGdfcGFyYW1fc3BlY191
aW50KCJiaXRyYXRlIiwgIkJpdHJhdGUiLCAgIlRoZSBiaXRyYXRlIGluIGtiaXQgcGVyIHNlY29u
ZCIsIDAsIEdfTUFYSU5ULCAyMDQ4LAorICAgICAgICBzdGF0aWNfY2FzdDxHUGFyYW1GbGFncz4o
R19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTIHwgR19QQVJBTV9DT05T
VFJVQ1QpKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KG9iamVjdF9j
bGFzcywgUFJPUF9LRVlGUkFNRV9JTlRFUlZBTCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3VpbnQo
ImtleWZyYW1lLWludGVydmFsIiwgIktleWZyYW1lIGludGVydmFsIiwgIlRoZSBpbnRlcnZhbCBi
ZXR3ZWVuIGtleWZyYW1lcyIsIDAsIEdfTUFYSU5ULCAwLAorICAgICAgICBzdGF0aWNfY2FzdDxH
UGFyYW1GbGFncz4oR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTIHwg
R19QQVJBTV9DT05TVFJVQ1QpKSk7CisKKyAgICBFbmNvZGVyczo6cmVnaXN0ZXJFbmNvZGVyKE9t
eEgyNjQsICJvbXhoMjY0ZW5jIiwgImgyNjRwYXJzZSIsICJ2aWRlby94LWgyNjQiLAorICAgICAg
ICAidmlkZW8veC1oMjY0LGFsaWdubWVudD1hdSxzdHJlYW0tZm9ybWF0PWJ5dGUtc3RyZWFtLHBy
b2ZpbGU9YmFzZWxpbmUiLAorICAgICAgICBzZXR1cE9teGgyNjRlbmMsICJ0YXJnZXQtYml0cmF0
ZSIsIHNldEJpdHJhdGVCaXRQZXJTZWMsICJpbnRlcnZhbC1pbnRyYWZyYW1lcyIpOworICAgIEVu
Y29kZXJzOjpyZWdpc3RlckVuY29kZXIoWDI2NCwgIngyNjRlbmMiLCAiaDI2NHBhcnNlIiwgInZp
ZGVvL3gtaDI2NCIsCisgICAgICAgICJ2aWRlby94LWgyNjQsYWxpZ25tZW50PWF1LHN0cmVhbS1m
b3JtYXQ9Ynl0ZS1zdHJlYW0scHJvZmlsZT1iYXNlbGluZSIsCisgICAgICAgIHNldHVwWDI2NGVu
YywgImJpdHJhdGUiLCBzZXRCaXRyYXRlS2JpdFBlclNlYywgImtleS1pbnQtbWF4Iik7CisgICAg
RW5jb2RlcnM6OnJlZ2lzdGVyRW5jb2RlcihPcGVuSDI2NCwgIm9wZW5oMjY0ZW5jIiwgImgyNjRw
YXJzZSIsICJ2aWRlby94LWgyNjQiLAorICAgICAgICAidmlkZW8veC1oMjY0LGFsaWdubWVudD1h
dSxzdHJlYW0tZm9ybWF0PWJ5dGUtc3RyZWFtLHByb2ZpbGU9YmFzZWxpbmUiLAorICAgICAgICBz
ZXR1cE9wZW5oMjY0ZW5jLCAiYml0cmF0ZSIsIHNldEJpdHJhdGVCaXRQZXJTZWMsICJnb3Atc2l6
ZSIpOwogfQogCi1zdGF0aWMgdm9pZAotZ3N0X3dlYnJ0Y192aWRlb19lbmNvZGVyX2luaXQgKEdz
dFdlYnJ0Y1ZpZGVvRW5jb2RlciAqIHNlbGYpCitzdGF0aWMgdm9pZCB3ZWJydGNfdmlkZW9fZW5j
b2Rlcl9pbml0IChXZWJydGNWaWRlb0VuY29kZXIqIHNlbGYpCiB7Ci0gIEdzdFdlYnJ0Y1ZpZGVv
RW5jb2RlclByaXZhdGUgKnByaXYgPSBQUklWIChzZWxmKTsKLQotICBwcml2LT5lbmNvZGVySWQg
PSBFTkNPREVSX05PTkU7Ci0gIGdzdF9lbGVtZW50X2FkZF9wYWQgKEdTVF9FTEVNRU5UIChzZWxm
KSwKLSAgICAgIGdzdF9naG9zdF9wYWRfbmV3X25vX3RhcmdldF9mcm9tX3RlbXBsYXRlICgic2lu
ayIsCi0gICAgICAgICAgZ3N0X3N0YXRpY19wYWRfdGVtcGxhdGVfZ2V0ICgmc2lua1RlbXBsYXRl
KSkpOworICAgIHNlbGYtPmVuY29kZXJJZCA9IE5vbmU7CisgICAgZ3N0X2VsZW1lbnRfYWRkX3Bh
ZChHU1RfRUxFTUVOVChzZWxmKSwKKyAgICAgICAgZ3N0X2dob3N0X3BhZF9uZXdfbm9fdGFyZ2V0
X2Zyb21fdGVtcGxhdGUoInNpbmsiLCBnc3Rfc3RhdGljX3BhZF90ZW1wbGF0ZV9nZXQoJnNpbmtU
ZW1wbGF0ZSkpKTsKIAotICBnc3RfZWxlbWVudF9hZGRfcGFkIChHU1RfRUxFTUVOVCAoc2VsZiks
Ci0gICAgICBnc3RfZ2hvc3RfcGFkX25ld19ub190YXJnZXRfZnJvbV90ZW1wbGF0ZSAoInNyYyIs
Ci0gICAgICAgICAgZ3N0X3N0YXRpY19wYWRfdGVtcGxhdGVfZ2V0ICgmc3JjVGVtcGxhdGUpKSk7
CisgICAgZ3N0X2VsZW1lbnRfYWRkX3BhZChHU1RfRUxFTUVOVChzZWxmKSwKKyAgICAgICAgZ3N0
X2dob3N0X3BhZF9uZXdfbm9fdGFyZ2V0X2Zyb21fdGVtcGxhdGUoInNyYyIsIGdzdF9zdGF0aWNf
cGFkX3RlbXBsYXRlX2dldCgmc3JjVGVtcGxhdGUpKSk7CiB9CiAKICNlbmRpZiAvLyBFTkFCTEUo
VklERU8pICYmIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShMSUJXRUJSVEMpICYmIFVTRShH
U1RSRUFNRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9saWJ3ZWJydGMvR1N0cmVhbWVyVmlkZW9FbmNvZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvR1N0cmVhbWVyVmlkZW9FbmNvZGVyLmgKaW5kZXgg
MTBlYTI1YzRlZWUzZTE4ZjE5ODE5MjhlOGQ0ZmUxNjQ0ZTVhZjFiMy4uMjVhYzQzZDBjN2M2YTYz
YWYyODBkNDlkZGU3MTNmNDc3MDZiYjk0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vbGlid2VicnRjL0dTdHJlYW1lclZpZGVvRW5jb2Rlci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9HU3RyZWFtZXJW
aWRlb0VuY29kZXIuaApAQCAtMjQsMTMgKzI0LDggQEAKIAogR19CRUdJTl9ERUNMUwogCi0jZGVm
aW5lIEdTVF9UWVBFX1dFQlJUQ19WSURFT19FTkNPREVSIChnc3Rfd2VicnRjX3ZpZGVvX2VuY29k
ZXJfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCUlRDX1RZUEVfVklERU9fRU5DT0RFUiAod2VicnRj
X3ZpZGVvX2VuY29kZXJfZ2V0X3R5cGUoKSkKIAotR19ERUNMQVJFX0RFUklWQUJMRV9UWVBFIChH
c3RXZWJydGNWaWRlb0VuY29kZXIsIGdzdF93ZWJydGNfdmlkZW9fZW5jb2RlciwgR1NULCBXRUJS
VENfVklERU9fRU5DT0RFUiwgR3N0QmluKQotCi1zdHJ1Y3QgX0dzdFdlYnJ0Y1ZpZGVvRW5jb2Rl
ckNsYXNzCi17Ci0gIEdzdEJpbkNsYXNzIHBhcmVudF9jbGFzczsKLX07CitHX0RFQ0xBUkVfRklO
QUxfVFlQRSAoV2VicnRjVmlkZW9FbmNvZGVyLCB3ZWJydGNfdmlkZW9fZW5jb2RlciwgV0VCUlRD
LCBWSURFT19FTkNPREVSLCBHc3RCaW4pCiAKIEdfRU5EX0RFQ0xTCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvR1N0cmVhbWVyVmlkZW9F
bmNvZGVyRmFjdG9yeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9s
aWJ3ZWJydGMvR1N0cmVhbWVyVmlkZW9FbmNvZGVyRmFjdG9yeS5jcHAKaW5kZXggNDQwYjQyOWJl
ZjdhNDllZTcxMjg1MGM2MDA4MDU2ZWQ4Y2FiYmI4Zi4uMzUwYTQzY2EyYTY4OTkzNzg1YTQ1YzY5
OTc4ZDVhYTAxNTgzMjBhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vbGlid2VicnRjL0dTdHJlYW1lclZpZGVvRW5jb2RlckZhY3RvcnkuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9HU3RyZWFtZXJW
aWRlb0VuY29kZXJGYWN0b3J5LmNwcApAQCAtNTUsOCArNTUsNiBAQAogR1NUX0RFQlVHX0NBVEVH
T1JZKHdlYmtpdF93ZWJydGNlbmNfZGVidWcpOwogI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgd2Vi
a2l0X3dlYnJ0Y2VuY19kZWJ1ZwogCi0jZGVmaW5lIEtCSVRfVE9fQklUIDEwMjQKLQogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBjbGFzcyBHU3RyZWFtZXJFbmNvZGVkSW1hZ2VCdWZmZXIgOiBwdWJs
aWMgd2VicnRjOjpFbmNvZGVkSW1hZ2VCdWZmZXJJbnRlcmZhY2UgewpAQCAtNDcwLDcgKzQ2OCw3
IEBAIEdTdHJlYW1lclZpZGVvRW5jb2RlckZhY3Rvcnk6OkdTdHJlYW1lclZpZGVvRW5jb2RlckZh
Y3RvcnkoKQogCiAgICAgc3RkOjpjYWxsX29uY2UoZGVidWdSZWdpc3RlcmVkRmxhZywgW10gewog
ICAgICAgICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCh3ZWJraXRfd2VicnRjZW5jX2RlYnVnLCAi
d2Via2l0bGlid2VicnRjdmlkZW9lbmNvZGVyIiwgMCwgIldlYktpdCBXZWJSVEMgdmlkZW8gZW5j
b2RlciIpOwotICAgICAgICBnc3RfZWxlbWVudF9yZWdpc3RlcihudWxscHRyLCAid2VicnRjdmlk
ZW9lbmNvZGVyIiwgR1NUX1JBTktfUFJJTUFSWSwgR1NUX1RZUEVfV0VCUlRDX1ZJREVPX0VOQ09E
RVIpOworICAgICAgICBnc3RfZWxlbWVudF9yZWdpc3RlcihudWxscHRyLCAid2VicnRjdmlkZW9l
bmNvZGVyIiwgR1NUX1JBTktfTk9ORSwgV0VCUlRDX1RZUEVfVklERU9fRU5DT0RFUik7CiAgICAg
fSk7CiB9CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>