From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Lars Lockenvitz" Subject: clearcase conntrack module Date: Wed, 25 Aug 2004 13:38:41 +0200 Sender: netfilter-devel-bounces@lists.netfilter.org Message-ID: <1432704184@web.de> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="STEFAN412c7a4432b2" Return-path: To: netfilter-devel@lists.netfilter.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: netfilter-devel-bounces@lists.netfilter.org List-Id: netfilter-devel.vger.kernel.org This is a MIME encoded message. --STEFAN412c7a4432b2 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Hi, I want only contribute a clearcase conntrack module. It is as a diff output for the pom-ng. Regards ________________________________________________________________ Verschicken Sie romantische, coole und witzige Bilder per SMS! Jetzt neu bei WEB.DE FreeMail: http://freemail.web.de/?mc=021193 --STEFAN412c7a4432b2 Content-Type: application/octet-stream; name="clearcase diff-output for pom-ng" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="clearcase diff-output for pom-ng" ZGlmZiAtcnVOIHBhdGNoLW8tbWF0aWMtbmctMjAwNDA2MjEvLmNvbmZpZyBzcmMvcGF0Y2gt by1tYXRpYy1uZy0yMDA0MDYyMS8uY29uZmlnCi0tLSBwYXRjaC1vLW1hdGljLW5nLTIwMDQw NjIxLy5jb25maWcJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIHNy Yy9wYXRjaC1vLW1hdGljLW5nLTIwMDQwNjIxLy5jb25maWcJMjAwNC0wOC0yNSAxMDoxMzox Ni4wMDAwMDAwMDAgKzAyMDAKQEAgLTAsMCArMSw0IEBACisjCisjICAgSVA6IE5ldGZpbHRl ciBDb25maWd1cmF0aW9uCisjCitDT05GSUdfSVBfTkZfQ0xFQVJDQVNFPW0KZGlmZiAtcnVO IHBhdGNoLW8tbWF0aWMtbmctMjAwNDA2MjEvY29ubnRyYWNrX2NsZWFyY2FzZS9oZWxwIHNy Yy9wYXRjaC1vLW1hdGljLW5nLTIwMDQwNjIxL2Nvbm50cmFja19jbGVhcmNhc2UvaGVscAot LS0gcGF0Y2gtby1tYXRpYy1uZy0yMDA0MDYyMS9jb25udHJhY2tfY2xlYXJjYXNlL2hlbHAJ MTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIHNyYy9wYXRjaC1vLW1h dGljLW5nLTIwMDQwNjIxL2Nvbm50cmFja19jbGVhcmNhc2UvaGVscAkyMDA0LTA4LTI1IDEw OjIzOjAzLjAwMDAwMDAwMCArMDIwMApAQCAtMCwwICsxLDYgQEAKKyAgIFRoaXMgYWRkcyBD T05GSUdfSVBfTkZfQ0xFQVJDQVNFLCB3aGljaCBpcyB0aGUgQ0xFQVJDQVNFCisgICBjb25u ZWN0aW9uIHRyYWNrZXIuCisKKyAgIFRoaXMgb3B0aW9uIHN1cHBsaWVzIHR3byBjb25uZWN0 aW9uIHRyYWNraW5nIG1vZHVsZXM7CisgICBpcF9jb25udHJhY2tfY2xlYXJjYXNlX3VkcCBh bmQgaXBfY29ubnRyYWNrX2NsZWFyY2FzYWVfdGNwLCB3aGljaCB0cmFjaworICAgY2xlYXJj YXNlIHJlcXVlc3RzIHVzaW5nIFVEUCBhbmQgVENQIHJlc3BlY3RpdmVseS4KZGlmZiAtcnVO IHBhdGNoLW8tbWF0aWMtbmctMjAwNDA2MjEvY29ubnRyYWNrX2NsZWFyY2FzZS9pbmZvIHNy Yy9wYXRjaC1vLW1hdGljLW5nLTIwMDQwNjIxL2Nvbm50cmFja19jbGVhcmNhc2UvaW5mbwot LS0gcGF0Y2gtby1tYXRpYy1uZy0yMDA0MDYyMS9jb25udHJhY2tfY2xlYXJjYXNlL2luZm8J MTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIHNyYy9wYXRjaC1vLW1h dGljLW5nLTIwMDQwNjIxL2Nvbm50cmFja19jbGVhcmNhc2UvaW5mbwkyMDA0LTA4LTI1IDEw OjIxOjE0LjAwMDAwMDAwMCArMDIwMApAQCAtMCwwICsxLDQgQEAKK0F1dGhvcjogIk1hcmNl bG8gQmFyYm9zYSBMaW1hIiA8bWFyY2Vsby5saW1hQGRjYy51bmljYW1wLmJyPgorU3RhdHVz OiByZXF1ZXN0IGZvciBwZXJtYW5lbnQgaW5jbHVzaW9uCitSZXBvc2l0b3J5OiBleHRyYQor UmVxdWlyZXM6IGxpbnV4IDwgMi42LjAKZGlmZiAtcnVOIHBhdGNoLW8tbWF0aWMtbmctMjAw NDA2MjEvY29ubnRyYWNrX2NsZWFyY2FzZS9saW51eC8uY29uZmlnLmxhZGQgc3JjL3BhdGNo LW8tbWF0aWMtbmctMjAwNDA2MjEvY29ubnRyYWNrX2NsZWFyY2FzZS9saW51eC8uY29uZmln LmxhZGQKLS0tIHBhdGNoLW8tbWF0aWMtbmctMjAwNDA2MjEvY29ubnRyYWNrX2NsZWFyY2Fz ZS9saW51eC8uY29uZmlnLmxhZGQJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAx MDAKKysrIHNyYy9wYXRjaC1vLW1hdGljLW5nLTIwMDQwNjIxL2Nvbm50cmFja19jbGVhcmNh c2UvbGludXgvLmNvbmZpZy5sYWRkCTIwMDQtMDgtMjUgMTA6NDE6NTkuMDAwMDAwMDAwICsw MjAwCkBAIC0wLDAgKzEsMiBAQAorQ09ORklHX0lQX05GX0NPTk5UUkFDSz1tCitDT05GSUdf SVBfTkZfQ0xFQVJDQVNFPW0KZGlmZiAtcnVOIHBhdGNoLW8tbWF0aWMtbmctMjAwNDA2MjEv Y29ubnRyYWNrX2NsZWFyY2FzZS9saW51eC9Eb2N1bWVudGF0aW9uL0NvbmZpZ3VyZS5oZWxw LmxhZGQgc3JjL3BhdGNoLW8tbWF0aWMtbmctMjAwNDA2MjEvY29ubnRyYWNrX2NsZWFyY2Fz ZS9saW51eC9Eb2N1bWVudGF0aW9uL0NvbmZpZ3VyZS5oZWxwLmxhZGQKLS0tIHBhdGNoLW8t bWF0aWMtbmctMjAwNDA2MjEvY29ubnRyYWNrX2NsZWFyY2FzZS9saW51eC9Eb2N1bWVudGF0 aW9uL0NvbmZpZ3VyZS5oZWxwLmxhZGQJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAg KzAxMDAKKysrIHNyYy9wYXRjaC1vLW1hdGljLW5nLTIwMDQwNjIxL2Nvbm50cmFja19jbGVh cmNhc2UvbGludXgvRG9jdW1lbnRhdGlvbi9Db25maWd1cmUuaGVscC5sYWRkCTIwMDQtMDgt MjUgMDk6NDg6MzguMDAwMDAwMDAwICswMjAwCkBAIC0wLDAgKzEsMTIgQEAKK0NPTkZJR19J UF9ORl9DT05OVFJBQ0sKK0NMRUFSQ0FTRSBwcm90b2NvbCBzdXBwb3J0CitDT05GSUdfSVBf TkZfQ0xFQVJDQVNFCisgIFRoaXMgYWRkcyBDT05GSUdfSVBfTkZfQ0xFQVJDQVNFLCB3aGlj aCBpcyB0aGUgQ0xFQVJDQVNFCisgIGNvbm5lY3Rpb24gdHJhY2tlci4KKworICBUaGlzIG9w dGlvbiBzdXBwbGllcyB0d28gY29ubmVjdGlvbiB0cmFja2luZyBtb2R1bGVzOworICBpcF9j b25udHJhY2tfY2xlYXJjYXNlX3VkcCBhbmQgaXBfY29ubnRyYWNrX2NsZWFyY2FzYWVfdGNw LCB3aGljaCB0cmFjaworICBjbGVhcmNhc2UgcmVxdWVzdHMgdXNpbmcgVURQIGFuZCBUQ1Ag cmVzcGVjdGl2ZWx5LgorCisgIElmIHlvdSB3YW50IHRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1 bGUsIHNheSBNIGhlcmUgYW5kIHJlYWQKKyAgPGZpbGU6RG9jdW1lbnRhdGlvbi9tb2R1bGVz LnR4dD4uICBJZiB1bnN1cmUsIHNheSBgTicuCmRpZmYgLXJ1TiBwYXRjaC1vLW1hdGljLW5n LTIwMDQwNjIxL2Nvbm50cmFja19jbGVhcmNhc2UvbGludXgvaW5jbHVkZS9saW51eC9uZXRm aWx0ZXJfaXB2NC9pcF9jb25udHJhY2tfY2xlYXJjYXNlLmggc3JjL3BhdGNoLW8tbWF0aWMt bmctMjAwNDA2MjEvY29ubnRyYWNrX2NsZWFyY2FzZS9saW51eC9pbmNsdWRlL2xpbnV4L25l dGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja19jbGVhcmNhc2UuaAotLS0gcGF0Y2gtby1tYXRp Yy1uZy0yMDA0MDYyMS9jb25udHJhY2tfY2xlYXJjYXNlL2xpbnV4L2luY2x1ZGUvbGludXgv bmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX2NsZWFyY2FzZS5oCTE5NzAtMDEtMDEgMDE6 MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyBzcmMvcGF0Y2gtby1tYXRpYy1uZy0yMDA0MDYy MS9jb25udHJhY2tfY2xlYXJjYXNlL2xpbnV4L2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lw djQvaXBfY29ubnRyYWNrX2NsZWFyY2FzZS5oCTIwMDQtMDgtMjQgMTQ6Mjg6MjEuMDAwMDAw MDAwICswMjAwCkBAIC0wLDAgKzEsNjggQEAKKy8qIENMRUFSQ0FTRSBleHRlbnNpb24gZm9y IElQIGNvbm5lY3Rpb24gdHJhY2tpbmcsIFZlcnNpb24gMi4yCisgKiAoQykgMjAwMCBieSBN YXJjZWxvIEJhcmJvc2EgTGltYSA8bWFyY2Vsby5saW1hQGRjYy51bmljYW1wLmJyPgorICoJ LSBvcmlnaW5hbCBDTEVBUkNBU0UgdHJhY2tpbmcgbW9kdWxlCisgKgktICJyZWNlbnQiIGNv bm5lY3Rpb24gaGFuZGxpbmcgZm9yIGtlcm5lbCAyLjMrIG5ldGZpbHRlcgorICoKKyAqIChD KSAyMDAxIGJ5IFJ1c3R5IFJ1c3NlbGwgPHJ1c3R5QHJ1c3Rjb3JwLmNvbS5hdT4KKyAqCS0g dXBncmFkZWQgY29ubnRyYWNrIG1vZHVsZXMgdG8gb2xkbmF0IGFwaSAtIGtlcm5lbCAyLjQu MCsKKyAqCisgKiAoQykgMjAwMiBieSBJYW4gKExhcnJ5KSBMYXR0ZXIgPElhbi5MYXR0ZXJA bXEuZWR1LmF1PgorICoJLSB1cGdyYWRlZCBjb25udHJhY2sgbW9kdWxlcyB0byBuZXduYXQg YXBpIC0ga2VybmVsIDIuNC4yMCsKKyAqCS0gZXh0ZW5kZWQgbWF0Y2hpbmcgdG8gc3VwcG9y dCBmaWx0ZXJpbmcgb24gcHJvY2VkdXJlcworICoKKyAqIGlwX2Nvbm50cmFja19DTEVBUkNB U0UuaCx2IDIuMiAyMDAzLzAxLzEyIDE4OjMwOjAwCisgKgorICoJVGhpcyBwcm9ncmFtIGlz IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJbW9k aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UKKyAqCWFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl aXRoZXIgdmVyc2lvbgorICoJMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqKgorICovCisKKyNpbmNsdWRlIDxhc20vcGFyYW0u aD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+ CisjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgor CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX2hlbHBlci5o PgorCisjaWZuZGVmIF9JUF9DT05OVFJBQ0tfQ0xFQVJDQVNFX0gKKyNkZWZpbmUgX0lQX0NP Tk5UUkFDS19DTEVBUkNBU0VfSAorCisjZGVmaW5lIENMRUFSQ0FTRV9QT1JUICAgICAgIDM3 MQorCisKKy8qIERhdHVtIGluIENMRUFSQ0FTRSBwYWNrZXRzIGFyZSBlbmNvZGVkIGluIFhE UiAqLworI2RlZmluZSBJWERSX0dFVF9JTlQzMihidWYpICgodV9pbnQzMl90KSBudG9obCgo dWludDMyX3QpKmJ1ZikpCisKKy8qIEZhc3QgdGltZW91dCwgdG8gZGVueSBEb1MgYXR0YWNr cyAqLworI2RlZmluZSBFWFAgKDYwICogSFopCisKKy8qIE5vcm1hbCB0aW1lb3V0cyAqLwor I2RlZmluZSBFWFBJUkVTICgxODAgKiBIWikKKworLyogRm9yIGZ1dHVyZSBjb25lY3Rpb25z IENMRUFSQ0FTRSwgdXNpbmcgY2xpZW50J3MgY2FjaGUgYmluZGluZ3MKKyAqIEknbGwgdXNl IGlwX2Nvbm50cmFja19sb2NrIHRvIGxvY2sgdGhlc2UgbGlzdHMJKi8KKworLyogVGhpcyBp ZGVudGlmaWVzIGVhY2ggcmVxdWVzdCBhbmQgc3RvcmVzIHByb3RvY29sICovCitzdHJ1Y3Qg cmVxdWVzdF9wIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisKKwl1X2ludDMyX3QgeGlk OyAgIAorCXVfaW50MzJfdCBpcDsKKwl1X2ludDE2X3QgcG9ydDsKKwkKKwkvKiBQcm90b2Nv bCAqLworCXVfaW50MTZfdCBwcm90bzsKKworCXN0cnVjdCB0aW1lcl9saXN0IHRpbWVvdXQ7 Cit9OworCitzdGF0aWMgaW5saW5lIGludCByZXF1ZXN0X3BfY21wKGNvbnN0IHN0cnVjdCBy ZXF1ZXN0X3AgKnAsIHVfaW50MzJfdCB4aWQsIAorCQkJCXVfaW50MzJfdCBpcCwgdV9pbnQz Ml90IHBvcnQpIHsKKwlyZXR1cm4gKHAtPnhpZCA9PSB4aWQgJiYgcC0+aXAgPT0gaXAgJiYg cC0+cG9ydCk7CisKK30KKworI2VuZGlmIC8qIF9JUF9DT05OVFJBQ0tfQ0xFQVJDQVNFX0gg Ki8KZGlmZiAtcnVOIHBhdGNoLW8tbWF0aWMtbmctMjAwNDA2MjEvY29ubnRyYWNrX2NsZWFy Y2FzZS9saW51eC9uZXQvaXB2NC9uZXRmaWx0ZXIvQ29uZmlnLmluLmxhZGQgc3JjL3BhdGNo LW8tbWF0aWMtbmctMjAwNDA2MjEvY29ubnRyYWNrX2NsZWFyY2FzZS9saW51eC9uZXQvaXB2 NC9uZXRmaWx0ZXIvQ29uZmlnLmluLmxhZGQKLS0tIHBhdGNoLW8tbWF0aWMtbmctMjAwNDA2 MjEvY29ubnRyYWNrX2NsZWFyY2FzZS9saW51eC9uZXQvaXB2NC9uZXRmaWx0ZXIvQ29uZmln LmluLmxhZGQJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIHNyYy9w YXRjaC1vLW1hdGljLW5nLTIwMDQwNjIxL2Nvbm50cmFja19jbGVhcmNhc2UvbGludXgvbmV0 L2lwdjQvbmV0ZmlsdGVyL0NvbmZpZy5pbi5sYWRkCTIwMDQtMDgtMjUgMTA6MzA6NTkuMDAw MDAwMDAwICswMjAwCkBAIC0wLDAgKzEsMiBAQAoraWYgWyAiJENPTkZJR19JUF9ORl9DT05O VFJBQ0siICE9ICJuIiBdOyB0aGVuCisgIGRlcF90cmlzdGF0ZSAnICBDTEVBUkNBU0UgcHJv dG9jb2wgc3VwcG9ydCcgQ09ORklHX0lQX05GX0NMRUFSQ0FTRSAkQ09ORklHX0lQX05GX0NP Tk5UUkFDSwpkaWZmIC1ydU4gcGF0Y2gtby1tYXRpYy1uZy0yMDA0MDYyMS9jb25udHJhY2tf Y2xlYXJjYXNlL2xpbnV4L25ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZS5sYWRkIHNyYy9w YXRjaC1vLW1hdGljLW5nLTIwMDQwNjIxL2Nvbm50cmFja19jbGVhcmNhc2UvbGludXgvbmV0 L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlLmxhZGQKLS0tIHBhdGNoLW8tbWF0aWMtbmctMjAw NDA2MjEvY29ubnRyYWNrX2NsZWFyY2FzZS9saW51eC9uZXQvaXB2NC9uZXRmaWx0ZXIvTWFr ZWZpbGUubGFkZAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgc3Jj L3BhdGNoLW8tbWF0aWMtbmctMjAwNDA2MjEvY29ubnRyYWNrX2NsZWFyY2FzZS9saW51eC9u ZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGUubGFkZAkyMDA0LTA4LTI1IDExOjQ3OjE1LjAw MDAwMDAwMCArMDIwMApAQCAtMCwwICsxLDYgQEAKKyMgY29ubmVjdGlvbiB0cmFja2luZyBo ZWxwZXJzCitvYmotJChDT05GSUdfSVBfTkZfQ0xFQVJDQVNFKSArPSBpcF9jb25udHJhY2tf Y2xlYXJjYXNlX3RjcC5vIGlwX2Nvbm50cmFja19jbGVhcmNhc2VfdWRwLm8KK2lmZGVmIENP TkZJR19JUF9ORl9DTEVBUkNBU0UKKyAgICAgICAgZXhwb3J0LW9ianMgKz0gaXBfY29ubnRy YWNrX2NsZWFyY2FzZV90Y3AubyBpcF9jb25udHJhY2tfY2xlYXJjYXNlX3VkcC5vCitlbmRp ZgorCmRpZmYgLXJ1TiBwYXRjaC1vLW1hdGljLW5nLTIwMDQwNjIxL2Nvbm50cmFja19jbGVh cmNhc2UvbGludXgvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19jbGVhcmNhc2Vf dGNwLmMgc3JjL3BhdGNoLW8tbWF0aWMtbmctMjAwNDA2MjEvY29ubnRyYWNrX2NsZWFyY2Fz ZS9saW51eC9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX2NsZWFyY2FzZV90Y3Au YwotLS0gcGF0Y2gtby1tYXRpYy1uZy0yMDA0MDYyMS9jb25udHJhY2tfY2xlYXJjYXNlL2xp bnV4L25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfY2xlYXJjYXNlX3RjcC5jCTE5 NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyBzcmMvcGF0Y2gtby1tYXRp Yy1uZy0yMDA0MDYyMS9jb25udHJhY2tfY2xlYXJjYXNlL2xpbnV4L25ldC9pcHY0L25ldGZp bHRlci9pcF9jb25udHJhY2tfY2xlYXJjYXNlX3RjcC5jCTIwMDQtMDgtMjQgMTU6MDU6NTYu MDAwMDAwMDAwICswMjAwCkBAIC0wLDAgKzEsNTEzIEBACisvKiBjbGVhcmNhc2UgZXh0ZW5z aW9uIGZvciBJUCAoVENQKSBjb25uZWN0aW9uIHRyYWNraW5nLCBWZXJzaW9uIDIuMgorICog KEMpIDIwMDAgYnkgTWFyY2VsbyBCYXJib3NhIExpbWEgPG1hcmNlbG8ubGltYUBkY2MudW5p Y2FtcC5icj4KKyAqCS0gb3JpZ2luYWwgY2xlYXJjYXNlIHRyYWNraW5nIG1vZHVsZQorICoJ LSAicmVjZW50IiBjb25uZWN0aW9uIGhhbmRsaW5nIGZvciBrZXJuZWwgMi4zKyBuZXRmaWx0 ZXIKKyAqCisgKiAoQykgMjAwMSBieSBSdXN0eSBSdXNzZWxsIDxydXN0eUBydXN0Y29ycC5j b20uYXU+CisgKgktIHVwZ3JhZGVkIGNvbm50cmFjayBtb2R1bGVzIHRvIG9sZG5hdCBhcGkg LSBrZXJuZWwgMi40LjArCisgKgorICogKEMpIDIwMDIsMjAwMyBieSBJYW4gKExhcnJ5KSBM YXR0ZXIgPElhbi5MYXR0ZXJAbXEuZWR1LmF1PgorICoJLSB1cGdyYWRlZCBjb25udHJhY2sg bW9kdWxlcyB0byBuZXduYXQgYXBpIC0ga2VybmVsIDIuNC4yMCsKKyAqCS0gZXh0ZW5kZWQg bWF0Y2hpbmcgdG8gc3VwcG9ydCBmaWx0ZXJpbmcgb24gcHJvY2VkdXJlcworICoKKyAqIGlw X2Nvbm50cmFja19jbGVhcmNhc2VfdGNwLmMsdiAyLjIgMjAwMy8wMS8xMiAxODozMDowMAor ICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp YnV0ZSBpdCBhbmQvb3IKKyAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKglhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqCTIgb2YgdGhlIExpY2Vu c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKioKKyAqCU1v ZHVsZSBsb2FkIHN5bnRheDoKKyAqCWluc21vZCBpcF9jb25udHJhY2tfY2xlYXJjYXNlX3Rj cC5vIHBvcnRzPXBvcnQxLHBvcnQyLC4uLnBvcnQ8TUFYX1BPUlRTPgorICoKKyAqCVBsZWFz ZSBnaXZlIHRoZSBwb3J0cyBvZiBhbGwgY2xlYXJjYXNlIHNlcnZlcnMgeW91IHdpc2ggdG8g Y29ubmVjdCB0by4KKyAqCUlmIHlvdSBkb24ndCBzcGVjaWZ5IHBvcnRzLCB0aGUgZGVmYXVs dCB3aWxsIGJlIHBvcnQgMTExLgorICoqCisgKglOb3RlIHRvIGFsbDoKKyAqCisgKgljbGVh cmNhc2VzIHNob3VsZCBub3QgYmUgZXhwb3NlZCB0byB0aGUgaW50ZXJuZXQgLSBhc2sgdGhl IFBlbnRhZ29uOworICoKKyAqCSAgIlRoZSB1bmlkZW50aWZpZWQgY3JhY2tlcnMgcGxlYWRl ZCBndWlsdHkgaW4gSnVseSB0byBjaGFyZ2VzCisgKgkgICBvZiBqdXZlbmlsZSBkZWxpbnF1 ZW5jeSBzdGVtbWluZyBmcm9tIGEgc3RyaW5nIG9mIFBlbnRhZ29uCisgKgkgICBuZXR3b3Jr IGludHJ1c2lvbnMgaW4gRmVicnVhcnkuCisgKgorICoJICAgVGhlIHlvdXRocywgZ29pbmcg YnkgdGhlIG5hbWVzIFRvb1Nob3J0IGFuZCBNYWthdmVsaSwgdXNlZAorICoJICAgYSBjb21t b24gc2VydmVyIHNlY3VyaXR5IGhvbGUgdG8gYnJlYWsgaW4sIGFjY29yZGluZyB0bworICoJ ICAgRGFuZSBKYXNwZXIsIG93bmVyIG9mIHRoZSBDYWxpZm9ybmlhIEludGVybmV0IHNlcnZp Y2UKKyAqCSAgIHByb3ZpZGVyLCBTb25pYy4gVGhleSB1c2VkIHRoZSBob2xlLCBrbm93biBh cyB0aGUgJ3N0YXRkJworICoJICAgZXhwbG9pdCwgdG8gYXR0ZW1wdCBtb3JlIHRoYW4gODAw IGJyZWFrLWlucywgSmFzcGVyIHNhaWQuIgorICoKKyAqCUZyb206IFdpcmVkIE5ld3M7ICJQ ZW50YWdvbiBLaWRzIEtpY2tlZCBPZmYgR3JpZCIgLSBOb3YgNiwgMTk5OAorICoJVVJMOiAg aHR0cDovL3d3dy53aXJlZC5jb20vbmV3cy9wb2xpdGljcy8wLDEyODMsMTYwOTgsMDAuaHRt bAorICoqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxp bnV4L25ldGZpbHRlci5oPgorI2luY2x1ZGUgPGxpbnV4L2lwLmg+CisjaW5jbHVkZSA8bmV0 L2NoZWNrc3VtLmg+CisjaW5jbHVkZSA8bmV0L3RjcC5oPgorCisjaW5jbHVkZSA8YXNtL3Bh cmFtLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1l ci5oPgorI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3Qu aD4KKworI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2xvY2toZWxwLmg+CisjaW5j bHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfdGFibGVzLmg+CisjaW5jbHVkZSA8bGlu dXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX2hlbHBlci5oPgorI2luY2x1ZGUgPGxp bnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja19jbGVhcmNhc2UuaD4KKworI2RlZmlu ZSBNQVhfUE9SVFMgOAorc3RhdGljIGludCBwb3J0c1tNQVhfUE9SVFNdOworc3RhdGljIGlu dCBwb3J0c19uX2MgPSAwOworCisjaWZkZWYgTU9EVUxFX1BBUk0KK01PRFVMRV9QQVJNKHBv cnRzLCAiMS0iIF9fTU9EVUxFX1NUUklORyhNQVhfUE9SVFMpICJpIik7CitNT0RVTEVfUEFS TV9ERVNDKHBvcnRzLCAicG9ydCBudW1iZXJzIChUQ1AvVENQKSBvZiBjbGVhcmNhc2UgcG9y dG1hcHBlciBzZXJ2ZXJzIik7CisjZW5kaWYKKworTU9EVUxFX0FVVEhPUigiTWFyY2VsbyBC YXJib3NhIExpbWEgPG1hcmNlbG8ubGltYUBkY2MudW5pY2FtcC5icj4iKTsKK01PRFVMRV9E RVNDUklQVElPTigiY2xlYXJjYXNlIFRDUCBjb25uZWN0aW9uIHRyYWNraW5nIG1vZHVsZSIp OworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCisjaWYgMAorI2RlZmluZSBERUJVR1AoZm9y bWF0LCBhcmdzLi4uKSBwcmludGsoS0VSTl9ERUJVRyAiaXBfY29ubnRyYWNrX2NsZWFyY2Fz ZV90Y3A6ICIgXAorCQkJCQlmb3JtYXQsICMjIGFyZ3MpCisjZWxzZQorI2RlZmluZSBERUJV R1AoZm9ybWF0LCBhcmdzLi4uKQorI2VuZGlmCisKK0RFQ0xBUkVfUldMT0NLKGlwY3RfY2xl YXJjYXNlX3RjcF9sb2NrKTsKKyNkZWZpbmUgQVNTRVJUX1JFQURfTE9DSyh4KSBNVVNUX0JF X1JFQURfTE9DS0VEKCZpcGN0X2NsZWFyY2FzZV90Y3BfbG9jaykKKyNkZWZpbmUgQVNTRVJU X1dSSVRFX0xPQ0soeCkgTVVTVF9CRV9XUklURV9MT0NLRUQoJmlwY3RfY2xlYXJjYXNlX3Rj cF9sb2NrKQorCisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvbGlzdGhlbHAuaD4K KworLyogRm9yIGZ1dHVyZSBjb25lY3Rpb25zIGNsZWFyY2FzZSwgdXNpbmcgY2xpZW50J3Mg Y2FjaGUgYmluZGluZ3MKKyAqIEknbGwgdXNlIGlwX2Nvbm50cmFja19sb2NrIHRvIGxvY2sg dGhlc2UgbGlzdHMgICAgICAgICAgICovCisKK0xJU1RfSEVBRChyZXF1ZXN0X3BfbGlzdF90 Y3ApOworCisKK3N0YXRpYyB2b2lkIGRlbGV0ZV9yZXF1ZXN0X3AodW5zaWduZWQgbG9uZyBy ZXF1ZXN0X3BfdWwpCit7CisJc3RydWN0IHJlcXVlc3RfcCAqcCA9ICh2b2lkICopcmVxdWVz dF9wX3VsOworCisJV1JJVEVfTE9DSygmaXBjdF9jbGVhcmNhc2VfdGNwX2xvY2spOworCUxJ U1RfREVMRVRFKCZyZXF1ZXN0X3BfbGlzdF90Y3AsIHApOworCVdSSVRFX1VOTE9DSygmaXBj dF9jbGVhcmNhc2VfdGNwX2xvY2spOworCWtmcmVlKHApOworCXJldHVybjsKK30KKworCitz dGF0aWMgdm9pZCByZXFfY2woc3RydWN0IHJlcXVlc3RfcCAqIHIpCit7CisJV1JJVEVfTE9D SygmaXBjdF9jbGVhcmNhc2VfdGNwX2xvY2spOworCWRlbF90aW1lcigmci0+dGltZW91dCk7 CisJTElTVF9ERUxFVEUoJnJlcXVlc3RfcF9saXN0X3RjcCwgcik7CisJV1JJVEVfVU5MT0NL KCZpcGN0X2NsZWFyY2FzZV90Y3BfbG9jayk7CisJa2ZyZWUocik7CisJcmV0dXJuOworfQor CisKK3N0YXRpYyB2b2lkIGNsZWFuX3JlcXVlc3Qoc3RydWN0IGxpc3RfaGVhZCAqbGlzdCkK K3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpmaXJzdCA9IGxpc3QtPnByZXY7CisJc3RydWN0IGxp c3RfaGVhZCAqdGVtcCA9IGxpc3QtPm5leHQ7CisJc3RydWN0IGxpc3RfaGVhZCAqYXV4Owor CisJaWYgKGxpc3RfZW1wdHkobGlzdCkpCisJCXJldHVybjsKKworCXdoaWxlIChmaXJzdCAh PSB0ZW1wKSB7CisJCWF1eCA9IHRlbXAtPm5leHQ7CisJCXJlcV9jbCgoc3RydWN0IHJlcXVl c3RfcCAqKXRlbXApOworCQl0ZW1wID0gYXV4OworCX0KKwlyZXFfY2woKHN0cnVjdCByZXF1 ZXN0X3AgKil0ZW1wKTsKKwlyZXR1cm47Cit9CisKKworc3RhdGljIHZvaWQgYWxsb2NfcmVx dWVzdF9wKHVfaW50MzJfdCB4aWQsIHVfaW50MTZfdCBwcm90bywgdV9pbnQzMl90IGlwLAor CQkgICAgIHVfaW50MTZfdCBwb3J0KQoreworCXN0cnVjdCByZXF1ZXN0X3AgKnJlcV9wOwor CisJLyogVmVyaWZpZXMgaWYgZW50cnkgYWxyZWFkeSBleGlzdHMgKi8KKwlXUklURV9MT0NL KCZpcGN0X2NsZWFyY2FzZV90Y3BfbG9jayk7CisJcmVxX3AgPSBMSVNUX0ZJTkQoJnJlcXVl c3RfcF9saXN0X3RjcCwgcmVxdWVzdF9wX2NtcCwKKwkJc3RydWN0IHJlcXVlc3RfcCAqLCB4 aWQsIGlwLCBwb3J0KTsKKworCWlmIChyZXFfcCkgeworCQkvKiBSZWZyZXNoIHRpbWVvdXQg Ki8KKwkJaWYgKGRlbF90aW1lcigmcmVxX3AtPnRpbWVvdXQpKSB7CisJCQlyZXFfcC0+dGlt ZW91dC5leHBpcmVzID0gamlmZmllcyArIEVYUDsKKwkJCWFkZF90aW1lcigmcmVxX3AtPnRp bWVvdXQpOworCQl9CisJCVdSSVRFX1VOTE9DSygmaXBjdF9jbGVhcmNhc2VfdGNwX2xvY2sp OworCQlyZXR1cm47CisKKwl9CisJV1JJVEVfVU5MT0NLKCZpcGN0X2NsZWFyY2FzZV90Y3Bf bG9jayk7CisKKwkvKiBBbGxvY2F0ZSBuZXcgcmVxdWVzdF9wICovCisJcmVxX3AgPSAoc3Ry dWN0IHJlcXVlc3RfcCAqKSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcmVxdWVzdF9wKSwgR0ZQ X0FUT01JQyk7CisJaWYgKCFyZXFfcCkgeworIAkJREVCVUdQKCJjYW4ndCBhbGxvY2F0ZSBy ZXF1ZXN0X3BcbiIpOworCQlyZXR1cm47CisJfQorCSpyZXFfcCA9ICgoc3RydWN0IHJlcXVl c3RfcCkge3sgTlVMTCwgTlVMTCB9LCB4aWQsIGlwLCBwb3J0LCBwcm90bywKKwkJeyB7IE5V TEwsIE5VTEwgfSwgamlmZmllcyArIEVYUCwgKHVuc2lnbmVkIGxvbmcpcmVxX3AsCisJCQlO VUxMIH19KTsKKworCS8qIEluaXRpYWxpemUgdGltZXIgKi8KKwlpbml0X3RpbWVyKCZyZXFf cC0+dGltZW91dCk7CisJcmVxX3AtPnRpbWVvdXQuZnVuY3Rpb24gPSBkZWxldGVfcmVxdWVz dF9wOworCWFkZF90aW1lcigmcmVxX3AtPnRpbWVvdXQpOworCisJLyogUHV0IGluIGxpc3Qg Ki8KKwlXUklURV9MT0NLKCZpcGN0X2NsZWFyY2FzZV90Y3BfbG9jayk7CisJbGlzdF9wcmVw ZW5kKCZyZXF1ZXN0X3BfbGlzdF90Y3AsIHJlcV9wKTsKKwlXUklURV9VTkxPQ0soJmlwY3Rf Y2xlYXJjYXNlX3RjcF9sb2NrKTsKKwlyZXR1cm47CisKK30KKworCitzdGF0aWMgaW50IGNo ZWNrX2NsZWFyY2FzZV9wYWNrZXQoY29uc3QgdV9pbnQzMl90ICpkYXRhLAorCQkJaW50IGRp ciwgc3RydWN0IGlwX2Nvbm50cmFjayAqY3QsCisJCQlzdHJ1Y3QgbGlzdF9oZWFkIHJlcXVl c3RfcF9saXN0KQoreworCXN0cnVjdCByZXF1ZXN0X3AgKnJlcV9wOworCXVfaW50MzJfdCB4 aWQ7CisJdV9pbnQzMl90IG10eXBlOworCXN0cnVjdCBpcF9jb25udHJhY2tfZXhwZWN0IGV4 cGVjdCwgKmV4cCA9ICZleHBlY3Q7CisKKwkvKiBUcmFuc2xzdGlvbidzIGJ1ZmZlciBmb3Ig WERSICovCisJdV9pbnQzMl90IHBvcnRfYnVmOworCisJLyogR2V0IFhJRCBhbmQgTWVzc2Fn ZSBUeXBlKi8KKwlkYXRhLS07CisJeGlkID0gbnRvaGwoKmRhdGEpOworCWRhdGErKzsKKwlt dHlwZSA9IG50b2hsKCpkYXRhKTsKKwlkYXRhLS07CisKKyAJLyogVGhpcyBkb2VzIHNhbml0 eSBjaGVja2luZyBvbiBjbGVhcmNhc2UgcGF5bG9hZHMsCisJICogYW5kIHBlcm1pdHMgb25s eSB0aGUgY2xlYXJjYXNlICJnZXQgcG9ydCIgKDMpCisJICogaW4gYXV0aG9yaXNlZCBwcm9j ZWR1cmVzIGluIGNsaWVudAorCSAqIGNvbW11bmljYXRpb25zIHdpdGggdGhlIHBvcnRtYXBw ZXIuCisJICovCisKKwkvKiBwZXJmb3JtIGRpcmVjdGlvbiBkZXBlbmRhbnQgY2xlYXJjYXNl IHdvcmsgKi8KKwlpZiAoZGlyID09IElQX0NUX0RJUl9PUklHSU5BTCkgeworCisJCWRhdGEg Kz0gNTsKKworCQkvKiBHZXQgY2xlYXJjYXNlIHJlcXVlc3RvciAqLworCQlpZiAoSVhEUl9H RVRfSU5UMzIoZGF0YSkgIT0gMykgeworCQkJREVCVUdQKCJjbGVhcmNhc2UgcGFja2V0IGNv bnRhaW5zIGFuIGludmFsaWQgKG5vbiBcImdldFwiKSByZXF1ZXN0b3IuIFtza2lwXSBcbiIp OworCQkJcmV0dXJuIE5GX0FDQ0VQVDsKKwkJfQorCQlERUJVR1AoImNsZWFyY2FzZSBwYWNr ZXQgY29udGFpbnMgYSBcImdldFwiIHJlcXVlc3Rvci4gW2NvbnRdXG4iKTsKKworCQlkYXRh Kys7CisKKwkJLyogSnVtcCBDcmVkZW50aWFscyBhbmQgVmVyZmlmaWVyICovCisJCWRhdGEg PSBkYXRhICsgSVhEUl9HRVRfSU5UMzIoZGF0YSkgKyAyOworCQlkYXRhID0gZGF0YSArIElY RFJfR0VUX0lOVDMyKGRhdGEpICsgMjsKKworCQkvKiBHZXQgY2xlYXJjYXNlIHByb2NlZHVy ZSAqLworCQlERUJVR1AoImNsZWFyY2FzZSBwYWNrZXQgY29udGFpbnMgcHJvY2VkdXJlIHJl cXVlc3QgWyV1XS4gW2NvbnRdXG4iLAorCQkJKHVuc2lnbmVkIGludClJWERSX0dFVF9JTlQz MihkYXRhKSk7CisKKwkJLyogR2V0IGNsZWFyY2FzZSBwcm90b2NvbCBhbmQgc3RvcmUgYWdh aW5zdCBjbGllbnQgcGFyYW1ldGVycyAqLworCQlkYXRhID0gZGF0YSArIDI7CisJCWFsbG9j X3JlcXVlc3RfcCh4aWQsIElYRFJfR0VUX0lOVDMyKGRhdGEpLCBjdC0+dHVwbGVoYXNoW2Rp cl0udHVwbGUuc3JjLmlwLAorCQkJCWN0LT50dXBsZWhhc2hbZGlyXS50dXBsZS5zcmMudS5h bGwpOworCisJCURFQlVHUCgiYWxsb2NhdGVkIGNsZWFyY2FzZSByZXFfcCBmb3IgeGlkPSV1 ICV1LiV1LiV1LiV1OiV1XG4iLAorCQkJbnRvaGwoeGlkKSwKKwkJCU5JUFFVQUQoY3QtPnR1 cGxlaGFzaFtkaXJdLnR1cGxlLnNyYy5pcCksCisJCQludG9ocyhjdC0+dHVwbGVoYXNoW2Rp cl0udHVwbGUuc3JjLnUuYWxsKSk7CisKKwl9IGVsc2UgeworCisJCS8qIENoZWNrIGZvciBy ZXR1cm5pbmcgcGFja2V0J3Mgc3RvcmVkIGNvdW50ZXJwYXJ0ICovCisJCXJlcV9wID0gTElT VF9GSU5EKCZyZXF1ZXN0X3BfbGlzdF90Y3AsIHJlcXVlc3RfcF9jbXAsCisJCQkJICBzdHJ1 Y3QgcmVxdWVzdF9wICosIHhpZCwKKwkJCQkgIGN0LT50dXBsZWhhc2hbIWRpcl0udHVwbGUu c3JjLmlwLAorCQkJCSAgY3QtPnR1cGxlaGFzaFshZGlyXS50dXBsZS5zcmMudS50Y3AucG9y dCk7CisKKwkJLy8gTmV4dCBDb25uZWN0aW9uIHdpbGwgYmUgVENQCisJCXJlcV9wLT5wcm90 bz02OworCisJCS8qIERyb3AgdW5leHBlY3RlZCBwYWNrZXRzICovCisJCWlmICghcmVxX3Ap IHsKKwkJCURFQlVHUCgicGFja2V0IGlzIG5vdCBleHBlY3RlZC4gW3NraXBdXG4iKTsKKwkJ CXJldHVybiBORl9BQ0NFUFQ7CisJCX0KKworCQkvKiBWZXJpZmllcyBpZiBwYWNrZXQgaXMg cmVhbGx5IGFuIGNsZWFyY2FzZSByZXBseSBwYWNrZXQgKi8KKwkJZGF0YSArKzsKKwkJaWYg KElYRFJfR0VUX0lOVDMyKGRhdGEpICE9IDEpIHsKKwkJCURFQlVHUCgicGFja2V0IGlzIG5v dCBhIHZhbGlkIGNsZWFyY2FzZSByZXBseS4gW3NraXBdXG4iKTsKKwkJCXJldHVybiBORl9B Q0NFUFQ7CisJCX0KKworCQkvKiBJcyBzdGF0dXMgYWNjZXB0PyAqLworCQlkYXRhKys7CisJ CWlmIChJWERSX0dFVF9JTlQzMihkYXRhKSkgeworCQkJREVCVUdQKCJwYWNrZXQgaXMgbm90 IGFuIGNsZWFyY2FzZSBhY2NlcHQuIFtza2lwXVxuIik7CisJCQlyZXR1cm4gTkZfQUNDRVBU OworCQl9CisKKwkJLyogR2V0IFZlcmlmaWVyIGxlbmd0aC4gSnVtcCB2ZXJpZmllciAqLwor CQlkYXRhKys7CisJCWRhdGEgPSBkYXRhICsgSVhEUl9HRVRfSU5UMzIoZGF0YSkgKyAyOwor CisJCS8qIElzIGFjY3BldCBzdGF0dXMgInN1Y2Nlc3MiPyAqLworCQlpZiAoSVhEUl9HRVRf SU5UMzIoZGF0YSkpIHsKKwkJCURFQlVHUCgicGFja2V0IGlzIG5vdCBhbiBjbGVhcmNhc2Ug YWNjZXB0IHN0YXR1cyBvZiBzdWNjZXNzLiBbc2tpcF1cbiIpOworCQkJcmV0dXJuIE5GX0FD Q0VQVDsKKwkJfQorCisJCS8qIEdldCBzZXJ2ZXIgcG9ydCBudW1iZXIgKi8KKwkJLy9kYXRh Kys7CisJCWRhdGEgKz0gMTA7CisJCXBvcnRfYnVmID0gKHVfaW50MTZfdCkgSVhEUl9HRVRf SU5UMzIoZGF0YSk7CisKKwkJLyogSWYgYSBwYWNrZXQgaGFzIG1hZGUgaXQgdGhpcyBmYXIg dGhlbiBpdCBkZXNlcnZlcyBhbgorCQkgKiBleHBlY3RhdGlvbiAuLi4gIGlmIHBvcnQgPT0g MCwgdGhlbiB0aGlzIHNlcnZpY2UgaXMKKwkJICogbm90IGdvaW5nIHRvIGJlIHJlZ2lzdGVy ZWQuCisJCSAqLworCQlpZiAocG9ydF9idWYpIHsKKwkJCURFQlVHUCgicG9ydCBmb3VuZDog JXVcbiIsIHBvcnRfYnVmKTsKKworCQkJbWVtc2V0KCZleHBlY3QsIDAsIHNpemVvZihleHBl Y3QpKTsKKworCQkJLyogV2F0Y2ggb3V0LCBSYWRpb2FjdGl2ZS1NYW4hICovCisJCQlleHAt PnR1cGxlLnNyYy5pcCA9IGN0LT50dXBsZWhhc2hbIWRpcl0udHVwbGUuc3JjLmlwOworCQkJ ZXhwLT50dXBsZS5kc3QuaXAgPSBjdC0+dHVwbGVoYXNoWyFkaXJdLnR1cGxlLmRzdC5pcDsK KwkJCWV4cC0+bWFzay5zcmMuaXAgPSAweGZmZmZmZmZmOworCQkJZXhwLT5tYXNrLmRzdC5p cCA9IDB4ZmZmZmZmZmY7CisKKwkJCXN3aXRjaCAocmVxX3AtPnByb3RvKSB7CisJCQkJY2Fz ZSBJUFBST1RPX1VEUDoKKwkJCQkJZXhwLT50dXBsZS5zcmMudS51ZHAucG9ydCA9IDA7CisJ CQkJCWV4cC0+dHVwbGUuZHN0LnUudWRwLnBvcnQgPSBodG9ucyhwb3J0X2J1Zik7CisJCQkJ CWV4cC0+dHVwbGUuZHN0LnByb3RvbnVtID0gSVBQUk9UT19VRFA7CisJCQkJCWV4cC0+bWFz ay5zcmMudS51ZHAucG9ydCA9IDA7CisJCQkJCWV4cC0+bWFzay5kc3QudS51ZHAucG9ydCA9 IGh0b25zKDB4ZmZmZik7CisJCQkJCWV4cC0+bWFzay5kc3QucHJvdG9udW0gPSAweGZmZmY7 CisJCQkJCWJyZWFrOworCisJCQkJY2FzZSBJUFBST1RPX1RDUDoKKwkJCQkJZXhwLT50dXBs ZS5zcmMudS50Y3AucG9ydCA9IDA7CisJCQkJCWV4cC0+dHVwbGUuZHN0LnUudGNwLnBvcnQg PSBodG9ucyhwb3J0X2J1Zik7CisJCQkJCWV4cC0+dHVwbGUuZHN0LnByb3RvbnVtID0gSVBQ Uk9UT19UQ1A7CisJCQkJCWV4cC0+bWFzay5zcmMudS50Y3AucG9ydCA9IDA7CisJCQkJCWV4 cC0+bWFzay5kc3QudS50Y3AucG9ydCA9IGh0b25zKDB4ZmZmZik7CisJCQkJCWV4cC0+bWFz ay5kc3QucHJvdG9udW0gPSAweGZmZmY7CisJCQkJCWJyZWFrOworCQkJfQorCQkJZXhwLT5l eHBlY3RmbiA9IE5VTEw7CisKKwkJCWlwX2Nvbm50cmFja19leHBlY3RfcmVsYXRlZChjdCwg JmV4cGVjdCk7CisKKwkJCURFQlVHUCgiZXhwZWN0IHJlbGF0ZWQgaXAgICAldS4ldS4ldS4l dTowLSV1LiV1LiV1LiV1OiV1IHByb3RvPSV1XG4iLAorCQkJCU5JUFFVQUQoZXhwLT50dXBs ZS5zcmMuaXApLAorCQkJCU5JUFFVQUQoZXhwLT50dXBsZS5kc3QuaXApLAorCQkJCXBvcnRf YnVmLCByZXFfcC0+cHJvdG8pOworCisJCQlERUJVR1AoImV4cGVjdCByZWxhdGVkIG1hc2sg JXUuJXUuJXUuJXU6MC0ldS4ldS4ldS4ldTo2NTUzNSBwcm90bz0ldVxuIiwKKwkJCQlOSVBR VUFEKGV4cC0+bWFzay5zcmMuaXApLAorCQkJCU5JUFFVQUQoZXhwLT5tYXNrLmRzdC5pcCks CisJCQkJZXhwLT5tYXNrLmRzdC5wcm90b251bSk7CisKKwkJfQorCisJCXJlcV9jbChyZXFf cCk7CisKKwkJREVCVUdQKCJwYWNrZXQgZXZhbHVhdGVkLiBbZXhwZWN0XVxuIik7CisJCXJl dHVybiBORl9BQ0NFUFQ7CisJfQorCisJcmV0dXJuIE5GX0FDQ0VQVDsKKworfQorCisKKy8q IENMRUFSQ0FTRSBUQ1AgaGVscGVyICovCitzdGF0aWMgaW50IGhlbHAoY29uc3Qgc3RydWN0 IGlwaGRyICppcGgsIHNpemVfdCBsZW4sCisJCXN0cnVjdCBpcF9jb25udHJhY2sgKmN0LCBl bnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbykKK3sKKwlzdHJ1Y3QgdGNwaGRyICp0Y3Bo ID0gKHZvaWQgKikgaXBoICsgaXBoLT5paGwgKiA0OworCWNvbnN0IHVfaW50MzJfdCAqZGF0 YSA9IChjb25zdCB1X2ludDMyX3QgKil0Y3BoICsgdGNwaC0+ZG9mZjsKKwlzaXplX3QgdGNw bGVuID0gbGVuIC0gaXBoLT5paGwgKiA0OworCisJaW50IGRpciA9IENUSU5GTzJESVIoY3Rp bmZvKTsKKwlpbnQgY3JwX3JldDsKKworCisJREVCVUdQKCJuZXcgcGFja2V0IHRvIGV2YWx1 YXRlIC4uXG4iKTsKKworCS8qIFRoaXMgd29ya3MgZm9yIHBhY2tldHMgbGlrZSBoYW5kc2hh a2UgcGFja2V0cywgaWdub3JlICovCisJaWYgKGxlbiA9PSAoKHRjcGgtPmRvZmYgKyBpcGgt PmlobCkgKiA0KSkgeworCQlERUJVR1AoInBhY2tldCBoYXMgbm8gZGF0YSAobWF5IHN0aWxs IGJlIGhhbmRzaGFraW5nKS4gW3NraXBdXG4iKTsKKwkJcmV0dXJuIE5GX0FDQ0VQVDsKKwl9 CisKKwkvKiBVbnRpbCB0aGVyZSdzIGJlZW4gdHJhZmZpYyBib3RoIHdheXMsIGRvbid0IGxv b2sgaW4gcGFja2V0cy4gKi8KKwlpZiAoY3RpbmZvICE9IElQX0NUX0VTVEFCTElTSEVEICYm IGN0aW5mbyAhPSBJUF9DVF9FU1RBQkxJU0hFRCArIElQX0NUX0lTX1JFUExZKQorCXsKKwkJ REVCVUdQKCJjb25uZWN0aW9uIHRyYWNraW5nIHN0YXRlIGlzOyBjdGluZm89JXUgLi5cbiIs IGN0aW5mbyk7CisJCURFQlVHUCgiW25vdGU6IGZhaWx1cmUgdG8gZ2V0IHBhc3QgdGhpcyBl cnJvciBtYXkgaW5kaWNhdGUgYXN5bW1ldHJpYyByb3V0aW5nXVxuIik7CisJCURFQlVHUCgi cGFja2V0IGlzIG5vdCB5ZXQgcGFydCBvZiBhIHR3byB3YXkgc3RyZWFtLiBbc2tpcF1cbiIp OworCQlyZXR1cm4gTkZfQUNDRVBUOworCX0KKworCS8qIE5vdCB3aG9sZSBUQ1AgaGVhZGVy PyAqLworCWlmICh0Y3BsZW4gPCBzaXplb2Yoc3RydWN0IHRjcGhkcikgfHwgdGNwbGVuIDwg dGNwaC0+ZG9mZiAqIDQpIHsKKwkJREVCVUdQKCJUQ1AgaGVhZGVyIGxlbmd0aCBpczsgdGNw bGVuPSV1IC4uXG4iLCAodW5zaWduZWQpIHRjcGxlbik7CisJCURFQlVHUCgicGFja2V0IGRv ZXMgbm90IGNvbnRhaW4gYSBjb21wbGV0ZSBUQ1AgaGVhZGVyLiBbc2tpcF1cbiIpOworCQly ZXR1cm4gTkZfQUNDRVBUOworCX0KKworCS8qIEZJWE1FOiBTb3VyY2Ugcm91dGUgSVAgb3B0 aW9uIHBhY2tldHMgLS1SUiAqLworCWlmICh0Y3BfdjRfY2hlY2sodGNwaCwgdGNwbGVuLCBp cGgtPnNhZGRyLCBpcGgtPmRhZGRyLAorCQkJIGNzdW1fcGFydGlhbCgoY2hhciAqKSB0Y3Bo LCB0Y3BsZW4sIDApKSkgeworCQlERUJVR1AoImNzdW07ICVwICV1ICV1LiV1LiV1LiV1ICV1 LiV1LiV1LiV1XG4iLAorCQkgICAgIHRjcGgsIHRjcGxlbiwgTklQUVVBRChpcGgtPnNhZGRy KSwKKwkJICAgICBOSVBRVUFEKGlwaC0+ZGFkZHIpKTsKKwkJREVCVUdQKCJbbm90ZTogZmFp bHVyZSB0byBnZXQgcGFzdCB0aGlzIGVycm9yIG1heSBpbmRpY2F0ZSBzb3VyY2Ugcm91dGlu Z11cbiIpOworCQlERUJVR1AoInBhY2tldCBjb250YWlucyBhIGJhZCBjaGVja3N1bS4gW3Nr aXBdXG4iKTsKKwkJcmV0dXJuIE5GX0FDQ0VQVDsKKwl9CisKKwkvKiBwZXJmb3JtIGRpcmVj dGlvbiBkZXBlbmRhbnQgcHJvdG9jb2wgd29yayAqLworCWlmIChkaXIgPT0gSVBfQ1RfRElS X09SSUdJTkFMKSB7CisKKwkJREVCVUdQKCJwYWNrZXQgaXMgZnJvbSB0aGUgaW5pdGlhdG9y LiBbY29udF1cbiIpOworCisJCS8qIFRlc3RzIGlmIHBhY2tldCBsZW4gaXMgb2sgKi8KKwkJ aWYgKCh0Y3BsZW4gLSAodGNwaC0+ZG9mZiAqIDQpKSAhPSAxNDApIHsKKwkJCURFQlVHUCgi cGFja2V0IGxlbmd0aCBpcyBub3QgY29ycmVjdC4gW3NraXBdXG4iKTsKKwkJCXJldHVybiBO Rl9BQ0NFUFQ7CisJCX0KKworCX0gZWxzZSB7CisKKwkJREVCVUdQKCJwYWNrZXQgaXMgZnJv bSB0aGUgcmVjZWl2ZXIuIFtjb250XVxuIik7CisKKwkJLyogVGVzdHMgaWYgcGFja2V0IGxl biBpcyBvayAqLworCQlpZiAoKHRjcGxlbiAtICh0Y3BoLT5kb2ZmICogNCkpICE9IDY0KSB7 CisJCQlERUJVR1AoInBhY2tldCBsZW5ndGggaXMgbm90IGNvcnJlY3QuIFtza2lwXVxuIik7 CisJCQlyZXR1cm4gTkZfQUNDRVBUOworCQl9CisJfQorCisJLyogR2V0IHRvIHRoZSBkYXRh ICovCisJZGF0YSsrOworCisJLyogQ2hlY2sgdGhlIENMRUFSQ0FTRSBkYXRhICovCisJY3Jw X3JldCA9IGNoZWNrX2NsZWFyY2FzZV9wYWNrZXQoZGF0YSwgZGlyLCBjdCwgcmVxdWVzdF9w X2xpc3RfdGNwKTsKKworCXJldHVybiBjcnBfcmV0OworCit9CisKKworc3RhdGljIHN0cnVj dCBpcF9jb25udHJhY2tfaGVscGVyIGNsZWFyY2FzZV9oZWxwZXJzW01BWF9QT1JUU107CisK K3N0YXRpYyB2b2lkIGZpbmkodm9pZCk7CisKKworc3RhdGljIGludCBfX2luaXQgaW5pdCh2 b2lkKQoreworCWludCBwb3J0LCByZXQ7CisJc3RhdGljIGNoYXIgbmFtZVsxMF07CisKKwor CS8qIElmIG5vIHBvcnQgZ2l2ZW4sIGRlZmF1bHQgdG8gc3RhbmRhcmQgQ0xFQVJDQVNFIHBv cnQgKi8KKwlpZiAocG9ydHNbMF0gPT0gMCkKKwkJcG9ydHNbMF0gPSBDTEVBUkNBU0VfUE9S VDsKKworCWZvciAocG9ydCA9IDA7IChwb3J0IDwgTUFYX1BPUlRTKSAmJiBwb3J0c1twb3J0 XTsgcG9ydCsrKSB7CisJCW1lbXNldCgmY2xlYXJjYXNlX2hlbHBlcnNbcG9ydF0sIDAsIHNp emVvZihzdHJ1Y3QgaXBfY29ubnRyYWNrX2hlbHBlcikpOworCisgICAgICAgICAgICAgICAg aWYgKHBvcnRzW3BvcnRdID09IENMRUFSQ0FTRV9QT1JUKQorICAgICAgICAgICAgICAgICAg ICAgICAgc3ByaW50ZihuYW1lLCAiY2xlYXJjYXNlIik7CisgICAgICAgICAgICAgICAgZWxz ZQorICAgICAgICAgICAgICAgICAgICAgICAgc3ByaW50ZihuYW1lLCAiY2xlYXJjYXNlLSVk IiwgcG9ydCk7CisKKwkJY2xlYXJjYXNlX2hlbHBlcnNbcG9ydF0ubmFtZSA9IG5hbWU7CisJ CWNsZWFyY2FzZV9oZWxwZXJzW3BvcnRdLm1lID0gVEhJU19NT0RVTEU7CisJCWNsZWFyY2Fz ZV9oZWxwZXJzW3BvcnRdLm1heF9leHBlY3RlZCA9IDE7CisJCWNsZWFyY2FzZV9oZWxwZXJz W3BvcnRdLmZsYWdzID0gSVBfQ1RfSEVMUEVSX0ZfUkVVU0VfRVhQRUNUOworCQljbGVhcmNh c2VfaGVscGVyc1twb3J0XS50aW1lb3V0ID0gMDsKKworCQljbGVhcmNhc2VfaGVscGVyc1tw b3J0XS50dXBsZS5kc3QucHJvdG9udW0gPSBJUFBST1RPX1RDUDsKKwkJY2xlYXJjYXNlX2hl bHBlcnNbcG9ydF0ubWFzay5kc3QucHJvdG9udW0gPSAweGZmZmY7CisKKwkJLyogQ0xFQVJD QVNFIGNhbiBjb21lIGZyb20gcG9ydHMgMDo2NTUzNSB0byBwb3J0c1twb3J0XSAoMTExKSAq LworCQljbGVhcmNhc2VfaGVscGVyc1twb3J0XS50dXBsZS5zcmMudS50Y3AucG9ydCA9IGh0 b25zKHBvcnRzW3BvcnRdKTsKKwkJY2xlYXJjYXNlX2hlbHBlcnNbcG9ydF0ubWFzay5zcmMu dS50Y3AucG9ydCA9IGh0b25zKDB4ZmZmZik7CisJCWNsZWFyY2FzZV9oZWxwZXJzW3BvcnRd Lm1hc2suZHN0LnUudGNwLnBvcnQgPSBodG9ucygweDApOworCisJCWNsZWFyY2FzZV9oZWxw ZXJzW3BvcnRdLmhlbHAgPSBoZWxwOworCisJCURFQlVHUCgicmVnaXN0ZXJpbmcgaGVscGVy IGZvciBwb3J0ICMlZDogJWQvVENQXG4iLCBwb3J0LCBwb3J0c1twb3J0XSk7CisJCURFQlVH UCgiaGVscGVyIG1hdGNoIGlwICAgJXUuJXUuJXUuJXU6JXUtPiV1LiV1LiV1LiV1OiV1XG4i LAorCQkJTklQUVVBRChjbGVhcmNhc2VfaGVscGVyc1twb3J0XS50dXBsZS5kc3QuaXApLAor CQkJbnRvaHMoY2xlYXJjYXNlX2hlbHBlcnNbcG9ydF0udHVwbGUuZHN0LnUudGNwLnBvcnQp LAorCQkJTklQUVVBRChjbGVhcmNhc2VfaGVscGVyc1twb3J0XS50dXBsZS5zcmMuaXApLAor CQkJbnRvaHMoY2xlYXJjYXNlX2hlbHBlcnNbcG9ydF0udHVwbGUuc3JjLnUudGNwLnBvcnQp KTsKKwkJREVCVUdQKCJoZWxwZXIgbWF0Y2ggbWFzayAldS4ldS4ldS4ldToldS0+JXUuJXUu JXUuJXU6JXVcbiIsCisJCQlOSVBRVUFEKGNsZWFyY2FzZV9oZWxwZXJzW3BvcnRdLm1hc2su ZHN0LmlwKSwKKwkJCW50b2hzKGNsZWFyY2FzZV9oZWxwZXJzW3BvcnRdLm1hc2suZHN0LnUu dGNwLnBvcnQpLAorCQkJTklQUVVBRChjbGVhcmNhc2VfaGVscGVyc1twb3J0XS5tYXNrLnNy Yy5pcCksCisJCQludG9ocyhjbGVhcmNhc2VfaGVscGVyc1twb3J0XS5tYXNrLnNyYy51LnRj cC5wb3J0KSk7CisKKwkJcmV0ID0gaXBfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcigmY2xl YXJjYXNlX2hlbHBlcnNbcG9ydF0pOworCisJCWlmIChyZXQpIHsKKwkJCXByaW50aygiRVJS T1IgcmVnaXN0ZXJpbmcgcG9ydCAlZFxuIiwKKwkJCQlwb3J0c1twb3J0XSk7CisJCQlmaW5p KCk7CisJCQlyZXR1cm4gLUVCVVNZOworCQl9CisJCXBvcnRzX25fYysrOworCX0KKwlyZXR1 cm4gMDsKK30KKworCisvKiBUaGlzIGZ1bmN0aW9uIGlzIGludGVudGlvbmFsbHkgX05PVF8g ZGVmaW5lZCBhcyBfX2V4aXQsIGJlY2F1c2UKKyAqIGl0IGlzIG5lZWRlZCBieSB0aGUgaW5p dCBmdW5jdGlvbiAqLworc3RhdGljIHZvaWQgZmluaSh2b2lkKQoreworCWludCBwb3J0Owor CisJREVCVUdQKCJjbGVhbmluZyByZXF1ZXN0IGxpc3RcbiIpOworCWNsZWFuX3JlcXVlc3Qo JnJlcXVlc3RfcF9saXN0X3RjcCk7CisKKwlmb3IgKHBvcnQgPSAwOyAocG9ydCA8IHBvcnRz X25fYykgJiYgcG9ydHNbcG9ydF07IHBvcnQrKykgeworCQlERUJVR1AoInVucmVnaXN0ZXJp bmcgcG9ydCAlZFxuIiwgcG9ydHNbcG9ydF0pOworCQlpcF9jb25udHJhY2tfaGVscGVyX3Vu cmVnaXN0ZXIoJmNsZWFyY2FzZV9oZWxwZXJzW3BvcnRdKTsKKwl9Cit9CisKKworbW9kdWxl X2luaXQoaW5pdCk7Cittb2R1bGVfZXhpdChmaW5pKTsKKworc3RydWN0IG1vZHVsZSAqaXBf Y29ubnRyYWNrX2NsZWFyY2FzZV90Y3AgPSBUSElTX01PRFVMRTsKK0VYUE9SVF9TWU1CT0wo cmVxdWVzdF9wX2xpc3RfdGNwKTsKK0VYUE9SVF9TWU1CT0woaXBfY29ubnRyYWNrX2NsZWFy Y2FzZV90Y3ApOworRVhQT1JUX1NZTUJPTChpcGN0X2NsZWFyY2FzZV90Y3BfbG9jayk7CmRp ZmYgLXJ1TiBwYXRjaC1vLW1hdGljLW5nLTIwMDQwNjIxL2Nvbm50cmFja19jbGVhcmNhc2Uv bGludXgvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19jbGVhcmNhc2VfdWRwLmMg c3JjL3BhdGNoLW8tbWF0aWMtbmctMjAwNDA2MjEvY29ubnRyYWNrX2NsZWFyY2FzZS9saW51 eC9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX2NsZWFyY2FzZV91ZHAuYwotLS0g cGF0Y2gtby1tYXRpYy1uZy0yMDA0MDYyMS9jb25udHJhY2tfY2xlYXJjYXNlL2xpbnV4L25l dC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfY2xlYXJjYXNlX3VkcC5jCTE5NzAtMDEt MDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyBzcmMvcGF0Y2gtby1tYXRpYy1uZy0y MDA0MDYyMS9jb25udHJhY2tfY2xlYXJjYXNlL2xpbnV4L25ldC9pcHY0L25ldGZpbHRlci9p cF9jb25udHJhY2tfY2xlYXJjYXNlX3VkcC5jCTIwMDQtMDgtMjQgMTU6MDc6NTUuMDAwMDAw MDAwICswMjAwCkBAIC0wLDAgKzEsNTE1IEBACisvKiBjbGVhcmNhc2UgZXh0ZW5zaW9uIGZv ciBJUCAoVURQKSBjb25uZWN0aW9uIHRyYWNraW5nLCBWZXJzaW9uIDIuMgorICogKEMpIDIw MDAgYnkgTWFyY2VsbyBCYXJib3NhIExpbWEgPG1hcmNlbG8ubGltYUBkY2MudW5pY2FtcC5i cj4KKyAqCS0gb3JpZ2luYWwgY2xlYXJjYXNlIHRyYWNraW5nIG1vZHVsZQorICoJLSAicmVj ZW50IiBjb25uZWN0aW9uIGhhbmRsaW5nIGZvciBrZXJuZWwgMi4zKyBuZXRmaWx0ZXIKKyAq CisgKiAoQykgMjAwMSBieSBSdXN0eSBSdXNzZWxsIDxydXN0eUBydXN0Y29ycC5jb20uYXU+ CisgKgktIHVwZ3JhZGVkIGNvbm50cmFjayBtb2R1bGVzIHRvIG9sZG5hdCBhcGkgLSBrZXJu ZWwgMi40LjArCisgKgorICogKEMpIDIwMDIsMjAwMyBieSBJYW4gKExhcnJ5KSBMYXR0ZXIg PElhbi5MYXR0ZXJAbXEuZWR1LmF1PgorICoJLSB1cGdyYWRlZCBjb25udHJhY2sgbW9kdWxl cyB0byBuZXduYXQgYXBpIC0ga2VybmVsIDIuNC4yMCsKKyAqCS0gZXh0ZW5kZWQgbWF0Y2hp bmcgdG8gc3VwcG9ydCBmaWx0ZXJpbmcgb24gcHJvY2VkdXJlcworICoKKyAqIGlwX2Nvbm50 cmFja19jbGVhcmNhc2VfdWRwLmMsdiAyLjIgMjAwMy8wMS8xMiAxODozMDowMAorICoKKyAq CVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp dCBhbmQvb3IKKyAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlCisgKglhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqCTIgb2YgdGhlIExpY2Vuc2UsIG9y IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKioKKyAqCU1vZHVsZSBs b2FkIHN5bnRheDoKKyAqCWluc21vZCBpcF9jb25udHJhY2tfY2xlYXJjYXNlX3VkcC5vIHBv cnRzPXBvcnQxLHBvcnQyLC4uLnBvcnQ8TUFYX1BPUlRTPgorICoKKyAqCVBsZWFzZSBnaXZl IHRoZSBwb3J0cyBvZiBhbGwgY2xlYXJjYXNlIHNlcnZlcnMgeW91IHdpc2ggdG8gY29ubmVj dCB0by4KKyAqCUlmIHlvdSBkb24ndCBzcGVjaWZ5IHBvcnRzLCB0aGUgZGVmYXVsdCB3aWxs IGJlIHBvcnQgMTExLgorICoqCisgKglOb3RlIHRvIGFsbDoKKyAqCisgKgljbGVhcmNhc2Vz IHNob3VsZCBub3QgYmUgZXhwb3NlZCB0byB0aGUgaW50ZXJuZXQgLSBhc2sgdGhlIFBlbnRh Z29uOworICoKKyAqCSAgIlRoZSB1bmlkZW50aWZpZWQgY3JhY2tlcnMgcGxlYWRlZCBndWls dHkgaW4gSnVseSB0byBjaGFyZ2VzCisgKgkgICBvZiBqdXZlbmlsZSBkZWxpbnF1ZW5jeSBz dGVtbWluZyBmcm9tIGEgc3RyaW5nIG9mIFBlbnRhZ29uCisgKgkgICBuZXR3b3JrIGludHJ1 c2lvbnMgaW4gRmVicnVhcnkuCisgKgorICoJICAgVGhlIHlvdXRocywgZ29pbmcgYnkgdGhl IG5hbWVzIFRvb1Nob3J0IGFuZCBNYWthdmVsaSwgdXNlZAorICoJICAgYSBjb21tb24gc2Vy dmVyIHNlY3VyaXR5IGhvbGUgdG8gYnJlYWsgaW4sIGFjY29yZGluZyB0bworICoJICAgRGFu ZSBKYXNwZXIsIG93bmVyIG9mIHRoZSBDYWxpZm9ybmlhIEludGVybmV0IHNlcnZpY2UKKyAq CSAgIHByb3ZpZGVyLCBTb25pYy4gVGhleSB1c2VkIHRoZSBob2xlLCBrbm93biBhcyB0aGUg J3N0YXRkJworICoJICAgZXhwbG9pdCwgdG8gYXR0ZW1wdCBtb3JlIHRoYW4gODAwIGJyZWFr LWlucywgSmFzcGVyIHNhaWQuIgorICoKKyAqCUZyb206IFdpcmVkIE5ld3M7ICJQZW50YWdv biBLaWRzIEtpY2tlZCBPZmYgR3JpZCIgLSBOb3YgNiwgMTk5OAorICoJVVJMOiAgaHR0cDov L3d3dy53aXJlZC5jb20vbmV3cy9wb2xpdGljcy8wLDEyODMsMTYwOTgsMDAuaHRtbAorICoq CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L25l dGZpbHRlci5oPgorI2luY2x1ZGUgPGxpbnV4L2lwLmg+CisjaW5jbHVkZSA8bmV0L2NoZWNr c3VtLmg+CisjaW5jbHVkZSA8bmV0L3VkcC5oPgorCisjaW5jbHVkZSA8YXNtL3BhcmFtLmg+ CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgor I2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKwor I2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2xvY2toZWxwLmg+CisjaW5jbHVkZSA8 bGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfdGFibGVzLmg+CisjaW5jbHVkZSA8bGludXgvbmV0 ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX2hlbHBlci5oPgorI2luY2x1ZGUgPGxpbnV4L25l dGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja19jbGVhcmNhc2UuaD4KKworI2RlZmluZSBNQVhf UE9SVFMgOAorc3RhdGljIGludCBwb3J0c1tNQVhfUE9SVFNdOworc3RhdGljIGludCBwb3J0 c19uX2MgPSAwOworCisjaWZkZWYgTU9EVUxFX1BBUk0KK01PRFVMRV9QQVJNKHBvcnRzLCAi MS0iIF9fTU9EVUxFX1NUUklORyhNQVhfUE9SVFMpICJpIik7CitNT0RVTEVfUEFSTV9ERVND KHBvcnRzLCAicG9ydCBudW1iZXJzIChUQ1AvVURQKSBvZiBjbGVhcmNhc2UgcG9ydG1hcHBl ciBzZXJ2ZXJzIik7CisjZW5kaWYKKworTU9EVUxFX0FVVEhPUigiTWFyY2VsbyBCYXJib3Nh IExpbWEgPG1hcmNlbG8ubGltYUBkY2MudW5pY2FtcC5icj4iKTsKK01PRFVMRV9ERVNDUklQ VElPTigiY2xlYXJjYXNlIFVEUCBjb25uZWN0aW9uIHRyYWNraW5nIG1vZHVsZSIpOworTU9E VUxFX0xJQ0VOU0UoIkdQTCIpOworCisjaWYgMAorI2RlZmluZSBERUJVR1AoZm9ybWF0LCBh cmdzLi4uKSBwcmludGsoS0VSTl9ERUJVRyAiaXBfY29ubnRyYWNrX2NsZWFyY2FzZV91ZHA6 ICIgXAorCQkJCQlmb3JtYXQsICMjIGFyZ3MpCisjZWxzZQorI2RlZmluZSBERUJVR1AoZm9y bWF0LCBhcmdzLi4uKQorI2VuZGlmCisKK0RFQ0xBUkVfUldMT0NLKGlwY3RfY2xlYXJjYXNl X3VkcF9sb2NrKTsKKyNkZWZpbmUgQVNTRVJUX1JFQURfTE9DSyh4KSBNVVNUX0JFX1JFQURf TE9DS0VEKCZpcGN0X2NsZWFyY2FzZV91ZHBfbG9jaykKKyNkZWZpbmUgQVNTRVJUX1dSSVRF X0xPQ0soeCkgTVVTVF9CRV9XUklURV9MT0NLRUQoJmlwY3RfY2xlYXJjYXNlX3VkcF9sb2Nr KQorCisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvbGlzdGhlbHAuaD4KKworLyog Rm9yIGZ1dHVyZSBjb25lY3Rpb25zIGNsZWFyY2FzZSwgdXNpbmcgY2xpZW50J3MgY2FjaGUg YmluZGluZ3MKKyAqIEknbGwgdXNlIGlwX2Nvbm50cmFja19sb2NrIHRvIGxvY2sgdGhlc2Ug bGlzdHMgICAgICAgICAgICovCisKK0xJU1RfSEVBRChyZXF1ZXN0X3BfbGlzdF91ZHApOwor CisKK3N0YXRpYyB2b2lkIGRlbGV0ZV9yZXF1ZXN0X3AodW5zaWduZWQgbG9uZyByZXF1ZXN0 X3BfdWwpCit7CisJc3RydWN0IHJlcXVlc3RfcCAqcCA9ICh2b2lkICopcmVxdWVzdF9wX3Vs OworCisJV1JJVEVfTE9DSygmaXBjdF9jbGVhcmNhc2VfdWRwX2xvY2spOworCUxJU1RfREVM RVRFKCZyZXF1ZXN0X3BfbGlzdF91ZHAsIHApOworCVdSSVRFX1VOTE9DSygmaXBjdF9jbGVh cmNhc2VfdWRwX2xvY2spOworCWtmcmVlKHApOworCXJldHVybjsKK30KKworCitzdGF0aWMg dm9pZCByZXFfY2woc3RydWN0IHJlcXVlc3RfcCAqIHIpCit7CisJV1JJVEVfTE9DSygmaXBj dF9jbGVhcmNhc2VfdWRwX2xvY2spOworCWRlbF90aW1lcigmci0+dGltZW91dCk7CisJTElT VF9ERUxFVEUoJnJlcXVlc3RfcF9saXN0X3VkcCwgcik7CisJV1JJVEVfVU5MT0NLKCZpcGN0 X2NsZWFyY2FzZV91ZHBfbG9jayk7CisJa2ZyZWUocik7CisJcmV0dXJuOworfQorCisKK3N0 YXRpYyB2b2lkIGNsZWFuX3JlcXVlc3Qoc3RydWN0IGxpc3RfaGVhZCAqbGlzdCkKK3sKKwlz dHJ1Y3QgbGlzdF9oZWFkICpmaXJzdCA9IGxpc3QtPnByZXY7CisJc3RydWN0IGxpc3RfaGVh ZCAqdGVtcCA9IGxpc3QtPm5leHQ7CisJc3RydWN0IGxpc3RfaGVhZCAqYXV4OworCisJaWYg KGxpc3RfZW1wdHkobGlzdCkpCisJCXJldHVybjsKKworCXdoaWxlIChmaXJzdCAhPSB0ZW1w KSB7CisJCWF1eCA9IHRlbXAtPm5leHQ7CisJCXJlcV9jbCgoc3RydWN0IHJlcXVlc3RfcCAq KXRlbXApOworCQl0ZW1wID0gYXV4OworCX0KKwlyZXFfY2woKHN0cnVjdCByZXF1ZXN0X3Ag Kil0ZW1wKTsKKwlyZXR1cm47Cit9CisKKworc3RhdGljIHZvaWQgYWxsb2NfcmVxdWVzdF9w KHVfaW50MzJfdCB4aWQsIHVfaW50MTZfdCBwcm90bywgdV9pbnQzMl90IGlwLAorCQkgICAg IHVfaW50MTZfdCBwb3J0KQoreworCXN0cnVjdCByZXF1ZXN0X3AgKnJlcV9wOworCisJLyog VmVyaWZpZXMgaWYgZW50cnkgYWxyZWFkeSBleGlzdHMgKi8KKwlXUklURV9MT0NLKCZpcGN0 X2NsZWFyY2FzZV91ZHBfbG9jayk7CisJcmVxX3AgPSBMSVNUX0ZJTkQoJnJlcXVlc3RfcF9s aXN0X3VkcCwgcmVxdWVzdF9wX2NtcCwKKwkJc3RydWN0IHJlcXVlc3RfcCAqLCB4aWQsIGlw LCBwb3J0KTsKKworCWlmIChyZXFfcCkgeworCQkvKiBSZWZyZXNoIHRpbWVvdXQgKi8KKwkJ aWYgKGRlbF90aW1lcigmcmVxX3AtPnRpbWVvdXQpKSB7CisJCQlyZXFfcC0+dGltZW91dC5l eHBpcmVzID0gamlmZmllcyArIEVYUDsKKwkJCWFkZF90aW1lcigmcmVxX3AtPnRpbWVvdXQp OworCQl9CisJCVdSSVRFX1VOTE9DSygmaXBjdF9jbGVhcmNhc2VfdWRwX2xvY2spOworCQly ZXR1cm47CisKKwl9CisJV1JJVEVfVU5MT0NLKCZpcGN0X2NsZWFyY2FzZV91ZHBfbG9jayk7 CisKKwkvKiBBbGxvY2F0ZSBuZXcgcmVxdWVzdF9wICovCisJcmVxX3AgPSAoc3RydWN0IHJl cXVlc3RfcCAqKSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcmVxdWVzdF9wKSwgR0ZQX0FUT01J Qyk7CisJaWYgKCFyZXFfcCkgeworIAkJREVCVUdQKCJjYW4ndCBhbGxvY2F0ZSByZXF1ZXN0 X3BcbiIpOworCQlyZXR1cm47CisJfQorCSpyZXFfcCA9ICgoc3RydWN0IHJlcXVlc3RfcCkg e3sgTlVMTCwgTlVMTCB9LCB4aWQsIGlwLCBwb3J0LCBwcm90bywKKwkJeyB7IE5VTEwsIE5V TEwgfSwgamlmZmllcyArIEVYUCwgKHVuc2lnbmVkIGxvbmcpcmVxX3AsCisJCQlOVUxMIH19 KTsKKworCS8qIEluaXRpYWxpemUgdGltZXIgKi8KKwlpbml0X3RpbWVyKCZyZXFfcC0+dGlt ZW91dCk7CisJcmVxX3AtPnRpbWVvdXQuZnVuY3Rpb24gPSBkZWxldGVfcmVxdWVzdF9wOwor CWFkZF90aW1lcigmcmVxX3AtPnRpbWVvdXQpOworCisJLyogUHV0IGluIGxpc3QgKi8KKwlX UklURV9MT0NLKCZpcGN0X2NsZWFyY2FzZV91ZHBfbG9jayk7CisJbGlzdF9wcmVwZW5kKCZy ZXF1ZXN0X3BfbGlzdF91ZHAsIHJlcV9wKTsKKwlXUklURV9VTkxPQ0soJmlwY3RfY2xlYXJj YXNlX3VkcF9sb2NrKTsKKwlyZXR1cm47CisKK30KKworCitzdGF0aWMgaW50IGNoZWNrX2Ns ZWFyY2FzZV9wYWNrZXQoY29uc3QgdV9pbnQzMl90ICpkYXRhLAorCQkJaW50IGRpciwgc3Ry dWN0IGlwX2Nvbm50cmFjayAqY3QsCisJCQlzdHJ1Y3QgbGlzdF9oZWFkIHJlcXVlc3RfcF9s aXN0KQoreworCXN0cnVjdCByZXF1ZXN0X3AgKnJlcV9wOworCXVfaW50MzJfdCB4aWQ7CisJ dV9pbnQzMl90IG10eXBlOworCXN0cnVjdCBpcF9jb25udHJhY2tfZXhwZWN0IGV4cGVjdCwg KmV4cCA9ICZleHBlY3Q7CisKKwkvKiBUcmFuc2xzdGlvbidzIGJ1ZmZlciBmb3IgWERSICov CisJdV9pbnQzMl90IHBvcnRfYnVmOworCisKKwkvKiBHZXQgWElEIGFuZCBNZXNzYWdlIFR5 cGUqLworCXhpZCA9ICpkYXRhOworCWRhdGErKzsKKwltdHlwZSA9IG50b2hsKCpkYXRhKTsK KwlkYXRhLS07CisKKyAJLyogVGhpcyBkb2VzIHNhbml0eSBjaGVja2luZyBvbiBjbGVhcmNh c2UgcGF5bG9hZHMsCisJICogYW5kIHBlcm1pdHMgb25seSB0aGUgY2xlYXJjYXNlICJnZXQg cG9ydCIgKDMpCisJICogaW4gYXV0aG9yaXNlZCBwcm9jZWR1cmVzIGluIGNsaWVudAorCSAq IGNvbW11bmljYXRpb25zIHdpdGggdGhlIHBvcnRtYXBwZXIuCisJICovCisKKwkvKiBwZXJm b3JtIGRpcmVjdGlvbiBkZXBlbmRhbnQgY2xlYXJjYXNlIHdvcmsgKi8KKwlpZiAoZGlyID09 IElQX0NUX0RJUl9PUklHSU5BTCkgeworCisJCWRhdGEgKz0gNTsKKworCQkvKiBHZXQgY2xl YXJjYXNlIHJlcXVlc3RvciAqLworCQlpZiAoSVhEUl9HRVRfSU5UMzIoZGF0YSkgIT0gMykg eworCQkJREVCVUdQKCJjbGVhcmNhc2UgcGFja2V0IGNvbnRhaW5zIGFuIGludmFsaWQgKG5v biBcImdldFwiKSByZXF1ZXN0b3IuIFtza2lwXSBcbiIpOworCQkJcmV0dXJuIE5GX0FDQ0VQ VDsKKwkJfQorCQlERUJVR1AoImNsZWFyY2FzZSBwYWNrZXQgY29udGFpbnMgYSBcImdldFwi IHJlcXVlc3Rvci4gW2NvbnRdXG4iKTsKKworCQlkYXRhKys7CisKKwkJLyogSnVtcCBDcmVk ZW50aWFscyBhbmQgVmVyZmlmaWVyICovCisJCWRhdGEgPSBkYXRhICsgSVhEUl9HRVRfSU5U MzIoZGF0YSkgKyAyOworCQlkYXRhID0gZGF0YSArIElYRFJfR0VUX0lOVDMyKGRhdGEpICsg MjsKKworCQkvKiBHZXQgY2xlYXJjYXNlIHByb2NlZHVyZSAqLworCQlERUJVR1AoImNsZWFy Y2FzZSBwYWNrZXQgY29udGFpbnMgcHJvY2VkdXJlIHJlcXVlc3QgWyV1XS4gW2NvbnRdXG4i LAorCQkJKHVuc2lnbmVkIGludClJWERSX0dFVF9JTlQzMihkYXRhKSk7CisKKwkJLyogR2V0 IGNsZWFyY2FzZSBwcm90b2NvbCBhbmQgc3RvcmUgYWdhaW5zdCBjbGllbnQgcGFyYW1ldGVy cyAqLworCQlkYXRhID0gZGF0YSArIDI7CisJCWFsbG9jX3JlcXVlc3RfcCh4aWQsIElYRFJf R0VUX0lOVDMyKGRhdGEpLCBjdC0+dHVwbGVoYXNoW2Rpcl0udHVwbGUuc3JjLmlwLAorCQkJ CWN0LT50dXBsZWhhc2hbZGlyXS50dXBsZS5zcmMudS5hbGwpOworCisJCURFQlVHUCgiYWxs b2NhdGVkIGNsZWFyY2FzZSByZXFfcCBmb3IgeGlkPSV1ICV1LiV1LiV1LiV1OiV1XG4iLAor CQkJbnRvaGwoeGlkKSwKKwkJCU5JUFFVQUQoY3QtPnR1cGxlaGFzaFtkaXJdLnR1cGxlLnNy Yy5pcCksCisJCQludG9ocyhjdC0+dHVwbGVoYXNoW2Rpcl0udHVwbGUuc3JjLnUuYWxsKSk7 CisKKwkvLwlERUJVR1AoImFsbG9jYXRlZCBjbGVhcmNhc2UgcmVxdWVzdCBmb3IgcHJvdG9j b2wgJXUuIFtkb25lXVxuIiwKKwkvLwkJKHVuc2lnbmVkIGludClJWERSX0dFVF9JTlQzMihk YXRhKSk7CisKKwl9IGVsc2UgeworCisJCS8qIENoZWNrIGZvciByZXR1cm5pbmcgcGFja2V0 J3Mgc3RvcmVkIGNvdW50ZXJwYXJ0ICovCisJCXJlcV9wID0gTElTVF9GSU5EKCZyZXF1ZXN0 X3BfbGlzdF91ZHAsIHJlcXVlc3RfcF9jbXAsCisJCQkJICBzdHJ1Y3QgcmVxdWVzdF9wICos IHhpZCwKKwkJCQkgIGN0LT50dXBsZWhhc2hbIWRpcl0udHVwbGUuc3JjLmlwLAorCQkJCSAg Y3QtPnR1cGxlaGFzaFshZGlyXS50dXBsZS5zcmMudS50Y3AucG9ydCk7CisKKwkJLy8gTmV4 dCBDb25uZWN0aW9uIHdpbGwgYmUgVENQCisJCXJlcV9wLT5wcm90bz02OworCisJCS8qIERy b3AgdW5leHBlY3RlZCBwYWNrZXRzICovCisJCWlmICghcmVxX3ApIHsKKwkJCURFQlVHUCgi cGFja2V0IGlzIG5vdCBleHBlY3RlZC4gW3NraXBdXG4iKTsKKwkJCXJldHVybiBORl9BQ0NF UFQ7CisJCX0KKworCQkvKiBWZXJpZmllcyBpZiBwYWNrZXQgaXMgcmVhbGx5IGFuIGNsZWFy Y2FzZSByZXBseSBwYWNrZXQgKi8KKwkJZGF0YSsrOworCQlpZiAoSVhEUl9HRVRfSU5UMzIo ZGF0YSkgIT0gMSkgeworCQkJREVCVUdQKCJwYWNrZXQgaXMgbm90IGEgdmFsaWQgY2xlYXJj YXNlIHJlcGx5LiBbc2tpcF1cbiIpOworCQkJcmV0dXJuIE5GX0FDQ0VQVDsKKwkJfQorCisJ CS8qIElzIHN0YXR1cyBhY2NlcHQ/ICovCisJCWRhdGErKzsKKwkJaWYgKElYRFJfR0VUX0lO VDMyKGRhdGEpKSB7CisJCQlERUJVR1AoInBhY2tldCBpcyBub3QgYW4gY2xlYXJjYXNlIGFj Y2VwdC4gW3NraXBdXG4iKTsKKwkJCXJldHVybiBORl9BQ0NFUFQ7CisJCX0KKworCQkvKiBH ZXQgVmVyaWZpZXIgbGVuZ3RoLiBKdW1wIHZlcmlmaWVyICovCisJCWRhdGErKzsKKwkJZGF0 YSA9IGRhdGEgKyBJWERSX0dFVF9JTlQzMihkYXRhKSArIDI7CisKKwkJLyogSXMgYWNjcGV0 IHN0YXR1cyAic3VjY2VzcyI/ICovCisJCWlmIChJWERSX0dFVF9JTlQzMihkYXRhKSkgewor CQkJREVCVUdQKCJwYWNrZXQgaXMgbm90IGFuIGNsZWFyY2FzZSBhY2NlcHQgc3RhdHVzIG9m IHN1Y2Nlc3MuIFtza2lwXVxuIik7CisJCQlyZXR1cm4gTkZfQUNDRVBUOworCQl9CisKKwkJ LyogR2V0IHNlcnZlciBwb3J0IG51bWJlciAqLworCQkvL2RhdGErKzsKKwkJZGF0YSArPSAx MDsKKwkJcG9ydF9idWYgPSAodV9pbnQxNl90KSBJWERSX0dFVF9JTlQzMihkYXRhKTsKKwor CQkvKiBJZiBhIHBhY2tldCBoYXMgbWFkZSBpdCB0aGlzIGZhciB0aGVuIGl0IGRlc2VydmVz IGFuCisJCSAqIGV4cGVjdGF0aW9uIC4uLiAgaWYgcG9ydCA9PSAwLCB0aGVuIHRoaXMgc2Vy dmljZSBpcworCQkgKiBub3QgZ29pbmcgdG8gYmUgcmVnaXN0ZXJlZC4KKwkJICovCisJCWlm IChwb3J0X2J1ZikgeworCQkJREVCVUdQKCJwb3J0IGZvdW5kOiAldVxuIiwgcG9ydF9idWYp OworCisJCQltZW1zZXQoJmV4cGVjdCwgMCwgc2l6ZW9mKGV4cGVjdCkpOworCisJCQkvKiBX YXRjaCBvdXQsIFJhZGlvYWN0aXZlLU1hbiEgKi8KKwkJCWV4cC0+dHVwbGUuc3JjLmlwID0g Y3QtPnR1cGxlaGFzaFshZGlyXS50dXBsZS5zcmMuaXA7CisJCQlleHAtPnR1cGxlLmRzdC5p cCA9IGN0LT50dXBsZWhhc2hbIWRpcl0udHVwbGUuZHN0LmlwOworCQkJZXhwLT5tYXNrLnNy Yy5pcCA9IDB4ZmZmZmZmZmY7CisJCQlleHAtPm1hc2suZHN0LmlwID0gMHhmZmZmZmZmZjsK KworCQkJREVCVUdQKCJyZXFfcC0+cHJvdG86ICV1XG4iLHJlcV9wLT5wcm90byk7CisKKwkJ CXN3aXRjaCAocmVxX3AtPnByb3RvKSB7CisJCQkJY2FzZSBJUFBST1RPX1VEUDoKKwkJCQkJ ZXhwLT50dXBsZS5zcmMudS51ZHAucG9ydCA9IDA7CisJCQkJCWV4cC0+dHVwbGUuZHN0LnUu dWRwLnBvcnQgPSBodG9ucyhwb3J0X2J1Zik7CisJCQkJCWV4cC0+dHVwbGUuZHN0LnByb3Rv bnVtID0gSVBQUk9UT19VRFA7CisJCQkJCWV4cC0+bWFzay5zcmMudS51ZHAucG9ydCA9IDA7 CisJCQkJCWV4cC0+bWFzay5kc3QudS51ZHAucG9ydCA9IGh0b25zKDB4ZmZmZik7CisJCQkJ CWV4cC0+bWFzay5kc3QucHJvdG9udW0gPSAweGZmZmY7CisJCQkJCWJyZWFrOworCisJCQkJ Y2FzZSBJUFBST1RPX1RDUDoKKwkJCQkJZXhwLT50dXBsZS5zcmMudS50Y3AucG9ydCA9IDA7 CisJCQkJCWV4cC0+dHVwbGUuZHN0LnUudGNwLnBvcnQgPSBodG9ucyhwb3J0X2J1Zik7CisJ CQkJCWV4cC0+dHVwbGUuZHN0LnByb3RvbnVtID0gSVBQUk9UT19UQ1A7CisJCQkJCWV4cC0+ bWFzay5zcmMudS50Y3AucG9ydCA9IDA7CisJCQkJCWV4cC0+bWFzay5kc3QudS50Y3AucG9y dCA9IGh0b25zKDB4ZmZmZik7CisJCQkJCWV4cC0+bWFzay5kc3QucHJvdG9udW0gPSAweGZm ZmY7CisJCQkJCWJyZWFrOworCQkJfQorCQkJZXhwLT5leHBlY3RmbiA9IE5VTEw7CisKKwkJ CWlwX2Nvbm50cmFja19leHBlY3RfcmVsYXRlZChjdCwgJmV4cGVjdCk7CisKKwkJCURFQlVH UCgiZXhwZWN0IHJlbGF0ZWQgaXAgICAldS4ldS4ldS4ldTowLSV1LiV1LiV1LiV1OiV1IHBy b3RvPSV1XG4iLAorCQkJCU5JUFFVQUQoZXhwLT50dXBsZS5zcmMuaXApLAorCQkJCU5JUFFV QUQoZXhwLT50dXBsZS5kc3QuaXApLAorCQkJCXBvcnRfYnVmLCByZXFfcC0+cHJvdG8pOwor CisJCQlERUJVR1AoImV4cGVjdCByZWxhdGVkIG1hc2sgJXUuJXUuJXUuJXU6MC0ldS4ldS4l dS4ldTo2NTUzNSBwcm90bz0ldVxuIiwKKwkJCQlOSVBRVUFEKGV4cC0+bWFzay5zcmMuaXAp LAorCQkJCU5JUFFVQUQoZXhwLT5tYXNrLmRzdC5pcCksCisJCQkJZXhwLT5tYXNrLmRzdC5w cm90b251bSk7CisKKwkJfQorCisJCXJlcV9jbChyZXFfcCk7CisKKwkJREVCVUdQKCJwYWNr ZXQgZXZhbHVhdGVkLiBbZXhwZWN0XVxuIik7CisJCXJldHVybiBORl9BQ0NFUFQ7CisJfQor CisJcmV0dXJuIE5GX0FDQ0VQVDsKKworfQorCisKKy8qIGNsZWFyY2FzZSBVRFAgaGVscGVy ICovCitzdGF0aWMgaW50IGhlbHAoY29uc3Qgc3RydWN0IGlwaGRyICppcGgsIHNpemVfdCBs ZW4sCisJCXN0cnVjdCBpcF9jb25udHJhY2sgKmN0LCBlbnVtIGlwX2Nvbm50cmFja19pbmZv IGN0aW5mbykKK3sKKwlzdHJ1Y3QgdWRwaGRyICp1ZHBoID0gKHZvaWQgKikgaXBoICsgaXBo LT5paGwgKiA0OworCWNvbnN0IHVfaW50MzJfdCAqZGF0YSA9IChjb25zdCB1X2ludDMyX3Qg Kil1ZHBoICsgMjsKKwlzaXplX3QgdWRwbGVuID0gbGVuIC0gaXBoLT5paGwgKiA0OworCWlu dCBkaXIgPSBDVElORk8yRElSKGN0aW5mbyk7CisJaW50IGNycF9yZXQ7CisKKworCS8qIENo ZWNrc3VtICovCisJY29uc3QgdV9pbnQxNl90ICpjaHNtID0gKGNvbnN0IHVfaW50MTZfdCAq KXVkcGggKyAzOworCisKKwlERUJVR1AoIm5ldyBwYWNrZXQgdG8gZXZhbHVhdGUgLi5cbiIp OworCisJLyogTm90IHdob2xlIFVEUCBoZWFkZXI/ICovCisJaWYgKHVkcGxlbiA8IHNpemVv ZihzdHJ1Y3QgdWRwaGRyKSkgeworCQlERUJVR1AoIlVEUCBoZWFkZXIgbGVuZ3RoIGlzOyB1 ZHBsZW49JXUgLi5cbiIsICh1bnNpZ25lZCkgdWRwbGVuKTsKKwkJREVCVUdQKCJwYWNrZXQg ZG9lcyBub3QgY29udGFpbiBhIGNvbXBsZXRlIFVEUCBoZWFkZXIuIFtza2lwXVxuIik7CisJ CXJldHVybiBORl9BQ0NFUFQ7CisJfQorCisJLyogRklYTUU6IFNvdXJjZSByb3V0ZSBJUCBv cHRpb24gcGFja2V0cyAtLVJSICovCisJaWYgKCpjaHNtKSB7CisJCWlmIChjc3VtX3RjcHVk cF9tYWdpYyhpcGgtPnNhZGRyLCBpcGgtPmRhZGRyLCB1ZHBsZW4sIElQUFJPVE9fVURQLAor CQkgICAgY3N1bV9wYXJ0aWFsKChjaGFyICopdWRwaCwgdWRwbGVuLCAwKSkpIHsKKwkJCURF QlVHUCgiW25vdGU6IGZhaWx1cmUgdG8gZ2V0IHBhc3QgdGhpcyBlcnJvciBtYXkgaW5kaWNh dGUgc291cmNlIHJvdXRpbmddXG4iKTsKKwkJCURFQlVHUCgicGFja2V0IGNvbnRhaW5zIGEg YmFkIGNoZWNrc3VtLiBbc2tpcF1cbiIpOworCQkJcmV0dXJuIE5GX0FDQ0VQVDsKKwkJICAg fQorCX0KKworCS8qIHBlcmZvcm0gZGlyZWN0aW9uIGRlcGVuZGFudCBwcm90b2NvbCB3b3Jr ICovCisJaWYgKGRpciA9PSBJUF9DVF9ESVJfT1JJR0lOQUwpIHsKKworCQlERUJVR1AoInBh Y2tldCBpcyBmcm9tIHRoZSBpbml0aWF0b3IuIFtjb250XVxuIik7CisKKwkJLyogVGVzdHMg aWYgcGFja2V0IGxlbiBpcyBvayAqLworCQlpZiAoKHVkcGxlbiAtIHNpemVvZihzdHJ1Y3Qg dWRwaGRyKSkgIT0gMTQwKSB7CisJCQlERUJVR1AoInBhY2tldCBsZW5ndGggaXMgbm90IGNv cnJlY3QuIFtza2lwXVxuIik7CisJCQlyZXR1cm4gTkZfQUNDRVBUOworCQl9CisKKwl9IGVs c2UgeworCisJCURFQlVHUCgicGFja2V0IGlzIGZyb20gdGhlIHJlY2VpdmVyLiBbY29udF1c biIpOworCisJCS8qIFVudGlsIHRoZXJlJ3MgYmVlbiB0cmFmZmljIGJvdGggd2F5cywgZG9u J3QgbG9vayBpbiBwYWNrZXRzLiAqLworCQlpZiAoY3RpbmZvICE9IElQX0NUX0VTVEFCTElT SEVEICsgSVBfQ1RfSVNfUkVQTFkpIHsKKwkJCURFQlVHUCgiY29ubmVjdGlvbiB0cmFja2lu ZyBzdGF0ZSBpczsgY3RpbmZvPSV1IC4uXG4iLCBjdGluZm8pOworCQkJREVCVUdQKCJbbm90 ZTogZmFpbHVyZSB0byBnZXQgcGFzdCB0aGlzIGVycm9yIG1heSBpbmRpY2F0ZSBhc3ltbWV0 cmljIHJvdXRpbmddXG4iKTsKKwkJCURFQlVHUCgicGFja2V0IGlzIG5vdCB5ZXQgcGFydCBv ZiBhIHR3byB3YXkgc3RyZWFtLiBbc2tpcF1cbiIpOworCQkJcmV0dXJuIE5GX0FDQ0VQVDsK KwkJfQorCisJCS8qIFRlc3RzIGlmIHBhY2tldCBsZW4gaXMgb2sgKi8KKwkJCWlmICgodWRw bGVuIC0gc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpKSAhPSA2NCkgeworCQkJREVCVUdQKCJwYWNr ZXQgbGVuZ3RoIGlzIG5vdCBjb3JyZWN0LiBbc2tpcF1cbiIpOworCQkJcmV0dXJuIE5GX0FD Q0VQVDsKKwkJfQorCisJfQorCisJLyogR2V0IHRvIHRoZSBkYXRhICovCisJLyogdWRwICpk YXRhID09ICpjb3JyZWN0ICovCisKKwkvKiBDaGVjayB0aGUgY2xlYXJjYXNlIGRhdGEgKi8K KwljcnBfcmV0ID0gY2hlY2tfY2xlYXJjYXNlX3BhY2tldChkYXRhLCBkaXIsIGN0LCByZXF1 ZXN0X3BfbGlzdF91ZHApOworCisJcmV0dXJuIGNycF9yZXQ7CisKK30KKworCitzdGF0aWMg c3RydWN0IGlwX2Nvbm50cmFja19oZWxwZXIgY2xlYXJjYXNlX2hlbHBlcnNbTUFYX1BPUlRT XTsKKworc3RhdGljIHZvaWQgZmluaSh2b2lkKTsKKworCitzdGF0aWMgaW50IF9faW5pdCBp bml0KHZvaWQpCit7CisJaW50IHBvcnQsIHJldDsKKwlzdGF0aWMgY2hhciBuYW1lWzEwXTsK KworCisJLyogSWYgbm8gcG9ydCBnaXZlbiwgZGVmYXVsdCB0byBzdGFuZGFyZCBjbGVhcmNh c2UgcG9ydCAqLworCWlmIChwb3J0c1swXSA9PSAwKQorCQlwb3J0c1swXSA9IENMRUFSQ0FT RV9QT1JUOworCisJZm9yIChwb3J0ID0gMDsgKHBvcnQgPCBNQVhfUE9SVFMpICYmIHBvcnRz W3BvcnRdOyBwb3J0KyspIHsKKwkJbWVtc2V0KCZjbGVhcmNhc2VfaGVscGVyc1twb3J0XSwg MCwgc2l6ZW9mKHN0cnVjdCBpcF9jb25udHJhY2tfaGVscGVyKSk7CisKKyAgICAgICAgICAg ICAgICBpZiAocG9ydHNbcG9ydF0gPT0gQ0xFQVJDQVNFX1BPUlQpCisgICAgICAgICAgICAg ICAgICAgICAgICBzcHJpbnRmKG5hbWUsICJjbGVhcmNhc2UiKTsKKyAgICAgICAgICAgICAg ICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKG5hbWUsICJjbGVhcmNh c2UtJWQiLCBwb3J0KTsKKworCQljbGVhcmNhc2VfaGVscGVyc1twb3J0XS5uYW1lID0gbmFt ZTsKKwkJY2xlYXJjYXNlX2hlbHBlcnNbcG9ydF0ubWUgPSBUSElTX01PRFVMRTsKKwkJY2xl YXJjYXNlX2hlbHBlcnNbcG9ydF0ubWF4X2V4cGVjdGVkID0gMTsKKwkJY2xlYXJjYXNlX2hl bHBlcnNbcG9ydF0uZmxhZ3MgPSBJUF9DVF9IRUxQRVJfRl9SRVVTRV9FWFBFQ1Q7CisJCWNs ZWFyY2FzZV9oZWxwZXJzW3BvcnRdLnRpbWVvdXQgPSAwOworCisJCWNsZWFyY2FzZV9oZWxw ZXJzW3BvcnRdLnR1cGxlLmRzdC5wcm90b251bSA9IElQUFJPVE9fVURQOworCQljbGVhcmNh c2VfaGVscGVyc1twb3J0XS5tYXNrLmRzdC5wcm90b251bSA9IDB4ZmZmZjsKKworCQkvKiBj bGVhcmNhc2UgY2FuIGNvbWUgZnJvbSBwb3J0cyAwOjY1NTM1IHRvIHBvcnRzW3BvcnRdICgx MTEpICovCisJCWNsZWFyY2FzZV9oZWxwZXJzW3BvcnRdLnR1cGxlLnNyYy51LnVkcC5wb3J0 ID0gaHRvbnMocG9ydHNbcG9ydF0pOworCQljbGVhcmNhc2VfaGVscGVyc1twb3J0XS5tYXNr LnNyYy51LnVkcC5wb3J0ID0gaHRvbnMoMHhmZmZmKTsKKwkJY2xlYXJjYXNlX2hlbHBlcnNb cG9ydF0ubWFzay5kc3QudS51ZHAucG9ydCA9IGh0b25zKDB4MCk7CisKKwkJY2xlYXJjYXNl X2hlbHBlcnNbcG9ydF0uaGVscCA9IGhlbHA7CisKKwkJREVCVUdQKCJyZWdpc3RlcmluZyBo ZWxwZXIgZm9yIHBvcnQgIyVkOiAlZC9VRFBcbiIsIHBvcnQsIHBvcnRzW3BvcnRdKTsKKwkJ REVCVUdQKCJoZWxwZXIgbWF0Y2ggaXAgICAldS4ldS4ldS4ldToldS0+JXUuJXUuJXUuJXU6 JXVcbiIsCisJCQlOSVBRVUFEKGNsZWFyY2FzZV9oZWxwZXJzW3BvcnRdLnR1cGxlLmRzdC5p cCksCisJCQludG9ocyhjbGVhcmNhc2VfaGVscGVyc1twb3J0XS50dXBsZS5kc3QudS51ZHAu cG9ydCksCisJCQlOSVBRVUFEKGNsZWFyY2FzZV9oZWxwZXJzW3BvcnRdLnR1cGxlLnNyYy5p cCksCisJCQludG9ocyhjbGVhcmNhc2VfaGVscGVyc1twb3J0XS50dXBsZS5zcmMudS51ZHAu cG9ydCkpOworCQlERUJVR1AoImhlbHBlciBtYXRjaCBtYXNrICV1LiV1LiV1LiV1OiV1LT4l dS4ldS4ldS4ldToldVxuIiwKKwkJCU5JUFFVQUQoY2xlYXJjYXNlX2hlbHBlcnNbcG9ydF0u bWFzay5kc3QuaXApLAorCQkJbnRvaHMoY2xlYXJjYXNlX2hlbHBlcnNbcG9ydF0ubWFzay5k c3QudS51ZHAucG9ydCksCisJCQlOSVBRVUFEKGNsZWFyY2FzZV9oZWxwZXJzW3BvcnRdLm1h c2suc3JjLmlwKSwKKwkJCW50b2hzKGNsZWFyY2FzZV9oZWxwZXJzW3BvcnRdLm1hc2suc3Jj LnUudWRwLnBvcnQpKTsKKworCQlyZXQgPSBpcF9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVy KCZjbGVhcmNhc2VfaGVscGVyc1twb3J0XSk7CisKKwkJaWYgKHJldCkgeworCQkJcHJpbnRr KCJFUlJPUiByZWdpc3RlcmluZyBwb3J0ICVkXG4iLAorCQkJCXBvcnRzW3BvcnRdKTsKKwkJ CWZpbmkoKTsKKwkJCXJldHVybiAtRUJVU1k7CisJCX0KKwkJcG9ydHNfbl9jKys7CisJfQor CXJldHVybiAwOworfQorCisKKy8qIFRoaXMgZnVuY3Rpb24gaXMgaW50ZW50aW9uYWxseSBf Tk9UXyBkZWZpbmVkIGFzIF9fZXhpdCwgYmVjYXVzZQorICogaXQgaXMgbmVlZGVkIGJ5IHRo ZSBpbml0IGZ1bmN0aW9uICovCitzdGF0aWMgdm9pZCBmaW5pKHZvaWQpCit7CisJaW50IHBv cnQ7CisKKwlERUJVR1AoImNsZWFuaW5nIHJlcXVlc3QgbGlzdFxuIik7CisJY2xlYW5fcmVx dWVzdCgmcmVxdWVzdF9wX2xpc3RfdWRwKTsKKworCWZvciAocG9ydCA9IDA7IChwb3J0IDwg cG9ydHNfbl9jKSAmJiBwb3J0c1twb3J0XTsgcG9ydCsrKSB7CisJCURFQlVHUCgidW5yZWdp c3RlcmluZyBwb3J0ICVkXG4iLCBwb3J0c1twb3J0XSk7CisJCWlwX2Nvbm50cmFja19oZWxw ZXJfdW5yZWdpc3RlcigmY2xlYXJjYXNlX2hlbHBlcnNbcG9ydF0pOworCX0KK30KKworCitt b2R1bGVfaW5pdChpbml0KTsKK21vZHVsZV9leGl0KGZpbmkpOworCitzdHJ1Y3QgbW9kdWxl ICppcF9jb25udHJhY2tfY2xlYXJjYXNlX3VkcCA9IFRISVNfTU9EVUxFOworRVhQT1JUX1NZ TUJPTChyZXF1ZXN0X3BfbGlzdF91ZHApOworRVhQT1JUX1NZTUJPTChpcF9jb25udHJhY2tf Y2xlYXJjYXNlX3VkcCk7CitFWFBPUlRfU1lNQk9MKGlwY3RfY2xlYXJjYXNlX3VkcF9sb2Nr KTsKKwo= --STEFAN412c7a4432b2--