<?xml version="1.0" encoding="UTF-8" ?>

<bugzilla version="5.2"
          urlbase="https://bugzilla.altlinux.org/"
          
          maintainer="jenya@basealt.ru"
>

    <bug>
          <bug_id>23783</bug_id>
          
          <creation_ts>2010-07-17 14:00:08 +0400</creation_ts>
          <short_desc>В какой-то момент перестал показываться bootsplash</short_desc>
          <delta_ts>2011-04-02 10:42:22 +0400</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>4</classification_id>
          <classification>Development</classification>
          <product>Sisyphus</product>
          <component>kernel-image-std-def</component>
          <version>unstable</version>
          <rep_platform>all</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>CLOSED</bug_status>
          <resolution>NOTABUG</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P3</priority>
          <bug_severity>normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>23155</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Yuri Bushmelev">jay4mail</reporter>
          <assigned_to name="Vitaly Chikunov">vt</assigned_to>
          <cc>cas</cc>
    
    <cc>hsv</cc>
    
    <cc>kernelbot</cc>
    
    <cc>kharpost</cc>
    
    <cc>placeholder</cc>
    
    <cc>vt</cc>
          
          <qa_contact>qa-sisyphus</qa_contact>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>110680</commentid>
    <comment_count>0</comment_count>
    <who name="Yuri Bushmelev">jay4mail</who>
    <bug_when>2010-07-17 14:00:08 +0400</bug_when>
    <thetext>В какой-то момент перестал показываться bootsplash. При загрузке теперь все наблюдают весело бегущие строчки с переключением видеорежима в процессе. 
Было бы замечательно, если бы bootsplash починили.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>110695</commentid>
    <comment_count>1</comment_count>
    <who name="Andrey Cherepanov">cas</who>
    <bug_when>2010-07-19 13:44:51 +0400</bug_when>
    <thetext>Нынешний bootsplash помер. Портируется Plymouth</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>114136</commentid>
    <comment_count>2</comment_count>
      <attachid>4622</attachid>
    <who name="Sergey Shilov">hsv</who>
    <bug_when>2010-10-22 11:52:57 +0400</bug_when>
    <thetext>Created attachment 4622
bootsplash patch

Вот нагуглилось...
Может попробовать приложить пока Плимут не портировался?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>114137</commentid>
    <comment_count>3</comment_count>
    <who name="Sergey Shilov">hsv</who>
    <bug_when>2010-10-22 11:55:55 +0400</bug_when>
    <thetext>А заодно и багу на ядро перевесить?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>114140</commentid>
    <comment_count>4</comment_count>
    <who name="Sergey V Turchin">zerg</who>
    <bug_when>2010-10-22 13:33:08 +0400</bug_when>
    <thetext>Патч лучше брать из SuSE из ядра, соответствующей</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>114141</commentid>
    <comment_count>5</comment_count>
    <who name="Sergey V Turchin">zerg</who>
    <bug_when>2010-10-22 13:34:21 +0400</bug_when>
    <thetext>(В ответ на комментарий №4)
&gt; из ядра, соответствующей
версии</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119756</commentid>
    <comment_count>6</comment_count>
    <who name="Anton Farygin">rider</who>
    <bug_when>2011-04-02 10:42:22 +0400</bug_when>
    <thetext>всё, окончательно переехали на plymouth</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>4622</attachid>
            <date>2010-10-22 11:52:57 +0400</date>
            <delta_ts>2010-10-22 11:52:57 +0400</delta_ts>
            <desc>bootsplash patch</desc>
            <filename>bootsplash-2.6.35.diff</filename>
            <type>text/plain</type>
            <size>81576</size>
            <attacher name="Sergey Shilov">hsv</attacher>
            
              <data encoding="base64">ZGlmZiAtdXJ3TiBsaW51eC0yLjYuMzUvZHJpdmVycy9jaGFyL2tleWJvYXJkLmMgbGludXgtMi42
LjM1LXBhdGNoZWQvZHJpdmVycy9jaGFyL2tleWJvYXJkLmMKLS0tIGxpbnV4LTIuNi4zNS9kcml2
ZXJzL2NoYXIva2V5Ym9hcmQuYwkyMDEwLTA4LTAyIDAwOjExOjE0LjAwMDAwMDAwMCArMDIwMAor
KysgbGludXgtMi42LjM1LXBhdGNoZWQvZHJpdmVycy9jaGFyL2tleWJvYXJkLmMJMjAxMC0wOC0w
MyAxODo1NTo0My4yMTQwODkzMTAgKzAyMDAKQEAgLTExODUsNiArMTE4NSwxNSBAQAogCQkJCXBy
X3dhcm5pbmcoImNhbid0IGVtdWxhdGUgcmF3bW9kZSBmb3Iga2V5Y29kZSAlZFxuIiwKIAkJCQkJ
ICAga2V5Y29kZSk7CiAKKyNpZmRlZiBDT05GSUdfQk9PVFNQTEFTSAorCS8qIFRoaXMgY29kZSBo
YXMgdG8gYmUgcmVkb25lIGZvciBzb21lIG5vbi14ODYgcGxhdGZvcm1zICovCisJaWYgKGRvd24g
PT0gMSAmJiAoa2V5Y29kZSA9PSAweDNjIHx8IGtleWNvZGUgPT0gMHgwMSkpIHsgICAgICAgIC8q
IEYyIGFuZCBFU0Mgb24gUEMga2V5Ym9hcmQgKi8KKwkJZXh0ZXJuIGludCBzcGxhc2hfdmVyYm9z
ZSh2b2lkKTsKKwkJaWYgKHNwbGFzaF92ZXJib3NlKCkpCisJCQlyZXR1cm47IAorCX0gICAgICAg
CisjZW5kaWYKKwogI2lmZGVmIENPTkZJR19TUEFSQwogCWlmIChrZXljb2RlID09IEtFWV9BICYm
IHNwYXJjX2wxX2Ffc3RhdGUpIHsKIAkJc3BhcmNfbDFfYV9zdGF0ZSA9IGZhbHNlOwpkaWZmIC11
cndOIGxpbnV4LTIuNi4zNS9kcml2ZXJzL2NoYXIvbl90dHkuYyBsaW51eC0yLjYuMzUtcGF0Y2hl
ZC9kcml2ZXJzL2NoYXIvbl90dHkuYwotLS0gbGludXgtMi42LjM1L2RyaXZlcnMvY2hhci9uX3R0
eS5jCTIwMTAtMDgtMDIgMDA6MTE6MTQuMDAwMDAwMDAwICswMjAwCisrKyBsaW51eC0yLjYuMzUt
cGF0Y2hlZC9kcml2ZXJzL2NoYXIvbl90dHkuYwkyMDEwLTA4LTAyIDE3OjM2OjU2LjQ2NjA0Nzk2
NyArMDIwMApAQCAtMTc3OSw2ICsxNzc5LDE1IEBACiAJCQl0dHktPm1pbmltdW1fdG9fd2FrZSA9
IChtaW5pbXVtIC0gKGIgLSBidWYpKTsKIAogCQlpZiAoIWlucHV0X2F2YWlsYWJsZV9wKHR0eSwg
MCkpIHsKKyNpZmRlZiBDT05GSUdfQk9PVFNQTEFTSAorCQkJaWYgKGZpbGUtPmZfZGVudHJ5LT5k
X2lub2RlLT5pX3JkZXYgPT0gTUtERVYoVFRZX01BSk9SLDApIHx8CisJCQkgICAgZmlsZS0+Zl9k
ZW50cnktPmRfaW5vZGUtPmlfcmRldiA9PSBNS0RFVihUVFlfTUFKT1IsMSkgfHwKKwkJCSAgICBm
aWxlLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9yZGV2ID09IE1LREVWKFRUWUFVWF9NQUpPUiwwKSB8
fAorCQkJICAgIGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLT5pX3JkZXYgPT0gTUtERVYoVFRZQVVY
X01BSk9SLDEpKSB7CisJCQkJZXh0ZXJuIGludCBzcGxhc2hfdmVyYm9zZSh2b2lkKTsKKwkJCQko
dm9pZClzcGxhc2hfdmVyYm9zZSgpOworCQkJfQorI2VuZGlmCiAJCQlpZiAodGVzdF9iaXQoVFRZ
X09USEVSX0NMT1NFRCwgJnR0eS0+ZmxhZ3MpKSB7CiAJCQkJcmV0dmFsID0gLUVJTzsKIAkJCQli
cmVhazsKZGlmZiAtdXJ3TiBsaW51eC0yLjYuMzUvZHJpdmVycy9jaGFyL3Z0LmMgbGludXgtMi42
LjM1LXBhdGNoZWQvZHJpdmVycy9jaGFyL3Z0LmMKLS0tIGxpbnV4LTIuNi4zNS9kcml2ZXJzL2No
YXIvdnQuYwkyMDEwLTA4LTAyIDAwOjExOjE0LjAwMDAwMDAwMCArMDIwMAorKysgbGludXgtMi42
LjM1LXBhdGNoZWQvZHJpdmVycy9jaGFyL3Z0LmMJMjAxMC0wOC0wMiAxNzozNjo1Ni40NjYwNDc5
NjcgKzAyMDAKQEAgLTQwOTcsNiArNDA5NywzMSBAQAogCX0KIH0KIAorI2lmZGVmIENPTkZJR19C
T09UU1BMQVNICit2b2lkIGNvbl9yZW1hcF9kZWZfY29sb3Ioc3RydWN0IHZjX2RhdGEgKnZjLCBp
bnQgbmV3X2NvbG9yKQoreworICAgICAgIHVuc2lnbmVkIHNob3J0ICpzYnVmID0gdmMtPnZjX3Nj
cmVlbmJ1ZjsKKyAgICAgICB1bnNpZ25lZCBjLCBsZW4gPSB2Yy0+dmNfc2NyZWVuYnVmX3NpemUg
Pj4gMTsKKyAgICAgICBpbnQgb2xkX2NvbG9yOworCisgICAgICAgaWYgKHNidWYpIHsKKwkgICAg
ICAgb2xkX2NvbG9yID0gdmMtPnZjX2RlZl9jb2xvciA8PCA4OworCSAgICAgICBuZXdfY29sb3Ig
PDw9IDg7CisJICAgICAgIHdoaWxlKGxlbi0tKSB7CisJCSAgICAgICBjID0gKnNidWY7CisJCSAg
ICAgICBpZiAoKChjIF4gb2xkX2NvbG9yKSAmIDB4ZjAwMCkgPT0gMCkKKwkJCSAgICAgICAqc2J1
ZiBePSAob2xkX2NvbG9yIF4gbmV3X2NvbG9yKSAmIDB4ZjAwMDsgCisJCSAgICAgICBpZiAoKChj
IF4gb2xkX2NvbG9yKSAmIDB4MGYwMCkgPT0gMCkKKwkJCSAgICAgICAqc2J1ZiBePSAob2xkX2Nv
bG9yIF4gbmV3X2NvbG9yKSAmIDB4MGYwMDsKKwkJICAgICAgIHNidWYrKzsKKwkgICAgICAgfQor
CSAgICAgICBuZXdfY29sb3IgPj49IDg7CisgICAgICAgfQorICAgICAgIHZjLT52Y19kZWZfY29s
b3IgPSB2Yy0+dmNfY29sb3IgPSBuZXdfY29sb3I7CisgICAgICAgdXBkYXRlX2F0dHIodmMpOwor
fQorI2VuZGlmCisKIC8qCiAgKglWaXNpYmxlIHN5bWJvbHMgZm9yIG1vZHVsZXMKICAqLwpkaWZm
IC11cndOIGxpbnV4LTIuNi4zNS9kcml2ZXJzL3ZpZGVvL2Jvb3RzcGxhc2gvYm9vdHNwbGFzaC5j
IGxpbnV4LTIuNi4zNS1wYXRjaGVkL2RyaXZlcnMvdmlkZW8vYm9vdHNwbGFzaC9ib290c3BsYXNo
LmMKLS0tIGxpbnV4LTIuNi4zNS9kcml2ZXJzL3ZpZGVvL2Jvb3RzcGxhc2gvYm9vdHNwbGFzaC5j
CTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyBsaW51eC0yLjYuMzUtcGF0
Y2hlZC9kcml2ZXJzL3ZpZGVvL2Jvb3RzcGxhc2gvYm9vdHNwbGFzaC5jCTIwMTAtMDgtMDIgMTc6
MzY6NTYuNDY2MDQ3OTY3ICswMjAwCkBAIC0wLDAgKzEsOTgzIEBACisvKiAKKyAqICAgICAgICAg
ICBsaW51eC9kcml2ZXJzL3ZpZGVvL2Jvb3RzcGxhc2gvYm9vdHNwbGFzaC5jIC0gCisgKiAgICAg
ICAgICAgICAgICAgc3BsYXNoIHNjcmVlbiBoYW5kbGluZyBmdW5jdGlvbnMuCisgKgkKKyAqCSh3
KSAyMDAxLTIwMDQgYnkgVm9sa2VyIFBvcGxhd3NraSwgPHZvbGtlckBwb3BsYXdza2kuZGU+LAor
ICogCQkgICAgU3RlZmFuIFJlaW5hdWVyLCA8c3RlcGFuQHN1c2UuZGU+LAorICogCQkgICAgU3Rl
ZmZlbiBXaW50ZXJmZWxkdCwgPHNud2ludEBzdXNlLmRlPiwKKyAqICAgICAgICAgICAgICAgICAg
TWljaGFlbCBTY2hyb2VkZXIgPG1sc0BzdXNlLmRlPgorICogCQkgICAgCisgKiAgICAgICAgSWRl
YXMgJiBTdVNFIHNjcmVlbiB3b3JrIGJ5IEtlbiBXaW1lciwgPHdpbWVyQHN1c2UuZGU+CisgKgor
ICogIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoaXMgY29kZSBjaGVjayBodHRwOi8vd3d3LmJv
b3RzcGxhc2gub3JnLworICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRl
IDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CisjaW5jbHVkZSA8bGludXgv
dnRfa2Vybi5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51eC91
bmlzdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgorCisjaW5jbHVkZSA8YXNtL2ly
cS5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKworI2luY2x1ZGUgIi4uL2NvbnNvbGUvZmJj
b24uaCIKKyNpbmNsdWRlICJib290c3BsYXNoLmgiCisjaW5jbHVkZSAiZGVjb2RlLWpwZy5oIgor
CisvKiBleHRlcm4gc3RydWN0IGZiX29wcyB2ZXNhZmJfb3BzOyAqLworZXh0ZXJuIHNpZ25lZCBj
aGFyIGNvbjJmYl9tYXBbTUFYX05SX0NPTlNPTEVTXTsKKworI2RlZmluZSBTUExBU0hfVkVSU0lP
TiAiMy4xLjYtMjAwNC8wMy8zMSIKKworLyogVGhlc2UgZXJyb3JzIGhhdmUgdG8gbWF0Y2ggZmJj
b24tanBlZ2RlYy5oICovCitzdGF0aWMgdW5zaWduZWQgY2hhciAqanBnX2Vycm9yc1tdID0gewor
CSJubyBTT0kgZm91bmQiLCAKKwkibm90IDggYml0IiwgCisJImhlaWdodCBtaXNtYXRjaCIsIAor
CSJ3aWR0aCBtaXNtYXRjaCIsCisJImJhZCB3aWR0aCBvciBoZWlnaHQiLCAKKwkidG9vIG1hbnkg
Q09NUFBzIiwgCisJImlsbGVnYWwgSFYiLCAKKwkicXVhbnQgdGFibGUgc2VsZWN0b3IiLAorCSJw
aWN0dXJlIGlzIG5vdCBZQ0JDUiAyMjExMTEiLAorCSJ1bmtub3cgQ0lEIGluIHNjYW4iLAorCSJk
Y3Qgbm90IHNlcXVlbnRpYWwiLAorCSJ3cm9uZyBtYXJrZXIiLAorCSJubyBFT0kiLAorCSJiYWQg
dGFibGVzIiwKKwkiZGVwdGggbWlzbWF0Y2giCit9OworCitzdGF0aWMgc3RydWN0IGpwZWdfZGVj
ZGF0YSAqZGVjZGF0YSA9IDA7IC8qIHByaXZhdGUgZGVjb2RlciBkYXRhICovCisKK3N0YXRpYyBp
bnQgc3BsYXNoX3JlZ2lzdGVyZWQgPSAwOworc3RhdGljIGludCBzcGxhc2hfdXNlc2lsZW50ID0g
MDsJLyogc2hhbGwgd2UgZGlzcGxheSB0aGUgc2lsZW50anBlZz8gKi8KK2ludCBzcGxhc2hfZGVm
YXVsdCA9IDB4ZjAxOworCitzdGF0aWMgaW50IHNwbGFzaF9jaGVja19qcGVnKHVuc2lnbmVkIGNo
YXIgKmpwZWcsIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IGRlcHRoKTsKKworc3RhdGljIGlu
dCBfX2luaXQgc3BsYXNoX3NldHVwKGNoYXIgKm9wdGlvbnMpCit7CisJaWYoIXN0cm5jbXAoInNp
bGVudCIsIG9wdGlvbnMsIDYpKSB7CisJCXByaW50ayhLRVJOX0lORk8gImJvb3RzcGxhc2g6IHNp
bGVudCBtb2RlLlxuIik7CisJCXNwbGFzaF91c2VzaWxlbnQgPSAxOworCQkvKiBza2lwICJzaWxl
bnQsIiAqLworCQlpZiAoc3RybGVuKG9wdGlvbnMpID09IDYpCisJCQlyZXR1cm4gMDsKKwkJb3B0
aW9ucyArPSA3OworCX0KKwlpZighc3RybmNtcCgidmVyYm9zZSIsIG9wdGlvbnMsIDcpKSB7CisJ
CXByaW50ayhLRVJOX0lORk8gImJvb3RzcGxhc2g6IHZlcmJvc2UgbW9kZS5cbiIpOworCQlzcGxh
c2hfdXNlc2lsZW50ID0gMDsKKwkJcmV0dXJuIDA7CisJfQorCXNwbGFzaF9kZWZhdWx0ID0gc2lt
cGxlX3N0cnRvdWwob3B0aW9ucywgTlVMTCwgMCk7CisJcmV0dXJuIDA7Cit9CisKK19fc2V0dXAo
InNwbGFzaD0iLCBzcGxhc2hfc2V0dXApOworCisKK3N0YXRpYyBpbnQgc3BsYXNoX2hhc2ludGVy
KHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IG51bSkKK3sKKyAgICB1bnNpZ25lZCBjaGFyICpidWZl
bmQgPSBidWYgKyBudW0gKiAxMjsKKyAgICB3aGlsZShidWYgPCBidWZlbmQpIHsKKwlpZiAoYnVm
WzFdID4gMTI3KQkJLyogaW50ZXI/ICovCisJICAgIHJldHVybiAxOworCWJ1ZiArPSBidWZbM10g
PiAxMjcgPyAyNCA6IDEyOwkvKiBibGVuZD8gKi8KKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisK
K3N0YXRpYyBpbnQgYm94ZXh0cmFjdCh1bnNpZ25lZCBjaGFyICpidWYsIHVuc2lnbmVkIHNob3J0
ICpkcCwgdW5zaWduZWQgY2hhciAqY29scywgaW50ICpibGVuZHApCit7CisgICAgZHBbMF0gPSBi
dWZbMF0gfCBidWZbMV0gPDwgODsKKyAgICBkcFsxXSA9IGJ1ZlsyXSB8IGJ1ZlszXSA8PCA4Owor
ICAgIGRwWzJdID0gYnVmWzRdIHwgYnVmWzVdIDw8IDg7CisgICAgZHBbM10gPSBidWZbNl0gfCBi
dWZbN10gPDwgODsKKyAgICAqKHVuc2lnbmVkIGludCAqKShjb2xzICsgMCkgPQorCSoodW5zaWdu
ZWQgaW50ICopKGNvbHMgKyA0KSA9CisJKih1bnNpZ25lZCBpbnQgKikoY29scyArIDgpID0KKwkq
KHVuc2lnbmVkIGludCAqKShjb2xzICsgMTIpID0gKih1bnNpZ25lZCBpbnQgKikoYnVmICsgOCk7
CisgICAgaWYgKGRwWzFdID4gMzI3NjcpIHsKKwlkcFsxXSA9IH5kcFsxXTsKKwkqKHVuc2lnbmVk
IGludCAqKShjb2xzICsgNCkgPSAqKHVuc2lnbmVkIGludCAqKShidWYgKyAxMik7CisJKih1bnNp
Z25lZCBpbnQgKikoY29scyArIDgpID0gKih1bnNpZ25lZCBpbnQgKikoYnVmICsgMTYpOworCSoo
dW5zaWduZWQgaW50ICopKGNvbHMgKyAxMikgPSAqKHVuc2lnbmVkIGludCAqKShidWYgKyAyMCk7
CisJKmJsZW5kcCA9IDE7CisJcmV0dXJuIDI0OworICAgIH0KKyAgICByZXR1cm4gMTI7Cit9CisK
K3N0YXRpYyB2b2lkIGJveGl0KHVuc2lnbmVkIGNoYXIgKnBpYywgaW50IGJ5dGVzLCB1bnNpZ25l
ZCBjaGFyICpidWYsIGludCBudW0sIGludCBwZXJjZW50LCBpbnQgb3ZlcnBhaW50KQoreworICAg
IGludCB4LCB5LCBpLCBwLCBkb2JsZW5kLCByLCBnLCBiLCBhLCBhZGQ7CisgICAgdW5zaWduZWQg
c2hvcnQgZGF0YTFbNF07CisgICAgdW5zaWduZWQgY2hhciBjb2xzMVsxNl07CisgICAgdW5zaWdu
ZWQgc2hvcnQgZGF0YTJbNF07CisgICAgdW5zaWduZWQgY2hhciBjb2xzMlsxNl07CisgICAgdW5z
aWduZWQgY2hhciAqYnVmZW5kOworICAgIHVuc2lnbmVkIHNob3J0ICpwaWNwOworICAgIHVuc2ln
bmVkIGludCBzdGlwcGxlWzMyXSwgc3RpLCBzdGluLCBzdGlubiwgc3RpeHMsIHN0aXhlLCBzdGl5
cywgc3RpeWU7CisgICAgaW50IHhzLCB4ZSwgeXMsIHllLCB4bywgeW87CisKKyAgICBpZiAobnVt
ID09IDApCisJcmV0dXJuOworICAgIGJ1ZmVuZCA9IGJ1ZiArIG51bSAqIDEyOworICAgIHN0aXBw
bGVbMF0gPSAweGZmZmZmZmZmOworICAgIHN0aW4gPSAxOworICAgIHN0aW5uID0gMDsKKyAgICBz
dGl4cyA9IHN0aXhlID0gMDsKKyAgICBzdGl5cyA9IHN0aXllID0gMDsKKyAgICB3aGlsZShidWYg
PCBidWZlbmQpIHsKKwlkb2JsZW5kID0gMDsKKwlidWYgKz0gYm94ZXh0cmFjdChidWYsIGRhdGEx
LCBjb2xzMSwgJmRvYmxlbmQpOworCWlmIChkYXRhMVswXSA9PSAzMjc2NyAmJiBkYXRhMVsxXSA9
PSAzMjc2NykgeworCSAgICAvKiBib3ggc3RpcHBsZSAqLworCSAgICBpZiAoc3Rpbm4gPT0gMzIp
CisJCWNvbnRpbnVlOworCSAgICBpZiAoc3Rpbm4gPT0gMCkgeworCQlzdGl4cyA9IGRhdGExWzJd
OworCQlzdGl4ZSA9IGRhdGExWzNdOworCQlzdGl5cyA9IHN0aXllID0gMDsKKwkgICAgfSBlbHNl
IGlmIChzdGlubiA9PSA0KSB7CisJCXN0aXlzID0gZGF0YTFbMl07CisJCXN0aXllID0gZGF0YTFb
M107CisJICAgIH0KKwkgICAgc3RpcHBsZVtzdGlubisrXSA9IChjb2xzMVsgMF0gPDwgMjQpIHwg
KGNvbHMxWyAxXSA8PCAxNikgfCAoY29sczFbIDJdIDw8IDgpIHwgY29sczFbIDNdIDsKKwkgICAg
c3RpcHBsZVtzdGlubisrXSA9IChjb2xzMVsgNF0gPDwgMjQpIHwgKGNvbHMxWyA1XSA8PCAxNikg
fCAoY29sczFbIDZdIDw8IDgpIHwgY29sczFbIDddIDsKKwkgICAgc3RpcHBsZVtzdGlubisrXSA9
IChjb2xzMVsgOF0gPDwgMjQpIHwgKGNvbHMxWyA5XSA8PCAxNikgfCAoY29sczFbMTBdIDw8IDgp
IHwgY29sczFbMTFdIDsKKwkgICAgc3RpcHBsZVtzdGlubisrXSA9IChjb2xzMVsxMl0gPDwgMjQp
IHwgKGNvbHMxWzEzXSA8PCAxNikgfCAoY29sczFbMTRdIDw8IDgpIHwgY29sczFbMTVdIDsKKwkg
ICAgc3RpbiA9IHN0aW5uOworCSAgICBjb250aW51ZTsKKwl9CisJc3Rpbm4gPSAwOworCWlmIChk
YXRhMVswXSA+IDMyNzY3KQorCSAgICBidWYgKz0gYm94ZXh0cmFjdChidWYsIGRhdGEyLCBjb2xz
MiwgJmRvYmxlbmQpOworCWlmIChkYXRhMVswXSA9PSAzMjc2NyAmJiBkYXRhMVsxXSA9PSAzMjc2
NikgeworCSAgICAvKiBib3ggY29weSAqLworCSAgICBpID0gMTIgKiAoc2hvcnQpZGF0YTFbM107
CisJICAgIGRvYmxlbmQgPSAwOworCSAgICBpICs9IGJveGV4dHJhY3QoYnVmICsgaSwgZGF0YTEs
IGNvbHMxLCAmZG9ibGVuZCk7CisJICAgIGlmIChkYXRhMVswXSA+IDMyNzY3KQorCQlib3hleHRy
YWN0KGJ1ZiArIGksIGRhdGEyLCBjb2xzMiwgJmRvYmxlbmQpOworCX0KKwlpZiAoZGF0YTFbMF0g
PT0gMzI3NjcpCisJICAgIGNvbnRpbnVlOworCWlmIChkYXRhMVsyXSA+IDMyNzY3KSB7CisJICAg
IGlmIChvdmVycGFpbnQpCisJCWNvbnRpbnVlOworCSAgICBkYXRhMVsyXSA9IH5kYXRhMVsyXTsK
Kwl9CisJaWYgKGRhdGExWzNdID4gMzI3NjcpIHsKKwkgICAgaWYgKHBlcmNlbnQgPT0gNjU1MzYp
CisJCWNvbnRpbnVlOworCSAgICBkYXRhMVszXSA9IH5kYXRhMVszXTsKKwl9CisJaWYgKGRhdGEx
WzBdID4gMzI3NjcpIHsKKwkgICAgZGF0YTFbMF0gPSB+ZGF0YTFbMF07CisJICAgIGZvciAoaSA9
IDA7IGkgPCA0OyBpKyspCisJCWRhdGExW2ldID0gKGRhdGExW2ldICogKDY1NTM2IC0gcGVyY2Vu
dCkgKyBkYXRhMltpXSAqIHBlcmNlbnQpID4+IDE2OworCSAgICBmb3IgKGkgPSAwOyBpIDwgMTY7
IGkrKykKKwkJY29sczFbaV0gPSAoY29sczFbaV0gKiAoNjU1MzYgLSBwZXJjZW50KSArIGNvbHMy
W2ldICogcGVyY2VudCkgPj4gMTY7CisJfQorCSoodW5zaWduZWQgaW50ICopY29sczIgPSAqKHVu
c2lnbmVkIGludCAqKWNvbHMxOworCWEgPSBjb2xzMlszXTsKKwlpZiAoYSA9PSAwICYmICFkb2Js
ZW5kKQorCSAgICBjb250aW51ZTsKKworCWlmIChzdGl4cyA+PSAzMjc2OCkgeworCSAgICB4byA9
IHhzID0gKHN0aXhzIF4gNjU1MzUpICsgZGF0YTFbMF07CisJICAgIHhlID0gc3RpeGUgPyBzdGl4
ZSArIGRhdGExWzBdIDogZGF0YTFbMl07CisJfSBlbHNlIGlmIChzdGl4ZSA+PSAzMjc2OCkgewor
CSAgICB4cyA9IHN0aXhzID8gZGF0YTFbMl0gLSBzdGl4cyA6IGRhdGExWzBdOworCSAgICB4ZSA9
IGRhdGExWzJdIC0gKHN0aXhlIF4gNjU1MzUpOworCSAgICB4byA9IHhlICsgMTsKKwl9IGVsc2Ug
eworCSAgICB4byA9IHhzID0gc3RpeHM7CisJICAgIHhlID0gc3RpeGUgPyBzdGl4ZSA6IGRhdGEx
WzJdOworCX0KKwlpZiAoc3RpeXMgPj0gMzI3NjgpIHsKKwkgICAgeW8gPSB5cyA9IChzdGl5cyBe
IDY1NTM1KSArIGRhdGExWzFdOworCSAgICB5ZSA9IHN0aXllID8gc3RpeWUgKyBkYXRhMVsxXSA6
IGRhdGExWzNdOworCX0gZWxzZSBpZiAoc3RpeWUgPj0gMzI3NjgpIHsKKwkgICAgeXMgPSBzdGl5
cyA/IGRhdGExWzNdIC0gc3RpeXMgOiBkYXRhMVsxXTsKKwkgICAgeWUgPSBkYXRhMVszXSAtIChz
dGl5ZSBeIDY1NTM1KTsKKwkgICAgeW8gPSB5ZSArIDE7CisJfSBlbHNlIHsKKwkgICAgeW8gPSB5
cyA9IHN0aXlzOworCSAgICB5ZSA9IHN0aXllID8gc3RpeWUgOiBkYXRhMVszXTsKKwl9CisJeG8g
PSAzMiAtICh4byAmIDMxKTsKKwl5byA9IHN0aW4gLSAoeW8gJSBzdGluKTsKKwlpZiAoeHMgPCBk
YXRhMVswXSkKKwkgICAgeHMgPSBkYXRhMVswXTsKKwlpZiAoeGUgPiBkYXRhMVsyXSkKKwkgICAg
eGUgPSBkYXRhMVsyXTsKKwlpZiAoeXMgPCBkYXRhMVsxXSkKKwkgICAgeXMgPSBkYXRhMVsxXTsK
KwlpZiAoeWUgPiBkYXRhMVszXSkKKwkgICAgeWUgPSBkYXRhMVszXTsKKworCWZvciAoeSA9IHlz
OyB5IDw9IHllOyB5KyspIHsKKwkgICAgc3RpID0gc3RpcHBsZVsoeSArIHlvKSAlIHN0aW5dOwor
CSAgICB4ID0gKHhzICsgeG8pICYgMzE7CisJICAgIGlmICh4KQorCQlzdGkgPSAoc3RpIDw8IHgp
IHwgKHN0aSA+PiAoMzIgLSB4KSk7CisJICAgIGlmIChkb2JsZW5kKSB7CisJCWlmICgocCA9IGRh
dGExWzNdIC0gZGF0YTFbMV0pICE9IDApCisJCSAgICBwID0gKCh5IC0gZGF0YTFbMV0pIDw8IDE2
KSAvIHA7CisJCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCisJCSAgICBjb2xzMltpICsgOF0gPSAo
Y29sczFbaV0gKiAoNjU1MzYgLSBwKSArIGNvbHMxW2kgKyA4XSAqIHApID4+IDE2OworCSAgICB9
CisJICAgIGFkZCA9ICh4cyAmIDEpOworCSAgICBhZGQgXj0gKGFkZCBeIHkpICYgMSA/IDEgOiAz
OwkJLyogMngyIG9yZGVyZWQgZGl0aGVyaW5nICovCisJICAgIHBpY3AgPSAodW5zaWduZWQgc2hv
cnQgKikocGljICsgeHMgKiAyICsgeSAqIGJ5dGVzKTsKKwkgICAgZm9yICh4ID0geHM7IHggPD0g
eGU7IHgrKykgeworCQlpZiAoIShzdGkgJiAweDgwMDAwMDAwKSkgeworCQkgICAgc3RpIDw8PSAx
OworCQkgICAgcGljcCsrOworCQkgICAgYWRkIF49IDM7CisJCSAgICBjb250aW51ZTsKKwkJfQor
CQlzdGkgPSAoc3RpIDw8IDEpIHwgMTsKKwkJaWYgKGRvYmxlbmQpIHsKKwkJICAgIGlmICgocCA9
IGRhdGExWzJdIC0gZGF0YTFbMF0pICE9IDApCisJCQlwID0gKCh4IC0gZGF0YTFbMF0pIDw8IDE2
KSAvIHA7CisJCSAgICBmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQorCQkJY29sczJbaV0gPSAoY29s
czJbaSArIDhdICogKDY1NTM2IC0gcCkgKyBjb2xzMltpICsgMTJdICogcCkgPj4gMTY7CisJCSAg
ICBhID0gY29sczJbM107CisJCX0KKwkJciA9IGNvbHMyWzBdOworCQlnID0gY29sczJbMV07CisJ
CWIgPSBjb2xzMlsyXTsKKwkJaWYgKGEgIT0gMjU1KSB7CisJCSAgICBpID0gKnBpY3A7CisJCSAg
ICByID0gKChpID4+IDggJiAweGY4KSAqICgyNTUgLSBhKSArIHIgKiBhKSAvIDI1NTsKKwkJICAg
IGcgPSAoKGkgPj4gMyAmIDB4ZmMpICogKDI1NSAtIGEpICsgZyAqIGEpIC8gMjU1OworCQkgICAg
YiA9ICgoaSA8PCAzICYgMHhmOCkgKiAoMjU1IC0gYSkgKyBiICogYSkgLyAyNTU7CisJCX0KKyAg
I2RlZmluZSBDTEFNUCh4KSAoKHgpID49IDI1NiA/IDI1NSA6ICh4KSkKKwkJaSA9ICgoQ0xBTVAo
ciArIGFkZCoyKzEpICYgMHhmOCkgPDwgIDgpIHwKKwkJICAgICgoQ0xBTVAoZyArIGFkZCAgICAp
ICYgMHhmYykgPDwgIDMpIHwKKwkJICAgICgoQ0xBTVAoYiArIGFkZCoyKzEpICAgICAgICkgPj4g
IDMpOworCQkqcGljcCsrID0gaTsKKwkJYWRkIF49IDM7CisJICAgIH0KKwl9CisgICAgfQorfQor
CitzdGF0aWMgaW50IHNwbGFzaF9jaGVja19qcGVnKHVuc2lnbmVkIGNoYXIgKmpwZWcsIGludCB3
aWR0aCwgaW50IGhlaWdodCwgaW50IGRlcHRoKQoreworICAgIGludCBzaXplLCBlcnI7CisgICAg
dW5zaWduZWQgY2hhciAqbWVtOworCisgICAgc2l6ZSA9ICgod2lkdGggKyAxNSkgJiB+MTUpICog
KChoZWlnaHQgKyAxNSkgJiB+MTUpICogKGRlcHRoID4+IDMpOworICAgIG1lbSA9IHZtYWxsb2Mo
c2l6ZSk7CisgICAgaWYgKCFtZW0pIHsKKwlwcmludGsoS0VSTl9JTkZPICJib290c3BsYXNoOiBu
byBtZW1vcnkgZm9yIGRlY29kZWQgcGljdHVyZS5cbiIpOworCXJldHVybiAtMTsKKyAgICB9Cisg
ICAgaWYgKCFkZWNkYXRhKQorCWRlY2RhdGEgPSB2bWFsbG9jKHNpemVvZigqZGVjZGF0YSkpOwor
ICAgIGlmICgoZXJyID0ganBlZ19kZWNvZGUoanBlZywgbWVtLCAoKHdpZHRoICsgMTUpICYgfjE1
KSwgKChoZWlnaHQgKyAxNSkgJiB+MTUpLCBkZXB0aCwgZGVjZGF0YSkpKQorCSAgcHJpbnRrKEtF
Uk5fSU5GTyAiYm9vdHNwbGFzaDogZXJyb3Igd2hpbGUgZGVjb21wcmVzc2luZyBwaWN0dXJlOiAl
cyAoJWQpXG4iLGpwZ19lcnJvcnNbZXJyIC0gMV0sIGVycik7CisgICAgdmZyZWUobWVtKTsKKyAg
ICByZXR1cm4gZXJyID8gLTEgOiAwOworfQorCitzdGF0aWMgdm9pZCBzcGxhc2hfZnJlZShzdHJ1
Y3QgdmNfZGF0YSAqdmMsIHN0cnVjdCBmYl9pbmZvICppbmZvKQoreworICAgIGlmICghdmMtPnZj
X3NwbGFzaF9kYXRhKQorCXJldHVybjsKKyAgICBpZiAoaW5mby0+c2lsZW50X3NjcmVlbl9iYXNl
KQorCSAgICBpbmZvLT5zY3JlZW5fYmFzZSA9IGluZm8tPnNpbGVudF9zY3JlZW5fYmFzZTsKKyAg
ICBpbmZvLT5zaWxlbnRfc2NyZWVuX2Jhc2UgPSAwOworICAgIGlmICh2Yy0+dmNfc3BsYXNoX2Rh
dGEtPnNwbGFzaF9zaWxlbnRqcGVnKQorCSAgICB2ZnJlZSh2Yy0+dmNfc3BsYXNoX2RhdGEtPnNw
bGFzaF9zYm94ZXMpOworICAgIHZmcmVlKHZjLT52Y19zcGxhc2hfZGF0YSk7CisgICAgdmMtPnZj
X3NwbGFzaF9kYXRhID0gMDsKKyAgICBpbmZvLT5zcGxhc2hfZGF0YSA9IDA7Cit9CisKK3N0YXRp
YyBpbnQgc3BsYXNoX21rcGVuZ3VpbihzdHJ1Y3Qgc3BsYXNoX2RhdGEgKmRhdGEsIGludCBweG8s
IGludCBweW8sIGludCBwd2ksIGludCBwaGUsIGludCBwciwgaW50IHBnLCBpbnQgcGIpCit7Cisg
ICAgdW5zaWduZWQgY2hhciAqYnVmOworICAgIGludCBpOworCisgICAgaWYgKHB3aSA9PTAgfHwg
cGhlID09IDApCisJcmV0dXJuIDA7CisgICAgYnVmID0gKHVuc2lnbmVkIGNoYXIgKilkYXRhICsg
c2l6ZW9mKCpkYXRhKTsKKyAgICBwd2kgKz0gcHhvIC0gMTsKKyAgICBwaGUgKz0gcHlvIC0gMTsK
KyAgICAqYnVmKysgPSBweG87CisgICAgKmJ1ZisrID0gcHhvID4+IDg7CisgICAgKmJ1ZisrID0g
cHlvOworICAgICpidWYrKyA9IHB5byA+PiA4OworICAgICpidWYrKyA9IHB3aTsKKyAgICAqYnVm
KysgPSBwd2kgPj4gODsKKyAgICAqYnVmKysgPSBwaGU7CisgICAgKmJ1ZisrID0gcGhlID4+IDg7
CisgICAgKmJ1ZisrID0gcHI7CisgICAgKmJ1ZisrID0gcGc7CisgICAgKmJ1ZisrID0gcGI7Cisg
ICAgKmJ1ZisrID0gMDsKKyAgICBmb3IgKGkgPSAwOyBpIDwgMTI7IGkrKywgYnVmKyspCisJKmJ1
ZiA9IGJ1ZlstMTJdOworICAgIGJ1ZlstMjRdIF49IDB4ZmY7CisgICAgYnVmWy0yM10gXj0gMHhm
ZjsKKyAgICBidWZbLTFdID0gMHhmZjsKKyAgICByZXR1cm4gMjsKK30KKworc3RhdGljIGNvbnN0
IGludCBzcGxhc2hfb2Zmc2V0c1szXVsxNl0gPSB7CisgICAgLyogbGVuLCB1bml0LCBzaXplLCBz
dGF0ZSwgZmdjb2wsIGNvbCwgeG8sIHlvLCB3aSwgaGUKKyAgICAgICBib3hjbnQsIHNzaXplLCBz
Ym94Y250LCBwZXJjZW50LCBvdmVyb2ssIHBhbGNudCAqLworICAgIC8qIFYxICovCisgICAgeyAg
IDIwLCAgIC0xLCAgIDE2LCAgICAtMSwgICAgLTEsICAtMSwgIDgsIDEwLCAxMiwgMTQsCisgICAg
ICAgICAgIC0xLCAgICAtMSwgICAgICAtMSwgICAgICAtMSwgICAgIC0xLCAgICAgLTEgfSwKKyAg
ICAvKiBWMiAqLworICAgIHsgICAzNSwgICAgOCwgICAxMiwgICAgIDksICAgIDEwLCAgMTEsIDE2
LCAxOCwgMjAsIDIyLAorICAgICAgICAgICAtMSwgICAgLTEsICAgICAgLTEsICAgICAgLTEsICAg
ICAtMSwgICAgIC0xIH0sCisgICAgLyogVjMgKi8KKyAgICB7ICAgMzgsICAgIDgsICAgMTIsICAg
ICA5LCAgICAxMCwgIDExLCAxNiwgMTgsIDIwLCAyMiwKKyAgICAgICAgICAgMjQsICAgIDI4LCAg
ICAgIDMyLCAgICAgIDM0LCAgICAgMzYsICAgICAzNyB9LAorfTsKKworI2RlZmluZSBTUExBU0hf
T0ZGX0xFTiAgICAgb2Zmc2V0c1swXQorI2RlZmluZSBTUExBU0hfT0ZGX1VOSVQgICAgb2Zmc2V0
c1sxXQorI2RlZmluZSBTUExBU0hfT0ZGX1NJWkUgICAgb2Zmc2V0c1syXQorI2RlZmluZSBTUExB
U0hfT0ZGX1NUQVRFICAgb2Zmc2V0c1szXQorI2RlZmluZSBTUExBU0hfT0ZGX0ZHQ09MICAgb2Zm
c2V0c1s0XQorI2RlZmluZSBTUExBU0hfT0ZGX0NPTCAgICAgb2Zmc2V0c1s1XQorI2RlZmluZSBT
UExBU0hfT0ZGX1hPICAgICAgb2Zmc2V0c1s2XQorI2RlZmluZSBTUExBU0hfT0ZGX1lPICAgICAg
b2Zmc2V0c1s3XQorI2RlZmluZSBTUExBU0hfT0ZGX1dJICAgICAgb2Zmc2V0c1s4XQorI2RlZmlu
ZSBTUExBU0hfT0ZGX0hFICAgICAgb2Zmc2V0c1s5XQorI2RlZmluZSBTUExBU0hfT0ZGX0JPWENO
VCAgb2Zmc2V0c1sxMF0KKyNkZWZpbmUgU1BMQVNIX09GRl9TU0laRSAgIG9mZnNldHNbMTFdCisj
ZGVmaW5lIFNQTEFTSF9PRkZfU0JPWENOVCBvZmZzZXRzWzEyXQorI2RlZmluZSBTUExBU0hfT0ZG
X1BFUkNFTlQgb2Zmc2V0c1sxM10KKyNkZWZpbmUgU1BMQVNIX09GRl9PVkVST0sgIG9mZnNldHNb
MTRdCisjZGVmaW5lIFNQTEFTSF9PRkZfUEFMQ05UICBvZmZzZXRzWzE1XQorCitzdGF0aWMgaW5s
aW5lIGludCBzcGxhc2hfZ2V0Yih1bnNpZ25lZCBjaGFyICpwb3MsIGludCBvZmYpCit7CisgICAg
cmV0dXJuIG9mZiA9PSAtMSA/IDAgOiBwb3Nbb2ZmXTsKK30KKworc3RhdGljIGlubGluZSBpbnQg
c3BsYXNoX2dldHModW5zaWduZWQgY2hhciAqcG9zLCBpbnQgb2ZmKQoreworICAgIHJldHVybiBv
ZmYgPT0gLTEgPyAwIDogcG9zW29mZl0gfCBwb3Nbb2ZmICsgMV0gPDwgODsKK30KKworc3RhdGlj
IGlubGluZSBpbnQgc3BsYXNoX2dldGkodW5zaWduZWQgY2hhciAqcG9zLCBpbnQgb2ZmKQorewor
ICAgIHJldHVybiBvZmYgPT0gLTEgPyAwIDoKKyAgICAgICAgICAgcG9zW29mZl0gfCBwb3Nbb2Zm
ICsgMV0gPDwgOCB8IHBvc1tvZmYgKyAyXSA8PCAxNiB8IHBvc1tvZmYgKyAzXSA8PCAyNDsKK30K
Kworc3RhdGljIGludCBzcGxhc2hfZ2V0cmF3KHVuc2lnbmVkIGNoYXIgKnN0YXJ0LCB1bnNpZ25l
ZCBjaGFyICplbmQsIGludCAqdXBkYXRlKQoreworICAgIHVuc2lnbmVkIGNoYXIgKm5kYXRhOwor
ICAgIGludCB2ZXJzaW9uOworICAgIGludCBzcGxhc2hfc2l6ZTsKKyAgICBpbnQgdW5pdDsKKyAg
ICBpbnQgd2lkdGgsIGhlaWdodDsKKyAgICBpbnQgc2lsZW50c2l6ZTsKKyAgICBpbnQgYm94Y250
OworICAgIGludCBzYm94Y250OworICAgIGludCBwYWxjbnQ7CisgICAgaW50IGksIGxlbjsKKyAg
ICBjb25zdCBpbnQgKm9mZnNldHM7CisgICAgc3RydWN0IHZjX2RhdGEgKnZjOworICAgIHN0cnVj
dCBmYl9pbmZvICppbmZvOworICAgIHN0cnVjdCBzcGxhc2hfZGF0YSAqc2Q7CisKKyAgICBpZiAo
dXBkYXRlKQorCSp1cGRhdGUgPSAtMTsKKworICAgIGlmICghdXBkYXRlIHx8IHN0YXJ0WzddIDwg
JzInIHx8IHN0YXJ0WzddID4gJzMnIHx8IHNwbGFzaF9nZXRpKHN0YXJ0LCAxMikgIT0gKGludCkw
eGZmZmZmZmZmKQorCXByaW50ayhLRVJOX0lORk8gImJvb3RzcGxhc2ggJXM6IGxvb2tpbmcgZm9y
IHBpY3R1cmUuLi4iLCBTUExBU0hfVkVSU0lPTik7CisKKyAgICBmb3IgKG5kYXRhID0gc3RhcnQ7
IG5kYXRhIDwgZW5kOyBuZGF0YSsrKSB7CisJaWYgKG5kYXRhWzBdICE9ICdCJyB8fCBuZGF0YVsx
XSAhPSAnTycgfHwgbmRhdGFbMl0gIT0gJ08nIHx8IG5kYXRhWzNdICE9ICdUJykKKwkgICAgY29u
dGludWU7CisJaWYgKG5kYXRhWzRdICE9ICdTJyB8fCBuZGF0YVs1XSAhPSAnUCcgfHwgbmRhdGFb
Nl0gIT0gJ0wnIHx8IG5kYXRhWzddIDwgJzEnIHx8IG5kYXRhWzddID4gJzMnKQorCSAgICBjb250
aW51ZTsKKwl2ZXJzaW9uID0gbmRhdGFbN10gLSAnMCc7CisJb2Zmc2V0cyA9IHNwbGFzaF9vZmZz
ZXRzW3ZlcnNpb24gLSAxXTsKKwlsZW4gPSBTUExBU0hfT0ZGX0xFTjsKKwl1bml0ID0gc3BsYXNo
X2dldGIobmRhdGEsIFNQTEFTSF9PRkZfVU5JVCk7CisJaWYgKHVuaXQgPj0gTUFYX05SX0NPTlNP
TEVTKQorCSAgICBjb250aW51ZTsKKwlpZiAodW5pdCkgeworCQl2Y19hbGxvY2F0ZSh1bml0KTsK
Kwl9CisJdmMgPSB2Y19jb25zW3VuaXRdLmQ7CisJaW5mbyA9IHJlZ2lzdGVyZWRfZmJbKGludClj
b24yZmJfbWFwW3VuaXRdXTsKKwl3aWR0aCA9IGluZm8tPnZhci54cmVzOworCWhlaWdodCA9IGlu
Zm8tPnZhci55cmVzOworCXNwbGFzaF9zaXplID0gc3BsYXNoX2dldGkobmRhdGEsIFNQTEFTSF9P
RkZfU0laRSk7CisJaWYgKHNwbGFzaF9zaXplID09IChpbnQpMHhmZmZmZmZmZiAmJiB2ZXJzaW9u
ID4gMSkgeworCSAgICBpZiAoKHNkID0gdmMtPnZjX3NwbGFzaF9kYXRhKSAhPSAwKSB7CisJCWlu
dCB1cCA9IDA7CisJCWkgPSBzcGxhc2hfZ2V0YihuZGF0YSwgU1BMQVNIX09GRl9TVEFURSk7CisJ
CWlmIChpICE9IDI1NSkgeworCQkgICAgc2QtPnNwbGFzaF9zdGF0ZSA9IGk7CisJCSAgICB1cCA9
IC0xOworCQl9CisJCWkgPSBzcGxhc2hfZ2V0YihuZGF0YSwgU1BMQVNIX09GRl9GR0NPTCk7CisJ
CWlmIChpICE9IDI1NSkgeworCQkgICAgc2QtPnNwbGFzaF9mZ19jb2xvciA9IGk7CisJCSAgICB1
cCA9IC0xOworCQl9CisJCWkgPSBzcGxhc2hfZ2V0YihuZGF0YSwgU1BMQVNIX09GRl9DT0wpOwor
CQlpZiAoaSAhPSAyNTUpIHsKKwkJICAgIHNkLT5zcGxhc2hfY29sb3IgPSBpOworCQkgICAgdXAg
PSAtMTsKKwkJfQorCQlib3hjbnQgPSBzYm94Y250ID0gMDsKKwkJaWYgKG5kYXRhICsgbGVuIDw9
IGVuZCkgeworCQkgICAgYm94Y250ID0gc3BsYXNoX2dldHMobmRhdGEsIFNQTEFTSF9PRkZfQk9Y
Q05UKTsKKwkJICAgIHNib3hjbnQgPSBzcGxhc2hfZ2V0cyhuZGF0YSwgU1BMQVNIX09GRl9TQk9Y
Q05UKTsKKwkJfQorCQlpZiAoYm94Y250KSB7CisJCSAgICBpID0gc3BsYXNoX2dldHMobmRhdGEs
IGxlbik7CisJCSAgICBpZiAoYm94Y250ICsgaSA8PSBzZC0+c3BsYXNoX2JveGNvdW50ICYmIG5k
YXRhICsgbGVuICsgMiArIGJveGNudCAqIDEyIDw9IGVuZCkgeworCisJCQlpZiAoc3BsYXNoX2dl
dGkobmRhdGEsIGxlbiArIDIpICE9IDB4N2ZmZDdmZmYgfHwgIW1lbWNtcChuZGF0YSArIGxlbiAr
IDIsIHNkLT5zcGxhc2hfYm94ZXMgKyBpICogMTIsIDgpKSB7CisKKwkJCSAgICBtZW1jcHkoc2Qt
PnNwbGFzaF9ib3hlcyArIGkgKiAxMiwgbmRhdGEgKyBsZW4gKyAyLCBib3hjbnQgKiAxMik7CisJ
CQkgICAgdXAgfD0gMTsKKwkJCX0KKwkJICAgIH0KKwkJICAgIGxlbiArPSBib3hjbnQgKiAxMiAr
IDI7CisJCX0KKwkJaWYgKHNib3hjbnQpIHsKKwkJICAgIGkgPSBzcGxhc2hfZ2V0cyhuZGF0YSwg
bGVuKTsKKwkJICAgIGlmIChzYm94Y250ICsgaSA8PSBzZC0+c3BsYXNoX3Nib3hjb3VudCAmJiBu
ZGF0YSArIGxlbiArIDIgKyBzYm94Y250ICogMTIgPD0gZW5kKSB7CisJCQlpZiAoc3BsYXNoX2dl
dGkobmRhdGEsIGxlbiArIDIpICE9IDB4N2ZmZDdmZmYgfHwgIW1lbWNtcChuZGF0YSArIGxlbiAr
IDIsIHNkLT5zcGxhc2hfc2JveGVzICsgaSAqIDEyLCA4KSkgeworCQkJICAgIG1lbWNweShzZC0+
c3BsYXNoX3Nib3hlcyArIGkgKiAxMiwgbmRhdGEgKyBsZW4gKyAyLCBzYm94Y250ICogMTIpOwor
CQkJICAgIHVwIHw9IDI7CisJCQl9CisJCSAgICB9CisJCX0KKwkJaWYgKHVwZGF0ZSkKKwkJICAg
ICp1cGRhdGUgPSB1cDsKKwkgICAgfQorCSAgICByZXR1cm4gdW5pdDsKKwl9CisJaWYgKHNwbGFz
aF9zaXplID09IDApIHsKKwkgICAgcHJpbnRrKEtFUk5fSU5GTyIuLi5mb3VuZCwgZnJlZWluZyBt
ZW1vcnkuXG4iKTsKKwkgICAgaWYgKHZjLT52Y19zcGxhc2hfZGF0YSkKKwkJc3BsYXNoX2ZyZWUo
dmMsIGluZm8pOworCSAgICByZXR1cm4gdW5pdDsKKwl9CisJYm94Y250ID0gc3BsYXNoX2dldHMo
bmRhdGEsIFNQTEFTSF9PRkZfQk9YQ05UKTsKKwlwYWxjbnQgPSAzICogc3BsYXNoX2dldGIobmRh
dGEsIFNQTEFTSF9PRkZfUEFMQ05UKTsKKwlpZiAobmRhdGEgKyBsZW4gKyBzcGxhc2hfc2l6ZSA+
IGVuZCkgeworCSAgICBwcmludGsoS0VSTl9JTkZPICIuLi5mb3VuZCwgYnV0IHRydW5jYXRlZCFc
biIpOworCSAgICByZXR1cm4gLTE7CisJfQorCWlmICghanBlZ19jaGVja19zaXplKG5kYXRhICsg
bGVuICsgYm94Y250ICogMTIgKyBwYWxjbnQsIHdpZHRoLCBoZWlnaHQpKSB7CisJICAgIG5kYXRh
ICs9IGxlbiArIHNwbGFzaF9zaXplIC0gMTsKKwkgICAgY29udGludWU7CisJfQorCWlmIChzcGxh
c2hfY2hlY2tfanBlZyhuZGF0YSArIGxlbiArIGJveGNudCAqIDEyICsgcGFsY250LCB3aWR0aCwg
aGVpZ2h0LCBpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwpKQorCSAgICByZXR1cm4gLTE7CisJc2ls
ZW50c2l6ZSA9IHNwbGFzaF9nZXRpKG5kYXRhLCBTUExBU0hfT0ZGX1NTSVpFKTsKKwlpZiAoc2ls
ZW50c2l6ZSkKKwkgICAgcHJpbnRrKEtFUk5fSU5GTyIgc2lsZW50anBlZyBzaXplICVkIGJ5dGVz
LCIsIHNpbGVudHNpemUpOworCWlmIChzaWxlbnRzaXplID49IHNwbGFzaF9zaXplKSB7CisJICAg
IHByaW50ayhLRVJOX0lORk8gIiBiaWdnZXIgdGhhbiBzcGxhc2hzaXplIVxuIik7CisJICAgIHJl
dHVybiAtMTsKKwl9CisJc3BsYXNoX3NpemUgLT0gc2lsZW50c2l6ZTsKKwlpZiAoIXNwbGFzaF91
c2VzaWxlbnQpCisJICAgIHNpbGVudHNpemUgPSAwOworCWVsc2UgaWYgKGhlaWdodCAqIDIgKiBp
bmZvLT5maXgubGluZV9sZW5ndGggPiBpbmZvLT5maXguc21lbV9sZW4pIHsKKwkgICAgcHJpbnRr
KEtFUk5fSU5GTyAiIGRvZXMgbm90IGZpdCBpbnRvIGZyYW1lYnVmZmVyLlxuIik7CisJICAgIHNp
bGVudHNpemUgPSAwOworCX0KKwlzYm94Y250ID0gc3BsYXNoX2dldHMobmRhdGEsIFNQTEFTSF9P
RkZfU0JPWENOVCk7CisJaWYgKHNpbGVudHNpemUpIHsKKwkgICAgdW5zaWduZWQgY2hhciAqc2lt
YWdlID0gbmRhdGEgKyBsZW4gKyBzcGxhc2hfc2l6ZSArIDEyICogc2JveGNudDsKKwkgICAgaWYg
KCFqcGVnX2NoZWNrX3NpemUoc2ltYWdlLCB3aWR0aCwgaGVpZ2h0KSB8fAorCQlzcGxhc2hfY2hl
Y2tfanBlZyhzaW1hZ2UsIHdpZHRoLCBoZWlnaHQsIGluZm8tPnZhci5iaXRzX3Blcl9waXhlbCkp
IHsKKwkJICAgIHByaW50ayhLRVJOX0lORk8gIiBlcnJvciBpbiBzaWxlbnQganBlZy5cbiIpOwor
CQkgICAgc2lsZW50c2l6ZSA9IDA7CisJCX0KKwl9CisJaWYgKHZjLT52Y19zcGxhc2hfZGF0YSkK
KwkgICAgc3BsYXNoX2ZyZWUodmMsIGluZm8pOworCXZjLT52Y19zcGxhc2hfZGF0YSA9IHNkID0g
dm1hbGxvYyhzaXplb2YoKnNkKSArIHNwbGFzaF9zaXplICsgKHZlcnNpb24gPCAzID8gMiAqIDEy
IDogMCkpOworCWlmICghc2QpCisJICAgIGJyZWFrOworCXNkLT5zcGxhc2hfc2lsZW50anBlZyA9
IDA7CisJc2QtPnNwbGFzaF9zYm94ZXMgPSAwOworCXNkLT5zcGxhc2hfc2JveGNvdW50ID0gMDsK
KwlpZiAoc2lsZW50c2l6ZSkgeworCSAgICBzZC0+c3BsYXNoX3NpbGVudGpwZWcgPSB2bWFsbG9j
KHNpbGVudHNpemUpOworCSAgICBpZiAoc2QtPnNwbGFzaF9zaWxlbnRqcGVnKSB7CisJCW1lbWNw
eShzZC0+c3BsYXNoX3NpbGVudGpwZWcsIG5kYXRhICsgbGVuICsgc3BsYXNoX3NpemUsIHNpbGVu
dHNpemUpOworCQlzZC0+c3BsYXNoX3Nib3hlcyA9IHZjLT52Y19zcGxhc2hfZGF0YS0+c3BsYXNo
X3NpbGVudGpwZWc7CisJCXNkLT5zcGxhc2hfc2lsZW50anBlZyArPSAxMiAqIHNib3hjbnQ7CisJ
CXNkLT5zcGxhc2hfc2JveGNvdW50ID0gc2JveGNudDsKKwkgICAgfQorCX0KKwlzZC0+c3BsYXNo
X3N0YXRlID0gc3BsYXNoX2dldGIobmRhdGEsIFNQTEFTSF9PRkZfU1RBVEUpOworCXNkLT5zcGxh
c2hfZmdfY29sb3IgPSBzcGxhc2hfZ2V0YihuZGF0YSwgU1BMQVNIX09GRl9GR0NPTCk7CisJc2Qt
PnNwbGFzaF9jb2xvciA9IHNwbGFzaF9nZXRiKG5kYXRhLCBTUExBU0hfT0ZGX0NPTCk7CisJc2Qt
PnNwbGFzaF9vdmVycGFpbnRvayA9IHNwbGFzaF9nZXRiKG5kYXRhLCBTUExBU0hfT0ZGX09WRVJP
Syk7CisJc2QtPnNwbGFzaF90ZXh0X3hvID0gc3BsYXNoX2dldHMobmRhdGEsIFNQTEFTSF9PRkZf
WE8pOworCXNkLT5zcGxhc2hfdGV4dF95byA9IHNwbGFzaF9nZXRzKG5kYXRhLCBTUExBU0hfT0ZG
X1lPKTsKKwlzZC0+c3BsYXNoX3RleHRfd2kgPSBzcGxhc2hfZ2V0cyhuZGF0YSwgU1BMQVNIX09G
Rl9XSSk7CisJc2QtPnNwbGFzaF90ZXh0X2hlID0gc3BsYXNoX2dldHMobmRhdGEsIFNQTEFTSF9P
RkZfSEUpOworCXNkLT5zcGxhc2hfcGVyY2VudCA9IHNwbGFzaF9nZXRzKG5kYXRhLCBTUExBU0hf
T0ZGX1BFUkNFTlQpOworCWlmICh2ZXJzaW9uID09IDEpIHsKKwkgICAgc2QtPnNwbGFzaF90ZXh0
X3hvICo9IDg7CisJICAgIHNkLT5zcGxhc2hfdGV4dF93aSAqPSA4OworCSAgICBzZC0+c3BsYXNo
X3RleHRfeW8gKj0gMTY7CisJICAgIHNkLT5zcGxhc2hfdGV4dF9oZSAqPSAxNjsKKwkgICAgc2Qt
PnNwbGFzaF9jb2xvciAgICA9IChzcGxhc2hfZGVmYXVsdCA+PiA4KSAmIDB4MGY7CisJICAgIHNk
LT5zcGxhc2hfZmdfY29sb3IgPSAoc3BsYXNoX2RlZmF1bHQgPj4gNCkgJiAweDBmOworCSAgICBz
ZC0+c3BsYXNoX3N0YXRlICAgID0gc3BsYXNoX2RlZmF1bHQgJiAxOworCX0KKwlpZiAoc2QtPnNw
bGFzaF90ZXh0X3hvICsgc2QtPnNwbGFzaF90ZXh0X3dpID4gd2lkdGggfHwgc2QtPnNwbGFzaF90
ZXh0X3lvICsgc2QtPnNwbGFzaF90ZXh0X2hlID4gaGVpZ2h0KSB7CisJICAgIHNwbGFzaF9mcmVl
KHZjLCBpbmZvKTsKKwkgICAgcHJpbnRrKEtFUk5fSU5GTyAiIGZvdW5kLCBidXQgaGFzIG92ZXJz
aXplZCB0ZXh0IGFyZWEhXG4iKTsKKwkgICAgcmV0dXJuIC0xOworCX0KKy8qCWlmICghdmNfY29u
c1t1bml0XS5kIHx8IGluZm8tPmZib3BzICE9ICZ2ZXNhZmJfb3BzKSB7CisJICAgIHNwbGFzaF9m
cmVlKHZjLCBpbmZvKTsKKwkgICAgcHJpbnRrKEtFUk5fSU5GTyAiIGZvdW5kLCBidXQgZnJhbWVi
dWZmZXIgY2FuJ3QgaGFuZGxlIGl0IVxuIik7CisJICAgIHJldHVybiAtMTsKKwl9ICovCisJcHJp
bnRrKEtFUk5fSU5GTyAiLi4uZm91bmQgKCVkeCVkLCAlZCBieXRlcywgdiVkKS5cbiIsIHdpZHRo
LCBoZWlnaHQsIHNwbGFzaF9zaXplLCB2ZXJzaW9uKTsKKwlpZiAodmVyc2lvbiA9PSAxKSB7CisJ
ICAgIHByaW50ayhLRVJOX1dBUk5JTkcgImJvb3RzcGxhc2g6IFVzaW5nIGRlcHJlY2F0ZWQgdjEg
aGVhZGVyLiBVcGRhdGluZyB5b3VyIHNwbGFzaCB1dGlsaXR5IHJlY29tbWVuZGVkLlxuIik7CisJ
ICAgIHByaW50ayhLRVJOX0lORk8gICAgImJvb3RzcGxhc2g6IEZpbmQgdGhlIGxhdGVzdCB2ZXJz
aW9uIGF0IGh0dHA6Ly93d3cuYm9vdHNwbGFzaC5vcmcvXG4iKTsKKwl9CisKKwkvKiBmYWtlIHBl
bmd1aW4gYm94IGZvciBvbGRlciBmb3JtYXRzICovCisJaWYgKHZlcnNpb24gPT0gMSkKKwkgICAg
Ym94Y250ID0gc3BsYXNoX21rcGVuZ3VpbihzZCwgc2QtPnNwbGFzaF90ZXh0X3hvICsgMTAsIHNk
LT5zcGxhc2hfdGV4dF95byArIDEwLCBzZC0+c3BsYXNoX3RleHRfd2kgLSAyMCwgc2QtPnNwbGFz
aF90ZXh0X2hlIC0gMjAsIDB4ZjAsIDB4ZjAsIDB4ZjApOworCWVsc2UgaWYgKHZlcnNpb24gPT0g
MikKKwkgICAgYm94Y250ID0gc3BsYXNoX21rcGVuZ3VpbihzZCwgc3BsYXNoX2dldHMobmRhdGEs
IDI0KSwgc3BsYXNoX2dldHMobmRhdGEsIDI2KSwgc3BsYXNoX2dldHMobmRhdGEsIDI4KSwgc3Bs
YXNoX2dldHMobmRhdGEsIDMwKSwgc3BsYXNoX2dldGIobmRhdGEsIDMyKSwgc3BsYXNoX2dldGIo
bmRhdGEsIDMzKSwgc3BsYXNoX2dldGIobmRhdGEsIDM0KSk7CisKKwltZW1jcHkoKGNoYXIgKilz
ZCArIHNpemVvZigqc2QpICsgKHZlcnNpb24gPCAzID8gYm94Y250ICogMTIgOiAwKSwgbmRhdGEg
KyBsZW4sIHNwbGFzaF9zaXplKTsKKwlzZC0+c3BsYXNoX2JveGNvdW50ID0gYm94Y250OworCXNk
LT5zcGxhc2hfYm94ZXMgPSAodW5zaWduZWQgY2hhciAqKXNkICsgc2l6ZW9mKCpzZCk7CisJc2Qt
PnNwbGFzaF9wYWxldHRlID0gc2QtPnNwbGFzaF9ib3hlcyArIGJveGNudCAqIDEyOworCXNkLT5z
cGxhc2hfanBlZyA9IHNkLT5zcGxhc2hfcGFsZXR0ZSArIHBhbGNudDsKKwlzZC0+c3BsYXNoX3Bh
bGNudCA9IHBhbGNudCAvIDM7CisJc2QtPnNwbGFzaF9kb3NpbGVudCA9IHNkLT5zcGxhc2hfc2ls
ZW50anBlZyAhPSAwOworCXJldHVybiB1bml0OworICAgIH0KKyAgICBwcmludGsoS0VSTl9JTkZP
ICIuLi5ubyBnb29kIHNpZ25hdHVyZSBmb3VuZC5cbiIpOworICAgIHJldHVybiAtMTsKK30KKwor
aW50IHNwbGFzaF92ZXJib3NlKHZvaWQpIAoreworICAgIHN0cnVjdCB2Y19kYXRhICp2YzsKKyAg
ICBzdHJ1Y3QgZmJfaW5mbyAqaW5mbzsKKworICAgIGlmICghc3BsYXNoX3VzZXNpbGVudCkKKyAg
ICAgICAgcmV0dXJuIDA7CisKKyAgICB2YyA9IHZjX2NvbnNbMF0uZDsKKworICAgIGlmICghdmMg
fHwgIXZjLT52Y19zcGxhc2hfZGF0YSB8fCAhdmMtPnZjX3NwbGFzaF9kYXRhLT5zcGxhc2hfc3Rh
dGUpCisJcmV0dXJuIDA7CisgICAgaWYgKGZnX2NvbnNvbGUgIT0gdmMtPnZjX251bSkKKwlyZXR1
cm4gMDsKKyAgICBpZiAoIXZjLT52Y19zcGxhc2hfZGF0YS0+c3BsYXNoX3NpbGVudGpwZWcgfHwg
IXZjLT52Y19zcGxhc2hfZGF0YS0+c3BsYXNoX2Rvc2lsZW50KQorCXJldHVybiAwOworICAgIHZj
LT52Y19zcGxhc2hfZGF0YS0+c3BsYXNoX2Rvc2lsZW50ID0gMDsKKyAgICBpbmZvID0gcmVnaXN0
ZXJlZF9mYlsoaW50KWNvbjJmYl9tYXBbMF1dOworICAgIGlmICghaW5mby0+c2lsZW50X3NjcmVl
bl9iYXNlKQorCXJldHVybiAwOworICAgIHNwbGFzaGNvcHkoaW5mby0+c2lsZW50X3NjcmVlbl9i
YXNlLCBpbmZvLT5zY3JlZW5fYmFzZSwgaW5mby0+dmFyLnlyZXMsIGluZm8tPnZhci54cmVzLCBp
bmZvLT5maXgubGluZV9sZW5ndGgsIGluZm8tPmZpeC5saW5lX2xlbmd0aCk7CisgICAgaW5mby0+
c2NyZWVuX2Jhc2UgPSBpbmZvLT5zaWxlbnRfc2NyZWVuX2Jhc2U7CisgICAgaW5mby0+c2lsZW50
X3NjcmVlbl9iYXNlID0gMDsKKyAgICByZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgc3BsYXNo
X29mZihzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwlpZiAoaW5mby0+c2lsZW50X3NjcmVlbl9i
YXNlKQorCQlpbmZvLT5zY3JlZW5fYmFzZSA9IGluZm8tPnNpbGVudF9zY3JlZW5fYmFzZTsKKwlp
bmZvLT5zaWxlbnRfc2NyZWVuX2Jhc2UgPSAwOworCWluZm8tPnNwbGFzaF9kYXRhID0gMDsKKwlp
ZiAoaW5mby0+c3BsYXNoX3BpYykKKwkJdmZyZWUoaW5mby0+c3BsYXNoX3BpYyk7CisJaW5mby0+
c3BsYXNoX3BpYyA9IDA7CisJaW5mby0+c3BsYXNoX3BpY19zaXplID0gMDsKK30KKworaW50IHNw
bGFzaF9wcmVwYXJlKHN0cnVjdCB2Y19kYXRhICp2Yywgc3RydWN0IGZiX2luZm8gKmluZm8pCit7
CisJaW50IGVycjsKKyAgICAgICAgaW50IHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBzaXplLCBzYnl0
ZXM7CisKKwlpZiAoIXZjLT52Y19zcGxhc2hfZGF0YSB8fCAhdmMtPnZjX3NwbGFzaF9kYXRhLT5z
cGxhc2hfc3RhdGUpIHsKKwkJaWYgKGRlY2RhdGEpCisJCQl2ZnJlZShkZWNkYXRhKTsKKwkJZGVj
ZGF0YSA9IDA7CisJCXNwbGFzaF9vZmYoaW5mbyk7CisJCXJldHVybiAtMTsKKwl9CisKKyAgICAg
ICAgd2lkdGggPSBpbmZvLT52YXIueHJlczsKKyAgICAgICAgaGVpZ2h0ID0gaW5mby0+dmFyLnly
ZXM7CisgICAgICAgIGRlcHRoID0gaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsOworCWlmIChkZXB0
aCAhPSAxNikgewkvKiBPdGhlciB0YXJnZXRzIG1pZ2h0IG5lZWQgZml4aW5nICovCisJCXNwbGFz
aF9vZmYoaW5mbyk7CisJCXJldHVybiAtMjsKKwl9CisKKwlzYnl0ZXMgPSAoKHdpZHRoICsgMTUp
ICYgfjE1KSAqIChkZXB0aCA+PiAzKTsKKwlzaXplID0gc2J5dGVzICogKChoZWlnaHQgKyAxNSkg
JiB+MTUpOworCWlmIChzaXplICE9IGluZm8tPnNwbGFzaF9waWNfc2l6ZSkKKwkJc3BsYXNoX29m
ZihpbmZvKTsKKwlpZiAoIWluZm8tPnNwbGFzaF9waWMpCisJCWluZm8tPnNwbGFzaF9waWMgPSB2
bWFsbG9jKHNpemUpOworCisJaWYgKCFpbmZvLT5zcGxhc2hfcGljKSB7CisJCXByaW50ayhLRVJO
X0lORk8gImJvb3RzcGxhc2g6IG5vdCBlbm91Z2ggbWVtb3J5LlxuIik7CisJCXNwbGFzaF9vZmYo
aW5mbyk7CisJCXJldHVybiAtMzsKKwl9CisKKwlpZiAoIWRlY2RhdGEpCisJCWRlY2RhdGEgPSB2
bWFsbG9jKHNpemVvZigqZGVjZGF0YSkpOworCisJaWYgKHZjLT52Y19zcGxhc2hfZGF0YS0+c3Bs
YXNoX3NpbGVudGpwZWcgJiYgdmMtPnZjX3NwbGFzaF9kYXRhLT5zcGxhc2hfZG9zaWxlbnQpIHsK
KwkJLyogZmlsbCBhcmVhIGFmdGVyIGZyYW1lYnVmZmVyIHdpdGggb3RoZXIganBlZyAqLworCQlp
ZiAoKGVyciA9IGpwZWdfZGVjb2RlKHZjLT52Y19zcGxhc2hfZGF0YS0+c3BsYXNoX3NpbGVudGpw
ZWcsIGluZm8tPnNwbGFzaF9waWMsIAorCQkJICgod2lkdGggKyAxNSkgJiB+MTUpLCAoKGhlaWdo
dCArIDE1KSAmIH4xNSksIGRlcHRoLCBkZWNkYXRhKSkpIHsKKwkJCXByaW50ayhLRVJOX0lORk8g
ImJvb3RzcGxhc2g6IGVycm9yIHdoaWxlIGRlY29tcHJlc3Npbmcgc2lsZW50IHBpY3R1cmU6ICVz
ICglZClcbiIsIGpwZ19lcnJvcnNbZXJyIC0gMV0sIGVycik7CisJCQlpZiAoaW5mby0+c2lsZW50
X3NjcmVlbl9iYXNlKQorCQkJCWluZm8tPnNjcmVlbl9iYXNlID0gaW5mby0+c2lsZW50X3NjcmVl
bl9iYXNlOworCQkJdmMtPnZjX3NwbGFzaF9kYXRhLT5zcGxhc2hfZG9zaWxlbnQgPSAwOworCQl9
IGVsc2UgeworCQkJaWYgKHZjLT52Y19zcGxhc2hfZGF0YS0+c3BsYXNoX3Nib3hjb3VudCkKKwkJ
CQlib3hpdChpbmZvLT5zcGxhc2hfcGljLCBzYnl0ZXMsIHZjLT52Y19zcGxhc2hfZGF0YS0+c3Bs
YXNoX3Nib3hlcywgCisJCQkJCXZjLT52Y19zcGxhc2hfZGF0YS0+c3BsYXNoX3Nib3hjb3VudCwg
dmMtPnZjX3NwbGFzaF9kYXRhLT5zcGxhc2hfcGVyY2VudCwgMCk7CisKKwkJCWlmICghaW5mby0+
c2lsZW50X3NjcmVlbl9iYXNlKQorCQkJCWluZm8tPnNpbGVudF9zY3JlZW5fYmFzZSA9IGluZm8t
PnNjcmVlbl9iYXNlOworCQkJc3BsYXNoY29weShpbmZvLT5zaWxlbnRfc2NyZWVuX2Jhc2UsIGlu
Zm8tPnNwbGFzaF9waWMsIGluZm8tPnZhci55cmVzLCBpbmZvLT52YXIueHJlcywgaW5mby0+Zml4
LmxpbmVfbGVuZ3RoLCBzYnl0ZXMpOworCQkJaW5mby0+c2NyZWVuX2Jhc2UgPSBpbmZvLT5zaWxl
bnRfc2NyZWVuX2Jhc2UgKyBpbmZvLT5maXgubGluZV9sZW5ndGggKiBpbmZvLT52YXIueXJlczsK
KwkJfQorCX0gZWxzZSBpZiAoaW5mby0+c2lsZW50X3NjcmVlbl9iYXNlKQorCQlpbmZvLT5zY3Jl
ZW5fYmFzZSA9IGluZm8tPnNpbGVudF9zY3JlZW5fYmFzZTsKKworCWlmICgoZXJyID0ganBlZ19k
ZWNvZGUodmMtPnZjX3NwbGFzaF9kYXRhLT5zcGxhc2hfanBlZywgaW5mby0+c3BsYXNoX3BpYywg
CisJCSAoKHdpZHRoICsgMTUpICYgfjE1KSwgKChoZWlnaHQgKyAxNSkgJiB+MTUpLCBkZXB0aCwg
ZGVjZGF0YSkpKSB7CisJCXByaW50ayhLRVJOX0lORk8gImJvb3RzcGxhc2g6IGVycm9yIHdoaWxl
IGRlY29tcHJlc3NpbmcgcGljdHVyZTogJXMgKCVkKSAuXG4iLCBqcGdfZXJyb3JzW2VyciAtIDFd
LCBlcnIpOworCQlzcGxhc2hfb2ZmKGluZm8pOworCQlyZXR1cm4gLTQ7CisJfQorCWluZm8tPnNw
bGFzaF9waWNfc2l6ZSA9IHNpemU7CisJaW5mby0+c3BsYXNoX2J5dGVzID0gc2J5dGVzOworCWlm
ICh2Yy0+dmNfc3BsYXNoX2RhdGEtPnNwbGFzaF9ib3hjb3VudCkKKwkJYm94aXQoaW5mby0+c3Bs
YXNoX3BpYywgc2J5dGVzLCB2Yy0+dmNfc3BsYXNoX2RhdGEtPnNwbGFzaF9ib3hlcywgdmMtPnZj
X3NwbGFzaF9kYXRhLT5zcGxhc2hfYm94Y291bnQsIHZjLT52Y19zcGxhc2hfZGF0YS0+c3BsYXNo
X3BlcmNlbnQsIDApOworCWlmICh2Yy0+dmNfc3BsYXNoX2RhdGEtPnNwbGFzaF9zdGF0ZSkKKwkJ
aW5mby0+c3BsYXNoX2RhdGEgPSB2Yy0+dmNfc3BsYXNoX2RhdGE7CisJZWxzZQorCQlzcGxhc2hf
b2ZmKGluZm8pOworCXJldHVybiAwOworfQorCisKKyNpZmRlZiBDT05GSUdfUFJPQ19GUworCisj
aW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorCitzdGF0aWMgaW50IHNwbGFzaF9yZWFkX3Byb2Mo
Y2hhciAqYnVmZmVyLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwgaW50IHNpemUsCisJCQlp
bnQgKmVvZiwgdm9pZCAqZGF0YSk7CitzdGF0aWMgaW50IHNwbGFzaF93cml0ZV9wcm9jKHN0cnVj
dCBmaWxlICpmaWxlLCBjb25zdCBjaGFyICpidWZmZXIsCisJCQl1bnNpZ25lZCBsb25nIGNvdW50
LCB2b2lkICpkYXRhKTsKK3N0YXRpYyBpbnQgc3BsYXNoX3N0YXR1cyhzdHJ1Y3QgdmNfZGF0YSAq
dmMpOworc3RhdGljIGludCBzcGxhc2hfcmVjb2xvcihzdHJ1Y3QgdmNfZGF0YSAqdmMpOworc3Rh
dGljIGludCBzcGxhc2hfcHJvY19yZWdpc3Rlcih2b2lkKTsKKworc3RhdGljIHN0cnVjdCBwcm9j
X2Rpcl9lbnRyeSAqcHJvY19zcGxhc2g7CisKK3N0YXRpYyBpbnQgc3BsYXNoX3JlY29sb3Ioc3Ry
dWN0IHZjX2RhdGEgKnZjKQoreworCWlmICghdmMtPnZjX3NwbGFzaF9kYXRhKQorCSAgICByZXR1
cm4gLTE7CisJaWYgKCF2Yy0+dmNfc3BsYXNoX2RhdGEtPnNwbGFzaF9zdGF0ZSkKKwkgICAgcmV0
dXJuIDA7CisJY29uX3JlbWFwX2RlZl9jb2xvcih2YywgdmMtPnZjX3NwbGFzaF9kYXRhLT5zcGxh
c2hfY29sb3IgPDwgNCB8IHZjLT52Y19zcGxhc2hfZGF0YS0+c3BsYXNoX2ZnX2NvbG9yKTsKKwlp
ZiAoZmdfY29uc29sZSA9PSB2Yy0+dmNfbnVtKSB7CisJCXVwZGF0ZV9yZWdpb24odmMsIHZjLT52
Y19vcmlnaW4gKyB2Yy0+dmNfc2l6ZV9yb3cgKiB2Yy0+dmNfdG9wLAorCQkJICAgICAgdmMtPnZj
X3NpemVfcm93ICogKHZjLT52Y19ib3R0b20gLSB2Yy0+dmNfdG9wKSAvIDIpOworCX0KKwlyZXR1
cm4gMDsKK30KKworc3RhdGljIGludCBzcGxhc2hfc3RhdHVzKHN0cnVjdCB2Y19kYXRhICp2YykK
K3sKKwlzdHJ1Y3QgZmJfaW5mbyAqaW5mbzsKKwlwcmludGsoS0VSTl9JTkZPICJib290c3BsYXNo
OiBzdGF0dXMgb24gY29uc29sZSAlZCBjaGFuZ2VkIHRvICVzXG4iLCB2Yy0+dmNfbnVtLCB2Yy0+
dmNfc3BsYXNoX2RhdGEgJiYgdmMtPnZjX3NwbGFzaF9kYXRhLT5zcGxhc2hfc3RhdGUgPyAib24i
IDogIm9mZiIpOworCisJaW5mbyA9IHJlZ2lzdGVyZWRfZmJbKGludCkgY29uMmZiX21hcFt2Yy0+
dmNfbnVtXV07CisJaWYgKGZnX2NvbnNvbGUgPT0gdmMtPnZjX251bSkKKwkJc3BsYXNoX3ByZXBh
cmUodmMsIGluZm8pOworCWlmICh2Yy0+dmNfc3BsYXNoX2RhdGEgJiYgdmMtPnZjX3NwbGFzaF9k
YXRhLT5zcGxhc2hfc3RhdGUpIHsKKwkJY29uX3JlbWFwX2RlZl9jb2xvcih2YywgdmMtPnZjX3Nw
bGFzaF9kYXRhLT5zcGxhc2hfY29sb3IgPDwgNCB8IHZjLT52Y19zcGxhc2hfZGF0YS0+c3BsYXNo
X2ZnX2NvbG9yKTsKKwkJLyogdmNfcmVzaXplIGFsc28gY2FsbHMgY29uX3N3aXRjaCB3aGljaCBy
ZXNldHMgeXNjcm9sbCAqLworCQl2Y19yZXNpemUodmMsIHZjLT52Y19zcGxhc2hfZGF0YS0+c3Bs
YXNoX3RleHRfd2kgLyB2Yy0+dmNfZm9udC53aWR0aCwgdmMtPnZjX3NwbGFzaF9kYXRhLT5zcGxh
c2hfdGV4dF9oZSAvIHZjLT52Y19mb250LmhlaWdodCk7CisJCWlmIChmZ19jb25zb2xlID09IHZj
LT52Y19udW0pIHsKKwkJCXVwZGF0ZV9yZWdpb24odmMsIHZjLT52Y19vcmlnaW4gKyB2Yy0+dmNf
c2l6ZV9yb3cgKiB2Yy0+dmNfdG9wLAorCQkJCSAgICAgIHZjLT52Y19zaXplX3JvdyAqICh2Yy0+
dmNfYm90dG9tIC0gdmMtPnZjX3RvcCkgLyAyKTsKKwkJCXNwbGFzaF9jbGVhcl9tYXJnaW5zKHZj
LT52Y19zcGxhc2hfZGF0YSwgdmMsIGluZm8sIDApOworCQl9CisJfSBlbHNlIHsKKwkgIAkvKiBT
d2l0Y2ggYm9vdHNwbGFzaCBvZmYgKi8KKwkJY29uX3JlbWFwX2RlZl9jb2xvcih2YywgMHgwNyk7
CisJCXZjX3Jlc2l6ZSh2YywgaW5mby0+dmFyLnhyZXMgLyB2Yy0+dmNfZm9udC53aWR0aCwgaW5m
by0+dmFyLnlyZXMgLyB2Yy0+dmNfZm9udC5oZWlnaHQpOworCX0KKwlyZXR1cm4gMDsKK30KKwor
c3RhdGljIGludCBzcGxhc2hfcmVhZF9wcm9jKGNoYXIgKmJ1ZmZlciwgY2hhciAqKnN0YXJ0LCBv
ZmZfdCBvZmZzZXQsIGludCBzaXplLAorCQkJaW50ICplb2YsIHZvaWQgKmRhdGEpCit7CisJaW50
IGxlbiA9IDA7CisJb2ZmX3QgYmVnaW4gPSAwOworCXN0cnVjdCB2Y19kYXRhICp2YyA9IHZjX2Nv
bnNbMF0uZDsKKwlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IHJlZ2lzdGVyZWRfZmJbKGludCljb24y
ZmJfbWFwWzBdXTsKKwlpbnQgY29sb3IgPSB2Yy0+dmNfc3BsYXNoX2RhdGEgPyB2Yy0+dmNfc3Bs
YXNoX2RhdGEtPnNwbGFzaF9jb2xvciA8PCA0IHwKKwkJCXZjLT52Y19zcGxhc2hfZGF0YS0+c3Bs
YXNoX2ZnX2NvbG9yIDogc3BsYXNoX2RlZmF1bHQgPj4gNDsKKwlpbnQgc3RhdHVzID0gdmMtPnZj
X3NwbGFzaF9kYXRhID8gdmMtPnZjX3NwbGFzaF9kYXRhLT5zcGxhc2hfc3RhdGUgJiAxIDogMDsK
KwlsZW4gKz0gc3ByaW50ZihidWZmZXIgKyBsZW4sICJTcGxhc2ggc2NyZWVuIHYlcyAoMHglMDJ4
LCAlZHglZCVzKTogJXNcbiIsCisJCSAgICAgICAgU1BMQVNIX1ZFUlNJT04sIGNvbG9yLCBpbmZv
LT52YXIueHJlcywgaW5mby0+dmFyLnlyZXMsCisJCQkodmMtPnZjX3NwbGFzaF9kYXRhID8gIHZj
LT52Y19zcGxhc2hfZGF0YS0+c3BsYXNoX2Rvc2lsZW50IDogMCk/ICIsIHNpbGVudCIgOiAiIiwK
KwkJCQkJc3RhdHVzID8gIm9uIiA6ICJvZmYiKTsKKwlpZiAob2Zmc2V0ID49IGJlZ2luICsgbGVu
KQorCQlyZXR1cm4gMDsKKworCSpzdGFydCA9IGJ1ZmZlciArIChiZWdpbiAtIG9mZnNldCk7CisK
KwlyZXR1cm4gKHNpemUgPCBiZWdpbiArIGxlbiAtIG9mZnNldCA/IHNpemUgOiBiZWdpbiArIGxl
biAtIG9mZnNldCk7Cit9CisKK3N0YXRpYyBpbnQgc3BsYXNoX3dyaXRlX3Byb2Moc3RydWN0IGZp
bGUgKmZpbGUsIGNvbnN0IGNoYXIgKmJ1ZmZlciwKKwkJICAgICAgdW5zaWduZWQgbG9uZyBjb3Vu
dCwgdm9pZCAqZGF0YSkKK3sKKyAgICAgICAgaW50IG5ldywgdW5pdDsKKwlzdHJ1Y3QgdmNfZGF0
YSAqdmM7CisJCisJaWYgKCFidWZmZXIgfHwgIXNwbGFzaF9kZWZhdWx0KQorCQlyZXR1cm4gY291
bnQ7CisKKwlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJaWYgKCFzdHJuY21wKGJ1ZmZlciwgInNo
b3ciLCA0KSB8fCAhc3RybmNtcChidWZmZXIsICJoaWRlIiwgNCkpIHsKKwkJaW50IHBlLCBvbGRw
ZTsKKworCQl2YyA9IHZjX2NvbnNbMF0uZDsKKwkJaWYgKGJ1ZmZlcls0XSA9PSAnICcgJiYgYnVm
ZmVyWzVdID09ICdwJykKKwkJCXBlID0gMDsKKwkJZWxzZSBpZiAoYnVmZmVyWzRdID09ICdcbicp
CisJCQlwZSA9IDY1NTM1OworCQllbHNlCisJCQlwZSA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZmZlciAr
IDUsIE5VTEwsIDApOworCQlpZiAocGUgPCAwKQorCQkJcGUgPSAwOworCQlpZiAocGUgPiA2NTUz
NSkKKwkJCXBlID0gNjU1MzU7CisJCWlmICgqYnVmZmVyID09ICdoJykKKwkJCXBlID0gNjU1MzUg
LSBwZTsKKwkJcGUgKz0gcGUgPiAzMjc2NzsKKwkJaWYgKHZjLT52Y19zcGxhc2hfZGF0YSAmJiB2
Yy0+dmNfc3BsYXNoX2RhdGEtPnNwbGFzaF9wZXJjZW50ICE9IHBlKSB7CisJCQlzdHJ1Y3QgZmJf
aW5mbyAqaW5mbzsKKwkJCXN0cnVjdCBmYmNvbl9vcHMgKm9wczsKKworCQkJb2xkcGUgPSB2Yy0+
dmNfc3BsYXNoX2RhdGEtPnNwbGFzaF9wZXJjZW50OworCQkJdmMtPnZjX3NwbGFzaF9kYXRhLT5z
cGxhc2hfcGVyY2VudCA9IHBlOworCQkJaWYgKGZnX2NvbnNvbGUgIT0gMCB8fCAhdmMtPnZjX3Nw
bGFzaF9kYXRhLT5zcGxhc2hfc3RhdGUpIHsKKwkJCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJ
CQkJcmV0dXJuIGNvdW50OworCQkJfQorCQkJaW5mbyA9IHJlZ2lzdGVyZWRfZmJbKGludCkgY29u
MmZiX21hcFt2Yy0+dmNfbnVtXV07CisJCQlvcHMgPSBpbmZvLT5mYmNvbl9wYXI7CisJCQlpZiAo
b3BzLT5ibGFua19zdGF0ZSkgeworCQkJCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwkJCQlyZXR1
cm4gY291bnQ7CisJCQl9CisJCQlpZiAoIXZjLT52Y19zcGxhc2hfZGF0YS0+c3BsYXNoX292ZXJw
YWludG9rIHx8IHBlID09IDY1NTM2IHx8IHBlIDwgb2xkcGUpIHsKKwkJCQlpZiAoc3BsYXNoX2hh
c2ludGVyKHZjLT52Y19zcGxhc2hfZGF0YS0+c3BsYXNoX2JveGVzLCB2Yy0+dmNfc3BsYXNoX2Rh
dGEtPnNwbGFzaF9ib3hjb3VudCkpCisJCQkJCXNwbGFzaF9zdGF0dXModmMpOworCQkJCWVsc2UK
KwkJCQkJc3BsYXNoX3ByZXBhcmUodmMsIGluZm8pOworCQkJfSBlbHNlIHsKKwkJCQlpZiAodmMt
PnZjX3NwbGFzaF9kYXRhLT5zcGxhc2hfc2lsZW50anBlZyAmJiB2Yy0+dmNfc3BsYXNoX2RhdGEt
PnNwbGFzaF9kb3NpbGVudCAmJiBpbmZvLT5zaWxlbnRfc2NyZWVuX2Jhc2UpCisJCQkJCWJveGl0
KGluZm8tPnNpbGVudF9zY3JlZW5fYmFzZSwgaW5mby0+Zml4LmxpbmVfbGVuZ3RoLCB2Yy0+dmNf
c3BsYXNoX2RhdGEtPnNwbGFzaF9zYm94ZXMsIHZjLT52Y19zcGxhc2hfZGF0YS0+c3BsYXNoX3Ni
b3hjb3VudCwgdmMtPnZjX3NwbGFzaF9kYXRhLT5zcGxhc2hfcGVyY2VudCwgMSk7CisJCQkJYm94
aXQoaW5mby0+c2NyZWVuX2Jhc2UsIGluZm8tPmZpeC5saW5lX2xlbmd0aCwgdmMtPnZjX3NwbGFz
aF9kYXRhLT5zcGxhc2hfYm94ZXMsIHZjLT52Y19zcGxhc2hfZGF0YS0+c3BsYXNoX2JveGNvdW50
LCB2Yy0+dmNfc3BsYXNoX2RhdGEtPnNwbGFzaF9wZXJjZW50LCAxKTsKKwkJCX0KKwkJfQorCQly
ZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJCXJldHVybiBjb3VudDsKKwl9CisJaWYgKCFzdHJuY21w
KGJ1ZmZlciwic2lsZW50XG4iLDcpIHx8ICFzdHJuY21wKGJ1ZmZlciwidmVyYm9zZVxuIiw4KSkg
eworCQl2YyA9IHZjX2NvbnNbMF0uZDsKKwkJaWYgKHZjLT52Y19zcGxhc2hfZGF0YSAmJiB2Yy0+
dmNfc3BsYXNoX2RhdGEtPnNwbGFzaF9zaWxlbnRqcGVnKSB7CisJCSAgICBpZiAodmMtPnZjX3Nw
bGFzaF9kYXRhLT5zcGxhc2hfZG9zaWxlbnQgIT0gKGJ1ZmZlclswXSA9PSAncycpKSB7CisJCQl2
Yy0+dmNfc3BsYXNoX2RhdGEtPnNwbGFzaF9kb3NpbGVudCA9IGJ1ZmZlclswXSA9PSAncyc7CisJ
CQlzcGxhc2hfc3RhdHVzKHZjKTsKKwkJICAgIH0KKwkJfQorCQlyZWxlYXNlX2NvbnNvbGVfc2Vt
KCk7CisJCXJldHVybiBjb3VudDsKKwl9CisJaWYgKCFzdHJuY21wKGJ1ZmZlciwiZnJlZXNpbGVu
dFxuIiwxMSkpIHsKKwkJdmMgPSB2Y19jb25zWzBdLmQ7CisJCWlmICh2Yy0+dmNfc3BsYXNoX2Rh
dGEgJiYgdmMtPnZjX3NwbGFzaF9kYXRhLT5zcGxhc2hfc2lsZW50anBlZykgeworCQkgICAgcHJp
bnRrKEtFUk5fSU5GTyAiYm9vdHNwbGFzaDogZnJlZWluZyBzaWxlbnQganBlZ1xuIik7CisJCSAg
ICB2Yy0+dmNfc3BsYXNoX2RhdGEtPnNwbGFzaF9zaWxlbnRqcGVnID0gMDsKKwkJICAgIHZmcmVl
KHZjLT52Y19zcGxhc2hfZGF0YS0+c3BsYXNoX3Nib3hlcyk7CisJCSAgICB2Yy0+dmNfc3BsYXNo
X2RhdGEtPnNwbGFzaF9zYm94ZXMgPSAwOworCQkgICAgdmMtPnZjX3NwbGFzaF9kYXRhLT5zcGxh
c2hfc2JveGNvdW50ID0gMDsKKwkJICAgIGlmICh2Yy0+dmNfc3BsYXNoX2RhdGEtPnNwbGFzaF9k
b3NpbGVudCkKKwkJCXNwbGFzaF9zdGF0dXModmMpOworCQkgICAgdmMtPnZjX3NwbGFzaF9kYXRh
LT5zcGxhc2hfZG9zaWxlbnQgPSAwOworCQl9CisJCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwkJ
cmV0dXJuIGNvdW50OworCX0KKworCWlmICghc3RybmNtcChidWZmZXIsICJCT09UU1BMIiwgNykp
IHsKKwkgICAgaW50IHVwID0gLTE7CisJICAgIHVuaXQgPSBzcGxhc2hfZ2V0cmF3KCh1bnNpZ25l
ZCBjaGFyICopYnVmZmVyLCAodW5zaWduZWQgY2hhciAqKWJ1ZmZlciArIGNvdW50LCAmdXApOwor
CSAgICBpZiAodW5pdCA+PSAwKSB7CisJCXZjID0gdmNfY29uc1t1bml0XS5kOworCQlpZiAodXAg
PT0gLTEpCisJCSAgICBzcGxhc2hfc3RhdHVzKHZjKTsKKwkJZWxzZSB7CisJCSAgICBzdHJ1Y3Qg
ZmJfaW5mbyAqaW5mbyA9IHJlZ2lzdGVyZWRfZmJbKGludCkgY29uMmZiX21hcFt2Yy0+dmNfbnVt
XV07CisJCSAgICBzdHJ1Y3QgZmJjb25fb3BzICpvcHMgPSBpbmZvLT5mYmNvbl9wYXI7CisJCSAg
ICBpZiAob3BzLT5ibGFua19zdGF0ZSkKKwkJCXVwID0gMDsKKwkJICAgIGlmICgodXAgJiAyKSAh
PSAwICYmIHZjLT52Y19zcGxhc2hfZGF0YS0+c3BsYXNoX3NpbGVudGpwZWcgJiYgdmMtPnZjX3Nw
bGFzaF9kYXRhLT5zcGxhc2hfZG9zaWxlbnQgJiYgaW5mby0+c2lsZW50X3NjcmVlbl9iYXNlKQor
CQkJYm94aXQoaW5mby0+c2lsZW50X3NjcmVlbl9iYXNlLCBpbmZvLT5maXgubGluZV9sZW5ndGgs
IHZjLT52Y19zcGxhc2hfZGF0YS0+c3BsYXNoX3Nib3hlcywgdmMtPnZjX3NwbGFzaF9kYXRhLT5z
cGxhc2hfc2JveGNvdW50LCB2Yy0+dmNfc3BsYXNoX2RhdGEtPnNwbGFzaF9wZXJjZW50LCAxKTsK
KwkJICAgIGlmICgodXAgJiAxKSAhPSAwKQorCQkJICAgIGJveGl0KGluZm8tPnNjcmVlbl9iYXNl
LCBpbmZvLT5maXgubGluZV9sZW5ndGgsIHZjLT52Y19zcGxhc2hfZGF0YS0+c3BsYXNoX2JveGVz
LCB2Yy0+dmNfc3BsYXNoX2RhdGEtPnNwbGFzaF9ib3hjb3VudCwgdmMtPnZjX3NwbGFzaF9kYXRh
LT5zcGxhc2hfcGVyY2VudCwgMSk7CisJCX0KKwkgICAgfQorCSAgICByZWxlYXNlX2NvbnNvbGVf
c2VtKCk7CisJICAgIHJldHVybiBjb3VudDsKKwl9CisJdmMgPSB2Y19jb25zWzBdLmQ7CisJaWYg
KCF2Yy0+dmNfc3BsYXNoX2RhdGEpIHsKKwkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCQlyZXR1
cm4gY291bnQ7CisJfQorCWlmIChidWZmZXJbMF0gPT0gJ3QnKSB7CisJICAgICAgICB2Yy0+dmNf
c3BsYXNoX2RhdGEtPnNwbGFzaF9zdGF0ZSBePSAxOworCQlzcGxhc2hfc3RhdHVzKHZjKTsKKwkJ
cmVsZWFzZV9jb25zb2xlX3NlbSgpOworCQlyZXR1cm4gY291bnQ7CisJfQorCW5ldyA9IHNpbXBs
ZV9zdHJ0b3VsKGJ1ZmZlciwgTlVMTCwgMCk7CisJaWYgKG5ldyA+IDEpIHsKKwkJLyogZXhwZXJ0
IHVzZXIgKi8KKwkJdmMtPnZjX3NwbGFzaF9kYXRhLT5zcGxhc2hfY29sb3IgICAgPSBuZXcgPj4g
OCAmIDB4ZmY7CisJCXZjLT52Y19zcGxhc2hfZGF0YS0+c3BsYXNoX2ZnX2NvbG9yID0gbmV3ID4+
IDQgJiAweDBmOworCX0KKwlpZiAoKG5ldyAmIDEpID09IHZjLT52Y19zcGxhc2hfZGF0YS0+c3Bs
YXNoX3N0YXRlKQorCQlzcGxhc2hfcmVjb2xvcih2Yyk7CisJZWxzZSB7CisJCXZjLT52Y19zcGxh
c2hfZGF0YS0+c3BsYXNoX3N0YXRlID0gbmV3ICYgMTsKKwkJc3BsYXNoX3N0YXR1cyh2Yyk7CisJ
fQorCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBp
bnQgc3BsYXNoX3Byb2NfcmVnaXN0ZXIodm9pZCkKK3sKKwlpZiAoKHByb2Nfc3BsYXNoID0gY3Jl
YXRlX3Byb2NfZW50cnkoInNwbGFzaCIsIDAsIDApKSkgeworCQlwcm9jX3NwbGFzaC0+cmVhZF9w
cm9jID0gc3BsYXNoX3JlYWRfcHJvYzsKKwkJcHJvY19zcGxhc2gtPndyaXRlX3Byb2MgPSBzcGxh
c2hfd3JpdGVfcHJvYzsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAxOworfQorCisjIGlmIDAK
K3N0YXRpYyBpbnQgc3BsYXNoX3Byb2NfdW5yZWdpc3Rlcih2b2lkKQoreworCWlmIChwcm9jX3Nw
bGFzaCkKKwkJcmVtb3ZlX3Byb2NfZW50cnkoInNwbGFzaCIsIDApOworCXJldHVybiAwOworfQor
IyBlbmRpZgorI2VuZGlmCS8qIENPTkZJR19QUk9DX0ZTICovCisKK3ZvaWQgc3BsYXNoX2luaXQo
dm9pZCkKK3sKKwlzdHJ1Y3QgZmJfaW5mbyAqaW5mbzsKKwlzdHJ1Y3QgdmNfZGF0YSAqdmM7CisJ
aW50IGlzcmFtZnMgPSAxOworCWludCBmZDsKKwlpbnQgbGVuOworCWludCBtYXhfbGVuID0gMTAy
NCoxMDI0KjI7CisJY2hhciAqbWVtOworCisJaWYgKHNwbGFzaF9yZWdpc3RlcmVkKQorCQlyZXR1
cm47CisJdmMgPSB2Y19jb25zWzBdLmQ7CisJaW5mbyA9IHJlZ2lzdGVyZWRfZmJbMF07CisJaWYg
KCF2YyB8fCAhaW5mbyB8fCBpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwgIT0gMTYpCisJCXJldHVy
bjsKKyNpZmRlZiBDT05GSUdfUFJPQ19GUworCXNwbGFzaF9wcm9jX3JlZ2lzdGVyKCk7CisjZW5k
aWYKKwlzcGxhc2hfcmVnaXN0ZXJlZCA9IDE7CisJaWYgKHZjLT52Y19zcGxhc2hfZGF0YSkKKwkJ
cmV0dXJuOworCWlmICgoZmQgPSBzeXNfb3BlbigiL2Jvb3RzcGxhc2giLCBPX1JET05MWSwgMCkp
IDwgMCkgeworCQlpc3JhbWZzID0gMDsKKwkJZmQgPSBzeXNfb3BlbigiL2luaXRyZC5pbWFnZSIs
IE9fUkRPTkxZLCAwKTsKKwl9CisJaWYgKGZkIDwgMCkKKwkJcmV0dXJuOworCWlmICgobGVuID0g
KGludClzeXNfbHNlZWsoZmQsIChvZmZfdCkwLCAyKSkgPD0gMCkgeworCQlzeXNfY2xvc2UoZmQp
OworCQlyZXR1cm47CisJfQorCS8qIERvbid0IGxvb2sgZm9yIG1vcmUgdGhhbiB0aGUgbGFzdCAy
TUIgKi8KKwlpZiAobGVuID4gbWF4X2xlbikgeworCQlwcmludGsoIEtFUk5fSU5GTyAiYm9vdHNw
bGFzaDogc2Nhbm5pbmcgbGFzdCAlZE1CIG9mIGluaXRyZCBmb3Igc2lnbmF0dXJlXG4iLAorCQkJ
CW1heF9sZW4+PjIwKTsKKwkJc3lzX2xzZWVrKGZkLCAob2ZmX3QpKGxlbiAtIG1heF9sZW4pLCAw
KTsKKwkJbGVuID0gbWF4X2xlbjsKKwl9IGVsc2UgeworCQlzeXNfbHNlZWsoZmQsIChvZmZfdCkw
LCAwKTsKKwl9CisKKwltZW0gPSB2bWFsbG9jKGxlbik7CisJaWYgKG1lbSkgeworCQlhY3F1aXJl
X2NvbnNvbGVfc2VtKCk7CisJCWlmICgoaW50KXN5c19yZWFkKGZkLCBtZW0sIGxlbikgPT0gbGVu
ICYmIHNwbGFzaF9nZXRyYXcoKHVuc2lnbmVkIGNoYXIgKiltZW0sICh1bnNpZ25lZCBjaGFyICop
bWVtICsgbGVuLCAoaW50ICopMCkgPT0gMCAmJiB2Yy0+dmNfc3BsYXNoX2RhdGEpCisJCQl2Yy0+
dmNfc3BsYXNoX2RhdGEtPnNwbGFzaF9zdGF0ZSA9IHNwbGFzaF9kZWZhdWx0ICYgMTsKKwkJcmVs
ZWFzZV9jb25zb2xlX3NlbSgpOworCQl2ZnJlZShtZW0pOworCX0KKwlzeXNfY2xvc2UoZmQpOwor
CWlmIChpc3JhbWZzKQorCQlzeXNfdW5saW5rKCIvYm9vdHNwbGFzaCIpOworCXJldHVybjsKK30K
KwpkaWZmIC11cndOIGxpbnV4LTIuNi4zNS9kcml2ZXJzL3ZpZGVvL2Jvb3RzcGxhc2gvYm9vdHNw
bGFzaC5oIGxpbnV4LTIuNi4zNS1wYXRjaGVkL2RyaXZlcnMvdmlkZW8vYm9vdHNwbGFzaC9ib290
c3BsYXNoLmgKLS0tIGxpbnV4LTIuNi4zNS9kcml2ZXJzL3ZpZGVvL2Jvb3RzcGxhc2gvYm9vdHNw
bGFzaC5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyBsaW51eC0yLjYu
MzUtcGF0Y2hlZC9kcml2ZXJzL3ZpZGVvL2Jvb3RzcGxhc2gvYm9vdHNwbGFzaC5oCTIwMTAtMDgt
MDIgMTc6MzY6NTYuNDY2MDQ3OTY3ICswMjAwCkBAIC0wLDAgKzEsNDQgQEAKKy8qIAorICogICAg
bGludXgvZHJpdmVycy92aWRlby9ib290c3BsYXNoL2Jvb3RzcGxhc2guaCAtIHNwbGFzaCBzY3Jl
ZW4gZGVmaW5pdGlvbi4KKyAqCQorICoJKHcpIDIwMDEtMjAwMyBieSBWb2xrZXIgUG9wbGF3c2tp
LCA8dm9sa2VyQHBvcGxhd3NraS5kZT4KKyAqIAkJICAgIFN0ZWZhbiBSZWluYXVlciwgPHN0ZXBh
bkBzdXNlLmRlPgorICogCQkgICAgCisgKiAJCSAgICAKKyAqIAlpZGVhIGFuZCBTdVNFIHNjcmVl
biB3b3JrIGJ5IEtlbiBXaW1lciwgPHdpbWVyQHN1c2UuZGU+CisgKi8KKworI2lmbmRlZiBfX0JP
T1RTUExBU0hfSAorI2RlZmluZSBfX0JPT1RTUExBU0hfSAorCitzdHJ1Y3QgZmJfaW5mbzsKKwor
Lyogc3BsYXNoLmMgKi8KK2V4dGVybiBpbnQgc3BsYXNoX3ByZXBhcmUoc3RydWN0IHZjX2RhdGEg
Kiwgc3RydWN0IGZiX2luZm8gKik7CitleHRlcm4gdm9pZCBzcGxhc2hfaW5pdCh2b2lkKTsKKwor
Lyogc3BsYXNoX3JlbmRlci5jICovCitleHRlcm4gdm9pZCBzcGxhc2hfcHV0Y3Moc3RydWN0IHNw
bGFzaF9kYXRhICpzZCwgc3RydWN0IHZjX2RhdGEgKnZjLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbywK
KwkJCWNvbnN0IHVuc2lnbmVkIHNob3J0ICpzLCBpbnQgY291bnQsIGludCB5cG9zLCBpbnQgeHBv
cyk7CitleHRlcm4gdm9pZCBzcGxhc2hfcHV0YyhzdHJ1Y3Qgc3BsYXNoX2RhdGEgKnNkLCBzdHJ1
Y3QgdmNfZGF0YSAqdmMsIHN0cnVjdCBmYl9pbmZvICppbmZvLAorCQkJaW50IGMsIGludCB5cG9z
LCBpbnQgeHBvcyk7CitleHRlcm4gdm9pZCBzcGxhc2hjb3B5KHU4ICpkc3QsIHU4ICpzcmMsIGlu
dCBoZWlnaHQsIGludCB3aWR0aCwgaW50IGRzdGJ5dGVzLCBpbnQgc3JjYnl0ZXMpOworZXh0ZXJu
IHZvaWQgc3BsYXNoX2NsZWFyKHN0cnVjdCBzcGxhc2hfZGF0YSAqc2QsIHN0cnVjdCB2Y19kYXRh
ICp2Yywgc3RydWN0IGZiX2luZm8gKmluZm8sIGludCBzeSwKKwkJCWludCBzeCwgaW50IGhlaWdo
dCwgaW50IHdpZHRoKTsKK2V4dGVybiB2b2lkIHNwbGFzaF9ibW92ZShzdHJ1Y3Qgc3BsYXNoX2Rh
dGEgKnNkLCBzdHJ1Y3QgdmNfZGF0YSAqdmMsIHN0cnVjdCBmYl9pbmZvICppbmZvLCBpbnQgc3ks
IAorCQkJaW50IHN4LCBpbnQgZHksIGludCBkeCwgaW50IGhlaWdodCwgaW50IHdpZHRoKTsKK2V4
dGVybiB2b2lkIHNwbGFzaF9jbGVhcl9tYXJnaW5zKHN0cnVjdCBzcGxhc2hfZGF0YSAqc2QsIHN0
cnVjdCB2Y19kYXRhICp2Yywgc3RydWN0IGZiX2luZm8gKmluZm8sCisJCQlpbnQgYm90dG9tX29u
bHkpOworZXh0ZXJuIGludCBzcGxhc2hfY3Vyc29yKHN0cnVjdCBzcGxhc2hfZGF0YSAqc2QsIHN0
cnVjdCBmYl9pbmZvICppbmZvLCBzdHJ1Y3QgZmJfY3Vyc29yICpjdXJzb3IpOworZXh0ZXJuIHZv
aWQgc3BsYXNoX2Jtb3ZlX3JlZHJhdyhzdHJ1Y3Qgc3BsYXNoX2RhdGEgKnNkLCBzdHJ1Y3QgdmNf
ZGF0YSAqdmMsIHN0cnVjdCBmYl9pbmZvICppbmZvLAorCQkJaW50IHksIGludCBzeCwgaW50IGR4
LCBpbnQgd2lkdGgpOworZXh0ZXJuIHZvaWQgc3BsYXNoX2JsYW5rKHN0cnVjdCBzcGxhc2hfZGF0
YSAqc2QsIHN0cnVjdCB2Y19kYXRhICp2Yywgc3RydWN0IGZiX2luZm8gKmluZm8sCisJCQlpbnQg
YmxhbmspOworCisvKiB2dC5jICovCitleHRlcm4gdm9pZCBjb25fcmVtYXBfZGVmX2NvbG9yKHN0
cnVjdCB2Y19kYXRhICosIGludCBuZXdfY29sb3IpOworCitleHRlcm4gdm9pZCBhY3F1aXJlX2Nv
bnNvbGVfc2VtKHZvaWQpOworZXh0ZXJuIHZvaWQgcmVsZWFzZV9jb25zb2xlX3NlbSh2b2lkKTsK
KworI2VuZGlmCmRpZmYgLXVyd04gbGludXgtMi42LjM1L2RyaXZlcnMvdmlkZW8vYm9vdHNwbGFz
aC9kZWNvZGUtanBnLmMgbGludXgtMi42LjM1LXBhdGNoZWQvZHJpdmVycy92aWRlby9ib290c3Bs
YXNoL2RlY29kZS1qcGcuYwotLS0gbGludXgtMi42LjM1L2RyaXZlcnMvdmlkZW8vYm9vdHNwbGFz
aC9kZWNvZGUtanBnLmMJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIGxp
bnV4LTIuNi4zNS1wYXRjaGVkL2RyaXZlcnMvdmlkZW8vYm9vdHNwbGFzaC9kZWNvZGUtanBnLmMJ
MjAxMC0wOC0wMiAxNzozNjo1Ni40NjkzODEyMjQgKzAyMDAKQEAgLTAsMCArMSw5NTcgQEAKKy8q
IAorICogICAgbGludXgvZHJpdmVycy92aWRlby9ib290c3BsYXNoL2RlY29kZS1qcGcuYyAtIGEg
dGlueSBqcGVnIGRlY29kZXIuCisgKiAgICAgIAorICogICAgICAodykgQXVndXN0IDIwMDEgYnkg
TWljaGFlbCBTY2hyb2VkZXIsIDxtbHNAc3VzZS5kZT4KKyAqICAgICAgICAgICAgICAgICAgCisg
Ki8KKworI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIu
aD4KKworI2luY2x1ZGUgImRlY29kZS1qcGcuaCIKKworI2RlZmluZSBJU0hJRlQgMTEKKworI2Rl
ZmluZSBJRklYKGEpICgoaW50KSgoYSkgKiAoMSA8PCBJU0hJRlQpICsgLjUpKQorI2RlZmluZSBJ
TVVMVChhLCBiKSAoKChhKSAqIChiKSkgPj4gSVNISUZUKQorI2RlZmluZSBJVE9JTlQoYSkgKChh
KSA+PiBJU0hJRlQpCisKKyNpZm5kZWYgX19QCisjIGRlZmluZSBfX1AoeCkgeAorI2VuZGlmCisK
Ky8qIHNwZWNpYWwgbWFya2VycyAqLworI2RlZmluZSBNX0JBREhVRkYJLTEKKyNkZWZpbmUgTV9F
T0YJCTB4ODAKKworc3RydWN0IGluIHsKKwl1bnNpZ25lZCBjaGFyICpwOworCXVuc2lnbmVkIGlu
dCBiaXRzOworCWludCBsZWZ0OworCWludCBtYXJrZXI7CisKKwlpbnQgKCpmdW5jKSBfX1AoKHZv
aWQgKikpOworCXZvaWQgKmRhdGE7Cit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqLworc3RydWN0IGRlY19odWZmdGJsOworc3RydWN0IGVuY19odWZmdGJsOworCit1bmlv
biBodWZmdGJscCB7CisJc3RydWN0IGRlY19odWZmdGJsICpkaHVmZjsKKwlzdHJ1Y3QgZW5jX2h1
ZmZ0YmwgKmVodWZmOworfTsKKworc3RydWN0IHNjYW4geworCWludCBkYzsJCQkvKiBvbGQgZGMg
dmFsdWUgKi8KKworCXVuaW9uIGh1ZmZ0YmxwIGh1ZGM7CisJdW5pb24gaHVmZnRibHAgaHVhYzsK
KwlpbnQgbmV4dDsJCS8qIHdoZW4gdG8gc3dpdGNoIHRvIG5leHQgc2NhbiAqLworCisJaW50IGNp
ZDsJCS8qIGNvbXBvbmVudCBpZCAqLworCWludCBodjsJCQkvKiBob3Jpei92ZXJ0LCBjb3BpZWQg
ZnJvbSBjb21wICovCisJaW50IHRxOwkJCS8qIHF1YW50IHRibCwgY29waWVkIGZyb20gY29tcCAq
LworfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBE
RUNCSVRTIDEwCQkvKiBzZWVtcyB0byBiZSB0aGUgb3B0aW11bSAqLworCitzdHJ1Y3QgZGVjX2h1
ZmZ0YmwgeworCWludCBtYXhjb2RlWzE3XTsKKwlpbnQgdmFscHRyWzE2XTsKKwl1bnNpZ25lZCBj
aGFyIHZhbHNbMjU2XTsKKwl1bnNpZ25lZCBpbnQgbGx2YWxzWzEgPDwgREVDQklUU107Cit9Owor
CitzdGF0aWMgdm9pZCBkZWNvZGVfbWN1cyBfX1AoKHN0cnVjdCBpbiAqLCBpbnQgKiwgaW50LCBz
dHJ1Y3Qgc2NhbiAqLCBpbnQgKikpOworc3RhdGljIGludCBkZWNfcmVhZG1hcmtlciBfX1AoKHN0
cnVjdCBpbiAqKSk7CitzdGF0aWMgdm9pZCBkZWNfbWFrZWh1ZmYgX19QKChzdHJ1Y3QgZGVjX2h1
ZmZ0YmwgKiwgaW50ICosIHVuc2lnbmVkIGNoYXIgKikpOworCitzdGF0aWMgdm9pZCBzZXRpbnB1
dCBfX1AoKHN0cnVjdCBpbiAqLCB1bnNpZ25lZCBjaGFyICopKTsKKy8qKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiovCisKKyN1bmRlZiBQUkVDCisjZGVmaW5lIFBSRUMgaW50CisKK3N0
YXRpYyB2b2lkIGlkY3RxdGFiIF9fUCgodW5zaWduZWQgY2hhciAqLCBQUkVDICopKTsKK3N0YXRp
YyB2b2lkIGlkY3QgX19QKChpbnQgKiwgaW50ICosIFBSRUMgKiwgUFJFQywgaW50KSk7CitzdGF0
aWMgdm9pZCBzY2FsZWlkY3RxdGFiIF9fUCgoUFJFQyAqLCBQUkVDKSk7CisKKy8qKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyB2b2lkIGluaXRjb2wgX19QKChQUkVD
W11bNjRdKSk7CisKK3N0YXRpYyB2b2lkIGNvbDIyMTExMSBfX1AoKGludCAqLCB1bnNpZ25lZCBj
aGFyICosIGludCkpOworc3RhdGljIHZvaWQgY29sMjIxMTExXzE2IF9fUCgoaW50ICosIHVuc2ln
bmVkIGNoYXIgKiwgaW50KSk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov
CisKKyNkZWZpbmUgTV9TT0kJMHhkOAorI2RlZmluZSBNX0FQUDAJMHhlMAorI2RlZmluZSBNX0RR
VAkweGRiCisjZGVmaW5lIE1fU09GMAkweGMwCisjZGVmaW5lIE1fREhUICAgMHhjNAorI2RlZmlu
ZSBNX0RSSQkweGRkCisjZGVmaW5lIE1fU09TCTB4ZGEKKyNkZWZpbmUgTV9SU1QwCTB4ZDAKKyNk
ZWZpbmUgTV9FT0kJMHhkOQorI2RlZmluZSBNX0NPTQkweGZlCisKK3N0YXRpYyB1bnNpZ25lZCBj
aGFyICpkYXRhcDsKKworc3RhdGljIGludCBnZXRieXRlKHZvaWQpCit7CisJcmV0dXJuICpkYXRh
cCsrOworfQorCitzdGF0aWMgaW50IGdldHdvcmQodm9pZCkKK3sKKwlpbnQgYzEsIGMyOworCWMx
ID0gKmRhdGFwKys7CisJYzIgPSAqZGF0YXArKzsKKwlyZXR1cm4gYzEgPDwgOCB8IGMyOworfQor
CitzdHJ1Y3QgY29tcCB7CisJaW50IGNpZDsKKwlpbnQgaHY7CisJaW50IHRxOworfTsKKworI2Rl
ZmluZSBNQVhDT01QIDQKK3N0cnVjdCBqcGdpbmZvIHsKKwlpbnQgbmM7CQkJLyogbnVtYmVyIG9m
IGNvbXBvbmVudHMgKi8KKwlpbnQgbnM7CQkJLyogbnVtYmVyIG9mIHNjYW5zICovCisJaW50IGRy
aTsJCS8qIHJlc3RhcnQgaW50ZXJ2YWwgKi8KKwlpbnQgbm07CQkJLyogbWN1cyB0aWwgbmV4dCBt
YXJrZXIgKi8KKwlpbnQgcm07CQkJLyogbmV4dCByZXN0YXJ0IG1hcmtlciAqLworfTsKKworc3Rh
dGljIHN0cnVjdCBqcGdpbmZvIGluZm87CitzdGF0aWMgc3RydWN0IGNvbXAgY29tcHNbTUFYQ09N
UF07CisKK3N0YXRpYyBzdHJ1Y3Qgc2NhbiBkc2NhbnNbTUFYQ09NUF07CisKK3N0YXRpYyB1bnNp
Z25lZCBjaGFyIHF1YW50WzRdWzY0XTsKKworc3RhdGljIHN0cnVjdCBkZWNfaHVmZnRibCBkaHVm
Zls0XTsKKworI2RlZmluZSBkZWNfaHVmZmRjIChkaHVmZiArIDApCisjZGVmaW5lIGRlY19odWZm
YWMgKGRodWZmICsgMikKKworc3RhdGljIHN0cnVjdCBpbiBpbjsKKworc3RhdGljIGludCByZWFk
dGFibGVzKGludCB0aWxsKQoreworCWludCBtLCBsLCBpLCBqLCBscSwgcHEsIHRxOworCWludCB0
YywgdGgsIHR0OworCisJZm9yICg7OykgeworCQlpZiAoZ2V0Ynl0ZSgpICE9IDB4ZmYpCisJCQly
ZXR1cm4gLTE7CisJCWlmICgobSA9IGdldGJ5dGUoKSkgPT0gdGlsbCkKKwkJCWJyZWFrOworCisJ
CXN3aXRjaCAobSkgeworCQljYXNlIDB4YzI6CisJCQlyZXR1cm4gMDsKKworCQljYXNlIE1fRFFU
OgorCQkJbHEgPSBnZXR3b3JkKCk7CisJCQl3aGlsZSAobHEgPiAyKSB7CisJCQkJcHEgPSBnZXRi
eXRlKCk7CisJCQkJdHEgPSBwcSAmIDE1OworCQkJCWlmICh0cSA+IDMpCisJCQkJCXJldHVybiAt
MTsKKwkJCQlwcSA+Pj0gNDsKKwkJCQlpZiAocHEgIT0gMCkKKwkJCQkJcmV0dXJuIC0xOworCQkJ
CWZvciAoaSA9IDA7IGkgPCA2NDsgaSsrKQorCQkJCQlxdWFudFt0cV1baV0gPSBnZXRieXRlKCk7
CisJCQkJbHEgLT0gNjQgKyAxOworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBNX0RIVDoKKwkJ
CWwgPSBnZXR3b3JkKCk7CisJCQl3aGlsZSAobCA+IDIpIHsKKwkJCQlpbnQgaHVmZmxlblsxNl0s
IGs7CisJCQkJdW5zaWduZWQgY2hhciBodWZmdmFsc1syNTZdOworCisJCQkJdGMgPSBnZXRieXRl
KCk7CisJCQkJdGggPSB0YyAmIDE1OworCQkJCXRjID4+PSA0OworCQkJCXR0ID0gdGMgKiAyICsg
dGg7CisJCQkJaWYgKHRjID4gMSB8fCB0aCA+IDEpCisJCQkJCXJldHVybiAtMTsKKwkJCQlmb3Ig
KGkgPSAwOyBpIDwgMTY7IGkrKykKKwkJCQkJaHVmZmxlbltpXSA9IGdldGJ5dGUoKTsKKwkJCQls
IC09IDEgKyAxNjsKKwkJCQlrID0gMDsKKwkJCQlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgewor
CQkJCQlmb3IgKGogPSAwOyBqIDwgaHVmZmxlbltpXTsgaisrKQorCQkJCQkJaHVmZnZhbHNbaysr
XSA9IGdldGJ5dGUoKTsKKwkJCQkJbCAtPSBodWZmbGVuW2ldOworCQkJCX0KKwkJCQlkZWNfbWFr
ZWh1ZmYoZGh1ZmYgKyB0dCwgaHVmZmxlbiwKKwkJCQkJICAgICBodWZmdmFscyk7CisJCQl9CisJ
CQlicmVhazsKKworCQljYXNlIE1fRFJJOgorCQkJbCA9IGdldHdvcmQoKTsKKwkJCWluZm8uZHJp
ID0gZ2V0d29yZCgpOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWwgPSBnZXR3b3JkKCk7
CisJCQl3aGlsZSAobC0tID4gMikKKwkJCQlnZXRieXRlKCk7CisJCQlicmVhazsKKwkJfQorCX0K
KwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZGVjX2luaXRzY2Fucyh2b2lkKQoreworCWlu
dCBpOworCisJaW5mby5ubSA9IGluZm8uZHJpICsgMTsKKwlpbmZvLnJtID0gTV9SU1QwOworCWZv
ciAoaSA9IDA7IGkgPCBpbmZvLm5zOyBpKyspCisJCWRzY2Fuc1tpXS5kYyA9IDA7Cit9CisKK3N0
YXRpYyBpbnQgZGVjX2NoZWNrbWFya2VyKHZvaWQpCit7CisJaW50IGk7CisKKwlpZiAoZGVjX3Jl
YWRtYXJrZXIoJmluKSAhPSBpbmZvLnJtKQorCQlyZXR1cm4gLTE7CisJaW5mby5ubSA9IGluZm8u
ZHJpOworCWluZm8ucm0gPSAoaW5mby5ybSArIDEpICYgfjB4MDg7CisJZm9yIChpID0gMDsgaSA8
IGluZm8ubnM7IGkrKykKKwkJZHNjYW5zW2ldLmRjID0gMDsKKwlyZXR1cm4gMDsKK30KKworaW50
IGpwZWdfY2hlY2tfc2l6ZSh1bnNpZ25lZCBjaGFyICpidWYsIGludCB3aWR0aCwgaW50IGhlaWdo
dCkKK3sKKyAgCWRhdGFwID0gYnVmOworCWdldGJ5dGUoKTsgCisJZ2V0Ynl0ZSgpOyAKKwlyZWFk
dGFibGVzKE1fU09GMCk7CisJZ2V0d29yZCgpOworCWdldGJ5dGUoKTsKKyAgICAgICAgaWYgKGhl
aWdodCAhPSBnZXR3b3JkKCkgfHwgd2lkdGggIT0gZ2V0d29yZCgpKQorCQlyZXR1cm4gMDsKKyAg
ICAgICAgcmV0dXJuIDE7Cit9CisKK2ludCBqcGVnX2RlY29kZShidWYsIHBpYywgd2lkdGgsIGhl
aWdodCwgZGVwdGgsIGRlY2RhdGEpCit1bnNpZ25lZCBjaGFyICpidWYsICpwaWM7CitpbnQgd2lk
dGgsIGhlaWdodCwgZGVwdGg7CitzdHJ1Y3QganBlZ19kZWNkYXRhICpkZWNkYXRhOworeworCWlu
dCBpLCBqLCBtLCB0YWMsIHRkYzsKKwlpbnQgbWN1c3gsIG1jdXN5LCBteCwgbXk7CisJaW50IG1h
eFs2XTsKKworCWlmICghZGVjZGF0YSB8fCAhYnVmIHx8ICFwaWMpCisJCXJldHVybiAtMTsKKwlk
YXRhcCA9IGJ1ZjsKKwlpZiAoZ2V0Ynl0ZSgpICE9IDB4ZmYpCisJCXJldHVybiBFUlJfTk9fU09J
OworCWlmIChnZXRieXRlKCkgIT0gTV9TT0kpCisJCXJldHVybiBFUlJfTk9fU09JOworCWlmIChy
ZWFkdGFibGVzKE1fU09GMCkpCisJCXJldHVybiBFUlJfQkFEX1RBQkxFUzsKKwlnZXR3b3JkKCk7
CisJaSA9IGdldGJ5dGUoKTsKKwlpZiAoaSAhPSA4KQorCQlyZXR1cm4gRVJSX05PVF84QklUOwor
CWlmICgoKGdldHdvcmQoKSArIDE1KSAmIH4xNSkgIT0gaGVpZ2h0KQorCQlyZXR1cm4gRVJSX0hF
SUdIVF9NSVNNQVRDSDsKKwlpZiAoKChnZXR3b3JkKCkgKyAxNSkgJiB+MTUpICE9IHdpZHRoKQor
CQlyZXR1cm4gRVJSX1dJRFRIX01JU01BVENIOworCWlmICgoaGVpZ2h0ICYgMTUpIHx8ICh3aWR0
aCAmIDE1KSkKKwkJcmV0dXJuIEVSUl9CQURfV0lEVEhfT1JfSEVJR0hUOworCWluZm8ubmMgPSBn
ZXRieXRlKCk7CisJaWYgKGluZm8ubmMgPiBNQVhDT01QKQorCQlyZXR1cm4gRVJSX1RPT19NQU5Z
X0NPTVBQUzsKKwlmb3IgKGkgPSAwOyBpIDwgaW5mby5uYzsgaSsrKSB7CisJCWludCBoLCB2Owor
CQljb21wc1tpXS5jaWQgPSBnZXRieXRlKCk7CisJCWNvbXBzW2ldLmh2ID0gZ2V0Ynl0ZSgpOwor
CQl2ID0gY29tcHNbaV0uaHYgJiAxNTsKKwkJaCA9IGNvbXBzW2ldLmh2ID4+IDQ7CisJCWNvbXBz
W2ldLnRxID0gZ2V0Ynl0ZSgpOworCQlpZiAoaCA+IDMgfHwgdiA+IDMpCisJCQlyZXR1cm4gRVJS
X0lMTEVHQUxfSFY7CisJCWlmIChjb21wc1tpXS50cSA+IDMpCisJCQlyZXR1cm4gRVJSX1FVQU5U
X1RBQkxFX1NFTEVDVE9SOworCX0KKwlpZiAocmVhZHRhYmxlcyhNX1NPUykpCisJCXJldHVybiBF
UlJfQkFEX1RBQkxFUzsKKwlnZXR3b3JkKCk7CisJaW5mby5ucyA9IGdldGJ5dGUoKTsKKwlpZiAo
aW5mby5ucyAhPSAzKQorCQlyZXR1cm4gRVJSX05PVF9ZQ0JDUl8yMjExMTE7CisJZm9yIChpID0g
MDsgaSA8IDM7IGkrKykgeworCQlkc2NhbnNbaV0uY2lkID0gZ2V0Ynl0ZSgpOworCQl0ZGMgPSBn
ZXRieXRlKCk7CisJCXRhYyA9IHRkYyAmIDE1OworCQl0ZGMgPj49IDQ7CisJCWlmICh0ZGMgPiAx
IHx8IHRhYyA+IDEpCisJCQlyZXR1cm4gRVJSX1FVQU5UX1RBQkxFX1NFTEVDVE9SOworCQlmb3Ig
KGogPSAwOyBqIDwgaW5mby5uYzsgaisrKQorCQkJaWYgKGNvbXBzW2pdLmNpZCA9PSBkc2NhbnNb
aV0uY2lkKQorCQkJCWJyZWFrOworCQlpZiAoaiA9PSBpbmZvLm5jKQorCQkJcmV0dXJuIEVSUl9V
TktOT1dOX0NJRF9JTl9TQ0FOOworCQlkc2NhbnNbaV0uaHYgPSBjb21wc1tqXS5odjsKKwkJZHNj
YW5zW2ldLnRxID0gY29tcHNbal0udHE7CisJCWRzY2Fuc1tpXS5odWRjLmRodWZmID0gZGVjX2h1
ZmZkYyArIHRkYzsKKwkJZHNjYW5zW2ldLmh1YWMuZGh1ZmYgPSBkZWNfaHVmZmFjICsgdGFjOwor
CX0KKwkKKwlpID0gZ2V0Ynl0ZSgpOworCWogPSBnZXRieXRlKCk7CisJbSA9IGdldGJ5dGUoKTsK
KwkKKwlpZiAoaSAhPSAwIHx8IGogIT0gNjMgfHwgbSAhPSAwKQorCQlyZXR1cm4gRVJSX05PVF9T
RVFVRU5USUFMX0RDVDsKKwkKKwlpZiAoZHNjYW5zWzBdLmNpZCAhPSAxIHx8IGRzY2Fuc1sxXS5j
aWQgIT0gMiB8fCBkc2NhbnNbMl0uY2lkICE9IDMpCisJCXJldHVybiBFUlJfTk9UX1lDQkNSXzIy
MTExMTsKKworCWlmIChkc2NhbnNbMF0uaHYgIT0gMHgyMiB8fCBkc2NhbnNbMV0uaHYgIT0gMHgx
MSB8fCBkc2NhbnNbMl0uaHYgIT0gMHgxMSkKKwkJcmV0dXJuIEVSUl9OT1RfWUNCQ1JfMjIxMTEx
OworCisJbWN1c3ggPSB3aWR0aCA+PiA0OworCW1jdXN5ID0gaGVpZ2h0ID4+IDQ7CisKKworCWlk
Y3RxdGFiKHF1YW50W2RzY2Fuc1swXS50cV0sIGRlY2RhdGEtPmRxdWFudFswXSk7CisJaWRjdHF0
YWIocXVhbnRbZHNjYW5zWzFdLnRxXSwgZGVjZGF0YS0+ZHF1YW50WzFdKTsKKwlpZGN0cXRhYihx
dWFudFtkc2NhbnNbMl0udHFdLCBkZWNkYXRhLT5kcXVhbnRbMl0pOworCWluaXRjb2woZGVjZGF0
YS0+ZHF1YW50KTsKKwlzZXRpbnB1dCgmaW4sIGRhdGFwKTsKKworI2lmIDAKKwkvKiBsYW5kaW5n
IHpvbmUgKi8KKwlpbWdbbGVuXSA9IDA7CisJaW1nW2xlbiArIDFdID0gMHhmZjsKKwlpbWdbbGVu
ICsgMl0gPSBNX0VPRjsKKyNlbmRpZgorCisJZGVjX2luaXRzY2FucygpOworCisJZHNjYW5zWzBd
Lm5leHQgPSA2IC0gNDsKKwlkc2NhbnNbMV0ubmV4dCA9IDYgLSA0IC0gMTsKKwlkc2NhbnNbMl0u
bmV4dCA9IDYgLSA0IC0gMSAtIDE7CS8qIDQxMSBlbmNvZGluZyAqLworCWZvciAobXkgPSAwOyBt
eSA8IG1jdXN5OyBteSsrKSB7CisJCWZvciAobXggPSAwOyBteCA8IG1jdXN4OyBteCsrKSB7CisJ
CQlpZiAoaW5mby5kcmkgJiYgIS0taW5mby5ubSkKKwkJCQlpZiAoZGVjX2NoZWNrbWFya2VyKCkp
CisJCQkJCXJldHVybiBFUlJfV1JPTkdfTUFSS0VSOworCQkJCisJCQlkZWNvZGVfbWN1cygmaW4s
IGRlY2RhdGEtPmRjdHMsIDYsIGRzY2FucywgbWF4KTsKKwkJCWlkY3QoZGVjZGF0YS0+ZGN0cywg
ZGVjZGF0YS0+b3V0LCBkZWNkYXRhLT5kcXVhbnRbMF0sIElGSVgoMTI4LjUpLCBtYXhbMF0pOwor
CQkJaWRjdChkZWNkYXRhLT5kY3RzICsgNjQsIGRlY2RhdGEtPm91dCArIDY0LCBkZWNkYXRhLT5k
cXVhbnRbMF0sIElGSVgoMTI4LjUpLCBtYXhbMV0pOworCQkJaWRjdChkZWNkYXRhLT5kY3RzICsg
MTI4LCBkZWNkYXRhLT5vdXQgKyAxMjgsIGRlY2RhdGEtPmRxdWFudFswXSwgSUZJWCgxMjguNSks
IG1heFsyXSk7CisJCQlpZGN0KGRlY2RhdGEtPmRjdHMgKyAxOTIsIGRlY2RhdGEtPm91dCArIDE5
MiwgZGVjZGF0YS0+ZHF1YW50WzBdLCBJRklYKDEyOC41KSwgbWF4WzNdKTsKKwkJCWlkY3QoZGVj
ZGF0YS0+ZGN0cyArIDI1NiwgZGVjZGF0YS0+b3V0ICsgMjU2LCBkZWNkYXRhLT5kcXVhbnRbMV0s
IElGSVgoMC41KSwgbWF4WzRdKTsKKwkJCWlkY3QoZGVjZGF0YS0+ZGN0cyArIDMyMCwgZGVjZGF0
YS0+b3V0ICsgMzIwLCBkZWNkYXRhLT5kcXVhbnRbMl0sIElGSVgoMC41KSwgbWF4WzVdKTsKKwor
CQkJc3dpdGNoIChkZXB0aCkgeworCQkJY2FzZSAyNDoKKwkJCQljb2wyMjExMTEoZGVjZGF0YS0+
b3V0LCBwaWMgKyAobXkgKiAxNiAqIG1jdXN4ICsgbXgpICogMTYgKiAzLCBtY3VzeCAqIDE2ICog
Myk7CisJCQkJYnJlYWs7CisJCQljYXNlIDE2OgorCQkJCWNvbDIyMTExMV8xNihkZWNkYXRhLT5v
dXQsIHBpYyArIChteSAqIDE2ICogbWN1c3ggKyBteCkgKiAoMTYgKiAyKSwgbWN1c3ggKiAoMTYg
KiAyKSk7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCXJldHVybiBFUlJfREVQVEhfTUlT
TUFUQ0g7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisJCisJbSA9IGRlY19yZWFkbWFya2Vy
KCZpbik7CisJaWYgKG0gIT0gTV9FT0kpCisJCXJldHVybiBFUlJfTk9fRU9JOworCisJcmV0dXJu
IDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqICAgICAgIGh1ZmZtYW4gZGVjb2Rl
ciAgICAgICAgICAgICAqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGludCBm
aWxsYml0cyBfX1AoKHN0cnVjdCBpbiAqLCBpbnQsIHVuc2lnbmVkIGludCkpOworc3RhdGljIGlu
dCBkZWNfcmVjMgorX19QKChzdHJ1Y3QgaW4gKiwgc3RydWN0IGRlY19odWZmdGJsICosIGludCAq
LCBpbnQsIGludCkpOworCitzdGF0aWMgdm9pZCBzZXRpbnB1dChpbiwgcCkKK3N0cnVjdCBpbiAq
aW47Cit1bnNpZ25lZCBjaGFyICpwOworeworCWluLT5wID0gcDsKKwlpbi0+bGVmdCA9IDA7CisJ
aW4tPmJpdHMgPSAwOworCWluLT5tYXJrZXIgPSAwOworfQorCitzdGF0aWMgaW50IGZpbGxiaXRz
KGluLCBsZSwgYmkpCitzdHJ1Y3QgaW4gKmluOworaW50IGxlOwordW5zaWduZWQgaW50IGJpOwor
eworCWludCBiLCBtOworCisJaWYgKGluLT5tYXJrZXIpIHsKKwkJaWYgKGxlIDw9IDE2KQorCQkJ
aW4tPmJpdHMgPSBiaSA8PCAxNiwgbGUgKz0gMTY7CisJCXJldHVybiBsZTsKKwl9CisJd2hpbGUg
KGxlIDw9IDI0KSB7CisJCWIgPSAqaW4tPnArKzsKKwkJaWYgKGIgPT0gMHhmZiAmJiAobSA9ICpp
bi0+cCsrKSAhPSAwKSB7CisJCQlpZiAobSA9PSBNX0VPRikgeworCQkJCWlmIChpbi0+ZnVuYyAm
JiAobSA9IGluLT5mdW5jKGluLT5kYXRhKSkgPT0gMCkKKwkJCQkJY29udGludWU7CisJCQl9CisJ
CQlpbi0+bWFya2VyID0gbTsKKwkJCWlmIChsZSA8PSAxNikKKwkJCQliaSA9IGJpIDw8IDE2LCBs
ZSArPSAxNjsKKwkJCWJyZWFrOworCQl9CisJCWJpID0gYmkgPDwgOCB8IGI7CisJCWxlICs9IDg7
CisJfQorCWluLT5iaXRzID0gYmk7CQkvKiB0bXAuLi4gMiByZXR1cm4gdmFsdWVzIG5lZWRlZCAq
LworCXJldHVybiBsZTsKK30KKworc3RhdGljIGludCBkZWNfcmVhZG1hcmtlcihpbikKK3N0cnVj
dCBpbiAqaW47Cit7CisJaW50IG07CisKKwlpbi0+bGVmdCA9IGZpbGxiaXRzKGluLCBpbi0+bGVm
dCwgaW4tPmJpdHMpOworCWlmICgobSA9IGluLT5tYXJrZXIpID09IDApCisJCXJldHVybiAwOwor
CWluLT5sZWZ0ID0gMDsKKwlpbi0+bWFya2VyID0gMDsKKwlyZXR1cm4gbTsKK30KKworI2RlZmlu
ZSBMRUJJX0RDTAlpbnQgbGUsIGJpCisjZGVmaW5lIExFQklfR0VUKGluKQkobGUgPSBpbi0+bGVm
dCwgYmkgPSBpbi0+Yml0cykKKyNkZWZpbmUgTEVCSV9QVVQoaW4pCShpbi0+bGVmdCA9IGxlLCBp
bi0+Yml0cyA9IGJpKQorCisjZGVmaW5lIEdFVEJJVFMoaW4sIG4pICgJCQkJCVwKKyAgKGxlIDwg
KG4pID8gbGUgPSBmaWxsYml0cyhpbiwgbGUsIGJpKSwgYmkgPSBpbi0+Yml0cyA6IDApLAlcCisg
IChsZSAtPSAobikpLAkJCQkJCQlcCisgIGJpID4+IGxlICYgKCgxIDw8IChuKSkgLSAxKQkJCQkJ
XAorKQorCisjZGVmaW5lIFVOR0VUQklUUyhpbiwgbikgKAlcCisgIGxlICs9IChuKQkJCVwKKykK
KworCitzdGF0aWMgaW50IGRlY19yZWMyKGluLCBodSwgcnVucCwgYywgaSkKK3N0cnVjdCBpbiAq
aW47CitzdHJ1Y3QgZGVjX2h1ZmZ0YmwgKmh1OworaW50ICpydW5wOworaW50IGMsIGk7Cit7CisJ
TEVCSV9EQ0w7CisKKwlMRUJJX0dFVChpbik7CisJaWYgKGkpIHsKKwkJVU5HRVRCSVRTKGluLCBp
ICYgMTI3KTsKKwkJKnJ1bnAgPSBpID4+IDggJiAxNTsKKwkJaSA+Pj0gMTY7CisJfSBlbHNlIHsK
KwkJZm9yIChpID0gREVDQklUUzsgKGMgPSAoKGMgPDwgMSkgfCBHRVRCSVRTKGluLCAxKSkpID49
IChodS0+bWF4Y29kZVtpXSk7IGkrKyk7CisJCWlmIChpID49IDE2KSB7CisJCQlpbi0+bWFya2Vy
ID0gTV9CQURIVUZGOworCQkJcmV0dXJuIDA7CisJCX0KKwkJaSA9IGh1LT52YWxzW2h1LT52YWxw
dHJbaV0gKyBjIC0gaHUtPm1heGNvZGVbaSAtIDFdICogMl07CisJCSpydW5wID0gaSA+PiA0Owor
CQlpICY9IDE1OworCX0KKwlpZiAoaSA9PSAwKSB7CQkvKiBzaWdoLCAweGYwIGlzIDExIGJpdCAq
LworCQlMRUJJX1BVVChpbik7CisJCXJldHVybiAwOworCX0KKwkvKiByZWNlaXZlIHBhcnQgKi8K
KwljID0gR0VUQklUUyhpbiwgaSk7CisJaWYgKGMgPCAoMSA8PCAoaSAtIDEpKSkKKwkJYyArPSAo
LTEgPDwgaSkgKyAxOworCUxFQklfUFVUKGluKTsKKwlyZXR1cm4gYzsKK30KKworI2RlZmluZSBE
RUNfUkVDKGluLCBodSwgciwgaSkJICgJXAorICByID0gR0VUQklUUyhpbiwgREVDQklUUyksCQlc
CisgIGkgPSBodS0+bGx2YWxzW3JdLAkJCVwKKyAgaSAmIDEyOCA/CQkJCVwKKyAgICAoCQkJCQlc
CisgICAgICBVTkdFVEJJVFMoaW4sIGkgJiAxMjcpLAkJXAorICAgICAgciA9IGkgPj4gOCAmIDE1
LAkJCVwKKyAgICAgIGkgPj4gMTYJCQkJXAorICAgICkJCQkJCVwKKyAgOgkJCQkJXAorICAgICgJ
CQkJCVwKKyAgICAgIExFQklfUFVUKGluKSwJCQlcCisgICAgICBpID0gZGVjX3JlYzIoaW4sIGh1
LCAmciwgciwgaSksCVwKKyAgICAgIExFQklfR0VUKGluKSwJCQlcCisgICAgICBpCQkJCQlcCisg
ICAgKQkJCQkJXAorKQorCitzdGF0aWMgdm9pZCBkZWNvZGVfbWN1cyhpbiwgZGN0LCBuLCBzYywg
bWF4cCkKK3N0cnVjdCBpbiAqaW47CitpbnQgKmRjdDsKK2ludCBuOworc3RydWN0IHNjYW4gKnNj
OworaW50ICptYXhwOworeworCXN0cnVjdCBkZWNfaHVmZnRibCAqaHU7CisJaW50IGksIHIsIHQ7
CisJTEVCSV9EQ0w7CisKKwltZW1zZXQoZGN0LCAwLCBuICogNjQgKiBzaXplb2YoKmRjdCkpOwor
CUxFQklfR0VUKGluKTsKKwl3aGlsZSAobi0tID4gMCkgeworCQlodSA9IHNjLT5odWRjLmRodWZm
OworCQkqZGN0KysgPSAoc2MtPmRjICs9IERFQ19SRUMoaW4sIGh1LCByLCB0KSk7CisKKwkJaHUg
PSBzYy0+aHVhYy5kaHVmZjsKKwkJaSA9IDYzOworCQl3aGlsZSAoaSA+IDApIHsKKwkJCXQgPSBE
RUNfUkVDKGluLCBodSwgciwgdCk7CisJCQlpZiAodCA9PSAwICYmIHIgPT0gMCkgeworCQkJCWRj
dCArPSBpOworCQkJCWJyZWFrOworCQkJfQorCQkJZGN0ICs9IHI7CisJCQkqZGN0KysgPSB0Owor
CQkJaSAtPSByICsgMTsKKwkJfQorCQkqbWF4cCsrID0gNjQgLSBpOworCQlpZiAobiA9PSBzYy0+
bmV4dCkKKwkJCXNjKys7CisJfQorCUxFQklfUFVUKGluKTsKK30KKworc3RhdGljIHZvaWQgZGVj
X21ha2VodWZmKGh1LCBodWZmbGVuLCBodWZmdmFscykKK3N0cnVjdCBkZWNfaHVmZnRibCAqaHU7
CitpbnQgKmh1ZmZsZW47Cit1bnNpZ25lZCBjaGFyICpodWZmdmFsczsKK3sKKwlpbnQgY29kZSwg
aywgaSwgaiwgZCwgeCwgYywgdjsKKwlmb3IgKGkgPSAwOyBpIDwgKDEgPDwgREVDQklUUyk7IGkr
KykKKwkJaHUtPmxsdmFsc1tpXSA9IDA7CisKKy8qCisgKiBsbHZhbHMgbGF5b3V0OgorICoKKyAq
IHZhbHVlIHYgYWxyZWFkeSBrbm93biwgcnVuIHIsIGJhY2t1cCB1IGJpdHM6CisgKiAgdnZ2dnZ2
dnZ2dnZ2dnZ2diAwMDAwIHJycnIgMSB1dXV1dXV1CisgKiB2YWx1ZSB1bmtub3duLCBzaXplIGIg
Yml0cywgcnVuIHIsIGJhY2t1cCB1IGJpdHM6CisgKiAgMDAwMDAwMDAwMDAwYmJiYiAwMDAwIHJy
cnIgMCB1dXV1dXV1CisgKiB2YWx1ZSBhbmQgc2l6ZSB1bmtub3duOgorICogIDAwMDAwMDAwMDAw
MDAwMDAgMDAwMCAwMDAwIDAgMDAwMDAwMAorICovCisJY29kZSA9IDA7CisJayA9IDA7CisJZm9y
IChpID0gMDsgaSA8IDE2OyBpKyssIGNvZGUgPDw9IDEpIHsJLyogc2l6ZXMgKi8KKwkJaHUtPnZh
bHB0cltpXSA9IGs7CisJCWZvciAoaiA9IDA7IGogPCBodWZmbGVuW2ldOyBqKyspIHsKKwkJCWh1
LT52YWxzW2tdID0gKmh1ZmZ2YWxzKys7CisJCQlpZiAoaSA8IERFQ0JJVFMpIHsKKwkJCQljID0g
Y29kZSA8PCAoREVDQklUUyAtIDEgLSBpKTsKKwkJCQl2ID0gaHUtPnZhbHNba10gJiAweDBmOwkv
KiBzaXplICovCisJCQkJZm9yIChkID0gMSA8PCAoREVDQklUUyAtIDEgLSBpKTsgLS1kID49IDA7
KSB7CisJCQkJCWlmICh2ICsgaSA8IERFQ0JJVFMpIHsJLyogYm90aCBmaXQgaW4gdGFibGUgKi8K
KwkJCQkJCXggPSBkID4+IChERUNCSVRTIC0gMSAtIHYgLQorCQkJCQkJCSAgaSk7CisJCQkJCQlp
ZiAodiAmJiB4IDwgKDEgPDwgKHYgLSAxKSkpCisJCQkJCQkJeCArPSAoLTEgPDwgdikgKyAxOwor
CQkJCQkJeCA9IHggPDwgMTYgfCAoaHUtPiB2YWxzW2tdICYgMHhmMCkgPDwgNCB8CisJCQkJCQkJ
KERFQ0JJVFMgLSAoaSArIDEgKyB2KSkgfCAxMjg7CisJCQkJCX0gZWxzZQorCQkJCQkJeCA9IHYg
PDwgMTYgfCAoaHUtPiB2YWxzW2tdICYgMHhmMCkgPDwgNCB8CisJCQkJCQkgICAgICAgIChERUNC
SVRTIC0gKGkgKyAxKSk7CisJCQkJCWh1LT5sbHZhbHNbYyB8IGRdID0geDsKKwkJCQl9CisJCQl9
CisJCQljb2RlKys7CisJCQlrKys7CisJCX0KKwkJaHUtPm1heGNvZGVbaV0gPSBjb2RlOworCX0K
KwlodS0+bWF4Y29kZVsxNl0gPSAweDIwMDAwOwkvKiBhbHdheXMgdGVybWluYXRlIGRlY29kZSAq
LworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKiAgICAgICAgICAgICBpZGN0ICAgICAg
ICAgICAgICAgICAgKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgT05FICgo
UFJFQylJRklYKDEuKSkKKyNkZWZpbmUgUzIgICgoUFJFQylJRklYKDAuMzgyNjgzNDMyKSkKKyNk
ZWZpbmUgQzIgICgoUFJFQylJRklYKDAuOTIzODc5NTMyKSkKKyNkZWZpbmUgQzQgICgoUFJFQylJ
RklYKDAuNzA3MTA2NzgxKSkKKworI2RlZmluZSBTMjIgKChQUkVDKUlGSVgoMiAqIDAuMzgyNjgz
NDMyKSkKKyNkZWZpbmUgQzIyICgoUFJFQylJRklYKDIgKiAwLjkyMzg3OTUzMikpCisjZGVmaW5l
IElDNCAoKFBSRUMpSUZJWCgxIC8gMC43MDcxMDY3ODEpKQorCisjZGVmaW5lIEMzSUMxICgoUFJF
QylJRklYKDAuODQ3NzU5MDY1KSkJLyogYzMvYzEgKi8KKyNkZWZpbmUgQzVJQzEgKChQUkVDKUlG
SVgoMC41NjY0NTQ0OTcpKQkvKiBjNS9jMSAqLworI2RlZmluZSBDN0lDMSAoKFBSRUMpSUZJWCgw
LjE5ODkxMjM2NykpCS8qIGM3L2MxICovCisKKyNkZWZpbmUgWFBQKGEsYikgKHQgPSBhICsgYiwg
YiA9IGEgLSBiLCBhID0gdCkKKyNkZWZpbmUgWE1QKGEsYikgKHQgPSBhIC0gYiwgYiA9IGEgKyBi
LCBhID0gdCkKKyNkZWZpbmUgWFBNKGEsYikgKHQgPSBhICsgYiwgYiA9IGIgLSBhLCBhID0gdCkK
KworI2RlZmluZSBST1QoYSxiLHMsYykgKAl0ID0gSU1VTFQoYSArIGIsIHMpLAlcCisJCQlhID0g
SU1VTFQoYSwgYyAtIHMpICsgdCwJXAorCQkJYiA9IElNVUxUKGIsIGMgKyBzKSAtIHQpCisKKyNk
ZWZpbmUgSURDVAkJXAorKAkJCVwKKyAgWFBQKHQwLCB0MSksCQlcCisgIFhNUCh0MiwgdDMpLAkJ
XAorICB0MiA9IElNVUxUKHQyLCBJQzQpIC0gdDMsCVwKKyAgWFBQKHQwLCB0MyksCQlcCisgIFhQ
UCh0MSwgdDIpLAkJXAorICBYTVAodDQsIHQ3KSwJCVwKKyAgWFBQKHQ1LCB0NiksCQlcCisgIFhN
UCh0NSwgdDcpLAkJXAorICB0NSA9IElNVUxUKHQ1LCBJQzQpLAlcCisgIFJPVCh0NCwgdDYsIFMy
MiwgQzIyKSxcCisgIHQ2IC09IHQ3LAkJXAorICB0NSAtPSB0NiwJCVwKKyAgdDQgLT0gdDUsCQlc
CisgIFhQUCh0MCwgdDcpLAkJXAorICBYUFAodDEsIHQ2KSwJCVwKKyAgWFBQKHQyLCB0NSksCQlc
CisgIFhQUCh0MywgdDQpCQlcCispCisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIHppZzJbNjRdID0g
eworCTAsIDIsIDMsIDksIDEwLCAyMCwgMjEsIDM1LAorCTE0LCAxNiwgMjUsIDMxLCAzOSwgNDYs
IDUwLCA1NywKKwk1LCA3LCAxMiwgMTgsIDIzLCAzMywgMzcsIDQ4LAorCTI3LCAyOSwgNDEsIDQ0
LCA1MiwgNTUsIDU5LCA2MiwKKwkxNSwgMjYsIDMwLCA0MCwgNDUsIDUxLCA1NiwgNTgsCisJMSwg
NCwgOCwgMTEsIDE5LCAyMiwgMzQsIDM2LAorCTI4LCA0MiwgNDMsIDUzLCA1NCwgNjAsIDYxLCA2
MywKKwk2LCAxMywgMTcsIDI0LCAzMiwgMzgsIDQ3LCA0OQorfTsKKwordm9pZCBpZGN0KGluLCBv
dXQsIHF1YW50LCBvZmYsIG1heCkKK2ludCAqaW47CitpbnQgKm91dDsKK1BSRUMgKnF1YW50Owor
UFJFQyBvZmY7CitpbnQgbWF4OworeworCVBSRUMgdDAsIHQxLCB0MiwgdDMsIHQ0LCB0NSwgdDYs
IHQ3LCB0OworCVBSRUMgdG1wWzY0XSwgKnRtcHA7CisJaW50IGksIGo7CisJdW5zaWduZWQgY2hh
ciAqemlnMnA7CisKKwl0MCA9IG9mZjsKKwlpZiAobWF4ID09IDEpIHsKKwkJdDAgKz0gaW5bMF0g
KiBxdWFudFswXTsKKwkJZm9yIChpID0gMDsgaSA8IDY0OyBpKyspCisJCQlvdXRbaV0gPSBJVE9J
TlQodDApOworCQlyZXR1cm47CisJfQorCXppZzJwID0gemlnMjsKKwl0bXBwID0gdG1wOworCWZv
ciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKKwkJaiA9ICp6aWcycCsrOworCQl0MCArPSBpbltqXSAq
IHF1YW50W2pdOworCQlqID0gKnppZzJwKys7CisJCXQ1ID0gaW5bal0gKiBxdWFudFtqXTsKKwkJ
aiA9ICp6aWcycCsrOworCQl0MiA9IGluW2pdICogcXVhbnRbal07CisJCWogPSAqemlnMnArKzsK
KwkJdDcgPSBpbltqXSAqIHF1YW50W2pdOworCQlqID0gKnppZzJwKys7CisJCXQxID0gaW5bal0g
KiBxdWFudFtqXTsKKwkJaiA9ICp6aWcycCsrOworCQl0NCA9IGluW2pdICogcXVhbnRbal07CisJ
CWogPSAqemlnMnArKzsKKwkJdDMgPSBpbltqXSAqIHF1YW50W2pdOworCQlqID0gKnppZzJwKys7
CisJCXQ2ID0gaW5bal0gKiBxdWFudFtqXTsKKwkJSURDVDsKKwkJdG1wcFswICogOF0gPSB0MDsK
KwkJdG1wcFsxICogOF0gPSB0MTsKKwkJdG1wcFsyICogOF0gPSB0MjsKKwkJdG1wcFszICogOF0g
PSB0MzsKKwkJdG1wcFs0ICogOF0gPSB0NDsKKwkJdG1wcFs1ICogOF0gPSB0NTsKKwkJdG1wcFs2
ICogOF0gPSB0NjsKKwkJdG1wcFs3ICogOF0gPSB0NzsKKwkJdG1wcCsrOworCQl0MCA9IDA7CisJ
fQorCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKKwkJdDAgPSB0bXBbOCAqIGkgKyAwXTsKKwkJ
dDEgPSB0bXBbOCAqIGkgKyAxXTsKKwkJdDIgPSB0bXBbOCAqIGkgKyAyXTsKKwkJdDMgPSB0bXBb
OCAqIGkgKyAzXTsKKwkJdDQgPSB0bXBbOCAqIGkgKyA0XTsKKwkJdDUgPSB0bXBbOCAqIGkgKyA1
XTsKKwkJdDYgPSB0bXBbOCAqIGkgKyA2XTsKKwkJdDcgPSB0bXBbOCAqIGkgKyA3XTsKKwkJSURD
VDsKKwkJb3V0WzggKiBpICsgMF0gPSBJVE9JTlQodDApOworCQlvdXRbOCAqIGkgKyAxXSA9IElU
T0lOVCh0MSk7CisJCW91dFs4ICogaSArIDJdID0gSVRPSU5UKHQyKTsKKwkJb3V0WzggKiBpICsg
M10gPSBJVE9JTlQodDMpOworCQlvdXRbOCAqIGkgKyA0XSA9IElUT0lOVCh0NCk7CisJCW91dFs4
ICogaSArIDVdID0gSVRPSU5UKHQ1KTsKKwkJb3V0WzggKiBpICsgNl0gPSBJVE9JTlQodDYpOwor
CQlvdXRbOCAqIGkgKyA3XSA9IElUT0lOVCh0Nyk7CisJfQorfQorCitzdGF0aWMgdW5zaWduZWQg
Y2hhciB6aWdbNjRdID0geworCTAsIDEsIDUsIDYsIDE0LCAxNSwgMjcsIDI4LAorCTIsIDQsIDcs
IDEzLCAxNiwgMjYsIDI5LCA0MiwKKwkzLCA4LCAxMiwgMTcsIDI1LCAzMCwgNDEsIDQzLAorCTks
IDExLCAxOCwgMjQsIDMxLCA0MCwgNDQsIDUzLAorCTEwLCAxOSwgMjMsIDMyLCAzOSwgNDUsIDUy
LCA1NCwKKwkyMCwgMjIsIDMzLCAzOCwgNDYsIDUxLCA1NSwgNjAsCisJMjEsIDM0LCAzNywgNDcs
IDUwLCA1NiwgNTksIDYxLAorCTM1LCAzNiwgNDgsIDQ5LCA1NywgNTgsIDYyLCA2MworfTsKKwor
c3RhdGljIFBSRUMgYWFpZGN0WzhdID0geworCUlGSVgoMC4zNTM1NTMzOTA2KSwgSUZJWCgwLjQ5
MDM5MjY0MDIpLAorCUlGSVgoMC40NjE5Mzk3NjYzKSwgSUZJWCgwLjQxNTczNDgwNjIpLAorCUlG
SVgoMC4zNTM1NTMzOTA2KSwgSUZJWCgwLjI3Nzc4NTExNjUpLAorCUlGSVgoMC4xOTEzNDE3MTYy
KSwgSUZJWCgwLjA5NzU0NTE2MTApCit9OworCisKK3N0YXRpYyB2b2lkIGlkY3RxdGFiKHFpbiwg
cW91dCkKK3Vuc2lnbmVkIGNoYXIgKnFpbjsKK1BSRUMgKnFvdXQ7Cit7CisJaW50IGksIGo7CisK
Kwlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQorCQlmb3IgKGogPSAwOyBqIDwgODsgaisrKQorCQkJ
cW91dFt6aWdbaSAqIDggKyBqXV0gPSBxaW5bemlnW2kgKiA4ICsgal1dICogCisJCQkgIAkJCUlN
VUxUKGFhaWRjdFtpXSwgYWFpZGN0W2pdKTsKK30KKworc3RhdGljIHZvaWQgc2NhbGVpZGN0cXRh
YihxLCBzYykKK1BSRUMgKnE7CitQUkVDIHNjOworeworCWludCBpOworCisJZm9yIChpID0gMDsg
aSA8IDY0OyBpKyspCisJCXFbaV0gPSBJTVVMVChxW2ldLCBzYyk7Cit9CisKKy8qKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwor
LyoqKioqKioqKioqKioqICAgICAgICAgIGNvbG9yIGRlY29kZXIgICAgICAgICAgICAqKioqKioq
KioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBST1VORAorCisvKgorICogWUNiQ3IgQ29s
b3IgdHJhbnNmb3JtYXRpb246CisgKgorICogeTowLi4yNTUgICBDYjotMTI4Li4xMjcgICBDcjot
MTI4Li4xMjcKKyAqCisgKiAgICAgIFIgPSBZICAgICAgICAgICAgICAgICsgMS40MDIwMCAqIENy
CisgKiAgICAgIEcgPSBZIC0gMC4zNDQxNCAqIENiIC0gMC43MTQxNCAqIENyCisgKiAgICAgIEIg
PSBZICsgMS43NzIwMCAqIENiCisgKgorICogPT4KKyAqICAgICAgQ3IgKj0gMS40MDIwMDsKKyAq
ICAgICAgQ2IgKj0gMS43NzIwMDsKKyAqICAgICAgQ2cgPSAwLjE5NDIxICogQ2IgKyAuNTA5Mzcg
KiBDcjsKKyAqICAgICAgUiA9IFkgKyBDcjsKKyAqICAgICAgRyA9IFkgLSBDZzsKKyAqICAgICAg
QiA9IFkgKyBDYjsKKyAqCisgKiA9PgorICogICAgICBDZyA9ICg1MCAqIENiICsgMTMwICogQ3Ig
KyAxMjgpID4+IDg7CisgKi8KKworc3RhdGljIHZvaWQgaW5pdGNvbChxKQorUFJFQyBxW11bNjRd
OworeworCXNjYWxlaWRjdHF0YWIocVsxXSwgSUZJWCgxLjc3MjAwKSk7CisJc2NhbGVpZGN0cXRh
YihxWzJdLCBJRklYKDEuNDAyMDApKTsKK30KKworLyogVGhpcyBpcyBvcHRpbWl6ZWQgZm9yIHRo
ZSBzdHVwaWQgc3VuIFNVTldzcHJvIGNvbXBpbGVyLiAqLworI2RlZmluZSBTVE9SRUNMQU1QKGEs
eCkJCQkJXAorKAkJCQkJCVwKKyAgKGEpID0gKHgpLAkJCQkJXAorICAodW5zaWduZWQgaW50KSh4
KSA+PSAyNTYgPyAJCQlcCisgICAgKChhKSA9ICh4KSA8IDAgPyAwIDogMjU1KQkJCVwKKyAgOgkJ
CQkJCVwKKyAgICAwCQkJCQkJXAorKQorCisjZGVmaW5lIENMQU1QKHgpICgodW5zaWduZWQgaW50
KSh4KSA+PSAyNTYgPyAoKHgpIDwgMCA/IDAgOiAyNTUpIDogKHgpKQorCisjaWZkZWYgUk9VTkQK
KworI2RlZmluZSBDQkNSQ0coeWluLCB4aW4pCQkJXAorKAkJCQkJCVwKKyAgY2IgPSBvdXRjWzAg
K3lpbio4K3hpbl0sCQkJXAorICBjciA9IG91dGNbNjQreWluKjgreGluXSwJCQlcCisgIGNnID0g
KDUwICogY2IgKyAxMzAgKiBjciArIDEyOCkgPj4gOAkJXAorKQorCisjZWxzZQorCisjZGVmaW5l
IENCQ1JDRyh5aW4sIHhpbikJCQlcCisoCQkJCQkJXAorICBjYiA9IG91dGNbMCAreWluKjgreGlu
XSwJCQlcCisgIGNyID0gb3V0Y1s2NCt5aW4qOCt4aW5dLAkJCVwKKyAgY2cgPSAoMyAqIGNiICsg
OCAqIGNyKSA+PiA0CQkJXAorKQorCisjZW5kaWYKKworI2RlZmluZSBQSUMoeWluLCB4aW4sIHAs
IHhvdXQpCQkJXAorKAkJCQkJCVwKKyAgeSA9IG91dHlbKHlpbikgKiA4ICsgeGluXSwJCQlcCisg
IFNUT1JFQ0xBTVAocFsoeG91dCkgKiAzICsgMF0sIHkgKyBjciksCVwKKyAgU1RPUkVDTEFNUChw
Wyh4b3V0KSAqIDMgKyAxXSwgeSAtIGNnKSwJXAorICBTVE9SRUNMQU1QKHBbKHhvdXQpICogMyAr
IDJdLCB5ICsgY2IpCQlcCispCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU4KKyNkZWZpbmUgUElD
XzE2KHlpbiwgeGluLCBwLCB4b3V0LCBhZGQpCQkgXAorKCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgeSA9IG91dHlbKHlpbikgKiA4ICsgeGluXSwg
ICAgICAgICAgICAgICAgICAgICBcCisgIHkgPSAoKENMQU1QKHkgKyBjciArIGFkZCoyKzEpICYg
MHhmOCkgPDwgIDgpIHwgXAorICAgICAgKChDTEFNUCh5IC0gY2cgKyBhZGQgICAgKSAmIDB4ZmMp
IDw8ICAzKSB8IFwKKyAgICAgICgoQ0xBTVAoeSArIGNiICsgYWRkKjIrMSkgICAgICAgKSA+PiAg
MyksICBcCisgIHBbKHhvdXQpICogMiArIDBdID0geSAmIDB4ZmYsICAgICAgICAgICAgICAgICAg
XAorICBwWyh4b3V0KSAqIDIgKyAxXSA9IHkgPj4gOCAgICAgICAgICAgICAgICAgICAgIFwKKykK
KyNlbHNlCisjaWZkZWYgQ09ORklHX1BQQworI2RlZmluZSBQSUNfMTYoeWluLCB4aW4sIHAsIHhv
dXQsIGFkZCkJCSBcCisoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICB5ID0gb3V0eVsoeWluKSAqIDggKyB4aW5dLCAgICAgICAgICAgICAgICAgICAg
IFwKKyAgeSA9ICgoQ0xBTVAoeSArIGNyICsgYWRkKjIrMSkgJiAweGY4KSA8PCAgNykgfCBcCisg
ICAgICAoKENMQU1QKHkgLSBjZyArIGFkZCoyKzEpICYgMHhmOCkgPDwgIDIpIHwgXAorICAgICAg
KChDTEFNUCh5ICsgY2IgKyBhZGQqMisxKSAgICAgICApID4+ICAzKSwgIFwKKyAgcFsoeG91dCkg
KiAyICsgMF0gPSB5ID4+IDgsICAgICAgICAgICAgICAgICAgICBcCisgIHBbKHhvdXQpICogMiAr
IDFdID0geSAmIDB4ZmYgICAgICAgICAgICAgICAgICAgXAorKQorI2Vsc2UKKyNkZWZpbmUgUElD
XzE2KHlpbiwgeGluLCBwLCB4b3V0LCBhZGQpCSAJIFwKKyggICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHkgPSBvdXR5Wyh5aW4pICogOCArIHhpbl0s
ICAgICAgICAgICAgICAgICAgICAgXAorICB5ID0gKChDTEFNUCh5ICsgY3IgKyBhZGQqMisxKSAm
IDB4ZjgpIDw8ICA4KSB8IFwKKyAgICAgICgoQ0xBTVAoeSAtIGNnICsgYWRkICAgICkgJiAweGZj
KSA8PCAgMykgfCBcCisgICAgICAoKENMQU1QKHkgKyBjYiArIGFkZCoyKzEpICAgICAgICkgPj4g
IDMpLCAgXAorICBwWyh4b3V0KSAqIDIgKyAwXSA9IHkgPj4gOCwgICAgICAgICAgICAgICAgICAg
IFwKKyAgcFsoeG91dCkgKiAyICsgMV0gPSB5ICYgMHhmZiAgICAgICAgICAgICAgICAgICBcCisp
CisjZW5kaWYKKyNlbmRpZgorCisjZGVmaW5lIFBJQzIyMTExMSh4aW4pCQkJCQkJXAorKAkJCQkJ
CQkJXAorICBDQkNSQ0coMCwgeGluKSwJCQkJCQlcCisgIFBJQyh4aW4gLyA0ICogOCArIDAsICh4
aW4gJiAzKSAqIDIgKyAwLCBwaWMwLCB4aW4gKiAyICsgMCksCVwKKyAgUElDKHhpbiAvIDQgKiA4
ICsgMCwgKHhpbiAmIDMpICogMiArIDEsIHBpYzAsIHhpbiAqIDIgKyAxKSwJXAorICBQSUMoeGlu
IC8gNCAqIDggKyAxLCAoeGluICYgMykgKiAyICsgMCwgcGljMSwgeGluICogMiArIDApLAlcCisg
IFBJQyh4aW4gLyA0ICogOCArIDEsICh4aW4gJiAzKSAqIDIgKyAxLCBwaWMxLCB4aW4gKiAyICsg
MSkJXAorKQorCisjZGVmaW5lIFBJQzIyMTExMV8xNih4aW4pICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisoICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCVwKKyAgQ0JDUkNHKDAsIHhpbiks
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJXAorICBQSUNf
MTYoeGluIC8gNCAqIDggKyAwLCAoeGluICYgMykgKiAyICsgMCwgcGljMCwgeGluICogMiArIDAs
IDMpLCAgICAgXAorICBQSUNfMTYoeGluIC8gNCAqIDggKyAwLCAoeGluICYgMykgKiAyICsgMSwg
cGljMCwgeGluICogMiArIDEsIDApLCAgICAgXAorICBQSUNfMTYoeGluIC8gNCAqIDggKyAxLCAo
eGluICYgMykgKiAyICsgMCwgcGljMSwgeGluICogMiArIDAsIDEpLCAgICAgXAorICBQSUNfMTYo
eGluIC8gNCAqIDggKyAxLCAoeGluICYgMykgKiAyICsgMSwgcGljMSwgeGluICogMiArIDEsIDIp
ICAgICAgXAorKQorCitzdGF0aWMgdm9pZCBjb2wyMjExMTEob3V0LCBwaWMsIHdpZHRoKQoraW50
ICpvdXQ7Cit1bnNpZ25lZCBjaGFyICpwaWM7CitpbnQgd2lkdGg7Cit7CisJaW50IGksIGosIGs7
CisJdW5zaWduZWQgY2hhciAqcGljMCwgKnBpYzE7CisJaW50ICpvdXR5LCAqb3V0YzsKKwlpbnQg
Y3IsIGNnLCBjYiwgeTsKKworCXBpYzAgPSBwaWM7CisJcGljMSA9IHBpYyArIHdpZHRoOworCW91
dHkgPSBvdXQ7CisJb3V0YyA9IG91dCArIDY0ICogNDsKKwlmb3IgKGkgPSAyOyBpID4gMDsgaS0t
KSB7CisJCWZvciAoaiA9IDQ7IGogPiAwOyBqLS0pIHsKKwkJCWZvciAoayA9IDA7IGsgPCA4OyBr
KyspIHsKKwkJCQlQSUMyMjExMTEoayk7CisJCQl9CisJCQlvdXRjICs9IDg7CisJCQlvdXR5ICs9
IDE2OworCQkJcGljMCArPSAyICogd2lkdGg7CisJCQlwaWMxICs9IDIgKiB3aWR0aDsKKwkJfQor
CQlvdXR5ICs9IDY0ICogMiAtIDE2ICogNDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGNvbDIyMTEx
MV8xNihvdXQsIHBpYywgd2lkdGgpCitpbnQgKm91dDsKK3Vuc2lnbmVkIGNoYXIgKnBpYzsKK2lu
dCB3aWR0aDsKK3sKKwlpbnQgaSwgaiwgazsKKwl1bnNpZ25lZCBjaGFyICpwaWMwLCAqcGljMTsK
KwlpbnQgKm91dHksICpvdXRjOworCWludCBjciwgY2csIGNiLCB5OworCisJcGljMCA9IHBpYzsK
KwlwaWMxID0gcGljICsgd2lkdGg7CisJb3V0eSA9IG91dDsKKwlvdXRjID0gb3V0ICsgNjQgKiA0
OworCWZvciAoaSA9IDI7IGkgPiAwOyBpLS0pIHsKKwkJZm9yIChqID0gNDsgaiA+IDA7IGotLSkg
eworCQkJZm9yIChrID0gMDsgayA8IDg7IGsrKykgeworCQkJICAgIFBJQzIyMTExMV8xNihrKTsK
KwkJCX0KKwkJCW91dGMgKz0gODsKKwkJCW91dHkgKz0gMTY7CisJCQlwaWMwICs9IDIgKiB3aWR0
aDsKKwkJCXBpYzEgKz0gMiAqIHdpZHRoOworCQl9CisJCW91dHkgKz0gNjQgKiAyIC0gMTYgKiA0
OworCX0KK30KZGlmZiAtdXJ3TiBsaW51eC0yLjYuMzUvZHJpdmVycy92aWRlby9ib290c3BsYXNo
L2RlY29kZS1qcGcuaCBsaW51eC0yLjYuMzUtcGF0Y2hlZC9kcml2ZXJzL3ZpZGVvL2Jvb3RzcGxh
c2gvZGVjb2RlLWpwZy5oCi0tLSBsaW51eC0yLjYuMzUvZHJpdmVycy92aWRlby9ib290c3BsYXNo
L2RlY29kZS1qcGcuaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgbGlu
dXgtMi42LjM1LXBhdGNoZWQvZHJpdmVycy92aWRlby9ib290c3BsYXNoL2RlY29kZS1qcGcuaAky
MDEwLTA4LTAyIDE3OjM2OjU2LjQ2OTM4MTIyNCArMDIwMApAQCAtMCwwICsxLDM1IEBACisvKgor
ICogICAgbGludXgvZHJpdmVycy92aWRlby9ib290c3BsYXNoL2RlY29kZS1qcGcuaCAtIGEgdGlu
eSBqcGVnIGRlY29kZXIuCisgKgorICogICAgICAodykgQXVndXN0IDIwMDEgYnkgTWljaGFlbCBT
Y2hyb2VkZXIsIDxtbHNAc3VzZS5kZT4KKyAqLworCisjaWZuZGVmIF9fREVDT0RFX0pQR19ICisj
ZGVmaW5lIF9fREVDT0RFX0pQR19ICisKKyNkZWZpbmUgRVJSX05PX1NPSSAxCisjZGVmaW5lIEVS
Ul9OT1RfOEJJVCAyCisjZGVmaW5lIEVSUl9IRUlHSFRfTUlTTUFUQ0ggMworI2RlZmluZSBFUlJf
V0lEVEhfTUlTTUFUQ0ggNAorI2RlZmluZSBFUlJfQkFEX1dJRFRIX09SX0hFSUdIVCA1CisjZGVm
aW5lIEVSUl9UT09fTUFOWV9DT01QUFMgNgorI2RlZmluZSBFUlJfSUxMRUdBTF9IViA3CisjZGVm
aW5lIEVSUl9RVUFOVF9UQUJMRV9TRUxFQ1RPUiA4CisjZGVmaW5lIEVSUl9OT1RfWUNCQ1JfMjIx
MTExIDkKKyNkZWZpbmUgRVJSX1VOS05PV05fQ0lEX0lOX1NDQU4gMTAKKyNkZWZpbmUgRVJSX05P
VF9TRVFVRU5USUFMX0RDVCAxMQorI2RlZmluZSBFUlJfV1JPTkdfTUFSS0VSIDEyCisjZGVmaW5l
IEVSUl9OT19FT0kgMTMKKyNkZWZpbmUgRVJSX0JBRF9UQUJMRVMgMTQKKyNkZWZpbmUgRVJSX0RF
UFRIX01JU01BVENIIDE1CisKK3N0cnVjdCBqcGVnX2RlY2RhdGEgeworCWludCBkY3RzWzYgKiA2
NCArIDE2XTsKKwlpbnQgb3V0WzY0ICogNl07CisJaW50IGRxdWFudFszXVs2NF07Cit9OworCitl
eHRlcm4gaW50IGpwZWdfZGVjb2RlKHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgY2hhciAqLCBp
bnQsIGludCwgaW50LCBzdHJ1Y3QganBlZ19kZWNkYXRhICopOworZXh0ZXJuIGludCBqcGVnX2No
ZWNrX3NpemUodW5zaWduZWQgY2hhciAqLCBpbnQsIGludCk7CisKKyNlbmRpZgpkaWZmIC11cndO
IGxpbnV4LTIuNi4zNS9kcml2ZXJzL3ZpZGVvL2Jvb3RzcGxhc2gvS2NvbmZpZyBsaW51eC0yLjYu
MzUtcGF0Y2hlZC9kcml2ZXJzL3ZpZGVvL2Jvb3RzcGxhc2gvS2NvbmZpZwotLS0gbGludXgtMi42
LjM1L2RyaXZlcnMvdmlkZW8vYm9vdHNwbGFzaC9LY29uZmlnCTE5NzAtMDEtMDEgMDE6MDA6MDAu
MDAwMDAwMDAwICswMTAwCisrKyBsaW51eC0yLjYuMzUtcGF0Y2hlZC9kcml2ZXJzL3ZpZGVvL2Jv
b3RzcGxhc2gvS2NvbmZpZwkyMDEwLTA4LTAyIDE3OjM2OjU2LjQ2OTM4MTIyNCArMDIwMApAQCAt
MCwwICsxLDE3IEBACisjCisjIEJvb3RzcGxhc2ggY29uZmlndXJhdGlvbgorIworCittZW51ICJC
b290c3BsYXNoIGNvbmZpZ3VyYXRpb24iCisKK2NvbmZpZyBCT09UU1BMQVNICisJYm9vbCAiQm9v
dHVwIHNwbGFzaCBzY3JlZW4iCisJZGVwZW5kcyBvbiBGUkFNRUJVRkZFUl9DT05TT0xFICYmIEZC
X1ZFU0EKKwlkZWZhdWx0IG4KKyAgICAgICAgLS0taGVscC0tLQorICAgICAgICAgIFRoaXMgb3B0
aW9uIGVuYWJsZXMgdGhlIExpbnV4IGJvb3RzcGxhc2ggc2NyZWVuLiBGb3IgbW9yZSAKKyAgICAg
ICAgICBpbmZvcm1hdGlvbiBvbiB0aGUgYm9vdHNwbGFzaCBzY3JlZW4gaGF2ZSBhIGxvb2sgYXQg
CisgICAgICAgICAgaHR0cDovL3d3dy5ib290c3BsYXNoLm9yZy8uCisgICAgICAgICAgSWYgeW91
IGFyZSB1bnN1cmUsIHNheSBOCitlbmRtZW51CisKZGlmZiAtdXJ3TiBsaW51eC0yLjYuMzUvZHJp
dmVycy92aWRlby9ib290c3BsYXNoL01ha2VmaWxlIGxpbnV4LTIuNi4zNS1wYXRjaGVkL2RyaXZl
cnMvdmlkZW8vYm9vdHNwbGFzaC9NYWtlZmlsZQotLS0gbGludXgtMi42LjM1L2RyaXZlcnMvdmlk
ZW8vYm9vdHNwbGFzaC9NYWtlZmlsZQkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEw
MAorKysgbGludXgtMi42LjM1LXBhdGNoZWQvZHJpdmVycy92aWRlby9ib290c3BsYXNoL01ha2Vm
aWxlCTIwMTAtMDgtMDIgMTc6MzY6NTYuNDY5MzgxMjI0ICswMjAwCkBAIC0wLDAgKzEsNSBAQAor
IyBNYWtlZmlsZSBmb3IgdGhlIExpbnV4IGJvb3RzcGxhc2gKKworb2JqLSQoQ09ORklHX0JPT1RT
UExBU0gpCQkrPSBib290c3BsYXNoLm8KK29iai0kKENPTkZJR19CT09UU1BMQVNIKQkJKz0gZGVj
b2RlLWpwZy5vCitvYmotJChDT05GSUdfQk9PVFNQTEFTSCkJCSs9IHJlbmRlci5vCmRpZmYgLXVy
d04gbGludXgtMi42LjM1L2RyaXZlcnMvdmlkZW8vYm9vdHNwbGFzaC9yZW5kZXIuYyBsaW51eC0y
LjYuMzUtcGF0Y2hlZC9kcml2ZXJzL3ZpZGVvL2Jvb3RzcGxhc2gvcmVuZGVyLmMKLS0tIGxpbnV4
LTIuNi4zNS9kcml2ZXJzL3ZpZGVvL2Jvb3RzcGxhc2gvcmVuZGVyLmMJMTk3MC0wMS0wMSAwMTow
MDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIGxpbnV4LTIuNi4zNS1wYXRjaGVkL2RyaXZlcnMvdmlk
ZW8vYm9vdHNwbGFzaC9yZW5kZXIuYwkyMDEwLTA4LTAyIDE3OjM2OjU2LjQ2OTM4MTIyNCArMDIw
MApAQCAtMCwwICsxLDMxNSBAQAorLyogCisgKiAgICBsaW51eC9kcml2ZXJzL3ZpZGVvL2Jvb3Rz
cGxhc2gvcmVuZGVyLmMgLSBzcGxhc2ggc2NyZWVuIHJlbmRlciBmdW5jdGlvbnMuCisgKi8KKwor
I2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5j
bHVkZSA8bGludXgvZmIuaD4KKyNpbmNsdWRlIDxsaW51eC92dF9rZXJuLmg+CisjaW5jbHVkZSA8
YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKworI2luY2x1ZGUgIi4uL2NvbnNv
bGUvZmJjb24uaCIKKyNpbmNsdWRlICJib290c3BsYXNoLmgiCisKK3ZvaWQgc3BsYXNoX3B1dGNz
KHN0cnVjdCBzcGxhc2hfZGF0YSAqc2QsIHN0cnVjdCB2Y19kYXRhICp2Yywgc3RydWN0IGZiX2lu
Zm8gKmluZm8sCisJCQljb25zdCB1bnNpZ25lZCBzaG9ydCAqcywgaW50IGNvdW50LCBpbnQgeXBv
cywgaW50IHhwb3MpCit7CisJdW5zaWduZWQgc2hvcnQgY2hhcm1hc2sgPSB2Yy0+dmNfaGlfZm9u
dF9tYXNrID8gMHgxZmYgOiAweGZmOworCWludCBiZ3NoaWZ0ID0gKHZjLT52Y19oaV9mb250X21h
c2spID8gMTMgOiAxMjsKKwlpbnQgZmdzaGlmdCA9ICh2Yy0+dmNfaGlfZm9udF9tYXNrKSA/IDkg
OiA4OworCXU4ICpzcmM7CisgICAgICAgIHU4ICpkc3QsICpzcGxhc2hzcmM7CisJdW5zaWduZWQg
aW50IGQsIHgsIHk7CisJdTMyIGRkLCBmZ3gsIGJneDsKKwl1MTYgYyA9IHNjcl9yZWFkdyhzKTsK
KworCWludCBmZ19jb2xvciwgYmdfY29sb3IsIHRyYW5zcGFyZW50OworICAgICAgICBmZ19jb2xv
ciA9IGF0dHJfZmdjb2woZmdzaGlmdCwgYyk7CisgICAgICAgIGJnX2NvbG9yID0gYXR0cl9iZ2Nv
bChiZ3NoaWZ0LCBjKTsKKwl0cmFuc3BhcmVudCA9IHNkLT5zcGxhc2hfY29sb3IgPT0gYmdfY29s
b3I7CisJeHBvcyA9IHhwb3MgKiB2Yy0+dmNfZm9udC53aWR0aCArIHNkLT5zcGxhc2hfdGV4dF94
bzsKKwl5cG9zID0geXBvcyAqIHZjLT52Y19mb250LmhlaWdodCArIHNkLT5zcGxhc2hfdGV4dF95
bzsKKyAgICAgICAgc3BsYXNoc3JjID0gKHU4ICopKGluZm8tPnNwbGFzaF9waWMgKyB5cG9zICog
aW5mby0+c3BsYXNoX2J5dGVzICsgeHBvcyAqIDIpOworICAgICAgICBkc3QgPSAodTggKikoaW5m
by0+c2NyZWVuX2Jhc2UgKyB5cG9zICogaW5mby0+Zml4LmxpbmVfbGVuZ3RoICsgeHBvcyAqIDIp
OworCisJZmd4ID0gKCh1MzIgKilpbmZvLT5wc2V1ZG9fcGFsZXR0ZSlbZmdfY29sb3JdOworCWlm
ICh0cmFuc3BhcmVudCAmJiBzZC0+c3BsYXNoX2NvbG9yID09IDE1KSB7CisJICAgIGlmIChmZ3gg
PT0gMHhmZmVhKQorCQlmZ3ggPSAweGZlNGE7CisJICAgIGVsc2UgaWYgKGZneCA9PSAweDU3ZWEp
CisJCWZneCA9IDB4MDU0MDsKKwkgICAgZWxzZSBpZiAoZmd4ID09IDB4ZmZmZikKKwkJZmd4ID0g
MHg1MmFhOworCX0KKwliZ3ggPSAoKHUzMiAqKWluZm8tPnBzZXVkb19wYWxldHRlKVtiZ19jb2xv
cl07CisJZCA9IDA7CisKKwl3aGlsZSAoY291bnQtLSkgeworCSAgICBjID0gc2NyX3JlYWR3KHMr
Kyk7CisJICAgIHNyYyA9IHZjLT52Y19mb250LmRhdGEgKyAoYyAmIGNoYXJtYXNrKSAqIHZjLT52
Y19mb250LmhlaWdodCAqICgodmMtPnZjX2ZvbnQud2lkdGggKyA3KSA+PiAzKTsKKworCSAgICBm
b3IgKHkgPSAwOyB5IDwgdmMtPnZjX2ZvbnQuaGVpZ2h0OyB5KyspIHsKKwkJZm9yICh4ID0gMDsg
eCA8IHZjLT52Y19mb250LndpZHRoOyB4ICs9IDIpIHsKKwkJICAgIGlmICgoeCAmIDcpID09IDAp
CisJCQlkID0gKnNyYysrOworCQkgICAgaWYgKGQgJiAweDgwKQorCQkJZGQgPSBmZ3g7CisJCSAg
ICBlbHNlCisJCQlkZCA9IHRyYW5zcGFyZW50ID8gKih1MTYgKilzcGxhc2hzcmMgOiBiZ3g7CisJ
CSAgICBzcGxhc2hzcmMgKz0gMjsKKwkJICAgIGlmIChkICYgMHg0MCkKKwkJCWRkIHw9IGZneCA8
PCAxNjsKKwkJICAgIGVsc2UKKwkJCWRkIHw9ICh0cmFuc3BhcmVudCA/ICoodTE2ICopc3BsYXNo
c3JjIDogYmd4KSA8PCAxNjsKKwkJICAgIHNwbGFzaHNyYyArPSAyOworCQkgICAgZCA8PD0gMjsK
KwkJICAgIGZiX3dyaXRlbChkZCwgZHN0KTsKKwkJICAgIGRzdCArPSA0OworCQl9CisJCWRzdCAr
PSBpbmZvLT5maXgubGluZV9sZW5ndGggLSB2Yy0+dmNfZm9udC53aWR0aCAqIDI7CisJCXNwbGFz
aHNyYyArPSBpbmZvLT5zcGxhc2hfYnl0ZXMgLSB2Yy0+dmNfZm9udC53aWR0aCAqIDI7CisJICAg
IH0KKwkgICAgZHN0IC09IGluZm8tPmZpeC5saW5lX2xlbmd0aCAqIHZjLT52Y19mb250LmhlaWdo
dCAtIHZjLT52Y19mb250LndpZHRoICogMjsKKwkgICAgc3BsYXNoc3JjIC09IGluZm8tPnNwbGFz
aF9ieXRlcyAqIHZjLT52Y19mb250LmhlaWdodCAtIHZjLT52Y19mb250LndpZHRoICogMjsKKwl9
Cit9CisKK3N0YXRpYyB2b2lkIHNwbGFzaF9yZW5kZXJjKHN0cnVjdCBzcGxhc2hfZGF0YSAqc2Qs
IHN0cnVjdCBmYl9pbmZvICppbmZvLCBpbnQgZmdfY29sb3IsIGludCBiZ19jb2xvciwgdTggKnNy
YywgaW50IHlwb3MsIGludCB4cG9zLCBpbnQgaGVpZ2h0LCBpbnQgd2lkdGgpCit7CisJaW50IHRy
YW5zcGFyZW50ID0gc2QtPnNwbGFzaF9jb2xvciA9PSBiZ19jb2xvcjsKKwl1MzIgZGQsIGZneCwg
Ymd4OworCXU4ICpkc3QsICpzcGxhc2hzcmM7CisJdW5zaWduZWQgaW50IGQsIHgsIHk7CisKKwlz
cGxhc2hzcmMgPSAodTggKikoaW5mby0+c3BsYXNoX3BpYyArIHlwb3MgKiBpbmZvLT5zcGxhc2hf
Ynl0ZXMgKyB4cG9zICogMik7CisJZHN0ID0gKHU4ICopKGluZm8tPnNjcmVlbl9iYXNlICsgeXBv
cyAqIGluZm8tPmZpeC5saW5lX2xlbmd0aCArIHhwb3MgKiAyKTsKKwlmZ3ggPSAoKHUzMiAqKWlu
Zm8tPnBzZXVkb19wYWxldHRlKVtmZ19jb2xvcl07CisJaWYgKHRyYW5zcGFyZW50ICYmIHNkLT5z
cGxhc2hfY29sb3IgPT0gMTUpIHsKKwkgICAgaWYgKGZneCA9PSAweGZmZWEpCisJCWZneCA9IDB4
ZmU0YTsKKwkgICAgZWxzZSBpZiAoZmd4ID09IDB4NTdlYSkKKwkJZmd4ID0gMHgwNTQwOworCSAg
ICBlbHNlIGlmIChmZ3ggPT0gMHhmZmZmKQorCQlmZ3ggPSAweDUyYWE7CisJfQorCWJneCA9ICgo
dTMyICopaW5mby0+cHNldWRvX3BhbGV0dGUpW2JnX2NvbG9yXTsKKwlkID0gMDsKKwlmb3IgKHkg
PSAwOyB5IDwgaGVpZ2h0OyB5KyspIHsKKwkgICAgZm9yICh4ID0gMDsgeCA8IHdpZHRoOyB4ICs9
IDIpIHsKKwkJaWYgKCh4ICYgNykgPT0gMCkKKwkJICAgIGQgPSAqc3JjKys7CisJCWlmIChkICYg
MHg4MCkKKwkJICAgIGRkID0gZmd4OworCQllbHNlCisJCSAgICBkZCA9IHRyYW5zcGFyZW50ID8g
Kih1MTYgKilzcGxhc2hzcmMgOiBiZ3g7CisJCXNwbGFzaHNyYyArPSAyOworCQlpZiAoZCAmIDB4
NDApCisJCSAgICBkZCB8PSBmZ3ggPDwgMTY7CisJCWVsc2UKKwkJICAgIGRkIHw9ICh0cmFuc3Bh
cmVudCA/ICoodTE2ICopc3BsYXNoc3JjIDogYmd4KSA8PCAxNjsKKwkJc3BsYXNoc3JjICs9IDI7
CisJCWQgPDw9IDI7CisJCWZiX3dyaXRlbChkZCwgZHN0KTsKKwkJZHN0ICs9IDQ7CisJICAgIH0K
KwkgICAgZHN0ICs9IGluZm8tPmZpeC5saW5lX2xlbmd0aCAtIHdpZHRoICogMjsKKwkgICAgc3Bs
YXNoc3JjICs9IGluZm8tPnNwbGFzaF9ieXRlcyAtIHdpZHRoICogMjsKKwl9Cit9CisKK3ZvaWQg
c3BsYXNoX3B1dGMoc3RydWN0IHNwbGFzaF9kYXRhICpzZCwgc3RydWN0IHZjX2RhdGEgKnZjLCBz
dHJ1Y3QgZmJfaW5mbyAqaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICBpbnQgYywgaW50IHlw
b3MsIGludCB4cG9zKQoreworCXVuc2lnbmVkIHNob3J0IGNoYXJtYXNrID0gdmMtPnZjX2hpX2Zv
bnRfbWFzayA/IDB4MWZmIDogMHhmZjsKKwlpbnQgYmdzaGlmdCA9ICh2Yy0+dmNfaGlfZm9udF9t
YXNrKSA/IDEzIDogMTI7CisJaW50IGZnc2hpZnQgPSAodmMtPnZjX2hpX2ZvbnRfbWFzaykgPyA5
IDogODsKKwl1OCAqc3JjID0gdmMtPnZjX2ZvbnQuZGF0YSArIChjICYgY2hhcm1hc2spICogdmMt
PnZjX2ZvbnQuaGVpZ2h0ICogKCh2Yy0+dmNfZm9udC53aWR0aCArIDcpID4+IDMpOworCXhwb3Mg
PSB4cG9zICogdmMtPnZjX2ZvbnQud2lkdGggKyBzZC0+c3BsYXNoX3RleHRfeG87CisJeXBvcyA9
IHlwb3MgKiB2Yy0+dmNfZm9udC5oZWlnaHQgKyBzZC0+c3BsYXNoX3RleHRfeW87CisJc3BsYXNo
X3JlbmRlcmMoc2QsIGluZm8sIGF0dHJfZmdjb2woZmdzaGlmdCwgYyksIGF0dHJfYmdjb2woYmdz
aGlmdCwgYyksIHNyYywgeXBvcywgeHBvcywgdmMtPnZjX2ZvbnQuaGVpZ2h0LCB2Yy0+dmNfZm9u
dC53aWR0aCk7Cit9CisKK3ZvaWQgc3BsYXNoY29weSh1OCAqZHN0LCB1OCAqc3JjLCBpbnQgaGVp
Z2h0LCBpbnQgd2lkdGgsIGludCBkc3RieXRlcywgaW50IHNyY2J5dGVzKQoreworCWludCBpOwor
CisJd2hpbGUgKGhlaWdodC0tID4gMCkgeworCSAgICB1MzIgKnAgPSAodTMyICopZHN0OworCSAg
ICB1MzIgKnEgPSAodTMyICopc3JjOworCSAgICBmb3IgKGk9MDsgaSA8IHdpZHRoLzQ7IGkrKykg
eworCQlmYl93cml0ZWwoKnErKyxwKyspOworCQlmYl93cml0ZWwoKnErKyxwKyspOworCSAgICB9
CisJICAgIGlmICh3aWR0aCAmIDIpCisJCWZiX3dyaXRlbCgqcSsrLHArKyk7CisJICAgIGlmICh3
aWR0aCAmIDEpCisJCWZiX3dyaXRldygqKHUxNiopcSwodTE2KilwKTsKKwkgICAgZHN0ICs9IGRz
dGJ5dGVzOworCSAgICBzcmMgKz0gc3JjYnl0ZXM7CisJfQorfQorCitzdGF0aWMgdm9pZCBzcGxh
c2hzZXQodTggKmRzdCwgaW50IGhlaWdodCwgaW50IHdpZHRoLCBpbnQgZHN0Ynl0ZXMsIHUzMiBi
Z3gpIHsKKwlpbnQgaTsKKworCWJneCB8PSBiZ3ggPDwgMTY7CisJd2hpbGUgKGhlaWdodC0tID4g
MCkgeworCSAgICB1MzIgKnAgPSAodTMyICopZHN0OworCSAgICBmb3IgKGk9MDsgaSA8IHdpZHRo
LzQ7IGkrKykgeworCQlmYl93cml0ZWwoYmd4LHArKyk7CisJCWZiX3dyaXRlbChiZ3gscCsrKTsK
KwkgICAgfQorCSAgICBpZiAod2lkdGggJiAyKQorCQlmYl93cml0ZWwoYmd4LHArKyk7CisJICAg
IGlmICh3aWR0aCAmIDEpCisJCWZiX3dyaXRldyhiZ3gsKHUxNiopcCk7CisJICAgIGRzdCArPSBk
c3RieXRlczsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNwbGFzaGZpbGwoc3RydWN0IGZiX2luZm8g
KmluZm8sIGludCBzeSwgaW50IHN4LCBpbnQgaGVpZ2h0LCBpbnQgd2lkdGgpIHsKKwlzcGxhc2hj
b3B5KCh1OCAqKShpbmZvLT5zY3JlZW5fYmFzZSArIHN5ICogaW5mby0+Zml4LmxpbmVfbGVuZ3Ro
ICsgc3ggKiAyKSwgKHU4ICopKGluZm8tPnNwbGFzaF9waWMgKyBzeSAqIGluZm8tPnNwbGFzaF9i
eXRlcyArIHN4ICogMiksIGhlaWdodCwgd2lkdGgsIGluZm8tPmZpeC5saW5lX2xlbmd0aCwgaW5m
by0+c3BsYXNoX2J5dGVzKTsKK30KKwordm9pZCBzcGxhc2hfY2xlYXIoc3RydWN0IHNwbGFzaF9k
YXRhICpzZCwgc3RydWN0IHZjX2RhdGEgKnZjLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgaW50IHN5
LAorCQkJaW50IHN4LCBpbnQgaGVpZ2h0LCBpbnQgd2lkdGgpCit7CisJaW50IGJnc2hpZnQgPSAo
dmMtPnZjX2hpX2ZvbnRfbWFzaykgPyAxMyA6IDEyOworCWludCBiZ19jb2xvciA9IGF0dHJfYmdj
b2xfZWMoYmdzaGlmdCwgdmMsIGluZm8pOworCWludCB0cmFuc3BhcmVudCA9IHNkLT5zcGxhc2hf
Y29sb3IgPT0gYmdfY29sb3I7CisJdTMyIGJneDsKKwl1OCAqZHN0OworCisJc3kgPSBzeSAqIHZj
LT52Y19mb250LmhlaWdodCArIHNkLT5zcGxhc2hfdGV4dF95bzsKKwlzeCA9IHN4ICogdmMtPnZj
X2ZvbnQud2lkdGggKyBzZC0+c3BsYXNoX3RleHRfeG87CisJaGVpZ2h0ICo9IHZjLT52Y19mb250
LmhlaWdodDsKKwl3aWR0aCAqPSB2Yy0+dmNfZm9udC53aWR0aDsKKwlpZiAodHJhbnNwYXJlbnQp
IHsKKwkJc3BsYXNoZmlsbChpbmZvLCBzeSwgc3gsIGhlaWdodCwgd2lkdGgpOworCQlyZXR1cm47
CisJfQorICAgICAgICBkc3QgPSAodTggKikoaW5mby0+c2NyZWVuX2Jhc2UgKyBzeSAqIGluZm8t
PmZpeC5saW5lX2xlbmd0aCArIHN4ICogMik7CisJYmd4ID0gKCh1MzIgKilpbmZvLT5wc2V1ZG9f
cGFsZXR0ZSlbYmdfY29sb3JdOworCXNwbGFzaHNldChkc3QsIGhlaWdodCwgd2lkdGgsIGluZm8t
PmZpeC5saW5lX2xlbmd0aCwgYmd4KTsKK30KKwordm9pZCBzcGxhc2hfYm1vdmUoc3RydWN0IHNw
bGFzaF9kYXRhICpzZCwgc3RydWN0IHZjX2RhdGEgKnZjLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbywg
aW50IHN5LCAKKwkJaW50IHN4LCBpbnQgZHksIGludCBkeCwgaW50IGhlaWdodCwgaW50IHdpZHRo
KQoreworCXN0cnVjdCBmYl9jb3B5YXJlYSBhcmVhOworCisJYXJlYS5zeCA9IHN4ICogdmMtPnZj
X2ZvbnQud2lkdGg7CisJYXJlYS5zeSA9IHN5ICogdmMtPnZjX2ZvbnQuaGVpZ2h0OworCWFyZWEu
ZHggPSBkeCAqIHZjLT52Y19mb250LndpZHRoOworCWFyZWEuZHkgPSBkeSAqIHZjLT52Y19mb250
LmhlaWdodDsKKwlhcmVhLnN4ICs9IHNkLT5zcGxhc2hfdGV4dF94bzsKKwlhcmVhLnN5ICs9IHNk
LT5zcGxhc2hfdGV4dF95bzsKKwlhcmVhLmR4ICs9IHNkLT5zcGxhc2hfdGV4dF94bzsKKwlhcmVh
LmR5ICs9IHNkLT5zcGxhc2hfdGV4dF95bzsKKwlhcmVhLmhlaWdodCA9IGhlaWdodCAqIHZjLT52
Y19mb250LmhlaWdodDsKKwlhcmVhLndpZHRoID0gd2lkdGggKiB2Yy0+dmNfZm9udC53aWR0aDsK
KworCWluZm8tPmZib3BzLT5mYl9jb3B5YXJlYShpbmZvLCAmYXJlYSk7Cit9CisKK3ZvaWQgc3Bs
YXNoX2NsZWFyX21hcmdpbnMoc3RydWN0IHNwbGFzaF9kYXRhICpzZCwgc3RydWN0IHZjX2RhdGEg
KnZjLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbywKKwkJCQlpbnQgYm90dG9tX29ubHkpCit7CisJdW5z
aWduZWQgaW50IHR3ID0gdmMtPnZjX2NvbHMqdmMtPnZjX2ZvbnQud2lkdGg7CisJdW5zaWduZWQg
aW50IHRoID0gdmMtPnZjX3Jvd3MqdmMtPnZjX2ZvbnQuaGVpZ2h0OworCQorCWlmICghYm90dG9t
X29ubHkpIHsKKwkJLyogdG9wIG1hcmdpbiAqLworCQlzcGxhc2hmaWxsKGluZm8sIDAsIDAsIHNk
LT5zcGxhc2hfdGV4dF95bywgaW5mby0+dmFyLnhyZXMpOworCQkvKiBsZWZ0IG1hcmdpbiAqLwor
CQlzcGxhc2hmaWxsKGluZm8sIHNkLT5zcGxhc2hfdGV4dF95bywgMCwgdGgsIHNkLT5zcGxhc2hf
dGV4dF94byk7CisJCS8qIHJpZ2h0IG1hcmdpbiAqLworCQlzcGxhc2hmaWxsKGluZm8sIHNkLT5z
cGxhc2hfdGV4dF95bywgc2QtPnNwbGFzaF90ZXh0X3hvICsgdHcsIHRoLCBpbmZvLT52YXIueHJl
cyAtIHNkLT5zcGxhc2hfdGV4dF94byAtIHR3KTsKKworCX0KKwlzcGxhc2hmaWxsKGluZm8sIHNk
LT5zcGxhc2hfdGV4dF95byArIHRoLCAwLCBpbmZvLT52YXIueXJlcyAtIHNkLT5zcGxhc2hfdGV4
dF95byAtIHRoLCBpbmZvLT52YXIueHJlcyk7Cit9CisKK2ludCBzcGxhc2hfY3Vyc29yKHN0cnVj
dCBzcGxhc2hfZGF0YSAqc2QsIHN0cnVjdCBmYl9pbmZvICppbmZvLCBzdHJ1Y3QgZmJfY3Vyc29y
ICpjdXJzb3IpCit7CisJaW50IGk7CisJdW5zaWduZWQgaW50IGRzaXplLCBzX3BpdGNoOworCisJ
aWYgKGluZm8tPnN0YXRlICE9IEZCSU5GT19TVEFURV9SVU5OSU5HKQorCQlyZXR1cm4gMDsKKwkK
KwlzX3BpdGNoID0gKGN1cnNvci0+aW1hZ2Uud2lkdGggKyA3KSA+PiAzOworICAgICAgICBkc2l6
ZSA9IHNfcGl0Y2ggKiBjdXJzb3ItPmltYWdlLmhlaWdodDsKKyAgICAgICAgaWYgKGN1cnNvci0+
ZW5hYmxlKSB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChjdXJzb3ItPnJvcCkgeworICAgICAg
ICAgICAgICAgIGNhc2UgUk9QX1hPUjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9
IDA7IGkgPCBkc2l6ZTsgaSsrKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZv
LT5mYl9jdXJzb3JkYXRhW2ldID0gY3Vyc29yLT5pbWFnZS5kYXRhW2ldIF4gY3Vyc29yLT5tYXNr
W2ldOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2Fz
ZSBST1BfQ09QWToKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAg
ICAgICAgZm9yIChpID0gMDsgaSA8IGRzaXplOyBpKyspCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGluZm8tPmZiX2N1cnNvcmRhdGFbaV0gPSBjdXJzb3ItPmltYWdlLmRhdGFbaV0g
JiBjdXJzb3ItPm1hc2tbaV07CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoaW5mby0+ZmJfY3Vyc29yZGF0YSAhPSBj
dXJzb3ItPmltYWdlLmRhdGEpCisgICAgICAgICAgICAgICAgbWVtY3B5KGluZm8tPmZiX2N1cnNv
cmRhdGEsIGN1cnNvci0+aW1hZ2UuZGF0YSwgZHNpemUpOworCWN1cnNvci0+aW1hZ2UuZGF0YSA9
IGluZm8tPmZiX2N1cnNvcmRhdGE7CisJc3BsYXNoX3JlbmRlcmMoc2QsIGluZm8sIGN1cnNvci0+
aW1hZ2UuZmdfY29sb3IsIGN1cnNvci0+aW1hZ2UuYmdfY29sb3IsICh1OCAqKWluZm8tPmZiX2N1
cnNvcmRhdGEsIGN1cnNvci0+aW1hZ2UuZHkgKyBzZC0+c3BsYXNoX3RleHRfeW8sIGN1cnNvci0+
aW1hZ2UuZHggKyBzZC0+c3BsYXNoX3RleHRfeG8sIGN1cnNvci0+aW1hZ2UuaGVpZ2h0LCBjdXJz
b3ItPmltYWdlLndpZHRoKTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBzcGxhc2hfYm1vdmVfcmVk
cmF3KHN0cnVjdCBzcGxhc2hfZGF0YSAqc2QsIHN0cnVjdCB2Y19kYXRhICp2Yywgc3RydWN0IGZi
X2luZm8gKmluZm8sIGludCB5LCBpbnQgc3gsIGludCBkeCwgaW50IHdpZHRoKQoreworCXVuc2ln
bmVkIHNob3J0ICpkID0gKHVuc2lnbmVkIHNob3J0ICopICh2Yy0+dmNfb3JpZ2luICsgdmMtPnZj
X3NpemVfcm93ICogeSArIGR4ICogMik7CisJdW5zaWduZWQgc2hvcnQgKnMgPSBkICsgKGR4IC0g
c3gpOworCXVuc2lnbmVkIHNob3J0ICpzdGFydCA9IGQ7CisJdW5zaWduZWQgc2hvcnQgKmxzID0g
ZDsKKwl1bnNpZ25lZCBzaG9ydCAqbGUgPSBkICsgd2lkdGg7CisJdW5zaWduZWQgc2hvcnQgYzsK
KwlpbnQgeCA9IGR4OworCXVuc2lnbmVkIHNob3J0IGF0dHIgPSAxOworCisJZG8geworCQljID0g
c2NyX3JlYWR3KGQpOworCQlpZiAoYXR0ciAhPSAoYyAmIDB4ZmYwMCkpIHsKKwkJCWF0dHIgPSBj
ICYgMHhmZjAwOworCQkJaWYgKGQgPiBzdGFydCkgeworCQkJCXNwbGFzaF9wdXRjcyhzZCwgdmMs
IGluZm8sIHN0YXJ0LCBkIC0gc3RhcnQsIHksIHgpOworCQkJCXggKz0gZCAtIHN0YXJ0OworCQkJ
CXN0YXJ0ID0gZDsKKwkJCX0KKwkJfQorCQlpZiAocyA+PSBscyAmJiBzIDwgbGUgJiYgYyA9PSBz
Y3JfcmVhZHcocykpIHsKKwkJCWlmIChkID4gc3RhcnQpIHsKKwkJCQlzcGxhc2hfcHV0Y3Moc2Qs
IHZjLCBpbmZvLCBzdGFydCwgZCAtIHN0YXJ0LCB5LCB4KTsKKwkJCQl4ICs9IGQgLSBzdGFydCAr
IDE7CisJCQkJc3RhcnQgPSBkICsgMTsKKwkJCX0gZWxzZSB7CisJCQkJeCsrOworCQkJCXN0YXJ0
Kys7CisJCQl9CisJCX0KKwkJcysrOworCQlkKys7CisJfSB3aGlsZSAoZCA8IGxlKTsKKwlpZiAo
ZCA+IHN0YXJ0KQorCQlzcGxhc2hfcHV0Y3Moc2QsIHZjLCBpbmZvLCBzdGFydCwgZCAtIHN0YXJ0
LCB5LCB4KTsKK30KKwordm9pZCBzcGxhc2hfYmxhbmsoc3RydWN0IHNwbGFzaF9kYXRhICpzZCwg
c3RydWN0IHZjX2RhdGEgKnZjLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgaW50IGJsYW5rKQorewor
CWlmIChibGFuaykgeworCQlpZiAoaW5mby0+c2lsZW50X3NjcmVlbl9iYXNlKQorCQkgICAgc3Bs
YXNoc2V0KCh1OCAqKWluZm8tPnNpbGVudF9zY3JlZW5fYmFzZSwgaW5mby0+dmFyLnlyZXMsIGlu
Zm8tPnZhci54cmVzLCBpbmZvLT5maXgubGluZV9sZW5ndGgsIDApOworCQlzcGxhc2hzZXQoKHU4
ICopaW5mby0+c2NyZWVuX2Jhc2UsIGluZm8tPnZhci55cmVzLCBpbmZvLT52YXIueHJlcywgaW5m
by0+Zml4LmxpbmVfbGVuZ3RoLCAwKTsKKwl9IGVsc2UgeworCQlpZiAoaW5mby0+c2lsZW50X3Nj
cmVlbl9iYXNlKQorCQkJc3BsYXNoX3ByZXBhcmUodmMsIGluZm8pOworCQlzcGxhc2hfY2xlYXJf
bWFyZ2lucyh2Yy0+dmNfc3BsYXNoX2RhdGEsIHZjLCBpbmZvLCAwKTsKKwkJLyogbm8gbG9uZ2Vy
IG5lZWRlZCwgZG9uZSBpbiBmYmNvbl9ibGFuayAqLworCQkvKiB1cGRhdGVfc2NyZWVuKHZjLT52
Y19udW0pOyAqLworCX0KK30KKwpkaWZmIC11cndOIGxpbnV4LTIuNi4zNS9kcml2ZXJzL3ZpZGVv
L2NvbnNvbGUvYml0YmxpdC5jIGxpbnV4LTIuNi4zNS1wYXRjaGVkL2RyaXZlcnMvdmlkZW8vY29u
c29sZS9iaXRibGl0LmMKLS0tIGxpbnV4LTIuNi4zNS9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvYml0
YmxpdC5jCTIwMTAtMDgtMDIgMDA6MTE6MTQuMDAwMDAwMDAwICswMjAwCisrKyBsaW51eC0yLjYu
MzUtcGF0Y2hlZC9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvYml0YmxpdC5jCTIwMTAtMDgtMDIgMTc6
MzY6NTYuNDY5MzgxMjI0ICswMjAwCkBAIC0xOCw2ICsxOCw5IEBACiAjaW5jbHVkZSA8bGludXgv
Y29uc29sZS5oPgogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgogI2luY2x1ZGUgImZiY29uLmgiCisj
aWZkZWYgQ09ORklHX0JPT1RTUExBU0gKKyNpbmNsdWRlICIuLi9ib290c3BsYXNoL2Jvb3RzcGxh
c2guaCIKKyNlbmRpZgogCiAvKgogICogQWNjZWxlcmF0ZWQgaGFuZGxlcnMuCkBAIC00OCw2ICs1
MSwxMyBAQAogewogCXN0cnVjdCBmYl9jb3B5YXJlYSBhcmVhOwogCisjaWZkZWYgQ09ORklHX0JP
T1RTUExBU0gKKwlpZiAoaW5mby0+c3BsYXNoX2RhdGEpIHsKKwkJc3BsYXNoX2Jtb3ZlKGluZm8t
PnNwbGFzaF9kYXRhLCB2YywgaW5mbywKKwkJCXN5LCBzeCwgZHksIGR4LCBoZWlnaHQsIHdpZHRo
KTsKKwkJcmV0dXJuOworCX0KKyNlbmRpZgogCWFyZWEuc3ggPSBzeCAqIHZjLT52Y19mb250Lndp
ZHRoOwogCWFyZWEuc3kgPSBzeSAqIHZjLT52Y19mb250LmhlaWdodDsKIAlhcmVhLmR4ID0gZHgg
KiB2Yy0+dmNfZm9udC53aWR0aDsKQEAgLTYzLDcgKzczLDEzIEBACiB7CiAJaW50IGJnc2hpZnQg
PSAodmMtPnZjX2hpX2ZvbnRfbWFzaykgPyAxMyA6IDEyOwogCXN0cnVjdCBmYl9maWxscmVjdCBy
ZWdpb247Ci0KKyNpZmRlZiBDT05GSUdfQk9PVFNQTEFTSAorIAlpZiAoaW5mby0+c3BsYXNoX2Rh
dGEpIHsKKyAJCXNwbGFzaF9jbGVhcihpbmZvLT5zcGxhc2hfZGF0YSwgdmMsIGluZm8sCisgCQkJ
CQkJc3ksIHN4LCBoZWlnaHQsIHdpZHRoKTsKKyAJCXJldHVybjsKKyAJfQorI2VuZGlmCiAJcmVn
aW9uLmNvbG9yID0gYXR0cl9iZ2NvbF9lYyhiZ3NoaWZ0LCB2YywgaW5mbyk7CiAJcmVnaW9uLmR4
ID0gc3ggKiB2Yy0+dmNfZm9udC53aWR0aDsKIAlyZWdpb24uZHkgPSBzeSAqIHZjLT52Y19mb250
LmhlaWdodDsKQEAgLTE2MSw2ICsxNzcsMTMgQEAKIAlpbWFnZS5oZWlnaHQgPSB2Yy0+dmNfZm9u
dC5oZWlnaHQ7CiAJaW1hZ2UuZGVwdGggPSAxOwogCisjaWZkZWYgQ09ORklHX0JPT1RTUExBU0gK
KwlpZiAoaW5mby0+c3BsYXNoX2RhdGEpIHsKKwkJc3BsYXNoX3B1dGNzKGluZm8tPnNwbGFzaF9k
YXRhLCB2YywgaW5mbywgcywgY291bnQsIHl5LCB4eCk7CisJCXJldHVybjsKKwl9CisjZW5kaWYK
KwogCWlmIChhdHRyaWJ1dGUpIHsKIAkJYnVmID0ga21hbGxvYyhjZWxsc2l6ZSwgR0ZQX0tFUk5F
TCk7CiAJCWlmICghYnVmKQpAQCAtMjE0LDYgKzIzNywxMyBAQAogCXVuc2lnbmVkIGludCBicyA9
IGluZm8tPnZhci55cmVzIC0gYmg7CiAJc3RydWN0IGZiX2ZpbGxyZWN0IHJlZ2lvbjsKIAorI2lm
ZGVmIENPTkZJR19CT09UU1BMQVNICisgCWlmIChpbmZvLT5zcGxhc2hfZGF0YSkgeworIAkJc3Bs
YXNoX2NsZWFyX21hcmdpbnMoaW5mby0+c3BsYXNoX2RhdGEsIHZjLCBpbmZvLCBib3R0b21fb25s
eSk7CisgCQlyZXR1cm47CisgCX0KKyNlbmRpZgorCiAJcmVnaW9uLmNvbG9yID0gYXR0cl9iZ2Nv
bF9lYyhiZ3NoaWZ0LCB2YywgaW5mbyk7CiAJcmVnaW9uLnJvcCA9IFJPUF9DT1BZOwogCkBAIC0z
ODAsNiArNDEwLDE0IEBACiAJY3Vyc29yLmltYWdlLmRlcHRoID0gMTsKIAljdXJzb3Iucm9wID0g
Uk9QX1hPUjsKIAorI2lmZGVmIENPTkZJR19CT09UU1BMQVNICisJaWYgKGluZm8tPnNwbGFzaF9k
YXRhKSB7CisJCXNwbGFzaF9jdXJzb3IoaW5mby0+c3BsYXNoX2RhdGEsIGluZm8sICZjdXJzb3Ip
OworCQlvcHMtPmN1cnNvcl9yZXNldCA9IDA7CisJCXJldHVybjsKKwl9CisjZW5kaWYKKwogCWlm
IChpbmZvLT5mYm9wcy0+ZmJfY3Vyc29yKQogCQllcnIgPSBpbmZvLT5mYm9wcy0+ZmJfY3Vyc29y
KGluZm8sICZjdXJzb3IpOwogCmRpZmYgLXVyd04gbGludXgtMi42LjM1L2RyaXZlcnMvdmlkZW8v
Y29uc29sZS9mYmNvbi5jIGxpbnV4LTIuNi4zNS1wYXRjaGVkL2RyaXZlcnMvdmlkZW8vY29uc29s
ZS9mYmNvbi5jCi0tLSBsaW51eC0yLjYuMzUvZHJpdmVycy92aWRlby9jb25zb2xlL2ZiY29uLmMJ
MjAxMC0wOC0wMiAwMDoxMToxNC4wMDAwMDAwMDAgKzAyMDAKKysrIGxpbnV4LTIuNi4zNS1wYXRj
aGVkL2RyaXZlcnMvdmlkZW8vY29uc29sZS9mYmNvbi5jCTIwMTAtMDgtMDIgMTc6MzY6NTYuNDY5
MzgxMjI0ICswMjAwCkBAIC04MSw2ICs4MSwxMCBAQAogCiAjaW5jbHVkZSAiZmJjb24uaCIKIAor
I2lmZGVmIENPTkZJR19CT09UU1BMQVNICisjaW5jbHVkZSAiLi4vYm9vdHNwbGFzaC9ib290c3Bs
YXNoLmgiCisjZW5kaWYKKwogI2lmZGVmIEZCQ09OREVCVUcKICMgIGRlZmluZSBEUFJJTlRLKGZt
dCwgYXJncy4uLikgcHJpbnRrKEtFUk5fREVCVUcgIiVzOiAiIGZtdCwgX19mdW5jX18gLCAjIyBh
cmdzKQogI2Vsc2UKQEAgLTk0LDggKzk4LDcgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgZGlzcGxh
eSBmYl9kaXNwbGF5W01BWF9OUl9DT05TT0xFU107Ci0KLXN0YXRpYyBzaWduZWQgY2hhciBjb24y
ZmJfbWFwW01BWF9OUl9DT05TT0xFU107CitzaWduZWQgY2hhciBjb24yZmJfbWFwW01BWF9OUl9D
T05TT0xFU107CiBzdGF0aWMgc2lnbmVkIGNoYXIgY29uMmZiX21hcF9ib290W01BWF9OUl9DT05T
T0xFU107CiAKIHN0YXRpYyBpbnQgbG9nb19saW5lczsKQEAgLTUzNyw2ICs1NDAsMTAgQEAKIAlm
b3IgKGkgPSBmaXJzdF9mYl92YzsgaSA8PSBsYXN0X2ZiX3ZjOyBpKyspCiAJCWNvbjJmYl9tYXBb
aV0gPSBpbmZvX2lkeDsKIAorI2lmZGVmIENPTkZJR19CT09UU1BMQVNICisJc3BsYXNoX2luaXQo
KTsKKyNlbmRpZgorCiAJZXJyID0gdGFrZV9vdmVyX2NvbnNvbGUoJmZiX2NvbiwgZmlyc3RfZmJf
dmMsIGxhc3RfZmJfdmMsCiAJCQkJZmJjb25faXNfZGVmYXVsdCk7CiAKQEAgLTEwOTksNiArMTEw
NiwxNSBAQAogCW5ld19jb2xzIC89IHZjLT52Y19mb250LndpZHRoOwogCW5ld19yb3dzIC89IHZj
LT52Y19mb250LmhlaWdodDsKIAorI2lmZGVmIENPTkZJR19CT09UU1BMQVNICisgCWlmICh2Yy0+
dmNfc3BsYXNoX2RhdGEgJiYgdmMtPnZjX3NwbGFzaF9kYXRhLT5zcGxhc2hfc3RhdGUpIHsKKyAJ
CW5ld19jb2xzID0gdmMtPnZjX3NwbGFzaF9kYXRhLT5zcGxhc2hfdGV4dF93aSAvIHZjLT52Y19m
b250LndpZHRoOworIAkJbmV3X3Jvd3MgPSB2Yy0+dmNfc3BsYXNoX2RhdGEtPnNwbGFzaF90ZXh0
X2hlIC8gdmMtPnZjX2ZvbnQuaGVpZ2h0OworIAkJbG9nbyA9IDA7CisgCQljb25fcmVtYXBfZGVm
X2NvbG9yKHZjLCB2Yy0+dmNfc3BsYXNoX2RhdGEtPnNwbGFzaF9jb2xvciA8PCA0IHwgdmMtPnZj
X3NwbGFzaF9kYXRhLT5zcGxhc2hfZmdfY29sb3IpOworIAl9CisjZW5kaWYKKyAJCQkKIAkvKgog
CSAqIFdlIG11c3QgYWx3YXlzIHNldCB0aGUgbW9kZS4gVGhlIG1vZGUgb2YgdGhlIHByZXZpb3Vz
IGNvbnNvbGUKIAkgKiBkcml2ZXIgY291bGQgYmUgaW4gdGhlIHNhbWUgcmVzb2x1dGlvbiBidXQg
d2UgYXJlIHVzaW5nIGRpZmZlcmVudApAQCAtMTgwMCw2ICsxODE2LDEwIEBACiAJCQlmYmNvbl9z
b2Z0YmFja19ub3RlKHZjLCB0LCBjb3VudCk7CiAJCWlmIChsb2dvX3Nob3duID49IDApCiAJCQln
b3RvIHJlZHJhd191cDsKKyNpZmRlZiBDT05GSUdfQk9PVFNQTEFTSAorCQlpZiAoaW5mby0+c3Bs
YXNoX2RhdGEpCisJCQlnb3RvIHJlZHJhd191cDsKKyNlbmRpZgogCQlzd2l0Y2ggKHAtPnNjcm9s
bG1vZGUpIHsKIAkJY2FzZSBTQ1JPTExfTU9WRToKIAkJCWZiY29uX3JlZHJhd19ibGl0KHZjLCBp
bmZvLCBwLCB0LCBiIC0gdCAtIGNvdW50LApAQCAtMTg4OSw2ICsxOTA5LDEwIEBACiAJY2FzZSBT
TV9ET1dOOgogCQlpZiAoY291bnQgPiB2Yy0+dmNfcm93cykJLyogTWF4aW11bSByZWFsaXN0aWMg
c2l6ZSAqLwogCQkJY291bnQgPSB2Yy0+dmNfcm93czsKKyNpZmRlZiBDT05GSUdfQk9PVFNQTEFT
SAorCQlpZiAoaW5mby0+c3BsYXNoX2RhdGEpCisJCQlnb3RvIHJlZHJhd19kb3duOworI2VuZGlm
CiAJCWlmIChsb2dvX3Nob3duID49IDApCiAJCQlnb3RvIHJlZHJhd19kb3duOwogCQlzd2l0Y2gg
KHAtPnNjcm9sbG1vZGUpIHsKQEAgLTIwMzksNiArMjA2MywxNCBAQAogCQl9CiAJCXJldHVybjsK
IAl9CisKKyNpZmRlZiBDT05GSUdfQk9PVFNQTEFTSAorCWlmIChpbmZvLT5zcGxhc2hfZGF0YSAm
JiBzeSA9PSBkeSAmJiBoZWlnaHQgPT0gMSkgeworCQkvKiBtdXN0IHVzZSBzbG93ZXIgcmVkcmF3
IGJtb3ZlIHRvIGtlZXAgYmFja2dyb3VuZCBwaWMgaW50YWN0ICovCisJCXNwbGFzaF9ibW92ZV9y
ZWRyYXcoaW5mby0+c3BsYXNoX2RhdGEsIHZjLCBpbmZvLCBzeSwgc3gsIGR4LCB3aWR0aCk7CisJ
CXJldHVybjsKKwl9CisjZW5kaWYKIAlvcHMtPmJtb3ZlKHZjLCBpbmZvLCByZWFsX3kocCwgc3kp
LCBzeCwgcmVhbF95KHAsIGR5KSwgZHgsCiAJCSAgIGhlaWdodCwgd2lkdGgpOwogfQpAQCAtMjE0
Nyw2ICsyMTc5LDEwIEBACiAJaW5mbyA9IHJlZ2lzdGVyZWRfZmJbY29uMmZiX21hcFt2Yy0+dmNf
bnVtXV07CiAJb3BzID0gaW5mby0+ZmJjb25fcGFyOwogCisjaWZkZWYgQ09ORklHX0JPT1RTUExB
U0gKKwlzcGxhc2hfcHJlcGFyZSh2YywgaW5mbyk7CisjZW5kaWYKKwogCWlmIChzb2Z0YmFja190
b3ApIHsKIAkJaWYgKHNvZnRiYWNrX2xpbmVzKQogCQkJZmJjb25fc2V0X29yaWdpbih2Yyk7CkBA
IC0yMjgwLDYgKzIzMTYsMTIgQEAKIHsKIAlzdHJ1Y3QgZmJfZXZlbnQgZXZlbnQ7CiAKKyNpZmRl
ZiBDT05GSUdfQk9PVFNQTEFTSAorCWlmIChpbmZvLT5zcGxhc2hfZGF0YSkgeworCQlzcGxhc2hf
YmxhbmsoaW5mby0+c3BsYXNoX2RhdGEsIHZjLCBpbmZvLCBibGFuayk7CisJCXJldHVybjsKKwl9
CisjZW5kaWYKIAlpZiAoYmxhbmspIHsKIAkJdW5zaWduZWQgc2hvcnQgY2hhcm1hc2sgPSB2Yy0+
dmNfaGlfZm9udF9tYXNrID8KIAkJCTB4MWZmIDogMHhmZjsKQEAgLTI0NzksMTAgKzI1MjEsMTkg
QEAKIAlpZiAocmVzaXplKSB7CiAJCWludCBjb2xzLCByb3dzOwogCisJCXUzMiB4cmVzID0gaW5m
by0+dmFyLnhyZXMsIHlyZXMgPSBpbmZvLT52YXIueXJlczsKIAkJY29scyA9IEZCQ09OX1NXQVAo
b3BzLT5yb3RhdGUsIGluZm8tPnZhci54cmVzLCBpbmZvLT52YXIueXJlcyk7CiAJCXJvd3MgPSBG
QkNPTl9TV0FQKG9wcy0+cm90YXRlLCBpbmZvLT52YXIueXJlcywgaW5mby0+dmFyLnhyZXMpOwog
CQljb2xzIC89IHc7CiAJCXJvd3MgLz0gaDsKKworI2lmZGVmIENPTkZJR19CT09UU1BMQVNICisJ
CWlmIChpbmZvLT5zcGxhc2hfZGF0YSkgeworCQkJeHJlcyA9IGluZm8tPnNwbGFzaF9kYXRhLT5z
cGxhc2hfdGV4dF93aTsKKwkJCXlyZXMgPSBpbmZvLT5zcGxhc2hfZGF0YS0+c3BsYXNoX3RleHRf
aGU7CisJCX0KKyNlbmRpZgorCQkJCQkKIAkJdmNfcmVzaXplKHZjLCBjb2xzLCByb3dzKTsKIAkJ
aWYgKENPTl9JU19WSVNJQkxFKHZjKSAmJiBzb2Z0YmFja19idWYpCiAJCQlmYmNvbl91cGRhdGVf
c29mdGJhY2sodmMpOwpkaWZmIC11cndOIGxpbnV4LTIuNi4zNS9kcml2ZXJzL3ZpZGVvL2NvbnNv
bGUvZmJjb24uaCBsaW51eC0yLjYuMzUtcGF0Y2hlZC9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZmJj
b24uaAotLS0gbGludXgtMi42LjM1L2RyaXZlcnMvdmlkZW8vY29uc29sZS9mYmNvbi5oCTIwMTAt
MDgtMDIgMDA6MTE6MTQuMDAwMDAwMDAwICswMjAwCisrKyBsaW51eC0yLjYuMzUtcGF0Y2hlZC9k
cml2ZXJzL3ZpZGVvL2NvbnNvbGUvZmJjb24uaAkyMDEwLTA4LTAyIDE3OjM2OjU2LjQ2OTM4MTIy
NCArMDIwMApAQCAtMjUsNiArMjUsMzQgQEAKICAgICAqICAgIGxvdy1sZXZlbCBmcmFtZSBidWZm
ZXIgZGV2aWNlCiAgICAgKi8KIAorI2lmZGVmIENPTkZJR19CT09UU1BMQVNICitzdHJ1Y3Qgc3Bs
YXNoX2RhdGEgeworICAgIGludCBzcGxhc2hfc3RhdGU7CQkJLyogc2hvdyBzcGxhc2g/ICovCisg
ICAgaW50IHNwbGFzaF9jb2xvcjsJCQkvKiB0cmFuc3BhcmVudCBjb2xvciAqLworICAgIGludCBz
cGxhc2hfZmdfY29sb3I7CQkvKiBmb3JlZ3JvdW5kIGNvbG9yICovCisgICAgaW50IHNwbGFzaF93
aWR0aDsJCQkvKiB3aWR0aCBvZiBpbWFnZSAqLworICAgIGludCBzcGxhc2hfaGVpZ2h0OwkJCS8q
IGhlaWdodCBvZiBpbWFnZSAqLworICAgIGludCBzcGxhc2hfdGV4dF94bzsJCQkvKiB0ZXh0IGFy
ZWEgb3JpZ2luICovCisgICAgaW50IHNwbGFzaF90ZXh0X3lvOworICAgIGludCBzcGxhc2hfdGV4
dF93aTsJCQkvKiB0ZXh0IGFyZWEgc2l6ZSAqLyAKKyAgICBpbnQgc3BsYXNoX3RleHRfaGU7Cisg
ICAgaW50IHNwbGFzaF9zaG93dGV4dDsJCS8qIHNpbGVudC92ZXJib3NlIG1vZGUgKi8KKyAgICBp
bnQgc3BsYXNoX2JveGNvdW50OworICAgIGludCBzcGxhc2hfcGVyY2VudDsKKyAgICBpbnQgc3Bs
YXNoX292ZXJwYWludG9rOwkJLyogaXMgaXQgb2sgdG8gb3ZlcnBhaW50IGJveGVzICovCisgICAg
aW50IHNwbGFzaF9wYWxjbnQ7CisgICAgY2hhciAqb2xkc2NyZWVuX2Jhc2U7CQkvKiBwb2ludGVy
IHRvIHRvcCBvZiB2aXJ0dWFsIHNjcmVlbiAqLworICAgIHVuc2lnbmVkIGNoYXIgKnNwbGFzaF9i
b3hlczsKKyAgICB1bnNpZ25lZCBjaGFyICpzcGxhc2hfanBlZzsJCS8qIGpwZWcgKi8KKyAgICB1
bnNpZ25lZCBjaGFyICpzcGxhc2hfcGFsZXR0ZTsJLyogcGFsZXR0ZSBmb3IgOC1iaXQgKi8KKwor
ICAgIGludCBzcGxhc2hfZG9zaWxlbnQ7CQkvKiBzaG93IHNpbGVudCBqcGVnICovCisgICAgdW5z
aWduZWQgY2hhciAqc3BsYXNoX3NpbGVudGpwZWc7CisgICAgdW5zaWduZWQgY2hhciAqc3BsYXNo
X3Nib3hlczsKKyAgICBpbnQgc3BsYXNoX3Nib3hjb3VudDsKK307CisjZW5kaWYKKwogc3RydWN0
IGRpc3BsYXkgewogICAgIC8qIEZpbGxlZCBpbiBieSB0aGUgbG93LWxldmVsIGNvbnNvbGUgZHJp
dmVyICovCiAgICAgY29uc3QgdV9jaGFyICpmb250ZGF0YTsKZGlmZiAtdXJ3TiBsaW51eC0yLjYu
MzUvZHJpdmVycy92aWRlby9LY29uZmlnIGxpbnV4LTIuNi4zNS1wYXRjaGVkL2RyaXZlcnMvdmlk
ZW8vS2NvbmZpZwotLS0gbGludXgtMi42LjM1L2RyaXZlcnMvdmlkZW8vS2NvbmZpZwkyMDEwLTA4
LTAyIDAwOjExOjE0LjAwMDAwMDAwMCArMDIwMAorKysgbGludXgtMi42LjM1LXBhdGNoZWQvZHJp
dmVycy92aWRlby9LY29uZmlnCTIwMTAtMDgtMDIgMTc6MzY6NTYuNDY5MzgxMjI0ICswMjAwCkBA
IC0yMjQzLDQgKzIyNDMsOCBAQAogCXNvdXJjZSAiZHJpdmVycy92aWRlby9sb2dvL0tjb25maWci
CiBlbmRpZgogCitpZiBGQgorCXNvdXJjZSAiZHJpdmVycy92aWRlby9ib290c3BsYXNoL0tjb25m
aWciCitlbmRpZgorCiBlbmRtZW51CmRpZmYgLXVyd04gbGludXgtMi42LjM1L2RyaXZlcnMvdmlk
ZW8vTWFrZWZpbGUgbGludXgtMi42LjM1LXBhdGNoZWQvZHJpdmVycy92aWRlby9NYWtlZmlsZQot
LS0gbGludXgtMi42LjM1L2RyaXZlcnMvdmlkZW8vTWFrZWZpbGUJMjAxMC0wOC0wMiAwMDoxMTox
NC4wMDAwMDAwMDAgKzAyMDAKKysrIGxpbnV4LTIuNi4zNS1wYXRjaGVkL2RyaXZlcnMvdmlkZW8v
TWFrZWZpbGUJMjAxMC0wOC0wMiAxNzozNjo1Ni40NjkzODEyMjQgKzAyMDAKQEAgLTE0LDYgKzE0
LDcgQEAKIG9iai0kKENPTkZJR19WVCkJCSAgKz0gY29uc29sZS8KIG9iai0kKENPTkZJR19MT0dP
KQkJICArPSBsb2dvLwogb2JqLXkJCQkJICArPSBiYWNrbGlnaHQvIGRpc3BsYXkvCitvYmotJChD
T05GSUdfQk9PVFNQTEFTSCkJICArPSBib290c3BsYXNoLwogCiBvYmotJChDT05GSUdfRkJfQ0ZC
X0ZJTExSRUNUKSAgKz0gY2ZiZmlsbHJlY3Qubwogb2JqLSQoQ09ORklHX0ZCX0NGQl9DT1BZQVJF
QSkgICs9IGNmYmNvcHlhcmVhLm8KZGlmZiAtdXJ3TiBsaW51eC0yLjYuMzUvZHJpdmVycy92aWRl
by92ZXNhZmIuYyBsaW51eC0yLjYuMzUtcGF0Y2hlZC9kcml2ZXJzL3ZpZGVvL3Zlc2FmYi5jCi0t
LSBsaW51eC0yLjYuMzUvZHJpdmVycy92aWRlby92ZXNhZmIuYwkyMDEwLTA4LTAyIDAwOjExOjE0
LjAwMDAwMDAwMCArMDIwMAorKysgbGludXgtMi42LjM1LXBhdGNoZWQvZHJpdmVycy92aWRlby92
ZXNhZmIuYwkyMDEwLTA4LTAyIDE3OjM2OjU2LjQ2OTM4MTIyNCArMDIwMApAQCAtMTgxLDcgKzE4
MSwxMCBAQAogCWZyYW1lYnVmZmVyX3JlbGVhc2UoaW5mbyk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qg
ZmJfb3BzIHZlc2FmYl9vcHMgPSB7CisjaWZuZGVmIENPTkZJR19CT09UU1BMQVNICitzdGF0aWMK
KyNlbmRpZgorc3RydWN0IGZiX29wcyB2ZXNhZmJfb3BzID0gewogCS5vd25lcgkJPSBUSElTX01P
RFVMRSwKIAkuZmJfZGVzdHJveSAgICAgPSB2ZXNhZmJfZGVzdHJveSwKIAkuZmJfc2V0Y29scmVn
CT0gdmVzYWZiX3NldGNvbHJlZywKQEAgLTI2Niw2ICsyNjksMTEgQEAKIAkgKiAgICAgICAgICAg
ICAgICAgb3B0aW9uIHRvIHNpbXBseSB1c2Ugc2l6ZV90b3RhbCBhcyB0aGF0CiAJICogICAgICAg
ICAgICAgICAgIHdhc3RlcyBwbGVudHkgb2Yga2VybmVsIGFkZHJlc3Mgc3BhY2UuICovCiAJc2l6
ZV9yZW1hcCAgPSBzaXplX3Ztb2RlICogMjsKKwkKKyNpZmRlZiBDT05GSUdfQk9PVFNQTEFTSAor
CXNpemVfcmVtYXAgKj0gMjsJLyogc29tZSBtb3JlIGZvciB0aGUgaW1hZ2VzICovCisjZW5kaWYK
KwogCWlmICh2cmFtX3JlbWFwKQogCQlzaXplX3JlbWFwID0gdnJhbV9yZW1hcCAqIDEwMjQgKiAx
MDI0OwogCWlmIChzaXplX3JlbWFwIDwgc2l6ZV92bW9kZSkKZGlmZiAtdXJ3TiBsaW51eC0yLjYu
MzUvaW5jbHVkZS9saW51eC9jb25zb2xlX3N0cnVjdC5oIGxpbnV4LTIuNi4zNS1wYXRjaGVkL2lu
Y2x1ZGUvbGludXgvY29uc29sZV9zdHJ1Y3QuaAotLS0gbGludXgtMi42LjM1L2luY2x1ZGUvbGlu
dXgvY29uc29sZV9zdHJ1Y3QuaAkyMDEwLTA4LTAyIDAwOjExOjE0LjAwMDAwMDAwMCArMDIwMAor
KysgbGludXgtMi42LjM1LXBhdGNoZWQvaW5jbHVkZS9saW51eC9jb25zb2xlX3N0cnVjdC5oCTIw
MTAtMDgtMDIgMTc6MzY6NTYuNDY5MzgxMjI0ICswMjAwCkBAIC0xMDUsNiArMTA1LDExIEBACiAJ
c3RydWN0IHZjX2RhdGEgKip2Y19kaXNwbGF5X2ZnOwkJLyogWyFdIFB0ciB0byB2YXIgaG9sZGlu
ZyBmZyBjb25zb2xlIGZvciB0aGlzIGRpc3BsYXkgKi8KIAl1bnNpZ25lZCBsb25nCXZjX3VuaV9w
YWdlZGlyOwogCXVuc2lnbmVkIGxvbmcJKnZjX3VuaV9wYWdlZGlyX2xvYzsgIC8qIFshXSBMb2Nh
dGlvbiBvZiB1bmlfcGFnZWRpciB2YXJpYWJsZSBmb3IgdGhpcyBjb25zb2xlICovCisJCisjaWZk
ZWYgQ09ORklHX0JPT1RTUExBU0gKKyAgICAgICAgc3RydWN0IHNwbGFzaF9kYXRhICp2Y19zcGxh
c2hfZGF0YTsKKyNlbmRpZgorCiAJLyogYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBpcyBpbiB2dF9r
ZXJuLmggKi8KIH07CiAKZGlmZiAtdXJ3TiBsaW51eC0yLjYuMzUvaW5jbHVkZS9saW51eC9mYi5o
IGxpbnV4LTIuNi4zNS1wYXRjaGVkL2luY2x1ZGUvbGludXgvZmIuaAotLS0gbGludXgtMi42LjM1
L2luY2x1ZGUvbGludXgvZmIuaAkyMDEwLTA4LTAyIDAwOjExOjE0LjAwMDAwMDAwMCArMDIwMAor
KysgbGludXgtMi42LjM1LXBhdGNoZWQvaW5jbHVkZS9saW51eC9mYi5oCTIwMTAtMDgtMDIgMTc6
MzY6NTYuNDY5MzgxMjI0ICswMjAwCkBAIC04NTgsNiArODU4LDE0IEBACiAJdm9pZCAqZmJjb25f
cGFyOyAgICAgICAgICAgICAgICAvKiBmYmNvbiB1c2Utb25seSBwcml2YXRlIGFyZWEgKi8KIAkv
KiBGcm9tIGhlcmUgb24gZXZlcnl0aGluZyBpcyBkZXZpY2UgZGVwZW5kZW50ICovCiAJdm9pZCAq
cGFyOworI2lmZGVmIENPTkZJR19CT09UU1BMQVNICisgCXN0cnVjdCBzcGxhc2hfZGF0YSAqc3Bs
YXNoX2RhdGE7CisgCXVuc2lnbmVkIGNoYXIgKnNwbGFzaF9waWM7CisgCWludCBzcGxhc2hfcGlj
X3NpemU7CisgCWludCBzcGxhc2hfYnl0ZXM7CisgCWNoYXIgKnNpbGVudF9zY3JlZW5fYmFzZTsJ
LyogcmVhbCBzY3JlZW4gYmFzZSAqLworIAljaGFyIGZiX2N1cnNvcmRhdGFbNjRdOworI2VuZGlm
CiAJLyogd2UgbmVlZCB0aGUgUENJIG9yIHNpbWlsaWFyIGFwZXJ0dXJlIGJhc2Uvc2l6ZSBub3QK
IAkgICBzbWVtX3N0YXJ0L3NpemUgYXMgc21lbV9zdGFydCBtYXkganVzdCBiZSBhbiBvYmplY3QK
IAkgICBhbGxvY2F0ZWQgaW5zaWRlIHRoZSBhcGVydHVyZSBzbyBtYXkgbm90IGFjdHVhbGx5IG92
ZXJsYXAgKi8K
</data>

          </attachment>
      

    </bug>

</bugzilla>