X-Original-To: alpine-aports@mail.alpinelinux.org Delivered-To: alpine-aports@mail.alpinelinux.org Received: from mail.alpinelinux.org (dallas-a1.alpinelinux.org [127.0.0.1]) by mail.alpinelinux.org (Postfix) with ESMTP id 01C20DC02F6 for ; Sat, 5 Sep 2015 02:42:18 +0000 (UTC) Received: from lithium.8pit.net (lithium.8pit.net [141.101.32.65]) (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.alpinelinux.org (Postfix) with ESMTPS id 1B2F6DC00DE; Sat, 5 Sep 2015 02:42:16 +0000 (UTC) Received: from localhost (ip5f5ac8f9.dynamic.kabel-deutschland.de [95.90.200.249]); by lithium.8pit.net (OpenSMTPD) with ESMTPSA id fbf513fd; TLS version=TLSv1/SSLv3 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO; Sat, 5 Sep 2015 04:42:13 +0200 (CEST) From: =?UTF-8?q?S=C3=B6ren=20Tempel?= To: alpine-aports@lists.alpinelinux.org Subject: [alpine-aports] [PATCH] testing/mmh: new aport Date: Sat, 5 Sep 2015 04:42:06 +0200 Message-Id: <1441420926-6993-1-git-send-email-soeren+git@soeren-tempel.net> X-Mailer: git-send-email 2.5.1 X-Mailinglist: alpine-aports Precedence: list List-Id: Alpine Development List-Unsubscribe: List-Post: List-Help: List-Subscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 X-Virus-Scanned: ClamAV using ClamSMTP LS0tDQogdGVzdGluZy9tbWgvQVBLQlVJTEQgICAgICAgICB8ICA0NSArKysrDQogdGVzdGluZy9t bWgvbXVzbC1maXhlcy5wYXRjaCB8IDUzNyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrDQogMiBmaWxlcyBjaGFuZ2VkLCA1ODIgaW5zZXJ0aW9ucygrKQ0KIGNyZWF0 ZSBtb2RlIDEwMDY0NCB0ZXN0aW5nL21taC9BUEtCVUlMRA0KIGNyZWF0ZSBtb2RlIDEwMDY0NCB0 ZXN0aW5nL21taC9tdXNsLWZpeGVzLnBhdGNoDQoNCmRpZmYgLS1naXQgYS90ZXN0aW5nL21taC9B UEtCVUlMRCBiL3Rlc3RpbmcvbW1oL0FQS0JVSUxEDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5k ZXggMDAwMDAwMC4uNWM3NjI0MQ0KLS0tIC9kZXYvbnVsbA0KKysrIGIvdGVzdGluZy9tbWgvQVBL QlVJTEQNCkBAIC0wLDAgKzEsNDUgQEANCisjIENvbnRyaWJ1dG9yOiBTw7ZyZW4gVGVtcGVsIDxz b2VyZW4rYWxwaW5lQHNvZXJlbi10ZW1wZWwubmV0Pg0KKyMgTWFpbnRhaW5lcjogU8O2cmVuIFRl bXBlbCA8c29lcmVuK2FscGluZUBzb2VyZW4tdGVtcGVsLm5ldD4NCitwa2duYW1lPW1taA0KK3Br Z3Zlcj0wLjENCitwa2dyZWw9MA0KK3BrZ2Rlc2M9Ik1VQSBmb3IgdXNlcnMgd2hvIGxpa2UgdGhl IHVuaXggcGhpbG9zb3BoeSINCit1cmw9Imh0dHA6Ly9tYXJtYXJvLmRlL3Byb2cvbW1oLyINCith cmNoPSJhbGwiDQorbGljZW5zZT0iQlNEIg0KK2RlcGVuZHM9IiINCitkZXBlbmRzX2Rldj0ibmN1 cnNlcy1kZXYiDQorbWFrZWRlcGVuZHM9IiRkZXBlbmRzX2RldiBmbGV4Ig0KK2luc3RhbGw9IiIN CitzdWJwYWNrYWdlcz0iJHBrZ25hbWUtZG9jIg0KK3NvdXJjZT0iaHR0cDovL21hcm1hcm8uZGUv cHJvZy8ke3BrZ25hbWV9L2ZpbGVzLyR7cGtnbmFtZX0tJHtwa2d2ZXJ9LnRhci5neg0KKwltdXNs LWZpeGVzLnBhdGNoIg0KKw0KK19idWlsZGRpcj0iJHNyY2RpciIvJHBrZ25hbWUtJHBrZ3Zlcg0K K3ByZXBhcmUoKSB7DQorCWNkICIkX2J1aWxkZGlyIg0KKwlsb2NhbCBpPQ0KKwlmb3IgaSBpbiAk c291cmNlOyBkbw0KKwkJY2FzZSAkaSBpbg0KKwkJKi5wYXRjaCkgbXNnICRpOyBwYXRjaCAtcDEg LWkgIiRzcmNkaXIiLyRpIHx8IHJldHVybiAxIDs7DQorCQllc2FjDQorCWRvbmUNCit9DQorDQor YnVpbGQoKSB7DQorCWNkICIkX2J1aWxkZGlyIg0KKwkuL2NvbmZpZ3VyZSAtLXByZWZpeD0vdXNy DQorCW1ha2UgfHwgcmV0dXJuIDENCit9DQorDQorcGFja2FnZSgpIHsNCisJbWFrZSBERVNURElS PSIke3BrZ2Rpcn0iIFwNCisJCS1DICIkX2J1aWxkZGlyIiBpbnN0YWxsIHx8IHJldHVybiAxDQor fQ0KKw0KK21kNXN1bXM9ImRmOWMzYWE0MGRjNGVkYjE1ZmQ3ZDZhMzljNDc3N2NkICBtbWgtMC4x LnRhci5neg0KK2I3YTQ0ZWVhNWJkZWU5NzA3OGI3ZTE5YTVkMjAzMWVlICBtdXNsLWZpeGVzLnBh dGNoIg0KK3NoYTI1NnN1bXM9IjY4YzQyODViNzJkMjZmOTIyMzkwYjU5NDk4MDUzNTgyOTAyNWE5 NzNjOTEwYzg0OTBiNDE1NTQzZjRjNzc0YjEgIG1taC0wLjEudGFyLmd6DQorMmQyMzJlMzA4YTdk Yjg2YWE3ZTY4OTNlYTQzMDUyNzY5YzA2ODRhZTU4MzM2ODI5YjVjNzA3MzllNWM4MDFiOCAgbXVz bC1maXhlcy5wYXRjaCINCitzaGE1MTJzdW1zPSIyYjI0Nzk1ODYyYWNlMWYwOTNmMTg2MWJiOTAw MTIxNjBiNmU2YzI1M2M3NDNjYTRkZTFlY2NlNDZiZmQwMzcwN2I5NTc5YTIxMTMxMzllOTZhODYz OGZlNDUxZjc2OTNiYTI4NjA1YjEyM2E3NmI4MGE5NTVhY2M5ZjNmNzA4MCAgbW1oLTAuMS50YXIu Z3oNCitlNTg4YmRhNTRlY2QxYjYxZjg3ODk1NTA3MDdhNjNmOTRlZmEwZTE3MmYzYTAxMjM4NTA0 NDE0NjAwNWQ4NDEwNjQzZWEwOWQwNGQxNGNlMWMxYjE0NTQ4OTA1ZDhjZjJkYjQyNzE0ZDVlN2Ix NTdiMjc3NGNhMjA3ZjA2YTk3OCAgbXVzbC1maXhlcy5wYXRjaCINCmRpZmYgLS1naXQgYS90ZXN0 aW5nL21taC9tdXNsLWZpeGVzLnBhdGNoIGIvdGVzdGluZy9tbWgvbXVzbC1maXhlcy5wYXRjaA0K bmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAuLjRmYzI3MjYNCi0tLSAvZGV2L251 bGwNCisrKyBiL3Rlc3RpbmcvbW1oL211c2wtZml4ZXMucGF0Y2gNCkBAIC0wLDAgKzEsNTM3IEBA DQorLS0tIG1taC0wLjEub3JpZy9zYnIvZGlzY2FyZC5jDQorKysrIG1taC0wLjEvc2JyL2Rpc2Nh cmQuYw0KK0BAIC0xOCwxNCArMTgsNiBAQA0KKyANCisgCXRjZmx1c2goZmlsZW5vKGlvKSwgVENP RkxVU0gpOw0KKyANCistI2lmIGRlZmluZWQoX0ZTVERJTykgfHwgZGVmaW5lZChfX0RyYWdvbkZs eV9fKQ0KKy0JZnB1cmdlKGlvKTsNCistI2Vsc2UNCistIyBpZmRlZiBMSU5VWF9TVERJTw0KKy0J aW8tPl9JT193cml0ZV9wdHIgPSBpby0+X0lPX3dyaXRlX2Jhc2U7DQorLSMgZWxzZQ0KKy0JaWYg KChpby0+X3B0ciA9IGlvLT5fYmFzZSkpDQorLQkJaW8tPl9jbnQgPSAwOw0KKy0jIGVuZGlmDQor LSNlbmRpZg0KKysJLyogVGhlcmUgdXNlZCB0byBiZSBhbiBmcHVyZ2UoKSBoZXJlIG9uIHNvbWUg cGxhdGZvcm1zLCBzdGRpbw0KKysJaGFja2VyeSBvbiBvdGhlcnMuICBCdXQgaXQgZGlkbid0IHNl ZW0gbmVjZXNzYXJ5LiAqLw0KKyB9DQorLS0tIG1taC0wLjEub3JpZy9zYnIvbV9nZXRmbGQuYw0K KysrKyBtbWgtMC4xL3Nici9tX2dldGZsZC5jDQorQEAgLTEzNyw3ICsxMzcsNyBAQA0KKyAqKiBp cyB1c2VkIGluIG1fRW9tIGJlY2F1c2UgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgc3RyaW5n DQorICoqIGhhcyBiZWVuIHJlYWQgYW5kIG1hdGNoZWQgYmVmb3JlIG1fRW9tIGlzIGNhbGxlZC4N CisgKi8NCistY2hhciAqbXNnX2RlbGltID0gIiI7DQorK3N0YXRpYyBjaGFyICptc2dfZGVsaW0g PSAiIjsNCisgDQorIHN0YXRpYyB1bnNpZ25lZCBjaGFyICpmZGVsaW07DQorIHN0YXRpYyB1bnNp Z25lZCBjaGFyICpkZWxpbWVuZDsNCitAQCAtMTQ3LDI2ICsxNDcsODUgQEANCisgDQorIHN0YXRp YyBpbnQgKCplb21fYWN0aW9uKShpbnQpID0gTlVMTDsNCisgDQorLSNpZmRlZiBfRlNURElPDQor LSMgZGVmaW5lIF9wdHIgX3AgIC8qIEdhZyAgICovDQorLSMgZGVmaW5lIF9jbnQgX3IgIC8qIFJl dGNoICovDQorLSMgZGVmaW5lIF9maWxidWYgX19zcmdldCAgLyogUHVrZSAgKi8NCistIyBkZWZp bmUgREVGSU5FRF9fRklMQlVGX1RPX1NPTUVUSElOR19TUEVDSUZJQw0KKy0jZW5kaWYNCisrLyoN CisrKiogVGhpcyByZXBsYWNlcyB0aGUgb2xkIGFwcHJvYWNoLCB3aGljaCBpbmNsdWRlZCBkaXJl Y3QgYWNjZXNzIHRvDQorKyoqIHN0ZGlvIGludGVybmFscy4gIEl0IHVzZXMgb25lIGZyZWFkKCkg dG8gbG9hZCBhIGJ1ZmZlciB0aGF0IHdlDQorKyoqIG1hbmFnZS4NCisrKi8NCisrI2RlZmluZSBN U0dfSU5QVVRfU0laRSA4MTkyDQorK3N0YXRpYyBzdHJ1Y3QgbV9nZXRmbGRfYnVmZmVyIHsNCisr CXVuc2lnbmVkIGNoYXIgbXNnX2J1ZlsyICogTVNHX0lOUFVUX1NJWkVdOw0KKysJdW5zaWduZWQg Y2hhciAqcmVhZHBvczsNCisrCXVuc2lnbmVkIGNoYXIgKmVuZDsgIC8qIE9uZSBwYXN0IHRoZSBs YXN0IGNoYXJhY3RlciByZWFkIGluLiAqLw0KKyt9IG07DQorIA0KKy0jaWZuZGVmIERFRklORURf X0ZJTEJVRl9UT19TT01FVEhJTkdfU1BFQ0lGSUMNCistZXh0ZXJuIGludCAgX2ZpbGJ1ZihGSUxF Kik7DQorLSNlbmRpZg0KKytzdGF0aWMgdm9pZA0KKytzZXR1cF9idWZmZXIoRklMRSAqaW9iLCBz dHJ1Y3QgbV9nZXRmbGRfYnVmZmVyICptKQ0KKyt7DQorKwkvKg0KKysJKiogUmVseSBvbiBSZXN0 cmljdGlvbnMgdGhhdCBtX2dldGZsZCgpIGNhbGxzIG9uIGRpZmZlcmVudCBmaWxlDQorKwkqKiBz dHJlYW1zIGFyZSBub3QgaW50ZXJsZWF2ZWQsIGFuZCBubyBvdGhlciBmaWxlIHN0cmVhbSByZWFk DQorKwkqKiBtZXRob2RzIGFyZSB1c2VkLiAgQW5kLCB0aGUgZmlyc3QgY2FsbCB0byBtX2dldGZs ZCAoKSwgZXRjLiwgb24NCisrCSoqIGEgc3RyZWFtIGFsd2F5cyByZWFkcyBhdCBsZWFzdCAxIGJ5 dGUuDQorKwkqKiBJIGRvbid0IHRoaW5rIGl0J3MgbmVjZXNzYXJ5IHRvIHVzZSBmdGVsbG8oKSBi ZWNhdXNlIHdlIGp1c3QNCisrCSoqIG5lZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGN1cnJl bnQgb2Zmc2V0IGlzIDAgb3Igbm90Lg0KKysJKi8NCisrCWlmIChmdGVsbChpb2IpID09IDApIHsN CisrCQkvKiBBIG5ldyBmaWxlIHN0cmVhbSwgc28gcmVzZXQgdGhlIGJ1ZmZlciBzdGF0ZS4gKi8N CisrCQltLT5yZWFkcG9zID0gbS0+ZW5kID0gbS0+bXNnX2J1ZjsNCisrCX0NCisrfQ0KKyANCisr c3RhdGljIHNpemVfdA0KKytyZWFkX21vcmUoc3RydWN0IG1fZ2V0ZmxkX2J1ZmZlciAqbSwgRklM RSAqaW9iKQ0KKyt7DQorKwlzaXplX3QgbnVtX3JlYWQ7DQorIA0KKysJLyogTW92ZSBhbnkgbGVm dG92ZXIgYXQgdGhlIGVuZCBvZiBidWYgdG8gdGhlIGJlZ2lubmluZy4gKi8NCisrCWlmIChtLT5l bmQgPiBtLT5yZWFkcG9zKSB7DQorKwkJbWVtbW92ZShtLT5tc2dfYnVmLCBtLT5yZWFkcG9zLCBt LT5lbmQgLSBtLT5yZWFkcG9zKTsNCisrCX0NCisrCW0tPnJlYWRwb3MgPSBtLT5tc2dfYnVmICsg KG0tPmVuZCAtIG0tPnJlYWRwb3MpOw0KKysJbnVtX3JlYWQgPSBmcmVhZChtLT5yZWFkcG9zLCAx LCBNU0dfSU5QVVRfU0laRSwgaW9iKTsNCisrCW0tPmVuZCA9IG0tPnJlYWRwb3MgKyBudW1fcmVh ZDsNCisrDQorKwlyZXR1cm4gbnVtX3JlYWQ7DQorK30NCisrDQorK3N0YXRpYyBpbnQNCisrR2V0 YyhGSUxFICppb2IpDQorK3sNCisrCWlmIChtLmVuZCAtIG0ucmVhZHBvcyA8IDEpIHsNCisrCQlp ZiAocmVhZF9tb3JlKCZtLCBpb2IpID09IDApIHsNCisrCQkJLyoNCisrCQkJKiogIFByZXRlbmQg dGhhdCB3ZSByZWFkIGEgY2hhcmFjdGVyLg0KKysJCQkqKiBUaGF0J3Mgd2hhdCBzdGRpbyBkb2Vz Lg0KKysJCQkqLw0KKysJCQkrK20ucmVhZHBvczsNCisrCQkJcmV0dXJuIEVPRjsNCisrCQl9DQor Kwl9DQorKwlyZXR1cm4gKG0ucmVhZHBvcyA8IG0uZW5kKSA/ICptLnJlYWRwb3MrKyA6IEVPRjsN CisrfQ0KKysNCisrc3RhdGljIGludA0KKytVbmdldGMoaW50IGMsIEZJTEUgKmlvYikNCisrew0K KysJcmV0dXJuIChtLnJlYWRwb3MgPT0gbS5tc2dfYnVmKSA/IEVPRiA6ICgqLS1tLnJlYWRwb3Mg PSBjKTsNCisrfQ0KKysNCisrDQorKw0KKyBpbnQNCisgbV9nZXRmbGQoaW50IHN0YXRlLCB1bnNp Z25lZCBjaGFyICpuYW1lLCB1bnNpZ25lZCBjaGFyICpidWYsDQorIAlpbnQgYnVmc3osIEZJTEUg KmlvYikNCisgew0KKy0JcmVnaXN0ZXIgdW5zaWduZWQgY2hhciAgKmJwLCAqY3AsICplcCwgKnNw Ow0KKy0JcmVnaXN0ZXIgaW50IGNudCwgYywgaSwgajsNCisrCXVuc2lnbmVkIGNoYXIgICpicCwg KmNwLCAqZXAsICpzcDsNCisrCWludCBjbnQsIGMsIGksIGosIGs7DQorIA0KKy0JaWYgKChjID0g Z2V0Yyhpb2IpKSA8IDApIHsNCisrCXNldHVwX2J1ZmZlcihpb2IsICZtKTsNCisrDQorKwlpZiAo KGMgPSBHZXRjKGlvYikpIDwgMCkgew0KKyAJCW1zZ19jb3VudCA9IDA7DQorIAkJKmJ1ZiA9IDA7 DQorIAkJcmV0dXJuIEZJTEVFT0Y7DQorQEAgLTE3NCwxMCArMjMzLDEwIEBADQorIAlpZiAoZW9t KGMsIGlvYikpIHsNCisgCQlpZiAoISBlb21fYWN0aW9uKSB7DQorIAkJCS8qIGZsdXNoIG51bGwg bWVzc2FnZXMgKi8NCistCQkJd2hpbGUgKChjID0gZ2V0Yyhpb2IpKSA+PSAwICYmIGVvbShjLCBp b2IpKQ0KKysJCQl3aGlsZSAoKGMgPSBHZXRjKGlvYikpID49IDAgJiYgZW9tKGMsIGlvYikpDQor IAkJCQk7DQorIAkJCWlmIChjID49IDApDQorLQkJCQl1bmdldGMoYywgaW9iKTsNCisrCQkJCVVu Z2V0YyhjLCBpb2IpOw0KKyAJCX0NCisgCQltc2dfY291bnQgPSAwOw0KKyAJCSpidWYgPSAwOw0K K0BAIC0xOTAsMTYgKzI0OSwxNiBAQA0KKyAJY2FzZSBGTEQ6DQorIAkJaWYgKGMgPT0gJ1xuJyB8 fCBjID09ICctJykgew0KKyAJCQkvKiB3ZSBoaXQgdGhlIGhlYWRlci9ib2R5IHNlcGFyYXRvciAq Lw0KKy0JCQl3aGlsZSAoYyAhPSAnXG4nICYmIChjID0gZ2V0Yyhpb2IpKSA+PSAwKQ0KKysJCQl3 aGlsZSAoYyAhPSAnXG4nICYmIChjID0gR2V0Yyhpb2IpKSA+PSAwKQ0KKyAJCQkJOw0KKyANCist CQkJaWYgKGMgPCAwIHx8IChjID0gZ2V0Yyhpb2IpKSA8IDAgfHwgZW9tKGMsIGlvYikpIHsNCisr CQkJaWYgKGMgPCAwIHx8IChjID0gR2V0Yyhpb2IpKSA8IDAgfHwgZW9tKGMsIGlvYikpIHsNCisg CQkJCWlmICghZW9tX2FjdGlvbikgew0KKyAJCQkJCS8qIGZsdXNoIG51bGwgbWVzc2FnZXMgKi8N CistCQkJCQl3aGlsZSAoKGMgPSBnZXRjKGlvYikpID49IDAgJiYgZW9tKGMsIGlvYikpDQorKwkJ CQkJd2hpbGUgKChjID0gR2V0Yyhpb2IpKSA+PSAwICYmIGVvbShjLCBpb2IpKQ0KKyAJCQkJCQk7 DQorIAkJCQkJaWYgKGMgPj0gMCkNCistCQkJCQkJdW5nZXRjKGMsIGlvYik7DQorKwkJCQkJCVVu Z2V0YyhjLCBpb2IpOw0KKyAJCQkJfQ0KKyAJCQkJbXNnX2NvdW50ID0gMDsNCisgCQkJCSpidWYg PSAwOw0KK0BAIC0yMTYsNDcgKzI3NSwyOCBAQA0KKyAJCWNwID0gbmFtZTsNCisgCQlpID0gTkFN RVNaIC0gMTsNCisgCQlmb3IgKDs7KSB7DQorLSNpZmRlZiBMSU5VWF9TVERJTw0KKy0JCQlicCA9 IHNwID0gKHVuc2lnbmVkIGNoYXIgKikgaW9iLT5fSU9fcmVhZF9wdHIgLSAxOw0KKy0JCQlqID0g KGNudCA9ICgobG9uZykgaW9iLT5fSU9fcmVhZF9lbmQgLQ0KKy0JCQkJKGxvbmcpIGlvYi0+X0lP X3JlYWRfcHRyKSAgKyAxKSA8IGkgPyBjbnQgOiBpOw0KKy0jZWxpZiBkZWZpbmVkKF9fRHJhZ29u Rmx5X18pDQorLQkJCWJwID0gc3AgPSAodW5zaWduZWQgY2hhciAqKSAoKHN0cnVjdCBfX0ZJTEVf cHVibGljICopaW9iKS0+X3AgLSAxOw0KKy0JCQlqID0gKGNudCA9ICgoc3RydWN0IF9fRklMRV9w dWJsaWMgKilpb2IpLT5fcisxKSA8IGkgPyBjbnQgOiBpOw0KKy0jZWxzZQ0KKy0JCQlicCA9IHNw ID0gKHVuc2lnbmVkIGNoYXIgKikgaW9iLT5fcHRyIC0gMTsNCistCQkJaiA9IChjbnQgPSBpb2It Pl9jbnQrMSkgPCBpID8gY250IDogaTsNCistI2VuZGlmDQorKwkJCS8qIFN0b3JlIGN1cnJlbnQg cG9zLCB1bmdldHRpbmcgdGhlIGxhc3QgY2hhci4gKi8NCisrCQkJYnAgPSBzcCA9ICh1bnNpZ25l ZCBjaGFyICopIG0ucmVhZHBvcyAtIDE7DQorKwkJCWogPSAoKGNudCA9IG0uZW5kIC0gbS5yZWFk cG9zICsgMSkgPCBpKSA/IGNudCA6IGk7DQorKw0KKyAJCQl3aGlsZSAoLS1qID49IDAgJiYgKGMg PSAqYnArKykgIT0gJzonICYmIGMgIT0gJ1xuJykNCisgCQkJCSpjcCsrID0gYzsNCisgDQorIAkJ CWogPSBicCAtIHNwOw0KKyAJCQlpZiAoKGNudCAtPSBqKSA8PSAwKSB7DQorLSNpZmRlZiBMSU5V WF9TVERJTw0KKy0JCQkJaW9iLT5fSU9fcmVhZF9wdHIgPSBpb2ItPl9JT19yZWFkX2VuZDsNCist CQkJCWlmIChfX3VuZGVyZmxvdyhpb2IpID09IEVPRikgew0KKy0jZWxpZiBkZWZpbmVkKF9fRHJh Z29uRmx5X18pDQorLQkJCQlpZiAoX19zcmdldChpb2IpID09IEVPRikgew0KKy0jZWxzZQ0KKy0J CQkJaWYgKF9maWxidWYoaW9iKSA9PSBFT0YpIHsNCistI2VuZGlmDQorKwkJCQkvKg0KKysJCQkJ KiogVXNlZCB0byBleHBsaWNpdGx5IGZvcmNlIHJlZmlsbCBvZiB0aGUNCisrCQkJCSoqIGJ1ZmZl ciBoZXJlLCBidXQgR2V0YygpIHdpbGwgZG8gdGhhdA0KKysJCQkJKiogaWYgbmVjZXNzYXJ5Lg0K KysJCQkJKi8NCisrCQkJCWlmIChHZXRjIChpb2IpID09IEVPRikgew0KKyAJCQkJCSpjcCA9ICpi dWYgPSAwOw0KKyAJCQkJCWFkdmlzZShOVUxMLCAiZW9mIGVuY291bnRlcmVkIGluIGZpZWxkIFwi JXNcIiIsIG5hbWUpOw0KKyAJCQkJCXJldHVybiBGTVRFUlI7DQorIAkJCQl9DQorLSNpZmRlZiBM SU5VWF9TVERJTw0KKy0JCQkJaW9iLT5fSU9fcmVhZF9wdHIrKzsgLyogTk9UIGF1dG9tYXRpYyBp biBfX3VuZGVyZmxvdygpISAqLw0KKy0jZW5kaWYNCisgCQkJfSBlbHNlIHsNCistI2lmZGVmIExJ TlVYX1NURElPDQorLQkJCQlpb2ItPl9JT19yZWFkX3B0ciA9IGJwICsgMTsNCistI2VsaWYgZGVm aW5lZChfX0RyYWdvbkZseV9fKQ0KKy0JCQkJKChzdHJ1Y3QgX19GSUxFX3B1YmxpYyAqKWlvYikt Pl9wID0gYnAgKyAxOw0KKy0JCQkJKChzdHJ1Y3QgX19GSUxFX3B1YmxpYyAqKWlvYiktPl9yID0g Y250IC0gMTsNCistI2Vsc2UNCistCQkJCWlvYi0+X3B0ciA9IGJwICsgMTsNCistCQkJCWlvYi0+ X2NudCA9IGNudCAtIDE7DQorLSNlbmRpZg0KKysJCQkJLyogUmVzdG9yZSB0aGUgY3VycmVudCBv ZmZzZXQuICovDQorKwkJCQltLnJlYWRwb3MgPSBicCArIDE7DQorIAkJCX0NCisgCQkJaWYgKGMg PT0gJzonKQ0KKyAJCQkJYnJlYWs7DQorQEAgLTMxMCw3ICszNTAsMTMgQEANCisgCQkJCSoqIHRo YXQgc2hvdWxkIGJlIGhhcm1sZXNzIGVub3VnaCwgcmlnaHQ/DQorIAkJCQkqKiBUaGlzIGlzIGEg Y29ycnVwdCBtZXNzYWdlIGFueXdheS4NCisgCQkJCSovDQorLQkJCQlmc2Vlayhpb2IsIGZ0ZWxs KGlvYikgLSAyLCBTRUVLX1NFVCk7DQorKwkJCQkvKiBlbXVsYXRlczogIGZzZWVrKGlvYiwgZnRl bGwoaW9iKSAtKC0yICsgY250ICsgMSksIFNFRUtfU0VUKSAqLw0KKysJCQkJbS5yZWFkcG9zICs9 IGNudCAtIDE7DQorKwkJCQkvKg0KKysJCQkJKiogUmVzZXQgZmlsZSBzdHJlYW0gcG9zaXRpb24g c28gY2FsbGVyLA0KKysJCQkJKiogZS5nLiwgZ2V0X2NvbnRlbnQsIGNhbiB1c2UgZnRlbGwoKSwg ZXRjLg0KKysJCQkJKi8NCisrCQkJCWZzZWVrKGlvYiwgLWNudCAtIDEsIFNFRUtfQ1VSKTsNCisg CQkJCXJldHVybiBCT0RZOw0KKyAJCQl9DQorIAkJCWlmICgoaSAtPSBqKSA8PSAwKSB7DQorQEAg LTMzNCwxNiArMzgwLDkgQEANCisgCQkqLw0KKyAJCWNwID0gYnVmOyBpID0gYnVmc3otMTsNCisg CQlmb3IgKDs7KSB7DQorLSNpZmRlZiBMSU5VWF9TVERJTw0KKy0JCQljbnQgPSAobG9uZykgaW9i LT5fSU9fcmVhZF9lbmQgLSAobG9uZykgaW9iLT5fSU9fcmVhZF9wdHI7DQorLQkJCWJwID0gKHVu c2lnbmVkIGNoYXIgKikgLS1pb2ItPl9JT19yZWFkX3B0cjsNCistI2VsaWYgZGVmaW5lZChfX0Ry YWdvbkZseV9fKQ0KKy0JCQljbnQgPSAoKHN0cnVjdCBfX0ZJTEVfcHVibGljICopaW9iKS0+X3Ir KzsNCistCQkJYnAgPSAodW5zaWduZWQgY2hhciAqKSAtLSgoc3RydWN0IF9fRklMRV9wdWJsaWMg Kilpb2IpLT5fcDsNCistI2Vsc2UNCistCQkJY250ID0gaW9iLT5fY250Kys7DQorLQkJCWJwID0g KHVuc2lnbmVkIGNoYXIgKikgLS1pb2ItPl9wdHI7DQorLSNlbmRpZg0KKysJCQkvKiBTZXQgYW5k IHNhdmUgdGhlIGN1cnJlbnQgcG9zIGFuZCB1cGRhdGUgY250LiAqLw0KKysJCQljbnQgPSBtLmVu ZCAtIG0ucmVhZHBvczsNCisrCQkJYnAgPSAtLW0ucmVhZHBvczsNCisgCQkJYyA9IGNudCA8IGkg PyBjbnQgOiBpOw0KKyAJCQl3aGlsZSAoKGVwID0gbG9jYyggYywgYnAsICdcbicgKSkpIHsNCisg CQkJCS8qDQorQEAgLTM1MSwyMSArMzkwLDEzIEBADQorIAkJCQkqKiByZXR1cm4uDQorIAkJCQkq Lw0KKyAJCQkJaWYgKChqID0gKisrZXApICE9ICcgJyAmJiBqICE9ICdcdCcpIHsNCistI2lmZGVm IExJTlVYX1NURElPDQorLQkJCQkJaiA9IGVwIC0gKHVuc2lnbmVkIGNoYXIgKikgaW9iLT5fSU9f cmVhZF9wdHI7DQorLQkJCQkJbWVtY3B5KGNwLCBpb2ItPl9JT19yZWFkX3B0ciwgaik7DQorLQkJ CQkJaW9iLT5fSU9fcmVhZF9wdHIgPSBlcDsNCistI2VsaWYgZGVmaW5lZChfX0RyYWdvbkZseV9f KQ0KKy0JCQkJCWogPSBlcCAtICh1bnNpZ25lZCBjaGFyICopICgoc3RydWN0IF9fRklMRV9wdWJs aWMgKilpb2IpLT5fcDsNCistCQkJCQltZW1jcHkoY3AsICgoc3RydWN0IF9fRklMRV9wdWJsaWMg Kilpb2IpLT5fcCwgaik7DQorLQkJCQkJKChzdHJ1Y3QgX19GSUxFX3B1YmxpYyAqKWlvYiktPl9w ID0gZXA7DQorLQkJCQkJKChzdHJ1Y3QgX19GSUxFX3B1YmxpYyAqKWlvYiktPl9yIC09IGo7DQor LSNlbHNlDQorLQkJCQkJaiA9IGVwIC0gKHVuc2lnbmVkIGNoYXIgKikgaW9iLT5fcHRyOw0KKy0J CQkJCW1lbWNweShjcCwgaW9iLT5fcHRyLCBqKTsNCistCQkJCQlpb2ItPl9wdHIgPSBlcDsNCist CQkJCQlpb2ItPl9jbnQgLT0gajsNCistI2VuZGlmDQorKwkJCQkJLyoNCisrCQkJCQkqKiBTYXZl IHRoZSB0ZXh0IGFuZCB1cGRhdGUgdGhlDQorKwkJCQkJKiogY3VycmVudCBwb3NpdGlvbi4NCisr CQkJCQkqLw0KKysJCQkJCWogPSBlcCAtIG0ucmVhZHBvczsNCisrCQkJCQltZW1jcHkgKGNwLCBt LnJlYWRwb3MsIGopOw0KKysJCQkJCW0ucmVhZHBvcyA9IGVwOw0KKyAJCQkJCWNwICs9IGo7DQor IAkJCQkJc3RhdGUgPSBGTEQ7DQorIAkJCQkJZ290byBmaW5pc2g7DQorQEAgLTM3Nyw2NCArNDA4 LDM0IEBADQorIAkJCSoqIGVuZCBvZiBpbnB1dCBvciBkZXN0IGJ1ZmZlciAtIGNvcHkgd2hhdA0K KyAJCQkqKiB3ZSd2ZSBmb3VuZC4NCisgCQkJKi8NCistI2lmZGVmIExJTlVYX1NURElPDQorLQkJ CWMgKz0gYnAgLSAodW5zaWduZWQgY2hhciAqKSBpb2ItPl9JT19yZWFkX3B0cjsNCistCQkJbWVt Y3B5KGNwLCBpb2ItPl9JT19yZWFkX3B0ciwgYyk7DQorLSNlbGlmIGRlZmluZWQoX19EcmFnb25G bHlfXykNCistCQkJYyArPSBicCAtICh1bnNpZ25lZCBjaGFyICopICgoc3RydWN0IF9fRklMRV9w dWJsaWMgKilpb2IpLT5fcDsNCistCQkJbWVtY3B5KGNwLCAoKHN0cnVjdCBfX0ZJTEVfcHVibGlj ICopaW9iKS0+X3AsIGMpOw0KKy0jZWxzZQ0KKy0JCQljICs9IGJwIC0gKHVuc2lnbmVkIGNoYXIg KikgaW9iLT5fcHRyOw0KKy0JCQltZW1jcHkoY3AsIGlvYi0+X3B0ciwgYyk7DQorLSNlbmRpZg0K Ky0JCQlpIC09IGM7DQorLQkJCWNwICs9IGM7DQorKwkJCWMgKz0gYnAgLSBtLnJlYWRwb3M7DQor KwkJCWZvciAoayA9IDA7IGsgPCBjOyArK2ssIC0taSkgew0KKysJCQkJKmNwKysgPSBHZXRjIChp b2IpOw0KKysJCQl9DQorIAkJCWlmIChpIDw9IDApIHsNCisgCQkJCS8qIHRoZSBkZXN0IGJ1ZmZl ciBpcyBmdWxsICovDQorLSNpZmRlZiBMSU5VWF9TVERJTw0KKy0JCQkJaW9iLT5fSU9fcmVhZF9w dHIgKz0gYzsNCistI2VsaWYgZGVmaW5lZChfX0RyYWdvbkZseV9fKQ0KKy0JCQkJKChzdHJ1Y3Qg X19GSUxFX3B1YmxpYyAqKWlvYiktPl9yIC09IGM7DQorLQkJCQkoKHN0cnVjdCBfX0ZJTEVfcHVi bGljICopaW9iKS0+X3AgKz0gYzsNCistI2Vsc2UNCistCQkJCWlvYi0+X2NudCAtPSBjOw0KKy0J CQkJaW9iLT5fcHRyICs9IGM7DQorLSNlbmRpZg0KKyAJCQkJc3RhdGUgPSBGTERQTFVTOw0KKyAJ CQkJYnJlYWs7DQorIAkJCX0NCisgCQkJLyoNCisgCQkJKiogVGhlcmUncyBvbmUgY2hhcmFjdGVy IGxlZnQgaW4gdGhlIGlucHV0DQorLQkJCSoqIGJ1ZmZlci4gIENvcHkgaXQgJiBmaWxsIHRoZSBi dWZmZXIuDQorLQkJCSoqIElmIHRoZSBsYXN0IGNoYXIgd2FzIGEgbmV3bGluZSBhbmQgdGhlDQor LQkJCSoqIG5leHQgY2hhciBpcyBub3Qgd2hpdGVzcGFjZSwgdGhpcyBpcw0KKy0JCQkqKiB0aGUg ZW5kIG9mIHRoZSBmaWVsZC4gIE90aGVyd2lzZSBsb29wLg0KKysJCQkqKiBidWZmZXIuICBDb3B5 IGl0ICYgZmlsbCB0aGUgYnVmZmVyICh0aGF0DQorKwkJCSoqIGZpbGwgdXNlZCB0byBiZSBleHBs aWNpdCwgYnV0IG5vdyBHZXRjKCkNCisrCQkJKiogZG9lcyBpdCkuIElmIHRoZSBsYXN0IGNoYXIg d2FzIGEgbmV3bGluZQ0KKysJCQkqKiBhbmQgdGhlIG5leHQgY2hhciBpcyBub3Qgd2hpdGVzcGFj ZSwgdGhpcw0KKysJCQkqKiBpcyB0aGUgZW5kIG9mIHRoZSBmaWVsZC4gIE90aGVyd2lzZSBsb29w Lg0KKyAJCQkqLw0KKyAJCQktLWk7DQorLSNpZmRlZiBMSU5VWF9TVERJTw0KKy0JCQkqY3ArKyA9 IGogPSAqKGlvYi0+X0lPX3JlYWRfcHRyICsgYyk7DQorLQkJCWlvYi0+X0lPX3JlYWRfcHRyID0g aW9iLT5fSU9fcmVhZF9lbmQ7DQorLQkJCWMgPSBfX3VuZGVyZmxvdyhpb2IpOw0KKy0JCQlpb2It Pl9JT19yZWFkX3B0cisrOyAgLyogTk9UIGF1dG9tYXRpYyEgKi8NCistI2VsaWYgZGVmaW5lZChf X0RyYWdvbkZseV9fKQ0KKy0JCQkqY3ArKyA9aiA9ICooKChzdHJ1Y3QgX19GSUxFX3B1YmxpYyAq KWlvYiktPl9wICsgYyk7DQorLQkJCWMgPSBfX3NyZ2V0KGlvYik7DQorLSNlbHNlDQorLQkJCSpj cCsrID0gaiA9ICooaW9iLT5fcHRyICsgYyk7DQorLQkJCWMgPSBfZmlsYnVmKGlvYik7DQorLSNl bmRpZg0KKysJCQkqY3ArKyA9IGogPSBHZXRjKGlvYik7DQorKwkJCWMgPSBHZXRjKGlvYik7DQor IAkJCWlmIChjID09IEVPRiB8fA0KKyAJCQkgICgoaiA9PSAnXDAnIHx8IGogPT0gJ1xuJykgJiYg YyAhPSAnICcgJiYgYyAhPSAnXHQnKSkgew0KKyAJCQkJaWYgKGMgIT0gRU9GKSB7DQorLSNpZmRl ZiBMSU5VWF9TVERJTw0KKy0JCQkJCS0taW9iLT5fSU9fcmVhZF9wdHI7DQorLSNlbGlmIGRlZmlu ZWQoX19EcmFnb25GbHlfXykNCistCQkJCQktLSgoc3RydWN0IF9fRklMRV9wdWJsaWMgKilpb2Ip LT5fcDsNCistCQkJCQkrKygoc3RydWN0IF9fRklMRV9wdWJsaWMgKilpb2IpLT5fcjsNCistI2Vs c2UNCistCQkJCQktLWlvYi0+X3B0cjsNCistCQkJCQkrK2lvYi0+X2NudDsNCistI2VuZGlmDQor KwkJCQkJLyoNCisrCQkJCQkqKiBQdXQgdGhlIGNoYXJhY3RlciBiYWNrIGZvcg0KKysJCQkJCSoq IHRoZSBuZXh0IGNhbGwuDQorKwkJCQkJKi8NCisrCQkJCQktLW0ucmVhZHBvczsNCisgCQkJCX0N CisgCQkJCXN0YXRlID0gRkxEOw0KKyAJCQkJYnJlYWs7DQorQEAgLTQ1MiwxNyArNDUzLDEwIEBA DQorIAkJKiogZG9uJ3QgYWRkIGFuIGVvcy4NCisgCQkqLw0KKyAJCWkgPSAoYnVmc3ogPCAwKSA/ IC1idWZzeiA6IGJ1ZnN6LTE7DQorLSNpZmRlZiBMSU5VWF9TVERJTw0KKy0JCWJwID0gKHVuc2ln bmVkIGNoYXIgKikgLS1pb2ItPl9JT19yZWFkX3B0cjsNCistCQljbnQgPSAobG9uZykgaW9iLT5f SU9fcmVhZF9lbmQgLSAobG9uZykgaW9iLT5fSU9fcmVhZF9wdHI7DQorLSNlbGlmIGRlZmluZWQo X19EcmFnb25GbHlfXykNCistCQlicCA9ICh1bnNpZ25lZCBjaGFyICopIC0tKChzdHJ1Y3QgX19G SUxFX3B1YmxpYyAqKWlvYiktPl9wOw0KKy0JCWNudCA9ICsrKChzdHJ1Y3QgX19GSUxFX3B1Ymxp YyAqKWlvYiktPl9yOw0KKy0jZWxzZQ0KKy0JCWJwID0gKHVuc2lnbmVkIGNoYXIgKikgLS1pb2It Pl9wdHI7DQorLQkJY250ID0gKytpb2ItPl9jbnQ7DQorLSNlbmRpZg0KKy0JCWMgPSAoY250IDwg aSA/IGNudCA6IGkpOw0KKysJCS8qIEJhY2sgdXAgYW5kIHN0b3JlIHRoZSBjdXJyZW50IHBvc2l0 aW9uIGFuZCB1cGRhdGUgY250LiAqLw0KKysJCWJwID0gLS1tLnJlYWRwb3M7DQorKwkJY250ID0g bS5lbmQgLSBtLnJlYWRwb3M7DQorKwkJYyA9IChjbnQgPCBpKSA/IGNudCA6IGk7DQorIAkJaWYg KGlzbWJveCAmJiBjID4gMSkgew0KKyAJCQkvKg0KKyAJCQkqKiBwYWNrZWQgbWFpbGRyb3AgLSBv bmx5IHRha2UgdXAgdG8gdGhlIChwb3NzaWJsZSkNCitAQCAtNTQ1LDE1ICs1MzksOCBAQA0KKyAJ CQl9DQorIAkJfQ0KKyAJCW1lbWNweSggYnVmLCBicCwgYyApOw0KKy0jaWZkZWYgTElOVVhfU1RE SU8NCistCQlpb2ItPl9JT19yZWFkX3B0ciArPSBjOw0KKy0jZWxpZiBkZWZpbmVkKF9fRHJhZ29u Rmx5X18pDQorLQkJKChzdHJ1Y3QgX19GSUxFX3B1YmxpYyAqKWlvYiktPl9yIC09IGM7DQorLQkJ KChzdHJ1Y3QgX19GSUxFX3B1YmxpYyAqKWlvYiktPl9wICs9IGM7DQorLSNlbHNlDQorLQkJaW9i LT5fY250IC09IGM7DQorLQkJaW9iLT5fcHRyICs9IGM7DQorLSNlbmRpZg0KKysJCS8qIEFkdmFu Y2UgdGhlIGN1cnJlbnQgcG9zaXRpb24gdG8gcmVmbGVjdCB0aGUgY29weSBvdXQuICovDQorKwkJ bS5yZWFkcG9zICs9IGM7DQorIAkJaWYgKGJ1ZnN6IDwgMCkgew0KKyAJCQltc2dfY291bnQgPSBj Ow0KKyAJCQlyZXR1cm4gKHN0YXRlKTsNCitAQCAtNTc0LDE2ICs1NjEsMTggQEANCisgdm9pZA0K KyB0aGlzaXNhbm1ib3goRklMRSAqaW9iKQ0KKyB7DQorLQlyZWdpc3RlciBpbnQgYzsNCisrCWlu dCBjOw0KKyAJY2hhciB0ZXh0WzEwXTsNCistCXJlZ2lzdGVyIGNoYXIgKmNwOw0KKy0JcmVnaXN0 ZXIgY2hhciAqZGVsaW1zdHI7DQorKwljaGFyICpjcDsNCisrCWNoYXIgKmRlbGltc3RyOw0KKyAN CistCWMgPSBnZXRjKGlvYik7IA0KKysJc2V0dXBfYnVmZmVyKGlvYiwgJm0pOw0KKysNCisrCWMg PSBHZXRjKGlvYik7IA0KKyAJaWYgKGZlb2YoaW9iKSkgew0KKyAJCXJldHVybjsNCisgCX0NCist CXVuZ2V0YyhjLCBpb2IpOw0KKysJVW5nZXRjKGMsIGlvYik7DQorIA0KKyAJLyoNCisgCSoqIEZp Z3VyZSBvdXQgd2hhdCB0aGUgbWVzc2FnZSBkZWxpbWl0dGVyIHN0cmluZyBpcyBmb3IgdGhpcw0K K0BAIC01OTcsNyArNTg2LDEyIEBADQorIAkqKiBhYm9ydC4NCisgCSovDQorIA0KKy0JaWYgKGZy ZWFkKHRleHQsIHNpemVvZigqdGV4dCksIDUsIGlvYikgIT0gNSkgew0KKysJZm9yIChjPTAsIGNw PXRleHQ7IGM8NTsgKytjLCArK2NwKSB7DQorKwkJaWYgKCgqY3AgPSBHZXRjKGlvYikpID09IEVP Rikgew0KKysJCQlicmVhazsNCisrCQl9DQorKwl9DQorKwlpZiAoYyAhPSA1KSB7DQorIAkJYWRp b3MoTlVMTCwgIlJlYWQgZXJyb3IiKTsNCisgCX0NCisgCWlmIChzdHJuY21wKHRleHQsICJGcm9t ICIsIDUpIT0wKSB7DQorQEAgLTYwNSw3ICs1OTksNyBAQA0KKyAJfQ0KKyAJaXNtYm94ID0gVFJV RTsNCisgCWRlbGltc3RyID0gIlxuRnJvbSAiOw0KKy0Jd2hpbGUgKChjID0gZ2V0Yyhpb2IpKSAh PSAnXG4nICYmIGMgPj0gMCkgew0KKysJd2hpbGUgKChjID0gR2V0Yyhpb2IpKSAhPSAnXG4nICYm IGMgPj0gMCkgew0KKyAJCWNvbnRpbnVlOw0KKyAJfQ0KKyAJYyA9IHN0cmxlbihkZWxpbXN0cik7 DQorQEAgLTYyOCw4ICs2MjIsOSBAQA0KKyAJKi8NCisgCXBhdF9tYXAgPSAodW5zaWduZWQgY2hh ciAqKikgY2FsbG9jKDI1Niwgc2l6ZW9mKHVuc2lnbmVkIGNoYXIgKikpOw0KKyANCistCWZvciAo Y3AgPSAoY2hhciAqKSBmZGVsaW0gKyAxOyBjcCA8IChjaGFyICopIGRlbGltZW5kOyBjcCsrICkN CisrCWZvciAoY3AgPSAoY2hhciAqKSBmZGVsaW0gKyAxOyBjcCA8IChjaGFyICopIGRlbGltZW5k OyBjcCsrKSB7DQorIAkJcGF0X21hcFsodW5zaWduZWQgY2hhcikqY3BdID0gKHVuc2lnbmVkIGNo YXIgKikgY3A7DQorKwl9DQorIH0NCisgDQorIA0KK0BAIC02NDAsMjcgKzYzNSwzNCBAQA0KKyBz dGF0aWMgaW50DQorIG1fRW9tKGludCBjLCBGSUxFICppb2IpDQorIHsNCistCXJlZ2lzdGVyIGxv bmcgcG9zID0gMEw7DQorLQlyZWdpc3RlciBpbnQgaTsNCisrCXVuc2lnbmVkIGNoYXIgKnBvczsN CisrCWludCBpOw0KKyAJY2hhciB0ZXh0WzEwXTsNCisrCWNoYXIgKmNwOw0KKyANCistCXBvcyA9 IGZ0ZWxsKGlvYik7DQorLQlpZiAoKGkgPSBmcmVhZCh0ZXh0LCBzaXplb2YgKnRleHQsIGVkZWxp bWxlbiwgaW9iKSkgIT0gZWRlbGltbGVuIHx8DQorKwlwb3MgPSBtLnJlYWRwb3M7IC8qIGZ0ZWxs ICovDQorKwlmb3IgKGk9MCwgY3A9dGV4dDsgaTxlZGVsaW1sZW47ICsraSwgKytjcCkgew0KKysJ CWlmICgoKmNwID0gR2V0Yyhpb2IpKSA9PSBFT0YpIHsNCisrCQkJYnJlYWs7DQorKwkJfQ0KKysJ fQ0KKysNCisrCWlmIChpICE9IGVkZWxpbWxlbiB8fA0KKyAJCQkoc3RybmNtcCh0ZXh0LCAoY2hh ciAqKWVkZWxpbSwgZWRlbGltbGVuKSE9MCkpIHsNCistCQlpZiAoaSA9PSAwICYmIGlzbWJveCkN CisrCQlpZiAoaSA9PSAwICYmIGlzbWJveCkgew0KKyAJCQkvKg0KKyAJCQkqKiB0aGUgZmluYWwg bmV3bGluZSBpbiB0aGUgKGJyYWluIGRhbWFnZWQpIHVuaXgtZm9ybWF0DQorIAkJCSoqIG1haWxk cm9wIGlzIHBhcnQgb2YgdGhlIGRlbGltaXR0ZXIgLSBkZWxldGUgaXQuDQorIAkJCSovDQorIAkJ CXJldHVybiAxOw0KKy0NCistCQlmc2Vlayhpb2IsIChsb25nKShwb3MtMSksIFNFRUtfU0VUKTsN CistCQlnZXRjKGlvYik7ICAvKiBzaG91bGQgYmUgT0sgKi8NCisrCQl9DQorKwkJbS5yZWFkcG9z ID0gcG9zIC0gMTsgIC8qIGZzZWVrKGlvYiwgcG9zIC0gMSwgU0VFS19TRVQpICovDQorKwkJR2V0 Yyhpb2IpOyAgLyogc2hvdWxkIGJlIE9LICovDQorIAkJcmV0dXJuIDA7DQorIAl9DQorIA0KKyAJ aWYgKGlzbWJveCkgew0KKy0JCXdoaWxlICgoYyA9IGdldGMoaW9iKSkgIT0gJ1xuJyAmJiBjID49 IDApIHsNCisrCQl3aGlsZSAoKGMgPSBHZXRjKGlvYikpICE9ICdcbicgJiYgYyA+PSAwKSB7DQor IAkJCWNvbnRpbnVlOw0KKyAJCX0NCisgCX0NCitAQCAtNjcyLDExICs2NzQsMTEgQEANCisgc3Rh dGljIHVuc2lnbmVkIGNoYXIgKg0KKyBtYXRjaGMoaW50IHBhdGxuLCBjaGFyICpwYXQsIGludCBz dHJsbiwgY2hhciAqc3RyKQ0KKyB7DQorLQlyZWdpc3RlciBjaGFyICplcyA9IHN0ciArIHN0cmxu IC0gcGF0bG47DQorLQlyZWdpc3RlciBjaGFyICpzcDsNCistCXJlZ2lzdGVyIGNoYXIgKnBwOw0K Ky0JcmVnaXN0ZXIgY2hhciAqZXAgPSBwYXQgKyBwYXRsbjsNCistCXJlZ2lzdGVyIGNoYXIgcGMg PSAqcGF0Kys7DQorKwljaGFyICplcyA9IHN0ciArIHN0cmxuIC0gcGF0bG47DQorKwljaGFyICpz cDsNCisrCWNoYXIgKnBwOw0KKysJY2hhciAqZXAgPSBwYXQgKyBwYXRsbjsNCisrCWNoYXIgcGMg PSAqcGF0Kys7DQorIA0KKyAJZm9yKDs7KSB7DQorIAkJd2hpbGUgKHBjICE9ICpzdHIrKykNCist LS0gbW1oLTAuMS5vcmlnL3VpcC9NYWtlZmlsZS5pbg0KKysrKyBtbWgtMC4xL3VpcC9NYWtlZmls ZS5pbg0KK0BAIC0zMiw3ICszMiw3IEBADQorIA0KKyBDT01QSUxFID0gJChDQykgLWMgJChERUZT KSAkKElOQ0xVREVTKSAkKENGTEFHUykNCisgTElOSyAgICA9ICQoQ0MpICQoTERGTEFHUykgLW8g JEANCistTE4gPSBsbg0KKytMTiA9IGxuIC1zDQorIA0KKyBJTlNUQUxMICAgICAgICAgPSBASU5T VEFMTEANCisgSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUANCi0tIA0KMi41LjEN Cg0KDQoNCi0tLQ0KVW5zdWJzY3JpYmU6ICBhbHBpbmUtYXBvcnRzK3Vuc3Vic2NyaWJlQGxpc3Rz LmFscGluZWxpbnV4Lm9yZw0KSGVscDogICAgICAgICBhbHBpbmUtYXBvcnRzK2hlbHBAbGlzdHMu YWxwaW5lbGludXgub3JnDQotLS0NCg==