From owner-freebsd-hackers@FreeBSD.ORG Mon Jun 12 12:49:52 2006 Return-Path: X-Original-To: freebsd-hackers@freebsd.org Delivered-To: freebsd-hackers@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 72C0A16A477 for ; Mon, 12 Jun 2006 12:49:52 +0000 (UTC) (envelope-from betogigi@gmail.com) Received: from nz-out-0102.google.com (nz-out-0102.google.com [64.233.162.201]) by mx1.FreeBSD.org (Postfix) with ESMTP id 1648E43E17 for ; Mon, 12 Jun 2006 12:48:38 +0000 (GMT) (envelope-from betogigi@gmail.com) Received: by nz-out-0102.google.com with SMTP id 13so1141685nzp for ; Mon, 12 Jun 2006 05:48:27 -0700 (PDT) DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=beta; d=gmail.com; h=received:message-id:date:from:to:subject:mime-version:content-type; b=AUJGIgWct0VBWCj81/cPCrpGpNgdYvJrFffCufly/ZFxxQUeoQ2lDC48zRNLmP3L8pWcwaBLRpRx1TPK6MHbcF31EfQ+GEGarad8CHi8ge8XFofVqpgNnKTxQPP1yyDwjtJDgnN+pWbkP96HoZQnjSTUMo/vWJ6TSi8OxuH6xNE= Received: by 10.36.118.11 with SMTP id q11mr8641703nzc; Mon, 12 Jun 2006 05:48:27 -0700 (PDT) Received: by 10.36.135.19 with HTTP; Mon, 12 Jun 2006 05:48:26 -0700 (PDT) Message-ID: Date: Mon, 12 Jun 2006 09:48:26 -0300 From: "Roberto Lima" To: freebsd-hackers@freebsd.org MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_1853_19119760.1150116506221" Subject: Re: Jail-Aware Scheduling X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 12 Jun 2006 12:49:52 -0000 ------=_Part_1853_19119760.1150116506221 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline Hi all, i have a patch from freebsd 4.x not developed for me, but this is very good for appreciate and or upgrade the patch for versions 5.x 6.x or current. This use sysctl oids to limit memory ram and cpu use. Regards and sorry for my bad english, Roberto Lima. ------=_Part_1853_19119760.1150116506221 Content-Type: application/octet-stream; name=jail_seperation.v7.patch Content-Transfer-Encoding: base64 X-Attachment-Id: f_eoctn9x4 Content-Disposition: attachment; filename="jail_seperation.v7.patch" ZGlmZiAtdXIgc3JjLnZpcmdpbi9zeXMva2Vybi9rZXJuX2ZvcmsuYyBzcmMuZGlydHkvc3lzL2tl cm4va2Vybl9mb3JrLmMKLS0tIHNyYy52aXJnaW4vc3lzL2tlcm4va2Vybl9mb3JrLmMJTW9uIERl YyAgOSAxOTozMzo0NCAyMDAyCisrKyBzcmMuZGlydHkvc3lzL2tlcm4va2Vybl9mb3JrLmMJVGh1 IEZlYiAyNyAxNzozODozMiAyMDAzCkBAIC0xMjAsNiArMTIwLDExIEBACiAJaW50IGVycm9yOwog CXN0cnVjdCBwcm9jICpwMjsKIAorCWVycm9yID0gamFpbF9jaGVja19yZXNvdXJjZXModGQpOwor CWlmIChlcnJvcikgeworCQlyZXR1cm4gZXJyb3I7CisJfQorCQkKIAltdHhfbG9jaygmR2lhbnQp OwogCWVycm9yID0gZm9yazEodGQsIFJGRkRHIHwgUkZQUk9DLCAwLCAmcDIpOwogCWlmIChlcnJv ciA9PSAwKSB7CkBAIC0xNDIsNiArMTQ3LDExIEBACiAJaW50IGVycm9yOwogCXN0cnVjdCBwcm9j ICpwMjsKIAorCWVycm9yID0gamFpbF9jaGVja19yZXNvdXJjZXModGQpOworCWlmIChlcnJvcikg eworCQlyZXR1cm4gZXJyb3I7CisJfQorCiAJbXR4X2xvY2soJkdpYW50KTsKIAllcnJvciA9IGZv cmsxKHRkLCBSRkZERyB8IFJGUFJPQyB8IFJGUFBXQUlUIHwgUkZNRU0sIDAsICZwMik7CiAJaWYg KGVycm9yID09IDApIHsKQEAgLTE2Miw2ICsxNzIsMTEgQEAKIHsKIAlpbnQgZXJyb3I7CiAJc3Ry dWN0IHByb2MgKnAyOworCisJZXJyb3IgPSBqYWlsX2NoZWNrX3Jlc291cmNlcyh0ZCk7CisJaWYg KGVycm9yKSB7CisJCXJldHVybiBlcnJvcjsKKwl9CiAKIAkvKiBEb24ndCBhbGxvdyBrZXJuZWwg b25seSBmbGFncy4gKi8KIAlpZiAoKHVhcC0+ZmxhZ3MgJiBSRktFUk5FTE9OTFkpICE9IDApCmRp ZmYgLXVyIHNyYy52aXJnaW4vc3lzL2tlcm4va2Vybl9qYWlsLmMgc3JjLmRpcnR5L3N5cy9rZXJu L2tlcm5famFpbC5jCi0tLSBzcmMudmlyZ2luL3N5cy9rZXJuL2tlcm5famFpbC5jCVRodSBEZWMg MTkgMDI6NDA6MTAgMjAwMgorKysgc3JjLmRpcnR5L3N5cy9rZXJuL2tlcm5famFpbC5jCVNhdCBN YXIgMjIgMTM6MjU6MzkgMjAwMwpAQCAtMTgsNiArMTgsMTEgQEAKICNpbmNsdWRlIDxzeXMvc3lz cHJvdG8uaD4KICNpbmNsdWRlIDxzeXMvbWFsbG9jLmg+CiAjaW5jbHVkZSA8c3lzL3Byb2MuaD4K KyNpbmNsdWRlIDx2bS92bS5oPgorI2luY2x1ZGUgPHZtL3ZtX2V4dGVybi5oPgorI2luY2x1ZGUg PHZtL3ZtX3BhZ2UuaD4KKyNpbmNsdWRlIDx2bS92bV9vYmplY3QuaD4KKyNpbmNsdWRlIDx2bS92 bV9tYXAuaD4KICNpbmNsdWRlIDxzeXMvamFpbC5oPgogI2luY2x1ZGUgPHN5cy9sb2NrLmg+CiAj aW5jbHVkZSA8c3lzL211dGV4Lmg+CkBAIC0yNSw2ICszMCwxMCBAQAogI2luY2x1ZGUgPHN5cy9z eXNjdGwuaD4KICNpbmNsdWRlIDxuZXQvaWYuaD4KICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Cisj aW5jbHVkZSA8c3lzL3NidWYuaD4KKyNpbmNsdWRlIDxzeXMvc2NoZWQuaD4KKyNpbmNsdWRlIDxz eXMvdm5vZGUuaD4KKyNpbmNsdWRlIDxzeXMvbW91bnQuaD4KIAogTUFMTE9DX0RFRklORShNX1BS SVNPTiwgInByaXNvbiIsICJQcmlzb24gc3RydWN0dXJlcyIpOwogCkBAIC00OSw2ICs1OCwxMTgg QEAKICAgICAmamFpbF9zeXN2aXBjX2FsbG93ZWQsIDAsCiAgICAgIlByb2Nlc3NlcyBpbiBqYWls IGNhbiB1c2UgU3lzdGVtIFYgSVBDIHByaW1pdGl2ZXMiKTsKIAoraW50IGphaWxfcXVvdGFzX2Fs bG93ZWQgPSAwOworU1lTQ1RMX0lOVChfc2VjdXJpdHlfamFpbCwgT0lEX0FVVE8sIHF1b3Rhc19h bGxvd2VkLCBDVExGTEFHX1JXLCAmamFpbF9xdW90YXNfYWxsb3dlZCwgMCwKKyAgICAiUHJvY2Vz c2VzIGhhdmUgYWNjZXNzIHRvIHRoZSBxdW90YSBzeXN0ZW0uIik7CisKK2ludAlqYWlsX2hpZGVf cHJvY2Vzc2VzID0gMDsKK1NZU0NUTF9JTlQoX3NlY3VyaXR5X2phaWwsIE9JRF9BVVRPLCBoaWRl X3Byb2Nlc3NlcywgQ1RMRkxBR19SVywKKyAgICAmamFpbF9oaWRlX3Byb2Nlc3NlcywgMCwKKyAg ICAiUHJvY2Vzc2VzIGluIGphaWwgYXJlIG5vdCB2aXNpYmxlIG91dHNpZGUgdGhlIGphaWwgKGV4 Y2VwdCB0byByb290KSIpOworCitpbnQJamFpbF9oaWRlX2ZpbGVzID0gMDsKK1NZU0NUTF9JTlQo X3NlY3VyaXR5X2phaWwsIE9JRF9BVVRPLCBoaWRlX2ZpbGVzLCBDVExGTEFHX1JXLAorICAgICZq YWlsX2hpZGVfZmlsZXMsIDAsCisgICAgIkZpbGVzIGluIGphaWwgYXJlIG5vdCB2aXNpYmxlIG91 dHNpZGUgdGhlIGphaWwgKGV4Y2VwdCB0byByb290KSIpOworCitzdHJ1Y3QgamFpbHMgZmlyc3Rq YWlsID0gTElTVF9IRUFEX0lOSVRJQUxJWkVSKGphaWxzKTsKKworU1lTQ1RMX05PREUoLCBPSURf QVVUTywgamFpbCwgQ1RMRkxBR19SRCwgMCwgImphaWwgcGFyYW1ldGVycyIpOworU1lTQ1RMX05P REUoX2phaWwsIE9JRF9BVVRPLCBqYWlscywgQ1RMRkxBR19SRCwgMCwgInBlci1qYWlsIHNldHRp bmdzIik7CisKK2ludCBqYWlsX2lwdjRhZGRyX3N5c2N0bChTWVNDVExfSEFORExFUl9BUkdTKTsK KworaW50CitqYWlsX2lwdjRhZGRyX3N5c2N0bChTWVNDVExfSEFORExFUl9BUkdTKQoreworCWlu dCBlcnJvciwgaSA9IDAsIGogPSAwLCBrLCBpcG1vZGU7CisJY2hhciBidWZbMTAyNF0sICp0bXBw dHIsICp0bXBidWYsICp0bXBidWYyOworCXN0cnVjdCBwcmlzb24gKnByID0gKHN0cnVjdCBwcmlz b24qKShvaWRwLT5vaWRfYXJnMSk7CisJdV9pbnQzMl90ICppcHNfbmV3OworCWluX2FkZHJfdCBh ZGRyOworCXN0cnVjdCBzYnVmICpzYjsKKwlzdHJ1Y3QgaW5fYWRkciBpbmFkZHI7CisJdW5zaWdu ZWQgbG9uZyBpcGVsZW1lbnRbNF07CisKKwkvKiBTcGl0IG91dCBhbGwgSVAgYWRkcmVzc2VzIGlu IGphaWwuICovCisJc2IgPSBzYnVmX25ldyhOVUxMLCBOVUxMLCAxMDI0LCBTQlVGX0FVVE9FWFRF TkQpOworCWZvciAoaSA9IDA7IGkgPCBwci0+cHJfbmlwczsgaSsrKSB7CisJCWluYWRkci5zX2Fk ZHIgPSBudG9obChwci0+cHJfaXBzW2ldKTsKKwkJc2J1Zl9wcmludGYoc2IsICIlcyIsIGluZXRf bnRvYShpbmFkZHIpKTsKKwkJaWYgKGkgIT0gcHItPnByX25pcHMgLSAxKSB7CisJCQlzYnVmX3By aW50ZihzYiwgIiwiKTsKKwkJfQorCX0KKwlzYnVmX2ZpbmlzaChzYik7CisJc3RybGNweShidWYs IHNidWZfZGF0YShzYiksIHNpemVvZihidWYpKTsKKwllcnJvciA9IHN5c2N0bF9oYW5kbGVfc3Ry aW5nKG9pZHAsICZidWZbMF0sIHNpemVvZihidWYpLCByZXEpOworCXNidWZfZGVsZXRlKHNiKTsK KworCWlmIChlcnJvciA9PSAwICYmIHJlcS0+bmV3cHRyICE9IE5VTEwpIHsKKwkJaWYgKGJ1Zlsw XSA9PSAnKycgfHwgKGJ1ZlswXSA+PSA0OCAmJiBidWZbMF0gPD0gNTcpKSB7CisJCQlpcG1vZGUg PSAwOworCQkJTUFMTE9DKGlwc19uZXcsIHVfaW50MzJfdCAqLCBzaXplb2YodV9pbnQzMl90KSAq IChwci0+cHJfbmlwcyArIDEpLCBNX1BSSVNPTiwgTV9XQUlUT0spOworCQkJbWVtY3B5KGlwc19u ZXcsIHByLT5wcl9pcHMsIHNpemVvZih1X2ludDMyX3QpICogKHByLT5wcl9uaXBzKSk7CisJCX0g ZWxzZSBpZiAoYnVmWzBdID09ICctJykgeworCQkJaXBtb2RlID0gMTsKKwkJCWlmIChwci0+cHJf bmlwcyA9PSAxKSB7CisJCQkJcmV0dXJuIEVJTlZBTDsKKwkJCX0KKwkJCU1BTExPQyhpcHNfbmV3 LCB1X2ludDMyX3QgKiwgc2l6ZW9mKHVfaW50MzJfdCkgKiAocHItPnByX25pcHMgLSAxKSwgTV9Q UklTT04sIE1fV0FJVE9LKTsKKwkJfSBlbHNlIHsKKwkJCXJldHVybiBFSU5WQUw7CisJCX0KKwor CQkvKiBTaW11bGF0ZSBpbmV0X2F0b24gKnNpZ2gqLiAqLworCQl0bXBwdHIgPSAoY2hhciopJmFk ZHI7CisJCWlmIChidWZbMF0gPT0gJysnIHx8IGJ1ZlswXSA9PSAnLScpIHsKKwkJCXRtcGJ1ZjIg PSBidWYgKyAxOworCQl9IGVsc2UgeworCQkJdG1wYnVmMiA9IGJ1ZjsKKwkJfQorCQl0bXBidWYg PSB0bXBidWYyOworCQl3aGlsZSgqdG1wYnVmKSB7CisJCQkvKiBGaXJzdCBwYXNzOiByZXBsYWNl ICcuJyB3aXRoICdcMCcuICovCisJCQlpZiAoKnRtcGJ1ZiA9PSAnLicpIHsKKwkJCQlpKys7CisJ CQkJKnRtcGJ1ZiA9ICdcMCc7CisJCQl9CisJCQl0bXBidWYrKzsKKwkJfQorCQl0bXBidWYgPSB0 bXBidWYyOworCQlmb3IoaiA9IDA7IGogPD0gaTsgaisrKSB7CisJCQkvKiBTZWNvbmQgcGFzczog ZmlsbCBhZGRyLiAqLworCQkJaXBlbGVtZW50W2pdID0gc3RydG91bCh0bXBidWYsIE5VTEwsIDEw KTsKKwkJCWsgPSBzdHJsZW4odG1wYnVmKTsKKwkJCXRtcGJ1ZiArPSBrICsgMTsKKwkJfQorCQlh ZGRyID0gaXBlbGVtZW50WzNdOworCQlhZGRyIHw9IChpcGVsZW1lbnRbMF0gPDwgMjQpIHwgKGlw ZWxlbWVudFsxXSA8PCAxNikgfCAoaXBlbGVtZW50WzJdIDw8IDgpOworCisJCS8qIFBlcmZvcm0g YWRkL2RlbGV0ZSAqLworCQltdHhfbG9jaygmcHItPnByX210eCk7CisJCWlmIChpcG1vZGUgPT0g MCkgeworCQkJaXBzX25ld1twci0+cHJfbmlwc10gPSBhZGRyOworCQkJcHItPnByX25pcHMrKzsK KwkJfSBlbHNlIHsKKwkJCWkgPSAwOworCQkJZm9yIChqID0gMDsgaiA8IHByLT5wcl9uaXBzOyBq KyspIHsKKwkJCQlpZiAoYWRkciAhPSBwci0+cHJfaXBzW2pdKSB7CisJCQkJCWlwc19uZXdbaV0g PSBwci0+cHJfaXBzW2pdOworCQkJCQlpKys7CisJCQkJfQorCQkJfQorCQkJcHItPnByX25pcHMt LTsKKwkJfQorCQlGUkVFKHByLT5wcl9pcHMsIE1fUFJJU09OKTsKKwkJcHItPnByX2lwcyA9IGlw c19uZXc7CisJCW10eF91bmxvY2soJnByLT5wcl9tdHgpOworCisJfQorCisJcmV0dXJuIGVycm9y OworfQorCiAvKgogICogTVBTQUZFCiAgKi8KQEAgLTYwLDE2ICsxODEsMTggQEAKIAl9ICovICp1 YXA7CiB7CiAJc3RydWN0IHByb2MgKnAgPSB0ZC0+dGRfcHJvYzsKLQlpbnQgZXJyb3I7CisJaW50 IGVycm9yLCBzaXplID0gMDsKIAlzdHJ1Y3QgcHJpc29uICpwcjsKIAlzdHJ1Y3QgamFpbCBqOwog CXN0cnVjdCBjaHJvb3RfYXJncyBjYTsKIAlzdHJ1Y3QgdWNyZWQgKm5ld2NyZWQgPSBOVUxMLCAq b2xkY3JlZDsKKwlzdHJ1Y3QgamFpbGVsZW1lbnQgKnRtcGVsZW1lbnQ7CisJY2hhciAqdG1wU3Ry aW5nOwogCiAJZXJyb3IgPSBjb3B5aW4odWFwLT5qYWlsLCAmaiwgc2l6ZW9mIGopOwogCWlmIChl cnJvcikKIAkJcmV0dXJuIChlcnJvcik7Ci0JaWYgKGoudmVyc2lvbiAhPSAwKQorCWlmIChqLnZl cnNpb24gIT0gMSkKIAkJcmV0dXJuIChFSU5WQUwpOwogCiAJTUFMTE9DKHByLCBzdHJ1Y3QgcHJp c29uICosIHNpemVvZiAqcHIgLCBNX1BSSVNPTiwgTV9XQUlUT0sgfCBNX1pFUk8pOwpAQCAtODUs NyArMjA4LDE2IEBACiAJaWYgKGVycm9yKQogCQlnb3RvIGJhaWw7CiAJbmV3Y3JlZCA9IGNyZ2V0 KCk7Ci0JcHItPnByX2lwID0gai5pcF9udW1iZXI7CisKKwlNQUxMT0MocHItPnByX2lwcywgdV9p bnQzMl90ICosIHNpemVvZih1X2ludDMyX3QpICogai5uaXBzLCBNX1BSSVNPTiwKKwkgICAgTV9X QUlUT0spOworCWVycm9yID0gY29weWluKGouaXBzLCBwci0+cHJfaXBzLCBzaXplb2YodV9pbnQz Ml90KSAqIGoubmlwcyk7CisJaWYgKGVycm9yKSB7CisJCUZSRUUocHItPnByX2lwcywgTV9QUklT T04pOworCQlnb3RvIGJhaWw7CisJfQorCXByLT5wcl9uaXBzID0gai5uaXBzOworCiAJUFJPQ19M T0NLKHApOwogCS8qIEltcGxpY2l0bHkgZmFpbCBpZiBhbHJlYWR5IGluIGphaWwuICAqLwogCWVy cm9yID0gc3VzZXJfY3JlZChwLT5wX3VjcmVkLCAwKTsKQEAgLTk2LDYgKzIyOCw0OCBAQAogCXAt PnBfdWNyZWQgPSBuZXdjcmVkOwogCXAtPnBfdWNyZWQtPmNyX3ByaXNvbiA9IHByOwogCXByLT5w cl9yZWYgPSAxOworCisJLyogQWRkIGphaWwgdG8gbGlzdC4gKi8KKwlNQUxMT0ModG1wZWxlbWVu dCwgc3RydWN0IGphaWxlbGVtZW50Kiwgc2l6ZW9mKHN0cnVjdCBqYWlsZWxlbWVudCksIE1fUFJJ U09OLCBNX1dBSVRPSyB8IE1fWkVSTyk7CisJdG1wZWxlbWVudC0+cHIgPSBwcjsKKwlNQUxMT0Mo dG1wZWxlbWVudC0+Y2hyb290X3BhdGgsIGNoYXIgKiwgc3RybGVuKGoucGF0aCkgKyAxLCBNX1BS SVNPTiwgTV9XQUlUT0spOworCWNvcHlpbnN0cihqLnBhdGgsIHRtcGVsZW1lbnQtPmNocm9vdF9w YXRoLCBzdHJsZW4oai5wYXRoKSArIDEsICZzaXplKTsKKwlMSVNUX0lOU0VSVF9IRUFEKCZmaXJz dGphaWwsIHRtcGVsZW1lbnQsIHBvaW50ZXJzKTsKKworCS8qIEFkZCBzeXNjdGxzLiAqLworCXN0 cmNweShwci0+cHJfaG9zdF9vaWQsIHByLT5wcl9ob3N0KTsKKwl0bXBTdHJpbmcgPSBwci0+cHJf aG9zdF9vaWQ7CisJd2hpbGUoKnRtcFN0cmluZykgeworCQlpZiAoKnRtcFN0cmluZyA9PSAnLicp IHsKKwkJCSp0bXBTdHJpbmcgPSAnXyc7CisJCX0KKwkJdG1wU3RyaW5nKys7CisJfQorCQorCXN5 c2N0bF9jdHhfaW5pdCgmcHItPmpkX3N5c2N0bHRyZWUpOworCXByLT5qZF9zeXNjdGx0cmVldG9w ID0gU1lTQ1RMX0FERF9OT0RFKCZwci0+amRfc3lzY3RsdHJlZSwKKwkJU1lTQ1RMX1NUQVRJQ19D SElMRFJFTihfamFpbF9qYWlscyksIE9JRF9BVVRPLAorCQlwci0+cHJfaG9zdF9vaWQsIENUTEZM QUdfUkQsIDAsICJqYWlsIGhvc3RuYW1lIik7CisJU1lTQ1RMX0FERF9JTlQoJnByLT5qZF9zeXNj dGx0cmVlLCBTWVNDVExfQ0hJTERSRU4ocHItPmpkX3N5c2N0bHRyZWV0b3ApLCBPSURfQVVUTywg ImFsbG93X3Jhd19zb2NrZXRzIiwgCisJCUNUTEZMQUdfUlcsICZwci0+amFpbF9zZXR0aW5ncy5h bGxvd19yYXdfc29ja2V0cywgMCwgIkFsbG93IHJhdyBzb2NrZXRzIGluIGphaWw/Iik7CisJU1lT Q1RMX0FERF9JTlQoJnByLT5qZF9zeXNjdGx0cmVlLCBTWVNDVExfQ0hJTERSRU4ocHItPmpkX3N5 c2N0bHRyZWV0b3ApLCBPSURfQVVUTywgImFsbG93X2lwZnciLCAKKwkJQ1RMRkxBR19SVywgJnBy LT5qYWlsX3NldHRpbmdzLmFsbG93X2lwZncsIDAsICJBbGxvdyBpcGZ3IHVzZT8iKTsKKwlTWVND VExfQUREX0lOVCgmcHItPmpkX3N5c2N0bHRyZWUsIFNZU0NUTF9DSElMRFJFTihwci0+amRfc3lz Y3RsdHJlZXRvcCksIE9JRF9BVVRPLCAibWF4X3JhbSIsIAorCQlDVExGTEFHX1JXLCAmcHItPmph aWxfc2V0dGluZ3MubWF4X3JhbSwgMCwgIk1heGltdW0gUkFNIGFsbG93ZWQgZm9yIGphaWwgKDAg PSB1bmxpbWl0ZWQpIik7CisJU1lTQ1RMX0FERF9JTlQoJnByLT5qZF9zeXNjdGx0cmVlLCBTWVND VExfQ0hJTERSRU4ocHItPmpkX3N5c2N0bHRyZWV0b3ApLCBPSURfQVVUTywgIm1heF9jcHUiLCAK KwkJQ1RMRkxBR19SVywgJnByLT5qYWlsX3NldHRpbmdzLm1heF9jcHUsIDAsICJNYXhpbXVtIENQ VSBhbGxvd2VkIGZvciBqYWlsICgwID0gdW5saW1pdGVkKSIpOworCVNZU0NUTF9BRERfSU5UKCZw ci0+amRfc3lzY3RsdHJlZSwgU1lTQ1RMX0NISUxEUkVOKHByLT5qZF9zeXNjdGx0cmVldG9wKSwg T0lEX0FVVE8sICJtYXhfcHJvY3MiLCAKKwkJQ1RMRkxBR19SVywgJnByLT5qYWlsX3NldHRpbmdz Lm1heF9wcm9jcywgMCwgIk1heGltdW0gbnVtYmVyIG9mIHByb2Nlc3NlcyBhbGxvd2VkIGZvciBq YWlsICgwID0gdW5saW1pdGVkKSIpOworCVNZU0NUTF9BRERfSU5UKCZwci0+amRfc3lzY3RsdHJl ZSwgU1lTQ1RMX0NISUxEUkVOKHByLT5qZF9zeXNjdGx0cmVldG9wKSwgT0lEX0FVVE8sICJwcm9j c191c2VkIiwgCisJCUNUTEZMQUdfUkQsICZwci0+amFpbF9zZXR0aW5ncy5wcm9jc191c2VkLCAw LCAiTnVtYmVyIG9mIHByb2Nlc3NlcyBydW5uaW5nIik7CisJU1lTQ1RMX0FERF9JTlQoJnByLT5q ZF9zeXNjdGx0cmVlLCBTWVNDVExfQ0hJTERSRU4ocHItPmpkX3N5c2N0bHRyZWV0b3ApLCBPSURf QVVUTywgInJhbV91c2VkIiwgCisJCUNUTEZMQUdfUkQsICZwci0+amFpbF9zZXR0aW5ncy5yYW1f dXNlZCwgMCwgIkFtb3VudCBvZiBSQU0gdXNlZCIpOworCVNZU0NUTF9BRERfSU5UKCZwci0+amRf c3lzY3RsdHJlZSwgU1lTQ1RMX0NISUxEUkVOKHByLT5qZF9zeXNjdGx0cmVldG9wKSwgT0lEX0FV VE8sICJjcHVfdXNlZCIsIAorCQlDVExGTEFHX1JELCAmcHItPmphaWxfc2V0dGluZ3MuY3B1X3Vz ZWQsIDAsICJBbW91bnQgb2YgQ1BVIHVzZWQiKTsKKwlTWVNDVExfQUREX1BST0MoJnByLT5qZF9z eXNjdGx0cmVlLCBTWVNDVExfQ0hJTERSRU4ocHItPmpkX3N5c2N0bHRyZWV0b3ApLCBPSURfQVVU TywgCisJCSJpcHY0YWRkciIsIENUTFRZUEVfU1RSSU5HIHwgQ1RMRkxBR19SVywgcHIsIHNpemVv ZiAoc3RydWN0IHByaXNvbiksIGphaWxfaXB2NGFkZHJfc3lzY3RsLAorCQkiQSIsICJMaXN0IG9m IElQdjQgYWRkcmVzc2VzIGluIGphaWwuIik7CisKIAlQUk9DX1VOTE9DSyhwKTsKIAljcmZyZWUo b2xkY3JlZCk7CiAJcmV0dXJuICgwKTsKQEAgLTEwNywxNyArMjgxLDE1NyBAQAogCXJldHVybiAo ZXJyb3IpOwogfQogCitpbnQKK2phaWxfY2FsY3RvdGFsdXNlZChwcikKKwlzdHJ1Y3QgcHJpc29u ICpwcjsKK3sKKwlzdHJ1Y3QgcHJvYyAqcHJvY2VzczsKKwl1X2ludCB0b3RhbHJhbSA9IDA7CisJ dV9pbnQgbnVtcHJvY3MgPSAwOworCisJLyogR28gdGhyb3VnaCBldmVyeSBwcm9jZXNzIGluIHRo ZSBzeXN0ZW0gYW5kIGNhbGN1bGF0ZSAKKwkgICB0aGUgYW1vdW50IG9mIENQVSBhbmQgUkFNIHVz ZWQuICovCisJRk9SRUFDSF9QUk9DX0lOX1NZU1RFTShwcm9jZXNzKSB7CisJCWlmICghamFpbGVk KHByb2Nlc3MtPnBfdWNyZWQpKSB7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChwcm9jZXNz LT5wX3VjcmVkLT5jcl9wcmlzb24gIT0gcHIpIHsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJbnVt cHJvY3MrKzsKKwkJdG90YWxyYW0gKz0gcHJvY2Vzcy0+cF92bXNwYWNlLT52bV90c2l6ZSArIHBy b2Nlc3MtPnBfdm1zcGFjZS0+dm1fZHNpemUKKwkJICAgICsgcHJvY2Vzcy0+cF92bXNwYWNlLT52 bV9zc2l6ZTsKKwl9CisKKwltdHhfbG9jaygmcHItPnByX210eCk7CisJcHItPmphaWxfc2V0dGlu Z3MucmFtX3VzZWQgPSB0b3RhbHJhbSAqIFBBR0VfU0laRTsKKwlwci0+amFpbF9zZXR0aW5ncy5w cm9jc191c2VkID0gbnVtcHJvY3M7CisJbXR4X3VubG9jaygmcHItPnByX210eCk7CisKKwlyZXR1 cm4gMDsKK30KKworLyogVGhpcyBpcyBmcm9tIHByaW50LmMgaW4gL3Vzci9zcmMvYmluL3BzLiAq LworI2RlZmluZSBmeHRvZmwoZml4cHQpICAgKChkb3VibGUpKGZpeHB0KSAvIEZTQ0FMRSkKKwor dm9pZAoramFpbF91cGRhdGVfY3B1KHZvaWQpCit7CisJc3RydWN0IHByb2MgKnA7CisJc3RydWN0 IGphaWxlbGVtZW50ICplbGVtZW50OworCXN0cnVjdCB0aHJlYWQgKnRkOworCisJLyogSWYgbm8g amFpbHMgZXhpc3QsIGV4aXQgZnVuY3Rpb24uICovCisJaWYgKCFmaXJzdGphaWwubGhfZmlyc3Qp IHsKKwkJcmV0dXJuOworCX0KKworCS8qIENsZWFyIGphaWwgQ1BVIGNvdW50ZXJzLiAqLworCUxJ U1RfRk9SRUFDSChlbGVtZW50LCAmZmlyc3RqYWlsLCBwb2ludGVycykgeworCQllbGVtZW50LT5w ci0+amFpbF9zZXR0aW5ncy5jcHVfdXNlZCA9IDA7CisJfQorCisJLyogQ2hlY2sgYWxsIHByb2Nl c3NlcyBmb3IgQ1BVIHVzYWdlLiAqLworCUZPUkVBQ0hfUFJPQ19JTl9TWVNURU0ocCkgeworCQlG T1JFQUNIX1RIUkVBRF9JTl9QUk9DKHAsIHRkKSB7CisJCQlpZiAodGQtPnRkX2tzZSAmJiB0ZC0+ dGRfdWNyZWQtPmNyX3ByaXNvbikgeworCQkJCXRkLT50ZF91Y3JlZC0+Y3JfcHJpc29uLT5qYWls X3NldHRpbmdzLmNwdV91c2VkICs9IAorCQkJCSAgICBmeHRvZmwoc2NoZWRfcGN0Y3B1KHRkLT50 ZF9rc2UpKSAqIDEwMC4wOworCQkJfQorCQl9CisJfQorCisJLyogRXhpdCBmdW5jdGlvbi4gKi8K KwlyZXR1cm47Cit9CisKK2ludAoramFpbF9jaGVja19jcHUodWMpCisJc3RydWN0IHVjcmVkICp1 YzsKK3sKKwlpZiAodWMtPmNyX3ByaXNvbiAmJiB1Yy0+Y3JfcHJpc29uLT5qYWlsX3NldHRpbmdz LmNwdV91c2VkID49IAorCSAgICB1Yy0+Y3JfcHJpc29uLT5qYWlsX3NldHRpbmdzLm1heF9jcHUg JiYgdWMtPmNyX3ByaXNvbi0+amFpbF9zZXR0aW5ncy5tYXhfY3B1ID4gMCkgeworCQlyZXR1cm4g MTsKKwl9IGVsc2UgeworCQlyZXR1cm4gMDsKKwl9Cit9CisKK2ludAoramFpbF9jaGVja19yZXNv dXJjZXModGQpCisJc3RydWN0IHRocmVhZCAqdGQ7Cit7CisJc3RydWN0IHByaXNvbiAqcHIgPSB0 ZC0+dGRfcHJvYy0+cF91Y3JlZC0+Y3JfcHJpc29uOworICAgICAgICAKKwlpZiAocHIpIHsKKwkJ LyogRW5zdXJlIGphaWwgaXNuJ3QgdXNpbmcgbW9yZSB0aGFuIGl0IGlzIGFsbG9jYXRlZC4gKi8g CisJCWphaWxfY2FsY3RvdGFsdXNlZChwcik7CisJCWlmIChwci0+amFpbF9zZXR0aW5ncy5tYXhf cmFtID4gMCAmJiAKKwkJICAgIHByLT5qYWlsX3NldHRpbmdzLnJhbV91c2VkID4gcHItPmphaWxf c2V0dGluZ3MubWF4X3JhbSkgeworCQkJcmV0dXJuIEVOT01FTTsKKwkJfSBlbHNlIGlmIChwci0+ amFpbF9zZXR0aW5ncy5tYXhfcHJvY3MgPiAwICYmCisJCSAgICBwci0+amFpbF9zZXR0aW5ncy5w cm9jc191c2VkID4gcHItPmphaWxfc2V0dGluZ3MubWF4X3Byb2NzKSB7CisJCQlyZXR1cm4gRUFH QUlOOworCQl9IGVsc2UgaWYgKHByLT5qYWlsX3NldHRpbmdzLm1heF9jcHUgPiAwICYmICAKKwkJ ICAgIHByLT5qYWlsX3NldHRpbmdzLmNwdV91c2VkID4gcHItPmphaWxfc2V0dGluZ3MubWF4X2Nw dSkgeyAgICAKKwkJCXJldHVybiBFQUdBSU47CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKwor aW50CitqYWlsX2NoZWNrX2ZpbGVwZXJtKHZwLCBjcmVkLCB0ZCkKKwlzdHJ1Y3Qgdm5vZGUgKnZw OworCXN0cnVjdCB1Y3JlZCAqY3JlZDsKKwlzdHJ1Y3QgdGhyZWFkICp0ZDsKK3sKKwlzdHJ1Y3Qg amFpbGVsZW1lbnQgKmVsZW1lbnQ7CisKKwkvKiBJZiBmaWxlIGlzIGluIGEgcnVubmluZyBqYWls LCBhbmQgamFpbF9oaWRlX2ZpbGVzID0gMSwgZGVueSBwZXJtaXNzaW9uCisJICAgdG8gYWxsIGJ1 dCByb290LiAqLworCWlmIChqYWlsX2hpZGVfZmlsZXMgJiYgIWNyZWQtPmNyX3ByaXNvbiAmJiBj cmVkLT5jcl91aWQgPiAwKSB7CisJCUxJU1RfRk9SRUFDSChlbGVtZW50LCAmZmlyc3RqYWlsLCBw b2ludGVycykgeworCQkJaWYgKCFzdHJuY21wKHZwLT52X21vdW50LT5tbnRfc3RhdC5mX21udG9u bmFtZSwgZWxlbWVudC0+Y2hyb290X3BhdGgsCisJCQkgICAgc3RybGVuKGVsZW1lbnQtPmNocm9v dF9wYXRoKSkpIHsKKwkJCQlyZXR1cm4gRUFDQ0VTOworCQkJfQorCQl9IAorCX0KKworCXJldHVy biAwOworfQorCiB2b2lkCiBwcmlzb25fZnJlZShzdHJ1Y3QgcHJpc29uICpwcikKIHsKKwlzdHJ1 Y3QgamFpbGVsZW1lbnQgKmVsZW1lbnQ7CiAKIAltdHhfbG9jaygmcHItPnByX210eCk7CiAJcHIt PnByX3JlZi0tOwogCWlmIChwci0+cHJfcmVmID09IDApIHsKIAkJbXR4X3VubG9jaygmcHItPnBy X210eCk7CiAJCW10eF9kZXN0cm95KCZwci0+cHJfbXR4KTsKKworCQkvKiBSZW1vdmUgamFpbCBm cm9tIGxpc3QuICovCisJCUxJU1RfRk9SRUFDSChlbGVtZW50LCAmZmlyc3RqYWlsLCBwb2ludGVy cykgeworCQkJaWYgKGVsZW1lbnQtPnByID09IHByKSB7CisJCQkJTElTVF9SRU1PVkUoZWxlbWVu dCwgcG9pbnRlcnMpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisKIAkJaWYgKHByLT5wcl9saW51 eCAhPSBOVUxMKQogCQkJRlJFRShwci0+cHJfbGludXgsIE1fUFJJU09OKTsKKwkJRlJFRShwci0+ cHJfaXBzLCBNX1BSSVNPTik7CisKKwkJLyogUmVtb3ZlIHN5c2N0bHMuICovCisJCXByLT5qZF9z eXNjdGx0cmVldG9wID0gTlVMTDsKKwkJc3lzY3RsX2N0eF9mcmVlKCZwci0+amRfc3lzY3RsdHJl ZSk7CisKIAkJRlJFRShwciwgTV9QUklTT04pOwogCQlyZXR1cm47CiAJfQpAQCAtMTM3LDcgKzQ1 MSw3IEBACiBwcmlzb25fZ2V0aXAoc3RydWN0IHVjcmVkICpjcmVkKQogewogCi0JcmV0dXJuIChj cmVkLT5jcl9wcmlzb24tPnByX2lwKTsKKwlyZXR1cm4gKGNyZWQtPmNyX3ByaXNvbi0+cHJfaXBz WzBdKTsKIH0KIAogaW50CkBAIC0xNTIsMjAgKzQ2NiwxNiBAQAogCWVsc2UKIAkJdG1wID0gbnRv aGwoKmlwKTsKIAlpZiAodG1wID09IElOQUREUl9BTlkpIHsKLQkJaWYgKGZsYWcpIAotCQkJKmlw ID0gY3JlZC0+Y3JfcHJpc29uLT5wcl9pcDsKLQkJZWxzZQotCQkJKmlwID0gaHRvbmwoY3JlZC0+ Y3JfcHJpc29uLT5wcl9pcCk7CiAJCXJldHVybiAoMCk7CiAJfQogCWlmICh0bXAgPT0gSU5BRERS X0xPT1BCQUNLKSB7CiAJCWlmIChmbGFnKQotCQkJKmlwID0gY3JlZC0+Y3JfcHJpc29uLT5wcl9p cDsKKwkJCSppcCA9IGNyZWQtPmNyX3ByaXNvbi0+cHJfaXBzWzBdOwogCQllbHNlCi0JCQkqaXAg PSBodG9ubChjcmVkLT5jcl9wcmlzb24tPnByX2lwKTsKKwkJCSppcCA9IGh0b25sKGNyZWQtPmNy X3ByaXNvbi0+cHJfaXBzWzBdKTsKIAkJcmV0dXJuICgwKTsKIAl9Ci0JaWYgKGNyZWQtPmNyX3By aXNvbi0+cHJfaXAgIT0gdG1wKQorCWlmICghcHJpc29uX2NoZWNrX2lwKGNyZWQtPmNyX3ByaXNv biwgdG1wKSkKIAkJcmV0dXJuICgxKTsKIAlyZXR1cm4gKDApOwogfQpAQCAtMTgzLDkgKzQ5Myw5 IEBACiAJCXRtcCA9IG50b2hsKCppcCk7CiAJaWYgKHRtcCA9PSBJTkFERFJfTE9PUEJBQ0spIHsK IAkJaWYgKGZsYWcpCi0JCQkqaXAgPSBjcmVkLT5jcl9wcmlzb24tPnByX2lwOworCQkJKmlwID0g Y3JlZC0+Y3JfcHJpc29uLT5wcl9pcHNbMF07CiAJCWVsc2UKLQkJCSppcCA9IGh0b25sKGNyZWQt PmNyX3ByaXNvbi0+cHJfaXApOworCQkJKmlwID0gaHRvbmwoY3JlZC0+Y3JfcHJpc29uLT5wcl9p cHNbMF0pOwogCQlyZXR1cm47CiAJfQogCXJldHVybjsKQEAgLTIwMSw3ICs1MTEsNyBAQAogCQlv ayA9IDE7CiAJZWxzZSBpZiAoc2FpLT5zaW5fZmFtaWx5ICE9IEFGX0lORVQpCiAJCW9rID0gMDsK LQllbHNlIGlmIChjcmVkLT5jcl9wcmlzb24tPnByX2lwICE9IG50b2hsKHNhaS0+c2luX2FkZHIu c19hZGRyKSkKKwllbHNlIGlmICghcHJpc29uX2NoZWNrX2lwKGNyZWQtPmNyX3ByaXNvbiwgbnRv aGwoc2FpLT5zaW5fYWRkci5zX2FkZHIpKSkKIAkJb2sgPSAxOwogCWVsc2UKIAkJb2sgPSAwOwpA QCAtMjIxLDYgKzUzMSwxMiBAQAogCQkJcmV0dXJuIChFU1JDSCk7CiAJCWlmIChjcmVkMi0+Y3Jf cHJpc29uICE9IGNyZWQxLT5jcl9wcmlzb24pCiAJCQlyZXR1cm4gKEVTUkNIKTsKKwl9IGVsc2Ug eworCQkvKiBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIGl0IGFwcGVhcnMgaWYgYSBwcm9jZXNz IGlzIHJ1bm5pbmcgaW4KKwkJICAgYSBqYWlsIGFuZCB0aGUgcHJvY2VzcyBpcyBydW5uaW5nIHVu ZGVyIHRoZSBzYW1lIFVJRCBhcyB0aGUgdXNlciwKKwkJICAga2lsbCgpIHdpbGwgYWN0dWFsbHkg a2lsbCBpdC4gKi8KKwkJaWYgKGphaWxlZChjcmVkMikgJiYgY3JlZDEtPmNyX3J1aWQgIT0gMCAm JiBqYWlsX2hpZGVfcHJvY2Vzc2VzKQorCQkJcmV0dXJuIChFU1JDSCk7CiAJfQogCiAJcmV0dXJu ICgwKTsKQEAgLTI1NCw0ICs1NzAsMjAgQEAKIAl9CiAJZWxzZQogCQlzdHJsY3B5KGJ1ZiwgaG9z dG5hbWUsIHNpemUpOworfQorCisvKgorICogUmV0dXJucyAxIGlmIHRoZSBJUCBleGlzdHMgaW4g dGhlIGphaWwuCisgKi8KK2ludAorcHJpc29uX2NoZWNrX2lwKHN0cnVjdCBwcmlzb24gKnByLCB1 X2ludDMyX3QgaXApCit7CisJcmVnaXN0ZXIgdV9pbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBw ci0+cHJfbmlwczsgKytpKSB7CisJCWlmIChwci0+cHJfaXBzW2ldID09IGlwKQorCQkJcmV0dXJu ICgxKTsKKwl9CisKKwlyZXR1cm4gKDApOwogfQpkaWZmIC11ciBzcmMudmlyZ2luL3N5cy9rZXJu L2tlcm5fc3dpdGNoLmMgc3JjLmRpcnR5L3N5cy9rZXJuL2tlcm5fc3dpdGNoLmMKLS0tIHNyYy52 aXJnaW4vc3lzL2tlcm4va2Vybl9zd2l0Y2guYwlNb24gT2N0IDE0IDE0OjQzOjAyIDIwMDIKKysr IHNyYy5kaXJ0eS9zeXMva2Vybi9rZXJuX3N3aXRjaC5jCVRodSBGZWIgMjcgMTc6Mzg6MzIgMjAw MwpAQCAtOTgsNiArOTgsNyBAQAogI2luY2x1ZGUgPHN5cy9wcm9jLmg+CiAjaW5jbHVkZSA8c3lz L3F1ZXVlLmg+CiAjaW5jbHVkZSA8c3lzL3NjaGVkLmg+CisjaW5jbHVkZSA8c3lzL2phaWwuaD4K ICNpbmNsdWRlIDxtYWNoaW5lL2NyaXRpY2FsLmg+CiAKIENUQVNTRVJUKChSUUJfQlBXICogUlFC X0xFTikgPT0gUlFfTlFTKTsKQEAgLTI0MSw2ICsyNDIsMTAgQEAKIAkJCW9yaWdpbmFsLT50ZF9r c2UgPSBOVUxMOwogCQlvcmlnaW5hbCA9IG93bmVyOwogCisJCWlmIChURF9JU19KU0xFRVAob3du ZXIpICYmIGphaWxfY2hlY2tfY3B1KG93bmVyLT50ZF91Y3JlZCkgPT0gMCkgeworCQkJLyogV2Fr ZSBpdCB1cC4gKi8KKwkJCVREX0NMUl9KU0xFRVAob3duZXIpOworCQl9CiAJCWlmIChURF9DQU5f UlVOKG93bmVyKSkgewogCQkJLyoKIAkJCSAqIElmIHRoZSBvd25lciB0aHJlYWQgaXMgbm93IHJ1 bm5hYmxlLCAgcnVuIGl0Li4KQEAgLTM3OSw2ICszODQsMTMgQEAKIAlzdHJ1Y3Qga3NlZ3JwICpr ZzsKIAlzdHJ1Y3QgdGhyZWFkICp0ZDI7CiAJc3RydWN0IHRocmVhZCAqdGRhOworCisJaWYgKHRk LT50ZF91Y3JlZCAmJiBqYWlsX2NoZWNrX2NwdSh0ZC0+dGRfdWNyZWQpID09IDEpIHsKKwkJLyog RG9uJ3QgYWRkIHRvIHJ1biBxdWV1ZS4gUHV0IGl0IHRvIHNsZWVwLiBFeGl0IGZ1bmN0aW9uLiAq LworCQlURF9TRVRfSlNMRUVQKHRkKTsKKwkJdGQtPnRkX3VjcmVkLT5jcl9wcmlzb24tPnJlc2No ZWQgPSAxOworCQlyZXR1cm47CisJfQogCiAJQ1RSMShLVFJfUlVOUSwgInNldHJ1bnF1ZXVlOiB0 ZCVwIiwgdGQpOwogCW10eF9hc3NlcnQoJnNjaGVkX2xvY2ssIE1BX09XTkVEKTsKZGlmZiAtdXIg c3JjLnZpcmdpbi9zeXMva2Vybi9zY2hlZF80YnNkLmMgc3JjLmRpcnR5L3N5cy9rZXJuL3NjaGVk XzRic2QuYwotLS0gc3JjLnZpcmdpbi9zeXMva2Vybi9zY2hlZF80YnNkLmMJVGh1IE5vdiAyMSAw MjozMDo1NSAyMDAyCisrKyBzcmMuZGlydHkvc3lzL2tlcm4vc2NoZWRfNGJzZC5jCVRodSBGZWIg MjcgMTc6Mzg6MzIgMjAwMwpAQCAtNDIsNiArNDIsNyBAQAogI2luY2x1ZGUgPHN5cy9zeXN0bS5o PgogI2luY2x1ZGUgPHN5cy9rZXJuZWwuaD4KICNpbmNsdWRlIDxzeXMva3RyLmg+CisjaW5jbHVk ZSA8c3lzL2phaWwuaD4KICNpbmNsdWRlIDxzeXMvbG9jay5oPgogI2luY2x1ZGUgPHN5cy9tdXRl eC5oPgogI2luY2x1ZGUgPHN5cy9wcm9jLmg+CkBAIC0xMTYsNyArMTE3LDcgQEAKIHsKIAogCW10 eF9hc3NlcnQoJnNjaGVkX2xvY2ssIE1BX09XTkVEKTsKLQlpZiAodGQtPnRkX3ByaW9yaXR5IDwg Y3VydGhyZWFkLT50ZF9wcmlvcml0eSkKKwlpZiAodGQtPnRkX3ByaW9yaXR5IDwgY3VydGhyZWFk LT50ZF9wcmlvcml0eSB8fCB0ZC0+dGRfdWNyZWQtPmNyX3ByaXNvbikKIAkJY3VydGhyZWFkLT50 ZF9rc2UtPmtlX2ZsYWdzIHw9IEtFRl9ORUVEUkVTQ0hFRDsKIH0KIApAQCAtMjQxLDEyICsyNDIs MjkgQEAKIAlzdHJ1Y3Qga3NlICprZTsKIAlzdHJ1Y3Qga3NlZ3JwICprZzsKIAlpbnQgcmVhbHN0 YXRoejsKLQlpbnQgYXdha2U7CisJaW50IGF3YWtlLCBjaGVja2VkX3N0YXR1cyA9IDA7CiAKIAly ZWFsc3RhdGh6ID0gc3RhdGh6ID8gc3RhdGh6IDogaHo7CiAJc3hfc2xvY2soJmFsbHByb2NfbG9j ayk7CiAJRk9SRUFDSF9QUk9DX0lOX1NZU1RFTShwKSB7CiAJCW10eF9sb2NrX3NwaW4oJnNjaGVk X2xvY2spOworCQlpZiAocC0+cF91Y3JlZC0+Y3JfcHJpc29uKSB7CisJCQlpZiAoIWphaWxfY2hl Y2tfY3B1KHAtPnBfdWNyZWQpKSB7CisJCQkJbXR4X3VubG9ja19zcGluKCZzY2hlZF9sb2NrKTsK KwkJCQlGT1JFQUNIX1RIUkVBRF9JTl9QUk9DKHAsIHRkKSB7CisJCQkJCWlmIChURF9JU19KU0xF RVAodGQpKSB7CisJCQkJCQlURF9DTFJfSlNMRUVQKHRkKTsKKwkJCQkJCXNldHJ1bnF1ZXVlKHRk KTsKKwkJCQkJfQorCQkJCX0KKwkJCQltdHhfbG9ja19zcGluKCZzY2hlZF9sb2NrKTsKKwkJCX0K KwkJCWlmIChjaGVja2VkX3N0YXR1cyA9PSAwKSB7CisJCQkJamFpbF91cGRhdGVfY3B1KCk7CisJ CQkJY2hlY2tlZF9zdGF0dXMgPSAxOworCQkJfQorCQl9CisKIAkJcC0+cF9zd3RpbWUrKzsKIAkJ Rk9SRUFDSF9LU0VHUlBfSU5fUFJPQyhwLCBrZykgeyAKIAkJCWF3YWtlID0gMDsKZGlmZiAtdXIg c3JjLnZpcmdpbi9zeXMva2Vybi9zeXN2X2lwYy5jIHNyYy5kaXJ0eS9zeXMva2Vybi9zeXN2X2lw Yy5jCi0tLSBzcmMudmlyZ2luL3N5cy9rZXJuL3N5c3ZfaXBjLmMJTW9uIEFwciAgMSAxNDozMTow MCAyMDAyCisrKyBzcmMuZGlydHkvc3lzL2tlcm4vc3lzdl9pcGMuYwlUaHUgRmViIDI3IDE3OjM4 OjMyIDIwMDMKQEAgLTc4LDYgKzc4LDExIEBACiB7CiAJc3RydWN0IHVjcmVkICpjcmVkID0gdGQt PnRkX3VjcmVkOwogCisJLyogQ2hlY2sgZm9yIGphaWwgbWF0Y2guICovCisJaWYgKGNyZWQtPmNy X3ByaXNvbiAhPSBwZXJtLT5wcikgeworCQlyZXR1cm4gRUFDQ0VTOworCX0KKwogCS8qIENoZWNr IGZvciB1c2VyIG1hdGNoLiAqLwogCWlmIChjcmVkLT5jcl91aWQgIT0gcGVybS0+Y3VpZCAmJiBj cmVkLT5jcl91aWQgIT0gcGVybS0+dWlkKSB7CiAJCWlmIChtb2RlICYgSVBDX00pCmRpZmYgLXVy IHNyYy52aXJnaW4vc3lzL2tlcm4vc3lzdl9tc2cuYyBzcmMuZGlydHkvc3lzL2tlcm4vc3lzdl9t c2cuYwotLS0gc3JjLnZpcmdpbi9zeXMva2Vybi9zeXN2X21zZy5jCVN1biBEZWMgMTUgMDY6NTQ6 NTUgMjAwMgorKysgc3JjLmRpcnR5L3N5cy9rZXJuL3N5c3ZfbXNnLmMJVGh1IEZlYiAyNyAxNzoz ODozMiAyMDAzCkBAIC00MzUsNiArNDM1LDcgQEAKIAkJbXNxcHRyLT5tc2dfcGVybS5naWQgPSBt c3FidWYubXNnX3Blcm0uZ2lkOwkvKiBjaGFuZ2UgdGhlIG93bmVyICovCiAJCW1zcXB0ci0+bXNn X3Blcm0ubW9kZSA9IChtc3FwdHItPm1zZ19wZXJtLm1vZGUgJiB+MDc3NykgfAogCQkgICAgKG1z cWJ1Zi5tc2dfcGVybS5tb2RlICYgMDc3Nyk7CisJCW1zcXB0ci0+bXNnX3Blcm0ucHIgPSB0ZC0+ dGRfdWNyZWQtPmNyX3ByaXNvbjsKIAkJbXNxcHRyLT5tc2dfcWJ5dGVzID0gbXNxYnVmLm1zZ19x Ynl0ZXM7CiAJCW1zcXB0ci0+bXNnX2N0aW1lID0gdGltZV9zZWNvbmQ7CiAJCWJyZWFrOwpAQCAt NTM5LDYgKzU0MCw3IEBACiAJCW1zcXB0ci0+bXNnX3Blcm0ubW9kZSA9IChtc2dmbGcgJiAwNzc3 KTsKIAkJLyogTWFrZSBzdXJlIHRoYXQgdGhlIHJldHVybmVkIG1zcWlkIGlzIHVuaXF1ZSAqLwog CQltc3FwdHItPm1zZ19wZXJtLnNlcSA9IChtc3FwdHItPm1zZ19wZXJtLnNlcSArIDEpICYgMHg3 ZmZmOworCQltc3FwdHItPm1zZ19wZXJtLnByID0gdGQtPnRkX3VjcmVkLT5jcl9wcmlzb247CiAJ CW1zcXB0ci0+bXNnX2ZpcnN0ID0gTlVMTDsKIAkJbXNxcHRyLT5tc2dfbGFzdCA9IE5VTEw7CiAJ CW1zcXB0ci0+bXNnX2NieXRlcyA9IDA7CmRpZmYgLXVyIHNyYy52aXJnaW4vc3lzL2tlcm4vc3lz dl9zZW0uYyBzcmMuZGlydHkvc3lzL2tlcm4vc3lzdl9zZW0uYwotLS0gc3JjLnZpcmdpbi9zeXMv a2Vybi9zeXN2X3NlbS5jCUZyaSBPY3QgMTggMjA6MDc6MzUgMjAwMgorKysgc3JjLmRpcnR5L3N5 cy9rZXJuL3N5c3Zfc2VtLmMJVGh1IEZlYiAyNyAxNzozODozMiAyMDAzCkBAIC01ODUsNiArNTg1 LDcgQEAKIAkJc2VtYXB0ci0+c2VtX3Blcm0ubW9kZSA9IChzZW1hcHRyLT5zZW1fcGVybS5tb2Rl ICYgfjA3NzcpIHwKIAkJICAgIChzYnVmLnNlbV9wZXJtLm1vZGUgJiAwNzc3KTsKIAkJc2VtYXB0 ci0+c2VtX2N0aW1lID0gdGltZV9zZWNvbmQ7CisJCXNlbWFwdHItPnNlbV9wZXJtLnByID0gdGQt PnRkX3VjcmVkLT5jcl9wcmlzb247CiAJCWJyZWFrOwogCiAJY2FzZSBJUENfU1RBVDoKQEAgLTgz Miw2ICs4MzMsNyBAQAogCQlzZW1hW3NlbWlkXS5zZW1fcGVybS5tb2RlID0gKHNlbWZsZyAmIDA3 NzcpIHwgU0VNX0FMTE9DOwogCQlzZW1hW3NlbWlkXS5zZW1fcGVybS5zZXEgPQogCQkgICAgKHNl bWFbc2VtaWRdLnNlbV9wZXJtLnNlcSArIDEpICYgMHg3ZmZmOworCQlzZW1hW3NlbWlkXS5zZW1f cGVybS5wciA9IGNyZWQtPmNyX3ByaXNvbjsKIAkJc2VtYVtzZW1pZF0uc2VtX25zZW1zID0gbnNl bXM7CiAJCXNlbWFbc2VtaWRdLnNlbV9vdGltZSA9IDA7CiAJCXNlbWFbc2VtaWRdLnNlbV9jdGlt ZSA9IHRpbWVfc2Vjb25kOwpkaWZmIC11ciBzcmMudmlyZ2luL3N5cy9rZXJuL3N5c3Zfc2htLmMg c3JjLmRpcnR5L3N5cy9rZXJuL3N5c3Zfc2htLmMKLS0tIHNyYy52aXJnaW4vc3lzL2tlcm4vc3lz dl9zaG0uYwlXZWQgQXVnIDE0IDIwOjEwOjEyIDIwMDIKKysrIHNyYy5kaXJ0eS9zeXMva2Vybi9z eXN2X3NobS5jCVRodSBGZWIgMjcgMTc6Mzg6MzIgMjAwMwpAQCAtMjI2LDYgKzIyNiwxMSBAQAog CiAJc2VnbnVtID0gSVBDSURfVE9fSVgoc2htbWFwX3MtPnNobWlkKTsKIAlzaG1zZWcgPSAmc2ht c2Vnc1tzZWdudW1dOworCS8qIENoZWNrIGphaWwgcGVybWlzc2lvbnMuICovCisJaWYgKHAtPnBf dWNyZWQtPmNyX3ByaXNvbiAhPSBzaG1zZWctPnNobV9wZXJtLnByKSB7CisJCXJldHVybihFQUND RVMpOworCX0KKwogCXNpemUgPSByb3VuZF9wYWdlKHNobXNlZy0+c2htX3NlZ3N6KTsKIAlyZXN1 bHQgPSB2bV9tYXBfcmVtb3ZlKCZwLT5wX3Ztc3BhY2UtPnZtX21hcCwgc2htbWFwX3MtPnZhLAog CSAgICBzaG1tYXBfcy0+dmEgKyBzaXplKTsKQEAgLTUzOCw2ICs1NDMsNyBAQAogCQkgICAgKHNo bXNlZy0+c2htX3Blcm0ubW9kZSAmIH5BQ0NFU1NQRVJNUykgfAogCQkgICAgKGluYnVmLnNobV9w ZXJtLm1vZGUgJiBBQ0NFU1NQRVJNUyk7CiAJCXNobXNlZy0+c2htX2N0aW1lID0gdGltZV9zZWNv bmQ7CisJCXNobXNlZy0+c2htX3Blcm0ucHIgPSB0ZC0+dGRfdWNyZWQtPmNyX3ByaXNvbjsKIAkJ YnJlYWs7CiAJY2FzZSBJUENfUk1JRDoKIAkJZXJyb3IgPSBpcGNwZXJtKHRkLCAmc2htc2VnLT5z aG1fcGVybSwgSVBDX00pOwpAQCAtNjQ1LDYgKzY1MSw3IEBACiAJc2htc2VnLT5zaG1fcGVybS5t b2RlID0gU0hNU0VHX0FMTE9DQVRFRCB8IFNITVNFR19SRU1PVkVEOwogCXNobXNlZy0+c2htX3Bl cm0ua2V5ID0gdWFwLT5rZXk7CiAJc2htc2VnLT5zaG1fcGVybS5zZXEgPSAoc2htc2VnLT5zaG1f cGVybS5zZXEgKyAxKSAmIDB4N2ZmZjsKKwlzaG1zZWctPnNobV9wZXJtLnByID0gdGQtPnRkX3Vj cmVkLT5jcl9wcmlzb247CiAJc2htX2hhbmRsZSA9IChzdHJ1Y3Qgc2htX2hhbmRsZSAqKQogCSAg ICBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBzaG1faGFuZGxlKSwgTV9TSE0sIE1fV0FJVE9LKTsKIAlz aG1pZCA9IElYU0VRX1RPX0lQQ0lEKHNlZ251bSwgc2htc2VnLT5zaG1fcGVybSk7CkBAIC02NzMs NiArNjgwLDcgQEAKIAlzaG1zZWctPnNobV9scGlkID0gc2htc2VnLT5zaG1fbmF0dGNoID0gMDsK IAlzaG1zZWctPnNobV9hdGltZSA9IHNobXNlZy0+c2htX2R0aW1lID0gMDsKIAlzaG1zZWctPnNo bV9jdGltZSA9IHRpbWVfc2Vjb25kOworCXNobXNlZy0+c2htX3Blcm0ucHIgPSB0ZC0+dGRfdWNy ZWQtPmNyX3ByaXNvbjsKIAlzaG1fY29tbWl0dGVkICs9IGJ0b2Moc2l6ZSk7CiAJc2htX251c2Vk Kys7CiAJaWYgKHNobXNlZy0+c2htX3Blcm0ubW9kZSAmIFNITVNFR19XQU5URUQpIHsKZGlmZiAt dXIgc3JjLnZpcmdpbi9zeXMva2Vybi92ZnNfc3lzY2FsbHMuYyBzcmMuZGlydHkvc3lzL2tlcm4v dmZzX3N5c2NhbGxzLmMKLS0tIHNyYy52aXJnaW4vc3lzL2tlcm4vdmZzX3N5c2NhbGxzLmMJTW9u IEphbiAgNiAxNDoyMDo1NCAyMDAzCisrKyBzcmMuZGlydHkvc3lzL2tlcm4vdmZzX3N5c2NhbGxz LmMJTW9uIE1hciAgMyAwNzo1MzoyNyAyMDAzCkBAIC0xNTgsNyArMTU4LDggQEAKIH0KIAogLyog WFhYIFBSSVNPTjogY291bGQgYmUgcGVyIHByaXNvbiBmbGFnICovCi1zdGF0aWMgaW50IHByaXNv bl9xdW90YXM7CisvKnN0YXRpYyBpbnQgcHJpc29uX3F1b3RhczsqLworZXh0ZXJuIGludCBqYWls X3F1b3Rhc19hbGxvd2VkOwogI2lmIDAKIFNZU0NUTF9JTlQoX2tlcm5fcHJpc29uLCBPSURfQVVU TywgcXVvdGFzLCBDVExGTEFHX1JXLCAmcHJpc29uX3F1b3RhcywgMCwgIiIpOwogI2VuZGlmCkBA IC0xODksNyArMTkwLDcgQEAKIAlpbnQgZXJyb3I7CiAJc3RydWN0IG5hbWVpZGF0YSBuZDsKIAot CWlmIChqYWlsZWQodGQtPnRkX3VjcmVkKSAmJiAhcHJpc29uX3F1b3RhcykKKwlpZiAoamFpbGVk KHRkLT50ZF91Y3JlZCkgJiYgIWphaWxfcXVvdGFzX2FsbG93ZWQpCiAJCXJldHVybiAoRVBFUk0p OwogCU5ESU5JVCgmbmQsIExPT0tVUCwgRk9MTE9XLCBVSU9fVVNFUlNQQUNFLCB1YXAtPnBhdGgs IHRkKTsKIAlpZiAoKGVycm9yID0gbmFtZWkoJm5kKSkgIT0gMCkKQEAgLTMxMSw2ICszMTIsOCBA QAogCWludCBmbGFnczsKIH07CiAjZW5kaWYKK2V4dGVybiBzdHJ1Y3QgamFpbHMgZmlyc3RqYWls OworCiBpbnQKIGdldGZzc3RhdCh0ZCwgdWFwKQogCXN0cnVjdCB0aHJlYWQgKnRkOwpAQCAtMzI0 LDYgKzMyNyw3IEBACiAJcmVnaXN0ZXIgc3RydWN0IHN0YXRmcyAqc3A7CiAJY2FkZHJfdCBzZnNw OwogCWxvbmcgY291bnQsIG1heGNvdW50LCBlcnJvcjsKKwlzdHJ1Y3Qgc3RhdGZzICp0bXBzcDsK IAogCW1heGNvdW50ID0gdWFwLT5idWZzaXplIC8gc2l6ZW9mKHN0cnVjdCBzdGF0ZnMpOwogCXNm c3AgPSAoY2FkZHJfdCl1YXAtPmJ1ZjsKQEAgLTM1Niw3ICszNjAsMzUgQEAKIAkJCQljb250aW51 ZTsKIAkJCX0KIAkJCXNwLT5mX2ZsYWdzID0gbXAtPm1udF9mbGFnICYgTU5UX1ZJU0ZMQUdNQVNL OwotCQkJZXJyb3IgPSBjb3B5b3V0KHNwLCBzZnNwLCBzaXplb2YoKnNwKSk7CisKKwkJCS8qIElm IGphaWxlZCwgb25seSByZXR1cm4gdGhlIG1vdW50cG9pbnRzIHRoYXQgYXJlIGluIHRoZSBqYWls LiAqLworCQkJaWYgKHRkLT50ZF9wcm9jLT5wX3VjcmVkLT5jcl9wcmlzb24pIHsKKwkJCQlzdHJ1 Y3QgamFpbGVsZW1lbnQgKmVsZW1lbnQ7CisJCQkJTElTVF9GT1JFQUNIKGVsZW1lbnQsICZmaXJz dGphaWwsIHBvaW50ZXJzKSB7CisJCQkJCWlmIChlbGVtZW50LT5wciA9PSB0ZC0+dGRfcHJvYy0+ cF91Y3JlZC0+Y3JfcHJpc29uKSB7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCQlp ZiAoIXN0cm5jbXAoZWxlbWVudC0+Y2hyb290X3BhdGgsIHNwLT5mX21udG9ubmFtZSwgCisJCQkJ ICBzdHJsZW4oZWxlbWVudC0+Y2hyb290X3BhdGgpKSkgeworCQkJCQlNQUxMT0ModG1wc3AsIHN0 cnVjdCBzdGF0ZnMgKiwgc2l6ZW9mKHN0cnVjdCBzdGF0ZnMpLCBNX1BSSVNPTiwgTV9XQUlUT0sp OworCQkJCQltZW1jcHkodG1wc3AsIHNwLCBzaXplb2Yoc3RydWN0IHN0YXRmcykpOworCQkJCQlz dHJjcHkodG1wc3AtPmZfbW50b25uYW1lLCBzcC0+Zl9tbnRvbm5hbWUgKyBzdHJsZW4oZWxlbWVu dC0+Y2hyb290X3BhdGgpKTsKKwkJCQkJaWYgKHN0cmxlbih0bXBzcC0+Zl9tbnRvbm5hbWUpID09 IDApIHsKKwkJCQkJCS8qIFJvb3QgbW91bnQuICovCisJCQkJCQlzdHJjcHkodG1wc3AtPmZfbW50 b25uYW1lLCAiLyIpOworCQkJCQl9CisJCQkJCWVycm9yID0gY29weW91dCh0bXBzcCwgc2ZzcCwg c2l6ZW9mKCp0bXBzcCkpOworCQkJCQlGUkVFKHRtcHNwLCBNX1BSSVNPTik7CisJCQkJfSBlbHNl IHsKKwkJCQkJbXR4X2xvY2soJm1vdW50bGlzdF9tdHgpOworCQkJCQlubXAgPSBUQUlMUV9ORVhU KG1wLCBtbnRfbGlzdCk7CisJCQkJCXZmc191bmJ1c3kobXAsIHRkKTsKKwkJCQkJY29udGludWU7 CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQllcnJvciA9IGNvcHlvdXQoc3AsIHNmc3AsIHNpemVv Zigqc3ApKTsKKwkJCX0KIAkJCWlmIChlcnJvcikgewogCQkJCXZmc191bmJ1c3kobXAsIHRkKTsK IAkJCQlyZXR1cm4gKGVycm9yKTsKQEAgLTE0MjMsNiArMTQ1NSw3IEBACiAJCQlmbGFncyB8PSBW V1JJVEU7CiAJCWlmICh1c2VyX2ZsYWdzICYgWF9PSykKIAkJCWZsYWdzIHw9IFZFWEVDOworCiAj aWZkZWYgTUFDCiAJCWVycm9yID0gbWFjX2NoZWNrX3Zub2RlX2FjY2VzcyhjcmVkLCB2cCwgZmxh Z3MpOwogCQlpZiAoZXJyb3IpCmRpZmYgLXVyIHNyYy52aXJnaW4vc3lzL25ldGluZXQvaW5fcGNi LmMgc3JjLmRpcnR5L3N5cy9uZXRpbmV0L2luX3BjYi5jCi0tLSBzcmMudmlyZ2luL3N5cy9uZXRp bmV0L2luX3BjYi5jCUZyaSBOb3YgIDggMTY6NTA6MzIgMjAwMgorKysgc3JjLmRpcnR5L3N5cy9u ZXRpbmV0L2luX3BjYi5jCVN1biBNYXIgIDIgMTk6NTc6NDAgMjAwMwpAQCAtMjk2LDcgKzI5Niw3 IEBACiAJCQkgICAgIUlOX01VTFRJQ0FTVChudG9obChzaW4tPnNpbl9hZGRyLnNfYWRkcikpKSB7 CiAJCQkJdCA9IGluX3BjYmxvb2t1cF9sb2NhbChpbnAtPmlucF9wY2JpbmZvLAogCQkJCSAgICBz aW4tPnNpbl9hZGRyLCBscG9ydCwKLQkJCQkgICAgcHJpc29uID8gMCA6ICBJTlBMT09LVVBfV0lM RENBUkQpOworCQkJCSAgICBwcmlzb24gPyAwIDogIElOUExPT0tVUF9XSUxEQ0FSRCwgcHJpc29u ID8gdGQgOiBOVUxMKTsKIAkJCQlpZiAodCAmJgogCQkJCSAgICAobnRvaGwoc2luLT5zaW5fYWRk ci5zX2FkZHIpICE9IElOQUREUl9BTlkgfHwKIAkJCQkgICAgIG50b2hsKHQtPmlucF9sYWRkci5z X2FkZHIpICE9IElOQUREUl9BTlkgfHwKQEAgLTMxOSw3ICszMTksNyBAQAogCQkJICAgIHByaXNv bl9pcCh0ZC0+dGRfdWNyZWQsIDAsICZzaW4tPnNpbl9hZGRyLnNfYWRkcikpCiAJCQkJcmV0dXJu IChFQUREUk5PVEFWQUlMKTsKIAkJCXQgPSBpbl9wY2Jsb29rdXBfbG9jYWwocGNiaW5mbywgc2lu LT5zaW5fYWRkciwKLQkJCSAgICBscG9ydCwgcHJpc29uID8gMCA6IHdpbGQpOworCQkJICAgIGxw b3J0LCBwcmlzb24gPyAwIDogd2lsZCwgcHJpc29uID8gdGQgOiBOVUxMKTsKIAkJCWlmICh0ICYm CiAJCQkgICAgKHJldXNlcG9ydCAmIHQtPmlucF9zb2NrZXQtPnNvX29wdGlvbnMpID09IDApIHsK ICNpZiBkZWZpbmVkKElORVQ2KQpAQCAtMzQwLDYgKzM0MCw5IEBACiAJCXVzaG9ydCBmaXJzdCwg bGFzdDsKIAkJaW50IGNvdW50OwogCisJCWlmIChsYWRkci5zX2FkZHIgPT0gSU5BRERSX0FOWSAm JiB0ZC0+dGRfdWNyZWQtPmNyX3ByaXNvbikKKwkJCWxhZGRyLnNfYWRkciA9IGh0b25sKHByaXNv bl9nZXRpcCh0ZC0+dGRfdWNyZWQpKTsKKwogCQlpZiAobGFkZHIuc19hZGRyICE9IElOQUREUl9B TlkpCiAJCQlpZiAocHJpc29uX2lwKHRkLT50ZF91Y3JlZCwgMCwgJmxhZGRyLnNfYWRkcikpCiAJ CQkJcmV0dXJuIChFSU5WQUwpOwpAQCAtMzgxLDcgKzM4NCw3IEBACiAJCQkJCSpsYXN0cG9ydCA9 IGZpcnN0OwogCQkJCWxwb3J0ID0gaHRvbnMoKmxhc3Rwb3J0KTsKIAkJCX0gd2hpbGUgKGluX3Bj Ymxvb2t1cF9sb2NhbChwY2JpbmZvLCBsYWRkciwgbHBvcnQsCi0JCQkgICAgd2lsZCkpOworCQkJ ICAgIHdpbGQsIHdpbGQgPyBOVUxMIDogdGQpKTsKIAkJfSBlbHNlIHsKIAkJCS8qCiAJCQkgKiBj b3VudGluZyB1cApAQCAtMzk2LDcgKzM5OSw3IEBACiAJCQkJCSpsYXN0cG9ydCA9IGZpcnN0Owog CQkJCWxwb3J0ID0gaHRvbnMoKmxhc3Rwb3J0KTsKIAkJCX0gd2hpbGUgKGluX3BjYmxvb2t1cF9s b2NhbChwY2JpbmZvLCBsYWRkciwgbHBvcnQsCi0JCQkgICAgd2lsZCkpOworCQkJICAgIHdpbGQs IHdpbGQgPyBOVUxMIDogdGQpKTsKIAkJfQogCX0KIAlpZiAocHJpc29uX2lwKHRkLT50ZF91Y3Jl ZCwgMCwgJmxhZGRyLnNfYWRkcikpCkBAIC01MTksOSArNTIyLDEzIEBACiAJCSAqIGFuZCB0aGUg cHJpbWFyeSBpbnRlcmZhY2Ugc3VwcG9ydHMgYnJvYWRjYXN0LAogCQkgKiBjaG9vc2UgdGhlIGJy b2FkY2FzdCBhZGRyZXNzIGZvciB0aGF0IGludGVyZmFjZS4KIAkJICovCi0JCWlmIChmYWRkci5z X2FkZHIgPT0gSU5BRERSX0FOWSkKLQkJCWZhZGRyID0gSUFfU0lOKFRBSUxRX0ZJUlNUKCZpbl9p ZmFkZHJoZWFkKSktPnNpbl9hZGRyOwotCQllbHNlIGlmIChmYWRkci5zX2FkZHIgPT0gKHVfbG9u ZylJTkFERFJfQlJPQURDQVNUICYmCisJCWlmIChmYWRkci5zX2FkZHIgPT0gSU5BRERSX0FOWSkg eworCQkJaWYgKGphaWxlZChjcmVkKSkgeworCQkJCWZhZGRyLnNfYWRkciA9IGh0b25sKHByaXNv bl9nZXRpcChjcmVkKSk7CisJCQl9IGVsc2UgeworCQkJCWZhZGRyID0gSUFfU0lOKFRBSUxRX0ZJ UlNUKCZpbl9pZmFkZHJoZWFkKSktPnNpbl9hZGRyOworCQkJfQorCQl9IGVsc2UgaWYgKGZhZGRy LnNfYWRkciA9PSAodV9sb25nKUlOQUREUl9CUk9BRENBU1QgJiYKIAkJICAgIChUQUlMUV9GSVJT VCgmaW5faWZhZGRyaGVhZCktPmlhX2lmcC0+aWZfZmxhZ3MgJgogCQkgICAgSUZGX0JST0FEQ0FT VCkpCiAJCQlmYWRkciA9IHNhdG9zaW4oJlRBSUxRX0ZJUlNUKApAQCAtODc2LDExICs4ODMsMTIg QEAKICAqIExvb2t1cCBhIFBDQiBiYXNlZCBvbiB0aGUgbG9jYWwgYWRkcmVzcyBhbmQgcG9ydC4K ICAqLwogc3RydWN0IGlucGNiICoKLWluX3BjYmxvb2t1cF9sb2NhbChwY2JpbmZvLCBsYWRkciwg bHBvcnRfYXJnLCB3aWxkX29rYXkpCitpbl9wY2Jsb29rdXBfbG9jYWwocGNiaW5mbywgbGFkZHIs IGxwb3J0X2FyZywgd2lsZF9va2F5LCB0ZCkKIAlzdHJ1Y3QgaW5wY2JpbmZvICpwY2JpbmZvOwog CXN0cnVjdCBpbl9hZGRyIGxhZGRyOwogCXVfaW50IGxwb3J0X2FyZzsKIAlpbnQgd2lsZF9va2F5 OworCXN0cnVjdCB0aHJlYWQgKnRkOwogewogCXJlZ2lzdGVyIHN0cnVjdCBpbnBjYiAqaW5wOwog CWludCBtYXRjaHdpbGQgPSAzLCB3aWxkY2FyZDsKQEAgLTkwMCwxMSArOTA4LDE4IEBACiAjZW5k aWYKIAkJCWlmIChpbnAtPmlucF9mYWRkci5zX2FkZHIgPT0gSU5BRERSX0FOWSAmJgogCQkJICAg IGlucC0+aW5wX2xhZGRyLnNfYWRkciA9PSBsYWRkci5zX2FkZHIgJiYKLQkJCSAgICBpbnAtPmlu cF9scG9ydCA9PSBscG9ydCkgeworCQkJICAgIGlucC0+aW5wX2xwb3J0ID09IGxwb3J0ICYmIAor CQkJICAgIChsYWRkci5zX2FkZHIgIT0gSU5BRERSX0FOWSB8fCAhdGQtPnRkX3VjcmVkLT5jcl9w cmlzb24pKSB7CiAJCQkJLyoKIAkJCQkgKiBGb3VuZC4KIAkJCQkgKi8KIAkJCQlyZXR1cm4gKGlu cCk7CisJCQl9IGVsc2UgaWYgKHRkLT50ZF91Y3JlZC0+Y3JfcHJpc29uICYmCisJCQkgICAgdGQt PnRkX3VjcmVkLT5jcl9wcmlzb24gPT0gaW5wLT5pbnBfc29ja2V0LT5zb19jcmVkLT5jcl9wcmlz b24gJiYKKwkJCSAgICBpbnAtPmlucF9mYWRkci5zX2FkZHIgPT0gSU5BRERSX0FOWSAmJgorCQkJ ICAgIGlucC0+aW5wX2xhZGRyLnNfYWRkciA9PSBsYWRkci5zX2FkZHIgJiYKKwkJCSAgICBpbnAt PmlucF9scG9ydCA9PSBscG9ydCkgeworCQkJCXJldHVybiAoaW5wKTsKIAkJCX0KIAkJfQogCQkv KgpAQCAtMTAwNSwxMiArMTAyMCwyNCBAQAogCiAJCWhlYWQgPSAmcGNiaW5mby0+aGFzaGJhc2Vb SU5QX1BDQkhBU0goSU5BRERSX0FOWSwgbHBvcnQsIDAsIHBjYmluZm8tPmhhc2htYXNrKV07CiAJ CUxJU1RfRk9SRUFDSChpbnAsIGhlYWQsIGlucF9oYXNoKSB7CisJCQlpZiAoaW5wLT5pbnBfc29j a2V0LT5zb19jcmVkLT5jcl9wcmlzb24gJiYKKwkJCSAgICBpbnAtPmlucF9scG9ydCA9PSBscG9y dCAmJgorCQkJICAgIGlucC0+aW5wX2xhZGRyLnNfYWRkciA9PSBJTkFERFJfQU5ZKSB7CisJCQkJ aWYgKHByaXNvbl9jaGVja19pcChpbnAtPmlucF9zb2NrZXQtPnNvX2NyZWQtPmNyX3ByaXNvbiwg bnRvaGwobGFkZHIuc19hZGRyKSkpIHsKKwkJCQkJcmV0dXJuIChpbnApOworCQkJCX0KKwkJCX0K KwkJfQorCisJCWhlYWQgPSAmcGNiaW5mby0+aGFzaGJhc2VbSU5QX1BDQkhBU0goSU5BRERSX0FO WSwgbHBvcnQsIDAsIHBjYmluZm8tPmhhc2htYXNrKV07CisJCUxJU1RfRk9SRUFDSChpbnAsIGhl YWQsIGlucF9oYXNoKSB7CiAjaWZkZWYgSU5FVDYKIAkJCWlmICgoaW5wLT5pbnBfdmZsYWcgJiBJ TlBfSVBWNCkgPT0gMCkKIAkJCQljb250aW51ZTsKICNlbmRpZgogCQkJaWYgKGlucC0+aW5wX2Zh ZGRyLnNfYWRkciA9PSBJTkFERFJfQU5ZICYmCi0JCQkgICAgaW5wLT5pbnBfbHBvcnQgPT0gbHBv cnQpIHsKKwkJCSAgICBpbnAtPmlucF9scG9ydCA9PSBscG9ydCAmJgorCQkJICAgICFpbnAtPmlu cF9zb2NrZXQtPnNvX2NyZWQtPmNyX3ByaXNvbikgewogCQkJCWlmIChpZnAgJiYgaWZwLT5pZl90 eXBlID09IElGVF9GQUlUSCAmJgogCQkJCSAgICAoaW5wLT5pbnBfZmxhZ3MgJiBJTlBfRkFJVEgp ID09IDApCiAJCQkJCWNvbnRpbnVlOwpAQCAtMTAxOSwxMSArMTA0NiwxNCBAQAogCQkJCWVsc2Ug aWYgKGlucC0+aW5wX2xhZGRyLnNfYWRkciA9PSBJTkFERFJfQU5ZKSB7CiAjaWYgZGVmaW5lZChJ TkVUNikKIAkJCQkJaWYgKElOUF9DSEVDS19TT0NLQUYoaW5wLT5pbnBfc29ja2V0LAotCQkJCQkJ CSAgICAgQUZfSU5FVDYpKQorCQkJCQkJCSAgICAgQUZfSU5FVDYpKSB7CiAJCQkJCQlsb2NhbF93 aWxkX21hcHBlZCA9IGlucDsKLQkJCQkJZWxzZQorCQkJCQl9IGVsc2UgeworI2VuZGlmIC8qIGRl ZmluZWQoSU5FVDYpICovCisJCQkJCQlsb2NhbF93aWxkID0gaW5wOworI2lmIGRlZmluZWQoSU5F VDYpCisJCQkJCX0KICNlbmRpZiAvKiBkZWZpbmVkKElORVQ2KSAqLwotCQkJCQlsb2NhbF93aWxk ID0gaW5wOwogCQkJCX0KIAkJCX0KIAkJfQpAQCAtMTE0NSw3ICsxMTc1LDcgQEAKIHsKIAlpZiAo IWphaWxlZCh0ZC0+dGRfdWNyZWQpKQogCQlyZXR1cm4gKDApOwotCWlmIChudG9obChpbnAtPmlu cF9sYWRkci5zX2FkZHIpID09IHByaXNvbl9nZXRpcCh0ZC0+dGRfdWNyZWQpKQorCWlmIChwcmlz b25fY2hlY2tfaXAodGQtPnRkX3VjcmVkLT5jcl9wcmlzb24sIG50b2hsKGlucC0+aW5wX2xhZGRy LnNfYWRkcikpKQogCQlyZXR1cm4gKDApOwogCXJldHVybiAoMSk7CiB9CmRpZmYgLXVyIHNyYy52 aXJnaW4vc3lzL25ldGluZXQvaW5fcGNiLmggc3JjLmRpcnR5L3N5cy9uZXRpbmV0L2luX3BjYi5o Ci0tLSBzcmMudmlyZ2luL3N5cy9uZXRpbmV0L2luX3BjYi5oCVR1ZSBOb3YgMTIgMTM6NDQ6Mzgg MjAwMgorKysgc3JjLmRpcnR5L3N5cy9uZXRpbmV0L2luX3BjYi5oCVRodSBGZWIgMjcgMTc6Mzg6 MzMgMjAwMwpAQCAtMzM5LDcgKzMzOSw3IEBACiBpbnQJaW5fcGNiaW5zaGFzaChzdHJ1Y3QgaW5w Y2IgKik7CiBzdHJ1Y3QgaW5wY2IgKgogCWluX3BjYmxvb2t1cF9sb2NhbChzdHJ1Y3QgaW5wY2Jp bmZvICosCi0JICAgIHN0cnVjdCBpbl9hZGRyLCB1X2ludCwgaW50KTsKKwkgICAgc3RydWN0IGlu X2FkZHIsIHVfaW50LCBpbnQsIHN0cnVjdCB0aHJlYWQgKik7CiBzdHJ1Y3QgaW5wY2IgKgogCWlu X3BjYmxvb2t1cF9oYXNoKHN0cnVjdCBpbnBjYmluZm8gKiwgc3RydWN0IGluX2FkZHIsIHVfaW50 LAogCSAgICBzdHJ1Y3QgaW5fYWRkciwgdV9pbnQsIGludCwgc3RydWN0IGlmbmV0ICopOwpkaWZm IC11ciBzcmMudmlyZ2luL3N5cy9uZXRpbmV0L2lwX2Z3LmMgc3JjLmRpcnR5L3N5cy9uZXRpbmV0 L2lwX2Z3LmMKLS0tIHNyYy52aXJnaW4vc3lzL25ldGluZXQvaXBfZncuYwlTYXQgSnVuIDIyIDA1 OjUxOjAyIDIwMDIKKysrIHNyYy5kaXJ0eS9zeXMvbmV0aW5ldC9pcF9mdy5jCVNhdCBNYXIgMjIg MTM6MzY6MDkgMjAwMwpAQCAtNjQsNiArNjQsOCBAQAogCiAjaW5jbHVkZSA8bmV0aW5ldC9pZl9l dGhlci5oPiAvKiBYWFggZXRoZXJ0eXBlX2lwICovCiAKKyNpbmNsdWRlIDxzeXMvamFpbC5oPgor CiBzdGF0aWMgaW50IGZ3X2RlYnVnID0gMTsKICNpZmRlZiBJUEZJUkVXQUxMX1ZFUkJPU0UKIHN0 YXRpYyBpbnQgZndfdmVyYm9zZSA9IDE7CkBAIC0yMDEwLDYgKzIwMTIsMTEgQEAKIAl9CiAKIAll cnJvciA9IDA7CisKKwkvKiBJZiBhbGxvd19pcGZ3IGlzIG5vdCBlbmFibGVkLCByZXR1cm4gYW4g ZXJyb3IuICovCisJaWYgKHNvcHQtPnNvcHRfdGQtPnRkX3VjcmVkLT5jcl9wcmlzb24gJiYgIXNv cHQtPnNvcHRfdGQtPnRkX3VjcmVkLT5jcl9wcmlzb24tPmphaWxfc2V0dGluZ3MuYWxsb3dfaXBm dykgeworCQlyZXR1cm4gRVBFUk07CisJfQogCiAJc3dpdGNoIChzb3B0LT5zb3B0X25hbWUpIHsK IAljYXNlIElQX0ZXX0dFVDoKZGlmZiAtdXIgc3JjLnZpcmdpbi9zeXMvbmV0aW5ldC9pcF9mdzIu YyBzcmMuZGlydHkvc3lzL25ldGluZXQvaXBfZncyLmMKLS0tIHNyYy52aXJnaW4vc3lzL25ldGlu ZXQvaXBfZncyLmMJU3VuIERlYyAxNSAwNjo1Nzo0MyAyMDAyCisrKyBzcmMuZGlydHkvc3lzL25l dGluZXQvaXBfZncyLmMJU3VuIE1hciAyMyAxMDowNTozNyAyMDAzCkBAIC03Nyw2ICs3Nyw4IEBA CiAKICNpbmNsdWRlIDxtYWNoaW5lL2luX2Nrc3VtLmg+CS8qIFhYWCBmb3IgaW5fY2tzdW0gKi8K IAorI2luY2x1ZGUgPHN5cy9qYWlsLmg+CisKIC8qCiAgKiBYWFggVGhpcyBvbmUgc2hvdWxkIGdv IGluIHN5cy9tYnVmLmguIEl0IGlzIHVzZWQgdG8gYXZvaWQgdGhhdAogICogYSBmaXJld2FsbC1n ZW5lcmF0ZWQgcGFja2V0IGxvb3BzIGZvcmV2ZXIgdGhyb3VnaCB0aGUgZmlyZXdhbGwuCkBAIC0y NDQwLDYgKzI0NDIsMzQgQEAKIAlyZXR1cm4gRUlOVkFMOwogfQogCitzdGF0aWMgaW50CitjaGVj a19pcGZ3X2phaWwoc3RydWN0IHRocmVhZCAqdGQsIHN0cnVjdCBpcF9mdyAqcnVsZSkKK3sKKwlp cGZ3X2luc25faXAgKmlwX2NtZDsKKwlpcGZ3X2luc24gKmNtZDsKKworCS8qIEphaWxlZD8gKi8K KwlpZiAoIXRkLT50ZF91Y3JlZC0+Y3JfcHJpc29uKSB7CisJCXJldHVybiAwOworCX0KKworCS8q IERlZmF1bHQgcnVsZT8gKi8KKwlpZiAocnVsZS0+cnVsZW51bSA9PSBJUEZXX0RFRkFVTFRfUlVM RSkgeworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBDaGVjayBhbGwgSVAgYWRkcmVzc2VzIGluIG9w Y29kZSBsaXN0LiAqLworCWZvciAoY21kID0gcnVsZS0+Y21kOyBjbWQgIT0gQUNUSU9OX1BUUihy dWxlKTsgY21kKyspIHsKKwkJaWYgKGNtZC0+b3Bjb2RlID09IE9fSVBfRFNUIHx8IGNtZC0+b3Bj b2RlID09IE9fSVBfU1JDKSB7CisJCQlpcF9jbWQgPSAoaXBmd19pbnNuX2lwKikoY21kKTsKKwkJ CWlmIChwcmlzb25fY2hlY2tfaXAodGQtPnRkX3VjcmVkLT5jcl9wcmlzb24sIGh0b25sKGlwX2Nt ZC0+YWRkci5zX2FkZHIpKSkgeworCQkJCXJldHVybiAwOworCQkJfQorCQl9CisJfQorCisJcmV0 dXJuIEVQRVJNOworfQogCiAvKioKICAqIHtzZXR8Z2V0fXNvY2tvcHQgcGFyc2VyLgpAQCAtMjQ3 MSw2ICsyNTAxLDExIEBACiAKIAllcnJvciA9IDA7CiAKKyAgICAgICAgLyogSWYgYWxsb3dfaXBm dyBpcyBub3QgZW5hYmxlZCwgcmV0dXJuIGFuIGVycm9yLiAqLworCWlmIChzb3B0LT5zb3B0X3Rk LT50ZF91Y3JlZC0+Y3JfcHJpc29uICYmICFzb3B0LT5zb3B0X3RkLT50ZF91Y3JlZC0+Y3JfcHJp c29uLT5qYWlsX3NldHRpbmdzLmFsbG93X2lwZncpIHsKKwkJcmV0dXJuIEVQRVJNOworCX0KKwog CXN3aXRjaCAoc29wdC0+c29wdF9uYW1lKSB7CiAJY2FzZSBJUF9GV19HRVQ6CiAJCS8qCkBAIC0y NDk4LDEwICsyNTMzLDEyIEBACiAKIAkJYnAgPSBidWY7CiAJCWZvciAocnVsZSA9IGxheWVyM19j aGFpbjsgcnVsZSA7IHJ1bGUgPSBydWxlLT5uZXh0KSB7Ci0JCQlpbnQgaSA9IFJVTEVTSVpFKHJ1 bGUpOwotCQkJYmNvcHkocnVsZSwgYnAsIGkpOwotCQkJKChzdHJ1Y3QgaXBfZncgKilicCktPnNl dF9kaXNhYmxlID0gc2V0X2Rpc2FibGU7Ci0JCQlicCA9IChzdHJ1Y3QgaXBfZncgKikoKGNoYXIg KilicCArIGkpOworCQkJaWYgKCFjaGVja19pcGZ3X2phaWwoc29wdC0+c29wdF90ZCwgcnVsZSkp IHsKKwkJCQlpbnQgaSA9IFJVTEVTSVpFKHJ1bGUpOworCQkJCWJjb3B5KHJ1bGUsIGJwLCBpKTsK KwkJCQkoKHN0cnVjdCBpcF9mdyAqKWJwKS0+c2V0X2Rpc2FibGUgPSBzZXRfZGlzYWJsZTsKKwkJ CQlicCA9IChzdHJ1Y3QgaXBfZncgKikoKGNoYXIgKilicCArIGkpOworCQkJfQogCQl9CiAJCWlm IChpcGZ3X2R5bl92KSB7CiAJCQlpbnQgaTsKQEAgLTI1NDcsNyArMjU4NCwxMCBAQAogCQkgKiB0 aGUgbGlzdCB0byBwb2ludCB0byB0aGUgZGVmYXVsdCBydWxlLCBhbmQgdGhlbiBmcmVlaW5nCiAJ CSAqIHRoZSBvbGQgbGlzdCB3aXRob3V0IHRoZSBuZWVkIGZvciBhIGxvY2suCiAJCSAqLwotCisJ CWlmIChzb3B0LT5zb3B0X3RkLT50ZF91Y3JlZC0+Y3JfcHJpc29uKSB7CisJCQllcnJvciA9IEVQ RVJNOworCQkJYnJlYWs7CisJCX0KIAkJcyA9IHNwbGltcCgpOwogCQlmcmVlX2NoYWluKCZsYXll cjNfY2hhaW4sIDAgLyoga2VlcCBkZWZhdWx0IHJ1bGUgKi8pOwogCQlzcGx4KHMpOwpAQCAtMjU2 MSw2ICsyNjAxLDEwIEBACiAJCWlmIChlcnJvciB8fCAoZXJyb3IgPSBjaGVja19pcGZ3X3N0cnVj dChydWxlLCBzaXplKSkpCiAJCQlicmVhazsKIAorCQkvKiBDaGVjayBhbmQgbWFrZSBzdXJlIElQ IGFkZHJlc3NlcyBhcmUgdmFsaWQgKGlmIGphaWxlZCkuICovCisJCWVycm9yID0gY2hlY2tfaXBm d19qYWlsKHNvcHQtPnNvcHRfdGQsIHJ1bGUpOworCQlpZiAoZXJyb3IpIGJyZWFrOworCiAJCWVy cm9yID0gYWRkX3J1bGUoJmxheWVyM19jaGFpbiwgcnVsZSk7CiAJCXNpemUgPSBSVUxFU0laRShy dWxlKTsKIAkJaWYgKCFlcnJvciAmJiBzb3B0LT5zb3B0X2RpciA9PSBTT1BUX0dFVCkKQEAgLTI1 ODQsNiArMjYyOCw5IEBACiAJCQkyKnNpemVvZih1X2ludDMyX3QpLCBzaXplb2YodV9pbnQzMl90 KSk7CiAJCWlmIChlcnJvcikKIAkJCWJyZWFrOworCQllcnJvciA9IGNoZWNrX2lwZndfamFpbChz b3B0LT5zb3B0X3RkLCAoc3RydWN0IGlwX2Z3KilydWxlX2J1Zik7CisJCWlmIChlcnJvcikKKwkJ CWJyZWFrOwogCQlzaXplID0gc29wdC0+c29wdF92YWxzaXplOwogCQlpZiAoc2l6ZSA9PSBzaXpl b2YodV9pbnQzMl90KSkJLyogZGVsZXRlIG9yIHJlYXNzaWduICovCiAJCQllcnJvciA9IGRlbF9l bnRyeSgmbGF5ZXIzX2NoYWluLCBydWxlX2J1ZlswXSk7CkBAIC0yNjA1LDcgKzI2NTIsMjIgQEAK IAkJICAgIGlmIChlcnJvcikKIAkJCWJyZWFrOwogCQl9Ci0JCWVycm9yID0gemVyb19lbnRyeShy dWxlbnVtLCBzb3B0LT5zb3B0X25hbWUgPT0gSVBfRldfUkVTRVRMT0cpOworCisJCWlmIChzb3B0 LT5zb3B0X3RkLT50ZF91Y3JlZC0+Y3JfcHJpc29uKSB7CisJCQkvKiBXZSBoYXZlIHRvIGRvIHRo aXMgc2xpZ2h0bHkgZGlmZmVyZW50bHkuIHJ1bGVudW0gY2FuJ3QgYmUKKwkJCSAgIGEgcnVsZSB0 aGF0J3Mgb3V0c2lkZSB0aGUgamFpbC4gKi8KKwkJCWZvciAocnVsZSA9IGxheWVyM19jaGFpbjsg cnVsZSA7IHJ1bGUgPSBydWxlLT5uZXh0KSB7CisJCQkJaWYgKHJ1bGUtPnJ1bGVudW0gPT0gcnVs ZW51bSB8fCBydWxlbnVtID09IDApIHsKKwkJCQkJaWYgKCFjaGVja19pcGZ3X2phaWwoc29wdC0+ c29wdF90ZCwgcnVsZSkpIHsKKwkJCQkJCXplcm9fZW50cnkocnVsZS0+cnVsZW51bSwgc29wdC0+ c29wdF9uYW1lID09IElQX0ZXX1JFU0VUTE9HKTsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCWNvbnRp bnVlOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9IGVsc2UgeworCQkJZXJyb3IgPSB6ZXJvX2Vu dHJ5KHJ1bGVudW0sIHNvcHQtPnNvcHRfbmFtZSA9PSBJUF9GV19SRVNFVExPRyk7CisJCX0KIAkJ YnJlYWs7CiAKIAlkZWZhdWx0OgpkaWZmIC11ciBzcmMudmlyZ2luL3N5cy9uZXRpbmV0L3Jhd19p cC5jIHNyYy5kaXJ0eS9zeXMvbmV0aW5ldC9yYXdfaXAuYwotLS0gc3JjLnZpcmdpbi9zeXMvbmV0 aW5ldC9yYXdfaXAuYwlXZWQgTm92IDIwIDEyOjAwOjU0IDIwMDIKKysrIHNyYy5kaXJ0eS9zeXMv bmV0aW5ldC9yYXdfaXAuYwlTYXQgTWFyIDIyIDEyOjE5OjQ2IDIwMDMKQEAgLTc4LDYgKzc4LDgg QEAKICNpbmNsdWRlIDxuZXRpbmV0Ni9pcHNlYy5oPgogI2VuZGlmIC8qSVBTRUMqLwogCisjaW5j bHVkZSA8c3lzL2phaWwuaD4KKwogc3RydWN0CWlucGNiaGVhZCByaXBjYjsKIHN0cnVjdAlpbnBj YmluZm8gcmlwY2JpbmZvOwogCkBAIC01MjgsMTIgKzUzMCwyMCBAQAogewogCXN0cnVjdCBpbnBj YiAqaW5wOwogCWludCBlcnJvciwgczsKKwlzdHJ1Y3QgcHJpc29uICpzYXZlZCA9IE5VTEw7CiAK IAlpbnAgPSBzb3RvaW5wY2Ioc28pOwogCWlmIChpbnApCiAJCXBhbmljKCJyaXBfYXR0YWNoIik7 Ci0JaWYgKHRkICYmIChlcnJvciA9IHN1c2VyKHRkKSkgIT0gMCkKKwlpZiAodGQgJiYgdGQtPnRk X3VjcmVkLT5jcl9wcmlzb24gJiYgdGQtPnRkX3VjcmVkLT5jcl9wcmlzb24tPmphaWxfc2V0dGlu Z3MuYWxsb3dfcmF3X3NvY2tldHMpIHsKKwkJc2F2ZWQgPSB0ZC0+dGRfdWNyZWQtPmNyX3ByaXNv bjsKKwkJdGQtPnRkX3VjcmVkLT5jcl9wcmlzb24gPSBOVUxMOworCX0KKwlpZiAodGQgJiYgKGVy cm9yID0gc3VzZXIodGQpKSAhPSAwKSB7CisJCXRkLT50ZF91Y3JlZC0+Y3JfcHJpc29uID0gc2F2 ZWQ7CiAJCXJldHVybiBlcnJvcjsKKwl9CisJdGQtPnRkX3VjcmVkLT5jcl9wcmlzb24gPSBzYXZl ZDsKIAogCWlmIChwcm90byA+PSBJUFBST1RPX01BWCB8fCBwcm90byA8IDApCiAJCXJldHVybiBF UFJPVE9OT1NVUFBPUlQ7CmRpZmYgLXVyIHNyYy52aXJnaW4vc3lzL25ldGluZXQ2L2luNl9wY2Iu YyBzcmMuZGlydHkvc3lzL25ldGluZXQ2L2luNl9wY2IuYwotLS0gc3JjLnZpcmdpbi9zeXMvbmV0 aW5ldDYvaW42X3BjYi5jCVR1ZSBPY3QgMTUgMjA6MjU6MDUgMjAwMgorKysgc3JjLmRpcnR5L3N5 cy9uZXRpbmV0Ni9pbjZfcGNiLmMJVGh1IEZlYiAyNyAxNzozODozMyAyMDAzCkBAIC0yMTMsNyAr MjEzLDcgQEAKIAkJCQkJaW42X3NpbjZfMl9zaW4oJnNpbiwgc2luNik7CiAJCQkJCXQgPSBpbl9w Y2Jsb29rdXBfbG9jYWwocGNiaW5mbywKIAkJCQkJCXNpbi5zaW5fYWRkciwgbHBvcnQsCi0JCQkJ CQlJTlBMT09LVVBfV0lMRENBUkQpOworCQkJCQkJSU5QTE9PS1VQX1dJTERDQVJELCBOVUxMKTsK IAkJCQkJaWYgKHQgJiYKIAkJCQkJICAgIChzby0+c29fY3JlZC0+Y3JfdWlkICE9CiAJCQkJCSAg ICAgdC0+aW5wX3NvY2tldC0+c29fY3JlZC0+Y3JfdWlkKSAmJgpAQCAtMjM0LDcgKzIzNCw3IEBA CiAKIAkJCQlpbjZfc2luNl8yX3Npbigmc2luLCBzaW42KTsKIAkJCQl0ID0gaW5fcGNibG9va3Vw X2xvY2FsKHBjYmluZm8sIHNpbi5zaW5fYWRkciwKLQkJCQkJCSAgICAgICBscG9ydCwgd2lsZCk7 CisJCQkJCQkgICAgICAgbHBvcnQsIHdpbGQsIHdpbGQgPyBOVUxMIDogdGQpOwogCQkJCWlmICh0 ICYmCiAJCQkJICAgIChyZXVzZXBvcnQgJiB0LT5pbnBfc29ja2V0LT5zb19vcHRpb25zKQogCQkJ CSAgICA9PSAwICYmCmRpZmYgLXVyIHNyYy52aXJnaW4vc3lzL3N5cy9pcGMuaCBzcmMuZGlydHkv c3lzL3N5cy9pcGMuaAotLS0gc3JjLnZpcmdpbi9zeXMvc3lzL2lwYy5oCU1vbiBPY3QgMTQgMTQ6 NTA6NDEgMjAwMgorKysgc3JjLmRpcnR5L3N5cy9zeXMvaXBjLmgJVGh1IEZlYiAyNyAxNzozODoz MyAyMDAzCkBAIC04NCw2ICs4NCw3IEBACiAJdXNob3J0CW1vZGU7CS8qIHIvdyBwZXJtaXNzaW9u ICovCiAJdXNob3J0CXNlcTsJLyogc2VxdWVuY2UgIyAodG8gZ2VuZXJhdGUgdW5pcXVlIG1zZy9z ZW0vc2htIGlkKSAqLwogCWtleV90CWtleTsJLyogdXNlciBzcGVjaWZpZWQgbXNnL3NlbS9zaG0g a2V5ICovCisJc3RydWN0IHByaXNvbiAqcHI7CS8qIEZvciBqYWlsIGNvbnRyb2wuICovCiB9Owog CiAjaWYgX19CU0RfVklTSUJMRQpkaWZmIC11ciBzcmMudmlyZ2luL3N5cy9zeXMvamFpbC5oIHNy Yy5kaXJ0eS9zeXMvc3lzL2phaWwuaAotLS0gc3JjLnZpcmdpbi9zeXMvc3lzL2phaWwuaAlTdW4g TWF5ICA1IDIxOjEzOjA4IDIwMDIKKysrIHNyYy5kaXJ0eS9zeXMvc3lzL2phaWwuaAlTYXQgTWFy IDIyIDEzOjM0OjEyIDIwMDMKQEAgLTE3LDcgKzE3LDggQEAKIAl1X2ludDMyX3QJdmVyc2lvbjsK IAljaGFyCQkqcGF0aDsKIAljaGFyCQkqaG9zdG5hbWU7Ci0JdV9pbnQzMl90CWlwX251bWJlcjsK Kwl1X2ludDMyX3QJKmlwczsKKwl1X2ludAkJbmlwczsKIH07CiAKICNpZm5kZWYgX0tFUk5FTApA QCAtMjksNiArMzAsOSBAQAogI2luY2x1ZGUgPHN5cy9xdWV1ZS5oPgogI2luY2x1ZGUgPHN5cy9f bG9jay5oPgogI2luY2x1ZGUgPHN5cy9fbXV0ZXguaD4KKyNpbmNsdWRlIDxzeXMvc3lzY3RsLmg+ CisKK3N0cnVjdCB2bm9kZTsKIAogI2lmZGVmIE1BTExPQ19ERUNMQVJFCiBNQUxMT0NfREVDTEFS RShNX1BSSVNPTik7CkBAIC00OCwxMCArNTIsMjYgQEAKIHN0cnVjdCBwcmlzb24gewogCWludAkJ IHByX3JlZjsJCQkvKiAocCkgcmVmY291bnQgKi8KIAljaGFyIAkJIHByX2hvc3RbTUFYSE9TVE5B TUVMRU5dOwkvKiAocCkgamFpbCBob3N0bmFtZSAqLwotCXVfaW50MzJfdAkgcHJfaXA7CQkJCS8q IChjKSBpcCBhZGRyIGhvc3QgKi8KKwl1X2ludDMyX3QJICpwcl9pcHM7CQkJLyogKGMpIGlwIGFk ZHIgaG9zdCAqLworCXVfaW50CQlwcl9uaXBzOwogCXZvaWQJCSpwcl9saW51eDsJCQkvKiAocCkg bGludXggYWJpICovCiAJaW50CQkgcHJfc2VjdXJlbGV2ZWw7CQkvKiAocCkgc2VjdXJlbGV2ZWwg Ki8KIAlzdHJ1Y3QgbXR4CSBwcl9tdHg7CisJdV9pbnQJCXByX251bXByb2NzOworCXN0cnVjdCB7 CisJCXVfaW50IG1heF9yYW07CisJCXVfaW50IG1heF9jcHU7CisJCXVfaW50IG1heF9wcm9jczsK KwkJdV9pbnQgcmFtX3VzZWQ7CisJCXVfaW50IHByb2NzX3VzZWQ7CisJCXVfaW50IGNwdV91c2Vk OworCQl1X2ludCBhbGxvd19yYXdfc29ja2V0czsKKwkJdV9pbnQgYWxsb3dfaXBmdzsKKwl9IGph aWxfc2V0dGluZ3M7CisJY2hhciBwcl9ob3N0X29pZFtNQVhIT1NUTkFNRUxFTl07CisJc3RydWN0 IHN5c2N0bF9jdHhfbGlzdCBqZF9zeXNjdGx0cmVlOworCXN0cnVjdCBzeXNjdGxfb2lkICpqZF9z eXNjdGx0cmVldG9wOworCWludCByZXNjaGVkOwogfTsKIAogLyoKQEAgLTY0LDYgKzg0LDE3IEBA CiBleHRlcm4gaW50CWphaWxfc3lzdmlwY19hbGxvd2VkOwogCiAvKgorICogTGlzdCBvZiBqYWls cyAoZm9yIGphaWxfYXR0YWNoKCksIGV0LiBhbC4pCisgKi8KK3N0cnVjdCBqYWlsZWxlbWVudCB7 CisJc3RydWN0IHByaXNvbiAqcHI7CQkJCS8qIFByaXNvbiBlbGVtZW50ICovCisJY2hhciAqY2hy b290X3BhdGg7CQkJCS8qIFBhdGggdG8gY2hyb290IHRvLiAqLworCUxJU1RfRU5UUlkoamFpbGVs ZW1lbnQpIHBvaW50ZXJzOworfTsKKworTElTVF9IRUFEKGphaWxzLCBqYWlsZWxlbWVudCk7CisK Ky8qCiAgKiBLZXJuZWwgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIGphaWwoKS4KICAqLwogc3RydWN0 IHVjcmVkOwpAQCAtNzcsNiArMTA4LDEyIEBACiBpbnQgcHJpc29uX2lmKHN0cnVjdCB1Y3JlZCAq Y3JlZCwgc3RydWN0IHNvY2thZGRyICpzYSk7CiBpbnQgcHJpc29uX2lwKHN0cnVjdCB1Y3JlZCAq Y3JlZCwgaW50IGZsYWcsIHVfaW50MzJfdCAqaXApOwogdm9pZCBwcmlzb25fcmVtb3RlX2lwKHN0 cnVjdCB1Y3JlZCAqY3JlZCwgaW50IGZsYWdzLCB1X2ludDMyX3QgKmlwKTsKK2ludCBwcmlzb25f Y2hlY2tfaXAoc3RydWN0IHByaXNvbiAqcHIsIHVfaW50MzJfdCBpcCk7CitpbnQgamFpbF9jYWxj dG90YWx1c2VkKHN0cnVjdCBwcmlzb24gKnByKTsKK2ludCBqYWlsX2NoZWNrX3Jlc291cmNlcyhz dHJ1Y3QgdGhyZWFkICp0ZCk7CitpbnQgamFpbF9jaGVja19jcHUoc3RydWN0IHVjcmVkICp1Yyk7 Cit2b2lkIGphaWxfdXBkYXRlX2NwdSh2b2lkKTsKK2ludCBqYWlsX2NoZWNrX2ZpbGVwZXJtKHN0 cnVjdCB2bm9kZSAqdnAsIHN0cnVjdCB1Y3JlZCAqY3JlZCwgc3RydWN0IHRocmVhZCAqdGQpOwog CiAjZW5kaWYgLyogIV9LRVJORUwgKi8KICNlbmRpZiAvKiAhX1NZU19KQUlMX0hfICovCmRpZmYg LXVyIHNyYy52aXJnaW4vc3lzL3N5cy9wcm9jLmggc3JjLmRpcnR5L3N5cy9zeXMvcHJvYy5oCi0t LSBzcmMudmlyZ2luL3N5cy9zeXMvcHJvYy5oCU1vbiBEZWMgIDkgMTk6MzM6NDUgMjAwMgorKysg c3JjLmRpcnR5L3N5cy9zeXMvcHJvYy5oCVRodSBGZWIgMjcgMTc6Mzg6MzMgMjAwMwpAQCAtMzQ3 LDYgKzM0Nyw3IEBACiAjZGVmaW5lCVRESV9MT0NLCTB4MDgJLyogU3RvcHBlZCBvbiBhIGxvY2su ICovCiAjZGVmaW5lCVRESV9JV0FJVAkweDEwCS8qIEF3YWl0aW5nIGludGVycnVwdC4gKi8KICNk ZWZpbmUJVERJX0xPQU4JMHgyMAkvKiBib3VuZCB0aHJlYWQncyBLU0UgaXMgbGVudCAqLworI2Rl ZmluZSBURElfSlNMRUVQCTB4NDAJLyogSmFpbCBzdXNwZW5zaW9uIGR1ZSB0byBoaWdoIENQVS4g Ki8KIAogI2RlZmluZQlURF9JU19TTEVFUElORyh0ZCkJKCh0ZCktPnRkX2luaGliaXRvcnMgJiBU RElfU0xFRVBJTkcpCiAjZGVmaW5lCVREX09OX1NMRUVQUSh0ZCkJKCh0ZCktPnRkX3djaGFuICE9 IE5VTEwpCkBAIC0zNTUsNiArMzU2LDcgQEAKICNkZWZpbmUJVERfT05fTE9DSyh0ZCkJCSgodGQp LT50ZF9pbmhpYml0b3JzICYgVERJX0xPQ0spCiAjZGVmaW5lCVREX0xFTlQodGQpCQkoKHRkKS0+ dGRfaW5oaWJpdG9ycyAmIFRESV9MT0FOKQogI2RlZmluZQlURF9BV0FJVElOR19JTlRSKHRkKQko KHRkKS0+dGRfaW5oaWJpdG9ycyAmIFRESV9JV0FJVCkKKyNkZWZpbmUgVERfSVNfSlNMRUVQKHRk KQkoKHRkKS0+dGRfaW5oaWJpdG9ycyAmIFRESV9KU0xFRVApCiAjZGVmaW5lCVREX0lTX1JVTk5J TkcodGQpCSgodGQpLT50ZF9zdGF0ZSA9PSBURFNfUlVOTklORykKICNkZWZpbmUJVERfT05fUlVO USh0ZCkJCSgodGQpLT50ZF9zdGF0ZSA9PSBURFNfUlVOUSkKICNkZWZpbmUJVERfQ0FOX1JVTih0 ZCkJCSgodGQpLT50ZF9zdGF0ZSA9PSBURFNfQ0FOX1JVTikKQEAgLTM3Nyw2ICszNzksNyBAQAog I2RlZmluZQlURF9TRVRfU1VTUEVOREVEKHRkKQlURF9TRVRfSU5ISUIoKHRkKSwgVERJX1NVU1BF TkRFRCkKICNkZWZpbmUJVERfU0VUX0lXQUlUKHRkKQlURF9TRVRfSU5ISUIoKHRkKSwgVERJX0lX QUlUKQogI2RlZmluZQlURF9TRVRfTE9BTih0ZCkJCVREX1NFVF9JTkhJQigodGQpLCBURElfTE9B TikKKyNkZWZpbmUgVERfU0VUX0pTTEVFUCh0ZCkJVERfU0VUX0lOSElCKCh0ZCksIFRESV9KU0xF RVApCiAKICNkZWZpbmUJVERfQ0xSX1NMRUVQSU5HKHRkKQlURF9DTFJfSU5ISUIoKHRkKSwgVERJ X1NMRUVQSU5HKQogI2RlZmluZQlURF9DTFJfU1dBUFBFRCh0ZCkJVERfQ0xSX0lOSElCKCh0ZCks IFRESV9TV0FQUEVEKQpAQCAtMzg0LDYgKzM4Nyw3IEBACiAjZGVmaW5lCVREX0NMUl9TVVNQRU5E RUQodGQpCVREX0NMUl9JTkhJQigodGQpLCBURElfU1VTUEVOREVEKQogI2RlZmluZQlURF9DTFJf SVdBSVQodGQpCVREX0NMUl9JTkhJQigodGQpLCBURElfSVdBSVQpCiAjZGVmaW5lCVREX0NMUl9M T0FOKHRkKQkJVERfQ0xSX0lOSElCKCh0ZCksIFRESV9MT0FOKQorI2RlZmluZSBURF9DTFJfSlNM RUVQKHRkKQlURF9DTFJfSU5ISUIoKHRkKSwgVERJX0pTTEVFUCkKIAogI2RlZmluZQlURF9TRVRf UlVOTklORyh0ZCkJZG8geyh0ZCktPnRkX3N0YXRlID0gVERTX1JVTk5JTkc7IH0gd2hpbGUgKDAp CiAjZGVmaW5lCVREX1NFVF9SVU5RKHRkKQkJZG8geyh0ZCktPnRkX3N0YXRlID0gVERTX1JVTlE7 IH0gd2hpbGUgKDApCmRpZmYgLXVyIHNyYy52aXJnaW4vc3lzL3Vmcy91ZnMvdWZzX3Zub3BzLmMg c3JjLmRpcnR5L3N5cy91ZnMvdWZzL3Vmc192bm9wcy5jCi0tLSBzcmMudmlyZ2luL3N5cy91ZnMv dWZzL3Vmc192bm9wcy5jCVN1biBPY3QgMjcgMTE6MDk6NDkgMjAwMgorKysgc3JjLmRpcnR5L3N5 cy91ZnMvdWZzL3Vmc192bm9wcy5jCU1vbiBNYXIgIDMgMDc6NTc6MTcgMjAwMwpAQCAtNjIsNiAr NjIsNyBAQAogI2luY2x1ZGUgPHN5cy9jb25mLmg+CiAjaW5jbHVkZSA8c3lzL2FjbC5oPgogI2lu Y2x1ZGUgPHN5cy9tYWMuaD4KKyNpbmNsdWRlIDxzeXMvamFpbC5oPgogCiAjaW5jbHVkZSA8bWFj aGluZS9tdXRleC5oPgogCkBAIC0zMzksNiArMzQwLDEyIEBACiAJc3RydWN0IGFjbCAqYWNsOwog CXNpemVfdCBsZW47CiAjZW5kaWYKKworCS8qIERvIHNwZWNpYWwgamFpbCBjaGVja2luZywgaWYg bmVjZXNzYXJ5LiAqLworCWVycm9yID0gamFpbF9jaGVja19maWxlcGVybSh2cCwgYXAtPmFfY3Jl ZCwgYXAtPmFfdGQpOworCWlmIChlcnJvcikgeworCQlyZXR1cm4gZXJyb3I7CisJfQogCiAJLyoK IAkgKiBEaXNhbGxvdyB3cml0ZSBhdHRlbXB0cyBvbiByZWFkLW9ubHkgZmlsZXN5c3RlbXM7CmRp ZmYgLXVyIHNyYy52aXJnaW4vdXNyLnNiaW4vamFpbC9qYWlsLmMgc3JjLmRpcnR5L3Vzci5zYmlu L2phaWwvamFpbC5jCi0tLSBzcmMudmlyZ2luL3Vzci5zYmluL2phaWwvamFpbC5jCU1vbiBBcHIg MjIgMDc6NDQ6NDMgMjAwMgorKysgc3JjLmRpcnR5L3Vzci5zYmluL2phaWwvamFpbC5jCVRodSBG ZWIgMjcgMTc6Mzg6MzMgMjAwMwpAQCAtMjYsMjggKzI2LDY4IEBACiBtYWluKGludCBhcmdjLCBj aGFyICoqYXJndikKIHsKIAlzdHJ1Y3QgamFpbCBqOwotCWludCBpOworCWludCBpLCBrLCBtLCBj ID0gMTsKIAlzdHJ1Y3QgaW5fYWRkciBpbjsKKwljaGFyICp0ZW1wc3RyaW5nLCBpcHN0cmluZ1sx Nl07CiAKLQlpZiAoYXJnYyA8IDUpIAotCQllcnJ4KDEsICJ1c2FnZTogJXMgcGF0aCBob3N0bmFt ZSBpcC1udW1iZXIgY29tbWFuZCAuLi5cbiIsCisJaWYgKGFyZ2MgPCA1KSB7CisJCWVycngoMSwg IlVzYWdlOiAlcyBwYXRoIGhvc3RuYW1lIGlwMVssaXAyWy4uLl1dIGNvbW1hbmQgLi4uXG4iLAog CQkgICAgYXJndlswXSk7CisJfQorCiAJaSA9IGNoZGlyKGFyZ3ZbMV0pOwogCWlmIChpKQogCQll cnIoMSwgImNoZGlyICVzIiwgYXJndlsxXSk7CiAJbWVtc2V0KCZqLCAwLCBzaXplb2YoaikpOwot CWoudmVyc2lvbiA9IDA7CisJai52ZXJzaW9uID0gMTsKIAlqLnBhdGggPSBhcmd2WzFdOwogCWou aG9zdG5hbWUgPSBhcmd2WzJdOwotCWkgPSBpbmV0X2F0b24oYXJndlszXSwgJmluKTsKLQlpZiAo IWkpCi0JCWVycngoMSwgIkNvdWxkbid0IG1ha2Ugc2Vuc2Ugb2YgaXAtbnVtYmVyXG4iKTsKLQlq LmlwX251bWJlciA9IG50b2hsKGluLnNfYWRkcik7CisKKwkvKiBGZWIuIDEsIDIwMDMgKE1TKTog RGV0ZXJtaW5lIGhvdyBtYW55IElQIGFkZHJlc3NlcyB1c2VyIHBhc3NlZCB0byBqYWlsLiBUaGlz CisJICAgaXMgaW1wb3J0YW50IGxhdGVyIGZvciBmaWxsaW5nIGluIGoubmlwcyBhbmQgZm9yIGFs bG9jYXRpbmcgdGhlIHByb3BlciBhbW91bnQKKwkgICBvZiBtZW1vcnkuICovCisJdGVtcHN0cmlu ZyA9IGFyZ3ZbM107CisJd2hpbGUoKnRlbXBzdHJpbmcpIHsKKwkJaWYgKCp0ZW1wc3RyaW5nID09 ICcsJykgYysrOworCQl0ZW1wc3RyaW5nKys7CisJfQorCWoubmlwcyA9IGM7CisKKwkvKiBBbGxv Y2F0ZSBSQU0sIGRlcGVuZGluZyBvbiBudW1iZXIgb2YgSVAgYWRkcmVzc2VzIHBhc3NlZC4gKi8K KwlqLmlwcyA9ICh1X2ludDMyX3QgKiltYWxsb2Moc2l6ZW9mKHVfaW50MzJfdCkgKiBjKTsKKwlp ZiAoai5pcHMgPT0gTlVMTCkgeworCQllcnJ4KDEsICJtYWxsb2MoKSBpc3N1ZSwgbGluZSA1NiAo L3Vzci9zcmMvdXNyLnNiaW4vamFpbC9qYWlsLmMpLiBQb3NzaWJsZSBsYWNrIG9mIFJBTSBvciBz b2Z0d2FyZSBidWcuIik7CisJfQorCisJLyogQ29weSBlYWNoIElQIGludG8gdGhlIGFycmF5Lgor CSAgIE5vdGUgKE1TLCAwMi8wMS8yMDAzKTogNC54IHZlcnNpb24gdXNlZCBzdHJ0b2soKSwgYSBk YW5nZXJvdXMgcHJvZ3JhbW1pbmcgY29uc3RydWN0LiAqLworCXRlbXBzdHJpbmcgPSBhcmd2WzNd OworCW0gPSAwOworCXdoaWxlICgqdGVtcHN0cmluZykgeworCQlrID0gMDsKKwkJd2hpbGUgKDEp IHsKKwkJCWlmICgqKHRlbXBzdHJpbmcraykgPT0gJywnIHx8ICoodGVtcHN0cmluZytrKSA9PSAn XDAnKSB7CisJCQkJc3RybmNweShpcHN0cmluZywgdGVtcHN0cmluZywgayk7CisJCQkJaXBzdHJp bmdba10gPSAnXDAnOworCQkJCWkgPSBpbmV0X2F0b24oaXBzdHJpbmcsICZpbik7CisJCQkJaWYg KCFpKSB7CisJCQkJCWZyZWUoai5pcHMpOworCQkJCQllcnJ4KDEsICJDb3VsZG4ndCBtYWtlIHNl bnNlIG9mIElQIGFkZHJlc3MgJXMiLCBpcHN0cmluZyk7CisJCQkJfQorCQkJCWouaXBzW20rK10g PSBudG9obChpbi5zX2FkZHIpOworCQkJCWJyZWFrOworCQkJfQorCQkJaysrOworCQl9CisJCXRl bXBzdHJpbmcgPSB0ZW1wc3RyaW5nICsgazsKKwkJaWYgKCp0ZW1wc3RyaW5nID09ICcsJykgdGVt cHN0cmluZysrOworCX0KKwkJCiAJaSA9IGphaWwoJmopOwogCWlmIChpKQotCQllcnIoMSwgIklt cHJpc29ubWVudCBmYWlsZWQiKTsKKwkJZXJyeCgxLCAiSW1wcmlzb25tZW50IGZhaWxlZCIpOwog CWkgPSBleGVjdihhcmd2WzRdLCBhcmd2ICsgNCk7CiAJaWYgKGkpCi0JCWVycigxLCAiZXhlY3Yo JXMpIiwgYXJndls0XSk7CisJCWVycngoMSwgImV4ZWN2KCVzKSIsIGFyZ3ZbNF0pOwogCWV4aXQg KDApOwogfQo= ------=_Part_1853_19119760.1150116506221--