From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1IjJH7-0002OT-19 for qemu-devel@nongnu.org; Sat, 20 Oct 2007 14:42:17 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1IjJH3-0002NU-BJ for qemu-devel@nongnu.org; Sat, 20 Oct 2007 14:42:16 -0400 Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1IjJH2-0002N8-MV for qemu-devel@nongnu.org; Sat, 20 Oct 2007 14:42:12 -0400 Received: from nf-out-0910.google.com ([64.233.182.187]) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1IjJGz-00017i-O6 for qemu-devel@nongnu.org; Sat, 20 Oct 2007 14:42:12 -0400 Received: by nf-out-0910.google.com with SMTP id 30so780525nfu for ; Sat, 20 Oct 2007 11:42:08 -0700 (PDT) Message-ID: Date: Sat, 20 Oct 2007 21:42:07 +0300 From: "Blue Swirl" MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_11267_18197215.1192905727825" Subject: [Qemu-devel] PATCH, RFC: Slirp improvements Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel ------=_Part_11267_18197215.1192905727825 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Content-Disposition: inline Hi, This patch makes the SLIRP library able to handle more than one instance of itself by putting all globals inside a structure. Qemu needs some rearrangement to make the VLANs separate. The patch is loosely based on VirtualBox SLIRP changes but without the aHungarian nNotation ugliness. There are some other changes too, for example addition of "info slirp" monitor command. I tried to change the mbuf/packet chaining to support 64-bit pointers on x86-64 but the linking code is pretty hard to understand. Any comments? ------=_Part_11267_18197215.1192905727825 Content-Type: text/x-diff; name=slirp.diff Content-Transfer-Encoding: base64 X-Attachment-Id: f_f80h5q55 Content-Disposition: attachment; filename=slirp.diff SW5kZXg6IHFlbXUvc2xpcnAvYm9vdHAuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBxZW11Lm9yaWcvc2xpcnAv Ym9vdHAuYwkyMDA3LTEwLTIwIDA3OjMzOjM1LjAwMDAwMDAwMCArMDAwMAorKysgcWVtdS9zbGly cC9ib290cC5jCTIwMDctMTAtMjAgMTM6MTA6MDguMDAwMDAwMDAwICswMDAwCkBAIC0yNSwyMCAr MjUsNiBAQAogCiAvKiBYWFg6IG9ubHkgREhDUCBpcyBzdXBwb3J0ZWQgKi8KIAotI2RlZmluZSBO Ql9BRERSIDE2Ci0KLSNkZWZpbmUgU1RBUlRfQUREUiAxNQotCi0jZGVmaW5lIExFQVNFX1RJTUUg KDI0ICogMzYwMCkKLQotdHlwZWRlZiBzdHJ1Y3QgewotICAgIHVpbnQ4X3QgYWxsb2NhdGVkOwot ICAgIHVpbnQ4X3QgbWFjYWRkcls2XTsKLX0gQk9PVFBDbGllbnQ7Ci0KLUJPT1RQQ2xpZW50IGJv b3RwX2NsaWVudHNbTkJfQUREUl07Ci0KLWNvbnN0IGNoYXIgKmJvb3RwX2ZpbGVuYW1lOwogCiBz dGF0aWMgY29uc3QgdWludDhfdCByZmMxNTMzX2Nvb2tpZVtdID0geyBSRkMxNTMzX0NPT0tJRSB9 OwogCkBAIC00OSwzNyArMzUsNDkgQEAKICNkZWZpbmUgZHByaW50ZihmbXQsIGFyZ3MuLi4pCiAj ZW5kaWYKIAotc3RhdGljIEJPT1RQQ2xpZW50ICpnZXRfbmV3X2FkZHIoc3RydWN0IGluX2FkZHIg KnBhZGRyKQorc3RhdGljIEJPT1RQQ2xpZW50ICpnZXRfbmV3X2FkZHIoc2xpcnBfc3RhdGVfdCAq cywgc3RydWN0IGluX2FkZHIgKnBhZGRyKQogewogICAgIEJPT1RQQ2xpZW50ICpiYzsKICAgICBp bnQgaTsKIAogICAgIGZvcihpID0gMDsgaSA8IE5CX0FERFI7IGkrKykgewotICAgICAgICBpZiAo IWJvb3RwX2NsaWVudHNbaV0uYWxsb2NhdGVkKQorICAgICAgICBpZiAoIXMtPmJvb3RwX2NsaWVu dHNbaV0uYWxsb2NhdGVkKQogICAgICAgICAgICAgZ290byBmb3VuZDsKICAgICB9CiAgICAgcmV0 dXJuIE5VTEw7CiAgZm91bmQ6Ci0gICAgYmMgPSAmYm9vdHBfY2xpZW50c1tpXTsKKyAgICBiYyA9 ICZzLT5ib290cF9jbGllbnRzW2ldOwogICAgIGJjLT5hbGxvY2F0ZWQgPSAxOwotICAgIHBhZGRy LT5zX2FkZHIgPSBodG9ubChudG9obChzcGVjaWFsX2FkZHIuc19hZGRyKSB8IChpICsgU1RBUlRf QUREUikpOworICAgIHBhZGRyLT5zX2FkZHIgPSBodG9ubChudG9obChzLT5zcGVjaWFsX2FkZHIu c19hZGRyKSB8IChpICsgU1RBUlRfQUREUikpOwogICAgIHJldHVybiBiYzsKIH0KIAotc3RhdGlj IEJPT1RQQ2xpZW50ICpmaW5kX2FkZHIoc3RydWN0IGluX2FkZHIgKnBhZGRyLCBjb25zdCB1aW50 OF90ICptYWNhZGRyKQorc3RhdGljIHZvaWQgcmVsZWFzZV9hZGRyKHNsaXJwX3N0YXRlX3QgKnMs IHN0cnVjdCBpbl9hZGRyICpwYWRkcikKK3sKKyAgICBpbnQgaTsKKworICAgIGkgPSBudG9obChw YWRkci0+c19hZGRyKSAtIFNUQVJUX0FERFIgLSBudG9obChzLT5zcGVjaWFsX2FkZHIuc19hZGRy KTsKKyAgICBpZiAoaSA+PSBOQl9BRERSKQorICAgICAgICByZXR1cm47CisgICAgbWVtc2V0KHMt PmJvb3RwX2NsaWVudHNbaV0ubWFjYWRkciwgJ1wwJywgNik7CisgICAgcy0+Ym9vdHBfY2xpZW50 c1tpXS5hbGxvY2F0ZWQgPSAwOworfQorCitzdGF0aWMgQk9PVFBDbGllbnQgKmZpbmRfYWRkcihz bGlycF9zdGF0ZV90ICpzLCBzdHJ1Y3QgaW5fYWRkciAqcGFkZHIsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICptYWNhZGRyKQogewogICAgIEJPT1RQQ2xpZW50 ICpiYzsKICAgICBpbnQgaTsKIAogICAgIGZvcihpID0gMDsgaSA8IE5CX0FERFI7IGkrKykgewot ICAgICAgICBpZiAoIW1lbWNtcChtYWNhZGRyLCBib290cF9jbGllbnRzW2ldLm1hY2FkZHIsIDYp KQorICAgICAgICBpZiAoIW1lbWNtcChtYWNhZGRyLCBzLT5ib290cF9jbGllbnRzW2ldLm1hY2Fk ZHIsIDYpKQogICAgICAgICAgICAgZ290byBmb3VuZDsKICAgICB9CiAgICAgcmV0dXJuIE5VTEw7 CiAgZm91bmQ6Ci0gICAgYmMgPSAmYm9vdHBfY2xpZW50c1tpXTsKKyAgICBiYyA9ICZzLT5ib290 cF9jbGllbnRzW2ldOwogICAgIGJjLT5hbGxvY2F0ZWQgPSAxOwotICAgIHBhZGRyLT5zX2FkZHIg PSBodG9ubChudG9obChzcGVjaWFsX2FkZHIuc19hZGRyKSB8IChpICsgU1RBUlRfQUREUikpOwor ICAgIHBhZGRyLT5zX2FkZHIgPSBodG9ubChudG9obChzLT5zcGVjaWFsX2FkZHIuc19hZGRyKSB8 IChpICsgU1RBUlRfQUREUikpOwogICAgIHJldHVybiBiYzsKIH0KIApAQCAtMTI0LDcgKzEyMiw3 IEBACiAgICAgfQogfQogCi1zdGF0aWMgdm9pZCBib290cF9yZXBseShzdHJ1Y3QgYm9vdHBfdCAq YnApCitzdGF0aWMgdm9pZCBib290cF9yZXBseShzbGlycF9zdGF0ZV90ICpzLCBzdHJ1Y3QgYm9v dHBfdCAqYnApCiB7CiAgICAgQk9PVFBDbGllbnQgKmJjOwogICAgIHN0cnVjdCBtYnVmICptOwpA QCAtMTQxLDI5ICsxMzksMzkgQEAKICAgICBpZiAoZGhjcF9tc2dfdHlwZSA9PSAwKQogICAgICAg ICBkaGNwX21zZ190eXBlID0gREhDUFJFUVVFU1Q7IC8qIEZvcmNlIHJlcGx5IGZvciBvbGQgQk9P VFAgY2xpZW50cyAqLwogCisgICAgaWYgKGRoY3BfbXNnX3R5cGUgPT0gREhDUFJFTEVBU0UpIHsK KyAgICAgICAgcmVsZWFzZV9hZGRyKHMsICZicC0+YnBfY2lhZGRyKTsKKyAgICAgICAgZHByaW50 ZigicmVsZWFzZWQgYWRkcj0lMDh4XG4iLCBudG9obChicC0+YnBfY2lhZGRyLnNfYWRkcikpOwor ICAgICAgICAvKiBUaGlzIG1lc3NhZ2UgaXMgbm90IHRvIGJlIGFuc3dlcmVkIGluIGFueSB3YXku ICovCisgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgaWYgKGRoY3BfbXNnX3R5cGUgIT0gREhD UERJU0NPVkVSICYmCiAgICAgICAgIGRoY3BfbXNnX3R5cGUgIT0gREhDUFJFUVVFU1QpCiAgICAg ICAgIHJldHVybjsKICAgICAvKiBYWFg6IHRoaXMgaXMgYSBoYWNrIHRvIGdldCB0aGUgY2xpZW50 IG1hYyBhZGRyZXNzICovCi0gICAgbWVtY3B5KGNsaWVudF9ldGhhZGRyLCBicC0+YnBfaHdhZGRy LCA2KTsKKyAgICBtZW1jcHkocy0+Y2xpZW50X2V0aGFkZHIsIGJwLT5icF9od2FkZHIsIDYpOwog Ci0gICAgaWYgKChtID0gbV9nZXQoKSkgPT0gTlVMTCkKKyAgICBpZiAoKG0gPSBtX2dldChzKSkg PT0gTlVMTCkKICAgICAgICAgcmV0dXJuOwotICAgIG0tPm1fZGF0YSArPSBpZl9tYXhsaW5raGRy OworICAgIG0tPm1fZGF0YSArPSBzLT5pZl9tYXhsaW5raGRyOwogICAgIHJicCA9IChzdHJ1Y3Qg Ym9vdHBfdCAqKW0tPm1fZGF0YTsKICAgICBtLT5tX2RhdGEgKz0gc2l6ZW9mKHN0cnVjdCB1ZHBp cGhkcik7CiAgICAgbWVtc2V0KHJicCwgMCwgc2l6ZW9mKHN0cnVjdCBib290cF90KSk7CiAKICAg ICBpZiAoZGhjcF9tc2dfdHlwZSA9PSBESENQRElTQ09WRVIpIHsKLSAgICBuZXdfYWRkcjoKLSAg ICAgICAgYmMgPSBnZXRfbmV3X2FkZHIoJmRhZGRyLnNpbl9hZGRyKTsKKyAgICAgICAgLyogRG8g bm90IGFsbG9jYXRlIGEgbmV3IGxlYXNlIGZvciBjbGllbnRzIHRoYXQgZm9yZ290IHRoYXQgdGhl eSBoYWQgYSBsZWFzZS4gKi8KKyAgICAgICAgYmMgPSBmaW5kX2FkZHIocywgJmRhZGRyLnNpbl9h ZGRyLCBicC0+YnBfaHdhZGRyKTsKICAgICAgICAgaWYgKCFiYykgewotICAgICAgICAgICAgZHBy aW50Zigibm8gYWRkcmVzcyBsZWZ0XG4iKTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICBuZXdf YWRkcjoKKyAgICAgICAgICAgIGJjID0gZ2V0X25ld19hZGRyKHMsICZkYWRkci5zaW5fYWRkcik7 CisgICAgICAgICAgICBpZiAoIWJjKSB7CisgICAgICAgICAgICAgICAgZHByaW50Zigibm8gYWRk cmVzcyBsZWZ0XG4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9Cisg ICAgICAgICAgICBtZW1jcHkoYmMtPm1hY2FkZHIsIHMtPmNsaWVudF9ldGhhZGRyLCA2KTsKICAg ICAgICAgfQotICAgICAgICBtZW1jcHkoYmMtPm1hY2FkZHIsIGNsaWVudF9ldGhhZGRyLCA2KTsK ICAgICB9IGVsc2UgewotICAgICAgICBiYyA9IGZpbmRfYWRkcigmZGFkZHIuc2luX2FkZHIsIGJw LT5icF9od2FkZHIpOworICAgICAgICBiYyA9IGZpbmRfYWRkcihzLCAmZGFkZHIuc2luX2FkZHIs IGJwLT5icF9od2FkZHIpOwogICAgICAgICBpZiAoIWJjKSB7CiAgICAgICAgICAgICAvKiBpZiBu ZXZlciBhc3NpZ25lZCwgYmVoYXZlcyBhcyBpZiBpdCB3YXMgYWxyZWFkeQogICAgICAgICAgICAg ICAgYXNzaWduZWQgKHdpbmRvd3MgZml4IGJlY2F1c2UgaXQgcmVtZW1iZXJzIGl0cyBhZGRyZXNz KSAqLwpAQCAtMTcxLDEyICsxNzksMTIgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChi b290cF9maWxlbmFtZSkKLSAgICAgICAgc25wcmludGYocmJwLT5icF9maWxlLCBzaXplb2YocmJw LT5icF9maWxlKSwgIiVzIiwgYm9vdHBfZmlsZW5hbWUpOworICAgIGlmIChzLT5ib290cF9maWxl bmFtZSkKKyAgICAgICAgc25wcmludGYocmJwLT5icF9maWxlLCBzaXplb2YocmJwLT5icF9maWxl KSwgIiVzIiwgcy0+Ym9vdHBfZmlsZW5hbWUpOwogCiAgICAgZHByaW50Zigib2ZmZXJlZCBhZGRy PSUwOHhcbiIsIG50b2hsKGRhZGRyLnNpbl9hZGRyLnNfYWRkcikpOwogCi0gICAgc2FkZHIuc2lu X2FkZHIuc19hZGRyID0gaHRvbmwobnRvaGwoc3BlY2lhbF9hZGRyLnNfYWRkcikgfCBDVExfQUxJ QVMpOworICAgIHNhZGRyLnNpbl9hZGRyLnNfYWRkciA9IGh0b25sKG50b2hsKHMtPnNwZWNpYWxf YWRkci5zX2FkZHIpIHwgQ1RMX0FMSUFTKTsKICAgICBzYWRkci5zaW5fcG9ydCA9IGh0b25zKEJP T1RQX1NFUlZFUik7CiAKICAgICBkYWRkci5zaW5fcG9ydCA9IGh0b25zKEJPT1RQX0NMSUVOVCk7 CkBAIC0yMjUsNyArMjMzLDcgQEAKIAogICAgICAgICAqcSsrID0gUkZDMTUzM19ETlM7CiAgICAg ICAgICpxKysgPSA0OwotICAgICAgICBkbnNfYWRkci5zX2FkZHIgPSBodG9ubChudG9obChzcGVj aWFsX2FkZHIuc19hZGRyKSB8IENUTF9ETlMpOworICAgICAgICBkbnNfYWRkci5zX2FkZHIgPSBo dG9ubChudG9obChzLT5zcGVjaWFsX2FkZHIuc19hZGRyKSB8IENUTF9ETlMpOwogICAgICAgICBt ZW1jcHkocSwgJmRuc19hZGRyLCA0KTsKICAgICAgICAgcSArPSA0OwogCkBAIC0yMzUsMTEgKzI0 MywxMSBAQAogICAgICAgICBtZW1jcHkocSwgJnZhbCwgNCk7CiAgICAgICAgIHEgKz0gNDsKIAot ICAgICAgICBpZiAoKnNsaXJwX2hvc3RuYW1lKSB7Ci0gICAgICAgICAgICB2YWwgPSBzdHJsZW4o c2xpcnBfaG9zdG5hbWUpOworICAgICAgICBpZiAoKnMtPnNsaXJwX2hvc3RuYW1lKSB7CisgICAg ICAgICAgICB2YWwgPSBzdHJsZW4ocy0+c2xpcnBfaG9zdG5hbWUpOwogICAgICAgICAgICAgKnEr KyA9IFJGQzE1MzNfSE9TVE5BTUU7CiAgICAgICAgICAgICAqcSsrID0gdmFsOwotICAgICAgICAg ICAgbWVtY3B5KHEsIHNsaXJwX2hvc3RuYW1lLCB2YWwpOworICAgICAgICAgICAgbWVtY3B5KHEs IHMtPnNsaXJwX2hvc3RuYW1lLCB2YWwpOwogICAgICAgICAgICAgcSArPSB2YWw7CiAgICAgICAg IH0KICAgICB9CkBAIC0yNDcsMTQgKzI1NSwxNiBAQAogCiAgICAgbS0+bV9sZW4gPSBzaXplb2Yo c3RydWN0IGJvb3RwX3QpIC0KICAgICAgICAgc2l6ZW9mKHN0cnVjdCBpcCkgLSBzaXplb2Yoc3Ry dWN0IHVkcGhkcik7Ci0gICAgdWRwX291dHB1dDIoTlVMTCwgbSwgJnNhZGRyLCAmZGFkZHIsIElQ VE9TX0xPV0RFTEFZKTsKKyAgICAvKiBSZXBseSB0byB0aGUgYnJvYWRjYXN0IGFkZHJlc3MsIGFz IHNvbWUgY2xpZW50cyBwZXJmb3JtIHBhcmFub2lkIGNoZWNrcy4gKi8KKyAgICBkYWRkci5zaW5f YWRkci5zX2FkZHIgPSBJTkFERFJfQlJPQURDQVNUOworICAgIHVkcF9vdXRwdXQyKHMsIE5VTEws IG0sICZzYWRkciwgJmRhZGRyLCBJUFRPU19MT1dERUxBWSk7CiB9CiAKLXZvaWQgYm9vdHBfaW5w dXQoc3RydWN0IG1idWYgKm0pCit2b2lkIGJvb3RwX2lucHV0KHNsaXJwX3N0YXRlX3QgKnMsIHN0 cnVjdCBtYnVmICptKQogewogICAgIHN0cnVjdCBib290cF90ICpicCA9IG10b2QobSwgc3RydWN0 IGJvb3RwX3QgKik7CiAKICAgICBpZiAoYnAtPmJwX29wID09IEJPT1RQX1JFUVVFU1QpIHsKLSAg ICAgICAgYm9vdHBfcmVwbHkoYnApOworICAgICAgICBib290cF9yZXBseShzLCBicCk7CiAgICAg fQogfQpJbmRleDogcWVtdS9zbGlycC9ib290cC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHFlbXUub3JpZy9z bGlycC9ib290cC5oCTIwMDctMTAtMjAgMDc6MzM6MzUuMDAwMDAwMDAwICswMDAwCisrKyBxZW11 L3NsaXJwL2Jvb3RwLmgJMjAwNy0xMC0yMCAwODoxNzo1MS4wMDAwMDAwMDAgKzAwMDAKQEAgLTcx LDYgKzcxLDcgQEAKICNkZWZpbmUgREhDUE9GRkVSCQkyCiAjZGVmaW5lIERIQ1BSRVFVRVNUCQkz CiAjZGVmaW5lIERIQ1BBQ0sJCQk1CisjZGVmaW5lIERIQ1BSRUxFQVNFCQk3CiAKICNkZWZpbmUg UkZDMTUzM19WRU5ET1JfTUFKT1IJMAogI2RlZmluZSBSRkMxNTMzX1ZFTkRPUl9NSU5PUgkwCkBA IC0xMTAsNCArMTExLDQgQEAKICAgICB1aW50OF90IGJwX3ZlbmRbREhDUF9PUFRfTEVOXTsKIH07 CiAKLXZvaWQgYm9vdHBfaW5wdXQoc3RydWN0IG1idWYgKm0pOwordm9pZCBib290cF9pbnB1dChz bGlycF9zdGF0ZV90ICpzLCBzdHJ1Y3QgbWJ1ZiAqbSk7CkluZGV4OiBxZW11L3NsaXJwL2N0bC5o Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KLS0tIHFlbXUub3JpZy9zbGlycC9jdGwuaAkyMDA3LTEwLTIwIDA3OjMzOjM1 LjAwMDAwMDAwMCArMDAwMAorKysgcWVtdS9zbGlycC9jdGwuaAkyMDA3LTEwLTIwIDExOjQ2OjQ2 LjAwMDAwMDAwMCArMDAwMApAQCAtMiw2ICsyLDQgQEAKICNkZWZpbmUgQ1RMX0VYRUMJMQogI2Rl ZmluZSBDVExfQUxJQVMJMgogI2RlZmluZSBDVExfRE5TCQkzCi0KLSNkZWZpbmUgQ1RMX1NQRUNJ QUwJIjEwLjAuMi4wIgotI2RlZmluZSBDVExfTE9DQUwJIjEwLjAuMi4xNSIKKyNkZWZpbmUgQ1RM X0JST0FEQ0FTVCAgIDI1NQpJbmRleDogcWVtdS9zbGlycC9pZi5jCj09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHFl bXUub3JpZy9zbGlycC9pZi5jCTIwMDctMTAtMjAgMDc6MzM6MzYuMDAwMDAwMDAwICswMDAwCisr KyBxZW11L3NsaXJwL2lmLmMJMjAwNy0xMC0yMCAxMjo0NzowNC4wMDAwMDAwMDAgKzAwMDAKQEAg LTcsMjIgKzcsMTAgQEAKIAogI2luY2x1ZGUgPHNsaXJwLmg+CiAKLWludCBpZl9tdHUsIGlmX21y dTsKLWludCBpZl9jb21wOwotaW50IGlmX21heGxpbmtoZHI7Ci1pbnQgICAgIGlmX3F1ZXVlZCA9 IDA7ICAgICAgICAgICAgICAgICAgLyogTnVtYmVyIG9mIHBhY2tldHMgcXVldWVkIHNvIGZhciAq LwotaW50ICAgICBpZl90aHJlc2ggPSAxMDsgICAgICAgICAgICAgICAgIC8qIE51bWJlciBvZiBw YWNrZXRzIHF1ZXVlZCBiZWZvcmUgd2Ugc3RhcnQgc2VuZGluZwotCQkJCQkgKiAodG8gcHJldmVu dCBhbGxvY2luZyB0b28gbWFueSBtYnVmcykgKi8KLQotc3RydWN0ICBtYnVmIGlmX2Zhc3RxOyAg ICAgICAgICAgICAgICAgIC8qIGZhc3QgcXVldWUgKGZvciBpbnRlcmFjdGl2ZSBkYXRhKSAqLwot c3RydWN0ICBtYnVmIGlmX2JhdGNocTsgICAgICAgICAgICAgICAgIC8qIHF1ZXVlIGZvciBub24t aW50ZXJhY3RpdmUgZGF0YSAqLwotc3RydWN0CW1idWYgKm5leHRfbTsJCQkvKiBQb2ludGVyIHRv IG5leHQgbWJ1ZiB0byBvdXRwdXQgKi8KIAogI2RlZmluZSBpZnNfaW5pdChpZm0pICgoaWZtKS0+ aWZzX25leHQgPSAoaWZtKS0+aWZzX3ByZXYgPSAoaWZtKSkKIAotdm9pZAotaWZzX2luc3F1ZShp Zm0sIGlmbWhlYWQpCi0Jc3RydWN0IG1idWYgKmlmbSwgKmlmbWhlYWQ7CitzdGF0aWMgdm9pZCBp ZnNfaW5zcXVlKHN0cnVjdCBtYnVmICppZm0sIHN0cnVjdCBtYnVmICppZm1oZWFkKQogewogCWlm bS0+aWZzX25leHQgPSBpZm1oZWFkLT5pZnNfbmV4dDsKIAlpZm1oZWFkLT5pZnNfbmV4dCA9IGlm bTsKQEAgLTMwLDE2ICsxOCwxNCBAQAogCWlmbS0+aWZzX25leHQtPmlmc19wcmV2ID0gaWZtOwog fQogCi12b2lkCi1pZnNfcmVtcXVlKGlmbSkKLQlzdHJ1Y3QgbWJ1ZiAqaWZtOworc3RhdGljIHZv aWQgaWZzX3JlbXF1ZShzdHJ1Y3QgbWJ1ZiAqaWZtKQogewogCWlmbS0+aWZzX3ByZXYtPmlmc19u ZXh0ID0gaWZtLT5pZnNfbmV4dDsKIAlpZm0tPmlmc19uZXh0LT5pZnNfcHJldiA9IGlmbS0+aWZz X3ByZXY7CiB9CiAKIHZvaWQKLWlmX2luaXQoKQoraWZfaW5pdChzbGlycF9zdGF0ZV90ICpzKQog ewogI2lmIDAKIAkvKgpAQCAtNDcsMjEgKzMzLDIzIEBACiAJICogYW5kIDggYnl0ZXMgZm9yIFBQ UCwgYnV0IG5lZWQgdG8gaGF2ZSBpdCBvbiBhbiA4Ynl0ZSBib3VuZGFyeQogCSAqLwogI2lmZGVm IFVTRV9QUFAKLQlpZl9tYXhsaW5raGRyID0gNDg7CisJcy0+aWZfbWF4bGlua2hkciA9IDQ4Owog I2Vsc2UKLQlpZl9tYXhsaW5raGRyID0gNDA7CisJcy0+aWZfbWF4bGlua2hkciA9IDQwOwogI2Vu ZGlmCiAjZWxzZQogICAgICAgICAvKiAyIGZvciBhbGlnbm1lbnQsIDE0IGZvciBldGhlcm5ldCwg NDAgZm9yIFRDUC9JUCAqLwotICAgICAgICBpZl9tYXhsaW5raGRyID0gMiArIDE0ICsgNDA7Cisg ICAgICAgIHMtPmlmX21heGxpbmtoZHIgPSAyICsgMTQgKyA0MDsKICNlbmRpZgotCWlmX210dSA9 IDE1MDA7Ci0JaWZfbXJ1ID0gMTUwMDsKLQlpZl9jb21wID0gSUZfQVVUT0NPTVA7Ci0JaWZfZmFz dHEuaWZxX25leHQgPSBpZl9mYXN0cS5pZnFfcHJldiA9ICZpZl9mYXN0cTsKLQlpZl9iYXRjaHEu aWZxX25leHQgPSBpZl9iYXRjaHEuaWZxX3ByZXYgPSAmaWZfYmF0Y2hxOworICAgICAgICBzLT5p Zl9xdWV1ZWQgPSAwOworICAgICAgICBzLT5pZl90aHJlc2ggPSAxMDsKKwlzLT5pZl9tdHUgPSAx NTAwOworCXMtPmlmX21ydSA9IDE1MDA7CisJcy0+aWZfY29tcCA9IElGX0FVVE9DT01QOworCXMt PmlmX2Zhc3RxLmlmcV9uZXh0ID0gcy0+aWZfZmFzdHEuaWZxX3ByZXYgPSAmcy0+aWZfZmFzdHE7 CisJcy0+aWZfYmF0Y2hxLmlmcV9uZXh0ID0gcy0+aWZfYmF0Y2hxLmlmcV9wcmV2ID0gJnMtPmlm X2JhdGNocTsKICAgICAgICAgLy8Jc2xfY29tcHJlc3NfaW5pdCgmY29tcF9zKTsKLQluZXh0X20g PSAmaWZfYmF0Y2hxOworCXMtPm5leHRfbSA9ICZzLT5pZl9iYXRjaHE7CiB9CiAKICNpZiAwCkBA IC0xMTgsNyArMTA2LDcgQEAKIAlpZiAoaWZfbiA8PSAwKSB7CiAJCWlmIChpZl9uID09IDAgfHwg KGVycm5vICE9IEVJTlRSICYmIGVycm5vICE9IEVBR0FJTikpIHsKIAkJCWlmICh0dHlwLT51cCkK LQkJCSAgIGxpbmtfdXAtLTsKKwkJCSAgIHMtPmxpbmtfdXAtLTsKIAkJCXR0eV9kZXRhY2hlZCh0 dHlwLCAwKTsKIAkJfQogCQlyZXR1cm47CkBAIC0xNTcsOSArMTQ1LDcgQEAKICAqIGl0J2xsIHRl bXBvcmFyaWx5IGdldCBkb3duZ3JhZGVkIHRvIHRoZSBiYXRjaHEpCiAgKi8KIHZvaWQKLWlmX291 dHB1dChzbywgaWZtKQotCXN0cnVjdCBzb2NrZXQgKnNvOwotCXN0cnVjdCBtYnVmICppZm07Citp Zl9vdXRwdXQoc2xpcnBfc3RhdGVfdCAqcywgc3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBtYnVm ICppZm0pCiB7CiAJc3RydWN0IG1idWYgKmlmcTsKIAlpbnQgb25fZmFzdHEgPSAxOwpAQCAtMTc0 LDcgKzE2MCw3IEBACiAJICogWFhYIFNob3VsZG4ndCBuZWVkIHRoaXMsIGdvdHRhIGNoYW5nZSBk dG9tKCkgZXRjLgogCSAqLwogCWlmIChpZm0tPm1fZmxhZ3MgJiBNX1VTRURMSVNUKSB7Ci0JCXJl bXF1ZShpZm0pOworCQlyZW1xdWUocywgaWZtKTsKIAkJaWZtLT5tX2ZsYWdzICY9IH5NX1VTRURM SVNUOwogCX0KIApAQCAtMTg1LDcgKzE3MSw3IEBACiAJICogV2UgbXVzdG4ndCBwdXQgdGhpcyBw YWNrZXQgYmFjayBvbiB0aGUgZmFzdHEgKG9yIHdlJ2xsIHNlbmQgaXQgb3V0IG9mIG9yZGVyKQog CSAqIFhYWCBhZGQgY2FjaGUgaGVyZT8KIAkgKi8KLQlmb3IgKGlmcSA9IGlmX2JhdGNocS5pZnFf cHJldjsgaWZxICE9ICZpZl9iYXRjaHE7IGlmcSA9IGlmcS0+aWZxX3ByZXYpIHsKKwlmb3IgKGlm cSA9IHMtPmlmX2JhdGNocS5pZnFfcHJldjsgaWZxICE9ICZzLT5pZl9iYXRjaHE7IGlmcSA9IGlm cS0+aWZxX3ByZXYpIHsKIAkJaWYgKHNvID09IGlmcS0+aWZxX3NvKSB7CiAJCQkvKiBBIG1hdGNo ISAqLwogCQkJaWZtLT5pZnFfc28gPSBzbzsKQEAgLTE5Niw3ICsxODIsNyBAQAogCiAJLyogTm8g bWF0Y2gsIGNoZWNrIHdoaWNoIHF1ZXVlIHRvIHB1dCBpdCBvbiAqLwogCWlmIChzbyAmJiAoc28t PnNvX2lwdG9zICYgSVBUT1NfTE9XREVMQVkpKSB7Ci0JCWlmcSA9IGlmX2Zhc3RxLmlmcV9wcmV2 OworCQlpZnEgPSBzLT5pZl9mYXN0cS5pZnFfcHJldjsKIAkJb25fZmFzdHEgPSAxOwogCQkvKgog CQkgKiBDaGVjayBpZiB0aGlzIHBhY2tldCBpcyBhIHBhcnQgb2YgdGhlIGxhc3QKQEAgLTIwOCwx NSArMTk0LDE1IEBACiAJCQlnb3RvIGRpZGRpdDsKIAkJfQogCX0gZWxzZQotCQlpZnEgPSBpZl9i YXRjaHEuaWZxX3ByZXY7CisJCWlmcSA9IHMtPmlmX2JhdGNocS5pZnFfcHJldjsKIAogCS8qIENy ZWF0ZSBhIG5ldyBkb3VibHkgbGlua2VkIGxpc3QgZm9yIHRoaXMgc2Vzc2lvbiAqLwogCWlmbS0+ aWZxX3NvID0gc287CiAJaWZzX2luaXQoaWZtKTsKLQlpbnNxdWUoaWZtLCBpZnEpOworCWluc3F1 ZShzLCBpZm0sIGlmcSk7CiAKIGRpZGRpdDoKLQkrK2lmX3F1ZXVlZDsKKwkrK3MtPmlmX3F1ZXVl ZDsKIAogCWlmIChzbykgewogCQkvKiBVcGRhdGUgKl9xdWV1ZWQgKi8KQEAgLTIzMywxMCArMjE5 LDEwIEBACiAJCQkJIChzby0+c29fbnF1ZXVlZCAtIHNvLT5zb19xdWV1ZWQpID49IDMpKSB7CiAK IAkJCS8qIFJlbW92ZSBmcm9tIGN1cnJlbnQgcXVldWUuLi4gKi8KLQkJCXJlbXF1ZShpZm0tPmlm c19uZXh0KTsKKwkJCXJlbXF1ZShzLCBpZm0tPmlmc19uZXh0KTsKIAogCQkJLyogLi4uQW5kIGlu c2VydCBpbiB0aGUgbmV3LiAgVGhhdCdsbCB0ZWFjaCB5YSEgKi8KLQkJCWluc3F1ZShpZm0tPmlm c19uZXh0LCAmaWZfYmF0Y2hxKTsKKwkJCWluc3F1ZShzLCBpZm0tPmlmc19uZXh0LCAmcy0+aWZf YmF0Y2hxKTsKIAkJfQogCX0KIApAQCAtMjQ0LDkgKzIzMCw5IEBACiAJLyoKIAkgKiBUaGlzIHBy ZXZlbnRzIHVzIGZyb20gbWFsbG9jKClpbmcgdG9vIG1hbnkgbWJ1ZnMKIAkgKi8KLQlpZiAobGlu a191cCkgeworCWlmIChzLT5saW5rX3VwKSB7CiAJCS8qIGlmX3N0YXJ0IHdpbGwgY2hlY2sgdG93 cml0ZSAqLwotCQlpZl9zdGFydCgpOworCQlpZl9zdGFydChzKTsKIAl9CiAjZW5kaWYKIH0KQEAg LTI2NCw0NCArMjUwLDQ0IEBACiAgKiB0byB0aGUgZmlyc3QsIGV0Yy4gZXRjLgogICovCiB2b2lk Ci1pZl9zdGFydCh2b2lkKQoraWZfc3RhcnQoc2xpcnBfc3RhdGVfdCAqcykKIHsKIAlzdHJ1Y3Qg bWJ1ZiAqaWZtLCAqaWZxdDsKIAogCURFQlVHX0NBTEwoImlmX3N0YXJ0Iik7CiAKLQlpZiAoaWZf cXVldWVkID09IDApCisJaWYgKHMtPmlmX3F1ZXVlZCA9PSAwKQogCSAgIHJldHVybjsgLyogTm90 aGluZyB0byBkbyAqLwogCiAgYWdhaW46CiAgICAgICAgIC8qIGNoZWNrIGlmIHdlIGNhbiByZWFs bHkgb3V0cHV0ICovCi0gICAgICAgIGlmICghc2xpcnBfY2FuX291dHB1dCgpKQorICAgICAgICBp ZiAoIXNsaXJwX2Nhbl9vdXRwdXQocy0+dXNlcikpCiAgICAgICAgICAgICByZXR1cm47CiAKIAkv KgogCSAqIFNlZSB3aGljaCBxdWV1ZSB0byBnZXQgbmV4dCBwYWNrZXQgZnJvbQogCSAqIElmIHRo ZXJlJ3Mgc29tZXRoaW5nIGluIHRoZSBmYXN0cSwgc2VsZWN0IGl0IGltbWVkaWF0ZWx5CiAJICov Ci0JaWYgKGlmX2Zhc3RxLmlmcV9uZXh0ICE9ICZpZl9mYXN0cSkgewotCQlpZm0gPSBpZl9mYXN0 cS5pZnFfbmV4dDsKKwlpZiAocy0+aWZfZmFzdHEuaWZxX25leHQgIT0gJnMtPmlmX2Zhc3RxKSB7 CisJCWlmbSA9IHMtPmlmX2Zhc3RxLmlmcV9uZXh0OwogCX0gZWxzZSB7CiAJCS8qIE5vdGhpbmcg b24gZmFzdHEsIHNlZSBpZiBuZXh0X20gaXMgdmFsaWQgKi8KLQkJaWYgKG5leHRfbSAhPSAmaWZf YmF0Y2hxKQotCQkgICBpZm0gPSBuZXh0X207CisJCWlmIChzLT5uZXh0X20gIT0gJnMtPmlmX2Jh dGNocSkKKwkJICAgaWZtID0gcy0+bmV4dF9tOwogCQllbHNlCi0JCSAgIGlmbSA9IGlmX2JhdGNo cS5pZnFfbmV4dDsKKwkJICAgaWZtID0gcy0+aWZfYmF0Y2hxLmlmcV9uZXh0OwogCiAJCS8qIFNl dCB3aGljaCBwYWNrZXQgdG8gc2VuZCBvbiBuZXh0IGl0ZXJhdGlvbiAqLwotCQluZXh0X20gPSBp Zm0tPmlmcV9uZXh0OworCQlzLT5uZXh0X20gPSBpZm0tPmlmcV9uZXh0OwogCX0KIAkvKiBSZW1v dmUgaXQgZnJvbSB0aGUgcXVldWUgKi8KIAlpZnF0ID0gaWZtLT5pZnFfcHJldjsKLQlyZW1xdWUo aWZtKTsKLQktLWlmX3F1ZXVlZDsKKwlyZW1xdWUocywgaWZtKTsKKwktLXMtPmlmX3F1ZXVlZDsK IAogCS8qIElmIHRoZXJlIGFyZSBtb3JlIHBhY2tldHMgZm9yIHRoaXMgc2Vzc2lvbiwgcmUtcXVl dWUgdGhlbSAqLwogCWlmIChpZm0tPmlmc19uZXh0ICE9IC8qIGlmbS0+aWZzX3ByZXYgIT0gKi8g aWZtKSB7Ci0JCWluc3F1ZShpZm0tPmlmc19uZXh0LCBpZnF0KTsKKwkJaW5zcXVlKHMsIGlmbS0+ aWZzX25leHQsIGlmcXQpOwogCQlpZnNfcmVtcXVlKGlmbSk7CiAJfQogCkBAIC0zMTMsMTAgKzI5 OSwxMCBAQAogCX0KIAogCS8qIEVuY2Fwc3VsYXRlIHRoZSBwYWNrZXQgZm9yIHNlbmRpbmcgKi8K LSAgICAgICAgaWZfZW5jYXAoaWZtLT5tX2RhdGEsIGlmbS0+bV9sZW4pOworICAgICAgICBpZl9l bmNhcChzLCAoY29uc3QgdWludDhfdCAqKWlmbS0+bV9kYXRhLCBpZm0tPm1fbGVuKTsKIAotICAg ICAgICBtX2ZyZWUoaWZtKTsKKyAgICAgICAgbV9mcmVlKHMsIGlmbSk7CiAKLQlpZiAoaWZfcXVl dWVkKQorCWlmIChzLT5pZl9xdWV1ZWQpCiAJICAgZ290byBhZ2FpbjsKIH0KSW5kZXg6IHFlbXUv c2xpcnAvaXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09Ci0tLSBxZW11Lm9yaWcvc2xpcnAvaXAuaAkyMDA3LTEwLTIw IDA3OjMzOjM2LjAwMDAwMDAwMCArMDAwMAorKysgcWVtdS9zbGlycC9pcC5oCTIwMDctMTAtMjAg MDg6MTc6NTEuMDAwMDAwMDAwICswMDAwCkBAIC0zMDUsOSArMzA1LDUgQEAKIAl1X2xvbmcJaXBz X3VuYWxpZ25lZDsJCS8qIHRpbWVzIHRoZSBpcCBwYWNrZXQgd2FzIG5vdCBhbGlnbmVkICovCiB9 OwogCi1leHRlcm4gc3RydWN0CWlwc3RhdAlpcHN0YXQ7Ci1leHRlcm4gc3RydWN0CWlwcQlpcHE7 CQkJLyogaXAgcmVhc3MuIHF1ZXVlICovCi1leHRlcm4gdV9pbnQxNl90CWlwX2lkOwkJCQkvKiBp cCBwYWNrZXQgY3RyLCBmb3IgaWRzICovCi1leHRlcm4gaW50CWlwX2RlZnR0bDsJCQkvKiBkZWZh dWx0IElQIHR0bCAqLwogCiAjZW5kaWYKSW5kZXg6IHFlbXUvc2xpcnAvaXBfaWNtcC5jCj09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KLS0tIHFlbXUub3JpZy9zbGlycC9pcF9pY21wLmMJMjAwNy0xMC0yMCAwNzozMzozNi4w MDAwMDAwMDAgKzAwMDAKKysrIHFlbXUvc2xpcnAvaXBfaWNtcC5jCTIwMDctMTAtMjAgMTM6MTQ6 MDAuMDAwMDAwMDAwICswMDAwCkBAIC0zNywxNCArMzcsMTMgQEAKICNpbmNsdWRlICJzbGlycC5o IgogI2luY2x1ZGUgImlwX2ljbXAuaCIKIAotc3RydWN0IGljbXBzdGF0IGljbXBzdGF0OwogCiAv KiBUaGUgbWVzc2FnZSBzZW50IHdoZW4gZW11bGF0aW5nIFBJTkcgKi8KLS8qIEJlIG5pY2UgYW5k IHRlbGwgdGhlbSBpdCdzIGp1c3QgYSBwc3VlZG8tcGluZyBwYWNrZXQgKi8KLWNoYXIgaWNtcF9w aW5nX21zZ1tdID0gIlRoaXMgaXMgYSBwc3VlZG8tUElORyBwYWNrZXQgdXNlZCBieSBTbGlycCB0 byBlbXVsYXRlIElDTVAgRUNITy1SRVFVRVNUIHBhY2tldHMuXG4iOworLyogQmUgbmljZSBhbmQg dGVsbCB0aGVtIGl0J3MganVzdCBhIHBzZXVkby1waW5nIHBhY2tldCAqLworc3RhdGljIGNvbnN0 IGNoYXIgaWNtcF9waW5nX21zZ1tdID0gIlRoaXMgaXMgYSBwc2V1ZG8tUElORyBwYWNrZXQgdXNl ZCBieSBTbGlycCB0byBlbXVsYXRlIElDTVAgRUNITy1SRVFVRVNUIHBhY2tldHMuXG4iOwogCiAv KiBsaXN0IG9mIGFjdGlvbnMgZm9yIGljbXBfZXJyb3IoKSBvbiBSWCBvZiBhbiBpY21wIG1lc3Nh Z2UgKi8KLXN0YXRpYyBpbnQgaWNtcF9mbHVzaFsxOV0gPSB7CitzdGF0aWMgY29uc3QgaW50IGlj bXBfZmx1c2hbMTldID0gewogLyogIEVDSE8gUkVQTFkgKDApICAqLyAgIDAsCiAJCSAgICAgICAg IDEsCiAJCSAgICAgICAgIDEsCkBAIC03MCw5ICs2OSw3IEBACiAgKiBQcm9jZXNzIGEgcmVjZWl2 ZWQgSUNNUCBtZXNzYWdlLgogICovCiB2b2lkCi1pY21wX2lucHV0KG0sIGhsZW4pCi0gICAgIHN0 cnVjdCBtYnVmICptOwotICAgICBpbnQgaGxlbjsKK2ljbXBfaW5wdXQoc2xpcnBfc3RhdGVfdCAq cywgc3RydWN0IG1idWYgKm0sIGludCBobGVuKQogewogICByZWdpc3RlciBzdHJ1Y3QgaWNtcCAq aWNwOwogICByZWdpc3RlciBzdHJ1Y3QgaXAgKmlwPW10b2QobSwgc3RydWN0IGlwICopOwpAQCAt ODMsMTYgKzgwLDE2IEBACiAgIERFQlVHX0FSRygibSA9ICVseCIsIChsb25nICltKTsKICAgREVC VUdfQVJHKCJtX2xlbiA9ICVkIiwgbS0+bV9sZW4pOwogCi0gIGljbXBzdGF0LmljcHNfcmVjZWl2 ZWQrKzsKKyAgcy0+aWNtcHN0YXQuaWNwc19yZWNlaXZlZCsrOwogCiAgIC8qCiAgICAqIExvY2F0 ZSBpY21wIHN0cnVjdHVyZSBpbiBtYnVmLCBhbmQgY2hlY2sKICAgICogdGhhdCBpdHMgbm90IGNv cnJ1cHRlZCBhbmQgb2YgYXQgbGVhc3QgbWluaW11bSBsZW5ndGguCiAgICAqLwogICBpZiAoaWNt cGxlbiA8IElDTVBfTUlOTEVOKSB7ICAgICAgICAgIC8qIG1pbiA4IGJ5dGVzIHBheWxvYWQgKi8K LSAgICBpY21wc3RhdC5pY3BzX3Rvb3Nob3J0Kys7CisgICAgcy0+aWNtcHN0YXQuaWNwc190b29z aG9ydCsrOwogICBmcmVlaXQ6Ci0gICAgbV9mcmVlbShtKTsKKyAgICBtX2ZyZWVtKHMsIG0pOwog ICAgIGdvdG8gZW5kX2Vycm9yOwogICB9CiAKQEAgLTEwMCw3ICs5Nyw3IEBACiAgIG0tPm1fZGF0 YSArPSBobGVuOwogICBpY3AgPSBtdG9kKG0sIHN0cnVjdCBpY21wICopOwogICBpZiAoY2tzdW0o bSwgaWNtcGxlbikpIHsKLSAgICBpY21wc3RhdC5pY3BzX2NoZWNrc3VtKys7CisgICAgcy0+aWNt cHN0YXQuaWNwc19jaGVja3N1bSsrOwogICAgIGdvdG8gZnJlZWl0OwogICB9CiAgIG0tPm1fbGVu ICs9IGhsZW47CkBAIC0xMTQsMTcgKzExMSwxNyBAQAogICBjYXNlIElDTVBfRUNITzoKICAgICBp Y3AtPmljbXBfdHlwZSA9IElDTVBfRUNIT1JFUExZOwogICAgIGlwLT5pcF9sZW4gKz0gaGxlbjsJ ICAgICAgICAgICAgIC8qIHNpbmNlIGlwX2lucHV0IHN1YnRyYWN0cyB0aGlzICovCi0gICAgaWYg KGlwLT5pcF9kc3Quc19hZGRyID09IGFsaWFzX2FkZHIuc19hZGRyKSB7Ci0gICAgICBpY21wX3Jl ZmxlY3QobSk7CisgICAgaWYgKGlwLT5pcF9kc3Quc19hZGRyID09IHMtPmFsaWFzX2FkZHIuc19h ZGRyKSB7CisgICAgICBpY21wX3JlZmxlY3QocywgbSk7CiAgICAgfSBlbHNlIHsKICAgICAgIHN0 cnVjdCBzb2NrZXQgKnNvOwogICAgICAgc3RydWN0IHNvY2thZGRyX2luIGFkZHI7CiAgICAgICBp ZiAoKHNvID0gc29jcmVhdGUoKSkgPT0gTlVMTCkgZ290byBmcmVlaXQ7Ci0gICAgICBpZih1ZHBf YXR0YWNoKHNvKSA9PSAtMSkgeworICAgICAgaWYodWRwX2F0dGFjaChzLCBzbykgPT0gLTEpIHsK IAlERUJVR19NSVNDKChkZmQsImljbXBfaW5wdXQgdWRwX2F0dGFjaCBlcnJubyA9ICVkLSVzXG4i LAogCQkgICAgZXJybm8sc3RyZXJyb3IoZXJybm8pKSk7Ci0Jc29mcmVlKHNvKTsKLQltX2ZyZWUo bSk7CisJc29mcmVlKHMsIHNvKTsKKwltX2ZyZWUocywgbSk7CiAJZ290byBlbmRfZXJyb3I7CiAg ICAgICB9CiAgICAgICBzby0+c29fbSA9IG07CkBAIC0xMzgsMTUgKzEzNSwxNSBAQAogCiAgICAg ICAvKiBTZW5kIHRoZSBwYWNrZXQgKi8KICAgICAgIGFkZHIuc2luX2ZhbWlseSA9IEFGX0lORVQ7 Ci0gICAgICBpZiAoKHNvLT5zb19mYWRkci5zX2FkZHIgJiBodG9ubCgweGZmZmZmZjAwKSkgPT0g c3BlY2lhbF9hZGRyLnNfYWRkcikgeworICAgICAgaWYgKChzby0+c29fZmFkZHIuc19hZGRyICYg aHRvbmwoMHhmZmZmZmYwMCkpID09IHMtPnNwZWNpYWxfYWRkci5zX2FkZHIpIHsKIAkvKiBJdCdz IGFuIGFsaWFzICovCiAJc3dpdGNoKG50b2hsKHNvLT5zb19mYWRkci5zX2FkZHIpICYgMHhmZikg ewogCWNhc2UgQ1RMX0ROUzoKLQkgIGFkZHIuc2luX2FkZHIgPSBkbnNfYWRkcjsKKwkgIGFkZHIu c2luX2FkZHIgPSBzLT5kbnNfYWRkcjsKIAkgIGJyZWFrOwogCWNhc2UgQ1RMX0FMSUFTOgogCWRl ZmF1bHQ6Ci0JICBhZGRyLnNpbl9hZGRyID0gbG9vcGJhY2tfYWRkcjsKKwkgIGFkZHIuc2luX2Fk ZHIgPSBzLT5sb29wYmFja19hZGRyOwogCSAgYnJlYWs7CiAJfQogICAgICAgfSBlbHNlIHsKQEAg LTE1Nyw4ICsxNTQsOCBAQAogCQkoc3RydWN0IHNvY2thZGRyICopJmFkZHIsIHNpemVvZihhZGRy KSkgPT0gLTEpIHsKIAlERUJVR19NSVNDKChkZmQsImljbXBfaW5wdXQgdWRwIHNlbmR0byB0eCBl cnJubyA9ICVkLSVzXG4iLAogCQkgICAgZXJybm8sc3RyZXJyb3IoZXJybm8pKSk7Ci0JaWNtcF9l cnJvcihtLCBJQ01QX1VOUkVBQ0gsSUNNUF9VTlJFQUNIX05FVCwgMCxzdHJlcnJvcihlcnJubykp OwotCXVkcF9kZXRhY2goc28pOworCWljbXBfZXJyb3IocywgbSwgSUNNUF9VTlJFQUNILElDTVBf VU5SRUFDSF9ORVQsIDAsc3RyZXJyb3IoZXJybm8pKTsKKwl1ZHBfZGV0YWNoKHMsIHNvKTsKICAg ICAgIH0KICAgICB9IC8qIGlmIGlwLT5pcF9kc3Quc19hZGRyID09IGFsaWFzX2FkZHIuc19hZGRy ICovCiAgICAgYnJlYWs7CkBAIC0xNzAsMTMgKzE2NywxMyBAQAogICBjYXNlIElDTVBfVFNUQU1Q OgogICBjYXNlIElDTVBfTUFTS1JFUToKICAgY2FzZSBJQ01QX1JFRElSRUNUOgotICAgIGljbXBz dGF0LmljcHNfbm90c3VwcCsrOwotICAgIG1fZnJlZW0obSk7CisgICAgcy0+aWNtcHN0YXQuaWNw c19ub3RzdXBwKys7CisgICAgbV9mcmVlbShzLCBtKTsKICAgICBicmVhazsKIAogICBkZWZhdWx0 OgotICAgIGljbXBzdGF0LmljcHNfYmFkdHlwZSsrOwotICAgIG1fZnJlZW0obSk7CisgICAgcy0+ aWNtcHN0YXQuaWNwc19iYWR0eXBlKys7CisgICAgbV9mcmVlbShzLCBtKTsKICAgfSAvKiBzd2l0 aCAqLwogCiBlbmRfZXJyb3I6CkBAIC0yMDQsMTMgKzIwMSw4IEBACiAgKi8KIAogI2RlZmluZSBJ Q01QX01BWERBVEFMRU4gKElQX01TUy0yOCkKLXZvaWQKLWljbXBfZXJyb3IobXNyYywgdHlwZSwg Y29kZSwgbWluc2l6ZSwgbWVzc2FnZSkKLSAgICAgc3RydWN0IG1idWYgKm1zcmM7Ci0gICAgIHVf Y2hhciB0eXBlOwotICAgICB1X2NoYXIgY29kZTsKLSAgICAgaW50IG1pbnNpemU7Ci0gICAgIGNo YXIgKm1lc3NhZ2U7Cit2b2lkIGljbXBfZXJyb3Ioc2xpcnBfc3RhdGVfdCAqcywgc3RydWN0IG1i dWYgKm1zcmMsIHVfY2hhciB0eXBlLCB1X2NoYXIgY29kZSwKKyAgICAgICAgICAgICAgICBpbnQg bWluc2l6ZSwgY29uc3QgY2hhciAqbWVzc2FnZSkKIHsKICAgdW5zaWduZWQgaGxlbiwgc2hsZW4s IHNfaXBfbGVuOwogICByZWdpc3RlciBzdHJ1Y3QgaXAgKmlwOwpAQCAtMjQ3LDEwICsyMzksMTMg QEAKICAgfQogCiAgIC8qIG1ha2UgYSBjb3B5ICovCi0gIGlmKCEobT1tX2dldCgpKSkgZ290byBl bmRfZXJyb3I7ICAgICAgICAgICAgICAgLyogZ2V0IG1idWYgKi8KKyAgaWYgKCEobSA9IG1fZ2V0 KHMpKSkKKyAgICAgIGdvdG8gZW5kX2Vycm9yOyAgICAgICAgICAgICAgIC8qIGdldCBtYnVmICov CisKICAgeyBpbnQgbmV3X21fc2l6ZTsKICAgICBuZXdfbV9zaXplPXNpemVvZihzdHJ1Y3QgaXAg KStJQ01QX01JTkxFTittc3JjLT5tX2xlbitJQ01QX01BWERBVEFMRU47Ci0gICAgaWYobmV3X21f c2l6ZT5tLT5tX3NpemUpIG1faW5jKG0sIG5ld19tX3NpemUpOworICAgIGlmIChuZXdfbV9zaXpl ID4gbS0+bV9zaXplKQorICAgICAgICBtX2luYyhtLCBuZXdfbV9zaXplKTsKICAgfQogICBtZW1j cHkobS0+bV9kYXRhLCBtc3JjLT5tX2RhdGEsIG1zcmMtPm1fbGVuKTsKICAgbS0+bV9sZW4gPSBt c3JjLT5tX2xlbjsgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb3B5IG1zcmMgdG8gbSAqLwpA QCAtMzEwLDExICszMDUsMTEgQEAKICAgaXAtPmlwX3R0bCA9IE1BWFRUTDsKICAgaXAtPmlwX3Ag PSBJUFBST1RPX0lDTVA7CiAgIGlwLT5pcF9kc3QgPSBpcC0+aXBfc3JjOyAgICAvKiBpcCBhZHJl c3NlcyAqLwotICBpcC0+aXBfc3JjID0gYWxpYXNfYWRkcjsKKyAgaXAtPmlwX3NyYyA9IHMtPmFs aWFzX2FkZHI7CiAKLSAgKHZvaWQgKSBpcF9vdXRwdXQoKHN0cnVjdCBzb2NrZXQgKilOVUxMLCBt KTsKKyAgKHZvaWQgKSBpcF9vdXRwdXQocywgKHN0cnVjdCBzb2NrZXQgKilOVUxMLCBtKTsKIAot ICBpY21wc3RhdC5pY3BzX3JlZmxlY3QrKzsKKyAgcy0+aWNtcHN0YXQuaWNwc19yZWZsZWN0Kys7 CiAKIGVuZF9lcnJvcjoKICAgcmV0dXJuOwpAQCAtMzI1LDggKzMyMCw3IEBACiAgKiBSZWZsZWN0 IHRoZSBpcCBwYWNrZXQgYmFjayB0byB0aGUgc291cmNlCiAgKi8KIHZvaWQKLWljbXBfcmVmbGVj dChtKQotICAgICBzdHJ1Y3QgbWJ1ZiAqbTsKK2ljbXBfcmVmbGVjdChzbGlycF9zdGF0ZV90ICpz LCBzdHJ1Y3QgbWJ1ZiAqbSkKIHsKICAgcmVnaXN0ZXIgc3RydWN0IGlwICppcCA9IG10b2QobSwg c3RydWN0IGlwICopOwogICBpbnQgaGxlbiA9IGlwLT5pcF9obCA8PCAyOwpAQCAtMzY5LDcgKzM2 Myw3IEBACiAgICAgaXAtPmlwX3NyYyA9IGljbXBfZHN0OwogICB9CiAKLSAgKHZvaWQgKSBpcF9v dXRwdXQoKHN0cnVjdCBzb2NrZXQgKilOVUxMLCBtKTsKKyAgKHZvaWQgKSBpcF9vdXRwdXQocywg KHN0cnVjdCBzb2NrZXQgKilOVUxMLCBtKTsKIAotICBpY21wc3RhdC5pY3BzX3JlZmxlY3QrKzsK KyAgcy0+aWNtcHN0YXQuaWNwc19yZWZsZWN0Kys7CiB9CkluZGV4OiBxZW11L3NsaXJwL2lwX2lj bXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09Ci0tLSBxZW11Lm9yaWcvc2xpcnAvaXBfaWNtcC5oCTIwMDctMTAtMjAg MDc6MzM6MzYuMDAwMDAwMDAwICswMDAwCisrKyBxZW11L3NsaXJwL2lwX2ljbXAuaAkyMDA3LTEw LTIwIDEzOjE1OjI3LjAwMDAwMDAwMCArMDAwMApAQCAtMTU3LDggKzE1Nyw5IEBACiAJKHR5cGUp ID09IElDTVBfSVJFUSB8fCAodHlwZSkgPT0gSUNNUF9JUkVRUkVQTFkgfHwgXAogCSh0eXBlKSA9 PSBJQ01QX01BU0tSRVEgfHwgKHR5cGUpID09IElDTVBfTUFTS1JFUExZKQogCi12b2lkIGljbXBf aW5wdXQgX1AoKHN0cnVjdCBtYnVmICosIGludCkpOwotdm9pZCBpY21wX2Vycm9yIF9QKChzdHJ1 Y3QgbWJ1ZiAqLCB1X2NoYXIsIHVfY2hhciwgaW50LCBjaGFyICopKTsKLXZvaWQgaWNtcF9yZWZs ZWN0IF9QKChzdHJ1Y3QgbWJ1ZiAqKSk7Cit2b2lkIGljbXBfaW5wdXQoc2xpcnBfc3RhdGVfdCAq cywgc3RydWN0IG1idWYgKm0sIGludCBobGVuKTsKK3ZvaWQgaWNtcF9lcnJvcihzbGlycF9zdGF0 ZV90ICpzLCBzdHJ1Y3QgbWJ1ZiAqbXNyYywgdV9jaGFyIHR5cGUsIHVfY2hhciBjb2RlLAorICAg ICAgICAgICAgICAgIGludCBtaW5zaXplLCBjb25zdCBjaGFyICptZXNzYWdlKTsKK3ZvaWQgaWNt cF9yZWZsZWN0KHNsaXJwX3N0YXRlX3QgKnMsIHN0cnVjdCBtYnVmICptKTsKIAogI2VuZGlmCklu ZGV4OiBxZW11L3NsaXJwL2lwX2lucHV0LmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcWVtdS5vcmlnL3NsaXJw L2lwX2lucHV0LmMJMjAwNy0xMC0yMCAwNzozMzozNi4wMDAwMDAwMDAgKzAwMDAKKysrIHFlbXUv c2xpcnAvaXBfaW5wdXQuYwkyMDA3LTEwLTIwIDEzOjE4OjM4LjAwMDAwMDAwMCArMDAwMApAQCAt NDUsMjIgKzQ1LDI1IEBACiAjaW5jbHVkZSA8c2xpcnAuaD4KICNpbmNsdWRlICJpcF9pY21wLmgi CiAKLWludCBpcF9kZWZ0dGw7Ci1zdHJ1Y3QgaXBzdGF0IGlwc3RhdDsKLXN0cnVjdCBpcHEgaXBx OworCitzdGF0aWMgc3RydWN0IGlwICppcF9yZWFzcyhzbGlycF9zdGF0ZV90ICpzLCByZWdpc3Rl ciBzdHJ1Y3QgaXBhc2ZyYWcgKmlwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0 ZXIgc3RydWN0IGlwcSAqZnApOworc3RhdGljIHZvaWQgaXBfZnJlZWYoc2xpcnBfc3RhdGVfdCAq cywgc3RydWN0IGlwcSAqZnApOworc3RhdGljIHZvaWQgaXBfZW5xKHNsaXJwX3N0YXRlX3QgKnMs IHJlZ2lzdGVyIHN0cnVjdCBpcGFzZnJhZyAqcCwKKyAgICAgICAgICAgICAgICAgICByZWdpc3Rl ciBzdHJ1Y3QgaXBhc2ZyYWcgKnByZXYpOworc3RhdGljIHZvaWQgaXBfZGVxKHNsaXJwX3N0YXRl X3QgKnMsIHJlZ2lzdGVyIHN0cnVjdCBpcGFzZnJhZyAqcCk7CiAKIC8qCiAgKiBJUCBpbml0aWFs aXphdGlvbjogZmlsbCBpbiBJUCBwcm90b2NvbCBzd2l0Y2ggdGFibGUuCiAgKiBBbGwgcHJvdG9j b2xzIG5vdCBpbXBsZW1lbnRlZCBpbiBrZXJuZWwgZ28gdG8gcmF3IElQIHByb3RvY29sIGhhbmRs ZXIuCiAgKi8KIHZvaWQKLWlwX2luaXQoKQoraXBfaW5pdChzbGlycF9zdGF0ZV90ICpzKQogewot CWlwcS5uZXh0ID0gaXBxLnByZXYgPSAoaXBxcF8zMikmaXBxOwotCWlwX2lkID0gdHQudHZfc2Vj ICYgMHhmZmZmOwotCXVkcF9pbml0KCk7Ci0JdGNwX2luaXQoKTsKLQlpcF9kZWZ0dGwgPSBJUERF RlRUTDsKKwlzLT5pcHEubmV4dCA9IHMtPmlwcS5wcmV2ID0gKGlwcXBfMzIpJihzLT5pcHEpOwor CXMtPmlwX2lkID0gcy0+dHQudHZfc2VjICYgMHhmZmZmOworCXVkcF9pbml0KHMpOworCXRjcF9p bml0KHMpOwogfQogCiAvKgpAQCAtNjgsOCArNzEsNyBAQAogICogdHJ5IHRvIHJlYXNzZW1ibGUu ICBQcm9jZXNzIG9wdGlvbnMuICBQYXNzIHRvIG5leHQgbGV2ZWwuCiAgKi8KIHZvaWQKLWlwX2lu cHV0KG0pCi0Jc3RydWN0IG1idWYgKm07CitpcF9pbnB1dChzbGlycF9zdGF0ZV90ICpzLCBzdHJ1 Y3QgbWJ1ZiAqbSkKIHsKIAlyZWdpc3RlciBzdHJ1Y3QgaXAgKmlwOwogCWludCBobGVuOwpAQCAt NzgsMjMgKzgwLDIzIEBACiAJREVCVUdfQVJHKCJtID0gJWx4IiwgKGxvbmcpbSk7CiAJREVCVUdf QVJHKCJtX2xlbiA9ICVkIiwgbS0+bV9sZW4pOwogCi0JaXBzdGF0Lmlwc190b3RhbCsrOworCXMt Pmlwc3RhdC5pcHNfdG90YWwrKzsKIAogCWlmIChtLT5tX2xlbiA8IHNpemVvZiAoc3RydWN0IGlw KSkgewotCQlpcHN0YXQuaXBzX3Rvb3NtYWxsKys7CisJCXMtPmlwc3RhdC5pcHNfdG9vc21hbGwr KzsKIAkJcmV0dXJuOwogCX0KIAogCWlwID0gbXRvZChtLCBzdHJ1Y3QgaXAgKik7CiAKIAlpZiAo aXAtPmlwX3YgIT0gSVBWRVJTSU9OKSB7Ci0JCWlwc3RhdC5pcHNfYmFkdmVycysrOworCQlzLT5p cHN0YXQuaXBzX2JhZHZlcnMrKzsKIAkJZ290byBiYWQ7CiAJfQogCiAJaGxlbiA9IGlwLT5pcF9o bCA8PCAyOwogCWlmIChobGVuPHNpemVvZihzdHJ1Y3QgaXAgKSB8fCBobGVuPm0tPm1fbGVuKSB7 LyogbWluIGhlYWRlciBsZW5ndGggKi8KLQkgIGlwc3RhdC5pcHNfYmFkaGxlbisrOyAgICAgICAg ICAgICAgICAgICAgIC8qIG9yIHBhY2tldCB0b28gc2hvcnQgKi8KKwkgIHMtPmlwc3RhdC5pcHNf YmFkaGxlbisrOyAgICAgICAgICAgICAgICAgICAgIC8qIG9yIHBhY2tldCB0b28gc2hvcnQgKi8K IAkgIGdvdG8gYmFkOwogCX0KIApAQCAtMTAzLDcgKzEwNSw3IEBACiAJICogaWYgKGlwLT5pcF9z dW0pIHsKIAkgKi8KIAlpZihja3N1bShtLGhsZW4pKSB7Ci0JICBpcHN0YXQuaXBzX2JhZHN1bSsr OworCSAgcy0+aXBzdGF0Lmlwc19iYWRzdW0rKzsKIAkgIGdvdG8gYmFkOwogCX0KIApAQCAtMTEy LDcgKzExNCw3IEBACiAJICovCiAJTlRPSFMoaXAtPmlwX2xlbik7CiAJaWYgKGlwLT5pcF9sZW4g PCBobGVuKSB7Ci0JCWlwc3RhdC5pcHNfYmFkbGVuKys7CisJCXMtPmlwc3RhdC5pcHNfYmFkbGVu Kys7CiAJCWdvdG8gYmFkOwogCX0KIAlOVE9IUyhpcC0+aXBfaWQpOwpAQCAtMTI1LDcgKzEyNyw3 IEBACiAJICogRHJvcCBwYWNrZXQgaWYgc2hvcnRlciB0aGFuIHdlIGV4cGVjdC4KIAkgKi8KIAlp ZiAobS0+bV9sZW4gPCBpcC0+aXBfbGVuKSB7Ci0JCWlwc3RhdC5pcHNfdG9vc2hvcnQrKzsKKwkJ cy0+aXBzdGF0Lmlwc190b29zaG9ydCsrOwogCQlnb3RvIGJhZDsKIAl9CiAJLyogU2hvdWxkIGRy b3AgcGFja2V0IGlmIG1idWYgdG9vIGxvbmc/IGhtbW0uLi4gKi8KQEAgLTEzNCw3ICsxMzYsNyBA QAogCiAJLyogY2hlY2sgaXBfdHRsIGZvciBhIGNvcnJlY3QgSUNNUCByZXBseSAqLwogCWlmKGlw LT5pcF90dGw9PTAgfHwgaXAtPmlwX3R0bD09MSkgewotCSAgaWNtcF9lcnJvcihtLCBJQ01QX1RJ TVhDRUVELElDTVBfVElNWENFRURfSU5UUkFOUywgMCwidHRsIik7CisJICBpY21wX2Vycm9yKHMs IG0sIElDTVBfVElNWENFRUQsSUNNUF9USU1YQ0VFRF9JTlRSQU5TLCAwLCJ0dGwiKTsKIAkgIGdv dG8gYmFkOwogCX0KIApAQCAtMTYzLDcgKzE2NSw3IEBACiAJCSAqIExvb2sgZm9yIHF1ZXVlIG9m IGZyYWdtZW50cwogCQkgKiBvZiB0aGlzIGRhdGFncmFtLgogCQkgKi8KLQkJZm9yIChmcCA9IChz dHJ1Y3QgaXBxICopIGlwcS5uZXh0OyBmcCAhPSAmaXBxOworCQlmb3IgKGZwID0gKHN0cnVjdCBp cHEgKikgcy0+aXBxLm5leHQ7IGZwICE9ICZzLT5pcHE7CiAJCSAgICAgZnAgPSAoc3RydWN0IGlw cSAqKSBmcC0+bmV4dCkKIAkJICBpZiAoaXAtPmlwX2lkID09IGZwLT5pcHFfaWQgJiYKIAkJICAg ICAgaXAtPmlwX3NyYy5zX2FkZHIgPT0gZnAtPmlwcV9zcmMuc19hZGRyICYmCkBAIC0xOTIsMTUg KzE5NCwxNSBAQAogCQkgKiBhdHRlbXB0IHJlYXNzZW1ibHk7IGlmIGl0IHN1Y2NlZWRzLCBwcm9j ZWVkLgogCQkgKi8KIAkJaWYgKCgoc3RydWN0IGlwYXNmcmFnICopaXApLT5pcGZfbWZmICYgMSB8 fCBpcC0+aXBfb2ZmKSB7Ci0JCQlpcHN0YXQuaXBzX2ZyYWdtZW50cysrOwotCQkJaXAgPSBpcF9y ZWFzcygoc3RydWN0IGlwYXNmcmFnICopaXAsIGZwKTsKKwkJCXMtPmlwc3RhdC5pcHNfZnJhZ21l bnRzKys7CisJCQlpcCA9IGlwX3JlYXNzKHMsIChzdHJ1Y3QgaXBhc2ZyYWcgKilpcCwgZnApOwog CQkJaWYgKGlwID09IDApCiAJCQkJcmV0dXJuOwotCQkJaXBzdGF0Lmlwc19yZWFzc2VtYmxlZCsr OwotCQkJbSA9IGR0b20oaXApOworCQkJcy0+aXBzdGF0Lmlwc19yZWFzc2VtYmxlZCsrOworCQkJ bSA9IGR0b20ocywgaXApOwogCQl9IGVsc2UKIAkJCWlmIChmcCkKLQkJICAgCSAgIGlwX2ZyZWVm KGZwKTsKKwkJICAgCSAgIGlwX2ZyZWVmKHMsIGZwKTsKIAogCX0gZWxzZQogCQlpcC0+aXBfbGVu IC09IGhsZW47CkBAIC0yMDgsMjQgKzIxMCwyNCBAQAogCS8qCiAJICogU3dpdGNoIG91dCB0byBw cm90b2NvbCdzIGlucHV0IHJvdXRpbmUuCiAJICovCi0JaXBzdGF0Lmlwc19kZWxpdmVyZWQrKzsK KwlzLT5pcHN0YXQuaXBzX2RlbGl2ZXJlZCsrOwogCXN3aXRjaCAoaXAtPmlwX3ApIHsKIAkgY2Fz ZSBJUFBST1RPX1RDUDoKLQkJdGNwX2lucHV0KG0sIGhsZW4sIChzdHJ1Y3Qgc29ja2V0ICopTlVM TCk7CisJCXRjcF9pbnB1dChzLCBtLCBobGVuLCAoc3RydWN0IHNvY2tldCAqKU5VTEwpOwogCQli cmVhazsKIAkgY2FzZSBJUFBST1RPX1VEUDoKLQkJdWRwX2lucHV0KG0sIGhsZW4pOworCQl1ZHBf aW5wdXQocywgbSwgaGxlbik7CiAJCWJyZWFrOwogCSBjYXNlIElQUFJPVE9fSUNNUDoKLQkJaWNt cF9pbnB1dChtLCBobGVuKTsKKwkJaWNtcF9pbnB1dChzLCBtLCBobGVuKTsKIAkJYnJlYWs7CiAJ IGRlZmF1bHQ6Ci0JCWlwc3RhdC5pcHNfbm9wcm90bysrOwotCQltX2ZyZWUobSk7CisJCXMtPmlw c3RhdC5pcHNfbm9wcm90bysrOworCQltX2ZyZWUocywgbSk7CiAJfQogCXJldHVybjsKIGJhZDoK LQltX2ZyZWVtKG0pOworCW1fZnJlZW0ocywgbSk7CiAJcmV0dXJuOwogfQogCkBAIC0yMzUsMTIg KzIzNywxMSBAQAogICogcmVhc3NlbWJseSBvZiB0aGlzIGRhdGFncmFtIGFscmVhZHkgZXhpc3Rz LCB0aGVuIGl0CiAgKiBpcyBnaXZlbiBhcyBmcDsgb3RoZXJ3aXNlIGhhdmUgdG8gbWFrZSBhIGNo YWluLgogICovCi1zdHJ1Y3QgaXAgKgotaXBfcmVhc3MoaXAsIGZwKQotCXJlZ2lzdGVyIHN0cnVj dCBpcGFzZnJhZyAqaXA7Ci0JcmVnaXN0ZXIgc3RydWN0IGlwcSAqZnA7CitzdGF0aWMgc3RydWN0 IGlwICoKK2lwX3JlYXNzKHNsaXJwX3N0YXRlX3QgKnMsIHJlZ2lzdGVyIHN0cnVjdCBpcGFzZnJh ZyAqaXAsCisgICAgICAgICByZWdpc3RlciBzdHJ1Y3QgaXBxICpmcCkKIHsKLQlyZWdpc3RlciBz dHJ1Y3QgbWJ1ZiAqbSA9IGR0b20oaXApOworCXJlZ2lzdGVyIHN0cnVjdCBtYnVmICptID0gZHRv bShzLCBpcCk7CiAJcmVnaXN0ZXIgc3RydWN0IGlwYXNmcmFnICpxOwogCWludCBobGVuID0gaXAt PmlwX2hsIDw8IDI7CiAJaW50IGksIG5leHQ7CkBAIC0yNjMsOSArMjY0LDEwIEBACiAJICovCiAJ aWYgKGZwID09IDApIHsKIAkgIHN0cnVjdCBtYnVmICp0OwotCSAgaWYgKCh0ID0gbV9nZXQoKSkg PT0gTlVMTCkgZ290byBkcm9wZnJhZzsKKwkgIGlmICgodCA9IG1fZ2V0KHMpKSA9PSBOVUxMKQor ICAgICAgICAgICAgICBnb3RvIGRyb3BmcmFnOwogCSAgZnAgPSBtdG9kKHQsIHN0cnVjdCBpcHEg Kik7Ci0JICBpbnNxdWVfMzIoZnAsICZpcHEpOworCSAgaW5zcXVlXzMyKHMsIGZwLCAmcy0+aXBx KTsKIAkgIGZwLT5pcHFfdHRsID0gSVBGUkFHVFRMOwogCSAgZnAtPmlwcV9wID0gaXAtPmlwX3A7 CiAJICBmcC0+aXBxX2lkID0gaXAtPmlwX2lkOwpAQCAtMjk1LDcgKzI5Nyw3IEBACiAJCWlmIChp ID4gMCkgewogCQkJaWYgKGkgPj0gaXAtPmlwX2xlbikKIAkJCQlnb3RvIGRyb3BmcmFnOwotCQkJ bV9hZGooZHRvbShpcCksIGkpOworCQkJbV9hZGooZHRvbShzLCBpcCksIGkpOwogCQkJaXAtPmlw X29mZiArPSBpOwogCQkJaXAtPmlwX2xlbiAtPSBpOwogCQl9CkBAIC0zMTAsMTIgKzMxMiwxMiBA QAogCQlpZiAoaSA8IHEtPmlwX2xlbikgewogCQkJcS0+aXBfbGVuIC09IGk7CiAJCQlxLT5pcF9v ZmYgKz0gaTsKLQkJCW1fYWRqKGR0b20ocSksIGkpOworCQkJbV9hZGooZHRvbShzLCBxKSwgaSk7 CiAJCQlicmVhazsKIAkJfQogCQlxID0gKHN0cnVjdCBpcGFzZnJhZyAqKSBxLT5pcGZfbmV4dDsK LQkJbV9mcmVlbShkdG9tKChzdHJ1Y3QgaXBhc2ZyYWcgKikgcS0+aXBmX3ByZXYpKTsKLQkJaXBf ZGVxKChzdHJ1Y3QgaXBhc2ZyYWcgKikgcS0+aXBmX3ByZXYpOworCQltX2ZyZWVtKHMsIGR0b20o cywgKHN0cnVjdCBpcGFzZnJhZyAqKSBxLT5pcGZfcHJldikpOworCQlpcF9kZXEocywgKHN0cnVj dCBpcGFzZnJhZyAqKSBxLT5pcGZfcHJldik7CiAJfQogCiBpbnNlcnQ6CkBAIC0zMjMsNyArMzI1 LDcgQEAKIAkgKiBTdGljayBuZXcgc2VnbWVudCBpbiBpdHMgcGxhY2U7CiAJICogY2hlY2sgZm9y IGNvbXBsZXRlIHJlYXNzZW1ibHkuCiAJICovCi0JaXBfZW5xKGlwLCAoc3RydWN0IGlwYXNmcmFn ICopIHEtPmlwZl9wcmV2KTsKKwlpcF9lbnEocywgaXAsIChzdHJ1Y3QgaXBhc2ZyYWcgKikgcS0+ aXBmX3ByZXYpOwogCW5leHQgPSAwOwogCWZvciAocSA9IChzdHJ1Y3QgaXBhc2ZyYWcgKikgZnAt PmlwcV9uZXh0OyBxICE9IChzdHJ1Y3QgaXBhc2ZyYWcgKilmcDsKIAkgICAgIHEgPSAoc3RydWN0 IGlwYXNmcmFnICopIHEtPmlwZl9uZXh0KSB7CkBAIC0zMzgsMTQgKzM0MCwxNCBAQAogCSAqIFJl YXNzZW1ibHkgaXMgY29tcGxldGU7IGNvbmNhdGVuYXRlIGZyYWdtZW50cy4KIAkgKi8KIAlxID0g KHN0cnVjdCBpcGFzZnJhZyAqKSBmcC0+aXBxX25leHQ7Ci0JbSA9IGR0b20ocSk7CisJbSA9IGR0 b20ocywgcSk7CiAKIAlxID0gKHN0cnVjdCBpcGFzZnJhZyAqKSBxLT5pcGZfbmV4dDsKIAl3aGls ZSAocSAhPSAoc3RydWN0IGlwYXNmcmFnICopZnApIHsKIAkgIHN0cnVjdCBtYnVmICp0OwotCSAg dCA9IGR0b20ocSk7CisJICB0ID0gZHRvbShzLCBxKTsKIAkgIHEgPSAoc3RydWN0IGlwYXNmcmFn ICopIHEtPmlwZl9uZXh0OwotCSAgbV9jYXQobSwgdCk7CisJICBtX2NhdChzLCBtLCB0KTsKIAl9 CiAKIAkvKgpAQCAtMzc2LDE3ICszNzgsMTcgQEAKIAlpcC0+aXBmX21mZiAmPSB+MTsKIAkoKHN0 cnVjdCBpcCAqKWlwKS0+aXBfc3JjID0gZnAtPmlwcV9zcmM7CiAJKChzdHJ1Y3QgaXAgKilpcCkt PmlwX2RzdCA9IGZwLT5pcHFfZHN0OwotCXJlbXF1ZV8zMihmcCk7Ci0JKHZvaWQpIG1fZnJlZShk dG9tKGZwKSk7Ci0JbSA9IGR0b20oaXApOworCXJlbXF1ZV8zMihzLCBmcCk7CisJKHZvaWQpIG1f ZnJlZShzLCBkdG9tKHMsIGZwKSk7CisJbSA9IGR0b20ocywgaXApOwogCW0tPm1fbGVuICs9IChp cC0+aXBfaGwgPDwgMik7CiAJbS0+bV9kYXRhIC09IChpcC0+aXBfaGwgPDwgMik7CiAKIAlyZXR1 cm4gKChzdHJ1Y3QgaXAgKilpcCk7CiAKIGRyb3BmcmFnOgotCWlwc3RhdC5pcHNfZnJhZ2Ryb3Bw ZWQrKzsKLQltX2ZyZWVtKG0pOworCXMtPmlwc3RhdC5pcHNfZnJhZ2Ryb3BwZWQrKzsKKwltX2Zy ZWVtKHMsIG0pOwogCXJldHVybiAoMCk7CiB9CiAKQEAgLTM5NCwyOSArMzk2LDI4IEBACiAgKiBG cmVlIGEgZnJhZ21lbnQgcmVhc3NlbWJseSBoZWFkZXIgYW5kIGFsbAogICogYXNzb2NpYXRlZCBk YXRhZ3JhbXMuCiAgKi8KLXZvaWQKLWlwX2ZyZWVmKGZwKQotCXN0cnVjdCBpcHEgKmZwOworc3Rh dGljIHZvaWQKK2lwX2ZyZWVmKHNsaXJwX3N0YXRlX3QgKnMsIHN0cnVjdCBpcHEgKmZwKQogewog CXJlZ2lzdGVyIHN0cnVjdCBpcGFzZnJhZyAqcSwgKnA7CiAKIAlmb3IgKHEgPSAoc3RydWN0IGlw YXNmcmFnICopIGZwLT5pcHFfbmV4dDsgcSAhPSAoc3RydWN0IGlwYXNmcmFnICopZnA7CiAJICAg IHEgPSBwKSB7CiAJCXAgPSAoc3RydWN0IGlwYXNmcmFnICopIHEtPmlwZl9uZXh0OwotCQlpcF9k ZXEocSk7Ci0JCW1fZnJlZW0oZHRvbShxKSk7CisJCWlwX2RlcShzLCBxKTsKKwkJbV9mcmVlbShz LCBkdG9tKHMsIHEpKTsKIAl9Ci0JcmVtcXVlXzMyKGZwKTsKLQkodm9pZCkgbV9mcmVlKGR0b20o ZnApKTsKKwlyZW1xdWVfMzIocywgZnApOworCSh2b2lkKSBtX2ZyZWUocywgZHRvbShzLCBmcCkp OwogfQogCiAvKgogICogUHV0IGFuIGlwIGZyYWdtZW50IG9uIGEgcmVhc3NlbWJseSBjaGFpbi4K ICAqIExpa2UgaW5zcXVlLCBidXQgcG9pbnRlcnMgaW4gbWlkZGxlIG9mIHN0cnVjdHVyZS4KICAq Lwotdm9pZAotaXBfZW5xKHAsIHByZXYpCi0JcmVnaXN0ZXIgc3RydWN0IGlwYXNmcmFnICpwLCAq cHJldjsKK3N0YXRpYyB2b2lkCitpcF9lbnEoc2xpcnBfc3RhdGVfdCAqcywgcmVnaXN0ZXIgc3Ry dWN0IGlwYXNmcmFnICpwLAorICAgICAgIHJlZ2lzdGVyIHN0cnVjdCBpcGFzZnJhZyAqcHJldikK IHsKIAlERUJVR19DQUxMKCJpcF9lbnEiKTsKIAlERUJVR19BUkcoInByZXYgPSAlbHgiLCAobG9u ZylwcmV2KTsKQEAgLTQyOSw5ICs0MzAsOCBAQAogLyoKICAqIFRvIGlwX2VucSBhcyByZW1xdWUg aXMgdG8gaW5zcXVlLgogICovCi12b2lkCi1pcF9kZXEocCkKLQlyZWdpc3RlciBzdHJ1Y3QgaXBh c2ZyYWcgKnA7CitzdGF0aWMgdm9pZAoraXBfZGVxKHNsaXJwX3N0YXRlX3QgKnMsIHJlZ2lzdGVy IHN0cnVjdCBpcGFzZnJhZyAqcCkKIHsKIAkoKHN0cnVjdCBpcGFzZnJhZyAqKShwLT5pcGZfcHJl dikpLT5pcGZfbmV4dCA9IHAtPmlwZl9uZXh0OwogCSgoc3RydWN0IGlwYXNmcmFnICopKHAtPmlw Zl9uZXh0KSktPmlwZl9wcmV2ID0gcC0+aXBmX3ByZXY7CkBAIC00NDMsMjIgKzQ0MywyMiBAQAog ICogcXVldWUsIGRpc2NhcmQgaXQuCiAgKi8KIHZvaWQKLWlwX3Nsb3d0aW1vKCkKK2lwX3Nsb3d0 aW1vKHNsaXJwX3N0YXRlX3QgKnMpCiB7CiAJcmVnaXN0ZXIgc3RydWN0IGlwcSAqZnA7CiAKIAlE RUJVR19DQUxMKCJpcF9zbG93dGltbyIpOwogCi0JZnAgPSAoc3RydWN0IGlwcSAqKSBpcHEubmV4 dDsKKwlmcCA9IChzdHJ1Y3QgaXBxICopIHMtPmlwcS5uZXh0OwogCWlmIChmcCA9PSAwKQogCSAg IHJldHVybjsKIAotCXdoaWxlIChmcCAhPSAmaXBxKSB7CisJd2hpbGUgKGZwICE9ICZzLT5pcHEp IHsKIAkJLS1mcC0+aXBxX3R0bDsKIAkJZnAgPSAoc3RydWN0IGlwcSAqKSBmcC0+bmV4dDsKIAkJ aWYgKCgoc3RydWN0IGlwcSAqKShmcC0+cHJldikpLT5pcHFfdHRsID09IDApIHsKLQkJCWlwc3Rh dC5pcHNfZnJhZ3RpbWVvdXQrKzsKLQkJCWlwX2ZyZWVmKChzdHJ1Y3QgaXBxICopIGZwLT5wcmV2 KTsKKwkJCXMtPmlwc3RhdC5pcHNfZnJhZ3RpbWVvdXQrKzsKKwkJCWlwX2ZyZWVmKHMsIChzdHJ1 Y3QgaXBxICopIGZwLT5wcmV2KTsKIAkJfQogCX0KIH0KQEAgLTY2NCw3ICs2NjQsNyBAQAogLyog Tm90IHlldCAqLwogIAlpY21wX2Vycm9yKG0sIHR5cGUsIGNvZGUsIDAsIDApOwogCi0JaXBzdGF0 Lmlwc19iYWRvcHRpb25zKys7CisJcy0+aXBzdGF0Lmlwc19iYWRvcHRpb25zKys7CiAJcmV0dXJu ICgxKTsKIH0KIApJbmRleDogcWVtdS9zbGlycC9pcF9vdXRwdXQuYwo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBx ZW11Lm9yaWcvc2xpcnAvaXBfb3V0cHV0LmMJMjAwNy0xMC0yMCAwNzozMzozNi4wMDAwMDAwMDAg KzAwMDAKKysrIHFlbXUvc2xpcnAvaXBfb3V0cHV0LmMJMjAwNy0xMC0yMCAwODoxNzo1Mi4wMDAw MDAwMDAgKzAwMDAKQEAgLTQ0LDcgKzQ0LDYgQEAKIAogI2luY2x1ZGUgPHNsaXJwLmg+CiAKLXVf aW50MTZfdCBpcF9pZDsKIAogLyoKICAqIElQIG91dHB1dC4gIFRoZSBwYWNrZXQgaW4gbWJ1ZiBj aGFpbiBtIGNvbnRhaW5zIGEgc2tlbGV0YWwgSVAKQEAgLTUzLDkgKzUyLDcgQEAKICAqIFRoZSBt YnVmIG9wdCwgaWYgcHJlc2VudCwgd2lsbCBub3QgYmUgZnJlZWQuCiAgKi8KIGludAotaXBfb3V0 cHV0KHNvLCBtMCkKLQlzdHJ1Y3Qgc29ja2V0ICpzbzsKLQlzdHJ1Y3QgbWJ1ZiAqbTA7CitpcF9v dXRwdXQoc2xpcnBfc3RhdGVfdCAqcywgc3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBtYnVmICpt MCkKIHsKIAlyZWdpc3RlciBzdHJ1Y3QgaXAgKmlwOwogCXJlZ2lzdGVyIHN0cnVjdCBtYnVmICpt ID0gbTA7CkBAIC03OCwxNiArNzUsMTYgQEAKIAkgKi8KIAlpcC0+aXBfdiA9IElQVkVSU0lPTjsK IAlpcC0+aXBfb2ZmICY9IElQX0RGOwotCWlwLT5pcF9pZCA9IGh0b25zKGlwX2lkKyspOworCWlw LT5pcF9pZCA9IGh0b25zKHMtPmlwX2lkKyspOwogCWlwLT5pcF9obCA9IGhsZW4gPj4gMjsKLQlp cHN0YXQuaXBzX2xvY2Fsb3V0Kys7CisJcy0+aXBzdGF0Lmlwc19sb2NhbG91dCsrOwogCiAJLyoK IAkgKiBWZXJpZnkgdGhhdCB3ZSBoYXZlIGFueSBjaGFuY2UgYXQgYWxsIG9mIGJlaW5nIGFibGUg dG8gcXVldWUKIAkgKiAgICAgIHRoZSBwYWNrZXQgb3IgcGFja2V0IGZyYWdtZW50cwogCSAqLwog CS8qIFhYWCBIbW1tLi4uICovCi0vKglpZiAoaWZfcXVldWVkID4gaWZfdGhyZXNoICYmIHRvd3Jp dGUgPD0gMCkgeworLyoJaWYgKHMtPmlmX3F1ZXVlZCA+IHMtPmlmX3RocmVzaCAmJiB0b3dyaXRl IDw9IDApIHsKICAqCQllcnJvciA9IEVOT0JVRlM7CiAgKgkJZ290byBiYWQ7CiAgKgl9CkBAIC05 NiwxMyArOTMsMTMgQEAKIAkvKgogCSAqIElmIHNtYWxsIGVub3VnaCBmb3IgaW50ZXJmYWNlLCBj YW4ganVzdCBzZW5kIGRpcmVjdGx5LgogCSAqLwotCWlmICgodV9pbnQxNl90KWlwLT5pcF9sZW4g PD0gaWZfbXR1KSB7CisJaWYgKCh1X2ludDE2X3QpaXAtPmlwX2xlbiA8PSBzLT5pZl9tdHUpIHsK IAkJaXAtPmlwX2xlbiA9IGh0b25zKCh1X2ludDE2X3QpaXAtPmlwX2xlbik7CiAJCWlwLT5pcF9v ZmYgPSBodG9ucygodV9pbnQxNl90KWlwLT5pcF9vZmYpOwogCQlpcC0+aXBfc3VtID0gMDsKIAkJ aXAtPmlwX3N1bSA9IGNrc3VtKG0sIGhsZW4pOwogCi0JCWlmX291dHB1dChzbywgbSk7CisJCWlm X291dHB1dChzLCBzbywgbSk7CiAJCWdvdG8gZG9uZTsKIAl9CiAKQEAgLTExMiwxMSArMTA5LDEx IEBACiAJICovCiAJaWYgKGlwLT5pcF9vZmYgJiBJUF9ERikgewogCQllcnJvciA9IC0xOwotCQlp cHN0YXQuaXBzX2NhbnRmcmFnKys7CisJCXMtPmlwc3RhdC5pcHNfY2FudGZyYWcrKzsKIAkJZ290 byBiYWQ7CiAJfQogCi0JbGVuID0gKGlmX210dSAtIGhsZW4pICZ+IDc7ICAgICAgIC8qIGlwIGRh dGFieXRlcyBwZXIgcGFja2V0ICovCisJbGVuID0gKHMtPmlmX210dSAtIGhsZW4pICZ+IDc7ICAg ICAgIC8qIGlwIGRhdGFieXRlcyBwZXIgcGFja2V0ICovCiAJaWYgKGxlbiA8IDgpIHsKIAkJZXJy b3IgPSAtMTsKIAkJZ290byBiYWQ7CkBAIC0xMzQsMTMgKzEzMSwxMyBAQAogCW1obGVuID0gc2l6 ZW9mIChzdHJ1Y3QgaXApOwogCWZvciAob2ZmID0gaGxlbiArIGxlbjsgb2ZmIDwgKHVfaW50MTZf dClpcC0+aXBfbGVuOyBvZmYgKz0gbGVuKSB7CiAJICByZWdpc3RlciBzdHJ1Y3QgaXAgKm1oaXA7 Ci0JICBtID0gbV9nZXQoKTsKKwkgIG0gPSBtX2dldChzKTsKIAkgIGlmIChtID09IDApIHsKIAkg ICAgZXJyb3IgPSAtMTsKLQkgICAgaXBzdGF0Lmlwc19vZHJvcHBlZCsrOworCSAgICBzLT5pcHN0 YXQuaXBzX29kcm9wcGVkKys7CiAJICAgIGdvdG8gc2VuZG9yZnJlZTsKIAkgIH0KLQkgIG0tPm1f ZGF0YSArPSBpZl9tYXhsaW5raGRyOworCSAgbS0+bV9kYXRhICs9IHMtPmlmX21heGxpbmtoZHI7 CiAJICBtaGlwID0gbXRvZChtLCBzdHJ1Y3QgaXAgKik7CiAJICAqbWhpcCA9ICppcDsKIApAQCAt MTcwLDcgKzE2Nyw3IEBACiAJICBtaGlwLT5pcF9zdW0gPSBja3N1bShtLCBtaGxlbik7CiAJICAq bW5leHQgPSBtOwogCSAgbW5leHQgPSAmbS0+bV9uZXh0cGt0OwotCSAgaXBzdGF0Lmlwc19vZnJh Z21lbnRzKys7CisJICBzLT5pcHN0YXQuaXBzX29mcmFnbWVudHMrKzsKIAl9CiAJLyoKIAkgKiBV cGRhdGUgZmlyc3QgZnJhZ21lbnQgYnkgdHJpbW1pbmcgd2hhdCdzIGJlZW4gY29waWVkIG91dApA QCAtMTg3LDE5ICsxODQsMTkgQEAKIAkJbTAgPSBtLT5tX25leHRwa3Q7CiAJCW0tPm1fbmV4dHBr dCA9IDA7CiAJCWlmIChlcnJvciA9PSAwKQotCQkJaWZfb3V0cHV0KHNvLCBtKTsKKwkJCWlmX291 dHB1dChzLCBzbywgbSk7CiAJCWVsc2UKLQkJCW1fZnJlZW0obSk7CisJCQltX2ZyZWVtKHMsIG0p OwogCX0KIAogCWlmIChlcnJvciA9PSAwKQotCQlpcHN0YXQuaXBzX2ZyYWdtZW50ZWQrKzsKKwkJ cy0+aXBzdGF0Lmlwc19mcmFnbWVudGVkKys7CiAgICAgfQogCiBkb25lOgogCXJldHVybiAoZXJy b3IpOwogCiBiYWQ6Ci0JbV9mcmVlbShtMCk7CisJbV9mcmVlbShzLCBtMCk7CiAJZ290byBkb25l OwogfQpJbmRleDogcWVtdS9zbGlycC9saWJzbGlycC5oCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHFlbXUub3Jp Zy9zbGlycC9saWJzbGlycC5oCTIwMDctMTAtMjAgMDc6MzM6MzYuMDAwMDAwMDAwICswMDAwCisr KyBxZW11L3NsaXJwL2xpYnNsaXJwLmgJMjAwNy0xMC0yMCAxMTo1MDowNS4wMDAwMDAwMDAgKzAw MDAKQEAgLTUsMjYgKzUsMzIgQEAKIGV4dGVybiAiQyIgewogI2VuZGlmCiAKLXZvaWQgc2xpcnBf aW5pdCh2b2lkKTsKK3R5cGVkZWYgc3RydWN0IHNsaXJwX3N0YXRlX3Qgc2xpcnBfc3RhdGVfdDsK IAotdm9pZCBzbGlycF9zZWxlY3RfZmlsbChpbnQgKnBuZmRzLAorc2xpcnBfc3RhdGVfdCAqc2xp cnBfaW5pdCh2b2lkICp1c2VyLCBjb25zdCBjaGFyICpzbGlycF9ob3N0bmFtZSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqdGZ0cF9wcmVmaXgsIGNvbnN0IGNoYXIgKm5l dHdvcmspOwordm9pZCBzbGlycF90ZXJtKHNsaXJwX3N0YXRlX3QgKnMpOwordm9pZCBzbGlycF9s aW5rX3VwKHNsaXJwX3N0YXRlX3QgKnMpOwordm9pZCBzbGlycF9saW5rX2Rvd24oc2xpcnBfc3Rh dGVfdCAqcyk7CisKK3ZvaWQgc2xpcnBfc2VsZWN0X2ZpbGwoc2xpcnBfc3RhdGVfdCAqcywgaW50 ICpwbmZkcywKICAgICAgICAgICAgICAgICAgICAgICAgZmRfc2V0ICpyZWFkZmRzLCBmZF9zZXQg KndyaXRlZmRzLCBmZF9zZXQgKnhmZHMpOwogCi12b2lkIHNsaXJwX3NlbGVjdF9wb2xsKGZkX3Nl dCAqcmVhZGZkcywgZmRfc2V0ICp3cml0ZWZkcywgZmRfc2V0ICp4ZmRzKTsKK3ZvaWQgc2xpcnBf c2VsZWN0X3BvbGwoc2xpcnBfc3RhdGVfdCAqcywgZmRfc2V0ICpyZWFkZmRzLCBmZF9zZXQgKndy aXRlZmRzLAorICAgICAgICAgICAgICAgICAgICAgICBmZF9zZXQgKnhmZHMpOwogCi12b2lkIHNs aXJwX2lucHV0KGNvbnN0IHVpbnQ4X3QgKnBrdCwgaW50IHBrdF9sZW4pOwordm9pZCBzbGlycF9p bnB1dChzbGlycF9zdGF0ZV90ICpzLCBjb25zdCB1aW50OF90ICpwa3QsIGludCBwa3RfbGVuKTsK IAogLyogeW91IG11c3QgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczogKi8KLWludCBz bGlycF9jYW5fb3V0cHV0KHZvaWQpOwotdm9pZCBzbGlycF9vdXRwdXQoY29uc3QgdWludDhfdCAq cGt0LCBpbnQgcGt0X2xlbik7CitpbnQgc2xpcnBfY2FuX291dHB1dCh2b2lkICp1c2VyKTsKK3Zv aWQgc2xpcnBfb3V0cHV0KHZvaWQgKnVzZXIsIGNvbnN0IHVpbnQ4X3QgKnBrdCwgaW50IHBrdF9s ZW4pOwogCi1pbnQgc2xpcnBfcmVkaXIoaW50IGlzX3VkcCwgaW50IGhvc3RfcG9ydCwKK2ludCBz bGlycF9yZWRpcihzbGlycF9zdGF0ZV90ICpzLCBpbnQgaXNfdWRwLCBpbnQgaG9zdF9wb3J0LAog ICAgICAgICAgICAgICAgIHN0cnVjdCBpbl9hZGRyIGd1ZXN0X2FkZHIsIGludCBndWVzdF9wb3J0 KTsKLWludCBzbGlycF9hZGRfZXhlYyhpbnQgZG9fcHR5LCBjb25zdCBjaGFyICphcmdzLCBpbnQg YWRkcl9sb3dfYnl0ZSwKLSAgICAgICAgICAgICAgICAgICBpbnQgZ3Vlc3RfcG9ydCk7CitpbnQg c2xpcnBfYWRkX2V4ZWMoc2xpcnBfc3RhdGVfdCAqcywgaW50IGRvX3B0eSwgY29uc3QgY2hhciAq YXJncywKKyAgICAgICAgICAgICAgICAgICBpbnQgYWRkcl9sb3dfYnl0ZSwgaW50IGd1ZXN0X3Bv cnQpOwogCi1leHRlcm4gY29uc3QgY2hhciAqdGZ0cF9wcmVmaXg7Ci1leHRlcm4gY2hhciBzbGly cF9ob3N0bmFtZVszM107Cit2b2lkIHNsaXJwX3N0YXRzKHNsaXJwX3N0YXRlX3QgKnMpOwogCiAj aWZkZWYgX19jcGx1c3BsdXMKIH0KSW5kZXg6IHFlbXUvc2xpcnAvbWFpbi5oCj09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K LS0tIHFlbXUub3JpZy9zbGlycC9tYWluLmgJMjAwNy0xMC0yMCAwNzozMzozNi4wMDAwMDAwMDAg KzAwMDAKKysrIHFlbXUvc2xpcnAvbWFpbi5oCTIwMDctMTAtMjAgMDg6MTc6NTIuMDAwMDAwMDAw ICswMDAwCkBAIC0xMSwxNCArMTEsNiBAQAogCiAjZGVmaW5lIFRPV1JJVEVNQVggNTEyCiAKLWV4 dGVybiBzdHJ1Y3QgdGltZXZhbCB0dDsKLWV4dGVybiBpbnQgbGlua191cDsKLWV4dGVybiBpbnQg c2xpcnBfc29ja2V0OwotZXh0ZXJuIGludCBzbGlycF9zb2NrZXRfdW5pdDsKLWV4dGVybiBpbnQg c2xpcnBfc29ja2V0X3BvcnQ7Ci1leHRlcm4gdV9pbnQzMl90IHNsaXJwX3NvY2tldF9hZGRyOwot ZXh0ZXJuIGNoYXIgKnNsaXJwX3NvY2tldF9wYXNzd2Q7Ci1leHRlcm4gaW50IGN0dHlfY2xvc2Vk OwogCiAvKgogICogR2V0IHRoZSBkaWZmZXJlbmNlIGluIDIgdGltZXMgZnJvbSB1cGR0aW0oKQpA QCAtMjgsMjcgKzIwLDEwIEBACiAgKi8KICNkZWZpbmUgVElNRV9ESUZGKHgseSkgKHgpLSh5KSA8 IDAgPyB+MC0oeSkrKHgpIDogKHgpLSh5KQogCi1leHRlcm4gY2hhciAqc2xpcnBfdHR5OwotZXh0 ZXJuIGNoYXIgKmV4ZWNfc2hlbGw7Ci1leHRlcm4gdV9pbnQgY3VydGltZTsKLWV4dGVybiBmZF9z ZXQgKmdsb2JhbF9yZWFkZmRzLCAqZ2xvYmFsX3dyaXRlZmRzLCAqZ2xvYmFsX3hmZHM7Ci1leHRl cm4gc3RydWN0IGluX2FkZHIgY3RsX2FkZHI7Ci1leHRlcm4gc3RydWN0IGluX2FkZHIgc3BlY2lh bF9hZGRyOwotZXh0ZXJuIHN0cnVjdCBpbl9hZGRyIGFsaWFzX2FkZHI7Ci1leHRlcm4gc3RydWN0 IGluX2FkZHIgb3VyX2FkZHI7Ci1leHRlcm4gc3RydWN0IGluX2FkZHIgbG9vcGJhY2tfYWRkcjsK LWV4dGVybiBzdHJ1Y3QgaW5fYWRkciBkbnNfYWRkcjsKLWV4dGVybiBjaGFyICp1c2VybmFtZTsK LWV4dGVybiBjaGFyICpzb2NrZXRfcGF0aDsKLWV4dGVybiBpbnQgdG93cml0ZV9tYXg7Ci1leHRl cm4gaW50IHBwcF9leGl0OwotZXh0ZXJuIGludCBzb19vcHRpb25zOwotZXh0ZXJuIGludCB0Y3Bf a2VlcGludHZsOwotZXh0ZXJuIHVpbnQ4X3QgY2xpZW50X2V0aGFkZHJbNl07CiAKICNkZWZpbmUg UFJPVE9fU0xJUCAweDEKICNpZmRlZiBVU0VfUFBQCiAjZGVmaW5lIFBST1RPX1BQUCAweDIKICNl bmRpZgogCi12b2lkIGlmX2VuY2FwKGNvbnN0IHVpbnQ4X3QgKmlwX2RhdGEsIGludCBpcF9kYXRh X2xlbik7Cit2b2lkIGlmX2VuY2FwKHNsaXJwX3N0YXRlX3QgKnMsIGNvbnN0IHVpbnQ4X3QgKmlw X2RhdGEsIGludCBpcF9kYXRhX2xlbik7CkluZGV4OiBxZW11L3NsaXJwL21idWYuYwo9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09Ci0tLSBxZW11Lm9yaWcvc2xpcnAvbWJ1Zi5jCTIwMDctMTAtMjAgMDc6MzM6MzYuMDAwMDAw MDAwICswMDAwCisrKyBxZW11L3NsaXJwL21idWYuYwkyMDA3LTEwLTIwIDE3OjMwOjQ0LjAwMDAw MDAwMCArMDAwMApAQCAtMTcsMzEgKzE3LDIwIEBACiAKICNpbmNsdWRlIDxzbGlycC5oPgogCi1z dHJ1Y3QJbWJ1ZiAqbWJ1dGw7Ci1jaGFyCSptY2xyZWZjbnQ7Ci1pbnQgbWJ1Zl9hbGxvY2VkID0g MDsKLXN0cnVjdCBtYnVmIG1fZnJlZWxpc3QsIG1fdXNlZGxpc3Q7Ci1pbnQgbWJ1Zl90aHJlc2gg PSAzMDsKLWludCBtYnVmX21heCA9IDA7Ci1pbnQgbXNpemU7CiAKIHZvaWQKLW1faW5pdCgpCitt X2luaXQoc2xpcnBfc3RhdGVfdCAqcykKIHsKLQltX2ZyZWVsaXN0Lm1fbmV4dCA9IG1fZnJlZWxp c3QubV9wcmV2ID0gJm1fZnJlZWxpc3Q7Ci0JbV91c2VkbGlzdC5tX25leHQgPSBtX3VzZWRsaXN0 Lm1fcHJldiA9ICZtX3VzZWRsaXN0OwotCW1zaXplX2luaXQoKTsKLX0KKwlzLT5tX2ZyZWVsaXN0 Lm1fbmV4dCA9IHMtPm1fZnJlZWxpc3QubV9wcmV2ID0gJnMtPm1fZnJlZWxpc3Q7CisJcy0+bV91 c2VkbGlzdC5tX25leHQgPSBzLT5tX3VzZWRsaXN0Lm1fcHJldiA9ICZzLT5tX3VzZWRsaXN0Owor ICAgICAgICBzLT5tYnVmX2FsbG9jZWQgPSAwOwogCi12b2lkCi1tc2l6ZV9pbml0KCkKLXsKIAkv KgogCSAqIEZpbmQgYSBuaWNlIHZhbHVlIGZvciBtc2l6ZQogCSAqIFhYWCBpZl9tYXhsaW5raGRy IGFscmVhZHkgaW4gbXR1CiAJICovCi0JbXNpemUgPSAoaWZfbXR1PmlmX21ydT9pZl9tdHU6aWZf bXJ1KSArCi0JCQlpZl9tYXhsaW5raGRyICsgc2l6ZW9mKHN0cnVjdCBtX2hkciApICsgNjsKKwlz LT5tc2l6ZSA9IChzLT5pZl9tdHUgPiBzLT5pZl9tcnU/IHMtPmlmX210dSA6IHMtPmlmX21ydSkg KworICAgICAgICAgICAgcy0+aWZfbWF4bGlua2hkciArIHNpemVvZihzdHJ1Y3QgbV9oZHIgKSAr IDY7CiB9CiAKIC8qCkBAIC01MywzMiArNDIsMzMgQEAKICAqIHdoaWNoIHRlbGxzIG1fZnJlZSB0 byBhY3R1YWxseSBmcmVlKCkgaXQKICAqLwogc3RydWN0IG1idWYgKgotbV9nZXQoKQorbV9nZXQo c2xpcnBfc3RhdGVfdCAqcykKIHsKIAlyZWdpc3RlciBzdHJ1Y3QgbWJ1ZiAqbTsKIAlpbnQgZmxh Z3MgPSAwOwogCiAJREVCVUdfQ0FMTCgibV9nZXQiKTsKIAotCWlmIChtX2ZyZWVsaXN0Lm1fbmV4 dCA9PSAmbV9mcmVlbGlzdCkgewotCQltID0gKHN0cnVjdCBtYnVmICopbWFsbG9jKG1zaXplKTsK LQkJaWYgKG0gPT0gTlVMTCkgZ290byBlbmRfZXJyb3I7Ci0JCW1idWZfYWxsb2NlZCsrOwotCQlp ZiAobWJ1Zl9hbGxvY2VkID4gbWJ1Zl90aHJlc2gpCisJaWYgKHMtPm1fZnJlZWxpc3QubV9uZXh0 ID09ICZzLT5tX2ZyZWVsaXN0KSB7CisJCW0gPSAoc3RydWN0IG1idWYgKiltYWxsb2Mocy0+bXNp emUpOworCQlpZiAobSA9PSBOVUxMKQorICAgICAgICAgICAgICAgICAgICBnb3RvIGVuZF9lcnJv cjsKKwkJcy0+bWJ1Zl9hbGxvY2VkKys7CisJCWlmIChzLT5tYnVmX2FsbG9jZWQgPiBNQlVGX1RI UkVTSCkKIAkJCWZsYWdzID0gTV9ET0ZSRUU7Ci0JCWlmIChtYnVmX2FsbG9jZWQgPiBtYnVmX21h eCkKLQkJCW1idWZfbWF4ID0gbWJ1Zl9hbGxvY2VkOworCQlpZiAocy0+bWJ1Zl9hbGxvY2VkID4g cy0+bWJ1Zl9tYXgpCisJCQlzLT5tYnVmX21heCA9IHMtPm1idWZfYWxsb2NlZDsKIAl9IGVsc2Ug ewotCQltID0gbV9mcmVlbGlzdC5tX25leHQ7Ci0JCXJlbXF1ZShtKTsKKwkJbSA9IHMtPm1fZnJl ZWxpc3QubV9uZXh0OworCQlyZW1xdWUocywgbSk7CiAJfQogCiAJLyogSW5zZXJ0IGl0IGluIHRo ZSB1c2VkIGxpc3QgKi8KLQlpbnNxdWUobSwmbV91c2VkbGlzdCk7CisJaW5zcXVlKHMsIG0sICZz LT5tX3VzZWRsaXN0KTsKIAltLT5tX2ZsYWdzID0gKGZsYWdzIHwgTV9VU0VETElTVCk7CiAKIAkv KiBJbml0aWFsaXNlIGl0ICovCi0JbS0+bV9zaXplID0gbXNpemUgLSBzaXplb2Yoc3RydWN0IG1f aGRyKTsKKwltLT5tX3NpemUgPSBzLT5tc2l6ZSAtIHNpemVvZihzdHJ1Y3QgbV9oZHIpOwogCW0t Pm1fZGF0YSA9IG0tPm1fZGF0OwogCW0tPm1fbGVuID0gMDsKIAltLT5tX25leHRwa3QgPSAwOwpA QCAtODksOCArNzksNyBAQAogfQogCiB2b2lkCi1tX2ZyZWUobSkKLQlzdHJ1Y3QgbWJ1ZiAqbTsK K21fZnJlZShzbGlycF9zdGF0ZV90ICpzLCBzdHJ1Y3QgbWJ1ZiAqbSkKIHsKIAogICBERUJVR19D QUxMKCJtX2ZyZWUiKTsKQEAgLTk5LDcgKzg4LDcgQEAKICAgaWYobSkgewogCS8qIFJlbW92ZSBm cm9tIG1fdXNlZGxpc3QgKi8KIAlpZiAobS0+bV9mbGFncyAmIE1fVVNFRExJU1QpCi0JICAgcmVt cXVlKG0pOworCSAgIHJlbXF1ZShzLCBtKTsKIAogCS8qIElmIGl0J3MgTV9FWFQsIGZyZWUoKSBp dCAqLwogCWlmIChtLT5tX2ZsYWdzICYgTV9FWFQpCkBAIC0xMTAsOSArOTksOSBAQAogCSAqLwog CWlmIChtLT5tX2ZsYWdzICYgTV9ET0ZSRUUpIHsKIAkJZnJlZShtKTsKLQkJbWJ1Zl9hbGxvY2Vk LS07CisJCXMtPm1idWZfYWxsb2NlZC0tOwogCX0gZWxzZSBpZiAoKG0tPm1fZmxhZ3MgJiBNX0ZS RUVMSVNUKSA9PSAwKSB7Ci0JCWluc3F1ZShtLCZtX2ZyZWVsaXN0KTsKKwkJaW5zcXVlKHMsIG0s ICZzLT5tX2ZyZWVsaXN0KTsKIAkJbS0+bV9mbGFncyA9IE1fRlJFRUxJU1Q7IC8qIENsb2JiZXIg b3RoZXIgZmxhZ3MgKi8KIAl9CiAgIH0gLyogaWYobSkgKi8KQEAgLTEyNCw4ICsxMTMsNyBAQAog ICogYW4gTV9FWFQgZGF0YSBzZWdtZW50CiAgKi8KIHZvaWQKLW1fY2F0KG0sIG4pCi0JcmVnaXN0 ZXIgc3RydWN0IG1idWYgKm0sICpuOworbV9jYXQoc2xpcnBfc3RhdGVfdCAqcywgcmVnaXN0ZXIg c3RydWN0IG1idWYgKm0sIHJlZ2lzdGVyIHN0cnVjdCBtYnVmICpuKQogewogCS8qCiAJICogSWYg dGhlcmUncyBubyByb29tLCByZWFsbG9jCkBAIC0xMzYsNyArMTI0LDcgQEAKIAltZW1jcHkobS0+ bV9kYXRhK20tPm1fbGVuLCBuLT5tX2RhdGEsIG4tPm1fbGVuKTsKIAltLT5tX2xlbiArPSBuLT5t X2xlbjsKIAotCW1fZnJlZShuKTsKKwltX2ZyZWUocywgbik7CiB9CiAKIApAQCAtMjIwLDggKzIw OCw3IEBACiAgKiBGb3J0dW5hdGVseSwgaXQncyBub3QgdXNlZCBvZnRlbgogICovCiBzdHJ1Y3Qg bWJ1ZiAqCi1kdG9tKGRhdCkKLQl2b2lkICpkYXQ7CitkdG9tKHNsaXJwX3N0YXRlX3QgKnMsIHZv aWQgKmRhdCkKIHsKIAlzdHJ1Y3QgbWJ1ZiAqbTsKIApAQCAtMjI5LDcgKzIxNiw3IEBACiAJREVC VUdfQVJHKCJkYXQgPSAlbHgiLCAobG9uZyApZGF0KTsKIAogCS8qIGJ1ZyBjb3JyZWN0ZWQgZm9y IE1fRVhUIGJ1ZmZlcnMgKi8KLQlmb3IgKG0gPSBtX3VzZWRsaXN0Lm1fbmV4dDsgbSAhPSAmbV91 c2VkbGlzdDsgbSA9IG0tPm1fbmV4dCkgeworCWZvciAobSA9IHMtPm1fdXNlZGxpc3QubV9uZXh0 OyBtICE9ICZzLT5tX3VzZWRsaXN0OyBtID0gbS0+bV9uZXh0KSB7CiAJICBpZiAobS0+bV9mbGFn cyAmIE1fRVhUKSB7CiAJICAgIGlmKCAoY2hhciAqKWRhdD49bS0+bV9leHQgJiYgKGNoYXIgKilk YXQ8KG0tPm1fZXh0ICsgbS0+bV9zaXplKSApCiAJICAgICAgcmV0dXJuIG07CkluZGV4OiBxZW11 L3NsaXJwL21idWYuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBxZW11Lm9yaWcvc2xpcnAvbWJ1Zi5oCTIwMDct MTAtMjAgMDc6MzM6MzcuMDAwMDAwMDAwICswMDAwCisrKyBxZW11L3NsaXJwL21idWYuaAkyMDA3 LTEwLTIwIDE3OjQ3OjEyLjAwMDAwMDAwMCArMDAwMApAQCAtMTIwLDI4ICsxMjAsMTMgQEAKICNk ZWZpbmUgTV9ET0ZSRUUJCTB4MDgJLyogd2hlbiBtX2ZyZWUgaXMgY2FsbGVkIG9uIHRoZSBtYnVm LCBmcmVlKCkKIAkJCQkJICogaXQgcmF0aGVyIHRoYW4gcHV0dGluZyBpdCBvbiB0aGUgZnJlZSBs aXN0ICovCiAKLS8qCi0gKiBNYnVmIHN0YXRpc3RpY3MuIFhYWAotICovCi0KLXN0cnVjdCBtYnN0 YXQgewotCWludCBtYnNfYWxsb2NlZDsJCS8qIE51bWJlciBvZiBtYnVmcyBhbGxvY2F0ZWQgKi8K LQotfTsKLQotZXh0ZXJuIHN0cnVjdAltYnN0YXQgbWJzdGF0OwotZXh0ZXJuIGludCBtYnVmX2Fs bG9jZWQ7Ci1leHRlcm4gc3RydWN0IG1idWYgbV9mcmVlbGlzdCwgbV91c2VkbGlzdDsKLWV4dGVy biBpbnQgbWJ1Zl9tYXg7Ci0KLXZvaWQgbV9pbml0IF9QKCh2b2lkKSk7Ci12b2lkIG1zaXplX2lu aXQgX1AoKHZvaWQpKTsKLXN0cnVjdCBtYnVmICogbV9nZXQgX1AoKHZvaWQpKTsKLXZvaWQgbV9m cmVlIF9QKChzdHJ1Y3QgbWJ1ZiAqKSk7Ci12b2lkIG1fY2F0IF9QKChyZWdpc3RlciBzdHJ1Y3Qg bWJ1ZiAqLCByZWdpc3RlciBzdHJ1Y3QgbWJ1ZiAqKSk7Cit2b2lkIG1faW5pdChzbGlycF9zdGF0 ZV90ICpzKTsKK3N0cnVjdCBtYnVmICptX2dldChzbGlycF9zdGF0ZV90ICpzKTsKK3ZvaWQgbV9m cmVlKHNsaXJwX3N0YXRlX3QgKnMsIHN0cnVjdCBtYnVmICptKTsKK3ZvaWQgbV9jYXQoc2xpcnBf c3RhdGVfdCAqcywgcmVnaXN0ZXIgc3RydWN0IG1idWYgKm0sIHJlZ2lzdGVyIHN0cnVjdCBtYnVm ICpuKTsKIHZvaWQgbV9pbmMgX1AoKHN0cnVjdCBtYnVmICosIGludCkpOwogdm9pZCBtX2FkaiBf UCgoc3RydWN0IG1idWYgKiwgaW50KSk7CiBpbnQgbV9jb3B5IF9QKChzdHJ1Y3QgbWJ1ZiAqLCBz dHJ1Y3QgbWJ1ZiAqLCBpbnQsIGludCkpOwotc3RydWN0IG1idWYgKiBkdG9tIF9QKCh2b2lkICop KTsKK3N0cnVjdCBtYnVmICpkdG9tKHNsaXJwX3N0YXRlX3QgKnMsIHZvaWQgKmRhdCk7CiAKICNl bmRpZgpJbmRleDogcWVtdS9zbGlycC9taXNjLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcWVtdS5vcmlnL3Ns aXJwL21pc2MuYwkyMDA3LTEwLTIwIDA3OjMzOjM3LjAwMDAwMDAwMCArMDAwMAorKysgcWVtdS9z bGlycC9taXNjLmMJMjAwNy0xMC0yMCAxODoxODo0OS4wMDAwMDAwMDAgKzAwMDAKQEAgLTgsOCAr OCw2IEBACiAjZGVmaW5lIFdBTlRfU1lTX0lPQ1RMX0gKICNpbmNsdWRlIDxzbGlycC5oPgogCi11 X2ludCBjdXJ0aW1lLCB0aW1lX2Zhc3R0aW1vLCBsYXN0X3Nsb3d0aW1vLCBkZXRhY2hfdGltZTsK LXVfaW50IGRldGFjaF93YWl0ID0gNjAwMDAwOwkvKiAxMCBtaW51dGVzICovCiAKICNpZiAwCiBp bnQgeF9wb3J0ID0gLTE7CkBAIC0yNSw5ICsyMyw5IEBACiAJCWxwcmludCgiWCBSZWRpcjogWCBu b3QgYmVpbmcgcmVkaXJlY3RlZC5cclxuIik7CiAJfSBlbHNlIHsKIAkJbHByaW50KCJYIFJlZGly OiBJbiBzaC9iYXNoL3pzaC9ldGMuIHR5cGU6IERJU1BMQVk9JXM6JWQuJWQ7IGV4cG9ydCBESVNQ TEFZXHJcbiIsCi0JCSAgICAgIGluZXRfbnRvYShvdXJfYWRkciksIHhfcG9ydCwgeF9zY3JlZW4p OworCQkgICAgICBpbmV0X250b2Eocy0+b3VyX2FkZHIpLCB4X3BvcnQsIHhfc2NyZWVuKTsKIAkJ bHByaW50KCJYIFJlZGlyOiBJbiBjc2gvdGNzaC9ldGMuIHR5cGU6ICAgIHNldGVudiBESVNQTEFZ ICVzOiVkLiVkXHJcbiIsCi0JCSAgICAgIGluZXRfbnRvYShvdXJfYWRkciksIHhfcG9ydCwgeF9z Y3JlZW4pOworCQkgICAgICBpbmV0X250b2Eocy0+b3VyX2FkZHIpLCB4X3BvcnQsIHhfc2NyZWVu KTsKIAkJaWYgKHhfZGlzcGxheSkKIAkJICAgbHByaW50KCJYIFJlZGlyOiBSZWRpcmVjdGluZyB0 byBkaXNwbGF5ICVkXHJcbiIsIHhfZGlzcGxheSk7CiAJfQpAQCAtODUsNyArODMsNyBAQAogICog R2V0IG91ciBJUCBhZGRyZXNzIGFuZCBwdXQgaXQgaW4gb3VyX2FkZHIKICAqLwogdm9pZAotZ2V0 b3VyYWRkcigpCitnZXRvdXJhZGRyKHNsaXJwX3N0YXRlX3QgKnMpCiB7CiAJY2hhciBidWZmWzI1 Nl07CiAJc3RydWN0IGhvc3RlbnQgKmhlID0gTlVMTDsKQEAgLTkzLDkgKzkxLDkgQEAKIAlpZiAo Z2V0aG9zdG5hbWUoYnVmZiwyNTYpID09IDApCiAgICAgICAgICAgICBoZSA9IGdldGhvc3RieW5h bWUoYnVmZik7CiAgICAgICAgIGlmIChoZSkKLSAgICAgICAgICAgIG91cl9hZGRyID0gKihzdHJ1 Y3QgaW5fYWRkciAqKWhlLT5oX2FkZHI7Ci0gICAgICAgIGlmIChvdXJfYWRkci5zX2FkZHIgPT0g MCkKLSAgICAgICAgICAgIG91cl9hZGRyLnNfYWRkciA9IGxvb3BiYWNrX2FkZHIuc19hZGRyOwor ICAgICAgICAgICAgcy0+b3VyX2FkZHIgPSAqKHN0cnVjdCBpbl9hZGRyICopaGUtPmhfYWRkcjsK KyAgICAgICAgaWYgKHMtPm91cl9hZGRyLnNfYWRkciA9PSAwKQorICAgICAgICAgICAgcy0+b3Vy X2FkZHIuc19hZGRyID0gcy0+bG9vcGJhY2tfYWRkci5zX2FkZHI7CiB9CiAKICNpZiBTSVpFT0Zf Q0hBUl9QID09IDgKQEAgLTEwNSwxMCArMTAzLDggQEAKIAl1X2ludDMyX3QgcWhfcmxpbms7CiB9 OwogCi1pbmxpbmUgdm9pZAotaW5zcXVlXzMyKGEsIGIpCi0Jdm9pZCAqYTsKLQl2b2lkICpiOwor dm9pZAoraW5zcXVlXzMyKHNsaXJwX3N0YXRlX3QgKnMsIHZvaWQgKmEsIHZvaWQgKmIpCiB7CiAJ cmVnaXN0ZXIgc3RydWN0IHF1ZWhlYWRfMzIgKmVsZW1lbnQgPSAoc3RydWN0IHF1ZWhlYWRfMzIg KikgYTsKIAlyZWdpc3RlciBzdHJ1Y3QgcXVlaGVhZF8zMiAqaGVhZCA9IChzdHJ1Y3QgcXVlaGVh ZF8zMiAqKSBiOwpAQCAtMTE5LDkgKzExNSw4IEBACiAJPSAodV9pbnQzMl90KWVsZW1lbnQ7CiB9 CiAKLWlubGluZSB2b2lkCi1yZW1xdWVfMzIoYSkKLQl2b2lkICphOwordm9pZAorcmVtcXVlXzMy KHNsaXJwX3N0YXRlX3QgKnMsIHZvaWQgKmEpCiB7CiAJcmVnaXN0ZXIgc3RydWN0IHF1ZWhlYWRf MzIgKmVsZW1lbnQgPSAoc3RydWN0IHF1ZWhlYWRfMzIgKikgYTsKIAkoKHN0cnVjdCBxdWVoZWFk XzMyICopKGVsZW1lbnQtPnFoX2xpbmspKS0+cWhfcmxpbmsgPSBlbGVtZW50LT5xaF9ybGluazsK QEAgLTEzNiw5ICsxMzEsOCBAQAogCXN0cnVjdCBxdWVoZWFkICpxaF9ybGluazsKIH07CiAKLWlu bGluZSB2b2lkCi1pbnNxdWUoYSwgYikKLQl2b2lkICphLCAqYjsKK3ZvaWQKK2luc3F1ZShzbGly cF9zdGF0ZV90ICpzLCB2b2lkICphLCB2b2lkICpiKQogewogCXJlZ2lzdGVyIHN0cnVjdCBxdWVo ZWFkICplbGVtZW50ID0gKHN0cnVjdCBxdWVoZWFkICopIGE7CiAJcmVnaXN0ZXIgc3RydWN0IHF1 ZWhlYWQgKmhlYWQgPSAoc3RydWN0IHF1ZWhlYWQgKikgYjsKQEAgLTE0OSw5ICsxNDMsOCBAQAog CT0gKHN0cnVjdCBxdWVoZWFkICopZWxlbWVudDsKIH0KIAotaW5saW5lIHZvaWQKLXJlbXF1ZShh KQotICAgICB2b2lkICphOwordm9pZAorcmVtcXVlKHNsaXJwX3N0YXRlX3QgKnMsIHZvaWQgKmEp CiB7CiAgIHJlZ2lzdGVyIHN0cnVjdCBxdWVoZWFkICplbGVtZW50ID0gKHN0cnVjdCBxdWVoZWFk ICopIGE7CiAgICgoc3RydWN0IHF1ZWhlYWQgKikoZWxlbWVudC0+cWhfbGluaykpLT5xaF9ybGlu ayA9IGVsZW1lbnQtPnFoX3JsaW5rOwpAQCAtMjE0LDEwICsyMDcsNyBAQAogI2lmZGVmIF9XSU4z MgogCiBpbnQKLWZvcmtfZXhlYyhzbywgZXgsIGRvX3B0eSkKLQlzdHJ1Y3Qgc29ja2V0ICpzbzsK LQljaGFyICpleDsKLQlpbnQgZG9fcHR5OworZm9ya19leGVjKHNsaXJwX3N0YXRlX3QgKnMsIHN0 cnVjdCBzb2NrZXQgKnNvLCBjb25zdCBjaGFyICpleCwgaW50IGRvX3B0eSkKIHsKICAgICAvKiBu b3QgaW1wbGVtZW50ZWQgKi8KICAgICByZXR1cm4gMDsKQEAgLTIyNSw2ICsyMTUsNyBAQAogCiAj ZWxzZQogCisjaWYgMAogaW50CiBzbGlycF9vcGVucHR5KGFtYXN0ZXIsIGFzbGF2ZSkKICAgICAg aW50ICphbWFzdGVyLCAqYXNsYXZlOwpAQCAtMjg5LDYgKzI4MCw3IEBACiAJcmV0dXJuICgtMSk7 CiAjZW5kaWYKIH0KKyNlbmRpZgogCiAvKgogICogWFhYIFRoaXMgaXMgdWdseQpAQCAtMzAyLDIz ICsyOTQsMjAgQEAKICAqIGRvX3B0ciA9IDIgICBGb3JrL2V4ZWMgdXNpbmcgcHR5CiAgKi8KIGlu dAotZm9ya19leGVjKHNvLCBleCwgZG9fcHR5KQotCXN0cnVjdCBzb2NrZXQgKnNvOwotCWNoYXIg KmV4OwotCWludCBkb19wdHk7Citmb3JrX2V4ZWMoc2xpcnBfc3RhdGVfdCAqcywgc3RydWN0IHNv Y2tldCAqc28sIGNvbnN0IGNoYXIgKmV4LCBpbnQgZG9fcHR5KQogewotCWludCBzOworCWludCBm ZCA9IC0xOwogCXN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyOwogCWludCBhZGRybGVuID0gc2l6ZW9m KGFkZHIpOwogCWludCBvcHQ7Ci0gICAgICAgIGludCBtYXN0ZXI7CisgICAgICAgIGludCBtYXN0 ZXIgPSAtMTsKIAljaGFyICphcmd2WzI1Nl07CiAjaWYgMAogCWNoYXIgYnVmZlsyNTZdOwogI2Vu ZGlmCiAJLyogZG9uJ3Qgd2FudCB0byBjbG9iYmVyIHRoZSBvcmlnaW5hbCAqLwogCWNoYXIgKmJw dHI7Ci0JY2hhciAqY3VyYXJnOworCWNvbnN0IGNoYXIgKmN1cmFyZzsKIAlpbnQgYywgaSwgcmV0 OwogCiAJREVCVUdfQ0FMTCgiZm9ya19leGVjIik7CkBAIC0zMjcsMjAgKzMxNiwyMiBAQAogCURF QlVHX0FSRygiZG9fcHR5ID0gJWx4IiwgKGxvbmcpZG9fcHR5KTsKIAogCWlmIChkb19wdHkgPT0g MikgewotCQlpZiAoc2xpcnBfb3BlbnB0eSgmbWFzdGVyLCAmcykgPT0gLTEpIHsKKyNpZiAwCisJ CWlmIChzbGlycF9vcGVucHR5KCZtYXN0ZXIsICZmZCkgPT0gLTEpIHsKIAkJCWxwcmludCgiRXJy b3I6IG9wZW5wdHkgZmFpbGVkOiAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsKIAkJCXJldHVybiAw OwogCQl9CisjZW5kaWYKIAl9IGVsc2UgewogCQlhZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVUOwog CQlhZGRyLnNpbl9wb3J0ID0gMDsKIAkJYWRkci5zaW5fYWRkci5zX2FkZHIgPSBJTkFERFJfQU5Z OwogCi0JCWlmICgocyA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgMCkpIDwgMCB8fAot CQkgICAgYmluZChzLCAoc3RydWN0IHNvY2thZGRyICopJmFkZHIsIGFkZHJsZW4pIDwgMCB8fAot CQkgICAgbGlzdGVuKHMsIDEpIDwgMCkgeworCQlpZiAoKGZkID0gc29ja2V0KEFGX0lORVQsIFNP Q0tfU1RSRUFNLCAwKSkgPCAwIHx8CisJCSAgICBiaW5kKGZkLCAoc3RydWN0IHNvY2thZGRyICop JmFkZHIsIGFkZHJsZW4pIDwgMCB8fAorCQkgICAgbGlzdGVuKGZkLCAxKSA8IDApIHsKIAkJCWxw cmludCgiRXJyb3I6IGluZXQgc29ja2V0OiAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsKLQkJCWNs b3Nlc29ja2V0KHMpOworCQkJY2xvc2Vzb2NrZXQoZmQpOwogCiAJCQlyZXR1cm4gMDsKIAkJfQpA QCAtMzQ5LDcgKzM0MCw3IEBACiAJc3dpdGNoKGZvcmsoKSkgewogCSBjYXNlIC0xOgogCQlscHJp bnQoIkVycm9yOiBmb3JrIGZhaWxlZDogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7Ci0JCWNsb3Nl KHMpOworCQljbG9zZShmZCk7CiAJCWlmIChkb19wdHkgPT0gMikKIAkJICAgY2xvc2UobWFzdGVy KTsKIAkJcmV0dXJuIDA7CkBAIC0zNjAsMzggKzM1MSwzOCBAQAogCQkJKHZvaWQpIGNsb3NlKG1h c3Rlcik7CiAjaWZkZWYgVElPQ1NDVFRZIC8qIFhYWFhYICovCiAJCQkodm9pZCkgc2V0c2lkKCk7 Ci0JCQlpb2N0bChzLCBUSU9DU0NUVFksIChjaGFyICopTlVMTCk7CisJCQlpb2N0bChmZCwgVElP Q1NDVFRZLCAoY2hhciAqKU5VTEwpOwogI2VuZGlmCiAJCX0gZWxzZSB7Ci0JCQlnZXRzb2NrbmFt ZShzLCAoc3RydWN0IHNvY2thZGRyICopJmFkZHIsICZhZGRybGVuKTsKLQkJCWNsb3NlKHMpOwor CQkJZ2V0c29ja25hbWUoZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmYWRkciwgJmFkZHJsZW4pOwor CQkJY2xvc2UoZmQpOwogCQkJLyoKIAkJCSAqIENvbm5lY3QgdG8gdGhlIHNvY2tldAogCQkJICog WFhYIElmIGFueSBvZiB0aGVzZSBmYWlsLCB3ZSdyZSBpbiB0cm91YmxlIQogCSAJCSAqLwotCQkJ cyA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgMCk7Ci0JCQlhZGRyLnNpbl9hZGRyID0g bG9vcGJhY2tfYWRkcjsKKwkJCWZkID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfU1RSRUFNLCAwKTsK KwkJCWFkZHIuc2luX2FkZHIgPSBzLT5sb29wYmFja19hZGRyOwogICAgICAgICAgICAgICAgICAg ICAgICAgZG8gewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IGNvbm5lY3Qocywg KHN0cnVjdCBzb2NrYWRkciAqKSZhZGRyLCBhZGRybGVuKTsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICByZXQgPSBjb25uZWN0KGZkLCAoc3RydWN0IHNvY2thZGRyICopJmFkZHIsIGFkZHJs ZW4pOwogICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAocmV0IDwgMCAmJiBlcnJubyA9 PSBFSU5UUik7CiAJCX0KIAogI2lmIDAKIAkJaWYgKHhfcG9ydCA+PSAwKSB7CiAjaWZkZWYgSEFW RV9TRVRFTlYKLQkJCXNwcmludGYoYnVmZiwgIiVzOiVkLiVkIiwgaW5ldF9udG9hKG91cl9hZGRy KSwgeF9wb3J0LCB4X3NjcmVlbik7CisJCQlzcHJpbnRmKGJ1ZmYsICIlczolZC4lZCIsIGluZXRf bnRvYShzLT5vdXJfYWRkciksIHhfcG9ydCwgeF9zY3JlZW4pOwogCQkJc2V0ZW52KCJESVNQTEFZ IiwgYnVmZiwgMSk7CiAjZWxzZQotCQkJc3ByaW50ZihidWZmLCAiRElTUExBWT0lczolZC4lZCIs IGluZXRfbnRvYShvdXJfYWRkciksIHhfcG9ydCwgeF9zY3JlZW4pOworCQkJc3ByaW50ZihidWZm LCAiRElTUExBWT0lczolZC4lZCIsIGluZXRfbnRvYShzLT5vdXJfYWRkciksIHhfcG9ydCwgeF9z Y3JlZW4pOwogCQkJcHV0ZW52KGJ1ZmYpOwogI2VuZGlmCiAJCX0KICNlbmRpZgotCQlkdXAyKHMs IDApOwotCQlkdXAyKHMsIDEpOwotCQlkdXAyKHMsIDIpOwotCQlmb3IgKHMgPSAzOyBzIDw9IDI1 NTsgcysrKQotCQkgICBjbG9zZShzKTsKKwkJZHVwMihmZCwgMCk7CisJCWR1cDIoZmQsIDEpOwor CQlkdXAyKGZkLCAyKTsKKwkJZm9yIChmZCA9IGdldGR0YWJsZXNpemUoKSAtIDE7IGZkID49IDM7 IGZkLS0pCisJCSAgIGNsb3NlKGZkKTsKIAogCQlpID0gMDsKIAkJYnB0ciA9IHN0cmR1cChleCk7 IC8qIE5vIG5lZWQgdG8gZnJlZSgpIHRoaXMgKi8KQEAgLTQyNyw3ICs0MTgsNyBAQAogCiAJIGRl ZmF1bHQ6CiAJCWlmIChkb19wdHkgPT0gMikgewotCQkJY2xvc2Uocyk7CisJCQljbG9zZShmZCk7 CiAJCQlzby0+cyA9IG1hc3RlcjsKIAkJfSBlbHNlIHsKIAkJCS8qCkBAIC00MzgsOSArNDI5LDkg QEAKIAkJIAkgKiBvZiBjb25uZWN0KCkgZmFpbCBpbiB0aGUgY2hpbGQgcHJvY2VzcwogCQkgCSAq LwogICAgICAgICAgICAgICAgICAgICAgICAgZG8gewotICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHNvLT5zID0gYWNjZXB0KHMsIChzdHJ1Y3Qgc29ja2FkZHIgKikmYWRkciwgJmFkZHJsZW4p OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvLT5zID0gYWNjZXB0KGZkLCAoc3RydWN0 IHNvY2thZGRyICopJmFkZHIsICZhZGRybGVuKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0g d2hpbGUgKHNvLT5zIDwgMCAmJiBlcnJubyA9PSBFSU5UUik7Ci0gICAgICAgICAgICAgICAgICAg ICAgICBjbG9zZXNvY2tldChzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNsb3Nlc29ja2V0 KGZkKTsKIAkJCW9wdCA9IDE7CiAJCQlzZXRzb2Nrb3B0KHNvLT5zLFNPTF9TT0NLRVQsU09fUkVV U0VBRERSLChjaGFyICopJm9wdCxzaXplb2YoaW50KSk7CiAJCQlvcHQgPSAxOwpAQCAtNDUwLDcg KzQ0MSw3IEBACiAKIAkJLyogQXBwZW5kIHRoZSB0ZWxuZXQgb3B0aW9ucyBub3cgKi8KIAkJaWYg KHNvLT5zb19tICE9IDAgJiYgZG9fcHR5ID09IDEpICB7Ci0JCQlzYmFwcGVuZChzbywgc28tPnNv X20pOworCQkJc2JhcHBlbmQocywgc28sIHNvLT5zb19tKTsKIAkJCXNvLT5zb19tID0gMDsKIAkJ fQogCkBAIC02MDMsNiArNTk0LDcgQEAKIH0KICNlbmRpZgogCisjaWYgMAogaW50ICgqbHByaW50 X3ByaW50KSBfUCgodm9pZCAqLCBjb25zdCBjaGFyICosIHZhX2xpc3QpKTsKIGNoYXIgKmxwcmlu dF9wdHIsICpscHJpbnRfcHRyMiwgKipscHJpbnRfYXJnOwogCkBAIC03NTQsNiArNzQ2LDcgQEAK IAogCWxwcmludCgiQWRkaW5nIGVtdWxhdGlvbiBmb3IgJXMgdG8gcG9ydCAlZC8lZFxyXG4iLCBi dWZmMSwgZW11cC0+bHBvcnQsIGVtdXAtPmZwb3J0KTsKIH0KKyNlbmRpZgogCiAjaWZkZWYgQkFE X1NQUklOVEYKIApAQCAtOTA4LDEwICs5MDEsMTAgQEAKIAkJLyogU2V0IHRoZSBESVNQTEFZICov CiAgICAgICAgICAgIGlmICh4X3BvcnQgPj0gMCkgewogI2lmZGVmIEhBVkVfU0VURU5WCi0gICAg ICAgICAgICAgc3ByaW50ZihidWZmLCAiJXM6JWQuJWQiLCBpbmV0X250b2Eob3VyX2FkZHIpLCB4 X3BvcnQsIHhfc2NyZWVuKTsKKyAgICAgICAgICAgICBzcHJpbnRmKGJ1ZmYsICIlczolZC4lZCIs IGluZXRfbnRvYShzLT5vdXJfYWRkciksIHhfcG9ydCwgeF9zY3JlZW4pOwogICAgICAgICAgICAg IHNldGVudigiRElTUExBWSIsIGJ1ZmYsIDEpOwogI2Vsc2UKLSAgICAgICAgICAgICBzcHJpbnRm KGJ1ZmYsICJESVNQTEFZPSVzOiVkLiVkIiwgaW5ldF9udG9hKG91cl9hZGRyKSwgeF9wb3J0LCB4 X3NjcmVlbik7CisgICAgICAgICAgICAgc3ByaW50ZihidWZmLCAiRElTUExBWT0lczolZC4lZCIs IGluZXRfbnRvYShzLT5vdXJfYWRkciksIHhfcG9ydCwgeF9zY3JlZW4pOwogICAgICAgICAgICAg IHB1dGVudihidWZmKTsKICNlbmRpZgogICAgICAgICAgICB9CkluZGV4OiBxZW11L3NsaXJwL21p c2MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09Ci0tLSBxZW11Lm9yaWcvc2xpcnAvbWlzYy5oCTIwMDctMTAtMjAgMDc6 MzM6MzcuMDAwMDAwMDAwICswMDAwCisrKyBxZW11L3NsaXJwL21pc2MuaAkyMDA3LTEwLTIwIDEz OjI4OjUxLjAwMDAwMDAwMCArMDAwMApAQCAtMTYsMTMgKzE2LDYgQEAKIAlzdHJ1Y3QgZXhfbGlz dCAqZXhfbmV4dDsKIH07CiAKLWV4dGVybiBzdHJ1Y3QgZXhfbGlzdCAqZXhlY19saXN0OwotZXh0 ZXJuIHVfaW50IGN1cnRpbWUsIHRpbWVfZmFzdHRpbW8sIGxhc3Rfc2xvd3RpbW8sIGRldGFjaF90 aW1lLCBkZXRhY2hfd2FpdDsKLQotZXh0ZXJuIGludCAoKmxwcmludF9wcmludCkgX1AoKHZvaWQg KiwgY29uc3QgY2hhciAqLCB2YV9saXN0KSk7Ci1leHRlcm4gY2hhciAqbHByaW50X3B0ciwgKmxw cmludF9wdHIyLCAqKmxwcmludF9hcmc7Ci1leHRlcm4gc3RydWN0IHNidWYgKmxwcmludF9zYjsK LQogI2lmbmRlZiBIQVZFX1NUUkRVUAogY2hhciAqc3RyZHVwIF9QKChjb25zdCBjaGFyICopKTsK ICNlbmRpZgpAQCAtNjksMTIgKzYyLDEyIEBACiAKIGludCBzaG93X3ggX1AoKGNoYXIgKiwgc3Ry dWN0IHNvY2tldCAqKSk7CiB2b2lkIHJlZGlyX3ggX1AoKHVfaW50MzJfdCwgaW50LCBpbnQsIGlu dCkpOwotdm9pZCBnZXRvdXJhZGRyIF9QKCh2b2lkKSk7Ci1pbmxpbmUgIHZvaWQgc2xpcnBfaW5z cXVlICBfUCgodm9pZCAqLCB2b2lkICopKTsKLWlubGluZSAgdm9pZCBzbGlycF9yZW1xdWUgIF9Q KCh2b2lkICopKTsKK3ZvaWQgZ2V0b3VyYWRkcihzbGlycF9zdGF0ZV90ICpzKTsKK3ZvaWQgc2xp cnBfaW5zcXVlKHNsaXJwX3N0YXRlX3QgKnMsIHZvaWQgKmEsIHZvaWQgKmIpOwordm9pZCBzbGly cF9yZW1xdWUoc2xpcnBfc3RhdGVfdCAqcywgdm9pZCAqYSk7CiBpbnQgYWRkX2V4ZWMgX1AoKHN0 cnVjdCBleF9saXN0ICoqLCBpbnQsIGNoYXIgKiwgaW50LCBpbnQpKTsKIGludCBzbGlycF9vcGVu cHR5IF9QKChpbnQgKiwgaW50ICopKTsKLWludCBmb3JrX2V4ZWMgX1AoKHN0cnVjdCBzb2NrZXQg KiwgY2hhciAqLCBpbnQpKTsKK2ludCBmb3JrX2V4ZWMoc2xpcnBfc3RhdGVfdCAqcywgc3RydWN0 IHNvY2tldCAqc28sIGNvbnN0IGNoYXIgKmV4LCBpbnQgZG9fcHR5KTsKIHZvaWQgc25vb3plX2h1 cCBfUCgoaW50KSk7CiB2b2lkIHNub296ZSBfUCgodm9pZCkpOwogdm9pZCByZWxheSBfUCgoaW50 KSk7CkluZGV4OiBxZW11L3NsaXJwL3NidWYuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBxZW11Lm9yaWcvc2xp cnAvc2J1Zi5jCTIwMDctMTAtMjAgMDc6MzM6MzcuMDAwMDAwMDAwICswMDAwCisrKyBxZW11L3Ns aXJwL3NidWYuYwkyMDA3LTEwLTIwIDEyOjM2OjQ4LjAwMDAwMDAwMCArMDAwMApAQCAtNyw2ICs3 LDggQEAKIAogI2luY2x1ZGUgPHNsaXJwLmg+CiAKK3N0YXRpYyB2b2lkIHNiYXBwZW5kc2Ioc3Ry dWN0IHNidWYgKnNiLCBzdHJ1Y3QgbWJ1ZiAqbSk7CisKIC8qIERvbmUgYXMgYSBtYWNybyBpbiBz b2NrZXQuaCAqLwogLyogaW50CiAgKiBzYnNwYWNlKHN0cnVjdCBzb2NrYnVmZiAqc2IpCkBAIC03 Miw5ICs3NCw3IEBACiAgKiAodGhlIHNvY2tldCBpcyBub24tYmxvY2tpbmcsIHNvIHdlIHdvbid0 IGhhbmcpCiAgKi8KIHZvaWQKLXNiYXBwZW5kKHNvLCBtKQotCXN0cnVjdCBzb2NrZXQgKnNvOwot CXN0cnVjdCBtYnVmICptOworc2JhcHBlbmQoc2xpcnBfc3RhdGVfdCAqcywgc3RydWN0IHNvY2tl dCAqc28sIHN0cnVjdCBtYnVmICptKQogewogCWludCByZXQgPSAwOwogCkBAIC04NSw3ICs4NSw3 IEBACiAKIAkvKiBTaG91bGRuJ3QgaGFwcGVuLCBidXQuLi4gIGUuZy4gZm9yZWlnbiBob3N0IGNs b3NlcyBjb25uZWN0aW9uICovCiAJaWYgKG0tPm1fbGVuIDw9IDApIHsKLQkJbV9mcmVlKG0pOwor CQltX2ZyZWUocywgbSk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTk2LDcgKzk2LDcgQEAKIAkgKi8K IAlpZiAoc28tPnNvX3VyZ2MpIHsKIAkJc2JhcHBlbmRzYigmc28tPnNvX3JjdiwgbSk7Ci0JCW1f ZnJlZShtKTsKKwkJbV9mcmVlKHMsIG0pOwogCQlzb3NlbmRvb2Ioc28pOwogCQlyZXR1cm47CiAJ fQpAQCAtMTI2LDE3ICsxMjYsMTUgQEAKIAkJc2JhcHBlbmRzYigmc28tPnNvX3JjdiwgbSk7CiAJ fSAvKiBlbHNlICovCiAJLyogV2hhdGV2ZXIgaGFwcGVuZWQsIHdlIGZyZWUgdGhlIG1idWYgKi8K LQltX2ZyZWUobSk7CisJbV9mcmVlKHMsIG0pOwogfQogCiAvKgogICogQ29weSB0aGUgZGF0YSBm cm9tIG0gaW50byBzYgogICogVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSB0byBtYWtlIHN1cmUg dGhlcmUncyBlbm91Z2ggcm9vbQogICovCi12b2lkCi1zYmFwcGVuZHNiKHNiLCBtKQotCSBzdHJ1 Y3Qgc2J1ZiAqc2I7Ci0JIHN0cnVjdCBtYnVmICptOworc3RhdGljIHZvaWQKK3NiYXBwZW5kc2Io c3RydWN0IHNidWYgKnNiLCBzdHJ1Y3QgbWJ1ZiAqbSkKIHsKIAlpbnQgbGVuLCBuLCAgbm47CiAK SW5kZXg6IHFlbXUvc2xpcnAvc2J1Zi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHFlbXUub3JpZy9zbGlycC9z YnVmLmgJMjAwNy0xMC0yMCAwNzozMzozNy4wMDAwMDAwMDAgKzAwMDAKKysrIHFlbXUvc2xpcnAv c2J1Zi5oCTIwMDctMTAtMjAgMTQ6NDY6NTYuMDAwMDAwMDAwICswMDAwCkBAIC0yNCw4ICsyNCw3 IEBACiB2b2lkIHNiZnJlZSBfUCgoc3RydWN0IHNidWYgKikpOwogdm9pZCBzYmRyb3AgX1AoKHN0 cnVjdCBzYnVmICosIGludCkpOwogdm9pZCBzYnJlc2VydmUgX1AoKHN0cnVjdCBzYnVmICosIGlu dCkpOwotdm9pZCBzYmFwcGVuZCBfUCgoc3RydWN0IHNvY2tldCAqLCBzdHJ1Y3QgbWJ1ZiAqKSk7 Ci12b2lkIHNiYXBwZW5kc2IgX1AoKHN0cnVjdCBzYnVmICosIHN0cnVjdCBtYnVmICopKTsKK3Zv aWQgc2JhcHBlbmQoc2xpcnBfc3RhdGVfdCAqcywgc3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBt YnVmICptKTsKIHZvaWQgc2Jjb3B5IF9QKChzdHJ1Y3Qgc2J1ZiAqLCBpbnQsIGludCwgY2hhciAq KSk7CiAKICNlbmRpZgpJbmRleDogcWVtdS9zbGlycC9zbGlycC5jCj09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHFl bXUub3JpZy9zbGlycC9zbGlycC5jCTIwMDctMTAtMjAgMDc6MzM6MzcuMDAwMDAwMDAwICswMDAw CisrKyBxZW11L3NsaXJwL3NsaXJwLmMJMjAwNy0xMC0yMCAxMjozNDo0Ny4wMDAwMDAwMDAgKzAw MDAKQEAgLTEsMzggKzEsMTQgQEAKICNpbmNsdWRlICJzbGlycC5oIgogCi0vKiBob3N0IGFkZHJl c3MgKi8KLXN0cnVjdCBpbl9hZGRyIG91cl9hZGRyOwotLyogaG9zdCBkbnMgYWRkcmVzcyAqLwot c3RydWN0IGluX2FkZHIgZG5zX2FkZHI7Ci0vKiBob3N0IGxvb3BiYWNrIGFkZHJlc3MgKi8KLXN0 cnVjdCBpbl9hZGRyIGxvb3BiYWNrX2FkZHI7Ci0KLS8qIGFkZHJlc3MgZm9yIHNsaXJwIHZpcnR1 YWwgYWRkcmVzc2VzICovCi1zdHJ1Y3QgaW5fYWRkciBzcGVjaWFsX2FkZHI7Ci0vKiB2aXJ0dWFs IGFkZHJlc3MgYWxpYXMgZm9yIGhvc3QgKi8KLXN0cnVjdCBpbl9hZGRyIGFsaWFzX2FkZHI7Ci0K LWNvbnN0IHVpbnQ4X3Qgc3BlY2lhbF9ldGhhZGRyWzZdID0geworc3RhdGljIGNvbnN0IHVpbnQ4 X3Qgc3BlY2lhbF9ldGhhZGRyWzZdID0gewogICAgIDB4NTIsIDB4NTQsIDB4MDAsIDB4MTIsIDB4 MzUsIDB4MDAKIH07CiAKLXVpbnQ4X3QgY2xpZW50X2V0aGFkZHJbNl07Ci0KLWludCBkb19zbG93 dGltbzsKLWludCBsaW5rX3VwOwotc3RydWN0IHRpbWV2YWwgdHQ7Ci1GSUxFICpsZmQ7Ci1zdHJ1 Y3QgZXhfbGlzdCAqZXhlY19saXN0OwotCi0vKiBYWFg6IHN1cHByZXNzIHRob3NlIHNlbGVjdCBn bG9iYWxzICovCi1mZF9zZXQgKmdsb2JhbF9yZWFkZmRzLCAqZ2xvYmFsX3dyaXRlZmRzLCAqZ2xv YmFsX3hmZHM7Ci0KLWNoYXIgc2xpcnBfaG9zdG5hbWVbMzNdOwotCiAjaWZkZWYgX1dJTjMyCiAK LXN0YXRpYyBpbnQgZ2V0X2Ruc19hZGRyKHN0cnVjdCBpbl9hZGRyICpwZG5zX2FkZHIpCitzdGF0 aWMgaW50IGdldF9kbnNfYWRkcihzbGlycF9zdGF0ZV90ICpzLCBzdHJ1Y3QgaW5fYWRkciAqcGRu c19hZGRyKQogeworICAgIGludCByYyA9IDA7CiAgICAgRklYRURfSU5GTyAqRml4ZWRJbmZvPU5V TEw7CiAgICAgVUxPTkcgICAgQnVmTGVuOwogICAgIERXT1JEICAgIHJldDsKQEAgLTgxLDcgKzU3 LDcgQEAKIAogI2Vsc2UKIAotc3RhdGljIGludCBnZXRfZG5zX2FkZHIoc3RydWN0IGluX2FkZHIg KnBkbnNfYWRkcikKK3N0YXRpYyBpbnQgZ2V0X2Ruc19hZGRyKHNsaXJwX3N0YXRlX3QgKnMsIHN0 cnVjdCBpbl9hZGRyICpwZG5zX2FkZHIpCiB7CiAgICAgY2hhciBidWZmWzUxMl07CiAgICAgY2hh ciBidWZmMlsyNTZdOwpAQCAtOTgsOCArNzQsOCBAQAogICAgICAgICBpZiAoc3NjYW5mKGJ1ZmYs ICJuYW1lc2VydmVyJSpbIFx0XSUyNTZzIiwgYnVmZjIpID09IDEpIHsKICAgICAgICAgICAgIGlm ICghaW5ldF9hdG9uKGJ1ZmYyLCAmdG1wX2FkZHIpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVl OwotICAgICAgICAgICAgaWYgKHRtcF9hZGRyLnNfYWRkciA9PSBsb29wYmFja19hZGRyLnNfYWRk cikKLSAgICAgICAgICAgICAgICB0bXBfYWRkciA9IG91cl9hZGRyOworICAgICAgICAgICAgaWYg KHRtcF9hZGRyLnNfYWRkciA9PSBzLT5sb29wYmFja19hZGRyLnNfYWRkcikKKyAgICAgICAgICAg ICAgICB0bXBfYWRkciA9IHMtPm91cl9hZGRyOwogICAgICAgICAgICAgLyogSWYgaXQncyB0aGUg Zmlyc3Qgb25lLCBzZXQgaXQgdG8gZG5zX2FkZHIgKi8KICAgICAgICAgICAgIGlmICghZm91bmQp CiAgICAgICAgICAgICAgICAgKnBkbnNfYWRkciA9IHRtcF9hZGRyOwpAQCAtMTIxLDE1ICs5Nywy NCBAQAogI2VuZGlmCiAKICNpZmRlZiBfV0lOMzIKLXZvaWQgc2xpcnBfY2xlYW51cCh2b2lkKQor c3RhdGljIHZvaWQgc2xpcnBfY2xlYW51cCh2b2lkKQogewogICAgIFdTQUNsZWFudXAoKTsKIH0K ICNlbmRpZgogCi12b2lkIHNsaXJwX2luaXQodm9pZCkKK3NsaXJwX3N0YXRlX3QgKnNsaXJwX2lu aXQodm9pZCAqdXNlciwgY29uc3QgY2hhciAqc2xpcnBfaG9zdG5hbWUsCisgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnRmdHBfcHJlZml4LCBjb25zdCBjaGFyICpuZXR3b3Jr KQogewotICAgIC8vICAgIGRlYnVnX2luaXQoIi90bXAvc2xpcnAubG9nIiwgREVCVUdfREVGQVVM VCk7CisgICAgc2xpcnBfc3RhdGVfdCAqczsKKworICAgIHMgPSBtYWxsb2Moc2l6ZW9mKHNsaXJw X3N0YXRlX3QpKTsKKyAgICBpZiAoIXMpCisgICAgICAgIHJldHVybiBzOworICAgIG1lbXNldChz LCAwLCBzaXplb2Yoc2xpcnBfc3RhdGVfdCkpOworICAgIHMtPnVzZXIgPSB1c2VyOworICAgIHMt PnNsaXJwX2hvc3RuYW1lID0gc2xpcnBfaG9zdG5hbWU7CisgICAgcy0+dGZ0cF9wcmVmaXggPSB0 ZnRwX3ByZWZpeDsKIAogI2lmZGVmIF9XSU4zMgogICAgIHsKQEAgLTEzOSwyNyArMTI0LDc5IEBA CiAgICAgfQogI2VuZGlmCiAKLSAgICBsaW5rX3VwID0gMTsKKyAgICBzLT5saW5rX3VwID0gMTsK IAotICAgIGlmX2luaXQoKTsKLSAgICBpcF9pbml0KCk7CisgICAgaWZfaW5pdChzKTsKKyAgICBp cF9pbml0KHMpOwogCiAgICAgLyogSW5pdGlhbGlzZSBtYnVmcyAqYWZ0ZXIqIHNldHRpbmcgdGhl IE1UVSAqLwotICAgIG1faW5pdCgpOworICAgIG1faW5pdChzKTsKIAogICAgIC8qIHNldCBkZWZh dWx0IGFkZHJlc3NlcyAqLwotICAgIGluZXRfYXRvbigiMTI3LjAuMC4xIiwgJmxvb3BiYWNrX2Fk ZHIpOworICAgIGluZXRfYXRvbigiMTI3LjAuMC4xIiwgJnMtPmxvb3BiYWNrX2FkZHIpOworICAg IGluZXRfYXRvbigiMTI3LjAuMC4xIiwgJnMtPmRuc19hZGRyKTsKIAotICAgIGlmIChnZXRfZG5z X2FkZHIoJmRuc19hZGRyKSA8IDApIHsKLSAgICAgICAgZG5zX2FkZHIgPSBsb29wYmFja19hZGRy OworICAgIGlmIChnZXRfZG5zX2FkZHIocywgJnMtPmRuc19hZGRyKSA8IDApIHsKICAgICAgICAg ZnByaW50ZiAoc3RkZXJyLCAiV2FybmluZzogTm8gRE5TIHNlcnZlcnMgZm91bmRcbiIpOwogICAg IH0KIAotICAgIGluZXRfYXRvbihDVExfU1BFQ0lBTCwgJnNwZWNpYWxfYWRkcik7Ci0gICAgYWxp YXNfYWRkci5zX2FkZHIgPSBzcGVjaWFsX2FkZHIuc19hZGRyIHwgaHRvbmwoQ1RMX0FMSUFTKTsK LSAgICBnZXRvdXJhZGRyKCk7CisgICAgaW5ldF9hdG9uKG5ldHdvcmssICZzLT5zcGVjaWFsX2Fk ZHIpOworICAgIHMtPmFsaWFzX2FkZHIuc19hZGRyID0gcy0+c3BlY2lhbF9hZGRyLnNfYWRkciB8 IGh0b25sKENUTF9BTElBUyk7CisgICAgZ2V0b3VyYWRkcihzKTsKKworICAgIHJldHVybiBzOwog fQogCisvKioKKyAqIE1hcmtzIHRoZSBsaW5rIGFzIHVwLCBtYWtpbmcgaXQgcG9zc2libGUgdG8g ZXN0YWJsaXNoIG5ldyBjb25uZWN0aW9ucy4KKyAqLwordm9pZCBzbGlycF9saW5rX3VwKHNsaXJw X3N0YXRlX3QgKnMpCit7CisgICAgcy0+bGlua191cCA9IDE7Cit9CisKKy8qKgorICogTWFya3Mg dGhlIGxpbmsgYXMgZG93biBhbmQgY2xlYW5zIHVwIHRoZSBjdXJyZW50IGNvbm5lY3Rpb25zLgor ICovCit2b2lkIHNsaXJwX2xpbmtfZG93bihzbGlycF9zdGF0ZV90ICpzKQoreworICAgIHN0cnVj dCBzb2NrZXQgKnNvOworCisgICAgd2hpbGUgKChzbyA9IHMtPnRjYi5zb19uZXh0KSAhPSAmcy0+ dGNiKQorICAgIHsKKyAgICAgICAgaWYgKHNvLT5zb19zdGF0ZSAmIFNTX05PRkRSRUYgfHwgc28t PnMgPT0gLTEpCisgICAgICAgICAgICBzb2ZyZWUocywgc28pOworICAgICAgICBlbHNlCisgICAg ICAgICAgICB0Y3BfZHJvcChzLCBzb3RvdGNwY2Ioc28pLCAwKTsKKyAgICB9CisKKyAgICB3aGls ZSAoKHNvID0gcy0+dWRiLnNvX25leHQpICE9ICZzLT51ZGIpCisgICAgICAgIHVkcF9kZXRhY2go cywgc28pOworCisgICAgcy0+bGlua191cCA9IDA7Cit9CisKKy8qKgorICogVGVybWluYXRlcyB0 aGUgc2xpcnAgY29tcG9uZW50LgorICovCit2b2lkIHNsaXJwX3Rlcm0oc2xpcnBfc3RhdGVfdCAq cykKK3sKKyAgICBzbGlycF9saW5rX2Rvd24ocyk7CisjaWZkZWYgV0lOMzIKKyAgICBXU0FDbGVh bnVwKCk7CisjZW5kaWYKKyNpZmRlZiBMT0dfRU5BQkxFRAorICAgIGlwc3RhdHMocyk7CisgICAg dGNwc3RhdHMocyk7CisgICAgdWRwc3RhdHMocyk7CisgICAgaWNtcHN0YXRzKHMpOworICAgIG1i dWZzdGF0cyhzKTsKKyAgICBzb2Nrc3RhdHMocyk7CisjZW5kaWYKKyAgICBmcmVlKHMpOworfQor CisKICNkZWZpbmUgQ09OTl9DQU5GU0VORChzbykgKCgoc28pLT5zb19zdGF0ZSAmIChTU19GQ0FO VFNFTkRNT1JFfFNTX0lTRkNPTk5FQ1RFRCkpID09IFNTX0lTRkNPTk5FQ1RFRCkKICNkZWZpbmUg Q09OTl9DQU5GUkNWKHNvKSAoKChzbyktPnNvX3N0YXRlICYgKFNTX0ZDQU5UUkNWTU9SRXxTU19J U0ZDT05ORUNURUQpKSA9PSBTU19JU0ZDT05ORUNURUQpCiAjZGVmaW5lIFVQRF9ORkRTKHgpIGlm IChuZmRzIDwgKHgpKSBuZmRzID0gKHgpCkBAIC0xNjgsMjggKzIwNSwyOCBAQAogICogY3VydGlt ZSBrZXB0IHRvIGFuIGFjY3VyYWN5IG9mIDFtcwogICovCiAjaWZkZWYgX1dJTjMyCi1zdGF0aWMg dm9pZCB1cGR0aW1lKHZvaWQpCitzdGF0aWMgdm9pZCB1cGR0aW1lKHNsaXJwX3N0YXRlX3QgKnMp CiB7CiAgICAgc3RydWN0IF90aW1lYiB0YjsKIAogICAgIF9mdGltZSgmdGIpOwotICAgIGN1cnRp bWUgPSAodV9pbnQpdGIudGltZSAqICh1X2ludCkxMDAwOwotICAgIGN1cnRpbWUgKz0gKHVfaW50 KXRiLm1pbGxpdG07CisgICAgcy0+Y3VydGltZSA9ICh1X2ludCl0Yi50aW1lICogKHVfaW50KTEw MDA7CisgICAgcy0+Y3VydGltZSArPSAodV9pbnQpdGIubWlsbGl0bTsKIH0KICNlbHNlCi1zdGF0 aWMgdm9pZCB1cGR0aW1lKHZvaWQpCitzdGF0aWMgdm9pZCB1cGR0aW1lKHNsaXJwX3N0YXRlX3Qg KnMpCiB7Ci0JZ2V0dGltZW9mZGF5KCZ0dCwgMCk7CisJZ2V0dGltZW9mZGF5KCZzLT50dCwgMCk7 CiAKLQljdXJ0aW1lID0gKHVfaW50KXR0LnR2X3NlYyAqICh1X2ludCkxMDAwOwotCWN1cnRpbWUg Kz0gKHVfaW50KXR0LnR2X3VzZWMgLyAodV9pbnQpMTAwMDsKKwlzLT5jdXJ0aW1lID0gKHVfaW50 KXMtPnR0LnR2X3NlYyAqICh1X2ludCkxMDAwOworCXMtPmN1cnRpbWUgKz0gKHVfaW50KXMtPnR0 LnR2X3VzZWMgLyAodV9pbnQpMTAwMDsKIAotCWlmICgodHQudHZfdXNlYyAlIDEwMDApID49IDUw MCkKLQkgICBjdXJ0aW1lKys7CisJaWYgKChzLT50dC50dl91c2VjICUgMTAwMCkgPj0gNTAwKQor CSAgIHMtPmN1cnRpbWUrKzsKIH0KICNlbmRpZgogCi12b2lkIHNsaXJwX3NlbGVjdF9maWxsKGlu dCAqcG5mZHMsCit2b2lkIHNsaXJwX3NlbGVjdF9maWxsKHNsaXJwX3N0YXRlX3QgKnMsIGludCAq cG5mZHMsCiAgICAgICAgICAgICAgICAgICAgICAgIGZkX3NldCAqcmVhZGZkcywgZmRfc2V0ICp3 cml0ZWZkcywgZmRfc2V0ICp4ZmRzKQogewogICAgIHN0cnVjdCBzb2NrZXQgKnNvLCAqc29fbmV4 dDsKQEAgLTE5OCwzMSArMjM1LDMxIEBACiAgICAgaW50IHRtcF90aW1lOwogCiAgICAgLyogZmFp bCBzYWZlICovCi0gICAgZ2xvYmFsX3JlYWRmZHMgPSBOVUxMOwotICAgIGdsb2JhbF93cml0ZWZk cyA9IE5VTEw7Ci0gICAgZ2xvYmFsX3hmZHMgPSBOVUxMOworICAgIHMtPnJlYWRmZHMgPSBOVUxM OworICAgIHMtPndyaXRlZmRzID0gTlVMTDsKKyAgICBzLT54ZmRzID0gTlVMTDsKIAogICAgIG5m ZHMgPSAqcG5mZHM7CiAJLyoKIAkgKiBGaXJzdCwgVENQIHNvY2tldHMKIAkgKi8KLQlkb19zbG93 dGltbyA9IDA7Ci0JaWYgKGxpbmtfdXApIHsKKwlzLT5kb19zbG93dGltbyA9IDA7CisJaWYgKHMt PmxpbmtfdXApIHsKIAkJLyoKIAkJICogKl9zbG93dGltbyBuZWVkcyBjYWxsaW5nIGlmIHRoZXJl IGFyZSBJUCBmcmFnbWVudHMKIAkJICogaW4gdGhlIGZyYWdtZW50IHF1ZXVlLCBvciB0aGVyZSBh cmUgVENQIGNvbm5lY3Rpb25zIGFjdGl2ZQogCQkgKi8KLQkJZG9fc2xvd3RpbW8gPSAoKHRjYi5z b19uZXh0ICE9ICZ0Y2IpIHx8Ci0JCQkgICAgICAgKChzdHJ1Y3QgaXBhc2ZyYWcgKikmaXBxICE9 IChzdHJ1Y3QgaXBhc2ZyYWcgKilpcHEubmV4dCkpOworCQlzLT5kb19zbG93dGltbyA9ICgocy0+ dGNiLnNvX25leHQgIT0gJnMtPnRjYikgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAoKHN0cnVjdCBpcGFzZnJhZyAqKSZzLT5pcHEgIT0gKHN0cnVjdCBpcGFzZnJhZyAqKXMt PmlwcS5uZXh0KSk7CiAKLQkJZm9yIChzbyA9IHRjYi5zb19uZXh0OyBzbyAhPSAmdGNiOyBzbyA9 IHNvX25leHQpIHsKKwkJZm9yIChzbyA9IHMtPnRjYi5zb19uZXh0OyBzbyAhPSAmcy0+dGNiOyBz byA9IHNvX25leHQpIHsKIAkJCXNvX25leHQgPSBzby0+c29fbmV4dDsKIAogCQkJLyoKIAkJCSAq IFNlZSBpZiB3ZSBuZWVkIGEgdGNwX2Zhc3R0aW1vCiAJCQkgKi8KLQkJCWlmICh0aW1lX2Zhc3R0 aW1vID09IDAgJiYgc28tPnNvX3RjcGNiLT50X2ZsYWdzICYgVEZfREVMQUNLKQotCQkJICAgdGlt ZV9mYXN0dGltbyA9IGN1cnRpbWU7IC8qIEZsYWcgd2hlbiB3ZSB3YW50IGEgZmFzdHRpbW8gKi8K KwkJCWlmIChzLT50aW1lX2Zhc3R0aW1vID09IDAgJiYgc28tPnNvX3RjcGNiLT50X2ZsYWdzICYg VEZfREVMQUNLKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMtPnRpbWVfZmFzdHRpbW8g PSBzLT5jdXJ0aW1lOyAvKiBGbGFnIHdoZW4gd2Ugd2FudCBhIGZhc3R0aW1vICovCiAKIAkJCS8q CiAJCQkgKiBOT0ZEUkVGIGNhbiBpbmNsdWRlIHN0aWxsIGNvbm5lY3RpbmcgdG8gbG9jYWwtaG9z dCwKQEAgLTI3MiwxOCArMzA5LDE4IEBACiAJCS8qCiAJCSAqIFVEUCBzb2NrZXRzCiAJCSAqLwot CQlmb3IgKHNvID0gdWRiLnNvX25leHQ7IHNvICE9ICZ1ZGI7IHNvID0gc29fbmV4dCkgeworCQlm b3IgKHNvID0gcy0+dWRiLnNvX25leHQ7IHNvICE9ICZzLT51ZGI7IHNvID0gc29fbmV4dCkgewog CQkJc29fbmV4dCA9IHNvLT5zb19uZXh0OwogCiAJCQkvKgogCQkJICogU2VlIGlmIGl0J3MgdGlt ZWQgb3V0CiAJCQkgKi8KIAkJCWlmIChzby0+c29fZXhwaXJlKSB7Ci0JCQkJaWYgKHNvLT5zb19l eHBpcmUgPD0gY3VydGltZSkgewotCQkJCQl1ZHBfZGV0YWNoKHNvKTsKKwkJCQlpZiAoc28tPnNv X2V4cGlyZSA8PSBzLT5jdXJ0aW1lKSB7CisJCQkJCXVkcF9kZXRhY2gocywgc28pOwogCQkJCQlj b250aW51ZTsKIAkJCQl9IGVsc2UKLQkJCQkJZG9fc2xvd3RpbW8gPSAxOyAvKiBMZXQgc29ja2V0 IGV4cGlyZSAqLworCQkJCQlzLT5kb19zbG93dGltbyA9IDE7IC8qIExldCBzb2NrZXQgZXhwaXJl ICovCiAJCQl9CiAKIAkJCS8qCkBAIC0zMTcsMTcgKzM1NCwxNyBAQAogCSAqIHNsb3cgdGltZW91 dC4gSWYgYSBmYXN0IHRpbWVvdXQgaXMgbmVlZGVkLCBzZXQgdGltZW91dCB3aXRoaW4KIAkgKiAy MDBtcyBvZiB3aGVuIGl0IHdhcyByZXF1ZXN0ZWQuCiAJICovCi0JaWYgKGRvX3Nsb3d0aW1vKSB7 CisJaWYgKHMtPmRvX3Nsb3d0aW1vKSB7CiAJCS8qIFhYWCArIDEwMDAwIGJlY2F1c2Ugc29tZSBz ZWxlY3QoKSdzIGFyZW4ndCB0aGF0IGFjY3VyYXRlICovCi0JCXRpbWVvdXQudHZfdXNlYyA9ICgo NTAwIC0gKGN1cnRpbWUgLSBsYXN0X3Nsb3d0aW1vKSkgKiAxMDAwKSArIDEwMDAwOworCQl0aW1l b3V0LnR2X3VzZWMgPSAoKDUwMCAtIChzLT5jdXJ0aW1lIC0gcy0+bGFzdF9zbG93dGltbykpICog MTAwMCkgKyAxMDAwMDsKIAkJaWYgKHRpbWVvdXQudHZfdXNlYyA8IDApCiAJCSAgIHRpbWVvdXQu dHZfdXNlYyA9IDA7CiAJCWVsc2UgaWYgKHRpbWVvdXQudHZfdXNlYyA+IDUxMDAwMCkKIAkJICAg dGltZW91dC50dl91c2VjID0gNTEwMDAwOwogCiAJCS8qIENhbiBvbmx5IGZhc3R0aW1vIGlmIHdl IGFsc28gc2xvd3RpbW8gKi8KLQkJaWYgKHRpbWVfZmFzdHRpbW8pIHsKLQkJCXRtcF90aW1lID0g KDIwMCAtIChjdXJ0aW1lIC0gdGltZV9mYXN0dGltbykpICogMTAwMDsKKwkJaWYgKHMtPnRpbWVf ZmFzdHRpbW8pIHsKKwkJCXRtcF90aW1lID0gKDIwMCAtIChzLT5jdXJ0aW1lIC0gcy0+dGltZV9m YXN0dGltbykpICogMTAwMDsKIAkJCWlmICh0bXBfdGltZSA8IDApCiAJCQkgICB0bXBfdGltZSA9 IDA7CiAKQEAgLTMzOSw0MSArMzc2LDQxIEBACiAgICAgICAgICpwbmZkcyA9IG5mZHM7CiB9CiAK LXZvaWQgc2xpcnBfc2VsZWN0X3BvbGwoZmRfc2V0ICpyZWFkZmRzLCBmZF9zZXQgKndyaXRlZmRz LCBmZF9zZXQgKnhmZHMpCit2b2lkIHNsaXJwX3NlbGVjdF9wb2xsKHNsaXJwX3N0YXRlX3QgKnMs IGZkX3NldCAqcmVhZGZkcywgZmRfc2V0ICp3cml0ZWZkcywgZmRfc2V0ICp4ZmRzKQogewogICAg IHN0cnVjdCBzb2NrZXQgKnNvLCAqc29fbmV4dDsKICAgICBpbnQgcmV0OwogCi0gICAgZ2xvYmFs X3JlYWRmZHMgPSByZWFkZmRzOwotICAgIGdsb2JhbF93cml0ZWZkcyA9IHdyaXRlZmRzOwotICAg IGdsb2JhbF94ZmRzID0geGZkczsKKyAgICBzLT5yZWFkZmRzID0gcmVhZGZkczsKKyAgICBzLT53 cml0ZWZkcyA9IHdyaXRlZmRzOworICAgIHMtPnhmZHMgPSB4ZmRzOwogCiAJLyogVXBkYXRlIHRp bWUgKi8KLQl1cGR0aW1lKCk7CisJdXBkdGltZShzKTsKIAogCS8qCiAJICogU2VlIGlmIGFueXRo aW5nIGhhcyB0aW1lZCBvdXQKIAkgKi8KLQlpZiAobGlua191cCkgewotCQlpZiAodGltZV9mYXN0 dGltbyAmJiAoKGN1cnRpbWUgLSB0aW1lX2Zhc3R0aW1vKSA+PSAyKSkgewotCQkJdGNwX2Zhc3R0 aW1vKCk7Ci0JCQl0aW1lX2Zhc3R0aW1vID0gMDsKKwlpZiAocy0+bGlua191cCkgeworCQlpZiAo cy0+dGltZV9mYXN0dGltbyAmJiAoKHMtPmN1cnRpbWUgLSBzLT50aW1lX2Zhc3R0aW1vKSA+PSAy KSkgeworCQkJdGNwX2Zhc3R0aW1vKHMpOworCQkJcy0+dGltZV9mYXN0dGltbyA9IDA7CiAJCX0K LQkJaWYgKGRvX3Nsb3d0aW1vICYmICgoY3VydGltZSAtIGxhc3Rfc2xvd3RpbW8pID49IDQ5OSkp IHsKLQkJCWlwX3Nsb3d0aW1vKCk7Ci0JCQl0Y3Bfc2xvd3RpbW8oKTsKLQkJCWxhc3Rfc2xvd3Rp bW8gPSBjdXJ0aW1lOworCQlpZiAocy0+ZG9fc2xvd3RpbW8gJiYgKChzLT5jdXJ0aW1lIC0gcy0+ bGFzdF9zbG93dGltbykgPj0gNDk5KSkgeworCQkJaXBfc2xvd3RpbW8ocyk7CisJCQl0Y3Bfc2xv d3RpbW8ocyk7CisJCQlzLT5sYXN0X3Nsb3d0aW1vID0gcy0+Y3VydGltZTsKIAkJfQogCX0KIAog CS8qCiAJICogQ2hlY2sgc29ja2V0cwogCSAqLwotCWlmIChsaW5rX3VwKSB7CisJaWYgKHMtPmxp bmtfdXApIHsKIAkJLyoKIAkJICogQ2hlY2sgVENQIHNvY2tldHMKIAkJICovCi0JCWZvciAoc28g PSB0Y2Iuc29fbmV4dDsgc28gIT0gJnRjYjsgc28gPSBzb19uZXh0KSB7CisJCWZvciAoc28gPSBz LT50Y2Iuc29fbmV4dDsgc28gIT0gJnMtPnRjYjsgc28gPSBzb19uZXh0KSB7CiAJCQlzb19uZXh0 ID0gc28tPnNvX25leHQ7CiAKIAkJCS8qCkBAIC0zODksNyArNDI2LDcgQEAKIAkJCSAqIHRlc3Qg Zm9yIHJlYWRmZHMgYmVsb3cgaWYgdGhpcyBzdWNjZWVkcwogCQkJICovCiAJCQlpZiAoRkRfSVNT RVQoc28tPnMsIHhmZHMpKQotCQkJICAgc29yZWN2b29iKHNvKTsKKwkJCSAgIHNvcmVjdm9vYihz LCBzbyk7CiAJCQkvKgogCQkJICogQ2hlY2sgc29ja2V0cyBmb3IgcmVhZGluZwogCQkJICovCkBA IC0zOTgsMTQgKzQzNSwxNCBAQAogCQkJCSAqIENoZWNrIGZvciBpbmNvbWluZyBjb25uZWN0aW9u cwogCQkJCSAqLwogCQkJCWlmIChzby0+c29fc3RhdGUgJiBTU19GQUNDRVBUQ09OTikgewotCQkJ CQl0Y3BfY29ubmVjdChzbyk7CisJCQkJCXRjcF9jb25uZWN0KHMsIHNvKTsKIAkJCQkJY29udGlu dWU7CiAJCQkJfSAvKiBlbHNlICovCi0JCQkJcmV0ID0gc29yZWFkKHNvKTsKKwkJCQlyZXQgPSBz b3JlYWQocywgc28pOwogCiAJCQkJLyogT3V0cHV0IGl0IGlmIHdlIHJlYWQgc29tZXRoaW5nICov CiAJCQkJaWYgKHJldCA+IDApCi0JCQkJICAgdGNwX291dHB1dChzb3RvdGNwY2Ioc28pKTsKKwkJ CQkgICB0Y3Bfb3V0cHV0KHMsIHNvdG90Y3BjYihzbykpOwogCQkJfQogCiAJCQkvKgpAQCAtNDM0 LDEwICs0NzEsMTAgQEAKIAkJCSAgICAvKgogCQkJICAgICAqIENvbnRpbnVlIHRjcF9pbnB1dAog CQkJICAgICAqLwotCQkJICAgIHRjcF9pbnB1dCgoc3RydWN0IG1idWYgKilOVUxMLCBzaXplb2Yo c3RydWN0IGlwKSwgc28pOworCQkJICAgIHRjcF9pbnB1dChzLCAoc3RydWN0IG1idWYgKilOVUxM LCBzaXplb2Yoc3RydWN0IGlwKSwgc28pOwogCQkJICAgIC8qIGNvbnRpbnVlOyAqLwogCQkJICB9 IGVsc2UKLQkJCSAgICByZXQgPSBzb3dyaXRlKHNvKTsKKwkJCSAgICByZXQgPSBzb3dyaXRlKHMs IHNvKTsKIAkJCSAgLyoKIAkJCSAgICogWFhYWFggSWYgd2Ugd3JvdGUgc29tZXRoaW5nIChhIGxv dCksIHRoZXJlCiAJCQkgICAqIGNvdWxkIGJlIGEgbmVlZCBmb3IgYSB3aW5kb3cgdXBkYXRlLgpA QCAtNDg3LDExICs1MjQsMTEgQEAKIAkJICogSW5jb21pbmcgcGFja2V0cyBhcmUgc2VudCBzdHJh aWdodCBhd2F5LCB0aGV5J3JlIG5vdCBidWZmZXJlZC4KIAkJICogSW5jb21pbmcgVURQIGRhdGEg aXNuJ3QgYnVmZmVyZWQgZWl0aGVyLgogCQkgKi8KLQkJZm9yIChzbyA9IHVkYi5zb19uZXh0OyBz byAhPSAmdWRiOyBzbyA9IHNvX25leHQpIHsKKwkJZm9yIChzbyA9IHMtPnVkYi5zb19uZXh0OyBz byAhPSAmcy0+dWRiOyBzbyA9IHNvX25leHQpIHsKIAkJCXNvX25leHQgPSBzby0+c29fbmV4dDsK IAogCQkJaWYgKHNvLT5zICE9IC0xICYmIEZEX0lTU0VUKHNvLT5zLCByZWFkZmRzKSkgewotICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHNvcmVjdmZyb20oc28pOworICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHNvcmVjdmZyb20ocywgc28pOwogICAgICAgICAgICAgICAgICAgICAgICAg fQogCQl9CiAJfQpAQCAtNDk5LDE3ICs1MzYsMTcgQEAKIAkvKgogCSAqIFNlZSBpZiB3ZSBjYW4g c3RhcnQgb3V0cHV0dGluZwogCSAqLwotCWlmIChpZl9xdWV1ZWQgJiYgbGlua191cCkKLQkgICBp Zl9zdGFydCgpOworCWlmIChzLT5pZl9xdWV1ZWQgJiYgcy0+bGlua191cCkKKwkgICBpZl9zdGFy dChzKTsKIAogCS8qIGNsZWFyIGdsb2JhbCBmaWxlIGRlc2NyaXB0b3Igc2V0cy4KIAkgKiB0aGVz ZSByZXNpZGUgb24gdGhlIHN0YWNrIGluIHZsLmMKIAkgKiBzbyB0aGV5J3JlIHVudXNhYmxlIGlm IHdlJ3JlIG5vdCBpbgogCSAqIHNsaXJwX3NlbGVjdF9maWxsIG9yIHNsaXJwX3NlbGVjdF9wb2xs LgogCSAqLwotCSBnbG9iYWxfcmVhZGZkcyA9IE5VTEw7Ci0JIGdsb2JhbF93cml0ZWZkcyA9IE5V TEw7Ci0JIGdsb2JhbF94ZmRzID0gTlVMTDsKKwkgcy0+cmVhZGZkcyA9IE5VTEw7CisJIHMtPndy aXRlZmRzID0gTlVMTDsKKwkgcy0+eGZkcyA9IE5VTEw7CiB9CiAKICNkZWZpbmUgRVRIX0FMRU4g NgpAQCAtNTQ1LDcgKzU4Miw4IEBACiAJdW5zaWduZWQgY2hhcgkJYXJfdGlwWzRdOwkJLyogdGFy Z2V0IElQIGFkZHJlc3MJCSovCiB9OwogCi12b2lkIGFycF9pbnB1dChjb25zdCB1aW50OF90ICpw a3QsIGludCBwa3RfbGVuKQorc3RhdGljCit2b2lkIGFycF9pbnB1dChzbGlycF9zdGF0ZV90ICpz LCBjb25zdCB1aW50OF90ICpwa3QsIGludCBwa3RfbGVuKQogewogICAgIHN0cnVjdCBldGhoZHIg KmVoID0gKHN0cnVjdCBldGhoZHIgKilwa3Q7CiAgICAgc3RydWN0IGFycGhkciAqYWggPSAoc3Ry dWN0IGFycGhkciAqKShwa3QgKyBFVEhfSExFTik7CkBAIC01NTgsMTcgKzU5NiwxNyBAQAogICAg IGFyX29wID0gbnRvaHMoYWgtPmFyX29wKTsKICAgICBzd2l0Y2goYXJfb3ApIHsKICAgICBjYXNl IEFSUE9QX1JFUVVFU1Q6Ci0gICAgICAgIGlmICghbWVtY21wKGFoLT5hcl90aXAsICZzcGVjaWFs X2FkZHIsIDMpKSB7CisgICAgICAgIGlmICghbWVtY21wKGFoLT5hcl90aXAsICZzLT5zcGVjaWFs X2FkZHIsIDMpKSB7CiAgICAgICAgICAgICBpZiAoYWgtPmFyX3RpcFszXSA9PSBDVExfRE5TIHx8 IGFoLT5hcl90aXBbM10gPT0gQ1RMX0FMSUFTKQogICAgICAgICAgICAgICAgIGdvdG8gYXJwX29r OwotICAgICAgICAgICAgZm9yIChleF9wdHIgPSBleGVjX2xpc3Q7IGV4X3B0cjsgZXhfcHRyID0g ZXhfcHRyLT5leF9uZXh0KSB7CisgICAgICAgICAgICBmb3IgKGV4X3B0ciA9IHMtPmV4ZWNfbGlz dDsgZXhfcHRyOyBleF9wdHIgPSBleF9wdHItPmV4X25leHQpIHsKICAgICAgICAgICAgICAgICBp ZiAoZXhfcHRyLT5leF9hZGRyID09IGFoLT5hcl90aXBbM10pCiAgICAgICAgICAgICAgICAgICAg IGdvdG8gYXJwX29rOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg ICBhcnBfb2s6CiAgICAgICAgICAgICAvKiBYWFg6IG1ha2UgYW4gQVJQIHJlcXVlc3QgdG8gaGF2 ZSB0aGUgY2xpZW50IGFkZHJlc3MgKi8KLSAgICAgICAgICAgIG1lbWNweShjbGllbnRfZXRoYWRk ciwgZWgtPmhfc291cmNlLCBFVEhfQUxFTik7CisgICAgICAgICAgICBtZW1jcHkocy0+Y2xpZW50 X2V0aGFkZHIsIGVoLT5oX3NvdXJjZSwgRVRIX0FMRU4pOwogCiAgICAgICAgICAgICAvKiBBUlAg cmVxdWVzdCBmb3IgYWxpYXMvZG5zIG1hYyBhZGRyZXNzICovCiAgICAgICAgICAgICBtZW1jcHko cmVoLT5oX2Rlc3QsIHBrdCArIEVUSF9BTEVOLCBFVEhfQUxFTik7CkBAIC01ODUsNyArNjIzLDcg QEAKICAgICAgICAgICAgIG1lbWNweShyYWgtPmFyX3NpcCwgYWgtPmFyX3RpcCwgNCk7CiAgICAg ICAgICAgICBtZW1jcHkocmFoLT5hcl90aGEsIGFoLT5hcl9zaGEsIEVUSF9BTEVOKTsKICAgICAg ICAgICAgIG1lbWNweShyYWgtPmFyX3RpcCwgYWgtPmFyX3NpcCwgNCk7Ci0gICAgICAgICAgICBz bGlycF9vdXRwdXQoYXJwX3JlcGx5LCBzaXplb2YoYXJwX3JlcGx5KSk7CisgICAgICAgICAgICBz bGlycF9vdXRwdXQocy0+dXNlciwgYXJwX3JlcGx5LCBzaXplb2YoYXJwX3JlcGx5KSk7CiAgICAg ICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKQEAgLTU5Myw3ICs2MzEsNyBAQAog ICAgIH0KIH0KIAotdm9pZCBzbGlycF9pbnB1dChjb25zdCB1aW50OF90ICpwa3QsIGludCBwa3Rf bGVuKQordm9pZCBzbGlycF9pbnB1dChzbGlycF9zdGF0ZV90ICpzLCBjb25zdCB1aW50OF90ICpw a3QsIGludCBwa3RfbGVuKQogewogICAgIHN0cnVjdCBtYnVmICptOwogICAgIGludCBwcm90bzsK QEAgLTYwNCwxMCArNjQyLDE0IEBACiAgICAgcHJvdG8gPSBudG9ocygqKHVpbnQxNl90ICopKHBr dCArIDEyKSk7CiAgICAgc3dpdGNoKHByb3RvKSB7CiAgICAgY2FzZSBFVEhfUF9BUlA6Ci0gICAg ICAgIGFycF9pbnB1dChwa3QsIHBrdF9sZW4pOworICAgICAgICBhcnBfaW5wdXQocywgcGt0LCBw a3RfbGVuKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBFVEhfUF9JUDoKLSAgICAgICAgbSA9 IG1fZ2V0KCk7CisJLyogVXBkYXRlIHRpbWUuIEltcG9ydGFudCBpZiB0aGUgbmV0d29yayBpcyB2 ZXJ5IHF1aWV0LCBhcyBvdGhlcndpc2UKKyAgICAgICAgICogdGhlIGZpcnN0IG91dGdvaW5nIGNv bm5lY3Rpb24gZ2V0cyBhbiBpbmNvcnJlY3QgdGltZXN0YW1wLiAqLworCXVwZHRpbWUocyk7CisK KyAgICAgICAgbSA9IG1fZ2V0KHMpOwogICAgICAgICBpZiAoIW0pCiAgICAgICAgICAgICByZXR1 cm47CiAgICAgICAgIC8qIE5vdGU6IHdlIGFkZCB0byBhbGlnbiB0aGUgSVAgaGVhZGVyICovCkBA IC02MTcsNyArNjU5LDcgQEAKICAgICAgICAgbS0+bV9kYXRhICs9IDIgKyBFVEhfSExFTjsKICAg ICAgICAgbS0+bV9sZW4gLT0gMiArIEVUSF9ITEVOOwogCi0gICAgICAgIGlwX2lucHV0KG0pOwor ICAgICAgICBpcF9pbnB1dChzLCBtKTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAg ICAgICAgYnJlYWs7CkBAIC02MjUsNyArNjY3LDcgQEAKIH0KIAogLyogb3V0cHV0IHRoZSBJUCBw YWNrZXQgdG8gdGhlIGV0aGVybmV0IGRldmljZSAqLwotdm9pZCBpZl9lbmNhcChjb25zdCB1aW50 OF90ICppcF9kYXRhLCBpbnQgaXBfZGF0YV9sZW4pCit2b2lkIGlmX2VuY2FwKHNsaXJwX3N0YXRl X3QgKnMsIGNvbnN0IHVpbnQ4X3QgKmlwX2RhdGEsIGludCBpcF9kYXRhX2xlbikKIHsKICAgICB1 aW50OF90IGJ1ZlsxNjAwXTsKICAgICBzdHJ1Y3QgZXRoaGRyICplaCA9IChzdHJ1Y3QgZXRoaGRy ICopYnVmOwpAQCAtNjMzLDMzICs2NzUsMzMgQEAKICAgICBpZiAoaXBfZGF0YV9sZW4gKyBFVEhf SExFTiA+IHNpemVvZihidWYpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtZW1jcHkoZWgtPmhf ZGVzdCwgY2xpZW50X2V0aGFkZHIsIEVUSF9BTEVOKTsKKyAgICBtZW1jcHkoZWgtPmhfZGVzdCwg cy0+Y2xpZW50X2V0aGFkZHIsIEVUSF9BTEVOKTsKICAgICBtZW1jcHkoZWgtPmhfc291cmNlLCBz cGVjaWFsX2V0aGFkZHIsIEVUSF9BTEVOIC0gMSk7CiAgICAgLyogWFhYOiBub3QgY29ycmVjdCAq LwogICAgIGVoLT5oX3NvdXJjZVs1XSA9IENUTF9BTElBUzsKICAgICBlaC0+aF9wcm90byA9IGh0 b25zKEVUSF9QX0lQKTsKICAgICBtZW1jcHkoYnVmICsgc2l6ZW9mKHN0cnVjdCBldGhoZHIpLCBp cF9kYXRhLCBpcF9kYXRhX2xlbik7Ci0gICAgc2xpcnBfb3V0cHV0KGJ1ZiwgaXBfZGF0YV9sZW4g KyBFVEhfSExFTik7CisgICAgc2xpcnBfb3V0cHV0KHMtPnVzZXIsIGJ1ZiwgaXBfZGF0YV9sZW4g KyBFVEhfSExFTik7CiB9CiAKLWludCBzbGlycF9yZWRpcihpbnQgaXNfdWRwLCBpbnQgaG9zdF9w b3J0LAoraW50IHNsaXJwX3JlZGlyKHNsaXJwX3N0YXRlX3QgKnMsIGludCBpc191ZHAsIGludCBo b3N0X3BvcnQsCiAgICAgICAgICAgICAgICAgc3RydWN0IGluX2FkZHIgZ3Vlc3RfYWRkciwgaW50 IGd1ZXN0X3BvcnQpCiB7CiAgICAgaWYgKGlzX3VkcCkgewotICAgICAgICBpZiAoIXVkcF9saXN0 ZW4oaHRvbnMoaG9zdF9wb3J0KSwgZ3Vlc3RfYWRkci5zX2FkZHIsCisgICAgICAgIGlmICghdWRw X2xpc3RlbihzLCBodG9ucyhob3N0X3BvcnQpLCBndWVzdF9hZGRyLnNfYWRkciwKICAgICAgICAg ICAgICAgICAgICAgICAgIGh0b25zKGd1ZXN0X3BvcnQpLCAwKSkKICAgICAgICAgICAgIHJldHVy biAtMTsKICAgICB9IGVsc2UgewotICAgICAgICBpZiAoIXNvbGlzdGVuKGh0b25zKGhvc3RfcG9y dCksIGd1ZXN0X2FkZHIuc19hZGRyLAorICAgICAgICBpZiAoIXNvbGlzdGVuKHMsIGh0b25zKGhv c3RfcG9ydCksIGd1ZXN0X2FkZHIuc19hZGRyLAogICAgICAgICAgICAgICAgICAgICAgIGh0b25z KGd1ZXN0X3BvcnQpLCAwKSkKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAgICAgcmV0 dXJuIDA7CiB9CiAKLWludCBzbGlycF9hZGRfZXhlYyhpbnQgZG9fcHR5LCBjb25zdCBjaGFyICph cmdzLCBpbnQgYWRkcl9sb3dfYnl0ZSwKK2ludCBzbGlycF9hZGRfZXhlYyhzbGlycF9zdGF0ZV90 ICpzLCBpbnQgZG9fcHR5LCBjb25zdCBjaGFyICphcmdzLCBpbnQgYWRkcl9sb3dfYnl0ZSwKICAg ICAgICAgICAgICAgICAgIGludCBndWVzdF9wb3J0KQogewotICAgIHJldHVybiBhZGRfZXhlYygm ZXhlY19saXN0LCBkb19wdHksIChjaGFyICopYXJncywKKyAgICByZXR1cm4gYWRkX2V4ZWMoJnMt PmV4ZWNfbGlzdCwgZG9fcHR5LCAoY2hhciAqKWFyZ3MsCiAgICAgICAgICAgICAgICAgICAgIGFk ZHJfbG93X2J5dGUsIGh0b25zKGd1ZXN0X3BvcnQpKTsKIH0KSW5kZXg6IHFlbXUvc2xpcnAvc2xp cnAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09Ci0tLSBxZW11Lm9yaWcvc2xpcnAvc2xpcnAuaAkyMDA3LTEwLTIwIDA3 OjMzOjM3LjAwMDAwMDAwMCArMDAwMAorKysgcWVtdS9zbGlycC9zbGlycC5oCTIwMDctMTAtMjAg MTQ6NTg6MDEuMDAwMDAwMDAwICswMDAwCkBAIC01LDYgKzUsOSBAQAogCiAjZGVmaW5lIERFQlVH IDEKIAorLy8gVW5jb21tZW50IHRoZSBmb2xsb3dpbmcgbGluZSB0byBlbmFibGUgU0xJUlAgc3Rh dGlzdGljcyBwcmludGluZyBpbiBRZW11CisvLyNkZWZpbmUgTE9HX0VOQUJMRUQKKwogI2lmbmRl ZiBDT05GSUdfUUVNVQogI2luY2x1ZGUgInZlcnNpb24uaCIKICNlbmRpZgpAQCAtMTkwLDYgKzE5 Myw4IEBACiAjaW5jbHVkZSA8c3lzL3N0cm9wdHMuaD4KICNlbmRpZgogCisjaW5jbHVkZSAibGli c2xpcnAuaCIKKwogI2luY2x1ZGUgImRlYnVnLmgiCiAKICNpbmNsdWRlICJpcC5oIgpAQCAtMjEz LDE5ICsyMTgsMTEzIEBACiAKICNpbmNsdWRlICJib290cC5oIgogI2luY2x1ZGUgInRmdHAuaCIK LSNpbmNsdWRlICJsaWJzbGlycC5oIgogCi1leHRlcm4gc3RydWN0IHR0eXMgKnR0eXNfdW5pdFtN QVhfSU5URVJGQUNFU107CisvKiogTnVtYmVyIG9mIERIQ1AgY2xpZW50cyBzdXBwb3J0ZWQgYnkg TkFULiAqLworI2RlZmluZSBOQl9BRERSICAgICAxNgorCisvKiogV2hlcmUgdG8gc3RhcnQgREhD UCBJUCBudW1iZXIgYWxsb2NhdGlvbi4gKi8KKyNkZWZpbmUgU1RBUlRfQUREUiAgMTUKKworLyoq IERIQ1AgTGVhc2UgdGltZS4gKi8KKyNkZWZpbmUgTEVBU0VfVElNRSAoMjQgKiAzNjAwKQorCisv KiogRW50cnkgaW4gdGhlIHRhYmxlIG9mIGtub3duIERIQ1AgY2xpZW50cy4gKi8KK3R5cGVkZWYg c3RydWN0IHsKKyAgICBpbnQgYWxsb2NhdGVkOworICAgIHVpbnQ4X3QgbWFjYWRkcls2XTsKK30g Qk9PVFBDbGllbnQ7CisKKworLyoqIFRGVFAgc2Vzc2lvbiBlbnRyeS4gKi8KK3N0cnVjdCB0ZnRw X3Nlc3Npb24geworICAgIGludCBpbl91c2U7CisgICAgdW5zaWduZWQgY2hhciBmaWxlbmFtZVtU RlRQX0ZJTEVOQU1FX01BWF07CisKKyAgICBzdHJ1Y3QgaW5fYWRkciBjbGllbnRfaXA7CisgICAg dV9pbnQxNl90IGNsaWVudF9wb3J0OworCisgICAgaW50IHRpbWVzdGFtcDsKK307CisKKworLyoq IE1haW4gc3RhdGUvY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgZm9yIHNsaXJwLiAqLworc3RydWN0 IHNsaXJwX3N0YXRlX3QKK3sKKyAgICAvKiBTdHVmZiBmcm9tIGJvb3QuYyAqLworICAgIEJPT1RQ Q2xpZW50IGJvb3RwX2NsaWVudHNbTkJfQUREUl07CisgICAgY29uc3QgY2hhciAqYm9vdHBfZmls ZW5hbWU7CisgICAgLyogU3R1ZmYgZnJvbSBpZi5jICovCisgICAgaW50IGlmX210dSwgaWZfbXJ1 OworICAgIGludCBpZl9jb21wOworICAgIGludCBpZl9tYXhsaW5raGRyOworICAgIGludCBpZl9x dWV1ZWQ7CisgICAgaW50IGlmX3RocmVzaDsKKyAgICBzdHJ1Y3QgbWJ1ZiBpZl9mYXN0cTsKKyAg ICBzdHJ1Y3QgbWJ1ZiBpZl9iYXRjaHE7CisgICAgc3RydWN0IG1idWYgKm5leHRfbTsKKyAgICAv KiBTdHVmZiBmcm9tIGljbXAuYyAqLworICAgIHN0cnVjdCBpY21wc3RhdCBpY21wc3RhdDsKKyAg ICAvKiBTdHVmZiBmcm9tIGlwX2lucHV0LmMgKi8KKyAgICBzdHJ1Y3QgaXBzdGF0IGlwc3RhdDsK KyAgICBzdHJ1Y3QgaXBxIGlwcTsKKyAgICB1aW50MTZfdCBpcF9pZDsKKyAgICAvKiBTdHVmZiBm cm9tIG1idWYuYyAqLworICAgIGludCBtYnVmX2FsbG9jZWQsIG1idWZfbWF4OworICAgIGludCBt c2l6ZTsKKyAgICBzdHJ1Y3QgbWJ1ZiBtX2ZyZWVsaXN0LCBtX3VzZWRsaXN0OworICAgIC8qIFN0 dWZmIGZyb20gc2xpcnAuYyAqLworICAgIGZkX3NldCAqcmVhZGZkcywgKndyaXRlZmRzLCAqeGZk czsKKyAgICBjb25zdCBjaGFyICpzbGlycF9ob3N0bmFtZTsKKyAgICB2b2lkICp1c2VyOworICAg IHVpbnQzMl90IGN1cnRpbWU7CisgICAgdWludDMyX3QgdGltZV9mYXN0dGltbzsKKyAgICB1aW50 MzJfdCBsYXN0X3Nsb3d0aW1vOworICAgIGludCBkb19zbG93dGltbzsKKyAgICBpbnQgbGlua191 cDsKKyAgICBzdHJ1Y3QgdGltZXZhbCB0dDsKKyAgICBzdHJ1Y3QgaW5fYWRkciBvdXJfYWRkcjsK KyAgICBzdHJ1Y3QgaW5fYWRkciBhbGlhc19hZGRyOworICAgIHN0cnVjdCBpbl9hZGRyIHNwZWNp YWxfYWRkcjsKKyAgICBzdHJ1Y3QgaW5fYWRkciBkbnNfYWRkcjsKKyAgICBzdHJ1Y3QgaW5fYWRk ciBsb29wYmFja19hZGRyOworICAgIHVpbnQ4X3QgY2xpZW50X2V0aGFkZHJbNl07CisgICAgc3Ry dWN0IGV4X2xpc3QgKmV4ZWNfbGlzdDsKKyAgICAvKiBTdHVmZiBmcm9tIHRjcF9pbnB1dC5jICov CisgICAgc3RydWN0IHNvY2tldCB0Y2I7CisgICAgc3RydWN0IHNvY2tldCAqdGNwX2xhc3Rfc287 CisgICAgdGNwX3NlcSB0Y3BfaXNzOworICAgIC8qIFN0dWZmIGZyb20gdGNwX3RpbWVyLmMgKi8K KyAgICBzdHJ1Y3QgdGNwc3RhdCB0Y3BzdGF0OworICAgIHVpbnQzMl90IHRjcF9ub3c7CisgICAg LyogU3R1ZmYgZnJvbSB0ZnRwLmMgKi8KKyAgICBzdHJ1Y3QgdGZ0cF9zZXNzaW9uIHRmdHBfc2Vz c2lvbnNbVEZUUF9TRVNTSU9OU19NQVhdOworICAgIGNvbnN0IGNoYXIgKnRmdHBfcHJlZml4Owor ICAgIC8qIFN0dWZmIGZyb20gdWRwLmMgKi8KKyAgICBzdHJ1Y3QgdWRwc3RhdCB1ZHBzdGF0Owor ICAgIHN0cnVjdCBzb2NrZXQgdWRiOworICAgIHN0cnVjdCBzb2NrZXQgKnVkcF9sYXN0X3NvOwor ICAgIC8vIHRjcF9zdWJyLmMKKyAgICBpbnQgZG9fZWNobzsKK307CisKKy8qKiBOdW1iZXIgb2Yg cGVybWFuZW50IGJ1ZmZlcnMgaW4gbWJ1Zi4gKi8KKyNkZWZpbmUgTUJVRl9USFJFU0ggMzAKKwor LyoqIERlZmF1bHQgVENQIHNvY2tldCBvcHRpb25zLiAqLworI2RlZmluZSBTT19PUFRJT05TIERP X0tFRVBBTElWRQorCisvKiogRW5hYmxlIFJGQzEzMjMgcGVyZm9ybWFuY2UgZW5oYW5jZW1lbnRz LgorICogQHRvZG8gY2hlY2sgaWYgaXQgcmVhbGx5IHdvcmtzLCBpdCB3YXMgdHVybmVkIG9mZiBi ZWZvcmUuICovCisjZGVmaW5lIFRDUF9ET19SRkMxMzIzIDEKKworLyogVENQIGR1cGxpY2F0ZSBB Q0sgcmV0cmFuc21pdCB0aHJlc2hvbGQuICovCisjZGVmaW5lIFRDUFJFWE1UVEhSRVNIIDMKIAog I2lmbmRlZiBOVUxMCiAjZGVmaW5lIE5VTEwgKHZvaWQgKikwCiAjZW5kaWYKIAotI2lmbmRlZiBG VUxMX0JPTFQKLXZvaWQgaWZfc3RhcnQgX1AoKHZvaWQpKTsKLSNlbHNlCi12b2lkIGlmX3N0YXJ0 IF9QKChzdHJ1Y3QgdHR5cyAqKSk7Ci0jZW5kaWYKK3ZvaWQgaWZfc3RhcnQoc2xpcnBfc3RhdGVf dCAqcyk7CiAKICNpZmRlZiBCQURfU1BSSU5URgogIyBkZWZpbmUgdnNwcmludGYgdnNwcmludGZf bGVuCkBAIC0yNTMsMTYgKzM1MiwyMiBAQAogIGxvbmcgZ2V0aG9zdGlkIF9QKCh2b2lkKSk7CiAj ZW5kaWYKIAotdm9pZCBscHJpbnQgX1AoKGNvbnN0IGNoYXIgKiwgLi4uKSk7Ci0KLWV4dGVybiBp bnQgZG9fZWNobzsKK3N0YXRpYyBpbmxpbmUgdm9pZCBscHJpbnQoY29uc3QgY2hhciAqZm9ybWF0 LCAuLi4pCit7CisjaWZkZWYgTE9HX0VOQUJMRUQKKyAgICB2YV9saXN0IGFyZ3M7CisgICAgdmFf c3RhcnQoYXJncywgZm9ybWF0KTsKKyAgICB0ZXJtX3ZwcmludGYoZm9ybWF0LCBhcmdzKTsKKyAg ICB2YV9lbmQoYXJncyk7CisjZW5kaWYKK30KIAogI2lmIFNJWkVPRl9DSEFSX1AgPT0gNAogIyBk ZWZpbmUgaW5zcXVlXzMyIGluc3F1ZQogIyBkZWZpbmUgcmVtcXVlXzMyIHJlbXF1ZQogI2Vsc2UK LSBpbmxpbmUgdm9pZCBpbnNxdWVfMzIgX1AoKHZvaWQgKiwgdm9pZCAqKSk7Ci0gaW5saW5lIHZv aWQgcmVtcXVlXzMyIF9QKCh2b2lkICopKTsKK3ZvaWQgaW5zcXVlXzMyKHNsaXJwX3N0YXRlX3Qg KnMsIHZvaWQgKmEsIHZvaWQgKmIpOwordm9pZCByZW1xdWVfMzIoc2xpcnBfc3RhdGVfdCAqcywg dm9pZCAqYSk7CiAjZW5kaWYKIAogI2lmbmRlZiBfV0lOMzIKQEAgLTI3NSw0OCArMzgwLDQxIEBA CiBpbnQgY2tzdW0oc3RydWN0IG1idWYgKm0sIGludCBsZW4pOwogCiAvKiBpZi5jICovCi12b2lk IGlmX2luaXQgX1AoKHZvaWQpKTsKLXZvaWQgaWZfb3V0cHV0IF9QKChzdHJ1Y3Qgc29ja2V0ICos IHN0cnVjdCBtYnVmICopKTsKK3ZvaWQgaWZfaW5pdChzbGlycF9zdGF0ZV90ICpzKTsKK3ZvaWQg aWZfb3V0cHV0KHNsaXJwX3N0YXRlX3QgKnMsIHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3QgbWJ1 ZiAqaWZtKTsKIAogLyogaXBfaW5wdXQuYyAqLwotdm9pZCBpcF9pbml0IF9QKCh2b2lkKSk7Ci12 b2lkIGlwX2lucHV0IF9QKChzdHJ1Y3QgbWJ1ZiAqKSk7Ci1zdHJ1Y3QgaXAgKiBpcF9yZWFzcyBf UCgocmVnaXN0ZXIgc3RydWN0IGlwYXNmcmFnICosIHJlZ2lzdGVyIHN0cnVjdCBpcHEgKikpOwot dm9pZCBpcF9mcmVlZiBfUCgoc3RydWN0IGlwcSAqKSk7Ci12b2lkIGlwX2VucSBfUCgocmVnaXN0 ZXIgc3RydWN0IGlwYXNmcmFnICosIHJlZ2lzdGVyIHN0cnVjdCBpcGFzZnJhZyAqKSk7Ci12b2lk IGlwX2RlcSBfUCgocmVnaXN0ZXIgc3RydWN0IGlwYXNmcmFnICopKTsKLXZvaWQgaXBfc2xvd3Rp bW8gX1AoKHZvaWQpKTsKK3ZvaWQgaXBfaW5pdChzbGlycF9zdGF0ZV90ICpzKTsKK3ZvaWQgaXBf aW5wdXQoc2xpcnBfc3RhdGVfdCAqcywgc3RydWN0IG1idWYgKm0pOwordm9pZCBpcF9zbG93dGlt byhzbGlycF9zdGF0ZV90ICpzKTsKIHZvaWQgaXBfc3RyaXBvcHRpb25zIF9QKChyZWdpc3RlciBz dHJ1Y3QgbWJ1ZiAqLCBzdHJ1Y3QgbWJ1ZiAqKSk7CiAKIC8qIGlwX291dHB1dC5jICovCi1pbnQg aXBfb3V0cHV0IF9QKChzdHJ1Y3Qgc29ja2V0ICosIHN0cnVjdCBtYnVmICopKTsKK2ludCBpcF9v dXRwdXQoc2xpcnBfc3RhdGVfdCAqcywgc3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBtYnVmICpt MCk7CiAKIC8qIHRjcF9pbnB1dC5jICovCi1pbnQgdGNwX3JlYXNzIF9QKChyZWdpc3RlciBzdHJ1 Y3QgdGNwY2IgKiwgcmVnaXN0ZXIgc3RydWN0IHRjcGlwaGRyICosIHN0cnVjdCBtYnVmICopKTsK LXZvaWQgdGNwX2lucHV0IF9QKChyZWdpc3RlciBzdHJ1Y3QgbWJ1ZiAqLCBpbnQsIHN0cnVjdCBz b2NrZXQgKikpOwotdm9pZCB0Y3BfZG9vcHRpb25zIF9QKChzdHJ1Y3QgdGNwY2IgKiwgdV9jaGFy ICosIGludCwgc3RydWN0IHRjcGlwaGRyICopKTsKLXZvaWQgdGNwX3htaXRfdGltZXIgX1AoKHJl Z2lzdGVyIHN0cnVjdCB0Y3BjYiAqLCBpbnQpKTsKLWludCB0Y3BfbXNzIF9QKChyZWdpc3RlciBz dHJ1Y3QgdGNwY2IgKiwgdV9pbnQpKTsKK3ZvaWQgdGNwX2lucHV0KHNsaXJwX3N0YXRlX3QgKnMs IHJlZ2lzdGVyIHN0cnVjdCBtYnVmICptLCBpbnQgaXBobGVuLCBzdHJ1Y3Qgc29ja2V0ICppbnNv KTsKK2ludCB0Y3BfbXNzKHNsaXJwX3N0YXRlX3QgKnMsIHJlZ2lzdGVyIHN0cnVjdCB0Y3BjYiAq dHAsIHVfaW50IG9mZmVyKTsKIAogLyogdGNwX291dHB1dC5jICovCi1pbnQgdGNwX291dHB1dCBf UCgocmVnaXN0ZXIgc3RydWN0IHRjcGNiICopKTsKK2ludCB0Y3Bfb3V0cHV0KHNsaXJwX3N0YXRl X3QgKnMsIHJlZ2lzdGVyIHN0cnVjdCB0Y3BjYiAqdHApOwogdm9pZCB0Y3Bfc2V0cGVyc2lzdCBf UCgocmVnaXN0ZXIgc3RydWN0IHRjcGNiICopKTsKIAogLyogdGNwX3N1YnIuYyAqLwotdm9pZCB0 Y3BfaW5pdCBfUCgodm9pZCkpOwordm9pZCB0Y3BfaW5pdChzbGlycF9zdGF0ZV90ICpzKTsKIHZv aWQgdGNwX3RlbXBsYXRlIF9QKChzdHJ1Y3QgdGNwY2IgKikpOwotdm9pZCB0Y3BfcmVzcG9uZCBf UCgoc3RydWN0IHRjcGNiICosIHJlZ2lzdGVyIHN0cnVjdCB0Y3BpcGhkciAqLCByZWdpc3RlciBz dHJ1Y3QgbWJ1ZiAqLCB0Y3Bfc2VxLCB0Y3Bfc2VxLCBpbnQpKTsKLXN0cnVjdCB0Y3BjYiAqIHRj cF9uZXd0Y3BjYiBfUCgoc3RydWN0IHNvY2tldCAqKSk7Ci1zdHJ1Y3QgdGNwY2IgKiB0Y3BfY2xv c2UgX1AoKHJlZ2lzdGVyIHN0cnVjdCB0Y3BjYiAqKSk7Ci12b2lkIHRjcF9kcmFpbiBfUCgodm9p ZCkpOwotdm9pZCB0Y3Bfc29ja2Nsb3NlZCBfUCgoc3RydWN0IHRjcGNiICopKTsKLWludCB0Y3Bf ZmNvbm5lY3QgX1AoKHN0cnVjdCBzb2NrZXQgKikpOwotdm9pZCB0Y3BfY29ubmVjdCBfUCgoc3Ry dWN0IHNvY2tldCAqKSk7Ci1pbnQgdGNwX2F0dGFjaCBfUCgoc3RydWN0IHNvY2tldCAqKSk7Cit2 b2lkIHRjcF9yZXNwb25kKHNsaXJwX3N0YXRlX3QgKnMsIHN0cnVjdCB0Y3BjYiAqdHAsIHN0cnVj dCB0Y3BpcGhkciAqdGksCisgICAgICAgICAgICAgICAgIHN0cnVjdCBtYnVmICptLCB0Y3Bfc2Vx IGFjaywgdGNwX3NlcSBzZXEsIGludCBmbGFncyk7CitzdHJ1Y3QgdGNwY2IgKnRjcF9uZXd0Y3Bj YihzbGlycF9zdGF0ZV90ICpzLCBzdHJ1Y3Qgc29ja2V0ICpzbyk7CitzdHJ1Y3QgdGNwY2IgKnRj cF9jbG9zZShzbGlycF9zdGF0ZV90ICpzLCByZWdpc3RlciBzdHJ1Y3QgdGNwY2IgKnRwKTsKK3Zv aWQgdGNwX3NvY2tjbG9zZWQoc2xpcnBfc3RhdGVfdCAqcywgc3RydWN0IHRjcGNiICp0cCk7Citp bnQgdGNwX2Zjb25uZWN0KHNsaXJwX3N0YXRlX3QgKnMsIHN0cnVjdCBzb2NrZXQgKnNvKTsKK3Zv aWQgdGNwX2Nvbm5lY3Qoc2xpcnBfc3RhdGVfdCAqcywgc3RydWN0IHNvY2tldCAqaW5zbyk7Citp bnQgdGNwX2F0dGFjaChzbGlycF9zdGF0ZV90ICpzLCBzdHJ1Y3Qgc29ja2V0ICpzbyk7CiB1X2lu dDhfdCB0Y3BfdG9zIF9QKChzdHJ1Y3Qgc29ja2V0ICopKTsKLWludCB0Y3BfZW11IF9QKChzdHJ1 Y3Qgc29ja2V0ICosIHN0cnVjdCBtYnVmICopKTsKLWludCB0Y3BfY3RsIF9QKChzdHJ1Y3Qgc29j a2V0ICopKTsKLXN0cnVjdCB0Y3BjYiAqdGNwX2Ryb3Aoc3RydWN0IHRjcGNiICp0cCwgaW50IGVy cik7CitpbnQgdGNwX2VtdShzbGlycF9zdGF0ZV90ICpzLCBzdHJ1Y3Qgc29ja2V0ICpzbywgc3Ry dWN0IG1idWYgKm0pOworaW50IHRjcF9jdGwoc2xpcnBfc3RhdGVfdCAqcywgc3RydWN0IHNvY2tl dCAqc28pOworc3RydWN0IHRjcGNiICp0Y3BfZHJvcChzbGlycF9zdGF0ZV90ICpzLCBzdHJ1Y3Qg dGNwY2IgKnRwLCBpbnQgZXJyKTsKIAogI2lmZGVmIFVTRV9QUFAKICNkZWZpbmUgTUlOX01SVSBN SU5NUlUKSW5kZXg6IHFlbXUvc2xpcnAvc29ja2V0LmMKPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcWVtdS5vcmln L3NsaXJwL3NvY2tldC5jCTIwMDctMTAtMjAgMDc6MzM6MzcuMDAwMDAwMDAwICswMDAwCisrKyBx ZW11L3NsaXJwL3NvY2tldC5jCTIwMDctMTAtMjAgMTI6MzM6MDYuMDAwMDAwMDAwICswMDAwCkBA IC0xMywxMiArMTMsMTYgQEAKICNpbmNsdWRlIDxzeXMvZmlsaW8uaD4KICNlbmRpZgogCi12b2lk CitzdGF0aWMgdm9pZCBzb2ZjYW50cmN2bW9yZShzbGlycF9zdGF0ZV90ICpzLCBzdHJ1Y3QgIHNv Y2tldCAqc28pOworc3RhdGljIHZvaWQgc29mY2FudHNlbmRtb3JlKHNsaXJwX3N0YXRlX3QgKnMs IHN0cnVjdCBzb2NrZXQgKnNvKTsKKworI2lmIDAKK3N0YXRpYyB2b2lkCiBzb19pbml0KCkKIHsK IAkvKiBOb3RoaW5nIHlldCAqLwogfQotCisjZW5kaWYKIAogc3RydWN0IHNvY2tldCAqCiBzb2xv b2t1cChoZWFkLCBsYWRkciwgbHBvcnQsIGZhZGRyLCBmcG9ydCkKQEAgLTY3LDIyICs3MSwyMSBA QAogICogcmVtcXVlIGFuZCBmcmVlIGEgc29ja2V0LCBjbG9iYmVyIGNhY2hlCiAgKi8KIHZvaWQK LXNvZnJlZShzbykKLQlzdHJ1Y3Qgc29ja2V0ICpzbzsKK3NvZnJlZShzbGlycF9zdGF0ZV90ICpz LCBzdHJ1Y3Qgc29ja2V0ICpzbykKIHsKICAgaWYgKHNvLT5zb19lbXU9PUVNVV9SU0ggJiYgc28t PmV4dHJhKSB7Ci0Jc29mcmVlKHNvLT5leHRyYSk7CisJc29mcmVlKHMsIHNvLT5leHRyYSk7CiAJ c28tPmV4dHJhPU5VTEw7CiAgIH0KLSAgaWYgKHNvID09IHRjcF9sYXN0X3NvKQotICAgIHRjcF9s YXN0X3NvID0gJnRjYjsKLSAgZWxzZSBpZiAoc28gPT0gdWRwX2xhc3Rfc28pCi0gICAgdWRwX2xh c3Rfc28gPSAmdWRiOworICBpZiAoc28gPT0gcy0+dGNwX2xhc3Rfc28pCisgICAgcy0+dGNwX2xh c3Rfc28gPSAmcy0+dGNiOworICBlbHNlIGlmIChzbyA9PSBzLT51ZHBfbGFzdF9zbykKKyAgICBz LT51ZHBfbGFzdF9zbyA9ICZzLT51ZGI7CiAKLSAgbV9mcmVlKHNvLT5zb19tKTsKKyAgbV9mcmVl KHMsIHNvLT5zb19tKTsKIAogICBpZihzby0+c29fbmV4dCAmJiBzby0+c29fcHJldikKLSAgICBy ZW1xdWUoc28pOyAgLyogY3Jhc2hlcyBpZiBzbyBpcyBub3QgaW4gYSBxdWV1ZSAqLworICAgIHJl bXF1ZShzLCBzbyk7ICAvKiBjcmFzaGVzIGlmIHNvIGlzIG5vdCBpbiBhIHF1ZXVlICovCiAKICAg ZnJlZShzbyk7CiB9CkBAIC05Myw4ICs5Niw3IEBACiAgKiBhIHJlYWQoKSBvZiAwIChvciBsZXNz KSBtZWFucyBpdCdzIGRpc2Nvbm5lY3RlZAogICovCiBpbnQKLXNvcmVhZChzbykKLQlzdHJ1Y3Qg c29ja2V0ICpzbzsKK3NvcmVhZChzbGlycF9zdGF0ZV90ICpzLCBzdHJ1Y3Qgc29ja2V0ICpzbykK IHsKIAlpbnQgbiwgbm4sIGxzcywgdG90YWw7CiAJc3RydWN0IHNidWYgKnNiID0gJnNvLT5zb19z bmQ7CkBAIC0xMTMsNiArMTE1LDggQEAKIAlsZW4gPSBzYi0+c2JfZGF0YWxlbiAtIHNiLT5zYl9j YzsKIAogCWlvdlswXS5pb3ZfYmFzZSA9IHNiLT5zYl93cHRyOworICAgICAgICBpb3ZbMV0uaW92 X2Jhc2UgPSAwOworICAgICAgICBpb3ZbMV0uaW92X2xlbiAgPSAwOwogCWlmIChzYi0+c2Jfd3B0 ciA8IHNiLT5zYl9ycHRyKSB7CiAJCWlvdlswXS5pb3ZfbGVuID0gc2ItPnNiX3JwdHIgLSBzYi0+ c2Jfd3B0cjsKIAkJLyogU2hvdWxkIG5ldmVyIHN1Y2NlZWQsIGJ1dC4uLiAqLwpAQCAtMTYyLDgg KzE2Niw4IEBACiAJCQlyZXR1cm4gMDsKIAkJZWxzZSB7CiAJCQlERUJVR19NSVNDKChkZmQsICIg LS0tIHNvcmVhZCgpIGRpc2Nvbm5lY3RlZCwgbm4gPSAlZCwgZXJybm8gPSAlZC0lc1xuIiwgbm4s IGVycm5vLHN0cmVycm9yKGVycm5vKSkpOwotCQkJc29mY2FudHJjdm1vcmUoc28pOwotCQkJdGNw X3NvY2tjbG9zZWQoc290b3RjcGNiKHNvKSk7CisJCQlzb2ZjYW50cmN2bW9yZShzLCBzbyk7CisJ CQl0Y3Bfc29ja2Nsb3NlZChzLCBzb3RvdGNwY2Ioc28pKTsKIAkJCXJldHVybiAtMTsKIAkJfQog CX0KQEAgLTIwNCw4ICsyMDgsNyBAQAogICogaW4gdGhlIHNlbmQgYnVmZmVyIGlzIHNlbnQgYXMg dXJnZW50IGRhdGEKICAqLwogdm9pZAotc29yZWN2b29iKHNvKQotCXN0cnVjdCBzb2NrZXQgKnNv Oworc29yZWN2b29iKHNsaXJwX3N0YXRlX3QgKnMsIHN0cnVjdCBzb2NrZXQgKnNvKQogewogCXN0 cnVjdCB0Y3BjYiAqdHAgPSBzb3RvdGNwY2Ioc28pOwogCkBAIC0yMjAsMTAgKzIyMywxMCBAQAog CSAqIHVyZ2VudCBkYXRhLCBvciB0aGUgcmVhZCgpIGRvZXNuJ3QgcmV0dXJuIGFsbCB0aGUKIAkg KiB1cmdlbnQgZGF0YS4KIAkgKi8KLQlzb3JlYWQoc28pOworCXNvcmVhZChzLCBzbyk7CiAJdHAt PnNuZF91cCA9IHRwLT5zbmRfdW5hICsgc28tPnNvX3NuZC5zYl9jYzsKIAl0cC0+dF9mb3JjZSA9 IDE7Ci0JdGNwX291dHB1dCh0cCk7CisJdGNwX291dHB1dChzLCB0cCk7CiAJdHAtPnRfZm9yY2Ug PSAwOwogfQogCkBAIC0yOTEsOCArMjk0LDcgQEAKICAqIHVwZGF0aW5nIGFsbCBzYnVmIGZpZWxk IGFzIG5lY2Vzc2FyeQogICovCiBpbnQKLXNvd3JpdGUoc28pCi0Jc3RydWN0IHNvY2tldCAqc287 Citzb3dyaXRlKHNsaXJwX3N0YXRlX3QgKnMsIHN0cnVjdCBzb2NrZXQgKnNvKQogewogCWludCAg bixubjsKIAlzdHJ1Y3Qgc2J1ZiAqc2IgPSAmc28tPnNvX3JjdjsKQEAgLTMxNiw2ICszMTgsOCBA QAogICAgICAgICBsZW4gPSBzYi0+c2JfY2M7CiAKIAlpb3ZbMF0uaW92X2Jhc2UgPSBzYi0+c2Jf cnB0cjsKKyAgICAgICAgaW92WzFdLmlvdl9iYXNlID0gMDsKKyAgICAgICAgaW92WzFdLmlvdl9s ZW4gID0gMDsKIAlpZiAoc2ItPnNiX3JwdHIgPCBzYi0+c2Jfd3B0cikgewogCQlpb3ZbMF0uaW92 X2xlbiA9IHNiLT5zYl93cHRyIC0gc2ItPnNiX3JwdHI7CiAJCS8qIFNob3VsZCBuZXZlciBzdWNj ZWVkLCBidXQuLi4gKi8KQEAgLTM0OSw4ICszNTMsOCBAQAogCWlmIChubiA8PSAwKSB7CiAJCURF QlVHX01JU0MoKGRmZCwgIiAtLS0gc293cml0ZSBkaXNjb25uZWN0ZWQsIHNvLT5zb19zdGF0ZSA9 ICV4LCBlcnJubyA9ICVkXG4iLAogCQkJc28tPnNvX3N0YXRlLCBlcnJubykpOwotCQlzb2ZjYW50 c2VuZG1vcmUoc28pOwotCQl0Y3Bfc29ja2Nsb3NlZChzb3RvdGNwY2Ioc28pKTsKKwkJc29mY2Fu dHNlbmRtb3JlKHMsIHNvKTsKKwkJdGNwX3NvY2tjbG9zZWQocywgc290b3RjcGNiKHNvKSk7CiAJ CXJldHVybiAtMTsKIAl9CiAKQEAgLTM3NSw3ICszNzksNyBAQAogCSAqIGl0IENBTlRTRU5ETU9S RQogCSAqLwogCWlmICgoc28tPnNvX3N0YXRlICYgU1NfRldEUkFJTikgJiYgc2ItPnNiX2NjID09 IDApCi0JCXNvZmNhbnRzZW5kbW9yZShzbyk7CisJCXNvZmNhbnRzZW5kbW9yZShzLHNvKTsKIAog CXJldHVybiBubjsKIH0KQEAgLTM4NCw4ICszODgsNyBAQAogICogcmVjdmZyb20oKSBhIFVEUCBz b2NrZXQKICAqLwogdm9pZAotc29yZWN2ZnJvbShzbykKLQlzdHJ1Y3Qgc29ja2V0ICpzbzsKK3Nv cmVjdmZyb20oc2xpcnBfc3RhdGVfdCAqcywgc3RydWN0IHNvY2tldCAqc28pCiB7CiAJc3RydWN0 IHNvY2thZGRyX2luIGFkZHI7CiAJaW50IGFkZHJsZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRy X2luKTsKQEAgLTQwOSwxOSArNDEyLDE5IEBACiAKIAkgICAgREVCVUdfTUlTQygoZGZkLCIgdWRw IGljbXAgcnggZXJybm8gPSAlZC0lc1xuIiwKIAkJCWVycm5vLHN0cmVycm9yKGVycm5vKSkpOwot CSAgICBpY21wX2Vycm9yKHNvLT5zb19tLCBJQ01QX1VOUkVBQ0gsY29kZSwgMCxzdHJlcnJvcihl cnJubykpOworCSAgICBpY21wX2Vycm9yKHMsIHNvLT5zb19tLCBJQ01QX1VOUkVBQ0gsY29kZSwg MCxzdHJlcnJvcihlcnJubykpOwogCSAgfSBlbHNlIHsKLQkgICAgaWNtcF9yZWZsZWN0KHNvLT5z b19tKTsKKwkgICAgaWNtcF9yZWZsZWN0KHMsIHNvLT5zb19tKTsKIAkgICAgc28tPnNvX20gPSAw OyAvKiBEb24ndCBtX2ZyZWUoKSBpdCBhZ2FpbiEgKi8KIAkgIH0KIAkgIC8qIE5vIG5lZWQgZm9y IHRoaXMgc29ja2V0IGFueW1vcmUsIHVkcF9kZXRhY2ggaXQgKi8KLQkgIHVkcF9kZXRhY2goc28p OworCSAgdWRwX2RldGFjaChzLCBzbyk7CiAJfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgCS8qIEEgIm5vcm1hbCIgVURQIHBhY2tldCAqLwogCSAgc3RydWN0IG1idWYgKm07CiAJ ICBpbnQgbGVuLCBuOwogCi0JICBpZiAoIShtID0gbV9nZXQoKSkpIHJldHVybjsKLQkgIG0tPm1f ZGF0YSArPSBpZl9tYXhsaW5raGRyOworCSAgaWYgKCEobSA9IG1fZ2V0KHMpKSkgcmV0dXJuOwor CSAgbS0+bV9kYXRhICs9IHMtPmlmX21heGxpbmtoZHI7CiAKIAkgIC8qCiAJICAgKiBYWFggU2hv dWxkbid0IEZJT05SRUFEIHBhY2tldHMgZGVzdGluZWQgZm9yIHBvcnQgNTMsCkBAIC00NDksOCAr NDUyLDggQEAKIAkgICAgZWxzZSBpZihlcnJubyA9PSBFTkVUVU5SRUFDSCkgY29kZT1JQ01QX1VO UkVBQ0hfTkVUOwogCiAJICAgIERFQlVHX01JU0MoKGRmZCwiIHJ4IGVycm9yLCB0eCBpY21wIElD TVBfVU5SRUFDSDolaVxuIiwgY29kZSkpOwotCSAgICBpY21wX2Vycm9yKHNvLT5zb19tLCBJQ01Q X1VOUkVBQ0gsY29kZSwgMCxzdHJlcnJvcihlcnJubykpOwotCSAgICBtX2ZyZWUobSk7CisJICAg IGljbXBfZXJyb3Iocywgc28tPnNvX20sIElDTVBfVU5SRUFDSCxjb2RlLCAwLHN0cmVycm9yKGVy cm5vKSk7CisJICAgIG1fZnJlZShzLCBtKTsKIAkgIH0gZWxzZSB7CiAJICAvKgogCSAgICogSGFj azogZG9tYWluIG5hbWUgbG9va3VwIHdpbGwgYmUgdXNlZCB0aGUgbW9zdCBmb3IgVURQLApAQCAt NDYwLDkgKzQ2Myw5IEBACiAJICAgKi8KIAkgICAgaWYgKHNvLT5zb19leHBpcmUpIHsKIAkgICAg ICBpZiAoc28tPnNvX2Zwb3J0ID09IGh0b25zKDUzKSkKLQkJc28tPnNvX2V4cGlyZSA9IGN1cnRp bWUgKyBTT19FWFBJUkVGQVNUOworCQlzby0+c29fZXhwaXJlID0gcy0+Y3VydGltZSArIFNPX0VY UElSRUZBU1Q7CiAJICAgICAgZWxzZQotCQlzby0+c29fZXhwaXJlID0gY3VydGltZSArIFNPX0VY UElSRTsKKwkJc28tPnNvX2V4cGlyZSA9IHMtPmN1cnRpbWUgKyBTT19FWFBJUkU7CiAJICAgIH0K IAogCSAgICAvKgkJaWYgKG0tPm1fbGVuID09IGxlbikgewpAQCAtNDc1LDcgKzQ3OCw3IEBACiAJ ICAgICAqIElmIHRoaXMgcGFja2V0IHdhcyBkZXN0aW5lZCBmb3IgQ1RMX0FERFIsCiAJICAgICAq IG1ha2UgaXQgbG9vayBsaWtlIHRoYXQncyB3aGVyZSBpdCBjYW1lIGZyb20sIGRvbmUgYnkgdWRw X291dHB1dAogCSAgICAgKi8KLQkgICAgdWRwX291dHB1dChzbywgbSwgJmFkZHIpOworCSAgICB1 ZHBfb3V0cHV0KHMsIHNvLCBtLCAmYWRkcik7CiAJICB9IC8qIHJ4IGVycm9yICovCiAJfSAvKiBp ZiBwaW5nIHBhY2tldCAqLwogfQpAQCAtNDg0LDkgKzQ4Nyw3IEBACiAgKiBzZW5kdG8oKSBhIHNv Y2tldAogICovCiBpbnQKLXNvc2VuZHRvKHNvLCBtKQotCXN0cnVjdCBzb2NrZXQgKnNvOwotCXN0 cnVjdCBtYnVmICptOworc29zZW5kdG8oc2xpcnBfc3RhdGVfdCAqcywgc3RydWN0IHNvY2tldCAq c28sIHN0cnVjdCBtYnVmICptKQogewogCWludCByZXQ7CiAJc3RydWN0IHNvY2thZGRyX2luIGFk ZHI7CkBAIC00OTYsMTUgKzQ5NywzMCBAQAogCURFQlVHX0FSRygibSA9ICVseCIsIChsb25nKW0p OwogCiAgICAgICAgIGFkZHIuc2luX2ZhbWlseSA9IEFGX0lORVQ7Ci0JaWYgKChzby0+c29fZmFk ZHIuc19hZGRyICYgaHRvbmwoMHhmZmZmZmYwMCkpID09IHNwZWNpYWxfYWRkci5zX2FkZHIpIHsK KwlpZiAoKHNvLT5zb19mYWRkci5zX2FkZHIgJiBodG9ubCgweGZmZmZmZjAwKSkgPT0gcy0+c3Bl Y2lhbF9hZGRyLnNfYWRkcikgewogCSAgLyogSXQncyBhbiBhbGlhcyAqLwogCSAgc3dpdGNoKG50 b2hsKHNvLT5zb19mYWRkci5zX2FkZHIpICYgMHhmZikgeworICAgICAgICAgIGNhc2UgQ1RMX0JS T0FEQ0FTVDoKKyAgICAgICAgICAgIGFkZHIuc2luX2FkZHIuc19hZGRyID0gSU5BRERSX0JST0FE Q0FTVDsKKyNpZiAwCisgICAgICAgICAgICAvKiBTZW5kIHRoZSBwYWNrZXQgdG8gaG9zdCB0byBm dWxseSBlbXVsYXRlIGJyb2FkY2FzdCAqLworICAgICAgICAgICAgLyoqIEB0b2RvIHI9a2xhdXM6 IG9uIExpbnV4IGhvc3QgdGhpcyBjYXVzZXMgdGhlIGhvc3QgdG8gcmVjZWl2ZQorICAgICAgICAg ICAgICogdGhlIHBhY2tldCB0d2ljZSBmb3Igc29tZSByZWFzb24uIEFuZCBJIGNhbm5vdCBmaW5k IGFueSBwbGFjZQorICAgICAgICAgICAgICogaW4gdGhlIG1hbiBwYWdlcyB3aGljaCBzdGF0ZXMg dGhhdCBzZW5kaW5nIGEgYnJvYWRjYXN0IGRvZXMgbm90CisgICAgICAgICAgICAgKiByZWFjaCB0 aGUgaG9zdCBpdHNlbGYuICovCisgICAgICAgICAgICBob3N0X2FkZHIuc2luX2ZhbWlseSA9IEFG X0lORVQ7CisgICAgICAgICAgICBob3N0X2FkZHIuc2luX3BvcnQgPSBzby0+c29fZnBvcnQ7Cisg ICAgICAgICAgICBob3N0X2FkZHIuc2luX2FkZHIgPSBzLT5vdXJfYWRkcjsKKyAgICAgICAgICAg IHNlbmR0byhzby0+cywgbS0+bV9kYXRhLCBtLT5tX2xlbiwgMCwKKyAgICAgICAgICAgICAgICAg IChzdHJ1Y3Qgc29ja2FkZHIgKikmaG9zdF9hZGRyLCBzaXplb2YgKHN0cnVjdCBzb2NrYWRkcikp OworI2VuZGlmCisgICAgICAgICAgICBicmVhazsKIAkgIGNhc2UgQ1RMX0ROUzoKLQkgICAgYWRk ci5zaW5fYWRkciA9IGRuc19hZGRyOworCSAgICBhZGRyLnNpbl9hZGRyID0gcy0+ZG5zX2FkZHI7 CiAJICAgIGJyZWFrOwogCSAgY2FzZSBDVExfQUxJQVM6CiAJICBkZWZhdWx0OgotCSAgICBhZGRy LnNpbl9hZGRyID0gbG9vcGJhY2tfYWRkcjsKKwkgICAgYWRkci5zaW5fYWRkciA9IHMtPmxvb3Bi YWNrX2FkZHI7CiAJICAgIGJyZWFrOwogCSAgfQogCX0gZWxzZQpAQCAtNTI0LDcgKzU0MCw3IEBA CiAJICogYnV0IG9ubHkgaWYgaXQncyBhbiBleHBpcmFibGUgc29ja2V0CiAJICovCiAJaWYgKHNv LT5zb19leHBpcmUpCi0JCXNvLT5zb19leHBpcmUgPSBjdXJ0aW1lICsgU09fRVhQSVJFOworCQlz by0+c29fZXhwaXJlID0gcy0+Y3VydGltZSArIFNPX0VYUElSRTsKIAlzby0+c29fc3RhdGUgPSBT U19JU0ZDT05ORUNURUQ7IC8qIFNvIHRoYXQgaXQgZ2V0cyBzZWxlY3QoKWVkICovCiAJcmV0dXJu IDA7CiB9CkBAIC01MzMsMTUgKzU0OSwxMSBAQAogICogWFhYIFRoaXMgc2hvdWxkIHJlYWxseSBi ZSB0Y3BfbGlzdGVuCiAgKi8KIHN0cnVjdCBzb2NrZXQgKgotc29saXN0ZW4ocG9ydCwgbGFkZHIs IGxwb3J0LCBmbGFncykKLQl1X2ludCBwb3J0OwotCXVfaW50MzJfdCBsYWRkcjsKLQl1X2ludCBs cG9ydDsKLQlpbnQgZmxhZ3M7Citzb2xpc3RlbihzbGlycF9zdGF0ZV90ICpzLCB1X2ludCBwb3J0 LCB1X2ludDMyX3QgbGFkZHIsIHVfaW50IGxwb3J0LCBpbnQgZmxhZ3MpCiB7CiAJc3RydWN0IHNv Y2thZGRyX2luIGFkZHI7CiAJc3RydWN0IHNvY2tldCAqc287Ci0JaW50IHMsIGFkZHJsZW4gPSBz aXplb2YoYWRkciksIG9wdCA9IDE7CisJaW50IGZkLCBhZGRybGVuID0gc2l6ZW9mKGFkZHIpLCBv cHQgPSAxOwogCiAJREVCVUdfQ0FMTCgic29saXN0ZW4iKTsKIAlERUJVR19BUkcoInBvcnQgPSAl ZCIsIHBvcnQpOwpAQCAtNTU1LDExICs1NjcsMTEgQEAKIAl9CiAKIAkvKiBEb24ndCB0Y3BfYXR0 YWNoLi4uIHdlIGRvbid0IG5lZWQgc29fc25kIG5vciBzb19yY3YgKi8KLQlpZiAoKHNvLT5zb190 Y3BjYiA9IHRjcF9uZXd0Y3BjYihzbykpID09IE5VTEwpIHsKKwlpZiAoKHNvLT5zb190Y3BjYiA9 IHRjcF9uZXd0Y3BjYihzLCBzbykpID09IE5VTEwpIHsKIAkJZnJlZShzbyk7CiAJCXJldHVybiBO VUxMOwogCX0KLQlpbnNxdWUoc28sJnRjYik7CisJaW5zcXVlKHMsIHNvLCAmcy0+dGNiKTsKIAog CS8qCiAJICogU1NfRkFDQ0VQVE9OQ0Ugc29ja2V0cyBtdXN0IHRpbWUgb3V0LgpAQCAtNTc1LDE0 ICs1ODcsMTQgQEAKIAlhZGRyLnNpbl9hZGRyLnNfYWRkciA9IElOQUREUl9BTlk7CiAJYWRkci5z aW5fcG9ydCA9IHBvcnQ7CiAKLQlpZiAoKChzID0gc29ja2V0KEFGX0lORVQsU09DS19TVFJFQU0s MCkpIDwgMCkgfHwKLQkgICAgKHNldHNvY2tvcHQocyxTT0xfU09DS0VULFNPX1JFVVNFQUREUiwo Y2hhciAqKSZvcHQsc2l6ZW9mKGludCkpIDwgMCkgfHwKLQkgICAgKGJpbmQocywoc3RydWN0IHNv Y2thZGRyICopJmFkZHIsIHNpemVvZihhZGRyKSkgPCAwKSB8fAotCSAgICAobGlzdGVuKHMsMSkg PCAwKSkgeworCWlmICgoKGZkID0gc29ja2V0KEFGX0lORVQsU09DS19TVFJFQU0sIDApKSA8IDAp IHx8CisJICAgIChzZXRzb2Nrb3B0KGZkLCBTT0xfU09DS0VULCBTT19SRVVTRUFERFIsIChjaGFy ICopJm9wdCwgc2l6ZW9mKGludCkpIDwgMCkgfHwKKwkgICAgKGJpbmQoZmQsIChzdHJ1Y3Qgc29j a2FkZHIgKikmYWRkciwgc2l6ZW9mKGFkZHIpKSA8IDApIHx8CisJICAgIChsaXN0ZW4oZmQgLDEp IDwgMCkpIHsKIAkJaW50IHRtcGVycm5vID0gZXJybm87IC8qIERvbid0IGNsb2JiZXIgdGhlIHJl YWwgcmVhc29uIHdlIGZhaWxlZCAqLwogCi0JCWNsb3NlKHMpOwotCQlzb2ZyZWUoc28pOworCQlj bG9zZShmZCk7CisJCXNvZnJlZShzLCBzbyk7CiAJCS8qIFJlc3RvcmUgdGhlIHJlYWwgZXJybm8g Ki8KICNpZmRlZiBfV0lOMzIKIAkJV1NBU2V0TGFzdEVycm9yKHRtcGVycm5vKTsKQEAgLTU5MSwy NSArNjAzLDI2IEBACiAjZW5kaWYKIAkJcmV0dXJuIE5VTEw7CiAJfQotCXNldHNvY2tvcHQocyxT T0xfU09DS0VULFNPX09PQklOTElORSwoY2hhciAqKSZvcHQsc2l6ZW9mKGludCkpOworCXNldHNv Y2tvcHQoZmQsIFNPTF9TT0NLRVQsU09fT09CSU5MSU5FLCAoY2hhciAqKSZvcHQsIHNpemVvZihp bnQpKTsKIAotCWdldHNvY2tuYW1lKHMsKHN0cnVjdCBzb2NrYWRkciAqKSZhZGRyLCZhZGRybGVu KTsKKwlnZXRzb2NrbmFtZShmZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZhZGRyLCAmYWRkcmxlbik7 CiAJc28tPnNvX2Zwb3J0ID0gYWRkci5zaW5fcG9ydDsKLQlpZiAoYWRkci5zaW5fYWRkci5zX2Fk ZHIgPT0gMCB8fCBhZGRyLnNpbl9hZGRyLnNfYWRkciA9PSBsb29wYmFja19hZGRyLnNfYWRkcikK LQkgICBzby0+c29fZmFkZHIgPSBhbGlhc19hZGRyOworCWlmIChhZGRyLnNpbl9hZGRyLnNfYWRk ciA9PSAwIHx8IGFkZHIuc2luX2FkZHIuc19hZGRyID09IHMtPmxvb3BiYWNrX2FkZHIuc19hZGRy KQorCSAgIHNvLT5zb19mYWRkciA9IHMtPmFsaWFzX2FkZHI7CiAJZWxzZQogCSAgIHNvLT5zb19m YWRkciA9IGFkZHIuc2luX2FkZHI7CiAKLQlzby0+cyA9IHM7CisJc28tPnMgPSBmZDsKIAlyZXR1 cm4gc287CiB9CiAKKyNpZiAwCiAvKgogICogRGF0YSBpcyBhdmFpbGFibGUgaW4gc29fcmN2CiAg KiBKdXN0IHdyaXRlKCkgdGhlIGRhdGEgdG8gdGhlIHNvY2tldAogICogWFhYIG5vdCB5ZXQuLi4K ICAqLwotdm9pZAorc3RhdGljIHZvaWQKIHNvcndha2V1cChzbykKIAlzdHJ1Y3Qgc29ja2V0ICpz bzsKIHsKQEAgLTYyMiwxMiArNjM1LDEzIEBACiAgKiBXZSBoYXZlIHJvb20gZm9yIGEgcmVhZCgp IGlmIHdlIHdhbnQgdG8KICAqIEZvciBub3csIGRvbid0IHJlYWQsIGl0J2xsIGJlIGRvbmUgaW4g dGhlIG1haW4gbG9vcAogICovCi12b2lkCitzdGF0aWMgdm9pZAogc293d2FrZXVwKHNvKQogCXN0 cnVjdCBzb2NrZXQgKnNvOwogewogCS8qIE5vdGhpbmcsIHlldCAqLwogfQorI2VuZGlmCiAKIC8q CiAgKiBWYXJpb3VzIHNlc3Npb24gc3RhdGUgY2FsbHMKQEAgLTY1MiwxNCArNjY2LDEzIEBACiAJ c28tPnNvX3N0YXRlIHw9IFNTX0lTRkNPTk5FQ1RFRDsgLyogQ2xvYmJlciBvdGhlciBzdGF0ZXMg Ki8KIH0KIAotdm9pZAotc29mY2FudHJjdm1vcmUoc28pCi0Jc3RydWN0ICBzb2NrZXQgKnNvOwor c3RhdGljIHZvaWQKK3NvZmNhbnRyY3Ztb3JlKHNsaXJwX3N0YXRlX3QgKnMsIHN0cnVjdCAgc29j a2V0ICpzbykKIHsKIAlpZiAoKHNvLT5zb19zdGF0ZSAmIFNTX05PRkRSRUYpID09IDApIHsKIAkJ c2h1dGRvd24oc28tPnMsMCk7Ci0JCWlmKGdsb2JhbF93cml0ZWZkcykgewotCQkgIEZEX0NMUihz by0+cyxnbG9iYWxfd3JpdGVmZHMpOworCQlpZiAocy0+d3JpdGVmZHMpIHsKKyAgICAgICAgICAg ICAgICAgICAgRkRfQ0xSKHNvLT5zLCBzLT53cml0ZWZkcyk7CiAJCX0KIAl9CiAJc28tPnNvX3N0 YXRlICY9IH4oU1NfSVNGQ09OTkVDVElORyk7CkBAIC02NjksMTcgKzY4MiwxNiBAQAogCSAgIHNv LT5zb19zdGF0ZSB8PSBTU19GQ0FOVFJDVk1PUkU7CiB9CiAKLXZvaWQKLXNvZmNhbnRzZW5kbW9y ZShzbykKLQlzdHJ1Y3Qgc29ja2V0ICpzbzsKK3N0YXRpYyB2b2lkCitzb2ZjYW50c2VuZG1vcmUo c2xpcnBfc3RhdGVfdCAqcywgc3RydWN0IHNvY2tldCAqc28pCiB7CiAJaWYgKChzby0+c29fc3Rh dGUgJiBTU19OT0ZEUkVGKSA9PSAwKSB7CiAgICAgICAgICAgICBzaHV0ZG93bihzby0+cywxKTsg ICAgICAgICAgIC8qIHNlbmQgRklOIHRvIGZob3N0ICovCi0gICAgICAgICAgICBpZiAoZ2xvYmFs X3JlYWRmZHMpIHsKLSAgICAgICAgICAgICAgICBGRF9DTFIoc28tPnMsZ2xvYmFsX3JlYWRmZHMp OworICAgICAgICAgICAgaWYgKHMtPnJlYWRmZHMpIHsKKyAgICAgICAgICAgICAgICBGRF9DTFIo c28tPnMsIHMtPnJlYWRmZHMpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGdsb2Jh bF94ZmRzKSB7Ci0gICAgICAgICAgICAgICAgRkRfQ0xSKHNvLT5zLGdsb2JhbF94ZmRzKTsKKyAg ICAgICAgICAgIGlmIChzLT54ZmRzKSB7CisgICAgICAgICAgICAgICAgRkRfQ0xSKHNvLT5zLCBz LT54ZmRzKTsKICAgICAgICAgICAgIH0KIAl9CiAJc28tPnNvX3N0YXRlICY9IH4oU1NfSVNGQ09O TkVDVElORyk7CkBAIC03MDYsMTIgKzcxOCwxMSBAQAogICogU2V0IENBTlRTRU5ETU9SRSBvbmNl IGFsbCBkYXRhIGhhcyBiZWVuIHdyaXRlKCluCiAgKi8KIHZvaWQKLXNvZndkcmFpbihzbykKLQlz dHJ1Y3Qgc29ja2V0ICpzbzsKK3NvZndkcmFpbihzbGlycF9zdGF0ZV90ICpzLCBzdHJ1Y3Qgc29j a2V0ICpzbykKIHsKIAlpZiAoc28tPnNvX3Jjdi5zYl9jYykKIAkJc28tPnNvX3N0YXRlIHw9IFNT X0ZXRFJBSU47CiAJZWxzZQotCQlzb2ZjYW50c2VuZG1vcmUoc28pOworCQlzb2ZjYW50c2VuZG1v cmUocywgc28pOwogfQogCkluZGV4OiBxZW11L3NsaXJwL3NvY2tldC5oCj09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t IHFlbXUub3JpZy9zbGlycC9zb2NrZXQuaAkyMDA3LTEwLTIwIDA3OjMzOjM3LjAwMDAwMDAwMCAr MDAwMAorKysgcWVtdS9zbGlycC9zb2NrZXQuaAkyMDA3LTEwLTIwIDE0OjU1OjI1LjAwMDAwMDAw MCArMDAwMApAQCAtNzEsOSArNzEsNiBAQAogI2RlZmluZSBTU19GQUNDRVBUQ09OTgkJMHgxMDAJ LyogU29ja2V0IGlzIGFjY2VwdGluZyBjb25uZWN0aW9ucyBmcm9tIGEgaG9zdCBvbiB0aGUgaW50 ZXJuZXQgKi8KICNkZWZpbmUgU1NfRkFDQ0VQVE9OQ0UJCTB4MjAwCS8qIElmIHNldCwgdGhlIFNT X0ZBQ0NFUFRDT05OIHNvY2tldCB3aWxsIGRpZSBhZnRlciBvbmUgYWNjZXB0ICovCiAKLWV4dGVy biBzdHJ1Y3Qgc29ja2V0IHRjYjsKLQotCiAjaWYgZGVmaW5lZChERUNMQVJFX0lPVkVDKSAmJiAh ZGVmaW5lZChIQVZFX1JFQURWKQogc3RydWN0IGlvdmVjIHsKIAljaGFyICppb3ZfYmFzZTsKQEAg LTgxLDI0ICs3OCwyMCBAQAogfTsKICNlbmRpZgogCi12b2lkIHNvX2luaXQgX1AoKHZvaWQpKTsK IHN0cnVjdCBzb2NrZXQgKiBzb2xvb2t1cCBfUCgoc3RydWN0IHNvY2tldCAqLCBzdHJ1Y3QgaW5f YWRkciwgdV9pbnQsIHN0cnVjdCBpbl9hZGRyLCB1X2ludCkpOwogc3RydWN0IHNvY2tldCAqIHNv Y3JlYXRlIF9QKCh2b2lkKSk7Ci12b2lkIHNvZnJlZSBfUCgoc3RydWN0IHNvY2tldCAqKSk7Ci1p bnQgc29yZWFkIF9QKChzdHJ1Y3Qgc29ja2V0ICopKTsKLXZvaWQgc29yZWN2b29iIF9QKChzdHJ1 Y3Qgc29ja2V0ICopKTsKK3ZvaWQgc29mcmVlKHNsaXJwX3N0YXRlX3QgKnMsIHN0cnVjdCBzb2Nr ZXQgKnNvKTsKK2ludCBzb3JlYWQoc2xpcnBfc3RhdGVfdCAqcywgc3RydWN0IHNvY2tldCAqc28p Owordm9pZCBzb3JlY3Zvb2Ioc2xpcnBfc3RhdGVfdCAqcywgc3RydWN0IHNvY2tldCAqc28pOwog aW50IHNvc2VuZG9vYiBfUCgoc3RydWN0IHNvY2tldCAqKSk7Ci1pbnQgc293cml0ZSBfUCgoc3Ry dWN0IHNvY2tldCAqKSk7Ci12b2lkIHNvcmVjdmZyb20gX1AoKHN0cnVjdCBzb2NrZXQgKikpOwot aW50IHNvc2VuZHRvIF9QKChzdHJ1Y3Qgc29ja2V0ICosIHN0cnVjdCBtYnVmICopKTsKLXN0cnVj dCBzb2NrZXQgKiBzb2xpc3RlbiBfUCgodV9pbnQsIHVfaW50MzJfdCwgdV9pbnQsIGludCkpOwot dm9pZCBzb3J3YWtldXAgX1AoKHN0cnVjdCBzb2NrZXQgKikpOwotdm9pZCBzb3d3YWtldXAgX1Ao KHN0cnVjdCBzb2NrZXQgKikpOworaW50IHNvd3JpdGUoc2xpcnBfc3RhdGVfdCAqcywgc3RydWN0 IHNvY2tldCAqc28pOwordm9pZCBzb3JlY3Zmcm9tKHNsaXJwX3N0YXRlX3QgKnMsIHN0cnVjdCBz b2NrZXQgKnNvKTsKK2ludCBzb3NlbmR0byhzbGlycF9zdGF0ZV90ICpzLCBzdHJ1Y3Qgc29ja2V0 ICpzbywgc3RydWN0IG1idWYgKm0pOworc3RydWN0IHNvY2tldCAqc29saXN0ZW4oc2xpcnBfc3Rh dGVfdCAqcywgdV9pbnQgcG9ydCwgdV9pbnQzMl90IGxhZGRyLAorICAgICAgICAgICAgICAgICAg ICAgICAgdV9pbnQgbHBvcnQsIGludCBmbGFncyk7CiB2b2lkIHNvaXNmY29ubmVjdGluZyBfUCgo cmVnaXN0ZXIgc3RydWN0IHNvY2tldCAqKSk7CiB2b2lkIHNvaXNmY29ubmVjdGVkIF9QKChyZWdp c3RlciBzdHJ1Y3Qgc29ja2V0ICopKTsKLXZvaWQgc29mY2FudHJjdm1vcmUgX1AoKHN0cnVjdCAg c29ja2V0ICopKTsKLXZvaWQgc29mY2FudHNlbmRtb3JlIF9QKChzdHJ1Y3Qgc29ja2V0ICopKTsK IHZvaWQgc29pc2ZkaXNjb25uZWN0ZWQgX1AoKHN0cnVjdCBzb2NrZXQgKikpOwotdm9pZCBzb2Z3 ZHJhaW4gX1AoKHN0cnVjdCBzb2NrZXQgKikpOwordm9pZCBzb2Z3ZHJhaW4oc2xpcnBfc3RhdGVf dCAqcywgc3RydWN0IHNvY2tldCAqc28pOwogCiAjZW5kaWYgLyogX1NPQ0tFVF9IXyAqLwpJbmRl eDogcWVtdS9zbGlycC90Y3AuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBxZW11Lm9yaWcvc2xpcnAvdGNwLmgJ MjAwNy0xMC0yMCAwNzozMzozNy4wMDAwMDAwMDAgKzAwMDAKKysrIHFlbXUvc2xpcnAvdGNwLmgJ MjAwNy0xMC0yMCAwOTo0MjoyNi4wMDAwMDAwMDAgKzAwMDAKQEAgLTQyLDEwICs0Miw2IEBACiAj ZGVmaW5lICAgICAgUFJfU0xPV0haICAgICAgIDIgICAgICAgICAgICAgICAvKiAyIHNsb3cgdGlt ZW91dHMgcGVyIHNlY29uZCAoYXBwcm94KSAqLwogI2RlZmluZSAgICAgIFBSX0ZBU1RIWiAgICAg ICA1ICAgICAgICAgICAgICAgLyogNSBmYXN0IHRpbWVvdXRzIHBlciBzZWNvbmQgKG5vdCBpbXBv cnRhbnQpICovCiAKLWV4dGVybiBpbnQgdGNwX3JjdnNwYWNlOwotZXh0ZXJuIGludCB0Y3Bfc25k c3BhY2U7Ci1leHRlcm4gc3RydWN0IHNvY2tldCAqdGNwX2xhc3Rfc287Ci0KICNkZWZpbmUgVENQ X1NORFNQQUNFIDgxOTIKICNkZWZpbmUgVENQX1JDVlNQQUNFIDgxOTIKIApAQCAtMTcwLDggKzE2 Niw2IEBACiAKICNkZWZpbmUgVENQX0lTU0lOQ1IgICAgICgxMjUqMTAyNCkgICAgICAvKiBpbmNy ZW1lbnQgZm9yIHRjcF9pc3MgZWFjaCBzZWNvbmQgKi8KIAotZXh0ZXJuIHRjcF9zZXEgdGNwX2lz czsgICAgICAgICAgICAgICAgLyogdGNwIGluaXRpYWwgc2VuZCBzZXEgIyAqLwotCi1leHRlcm4g Y2hhciAqdGNwc3RhdGVzW107CitleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IHRjcHN0YXRlc1td OwogCiAjZW5kaWYKSW5kZXg6IHFlbXUvc2xpcnAvdGNwX2lucHV0LmMKPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g cWVtdS5vcmlnL3NsaXJwL3RjcF9pbnB1dC5jCTIwMDctMTAtMjAgMDc6MzM6MzguMDAwMDAwMDAw ICswMDAwCisrKyBxZW11L3NsaXJwL3RjcF9pbnB1dC5jCTIwMDctMTAtMjAgMTc6MDg6NTkuMDAw MDAwMDAwICswMDAwCkBAIC00NSwxMiArNDUsNiBAQAogI2luY2x1ZGUgPHNsaXJwLmg+CiAjaW5j bHVkZSAiaXBfaWNtcC5oIgogCi1zdHJ1Y3Qgc29ja2V0IHRjYjsKLQotaW50CXRjcHJleG10dGhy ZXNoID0gMzsKLXN0cnVjdAlzb2NrZXQgKnRjcF9sYXN0X3NvID0gJnRjYjsKLQotdGNwX3NlcSB0 Y3BfaXNzOyAgICAgICAgICAgICAgICAvKiB0Y3AgaW5pdGlhbCBzZW5kIHNlcSAjICovCiAKICNk ZWZpbmUgVENQX1BBV1NfSURMRQkoMjQgKiAyNCAqIDYwICogNjAgKiBQUl9TTE9XSFopCiAKQEAg LTY5LDcgKzYzLDcgQEAKICAqIHdoZW4gc2VnbWVudHMgYXJlIG91dCBvZiBvcmRlciAoc28gZmFz dCByZXRyYW5zbWl0IGNhbiB3b3JrKS4KICAqLwogI2lmZGVmIFRDUF9BQ0tfSEFDSwotI2RlZmlu ZSBUQ1BfUkVBU1ModHAsIHRpLCBtLCBzbywgZmxhZ3MpIHtcCisjZGVmaW5lIFRDUF9SRUFTUyhz LCB0cCwgdGksIG0sIHNvLCBmbGFncykge1wKICAgICAgICBpZiAoKHRpKS0+dGlfc2VxID09ICh0 cCktPnJjdl9ueHQgJiYgXAogICAgICAgICAgICAodHApLT5zZWdfbmV4dCA9PSAodGNwaXBoZHJw XzMyKSh0cCkgJiYgXAogICAgICAgICAgICAodHApLT50X3N0YXRlID09IFRDUFNfRVNUQUJMSVNI RUQpIHtcCkBAIC03OSw0NSArNzMsNDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgdHAtPnRf ZmxhZ3MgfD0gVEZfREVMQUNLOyBcCiAgICAgICAgICAgICAgICAodHApLT5yY3Zfbnh0ICs9ICh0 aSktPnRpX2xlbjsgXAogICAgICAgICAgICAgICAgZmxhZ3MgPSAodGkpLT50aV9mbGFncyAmIFRI X0ZJTjsgXAotICAgICAgICAgICAgICAgdGNwc3RhdC50Y3BzX3JjdnBhY2srKztcCi0gICAgICAg ICAgICAgICB0Y3BzdGF0LnRjcHNfcmN2Ynl0ZSArPSAodGkpLT50aV9sZW47XAorICAgICAgICAg ICAgICAgcy0+dGNwc3RhdC50Y3BzX3JjdnBhY2srKztcCisgICAgICAgICAgICAgICBzLT50Y3Bz dGF0LnRjcHNfcmN2Ynl0ZSArPSAodGkpLT50aV9sZW47XAogICAgICAgICAgICAgICAgaWYgKHNv LT5zb19lbXUpIHsgXAotCQkgICAgICAgaWYgKHRjcF9lbXUoKHNvKSwobSkpKSBzYmFwcGVuZCgo c28pLCAobSkpOyBcCisJCSAgICAgICBpZiAodGNwX2VtdSgocyksIChzbyksIChtKSkpICAgICBc CisgICAgICAgICAgICAgICAgICAgICAgICAgICBzYmFwcGVuZCgocyksIChzbyksIChtKSk7ICAg IFwKIAkgICAgICAgfSBlbHNlIFwKLQkgICAgICAgCSAgICAgICBzYmFwcGVuZCgoc28pLCAobSkp OyBcCisJICAgICAgIAkgICAgICAgc2JhcHBlbmQoKHMpLCAoc28pLCAobSkpOyBcCiAvKiAgICAg ICAgICAgICAgIHNvcndha2V1cChzbyk7ICovIFwKIAl9IGVsc2Uge1wKLSAgICAgICAgICAgICAg IChmbGFncykgPSB0Y3BfcmVhc3MoKHRwKSwgKHRpKSwgKG0pKTsgXAorICAgICAgICAgICAgICAg KGZsYWdzKSA9IHRjcF9yZWFzcygocyksICh0cCksICh0aSksIChtKSk7IFwKICAgICAgICAgICAg ICAgIHRwLT50X2ZsYWdzIHw9IFRGX0FDS05PVzsgXAogICAgICAgIH0gXAogfQogI2Vsc2UKLSNk ZWZpbmUJVENQX1JFQVNTKHRwLCB0aSwgbSwgc28sIGZsYWdzKSB7IFwKKyNkZWZpbmUJVENQX1JF QVNTKHMsIHRwLCB0aSwgbSwgc28sIGZsYWdzKSB7IFwKIAlpZiAoKHRpKS0+dGlfc2VxID09ICh0 cCktPnJjdl9ueHQgJiYgXAogCSAgICAodHApLT5zZWdfbmV4dCA9PSAodGNwaXBoZHJwXzMyKSh0 cCkgJiYgXAogCSAgICAodHApLT50X3N0YXRlID09IFRDUFNfRVNUQUJMSVNIRUQpIHsgXAogCQl0 cC0+dF9mbGFncyB8PSBURl9ERUxBQ0s7IFwKIAkJKHRwKS0+cmN2X254dCArPSAodGkpLT50aV9s ZW47IFwKIAkJZmxhZ3MgPSAodGkpLT50aV9mbGFncyAmIFRIX0ZJTjsgXAotCQl0Y3BzdGF0LnRj cHNfcmN2cGFjaysrO1wKLQkJdGNwc3RhdC50Y3BzX3JjdmJ5dGUgKz0gKHRpKS0+dGlfbGVuO1wK KwkJcy0+dGNwc3RhdC50Y3BzX3JjdnBhY2srKztcCisJCXMtPnRjcHN0YXQudGNwc19yY3ZieXRl ICs9ICh0aSktPnRpX2xlbjtcCiAJCWlmIChzby0+c29fZW11KSB7IFwKLQkJCWlmICh0Y3BfZW11 KChzbyksKG0pKSkgc2JhcHBlbmQoc28sIChtKSk7IFwKKwkJICAgICAgIGlmICh0Y3BfZW11KChz KSwgKHNvKSwgKG0pKSkgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYmFwcGVu ZCgocyksIChzbyksIChtKSk7ICAgXAogCQl9IGVsc2UgXAotCQkJc2JhcHBlbmQoKHNvKSwgKG0p KTsgXAorCQkJc2JhcHBlbmQoKHMpLCAoc28pLCAobSkpOyBcCiAvKgkJc29yd2FrZXVwKHNvKTsg Ki8gXAogCX0gZWxzZSB7IFwKLQkJKGZsYWdzKSA9IHRjcF9yZWFzcygodHApLCAodGkpLCAobSkp OyBcCisJCShmbGFncykgPSB0Y3BfcmVhc3MoKHMpLCAodHApLCAodGkpLCAobSkpOyBcCiAJCXRw LT50X2ZsYWdzIHw9IFRGX0FDS05PVzsgXAogCX0gXAogfQogI2VuZGlmCi0KLWludAotdGNwX3Jl YXNzKHRwLCB0aSwgbSkKLQlyZWdpc3RlciBzdHJ1Y3QgdGNwY2IgKnRwOwotCXJlZ2lzdGVyIHN0 cnVjdCB0Y3BpcGhkciAqdGk7Ci0Jc3RydWN0IG1idWYgKm07CitzdGF0aWMgdm9pZCB0Y3BfZG9v cHRpb25zKHNsaXJwX3N0YXRlX3QgKnMsIHN0cnVjdCB0Y3BjYiAqdHAsIHVfY2hhciAqY3AsCisg ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjbnQsIHN0cnVjdCB0Y3BpcGhkciAqdGkpOwor c3RhdGljIHZvaWQgdGNwX3htaXRfdGltZXIoc2xpcnBfc3RhdGVfdCAqcywgcmVnaXN0ZXIgc3Ry dWN0IHRjcGNiICp0cCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBydHQpOworCitz dGF0aWMgaW50Cit0Y3BfcmVhc3Moc2xpcnBfc3RhdGVfdCAqcywgcmVnaXN0ZXIgc3RydWN0IHRj cGNiICp0cCwKKyAgICAgICAgICByZWdpc3RlciBzdHJ1Y3QgdGNwaXBoZHIgKnRpLCBzdHJ1Y3Qg bWJ1ZiAqbSkKIHsKIAlyZWdpc3RlciBzdHJ1Y3QgdGNwaXBoZHIgKnE7CiAJc3RydWN0IHNvY2tl dCAqc28gPSB0cC0+dF9zb2NrZXQ7CkBAIC0xMzMsOCArMTMxLDcgQEAKIAkvKgogCSAqIEZpbmQg YSBzZWdtZW50IHdoaWNoIGJlZ2lucyBhZnRlciB0aGlzIG9uZSBkb2VzLgogCSAqLwotCWZvciAo cSA9IChzdHJ1Y3QgdGNwaXBoZHIgKil0cC0+c2VnX25leHQ7IHEgIT0gKHN0cnVjdCB0Y3BpcGhk ciAqKXRwOwotCSAgICBxID0gKHN0cnVjdCB0Y3BpcGhkciAqKXEtPnRpX25leHQpCisJZm9yIChx ID0gdHAtPnNlZ19uZXh0OyBxICE9IHRwOyBxID0gcS0+dGlfbmV4dCkKIAkJaWYgKFNFUV9HVChx LT50aV9zZXEsIHRpLT50aV9zZXEpKQogCQkJYnJlYWs7CiAKQEAgLTE1MCw5ICsxNDcsOSBAQAog CQlpID0gcS0+dGlfc2VxICsgcS0+dGlfbGVuIC0gdGktPnRpX3NlcTsKIAkJaWYgKGkgPiAwKSB7 CiAJCQlpZiAoaSA+PSB0aS0+dGlfbGVuKSB7Ci0JCQkJdGNwc3RhdC50Y3BzX3JjdmR1cHBhY2sr KzsKLQkJCQl0Y3BzdGF0LnRjcHNfcmN2ZHVwYnl0ZSArPSB0aS0+dGlfbGVuOwotCQkJCW1fZnJl ZW0obSk7CisJCQkJcy0+dGNwc3RhdC50Y3BzX3JjdmR1cHBhY2srKzsKKwkJCQlzLT50Y3BzdGF0 LnRjcHNfcmN2ZHVwYnl0ZSArPSB0aS0+dGlfbGVuOworCQkJCW1fZnJlZW0ocywgbSk7CiAJCQkJ LyoKIAkJCQkgKiBUcnkgdG8gcHJlc2VudCBhbnkgcXVldWVkIGRhdGEKIAkJCQkgKiBhdCB0aGUg bGVmdCB3aW5kb3cgZWRnZSB0byB0aGUgdXNlci4KQEAgLTE2Nyw5ICsxNjQsOSBAQAogCQl9CiAJ CXEgPSAoc3RydWN0IHRjcGlwaGRyICopKHEtPnRpX25leHQpOwogCX0KLQl0Y3BzdGF0LnRjcHNf cmN2b29wYWNrKys7Ci0JdGNwc3RhdC50Y3BzX3Jjdm9vYnl0ZSArPSB0aS0+dGlfbGVuOwotCVJF QVNTX01CVUYodGkpID0gKG1idWZwXzMyKSBtOwkJLyogWFhYICovCisJcy0+dGNwc3RhdC50Y3Bz X3Jjdm9vcGFjaysrOworCXMtPnRjcHN0YXQudGNwc19yY3Zvb2J5dGUgKz0gdGktPnRpX2xlbjsK KwlSRUFTU19NQlVGX1NFVCh0aSwgbSk7IC8qIFhYWCAqLwogCiAJLyoKIAkgKiBXaGlsZSB3ZSBv dmVybGFwIHN1Y2NlZWRpbmcgc2VnbWVudHMgdHJpbSB0aGVtIG9yLApAQCAtMTgyLDE5ICsxNzks MTkgQEAKIAkJaWYgKGkgPCBxLT50aV9sZW4pIHsKIAkJCXEtPnRpX3NlcSArPSBpOwogCQkJcS0+ dGlfbGVuIC09IGk7Ci0JCQltX2Fkaigoc3RydWN0IG1idWYgKikgUkVBU1NfTUJVRihxKSwgaSk7 CisJCQltX2FkaihSRUFTU19NQlVGX0dFVChxKSwgaSk7CiAJCQlicmVhazsKIAkJfQogCQlxID0g KHN0cnVjdCB0Y3BpcGhkciAqKXEtPnRpX25leHQ7Ci0JCW0gPSAoc3RydWN0IG1idWYgKikgUkVB U1NfTUJVRigoc3RydWN0IHRjcGlwaGRyICopcS0+dGlfcHJldik7Ci0JCXJlbXF1ZV8zMigodm9p ZCAqKShxLT50aV9wcmV2KSk7Ci0JCW1fZnJlZW0obSk7CisJCW0gPSAoc3RydWN0IG1idWYgKikg UkVBU1NfTUJVRl9HRVQoKHN0cnVjdCB0Y3BpcGhkciAqKXEtPnRpX3ByZXYpOworCQlyZW1xdWVf MzIocywgKHZvaWQgKikocS0+dGlfcHJldikpOworCQltX2ZyZWVtKHMsIG0pOwogCX0KIAogCS8q CiAJICogU3RpY2sgbmV3IHNlZ21lbnQgaW4gaXRzIHBsYWNlLgogCSAqLwotCWluc3F1ZV8zMih0 aSwgKHZvaWQgKikocS0+dGlfcHJldikpOworCWluc3F1ZV8zMihzLCB0aSwgKHZvaWQgKikocS0+ dGlfcHJldikpOwogCiBwcmVzZW50OgogCS8qCkBAIC0yMTEsMTcgKzIwOCwxOCBAQAogCWRvIHsK IAkJdHAtPnJjdl9ueHQgKz0gdGktPnRpX2xlbjsKIAkJZmxhZ3MgPSB0aS0+dGlfZmxhZ3MgJiBU SF9GSU47Ci0JCXJlbXF1ZV8zMih0aSk7Ci0JCW0gPSAoc3RydWN0IG1idWYgKikgUkVBU1NfTUJV Rih0aSk7IC8qIFhYWCAqLworCQlyZW1xdWVfMzIocywgdGkpOworCQltID0gUkVBU1NfTUJVRl9H RVQodGkpOyAvKiBYWFggKi8KIAkJdGkgPSAoc3RydWN0IHRjcGlwaGRyICopdGktPnRpX25leHQ7 CiAvKgkJaWYgKHNvLT5zb19zdGF0ZSAmIFNTX0ZDQU5UUkNWTU9SRSkgKi8KIAkJaWYgKHNvLT5z b19zdGF0ZSAmIFNTX0ZDQU5UU0VORE1PUkUpCi0JCQltX2ZyZWVtKG0pOworICAgICAgICAgICAg ICAgICAgICAgICAgbV9mcmVlbShzLCBtKTsKIAkJZWxzZSB7CiAJCQlpZiAoc28tPnNvX2VtdSkg ewotCQkJCWlmICh0Y3BfZW11KHNvLG0pKSBzYmFwcGVuZChzbywgbSk7CisJCQkJaWYgKHRjcF9l bXUocywgc28sbSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYmFwcGVu ZChzLCBzbywgbSk7CiAJCQl9IGVsc2UKLQkJCQlzYmFwcGVuZChzbywgbSk7CisJCQkJc2JhcHBl bmQocywgc28sIG0pOwogCQl9CiAJfSB3aGlsZSAodGkgIT0gKHN0cnVjdCB0Y3BpcGhkciAqKXRw ICYmIHRpLT50aV9zZXEgPT0gdHAtPnJjdl9ueHQpOwogLyoJc29yd2FrZXVwKHNvKTsgKi8KQEAg LTIzMywxMCArMjMxLDcgQEAKICAqIHByb3RvY29sIHNwZWNpZmljYXRpb24gZGF0ZWQgU2VwdGVt YmVyLCAxOTgxIHZlcnkgY2xvc2VseS4KICAqLwogdm9pZAotdGNwX2lucHV0KG0sIGlwaGxlbiwg aW5zbykKLQlyZWdpc3RlciBzdHJ1Y3QgbWJ1ZiAqbTsKLQlpbnQgaXBobGVuOwotCXN0cnVjdCBz b2NrZXQgKmluc287Cit0Y3BfaW5wdXQoc2xpcnBfc3RhdGVfdCAqcywgcmVnaXN0ZXIgc3RydWN0 IG1idWYgKm0sIGludCBpcGhsZW4sIHN0cnVjdCBzb2NrZXQgKmluc28pCiB7CiAgIAlzdHJ1Y3Qg aXAgc2F2ZV9pcCwgKmlwOwogCXJlZ2lzdGVyIHN0cnVjdCB0Y3BpcGhkciAqdGk7CkBAIC0yNTIs NiArMjQ3LDcgQEAKIAl1X2xvbmcgdGl3aW47CiAJaW50IHJldDsKIC8qCWludCB0c19wcmVzZW50 ID0gMDsgKi8KKwlpbnQgbWJ1Zl9mcmVlZCA9IDA7CiAKIAlERUJVR19DQUxMKCJ0Y3BfaW5wdXQi KTsKIAlERUJVR19BUkdTKChkZmQsIiBtID0gJThseCAgaXBobGVuID0gJTJkICBpbnNvID0gJWx4 XG4iLApAQCAtMjc1LDcgKzI3MSw3IEBACiAJfQogCiAKLQl0Y3BzdGF0LnRjcHNfcmN2dG90YWwr KzsKKwlzLT50Y3BzdGF0LnRjcHNfcmN2dG90YWwrKzsKIAkvKgogCSAqIEdldCBJUCBhbmQgVENQ IGhlYWRlciB0b2dldGhlciBpbiBmaXJzdCBtYnVmLgogCSAqIE5vdGU6IElQIGxlYXZlcyBJUCBo ZWFkZXIgaW4gZmlyc3QgbWJ1Zi4KQEAgLTMwOCw3ICszMDQsNyBAQAogCSAqIHRpLT50aV9zdW0g PSBja3N1bShtLCBsZW4pOwogCSAqIGlmICh0aS0+dGlfc3VtKSB7ICovCiAJaWYoY2tzdW0obSwg bGVuKSkgewotCSAgdGNwc3RhdC50Y3BzX3JjdmJhZHN1bSsrOworCSAgcy0+dGNwc3RhdC50Y3Bz X3JjdmJhZHN1bSsrOwogCSAgZ290byBkcm9wOwogCX0KIApAQCAtMzE4LDcgKzMxNCw3IEBACiAJ ICovCiAJb2ZmID0gdGktPnRpX29mZiA8PCAyOwogCWlmIChvZmYgPCBzaXplb2YgKHN0cnVjdCB0 Y3BoZHIpIHx8IG9mZiA+IHRsZW4pIHsKLQkgIHRjcHN0YXQudGNwc19yY3ZiYWRvZmYrKzsKKwkg IHMtPnRjcHN0YXQudGNwc19yY3ZiYWRvZmYrKzsKIAkgIGdvdG8gZHJvcDsKIAl9CiAJdGxlbiAt PSBvZmY7CkBAIC0zNjYsMTYgKzM2MiwxNiBAQAogCSAqIExvY2F0ZSBwY2IgZm9yIHNlZ21lbnQu CiAJICovCiBmaW5kc286Ci0Jc28gPSB0Y3BfbGFzdF9zbzsKKwlzbyA9IHMtPnRjcF9sYXN0X3Nv OwogCWlmIChzby0+c29fZnBvcnQgIT0gdGktPnRpX2Rwb3J0IHx8CiAJICAgIHNvLT5zb19scG9y dCAhPSB0aS0+dGlfc3BvcnQgfHwKIAkgICAgc28tPnNvX2xhZGRyLnNfYWRkciAhPSB0aS0+dGlf c3JjLnNfYWRkciB8fAogCSAgICBzby0+c29fZmFkZHIuc19hZGRyICE9IHRpLT50aV9kc3Quc19h ZGRyKSB7Ci0JCXNvID0gc29sb29rdXAoJnRjYiwgdGktPnRpX3NyYywgdGktPnRpX3Nwb3J0LAor CQlzbyA9IHNvbG9va3VwKCZzLT50Y2IsIHRpLT50aV9zcmMsIHRpLT50aV9zcG9ydCwKIAkJCSAg ICAgICB0aS0+dGlfZHN0LCB0aS0+dGlfZHBvcnQpOwogCQlpZiAoc28pCi0JCQl0Y3BfbGFzdF9z byA9IHNvOwotCQkrK3RjcHN0YXQudGNwc19zb2NhY2hlbWlzczsKKwkJCXMtPnRjcF9sYXN0X3Nv ID0gc287CisJCSsrcy0+dGNwc3RhdC50Y3BzX3NvY2FjaGVtaXNzOwogCX0KIAogCS8qCkBAIC0z OTcsMTMgKzM5MywxMyBAQAogCiAJICBpZiAoKHNvID0gc29jcmVhdGUoKSkgPT0gTlVMTCkKIAkg ICAgZ290byBkcm9wd2l0aHJlc2V0OwotCSAgaWYgKHRjcF9hdHRhY2goc28pIDwgMCkgeworCSAg aWYgKHRjcF9hdHRhY2gocywgc28pIDwgMCkgewogCSAgICBmcmVlKHNvKTsgLyogTm90IHNvZnJl ZSAoaWYgaXQgZmFpbGVkLCBpdCdzIG5vdCBpbnNxdWVkKSAqLwogCSAgICBnb3RvIGRyb3B3aXRo cmVzZXQ7CiAJICB9CiAKLQkgIHNicmVzZXJ2ZSgmc28tPnNvX3NuZCwgdGNwX3NuZHNwYWNlKTsK LQkgIHNicmVzZXJ2ZSgmc28tPnNvX3JjdiwgdGNwX3JjdnNwYWNlKTsKKwkgIHNicmVzZXJ2ZSgm c28tPnNvX3NuZCwgVENQX1NORFNQQUNFKTsKKwkgIHNicmVzZXJ2ZSgmc28tPnNvX3JjdiwgVENQ X1JDVlNQQUNFKTsKIAogCSAgLyoJCXRjcF9sYXN0X3NvID0gc287ICovICAvKiBYWFggPyAqLwog CSAgLyoJCXRwID0gc290b3RjcGNiKHNvKTsgICAgKi8KQEAgLTQ0OCwxNyArNDQ0LDE3IEBACiAJ ICogUmVzZXQgaWRsZSB0aW1lIGFuZCBrZWVwLWFsaXZlIHRpbWVyLgogCSAqLwogCXRwLT50X2lk bGUgPSAwOwotCWlmIChzb19vcHRpb25zKQotCSAgIHRwLT50X3RpbWVyW1RDUFRfS0VFUF0gPSB0 Y3Bfa2VlcGludHZsOworCWlmIChTT19PUFRJT05TKQorCSAgIHRwLT50X3RpbWVyW1RDUFRfS0VF UF0gPSBUQ1BUVl9LRUVQSU5UVkw7CiAJZWxzZQotCSAgIHRwLT50X3RpbWVyW1RDUFRfS0VFUF0g PSB0Y3Bfa2VlcGlkbGU7CisJICAgdHAtPnRfdGltZXJbVENQVF9LRUVQXSA9IFRDUFRWX0tFRVBf SURMRTsKIAogCS8qCiAJICogUHJvY2VzcyBvcHRpb25zIGlmIG5vdCBpbiBMSVNURU4gc3RhdGUs CiAJICogZWxzZSBkbyBpdCBiZWxvdyAoYWZ0ZXIgZ2V0dGluZyByZW1vdGUgYWRkcmVzcykuCiAJ ICovCiAJaWYgKG9wdHAgJiYgdHAtPnRfc3RhdGUgIT0gVENQU19MSVNURU4pCi0JCXRjcF9kb29w dGlvbnModHAsICh1X2NoYXIgKilvcHRwLCBvcHRsZW4sIHRpKTsKKwkJdGNwX2Rvb3B0aW9ucyhz LCB0cCwgKHVfY2hhciAqKW9wdHAsIG9wdGxlbiwgdGkpOwogLyogLCAqLwogLyoJCQkmdHNfcHJl c2VudCwgJnRzX3ZhbCwgJnRzX2Vjcik7ICovCiAKQEAgLTUwMywxOSArNDk5LDE5IEBACiAJCQkJ LyoKIAkJCQkgKiB0aGlzIGlzIGEgcHVyZSBhY2sgZm9yIG91dHN0YW5kaW5nIGRhdGEuCiAJCQkJ ICovCi0JCQkJKyt0Y3BzdGF0LnRjcHNfcHJlZGFjazsKKwkJCQkrK3MtPnRjcHN0YXQudGNwc19w cmVkYWNrOwogLyoJCQkJaWYgKHRzX3ByZXNlbnQpCiAgKgkJCQkJdGNwX3htaXRfdGltZXIodHAs IHRjcF9ub3ctdHNfZWNyKzEpOwogICoJCQkJZWxzZQogICovCQkJCSAgICAgaWYgKHRwLT50X3J0 dCAmJgogCQkJCQkgICAgU0VRX0dUKHRpLT50aV9hY2ssIHRwLT50X3J0c2VxKSkKLQkJCQkJdGNw X3htaXRfdGltZXIodHAsIHRwLT50X3J0dCk7CisJCQkJCXRjcF94bWl0X3RpbWVyKHMsIHRwLCB0 cC0+dF9ydHQpOwogCQkJCWFja2VkID0gdGktPnRpX2FjayAtIHRwLT5zbmRfdW5hOwotCQkJCXRj cHN0YXQudGNwc19yY3ZhY2twYWNrKys7Ci0JCQkJdGNwc3RhdC50Y3BzX3JjdmFja2J5dGUgKz0g YWNrZWQ7CisJCQkJcy0+dGNwc3RhdC50Y3BzX3JjdmFja3BhY2srKzsKKwkJCQlzLT50Y3BzdGF0 LnRjcHNfcmN2YWNrYnl0ZSArPSBhY2tlZDsKIAkJCQlzYmRyb3AoJnNvLT5zb19zbmQsIGFja2Vk KTsKIAkJCQl0cC0+c25kX3VuYSA9IHRpLT50aV9hY2s7Ci0JCQkJbV9mcmVlbShtKTsKKwkJCQlt X2ZyZWVtKHMsIG0pOwogCiAJCQkJLyoKIAkJCQkgKiBJZiBhbGwgb3V0c3RhbmRpbmcgZGF0YSBh cmUgYWNrZWQsIHN0b3AKQEAgLTU0NCw3ICs1NDAsNyBAQAogCQkJCSAqIHdlIGRvbid0IG5lZWQg dGhpcy4uIFhYWD8/PwogCQkJCSAqLwogCQkJCWlmIChzby0+c29fc25kLnNiX2NjKQotCQkJCQko dm9pZCkgdGNwX291dHB1dCh0cCk7CisJCQkJCSh2b2lkKSB0Y3Bfb3V0cHV0KHMsIHRwKTsKIAog CQkJCXJldHVybjsKIAkJCX0KQEAgLTU1NiwxNyArNTUyLDE4IEBACiAJCQkgKiB3aXRoIG5vdGhp bmcgb24gdGhlIHJlYXNzZW1ibHkgcXVldWUgYW5kCiAJCQkgKiB3ZSBoYXZlIGVub3VnaCBidWZm ZXIgc3BhY2UgdG8gdGFrZSBpdC4KIAkJCSAqLwotCQkJKyt0Y3BzdGF0LnRjcHNfcHJlZGRhdDsK KwkJCSsrcy0+dGNwc3RhdC50Y3BzX3ByZWRkYXQ7CiAJCQl0cC0+cmN2X254dCArPSB0aS0+dGlf bGVuOwotCQkJdGNwc3RhdC50Y3BzX3JjdnBhY2srKzsKLQkJCXRjcHN0YXQudGNwc19yY3ZieXRl ICs9IHRpLT50aV9sZW47CisJCQlzLT50Y3BzdGF0LnRjcHNfcmN2cGFjaysrOworCQkJcy0+dGNw c3RhdC50Y3BzX3JjdmJ5dGUgKz0gdGktPnRpX2xlbjsKIAkJCS8qCiAJCQkgKiBBZGQgZGF0YSB0 byBzb2NrZXQgYnVmZmVyLgogCQkJICovCiAJCQlpZiAoc28tPnNvX2VtdSkgewotCQkJCWlmICh0 Y3BfZW11KHNvLG0pKSBzYmFwcGVuZChzbywgbSk7CisJCQkJaWYgKHRjcF9lbXUocywgc28sbSkp CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYmFwcGVuZChzLCBzbywgbSk7 CiAJCQl9IGVsc2UKLQkJCQlzYmFwcGVuZChzbywgbSk7CisJCQkJc2JhcHBlbmQocywgc28sIG0p OwogCiAJCQkvKgogCQkJICogWFhYIFRoaXMgaXMgY2FsbGVkIHdoZW4gZGF0YSBhcnJpdmVzLiAg TGF0ZXIsIGNoZWNrCkBAIC01ODQsNyArNTgxLDcgQEAKIAkJCSAqIFRDUCB0aHJvdWdocHV0LiAg U2VlIFJGQyAyNTgxLgogCQkJICovCiAJCQl0cC0+dF9mbGFncyB8PSBURl9BQ0tOT1c7Ci0JCQl0 Y3Bfb3V0cHV0KHRwKTsKKwkJCXRjcF9vdXRwdXQocywgdHApOwogCQkJcmV0dXJuOwogCQl9CiAJ fSAvKiBoZWFkZXIgcHJlZGljdGlvbiAqLwpAQCAtNjM0LDcgKzYzMSw4IEBACiAJICAgKiBJZiB0 aGlzIGlzIGRlc3RpbmVkIGZvciB0aGUgY29udHJvbCBhZGRyZXNzLCB0aGVuIGZsYWcgdG8KIAkg ICAqIHRjcF9jdGwgb25jZSBjb25uZWN0ZWQsIG90aGVyd2lzZSBjb25uZWN0CiAJICAgKi8KLQkg IGlmICgoc28tPnNvX2ZhZGRyLnNfYWRkciZodG9ubCgweGZmZmZmZjAwKSkgPT0gc3BlY2lhbF9h ZGRyLnNfYWRkcikgeworCSAgaWYgKChzby0+c29fZmFkZHIuc19hZGRyICYgaHRvbmwoMHhmZmZm ZmYwMCkpID09CisgICAgICAgICAgICAgIHMtPnNwZWNpYWxfYWRkci5zX2FkZHIpIHsKIAkgICAg aW50IGxhc3RieXRlPW50b2hsKHNvLT5zb19mYWRkci5zX2FkZHIpICYgMHhmZjsKIAkgICAgaWYg KGxhc3RieXRlIT1DVExfQUxJQVMgJiYgbGFzdGJ5dGUhPUNUTF9ETlMpIHsKICNpZiAwCkBAIC02 NDYsNyArNjQ0LDcgQEAKICAgICAgICAgICAgICAgewogCQkvKiBNYXkgYmUgYW4gYWRkIGV4ZWMg Ki8KIAkJc3RydWN0IGV4X2xpc3QgKmV4X3B0cjsKLQkJZm9yKGV4X3B0ciA9IGV4ZWNfbGlzdDsg ZXhfcHRyOyBleF9wdHIgPSBleF9wdHItPmV4X25leHQpIHsKKwkJZm9yKGV4X3B0ciA9IHMtPmV4 ZWNfbGlzdDsgZXhfcHRyOyBleF9wdHIgPSBleF9wdHItPmV4X25leHQpIHsKIAkJICBpZihleF9w dHItPmV4X2Zwb3J0ID09IHNvLT5zb19mcG9ydCAmJgogCQkgICAgIGxhc3RieXRlID09IGV4X3B0 ci0+ZXhfYWRkcikgewogCQkgICAgc28tPnNvX3N0YXRlIHw9IFNTX0NUTDsKQEAgLTY2NCwxMyAr NjYyLDE0IEBACiAJICAgIGdvdG8gY29udF9pbnB1dDsKIAkgIH0KIAotCSAgaWYoKHRjcF9mY29u bmVjdChzbykgPT0gLTEpICYmIChlcnJubyAhPSBFSU5QUk9HUkVTUykgJiYgKGVycm5vICE9IEVX T1VMREJMT0NLKSkgeworCSAgaWYgKCh0Y3BfZmNvbm5lY3Qocywgc28pID09IC0xKSAmJiAoZXJy bm8gIT0gRUlOUFJPR1JFU1MpCisgICAgICAgICAgICAgICYmIChlcnJubyAhPSBFV09VTERCTE9D SykpIHsKIAkgICAgdV9jaGFyIGNvZGU9SUNNUF9VTlJFQUNIX05FVDsKIAkgICAgREVCVUdfTUlT QygoZGZkLCIgdGNwIGZjb25uZWN0IGVycm5vID0gJWQtJXNcbiIsCiAJCQllcnJubyxzdHJlcnJv cihlcnJubykpKTsKIAkgICAgaWYoZXJybm8gPT0gRUNPTk5SRUZVU0VEKSB7CiAJICAgICAgLyog QUNLIHRoZSBTWU4sIHNlbmQgUlNUIHRvIHJlZnVzZSB0aGUgY29ubmVjdGlvbiAqLwotCSAgICAg IHRjcF9yZXNwb25kKHRwLCB0aSwgbSwgdGktPnRpX3NlcSsxLCAodGNwX3NlcSkwLAorCSAgICAg IHRjcF9yZXNwb25kKHMsIHRwLCB0aSwgbSwgdGktPnRpX3NlcSsxLCAodGNwX3NlcSkwLAogCQkJ ICBUSF9SU1R8VEhfQUNLKTsKIAkgICAgfSBlbHNlIHsKIAkgICAgICBpZihlcnJubyA9PSBFSE9T VFVOUkVBQ0gpIGNvZGU9SUNNUF9VTlJFQUNIX0hPU1Q7CkBAIC02ODEsMTAgKzY4MCwxMCBAQAog CSAgICAgIG0tPm1fZGF0YSAtPSBzaXplb2Yoc3RydWN0IHRjcGlwaGRyKStvZmYtc2l6ZW9mKHN0 cnVjdCB0Y3BoZHIpOwogCSAgICAgIG0tPm1fbGVuICArPSBzaXplb2Yoc3RydWN0IHRjcGlwaGRy KStvZmYtc2l6ZW9mKHN0cnVjdCB0Y3BoZHIpOwogCSAgICAgICppcD1zYXZlX2lwOwotCSAgICAg IGljbXBfZXJyb3IobSwgSUNNUF9VTlJFQUNILGNvZGUsIDAsc3RyZXJyb3IoZXJybm8pKTsKKwkg ICAgICBpY21wX2Vycm9yKHMsIG0sIElDTVBfVU5SRUFDSCxjb2RlLCAwLHN0cmVycm9yKGVycm5v KSk7CiAJICAgIH0KLQkgICAgdHAgPSB0Y3BfY2xvc2UodHApOwotCSAgICBtX2ZyZWUobSk7CisJ ICAgIHRwID0gdGNwX2Nsb3NlKHMsIHRwKTsKKwkgICAgbV9mcmVlKHMsIG0pOwogCSAgfSBlbHNl IHsKIAkgICAgLyoKIAkgICAgICogSGF2ZW4ndCBjb25uZWN0ZWQgeWV0LCBzYXZlIHRoZSBjdXJy ZW50IG1idWYKQEAgLTcwNCwyOSArNzAzLDI5IEBACiAJICAgKiBDaGVjayBpZiB0aGUgY29ubmVj dCBzdWNjZWVkZWQKIAkgICAqLwogCSAgaWYgKHNvLT5zb19zdGF0ZSAmIFNTX05PRkRSRUYpIHsK LQkgICAgdHAgPSB0Y3BfY2xvc2UodHApOworCSAgICB0cCA9IHRjcF9jbG9zZShzLCB0cCk7CiAJ ICAgIGdvdG8gZHJvcHdpdGhyZXNldDsKIAkgIH0KIAljb250X2lucHV0OgogCSAgdGNwX3RlbXBs YXRlKHRwKTsKIAogCSAgaWYgKG9wdHApCi0JICAgIHRjcF9kb29wdGlvbnModHAsICh1X2NoYXIg KilvcHRwLCBvcHRsZW4sIHRpKTsKKwkgICAgdGNwX2Rvb3B0aW9ucyhzLCB0cCwgKHVfY2hhciAq KW9wdHAsIG9wdGxlbiwgdGkpOwogCSAgLyogLCAqLwogCSAgLyoJCQkJJnRzX3ByZXNlbnQsICZ0 c192YWwsICZ0c19lY3IpOyAqLwogCiAJICBpZiAoaXNzKQogCSAgICB0cC0+aXNzID0gaXNzOwog CSAgZWxzZQotCSAgICB0cC0+aXNzID0gdGNwX2lzczsKLQkgIHRjcF9pc3MgKz0gVENQX0lTU0lO Q1IvMjsKKwkgICAgdHAtPmlzcyA9IHMtPnRjcF9pc3M7CisJICBzLT50Y3BfaXNzICs9IFRDUF9J U1NJTkNSIC8gMjsKIAkgIHRwLT5pcnMgPSB0aS0+dGlfc2VxOwogCSAgdGNwX3NlbmRzZXFpbml0 KHRwKTsKIAkgIHRjcF9yY3ZzZXFpbml0KHRwKTsKIAkgIHRwLT50X2ZsYWdzIHw9IFRGX0FDS05P VzsKIAkgIHRwLT50X3N0YXRlID0gVENQU19TWU5fUkVDRUlWRUQ7CiAJICB0cC0+dF90aW1lcltU Q1BUX0tFRVBdID0gVENQVFZfS0VFUF9JTklUOwotCSAgdGNwc3RhdC50Y3BzX2FjY2VwdHMrKzsK KwkgIHMtPnRjcHN0YXQudGNwc19hY2NlcHRzKys7CiAJICBnb3RvIHRyaW10aGVuc3RlcDY7CiAJ fSAvKiBjYXNlIFRDUFNfTElTVEVOICovCiAKQEAgLTc1MCw3ICs3NDksNyBAQAogCiAJCWlmICh0 aWZsYWdzICYgVEhfUlNUKSB7CiAJCQlpZiAodGlmbGFncyAmIFRIX0FDSykKLQkJCQl0cCA9IHRj cF9kcm9wKHRwLDApOyAvKiBYWFggQ2hlY2sgdF9zb2Z0ZXJyb3IhICovCisJCQkJdHAgPSB0Y3Bf ZHJvcChzLCB0cCwwKTsgLyogWFhYIENoZWNrIHRfc29mdGVycm9yISAqLwogCQkJZ290byBkcm9w OwogCQl9CiAKQEAgLTc2Nyw3ICs3NjYsNyBAQAogCQl0Y3BfcmN2c2VxaW5pdCh0cCk7CiAJCXRw LT50X2ZsYWdzIHw9IFRGX0FDS05PVzsKIAkJaWYgKHRpZmxhZ3MgJiBUSF9BQ0sgJiYgU0VRX0dU KHRwLT5zbmRfdW5hLCB0cC0+aXNzKSkgewotCQkJdGNwc3RhdC50Y3BzX2Nvbm5lY3RzKys7CisJ CQlzLT50Y3BzdGF0LnRjcHNfY29ubmVjdHMrKzsKIAkJCXNvaXNmY29ubmVjdGVkKHNvKTsKIAkJ CXRwLT50X3N0YXRlID0gVENQU19FU1RBQkxJU0hFRDsKIApAQCAtNzc4LDE0ICs3NzcsMTQgQEAK ICAqCQkJCXRwLT5yY3Zfc2NhbGUgPSB0cC0+cmVxdWVzdF9yX3NjYWxlOwogICoJCQl9CiAgKi8K LQkJCSh2b2lkKSB0Y3BfcmVhc3ModHAsIChzdHJ1Y3QgdGNwaXBoZHIgKikwLAorCQkJKHZvaWQp IHRjcF9yZWFzcyhzLCB0cCwgKHN0cnVjdCB0Y3BpcGhkciAqKTAsCiAJCQkJKHN0cnVjdCBtYnVm ICopMCk7CiAJCQkvKgogCQkJICogaWYgd2UgZGlkbid0IGhhdmUgdG8gcmV0cmFuc21pdCB0aGUg U1lOLAogCQkJICogdXNlIGl0cyBydHQgYXMgb3VyIGluaXRpYWwgc3J0dCAmIHJ0dCB2YXIuCiAJ CQkgKi8KIAkJCWlmICh0cC0+dF9ydHQpCi0JCQkJdGNwX3htaXRfdGltZXIodHAsIHRwLT50X3J0 dCk7CisJCQkJdGNwX3htaXRfdGltZXIocywgdHAsIHRwLT50X3J0dCk7CiAJCX0gZWxzZQogCQkJ dHAtPnRfc3RhdGUgPSBUQ1BTX1NZTl9SRUNFSVZFRDsKIApAQCAtODAxLDggKzgwMCw4IEBACiAJ CQltX2FkaihtLCAtdG9kcm9wKTsKIAkJCXRpLT50aV9sZW4gPSB0cC0+cmN2X3duZDsKIAkJCXRp ZmxhZ3MgJj0gflRIX0ZJTjsKLQkJCXRjcHN0YXQudGNwc19yY3ZwYWNrYWZ0ZXJ3aW4rKzsKLQkJ CXRjcHN0YXQudGNwc19yY3ZieXRlYWZ0ZXJ3aW4gKz0gdG9kcm9wOworCQkJcy0+dGNwc3RhdC50 Y3BzX3JjdnBhY2thZnRlcndpbisrOworCQkJcy0+dGNwc3RhdC50Y3BzX3JjdmJ5dGVhZnRlcndp biArPSB0b2Ryb3A7CiAJCX0KIAkJdHAtPnNuZF93bDEgPSB0aS0+dGlfc2VxIC0gMTsKIAkJdHAt PnJjdl91cCA9IHRpLT50aV9zZXE7CkBAIC04NzMsMTEgKzg3MiwxMSBAQAogCQkJICovCiAJCQl0 cC0+dF9mbGFncyB8PSBURl9BQ0tOT1c7CiAJCQl0b2Ryb3AgPSB0aS0+dGlfbGVuOwotCQkJdGNw c3RhdC50Y3BzX3JjdmR1cHBhY2srKzsKLQkJCXRjcHN0YXQudGNwc19yY3ZkdXBieXRlICs9IHRv ZHJvcDsKKwkJCXMtPnRjcHN0YXQudGNwc19yY3ZkdXBwYWNrKys7CisJCQlzLT50Y3BzdGF0LnRj cHNfcmN2ZHVwYnl0ZSArPSB0b2Ryb3A7CiAJCX0gZWxzZSB7Ci0JCQl0Y3BzdGF0LnRjcHNfcmN2 cGFydGR1cHBhY2srKzsKLQkJCXRjcHN0YXQudGNwc19yY3ZwYXJ0ZHVwYnl0ZSArPSB0b2Ryb3A7 CisJCQlzLT50Y3BzdGF0LnRjcHNfcmN2cGFydGR1cHBhY2srKzsKKwkJCXMtPnRjcHN0YXQudGNw c19yY3ZwYXJ0ZHVwYnl0ZSArPSB0b2Ryb3A7CiAJCX0KIAkJbV9hZGoobSwgdG9kcm9wKTsKIAkJ dGktPnRpX3NlcSArPSB0b2Ryb3A7CkBAIC04OTUsOCArODk0LDggQEAKIAkgKi8KIAlpZiAoKHNv LT5zb19zdGF0ZSAmIFNTX05PRkRSRUYpICYmCiAJICAgIHRwLT50X3N0YXRlID4gVENQU19DTE9T RV9XQUlUICYmIHRpLT50aV9sZW4pIHsKLQkJdHAgPSB0Y3BfY2xvc2UodHApOwotCQl0Y3BzdGF0 LnRjcHNfcmN2YWZ0ZXJjbG9zZSsrOworCQl0cCA9IHRjcF9jbG9zZShzLCB0cCk7CisJCXMtPnRj cHN0YXQudGNwc19yY3ZhZnRlcmNsb3NlKys7CiAJCWdvdG8gZHJvcHdpdGhyZXNldDsKIAl9CiAK QEAgLTkwNiw5ICs5MDUsOSBAQAogCSAqLwogCXRvZHJvcCA9ICh0aS0+dGlfc2VxK3RpLT50aV9s ZW4pIC0gKHRwLT5yY3Zfbnh0K3RwLT5yY3Zfd25kKTsKIAlpZiAodG9kcm9wID4gMCkgewotCQl0 Y3BzdGF0LnRjcHNfcmN2cGFja2FmdGVyd2luKys7CisJCXMtPnRjcHN0YXQudGNwc19yY3ZwYWNr YWZ0ZXJ3aW4rKzsKIAkJaWYgKHRvZHJvcCA+PSB0aS0+dGlfbGVuKSB7Ci0JCQl0Y3BzdGF0LnRj cHNfcmN2Ynl0ZWFmdGVyd2luICs9IHRpLT50aV9sZW47CisJCQlzLT50Y3BzdGF0LnRjcHNfcmN2 Ynl0ZWFmdGVyd2luICs9IHRpLT50aV9sZW47CiAJCQkvKgogCQkJICogSWYgYSBuZXcgY29ubmVj dGlvbiByZXF1ZXN0IGlzIHJlY2VpdmVkCiAJCQkgKiB3aGlsZSBpbiBUSU1FX1dBSVQsIGRyb3Ag dGhlIG9sZCBjb25uZWN0aW9uCkBAIC05MTksNyArOTE4LDcgQEAKIAkJCSAgICB0cC0+dF9zdGF0 ZSA9PSBUQ1BTX1RJTUVfV0FJVCAmJgogCQkJICAgIFNFUV9HVCh0aS0+dGlfc2VxLCB0cC0+cmN2 X254dCkpIHsKIAkJCQlpc3MgPSB0cC0+cmN2X254dCArIFRDUF9JU1NJTkNSOwotCQkJCXRwID0g dGNwX2Nsb3NlKHRwKTsKKwkJCQl0cCA9IHRjcF9jbG9zZShzLCB0cCk7CiAJCQkJZ290byBmaW5k c287CiAJCQl9CiAJCQkvKgpAQCAtOTMxLDExICs5MzAsMTEgQEAKIAkJCSAqLwogCQkJaWYgKHRw LT5yY3Zfd25kID09IDAgJiYgdGktPnRpX3NlcSA9PSB0cC0+cmN2X254dCkgewogCQkJCXRwLT50 X2ZsYWdzIHw9IFRGX0FDS05PVzsKLQkJCQl0Y3BzdGF0LnRjcHNfcmN2d2lucHJvYmUrKzsKKwkJ CQlzLT50Y3BzdGF0LnRjcHNfcmN2d2lucHJvYmUrKzsKIAkJCX0gZWxzZQogCQkJCWdvdG8gZHJv cGFmdGVyYWNrOwogCQl9IGVsc2UKLQkJCXRjcHN0YXQudGNwc19yY3ZieXRlYWZ0ZXJ3aW4gKz0g dG9kcm9wOworCQkJcy0+dGNwc3RhdC50Y3BzX3JjdmJ5dGVhZnRlcndpbiArPSB0b2Ryb3A7CiAJ CW1fYWRqKG0sIC10b2Ryb3ApOwogCQl0aS0+dGlfbGVuIC09IHRvZHJvcDsKIAkJdGlmbGFncyAm PSB+KFRIX1BVU0h8VEhfRklOKTsKQEAgLTk3NiwxNCArOTc1LDE0IEBACiAvKgkJc28tPnNvX2Vy cm9yID0gRUNPTk5SRVNFVDsgKi8KIAljbG9zZToKIAkJdHAtPnRfc3RhdGUgPSBUQ1BTX0NMT1NF RDsKLQkJdGNwc3RhdC50Y3BzX2Ryb3BzKys7Ci0JCXRwID0gdGNwX2Nsb3NlKHRwKTsKKwkJcy0+ dGNwc3RhdC50Y3BzX2Ryb3BzKys7CisJCXRwID0gdGNwX2Nsb3NlKHMsIHRwKTsKIAkJZ290byBk cm9wOwogCiAJY2FzZSBUQ1BTX0NMT1NJTkc6CiAJY2FzZSBUQ1BTX0xBU1RfQUNLOgogCWNhc2Ug VENQU19USU1FX1dBSVQ6Ci0JCXRwID0gdGNwX2Nsb3NlKHRwKTsKKwkJdHAgPSB0Y3BfY2xvc2Uo cywgdHApOwogCQlnb3RvIGRyb3A7CiAJfQogCkBAIC05OTIsNyArOTkxLDcgQEAKIAkgKiBlcnJv ciBhbmQgd2Ugc2VuZCBhbiBSU1QgYW5kIGRyb3AgdGhlIGNvbm5lY3Rpb24uCiAJICovCiAJaWYg KHRpZmxhZ3MgJiBUSF9TWU4pIHsKLQkJdHAgPSB0Y3BfZHJvcCh0cCwwKTsKKwkJdHAgPSB0Y3Bf ZHJvcChzLCB0cCwwKTsKIAkJZ290byBkcm9wd2l0aHJlc2V0OwogCX0KIApAQCAtMTAxNSw3ICsx MDE0LDcgQEAKIAkJaWYgKFNFUV9HVCh0cC0+c25kX3VuYSwgdGktPnRpX2FjaykgfHwKIAkJICAg IFNFUV9HVCh0aS0+dGlfYWNrLCB0cC0+c25kX21heCkpCiAJCQlnb3RvIGRyb3B3aXRocmVzZXQ7 Ci0JCXRjcHN0YXQudGNwc19jb25uZWN0cysrOworCQlzLT50Y3BzdGF0LnRjcHNfY29ubmVjdHMr KzsKIAkJdHAtPnRfc3RhdGUgPSBUQ1BTX0VTVEFCTElTSEVEOwogCQkvKgogCQkgKiBUaGUgc2Vu dCBTWU4gaXMgYWNrJ2VkIHdpdGggb3VyIHNlcXVlbmNlIG51bWJlciArMQpAQCAtMTAyNyw3ICsx MDI2LDcgQEAKIAkJdHAtPnNuZF91bmE9dGktPnRpX2FjazsKIAkJaWYgKHNvLT5zb19zdGF0ZSAm IFNTX0NUTCkgewogCQkgIC8qIFNvIHRjcF9jdGwgcmVwb3J0cyB0aGUgcmlnaHQgc3RhdGUgKi8K LQkJICByZXQgPSB0Y3BfY3RsKHNvKTsKKwkJICByZXQgPSB0Y3BfY3RsKHMsIHNvKTsKIAkJICBp ZiAocmV0ID09IDEpIHsKIAkJICAgIHNvaXNmY29ubmVjdGVkKHNvKTsKIAkJICAgIHNvLT5zb19z dGF0ZSAmPSB+U1NfQ1RMOyAgIC8qIHN1Y2Nlc3MgWFhYICovCkBAIC0xMDQ4LDcgKzEwNDcsNyBA QAogICoJCQl0cC0+cmN2X3NjYWxlID0gdHAtPnJlcXVlc3Rfcl9zY2FsZTsKICAqCQl9CiAgKi8K LQkJKHZvaWQpIHRjcF9yZWFzcyh0cCwgKHN0cnVjdCB0Y3BpcGhkciAqKTAsIChzdHJ1Y3QgbWJ1 ZiAqKTApOworCQkodm9pZCkgdGNwX3JlYXNzKHMsIHRwLCAoc3RydWN0IHRjcGlwaGRyICopMCwg KHN0cnVjdCBtYnVmICopMCk7CiAJCXRwLT5zbmRfd2wxID0gdGktPnRpX3NlcSAtIDE7CiAJCS8q IEF2b2lkIGFjayBwcm9jZXNzaW5nOyBzbmRfdW5hPT10aV9hY2sgID0+ICBkdXAgYWNrICovCiAJ CWdvdG8gc3lucnhfdG9fZXN0OwpAQCAtMTA3Miw3ICsxMDcxLDcgQEAKIAogCQlpZiAoU0VRX0xF USh0aS0+dGlfYWNrLCB0cC0+c25kX3VuYSkpIHsKIAkJCWlmICh0aS0+dGlfbGVuID09IDAgJiYg dGl3aW4gPT0gdHAtPnNuZF93bmQpIHsKLQkJCSAgdGNwc3RhdC50Y3BzX3JjdmR1cGFjaysrOwor CQkJICBzLT50Y3BzdGF0LnRjcHNfcmN2ZHVwYWNrKys7CiAJCQkgIERFQlVHX01JU0MoKGRmZCwi IGR1cCBhY2sgIG0gPSAlbHggIHNvID0gJWx4IFxuIiwKIAkJCQkgICAgICAobG9uZyApbSwgKGxv bmcgKXNvKSk7CiAJCQkJLyoKQEAgLTExMDIsNyArMTEwMSw3IEBACiAJCQkJaWYgKHRwLT50X3Rp bWVyW1RDUFRfUkVYTVRdID09IDAgfHwKIAkJCQkgICAgdGktPnRpX2FjayAhPSB0cC0+c25kX3Vu YSkKIAkJCQkJdHAtPnRfZHVwYWNrcyA9IDA7Ci0JCQkJZWxzZSBpZiAoKyt0cC0+dF9kdXBhY2tz ID09IHRjcHJleG10dGhyZXNoKSB7CisJCQkJZWxzZSBpZiAoKyt0cC0+dF9kdXBhY2tzID09IFRD UFJFWE1UVEhSRVNIKSB7CiAJCQkJCXRjcF9zZXEgb254dCA9IHRwLT5zbmRfbnh0OwogCQkJCQl1 X2ludCB3aW4gPQogCQkJCQkgICAgbWluKHRwLT5zbmRfd25kLCB0cC0+c25kX2N3bmQpIC8gMiAv CkBAIC0xMTE1LDE1ICsxMTE0LDE1IEBACiAJCQkJCXRwLT50X3J0dCA9IDA7CiAJCQkJCXRwLT5z bmRfbnh0ID0gdGktPnRpX2FjazsKIAkJCQkJdHAtPnNuZF9jd25kID0gdHAtPnRfbWF4c2VnOwot CQkJCQkodm9pZCkgdGNwX291dHB1dCh0cCk7CisJCQkJCSh2b2lkKSB0Y3Bfb3V0cHV0KHMsIHRw KTsKIAkJCQkJdHAtPnNuZF9jd25kID0gdHAtPnNuZF9zc3RocmVzaCArCiAJCQkJCSAgICAgICB0 cC0+dF9tYXhzZWcgKiB0cC0+dF9kdXBhY2tzOwogCQkJCQlpZiAoU0VRX0dUKG9ueHQsIHRwLT5z bmRfbnh0KSkKIAkJCQkJCXRwLT5zbmRfbnh0ID0gb254dDsKIAkJCQkJZ290byBkcm9wOwotCQkJ CX0gZWxzZSBpZiAodHAtPnRfZHVwYWNrcyA+IHRjcHJleG10dGhyZXNoKSB7CisJCQkJfSBlbHNl IGlmICh0cC0+dF9kdXBhY2tzID4gVENQUkVYTVRUSFJFU0gpIHsKIAkJCQkJdHAtPnNuZF9jd25k ICs9IHRwLT50X21heHNlZzsKLQkJCQkJKHZvaWQpIHRjcF9vdXRwdXQodHApOworCQkJCQkodm9p ZCkgdGNwX291dHB1dChzLCB0cCk7CiAJCQkJCWdvdG8gZHJvcDsKIAkJCQl9CiAJCQl9IGVsc2UK QEAgLTExMzUsMTcgKzExMzQsMTcgQEAKIAkJICogSWYgdGhlIGNvbmdlc3Rpb24gd2luZG93IHdh cyBpbmZsYXRlZCB0byBhY2NvdW50CiAJCSAqIGZvciB0aGUgb3RoZXIgc2lkZSdzIGNhY2hlZCBw YWNrZXRzLCByZXRyYWN0IGl0LgogCQkgKi8KLQkJaWYgKHRwLT50X2R1cGFja3MgPiB0Y3ByZXht dHRocmVzaCAmJgorCQlpZiAodHAtPnRfZHVwYWNrcyA+IFRDUFJFWE1UVEhSRVNIICYmCiAJCSAg ICB0cC0+c25kX2N3bmQgPiB0cC0+c25kX3NzdGhyZXNoKQogCQkJdHAtPnNuZF9jd25kID0gdHAt PnNuZF9zc3RocmVzaDsKIAkJdHAtPnRfZHVwYWNrcyA9IDA7CiAJCWlmIChTRVFfR1QodGktPnRp X2FjaywgdHAtPnNuZF9tYXgpKSB7Ci0JCQl0Y3BzdGF0LnRjcHNfcmN2YWNrdG9vbXVjaCsrOwor CQkJcy0+dGNwc3RhdC50Y3BzX3JjdmFja3Rvb211Y2grKzsKIAkJCWdvdG8gZHJvcGFmdGVyYWNr OwogCQl9CiAJCWFja2VkID0gdGktPnRpX2FjayAtIHRwLT5zbmRfdW5hOwotCQl0Y3BzdGF0LnRj cHNfcmN2YWNrcGFjaysrOwotCQl0Y3BzdGF0LnRjcHNfcmN2YWNrYnl0ZSArPSBhY2tlZDsKKwkJ cy0+dGNwc3RhdC50Y3BzX3JjdmFja3BhY2srKzsKKwkJcy0+dGNwc3RhdC50Y3BzX3JjdmFja2J5 dGUgKz0gYWNrZWQ7CiAKIAkJLyoKIAkJICogSWYgd2UgaGF2ZSBhIHRpbWVzdGFtcCByZXBseSwg dXBkYXRlIHNtb290aGVkCkBAIC0xMTYxLDcgKzExNjAsNyBAQAogICoJCWVsc2UKICAqLwogCQkg ICAgIGlmICh0cC0+dF9ydHQgJiYgU0VRX0dUKHRpLT50aV9hY2ssIHRwLT50X3J0c2VxKSkKLQkJ CXRjcF94bWl0X3RpbWVyKHRwLHRwLT50X3J0dCk7CisJCQl0Y3BfeG1pdF90aW1lcihzLCB0cCx0 cC0+dF9ydHQpOwogCiAJCS8qCiAJCSAqIElmIGFsbCBvdXRzdGFuZGluZyBkYXRhIGlzIGFja2Vk LCBzdG9wIHJldHJhbnNtaXQKQEAgLTEyMjcsNyArMTIyNiw3IEBACiAJCQkJICovCiAJCQkJaWYg KHNvLT5zb19zdGF0ZSAmIFNTX0ZDQU5UUkNWTU9SRSkgewogCQkJCQlzb2lzZmRpc2Nvbm5lY3Rl ZChzbyk7Ci0JCQkJCXRwLT50X3RpbWVyW1RDUFRfMk1TTF0gPSB0Y3BfbWF4aWRsZTsKKwkJCQkJ dHAtPnRfdGltZXJbVENQVF8yTVNMXSA9IFRDUF9NQVhJRExFOwogCQkJCX0KIAkJCQl0cC0+dF9z dGF0ZSA9IFRDUFNfRklOX1dBSVRfMjsKIAkJCX0KQEAgLTEyNTYsNyArMTI1NSw3IEBACiAJCSAq LwogCQljYXNlIFRDUFNfTEFTVF9BQ0s6CiAJCQlpZiAob3VyZmluaXNhY2tlZCkgewotCQkJCXRw ID0gdGNwX2Nsb3NlKHRwKTsKKwkJCQl0cCA9IHRjcF9jbG9zZShzLCB0cCk7CiAJCQkJZ290byBk cm9wOwogCQkJfQogCQkJYnJlYWs7CkBAIC0xMjg0LDcgKzEyODMsNyBAQAogCQkvKiBrZWVwIHRy YWNrIG9mIHB1cmUgd2luZG93IHVwZGF0ZXMgKi8KIAkJaWYgKHRpLT50aV9sZW4gPT0gMCAmJgog CQkgICAgdHAtPnNuZF93bDIgPT0gdGktPnRpX2FjayAmJiB0aXdpbiA+IHRwLT5zbmRfd25kKQot CQkJdGNwc3RhdC50Y3BzX3JjdndpbnVwZCsrOworCQkJcy0+dGNwc3RhdC50Y3BzX3JjdndpbnVw ZCsrOwogCQl0cC0+c25kX3duZCA9IHRpd2luOwogCQl0cC0+c25kX3dsMSA9IHRpLT50aV9zZXE7 CiAJCXRwLT5zbmRfd2wyID0gdGktPnRpX2FjazsKQEAgLTEzNTAsNyArMTM0OSw3IEBACiAJICov CiAJaWYgKCh0aS0+dGlfbGVuIHx8ICh0aWZsYWdzJlRIX0ZJTikpICYmCiAJICAgIFRDUFNfSEFW RVJDVkRGSU4odHAtPnRfc3RhdGUpID09IDApIHsKLQkJVENQX1JFQVNTKHRwLCB0aSwgbSwgc28s IHRpZmxhZ3MpOworCQlUQ1BfUkVBU1MocywgdHAsIHRpLCBtLCBzbywgdGlmbGFncyk7CiAJCS8q CiAJCSAqIE5vdGUgdGhlIGFtb3VudCBvZiBkYXRhIHRoYXQgcGVlciBoYXMgc2VudCBpbnRvCiAJ CSAqIG91ciB3aW5kb3csIGluIG9yZGVyIHRvIGVzdGltYXRlIHRoZSBzZW5kZXIncwpAQCAtMTM1 OCw3ICsxMzU3LDcgQEAKIAkJICovCiAJCWxlbiA9IHNvLT5zb19yY3Yuc2JfZGF0YWxlbiAtICh0 cC0+cmN2X2FkdiAtIHRwLT5yY3Zfbnh0KTsKIAl9IGVsc2UgewotCQltX2ZyZWUobSk7CisJICAg ICAgICBtYnVmX2ZyZWVkID0gMTsgLyogVGhlIG1idWYgbXVzdCBiZSBmcmVlZCwgYnV0IG9ubHkg d2hlbiBpdHMgY29udGVudCBpcyBub3QgbmVlZGVkIGFueW1vcmUuICovCiAJCXRpZmxhZ3MgJj0g flRIX0ZJTjsKIAl9CiAKQEAgLTEzNzgsNyArMTM3Nyw3IEBACiAJCQkgKiB0byBzZW5kIHRoZSBG SU4uCiAJCQkgKi8KIC8qCQkJc29mY2FudHJjdm1vcmUoc28pOyAqLwotCQkJc29md2RyYWluKHNv KTsKKwkJCXNvZndkcmFpbihzLCBzbyk7CiAKIAkJCXRwLT50X2ZsYWdzIHw9IFRGX0FDS05PVzsK IAkJCXRwLT5yY3Zfbnh0Kys7CkBAIC0xNDQ1LDExICsxNDQ0LDE0IEBACiAJCXRwLT50X2ZsYWdz IHw9IFRGX0FDS05PVzsKIAl9CiAKKwlpZiAobWJ1Zl9mcmVlZCkgeworCQltX2ZyZWUocywgbSk7 CisJfQogCS8qCiAJICogUmV0dXJuIGFueSBkZXNpcmVkIG91dHB1dC4KIAkgKi8KIAlpZiAobmVl ZG91dHB1dCB8fCAodHAtPnRfZmxhZ3MgJiBURl9BQ0tOT1cpKSB7Ci0JCSh2b2lkKSB0Y3Bfb3V0 cHV0KHRwKTsKKwkJKHZvaWQpIHRjcF9vdXRwdXQocywgdHApOwogCX0KIAlyZXR1cm47CiAKQEAg LTE0NjAsMTggKzE0NjIsMTggQEAKIAkgKi8KIAlpZiAodGlmbGFncyAmIFRIX1JTVCkKIAkJZ290 byBkcm9wOwotCW1fZnJlZW0obSk7CisJbV9mcmVlbShzLCBtKTsKIAl0cC0+dF9mbGFncyB8PSBU Rl9BQ0tOT1c7Ci0JKHZvaWQpIHRjcF9vdXRwdXQodHApOworCSh2b2lkKSB0Y3Bfb3V0cHV0KHMs IHRwKTsKIAlyZXR1cm47CiAKIGRyb3B3aXRocmVzZXQ6CiAJLyogcmV1c2VzIG0gaWYgbSE9TlVM TCwgbV9mcmVlKCkgdW5uZWNlc3NhcnkgKi8KIAlpZiAodGlmbGFncyAmIFRIX0FDSykKLQkJdGNw X3Jlc3BvbmQodHAsIHRpLCBtLCAodGNwX3NlcSkwLCB0aS0+dGlfYWNrLCBUSF9SU1QpOworCQl0 Y3BfcmVzcG9uZChzLCB0cCwgdGksIG0sICh0Y3Bfc2VxKTAsIHRpLT50aV9hY2ssIFRIX1JTVCk7 CiAJZWxzZSB7CiAJCWlmICh0aWZsYWdzICYgVEhfU1lOKSB0aS0+dGlfbGVuKys7Ci0JCXRjcF9y ZXNwb25kKHRwLCB0aSwgbSwgdGktPnRpX3NlcSt0aS0+dGlfbGVuLCAodGNwX3NlcSkwLAorCQl0 Y3BfcmVzcG9uZChzLCB0cCwgdGksIG0sIHRpLT50aV9zZXErdGktPnRpX2xlbiwgKHRjcF9zZXEp MCwKIAkJICAgIFRIX1JTVHxUSF9BQ0spOwogCX0KIApAQCAtMTQ4MSw3ICsxNDgzLDcgQEAKIAkv KgogCSAqIERyb3Agc3BhY2UgaGVsZCBieSBpbmNvbWluZyBzZWdtZW50IGFuZCByZXR1cm4uCiAJ ICovCi0JbV9mcmVlKG0pOworCW1fZnJlZShzLCBtKTsKIAogCXJldHVybjsKIH0KQEAgLTE0OTAs MTIgKzE0OTIsOSBAQAogLyoJaW50ICp0c19wcmVzZW50OwogICoJdV9pbnQzMl90ICp0c192YWws ICp0c19lY3I7CiAgKi8KLXZvaWQKLXRjcF9kb29wdGlvbnModHAsIGNwLCBjbnQsIHRpKQotCXN0 cnVjdCB0Y3BjYiAqdHA7Ci0JdV9jaGFyICpjcDsKLQlpbnQgY250OwotCXN0cnVjdCB0Y3BpcGhk ciAqdGk7CitzdGF0aWMgdm9pZAordGNwX2Rvb3B0aW9ucyhzbGlycF9zdGF0ZV90ICpzLCBzdHJ1 Y3QgdGNwY2IgKnRwLCB1X2NoYXIgKmNwLCBpbnQgY250LAorICAgICAgICAgICAgICBzdHJ1Y3Qg dGNwaXBoZHIgKnRpKQogewogCXVfaW50MTZfdCBtc3M7CiAJaW50IG9wdCwgb3B0bGVuOwpAQCAt MTUyNiw3ICsxNTI1LDcgQEAKIAkJCQljb250aW51ZTsKIAkJCW1lbWNweSgoY2hhciAqKSAmbXNz LCAoY2hhciAqKSBjcCArIDIsIHNpemVvZihtc3MpKTsKIAkJCU5UT0hTKG1zcyk7Ci0JCQkodm9p ZCkgdGNwX21zcyh0cCwgbXNzKTsJLyogc2V0cyB0X21heHNlZyAqLworCQkJKHZvaWQpIHRjcF9t c3MocywgdHAsIG1zcyk7CS8qIHNldHMgdF9tYXhzZWcgKi8KIAkJCWJyZWFrOwogCiAvKgkJY2Fz ZSBUQ1BPUFRfV0lORE9XOgpAQCAtMTYwNSwxMCArMTYwNCw4IEBACiAgKiBhbmQgdXBkYXRlIGF2 ZXJhZ2VzIGFuZCBjdXJyZW50IHRpbWVvdXQuCiAgKi8KIAotdm9pZAotdGNwX3htaXRfdGltZXIo dHAsIHJ0dCkKLQlyZWdpc3RlciBzdHJ1Y3QgdGNwY2IgKnRwOwotCWludCBydHQ7CitzdGF0aWMg dm9pZAordGNwX3htaXRfdGltZXIoc2xpcnBfc3RhdGVfdCAqcywgcmVnaXN0ZXIgc3RydWN0IHRj cGNiICp0cCwgaW50IHJ0dCkKIHsKIAlyZWdpc3RlciBzaG9ydCBkZWx0YTsKIApAQCAtMTYxNiw3 ICsxNjEzLDcgQEAKIAlERUJVR19BUkcoInRwID0gJWx4IiwgKGxvbmcpdHApOwogCURFQlVHX0FS RygicnR0ID0gJWQiLCBydHQpOwogCi0JdGNwc3RhdC50Y3BzX3J0dHVwZGF0ZWQrKzsKKwlzLT50 Y3BzdGF0LnRjcHNfcnR0dXBkYXRlZCsrOwogCWlmICh0cC0+dF9zcnR0ICE9IDApIHsKIAkJLyoK IAkJICogc3J0dCBpcyBzdG9yZWQgYXMgZml4ZWQgcG9pbnQgd2l0aCAzIGJpdHMgYWZ0ZXIgdGhl CkBAIC0xNjk2LDkgKzE2OTMsNyBAQAogICovCiAKIGludAotdGNwX21zcyh0cCwgb2ZmZXIpCi0g ICAgICAgIHJlZ2lzdGVyIHN0cnVjdCB0Y3BjYiAqdHA7Ci0gICAgICAgIHVfaW50IG9mZmVyOwor dGNwX21zcyhzbGlycF9zdGF0ZV90ICpzLCByZWdpc3RlciBzdHJ1Y3QgdGNwY2IgKnRwLCB1X2lu dCBvZmZlcikKIHsKIAlzdHJ1Y3Qgc29ja2V0ICpzbyA9IHRwLT50X3NvY2tldDsKIAlpbnQgbXNz OwpAQCAtMTcwNyw3ICsxNzAyLDcgQEAKIAlERUJVR19BUkcoInRwID0gJWx4IiwgKGxvbmcpdHAp OwogCURFQlVHX0FSRygib2ZmZXIgPSAlZCIsIG9mZmVyKTsKIAotCW1zcyA9IG1pbihpZl9tdHUs IGlmX21ydSkgLSBzaXplb2Yoc3RydWN0IHRjcGlwaGRyKTsKKwltc3MgPSBtaW4ocy0+aWZfbXR1 LCBzLT5pZl9tcnUpIC0gc2l6ZW9mKHN0cnVjdCB0Y3BpcGhkcik7CiAJaWYgKG9mZmVyKQogCQlt c3MgPSBtaW4obXNzLCBvZmZlcik7CiAJbXNzID0gbWF4KG1zcywgMzIpOwpAQCAtMTcxNiw4ICsx NzExLDEyIEBACiAKIAl0cC0+c25kX2N3bmQgPSBtc3M7CiAKLQlzYnJlc2VydmUoJnNvLT5zb19z bmQsIHRjcF9zbmRzcGFjZSsoKHRjcF9zbmRzcGFjZSVtc3MpPyhtc3MtKHRjcF9zbmRzcGFjZSVt c3MpKTowKSk7Ci0Jc2JyZXNlcnZlKCZzby0+c29fcmN2LCB0Y3BfcmN2c3BhY2UrKCh0Y3BfcmN2 c3BhY2UlbXNzKT8obXNzLSh0Y3BfcmN2c3BhY2UlbXNzKSk6MCkpOworCXNicmVzZXJ2ZSgmc28t PnNvX3NuZCwgVENQX1NORFNQQUNFICsgKChUQ1BfU05EU1BBQ0UgJSBtc3MpID8KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1zcyAtIChUQ1BfU05EU1BB Q0UgJSBtc3MpKSA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDApKTsKKwlzYnJlc2VydmUoJnNvLT5zb19yY3YsIFRDUF9SQ1ZTUEFDRSArICgoVENQX1JD VlNQQUNFICUgbXNzKSA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChtc3MgLSAoVENQX1JDVlNQQUNFICUgbXNzKSkgOgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSk7CiAKIAlERUJVR19NSVNDKChkZmQsICIg cmV0dXJuaW5nIG1zcyA9ICVkXG4iLCBtc3MpKTsKIApJbmRleDogcWVtdS9zbGlycC90Y3Bfb3V0 cHV0LmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQotLS0gcWVtdS5vcmlnL3NsaXJwL3RjcF9vdXRwdXQuYwkyMDA3LTEw LTIwIDA3OjMzOjM4LjAwMDAwMDAwMCArMDAwMAorKysgcWVtdS9zbGlycC90Y3Bfb3V0cHV0LmMJ MjAwNy0xMC0yMCAxMzo0OToxMy4wMDAwMDAwMDAgKzAwMDAKQEAgLTQ4LDE0ICs0OCwxNCBAQAog ICogU2luY2UgdGhpcyBpcyBvbmx5IHVzZWQgaW4gInN0YXRzIHNvY2tldCIsIHdlIGdpdmUgbWVh bmluZwogICogbmFtZXMgaW5zdGVhZCBvZiB0aGUgUkVBTCBuYW1lcwogICovCi1jaGFyICp0Y3Bz dGF0ZXNbXSA9IHsKK2NvbnN0IGNoYXIgKiBjb25zdCB0Y3BzdGF0ZXNbXSA9IHsKIC8qCSJDTE9T RUQiLCAgICAgICAiTElTVEVOIiwgICAgICAgIlNZTl9TRU5UIiwgICAgICJTWU5fUkNWRCIsICov CiAJIlJFRElSRUNUIiwJIkxJU1RFTiIsCSJTWU5fU0VOVCIsICAgICAiU1lOX1JDVkQiLAogCSJF U1RBQkxJU0hFRCIsICAiQ0xPU0VfV0FJVCIsICAgIkZJTl9XQUlUXzEiLCAgICJDTE9TSU5HIiwK IAkiTEFTVF9BQ0siLCAgICAgIkZJTl9XQUlUXzIiLCAgICJUSU1FX1dBSVQiLAogfTsKIAotdV9j aGFyICB0Y3Bfb3V0ZmxhZ3NbVENQX05TVEFURVNdID0geworc3RhdGljIGNvbnN0IHVfY2hhciAg dGNwX291dGZsYWdzW1RDUF9OU1RBVEVTXSA9IHsKIAlUSF9SU1R8VEhfQUNLLCAwLCAgICAgIFRI X1NZTiwgICAgICAgIFRIX1NZTnxUSF9BQ0ssCiAJVEhfQUNLLCAgICAgICAgVEhfQUNLLCBUSF9G SU58VEhfQUNLLCBUSF9GSU58VEhfQUNLLAogCVRIX0ZJTnxUSF9BQ0ssIFRIX0FDSywgVEhfQUNL LApAQCAtNjgsOCArNjgsNyBAQAogICogVGNwIG91dHB1dCByb3V0aW5lOiBmaWd1cmUgb3V0IHdo YXQgc2hvdWxkIGJlIHNlbnQgYW5kIHNlbmQgaXQuCiAgKi8KIGludAotdGNwX291dHB1dCh0cCkK LQlyZWdpc3RlciBzdHJ1Y3QgdGNwY2IgKnRwOwordGNwX291dHB1dChzbGlycF9zdGF0ZV90ICpz LCByZWdpc3RlciBzdHJ1Y3QgdGNwY2IgKnRwKQogewogCXJlZ2lzdGVyIHN0cnVjdCBzb2NrZXQg KnNvID0gdHAtPnRfc29ja2V0OwogCXJlZ2lzdGVyIGxvbmcgbGVuLCB3aW47CkBAIC0yNjMsNyAr MjYyLDcgQEAKIAkvKgogCSAqIE5vIHJlYXNvbiB0byBzZW5kIGEgc2VnbWVudCwganVzdCByZXR1 cm4uCiAJICovCi0JdGNwc3RhdC50Y3BzX2RpZG51dHRpbisrOworCXMtPnRjcHN0YXQudGNwc19k aWRudXR0aW4rKzsKIAogCXJldHVybiAoMCk7CiAKQEAgLTI4NSw3ICsyODQsNyBAQAogCiAJCQlv cHRbMF0gPSBUQ1BPUFRfTUFYU0VHOwogCQkJb3B0WzFdID0gNDsKLQkJCW1zcyA9IGh0b25zKCh1 X2ludDE2X3QpIHRjcF9tc3ModHAsIDApKTsKKwkJCW1zcyA9IGh0b25zKCh1X2ludDE2X3QpIHRj cF9tc3MocywgdHAsIDApKTsKIAkJCW1lbWNweSgoY2FkZHJfdCkob3B0ICsgMiksIChjYWRkcl90 KSZtc3MsIHNpemVvZihtc3MpKTsKIAkJCW9wdGxlbiA9IDQ7CiAKQEAgLTMzOSwyMiArMzM4LDIy IEBACiAJICovCiAJaWYgKGxlbikgewogCQlpZiAodHAtPnRfZm9yY2UgJiYgbGVuID09IDEpCi0J CQl0Y3BzdGF0LnRjcHNfc25kcHJvYmUrKzsKKwkJCXMtPnRjcHN0YXQudGNwc19zbmRwcm9iZSsr OwogCQllbHNlIGlmIChTRVFfTFQodHAtPnNuZF9ueHQsIHRwLT5zbmRfbWF4KSkgewotCQkJdGNw c3RhdC50Y3BzX3NuZHJleG1pdHBhY2srKzsKLQkJCXRjcHN0YXQudGNwc19zbmRyZXhtaXRieXRl ICs9IGxlbjsKKwkJCXMtPnRjcHN0YXQudGNwc19zbmRyZXhtaXRwYWNrKys7CisJCQlzLT50Y3Bz dGF0LnRjcHNfc25kcmV4bWl0Ynl0ZSArPSBsZW47CiAJCX0gZWxzZSB7Ci0JCQl0Y3BzdGF0LnRj cHNfc25kcGFjaysrOwotCQkJdGNwc3RhdC50Y3BzX3NuZGJ5dGUgKz0gbGVuOworCQkJcy0+dGNw c3RhdC50Y3BzX3NuZHBhY2srKzsKKwkJCXMtPnRjcHN0YXQudGNwc19zbmRieXRlICs9IGxlbjsK IAkJfQogCi0JCW0gPSBtX2dldCgpOworCQltID0gbV9nZXQocyk7CiAJCWlmIChtID09IE5VTEwp IHsKIC8qCQkJZXJyb3IgPSBFTk9CVUZTOyAqLwogCQkJZXJyb3IgPSAxOwogCQkJZ290byBvdXQ7 CiAJCX0KLQkJbS0+bV9kYXRhICs9IGlmX21heGxpbmtoZHI7CisJCW0tPm1fZGF0YSArPSBzLT5p Zl9tYXhsaW5raGRyOwogCQltLT5tX2xlbiA9IGhkcmxlbjsKIAogCQkvKgpAQCAtMzgyLDIxICsz ODEsMjEgQEAKIAkJCWZsYWdzIHw9IFRIX1BVU0g7CiAJfSBlbHNlIHsKIAkJaWYgKHRwLT50X2Zs YWdzICYgVEZfQUNLTk9XKQotCQkJdGNwc3RhdC50Y3BzX3NuZGFja3MrKzsKKwkJCXMtPnRjcHN0 YXQudGNwc19zbmRhY2tzKys7CiAJCWVsc2UgaWYgKGZsYWdzICYgKFRIX1NZTnxUSF9GSU58VEhf UlNUKSkKLQkJCXRjcHN0YXQudGNwc19zbmRjdHJsKys7CisJCQlzLT50Y3BzdGF0LnRjcHNfc25k Y3RybCsrOwogCQllbHNlIGlmIChTRVFfR1QodHAtPnNuZF91cCwgdHAtPnNuZF91bmEpKQotCQkJ dGNwc3RhdC50Y3BzX3NuZHVyZysrOworCQkJcy0+dGNwc3RhdC50Y3BzX3NuZHVyZysrOwogCQll bHNlCi0JCQl0Y3BzdGF0LnRjcHNfc25kd2ludXArKzsKKwkJCXMtPnRjcHN0YXQudGNwc19zbmR3 aW51cCsrOwogCi0JCW0gPSBtX2dldCgpOworCQltID0gbV9nZXQocyk7CiAJCWlmIChtID09IE5V TEwpIHsKIC8qCQkJZXJyb3IgPSBFTk9CVUZTOyAqLwogCQkJZXJyb3IgPSAxOwogCQkJZ290byBv dXQ7CiAJCX0KLQkJbS0+bV9kYXRhICs9IGlmX21heGxpbmtoZHI7CisJCW0tPm1fZGF0YSArPSBz LT5pZl9tYXhsaW5raGRyOwogCQltLT5tX2xlbiA9IGhkcmxlbjsKIAl9CiAKQEAgLTUwMCw3ICs0 OTksNyBAQAogCQkJaWYgKHRwLT50X3J0dCA9PSAwKSB7CiAJCQkJdHAtPnRfcnR0ID0gMTsKIAkJ CQl0cC0+dF9ydHNlcSA9IHN0YXJ0c2VxOwotCQkJCXRjcHN0YXQudGNwc19zZWdzdGltZWQrKzsK KwkJCQlzLT50Y3BzdGF0LnRjcHNfc2Vnc3RpbWVkKys7CiAJCQl9CiAJCX0KIApAQCAtNTM2LDcg KzUzNSw3IEBACiAKIAkoKHN0cnVjdCBpcCAqKXRpKS0+aXBfbGVuID0gbS0+bV9sZW47CiAKLQko KHN0cnVjdCBpcCAqKXRpKS0+aXBfdHRsID0gaXBfZGVmdHRsOworCSgoc3RydWN0IGlwICopdGkp LT5pcF90dGwgPSBJUERFRlRUTDsKIAkoKHN0cnVjdCBpcCAqKXRpKS0+aXBfdG9zID0gc28tPnNv X2lwdG9zOwogCiAvKiAjaWYgQlNEID49IDQzICovCkBAIC01NDQsNyArNTQzLDcgQEAKIC8qCWVy cm9yID0gaXBfb3V0cHV0KG0sIHRwLT50X2lucGNiLT5pbnBfb3B0aW9ucywgJnRwLT50X2lucGNi LT5pbnBfcm91dGUsCiAgKgkgICAgc28tPnNvX29wdGlvbnMgJiBTT19ET05UUk9VVEUsIDApOwog ICovCi0JZXJyb3IgPSBpcF9vdXRwdXQoc28sIG0pOworCWVycm9yID0gaXBfb3V0cHV0KHMsIHNv LCBtKTsKIAogLyogI2Vsc2UKICAqCWVycm9yID0gaXBfb3V0cHV0KG0sIChzdHJ1Y3QgbWJ1ZiAq KTAsICZ0cC0+dF9pbnBjYi0+aW5wX3JvdXRlLApAQCAtNTY3LDcgKzU2Niw3IEBACiAgKi8KIAkJ cmV0dXJuIChlcnJvcik7CiAJfQotCXRjcHN0YXQudGNwc19zbmR0b3RhbCsrOworCXMtPnRjcHN0 YXQudGNwc19zbmR0b3RhbCsrOwogCiAJLyoKIAkgKiBEYXRhIHNlbnQgKGFzIGZhciBhcyB3ZSBj YW4gdGVsbCkuCkluZGV4OiBxZW11L3NsaXJwL3RjcF9zdWJyLmMKPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcWVt dS5vcmlnL3NsaXJwL3RjcF9zdWJyLmMJMjAwNy0xMC0yMCAwNzozMzozOC4wMDAwMDAwMDAgKzAw MDAKKysrIHFlbXUvc2xpcnAvdGNwX3N1YnIuYwkyMDA3LTEwLTIwIDE2OjQ2OjI5LjAwMDAwMDAw MCArMDAwMApAQCAtNDUsMjkgKzQ1LDE2IEBACiAjZGVmaW5lIFdBTlRfU1lTX0lPQ1RMX0gKICNp bmNsdWRlIDxzbGlycC5oPgogCi0vKiBwYXRjaGFibGUvc2V0dGFibGUgcGFyYW1ldGVycyBmb3Ig dGNwICovCi1pbnQgCXRjcF9tc3NkZmx0ID0gVENQX01TUzsKLWludCAJdGNwX3J0dGRmbHQgPSBU Q1BUVl9TUlRUREZMVCAvIFBSX1NMT1dIWjsKLWludAl0Y3BfZG9fcmZjMTMyMyA9IDA7CS8qIERv bid0IGRvIHJmYzEzMjMgcGVyZm9ybWFuY2UgZW5oYW5jZW1lbnRzICovCi1pbnQJdGNwX3JjdnNw YWNlOwkvKiBZb3UgbWF5IHdhbnQgdG8gY2hhbmdlIHRoaXMgKi8KLWludAl0Y3Bfc25kc3BhY2U7 CS8qIEtlZXAgc21hbGwgaWYgeW91IGhhdmUgYW4gZXJyb3IgcHJvbmUgbGluayAqLwogCiAvKgog ICogVGNwIGluaXRpYWxpemF0aW9uCiAgKi8KIHZvaWQKLXRjcF9pbml0KCkKK3RjcF9pbml0KHNs aXJwX3N0YXRlX3QgKnMpCiB7Ci0JdGNwX2lzcyA9IDE7CQkvKiB3cm9uZyAqLwotCXRjYi5zb19u ZXh0ID0gdGNiLnNvX3ByZXYgPSAmdGNiOwotCi0JLyogdGNwX3JjdnNwYWNlID0gb3VyIFdpbmRv dyB3ZSBhZHZlcnRpc2UgdG8gdGhlIHJlbW90ZSAqLwotCXRjcF9yY3ZzcGFjZSA9IFRDUF9SQ1ZT UEFDRTsKLQl0Y3Bfc25kc3BhY2UgPSBUQ1BfU05EU1BBQ0U7Ci0KLQkvKiBNYWtlIHN1cmUgdGNw X3NuZHNwYWNlIGlzIGF0IGxlYXN0IDIqTVNTICovCi0JaWYgKHRjcF9zbmRzcGFjZSA8IDIqKG1p bihpZl9tdHUsIGlmX21ydSkgLSBzaXplb2Yoc3RydWN0IHRjcGlwaGRyKSkpCi0JCXRjcF9zbmRz cGFjZSA9IDIqKG1pbihpZl9tdHUsIGlmX21ydSkgLSBzaXplb2Yoc3RydWN0IHRjcGlwaGRyKSk7 CisJcy0+dGNwX2lzcyA9IDE7CQkvKiB3cm9uZyAqLworCXMtPnRjYi5zb19uZXh0ID0gcy0+dGNi LnNvX3ByZXYgPSAmcy0+dGNiOworICAgICAgICBzLT50Y3BfbGFzdF9zbyA9ICZzLT50Y2I7CiB9 CiAKIC8qCkBAIC0xMTcsMTIgKzEwNCw4IEBACiAgKiBzZWdtZW50IGFyZSBhcyBzcGVjaWZpZWQg YnkgdGhlIHBhcmFtZXRlcnMuCiAgKi8KIHZvaWQKLXRjcF9yZXNwb25kKHRwLCB0aSwgbSwgYWNr LCBzZXEsIGZsYWdzKQotCXN0cnVjdCB0Y3BjYiAqdHA7Ci0JcmVnaXN0ZXIgc3RydWN0IHRjcGlw aGRyICp0aTsKLQlyZWdpc3RlciBzdHJ1Y3QgbWJ1ZiAqbTsKLQl0Y3Bfc2VxIGFjaywgc2VxOwot CWludCBmbGFnczsKK3RjcF9yZXNwb25kKHNsaXJwX3N0YXRlX3QgKnMsIHN0cnVjdCB0Y3BjYiAq dHAsIHN0cnVjdCB0Y3BpcGhkciAqdGksCisgICAgICAgICAgICBzdHJ1Y3QgbWJ1ZiAqbSwgdGNw X3NlcSBhY2ssIHRjcF9zZXEgc2VxLCBpbnQgZmxhZ3MpCiB7CiAJcmVnaXN0ZXIgaW50IHRsZW47 CiAJaW50IHdpbiA9IDA7CkBAIC0xMzgsMTQgKzEyMSwxNCBAQAogCWlmICh0cCkKIAkJd2luID0g c2JzcGFjZSgmdHAtPnRfc29ja2V0LT5zb19yY3YpOwogCWlmIChtID09IDApIHsKLQkJaWYgKCht ID0gbV9nZXQoKSkgPT0gTlVMTCkKKwkJaWYgKChtID0gbV9nZXQocykpID09IE5VTEwpCiAJCQly ZXR1cm47CiAjaWZkZWYgVENQX0NPTVBBVF80MgogCQl0bGVuID0gMTsKICNlbHNlCiAJCXRsZW4g PSAwOwogI2VuZGlmCi0JCW0tPm1fZGF0YSArPSBpZl9tYXhsaW5raGRyOworCQltLT5tX2RhdGEg Kz0gcy0+aWZfbWF4bGlua2hkcjsKIAkJKm10b2QobSwgc3RydWN0IHRjcGlwaGRyICopID0gKnRp OwogCQl0aSA9IG10b2QobSwgc3RydWN0IHRjcGlwaGRyICopOwogCQlmbGFncyA9IFRIX0FDSzsK QEAgLTE4Niw5ICsxNjksOSBAQAogCWlmKGZsYWdzICYgVEhfUlNUKQogCSAgKChzdHJ1Y3QgaXAg Kil0aSktPmlwX3R0bCA9IE1BWFRUTDsKIAllbHNlCi0JICAoKHN0cnVjdCBpcCAqKXRpKS0+aXBf dHRsID0gaXBfZGVmdHRsOworCSAgKChzdHJ1Y3QgaXAgKil0aSktPmlwX3R0bCA9IElQREVGVFRM OwogCi0JKHZvaWQpIGlwX291dHB1dCgoc3RydWN0IHNvY2tldCAqKTAsIG0pOworCSh2b2lkKSBp cF9vdXRwdXQocywgKHN0cnVjdCBzb2NrZXQgKikwLCBtKTsKIH0KIAogLyoKQEAgLTE5Nyw4ICsx ODAsNyBAQAogICogcHJvdG9jb2wgY29udHJvbCBibG9jay4KICAqLwogc3RydWN0IHRjcGNiICoK LXRjcF9uZXd0Y3BjYihzbykKLQlzdHJ1Y3Qgc29ja2V0ICpzbzsKK3RjcF9uZXd0Y3BjYihzbGly cF9zdGF0ZV90ICpzLCBzdHJ1Y3Qgc29ja2V0ICpzbykKIHsKIAlyZWdpc3RlciBzdHJ1Y3QgdGNw Y2IgKnRwOwogCkBAIC0yMDcsMTAgKzE4OSwxMCBAQAogCQlyZXR1cm4gKChzdHJ1Y3QgdGNwY2Ig KikwKTsKIAogCW1lbXNldCgoY2hhciAqKSB0cCwgMCwgc2l6ZW9mKHN0cnVjdCB0Y3BjYikpOwot CXRwLT5zZWdfbmV4dCA9IHRwLT5zZWdfcHJldiA9ICh0Y3BpcGhkcnBfMzIpdHA7Ci0JdHAtPnRf bWF4c2VnID0gdGNwX21zc2RmbHQ7CisJdHAtPnNlZ19uZXh0ID0gdHAtPnNlZ19wcmV2ID0gdHA7 CisJdHAtPnRfbWF4c2VnID0gVENQX01TUzsKIAotCXRwLT50X2ZsYWdzID0gdGNwX2RvX3JmYzEz MjMgPyAoVEZfUkVRX1NDQUxFfFRGX1JFUV9UU1RNUCkgOiAwOworCXRwLT50X2ZsYWdzID0gVENQ X0RPX1JGQzEzMjMgPyAoVEZfUkVRX1NDQUxFfFRGX1JFUV9UU1RNUCkgOiAwOwogCXRwLT50X3Nv Y2tldCA9IHNvOwogCiAJLyoKQEAgLTIxOSw3ICsyMDEsNyBAQAogCSAqIHJlYXNvbmFibGUgaW5p dGlhbCByZXRyYW5zbWl0IHRpbWUuCiAJICovCiAJdHAtPnRfc3J0dCA9IFRDUFRWX1NSVFRCQVNF OwotCXRwLT50X3J0dHZhciA9IHRjcF9ydHRkZmx0ICogUFJfU0xPV0haIDw8IDI7CisJdHAtPnRf cnR0dmFyID0gVENQVFZfU1JUVERGTFQgPDwgMjsKIAl0cC0+dF9ydHRtaW4gPSBUQ1BUVl9NSU47 CiAKIAlUQ1BUX1JBTkdFU0VUKHRwLT50X3J4dGN1ciwKQEAgLTI0MCw3ICsyMjIsNyBAQAogICog dGhlIHNwZWNpZmllZCBlcnJvci4gIElmIGNvbm5lY3Rpb24gaXMgc3luY2hyb25pemVkLAogICog dGhlbiBzZW5kIGEgUlNUIHRvIHBlZXIuCiAgKi8KLXN0cnVjdCB0Y3BjYiAqdGNwX2Ryb3Aoc3Ry dWN0IHRjcGNiICp0cCwgaW50IGVycikKK3N0cnVjdCB0Y3BjYiAqdGNwX2Ryb3Aoc2xpcnBfc3Rh dGVfdCAqcywgc3RydWN0IHRjcGNiICp0cCwgaW50IGVycikKIHsKIC8qIHRjcF9kcm9wKHRwLCBl cnJubykKIAlyZWdpc3RlciBzdHJ1Y3QgdGNwY2IgKnRwOwpAQCAtMjU0LDE1ICsyMzYsMTUgQEAK IAogCWlmIChUQ1BTX0hBVkVSQ1ZEU1lOKHRwLT50X3N0YXRlKSkgewogCQl0cC0+dF9zdGF0ZSA9 IFRDUFNfQ0xPU0VEOwotCQkodm9pZCkgdGNwX291dHB1dCh0cCk7Ci0JCXRjcHN0YXQudGNwc19k cm9wcysrOworCQkodm9pZCkgdGNwX291dHB1dChzLCB0cCk7CisJCXMtPnRjcHN0YXQudGNwc19k cm9wcysrOwogCX0gZWxzZQotCQl0Y3BzdGF0LnRjcHNfY29ubmRyb3BzKys7CisJCXMtPnRjcHN0 YXQudGNwc19jb25uZHJvcHMrKzsKIC8qCWlmIChlcnJubyA9PSBFVElNRURPVVQgJiYgdHAtPnRf c29mdGVycm9yKQogICoJCWVycm5vID0gdHAtPnRfc29mdGVycm9yOwogICovCiAvKglzby0+c29f ZXJyb3IgPSBlcnJubzsgKi8KLQlyZXR1cm4gKHRjcF9jbG9zZSh0cCkpOworCXJldHVybiAodGNw X2Nsb3NlKHMsIHRwKSk7CiB9CiAKIC8qCkBAIC0yNzIsOCArMjU0LDcgQEAKICAqCXdha2UgdXAg YW55IHNsZWVwZXJzCiAgKi8KIHN0cnVjdCB0Y3BjYiAqCi10Y3BfY2xvc2UodHApCi0JcmVnaXN0 ZXIgc3RydWN0IHRjcGNiICp0cDsKK3RjcF9jbG9zZShzbGlycF9zdGF0ZV90ICpzLCByZWdpc3Rl ciBzdHJ1Y3QgdGNwY2IgKnRwKQogewogCXJlZ2lzdGVyIHN0cnVjdCB0Y3BpcGhkciAqdDsKIAlz dHJ1Y3Qgc29ja2V0ICpzbyA9IHRwLT50X3NvY2tldDsKQEAgLTI4Niw5ICsyNjcsOSBAQAogCXQg PSAoc3RydWN0IHRjcGlwaGRyICopIHRwLT5zZWdfbmV4dDsKIAl3aGlsZSAodCAhPSAoc3RydWN0 IHRjcGlwaGRyICopdHApIHsKIAkJdCA9IChzdHJ1Y3QgdGNwaXBoZHIgKil0LT50aV9uZXh0Owot CQltID0gKHN0cnVjdCBtYnVmICopIFJFQVNTX01CVUYoKHN0cnVjdCB0Y3BpcGhkciAqKXQtPnRp X3ByZXYpOwotCQlyZW1xdWVfMzIoKHN0cnVjdCB0Y3BpcGhkciAqKSB0LT50aV9wcmV2KTsKLQkJ bV9mcmVlbShtKTsKKwkJbSA9IFJFQVNTX01CVUZfR0VUKChzdHJ1Y3QgdGNwaXBoZHIgKil0LT50 aV9wcmV2KTsKKwkJcmVtcXVlXzMyKHMsIChzdHJ1Y3QgdGNwaXBoZHIgKikgdC0+dGlfcHJldik7 CisJCW1fZnJlZW0ocywgbSk7CiAJfQogCS8qIEl0J3Mgc3RhdGljICovCiAvKglpZiAodHAtPnRf dGVtcGxhdGUpCkBAIC0yOTksMTYgKzI4MCwxNyBAQAogCXNvLT5zb190Y3BjYiA9IDA7CiAJc29p c2ZkaXNjb25uZWN0ZWQoc28pOwogCS8qIGNsb2JiZXIgaW5wdXQgc29ja2V0IGNhY2hlIGlmIHdl J3JlIGNsb3NpbmcgdGhlIGNhY2hlZCBjb25uZWN0aW9uICovCi0JaWYgKHNvID09IHRjcF9sYXN0 X3NvKQotCQl0Y3BfbGFzdF9zbyA9ICZ0Y2I7CisJaWYgKHNvID09IHMtPnRjcF9sYXN0X3NvKQor CQlzLT50Y3BfbGFzdF9zbyA9ICZzLT50Y2I7CiAJY2xvc2Vzb2NrZXQoc28tPnMpOwogCXNiZnJl ZSgmc28tPnNvX3Jjdik7CiAJc2JmcmVlKCZzby0+c29fc25kKTsKLQlzb2ZyZWUoc28pOwotCXRj cHN0YXQudGNwc19jbG9zZWQrKzsKKwlzb2ZyZWUocywgc28pOworCXMtPnRjcHN0YXQudGNwc19j bG9zZWQrKzsKIAlyZXR1cm4gKChzdHJ1Y3QgdGNwY2IgKikwKTsKIH0KIAorI2lmZGVmIG5vdGRl Zgogdm9pZAogdGNwX2RyYWluKCkKIHsKQEAgLTMxOSw5ICszMDEsNiBAQAogICogV2hlbiBhIHNv dXJjZSBxdWVuY2ggaXMgcmVjZWl2ZWQsIGNsb3NlIGNvbmdlc3Rpb24gd2luZG93CiAgKiB0byBv bmUgc2VnbWVudC4gIFdlIHdpbGwgZ3JhZHVhbGx5IG9wZW4gaXQgYWdhaW4gYXMgd2UgcHJvY2Vl ZC4KICAqLwotCi0jaWZkZWYgbm90ZGVmCi0KIHZvaWQKIHRjcF9xdWVuY2goaSwgZXJybm8pCiAK QEAgLTM1MCw4ICszMjksNyBAQAogICogV2UgY2FuIGxldCB0aGUgdXNlciBleGl0IGZyb20gdGhl IGNsb3NlIGFzIHNvb24gYXMgdGhlIEZJTiBpcyBhY2tlZC4KICAqLwogdm9pZAotdGNwX3NvY2tj bG9zZWQodHApCi0Jc3RydWN0IHRjcGNiICp0cDsKK3RjcF9zb2NrY2xvc2VkKHNsaXJwX3N0YXRl X3QgKnMsIHN0cnVjdCB0Y3BjYiAqdHApCiB7CiAKIAlERUJVR19DQUxMKCJ0Y3Bfc29ja2Nsb3Nl ZCIpOwpAQCAtMzYzLDcgKzM0MSw3IEBACiAJY2FzZSBUQ1BTX0xJU1RFTjoKIAljYXNlIFRDUFNf U1lOX1NFTlQ6CiAJCXRwLT50X3N0YXRlID0gVENQU19DTE9TRUQ7Ci0JCXRwID0gdGNwX2Nsb3Nl KHRwKTsKKwkJdHAgPSB0Y3BfY2xvc2UocywgdHApOwogCQlicmVhazsKIAogCWNhc2UgVENQU19T WU5fUkVDRUlWRUQ6CkBAIC0zNzksNyArMzU3LDcgQEAKIAlpZiAodHAgJiYgdHAtPnRfc3RhdGUg Pj0gVENQU19GSU5fV0FJVF8yKQogCQlzb2lzZmRpc2Nvbm5lY3RlZCh0cC0+dF9zb2NrZXQpOwog CWlmICh0cCkKLQkJdGNwX291dHB1dCh0cCk7CisJCXRjcF9vdXRwdXQocywgdHApOwogfQogCiAv KgpAQCAtMzkyLDggKzM3MCw3IEBACiAgKiBub25ibG9ja2luZy4gIENvbm5lY3QgcmV0dXJucyBh ZnRlciB0aGUgU1lOIGlzIHNlbnQsIGFuZCBkb2VzCiAgKiBub3Qgd2FpdCBmb3IgQUNLK1NZTi4K ICAqLwotaW50IHRjcF9mY29ubmVjdChzbykKLSAgICAgc3RydWN0IHNvY2tldCAqc287CitpbnQg dGNwX2Zjb25uZWN0KHNsaXJwX3N0YXRlX3QgKnMsIHN0cnVjdCBzb2NrZXQgKnNvKQogewogICBp bnQgcmV0PTA7CiAKQEAgLTQwMSwyNSArMzc4LDI1IEBACiAgIERFQlVHX0FSRygic28gPSAlbHgi LCAobG9uZyApc28pOwogCiAgIGlmKCAocmV0PXNvLT5zPXNvY2tldChBRl9JTkVULFNPQ0tfU1RS RUFNLDApKSA+PSAwKSB7Ci0gICAgaW50IG9wdCwgcz1zby0+czsKKyAgICBpbnQgb3B0LCBmZCA9 IHNvLT5zOwogICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyOwogCi0gICAgZmRfbm9uYmxvY2so cyk7CisgICAgZmRfbm9uYmxvY2soZmQpOwogICAgIG9wdCA9IDE7Ci0gICAgc2V0c29ja29wdChz LFNPTF9TT0NLRVQsU09fUkVVU0VBRERSLChjaGFyICopJm9wdCxzaXplb2Yob3B0ICkpOworICAg IHNldHNvY2tvcHQoZmQsIFNPTF9TT0NLRVQsIFNPX1JFVVNFQUREUiwgKGNoYXIgKikmb3B0LCBz aXplb2Yob3B0KSk7CiAgICAgb3B0ID0gMTsKLSAgICBzZXRzb2Nrb3B0KHMsU09MX1NPQ0tFVCxT T19PT0JJTkxJTkUsKGNoYXIgKikmb3B0LHNpemVvZihvcHQgKSk7CisgICAgc2V0c29ja29wdChm ZCwgU09MX1NPQ0tFVCwgU09fT09CSU5MSU5FLCAoY2hhciAqKSZvcHQsIHNpemVvZihvcHQpKTsK IAogICAgIGFkZHIuc2luX2ZhbWlseSA9IEFGX0lORVQ7Ci0gICAgaWYgKChzby0+c29fZmFkZHIu c19hZGRyICYgaHRvbmwoMHhmZmZmZmYwMCkpID09IHNwZWNpYWxfYWRkci5zX2FkZHIpIHsKKyAg ICBpZiAoKHNvLT5zb19mYWRkci5zX2FkZHIgJiBodG9ubCgweGZmZmZmZjAwKSkgPT0gcy0+c3Bl Y2lhbF9hZGRyLnNfYWRkcikgewogICAgICAgLyogSXQncyBhbiBhbGlhcyAqLwogICAgICAgc3dp dGNoKG50b2hsKHNvLT5zb19mYWRkci5zX2FkZHIpICYgMHhmZikgewogICAgICAgY2FzZSBDVExf RE5TOgotCWFkZHIuc2luX2FkZHIgPSBkbnNfYWRkcjsKKwlhZGRyLnNpbl9hZGRyID0gcy0+ZG5z X2FkZHI7CiAJYnJlYWs7CiAgICAgICBjYXNlIENUTF9BTElBUzoKICAgICAgIGRlZmF1bHQ6Ci0J YWRkci5zaW5fYWRkciA9IGxvb3BiYWNrX2FkZHI7CisJYWRkci5zaW5fYWRkciA9IHMtPmxvb3Bi YWNrX2FkZHI7CiAJYnJlYWs7CiAgICAgICB9CiAgICAgfSBlbHNlCkBAIC00MzAsNyArNDA3LDcg QEAKIAkJImFkZHIuc2luX2FkZHIuc19hZGRyPSUuMTZzXG4iLAogCQludG9ocyhhZGRyLnNpbl9w b3J0KSwgaW5ldF9udG9hKGFkZHIuc2luX2FkZHIpKSk7CiAgICAgLyogV2UgZG9uJ3QgY2FyZSB3 aGF0IHBvcnQgd2UgZ2V0ICovCi0gICAgcmV0ID0gY29ubmVjdChzLChzdHJ1Y3Qgc29ja2FkZHIg KikmYWRkcixzaXplb2YgKGFkZHIpKTsKKyAgICByZXQgPSBjb25uZWN0KGZkLCAoc3RydWN0IHNv Y2thZGRyICopJmFkZHIsIHNpemVvZihhZGRyKSk7CiAKICAgICAvKgogICAgICAqIElmIGl0J3Mg bm90IGluIHByb2dyZXNzLCBpdCBmYWlsZWQsIHNvIHdlIGp1c3QgcmV0dXJuIDAsCkBAIC00NTUs MTQgKzQzMiwxMyBAQAogICogaGVyZSBhbmQgU1lOIHRoZSBsb2NhbC1ob3N0LgogICovCiB2b2lk Ci10Y3BfY29ubmVjdChpbnNvKQotCXN0cnVjdCBzb2NrZXQgKmluc287Cit0Y3BfY29ubmVjdChz bGlycF9zdGF0ZV90ICpzLCBzdHJ1Y3Qgc29ja2V0ICppbnNvKQogewogCXN0cnVjdCBzb2NrZXQg KnNvOwogCXN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyOwogCWludCBhZGRybGVuID0gc2l6ZW9mKHN0 cnVjdCBzb2NrYWRkcl9pbik7CiAJc3RydWN0IHRjcGNiICp0cDsKLQlpbnQgcywgb3B0OworCWlu dCBmZCwgb3B0OwogCiAJREVCVUdfQ0FMTCgidGNwX2Nvbm5lY3QiKTsKIAlERUJVR19BUkcoImlu c28gPSAlbHgiLCAobG9uZylpbnNvKTsKQEAgLTQ4MCw3ICs0NTYsNyBAQAogCQkJY2xvc2Vzb2Nr ZXQoYWNjZXB0KGluc28tPnMsKHN0cnVjdCBzb2NrYWRkciAqKSZhZGRyLCZhZGRybGVuKSk7CiAJ CQlyZXR1cm47CiAJCX0KLQkJaWYgKHRjcF9hdHRhY2goc28pIDwgMCkgeworCQlpZiAodGNwX2F0 dGFjaChzLCBzbykgPCAwKSB7CiAJCQlmcmVlKHNvKTsgLyogTk9UIHNvZnJlZSAqLwogCQkJcmV0 dXJuOwogCQl9CkBAIC00ODgsMjUgKzQ2NCwyNSBAQAogCQlzby0+c29fbHBvcnQgPSBpbnNvLT5z b19scG9ydDsKIAl9CiAKLQkodm9pZCkgdGNwX21zcyhzb3RvdGNwY2Ioc28pLCAwKTsKKwkodm9p ZCkgdGNwX21zcyhzLCBzb3RvdGNwY2Ioc28pLCAwKTsKIAotCWlmICgocyA9IGFjY2VwdChpbnNv LT5zLChzdHJ1Y3Qgc29ja2FkZHIgKikmYWRkciwmYWRkcmxlbikpIDwgMCkgewotCQl0Y3BfY2xv c2Uoc290b3RjcGNiKHNvKSk7IC8qIFRoaXMgd2lsbCBzb2ZyZWUoKSBhcyB3ZWxsICovCisJaWYg KChmZCA9IGFjY2VwdChpbnNvLT5zLCAoc3RydWN0IHNvY2thZGRyICopJmFkZHIsICZhZGRybGVu KSkgPCAwKSB7CisJCXRjcF9jbG9zZShzLCBzb3RvdGNwY2Ioc28pKTsgLyogVGhpcyB3aWxsIHNv ZnJlZSgpIGFzIHdlbGwgKi8KIAkJcmV0dXJuOwogCX0KLQlmZF9ub25ibG9jayhzKTsKKwlmZF9u b25ibG9jayhmZCk7CiAJb3B0ID0gMTsKLQlzZXRzb2Nrb3B0KHMsU09MX1NPQ0tFVCxTT19SRVVT RUFERFIsKGNoYXIgKikmb3B0LHNpemVvZihpbnQpKTsKKwlzZXRzb2Nrb3B0KGZkLCBTT0xfU09D S0VULCBTT19SRVVTRUFERFIsIChjaGFyICopJm9wdCwgc2l6ZW9mKGludCkpOwogCW9wdCA9IDE7 Ci0Jc2V0c29ja29wdChzLFNPTF9TT0NLRVQsU09fT09CSU5MSU5FLChjaGFyICopJm9wdCxzaXpl b2YoaW50KSk7CisJc2V0c29ja29wdChmZCwgU09MX1NPQ0tFVCwgU09fT09CSU5MSU5FLCAoY2hh ciAqKSZvcHQsIHNpemVvZihpbnQpKTsKIAlvcHQgPSAxOwotCXNldHNvY2tvcHQocyxJUFBST1RP X1RDUCxUQ1BfTk9ERUxBWSwoY2hhciAqKSZvcHQsc2l6ZW9mKGludCkpOworCXNldHNvY2tvcHQo ZmQsIElQUFJPVE9fVENQLCBUQ1BfTk9ERUxBWSwgKGNoYXIgKikmb3B0LCBzaXplb2YoaW50KSk7 CiAKIAlzby0+c29fZnBvcnQgPSBhZGRyLnNpbl9wb3J0OwogCXNvLT5zb19mYWRkciA9IGFkZHIu c2luX2FkZHI7CiAJLyogVHJhbnNsYXRlIGNvbm5lY3Rpb25zIGZyb20gbG9jYWxob3N0IHRvIHRo ZSByZWFsIGhvc3RuYW1lICovCi0JaWYgKHNvLT5zb19mYWRkci5zX2FkZHIgPT0gMCB8fCBzby0+ c29fZmFkZHIuc19hZGRyID09IGxvb3BiYWNrX2FkZHIuc19hZGRyKQotCSAgIHNvLT5zb19mYWRk ciA9IGFsaWFzX2FkZHI7CisJaWYgKHNvLT5zb19mYWRkci5zX2FkZHIgPT0gMCB8fCBzby0+c29f ZmFkZHIuc19hZGRyID09IHMtPmxvb3BiYWNrX2FkZHIuc19hZGRyKQorCSAgIHNvLT5zb19mYWRk ciA9IHMtPmFsaWFzX2FkZHI7CiAKIAkvKiBDbG9zZSB0aGUgYWNjZXB0KCkgc29ja2V0LCBzZXQg cmlnaHQgc3RhdGUgKi8KIAlpZiAoaW5zby0+c29fc3RhdGUgJiBTU19GQUNDRVBUT05DRSkgewpA QCAtNTE0LDcgKzQ5MCw3IEBACiAJCXNvLT5zb19zdGF0ZSA9IFNTX05PRkRSRUY7IC8qIERvbid0 IHNlbGVjdCBpdCB5ZXQsIGV2ZW4gdGhvdWdoIHdlIGhhdmUgYW4gRkQgKi8KIAkJCQkJICAgLyog aWYgaXQncyBub3QgRkFDQ0VQVE9OQ0UsIGl0J3MgYWxyZWFkeSBOT0ZEUkVGICovCiAJfQotCXNv LT5zID0gczsKKwlzby0+cyA9IGZkOwogCiAJc28tPnNvX2lwdG9zID0gdGNwX3Rvcyhzbyk7CiAJ dHAgPSBzb3RvdGNwY2Ioc28pOwpAQCAtNTI4LDI3ICs1MDQsMjYgQEAKICAqLwogCiAvKglzb2lz Y29ubmVjdGluZyhzbyk7ICovIC8qIE5PRkRSRUYgdXNlZCBpbnN0ZWFkICovCi0JdGNwc3RhdC50 Y3BzX2Nvbm5hdHRlbXB0Kys7CisJcy0+dGNwc3RhdC50Y3BzX2Nvbm5hdHRlbXB0Kys7CiAKIAl0 cC0+dF9zdGF0ZSA9IFRDUFNfU1lOX1NFTlQ7CiAJdHAtPnRfdGltZXJbVENQVF9LRUVQXSA9IFRD UFRWX0tFRVBfSU5JVDsKLQl0cC0+aXNzID0gdGNwX2lzczsKLQl0Y3BfaXNzICs9IFRDUF9JU1NJ TkNSLzI7CisJdHAtPmlzcyA9IHMtPnRjcF9pc3M7CisJcy0+dGNwX2lzcyArPSBUQ1BfSVNTSU5D UiAvIDI7CiAJdGNwX3NlbmRzZXFpbml0KHRwKTsKLQl0Y3Bfb3V0cHV0KHRwKTsKKwl0Y3Bfb3V0 cHV0KHMsIHRwKTsKIH0KIAogLyoKICAqIEF0dGFjaCBhIFRDUENCIHRvIGEgc29ja2V0LgogICov CiBpbnQKLXRjcF9hdHRhY2goc28pCi0Jc3RydWN0IHNvY2tldCAqc287Cit0Y3BfYXR0YWNoKHNs aXJwX3N0YXRlX3QgKnMsIHN0cnVjdCBzb2NrZXQgKnNvKQogewotCWlmICgoc28tPnNvX3RjcGNi ID0gdGNwX25ld3RjcGNiKHNvKSkgPT0gTlVMTCkKKwlpZiAoKHNvLT5zb190Y3BjYiA9IHRjcF9u ZXd0Y3BjYihzLCBzbykpID09IE5VTEwpCiAJICAgcmV0dXJuIC0xOwogCi0JaW5zcXVlKHNvLCAm dGNiKTsKKwlpbnNxdWUocywgc28sICZzLT50Y2IpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC01NTYs NyArNTMxLDcgQEAKIC8qCiAgKiBTZXQgdGhlIHNvY2tldCdzIHR5cGUgb2Ygc2VydmljZSBmaWVs ZAogICovCi1zdHJ1Y3QgdG9zX3QgdGNwdG9zW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHRv c190IHRjcHRvc1tdID0gewogCSAgezAsIDIwLCBJUFRPU19USFJPVUdIUFVULCAwfSwJLyogZnRw IGRhdGEgKi8KIAkgIHsyMSwgMjEsIElQVE9TX0xPV0RFTEFZLCAgRU1VX0ZUUH0sCS8qIGZ0cCBj b250cm9sICovCiAJICB7MCwgMjMsIElQVE9TX0xPV0RFTEFZLCAwfSwJLyogdGVsbmV0ICovCkBA IC01NzIsOCArNTQ3LDYgQEAKIAkgIHswLCAwLCAwLCAwfQogfTsKIAotc3RydWN0IGVtdV90ICp0 Y3BlbXUgPSAwOwotCiAvKgogICogUmV0dXJuIFRPUyBhY2NvcmRpbmcgdG8gdGhlIGFib3ZlIHRh YmxlCiAgKi8KQEAgLTU4Miw3ICs1NTUsNiBAQAogCXN0cnVjdCBzb2NrZXQgKnNvOwogewogCWlu dCBpID0gMDsKLQlzdHJ1Y3QgZW11X3QgKmVtdXA7CiAKIAl3aGlsZSh0Y3B0b3NbaV0udG9zKSB7 CiAJCWlmICgodGNwdG9zW2ldLmZwb3J0ICYmIChudG9ocyhzby0+c29fZnBvcnQpID09IHRjcHRv c1tpXS5mcG9ydCkpIHx8CkBAIC01OTMsMjAgKzU2NSw5IEBACiAJCWkrKzsKIAl9CiAKLQkvKiBO b3BlLCBsZXRzIHNlZSBpZiB0aGVyZSdzIGEgdXNlci1hZGRlZCBvbmUgKi8KLQlmb3IgKGVtdXAg PSB0Y3BlbXU7IGVtdXA7IGVtdXAgPSBlbXVwLT5uZXh0KSB7Ci0JCWlmICgoZW11cC0+ZnBvcnQg JiYgKG50b2hzKHNvLT5zb19mcG9ydCkgPT0gZW11cC0+ZnBvcnQpKSB8fAotCQkgICAgKGVtdXAt Pmxwb3J0ICYmIChudG9ocyhzby0+c29fbHBvcnQpID09IGVtdXAtPmxwb3J0KSkpIHsKLQkJCXNv LT5zb19lbXUgPSBlbXVwLT5lbXU7Ci0JCQlyZXR1cm4gZW11cC0+dG9zOwotCQl9Ci0JfQotCiAJ cmV0dXJuIDA7CiB9CiAKLWludCBkb19lY2hvID0gLTE7Ci0KIC8qCiAgKiBFbXVsYXRlIHByb2dy YW1zIHRoYXQgdHJ5IGFuZCBjb25uZWN0IHRvIHVzCiAgKiBUaGlzIGluY2x1ZGVzIGZ0cCAodGhl IGRhdGEgY29ubmVjdGlvbiBpcwpAQCAtNjMyLDkgKzU5Myw3IEBACiAgKiBOT1RFOiBpZiB5b3Ug cmV0dXJuIDAgeW91IE1VU1QgbV9mcmVlKCkgdGhlIG1idWYhCiAgKi8KIGludAotdGNwX2VtdShz bywgbSkKLQlzdHJ1Y3Qgc29ja2V0ICpzbzsKLQlzdHJ1Y3QgbWJ1ZiAqbTsKK3RjcF9lbXUoc2xp cnBfc3RhdGVfdCAqcywgc3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBtYnVmICptKQogewogCXVf aW50IG4xLCBuMiwgbjMsIG40LCBuNSwgbjY7CiAJY2hhciBidWZmWzI1Nl07CkBAIC02NjUsMTEg KzYyNCwxMSBAQAogCQkJc29fcmN2LT5zYl9ycHRyICs9IG0tPm1fbGVuOwogCQkJbS0+bV9kYXRh W20tPm1fbGVuXSA9IDA7IC8qIE5VTEwgdGVybWluYXRlICovCiAJCQlpZiAoc3RyY2hyKG0tPm1f ZGF0YSwgJ1xyJykgfHwgc3RyY2hyKG0tPm1fZGF0YSwgJ1xuJykpIHsKLQkJCQlpZiAoc3NjYW5m KHNvX3Jjdi0+c2JfZGF0YSwgIiVkJSpbICxdJWQiLCAmbjEsICZuMikgPT0gMikgeworCQkJCWlm IChzc2NhbmYoc29fcmN2LT5zYl9kYXRhLCAiJXUlKlsgLF0ldSIsICZuMSwgJm4yKSA9PSAyKSB7 CiAJCQkJCUhUT05TKG4xKTsKIAkJCQkJSFRPTlMobjIpOwogCQkJCQkvKiBuMiBpcyB0aGUgb25l IG9uIG91ciBob3N0ICovCi0JCQkJCWZvciAodG1wc28gPSB0Y2Iuc29fbmV4dDsgdG1wc28gIT0g JnRjYjsgdG1wc28gPSB0bXBzby0+c29fbmV4dCkgeworCQkJCQlmb3IgKHRtcHNvID0gcy0+dGNi LnNvX25leHQ7IHRtcHNvICE9ICZzLT50Y2I7IHRtcHNvID0gdG1wc28tPnNvX25leHQpIHsKIAkJ CQkJCWlmICh0bXBzby0+c29fbGFkZHIuc19hZGRyID09IHNvLT5zb19sYWRkci5zX2FkZHIgJiYK IAkJCQkJCSAgICB0bXBzby0+c29fbHBvcnQgPT0gbjIgJiYKIAkJCQkJCSAgICB0bXBzby0+c29f ZmFkZHIuc19hZGRyID09IHNvLT5zb19mYWRkci5zX2FkZHIgJiYKQEAgLTY4NSw3ICs2NDQsNyBA QAogCQkJCXNvX3Jjdi0+c2JfcnB0ciA9IHNvX3Jjdi0+c2JfZGF0YTsKIAkJCQlzb19yY3YtPnNi X3dwdHIgPSBzb19yY3YtPnNiX2RhdGEgKyBzb19yY3YtPnNiX2NjOwogCQkJfQotCQkJbV9mcmVl KG0pOworCQkJbV9mcmVlKHMsIG0pOwogCQkJcmV0dXJuIDA7CiAJCX0KIApAQCAtODQxLDggKzgw MCw4IEBACiAJCQkJbnMtPnNvX2Zwb3J0PWh0b25zKElQUE9SVF9SRVNFUlZFRC0xKTsgLyogVXNl IGEgZmFrZSBwb3J0LiAqLwogCiAJCQkJaWYgKG5zLT5zb19mYWRkci5zX2FkZHIgPT0gMCB8fAot CQkJCQlucy0+c29fZmFkZHIuc19hZGRyID09IGxvb3BiYWNrX2FkZHIuc19hZGRyKQotICAgICAg ICAgICAgICAgICAgbnMtPnNvX2ZhZGRyID0gYWxpYXNfYWRkcjsKKwkJCQkJbnMtPnNvX2ZhZGRy LnNfYWRkciA9PSBzLT5sb29wYmFja19hZGRyLnNfYWRkcikKKyAgICAgICAgICAgICAgICAgIG5z LT5zb19mYWRkciA9IHMtPmFsaWFzX2FkZHI7CiAKIAkJCQlucy0+c29faXB0b3MgPSB0Y3BfdG9z KG5zKTsKIAkJCQl0cCA9IHNvdG90Y3BjYihucyk7CkBAIC04NTcsMTIgKzgxNiwxMiBAQAogCiAg ICAgICAgICAgICAgICAgLypzb2lzZmNvbm5lY3RpbmcobnMpOyovCiAKLQkJCQl0Y3BzdGF0LnRj cHNfY29ubmF0dGVtcHQrKzsKKwkJCQlzLT50Y3BzdGF0LnRjcHNfY29ubmF0dGVtcHQrKzsKIAog CQkJCXRwLT50X3N0YXRlID0gVENQU19TWU5fU0VOVDsKIAkJCQl0cC0+dF90aW1lcltUQ1BUX0tF RVBdID0gVENQVFZfS0VFUF9JTklUOwotCQkJCXRwLT5pc3MgPSB0Y3BfaXNzOwotCQkJCXRjcF9p c3MgKz0gVENQX0lTU0lOQ1IvMjsKKwkJCQl0cC0+aXNzID0gcy0+dGNwX2lzczsKKwkJCQlzLT50 Y3BfaXNzICs9IFRDUF9JU1NJTkNSIC8gMjsKIAkJCQl0Y3Bfc2VuZHNlcWluaXQodHApOwogCQkJ CXRjcF9vdXRwdXQodHApOwogCQkJCXNvLT5leHRyYT1uczsKQEAgLTkzMSwxMSArODkwLDEzIEBA CiAJCQkgKiBiZWNhdXNlIGluIGxpbmVtb2RlLCB0aGUgbGluZSBpcyBhbHJlYWR5IGVjaG9lZAog CQkJICogWFhYIHR3byBvciBtb3JlIGNvbnRyb2wgY29ubmVjdGlvbnMgd29uJ3Qgd29yawogCQkJ ICovCi0JCQlpZiAoZG9fZWNobyA9PSAtMSkgewotCQkJCWlmIChtLT5tX2xlbiA9PSAxKSBkb19l Y2hvID0gMTsKLQkJCQllbHNlIGRvX2VjaG8gPSAwOworCQkJaWYgKHMtPmRvX2VjaG8gPT0gLTEp IHsKKwkJCQlpZiAobS0+bV9sZW4gPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHMtPmRvX2VjaG8gPSAxOworCQkJCWVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHMtPmRvX2VjaG8gPSAwOwogCQkJfQotCQkJaWYgKGRvX2VjaG8pIHsKKwkJ CWlmIChzLT5kb19lY2hvKSB7CiAJCQkgIHNiYXBwZW5kc2Ioc29fc25kLCBtKTsKIAkJCSAgbV9m cmVlKG0pOwogCQkJICB0Y3Bfb3V0cHV0KHNvdG90Y3BjYihzbykpOyAvKiBYWFggKi8KQEAgLTk5 MSw3ICs5NTIsNyBAQAogCQkJLyoKIAkJCSAqIE5lZWQgdG8gZW11bGF0ZSB0aGUgUE9SVCBjb21t YW5kCiAJCQkgKi8KLQkJCXggPSBzc2NhbmYoYnB0ciwgIk9SVCAlZCwlZCwlZCwlZCwlZCwlZFxy XG4lMjU2W15cMTc3XSIsCisJCQl4ID0gc3NjYW5mKGJwdHIsICJPUlQgJXUsJXUsJXUsJXUsJXUs JXVcclxuJTI1NlteXDE3N10iLAogCQkJCSAgICZuMSwgJm4yLCAmbjMsICZuNCwgJm41LCAmbjYs IGJ1ZmYpOwogCQkJaWYgKHggPCA2KQogCQkJICAgcmV0dXJuIDE7CkBAIC05OTksNyArOTYwLDcg QEAKIAkJCWxhZGRyID0gaHRvbmwoKG4xIDw8IDI0KSB8IChuMiA8PCAxNikgfCAobjMgPDwgOCkg fCAobjQpKTsKIAkJCWxwb3J0ID0gaHRvbnMoKG41IDw8IDgpIHwgKG42KSk7CiAKLQkJCWlmICgo c28gPSBzb2xpc3RlbigwLCBsYWRkciwgbHBvcnQsIFNTX0ZBQ0NFUFRPTkNFKSkgPT0gTlVMTCkK KwkJCWlmICgoc28gPSBzb2xpc3RlbihzLCAwLCBsYWRkciwgbHBvcnQsIFNTX0ZBQ0NFUFRPTkNF KSkgPT0gTlVMTCkKIAkJCSAgIHJldHVybiAxOwogCiAJCQluNiA9IG50b2hzKHNvLT5zb19mcG9y dCk7CkBAIC0xMDIyLDcgKzk4Myw3IEBACiAJCQkvKgogCQkJICogTmVlZCB0byBlbXVsYXRlIHRo ZSBQQVNWIHJlc3BvbnNlCiAJCQkgKi8KLQkJCXggPSBzc2NhbmYoYnB0ciwgIjI3IEVudGVyaW5n IFBhc3NpdmUgTW9kZSAoJWQsJWQsJWQsJWQsJWQsJWQpXHJcbiUyNTZbXlwxNzddIiwKKwkJCXgg PSBzc2NhbmYoYnB0ciwgIjI3IEVudGVyaW5nIFBhc3NpdmUgTW9kZSAoJXUsJXUsJXUsJXUsJXUs JXUpXHJcbiUyNTZbXlwxNzddIiwKIAkJCQkgICAmbjEsICZuMiwgJm4zLCAmbjQsICZuNSwgJm42 LCBidWZmKTsKIAkJCWlmICh4IDwgNikKIAkJCSAgIHJldHVybiAxOwpAQCAtMTAzMCw3ICs5OTEs NyBAQAogCQkJbGFkZHIgPSBodG9ubCgobjEgPDwgMjQpIHwgKG4yIDw8IDE2KSB8IChuMyA8PCA4 KSB8IChuNCkpOwogCQkJbHBvcnQgPSBodG9ucygobjUgPDwgOCkgfCAobjYpKTsKIAotCQkJaWYg KChzbyA9IHNvbGlzdGVuKDAsIGxhZGRyLCBscG9ydCwgU1NfRkFDQ0VQVE9OQ0UpKSA9PSBOVUxM KQorCQkJaWYgKChzbyA9IHNvbGlzdGVuKHMsIDAsIGxhZGRyLCBscG9ydCwgU1NfRkFDQ0VQVE9O Q0UpKSA9PSBOVUxMKQogCQkJICAgcmV0dXJuIDE7CiAKIAkJCW42ID0gbnRvaHMoc28tPnNvX2Zw b3J0KTsKQEAgLTEwNjksNyArMTAzMCw3IEBACiAJCQlscG9ydCArPSBtLT5tX2RhdGFbaV0gLSAn MCc7CiAJCX0KIAkJaWYgKG0tPm1fZGF0YVttLT5tX2xlbi0xXSA9PSAnXDAnICYmIGxwb3J0ICE9 IDAgJiYKLQkJICAgIChzbyA9IHNvbGlzdGVuKDAsIHNvLT5zb19sYWRkci5zX2FkZHIsIGh0b25z KGxwb3J0KSwgU1NfRkFDQ0VQVE9OQ0UpKSAhPSBOVUxMKQorCQkgICAgKHNvID0gc29saXN0ZW4o cywgMCwgc28tPnNvX2xhZGRyLnNfYWRkciwgaHRvbnMobHBvcnQpLCBTU19GQUNDRVBUT05DRSkp ICE9IE5VTEwpCiAJCQltLT5tX2xlbiA9IHNwcmludGYobS0+bV9kYXRhLCAiJWQiLCBudG9ocyhz by0+c29fZnBvcnQpKSsxOwogCQlyZXR1cm4gMTsKIApAQCAtMTA4Myw3ICsxMDQ0LDcgQEAKIAog CQkvKiBUaGUgJTI1NnMgaXMgZm9yIHRoZSBicm9rZW4gbUlSQyAqLwogCQlpZiAoc3NjYW5mKGJw dHIsICJEQ0MgQ0hBVCAlMjU2cyAldSAldSIsIGJ1ZmYsICZsYWRkciwgJmxwb3J0KSA9PSAzKSB7 Ci0JCQlpZiAoKHNvID0gc29saXN0ZW4oMCwgaHRvbmwobGFkZHIpLCBodG9ucyhscG9ydCksIFNT X0ZBQ0NFUFRPTkNFKSkgPT0gTlVMTCkKKwkJCWlmICgoc28gPSBzb2xpc3RlbihzLCAwLCBodG9u bChsYWRkciksIGh0b25zKGxwb3J0KSwgU1NfRkFDQ0VQVE9OQ0UpKSA9PSBOVUxMKQogCQkJCXJl dHVybiAxOwogCiAJCQltLT5tX2xlbiA9IGJwdHIgLSBtLT5tX2RhdGE7IC8qIEFkanVzdCBsZW5n dGggKi8KQEAgLTEwOTEsNyArMTA1Miw3IEBACiAJCQkgICAgICh1bnNpZ25lZCBsb25nKW50b2hs KHNvLT5zb19mYWRkci5zX2FkZHIpLAogCQkJICAgICBudG9ocyhzby0+c29fZnBvcnQpLCAxKTsK IAkJfSBlbHNlIGlmIChzc2NhbmYoYnB0ciwgIkRDQyBTRU5EICUyNTZzICV1ICV1ICV1IiwgYnVm ZiwgJmxhZGRyLCAmbHBvcnQsICZuMSkgPT0gNCkgewotCQkJaWYgKChzbyA9IHNvbGlzdGVuKDAs IGh0b25sKGxhZGRyKSwgaHRvbnMobHBvcnQpLCBTU19GQUNDRVBUT05DRSkpID09IE5VTEwpCisJ CQlpZiAoKHNvID0gc29saXN0ZW4ocywgMCwgaHRvbmwobGFkZHIpLCBodG9ucyhscG9ydCksIFNT X0ZBQ0NFUFRPTkNFKSkgPT0gTlVMTCkKIAkJCQlyZXR1cm4gMTsKIAogCQkJbS0+bV9sZW4gPSBi cHRyIC0gbS0+bV9kYXRhOyAvKiBBZGp1c3QgbGVuZ3RoICovCkBAIC0xMDk5LDcgKzEwNjAsNyBA QAogCQkJICAgICAgYnVmZiwgKHVuc2lnbmVkIGxvbmcpbnRvaGwoc28tPnNvX2ZhZGRyLnNfYWRk ciksCiAJCQkgICAgICBudG9ocyhzby0+c29fZnBvcnQpLCBuMSwgMSk7CiAJCX0gZWxzZSBpZiAo c3NjYW5mKGJwdHIsICJEQ0MgTU9WRSAlMjU2cyAldSAldSAldSIsIGJ1ZmYsICZsYWRkciwgJmxw b3J0LCAmbjEpID09IDQpIHsKLQkJCWlmICgoc28gPSBzb2xpc3RlbigwLCBodG9ubChsYWRkciks IGh0b25zKGxwb3J0KSwgU1NfRkFDQ0VQVE9OQ0UpKSA9PSBOVUxMKQorCQkJaWYgKChzbyA9IHNv bGlzdGVuKHMsIDAsIGh0b25sKGxhZGRyKSwgaHRvbnMobHBvcnQpLCBTU19GQUNDRVBUT05DRSkp ID09IE5VTEwpCiAJCQkJcmV0dXJuIDE7CiAKIAkJCW0tPm1fbGVuID0gYnB0ciAtIG0tPm1fZGF0 YTsgLyogQWRqdXN0IGxlbmd0aCAqLwpAQCAtMTEwOSw2ICsxMDcwLDExIEBACiAJCX0KIAkJcmV0 dXJuIDE7CiAKKyNpZiAxCisvL2RlZiBWQk9YCisgICAgICAgICAvKiogQHRvZG8gRGlzYWJsZWQg RU1VX1JFQUxBVURJTywgYmVjYXVzZSBpdCB1c2VzIGEgc3RhdGljIHZhcmlhYmxlLgorICAgICAg ICAgICogVGhpcyBpcyBub3QgbGVnYWwgd2hlbiBtb3JlIHRoYW4gb25lIHNsaXJwIGluc3RhbmNl IGlzIGFjdGl2ZS4gKi8KKyNlbHNlIC8qICFWQk9YICovCiAJIGNhc2UgRU1VX1JFQUxBVURJTzoK ICAgICAgICAgICAgICAgICAvKgogCQkgKiBSZWFsQXVkaW8gZW11bGF0aW9uIC0gSlAuIFdlIG11 c3QgdHJ5IHRvIHBhcnNlIHRoZSBpbmNvbWluZwpAQCAtMTIzNCw2ICsxMjAwLDcgQEAKIAkJCXJh Kys7CiAJCX0KIAkJcmV0dXJuIDE7CisjZW5kaWYgLyogIVZCT1ggKi8KIAogCSBkZWZhdWx0Ogog CQkvKiBPb29wcywgbm90IGVtdWxhdGVkLCB3b24ndCBjYWxsIHRjcF9lbXUgYWdhaW4gKi8KQEAg LTEyNDgsOCArMTIxNSw3IEBACiAgKiByZXR1cm4gMiBpZiB0aGlzIGlzIGEgY29tbWFuZC1saW5l IGNvbm5lY3Rpb24KICAqLwogaW50Ci10Y3BfY3RsKHNvKQotCXN0cnVjdCBzb2NrZXQgKnNvOwor dGNwX2N0bChzbGlycF9zdGF0ZV90ICpzLCBzdHJ1Y3Qgc29ja2V0ICpzbykKIHsKIAlzdHJ1Y3Qg c2J1ZiAqc2IgPSAmc28tPnNvX3NuZDsKIAlpbnQgY29tbWFuZDsKQEAgLTEyNzgsNyArMTI0NCw3 IEBACiAJCS8qCiAJCSAqIENoZWNrIGlmIGl0J3MgcHR5X2V4ZWMKIAkJICovCi0JCWZvciAoZXhf cHRyID0gZXhlY19saXN0OyBleF9wdHI7IGV4X3B0ciA9IGV4X3B0ci0+ZXhfbmV4dCkgeworCQlm b3IgKGV4X3B0ciA9IHMtPmV4ZWNfbGlzdDsgZXhfcHRyOyBleF9wdHIgPSBleF9wdHItPmV4X25l eHQpIHsKIAkJCWlmIChleF9wdHItPmV4X2Zwb3J0ID09IHNvLT5zb19mcG9ydCAmJgogCQkJICAg IGNvbW1hbmQgPT0gZXhfcHRyLT5leF9hZGRyKSB7CiAJCQkJZG9fcHR5ID0gZXhfcHRyLT5leF9w dHk7CkBAIC0xMzAwLDExICsxMjY2LDExIEBACiAKIAlkb19leGVjOgogCQlERUJVR19NSVNDKChk ZmQsICIgZXhlY3V0aW5nICVzIFxuIixleF9wdHItPmV4X2V4ZWMpKTsKLQkJcmV0dXJuKGZvcmtf ZXhlYyhzbywgZXhfcHRyLT5leF9leGVjLCBkb19wdHkpKTsKKwkJcmV0dXJuKGZvcmtfZXhlYyhz LCBzbywgZXhfcHRyLT5leF9leGVjLCBkb19wdHkpKTsKIAogI2lmIDAKIAljYXNlIENUTF9DTUQ6 Ci0JICAgZm9yICh0bXBzbyA9IHRjYi5zb19uZXh0OyB0bXBzbyAhPSAmdGNiOyB0bXBzbyA9IHRt cHNvLT5zb19uZXh0KSB7CisJICAgZm9yICh0bXBzbyA9IHMtPnRjYi5zb19uZXh0OyB0bXBzbyAh PSAmcy0+dGNiOyB0bXBzbyA9IHRtcHNvLT5zb19uZXh0KSB7CiAJICAgICBpZiAodG1wc28tPnNv X2VtdSA9PSBFTVVfQ1RMICYmCiAJCSAhKHRtcHNvLT5zb190Y3BjYj8KIAkJICAgKHRtcHNvLT5z b190Y3BjYi0+dF9zdGF0ZSAmIChUQ1BTX1RJTUVfV0FJVHxUQ1BTX0xBU1RfQUNLKSkKQEAgLTEz MTksNyArMTI4NSw3IEBACiAJICAgY3RsX3Bhc3N3b3JkX29rID0gMDsKIAkgICBzYi0+c2JfY2Mg PSBzcHJpbnRmKHNiLT5zYl93cHRyLCAiU2xpcnAgY29tbWFuZC1saW5lIHJlYWR5ICh0eXBlIFwi aGVscFwiIGZvciBoZWxwKS5cclxuU2xpcnA+ICIpOwogCSAgIHNiLT5zYl93cHRyICs9IHNiLT5z Yl9jYzsKLQkgICBkb19lY2hvPS0xOworCSAgIHMtPmRvX2VjaG8gPSAtMTsKIAkgICByZXR1cm4o Mik7CiAjZW5kaWYKIAl9CkluZGV4OiBxZW11L3NsaXJwL3RjcF90aW1lci5jCj09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K LS0tIHFlbXUub3JpZy9zbGlycC90Y3BfdGltZXIuYwkyMDA3LTEwLTIwIDA3OjMzOjM4LjAwMDAw MDAwMCArMDAwMAorKysgcWVtdS9zbGlycC90Y3BfdGltZXIuYwkyMDA3LTEwLTIwIDEzOjUwOjIw LjAwMDAwMDAwMCArMDAwMApAQCAtMzYsMzQgKzM2LDI5IEBACiAKICNpbmNsdWRlIDxzbGlycC5o PgogCi1pbnQJdGNwX2tlZXBpZGxlID0gVENQVFZfS0VFUF9JRExFOwotaW50CXRjcF9rZWVwaW50 dmwgPSBUQ1BUVl9LRUVQSU5UVkw7Ci1pbnQJdGNwX21heGlkbGU7Ci1pbnQJc29fb3B0aW9ucyA9 IERPX0tFRVBBTElWRTsKLQotc3RydWN0ICAgdGNwc3RhdCB0Y3BzdGF0OyAgICAgICAgLyogdGNw IHN0YXRpc3RpY3MgKi8KLXVfaW50MzJfdCAgICAgICAgdGNwX25vdzsgICAgICAgICAgICAgICAg LyogZm9yIFJGQyAxMzIzIHRpbWVzdGFtcHMgKi8KK3N0YXRpYyBzdHJ1Y3QgdGNwY2IgKnRjcF90 aW1lcnMoc2xpcnBfc3RhdGVfdCAqcywgcmVnaXN0ZXIgc3RydWN0IHRjcGNiICp0cCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRpbWVyKTsKIAogLyoKICAqIEZhc3QgdGlt ZW91dCByb3V0aW5lIGZvciBwcm9jZXNzaW5nIGRlbGF5ZWQgYWNrcwogICovCiB2b2lkCi10Y3Bf ZmFzdHRpbW8oKQordGNwX2Zhc3R0aW1vKHNsaXJwX3N0YXRlX3QgKnMpCiB7CiAJcmVnaXN0ZXIg c3RydWN0IHNvY2tldCAqc287CiAJcmVnaXN0ZXIgc3RydWN0IHRjcGNiICp0cDsKIAogCURFQlVH X0NBTEwoInRjcF9mYXN0dGltbyIpOwogCi0Jc28gPSB0Y2Iuc29fbmV4dDsKKwlzbyA9IHMtPnRj Yi5zb19uZXh0OwogCWlmIChzbykKLQlmb3IgKDsgc28gIT0gJnRjYjsgc28gPSBzby0+c29fbmV4 dCkKKwlmb3IgKDsgc28gIT0gJnMtPnRjYjsgc28gPSBzby0+c29fbmV4dCkKIAkJaWYgKCh0cCA9 IChzdHJ1Y3QgdGNwY2IgKilzby0+c29fdGNwY2IpICYmCiAJCSAgICAodHAtPnRfZmxhZ3MgJiBU Rl9ERUxBQ0spKSB7CiAJCQl0cC0+dF9mbGFncyAmPSB+VEZfREVMQUNLOwogCQkJdHAtPnRfZmxh Z3MgfD0gVEZfQUNLTk9XOwotCQkJdGNwc3RhdC50Y3BzX2RlbGFjaysrOwotCQkJKHZvaWQpIHRj cF9vdXRwdXQodHApOworCQkJcy0+dGNwc3RhdC50Y3BzX2RlbGFjaysrOworCQkJKHZvaWQpIHRj cF9vdXRwdXQocywgdHApOwogCQl9CiB9CiAKQEAgLTczLDcgKzY4LDcgQEAKICAqIGNhdXNlcyBm aW5pdGUgc3RhdGUgbWFjaGluZSBhY3Rpb25zIGlmIHRpbWVycyBleHBpcmUuCiAgKi8KIHZvaWQK LXRjcF9zbG93dGltbygpCit0Y3Bfc2xvd3RpbW8oc2xpcnBfc3RhdGVfdCAqcykKIHsKIAlyZWdp c3RlciBzdHJ1Y3Qgc29ja2V0ICppcCwgKmlwbnh0OwogCXJlZ2lzdGVyIHN0cnVjdCB0Y3BjYiAq dHA7CkBAIC04MSwyMSArNzYsMjAgQEAKIAogCURFQlVHX0NBTEwoInRjcF9zbG93dGltbyIpOwog Ci0JdGNwX21heGlkbGUgPSBUQ1BUVl9LRUVQQ05UICogdGNwX2tlZXBpbnR2bDsKIAkvKgogCSAq IFNlYXJjaCB0aHJvdWdoIHRjYidzIGFuZCB1cGRhdGUgYWN0aXZlIHRpbWVycy4KIAkgKi8KLQlp cCA9IHRjYi5zb19uZXh0OworCWlwID0gcy0+dGNiLnNvX25leHQ7CiAJaWYgKGlwID09IDApCiAJ ICAgcmV0dXJuOwotCWZvciAoOyBpcCAhPSAmdGNiOyBpcCA9IGlwbnh0KSB7CisJZm9yICg7IGlw ICE9ICZzLT50Y2I7IGlwID0gaXBueHQpIHsKIAkJaXBueHQgPSBpcC0+c29fbmV4dDsKIAkJdHAg PSBzb3RvdGNwY2IoaXApOwogCQlpZiAodHAgPT0gMCkKIAkJCWNvbnRpbnVlOwogCQlmb3IgKGkg PSAwOyBpIDwgVENQVF9OVElNRVJTOyBpKyspIHsKIAkJCWlmICh0cC0+dF90aW1lcltpXSAmJiAt LXRwLT50X3RpbWVyW2ldID09IDApIHsKLQkJCQl0Y3BfdGltZXJzKHRwLGkpOworCQkJCXRjcF90 aW1lcnMocywgdHAsaSk7CiAJCQkJaWYgKGlwbnh0LT5zb19wcmV2ICE9IGlwKQogCQkJCQlnb3Rv IHRwZ29uZTsKIAkJCX0KQEAgLTEwNiwyMCArMTAwLDE5IEBACiB0cGdvbmU6CiAJCTsKIAl9Ci0J dGNwX2lzcyArPSBUQ1BfSVNTSU5DUi9QUl9TTE9XSFo7CQkvKiBpbmNyZW1lbnQgaXNzICovCisJ cy0+dGNwX2lzcyArPSBUQ1BfSVNTSU5DUiAvIFBSX1NMT1dIWjsJCS8qIGluY3JlbWVudCBpc3Mg Ki8KICNpZmRlZiBUQ1BfQ09NUEFUXzQyCi0JaWYgKChpbnQpdGNwX2lzcyA8IDApCi0JCXRjcF9p c3MgPSAwOwkJCQkvKiBYWFggKi8KKwlpZiAoKGludClzLT50Y3BfaXNzIDwgMCkKKwkJcy0+dGNw X2lzcyA9IDA7CQkJCS8qIFhYWCAqLwogI2VuZGlmCi0JdGNwX25vdysrOwkJCQkJLyogZm9yIHRp bWVzdGFtcHMgKi8KKwlzLT50Y3Bfbm93Kys7CQkJCQkvKiBmb3IgdGltZXN0YW1wcyAqLwogfQog CiAvKgogICogQ2FuY2VsIGFsbCB0aW1lcnMgZm9yIFRDUCB0cC4KICAqLwogdm9pZAotdGNwX2Nh bmNlbHRpbWVycyh0cCkKLQlzdHJ1Y3QgdGNwY2IgKnRwOwordGNwX2NhbmNlbHRpbWVycyhzdHJ1 Y3QgdGNwY2IgKnRwKQogewogCXJlZ2lzdGVyIGludCBpOwogCkBAIC0xMjcsMTYgKzEyMCwxNCBA QAogCQl0cC0+dF90aW1lcltpXSA9IDA7CiB9CiAKLWludAl0Y3BfYmFja29mZltUQ1BfTUFYUlhU U0hJRlQgKyAxXSA9Citjb25zdCBpbnQgdGNwX2JhY2tvZmZbVENQX01BWFJYVFNISUZUICsgMV0g PQogICAgeyAxLCAyLCA0LCA4LCAxNiwgMzIsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0IH07 CiAKIC8qCiAgKiBUQ1AgdGltZXIgcHJvY2Vzc2luZy4KICAqLwotc3RydWN0IHRjcGNiICoKLXRj cF90aW1lcnModHAsIHRpbWVyKQotCXJlZ2lzdGVyIHN0cnVjdCB0Y3BjYiAqdHA7Ci0JaW50IHRp bWVyOworc3RhdGljIHN0cnVjdCB0Y3BjYiAqCit0Y3BfdGltZXJzKHNsaXJwX3N0YXRlX3QgKnMs IHJlZ2lzdGVyIHN0cnVjdCB0Y3BjYiAqdHAsIGludCB0aW1lcikKIHsKIAlyZWdpc3RlciBpbnQg cmV4bXQ7CiAKQEAgLTE1MiwxMCArMTQzLDEwIEBACiAJICovCiAJY2FzZSBUQ1BUXzJNU0w6CiAJ CWlmICh0cC0+dF9zdGF0ZSAhPSBUQ1BTX1RJTUVfV0FJVCAmJgotCQkgICAgdHAtPnRfaWRsZSA8 PSB0Y3BfbWF4aWRsZSkKLQkJCXRwLT50X3RpbWVyW1RDUFRfMk1TTF0gPSB0Y3Bfa2VlcGludHZs OworCQkgICAgdHAtPnRfaWRsZSA8PSBUQ1BfTUFYSURMRSkKKwkJCXRwLT50X3RpbWVyW1RDUFRf Mk1TTF0gPSBUQ1BUVl9LRUVQSU5UVkw7CiAJCWVsc2UKLQkJCXRwID0gdGNwX2Nsb3NlKHRwKTsK KwkJCXRwID0gdGNwX2Nsb3NlKHMsIHRwKTsKIAkJYnJlYWs7CiAKIAkvKgpAQCAtMTkyLDggKzE4 Myw4IEBACiAJCQkJICogV2UgdHJpZWQgb3VyIGJlc3QsIG5vdyB0aGUgY29ubmVjdGlvbiBtdXN0 IGRpZSEKIAkJCQkgKi8KIAkJCQl0cC0+dF9yeHRzaGlmdCA9IFRDUF9NQVhSWFRTSElGVDsKLQkJ CQl0Y3BzdGF0LnRjcHNfdGltZW91dGRyb3ArKzsKLQkJCQl0cCA9IHRjcF9kcm9wKHRwLCB0cC0+ dF9zb2Z0ZXJyb3IpOworCQkJCXMtPnRjcHN0YXQudGNwc190aW1lb3V0ZHJvcCsrOworCQkJCXRw ID0gdGNwX2Ryb3AocywgdHAsIHRwLT50X3NvZnRlcnJvcik7CiAJCQkJLyogdHAtPnRfc29mdGVy cm9yIDogRVRJTUVET1VUKTsgKi8gLyogWFhYICovCiAJCQkJcmV0dXJuICh0cCk7IC8qIFhYWCAq LwogCQkJfQpAQCAtMjA0LDcgKzE5NSw3IEBACiAJCQkgKi8KIAkJCXRwLT50X3J4dHNoaWZ0ID0g NjsKIAkJfQotCQl0Y3BzdGF0LnRjcHNfcmV4bXR0aW1lbysrOworCQlzLT50Y3BzdGF0LnRjcHNf cmV4bXR0aW1lbysrOwogCQlyZXhtdCA9IFRDUF9SRVhNVFZBTCh0cCkgKiB0Y3BfYmFja29mZlt0 cC0+dF9yeHRzaGlmdF07CiAJCVRDUFRfUkFOR0VTRVQodHAtPnRfcnh0Y3VyLCByZXhtdCwKIAkJ ICAgIChzaG9ydCl0cC0+dF9ydHRtaW4sIFRDUFRWX1JFWE1UTUFYKTsgLyogWFhYICovCkBAIC0y NTksNyArMjUwLDcgQEAKIAkJdHAtPnNuZF9zc3RocmVzaCA9IHdpbiAqIHRwLT50X21heHNlZzsK IAkJdHAtPnRfZHVwYWNrcyA9IDA7CiAJCX0KLQkJKHZvaWQpIHRjcF9vdXRwdXQodHApOworCQko dm9pZCkgdGNwX291dHB1dChzLCB0cCk7CiAJCWJyZWFrOwogCiAJLyoKQEAgLTI2NywxMCArMjU4 LDEwIEBACiAJICogRm9yY2UgYSBieXRlIHRvIGJlIG91dHB1dCwgaWYgcG9zc2libGUuCiAJICov CiAJY2FzZSBUQ1BUX1BFUlNJU1Q6Ci0JCXRjcHN0YXQudGNwc19wZXJzaXN0dGltZW8rKzsKKwkJ cy0+dGNwc3RhdC50Y3BzX3BlcnNpc3R0aW1lbysrOwogCQl0Y3Bfc2V0cGVyc2lzdCh0cCk7CiAJ CXRwLT50X2ZvcmNlID0gMTsKLQkJKHZvaWQpIHRjcF9vdXRwdXQodHApOworCQkodm9pZCkgdGNw X291dHB1dChzLCB0cCk7CiAJCXRwLT50X2ZvcmNlID0gMDsKIAkJYnJlYWs7CiAKQEAgLTI3OSwx MyArMjcwLDEzIEBACiAJICogb3IgZHJvcCBjb25uZWN0aW9uIGlmIGlkbGUgZm9yIHRvbyBsb25n LgogCSAqLwogCWNhc2UgVENQVF9LRUVQOgotCQl0Y3BzdGF0LnRjcHNfa2VlcHRpbWVvKys7CisJ CXMtPnRjcHN0YXQudGNwc19rZWVwdGltZW8rKzsKIAkJaWYgKHRwLT50X3N0YXRlIDwgVENQU19F U1RBQkxJU0hFRCkKIAkJCWdvdG8gZHJvcGl0OwogCiAvKgkJaWYgKHRwLT50X3NvY2tldC0+c29f b3B0aW9ucyAmIFNPX0tFRVBBTElWRSAmJiAqLwotCQlpZiAoKHNvX29wdGlvbnMpICYmIHRwLT50 X3N0YXRlIDw9IFRDUFNfQ0xPU0VfV0FJVCkgewotCQkgICAgCWlmICh0cC0+dF9pZGxlID49IHRj cF9rZWVwaWRsZSArIHRjcF9tYXhpZGxlKQorCQlpZiAoKFNPX09QVElPTlMpICYmIHRwLT50X3N0 YXRlIDw9IFRDUFNfQ0xPU0VfV0FJVCkgeworCQkgICAgCWlmICh0cC0+dF9pZGxlID49IFRDUFRW X0tFRVBfSURMRSArIFRDUF9NQVhJRExFKQogCQkJCWdvdG8gZHJvcGl0OwogCQkJLyoKIAkJCSAq IFNlbmQgYSBwYWNrZXQgZGVzaWduZWQgdG8gZm9yY2UgYSByZXNwb25zZQpAQCAtMjk5LDcgKzI5 MCw3IEBACiAJCQkgKiBieSB0aGUgcHJvdG9jb2wgc3BlYywgdGhpcyByZXF1aXJlcyB0aGUKIAkJ CSAqIGNvcnJlc3BvbmRlbnQgVENQIHRvIHJlc3BvbmQuCiAJCQkgKi8KLQkJCXRjcHN0YXQudGNw c19rZWVwcHJvYmUrKzsKKwkJCXMtPnRjcHN0YXQudGNwc19rZWVwcHJvYmUrKzsKICNpZmRlZiBU Q1BfQ09NUEFUXzQyCiAJCQkvKgogCQkJICogVGhlIGtlZXBhbGl2ZSBwYWNrZXQgbXVzdCBoYXZl IG5vbnplcm8gbGVuZ3RoCkBAIC0zMDgsMTcgKzI5OSwxNyBAQAogCQkJdGNwX3Jlc3BvbmQodHAs ICZ0cC0+dF90ZW1wbGF0ZSwgKHN0cnVjdCBtYnVmICopTlVMTCwKIAkJCSAgICB0cC0+cmN2X254 dCAtIDEsIHRwLT5zbmRfdW5hIC0gMSwgMCk7CiAjZWxzZQotCQkJdGNwX3Jlc3BvbmQodHAsICZ0 cC0+dF90ZW1wbGF0ZSwgKHN0cnVjdCBtYnVmICopTlVMTCwKKwkJCXRjcF9yZXNwb25kKHMsIHRw LCAmdHAtPnRfdGVtcGxhdGUsIChzdHJ1Y3QgbWJ1ZiAqKU5VTEwsCiAJCQkgICAgdHAtPnJjdl9u eHQsIHRwLT5zbmRfdW5hIC0gMSwgMCk7CiAjZW5kaWYKLQkJCXRwLT50X3RpbWVyW1RDUFRfS0VF UF0gPSB0Y3Bfa2VlcGludHZsOworCQkJdHAtPnRfdGltZXJbVENQVF9LRUVQXSA9IFRDUFRWX0tF RVBJTlRWTDsKIAkJfSBlbHNlCi0JCQl0cC0+dF90aW1lcltUQ1BUX0tFRVBdID0gdGNwX2tlZXBp ZGxlOworCQkJdHAtPnRfdGltZXJbVENQVF9LRUVQXSA9IFRDUFRWX0tFRVBfSURMRTsKIAkJYnJl YWs7CiAKIAlkcm9waXQ6Ci0JCXRjcHN0YXQudGNwc19rZWVwZHJvcHMrKzsKLQkJdHAgPSB0Y3Bf ZHJvcCh0cCwgMCk7IC8qIEVUSU1FRE9VVCk7ICovCisJCXMtPnRjcHN0YXQudGNwc19rZWVwZHJv cHMrKzsKKwkJdHAgPSB0Y3BfZHJvcChzLCB0cCwgMCk7IC8qIEVUSU1FRE9VVCk7ICovCiAJCWJy ZWFrOwogCX0KIApJbmRleDogcWVtdS9zbGlycC90Y3BfdGltZXIuaAo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBx ZW11Lm9yaWcvc2xpcnAvdGNwX3RpbWVyLmgJMjAwNy0xMC0yMCAwNzozMzozOC4wMDAwMDAwMDAg KzAwMDAKKysrIHFlbXUvc2xpcnAvdGNwX3RpbWVyLmgJMjAwNy0xMC0yMCAxNDo1Njo0MS4wMDAw MDAwMDAgKzAwMDAKQEAgLTEwOCw2ICsxMDgsOSBAQAogI2RlZmluZQlUQ1BfTElOR0VSVElNRQkx MjAJCQkvKiBsaW5nZXIgYXQgbW9zdCAyIG1pbnV0ZXMgKi8KIAogI2RlZmluZSBUQ1BfTUFYUlhU U0hJRlQgMTIgICAgICAgICAgICAgICAgICAgICAgLyogbWF4aW11bSByZXRyYW5zbWl0cyAqLwor LyoqIE1heGltdW0gaWRsZSB0aW1lIGJlZm9yZSB0aW1pbmcgb3V0IGEgY29ubmVjdGlvbi4gKi8K KyNkZWZpbmUgVENQX01BWElETEUgKFRDUFRWX0tFRVBDTlQgKiBUQ1BUVl9LRUVQSU5UVkwpCisK IAogCiAjaWZkZWYJVENQVElNRVJTCkBAIC0xMjYsMTcgKzEyOSwxMiBAQAogCQkodHYpID0gKHR2 bWF4KTsgXAogfQogCi1leHRlcm4gaW50IHRjcF9rZWVwaWRsZTsJCS8qIHRpbWUgYmVmb3JlIGtl ZXBhbGl2ZSBwcm9iZXMgYmVnaW4gKi8KLWV4dGVybiBpbnQgdGNwX2tlZXBpbnR2bDsJCS8qIHRp bWUgYmV0d2VlbiBrZWVwYWxpdmUgcHJvYmVzICovCi1leHRlcm4gaW50IHRjcF9tYXhpZGxlOwkJ CS8qIHRpbWUgdG8gZHJvcCBhZnRlciBzdGFydGluZyBwcm9iZXMgKi8KLWV4dGVybiBpbnQgdGNw X3R0bDsJCQkvKiB0aW1lIHRvIGxpdmUgZm9yIFRDUCBzZWdzICovCi1leHRlcm4gaW50IHRjcF9i YWNrb2ZmW107CitleHRlcm4gY29uc3QgaW50IHRjcF9iYWNrb2ZmW107CiAKIHN0cnVjdCB0Y3Bj YjsKIAotdm9pZCB0Y3BfZmFzdHRpbW8gX1AoKHZvaWQpKTsKLXZvaWQgdGNwX3Nsb3d0aW1vIF9Q KCh2b2lkKSk7Cit2b2lkIHRjcF9mYXN0dGltbyhzbGlycF9zdGF0ZV90ICpzKTsKK3ZvaWQgdGNw X3Nsb3d0aW1vKHNsaXJwX3N0YXRlX3QgKnMpOwogdm9pZCB0Y3BfY2FuY2VsdGltZXJzIF9QKChz dHJ1Y3QgdGNwY2IgKikpOwotc3RydWN0IHRjcGNiICogdGNwX3RpbWVycyBfUCgocmVnaXN0ZXIg c3RydWN0IHRjcGNiICosIGludCkpOwogCiAjZW5kaWYKSW5kZXg6IHFlbXUvc2xpcnAvdGNwX3Zh ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KLS0tIHFlbXUub3JpZy9zbGlycC90Y3BfdmFyLmgJMjAwNy0xMC0yMCAw NzozMzozOC4wMDAwMDAwMDAgKzAwMDAKKysrIHFlbXUvc2xpcnAvdGNwX3Zhci5oCTIwMDctMTAt MjAgMTc6MTA6NTQuMDAwMDAwMDAwICswMDAwCkBAIC00NSw3ICs0NSw2IEBACiAjZWxzZQogIHR5 cGVkZWYgdV9pbnQzMl90IHRjcGlwaGRycF8zMjsKICNlbmRpZgotCiAvKgogICogVGNwIGNvbnRy b2wgYmxvY2ssIG9uZSBwZXIgdGNwOyBmaWVsZHM6CiAgKi8KQEAgLTE4Myw3ICsxODIsMTAgQEAK ICNlbHNlCiB0eXBlZGVmIHVfaW50MzJfdCBtYnVmcF8zMjsKICNlbmRpZgotI2RlZmluZSBSRUFT U19NQlVGKHRpKSAoKihtYnVmcF8zMiAqKSYoKHRpKS0+dGlfdCkpCisvKiBWQm94IGNoYW5nZSB3 aGljaCBpcyB0b28gbXVjaCBib3RoZXIgdG8gI2lmZGVmICovCisjIGRlZmluZSBSRUFTU19NQlVG X1NFVCh0aSwgcCkgKCoobWJ1ZnBfMzIgKikmKCh0aSktPnRpX3QpKSA9IChwKQorIyBkZWZpbmUg UkVBU1NfTUJVRl9HRVQodGkpICAgICgoc3RydWN0IG1idWYgKikoKihtYnVmcF8zMiAqKSYoKHRp KS0+dGlfdCkpKQorLyojZGVmaW5lIFJFQVNTX01CVUYodGkpICgqKG1idWZwXzMyICopJigodGkp LT50aV90KSkgLSByZXBsYWNlZCBieSBSRUFTU19NQlVGX0dFVC9TRVQgKi8KIAogLyoKICAqIFRD UCBzdGF0aXN0aWNzLgpAQCAtMjQ2LDcgKzI0OCw1IEBACiAJdV9sb25nCXRjcHNfZGlkbnV0dGlu OwkJLyogVGltZXMgdGNwX291dHB1dCBkaWRuJ3QgZG8gYW55dGhpbmcgWFhYICovCiB9OwogCi1l eHRlcm4gc3RydWN0CXRjcHN0YXQgdGNwc3RhdDsJLyogdGNwIHN0YXRpc3RpY3MgKi8KLWV4dGVy biB1X2ludDMyX3QJdGNwX25vdzsJCS8qIGZvciBSRkMgMTMyMyB0aW1lc3RhbXBzICovCiAKICNl bmRpZgpJbmRleDogcWVtdS9zbGlycC90ZnRwLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcWVtdS5vcmlnL3Ns aXJwL3RmdHAuYwkyMDA3LTEwLTIwIDA3OjMzOjM4LjAwMDAwMDAwMCArMDAwMAorKysgcWVtdS9z bGlycC90ZnRwLmMJMjAwNy0xMC0yMCAwOTo1NToxOS4wMDAwMDAwMDAgKzAwMDAKQEAgLTI0LDIz ICsyNCwxMCBAQAogCiAjaW5jbHVkZSA8c2xpcnAuaD4KIAotc3RydWN0IHRmdHBfc2Vzc2lvbiB7 Ci0gICAgaW50IGluX3VzZTsKLSAgICB1bnNpZ25lZCBjaGFyIGZpbGVuYW1lW1RGVFBfRklMRU5B TUVfTUFYXTsKIAotICAgIHN0cnVjdCBpbl9hZGRyIGNsaWVudF9pcDsKLSAgICB1X2ludDE2X3Qg Y2xpZW50X3BvcnQ7Ci0KLSAgICBpbnQgdGltZXN0YW1wOwotfTsKLQotc3RydWN0IHRmdHBfc2Vz c2lvbiB0ZnRwX3Nlc3Npb25zW1RGVFBfU0VTU0lPTlNfTUFYXTsKLQotY29uc3QgY2hhciAqdGZ0 cF9wcmVmaXg7Ci0KLXN0YXRpYyB2b2lkIHRmdHBfc2Vzc2lvbl91cGRhdGUoc3RydWN0IHRmdHBf c2Vzc2lvbiAqc3B0KQorc3RhdGljIHZvaWQgdGZ0cF9zZXNzaW9uX3VwZGF0ZShzbGlycF9zdGF0 ZV90ICpzLCBzdHJ1Y3QgdGZ0cF9zZXNzaW9uICpzcHQpCiB7Ci0gICAgc3B0LT50aW1lc3RhbXAg PSBjdXJ0aW1lOworICAgIHNwdC0+dGltZXN0YW1wID0gcy0+Y3VydGltZTsKICAgICBzcHQtPmlu X3VzZSA9IDE7CiB9CiAKQEAgLTQ5LDE5ICszNiwxOSBAQAogICBzcHQtPmluX3VzZSA9IDA7CiB9 CiAKLXN0YXRpYyBpbnQgdGZ0cF9zZXNzaW9uX2FsbG9jYXRlKHN0cnVjdCB0ZnRwX3QgKnRwKQor c3RhdGljIGludCB0ZnRwX3Nlc3Npb25fYWxsb2NhdGUoc2xpcnBfc3RhdGVfdCAqcywgc3RydWN0 IHRmdHBfdCAqdHApCiB7CiAgIHN0cnVjdCB0ZnRwX3Nlc3Npb24gKnNwdDsKICAgaW50IGs7CiAK ICAgZm9yIChrID0gMDsgayA8IFRGVFBfU0VTU0lPTlNfTUFYOyBrKyspIHsKLSAgICBzcHQgPSAm dGZ0cF9zZXNzaW9uc1trXTsKKyAgICBzcHQgPSAmcy0+dGZ0cF9zZXNzaW9uc1trXTsKIAogICAg IGlmICghc3B0LT5pbl91c2UpCiAgICAgICAgIGdvdG8gZm91bmQ7CiAKICAgICAvKiBzZXNzaW9u cyB0aW1lIG91dCBhZnRlciA1IGluYWN0aXZlIHNlY29uZHMgKi8KLSAgICBpZiAoKGludCkoY3Vy dGltZSAtIHNwdC0+dGltZXN0YW1wKSA+IDUwMDApCisgICAgaWYgKChpbnQpKHMtPmN1cnRpbWUg LSBzcHQtPnRpbWVzdGFtcCkgPiA1MDAwKQogICAgICAgICBnb3RvIGZvdW5kOwogICB9CiAKQEAg LTcyLDE4ICs1OSwxOCBAQAogICBtZW1jcHkoJnNwdC0+Y2xpZW50X2lwLCAmdHAtPmlwLmlwX3Ny Yywgc2l6ZW9mKHNwdC0+Y2xpZW50X2lwKSk7CiAgIHNwdC0+Y2xpZW50X3BvcnQgPSB0cC0+dWRw LnVoX3Nwb3J0OwogCi0gIHRmdHBfc2Vzc2lvbl91cGRhdGUoc3B0KTsKKyAgdGZ0cF9zZXNzaW9u X3VwZGF0ZShzLCBzcHQpOwogCiAgIHJldHVybiBrOwogfQogCi1zdGF0aWMgaW50IHRmdHBfc2Vz c2lvbl9maW5kKHN0cnVjdCB0ZnRwX3QgKnRwKQorc3RhdGljIGludCB0ZnRwX3Nlc3Npb25fZmlu ZChzbGlycF9zdGF0ZV90ICpzLCBzdHJ1Y3QgdGZ0cF90ICp0cCkKIHsKICAgc3RydWN0IHRmdHBf c2Vzc2lvbiAqc3B0OwogICBpbnQgazsKIAogICBmb3IgKGsgPSAwOyBrIDwgVEZUUF9TRVNTSU9O U19NQVg7IGsrKykgewotICAgIHNwdCA9ICZ0ZnRwX3Nlc3Npb25zW2tdOworICAgIHNwdCA9ICZz LT50ZnRwX3Nlc3Npb25zW2tdOwogCiAgICAgaWYgKHNwdC0+aW5fdXNlKSB7CiAgICAgICBpZiAo IW1lbWNtcCgmc3B0LT5jbGllbnRfaXAsICZ0cC0+aXAuaXBfc3JjLCBzaXplb2Yoc3B0LT5jbGll bnRfaXApKSkgewpAQCAtOTcsNyArODQsNyBAQAogICByZXR1cm4gLTE7CiB9CiAKLXN0YXRpYyBp bnQgdGZ0cF9yZWFkX2RhdGEoc3RydWN0IHRmdHBfc2Vzc2lvbiAqc3B0LCB1X2ludDE2X3QgYmxv Y2tfbnIsCitzdGF0aWMgaW50IHRmdHBfcmVhZF9kYXRhKHNsaXJwX3N0YXRlX3QgKnMsIHN0cnVj dCB0ZnRwX3Nlc3Npb24gKnNwdCwgdV9pbnQxNl90IGJsb2NrX25yLAogCQkJICB1X2ludDhfdCAq YnVmLCBpbnQgbGVuKQogewogICBpbnQgZmQ7CkBAIC0xMDYsNyArOTMsNyBAQAogICBpbnQgbjsK IAogICBuID0gc25wcmludGYoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgIiVzLyVzIiwKLQkgICAg ICAgdGZ0cF9wcmVmaXgsIHNwdC0+ZmlsZW5hbWUpOworCSAgICAgICBzLT50ZnRwX3ByZWZpeCwg c3B0LT5maWxlbmFtZSk7CiAgIGlmIChuID49IHNpemVvZihidWZmZXIpKQogICAgIHJldHVybiAt MTsKIApAQCAtMTI3LDcgKzExNCw4IEBACiAgIHJldHVybiBieXRlc19yZWFkOwogfQogCi1zdGF0 aWMgaW50IHRmdHBfc2VuZF9vYWNrKHN0cnVjdCB0ZnRwX3Nlc3Npb24gKnNwdCwKK3N0YXRpYyBp bnQgdGZ0cF9zZW5kX29hY2soc2xpcnBfc3RhdGVfdCAqcywKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgc3RydWN0IHRmdHBfc2Vzc2lvbiAqc3B0LAogICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBjaGFyICprZXksIHVpbnQzMl90IHZhbHVlLAogICAgICAgICAgICAgICAgICAgICAg ICAgICBzdHJ1Y3QgdGZ0cF90ICpyZWN2X3RwKQogewpAQCAtMTM2LDE0ICsxMjQsMTQgQEAKICAg ICBzdHJ1Y3QgdGZ0cF90ICp0cDsKICAgICBpbnQgbiA9IDA7CiAKLSAgICBtID0gbV9nZXQoKTsK KyAgICBtID0gbV9nZXQocyk7CiAKICAgICBpZiAoIW0pCiAJcmV0dXJuIC0xOwogCiAgICAgbWVt c2V0KG0tPm1fZGF0YSwgMCwgbS0+bV9zaXplKTsKIAotICAgIG0tPm1fZGF0YSArPSBpZl9tYXhs aW5raGRyOworICAgIG0tPm1fZGF0YSArPSBzLT5pZl9tYXhsaW5raGRyOwogICAgIHRwID0gKHZv aWQgKiltLT5tX2RhdGE7CiAgICAgbS0+bV9kYXRhICs9IHNpemVvZihzdHJ1Y3QgdWRwaXBoZHIp OwogCkBAIC0xNTksMTQgKzE0NywxNSBAQAogCiAgICAgbS0+bV9sZW4gPSBzaXplb2Yoc3RydWN0 IHRmdHBfdCkgLSA1MTQgKyBuIC0KICAgICAgICAgc2l6ZW9mKHN0cnVjdCBpcCkgLSBzaXplb2Yo c3RydWN0IHVkcGhkcik7Ci0gICAgdWRwX291dHB1dDIoTlVMTCwgbSwgJnNhZGRyLCAmZGFkZHIs IElQVE9TX0xPV0RFTEFZKTsKKyAgICB1ZHBfb3V0cHV0MihzLCBOVUxMLCBtLCAmc2FkZHIsICZk YWRkciwgSVBUT1NfTE9XREVMQVkpOwogCiAgICAgcmV0dXJuIDA7CiB9CiAKIAogCi1zdGF0aWMg aW50IHRmdHBfc2VuZF9lcnJvcihzdHJ1Y3QgdGZ0cF9zZXNzaW9uICpzcHQsCitzdGF0aWMgaW50 IHRmdHBfc2VuZF9lcnJvcihzbGlycF9zdGF0ZV90ICpzLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgc3RydWN0IHRmdHBfc2Vzc2lvbiAqc3B0LAogCQkJICAgdV9pbnQxNl90IGVycm9yY29k ZSwgY29uc3QgY2hhciAqbXNnLAogCQkJICAgc3RydWN0IHRmdHBfdCAqcmVjdl90cCkKIHsKQEAg LTE3NSw3ICsxNjQsNyBAQAogICBzdHJ1Y3QgdGZ0cF90ICp0cDsKICAgaW50IG5vYnl0ZXM7CiAK LSAgbSA9IG1fZ2V0KCk7CisgIG0gPSBtX2dldChzKTsKIAogICBpZiAoIW0pIHsKICAgICByZXR1 cm4gLTE7CkBAIC0xODMsNyArMTcyLDcgQEAKIAogICBtZW1zZXQobS0+bV9kYXRhLCAwLCBtLT5t X3NpemUpOwogCi0gIG0tPm1fZGF0YSArPSBpZl9tYXhsaW5raGRyOworICBtLT5tX2RhdGEgKz0g cy0+aWZfbWF4bGlua2hkcjsKICAgdHAgPSAodm9pZCAqKW0tPm1fZGF0YTsKICAgbS0+bV9kYXRh ICs9IHNpemVvZihzdHJ1Y3QgdWRwaXBoZHIpOwogCkBAIC0yMDIsMTQgKzE5MSwxNSBAQAogICBt LT5tX2xlbiA9IHNpemVvZihzdHJ1Y3QgdGZ0cF90KSAtIDUxNCArIDMgKyBzdHJsZW4obXNnKSAt CiAgICAgICAgIHNpemVvZihzdHJ1Y3QgaXApIC0gc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpOwogCi0g IHVkcF9vdXRwdXQyKE5VTEwsIG0sICZzYWRkciwgJmRhZGRyLCBJUFRPU19MT1dERUxBWSk7Cisg IHVkcF9vdXRwdXQyKHMsIE5VTEwsIG0sICZzYWRkciwgJmRhZGRyLCBJUFRPU19MT1dERUxBWSk7 CiAKICAgdGZ0cF9zZXNzaW9uX3Rlcm1pbmF0ZShzcHQpOwogCiAgIHJldHVybiAwOwogfQogCi1z dGF0aWMgaW50IHRmdHBfc2VuZF9kYXRhKHN0cnVjdCB0ZnRwX3Nlc3Npb24gKnNwdCwKK3N0YXRp YyBpbnQgdGZ0cF9zZW5kX2RhdGEoc2xpcnBfc3RhdGVfdCAqcywKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgc3RydWN0IHRmdHBfc2Vzc2lvbiAqc3B0LAogCQkJICB1X2ludDE2X3QgYmxvY2tf bnIsCiAJCQkgIHN0cnVjdCB0ZnRwX3QgKnJlY3ZfdHApCiB7CkBAIC0yMjIsNyArMjEyLDcgQEAK ICAgICByZXR1cm4gLTE7CiAgIH0KIAotICBtID0gbV9nZXQoKTsKKyAgbSA9IG1fZ2V0KHMpOwog CiAgIGlmICghbSkgewogICAgIHJldHVybiAtMTsKQEAgLTIzMCw3ICsyMjAsNyBAQAogCiAgIG1l bXNldChtLT5tX2RhdGEsIDAsIG0tPm1fc2l6ZSk7CiAKLSAgbS0+bV9kYXRhICs9IGlmX21heGxp bmtoZHI7CisgIG0tPm1fZGF0YSArPSBzLT5pZl9tYXhsaW5raGRyOwogICB0cCA9ICh2b2lkICop bS0+bV9kYXRhOwogICBtLT5tX2RhdGEgKz0gc2l6ZW9mKHN0cnVjdCB1ZHBpcGhkcik7CiAKQEAg LTI0MywxNCArMjMzLDE0IEBACiAgIGRhZGRyLnNpbl9hZGRyID0gc3B0LT5jbGllbnRfaXA7CiAg IGRhZGRyLnNpbl9wb3J0ID0gc3B0LT5jbGllbnRfcG9ydDsKIAotICBub2J5dGVzID0gdGZ0cF9y ZWFkX2RhdGEoc3B0LCBibG9ja19uciAtIDEsIHRwLT54LnRwX2RhdGEudHBfYnVmLCA1MTIpOwor ICBub2J5dGVzID0gdGZ0cF9yZWFkX2RhdGEocywgc3B0LCBibG9ja19uciAtIDEsIHRwLT54LnRw X2RhdGEudHBfYnVmLCA1MTIpOwogCiAgIGlmIChub2J5dGVzIDwgMCkgewotICAgIG1fZnJlZSht KTsKKyAgICBtX2ZyZWUocywgbSk7CiAKICAgICAvKiBzZW5kICJmaWxlIG5vdCBmb3VuZCIgZXJy b3IgYmFjayAqLwogCi0gICAgdGZ0cF9zZW5kX2Vycm9yKHNwdCwgMSwgIkZpbGUgbm90IGZvdW5k IiwgdHApOworICAgIHRmdHBfc2VuZF9lcnJvcihzLCBzcHQsIDEsICJGaWxlIG5vdCBmb3VuZCIs IHRwKTsKIAogICAgIHJldHVybiAtMTsKICAgfQpAQCAtMjU4LDEwICsyNDgsMTAgQEAKICAgbS0+ bV9sZW4gPSBzaXplb2Yoc3RydWN0IHRmdHBfdCkgLSAoNTEyIC0gbm9ieXRlcykgLQogICAgICAg ICBzaXplb2Yoc3RydWN0IGlwKSAtIHNpemVvZihzdHJ1Y3QgdWRwaGRyKTsKIAotICB1ZHBfb3V0 cHV0MihOVUxMLCBtLCAmc2FkZHIsICZkYWRkciwgSVBUT1NfTE9XREVMQVkpOworICB1ZHBfb3V0 cHV0MihzLCBOVUxMLCBtLCAmc2FkZHIsICZkYWRkciwgSVBUT1NfTE9XREVMQVkpOwogCiAgIGlm IChub2J5dGVzID09IDUxMikgewotICAgIHRmdHBfc2Vzc2lvbl91cGRhdGUoc3B0KTsKKyAgICB0 ZnRwX3Nlc3Npb25fdXBkYXRlKHMsIHNwdCk7CiAgIH0KICAgZWxzZSB7CiAgICAgdGZ0cF9zZXNz aW9uX3Rlcm1pbmF0ZShzcHQpOwpAQCAtMjcwLDE5ICsyNjAsMTkgQEAKICAgcmV0dXJuIDA7CiB9 CiAKLXN0YXRpYyB2b2lkIHRmdHBfaGFuZGxlX3JycShzdHJ1Y3QgdGZ0cF90ICp0cCwgaW50IHBr dGxlbikKK3N0YXRpYyB2b2lkIHRmdHBfaGFuZGxlX3JycShzbGlycF9zdGF0ZV90ICpzLCBzdHJ1 Y3QgdGZ0cF90ICp0cCwgaW50IHBrdGxlbikKIHsKICAgc3RydWN0IHRmdHBfc2Vzc2lvbiAqc3B0 OwotICBpbnQgcywgaywgbjsKKyAgaW50IHNlc3Npb24sIGssIG47CiAgIHVfaW50OF90ICpzcmMs ICpkc3Q7CiAKLSAgcyA9IHRmdHBfc2Vzc2lvbl9hbGxvY2F0ZSh0cCk7CisgIHNlc3Npb24gPSB0 ZnRwX3Nlc3Npb25fYWxsb2NhdGUocywgdHApOwogCi0gIGlmIChzIDwgMCkgeworICBpZiAoc2Vz c2lvbiA8IDApIHsKICAgICByZXR1cm47CiAgIH0KIAotICBzcHQgPSAmdGZ0cF9zZXNzaW9uc1tz XTsKKyAgc3B0ID0gJnMtPnRmdHBfc2Vzc2lvbnNbc2Vzc2lvbl07CiAKICAgc3JjID0gdHAtPngu dHBfYnVmOwogICBkc3QgPSBzcHQtPmZpbGVuYW1lOwpAQCAtMzE1LDcgKzMwNSw3IEBACiAgIH0K IAogICBpZiAobWVtY21wKCZzcmNba10sICJvY3RldFwwIiwgNikgIT0gMCkgewotICAgICAgdGZ0 cF9zZW5kX2Vycm9yKHNwdCwgNCwgIlVuc3VwcG9ydGVkIHRyYW5zZmVyIG1vZGUiLCB0cCk7Cisg ICAgICB0ZnRwX3NlbmRfZXJyb3Iocywgc3B0LCA0LCAiVW5zdXBwb3J0ZWQgdHJhbnNmZXIgbW9k ZSIsIHRwKTsKICAgICAgIHJldHVybjsKICAgfQogCkBAIC0zMjYsMjYgKzMxNiwyNiBAQAogICBp ZiAoKHNwdC0+ZmlsZW5hbWVbMF0gIT0gJy8nKQogICAgICAgfHwgKHNwdC0+ZmlsZW5hbWVbc3Ry bGVuKHNwdC0+ZmlsZW5hbWUpIC0gMV0gPT0gJy8nKQogICAgICAgfHwgIHN0cnN0cihzcHQtPmZp bGVuYW1lLCAiLy4uLyIpKSB7Ci0gICAgICB0ZnRwX3NlbmRfZXJyb3Ioc3B0LCAyLCAiQWNjZXNz IHZpb2xhdGlvbiIsIHRwKTsKKyAgICAgIHRmdHBfc2VuZF9lcnJvcihzLCBzcHQsIDIsICJBY2Nl c3MgdmlvbGF0aW9uIiwgdHApOwogICAgICAgcmV0dXJuOwogICB9CiAKICAgLyogb25seSBhbGxv dyBleHBvcnRlZCBwcmVmaXhlcyAqLwogCi0gIGlmICghdGZ0cF9wcmVmaXgpIHsKLSAgICAgIHRm dHBfc2VuZF9lcnJvcihzcHQsIDIsICJBY2Nlc3MgdmlvbGF0aW9uIiwgdHApOworICBpZiAoIXMt PnRmdHBfcHJlZml4KSB7CisgICAgICB0ZnRwX3NlbmRfZXJyb3Iocywgc3B0LCAyLCAiQWNjZXNz IHZpb2xhdGlvbiIsIHRwKTsKICAgICAgIHJldHVybjsKICAgfQogCiAgIC8qIGNoZWNrIGlmIHRo ZSBmaWxlIGV4aXN0cyAqLwogCi0gIGlmICh0ZnRwX3JlYWRfZGF0YShzcHQsIDAsIHNwdC0+Zmls ZW5hbWUsIDApIDwgMCkgewotICAgICAgdGZ0cF9zZW5kX2Vycm9yKHNwdCwgMSwgIkZpbGUgbm90 IGZvdW5kIiwgdHApOworICBpZiAodGZ0cF9yZWFkX2RhdGEocywgc3B0LCAwLCBzcHQtPmZpbGVu YW1lLCAwKSA8IDApIHsKKyAgICAgIHRmdHBfc2VuZF9lcnJvcihzLCBzcHQsIDEsICJGaWxlIG5v dCBmb3VuZCIsIHRwKTsKICAgICAgIHJldHVybjsKICAgfQogCiAgIGlmIChzcmNbbiAtIDFdICE9 IDApIHsKLSAgICAgIHRmdHBfc2VuZF9lcnJvcihzcHQsIDIsICJBY2Nlc3MgdmlvbGF0aW9uIiwg dHApOworICAgICAgdGZ0cF9zZW5kX2Vycm9yKHMsIHNwdCwgMiwgIkFjY2VzcyB2aW9sYXRpb24i LCB0cCk7CiAgICAgICByZXR1cm47CiAgIH0KIApAQCAtMzU2LDcgKzM0Niw3IEBACiAgICAgICBr ICs9IHN0cmxlbihrZXkpICsgMTsKIAogICAgICAgaWYgKGsgPj0gbikgewotCSAgdGZ0cF9zZW5k X2Vycm9yKHNwdCwgMiwgIkFjY2VzcyB2aW9sYXRpb24iLCB0cCk7CisJICB0ZnRwX3NlbmRfZXJy b3Iocywgc3B0LCAyLCAiQWNjZXNzIHZpb2xhdGlvbiIsIHRwKTsKIAkgIHJldHVybjsKICAgICAg IH0KIApAQCAtMzY3LDU2ICszNTcsNTYgQEAKIAkgIGludCB0c2l6ZSA9IGF0b2kodmFsdWUpOwog CSAgc3RydWN0IHN0YXQgc3RhdF9wOwogCi0JICBpZiAodHNpemUgPT0gMCAmJiB0ZnRwX3ByZWZp eCkgeworCSAgaWYgKHRzaXplID09IDAgJiYgcy0+dGZ0cF9wcmVmaXgpIHsKIAkgICAgICBjaGFy IGJ1ZmZlclsxMDI0XTsKIAkgICAgICBpbnQgbGVuOwogCiAJICAgICAgbGVuID0gc25wcmludGYo YnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgIiVzLyVzIiwKLQkJCSAgICAgdGZ0cF9wcmVmaXgsIHNw dC0+ZmlsZW5hbWUpOworCQkJICAgICBzLT50ZnRwX3ByZWZpeCwgc3B0LT5maWxlbmFtZSk7CiAK IAkgICAgICBpZiAoc3RhdChidWZmZXIsICZzdGF0X3ApID09IDApCiAJCSAgdHNpemUgPSBzdGF0 X3Auc3Rfc2l6ZTsKIAkgICAgICBlbHNlIHsKLQkJICB0ZnRwX3NlbmRfZXJyb3Ioc3B0LCAxLCAi RmlsZSBub3QgZm91bmQiLCB0cCk7CisJCSAgdGZ0cF9zZW5kX2Vycm9yKHMsIHNwdCwgMSwgIkZp bGUgbm90IGZvdW5kIiwgdHApOwogCQkgIHJldHVybjsKIAkgICAgICB9CiAJICB9CiAKLQkgIHRm dHBfc2VuZF9vYWNrKHNwdCwgInRzaXplIiwgdHNpemUsIHRwKTsKKwkgIHRmdHBfc2VuZF9vYWNr KHMsIHNwdCwgInRzaXplIiwgdHNpemUsIHRwKTsKICAgICAgIH0KICAgfQogCi0gIHRmdHBfc2Vu ZF9kYXRhKHNwdCwgMSwgdHApOworICB0ZnRwX3NlbmRfZGF0YShzLCBzcHQsIDEsIHRwKTsKIH0K IAotc3RhdGljIHZvaWQgdGZ0cF9oYW5kbGVfYWNrKHN0cnVjdCB0ZnRwX3QgKnRwLCBpbnQgcGt0 bGVuKQorc3RhdGljIHZvaWQgdGZ0cF9oYW5kbGVfYWNrKHNsaXJwX3N0YXRlX3QgKnMsIHN0cnVj dCB0ZnRwX3QgKnRwLCBpbnQgcGt0bGVuKQogewotICBpbnQgczsKKyAgaW50IHNlc3Npb247CiAK LSAgcyA9IHRmdHBfc2Vzc2lvbl9maW5kKHRwKTsKKyAgc2Vzc2lvbiA9IHRmdHBfc2Vzc2lvbl9m aW5kKHMsIHRwKTsKIAotICBpZiAocyA8IDApIHsKKyAgaWYgKHNlc3Npb24gPCAwKSB7CiAgICAg cmV0dXJuOwogICB9CiAKLSAgaWYgKHRmdHBfc2VuZF9kYXRhKCZ0ZnRwX3Nlc3Npb25zW3NdLAor ICBpZiAodGZ0cF9zZW5kX2RhdGEocywgJnMtPnRmdHBfc2Vzc2lvbnNbc2Vzc2lvbl0sCiAJCSAg ICAgbnRvaHModHAtPngudHBfZGF0YS50cF9ibG9ja19ucikgKyAxLAogCQkgICAgIHRwKSA8IDAp IHsKICAgICByZXR1cm47CiAgIH0KIH0KIAotdm9pZCB0ZnRwX2lucHV0KHN0cnVjdCBtYnVmICpt KQordm9pZCB0ZnRwX2lucHV0KHNsaXJwX3N0YXRlX3QgKnMsIHN0cnVjdCBtYnVmICptKQogewog ICBzdHJ1Y3QgdGZ0cF90ICp0cCA9IChzdHJ1Y3QgdGZ0cF90ICopbS0+bV9kYXRhOwogCiAgIHN3 aXRjaChudG9ocyh0cC0+dHBfb3ApKSB7CiAgIGNhc2UgVEZUUF9SUlE6Ci0gICAgdGZ0cF9oYW5k bGVfcnJxKHRwLCBtLT5tX2xlbik7CisgICAgdGZ0cF9oYW5kbGVfcnJxKHMsIHRwLCBtLT5tX2xl bik7CiAgICAgYnJlYWs7CiAKICAgY2FzZSBURlRQX0FDSzoKLSAgICB0ZnRwX2hhbmRsZV9hY2so dHAsIG0tPm1fbGVuKTsKKyAgICB0ZnRwX2hhbmRsZV9hY2socywgdHAsIG0tPm1fbGVuKTsKICAg ICBicmVhazsKICAgfQogfQpJbmRleDogcWVtdS9zbGlycC90ZnRwLmgKPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g cWVtdS5vcmlnL3NsaXJwL3RmdHAuaAkyMDA3LTEwLTIwIDA3OjMzOjM4LjAwMDAwMDAwMCArMDAw MAorKysgcWVtdS9zbGlycC90ZnRwLmgJMjAwNy0xMC0yMCAwODoxNzo1Mi4wMDAwMDAwMDAgKzAw MDAKQEAgLTMwLDQgKzMwLDQgQEAKICAgfSB4OwogfTsKIAotdm9pZCB0ZnRwX2lucHV0KHN0cnVj dCBtYnVmICptKTsKK3ZvaWQgdGZ0cF9pbnB1dChzbGlycF9zdGF0ZV90ICpzLCBzdHJ1Y3QgbWJ1 ZiAqbSk7CkluZGV4OiBxZW11L3NsaXJwL3VkcC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHFlbXUub3JpZy9z bGlycC91ZHAuYwkyMDA3LTEwLTIwIDA3OjMzOjM4LjAwMDAwMDAwMCArMDAwMAorKysgcWVtdS9z bGlycC91ZHAuYwkyMDA3LTEwLTIwIDE3OjEzOjQ1LjAwMDAwMDAwMCArMDAwMApAQCAtNDUsMzUg KzQ1LDI4IEBACiAjaW5jbHVkZSA8c2xpcnAuaD4KICNpbmNsdWRlICJpcF9pY21wLmgiCiAKLXN0 cnVjdCB1ZHBzdGF0IHVkcHN0YXQ7Ci0KLXN0cnVjdCBzb2NrZXQgdWRiOworc3RhdGljIHVfaW50 OF90IHVkcF90b3Moc3RydWN0IHNvY2tldCAqc28pOworc3RhdGljIHZvaWQgdWRwX2VtdShzbGly cF9zdGF0ZV90ICpzLCBzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IG1idWYgKm0pOwogCiAvKgog ICogVURQIHByb3RvY29sIGltcGxlbWVudGF0aW9uLgogICogUGVyIFJGQyA3NjgsIEF1Z3VzdCwg MTk4MC4KICAqLwotI2lmbmRlZglDT01QQVRfNDIKLWludAl1ZHBja3N1bSA9IDE7Ci0jZWxzZQot aW50CXVkcGNrc3VtID0gMDsJCS8qIFhYWCAqLwotI2VuZGlmCi0KLXN0cnVjdAlzb2NrZXQgKnVk cF9sYXN0X3NvID0gJnVkYjsKKyNkZWZpbmUgdWRwY2tzdW0gMQogCiB2b2lkCi11ZHBfaW5pdCgp Cit1ZHBfaW5pdChzbGlycF9zdGF0ZV90ICpzKQogewotCXVkYi5zb19uZXh0ID0gdWRiLnNvX3By ZXYgPSAmdWRiOworICAgICAgICBzLT51ZHBfbGFzdF9zbyA9ICZzLT51ZGI7CisJcy0+dWRiLnNv X25leHQgPSBzLT51ZGIuc29fcHJldiA9ICZzLT51ZGI7CiB9CisKIC8qIG0tPm1fZGF0YSAgcG9p bnRzIGF0IGlwIHBhY2tldCBoZWFkZXIKICAqIG0tPm1fbGVuICAgbGVuZ3RoIGlwIHBhY2tldAog ICogaXAtPmlwX2xlbiBsZW5ndGggZGF0YSAoSVBEVSkKICAqLwogdm9pZAotdWRwX2lucHV0KG0s IGlwaGxlbikKLQlyZWdpc3RlciBzdHJ1Y3QgbWJ1ZiAqbTsKLQlpbnQgaXBobGVuOwordWRwX2lu cHV0KHNsaXJwX3N0YXRlX3QgKnMsIHJlZ2lzdGVyIHN0cnVjdCBtYnVmICptLCBpbnQgaXBobGVu KQogewogCXJlZ2lzdGVyIHN0cnVjdCBpcCAqaXA7CiAJcmVnaXN0ZXIgc3RydWN0IHVkcGhkciAq dWg7CkBAIC04Niw3ICs3OSw3IEBACiAJREVCVUdfQVJHKCJtID0gJWx4IiwgKGxvbmcpbSk7CiAJ REVCVUdfQVJHKCJpcGhsZW4gPSAlZCIsIGlwaGxlbik7CiAKLQl1ZHBzdGF0LnVkcHNfaXBhY2tl dHMrKzsKKwlzLT51ZHBzdGF0LnVkcHNfaXBhY2tldHMrKzsKIAogCS8qCiAJICogU3RyaXAgSVAg b3B0aW9ucywgaWYgYW55OyBzaG91bGQgc2tpcCB0aGlzLApAQCAtMTEzLDcgKzEwNiw3IEBACiAK IAlpZiAoaXAtPmlwX2xlbiAhPSBsZW4pIHsKIAkJaWYgKGxlbiA+IGlwLT5pcF9sZW4pIHsKLQkJ CXVkcHN0YXQudWRwc19iYWRsZW4rKzsKKwkJCXMtPnVkcHN0YXQudWRwc19iYWRsZW4rKzsKIAkJ CWdvdG8gYmFkOwogCQl9CiAJCW1fYWRqKG0sIGxlbiAtIGlwLT5pcF9sZW4pOwpAQCAtMTQwLDcg KzEzMyw3IEBACiAJICAgKiBpZiAodWgtPnVoX3N1bSkgewogCSAgICovCiAJICBpZihja3N1bSht LCBsZW4gKyBzaXplb2Yoc3RydWN0IGlwKSkpIHsKLQkgICAgdWRwc3RhdC51ZHBzX2JhZHN1bSsr OworCSAgICBzLT51ZHBzdGF0LnVkcHNfYmFkc3VtKys7CiAJICAgIGdvdG8gYmFkOwogCSAgfQog CX0KQEAgLTE0OSw3ICsxNDIsNyBAQAogICAgICAgICAgKiAgaGFuZGxlIERIQ1AvQk9PVFAKICAg ICAgICAgICovCiAgICAgICAgIGlmIChudG9ocyh1aC0+dWhfZHBvcnQpID09IEJPT1RQX1NFUlZF UikgewotICAgICAgICAgICAgYm9vdHBfaW5wdXQobSk7CisgICAgICAgICAgICBib290cF9pbnB1 dChzLCBtKTsKICAgICAgICAgICAgIGdvdG8gYmFkOwogICAgICAgICB9CiAKQEAgLTE1NywxOSAr MTUwLDE5IEBACiAgICAgICAgICAqICBoYW5kbGUgVEZUUAogICAgICAgICAgKi8KICAgICAgICAg aWYgKG50b2hzKHVoLT51aF9kcG9ydCkgPT0gVEZUUF9TRVJWRVIpIHsKLSAgICAgICAgICAgIHRm dHBfaW5wdXQobSk7CisgICAgICAgICAgICB0ZnRwX2lucHV0KHMsIG0pOwogICAgICAgICAgICAg Z290byBiYWQ7CiAgICAgICAgIH0KIAogCS8qCiAJICogTG9jYXRlIHBjYiBmb3IgZGF0YWdyYW0u CiAJICovCi0Jc28gPSB1ZHBfbGFzdF9zbzsKKwlzbyA9IHMtPnVkcF9sYXN0X3NvOwogCWlmIChz by0+c29fbHBvcnQgIT0gdWgtPnVoX3Nwb3J0IHx8CiAJICAgIHNvLT5zb19sYWRkci5zX2FkZHIg IT0gaXAtPmlwX3NyYy5zX2FkZHIpIHsKIAkJc3RydWN0IHNvY2tldCAqdG1wOwogCi0JCWZvciAo dG1wID0gdWRiLnNvX25leHQ7IHRtcCAhPSAmdWRiOyB0bXAgPSB0bXAtPnNvX25leHQpIHsKKwkJ Zm9yICh0bXAgPSBzLT51ZGIuc29fbmV4dDsgdG1wICE9ICZzLT51ZGI7IHRtcCA9IHRtcC0+c29f bmV4dCkgewogCQkJaWYgKHRtcC0+c29fbHBvcnQgPT0gdWgtPnVoX3Nwb3J0ICYmCiAJCQkgICAg dG1wLT5zb19sYWRkci5zX2FkZHIgPT0gaXAtPmlwX3NyYy5zX2FkZHIpIHsKIAkJCQl0bXAtPnNv X2ZhZGRyLnNfYWRkciA9IGlwLT5pcF9kc3Quc19hZGRyOwpAQCAtMTc4LDExICsxNzEsMTEgQEAK IAkJCQlicmVhazsKIAkJCX0KIAkJfQotCQlpZiAodG1wID09ICZ1ZGIpIHsKKwkJaWYgKHRtcCA9 PSAmcy0+dWRiKSB7CiAJCSAgc28gPSBOVUxMOwogCQl9IGVsc2UgewotCQkgIHVkcHN0YXQudWRw cHNfcGNiY2FjaGVtaXNzKys7Ci0JCSAgdWRwX2xhc3Rfc28gPSBzbzsKKwkJICBzLT51ZHBzdGF0 LnVkcHBzX3BjYmNhY2hlbWlzcysrOworCQkgIHMtPnVkcF9sYXN0X3NvID0gc287CiAJCX0KIAl9 CiAKQEAgLTE5MiwxMCArMTg1LDEwIEBACiAJICAgKiBjcmVhdGUgb25lCiAJICAgKi8KIAkgIGlm ICgoc28gPSBzb2NyZWF0ZSgpKSA9PSBOVUxMKSBnb3RvIGJhZDsKLQkgIGlmKHVkcF9hdHRhY2go c28pID09IC0xKSB7CisJICBpZih1ZHBfYXR0YWNoKHMsIHNvKSA9PSAtMSkgewogCSAgICBERUJV R19NSVNDKChkZmQsIiB1ZHBfYXR0YWNoIGVycm5vID0gJWQtJXNcbiIsCiAJCQllcnJubyxzdHJl cnJvcihlcnJubykpKTsKLQkgICAgc29mcmVlKHNvKTsKKyAgICAgICAgICAgIHNvZnJlZShzLCBz byk7CiAJICAgIGdvdG8gYmFkOwogCSAgfQogCkBAIC0yMjYsMTcgKzIxOSwxNyBAQAogCSAqIE5v dyB3ZSBzZW5kdG8oKSB0aGUgcGFja2V0LgogCSAqLwogCWlmIChzby0+c29fZW11KQotCSAgIHVk cF9lbXUoc28sIG0pOworCSAgIHVkcF9lbXUocywgc28sIG0pOwogCi0JaWYoc29zZW5kdG8oc28s bSkgPT0gLTEpIHsKKwlpZihzb3NlbmR0byhzLCBzbyxtKSA9PSAtMSkgewogCSAgbS0+bV9sZW4g Kz0gaXBobGVuOwogCSAgbS0+bV9kYXRhIC09IGlwaGxlbjsKIAkgICppcD1zYXZlX2lwOwogCSAg REVCVUdfTUlTQygoZGZkLCJ1ZHAgdHggZXJybm8gPSAlZC0lc1xuIixlcnJubyxzdHJlcnJvcihl cnJubykpKTsKLQkgIGljbXBfZXJyb3IobSwgSUNNUF9VTlJFQUNILElDTVBfVU5SRUFDSF9ORVQs IDAsc3RyZXJyb3IoZXJybm8pKTsKKwkgIGljbXBfZXJyb3IocywgbSwgSUNNUF9VTlJFQUNILElD TVBfVU5SRUFDSF9ORVQsIDAsc3RyZXJyb3IoZXJybm8pKTsKIAl9CiAKLQltX2ZyZWUoc28tPnNv X20pOyAgIC8qIHVzZWQgZm9yIElDTVAgaWYgZXJyb3Igb24gc29yZWN2ZnJvbSAqLworCW1fZnJl ZShzLCBzby0+c29fbSk7ICAgLyogdXNlZCBmb3IgSUNNUCBpZiBlcnJvciBvbiBzb3JlY3Zmcm9t ICovCiAKIAkvKiByZXN0b3JlIHRoZSBvcmlnIG1idWYgcGFja2V0ICovCiAJbS0+bV9sZW4gKz0g aXBobGVuOwpAQCAtMjQ2LDEyICsyMzksMTIgQEAKIAogCXJldHVybjsKIGJhZDoKLQltX2ZyZWVt KG0pOworCW1fZnJlZW0ocywgbSk7CiAJLyogaWYgKG9wdHMpIG1fZnJlZW0ob3B0cyk7ICovCiAJ cmV0dXJuOwogfQogCi1pbnQgdWRwX291dHB1dDIoc3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBt YnVmICptLAoraW50IHVkcF9vdXRwdXQyKHNsaXJwX3N0YXRlX3QgKnMsIHN0cnVjdCBzb2NrZXQg KnNvLCBzdHJ1Y3QgbWJ1ZiAqbSwKICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4g KnNhZGRyLCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKmRhZGRyLAogICAgICAgICAgICAgICAgIGludCBp cHRvcykKIHsKQEAgLTI5NiwzNyArMjg5LDM1IEBACiAJfQogCSgoc3RydWN0IGlwICopdWkpLT5p cF9sZW4gPSBtLT5tX2xlbjsKIAotCSgoc3RydWN0IGlwICopdWkpLT5pcF90dGwgPSBpcF9kZWZ0 dGw7CisJKChzdHJ1Y3QgaXAgKil1aSktPmlwX3R0bCA9IElQREVGVFRMOwogCSgoc3RydWN0IGlw ICopdWkpLT5pcF90b3MgPSBpcHRvczsKIAotCXVkcHN0YXQudWRwc19vcGFja2V0cysrOworCXMt PnVkcHN0YXQudWRwc19vcGFja2V0cysrOwogCi0JZXJyb3IgPSBpcF9vdXRwdXQoc28sIG0pOwor CWVycm9yID0gaXBfb3V0cHV0KHMsIHNvLCBtKTsKIAogCXJldHVybiAoZXJyb3IpOwogfQogCi1p bnQgdWRwX291dHB1dChzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IG1idWYgKm0sCitpbnQgdWRw X291dHB1dChzbGlycF9zdGF0ZV90ICpzLCBzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IG1idWYg Km0sCiAgICAgICAgICAgICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gKmFkZHIpCi0KIHsKICAgICBz dHJ1Y3Qgc29ja2FkZHJfaW4gc2FkZHIsIGRhZGRyOwogCiAgICAgc2FkZHIgPSAqYWRkcjsKLSAg ICBpZiAoKHNvLT5zb19mYWRkci5zX2FkZHIgJiBodG9ubCgweGZmZmZmZjAwKSkgPT0gc3BlY2lh bF9hZGRyLnNfYWRkcikgeworICAgIGlmICgoc28tPnNvX2ZhZGRyLnNfYWRkciAmIGh0b25sKDB4 ZmZmZmZmMDApKSA9PSBzLT5zcGVjaWFsX2FkZHIuc19hZGRyKSB7CiAgICAgICAgIHNhZGRyLnNp bl9hZGRyLnNfYWRkciA9IHNvLT5zb19mYWRkci5zX2FkZHI7CiAgICAgICAgIGlmICgoc28tPnNv X2ZhZGRyLnNfYWRkciAmIGh0b25sKDB4MDAwMDAwZmYpKSA9PSBodG9ubCgweGZmKSkKLSAgICAg ICAgICAgIHNhZGRyLnNpbl9hZGRyLnNfYWRkciA9IGFsaWFzX2FkZHIuc19hZGRyOworICAgICAg ICAgICAgc2FkZHIuc2luX2FkZHIuc19hZGRyID0gcy0+YWxpYXNfYWRkci5zX2FkZHI7CiAgICAg fQogICAgIGRhZGRyLnNpbl9hZGRyID0gc28tPnNvX2xhZGRyOwogICAgIGRhZGRyLnNpbl9wb3J0 ID0gc28tPnNvX2xwb3J0OwogCi0gICAgcmV0dXJuIHVkcF9vdXRwdXQyKHNvLCBtLCAmc2FkZHIs ICZkYWRkciwgc28tPnNvX2lwdG9zKTsKKyAgICByZXR1cm4gdWRwX291dHB1dDIocywgc28sIG0s ICZzYWRkciwgJmRhZGRyLCBzby0+c29faXB0b3MpOwogfQogCiBpbnQKLXVkcF9hdHRhY2goc28p Ci0gICAgIHN0cnVjdCBzb2NrZXQgKnNvOwordWRwX2F0dGFjaChzbGlycF9zdGF0ZV90ICpzLCBz dHJ1Y3Qgc29ja2V0ICpzbykKIHsKICAgc3RydWN0IHNvY2thZGRyX2luIGFkZHI7CiAKQEAgLTM0 OSwyNSArMzQwLDMwIEBACiAgICAgICBlcnJubz1sYXN0ZXJybm87CiAjZW5kaWYKICAgICB9IGVs c2UgeworICAgICAgaW50IG9wdCA9IDE7CiAgICAgICAvKiBzdWNjZXNzLCBpbnNlcnQgaW4gcXVl dWUgKi8KLSAgICAgIHNvLT5zb19leHBpcmUgPSBjdXJ0aW1lICsgU09fRVhQSVJFOwotICAgICAg aW5zcXVlKHNvLCZ1ZGIpOworICAgICAgc28tPnNvX2V4cGlyZSA9IHMtPmN1cnRpbWUgKyBTT19F WFBJUkU7CisgICAgICAvKiBlbmFibGUgYnJvYWRjYXN0IGZvciBsYXRlciB1c2UgKi8KKyAgICAg IHNldHNvY2tvcHQoc28tPnMsIFNPTF9TT0NLRVQsIFNPX0JST0FEQ0FTVCwgKGNvbnN0IGNoYXIg Kikmb3B0LCBzaXplb2Yob3B0KSk7CisgICAgICBpbnNxdWUocywgc28sICZzLT51ZGIpOwogICAg IH0KICAgfQogICByZXR1cm4oc28tPnMpOwogfQogCiB2b2lkCi11ZHBfZGV0YWNoKHNvKQotCXN0 cnVjdCBzb2NrZXQgKnNvOwordWRwX2RldGFjaChzbGlycF9zdGF0ZV90ICpzLCBzdHJ1Y3Qgc29j a2V0ICpzbykKIHsKKwkvKiBDb3JyZWN0bHkgdXBkYXRlIGxpc3QgaWYgZGV0YWNoaW5nIGxhc3Qg c29ja2V0IGluIGxpc3QuICovCisJaWYgKHNvID09IHMtPnVkcF9sYXN0X3NvKQorICAgICAgICAg ICAgcy0+dWRwX2xhc3Rfc28gPSAmcy0+dWRiOwogCWNsb3Nlc29ja2V0KHNvLT5zKTsKIAkvKiBp ZiAoc28tPnNvX20pIG1fZnJlZShzby0+c29fbSk7ICAgIGRvbmUgYnkgc29mcmVlICovCiAKLQlz b2ZyZWUoc28pOworCXNvZnJlZShzLCBzbyk7CiB9CiAKLXN0cnVjdCB0b3NfdCB1ZHB0b3NbXSA9 IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdG9zX3QgdWRwdG9zW10gPSB7CiAJezAsIDUzLCBJUFRP U19MT1dERUxBWSwgMH0sCQkJLyogRE5TICovCiAJezUxNywgNTE3LCBJUFRPU19MT1dERUxBWSwg RU1VX1RBTEt9LAkvKiB0YWxrICovCiAJezUxOCwgNTE4LCBJUFRPU19MT1dERUxBWSwgRU1VX05U QUxLfSwJLyogbnRhbGsgKi8KQEAgLTM3NSw5ICszNzEsOCBAQAogCXswLCAwLCAwLCAwfQogfTsK IAotdV9pbnQ4X3QKLXVkcF90b3Moc28pCi0Jc3RydWN0IHNvY2tldCAqc287CitzdGF0aWMgdV9p bnQ4X3QKK3VkcF90b3Moc3RydWN0IHNvY2tldCAqc28pCiB7CiAJaW50IGkgPSAwOwogCkBAIC00 MDAsMTAgKzM5NSw4IEBACiAvKgogICogSGVyZSwgdGFsay95dGFsay9udGFsayByZXF1ZXN0cyBt dXN0IGJlIGVtdWxhdGVkCiAgKi8KLXZvaWQKLXVkcF9lbXUoc28sIG0pCi0Jc3RydWN0IHNvY2tl dCAqc287Ci0Jc3RydWN0IG1idWYgKm07CitzdGF0aWMgdm9pZAordWRwX2VtdShzbGlycF9zdGF0 ZV90ICpzLCBzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IG1idWYgKm0pCiB7CiAJc3RydWN0IHNv Y2thZGRyX2luIGFkZHI7CiAgICAgICAgIGludCBhZGRybGVuID0gc2l6ZW9mKGFkZHIpOwpAQCAt NDcwLDE0ICs0NjMsMTQgQEAKIAkJCW5tc2cgPSAoQ1RMX01TRyAqKSBidWZmOwogCQkJdHlwZSA9 IG9tc2ctPnR5cGU7CiAJCQlPVE9TSU4ob21zZywgY3RsX2FkZHIpLT5zaW5fcG9ydCA9IGFkZHIu c2luX3BvcnQ7Ci0JCQlPVE9TSU4ob21zZywgY3RsX2FkZHIpLT5zaW5fYWRkciA9IG91cl9hZGRy OworCQkJT1RPU0lOKG9tc2csIGN0bF9hZGRyKS0+c2luX2FkZHIgPSBzLT5vdXJfYWRkcjsKIAkJ CXN0cm5jcHkob21zZy0+bF9uYW1lLCBnZXRsb2dpbigpLCBOQU1FX1NJWkVfT0xEKTsKIAkJfSBl bHNlIHsJCS8qIG5ldyB0YWxrICovCiAJCQlvbXNnID0gKENUTF9NU0dfT0xEICopIGJ1ZmY7CiAJ CQlubXNnID0gbXRvZChtLCBDVExfTVNHICopOwogCQkJdHlwZSA9IG5tc2ctPnR5cGU7CiAJCQlP VE9TSU4obm1zZywgY3RsX2FkZHIpLT5zaW5fcG9ydCA9IGFkZHIuc2luX3BvcnQ7Ci0JCQlPVE9T SU4obm1zZywgY3RsX2FkZHIpLT5zaW5fYWRkciA9IG91cl9hZGRyOworCQkJT1RPU0lOKG5tc2cs IGN0bF9hZGRyKS0+c2luX2FkZHIgPSBzLT5vdXJfYWRkcjsKIAkJCXN0cm5jcHkobm1zZy0+bF9u YW1lLCBnZXRsb2dpbigpLCBOQU1FX1NJWkVfT0xEKTsKIAkJfQogCkBAIC01MzAsOSArNTIzLDkg QEAKIAkJCQkJKHN0cnVjdCBzb2NrYWRkciAqKSAmYWRkciwKIAkJCQkJJmFkZHJsZW4pOwogCQkJ T1RPU0lOKG9tc2csIGFkZHIpLT5zaW5fcG9ydCA9IGFkZHIuc2luX3BvcnQ7Ci0JCQlPVE9TSU4o b21zZywgYWRkciktPnNpbl9hZGRyID0gb3VyX2FkZHI7CisJCQlPVE9TSU4ob21zZywgYWRkcikt PnNpbl9hZGRyID0gcy0+b3VyX2FkZHI7CiAJCQlPVE9TSU4obm1zZywgYWRkciktPnNpbl9wb3J0 ID0gYWRkci5zaW5fcG9ydDsKLQkJCU9UT1NJTihubXNnLCBhZGRyKS0+c2luX2FkZHIgPSBvdXJf YWRkcjsKKwkJCU9UT1NJTihubXNnLCBhZGRyKS0+c2luX2FkZHIgPSBzLT5vdXJfYWRkcjsKIAog CQkJLyogc2VuZCBMRUFWRV9JTlZJVEVzICovCiAJCQl0ZW1wX3BvcnQgPSBPVE9TSU4ob21zZywg Y3RsX2FkZHIpLT5zaW5fcG9ydDsKQEAgLTU0MSw3ICs1MzQsNyBAQAogCQkJb21zZy0+dHlwZSA9 IG5tc2ctPnR5cGUgPSBMRUFWRV9JTlZJVEU7CiAKIAkJCXMgPSBzb2NrZXQoQUZfSU5FVCwgU09D S19ER1JBTSwgSVBQUk9UT19JUCk7Ci0JCQlhZGRyLnNpbl9hZGRyID0gb3VyX2FkZHI7CisJCQlh ZGRyLnNpbl9hZGRyID0gcy0+b3VyX2FkZHI7CiAJCQlhZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVU OwogCQkJYWRkci5zaW5fcG9ydCA9IGh0b25zKDUxNyk7CiAJCQlzZW5kdG8ocywgKGNoYXIgKilv bXNnLCBzaXplb2YoKm9tc2cpLCAwLApAQCAtNTcyLDcgKzU2NSw3IEBACiAJCQlPVE9TSU4obm1z ZywgY3RsX2FkZHIpLT5zaW5fcG9ydCA9IDA7CiAKIAkJCXMgPSBzb2NrZXQoQUZfSU5FVCwgU09D S19ER1JBTSwgSVBQUk9UT19JUCk7Ci0JCQlhZGRyLnNpbl9hZGRyID0gb3VyX2FkZHI7CisJCQlh ZGRyLnNpbl9hZGRyID0gcy0+b3VyX2FkZHI7CiAJCQlhZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVU OwogCQkJYWRkci5zaW5fcG9ydCA9IGh0b25zKDUxNyk7CiAJCQlzZW5kdG8ocywgKGNoYXIgKilv bXNnLCBzaXplb2YoKm9tc2cpLCAwLApAQCAtNjIxLDcgKzYxNCw3IEBACiAJCQkJcmV0dXJuOwog CQkJY3VfaGVhZCA9IG10b2QobSwgc3RydWN0IGN1X2hlYWRlciAqKTsKIAkJCWN1X2hlYWQtPnNf cG9ydCA9IGFkZHIuc2luX3BvcnQ7Ci0JCQljdV9oZWFkLT5zb19hZGRyID0gb3VyX2FkZHIuc19h ZGRyOworCQkJY3VfaGVhZC0+c29fYWRkciA9IHMtPm91cl9hZGRyLnNfYWRkcjsKIAkJfQogCiAJ CXJldHVybjsKQEAgLTYyOSwxMSArNjIyLDggQEAKIH0KIAogc3RydWN0IHNvY2tldCAqCi11ZHBf bGlzdGVuKHBvcnQsIGxhZGRyLCBscG9ydCwgZmxhZ3MpCi0JdV9pbnQgcG9ydDsKLQl1X2ludDMy X3QgbGFkZHI7Ci0JdV9pbnQgbHBvcnQ7Ci0JaW50IGZsYWdzOwordWRwX2xpc3RlbihzbGlycF9z dGF0ZV90ICpzLCB1X2ludCBwb3J0LCB1X2ludDMyX3QgbGFkZHIsIHVfaW50IGxwb3J0LAorICAg ICAgICAgICBpbnQgZmxhZ3MpCiB7CiAJc3RydWN0IHNvY2thZGRyX2luIGFkZHI7CiAJc3RydWN0 IHNvY2tldCAqc287CkBAIC02NDQsMTUgKzYzNCwxNSBAQAogCQlyZXR1cm4gTlVMTDsKIAl9CiAJ c28tPnMgPSBzb2NrZXQoQUZfSU5FVCxTT0NLX0RHUkFNLDApOwotCXNvLT5zb19leHBpcmUgPSBj dXJ0aW1lICsgU09fRVhQSVJFOwotCWluc3F1ZShzbywmdWRiKTsKKwlzby0+c29fZXhwaXJlID0g cy0+Y3VydGltZSArIFNPX0VYUElSRTsKKwlpbnNxdWUocywgc28sICZzLT51ZGIpOwogCiAJYWRk ci5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKIAlhZGRyLnNpbl9hZGRyLnNfYWRkciA9IElOQUREUl9B Tlk7CiAJYWRkci5zaW5fcG9ydCA9IHBvcnQ7CiAKIAlpZiAoYmluZChzby0+cywoc3RydWN0IHNv Y2thZGRyICopJmFkZHIsIGFkZHJsZW4pIDwgMCkgewotCQl1ZHBfZGV0YWNoKHNvKTsKKwkJdWRw X2RldGFjaChzLCBzbyk7CiAJCXJldHVybiBOVUxMOwogCX0KIAlzZXRzb2Nrb3B0KHNvLT5zLFNP TF9TT0NLRVQsU09fUkVVU0VBRERSLChjaGFyICopJm9wdCxzaXplb2YoaW50KSk7CkBAIC02NjAs OCArNjUwLDggQEAKIAogCWdldHNvY2tuYW1lKHNvLT5zLChzdHJ1Y3Qgc29ja2FkZHIgKikmYWRk ciwmYWRkcmxlbik7CiAJc28tPnNvX2Zwb3J0ID0gYWRkci5zaW5fcG9ydDsKLQlpZiAoYWRkci5z aW5fYWRkci5zX2FkZHIgPT0gMCB8fCBhZGRyLnNpbl9hZGRyLnNfYWRkciA9PSBsb29wYmFja19h ZGRyLnNfYWRkcikKLQkgICBzby0+c29fZmFkZHIgPSBhbGlhc19hZGRyOworCWlmIChhZGRyLnNp bl9hZGRyLnNfYWRkciA9PSAwIHx8IGFkZHIuc2luX2FkZHIuc19hZGRyID09IHMtPmxvb3BiYWNr X2FkZHIuc19hZGRyKQorCSAgIHNvLT5zb19mYWRkciA9IHMtPmFsaWFzX2FkZHI7CiAJZWxzZQog CSAgIHNvLT5zb19mYWRkciA9IGFkZHIuc2luX2FkZHI7CiAKSW5kZXg6IHFlbXUvc2xpcnAvdWRw LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQotLS0gcWVtdS5vcmlnL3NsaXJwL3VkcC5oCTIwMDctMTAtMjAgMDc6MzM6 MzguMDAwMDAwMDAwICswMDAwCisrKyBxZW11L3NsaXJwL3VkcC5oCTIwMDctMTAtMjAgMTc6MjA6 MDEuMDAwMDAwMDAwICswMDAwCkBAIC00MCw4ICs0MCw2IEBACiAjZGVmaW5lIFVEUF9UVEwgMHg2 MAogI2RlZmluZSBVRFBfVURQREFUQUxFTiAxNjE5MgogCi1leHRlcm4gc3RydWN0IHNvY2tldCAq dWRwX2xhc3Rfc287Ci0KIC8qCiAgKiBVZHAgcHJvdG9jb2wgaGVhZGVyLgogICogUGVyIFJGQyA3 NjgsIFNlcHRlbWJlciwgMTk4MS4KQEAgLTkyLDE5ICs5MCwxNyBAQAogI2RlZmluZSBVRFBDVExf Q0hFQ0tTVU0gICAgICAgICAxICAgICAgIC8qIGNoZWNrc3VtIFVEUCBwYWNrZXRzICovCiAjZGVm aW5lIFVEUENUTF9NQVhJRCAgICAgICAgICAgIDIKIAotZXh0ZXJuIHN0cnVjdCB1ZHBzdGF0IHVk cHN0YXQ7Ci1leHRlcm4gc3RydWN0IHNvY2tldCB1ZGI7CiBzdHJ1Y3QgbWJ1ZjsKIAotdm9pZCB1 ZHBfaW5pdCBfUCgodm9pZCkpOwotdm9pZCB1ZHBfaW5wdXQgX1AoKHJlZ2lzdGVyIHN0cnVjdCBt YnVmICosIGludCkpOwotaW50IHVkcF9vdXRwdXQgX1AoKHN0cnVjdCBzb2NrZXQgKiwgc3RydWN0 IG1idWYgKiwgc3RydWN0IHNvY2thZGRyX2luICopKTsKLWludCB1ZHBfYXR0YWNoIF9QKChzdHJ1 Y3Qgc29ja2V0ICopKTsKLXZvaWQgdWRwX2RldGFjaCBfUCgoc3RydWN0IHNvY2tldCAqKSk7Ci11 X2ludDhfdCB1ZHBfdG9zIF9QKChzdHJ1Y3Qgc29ja2V0ICopKTsKLXZvaWQgdWRwX2VtdSBfUCgo c3RydWN0IHNvY2tldCAqLCBzdHJ1Y3QgbWJ1ZiAqKSk7Ci1zdHJ1Y3Qgc29ja2V0ICogdWRwX2xp c3RlbiBfUCgodV9pbnQsIHVfaW50MzJfdCwgdV9pbnQsIGludCkpOwotaW50IHVkcF9vdXRwdXQy KHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3QgbWJ1ZiAqbSwKK3ZvaWQgdWRwX2luaXQoc2xpcnBf c3RhdGVfdCAqcyk7Cit2b2lkIHVkcF9pbnB1dChzbGlycF9zdGF0ZV90ICpzLCByZWdpc3RlciBz dHJ1Y3QgbWJ1ZiAqbSwgaW50IGlwaGxlbik7CitpbnQgdWRwX291dHB1dChzbGlycF9zdGF0ZV90 ICpzLCBzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IG1idWYgKm0sCisgICAgICAgICAgICAgICBz dHJ1Y3Qgc29ja2FkZHJfaW4gKmFkZHIpOworaW50IHVkcF9hdHRhY2goc2xpcnBfc3RhdGVfdCAq cywgc3RydWN0IHNvY2tldCAqc28pOwordm9pZCB1ZHBfZGV0YWNoKHNsaXJwX3N0YXRlX3QgKnMs IHN0cnVjdCBzb2NrZXQgKnNvKTsKK3N0cnVjdCBzb2NrZXQgKnVkcF9saXN0ZW4oc2xpcnBfc3Rh dGVfdCAqcywgdV9pbnQgcG9ydCwgdV9pbnQzMl90IGxhZGRyLAorICAgICAgICAgICAgICAgICAg ICAgICAgICB1X2ludCBscG9ydCwgaW50IGZsYWdzKTsKK2ludCB1ZHBfb3V0cHV0MihzbGlycF9z dGF0ZV90ICpzLCBzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IG1idWYgKm0sCiAgICAgICAgICAg ICAgICAgc3RydWN0IHNvY2thZGRyX2luICpzYWRkciwgc3RydWN0IHNvY2thZGRyX2luICpkYWRk ciwKICAgICAgICAgICAgICAgICBpbnQgaXB0b3MpOwogI2VuZGlmCkluZGV4OiBxZW11L3NsaXJw L2RlYnVnLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQotLS0gcWVtdS5vcmlnL3NsaXJwL2RlYnVnLmMJMjAwNy0xMC0y MCAwNzozMzozOS4wMDAwMDAwMDAgKzAwMDAKKysrIHFlbXUvc2xpcnAvZGVidWcuYwkyMDA3LTEw LTIwIDEyOjUyOjQwLjAwMDAwMDAwMCArMDAwMApAQCAtOSwxMCArOSwxMiBAQAogI2luY2x1ZGUg PHNsaXJwLmg+CiAKIEZJTEUgKmRmZCA9IE5VTEw7CisjaWYgMAogI2lmZGVmIERFQlVHCi1pbnQg ZG9zdGF0cyA9IDE7CitzdGF0aWMgaW50IGRvc3RhdHMgPSAxOwogI2Vsc2UKLWludCBkb3N0YXRz ID0gMDsKK3N0YXRpYyBpbnQgZG9zdGF0cyA9IDA7CisjZW5kaWYKICNlbmRpZgogaW50IHNsaXJw X2RlYnVnID0gMDsKIApAQCAtMjAsMTAgKzIyLDEwIEBACiAKIC8qIENhcnJ5IG92ZXIgb25lIGl0 ZW0gZnJvbSBtYWluLmMgc28gdGhhdCB0aGUgdHR5J3MgcmVzdG9yZWQuCiAgKiBPbmx5IGRvbmUg d2hlbiB0aGUgdHR5IGJlaW5nIHVzZWQgaXMgL2Rldi90dHkgLS1SZWRXb2xmICovCisjaWYgMAog ZXh0ZXJuIHN0cnVjdCB0ZXJtaW9zIHNsaXJwX3R0eV9zZXR0aW5nczsKIGV4dGVybiBpbnQgc2xp cnBfdHR5X3Jlc3RvcmU7CiAKLQogdm9pZAogZGVidWdfaW5pdChmaWxlLCBkYmcpCiAJY2hhciAq ZmlsZTsKQEAgLTcwLDcgKzcyLDE2IEBACiAJfQogfQogI2VuZGlmCisjZW5kaWYKIAorI2lmZGVm IExPR19FTkFCTEVECisvL3N0YXRpYyB2b2lkIHR0eXN0YXRzKHN0cnVjdCB0dHlzICopOworc3Rh dGljIHZvaWQgaXBzdGF0cyhzbGlycF9zdGF0ZV90ICpzKTsKK3N0YXRpYyB2b2lkIHRjcHN0YXRz KHNsaXJwX3N0YXRlX3QgKnMpOworc3RhdGljIHZvaWQgdWRwc3RhdHMoc2xpcnBfc3RhdGVfdCAq cyk7CitzdGF0aWMgdm9pZCBpY21wc3RhdHMoc2xpcnBfc3RhdGVfdCAqcyk7CitzdGF0aWMgdm9p ZCBtYnVmc3RhdHMoc2xpcnBfc3RhdGVfdCAqcyk7CitzdGF0aWMgdm9pZCBzb2Nrc3RhdHMoc2xp cnBfc3RhdGVfdCAqcyk7CiAjaWYgMAogLyoKICAqIFN0YXRpc3RpYyByb3V0aW5lcwpAQCAtODAs NyArOTEsNyBAQAogICogdGhlIGxpbmsgYXMgd2VsbC4KICAqLwogCi12b2lkCitzdGF0aWMgdm9p ZAogdHR5c3RhdHModHR5cCkKIAlzdHJ1Y3QgdHR5cyAqdHR5cDsKIHsKQEAgLTg5LDkgKzEwMCw5 IEBACiAKIAlscHJpbnQoIiBcclxuIik7CiAKLQlpZiAoaWZfY29tcCAmIElGX0NPTVBSRVNTKQor CWlmIChzLT5pZl9jb21wICYgSUZfQ09NUFJFU1MpCiAJICAgc3RyY3B5KGJ1ZmYsICJvbiIpOwot CWVsc2UgaWYgKGlmX2NvbXAgJiBJRl9OT0NPTVBSRVNTKQorCWVsc2UgaWYgKHMtPmlmX2NvbXAg JiBJRl9OT0NPTVBSRVNTKQogCSAgIHN0cmNweShidWZmLCAib2ZmIik7CiAJZWxzZQogCSAgIHN0 cmNweShidWZmLCAib2ZmIChmb3Igbm93KSIpOwpAQCAtMTI5LDI4ICsxNDAsMjggQEAKIH0KICNl bmRpZgogCi12b2lkCi1pcHN0YXRzKCkKK3N0YXRpYyB2b2lkCitpcHN0YXRzKHNsaXJwX3N0YXRl X3QgKnMpCiB7CiAJbHByaW50KCIgXHJcbiIpOwogCiAJbHByaW50KCJJUCBzdGF0czpcclxuIik7 CiAJbHByaW50KCIgICU2ZCB0b3RhbCBwYWNrZXRzIHJlY2VpdmVkICglZCB3ZXJlIHVuYWxpZ25l ZClcclxuIiwKLQkJCWlwc3RhdC5pcHNfdG90YWwsIGlwc3RhdC5pcHNfdW5hbGlnbmVkKTsKLQls cHJpbnQoIiAgJTZkIHdpdGggaW5jb3JyZWN0IHZlcnNpb25cclxuIiwgaXBzdGF0Lmlwc19iYWR2 ZXJzKTsKLQlscHJpbnQoIiAgJTZkIHdpdGggYmFkIGhlYWRlciBjaGVja3N1bVxyXG4iLCBpcHN0 YXQuaXBzX2JhZHN1bSk7Ci0JbHByaW50KCIgICU2ZCB3aXRoIGxlbmd0aCB0b28gc2hvcnQgKGxl biA8IHNpemVvZihpcGhkcikpXHJcbiIsIGlwc3RhdC5pcHNfdG9vc2hvcnQpOwotCWxwcmludCgi ICAlNmQgd2l0aCBsZW5ndGggdG9vIHNtYWxsIChsZW4gPCBpcC0+bGVuKVxyXG4iLCBpcHN0YXQu aXBzX3Rvb3NtYWxsKTsKLQlscHJpbnQoIiAgJTZkIHdpdGggYmFkIGhlYWRlciBsZW5ndGhcclxu IiwgaXBzdGF0Lmlwc19iYWRobGVuKTsKLQlscHJpbnQoIiAgJTZkIHdpdGggYmFkIHBhY2tldCBs ZW5ndGhcclxuIiwgaXBzdGF0Lmlwc19iYWRsZW4pOwotCWxwcmludCgiICAlNmQgZnJhZ21lbnRz IHJlY2VpdmVkXHJcbiIsIGlwc3RhdC5pcHNfZnJhZ21lbnRzKTsKLQlscHJpbnQoIiAgJTZkIGZy YWdtZW50cyBkcm9wcGVkXHJcbiIsIGlwc3RhdC5pcHNfZnJhZ2Ryb3BwZWQpOwotCWxwcmludCgi ICAlNmQgZnJhZ21lbnRzIHRpbWVkIG91dFxyXG4iLCBpcHN0YXQuaXBzX2ZyYWd0aW1lb3V0KTsK LQlscHJpbnQoIiAgJTZkIHBhY2tldHMgcmVhc3NlbWJsZWQgb2tcclxuIiwgaXBzdGF0Lmlwc19y ZWFzc2VtYmxlZCk7Ci0JbHByaW50KCIgICU2ZCBvdXRnb2luZyBwYWNrZXRzIGZyYWdtZW50ZWRc clxuIiwgaXBzdGF0Lmlwc19mcmFnbWVudGVkKTsKLQlscHJpbnQoIiAgJTZkIHRvdGFsIG91dGdv aW5nIGZyYWdtZW50c1xyXG4iLCBpcHN0YXQuaXBzX29mcmFnbWVudHMpOwotCWxwcmludCgiICAl NmQgd2l0aCBiYWQgcHJvdG9jb2wgZmllbGRcclxuIiwgaXBzdGF0Lmlwc19ub3Byb3RvKTsKLQls cHJpbnQoIiAgJTZkIHRvdGFsIHBhY2tldHMgZGVsaXZlcmVkXHJcbiIsIGlwc3RhdC5pcHNfZGVs aXZlcmVkKTsKKwkJCXMtPmlwc3RhdC5pcHNfdG90YWwsIHMtPmlwc3RhdC5pcHNfdW5hbGlnbmVk KTsKKwlscHJpbnQoIiAgJTZkIHdpdGggaW5jb3JyZWN0IHZlcnNpb25cclxuIiwgcy0+aXBzdGF0 Lmlwc19iYWR2ZXJzKTsKKwlscHJpbnQoIiAgJTZkIHdpdGggYmFkIGhlYWRlciBjaGVja3N1bVxy XG4iLCBzLT5pcHN0YXQuaXBzX2JhZHN1bSk7CisJbHByaW50KCIgICU2ZCB3aXRoIGxlbmd0aCB0 b28gc2hvcnQgKGxlbiA8IHNpemVvZihpcGhkcikpXHJcbiIsIHMtPmlwc3RhdC5pcHNfdG9vc2hv cnQpOworCWxwcmludCgiICAlNmQgd2l0aCBsZW5ndGggdG9vIHNtYWxsIChsZW4gPCBpcC0+bGVu KVxyXG4iLCBzLT5pcHN0YXQuaXBzX3Rvb3NtYWxsKTsKKwlscHJpbnQoIiAgJTZkIHdpdGggYmFk IGhlYWRlciBsZW5ndGhcclxuIiwgcy0+aXBzdGF0Lmlwc19iYWRobGVuKTsKKwlscHJpbnQoIiAg JTZkIHdpdGggYmFkIHBhY2tldCBsZW5ndGhcclxuIiwgcy0+aXBzdGF0Lmlwc19iYWRsZW4pOwor CWxwcmludCgiICAlNmQgZnJhZ21lbnRzIHJlY2VpdmVkXHJcbiIsIHMtPmlwc3RhdC5pcHNfZnJh Z21lbnRzKTsKKwlscHJpbnQoIiAgJTZkIGZyYWdtZW50cyBkcm9wcGVkXHJcbiIsIHMtPmlwc3Rh dC5pcHNfZnJhZ2Ryb3BwZWQpOworCWxwcmludCgiICAlNmQgZnJhZ21lbnRzIHRpbWVkIG91dFxy XG4iLCBzLT5pcHN0YXQuaXBzX2ZyYWd0aW1lb3V0KTsKKwlscHJpbnQoIiAgJTZkIHBhY2tldHMg cmVhc3NlbWJsZWQgb2tcclxuIiwgcy0+aXBzdGF0Lmlwc19yZWFzc2VtYmxlZCk7CisJbHByaW50 KCIgICU2ZCBvdXRnb2luZyBwYWNrZXRzIGZyYWdtZW50ZWRcclxuIiwgcy0+aXBzdGF0Lmlwc19m cmFnbWVudGVkKTsKKwlscHJpbnQoIiAgJTZkIHRvdGFsIG91dGdvaW5nIGZyYWdtZW50c1xyXG4i LCBzLT5pcHN0YXQuaXBzX29mcmFnbWVudHMpOworCWxwcmludCgiICAlNmQgd2l0aCBiYWQgcHJv dG9jb2wgZmllbGRcclxuIiwgcy0+aXBzdGF0Lmlwc19ub3Byb3RvKTsKKwlscHJpbnQoIiAgJTZk IHRvdGFsIHBhY2tldHMgZGVsaXZlcmVkXHJcbiIsIHMtPmlwc3RhdC5pcHNfZGVsaXZlcmVkKTsK IH0KIAogI2lmIDAKQEAgLTE3Miw2NyArMTgzLDY3IEBACiB9CiAjZW5kaWYKIAotdm9pZAotdGNw c3RhdHMoKQorc3RhdGljIHZvaWQKK3RjcHN0YXRzKHNsaXJwX3N0YXRlX3QgKnMpCiB7CiAJbHBy aW50KCIgXHJcbiIpOwogCiAJbHByaW50KCJUQ1Agc3RhdHM6XHJcbiIpOwogCi0JbHByaW50KCIg ICU2ZCBwYWNrZXRzIHNlbnRcclxuIiwgdGNwc3RhdC50Y3BzX3NuZHRvdGFsKTsKKwlscHJpbnQo IiAgJTZkIHBhY2tldHMgc2VudFxyXG4iLCBzLT50Y3BzdGF0LnRjcHNfc25kdG90YWwpOwogCWxw cmludCgiICAgICAgICAgICU2ZCBkYXRhIHBhY2tldHMgKCVkIGJ5dGVzKVxyXG4iLAotCQkJdGNw c3RhdC50Y3BzX3NuZHBhY2ssIHRjcHN0YXQudGNwc19zbmRieXRlKTsKKwkJCXMtPnRjcHN0YXQu dGNwc19zbmRwYWNrLCBzLT50Y3BzdGF0LnRjcHNfc25kYnl0ZSk7CiAJbHByaW50KCIgICAgICAg ICAgJTZkIGRhdGEgcGFja2V0cyByZXRyYW5zbWl0dGVkICglZCBieXRlcylcclxuIiwKLQkJCXRj cHN0YXQudGNwc19zbmRyZXhtaXRwYWNrLCB0Y3BzdGF0LnRjcHNfc25kcmV4bWl0Ynl0ZSk7CisJ CQlzLT50Y3BzdGF0LnRjcHNfc25kcmV4bWl0cGFjaywgcy0+dGNwc3RhdC50Y3BzX3NuZHJleG1p dGJ5dGUpOwogCWxwcmludCgiICAgICAgICAgICU2ZCBhY2stb25seSBwYWNrZXRzICglZCBkZWxh eWVkKVxyXG4iLAotCQkJdGNwc3RhdC50Y3BzX3NuZGFja3MsIHRjcHN0YXQudGNwc19kZWxhY2sp OwotCWxwcmludCgiICAgICAgICAgICU2ZCBVUkcgb25seSBwYWNrZXRzXHJcbiIsIHRjcHN0YXQu dGNwc19zbmR1cmcpOwotCWxwcmludCgiICAgICAgICAgICU2ZCB3aW5kb3cgcHJvYmUgcGFja2V0 c1xyXG4iLCB0Y3BzdGF0LnRjcHNfc25kcHJvYmUpOwotCWxwcmludCgiICAgICAgICAgICU2ZCB3 aW5kb3cgdXBkYXRlIHBhY2tldHNcclxuIiwgdGNwc3RhdC50Y3BzX3NuZHdpbnVwKTsKLQlscHJp bnQoIiAgICAgICAgICAlNmQgY29udHJvbCAoU1lOL0ZJTi9SU1QpIHBhY2tldHNcclxuIiwgdGNw c3RhdC50Y3BzX3NuZGN0cmwpOwotCWxwcmludCgiICAgICAgICAgICU2ZCB0aW1lcyB0Y3Bfb3V0 cHV0IGRpZCBub3RoaW5nXHJcbiIsIHRjcHN0YXQudGNwc19kaWRudXR0aW4pOworCQkJcy0+dGNw c3RhdC50Y3BzX3NuZGFja3MsIHMtPnRjcHN0YXQudGNwc19kZWxhY2spOworCWxwcmludCgiICAg ICAgICAgICU2ZCBVUkcgb25seSBwYWNrZXRzXHJcbiIsIHMtPnRjcHN0YXQudGNwc19zbmR1cmcp OworCWxwcmludCgiICAgICAgICAgICU2ZCB3aW5kb3cgcHJvYmUgcGFja2V0c1xyXG4iLCBzLT50 Y3BzdGF0LnRjcHNfc25kcHJvYmUpOworCWxwcmludCgiICAgICAgICAgICU2ZCB3aW5kb3cgdXBk YXRlIHBhY2tldHNcclxuIiwgcy0+dGNwc3RhdC50Y3BzX3NuZHdpbnVwKTsKKwlscHJpbnQoIiAg ICAgICAgICAlNmQgY29udHJvbCAoU1lOL0ZJTi9SU1QpIHBhY2tldHNcclxuIiwgcy0+dGNwc3Rh dC50Y3BzX3NuZGN0cmwpOworCWxwcmludCgiICAgICAgICAgICU2ZCB0aW1lcyB0Y3Bfb3V0cHV0 IGRpZCBub3RoaW5nXHJcbiIsIHMtPnRjcHN0YXQudGNwc19kaWRudXR0aW4pOwogCi0JbHByaW50 KCIgICU2ZCBwYWNrZXRzIHJlY2VpdmVkXHJcbiIsIHRjcHN0YXQudGNwc19yY3Z0b3RhbCk7CisJ bHByaW50KCIgICU2ZCBwYWNrZXRzIHJlY2VpdmVkXHJcbiIsIHMtPnRjcHN0YXQudGNwc19yY3Z0 b3RhbCk7CiAJbHByaW50KCIgICAgICAgICAgJTZkIGFja3MgKGZvciAlZCBieXRlcylcclxuIiwK LQkJCXRjcHN0YXQudGNwc19yY3ZhY2twYWNrLCB0Y3BzdGF0LnRjcHNfcmN2YWNrYnl0ZSk7Ci0J bHByaW50KCIgICAgICAgICAgJTZkIGR1cGxpY2F0ZSBhY2tzXHJcbiIsIHRjcHN0YXQudGNwc19y Y3ZkdXBhY2spOwotCWxwcmludCgiICAgICAgICAgICU2ZCBhY2tzIGZvciB1bnNlbnQgZGF0YVxy XG4iLCB0Y3BzdGF0LnRjcHNfcmN2YWNrdG9vbXVjaCk7CisJCQlzLT50Y3BzdGF0LnRjcHNfcmN2 YWNrcGFjaywgcy0+dGNwc3RhdC50Y3BzX3JjdmFja2J5dGUpOworCWxwcmludCgiICAgICAgICAg ICU2ZCBkdXBsaWNhdGUgYWNrc1xyXG4iLCBzLT50Y3BzdGF0LnRjcHNfcmN2ZHVwYWNrKTsKKwls cHJpbnQoIiAgICAgICAgICAlNmQgYWNrcyBmb3IgdW5zZW50IGRhdGFcclxuIiwgcy0+dGNwc3Rh dC50Y3BzX3JjdmFja3Rvb211Y2gpOwogCWxwcmludCgiICAgICAgICAgICU2ZCBwYWNrZXRzIHJl Y2VpdmVkIGluIHNlcXVlbmNlICglZCBieXRlcylcclxuIiwKLQkJCXRjcHN0YXQudGNwc19yY3Zw YWNrLCB0Y3BzdGF0LnRjcHNfcmN2Ynl0ZSk7CisJCQlzLT50Y3BzdGF0LnRjcHNfcmN2cGFjaywg cy0+dGNwc3RhdC50Y3BzX3JjdmJ5dGUpOwogICAgICAgICBscHJpbnQoIiAgICAgICAgICAlNmQg Y29tcGxldGVseSBkdXBsaWNhdGUgcGFja2V0cyAoJWQgYnl0ZXMpXHJcbiIsCi0JCQl0Y3BzdGF0 LnRjcHNfcmN2ZHVwcGFjaywgdGNwc3RhdC50Y3BzX3JjdmR1cGJ5dGUpOworCQkJcy0+dGNwc3Rh dC50Y3BzX3JjdmR1cHBhY2ssIHMtPnRjcHN0YXQudGNwc19yY3ZkdXBieXRlKTsKIAogCWxwcmlu dCgiICAgICAgICAgICU2ZCBwYWNrZXRzIHdpdGggc29tZSBkdXBsaWNhdGUgZGF0YSAoJWQgYnl0 ZXMgZHVwZWQpXHJcbiIsCi0JCQl0Y3BzdGF0LnRjcHNfcmN2cGFydGR1cHBhY2ssIHRjcHN0YXQu dGNwc19yY3ZwYXJ0ZHVwYnl0ZSk7CisJCQlzLT50Y3BzdGF0LnRjcHNfcmN2cGFydGR1cHBhY2ss IHMtPnRjcHN0YXQudGNwc19yY3ZwYXJ0ZHVwYnl0ZSk7CiAJbHByaW50KCIgICAgICAgICAgJTZk IG91dC1vZi1vcmRlciBwYWNrZXRzICglZCBieXRlcylcclxuIiwKLQkJCXRjcHN0YXQudGNwc19y Y3Zvb3BhY2ssIHRjcHN0YXQudGNwc19yY3Zvb2J5dGUpOworCQkJcy0+dGNwc3RhdC50Y3BzX3Jj dm9vcGFjaywgcy0+dGNwc3RhdC50Y3BzX3Jjdm9vYnl0ZSk7CiAJbHByaW50KCIgICAgICAgICAg JTZkIHBhY2tldHMgb2YgZGF0YSBhZnRlciB3aW5kb3cgKCVkIGJ5dGVzKVxyXG4iLAotCQkJdGNw c3RhdC50Y3BzX3JjdnBhY2thZnRlcndpbiwgdGNwc3RhdC50Y3BzX3JjdmJ5dGVhZnRlcndpbik7 Ci0JbHByaW50KCIgICAgICAgICAgJTZkIHdpbmRvdyBwcm9iZXNcclxuIiwgdGNwc3RhdC50Y3Bz X3JjdndpbnByb2JlKTsKLQlscHJpbnQoIiAgICAgICAgICAlNmQgd2luZG93IHVwZGF0ZSBwYWNr ZXRzXHJcbiIsIHRjcHN0YXQudGNwc19yY3Z3aW51cGQpOwotCWxwcmludCgiICAgICAgICAgICU2 ZCBwYWNrZXRzIHJlY2VpdmVkIGFmdGVyIGNsb3NlXHJcbiIsIHRjcHN0YXQudGNwc19yY3ZhZnRl cmNsb3NlKTsKLQlscHJpbnQoIiAgICAgICAgICAlNmQgZGlzY2FyZGVkIGZvciBiYWQgY2hlY2tz dW1zXHJcbiIsIHRjcHN0YXQudGNwc19yY3ZiYWRzdW0pOworCQkJcy0+dGNwc3RhdC50Y3BzX3Jj dnBhY2thZnRlcndpbiwgcy0+dGNwc3RhdC50Y3BzX3JjdmJ5dGVhZnRlcndpbik7CisJbHByaW50 KCIgICAgICAgICAgJTZkIHdpbmRvdyBwcm9iZXNcclxuIiwgcy0+dGNwc3RhdC50Y3BzX3Jjdndp bnByb2JlKTsKKwlscHJpbnQoIiAgICAgICAgICAlNmQgd2luZG93IHVwZGF0ZSBwYWNrZXRzXHJc biIsIHMtPnRjcHN0YXQudGNwc19yY3Z3aW51cGQpOworCWxwcmludCgiICAgICAgICAgICU2ZCBw YWNrZXRzIHJlY2VpdmVkIGFmdGVyIGNsb3NlXHJcbiIsIHMtPnRjcHN0YXQudGNwc19yY3ZhZnRl cmNsb3NlKTsKKwlscHJpbnQoIiAgICAgICAgICAlNmQgZGlzY2FyZGVkIGZvciBiYWQgY2hlY2tz dW1zXHJcbiIsIHMtPnRjcHN0YXQudGNwc19yY3ZiYWRzdW0pOwogCWxwcmludCgiICAgICAgICAg ICU2ZCBkaXNjYXJkZWQgZm9yIGJhZCBoZWFkZXIgb2Zmc2V0IGZpZWxkc1xyXG4iLAotCQkJdGNw c3RhdC50Y3BzX3JjdmJhZG9mZik7CisJCQlzLT50Y3BzdGF0LnRjcHNfcmN2YmFkb2ZmKTsKIAot CWxwcmludCgiICAlNmQgY29ubmVjdGlvbiByZXF1ZXN0c1xyXG4iLCB0Y3BzdGF0LnRjcHNfY29u bmF0dGVtcHQpOwotCWxwcmludCgiICAlNmQgY29ubmVjdGlvbiBhY2NlcHRzXHJcbiIsIHRjcHN0 YXQudGNwc19hY2NlcHRzKTsKLQlscHJpbnQoIiAgJTZkIGNvbm5lY3Rpb25zIGVzdGFibGlzaGVk IChpbmNsdWRpbmcgYWNjZXB0cylcclxuIiwgdGNwc3RhdC50Y3BzX2Nvbm5lY3RzKTsKKwlscHJp bnQoIiAgJTZkIGNvbm5lY3Rpb24gcmVxdWVzdHNcclxuIiwgcy0+dGNwc3RhdC50Y3BzX2Nvbm5h dHRlbXB0KTsKKwlscHJpbnQoIiAgJTZkIGNvbm5lY3Rpb24gYWNjZXB0c1xyXG4iLCBzLT50Y3Bz dGF0LnRjcHNfYWNjZXB0cyk7CisJbHByaW50KCIgICU2ZCBjb25uZWN0aW9ucyBlc3RhYmxpc2hl ZCAoaW5jbHVkaW5nIGFjY2VwdHMpXHJcbiIsIHMtPnRjcHN0YXQudGNwc19jb25uZWN0cyk7CiAJ bHByaW50KCIgICU2ZCBjb25uZWN0aW9ucyBjbG9zZWQgKGluY2x1ZGluZyAlZCBkcm9wKVxyXG4i LAotCQkJdGNwc3RhdC50Y3BzX2Nsb3NlZCwgdGNwc3RhdC50Y3BzX2Ryb3BzKTsKLQlscHJpbnQo IiAgJTZkIGVtYnJ5b25pYyBjb25uZWN0aW9ucyBkcm9wcGVkXHJcbiIsIHRjcHN0YXQudGNwc19j b25uZHJvcHMpOworCQkJcy0+dGNwc3RhdC50Y3BzX2Nsb3NlZCwgcy0+dGNwc3RhdC50Y3BzX2Ry b3BzKTsKKwlscHJpbnQoIiAgJTZkIGVtYnJ5b25pYyBjb25uZWN0aW9ucyBkcm9wcGVkXHJcbiIs IHMtPnRjcHN0YXQudGNwc19jb25uZHJvcHMpOwogCWxwcmludCgiICAlNmQgc2VnbWVudHMgd2Ug dHJpZWQgdG8gZ2V0IHJ0dCAoJWQgc3VjY2VlZGVkKVxyXG4iLAotCQkJdGNwc3RhdC50Y3BzX3Nl Z3N0aW1lZCwgdGNwc3RhdC50Y3BzX3J0dHVwZGF0ZWQpOwotCWxwcmludCgiICAlNmQgcmV0cmFu c21pdCB0aW1lb3V0c1xyXG4iLCB0Y3BzdGF0LnRjcHNfcmV4bXR0aW1lbyk7CisJCQlzLT50Y3Bz dGF0LnRjcHNfc2Vnc3RpbWVkLCBzLT50Y3BzdGF0LnRjcHNfcnR0dXBkYXRlZCk7CisJbHByaW50 KCIgICU2ZCByZXRyYW5zbWl0IHRpbWVvdXRzXHJcbiIsIHMtPnRjcHN0YXQudGNwc19yZXhtdHRp bWVvKTsKIAlscHJpbnQoIiAgICAgICAgICAlNmQgY29ubmVjdGlvbnMgZHJvcHBlZCBieSByeG10 IHRpbWVvdXRcclxuIiwKLQkJCXRjcHN0YXQudGNwc190aW1lb3V0ZHJvcCk7Ci0JbHByaW50KCIg ICU2ZCBwZXJzaXN0IHRpbWVvdXRzXHJcbiIsIHRjcHN0YXQudGNwc19wZXJzaXN0dGltZW8pOwot CWxwcmludCgiICAlNmQga2VlcGFsaXZlIHRpbWVvdXRzXHJcbiIsIHRjcHN0YXQudGNwc19rZWVw dGltZW8pOwotCWxwcmludCgiICAgICAgICAgICU2ZCBrZWVwYWxpdmUgcHJvYmVzIHNlbnRcclxu IiwgdGNwc3RhdC50Y3BzX2tlZXBwcm9iZSk7Ci0JbHByaW50KCIgICAgICAgICAgJTZkIGNvbm5l Y3Rpb25zIGRyb3BwZWQgYnkga2VlcGFsaXZlXHJcbiIsIHRjcHN0YXQudGNwc19rZWVwZHJvcHMp OwotCWxwcmludCgiICAlNmQgY29ycmVjdCBBQ0sgaGVhZGVyIHByZWRpY3Rpb25zXHJcbiIsIHRj cHN0YXQudGNwc19wcmVkYWNrKTsKLQlscHJpbnQoIiAgJTZkIGNvcnJlY3QgZGF0YSBwYWNrZXQg aGVhZGVyIHByZWRpY3Rpb25zXG4iLCB0Y3BzdGF0LnRjcHNfcHJlZGRhdCk7Ci0JbHByaW50KCIg ICU2ZCBUQ1AgY2FjaGUgbWlzc2VzXHJcbiIsIHRjcHN0YXQudGNwc19zb2NhY2hlbWlzcyk7CisJ CQlzLT50Y3BzdGF0LnRjcHNfdGltZW91dGRyb3ApOworCWxwcmludCgiICAlNmQgcGVyc2lzdCB0 aW1lb3V0c1xyXG4iLCBzLT50Y3BzdGF0LnRjcHNfcGVyc2lzdHRpbWVvKTsKKwlscHJpbnQoIiAg JTZkIGtlZXBhbGl2ZSB0aW1lb3V0c1xyXG4iLCBzLT50Y3BzdGF0LnRjcHNfa2VlcHRpbWVvKTsK KwlscHJpbnQoIiAgICAgICAgICAlNmQga2VlcGFsaXZlIHByb2JlcyBzZW50XHJcbiIsIHMtPnRj cHN0YXQudGNwc19rZWVwcHJvYmUpOworCWxwcmludCgiICAgICAgICAgICU2ZCBjb25uZWN0aW9u cyBkcm9wcGVkIGJ5IGtlZXBhbGl2ZVxyXG4iLCBzLT50Y3BzdGF0LnRjcHNfa2VlcGRyb3BzKTsK KwlscHJpbnQoIiAgJTZkIGNvcnJlY3QgQUNLIGhlYWRlciBwcmVkaWN0aW9uc1xyXG4iLCBzLT50 Y3BzdGF0LnRjcHNfcHJlZGFjayk7CisJbHByaW50KCIgICU2ZCBjb3JyZWN0IGRhdGEgcGFja2V0 IGhlYWRlciBwcmVkaWN0aW9uc1xuIiwgcy0+dGNwc3RhdC50Y3BzX3ByZWRkYXQpOworCWxwcmlu dCgiICAlNmQgVENQIGNhY2hlIG1pc3Nlc1xyXG4iLCBzLT50Y3BzdGF0LnRjcHNfc29jYWNoZW1p c3MpOwogCiAKIC8qCWxwcmludCgiICAgIFBhY2tldHMgcmVjZWl2ZWQgdG9vIHNob3J0OgkJJWRc clxuIiwgdGNwc3RhdC50Y3BzX3JjdnNob3J0KTsgKi8KQEAgLTI0MCwzNSArMjUxLDM1IEBACiAK IH0KIAotdm9pZAotdWRwc3RhdHMoKQorc3RhdGljIHZvaWQKK3VkcHN0YXRzKHNsaXJwX3N0YXRl X3QgKnMpCiB7CiAgICAgICAgIGxwcmludCgiIFxyXG4iKTsKIAogCWxwcmludCgiVURQIHN0YXRz OlxyXG4iKTsKLQlscHJpbnQoIiAgJTZkIGRhdGFncmFtcyByZWNlaXZlZFxyXG4iLCB1ZHBzdGF0 LnVkcHNfaXBhY2tldHMpOwotCWxwcmludCgiICAlNmQgd2l0aCBwYWNrZXRzIHNob3J0ZXIgdGhh biBoZWFkZXJcclxuIiwgdWRwc3RhdC51ZHBzX2hkcm9wcyk7Ci0JbHByaW50KCIgICU2ZCB3aXRo IGJhZCBjaGVja3N1bXNcclxuIiwgdWRwc3RhdC51ZHBzX2JhZHN1bSk7Ci0JbHByaW50KCIgICU2 ZCB3aXRoIGRhdGEgbGVuZ3RoIGxhcmdlciB0aGFuIHBhY2tldFxyXG4iLCB1ZHBzdGF0LnVkcHNf YmFkbGVuKTsKLQlscHJpbnQoIiAgJTZkIFVEUCBzb2NrZXQgY2FjaGUgbWlzc2VzXHJcbiIsIHVk cHN0YXQudWRwcHNfcGNiY2FjaGVtaXNzKTsKLQlscHJpbnQoIiAgJTZkIGRhdGFncmFtcyBzZW50 XHJcbiIsIHVkcHN0YXQudWRwc19vcGFja2V0cyk7CisJbHByaW50KCIgICU2ZCBkYXRhZ3JhbXMg cmVjZWl2ZWRcclxuIiwgcy0+dWRwc3RhdC51ZHBzX2lwYWNrZXRzKTsKKwlscHJpbnQoIiAgJTZk IHdpdGggcGFja2V0cyBzaG9ydGVyIHRoYW4gaGVhZGVyXHJcbiIsIHMtPnVkcHN0YXQudWRwc19o ZHJvcHMpOworCWxwcmludCgiICAlNmQgd2l0aCBiYWQgY2hlY2tzdW1zXHJcbiIsIHMtPnVkcHN0 YXQudWRwc19iYWRzdW0pOworCWxwcmludCgiICAlNmQgd2l0aCBkYXRhIGxlbmd0aCBsYXJnZXIg dGhhbiBwYWNrZXRcclxuIiwgcy0+dWRwc3RhdC51ZHBzX2JhZGxlbik7CisJbHByaW50KCIgICU2 ZCBVRFAgc29ja2V0IGNhY2hlIG1pc3Nlc1xyXG4iLCBzLT51ZHBzdGF0LnVkcHBzX3BjYmNhY2hl bWlzcyk7CisJbHByaW50KCIgICU2ZCBkYXRhZ3JhbXMgc2VudFxyXG4iLCBzLT51ZHBzdGF0LnVk cHNfb3BhY2tldHMpOwogfQogCi12b2lkCi1pY21wc3RhdHMoKQorc3RhdGljIHZvaWQKK2ljbXBz dGF0cyhzbGlycF9zdGF0ZV90ICpzKQogewogCWxwcmludCgiIFxyXG4iKTsKIAlscHJpbnQoIklD TVAgc3RhdHM6XHJcbiIpOwotCWxwcmludCgiICAlNmQgSUNNUCBwYWNrZXRzIHJlY2VpdmVkXHJc biIsIGljbXBzdGF0LmljcHNfcmVjZWl2ZWQpOwotCWxwcmludCgiICAlNmQgd2VyZSB0b28gc2hv cnRcclxuIiwgaWNtcHN0YXQuaWNwc190b29zaG9ydCk7Ci0JbHByaW50KCIgICU2ZCB3aXRoIGJh ZCBjaGVja3N1bXNcclxuIiwgaWNtcHN0YXQuaWNwc19jaGVja3N1bSk7Ci0JbHByaW50KCIgICU2 ZCB3aXRoIHR5cGUgbm90IHN1cHBvcnRlZFxyXG4iLCBpY21wc3RhdC5pY3BzX25vdHN1cHApOwot CWxwcmludCgiICAlNmQgd2l0aCBiYWQgdHlwZSBmZWlsZHNcclxuIiwgaWNtcHN0YXQuaWNwc19i YWR0eXBlKTsKLQlscHJpbnQoIiAgJTZkIElDTVAgcGFja2V0cyBzZW50IGluIHJlcGx5XHJcbiIs IGljbXBzdGF0LmljcHNfcmVmbGVjdCk7CisJbHByaW50KCIgICU2ZCBJQ01QIHBhY2tldHMgcmVj ZWl2ZWRcclxuIiwgcy0+aWNtcHN0YXQuaWNwc19yZWNlaXZlZCk7CisJbHByaW50KCIgICU2ZCB3 ZXJlIHRvbyBzaG9ydFxyXG4iLCBzLT5pY21wc3RhdC5pY3BzX3Rvb3Nob3J0KTsKKwlscHJpbnQo IiAgJTZkIHdpdGggYmFkIGNoZWNrc3Vtc1xyXG4iLCBzLT5pY21wc3RhdC5pY3BzX2NoZWNrc3Vt KTsKKwlscHJpbnQoIiAgJTZkIHdpdGggdHlwZSBub3Qgc3VwcG9ydGVkXHJcbiIsIHMtPmljbXBz dGF0LmljcHNfbm90c3VwcCk7CisJbHByaW50KCIgICU2ZCB3aXRoIGJhZCB0eXBlIGZlaWxkc1xy XG4iLCBzLT5pY21wc3RhdC5pY3BzX2JhZHR5cGUpOworCWxwcmludCgiICAlNmQgSUNNUCBwYWNr ZXRzIHNlbnQgaW4gcmVwbHlcclxuIiwgcy0+aWNtcHN0YXQuaWNwc19yZWZsZWN0KTsKIH0KIAot dm9pZAotbWJ1ZnN0YXRzKCkKK3N0YXRpYyB2b2lkCittYnVmc3RhdHMoc2xpcnBfc3RhdGVfdCAq cykKIHsKIAlzdHJ1Y3QgbWJ1ZiAqbTsKIAlpbnQgaTsKQEAgLTI3NywyMiArMjg4LDIyIEBACiAK IAlscHJpbnQoIk1idWYgc3RhdHM6XHJcbiIpOwogCi0JbHByaW50KCIgICU2ZCBtYnVmcyBhbGxv Y2F0ZWQgKCVkIG1heClcclxuIiwgbWJ1Zl9hbGxvY2VkLCBtYnVmX21heCk7CisJbHByaW50KCIg ICU2ZCBtYnVmcyBhbGxvY2F0ZWQgKCVkIG1heClcclxuIiwgcy0+bWJ1Zl9hbGxvY2VkLCBzLT5t YnVmX21heCk7CiAKIAlpID0gMDsKLQlmb3IgKG0gPSBtX2ZyZWVsaXN0Lm1fbmV4dDsgbSAhPSAm bV9mcmVlbGlzdDsgbSA9IG0tPm1fbmV4dCkKKwlmb3IgKG0gPSBzLT5tX2ZyZWVsaXN0Lm1fbmV4 dDsgbSAhPSAmcy0+bV9mcmVlbGlzdDsgbSA9IG0tPm1fbmV4dCkKIAkJaSsrOwogCWxwcmludCgi ICAlNmQgbWJ1ZnMgb24gZnJlZSBsaXN0XHJcbiIsICBpKTsKIAogCWkgPSAwOwotCWZvciAobSA9 IG1fdXNlZGxpc3QubV9uZXh0OyBtICE9ICZtX3VzZWRsaXN0OyBtID0gbS0+bV9uZXh0KQorCWZv ciAobSA9IHMtPm1fdXNlZGxpc3QubV9uZXh0OyBtICE9ICZzLT5tX3VzZWRsaXN0OyBtID0gbS0+ bV9uZXh0KQogCQlpKys7CiAJbHByaW50KCIgICU2ZCBtYnVmcyBvbiB1c2VkIGxpc3RcclxuIiwg IGkpOwotICAgICAgICBscHJpbnQoIiAgJTZkIG1idWZzIHF1ZXVlZCBhcyBwYWNrZXRzXHJcblxy XG4iLCBpZl9xdWV1ZWQpOworICAgICAgICBscHJpbnQoIiAgJTZkIG1idWZzIHF1ZXVlZCBhcyBw YWNrZXRzXHJcblxyXG4iLCBzLT5pZl9xdWV1ZWQpOwogfQogCi12b2lkCi1zb2Nrc3RhdHMoKQor c3RhdGljIHZvaWQKK3NvY2tzdGF0cyhzbGlycF9zdGF0ZV90ICpzKQogewogCWNoYXIgYnVmZlsy NTZdOwogCWludCBuOwpAQCAtMzAzLDcgKzMxNCw3IEBACiAJbHByaW50KAogCSAgICJQcm90b1tz dGF0ZV0gICAgIFNvY2sgICAgIExvY2FsIEFkZHJlc3MsIFBvcnQgIFJlbW90ZSBBZGRyZXNzLCBQ b3J0IFJlY3ZRIFNlbmRRXHJcbiIpOwogCi0JZm9yIChzbyA9IHRjYi5zb19uZXh0OyBzbyAhPSAm dGNiOyBzbyA9IHNvLT5zb19uZXh0KSB7CisJZm9yIChzbyA9IHMtPnRjYi5zb19uZXh0OyBzbyAh PSAmcy0+dGNiOyBzbyA9IHNvLT5zb19uZXh0KSB7CiAKIAkJbiA9IHNwcmludGYoYnVmZiwgInRj cFslc10iLCBzby0+c29fdGNwY2I/dGNwc3RhdGVzW3NvLT5zb190Y3BjYi0+dF9zdGF0ZV06Ik5P TkUiKTsKIAkJd2hpbGUgKG4gPCAxNykKQEAgLTMxNyw5ICszMjgsOSBAQAogCQkJCXNvLT5zb19y Y3Yuc2JfY2MsIHNvLT5zb19zbmQuc2JfY2MpOwogCX0KIAotCWZvciAoc28gPSB1ZGIuc29fbmV4 dDsgc28gIT0gJnVkYjsgc28gPSBzby0+c29fbmV4dCkgeworCWZvciAoc28gPSBzLT51ZGIuc29f bmV4dDsgc28gIT0gJnMtPnVkYjsgc28gPSBzby0+c29fbmV4dCkgewogCi0JCW4gPSBzcHJpbnRm KGJ1ZmYsICJ1ZHBbJWQgc2VjXSIsIChzby0+c29fZXhwaXJlIC0gY3VydGltZSkgLyAxMDAwKTsK KwkJbiA9IHNwcmludGYoYnVmZiwgInVkcFslZCBzZWNdIiwgKHNvLT5zb19leHBpcmUgLSBzLT5j dXJ0aW1lKSAvIDEwMDApOwogCQl3aGlsZSAobiA8IDE3KQogCQkgICBidWZmW24rK10gPSAnICc7 CiAJCWJ1ZmZbMTddID0gMDsKQEAgLTMzMSw2ICszNDIsNyBAQAogCQkJCXNvLT5zb19yY3Yuc2Jf Y2MsIHNvLT5zb19zbmQuc2JfY2MpOwogCX0KIH0KKyNlbmRpZgogCiAjaWYgMAogdm9pZApAQCAt Mzc0LDMgKzM4NiwxOCBAQAogCWV4aXQoZXhpdF9zdGF0dXMpOwogfQogI2VuZGlmCisKK3ZvaWQK K3NsaXJwX3N0YXRzKHNsaXJwX3N0YXRlX3QgKnMpCit7CisjaWZkZWYgTE9HX0VOQUJMRUQKKyAg ICBpcHN0YXRzKHMpOworICAgIHRjcHN0YXRzKHMpOworICAgIHVkcHN0YXRzKHMpOworICAgIGlj bXBzdGF0cyhzKTsKKyAgICBtYnVmc3RhdHMocyk7CisgICAgc29ja3N0YXRzKHMpOworI2Vsc2UK KyAgICBmcHJpbnRmKHN0ZGVyciwgIlNMSVJQIHN0YXRpc3RpY3Mgbm90IGNvbXBpbGVkXG4iKTsK KyNlbmRpZgorfQpJbmRleDogcWVtdS9zbGlycC9kZWJ1Zy5oCj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHFlbXUu b3JpZy9zbGlycC9kZWJ1Zy5oCTIwMDctMTAtMjAgMDc6MzM6MzkuMDAwMDAwMDAwICswMDAwCisr KyBxZW11L3NsaXJwL2RlYnVnLmgJMjAwNy0xMC0yMCAxMjo1MDo0Ny4wMDAwMDAwMDAgKzAwMDAK QEAgLTM3LDE0ICszNyw0IEBACiAjZW5kaWYKIAogdm9pZCBkZWJ1Z19pbml0IF9QKChjaGFyICos IGludCkpOwotLy92b2lkIHR0eXN0YXRzIF9QKChzdHJ1Y3QgdHR5cyAqKSk7Ci12b2lkIGFsbHR0 eXN0YXRzIF9QKCh2b2lkKSk7Ci12b2lkIGlwc3RhdHMgX1AoKHZvaWQpKTsKLXZvaWQgdmpzdGF0 cyBfUCgodm9pZCkpOwotdm9pZCB0Y3BzdGF0cyBfUCgodm9pZCkpOwotdm9pZCB1ZHBzdGF0cyBf UCgodm9pZCkpOwotdm9pZCBpY21wc3RhdHMgX1AoKHZvaWQpKTsKLXZvaWQgbWJ1ZnN0YXRzIF9Q KCh2b2lkKSk7Ci12b2lkIHNvY2tzdGF0cyBfUCgodm9pZCkpOwotdm9pZCBzbGlycF9leGl0IF9Q KChpbnQpKTsKIApJbmRleDogcWVtdS9zbGlycC9pY21wX3Zhci5oCj09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHFl bXUub3JpZy9zbGlycC9pY21wX3Zhci5oCTIwMDctMTAtMjAgMDc6MzM6MzkuMDAwMDAwMDAwICsw MDAwCisrKyBxZW11L3NsaXJwL2ljbXBfdmFyLmgJMjAwNy0xMC0yMCAwODoxNzo1Mi4wMDAwMDAw MDAgKzAwMDAKQEAgLTY0LDYgKzY0LDQgQEAKIAl7ICJzdGF0cyIsIENUTFRZUEVfU1RSVUNUIH0s IFwKIH0KIAotZXh0ZXJuIHN0cnVjdCBpY21wc3RhdCBpY21wc3RhdDsKLQogI2VuZGlmCkluZGV4 OiBxZW11L3NsaXJwL2lmLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcWVtdS5vcmlnL3NsaXJwL2lmLmgJMjAw Ny0xMC0yMCAwNzozMzozOS4wMDAwMDAwMDAgKzAwMDAKKysrIHFlbXUvc2xpcnAvaWYuaAkyMDA3 LTEwLTIwIDA4OjE3OjUyLjAwMDAwMDAwMCArMDAwMApAQCAtMTMsMjAgKzEzLDYgQEAKICNkZWZp bmUgSUZfQVVUT0NPTVAJMHgwNAkvKiBBdXRvZGV0ZWN0IChkZWZhdWx0KSAqLwogI2RlZmluZSBJ Rl9OT0NJRENPTVAJMHgwOAkvKiBDSUQgY29tcHJlc3Npb24gKi8KIAotLyogTmVlZGVkIGZvciBG cmVlQlNEICovCi0jdW5kZWYgaWZfbXR1Ci1leHRlcm4gaW50CWlmX210dTsKLWV4dGVybiBpbnQJ aWZfbXJ1OwkvKiBNVFUgYW5kIE1SVSAqLwotZXh0ZXJuIGludAlpZl9jb21wOwkvKiBGbGFncyBm b3IgY29tcHJlc3Npb24gKi8KLWV4dGVybiBpbnQJaWZfbWF4bGlua2hkcjsKLWV4dGVybiBpbnQJ aWZfcXVldWVkOwkvKiBOdW1iZXIgb2YgcGFja2V0cyBxdWV1ZWQgc28gZmFyICovCi1leHRlcm4g aW50CWlmX3RocmVzaDsJLyogTnVtYmVyIG9mIHBhY2tldHMgcXVldWVkIGJlZm9yZSB3ZSBzdGFy dCBzZW5kaW5nCi0JCQkJICogKHRvIHByZXZlbnQgYWxsb2NpbmcgdG9vIG1hbnkgbWJ1ZnMpICov Ci0KLWV4dGVybglzdHJ1Y3QgbWJ1ZiBpZl9mYXN0cTsgICAgICAgICAgICAgICAgICAvKiBmYXN0 IHF1ZXVlIChmb3IgaW50ZXJhY3RpdmUgZGF0YSkgKi8KLWV4dGVybglzdHJ1Y3QgbWJ1ZiBpZl9i YXRjaHE7ICAgICAgICAgICAgICAgICAvKiBxdWV1ZSBmb3Igbm9uLWludGVyYWN0aXZlIGRhdGEg Ki8KLWV4dGVybglzdHJ1Y3QgbWJ1ZiAqbmV4dF9tOwotCiAjZGVmaW5lIGlmc19pbml0KGlmbSkg KChpZm0pLT5pZnNfbmV4dCA9IChpZm0pLT5pZnNfcHJldiA9IChpZm0pKQogCiAvKiBJbnRlcmZh Y2Ugc3RhdGlzdGljcyAqLwpJbmRleDogcWVtdS92bC5jCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHFlbXUub3Jp Zy92bC5jCTIwMDctMTAtMjAgMDc6MzM6MzkuMDAwMDAwMDAwICswMDAwCisrKyBxZW11L3ZsLmMJ MjAwNy0xMC0yMCAxNzoxNjoyNi4wMDAwMDAwMDAgKzAwMDAKQEAgLTM2MDgsMTMgKzM2MDgsMjgg QEAKIAogc3RhdGljIGludCBzbGlycF9pbml0ZWQ7CiBzdGF0aWMgVkxBTkNsaWVudFN0YXRlICpz bGlycF92YzsKK3N0YXRpYyBjb25zdCBjaGFyICp0ZnRwX3ByZWZpeDsKK3N0YXRpYyBjb25zdCBj aGFyICpib290cF9maWxlbmFtZTsKK3N0YXRpYyBjb25zdCBjaGFyICpzbGlycF9ob3N0bmFtZTsK K3N0YXRpYyB2b2lkICpzbGlycF9vcGFxdWU7CitzdGF0aWMgY2hhciBzbGlycF9uZXR3b3JrWzMy XTsKIAotaW50IHNsaXJwX2Nhbl9vdXRwdXQodm9pZCkKK3ZvaWQgc2xpcnBfbWF5YmVfaW5pdCh2 b2lkKQoreworICAgIGlmICghc2xpcnBfaW5pdGVkKSB7CisgICAgICAgIHNsaXJwX2luaXRlZCA9 IDE7CisgICAgICAgIHNwcmludGYoc2xpcnBfbmV0d29yaywgIjEwLjAuJWQuMCIsIHNsaXJwX3Zj LT52bGFuLT5pZCArIDIpOworICAgICAgICBzbGlycF9vcGFxdWUgPSBzbGlycF9pbml0KHNsaXJw X3ZjLCBzbGlycF9ob3N0bmFtZSwgdGZ0cF9wcmVmaXgsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc2xpcnBfbmV0d29yayk7CisgICAgfQorfQorCitpbnQgc2xpcnBfY2FuX291 dHB1dCh2b2lkICp1c2VyKQogewogICAgIHJldHVybiAhc2xpcnBfdmMgfHwgcWVtdV9jYW5fc2Vu ZF9wYWNrZXQoc2xpcnBfdmMpOwogfQogCi12b2lkIHNsaXJwX291dHB1dChjb25zdCB1aW50OF90 ICpwa3QsIGludCBwa3RfbGVuKQordm9pZCBzbGlycF9vdXRwdXQodm9pZCAqdXNlciwgY29uc3Qg dWludDhfdCAqcGt0LCBpbnQgcGt0X2xlbikKIHsKICNpZiAwCiAgICAgcHJpbnRmKCJzbGlycCBv dXRwdXQ6XG4iKTsKQEAgLTM2MzEsMTcgKzM2NDYsMTMgQEAKICAgICBwcmludGYoInNsaXJwIGlu cHV0OlxuIik7CiAgICAgaGV4X2R1bXAoc3Rkb3V0LCBidWYsIHNpemUpOwogI2VuZGlmCi0gICAg c2xpcnBfaW5wdXQoYnVmLCBzaXplKTsKKyAgICBzbGlycF9pbnB1dChzbGlycF9vcGFxdWUsIGJ1 Ziwgc2l6ZSk7CiB9CiAKIHN0YXRpYyBpbnQgbmV0X3NsaXJwX2luaXQoVkxBTlN0YXRlICp2bGFu KQogewotICAgIGlmICghc2xpcnBfaW5pdGVkKSB7Ci0gICAgICAgIHNsaXJwX2luaXRlZCA9IDE7 Ci0gICAgICAgIHNsaXJwX2luaXQoKTsKLSAgICB9Ci0gICAgc2xpcnBfdmMgPSBxZW11X25ld192 bGFuX2NsaWVudCh2bGFuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xp cnBfcmVjZWl2ZSwgTlVMTCwgTlVMTCk7CisgICAgc2xpcnBfdmMgPSBxZW11X25ld192bGFuX2Ns aWVudCh2bGFuLCBzbGlycF9yZWNlaXZlLCBOVUxMLCBOVUxMKTsKKyAgICBzbGlycF9tYXliZV9p bml0KCk7CiAgICAgc25wcmludGYoc2xpcnBfdmMtPmluZm9fc3RyLCBzaXplb2Yoc2xpcnBfdmMt PmluZm9fc3RyKSwgInVzZXIgcmVkaXJlY3RvciIpOwogICAgIHJldHVybiAwOwogfQpAQCAtMzY1 NCwxMSArMzY2NSw3IEBACiAgICAgc3RydWN0IGluX2FkZHIgZ3Vlc3RfYWRkcjsKICAgICBpbnQg aG9zdF9wb3J0LCBndWVzdF9wb3J0OwogCi0gICAgaWYgKCFzbGlycF9pbml0ZWQpIHsKLSAgICAg ICAgc2xpcnBfaW5pdGVkID0gMTsKLSAgICAgICAgc2xpcnBfaW5pdCgpOwotICAgIH0KLQorICAg IHNsaXJwX21heWJlX2luaXQoKTsKICAgICBwID0gcmVkaXJfc3RyOwogICAgIGlmIChnZXRfc3Ry X3NlcChidWYsIHNpemVvZihidWYpLCAmcCwgJzonKSA8IDApCiAgICAgICAgIGdvdG8gZmFpbDsK QEAgLTM2ODgsNyArMzY5NSw4IEBACiAgICAgaWYgKHIgPT0gcCkKICAgICAgICAgZ290byBmYWls OwogCi0gICAgaWYgKHNsaXJwX3JlZGlyKGlzX3VkcCwgaG9zdF9wb3J0LCBndWVzdF9hZGRyLCBn dWVzdF9wb3J0KSA8IDApIHsKKyAgICBpZiAoc2xpcnBfcmVkaXIoc2xpcnBfb3BhcXVlLCBpc191 ZHAsIGhvc3RfcG9ydCwgZ3Vlc3RfYWRkciwKKyAgICAgICAgICAgICAgICAgICAgZ3Vlc3RfcG9y dCkgPCAwKSB7CiAgICAgICAgIGZwcmludGYoc3RkZXJyLCAicWVtdTogY291bGQgbm90IHNldCB1 cCByZWRpcmVjdGlvblxuIik7CiAgICAgICAgIGV4aXQoMSk7CiAgICAgfQpAQCAtMzczMiwxMSAr Mzc0MCw3IEBACiAgICAgY2hhciBzbWJfY21kbGluZVsxMDI0XTsKICAgICBGSUxFICpmOwogCi0g ICAgaWYgKCFzbGlycF9pbml0ZWQpIHsKLSAgICAgICAgc2xpcnBfaW5pdGVkID0gMTsKLSAgICAg ICAgc2xpcnBfaW5pdCgpOwotICAgIH0KLQorICAgIHNsaXJwX21heWJlX2luaXQoKTsKICAgICAv KiBYWFg6IGJldHRlciB0bXAgZGlyIGNvbnN0cnVjdGlvbiAqLwogICAgIHNucHJpbnRmKHNtYl9k aXIsIHNpemVvZihzbWJfZGlyKSwgIi90bXAvcWVtdS1zbWIuJWQiLCBnZXRwaWQoKSk7CiAgICAg aWYgKG1rZGlyKHNtYl9kaXIsIDA3MDApIDwgMCkgewpAQCAtMzc3NywxMCArMzc4MSwxNCBAQAog ICAgIHNucHJpbnRmKHNtYl9jbWRsaW5lLCBzaXplb2Yoc21iX2NtZGxpbmUpLCAiJXMgLXMgJXMi LAogICAgICAgICAgICAgIFNNQkRfQ09NTUFORCwgc21iX2NvbmYpOwogCi0gICAgc2xpcnBfYWRk X2V4ZWMoMCwgc21iX2NtZGxpbmUsIDQsIDEzOSk7CisgICAgc2xpcnBfYWRkX2V4ZWMoc2xpcnBf b3BhcXVlLCAwLCBzbWJfY21kbGluZSwgNCwgMTM5KTsKIH0KIAogI2VuZGlmIC8qICFkZWZpbmVk KF9XSU4zMikgKi8KK3ZvaWQgZG9faW5mb19zbGlycCh2b2lkKQoreworICAgIHNsaXJwX3N0YXRz KHNsaXJwX29wYXF1ZSk7Cit9CiAKICNlbmRpZiAvKiBDT05GSUdfU0xJUlAgKi8KIApAQCAtNDYw MCw4ICs0NjA4LDggQEAKICAgICB9IGVsc2UKICNpZmRlZiBDT05GSUdfU0xJUlAKICAgICBpZiAo IXN0cmNtcChkZXZpY2UsICJ1c2VyIikpIHsKLSAgICAgICAgaWYgKGdldF9wYXJhbV92YWx1ZShi dWYsIHNpemVvZihidWYpLCAiaG9zdG5hbWUiLCBwKSkgewotICAgICAgICAgICAgcHN0cmNweShz bGlycF9ob3N0bmFtZSwgc2l6ZW9mKHNsaXJwX2hvc3RuYW1lKSwgYnVmKTsKKyAgICAgICAgaWYg KGdldF9wYXJhbV92YWx1ZShidWYsIHNpemVvZihidWYpLCAiaG9zdG5hbWUiLCBwKSA8PSAwKSB7 CisgICAgICAgICAgICBzbGlycF9ob3N0bmFtZSA9IHN0cmR1cChidWYpOwogICAgICAgICB9CiAg ICAgICAgIHZsYW4tPm5iX2hvc3RfZGV2cysrOwogICAgICAgICByZXQgPSBuZXRfc2xpcnBfaW5p dCh2bGFuKTsKQEAgLTY4MjMsNyArNjgzMSw3IEBACiAjZW5kaWYKICNpZiBkZWZpbmVkKENPTkZJ R19TTElSUCkKICAgICBpZiAoc2xpcnBfaW5pdGVkKSB7Ci0gICAgICAgIHNsaXJwX3NlbGVjdF9m aWxsKCZuZmRzLCAmcmZkcywgJndmZHMsICZ4ZmRzKTsKKyAgICAgICAgc2xpcnBfc2VsZWN0X2Zp bGwoc2xpcnBfb3BhcXVlLCAmbmZkcywgJnJmZHMsICZ3ZmRzLCAmeGZkcyk7CiAgICAgfQogI2Vu ZGlmCiAgICAgcmV0ID0gc2VsZWN0KG5mZHMgKyAxLCAmcmZkcywgJndmZHMsICZ4ZmRzLCAmdHYp OwpAQCAtNjg1Nyw3ICs2ODY1LDcgQEAKICAgICAgICAgICAgIEZEX1pFUk8oJndmZHMpOwogICAg ICAgICAgICAgRkRfWkVSTygmeGZkcyk7CiAgICAgICAgIH0KLSAgICAgICAgc2xpcnBfc2VsZWN0 X3BvbGwoJnJmZHMsICZ3ZmRzLCAmeGZkcyk7CisgICAgICAgIHNsaXJwX3NlbGVjdF9wb2xsKHNs aXJwX29wYXF1ZSwgJnJmZHMsICZ3ZmRzLCAmeGZkcyk7CiAgICAgfQogI2VuZGlmCiAgICAgcWVt dV9haW9fcG9sbCgpOwpJbmRleDogcWVtdS92bC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHFlbXUub3JpZy92 bC5oCTIwMDctMTAtMjAgMDc6MzM6MzkuMDAwMDAwMDAwICswMDAwCisrKyBxZW11L3ZsLmgJMjAw Ny0xMC0yMCAwODoxNzo1Mi4wMDAwMDAwMDAgKzAwMDAKQEAgLTE4Myw3ICsxODMsNiBAQAogZXh0 ZXJuIGludCBzZW1paG9zdGluZ19lbmFibGVkOwogZXh0ZXJuIGludCBhdXRvc3RhcnQ7CiBleHRl cm4gaW50IG9sZF9wYXJhbTsKLWV4dGVybiBjb25zdCBjaGFyICpib290cF9maWxlbmFtZTsKIAog I2RlZmluZSBNQVhfT1BUSU9OX1JPTVMgMTYKIGV4dGVybiBjb25zdCBjaGFyICpvcHRpb25fcm9t W01BWF9PUFRJT05fUk9NU107CkBAIC00MzksNiArNDM4LDkgQEAKIGV4dGVybiBpbnQgbmJfbmlj czsKIGV4dGVybiBOSUNJbmZvIG5kX3RhYmxlW01BWF9OSUNTXTsKIAorLyogU0xJUlAgKi8KK3Zv aWQgZG9faW5mb19zbGlycCh2b2lkKTsKKwogLyogdGltZXJzICovCiAKIHR5cGVkZWYgc3RydWN0 IFFFTVVDbG9jayBRRU1VQ2xvY2s7CkluZGV4OiBxZW11L21vbml0b3IuYwo9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t LSBxZW11Lm9yaWcvbW9uaXRvci5jCTIwMDctMTAtMjAgMDc6MzM6MzkuMDAwMDAwMDAwICswMDAw CisrKyBxZW11L21vbml0b3IuYwkyMDA3LTEwLTIwIDA4OjE3OjUyLjAwMDAwMDAwMCArMDAwMApA QCAtMTM2NSw2ICsxMzY1LDEwIEBACiAgICAgeyAiY3B1c3RhdHMiLCAiIiwgZG9faW5mb19jcHVf c3RhdHMsCiAgICAgICAiIiwgInNob3cgQ1BVIHN0YXRpc3RpY3MiLCB9LAogI2VuZGlmCisjaWYg ZGVmaW5lZChDT05GSUdfU0xJUlApCisgICAgeyAic2xpcnAiLCAiIiwgZG9faW5mb19zbGlycCwK KyAgICAgICIiLCAic2hvdyBTTElSUCBzdGF0aXN0aWNzIiwgfSwKKyNlbmRpZgogICAgIHsgTlVM TCwgTlVMTCwgfSwKIH07CiAK ------=_Part_11267_18197215.1192905727825--