From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by gabe.freedesktop.org (Postfix) with ESMTPS id 892856E351 for ; Tue, 10 Apr 2018 08:14:23 +0000 (UTC) From: Katarzyna Dec Date: Tue, 10 Apr 2018 10:12:29 +0200 Message-Id: <20180410081232.14699-2-katarzyna.dec@intel.com> In-Reply-To: <20180410081232.14699-1-katarzyna.dec@intel.com> References: <20180410081232.14699-1-katarzyna.dec@intel.com> Subject: [igt-dev] [PATCH i-g-t v4 1/4] lib: Move common gpgpu/media fill functions to gpu_fill library List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 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 bGVhdmluZyBvbmx5CnRoZSBtb3N0IGNyaXRpY2FsIGNvZGUgY2hhbmdlcy4KClNpZ25lZC1vZmYt Ynk6IEthdGFyenluYSBEZWMgPGthdGFyenluYS5kZWNAaW50ZWwuY29tPgpDYzogTHVrYXN6IEth bGFtYXJ6IDxsdWthc3oua2FsYW1hcnpAaW50ZWwuY29tPgpDYzogRGFuaWVsZSBDZXJhb2xvIFNw dXJpbyA8ZGFuaWVsZS5jZXJhb2xvc3B1cmlvQGludGVsLmNvbT4KLS0tCiBsaWIvTWFrZWZpbGUu c291cmNlcyAgICB8ICAgMiArCiBsaWIvZ3BncHVfZmlsbC5jICAgICAgICB8IDU3MSArLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIGxpYi9ncHVfZmlsbC5jICAgICAgICAgIHwg NzU4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogbGli L2dwdV9maWxsLmggICAgICAgICAgfCAxMzggKysrKysrKysrCiBsaWIvbWVkaWFfZmlsbF9nZW43 LmMgICB8IDI3MSArLS0tLS0tLS0tLS0tLS0tLQogbGliL21lZGlhX2ZpbGxfZ2VuOC5jICAgfCAy OTAgKy0tLS0tLS0tLS0tLS0tLS0tCiBsaWIvbWVkaWFfZmlsbF9nZW44bHAuYyB8IDI4NCArLS0t LS0tLS0tLS0tLS0tLS0KIGxpYi9tZWRpYV9maWxsX2dlbjkuYyAgIHwgMjk4ICstLS0tLS0tLS0t LS0tLS0tLS0KIGxpYi9tZXNvbi5idWlsZCAgICAgICAgIHwgICAxICsKIDkgZmlsZXMgY2hhbmdl ZCwgOTA4IGluc2VydGlvbnMoKyksIDE3MDUgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2 NDQgbGliL2dwdV9maWxsLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvZ3B1X2ZpbGwuaAoKZGlm ZiAtLWdpdCBhL2xpYi9NYWtlZmlsZS5zb3VyY2VzIGIvbGliL01ha2VmaWxlLnNvdXJjZXMKaW5k ZXggM2QzN2VmMWQuLjQ1ZTY1ZGQ3IDEwMDY0NAotLS0gYS9saWIvTWFrZWZpbGUuc291cmNlcwor KysgYi9saWIvTWFrZWZpbGUuc291cmNlcwpAQCAtNjQsNiArNjQsOCBAQCBsaWJfc291cmNlX2xp c3QgPQkgCVwKIAltZWRpYV9zcGluLmMJCVwKIAlncGdwdV9maWxsLmgJCVwKIAlncGdwdV9maWxs LmMJCVwKKwlncHVfZmlsbC5oCQlcCisJZ3B1X2ZpbGwuYwkJXAogCWdlbjdfbWVkaWEuaCAgICAg ICAgICAgIFwKIAlnZW44X21lZGlhLmggICAgICAgICAgICBcCiAJcmVuZGVyY29weV9pOTE1LmMJ XApkaWZmIC0tZ2l0IGEvbGliL2dwZ3B1X2ZpbGwuYyBiL2xpYi9ncGdwdV9maWxsLmMKaW5kZXgg NGQ5ODY0M2QuLmYyNzY1ZmQ2IDEwMDY0NAotLS0gYS9saWIvZ3BncHVfZmlsbC5jCisrKyBiL2xp Yi9ncGdwdV9maWxsLmMKQEAgLTMwLDEwICszMCw5IEBACiAKICNpbmNsdWRlICJpbnRlbF9yZWcu aCIKICNpbmNsdWRlICJkcm10ZXN0LmgiCi0jaW5jbHVkZSAiaW50ZWxfYmF0Y2hidWZmZXIuaCIK LSNpbmNsdWRlICJnZW43X21lZGlhLmgiCi0jaW5jbHVkZSAiZ2VuOF9tZWRpYS5oIgorCiAjaW5j bHVkZSAiZ3BncHVfZmlsbC5oIgorI2luY2x1ZGUgImdwdV9maWxsLmgiCiAKIC8qIHNoYWRlcnMv Z3BncHUvZ3BncHVfZmlsbC5neGEgKi8KIHN0YXRpYyBjb25zdCB1aW50MzJfdCBnZW43X2dwZ3B1 X2tlcm5lbFtdWzRdID0gewpAQCAtNzUsNTcyICs3NCw2IEBAIHN0YXRpYyBjb25zdCB1aW50MzJf dCBnZW45X2dwZ3B1X2tlcm5lbFtdWzRdID0gewogCXsgMHgwNzgwMDAzMSwgMHgyMDAwMGE0MCwg MHgwNjAwMGUwMCwgMHg4MjAwMDAxMCB9LAogfTsKIAotc3RhdGljIHVpbnQzMl90Ci1iYXRjaF91 c2VkKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gpCi17Ci0JcmV0dXJuIGJhdGNoLT5w dHIgLSBiYXRjaC0+YnVmZmVyOwotfQotCi1zdGF0aWMgdWludDMyX3QKLWJhdGNoX2FsaWduKHN0 cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsIHVpbnQzMl90IGFsaWduKQotewotCXVpbnQz Ml90IG9mZnNldCA9IGJhdGNoX3VzZWQoYmF0Y2gpOwotCW9mZnNldCA9IEFMSUdOKG9mZnNldCwg YWxpZ24pOwotCWJhdGNoLT5wdHIgPSBiYXRjaC0+YnVmZmVyICsgb2Zmc2V0OwotCXJldHVybiBv ZmZzZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkICoKLWJhdGNoX2FsbG9jKHN0cnVjdCBpbnRlbF9iYXRj aGJ1ZmZlciAqYmF0Y2gsIHVpbnQzMl90IHNpemUsIHVpbnQzMl90IGFsaWduKQotewotCXVpbnQz Ml90IG9mZnNldCA9IGJhdGNoX2FsaWduKGJhdGNoLCBhbGlnbik7Ci0JYmF0Y2gtPnB0ciArPSBz aXplOwotCXJldHVybiBtZW1zZXQoYmF0Y2gtPmJ1ZmZlciArIG9mZnNldCwgMCwgc2l6ZSk7Ci19 Ci0KLXN0YXRpYyB1aW50MzJfdAotYmF0Y2hfb2Zmc2V0KHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZl ciAqYmF0Y2gsIHZvaWQgKnB0cikKLXsKLQlyZXR1cm4gKHVpbnQ4X3QgKilwdHIgLSBiYXRjaC0+ YnVmZmVyOwotfQotCi1zdGF0aWMgdWludDMyX3QKLWJhdGNoX2NvcHkoc3RydWN0IGludGVsX2Jh dGNoYnVmZmVyICpiYXRjaCwgY29uc3Qgdm9pZCAqcHRyLCB1aW50MzJfdCBzaXplLAotCSAgIHVp bnQzMl90IGFsaWduKQotewotCXJldHVybiBiYXRjaF9vZmZzZXQoYmF0Y2gsIG1lbWNweShiYXRj aF9hbGxvYyhiYXRjaCwgc2l6ZSwgYWxpZ24pLCBwdHIsIHNpemUpKTsKLX0KLQotc3RhdGljIHZv aWQKLWdlbjdfcmVuZGVyX2ZsdXNoKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsIHVp bnQzMl90IGJhdGNoX2VuZCkKLXsKLQlpbnQgcmV0OwotCi0JcmV0ID0gZHJtX2ludGVsX2JvX3N1 YmRhdGEoYmF0Y2gtPmJvLCAwLCA0MDk2LCBiYXRjaC0+YnVmZmVyKTsKLQlpZiAocmV0ID09IDAp Ci0JCXJldCA9IGRybV9pbnRlbF9ib19tcmJfZXhlYyhiYXRjaC0+Ym8sIGJhdGNoX2VuZCwKLQkJ CQkJTlVMTCwgMCwgMCwgMCk7Ci0JaWd0X2Fzc2VydChyZXQgPT0gMCk7Ci19Ci0KLXN0YXRpYyB1 aW50MzJfdAotZ2VuN19maWxsX2N1cmJlX2J1ZmZlcl9kYXRhKHN0cnVjdCBpbnRlbF9iYXRjaGJ1 ZmZlciAqYmF0Y2gsIHVpbnQ4X3QgY29sb3IpCi17Ci0JdWludDhfdCAqY3VyYmVfYnVmZmVyOwot CXVpbnQzMl90IG9mZnNldDsKLQotCWN1cmJlX2J1ZmZlciA9IGJhdGNoX2FsbG9jKGJhdGNoLCBz aXplb2YodWludDMyX3QpICogOCwgNjQpOwotCW9mZnNldCA9IGJhdGNoX29mZnNldChiYXRjaCwg Y3VyYmVfYnVmZmVyKTsKLQkqY3VyYmVfYnVmZmVyID0gY29sb3I7Ci0KLQlyZXR1cm4gb2Zmc2V0 OwotfQotCi1zdGF0aWMgdWludDMyX3QKLWdlbjdfZmlsbF9zdXJmYWNlX3N0YXRlKHN0cnVjdCBp bnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCi0JCQlzdHJ1Y3QgaWd0X2J1ZiAqYnVmLAotCQkJdWlu dDMyX3QgZm9ybWF0LAotCQkJaW50IGlzX2RzdCkKLXsKLQlzdHJ1Y3QgZ2VuN19zdXJmYWNlX3N0 YXRlICpzczsKLQl1aW50MzJfdCB3cml0ZV9kb21haW4sIHJlYWRfZG9tYWluLCBvZmZzZXQ7Ci0J aW50IHJldDsKLQotCWlmIChpc19kc3QpIHsKLQkJd3JpdGVfZG9tYWluID0gcmVhZF9kb21haW4g PSBJOTE1X0dFTV9ET01BSU5fUkVOREVSOwotCX0gZWxzZSB7Ci0JCXdyaXRlX2RvbWFpbiA9IDA7 Ci0JCXJlYWRfZG9tYWluID0gSTkxNV9HRU1fRE9NQUlOX1NBTVBMRVI7Ci0JfQotCi0Jc3MgPSBi YXRjaF9hbGxvYyhiYXRjaCwgc2l6ZW9mKCpzcyksIDY0KTsKLQlvZmZzZXQgPSBiYXRjaF9vZmZz ZXQoYmF0Y2gsIHNzKTsKLQotCXNzLT5zczAuc3VyZmFjZV90eXBlID0gR0VON19TVVJGQUNFXzJE OwotCXNzLT5zczAuc3VyZmFjZV9mb3JtYXQgPSBmb3JtYXQ7Ci0Jc3MtPnNzMC5yZW5kZXJfY2Fj aGVfcmVhZF93cml0ZSA9IDE7Ci0KLQlpZiAoYnVmLT50aWxpbmcgPT0gSTkxNV9USUxJTkdfWCkK LQkJc3MtPnNzMC50aWxlZF9tb2RlID0gMjsKLQllbHNlIGlmIChidWYtPnRpbGluZyA9PSBJOTE1 X1RJTElOR19ZKQotCQlzcy0+c3MwLnRpbGVkX21vZGUgPSAzOwotCi0Jc3MtPnNzMS5iYXNlX2Fk ZHIgPSBidWYtPmJvLT5vZmZzZXQ7Ci0JcmV0ID0gZHJtX2ludGVsX2JvX2VtaXRfcmVsb2MoYmF0 Y2gtPmJvLAotCQkJCWJhdGNoX29mZnNldChiYXRjaCwgc3MpICsgNCwKLQkJCQlidWYtPmJvLCAw LAotCQkJCXJlYWRfZG9tYWluLCB3cml0ZV9kb21haW4pOwotCWlndF9hc3NlcnQocmV0ID09IDAp OwotCi0Jc3MtPnNzMi5oZWlnaHQgPSBpZ3RfYnVmX2hlaWdodChidWYpIC0gMTsKLQlzcy0+c3My LndpZHRoICA9IGlndF9idWZfd2lkdGgoYnVmKSAtIDE7Ci0KLQlzcy0+c3MzLnBpdGNoICA9IGJ1 Zi0+c3RyaWRlIC0gMTsKLQotCXNzLT5zczcuc2hhZGVyX2NoYW5lbF9zZWxlY3RfciA9IDQ7Ci0J c3MtPnNzNy5zaGFkZXJfY2hhbmVsX3NlbGVjdF9nID0gNTsKLQlzcy0+c3M3LnNoYWRlcl9jaGFu ZWxfc2VsZWN0X2IgPSA2OwotCXNzLT5zczcuc2hhZGVyX2NoYW5lbF9zZWxlY3RfYSA9IDc7Ci0K LQlyZXR1cm4gb2Zmc2V0OwotfQotCi1zdGF0aWMgdWludDMyX3QKLWdlbjhfZmlsbF9zdXJmYWNl X3N0YXRlKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCi0JCQlzdHJ1Y3QgaWd0X2J1 ZiAqYnVmLAotCQkJdWludDMyX3QgZm9ybWF0LAotCQkJaW50IGlzX2RzdCkKLXsKLQlzdHJ1Y3Qg Z2VuOF9zdXJmYWNlX3N0YXRlICpzczsKLQl1aW50MzJfdCB3cml0ZV9kb21haW4sIHJlYWRfZG9t YWluLCBvZmZzZXQ7Ci0JaW50IHJldDsKLQotCWlmIChpc19kc3QpIHsKLQkJd3JpdGVfZG9tYWlu ID0gcmVhZF9kb21haW4gPSBJOTE1X0dFTV9ET01BSU5fUkVOREVSOwotCX0gZWxzZSB7Ci0JCXdy aXRlX2RvbWFpbiA9IDA7Ci0JCXJlYWRfZG9tYWluID0gSTkxNV9HRU1fRE9NQUlOX1NBTVBMRVI7 Ci0JfQotCi0Jc3MgPSBiYXRjaF9hbGxvYyhiYXRjaCwgc2l6ZW9mKCpzcyksIDY0KTsKLQlvZmZz ZXQgPSBiYXRjaF9vZmZzZXQoYmF0Y2gsIHNzKTsKLQotCXNzLT5zczAuc3VyZmFjZV90eXBlID0g R0VOOF9TVVJGQUNFXzJEOwotCXNzLT5zczAuc3VyZmFjZV9mb3JtYXQgPSBmb3JtYXQ7Ci0Jc3Mt PnNzMC5yZW5kZXJfY2FjaGVfcmVhZF93cml0ZSA9IDE7Ci0Jc3MtPnNzMC52ZXJ0aWNhbF9hbGln bm1lbnQgPSAxOyAvKiBhbGlnbiA0ICovCi0Jc3MtPnNzMC5ob3Jpem9udGFsX2FsaWdubWVudCA9 IDE7IC8qIGFsaWduIDQgKi8KLQotCWlmIChidWYtPnRpbGluZyA9PSBJOTE1X1RJTElOR19YKQot CQlzcy0+c3MwLnRpbGVkX21vZGUgPSAyOwotCWVsc2UgaWYgKGJ1Zi0+dGlsaW5nID09IEk5MTVf VElMSU5HX1kpCi0JCXNzLT5zczAudGlsZWRfbW9kZSA9IDM7Ci0KLQlzcy0+c3M4LmJhc2VfYWRk ciA9IGJ1Zi0+Ym8tPm9mZnNldDsKLQotCXJldCA9IGRybV9pbnRlbF9ib19lbWl0X3JlbG9jKGJh dGNoLT5ibywKLQkJCQliYXRjaF9vZmZzZXQoYmF0Y2gsIHNzKSArIDggKiA0LAotCQkJCWJ1Zi0+ Ym8sIDAsCi0JCQkJcmVhZF9kb21haW4sIHdyaXRlX2RvbWFpbik7Ci0JaWd0X2Fzc2VydF9lcShy ZXQsIDApOwotCi0Jc3MtPnNzMi5oZWlnaHQgPSBpZ3RfYnVmX2hlaWdodChidWYpIC0gMTsKLQlz cy0+c3MyLndpZHRoICA9IGlndF9idWZfd2lkdGgoYnVmKSAtIDE7Ci0Jc3MtPnNzMy5waXRjaCAg PSBidWYtPnN0cmlkZSAtIDE7Ci0KLQlzcy0+c3M3LnNoYWRlcl9jaGFuZWxfc2VsZWN0X3IgPSA0 OwotCXNzLT5zczcuc2hhZGVyX2NoYW5lbF9zZWxlY3RfZyA9IDU7Ci0Jc3MtPnNzNy5zaGFkZXJf Y2hhbmVsX3NlbGVjdF9iID0gNjsKLQlzcy0+c3M3LnNoYWRlcl9jaGFuZWxfc2VsZWN0X2EgPSA3 OwotCi0JcmV0dXJuIG9mZnNldDsKLQotfQotCi1zdGF0aWMgdWludDMyX3QKLWdlbjdfZmlsbF9i aW5kaW5nX3RhYmxlKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCi0JCQlzdHJ1Y3Qg aWd0X2J1ZiAqZHN0KQotewotCXVpbnQzMl90ICpiaW5kaW5nX3RhYmxlLCBvZmZzZXQ7Ci0KLQli aW5kaW5nX3RhYmxlID0gYmF0Y2hfYWxsb2MoYmF0Y2gsIDMyLCA2NCk7Ci0Jb2Zmc2V0ID0gYmF0 Y2hfb2Zmc2V0KGJhdGNoLCBiaW5kaW5nX3RhYmxlKTsKLQotCWJpbmRpbmdfdGFibGVbMF0gPSBn ZW43X2ZpbGxfc3VyZmFjZV9zdGF0ZShiYXRjaCwgZHN0LCBHRU43X1NVUkZBQ0VGT1JNQVRfUjhf VU5PUk0sIDEpOwotCi0JcmV0dXJuIG9mZnNldDsKLX0KLQotc3RhdGljIHVpbnQzMl90Ci1nZW44 X2ZpbGxfYmluZGluZ190YWJsZShzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAotCQkJ c3RydWN0IGlndF9idWYgKmRzdCkKLXsKLQl1aW50MzJfdCAqYmluZGluZ190YWJsZSwgb2Zmc2V0 OwotCi0JYmluZGluZ190YWJsZSA9IGJhdGNoX2FsbG9jKGJhdGNoLCAzMiwgNjQpOwotCW9mZnNl dCA9IGJhdGNoX29mZnNldChiYXRjaCwgYmluZGluZ190YWJsZSk7Ci0KLQliaW5kaW5nX3RhYmxl WzBdID0gZ2VuOF9maWxsX3N1cmZhY2Vfc3RhdGUoYmF0Y2gsIGRzdCwgR0VOOF9TVVJGQUNFRk9S TUFUX1I4X1VOT1JNLCAxKTsKLQotCXJldHVybiBvZmZzZXQ7Ci19Ci0KLXN0YXRpYyB1aW50MzJf dAotZ2VuN19maWxsX2dwZ3B1X2tlcm5lbChzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNo LAotCQljb25zdCB1aW50MzJfdCBrZXJuZWxbXVs0XSwKLQkJc2l6ZV90IHNpemUpCi17Ci0JdWlu dDMyX3Qgb2Zmc2V0OwotCi0Jb2Zmc2V0ID0gYmF0Y2hfY29weShiYXRjaCwga2VybmVsLCBzaXpl LCA2NCk7Ci0KLQlyZXR1cm4gb2Zmc2V0OwotfQotCi1zdGF0aWMgdWludDMyX3QKLWdlbjdfZmls bF9pbnRlcmZhY2VfZGVzY3JpcHRvcihzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLCBz dHJ1Y3QgaWd0X2J1ZiAqZHN0LAotCQkJICAgICAgIGNvbnN0IHVpbnQzMl90IGtlcm5lbFtdWzRd LCBzaXplX3Qgc2l6ZSkKLXsKLQlzdHJ1Y3QgZ2VuN19pbnRlcmZhY2VfZGVzY3JpcHRvcl9kYXRh ICppZGQ7Ci0JdWludDMyX3Qgb2Zmc2V0OwotCXVpbnQzMl90IGJpbmRpbmdfdGFibGVfb2Zmc2V0 LCBrZXJuZWxfb2Zmc2V0OwotCi0JYmluZGluZ190YWJsZV9vZmZzZXQgPSBnZW43X2ZpbGxfYmlu ZGluZ190YWJsZShiYXRjaCwgZHN0KTsKLQlrZXJuZWxfb2Zmc2V0ID0gZ2VuN19maWxsX2dwZ3B1 X2tlcm5lbChiYXRjaCwga2VybmVsLCBzaXplKTsKLQotCWlkZCA9IGJhdGNoX2FsbG9jKGJhdGNo LCBzaXplb2YoKmlkZCksIDY0KTsKLQlvZmZzZXQgPSBiYXRjaF9vZmZzZXQoYmF0Y2gsIGlkZCk7 Ci0KLQlpZGQtPmRlc2MwLmtlcm5lbF9zdGFydF9wb2ludGVyID0gKGtlcm5lbF9vZmZzZXQgPj4g Nik7Ci0KLQlpZGQtPmRlc2MxLnNpbmdsZV9wcm9ncmFtX2Zsb3cgPSAxOwotCWlkZC0+ZGVzYzEu ZmxvYXRpbmdfcG9pbnRfbW9kZSA9IEdFTjdfRkxPQVRJTkdfUE9JTlRfSUVFRV83NTQ7Ci0KLQlp ZGQtPmRlc2MyLnNhbXBsZXJfY291bnQgPSAwOyAgICAgIC8qIDAgc2FtcGxlcnMgdXNlZCAqLwot CWlkZC0+ZGVzYzIuc2FtcGxlcl9zdGF0ZV9wb2ludGVyID0gMDsKLQotCWlkZC0+ZGVzYzMuYmlu ZGluZ190YWJsZV9lbnRyeV9jb3VudCA9IDA7Ci0JaWRkLT5kZXNjMy5iaW5kaW5nX3RhYmxlX3Bv aW50ZXIgPSAoYmluZGluZ190YWJsZV9vZmZzZXQgPj4gNSk7Ci0KLQlpZGQtPmRlc2M0LmNvbnN0 YW50X3VyYl9lbnRyeV9yZWFkX29mZnNldCA9IDA7Ci0JaWRkLT5kZXNjNC5jb25zdGFudF91cmJf ZW50cnlfcmVhZF9sZW5ndGggPSAxOyAvKiBncmYgMSAqLwotCi0JcmV0dXJuIG9mZnNldDsKLX0K LQotc3RhdGljIHVpbnQzMl90Ci1nZW44X2ZpbGxfaW50ZXJmYWNlX2Rlc2NyaXB0b3Ioc3RydWN0 IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwgc3RydWN0IGlndF9idWYgKmRzdCwKLQkJCSAgICAg ICBjb25zdCB1aW50MzJfdCBrZXJuZWxbXVs0XSwgc2l6ZV90IHNpemUpCi17Ci0Jc3RydWN0IGdl bjhfaW50ZXJmYWNlX2Rlc2NyaXB0b3JfZGF0YSAqaWRkOwotCXVpbnQzMl90IG9mZnNldDsKLQl1 aW50MzJfdCBiaW5kaW5nX3RhYmxlX29mZnNldCwga2VybmVsX29mZnNldDsKLQotCWJpbmRpbmdf dGFibGVfb2Zmc2V0ID0gZ2VuOF9maWxsX2JpbmRpbmdfdGFibGUoYmF0Y2gsIGRzdCk7Ci0Ja2Vy bmVsX29mZnNldCA9IGdlbjdfZmlsbF9ncGdwdV9rZXJuZWwoYmF0Y2gsIGtlcm5lbCwgc2l6ZSk7 Ci0KLQlpZGQgPSBiYXRjaF9hbGxvYyhiYXRjaCwgc2l6ZW9mKCppZGQpLCA2NCk7Ci0Jb2Zmc2V0 ID0gYmF0Y2hfb2Zmc2V0KGJhdGNoLCBpZGQpOwotCi0JaWRkLT5kZXNjMC5rZXJuZWxfc3RhcnRf cG9pbnRlciA9IChrZXJuZWxfb2Zmc2V0ID4+IDYpOwotCi0JaWRkLT5kZXNjMi5zaW5nbGVfcHJv Z3JhbV9mbG93ID0gMTsKLQlpZGQtPmRlc2MyLmZsb2F0aW5nX3BvaW50X21vZGUgPSBHRU44X0ZM T0FUSU5HX1BPSU5UX0lFRUVfNzU0OwotCi0JaWRkLT5kZXNjMy5zYW1wbGVyX2NvdW50ID0gMDsg ICAgICAvKiAwIHNhbXBsZXJzIHVzZWQgKi8KLQlpZGQtPmRlc2MzLnNhbXBsZXJfc3RhdGVfcG9p bnRlciA9IDA7Ci0KLQlpZGQtPmRlc2M0LmJpbmRpbmdfdGFibGVfZW50cnlfY291bnQgPSAwOwot CWlkZC0+ZGVzYzQuYmluZGluZ190YWJsZV9wb2ludGVyID0gKGJpbmRpbmdfdGFibGVfb2Zmc2V0 ID4+IDUpOwotCi0JaWRkLT5kZXNjNS5jb25zdGFudF91cmJfZW50cnlfcmVhZF9vZmZzZXQgPSAw OwotCWlkZC0+ZGVzYzUuY29uc3RhbnRfdXJiX2VudHJ5X3JlYWRfbGVuZ3RoID0gMTsgLyogZ3Jm IDEgKi8KLQotCXJldHVybiBvZmZzZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nZW43X2VtaXRfc3Rh dGVfYmFzZV9hZGRyZXNzKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gpCi17Ci0JT1VU X0JBVENIKEdFTjdfU1RBVEVfQkFTRV9BRERSRVNTIHwgKDEwIC0gMikpOwotCi0JLyogZ2VuZXJh bCAqLwotCU9VVF9CQVRDSCgwKTsKLQotCS8qIHN1cmZhY2UgKi8KLQlPVVRfUkVMT0MoYmF0Y2gt PmJvLCBJOTE1X0dFTV9ET01BSU5fSU5TVFJVQ1RJT04sIDAsIEJBU0VfQUREUkVTU19NT0RJRlkp OwotCi0JLyogZHluYW1pYyAqLwotCU9VVF9SRUxPQyhiYXRjaC0+Ym8sIEk5MTVfR0VNX0RPTUFJ Tl9JTlNUUlVDVElPTiwgMCwgQkFTRV9BRERSRVNTX01PRElGWSk7Ci0KLQkvKiBpbmRpcmVjdCAq LwotCU9VVF9CQVRDSCgwKTsKLQotCS8qIGluc3RydWN0aW9uICovCi0JT1VUX1JFTE9DKGJhdGNo LT5ibywgSTkxNV9HRU1fRE9NQUlOX0lOU1RSVUNUSU9OLCAwLCBCQVNFX0FERFJFU1NfTU9ESUZZ KTsKLQotCS8qIGdlbmVyYWwvZHluYW1pYy9pbmRpcmVjdC9pbnN0cnVjdGlvbiBhY2Nlc3MgQm91 bmQgKi8KLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDAgfCBCQVNFX0FERFJFU1NfTU9ESUZZ KTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDAgfCBCQVNFX0FERFJFU1NfTU9ESUZZKTsK LX0KLQotc3RhdGljIHZvaWQKLWdlbjhfZW1pdF9zdGF0ZV9iYXNlX2FkZHJlc3Moc3RydWN0IGlu dGVsX2JhdGNoYnVmZmVyICpiYXRjaCkKLXsKLQlPVVRfQkFUQ0goR0VOOF9TVEFURV9CQVNFX0FE RFJFU1MgfCAoMTYgLSAyKSk7Ci0KLQkvKiBnZW5lcmFsICovCi0JT1VUX0JBVENIKDAgfCAoMHg3 OCA8PCA0KSB8ICgwIDw8IDEpIHwgIEJBU0VfQUREUkVTU19NT0RJRlkpOwotCU9VVF9CQVRDSCgw KTsKLQotCS8qIHN0YXRlbGVzcyBkYXRhIHBvcnQgKi8KLQlPVVRfQkFUQ0goMCB8IEJBU0VfQURE UkVTU19NT0RJRlkpOwotCi0JLyogc3VyZmFjZSAqLwotCU9VVF9SRUxPQyhiYXRjaC0+Ym8sIEk5 MTVfR0VNX0RPTUFJTl9TQU1QTEVSLCAwLCBCQVNFX0FERFJFU1NfTU9ESUZZKTsKLQotCS8qIGR5 bmFtaWMgKi8KLQlPVVRfUkVMT0MoYmF0Y2gtPmJvLCBJOTE1X0dFTV9ET01BSU5fUkVOREVSIHwg STkxNV9HRU1fRE9NQUlOX0lOU1RSVUNUSU9OLAotCQkgIDAsIEJBU0VfQUREUkVTU19NT0RJRlkp OwotCi0JLyogaW5kaXJlY3QgKi8KLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDAgKTsKLQot CS8qIGluc3RydWN0aW9uICovCi0JT1VUX1JFTE9DKGJhdGNoLT5ibywgSTkxNV9HRU1fRE9NQUlO X0lOU1RSVUNUSU9OLCAwLCBCQVNFX0FERFJFU1NfTU9ESUZZKTsKLQotCS8qIGdlbmVyYWwgc3Rh dGUgYnVmZmVyIHNpemUgKi8KLQlPVVRfQkFUQ0goMHhmZmZmZjAwMCB8IDEpOwotCS8qIGR5bmFt aWMgc3RhdGUgYnVmZmVyIHNpemUgKi8KLQlPVVRfQkFUQ0goMSA8PCAxMiB8IDEpOwotCS8qIGlu ZGlyZWN0IG9iamVjdCBidWZmZXIgc2l6ZSAqLwotCU9VVF9CQVRDSCgweGZmZmZmMDAwIHwgMSk7 Ci0JLyogaW50cnVjdGlvbiBidWZmZXIgc2l6ZSwgbXVzdCBzZXQgbW9kaWZ5IGVuYWJsZSBiaXQs IG90aGVyd2lzZSBpdCBtYXkgcmVzdWx0IGluIEdQVSBoYW5nICovCi0JT1VUX0JBVENIKDEgPDwg MTIgfCAxKTsKLX0KLQotc3RhdGljIHZvaWQKLWdlbjlfZW1pdF9zdGF0ZV9iYXNlX2FkZHJlc3Mo c3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCkKLXsKLQlPVVRfQkFUQ0goR0VOOF9TVEFU RV9CQVNFX0FERFJFU1MgfCAoMTkgLSAyKSk7Ci0KLQkvKiBnZW5lcmFsICovCi0JT1VUX0JBVENI KDAgfCBCQVNFX0FERFJFU1NfTU9ESUZZKTsKLQlPVVRfQkFUQ0goMCk7Ci0KLQkvKiBzdGF0ZWxl c3MgZGF0YSBwb3J0ICovCi0JT1VUX0JBVENIKDAgfCBCQVNFX0FERFJFU1NfTU9ESUZZKTsKLQot CS8qIHN1cmZhY2UgKi8KLQlPVVRfUkVMT0MoYmF0Y2gtPmJvLCBJOTE1X0dFTV9ET01BSU5fU0FN UExFUiwgMCwgQkFTRV9BRERSRVNTX01PRElGWSk7Ci0KLQkvKiBkeW5hbWljICovCi0JT1VUX1JF TE9DKGJhdGNoLT5ibywgSTkxNV9HRU1fRE9NQUlOX1JFTkRFUiB8IEk5MTVfR0VNX0RPTUFJTl9J TlNUUlVDVElPTiwKLQkJMCwgQkFTRV9BRERSRVNTX01PRElGWSk7Ci0KLQkvKiBpbmRpcmVjdCAq LwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0KLQkvKiBpbnN0cnVjdGlvbiAqLwot CU9VVF9SRUxPQyhiYXRjaC0+Ym8sIEk5MTVfR0VNX0RPTUFJTl9JTlNUUlVDVElPTiwgMCwgQkFT RV9BRERSRVNTX01PRElGWSk7Ci0KLQkvKiBnZW5lcmFsIHN0YXRlIGJ1ZmZlciBzaXplICovCi0J T1VUX0JBVENIKDB4ZmZmZmYwMDAgfCAxKTsKLQkvKiBkeW5hbWljIHN0YXRlIGJ1ZmZlciBzaXpl ICovCi0JT1VUX0JBVENIKDEgPDwgMTIgfCAxKTsKLQkvKiBpbmRpcmVjdCBvYmplY3QgYnVmZmVy IHNpemUgKi8KLQlPVVRfQkFUQ0goMHhmZmZmZjAwMCB8IDEpOwotCS8qIGludHJ1Y3Rpb24gYnVm ZmVyIHNpemUsIG11c3Qgc2V0IG1vZGlmeSBlbmFibGUgYml0LCBvdGhlcndpc2UgaXQgbWF5IHJl c3VsdCBpbiBHUFUgaGFuZyAqLwotCU9VVF9CQVRDSCgxIDw8IDEyIHwgMSk7Ci0KLQkvKiBCaW5k bGVzcyBzdXJmYWNlIHN0YXRlIGJhc2UgYWRkcmVzcyAqLwotCU9VVF9CQVRDSCgwIHwgQkFTRV9B RERSRVNTX01PRElGWSk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgweGZmZmZmMDAwKTsK LX0KLQotc3RhdGljIHZvaWQKLWdlbjdfZW1pdF92ZmVfc3RhdGVfZ3BncHUoc3RydWN0IGludGVs X2JhdGNoYnVmZmVyICpiYXRjaCkKLXsKLQlPVVRfQkFUQ0goR0VON19NRURJQV9WRkVfU1RBVEUg fCAoOCAtIDIpKTsKLQotCS8qIHNjcmF0Y2ggYnVmZmVyICovCi0JT1VUX0JBVENIKDApOwotCi0J LyogbnVtYmVyIG9mIHRocmVhZHMgJiB1cmIgZW50cmllcyAqLwotCU9VVF9CQVRDSCgxIDw8IDE2 IHwgLyogbWF4IG51bSBvZiB0aHJlYWRzICovCi0JCSAgMCA8PCA4IHwgLyogbnVtIG9mIFVSQiBl bnRyeSAqLwotCQkgIDEgPDwgMik7IC8qIEdQR1BVIG1vZGUgKi8KLQotCU9VVF9CQVRDSCgwKTsK LQotCS8qIHVyYiBlbnRyeSBzaXplICYgY3VyYmUgc2l6ZSAqLwotCU9VVF9CQVRDSCgwIDw8IDE2 IHwgCS8qIFVSQiBlbnRyeSBzaXplIGluIDI1NiBiaXRzIHVuaXQgKi8KLQkJICAxKTsJCS8qIENV UkJFIGVudHJ5IHNpemUgaW4gMjU2IGJpdHMgdW5pdCAqLwotCi0JLyogc2NvcmVib2FyZCAqLwot CU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotfQotCi1zdGF0 aWMgdm9pZAotZ2VuOF9lbWl0X3ZmZV9zdGF0ZV9ncGdwdShzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZm ZXIgKmJhdGNoKQotewotCU9VVF9CQVRDSChHRU44X01FRElBX1ZGRV9TVEFURSB8ICg5IC0gMikp OwotCi0JLyogc2NyYXRjaCBidWZmZXIgKi8KLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDAp OwotCi0JLyogbnVtYmVyIG9mIHRocmVhZHMgJiB1cmIgZW50cmllcyAqLwotCU9VVF9CQVRDSCgx IDw8IDE2IHwgMSA8PCA4KTsKLQotCU9VVF9CQVRDSCgwKTsKLQotCS8qIHVyYiBlbnRyeSBzaXpl ICYgY3VyYmUgc2l6ZSAqLwotCU9VVF9CQVRDSCgwIDw8IDE2IHwgMSk7Ci0KLQkvKiBzY29yZWJv YXJkICovCi0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci19 Ci0KLXN0YXRpYyB2b2lkCi1nZW43X2VtaXRfY3VyYmVfbG9hZChzdHJ1Y3QgaW50ZWxfYmF0Y2hi dWZmZXIgKmJhdGNoLCB1aW50MzJfdCBjdXJiZV9idWZmZXIpCi17Ci0JT1VUX0JBVENIKEdFTjdf TUVESUFfQ1VSQkVfTE9BRCB8ICg0IC0gMikpOwotCU9VVF9CQVRDSCgwKTsKLQkvKiBjdXJiZSB0 b3RhbCBkYXRhIGxlbmd0aCAqLwotCU9VVF9CQVRDSCg2NCk7Ci0JLyogY3VyYmUgZGF0YSBzdGFy dCBhZGRyZXNzLCBpcyByZWxhdGl2ZSB0byB0aGUgZHluYW1pY3MgYmFzZSBhZGRyZXNzICovCi0J T1VUX0JBVENIKGN1cmJlX2J1ZmZlcik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nZW43X2VtaXRfaW50 ZXJmYWNlX2Rlc2NyaXB0b3JfbG9hZChzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLCB1 aW50MzJfdCBpbnRlcmZhY2VfZGVzY3JpcHRvcikKLXsKLQlPVVRfQkFUQ0goR0VON19NRURJQV9J TlRFUkZBQ0VfREVTQ1JJUFRPUl9MT0FEIHwgKDQgLSAyKSk7Ci0JT1VUX0JBVENIKDApOwotCS8q IGludGVyZmFjZSBkZXNjcmlwdG9yIGRhdGEgbGVuZ3RoICovCi0JT1VUX0JBVENIKHNpemVvZihz dHJ1Y3QgZ2VuN19pbnRlcmZhY2VfZGVzY3JpcHRvcl9kYXRhKSk7Ci0JLyogaW50ZXJmYWNlIGRl c2NyaXB0b3IgYWRkcmVzcywgaXMgcmVsYXRpdmUgdG8gdGhlIGR5bmFtaWNzIGJhc2UgYWRkcmVz cyAqLwotCU9VVF9CQVRDSChpbnRlcmZhY2VfZGVzY3JpcHRvcik7Ci19Ci0KLXN0YXRpYyB2b2lk Ci1nZW44X2VtaXRfaW50ZXJmYWNlX2Rlc2NyaXB0b3JfbG9hZChzdHJ1Y3QgaW50ZWxfYmF0Y2hi dWZmZXIgKmJhdGNoLCB1aW50MzJfdCBpbnRlcmZhY2VfZGVzY3JpcHRvcikKLXsKLQlPVVRfQkFU Q0goR0VOOF9NRURJQV9JTlRFUkZBQ0VfREVTQ1JJUFRPUl9MT0FEIHwgKDQgLSAyKSk7Ci0JT1VU X0JBVENIKDApOwotCS8qIGludGVyZmFjZSBkZXNjcmlwdG9yIGRhdGEgbGVuZ3RoICovCi0JT1VU X0JBVENIKHNpemVvZihzdHJ1Y3QgZ2VuOF9pbnRlcmZhY2VfZGVzY3JpcHRvcl9kYXRhKSk7Ci0J LyogaW50ZXJmYWNlIGRlc2NyaXB0b3IgYWRkcmVzcywgaXMgcmVsYXRpdmUgdG8gdGhlIGR5bmFt aWNzIGJhc2UgYWRkcmVzcyAqLwotCU9VVF9CQVRDSChpbnRlcmZhY2VfZGVzY3JpcHRvcik7Ci19 Ci0KLXN0YXRpYyB2b2lkCi1nZW43X2VtaXRfZ3BncHVfd2FsayhzdHJ1Y3QgaW50ZWxfYmF0Y2hi dWZmZXIgKmJhdGNoLAotCQkgICAgIHVuc2lnbmVkIHgsIHVuc2lnbmVkIHksCi0JCSAgICAgdW5z aWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCkKLXsKLQl1aW50MzJfdCB4X2RpbSwgeV9kaW0s IHRtcCwgcmlnaHRfbWFzazsKLQotCS8qCi0JICogU2ltcGx5IGRvIFNJTUQxNiBiYXNlZCBkaXNw YXRjaCwgc28gZXZlcnkgdGhyZWFkIHVzZXMKLQkgKiBTSU1EMTYgY2hhbm5lbHMuCi0JICoKLQkg KiBEZWZpbmUgb3VyIG93biB0aHJlYWQgZ3JvdXAgc2l6ZSwgZS5nIDE2eDEgZm9yIGV2ZXJ5IGdy b3VwLCB0aGVuCi0JICogd2lsbCBoYXZlIDEgdGhyZWFkIGVhY2ggZ3JvdXAgaW4gU0lNRDE2IGRp c3BhdGNoLiBTbyB0aHJlYWQKLQkgKiB3aWR0aC9oZWlnaHQvZGVwdGggYXJlIGFsbCAxLgotCSAq Ci0JICogVGhlbiB0aHJlYWQgZ3JvdXAgWCA9IHdpZHRoIC8gMTYgKGFsaWduZWQgdG8gMTYpCi0J ICogdGhyZWFkIGdyb3VwIFkgPSBoZWlnaHQ7Ci0JICovCi0JeF9kaW0gPSAod2lkdGggKyAxNSkg LyAxNjsKLQl5X2RpbSA9IGhlaWdodDsKLQotCXRtcCA9IHdpZHRoICYgMTU7Ci0JaWYgKHRtcCA9 PSAwKQotCQlyaWdodF9tYXNrID0gKDEgPDwgMTYpIC0gMTsKLQllbHNlCi0JCXJpZ2h0X21hc2sg PSAoMSA8PCB0bXApIC0gMTsKLQotCU9VVF9CQVRDSChHRU43X0dQR1BVX1dBTEtFUiB8IDkpOwot Ci0JLyogaW50ZXJmYWNlIGRlc2NyaXB0b3Igb2Zmc2V0ICovCi0JT1VUX0JBVENIKDApOwotCi0J LyogU0lNRCBzaXplLCB0aHJlYWQgdy9oL2QgKi8KLQlPVVRfQkFUQ0goMSA8PCAzMCB8IC8qIFNJ TUQxNiAqLwotCQkgIDAgPDwgMTYgfCAvKiBkZXB0aDoxICovCi0JCSAgMCA8PCA4IHwgLyogaGVp Z2h0OjEgKi8KLQkJICAwKTsgLyogd2lkdGg6MSAqLwotCi0JLyogdGhyZWFkIGdyb3VwIFggKi8K LQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKHhfZGltKTsKLQotCS8qIHRocmVhZCBncm91cCBZ ICovCi0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCh5X2RpbSk7Ci0KLQkvKiB0aHJlYWQgZ3Jv dXAgWiAqLwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMSk7Ci0KLQkvKiByaWdodCBtYXNr ICovCi0JT1VUX0JBVENIKHJpZ2h0X21hc2spOwotCi0JLyogYm90dG9tIG1hc2ssIGhlaWdodCAx LCBhbHdheXMgMHhmZmZmZmZmZiAqLwotCU9VVF9CQVRDSCgweGZmZmZmZmZmKTsKLX0KLQotc3Rh dGljIHZvaWQKLWdlbjhfZW1pdF9ncGdwdV93YWxrKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAq YmF0Y2gsCi0JCSAgICAgdW5zaWduZWQgeCwgdW5zaWduZWQgeSwKLQkJICAgICB1bnNpZ25lZCB3 aWR0aCwgdW5zaWduZWQgaGVpZ2h0KQotewotCXVpbnQzMl90IHhfZGltLCB5X2RpbSwgdG1wLCBy aWdodF9tYXNrOwotCi0JLyoKLQkgKiBTaW1wbHkgZG8gU0lNRDE2IGJhc2VkIGRpc3BhdGNoLCBz byBldmVyeSB0aHJlYWQgdXNlcwotCSAqIFNJTUQxNiBjaGFubmVscy4KLQkgKgotCSAqIERlZmlu ZSBvdXIgb3duIHRocmVhZCBncm91cCBzaXplLCBlLmcgMTZ4MSBmb3IgZXZlcnkgZ3JvdXAsIHRo ZW4KLQkgKiB3aWxsIGhhdmUgMSB0aHJlYWQgZWFjaCBncm91cCBpbiBTSU1EMTYgZGlzcGF0Y2gu IFNvIHRocmVhZAotCSAqIHdpZHRoL2hlaWdodC9kZXB0aCBhcmUgYWxsIDEuCi0JICoKLQkgKiBU aGVuIHRocmVhZCBncm91cCBYID0gd2lkdGggLyAxNiAoYWxpZ25lZCB0byAxNikKLQkgKiB0aHJl YWQgZ3JvdXAgWSA9IGhlaWdodDsKLQkgKi8KLQl4X2RpbSA9ICh3aWR0aCArIDE1KSAvIDE2Owot CXlfZGltID0gaGVpZ2h0OwotCi0JdG1wID0gd2lkdGggJiAxNTsKLQlpZiAodG1wID09IDApCi0J CXJpZ2h0X21hc2sgPSAoMSA8PCAxNikgLSAxOwotCWVsc2UKLQkJcmlnaHRfbWFzayA9ICgxIDw8 IHRtcCkgLSAxOwotCi0JT1VUX0JBVENIKEdFTjdfR1BHUFVfV0FMS0VSIHwgMTMpOwotCi0JT1VU X0JBVENIKDApOyAvKiBrZXJuZWwgb2Zmc2V0ICovCi0JT1VUX0JBVENIKDApOyAvKiBpbmRpcmVj dCBkYXRhIGxlbmd0aCAqLwotCU9VVF9CQVRDSCgwKTsgLyogaW5kaXJlY3QgZGF0YSBvZmZzZXQg Ki8KLQotCS8qIFNJTUQgc2l6ZSwgdGhyZWFkIHcvaC9kICovCi0JT1VUX0JBVENIKDEgPDwgMzAg fCAvKiBTSU1EMTYgKi8KLQkJICAwIDw8IDE2IHwgLyogZGVwdGg6MSAqLwotCQkgIDAgPDwgOCB8 IC8qIGhlaWdodDoxICovCi0JCSAgMCk7IC8qIHdpZHRoOjEgKi8KLQotCS8qIHRocmVhZCBncm91 cCBYICovCi0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goeF9kaW0p OwotCi0JLyogdGhyZWFkIGdyb3VwIFkgKi8KLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDAp OwotCU9VVF9CQVRDSCh5X2RpbSk7Ci0KLQkvKiB0aHJlYWQgZ3JvdXAgWiAqLwotCU9VVF9CQVRD SCgwKTsKLQlPVVRfQkFUQ0goMSk7Ci0KLQkvKiByaWdodCBtYXNrICovCi0JT1VUX0JBVENIKHJp Z2h0X21hc2spOwotCi0JLyogYm90dG9tIG1hc2ssIGhlaWdodCAxLCBhbHdheXMgMHhmZmZmZmZm ZiAqLwotCU9VVF9CQVRDSCgweGZmZmZmZmZmKTsKLX0KLQogLyoKICAqIFRoaXMgc2V0cyB1cCB0 aGUgZ3BncHUgcGlwZWxpbmUsCiAgKgpkaWZmIC0tZ2l0IGEvbGliL2dwdV9maWxsLmMgYi9saWIv Z3B1X2ZpbGwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uMTcyYzZkYjYK LS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ3B1X2ZpbGwuYwpAQCAtMCwwICsxLDc1OCBAQAorI2lu Y2x1ZGUgImdwdV9maWxsLmgiCisKK3VpbnQzMl90CitiYXRjaF91c2VkKHN0cnVjdCBpbnRlbF9i YXRjaGJ1ZmZlciAqYmF0Y2gpCit7CisJcmV0dXJuIGJhdGNoLT5wdHIgLSBiYXRjaC0+YnVmZmVy OworfQorCit1aW50MzJfdAorYmF0Y2hfYWxpZ24oc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpi YXRjaCwgdWludDMyX3QgYWxpZ24pCit7CisJdWludDMyX3Qgb2Zmc2V0ID0gYmF0Y2hfdXNlZChi YXRjaCk7CisJb2Zmc2V0ID0gQUxJR04ob2Zmc2V0LCBhbGlnbik7CisJYmF0Y2gtPnB0ciA9IGJh dGNoLT5idWZmZXIgKyBvZmZzZXQ7CisJcmV0dXJuIG9mZnNldDsKK30KKwordm9pZCAqCitiYXRj aF9hbGxvYyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLCB1aW50MzJfdCBzaXplLCB1 aW50MzJfdCBhbGlnbikKK3sKKwl1aW50MzJfdCBvZmZzZXQgPSBiYXRjaF9hbGlnbihiYXRjaCwg YWxpZ24pOworCWJhdGNoLT5wdHIgKz0gc2l6ZTsKKwlyZXR1cm4gbWVtc2V0KGJhdGNoLT5idWZm ZXIgKyBvZmZzZXQsIDAsIHNpemUpOworfQorCit1aW50MzJfdAorYmF0Y2hfb2Zmc2V0KHN0cnVj dCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsIHZvaWQgKnB0cikKK3sKKwlyZXR1cm4gKHVpbnQ4 X3QgKilwdHIgLSBiYXRjaC0+YnVmZmVyOworfQorCit1aW50MzJfdAorYmF0Y2hfY29weShzdHJ1 Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLCBjb25zdCB2b2lkICpwdHIsIHVpbnQzMl90IHNp emUsIHVpbnQzMl90IGFsaWduKQoreworCXJldHVybiBiYXRjaF9vZmZzZXQoYmF0Y2gsIG1lbWNw eShiYXRjaF9hbGxvYyhiYXRjaCwgc2l6ZSwgYWxpZ24pLCBwdHIsIHNpemUpKTsKK30KKwordm9p ZAorZ2VuN19yZW5kZXJfZmx1c2goc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwgdWlu dDMyX3QgYmF0Y2hfZW5kKQoreworCWludCByZXQ7CisKKwlyZXQgPSBkcm1faW50ZWxfYm9fc3Vi ZGF0YShiYXRjaC0+Ym8sIDAsIDQwOTYsIGJhdGNoLT5idWZmZXIpOworCWlmIChyZXQgPT0gMCkK KwkJcmV0ID0gZHJtX2ludGVsX2JvX21yYl9leGVjKGJhdGNoLT5ibywgYmF0Y2hfZW5kLAorCQkJ CQlOVUxMLCAwLCAwLCAwKTsKKwlpZ3RfYXNzZXJ0KHJldCA9PSAwKTsKK30KKwordWludDMyX3QK K2dlbjdfZmlsbF9jdXJiZV9idWZmZXJfZGF0YShzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJh dGNoLAorCQkJdWludDhfdCBjb2xvcikKK3sKKwl1aW50OF90ICpjdXJiZV9idWZmZXI7CisJdWlu dDMyX3Qgb2Zmc2V0OworCisJY3VyYmVfYnVmZmVyID0gYmF0Y2hfYWxsb2MoYmF0Y2gsIHNpemVv Zih1aW50MzJfdCkgKiA4LCA2NCk7CisJb2Zmc2V0ID0gYmF0Y2hfb2Zmc2V0KGJhdGNoLCBjdXJi ZV9idWZmZXIpOworCSpjdXJiZV9idWZmZXIgPSBjb2xvcjsKKworCXJldHVybiBvZmZzZXQ7Cit9 CisKK3VpbnQzMl90CitnZW43X2ZpbGxfc3VyZmFjZV9zdGF0ZShzdHJ1Y3QgaW50ZWxfYmF0Y2hi dWZmZXIgKmJhdGNoLAorCQkJc3RydWN0IGlndF9idWYgKmJ1ZiwKKwkJCXVpbnQzMl90IGZvcm1h dCwKKwkJCWludCBpc19kc3QpCit7CisJc3RydWN0IGdlbjdfc3VyZmFjZV9zdGF0ZSAqc3M7CisJ dWludDMyX3Qgd3JpdGVfZG9tYWluLCByZWFkX2RvbWFpbiwgb2Zmc2V0OworCWludCByZXQ7CisK KwlpZiAoaXNfZHN0KSB7CisJCXdyaXRlX2RvbWFpbiA9IHJlYWRfZG9tYWluID0gSTkxNV9HRU1f RE9NQUlOX1JFTkRFUjsKKwl9IGVsc2UgeworCQl3cml0ZV9kb21haW4gPSAwOworCQlyZWFkX2Rv bWFpbiA9IEk5MTVfR0VNX0RPTUFJTl9TQU1QTEVSOworCX0KKworCXNzID0gYmF0Y2hfYWxsb2Mo YmF0Y2gsIHNpemVvZigqc3MpLCA2NCk7CisJb2Zmc2V0ID0gYmF0Y2hfb2Zmc2V0KGJhdGNoLCBz cyk7CisKKwlzcy0+c3MwLnN1cmZhY2VfdHlwZSA9IEdFTjdfU1VSRkFDRV8yRDsKKwlzcy0+c3Mw LnN1cmZhY2VfZm9ybWF0ID0gZm9ybWF0OworCXNzLT5zczAucmVuZGVyX2NhY2hlX3JlYWRfd3Jp dGUgPSAxOworCisJaWYgKGJ1Zi0+dGlsaW5nID09IEk5MTVfVElMSU5HX1gpCisJCXNzLT5zczAu dGlsZWRfbW9kZSA9IDI7CisJZWxzZSBpZiAoYnVmLT50aWxpbmcgPT0gSTkxNV9USUxJTkdfWSkK KwkJc3MtPnNzMC50aWxlZF9tb2RlID0gMzsKKworCXNzLT5zczEuYmFzZV9hZGRyID0gYnVmLT5i by0+b2Zmc2V0OworCXJldCA9IGRybV9pbnRlbF9ib19lbWl0X3JlbG9jKGJhdGNoLT5ibywKKwkJ CQliYXRjaF9vZmZzZXQoYmF0Y2gsIHNzKSArIDQsCisJCQkJYnVmLT5ibywgMCwKKwkJCQlyZWFk X2RvbWFpbiwgd3JpdGVfZG9tYWluKTsKKwlpZ3RfYXNzZXJ0KHJldCA9PSAwKTsKKworCXNzLT5z czIuaGVpZ2h0ID0gaWd0X2J1Zl9oZWlnaHQoYnVmKSAtIDE7CisJc3MtPnNzMi53aWR0aCAgPSBp Z3RfYnVmX3dpZHRoKGJ1ZikgLSAxOworCisJc3MtPnNzMy5waXRjaCAgPSBidWYtPnN0cmlkZSAt IDE7CisKKwlzcy0+c3M3LnNoYWRlcl9jaGFuZWxfc2VsZWN0X3IgPSA0OworCXNzLT5zczcuc2hh ZGVyX2NoYW5lbF9zZWxlY3RfZyA9IDU7CisJc3MtPnNzNy5zaGFkZXJfY2hhbmVsX3NlbGVjdF9i ID0gNjsKKwlzcy0+c3M3LnNoYWRlcl9jaGFuZWxfc2VsZWN0X2EgPSA3OworCisJcmV0dXJuIG9m ZnNldDsKK30KKwordWludDMyX3QKK2dlbjdfZmlsbF9iaW5kaW5nX3RhYmxlKHN0cnVjdCBpbnRl bF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCisJCQlzdHJ1Y3QgaWd0X2J1ZiAqZHN0KQoreworCXVpbnQz Ml90ICpiaW5kaW5nX3RhYmxlLCBvZmZzZXQ7CisKKwliaW5kaW5nX3RhYmxlID0gYmF0Y2hfYWxs b2MoYmF0Y2gsIDMyLCA2NCk7CisJb2Zmc2V0ID0gYmF0Y2hfb2Zmc2V0KGJhdGNoLCBiaW5kaW5n X3RhYmxlKTsKKwliaW5kaW5nX3RhYmxlWzBdID0gZ2VuN19maWxsX3N1cmZhY2Vfc3RhdGUoYmF0 Y2gsIGRzdCwKKwkJCQkJCUdFTjdfU1VSRkFDRUZPUk1BVF9SOF9VTk9STSwgMSk7CisKKwlyZXR1 cm4gb2Zmc2V0OworfQorCit1aW50MzJfdAorZ2VuN19maWxsX21lZGlhX2tlcm5lbChzdHJ1Y3Qg aW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAorCQljb25zdCB1aW50MzJfdCBrZXJuZWxbXVs0XSwK KwkJc2l6ZV90IHNpemUpCit7CisJdWludDMyX3Qgb2Zmc2V0OworCisJb2Zmc2V0ID0gYmF0Y2hf Y29weShiYXRjaCwga2VybmVsLCBzaXplLCA2NCk7CisKKwlyZXR1cm4gb2Zmc2V0OworfQorCit1 aW50MzJfdAorZ2VuOF9maWxsX21lZGlhX2tlcm5lbChzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIg KmJhdGNoLAorCQljb25zdCB1aW50MzJfdCBrZXJuZWxbXVs0XSwKKwkJc2l6ZV90IHNpemUpCit7 CisJdWludDMyX3Qgb2Zmc2V0OworCisJb2Zmc2V0ID0gYmF0Y2hfY29weShiYXRjaCwga2VybmVs LCBzaXplLCA2NCk7CisKKwlyZXR1cm4gb2Zmc2V0OworfQorCit1aW50MzJfdAorZ2VuN19maWxs X2ludGVyZmFjZV9kZXNjcmlwdG9yKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsIHN0 cnVjdCBpZ3RfYnVmICpkc3QsCisJCQkgICAgICAgY29uc3QgdWludDMyX3Qga2VybmVsW11bNF0s IHNpemVfdCBzaXplKQoreworCXN0cnVjdCBnZW43X2ludGVyZmFjZV9kZXNjcmlwdG9yX2RhdGEg KmlkZDsKKwl1aW50MzJfdCBvZmZzZXQ7CisJdWludDMyX3QgYmluZGluZ190YWJsZV9vZmZzZXQs IGtlcm5lbF9vZmZzZXQ7CisKKwliaW5kaW5nX3RhYmxlX29mZnNldCA9IGdlbjdfZmlsbF9iaW5k aW5nX3RhYmxlKGJhdGNoLCBkc3QpOworCWtlcm5lbF9vZmZzZXQgPSBnZW43X2ZpbGxfbWVkaWFf a2VybmVsKGJhdGNoLCBrZXJuZWwsIHNpemUpOworCisJaWRkID0gYmF0Y2hfYWxsb2MoYmF0Y2gs IHNpemVvZigqaWRkKSwgNjQpOworCW9mZnNldCA9IGJhdGNoX29mZnNldChiYXRjaCwgaWRkKTsK KworCWlkZC0+ZGVzYzAua2VybmVsX3N0YXJ0X3BvaW50ZXIgPSAoa2VybmVsX29mZnNldCA+PiA2 KTsKKworCWlkZC0+ZGVzYzEuc2luZ2xlX3Byb2dyYW1fZmxvdyA9IDE7CisJaWRkLT5kZXNjMS5m bG9hdGluZ19wb2ludF9tb2RlID0gR0VON19GTE9BVElOR19QT0lOVF9JRUVFXzc1NDsKKworCWlk ZC0+ZGVzYzIuc2FtcGxlcl9jb3VudCA9IDA7ICAgICAgLyogMCBzYW1wbGVycyB1c2VkICovCisJ aWRkLT5kZXNjMi5zYW1wbGVyX3N0YXRlX3BvaW50ZXIgPSAwOworCisJaWRkLT5kZXNjMy5iaW5k aW5nX3RhYmxlX2VudHJ5X2NvdW50ID0gMDsKKwlpZGQtPmRlc2MzLmJpbmRpbmdfdGFibGVfcG9p bnRlciA9IChiaW5kaW5nX3RhYmxlX29mZnNldCA+PiA1KTsKKworCWlkZC0+ZGVzYzQuY29uc3Rh bnRfdXJiX2VudHJ5X3JlYWRfb2Zmc2V0ID0gMDsKKwlpZGQtPmRlc2M0LmNvbnN0YW50X3VyYl9l bnRyeV9yZWFkX2xlbmd0aCA9IDE7IC8qIGdyZiAxICovCisKKwlyZXR1cm4gb2Zmc2V0OworfQor Cit2b2lkCitnZW43X2VtaXRfc3RhdGVfYmFzZV9hZGRyZXNzKHN0cnVjdCBpbnRlbF9iYXRjaGJ1 ZmZlciAqYmF0Y2gpCit7CisJT1VUX0JBVENIKEdFTjdfU1RBVEVfQkFTRV9BRERSRVNTIHwgKDEw IC0gMikpOworCisJLyogZ2VuZXJhbCAqLworCU9VVF9CQVRDSCgwKTsKKworCS8qIHN1cmZhY2Ug Ki8KKwlPVVRfUkVMT0MoYmF0Y2gtPmJvLCBJOTE1X0dFTV9ET01BSU5fSU5TVFJVQ1RJT04sIDAs IEJBU0VfQUREUkVTU19NT0RJRlkpOworCisJLyogZHluYW1pYyAqLworCU9VVF9SRUxPQyhiYXRj aC0+Ym8sIEk5MTVfR0VNX0RPTUFJTl9JTlNUUlVDVElPTiwgMCwgQkFTRV9BRERSRVNTX01PRElG WSk7CisKKwkvKiBpbmRpcmVjdCAqLworCU9VVF9CQVRDSCgwKTsKKworCS8qIGluc3RydWN0aW9u ICovCisJT1VUX1JFTE9DKGJhdGNoLT5ibywgSTkxNV9HRU1fRE9NQUlOX0lOU1RSVUNUSU9OLCAw LCBCQVNFX0FERFJFU1NfTU9ESUZZKTsKKworCS8qIGdlbmVyYWwvZHluYW1pYy9pbmRpcmVjdC9p bnN0cnVjdGlvbiBhY2Nlc3MgQm91bmQgKi8KKwlPVVRfQkFUQ0goMCk7CisJT1VUX0JBVENIKDAg fCBCQVNFX0FERFJFU1NfTU9ESUZZKTsKKwlPVVRfQkFUQ0goMCk7CisJT1VUX0JBVENIKDAgfCBC QVNFX0FERFJFU1NfTU9ESUZZKTsKK30KKwordm9pZAorZ2VuN19lbWl0X3ZmZV9zdGF0ZShzdHJ1 Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoKQoreworCU9VVF9CQVRDSChHRU43X01FRElBX1ZG RV9TVEFURSB8ICg4IC0gMikpOworCisJLyogc2NyYXRjaCBidWZmZXIgKi8KKwlPVVRfQkFUQ0go MCk7CisKKwkvKiBudW1iZXIgb2YgdGhyZWFkcyAmIHVyYiBlbnRyaWVzICovCisJT1VUX0JBVENI KDEgPDwgMTYgfAorCQkyIDw8IDgpOworCisJT1VUX0JBVENIKDApOworCisJLyogdXJiIGVudHJ5 IHNpemUgJiBjdXJiZSBzaXplICovCisJT1VUX0JBVENIKDIgPDwgMTYgfCAJLyogaW4gMjU2IGJp dHMgdW5pdCAqLworCQkyKTsJCS8qIGluIDI1NiBiaXRzIHVuaXQgKi8KKworCS8qIHNjb3JlYm9h cmQgKi8KKwlPVVRfQkFUQ0goMCk7CisJT1VUX0JBVENIKDApOworCU9VVF9CQVRDSCgwKTsKK30K Kwordm9pZAorZ2VuN19lbWl0X3ZmZV9zdGF0ZV9ncGdwdShzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZm ZXIgKmJhdGNoKQoreworCU9VVF9CQVRDSChHRU43X01FRElBX1ZGRV9TVEFURSB8ICg4IC0gMikp OworCisJLyogc2NyYXRjaCBidWZmZXIgKi8KKwlPVVRfQkFUQ0goMCk7CisKKwkvKiBudW1iZXIg b2YgdGhyZWFkcyAmIHVyYiBlbnRyaWVzICovCisJT1VUX0JBVENIKDEgPDwgMTYgfCAvKiBtYXgg bnVtIG9mIHRocmVhZHMgKi8KKwkJICAwIDw8IDggfCAvKiBudW0gb2YgVVJCIGVudHJ5ICovCisJ CSAgMSA8PCAyKTsgLyogR1BHUFUgbW9kZSAqLworCisJT1VUX0JBVENIKDApOworCisJLyogdXJi IGVudHJ5IHNpemUgJiBjdXJiZSBzaXplICovCisJT1VUX0JBVENIKDAgPDwgMTYgfCAJLyogVVJC IGVudHJ5IHNpemUgaW4gMjU2IGJpdHMgdW5pdCAqLworCQkgIDEpOwkJLyogQ1VSQkUgZW50cnkg c2l6ZSBpbiAyNTYgYml0cyB1bml0ICovCisKKwkvKiBzY29yZWJvYXJkICovCisJT1VUX0JBVENI KDApOworCU9VVF9CQVRDSCgwKTsKKwlPVVRfQkFUQ0goMCk7Cit9CisKK3ZvaWQKK2dlbjdfZW1p dF9jdXJiZV9sb2FkKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsIHVpbnQzMl90IGN1 cmJlX2J1ZmZlcikKK3sKKwlPVVRfQkFUQ0goR0VON19NRURJQV9DVVJCRV9MT0FEIHwgKDQgLSAy KSk7CisJT1VUX0JBVENIKDApOworCS8qIGN1cmJlIHRvdGFsIGRhdGEgbGVuZ3RoICovCisJT1VU X0JBVENIKDY0KTsKKwkvKiBjdXJiZSBkYXRhIHN0YXJ0IGFkZHJlc3MsIGlzIHJlbGF0aXZlIHRv IHRoZSBkeW5hbWljcyBiYXNlIGFkZHJlc3MgKi8KKwlPVVRfQkFUQ0goY3VyYmVfYnVmZmVyKTsK K30KKwordm9pZAorZ2VuN19lbWl0X2ludGVyZmFjZV9kZXNjcmlwdG9yX2xvYWQoc3RydWN0IGlu dGVsX2JhdGNoYnVmZmVyICpiYXRjaCwgdWludDMyX3QgaW50ZXJmYWNlX2Rlc2NyaXB0b3IpCit7 CisJT1VUX0JBVENIKEdFTjdfTUVESUFfSU5URVJGQUNFX0RFU0NSSVBUT1JfTE9BRCB8ICg0IC0g MikpOworCU9VVF9CQVRDSCgwKTsKKwkvKiBpbnRlcmZhY2UgZGVzY3JpcHRvciBkYXRhIGxlbmd0 aCAqLworCU9VVF9CQVRDSChzaXplb2Yoc3RydWN0IGdlbjdfaW50ZXJmYWNlX2Rlc2NyaXB0b3Jf ZGF0YSkpOworCS8qIGludGVyZmFjZSBkZXNjcmlwdG9yIGFkZHJlc3MsIGlzIHJlbGF0aXZlIHRv IHRoZSBkeW5hbWljcyBiYXNlIGFkZHJlc3MgKi8KKwlPVVRfQkFUQ0goaW50ZXJmYWNlX2Rlc2Ny aXB0b3IpOworfQorCit2b2lkCitnZW43X2VtaXRfbWVkaWFfb2JqZWN0cyhzdHJ1Y3QgaW50ZWxf YmF0Y2hidWZmZXIgKmJhdGNoLAorCQkJdW5zaWduZWQgeCwgdW5zaWduZWQgeSwKKwkJCXVuc2ln bmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQpCit7CisJaW50IGksIGo7CisKKwlmb3IgKGkgPSAw OyBpIDwgd2lkdGggLyAxNjsgaSsrKSB7CisJCWZvciAoaiA9IDA7IGogPCBoZWlnaHQgLyAxNjsg aisrKSB7CisJCQlPVVRfQkFUQ0goR0VON19NRURJQV9PQkpFQ1QgfCAoOCAtIDIpKTsKKworCQkJ LyogaW50ZXJmYWNlIGRlc2NyaXB0b3Igb2Zmc2V0ICovCisJCQlPVVRfQkFUQ0goMCk7CisKKwkJ CS8qIHdpdGhvdXQgaW5kaXJlY3QgZGF0YSAqLworCQkJT1VUX0JBVENIKDApOworCQkJT1VUX0JB VENIKDApOworCisJCQkvKiBzY29yZWJvYXJkICovCisJCQlPVVRfQkFUQ0goMCk7CisJCQlPVVRf QkFUQ0goMCk7CisKKwkJCS8qIGlubGluZSBkYXRhICh4b2Zmc2V0LCB5b2Zmc2V0KSAqLworCQkJ T1VUX0JBVENIKHggKyBpICogMTYpOworCQkJT1VUX0JBVENIKHkgKyBqICogMTYpOworCQl9CisJ fQorfQorCit2b2lkCitnZW43X2VtaXRfZ3BncHVfd2FsayhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZm ZXIgKmJhdGNoLAorCQkgICAgIHVuc2lnbmVkIHgsIHVuc2lnbmVkIHksCisJCSAgICAgdW5zaWdu ZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCkKK3sKKwl1aW50MzJfdCB4X2RpbSwgeV9kaW0sIHRt cCwgcmlnaHRfbWFzazsKKworCS8qCisJICogU2ltcGx5IGRvIFNJTUQxNiBiYXNlZCBkaXNwYXRj aCwgc28gZXZlcnkgdGhyZWFkIHVzZXMKKwkgKiBTSU1EMTYgY2hhbm5lbHMuCisJICoKKwkgKiBE ZWZpbmUgb3VyIG93biB0aHJlYWQgZ3JvdXAgc2l6ZSwgZS5nIDE2eDEgZm9yIGV2ZXJ5IGdyb3Vw LCB0aGVuCisJICogd2lsbCBoYXZlIDEgdGhyZWFkIGVhY2ggZ3JvdXAgaW4gU0lNRDE2IGRpc3Bh dGNoLiBTbyB0aHJlYWQKKwkgKiB3aWR0aC9oZWlnaHQvZGVwdGggYXJlIGFsbCAxLgorCSAqCisJ ICogVGhlbiB0aHJlYWQgZ3JvdXAgWCA9IHdpZHRoIC8gMTYgKGFsaWduZWQgdG8gMTYpCisJICog dGhyZWFkIGdyb3VwIFkgPSBoZWlnaHQ7CisJICovCisJeF9kaW0gPSAod2lkdGggKyAxNSkgLyAx NjsKKwl5X2RpbSA9IGhlaWdodDsKKworCXRtcCA9IHdpZHRoICYgMTU7CisJaWYgKHRtcCA9PSAw KQorCQlyaWdodF9tYXNrID0gKDEgPDwgMTYpIC0gMTsKKwllbHNlCisJCXJpZ2h0X21hc2sgPSAo MSA8PCB0bXApIC0gMTsKKworCU9VVF9CQVRDSChHRU43X0dQR1BVX1dBTEtFUiB8IDkpOworCisJ LyogaW50ZXJmYWNlIGRlc2NyaXB0b3Igb2Zmc2V0ICovCisJT1VUX0JBVENIKDApOworCisJLyog U0lNRCBzaXplLCB0aHJlYWQgdy9oL2QgKi8KKwlPVVRfQkFUQ0goMSA8PCAzMCB8IC8qIFNJTUQx NiAqLworCQkgIDAgPDwgMTYgfCAvKiBkZXB0aDoxICovCisJCSAgMCA8PCA4IHwgLyogaGVpZ2h0 OjEgKi8KKwkJICAwKTsgLyogd2lkdGg6MSAqLworCisJLyogdGhyZWFkIGdyb3VwIFggKi8KKwlP VVRfQkFUQ0goMCk7CisJT1VUX0JBVENIKHhfZGltKTsKKworCS8qIHRocmVhZCBncm91cCBZICov CisJT1VUX0JBVENIKDApOworCU9VVF9CQVRDSCh5X2RpbSk7CisKKwkvKiB0aHJlYWQgZ3JvdXAg WiAqLworCU9VVF9CQVRDSCgwKTsKKwlPVVRfQkFUQ0goMSk7CisKKwkvKiByaWdodCBtYXNrICov CisJT1VUX0JBVENIKHJpZ2h0X21hc2spOworCisJLyogYm90dG9tIG1hc2ssIGhlaWdodCAxLCBh bHdheXMgMHhmZmZmZmZmZiAqLworCU9VVF9CQVRDSCgweGZmZmZmZmZmKTsKK30KKwordm9pZAor Z2VuOF9yZW5kZXJfZmx1c2goc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwgdWludDMy X3QgYmF0Y2hfZW5kKQoreworCWludCByZXQ7CisKKwlyZXQgPSBkcm1faW50ZWxfYm9fc3ViZGF0 YShiYXRjaC0+Ym8sIDAsIDQwOTYsIGJhdGNoLT5idWZmZXIpOworCWlmIChyZXQgPT0gMCkKKwkJ cmV0ID0gZHJtX2ludGVsX2JvX21yYl9leGVjKGJhdGNoLT5ibywgYmF0Y2hfZW5kLAorCQkJCQlO VUxMLCAwLCAwLCAwKTsKKwlpZ3RfYXNzZXJ0KHJldCA9PSAwKTsKK30KKworCit1aW50MzJfdAor Z2VuOF9maWxsX2N1cmJlX2J1ZmZlcl9kYXRhKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0 Y2gsCisJCQl1aW50OF90IGNvbG9yKQoreworCXVpbnQ4X3QgKmN1cmJlX2J1ZmZlcjsKKwl1aW50 MzJfdCBvZmZzZXQ7CisKKwljdXJiZV9idWZmZXIgPSBiYXRjaF9hbGxvYyhiYXRjaCwgc2l6ZW9m KHVpbnQzMl90KSAqIDgsIDY0KTsKKwlvZmZzZXQgPSBiYXRjaF9vZmZzZXQoYmF0Y2gsIGN1cmJl X2J1ZmZlcik7CisJKmN1cmJlX2J1ZmZlciA9IGNvbG9yOworCisJcmV0dXJuIG9mZnNldDsKK30K KwordWludDMyX3QKK2dlbjhfZmlsbF9zdXJmYWNlX3N0YXRlKHN0cnVjdCBpbnRlbF9iYXRjaGJ1 ZmZlciAqYmF0Y2gsCisJCQlzdHJ1Y3QgaWd0X2J1ZiAqYnVmLAorCQkJdWludDMyX3QgZm9ybWF0 LAorCQkJaW50IGlzX2RzdCkKK3sKKwlzdHJ1Y3QgZ2VuOF9zdXJmYWNlX3N0YXRlICpzczsKKwl1 aW50MzJfdCB3cml0ZV9kb21haW4sIHJlYWRfZG9tYWluLCBvZmZzZXQ7CisJaW50IHJldDsKKwor CWlmIChpc19kc3QpIHsKKwkJd3JpdGVfZG9tYWluID0gcmVhZF9kb21haW4gPSBJOTE1X0dFTV9E T01BSU5fUkVOREVSOworCX0gZWxzZSB7CisJCXdyaXRlX2RvbWFpbiA9IDA7CisJCXJlYWRfZG9t YWluID0gSTkxNV9HRU1fRE9NQUlOX1NBTVBMRVI7CisJfQorCisJc3MgPSBiYXRjaF9hbGxvYyhi YXRjaCwgc2l6ZW9mKCpzcyksIDY0KTsKKwlvZmZzZXQgPSBiYXRjaF9vZmZzZXQoYmF0Y2gsIHNz KTsKKworCXNzLT5zczAuc3VyZmFjZV90eXBlID0gR0VOOF9TVVJGQUNFXzJEOworCXNzLT5zczAu c3VyZmFjZV9mb3JtYXQgPSBmb3JtYXQ7CisJc3MtPnNzMC5yZW5kZXJfY2FjaGVfcmVhZF93cml0 ZSA9IDE7CisJc3MtPnNzMC52ZXJ0aWNhbF9hbGlnbm1lbnQgPSAxOyAvKiBhbGlnbiA0ICovCisJ c3MtPnNzMC5ob3Jpem9udGFsX2FsaWdubWVudCA9IDE7IC8qIGFsaWduIDQgKi8KKworCWlmIChi dWYtPnRpbGluZyA9PSBJOTE1X1RJTElOR19YKQorCQlzcy0+c3MwLnRpbGVkX21vZGUgPSAyOwor CWVsc2UgaWYgKGJ1Zi0+dGlsaW5nID09IEk5MTVfVElMSU5HX1kpCisJCXNzLT5zczAudGlsZWRf bW9kZSA9IDM7CisKKwlzcy0+c3M4LmJhc2VfYWRkciA9IGJ1Zi0+Ym8tPm9mZnNldDsKKworCXJl dCA9IGRybV9pbnRlbF9ib19lbWl0X3JlbG9jKGJhdGNoLT5ibywKKwkJCQliYXRjaF9vZmZzZXQo YmF0Y2gsIHNzKSArIDggKiA0LAorCQkJCWJ1Zi0+Ym8sIDAsCisJCQkJcmVhZF9kb21haW4sIHdy aXRlX2RvbWFpbik7CisJaWd0X2Fzc2VydChyZXQgPT0gMCk7CisKKwlzcy0+c3MyLmhlaWdodCA9 IGlndF9idWZfaGVpZ2h0KGJ1ZikgLSAxOworCXNzLT5zczIud2lkdGggID0gaWd0X2J1Zl93aWR0 aChidWYpIC0gMTsKKwlzcy0+c3MzLnBpdGNoICA9IGJ1Zi0+c3RyaWRlIC0gMTsKKworCXNzLT5z czcuc2hhZGVyX2NoYW5lbF9zZWxlY3RfciA9IDQ7CisJc3MtPnNzNy5zaGFkZXJfY2hhbmVsX3Nl bGVjdF9nID0gNTsKKwlzcy0+c3M3LnNoYWRlcl9jaGFuZWxfc2VsZWN0X2IgPSA2OworCXNzLT5z czcuc2hhZGVyX2NoYW5lbF9zZWxlY3RfYSA9IDc7CisKKwlyZXR1cm4gb2Zmc2V0OworfQorCit1 aW50MzJfdAorZ2VuOF9maWxsX2JpbmRpbmdfdGFibGUoc3RydWN0IGludGVsX2JhdGNoYnVmZmVy ICpiYXRjaCwKKwkJCXN0cnVjdCBpZ3RfYnVmICpkc3QpCit7CisJdWludDMyX3QgKmJpbmRpbmdf dGFibGUsIG9mZnNldDsKKworCWJpbmRpbmdfdGFibGUgPSBiYXRjaF9hbGxvYyhiYXRjaCwgMzIs IDY0KTsKKwlvZmZzZXQgPSBiYXRjaF9vZmZzZXQoYmF0Y2gsIGJpbmRpbmdfdGFibGUpOworCisJ YmluZGluZ190YWJsZVswXSA9IGdlbjhfZmlsbF9zdXJmYWNlX3N0YXRlKGJhdGNoLCBkc3QsCisJ CQkJCQlHRU44X1NVUkZBQ0VGT1JNQVRfUjhfVU5PUk0sIDEpOworCisJcmV0dXJuIG9mZnNldDsK K30KKwordWludDMyX3QKK2dlbjhfZmlsbF9pbnRlcmZhY2VfZGVzY3JpcHRvcihzdHJ1Y3QgaW50 ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLCBzdHJ1Y3QgaWd0X2J1ZiAqZHN0LCAgY29uc3QgdWludDMy X3Qga2VybmVsW11bNF0sIHNpemVfdCBzaXplKQoreworCXN0cnVjdCBnZW44X2ludGVyZmFjZV9k ZXNjcmlwdG9yX2RhdGEgKmlkZDsKKwl1aW50MzJfdCBvZmZzZXQ7CisJdWludDMyX3QgYmluZGlu Z190YWJsZV9vZmZzZXQsIGtlcm5lbF9vZmZzZXQ7CisKKwliaW5kaW5nX3RhYmxlX29mZnNldCA9 IGdlbjhfZmlsbF9iaW5kaW5nX3RhYmxlKGJhdGNoLCBkc3QpOworCWtlcm5lbF9vZmZzZXQgPSBn ZW44X2ZpbGxfbWVkaWFfa2VybmVsKGJhdGNoLCBrZXJuZWwsIHNpemUpOworCisJaWRkID0gYmF0 Y2hfYWxsb2MoYmF0Y2gsIHNpemVvZigqaWRkKSwgNjQpOworCW9mZnNldCA9IGJhdGNoX29mZnNl dChiYXRjaCwgaWRkKTsKKworCWlkZC0+ZGVzYzAua2VybmVsX3N0YXJ0X3BvaW50ZXIgPSAoa2Vy bmVsX29mZnNldCA+PiA2KTsKKworCWlkZC0+ZGVzYzIuc2luZ2xlX3Byb2dyYW1fZmxvdyA9IDE7 CisJaWRkLT5kZXNjMi5mbG9hdGluZ19wb2ludF9tb2RlID0gR0VOOF9GTE9BVElOR19QT0lOVF9J RUVFXzc1NDsKKworCWlkZC0+ZGVzYzMuc2FtcGxlcl9jb3VudCA9IDA7ICAgICAgLyogMCBzYW1w bGVycyB1c2VkICovCisJaWRkLT5kZXNjMy5zYW1wbGVyX3N0YXRlX3BvaW50ZXIgPSAwOworCisJ aWRkLT5kZXNjNC5iaW5kaW5nX3RhYmxlX2VudHJ5X2NvdW50ID0gMDsKKwlpZGQtPmRlc2M0LmJp bmRpbmdfdGFibGVfcG9pbnRlciA9IChiaW5kaW5nX3RhYmxlX29mZnNldCA+PiA1KTsKKworCWlk ZC0+ZGVzYzUuY29uc3RhbnRfdXJiX2VudHJ5X3JlYWRfb2Zmc2V0ID0gMDsKKwlpZGQtPmRlc2M1 LmNvbnN0YW50X3VyYl9lbnRyeV9yZWFkX2xlbmd0aCA9IDE7IC8qIGdyZiAxICovCisKKwlyZXR1 cm4gb2Zmc2V0OworfQorCit2b2lkCitnZW44X2VtaXRfc3RhdGVfYmFzZV9hZGRyZXNzKHN0cnVj dCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gpCit7CisJT1VUX0JBVENIKEdFTjhfU1RBVEVfQkFT RV9BRERSRVNTIHwgKDE2IC0gMikpOworCisJLyogZ2VuZXJhbCAqLworCU9VVF9CQVRDSCgwIHwg QkFTRV9BRERSRVNTX01PRElGWSk7CisJT1VUX0JBVENIKDApOworCisJLyogc3RhdGVsZXNzIGRh dGEgcG9ydCAqLworCU9VVF9CQVRDSCgwIHwgQkFTRV9BRERSRVNTX01PRElGWSk7CisKKwkvKiBz dXJmYWNlICovCisJT1VUX1JFTE9DKGJhdGNoLT5ibywgSTkxNV9HRU1fRE9NQUlOX1NBTVBMRVIs IDAsIEJBU0VfQUREUkVTU19NT0RJRlkpOworCisJLyogZHluYW1pYyAqLworCU9VVF9SRUxPQyhi YXRjaC0+Ym8sIEk5MTVfR0VNX0RPTUFJTl9SRU5ERVIgfCBJOTE1X0dFTV9ET01BSU5fSU5TVFJV Q1RJT04sCisJCTAsIEJBU0VfQUREUkVTU19NT0RJRlkpOworCisJLyogaW5kaXJlY3QgKi8KKwlP VVRfQkFUQ0goMCk7CisJT1VUX0JBVENIKDApOworCisJLyogaW5zdHJ1Y3Rpb24gKi8KKwlPVVRf UkVMT0MoYmF0Y2gtPmJvLCBJOTE1X0dFTV9ET01BSU5fSU5TVFJVQ1RJT04sIDAsIEJBU0VfQURE UkVTU19NT0RJRlkpOworCisJLyogZ2VuZXJhbCBzdGF0ZSBidWZmZXIgc2l6ZSAqLworCU9VVF9C QVRDSCgweGZmZmZmMDAwIHwgMSk7CisJLyogZHluYW1pYyBzdGF0ZSBidWZmZXIgc2l6ZSAqLwor CU9VVF9CQVRDSCgxIDw8IDEyIHwgMSk7CisJLyogaW5kaXJlY3Qgb2JqZWN0IGJ1ZmZlciBzaXpl ICovCisJT1VUX0JBVENIKDB4ZmZmZmYwMDAgfCAxKTsKKwkvKiBpbnRydWN0aW9uIGJ1ZmZlciBz aXplLCBtdXN0IHNldCBtb2RpZnkgZW5hYmxlIGJpdCwgb3RoZXJ3aXNlIGl0IG1heSByZXN1bHQg aW4gR1BVIGhhbmcgKi8KKwlPVVRfQkFUQ0goMSA8PCAxMiB8IDEpOworfQorCit2b2lkCitnZW44 X2VtaXRfdmZlX3N0YXRlKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gpCit7CisJT1VU X0JBVENIKEdFTjhfTUVESUFfVkZFX1NUQVRFIHwgKDkgLSAyKSk7CisKKwkvKiBzY3JhdGNoIGJ1 ZmZlciAqLworCU9VVF9CQVRDSCgwKTsKKwlPVVRfQkFUQ0goMCk7CisKKwkvKiBudW1iZXIgb2Yg dGhyZWFkcyAmIHVyYiBlbnRyaWVzICovCisJT1VUX0JBVENIKDEgPDwgMTYgfAorCQkyIDw8IDgp OworCisJT1VUX0JBVENIKDApOworCisJLyogdXJiIGVudHJ5IHNpemUgJiBjdXJiZSBzaXplICov CisJT1VUX0JBVENIKDIgPDwgMTYgfAorCQkyKTsKKworCS8qIHNjb3JlYm9hcmQgKi8KKwlPVVRf QkFUQ0goMCk7CisJT1VUX0JBVENIKDApOworCU9VVF9CQVRDSCgwKTsKK30KKwordm9pZAorZ2Vu OF9lbWl0X3ZmZV9zdGF0ZV9ncGdwdShzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoKQor eworCU9VVF9CQVRDSChHRU44X01FRElBX1ZGRV9TVEFURSB8ICg5IC0gMikpOworCisJLyogc2Ny YXRjaCBidWZmZXIgKi8KKwlPVVRfQkFUQ0goMCk7CisJT1VUX0JBVENIKDApOworCisJLyogbnVt YmVyIG9mIHRocmVhZHMgJiB1cmIgZW50cmllcyAqLworCU9VVF9CQVRDSCgxIDw8IDE2IHwgMSA8 PCA4KTsKKworCU9VVF9CQVRDSCgwKTsKKworCS8qIHVyYiBlbnRyeSBzaXplICYgY3VyYmUgc2l6 ZSAqLworCU9VVF9CQVRDSCgwIDw8IDE2IHwgMSk7CisKKwkvKiBzY29yZWJvYXJkICovCisJT1VU X0JBVENIKDApOworCU9VVF9CQVRDSCgwKTsKKwlPVVRfQkFUQ0goMCk7Cit9CisKK3ZvaWQKK2dl bjhfZW1pdF9jdXJiZV9sb2FkKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsIHVpbnQz Ml90IGN1cmJlX2J1ZmZlcikKK3sKKwlPVVRfQkFUQ0goR0VOOF9NRURJQV9DVVJCRV9MT0FEIHwg KDQgLSAyKSk7CisJT1VUX0JBVENIKDApOworCS8qIGN1cmJlIHRvdGFsIGRhdGEgbGVuZ3RoICov CisJT1VUX0JBVENIKDY0KTsKKwkvKiBjdXJiZSBkYXRhIHN0YXJ0IGFkZHJlc3MsIGlzIHJlbGF0 aXZlIHRvIHRoZSBkeW5hbWljcyBiYXNlIGFkZHJlc3MgKi8KKwlPVVRfQkFUQ0goY3VyYmVfYnVm ZmVyKTsKK30KKwordm9pZAorZ2VuOF9lbWl0X2ludGVyZmFjZV9kZXNjcmlwdG9yX2xvYWQoc3Ry dWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwgdWludDMyX3QgaW50ZXJmYWNlX2Rlc2NyaXB0 b3IpCit7CisJT1VUX0JBVENIKEdFTjhfTUVESUFfSU5URVJGQUNFX0RFU0NSSVBUT1JfTE9BRCB8 ICg0IC0gMikpOworCU9VVF9CQVRDSCgwKTsKKwkvKiBpbnRlcmZhY2UgZGVzY3JpcHRvciBkYXRh IGxlbmd0aCAqLworCU9VVF9CQVRDSChzaXplb2Yoc3RydWN0IGdlbjhfaW50ZXJmYWNlX2Rlc2Ny aXB0b3JfZGF0YSkpOworCS8qIGludGVyZmFjZSBkZXNjcmlwdG9yIGFkZHJlc3MsIGlzIHJlbGF0 aXZlIHRvIHRoZSBkeW5hbWljcyBiYXNlIGFkZHJlc3MgKi8KKwlPVVRfQkFUQ0goaW50ZXJmYWNl X2Rlc2NyaXB0b3IpOworfQorCit2b2lkCitnZW44X2VtaXRfbWVkaWFfc3RhdGVfZmx1c2goc3Ry dWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCkKK3sKKwlPVVRfQkFUQ0goR0VOOF9NRURJQV9T VEFURV9GTFVTSCB8ICgyIC0gMikpOworCU9VVF9CQVRDSCgwKTsKK30KKwordm9pZAorZ2VuOF9l bWl0X21lZGlhX29iamVjdHMoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKKwkJCXVu c2lnbmVkIHgsIHVuc2lnbmVkIHksCisJCQl1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0 KQoreworCWludCBpLCBqOworCisJZm9yIChpID0gMDsgaSA8IHdpZHRoIC8gMTY7IGkrKykgewor CQlmb3IgKGogPSAwOyBqIDwgaGVpZ2h0IC8gMTY7IGorKykgeworCQkJT1VUX0JBVENIKEdFTjhf TUVESUFfT0JKRUNUIHwgKDggLSAyKSk7CisKKwkJCS8qIGludGVyZmFjZSBkZXNjcmlwdG9yIG9m ZnNldCAqLworCQkJT1VUX0JBVENIKDApOworCisJCQkvKiB3aXRob3V0IGluZGlyZWN0IGRhdGEg Ki8KKwkJCU9VVF9CQVRDSCgwKTsKKwkJCU9VVF9CQVRDSCgwKTsKKworCQkJLyogc2NvcmVib2Fy ZCAqLworCQkJT1VUX0JBVENIKDApOworCQkJT1VUX0JBVENIKDApOworCisJCQkvKiBpbmxpbmUg ZGF0YSAoeG9mZnNldCwgeW9mZnNldCkgKi8KKwkJCU9VVF9CQVRDSCh4ICsgaSAqIDE2KTsKKwkJ CU9VVF9CQVRDSCh5ICsgaiAqIDE2KTsKKwkJCWdlbjhfZW1pdF9tZWRpYV9zdGF0ZV9mbHVzaChi YXRjaCk7CisJCX0KKwl9Cit9Cit2b2lkCitnZW44bHBfZW1pdF9tZWRpYV9vYmplY3RzKHN0cnVj dCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCisJCQl1bnNpZ25lZCB4LCB1bnNpZ25lZCB5LAor CQkJdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCkKK3sKKwlpbnQgaSwgajsKKworCWZv ciAoaSA9IDA7IGkgPCB3aWR0aCAvIDE2OyBpKyspIHsKKwkJZm9yIChqID0gMDsgaiA8IGhlaWdo dCAvIDE2OyBqKyspIHsKKwkJCU9VVF9CQVRDSChHRU44X01FRElBX09CSkVDVCB8ICg4IC0gMikp OworCisJCQkvKiBpbnRlcmZhY2UgZGVzY3JpcHRvciBvZmZzZXQgKi8KKwkJCU9VVF9CQVRDSCgw KTsKKworCQkJLyogd2l0aG91dCBpbmRpcmVjdCBkYXRhICovCisJCQlPVVRfQkFUQ0goMCk7CisJ CQlPVVRfQkFUQ0goMCk7CisKKwkJCS8qIHNjb3JlYm9hcmQgKi8KKwkJCU9VVF9CQVRDSCgwKTsK KwkJCU9VVF9CQVRDSCgwKTsKKworCQkJLyogaW5saW5lIGRhdGEgKHhvZmZzZXQsIHlvZmZzZXQp ICovCisJCQlPVVRfQkFUQ0goeCArIGkgKiAxNik7CisJCQlPVVRfQkFUQ0goeSArIGogKiAxNik7 CisJCX0KKwl9Cit9Cit2b2lkCitnZW44X2VtaXRfZ3BncHVfd2FsayhzdHJ1Y3QgaW50ZWxfYmF0 Y2hidWZmZXIgKmJhdGNoLAorCQkgICAgIHVuc2lnbmVkIHgsIHVuc2lnbmVkIHksCisJCSAgICAg dW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCkKK3sKKwl1aW50MzJfdCB4X2RpbSwgeV9k aW0sIHRtcCwgcmlnaHRfbWFzazsKKworCS8qCisJICogU2ltcGx5IGRvIFNJTUQxNiBiYXNlZCBk aXNwYXRjaCwgc28gZXZlcnkgdGhyZWFkIHVzZXMKKwkgKiBTSU1EMTYgY2hhbm5lbHMuCisJICoK KwkgKiBEZWZpbmUgb3VyIG93biB0aHJlYWQgZ3JvdXAgc2l6ZSwgZS5nIDE2eDEgZm9yIGV2ZXJ5 IGdyb3VwLCB0aGVuCisJICogd2lsbCBoYXZlIDEgdGhyZWFkIGVhY2ggZ3JvdXAgaW4gU0lNRDE2 IGRpc3BhdGNoLiBTbyB0aHJlYWQKKwkgKiB3aWR0aC9oZWlnaHQvZGVwdGggYXJlIGFsbCAxLgor CSAqCisJICogVGhlbiB0aHJlYWQgZ3JvdXAgWCA9IHdpZHRoIC8gMTYgKGFsaWduZWQgdG8gMTYp CisJICogdGhyZWFkIGdyb3VwIFkgPSBoZWlnaHQ7CisJICovCisJeF9kaW0gPSAod2lkdGggKyAx NSkgLyAxNjsKKwl5X2RpbSA9IGhlaWdodDsKKworCXRtcCA9IHdpZHRoICYgMTU7CisJaWYgKHRt cCA9PSAwKQorCQlyaWdodF9tYXNrID0gKDEgPDwgMTYpIC0gMTsKKwllbHNlCisJCXJpZ2h0X21h c2sgPSAoMSA8PCB0bXApIC0gMTsKKworCU9VVF9CQVRDSChHRU43X0dQR1BVX1dBTEtFUiB8IDEz KTsKKworCU9VVF9CQVRDSCgwKTsgLyoga2VybmVsIG9mZnNldCAqLworCU9VVF9CQVRDSCgwKTsg LyogaW5kaXJlY3QgZGF0YSBsZW5ndGggKi8KKwlPVVRfQkFUQ0goMCk7IC8qIGluZGlyZWN0IGRh dGEgb2Zmc2V0ICovCisKKwkvKiBTSU1EIHNpemUsIHRocmVhZCB3L2gvZCAqLworCU9VVF9CQVRD SCgxIDw8IDMwIHwgLyogU0lNRDE2ICovCisJCSAgMCA8PCAxNiB8IC8qIGRlcHRoOjEgKi8KKwkJ ICAwIDw8IDggfCAvKiBoZWlnaHQ6MSAqLworCQkgIDApOyAvKiB3aWR0aDoxICovCisKKwkvKiB0 aHJlYWQgZ3JvdXAgWCAqLworCU9VVF9CQVRDSCgwKTsKKwlPVVRfQkFUQ0goMCk7CisJT1VUX0JB VENIKHhfZGltKTsKKworCS8qIHRocmVhZCBncm91cCBZICovCisJT1VUX0JBVENIKDApOworCU9V VF9CQVRDSCgwKTsKKwlPVVRfQkFUQ0goeV9kaW0pOworCisJLyogdGhyZWFkIGdyb3VwIFogKi8K KwlPVVRfQkFUQ0goMCk7CisJT1VUX0JBVENIKDEpOworCisJLyogcmlnaHQgbWFzayAqLworCU9V VF9CQVRDSChyaWdodF9tYXNrKTsKKworCS8qIGJvdHRvbSBtYXNrLCBoZWlnaHQgMSwgYWx3YXlz IDB4ZmZmZmZmZmYgKi8KKwlPVVRfQkFUQ0goMHhmZmZmZmZmZik7Cit9CisKK3ZvaWQKK2dlbjlf ZW1pdF9zdGF0ZV9iYXNlX2FkZHJlc3Moc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCkK K3sKKwlPVVRfQkFUQ0goR0VOOF9TVEFURV9CQVNFX0FERFJFU1MgfCAoMTkgLSAyKSk7CisKKwkv KiBnZW5lcmFsICovCisJT1VUX0JBVENIKDAgfCBCQVNFX0FERFJFU1NfTU9ESUZZKTsKKwlPVVRf QkFUQ0goMCk7CisKKwkvKiBzdGF0ZWxlc3MgZGF0YSBwb3J0ICovCisJT1VUX0JBVENIKDAgfCBC QVNFX0FERFJFU1NfTU9ESUZZKTsKKworCS8qIHN1cmZhY2UgKi8KKwlPVVRfUkVMT0MoYmF0Y2gt PmJvLCBJOTE1X0dFTV9ET01BSU5fU0FNUExFUiwgMCwgQkFTRV9BRERSRVNTX01PRElGWSk7CisK KwkvKiBkeW5hbWljICovCisJT1VUX1JFTE9DKGJhdGNoLT5ibywgSTkxNV9HRU1fRE9NQUlOX1JF TkRFUiB8IEk5MTVfR0VNX0RPTUFJTl9JTlNUUlVDVElPTiwKKwkJMCwgQkFTRV9BRERSRVNTX01P RElGWSk7CisKKwkvKiBpbmRpcmVjdCAqLworCU9VVF9CQVRDSCgwKTsKKwlPVVRfQkFUQ0goMCk7 CisKKwkvKiBpbnN0cnVjdGlvbiAqLworCU9VVF9SRUxPQyhiYXRjaC0+Ym8sIEk5MTVfR0VNX0RP TUFJTl9JTlNUUlVDVElPTiwgMCwgQkFTRV9BRERSRVNTX01PRElGWSk7CisKKwkvKiBnZW5lcmFs IHN0YXRlIGJ1ZmZlciBzaXplICovCisJT1VUX0JBVENIKDB4ZmZmZmYwMDAgfCAxKTsKKwkvKiBk eW5hbWljIHN0YXRlIGJ1ZmZlciBzaXplICovCisJT1VUX0JBVENIKDEgPDwgMTIgfCAxKTsKKwkv KiBpbmRpcmVjdCBvYmplY3QgYnVmZmVyIHNpemUgKi8KKwlPVVRfQkFUQ0goMHhmZmZmZjAwMCB8 IDEpOworCS8qIGludHJ1Y3Rpb24gYnVmZmVyIHNpemUsIG11c3Qgc2V0IG1vZGlmeSBlbmFibGUg Yml0LCBvdGhlcndpc2UgaXQgbWF5IHJlc3VsdCBpbiBHUFUgaGFuZyAqLworCU9VVF9CQVRDSCgx IDw8IDEyIHwgMSk7CisKKwkvKiBCaW5kbGVzcyBzdXJmYWNlIHN0YXRlIGJhc2UgYWRkcmVzcyAq LworCU9VVF9CQVRDSCgwIHwgQkFTRV9BRERSRVNTX01PRElGWSk7CisJT1VUX0JBVENIKDApOwor CU9VVF9CQVRDSCgweGZmZmZmMDAwKTsKK30KZGlmZiAtLWdpdCBhL2xpYi9ncHVfZmlsbC5oIGIv bGliL2dwdV9maWxsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLjk3MzUx M2IwCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2dwdV9maWxsLmgKQEAgLTAsMCArMSwxMzggQEAK KyNpbmNsdWRlIDxpbnRlbF9idWZtZ3IuaD4KKyNpbmNsdWRlIDxpOTE1X2RybS5oPgorCisjaW5j bHVkZSAibWVkaWFfZmlsbC5oIgorI2luY2x1ZGUgImdlbjdfbWVkaWEuaCIKKyNpbmNsdWRlICJn ZW44X21lZGlhLmgiCisjaW5jbHVkZSAiaW50ZWxfcmVnLmgiCisjaW5jbHVkZSAiZHJtdGVzdC5o IgorI2luY2x1ZGUgImludGVsX2JhdGNoYnVmZmVyLmgiCisjaW5jbHVkZSAiaW50ZWxfY2hpcHNl dC5oIgorI2luY2x1ZGUgPGFzc2VydC5oPgorCit1aW50MzJfdAorYmF0Y2hfdXNlZChzdHJ1Y3Qg aW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoKTsKKwordWludDMyX3QKK2JhdGNoX2FsaWduKHN0cnVj dCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsIHVpbnQzMl90IGFsaWduKTsKKwordm9pZCAqCiti YXRjaF9hbGxvYyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLCB1aW50MzJfdCBzaXpl LCB1aW50MzJfdCBhbGlnbik7CisKK3VpbnQzMl90CitiYXRjaF9vZmZzZXQoc3RydWN0IGludGVs X2JhdGNoYnVmZmVyICpiYXRjaCwgdm9pZCAqcHRyKTsKKwordWludDMyX3QKK2JhdGNoX2NvcHko c3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwgY29uc3Qgdm9pZCAqcHRyLCB1aW50MzJf dCBzaXplLCB1aW50MzJfdCBhbGlnbik7CisKK3ZvaWQKK2dlbjdfcmVuZGVyX2ZsdXNoKHN0cnVj dCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsIHVpbnQzMl90IGJhdGNoX2VuZCk7CisKK3VpbnQz Ml90CitnZW43X2ZpbGxfY3VyYmVfYnVmZmVyX2RhdGEoc3RydWN0IGludGVsX2JhdGNoYnVmZmVy ICpiYXRjaCwKKwkJCXVpbnQ4X3QgY29sb3IpOworCit1aW50MzJfdAorZ2VuN19maWxsX3N1cmZh Y2Vfc3RhdGUoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKKwkJCXN0cnVjdCBpZ3Rf YnVmICpidWYsCisJCQl1aW50MzJfdCBmb3JtYXQsCisJCQlpbnQgaXNfZHN0KTsKKwordWludDMy X3QKK2dlbjdfZmlsbF9iaW5kaW5nX3RhYmxlKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0 Y2gsCisJCQlzdHJ1Y3QgaWd0X2J1ZiAqZHN0KTsKKwordWludDMyX3QKK2dlbjdfZmlsbF9tZWRp YV9rZXJuZWwoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKKwkJY29uc3QgdWludDMy X3Qga2VybmVsW11bNF0sCisJCXNpemVfdCBzaXplKTsKKwordWludDMyX3QKK2dlbjhfZmlsbF9t ZWRpYV9rZXJuZWwoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKKwkJY29uc3QgdWlu dDMyX3Qga2VybmVsW11bNF0sCisJCXNpemVfdCBzaXplKTsKKwordWludDMyX3QKK2dlbjdfZmls bF9pbnRlcmZhY2VfZGVzY3JpcHRvcihzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLCBz dHJ1Y3QgaWd0X2J1ZiAqZHN0LAorCQkJICAgICAgIGNvbnN0IHVpbnQzMl90IGtlcm5lbFtdWzRd LCBzaXplX3Qgc2l6ZSk7CisKK3ZvaWQKK2dlbjdfZW1pdF9zdGF0ZV9iYXNlX2FkZHJlc3Moc3Ry dWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCk7CisKK3ZvaWQKK2dlbjdfZW1pdF92ZmVfc3Rh dGUoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCk7CisKK3ZvaWQKK2dlbjdfZW1pdF92 ZmVfc3RhdGVfZ3BncHUoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCk7CisKK3ZvaWQK K2dlbjdfZW1pdF9jdXJiZV9sb2FkKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsIHVp bnQzMl90IGN1cmJlX2J1ZmZlcik7CisKK3ZvaWQKK2dlbjdfZW1pdF9pbnRlcmZhY2VfZGVzY3Jp cHRvcl9sb2FkKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsIHVpbnQzMl90IGludGVy ZmFjZV9kZXNjcmlwdG9yKTsKKwordm9pZAorZ2VuN19lbWl0X21lZGlhX29iamVjdHMoc3RydWN0 IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKKwkJCXVuc2lnbmVkIHgsIHVuc2lnbmVkIHksCisJ CQl1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KTsKKwordm9pZAorZ2VuN19lbWl0X2dw Z3B1X3dhbGsoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKKwkJICAgICB1bnNpZ25l ZCB4LCB1bnNpZ25lZCB5LAorCQkgICAgIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQp OworCit2b2lkCitnZW44X3JlbmRlcl9mbHVzaChzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJh dGNoLCB1aW50MzJfdCBiYXRjaF9lbmQpOworCit1aW50MzJfdAorZ2VuOF9maWxsX2N1cmJlX2J1 ZmZlcl9kYXRhKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCisJCQl1aW50OF90IGNv bG9yKTsKKwordWludDMyX3QKK2dlbjhfZmlsbF9zdXJmYWNlX3N0YXRlKHN0cnVjdCBpbnRlbF9i YXRjaGJ1ZmZlciAqYmF0Y2gsCisJCQlzdHJ1Y3QgaWd0X2J1ZiAqYnVmLAorCQkJdWludDMyX3Qg Zm9ybWF0LAorCQkJaW50IGlzX2RzdCk7CisKK3VpbnQzMl90CitnZW44X2ZpbGxfYmluZGluZ190 YWJsZShzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAorCQkJc3RydWN0IGlndF9idWYg KmRzdCk7CisKK3VpbnQzMl90CitnZW44X2ZpbGxfaW50ZXJmYWNlX2Rlc2NyaXB0b3Ioc3RydWN0 IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwgc3RydWN0IGlndF9idWYgKmRzdCwgIGNvbnN0IHVp bnQzMl90IGtlcm5lbFtdWzRdLCBzaXplX3Qgc2l6ZSk7CisKK3ZvaWQKK2dlbjhfZW1pdF9zdGF0 ZV9iYXNlX2FkZHJlc3Moc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCk7CisKK3ZvaWQK K2dlbjhfZW1pdF92ZmVfc3RhdGUoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCk7CisK K3ZvaWQKK2dlbjhfZW1pdF92ZmVfc3RhdGVfZ3BncHUoc3RydWN0IGludGVsX2JhdGNoYnVmZmVy ICpiYXRjaCk7CisKK3ZvaWQKK2dlbjhfZW1pdF9jdXJiZV9sb2FkKHN0cnVjdCBpbnRlbF9iYXRj aGJ1ZmZlciAqYmF0Y2gsIHVpbnQzMl90IGN1cmJlX2J1ZmZlcik7CisKK3ZvaWQKK2dlbjhfZW1p dF9pbnRlcmZhY2VfZGVzY3JpcHRvcl9sb2FkKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0 Y2gsIHVpbnQzMl90IGludGVyZmFjZV9kZXNjcmlwdG9yKTsKKwordm9pZAorZ2VuOF9lbWl0X21l ZGlhX3N0YXRlX2ZsdXNoKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gpOworCit2b2lk CitnZW44X2VtaXRfbWVkaWFfb2JqZWN0cyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNo LAorCQkJdW5zaWduZWQgeCwgdW5zaWduZWQgeSwKKwkJCXVuc2lnbmVkIHdpZHRoLCB1bnNpZ25l ZCBoZWlnaHQpOworCit2b2lkCitnZW44bHBfZW1pdF9tZWRpYV9vYmplY3RzKHN0cnVjdCBpbnRl bF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCisJCQl1bnNpZ25lZCB4LCB1bnNpZ25lZCB5LAorCQkJdW5z aWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCk7CisKK3ZvaWQKK2dlbjhfZW1pdF9ncGdwdV93 YWxrKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCisJCSAgICAgdW5zaWduZWQgeCwg dW5zaWduZWQgeSwKKwkJICAgICB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KTsKKwor dm9pZAorZ2VuOV9lbWl0X3N0YXRlX2Jhc2VfYWRkcmVzcyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZm ZXIgKmJhdGNoKTsKZGlmZiAtLWdpdCBhL2xpYi9tZWRpYV9maWxsX2dlbjcuYyBiL2xpYi9tZWRp YV9maWxsX2dlbjcuYwppbmRleCA2ZmI0NDc5OC4uYzk3NTU1YTYgMTAwNjQ0Ci0tLSBhL2xpYi9t ZWRpYV9maWxsX2dlbjcuYworKysgYi9saWIvbWVkaWFfZmlsbF9nZW43LmMKQEAgLTUsNyArNSw3 IEBACiAjaW5jbHVkZSAiZ2VuN19tZWRpYS5oIgogI2luY2x1ZGUgImludGVsX3JlZy5oIgogI2lu Y2x1ZGUgImRybXRlc3QuaCIKLQorI2luY2x1ZGUgImdwdV9maWxsLmgiCiAjaW5jbHVkZSA8YXNz ZXJ0Lmg+CiAKIHN0YXRpYyBjb25zdCB1aW50MzJfdCBtZWRpYV9rZXJuZWxbXVs0XSA9IHsKQEAg LTIyLDI3NSArMjIsNiBAQCBzdGF0aWMgY29uc3QgdWludDMyX3QgbWVkaWFfa2VybmVsW11bNF0g PSB7CiAJeyAweDA3ODAwMDMxLCAweDIwMDAxY2E4LCAweDAwMDAwZTAwLCAweDgyMDAwMDEwIH0s CiB9OwogCi1zdGF0aWMgdWludDMyX3QKLWJhdGNoX3VzZWQoc3RydWN0IGludGVsX2JhdGNoYnVm ZmVyICpiYXRjaCkKLXsKLQlyZXR1cm4gYmF0Y2gtPnB0ciAtIGJhdGNoLT5idWZmZXI7Ci19Ci0K LXN0YXRpYyB1aW50MzJfdAotYmF0Y2hfYWxpZ24oc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpi YXRjaCwgdWludDMyX3QgYWxpZ24pCi17Ci0JdWludDMyX3Qgb2Zmc2V0ID0gYmF0Y2hfdXNlZChi YXRjaCk7Ci0Jb2Zmc2V0ID0gQUxJR04ob2Zmc2V0LCBhbGlnbik7Ci0JYmF0Y2gtPnB0ciA9IGJh dGNoLT5idWZmZXIgKyBvZmZzZXQ7Ci0JcmV0dXJuIG9mZnNldDsKLX0KLQotc3RhdGljIHZvaWQg KgotYmF0Y2hfYWxsb2Moc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwgdWludDMyX3Qg c2l6ZSwgdWludDMyX3QgYWxpZ24pCi17Ci0JdWludDMyX3Qgb2Zmc2V0ID0gYmF0Y2hfYWxpZ24o YmF0Y2gsIGFsaWduKTsKLQliYXRjaC0+cHRyICs9IHNpemU7Ci0JcmV0dXJuIG1lbXNldChiYXRj aC0+YnVmZmVyICsgb2Zmc2V0LCAwLCBzaXplKTsKLX0KLQotc3RhdGljIHVpbnQzMl90Ci1iYXRj aF9vZmZzZXQoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwgdm9pZCAqcHRyKQotewot CXJldHVybiAodWludDhfdCAqKXB0ciAtIGJhdGNoLT5idWZmZXI7Ci19Ci0KLXN0YXRpYyB1aW50 MzJfdAotYmF0Y2hfY29weShzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLCBjb25zdCB2 b2lkICpwdHIsIHVpbnQzMl90IHNpemUsIHVpbnQzMl90IGFsaWduKQotewotCXJldHVybiBiYXRj aF9vZmZzZXQoYmF0Y2gsIG1lbWNweShiYXRjaF9hbGxvYyhiYXRjaCwgc2l6ZSwgYWxpZ24pLCBw dHIsIHNpemUpKTsKLX0KLQotc3RhdGljIHZvaWQKLWdlbjdfcmVuZGVyX2ZsdXNoKHN0cnVjdCBp bnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsIHVpbnQzMl90IGJhdGNoX2VuZCkKLXsKLQlpbnQgcmV0 OwotCi0JcmV0ID0gZHJtX2ludGVsX2JvX3N1YmRhdGEoYmF0Y2gtPmJvLCAwLCA0MDk2LCBiYXRj aC0+YnVmZmVyKTsKLQlpZiAocmV0ID09IDApCi0JCXJldCA9IGRybV9pbnRlbF9ib19tcmJfZXhl YyhiYXRjaC0+Ym8sIGJhdGNoX2VuZCwKLQkJCQkJTlVMTCwgMCwgMCwgMCk7Ci0JaWd0X2Fzc2Vy dChyZXQgPT0gMCk7Ci19Ci0KLXN0YXRpYyB1aW50MzJfdAotZ2VuN19maWxsX2N1cmJlX2J1ZmZl cl9kYXRhKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCi0JCQl1aW50OF90IGNvbG9y KQotewotCXVpbnQ4X3QgKmN1cmJlX2J1ZmZlcjsKLQl1aW50MzJfdCBvZmZzZXQ7Ci0KLQljdXJi ZV9idWZmZXIgPSBiYXRjaF9hbGxvYyhiYXRjaCwgc2l6ZW9mKHVpbnQzMl90KSAqIDgsIDY0KTsK LQlvZmZzZXQgPSBiYXRjaF9vZmZzZXQoYmF0Y2gsIGN1cmJlX2J1ZmZlcik7Ci0JKmN1cmJlX2J1 ZmZlciA9IGNvbG9yOwotCi0JcmV0dXJuIG9mZnNldDsKLX0KLQotc3RhdGljIHVpbnQzMl90Ci1n ZW43X2ZpbGxfc3VyZmFjZV9zdGF0ZShzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAot CQkJc3RydWN0IGlndF9idWYgKmJ1ZiwKLQkJCXVpbnQzMl90IGZvcm1hdCwKLQkJCWludCBpc19k c3QpCi17Ci0Jc3RydWN0IGdlbjdfc3VyZmFjZV9zdGF0ZSAqc3M7Ci0JdWludDMyX3Qgd3JpdGVf ZG9tYWluLCByZWFkX2RvbWFpbiwgb2Zmc2V0OwotCWludCByZXQ7Ci0KLQlpZiAoaXNfZHN0KSB7 Ci0JCXdyaXRlX2RvbWFpbiA9IHJlYWRfZG9tYWluID0gSTkxNV9HRU1fRE9NQUlOX1JFTkRFUjsK LQl9IGVsc2UgewotCQl3cml0ZV9kb21haW4gPSAwOwotCQlyZWFkX2RvbWFpbiA9IEk5MTVfR0VN X0RPTUFJTl9TQU1QTEVSOwotCX0KLQotCXNzID0gYmF0Y2hfYWxsb2MoYmF0Y2gsIHNpemVvZigq c3MpLCA2NCk7Ci0Jb2Zmc2V0ID0gYmF0Y2hfb2Zmc2V0KGJhdGNoLCBzcyk7Ci0KLQlzcy0+c3Mw LnN1cmZhY2VfdHlwZSA9IEdFTjdfU1VSRkFDRV8yRDsKLQlzcy0+c3MwLnN1cmZhY2VfZm9ybWF0 ID0gZm9ybWF0OwotCXNzLT5zczAucmVuZGVyX2NhY2hlX3JlYWRfd3JpdGUgPSAxOwotCi0JaWYg KGJ1Zi0+dGlsaW5nID09IEk5MTVfVElMSU5HX1gpCi0JCXNzLT5zczAudGlsZWRfbW9kZSA9IDI7 Ci0JZWxzZSBpZiAoYnVmLT50aWxpbmcgPT0gSTkxNV9USUxJTkdfWSkKLQkJc3MtPnNzMC50aWxl ZF9tb2RlID0gMzsKLQotCXNzLT5zczEuYmFzZV9hZGRyID0gYnVmLT5iby0+b2Zmc2V0OwotCXJl dCA9IGRybV9pbnRlbF9ib19lbWl0X3JlbG9jKGJhdGNoLT5ibywKLQkJCQliYXRjaF9vZmZzZXQo YmF0Y2gsIHNzKSArIDQsCi0JCQkJYnVmLT5ibywgMCwKLQkJCQlyZWFkX2RvbWFpbiwgd3JpdGVf ZG9tYWluKTsKLQlpZ3RfYXNzZXJ0KHJldCA9PSAwKTsKLQotCXNzLT5zczIuaGVpZ2h0ID0gaWd0 X2J1Zl9oZWlnaHQoYnVmKSAtIDE7Ci0Jc3MtPnNzMi53aWR0aCAgPSBpZ3RfYnVmX3dpZHRoKGJ1 ZikgLSAxOwotCi0Jc3MtPnNzMy5waXRjaCAgPSBidWYtPnN0cmlkZSAtIDE7Ci0KLQlzcy0+c3M3 LnNoYWRlcl9jaGFuZWxfc2VsZWN0X3IgPSA0OwotCXNzLT5zczcuc2hhZGVyX2NoYW5lbF9zZWxl Y3RfZyA9IDU7Ci0Jc3MtPnNzNy5zaGFkZXJfY2hhbmVsX3NlbGVjdF9iID0gNjsKLQlzcy0+c3M3 LnNoYWRlcl9jaGFuZWxfc2VsZWN0X2EgPSA3OwotCi0JcmV0dXJuIG9mZnNldDsKLX0KLQotc3Rh dGljIHVpbnQzMl90Ci1nZW43X2ZpbGxfYmluZGluZ190YWJsZShzdHJ1Y3QgaW50ZWxfYmF0Y2hi dWZmZXIgKmJhdGNoLAotCQkJc3RydWN0IGlndF9idWYgKmRzdCkKLXsKLQl1aW50MzJfdCAqYmlu ZGluZ190YWJsZSwgb2Zmc2V0OwotCi0JYmluZGluZ190YWJsZSA9IGJhdGNoX2FsbG9jKGJhdGNo LCAzMiwgNjQpOwotCW9mZnNldCA9IGJhdGNoX29mZnNldChiYXRjaCwgYmluZGluZ190YWJsZSk7 Ci0KLQliaW5kaW5nX3RhYmxlWzBdID0gZ2VuN19maWxsX3N1cmZhY2Vfc3RhdGUoYmF0Y2gsIGRz dCwgR0VON19TVVJGQUNFRk9STUFUX1I4X1VOT1JNLCAxKTsKLQotCXJldHVybiBvZmZzZXQ7Ci19 Ci0KLXN0YXRpYyB1aW50MzJfdAotZ2VuN19maWxsX21lZGlhX2tlcm5lbChzdHJ1Y3QgaW50ZWxf YmF0Y2hidWZmZXIgKmJhdGNoLAotCQljb25zdCB1aW50MzJfdCBrZXJuZWxbXVs0XSwKLQkJc2l6 ZV90IHNpemUpCi17Ci0JdWludDMyX3Qgb2Zmc2V0OwotCi0Jb2Zmc2V0ID0gYmF0Y2hfY29weShi YXRjaCwga2VybmVsLCBzaXplLCA2NCk7Ci0KLQlyZXR1cm4gb2Zmc2V0OwotfQotCi1zdGF0aWMg dWludDMyX3QKLWdlbjdfZmlsbF9pbnRlcmZhY2VfZGVzY3JpcHRvcihzdHJ1Y3QgaW50ZWxfYmF0 Y2hidWZmZXIgKmJhdGNoLCBzdHJ1Y3QgaWd0X2J1ZiAqZHN0LAotCQkJICAgICAgIGNvbnN0IHVp bnQzMl90IGtlcm5lbFtdWzRdLCBzaXplX3Qgc2l6ZSkKLXsKLQlzdHJ1Y3QgZ2VuN19pbnRlcmZh Y2VfZGVzY3JpcHRvcl9kYXRhICppZGQ7Ci0JdWludDMyX3Qgb2Zmc2V0OwotCXVpbnQzMl90IGJp bmRpbmdfdGFibGVfb2Zmc2V0LCBrZXJuZWxfb2Zmc2V0OwotCi0JYmluZGluZ190YWJsZV9vZmZz ZXQgPSBnZW43X2ZpbGxfYmluZGluZ190YWJsZShiYXRjaCwgZHN0KTsKLQlrZXJuZWxfb2Zmc2V0 ID0gZ2VuN19maWxsX21lZGlhX2tlcm5lbChiYXRjaCwga2VybmVsLCBzaXplKTsKLQotCWlkZCA9 IGJhdGNoX2FsbG9jKGJhdGNoLCBzaXplb2YoKmlkZCksIDY0KTsKLQlvZmZzZXQgPSBiYXRjaF9v ZmZzZXQoYmF0Y2gsIGlkZCk7Ci0KLQlpZGQtPmRlc2MwLmtlcm5lbF9zdGFydF9wb2ludGVyID0g KGtlcm5lbF9vZmZzZXQgPj4gNik7Ci0KLQlpZGQtPmRlc2MxLnNpbmdsZV9wcm9ncmFtX2Zsb3cg PSAxOwotCWlkZC0+ZGVzYzEuZmxvYXRpbmdfcG9pbnRfbW9kZSA9IEdFTjdfRkxPQVRJTkdfUE9J TlRfSUVFRV83NTQ7Ci0KLQlpZGQtPmRlc2MyLnNhbXBsZXJfY291bnQgPSAwOyAgICAgIC8qIDAg c2FtcGxlcnMgdXNlZCAqLwotCWlkZC0+ZGVzYzIuc2FtcGxlcl9zdGF0ZV9wb2ludGVyID0gMDsK LQotCWlkZC0+ZGVzYzMuYmluZGluZ190YWJsZV9lbnRyeV9jb3VudCA9IDA7Ci0JaWRkLT5kZXNj My5iaW5kaW5nX3RhYmxlX3BvaW50ZXIgPSAoYmluZGluZ190YWJsZV9vZmZzZXQgPj4gNSk7Ci0K LQlpZGQtPmRlc2M0LmNvbnN0YW50X3VyYl9lbnRyeV9yZWFkX29mZnNldCA9IDA7Ci0JaWRkLT5k ZXNjNC5jb25zdGFudF91cmJfZW50cnlfcmVhZF9sZW5ndGggPSAxOyAvKiBncmYgMSAqLwotCi0J cmV0dXJuIG9mZnNldDsKLX0KLQotc3RhdGljIHZvaWQKLWdlbjdfZW1pdF9zdGF0ZV9iYXNlX2Fk ZHJlc3Moc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCkKLXsKLQlPVVRfQkFUQ0goR0VO N19TVEFURV9CQVNFX0FERFJFU1MgfCAoMTAgLSAyKSk7Ci0KLQkvKiBnZW5lcmFsICovCi0JT1VU X0JBVENIKDApOwotCi0JLyogc3VyZmFjZSAqLwotCU9VVF9SRUxPQyhiYXRjaC0+Ym8sIEk5MTVf R0VNX0RPTUFJTl9JTlNUUlVDVElPTiwgMCwgQkFTRV9BRERSRVNTX01PRElGWSk7Ci0KLQkvKiBk eW5hbWljICovCi0JT1VUX1JFTE9DKGJhdGNoLT5ibywgSTkxNV9HRU1fRE9NQUlOX0lOU1RSVUNU SU9OLCAwLCBCQVNFX0FERFJFU1NfTU9ESUZZKTsKLQotCS8qIGluZGlyZWN0ICovCi0JT1VUX0JB VENIKDApOwotCi0JLyogaW5zdHJ1Y3Rpb24gKi8KLQlPVVRfUkVMT0MoYmF0Y2gtPmJvLCBJOTE1 X0dFTV9ET01BSU5fSU5TVFJVQ1RJT04sIDAsIEJBU0VfQUREUkVTU19NT0RJRlkpOwotCi0JLyog Z2VuZXJhbC9keW5hbWljL2luZGlyZWN0L2luc3RydWN0aW9uIGFjY2VzcyBCb3VuZCAqLwotCU9V VF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCB8IEJBU0VfQUREUkVTU19NT0RJRlkpOwotCU9VVF9C QVRDSCgwKTsKLQlPVVRfQkFUQ0goMCB8IEJBU0VfQUREUkVTU19NT0RJRlkpOwotfQotCi1zdGF0 aWMgdm9pZAotZ2VuN19lbWl0X3ZmZV9zdGF0ZShzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJh dGNoKQotewotCU9VVF9CQVRDSChHRU43X01FRElBX1ZGRV9TVEFURSB8ICg4IC0gMikpOwotCi0J Lyogc2NyYXRjaCBidWZmZXIgKi8KLQlPVVRfQkFUQ0goMCk7Ci0KLQkvKiBudW1iZXIgb2YgdGhy ZWFkcyAmIHVyYiBlbnRyaWVzICovCi0JT1VUX0JBVENIKDEgPDwgMTYgfAotCQkyIDw8IDgpOwot Ci0JT1VUX0JBVENIKDApOwotCi0JLyogdXJiIGVudHJ5IHNpemUgJiBjdXJiZSBzaXplICovCi0J T1VUX0JBVENIKDIgPDwgMTYgfCAJLyogaW4gMjU2IGJpdHMgdW5pdCAqLwotCQkyKTsJCS8qIGlu IDI1NiBiaXRzIHVuaXQgKi8KLQotCS8qIHNjb3JlYm9hcmQgKi8KLQlPVVRfQkFUQ0goMCk7Ci0J T1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLX0KLQotc3RhdGljIHZvaWQKLWdlbjdfZW1p dF9jdXJiZV9sb2FkKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsIHVpbnQzMl90IGN1 cmJlX2J1ZmZlcikKLXsKLQlPVVRfQkFUQ0goR0VON19NRURJQV9DVVJCRV9MT0FEIHwgKDQgLSAy KSk7Ci0JT1VUX0JBVENIKDApOwotCS8qIGN1cmJlIHRvdGFsIGRhdGEgbGVuZ3RoICovCi0JT1VU X0JBVENIKDY0KTsKLQkvKiBjdXJiZSBkYXRhIHN0YXJ0IGFkZHJlc3MsIGlzIHJlbGF0aXZlIHRv IHRoZSBkeW5hbWljcyBiYXNlIGFkZHJlc3MgKi8KLQlPVVRfQkFUQ0goY3VyYmVfYnVmZmVyKTsK LX0KLQotc3RhdGljIHZvaWQKLWdlbjdfZW1pdF9pbnRlcmZhY2VfZGVzY3JpcHRvcl9sb2FkKHN0 cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsIHVpbnQzMl90IGludGVyZmFjZV9kZXNjcmlw dG9yKQotewotCU9VVF9CQVRDSChHRU43X01FRElBX0lOVEVSRkFDRV9ERVNDUklQVE9SX0xPQUQg fCAoNCAtIDIpKTsKLQlPVVRfQkFUQ0goMCk7Ci0JLyogaW50ZXJmYWNlIGRlc2NyaXB0b3IgZGF0 YSBsZW5ndGggKi8KLQlPVVRfQkFUQ0goc2l6ZW9mKHN0cnVjdCBnZW43X2ludGVyZmFjZV9kZXNj cmlwdG9yX2RhdGEpKTsKLQkvKiBpbnRlcmZhY2UgZGVzY3JpcHRvciBhZGRyZXNzLCBpcyByZWxh dGl2ZSB0byB0aGUgZHluYW1pY3MgYmFzZSBhZGRyZXNzICovCi0JT1VUX0JBVENIKGludGVyZmFj ZV9kZXNjcmlwdG9yKTsKLX0KLQotc3RhdGljIHZvaWQKLWdlbjdfZW1pdF9tZWRpYV9vYmplY3Rz KHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCi0JCQl1bnNpZ25lZCB4LCB1bnNpZ25l ZCB5LAotCQkJdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCkKLXsKLQlpbnQgaSwgajsK LQotCWZvciAoaSA9IDA7IGkgPCB3aWR0aCAvIDE2OyBpKyspIHsKLQkJZm9yIChqID0gMDsgaiA8 IGhlaWdodCAvIDE2OyBqKyspIHsKLQkJCU9VVF9CQVRDSChHRU43X01FRElBX09CSkVDVCB8ICg4 IC0gMikpOwotCi0JCQkvKiBpbnRlcmZhY2UgZGVzY3JpcHRvciBvZmZzZXQgKi8KLQkJCU9VVF9C QVRDSCgwKTsKLQotCQkJLyogd2l0aG91dCBpbmRpcmVjdCBkYXRhICovCi0JCQlPVVRfQkFUQ0go MCk7Ci0JCQlPVVRfQkFUQ0goMCk7Ci0KLQkJCS8qIHNjb3JlYm9hcmQgKi8KLQkJCU9VVF9CQVRD SCgwKTsKLQkJCU9VVF9CQVRDSCgwKTsKLQotCQkJLyogaW5saW5lIGRhdGEgKHhvZmZzZXQsIHlv ZmZzZXQpICovCi0JCQlPVVRfQkFUQ0goeCArIGkgKiAxNik7Ci0JCQlPVVRfQkFUQ0goeSArIGog KiAxNik7Ci0JCX0KLQl9Ci19Ci0KIC8qCiAgKiBUaGlzIHNldHMgdXAgdGhlIG1lZGlhIHBpcGVs aW5lLAogICoKZGlmZiAtLWdpdCBhL2xpYi9tZWRpYV9maWxsX2dlbjguYyBiL2xpYi9tZWRpYV9m aWxsX2dlbjguYwppbmRleCA0YThmZTVhMi4uNDI3MDk5N2UgMTAwNjQ0Ci0tLSBhL2xpYi9tZWRp YV9maWxsX2dlbjguYworKysgYi9saWIvbWVkaWFfZmlsbF9nZW44LmMKQEAgLTUsNyArNSw3IEBA CiAjaW5jbHVkZSAiZ2VuOF9tZWRpYS5oIgogI2luY2x1ZGUgImludGVsX3JlZy5oIgogI2luY2x1 ZGUgImRybXRlc3QuaCIKLQorI2luY2x1ZGUgImdwdV9maWxsLmgiCiAjaW5jbHVkZSA8YXNzZXJ0 Lmg+CiAKIApAQCAtMjMsMjkzICsyMyw3IEBAIHN0YXRpYyBjb25zdCB1aW50MzJfdCBtZWRpYV9r ZXJuZWxbXVs0XSA9IHsKIAl7IDB4MDc4MDAwMzEsIDB4MjAwMDBhNDAsIDB4MGUwMDBlMDAsIDB4 ODIwMDAwMTAgfSwKIH07CiAKLXN0YXRpYyB1aW50MzJfdAotYmF0Y2hfdXNlZChzdHJ1Y3QgaW50 ZWxfYmF0Y2hidWZmZXIgKmJhdGNoKQotewotCXJldHVybiBiYXRjaC0+cHRyIC0gYmF0Y2gtPmJ1 ZmZlcjsKLX0KLQotc3RhdGljIHVpbnQzMl90Ci1iYXRjaF9hbGlnbihzdHJ1Y3QgaW50ZWxfYmF0 Y2hidWZmZXIgKmJhdGNoLCB1aW50MzJfdCBhbGlnbikKLXsKLQl1aW50MzJfdCBvZmZzZXQgPSBi YXRjaF91c2VkKGJhdGNoKTsKLQlvZmZzZXQgPSBBTElHTihvZmZzZXQsIGFsaWduKTsKLQliYXRj aC0+cHRyID0gYmF0Y2gtPmJ1ZmZlciArIG9mZnNldDsKLQlyZXR1cm4gb2Zmc2V0OwotfQotCi1z dGF0aWMgdm9pZCAqCi1iYXRjaF9hbGxvYyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNo LCB1aW50MzJfdCBzaXplLCB1aW50MzJfdCBhbGlnbikKLXsKLQl1aW50MzJfdCBvZmZzZXQgPSBi YXRjaF9hbGlnbihiYXRjaCwgYWxpZ24pOwotCWJhdGNoLT5wdHIgKz0gc2l6ZTsKLQlyZXR1cm4g bWVtc2V0KGJhdGNoLT5idWZmZXIgKyBvZmZzZXQsIDAsIHNpemUpOwotfQotCi1zdGF0aWMgdWlu dDMyX3QKLWJhdGNoX29mZnNldChzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLCB2b2lk ICpwdHIpCi17Ci0JcmV0dXJuICh1aW50OF90ICopcHRyIC0gYmF0Y2gtPmJ1ZmZlcjsKLX0KLQot c3RhdGljIHVpbnQzMl90Ci1iYXRjaF9jb3B5KHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0 Y2gsIGNvbnN0IHZvaWQgKnB0ciwgdWludDMyX3Qgc2l6ZSwgdWludDMyX3QgYWxpZ24pCi17Ci0J cmV0dXJuIGJhdGNoX29mZnNldChiYXRjaCwgbWVtY3B5KGJhdGNoX2FsbG9jKGJhdGNoLCBzaXpl LCBhbGlnbiksIHB0ciwgc2l6ZSkpOwotfQotCi1zdGF0aWMgdm9pZAotZ2VuOF9yZW5kZXJfZmx1 c2goc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwgdWludDMyX3QgYmF0Y2hfZW5kKQot ewotCWludCByZXQ7Ci0KLQlyZXQgPSBkcm1faW50ZWxfYm9fc3ViZGF0YShiYXRjaC0+Ym8sIDAs IDQwOTYsIGJhdGNoLT5idWZmZXIpOwotCWlmIChyZXQgPT0gMCkKLQkJcmV0ID0gZHJtX2ludGVs X2JvX21yYl9leGVjKGJhdGNoLT5ibywgYmF0Y2hfZW5kLAotCQkJCQlOVUxMLCAwLCAwLCAwKTsK LQlpZ3RfYXNzZXJ0KHJldCA9PSAwKTsKLX0KLQotc3RhdGljIHVpbnQzMl90Ci1nZW44X2ZpbGxf Y3VyYmVfYnVmZmVyX2RhdGEoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKLQkJCXVp bnQ4X3QgY29sb3IpCi17Ci0JdWludDhfdCAqY3VyYmVfYnVmZmVyOwotCXVpbnQzMl90IG9mZnNl dDsKLQotCWN1cmJlX2J1ZmZlciA9IGJhdGNoX2FsbG9jKGJhdGNoLCBzaXplb2YodWludDMyX3Qp ICogOCwgNjQpOwotCW9mZnNldCA9IGJhdGNoX29mZnNldChiYXRjaCwgY3VyYmVfYnVmZmVyKTsK LQkqY3VyYmVfYnVmZmVyID0gY29sb3I7Ci0KLQlyZXR1cm4gb2Zmc2V0OwotfQotCi1zdGF0aWMg dWludDMyX3QKLWdlbjhfZmlsbF9zdXJmYWNlX3N0YXRlKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZl ciAqYmF0Y2gsCi0JCQlzdHJ1Y3QgaWd0X2J1ZiAqYnVmLAotCQkJdWludDMyX3QgZm9ybWF0LAot CQkJaW50IGlzX2RzdCkKLXsKLQlzdHJ1Y3QgZ2VuOF9zdXJmYWNlX3N0YXRlICpzczsKLQl1aW50 MzJfdCB3cml0ZV9kb21haW4sIHJlYWRfZG9tYWluLCBvZmZzZXQ7Ci0JaW50IHJldDsKLQotCWlm IChpc19kc3QpIHsKLQkJd3JpdGVfZG9tYWluID0gcmVhZF9kb21haW4gPSBJOTE1X0dFTV9ET01B SU5fUkVOREVSOwotCX0gZWxzZSB7Ci0JCXdyaXRlX2RvbWFpbiA9IDA7Ci0JCXJlYWRfZG9tYWlu ID0gSTkxNV9HRU1fRE9NQUlOX1NBTVBMRVI7Ci0JfQotCi0Jc3MgPSBiYXRjaF9hbGxvYyhiYXRj aCwgc2l6ZW9mKCpzcyksIDY0KTsKLQlvZmZzZXQgPSBiYXRjaF9vZmZzZXQoYmF0Y2gsIHNzKTsK LQotCXNzLT5zczAuc3VyZmFjZV90eXBlID0gR0VOOF9TVVJGQUNFXzJEOwotCXNzLT5zczAuc3Vy ZmFjZV9mb3JtYXQgPSBmb3JtYXQ7Ci0Jc3MtPnNzMC5yZW5kZXJfY2FjaGVfcmVhZF93cml0ZSA9 IDE7Ci0Jc3MtPnNzMC52ZXJ0aWNhbF9hbGlnbm1lbnQgPSAxOyAvKiBhbGlnbiA0ICovCi0Jc3Mt PnNzMC5ob3Jpem9udGFsX2FsaWdubWVudCA9IDE7IC8qIGFsaWduIDQgKi8KLQotCWlmIChidWYt PnRpbGluZyA9PSBJOTE1X1RJTElOR19YKQotCQlzcy0+c3MwLnRpbGVkX21vZGUgPSAyOwotCWVs c2UgaWYgKGJ1Zi0+dGlsaW5nID09IEk5MTVfVElMSU5HX1kpCi0JCXNzLT5zczAudGlsZWRfbW9k ZSA9IDM7Ci0KLQlzcy0+c3M4LmJhc2VfYWRkciA9IGJ1Zi0+Ym8tPm9mZnNldDsKLQotCXJldCA9 IGRybV9pbnRlbF9ib19lbWl0X3JlbG9jKGJhdGNoLT5ibywKLQkJCQliYXRjaF9vZmZzZXQoYmF0 Y2gsIHNzKSArIDggKiA0LAotCQkJCWJ1Zi0+Ym8sIDAsCi0JCQkJcmVhZF9kb21haW4sIHdyaXRl X2RvbWFpbik7Ci0JaWd0X2Fzc2VydChyZXQgPT0gMCk7Ci0KLQlzcy0+c3MyLmhlaWdodCA9IGln dF9idWZfaGVpZ2h0KGJ1ZikgLSAxOwotCXNzLT5zczIud2lkdGggID0gaWd0X2J1Zl93aWR0aChi dWYpIC0gMTsKLQlzcy0+c3MzLnBpdGNoICA9IGJ1Zi0+c3RyaWRlIC0gMTsKLQotCXNzLT5zczcu c2hhZGVyX2NoYW5lbF9zZWxlY3RfciA9IDQ7Ci0Jc3MtPnNzNy5zaGFkZXJfY2hhbmVsX3NlbGVj dF9nID0gNTsKLQlzcy0+c3M3LnNoYWRlcl9jaGFuZWxfc2VsZWN0X2IgPSA2OwotCXNzLT5zczcu c2hhZGVyX2NoYW5lbF9zZWxlY3RfYSA9IDc7Ci0KLQlyZXR1cm4gb2Zmc2V0OwotfQotCi1zdGF0 aWMgdWludDMyX3QKLWdlbjhfZmlsbF9iaW5kaW5nX3RhYmxlKHN0cnVjdCBpbnRlbF9iYXRjaGJ1 ZmZlciAqYmF0Y2gsCi0JCQlzdHJ1Y3QgaWd0X2J1ZiAqZHN0KQotewotCXVpbnQzMl90ICpiaW5k aW5nX3RhYmxlLCBvZmZzZXQ7Ci0KLQliaW5kaW5nX3RhYmxlID0gYmF0Y2hfYWxsb2MoYmF0Y2gs IDMyLCA2NCk7Ci0Jb2Zmc2V0ID0gYmF0Y2hfb2Zmc2V0KGJhdGNoLCBiaW5kaW5nX3RhYmxlKTsK LQotCWJpbmRpbmdfdGFibGVbMF0gPSBnZW44X2ZpbGxfc3VyZmFjZV9zdGF0ZShiYXRjaCwgZHN0 LCBHRU44X1NVUkZBQ0VGT1JNQVRfUjhfVU5PUk0sIDEpOwotCi0JcmV0dXJuIG9mZnNldDsKLX0K LQotc3RhdGljIHVpbnQzMl90Ci1nZW44X2ZpbGxfbWVkaWFfa2VybmVsKHN0cnVjdCBpbnRlbF9i YXRjaGJ1ZmZlciAqYmF0Y2gsCi0JCWNvbnN0IHVpbnQzMl90IGtlcm5lbFtdWzRdLAotCQlzaXpl X3Qgc2l6ZSkKLXsKLQl1aW50MzJfdCBvZmZzZXQ7Ci0KLQlvZmZzZXQgPSBiYXRjaF9jb3B5KGJh dGNoLCBrZXJuZWwsIHNpemUsIDY0KTsKLQotCXJldHVybiBvZmZzZXQ7Ci19Ci0KLXN0YXRpYyB1 aW50MzJfdAotZ2VuOF9maWxsX2ludGVyZmFjZV9kZXNjcmlwdG9yKHN0cnVjdCBpbnRlbF9iYXRj aGJ1ZmZlciAqYmF0Y2gsIHN0cnVjdCBpZ3RfYnVmICpkc3QpCi17Ci0Jc3RydWN0IGdlbjhfaW50 ZXJmYWNlX2Rlc2NyaXB0b3JfZGF0YSAqaWRkOwotCXVpbnQzMl90IG9mZnNldDsKLQl1aW50MzJf dCBiaW5kaW5nX3RhYmxlX29mZnNldCwga2VybmVsX29mZnNldDsKLQotCWJpbmRpbmdfdGFibGVf b2Zmc2V0ID0gZ2VuOF9maWxsX2JpbmRpbmdfdGFibGUoYmF0Y2gsIGRzdCk7Ci0Ja2VybmVsX29m ZnNldCA9IGdlbjhfZmlsbF9tZWRpYV9rZXJuZWwoYmF0Y2gsIG1lZGlhX2tlcm5lbCwgc2l6ZW9m KG1lZGlhX2tlcm5lbCkpOwotCi0JaWRkID0gYmF0Y2hfYWxsb2MoYmF0Y2gsIHNpemVvZigqaWRk KSwgNjQpOwotCW9mZnNldCA9IGJhdGNoX29mZnNldChiYXRjaCwgaWRkKTsKLQotCWlkZC0+ZGVz YzAua2VybmVsX3N0YXJ0X3BvaW50ZXIgPSAoa2VybmVsX29mZnNldCA+PiA2KTsKLQotCWlkZC0+ ZGVzYzIuc2luZ2xlX3Byb2dyYW1fZmxvdyA9IDE7Ci0JaWRkLT5kZXNjMi5mbG9hdGluZ19wb2lu dF9tb2RlID0gR0VOOF9GTE9BVElOR19QT0lOVF9JRUVFXzc1NDsKLQotCWlkZC0+ZGVzYzMuc2Ft cGxlcl9jb3VudCA9IDA7ICAgICAgLyogMCBzYW1wbGVycyB1c2VkICovCi0JaWRkLT5kZXNjMy5z YW1wbGVyX3N0YXRlX3BvaW50ZXIgPSAwOwotCi0JaWRkLT5kZXNjNC5iaW5kaW5nX3RhYmxlX2Vu dHJ5X2NvdW50ID0gMDsKLQlpZGQtPmRlc2M0LmJpbmRpbmdfdGFibGVfcG9pbnRlciA9IChiaW5k aW5nX3RhYmxlX29mZnNldCA+PiA1KTsKLQotCWlkZC0+ZGVzYzUuY29uc3RhbnRfdXJiX2VudHJ5 X3JlYWRfb2Zmc2V0ID0gMDsKLQlpZGQtPmRlc2M1LmNvbnN0YW50X3VyYl9lbnRyeV9yZWFkX2xl bmd0aCA9IDE7IC8qIGdyZiAxICovCi0KLQlyZXR1cm4gb2Zmc2V0OwotfQotCi1zdGF0aWMgdm9p ZAotZ2VuOF9lbWl0X3N0YXRlX2Jhc2VfYWRkcmVzcyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIg KmJhdGNoKQotewotCU9VVF9CQVRDSChHRU44X1NUQVRFX0JBU0VfQUREUkVTUyB8ICgxNiAtIDIp KTsKLQotCS8qIGdlbmVyYWwgKi8KLQlPVVRfQkFUQ0goMCB8IEJBU0VfQUREUkVTU19NT0RJRlkp OwotCU9VVF9CQVRDSCgwKTsKLQotCS8qIHN0YXRlbGVzcyBkYXRhIHBvcnQgKi8KLQlPVVRfQkFU Q0goMCB8IEJBU0VfQUREUkVTU19NT0RJRlkpOwotCi0JLyogc3VyZmFjZSAqLwotCU9VVF9SRUxP QyhiYXRjaC0+Ym8sIEk5MTVfR0VNX0RPTUFJTl9TQU1QTEVSLCAwLCBCQVNFX0FERFJFU1NfTU9E SUZZKTsKLQotCS8qIGR5bmFtaWMgKi8KLQlPVVRfUkVMT0MoYmF0Y2gtPmJvLCBJOTE1X0dFTV9E T01BSU5fUkVOREVSIHwgSTkxNV9HRU1fRE9NQUlOX0lOU1RSVUNUSU9OLAotCQkwLCBCQVNFX0FE RFJFU1NfTU9ESUZZKTsKLQotCS8qIGluZGlyZWN0ICovCi0JT1VUX0JBVENIKDApOwotCU9VVF9C QVRDSCgwKTsKLQotCS8qIGluc3RydWN0aW9uICovCi0JT1VUX1JFTE9DKGJhdGNoLT5ibywgSTkx NV9HRU1fRE9NQUlOX0lOU1RSVUNUSU9OLCAwLCBCQVNFX0FERFJFU1NfTU9ESUZZKTsKLQotCS8q IGdlbmVyYWwgc3RhdGUgYnVmZmVyIHNpemUgKi8KLQlPVVRfQkFUQ0goMHhmZmZmZjAwMCB8IDEp OwotCS8qIGR5bmFtaWMgc3RhdGUgYnVmZmVyIHNpemUgKi8KLQlPVVRfQkFUQ0goMSA8PCAxMiB8 IDEpOwotCS8qIGluZGlyZWN0IG9iamVjdCBidWZmZXIgc2l6ZSAqLwotCU9VVF9CQVRDSCgweGZm ZmZmMDAwIHwgMSk7Ci0JLyogaW50cnVjdGlvbiBidWZmZXIgc2l6ZSwgbXVzdCBzZXQgbW9kaWZ5 IGVuYWJsZSBiaXQsIG90aGVyd2lzZSBpdCBtYXkgcmVzdWx0IGluIEdQVSBoYW5nICovCi0JT1VU X0JBVENIKDEgPDwgMTIgfCAxKTsKLX0KLQotc3RhdGljIHZvaWQKLWdlbjhfZW1pdF92ZmVfc3Rh dGUoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCkKLXsKLQlPVVRfQkFUQ0goR0VOOF9N RURJQV9WRkVfU1RBVEUgfCAoOSAtIDIpKTsKLQotCS8qIHNjcmF0Y2ggYnVmZmVyICovCi0JT1VU X0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQotCS8qIG51bWJlciBvZiB0aHJlYWRzICYgdXJi IGVudHJpZXMgKi8KLQlPVVRfQkFUQ0goMSA8PCAxNiB8Ci0JCTIgPDwgOCk7Ci0KLQlPVVRfQkFU Q0goMCk7Ci0KLQkvKiB1cmIgZW50cnkgc2l6ZSAmIGN1cmJlIHNpemUgKi8KLQlPVVRfQkFUQ0go MiA8PCAxNiB8Ci0JCTIpOwotCi0JLyogc2NvcmVib2FyZCAqLwotCU9VVF9CQVRDSCgwKTsKLQlP VVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotfQotCi1zdGF0aWMgdm9pZAotZ2VuOF9lbWl0 X2N1cmJlX2xvYWQoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwgdWludDMyX3QgY3Vy YmVfYnVmZmVyKQotewotCU9VVF9CQVRDSChHRU44X01FRElBX0NVUkJFX0xPQUQgfCAoNCAtIDIp KTsKLQlPVVRfQkFUQ0goMCk7Ci0JLyogY3VyYmUgdG90YWwgZGF0YSBsZW5ndGggKi8KLQlPVVRf QkFUQ0goNjQpOwotCS8qIGN1cmJlIGRhdGEgc3RhcnQgYWRkcmVzcywgaXMgcmVsYXRpdmUgdG8g dGhlIGR5bmFtaWNzIGJhc2UgYWRkcmVzcyAqLwotCU9VVF9CQVRDSChjdXJiZV9idWZmZXIpOwot fQogCi1zdGF0aWMgdm9pZAotZ2VuOF9lbWl0X2ludGVyZmFjZV9kZXNjcmlwdG9yX2xvYWQoc3Ry dWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwgdWludDMyX3QgaW50ZXJmYWNlX2Rlc2NyaXB0 b3IpCi17Ci0JT1VUX0JBVENIKEdFTjhfTUVESUFfSU5URVJGQUNFX0RFU0NSSVBUT1JfTE9BRCB8 ICg0IC0gMikpOwotCU9VVF9CQVRDSCgwKTsKLQkvKiBpbnRlcmZhY2UgZGVzY3JpcHRvciBkYXRh IGxlbmd0aCAqLwotCU9VVF9CQVRDSChzaXplb2Yoc3RydWN0IGdlbjhfaW50ZXJmYWNlX2Rlc2Ny aXB0b3JfZGF0YSkpOwotCS8qIGludGVyZmFjZSBkZXNjcmlwdG9yIGFkZHJlc3MsIGlzIHJlbGF0 aXZlIHRvIHRoZSBkeW5hbWljcyBiYXNlIGFkZHJlc3MgKi8KLQlPVVRfQkFUQ0goaW50ZXJmYWNl X2Rlc2NyaXB0b3IpOwotfQotCi1zdGF0aWMgdm9pZAotZ2VuOF9lbWl0X21lZGlhX3N0YXRlX2Zs dXNoKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gpCi17Ci0JT1VUX0JBVENIKEdFTjhf TUVESUFfU1RBVEVfRkxVU0ggfCAoMiAtIDIpKTsKLQlPVVRfQkFUQ0goMCk7Ci19Ci0KLXN0YXRp YyB2b2lkCi1nZW44X2VtaXRfbWVkaWFfb2JqZWN0cyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIg KmJhdGNoLAotCQkJdW5zaWduZWQgeCwgdW5zaWduZWQgeSwKLQkJCXVuc2lnbmVkIHdpZHRoLCB1 bnNpZ25lZCBoZWlnaHQpCi17Ci0JaW50IGksIGo7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgd2lkdGgg LyAxNjsgaSsrKSB7Ci0JCWZvciAoaiA9IDA7IGogPCBoZWlnaHQgLyAxNjsgaisrKSB7Ci0JCQlP VVRfQkFUQ0goR0VOOF9NRURJQV9PQkpFQ1QgfCAoOCAtIDIpKTsKLQotCQkJLyogaW50ZXJmYWNl IGRlc2NyaXB0b3Igb2Zmc2V0ICovCi0JCQlPVVRfQkFUQ0goMCk7Ci0KLQkJCS8qIHdpdGhvdXQg aW5kaXJlY3QgZGF0YSAqLwotCQkJT1VUX0JBVENIKDApOwotCQkJT1VUX0JBVENIKDApOwotCi0J CQkvKiBzY29yZWJvYXJkICovCi0JCQlPVVRfQkFUQ0goMCk7Ci0JCQlPVVRfQkFUQ0goMCk7Ci0K LQkJCS8qIGlubGluZSBkYXRhICh4b2Zmc2V0LCB5b2Zmc2V0KSAqLwotCQkJT1VUX0JBVENIKHgg KyBpICogMTYpOwotCQkJT1VUX0JBVENIKHkgKyBqICogMTYpOwotCQkJZ2VuOF9lbWl0X21lZGlh X3N0YXRlX2ZsdXNoKGJhdGNoKTsKLQkJfQotCX0KLX0KIAogLyoKICAqIFRoaXMgc2V0cyB1cCB0 aGUgbWVkaWEgcGlwZWxpbmUsCkBAIC0zNDksNyArNjMsNyBAQCBnZW44X21lZGlhX2ZpbGxmdW5j KHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCiAJYmF0Y2gtPnB0ciA9ICZiYXRjaC0+ YnVmZmVyW0JBVENIX1NUQVRFX1NQTElUXTsKIAogCWN1cmJlX2J1ZmZlciA9IGdlbjhfZmlsbF9j dXJiZV9idWZmZXJfZGF0YShiYXRjaCwgY29sb3IpOwotCWludGVyZmFjZV9kZXNjcmlwdG9yID0g Z2VuOF9maWxsX2ludGVyZmFjZV9kZXNjcmlwdG9yKGJhdGNoLCBkc3QpOworCWludGVyZmFjZV9k ZXNjcmlwdG9yID0gZ2VuOF9maWxsX2ludGVyZmFjZV9kZXNjcmlwdG9yKGJhdGNoLCBkc3QsIG1l ZGlhX2tlcm5lbCwgc2l6ZW9mKG1lZGlhX2tlcm5lbCkpOwogCWlndF9hc3NlcnQoYmF0Y2gtPnB0 ciA8ICZiYXRjaC0+YnVmZmVyWzQwOTVdKTsKIAogCS8qIG1lZGlhIHBpcGVsaW5lICovCmRpZmYg LS1naXQgYS9saWIvbWVkaWFfZmlsbF9nZW44bHAuYyBiL2xpYi9tZWRpYV9maWxsX2dlbjhscC5j CmluZGV4IDFmOGE0YWRjLi5kY2MxMTk4MiAxMDA2NDQKLS0tIGEvbGliL21lZGlhX2ZpbGxfZ2Vu OGxwLmMKKysrIGIvbGliL21lZGlhX2ZpbGxfZ2VuOGxwLmMKQEAgLTUsNyArNSw3IEBACiAjaW5j bHVkZSAiZ2VuOF9tZWRpYS5oIgogI2luY2x1ZGUgImludGVsX3JlZy5oIgogI2luY2x1ZGUgImRy bXRlc3QuaCIKLQorI2luY2x1ZGUgImdwdV9maWxsLmgiCiAjaW5jbHVkZSA8YXNzZXJ0Lmg+CiAK IApAQCAtMjMsMjg2ICsyMyw2IEBAIHN0YXRpYyBjb25zdCB1aW50MzJfdCBtZWRpYV9rZXJuZWxb XVs0XSA9IHsKIAl7IDB4MDc4MDAwMzEsIDB4MjAwMDBhNDAsIDB4MGUwMDBlMDAsIDB4ODIwMDAw MTAgfSwKIH07CiAKLXN0YXRpYyB1aW50MzJfdAotYmF0Y2hfdXNlZChzdHJ1Y3QgaW50ZWxfYmF0 Y2hidWZmZXIgKmJhdGNoKQotewotCXJldHVybiBiYXRjaC0+cHRyIC0gYmF0Y2gtPmJ1ZmZlcjsK LX0KLQotc3RhdGljIHVpbnQzMl90Ci1iYXRjaF9hbGlnbihzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZm ZXIgKmJhdGNoLCB1aW50MzJfdCBhbGlnbikKLXsKLQl1aW50MzJfdCBvZmZzZXQgPSBiYXRjaF91 c2VkKGJhdGNoKTsKLQlvZmZzZXQgPSBBTElHTihvZmZzZXQsIGFsaWduKTsKLQliYXRjaC0+cHRy ID0gYmF0Y2gtPmJ1ZmZlciArIG9mZnNldDsKLQlyZXR1cm4gb2Zmc2V0OwotfQotCi1zdGF0aWMg dm9pZCAqCi1iYXRjaF9hbGxvYyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLCB1aW50 MzJfdCBzaXplLCB1aW50MzJfdCBhbGlnbikKLXsKLQl1aW50MzJfdCBvZmZzZXQgPSBiYXRjaF9h bGlnbihiYXRjaCwgYWxpZ24pOwotCWJhdGNoLT5wdHIgKz0gc2l6ZTsKLQlyZXR1cm4gbWVtc2V0 KGJhdGNoLT5idWZmZXIgKyBvZmZzZXQsIDAsIHNpemUpOwotfQotCi1zdGF0aWMgdWludDMyX3QK LWJhdGNoX29mZnNldChzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLCB2b2lkICpwdHIp Ci17Ci0JcmV0dXJuICh1aW50OF90ICopcHRyIC0gYmF0Y2gtPmJ1ZmZlcjsKLX0KLQotc3RhdGlj IHVpbnQzMl90Ci1iYXRjaF9jb3B5KHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsIGNv bnN0IHZvaWQgKnB0ciwgdWludDMyX3Qgc2l6ZSwgdWludDMyX3QgYWxpZ24pCi17Ci0JcmV0dXJu IGJhdGNoX29mZnNldChiYXRjaCwgbWVtY3B5KGJhdGNoX2FsbG9jKGJhdGNoLCBzaXplLCBhbGln biksIHB0ciwgc2l6ZSkpOwotfQotCi1zdGF0aWMgdm9pZAotZ2VuOF9yZW5kZXJfZmx1c2goc3Ry dWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwgdWludDMyX3QgYmF0Y2hfZW5kKQotewotCWlu dCByZXQ7Ci0KLQlyZXQgPSBkcm1faW50ZWxfYm9fc3ViZGF0YShiYXRjaC0+Ym8sIDAsIDQwOTYs IGJhdGNoLT5idWZmZXIpOwotCWlmIChyZXQgPT0gMCkKLQkJcmV0ID0gZHJtX2ludGVsX2JvX21y Yl9leGVjKGJhdGNoLT5ibywgYmF0Y2hfZW5kLAotCQkJCQlOVUxMLCAwLCAwLCAwKTsKLQlpZ3Rf YXNzZXJ0KHJldCA9PSAwKTsKLX0KLQotc3RhdGljIHVpbnQzMl90Ci1nZW44X2ZpbGxfY3VyYmVf YnVmZmVyX2RhdGEoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKLQkJCXVpbnQ4X3Qg Y29sb3IpCi17Ci0JdWludDhfdCAqY3VyYmVfYnVmZmVyOwotCXVpbnQzMl90IG9mZnNldDsKLQot CWN1cmJlX2J1ZmZlciA9IGJhdGNoX2FsbG9jKGJhdGNoLCBzaXplb2YodWludDMyX3QpICogOCwg NjQpOwotCW9mZnNldCA9IGJhdGNoX29mZnNldChiYXRjaCwgY3VyYmVfYnVmZmVyKTsKLQkqY3Vy YmVfYnVmZmVyID0gY29sb3I7Ci0KLQlyZXR1cm4gb2Zmc2V0OwotfQotCi1zdGF0aWMgdWludDMy X3QKLWdlbjhfZmlsbF9zdXJmYWNlX3N0YXRlKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0 Y2gsCi0JCQlzdHJ1Y3QgaWd0X2J1ZiAqYnVmLAotCQkJdWludDMyX3QgZm9ybWF0LAotCQkJaW50 IGlzX2RzdCkKLXsKLQlzdHJ1Y3QgZ2VuOF9zdXJmYWNlX3N0YXRlICpzczsKLQl1aW50MzJfdCB3 cml0ZV9kb21haW4sIHJlYWRfZG9tYWluLCBvZmZzZXQ7Ci0JaW50IHJldDsKLQotCWlmIChpc19k c3QpIHsKLQkJd3JpdGVfZG9tYWluID0gcmVhZF9kb21haW4gPSBJOTE1X0dFTV9ET01BSU5fUkVO REVSOwotCX0gZWxzZSB7Ci0JCXdyaXRlX2RvbWFpbiA9IDA7Ci0JCXJlYWRfZG9tYWluID0gSTkx NV9HRU1fRE9NQUlOX1NBTVBMRVI7Ci0JfQotCi0Jc3MgPSBiYXRjaF9hbGxvYyhiYXRjaCwgc2l6 ZW9mKCpzcyksIDY0KTsKLQlvZmZzZXQgPSBiYXRjaF9vZmZzZXQoYmF0Y2gsIHNzKTsKLQotCXNz LT5zczAuc3VyZmFjZV90eXBlID0gR0VOOF9TVVJGQUNFXzJEOwotCXNzLT5zczAuc3VyZmFjZV9m b3JtYXQgPSBmb3JtYXQ7Ci0Jc3MtPnNzMC5yZW5kZXJfY2FjaGVfcmVhZF93cml0ZSA9IDE7Ci0J c3MtPnNzMC52ZXJ0aWNhbF9hbGlnbm1lbnQgPSAxOyAvKiBhbGlnbiA0ICovCi0Jc3MtPnNzMC5o b3Jpem9udGFsX2FsaWdubWVudCA9IDE7IC8qIGFsaWduIDQgKi8KLQotCWlmIChidWYtPnRpbGlu ZyA9PSBJOTE1X1RJTElOR19YKQotCQlzcy0+c3MwLnRpbGVkX21vZGUgPSAyOwotCWVsc2UgaWYg KGJ1Zi0+dGlsaW5nID09IEk5MTVfVElMSU5HX1kpCi0JCXNzLT5zczAudGlsZWRfbW9kZSA9IDM7 Ci0KLQlzcy0+c3M4LmJhc2VfYWRkciA9IGJ1Zi0+Ym8tPm9mZnNldDsKLQotCXJldCA9IGRybV9p bnRlbF9ib19lbWl0X3JlbG9jKGJhdGNoLT5ibywKLQkJCQliYXRjaF9vZmZzZXQoYmF0Y2gsIHNz KSArIDggKiA0LAotCQkJCWJ1Zi0+Ym8sIDAsCi0JCQkJcmVhZF9kb21haW4sIHdyaXRlX2RvbWFp bik7Ci0JaWd0X2Fzc2VydChyZXQgPT0gMCk7Ci0KLQlzcy0+c3MyLmhlaWdodCA9IGlndF9idWZf aGVpZ2h0KGJ1ZikgLSAxOwotCXNzLT5zczIud2lkdGggID0gaWd0X2J1Zl93aWR0aChidWYpIC0g MTsKLQlzcy0+c3MzLnBpdGNoICA9IGJ1Zi0+c3RyaWRlIC0gMTsKLQotCXNzLT5zczcuc2hhZGVy X2NoYW5lbF9zZWxlY3RfciA9IDQ7Ci0Jc3MtPnNzNy5zaGFkZXJfY2hhbmVsX3NlbGVjdF9nID0g NTsKLQlzcy0+c3M3LnNoYWRlcl9jaGFuZWxfc2VsZWN0X2IgPSA2OwotCXNzLT5zczcuc2hhZGVy X2NoYW5lbF9zZWxlY3RfYSA9IDc7Ci0KLQlyZXR1cm4gb2Zmc2V0OwotfQotCi1zdGF0aWMgdWlu dDMyX3QKLWdlbjhfZmlsbF9iaW5kaW5nX3RhYmxlKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAq YmF0Y2gsCi0JCQlzdHJ1Y3QgaWd0X2J1ZiAqZHN0KQotewotCXVpbnQzMl90ICpiaW5kaW5nX3Rh YmxlLCBvZmZzZXQ7Ci0KLQliaW5kaW5nX3RhYmxlID0gYmF0Y2hfYWxsb2MoYmF0Y2gsIDMyLCA2 NCk7Ci0Jb2Zmc2V0ID0gYmF0Y2hfb2Zmc2V0KGJhdGNoLCBiaW5kaW5nX3RhYmxlKTsKLQotCWJp bmRpbmdfdGFibGVbMF0gPSBnZW44X2ZpbGxfc3VyZmFjZV9zdGF0ZShiYXRjaCwgZHN0LCBHRU44 X1NVUkZBQ0VGT1JNQVRfUjhfVU5PUk0sIDEpOwotCi0JcmV0dXJuIG9mZnNldDsKLX0KLQotc3Rh dGljIHVpbnQzMl90Ci1nZW44X2ZpbGxfbWVkaWFfa2VybmVsKHN0cnVjdCBpbnRlbF9iYXRjaGJ1 ZmZlciAqYmF0Y2gsCi0JCWNvbnN0IHVpbnQzMl90IGtlcm5lbFtdWzRdLAotCQlzaXplX3Qgc2l6 ZSkKLXsKLQl1aW50MzJfdCBvZmZzZXQ7Ci0KLQlvZmZzZXQgPSBiYXRjaF9jb3B5KGJhdGNoLCBr ZXJuZWwsIHNpemUsIDY0KTsKLQotCXJldHVybiBvZmZzZXQ7Ci19Ci0KLXN0YXRpYyB1aW50MzJf dAotZ2VuOF9maWxsX2ludGVyZmFjZV9kZXNjcmlwdG9yKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZl ciAqYmF0Y2gsIHN0cnVjdCBpZ3RfYnVmICpkc3QpCi17Ci0Jc3RydWN0IGdlbjhfaW50ZXJmYWNl X2Rlc2NyaXB0b3JfZGF0YSAqaWRkOwotCXVpbnQzMl90IG9mZnNldDsKLQl1aW50MzJfdCBiaW5k aW5nX3RhYmxlX29mZnNldCwga2VybmVsX29mZnNldDsKLQotCWJpbmRpbmdfdGFibGVfb2Zmc2V0 ID0gZ2VuOF9maWxsX2JpbmRpbmdfdGFibGUoYmF0Y2gsIGRzdCk7Ci0Ja2VybmVsX29mZnNldCA9 IGdlbjhfZmlsbF9tZWRpYV9rZXJuZWwoYmF0Y2gsIG1lZGlhX2tlcm5lbCwgc2l6ZW9mKG1lZGlh X2tlcm5lbCkpOwotCi0JaWRkID0gYmF0Y2hfYWxsb2MoYmF0Y2gsIHNpemVvZigqaWRkKSwgNjQp OwotCW9mZnNldCA9IGJhdGNoX29mZnNldChiYXRjaCwgaWRkKTsKLQotCWlkZC0+ZGVzYzAua2Vy bmVsX3N0YXJ0X3BvaW50ZXIgPSAoa2VybmVsX29mZnNldCA+PiA2KTsKLQotCWlkZC0+ZGVzYzIu c2luZ2xlX3Byb2dyYW1fZmxvdyA9IDE7Ci0JaWRkLT5kZXNjMi5mbG9hdGluZ19wb2ludF9tb2Rl ID0gR0VOOF9GTE9BVElOR19QT0lOVF9JRUVFXzc1NDsKLQotCWlkZC0+ZGVzYzMuc2FtcGxlcl9j b3VudCA9IDA7ICAgICAgLyogMCBzYW1wbGVycyB1c2VkICovCi0JaWRkLT5kZXNjMy5zYW1wbGVy X3N0YXRlX3BvaW50ZXIgPSAwOwotCi0JaWRkLT5kZXNjNC5iaW5kaW5nX3RhYmxlX2VudHJ5X2Nv dW50ID0gMDsKLQlpZGQtPmRlc2M0LmJpbmRpbmdfdGFibGVfcG9pbnRlciA9IChiaW5kaW5nX3Rh YmxlX29mZnNldCA+PiA1KTsKLQotCWlkZC0+ZGVzYzUuY29uc3RhbnRfdXJiX2VudHJ5X3JlYWRf b2Zmc2V0ID0gMDsKLQlpZGQtPmRlc2M1LmNvbnN0YW50X3VyYl9lbnRyeV9yZWFkX2xlbmd0aCA9 IDE7IC8qIGdyZiAxICovCi0KLQlyZXR1cm4gb2Zmc2V0OwotfQotCi1zdGF0aWMgdm9pZAotZ2Vu OF9lbWl0X3N0YXRlX2Jhc2VfYWRkcmVzcyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNo KQotewotCU9VVF9CQVRDSChHRU44X1NUQVRFX0JBU0VfQUREUkVTUyB8ICgxNiAtIDIpKTsKLQot CS8qIGdlbmVyYWwgKi8KLQlPVVRfQkFUQ0goMCB8IEJBU0VfQUREUkVTU19NT0RJRlkpOwotCU9V VF9CQVRDSCgwKTsKLQotCS8qIHN0YXRlbGVzcyBkYXRhIHBvcnQgKi8KLQlPVVRfQkFUQ0goMCB8 IEJBU0VfQUREUkVTU19NT0RJRlkpOwotCi0JLyogc3VyZmFjZSAqLwotCU9VVF9SRUxPQyhiYXRj aC0+Ym8sIEk5MTVfR0VNX0RPTUFJTl9TQU1QTEVSLCAwLCBCQVNFX0FERFJFU1NfTU9ESUZZKTsK LQotCS8qIGR5bmFtaWMgKi8KLQlPVVRfUkVMT0MoYmF0Y2gtPmJvLCBJOTE1X0dFTV9ET01BSU5f UkVOREVSIHwgSTkxNV9HRU1fRE9NQUlOX0lOU1RSVUNUSU9OLAotCQkwLCBCQVNFX0FERFJFU1Nf TU9ESUZZKTsKLQotCS8qIGluZGlyZWN0ICovCi0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgw KTsKLQotCS8qIGluc3RydWN0aW9uICovCi0JT1VUX1JFTE9DKGJhdGNoLT5ibywgSTkxNV9HRU1f RE9NQUlOX0lOU1RSVUNUSU9OLCAwLCBCQVNFX0FERFJFU1NfTU9ESUZZKTsKLQotCS8qIGdlbmVy YWwgc3RhdGUgYnVmZmVyIHNpemUgKi8KLQlPVVRfQkFUQ0goMHhmZmZmZjAwMCB8IDEpOwotCS8q IGR5bmFtaWMgc3RhdGUgYnVmZmVyIHNpemUgKi8KLQlPVVRfQkFUQ0goMSA8PCAxMiB8IDEpOwot CS8qIGluZGlyZWN0IG9iamVjdCBidWZmZXIgc2l6ZSAqLwotCU9VVF9CQVRDSCgweGZmZmZmMDAw IHwgMSk7Ci0JLyogaW50cnVjdGlvbiBidWZmZXIgc2l6ZSwgbXVzdCBzZXQgbW9kaWZ5IGVuYWJs ZSBiaXQsIG90aGVyd2lzZSBpdCBtYXkgcmVzdWx0IGluIEdQVSBoYW5nICovCi0JT1VUX0JBVENI KDEgPDwgMTIgfCAxKTsKLX0KLQotc3RhdGljIHZvaWQKLWdlbjhfZW1pdF92ZmVfc3RhdGUoc3Ry dWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCkKLXsKLQlPVVRfQkFUQ0goR0VOOF9NRURJQV9W RkVfU1RBVEUgfCAoOSAtIDIpKTsKLQotCS8qIHNjcmF0Y2ggYnVmZmVyICovCi0JT1VUX0JBVENI KDApOwotCU9VVF9CQVRDSCgwKTsKLQotCS8qIG51bWJlciBvZiB0aHJlYWRzICYgdXJiIGVudHJp ZXMgKi8KLQlPVVRfQkFUQ0goMSA8PCAxNiB8Ci0JCTIgPDwgOCk7Ci0KLQlPVVRfQkFUQ0goMCk7 Ci0KLQkvKiB1cmIgZW50cnkgc2l6ZSAmIGN1cmJlIHNpemUgKi8KLQlPVVRfQkFUQ0goMiA8PCAx NiB8Ci0JCTIpOwotCi0JLyogc2NvcmVib2FyZCAqLwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFU Q0goMCk7Ci0JT1VUX0JBVENIKDApOwotfQotCi1zdGF0aWMgdm9pZAotZ2VuOF9lbWl0X2N1cmJl X2xvYWQoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwgdWludDMyX3QgY3VyYmVfYnVm ZmVyKQotewotCU9VVF9CQVRDSChHRU44X01FRElBX0NVUkJFX0xPQUQgfCAoNCAtIDIpKTsKLQlP VVRfQkFUQ0goMCk7Ci0JLyogY3VyYmUgdG90YWwgZGF0YSBsZW5ndGggKi8KLQlPVVRfQkFUQ0go NjQpOwotCS8qIGN1cmJlIGRhdGEgc3RhcnQgYWRkcmVzcywgaXMgcmVsYXRpdmUgdG8gdGhlIGR5 bmFtaWNzIGJhc2UgYWRkcmVzcyAqLwotCU9VVF9CQVRDSChjdXJiZV9idWZmZXIpOwotfQotCi1z dGF0aWMgdm9pZAotZ2VuOF9lbWl0X2ludGVyZmFjZV9kZXNjcmlwdG9yX2xvYWQoc3RydWN0IGlu dGVsX2JhdGNoYnVmZmVyICpiYXRjaCwgdWludDMyX3QgaW50ZXJmYWNlX2Rlc2NyaXB0b3IpCi17 Ci0JT1VUX0JBVENIKEdFTjhfTUVESUFfSU5URVJGQUNFX0RFU0NSSVBUT1JfTE9BRCB8ICg0IC0g MikpOwotCU9VVF9CQVRDSCgwKTsKLQkvKiBpbnRlcmZhY2UgZGVzY3JpcHRvciBkYXRhIGxlbmd0 aCAqLwotCU9VVF9CQVRDSChzaXplb2Yoc3RydWN0IGdlbjhfaW50ZXJmYWNlX2Rlc2NyaXB0b3Jf ZGF0YSkpOwotCS8qIGludGVyZmFjZSBkZXNjcmlwdG9yIGFkZHJlc3MsIGlzIHJlbGF0aXZlIHRv IHRoZSBkeW5hbWljcyBiYXNlIGFkZHJlc3MgKi8KLQlPVVRfQkFUQ0goaW50ZXJmYWNlX2Rlc2Ny aXB0b3IpOwotfQotCi1zdGF0aWMgdm9pZAotZ2VuOGxwX2VtaXRfbWVkaWFfb2JqZWN0cyhzdHJ1 Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAotCQkJdW5zaWduZWQgeCwgdW5zaWduZWQgeSwK LQkJCXVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQpCi17Ci0JaW50IGksIGo7Ci0KLQlm b3IgKGkgPSAwOyBpIDwgd2lkdGggLyAxNjsgaSsrKSB7Ci0JCWZvciAoaiA9IDA7IGogPCBoZWln aHQgLyAxNjsgaisrKSB7Ci0JCQlPVVRfQkFUQ0goR0VOOF9NRURJQV9PQkpFQ1QgfCAoOCAtIDIp KTsKLQotCQkJLyogaW50ZXJmYWNlIGRlc2NyaXB0b3Igb2Zmc2V0ICovCi0JCQlPVVRfQkFUQ0go MCk7Ci0KLQkJCS8qIHdpdGhvdXQgaW5kaXJlY3QgZGF0YSAqLwotCQkJT1VUX0JBVENIKDApOwot CQkJT1VUX0JBVENIKDApOwotCi0JCQkvKiBzY29yZWJvYXJkICovCi0JCQlPVVRfQkFUQ0goMCk7 Ci0JCQlPVVRfQkFUQ0goMCk7Ci0KLQkJCS8qIGlubGluZSBkYXRhICh4b2Zmc2V0LCB5b2Zmc2V0 KSAqLwotCQkJT1VUX0JBVENIKHggKyBpICogMTYpOwotCQkJT1VUX0JBVENIKHkgKyBqICogMTYp OwotCQl9Ci0JfQotfQotCiAvKgogICogVGhpcyBzZXRzIHVwIHRoZSBtZWRpYSBwaXBlbGluZSwK ICAqCkBAIC0zNDEsNyArNjEsNyBAQCBnZW44bHBfbWVkaWFfZmlsbGZ1bmMoc3RydWN0IGludGVs X2JhdGNoYnVmZmVyICpiYXRjaCwKIAliYXRjaC0+cHRyID0gJmJhdGNoLT5idWZmZXJbQkFUQ0hf U1RBVEVfU1BMSVRdOwogCiAJY3VyYmVfYnVmZmVyID0gZ2VuOF9maWxsX2N1cmJlX2J1ZmZlcl9k YXRhKGJhdGNoLCBjb2xvcik7Ci0JaW50ZXJmYWNlX2Rlc2NyaXB0b3IgPSBnZW44X2ZpbGxfaW50 ZXJmYWNlX2Rlc2NyaXB0b3IoYmF0Y2gsIGRzdCk7CisJaW50ZXJmYWNlX2Rlc2NyaXB0b3IgPSBn ZW44X2ZpbGxfaW50ZXJmYWNlX2Rlc2NyaXB0b3IoYmF0Y2gsIGRzdCwgbWVkaWFfa2VybmVsLCBz aXplb2YobWVkaWFfa2VybmVsKSk7CiAJaWd0X2Fzc2VydChiYXRjaC0+cHRyIDwgJmJhdGNoLT5i dWZmZXJbNDA5NV0pOwogCiAJLyogbWVkaWEgcGlwZWxpbmUgKi8KZGlmZiAtLWdpdCBhL2xpYi9t ZWRpYV9maWxsX2dlbjkuYyBiL2xpYi9tZWRpYV9maWxsX2dlbjkuYwppbmRleCAzZmQyMTgxOS4u NmFjY2RiZTQgMTAwNjQ0Ci0tLSBhL2xpYi9tZWRpYV9maWxsX2dlbjkuYworKysgYi9saWIvbWVk aWFfZmlsbF9nZW45LmMKQEAgLTQsMTEgKzQsOSBAQAogI2luY2x1ZGUgIm1lZGlhX2ZpbGwuaCIK ICNpbmNsdWRlICJnZW44X21lZGlhLmgiCiAjaW5jbHVkZSAiaW50ZWxfcmVnLmgiCi0KKyNpbmNs dWRlICJncHVfZmlsbC5oIgogI2luY2x1ZGUgPGFzc2VydC5oPgogCi0jZGVmaW5lIEFMSUdOKHgs IHkpICgoKHgpICsgKHkpLTEpICYgfigoeSktMSkpCi0KIHN0YXRpYyBjb25zdCB1aW50MzJfdCBt ZWRpYV9rZXJuZWxbXVs0XSA9IHsKIAl7IDB4MDA0MDAwMDEsIDB4MjAyMDIyODgsIDB4MDAwMDAw MjAsIDB4MDAwMDAwMDAgfSwKIAl7IDB4MDA2MDAwMDEsIDB4MjA4MDAyMDgsIDB4MDA4ZDAwMDAs IDB4MDAwMDAwMDAgfSwKQEAgLTIzLDI5OCArMjEsNiBAQCBzdGF0aWMgY29uc3QgdWludDMyX3Qg bWVkaWFfa2VybmVsW11bNF0gPSB7CiAJeyAweDA3ODAwMDMxLCAweDIwMDAwYTQwLCAweDBlMDAw ZTAwLCAweDgyMDAwMDEwIH0sCiB9OwogCi1zdGF0aWMgdWludDMyX3QKLWJhdGNoX3VzZWQoc3Ry dWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCkKLXsKLQlyZXR1cm4gYmF0Y2gtPnB0ciAtIGJh dGNoLT5idWZmZXI7Ci19Ci0KLXN0YXRpYyB1aW50MzJfdAotYmF0Y2hfYWxpZ24oc3RydWN0IGlu dGVsX2JhdGNoYnVmZmVyICpiYXRjaCwgdWludDMyX3QgYWxpZ24pCi17Ci0JdWludDMyX3Qgb2Zm c2V0ID0gYmF0Y2hfdXNlZChiYXRjaCk7Ci0Jb2Zmc2V0ID0gQUxJR04ob2Zmc2V0LCBhbGlnbik7 Ci0JYmF0Y2gtPnB0ciA9IGJhdGNoLT5idWZmZXIgKyBvZmZzZXQ7Ci0JcmV0dXJuIG9mZnNldDsK LX0KLQotc3RhdGljIHZvaWQgKgotYmF0Y2hfYWxsb2Moc3RydWN0IGludGVsX2JhdGNoYnVmZmVy ICpiYXRjaCwgdWludDMyX3Qgc2l6ZSwgdWludDMyX3QgYWxpZ24pCi17Ci0JdWludDMyX3Qgb2Zm c2V0ID0gYmF0Y2hfYWxpZ24oYmF0Y2gsIGFsaWduKTsKLQliYXRjaC0+cHRyICs9IHNpemU7Ci0J cmV0dXJuIG1lbXNldChiYXRjaC0+YnVmZmVyICsgb2Zmc2V0LCAwLCBzaXplKTsKLX0KLQotc3Rh dGljIHVpbnQzMl90Ci1iYXRjaF9vZmZzZXQoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRj aCwgdm9pZCAqcHRyKQotewotCXJldHVybiAodWludDhfdCAqKXB0ciAtIGJhdGNoLT5idWZmZXI7 Ci19Ci0KLXN0YXRpYyB1aW50MzJfdAotYmF0Y2hfY29weShzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZm ZXIgKmJhdGNoLCBjb25zdCB2b2lkICpwdHIsIHVpbnQzMl90IHNpemUsIHVpbnQzMl90IGFsaWdu KQotewotCXJldHVybiBiYXRjaF9vZmZzZXQoYmF0Y2gsIG1lbWNweShiYXRjaF9hbGxvYyhiYXRj aCwgc2l6ZSwgYWxpZ24pLCBwdHIsIHNpemUpKTsKLX0KLQotc3RhdGljIHZvaWQKLWdlbjhfcmVu ZGVyX2ZsdXNoKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsIHVpbnQzMl90IGJhdGNo X2VuZCkKLXsKLQlpbnQgcmV0OwotCi0JcmV0ID0gZHJtX2ludGVsX2JvX3N1YmRhdGEoYmF0Y2gt PmJvLCAwLCA0MDk2LCBiYXRjaC0+YnVmZmVyKTsKLQlpZiAocmV0ID09IDApCi0JCXJldCA9IGRy bV9pbnRlbF9ib19tcmJfZXhlYyhiYXRjaC0+Ym8sIGJhdGNoX2VuZCwKLQkJCQkJTlVMTCwgMCwg MCwgMCk7Ci0JYXNzZXJ0KHJldCA9PSAwKTsKLX0KLQotc3RhdGljIHVpbnQzMl90Ci1nZW44X2Zp bGxfY3VyYmVfYnVmZmVyX2RhdGEoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKLQkJ CXVpbnQ4X3QgY29sb3IpCi17Ci0JdWludDhfdCAqY3VyYmVfYnVmZmVyOwotCXVpbnQzMl90IG9m ZnNldDsKLQotCWN1cmJlX2J1ZmZlciA9IGJhdGNoX2FsbG9jKGJhdGNoLCBzaXplb2YodWludDMy X3QpICogOCwgNjQpOwotCW9mZnNldCA9IGJhdGNoX29mZnNldChiYXRjaCwgY3VyYmVfYnVmZmVy KTsKLQkqY3VyYmVfYnVmZmVyID0gY29sb3I7Ci0KLQlyZXR1cm4gb2Zmc2V0OwotfQotCi1zdGF0 aWMgdWludDMyX3QKLWdlbjhfZmlsbF9zdXJmYWNlX3N0YXRlKHN0cnVjdCBpbnRlbF9iYXRjaGJ1 ZmZlciAqYmF0Y2gsCi0JCQlzdHJ1Y3QgaWd0X2J1ZiAqYnVmLAotCQkJdWludDMyX3QgZm9ybWF0 LAotCQkJaW50IGlzX2RzdCkKLXsKLQlzdHJ1Y3QgZ2VuOF9zdXJmYWNlX3N0YXRlICpzczsKLQl1 aW50MzJfdCB3cml0ZV9kb21haW4sIHJlYWRfZG9tYWluLCBvZmZzZXQ7Ci0JaW50IHJldDsKLQot CWlmIChpc19kc3QpIHsKLQkJd3JpdGVfZG9tYWluID0gcmVhZF9kb21haW4gPSBJOTE1X0dFTV9E T01BSU5fUkVOREVSOwotCX0gZWxzZSB7Ci0JCXdyaXRlX2RvbWFpbiA9IDA7Ci0JCXJlYWRfZG9t YWluID0gSTkxNV9HRU1fRE9NQUlOX1NBTVBMRVI7Ci0JfQotCi0Jc3MgPSBiYXRjaF9hbGxvYyhi YXRjaCwgc2l6ZW9mKCpzcyksIDY0KTsKLQlvZmZzZXQgPSBiYXRjaF9vZmZzZXQoYmF0Y2gsIHNz KTsKLQotCXNzLT5zczAuc3VyZmFjZV90eXBlID0gR0VOOF9TVVJGQUNFXzJEOwotCXNzLT5zczAu c3VyZmFjZV9mb3JtYXQgPSBmb3JtYXQ7Ci0Jc3MtPnNzMC5yZW5kZXJfY2FjaGVfcmVhZF93cml0 ZSA9IDE7Ci0Jc3MtPnNzMC52ZXJ0aWNhbF9hbGlnbm1lbnQgPSAxOyAvKiBhbGlnbiA0ICovCi0J c3MtPnNzMC5ob3Jpem9udGFsX2FsaWdubWVudCA9IDE7IC8qIGFsaWduIDQgKi8KLQotCWlmIChi dWYtPnRpbGluZyA9PSBJOTE1X1RJTElOR19YKQotCQlzcy0+c3MwLnRpbGVkX21vZGUgPSAyOwot CWVsc2UgaWYgKGJ1Zi0+dGlsaW5nID09IEk5MTVfVElMSU5HX1kpCi0JCXNzLT5zczAudGlsZWRf bW9kZSA9IDM7Ci0KLQlzcy0+c3M4LmJhc2VfYWRkciA9IGJ1Zi0+Ym8tPm9mZnNldDsKLQotCXJl dCA9IGRybV9pbnRlbF9ib19lbWl0X3JlbG9jKGJhdGNoLT5ibywKLQkJCQliYXRjaF9vZmZzZXQo YmF0Y2gsIHNzKSArIDggKiA0LAotCQkJCWJ1Zi0+Ym8sIDAsCi0JCQkJcmVhZF9kb21haW4sIHdy aXRlX2RvbWFpbik7Ci0JYXNzZXJ0KHJldCA9PSAwKTsKLQotCXNzLT5zczIuaGVpZ2h0ID0gaWd0 X2J1Zl9oZWlnaHQoYnVmKSAtIDE7Ci0Jc3MtPnNzMi53aWR0aCAgPSBpZ3RfYnVmX3dpZHRoKGJ1 ZikgLSAxOwotCXNzLT5zczMucGl0Y2ggID0gYnVmLT5zdHJpZGUgLSAxOwotCi0Jc3MtPnNzNy5z aGFkZXJfY2hhbmVsX3NlbGVjdF9yID0gNDsKLQlzcy0+c3M3LnNoYWRlcl9jaGFuZWxfc2VsZWN0 X2cgPSA1OwotCXNzLT5zczcuc2hhZGVyX2NoYW5lbF9zZWxlY3RfYiA9IDY7Ci0Jc3MtPnNzNy5z aGFkZXJfY2hhbmVsX3NlbGVjdF9hID0gNzsKLQotCXJldHVybiBvZmZzZXQ7Ci19Ci0KLXN0YXRp YyB1aW50MzJfdAotZ2VuOF9maWxsX2JpbmRpbmdfdGFibGUoc3RydWN0IGludGVsX2JhdGNoYnVm ZmVyICpiYXRjaCwKLQkJCXN0cnVjdCBpZ3RfYnVmICpkc3QpCi17Ci0JdWludDMyX3QgKmJpbmRp bmdfdGFibGUsIG9mZnNldDsKLQotCWJpbmRpbmdfdGFibGUgPSBiYXRjaF9hbGxvYyhiYXRjaCwg MzIsIDY0KTsKLQlvZmZzZXQgPSBiYXRjaF9vZmZzZXQoYmF0Y2gsIGJpbmRpbmdfdGFibGUpOwot Ci0JYmluZGluZ190YWJsZVswXSA9IGdlbjhfZmlsbF9zdXJmYWNlX3N0YXRlKGJhdGNoLCBkc3Qs IEdFTjhfU1VSRkFDRUZPUk1BVF9SOF9VTk9STSwgMSk7Ci0KLQlyZXR1cm4gb2Zmc2V0OwotfQot Ci1zdGF0aWMgdWludDMyX3QKLWdlbjhfZmlsbF9tZWRpYV9rZXJuZWwoc3RydWN0IGludGVsX2Jh dGNoYnVmZmVyICpiYXRjaCwKLQkJY29uc3QgdWludDMyX3Qga2VybmVsW11bNF0sCi0JCXNpemVf dCBzaXplKQotewotCXVpbnQzMl90IG9mZnNldDsKLQotCW9mZnNldCA9IGJhdGNoX2NvcHkoYmF0 Y2gsIGtlcm5lbCwgc2l6ZSwgNjQpOwotCi0JcmV0dXJuIG9mZnNldDsKLX0KLQotc3RhdGljIHVp bnQzMl90Ci1nZW44X2ZpbGxfaW50ZXJmYWNlX2Rlc2NyaXB0b3Ioc3RydWN0IGludGVsX2JhdGNo YnVmZmVyICpiYXRjaCwgc3RydWN0IGlndF9idWYgKmRzdCkKLXsKLQlzdHJ1Y3QgZ2VuOF9pbnRl cmZhY2VfZGVzY3JpcHRvcl9kYXRhICppZGQ7Ci0JdWludDMyX3Qgb2Zmc2V0OwotCXVpbnQzMl90 IGJpbmRpbmdfdGFibGVfb2Zmc2V0LCBrZXJuZWxfb2Zmc2V0OwotCi0JYmluZGluZ190YWJsZV9v ZmZzZXQgPSBnZW44X2ZpbGxfYmluZGluZ190YWJsZShiYXRjaCwgZHN0KTsKLQlrZXJuZWxfb2Zm c2V0ID0gZ2VuOF9maWxsX21lZGlhX2tlcm5lbChiYXRjaCwgbWVkaWFfa2VybmVsLCBzaXplb2Yo bWVkaWFfa2VybmVsKSk7Ci0KLQlpZGQgPSBiYXRjaF9hbGxvYyhiYXRjaCwgc2l6ZW9mKCppZGQp LCA2NCk7Ci0Jb2Zmc2V0ID0gYmF0Y2hfb2Zmc2V0KGJhdGNoLCBpZGQpOwotCi0JaWRkLT5kZXNj MC5rZXJuZWxfc3RhcnRfcG9pbnRlciA9IChrZXJuZWxfb2Zmc2V0ID4+IDYpOwotCi0JaWRkLT5k ZXNjMi5zaW5nbGVfcHJvZ3JhbV9mbG93ID0gMTsKLQlpZGQtPmRlc2MyLmZsb2F0aW5nX3BvaW50 X21vZGUgPSBHRU44X0ZMT0FUSU5HX1BPSU5UX0lFRUVfNzU0OwotCi0JaWRkLT5kZXNjMy5zYW1w bGVyX2NvdW50ID0gMDsgICAgICAvKiAwIHNhbXBsZXJzIHVzZWQgKi8KLQlpZGQtPmRlc2MzLnNh bXBsZXJfc3RhdGVfcG9pbnRlciA9IDA7Ci0KLQlpZGQtPmRlc2M0LmJpbmRpbmdfdGFibGVfZW50 cnlfY291bnQgPSAwOwotCWlkZC0+ZGVzYzQuYmluZGluZ190YWJsZV9wb2ludGVyID0gKGJpbmRp bmdfdGFibGVfb2Zmc2V0ID4+IDUpOwotCi0JaWRkLT5kZXNjNS5jb25zdGFudF91cmJfZW50cnlf cmVhZF9vZmZzZXQgPSAwOwotCWlkZC0+ZGVzYzUuY29uc3RhbnRfdXJiX2VudHJ5X3JlYWRfbGVu Z3RoID0gMTsgLyogZ3JmIDEgKi8KLQotCXJldHVybiBvZmZzZXQ7Ci19Ci0KLXN0YXRpYyB2b2lk Ci1nZW45X2VtaXRfc3RhdGVfYmFzZV9hZGRyZXNzKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAq YmF0Y2gpCi17Ci0JT1VUX0JBVENIKEdFTjhfU1RBVEVfQkFTRV9BRERSRVNTIHwgKDE5IC0gMikp OwotCi0JLyogZ2VuZXJhbCAqLwotCU9VVF9CQVRDSCgwIHwgQkFTRV9BRERSRVNTX01PRElGWSk7 Ci0JT1VUX0JBVENIKDApOwotCi0JLyogc3RhdGVsZXNzIGRhdGEgcG9ydCAqLwotCU9VVF9CQVRD SCgwIHwgQkFTRV9BRERSRVNTX01PRElGWSk7Ci0KLQkvKiBzdXJmYWNlICovCi0JT1VUX1JFTE9D KGJhdGNoLT5ibywgSTkxNV9HRU1fRE9NQUlOX1NBTVBMRVIsIDAsIEJBU0VfQUREUkVTU19NT0RJ RlkpOwotCi0JLyogZHluYW1pYyAqLwotCU9VVF9SRUxPQyhiYXRjaC0+Ym8sIEk5MTVfR0VNX0RP TUFJTl9SRU5ERVIgfCBJOTE1X0dFTV9ET01BSU5fSU5TVFJVQ1RJT04sCi0JCTAsIEJBU0VfQURE UkVTU19NT0RJRlkpOwotCi0JLyogaW5kaXJlY3QgKi8KLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JB VENIKDApOwotCi0JLyogaW5zdHJ1Y3Rpb24gKi8KLQlPVVRfUkVMT0MoYmF0Y2gtPmJvLCBJOTE1 X0dFTV9ET01BSU5fSU5TVFJVQ1RJT04sIDAsIEJBU0VfQUREUkVTU19NT0RJRlkpOwotCi0JLyog Z2VuZXJhbCBzdGF0ZSBidWZmZXIgc2l6ZSAqLwotCU9VVF9CQVRDSCgweGZmZmZmMDAwIHwgMSk7 Ci0JLyogZHluYW1pYyBzdGF0ZSBidWZmZXIgc2l6ZSAqLwotCU9VVF9CQVRDSCgxIDw8IDEyIHwg MSk7Ci0JLyogaW5kaXJlY3Qgb2JqZWN0IGJ1ZmZlciBzaXplICovCi0JT1VUX0JBVENIKDB4ZmZm ZmYwMDAgfCAxKTsKLQkvKiBpbnRydWN0aW9uIGJ1ZmZlciBzaXplLCBtdXN0IHNldCBtb2RpZnkg ZW5hYmxlIGJpdCwgb3RoZXJ3aXNlIGl0IG1heSByZXN1bHQgaW4gR1BVIGhhbmcgKi8KLQlPVVRf QkFUQ0goMSA8PCAxMiB8IDEpOwotCi0JLyogQmluZGxlc3Mgc3VyZmFjZSBzdGF0ZSBiYXNlIGFk ZHJlc3MgKi8KLQlPVVRfQkFUQ0goMCB8IEJBU0VfQUREUkVTU19NT0RJRlkpOwotCU9VVF9CQVRD SCgwKTsKLQlPVVRfQkFUQ0goMHhmZmZmZjAwMCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nZW44X2Vt aXRfdmZlX3N0YXRlKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gpCi17Ci0JT1VUX0JB VENIKEdFTjhfTUVESUFfVkZFX1NUQVRFIHwgKDkgLSAyKSk7Ci0KLQkvKiBzY3JhdGNoIGJ1ZmZl ciAqLwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0KLQkvKiBudW1iZXIgb2YgdGhy ZWFkcyAmIHVyYiBlbnRyaWVzICovCi0JT1VUX0JBVENIKDEgPDwgMTYgfAotCQkyIDw8IDgpOwot Ci0JT1VUX0JBVENIKDApOwotCi0JLyogdXJiIGVudHJ5IHNpemUgJiBjdXJiZSBzaXplICovCi0J T1VUX0JBVENIKDIgPDwgMTYgfAotCQkyKTsKLQotCS8qIHNjb3JlYm9hcmQgKi8KLQlPVVRfQkFU Q0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLX0KLQotc3RhdGljIHZvaWQK LWdlbjhfZW1pdF9jdXJiZV9sb2FkKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsIHVp bnQzMl90IGN1cmJlX2J1ZmZlcikKLXsKLQlPVVRfQkFUQ0goR0VOOF9NRURJQV9DVVJCRV9MT0FE IHwgKDQgLSAyKSk7Ci0JT1VUX0JBVENIKDApOwotCS8qIGN1cmJlIHRvdGFsIGRhdGEgbGVuZ3Ro ICovCi0JT1VUX0JBVENIKDY0KTsKLQkvKiBjdXJiZSBkYXRhIHN0YXJ0IGFkZHJlc3MsIGlzIHJl bGF0aXZlIHRvIHRoZSBkeW5hbWljcyBiYXNlIGFkZHJlc3MgKi8KLQlPVVRfQkFUQ0goY3VyYmVf YnVmZmVyKTsKLX0KLQotc3RhdGljIHZvaWQKLWdlbjhfZW1pdF9pbnRlcmZhY2VfZGVzY3JpcHRv cl9sb2FkKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsIHVpbnQzMl90IGludGVyZmFj ZV9kZXNjcmlwdG9yKQotewotCU9VVF9CQVRDSChHRU44X01FRElBX0lOVEVSRkFDRV9ERVNDUklQ VE9SX0xPQUQgfCAoNCAtIDIpKTsKLQlPVVRfQkFUQ0goMCk7Ci0JLyogaW50ZXJmYWNlIGRlc2Ny aXB0b3IgZGF0YSBsZW5ndGggKi8KLQlPVVRfQkFUQ0goc2l6ZW9mKHN0cnVjdCBnZW44X2ludGVy ZmFjZV9kZXNjcmlwdG9yX2RhdGEpKTsKLQkvKiBpbnRlcmZhY2UgZGVzY3JpcHRvciBhZGRyZXNz LCBpcyByZWxhdGl2ZSB0byB0aGUgZHluYW1pY3MgYmFzZSBhZGRyZXNzICovCi0JT1VUX0JBVENI KGludGVyZmFjZV9kZXNjcmlwdG9yKTsKLX0KLQotc3RhdGljIHZvaWQKLWdlbjhfZW1pdF9tZWRp YV9zdGF0ZV9mbHVzaChzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoKQotewotCU9VVF9C QVRDSChHRU44X01FRElBX1NUQVRFX0ZMVVNIIHwgKDIgLSAyKSk7Ci0JT1VUX0JBVENIKDApOwot fQotCi1zdGF0aWMgdm9pZAotZ2VuOF9lbWl0X21lZGlhX29iamVjdHMoc3RydWN0IGludGVsX2Jh dGNoYnVmZmVyICpiYXRjaCwKLQkJCXVuc2lnbmVkIHgsIHVuc2lnbmVkIHksCi0JCQl1bnNpZ25l ZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KQotewotCWludCBpLCBqOwotCi0JZm9yIChpID0gMDsg aSA8IHdpZHRoIC8gMTY7IGkrKykgewotCQlmb3IgKGogPSAwOyBqIDwgaGVpZ2h0IC8gMTY7IGor KykgewotCQkJT1VUX0JBVENIKEdFTjhfTUVESUFfT0JKRUNUIHwgKDggLSAyKSk7Ci0KLQkJCS8q IGludGVyZmFjZSBkZXNjcmlwdG9yIG9mZnNldCAqLwotCQkJT1VUX0JBVENIKDApOwotCi0JCQkv KiB3aXRob3V0IGluZGlyZWN0IGRhdGEgKi8KLQkJCU9VVF9CQVRDSCgwKTsKLQkJCU9VVF9CQVRD SCgwKTsKLQotCQkJLyogc2NvcmVib2FyZCAqLwotCQkJT1VUX0JBVENIKDApOwotCQkJT1VUX0JB VENIKDApOwotCi0JCQkvKiBpbmxpbmUgZGF0YSAoeG9mZnNldCwgeW9mZnNldCkgKi8KLQkJCU9V VF9CQVRDSCh4ICsgaSAqIDE2KTsKLQkJCU9VVF9CQVRDSCh5ICsgaiAqIDE2KTsKLQkJCWdlbjhf ZW1pdF9tZWRpYV9zdGF0ZV9mbHVzaChiYXRjaCk7Ci0JCX0KLQl9Ci19CiAKIC8qCiAgKiBUaGlz IHNldHMgdXAgdGhlIG1lZGlhIHBpcGVsaW5lLApAQCAtMzU0LDcgKzYwLDcgQEAgZ2VuOV9tZWRp YV9maWxsZnVuYyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAogCWJhdGNoLT5wdHIg PSAmYmF0Y2gtPmJ1ZmZlcltCQVRDSF9TVEFURV9TUExJVF07CiAKIAljdXJiZV9idWZmZXIgPSBn ZW44X2ZpbGxfY3VyYmVfYnVmZmVyX2RhdGEoYmF0Y2gsIGNvbG9yKTsKLQlpbnRlcmZhY2VfZGVz Y3JpcHRvciA9IGdlbjhfZmlsbF9pbnRlcmZhY2VfZGVzY3JpcHRvcihiYXRjaCwgZHN0KTsKKwlp bnRlcmZhY2VfZGVzY3JpcHRvciA9IGdlbjhfZmlsbF9pbnRlcmZhY2VfZGVzY3JpcHRvcihiYXRj aCwgZHN0LCBtZWRpYV9rZXJuZWwsIHNpemVvZihtZWRpYV9rZXJuZWwpKTsKIAlhc3NlcnQoYmF0 Y2gtPnB0ciA8ICZiYXRjaC0+YnVmZmVyWzQwOTVdKTsKIAogCS8qIG1lZGlhIHBpcGVsaW5lICov CmRpZmYgLS1naXQgYS9saWIvbWVzb24uYnVpbGQgYi9saWIvbWVzb24uYnVpbGQKaW5kZXggYjNi OGIxNGEuLjM4NWUwOGI5IDEwMDY0NAotLS0gYS9saWIvbWVzb24uYnVpbGQKKysrIGIvbGliL21l c29uLmJ1aWxkCkBAIC0zMCw2ICszMCw3IEBAIGxpYl9zb3VyY2VzID0gWwogCSdtZWRpYV9maWxs X2dlbjkuYycsCiAJJ21lZGlhX3NwaW4uYycsCiAJJ2dwZ3B1X2ZpbGwuYycsCisJJ2dwdV9maWxs LmMnLAogCSdyZW5kZXJjb3B5X2k5MTUuYycsCiAJJ3JlbmRlcmNvcHlfaTgzMC5jJywKIAkncmVu ZGVyY29weV9nZW42LmMnLAotLSAKMi4xNC4zCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwppZ3QtZGV2IG1haWxpbmcgbGlzdAppZ3QtZGV2QGxpc3RzLmZy ZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3Rp bmZvL2lndC1kZXYK