Return-Path: Message-ID: <472870DB.9040204@silicom.fr> Date: Wed, 31 Oct 2007 13:11:07 +0100 From: Fabien Chevalier MIME-Version: 1.0 To: Luiz Augusto von Dentz , Johan Hedberg , thiagoss Content-Type: multipart/mixed; boundary="------------020603080109070302080603" Cc: BlueZ development , Brad Midgley Subject: [Bluez-devel] [PATCH] Audio service Newapi patchv3 Reply-To: BlueZ development List-Id: BlueZ development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: bluez-devel-bounces@lists.sourceforge.net Errors-To: bluez-devel-bounces@lists.sourceforge.net This is a multi-part message in MIME format. --------------020603080109070302080603 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit All, Please find attached an updated version of the newapi patch. It fixes a set of coding style issues that Johan reported to me. Cheers, Fabien --------------020603080109070302080603 Content-Type: text/plain; name="newapiv3.diff" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="newapiv3.diff" SW5kZXg6IHBjbV9ibHVldG9vdGguYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwY21fYmx1ZXRvb3Ro LmMJKC4uLi90YWdzLzIwMDcxMDI2XzEwMTAvYXVkaW8pCShyw6l2aXNpb24gMTgwKQorKysg cGNtX2JsdWV0b290aC5jCSguLi4vYnJhbmNoZXMvMjAwNzEwMjZfMTAxMC9hdWRpbykJKHLD qXZpc2lvbiAxODApCkBAIC0zMywxMyArMzMsMTMgQEAKIAogI2luY2x1ZGUgPG5ldGluZXQv aW4uaD4KIAogI2luY2x1ZGUgPGFsc2EvYXNvdW5kbGliLmg+CiAjaW5jbHVkZSA8YWxzYS9w Y21fZXh0ZXJuYWwuaD4KIAotI2luY2x1ZGUgImlwYy5oIgorI2luY2x1ZGUgImF1ZGlvY2xp ZW50LmgiCiAjaW5jbHVkZSAic2JjLmgiCiAjaW5jbHVkZSAicnRwLmgiCiAKIC8vI2RlZmlu ZSBFTkFCTEVfREVCVUcKIAogI2RlZmluZSBVSU5UX1NFQ1NfTUFYIChVSU5UX01BWCAvIDEw MDAwMDAgLSAxKQpAQCAtNjQsMzggKzY0LDY1IEBACiAKICNpZm5kZWYgU0NPX1JYQlVGUwog I2RlZmluZSBTQ09fUlhCVUZTIDB4MDQKICNlbmRpZgogCiBzdHJ1Y3QgYmx1ZXRvb3RoX2Ey ZHAgewotCXNiY190IHNiYzsJCQkvKiBDb2RlYyBkYXRhICovCi0JaW50IGNvZGVzaXplOwkJ CS8qIFNCQyBjb2Rlc2l6ZSAqLwotCWludCBzYW1wbGVzOwkJCS8qIE51bWJlciBvZiBlbmNv ZGVkIHNhbXBsZXMgKi8KLQl1aW50OF90IGJ1ZmZlcltCVUZGRVJfU0laRV07CS8qIENvZGVj IHRyYW5zZmVyIGJ1ZmZlciAqLwotCWludCBjb3VudDsJCQkvKiBDb2RlYyB0cmFuc2ZlciBi dWZmZXIgY291bnRlciAqLwotCi0JaW50IG5zYW1wbGVzOwkJCS8qIEN1bXVsYXRpdmUgbnVt YmVyIG9mIGNvZGVjIHNhbXBsZXMgKi8KLQl1aW50MTZfdCBzZXFfbnVtOwkJLyogQ3VtdWxh dGl2ZSBwYWNrZXQgc2VxdWVuY2UgKi8KLQlpbnQgZnJhbWVfY291bnQ7CQkvKiBDdXJyZW50 IGZyYW1lcyBpbiBidWZmZXIqLworCXNiY19jYXBhYmlsaXRpZXNfdCBzYmNfY2FwYWJpbGl0 aWVzOyAJCisJc2JjX3Qgc2JjOwkJCQkvKiBDb2RlYyBkYXRhICovCisJaW50IHNiY19pbml0 aWFsaXplZDsJCQkvKiBLZWVwIHRyYWNrIGlmIHRoZSBlbmNvZGVyIGlzIGluaXRpYWxpemVk ICovCisJaW50IGNvZGVzaXplOwkJCQkvKiBTQkMgY29kZXNpemUgKi8KKwlpbnQgc2FtcGxl czsJCQkJLyogTnVtYmVyIG9mIGVuY29kZWQgc2FtcGxlcyAqLworCXVpbnQ4X3QgYnVmZmVy W0JVRkZFUl9TSVpFXTsJCS8qIENvZGVjIHRyYW5zZmVyIGJ1ZmZlciAqLworCWludCBjb3Vu dDsJCQkJLyogQ29kZWMgdHJhbnNmZXIgYnVmZmVyIGNvdW50ZXIgKi8KKworCWludCBuc2Ft cGxlczsJCQkJLyogQ3VtdWxhdGl2ZSBudW1iZXIgb2YgY29kZWMgc2FtcGxlcyAqLworCXVp bnQxNl90IHNlcV9udW07CQkJLyogQ3VtdWxhdGl2ZSBwYWNrZXQgc2VxdWVuY2UgKi8KKwlp bnQgZnJhbWVfY291bnQ7CQkJLyogQ3VycmVudCBmcmFtZXMgaW4gYnVmZmVyKi8KK307CisK K3N0cnVjdCBibHVldG9vdGhfYWxzYV9jb25maWcgeworCWNoYXIgZGV2aWNlWzE4XTsgICAg IAkJLyogQWRkcmVzcyBvZiB0aGUgcmVtb3RlIERldmljZSAqLworCWludCBoYXNfZGV2aWNl OyAJCisJdWludDhfdCB0cmFuc3BvcnQ7ICAgCQkvKiBSZXF1ZXN0ZWQgdHJhbnNwb3J0ICov CisJaW50IGhhc190cmFuc3BvcnQ7CQorCXVpbnQxNl90IHJhdGU7CisJaW50IGhhc19yYXRl OworCXVpbnQ4X3QgY2hhbm5lbF9tb2RlOwkJLyogQTJEUCBvbmx5ICovCisJaW50IGhhc19j aGFubmVsX21vZGU7CisJdWludDhfdCBhbGxvY2F0aW9uX21ldGhvZDsJLyogQTJEUCBvbmx5 ICovCisJaW50IGhhc19hbGxvY2F0aW9uX21ldGhvZDsKKwl1aW50OF90IHN1YmJhbmRzOwkJ LyogQTJEUCBvbmx5ICovCisJaW50IGhhc19zdWJiYW5kczsKKwl1aW50OF90IGJsb2NrX2xl bmd0aDsJCS8qIEEyRFAgb25seSAqLworCWludCBoYXNfYmxvY2tfbGVuZ3RoOworCXVpbnQ4 X3QgYml0cG9vbDsJCS8qIEEyRFAgb25seSAqLworCWludCBoYXNfYml0cG9vbDsKIH07CiAK IHN0cnVjdCBibHVldG9vdGhfZGF0YSB7CiAJc25kX3BjbV9pb3BsdWdfdCBpbzsKKwlzdHJ1 Y3QgYmx1ZXRvb3RoX2Fsc2FfY29uZmlnIGFsc2FfY29uZmlnOwkvKiBBTFNBIHJlc291cmNl IGZpbGUgcGFyYW1ldGVycyAqLwogCXZvbGF0aWxlIHNuZF9wY21fc2ZyYW1lc190IGh3X3B0 cjsKLQlzdHJ1Y3QgaXBjX2RhdGFfY2ZnIGNmZzsJLyogQmx1ZXRvb3RoIGRldmljZSBjb25m aWcgKi8KLQlzdHJ1Y3QgcG9sbGZkIHN0cmVhbTsJCS8qIEF1ZGlvIHN0cmVhbSBmaWxlZGVz Y3JpcHRvciAqLwotCXN0cnVjdCBwb2xsZmQgc2VydmVyOwkJLyogQXVkaW8gZGFlbW9uIGZp bGVkZXNjcmlwdG9yICovCi0JdWludDhfdCBidWZmZXJbQlVGRkVSX1NJWkVdOwkvKiBFbmNv ZGVkIHRyYW5zZmVyIGJ1ZmZlciAqLwotCWludCBjb3VudDsJCQkvKiBUcmFuc2ZlciBidWZm ZXIgY291bnRlciAqLwotCXN0cnVjdCBibHVldG9vdGhfYTJkcCBhMmRwOwkvKiBBMkRQIGRh dGEgKi8KKwlpbnQgdHJhbnNwb3J0OwkJCQkJLyogY2hvc2VuIHRyYW5zcG9ydCBTQ08gb3Ig QUQyUCAqLwkKKwlpbnQgbGlua19tdHU7CQkJCQkvKiBNVFUgZm9yIHNlbGVjdGVkIHRyYW5z cG9ydCBjaGFubmVsICovCisJdm9sYXRpbGUgc3RydWN0IHBvbGxmZCBzdHJlYW07CQkJLyog QXVkaW8gc3RyZWFtIGZpbGVkZXNjcmlwdG9yICovCisJc3RydWN0IHBvbGxmZCBzZXJ2ZXI7 CQkJCS8qIEF1ZGlvIGRhZW1vbiBmaWxlZGVzY3JpcHRvciAqLworCXVpbnQ4X3QgYnVmZmVy W0JVRkZFUl9TSVpFXTsJCS8qIEVuY29kZWQgdHJhbnNmZXIgYnVmZmVyICovCisJaW50IGNv dW50OwkJCQkJLyogVHJhbnNmZXIgYnVmZmVyIGNvdW50ZXIgKi8KKwlzdHJ1Y3QgYmx1ZXRv b3RoX2EyZHAgYTJkcDsJCQkvKiBBMkRQIGRhdGEgKi8KIAotCXB0aHJlYWRfdCBod190aHJl YWQ7CQkvKiBNYWtlcyB2aXJ0dWFsIGh3IHBvaW50ZXIgbW92ZSAqLwotCWludCBwaXBlZmRb Ml07CQkJLyogSW50ZXIgdGhyZWFkIGNvbW11bmljYXRpb24gKi8KKwlwdGhyZWFkX3QgaHdf dGhyZWFkOwkJCQkvKiBNYWtlcyB2aXJ0dWFsIGh3IHBvaW50ZXIgbW92ZSAqLworCWludCBw aXBlZmRbMl07CQkJCQkvKiBJbnRlciB0aHJlYWQgY29tbXVuaWNhdGlvbiAqLwogCWludCBz dG9wcGVkOwogfTsKIAorc3RhdGljIGludCBhdWRpb3NlcnZpY2Vfc2VuZChpbnQgc2ssIGNv bnN0IGJ0X2F1ZGlvX21zZ19oZWFkZXJfdCAqbXNnKTsKK3N0YXRpYyBpbnQgYXVkaW9zZXJ2 aWNlX2V4cGVjdChpbnQgc2ssIGJ0X2F1ZGlvX21zZ19oZWFkZXJfdCAqb3V0bXNnLAorCQkJ CWludCBleHBlY3RlZF90eXBlKTsKKwogc3RhdGljIGludCBibHVldG9vdGhfc3RhcnQoc25k X3BjbV9pb3BsdWdfdCAqaW8pCiB7CiAJREJHKCJibHVldG9vdGhfc3RhcnQgJXAiLCBpbyk7 CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE4Myw3OCArMjEwLDE5IEBACiAJfQogCiAJZGF0YS0+ aHdfdGhyZWFkID0gMDsKIAlwdGhyZWFkX2V4aXQoTlVMTCk7CiB9CiAKLSNpZiAwCi1zdGF0 aWMgaW50IGJsdWV0b290aF9zdGF0ZV9pbml0KHN0cnVjdCBpcGNfcGFja2V0ICpwa3QsIGlu dCBuZXdzdGF0ZSkKLXsKLQlzdHJ1Y3QgaXBjX2RhdGFfc3RhdGUgKnN0YXRlID0gKHZvaWQg KikgcGt0LT5kYXRhOwotCi0JcGt0LT5sZW5ndGggPSBzaXplb2YoKnN0YXRlKTsKLQlwa3Qt PnR5cGUgPSBQS1RfVFlQRV9TVEFURV9SRVE7Ci0JcGt0LT5lcnJvciA9IFBLVF9FUlJPUl9O T05FOwotCXN0YXRlLT5zdGF0ZSA9IG5ld3N0YXRlOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0 YXRpYyBpbnQgYmx1ZXRvb3RoX3N0YXRlKHN0cnVjdCBibHVldG9vdGhfZGF0YSAqZGF0YSwg aW50IG5ld3N0YXRlKQotewotCWNoYXIgYnVmW0lQQ19NVFVdOwotCXN0cnVjdCBpcGNfcGFj a2V0ICpwa3QgPSAodm9pZCAqKSBidWY7Ci0Jc3RydWN0IGlwY19kYXRhX3N0YXRlICpzdGF0 ZSA9ICh2b2lkICopIHBrdC0+ZGF0YTsKLQlpbnQgcmV0OwotCi0JbWVtc2V0KGJ1ZiwgMCwg c2l6ZW9mKGJ1ZikpOwotCi0JcmV0ID0gYmx1ZXRvb3RoX3N0YXRlX2luaXQocGt0LCBuZXdz dGF0ZSk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiAtcmV0OwotCi0JcmV0ID0gc2VuZChk YXRhLT5zZXJ2ZXIuZmQsIHBrdCwgc2l6ZW9mKCpwa3QpICsgcGt0LT5sZW5ndGgsIDApOwot CWlmIChyZXQgPCAwKQotCQlyZXR1cm4gLWVycm5vOwotCWVsc2UgaWYgKHJldCA9PSAwKQot CQlyZXR1cm4gLUVJTzsKLQotCURCRygiT0sgLSAlZCBieXRlcyBzZW50LiBXYWl0aW5nIGZv ciByZXNwb25zZS4uLiIsIHJldCk7Ci0KLQltZW1zZXQoYnVmLCAwLCBzaXplb2YoYnVmKSk7 Ci0KLQlyZXQgPSByZWN2KGRhdGEtPnNlcnZlci5mZCwgYnVmLCBzaXplb2YoKnBrdCkgKyBz aXplb2YoKnN0YXRlKSwgMCk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiAtZXJybm87Ci0J ZWxzZSBpZiAocmV0ID09IDApCi0JCXJldHVybiAtRUlPOwotCi0JaWYgKHBrdC0+dHlwZSAh PSBQS1RfVFlQRV9TVEFURV9SU1ApIHsKLQkJU05ERVJSKCJVbmV4cGVjdGVkIHBhY2tldCB0 eXBlICVkIHJlY2VpdmVkIiwgcGt0LT50eXBlKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQot Ci0JaWYgKHBrdC0+ZXJyb3IgIT0gUEtUX0VSUk9SX05PTkUpIHsKLQkJU05ERVJSKCJFcnJv ciAlZCB3aGlsZSBjb25maWd1cmluZyBkZXZpY2UiLCBwa3QtPmVycm9yKTsKLQkJcmV0dXJu IC1wa3QtPmVycm9yOwotCX0KLQotCXJldHVybiAwOwotfQotI2VuZGlmCi0KIHN0YXRpYyBp bnQgYmx1ZXRvb3RoX3BsYXliYWNrX3N0YXJ0KHNuZF9wY21faW9wbHVnX3QgKmlvKQogewog CXN0cnVjdCBibHVldG9vdGhfZGF0YSAqZGF0YSA9IGlvLT5wcml2YXRlX2RhdGE7CiAJaW50 IGVycjsKIAogCURCRygiJXAiLCBpbyk7CiAKLSNpZiAwCi0JYmx1ZXRvb3RoX3N0YXRlKGRh dGEsIFNUQVRFX1NUUkVBTUlORyk7Ci0jZW5kaWYKIAlkYXRhLT5zdG9wcGVkID0gMDsKIAog CWlmIChkYXRhLT5od190aHJlYWQpCiAJCXJldHVybiAwOwogCiAJZXJyID0gcHRocmVhZF9j cmVhdGUoJmRhdGEtPmh3X3RocmVhZCwgMCwgcGxheWJhY2tfaHdfdGhyZWFkLCBkYXRhKTsK QEAgLTI2NSwxNSArMjMzLDEyIEBACiBzdGF0aWMgaW50IGJsdWV0b290aF9wbGF5YmFja19z dG9wKHNuZF9wY21faW9wbHVnX3QgKmlvKQogewogCXN0cnVjdCBibHVldG9vdGhfZGF0YSAq ZGF0YSA9IGlvLT5wcml2YXRlX2RhdGE7CiAKIAlEQkcoIiVwIiwgaW8pOwogCi0jaWYgMAot CWJsdWV0b290aF9zdGF0ZShkYXRhLCBTVEFURV9DT05ORUNURUQpOwotI2VuZGlmCiAJZGF0 YS0+c3RvcHBlZCA9IDE7CiAKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHNuZF9wY21fc2Zy YW1lc190IGJsdWV0b290aF9wb2ludGVyKHNuZF9wY21faW9wbHVnX3QgKmlvKQpAQCAtMjg1 LDIzICsyNTAsMjMgQEAKIAogc3RhdGljIHZvaWQgYmx1ZXRvb3RoX2V4aXQoc3RydWN0IGJs dWV0b290aF9kYXRhICpkYXRhKQogewogCXN0cnVjdCBibHVldG9vdGhfYTJkcCAqYTJkcCA9 ICZkYXRhLT5hMmRwOwogCiAJaWYgKGRhdGEtPnNlcnZlci5mZCA+PSAwKQotCQljbG9zZShk YXRhLT5zZXJ2ZXIuZmQpOworCQlidF9hdWRpb19zZXJ2aWNlX2Nsb3NlKGRhdGEtPnNlcnZl ci5mZCk7CiAKIAlpZiAoZGF0YS0+c3RyZWFtLmZkID49IDApCiAJCWNsb3NlKGRhdGEtPnN0 cmVhbS5mZCk7CiAKIAlpZiAoZGF0YS0+aHdfdGhyZWFkKSB7CiAJCXB0aHJlYWRfY2FuY2Vs KGRhdGEtPmh3X3RocmVhZCk7CiAJCXB0aHJlYWRfam9pbihkYXRhLT5od190aHJlYWQsIDAp OwogCX0KIAotCWlmIChkYXRhLT5jZmcuY29kZWMgPT0gQ0ZHX0NPREVDX1NCQykKKwlpZiAo YTJkcC0+c2JjX2luaXRpYWxpemVkKQogCQlzYmNfZmluaXNoKCZhMmRwLT5zYmMpOwogCiAJ aWYgKGRhdGEtPnBpcGVmZFswXSA+IDApCiAJCWNsb3NlKGRhdGEtPnBpcGVmZFswXSk7CiAK IAlpZiAoZGF0YS0+cGlwZWZkWzFdID4gMCkKQEAgLTMyMiw4MiArMjg3LDIwNyBAQAogfQog CiBzdGF0aWMgaW50IGJsdWV0b290aF9wcmVwYXJlKHNuZF9wY21faW9wbHVnX3QgKmlvKQog ewogCXN0cnVjdCBibHVldG9vdGhfZGF0YSAqZGF0YSA9IGlvLT5wcml2YXRlX2RhdGE7CiAJ Y2hhciBjID0gJ3cnOworCWNoYXIgYnVmW0JUX0FVRElPX0lQQ19QQUNLRVRfU0laRV07CisJ c3RydWN0IGJ0X3N0cmVhbXN0YXJ0X3JlcSAqc3RhcnRfcmVxID0gKHZvaWQqKSBidWY7CisJ c3RydWN0IGJ0X3N0cmVhbXN0YXJ0X3JzcCAqc3RhcnRfcnNwID0gKHZvaWQqKSBidWY7CisJ c3RydWN0IGJ0X2RhdGFmZF9pbmQgKmRhdGFmZF9pbmQgPSAodm9pZCopIGJ1ZjsKKwl1aW50 MzJfdCBwZXJpb2RfY291bnQgPSBpby0+YnVmZmVyX3NpemUgLyBpby0+cGVyaW9kX3NpemU7 CisJaW50IG9wdF9uYW1lLCBlcnI7CisJc3RydWN0IHRpbWV2YWwgdCA9IHsgMCwgcGVyaW9k X2NvdW50IH07CiAKIAlEQkcoIlByZXBhcmluZyB3aXRoIGlvLT5wZXJpb2Rfc2l6ZT0lbHUg aW8tPmJ1ZmZlcl9zaXplPSVsdSIsCiAJCQkJCWlvLT5wZXJpb2Rfc2l6ZSwgaW8tPmJ1ZmZl cl9zaXplKTsKIAorCS8qIEFzIHdlJ3JlIGdvbm5hIHJlY2VpdmUgbWVzc2FnZXMgb24gdGhl IHNlcnZlciBzb2NrZXQsIHdlIGhhdmUgdG8gc3RvcCB0aGUgCisJICAgaHcgdGhyZWFkIHRo YXQgaXMgcG9sbGluZyBvbiBpdCwgaWYgYW55ICovCisKKwlpZiAoZGF0YS0+aHdfdGhyZWFk KSB7CisJCXB0aHJlYWRfY2FuY2VsKGRhdGEtPmh3X3RocmVhZCk7CisJCXB0aHJlYWRfam9p bihkYXRhLT5od190aHJlYWQsIDApOworCQlkYXRhLT5od190aHJlYWQgPSAwOworCX0KKwog CWlmIChpby0+c3RyZWFtID09IFNORF9QQ01fU1RSRUFNX1BMQVlCQUNLKQogCQkvKiBJZiBu b3QgbnVsbCBmb3IgcGxheWJhY2ssIHhtbXMgZG9lc24ndCBkaXNwbGF5IHRpbWUKIAkJICog Y29ycmVjdGx5ICovCiAJCWRhdGEtPmh3X3B0ciA9IDA7CiAJZWxzZQogCQkvKiBBTFNBIGxp YnJhcnkgaXMgcmVhbGx5IHBpY2t5IG9uIHRoZSBmYWN0IGh3X3B0ciBpcyBub3QgbnVsbC4K IAkJICogSWYgaXQgaXMsIGNhcHR1cmUgd29uJ3Qgc3RhcnQgKi8KIAkJZGF0YS0+aHdfcHRy ID0gaW8tPnBlcmlvZF9zaXplOwogCi0JLyogd2FrZSB1cCBhbnkgY2xpZW50IHBvbGxpbmcg YXQgdXMgKi8KLQlyZXR1cm4gd3JpdGUoZGF0YS0+cGlwZWZkWzFdLCAmYywgMSk7Ci19CisJ Lyogc2VuZCBzdGFydCAqLworCW1lbXNldChzdGFydF9yZXEsIDAsIEJUX0FVRElPX0lQQ19Q QUNLRVRfU0laRSk7CisJc3RhcnRfcmVxLT5oLm1zZ190eXBlID0gQlRfU1RSRUFNU1RBUlRf UkVROwogCi1zdGF0aWMgaW50IGJsdWV0b290aF9oc3BfaHdfcGFyYW1zKHNuZF9wY21faW9w bHVnX3QgKmlvLAotCQkJCQlzbmRfcGNtX2h3X3BhcmFtc190ICpwYXJhbXMpCi17Ci0Jc3Ry dWN0IGJsdWV0b290aF9kYXRhICpkYXRhID0gaW8tPnByaXZhdGVfZGF0YTsKLQl1aW50MzJf dCBwZXJpb2RfY291bnQgPSBpby0+YnVmZmVyX3NpemUgLyBpby0+cGVyaW9kX3NpemU7Ci0J aW50IG9wdF9uYW1lLCBlcnI7CisJZXJyID0gYXVkaW9zZXJ2aWNlX3NlbmQoZGF0YS0+c2Vy dmVyLmZkLCAmc3RhcnRfcmVxLT5oKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsK KworCWVyciA9IGF1ZGlvc2VydmljZV9leHBlY3QoZGF0YS0+c2VydmVyLmZkLCAmc3RhcnRf cnNwLT5oLCBCVF9TVFJFQU1TVEFSVF9SU1ApOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4g ZXJyOworCisJaWYgKHN0YXJ0X3JzcC0+cG9zaXhfZXJybm8gIT0gMCkgeworCQlTTkRFUlIo IkJUX1NUQVJUIGZhaWxlZCA6ICVzKCVkKSIsCisJCQkJCXN0cmVycm9yKHN0YXJ0X3JzcC0+ cG9zaXhfZXJybm8pLCAKKwkJCQkJc3RhcnRfcnNwLT5wb3NpeF9lcnJubyk7CisJCXJldHVy biAtc3RhcnRfcnNwLT5wb3NpeF9lcnJubzsKKwl9CisKKwllcnIgPSBhdWRpb3NlcnZpY2Vf ZXhwZWN0KGRhdGEtPnNlcnZlci5mZCwgJmRhdGFmZF9pbmQtPmgsIEJUX1NUUkVBTUZEX0lO RCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwlpZiAoZGF0YS0+c3RyZWFt LmZkID49IDApCisJCWNsb3NlKGRhdGEtPnN0cmVhbS5mZCk7CiAKLQlEQkcoImZkPSVkIHBl cmlvZF9jb3VudD0lZCIsIGRhdGEtPnN0cmVhbS5mZCwgcGVyaW9kX2NvdW50KTsKKwlkYXRh LT5zdHJlYW0uZmQgPSBidF9hdWRpb19zZXJ2aWNlX2dldF9kYXRhX2ZkKGRhdGEtPnNlcnZl ci5mZCk7CisJaWYgKGRhdGEtPnN0cmVhbS5mZCA8IDApIHsKKwkJcmV0dXJuIC1lcnJubzsK Kwl9CisKKwlpZiAoZGF0YS0+dHJhbnNwb3J0ID09IEJUX0NBUEFCSUxJVElFU19UUkFOU1BP UlRfQTJEUCkgeworCQlvcHRfbmFtZSA9IChpby0+c3RyZWFtID09IFNORF9QQ01fU1RSRUFN X1BMQVlCQUNLKSA/CisJCQkJCQlTT19TTkRUSU1FTyA6IFNPX1JDVlRJTUVPOwogCi0Jb3B0 X25hbWUgPSAoaW8tPnN0cmVhbSA9PSBTTkRfUENNX1NUUkVBTV9QTEFZQkFDSykgPworCQlp ZiAoc2V0c29ja29wdChkYXRhLT5zdHJlYW0uZmQsIFNPTF9TT0NLRVQsIG9wdF9uYW1lLCAm dCwKKwkJCQkJCQlzaXplb2YodCkpIDwgMCkgeworCQkJcmV0dXJuIC1lcnJubzsKKwkJfQor CX0gZWxzZSB7CisJCW9wdF9uYW1lID0gKGlvLT5zdHJlYW0gPT0gU05EX1BDTV9TVFJFQU1f UExBWUJBQ0spID8KIAkJCQkJCVNDT19UWEJVRlMgOiBTQ09fUlhCVUZTOwogCi0JaWYgKHNl dHNvY2tvcHQoZGF0YS0+c3RyZWFtLmZkLCBTT0xfU0NPLCBvcHRfbmFtZSwgJnBlcmlvZF9j b3VudCwKKwkJaWYgKHNldHNvY2tvcHQoZGF0YS0+c3RyZWFtLmZkLCBTT0xfU0NPLCBvcHRf bmFtZSwgJnBlcmlvZF9jb3VudCwKIAkJCQkJCXNpemVvZihwZXJpb2RfY291bnQpKSA9PSAw KQotCQlyZXR1cm4gMDsKKwkJCXJldHVybiAwOwogCi0Jb3B0X25hbWUgPSAoaW8tPnN0cmVh bSA9PSBTTkRfUENNX1NUUkVBTV9QTEFZQkFDSykgPworCQlvcHRfbmFtZSA9IChpby0+c3Ry ZWFtID09IFNORF9QQ01fU1RSRUFNX1BMQVlCQUNLKSA/CiAJCQkJCQlTT19TTkRCVUYgOiBT T19SQ1ZCVUY7CiAKLQlpZiAoc2V0c29ja29wdChkYXRhLT5zdHJlYW0uZmQsIFNPTF9TQ08s IG9wdF9uYW1lLCAmcGVyaW9kX2NvdW50LAorCQlpZiAoc2V0c29ja29wdChkYXRhLT5zdHJl YW0uZmQsIFNPTF9TQ08sIG9wdF9uYW1lLCAmcGVyaW9kX2NvdW50LAogCQkJCQkJc2l6ZW9m KHBlcmlvZF9jb3VudCkpID09IDApCi0JCXJldHVybiAwOwotCi0JZXJyID0gZXJybm87CisJ CQlyZXR1cm4gMDsKIAotCVNOREVSUigiJXMgKCVkKSIsIHN0cmVycm9yKGVyciksIGVycik7 CisJCS8qIEZJWE1FIDogaGFuZGxlIGVycm9yIGNvZGVzICovCisJfQogCi0JLyogRklYTUU6 IFdlIHNob3VsZCBub3QgaWdub3JlcyBlcnJvcnMgaW4gdGhlIGZ1dHVyZS4gKi8KLQlyZXR1 cm4gMDsKKwkvKiB3YWtlIHVwIGFueSBjbGllbnQgcG9sbGluZyBhdCB1cyAqLworCXJldHVy biB3cml0ZShkYXRhLT5waXBlZmRbMV0sICZjLCAxKTsKIH0KIAogc3RhdGljIGludCBibHVl dG9vdGhfYTJkcF9od19wYXJhbXMoc25kX3BjbV9pb3BsdWdfdCAqaW8sCiAJCQkJCXNuZF9w Y21faHdfcGFyYW1zX3QgKnBhcmFtcykKIHsKIAlzdHJ1Y3QgYmx1ZXRvb3RoX2RhdGEgKmRh dGEgPSBpby0+cHJpdmF0ZV9kYXRhOwotCXVpbnQzMl90IHBlcmlvZF9jb3VudCA9IGlvLT5i dWZmZXJfc2l6ZSAvIGlvLT5wZXJpb2Rfc2l6ZTsKLQlpbnQgb3B0X25hbWUsIGVycjsKLQlz dHJ1Y3QgdGltZXZhbCB0ID0geyAwLCBwZXJpb2RfY291bnQgfTsKKwlzdHJ1Y3QgYmx1ZXRv b3RoX2EyZHAgKmEyZHAgPSAmZGF0YS0+YTJkcDsKKwljaGFyIGJ1ZltCVF9BVURJT19JUENf UEFDS0VUX1NJWkVdOworCXN0cnVjdCBidF9zZXRjb25maWd1cmF0aW9uX3JlcSAqc2V0Y29u Zl9yZXEgPSAodm9pZCopIGJ1ZjsKKwlzdHJ1Y3QgYnRfc2V0Y29uZmlndXJhdGlvbl9yc3Ag KnNldGNvbmZfcnNwID0gKHZvaWQqKSBidWY7CisJaW50IGVycjsKKwlzYmNfY2FwYWJpbGl0 aWVzX3QgYWN0aXZlX2NhcGFiaWxpdGllczsKIAotCURCRygiZmQ9JWQgcGVyaW9kX2NvdW50 PSVkIiwgZGF0YS0+c3RyZWFtLmZkLCBwZXJpb2RfY291bnQpOworCURCRygiUHJlcGFyaW5n IHdpdGggaW8tPnBlcmlvZF9zaXplPSVsdSBpby0+YnVmZmVyX3NpemU9JWx1IiwKKwkJCQkJ aW8tPnBlcmlvZF9zaXplLCBpby0+YnVmZmVyX3NpemUpOwogCi0Jb3B0X25hbWUgPSAoaW8t PnN0cmVhbSA9PSBTTkRfUENNX1NUUkVBTV9QTEFZQkFDSykgPwotCQkJCQkJU09fU05EVElN RU8gOiBTT19SQ1ZUSU1FTzsKKwkvKiBGSVhNRTogdGhpcyBuZWVkcyB0byBiZSByZWFsbHkg aW1wbGVtZW50ZWQgKHRha2UgaW50byBhY2NvdW50IAorCXJlYWwgYXNvdW5kcmMgc2V0dGlu Z3MgKyBBTFNBIGh3IHNldHRpbmdzICkgb25jZSBzZXJ2ZXIgc2lkZSBzZW5kcyB1cyAKKwlt b3JlIHRoYW4gb25lIHBvc3NpYmxlIGNvbmZpZ3VyYXRpb24gKi8KKwlhY3RpdmVfY2FwYWJp bGl0aWVzID0gYTJkcC0+c2JjX2NhcGFiaWxpdGllczsKKwkKKwltZW1zZXQoc2V0Y29uZl9y ZXEsIDAsIEJUX0FVRElPX0lQQ19QQUNLRVRfU0laRSk7CisJc2V0Y29uZl9yZXEtPmgubXNn X3R5cGUgPSBCVF9TRVRDT05GSUdVUkFUSU9OX1JFUTsKKwlzZXRjb25mX3JlcS0+c2JjX2Nh cGFiaWxpdGllcyA9IGFjdGl2ZV9jYXBhYmlsaXRpZXM7CiAKLQlpZiAoc2V0c29ja29wdChk YXRhLT5zdHJlYW0uZmQsIFNPTF9TT0NLRVQsIG9wdF9uYW1lLCAmdCwKLQkJCQkJCQlzaXpl b2YodCkpID09IDApCi0JCXJldHVybiAwOworCWVyciA9IGF1ZGlvc2VydmljZV9zZW5kKGRh dGEtPnNlcnZlci5mZCwgJnNldGNvbmZfcmVxLT5oKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0 dXJuIGVycjsKIAotCWVyciA9IGVycm5vOworCWVyciA9IGF1ZGlvc2VydmljZV9leHBlY3Qo ZGF0YS0+c2VydmVyLmZkLCAmc2V0Y29uZl9yc3AtPmgsIEJUX1NFVENPTkZJR1VSQVRJT05f UlNQKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAotCVNOREVSUigiJXMgKCVk KSIsIHN0cmVycm9yKGVyciksIGVycik7CisJaWYgKHNldGNvbmZfcnNwLT5wb3NpeF9lcnJu byAhPSAwKSB7CisJCVNOREVSUigiQlRfU0VUQ09ORklHVVJBVElPTiBmYWlsZWQgOiAlcygl ZCkiLAorCQkJCQlzdHJlcnJvcihzZXRjb25mX3JzcC0+cG9zaXhfZXJybm8pLCAKKwkJCQkJ c2V0Y29uZl9yc3AtPnBvc2l4X2Vycm5vKTsKKwkJcmV0dXJuIC1zZXRjb25mX3JzcC0+cG9z aXhfZXJybm87CisJfQogCi0JcmV0dXJuIC1lcnI7CisJLyogU2V0dXAgU0JDIGVuY29kZXIg bm93IHdlIGFncmVlIG9uIHBhcmFtZXRlcnMgKi8KKwlpZiAoYTJkcC0+c2JjX2luaXRpYWxp emVkKQorCQlzYmNfZmluaXNoKCZhMmRwLT5zYmMpOworCisJLyogRklYTUU6IGluaXQgdXNp bmcgZmxhZ3M/ICovCisJc2JjX2luaXQoJmEyZHAtPnNiYywgMCk7CisJYTJkcC0+c2JjX2lu aXRpYWxpemVkID0gMTsKKwlpZiAoYWN0aXZlX2NhcGFiaWxpdGllcy5mcmVxdWVuY3kgJiBC VF9BMkRQX1NBTVBMSU5HX0ZSRVFfMTYwMDApCQorCQlhMmRwLT5zYmMucmF0ZSA9IDE2MDAw OworCQorCWlmIChhY3RpdmVfY2FwYWJpbGl0aWVzLmZyZXF1ZW5jeSAmIEJUX0EyRFBfU0FN UExJTkdfRlJFUV8zMjAwMCkJCisJCWEyZHAtPnNiYy5yYXRlID0gMzIwMDA7CisJCisJaWYg KGFjdGl2ZV9jYXBhYmlsaXRpZXMuZnJlcXVlbmN5ICYgQlRfQTJEUF9TQU1QTElOR19GUkVR XzQ0MTAwKQkKKwkJYTJkcC0+c2JjLnJhdGUgPSA0NDEwMDsKKwkKKwlpZiAoYWN0aXZlX2Nh cGFiaWxpdGllcy5mcmVxdWVuY3kgJiBCVF9BMkRQX1NBTVBMSU5HX0ZSRVFfNDgwMDApCQor CQlhMmRwLT5zYmMucmF0ZSA9IDQ4MDAwOworCQorCWlmIChhY3RpdmVfY2FwYWJpbGl0aWVz LmNoYW5uZWxfbW9kZSAmIEJUX0EyRFBfQ0hBTk5FTF9NT0RFX01PTk8pCQorCQlhMmRwLT5z YmMuY2hhbm5lbHMgPSAxOworCWVsc2UKKwkJYTJkcC0+c2JjLmNoYW5uZWxzID0gMjsKKwor CWlmIChhY3RpdmVfY2FwYWJpbGl0aWVzLmNoYW5uZWxfbW9kZSAmCisJCQkoQlRfQTJEUF9D SEFOTkVMX01PREVfTU9OTyB8fCBCVF9BMkRQX0NIQU5ORUxfTU9ERV9KT0lOVF9TVEVSRU8p KQorCQlhMmRwLT5zYmMuam9pbnQgPSAxOworCWVsc2UKKwkJYTJkcC0+c2JjLmpvaW50ID0g MDsKKworCWEyZHAtPnNiYy5hbGxvY2F0aW9uID0gYWN0aXZlX2NhcGFiaWxpdGllcy5hbGxv Y2F0aW9uX21ldGhvZCAKKwkJCQkJPT0gQlRfQTJEUF9BTExPQ0FUSU9OX1NOUiA/IDB4MDEg OiAweDAwOworCQorCXN3aXRjaCAoYWN0aXZlX2NhcGFiaWxpdGllcy5zdWJiYW5kcykgewor CWNhc2UgQlRfQTJEUF9TVUJCQU5EU180OgorCQlhMmRwLT5zYmMuc3ViYmFuZHMgPSA0Owor CQlicmVhazsKKwljYXNlIEJUX0EyRFBfU1VCQkFORFNfODoKKwkJYTJkcC0+c2JjLnN1YmJh bmRzID0gODsKKwkJYnJlYWs7CisJfQorCisJc3dpdGNoIChhY3RpdmVfY2FwYWJpbGl0aWVz LmJsb2NrX2xlbmd0aCkgeworCWNhc2UgQlRfQTJEUF9CTE9DS19MRU5HVEhfNDoKKwkJYTJk cC0+c2JjLmJsb2NrcyA9IDQ7CisJCWJyZWFrOworCWNhc2UgQlRfQTJEUF9CTE9DS19MRU5H VEhfODoKKwkJYTJkcC0+c2JjLmJsb2NrcyA9IDg7CisJCWJyZWFrOworCWNhc2UgQlRfQTJE UF9CTE9DS19MRU5HVEhfMTI6CisJCWEyZHAtPnNiYy5ibG9ja3MgPSAxMjsKKwkJYnJlYWs7 CisJY2FzZSBCVF9BMkRQX0JMT0NLX0xFTkdUSF8xNjoKKwkJYTJkcC0+c2JjLmJsb2NrcyA9 IDE2OworCQlicmVhazsKKwl9CisKKwlhMmRwLT5zYmMuYml0cG9vbCA9IGFjdGl2ZV9jYXBh YmlsaXRpZXMubWF4X2JpdHBvb2w7CisJYTJkcC0+Y29kZXNpemUgPSBhMmRwLT5zYmMuc3Vi YmFuZHMgKiBhMmRwLT5zYmMuYmxvY2tzICoKKwkJCQkJCWEyZHAtPnNiYy5jaGFubmVscyAq IDI7CisJYTJkcC0+Y291bnQgPSBzaXplb2Yoc3RydWN0IHJ0cF9oZWFkZXIpICsgc2l6ZW9m KHN0cnVjdCBydHBfcGF5bG9hZCk7CisKKwlEQkcoIlx0YWxsb2NhdGlvbj0ldVxuXHRzdWJi YW5kcz0ldVxuXHRibG9ja3M9JXVcblx0Yml0cG9vbD0ldVxuIiwKKwkJYTJkcC0+c2JjLmFs bG9jYXRpb24sIGEyZHAtPnNiYy5zdWJiYW5kcywgYTJkcC0+c2JjLmJsb2NrcywKKwkJYTJk cC0+c2JjLmJpdHBvb2wpOyAKKworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGJsdWV0 b290aF9wb2xsX2Rlc2NyaXB0b3JzKHNuZF9wY21faW9wbHVnX3QgKmlvLAogCQkJCQlzdHJ1 Y3QgcG9sbGZkICpwZmQsIHVuc2lnbmVkIGludCBzcGFjZSkKIHsKIAlzdHJ1Y3QgYmx1ZXRv b3RoX2RhdGEgKmRhdGEgPSBpby0+cHJpdmF0ZV9kYXRhOwpAQCAtNDY5LDU1ICs1NTksNTQg QEAKIAogc3RhdGljIHNuZF9wY21fc2ZyYW1lc190IGJsdWV0b290aF9oc3BfcmVhZChzbmRf cGNtX2lvcGx1Z190ICppbywKIAkJCQljb25zdCBzbmRfcGNtX2NoYW5uZWxfYXJlYV90ICph cmVhcywKIAkJCQlzbmRfcGNtX3VmcmFtZXNfdCBvZmZzZXQsIHNuZF9wY21fdWZyYW1lc190 IHNpemUpCiB7CiAJc3RydWN0IGJsdWV0b290aF9kYXRhICpkYXRhID0gaW8tPnByaXZhdGVf ZGF0YTsKLQlzdHJ1Y3QgaXBjX2RhdGFfY2ZnIGNmZyA9IGRhdGEtPmNmZzsKIAlzbmRfcGNt X3VmcmFtZXNfdCBmcmFtZXNfdG9fd3JpdGUsIHJldDsKIAl1bnNpZ25lZCBjaGFyICpidWZm OwogCWludCBucmVjdiwgZnJhbWVfc2l6ZSA9IDA7CiAKIAlEQkcoImFyZWFzLT5zdGVwPSV1 IGFyZWFzLT5maXJzdD0ldSBvZmZzZXQ9JWx1IHNpemU9JWx1IGlvLT5ub25ibG9jaz0ldSIs CiAJCQlhcmVhcy0+c3RlcCwgYXJlYXMtPmZpcnN0LCBvZmZzZXQsIHNpemUsIGlvLT5ub25i bG9jayk7CiAKIAlpZiAoZGF0YS0+Y291bnQgPiAwKQogCQlnb3RvIHByb2NlZWQ7CiAKIAlm cmFtZV9zaXplID0gYXJlYXMtPnN0ZXAgLyA4OwogCi0JbnJlY3YgPSByZWN2KGRhdGEtPnN0 cmVhbS5mZCwgZGF0YS0+YnVmZmVyLCBjZmcucGt0X2xlbiwKKwlucmVjdiA9IHJlY3YoZGF0 YS0+c3RyZWFtLmZkLCBkYXRhLT5idWZmZXIsIGRhdGEtPmxpbmtfbXR1LAogCQkJTVNHX1dB SVRBTEwgfCAoaW8tPm5vbmJsb2NrID8gTVNHX0RPTlRXQUlUIDogMCkpOwogCiAJaWYgKG5y ZWN2IDwgMCkgewogCQlyZXQgPSAoZXJybm8gPT0gRVBJUEUpID8gLUVJTyA6IC1lcnJubzsK IAkJZ290byBkb25lOwogCX0KIAotCWlmIChucmVjdiAhPSBjZmcucGt0X2xlbikgeworCWlm IChucmVjdiAhPSBkYXRhLT5saW5rX210dSkgewogCQlyZXQgPSAtRUlPOwogCQlTTkRFUlIo c3RyZXJyb3IoLXJldCkpOwogCQlnb3RvIGRvbmU7CiAJfQogCiAJLyogSW5jcmVtZW50IGhh cmR3YXJlIHRyYW5zbWl0aW9uIHBvaW50ZXIgKi8KLQlkYXRhLT5od19wdHIgPSAoZGF0YS0+ aHdfcHRyICsgY2ZnLnBrdF9sZW4gLyBjZmcuc2FtcGxlX3NpemUpICUKKwlkYXRhLT5od19w dHIgPSAoZGF0YS0+aHdfcHRyICsgZGF0YS0+bGlua19tdHUgLyBmcmFtZV9zaXplKSAlCiAJ CQkJCQkJCWlvLT5idWZmZXJfc2l6ZTsKIAogcHJvY2VlZDoKIAlidWZmID0gKHVuc2lnbmVk IGNoYXIgKikgYXJlYXMtPmFkZHIgKwogCQkJKGFyZWFzLT5maXJzdCArIGFyZWFzLT5zdGVw ICogb2Zmc2V0KSAvIDg7CiAKLQlpZiAoKGRhdGEtPmNvdW50ICsgc2l6ZSAqIGZyYW1lX3Np emUpIDw9IGNmZy5wa3RfbGVuKQorCWlmICgoZGF0YS0+Y291bnQgKyBzaXplICogZnJhbWVf c2l6ZSkgPD0gZGF0YS0+bGlua19tdHUpCiAJCWZyYW1lc190b193cml0ZSA9IHNpemU7CiAJ ZWxzZQotCQlmcmFtZXNfdG9fd3JpdGUgPSAoY2ZnLnBrdF9sZW4gLSBkYXRhLT5jb3VudCkg LyBmcmFtZV9zaXplOworCQlmcmFtZXNfdG9fd3JpdGUgPSAoZGF0YS0+bGlua19tdHUgLSBk YXRhLT5jb3VudCkgLyBmcmFtZV9zaXplOwogCiAJbWVtY3B5KGJ1ZmYsIGRhdGEtPmJ1ZmZl ciArIGRhdGEtPmNvdW50LCBmcmFtZV9zaXplICogZnJhbWVzX3RvX3dyaXRlKTsKIAlkYXRh LT5jb3VudCArPSAoZnJhbWVfc2l6ZSAqIGZyYW1lc190b193cml0ZSk7Ci0JZGF0YS0+Y291 bnQgJT0gY2ZnLnBrdF9sZW47CisJZGF0YS0+Y291bnQgJT0gZGF0YS0+bGlua19tdHU7CiAK IAkvKiBSZXR1cm4gd3JpdHRlbiBmcmFtZXMgY291bnQgKi8KIAlyZXQgPSBmcmFtZXNfdG9f d3JpdGU7CiAKIGRvbmU6CiAJREJHKCJyZXR1cm5pbmcgJWx1IiwgcmV0KTsKQEAgLTUyNiwx MyArNjE1LDEyIEBACiAKIHN0YXRpYyBzbmRfcGNtX3NmcmFtZXNfdCBibHVldG9vdGhfaHNw X3dyaXRlKHNuZF9wY21faW9wbHVnX3QgKmlvLAogCQkJCWNvbnN0IHNuZF9wY21fY2hhbm5l bF9hcmVhX3QgKmFyZWFzLAogCQkJCXNuZF9wY21fdWZyYW1lc190IG9mZnNldCwgc25kX3Bj bV91ZnJhbWVzX3Qgc2l6ZSkKIHsKIAlzdHJ1Y3QgYmx1ZXRvb3RoX2RhdGEgKmRhdGEgPSBp by0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBpcGNfZGF0YV9jZmcgY2ZnID0gZGF0YS0+Y2Zn OwogCXNuZF9wY21fc2ZyYW1lc190IHJldCA9IDA7CiAJc25kX3BjbV91ZnJhbWVzX3QgZnJh bWVzX3RvX3JlYWQ7CiAJdWludDhfdCAqYnVmZjsKIAlpbnQgcnNlbmQsIGZyYW1lX3NpemU7 CiAKIAlEQkcoImFyZWFzLT5zdGVwPSV1IGFyZWFzLT5maXJzdD0ldSBvZmZzZXQ9JWx1LCBz aXplPSVsdSBpby0+bm9uYmxvY2s9JXUiLApAQCAtNTQzLDMyICs2MzEsMzIgQEAKIAkJaWYg KHJldCA9PSAwKQogCQkJcmV0ID0gLUVQSVBFOwogCQlnb3RvIGRvbmU7CiAJfQogCiAJZnJh bWVfc2l6ZSA9IGFyZWFzLT5zdGVwIC8gODsKLQlpZiAoKGRhdGEtPmNvdW50ICsgc2l6ZSAq IGZyYW1lX3NpemUpIDw9IGNmZy5wa3RfbGVuKQorCWlmICgoZGF0YS0+Y291bnQgKyBzaXpl ICogZnJhbWVfc2l6ZSkgPD0gZGF0YS0+bGlua19tdHUpCiAJCWZyYW1lc190b19yZWFkID0g c2l6ZTsKIAllbHNlCi0JCWZyYW1lc190b19yZWFkID0gKGNmZy5wa3RfbGVuIC0gZGF0YS0+ Y291bnQpIC8gZnJhbWVfc2l6ZTsKKwkJZnJhbWVzX3RvX3JlYWQgPSAoZGF0YS0+bGlua19t dHUgLSBkYXRhLT5jb3VudCkgLyBmcmFtZV9zaXplOwogCiAJREJHKCJjb3VudD0lZCBmcmFt ZXNfdG9fcmVhZD0lbHUiLCBkYXRhLT5jb3VudCwgZnJhbWVzX3RvX3JlYWQpOwogCiAJLyog UmVhZHkgZm9yIG1vcmUgZGF0YSAqLwogCWJ1ZmYgPSAodWludDhfdCAqKSBhcmVhcy0+YWRk ciArCiAJCQkoYXJlYXMtPmZpcnN0ICsgYXJlYXMtPnN0ZXAgKiBvZmZzZXQpIC8gODsKIAlt ZW1jcHkoZGF0YS0+YnVmZmVyICsgZGF0YS0+Y291bnQsIGJ1ZmYsIGZyYW1lX3NpemUgKiBm cmFtZXNfdG9fcmVhZCk7CiAKIAkvKiBSZW1lbWJlciB3ZSBoYXZlIHNvbWUgZnJhbWVzIGlu IHRoZSBwaXBlIG5vdyAqLwogCWRhdGEtPmNvdW50ICs9IGZyYW1lc190b19yZWFkICogZnJh bWVfc2l6ZTsKLQlpZiAoZGF0YS0+Y291bnQgIT0gY2ZnLnBrdF9sZW4pIHsKKwlpZiAoZGF0 YS0+Y291bnQgIT0gZGF0YS0+bGlua19tdHUpIHsKIAkJcmV0ID0gZnJhbWVzX3RvX3JlYWQ7 CiAJCWdvdG8gZG9uZTsKIAl9CiAKLQlyc2VuZCA9IHNlbmQoZGF0YS0+c3RyZWFtLmZkLCBk YXRhLT5idWZmZXIsIGNmZy5wa3RfbGVuLAorCXJzZW5kID0gc2VuZChkYXRhLT5zdHJlYW0u ZmQsIGRhdGEtPmJ1ZmZlciwgZGF0YS0+bGlua19tdHUsCiAJCQlpby0+bm9uYmxvY2sgPyBN U0dfRE9OVFdBSVQgOiAwKTsKIAlpZiAocnNlbmQgPiAwKSB7CiAJCS8qIFJlc2V0IGNvdW50 IHBvaW50ZXIgKi8KIAkJZGF0YS0+Y291bnQgPSAwOwogCiAJCXJldCA9IGZyYW1lc190b19y ZWFkOwpAQCAtNjY1LDEzICs3NTMsMTMgQEAKIAlpZiAoKGRhdGEtPmNvdW50ICsgc2l6ZSAq IGZyYW1lX3NpemUpIDw9IGEyZHAtPmNvZGVzaXplKQogCQlmcmFtZXNfdG9fcmVhZCA9IHNp emU7CiAJZWxzZQogCQlmcmFtZXNfdG9fcmVhZCA9IChhMmRwLT5jb2Rlc2l6ZSAtIGRhdGEt PmNvdW50KSAvIGZyYW1lX3NpemU7CiAKIAlEQkcoImNvdW50PSVkIGZyYW1lc190b19yZWFk PSVsdSIsIGRhdGEtPmNvdW50LCBmcmFtZXNfdG9fcmVhZCk7Ci0JREJHKCJhMmRwLmNvdW50 PSVkIGNmZy5wa3RfbGVuPSVkIiwgYTJkcC0+Y291bnQsIGRhdGEtPmNmZy5wa3RfbGVuKTsK KwlEQkcoImEyZHAuY291bnQ9JWQgZGF0YS5saW5rX210dT0lZCIsIGEyZHAtPmNvdW50LCBk YXRhLT5saW5rX210dSk7CiAKIAkvKiBGSVhNRTogSWYgc3RhdGUgaXMgbm90IHN0cmVhbWlu ZyB0aGVuIHJldHVybiAqLwogCiAJLyogUmVhZHkgZm9yIG1vcmUgZGF0YSAqLwogCWJ1ZmYg PSAodWludDhfdCAqKSBhcmVhcy0+YWRkciArCiAJCQkJKGFyZWFzLT5maXJzdCArIGFyZWFz LT5zdGVwICogb2Zmc2V0KSAvIDg7CkBAIC02OTIsMTMgKzc4MCwxMyBAQAogCX0KIAogCWRh dGEtPmNvdW50IC09IGVuY29kZWQ7CiAKIAlEQkcoImVuY29kZWQ9JWQgIGEyZHAuc2JjLmxl bj0lZCIsIGVuY29kZWQsIGEyZHAtPnNiYy5sZW4pOwogCi0JaWYgKGEyZHAtPmNvdW50ICsg YTJkcC0+c2JjLmxlbiA+PSBkYXRhLT5jZmcucGt0X2xlbikgeworCWlmIChhMmRwLT5jb3Vu dCArIGEyZHAtPnNiYy5sZW4gPj0gZGF0YS0+bGlua19tdHUpIHsKIAkJcmV0ID0gYXZkdHBf d3JpdGUoZGF0YSk7CiAJCWlmIChyZXQgPCAwKSB7CiAJCQlpZiAoLXJldCA9PSBFUElQRSkK IAkJCQlyZXQgPSAtRUlPOwogCQkJZ290byBkb25lOwogCQl9CkBAIC03MzksMjYgKzgyNywy NCBAQAogCiBzdGF0aWMgc25kX3BjbV9pb3BsdWdfY2FsbGJhY2tfdCBibHVldG9vdGhfaHNw X3BsYXliYWNrID0gewogCS5zdGFydAkJCT0gYmx1ZXRvb3RoX3BsYXliYWNrX3N0YXJ0LAog CS5zdG9wCQkJPSBibHVldG9vdGhfcGxheWJhY2tfc3RvcCwKIAkucG9pbnRlcgkJPSBibHVl dG9vdGhfcG9pbnRlciwKIAkuY2xvc2UJCQk9IGJsdWV0b290aF9jbG9zZSwKLQkuaHdfcGFy YW1zCQk9IGJsdWV0b290aF9oc3BfaHdfcGFyYW1zLAogCS5wcmVwYXJlCQk9IGJsdWV0b290 aF9wcmVwYXJlLAogCS50cmFuc2ZlcgkJPSBibHVldG9vdGhfaHNwX3dyaXRlLAogCS5wb2xs X2Rlc2NyaXB0b3JzCT0gYmx1ZXRvb3RoX3BsYXliYWNrX3BvbGxfZGVzY3JpcHRvcnMsCiAJ LnBvbGxfcmV2ZW50cwkJPSBibHVldG9vdGhfcGxheWJhY2tfcG9sbF9yZXZlbnRzLAogCS5k ZWxheQkJCT0gYmx1ZXRvb3RoX3BsYXliYWNrX2RlbGF5LAogfTsKIAogc3RhdGljIHNuZF9w Y21faW9wbHVnX2NhbGxiYWNrX3QgYmx1ZXRvb3RoX2hzcF9jYXB0dXJlID0gewogCS5zdGFy dAkJCT0gYmx1ZXRvb3RoX3N0YXJ0LAogCS5zdG9wCQkJPSBibHVldG9vdGhfc3RvcCwKIAku cG9pbnRlcgkJPSBibHVldG9vdGhfcG9pbnRlciwKIAkuY2xvc2UJCQk9IGJsdWV0b290aF9j bG9zZSwKLQkuaHdfcGFyYW1zCQk9IGJsdWV0b290aF9oc3BfaHdfcGFyYW1zLAogCS5wcmVw YXJlCQk9IGJsdWV0b290aF9wcmVwYXJlLAogCS50cmFuc2ZlcgkJPSBibHVldG9vdGhfaHNw X3JlYWQsCiAJLnBvbGxfZGVzY3JpcHRvcnMJPSBibHVldG9vdGhfcG9sbF9kZXNjcmlwdG9y cywKIAkucG9sbF9yZXZlbnRzCQk9IGJsdWV0b290aF9wb2xsX3JldmVudHMsCiB9OwogCkBA IC03ODksMjQgKzg3NSwyMyBAQAogCiAjZGVmaW5lIEFSUkFZX05FTEVNUyhhKSAoc2l6ZW9m KChhKSkgLyBzaXplb2YoKGEpWzBdKSkKIAogc3RhdGljIGludCBibHVldG9vdGhfaHNwX2h3 X2NvbnN0cmFpbnQoc25kX3BjbV9pb3BsdWdfdCAqaW8pCiB7CiAJc3RydWN0IGJsdWV0b290 aF9kYXRhICpkYXRhID0gaW8tPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgaXBjX2RhdGFfY2Zn IGNmZyA9IGRhdGEtPmNmZzsKIAlzbmRfcGNtX2FjY2Vzc190IGFjY2Vzc19saXN0W10gPSB7 CiAJCVNORF9QQ01fQUNDRVNTX1JXX0lOVEVSTEVBVkVELAogCQkvKiBNbWFwIGFjY2VzcyBp cyByZWFsbHkgdXNlbGVzcyBmbyB0aGlzIGRyaXZlciwgYnV0IHdlCiAJCSAqIHN1cHBvcnQg aXQgYmVjYXVzZSBzb21lIHBpZWNlcyBvZiBzb2Z0d2FyZSBvdXQgdGhlcmUKIAkJICogaW5z aXN0IG9uIHVzaW5nIGl0ICovCiAJCVNORF9QQ01fQUNDRVNTX01NQVBfSU5URVJMRUFWRUQK IAl9OwogCXVuc2lnbmVkIGludCBmb3JtYXRfbGlzdFtdID0gewogCQlTTkRfUENNX0ZPUk1B VF9TMTZfTEUKIAl9OwotCWludCBlcnIsIGNoYW5uZWxzOworCWludCBlcnI7CiAKIAkvKiBh Y2Nlc3MgdHlwZSAqLwogCWVyciA9IHNuZF9wY21faW9wbHVnX3NldF9wYXJhbV9saXN0KGlv LCBTTkRfUENNX0lPUExVR19IV19BQ0NFU1MsCiAJCQkJCUFSUkFZX05FTEVNUyhhY2Nlc3Nf bGlzdCksIGFjY2Vzc19saXN0KTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKQEAg LTgxNSwyNyArOTAwLDI2IEBACiAJZXJyID0gc25kX3BjbV9pb3BsdWdfc2V0X3BhcmFtX2xp c3QoaW8sIFNORF9QQ01fSU9QTFVHX0hXX0ZPUk1BVCwKIAkJCQkJQVJSQVlfTkVMRU1TKGZv cm1hdF9saXN0KSwgZm9ybWF0X2xpc3QpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJy OwogCiAJLyogc3VwcG9ydGVkIGNoYW5uZWxzICovCi0JY2hhbm5lbHMgPSBjZmcubW9kZSA9 PSBDRkdfTU9ERV9NT05PID8gMSA6IDI7CiAJZXJyID0gc25kX3BjbV9pb3BsdWdfc2V0X3Bh cmFtX21pbm1heChpbywgU05EX1BDTV9JT1BMVUdfSFdfQ0hBTk5FTFMsCi0JCQkJCQkJY2hh bm5lbHMsIGNoYW5uZWxzKTsKKwkJCQkJCQkxLCAxKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0 dXJuIGVycjsKIAogCS8qIHN1cHBvcnRlZCByYXRlICovCiAJZXJyID0gc25kX3BjbV9pb3Bs dWdfc2V0X3BhcmFtX21pbm1heChpbywgU05EX1BDTV9JT1BMVUdfSFdfUkFURSwKLQkJCQkJ CQljZmcucmF0ZSwgY2ZnLnJhdGUpOworCQkJCQkJCTgwMDAsIDgwMDApOwogCWlmIChlcnIg PCAwKQogCQlyZXR1cm4gZXJyOwogCiAJLyogc3VwcG9ydGVkIGJsb2NrIHNpemUgKi8KIAll cnIgPSBzbmRfcGNtX2lvcGx1Z19zZXRfcGFyYW1fbWlubWF4KGlvLCBTTkRfUENNX0lPUExV R19IV19QRVJJT0RfQllURVMsCi0JCQkJCQljZmcucGt0X2xlbiwgY2ZnLnBrdF9sZW4pOwor CQkJCQkJZGF0YS0+bGlua19tdHUsIGRhdGEtPmxpbmtfbXR1KTsKIAlpZiAoZXJyIDwgMCkK IAkJcmV0dXJuIGVycjsKIAogCWVyciA9IHNuZF9wY21faW9wbHVnX3NldF9wYXJhbV9taW5t YXgoaW8sIFNORF9QQ01fSU9QTFVHX0hXX1BFUklPRFMsCiAJCQkJCQkJCQkyLCAyMDApOwog CWlmIChlcnIgPCAwKQpAQCAtODQ1LDI0ICs5MjksMjUgQEAKIH0KIAogc3RhdGljIGludCBi bHVldG9vdGhfYTJkcF9od19jb25zdHJhaW50KHNuZF9wY21faW9wbHVnX3QgKmlvKQogewog CXN0cnVjdCBibHVldG9vdGhfZGF0YSAqZGF0YSA9IGlvLT5wcml2YXRlX2RhdGE7CiAJc3Ry dWN0IGJsdWV0b290aF9hMmRwICphMmRwID0gJmRhdGEtPmEyZHA7Ci0Jc3RydWN0IGlwY19k YXRhX2NmZyBjZmcgPSBkYXRhLT5jZmc7CiAJc25kX3BjbV9hY2Nlc3NfdCBhY2Nlc3NfbGlz dFtdID0gewogCQlTTkRfUENNX0FDQ0VTU19SV19JTlRFUkxFQVZFRCwKIAkJLyogTW1hcCBh Y2Nlc3MgaXMgcmVhbGx5IHVzZWxlc3MgZm8gdGhpcyBkcml2ZXIsIGJ1dCB3ZQogCQkgKiBz dXBwb3J0IGl0IGJlY2F1c2Ugc29tZSBwaWVjZXMgb2Ygc29mdHdhcmUgb3V0IHRoZXJlCiAJ CSAqIGluc2lzdCBvbiB1c2luZyBpdCAqLwogCQlTTkRfUENNX0FDQ0VTU19NTUFQX0lOVEVS TEVBVkVECiAJfTsKIAl1bnNpZ25lZCBpbnQgZm9ybWF0X2xpc3RbXSA9IHsKIAkJU05EX1BD TV9GT1JNQVRfUzE2X0xFCiAJfTsKLQlpbnQgZXJyLCBjaGFubmVsczsKKwl1bnNpZ25lZCBp bnQgcmF0ZV9saXN0WzRdOworCXVuc2lnbmVkIGludCByYXRlX2NvdW50OworCWludCBlcnIs IG1pbl9jaGFubmVscywgbWF4X2NoYW5uZWxzOwogCiAJLyogYWNjZXNzIHR5cGUgKi8KIAll cnIgPSBzbmRfcGNtX2lvcGx1Z19zZXRfcGFyYW1fbGlzdChpbywgU05EX1BDTV9JT1BMVUdf SFdfQUNDRVNTLAogCQkJCQlBUlJBWV9ORUxFTVMoYWNjZXNzX2xpc3QpLCBhY2Nlc3NfbGlz dCk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CkBAIC04NzEsMTI5ICs5NTYsODAg QEAKIAllcnIgPSBzbmRfcGNtX2lvcGx1Z19zZXRfcGFyYW1fbGlzdChpbywgU05EX1BDTV9J T1BMVUdfSFdfRk9STUFULAogCQkJCQlBUlJBWV9ORUxFTVMoZm9ybWF0X2xpc3QpLCBmb3Jt YXRfbGlzdCk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAKIAkvKiBzdXBwb3J0 ZWQgY2hhbm5lbHMgKi8KLQljaGFubmVscyA9IGNmZy5tb2RlID09IENGR19NT0RFX01PTk8g PyAxIDogMjsKKwlpZiAoYTJkcC0+c2JjX2NhcGFiaWxpdGllcy5jaGFubmVsX21vZGUgJiBC VF9BMkRQX0NIQU5ORUxfTU9ERV9NT05PKQorCQltaW5fY2hhbm5lbHMgPSAxOworCWVsc2UK KwkJbWluX2NoYW5uZWxzID0gMjsKKworCWlmIChhMmRwLT5zYmNfY2FwYWJpbGl0aWVzLmNo YW5uZWxfbW9kZSAmICh+QlRfQTJEUF9DSEFOTkVMX01PREVfTU9OTykpCisJCW1heF9jaGFu bmVscyA9IDI7CisJZWxzZQorCQltYXhfY2hhbm5lbHMgPSAxOworCQogCWVyciA9IHNuZF9w Y21faW9wbHVnX3NldF9wYXJhbV9taW5tYXgoaW8sIFNORF9QQ01fSU9QTFVHX0hXX0NIQU5O RUxTLAotCQkJCQkJCWNoYW5uZWxzLCBjaGFubmVscyk7CisJCQkJCQkJbWluX2NoYW5uZWxz LCBtYXhfY2hhbm5lbHMpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCi0JLyog c3VwcG9ydGVkIHJhdGUgKi8KLQllcnIgPSBzbmRfcGNtX2lvcGx1Z19zZXRfcGFyYW1fbWlu bWF4KGlvLCBTTkRfUENNX0lPUExVR19IV19SQVRFLAotCQkJCQkJCWNmZy5yYXRlLCBjZmcu cmF0ZSk7CisJLyogc3VwcG9ydGVkIHJhdGVzICovCisJcmF0ZV9jb3VudCA9IDA7CQorCWlm IChhMmRwLT5zYmNfY2FwYWJpbGl0aWVzLmZyZXF1ZW5jeSAmIEJUX0EyRFBfU0FNUExJTkdf RlJFUV8xNjAwMCkgeworCQlyYXRlX2xpc3RbcmF0ZV9jb3VudF0gPSAxNjAwMDsJCQorCQly YXRlX2NvdW50Kys7CisJfQorCQorCWlmIChhMmRwLT5zYmNfY2FwYWJpbGl0aWVzLmZyZXF1 ZW5jeSAmIEJUX0EyRFBfU0FNUExJTkdfRlJFUV8zMjAwMCkgeworCQlyYXRlX2xpc3RbcmF0 ZV9jb3VudF0gPSAzMjAwMDsJCQorCQlyYXRlX2NvdW50Kys7CisJfQorCQorCWlmIChhMmRw LT5zYmNfY2FwYWJpbGl0aWVzLmZyZXF1ZW5jeSAmIEJUX0EyRFBfU0FNUExJTkdfRlJFUV80 NDEwMCkgeworCQlyYXRlX2xpc3RbcmF0ZV9jb3VudF0gPSA0NDEwMDsJCQorCQlyYXRlX2Nv dW50Kys7CisJfQorCQorCWlmIChhMmRwLT5zYmNfY2FwYWJpbGl0aWVzLmZyZXF1ZW5jeSAm IEJUX0EyRFBfU0FNUExJTkdfRlJFUV80ODAwMCkgeworCQlyYXRlX2xpc3RbcmF0ZV9jb3Vu dF0gPSA0ODAwMDsJCQorCQlyYXRlX2NvdW50Kys7CisJfQorCQorCWVyciA9IHNuZF9wY21f aW9wbHVnX3NldF9wYXJhbV9saXN0KGlvLCBTTkRfUENNX0lPUExVR19IV19SQVRFLAorCQkJ CQkJCXJhdGVfY291bnQsIHJhdGVfbGlzdCk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBl cnI7CiAKLQkvKiBzdXBwb3J0ZWQgYmxvY2sgc2l6ZXM6Ci0JICogICAtIGxvd2VyIGxpbWl0 IGlzIEEyRFAgY29kZWMgc2l6ZQotCSAqICAgLSB0b3RhbCBidWZmZXIgc2l6ZSBpcyB0aGUg dXBwZXIgbGltaXQgKHdpdGggdHdvIHBlcmlvZHMpICovCi0JZXJyID0gc25kX3BjbV9pb3Bs dWdfc2V0X3BhcmFtX21pbm1heChpbywKLQkJCQkJCVNORF9QQ01fSU9QTFVHX0hXX1BFUklP RF9CWVRFUywKLQkJCQkJCWEyZHAtPmNvZGVzaXplLAotCQkJCQkJYTJkcC0+Y29kZXNpemUp OwotCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOworCS8qIHN1cHBvcnRlZCBibG9jayBz aXplICovCisJZXJyID0gc25kX3BjbV9pb3BsdWdfc2V0X3BhcmFtX21pbm1heChpbywgU05E X1BDTV9JT1BMVUdfSFdfUEVSSU9EX0JZVEVTLAorCQkJCQkJNTEyLCA1MTIpOwogCi0JZXJy ID0gc25kX3BjbV9pb3BsdWdfc2V0X3BhcmFtX21pbm1heChpbywgU05EX1BDTV9JT1BMVUdf SFdfUEVSSU9EUywKLQkJCQkJCTIsIDUwKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVy cjsKIAotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGJsdWV0b290aF9yZWN2bXNnX2Zk KHN0cnVjdCBibHVldG9vdGhfZGF0YSAqZGF0YSkKLXsKLQljaGFyIGNtc2dfYltDTVNHX1NQ QUNFKHNpemVvZihpbnQpKV0sIG07Ci0JaW50IGVyciwgcmV0OwotCXN0cnVjdCBpb3ZlYyBp b3YgPSB7ICZtLCBzaXplb2YobSkgfTsKLQlzdHJ1Y3QgbXNnaGRyIG1zZ2g7Ci0Jc3RydWN0 IGNtc2doZHIgKmNtc2c7Ci0KLQltZW1zZXQoJm1zZ2gsIDAsIHNpemVvZihtc2doKSk7Ci0J bXNnaC5tc2dfaW92ID0gJmlvdjsKLQltc2doLm1zZ19pb3ZsZW4gPSAxOwotCW1zZ2gubXNn X2NvbnRyb2wgPSAmY21zZ19iOwotCW1zZ2gubXNnX2NvbnRyb2xsZW4gPSBDTVNHX0xFTihz aXplb2YoaW50KSk7Ci0KLQlyZXQgPSByZWN2bXNnKGRhdGEtPnNlcnZlci5mZCwgJm1zZ2gs IDApOwotCWlmIChyZXQgPCAwKSB7Ci0JCWVyciA9IGVycm5vOwotCQlTTkRFUlIoIlVuYWJs ZSB0byByZWNlaXZlIGZkOiAlcyAoJWQpIiwgc3RyZXJyb3IoZXJyKSwgZXJyKTsKLQkJcmV0 dXJuIC1lcnI7Ci0JfQotCi0JLyogUmVjZWl2ZSBhdXhpbGlhcnkgZGF0YSBpbiBtc2doICov Ci0JZm9yIChjbXNnID0gQ01TR19GSVJTVEhEUigmbXNnaCk7IGNtc2cgIT0gTlVMTDsKLQkJ CWNtc2cgPSBDTVNHX05YVEhEUigmbXNnaCwgY21zZykpIHsKLQkJaWYgKGNtc2ctPmNtc2df bGV2ZWwgPT0gU09MX1NPQ0tFVAotCQkJCSYmIGNtc2ctPmNtc2dfdHlwZSA9PSBTQ01fUklH SFRTKSB7Ci0JCQlkYXRhLT5zdHJlYW0uZmQgPSAoKihpbnQgKikgQ01TR19EQVRBKGNtc2cp KTsKLQkJCURCRygic3RyZWFtX2ZkPSVkIiwgZGF0YS0+c3RyZWFtLmZkKTsKLQkJCXJldHVy biAwOwotCQl9Ci0JfQotCi0JcmV0dXJuIC1FSU5WQUw7Ci19Ci0KLXN0YXRpYyBpbnQgYmx1 ZXRvb3RoX2EyZHBfaW5pdChzdHJ1Y3QgYmx1ZXRvb3RoX2RhdGEgKmRhdGEsCi0JCQkJc3Ry dWN0IGlwY19jb2RlY19zYmMgKnNiYykKLXsKLQlzdHJ1Y3QgYmx1ZXRvb3RoX2EyZHAgKmEy ZHAgPSAmZGF0YS0+YTJkcDsKLQlzdHJ1Y3QgaXBjX2RhdGFfY2ZnICpjZmcgPSAmZGF0YS0+ Y2ZnOwotCi0JaWYgKGNmZyA9PSBOVUxMKSB7Ci0JCVNOREVSUigiRXJyb3IgZ2V0dGluZyBj b2RlYyBwYXJhbWV0ZXJzIik7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlpZiAoY2ZnLT5jb2Rl YyAhPSBDRkdfQ09ERUNfU0JDKQotCQlyZXR1cm4gLTE7Ci0KLQkvKiBGSVhNRTogaW5pdCB1 c2luZyBmbGFncz8gKi8KLQlzYmNfaW5pdCgmYTJkcC0+c2JjLCAwKTsKLQlhMmRwLT5zYmMu cmF0ZSA9IGNmZy0+cmF0ZTsKLQlhMmRwLT5zYmMuY2hhbm5lbHMgPSBjZmctPm1vZGUgPT0g Q0ZHX01PREVfTU9OTyA/IDEgOiAyOwotCWlmIChjZmctPm1vZGUgPT0gQ0ZHX01PREVfTU9O TyB8fCBjZmctPm1vZGUgPT0gQ0ZHX01PREVfSk9JTlRfU1RFUkVPKQotCQlhMmRwLT5zYmMu am9pbnQgPSAxOwotCWEyZHAtPnNiYy5hbGxvY2F0aW9uID0gc2JjLT5hbGxvY2F0aW9uOwot CWEyZHAtPnNiYy5zdWJiYW5kcyA9IHNiYy0+c3ViYmFuZHM7Ci0JYTJkcC0+c2JjLmJsb2Nr cyA9IHNiYy0+YmxvY2tzOwotCWEyZHAtPnNiYy5iaXRwb29sID0gc2JjLT5iaXRwb29sOwot CWEyZHAtPmNvZGVzaXplID0gYTJkcC0+c2JjLnN1YmJhbmRzICogYTJkcC0+c2JjLmJsb2Nr cyAqCi0JCQkJCQlhMmRwLT5zYmMuY2hhbm5lbHMgKiAyOwotCWEyZHAtPmNvdW50ID0gc2l6 ZW9mKHN0cnVjdCBydHBfaGVhZGVyKSArIHNpemVvZihzdHJ1Y3QgcnRwX3BheWxvYWQpOwor CWVyciA9IHNuZF9wY21faW9wbHVnX3NldF9wYXJhbV9taW5tYXgoaW8sCisJCQkJCQlTTkRf UENNX0lPUExVR19IV19QRVJJT0RTLAorCQkJCQkJMiwKKwkJCQkJCTIwMCk7CiAKLQlEQkco Ilx0YWxsb2NhdGlvbj0ldVxuXHRzdWJiYW5kcz0ldVxuXHRibG9ja3M9JXVcblx0Yml0cG9v bD0ldVxuIiwKLQkJYTJkcC0+c2JjLmFsbG9jYXRpb24sIGEyZHAtPnNiYy5zdWJiYW5kcywg YTJkcC0+c2JjLmJsb2NrcywKLQkJYTJkcC0+c2JjLmJpdHBvb2wpOworCWlmIChlcnIgPCAw KQorCQlyZXR1cm4gZXJyOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgYmx1ZXRv b3RoX2NmZ19pbml0KHN0cnVjdCBpcGNfcGFja2V0ICpwa3QsIHNuZF9wY21fc3RyZWFtX3Qg c3RyZWFtLAotCQkJCXNuZF9jb25maWdfdCAqY29uZikKK3N0YXRpYyBpbnQgYmx1ZXRvb3Ro X3BhcnNlX2NvbmZpZyhzbmRfY29uZmlnX3QgKmNvbmYsCisJCQkJc3RydWN0IGJsdWV0b290 aF9hbHNhX2NvbmZpZyAqYnRfY29uZmlnKQogewotCXN0cnVjdCBpcGNfZGF0YV9jZmcgKmNm ZyA9ICh2b2lkICopIHBrdC0+ZGF0YTsKLQlzdHJ1Y3QgaXBjX2NvZGVjX3NiYyAqc2JjID0g KHZvaWQgKikgY2ZnLT5kYXRhOwogCXNuZF9jb25maWdfaXRlcmF0b3JfdCBpLCBuZXh0Owog CWNvbnN0IGNoYXIgKmFkZHIsICpwcmVmOwogCWNvbnN0IGNoYXIgKm1vZGUsICphbGxvY2F0 aW9uLCAqcmF0ZSwgKnN1YmJhbmRzLCAqYmxvY2tzLCAqYml0cG9vbDsKIAotCXN3aXRjaCAo c3RyZWFtKSB7Ci0JY2FzZSBTTkRfUENNX1NUUkVBTV9QTEFZQkFDSzoKLQkJY2ZnLT5mZF9v cHQgPSBDRkdfRkRfT1BUX1dSSVRFOwotCQlicmVhazsKLQljYXNlIFNORF9QQ01fU1RSRUFN X0NBUFRVUkU6Ci0JCWNmZy0+ZmRfb3B0ID0gQ0ZHX0ZEX09QVF9SRUFEOwotCQlicmVhazsK LQl9CisJbWVtc2V0KGJ0X2NvbmZpZywgMCwgc2l6ZW9mKHN0cnVjdCBibHVldG9vdGhfYWxz YV9jb25maWcpKTsKIAogCXNuZF9jb25maWdfZm9yX2VhY2goaSwgbmV4dCwgY29uZikgewog CQlzbmRfY29uZmlnX3QgKm4gPSBzbmRfY29uZmlnX2l0ZXJhdG9yX2VudHJ5KGkpOwogCQlj b25zdCBjaGFyICppZDsKIAogCQlpZiAoc25kX2NvbmZpZ19nZXRfaWQobiwgJmlkKSA8IDAp CkBAIC0xMDA1LDI2MCArMTA0MSwyNjQgQEAKIAkJaWYgKHN0cmNtcChpZCwgImRldmljZSIp ID09IDAgfHwgc3RyY21wKGlkLCAiYmRhZGRyIikgPT0gMCkgewogCQkJaWYgKHNuZF9jb25m aWdfZ2V0X3N0cmluZyhuLCAmYWRkcikgPCAwKSB7CiAJCQkJU05ERVJSKCJJbnZhbGlkIHR5 cGUgZm9yICVzIiwgaWQpOwogCQkJCXJldHVybiAtRUlOVkFMOwogCQkJfQogCi0JCQlzdHJu Y3B5KHBrdC0+ZGV2aWNlLCBhZGRyLCAxOCk7CisJCQlidF9jb25maWctPmhhc19kZXZpY2Ug PSAxOworCQkJc3RybmNweShidF9jb25maWctPmRldmljZSwgYWRkciwgMTgpOwogCQkJY29u dGludWU7CiAJCX0KIAogCQlpZiAoc3RyY21wKGlkLCAicHJvZmlsZSIpID09IDApIHsKIAkJ CWlmIChzbmRfY29uZmlnX2dldF9zdHJpbmcobiwgJnByZWYpIDwgMCkgewogCQkJCVNOREVS UigiSW52YWxpZCB0eXBlIGZvciAlcyIsIGlkKTsKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJ CX0KIAotCQkJaWYgKHN0cmNtcChwcmVmLCAiYXV0byIpID09IDApCi0JCQkJcGt0LT5yb2xl ID0gUEtUX1JPTEVfQVVUTzsKLQkJCWVsc2UgaWYgKHN0cmNtcChwcmVmLCAidm9pY2UiKSA9 PSAwIHx8CisJCQlpZiAoc3RyY21wKHByZWYsICJhdXRvIikgPT0gMCkgeworCQkJCWJ0X2Nv bmZpZy0+dHJhbnNwb3J0ID0gQlRfQ0FQQUJJTElUSUVTX1RSQU5TUE9SVF9BTlk7CisJCQkJ YnRfY29uZmlnLT5oYXNfdHJhbnNwb3J0ID0gMTsJCQkKKwkJCX0gZWxzZSBpZiAoc3RyY21w KHByZWYsICJ2b2ljZSIpID09IDAgfHwKIAkJCQkJCXN0cmNtcChwcmVmLCAiaGZwIikgPT0g MCkgewotCQkJCXBrdC0+cm9sZSA9IFBLVF9ST0xFX1ZPSUNFOworCQkJCWJ0X2NvbmZpZy0+ dHJhbnNwb3J0ID0gQlRfQ0FQQUJJTElUSUVTX1RSQU5TUE9SVF9TQ087CisJCQkJYnRfY29u ZmlnLT5oYXNfdHJhbnNwb3J0ID0gMTsJCQkKIAkJCX0gZWxzZSBpZiAoc3RyY21wKHByZWYs ICJoaWZpIikgPT0gMCB8fAotCQkJCQkJc3RyY21wKHByZWYsICJhMmRwIikgPT0gMCkKLQkJ CQlwa3QtPnJvbGUgPSBQS1RfUk9MRV9ISUZJOworCQkJCQkJc3RyY21wKHByZWYsICJhMmRw IikgPT0gMCkgeworCQkJCWJ0X2NvbmZpZy0+dHJhbnNwb3J0ID0gQlRfQ0FQQUJJTElUSUVT X1RSQU5TUE9SVF9BMkRQOworCQkJCWJ0X2NvbmZpZy0+aGFzX3RyYW5zcG9ydCA9IDE7CQkJ CisJCQl9CiAJCQljb250aW51ZTsKIAkJfQogCiAJCWlmIChzdHJjbXAoaWQsICJyYXRlIikg PT0gMCkgewogCQkJaWYgKHNuZF9jb25maWdfZ2V0X3N0cmluZyhuLCAmcmF0ZSkgPCAwKSB7 CiAJCQkJU05ERVJSKCJJbnZhbGlkIHR5cGUgZm9yICVzIiwgaWQpOwogCQkJCXJldHVybiAt RUlOVkFMOwogCQkJfQogCi0JCQljZmctPnJhdGUgPSBhdG9pKHJhdGUpOworCQkJYnRfY29u ZmlnLT5yYXRlID0gYXRvaShyYXRlKTsKKwkJCWJ0X2NvbmZpZy0+aGFzX3JhdGUgPSAxOwog CQkJY29udGludWU7CiAJCX0KIAogCQlpZiAoc3RyY21wKGlkLCAibW9kZSIpID09IDApIHsK IAkJCWlmIChzbmRfY29uZmlnX2dldF9zdHJpbmcobiwgJm1vZGUpIDwgMCkgewogCQkJCVNO REVSUigiSW52YWxpZCB0eXBlIGZvciAlcyIsIGlkKTsKIAkJCQlyZXR1cm4gLUVJTlZBTDsK IAkJCX0KIAotCQkJaWYgKHN0cmNtcChwcmVmLCAiYXV0byIpID09IDApCi0JCQkJY2ZnLT5t b2RlID0gQ0ZHX01PREVfQVVUTzsKLQkJCWVsc2UgaWYgKHN0cmNtcChwcmVmLCAibW9ubyIp ID09IDApCi0JCQkJY2ZnLT5tb2RlID0gQ0ZHX01PREVfTU9OTzsKLQkJCWVsc2UgaWYgKHN0 cmNtcChwcmVmLCAiZHVhbCIpID09IDApCi0JCQkJY2ZnLT5tb2RlID0gQ0ZHX01PREVfRFVB TF9DSEFOTkVMOwotCQkJZWxzZSBpZiAoc3RyY21wKHByZWYsICJzdGVyZW8iKSA9PSAwKQot CQkJCWNmZy0+bW9kZSA9IENGR19NT0RFX1NURVJFTzsKLQkJCWVsc2UgaWYgKHN0cmNtcChw cmVmLCAiam9pbnQiKSA9PSAwKQotCQkJCWNmZy0+bW9kZSA9IENGR19NT0RFX0pPSU5UX1NU RVJFTzsKKwkJCWlmIChzdHJjbXAocHJlZiwgImF1dG8iKSA9PSAwKSB7CisJCQkJYnRfY29u ZmlnLT5jaGFubmVsX21vZGUgPSBCVF9BMkRQX0NIQU5ORUxfTU9ERV9NT05PX0FVVE87CisJ CQkJYnRfY29uZmlnLT5oYXNfY2hhbm5lbF9tb2RlID0gMTsKKwkJCX0gZWxzZSBpZiAoc3Ry Y21wKHByZWYsICJtb25vIikgPT0gMCkgeworCQkJCWJ0X2NvbmZpZy0+Y2hhbm5lbF9tb2Rl ID0gQlRfQTJEUF9DSEFOTkVMX01PREVfTU9OTzsKKwkJCQlidF9jb25maWctPmhhc19jaGFu bmVsX21vZGUgPSAxOworCQkJfSBlbHNlIGlmIChzdHJjbXAocHJlZiwgImR1YWwiKSA9PSAw KSB7CisJCQkJYnRfY29uZmlnLT5jaGFubmVsX21vZGUgPSBCVF9BMkRQX0NIQU5ORUxfTU9E RV9EVUFMX0NIQU5ORUw7CisJCQkJYnRfY29uZmlnLT5oYXNfY2hhbm5lbF9tb2RlID0gMTsK KwkJCX0gZWxzZSBpZiAoc3RyY21wKHByZWYsICJzdGVyZW8iKSA9PSAwKSB7CisJCQkJYnRf Y29uZmlnLT5jaGFubmVsX21vZGUgPSBCVF9BMkRQX0NIQU5ORUxfTU9ERV9TVEVSRU87CisJ CQkJYnRfY29uZmlnLT5oYXNfY2hhbm5lbF9tb2RlID0gMTsKKwkJCX0gZWxzZSBpZiAoc3Ry Y21wKHByZWYsICJqb2ludCIpID09IDApIHsKKwkJCQlidF9jb25maWctPmNoYW5uZWxfbW9k ZSA9IEJUX0EyRFBfQ0hBTk5FTF9NT0RFX0pPSU5UX1NURVJFTzsKKwkJCQlidF9jb25maWct Pmhhc19jaGFubmVsX21vZGUgPSAxOworCQkJfQkJCQogCQkJY29udGludWU7CiAJCX0KIAog CQlpZiAoc3RyY21wKGlkLCAiYWxsb2NhdGlvbiIpID09IDApIHsKIAkJCWlmIChzbmRfY29u ZmlnX2dldF9zdHJpbmcobiwgJmFsbG9jYXRpb24pIDwgMCkgewogCQkJCVNOREVSUigiSW52 YWxpZCB0eXBlIGZvciAlcyIsIGlkKTsKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCX0KIAot CQkJaWYgKHN0cmNtcChwcmVmLCAiYXV0byIpID09IDApCi0JCQkJc2JjLT5hbGxvY2F0aW9u ID0gQ0ZHX0FMTE9DQVRJT05fQVVUTzsKLQkJCWVsc2UgaWYgKHN0cmNtcChwcmVmLCAibG91 ZG5lc3MiKSA9PSAwKQotCQkJCXNiYy0+YWxsb2NhdGlvbiA9IENGR19BTExPQ0FUSU9OX0xP VURORVNTOwotCQkJZWxzZSBpZiAoc3RyY21wKHByZWYsICJzbnIiKSA9PSAwKQotCQkJCXNi Yy0+YWxsb2NhdGlvbiA9IENGR19BTExPQ0FUSU9OX1NOUjsKKwkJCWlmIChzdHJjbXAocHJl ZiwgImF1dG8iKSA9PSAwKSB7CisJCQkJYnRfY29uZmlnLT5hbGxvY2F0aW9uX21ldGhvZCA9 IEJUX0EyRFBfQUxMT0NBVElPTl9BVVRPOworCQkJCWJ0X2NvbmZpZy0+aGFzX2FsbG9jYXRp b25fbWV0aG9kID0gMTsKKwkJCX0gZWxzZSBpZiAoc3RyY21wKHByZWYsICJsb3VkbmVzcyIp ID09IDApIHsKKwkJCQlidF9jb25maWctPmFsbG9jYXRpb25fbWV0aG9kID0gQlRfQTJEUF9B TExPQ0FUSU9OX0xPVURORVNTOworCQkJCWJ0X2NvbmZpZy0+aGFzX2FsbG9jYXRpb25fbWV0 aG9kID0gMTsKKwkJCX0gZWxzZSBpZiAoc3RyY21wKHByZWYsICJzbnIiKSA9PSAwKSB7CisJ CQkJYnRfY29uZmlnLT5hbGxvY2F0aW9uX21ldGhvZCA9IEJUX0EyRFBfQUxMT0NBVElPTl9T TlI7CisJCQkJYnRfY29uZmlnLT5oYXNfYWxsb2NhdGlvbl9tZXRob2QgPSAxOworCQkJfQog CQkJY29udGludWU7CiAJCX0KIAogCQlpZiAoc3RyY21wKGlkLCAic3ViYmFuZHMiKSA9PSAw KSB7CiAJCQlpZiAoc25kX2NvbmZpZ19nZXRfc3RyaW5nKG4sICZzdWJiYW5kcykgPCAwKSB7 CiAJCQkJU05ERVJSKCJJbnZhbGlkIHR5cGUgZm9yICVzIiwgaWQpOwogCQkJCXJldHVybiAt RUlOVkFMOwogCQkJfQogCi0JCQlzYmMtPnN1YmJhbmRzID0gYXRvaShzdWJiYW5kcyk7CisJ CQlidF9jb25maWctPnN1YmJhbmRzID0gYXRvaShzdWJiYW5kcyk7CisJCQlidF9jb25maWct Pmhhc19zdWJiYW5kcyA9IDE7CiAJCQljb250aW51ZTsKIAkJfQogCiAJCWlmIChzdHJjbXAo aWQsICJibG9ja3MiKSA9PSAwKSB7CiAJCQlpZiAoc25kX2NvbmZpZ19nZXRfc3RyaW5nKG4s ICZibG9ja3MpIDwgMCkgewogCQkJCVNOREVSUigiSW52YWxpZCB0eXBlIGZvciAlcyIsIGlk KTsKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCX0KIAotCQkJc2JjLT5ibG9ja3MgPSBhdG9p KGJsb2Nrcyk7CisJCQlidF9jb25maWctPmJsb2NrX2xlbmd0aCA9IGF0b2koYmxvY2tzKTsK KwkJCWJ0X2NvbmZpZy0+aGFzX2Jsb2NrX2xlbmd0aCA9IDE7CiAJCQljb250aW51ZTsKIAkJ fQogCiAJCWlmIChzdHJjbXAoaWQsICJiaXRwb29sIikgPT0gMCkgewogCQkJaWYgKHNuZF9j b25maWdfZ2V0X3N0cmluZyhuLCAmYml0cG9vbCkgPCAwKSB7CiAJCQkJU05ERVJSKCJJbnZh bGlkIHR5cGUgZm9yICVzIiwgaWQpOwogCQkJCXJldHVybiAtRUlOVkFMOwogCQkJfQogCi0J CQlzYmMtPmJpdHBvb2wgPSBhdG9pKGJpdHBvb2wpOworCQkJYnRfY29uZmlnLT5iaXRwb29s ID0gYXRvaShiaXRwb29sKTsKKwkJCWJ0X2NvbmZpZy0+aGFzX2JpdHBvb2wgPSAxOwogCQkJ Y29udGludWU7CiAJCX0KIAogCQlTTkRFUlIoIlVua25vd24gZmllbGQgJXMiLCBpZCk7CiAJ CXJldHVybiAtRUlOVkFMOwogCX0KIAotCXBrdC0+bGVuZ3RoID0gc2l6ZW9mKCpjZmcpICsg c2l6ZW9mKCpzYmMpOwotCXBrdC0+dHlwZSA9IFBLVF9UWVBFX0NGR19SRVE7Ci0JcGt0LT5l cnJvciA9IFBLVF9FUlJPUl9OT05FOwotCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQg Ymx1ZXRvb3RoX2NmZyhzdHJ1Y3QgYmx1ZXRvb3RoX2RhdGEgKmRhdGEsIHNuZF9wY21fc3Ry ZWFtX3Qgc3RyZWFtLAotCQkJCXNuZF9jb25maWdfdCAqY29uZikKK3N0YXRpYyBpbnQgYXVk aW9zZXJ2aWNlX3NlbmQoaW50IHNrLCBjb25zdCBidF9hdWRpb19tc2dfaGVhZGVyX3QgKm1z ZykKIHsKLQlpbnQgcmV0LCB0b3RhbDsKLQljaGFyIGJ1ZltJUENfTVRVXTsKLQlzdHJ1Y3Qg aXBjX3BhY2tldCAqcGt0ID0gKHZvaWQgKikgYnVmOwotCXN0cnVjdCBpcGNfZGF0YV9jZmcg KmNmZyA9ICh2b2lkICopIHBrdC0+ZGF0YTsKLQlzdHJ1Y3QgaXBjX2NvZGVjX3NiYyAqc2Jj ID0gKHZvaWQgKikgY2ZnLT5kYXRhOwotCi0JREJHKCJTZW5kaW5nIFBLVF9UWVBFX0NGR19S RVEuLi4iKTsKLQotCW1lbXNldChidWYsIDAsIHNpemVvZihidWYpKTsKLQotCXJldCA9IGJs dWV0b290aF9jZmdfaW5pdChwa3QsIHN0cmVhbSwgY29uZik7Ci0JaWYgKHJldCA8IDApCi0J CXJldHVybiAtcmV0OwotCi0JcmV0ID0gc2VuZChkYXRhLT5zZXJ2ZXIuZmQsIHBrdCwgc2l6 ZW9mKCpwa3QpICsgcGt0LT5sZW5ndGgsIDApOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4g LWVycm5vOwotCWVsc2UgaWYgKHJldCA9PSAwKQotCQlyZXR1cm4gLUVJTzsKLQotCURCRygi T0sgLSAlZCBieXRlcyBzZW50LiBXYWl0aW5nIGZvciByZXNwb25zZS4uLiIsIHJldCk7Ci0K LQltZW1zZXQoYnVmLCAwLCBzaXplb2YoYnVmKSk7Ci0KLQlyZXQgPSByZWN2KGRhdGEtPnNl cnZlci5mZCwgYnVmLCBzaXplb2YoKnBrdCkgKyBzaXplb2YoKmNmZyksIDApOwotCWlmIChy ZXQgPCAwKQotCQlyZXR1cm4gLWVycm5vOwotCWVsc2UgaWYgKHJldCA9PSAwKQotCQlyZXR1 cm4gLUVJTzsKLQotCXRvdGFsID0gcmV0OwotCi0JaWYgKHBrdC0+dHlwZSAhPSBQS1RfVFlQ RV9DRkdfUlNQKSB7Ci0JCVNOREVSUigiVW5leHBlY3RlZCBwYWNrZXQgdHlwZSAlZCByZWNl aXZlZCIsIHBrdC0+dHlwZSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmIChwa3Qt PmVycm9yICE9IFBLVF9FUlJPUl9OT05FKSB7Ci0JCVNOREVSUigiRXJyb3IgJWQgd2hpbGUg Y29uZmlndXJpbmcgZGV2aWNlIiwgcGt0LT5lcnJvcik7Ci0JCXJldHVybiAtcGt0LT5lcnJv cjsKLQl9Ci0KLQlpZiAoY2ZnLT5jb2RlYyAhPSBDRkdfQ09ERUNfU0JDKQotCQlnb3RvIGRv bmU7Ci0KLQlyZXQgPSByZWN2KGRhdGEtPnNlcnZlci5mZCwgc2JjLCBzaXplb2YoKnNiYyks IDApOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gLWVycm5vOwotCWVsc2UgaWYgKHJldCA9 PSAwKQotCQlyZXR1cm4gLUVJTzsKLQotCXRvdGFsICs9IHJldDsKLQotZG9uZToKLQlEQkco Ik9LIC0gJWQgYnl0ZXMgcmVjZWl2ZWQiLCB0b3RhbCk7Ci0KLQlpZiAocGt0LT5sZW5ndGgg IT0gKHRvdGFsIC0gc2l6ZW9mKHN0cnVjdCBpcGNfcGFja2V0KSkpIHsKLQkJU05ERVJSKCJF cnJvciB3aGlsZSBjb25maWd1cmluZyBkZXZpY2U6IHBhY2tldCBzaXplIGRvZXNuJ3QgbWF0 Y2giKTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJaW50IGVycjsKKwlEQkcoInNlbmRpbmcgJXMi LCBidF9hdWRpb19zdHJtc2dbbXNnLT5tc2dfdHlwZV0pOworCWlmIChzZW5kKHNrLCBtc2cs IEJUX0FVRElPX0lQQ19QQUNLRVRfU0laRSwgMCkgPiAwKSB7CisJCWVyciA9IDA7CisJfSBl bHNlIHsKKwkJZXJyID0gLWVycm5vOworCQlTTkRFUlIoIkVycm9yIHNlbmRpbmcgZGF0YSB0 byBhdWRpbyBzZXJ2aWNlOiAlcyglZCkiLCBzdHJlcnJvcihlcnJubyksIGVycm5vKTsKIAl9 CisJcmV0dXJuIGVycjsKK30KIAotCW1lbWNweSgmZGF0YS0+Y2ZnLCBjZmcsIHNpemVvZigq Y2ZnKSk7Ci0KLQlEQkcoIkRldmljZSBjb25maWd1cmF0aW9uOiIpOwotCi0JREJHKCJcblx0 ZmQ9JWRcblx0ZmRfb3B0PSV1XG5cdHBrdF9sZW49JXVcblx0c2FtcGxlX3NpemU9JXVcblx0 cmF0ZT0ldSIsCi0JCQlkYXRhLT5zdHJlYW0uZmQsIGRhdGEtPmNmZy5mZF9vcHQsIGRhdGEt PmNmZy5wa3RfbGVuLAotCQkJCQlkYXRhLT5jZmcuc2FtcGxlX3NpemUsIGRhdGEtPmNmZy5y YXRlKTsKLQotCWlmIChkYXRhLT5jZmcuY29kZWMgPT0gQ0ZHX0NPREVDX1NCQykgewotCQly ZXQgPSBibHVldG9vdGhfYTJkcF9pbml0KGRhdGEsIHNiYyk7Ci0JCWlmIChyZXQgPCAwKQot CQkJcmV0dXJuIHJldDsKK3N0YXRpYyBpbnQgYXVkaW9zZXJ2aWNlX3JlY3YoaW50IHNrLCBi dF9hdWRpb19tc2dfaGVhZGVyX3QgKmlubXNnKQoreworCWludCBlcnI7CisJREJHKCJ0cnlp bmcgdG8gcmVjZWl2ZSBtc2cgZnJvbSBhdWRpbyBzZXJ2aWNlLi4uIik7CisJaWYgKHJlY3Yo c2ssIGlubXNnLCBCVF9BVURJT19JUENfUEFDS0VUX1NJWkUsIDApID4gMCkgeworCQlpZiAo aW5tc2ctPm1zZ190eXBlIDw9IEJUX01TR19NQVgpIHsKKwkJCURCRygiUmVjZWl2ZWQgJXMi LCBidF9hdWRpb19zdHJtc2dbaW5tc2ctPm1zZ190eXBlXSk7CisJCQllcnIgPSAwOworCQl9 IGVsc2UgeworCQkJZXJyID0gLUVJTlZBTDsKKwkJCVNOREVSUigiQm9ndXMgbWVzc2FnZSB0 eXBlICVkICIKKwkJCQkJInJlY2VpdmVkIGZyb20gYXVkaW8gc2VydmljZSIsIAorCQkJCQlp bm1zZy0+bXNnX3R5cGUpOworCQl9CisJfSBlbHNlIHsKKwkJZXJyID0gLWVycm5vOworCQlT TkRFUlIoIkVycm9yIHJlY2VpdmluZyBkYXRhIGZyb20gYXVkaW8gc2VydmljZTogJXMoJWQp IiwKKwkJCQkJc3RyZXJyb3IoZXJybm8pLCBlcnJubyk7CiAJfQorCXJldHVybiBlcnI7Cit9 CiAKLQlyZXQgPSBibHVldG9vdGhfcmVjdm1zZ19mZChkYXRhKTsKLQlpZiAocmV0IDwgMCkK LQkJcmV0dXJuIHJldDsKLQotCWlmIChkYXRhLT5zdHJlYW0uZmQgPT0gLTEpIHsKLQkJU05E RVJSKCJFcnJvciB3aGlsZSBjb25maWd1cmluZyBkZXZpY2U6IGNvdWxkIG5vdCBhY3F1aXJl IGF1ZGlvIHNvY2tldCIpOwotCQlyZXR1cm4gLUVJTlZBTDsKK3N0YXRpYyBpbnQgYXVkaW9z ZXJ2aWNlX2V4cGVjdChpbnQgc2ssIGJ0X2F1ZGlvX21zZ19oZWFkZXJfdCAqb3V0bXNnLAor CQkJCWludCBleHBlY3RlZF90eXBlKQoreworCWludCBlcnIgPSBhdWRpb3NlcnZpY2VfcmVj dihzaywgb3V0bXNnKTsKKwlpZiAoZXJyID09IDApIHsKKwkJaWYgKG91dG1zZy0+bXNnX3R5 cGUgIT0gZXhwZWN0ZWRfdHlwZSkgeworCQkJZXJyID0gLUVJTlZBTDsKKwkJCVNOREVSUigi Qm9ndXMgbWVzc2FnZSAlcyByZWNlaXZlZCB3aGlsZSAiCisJCQkJCSIlcyB3YXMgZXhwZWN0 ZWQiLCAKKwkJCQkJYnRfYXVkaW9fc3RybXNnW291dG1zZy0+bXNnX3R5cGVdLAorCQkJCQli dF9hdWRpb19zdHJtc2dbZXhwZWN0ZWRfdHlwZV0pOworCQl9CiAJfQotCi0JLyogSXQgaXMg cG9zc2libGUgdGhlcmUgaXMgc29tZSBvdXRzdGFuZGluZwotCWRhdGEgaW4gdGhlIHBpcGUg LSB3ZSBoYXZlIHRvIGVtcHR5IGl0ICovCi0Jd2hpbGUgKHJlY3YoZGF0YS0+c3RyZWFtLmZk LCBkYXRhLT5idWZmZXIsIGRhdGEtPmNmZy5wa3RfbGVuLAotCQkJCU1TR19ET05UV0FJVCkg PiAwKTsKLQotCW1lbXNldChkYXRhLT5idWZmZXIsIDAsIHNpemVvZihkYXRhLT5idWZmZXIp KTsKLQotCXJldHVybiAwOworCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyBpbnQgYmx1ZXRv b3RoX2luaXQoc3RydWN0IGJsdWV0b290aF9kYXRhICpkYXRhLCBzbmRfcGNtX3N0cmVhbV90 IHN0cmVhbSwKIAkJCQlzbmRfY29uZmlnX3QgKmNvbmYpCiB7CiAJaW50IHNrLCBlcnI7Ci0J c3RydWN0IHNvY2thZGRyX3VuIGFkZHIgPSB7Ci0JCUFGX1VOSVgsIElQQ19TT0NLRVRfTkFN RQotCX07Ci0KLQlpZiAoIWRhdGEpCi0JCXJldHVybiAtRUlOVkFMOworCXN0cnVjdCBibHVl dG9vdGhfYWxzYV9jb25maWcgKmFsc2FfY29uZiA9ICZkYXRhLT5hbHNhX2NvbmZpZzsKKwlj aGFyIGJ1ZltCVF9BVURJT19JUENfUEFDS0VUX1NJWkVdOworCXN0cnVjdCBidF9nZXRjYXBh YmlsaXRpZXNfcmVxICpnZXRjYXBzX3JlcSA9ICh2b2lkKikgYnVmOworCXN0cnVjdCBidF9n ZXRjYXBhYmlsaXRpZXNfcnNwICpnZXRjYXBzX3JzcCA9ICh2b2lkKikgYnVmOwogCiAJbWVt c2V0KGRhdGEsIDAsIHNpemVvZihzdHJ1Y3QgYmx1ZXRvb3RoX2RhdGEpKTsKIAorCWVyciA9 IGJsdWV0b290aF9wYXJzZV9jb25maWcoY29uZiwgYWxzYV9jb25mKTsKKwlpZiAoZXJyIDwg MCkKKwkJcmV0dXJuIGVycjsKKwogCWRhdGEtPnNlcnZlci5mZCA9IC0xOwogCWRhdGEtPnN0 cmVhbS5mZCA9IC0xOwogCi0Jc2sgPSBzb2NrZXQoUEZfTE9DQUwsIFNPQ0tfU1RSRUFNLCAw KTsKLQlpZiAoc2sgPCAwKSB7Ci0JCWVyciA9IGVycm5vOwotCQlTTkRFUlIoIkNhbm5vdCBv cGVuIHNvY2tldDogJXMgKCVkKSIsIHN0cmVycm9yKGVyciksIGVycik7Ci0JCXJldHVybiAt ZXJyOwotCX0KLQotCURCRygiQ29ubmVjdGluZyB0byBhZGRyZXNzOiAlcyIsIGFkZHIuc3Vu X3BhdGggKyAxKTsKLQlpZiAoY29ubmVjdChzaywgKHN0cnVjdCBzb2NrYWRkciAqKSAmYWRk ciwgc2l6ZW9mKGFkZHIpKSA8IDApIHsKLQkJZXJyID0gZXJybm87Ci0JCVNOREVSUigiQ29u bmVjdGlvbiBmYWlsIiwgc3RyZXJyb3IoZXJyKSwgZXJyKTsKLQkJY2xvc2Uoc2spOwotCQly ZXR1cm4gLWVycjsKKwlzayA9IGJ0X2F1ZGlvX3NlcnZpY2Vfb3BlbigpOworCWlmKHNrIDw9 IDApIHsKKwkJZXJyID0gLWVycm5vOwkKKwkJZ290byBmYWlsZWQ7CiAJfQogCiAJZGF0YS0+ c2VydmVyLmZkID0gc2s7CiAJZGF0YS0+c2VydmVyLmV2ZW50cyA9IFBPTExJTjsKIAogCWRh dGEtPnBpcGVmZFswXSA9IC0xOwogCWRhdGEtPnBpcGVmZFsxXSA9IC0xOwogCi0JaWYgKHBp cGUoZGF0YS0+cGlwZWZkKSA8IDApCi0JCXJldHVybiAtZXJybm87Ci0JaWYgKGZjbnRsKGRh dGEtPnBpcGVmZFswXSwgRl9TRVRGTCwgT19OT05CTE9DSykgPCAwKQotCQlyZXR1cm4gLWVy cm5vOwotCWlmIChmY250bChkYXRhLT5waXBlZmRbMV0sIEZfU0VURkwsIE9fTk9OQkxPQ0sp IDwgMCkKLQkJcmV0dXJuIC1lcnJubzsKKwlpZiAocGlwZShkYXRhLT5waXBlZmQpIDwgMCkg eworCQllcnIgPSAtZXJybm87CQorCQlnb3RvIGZhaWxlZDsKKwl9CisJaWYgKGZjbnRsKGRh dGEtPnBpcGVmZFswXSwgRl9TRVRGTCwgT19OT05CTE9DSykgPCAwKSB7CisJCWVyciA9IC1l cnJubzsJCisJCWdvdG8gZmFpbGVkOworCX0KKwlpZiAoZmNudGwoZGF0YS0+cGlwZWZkWzFd LCBGX1NFVEZMLCBPX05PTkJMT0NLKSA8IDApIHsKKwkJZXJyID0gLWVycm5vOwkKKwkJZ290 byBmYWlsZWQ7CisJfQorCisJbWVtc2V0KGdldGNhcHNfcmVxLCAwLCBCVF9BVURJT19JUENf UEFDS0VUX1NJWkUpOworCWdldGNhcHNfcmVxLT5oLm1zZ190eXBlID0gQlRfR0VUQ0FQQUJJ TElUSUVTX1JFUTsKKwlzdHJuY3B5KGdldGNhcHNfcmVxLT5kZXZpY2UsIGFsc2FfY29uZi0+ ZGV2aWNlLCAxOCk7CisJaWYgKGFsc2FfY29uZi0+aGFzX3RyYW5zcG9ydCkKKwkJZ2V0Y2Fw c19yZXEtPnRyYW5zcG9ydCA9IGFsc2FfY29uZi0+dHJhbnNwb3J0OwkKKwllbHNlCisJCWdl dGNhcHNfcmVxLT50cmFuc3BvcnQgPSBCVF9DQVBBQklMSVRJRVNfVFJBTlNQT1JUX0FOWTsK KworCWdldGNhcHNfcmVxLT5hY2Nlc3NfbW9kZSA9IChzdHJlYW0gPT0gU05EX1BDTV9TVFJF QU1fUExBWUJBQ0sgPyAKKwkJCUJUX0NBUEFCSUxJVElFU19BQ0NFU1NfTU9ERV9XUklURSA6 IAorCQkJQlRfQ0FQQUJJTElUSUVTX0FDQ0VTU19NT0RFX1JFQUQpOworCisJZXJyID0gYXVk aW9zZXJ2aWNlX3NlbmQoZGF0YS0+c2VydmVyLmZkLCAmZ2V0Y2Fwc19yZXEtPmgpOworCWlm IChlcnIgPCAwKQorCQlnb3RvIGZhaWxlZDsKKworCWVyciA9IGF1ZGlvc2VydmljZV9leHBl Y3QoZGF0YS0+c2VydmVyLmZkLCAmZ2V0Y2Fwc19yc3AtPmgsIEJUX0dFVENBUEFCSUxJVElF U19SU1ApOworCWlmIChlcnIgPCAwKQorCQlnb3RvIGZhaWxlZDsKKworCWlmIChnZXRjYXBz X3JzcC0+cG9zaXhfZXJybm8gIT0gMCkgeworCQlTTkRFUlIoIkJUX0dFVENBUEFCSUxJVElF UyBmYWlsZWQgOiAlcyglZCkiLAorCQkJCQlzdHJlcnJvcihnZXRjYXBzX3JzcC0+cG9zaXhf ZXJybm8pLCAKKwkJCQkJZ2V0Y2Fwc19yc3AtPnBvc2l4X2Vycm5vKTsKKwkJcmV0dXJuIC1n ZXRjYXBzX3JzcC0+cG9zaXhfZXJybm87CisJfQorCisJZGF0YS0+dHJhbnNwb3J0ID0gZ2V0 Y2Fwc19yc3AtPnRyYW5zcG9ydDsKKwlkYXRhLT5saW5rX210dSA9IGdldGNhcHNfcnNwLT5s aW5rX210dTsKKwlpZiAoZ2V0Y2Fwc19yc3AtPnRyYW5zcG9ydCA9PSBCVF9DQVBBQklMSVRJ RVNfVFJBTlNQT1JUX0EyRFApCisJCWRhdGEtPmEyZHAuc2JjX2NhcGFiaWxpdGllcyA9IGdl dGNhcHNfcnNwLT5zYmNfY2FwYWJpbGl0aWVzOwogCi0JcmV0dXJuIGJsdWV0b290aF9jZmco ZGF0YSwgc3RyZWFtLCBjb25mKTsKKwlyZXR1cm4gMDsKKworZmFpbGVkOgorCWJ0X2F1ZGlv X3NlcnZpY2VfY2xvc2Uoc2spOworCXJldHVybiBlcnI7CiB9CiAKIFNORF9QQ01fUExVR0lO X0RFRklORV9GVU5DKGJsdWV0b290aCkKIHsKIAlzdHJ1Y3QgYmx1ZXRvb3RoX2RhdGEgKmRh dGE7CiAJaW50IGVycjsKQEAgLTEyNzgsMjYgKzEzMTgsMjYgQEAKIAogCWRhdGEtPmlvLnZl cnNpb24gPSBTTkRfUENNX0lPUExVR19WRVJTSU9OOwogCWRhdGEtPmlvLm5hbWUgPSAiQmx1 ZXRvb3RoIEF1ZGlvIERldmljZSI7CiAJZGF0YS0+aW8ubW1hcF9ydyA9IDA7IC8qIE5vIGRp cmVjdCBtbWFwIGNvbW11bmljYXRpb24gKi8KIAlkYXRhLT5pby5wcml2YXRlX2RhdGEgPSBk YXRhOwogCi0JaWYgKGRhdGEtPmNmZy5jb2RlYyA9PSBDRkdfQ09ERUNfU0JDKQorCWlmIChk YXRhLT50cmFuc3BvcnQgPT0gQlRfQ0FQQUJJTElUSUVTX1RSQU5TUE9SVF9BMkRQKQogCQlk YXRhLT5pby5jYWxsYmFjayA9IHN0cmVhbSA9PSBTTkRfUENNX1NUUkVBTV9QTEFZQkFDSyA/ CiAJCQkmYmx1ZXRvb3RoX2EyZHBfcGxheWJhY2sgOgogCQkJJmJsdWV0b290aF9hMmRwX2Nh cHR1cmU7CiAJZWxzZQogCQlkYXRhLT5pby5jYWxsYmFjayA9IHN0cmVhbSA9PSBTTkRfUENN X1NUUkVBTV9QTEFZQkFDSyA/CiAJCQkmYmx1ZXRvb3RoX2hzcF9wbGF5YmFjayA6CiAJCQkm Ymx1ZXRvb3RoX2hzcF9jYXB0dXJlOwogCiAJZXJyID0gc25kX3BjbV9pb3BsdWdfY3JlYXRl KCZkYXRhLT5pbywgbmFtZSwgc3RyZWFtLCBtb2RlKTsKIAlpZiAoZXJyIDwgMCkKIAkJZ290 byBlcnJvcjsKIAotCWlmIChkYXRhLT5jZmcuY29kZWMgPT0gQ0ZHX0NPREVDX1NCQykKKwlp ZiAoZGF0YS0+dHJhbnNwb3J0ID09IEJUX0NBUEFCSUxJVElFU19UUkFOU1BPUlRfQTJEUCkK IAkJZXJyID0gYmx1ZXRvb3RoX2EyZHBfaHdfY29uc3RyYWludCgmZGF0YS0+aW8pOwogCWVs c2UKIAkJZXJyID0gYmx1ZXRvb3RoX2hzcF9od19jb25zdHJhaW50KCZkYXRhLT5pbyk7CiAK IAlpZiAoZXJyIDwgMCkgewogCQlzbmRfcGNtX2lvcGx1Z19kZWxldGUoJmRhdGEtPmlvKTsK SW5kZXg6IHVuaXguYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSB1bml4LmMJKC4uLi90YWdzLzIwMDcx MDI2XzEwMTAvYXVkaW8pCShyw6l2aXNpb24gMTgwKQorKysgdW5peC5jCSguLi4vYnJhbmNo ZXMvMjAwNzEwMjZfMTAxMC9hdWRpbykJKHLDqXZpc2lvbiAxODApCkBAIC0zOCwxMyArMzgs MTMgQEAKICNpbmNsdWRlIDxibHVldG9vdGgvc2RwLmg+CiAjaW5jbHVkZSA8ZGJ1cy9kYnVz Lmg+CiAjaW5jbHVkZSA8Z2xpYi5oPgogCiAjaW5jbHVkZSAibG9nZ2luZy5oIgogI2luY2x1 ZGUgImRidXMuaCIKLSNpbmNsdWRlICJpcGMuaCIKKyNpbmNsdWRlICJhdWRpb2NsaWVudC5o IgogI2luY2x1ZGUgImRldmljZS5oIgogI2luY2x1ZGUgIm1hbmFnZXIuaCIKICNpbmNsdWRl ICJhdmR0cC5oIgogI2luY2x1ZGUgImEyZHAuaCIKICNpbmNsdWRlICJoZWFkc2V0LmgiCiAj aW5jbHVkZSAic2luay5oIgpAQCAtNzYsMjIgKzc2LDI4IEBACiAJY2hhciAqaW50ZXJmYWNl OwogCXVuaW9uIHsKIAkJc3RydWN0IGEyZHBfZGF0YSBhMmRwOwogCQlzdHJ1Y3QgaGVhZHNl dF9kYXRhIGhzOwogCX0gZDsKIAlpbnQgc29jazsKLQlpbnQgZmRfb3B0OworCWludCBhY2Nl c3NfbW9kZTsKKwlpbnQgZGF0YV9mZDsgLyogVG8gYmUgZGVsZXRlZCBvbmNlIHR3byBwaGFz ZSBjb25maWd1cmF0aW9uIGlzIGZ1bGx5IGltcGxlbWVudGVkICovCiAJdW5zaWduZWQgaW50 IHJlcV9pZDsKIAl1bnNpZ25lZCBpbnQgY2JfaWQ7CiAJZ2Jvb2xlYW4gKCpjYW5jZWxfc3Ry ZWFtKSAoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgaWQpOwogfTsKIAogc3Rh dGljIEdTTGlzdCAqY2xpZW50cyA9IE5VTEw7CiAKIHN0YXRpYyBpbnQgdW5peF9zb2NrID0g LTE7CiAKK3N0YXRpYyB2b2lkIHVuaXhfaXBjX3NlbmRtc2coc3RydWN0IHVuaXhfY2xpZW50 ICpjbGllbnQsIAorCQkJCQljb25zdCBidF9hdWRpb19tc2dfaGVhZGVyX3QgKm1zZyk7CisK K3N0YXRpYyB2b2lkIHNlbmRfZ2V0Y2FwYWJpbGl0aWVzX3JzcF9lcnJvcihzdHJ1Y3QgdW5p eF9jbGllbnQgKmNsaWVudCwgaW50IGVycik7CisKIHN0YXRpYyB2b2lkIGNsaWVudF9mcmVl KHN0cnVjdCB1bml4X2NsaWVudCAqY2xpZW50KQogewogCXN0cnVjdCBhMmRwX2RhdGEgKmEy ZHA7CiAKIAlzd2l0Y2ggKGNsaWVudC0+dHlwZSkgewogCWNhc2UgVFlQRV9TSU5LOgpAQCAt MTkwLDEyNyArMTk2LDc4IEBACiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWJyZWFrOwogCX0K IH0KIAotc3RhdGljIGludCB1bml4X3NlbmRfY2ZnKGludCBzb2NrLCBzdHJ1Y3QgaXBjX2Rh dGFfY2ZnICpjZmcsIGludCBmZCkKLXsKLQljaGFyIGJ1ZltJUENfTVRVXTsKLQlzdHJ1Y3Qg aXBjX3BhY2tldCAqcGt0ID0gKHZvaWQgKikgYnVmOwotCWludCBsZW4sIGNvZGVjX2xlbjsK LQotCW1lbXNldChidWYsIDAsIHNpemVvZihidWYpKTsKLQotCXBrdC0+dHlwZSA9IFBLVF9U WVBFX0NGR19SU1A7Ci0KLQlpZiAoIWNmZykgewotCQlwa3QtPmVycm9yID0gRUlOVkFMOwot CQlsZW4gPSBzZW5kKHNvY2ssIHBrdCwgc2l6ZW9mKHN0cnVjdCBpcGNfcGFja2V0KSwgMCk7 Ci0JCWlmIChsZW4gPCAwKQotCQkJZXJyb3IoInNlbmQ6ICVzICglZCkiLCBzdHJlcnJvcihl cnJubyksIGVycm5vKTsKLQkJcmV0dXJuIGxlbjsKLQl9Ci0KLQlkZWJ1ZygiZmQ9JWQsIGZk X29wdD0ldSwgcGt0X2xlbj0ldSwgc2FtcGxlX3NpemU9JXUsIHJhdGU9JXUiLAotCQkJCQkJ ZmQsIGNmZy0+ZmRfb3B0LCBjZmctPnBrdF9sZW4sCi0JCQkJCQljZmctPnNhbXBsZV9zaXpl LCBjZmctPnJhdGUpOwotCi0JaWYgKGNmZy0+Y29kZWMgPT0gQ0ZHX0NPREVDX1NCQykKLQkJ Y29kZWNfbGVuID0gc2l6ZW9mKHN0cnVjdCBpcGNfY29kZWNfc2JjKTsKLQllbHNlCi0JCWNv ZGVjX2xlbiA9IDA7Ci0KLQlwa3QtPmVycm9yID0gUEtUX0VSUk9SX05PTkU7Ci0JcGt0LT5s ZW5ndGggPSBzaXplb2Yoc3RydWN0IGlwY19kYXRhX2NmZykgKyBjb2RlY19sZW47Ci0JbWVt Y3B5KHBrdC0+ZGF0YSwgY2ZnLCBwa3QtPmxlbmd0aCk7Ci0KLQlsZW4gPSBzaXplb2Yoc3Ry dWN0IGlwY19wYWNrZXQpICsgcGt0LT5sZW5ndGg7Ci0JbGVuID0gc2VuZChzb2NrLCBwa3Qs IGxlbiwgMCk7Ci0JaWYgKGxlbiA8IDApCi0JCWVycm9yKCJFcnJvciAlcyglZCkiLCBzdHJl cnJvcihlcnJubyksIGVycm5vKTsKLQotCWRlYnVnKCIlZCBieXRlcyBzZW50IiwgbGVuKTsK LQotCWlmIChmZCAhPSAtMSkgewotCQlsZW4gPSB1bml4X3NlbmRtc2dfZmQoc29jaywgZmQp OwotCQlpZiAobGVuIDwgMCkKLQkJCWVycm9yKCJFcnJvciAlcyglZCkiLCBzdHJlcnJvcihl cnJubyksIGVycm5vKTsKLQkJZGVidWcoIiVkIGJ5dGVzIHNlbnQiLCBsZW4pOwotCX0KLQot CXJldHVybiAwOwotfQotCiBzdGF0aWMgdm9pZCBoZWFkc2V0X3NldHVwX2NvbXBsZXRlKHN0 cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqdXNlcl9kYXRhKQogewogCXN0cnVjdCB1bml4X2Ns aWVudCAqY2xpZW50ID0gdXNlcl9kYXRhOwotCXN0cnVjdCBpcGNfZGF0YV9jZmcgY2ZnOwor CWNoYXIgYnVmW0JUX0FVRElPX0lQQ19QQUNLRVRfU0laRV07CisJc3RydWN0IGJ0X2dldGNh cGFiaWxpdGllc19yc3AgKnJzcCA9ICh2b2lkICopIGJ1ZjsJCiAJc3RydWN0IGhlYWRzZXRf ZGF0YSAqaHMgPSAmY2xpZW50LT5kLmhzOwotCWludCBmZDsKIAogCWNsaWVudC0+cmVxX2lk ID0gMDsKIAogCWlmICghZGV2KSB7Ci0JCXVuaXhfc2VuZF9jZmcoY2xpZW50LT5zb2NrLCBO VUxMLCAtMSk7CisJCXNlbmRfZ2V0Y2FwYWJpbGl0aWVzX3JzcF9lcnJvcihjbGllbnQsIEVJ Tyk7CiAJCWNsaWVudC0+ZGV2ID0gTlVMTDsKIAkJcmV0dXJuOwogCX0KIAotCXN3aXRjaCAo Y2xpZW50LT5mZF9vcHQpIHsKLQljYXNlIENGR19GRF9PUFRfUkVBRDoKKwlzd2l0Y2ggKGNs aWVudC0+YWNjZXNzX21vZGUpIHsKKwljYXNlIEJUX0NBUEFCSUxJVElFU19BQ0NFU1NfTU9E RV9SRUFEOgogCQlocy0+bG9jayA9IEhFQURTRVRfTE9DS19SRUFEOwogCQlicmVhazsKLQlj YXNlIENGR19GRF9PUFRfV1JJVEU6CisJY2FzZSBCVF9DQVBBQklMSVRJRVNfQUNDRVNTX01P REVfV1JJVEU6CiAJCWhzLT5sb2NrID0gSEVBRFNFVF9MT0NLX1dSSVRFOwogCQlicmVhazsK LQljYXNlIENGR19GRF9PUFRfUkVBRFdSSVRFOgorCWNhc2UgQlRfQ0FQQUJJTElUSUVTX0FD Q0VTU19NT0RFX1JFQURXUklURToKIAkJaHMtPmxvY2sgPSBIRUFEU0VUX0xPQ0tfUkVBRCB8 IEhFQURTRVRfTE9DS19XUklURTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJaHMtPmxvY2sg PSAwOwogCQlicmVhazsKIAl9CiAKIAlpZiAoIWhlYWRzZXRfbG9jayhkZXYsIGhzLT5sb2Nr KSkgewogCQllcnJvcigiVW5hYmxlIHRvIGxvY2sgaGVhZHNldCIpOwotCQl1bml4X3NlbmRf Y2ZnKGNsaWVudC0+c29jaywgTlVMTCwgLTEpOworCQlzZW5kX2dldGNhcGFiaWxpdGllc19y c3BfZXJyb3IoY2xpZW50LCBFSU8pOwogCQljbGllbnQtPmRldiA9IE5VTEw7CiAJCXJldHVy bjsKIAl9CiAKLQltZW1zZXQoJmNmZywgMCwgc2l6ZW9mKGNmZykpOwotCi0JY2ZnLmZkX29w dCA9IGNsaWVudC0+ZmRfb3B0OwotCWNmZy5jb2RlYyA9IENGR19DT0RFQ19TQ087Ci0JY2Zn Lm1vZGUgPSBDRkdfTU9ERV9NT05POwotCWNmZy5wa3RfbGVuID0gNDg7Ci0JY2ZnLnNhbXBs ZV9zaXplID0gMjsKLQljZmcucmF0ZSA9IDgwMDA7CisJbWVtc2V0KGJ1ZiwgMCwgc2l6ZW9m KGJ1ZikpOwogCi0JZmQgPSBoZWFkc2V0X2dldF9zY29fZmQoZGV2KTsKKwlyc3AtPmgubXNn X3R5cGUgPSBCVF9HRVRDQVBBQklMSVRJRVNfUlNQOworCXJzcC0+dHJhbnNwb3J0ICA9IEJU X0NBUEFCSUxJVElFU19UUkFOU1BPUlRfU0NPOworCXJzcC0+YWNjZXNzX21vZGUgPSBjbGll bnQtPmFjY2Vzc19tb2RlOworCXJzcC0+bGlua19tdHUgPSA0ODsKKwlyc3AtPnNhbXBsaW5n X3JhdGUgPSA4MDAwOworCQorCWNsaWVudC0+ZGF0YV9mZCA9IGhlYWRzZXRfZ2V0X3Njb19m ZChkZXYpOwogCi0JdW5peF9zZW5kX2NmZyhjbGllbnQtPnNvY2ssICZjZmcsIGZkKTsKKwl1 bml4X2lwY19zZW5kbXNnKGNsaWVudCwgJnJzcC0+aCk7CiB9CiAKIHN0YXRpYyB2b2lkIGEy ZHBfc2V0dXBfY29tcGxldGUoc3RydWN0IGF2ZHRwICpzZXNzaW9uLCBzdHJ1Y3QgYTJkcF9z ZXAgKnNlcCwKIAkJCQkJc3RydWN0IGF2ZHRwX3N0cmVhbSAqc3RyZWFtLAogCQkJCQl2b2lk ICp1c2VyX2RhdGEsIHN0cnVjdCBhdmR0cF9lcnJvciAqZXJyKQogewogCXN0cnVjdCB1bml4 X2NsaWVudCAqY2xpZW50ID0gdXNlcl9kYXRhOwotCWNoYXIgYnVmW3NpemVvZihzdHJ1Y3Qg aXBjX2RhdGFfY2ZnKSArIHNpemVvZihzdHJ1Y3QgaXBjX2NvZGVjX3NiYyldOwotCXN0cnVj dCBpcGNfZGF0YV9jZmcgKmNmZyA9ICh2b2lkICopIGJ1ZjsKKwljaGFyIGJ1ZltCVF9BVURJ T19JUENfUEFDS0VUX1NJWkVdOworCXN0cnVjdCBidF9nZXRjYXBhYmlsaXRpZXNfcnNwICpy c3AgPSAodm9pZCAqKSBidWY7CQogCXN0cnVjdCBhdmR0cF9zZXJ2aWNlX2NhcGFiaWxpdHkg KmNhcDsKIAlzdHJ1Y3QgYXZkdHBfbWVkaWFfY29kZWNfY2FwYWJpbGl0eSAqY29kZWNfY2Fw OwogCXN0cnVjdCBzYmNfY29kZWNfY2FwICpzYmNfY2FwOwotCXN0cnVjdCBpcGNfY29kZWNf c2JjICpzYmMgPSAodm9pZCAqKSBjZmctPmRhdGE7CiAJc3RydWN0IGEyZHBfZGF0YSAqYTJk cCA9ICZjbGllbnQtPmQuYTJkcDsKLQlpbnQgZmQ7CiAJdWludDE2X3QgbXR1OwogCUdTTGlz dCAqY2FwczsKIAorCW1lbXNldChidWYsIDAsIHNpemVvZihidWYpKTsKKwogCWNsaWVudC0+ cmVxX2lkID0gMDsKIAogCWlmICghc3RyZWFtKQogCQlnb3RvIGZhaWxlZDsKIAogCWlmICgh YTJkcF9zZXBfbG9jayhzZXAsIHNlc3Npb24pKSB7CkBAIC0zMTgsMTggKzI3NSwxOCBAQAog CQlnb3RvIGZhaWxlZDsKIAl9CiAKIAlhMmRwLT5zZXAgPSBzZXA7CiAJYTJkcC0+c3RyZWFt ID0gc3RyZWFtOwogCi0JaWYgKCFhdmR0cF9zdHJlYW1fZ2V0X3RyYW5zcG9ydChzdHJlYW0s ICZmZCwgJm10dSwgJmNhcHMpKSB7CisJaWYgKCFhdmR0cF9zdHJlYW1fZ2V0X3RyYW5zcG9y dChzdHJlYW0sICZjbGllbnQtPmRhdGFfZmQsICZtdHUsICZjYXBzKSkgewogCQllcnJvcigi VW5hYmxlIHRvIGdldCBzdHJlYW0gdHJhbnNwb3J0Iik7CiAJCWdvdG8gZmFpbGVkOwogCX0K IAotCWNmZy0+cGt0X2xlbiA9IG10dTsKKwlyc3AtPmxpbmtfbXR1ID0gbXR1OwogCiAJZm9y IChjb2RlY19jYXAgPSBOVUxMOyBjYXBzOyBjYXBzID0gZ19zbGlzdF9uZXh0KGNhcHMpKSB7 CiAJCWNhcCA9IGNhcHMtPmRhdGE7CiAJCWlmIChjYXAtPmNhdGVnb3J5ID09IEFWRFRQX01F RElBX0NPREVDKSB7CiAJCQljb2RlY19jYXAgPSAodm9pZCAqKSBjYXAtPmRhdGE7CiAJCQli cmVhazsKQEAgLTMzOSw4MyArMjk2LDQ1IEBACiAJaWYgKGNvZGVjX2NhcCA9PSBOVUxMIHx8 CiAJCQljb2RlY19jYXAtPm1lZGlhX2NvZGVjX3R5cGUgIT0gQTJEUF9DT0RFQ19TQkMpIHsK IAkJZXJyb3IoIlVuYWJsZSB0byBmaW5kIG1hdGNoaW5nIGNvZGVjIGNhcGFiaWxpdHkiKTsK IAkJZ290byBmYWlsZWQ7CiAJfQogCi0JY2ZnLT5mZF9vcHQgPSBDRkdfRkRfT1BUX1dSSVRF OworCXJzcC0+aC5tc2dfdHlwZSA9IEJUX0dFVENBUEFCSUxJVElFU19SU1A7CisJcnNwLT50 cmFuc3BvcnQgPSBCVF9DQVBBQklMSVRJRVNfVFJBTlNQT1JUX0EyRFA7CisJY2xpZW50LT5h Y2Nlc3NfbW9kZSA9IEJUX0NBUEFCSUxJVElFU19BQ0NFU1NfTU9ERV9XUklURTsKKwlyc3At PmFjY2Vzc19tb2RlID0gY2xpZW50LT5hY2Nlc3NfbW9kZTsKKwkvKiByc3AtPmxpbmtfbXR1 ID0gYWxyZWFkeSBzZXQgKHNlZSBhYm92ZSkgKi8KIAogCXNiY19jYXAgPSAodm9pZCAqKSBj b2RlY19jYXA7Ci0JY2ZnLT5zYW1wbGVfc2l6ZSA9IDI7CiAKLQlzd2l0Y2ggKHNiY19jYXAt PmNoYW5uZWxfbW9kZSkgewotCWNhc2UgQTJEUF9DSEFOTkVMX01PREVfTU9OTzoKLQkJY2Zn LT5tb2RlID0gQ0ZHX01PREVfTU9OTzsKLQkJYnJlYWs7Ci0JY2FzZSBBMkRQX0NIQU5ORUxf TU9ERV9EVUFMX0NIQU5ORUw6Ci0JCWNmZy0+bW9kZSA9IENGR19NT0RFX0RVQUxfQ0hBTk5F TDsKLQkJYnJlYWs7Ci0JY2FzZSBBMkRQX0NIQU5ORUxfTU9ERV9TVEVSRU86Ci0JCWNmZy0+ bW9kZSA9IENGR19NT0RFX1NURVJFTzsKLQkJYnJlYWs7Ci0JY2FzZSBBMkRQX0NIQU5ORUxf TU9ERV9KT0lOVF9TVEVSRU86Ci0JCWNmZy0+bW9kZSA9IENGR19NT0RFX0pPSU5UX1NURVJF TzsKLQkJYnJlYWs7Ci0JfQorCS8qIGFzc2lnbmF0aW9ucyBiZWxvdyBhcmUgb2sgYXMgc29v biBhcyBuZXdpcGMuaCBhbmQgYTJkcC5oIGFyZSBrZXB0IGluIHN5bmMgKi8KKyAgICAgICAg LyogSG93ZXZlciBpdCBpcyBub3QgcG9zc2libGUgdG8gY2FzdCBhIHN0cnVjdCB0byBhbm90 aGVyIGR1ZSB0byBlbmRpYW5lc3MgaXNzdWVzICovCisJcnNwLT5zYmNfY2FwYWJpbGl0aWVz LmNoYW5uZWxfbW9kZSA9IHNiY19jYXAtPmNoYW5uZWxfbW9kZTsKKwlyc3AtPnNiY19jYXBh YmlsaXRpZXMuZnJlcXVlbmN5ID0gc2JjX2NhcC0+ZnJlcXVlbmN5OworCXJzcC0+c2JjX2Nh cGFiaWxpdGllcy5hbGxvY2F0aW9uX21ldGhvZCA9IHNiY19jYXAtPmFsbG9jYXRpb25fbWV0 aG9kOworCXJzcC0+c2JjX2NhcGFiaWxpdGllcy5zdWJiYW5kcyA9IHNiY19jYXAtPnN1YmJh bmRzOworCXJzcC0+c2JjX2NhcGFiaWxpdGllcy5ibG9ja19sZW5ndGggPSBzYmNfY2FwLT5i bG9ja19sZW5ndGg7CisJLyogRklYTUUgKi8KKwlyc3AtPnNiY19jYXBhYmlsaXRpZXMubWlu X2JpdHBvb2wgPSBzYmNfY2FwLT5tYXhfYml0cG9vbDsKKwlyc3AtPnNiY19jYXBhYmlsaXRp ZXMubWF4X2JpdHBvb2wgPSBzYmNfY2FwLT5tYXhfYml0cG9vbDsKIAotCXN3aXRjaCAoc2Jj X2NhcC0+ZnJlcXVlbmN5KSB7Ci0JY2FzZSBBMkRQX1NBTVBMSU5HX0ZSRVFfMTYwMDA6Ci0J CWNmZy0+cmF0ZSA9IDE2MDAwOwotCQlicmVhazsKLQljYXNlIEEyRFBfU0FNUExJTkdfRlJF UV8zMjAwMDoKLQkJY2ZnLT5yYXRlID0gMzIwMDA7Ci0JCWJyZWFrOwotCWNhc2UgQTJEUF9T QU1QTElOR19GUkVRXzQ0MTAwOgotCQljZmctPnJhdGUgPSA0NDEwMDsKLQkJYnJlYWs7Ci0J Y2FzZSBBMkRQX1NBTVBMSU5HX0ZSRVFfNDgwMDA6Ci0JCWNmZy0+cmF0ZSA9IDQ4MDAwOwot CQlicmVhazsKLQl9Ci0KLQljZmctPmNvZGVjID0gQ0ZHX0NPREVDX1NCQzsKLQlzYmMtPmFs bG9jYXRpb24gPSBzYmNfY2FwLT5hbGxvY2F0aW9uX21ldGhvZCA9PSBBMkRQX0FMTE9DQVRJ T05fU05SID8KLQkJCQkJCQkJMHgwMSA6IDB4MDA7Ci0Jc2JjLT5zdWJiYW5kcyA9IHNiY19j YXAtPnN1YmJhbmRzID09IEEyRFBfU1VCQkFORFNfNCA/IDQgOiA4OwotCi0Jc3dpdGNoIChz YmNfY2FwLT5ibG9ja19sZW5ndGgpIHsKLQljYXNlIEEyRFBfQkxPQ0tfTEVOR1RIXzQ6Ci0J CXNiYy0+YmxvY2tzID0gNDsKLQkJYnJlYWs7Ci0JY2FzZSBBMkRQX0JMT0NLX0xFTkdUSF84 OgotCQlzYmMtPmJsb2NrcyA9IDg7Ci0JCWJyZWFrOwotCWNhc2UgQTJEUF9CTE9DS19MRU5H VEhfMTI6Ci0JCXNiYy0+YmxvY2tzID0gMTI7Ci0JCWJyZWFrOwotCWNhc2UgQTJEUF9CTE9D S19MRU5HVEhfMTY6Ci0JCXNiYy0+YmxvY2tzID0gMTY7Ci0JCWJyZWFrOwotCX0KLQotCXNi Yy0+Yml0cG9vbCA9IHNiY19jYXAtPm1heF9iaXRwb29sOwotCi0JdW5peF9zZW5kX2NmZyhj bGllbnQtPnNvY2ssIGNmZywgZmQpOworCXVuaXhfaXBjX3NlbmRtc2coY2xpZW50LCAmcnNw LT5oKTsKIAogCWNsaWVudC0+Y2JfaWQgPSBhdmR0cF9zdHJlYW1fYWRkX2NiKHNlc3Npb24s IHN0cmVhbSwKIAkJCQkJCXN0cmVhbV9zdGF0ZV9jaGFuZ2VkLCBjbGllbnQpOwogCiAJcmV0 dXJuOwogCiBmYWlsZWQ6CiAJZXJyb3IoInN0cmVhbSBzZXR1cCBmYWlsZWQiKTsKIAlpZiAo YTJkcC0+c2VwKSB7CiAJCWEyZHBfc2VwX3VubG9jayhhMmRwLT5zZXAsIGEyZHAtPnNlc3Np b24pOwogCQlhMmRwLT5zZXAgPSBOVUxMOwogCX0KLQl1bml4X3NlbmRfY2ZnKGNsaWVudC0+ c29jaywgTlVMTCwgLTEpOworCXNlbmRfZ2V0Y2FwYWJpbGl0aWVzX3JzcF9lcnJvcihjbGll bnQsIEVJTyk7CiAKIAlhdmR0cF91bnJlZihhMmRwLT5zZXNzaW9uKTsKIAogCWEyZHAtPnNl c3Npb24gPSBOVUxMOwogCWEyZHAtPnN0cmVhbSA9IE5VTEw7CiB9CkBAIC00NjYsMTQ5ICsz ODUsNzMgQEAKIAljbGllbnQtPnJlcV9pZCA9IGlkOwogCWNsaWVudC0+ZGV2ID0gZGV2Owog CiAJcmV0dXJuOwogCiBmYWlsZWQ6Ci0JdW5peF9zZW5kX2NmZyhjbGllbnQtPnNvY2ssIE5V TEwsIC0xKTsKKwlzZW5kX2dldGNhcGFiaWxpdGllc19yc3BfZXJyb3IoY2xpZW50LCBFSU8p OwogfQogCiBzdGF0aWMgdm9pZCBjcmVhdGVfY2Ioc3RydWN0IGRldmljZSAqZGV2LCB2b2lk ICp1c2VyX2RhdGEpCiB7CiAJc3RydWN0IHVuaXhfY2xpZW50ICpjbGllbnQgPSB1c2VyX2Rh dGE7CiAKIAlpZiAoIWRldikKLQkJdW5peF9zZW5kX2NmZyhjbGllbnQtPnNvY2ssIE5VTEws IC0xKTsKKwkJc2VuZF9nZXRjYXBhYmlsaXRpZXNfcnNwX2Vycm9yKGNsaWVudCwgRUlPKTsK IAllbHNlCiAJCWNyZWF0ZV9zdHJlYW0oZGV2LCBjbGllbnQpOwogfQogCi1zdGF0aWMgaW50 IGNmZ190b19jYXBzKHN0cnVjdCBpcGNfZGF0YV9jZmcgKmNmZywgc3RydWN0IHNiY19jb2Rl Y19jYXAgKnNiY19jYXApCitzdGF0aWMgdm9pZCB1bml4X2lwY19zZW5kbXNnKHN0cnVjdCB1 bml4X2NsaWVudCAqY2xpZW50LCAKKwkJCQkJY29uc3QgYnRfYXVkaW9fbXNnX2hlYWRlcl90 ICptc2cpCiB7Ci0Jc3RydWN0IGlwY19jb2RlY19zYmMgKnNiYyA9ICh2b2lkICopIGNmZy0+ ZGF0YTsKLQotCW1lbXNldChzYmNfY2FwLCAwLCBzaXplb2Yoc3RydWN0IHNiY19jb2RlY19j YXApKTsKLQotCXNiY19jYXAtPmNhcC5tZWRpYV90eXBlID0gQVZEVFBfTUVESUFfVFlQRV9B VURJTzsKLQlzYmNfY2FwLT5jYXAubWVkaWFfY29kZWNfdHlwZSA9IEEyRFBfQ09ERUNfU0JD OwotCi0Jc3dpdGNoIChjZmctPnJhdGUpIHsKLQljYXNlIDQ4MDAwOgotCQlzYmNfY2FwLT5m cmVxdWVuY3kgPSBBMkRQX1NBTVBMSU5HX0ZSRVFfNDgwMDA7Ci0JCWJyZWFrOwotCWNhc2Ug NDQxMDA6Ci0JCXNiY19jYXAtPmZyZXF1ZW5jeSA9IEEyRFBfU0FNUExJTkdfRlJFUV80NDEw MDsKLQkJYnJlYWs7Ci0JY2FzZSAzMjAwMDoKLQkJc2JjX2NhcC0+ZnJlcXVlbmN5ID0gQTJE UF9TQU1QTElOR19GUkVRXzMyMDAwOwotCQlicmVhazsKLQljYXNlIDE2MDAwOgotCQlzYmNf Y2FwLT5mcmVxdWVuY3kgPSBBMkRQX1NBTVBMSU5HX0ZSRVFfMTYwMDA7Ci0JCWJyZWFrOwot CWRlZmF1bHQ6Ci0JCXNiY19jYXAtPmZyZXF1ZW5jeSA9IEEyRFBfU0FNUExJTkdfRlJFUV80 NDEwMDsKLQkJYnJlYWs7Ci0JfQotCi0Jc3dpdGNoIChjZmctPm1vZGUpIHsKLQljYXNlIENG R19NT0RFX01PTk86Ci0JCXNiY19jYXAtPmNoYW5uZWxfbW9kZSA9IEEyRFBfQ0hBTk5FTF9N T0RFX01PTk87Ci0JCWJyZWFrOwotCWNhc2UgQ0ZHX01PREVfRFVBTF9DSEFOTkVMOgotCQlz YmNfY2FwLT5jaGFubmVsX21vZGUgPSBBMkRQX0NIQU5ORUxfTU9ERV9EVUFMX0NIQU5ORUw7 Ci0JCWJyZWFrOwotCWNhc2UgQ0ZHX01PREVfU1RFUkVPOgotCQlzYmNfY2FwLT5jaGFubmVs X21vZGUgPSBBMkRQX0NIQU5ORUxfTU9ERV9TVEVSRU87Ci0JCWJyZWFrOwotCWNhc2UgQ0ZH X01PREVfSk9JTlRfU1RFUkVPOgotCQlzYmNfY2FwLT5jaGFubmVsX21vZGUgPSBBMkRQX0NI QU5ORUxfTU9ERV9KT0lOVF9TVEVSRU87Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXNiY19j YXAtPmNoYW5uZWxfbW9kZSA9IEEyRFBfQ0hBTk5FTF9NT0RFX0pPSU5UX1NURVJFTzsKLQkJ YnJlYWs7Ci0JfQotCi0Jc3dpdGNoIChzYmMtPmFsbG9jYXRpb24pIHsKLQljYXNlIENGR19B TExPQ0FUSU9OX0xPVURORVNTOgotCQlzYmNfY2FwLT5hbGxvY2F0aW9uX21ldGhvZCA9IEEy RFBfQUxMT0NBVElPTl9MT1VETkVTUzsKLQkJYnJlYWs7Ci0JY2FzZSBDRkdfQUxMT0NBVElP Tl9TTlI6Ci0JCXNiY19jYXAtPmFsbG9jYXRpb25fbWV0aG9kID0gQTJEUF9BTExPQ0FUSU9O X0xPVURORVNTOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlzYmNfY2FwLT5hbGxvY2F0aW9u X21ldGhvZCA9IEEyRFBfQUxMT0NBVElPTl9MT1VETkVTUzsKLQkJYnJlYWs7Ci0JfQotCi0J c3dpdGNoIChzYmMtPnN1YmJhbmRzKSB7Ci0JY2FzZSA4OgotCQlzYmNfY2FwLT5zdWJiYW5k cyA9IEEyRFBfU1VCQkFORFNfODsKLQkJYnJlYWs7Ci0JY2FzZSA0OgotCQlzYmNfY2FwLT5z dWJiYW5kcyA9IEEyRFBfU1VCQkFORFNfNDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJc2Jj X2NhcC0+c3ViYmFuZHMgPSBBMkRQX1NVQkJBTkRTXzg7Ci0JCWJyZWFrOwotCX0KLQotCXN3 aXRjaCAoc2JjLT5ibG9ja3MpIHsKLQljYXNlIDE2OgotCQlzYmNfY2FwLT5ibG9ja19sZW5n dGggPSBBMkRQX0JMT0NLX0xFTkdUSF8xNjsKLQkJYnJlYWs7Ci0JY2FzZSAxMjoKLQkJc2Jj X2NhcC0+YmxvY2tfbGVuZ3RoID0gQTJEUF9CTE9DS19MRU5HVEhfMTI7Ci0JCWJyZWFrOwot CWNhc2UgODoKLQkJc2JjX2NhcC0+YmxvY2tfbGVuZ3RoID0gQTJEUF9CTE9DS19MRU5HVEhf ODsKLQkJYnJlYWs7Ci0JY2FzZSA0OgotCQlzYmNfY2FwLT5ibG9ja19sZW5ndGggPSBBMkRQ X0JMT0NLX0xFTkdUSF80OwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlzYmNfY2FwLT5ibG9j a19sZW5ndGggPSBBMkRQX0JMT0NLX0xFTkdUSF8xNjsKLQkJYnJlYWs7CisJaW5mbygiQXVk aW8gQVBJOiBzZW5kaW5nICVzIiwgYnRfYXVkaW9fc3RybXNnW21zZy0+bXNnX3R5cGVdKTsK KwlpZiAoc2VuZChjbGllbnQtPnNvY2ssIG1zZywgQlRfQVVESU9fSVBDX1BBQ0tFVF9TSVpF LCAwKSA8IDApIHsKKwkJZXJyb3IoIkVycm9yICVzKCVkKSIsIHN0cmVycm9yKGVycm5vKSwg ZXJybm8pOwogCX0KK30gCiAKLQlpZiAoc2JjLT5iaXRwb29sICE9IDApIHsKLQkJaWYgKHNi Yy0+Yml0cG9vbCA+IDI1MCkKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JCXNiY19jYXAtPm1p bl9iaXRwb29sID0gc2JjLT5iaXRwb29sOwotCQlzYmNfY2FwLT5tYXhfYml0cG9vbCA9IHNi Yy0+Yml0cG9vbDsKLQl9CitzdGF0aWMgdm9pZCBzZW5kX2dldGNhcGFiaWxpdGllc19yc3Bf ZXJyb3Ioc3RydWN0IHVuaXhfY2xpZW50ICpjbGllbnQsIGludCBlcnIpCit7CisJY2hhciBi dWZbQlRfQVVESU9fSVBDX1BBQ0tFVF9TSVpFXTsKKwlzdHJ1Y3QgYnRfZ2V0Y2FwYWJpbGl0 aWVzX3JzcCAqcnNwID0gKHZvaWQgKikgYnVmOworCQorCW1lbXNldChidWYsIDAsIHNpemVv ZihidWYpKTsKKwlyc3AtPmgubXNnX3R5cGUgPSBCVF9HRVRDQVBBQklMSVRJRVNfUlNQOwor CXJzcC0+cG9zaXhfZXJybm8gPSBlcnI7CiAKLQlyZXR1cm4gMDsKKwl1bml4X2lwY19zZW5k bXNnKGNsaWVudCwgJnJzcC0+aCk7CiB9CisJCQkJCQogCi1zdGF0aWMgdm9pZCBjZmdfZXZl bnQoc3RydWN0IHVuaXhfY2xpZW50ICpjbGllbnQsIHN0cnVjdCBpcGNfcGFja2V0ICpwa3Qs IGludCBsZW4pCitzdGF0aWMgdm9pZCBoYW5kbGVfZ2V0Y2FwYWJpbGl0aWVzX3JlcShzdHJ1 Y3QgdW5peF9jbGllbnQgKmNsaWVudCwKKwkJCQkJc3RydWN0IGJ0X2dldGNhcGFiaWxpdGll c19yZXEgKnJlcSkKIHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXY7CiAJYmRhZGRyX3QgYmRhZGRy OwotCXN0cnVjdCBpcGNfZGF0YV9jZmcgKmNmZyA9ICh2b2lkICopIHBrdC0+ZGF0YTsKLQlz dHJ1Y3Qgc2JjX2NvZGVjX2NhcCBzYmNfY2FwOwogCi0Jc3RyMmJhKHBrdC0+ZGV2aWNlLCAm YmRhZGRyKTsKKwlzdHIyYmEocmVxLT5kZXZpY2UsICZiZGFkZHIpOwogCi0JY2xpZW50LT5m ZF9vcHQgPSBjZmctPmZkX29wdDsKKwlpZiAoIXJlcS0+YWNjZXNzX21vZGUpIHsKKwkJc2Vu ZF9nZXRjYXBhYmlsaXRpZXNfcnNwX2Vycm9yKGNsaWVudCwgRUlOVkFMKTsKKwkJcmV0dXJu OworCX0KKworCWNsaWVudC0+YWNjZXNzX21vZGUgPSByZXEtPmFjY2Vzc19tb2RlOwogCiAJ aWYgKGNsaWVudC0+aW50ZXJmYWNlKSB7CiAJCWdfZnJlZShjbGllbnQtPmludGVyZmFjZSk7 CiAJCWNsaWVudC0+aW50ZXJmYWNlID0gTlVMTDsKIAl9CiAKLQlpZiAocGt0LT5yb2xlID09 IFBLVF9ST0xFX1ZPSUNFKQorCWlmIChyZXEtPnRyYW5zcG9ydCA9PSBCVF9DQVBBQklMSVRJ RVNfVFJBTlNQT1JUX1NDTykKIAkJY2xpZW50LT5pbnRlcmZhY2UgPSBnX3N0cmR1cChBVURJ T19IRUFEU0VUX0lOVEVSRkFDRSk7Ci0JZWxzZSBpZiAocGt0LT5yb2xlID09IFBLVF9ST0xF X0hJRkkpCisJZWxzZSBpZiAocmVxLT50cmFuc3BvcnQgPT0gQlRfQ0FQQUJJTElUSUVTX1RS QU5TUE9SVF9BMkRQKQogCQljbGllbnQtPmludGVyZmFjZSA9IGdfc3RyZHVwKEFVRElPX1NJ TktfSU5URVJGQUNFKTsKIAotCWlmIChjZmdfdG9fY2FwcyhjZmcsICZzYmNfY2FwKSA8IDAp Ci0JCWdvdG8gZmFpbGVkOwotCi0JY2xpZW50LT5tZWRpYV9jb2RlYyA9IGF2ZHRwX3NlcnZp Y2VfY2FwX25ldyhBVkRUUF9NRURJQV9DT0RFQywKLQkJCQkJCSZzYmNfY2FwLCBzaXplb2Yo c2JjX2NhcCkpOworCWNsaWVudC0+bWVkaWFfY29kZWMgPSAwOwogCiAJaWYgKCFtYW5hZ2Vy X2ZpbmRfZGV2aWNlKCZiZGFkZHIsIE5VTEwsIEZBTFNFKSkgewogCQlpZiAoIWJhY21wKCZi ZGFkZHIsIEJEQUREUl9BTlkpKQogCQkJZ290byBmYWlsZWQ7CiAJCWlmICghbWFuYWdlcl9j cmVhdGVfZGV2aWNlKCZiZGFkZHIsIGNyZWF0ZV9jYiwgY2xpZW50KSkKIAkJCWdvdG8gZmFp bGVkOwpAQCAtNjI0LDYzICs0NjcsODYgQEAKIAogCWNyZWF0ZV9zdHJlYW0oZGV2LCBjbGll bnQpOwogCiAJcmV0dXJuOwogCiBmYWlsZWQ6Ci0JdW5peF9zZW5kX2NmZyhjbGllbnQtPnNv Y2ssIE5VTEwsIC0xKTsKKwlzZW5kX2dldGNhcGFiaWxpdGllc19yc3BfZXJyb3IoY2xpZW50 LCBFSU8pOwogfQogCi1zdGF0aWMgdm9pZCBjdGxfZXZlbnQoc3RydWN0IHVuaXhfY2xpZW50 ICpjbGllbnQsCi0JCQkJCXN0cnVjdCBpcGNfcGFja2V0ICpwa3QsIGludCBsZW4pCitzdGF0 aWMgdm9pZCBoYW5kbGVfc2V0Y29uZmlndXJhdGlvbl9yZXEoc3RydWN0IHVuaXhfY2xpZW50 ICpjbGllbnQsCisJCQkJCXN0cnVjdCBidF9zZXRjb25maWd1cmF0aW9uX3JlcSAqcmVxKQog eworCS8qIEZJWE1FOiBmb3Igbm93IHdlIGp1c3QgYmxpbmRseSBhc3N1bWUgdGhhdCB3ZSBy ZWNlaXZlIGlzIHRoZQorCSAgIG9ubHkgdmFsaWQgY29uZmlndXJhdGlvbiBzZW50LiovCisJ Y2hhciBidWZbQlRfQVVESU9fSVBDX1BBQ0tFVF9TSVpFXTsKKwlzdHJ1Y3QgYnRfc2V0Y29u ZmlndXJhdGlvbl9yc3AgKnJzcCA9ICh2b2lkICopIGJ1ZjsKKwkKKwltZW1zZXQoYnVmLCAw LCBzaXplb2YoYnVmKSk7CisJcnNwLT5oLm1zZ190eXBlID0gQlRfU0VUQ09ORklHVVJBVElP Tl9SU1A7CisJcnNwLT5wb3NpeF9lcnJubyA9IDA7CisKKwl1bml4X2lwY19zZW5kbXNnKGNs aWVudCwgJnJzcC0+aCk7CiB9CiAKLXN0YXRpYyBpbnQgcmVwbHlfc3RhdGUoaW50IHNvY2ss IHN0cnVjdCBpcGNfcGFja2V0ICpwa3QpCitzdGF0aWMgdm9pZCBoYW5kbGVfc3RyZWFtc3Rh cnRfcmVxKHN0cnVjdCB1bml4X2NsaWVudCAqY2xpZW50LAorCQkJCQlzdHJ1Y3QgYnRfc3Ry ZWFtc3RhcnRfcmVxICpyZXEpCiB7Ci0Jc3RydWN0IGlwY19kYXRhX3N0YXRlICpzdGF0ZSA9 IChzdHJ1Y3QgaXBjX2RhdGFfc3RhdGUgKikgcGt0LT5kYXRhOwotCWludCBsZW47CisJLyog RklYTUUgOiB0byBiZSByZWFsbHkgaW1wbGVtZW50ZWQgKi8KKwljaGFyIGJ1ZltCVF9BVURJ T19JUENfUEFDS0VUX1NJWkVdOworCXN0cnVjdCBidF9zdHJlYW1zdGFydF9yc3AgKnJzcCA9 ICh2b2lkICopIGJ1ZjsKKwlzdHJ1Y3QgYnRfZGF0YWZkX2luZCAqaW5kID0gKHZvaWQgKikg YnVmOworCQorCW1lbXNldChidWYsIDAsIHNpemVvZihidWYpKTsKKwlyc3AtPmgubXNnX3R5 cGUgPSBCVF9TVFJFQU1TVEFSVF9SU1A7CisJcnNwLT5wb3NpeF9lcnJubyA9IDA7CisJdW5p eF9pcGNfc2VuZG1zZyhjbGllbnQsICZyc3AtPmgpOworCQorCW1lbXNldChidWYsIDAsIHNp emVvZihidWYpKTsKKwlpbmQtPmgubXNnX3R5cGUgPSBCVF9TVFJFQU1GRF9JTkQ7CisJdW5p eF9pcGNfc2VuZG1zZyhjbGllbnQsICZpbmQtPmgpOwogCi0JaW5mbygic3RhdHVzPSV1Iiwg c3RhdGUtPnN0YXRlKTsKKwlpZiAodW5peF9zZW5kbXNnX2ZkKGNsaWVudC0+c29jaywgY2xp ZW50LT5kYXRhX2ZkKSA8IDApCisJCWVycm9yKCJ1bml4X3NlbmRtc2dfZmQ6ICVzKCVkKSIs IHN0cmVycm9yKGVycm5vKSwgZXJybm8pOwogCi0JcGt0LT50eXBlID0gUEtUX1RZUEVfU1RB VEVfUlNQOwotCXBrdC0+bGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBpcGNfZGF0YV9zdGF0ZSk7 Ci0JcGt0LT5lcnJvciA9IFBLVF9FUlJPUl9OT05FOwotCi0JbGVuID0gc2l6ZW9mKHN0cnVj dCBpcGNfcGFja2V0KSArIHNpemVvZihzdHJ1Y3QgaXBjX2RhdGFfc3RhdGUpOwotCWxlbiA9 IHNlbmQoc29jaywgcGt0LCBsZW4sIDApOwotCWlmIChsZW4gPCAwKQotCQllcnJvcigiRXJy b3IgJXMoJWQpIiwgc3RyZXJyb3IoZXJybm8pLCBlcnJubyk7Cit9CiAKLQlkZWJ1ZygiJWQg Ynl0ZXMgc2VudCIsIGxlbik7CitzdGF0aWMgdm9pZCBoYW5kbGVfc3RyZWFtc3RvcF9yZXEo c3RydWN0IHVuaXhfY2xpZW50ICpjbGllbnQsCisJCQkJCXN0cnVjdCBidF9zdHJlYW1zdG9w X3JlcSAqcmVxKQoreworCS8qIEZJWE1FIDogdG8gYmUgaW1wbGVtZW50ZWQgKi8KKwljaGFy IGJ1ZltCVF9BVURJT19JUENfUEFDS0VUX1NJWkVdOworCXN0cnVjdCBidF9zdHJlYW1zdG9w X3JzcCAqcnNwID0gKHZvaWQgKikgYnVmOworCQorCW1lbXNldChidWYsIDAsIHNpemVvZihi dWYpKTsKKwlyc3AtPmgubXNnX3R5cGUgPSBCVF9TVFJFQU1TVE9QX1JTUDsKKwlyc3AtPnBv c2l4X2Vycm5vID0gMDsKIAotCXJldHVybiAwOworCXVuaXhfaXBjX3NlbmRtc2coY2xpZW50 LCAmcnNwLT5oKTsKIH0KIAotc3RhdGljIHZvaWQgc3RhdGVfZXZlbnQoc3RydWN0IHVuaXhf Y2xpZW50ICpjbGllbnQsCi0JCQkJCXN0cnVjdCBpcGNfcGFja2V0ICpwa3QsIGludCBsZW4p CitzdGF0aWMgdm9pZCBoYW5kbGVfY29udHJvbF9yZXEoc3RydWN0IHVuaXhfY2xpZW50ICpj bGllbnQsCisJCQkJCXN0cnVjdCBidF9jb250cm9sX3JlcSAqcmVxKQogewotI2lmIDAKLQlz dHJ1Y3QgaXBjX2RhdGFfc3RhdGUgKnN0YXRlID0gKHN0cnVjdCBpcGNfZGF0YV9zdGF0ZSAq KSBwa3QtPmRhdGE7Ci0Jc3RydWN0IGRldmljZSAqZGV2ID0gY2xpZW50LT5kZXY7Ci0KLQlp ZiAobGVuID4gc2l6ZW9mKHN0cnVjdCBpcGNfcGFja2V0KSkKLQkJZGV2aWNlX3NldF9zdGF0 ZShkZXYsIHN0YXRlLT5zdGF0ZSk7Ci0JZWxzZQotCQlzdGF0ZS0+c3RhdGUgPSBkZXZpY2Vf Z2V0X3N0YXRlKGRldik7Ci0jZW5kaWYKKwkvKiBGSVhNRTogcmVhbGx5IGltcGxlbWVudCB0 aGF0ICovCisJY2hhciBidWZbQlRfQVVESU9fSVBDX1BBQ0tFVF9TSVpFXTsKKwlzdHJ1Y3Qg YnRfc2V0Y29uZmlndXJhdGlvbl9yc3AgKnJzcCA9ICh2b2lkICopIGJ1ZjsKKwkKKwltZW1z ZXQoYnVmLCAwLCBzaXplb2YoYnVmKSk7CisJcnNwLT5oLm1zZ190eXBlID0gQlRfQ09OVFJP TF9SU1A7CisJcnNwLT5wb3NpeF9lcnJubyA9IDA7CiAKLQlyZXBseV9zdGF0ZShjbGllbnQt PnNvY2ssIHBrdCk7CisJdW5peF9pcGNfc2VuZG1zZyhjbGllbnQsICZyc3AtPmgpOwogfQog CiBzdGF0aWMgZ2Jvb2xlYW4gY2xpZW50X2NiKEdJT0NoYW5uZWwgKmNoYW4sIEdJT0NvbmRp dGlvbiBjb25kLCBncG9pbnRlciBkYXRhKQogewotCWNoYXIgYnVmW0lQQ19NVFVdOwotCXN0 cnVjdCBpcGNfcGFja2V0ICpwa3QgPSAodm9pZCAqKSBidWY7CisJY2hhciBidWZbQlRfQVVE SU9fSVBDX1BBQ0tFVF9TSVpFXTsKKwlidF9hdWRpb19tc2dfaGVhZGVyX3QgKm1zZ2hkciA9 ICh2b2lkICopIGJ1ZjsKIAlzdHJ1Y3QgdW5peF9jbGllbnQgKmNsaWVudCA9IGRhdGE7Ci0J aW50IGxlbiwgbGVuX2NoZWNrOworCWludCBsZW47CiAJc3RydWN0IGEyZHBfZGF0YSAqYTJk cCA9ICZjbGllbnQtPmQuYTJkcDsKIAlzdHJ1Y3QgaGVhZHNldF9kYXRhICpocyA9ICZjbGll bnQtPmQuaHM7CiAKIAlpZiAoY29uZCAmIEdfSU9fTlZBTCkKIAkJcmV0dXJuIEZBTFNFOwog CkBAIC03MDYsMzcgKzU3Miw0NSBAQAogCQkJY2xpZW50LT5jYW5jZWxfc3RyZWFtKGNsaWVu dC0+ZGV2LCBjbGllbnQtPnJlcV9pZCk7CiAJCWdvdG8gZmFpbGVkOwogCX0KIAogCW1lbXNl dChidWYsIDAsIHNpemVvZihidWYpKTsKIAotCWxlbiA9IHJlY3YoY2xpZW50LT5zb2NrLCBi dWYsIHNpemVvZihidWYpLCAwKTsKKwlsZW4gPSByZWN2KGNsaWVudC0+c29jaywgYnVmLCBz aXplb2YoYnVmKSwgTVNHX1dBSVRBTEwpOwogCWlmIChsZW4gPCAwKSB7CiAJCWVycm9yKCJy ZWN2OiAlcyAoJWQpIiwgc3RyZXJyb3IoZXJybm8pLCBlcnJubyk7CiAJCWdvdG8gZmFpbGVk OwogCX0KIAotCWxlbl9jaGVjayA9IHBrdC0+bGVuZ3RoICsgc2l6ZW9mKHN0cnVjdCBpcGNf cGFja2V0KTsKLQlpZiAobGVuICE9IGxlbl9jaGVjaykgewotCQllcnJvcigiUGFja2V0IGxl bmdodCBkb2Vzbid0IG1hdGNoIik7Ci0JCWdvdG8gZmFpbGVkOworCWlmIChtc2doZHItPm1z Z190eXBlIDw9IEJUX01TR19NQVgpIHsKKwkJaW5mbygiQXVkaW8gQVBJOiByZWNlaXZlZCAl cyIsIGJ0X2F1ZGlvX3N0cm1zZ1ttc2doZHItPm1zZ190eXBlXSk7CiAJfQogCi0Jc3dpdGNo IChwa3QtPnR5cGUpIHsKLQljYXNlIFBLVF9UWVBFX0NGR19SRVE6Ci0JCWluZm8oIlBhY2th Z2UgUEtUX1RZUEVfQ0ZHX1JFUToldSIsIHBrdC0+cm9sZSk7Ci0JCWNmZ19ldmVudChjbGll bnQsIHBrdCwgbGVuKTsKLQkJYnJlYWs7Ci0JY2FzZSBQS1RfVFlQRV9TVEFURV9SRVE6Ci0J CWluZm8oIlBhY2thZ2UgUEtUX1RZUEVfU1RBVEVfUkVRIik7Ci0JCXN0YXRlX2V2ZW50KGNs aWVudCwgcGt0LCBsZW4pOwotCQlicmVhazsKLQljYXNlIFBLVF9UWVBFX0NUTF9SRVE6Ci0J CWluZm8oIlBhY2thZ2UgUEtUX1RZUEVfQ1RMX1JFUSIpOwotCQljdGxfZXZlbnQoY2xpZW50 LCBwa3QsIGxlbik7CisJc3dpdGNoIChtc2doZHItPm1zZ190eXBlKSB7CisJY2FzZSBCVF9H RVRDQVBBQklMSVRJRVNfUkVROgorCQloYW5kbGVfZ2V0Y2FwYWJpbGl0aWVzX3JlcShjbGll bnQsCisJCQkJKHN0cnVjdCBidF9nZXRjYXBhYmlsaXRpZXNfcmVxICopIG1zZ2hkcik7CQkK KwkJYnJlYWs7CisJY2FzZSBCVF9TRVRDT05GSUdVUkFUSU9OX1JFUToKKwkJaGFuZGxlX3Nl dGNvbmZpZ3VyYXRpb25fcmVxKGNsaWVudCwKKwkJCQkoc3RydWN0IGJ0X3NldGNvbmZpZ3Vy YXRpb25fcmVxICopIG1zZ2hkcik7CQkKKwkJYnJlYWs7CisJY2FzZSBCVF9TVFJFQU1TVEFS VF9SRVE6CisJCWhhbmRsZV9zdHJlYW1zdGFydF9yZXEoY2xpZW50LAorCQkJCShzdHJ1Y3Qg YnRfc3RyZWFtc3RhcnRfcmVxICopIG1zZ2hkcik7CQkKKwkJYnJlYWs7CisJY2FzZSBCVF9T VFJFQU1TVE9QX1JFUToKKwkJaGFuZGxlX3N0cmVhbXN0b3BfcmVxKGNsaWVudCwKKwkJCQko c3RydWN0IGJ0X3N0cmVhbXN0b3BfcmVxICopIG1zZ2hkcik7CQkKKwkJYnJlYWs7CisJY2Fz ZSBCVF9DT05UUk9MX1JFUToKKwkJaGFuZGxlX2NvbnRyb2xfcmVxKGNsaWVudCwKKwkJCQko c3RydWN0IGJ0X2NvbnRyb2xfcmVxICopIG1zZ2hkcik7CQkKIAkJYnJlYWs7CisJZGVmYXVs dDoKKwkJZXJyb3IoIkF1ZGlvIEFQSTogcmVjZWl2ZWQgdW5leHBlY3RlZCBwYWNrZXQgdHlw ZSAlZCIsIG1zZ2hkci0+bXNnX3R5cGUpOwogCX0KIAogCXJldHVybiBUUlVFOwogCiBmYWls ZWQ6CiAJY2xpZW50cyA9IGdfc2xpc3RfcmVtb3ZlKGNsaWVudHMsIGNsaWVudCk7CkBAIC03 ODYsMTMgKzY2MCwxMyBAQAogfQogCiBpbnQgdW5peF9pbml0KHZvaWQpCiB7CiAJR0lPQ2hh bm5lbCAqaW87CiAJc3RydWN0IHNvY2thZGRyX3VuIGFkZHIgPSB7Ci0JCUFGX1VOSVgsIElQ Q19TT0NLRVRfTkFNRQorCQlBRl9VTklYLCBCVF9JUENfU09DS0VUX05BTUUKIAl9OwogCiAJ aW50IHNrLCBlcnI7CiAKIAlzayA9IHNvY2tldChQRl9MT0NBTCwgU09DS19TVFJFQU0sIDAp OwogCWlmIChzayA8IDApIHsKSW5kZXg6IGF1ZGlvY2xpZW50LmMKPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot LS0gYXVkaW9jbGllbnQuYwkoLi4uL3RhZ3MvMjAwNzEwMjZfMTAxMC9hdWRpbykJKHLDqXZp c2lvbiAwKQorKysgYXVkaW9jbGllbnQuYwkoLi4uL2JyYW5jaGVzLzIwMDcxMDI2XzEwMTAv YXVkaW8pCShyw6l2aXNpb24gMTgwKQpAQCAtMCwwICsxLDkxIEBACisvKgorICoKKyAqICBC bHVlWiAtIEJsdWV0b290aCBwcm90b2NvbCBzdGFjayBmb3IgTGludXgKKyAqCisgKiAgQ29w eXJpZ2h0IChDKSAyMDA0LTIwMDcgIE1hcmNlbCBIb2x0bWFubiA8bWFyY2VsQGhvbHRtYW5u Lm9yZz4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxp c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJz aW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg dmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFO VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl IEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp bHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBs aWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRh dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAw MjExMC0xMzAxICBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgPGF1ZGlvY2xpZW50Lmg+CisK K2ludCBidF9hdWRpb19zZXJ2aWNlX29wZW4oKQoreworCWludCBzazsKKwlpbnQgZXJyOwor CXN0cnVjdCBzb2NrYWRkcl91biBhZGRyID0geworCQlBRl9VTklYLCBCVF9JUENfU09DS0VU X05BTUUKKwl9OworCisJc2sgPSBzb2NrZXQoUEZfTE9DQUwsIFNPQ0tfU1RSRUFNLCAwKTsK KwlpZiAoc2sgPCAwKSB7CisJCWVyciA9IGVycm5vOworCQlmcHJpbnRmKHN0ZGVyciwgIiVz OiBDYW5ub3Qgb3BlbiBzb2NrZXQ6ICVzICglZClcbiIsIF9fRlVOQ1RJT05fXywgc3RyZXJy b3IoZXJyKSwgZXJyKTsKKwkJZXJybm8gPSBlcnI7CisJCXJldHVybiAtMTsKKwl9CisKKwlp ZiAoY29ubmVjdChzaywgKHN0cnVjdCBzb2NrYWRkciAqKSAmYWRkciwgc2l6ZW9mKGFkZHIp KSA8IDApIHsKKwkJZXJyID0gZXJybm87CisJCWZwcmludGYoc3RkZXJyLCAiJXM6IGNvbm5l Y3QoKSBmYWlsZWQ6ICVzICglZClcbiIsIF9fRlVOQ1RJT05fXywgc3RyZXJyb3IoZXJyKSwg ZXJyKTsKKwkJY2xvc2Uoc2spOworCQllcnJubyA9IGVycjsKKwkJcmV0dXJuIC0xOworCX0K KwkKKwlyZXR1cm4gc2s7Cit9CisKK2ludCBidF9hdWRpb19zZXJ2aWNlX2Nsb3NlKGludCBz aykKK3sKKwlyZXR1cm4gY2xvc2Uoc2spOworfQorCitpbnQgYnRfYXVkaW9fc2VydmljZV9n ZXRfZGF0YV9mZChpbnQgc2spCit7CisJY2hhciBjbXNnX2JbQ01TR19TUEFDRShzaXplb2Yo aW50KSldLCBtOworCWludCBlcnIsIHJldDsKKwlzdHJ1Y3QgaW92ZWMgaW92ID0geyAmbSwg c2l6ZW9mKG0pIH07CisJc3RydWN0IG1zZ2hkciBtc2doOworCXN0cnVjdCBjbXNnaGRyICpj bXNnOworCisJbWVtc2V0KCZtc2doLCAwLCBzaXplb2YobXNnaCkpOworCW1zZ2gubXNnX2lv diA9ICZpb3Y7CisJbXNnaC5tc2dfaW92bGVuID0gMTsKKwltc2doLm1zZ19jb250cm9sID0g JmNtc2dfYjsKKwltc2doLm1zZ19jb250cm9sbGVuID0gQ01TR19MRU4oc2l6ZW9mKGludCkp OworCisJcmV0ID0gcmVjdm1zZyhzaywgJm1zZ2gsIDApOworCWlmIChyZXQgPCAwKSB7CisJ CWVyciA9IGVycm5vOworCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBVbmFibGUgdG8gcmVjZWl2 ZSBmZDogJXMgKCVkKVxuIiwgX19GVU5DVElPTl9fLCBzdHJlcnJvcihlcnIpLCBlcnIpOwor CQllcnJubyA9IGVycjsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qIFJlY2VpdmUgYXV4aWxp YXJ5IGRhdGEgaW4gbXNnaCAqLworCWZvciAoY21zZyA9IENNU0dfRklSU1RIRFIoJm1zZ2gp OyBjbXNnICE9IE5VTEw7CisJCQljbXNnID0gQ01TR19OWFRIRFIoJm1zZ2gsIGNtc2cpKSB7 CisJCWlmIChjbXNnLT5jbXNnX2xldmVsID09IFNPTF9TT0NLRVQKKwkJCQkmJiBjbXNnLT5j bXNnX3R5cGUgPT0gU0NNX1JJR0hUUykgeworCQkJcmV0dXJuICgqKGludCAqKSBDTVNHX0RB VEEoY21zZykpOworCQl9CisJfQorCisJZXJybm8gPSBFSU5WQUw7CisJcmV0dXJuIC0xOwor fQorCkluZGV4OiBhdWRpb2NsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGF1ZGlvY2xpZW50 LmgJKC4uLi90YWdzLzIwMDcxMDI2XzEwMTAvYXVkaW8pCShyw6l2aXNpb24gMCkKKysrIGF1 ZGlvY2xpZW50LmgJKC4uLi9icmFuY2hlcy8yMDA3MTAyNl8xMDEwL2F1ZGlvKQkocsOpdmlz aW9uIDE4MCkKQEAgLTAsMCArMSwzMDQgQEAKKy8qCisgKgorICogIEJsdWVaIC0gQmx1ZXRv b3RoIHByb3RvY29sIHN0YWNrIGZvciBMaW51eAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIw MDQtMjAwNyAgTWFyY2VsIEhvbHRtYW5uIDxtYXJjZWxAaG9sdG1hbm4ub3JnPgorICoKKyAq ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl c3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMi4xIG9mIHRo ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK KyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3 aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVz c2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAg WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5l cmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5v dCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1 MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVT QQorICoKKyAqLworCisvKgorICBNZXNzYWdlIHNlcXVlbmNlIGNoYXJ0IG9mIHN0cmVhbWlu ZyBzZXF1ZW5jZSBmb3IgQTJEUCB0cmFuc3BvcnQKKyAgCisgIEF1ZGlvIGRhZW1vbiAgICAg ICAgICAgICAgICAgICAgICAgVXNlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBv biBzbmRfcGNtX29wZW4KKyAgICAgICAgICAgICAgICAgPC0tQlRfR0VUQ0FQQUJJTElUSUVT X1JFUQorCisgIEJUX0dFVENBUEFCSUxJVElFU19SU1AtLT4KKworICAgICAgICAgICAgICAg ICAgICAgICAgb24gc25kX3BjbV9od19wYXJhbXMKKyAgICAgICAgICAgICAgICA8LS1CVF9T RVRDT05GSUdVUkFUSU9OX1JFUQorCisgIEJUX1NFVENPTkZJR1VSQVRJT05fUlNQLS0+CisK KwkJCW9uIHNuZF9wY21fcHJlcGFyZQorICAgICAgICAgICAgICAgIDwtLUJUX1NUUkVBTVNU QVJUX1JFUQorCisgIDxNb3ZlcyB0byBzdHJlYW1pbmcgc3RhdGU+CisgIEJUX1NUUkVBTVNU QVJUX1JTUC0tPgorCisgIEJUX1NUUkVBTUZEX0lORCAtLT4KKworICAgICAgICAgICAgICAg ICAgICAgICAgICA8ICBzdHJlYW1zIGRhdGEgPgorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAuLi4uLi4uLi4uCisKKyAgICAgICAgICAgICAgIG9uIHNuZF9wY21fZHJvcC9zbmRf cGNtX2RyYWluCisKKyAgICAgICAgICAgICAgICA8LS1CVF9TVFJFQU1TVE9QX1JFUQorCisg IDxNb3ZlcyB0byBvcGVuIHN0YXRlPgorICBCVF9TVFJFQU1TVE9QX1JTUC0tPgorICAgIAor CQkJb24gSVBDIGNsb3NlIG9yIGFwcGwgY3Jhc2ggCisgIDxNb3ZlcyB0byBpZGxlPgorCQkJ CisgKi8KKworI2lmbmRlZiBCVF9BVURJT0NMSUVOVF9ICisjZGVmaW5lIEJUX0FVRElPQ0xJ RU5UX0gKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisj aW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx1bmlz dGQuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8c3lzL3VuLmg+Cisj aW5jbHVkZSA8ZXJybm8uaD4KKworI2RlZmluZSBCVF9BVURJT19JUENfUEFDS0VUX1NJWkUg ICAxMjgKKyNkZWZpbmUgQlRfSVBDX1NPQ0tFVF9OQU1FICJcMC9vcmcvYmx1ZXovYXVkaW8i CisKKy8qIEdlbmVyaWMgbWVzc2FnZSBoZWFkZXIgZGVmaW5pdGlvbiAqLwordHlwZWRlZiBz dHJ1Y3QgeworCXVpbnQ4X3QgbXNnX3R5cGU7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQp KSBidF9hdWRpb19tc2dfaGVhZGVyX3Q7CisKKy8qIE1lc3NhZ2VzIGxpc3QgKi8KKyNkZWZp bmUgQlRfR0VUQ0FQQUJJTElUSUVTX1JFUQkJMAorI2RlZmluZSBCVF9HRVRDQVBBQklMSVRJ RVNfUlNQCQkxCisKKyNkZWZpbmUgQlRfU0VUQ09ORklHVVJBVElPTl9SRVEJCTIKKyNkZWZp bmUgQlRfU0VUQ09ORklHVVJBVElPTl9SU1AJCTMKKworI2RlZmluZSBCVF9TVFJFQU1TVEFS VF9SRVEJCTQKKyNkZWZpbmUgQlRfU1RSRUFNU1RBUlRfUlNQCQk1CisKKyNkZWZpbmUgQlRf U1RSRUFNU1RPUF9SRVEJCTYKKyNkZWZpbmUgQlRfU1RSRUFNU1RPUF9SU1AJCTcKKworI2Rl ZmluZSBCVF9TVFJFQU1TVVNQRU5EX0lORAkJOAorI2RlZmluZSBCVF9TVFJFQU1SRVNVTUVf SU5ECQk5CisKKyNkZWZpbmUgQlRfQ09OVFJPTF9SRVEJCSAgICAgICAxMAorI2RlZmluZSBC VF9DT05UUk9MX1JTUAkJICAgICAgIDExCisjZGVmaW5lIEJUX0NPTlRST0xfSU5ECQkgICAg ICAgMTIKKworI2RlZmluZSBCVF9TVFJFQU1GRF9JTkQJCSAgICAgICAxMworCisvKiBUaGlz IHRhYmxlIGNvbnRhaW5zIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gZm9yIG1lc3NhZ2Vz IGFib3ZlICovCitzdGF0aWMgY29uc3QgY2hhciAqYnRfYXVkaW9fc3RybXNnW10gPSB7CisJ IkJUX0dFVENBUEFCSUxJVElFU19SRVEiLAorCSJCVF9HRVRDQVBBQklMSVRJRVNfUlNQIiwK KwkiQlRfU0VUQ09ORklHVVJBVElPTl9SRVEiLAorCSJCVF9TRVRDT05GSUdVUkFUSU9OX1JT UCIsCisJIkJUX1NUUkVBTVNUQVJUX1JFUSIsCisJIkJUX1NUUkVBTVNUQVJUX1JTUCIsCisJ IkJUX1NUUkVBTVNUT1BfUkVRIiwKKwkiQlRfU1RSRUFNU1RPUF9SU1AiLAorCSJCVF9TVFJF QU1TVVNQRU5EX0lORCIsCisJIkJUX1NUUkVBTVJFU1VNRV9JTkQiLAorCSJCVF9DT05UUk9M X1JFUSIsCisJIkJUX0NPTlRST0xfUlNQIiwKKwkiQlRfQ09OVFJPTF9JTkQiLAorCSJCVF9T VFJFQU1GRF9JTkQiLAorfTsKKworI2RlZmluZSBCVF9NU0dfTUFYICgoc2l6ZW9mKGJ0X2F1 ZGlvX3N0cm1zZykgLyBzaXplb2YoY2hhciopKSAtMSkKKworLyogQlRfR0VUQ0FQQUJJTElU SUVTX1JFUSAqLworCisjZGVmaW5lIEJUX0NBUEFCSUxJVElFU19UUkFOU1BPUlRfQTJEUAkw CisjZGVmaW5lIEJUX0NBUEFCSUxJVElFU19UUkFOU1BPUlRfU0NPCTEKKyNkZWZpbmUgQlRf Q0FQQUJJTElUSUVTX1RSQU5TUE9SVF9BTlkJMgorCisjZGVmaW5lIEJUX0NBUEFCSUxJVElF U19BQ0NFU1NfTU9ERV9SRUFECTEKKyNkZWZpbmUgQlRfQ0FQQUJJTElUSUVTX0FDQ0VTU19N T0RFX1dSSVRFCTIKKyNkZWZpbmUgQlRfQ0FQQUJJTElUSUVTX0FDQ0VTU19NT0RFX1JFQURX UklURQkzCisKK3N0cnVjdCBidF9nZXRjYXBhYmlsaXRpZXNfcmVxIHsKKwlidF9hdWRpb19t c2dfaGVhZGVyX3QgaDsKKwljaGFyIGRldmljZVsxOF07ICAgICAgLyogQWRkcmVzcyBvZiB0 aGUgcmVtb3RlIERldmljZSAqLworIAl1aW50OF90IHRyYW5zcG9ydDsgICAgLyogUmVxdWVz dGVkIHRyYW5zcG9ydCAqLworCXVpbnQ4X3QgYWNjZXNzX21vZGU7ICAvKiBSZXF1ZXN0ZWQg YWNjZXNzIG1vZGUgKi8KK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKiBCVF9H RVRDQVBBQklMSVRJRVNfUlNQICovCisKKy8qKgorICogU0JDIENvZGVjIHBhcmFtZXRlcnMg YXMgcGVyIEEyRFAgcHJvZmlsZSAxLjAgwqcgNC4zCisgKi8KKworI2RlZmluZSBCVF9BMkRQ X1NBTVBMSU5HX0ZSRVFfMTYwMDAJCSgxIDw8IDMpCisjZGVmaW5lIEJUX0EyRFBfU0FNUExJ TkdfRlJFUV8zMjAwMAkJKDEgPDwgMikKKyNkZWZpbmUgQlRfQTJEUF9TQU1QTElOR19GUkVR XzQ0MTAwCQkoMSA8PCAxKQorI2RlZmluZSBCVF9BMkRQX1NBTVBMSU5HX0ZSRVFfNDgwMDAJ CTEKKworI2RlZmluZSBCVF9BMkRQX0NIQU5ORUxfTU9ERV9NT05PCQkoMSA8PCAzKQorI2Rl ZmluZSBCVF9BMkRQX0NIQU5ORUxfTU9ERV9EVUFMX0NIQU5ORUwJKDEgPDwgMikKKyNkZWZp bmUgQlRfQTJEUF9DSEFOTkVMX01PREVfU1RFUkVPCQkoMSA8PCAxKQorI2RlZmluZSBCVF9B MkRQX0NIQU5ORUxfTU9ERV9KT0lOVF9TVEVSRU8JMQorI2RlZmluZSBCVF9BMkRQX0NIQU5O RUxfTU9ERV9NT05PX0FVVE8JCTAKKworI2RlZmluZSBCVF9BMkRQX0JMT0NLX0xFTkdUSF80 CQkJKDEgPDwgMykKKyNkZWZpbmUgQlRfQTJEUF9CTE9DS19MRU5HVEhfOAkJCSgxIDw8IDIp CisjZGVmaW5lIEJUX0EyRFBfQkxPQ0tfTEVOR1RIXzEyCQkJKDEgPDwgMSkKKyNkZWZpbmUg QlRfQTJEUF9CTE9DS19MRU5HVEhfMTYJCQkxCisKKyNkZWZpbmUgQlRfQTJEUF9TVUJCQU5E U180CQkJKDEgPDwgMSkKKyNkZWZpbmUgQlRfQTJEUF9TVUJCQU5EU184CQkJMQorCisjZGVm aW5lIEJUX0EyRFBfQUxMT0NBVElPTl9TTlIJCQkoMSA8PCAxKQorI2RlZmluZSBCVF9BMkRQ X0FMTE9DQVRJT05fTE9VRE5FU1MJCTEKKyNkZWZpbmUgQlRfQTJEUF9BTExPQ0FUSU9OX0FV VE8JCQkwCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1aW50OF90IGNoYW5uZWxfbW9kZTsKKwl1 aW50OF90IGZyZXF1ZW5jeTsKKwl1aW50OF90IGFsbG9jYXRpb25fbWV0aG9kOworCXVpbnQ4 X3Qgc3ViYmFuZHM7CisJdWludDhfdCBibG9ja19sZW5ndGg7CisJdWludDhfdCBtaW5fYml0 cG9vbDsKKwl1aW50OF90IG1heF9iaXRwb29sOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2Vk KSkgc2JjX2NhcGFiaWxpdGllc190OworCisvKiBUbyBiZSBkZWZpbmVkICovCit0eXBlZGVm IHN0cnVjdCB7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBtcGVnX2NhcGFiaWxpdGll c190OworCitzdHJ1Y3QgYnRfZ2V0Y2FwYWJpbGl0aWVzX3JzcCB7CisJYnRfYXVkaW9fbXNn X2hlYWRlcl90CWg7CisJdWludDhfdAkJCXBvc2l4X2Vycm5vOworIAl1aW50OF90CQkJdHJh bnNwb3J0OwkgICAgLyogR3JhbnRlZCB0cmFuc3BvcnQgKi8KKwl1aW50OF90CQkJYWNjZXNz X21vZGU7IAkgICAgLyogR3JhbnRlZCBhY2Nlc3MgbW9kZSAqLworCXVpbnQxNl90CQlsaW5r X210dTsgICAgICAgICAgIC8qIE1heCBsZW5ndGggdGhhdCB0cmFuc3BvcnQgc3VwcG9ydHMg Ki8KKwlzYmNfY2FwYWJpbGl0aWVzX3QJc2JjX2NhcGFiaWxpdGllczsgICAvKiBBMkRQIG9u bHkgKi8KKwltcGVnX2NhcGFiaWxpdGllc190CW1wZWdfY2FwYWJpbGl0aWVzOyAgLyogQTJE UCBvbmx5ICovCisJdWludDE2X3QJCXNhbXBsaW5nX3JhdGU7CSAgICAvKiBTQ08gb25seSAq LworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qIEJUX1NFVENPTkZJR1VSQVRJ T05fUkVRICovCitzdHJ1Y3QgYnRfc2V0Y29uZmlndXJhdGlvbl9yZXEgeworCWJ0X2F1ZGlv X21zZ19oZWFkZXJfdAloOworCXNiY19jYXBhYmlsaXRpZXNfdCAJc2JjX2NhcGFiaWxpdGll czsgICAvKiBBMkRQIG9ubHkgLSBvbmx5IG9uZSBvZiB0aGlzIGZpZWxkCisJCQkJCQkgICBh bmQgbmV4dCBvbmUgbXVzdCBiZSBmaWxsZWQgKi8KKwltcGVnX2NhcGFiaWxpdGllc190CW1w ZWdfY2FwYWJpbGl0aWVzOyAgLyogQTJEUCBvbmx5ICovCit9IF9fYXR0cmlidXRlX18gKChw YWNrZWQpKTsKKworLyogQlRfU0VUQ09ORklHVVJBVElPTl9SU1AgKi8KK3N0cnVjdCBidF9z ZXRjb25maWd1cmF0aW9uX3JzcCB7CisJYnRfYXVkaW9fbXNnX2hlYWRlcl90IAloOworCXVp bnQ4X3QgCQlwb3NpeF9lcnJubzsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisv KiBCVF9TVFJFQU1TVEFSVF9SRVEgKi8KKyNkZWZpbmUgQlRfU1RSRUFNX0FDQ0VTU19SRUFE CQkwCisjZGVmaW5lIEJUX1NUUkVBTV9BQ0NFU1NfV1JJVEUJCTEKKyNkZWZpbmUgQlRfU1RS RUFNX0FDQ0VTU19SRUFEV1JJVEUJMgorc3RydWN0IGJ0X3N0cmVhbXN0YXJ0X3JlcSB7CisJ YnRfYXVkaW9fbXNnX2hlYWRlcl90IAloOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7 CisKKy8qIEJUX1NUUkVBTVNUQVJUX1JTUCAqLworc3RydWN0IGJ0X3N0cmVhbXN0YXJ0X3Jz cCB7CisJYnRfYXVkaW9fbXNnX2hlYWRlcl90IAloOworCXVpbnQ4X3QgCQlwb3NpeF9lcnJu bzsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKiBCVF9TVFJFQU1GRF9JTkQg Ki8KKy8qIFRoaXMgbWVzc2FnZSBpcyBmb2xsb3dlZCBieSBvbmUgYnl0ZSBvZiBkYXRhIGNv bnRhaW5pbmcgdGhlIHN0cmVhbSBkYXRhIGZkCisgICBhcyBhbmNpbGxpYXJ5IGRhdGEgKi8K K3N0cnVjdCBidF9kYXRhZmRfaW5kIHsKKwlidF9hdWRpb19tc2dfaGVhZGVyX3QgCWg7Cit9 IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworLyogQlRfU1RSRUFNU1RPUF9SRVEgKi8K K3N0cnVjdCBidF9zdHJlYW1zdG9wX3JlcSB7CisJYnRfYXVkaW9fbXNnX2hlYWRlcl90IAlo OworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qIEJUX1NUUkVBTVNUT1BfUlNQ ICovCitzdHJ1Y3QgYnRfc3RyZWFtc3RvcF9yc3AgeworCWJ0X2F1ZGlvX21zZ19oZWFkZXJf dCAJaDsKKwl1aW50OF90IAkJcG9zaXhfZXJybm87Cit9IF9fYXR0cmlidXRlX18gKChwYWNr ZWQpKTsKKworLyogQlRfU1RSRUFNU1VTUEVORF9JTkQgKi8KK3N0cnVjdCBidF9zdHJlYW1z dXNwZW5kX2luZCB7CisJYnRfYXVkaW9fbXNnX2hlYWRlcl90IAloOworfSBfX2F0dHJpYnV0 ZV9fICgocGFja2VkKSk7CisKKy8qIEJUX1NUUkVBTVJFU1VNRV9JTkQgKi8KK3N0cnVjdCBi dF9zdHJlYW1yZXN1bWVfaW5kIHsKKwlidF9hdWRpb19tc2dfaGVhZGVyX3QgCWg7Cit9IF9f YXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworLyogQlRfQ09OVFJPTF9SRVEgKi8KKworI2Rl ZmluZSBCVF9DT05UUk9MX0tFWV9QT1dFUgkJCTB4NDAKKyNkZWZpbmUgQlRfQ09OVFJPTF9L RVlfVk9MX1VQCQkJMHg0MQorI2RlZmluZSBCVF9DT05UUk9MX0tFWV9WT0xfRE9XTgkJCTB4 NDIKKyNkZWZpbmUgQlRfQ09OVFJPTF9LRVlfTVVURQkJCTB4NDMKKyNkZWZpbmUgQlRfQ09O VFJPTF9LRVlfUExBWQkJCTB4NDQKKyNkZWZpbmUgQlRfQ09OVFJPTF9LRVlfU1RPUAkJCTB4 NDUKKyNkZWZpbmUgQlRfQ09OVFJPTF9LRVlfUEFVU0UJCQkweDQ2CisjZGVmaW5lIEJUX0NP TlRST0xfS0VZX1JFQ09SRAkJCTB4NDcKKyNkZWZpbmUgQlRfQ09OVFJPTF9LRVlfUkVXSU5E CQkJMHg0OAorI2RlZmluZSBCVF9DT05UUk9MX0tFWV9GQVNUX0ZPUldBUkQJCTB4NDkKKyNk ZWZpbmUgQlRfQ09OVFJPTF9LRVlfRUpFQ1QJCQkweDRBCisjZGVmaW5lIEJUX0NPTlRST0xf S0VZX0ZPUldBUkQJCQkweDRCCisjZGVmaW5lIEJUX0NPTlRST0xfS0VZX0JBQ0tXQVJECQkJ MHg0QworCitzdHJ1Y3QgYnRfY29udHJvbF9yZXEgeworCWJ0X2F1ZGlvX21zZ19oZWFkZXJf dCAJaDsKKwl1aW50OF90IAkJbW9kZTsJCS8qIENvbnRyb2wgTW9kZSAqLworCXVpbnQ4X3Qg CQlrZXk7CQkvKiBDb250cm9sIEtleSAqLworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7 CisKKy8qIEJUX0NPTlRST0xfUlNQICovCitzdHJ1Y3QgYnRfY29udHJvbF9yc3AgeworCWJ0 X2F1ZGlvX21zZ19oZWFkZXJfdCAJaDsKKwl1aW50OF90IAkJcG9zaXhfZXJybm87CisJdWlu dDhfdCAJCW1vZGU7CQkvKiBDb250cm9sIE1vZGUgKi8KKwl1aW50OF90IAkJa2V5OwkJLyog Q29udHJvbCBLZXkgKi8KK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKiBCVF9D T05UUk9MX0lORCAqLworc3RydWN0IGJ0X2NvbnRyb2xfaW5kIHsKKwlidF9hdWRpb19tc2df aGVhZGVyX3QgCWg7CisJdWludDhfdCAJCW1vZGU7CQkvKiBDb250cm9sIE1vZGUgKi8KKwl1 aW50OF90IAkJa2V5OwkJLyogQ29udHJvbCBLZXkgKi8KK30gX19hdHRyaWJ1dGVfXyAoKHBh Y2tlZCkpOworCisvKiBGdW5jdGlvbiBkZWNsYXJhdGlvbiAqLworCisvKiBPcGVucyBhIGNv bm5lY3Rpb24gdG8gdGhlIGF1ZGlvIHNlcnZpY2U6IHJldHVybiBhIHNvY2tldCBkZXNjcmlw dG9yICovCitpbnQgYnRfYXVkaW9fc2VydmljZV9vcGVuKCk7CisKKy8qIENsb3NlcyBhIGNv bm5lY3Rpb24gdG8gdGhlIGF1ZGlvIHNlcnZpY2UgKi8KK2ludCBidF9hdWRpb19zZXJ2aWNl X2Nsb3NlKGludCBzayk7CisKKy8qIFJlY2VpdmVzIHN0cmVhbSBkYXRhIGZpbGUgZGVzY3Jp cHRvciA6IG11c3QgYmUgY2FsbGVkIGFmdGVyIGEgCitCVF9TVFJFQU1GRF9JTkQgbWVzc2Fn ZSBpcyByZXR1cm5lZCAqLworaW50IGJ0X2F1ZGlvX3NlcnZpY2VfZ2V0X2RhdGFfZmQoaW50 IHNrKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIEJU X0FVRElPQ0xJRU5UX0ggKi8KSW5kZXg6IGN0bF9ibHVldG9vdGguYwo9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 Ci0tLSBjdGxfYmx1ZXRvb3RoLmMJKC4uLi90YWdzLzIwMDcxMDI2XzEwMTAvYXVkaW8pCShy w6l2aXNpb24gMTgwKQorKysgY3RsX2JsdWV0b290aC5jCSguLi4vYnJhbmNoZXMvMjAwNzEw MjZfMTAxMC9hdWRpbykJKHLDqXZpc2lvbiAxODApCkBAIC0zMCwxMyArMzAsMTMgQEAKIAog I2luY2x1ZGUgPGFsc2EvYXNvdW5kbGliLmg+CiAjaW5jbHVkZSA8YWxzYS9jb250cm9sX2V4 dGVybmFsLmg+CiAKICNpbmNsdWRlIDxibHVldG9vdGgvYmx1ZXRvb3RoLmg+CiAKLSNpbmNs dWRlICJpcGMuaCIKKyNpbmNsdWRlICJhdWRpb2NsaWVudC5oIgogCiAjaWZkZWYgRU5BQkxF X0RFQlVHCiAjZGVmaW5lIERCRyhmbXQsIGFyZy4uLikgIHByaW50ZigiREVCVUc6ICVzOiAi IGZtdCAiXG4iICwgX19GVU5DVElPTl9fICwgIyMgYXJnKQogI2Vsc2UKICNkZWZpbmUgREJH KGZtdCwgYXJnLi4uKQogI2VuZGlmCkBAIC02MiwxMyArNjIsMTMgQEAKIHN0YXRpYyB2b2lk IGJsdWV0b290aF9leGl0KHN0cnVjdCBibHVldG9vdGhfZGF0YSAqZGF0YSkKIHsKIAlpZiAo ZGF0YSA9PSBOVUxMKQogCQlyZXR1cm47CiAKIAlpZiAoZGF0YS0+c29jayA+PSAwKQotCQlj bG9zZShkYXRhLT5zb2NrKTsKKwkJYnRfYXVkaW9fc2VydmljZV9jbG9zZShkYXRhLT5zb2Nr KTsKIAogCWZyZWUoZGF0YSk7CiB9CiAKIHN0YXRpYyB2b2lkIGJsdWV0b290aF9jbG9zZShz bmRfY3RsX2V4dF90ICpleHQpCiB7CkBAIC0xMzgsMTQwICsxMzgsMTM1IEBACiAJKmltYXgg ID0gQkxVRVRPT1RIX01BWFZPTDsKIAogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGJs dWV0b290aF9zZW5kX2N0bChzdHJ1Y3QgYmx1ZXRvb3RoX2RhdGEgKmRhdGEsCi0JCQkJc3Ry dWN0IGlwY19wYWNrZXQgKnBrdCwgaW50IGxlbikKKwkJCXVpbnQ4X3QgbW9kZSwgdWludDhf dCBrZXksIHN0cnVjdCBidF9jb250cm9sX3JzcCAqY3RsX3JzcCkKIHsKIAlpbnQgcmV0Owor CXN0cnVjdCBidF9jb250cm9sX3JlcSAqY3RsX3JlcSA9ICh2b2lkICopIGN0bF9yc3A7CiAK LQlyZXQgPSBzZW5kKGRhdGEtPnNvY2ssIHBrdCwgbGVuLCBNU0dfTk9TSUdOQUwpOworCW1l bXNldChjdGxfcmVxLCAwLCBCVF9BVURJT19JUENfUEFDS0VUX1NJWkUpOworCWN0bF9yZXEt PmgubXNnX3R5cGUgPSBCVF9DT05UUk9MX1JFUTsKKwljdGxfcmVxLT5tb2RlID0gbW9kZTsK KwljdGxfcmVxLT5rZXkgPSBrZXk7CisKKwlyZXQgPSBzZW5kKGRhdGEtPnNvY2ssIGN0bF9y ZXEsIEJUX0FVRElPX0lQQ19QQUNLRVRfU0laRSwgTVNHX05PU0lHTkFMKTsKIAlpZiAocmV0 IDw9IDApIHsKIAkJU1lTRVJSKCJVbmFibGUgdG8gcmVxdWVzdCBuZXcgdm9sdW1lIHZhbHVl IHRvIHNlcnZlciIpOwogCQlyZXR1cm4gIC1lcnJubzsKIAl9CiAKLQlyZXQgPSByZWN2KGRh dGEtPnNvY2ssIHBrdCwgbGVuLCAwKTsKKwlyZXQgPSByZWN2KGRhdGEtPnNvY2ssIGN0bF9y c3AsIEJUX0FVRElPX0lQQ19QQUNLRVRfU0laRSwgMCk7CiAJaWYgKHJldCA8PSAwKSB7Ci0J CVNZU0VSUigiVW5hYmxlIHRvIHJlY2VpdmUgbmV3IHZvbHVtZSB2YWx1ZSBmcm9tIHNlcnZl ciIpOworCQlTTkRFUlIoIlVuYWJsZSB0byByZWNlaXZlIG5ldyB2b2x1bWUgdmFsdWUgZnJv bSBzZXJ2ZXIiKTsKIAkJcmV0dXJuICAtZXJybm87CiAJfQogCi0JaWYocGt0LT50eXBlICE9 IFBLVF9UWVBFX0NUTF9SU1ApIHsKLQkJU05ERVJSKCJVbmV4cGVjdGVkIHBhY2tldCB0eXBl ICVkIHJlY2VpdmVkIiwgcGt0LT50eXBlKTsKKwlpZiAoY3RsX3JzcC0+aC5tc2dfdHlwZSA+ IEJUX01TR19NQVgpIHsKKwkJU05ERVJSKCJCb2d1cyBtZXNzYWdlIHR5cGUgJWQgIgorCQkJ CSJyZWNlaXZlZCBmcm9tIGF1ZGlvIHNlcnZpY2UiLCAKKwkJCQljdGxfcnNwLT5oLm1zZ190 eXBlKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JaWYocGt0LT5sZW5ndGggIT0gc2l6 ZW9mKHN0cnVjdCBpcGNfZGF0YV9jdGwpKSB7Ci0JCVNOREVSUigiVW5leHBlY3RlZCBwYWNr ZXQgbGVuZ3RoICVkIHJlY2VpdmVkIiwgcGt0LT5sZW5ndGgpOworCWlmIChjdGxfcnNwLT5o Lm1zZ190eXBlICE9IEJUX0NPTlRST0xfUlNQKSB7CisJCVNOREVSUigiVW5leHBlY3RlZCBt ZXNzYWdlICVzIHJlY2VpdmVkIiwgCisJCQkJYnRfYXVkaW9fc3RybXNnW2N0bF9yc3AtPmgu bXNnX3R5cGVdKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCisJaWYgKGN0bF9yc3AtPnBv c2l4X2Vycm5vICE9IDApIHsKKwkJU05ERVJSKCJCVF9DT05UUk9MIGZhaWxlZCA6ICVzICgl ZCkiLAorCQkJCQlzdHJlcnJvcihjdGxfcnNwLT5wb3NpeF9lcnJubyksIAorCQkJCQljdGxf cnNwLT5wb3NpeF9lcnJubyk7CisJCXJldHVybiAtY3RsX3JzcC0+cG9zaXhfZXJybm87CisJ fQorCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgYmx1ZXRvb3RoX3JlYWRfaW50ZWdl cihzbmRfY3RsX2V4dF90ICpleHQsIHNuZF9jdGxfZXh0X2tleV90IGtleSwKIAkJCQkJCQkJ bG9uZyAqdmFsdWUpCiB7CiAJc3RydWN0IGJsdWV0b290aF9kYXRhICpkYXRhID0gZXh0LT5w cml2YXRlX2RhdGE7Ci0Jc3RydWN0IGlwY19wYWNrZXQgKnBrdDsKLQlzdHJ1Y3QgaXBjX2Rh dGFfY3RsICpjdGw7Ci0JaW50IGxlbiwgcmV0OworCWludCByZXQ7CisJY2hhciBidWZbQlRf QVVESU9fSVBDX1BBQ0tFVF9TSVpFXTsKKwlzdHJ1Y3QgYnRfY29udHJvbF9yc3AgKnJzcCA9 ICh2b2lkICopIGJ1ZjsKIAogCURCRygiZXh0ICVwIGtleSAlbGQiLCBleHQsIGtleSk7CiAK LQlsZW4gPSBzaXplb2Yoc3RydWN0IGlwY19wYWNrZXQpICsgc2l6ZW9mKHN0cnVjdCBpcGNf ZGF0YV9jdGwpOwotCXBrdCA9IG1hbGxvYyhsZW4pOwotCW1lbXNldChwa3QsIDAsIGxlbik7 CisJbWVtc2V0KGJ1ZiwgMCwgc2l6ZW9mKGJ1ZikpOwogCSp2YWx1ZSA9IDA7CiAKLQlwa3Qt PnR5cGUgPSBQS1RfVFlQRV9DVExfUkVROwotCXBrdC0+bGVuZ3RoID0gc2l6ZW9mKHN0cnVj dCBpcGNfZGF0YV9jdGwpOwotCWN0bCA9IChzdHJ1Y3QgaXBjX2RhdGFfY3RsICopIHBrdC0+ ZGF0YTsKLQljdGwtPm1vZGUgPSBrZXk7Ci0KLQlpZiAoKHJldCA9IGJsdWV0b290aF9zZW5k X2N0bChkYXRhLCBwa3QsIGxlbikpIDwgMCkKKwlpZiAoKHJldCA9IGJsdWV0b290aF9zZW5k X2N0bChkYXRhLCBrZXksIDAsIHJzcCkpIDwgMCkKIAkJZ290byBkb25lOwogCi0JKnZhbHVl ID0gY3RsLT5rZXk7CisJKnZhbHVlID0gcnNwLT5rZXk7CiBkb25lOgotCWZyZWUocGt0KTsK IAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IGJsdWV0b290aF93cml0ZV9pbnRlZ2Vy KHNuZF9jdGxfZXh0X3QgKmV4dCwgc25kX2N0bF9leHRfa2V5X3Qga2V5LAogCQkJCQkJCQls b25nICp2YWx1ZSkKIHsKIAlzdHJ1Y3QgYmx1ZXRvb3RoX2RhdGEgKmRhdGEgPSBleHQtPnBy aXZhdGVfZGF0YTsKLQlzdHJ1Y3QgaXBjX3BhY2tldCAqcGt0OwotCXN0cnVjdCBpcGNfZGF0 YV9jdGwgKmN0bDsKKwljaGFyIGJ1ZltCVF9BVURJT19JUENfUEFDS0VUX1NJWkVdOworCXN0 cnVjdCBidF9jb250cm9sX3JzcCAqcnNwID0gKHZvaWQgKikgYnVmOwogCWxvbmcgY3VycmVu dDsKLQlpbnQgbGVuLCByZXQ7CisJaW50IHJldCwga2V5dmFsdWU7CiAKIAlEQkcoImV4dCAl cCBrZXkgJWxkIiwgZXh0LCBrZXkpOwogCiAJaWYgKChyZXQgPSBibHVldG9vdGhfcmVhZF9p bnRlZ2VyKGV4dCwga2V5LCAmY3VycmVudCkpIDwgMCkKIAkJcmV0dXJuIHJldDsKIAogCWlm ICgqdmFsdWUgPT0gY3VycmVudCkKIAkJcmV0dXJuIDA7CiAKLQlsZW4gPSBzaXplb2Yoc3Ry dWN0IGlwY19wYWNrZXQpICsgc2l6ZW9mKHN0cnVjdCBpcGNfZGF0YV9jdGwpOwotCXBrdCA9 IG1hbGxvYyhsZW4pOwotCW1lbXNldChwa3QsIDAsIGxlbik7Ci0KLQlwa3QtPmxlbmd0aCA9 IHNpemVvZihzdHJ1Y3QgaXBjX2RhdGFfY3RsKTsKLQljdGwgPSAoc3RydWN0IGlwY19kYXRh X2N0bCAqKSBwa3QtPmRhdGE7Ci0JY3RsLT5tb2RlID0ga2V5OwotCiAJd2hpbGUgKCp2YWx1 ZSAhPSBjdXJyZW50KSB7Ci0JCXBrdC0+dHlwZSA9IFBLVF9UWVBFX0NUTF9SRVE7Ci0JCWN0 bC0+a2V5ID0gKCp2YWx1ZSA+IGN1cnJlbnQpID8gQ1RMX0tFWV9WT0xfVVAgOiBDVExfS0VZ X1ZPTF9ET1dOOworCQlrZXl2YWx1ZSA9ICgqdmFsdWUgPiBjdXJyZW50KSA/IEJUX0NPTlRS T0xfS0VZX1ZPTF9VUCA6IEJUX0NPTlRST0xfS0VZX1ZPTF9ET1dOOwogCi0JCWlmICgocmV0 ID0gYmx1ZXRvb3RoX3NlbmRfY3RsKGRhdGEsIHBrdCwgbGVuKSkgPCAwKQorCQlpZiAoKHJl dCA9IGJsdWV0b290aF9zZW5kX2N0bChkYXRhLCBrZXksIGtleXZhbHVlLCByc3ApKSA8IDAp CiAJCQlicmVhazsKIAotCQljdXJyZW50ID0gY3RsLT5rZXk7CisJCWN1cnJlbnQgPSBrZXl2 YWx1ZTsKIAl9CiAKLQlmcmVlKHBrdCk7CiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGlu dCBibHVldG9vdGhfcmVhZF9ldmVudChzbmRfY3RsX2V4dF90ICpleHQsIHNuZF9jdGxfZWxl bV9pZF90ICppZCwKIAkJCQkJCXVuc2lnbmVkIGludCAqZXZlbnRfbWFzaykKIHsKIAlzdHJ1 Y3QgYmx1ZXRvb3RoX2RhdGEgKmRhdGEgPSBleHQtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3Qg aXBjX3BhY2tldCAqcGt0OwotCXN0cnVjdCBpcGNfZGF0YV9jdGwgKmN0bDsKLQlpbnQgbGVu LCByZXQ7CisJY2hhciBidWZbQlRfQVVESU9fSVBDX1BBQ0tFVF9TSVpFXTsKKwlzdHJ1Y3Qg YnRfY29udHJvbF9pbmQgKmluZCA9ICh2b2lkICopIGJ1ZjsKKwlpbnQgcmV0OwogCiAJREJH KCJleHQgJXAgaWQgJXAiLCBleHQsIGlkKTsKIAotCWxlbiA9IHNpemVvZihzdHJ1Y3QgaXBj X3BhY2tldCkgKyBzaXplb2Yoc3RydWN0IGlwY19kYXRhX2N0bCk7Ci0JcGt0ID0gbWFsbG9j KGxlbik7Ci0JbWVtc2V0KHBrdCwgMCwgbGVuKTsKLQotCXJldCA9IHJlY3YoZGF0YS0+c29j aywgcGt0LCBsZW4sIE1TR19ET05UV0FJVCk7Ci0JaWYgKHJldCA8PSAwKQotCQlyZXR1cm4g IC1lcnJubzsKKwltZW1zZXQoYnVmLCAwLCBzaXplb2YoYnVmKSk7CiAKLQlpZihwa3QtPnR5 cGUgIT0gUEtUX1RZUEVfQ1RMX05URlkpIHsKLQkJU05ERVJSKCJVbmV4cGVjdGVkIHBhY2tl dCB0eXBlICVkIHJlY2VpdmVkISIsIHBrdC0+dHlwZSk7CisJcmV0ID0gcmVjdihkYXRhLT5z b2NrLCBpbmQsIEJUX0FVRElPX0lQQ19QQUNLRVRfU0laRSwgTVNHX0RPTlRXQUlUKTsKKwlp ZiAoaW5kLT5oLm1zZ190eXBlID4gQlRfTVNHX01BWCkgeworCQlTTkRFUlIoIkJvZ3VzIG1l c3NhZ2UgdHlwZSAlZCAiCisJCQkJInJlY2VpdmVkIGZyb20gYXVkaW8gc2VydmljZSIsIAor CQkJCWluZC0+aC5tc2dfdHlwZSk7CiAJCXJldHVybiAtRUFHQUlOOwogCX0KIAotCWlmKHBr dC0+bGVuZ3RoICE9IHNpemVvZihzdHJ1Y3QgaXBjX2RhdGFfY3RsKSkgewotCQlTTkRFUlIo IlVuZXhwZWN0ZWQgcGFja2V0IGxlbmd0aCAlZCByZWNlaXZlZCIsIHBrdC0+bGVuZ3RoKTsK KwlpZiAoaW5kLT5oLm1zZ190eXBlICE9IEJUX0NPTlRST0xfSU5EKSB7CisJCVNOREVSUigi VW5leHBlY3RlZCBtZXNzYWdlICVzIHJlY2VpdmVkIiwgCisJCQkJYnRfYXVkaW9fc3RybXNn W2luZC0+aC5tc2dfdHlwZV0pOwogCQlyZXR1cm4gLUVBR0FJTjsKIAl9CiAKLQljdGwgPSAo c3RydWN0IGlwY19kYXRhX2N0bCAqKSBwa3QtPmRhdGE7CiAJc25kX2N0bF9lbGVtX2lkX3Nl dF9pbnRlcmZhY2UoaWQsIFNORF9DVExfRUxFTV9JRkFDRV9NSVhFUik7Ci0Jc25kX2N0bF9l bGVtX2lkX3NldF9uYW1lKGlkLCBjdGwtPm1vZGUgPT0gQkxVRVRPT1RIX1BMQVlCQUNLID8K KwlzbmRfY3RsX2VsZW1faWRfc2V0X25hbWUoaWQsIGluZC0+bW9kZSA9PSBCTFVFVE9PVEhf UExBWUJBQ0sgPwogCQkJCXZvbF9kZXZpY2VzW0JMVUVUT09USF9QTEFZQkFDS10gOgogCQkJ CXZvbF9kZXZpY2VzW0JMVUVUT09USF9DQVBUVVJFXSk7CiAJKmV2ZW50X21hc2sgPSBTTkRf Q1RMX0VWRU5UX01BU0tfVkFMVUU7CiAKIAlyZXR1cm4gMTsKIH0KQEAgLTI4Nyw0MCArMjgy LDI1IEBACiAJLndyaXRlX2ludGVnZXIJCT0gYmx1ZXRvb3RoX3dyaXRlX2ludGVnZXIsCiAJ LnJlYWRfZXZlbnQJCT0gYmx1ZXRvb3RoX3JlYWRfZXZlbnQsCiB9OwogCiBzdGF0aWMgaW50 IGJsdWV0b290aF9pbml0KHN0cnVjdCBibHVldG9vdGhfZGF0YSAqZGF0YSkKIHsKLQlpbnQg c2ssIGVyciwgaWQ7Ci0Jc3RydWN0IHNvY2thZGRyX3VuIGFkZHIgPSB7Ci0JCUFGX1VOSVgs IElQQ19TT0NLRVRfTkFNRQotCX07CisJaW50IHNrOwogCiAJaWYgKCFkYXRhKQogCQlyZXR1 cm4gLUVJTlZBTDsKIAogCW1lbXNldChkYXRhLCAwLCBzaXplb2Yoc3RydWN0IGJsdWV0b290 aF9kYXRhKSk7CiAKIAlkYXRhLT5zb2NrID0gLTE7CiAKLQlpZCA9IGFicyhnZXRwaWQoKSAq IHJhbmQoKSk7Ci0KLQlpZiAoKHNrID0gc29ja2V0KFBGX0xPQ0FMLCBTT0NLX1NUUkVBTSwg MCkpIDwgMCkgewotCQllcnIgPSAtZXJybm87Ci0JCVNOREVSUigiQ2FuJ3Qgb3BlbiBzb2Nr ZXQiKTsKKwlpZiAoKHNrID0gYnRfYXVkaW9fc2VydmljZV9vcGVuKCkpIDwgMCkgewogCQly ZXR1cm4gLWVycm5vOwogCX0KIAotCURCRygiQ29ubmVjdGluZyB0byBhZGRyZXNzOiAlcyIs IGFkZHIuc3VuX3BhdGggKyAxKTsKLQlpZiAoY29ubmVjdChzaywgKHN0cnVjdCBzb2NrYWRk ciAqKSAmYWRkciwgc2l6ZW9mKGFkZHIpKSA8IDApIHsKLQkJZXJyID0gLWVycm5vOwotCQlT TkRFUlIoIkNhbid0IGNvbm5lY3Qgc29ja2V0Iik7Ci0JCWNsb3NlKHNrKTsKLQkJcmV0dXJu IGVycjsKLQl9Ci0KIAlkYXRhLT5zb2NrID0gc2s7CiAKIAlyZXR1cm4gMDsKIH0KIAogU05E X0NUTF9QTFVHSU5fREVGSU5FX0ZVTkMoYmx1ZXRvb3RoKQpJbmRleDogTWFrZWZpbGUuYW0K PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQotLS0gTWFrZWZpbGUuYW0JKC4uLi90YWdzLzIwMDcxMDI2XzEwMTAv YXVkaW8pCShyw6l2aXNpb24gMTgwKQorKysgTWFrZWZpbGUuYW0JKC4uLi9icmFuY2hlcy8y MDA3MTAyNl8xMDEwL2F1ZGlvKQkocsOpdmlzaW9uIDE4MCkKQEAgLTEsMTIgKzEsMTIgQEAK IAogaWYgQVVESU9TRVJWSUNFCiBpZiBDT05GSUdGSUxFUwogY29uZmRpciA9ICQoc3lzY29u ZmRpcikvYmx1ZXRvb3RoCiAKLWNvbmZfREFUQSA9IGF1ZGlvLnNlcnZpY2UKK2NvbmZfREFU QSA9IGF1ZGlvLnNlcnZpY2UgYXVkaW8uY29uZgogZW5kaWYKIAogc2VydmljZWRpciA9ICQo bGliZGlyKS9ibHVldG9vdGgKIAogc2VydmljZV9QUk9HUkFNUyA9IGJsdWV0b290aGQtc2Vy dmljZS1hdWRpbwogCkBAIC0yMCwxOCArMjAsMTggQEAKIAogaWYgQUxTQQogYWxzYWRpciA9 ICQobGliZGlyKS9hbHNhLWxpYgogCiBhbHNhX0xUTElCUkFSSUVTID0gbGliYXNvdW5kX21v ZHVsZV9wY21fYmx1ZXRvb3RoLmxhIGxpYmFzb3VuZF9tb2R1bGVfY3RsX2JsdWV0b290aC5s YQogCi1saWJhc291bmRfbW9kdWxlX3BjbV9ibHVldG9vdGhfbGFfU09VUkNFUyA9IHBjbV9i bHVldG9vdGguYyBpcGMuaCBydHAuaAorbGliYXNvdW5kX21vZHVsZV9wY21fYmx1ZXRvb3Ro X2xhX1NPVVJDRVMgPSBwY21fYmx1ZXRvb3RoLmMgcnRwLmggYXVkaW9jbGllbnQuaCBhdWRp b2NsaWVudC5jCiBsaWJhc291bmRfbW9kdWxlX3BjbV9ibHVldG9vdGhfbGFfTERGTEFHUyA9 IC1tb2R1bGUgLWF2b2lkLXZlcnNpb24gLWV4cG9ydC1zeW1ib2xzLXJlZ2V4IFtfXSpzbmRf cGNtXy4qCiBsaWJhc291bmRfbW9kdWxlX3BjbV9ibHVldG9vdGhfbGFfTElCQUREID0gQFNC Q19MSUJTQCBAQUxTQV9MSUJTQAogbGliYXNvdW5kX21vZHVsZV9wY21fYmx1ZXRvb3RoX2xh X0NGTEFHUyA9IEBBTFNBX0NGTEFHU0AgQFNCQ19DRkxBR1NACiAKLWxpYmFzb3VuZF9tb2R1 bGVfY3RsX2JsdWV0b290aF9sYV9TT1VSQ0VTID0gY3RsX2JsdWV0b290aC5jIGlwYy5oCits aWJhc291bmRfbW9kdWxlX2N0bF9ibHVldG9vdGhfbGFfU09VUkNFUyA9IGN0bF9ibHVldG9v dGguYyBhdWRpb2NsaWVudC5oIGF1ZGlvY2xpZW50LmMKIGxpYmFzb3VuZF9tb2R1bGVfY3Rs X2JsdWV0b290aF9sYV9MREZMQUdTID0gLW1vZHVsZSAtYXZvaWQtdmVyc2lvbiAtZXhwb3J0 LXN5bWJvbHMtcmVnZXggW19dKnNuZF9jdGxfLioKIGxpYmFzb3VuZF9tb2R1bGVfY3RsX2Js dWV0b290aF9sYV9MSUJBREQgPSBAQUxTQV9MSUJTQAogbGliYXNvdW5kX21vZHVsZV9jdGxf Ymx1ZXRvb3RoX2xhX0NGTEFHUyA9IEBBTFNBX0NGTEFHU0AKIGVuZGlmCiAKIGlmIEdTVFJF QU1FUgpAQCAtNTUsNiArNTUsMTUgQEAKIAogSU5DTFVERVMgPSAtSSQodG9wX3NyY2Rpcikv Y29tbW9uCiAKIEVYVFJBX0RJU1QgPSBhdWRpby5zZXJ2aWNlIGF1ZGlvLmNvbmYgYXVkaW8t YXBpLnR4dCB0ZXN0LWF1ZGlvIGFzb3VuZC5jb25mCiAKIE1BSU5UQUlORVJDTEVBTkZJTEVT ID0gTWFrZWZpbGUuaW4KKworI0F1ZGlvIGNsaWVudCBsaWJyYXJ5IHN1cHBvcnQKK2F1ZGlv Y2xpZW50ZGlyID0gJChsaWJkaXIpCithdWRpb2NsaWVudF9MVExJQlJBUklFUyA9IGxpYmJ0 YXVkaW9jbGllbnQubGEKK2F1ZGlvY2xpZW50X2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIp L2JsdWV0b290aAorYXVkaW9jbGllbnRfaW5jbHVkZV9IRUFERVJTID0gcnRwLmggYXVkaW9j bGllbnQuaAorbGliYnRhdWRpb2NsaWVudF9sYV9TT1VSQ0VTID0gcnRwLmggYXVkaW9jbGll bnQuaCBhdWRpb2NsaWVudC5jCitsaWJidGF1ZGlvY2xpZW50X2xhX0xERkxBR1MgPSAtbW9k dWxlIC1hdm9pZC12ZXJzaW9uCisK --------------020603080109070302080603 Content-Type: text/x-vcard; charset=utf-8; name="fchevalier.vcf" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="fchevalier.vcf" YmVnaW46dmNhcmQNCmZuOkZhYmllbiBDSEVWQUxJRVINCm46Q0hFVkFMSUVSO0ZhYmllbg0K b3JnOlNJTElDT00NCmFkcjo7OzQgcnVlIGRlIEpvdWFuZXQ7IFJFTk5FUyBBVEFMQU5URTs7 MzU3MDA7RlJBTkNFDQplbWFpbDtpbnRlcm5ldDpmY2hldmFsaWVyQHNpbGljb20uZnINCnRp dGxlOlNvZnR3YXJlICYgU3R1ZGllcyBFbmdpbmVlcg0KdGVsO3dvcms6KzMzICgwKSAyIDk5 IDg0IDE3IDE3DQp2ZXJzaW9uOjIuMQ0KZW5kOnZjYXJkDQoNCg== --------------020603080109070302080603 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline ------------------------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/ --------------020603080109070302080603 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Bluez-devel mailing list Bluez-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/bluez-devel --------------020603080109070302080603--