From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by gabe.freedesktop.org (Postfix) with ESMTPS id E35A46E43B for ; Tue, 10 Apr 2018 14:19:23 +0000 (UTC) From: Katarzyna Dec Date: Tue, 10 Apr 2018 16:19:06 +0200 Message-Id: <20180410141920.19641-2-katarzyna.dec@intel.com> In-Reply-To: <20180410112814.11183-1-lukasz.kalamarz@intel.com> References: <20180410112814.11183-1-lukasz.kalamarz@intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t v6 1/4] lib: Move common gpgpu/media fill functions to gpu_fill library List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: igt-dev@lists.freedesktop.org List-ID: R3BncHVfZmlsbCBhbmQgbWVkaWFfZmlsbCBsaWJyYXJpZXMgYXJlIHZlcnkgc2ltaWxhciBhbmQg bWFueQpmdW5jdGlvbnMgY2FuIGJlIHNoYXJlZC4gSSBoYXZlIGNyZWF0ZWQgbGlicmFyeSBncHVf ZmlsbCB3aXRoCmFsbCBmdW5jdGlvbnMgbmVlZGVkIGZvciBpbXBsZW1lbnRpbmcgZ3BncHVfZmls bCBhbmQgbWVkaWFfZmlsbAp0ZXN0cyBmb3IgYWxsIEdlbnMuIEZvciByZXZpZXdpbmcgYW5kIGRl YnVnZ2luZyBwdXJwb3NlcyB0aGlzIHBhdGNoCnNob3VsZCBiZSBvbmx5IG1vdmluZyBmdW5jdGlv bnMgZnJvbSBmZXcgbGlicmFyaWVzIHRvIG9uZSByZW1vdmluZwpmdW5jdGlvbnMgaWRlbnRpY2Fs IGZvciBib3RoIG1lZGlhIGFuZCBncGdwdS4KUGxhY2VzIGluIHRoZSBjb2RlIHRoYXQgcmVxdWly ZWQgbW9yZSBjaGFuZ2VzOgogIFJlbW92aW5nIGdlbjdfZmlsbF9ncGdwdV9rZXJuZWwgZnVuY3Rp b24gdGhhdCBpcyBpZGVudGljYWwgdG8KZ2VuN19maWxsX21lZGlhX2tlcm5lbCBhbmQgaW50cm9k dWNlcyBjb25mbGljdCB3aXRoIG1vdmluZwpnZW5YX2ZpbGxfaW50ZXJmYWNlX2Rlc2NyaXB0b3Is IHdoaWNoIGFyZSB0aGUgc2FtZSBmb3IgbWVkaWEgYW5kIGdwZ3B1LgogIEZ1bmN0aW9uIGdlbjhf ZmlsbF9tZWRpYV9rZXJuZWwgaXMgbm90IHJlbW92ZWQgaW4gdGhpcyBwYXRjaAooYWx0aG91Z2gg aXQgaXMgaWRlbnRpY2FsIHdpdGggZ2VuNyB2ZXJzaW9uKSwgYmVjYXVzZSB0aGlzIHBhdGNoCnNo b3VsZCBiZSBhcyBtdWNoIGFzIHBvc3NpYmxlIGZ1bmN0aW9ucyBtb3ZlbWVudC4KICBnZW44X2Zp bGxfaW50ZXJmYWNlX2Rlc2NyaXB0b3Igd2FzIHVuaWZpZWQgZm9yIG1lZGlhIGFuZCBncGdwdQpi eSBhZGRpbmcga2VybmVsIGFuZCBpdHMgc2l6ZSBhcyBhIHBhcmFtZXRlciAodGhpcyBwYXJhbWV0 ZXJzCndlcmUgbWlzc2luZyBpbiBtZWRpYSBnZW44LCBnZW44bHAgYW5kIGdlbjkgZnVuY3Rpb25z KQogIGdlbjhfZW1pdF9zdGF0ZV9iYXNlX2FkZHJlc3Mgd2FzIHVuaWZpZWQsIHRoZSBvbmUgZm9y IGdwZ3B1IHdhcwpjb25maWd1cmVkIGxpa2UgaXQgd291bGQgYmUgdXNpbmcgaW5kaXJlY3Qgc3Rh dGUgKHdoaWxlIHdlIGFyZQp1c2luZyBDVVJCRSkuIEkgaGF2ZSBjaGVja2VkIHRoYXQgbWVkaWEg ZmlsbCB2ZXJzaW9uCihPVVRfQkFUQ0goMCB8IEJBU0VfQUREUkVTU19NT0RJRlkpKSB3b3JrcyBm aW5lIG9uIGdwZ3B1IGdlbjggYW5kIG5ld2VyLgoKdjI6IENoYW5nZWQgY29kZSBsYXlvdXQuIEdl blhfZmlsbF9tZWRpYV9rZXJuZWwgd2FzIGlkZW50aWNhbCB0bwpnZW5YX2ZpbGxfZ3BncHVfa2Vy bmVsIHNvIHRoaXMgZnVuY3Rpb24gd2FzIHVuaWZpZWQgdG8KZ2VuN19maWxsX2tlcm5lbC4gVGhl cmUgd2VyZSAyIHZlcnkgc2ltaWxhciBmdW5jdGlvbnMKZ2VuOF9lbWl0X3N0YXRlX2Jhc2VfYWRk cmVzcyBmb3IgbWVkaWEgYW5kIGdwZ3B1LCB3aGVyZSB0aGUgb25lCmZvciBncGdwdSB3YXMgY29u ZmlndXJlZCBsaWtlIGl0IHdvdWxkIGJlIHVzaW5nIGluZGlyZWN0IHN0YXRlCih3aGlsZSB3ZSBh cmUgdXNpbmcgQ1VSQkUpLiBJIGhhdmUgY2hlY2tlZCBpZiBtZWRpYSBmaWxsIHZlcnNpb24Kd29y a3MgZmluZSBpbiBncGdwdSB0ZXN0IG9uIEdlbjggYW5kIHVuaWZpZWQgdGhlbS4KCnYzOiBNYWRl IHBhdGNoIGVhc2llciBmb3IgcmV2aWV3aW5nIG1vdmluZyBjaGFuZ2VzIHVuaWZ5aW5nIGNvZGUg Zm9yCnZhcmlvdXMgZ2VucyAodGhhdCB3ZXJlIGluY2x1ZGVkIHYxKSB0byBvdGhlciBwYXRjaCwg bGVhdmluZyBvbmx5CnRoZSBtb3N0IGNyaXRpY2FsIGNvZGUgY2hhbmdlcy4KCnY1OiBBZGRlZCBj b3B5cmlnaHRzIGFuZCAjaWZuZGVmIHRvIGdwdV9maWxsLmgKClNpZ25lZC1vZmYtYnk6IEthdGFy enluYSBEZWMgPGthdGFyenluYS5kZWNAaW50ZWwuY29tPgpDYzogTHVrYXN6IEthbGFtYXJ6IDxs dWthc3oua2FsYW1hcnpAaW50ZWwuY29tPgpDYzogRGFuaWVsZSBDZXJhb2xvIFNwdXJpbyA8ZGFu aWVsZS5jZXJhb2xvc3B1cmlvQGludGVsLmNvbT4KLS0tCiBsaWIvTWFrZWZpbGUuc291cmNlcyAg ICB8ICAgMiArCiBsaWIvZ3BncHVfZmlsbC5jICAgICAgICB8IDU3MSArLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KIGxpYi9ncHVfZmlsbC5jICAgICAgICAgIHwgNzU4ICsrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogbGliL2dwdV9maWxs LmggICAgICAgICAgfCAxNjYgKysrKysrKysrKysKIGxpYi9tZWRpYV9maWxsX2dlbjcuYyAgIHwg MjcxICstLS0tLS0tLS0tLS0tLS0tCiBsaWIvbWVkaWFfZmlsbF9nZW44LmMgICB8IDI5MCArLS0t LS0tLS0tLS0tLS0tLS0KIGxpYi9tZWRpYV9maWxsX2dlbjhscC5jIHwgMjg0ICstLS0tLS0tLS0t LS0tLS0tLQogbGliL21lZGlhX2ZpbGxfZ2VuOS5jICAgfCAyOTggKy0tLS0tLS0tLS0tLS0tLS0t LQogbGliL21lc29uLmJ1aWxkICAgICAgICAgfCAgIDEgKwogOSBmaWxlcyBjaGFuZ2VkLCA5MzYg aW5zZXJ0aW9ucygrKSwgMTcwNSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIv Z3B1X2ZpbGwuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi9ncHVfZmlsbC5oCgpkaWZmIC0tZ2l0 IGEvbGliL01ha2VmaWxlLnNvdXJjZXMgYi9saWIvTWFrZWZpbGUuc291cmNlcwppbmRleCAzZDM3 ZWYxZC4uNDVlNjVkZDcgMTAwNjQ0Ci0tLSBhL2xpYi9NYWtlZmlsZS5zb3VyY2VzCisrKyBiL2xp Yi9NYWtlZmlsZS5zb3VyY2VzCkBAIC02NCw2ICs2NCw4IEBAIGxpYl9zb3VyY2VfbGlzdCA9CSAJ XAogCW1lZGlhX3NwaW4uYwkJXAogCWdwZ3B1X2ZpbGwuaAkJXAogCWdwZ3B1X2ZpbGwuYwkJXAor CWdwdV9maWxsLmgJCVwKKwlncHVfZmlsbC5jCQlcCiAJZ2VuN19tZWRpYS5oICAgICAgICAgICAg XAogCWdlbjhfbWVkaWEuaCAgICAgICAgICAgIFwKIAlyZW5kZXJjb3B5X2k5MTUuYwlcCmRpZmYg LS1naXQgYS9saWIvZ3BncHVfZmlsbC5jIGIvbGliL2dwZ3B1X2ZpbGwuYwppbmRleCA0ZDk4NjQz ZC4uZjI3NjVmZDYgMTAwNjQ0Ci0tLSBhL2xpYi9ncGdwdV9maWxsLmMKKysrIGIvbGliL2dwZ3B1 X2ZpbGwuYwpAQCAtMzAsMTAgKzMwLDkgQEAKIAogI2luY2x1ZGUgImludGVsX3JlZy5oIgogI2lu Y2x1ZGUgImRybXRlc3QuaCIKLSNpbmNsdWRlICJpbnRlbF9iYXRjaGJ1ZmZlci5oIgotI2luY2x1 ZGUgImdlbjdfbWVkaWEuaCIKLSNpbmNsdWRlICJnZW44X21lZGlhLmgiCisKICNpbmNsdWRlICJn cGdwdV9maWxsLmgiCisjaW5jbHVkZSAiZ3B1X2ZpbGwuaCIKIAogLyogc2hhZGVycy9ncGdwdS9n cGdwdV9maWxsLmd4YSAqLwogc3RhdGljIGNvbnN0IHVpbnQzMl90IGdlbjdfZ3BncHVfa2VybmVs W11bNF0gPSB7CkBAIC03NSw1NzIgKzc0LDYgQEAgc3RhdGljIGNvbnN0IHVpbnQzMl90IGdlbjlf Z3BncHVfa2VybmVsW11bNF0gPSB7CiAJeyAweDA3ODAwMDMxLCAweDIwMDAwYTQwLCAweDA2MDAw ZTAwLCAweDgyMDAwMDEwIH0sCiB9OwogCi1zdGF0aWMgdWludDMyX3QKLWJhdGNoX3VzZWQoc3Ry dWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCkKLXsKLQlyZXR1cm4gYmF0Y2gtPnB0ciAtIGJh dGNoLT5idWZmZXI7Ci19Ci0KLXN0YXRpYyB1aW50MzJfdAotYmF0Y2hfYWxpZ24oc3RydWN0IGlu dGVsX2JhdGNoYnVmZmVyICpiYXRjaCwgdWludDMyX3QgYWxpZ24pCi17Ci0JdWludDMyX3Qgb2Zm c2V0ID0gYmF0Y2hfdXNlZChiYXRjaCk7Ci0Jb2Zmc2V0ID0gQUxJR04ob2Zmc2V0LCBhbGlnbik7 Ci0JYmF0Y2gtPnB0ciA9IGJhdGNoLT5idWZmZXIgKyBvZmZzZXQ7Ci0JcmV0dXJuIG9mZnNldDsK LX0KLQotc3RhdGljIHZvaWQgKgotYmF0Y2hfYWxsb2Moc3RydWN0IGludGVsX2JhdGNoYnVmZmVy ICpiYXRjaCwgdWludDMyX3Qgc2l6ZSwgdWludDMyX3QgYWxpZ24pCi17Ci0JdWludDMyX3Qgb2Zm c2V0ID0gYmF0Y2hfYWxpZ24oYmF0Y2gsIGFsaWduKTsKLQliYXRjaC0+cHRyICs9IHNpemU7Ci0J cmV0dXJuIG1lbXNldChiYXRjaC0+YnVmZmVyICsgb2Zmc2V0LCAwLCBzaXplKTsKLX0KLQotc3Rh dGljIHVpbnQzMl90Ci1iYXRjaF9vZmZzZXQoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRj aCwgdm9pZCAqcHRyKQotewotCXJldHVybiAodWludDhfdCAqKXB0ciAtIGJhdGNoLT5idWZmZXI7 Ci19Ci0KLXN0YXRpYyB1aW50MzJfdAotYmF0Y2hfY29weShzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZm ZXIgKmJhdGNoLCBjb25zdCB2b2lkICpwdHIsIHVpbnQzMl90IHNpemUsCi0JICAgdWludDMyX3Qg YWxpZ24pCi17Ci0JcmV0dXJuIGJhdGNoX29mZnNldChiYXRjaCwgbWVtY3B5KGJhdGNoX2FsbG9j KGJhdGNoLCBzaXplLCBhbGlnbiksIHB0ciwgc2l6ZSkpOwotfQotCi1zdGF0aWMgdm9pZAotZ2Vu N19yZW5kZXJfZmx1c2goc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwgdWludDMyX3Qg YmF0Y2hfZW5kKQotewotCWludCByZXQ7Ci0KLQlyZXQgPSBkcm1faW50ZWxfYm9fc3ViZGF0YShi YXRjaC0+Ym8sIDAsIDQwOTYsIGJhdGNoLT5idWZmZXIpOwotCWlmIChyZXQgPT0gMCkKLQkJcmV0 ID0gZHJtX2ludGVsX2JvX21yYl9leGVjKGJhdGNoLT5ibywgYmF0Y2hfZW5kLAotCQkJCQlOVUxM LCAwLCAwLCAwKTsKLQlpZ3RfYXNzZXJ0KHJldCA9PSAwKTsKLX0KLQotc3RhdGljIHVpbnQzMl90 Ci1nZW43X2ZpbGxfY3VyYmVfYnVmZmVyX2RhdGEoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpi YXRjaCwgdWludDhfdCBjb2xvcikKLXsKLQl1aW50OF90ICpjdXJiZV9idWZmZXI7Ci0JdWludDMy X3Qgb2Zmc2V0OwotCi0JY3VyYmVfYnVmZmVyID0gYmF0Y2hfYWxsb2MoYmF0Y2gsIHNpemVvZih1 aW50MzJfdCkgKiA4LCA2NCk7Ci0Jb2Zmc2V0ID0gYmF0Y2hfb2Zmc2V0KGJhdGNoLCBjdXJiZV9i dWZmZXIpOwotCSpjdXJiZV9idWZmZXIgPSBjb2xvcjsKLQotCXJldHVybiBvZmZzZXQ7Ci19Ci0K LXN0YXRpYyB1aW50MzJfdAotZ2VuN19maWxsX3N1cmZhY2Vfc3RhdGUoc3RydWN0IGludGVsX2Jh dGNoYnVmZmVyICpiYXRjaCwKLQkJCXN0cnVjdCBpZ3RfYnVmICpidWYsCi0JCQl1aW50MzJfdCBm b3JtYXQsCi0JCQlpbnQgaXNfZHN0KQotewotCXN0cnVjdCBnZW43X3N1cmZhY2Vfc3RhdGUgKnNz OwotCXVpbnQzMl90IHdyaXRlX2RvbWFpbiwgcmVhZF9kb21haW4sIG9mZnNldDsKLQlpbnQgcmV0 OwotCi0JaWYgKGlzX2RzdCkgewotCQl3cml0ZV9kb21haW4gPSByZWFkX2RvbWFpbiA9IEk5MTVf R0VNX0RPTUFJTl9SRU5ERVI7Ci0JfSBlbHNlIHsKLQkJd3JpdGVfZG9tYWluID0gMDsKLQkJcmVh ZF9kb21haW4gPSBJOTE1X0dFTV9ET01BSU5fU0FNUExFUjsKLQl9Ci0KLQlzcyA9IGJhdGNoX2Fs bG9jKGJhdGNoLCBzaXplb2YoKnNzKSwgNjQpOwotCW9mZnNldCA9IGJhdGNoX29mZnNldChiYXRj aCwgc3MpOwotCi0Jc3MtPnNzMC5zdXJmYWNlX3R5cGUgPSBHRU43X1NVUkZBQ0VfMkQ7Ci0Jc3Mt PnNzMC5zdXJmYWNlX2Zvcm1hdCA9IGZvcm1hdDsKLQlzcy0+c3MwLnJlbmRlcl9jYWNoZV9yZWFk X3dyaXRlID0gMTsKLQotCWlmIChidWYtPnRpbGluZyA9PSBJOTE1X1RJTElOR19YKQotCQlzcy0+ c3MwLnRpbGVkX21vZGUgPSAyOwotCWVsc2UgaWYgKGJ1Zi0+dGlsaW5nID09IEk5MTVfVElMSU5H X1kpCi0JCXNzLT5zczAudGlsZWRfbW9kZSA9IDM7Ci0KLQlzcy0+c3MxLmJhc2VfYWRkciA9IGJ1 Zi0+Ym8tPm9mZnNldDsKLQlyZXQgPSBkcm1faW50ZWxfYm9fZW1pdF9yZWxvYyhiYXRjaC0+Ym8s Ci0JCQkJYmF0Y2hfb2Zmc2V0KGJhdGNoLCBzcykgKyA0LAotCQkJCWJ1Zi0+Ym8sIDAsCi0JCQkJ cmVhZF9kb21haW4sIHdyaXRlX2RvbWFpbik7Ci0JaWd0X2Fzc2VydChyZXQgPT0gMCk7Ci0KLQlz cy0+c3MyLmhlaWdodCA9IGlndF9idWZfaGVpZ2h0KGJ1ZikgLSAxOwotCXNzLT5zczIud2lkdGgg ID0gaWd0X2J1Zl93aWR0aChidWYpIC0gMTsKLQotCXNzLT5zczMucGl0Y2ggID0gYnVmLT5zdHJp ZGUgLSAxOwotCi0Jc3MtPnNzNy5zaGFkZXJfY2hhbmVsX3NlbGVjdF9yID0gNDsKLQlzcy0+c3M3 LnNoYWRlcl9jaGFuZWxfc2VsZWN0X2cgPSA1OwotCXNzLT5zczcuc2hhZGVyX2NoYW5lbF9zZWxl Y3RfYiA9IDY7Ci0Jc3MtPnNzNy5zaGFkZXJfY2hhbmVsX3NlbGVjdF9hID0gNzsKLQotCXJldHVy biBvZmZzZXQ7Ci19Ci0KLXN0YXRpYyB1aW50MzJfdAotZ2VuOF9maWxsX3N1cmZhY2Vfc3RhdGUo c3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKLQkJCXN0cnVjdCBpZ3RfYnVmICpidWYs Ci0JCQl1aW50MzJfdCBmb3JtYXQsCi0JCQlpbnQgaXNfZHN0KQotewotCXN0cnVjdCBnZW44X3N1 cmZhY2Vfc3RhdGUgKnNzOwotCXVpbnQzMl90IHdyaXRlX2RvbWFpbiwgcmVhZF9kb21haW4sIG9m ZnNldDsKLQlpbnQgcmV0OwotCi0JaWYgKGlzX2RzdCkgewotCQl3cml0ZV9kb21haW4gPSByZWFk X2RvbWFpbiA9IEk5MTVfR0VNX0RPTUFJTl9SRU5ERVI7Ci0JfSBlbHNlIHsKLQkJd3JpdGVfZG9t YWluID0gMDsKLQkJcmVhZF9kb21haW4gPSBJOTE1X0dFTV9ET01BSU5fU0FNUExFUjsKLQl9Ci0K LQlzcyA9IGJhdGNoX2FsbG9jKGJhdGNoLCBzaXplb2YoKnNzKSwgNjQpOwotCW9mZnNldCA9IGJh dGNoX29mZnNldChiYXRjaCwgc3MpOwotCi0Jc3MtPnNzMC5zdXJmYWNlX3R5cGUgPSBHRU44X1NV UkZBQ0VfMkQ7Ci0Jc3MtPnNzMC5zdXJmYWNlX2Zvcm1hdCA9IGZvcm1hdDsKLQlzcy0+c3MwLnJl bmRlcl9jYWNoZV9yZWFkX3dyaXRlID0gMTsKLQlzcy0+c3MwLnZlcnRpY2FsX2FsaWdubWVudCA9 IDE7IC8qIGFsaWduIDQgKi8KLQlzcy0+c3MwLmhvcml6b250YWxfYWxpZ25tZW50ID0gMTsgLyog YWxpZ24gNCAqLwotCi0JaWYgKGJ1Zi0+dGlsaW5nID09IEk5MTVfVElMSU5HX1gpCi0JCXNzLT5z czAudGlsZWRfbW9kZSA9IDI7Ci0JZWxzZSBpZiAoYnVmLT50aWxpbmcgPT0gSTkxNV9USUxJTkdf WSkKLQkJc3MtPnNzMC50aWxlZF9tb2RlID0gMzsKLQotCXNzLT5zczguYmFzZV9hZGRyID0gYnVm LT5iby0+b2Zmc2V0OwotCi0JcmV0ID0gZHJtX2ludGVsX2JvX2VtaXRfcmVsb2MoYmF0Y2gtPmJv LAotCQkJCWJhdGNoX29mZnNldChiYXRjaCwgc3MpICsgOCAqIDQsCi0JCQkJYnVmLT5ibywgMCwK LQkJCQlyZWFkX2RvbWFpbiwgd3JpdGVfZG9tYWluKTsKLQlpZ3RfYXNzZXJ0X2VxKHJldCwgMCk7 Ci0KLQlzcy0+c3MyLmhlaWdodCA9IGlndF9idWZfaGVpZ2h0KGJ1ZikgLSAxOwotCXNzLT5zczIu d2lkdGggID0gaWd0X2J1Zl93aWR0aChidWYpIC0gMTsKLQlzcy0+c3MzLnBpdGNoICA9IGJ1Zi0+ c3RyaWRlIC0gMTsKLQotCXNzLT5zczcuc2hhZGVyX2NoYW5lbF9zZWxlY3RfciA9IDQ7Ci0Jc3Mt PnNzNy5zaGFkZXJfY2hhbmVsX3NlbGVjdF9nID0gNTsKLQlzcy0+c3M3LnNoYWRlcl9jaGFuZWxf c2VsZWN0X2IgPSA2OwotCXNzLT5zczcuc2hhZGVyX2NoYW5lbF9zZWxlY3RfYSA9IDc7Ci0KLQly ZXR1cm4gb2Zmc2V0OwotCi19Ci0KLXN0YXRpYyB1aW50MzJfdAotZ2VuN19maWxsX2JpbmRpbmdf dGFibGUoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKLQkJCXN0cnVjdCBpZ3RfYnVm ICpkc3QpCi17Ci0JdWludDMyX3QgKmJpbmRpbmdfdGFibGUsIG9mZnNldDsKLQotCWJpbmRpbmdf dGFibGUgPSBiYXRjaF9hbGxvYyhiYXRjaCwgMzIsIDY0KTsKLQlvZmZzZXQgPSBiYXRjaF9vZmZz ZXQoYmF0Y2gsIGJpbmRpbmdfdGFibGUpOwotCi0JYmluZGluZ190YWJsZVswXSA9IGdlbjdfZmls bF9zdXJmYWNlX3N0YXRlKGJhdGNoLCBkc3QsIEdFTjdfU1VSRkFDRUZPUk1BVF9SOF9VTk9STSwg MSk7Ci0KLQlyZXR1cm4gb2Zmc2V0OwotfQotCi1zdGF0aWMgdWludDMyX3QKLWdlbjhfZmlsbF9i aW5kaW5nX3RhYmxlKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCi0JCQlzdHJ1Y3Qg aWd0X2J1ZiAqZHN0KQotewotCXVpbnQzMl90ICpiaW5kaW5nX3RhYmxlLCBvZmZzZXQ7Ci0KLQli aW5kaW5nX3RhYmxlID0gYmF0Y2hfYWxsb2MoYmF0Y2gsIDMyLCA2NCk7Ci0Jb2Zmc2V0ID0gYmF0 Y2hfb2Zmc2V0KGJhdGNoLCBiaW5kaW5nX3RhYmxlKTsKLQotCWJpbmRpbmdfdGFibGVbMF0gPSBn ZW44X2ZpbGxfc3VyZmFjZV9zdGF0ZShiYXRjaCwgZHN0LCBHRU44X1NVUkZBQ0VGT1JNQVRfUjhf VU5PUk0sIDEpOwotCi0JcmV0dXJuIG9mZnNldDsKLX0KLQotc3RhdGljIHVpbnQzMl90Ci1nZW43 X2ZpbGxfZ3BncHVfa2VybmVsKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCi0JCWNv bnN0IHVpbnQzMl90IGtlcm5lbFtdWzRdLAotCQlzaXplX3Qgc2l6ZSkKLXsKLQl1aW50MzJfdCBv ZmZzZXQ7Ci0KLQlvZmZzZXQgPSBiYXRjaF9jb3B5KGJhdGNoLCBrZXJuZWwsIHNpemUsIDY0KTsK LQotCXJldHVybiBvZmZzZXQ7Ci19Ci0KLXN0YXRpYyB1aW50MzJfdAotZ2VuN19maWxsX2ludGVy ZmFjZV9kZXNjcmlwdG9yKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsIHN0cnVjdCBp Z3RfYnVmICpkc3QsCi0JCQkgICAgICAgY29uc3QgdWludDMyX3Qga2VybmVsW11bNF0sIHNpemVf dCBzaXplKQotewotCXN0cnVjdCBnZW43X2ludGVyZmFjZV9kZXNjcmlwdG9yX2RhdGEgKmlkZDsK LQl1aW50MzJfdCBvZmZzZXQ7Ci0JdWludDMyX3QgYmluZGluZ190YWJsZV9vZmZzZXQsIGtlcm5l bF9vZmZzZXQ7Ci0KLQliaW5kaW5nX3RhYmxlX29mZnNldCA9IGdlbjdfZmlsbF9iaW5kaW5nX3Rh YmxlKGJhdGNoLCBkc3QpOwotCWtlcm5lbF9vZmZzZXQgPSBnZW43X2ZpbGxfZ3BncHVfa2VybmVs KGJhdGNoLCBrZXJuZWwsIHNpemUpOwotCi0JaWRkID0gYmF0Y2hfYWxsb2MoYmF0Y2gsIHNpemVv ZigqaWRkKSwgNjQpOwotCW9mZnNldCA9IGJhdGNoX29mZnNldChiYXRjaCwgaWRkKTsKLQotCWlk ZC0+ZGVzYzAua2VybmVsX3N0YXJ0X3BvaW50ZXIgPSAoa2VybmVsX29mZnNldCA+PiA2KTsKLQot CWlkZC0+ZGVzYzEuc2luZ2xlX3Byb2dyYW1fZmxvdyA9IDE7Ci0JaWRkLT5kZXNjMS5mbG9hdGlu Z19wb2ludF9tb2RlID0gR0VON19GTE9BVElOR19QT0lOVF9JRUVFXzc1NDsKLQotCWlkZC0+ZGVz YzIuc2FtcGxlcl9jb3VudCA9IDA7ICAgICAgLyogMCBzYW1wbGVycyB1c2VkICovCi0JaWRkLT5k ZXNjMi5zYW1wbGVyX3N0YXRlX3BvaW50ZXIgPSAwOwotCi0JaWRkLT5kZXNjMy5iaW5kaW5nX3Rh YmxlX2VudHJ5X2NvdW50ID0gMDsKLQlpZGQtPmRlc2MzLmJpbmRpbmdfdGFibGVfcG9pbnRlciA9 IChiaW5kaW5nX3RhYmxlX29mZnNldCA+PiA1KTsKLQotCWlkZC0+ZGVzYzQuY29uc3RhbnRfdXJi X2VudHJ5X3JlYWRfb2Zmc2V0ID0gMDsKLQlpZGQtPmRlc2M0LmNvbnN0YW50X3VyYl9lbnRyeV9y ZWFkX2xlbmd0aCA9IDE7IC8qIGdyZiAxICovCi0KLQlyZXR1cm4gb2Zmc2V0OwotfQotCi1zdGF0 aWMgdWludDMyX3QKLWdlbjhfZmlsbF9pbnRlcmZhY2VfZGVzY3JpcHRvcihzdHJ1Y3QgaW50ZWxf YmF0Y2hidWZmZXIgKmJhdGNoLCBzdHJ1Y3QgaWd0X2J1ZiAqZHN0LAotCQkJICAgICAgIGNvbnN0 IHVpbnQzMl90IGtlcm5lbFtdWzRdLCBzaXplX3Qgc2l6ZSkKLXsKLQlzdHJ1Y3QgZ2VuOF9pbnRl cmZhY2VfZGVzY3JpcHRvcl9kYXRhICppZGQ7Ci0JdWludDMyX3Qgb2Zmc2V0OwotCXVpbnQzMl90 IGJpbmRpbmdfdGFibGVfb2Zmc2V0LCBrZXJuZWxfb2Zmc2V0OwotCi0JYmluZGluZ190YWJsZV9v ZmZzZXQgPSBnZW44X2ZpbGxfYmluZGluZ190YWJsZShiYXRjaCwgZHN0KTsKLQlrZXJuZWxfb2Zm c2V0ID0gZ2VuN19maWxsX2dwZ3B1X2tlcm5lbChiYXRjaCwga2VybmVsLCBzaXplKTsKLQotCWlk ZCA9IGJhdGNoX2FsbG9jKGJhdGNoLCBzaXplb2YoKmlkZCksIDY0KTsKLQlvZmZzZXQgPSBiYXRj aF9vZmZzZXQoYmF0Y2gsIGlkZCk7Ci0KLQlpZGQtPmRlc2MwLmtlcm5lbF9zdGFydF9wb2ludGVy ID0gKGtlcm5lbF9vZmZzZXQgPj4gNik7Ci0KLQlpZGQtPmRlc2MyLnNpbmdsZV9wcm9ncmFtX2Zs b3cgPSAxOwotCWlkZC0+ZGVzYzIuZmxvYXRpbmdfcG9pbnRfbW9kZSA9IEdFTjhfRkxPQVRJTkdf UE9JTlRfSUVFRV83NTQ7Ci0KLQlpZGQtPmRlc2MzLnNhbXBsZXJfY291bnQgPSAwOyAgICAgIC8q IDAgc2FtcGxlcnMgdXNlZCAqLwotCWlkZC0+ZGVzYzMuc2FtcGxlcl9zdGF0ZV9wb2ludGVyID0g MDsKLQotCWlkZC0+ZGVzYzQuYmluZGluZ190YWJsZV9lbnRyeV9jb3VudCA9IDA7Ci0JaWRkLT5k ZXNjNC5iaW5kaW5nX3RhYmxlX3BvaW50ZXIgPSAoYmluZGluZ190YWJsZV9vZmZzZXQgPj4gNSk7 Ci0KLQlpZGQtPmRlc2M1LmNvbnN0YW50X3VyYl9lbnRyeV9yZWFkX29mZnNldCA9IDA7Ci0JaWRk LT5kZXNjNS5jb25zdGFudF91cmJfZW50cnlfcmVhZF9sZW5ndGggPSAxOyAvKiBncmYgMSAqLwot Ci0JcmV0dXJuIG9mZnNldDsKLX0KLQotc3RhdGljIHZvaWQKLWdlbjdfZW1pdF9zdGF0ZV9iYXNl X2FkZHJlc3Moc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCkKLXsKLQlPVVRfQkFUQ0go R0VON19TVEFURV9CQVNFX0FERFJFU1MgfCAoMTAgLSAyKSk7Ci0KLQkvKiBnZW5lcmFsICovCi0J T1VUX0JBVENIKDApOwotCi0JLyogc3VyZmFjZSAqLwotCU9VVF9SRUxPQyhiYXRjaC0+Ym8sIEk5 MTVfR0VNX0RPTUFJTl9JTlNUUlVDVElPTiwgMCwgQkFTRV9BRERSRVNTX01PRElGWSk7Ci0KLQkv KiBkeW5hbWljICovCi0JT1VUX1JFTE9DKGJhdGNoLT5ibywgSTkxNV9HRU1fRE9NQUlOX0lOU1RS VUNUSU9OLCAwLCBCQVNFX0FERFJFU1NfTU9ESUZZKTsKLQotCS8qIGluZGlyZWN0ICovCi0JT1VU X0JBVENIKDApOwotCi0JLyogaW5zdHJ1Y3Rpb24gKi8KLQlPVVRfUkVMT0MoYmF0Y2gtPmJvLCBJ OTE1X0dFTV9ET01BSU5fSU5TVFJVQ1RJT04sIDAsIEJBU0VfQUREUkVTU19NT0RJRlkpOwotCi0J LyogZ2VuZXJhbC9keW5hbWljL2luZGlyZWN0L2luc3RydWN0aW9uIGFjY2VzcyBCb3VuZCAqLwot CU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCB8IEJBU0VfQUREUkVTU19NT0RJRlkpOwotCU9V VF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCB8IEJBU0VfQUREUkVTU19NT0RJRlkpOwotfQotCi1z dGF0aWMgdm9pZAotZ2VuOF9lbWl0X3N0YXRlX2Jhc2VfYWRkcmVzcyhzdHJ1Y3QgaW50ZWxfYmF0 Y2hidWZmZXIgKmJhdGNoKQotewotCU9VVF9CQVRDSChHRU44X1NUQVRFX0JBU0VfQUREUkVTUyB8 ICgxNiAtIDIpKTsKLQotCS8qIGdlbmVyYWwgKi8KLQlPVVRfQkFUQ0goMCB8ICgweDc4IDw8IDQp IHwgKDAgPDwgMSkgfCAgQkFTRV9BRERSRVNTX01PRElGWSk7Ci0JT1VUX0JBVENIKDApOwotCi0J Lyogc3RhdGVsZXNzIGRhdGEgcG9ydCAqLwotCU9VVF9CQVRDSCgwIHwgQkFTRV9BRERSRVNTX01P RElGWSk7Ci0KLQkvKiBzdXJmYWNlICovCi0JT1VUX1JFTE9DKGJhdGNoLT5ibywgSTkxNV9HRU1f RE9NQUlOX1NBTVBMRVIsIDAsIEJBU0VfQUREUkVTU19NT0RJRlkpOwotCi0JLyogZHluYW1pYyAq LwotCU9VVF9SRUxPQyhiYXRjaC0+Ym8sIEk5MTVfR0VNX0RPTUFJTl9SRU5ERVIgfCBJOTE1X0dF TV9ET01BSU5fSU5TVFJVQ1RJT04sCi0JCSAgMCwgQkFTRV9BRERSRVNTX01PRElGWSk7Ci0KLQkv KiBpbmRpcmVjdCAqLwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCApOwotCi0JLyogaW5z dHJ1Y3Rpb24gKi8KLQlPVVRfUkVMT0MoYmF0Y2gtPmJvLCBJOTE1X0dFTV9ET01BSU5fSU5TVFJV Q1RJT04sIDAsIEJBU0VfQUREUkVTU19NT0RJRlkpOwotCi0JLyogZ2VuZXJhbCBzdGF0ZSBidWZm ZXIgc2l6ZSAqLwotCU9VVF9CQVRDSCgweGZmZmZmMDAwIHwgMSk7Ci0JLyogZHluYW1pYyBzdGF0 ZSBidWZmZXIgc2l6ZSAqLwotCU9VVF9CQVRDSCgxIDw8IDEyIHwgMSk7Ci0JLyogaW5kaXJlY3Qg b2JqZWN0IGJ1ZmZlciBzaXplICovCi0JT1VUX0JBVENIKDB4ZmZmZmYwMDAgfCAxKTsKLQkvKiBp bnRydWN0aW9uIGJ1ZmZlciBzaXplLCBtdXN0IHNldCBtb2RpZnkgZW5hYmxlIGJpdCwgb3RoZXJ3 aXNlIGl0IG1heSByZXN1bHQgaW4gR1BVIGhhbmcgKi8KLQlPVVRfQkFUQ0goMSA8PCAxMiB8IDEp OwotfQotCi1zdGF0aWMgdm9pZAotZ2VuOV9lbWl0X3N0YXRlX2Jhc2VfYWRkcmVzcyhzdHJ1Y3Qg aW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoKQotewotCU9VVF9CQVRDSChHRU44X1NUQVRFX0JBU0Vf QUREUkVTUyB8ICgxOSAtIDIpKTsKLQotCS8qIGdlbmVyYWwgKi8KLQlPVVRfQkFUQ0goMCB8IEJB U0VfQUREUkVTU19NT0RJRlkpOwotCU9VVF9CQVRDSCgwKTsKLQotCS8qIHN0YXRlbGVzcyBkYXRh IHBvcnQgKi8KLQlPVVRfQkFUQ0goMCB8IEJBU0VfQUREUkVTU19NT0RJRlkpOwotCi0JLyogc3Vy ZmFjZSAqLwotCU9VVF9SRUxPQyhiYXRjaC0+Ym8sIEk5MTVfR0VNX0RPTUFJTl9TQU1QTEVSLCAw LCBCQVNFX0FERFJFU1NfTU9ESUZZKTsKLQotCS8qIGR5bmFtaWMgKi8KLQlPVVRfUkVMT0MoYmF0 Y2gtPmJvLCBJOTE1X0dFTV9ET01BSU5fUkVOREVSIHwgSTkxNV9HRU1fRE9NQUlOX0lOU1RSVUNU SU9OLAotCQkwLCBCQVNFX0FERFJFU1NfTU9ESUZZKTsKLQotCS8qIGluZGlyZWN0ICovCi0JT1VU X0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQotCS8qIGluc3RydWN0aW9uICovCi0JT1VUX1JF TE9DKGJhdGNoLT5ibywgSTkxNV9HRU1fRE9NQUlOX0lOU1RSVUNUSU9OLCAwLCBCQVNFX0FERFJF U1NfTU9ESUZZKTsKLQotCS8qIGdlbmVyYWwgc3RhdGUgYnVmZmVyIHNpemUgKi8KLQlPVVRfQkFU Q0goMHhmZmZmZjAwMCB8IDEpOwotCS8qIGR5bmFtaWMgc3RhdGUgYnVmZmVyIHNpemUgKi8KLQlP VVRfQkFUQ0goMSA8PCAxMiB8IDEpOwotCS8qIGluZGlyZWN0IG9iamVjdCBidWZmZXIgc2l6ZSAq LwotCU9VVF9CQVRDSCgweGZmZmZmMDAwIHwgMSk7Ci0JLyogaW50cnVjdGlvbiBidWZmZXIgc2l6 ZSwgbXVzdCBzZXQgbW9kaWZ5IGVuYWJsZSBiaXQsIG90aGVyd2lzZSBpdCBtYXkgcmVzdWx0IGlu IEdQVSBoYW5nICovCi0JT1VUX0JBVENIKDEgPDwgMTIgfCAxKTsKLQotCS8qIEJpbmRsZXNzIHN1 cmZhY2Ugc3RhdGUgYmFzZSBhZGRyZXNzICovCi0JT1VUX0JBVENIKDAgfCBCQVNFX0FERFJFU1Nf TU9ESUZZKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDB4ZmZmZmYwMDApOwotfQotCi1z dGF0aWMgdm9pZAotZ2VuN19lbWl0X3ZmZV9zdGF0ZV9ncGdwdShzdHJ1Y3QgaW50ZWxfYmF0Y2hi dWZmZXIgKmJhdGNoKQotewotCU9VVF9CQVRDSChHRU43X01FRElBX1ZGRV9TVEFURSB8ICg4IC0g MikpOwotCi0JLyogc2NyYXRjaCBidWZmZXIgKi8KLQlPVVRfQkFUQ0goMCk7Ci0KLQkvKiBudW1i ZXIgb2YgdGhyZWFkcyAmIHVyYiBlbnRyaWVzICovCi0JT1VUX0JBVENIKDEgPDwgMTYgfCAvKiBt YXggbnVtIG9mIHRocmVhZHMgKi8KLQkJICAwIDw8IDggfCAvKiBudW0gb2YgVVJCIGVudHJ5ICov Ci0JCSAgMSA8PCAyKTsgLyogR1BHUFUgbW9kZSAqLwotCi0JT1VUX0JBVENIKDApOwotCi0JLyog dXJiIGVudHJ5IHNpemUgJiBjdXJiZSBzaXplICovCi0JT1VUX0JBVENIKDAgPDwgMTYgfCAJLyog VVJCIGVudHJ5IHNpemUgaW4gMjU2IGJpdHMgdW5pdCAqLwotCQkgIDEpOwkJLyogQ1VSQkUgZW50 cnkgc2l6ZSBpbiAyNTYgYml0cyB1bml0ICovCi0KLQkvKiBzY29yZWJvYXJkICovCi0JT1VUX0JB VENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci19Ci0KLXN0YXRpYyB2b2lk Ci1nZW44X2VtaXRfdmZlX3N0YXRlX2dwZ3B1KHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0 Y2gpCi17Ci0JT1VUX0JBVENIKEdFTjhfTUVESUFfVkZFX1NUQVRFIHwgKDkgLSAyKSk7Ci0KLQkv KiBzY3JhdGNoIGJ1ZmZlciAqLwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0KLQkv KiBudW1iZXIgb2YgdGhyZWFkcyAmIHVyYiBlbnRyaWVzICovCi0JT1VUX0JBVENIKDEgPDwgMTYg fCAxIDw8IDgpOwotCi0JT1VUX0JBVENIKDApOwotCi0JLyogdXJiIGVudHJ5IHNpemUgJiBjdXJi ZSBzaXplICovCi0JT1VUX0JBVENIKDAgPDwgMTYgfCAxKTsKLQotCS8qIHNjb3JlYm9hcmQgKi8K LQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLX0KLQotc3Rh dGljIHZvaWQKLWdlbjdfZW1pdF9jdXJiZV9sb2FkKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAq YmF0Y2gsIHVpbnQzMl90IGN1cmJlX2J1ZmZlcikKLXsKLQlPVVRfQkFUQ0goR0VON19NRURJQV9D VVJCRV9MT0FEIHwgKDQgLSAyKSk7Ci0JT1VUX0JBVENIKDApOwotCS8qIGN1cmJlIHRvdGFsIGRh dGEgbGVuZ3RoICovCi0JT1VUX0JBVENIKDY0KTsKLQkvKiBjdXJiZSBkYXRhIHN0YXJ0IGFkZHJl c3MsIGlzIHJlbGF0aXZlIHRvIHRoZSBkeW5hbWljcyBiYXNlIGFkZHJlc3MgKi8KLQlPVVRfQkFU Q0goY3VyYmVfYnVmZmVyKTsKLX0KLQotc3RhdGljIHZvaWQKLWdlbjdfZW1pdF9pbnRlcmZhY2Vf ZGVzY3JpcHRvcl9sb2FkKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsIHVpbnQzMl90 IGludGVyZmFjZV9kZXNjcmlwdG9yKQotewotCU9VVF9CQVRDSChHRU43X01FRElBX0lOVEVSRkFD RV9ERVNDUklQVE9SX0xPQUQgfCAoNCAtIDIpKTsKLQlPVVRfQkFUQ0goMCk7Ci0JLyogaW50ZXJm YWNlIGRlc2NyaXB0b3IgZGF0YSBsZW5ndGggKi8KLQlPVVRfQkFUQ0goc2l6ZW9mKHN0cnVjdCBn ZW43X2ludGVyZmFjZV9kZXNjcmlwdG9yX2RhdGEpKTsKLQkvKiBpbnRlcmZhY2UgZGVzY3JpcHRv ciBhZGRyZXNzLCBpcyByZWxhdGl2ZSB0byB0aGUgZHluYW1pY3MgYmFzZSBhZGRyZXNzICovCi0J T1VUX0JBVENIKGludGVyZmFjZV9kZXNjcmlwdG9yKTsKLX0KLQotc3RhdGljIHZvaWQKLWdlbjhf ZW1pdF9pbnRlcmZhY2VfZGVzY3JpcHRvcl9sb2FkKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAq YmF0Y2gsIHVpbnQzMl90IGludGVyZmFjZV9kZXNjcmlwdG9yKQotewotCU9VVF9CQVRDSChHRU44 X01FRElBX0lOVEVSRkFDRV9ERVNDUklQVE9SX0xPQUQgfCAoNCAtIDIpKTsKLQlPVVRfQkFUQ0go MCk7Ci0JLyogaW50ZXJmYWNlIGRlc2NyaXB0b3IgZGF0YSBsZW5ndGggKi8KLQlPVVRfQkFUQ0go c2l6ZW9mKHN0cnVjdCBnZW44X2ludGVyZmFjZV9kZXNjcmlwdG9yX2RhdGEpKTsKLQkvKiBpbnRl cmZhY2UgZGVzY3JpcHRvciBhZGRyZXNzLCBpcyByZWxhdGl2ZSB0byB0aGUgZHluYW1pY3MgYmFz ZSBhZGRyZXNzICovCi0JT1VUX0JBVENIKGludGVyZmFjZV9kZXNjcmlwdG9yKTsKLX0KLQotc3Rh dGljIHZvaWQKLWdlbjdfZW1pdF9ncGdwdV93YWxrKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAq YmF0Y2gsCi0JCSAgICAgdW5zaWduZWQgeCwgdW5zaWduZWQgeSwKLQkJICAgICB1bnNpZ25lZCB3 aWR0aCwgdW5zaWduZWQgaGVpZ2h0KQotewotCXVpbnQzMl90IHhfZGltLCB5X2RpbSwgdG1wLCBy aWdodF9tYXNrOwotCi0JLyoKLQkgKiBTaW1wbHkgZG8gU0lNRDE2IGJhc2VkIGRpc3BhdGNoLCBz byBldmVyeSB0aHJlYWQgdXNlcwotCSAqIFNJTUQxNiBjaGFubmVscy4KLQkgKgotCSAqIERlZmlu ZSBvdXIgb3duIHRocmVhZCBncm91cCBzaXplLCBlLmcgMTZ4MSBmb3IgZXZlcnkgZ3JvdXAsIHRo ZW4KLQkgKiB3aWxsIGhhdmUgMSB0aHJlYWQgZWFjaCBncm91cCBpbiBTSU1EMTYgZGlzcGF0Y2gu IFNvIHRocmVhZAotCSAqIHdpZHRoL2hlaWdodC9kZXB0aCBhcmUgYWxsIDEuCi0JICoKLQkgKiBU aGVuIHRocmVhZCBncm91cCBYID0gd2lkdGggLyAxNiAoYWxpZ25lZCB0byAxNikKLQkgKiB0aHJl YWQgZ3JvdXAgWSA9IGhlaWdodDsKLQkgKi8KLQl4X2RpbSA9ICh3aWR0aCArIDE1KSAvIDE2Owot CXlfZGltID0gaGVpZ2h0OwotCi0JdG1wID0gd2lkdGggJiAxNTsKLQlpZiAodG1wID09IDApCi0J CXJpZ2h0X21hc2sgPSAoMSA8PCAxNikgLSAxOwotCWVsc2UKLQkJcmlnaHRfbWFzayA9ICgxIDw8 IHRtcCkgLSAxOwotCi0JT1VUX0JBVENIKEdFTjdfR1BHUFVfV0FMS0VSIHwgOSk7Ci0KLQkvKiBp bnRlcmZhY2UgZGVzY3JpcHRvciBvZmZzZXQgKi8KLQlPVVRfQkFUQ0goMCk7Ci0KLQkvKiBTSU1E IHNpemUsIHRocmVhZCB3L2gvZCAqLwotCU9VVF9CQVRDSCgxIDw8IDMwIHwgLyogU0lNRDE2ICov Ci0JCSAgMCA8PCAxNiB8IC8qIGRlcHRoOjEgKi8KLQkJICAwIDw8IDggfCAvKiBoZWlnaHQ6MSAq LwotCQkgIDApOyAvKiB3aWR0aDoxICovCi0KLQkvKiB0aHJlYWQgZ3JvdXAgWCAqLwotCU9VVF9C QVRDSCgwKTsKLQlPVVRfQkFUQ0goeF9kaW0pOwotCi0JLyogdGhyZWFkIGdyb3VwIFkgKi8KLQlP VVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKHlfZGltKTsKLQotCS8qIHRocmVhZCBncm91cCBaICov Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgxKTsKLQotCS8qIHJpZ2h0IG1hc2sgKi8KLQlP VVRfQkFUQ0gocmlnaHRfbWFzayk7Ci0KLQkvKiBib3R0b20gbWFzaywgaGVpZ2h0IDEsIGFsd2F5 cyAweGZmZmZmZmZmICovCi0JT1VUX0JBVENIKDB4ZmZmZmZmZmYpOwotfQotCi1zdGF0aWMgdm9p ZAotZ2VuOF9lbWl0X2dwZ3B1X3dhbGsoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwK LQkJICAgICB1bnNpZ25lZCB4LCB1bnNpZ25lZCB5LAotCQkgICAgIHVuc2lnbmVkIHdpZHRoLCB1 bnNpZ25lZCBoZWlnaHQpCi17Ci0JdWludDMyX3QgeF9kaW0sIHlfZGltLCB0bXAsIHJpZ2h0X21h c2s7Ci0KLQkvKgotCSAqIFNpbXBseSBkbyBTSU1EMTYgYmFzZWQgZGlzcGF0Y2gsIHNvIGV2ZXJ5 IHRocmVhZCB1c2VzCi0JICogU0lNRDE2IGNoYW5uZWxzLgotCSAqCi0JICogRGVmaW5lIG91ciBv d24gdGhyZWFkIGdyb3VwIHNpemUsIGUuZyAxNngxIGZvciBldmVyeSBncm91cCwgdGhlbgotCSAq IHdpbGwgaGF2ZSAxIHRocmVhZCBlYWNoIGdyb3VwIGluIFNJTUQxNiBkaXNwYXRjaC4gU28gdGhy ZWFkCi0JICogd2lkdGgvaGVpZ2h0L2RlcHRoIGFyZSBhbGwgMS4KLQkgKgotCSAqIFRoZW4gdGhy ZWFkIGdyb3VwIFggPSB3aWR0aCAvIDE2IChhbGlnbmVkIHRvIDE2KQotCSAqIHRocmVhZCBncm91 cCBZID0gaGVpZ2h0OwotCSAqLwotCXhfZGltID0gKHdpZHRoICsgMTUpIC8gMTY7Ci0JeV9kaW0g PSBoZWlnaHQ7Ci0KLQl0bXAgPSB3aWR0aCAmIDE1OwotCWlmICh0bXAgPT0gMCkKLQkJcmlnaHRf bWFzayA9ICgxIDw8IDE2KSAtIDE7Ci0JZWxzZQotCQlyaWdodF9tYXNrID0gKDEgPDwgdG1wKSAt IDE7Ci0KLQlPVVRfQkFUQ0goR0VON19HUEdQVV9XQUxLRVIgfCAxMyk7Ci0KLQlPVVRfQkFUQ0go MCk7IC8qIGtlcm5lbCBvZmZzZXQgKi8KLQlPVVRfQkFUQ0goMCk7IC8qIGluZGlyZWN0IGRhdGEg bGVuZ3RoICovCi0JT1VUX0JBVENIKDApOyAvKiBpbmRpcmVjdCBkYXRhIG9mZnNldCAqLwotCi0J LyogU0lNRCBzaXplLCB0aHJlYWQgdy9oL2QgKi8KLQlPVVRfQkFUQ0goMSA8PCAzMCB8IC8qIFNJ TUQxNiAqLwotCQkgIDAgPDwgMTYgfCAvKiBkZXB0aDoxICovCi0JCSAgMCA8PCA4IHwgLyogaGVp Z2h0OjEgKi8KLQkJICAwKTsgLyogd2lkdGg6MSAqLwotCi0JLyogdGhyZWFkIGdyb3VwIFggKi8K LQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCh4X2RpbSk7Ci0KLQkv KiB0aHJlYWQgZ3JvdXAgWSAqLwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VU X0JBVENIKHlfZGltKTsKLQotCS8qIHRocmVhZCBncm91cCBaICovCi0JT1VUX0JBVENIKDApOwot CU9VVF9CQVRDSCgxKTsKLQotCS8qIHJpZ2h0IG1hc2sgKi8KLQlPVVRfQkFUQ0gocmlnaHRfbWFz ayk7Ci0KLQkvKiBib3R0b20gbWFzaywgaGVpZ2h0IDEsIGFsd2F5cyAweGZmZmZmZmZmICovCi0J T1VUX0JBVENIKDB4ZmZmZmZmZmYpOwotfQotCiAvKgogICogVGhpcyBzZXRzIHVwIHRoZSBncGdw dSBwaXBlbGluZSwKICAqCmRpZmYgLS1naXQgYS9saWIvZ3B1X2ZpbGwuYyBiL2xpYi9ncHVfZmls bC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwLi4xNzJjNmRiNgotLS0gL2Rl di9udWxsCisrKyBiL2xpYi9ncHVfZmlsbC5jCkBAIC0wLDAgKzEsNzU4IEBACisjaW5jbHVkZSAi Z3B1X2ZpbGwuaCIKKwordWludDMyX3QKK2JhdGNoX3VzZWQoc3RydWN0IGludGVsX2JhdGNoYnVm ZmVyICpiYXRjaCkKK3sKKwlyZXR1cm4gYmF0Y2gtPnB0ciAtIGJhdGNoLT5idWZmZXI7Cit9CisK K3VpbnQzMl90CitiYXRjaF9hbGlnbihzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLCB1 aW50MzJfdCBhbGlnbikKK3sKKwl1aW50MzJfdCBvZmZzZXQgPSBiYXRjaF91c2VkKGJhdGNoKTsK KwlvZmZzZXQgPSBBTElHTihvZmZzZXQsIGFsaWduKTsKKwliYXRjaC0+cHRyID0gYmF0Y2gtPmJ1 ZmZlciArIG9mZnNldDsKKwlyZXR1cm4gb2Zmc2V0OworfQorCit2b2lkICoKK2JhdGNoX2FsbG9j KHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsIHVpbnQzMl90IHNpemUsIHVpbnQzMl90 IGFsaWduKQoreworCXVpbnQzMl90IG9mZnNldCA9IGJhdGNoX2FsaWduKGJhdGNoLCBhbGlnbik7 CisJYmF0Y2gtPnB0ciArPSBzaXplOworCXJldHVybiBtZW1zZXQoYmF0Y2gtPmJ1ZmZlciArIG9m ZnNldCwgMCwgc2l6ZSk7Cit9CisKK3VpbnQzMl90CitiYXRjaF9vZmZzZXQoc3RydWN0IGludGVs X2JhdGNoYnVmZmVyICpiYXRjaCwgdm9pZCAqcHRyKQoreworCXJldHVybiAodWludDhfdCAqKXB0 ciAtIGJhdGNoLT5idWZmZXI7Cit9CisKK3VpbnQzMl90CitiYXRjaF9jb3B5KHN0cnVjdCBpbnRl bF9iYXRjaGJ1ZmZlciAqYmF0Y2gsIGNvbnN0IHZvaWQgKnB0ciwgdWludDMyX3Qgc2l6ZSwgdWlu dDMyX3QgYWxpZ24pCit7CisJcmV0dXJuIGJhdGNoX29mZnNldChiYXRjaCwgbWVtY3B5KGJhdGNo X2FsbG9jKGJhdGNoLCBzaXplLCBhbGlnbiksIHB0ciwgc2l6ZSkpOworfQorCit2b2lkCitnZW43 X3JlbmRlcl9mbHVzaChzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLCB1aW50MzJfdCBi YXRjaF9lbmQpCit7CisJaW50IHJldDsKKworCXJldCA9IGRybV9pbnRlbF9ib19zdWJkYXRhKGJh dGNoLT5ibywgMCwgNDA5NiwgYmF0Y2gtPmJ1ZmZlcik7CisJaWYgKHJldCA9PSAwKQorCQlyZXQg PSBkcm1faW50ZWxfYm9fbXJiX2V4ZWMoYmF0Y2gtPmJvLCBiYXRjaF9lbmQsCisJCQkJCU5VTEws IDAsIDAsIDApOworCWlndF9hc3NlcnQocmV0ID09IDApOworfQorCit1aW50MzJfdAorZ2VuN19m aWxsX2N1cmJlX2J1ZmZlcl9kYXRhKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCisJ CQl1aW50OF90IGNvbG9yKQoreworCXVpbnQ4X3QgKmN1cmJlX2J1ZmZlcjsKKwl1aW50MzJfdCBv ZmZzZXQ7CisKKwljdXJiZV9idWZmZXIgPSBiYXRjaF9hbGxvYyhiYXRjaCwgc2l6ZW9mKHVpbnQz Ml90KSAqIDgsIDY0KTsKKwlvZmZzZXQgPSBiYXRjaF9vZmZzZXQoYmF0Y2gsIGN1cmJlX2J1ZmZl cik7CisJKmN1cmJlX2J1ZmZlciA9IGNvbG9yOworCisJcmV0dXJuIG9mZnNldDsKK30KKwordWlu dDMyX3QKK2dlbjdfZmlsbF9zdXJmYWNlX3N0YXRlKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAq YmF0Y2gsCisJCQlzdHJ1Y3QgaWd0X2J1ZiAqYnVmLAorCQkJdWludDMyX3QgZm9ybWF0LAorCQkJ aW50IGlzX2RzdCkKK3sKKwlzdHJ1Y3QgZ2VuN19zdXJmYWNlX3N0YXRlICpzczsKKwl1aW50MzJf dCB3cml0ZV9kb21haW4sIHJlYWRfZG9tYWluLCBvZmZzZXQ7CisJaW50IHJldDsKKworCWlmIChp c19kc3QpIHsKKwkJd3JpdGVfZG9tYWluID0gcmVhZF9kb21haW4gPSBJOTE1X0dFTV9ET01BSU5f UkVOREVSOworCX0gZWxzZSB7CisJCXdyaXRlX2RvbWFpbiA9IDA7CisJCXJlYWRfZG9tYWluID0g STkxNV9HRU1fRE9NQUlOX1NBTVBMRVI7CisJfQorCisJc3MgPSBiYXRjaF9hbGxvYyhiYXRjaCwg c2l6ZW9mKCpzcyksIDY0KTsKKwlvZmZzZXQgPSBiYXRjaF9vZmZzZXQoYmF0Y2gsIHNzKTsKKwor CXNzLT5zczAuc3VyZmFjZV90eXBlID0gR0VON19TVVJGQUNFXzJEOworCXNzLT5zczAuc3VyZmFj ZV9mb3JtYXQgPSBmb3JtYXQ7CisJc3MtPnNzMC5yZW5kZXJfY2FjaGVfcmVhZF93cml0ZSA9IDE7 CisKKwlpZiAoYnVmLT50aWxpbmcgPT0gSTkxNV9USUxJTkdfWCkKKwkJc3MtPnNzMC50aWxlZF9t b2RlID0gMjsKKwllbHNlIGlmIChidWYtPnRpbGluZyA9PSBJOTE1X1RJTElOR19ZKQorCQlzcy0+ c3MwLnRpbGVkX21vZGUgPSAzOworCisJc3MtPnNzMS5iYXNlX2FkZHIgPSBidWYtPmJvLT5vZmZz ZXQ7CisJcmV0ID0gZHJtX2ludGVsX2JvX2VtaXRfcmVsb2MoYmF0Y2gtPmJvLAorCQkJCWJhdGNo X29mZnNldChiYXRjaCwgc3MpICsgNCwKKwkJCQlidWYtPmJvLCAwLAorCQkJCXJlYWRfZG9tYWlu LCB3cml0ZV9kb21haW4pOworCWlndF9hc3NlcnQocmV0ID09IDApOworCisJc3MtPnNzMi5oZWln aHQgPSBpZ3RfYnVmX2hlaWdodChidWYpIC0gMTsKKwlzcy0+c3MyLndpZHRoICA9IGlndF9idWZf d2lkdGgoYnVmKSAtIDE7CisKKwlzcy0+c3MzLnBpdGNoICA9IGJ1Zi0+c3RyaWRlIC0gMTsKKwor CXNzLT5zczcuc2hhZGVyX2NoYW5lbF9zZWxlY3RfciA9IDQ7CisJc3MtPnNzNy5zaGFkZXJfY2hh bmVsX3NlbGVjdF9nID0gNTsKKwlzcy0+c3M3LnNoYWRlcl9jaGFuZWxfc2VsZWN0X2IgPSA2Owor CXNzLT5zczcuc2hhZGVyX2NoYW5lbF9zZWxlY3RfYSA9IDc7CisKKwlyZXR1cm4gb2Zmc2V0Owor fQorCit1aW50MzJfdAorZ2VuN19maWxsX2JpbmRpbmdfdGFibGUoc3RydWN0IGludGVsX2JhdGNo YnVmZmVyICpiYXRjaCwKKwkJCXN0cnVjdCBpZ3RfYnVmICpkc3QpCit7CisJdWludDMyX3QgKmJp bmRpbmdfdGFibGUsIG9mZnNldDsKKworCWJpbmRpbmdfdGFibGUgPSBiYXRjaF9hbGxvYyhiYXRj aCwgMzIsIDY0KTsKKwlvZmZzZXQgPSBiYXRjaF9vZmZzZXQoYmF0Y2gsIGJpbmRpbmdfdGFibGUp OworCWJpbmRpbmdfdGFibGVbMF0gPSBnZW43X2ZpbGxfc3VyZmFjZV9zdGF0ZShiYXRjaCwgZHN0 LAorCQkJCQkJR0VON19TVVJGQUNFRk9STUFUX1I4X1VOT1JNLCAxKTsKKworCXJldHVybiBvZmZz ZXQ7Cit9CisKK3VpbnQzMl90CitnZW43X2ZpbGxfbWVkaWFfa2VybmVsKHN0cnVjdCBpbnRlbF9i YXRjaGJ1ZmZlciAqYmF0Y2gsCisJCWNvbnN0IHVpbnQzMl90IGtlcm5lbFtdWzRdLAorCQlzaXpl X3Qgc2l6ZSkKK3sKKwl1aW50MzJfdCBvZmZzZXQ7CisKKwlvZmZzZXQgPSBiYXRjaF9jb3B5KGJh dGNoLCBrZXJuZWwsIHNpemUsIDY0KTsKKworCXJldHVybiBvZmZzZXQ7Cit9CisKK3VpbnQzMl90 CitnZW44X2ZpbGxfbWVkaWFfa2VybmVsKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gs CisJCWNvbnN0IHVpbnQzMl90IGtlcm5lbFtdWzRdLAorCQlzaXplX3Qgc2l6ZSkKK3sKKwl1aW50 MzJfdCBvZmZzZXQ7CisKKwlvZmZzZXQgPSBiYXRjaF9jb3B5KGJhdGNoLCBrZXJuZWwsIHNpemUs IDY0KTsKKworCXJldHVybiBvZmZzZXQ7Cit9CisKK3VpbnQzMl90CitnZW43X2ZpbGxfaW50ZXJm YWNlX2Rlc2NyaXB0b3Ioc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwgc3RydWN0IGln dF9idWYgKmRzdCwKKwkJCSAgICAgICBjb25zdCB1aW50MzJfdCBrZXJuZWxbXVs0XSwgc2l6ZV90 IHNpemUpCit7CisJc3RydWN0IGdlbjdfaW50ZXJmYWNlX2Rlc2NyaXB0b3JfZGF0YSAqaWRkOwor CXVpbnQzMl90IG9mZnNldDsKKwl1aW50MzJfdCBiaW5kaW5nX3RhYmxlX29mZnNldCwga2VybmVs X29mZnNldDsKKworCWJpbmRpbmdfdGFibGVfb2Zmc2V0ID0gZ2VuN19maWxsX2JpbmRpbmdfdGFi bGUoYmF0Y2gsIGRzdCk7CisJa2VybmVsX29mZnNldCA9IGdlbjdfZmlsbF9tZWRpYV9rZXJuZWwo YmF0Y2gsIGtlcm5lbCwgc2l6ZSk7CisKKwlpZGQgPSBiYXRjaF9hbGxvYyhiYXRjaCwgc2l6ZW9m KCppZGQpLCA2NCk7CisJb2Zmc2V0ID0gYmF0Y2hfb2Zmc2V0KGJhdGNoLCBpZGQpOworCisJaWRk LT5kZXNjMC5rZXJuZWxfc3RhcnRfcG9pbnRlciA9IChrZXJuZWxfb2Zmc2V0ID4+IDYpOworCisJ aWRkLT5kZXNjMS5zaW5nbGVfcHJvZ3JhbV9mbG93ID0gMTsKKwlpZGQtPmRlc2MxLmZsb2F0aW5n X3BvaW50X21vZGUgPSBHRU43X0ZMT0FUSU5HX1BPSU5UX0lFRUVfNzU0OworCisJaWRkLT5kZXNj Mi5zYW1wbGVyX2NvdW50ID0gMDsgICAgICAvKiAwIHNhbXBsZXJzIHVzZWQgKi8KKwlpZGQtPmRl c2MyLnNhbXBsZXJfc3RhdGVfcG9pbnRlciA9IDA7CisKKwlpZGQtPmRlc2MzLmJpbmRpbmdfdGFi bGVfZW50cnlfY291bnQgPSAwOworCWlkZC0+ZGVzYzMuYmluZGluZ190YWJsZV9wb2ludGVyID0g KGJpbmRpbmdfdGFibGVfb2Zmc2V0ID4+IDUpOworCisJaWRkLT5kZXNjNC5jb25zdGFudF91cmJf ZW50cnlfcmVhZF9vZmZzZXQgPSAwOworCWlkZC0+ZGVzYzQuY29uc3RhbnRfdXJiX2VudHJ5X3Jl YWRfbGVuZ3RoID0gMTsgLyogZ3JmIDEgKi8KKworCXJldHVybiBvZmZzZXQ7Cit9CisKK3ZvaWQK K2dlbjdfZW1pdF9zdGF0ZV9iYXNlX2FkZHJlc3Moc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpi YXRjaCkKK3sKKwlPVVRfQkFUQ0goR0VON19TVEFURV9CQVNFX0FERFJFU1MgfCAoMTAgLSAyKSk7 CisKKwkvKiBnZW5lcmFsICovCisJT1VUX0JBVENIKDApOworCisJLyogc3VyZmFjZSAqLworCU9V VF9SRUxPQyhiYXRjaC0+Ym8sIEk5MTVfR0VNX0RPTUFJTl9JTlNUUlVDVElPTiwgMCwgQkFTRV9B RERSRVNTX01PRElGWSk7CisKKwkvKiBkeW5hbWljICovCisJT1VUX1JFTE9DKGJhdGNoLT5ibywg STkxNV9HRU1fRE9NQUlOX0lOU1RSVUNUSU9OLCAwLCBCQVNFX0FERFJFU1NfTU9ESUZZKTsKKwor CS8qIGluZGlyZWN0ICovCisJT1VUX0JBVENIKDApOworCisJLyogaW5zdHJ1Y3Rpb24gKi8KKwlP VVRfUkVMT0MoYmF0Y2gtPmJvLCBJOTE1X0dFTV9ET01BSU5fSU5TVFJVQ1RJT04sIDAsIEJBU0Vf QUREUkVTU19NT0RJRlkpOworCisJLyogZ2VuZXJhbC9keW5hbWljL2luZGlyZWN0L2luc3RydWN0 aW9uIGFjY2VzcyBCb3VuZCAqLworCU9VVF9CQVRDSCgwKTsKKwlPVVRfQkFUQ0goMCB8IEJBU0Vf QUREUkVTU19NT0RJRlkpOworCU9VVF9CQVRDSCgwKTsKKwlPVVRfQkFUQ0goMCB8IEJBU0VfQURE UkVTU19NT0RJRlkpOworfQorCit2b2lkCitnZW43X2VtaXRfdmZlX3N0YXRlKHN0cnVjdCBpbnRl bF9iYXRjaGJ1ZmZlciAqYmF0Y2gpCit7CisJT1VUX0JBVENIKEdFTjdfTUVESUFfVkZFX1NUQVRF IHwgKDggLSAyKSk7CisKKwkvKiBzY3JhdGNoIGJ1ZmZlciAqLworCU9VVF9CQVRDSCgwKTsKKwor CS8qIG51bWJlciBvZiB0aHJlYWRzICYgdXJiIGVudHJpZXMgKi8KKwlPVVRfQkFUQ0goMSA8PCAx NiB8CisJCTIgPDwgOCk7CisKKwlPVVRfQkFUQ0goMCk7CisKKwkvKiB1cmIgZW50cnkgc2l6ZSAm IGN1cmJlIHNpemUgKi8KKwlPVVRfQkFUQ0goMiA8PCAxNiB8IAkvKiBpbiAyNTYgYml0cyB1bml0 ICovCisJCTIpOwkJLyogaW4gMjU2IGJpdHMgdW5pdCAqLworCisJLyogc2NvcmVib2FyZCAqLwor CU9VVF9CQVRDSCgwKTsKKwlPVVRfQkFUQ0goMCk7CisJT1VUX0JBVENIKDApOworfQorCit2b2lk CitnZW43X2VtaXRfdmZlX3N0YXRlX2dwZ3B1KHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0 Y2gpCit7CisJT1VUX0JBVENIKEdFTjdfTUVESUFfVkZFX1NUQVRFIHwgKDggLSAyKSk7CisKKwkv KiBzY3JhdGNoIGJ1ZmZlciAqLworCU9VVF9CQVRDSCgwKTsKKworCS8qIG51bWJlciBvZiB0aHJl YWRzICYgdXJiIGVudHJpZXMgKi8KKwlPVVRfQkFUQ0goMSA8PCAxNiB8IC8qIG1heCBudW0gb2Yg dGhyZWFkcyAqLworCQkgIDAgPDwgOCB8IC8qIG51bSBvZiBVUkIgZW50cnkgKi8KKwkJICAxIDw8 IDIpOyAvKiBHUEdQVSBtb2RlICovCisKKwlPVVRfQkFUQ0goMCk7CisKKwkvKiB1cmIgZW50cnkg c2l6ZSAmIGN1cmJlIHNpemUgKi8KKwlPVVRfQkFUQ0goMCA8PCAxNiB8IAkvKiBVUkIgZW50cnkg c2l6ZSBpbiAyNTYgYml0cyB1bml0ICovCisJCSAgMSk7CQkvKiBDVVJCRSBlbnRyeSBzaXplIGlu IDI1NiBiaXRzIHVuaXQgKi8KKworCS8qIHNjb3JlYm9hcmQgKi8KKwlPVVRfQkFUQ0goMCk7CisJ T1VUX0JBVENIKDApOworCU9VVF9CQVRDSCgwKTsKK30KKwordm9pZAorZ2VuN19lbWl0X2N1cmJl X2xvYWQoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwgdWludDMyX3QgY3VyYmVfYnVm ZmVyKQoreworCU9VVF9CQVRDSChHRU43X01FRElBX0NVUkJFX0xPQUQgfCAoNCAtIDIpKTsKKwlP VVRfQkFUQ0goMCk7CisJLyogY3VyYmUgdG90YWwgZGF0YSBsZW5ndGggKi8KKwlPVVRfQkFUQ0go NjQpOworCS8qIGN1cmJlIGRhdGEgc3RhcnQgYWRkcmVzcywgaXMgcmVsYXRpdmUgdG8gdGhlIGR5 bmFtaWNzIGJhc2UgYWRkcmVzcyAqLworCU9VVF9CQVRDSChjdXJiZV9idWZmZXIpOworfQorCit2 b2lkCitnZW43X2VtaXRfaW50ZXJmYWNlX2Rlc2NyaXB0b3JfbG9hZChzdHJ1Y3QgaW50ZWxfYmF0 Y2hidWZmZXIgKmJhdGNoLCB1aW50MzJfdCBpbnRlcmZhY2VfZGVzY3JpcHRvcikKK3sKKwlPVVRf QkFUQ0goR0VON19NRURJQV9JTlRFUkZBQ0VfREVTQ1JJUFRPUl9MT0FEIHwgKDQgLSAyKSk7CisJ T1VUX0JBVENIKDApOworCS8qIGludGVyZmFjZSBkZXNjcmlwdG9yIGRhdGEgbGVuZ3RoICovCisJ T1VUX0JBVENIKHNpemVvZihzdHJ1Y3QgZ2VuN19pbnRlcmZhY2VfZGVzY3JpcHRvcl9kYXRhKSk7 CisJLyogaW50ZXJmYWNlIGRlc2NyaXB0b3IgYWRkcmVzcywgaXMgcmVsYXRpdmUgdG8gdGhlIGR5 bmFtaWNzIGJhc2UgYWRkcmVzcyAqLworCU9VVF9CQVRDSChpbnRlcmZhY2VfZGVzY3JpcHRvcik7 Cit9CisKK3ZvaWQKK2dlbjdfZW1pdF9tZWRpYV9vYmplY3RzKHN0cnVjdCBpbnRlbF9iYXRjaGJ1 ZmZlciAqYmF0Y2gsCisJCQl1bnNpZ25lZCB4LCB1bnNpZ25lZCB5LAorCQkJdW5zaWduZWQgd2lk dGgsIHVuc2lnbmVkIGhlaWdodCkKK3sKKwlpbnQgaSwgajsKKworCWZvciAoaSA9IDA7IGkgPCB3 aWR0aCAvIDE2OyBpKyspIHsKKwkJZm9yIChqID0gMDsgaiA8IGhlaWdodCAvIDE2OyBqKyspIHsK KwkJCU9VVF9CQVRDSChHRU43X01FRElBX09CSkVDVCB8ICg4IC0gMikpOworCisJCQkvKiBpbnRl cmZhY2UgZGVzY3JpcHRvciBvZmZzZXQgKi8KKwkJCU9VVF9CQVRDSCgwKTsKKworCQkJLyogd2l0 aG91dCBpbmRpcmVjdCBkYXRhICovCisJCQlPVVRfQkFUQ0goMCk7CisJCQlPVVRfQkFUQ0goMCk7 CisKKwkJCS8qIHNjb3JlYm9hcmQgKi8KKwkJCU9VVF9CQVRDSCgwKTsKKwkJCU9VVF9CQVRDSCgw KTsKKworCQkJLyogaW5saW5lIGRhdGEgKHhvZmZzZXQsIHlvZmZzZXQpICovCisJCQlPVVRfQkFU Q0goeCArIGkgKiAxNik7CisJCQlPVVRfQkFUQ0goeSArIGogKiAxNik7CisJCX0KKwl9Cit9CisK K3ZvaWQKK2dlbjdfZW1pdF9ncGdwdV93YWxrKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0 Y2gsCisJCSAgICAgdW5zaWduZWQgeCwgdW5zaWduZWQgeSwKKwkJICAgICB1bnNpZ25lZCB3aWR0 aCwgdW5zaWduZWQgaGVpZ2h0KQoreworCXVpbnQzMl90IHhfZGltLCB5X2RpbSwgdG1wLCByaWdo dF9tYXNrOworCisJLyoKKwkgKiBTaW1wbHkgZG8gU0lNRDE2IGJhc2VkIGRpc3BhdGNoLCBzbyBl dmVyeSB0aHJlYWQgdXNlcworCSAqIFNJTUQxNiBjaGFubmVscy4KKwkgKgorCSAqIERlZmluZSBv dXIgb3duIHRocmVhZCBncm91cCBzaXplLCBlLmcgMTZ4MSBmb3IgZXZlcnkgZ3JvdXAsIHRoZW4K KwkgKiB3aWxsIGhhdmUgMSB0aHJlYWQgZWFjaCBncm91cCBpbiBTSU1EMTYgZGlzcGF0Y2guIFNv IHRocmVhZAorCSAqIHdpZHRoL2hlaWdodC9kZXB0aCBhcmUgYWxsIDEuCisJICoKKwkgKiBUaGVu IHRocmVhZCBncm91cCBYID0gd2lkdGggLyAxNiAoYWxpZ25lZCB0byAxNikKKwkgKiB0aHJlYWQg Z3JvdXAgWSA9IGhlaWdodDsKKwkgKi8KKwl4X2RpbSA9ICh3aWR0aCArIDE1KSAvIDE2OworCXlf ZGltID0gaGVpZ2h0OworCisJdG1wID0gd2lkdGggJiAxNTsKKwlpZiAodG1wID09IDApCisJCXJp Z2h0X21hc2sgPSAoMSA8PCAxNikgLSAxOworCWVsc2UKKwkJcmlnaHRfbWFzayA9ICgxIDw8IHRt cCkgLSAxOworCisJT1VUX0JBVENIKEdFTjdfR1BHUFVfV0FMS0VSIHwgOSk7CisKKwkvKiBpbnRl cmZhY2UgZGVzY3JpcHRvciBvZmZzZXQgKi8KKwlPVVRfQkFUQ0goMCk7CisKKwkvKiBTSU1EIHNp emUsIHRocmVhZCB3L2gvZCAqLworCU9VVF9CQVRDSCgxIDw8IDMwIHwgLyogU0lNRDE2ICovCisJ CSAgMCA8PCAxNiB8IC8qIGRlcHRoOjEgKi8KKwkJICAwIDw8IDggfCAvKiBoZWlnaHQ6MSAqLwor CQkgIDApOyAvKiB3aWR0aDoxICovCisKKwkvKiB0aHJlYWQgZ3JvdXAgWCAqLworCU9VVF9CQVRD SCgwKTsKKwlPVVRfQkFUQ0goeF9kaW0pOworCisJLyogdGhyZWFkIGdyb3VwIFkgKi8KKwlPVVRf QkFUQ0goMCk7CisJT1VUX0JBVENIKHlfZGltKTsKKworCS8qIHRocmVhZCBncm91cCBaICovCisJ T1VUX0JBVENIKDApOworCU9VVF9CQVRDSCgxKTsKKworCS8qIHJpZ2h0IG1hc2sgKi8KKwlPVVRf QkFUQ0gocmlnaHRfbWFzayk7CisKKwkvKiBib3R0b20gbWFzaywgaGVpZ2h0IDEsIGFsd2F5cyAw eGZmZmZmZmZmICovCisJT1VUX0JBVENIKDB4ZmZmZmZmZmYpOworfQorCit2b2lkCitnZW44X3Jl bmRlcl9mbHVzaChzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLCB1aW50MzJfdCBiYXRj aF9lbmQpCit7CisJaW50IHJldDsKKworCXJldCA9IGRybV9pbnRlbF9ib19zdWJkYXRhKGJhdGNo LT5ibywgMCwgNDA5NiwgYmF0Y2gtPmJ1ZmZlcik7CisJaWYgKHJldCA9PSAwKQorCQlyZXQgPSBk cm1faW50ZWxfYm9fbXJiX2V4ZWMoYmF0Y2gtPmJvLCBiYXRjaF9lbmQsCisJCQkJCU5VTEwsIDAs IDAsIDApOworCWlndF9hc3NlcnQocmV0ID09IDApOworfQorCisKK3VpbnQzMl90CitnZW44X2Zp bGxfY3VyYmVfYnVmZmVyX2RhdGEoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKKwkJ CXVpbnQ4X3QgY29sb3IpCit7CisJdWludDhfdCAqY3VyYmVfYnVmZmVyOworCXVpbnQzMl90IG9m ZnNldDsKKworCWN1cmJlX2J1ZmZlciA9IGJhdGNoX2FsbG9jKGJhdGNoLCBzaXplb2YodWludDMy X3QpICogOCwgNjQpOworCW9mZnNldCA9IGJhdGNoX29mZnNldChiYXRjaCwgY3VyYmVfYnVmZmVy KTsKKwkqY3VyYmVfYnVmZmVyID0gY29sb3I7CisKKwlyZXR1cm4gb2Zmc2V0OworfQorCit1aW50 MzJfdAorZ2VuOF9maWxsX3N1cmZhY2Vfc3RhdGUoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpi YXRjaCwKKwkJCXN0cnVjdCBpZ3RfYnVmICpidWYsCisJCQl1aW50MzJfdCBmb3JtYXQsCisJCQlp bnQgaXNfZHN0KQoreworCXN0cnVjdCBnZW44X3N1cmZhY2Vfc3RhdGUgKnNzOworCXVpbnQzMl90 IHdyaXRlX2RvbWFpbiwgcmVhZF9kb21haW4sIG9mZnNldDsKKwlpbnQgcmV0OworCisJaWYgKGlz X2RzdCkgeworCQl3cml0ZV9kb21haW4gPSByZWFkX2RvbWFpbiA9IEk5MTVfR0VNX0RPTUFJTl9S RU5ERVI7CisJfSBlbHNlIHsKKwkJd3JpdGVfZG9tYWluID0gMDsKKwkJcmVhZF9kb21haW4gPSBJ OTE1X0dFTV9ET01BSU5fU0FNUExFUjsKKwl9CisKKwlzcyA9IGJhdGNoX2FsbG9jKGJhdGNoLCBz aXplb2YoKnNzKSwgNjQpOworCW9mZnNldCA9IGJhdGNoX29mZnNldChiYXRjaCwgc3MpOworCisJ c3MtPnNzMC5zdXJmYWNlX3R5cGUgPSBHRU44X1NVUkZBQ0VfMkQ7CisJc3MtPnNzMC5zdXJmYWNl X2Zvcm1hdCA9IGZvcm1hdDsKKwlzcy0+c3MwLnJlbmRlcl9jYWNoZV9yZWFkX3dyaXRlID0gMTsK Kwlzcy0+c3MwLnZlcnRpY2FsX2FsaWdubWVudCA9IDE7IC8qIGFsaWduIDQgKi8KKwlzcy0+c3Mw Lmhvcml6b250YWxfYWxpZ25tZW50ID0gMTsgLyogYWxpZ24gNCAqLworCisJaWYgKGJ1Zi0+dGls aW5nID09IEk5MTVfVElMSU5HX1gpCisJCXNzLT5zczAudGlsZWRfbW9kZSA9IDI7CisJZWxzZSBp ZiAoYnVmLT50aWxpbmcgPT0gSTkxNV9USUxJTkdfWSkKKwkJc3MtPnNzMC50aWxlZF9tb2RlID0g MzsKKworCXNzLT5zczguYmFzZV9hZGRyID0gYnVmLT5iby0+b2Zmc2V0OworCisJcmV0ID0gZHJt X2ludGVsX2JvX2VtaXRfcmVsb2MoYmF0Y2gtPmJvLAorCQkJCWJhdGNoX29mZnNldChiYXRjaCwg c3MpICsgOCAqIDQsCisJCQkJYnVmLT5ibywgMCwKKwkJCQlyZWFkX2RvbWFpbiwgd3JpdGVfZG9t YWluKTsKKwlpZ3RfYXNzZXJ0KHJldCA9PSAwKTsKKworCXNzLT5zczIuaGVpZ2h0ID0gaWd0X2J1 Zl9oZWlnaHQoYnVmKSAtIDE7CisJc3MtPnNzMi53aWR0aCAgPSBpZ3RfYnVmX3dpZHRoKGJ1Zikg LSAxOworCXNzLT5zczMucGl0Y2ggID0gYnVmLT5zdHJpZGUgLSAxOworCisJc3MtPnNzNy5zaGFk ZXJfY2hhbmVsX3NlbGVjdF9yID0gNDsKKwlzcy0+c3M3LnNoYWRlcl9jaGFuZWxfc2VsZWN0X2cg PSA1OworCXNzLT5zczcuc2hhZGVyX2NoYW5lbF9zZWxlY3RfYiA9IDY7CisJc3MtPnNzNy5zaGFk ZXJfY2hhbmVsX3NlbGVjdF9hID0gNzsKKworCXJldHVybiBvZmZzZXQ7Cit9CisKK3VpbnQzMl90 CitnZW44X2ZpbGxfYmluZGluZ190YWJsZShzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNo LAorCQkJc3RydWN0IGlndF9idWYgKmRzdCkKK3sKKwl1aW50MzJfdCAqYmluZGluZ190YWJsZSwg b2Zmc2V0OworCisJYmluZGluZ190YWJsZSA9IGJhdGNoX2FsbG9jKGJhdGNoLCAzMiwgNjQpOwor CW9mZnNldCA9IGJhdGNoX29mZnNldChiYXRjaCwgYmluZGluZ190YWJsZSk7CisKKwliaW5kaW5n X3RhYmxlWzBdID0gZ2VuOF9maWxsX3N1cmZhY2Vfc3RhdGUoYmF0Y2gsIGRzdCwKKwkJCQkJCUdF TjhfU1VSRkFDRUZPUk1BVF9SOF9VTk9STSwgMSk7CisKKwlyZXR1cm4gb2Zmc2V0OworfQorCit1 aW50MzJfdAorZ2VuOF9maWxsX2ludGVyZmFjZV9kZXNjcmlwdG9yKHN0cnVjdCBpbnRlbF9iYXRj aGJ1ZmZlciAqYmF0Y2gsIHN0cnVjdCBpZ3RfYnVmICpkc3QsICBjb25zdCB1aW50MzJfdCBrZXJu ZWxbXVs0XSwgc2l6ZV90IHNpemUpCit7CisJc3RydWN0IGdlbjhfaW50ZXJmYWNlX2Rlc2NyaXB0 b3JfZGF0YSAqaWRkOworCXVpbnQzMl90IG9mZnNldDsKKwl1aW50MzJfdCBiaW5kaW5nX3RhYmxl X29mZnNldCwga2VybmVsX29mZnNldDsKKworCWJpbmRpbmdfdGFibGVfb2Zmc2V0ID0gZ2VuOF9m aWxsX2JpbmRpbmdfdGFibGUoYmF0Y2gsIGRzdCk7CisJa2VybmVsX29mZnNldCA9IGdlbjhfZmls bF9tZWRpYV9rZXJuZWwoYmF0Y2gsIGtlcm5lbCwgc2l6ZSk7CisKKwlpZGQgPSBiYXRjaF9hbGxv YyhiYXRjaCwgc2l6ZW9mKCppZGQpLCA2NCk7CisJb2Zmc2V0ID0gYmF0Y2hfb2Zmc2V0KGJhdGNo LCBpZGQpOworCisJaWRkLT5kZXNjMC5rZXJuZWxfc3RhcnRfcG9pbnRlciA9IChrZXJuZWxfb2Zm c2V0ID4+IDYpOworCisJaWRkLT5kZXNjMi5zaW5nbGVfcHJvZ3JhbV9mbG93ID0gMTsKKwlpZGQt PmRlc2MyLmZsb2F0aW5nX3BvaW50X21vZGUgPSBHRU44X0ZMT0FUSU5HX1BPSU5UX0lFRUVfNzU0 OworCisJaWRkLT5kZXNjMy5zYW1wbGVyX2NvdW50ID0gMDsgICAgICAvKiAwIHNhbXBsZXJzIHVz ZWQgKi8KKwlpZGQtPmRlc2MzLnNhbXBsZXJfc3RhdGVfcG9pbnRlciA9IDA7CisKKwlpZGQtPmRl c2M0LmJpbmRpbmdfdGFibGVfZW50cnlfY291bnQgPSAwOworCWlkZC0+ZGVzYzQuYmluZGluZ190 YWJsZV9wb2ludGVyID0gKGJpbmRpbmdfdGFibGVfb2Zmc2V0ID4+IDUpOworCisJaWRkLT5kZXNj NS5jb25zdGFudF91cmJfZW50cnlfcmVhZF9vZmZzZXQgPSAwOworCWlkZC0+ZGVzYzUuY29uc3Rh bnRfdXJiX2VudHJ5X3JlYWRfbGVuZ3RoID0gMTsgLyogZ3JmIDEgKi8KKworCXJldHVybiBvZmZz ZXQ7Cit9CisKK3ZvaWQKK2dlbjhfZW1pdF9zdGF0ZV9iYXNlX2FkZHJlc3Moc3RydWN0IGludGVs X2JhdGNoYnVmZmVyICpiYXRjaCkKK3sKKwlPVVRfQkFUQ0goR0VOOF9TVEFURV9CQVNFX0FERFJF U1MgfCAoMTYgLSAyKSk7CisKKwkvKiBnZW5lcmFsICovCisJT1VUX0JBVENIKDAgfCBCQVNFX0FE RFJFU1NfTU9ESUZZKTsKKwlPVVRfQkFUQ0goMCk7CisKKwkvKiBzdGF0ZWxlc3MgZGF0YSBwb3J0 ICovCisJT1VUX0JBVENIKDAgfCBCQVNFX0FERFJFU1NfTU9ESUZZKTsKKworCS8qIHN1cmZhY2Ug Ki8KKwlPVVRfUkVMT0MoYmF0Y2gtPmJvLCBJOTE1X0dFTV9ET01BSU5fU0FNUExFUiwgMCwgQkFT RV9BRERSRVNTX01PRElGWSk7CisKKwkvKiBkeW5hbWljICovCisJT1VUX1JFTE9DKGJhdGNoLT5i bywgSTkxNV9HRU1fRE9NQUlOX1JFTkRFUiB8IEk5MTVfR0VNX0RPTUFJTl9JTlNUUlVDVElPTiwK KwkJMCwgQkFTRV9BRERSRVNTX01PRElGWSk7CisKKwkvKiBpbmRpcmVjdCAqLworCU9VVF9CQVRD SCgwKTsKKwlPVVRfQkFUQ0goMCk7CisKKwkvKiBpbnN0cnVjdGlvbiAqLworCU9VVF9SRUxPQyhi YXRjaC0+Ym8sIEk5MTVfR0VNX0RPTUFJTl9JTlNUUlVDVElPTiwgMCwgQkFTRV9BRERSRVNTX01P RElGWSk7CisKKwkvKiBnZW5lcmFsIHN0YXRlIGJ1ZmZlciBzaXplICovCisJT1VUX0JBVENIKDB4 ZmZmZmYwMDAgfCAxKTsKKwkvKiBkeW5hbWljIHN0YXRlIGJ1ZmZlciBzaXplICovCisJT1VUX0JB VENIKDEgPDwgMTIgfCAxKTsKKwkvKiBpbmRpcmVjdCBvYmplY3QgYnVmZmVyIHNpemUgKi8KKwlP VVRfQkFUQ0goMHhmZmZmZjAwMCB8IDEpOworCS8qIGludHJ1Y3Rpb24gYnVmZmVyIHNpemUsIG11 c3Qgc2V0IG1vZGlmeSBlbmFibGUgYml0LCBvdGhlcndpc2UgaXQgbWF5IHJlc3VsdCBpbiBHUFUg aGFuZyAqLworCU9VVF9CQVRDSCgxIDw8IDEyIHwgMSk7Cit9CisKK3ZvaWQKK2dlbjhfZW1pdF92 ZmVfc3RhdGUoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCkKK3sKKwlPVVRfQkFUQ0go R0VOOF9NRURJQV9WRkVfU1RBVEUgfCAoOSAtIDIpKTsKKworCS8qIHNjcmF0Y2ggYnVmZmVyICov CisJT1VUX0JBVENIKDApOworCU9VVF9CQVRDSCgwKTsKKworCS8qIG51bWJlciBvZiB0aHJlYWRz ICYgdXJiIGVudHJpZXMgKi8KKwlPVVRfQkFUQ0goMSA8PCAxNiB8CisJCTIgPDwgOCk7CisKKwlP VVRfQkFUQ0goMCk7CisKKwkvKiB1cmIgZW50cnkgc2l6ZSAmIGN1cmJlIHNpemUgKi8KKwlPVVRf QkFUQ0goMiA8PCAxNiB8CisJCTIpOworCisJLyogc2NvcmVib2FyZCAqLworCU9VVF9CQVRDSCgw KTsKKwlPVVRfQkFUQ0goMCk7CisJT1VUX0JBVENIKDApOworfQorCit2b2lkCitnZW44X2VtaXRf dmZlX3N0YXRlX2dwZ3B1KHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gpCit7CisJT1VU X0JBVENIKEdFTjhfTUVESUFfVkZFX1NUQVRFIHwgKDkgLSAyKSk7CisKKwkvKiBzY3JhdGNoIGJ1 ZmZlciAqLworCU9VVF9CQVRDSCgwKTsKKwlPVVRfQkFUQ0goMCk7CisKKwkvKiBudW1iZXIgb2Yg dGhyZWFkcyAmIHVyYiBlbnRyaWVzICovCisJT1VUX0JBVENIKDEgPDwgMTYgfCAxIDw8IDgpOwor CisJT1VUX0JBVENIKDApOworCisJLyogdXJiIGVudHJ5IHNpemUgJiBjdXJiZSBzaXplICovCisJ T1VUX0JBVENIKDAgPDwgMTYgfCAxKTsKKworCS8qIHNjb3JlYm9hcmQgKi8KKwlPVVRfQkFUQ0go MCk7CisJT1VUX0JBVENIKDApOworCU9VVF9CQVRDSCgwKTsKK30KKwordm9pZAorZ2VuOF9lbWl0 X2N1cmJlX2xvYWQoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwgdWludDMyX3QgY3Vy YmVfYnVmZmVyKQoreworCU9VVF9CQVRDSChHRU44X01FRElBX0NVUkJFX0xPQUQgfCAoNCAtIDIp KTsKKwlPVVRfQkFUQ0goMCk7CisJLyogY3VyYmUgdG90YWwgZGF0YSBsZW5ndGggKi8KKwlPVVRf QkFUQ0goNjQpOworCS8qIGN1cmJlIGRhdGEgc3RhcnQgYWRkcmVzcywgaXMgcmVsYXRpdmUgdG8g dGhlIGR5bmFtaWNzIGJhc2UgYWRkcmVzcyAqLworCU9VVF9CQVRDSChjdXJiZV9idWZmZXIpOwor fQorCit2b2lkCitnZW44X2VtaXRfaW50ZXJmYWNlX2Rlc2NyaXB0b3JfbG9hZChzdHJ1Y3QgaW50 ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLCB1aW50MzJfdCBpbnRlcmZhY2VfZGVzY3JpcHRvcikKK3sK KwlPVVRfQkFUQ0goR0VOOF9NRURJQV9JTlRFUkZBQ0VfREVTQ1JJUFRPUl9MT0FEIHwgKDQgLSAy KSk7CisJT1VUX0JBVENIKDApOworCS8qIGludGVyZmFjZSBkZXNjcmlwdG9yIGRhdGEgbGVuZ3Ro ICovCisJT1VUX0JBVENIKHNpemVvZihzdHJ1Y3QgZ2VuOF9pbnRlcmZhY2VfZGVzY3JpcHRvcl9k YXRhKSk7CisJLyogaW50ZXJmYWNlIGRlc2NyaXB0b3IgYWRkcmVzcywgaXMgcmVsYXRpdmUgdG8g dGhlIGR5bmFtaWNzIGJhc2UgYWRkcmVzcyAqLworCU9VVF9CQVRDSChpbnRlcmZhY2VfZGVzY3Jp cHRvcik7Cit9CisKK3ZvaWQKK2dlbjhfZW1pdF9tZWRpYV9zdGF0ZV9mbHVzaChzdHJ1Y3QgaW50 ZWxfYmF0Y2hidWZmZXIgKmJhdGNoKQoreworCU9VVF9CQVRDSChHRU44X01FRElBX1NUQVRFX0ZM VVNIIHwgKDIgLSAyKSk7CisJT1VUX0JBVENIKDApOworfQorCit2b2lkCitnZW44X2VtaXRfbWVk aWFfb2JqZWN0cyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAorCQkJdW5zaWduZWQg eCwgdW5zaWduZWQgeSwKKwkJCXVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQpCit7CisJ aW50IGksIGo7CisKKwlmb3IgKGkgPSAwOyBpIDwgd2lkdGggLyAxNjsgaSsrKSB7CisJCWZvciAo aiA9IDA7IGogPCBoZWlnaHQgLyAxNjsgaisrKSB7CisJCQlPVVRfQkFUQ0goR0VOOF9NRURJQV9P QkpFQ1QgfCAoOCAtIDIpKTsKKworCQkJLyogaW50ZXJmYWNlIGRlc2NyaXB0b3Igb2Zmc2V0ICov CisJCQlPVVRfQkFUQ0goMCk7CisKKwkJCS8qIHdpdGhvdXQgaW5kaXJlY3QgZGF0YSAqLworCQkJ T1VUX0JBVENIKDApOworCQkJT1VUX0JBVENIKDApOworCisJCQkvKiBzY29yZWJvYXJkICovCisJ CQlPVVRfQkFUQ0goMCk7CisJCQlPVVRfQkFUQ0goMCk7CisKKwkJCS8qIGlubGluZSBkYXRhICh4 b2Zmc2V0LCB5b2Zmc2V0KSAqLworCQkJT1VUX0JBVENIKHggKyBpICogMTYpOworCQkJT1VUX0JB VENIKHkgKyBqICogMTYpOworCQkJZ2VuOF9lbWl0X21lZGlhX3N0YXRlX2ZsdXNoKGJhdGNoKTsK KwkJfQorCX0KK30KK3ZvaWQKK2dlbjhscF9lbWl0X21lZGlhX29iamVjdHMoc3RydWN0IGludGVs X2JhdGNoYnVmZmVyICpiYXRjaCwKKwkJCXVuc2lnbmVkIHgsIHVuc2lnbmVkIHksCisJCQl1bnNp Z25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KQoreworCWludCBpLCBqOworCisJZm9yIChpID0g MDsgaSA8IHdpZHRoIC8gMTY7IGkrKykgeworCQlmb3IgKGogPSAwOyBqIDwgaGVpZ2h0IC8gMTY7 IGorKykgeworCQkJT1VUX0JBVENIKEdFTjhfTUVESUFfT0JKRUNUIHwgKDggLSAyKSk7CisKKwkJ CS8qIGludGVyZmFjZSBkZXNjcmlwdG9yIG9mZnNldCAqLworCQkJT1VUX0JBVENIKDApOworCisJ CQkvKiB3aXRob3V0IGluZGlyZWN0IGRhdGEgKi8KKwkJCU9VVF9CQVRDSCgwKTsKKwkJCU9VVF9C QVRDSCgwKTsKKworCQkJLyogc2NvcmVib2FyZCAqLworCQkJT1VUX0JBVENIKDApOworCQkJT1VU X0JBVENIKDApOworCisJCQkvKiBpbmxpbmUgZGF0YSAoeG9mZnNldCwgeW9mZnNldCkgKi8KKwkJ CU9VVF9CQVRDSCh4ICsgaSAqIDE2KTsKKwkJCU9VVF9CQVRDSCh5ICsgaiAqIDE2KTsKKwkJfQor CX0KK30KK3ZvaWQKK2dlbjhfZW1pdF9ncGdwdV93YWxrKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZl ciAqYmF0Y2gsCisJCSAgICAgdW5zaWduZWQgeCwgdW5zaWduZWQgeSwKKwkJICAgICB1bnNpZ25l ZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KQoreworCXVpbnQzMl90IHhfZGltLCB5X2RpbSwgdG1w LCByaWdodF9tYXNrOworCisJLyoKKwkgKiBTaW1wbHkgZG8gU0lNRDE2IGJhc2VkIGRpc3BhdGNo LCBzbyBldmVyeSB0aHJlYWQgdXNlcworCSAqIFNJTUQxNiBjaGFubmVscy4KKwkgKgorCSAqIERl ZmluZSBvdXIgb3duIHRocmVhZCBncm91cCBzaXplLCBlLmcgMTZ4MSBmb3IgZXZlcnkgZ3JvdXAs IHRoZW4KKwkgKiB3aWxsIGhhdmUgMSB0aHJlYWQgZWFjaCBncm91cCBpbiBTSU1EMTYgZGlzcGF0 Y2guIFNvIHRocmVhZAorCSAqIHdpZHRoL2hlaWdodC9kZXB0aCBhcmUgYWxsIDEuCisJICoKKwkg KiBUaGVuIHRocmVhZCBncm91cCBYID0gd2lkdGggLyAxNiAoYWxpZ25lZCB0byAxNikKKwkgKiB0 aHJlYWQgZ3JvdXAgWSA9IGhlaWdodDsKKwkgKi8KKwl4X2RpbSA9ICh3aWR0aCArIDE1KSAvIDE2 OworCXlfZGltID0gaGVpZ2h0OworCisJdG1wID0gd2lkdGggJiAxNTsKKwlpZiAodG1wID09IDAp CisJCXJpZ2h0X21hc2sgPSAoMSA8PCAxNikgLSAxOworCWVsc2UKKwkJcmlnaHRfbWFzayA9ICgx IDw8IHRtcCkgLSAxOworCisJT1VUX0JBVENIKEdFTjdfR1BHUFVfV0FMS0VSIHwgMTMpOworCisJ T1VUX0JBVENIKDApOyAvKiBrZXJuZWwgb2Zmc2V0ICovCisJT1VUX0JBVENIKDApOyAvKiBpbmRp cmVjdCBkYXRhIGxlbmd0aCAqLworCU9VVF9CQVRDSCgwKTsgLyogaW5kaXJlY3QgZGF0YSBvZmZz ZXQgKi8KKworCS8qIFNJTUQgc2l6ZSwgdGhyZWFkIHcvaC9kICovCisJT1VUX0JBVENIKDEgPDwg MzAgfCAvKiBTSU1EMTYgKi8KKwkJICAwIDw8IDE2IHwgLyogZGVwdGg6MSAqLworCQkgIDAgPDwg OCB8IC8qIGhlaWdodDoxICovCisJCSAgMCk7IC8qIHdpZHRoOjEgKi8KKworCS8qIHRocmVhZCBn cm91cCBYICovCisJT1VUX0JBVENIKDApOworCU9VVF9CQVRDSCgwKTsKKwlPVVRfQkFUQ0goeF9k aW0pOworCisJLyogdGhyZWFkIGdyb3VwIFkgKi8KKwlPVVRfQkFUQ0goMCk7CisJT1VUX0JBVENI KDApOworCU9VVF9CQVRDSCh5X2RpbSk7CisKKwkvKiB0aHJlYWQgZ3JvdXAgWiAqLworCU9VVF9C QVRDSCgwKTsKKwlPVVRfQkFUQ0goMSk7CisKKwkvKiByaWdodCBtYXNrICovCisJT1VUX0JBVENI KHJpZ2h0X21hc2spOworCisJLyogYm90dG9tIG1hc2ssIGhlaWdodCAxLCBhbHdheXMgMHhmZmZm ZmZmZiAqLworCU9VVF9CQVRDSCgweGZmZmZmZmZmKTsKK30KKwordm9pZAorZ2VuOV9lbWl0X3N0 YXRlX2Jhc2VfYWRkcmVzcyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoKQoreworCU9V VF9CQVRDSChHRU44X1NUQVRFX0JBU0VfQUREUkVTUyB8ICgxOSAtIDIpKTsKKworCS8qIGdlbmVy YWwgKi8KKwlPVVRfQkFUQ0goMCB8IEJBU0VfQUREUkVTU19NT0RJRlkpOworCU9VVF9CQVRDSCgw KTsKKworCS8qIHN0YXRlbGVzcyBkYXRhIHBvcnQgKi8KKwlPVVRfQkFUQ0goMCB8IEJBU0VfQURE UkVTU19NT0RJRlkpOworCisJLyogc3VyZmFjZSAqLworCU9VVF9SRUxPQyhiYXRjaC0+Ym8sIEk5 MTVfR0VNX0RPTUFJTl9TQU1QTEVSLCAwLCBCQVNFX0FERFJFU1NfTU9ESUZZKTsKKworCS8qIGR5 bmFtaWMgKi8KKwlPVVRfUkVMT0MoYmF0Y2gtPmJvLCBJOTE1X0dFTV9ET01BSU5fUkVOREVSIHwg STkxNV9HRU1fRE9NQUlOX0lOU1RSVUNUSU9OLAorCQkwLCBCQVNFX0FERFJFU1NfTU9ESUZZKTsK KworCS8qIGluZGlyZWN0ICovCisJT1VUX0JBVENIKDApOworCU9VVF9CQVRDSCgwKTsKKworCS8q IGluc3RydWN0aW9uICovCisJT1VUX1JFTE9DKGJhdGNoLT5ibywgSTkxNV9HRU1fRE9NQUlOX0lO U1RSVUNUSU9OLCAwLCBCQVNFX0FERFJFU1NfTU9ESUZZKTsKKworCS8qIGdlbmVyYWwgc3RhdGUg YnVmZmVyIHNpemUgKi8KKwlPVVRfQkFUQ0goMHhmZmZmZjAwMCB8IDEpOworCS8qIGR5bmFtaWMg c3RhdGUgYnVmZmVyIHNpemUgKi8KKwlPVVRfQkFUQ0goMSA8PCAxMiB8IDEpOworCS8qIGluZGly ZWN0IG9iamVjdCBidWZmZXIgc2l6ZSAqLworCU9VVF9CQVRDSCgweGZmZmZmMDAwIHwgMSk7CisJ LyogaW50cnVjdGlvbiBidWZmZXIgc2l6ZSwgbXVzdCBzZXQgbW9kaWZ5IGVuYWJsZSBiaXQsIG90 aGVyd2lzZSBpdCBtYXkgcmVzdWx0IGluIEdQVSBoYW5nICovCisJT1VUX0JBVENIKDEgPDwgMTIg fCAxKTsKKworCS8qIEJpbmRsZXNzIHN1cmZhY2Ugc3RhdGUgYmFzZSBhZGRyZXNzICovCisJT1VU X0JBVENIKDAgfCBCQVNFX0FERFJFU1NfTU9ESUZZKTsKKwlPVVRfQkFUQ0goMCk7CisJT1VUX0JB VENIKDB4ZmZmZmYwMDApOworfQpkaWZmIC0tZ2l0IGEvbGliL2dwdV9maWxsLmggYi9saWIvZ3B1 X2ZpbGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uYjIwNDMwYjEKLS0t IC9kZXYvbnVsbAorKysgYi9saWIvZ3B1X2ZpbGwuaApAQCAtMCwwICsxLDE2NiBAQAorLyoKKyAq IENvcHlyaWdodCDCqSAyMDE4IEludGVsIENvcnBvcmF0aW9uCisgKgorICogUGVybWlzc2lvbiBp cyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5n IGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9u IGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRo b3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmln aHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3Vi bGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBw ZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRv IHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJv dmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5n IHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMg b3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUg U09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lO RCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBU SEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAq IFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlN LCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9G IENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9S IElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFM SU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqLworI2lmbmRlZiBHUFVfRklMTF9ICisj ZGVmaW5lIEdQVV9GSUxMX0gKKworI2luY2x1ZGUgPGludGVsX2J1Zm1nci5oPgorI2luY2x1ZGUg PGk5MTVfZHJtLmg+CisKKyNpbmNsdWRlICJtZWRpYV9maWxsLmgiCisjaW5jbHVkZSAiZ2VuN19t ZWRpYS5oIgorI2luY2x1ZGUgImdlbjhfbWVkaWEuaCIKKyNpbmNsdWRlICJpbnRlbF9yZWcuaCIK KyNpbmNsdWRlICJkcm10ZXN0LmgiCisjaW5jbHVkZSAiaW50ZWxfYmF0Y2hidWZmZXIuaCIKKyNp bmNsdWRlICJpbnRlbF9jaGlwc2V0LmgiCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisKK3VpbnQzMl90 CitiYXRjaF91c2VkKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gpOworCit1aW50MzJf dAorYmF0Y2hfYWxpZ24oc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwgdWludDMyX3Qg YWxpZ24pOworCit2b2lkICoKK2JhdGNoX2FsbG9jKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAq YmF0Y2gsIHVpbnQzMl90IHNpemUsIHVpbnQzMl90IGFsaWduKTsKKwordWludDMyX3QKK2JhdGNo X29mZnNldChzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLCB2b2lkICpwdHIpOworCit1 aW50MzJfdAorYmF0Y2hfY29weShzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLCBjb25z dCB2b2lkICpwdHIsIHVpbnQzMl90IHNpemUsIHVpbnQzMl90IGFsaWduKTsKKwordm9pZAorZ2Vu N19yZW5kZXJfZmx1c2goc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwgdWludDMyX3Qg YmF0Y2hfZW5kKTsKKwordWludDMyX3QKK2dlbjdfZmlsbF9jdXJiZV9idWZmZXJfZGF0YShzdHJ1 Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAorCQkJdWludDhfdCBjb2xvcik7CisKK3VpbnQz Ml90CitnZW43X2ZpbGxfc3VyZmFjZV9zdGF0ZShzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJh dGNoLAorCQkJc3RydWN0IGlndF9idWYgKmJ1ZiwKKwkJCXVpbnQzMl90IGZvcm1hdCwKKwkJCWlu dCBpc19kc3QpOworCit1aW50MzJfdAorZ2VuN19maWxsX2JpbmRpbmdfdGFibGUoc3RydWN0IGlu dGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKKwkJCXN0cnVjdCBpZ3RfYnVmICpkc3QpOworCit1aW50 MzJfdAorZ2VuN19maWxsX21lZGlhX2tlcm5lbChzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJh dGNoLAorCQljb25zdCB1aW50MzJfdCBrZXJuZWxbXVs0XSwKKwkJc2l6ZV90IHNpemUpOworCit1 aW50MzJfdAorZ2VuOF9maWxsX21lZGlhX2tlcm5lbChzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIg KmJhdGNoLAorCQljb25zdCB1aW50MzJfdCBrZXJuZWxbXVs0XSwKKwkJc2l6ZV90IHNpemUpOwor Cit1aW50MzJfdAorZ2VuN19maWxsX2ludGVyZmFjZV9kZXNjcmlwdG9yKHN0cnVjdCBpbnRlbF9i YXRjaGJ1ZmZlciAqYmF0Y2gsIHN0cnVjdCBpZ3RfYnVmICpkc3QsCisJCQkgICAgICAgY29uc3Qg dWludDMyX3Qga2VybmVsW11bNF0sIHNpemVfdCBzaXplKTsKKwordm9pZAorZ2VuN19lbWl0X3N0 YXRlX2Jhc2VfYWRkcmVzcyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoKTsKKwordm9p ZAorZ2VuN19lbWl0X3ZmZV9zdGF0ZShzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoKTsK Kwordm9pZAorZ2VuN19lbWl0X3ZmZV9zdGF0ZV9ncGdwdShzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZm ZXIgKmJhdGNoKTsKKwordm9pZAorZ2VuN19lbWl0X2N1cmJlX2xvYWQoc3RydWN0IGludGVsX2Jh dGNoYnVmZmVyICpiYXRjaCwgdWludDMyX3QgY3VyYmVfYnVmZmVyKTsKKwordm9pZAorZ2VuN19l bWl0X2ludGVyZmFjZV9kZXNjcmlwdG9yX2xvYWQoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpi YXRjaCwgdWludDMyX3QgaW50ZXJmYWNlX2Rlc2NyaXB0b3IpOworCit2b2lkCitnZW43X2VtaXRf bWVkaWFfb2JqZWN0cyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAorCQkJdW5zaWdu ZWQgeCwgdW5zaWduZWQgeSwKKwkJCXVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQpOwor Cit2b2lkCitnZW43X2VtaXRfZ3BncHVfd2FsayhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJh dGNoLAorCQkgICAgIHVuc2lnbmVkIHgsIHVuc2lnbmVkIHksCisJCSAgICAgdW5zaWduZWQgd2lk dGgsIHVuc2lnbmVkIGhlaWdodCk7CisKK3ZvaWQKK2dlbjhfcmVuZGVyX2ZsdXNoKHN0cnVjdCBp bnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsIHVpbnQzMl90IGJhdGNoX2VuZCk7CisKK3VpbnQzMl90 CitnZW44X2ZpbGxfY3VyYmVfYnVmZmVyX2RhdGEoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpi YXRjaCwKKwkJCXVpbnQ4X3QgY29sb3IpOworCit1aW50MzJfdAorZ2VuOF9maWxsX3N1cmZhY2Vf c3RhdGUoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKKwkJCXN0cnVjdCBpZ3RfYnVm ICpidWYsCisJCQl1aW50MzJfdCBmb3JtYXQsCisJCQlpbnQgaXNfZHN0KTsKKwordWludDMyX3QK K2dlbjhfZmlsbF9iaW5kaW5nX3RhYmxlKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gs CisJCQlzdHJ1Y3QgaWd0X2J1ZiAqZHN0KTsKKwordWludDMyX3QKK2dlbjhfZmlsbF9pbnRlcmZh Y2VfZGVzY3JpcHRvcihzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLCBzdHJ1Y3QgaWd0 X2J1ZiAqZHN0LCAgY29uc3QgdWludDMyX3Qga2VybmVsW11bNF0sIHNpemVfdCBzaXplKTsKKwor dm9pZAorZ2VuOF9lbWl0X3N0YXRlX2Jhc2VfYWRkcmVzcyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZm ZXIgKmJhdGNoKTsKKwordm9pZAorZ2VuOF9lbWl0X3ZmZV9zdGF0ZShzdHJ1Y3QgaW50ZWxfYmF0 Y2hidWZmZXIgKmJhdGNoKTsKKwordm9pZAorZ2VuOF9lbWl0X3ZmZV9zdGF0ZV9ncGdwdShzdHJ1 Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoKTsKKwordm9pZAorZ2VuOF9lbWl0X2N1cmJlX2xv YWQoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwgdWludDMyX3QgY3VyYmVfYnVmZmVy KTsKKwordm9pZAorZ2VuOF9lbWl0X2ludGVyZmFjZV9kZXNjcmlwdG9yX2xvYWQoc3RydWN0IGlu dGVsX2JhdGNoYnVmZmVyICpiYXRjaCwgdWludDMyX3QgaW50ZXJmYWNlX2Rlc2NyaXB0b3IpOwor Cit2b2lkCitnZW44X2VtaXRfbWVkaWFfc3RhdGVfZmx1c2goc3RydWN0IGludGVsX2JhdGNoYnVm ZmVyICpiYXRjaCk7CisKK3ZvaWQKK2dlbjhfZW1pdF9tZWRpYV9vYmplY3RzKHN0cnVjdCBpbnRl bF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCisJCQl1bnNpZ25lZCB4LCB1bnNpZ25lZCB5LAorCQkJdW5z aWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCk7CisKK3ZvaWQKK2dlbjhscF9lbWl0X21lZGlh X29iamVjdHMoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKKwkJCXVuc2lnbmVkIHgs IHVuc2lnbmVkIHksCisJCQl1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KTsKKwordm9p ZAorZ2VuOF9lbWl0X2dwZ3B1X3dhbGsoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwK KwkJICAgICB1bnNpZ25lZCB4LCB1bnNpZ25lZCB5LAorCQkgICAgIHVuc2lnbmVkIHdpZHRoLCB1 bnNpZ25lZCBoZWlnaHQpOworCit2b2lkCitnZW45X2VtaXRfc3RhdGVfYmFzZV9hZGRyZXNzKHN0 cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gpOworCisjZW5kaWYgLyogR1BVX0ZJTExfSCAq LwpkaWZmIC0tZ2l0IGEvbGliL21lZGlhX2ZpbGxfZ2VuNy5jIGIvbGliL21lZGlhX2ZpbGxfZ2Vu Ny5jCmluZGV4IDZmYjQ0Nzk4Li5jOTc1NTVhNiAxMDA2NDQKLS0tIGEvbGliL21lZGlhX2ZpbGxf Z2VuNy5jCisrKyBiL2xpYi9tZWRpYV9maWxsX2dlbjcuYwpAQCAtNSw3ICs1LDcgQEAKICNpbmNs dWRlICJnZW43X21lZGlhLmgiCiAjaW5jbHVkZSAiaW50ZWxfcmVnLmgiCiAjaW5jbHVkZSAiZHJt dGVzdC5oIgotCisjaW5jbHVkZSAiZ3B1X2ZpbGwuaCIKICNpbmNsdWRlIDxhc3NlcnQuaD4KIAog c3RhdGljIGNvbnN0IHVpbnQzMl90IG1lZGlhX2tlcm5lbFtdWzRdID0gewpAQCAtMjIsMjc1ICsy Miw2IEBAIHN0YXRpYyBjb25zdCB1aW50MzJfdCBtZWRpYV9rZXJuZWxbXVs0XSA9IHsKIAl7IDB4 MDc4MDAwMzEsIDB4MjAwMDFjYTgsIDB4MDAwMDBlMDAsIDB4ODIwMDAwMTAgfSwKIH07CiAKLXN0 YXRpYyB1aW50MzJfdAotYmF0Y2hfdXNlZChzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNo KQotewotCXJldHVybiBiYXRjaC0+cHRyIC0gYmF0Y2gtPmJ1ZmZlcjsKLX0KLQotc3RhdGljIHVp bnQzMl90Ci1iYXRjaF9hbGlnbihzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLCB1aW50 MzJfdCBhbGlnbikKLXsKLQl1aW50MzJfdCBvZmZzZXQgPSBiYXRjaF91c2VkKGJhdGNoKTsKLQlv ZmZzZXQgPSBBTElHTihvZmZzZXQsIGFsaWduKTsKLQliYXRjaC0+cHRyID0gYmF0Y2gtPmJ1ZmZl ciArIG9mZnNldDsKLQlyZXR1cm4gb2Zmc2V0OwotfQotCi1zdGF0aWMgdm9pZCAqCi1iYXRjaF9h bGxvYyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLCB1aW50MzJfdCBzaXplLCB1aW50 MzJfdCBhbGlnbikKLXsKLQl1aW50MzJfdCBvZmZzZXQgPSBiYXRjaF9hbGlnbihiYXRjaCwgYWxp Z24pOwotCWJhdGNoLT5wdHIgKz0gc2l6ZTsKLQlyZXR1cm4gbWVtc2V0KGJhdGNoLT5idWZmZXIg KyBvZmZzZXQsIDAsIHNpemUpOwotfQotCi1zdGF0aWMgdWludDMyX3QKLWJhdGNoX29mZnNldChz dHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLCB2b2lkICpwdHIpCi17Ci0JcmV0dXJuICh1 aW50OF90ICopcHRyIC0gYmF0Y2gtPmJ1ZmZlcjsKLX0KLQotc3RhdGljIHVpbnQzMl90Ci1iYXRj aF9jb3B5KHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsIGNvbnN0IHZvaWQgKnB0ciwg dWludDMyX3Qgc2l6ZSwgdWludDMyX3QgYWxpZ24pCi17Ci0JcmV0dXJuIGJhdGNoX29mZnNldChi YXRjaCwgbWVtY3B5KGJhdGNoX2FsbG9jKGJhdGNoLCBzaXplLCBhbGlnbiksIHB0ciwgc2l6ZSkp OwotfQotCi1zdGF0aWMgdm9pZAotZ2VuN19yZW5kZXJfZmx1c2goc3RydWN0IGludGVsX2JhdGNo YnVmZmVyICpiYXRjaCwgdWludDMyX3QgYmF0Y2hfZW5kKQotewotCWludCByZXQ7Ci0KLQlyZXQg PSBkcm1faW50ZWxfYm9fc3ViZGF0YShiYXRjaC0+Ym8sIDAsIDQwOTYsIGJhdGNoLT5idWZmZXIp OwotCWlmIChyZXQgPT0gMCkKLQkJcmV0ID0gZHJtX2ludGVsX2JvX21yYl9leGVjKGJhdGNoLT5i bywgYmF0Y2hfZW5kLAotCQkJCQlOVUxMLCAwLCAwLCAwKTsKLQlpZ3RfYXNzZXJ0KHJldCA9PSAw KTsKLX0KLQotc3RhdGljIHVpbnQzMl90Ci1nZW43X2ZpbGxfY3VyYmVfYnVmZmVyX2RhdGEoc3Ry dWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKLQkJCXVpbnQ4X3QgY29sb3IpCi17Ci0JdWlu dDhfdCAqY3VyYmVfYnVmZmVyOwotCXVpbnQzMl90IG9mZnNldDsKLQotCWN1cmJlX2J1ZmZlciA9 IGJhdGNoX2FsbG9jKGJhdGNoLCBzaXplb2YodWludDMyX3QpICogOCwgNjQpOwotCW9mZnNldCA9 IGJhdGNoX29mZnNldChiYXRjaCwgY3VyYmVfYnVmZmVyKTsKLQkqY3VyYmVfYnVmZmVyID0gY29s b3I7Ci0KLQlyZXR1cm4gb2Zmc2V0OwotfQotCi1zdGF0aWMgdWludDMyX3QKLWdlbjdfZmlsbF9z dXJmYWNlX3N0YXRlKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCi0JCQlzdHJ1Y3Qg aWd0X2J1ZiAqYnVmLAotCQkJdWludDMyX3QgZm9ybWF0LAotCQkJaW50IGlzX2RzdCkKLXsKLQlz dHJ1Y3QgZ2VuN19zdXJmYWNlX3N0YXRlICpzczsKLQl1aW50MzJfdCB3cml0ZV9kb21haW4sIHJl YWRfZG9tYWluLCBvZmZzZXQ7Ci0JaW50IHJldDsKLQotCWlmIChpc19kc3QpIHsKLQkJd3JpdGVf ZG9tYWluID0gcmVhZF9kb21haW4gPSBJOTE1X0dFTV9ET01BSU5fUkVOREVSOwotCX0gZWxzZSB7 Ci0JCXdyaXRlX2RvbWFpbiA9IDA7Ci0JCXJlYWRfZG9tYWluID0gSTkxNV9HRU1fRE9NQUlOX1NB TVBMRVI7Ci0JfQotCi0Jc3MgPSBiYXRjaF9hbGxvYyhiYXRjaCwgc2l6ZW9mKCpzcyksIDY0KTsK LQlvZmZzZXQgPSBiYXRjaF9vZmZzZXQoYmF0Y2gsIHNzKTsKLQotCXNzLT5zczAuc3VyZmFjZV90 eXBlID0gR0VON19TVVJGQUNFXzJEOwotCXNzLT5zczAuc3VyZmFjZV9mb3JtYXQgPSBmb3JtYXQ7 Ci0Jc3MtPnNzMC5yZW5kZXJfY2FjaGVfcmVhZF93cml0ZSA9IDE7Ci0KLQlpZiAoYnVmLT50aWxp bmcgPT0gSTkxNV9USUxJTkdfWCkKLQkJc3MtPnNzMC50aWxlZF9tb2RlID0gMjsKLQllbHNlIGlm IChidWYtPnRpbGluZyA9PSBJOTE1X1RJTElOR19ZKQotCQlzcy0+c3MwLnRpbGVkX21vZGUgPSAz OwotCi0Jc3MtPnNzMS5iYXNlX2FkZHIgPSBidWYtPmJvLT5vZmZzZXQ7Ci0JcmV0ID0gZHJtX2lu dGVsX2JvX2VtaXRfcmVsb2MoYmF0Y2gtPmJvLAotCQkJCWJhdGNoX29mZnNldChiYXRjaCwgc3Mp ICsgNCwKLQkJCQlidWYtPmJvLCAwLAotCQkJCXJlYWRfZG9tYWluLCB3cml0ZV9kb21haW4pOwot CWlndF9hc3NlcnQocmV0ID09IDApOwotCi0Jc3MtPnNzMi5oZWlnaHQgPSBpZ3RfYnVmX2hlaWdo dChidWYpIC0gMTsKLQlzcy0+c3MyLndpZHRoICA9IGlndF9idWZfd2lkdGgoYnVmKSAtIDE7Ci0K LQlzcy0+c3MzLnBpdGNoICA9IGJ1Zi0+c3RyaWRlIC0gMTsKLQotCXNzLT5zczcuc2hhZGVyX2No YW5lbF9zZWxlY3RfciA9IDQ7Ci0Jc3MtPnNzNy5zaGFkZXJfY2hhbmVsX3NlbGVjdF9nID0gNTsK LQlzcy0+c3M3LnNoYWRlcl9jaGFuZWxfc2VsZWN0X2IgPSA2OwotCXNzLT5zczcuc2hhZGVyX2No YW5lbF9zZWxlY3RfYSA9IDc7Ci0KLQlyZXR1cm4gb2Zmc2V0OwotfQotCi1zdGF0aWMgdWludDMy X3QKLWdlbjdfZmlsbF9iaW5kaW5nX3RhYmxlKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0 Y2gsCi0JCQlzdHJ1Y3QgaWd0X2J1ZiAqZHN0KQotewotCXVpbnQzMl90ICpiaW5kaW5nX3RhYmxl LCBvZmZzZXQ7Ci0KLQliaW5kaW5nX3RhYmxlID0gYmF0Y2hfYWxsb2MoYmF0Y2gsIDMyLCA2NCk7 Ci0Jb2Zmc2V0ID0gYmF0Y2hfb2Zmc2V0KGJhdGNoLCBiaW5kaW5nX3RhYmxlKTsKLQotCWJpbmRp bmdfdGFibGVbMF0gPSBnZW43X2ZpbGxfc3VyZmFjZV9zdGF0ZShiYXRjaCwgZHN0LCBHRU43X1NV UkZBQ0VGT1JNQVRfUjhfVU5PUk0sIDEpOwotCi0JcmV0dXJuIG9mZnNldDsKLX0KLQotc3RhdGlj IHVpbnQzMl90Ci1nZW43X2ZpbGxfbWVkaWFfa2VybmVsKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZl ciAqYmF0Y2gsCi0JCWNvbnN0IHVpbnQzMl90IGtlcm5lbFtdWzRdLAotCQlzaXplX3Qgc2l6ZSkK LXsKLQl1aW50MzJfdCBvZmZzZXQ7Ci0KLQlvZmZzZXQgPSBiYXRjaF9jb3B5KGJhdGNoLCBrZXJu ZWwsIHNpemUsIDY0KTsKLQotCXJldHVybiBvZmZzZXQ7Ci19Ci0KLXN0YXRpYyB1aW50MzJfdAot Z2VuN19maWxsX2ludGVyZmFjZV9kZXNjcmlwdG9yKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAq YmF0Y2gsIHN0cnVjdCBpZ3RfYnVmICpkc3QsCi0JCQkgICAgICAgY29uc3QgdWludDMyX3Qga2Vy bmVsW11bNF0sIHNpemVfdCBzaXplKQotewotCXN0cnVjdCBnZW43X2ludGVyZmFjZV9kZXNjcmlw dG9yX2RhdGEgKmlkZDsKLQl1aW50MzJfdCBvZmZzZXQ7Ci0JdWludDMyX3QgYmluZGluZ190YWJs ZV9vZmZzZXQsIGtlcm5lbF9vZmZzZXQ7Ci0KLQliaW5kaW5nX3RhYmxlX29mZnNldCA9IGdlbjdf ZmlsbF9iaW5kaW5nX3RhYmxlKGJhdGNoLCBkc3QpOwotCWtlcm5lbF9vZmZzZXQgPSBnZW43X2Zp bGxfbWVkaWFfa2VybmVsKGJhdGNoLCBrZXJuZWwsIHNpemUpOwotCi0JaWRkID0gYmF0Y2hfYWxs b2MoYmF0Y2gsIHNpemVvZigqaWRkKSwgNjQpOwotCW9mZnNldCA9IGJhdGNoX29mZnNldChiYXRj aCwgaWRkKTsKLQotCWlkZC0+ZGVzYzAua2VybmVsX3N0YXJ0X3BvaW50ZXIgPSAoa2VybmVsX29m ZnNldCA+PiA2KTsKLQotCWlkZC0+ZGVzYzEuc2luZ2xlX3Byb2dyYW1fZmxvdyA9IDE7Ci0JaWRk LT5kZXNjMS5mbG9hdGluZ19wb2ludF9tb2RlID0gR0VON19GTE9BVElOR19QT0lOVF9JRUVFXzc1 NDsKLQotCWlkZC0+ZGVzYzIuc2FtcGxlcl9jb3VudCA9IDA7ICAgICAgLyogMCBzYW1wbGVycyB1 c2VkICovCi0JaWRkLT5kZXNjMi5zYW1wbGVyX3N0YXRlX3BvaW50ZXIgPSAwOwotCi0JaWRkLT5k ZXNjMy5iaW5kaW5nX3RhYmxlX2VudHJ5X2NvdW50ID0gMDsKLQlpZGQtPmRlc2MzLmJpbmRpbmdf dGFibGVfcG9pbnRlciA9IChiaW5kaW5nX3RhYmxlX29mZnNldCA+PiA1KTsKLQotCWlkZC0+ZGVz YzQuY29uc3RhbnRfdXJiX2VudHJ5X3JlYWRfb2Zmc2V0ID0gMDsKLQlpZGQtPmRlc2M0LmNvbnN0 YW50X3VyYl9lbnRyeV9yZWFkX2xlbmd0aCA9IDE7IC8qIGdyZiAxICovCi0KLQlyZXR1cm4gb2Zm c2V0OwotfQotCi1zdGF0aWMgdm9pZAotZ2VuN19lbWl0X3N0YXRlX2Jhc2VfYWRkcmVzcyhzdHJ1 Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoKQotewotCU9VVF9CQVRDSChHRU43X1NUQVRFX0JB U0VfQUREUkVTUyB8ICgxMCAtIDIpKTsKLQotCS8qIGdlbmVyYWwgKi8KLQlPVVRfQkFUQ0goMCk7 Ci0KLQkvKiBzdXJmYWNlICovCi0JT1VUX1JFTE9DKGJhdGNoLT5ibywgSTkxNV9HRU1fRE9NQUlO X0lOU1RSVUNUSU9OLCAwLCBCQVNFX0FERFJFU1NfTU9ESUZZKTsKLQotCS8qIGR5bmFtaWMgKi8K LQlPVVRfUkVMT0MoYmF0Y2gtPmJvLCBJOTE1X0dFTV9ET01BSU5fSU5TVFJVQ1RJT04sIDAsIEJB U0VfQUREUkVTU19NT0RJRlkpOwotCi0JLyogaW5kaXJlY3QgKi8KLQlPVVRfQkFUQ0goMCk7Ci0K LQkvKiBpbnN0cnVjdGlvbiAqLwotCU9VVF9SRUxPQyhiYXRjaC0+Ym8sIEk5MTVfR0VNX0RPTUFJ Tl9JTlNUUlVDVElPTiwgMCwgQkFTRV9BRERSRVNTX01PRElGWSk7Ci0KLQkvKiBnZW5lcmFsL2R5 bmFtaWMvaW5kaXJlY3QvaW5zdHJ1Y3Rpb24gYWNjZXNzIEJvdW5kICovCi0JT1VUX0JBVENIKDAp OwotCU9VVF9CQVRDSCgwIHwgQkFTRV9BRERSRVNTX01PRElGWSk7Ci0JT1VUX0JBVENIKDApOwot CU9VVF9CQVRDSCgwIHwgQkFTRV9BRERSRVNTX01PRElGWSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1n ZW43X2VtaXRfdmZlX3N0YXRlKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gpCi17Ci0J T1VUX0JBVENIKEdFTjdfTUVESUFfVkZFX1NUQVRFIHwgKDggLSAyKSk7Ci0KLQkvKiBzY3JhdGNo IGJ1ZmZlciAqLwotCU9VVF9CQVRDSCgwKTsKLQotCS8qIG51bWJlciBvZiB0aHJlYWRzICYgdXJi IGVudHJpZXMgKi8KLQlPVVRfQkFUQ0goMSA8PCAxNiB8Ci0JCTIgPDwgOCk7Ci0KLQlPVVRfQkFU Q0goMCk7Ci0KLQkvKiB1cmIgZW50cnkgc2l6ZSAmIGN1cmJlIHNpemUgKi8KLQlPVVRfQkFUQ0go MiA8PCAxNiB8IAkvKiBpbiAyNTYgYml0cyB1bml0ICovCi0JCTIpOwkJLyogaW4gMjU2IGJpdHMg dW5pdCAqLwotCi0JLyogc2NvcmVib2FyZCAqLwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0go MCk7Ci0JT1VUX0JBVENIKDApOwotfQotCi1zdGF0aWMgdm9pZAotZ2VuN19lbWl0X2N1cmJlX2xv YWQoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwgdWludDMyX3QgY3VyYmVfYnVmZmVy KQotewotCU9VVF9CQVRDSChHRU43X01FRElBX0NVUkJFX0xPQUQgfCAoNCAtIDIpKTsKLQlPVVRf QkFUQ0goMCk7Ci0JLyogY3VyYmUgdG90YWwgZGF0YSBsZW5ndGggKi8KLQlPVVRfQkFUQ0goNjQp OwotCS8qIGN1cmJlIGRhdGEgc3RhcnQgYWRkcmVzcywgaXMgcmVsYXRpdmUgdG8gdGhlIGR5bmFt aWNzIGJhc2UgYWRkcmVzcyAqLwotCU9VVF9CQVRDSChjdXJiZV9idWZmZXIpOwotfQotCi1zdGF0 aWMgdm9pZAotZ2VuN19lbWl0X2ludGVyZmFjZV9kZXNjcmlwdG9yX2xvYWQoc3RydWN0IGludGVs X2JhdGNoYnVmZmVyICpiYXRjaCwgdWludDMyX3QgaW50ZXJmYWNlX2Rlc2NyaXB0b3IpCi17Ci0J T1VUX0JBVENIKEdFTjdfTUVESUFfSU5URVJGQUNFX0RFU0NSSVBUT1JfTE9BRCB8ICg0IC0gMikp OwotCU9VVF9CQVRDSCgwKTsKLQkvKiBpbnRlcmZhY2UgZGVzY3JpcHRvciBkYXRhIGxlbmd0aCAq LwotCU9VVF9CQVRDSChzaXplb2Yoc3RydWN0IGdlbjdfaW50ZXJmYWNlX2Rlc2NyaXB0b3JfZGF0 YSkpOwotCS8qIGludGVyZmFjZSBkZXNjcmlwdG9yIGFkZHJlc3MsIGlzIHJlbGF0aXZlIHRvIHRo ZSBkeW5hbWljcyBiYXNlIGFkZHJlc3MgKi8KLQlPVVRfQkFUQ0goaW50ZXJmYWNlX2Rlc2NyaXB0 b3IpOwotfQotCi1zdGF0aWMgdm9pZAotZ2VuN19lbWl0X21lZGlhX29iamVjdHMoc3RydWN0IGlu dGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKLQkJCXVuc2lnbmVkIHgsIHVuc2lnbmVkIHksCi0JCQl1 bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KQotewotCWludCBpLCBqOwotCi0JZm9yIChp ID0gMDsgaSA8IHdpZHRoIC8gMTY7IGkrKykgewotCQlmb3IgKGogPSAwOyBqIDwgaGVpZ2h0IC8g MTY7IGorKykgewotCQkJT1VUX0JBVENIKEdFTjdfTUVESUFfT0JKRUNUIHwgKDggLSAyKSk7Ci0K LQkJCS8qIGludGVyZmFjZSBkZXNjcmlwdG9yIG9mZnNldCAqLwotCQkJT1VUX0JBVENIKDApOwot Ci0JCQkvKiB3aXRob3V0IGluZGlyZWN0IGRhdGEgKi8KLQkJCU9VVF9CQVRDSCgwKTsKLQkJCU9V VF9CQVRDSCgwKTsKLQotCQkJLyogc2NvcmVib2FyZCAqLwotCQkJT1VUX0JBVENIKDApOwotCQkJ T1VUX0JBVENIKDApOwotCi0JCQkvKiBpbmxpbmUgZGF0YSAoeG9mZnNldCwgeW9mZnNldCkgKi8K LQkJCU9VVF9CQVRDSCh4ICsgaSAqIDE2KTsKLQkJCU9VVF9CQVRDSCh5ICsgaiAqIDE2KTsKLQkJ fQotCX0KLX0KLQogLyoKICAqIFRoaXMgc2V0cyB1cCB0aGUgbWVkaWEgcGlwZWxpbmUsCiAgKgpk aWZmIC0tZ2l0IGEvbGliL21lZGlhX2ZpbGxfZ2VuOC5jIGIvbGliL21lZGlhX2ZpbGxfZ2VuOC5j CmluZGV4IDRhOGZlNWEyLi40MjcwOTk3ZSAxMDA2NDQKLS0tIGEvbGliL21lZGlhX2ZpbGxfZ2Vu OC5jCisrKyBiL2xpYi9tZWRpYV9maWxsX2dlbjguYwpAQCAtNSw3ICs1LDcgQEAKICNpbmNsdWRl ICJnZW44X21lZGlhLmgiCiAjaW5jbHVkZSAiaW50ZWxfcmVnLmgiCiAjaW5jbHVkZSAiZHJtdGVz dC5oIgotCisjaW5jbHVkZSAiZ3B1X2ZpbGwuaCIKICNpbmNsdWRlIDxhc3NlcnQuaD4KIAogCkBA IC0yMywyOTMgKzIzLDcgQEAgc3RhdGljIGNvbnN0IHVpbnQzMl90IG1lZGlhX2tlcm5lbFtdWzRd ID0gewogCXsgMHgwNzgwMDAzMSwgMHgyMDAwMGE0MCwgMHgwZTAwMGUwMCwgMHg4MjAwMDAxMCB9 LAogfTsKIAotc3RhdGljIHVpbnQzMl90Ci1iYXRjaF91c2VkKHN0cnVjdCBpbnRlbF9iYXRjaGJ1 ZmZlciAqYmF0Y2gpCi17Ci0JcmV0dXJuIGJhdGNoLT5wdHIgLSBiYXRjaC0+YnVmZmVyOwotfQot Ci1zdGF0aWMgdWludDMyX3QKLWJhdGNoX2FsaWduKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAq YmF0Y2gsIHVpbnQzMl90IGFsaWduKQotewotCXVpbnQzMl90IG9mZnNldCA9IGJhdGNoX3VzZWQo YmF0Y2gpOwotCW9mZnNldCA9IEFMSUdOKG9mZnNldCwgYWxpZ24pOwotCWJhdGNoLT5wdHIgPSBi YXRjaC0+YnVmZmVyICsgb2Zmc2V0OwotCXJldHVybiBvZmZzZXQ7Ci19Ci0KLXN0YXRpYyB2b2lk ICoKLWJhdGNoX2FsbG9jKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsIHVpbnQzMl90 IHNpemUsIHVpbnQzMl90IGFsaWduKQotewotCXVpbnQzMl90IG9mZnNldCA9IGJhdGNoX2FsaWdu KGJhdGNoLCBhbGlnbik7Ci0JYmF0Y2gtPnB0ciArPSBzaXplOwotCXJldHVybiBtZW1zZXQoYmF0 Y2gtPmJ1ZmZlciArIG9mZnNldCwgMCwgc2l6ZSk7Ci19Ci0KLXN0YXRpYyB1aW50MzJfdAotYmF0 Y2hfb2Zmc2V0KHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsIHZvaWQgKnB0cikKLXsK LQlyZXR1cm4gKHVpbnQ4X3QgKilwdHIgLSBiYXRjaC0+YnVmZmVyOwotfQotCi1zdGF0aWMgdWlu dDMyX3QKLWJhdGNoX2NvcHkoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwgY29uc3Qg dm9pZCAqcHRyLCB1aW50MzJfdCBzaXplLCB1aW50MzJfdCBhbGlnbikKLXsKLQlyZXR1cm4gYmF0 Y2hfb2Zmc2V0KGJhdGNoLCBtZW1jcHkoYmF0Y2hfYWxsb2MoYmF0Y2gsIHNpemUsIGFsaWduKSwg cHRyLCBzaXplKSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nZW44X3JlbmRlcl9mbHVzaChzdHJ1Y3Qg aW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLCB1aW50MzJfdCBiYXRjaF9lbmQpCi17Ci0JaW50IHJl dDsKLQotCXJldCA9IGRybV9pbnRlbF9ib19zdWJkYXRhKGJhdGNoLT5ibywgMCwgNDA5NiwgYmF0 Y2gtPmJ1ZmZlcik7Ci0JaWYgKHJldCA9PSAwKQotCQlyZXQgPSBkcm1faW50ZWxfYm9fbXJiX2V4 ZWMoYmF0Y2gtPmJvLCBiYXRjaF9lbmQsCi0JCQkJCU5VTEwsIDAsIDAsIDApOwotCWlndF9hc3Nl cnQocmV0ID09IDApOwotfQotCi1zdGF0aWMgdWludDMyX3QKLWdlbjhfZmlsbF9jdXJiZV9idWZm ZXJfZGF0YShzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAotCQkJdWludDhfdCBjb2xv cikKLXsKLQl1aW50OF90ICpjdXJiZV9idWZmZXI7Ci0JdWludDMyX3Qgb2Zmc2V0OwotCi0JY3Vy YmVfYnVmZmVyID0gYmF0Y2hfYWxsb2MoYmF0Y2gsIHNpemVvZih1aW50MzJfdCkgKiA4LCA2NCk7 Ci0Jb2Zmc2V0ID0gYmF0Y2hfb2Zmc2V0KGJhdGNoLCBjdXJiZV9idWZmZXIpOwotCSpjdXJiZV9i dWZmZXIgPSBjb2xvcjsKLQotCXJldHVybiBvZmZzZXQ7Ci19Ci0KLXN0YXRpYyB1aW50MzJfdAot Z2VuOF9maWxsX3N1cmZhY2Vfc3RhdGUoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwK LQkJCXN0cnVjdCBpZ3RfYnVmICpidWYsCi0JCQl1aW50MzJfdCBmb3JtYXQsCi0JCQlpbnQgaXNf ZHN0KQotewotCXN0cnVjdCBnZW44X3N1cmZhY2Vfc3RhdGUgKnNzOwotCXVpbnQzMl90IHdyaXRl X2RvbWFpbiwgcmVhZF9kb21haW4sIG9mZnNldDsKLQlpbnQgcmV0OwotCi0JaWYgKGlzX2RzdCkg ewotCQl3cml0ZV9kb21haW4gPSByZWFkX2RvbWFpbiA9IEk5MTVfR0VNX0RPTUFJTl9SRU5ERVI7 Ci0JfSBlbHNlIHsKLQkJd3JpdGVfZG9tYWluID0gMDsKLQkJcmVhZF9kb21haW4gPSBJOTE1X0dF TV9ET01BSU5fU0FNUExFUjsKLQl9Ci0KLQlzcyA9IGJhdGNoX2FsbG9jKGJhdGNoLCBzaXplb2Yo KnNzKSwgNjQpOwotCW9mZnNldCA9IGJhdGNoX29mZnNldChiYXRjaCwgc3MpOwotCi0Jc3MtPnNz MC5zdXJmYWNlX3R5cGUgPSBHRU44X1NVUkZBQ0VfMkQ7Ci0Jc3MtPnNzMC5zdXJmYWNlX2Zvcm1h dCA9IGZvcm1hdDsKLQlzcy0+c3MwLnJlbmRlcl9jYWNoZV9yZWFkX3dyaXRlID0gMTsKLQlzcy0+ c3MwLnZlcnRpY2FsX2FsaWdubWVudCA9IDE7IC8qIGFsaWduIDQgKi8KLQlzcy0+c3MwLmhvcml6 b250YWxfYWxpZ25tZW50ID0gMTsgLyogYWxpZ24gNCAqLwotCi0JaWYgKGJ1Zi0+dGlsaW5nID09 IEk5MTVfVElMSU5HX1gpCi0JCXNzLT5zczAudGlsZWRfbW9kZSA9IDI7Ci0JZWxzZSBpZiAoYnVm LT50aWxpbmcgPT0gSTkxNV9USUxJTkdfWSkKLQkJc3MtPnNzMC50aWxlZF9tb2RlID0gMzsKLQot CXNzLT5zczguYmFzZV9hZGRyID0gYnVmLT5iby0+b2Zmc2V0OwotCi0JcmV0ID0gZHJtX2ludGVs X2JvX2VtaXRfcmVsb2MoYmF0Y2gtPmJvLAotCQkJCWJhdGNoX29mZnNldChiYXRjaCwgc3MpICsg OCAqIDQsCi0JCQkJYnVmLT5ibywgMCwKLQkJCQlyZWFkX2RvbWFpbiwgd3JpdGVfZG9tYWluKTsK LQlpZ3RfYXNzZXJ0KHJldCA9PSAwKTsKLQotCXNzLT5zczIuaGVpZ2h0ID0gaWd0X2J1Zl9oZWln aHQoYnVmKSAtIDE7Ci0Jc3MtPnNzMi53aWR0aCAgPSBpZ3RfYnVmX3dpZHRoKGJ1ZikgLSAxOwot CXNzLT5zczMucGl0Y2ggID0gYnVmLT5zdHJpZGUgLSAxOwotCi0Jc3MtPnNzNy5zaGFkZXJfY2hh bmVsX3NlbGVjdF9yID0gNDsKLQlzcy0+c3M3LnNoYWRlcl9jaGFuZWxfc2VsZWN0X2cgPSA1Owot CXNzLT5zczcuc2hhZGVyX2NoYW5lbF9zZWxlY3RfYiA9IDY7Ci0Jc3MtPnNzNy5zaGFkZXJfY2hh bmVsX3NlbGVjdF9hID0gNzsKLQotCXJldHVybiBvZmZzZXQ7Ci19Ci0KLXN0YXRpYyB1aW50MzJf dAotZ2VuOF9maWxsX2JpbmRpbmdfdGFibGUoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRj aCwKLQkJCXN0cnVjdCBpZ3RfYnVmICpkc3QpCi17Ci0JdWludDMyX3QgKmJpbmRpbmdfdGFibGUs IG9mZnNldDsKLQotCWJpbmRpbmdfdGFibGUgPSBiYXRjaF9hbGxvYyhiYXRjaCwgMzIsIDY0KTsK LQlvZmZzZXQgPSBiYXRjaF9vZmZzZXQoYmF0Y2gsIGJpbmRpbmdfdGFibGUpOwotCi0JYmluZGlu Z190YWJsZVswXSA9IGdlbjhfZmlsbF9zdXJmYWNlX3N0YXRlKGJhdGNoLCBkc3QsIEdFTjhfU1VS RkFDRUZPUk1BVF9SOF9VTk9STSwgMSk7Ci0KLQlyZXR1cm4gb2Zmc2V0OwotfQotCi1zdGF0aWMg dWludDMyX3QKLWdlbjhfZmlsbF9tZWRpYV9rZXJuZWwoc3RydWN0IGludGVsX2JhdGNoYnVmZmVy ICpiYXRjaCwKLQkJY29uc3QgdWludDMyX3Qga2VybmVsW11bNF0sCi0JCXNpemVfdCBzaXplKQot ewotCXVpbnQzMl90IG9mZnNldDsKLQotCW9mZnNldCA9IGJhdGNoX2NvcHkoYmF0Y2gsIGtlcm5l bCwgc2l6ZSwgNjQpOwotCi0JcmV0dXJuIG9mZnNldDsKLX0KLQotc3RhdGljIHVpbnQzMl90Ci1n ZW44X2ZpbGxfaW50ZXJmYWNlX2Rlc2NyaXB0b3Ioc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpi YXRjaCwgc3RydWN0IGlndF9idWYgKmRzdCkKLXsKLQlzdHJ1Y3QgZ2VuOF9pbnRlcmZhY2VfZGVz Y3JpcHRvcl9kYXRhICppZGQ7Ci0JdWludDMyX3Qgb2Zmc2V0OwotCXVpbnQzMl90IGJpbmRpbmdf dGFibGVfb2Zmc2V0LCBrZXJuZWxfb2Zmc2V0OwotCi0JYmluZGluZ190YWJsZV9vZmZzZXQgPSBn ZW44X2ZpbGxfYmluZGluZ190YWJsZShiYXRjaCwgZHN0KTsKLQlrZXJuZWxfb2Zmc2V0ID0gZ2Vu OF9maWxsX21lZGlhX2tlcm5lbChiYXRjaCwgbWVkaWFfa2VybmVsLCBzaXplb2YobWVkaWFfa2Vy bmVsKSk7Ci0KLQlpZGQgPSBiYXRjaF9hbGxvYyhiYXRjaCwgc2l6ZW9mKCppZGQpLCA2NCk7Ci0J b2Zmc2V0ID0gYmF0Y2hfb2Zmc2V0KGJhdGNoLCBpZGQpOwotCi0JaWRkLT5kZXNjMC5rZXJuZWxf c3RhcnRfcG9pbnRlciA9IChrZXJuZWxfb2Zmc2V0ID4+IDYpOwotCi0JaWRkLT5kZXNjMi5zaW5n bGVfcHJvZ3JhbV9mbG93ID0gMTsKLQlpZGQtPmRlc2MyLmZsb2F0aW5nX3BvaW50X21vZGUgPSBH RU44X0ZMT0FUSU5HX1BPSU5UX0lFRUVfNzU0OwotCi0JaWRkLT5kZXNjMy5zYW1wbGVyX2NvdW50 ID0gMDsgICAgICAvKiAwIHNhbXBsZXJzIHVzZWQgKi8KLQlpZGQtPmRlc2MzLnNhbXBsZXJfc3Rh dGVfcG9pbnRlciA9IDA7Ci0KLQlpZGQtPmRlc2M0LmJpbmRpbmdfdGFibGVfZW50cnlfY291bnQg PSAwOwotCWlkZC0+ZGVzYzQuYmluZGluZ190YWJsZV9wb2ludGVyID0gKGJpbmRpbmdfdGFibGVf b2Zmc2V0ID4+IDUpOwotCi0JaWRkLT5kZXNjNS5jb25zdGFudF91cmJfZW50cnlfcmVhZF9vZmZz ZXQgPSAwOwotCWlkZC0+ZGVzYzUuY29uc3RhbnRfdXJiX2VudHJ5X3JlYWRfbGVuZ3RoID0gMTsg LyogZ3JmIDEgKi8KLQotCXJldHVybiBvZmZzZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nZW44X2Vt aXRfc3RhdGVfYmFzZV9hZGRyZXNzKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gpCi17 Ci0JT1VUX0JBVENIKEdFTjhfU1RBVEVfQkFTRV9BRERSRVNTIHwgKDE2IC0gMikpOwotCi0JLyog Z2VuZXJhbCAqLwotCU9VVF9CQVRDSCgwIHwgQkFTRV9BRERSRVNTX01PRElGWSk7Ci0JT1VUX0JB VENIKDApOwotCi0JLyogc3RhdGVsZXNzIGRhdGEgcG9ydCAqLwotCU9VVF9CQVRDSCgwIHwgQkFT RV9BRERSRVNTX01PRElGWSk7Ci0KLQkvKiBzdXJmYWNlICovCi0JT1VUX1JFTE9DKGJhdGNoLT5i bywgSTkxNV9HRU1fRE9NQUlOX1NBTVBMRVIsIDAsIEJBU0VfQUREUkVTU19NT0RJRlkpOwotCi0J LyogZHluYW1pYyAqLwotCU9VVF9SRUxPQyhiYXRjaC0+Ym8sIEk5MTVfR0VNX0RPTUFJTl9SRU5E RVIgfCBJOTE1X0dFTV9ET01BSU5fSU5TVFJVQ1RJT04sCi0JCTAsIEJBU0VfQUREUkVTU19NT0RJ RlkpOwotCi0JLyogaW5kaXJlY3QgKi8KLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwot Ci0JLyogaW5zdHJ1Y3Rpb24gKi8KLQlPVVRfUkVMT0MoYmF0Y2gtPmJvLCBJOTE1X0dFTV9ET01B SU5fSU5TVFJVQ1RJT04sIDAsIEJBU0VfQUREUkVTU19NT0RJRlkpOwotCi0JLyogZ2VuZXJhbCBz dGF0ZSBidWZmZXIgc2l6ZSAqLwotCU9VVF9CQVRDSCgweGZmZmZmMDAwIHwgMSk7Ci0JLyogZHlu YW1pYyBzdGF0ZSBidWZmZXIgc2l6ZSAqLwotCU9VVF9CQVRDSCgxIDw8IDEyIHwgMSk7Ci0JLyog aW5kaXJlY3Qgb2JqZWN0IGJ1ZmZlciBzaXplICovCi0JT1VUX0JBVENIKDB4ZmZmZmYwMDAgfCAx KTsKLQkvKiBpbnRydWN0aW9uIGJ1ZmZlciBzaXplLCBtdXN0IHNldCBtb2RpZnkgZW5hYmxlIGJp dCwgb3RoZXJ3aXNlIGl0IG1heSByZXN1bHQgaW4gR1BVIGhhbmcgKi8KLQlPVVRfQkFUQ0goMSA8 PCAxMiB8IDEpOwotfQotCi1zdGF0aWMgdm9pZAotZ2VuOF9lbWl0X3ZmZV9zdGF0ZShzdHJ1Y3Qg aW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoKQotewotCU9VVF9CQVRDSChHRU44X01FRElBX1ZGRV9T VEFURSB8ICg5IC0gMikpOwotCi0JLyogc2NyYXRjaCBidWZmZXIgKi8KLQlPVVRfQkFUQ0goMCk7 Ci0JT1VUX0JBVENIKDApOwotCi0JLyogbnVtYmVyIG9mIHRocmVhZHMgJiB1cmIgZW50cmllcyAq LwotCU9VVF9CQVRDSCgxIDw8IDE2IHwKLQkJMiA8PCA4KTsKLQotCU9VVF9CQVRDSCgwKTsKLQot CS8qIHVyYiBlbnRyeSBzaXplICYgY3VyYmUgc2l6ZSAqLwotCU9VVF9CQVRDSCgyIDw8IDE2IHwK LQkJMik7Ci0KLQkvKiBzY29yZWJvYXJkICovCi0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgw KTsKLQlPVVRfQkFUQ0goMCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nZW44X2VtaXRfY3VyYmVfbG9h ZChzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLCB1aW50MzJfdCBjdXJiZV9idWZmZXIp Ci17Ci0JT1VUX0JBVENIKEdFTjhfTUVESUFfQ1VSQkVfTE9BRCB8ICg0IC0gMikpOwotCU9VVF9C QVRDSCgwKTsKLQkvKiBjdXJiZSB0b3RhbCBkYXRhIGxlbmd0aCAqLwotCU9VVF9CQVRDSCg2NCk7 Ci0JLyogY3VyYmUgZGF0YSBzdGFydCBhZGRyZXNzLCBpcyByZWxhdGl2ZSB0byB0aGUgZHluYW1p Y3MgYmFzZSBhZGRyZXNzICovCi0JT1VUX0JBVENIKGN1cmJlX2J1ZmZlcik7Ci19CiAKLXN0YXRp YyB2b2lkCi1nZW44X2VtaXRfaW50ZXJmYWNlX2Rlc2NyaXB0b3JfbG9hZChzdHJ1Y3QgaW50ZWxf YmF0Y2hidWZmZXIgKmJhdGNoLCB1aW50MzJfdCBpbnRlcmZhY2VfZGVzY3JpcHRvcikKLXsKLQlP VVRfQkFUQ0goR0VOOF9NRURJQV9JTlRFUkZBQ0VfREVTQ1JJUFRPUl9MT0FEIHwgKDQgLSAyKSk7 Ci0JT1VUX0JBVENIKDApOwotCS8qIGludGVyZmFjZSBkZXNjcmlwdG9yIGRhdGEgbGVuZ3RoICov Ci0JT1VUX0JBVENIKHNpemVvZihzdHJ1Y3QgZ2VuOF9pbnRlcmZhY2VfZGVzY3JpcHRvcl9kYXRh KSk7Ci0JLyogaW50ZXJmYWNlIGRlc2NyaXB0b3IgYWRkcmVzcywgaXMgcmVsYXRpdmUgdG8gdGhl IGR5bmFtaWNzIGJhc2UgYWRkcmVzcyAqLwotCU9VVF9CQVRDSChpbnRlcmZhY2VfZGVzY3JpcHRv cik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nZW44X2VtaXRfbWVkaWFfc3RhdGVfZmx1c2goc3RydWN0 IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCkKLXsKLQlPVVRfQkFUQ0goR0VOOF9NRURJQV9TVEFU RV9GTFVTSCB8ICgyIC0gMikpOwotCU9VVF9CQVRDSCgwKTsKLX0KLQotc3RhdGljIHZvaWQKLWdl bjhfZW1pdF9tZWRpYV9vYmplY3RzKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCi0J CQl1bnNpZ25lZCB4LCB1bnNpZ25lZCB5LAotCQkJdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhl aWdodCkKLXsKLQlpbnQgaSwgajsKLQotCWZvciAoaSA9IDA7IGkgPCB3aWR0aCAvIDE2OyBpKysp IHsKLQkJZm9yIChqID0gMDsgaiA8IGhlaWdodCAvIDE2OyBqKyspIHsKLQkJCU9VVF9CQVRDSChH RU44X01FRElBX09CSkVDVCB8ICg4IC0gMikpOwotCi0JCQkvKiBpbnRlcmZhY2UgZGVzY3JpcHRv ciBvZmZzZXQgKi8KLQkJCU9VVF9CQVRDSCgwKTsKLQotCQkJLyogd2l0aG91dCBpbmRpcmVjdCBk YXRhICovCi0JCQlPVVRfQkFUQ0goMCk7Ci0JCQlPVVRfQkFUQ0goMCk7Ci0KLQkJCS8qIHNjb3Jl Ym9hcmQgKi8KLQkJCU9VVF9CQVRDSCgwKTsKLQkJCU9VVF9CQVRDSCgwKTsKLQotCQkJLyogaW5s aW5lIGRhdGEgKHhvZmZzZXQsIHlvZmZzZXQpICovCi0JCQlPVVRfQkFUQ0goeCArIGkgKiAxNik7 Ci0JCQlPVVRfQkFUQ0goeSArIGogKiAxNik7Ci0JCQlnZW44X2VtaXRfbWVkaWFfc3RhdGVfZmx1 c2goYmF0Y2gpOwotCQl9Ci0JfQotfQogCiAvKgogICogVGhpcyBzZXRzIHVwIHRoZSBtZWRpYSBw aXBlbGluZSwKQEAgLTM0OSw3ICs2Myw3IEBAIGdlbjhfbWVkaWFfZmlsbGZ1bmMoc3RydWN0IGlu dGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKIAliYXRjaC0+cHRyID0gJmJhdGNoLT5idWZmZXJbQkFU Q0hfU1RBVEVfU1BMSVRdOwogCiAJY3VyYmVfYnVmZmVyID0gZ2VuOF9maWxsX2N1cmJlX2J1ZmZl cl9kYXRhKGJhdGNoLCBjb2xvcik7Ci0JaW50ZXJmYWNlX2Rlc2NyaXB0b3IgPSBnZW44X2ZpbGxf aW50ZXJmYWNlX2Rlc2NyaXB0b3IoYmF0Y2gsIGRzdCk7CisJaW50ZXJmYWNlX2Rlc2NyaXB0b3Ig PSBnZW44X2ZpbGxfaW50ZXJmYWNlX2Rlc2NyaXB0b3IoYmF0Y2gsIGRzdCwgbWVkaWFfa2VybmVs LCBzaXplb2YobWVkaWFfa2VybmVsKSk7CiAJaWd0X2Fzc2VydChiYXRjaC0+cHRyIDwgJmJhdGNo LT5idWZmZXJbNDA5NV0pOwogCiAJLyogbWVkaWEgcGlwZWxpbmUgKi8KZGlmZiAtLWdpdCBhL2xp Yi9tZWRpYV9maWxsX2dlbjhscC5jIGIvbGliL21lZGlhX2ZpbGxfZ2VuOGxwLmMKaW5kZXggMWY4 YTRhZGMuLmRjYzExOTgyIDEwMDY0NAotLS0gYS9saWIvbWVkaWFfZmlsbF9nZW44bHAuYworKysg Yi9saWIvbWVkaWFfZmlsbF9nZW44bHAuYwpAQCAtNSw3ICs1LDcgQEAKICNpbmNsdWRlICJnZW44 X21lZGlhLmgiCiAjaW5jbHVkZSAiaW50ZWxfcmVnLmgiCiAjaW5jbHVkZSAiZHJtdGVzdC5oIgot CisjaW5jbHVkZSAiZ3B1X2ZpbGwuaCIKICNpbmNsdWRlIDxhc3NlcnQuaD4KIAogCkBAIC0yMywy ODYgKzIzLDYgQEAgc3RhdGljIGNvbnN0IHVpbnQzMl90IG1lZGlhX2tlcm5lbFtdWzRdID0gewog CXsgMHgwNzgwMDAzMSwgMHgyMDAwMGE0MCwgMHgwZTAwMGUwMCwgMHg4MjAwMDAxMCB9LAogfTsK IAotc3RhdGljIHVpbnQzMl90Ci1iYXRjaF91c2VkKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAq YmF0Y2gpCi17Ci0JcmV0dXJuIGJhdGNoLT5wdHIgLSBiYXRjaC0+YnVmZmVyOwotfQotCi1zdGF0 aWMgdWludDMyX3QKLWJhdGNoX2FsaWduKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gs IHVpbnQzMl90IGFsaWduKQotewotCXVpbnQzMl90IG9mZnNldCA9IGJhdGNoX3VzZWQoYmF0Y2gp OwotCW9mZnNldCA9IEFMSUdOKG9mZnNldCwgYWxpZ24pOwotCWJhdGNoLT5wdHIgPSBiYXRjaC0+ YnVmZmVyICsgb2Zmc2V0OwotCXJldHVybiBvZmZzZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkICoKLWJh dGNoX2FsbG9jKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsIHVpbnQzMl90IHNpemUs IHVpbnQzMl90IGFsaWduKQotewotCXVpbnQzMl90IG9mZnNldCA9IGJhdGNoX2FsaWduKGJhdGNo LCBhbGlnbik7Ci0JYmF0Y2gtPnB0ciArPSBzaXplOwotCXJldHVybiBtZW1zZXQoYmF0Y2gtPmJ1 ZmZlciArIG9mZnNldCwgMCwgc2l6ZSk7Ci19Ci0KLXN0YXRpYyB1aW50MzJfdAotYmF0Y2hfb2Zm c2V0KHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsIHZvaWQgKnB0cikKLXsKLQlyZXR1 cm4gKHVpbnQ4X3QgKilwdHIgLSBiYXRjaC0+YnVmZmVyOwotfQotCi1zdGF0aWMgdWludDMyX3QK LWJhdGNoX2NvcHkoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwgY29uc3Qgdm9pZCAq cHRyLCB1aW50MzJfdCBzaXplLCB1aW50MzJfdCBhbGlnbikKLXsKLQlyZXR1cm4gYmF0Y2hfb2Zm c2V0KGJhdGNoLCBtZW1jcHkoYmF0Y2hfYWxsb2MoYmF0Y2gsIHNpemUsIGFsaWduKSwgcHRyLCBz aXplKSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nZW44X3JlbmRlcl9mbHVzaChzdHJ1Y3QgaW50ZWxf YmF0Y2hidWZmZXIgKmJhdGNoLCB1aW50MzJfdCBiYXRjaF9lbmQpCi17Ci0JaW50IHJldDsKLQot CXJldCA9IGRybV9pbnRlbF9ib19zdWJkYXRhKGJhdGNoLT5ibywgMCwgNDA5NiwgYmF0Y2gtPmJ1 ZmZlcik7Ci0JaWYgKHJldCA9PSAwKQotCQlyZXQgPSBkcm1faW50ZWxfYm9fbXJiX2V4ZWMoYmF0 Y2gtPmJvLCBiYXRjaF9lbmQsCi0JCQkJCU5VTEwsIDAsIDAsIDApOwotCWlndF9hc3NlcnQocmV0 ID09IDApOwotfQotCi1zdGF0aWMgdWludDMyX3QKLWdlbjhfZmlsbF9jdXJiZV9idWZmZXJfZGF0 YShzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAotCQkJdWludDhfdCBjb2xvcikKLXsK LQl1aW50OF90ICpjdXJiZV9idWZmZXI7Ci0JdWludDMyX3Qgb2Zmc2V0OwotCi0JY3VyYmVfYnVm ZmVyID0gYmF0Y2hfYWxsb2MoYmF0Y2gsIHNpemVvZih1aW50MzJfdCkgKiA4LCA2NCk7Ci0Jb2Zm c2V0ID0gYmF0Y2hfb2Zmc2V0KGJhdGNoLCBjdXJiZV9idWZmZXIpOwotCSpjdXJiZV9idWZmZXIg PSBjb2xvcjsKLQotCXJldHVybiBvZmZzZXQ7Ci19Ci0KLXN0YXRpYyB1aW50MzJfdAotZ2VuOF9m aWxsX3N1cmZhY2Vfc3RhdGUoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKLQkJCXN0 cnVjdCBpZ3RfYnVmICpidWYsCi0JCQl1aW50MzJfdCBmb3JtYXQsCi0JCQlpbnQgaXNfZHN0KQot ewotCXN0cnVjdCBnZW44X3N1cmZhY2Vfc3RhdGUgKnNzOwotCXVpbnQzMl90IHdyaXRlX2RvbWFp biwgcmVhZF9kb21haW4sIG9mZnNldDsKLQlpbnQgcmV0OwotCi0JaWYgKGlzX2RzdCkgewotCQl3 cml0ZV9kb21haW4gPSByZWFkX2RvbWFpbiA9IEk5MTVfR0VNX0RPTUFJTl9SRU5ERVI7Ci0JfSBl bHNlIHsKLQkJd3JpdGVfZG9tYWluID0gMDsKLQkJcmVhZF9kb21haW4gPSBJOTE1X0dFTV9ET01B SU5fU0FNUExFUjsKLQl9Ci0KLQlzcyA9IGJhdGNoX2FsbG9jKGJhdGNoLCBzaXplb2YoKnNzKSwg NjQpOwotCW9mZnNldCA9IGJhdGNoX29mZnNldChiYXRjaCwgc3MpOwotCi0Jc3MtPnNzMC5zdXJm YWNlX3R5cGUgPSBHRU44X1NVUkZBQ0VfMkQ7Ci0Jc3MtPnNzMC5zdXJmYWNlX2Zvcm1hdCA9IGZv cm1hdDsKLQlzcy0+c3MwLnJlbmRlcl9jYWNoZV9yZWFkX3dyaXRlID0gMTsKLQlzcy0+c3MwLnZl cnRpY2FsX2FsaWdubWVudCA9IDE7IC8qIGFsaWduIDQgKi8KLQlzcy0+c3MwLmhvcml6b250YWxf YWxpZ25tZW50ID0gMTsgLyogYWxpZ24gNCAqLwotCi0JaWYgKGJ1Zi0+dGlsaW5nID09IEk5MTVf VElMSU5HX1gpCi0JCXNzLT5zczAudGlsZWRfbW9kZSA9IDI7Ci0JZWxzZSBpZiAoYnVmLT50aWxp bmcgPT0gSTkxNV9USUxJTkdfWSkKLQkJc3MtPnNzMC50aWxlZF9tb2RlID0gMzsKLQotCXNzLT5z czguYmFzZV9hZGRyID0gYnVmLT5iby0+b2Zmc2V0OwotCi0JcmV0ID0gZHJtX2ludGVsX2JvX2Vt aXRfcmVsb2MoYmF0Y2gtPmJvLAotCQkJCWJhdGNoX29mZnNldChiYXRjaCwgc3MpICsgOCAqIDQs Ci0JCQkJYnVmLT5ibywgMCwKLQkJCQlyZWFkX2RvbWFpbiwgd3JpdGVfZG9tYWluKTsKLQlpZ3Rf YXNzZXJ0KHJldCA9PSAwKTsKLQotCXNzLT5zczIuaGVpZ2h0ID0gaWd0X2J1Zl9oZWlnaHQoYnVm KSAtIDE7Ci0Jc3MtPnNzMi53aWR0aCAgPSBpZ3RfYnVmX3dpZHRoKGJ1ZikgLSAxOwotCXNzLT5z czMucGl0Y2ggID0gYnVmLT5zdHJpZGUgLSAxOwotCi0Jc3MtPnNzNy5zaGFkZXJfY2hhbmVsX3Nl bGVjdF9yID0gNDsKLQlzcy0+c3M3LnNoYWRlcl9jaGFuZWxfc2VsZWN0X2cgPSA1OwotCXNzLT5z czcuc2hhZGVyX2NoYW5lbF9zZWxlY3RfYiA9IDY7Ci0Jc3MtPnNzNy5zaGFkZXJfY2hhbmVsX3Nl bGVjdF9hID0gNzsKLQotCXJldHVybiBvZmZzZXQ7Ci19Ci0KLXN0YXRpYyB1aW50MzJfdAotZ2Vu OF9maWxsX2JpbmRpbmdfdGFibGUoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKLQkJ CXN0cnVjdCBpZ3RfYnVmICpkc3QpCi17Ci0JdWludDMyX3QgKmJpbmRpbmdfdGFibGUsIG9mZnNl dDsKLQotCWJpbmRpbmdfdGFibGUgPSBiYXRjaF9hbGxvYyhiYXRjaCwgMzIsIDY0KTsKLQlvZmZz ZXQgPSBiYXRjaF9vZmZzZXQoYmF0Y2gsIGJpbmRpbmdfdGFibGUpOwotCi0JYmluZGluZ190YWJs ZVswXSA9IGdlbjhfZmlsbF9zdXJmYWNlX3N0YXRlKGJhdGNoLCBkc3QsIEdFTjhfU1VSRkFDRUZP Uk1BVF9SOF9VTk9STSwgMSk7Ci0KLQlyZXR1cm4gb2Zmc2V0OwotfQotCi1zdGF0aWMgdWludDMy X3QKLWdlbjhfZmlsbF9tZWRpYV9rZXJuZWwoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRj aCwKLQkJY29uc3QgdWludDMyX3Qga2VybmVsW11bNF0sCi0JCXNpemVfdCBzaXplKQotewotCXVp bnQzMl90IG9mZnNldDsKLQotCW9mZnNldCA9IGJhdGNoX2NvcHkoYmF0Y2gsIGtlcm5lbCwgc2l6 ZSwgNjQpOwotCi0JcmV0dXJuIG9mZnNldDsKLX0KLQotc3RhdGljIHVpbnQzMl90Ci1nZW44X2Zp bGxfaW50ZXJmYWNlX2Rlc2NyaXB0b3Ioc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwg c3RydWN0IGlndF9idWYgKmRzdCkKLXsKLQlzdHJ1Y3QgZ2VuOF9pbnRlcmZhY2VfZGVzY3JpcHRv cl9kYXRhICppZGQ7Ci0JdWludDMyX3Qgb2Zmc2V0OwotCXVpbnQzMl90IGJpbmRpbmdfdGFibGVf b2Zmc2V0LCBrZXJuZWxfb2Zmc2V0OwotCi0JYmluZGluZ190YWJsZV9vZmZzZXQgPSBnZW44X2Zp bGxfYmluZGluZ190YWJsZShiYXRjaCwgZHN0KTsKLQlrZXJuZWxfb2Zmc2V0ID0gZ2VuOF9maWxs X21lZGlhX2tlcm5lbChiYXRjaCwgbWVkaWFfa2VybmVsLCBzaXplb2YobWVkaWFfa2VybmVsKSk7 Ci0KLQlpZGQgPSBiYXRjaF9hbGxvYyhiYXRjaCwgc2l6ZW9mKCppZGQpLCA2NCk7Ci0Jb2Zmc2V0 ID0gYmF0Y2hfb2Zmc2V0KGJhdGNoLCBpZGQpOwotCi0JaWRkLT5kZXNjMC5rZXJuZWxfc3RhcnRf cG9pbnRlciA9IChrZXJuZWxfb2Zmc2V0ID4+IDYpOwotCi0JaWRkLT5kZXNjMi5zaW5nbGVfcHJv Z3JhbV9mbG93ID0gMTsKLQlpZGQtPmRlc2MyLmZsb2F0aW5nX3BvaW50X21vZGUgPSBHRU44X0ZM T0FUSU5HX1BPSU5UX0lFRUVfNzU0OwotCi0JaWRkLT5kZXNjMy5zYW1wbGVyX2NvdW50ID0gMDsg ICAgICAvKiAwIHNhbXBsZXJzIHVzZWQgKi8KLQlpZGQtPmRlc2MzLnNhbXBsZXJfc3RhdGVfcG9p bnRlciA9IDA7Ci0KLQlpZGQtPmRlc2M0LmJpbmRpbmdfdGFibGVfZW50cnlfY291bnQgPSAwOwot CWlkZC0+ZGVzYzQuYmluZGluZ190YWJsZV9wb2ludGVyID0gKGJpbmRpbmdfdGFibGVfb2Zmc2V0 ID4+IDUpOwotCi0JaWRkLT5kZXNjNS5jb25zdGFudF91cmJfZW50cnlfcmVhZF9vZmZzZXQgPSAw OwotCWlkZC0+ZGVzYzUuY29uc3RhbnRfdXJiX2VudHJ5X3JlYWRfbGVuZ3RoID0gMTsgLyogZ3Jm IDEgKi8KLQotCXJldHVybiBvZmZzZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nZW44X2VtaXRfc3Rh dGVfYmFzZV9hZGRyZXNzKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gpCi17Ci0JT1VU X0JBVENIKEdFTjhfU1RBVEVfQkFTRV9BRERSRVNTIHwgKDE2IC0gMikpOwotCi0JLyogZ2VuZXJh bCAqLwotCU9VVF9CQVRDSCgwIHwgQkFTRV9BRERSRVNTX01PRElGWSk7Ci0JT1VUX0JBVENIKDAp OwotCi0JLyogc3RhdGVsZXNzIGRhdGEgcG9ydCAqLwotCU9VVF9CQVRDSCgwIHwgQkFTRV9BRERS RVNTX01PRElGWSk7Ci0KLQkvKiBzdXJmYWNlICovCi0JT1VUX1JFTE9DKGJhdGNoLT5ibywgSTkx NV9HRU1fRE9NQUlOX1NBTVBMRVIsIDAsIEJBU0VfQUREUkVTU19NT0RJRlkpOwotCi0JLyogZHlu YW1pYyAqLwotCU9VVF9SRUxPQyhiYXRjaC0+Ym8sIEk5MTVfR0VNX0RPTUFJTl9SRU5ERVIgfCBJ OTE1X0dFTV9ET01BSU5fSU5TVFJVQ1RJT04sCi0JCTAsIEJBU0VfQUREUkVTU19NT0RJRlkpOwot Ci0JLyogaW5kaXJlY3QgKi8KLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCi0JLyog aW5zdHJ1Y3Rpb24gKi8KLQlPVVRfUkVMT0MoYmF0Y2gtPmJvLCBJOTE1X0dFTV9ET01BSU5fSU5T VFJVQ1RJT04sIDAsIEJBU0VfQUREUkVTU19NT0RJRlkpOwotCi0JLyogZ2VuZXJhbCBzdGF0ZSBi dWZmZXIgc2l6ZSAqLwotCU9VVF9CQVRDSCgweGZmZmZmMDAwIHwgMSk7Ci0JLyogZHluYW1pYyBz dGF0ZSBidWZmZXIgc2l6ZSAqLwotCU9VVF9CQVRDSCgxIDw8IDEyIHwgMSk7Ci0JLyogaW5kaXJl Y3Qgb2JqZWN0IGJ1ZmZlciBzaXplICovCi0JT1VUX0JBVENIKDB4ZmZmZmYwMDAgfCAxKTsKLQkv KiBpbnRydWN0aW9uIGJ1ZmZlciBzaXplLCBtdXN0IHNldCBtb2RpZnkgZW5hYmxlIGJpdCwgb3Ro ZXJ3aXNlIGl0IG1heSByZXN1bHQgaW4gR1BVIGhhbmcgKi8KLQlPVVRfQkFUQ0goMSA8PCAxMiB8 IDEpOwotfQotCi1zdGF0aWMgdm9pZAotZ2VuOF9lbWl0X3ZmZV9zdGF0ZShzdHJ1Y3QgaW50ZWxf YmF0Y2hidWZmZXIgKmJhdGNoKQotewotCU9VVF9CQVRDSChHRU44X01FRElBX1ZGRV9TVEFURSB8 ICg5IC0gMikpOwotCi0JLyogc2NyYXRjaCBidWZmZXIgKi8KLQlPVVRfQkFUQ0goMCk7Ci0JT1VU X0JBVENIKDApOwotCi0JLyogbnVtYmVyIG9mIHRocmVhZHMgJiB1cmIgZW50cmllcyAqLwotCU9V VF9CQVRDSCgxIDw8IDE2IHwKLQkJMiA8PCA4KTsKLQotCU9VVF9CQVRDSCgwKTsKLQotCS8qIHVy YiBlbnRyeSBzaXplICYgY3VyYmUgc2l6ZSAqLwotCU9VVF9CQVRDSCgyIDw8IDE2IHwKLQkJMik7 Ci0KLQkvKiBzY29yZWJvYXJkICovCi0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlP VVRfQkFUQ0goMCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nZW44X2VtaXRfY3VyYmVfbG9hZChzdHJ1 Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLCB1aW50MzJfdCBjdXJiZV9idWZmZXIpCi17Ci0J T1VUX0JBVENIKEdFTjhfTUVESUFfQ1VSQkVfTE9BRCB8ICg0IC0gMikpOwotCU9VVF9CQVRDSCgw KTsKLQkvKiBjdXJiZSB0b3RhbCBkYXRhIGxlbmd0aCAqLwotCU9VVF9CQVRDSCg2NCk7Ci0JLyog Y3VyYmUgZGF0YSBzdGFydCBhZGRyZXNzLCBpcyByZWxhdGl2ZSB0byB0aGUgZHluYW1pY3MgYmFz ZSBhZGRyZXNzICovCi0JT1VUX0JBVENIKGN1cmJlX2J1ZmZlcik7Ci19Ci0KLXN0YXRpYyB2b2lk Ci1nZW44X2VtaXRfaW50ZXJmYWNlX2Rlc2NyaXB0b3JfbG9hZChzdHJ1Y3QgaW50ZWxfYmF0Y2hi dWZmZXIgKmJhdGNoLCB1aW50MzJfdCBpbnRlcmZhY2VfZGVzY3JpcHRvcikKLXsKLQlPVVRfQkFU Q0goR0VOOF9NRURJQV9JTlRFUkZBQ0VfREVTQ1JJUFRPUl9MT0FEIHwgKDQgLSAyKSk7Ci0JT1VU X0JBVENIKDApOwotCS8qIGludGVyZmFjZSBkZXNjcmlwdG9yIGRhdGEgbGVuZ3RoICovCi0JT1VU X0JBVENIKHNpemVvZihzdHJ1Y3QgZ2VuOF9pbnRlcmZhY2VfZGVzY3JpcHRvcl9kYXRhKSk7Ci0J LyogaW50ZXJmYWNlIGRlc2NyaXB0b3IgYWRkcmVzcywgaXMgcmVsYXRpdmUgdG8gdGhlIGR5bmFt aWNzIGJhc2UgYWRkcmVzcyAqLwotCU9VVF9CQVRDSChpbnRlcmZhY2VfZGVzY3JpcHRvcik7Ci19 Ci0KLXN0YXRpYyB2b2lkCi1nZW44bHBfZW1pdF9tZWRpYV9vYmplY3RzKHN0cnVjdCBpbnRlbF9i YXRjaGJ1ZmZlciAqYmF0Y2gsCi0JCQl1bnNpZ25lZCB4LCB1bnNpZ25lZCB5LAotCQkJdW5zaWdu ZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCkKLXsKLQlpbnQgaSwgajsKLQotCWZvciAoaSA9IDA7 IGkgPCB3aWR0aCAvIDE2OyBpKyspIHsKLQkJZm9yIChqID0gMDsgaiA8IGhlaWdodCAvIDE2OyBq KyspIHsKLQkJCU9VVF9CQVRDSChHRU44X01FRElBX09CSkVDVCB8ICg4IC0gMikpOwotCi0JCQkv KiBpbnRlcmZhY2UgZGVzY3JpcHRvciBvZmZzZXQgKi8KLQkJCU9VVF9CQVRDSCgwKTsKLQotCQkJ Lyogd2l0aG91dCBpbmRpcmVjdCBkYXRhICovCi0JCQlPVVRfQkFUQ0goMCk7Ci0JCQlPVVRfQkFU Q0goMCk7Ci0KLQkJCS8qIHNjb3JlYm9hcmQgKi8KLQkJCU9VVF9CQVRDSCgwKTsKLQkJCU9VVF9C QVRDSCgwKTsKLQotCQkJLyogaW5saW5lIGRhdGEgKHhvZmZzZXQsIHlvZmZzZXQpICovCi0JCQlP VVRfQkFUQ0goeCArIGkgKiAxNik7Ci0JCQlPVVRfQkFUQ0goeSArIGogKiAxNik7Ci0JCX0KLQl9 Ci19Ci0KIC8qCiAgKiBUaGlzIHNldHMgdXAgdGhlIG1lZGlhIHBpcGVsaW5lLAogICoKQEAgLTM0 MSw3ICs2MSw3IEBAIGdlbjhscF9tZWRpYV9maWxsZnVuYyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZm ZXIgKmJhdGNoLAogCWJhdGNoLT5wdHIgPSAmYmF0Y2gtPmJ1ZmZlcltCQVRDSF9TVEFURV9TUExJ VF07CiAKIAljdXJiZV9idWZmZXIgPSBnZW44X2ZpbGxfY3VyYmVfYnVmZmVyX2RhdGEoYmF0Y2gs IGNvbG9yKTsKLQlpbnRlcmZhY2VfZGVzY3JpcHRvciA9IGdlbjhfZmlsbF9pbnRlcmZhY2VfZGVz Y3JpcHRvcihiYXRjaCwgZHN0KTsKKwlpbnRlcmZhY2VfZGVzY3JpcHRvciA9IGdlbjhfZmlsbF9p bnRlcmZhY2VfZGVzY3JpcHRvcihiYXRjaCwgZHN0LCBtZWRpYV9rZXJuZWwsIHNpemVvZihtZWRp YV9rZXJuZWwpKTsKIAlpZ3RfYXNzZXJ0KGJhdGNoLT5wdHIgPCAmYmF0Y2gtPmJ1ZmZlcls0MDk1 XSk7CiAKIAkvKiBtZWRpYSBwaXBlbGluZSAqLwpkaWZmIC0tZ2l0IGEvbGliL21lZGlhX2ZpbGxf Z2VuOS5jIGIvbGliL21lZGlhX2ZpbGxfZ2VuOS5jCmluZGV4IDNmZDIxODE5Li42YWNjZGJlNCAx MDA2NDQKLS0tIGEvbGliL21lZGlhX2ZpbGxfZ2VuOS5jCisrKyBiL2xpYi9tZWRpYV9maWxsX2dl bjkuYwpAQCAtNCwxMSArNCw5IEBACiAjaW5jbHVkZSAibWVkaWFfZmlsbC5oIgogI2luY2x1ZGUg ImdlbjhfbWVkaWEuaCIKICNpbmNsdWRlICJpbnRlbF9yZWcuaCIKLQorI2luY2x1ZGUgImdwdV9m aWxsLmgiCiAjaW5jbHVkZSA8YXNzZXJ0Lmg+CiAKLSNkZWZpbmUgQUxJR04oeCwgeSkgKCgoeCkg KyAoeSktMSkgJiB+KCh5KS0xKSkKLQogc3RhdGljIGNvbnN0IHVpbnQzMl90IG1lZGlhX2tlcm5l bFtdWzRdID0gewogCXsgMHgwMDQwMDAwMSwgMHgyMDIwMjI4OCwgMHgwMDAwMDAyMCwgMHgwMDAw MDAwMCB9LAogCXsgMHgwMDYwMDAwMSwgMHgyMDgwMDIwOCwgMHgwMDhkMDAwMCwgMHgwMDAwMDAw MCB9LApAQCAtMjMsMjk4ICsyMSw2IEBAIHN0YXRpYyBjb25zdCB1aW50MzJfdCBtZWRpYV9rZXJu ZWxbXVs0XSA9IHsKIAl7IDB4MDc4MDAwMzEsIDB4MjAwMDBhNDAsIDB4MGUwMDBlMDAsIDB4ODIw MDAwMTAgfSwKIH07CiAKLXN0YXRpYyB1aW50MzJfdAotYmF0Y2hfdXNlZChzdHJ1Y3QgaW50ZWxf YmF0Y2hidWZmZXIgKmJhdGNoKQotewotCXJldHVybiBiYXRjaC0+cHRyIC0gYmF0Y2gtPmJ1ZmZl cjsKLX0KLQotc3RhdGljIHVpbnQzMl90Ci1iYXRjaF9hbGlnbihzdHJ1Y3QgaW50ZWxfYmF0Y2hi dWZmZXIgKmJhdGNoLCB1aW50MzJfdCBhbGlnbikKLXsKLQl1aW50MzJfdCBvZmZzZXQgPSBiYXRj aF91c2VkKGJhdGNoKTsKLQlvZmZzZXQgPSBBTElHTihvZmZzZXQsIGFsaWduKTsKLQliYXRjaC0+ cHRyID0gYmF0Y2gtPmJ1ZmZlciArIG9mZnNldDsKLQlyZXR1cm4gb2Zmc2V0OwotfQotCi1zdGF0 aWMgdm9pZCAqCi1iYXRjaF9hbGxvYyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLCB1 aW50MzJfdCBzaXplLCB1aW50MzJfdCBhbGlnbikKLXsKLQl1aW50MzJfdCBvZmZzZXQgPSBiYXRj aF9hbGlnbihiYXRjaCwgYWxpZ24pOwotCWJhdGNoLT5wdHIgKz0gc2l6ZTsKLQlyZXR1cm4gbWVt c2V0KGJhdGNoLT5idWZmZXIgKyBvZmZzZXQsIDAsIHNpemUpOwotfQotCi1zdGF0aWMgdWludDMy X3QKLWJhdGNoX29mZnNldChzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLCB2b2lkICpw dHIpCi17Ci0JcmV0dXJuICh1aW50OF90ICopcHRyIC0gYmF0Y2gtPmJ1ZmZlcjsKLX0KLQotc3Rh dGljIHVpbnQzMl90Ci1iYXRjaF9jb3B5KHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gs IGNvbnN0IHZvaWQgKnB0ciwgdWludDMyX3Qgc2l6ZSwgdWludDMyX3QgYWxpZ24pCi17Ci0JcmV0 dXJuIGJhdGNoX29mZnNldChiYXRjaCwgbWVtY3B5KGJhdGNoX2FsbG9jKGJhdGNoLCBzaXplLCBh bGlnbiksIHB0ciwgc2l6ZSkpOwotfQotCi1zdGF0aWMgdm9pZAotZ2VuOF9yZW5kZXJfZmx1c2go c3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwgdWludDMyX3QgYmF0Y2hfZW5kKQotewot CWludCByZXQ7Ci0KLQlyZXQgPSBkcm1faW50ZWxfYm9fc3ViZGF0YShiYXRjaC0+Ym8sIDAsIDQw OTYsIGJhdGNoLT5idWZmZXIpOwotCWlmIChyZXQgPT0gMCkKLQkJcmV0ID0gZHJtX2ludGVsX2Jv X21yYl9leGVjKGJhdGNoLT5ibywgYmF0Y2hfZW5kLAotCQkJCQlOVUxMLCAwLCAwLCAwKTsKLQlh c3NlcnQocmV0ID09IDApOwotfQotCi1zdGF0aWMgdWludDMyX3QKLWdlbjhfZmlsbF9jdXJiZV9i dWZmZXJfZGF0YShzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAotCQkJdWludDhfdCBj b2xvcikKLXsKLQl1aW50OF90ICpjdXJiZV9idWZmZXI7Ci0JdWludDMyX3Qgb2Zmc2V0OwotCi0J Y3VyYmVfYnVmZmVyID0gYmF0Y2hfYWxsb2MoYmF0Y2gsIHNpemVvZih1aW50MzJfdCkgKiA4LCA2 NCk7Ci0Jb2Zmc2V0ID0gYmF0Y2hfb2Zmc2V0KGJhdGNoLCBjdXJiZV9idWZmZXIpOwotCSpjdXJi ZV9idWZmZXIgPSBjb2xvcjsKLQotCXJldHVybiBvZmZzZXQ7Ci19Ci0KLXN0YXRpYyB1aW50MzJf dAotZ2VuOF9maWxsX3N1cmZhY2Vfc3RhdGUoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRj aCwKLQkJCXN0cnVjdCBpZ3RfYnVmICpidWYsCi0JCQl1aW50MzJfdCBmb3JtYXQsCi0JCQlpbnQg aXNfZHN0KQotewotCXN0cnVjdCBnZW44X3N1cmZhY2Vfc3RhdGUgKnNzOwotCXVpbnQzMl90IHdy aXRlX2RvbWFpbiwgcmVhZF9kb21haW4sIG9mZnNldDsKLQlpbnQgcmV0OwotCi0JaWYgKGlzX2Rz dCkgewotCQl3cml0ZV9kb21haW4gPSByZWFkX2RvbWFpbiA9IEk5MTVfR0VNX0RPTUFJTl9SRU5E RVI7Ci0JfSBlbHNlIHsKLQkJd3JpdGVfZG9tYWluID0gMDsKLQkJcmVhZF9kb21haW4gPSBJOTE1 X0dFTV9ET01BSU5fU0FNUExFUjsKLQl9Ci0KLQlzcyA9IGJhdGNoX2FsbG9jKGJhdGNoLCBzaXpl b2YoKnNzKSwgNjQpOwotCW9mZnNldCA9IGJhdGNoX29mZnNldChiYXRjaCwgc3MpOwotCi0Jc3Mt PnNzMC5zdXJmYWNlX3R5cGUgPSBHRU44X1NVUkZBQ0VfMkQ7Ci0Jc3MtPnNzMC5zdXJmYWNlX2Zv cm1hdCA9IGZvcm1hdDsKLQlzcy0+c3MwLnJlbmRlcl9jYWNoZV9yZWFkX3dyaXRlID0gMTsKLQlz cy0+c3MwLnZlcnRpY2FsX2FsaWdubWVudCA9IDE7IC8qIGFsaWduIDQgKi8KLQlzcy0+c3MwLmhv cml6b250YWxfYWxpZ25tZW50ID0gMTsgLyogYWxpZ24gNCAqLwotCi0JaWYgKGJ1Zi0+dGlsaW5n ID09IEk5MTVfVElMSU5HX1gpCi0JCXNzLT5zczAudGlsZWRfbW9kZSA9IDI7Ci0JZWxzZSBpZiAo YnVmLT50aWxpbmcgPT0gSTkxNV9USUxJTkdfWSkKLQkJc3MtPnNzMC50aWxlZF9tb2RlID0gMzsK LQotCXNzLT5zczguYmFzZV9hZGRyID0gYnVmLT5iby0+b2Zmc2V0OwotCi0JcmV0ID0gZHJtX2lu dGVsX2JvX2VtaXRfcmVsb2MoYmF0Y2gtPmJvLAotCQkJCWJhdGNoX29mZnNldChiYXRjaCwgc3Mp ICsgOCAqIDQsCi0JCQkJYnVmLT5ibywgMCwKLQkJCQlyZWFkX2RvbWFpbiwgd3JpdGVfZG9tYWlu KTsKLQlhc3NlcnQocmV0ID09IDApOwotCi0Jc3MtPnNzMi5oZWlnaHQgPSBpZ3RfYnVmX2hlaWdo dChidWYpIC0gMTsKLQlzcy0+c3MyLndpZHRoICA9IGlndF9idWZfd2lkdGgoYnVmKSAtIDE7Ci0J c3MtPnNzMy5waXRjaCAgPSBidWYtPnN0cmlkZSAtIDE7Ci0KLQlzcy0+c3M3LnNoYWRlcl9jaGFu ZWxfc2VsZWN0X3IgPSA0OwotCXNzLT5zczcuc2hhZGVyX2NoYW5lbF9zZWxlY3RfZyA9IDU7Ci0J c3MtPnNzNy5zaGFkZXJfY2hhbmVsX3NlbGVjdF9iID0gNjsKLQlzcy0+c3M3LnNoYWRlcl9jaGFu ZWxfc2VsZWN0X2EgPSA3OwotCi0JcmV0dXJuIG9mZnNldDsKLX0KLQotc3RhdGljIHVpbnQzMl90 Ci1nZW44X2ZpbGxfYmluZGluZ190YWJsZShzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNo LAotCQkJc3RydWN0IGlndF9idWYgKmRzdCkKLXsKLQl1aW50MzJfdCAqYmluZGluZ190YWJsZSwg b2Zmc2V0OwotCi0JYmluZGluZ190YWJsZSA9IGJhdGNoX2FsbG9jKGJhdGNoLCAzMiwgNjQpOwot CW9mZnNldCA9IGJhdGNoX29mZnNldChiYXRjaCwgYmluZGluZ190YWJsZSk7Ci0KLQliaW5kaW5n X3RhYmxlWzBdID0gZ2VuOF9maWxsX3N1cmZhY2Vfc3RhdGUoYmF0Y2gsIGRzdCwgR0VOOF9TVVJG QUNFRk9STUFUX1I4X1VOT1JNLCAxKTsKLQotCXJldHVybiBvZmZzZXQ7Ci19Ci0KLXN0YXRpYyB1 aW50MzJfdAotZ2VuOF9maWxsX21lZGlhX2tlcm5lbChzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIg KmJhdGNoLAotCQljb25zdCB1aW50MzJfdCBrZXJuZWxbXVs0XSwKLQkJc2l6ZV90IHNpemUpCi17 Ci0JdWludDMyX3Qgb2Zmc2V0OwotCi0Jb2Zmc2V0ID0gYmF0Y2hfY29weShiYXRjaCwga2VybmVs LCBzaXplLCA2NCk7Ci0KLQlyZXR1cm4gb2Zmc2V0OwotfQotCi1zdGF0aWMgdWludDMyX3QKLWdl bjhfZmlsbF9pbnRlcmZhY2VfZGVzY3JpcHRvcihzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJh dGNoLCBzdHJ1Y3QgaWd0X2J1ZiAqZHN0KQotewotCXN0cnVjdCBnZW44X2ludGVyZmFjZV9kZXNj cmlwdG9yX2RhdGEgKmlkZDsKLQl1aW50MzJfdCBvZmZzZXQ7Ci0JdWludDMyX3QgYmluZGluZ190 YWJsZV9vZmZzZXQsIGtlcm5lbF9vZmZzZXQ7Ci0KLQliaW5kaW5nX3RhYmxlX29mZnNldCA9IGdl bjhfZmlsbF9iaW5kaW5nX3RhYmxlKGJhdGNoLCBkc3QpOwotCWtlcm5lbF9vZmZzZXQgPSBnZW44 X2ZpbGxfbWVkaWFfa2VybmVsKGJhdGNoLCBtZWRpYV9rZXJuZWwsIHNpemVvZihtZWRpYV9rZXJu ZWwpKTsKLQotCWlkZCA9IGJhdGNoX2FsbG9jKGJhdGNoLCBzaXplb2YoKmlkZCksIDY0KTsKLQlv ZmZzZXQgPSBiYXRjaF9vZmZzZXQoYmF0Y2gsIGlkZCk7Ci0KLQlpZGQtPmRlc2MwLmtlcm5lbF9z dGFydF9wb2ludGVyID0gKGtlcm5lbF9vZmZzZXQgPj4gNik7Ci0KLQlpZGQtPmRlc2MyLnNpbmds ZV9wcm9ncmFtX2Zsb3cgPSAxOwotCWlkZC0+ZGVzYzIuZmxvYXRpbmdfcG9pbnRfbW9kZSA9IEdF TjhfRkxPQVRJTkdfUE9JTlRfSUVFRV83NTQ7Ci0KLQlpZGQtPmRlc2MzLnNhbXBsZXJfY291bnQg PSAwOyAgICAgIC8qIDAgc2FtcGxlcnMgdXNlZCAqLwotCWlkZC0+ZGVzYzMuc2FtcGxlcl9zdGF0 ZV9wb2ludGVyID0gMDsKLQotCWlkZC0+ZGVzYzQuYmluZGluZ190YWJsZV9lbnRyeV9jb3VudCA9 IDA7Ci0JaWRkLT5kZXNjNC5iaW5kaW5nX3RhYmxlX3BvaW50ZXIgPSAoYmluZGluZ190YWJsZV9v ZmZzZXQgPj4gNSk7Ci0KLQlpZGQtPmRlc2M1LmNvbnN0YW50X3VyYl9lbnRyeV9yZWFkX29mZnNl dCA9IDA7Ci0JaWRkLT5kZXNjNS5jb25zdGFudF91cmJfZW50cnlfcmVhZF9sZW5ndGggPSAxOyAv KiBncmYgMSAqLwotCi0JcmV0dXJuIG9mZnNldDsKLX0KLQotc3RhdGljIHZvaWQKLWdlbjlfZW1p dF9zdGF0ZV9iYXNlX2FkZHJlc3Moc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCkKLXsK LQlPVVRfQkFUQ0goR0VOOF9TVEFURV9CQVNFX0FERFJFU1MgfCAoMTkgLSAyKSk7Ci0KLQkvKiBn ZW5lcmFsICovCi0JT1VUX0JBVENIKDAgfCBCQVNFX0FERFJFU1NfTU9ESUZZKTsKLQlPVVRfQkFU Q0goMCk7Ci0KLQkvKiBzdGF0ZWxlc3MgZGF0YSBwb3J0ICovCi0JT1VUX0JBVENIKDAgfCBCQVNF X0FERFJFU1NfTU9ESUZZKTsKLQotCS8qIHN1cmZhY2UgKi8KLQlPVVRfUkVMT0MoYmF0Y2gtPmJv LCBJOTE1X0dFTV9ET01BSU5fU0FNUExFUiwgMCwgQkFTRV9BRERSRVNTX01PRElGWSk7Ci0KLQkv KiBkeW5hbWljICovCi0JT1VUX1JFTE9DKGJhdGNoLT5ibywgSTkxNV9HRU1fRE9NQUlOX1JFTkRF UiB8IEk5MTVfR0VNX0RPTUFJTl9JTlNUUlVDVElPTiwKLQkJMCwgQkFTRV9BRERSRVNTX01PRElG WSk7Ci0KLQkvKiBpbmRpcmVjdCAqLwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0K LQkvKiBpbnN0cnVjdGlvbiAqLwotCU9VVF9SRUxPQyhiYXRjaC0+Ym8sIEk5MTVfR0VNX0RPTUFJ Tl9JTlNUUlVDVElPTiwgMCwgQkFTRV9BRERSRVNTX01PRElGWSk7Ci0KLQkvKiBnZW5lcmFsIHN0 YXRlIGJ1ZmZlciBzaXplICovCi0JT1VUX0JBVENIKDB4ZmZmZmYwMDAgfCAxKTsKLQkvKiBkeW5h bWljIHN0YXRlIGJ1ZmZlciBzaXplICovCi0JT1VUX0JBVENIKDEgPDwgMTIgfCAxKTsKLQkvKiBp bmRpcmVjdCBvYmplY3QgYnVmZmVyIHNpemUgKi8KLQlPVVRfQkFUQ0goMHhmZmZmZjAwMCB8IDEp OwotCS8qIGludHJ1Y3Rpb24gYnVmZmVyIHNpemUsIG11c3Qgc2V0IG1vZGlmeSBlbmFibGUgYml0 LCBvdGhlcndpc2UgaXQgbWF5IHJlc3VsdCBpbiBHUFUgaGFuZyAqLwotCU9VVF9CQVRDSCgxIDw8 IDEyIHwgMSk7Ci0KLQkvKiBCaW5kbGVzcyBzdXJmYWNlIHN0YXRlIGJhc2UgYWRkcmVzcyAqLwot CU9VVF9CQVRDSCgwIHwgQkFTRV9BRERSRVNTX01PRElGWSk7Ci0JT1VUX0JBVENIKDApOwotCU9V VF9CQVRDSCgweGZmZmZmMDAwKTsKLX0KLQotc3RhdGljIHZvaWQKLWdlbjhfZW1pdF92ZmVfc3Rh dGUoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCkKLXsKLQlPVVRfQkFUQ0goR0VOOF9N RURJQV9WRkVfU1RBVEUgfCAoOSAtIDIpKTsKLQotCS8qIHNjcmF0Y2ggYnVmZmVyICovCi0JT1VU X0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQotCS8qIG51bWJlciBvZiB0aHJlYWRzICYgdXJi IGVudHJpZXMgKi8KLQlPVVRfQkFUQ0goMSA8PCAxNiB8Ci0JCTIgPDwgOCk7Ci0KLQlPVVRfQkFU Q0goMCk7Ci0KLQkvKiB1cmIgZW50cnkgc2l6ZSAmIGN1cmJlIHNpemUgKi8KLQlPVVRfQkFUQ0go MiA8PCAxNiB8Ci0JCTIpOwotCi0JLyogc2NvcmVib2FyZCAqLwotCU9VVF9CQVRDSCgwKTsKLQlP VVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotfQotCi1zdGF0aWMgdm9pZAotZ2VuOF9lbWl0 X2N1cmJlX2xvYWQoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwgdWludDMyX3QgY3Vy YmVfYnVmZmVyKQotewotCU9VVF9CQVRDSChHRU44X01FRElBX0NVUkJFX0xPQUQgfCAoNCAtIDIp KTsKLQlPVVRfQkFUQ0goMCk7Ci0JLyogY3VyYmUgdG90YWwgZGF0YSBsZW5ndGggKi8KLQlPVVRf QkFUQ0goNjQpOwotCS8qIGN1cmJlIGRhdGEgc3RhcnQgYWRkcmVzcywgaXMgcmVsYXRpdmUgdG8g dGhlIGR5bmFtaWNzIGJhc2UgYWRkcmVzcyAqLwotCU9VVF9CQVRDSChjdXJiZV9idWZmZXIpOwot fQotCi1zdGF0aWMgdm9pZAotZ2VuOF9lbWl0X2ludGVyZmFjZV9kZXNjcmlwdG9yX2xvYWQoc3Ry dWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwgdWludDMyX3QgaW50ZXJmYWNlX2Rlc2NyaXB0 b3IpCi17Ci0JT1VUX0JBVENIKEdFTjhfTUVESUFfSU5URVJGQUNFX0RFU0NSSVBUT1JfTE9BRCB8 ICg0IC0gMikpOwotCU9VVF9CQVRDSCgwKTsKLQkvKiBpbnRlcmZhY2UgZGVzY3JpcHRvciBkYXRh IGxlbmd0aCAqLwotCU9VVF9CQVRDSChzaXplb2Yoc3RydWN0IGdlbjhfaW50ZXJmYWNlX2Rlc2Ny aXB0b3JfZGF0YSkpOwotCS8qIGludGVyZmFjZSBkZXNjcmlwdG9yIGFkZHJlc3MsIGlzIHJlbGF0 aXZlIHRvIHRoZSBkeW5hbWljcyBiYXNlIGFkZHJlc3MgKi8KLQlPVVRfQkFUQ0goaW50ZXJmYWNl X2Rlc2NyaXB0b3IpOwotfQotCi1zdGF0aWMgdm9pZAotZ2VuOF9lbWl0X21lZGlhX3N0YXRlX2Zs dXNoKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gpCi17Ci0JT1VUX0JBVENIKEdFTjhf TUVESUFfU1RBVEVfRkxVU0ggfCAoMiAtIDIpKTsKLQlPVVRfQkFUQ0goMCk7Ci19Ci0KLXN0YXRp YyB2b2lkCi1nZW44X2VtaXRfbWVkaWFfb2JqZWN0cyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIg KmJhdGNoLAotCQkJdW5zaWduZWQgeCwgdW5zaWduZWQgeSwKLQkJCXVuc2lnbmVkIHdpZHRoLCB1 bnNpZ25lZCBoZWlnaHQpCi17Ci0JaW50IGksIGo7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgd2lkdGgg LyAxNjsgaSsrKSB7Ci0JCWZvciAoaiA9IDA7IGogPCBoZWlnaHQgLyAxNjsgaisrKSB7Ci0JCQlP VVRfQkFUQ0goR0VOOF9NRURJQV9PQkpFQ1QgfCAoOCAtIDIpKTsKLQotCQkJLyogaW50ZXJmYWNl IGRlc2NyaXB0b3Igb2Zmc2V0ICovCi0JCQlPVVRfQkFUQ0goMCk7Ci0KLQkJCS8qIHdpdGhvdXQg aW5kaXJlY3QgZGF0YSAqLwotCQkJT1VUX0JBVENIKDApOwotCQkJT1VUX0JBVENIKDApOwotCi0J CQkvKiBzY29yZWJvYXJkICovCi0JCQlPVVRfQkFUQ0goMCk7Ci0JCQlPVVRfQkFUQ0goMCk7Ci0K LQkJCS8qIGlubGluZSBkYXRhICh4b2Zmc2V0LCB5b2Zmc2V0KSAqLwotCQkJT1VUX0JBVENIKHgg KyBpICogMTYpOwotCQkJT1VUX0JBVENIKHkgKyBqICogMTYpOwotCQkJZ2VuOF9lbWl0X21lZGlh X3N0YXRlX2ZsdXNoKGJhdGNoKTsKLQkJfQotCX0KLX0KIAogLyoKICAqIFRoaXMgc2V0cyB1cCB0 aGUgbWVkaWEgcGlwZWxpbmUsCkBAIC0zNTQsNyArNjAsNyBAQCBnZW45X21lZGlhX2ZpbGxmdW5j KHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCiAJYmF0Y2gtPnB0ciA9ICZiYXRjaC0+ YnVmZmVyW0JBVENIX1NUQVRFX1NQTElUXTsKIAogCWN1cmJlX2J1ZmZlciA9IGdlbjhfZmlsbF9j dXJiZV9idWZmZXJfZGF0YShiYXRjaCwgY29sb3IpOwotCWludGVyZmFjZV9kZXNjcmlwdG9yID0g Z2VuOF9maWxsX2ludGVyZmFjZV9kZXNjcmlwdG9yKGJhdGNoLCBkc3QpOworCWludGVyZmFjZV9k ZXNjcmlwdG9yID0gZ2VuOF9maWxsX2ludGVyZmFjZV9kZXNjcmlwdG9yKGJhdGNoLCBkc3QsIG1l ZGlhX2tlcm5lbCwgc2l6ZW9mKG1lZGlhX2tlcm5lbCkpOwogCWFzc2VydChiYXRjaC0+cHRyIDwg JmJhdGNoLT5idWZmZXJbNDA5NV0pOwogCiAJLyogbWVkaWEgcGlwZWxpbmUgKi8KZGlmZiAtLWdp dCBhL2xpYi9tZXNvbi5idWlsZCBiL2xpYi9tZXNvbi5idWlsZAppbmRleCBiM2I4YjE0YS4uMzg1 ZTA4YjkgMTAwNjQ0Ci0tLSBhL2xpYi9tZXNvbi5idWlsZAorKysgYi9saWIvbWVzb24uYnVpbGQK QEAgLTMwLDYgKzMwLDcgQEAgbGliX3NvdXJjZXMgPSBbCiAJJ21lZGlhX2ZpbGxfZ2VuOS5jJywK IAknbWVkaWFfc3Bpbi5jJywKIAknZ3BncHVfZmlsbC5jJywKKwknZ3B1X2ZpbGwuYycsCiAJJ3Jl bmRlcmNvcHlfaTkxNS5jJywKIAkncmVuZGVyY29weV9pODMwLmMnLAogCSdyZW5kZXJjb3B5X2dl bjYuYycsCi0tIAoyLjE0LjMKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fCmlndC1kZXYgbWFpbGluZyBsaXN0CmlndC1kZXZAbGlzdHMuZnJlZWRlc2t0b3Au b3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaWd0LWRl dgo=