<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "http://bugs.gentoo.org/bugzilla.dtd">

<bugzilla version="2.22.7"
          urlbase="http://bugs.gentoo.org/"
          maintainer="bugzilla@gentoo.org"
>

    <bug>
          <bug_id>43027</bug_id>
          
          <creation_ts>2004-02-26 13:39 0000</creation_ts>
          <short_desc>added DNotify patch back to fam-2.7.0</short_desc>
          <delta_ts>2004-04-22 00:44:22 0000</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>Gentoo Linux</product>
          <component>Ebuilds</component>
          <version>unspecified</version>
          <rep_platform>All</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          
          <priority>P2</priority>
          <bug_severity>normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          
          <everconfirmed>1</everconfirmed>
          <reporter>vslavik@fastmail.fm</reporter>
          <assigned_to>foser@gentoo.org</assigned_to>
          <cc>jackmort@free.fr</cc>
    
    <cc>spider@gentoo.org</cc>

      

      
          <long_desc isprivate="0">
            <who>vslavik@fastmail.fm</who>
            <bug_when>2004-02-26 13:39:09 0000</bug_when>
            <thetext>The FAM library can take advantage of Linux&apos;s dnotify feature to avoid polling files for changes. It&apos;s not part of standard fam distribution, you have to apply a patch. This patch was removed from app-admin/fam in 2.7.0 (2.6.10-r1 had it). There&apos;s no mention of it in ChangeLog other than &quot;New release, obsoletes most of the patches&quot;, so maybe it was a mistake? Anyway, this patch is pretty important (it improves responsibility), so I took updated patch for 2.7.0 from Debian package and modified the ebuild to apply it. Patches attached, tested &amp; working.

Reproducible: Always
Steps to Reproduce:</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>vslavik@fastmail.fm</who>
            <bug_when>2004-02-26 13:39:43 0000</bug_when>
            <thetext>Created an attachment (id=26426)
patch for  the ebuild
</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>vslavik@fastmail.fm</who>
            <bug_when>2004-02-26 13:40:16 0000</bug_when>
            <thetext>Created an attachment (id=26427)
fam-2.7.0-dnotify.patch
</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>spider@gentoo.org</who>
            <bug_when>2004-02-26 13:49:15 0000</bug_when>
            <thetext>Yes, thats correct. However, with DNotify there is another issue in descriptor leakage for removable devices.  By not providing the DNotify event tracker in fam there is no longer an issue with this, which is of more importance than the slight boost in responsiveness.
</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>vslavik@fastmail.fm</who>
            <bug_when>2004-02-26 14:11:51 0000</bug_when>
            <thetext>Are you sure this is still true for 2.7.0 and latest (i.e. this one, Debian&apos;s) version of dnotify patch? From Debian&apos;s changelog (http://packages.debian.org/changelogs/pool/main/f/fam/fam_2.7.0-5/changelog):
&quot;&quot;&quot;
fam (2.7.0-1) experimental; urgency=low

  * New upstream release 
    (closes: Bug#224738):
    - should fix problems with unmounting filesystems with
      monitored files 
      (closes: Bug#225636)
&quot;&quot;&quot;
Comment #27 at http://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=106936 seems to indicate DNotify patch was fixed, too (it&apos;s dated 2004-02-04).

&gt; which is of more importance than the slight boost in responsiveness.

As for &quot;slight&quot;, I noticed this because KGhostview&apos;s Watch File feature started to react considerably slower (as in immediately vs. something that felt like 1-2 seconds later) after I set up famd.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>foser@gentoo.org</who>
            <bug_when>2004-03-14 14:22:20 0000</bug_when>
            <thetext>ok re-added dnotify support in fam-2.7.0-r1

I indeed couldn&apos;t reproduce the old locking problems, but that might also have todo with fixes in other packages. We&apos;ll just have to see how it goes. This patch seems quite a bit altered from the original.

about &apos;slight&apos; , fam without monitor polls once p.sec afaik vs almost immediatly now. It looks better, but it doesn&apos;t matter that much.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>jackmort@free.fr</who>
            <bug_when>2004-04-21 04:20:01 0000</bug_when>
            <thetext>Here, with fam-2.7.0-r1, I&apos;ve still the problem with removable devices...</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>foser@gentoo.org</who>
            <bug_when>2004-04-21 15:32:45 0000</bug_when>
            <thetext>describe the exact problem &amp; how it is reproducable . I can&apos;t reproduce the old problem.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>jackmort@free.fr</who>
            <bug_when>2004-04-22 00:44:22 0000</bug_when>
            <thetext>Well, it&apos;s quite simple :

In nautilus :
- start famd...
- mount a floppy/usbkey
- access it with nautilus to copy or read some files on it
- try to unmount the floppy/usbkey

Nautilus complains the device is busy... Try in a term. Same thing. With a lsof, you see that the mount point is beeing monitored by famd... Restart or stop famd : you can unmount.</thetext>
          </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>26426</attachid>
            <date>2004-02-26 13:39 0000</date>
            <desc>patch for  the ebuild</desc>
            <filename>fam-2.7.0.ebuild.patch</filename>
            <type>text/plain</type>
            <data encoding="base64">LS0tIGZhbS0yLjcuMC5lYnVpbGQub3JpZwkyMDA0LTAyLTE1IDIyOjA3OjM5LjAwMDAwMDAwMCAr
MDEwMAorKysgZmFtLTIuNy4wLmVidWlsZAkyMDA0LTAyLTI2IDIyOjE5OjAzLjAwMDAwMDAwMCAr
MDEwMApAQCAtMTYsNiArMTYsNyBAQAogCiBzcmNfdW5wYWNrKCkgewogCXVucGFjayAke0F9CisJ
ZXBhdGNoICR7RklMRVNESVJ9L2ZhbS0yLjcuMC1kbm90aWZ5LnBhdGNoCiAKIAkjIEZpeCBwZXJt
aXNzaW9uIHByb2JsZW1zIHdpdGggdXNlciogaW4gRkVBVFVSRVMgKCMzNTMwNykKIAljaG1vZCB1
K3cgJHtTfS9jb25maWd1cmUKQEAgLTIzLDYgKzI0LDEyIEBACiAJIyBQbGVhc2UgZG8gbm90IHJl
bW92ZSB0aGlzIGFnYWluIC0gZml4ZXMgJFMgYW5kICREIGluIGxpYnRvb2wgbGlua2VyCiAJIyBz
Y3JpcHRzICgubGEgZmlsZXMpCiAJY2QgJHtTfTsgZWxpYnRvb2xpemUKKwkKKwlleHBvcnQgV0FO
VF9BVVRPQ09ORj0yLjUKKwlleHBvcnQgV0FOVF9BVVRPTUFLRT0xLjUKKwlhY2xvY2FsCisJYXV0
b2NvbmYKKwlhdXRvbWFrZSAtLWFkZC1taXNzaW5nCiB9CiAKIHNyY19pbnN0YWxsKCkgewo=
</data>        

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>26427</attachid>
            <date>2004-02-26 13:40 0000</date>
            <desc>fam-2.7.0-dnotify.patch</desc>
            <filename>fam-2.7.0-dnotify.patch</filename>
            <type>text/plain</type>
            <data encoding="base64">LS0tIGZhbS0yLjcuMC9zcmMvRE5vdGlmeS5jKysJMjAwNC0wMS0zMCAwMDowMDowMC4wMDAwMDAw
MDAgKzAxMDAKKysrIGZhbS0yLjcuMC5kbm90aWZ5L3NyYy9ETm90aWZ5LmMrKwkyMDA0LTAxLTMw
IDAwOjAwOjAwLjAwMDAwMDAwMCArMDEwMApAQCAtMCwwICsxLDU4MiBAQAorLy8gIENvcHlyaWdo
dCAoQykgMjAwMSBSZWQgSGF0LCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8gIENvcHly
aWdodCAoQykgMTk5OSBTaWxpY29uIEdyYXBoaWNzLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVk
LgorLy8gIAorLy8gIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisvLyAgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNp
b24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKy8vICBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKy8vCisvLyAgVGhpcyBwcm9ncmFtIGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd291bGQgYmUgdXNlZnVsLCBidXQKKy8v
ICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisvLyAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgRnVydGhlciwgYW55CisvLyAgbGljZW5zZSBwcm92aWRlZCBoZXJlaW4sIHdoZXRoZXIg
aW1wbGllZCBvciBvdGhlcndpc2UsIGlzIGxpbWl0ZWQgdG8KKy8vICB0aGlzIHByb2dyYW0gaW4g
YWNjb3JkYW5jZSB3aXRoIHRoZSBleHByZXNzIHByb3Zpc2lvbnMgb2YgdGhlIEdOVQorLy8gIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UuICBQYXRlbnQgbGljZW5zZXMsIGlmIGFueSwgcHJvdmlkZWQg
aGVyZWluIGRvIG5vdAorLy8gIGFwcGx5IHRvIGNvbWJpbmF0aW9ucyBvZiB0aGlzIHByb2dyYW0g
d2l0aCBvdGhlciBwcm9kdWN0IG9yIHByb2dyYW1zLCBvcgorLy8gIGFueSBvdGhlciBwcm9kdWN0
IHdoYXRzb2V2ZXIuICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgd2l0aG91dCBhbnkKKy8v
ICB3YXJyYW50eSB0aGF0IHRoZSBwcm9ncmFtIGlzIGRlbGl2ZXJlZCBmcmVlIG9mIHRoZSByaWdo
dGZ1bCBjbGFpbSBvZiBhbnkKKy8vICB0aGlyZCBwZXJzb24gYnkgd2F5IG9mIGluZnJpbmdlbWVu
dCBvciB0aGUgbGlrZS4gIFNlZSB0aGUgR05VIEdlbmVyYWwKKy8vICBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorLy8KKy8vICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworLy8gIHdpdGggdGhpcyBw
cm9ncmFtOyBpZiBub3QsIHdyaXRlIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDU5CisvLyAgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24gTUEgMDIxMTEtMTMwNywg
VVNBLgorCisjZGVmaW5lIF9HTlVfU09VUkNFICAKKyNpbmNsdWRlIDxmY250bC5oPgorCisjaW5j
bHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4K
KyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxz
eXMvc3RhdC5oPgorI2luY2x1ZGUgPGxpYmdlbi5oPgorCisjaW5jbHVkZSAiRE5vdGlmeS5oIgor
CisjaW5jbHVkZSAiSW50ZXJlc3QuaCIKKyNpbmNsdWRlICJMb2cuaCIKKyNpbmNsdWRlICJTY2hl
ZHVsZXIuaCIKKyNpbmNsdWRlIDxtZW1vcnk+CisKKworaW50IEROb3RpZnk6OnBpcGVfd3JpdGVf
ZmQgPSAtMjsKK2ludCBETm90aWZ5OjpwaXBlX3JlYWRfZmQgPSAtMjsKK3ZvbGF0aWxlIHNpZ19h
dG9taWNfdCBETm90aWZ5OjpxdWV1ZV9vdmVyZmxvd2VkID0gMDsKK3ZvbGF0aWxlIHNpZ19hdG9t
aWNfdCBETm90aWZ5OjpxdWV1ZV9jaGFuZ2VkID0gMDsKK2ludCBETm90aWZ5OjpjaGFuZ2VfcXVl
dWVbUVVFVUVTSVpFXTsKK3ZvbGF0aWxlIGludCBETm90aWZ5OjpxdWV1ZV9oZWFkID0gMDsgLy8g
T25seSBtb2RpZmllZCBieSByZWFkIGhhbmRsZXIKK3ZvbGF0aWxlIGludCBETm90aWZ5OjpxdWV1
ZV90YWlsID0gMDsgLy8gT25seSBtb2RpZmllZCBieSBzaWduYWwgaGFuZGxlcgorRE5vdGlmeTo6
RXZlbnRIYW5kbGVyIEROb3RpZnk6OmVoYW5kbGVyOworCitETm90aWZ5OjpEaXJXYXRjaCAqRE5v
dGlmeTo6ZGlyX2hhc2hbRElSX0hBU0hTSVpFXTsKK0ROb3RpZnk6OkZpbGVXYXRjaCAqRE5vdGlm
eTo6ZmlsZV9oYXNoW0ZJTEVfSEFTSFNJWkVdOworCitzdHJ1Y3QgRE5vdGlmeTo6RmlsZVdhdGNo
Cit7CisgICAgRGlyV2F0Y2ggKmRpcl93YXRjaDsKKyAgICBkZXZfdCBmaWxlX2RldjsKKyAgICBp
bm9fdCBmaWxlX2lubzsKKyAgICBGaWxlV2F0Y2ggKm5leHQ7IC8vIFRoZSBEaXJXYXRjaC53YXRj
aGVzIGxpc3QKKyAgICBGaWxlV2F0Y2ggKmhhc2hfbGluazsKK307CisKK3N0cnVjdCBETm90aWZ5
OjpEaXJXYXRjaAoreworICAgIGludCBmZDsKKyAgICBkZXZfdCBkaXJfZGV2OworICAgIGlub190
IGRpcl9pbm87CisgICAgCisgICAgRGlyV2F0Y2ggKmhhc2hfbGluazsKKyAgICBGaWxlV2F0Y2gg
KndhdGNoZXM7Cit9OworCitzdHJ1Y3QgRE5vdGlmeTo6Q2hhbmdlRXZlbnREYXRhCit7CisgICAg
ZGV2X3QgZmlsZV9kZXY7CisgICAgaW5vX3QgZmlsZV9pbm87Cit9OyAgICAKKworRE5vdGlmeTo6
RE5vdGlmeShFdmVudEhhbmRsZXIgaCkKK3sKKyAgICBhc3NlcnQoZWhhbmRsZXIgPT0gTlVMTCk7
CisgICAgZWhhbmRsZXIgPSBoOworfQorCitETm90aWZ5Ojp+RE5vdGlmeSgpCit7CisgICAgaWYg
KHBpcGVfcmVhZF9mZCA+PSAwKQorICAgIHsKKwkvLyAgVGVsbCB0aGUgc2NoZWR1bGVyLgorCisJ
KHZvaWQpIFNjaGVkdWxlcjo6cmVtb3ZlX3JlYWRfaGFuZGxlcihwaXBlX3JlYWRfZmQpOworCisJ
Ly8gIENsb3NlIHRoZSBwaXBlLgorCisJaWYgKGNsb3NlKHBpcGVfcmVhZF9mZCkgPCAwKQorCSAg
ICBMb2c6OnBlcnJvcigiY2FuJ3QgcGlwZSByZWFkIGVuZCIpOworCWVsc2UKKwkgICAgTG9nOjpk
ZWJ1ZygiY2xvc2VkIHBpcGUgcmVhZCBlbmQiKTsKKwkKKwlpZiAoY2xvc2UocGlwZV93cml0ZV9m
ZCkgPCAwKQorCSAgICBMb2c6OnBlcnJvcigiY2FuJ3QgcGlwZSB3cml0ZSBlbmQiKTsKKwllbHNl
CisJICAgIExvZzo6ZGVidWcoImNsb3NlZCBwaXBlIHdyaXRlIGVuZCIpOworCXBpcGVfcmVhZF9m
ZCA9IC0xOworICAgIH0KKyAgICBlaGFuZGxlciA9IE5VTEw7Cit9CisKK3ZvaWQKK0ROb3RpZnk6
Om92ZXJmbG93X3NpZ25hbF9oYW5kbGVyKGludCBzaWcsIHNpZ2luZm9fdCAqc2ksIHZvaWQgKmRh
dGEpCit7CisgIGNoYXIgYyA9ICd4JzsKKworICB7CisgICAgY2hhciAqc3RyID0gIioqKioqKioq
KioqKioqKiBvdmVyZmxvdyBzaWdxdWV1ZSAqKioqKioqKioqKioqKioqKioqKioqKlxuIjsKKyAg
ICB3cml0ZSAoU1RERVJSX0ZJTEVOTywgc3RyLCBzdHJsZW4oc3RyKSk7CisgIH0KKworICBpZiAo
IXF1ZXVlX292ZXJmbG93ZWQpCisgIHsKKyAgICAgIHF1ZXVlX292ZXJmbG93ZWQgPSAxOworICAg
ICAgLy8gVHJpZ2dlciB0aGUgcmVhZCBoYW5kbGVyCisgICAgICB3cml0ZShwaXBlX3dyaXRlX2Zk
LCAmYywgMSk7CisgIH0KK30KKwordm9pZAorRE5vdGlmeTo6c2lnbmFsX2hhbmRsZXIoaW50IHNp
Zywgc2lnaW5mb190ICpzaSwgdm9pZCAqZGF0YSkKK3sKKyAgaW50IGxlZnQ7CisgIGNoYXIgYyA9
ICd4JzsKKworICBpZiAocXVldWVfaGVhZCA8PSBxdWV1ZV90YWlsKQorICAgIGxlZnQgPSAoUVVF
VUVTSVpFICsgcXVldWVfaGVhZCkgLSBxdWV1ZV90YWlsOworICBlbHNlIAorICAgIGxlZnQgPSBx
dWV1ZV9oZWFkIC0gcXVldWVfdGFpbDsKKyAgCisgIC8vIE11c3QgbGVhdmUgYXQgbGVhc3Qgb25l
IGl0ZW0gdW51c2VkIHRvIHNlZSBkaWZmZXJlbmNlCisgIC8vIEJldHdlZWVuIGVtcHR5IGFuZCBm
dWxsCisgIGlmIChsZWZ0IDw9IDEpCisgIHsKKyAgICAgIHF1ZXVlX292ZXJmbG93ZWQgPSAxOwor
ICAgICAgeworCWNoYXIgKnN0ciA9ICIqKioqKioqKioqKioqKiogb3ZlcmZsb3cgZmFtcXVldWUg
KioqKioqKioqKioqKioqKlxuIjsKKwl3cml0ZSAoU1RERVJSX0ZJTEVOTywgc3RyLCBzdHJsZW4o
c3RyKSk7CisgICAgICB9CisgIH0KKyAgZWxzZQorICB7CisgICAgICBjaGFuZ2VfcXVldWVbcXVl
dWVfdGFpbF0gPSBzaS0+c2lfZmQ7CisgICAgICBxdWV1ZV90YWlsID0gKHF1ZXVlX3RhaWwgKyAx
KSAlIFFVRVVFU0laRTsKKyAgfQorICAKKyAgaWYgKCFxdWV1ZV9jaGFuZ2VkKQorICB7CisgICAg
ICBxdWV1ZV9jaGFuZ2VkID0gMTsKKyAgICAgIC8vIFRyaWdnZXIgdGhlIHJlYWQgaGFuZGxlcgor
ICAgICAgd3JpdGUocGlwZV93cml0ZV9mZCwgJmMsIDEpOworICB9Cit9CisKK2Jvb2wKK0ROb3Rp
Znk6OmlzX2FjdGl2ZSgpCit7CisgICAgaWYgKHBpcGVfcmVhZF9mZCA9PSAtMikKKyAgICB7Cisg
ICAgICAgIGludCBmaWxlZGVzWzJdOworCWludCByZXM7CisJCisJcmVzID0gcGlwZSAoZmlsZWRl
cyk7CisJaWYgKHJlcyA+PSAwKQorCXsgICBMb2c6OmRlYnVnKCJvcGVuZWQgcGlwZSIpOworICAg
CSAgICBwaXBlX3JlYWRfZmQgPSBmaWxlZGVzWzBdOworICAgCSAgICBwaXBlX3dyaXRlX2ZkID0g
ZmlsZWRlc1sxXTsKKworCSAgICAvLyBTZXR1cCBzaWduYWwgaGFuZGxlcjoKKwkgICAgc3RydWN0
IHNpZ2FjdGlvbiBhY3Q7CisJICAgIAorCSAgICBhY3Quc2Ffc2lnYWN0aW9uID0gc2lnbmFsX2hh
bmRsZXI7CisJICAgIHNpZ2VtcHR5c2V0KCZhY3Quc2FfbWFzayk7CisJICAgIGFjdC5zYV9mbGFn
cyA9IFNBX1NJR0lORk87CisJICAgIHNpZ2FjdGlvbihTSUdSVE1JTiwgJmFjdCwgTlVMTCk7CisK
KwkgICAgLy8gV2hlbiB0aGUgUlQgcXVldWUgb3ZlcmZsb3dzIHdlIGdldCBhIFNJR0lPCisJICAg
IGFjdC5zYV9zaWdhY3Rpb24gPSBvdmVyZmxvd19zaWduYWxfaGFuZGxlcjsKKwkgICAgc2lnZW1w
dHlzZXQoJmFjdC5zYV9tYXNrKTsKKwkgICAgc2lnYWN0aW9uKFNJR0lPLCAmYWN0LCBOVUxMKTsK
KworCSAgICAodm9pZCkgU2NoZWR1bGVyOjppbnN0YWxsX3JlYWRfaGFuZGxlcihwaXBlX3JlYWRf
ZmQsIHJlYWRfaGFuZGxlciwgTlVMTCk7CisJfQorICAgIH0KKyAgICByZXR1cm4gcGlwZV9yZWFk
X2ZkID49IDA7Cit9CisKK0ROb3RpZnk6OkRpcldhdGNoICoKK0ROb3RpZnk6Omxvb2t1cF9kaXJ3
YXRjaCAoaW50IGZkKQoreworICBEaXJXYXRjaCAqKnA7CisgIERpcldhdGNoICp3OworCisgIHAg
PSBkaXJfaGFzaGNoYWluIChmZCk7CisKKyAgd2hpbGUgKCpwKQorICAgIHsKKyAgICAgIHcgPSAq
cDsKKworICAgICAgaWYgKHctPmZkID09IGZkKQorCXJldHVybiB3OworCisgICAgICBwID0gJnct
Pmhhc2hfbGluazsKKyAgICB9CisgIAorICByZXR1cm4gKnA7Cit9CisKKy8vIFRoaXMgY29sdWQg
YmUgbWFkZSBmYXN0ZXIgYnkgdXNpbmcgYW5vdGhlciBoYXNoIHRhYmxlLgorLy8gQnV0IGl0J3Mg
bm90IHRoYXQgYmFkLCBzaW5jZSBpdCBpcyBvbmx5IHVzZWQgYnkgZXhwcmVzcy9yZXZva2UKK0RO
b3RpZnk6OkRpcldhdGNoICoKK0ROb3RpZnk6Omxvb2t1cF9kaXJ3YXRjaCAoZGV2X3QgZGlyX2Rl
diwgaW5vX3QgZGlyX2lubykKK3sKKyAgRGlyV2F0Y2ggKnA7CisgIGludCBpOworCisgIGZvciAo
aT0wO2k8RElSX0hBU0hTSVpFO2krKykKKyAgICB7CisgICAgICBwID0gZGlyX2hhc2hbaV07Cisg
ICAgICAKKyAgICAgIHdoaWxlIChwKQorCXsKKwkgIGlmIChwLT5kaXJfZGV2ID09IGRpcl9kZXYg
JiYgcC0+ZGlyX2lubyA9PSBkaXJfaW5vKQorCSAgICByZXR1cm4gcDsKKwkgIAorCSAgcCA9IHAt
Pmhhc2hfbGluazsKKwl9CisgICAgfQorICAKKyAgcmV0dXJuIE5VTEw7Cit9CisKK0ROb3RpZnk6
OkZpbGVXYXRjaCAqCitETm90aWZ5Ojpsb29rdXBfZmlsZXdhdGNoIChkZXZfdCBkZXYsIGlub190
IGlubykKK3sKKyAgRmlsZVdhdGNoICoqcDsKKyAgRmlsZVdhdGNoICp3OworCisgIHAgPSBmaWxl
X2hhc2hjaGFpbiAoZGV2LCBpbm8pOworCisgIHdoaWxlICgqcCkKKyAgICB7CisgICAgICB3ID0g
KnA7CisKKyAgICAgIGlmICh3LT5maWxlX2RldiA9PSBkZXYgJiYgdy0+ZmlsZV9pbm8gPT0gaW5v
KQorCXJldHVybiB3OworCisgICAgICBwID0gJnctPmhhc2hfbGluazsKKyAgICB9CisgIAorICBy
ZXR1cm4gKnA7Cit9CisKKy8vIE1ha2Ugc3VyZSB3IGlzIG5vdCBhbHJlYWR5IGluIHRoZSBoYXNo
IHRhYmxlIGJlZm9yZSBjYWxsaW5nCisvLyB0aGlzIGZ1bmN0aW9uLgordm9pZAorRE5vdGlmeTo6
aGFzaF9kaXJ3YXRjaChEaXJXYXRjaCAqdykKK3sKKyAgRGlyV2F0Y2ggKipwOworICBwID0gZGly
X2hhc2hjaGFpbiAody0+ZmQpOworICB3LT5oYXNoX2xpbmsgPSAqcDsKKyAgKnAgPSB3OworfQor
CisvLyBNYWtlIHN1cmUgdyBpcyBub3QgYWxyZWFkeSBpbiB0aGUgaGFzaCB0YWJsZSBiZWZvcmUg
Y2FsbGluZworLy8gdGhpcyBmdW5jdGlvbi4KK3ZvaWQKK0ROb3RpZnk6Omhhc2hfZmlsZXdhdGNo
KEZpbGVXYXRjaCAqdykKK3sKKyAgRmlsZVdhdGNoICoqcDsKKyAgcCA9IGZpbGVfaGFzaGNoYWlu
ICh3LT5maWxlX2Rldiwgdy0+ZmlsZV9pbm8pOworICB3LT5oYXNoX2xpbmsgPSAqcDsKKyAgKnAg
PSB3OworfQorCit2b2lkCitETm90aWZ5Ojp1bmhhc2hfZGlyd2F0Y2goRGlyV2F0Y2ggKncpCit7
CisgIERpcldhdGNoICoqcDsKKyAgCisgIHAgPSBkaXJfaGFzaGNoYWluICh3LT5mZCk7CisgIAor
ICB3aGlsZSAoKnApCisgICAgeworICAgICAgaWYgKCpwID09IHcpCisJeworCSAgKnAgPSB3LT5o
YXNoX2xpbms7CisJICBicmVhazsKKwl9CisgICAgICBwID0gJigqcCktPmhhc2hfbGluazsKKyAg
ICB9CisgIHctPmhhc2hfbGluayA9IE5VTEw7Cit9CisKK3ZvaWQKK0ROb3RpZnk6OnVuaGFzaF9m
aWxld2F0Y2goRmlsZVdhdGNoICp3KQoreworICBGaWxlV2F0Y2ggKipwOworICAKKyAgcCA9IGZp
bGVfaGFzaGNoYWluICh3LT5maWxlX2Rldiwgdy0+ZmlsZV9pbm8pOworICAKKyAgd2hpbGUgKCpw
KQorICAgIHsKKyAgICAgIGlmICgqcCA9PSB3KQorCXsKKwkgICpwID0gdy0+aGFzaF9saW5rOwor
CSAgYnJlYWs7CisJfQorICAgICAgcCA9ICYoKnApLT5oYXNoX2xpbms7CisgICAgfQorICB3LT5o
YXNoX2xpbmsgPSBOVUxMOworfQorCitETm90aWZ5OjpTdGF0dXMKK0ROb3RpZnk6OndhdGNoX2Rp
cihjb25zdCBjaGFyICpub3RpZnlfZGlyLCBkZXZfdCBmaWxlX2RldiwgaW5vX3QgZmlsZV9pbm8p
Cit7CisgIHN0cnVjdCBzdGF0IHN0YXQ7CisgIGRldl90IGRpcl9kZXY7CisgIGlub190IGRpcl9p
bm87CisgIERpcldhdGNoICpkd2F0Y2g7CisgIEZpbGVXYXRjaCAqZnc7CisgICAgCisgIGlmIChs
c3RhdCAobm90aWZ5X2RpciwgJnN0YXQpID09IC0xKQorICAgICAgcmV0dXJuIEJBRDsKKyAgCisg
IGR3YXRjaCA9IGxvb2t1cF9kaXJ3YXRjaChzdGF0LnN0X2Rldiwgc3RhdC5zdF9pbm8pOworICBp
ZiAoIWR3YXRjaCkKKyAgICB7CisgICAgICBMb2c6OmRlYnVnICgiTmV3IERpcldhdGNoIGZvciAl
cyAoJXggJXgpXG4iLAorCQkgIG5vdGlmeV9kaXIsIChpbnQpc3RhdC5zdF9kZXYsIChpbnQpc3Rh
dC5zdF9pbm8pOworICAgICAgZHdhdGNoID0gbmV3IERpcldhdGNoOworICAgICAgZHdhdGNoLT53
YXRjaGVzID0gTlVMTDsKKyAgICAgIGR3YXRjaC0+aGFzaF9saW5rID0gTlVMTDsKKyAgICAgIGR3
YXRjaC0+ZGlyX2RldiA9IHN0YXQuc3RfZGV2OworICAgICAgZHdhdGNoLT5kaXJfaW5vID0gc3Rh
dC5zdF9pbm87CisgICAgICAKKyAgICAgIGR3YXRjaC0+ZmQgPSBvcGVuKG5vdGlmeV9kaXIsIE9f
UkRPTkxZKTsKKyAgICAgIGZjbnRsIChkd2F0Y2gtPmZkLCBGX1NFVFNJRywgU0lHUlRNSU4pOwor
ICAgICAgaWYgKGZjbnRsIChkd2F0Y2gtPmZkLCBGX05PVElGWSwKKyAgICAgICAgICAgICAgICAg
KEROX01PRElGWXxETl9DUkVBVEV8RE5fREVMRVRFfEROX1JFTkFNRXxETl9BVFRSSUIpIAorCQkg
IHwgRE5fTVVMVElTSE9UKSA9PSAtMSkgeworCSAgICAgIHJldHVybiBCQUQ7CisgICAgICB9Cisg
ICAgICBoYXNoX2RpcndhdGNoIChkd2F0Y2gpOworICAgIH0KKworICBmdyA9IGxvb2t1cF9maWxl
d2F0Y2ggKGZpbGVfZGV2LCBmaWxlX2lubyk7CisgIGlmIChmdyAmJiBmdy0+ZGlyX3dhdGNoID09
IGR3YXRjaCkKKwlyZXR1cm4gT0s7CisgIAorICAvLyBObyBvbGQgRmlsZVdhdGNoLCBuZWVkIHRv
IGFkZCBvbmU6CisgIExvZzo6ZGVidWcoIk5ldyBGaWxlV2F0Y2ggZm9yICV4ICV4XG4iLCAoaW50
KWZpbGVfZGV2LCAoaW50KWZpbGVfaW5vKTsKKyAgZncgPSBuZXcgRmlsZVdhdGNoOworICBmdy0+
bmV4dCA9IGR3YXRjaC0+d2F0Y2hlczsKKyAgZHdhdGNoLT53YXRjaGVzID0gZnc7CisgIGZ3LT5m
aWxlX2RldiA9IGZpbGVfZGV2OworICBmdy0+ZmlsZV9pbm8gPSBmaWxlX2lubzsKKyAgZnctPmRp
cl93YXRjaCA9IGR3YXRjaDsKKyAgaGFzaF9maWxld2F0Y2goZncpOworICByZXR1cm4gT0s7Cit9
CisKK2NoYXIgKgorZGlybmFtZV9kdXAgKGNvbnN0IGNoYXIgKm5hbWUpCit7CisgIGNoYXIgKmNv
cHkgPSBzdHJkdXAobmFtZSk7CisgIGNoYXIgKnJlcyA9IGRpcm5hbWUoY29weSk7CisgIHJlcyA9
IHN0cmR1cChyZXMpOworICBmcmVlIChjb3B5KTsKKyAgcmV0dXJuIHJlczsKK30KKworRE5vdGlm
eTo6U3RhdHVzCitETm90aWZ5OjpleHByZXNzKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBzdGF0
ICpzdGF0dXMpCit7CisgICAgc3RydWN0IHN0YXQgc3RhdDsKKyAgICBjaGFyICpub3RpZnlfZGly
OworICAgIGludCByZXM7CisgICAgU3RhdHVzIHM7CisgICAgZGV2X3QgZGV2OworICAgIGlub190
IGlubzsKKworICAgIExvZzo6ZGVidWcoImV4cHJlc3MoKSBuYW1lOiAlc1xuIiwgbmFtZSk7CisK
KyAgICBpZiAoIWlzX2FjdGl2ZSgpKQorCXJldHVybiBCQUQ7CisKKyAgICBpZiAoOjpsc3RhdCAo
bmFtZSwgJnN0YXQpID09IC0xKQorICAgICAgcmV0dXJuIEJBRDsKKworICAgIGRldiA9IHN0YXQu
c3RfZGV2OworICAgIGlubyA9IHN0YXQuc3RfaW5vOworICAgIAorICAgIGlmICgoc3RhdC5zdF9t
b2RlICYgU19JRk1UKSAhPSBTX0lGRElSKQorCW5vdGlmeV9kaXIgPSBkaXJuYW1lX2R1cCAobmFt
ZSk7CisgICAgZWxzZQorCW5vdGlmeV9kaXIgPSAoY2hhciAqKW5hbWU7CisKKyAgICBzID0gd2F0
Y2hfZGlyIChub3RpZnlfZGlyLCBkZXYsIGlubyk7CisgICAgaWYgKG5vdGlmeV9kaXIgIT0gbmFt
ZSkKKyAgICAgICAgZnJlZSAobm90aWZ5X2Rpcik7CisgICAgaWYgKHMpCisgICAgICByZXR1cm4g
czsKKworICAgIC8vIENoZWNrIGZvciBhIHJhY2UgY29uZGl0aW9uOyBpZiBzb21lb25lIHJlbW92
ZWQgb3IgY2hhbmdlZCB0aGUKKyAgICAvLyBmaWxlIGF0IHRoZSBzYW1lIHRpbWUgdGhhdCB3ZSBh
cmUgZXhwcmVzc2luZyBpbnRlcmVzdCBpbiBpdCwKKyAgICAvLyByZXZva2UgdGhlIGludGVyZXN0
IHNvIHdlIGRvbid0IGdldCBub3RpZmljYXRpb25zIGFib3V0IGNoYW5nZXMKKyAgICAvLyB0byBh
IHJlY3ljbGVkIGlub2RlIHRoYXQgd2UgZG9uJ3Qgb3RoZXJ3aXNlIGNhcmUgYWJvdXQuCisgICAg
Ly8KKyAgICBzdHJ1Y3Qgc3RhdCBzdDsKKyAgICBpZiAoc3RhdHVzID09IE5VTEwpIHsKKwlzdGF0
dXMgPSAmc3Q7CisgICAgfQorICAgIGlmICg6OmxzdGF0KG5hbWUsIHN0YXR1cykgPT0gLTEpIHsK
KwlMb2c6OnBlcnJvcigic3RhdCBvbiBcIiVzXCIgZmFpbGVkIiwgbmFtZSk7CisJcmV2b2tlKG5h
bWUsIHN0YXQuc3RfZGV2LCBzdGF0LnN0X2lubyk7CisJcmV0dXJuIEJBRDsKKyAgICB9CisgICAg
aWYgKHN0YXR1cy0+c3RfZGV2ICE9IHN0YXQuc3RfZGV2CisJfHwgc3RhdHVzLT5zdF9pbm8gIT0g
c3RhdC5zdF9pbm8pIHsKKwlMb2c6OmVycm9yKCJGaWxlIFwiJXNcIiBjaGFuZ2VkIGJldHdlZW4g
ZXhwcmVzcyBhbmQgc3RhdCIsCisJCSAgIG5hbWUpOworCXJldm9rZShuYW1lLCBzdGF0LnN0X2Rl
diwgc3RhdC5zdF9pbm8pOworCXJldHVybiBCQUQ7CisgICAgfQkKKworICAgIExvZzo6ZGVidWco
InRvbGQgZG5vdGlmeSB0byBtb25pdG9yIFwiJXNcIiA9IGRldiAlZC8lZCwgaW5vICVkIiwgbmFt
ZSwKKwkgICAgICAgbWFqb3Ioc3RhdHVzLT5zdF9kZXYpLCBtaW5vcihzdGF0dXMtPnN0X2Rldiks
CisJICAgICAgIHN0YXR1cy0+c3RfaW5vKTsKKyAgICByZXR1cm4gT0s7Cit9CisKK0ROb3RpZnk6
OlN0YXR1cworRE5vdGlmeTo6cmV2b2tlKGNvbnN0IGNoYXIgKm5hbWUsIGRldl90IGRldiwgaW5v
X3QgaW5vKQoreworICAgIEZpbGVXYXRjaCAqZndhdGNoOworICAgIERpcldhdGNoICpkd2F0Y2g7
CisgICAgCisgICAgTG9nOjpkZWJ1ZygicmV2b2tlKCkgbmFtZTogJXMsIGRldjogJXgsIGlubzog
JXhcbiIsIG5hbWUsIGRldiwgaW5vKTsKKworICAgIGlmICghaXNfYWN0aXZlKCkpCisJcmV0dXJu
IEJBRDsKKworICAgIC8vIExvb2t1cCBGaWxlV2F0Y2ggYnkgZGV2OmlubywgYW5kIGl0cyBEaXJX
YXRjaC4KKyAgICBmd2F0Y2ggPSBsb29rdXBfZmlsZXdhdGNoIChkZXYsIGlubyk7CisgICAgaWYg
KGZ3YXRjaCA9PSBOVUxMKQorCXJldHVybiBCQUQ7CisgICAgCisgICAgZHdhdGNoID0gZndhdGNo
LT5kaXJfd2F0Y2g7CisgICAgCisgICAgLy8gZGVsZXRlIEZpbGVXYXRjaCwgaWYgbGFzdCBGaWxl
V2F0Y2g6IGNsb3NlIGZkLCBkZWxldGUgRGlyV2F0Y2gKKyAgICBMb2c6OmRlYnVnICgiRGVzdHJv
eWluZyBGaWxlV2F0Y2ggZm9yICgleCAleClcbiIsCisJCShpbnQpZndhdGNoLT5maWxlX2Rldiwg
KGludClmd2F0Y2gtPmZpbGVfaW5vKTsKKyAgICBGaWxlV2F0Y2ggKipwOworICAgIGZvciAocD0m
ZHdhdGNoLT53YXRjaGVzOyAqcDsgcD0mKCpwKS0+bmV4dCkKKyAgICB7CisgICAgICBpZiAoKnAg
PT0gZndhdGNoKQorCXsKKwkgICpwID0gKCpwKS0+bmV4dDsKKwkgIGJyZWFrOworCX0KKyAgICB9
CisgICAgdW5oYXNoX2ZpbGV3YXRjaChmd2F0Y2gpOworICAgIGRlbGV0ZSBmd2F0Y2g7CisgICAg
aWYgKGR3YXRjaC0+d2F0Y2hlcyA9PSBOVUxMKQorICAgICAgeworCUxvZzo6ZGVidWcgKCJEZXN0
cm95aW5nIERpcldhdGNoIGZvciAoJXggJXgpXG4iLAorCQkgICAgKGludClkd2F0Y2gtPmRpcl9k
ZXYsIChpbnQpZHdhdGNoLT5kaXJfaW5vKTsKKwljbG9zZShkd2F0Y2gtPmZkKTsKKwl1bmhhc2hf
ZGlyd2F0Y2goZHdhdGNoKTsKKwlkZWxldGUgZHdhdGNoOworICAgICAgfQorICAKKyAgICByZXR1
cm4gT0s7Cit9CisKKwordm9pZAorRE5vdGlmeTo6YWxsX3dhdGNoZXNfY2hhbmdlZCh2b2lkKQor
eworICBpbnQgaTsKKyAgRmlsZVdhdGNoICpmdzsKKworICBmb3IgKGk9MDsgaTxGSUxFX0hBU0hT
SVpFOyBpKyspCisgIHsKKyAgICAgIGZ3ID0gZmlsZV9oYXNoW2ldOworICAgICAgd2hpbGUgKGZ3
KQorICAgICAgeworCSAgKCplaGFuZGxlcikoZnctPmZpbGVfZGV2LCBmdy0+ZmlsZV9pbm8sIENI
QU5HRSk7CisKKwkgIGZ3ID0gZnctPmhhc2hfbGluazsKKyAgICAgIH0KKyAgfQorfQorCisKK3Zv
aWQKK0ROb3RpZnk6OnJlYWRfaGFuZGxlcihpbnQgZmQsIHZvaWQgKikKK3sKKyAgICBzdGF0aWMg
Y2hhciByZWFkYnVmWzUwMDBdOworICAgIERpcldhdGNoICpkdzsKKyAgICBGaWxlV2F0Y2ggKmZ3
OworICAgIGludCBzbmFwX3F1ZXVlX3RhaWw7CisgICAgaW50IGxhc3RfZmQ7CisKKyAgICBpbnQg
cmMgPSByZWFkKGZkLCByZWFkYnVmLCBzaXplb2YgcmVhZGJ1Zik7CisgICAgcXVldWVfY2hhbmdl
ZCA9IDA7CisgICAgaWYgKHJjIDwgMCkKKyAgICAgICAgTG9nOjpwZXJyb3IoInBpcGUgcmVhZCIp
OworICAgIGVsc2UgaWYgKHF1ZXVlX292ZXJmbG93ZWQpCisgICAgeworCSAgLy8gVGhlcmUgaXMg
YSAqc2xpZ2h0KiByYWNlIGNvbmRpdGlvbiBoZXJlLiBCZXR3ZWVuIHJlYWRpbmcKKwkgIC8vIHRo
ZSBxdWV1ZV9vdmVyZmxvdyBmbGFnIGFuZCByZXNldHRpbmcgaXQuIEJ1dCBpdCBkb2Vzbid0CisJ
ICAvLyBtYXR0ZXIsIHNpbmNlIEknbSBnb25uYSBoYW5kbGUgdGhlIG92ZXJmbG93IGFmdGVyIHJl
c2V0aW5nCisJICAvLyBhbnl3YXkuCisJICBxdWV1ZV9vdmVyZmxvd2VkID0gZmFsc2U7CisKKwkg
IC8vIFdlJ3JlIHNvb24gZ29ubmEgY2hlY2sgYWxsIHdhdGNoZXMgYW55d2F5LCBzbworCSAgLy8g
Z2V0IHJpZCBvZiB0aGUgY3VycmVudCBxdWV1ZQorCSAgcXVldWVfaGVhZCA9IHF1ZXVlX3RhaWw7
CisJICAKKwkgIGFsbF93YXRjaGVzX2NoYW5nZWQgKCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7
CisJLy8gRG9uJ3QgcmVhZCBldmVudHMgdGhhdCBoYXBwZW4gbGF0ZXIgdGhhbgorCS8vIHRoZSBp
bml0aWFsIHJlYWQuIChPdGhlcndpc2Ugc2tpcHBpbmcgZmQncworCS8vIG1pZ2h0IG1pc3Mgc29t
ZSBjaGFuZ2VzKS4KKwlzbmFwX3F1ZXVlX3RhaWwgPSBxdWV1ZV90YWlsOworCWxhc3RfZmQgPSAt
MTsKKwl3aGlsZSAocXVldWVfaGVhZCAhPSBzbmFwX3F1ZXVlX3RhaWwpCisJeworCSAgICBmZCA9
IGNoYW5nZV9xdWV1ZVtxdWV1ZV9oZWFkXTsKKwkgICAgcXVldWVfaGVhZCA9IChxdWV1ZV9oZWFk
ICsgMSkgJSBRVUVVRVNJWkU7CisKKwkgICAgLy8gU2tpcCBtdWx0aXBsZSBjaGFuZ2VzIHRvIHRo
ZSBzYW1lIGZkCisJICAgIGlmIChmZCAhPSBsYXN0X2ZkKQorCSAgICB7CisJCWR3ID0gbG9va3Vw
X2RpcndhdGNoIChmZCk7CisJCWlmIChkdykKKwkJeworCQkgICAgaW50IG5fd2F0Y2hlcywgaTsK
KwkJICAgIENoYW5nZUV2ZW50RGF0YSAqZGF0YTsKKwkJICAgIAorCQkgICAgTG9nOjpkZWJ1Zygi
ZG5vdGlmeSBzYWlkIGRldiAlZC8lZCwgaW5vICVsZCBjaGFuZ2VkIiwKKwkJCSAgICAgICBtYWpv
cihkdy0+ZGlyX2RldiksIG1pbm9yKGR3LT5kaXJfZGV2KSwgZHctPmRpcl9pbm8pOworCQkgICAg
CisJCSAgICBuX3dhdGNoZXMgPSAwOworCQkgICAgZm9yIChmdz1kdy0+d2F0Y2hlczsgZnc7IGZ3
PWZ3LT5uZXh0KQorCQkJbl93YXRjaGVzKys7CisJCSAgICAKKwkJICAgIGRhdGEgPSBuZXcgQ2hh
bmdlRXZlbnREYXRhW25fd2F0Y2hlc107CisKKwkJICAgIGkgPSAwOworCQkgICAgZm9yIChmdz1k
dy0+d2F0Y2hlczsgZnc7IGZ3PWZ3LT5uZXh0KQorCQkgICAgeworCQkJZGF0YVtpXS5maWxlX2Rl
diA9IGZ3LT5maWxlX2RldjsKKwkJCWRhdGFbaV0uZmlsZV9pbm8gPSBmdy0+ZmlsZV9pbm87CisJ
CQlpKys7CisJCSAgICB9CisKKwkJICAgIGZvciAoaSA9IDA7IGkgPCBuX3dhdGNoZXM7IGkrKykK
KwkJICAgIHsKKwkJCSgqZWhhbmRsZXIpKGRhdGFbaV0uZmlsZV9kZXYsIGRhdGFbaV0uZmlsZV9p
bm8sIENIQU5HRSk7CisJCSAgICB9CisJCSAgICAKKwkJICAgIGRlbGV0ZVtdIGRhdGE7CisJCX0K
KwkgICAgfQorCSAgICBsYXN0X2ZkID0gZmQ7CisJfQorICAgIH0KK30KKwotLS0gZmFtLTIuNy4w
L3NyYy9ETm90aWZ5LmgJMjAwNC0wMS0zMCAwMDowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIGZh
bS0yLjcuMC5kbm90aWZ5L3NyYy9ETm90aWZ5LmgJMjAwNC0wMS0zMCAwMDowMDowMC4wMDAwMDAw
MDAgKzAxMDAKQEAgLTAsMCArMSw5OCBAQAorLy8gIENvcHlyaWdodCAoQykgMjAwMSBSZWQgSGF0
LCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8gIENvcHlyaWdodCAoQykgMTk5OSBTaWxp
Y29uIEdyYXBoaWNzLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vICBUaGlzIHBy
b2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1v
ZGlmeSBpdAorLy8gIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGFzCisvLyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24uCisvLworLy8gIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdvdWxkIGJlIHVzZWZ1bCwgYnV0CisvLyAgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIEZ1cnRoZXIsIGFueQor
Ly8gIGxpY2Vuc2UgcHJvdmlkZWQgaGVyZWluLCB3aGV0aGVyIGltcGxpZWQgb3Igb3RoZXJ3aXNl
LCBpcyBsaW1pdGVkIHRvCisvLyAgdGhpcyBwcm9ncmFtIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUg
ZXhwcmVzcyBwcm92aXNpb25zIG9mIHRoZSBHTlUKKy8vICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
LiAgUGF0ZW50IGxpY2Vuc2VzLCBpZiBhbnksIHByb3ZpZGVkIGhlcmVpbiBkbyBub3QKKy8vICBh
cHBseSB0byBjb21iaW5hdGlvbnMgb2YgdGhpcyBwcm9ncmFtIHdpdGggb3RoZXIgcHJvZHVjdCBv
ciBwcm9ncmFtcywgb3IKKy8vICBhbnkgb3RoZXIgcHJvZHVjdCB3aGF0c29ldmVyLiAgVGhpcyBw
cm9ncmFtIGlzIGRpc3RyaWJ1dGVkIHdpdGhvdXQgYW55CisvLyAgd2FycmFudHkgdGhhdCB0aGUg
cHJvZ3JhbSBpcyBkZWxpdmVyZWQgZnJlZSBvZiB0aGUgcmlnaHRmdWwgY2xhaW0gb2YgYW55Cisv
LyAgdGhpcmQgcGVyc29uIGJ5IHdheSBvZiBpbmZyaW5nZW1lbnQgb3IgdGhlIGxpa2UuICBTZWUg
dGhlIEdOVSBHZW5lcmFsCisvLyAgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKy8v
CisvLyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgYWxvbmcKKy8vICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0
ZSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OQorLy8gIFRlbXBsZSBQbGFj
ZSAtIFN1aXRlIDMzMCwgQm9zdG9uIE1BIDAyMTExLTEzMDcsIFVTQS4KKworI2lmbmRlZiBETm90
aWZ5X2luY2x1ZGVkCisjZGVmaW5lIEROb3RpZnlfaW5jbHVkZWQKKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIk1vbml0b3IuaCIKKyNpbmNsdWRlIDxzaWduYWwuaD4KKworLy8gIERO
b3RpZnkgaXMgYW4gb2JqZWN0IGVuY2Fwc3VsYXRpbmcgdGhlIGRub3RpZnkgbGludXggZmNudGwu
CisvLyAgSXQgImVtdWxhdGVzIiB0aGUgSU1vbiBpbnRlcmZhY2UuCisvLyAgVGhlcmUgY2FuIG9u
bHkgYmUgb25lIGluc3RhbnRpYXRpb24gb2YgdGhlIEROb3RpZnkgb2JqZWN0LgorLy8KKy8vICBU
aGUgdXNlciBvZiB0aGlzIG9iamVjdCB1c2VzIGV4cHJlc3MoKSBhbmQgcmV2b2tlKCkgdG8KKy8v
ICBleHByZXNzL3Jldm9rZSBpbnRlcmVzdCBpbiBhIGZpbGUuICBUaGVyZSBpcyBhbHNvCisvLyAg
YSBjYWxsYmFjaywgdGhlIEV2ZW50SGFuZGxlci4gIFdoZW4gYW4gZG5vdGlmeSBldmVudCBjb21l
cyBpbiwKKy8vICB0aGUgRXZlbnRIYW5kbGVyIGlzIGNhbGxlZC4KKy8vCisvLyAgVGhlIHVzZXIg
b2YgdGhlIEROb3RpZnkgb2JqZWN0IGlzIHRoZSBJbnRlcmVzdCBjbGFzcy4KKworY2xhc3MgRE5v
dGlmeSA6IHB1YmxpYyBNb25pdG9yIHsKK3B1YmxpYzoKKyAgICBETm90aWZ5KEV2ZW50SGFuZGxl
ciBoKTsKKyAgICB+RE5vdGlmeSgpOworCisgICAgc3RhdGljIGJvb2wgaXNfYWN0aXZlKCk7CisK
KyAgICB2aXJ0dWFsIFN0YXR1cyBleHByZXNzKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBzdGF0
ICpzdGF0X3JldHVybik7CisgICAgdmlydHVhbCBTdGF0dXMgcmV2b2tlKGNvbnN0IGNoYXIgKm5h
bWUsIGRldl90IGRldiwgaW5vX3QgaW5vKTsKKworcHJpdmF0ZToKKyAgICBzdHJ1Y3QgRmlsZVdh
dGNoOworICAgIHN0cnVjdCBEaXJXYXRjaDsKKyAgICBzdHJ1Y3QgQ2hhbmdlRXZlbnREYXRhOwor
ICAKKyAgICAvLyAgQ2xhc3MgVmFyaWFibGVzCisgICAgZW51bSB7IFFVRVVFU0laRSA9IDEwMjQg
fTsKKyAgICBzdGF0aWMgaW50IHBpcGVfd3JpdGVfZmQ7CisgICAgc3RhdGljIGludCBwaXBlX3Jl
YWRfZmQ7CisgICAgc3RhdGljIGludCBjaGFuZ2VfcXVldWVbUVVFVUVTSVpFXTsKKyAgICBzdGF0
aWMgdm9sYXRpbGUgc2lnX2F0b21pY190IEROb3RpZnk6OnF1ZXVlX292ZXJmbG93ZWQ7CisgICAg
c3RhdGljIHZvbGF0aWxlIHNpZ19hdG9taWNfdCBETm90aWZ5OjpxdWV1ZV9jaGFuZ2VkOworICAg
IHN0YXRpYyB2b2xhdGlsZSBpbnQgcXVldWVfaGVhZDsgLy8gT25seSBtb2RpZmllZCBieSByZWFk
IGhhbmRsZXIKKyAgICBzdGF0aWMgdm9sYXRpbGUgaW50IHF1ZXVlX3RhaWw7IC8vIE9ubHkgbW9k
aWZpZWQgYnkgc2lnbmFsIGhhbmRsZXIKKyAgICBzdGF0aWMgRXZlbnRIYW5kbGVyIGVoYW5kbGVy
OworICAgIHN0YXRpYyB2b2lkIG92ZXJmbG93X3NpZ25hbF9oYW5kbGVyKGludCBzaWcsIHNpZ2lu
Zm9fdCAqc2ksIHZvaWQgKmRhdGEpOworICAgIHN0YXRpYyB2b2lkIHNpZ25hbF9oYW5kbGVyKGlu
dCBzaWcsIHNpZ2luZm9fdCAqc2ksIHZvaWQgKmRhdGEpOworICAgIHN0YXRpYyB2b2lkIHJlYWRf
aGFuZGxlcihpbnQgZmQsIHZvaWQgKmNsb3N1cmUpOworIAorICAgIGVudW0geyBESVJfSEFTSFNJ
WkUgPSAzNjcgfTsKKyAgICBzdGF0aWMgRGlyV2F0Y2ggKmRpcl9oYXNoW0RJUl9IQVNIU0laRV07
CisgICAgZW51bSB7IEZJTEVfSEFTSFNJWkUgPSA4MjMgfTsKKyAgICBzdGF0aWMgRmlsZVdhdGNo
ICpmaWxlX2hhc2hbRklMRV9IQVNIU0laRV07CisKKyAgICBzdGF0aWMgRGlyV2F0Y2ggKipkaXJf
aGFzaGNoYWluKGludCBmZCkKKwkJCSAgeyByZXR1cm4gJmRpcl9oYXNoWyh1bnNpZ25lZCkgKGZk
KSAlIERJUl9IQVNIU0laRV07IH0KKyAgICBzdGF0aWMgRmlsZVdhdGNoICoqZmlsZV9oYXNoY2hh
aW4oZGV2X3QgZCwgaW5vX3QgaSkKKwkJCSAgeyByZXR1cm4gJmZpbGVfaGFzaFsodW5zaWduZWQp
IChkK2kpICUgRklMRV9IQVNIU0laRV07IH0KKworICAgIHN0YXRpYyBEaXJXYXRjaCAqbG9va3Vw
X2RpcndhdGNoIChpbnQgZmQpOworICAgIHN0YXRpYyBEaXJXYXRjaCAqbG9va3VwX2RpcndhdGNo
IChkZXZfdCBkaXJfZGV2LCBpbm9fdCBkaXJfaW5vKTsKKyAgICBzdGF0aWMgRmlsZVdhdGNoICps
b29rdXBfZmlsZXdhdGNoIChkZXZfdCBmaWxlX2RldiwgaW5vX3QgZmlsZV9pbm8pOworICAgIHN0
YXRpYyB2b2lkIGhhc2hfZGlyd2F0Y2goRGlyV2F0Y2ggKncpOworICAgIHN0YXRpYyB2b2lkIGhh
c2hfZmlsZXdhdGNoKEZpbGVXYXRjaCAqdyk7CisgICAgc3RhdGljIHZvaWQgdW5oYXNoX2Rpcndh
dGNoKERpcldhdGNoICp3KTsKKyAgICBzdGF0aWMgdm9pZCB1bmhhc2hfZmlsZXdhdGNoKEZpbGVX
YXRjaCAqdyk7CisgICAgc3RhdGljIFN0YXR1cyB3YXRjaF9kaXIoY29uc3QgY2hhciAqbm90aWZ5
X2RpciwgZGV2X3QgZmlsZV9kZXYsIGlub190IGZpbGVfaW5vKTsKKworICAgIHN0YXRpYyB2b2lk
IGFsbF93YXRjaGVzX2NoYW5nZWQodm9pZCk7CisgICAgCisgICAgRE5vdGlmeShjb25zdCBETm90
aWZ5Jik7CQkJLy8gRG8gbm90IGNvcHkKKyAgICBETm90aWZ5ICYgb3BlcmF0b3IgPSAoY29uc3Qg
RE5vdGlmeSYpOwkvLyAgb3IgYXNzaWduLgorfTsKKworI2VuZGlmIC8qICFJTW9uX2luY2x1ZGVk
ICovCisKKwotLS0gZmFtLTIuNy4wL3NyYy9JbnRlcmVzdC5jKysJMjAwNC0wMS0zMCAwMDowMDow
MC4wMDAwMDAwMDAgKzAxMDAKKysrIGZhbS0yLjcuMC5kbm90aWZ5L3NyYy9JbnRlcmVzdC5jKysJ
MjAwNC0wMS0zMCAwMDowMDowMC4wMDAwMDAwMDAgKzAxMDAKQEAgLTQyLDEyICs0MiwyMSBAQAog
I2luY2x1ZGUgIkV2ZW50LmgiCiAjaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgogI2luY2x1ZGUgIklN
b24uaCIKKyNpbmNsdWRlICJETm90aWZ5LmgiCiAjaW5jbHVkZSAiTG9nLmgiCiAjaW5jbHVkZSAi
UG9sbHN0ZXIuaCIKICNpbmNsdWRlICJ0aW1ldmFsLmgiCiAKIEludGVyZXN0ICpJbnRlcmVzdDo6
aGFzaHRhYmxlW107Ci1JTW9uICAgICAgSW50ZXJlc3Q6Omltb24oaW1vbl9oYW5kbGVyKTsKKwor
I2lmZGVmIFVTRV9ETk9USUZZIAorc3RhdGljIEROb3RpZnkgZG5vdGlmeShJbnRlcmVzdDo6bW9u
aXRvcl9oYW5kbGVyKTsKK01vbml0b3IgKiBJbnRlcmVzdDo6bW9uaXRvciA9ICZkbm90aWZ5Owor
I2Vsc2UKK3N0YXRpYyBJTW9uIGltb24oSW50ZXJlc3Q6Om1vbml0b3JfaGFuZGxlcik7CitNb25p
dG9yICogSW50ZXJlc3Q6Om1vbml0b3IgPSAmaW1vbjsKKyNlbmRpZgorCiBib29sICAgICAgSW50
ZXJlc3Q6Onh0YWJfdmVyaWZpY2F0aW9uID0gdHJ1ZTsKIAogSW50ZXJlc3Q6OkludGVyZXN0KGNv
bnN0IGNoYXIgKm5hbWUsIEZpbGVTeXN0ZW0gKmZzLCBpbl9hZGRyIGhvc3QsIEV4cG9ydFZlcmlm
aWNhdGlvbiBldikKQEAgLTYwLDEwICs2OSwxMCBAQAogICAgICAgbXlwYXRoX2V4cG9ydGVkX3Rv
X2hvc3QoZXYgPT0gTk9fVkVSSUZZX0VYUE9SVEVEKQogewogICAgIG1lbXNldCgmb2xkX3N0YXQs
IDAsIHNpemVvZihvbGRfc3RhdCkpOyAKLSAgICBJTW9uOjpTdGF0dXMgcyA9IElNb246OkJBRDsK
IAotICAgIHMgPSBpbW9uLmV4cHJlc3MobmFtZSwgJm9sZF9zdGF0KTsKLSAgICBpZiAocyAhPSBJ
TW9uOjpPSykKKyAgICBNb25pdG9yOjpTdGF0dXMgcyA9IE1vbml0b3I6OkJBRDsKKyAgICBzID0g
bW9uaXRvci0+ZXhwcmVzcyhuYW1lLCAmb2xkX3N0YXQpOworICAgIGlmIChzICE9IE1vbml0b3I6
Ok9LKQogICAgIHsgICBpbnQgcmMgPSBsc3RhdChuYW1lLCAmb2xkX3N0YXQpOwogCWlmIChyYyA8
IDApCiAJeyAgIExvZzo6aW5mbygiY2FuJ3QgbHN0YXQgJXMiLCBuYW1lKTsKQEAgLTEwMCw3ICsx
MDksNyBAQAogICAgIH0KICNlbmRpZgogCi0gICAgaWYgKGV4cG9ydGVkX3RvX2hvc3QoKSkgZnMt
PmxsX21vbml0b3IodGhpcywgcyA9PSBJTW9uOjpPSyk7CisgICAgaWYgKGV4cG9ydGVkX3RvX2hv
c3QoKSkgZnMtPmxsX21vbml0b3IodGhpcywgcyA9PSBNb25pdG9yOjpPSyk7CiB9CiAKIEludGVy
ZXN0Ojp+SW50ZXJlc3QoKQpAQCAtMTI4LDcgKzEzNyw3IEBACiAJCXBwID0gJnAtPmhhc2hsaW5r
OwkvLyBtb3ZlIHRvIG5leHQgZWxlbWVudAogCSAgICB9CiAJaWYgKCFmb3VuZF9zYW1lKQotCSAg
ICAodm9pZCkgaW1vbi5yZXZva2UobmFtZSgpLCBkZXYsIGlubyk7CisJICAodm9pZCkgbW9uaXRv
ci0+cmV2b2tlKG5hbWUoKSwgZGV2LCBpbm8pOwogICAgIH0KIH0KIApAQCAtMTQ3LDcgKzE1Niw3
IEBACiAKICAgICAgICAgLy8gRXhwcmVzcyBpbnRlcmVzdC4KICAgICAgICAgSU1vbjo6U3RhdHVz
IHMgPSBJTW9uOjpCQUQ7Ci0JcyA9IGltb24uZXhwcmVzcyhuYW1lKCksIE5VTEwpOworCXMgPSBt
b25pdG9yLT5leHByZXNzKG5hbWUoKSwgTlVMTCk7CiAgICAgICAgIGlmIChzICE9IElNb246Ok9L
KSB7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpAQCAtMjQ4LDIzICsyNTcs
MjMgQEAKIH0KIAogdm9pZAotSW50ZXJlc3Q6Omltb25faGFuZGxlcihkZXZfdCBkZXZpY2UsIGlu
b190IGludW1iZXIsIGludCBldmVudCkKK0ludGVyZXN0Ojptb25pdG9yX2hhbmRsZXIoZGV2X3Qg
ZGV2aWNlLCBpbm9fdCBpbnVtYmVyLCBpbnQgZXZlbnQpCiB7CiAgICAgYXNzZXJ0KGRldmljZSB8
fCBpbnVtYmVyKTsKIAogICAgIGZvciAoSW50ZXJlc3QgKnAgPSAqaGFzaGNoYWluKGRldmljZSwg
aW51bWJlciksICpuZXh0ID0gcDsgcDsgcCA9IG5leHQpCiAgICAgewluZXh0ID0gcC0+aGFzaGxp
bms7CiAJaWYgKHAtPmlubyA9PSBpbnVtYmVyICYmIHAtPmRldiA9PSBkZXZpY2UpCi0JeyAgIGlm
IChldmVudCA9PSBJTW9uOjpFWEVDKQorCSAgeyAgIGlmIChldmVudCA9PSBNb25pdG9yOjpFWEVD
KQogCSAgICB7ICAgcC0+Y3VyX2V4ZWNfc3RhdGUgPSBFWEVDVVRJTkc7CiAJCSh2b2lkKSBwLT5y
ZXBvcnRfZXhlY19zdGF0ZSgpOwogCSAgICB9Ci0JICAgIGVsc2UgaWYgKGV2ZW50ID09IElNb246
OkVYSVQpCisJICAgIGVsc2UgaWYgKGV2ZW50ID09IE1vbml0b3I6OkVYSVQpCiAJICAgIHsgICBw
LT5jdXJfZXhlY19zdGF0ZSA9IE5PVF9FWEVDVVRJTkc7CiAJCSh2b2lkKSBwLT5yZXBvcnRfZXhl
Y19zdGF0ZSgpOwogCSAgICB9CiAJICAgIGVsc2UKLQkgICAgeyAgIGFzc2VydChldmVudCA9PSBJ
TW9uOjpDSEFOR0UpOworCSAgICB7ICAgYXNzZXJ0KGV2ZW50ID09IE1vbml0b3I6OkNIQU5HRSk7
CiAJCXAtPnNjYW4oKTsKIAkgICAgfQogCX0KLS0tIGZhbS0yLjcuMC9jb25maWcuaC5pbgkyMDAz
LTAxLTIwIDAxOjQwOjE1LjAwMDAwMDAwMCArMDEwMAorKysgZmFtLTIuNy4wLmRub3RpZnkvY29u
ZmlnLmguaW4JMjAwNC0wMS0zMCAxMzo1MDozMy4wMDAwMDAwMDAgKzAxMDAKQEAgLTE4MCwzICsx
ODAsNiBAQAogCiAvKiBEZWZpbmUgdG8gYGludCcgaWYgPHN5cy90eXBlcy5oPiBkb2Vzbid0IGRl
ZmluZS4gKi8KICN1bmRlZiB1aWRfdAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSBGX05P
VElGWSBmY250bCAqLworI3VuZGVmIFVTRV9ETk9USUZZCi0tLSBmYW0tMi43LjAvY29uZmlndXJl
LmFjCTIwMDMtMTEtMjYgMjA6NDc6NTkuMDAwMDAwMDAwICswMTAwCisrKyBmYW0tMi43LjAuZG5v
dGlmeS9jb25maWd1cmUuYWMJMjAwNC0wMS0zMCAxMzo1MDozMy4wMDAwMDAwMDAgKzAxMDAKQEAg
LTM0LDcgKzM0LDI2IEBACiBBQ19IRUFERVJfRElSRU5UCiBBQ19DSEVDS19IRUFERVJTKFtmY250
bC5oIGxpbWl0cy5oIGxpbnV4L2ltb24uaCBuZXRpbmV0L2luLmggcnBjL3JwYy5oIHJwY3N2Yy9t
b3VudC5oIHN0ZGRlZi5oIHN0ZGxpYi5oIHN0cmluZy5oIHN5c2xvZy5oIHN5cy9pbW9uLmggc3lz
L3BhcmFtLmggc3lzL3NlbGVjdC5oIHN5cy9zdGF0dmZzLmggc3lzL3N5c3NnaS5oIHN5cy90aW1l
Lmggc3lzL3R5cGVzLmggc3lzL3VuLmggdW5pc3RkLmhdKQogCi1pZiB0ZXN0ICIkaGF2ZV9zeXNf
aW1vbl9oIjsgdGhlbgorIyBUZXN0IGZvciB0aGUgbGludXggZG5vdGlmeSBmY250bAorQUNfTVNH
X0NIRUNLSU5HKFtmb3IgZG5vdGlmeSBmY250bCBzdXBwb3J0XSkKK0FDX1RSWV9DT01QSUxFKFsK
KyNkZWZpbmUgX0dOVV9TT1VSQ0UgIAorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8dW5p
c3RkLmg+CitdLAorWyBpbnQgZmQgPSAxOworICBmY250bCAoZmQsIEZfTk9USUZZLCAoRE5fTU9E
SUZZfEROX0NSRUFURXxETl9ERUxFVEV8RE5fUkVOQU1FfEROX0FUVFJJQikKKyAgICAgICAgICAg
ICAgICAgICAgICAgfEROX01VTFRJU0hPVCk7CitdLCBoYXZlX2Rub3RpZnk9eWVzLCBoYXZlX2Ru
b3RpZnk9bm8pCisKK3VzZV9kbm90aWZ5PWZhbHNlCitBQ19NU0dfUkVTVUxUKCRoYXZlX2Rub3Rp
ZnkpCisKK2lmIHRlc3QgIiRoYXZlX2Rub3RpZnkiOyB0aGVuCisgICAgICAgIE1PTklUT1JfRlVO
Q1M9SU1vbk5vbmUKKyAgICAgICAgQUNfREVGSU5FKFtVU0VfRE5PVElGWV0sIFtdLCBbVXNlIGRu
b3RpZnldKQorCXVzZV9kbm90aWZ5PXRydWUKK2VsaWYgdGVzdCAiJGhhdmVfc3lzX2ltb25faCI7
IHRoZW4KIAlNT05JVE9SX0ZVTkNTPUlNb25JUklYCiBlbGlmIHRlc3QgIiRoYXZlX2xpbnV4X2lt
b25faCI7IHRoZW4KIAlNT05JVE9SX0ZVTkNTPUlNb25MaW51eApAQCAtNDIsNiArNjIsNyBAQAog
CU1PTklUT1JfRlVOQ1M9SU1vbk5vbmUKIGZpCiBBQ19TVUJTVChNT05JVE9SX0ZVTkNTKQorQU1f
Q09ORElUSU9OQUwoVVNFX0ROT1RJRlksICR1c2VfZG5vdGlmeSkKIAogIyBDaGVja3MgZm9yIHR5
cGVkZWZzLCBzdHJ1Y3R1cmVzLCBhbmQgY29tcGlsZXIgY2hhcmFjdGVyaXN0aWNzLgogQUNfSEVB
REVSX1NUREJPT0wKLS0tIGZhbS0yLjcuMC9zcmMvSU1vbi5oCTIwMDQtMDEtMzAgMDA6MDA6MDAu
MDAwMDAwMDAwICswMjAwCisrKyBmYW0tMi43LjAuZG5vdGlmeS9zcmMvSU1vbi5oCTIwMDQtMDEt
MzAgMDA6MDA6MDAuMDAwMDAwMDAwICswMjAwCkBAIC0yNCwxMCArMjQsNyBAQAogI2RlZmluZSBJ
TW9uX2luY2x1ZGVkCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlIDxzeXMvc3RhdC5o
PgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotCi0jaW5jbHVkZSAiQm9vbGVhbi5oIgorI2luY2x1
ZGUgIk1vbml0b3IuaCIKIAogc3RydWN0IHN0YXQ7CiAKQEAgLTQxLDI1ICszOCwxOCBAQAogLy8K
IC8vICBUaGUgdXNlciBvZiB0aGUgSU1vbiBvYmplY3QgaXMgdGhlIEludGVyZXN0IGNsYXNzLgog
Ci1jbGFzcyBJTW9uIHsKK2NsYXNzIElNb24gOiBwdWJsaWMgTW9uaXRvciB7CiAKIHB1YmxpYzoK
LQotICAgIGVudW0gU3RhdHVzIHsgT0sgPSAwLCBCQUQgPSAtMSB9OwotICAgIGVudW0gRXZlbnQg
eyBFWEVDLCBFWElULCBDSEFOR0UgfTsKLQotICAgIHR5cGVkZWYgdm9pZCAoKkV2ZW50SGFuZGxl
cikoZGV2X3QsIGlub190LCBpbnQgZXZlbnQpOwotCiAgICAgSU1vbihFdmVudEhhbmRsZXIgaCk7
CiAgICAgfklNb24oKTsKIAogICAgIHN0YXRpYyBib29sIGlzX2FjdGl2ZSgpOwogCi0gICAgU3Rh
dHVzIGV4cHJlc3MoY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IHN0YXQgKnN0YXRfcmV0dXJuKTsK
LSAgICBTdGF0dXMgcmV2b2tlKGNvbnN0IGNoYXIgKm5hbWUsIGRldl90IGRldiwgaW5vX3QgaW5v
KTsKKyAgICB2aXJ0dWFsIFN0YXR1cyBleHByZXNzKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBz
dGF0ICpzdGF0X3JldHVybik7CisgICAgdmlydHVhbCBTdGF0dXMgcmV2b2tlKGNvbnN0IGNoYXIg
Km5hbWUsIGRldl90IGRldiwgaW5vX3QgaW5vKTsKIAogcHJpdmF0ZToKLQogICAgIC8vICBDbGFz
cyBWYXJpYWJsZXMKIAogICAgIHN0YXRpYyBpbnQgaW1vbmZkOwotLS0gZmFtLTIuNy4wL3NyYy9J
bnRlcmVzdC5oCTIwMDQtMDEtMzAgMDA6MDA6MDAuMDAwMDAwMDAwICswMjAwCisrKyBmYW0tMi43
LjAuZG5vdGlmeS9zcmMvSW50ZXJlc3QuaAkyMDA0LTAxLTMwIDAwOjAwOjAwLjAwMDAwMDAwMCAr
MDIwMApAQCAtMzIsNyArMzIsNyBAQAogCiBjbGFzcyBFdmVudDsKIGNsYXNzIEZpbGVTeXN0ZW07
Ci1jbGFzcyBJTW9uOworY2xhc3MgTW9uaXRvcjsKIHN0cnVjdCBzdGF0OwogCiAvLyAgSW50ZXJl
c3QgLS0gYWJzdHJhY3QgYmFzZSBjbGFzcyBmb3IgZmlsZXN5c3RlbSBlbnRpdGllcyBvZiBpbnRl
cmVzdC4KQEAgLTc0LDcgKzc0LDcgQEAKIAogICAgIC8vICBQdWJsaWMgQ2xhc3MgTWV0aG9kCiAK
LSAgICBzdGF0aWMgdm9pZCBpbW9uX2hhbmRsZXIoZGV2X3QsIGlub190LCBpbnQgZXZlbnQpOwor
ICAgIHN0YXRpYyB2b2lkIG1vbml0b3JfaGFuZGxlcihkZXZfdCwgaW5vX3QsIGludCBldmVudCk7
CiAKICAgICBzdGF0aWMgdm9pZCBlbmFibGVfeHRhYl92ZXJpZmljYXRpb24oYm9vbCBlbmFibGUp
OwogCkBAIC0xMjEsNyArMTIxLDcgQEAKIAogICAgIC8vICBDbGFzcyBWYXJpYWJsZXMKIAotICAg
IHN0YXRpYyBJTW9uIGltb247CisgICAgc3RhdGljIE1vbml0b3IgKm1vbml0b3I7CiAgICAgc3Rh
dGljIEludGVyZXN0ICpoYXNodGFibGVbSEFTSFNJWkVdOwogICAgIHN0YXRpYyBib29sIHh0YWJf
dmVyaWZpY2F0aW9uOwogCi0tLSBmYW0tMi43LjAvc3JjL01ha2VmaWxlLmFtCTIwMDMtMDEtMTkg
MTM6MDA6MTcuMDAwMDAwMDAwICswMTAwCisrKyBmYW0tMi43LjAuZG5vdGlmeS9zcmMvTWFrZWZp
bGUuYW0JMjAwNC0wMS0zMCAxMzo1MDozOC4wMDAwMDAwMDAgKzAxMDAKQEAgLTcxLDcgKzcxLDEx
IEBACiAgIG1haW4uYysrIFwKICAgdGltZXZhbC5jKysgXAogICB0aW1ldmFsLmggXAotICBATU9O
SVRPUl9GVU5DU0AuYysrCisgIE1vbml0b3IuaCBcCisgIEROb3RpZnkuaCBcCisgIEROb3RpZnku
YysrIFwKKyAgQE1PTklUT1JfRlVOQ1NALmMrKyAKIAotRVhUUkFfZmFtZF9TT1VSQ0VTID0gSU1v
bklyaXguYysrIElNb25MaW51eC5jKysgSU1vbk5vbmUuYysrCitFWFRSQV9mYW1kX1NPVVJDRVMg
PSBJTW9uSXJpeC5jKysgSU1vbkxpbnV4LmMrKyBJTW9uTm9uZS5jKysgRE5vdGlmeS5jKysgXAor
ICBETm90aWZ5LmggTW9uaXRvci5oCiAKLS0tIGZhbS0yLjcuMC9zcmMvTW9uaXRvci5oCTIwMDQt
MDEtMzAgMDA6MDA6MDAuMDAwMDAwMDAwICswMjAwCisrKyBmYW0tMi43LjAuZG5vdGlmeS9zcmMv
TW9uaXRvci5oCTIwMDQtMDEtMzAgMDA6MDA6MDAuMDAwMDAwMDAwICswMjAwCkBAIC0wLDAgKzEs
NTcgQEAKKy8vICBDb3B5cmlnaHQgKEMpIDIwMDEgUmVkIEhhdCwgSW5jLiAgQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4KKy8vICBDb3B5cmlnaHQgKEMpIDE5OTkgU2lsaWNvbiBHcmFwaGljcywgSW5jLiAg
QWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vICAKKy8vICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorLy8gIHVuZGVy
IHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGFzCisvLyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisvLwor
Ly8gIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdvdWxk
IGJlIHVzZWZ1bCwgYnV0CisvLyAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIEZ1cnRoZXIsIGFueQorLy8gIGxpY2Vuc2UgcHJvdmlk
ZWQgaGVyZWluLCB3aGV0aGVyIGltcGxpZWQgb3Igb3RoZXJ3aXNlLCBpcyBsaW1pdGVkIHRvCisv
LyAgdGhpcyBwcm9ncmFtIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgZXhwcmVzcyBwcm92aXNpb25z
IG9mIHRoZSBHTlUKKy8vICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgUGF0ZW50IGxpY2Vuc2Vz
LCBpZiBhbnksIHByb3ZpZGVkIGhlcmVpbiBkbyBub3QKKy8vICBhcHBseSB0byBjb21iaW5hdGlv
bnMgb2YgdGhpcyBwcm9ncmFtIHdpdGggb3RoZXIgcHJvZHVjdCBvciBwcm9ncmFtcywgb3IKKy8v
ICBhbnkgb3RoZXIgcHJvZHVjdCB3aGF0c29ldmVyLiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1
dGVkIHdpdGhvdXQgYW55CisvLyAgd2FycmFudHkgdGhhdCB0aGUgcHJvZ3JhbSBpcyBkZWxpdmVy
ZWQgZnJlZSBvZiB0aGUgcmlnaHRmdWwgY2xhaW0gb2YgYW55CisvLyAgdGhpcmQgcGVyc29uIGJ5
IHdheSBvZiBpbmZyaW5nZW1lbnQgb3IgdGhlIGxpa2UuICBTZWUgdGhlIEdOVSBHZW5lcmFsCisv
LyAgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKy8vCisvLyAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxv
bmcKKy8vICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1OQorLy8gIFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9z
dG9uIE1BIDAyMTExLTEzMDcsIFVTQS4KKworI2lmbmRlZiBNb25pdG9yX2luY2x1ZGVkCisjZGVm
aW5lIE1vbml0b3JfaW5jbHVkZWQKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHN5
cy9zdGF0Lmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKK3N0cnVjdCBzdGF0OworCisvLyAg
TW9uaXRvciBpcyBhbiBhYnN0cmFjdCBiYXNlY2xhc3MgZm9yIGRpZmZlcmVuZCBmaWxlIG1vbml0
b3JpbmcKKy8vICBzeXN0ZW1zLiBUaGUgb3JpZ2luYWwgc3lzdGVtIHVzZWQgd2FzIElNb24sIGFu
ZCB0aGUgTW9udG9yIEFQSQorLy8gIGlzIGhlYXZpbHkgaW5mbHVlbmNlZCBieSB0aGF0LgorLy8g
IFRoZXJlIGNhbiBvbmx5IGJlIG9uZSBpbnN0YW50aWF0aW9uIG9mIHRoZSBNb25pdG9yIG9iamVj
dC4KKy8vCisvLyAgVGhlIHVzZXIgb2YgdGhpcyBvYmplY3QgdXNlcyBleHByZXNzKCkgYW5kIHJl
dm9rZSgpIHRvCisvLyAgZXhwcmVzcy9yZXZva2UgaW50ZXJlc3QgaW4gYSBmaWxlIHRvIGltb24u
ICBUaGVyZSBpcyBhbHNvCisvLyAgYSBjYWxsYmFjaywgdGhlIEV2ZW50SGFuZGxlci4gIFdoZW4g
YW4gZXZlbnQgY29tZXMgaW4sCisvLyAgdGhlIEV2ZW50SGFuZGxlciBpcyBjYWxsZWQuCisvLwor
Ly8gIFRoZSBtYWluIGltcGxlbWVudGVycyBvZiB0aGUgTW9uaXRvciBjbGFzcyBpcyBJTW9uIGFu
ZCBETm90aWZ5CisKK2NsYXNzIE1vbml0b3IgeworcHVibGljOgorCisgICAgZW51bSBTdGF0dXMg
eyBPSyA9IDAsIEJBRCA9IC0xIH07CisgICAgZW51bSBFdmVudCB7IEVYRUMsIEVYSVQsIENIQU5H
RSB9OworCisgICAgdHlwZWRlZiB2b2lkICgqRXZlbnRIYW5kbGVyKShkZXZfdCwgaW5vX3QsIGlu
dCBldmVudCk7CisKKyAgICB2aXJ0dWFsIFN0YXR1cyBleHByZXNzKGNvbnN0IGNoYXIgKm5hbWUs
IHN0cnVjdCBzdGF0ICpzdGF0X3JldHVybikgPSAwOworICAgIHZpcnR1YWwgU3RhdHVzIHJldm9r
ZShjb25zdCBjaGFyICpuYW1lLCBkZXZfdCBkZXYsIGlub190IGlubykgPSAwOworfTsKKworI2Vu
ZGlmIC8qICFNb25pdG9yX2luY2x1ZGVkICovCg==
</data>        

          </attachment>
    </bug>

</bugzilla>