Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:34058 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 48865 invoked by uid 1010); 17 Dec 2007 09:52:45 -0000 Delivered-To: ezmlm-scan-internals@lists.php.net Delivered-To: ezmlm-internals@lists.php.net Received: (qmail 48849 invoked from network); 17 Dec 2007 09:52:44 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 17 Dec 2007 09:52:44 -0000 Authentication-Results: pb1.pair.com header.from=dmitry@zend.com; sender-id=pass Authentication-Results: pb1.pair.com smtp.mail=dmitry@zend.com; spf=pass; sender-id=pass Received-SPF: pass (pb1.pair.com: domain zend.com designates 212.25.124.162 as permitted sender) X-PHP-List-Original-Sender: dmitry@zend.com X-Host-Fingerprint: 212.25.124.162 mail.zend.com Linux 2.5 (sometimes 2.4) (4) Received: from [212.25.124.162] ([212.25.124.162:58022] helo=mail.zend.com) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id 9A/C2-23767-5E646674 for ; Mon, 17 Dec 2007 04:52:44 -0500 Received: (qmail 25415 invoked from network); 17 Dec 2007 09:52:34 -0000 Received: from internal.zend.office (HELO ?127.0.0.1?) (10.1.1.1) by internal.zend.office with SMTP; 17 Dec 2007 09:52:34 -0000 Message-ID: <476646E0.5090608@zend.com> Date: Mon, 17 Dec 2007 12:52:32 +0300 User-Agent: Thunderbird 2.0.0.9 (Windows/20071031) MIME-Version: 1.0 To: Derick Rethans CC: PHP Developers Mailing List References: <698DE66518E7CA45812BD18E807866CEF88FDD@us-ex1.zend.net> <47550FAB.30002@daylessday.org> <698DE66518E7CA45812BD18E807866CEF890ED@us-ex1.zend.net> <475578BE.40908@daylessday.org> <4755A797.1020905@lerdorf.com> <-4460533375996444588@unknownmsgid> <698DE66518E7CA45812BD18E807866CEF89334@us-ex1.zend.net> <47570A20.8070901@zend.com> <698DE66518E7CA45812BD18E807866CEF895BF@us-ex1.zend.net> <4757D355.2060705@zend.com> <4757DA73.5070308@zend.com> <47598BAB.1080808@zend.com> <476157A6.4070400@zend.com> In-Reply-To: Content-Type: multipart/mixed; boundary="------------060901050603080804040903" Subject: Re: [PHP-DEV] Garbage collector patch From: dmitry@zend.com (Dmitry Stogov) --------------060901050603080804040903 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Didn't I send it to you? Dmitry. Derick Rethans wrote: > On Thu, 13 Dec 2007, Derick Rethans wrote: > >> On Thu, 13 Dec 2007, Dmitry Stogov wrote: >> >>> You test are enormous, but than you anyway. :) >>> I've found and fixed the problem. >>> >>> Now your test suite is passed with the following results: >>> >>> PHP_5_3: Tests: 7706, Failures: 45, Errors: 807, Skipped: 347 >>> >>> With GC: Tests: 7706, Failures: 45, Errors: 804, Skipped: 347 >>> >>> I've no idea why GC fixes three tests. (I can send you logs if you like) >> Yes, I'd appreciate that. And thanks for running them! Could you share >> the updated patch as well please? > > I'd like to play with it / test it - could you put the patch somewhere > please? And also the test logs as I am interested in why the GC patch > fixes things :) > > regards, > Derick > --------------060901050603080804040903 Content-Type: text/plain; name="gc-5.3.diff.txt" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="gc-5.3.diff.txt" SW5kZXg6IGNvbmZpZ3VyZS5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvcmVwb3NpdG9y eS9waHAtc3JjL2NvbmZpZ3VyZS5pbix2CnJldHJpZXZpbmcgcmV2aXNpb24gMS41NzkuMi41 Mi4yLjc3LjIuNgpkaWZmIC11IC1wIC1kIC1yMS41NzkuMi41Mi4yLjc3LjIuNiBjb25maWd1 cmUuaW4KLS0tIGNvbmZpZ3VyZS5pbgk2IE5vdiAyMDA3IDExOjUwOjUxIC0wMDAwCTEuNTc5 LjIuNTIuMi43Ny4yLjYKKysrIGNvbmZpZ3VyZS5pbgkxMyBEZWMgMjAwNyAxNzozOTowMSAt MDAwMApAQCAtMTMyNiw3ICsxMzI2LDcgQEAgUEhQX0FERF9TT1VSQ0VTKFplbmQsIFwKICAg ICB6ZW5kX3ZhcmlhYmxlcy5jIHplbmQuYyB6ZW5kX0FQSS5jIHplbmRfZXh0ZW5zaW9ucy5j IHplbmRfaGFzaC5jIFwKICAgICB6ZW5kX2xpc3QuYyB6ZW5kX2luZGVudC5jIHplbmRfYnVp bHRpbl9mdW5jdGlvbnMuYyB6ZW5kX3NwcmludGYuYyBcCiAgICAgemVuZF9pbmkuYyB6ZW5k X3Fzb3J0LmMgemVuZF9tdWx0aWJ5dGUuYyB6ZW5kX3RzX2hhc2guYyB6ZW5kX3N0cmVhbS5j IFwKLSAgICB6ZW5kX2l0ZXJhdG9ycy5jIHplbmRfaW50ZXJmYWNlcy5jIHplbmRfZXhjZXB0 aW9ucy5jIHplbmRfc3RydG9kLmMpCisgICAgemVuZF9pdGVyYXRvcnMuYyB6ZW5kX2ludGVy ZmFjZXMuYyB6ZW5kX2V4Y2VwdGlvbnMuYyB6ZW5kX3N0cnRvZC5jIHplbmRfZ2MuYykKIAog aWYgdGVzdCAtciAiJGFic19zcmNkaXIvWmVuZC96ZW5kX29iamVjdHMuYyI7IHRoZW4KICAg UEhQX0FERF9TT1VSQ0VTKFplbmQsIHplbmRfb2JqZWN0cy5jIHplbmRfb2JqZWN0X2hhbmRs ZXJzLmMgemVuZF9vYmplY3RzX0FQSS5jIFwKSW5kZXg6IFplbmQvemVuZC5jCj09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KUkNTIGZpbGU6IC9yZXBvc2l0b3J5L1plbmRFbmdpbmUyL3plbmQuYyx2CnJldHJp ZXZpbmcgcmV2aXNpb24gMS4zMDguMi4xMi4yLjM1LjIuMwpkaWZmIC11IC1wIC1kIC1yMS4z MDguMi4xMi4yLjM1LjIuMyB6ZW5kLmMKLS0tIFplbmQvemVuZC5jCTIgTm92IDIwMDcgMTk6 NDA6MzcgLTAwMDAJMS4zMDguMi4xMi4yLjM1LjIuMworKysgWmVuZC96ZW5kLmMJMTMgRGVj IDIwMDcgMTc6Mzk6MDEgLTAwMDAKQEAgLTc0LDggKzc0LDIxIEBAIHN0YXRpYyBaRU5EX0lO SV9NSChPblVwZGF0ZUVycm9yUmVwb3J0aW4KIH0KIC8qIH19fSAqLwogCitzdGF0aWMgWkVO RF9JTklfTUgoT25VcGRhdGVHQ0VuYWJsZWQpIC8qIHt7eyAqLworeworCU9uVXBkYXRlQm9v bChlbnRyeSwgbmV3X3ZhbHVlLCBuZXdfdmFsdWVfbGVuZ3RoLCBtaF9hcmcxLCBtaF9hcmcy LCBtaF9hcmczLCBzdGFnZSBUU1JNTFNfQ0MpOworCisJaWYgKEdDX0coZ2NfZW5hYmxlZCkp IHsKKwkJZ2NfaW5pdChUU1JNTFNfQyk7CisJfQorCisJcmV0dXJuIFNVQ0NFU1M7Cit9Cisv KiB9fX0gKi8KKwogWkVORF9JTklfQkVHSU4oKQogCVpFTkRfSU5JX0VOVFJZKCJlcnJvcl9y ZXBvcnRpbmciLAkJCQlOVUxMLAkJWkVORF9JTklfQUxMLAkJT25VcGRhdGVFcnJvclJlcG9y dGluZykKKwlTVERfWkVORF9JTklfQk9PTEVBTigiemVuZC5lbmFibGVfZ2MiLAkJCQkiMSIs CVpFTkRfSU5JX0FMTCwJCU9uVXBkYXRlR0NFbmFibGVkLCAgICAgIGdjX2VuYWJsZWQsICAg ICB6ZW5kX2djX2dsb2JhbHMsICAgICAgICBnY19nbG9iYWxzKQogCVNURF9aRU5EX0lOSV9C T09MRUFOKCJ6ZW5kLnplMV9jb21wYXRpYmlsaXR5X21vZGUiLAkiMCIsCVpFTkRfSU5JX0FM TCwJCU9uVXBkYXRlQm9vbCwJemUxX2NvbXBhdGliaWxpdHlfbW9kZSwJemVuZF9leGVjdXRv cl9nbG9iYWxzLAlleGVjdXRvcl9nbG9iYWxzKQogI2lmZGVmIFpFTkRfTVVMVElCWVRFCiAJ U1REX1pFTkRfSU5JX0JPT0xFQU4oImRldGVjdF91bmljb2RlIiwgIjEiLCBaRU5EX0lOSV9B TEwsIE9uVXBkYXRlQm9vbCwgZGV0ZWN0X3VuaWNvZGUsIHplbmRfY29tcGlsZXJfZ2xvYmFs cywgY29tcGlsZXJfZ2xvYmFscykKQEAgLTgyMiw2ICs4MzUsNyBAQCBaRU5EX0FQSSBjaGFy ICpnZXRfemVuZF92ZXJzaW9uKHZvaWQpIC8qCiAKIHZvaWQgemVuZF9hY3RpdmF0ZShUU1JN TFNfRCkgLyoge3t7ICovCiB7CisJZ2NfcmVzZXQoVFNSTUxTX0MpOwogCWluaXRfY29tcGls ZXIoVFNSTUxTX0MpOwogCWluaXRfZXhlY3V0b3IoVFNSTUxTX0MpOwogCXN0YXJ0dXBfc2Nh bm5lcihUU1JNTFNfQyk7CkBAIC04NzEsNiArODg1LDEyIEBAIHZvaWQgemVuZF9kZWFjdGl2 YXRlKFRTUk1MU19EKSAvKiB7e3sgKi8KIAogCXplbmRfZGVzdHJveV9yc3JjX2xpc3QoJkVH KHJlZ3VsYXJfbGlzdCkgVFNSTUxTX0NDKTsKIAorI2lmZGVmIFpFTkRfREVCVUcKKwlpZiAo R0NfRyhnY19lbmFibGVkKSAmJiAhQ0codW5jbGVhbl9zaHV0ZG93bikpIHsKKwkJZ2NfY29s bGVjdF9jeWNsZXMoVFNSTUxTX0MpOworCX0KKyNlbmRpZgorCiAJemVuZF90cnkgewogCQl6 ZW5kX2luaV9kZWFjdGl2YXRlKFRTUk1MU19DKTsKIAl9IHplbmRfZW5kX3RyeSgpOwpJbmRl eDogWmVuZC96ZW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL3JlcG9zaXRvcnkvWmVu ZEVuZ2luZTIvemVuZC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjI5My4yLjExLjIuOS4y LjE0CmRpZmYgLXUgLXAgLWQgLXIxLjI5My4yLjExLjIuOS4yLjE0IHplbmQuaAotLS0gWmVu ZC96ZW5kLmgJMjMgTm92IDIwMDcgMTU6MDM6MDIgLTAwMDAJMS4yOTMuMi4xMS4yLjkuMi4x NAorKysgWmVuZC96ZW5kLmgJMTMgRGVjIDIwMDcgMTc6Mzk6MDEgLTAwMDAKQEAgLTcwOSw2 ICs3MDksNyBAQCBFTkRfRVhURVJOX0MoKQogCiAjZGVmaW5lIFpFTkRfTUFYX1JFU0VSVkVE X1JFU09VUkNFUwk0CiAKKyNpbmNsdWRlICJ6ZW5kX2djLmgiCiAjaW5jbHVkZSAiemVuZF9v cGVyYXRvcnMuaCIKICNpbmNsdWRlICJ6ZW5kX3ZhcmlhYmxlcy5oIgogCkluZGV4OiBaZW5k L3plbmRfYnVpbHRpbl9mdW5jdGlvbnMuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvcmVw b3NpdG9yeS9aZW5kRW5naW5lMi96ZW5kX2J1aWx0aW5fZnVuY3Rpb25zLmMsdgpyZXRyaWV2 aW5nIHJldmlzaW9uIDEuMjc3LjIuMTIuMi4yNS4yLjYKZGlmZiAtdSAtcCAtZCAtcjEuMjc3 LjIuMTIuMi4yNS4yLjYgemVuZF9idWlsdGluX2Z1bmN0aW9ucy5jCi0tLSBaZW5kL3plbmRf YnVpbHRpbl9mdW5jdGlvbnMuYwkyMiBOb3YgMjAwNyAxMzoyNzoxMSAtMDAwMAkxLjI3Ny4y LjEyLjIuMjUuMi42CisrKyBaZW5kL3plbmRfYnVpbHRpbl9mdW5jdGlvbnMuYwkxMyBEZWMg MjAwNyAxNzozOTowMSAtMDAwMApAQCAtODUsNiArODUsMTAgQEAgc3RhdGljIFpFTkRfRlVO Q1RJT04oemVuZF90ZXN0X2Z1bmMpOwogc3RhdGljIFpFTkRfRlVOQ1RJT04oemVuZF90aHJl YWRfaWQpOwogI2VuZGlmCiAjZW5kaWYKK3N0YXRpYyBaRU5EX0ZVTkNUSU9OKGdjX2NvbGxl Y3RfY3ljbGVzKTsKK3N0YXRpYyBaRU5EX0ZVTkNUSU9OKGdjX2VuYWJsZWQpOworc3RhdGlj IFpFTkRfRlVOQ1RJT04oZ2NfZW5hYmxlKTsKK3N0YXRpYyBaRU5EX0ZVTkNUSU9OKGdjX2Rp c2FibGUpOwogCiAjaW5jbHVkZSAiemVuZF9hcmdfZGVmcy5jIgogCkBAIC0xNDgsNiArMTUy LDEwIEBAIHN0YXRpYyBjb25zdCB6ZW5kX2Z1bmN0aW9uX2VudHJ5IGJ1aWx0aW4KIAlaRU5E X0ZFKHplbmRfdGhyZWFkX2lkLAkJTlVMTCkKICNlbmRpZgogI2VuZGlmCisJWkVORF9GRShn Y19jb2xsZWN0X2N5Y2xlcywgTlVMTCkKKwlaRU5EX0ZFKGdjX2VuYWJsZWQsIE5VTEwpCisJ WkVORF9GRShnY19lbmFibGUsIE5VTEwpCisJWkVORF9GRShnY19kaXNhYmxlLCBOVUxMKQog CXsgTlVMTCwgTlVMTCwgTlVMTCB9CiB9OwogCkBAIC0xNjYsNiArMTc0LDM4IEBAIFpFTkRf RlVOQ1RJT04oemVuZF92ZXJzaW9uKQogfQogLyogfX19ICovCiAKKy8qIHt7eyBwcm90byBp bnQgZ2NfY29sbGVjdF9jeWNsZXModm9pZCkKKyAgIEZvcmNlcyBjb2xsZWN0aW9uIG9mIGFu eSBleGlzdGluZyBnYXJiYWdlIGN5Y2xlcy4KKyAgIFJldHVybnMgbnVtYmVyIG9mIGZyZWVk IHp2YWxzICovCitaRU5EX0ZVTkNUSU9OKGdjX2NvbGxlY3RfY3ljbGVzKQoreworCVJFVFVS Tl9MT05HKGdjX2NvbGxlY3RfY3ljbGVzKFRTUk1MU19DKSk7Cit9CisvKiB9fX0gKi8KKwor Lyoge3t7IHByb3RvIHZvaWQgZ2NfZW5hYmxlZCh2b2lkKQorICAgUmV0dXJucyBzdGF0dXMg b2YgdGhlIGNpcmN1bGFyIHJlZmVyZW5jZSBjb2xsZWN0b3IgKi8KK1pFTkRfRlVOQ1RJT04o Z2NfZW5hYmxlZCkKK3sKKwlSRVRVUk5fQk9PTChHQ19HKGdjX2VuYWJsZWQpKTsKK30KKy8q IH19fSAqLworCisvKiB7e3sgcHJvdG8gdm9pZCBnY19lbmFibGUodm9pZCkKKyAgIEFjdGl2 YXRlcyB0aGUgY2lyY3VsYXIgcmVmZXJlbmNlIGNvbGxlY3RvciAqLworWkVORF9GVU5DVElP TihnY19lbmFibGUpCit7CisJemVuZF9hbHRlcl9pbmlfZW50cnkoInplbmQuZW5hYmxlX2dj Iiwgc2l6ZW9mKCJ6ZW5kLmVuYWJsZV9nYyIpLCAiMSIsIHNpemVvZigiMSIpLTEsIFpFTkRf SU5JX1VTRVIsIFpFTkRfSU5JX1NUQUdFX1JVTlRJTUUpOworfQorLyogfX19ICovCisKKy8q IHt7eyBwcm90byB2b2lkIGdjX2Rpc2FibGUodm9pZCkKKyAgIERlYWN0aXZhdGVzIHRoZSBj aXJjdWxhciByZWZlcmVuY2UgY29sbGVjdG9yICovCitaRU5EX0ZVTkNUSU9OKGdjX2Rpc2Fi bGUpCit7CisJemVuZF9hbHRlcl9pbmlfZW50cnkoInplbmQuZW5hYmxlX2djIiwgc2l6ZW9m KCJ6ZW5kLmVuYWJsZV9nYyIpLCAiMCIsIHNpemVvZigiMCIpLTEsIFpFTkRfSU5JX1VTRVIs IFpFTkRfSU5JX1NUQUdFX1JVTlRJTUUpOworfQorLyogfX19ICovCiAKIC8qIHt7eyBwcm90 byBpbnQgZnVuY19udW1fYXJncyh2b2lkKQogICAgR2V0IHRoZSBudW1iZXIgb2YgYXJndW1l bnRzIHRoYXQgd2VyZSBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uICovCkluZGV4OiBaZW5kL3pl bmRfZXhlY3V0ZS5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9yZXBvc2l0b3J5L1plbmRF bmdpbmUyL3plbmRfZXhlY3V0ZS5jLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjcxNi4yLjEy LjIuMjQuMi44CmRpZmYgLXUgLXAgLWQgLXIxLjcxNi4yLjEyLjIuMjQuMi44IHplbmRfZXhl Y3V0ZS5jCi0tLSBaZW5kL3plbmRfZXhlY3V0ZS5jCTIyIE5vdiAyMDA3IDEzOjI3OjExIC0w MDAwCTEuNzE2LjIuMTIuMi4yNC4yLjgKKysrIFplbmQvemVuZF9leGVjdXRlLmMJMTMgRGVj IDIwMDcgMTc6Mzk6MDEgLTAwMDAKQEAgLTY0LDcgKzY0LDcgQEAgc3RhdGljIHZvaWQgemVu ZF9leHRlbnNpb25fZmNhbGxfZW5kX2hhbgogCiAjZGVmaW5lIFRFTVBfVkFSX1NUQUNLX0xJ TUlUIDIwMDAKIAotc3RhdGljIGlubGluZSB2b2lkIHplbmRfcHp2YWxfdW5sb2NrX2Z1bmMo enZhbCAqeiwgemVuZF9mcmVlX29wICpzaG91bGRfZnJlZSwgaW50IHVucmVmKQorc3RhdGlj IGlubGluZSB2b2lkIHplbmRfcHp2YWxfdW5sb2NrX2Z1bmMoenZhbCAqeiwgemVuZF9mcmVl X29wICpzaG91bGRfZnJlZSwgaW50IHVucmVmIFRTUk1MU19EQykKIHsKIAlpZiAoIVpfREVM UkVGX1AoeikpIHsKIAkJWl9TRVRfUkVGQ09VTlRfUCh6LCAxKTsKQEAgLTc2LDE5ICs3Niwy MSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgemVuZF9wenZhbF91bmxvY2tfZnVuCiAJCWlmICh1 bnJlZiAmJiBaX0lTUkVGX1AoeikgJiYgWl9SRUZDT1VOVF9QKHopID09IDEpIHsKIAkJCVpf VU5TRVRfSVNSRUZfUCh6KTsKIAkJfQorCQlHQ19aVkFMX0NIRUNLX1BPU1NJQkxFX1JPT1Qo eik7CiAJfQogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgemVuZF9wenZhbF91bmxvY2tfZnJl ZV9mdW5jKHp2YWwgKnopCiB7CiAJaWYgKCFaX0RFTFJFRl9QKHopKSB7CisJCUdDX1JFTU9W RV9aVkFMX0ZST01fQlVGRkVSKHopOwogCQl6dmFsX2R0b3Ioeik7CiAJCXNhZmVfZnJlZV96 dmFsX3B0cih6KTsKIAl9CiB9CiAKLSNkZWZpbmUgUFpWQUxfVU5MT0NLKHosIGYpIHplbmRf cHp2YWxfdW5sb2NrX2Z1bmMoeiwgZiwgMSkKLSNkZWZpbmUgUFpWQUxfVU5MT0NLX0VYKHos IGYsIHUpIHplbmRfcHp2YWxfdW5sb2NrX2Z1bmMoeiwgZiwgdSkKKyNkZWZpbmUgUFpWQUxf VU5MT0NLKHosIGYpIHplbmRfcHp2YWxfdW5sb2NrX2Z1bmMoeiwgZiwgMSBUU1JNTFNfQ0Mp CisjZGVmaW5lIFBaVkFMX1VOTE9DS19FWCh6LCBmLCB1KSB6ZW5kX3B6dmFsX3VubG9ja19m dW5jKHosIGYsIHUgVFNSTUxTX0NDKQogI2RlZmluZSBQWlZBTF9VTkxPQ0tfRlJFRSh6KSB6 ZW5kX3B6dmFsX3VubG9ja19mcmVlX2Z1bmMoeikKICNkZWZpbmUgUFpWQUxfTE9DSyh6KSBa X0FERFJFRl9QKCh6KSkKICNkZWZpbmUgUkVUVVJOX1ZBTFVFX1VOVVNFRChwem4pCSgoKHB6 biktPnUuRUEudHlwZSAmIEVYVF9UWVBFX1VOVVNFRCkpCkBAIC04MTksNiArODIxLDcgQEAg c3RhdGljIGlubGluZSB2b2lkIHplbmRfYXNzaWduX3RvX3ZhcmlhYgogCQkJCQkJKnZhcmlh YmxlX3B0ciA9IHRtcDsKIAkJCQkJfSBlbHNlIHsKIAkJCQkJCVpfQUREUkVGX1AodmFsdWUp OworCQkJCQkJR0NfUkVNT1ZFX1pWQUxfRlJPTV9CVUZGRVIodmFyaWFibGVfcHRyKTsKIAkJ CQkJCXplbmRpX3p2YWxfZHRvcigqdmFyaWFibGVfcHRyKTsKIAkJCQkJCXNhZmVfZnJlZV96 dmFsX3B0cih2YXJpYWJsZV9wdHIpOwogCQkJCQkJKnZhcmlhYmxlX3B0cl9wdHIgPSB2YWx1 ZTsKSW5kZXg6IFplbmQvemVuZF9leGVjdXRlX0FQSS5jCj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp bGU6IC9yZXBvc2l0b3J5L1plbmRFbmdpbmUyL3plbmRfZXhlY3V0ZV9BUEkuYyx2CnJldHJp ZXZpbmcgcmV2aXNpb24gMS4zMzEuMi4yMC4yLjI0LjIuMTQKZGlmZiAtdSAtcCAtZCAtcjEu MzMxLjIuMjAuMi4yNC4yLjE0IHplbmRfZXhlY3V0ZV9BUEkuYwotLS0gWmVuZC96ZW5kX2V4 ZWN1dGVfQVBJLmMJNyBEZWMgMjAwNyAxNzoxMToyMyAtMDAwMAkxLjMzMS4yLjIwLjIuMjQu Mi4xNAorKysgWmVuZC96ZW5kX2V4ZWN1dGVfQVBJLmMJMTMgRGVjIDIwMDcgMTc6Mzk6MDEg LTAwMDAKQEAgLTQxOCwxNyArNDE4LDIyIEBAIFpFTkRfQVBJIHZvaWQgX3p2YWxfcHRyX2R0 b3IoenZhbCAqKnp2YWwKICNlbmRpZgogCVpfREVMUkVGX1BQKHp2YWxfcHRyKTsKIAlpZiAo Wl9SRUZDT1VOVF9QUCh6dmFsX3B0cikgPT0gMCkgeworCQlHQ19SRU1PVkVfWlZBTF9GUk9N X0JVRkZFUigqenZhbF9wdHIpOwogCQl6dmFsX2R0b3IoKnp2YWxfcHRyKTsKIAkJc2FmZV9m cmVlX3p2YWxfcHRyX3JlbCgqenZhbF9wdHIgWkVORF9GSUxFX0xJTkVfUkVMQVlfQ0MgWkVO RF9GSUxFX0xJTkVfQ0MpOwotCX0gZWxzZSBpZiAoWl9SRUZDT1VOVF9QUCh6dmFsX3B0cikg PT0gMSkgewotCQlpZiAoKCp6dmFsX3B0ciktPnR5cGUgPT0gSVNfT0JKRUNUKSB7Ci0JCQlU U1JNTFNfRkVUQ0goKTsKKwl9IGVsc2UgeworCQlUU1JNTFNfRkVUQ0goKTsKIAotCQkJaWYg KEVHKHplMV9jb21wYXRpYmlsaXR5X21vZGUpKSB7Ci0JCQkJcmV0dXJuOworCQlpZiAoWl9S RUZDT1VOVF9QUCh6dmFsX3B0cikgPT0gMSkgeworCQkJaWYgKCgqenZhbF9wdHIpLT50eXBl ID09IElTX09CSkVDVCkgeworCQkJCWlmIChFRyh6ZTFfY29tcGF0aWJpbGl0eV9tb2RlKSkg eworCQkJCQlyZXR1cm47CisJCQkJfQogCQkJfQorCQkJWl9VTlNFVF9JU1JFRl9QUCh6dmFs X3B0cik7CiAJCX0KLQkJWl9VTlNFVF9JU1JFRl9QUCh6dmFsX3B0cik7CisKKwkJR0NfWlZB TF9DSEVDS19QT1NTSUJMRV9ST09UKCp6dmFsX3B0cik7CiAJfQogfQogLyogfX19ICovCklu ZGV4OiBaZW5kL3plbmRfZ2MuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiBaZW5kL3plbmRf Z2MuYwpkaWZmIC1OIFplbmQvemVuZF9nYy5jCi0tLSAvZGV2L251bGwJMSBKYW4gMTk3MCAw MDowMDowMCAtMDAwMAorKysgWmVuZC96ZW5kX2djLmMJMTMgRGVjIDIwMDcgMTc6Mzk6MDEg LTAwMDAKQEAgLTAsMCArMSw1MTYgQEAKKy8qCisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAg IHwgWmVuZCBFbmdpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgfAorICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IENvcHly aWdodCAoYykgMTk5OC0yMDA3IFplbmQgVGVjaG5vbG9naWVzIEx0ZC4gKGh0dHA6Ly93d3cu emVuZC5jb20pIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCBUaGlzIHNvdXJjZSBm aWxlIGlzIHN1YmplY3QgdG8gdmVyc2lvbiAyLjAwIG9mIHRoZSBaZW5kIGxpY2Vuc2UsICAg ICB8CisgICB8IHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmls ZSBMSUNFTlNFLCBhbmQgaXMgICAgICAgIHwKKyAgIHwgYXZhaWxhYmxlIHRocm91Z2ggdGhl IHdvcmxkLXdpZGUtd2ViIGF0IHRoZSBmb2xsb3dpbmcgdXJsOiAgICAgICAgICAgfAorICAg fCBodHRwOi8vd3d3LnplbmQuY29tL2xpY2Vuc2UvMl8wMC50eHQuICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB8CisgICB8IElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5 IG9mIHRoZSBaZW5kIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG8gIHwKKyAgIHwgb2J0YWlu IGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhIG5vdGUgdG8g ICAgICAgICAgfAorICAgfCBsaWNlbnNlQHplbmQuY29tIHNvIHdlIGNhbiBtYWlsIHlvdSBh IGNvcHkgaW1tZWRpYXRlbHkuICAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSsKKyAgIHwgQXV0aG9yczogRGF2aWQgV2FuZyA8cGxhbmV0YmVpbmdAZ21haWwuY29tPiAg ICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgfCAgICAgICAgICBEbWl0cnkgU3RvZ292 IDxkbWl0cnlAemVuZC5jb20+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAr LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSsKKyovCisKKy8qICRJZDokICovCisKKyNpbmNsdWRlICJ6ZW5k LmgiCisjaW5jbHVkZSAiemVuZF9BUEkuaCIKKworI2RlZmluZSBHQ19ST09UX0JVRkZFUl9N QVhfRU5UUklFUyAxMDAwMAorCisjaWZkZWYgWlRTCitaRU5EX0FQSSBpbnQgZ2NfZ2xvYmFs c19pZDsKKyNlbHNlCitaRU5EX0FQSSB6ZW5kX2djX2dsb2JhbHMgZ2NfZ2xvYmFsczsKKyNl bmRpZgorCisvKiBGb3J3YXJkIGRlY2xhcmF0aW9ucyAqLworc3RhdGljIGludCBjaGlsZHJl bl9zY2FuX2JsYWNrKHp2YWwgKipweiBUU1JNTFNfREMpOworc3RhdGljIGludCBjaGlsZHJl bl9tYXJrX2dyZXkoenZhbCAqKnB6IFRTUk1MU19EQyk7CitzdGF0aWMgaW50IGNoaWxkcmVu X2NvbGxlY3Rfd2hpdGUoenZhbCAqKnB6IFRTUk1MU19EQyk7CitzdGF0aWMgaW50IGNoaWxk cmVuX3NjYW4oenZhbCAqKnB6IFRTUk1MU19EQyk7CisKK3N0YXRpYyB2b2lkIHJvb3RfYnVm ZmVyX2R0b3IoemVuZF9nY19nbG9iYWxzICpnY19nbG9iYWxzIFRTUk1MU19EQykKK3sKKwlp ZiAoZ2NfZ2xvYmFscy0+YnVmKSB7CisJCWZyZWUoZ2NfZ2xvYmFscy0+YnVmKTsKKwkJZ2Nf Z2xvYmFscy0+YnVmID0gTlVMTDsKKwl9CQorfQorCitzdGF0aWMgdm9pZCBnY19nbG9iYWxz X2N0b3JfZXgoemVuZF9nY19nbG9iYWxzICpnY19nbG9iYWxzIFRTUk1MU19EQykKK3sKKwln Y19nbG9iYWxzLT5nY19lbmFibGVkID0gMDsKKworCWdjX2dsb2JhbHMtPmJ1ZiA9IE5VTEw7 CisKKwlnY19nbG9iYWxzLT5yb290cy5uZXh0ID0gTlVMTDsKKwlnY19nbG9iYWxzLT5yb290 cy5wcmV2ID0gTlVMTDsKKwlnY19nbG9iYWxzLT51bnVzZWQgPSBOVUxMOworCWdjX2dsb2Jh bHMtPnp2YWxfdG9fZnJlZSA9IE5VTEw7CisKKwlnY19nbG9iYWxzLT5nY19ydW5zID0gMDsK KwlnY19nbG9iYWxzLT5jb2xsZWN0ZWQgPSAwOworCisjaWYgR0NfQkVOQ0gKKwlnY19nbG9i YWxzLT5yb290X2J1Zl9sZW5ndGggPSAwOworCWdjX2dsb2JhbHMtPnJvb3RfYnVmX3BlYWsg PSAwOworCWdjX2dsb2JhbHMtPnp2YWxfcG9zc2libGVfcm9vdCA9IDA7CisJZ2NfZ2xvYmFs cy0+em9ial9wb3NzaWJsZV9yb290ID0gMDsKKwlnY19nbG9iYWxzLT56dmFsX2J1ZmZlcmVk ID0gMDsKKwlnY19nbG9iYWxzLT56b2JqX2J1ZmZlcmVkID0gMDsKKwlnY19nbG9iYWxzLT56 dmFsX3JlbW92ZV9mcm9tX2J1ZmZlciA9IDA7CisJZ2NfZ2xvYmFscy0+em9ial9yZW1vdmVf ZnJvbV9idWZmZXIgPSAwOworCWdjX2dsb2JhbHMtPnp2YWxfbWFya2VkX2dyZXkgPSAwOwor CWdjX2dsb2JhbHMtPnpvYmpfbWFya2VkX2dyZXkgPSAwOworI2VuZGlmCit9CisKK1pFTkRf QVBJIHZvaWQgZ2NfZ2xvYmFsc19jdG9yKFRTUk1MU19EKQoreworI2lmZGVmIFpUUworCXRz X2FsbG9jYXRlX2lkKCZnY19nbG9iYWxzX2lkLCBzaXplb2YoemVuZF9nY19nbG9iYWxzKSwg KHRzX2FsbG9jYXRlX2N0b3IpIGdjX2dsb2JhbHNfY3Rvcl9leCwgKHRzX2FsbG9jYXRlX2R0 b3IpIHJvb3RfYnVmZmVyX2R0b3IpOworI2Vsc2UKKwlnY19nbG9iYWxzX2N0b3JfZXgoJmdj X2dsb2JhbHMpOworI2VuZGlmCit9CisKK1pFTkRfQVBJIHZvaWQgZ2NfZ2xvYmFsc19kdG9y KFRTUk1MU19EKQoreworI2lmbmRlZiBaVFMKKwlyb290X2J1ZmZlcl9kdG9yKCZnY19nbG9i YWxzIFRTUk1MU19EQyk7CisjZW5kaWYKK30KKworWkVORF9BUEkgdm9pZCBnY19yZXNldChU U1JNTFNfRCkKK3sKKwlpbnQgaTsKKworCUdDX0coZ2NfcnVucykgPSAwOworCUdDX0coY29s bGVjdGVkKSA9IDA7CisKKyNpZiBHQ19CRU5DSAorCUdDX0cocm9vdF9idWZfbGVuZ3RoKSA9 IDA7CisJR0NfRyhyb290X2J1Zl9wZWFrKSA9IDA7CisJR0NfRyh6dmFsX3Bvc3NpYmxlX3Jv b3QpID0gMDsKKwlHQ19HKHpvYmpfcG9zc2libGVfcm9vdCkgPSAwOworCUdDX0coenZhbF9i dWZmZXJlZCkgPSAwOworCUdDX0coem9ial9idWZmZXJlZCkgPSAwOworCUdDX0coenZhbF9y ZW1vdmVfZnJvbV9idWZmZXIpID0gMDsKKwlHQ19HKHpvYmpfcmVtb3ZlX2Zyb21fYnVmZmVy KSA9IDA7CisJR0NfRyh6dmFsX21hcmtlZF9ncmV5KSA9IDA7CisJR0NfRyh6b2JqX21hcmtl ZF9ncmV5KSA9IDA7CisjZW5kaWYKKworCWlmIChHQ19HKGJ1ZikgJiYKKwkgICAgKEdDX0co cm9vdHMpLm5leHQgIT0gJkdDX0cocm9vdHMpIHx8CisJICAgICBHQ19HKHJvb3RzKS5wcmV2 ICE9ICZHQ19HKHJvb3RzKSkpIHsKKworCQlHQ19HKHJvb3RzKS5uZXh0ID0gJkdDX0cocm9v dHMpOworCQlHQ19HKHJvb3RzKS5wcmV2ID0gJkdDX0cocm9vdHMpOworCisJCUdDX0codW51 c2VkKSA9ICZHQ19HKGJ1ZilbMF07CisJCWZvciAoaSA9IDA7IGkgPCBHQ19ST09UX0JVRkZF Ul9NQVhfRU5UUklFUy0xOyBpKyspIHsKKwkJCUdDX0coYnVmKVtpXS5wcmV2ID0gJkdDX0co YnVmKVtpKzFdOworCQl9CisJCUdDX0coYnVmKVtHQ19ST09UX0JVRkZFUl9NQVhfRU5UUklF Uy0xXS5wcmV2ID0gTlVMTDsKKworCQlHQ19HKHp2YWxfdG9fZnJlZSkgPSBOVUxMOworCX0K K30KKworWkVORF9BUEkgdm9pZCBnY19pbml0KFRTUk1MU19EKQoreworCWlmIChHQ19HKGJ1 ZikgPT0gTlVMTCAmJiBHQ19HKGdjX2VuYWJsZWQpKSB7CisJCUdDX0coYnVmKSA9IChnY19y b290X2J1ZmZlciopIG1hbGxvYyhzaXplb2YoZ2Nfcm9vdF9idWZmZXIpICogR0NfUk9PVF9C VUZGRVJfTUFYX0VOVFJJRVMpOworCQlnY19yZXNldChUU1JNTFNfQyk7CisJfQorfQorCita RU5EX0FQSSB2b2lkIGdjX3p2YWxfcG9zc2libGVfcm9vdCh6dmFsICp6diBUU1JNTFNfREMp Cit7CisJaWYgKHp2LT50eXBlID09IElTX09CSkVDVCkgeworCQlHQ19aT0JKX0NIRUNLX1BP U1NJQkxFX1JPT1QoenYpOworCQlyZXR1cm47CisJfQorCisJR0NfQkVOQ0hfSU5DKHp2YWxf cG9zc2libGVfcm9vdCk7CisKKwlpZiAoR0NfWlZBTF9HRVRfQ09MT1IoenYpICE9IEdDX1BV UlBMRSkgeworCQlHQ19aVkFMX1NFVF9QVVJQTEUoenYpOworCisJCWlmICghR0NfWlZBTF9B RERSRVNTKHp2KSkgeworCQkJZ2Nfcm9vdF9idWZmZXIgKm5ld1Jvb3QgPSBHQ19HKHVudXNl ZCk7CisKKwkJCWlmICghbmV3Um9vdCkgeworCQkJCWlmICghR0NfRyhnY19lbmFibGVkKSkg eworCQkJCQlHQ19aVkFMX1NFVF9CTEFDSyh6dik7CisJCQkJCXJldHVybjsKKwkJCQl9CisJ CQkJenYtPnJlZmNvdW50X19nYysrOworCQkJCWdjX2NvbGxlY3RfY3ljbGVzKFRTUk1MU19D KTsKKwkJCQl6di0+cmVmY291bnRfX2djLS07CisJCQkJR0NfWlZBTF9TRVRfUFVSUExFKHp2 KTsKKwkJCQluZXdSb290ID0gR0NfRyh1bnVzZWQpOworCQkJfQorCisJCQlHQ19HKHVudXNl ZCkgPSBuZXdSb290LT5wcmV2OworCisJCQluZXdSb290LT5uZXh0ID0gR0NfRyhyb290cyku bmV4dDsKKwkJCW5ld1Jvb3QtPnByZXYgPSAmR0NfRyhyb290cyk7CisJCQlHQ19HKHJvb3Rz KS5uZXh0LT5wcmV2ID0gbmV3Um9vdDsKKwkJCUdDX0cocm9vdHMpLm5leHQgPSBuZXdSb290 OworCisJCQlHQ19aVkFMX1NFVF9BRERSRVNTKHp2LCBuZXdSb290KTsKKworCQkJbmV3Um9v dC0+aGFuZGxlID0gMDsKKwkJCW5ld1Jvb3QtPnUucHogPSB6djsKKworCQkJR0NfQkVOQ0hf SU5DKHp2YWxfYnVmZmVyZWQpOworCQkJR0NfQkVOQ0hfSU5DKHJvb3RfYnVmX2xlbmd0aCk7 CisJCQlHQ19CRU5DSF9QRUFLKHJvb3RfYnVmX3BlYWssIHJvb3RfYnVmX2xlbmd0aCk7CisJ CX0KKwl9Cit9CisKK1pFTkRfQVBJIHZvaWQgZ2Nfem9ial9wb3NzaWJsZV9yb290KHp2YWwg Knp2IFRTUk1MU19EQykKK3sKKwlzdHJ1Y3QgX3N0b3JlX29iamVjdCAqb2JqOworCisJaWYg KFVORVhQRUNURUQoWl9PQkpfSFRfUCh6diktPmdldF9wcm9wZXJ0aWVzID09IE5VTEwpKSB7 CisJCXJldHVybjsKKwl9CisKKwlHQ19CRU5DSF9JTkMoem9ial9wb3NzaWJsZV9yb290KTsK KworCW9iaiA9ICZFRyhvYmplY3RzX3N0b3JlKS5vYmplY3RfYnVja2V0c1taX09CSl9IQU5E TEVfUCh6dildLmJ1Y2tldC5vYmo7CisJaWYgKEdDX0dFVF9DT0xPUihvYmotPmJ1ZmZlcmVk KSAhPSBHQ19QVVJQTEUpIHsKKwkJR0NfU0VUX1BVUlBMRShvYmotPmJ1ZmZlcmVkKTsKKwkJ aWYgKCFHQ19BRERSRVNTKG9iai0+YnVmZmVyZWQpKSB7CisJCQlnY19yb290X2J1ZmZlciAq bmV3Um9vdCA9IEdDX0codW51c2VkKTsKKworCQkJaWYgKCFuZXdSb290KSB7CisJCQkJaWYg KCFHQ19HKGdjX2VuYWJsZWQpKSB7CisJCQkJCUdDX1pWQUxfU0VUX0JMQUNLKHp2KTsKKwkJ CQkJcmV0dXJuOworCQkJCX0KKwkJCQl6di0+cmVmY291bnRfX2djKys7CisJCQkJZ2NfY29s bGVjdF9jeWNsZXMoVFNSTUxTX0MpOworCQkJCXp2LT5yZWZjb3VudF9fZ2MtLTsKKwkJCQlH Q19TRVRfUFVSUExFKG9iai0+YnVmZmVyZWQpOworCQkJCW5ld1Jvb3QgPSBHQ19HKHVudXNl ZCk7CisJCQl9CisKKwkJCUdDX0codW51c2VkKSA9IG5ld1Jvb3QtPnByZXY7CisKKwkJCW5l d1Jvb3QtPm5leHQgPSBHQ19HKHJvb3RzKS5uZXh0OworCQkJbmV3Um9vdC0+cHJldiA9ICZH Q19HKHJvb3RzKTsKKwkJCUdDX0cocm9vdHMpLm5leHQtPnByZXYgPSBuZXdSb290OworCQkJ R0NfRyhyb290cykubmV4dCA9IG5ld1Jvb3Q7CisKKwkJCUdDX1NFVF9BRERSRVNTKG9iai0+ YnVmZmVyZWQsIG5ld1Jvb3QpOworCisJCQluZXdSb290LT5oYW5kbGUgPSBaX09CSl9IQU5E TEVfUCh6dik7CisJCQluZXdSb290LT51LmhhbmRsZXJzID0gWl9PQkpfSFRfUCh6dik7CisK KwkJCUdDX0JFTkNIX0lOQyh6b2JqX2J1ZmZlcmVkKTsKKwkJCUdDX0JFTkNIX0lOQyhyb290 X2J1Zl9sZW5ndGgpOworCQkJR0NfQkVOQ0hfUEVBSyhyb290X2J1Zl9wZWFrLCByb290X2J1 Zl9sZW5ndGgpOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCB6b2JqX3NjYW5fYmxhY2so c3RydWN0IF9zdG9yZV9vYmplY3QgKm9iaiwgenZhbCAqcHogVFNSTUxTX0RDKQoreworCUdD X1NFVF9CTEFDSyhvYmotPmJ1ZmZlcmVkKTsKKworCWlmIChFWFBFQ1RFRChaX09CSl9IQU5E TEVSX1AocHosIGdldF9wcm9wZXJ0aWVzKSAhPSBOVUxMKSkgeworCQl6ZW5kX2hhc2hfYXBw bHkoWl9PQkpQUk9QX1AocHopLCAoYXBwbHlfZnVuY190KSBjaGlsZHJlbl9zY2FuX2JsYWNr IFRTUk1MU19DQyk7CisJfQorfQorCitzdGF0aWMgdm9pZCB6dmFsX3NjYW5fYmxhY2soenZh bCAqcHogVFNSTUxTX0RDKQoreworCUdDX1pWQUxfU0VUX0JMQUNLKHB6KTsKKworCWlmICha X1RZUEVfUChweikgPT0gSVNfT0JKRUNUKSB7CisJCXN0cnVjdCBfc3RvcmVfb2JqZWN0ICpv YmogPSAmRUcob2JqZWN0c19zdG9yZSkub2JqZWN0X2J1Y2tldHNbWl9PQkpfSEFORExFX1Ao cHopXS5idWNrZXQub2JqOworCisJCW9iai0+cmVmY291bnQrKzsKKwkJaWYgKEdDX0dFVF9D T0xPUihvYmotPmJ1ZmZlcmVkKSAhPSBHQ19CTEFDSykgeworCQkJem9ial9zY2FuX2JsYWNr KG9iaiwgcHogVFNSTUxTX0NDKTsKKwkJfQorCX0gZWxzZSBpZiAoWl9UWVBFX1AocHopID09 IElTX0FSUkFZKSB7CisJCWlmIChaX0FSUlZBTF9QKHB6KSAhPSAmRUcoc3ltYm9sX3RhYmxl KSkgeworCQkJemVuZF9oYXNoX2FwcGx5KFpfQVJSVkFMX1AocHopLCAoYXBwbHlfZnVuY190 KSBjaGlsZHJlbl9zY2FuX2JsYWNrIFRTUk1MU19DQyk7CisJCX0KKwl9Cit9CisKK3N0YXRp YyBpbnQgY2hpbGRyZW5fc2Nhbl9ibGFjayh6dmFsICoqcHogVFNSTUxTX0RDKQoreworCSgq cHopLT5yZWZjb3VudF9fZ2MrKzsKKworCWlmIChHQ19aVkFMX0dFVF9DT0xPUigqcHopICE9 IEdDX0JMQUNLKSB7CisJCXp2YWxfc2Nhbl9ibGFjaygqcHogVFNSTUxTX0NDKTsKKwl9CisK KwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgem9ial9tYXJrX2dyZXkoc3RydWN0IF9z dG9yZV9vYmplY3QgKm9iaiwgenZhbCAqcHogVFNSTUxTX0RDKQoreworCWlmIChHQ19HRVRf Q09MT1Iob2JqLT5idWZmZXJlZCkgIT0gR0NfR1JFWSkgeworCQlHQ19CRU5DSF9JTkMoem9i al9tYXJrZWRfZ3JleSk7CisJCUdDX1NFVF9DT0xPUihvYmotPmJ1ZmZlcmVkLCBHQ19HUkVZ KTsKKwkJaWYgKEVYUEVDVEVEKFpfT0JKX0hBTkRMRVJfUChweiwgZ2V0X3Byb3BlcnRpZXMp ICE9IE5VTEwpKSB7CisJCQl6ZW5kX2hhc2hfYXBwbHkoWl9PQkpQUk9QX1AocHopLCAoYXBw bHlfZnVuY190KSBjaGlsZHJlbl9tYXJrX2dyZXkgVFNSTUxTX0NDKTsKKwkJfQorCX0KK30K Kworc3RhdGljIHZvaWQgenZhbF9tYXJrX2dyZXkoenZhbCAqcHogVFNSTUxTX0RDKQorewor CWlmIChHQ19aVkFMX0dFVF9DT0xPUihweikgIT0gR0NfR1JFWSkgeworCQlHQ19CRU5DSF9J TkMoenZhbF9tYXJrZWRfZ3JleSk7CisJCUdDX1pWQUxfU0VUX0NPTE9SKHB6LCBHQ19HUkVZ KTsKKworCQlpZiAoWl9UWVBFX1AocHopID09IElTX09CSkVDVCkgeworCQkJc3RydWN0IF9z dG9yZV9vYmplY3QgKm9iaiA9ICZFRyhvYmplY3RzX3N0b3JlKS5vYmplY3RfYnVja2V0c1ta X09CSl9IQU5ETEVfUChweildLmJ1Y2tldC5vYmo7CisKKwkJCW9iai0+cmVmY291bnQtLTsK KwkJCXpvYmpfbWFya19ncmV5KG9iaiwgcHogVFNSTUxTX0NDKTsKKwkJfSBlbHNlIGlmICha X1RZUEVfUChweikgPT0gSVNfQVJSQVkpIHsKKwkJCWlmIChaX0FSUlZBTF9QKHB6KSA9PSAm RUcoc3ltYm9sX3RhYmxlKSkgeworCQkJCUdDX1pWQUxfU0VUX0JMQUNLKHB6KTsKKwkJCX0g ZWxzZSB7CisJCQkJemVuZF9oYXNoX2FwcGx5KFpfQVJSVkFMX1AocHopLCAoYXBwbHlfZnVu Y190KSBjaGlsZHJlbl9tYXJrX2dyZXkgVFNSTUxTX0NDKTsKKwkJCX0KKwkJfQorCX0KK30K Kworc3RhdGljIGludCBjaGlsZHJlbl9tYXJrX2dyZXkoenZhbCAqKnB6IFRTUk1MU19EQykK K3sKKwkoKnB6KS0+cmVmY291bnRfX2djLS07CisJenZhbF9tYXJrX2dyZXkoKnB6IFRTUk1M U19DQyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGdjX21hcmtfcm9vdHMoVFNS TUxTX0QpCit7CisJZ2Nfcm9vdF9idWZmZXIgKmN1cnJlbnQgPSBHQ19HKHJvb3RzKS5uZXh0 OworCisJd2hpbGUgKGN1cnJlbnQgIT0gJkdDX0cocm9vdHMpKSB7CisJCWlmIChjdXJyZW50 LT5oYW5kbGUpIHsKKwkJCXN0cnVjdCBfc3RvcmVfb2JqZWN0ICpvYmogPSAmRUcob2JqZWN0 c19zdG9yZSkub2JqZWN0X2J1Y2tldHNbY3VycmVudC0+aGFuZGxlXS5idWNrZXQub2JqOwor CisJCQlpZiAoR0NfR0VUX0NPTE9SKG9iai0+YnVmZmVyZWQpID09IEdDX1BVUlBMRSkgewor CQkJCXp2YWwgejsKKworCQkJCUlOSVRfUFpWQUwoJnopOworCQkJCVpfT0JKX0hBTkRMRSh6 KSA9IGN1cnJlbnQtPmhhbmRsZTsKKwkJCQlaX09CSl9IVCh6KSA9IGN1cnJlbnQtPnUuaGFu ZGxlcnM7CisJCQkJem9ial9tYXJrX2dyZXkob2JqLCAmeiBUU1JNTFNfQ0MpOworCQkJfSBl bHNlIHsKKwkJCQlHQ19TRVRfQUREUkVTUyhvYmotPmJ1ZmZlcmVkLCBOVUxMKTsKKwkJCQlH Q19SRU1PVkVfRlJPTV9CVUZGRVIoY3VycmVudCk7CisJCQl9CisJCX0gZWxzZSB7CisJCQlp ZiAoR0NfWlZBTF9HRVRfQ09MT1IoY3VycmVudC0+dS5weikgPT0gR0NfUFVSUExFKSB7CisJ CQkJenZhbF9tYXJrX2dyZXkoY3VycmVudC0+dS5weiBUU1JNTFNfQ0MpOworCQkJfSBlbHNl IHsKKwkJCQlHQ19aVkFMX1NFVF9BRERSRVNTKGN1cnJlbnQtPnUucHosIE5VTEwpOworCQkJ CUdDX1JFTU9WRV9GUk9NX0JVRkZFUihjdXJyZW50KTsKKwkJCX0KKwkJfQorCQljdXJyZW50 ID0gY3VycmVudC0+bmV4dDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHpvYmpfc2Nhbih6dmFs ICpweiBUU1JNTFNfREMpCit7CisJc3RydWN0IF9zdG9yZV9vYmplY3QgKm9iaiA9ICZFRyhv YmplY3RzX3N0b3JlKS5vYmplY3RfYnVja2V0c1taX09CSl9IQU5ETEVfUChweildLmJ1Y2tl dC5vYmo7CisKKwlpZiAoR0NfR0VUX0NPTE9SKG9iai0+YnVmZmVyZWQpID09IEdDX0dSRVkp IHsKKwkJaWYgKG9iai0+cmVmY291bnQgPiAwKSB7CisJCQl6b2JqX3NjYW5fYmxhY2sob2Jq LCBweiBUU1JNTFNfQ0MpOworCQl9IGVsc2UgeworCQkJR0NfU0VUX0NPTE9SKG9iai0+YnVm ZmVyZWQsIEdDX1dISVRFKTsKKwkJCWlmIChFWFBFQ1RFRChaX09CSl9IQU5ETEVSX1AocHos IGdldF9wcm9wZXJ0aWVzKSAhPSBOVUxMKSkgeworCQkJCXplbmRfaGFzaF9hcHBseShaX09C SlBST1BfUChweiksIChhcHBseV9mdW5jX3QpIGNoaWxkcmVuX3NjYW4gVFNSTUxTX0NDKTsK KwkJCX0KKwkJfQorCX0KK30KKworc3RhdGljIGludCB6dmFsX3NjYW4oenZhbCAqcHogVFNS TUxTX0RDKQoreworCWlmIChHQ19aVkFMX0dFVF9DT0xPUihweikgPT0gR0NfR1JFWSkgewor CQlpZiAocHotPnJlZmNvdW50X19nYyA+IDApIHsKKwkJCXp2YWxfc2Nhbl9ibGFjayhweiBU U1JNTFNfQ0MpOworCQl9IGVsc2UgeworCQkJR0NfWlZBTF9TRVRfQ09MT1IocHosIEdDX1dI SVRFKTsKKworCQkJaWYgKFpfVFlQRV9QKHB6KSA9PSBJU19PQkpFQ1QpIHsKKwkJCQl6b2Jq X3NjYW4ocHogVFNSTUxTX0NDKTsKKwkJCX0gZWxzZSBpZiAoWl9UWVBFX1AocHopID09IElT X0FSUkFZKSB7CisJCQkJaWYgKFpfQVJSVkFMX1AocHopID09ICZFRyhzeW1ib2xfdGFibGUp KSB7CisJCQkJCUdDX1pWQUxfU0VUX0JMQUNLKHB6KTsKKwkJCQl9IGVsc2UgeworCQkJCQl6 ZW5kX2hhc2hfYXBwbHkoWl9BUlJWQUxfUChweiksIChhcHBseV9mdW5jX3QpIGNoaWxkcmVu X3NjYW4gVFNSTUxTX0NDKTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9 CisKK3N0YXRpYyBpbnQgY2hpbGRyZW5fc2Nhbih6dmFsICoqcHogVFNSTUxTX0RDKQorewor CXp2YWxfc2NhbigqcHogVFNSTUxTX0NDKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZv aWQgZ2Nfc2Nhbl9yb290cyhUU1JNTFNfRCkKK3sKKwlnY19yb290X2J1ZmZlciAqY3VycmVu dCA9IEdDX0cocm9vdHMpLm5leHQ7CisKKwl3aGlsZSAoY3VycmVudCAhPSAmR0NfRyhyb290 cykpIHsKKwkJaWYgKGN1cnJlbnQtPmhhbmRsZSkgeworCQkJenZhbCB6OworCisJCQlJTklU X1BaVkFMKCZ6KTsKKwkJCVpfT0JKX0hBTkRMRSh6KSA9IGN1cnJlbnQtPmhhbmRsZTsKKwkJ CVpfT0JKX0hUKHopID0gY3VycmVudC0+dS5oYW5kbGVyczsKKwkJCXpvYmpfc2NhbigmeiBU U1JNTFNfQ0MpOworCQl9IGVsc2UgeworCQkJenZhbF9zY2FuKGN1cnJlbnQtPnUucHogVFNS TUxTX0NDKTsKKwkJfQorCQljdXJyZW50ID0gY3VycmVudC0+bmV4dDsKKwl9Cit9CisKK3N0 YXRpYyB2b2lkIHpvYmpfY29sbGVjdF93aGl0ZSh6dmFsICpweiBUU1JNTFNfREMpCit7CisJ emVuZF9vYmplY3RfaGFuZGxlIGhhbmRsZSA9IFpfT0JKX0hBTkRMRV9QKHB6KTsKKwlzdHJ1 Y3QgX3N0b3JlX29iamVjdCAqb2JqID0gJkVHKG9iamVjdHNfc3RvcmUpLm9iamVjdF9idWNr ZXRzW2hhbmRsZV0uYnVja2V0Lm9iajsKKworCWlmIChvYmotPmJ1ZmZlcmVkID09IChnY19y b290X2J1ZmZlciopR0NfV0hJVEUpIHsKKwkJR0NfU0VUX0JMQUNLKG9iai0+YnVmZmVyZWQp OworCisJCWlmIChFWFBFQ1RFRChaX09CSl9IQU5ETEVSX1AocHosIGdldF9wcm9wZXJ0aWVz KSAhPSBOVUxMKSkgeworCQkJemVuZF9oYXNoX2FwcGx5KFpfT0JKUFJPUF9QKHB6KSwgKGFw cGx5X2Z1bmNfdCkgY2hpbGRyZW5fY29sbGVjdF93aGl0ZSBUU1JNTFNfQ0MpOworCQl9CisJ fQorfQorCitzdGF0aWMgdm9pZCB6dmFsX2NvbGxlY3Rfd2hpdGUoenZhbCAqcHogVFNSTUxT X0RDKQoreworCWlmICgoKHp2YWxfZ2NfaW5mbyopKHB6KSktPnUuYnVmZmVyZWQgPT0gKGdj X3Jvb3RfYnVmZmVyKilHQ19XSElURSkgeworCQlHQ19aVkFMX1NFVF9CTEFDSyhweik7CisK KwkJaWYgKFpfVFlQRV9QKHB6KSA9PSBJU19PQkpFQ1QpIHsKKwkJCXpvYmpfY29sbGVjdF93 aGl0ZShweiBUU1JNTFNfQ0MpOworCQl9IGVsc2UgeworCQkJaWYgKFpfVFlQRV9QKHB6KSA9 PSBJU19BUlJBWSkgeworCQkJCWlmIChaX0FSUlZBTF9QKHB6KSA9PSAmRUcoc3ltYm9sX3Rh YmxlKSkgeworCQkJCQlyZXR1cm47CisJCQkJfQorCQkJCXplbmRfaGFzaF9hcHBseShaX0FS UlZBTF9QKHB6KSwgKGFwcGx5X2Z1bmNfdCkgY2hpbGRyZW5fY29sbGVjdF93aGl0ZSBUU1JN TFNfQ0MpOworCQkJfQorCQkJLyogcmVzdG9yZSByZWZjb3VudCAqLworCQkJcHotPnJlZmNv dW50X19nYysrOworCQl9CisKKwkJKCh6dmFsX2djX2luZm8qKXB6KS0+dS5uZXh0ID0gR0Nf Ryh6dmFsX3RvX2ZyZWUpOworCQlHQ19HKHp2YWxfdG9fZnJlZSkgPSAoenZhbF9nY19pbmZv KilwejsKKwl9Cit9CisKK3N0YXRpYyBpbnQgY2hpbGRyZW5fY29sbGVjdF93aGl0ZSh6dmFs ICoqcHogVFNSTUxTX0RDKQoreworCXp2YWxfY29sbGVjdF93aGl0ZSgqcHogVFNSTUxTX0ND KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZ2NfY29sbGVjdF9yb290cyhUU1JN TFNfRCkKK3sKKwlnY19yb290X2J1ZmZlciAqY3VycmVudCA9IEdDX0cocm9vdHMpLm5leHQ7 CisKKwl3aGlsZSAoY3VycmVudCAhPSAmR0NfRyhyb290cykpIHsKKwkJaWYgKGN1cnJlbnQt PmhhbmRsZSkgeworCQkJc3RydWN0IF9zdG9yZV9vYmplY3QgKm9iaiA9ICZFRyhvYmplY3Rz X3N0b3JlKS5vYmplY3RfYnVja2V0c1tjdXJyZW50LT5oYW5kbGVdLmJ1Y2tldC5vYmo7CisJ CQl6dmFsIHo7CisKKwkJCUdDX1NFVF9BRERSRVNTKG9iai0+YnVmZmVyZWQsIE5VTEwpOwor CQkJSU5JVF9QWlZBTCgmeik7CisJCQlaX09CSl9IQU5ETEUoeikgPSBjdXJyZW50LT5oYW5k bGU7CisJCQlaX09CSl9IVCh6KSA9IGN1cnJlbnQtPnUuaGFuZGxlcnM7CisJCQl6b2JqX2Nv bGxlY3Rfd2hpdGUoJnogVFNSTUxTX0NDKTsKKwkJfSBlbHNlIHsKKwkJCUdDX1pWQUxfU0VU X0FERFJFU1MoY3VycmVudC0+dS5weiwgTlVMTCk7CisJCQl6dmFsX2NvbGxlY3Rfd2hpdGUo Y3VycmVudC0+dS5weiBUU1JNTFNfQ0MpOworCQl9CisKKwkJR0NfUkVNT1ZFX0ZST01fQlVG RkVSKGN1cnJlbnQpOworCQljdXJyZW50ID0gY3VycmVudC0+bmV4dDsKKwl9Cit9CisKK1pF TkRfQVBJIGludCBnY19jb2xsZWN0X2N5Y2xlcyhUU1JNTFNfRCkKK3sKKwlpbnQgY291bnQg PSAwOworCisJaWYgKEdDX0cocm9vdHMpLm5leHQgIT0gJkdDX0cocm9vdHMpKSB7CisJCXp2 YWxfZ2NfaW5mbyAqcCwgKnE7CisKKwkJR0NfRyhnY19ydW5zKSsrOworCQlHQ19HKHp2YWxf dG9fZnJlZSkgPSBOVUxMOworCQlnY19tYXJrX3Jvb3RzKFRTUk1MU19DKTsKKwkJZ2Nfc2Nh bl9yb290cyhUU1JNTFNfQyk7CisJCWdjX2NvbGxlY3Rfcm9vdHMoVFNSTUxTX0MpOworCisJ CXAgPSBHQ19HKHp2YWxfdG9fZnJlZSk7CisJCUdDX0coenZhbF90b19mcmVlKSA9IE5VTEw7 CisJCXdoaWxlIChwKSB7CisJCQlxID0gcC0+dS5uZXh0OworCQkJaWYgKFpfVFlQRShwLT56 KSA9PSBJU19PQkpFQ1QpIHsKKwkJCQlpZiAoRUcob2JqZWN0c19zdG9yZSkub2JqZWN0X2J1 Y2tldHMgJiYKKwkJCQkJRUcob2JqZWN0c19zdG9yZSkub2JqZWN0X2J1Y2tldHNbWl9PQkpf SEFORExFKHAtPnopXS52YWxpZCAmJgorCQkJCQlFRyhvYmplY3RzX3N0b3JlKS5vYmplY3Rf YnVja2V0c1taX09CSl9IQU5ETEUocC0+eildLmJ1Y2tldC5vYmoucmVmY291bnQgPD0gMSkg eworCQkJCQlpZiAoRVhQRUNURUQoWl9PQkpfSEFORExFUihwLT56LCBnZXRfcHJvcGVydGll cykgIT0gTlVMTCkpIHsKKwkJCQkJCVpfT0JKUFJPUChwLT56KS0+cERlc3RydWN0b3IgPSBO VUxMOworCQkJCQl9CisJCQkJCUVHKG9iamVjdHNfc3RvcmUpLm9iamVjdF9idWNrZXRzW1pf T0JKX0hBTkRMRShwLT56KV0uYnVja2V0Lm9iai5yZWZjb3VudCA9IDE7CisJCQkJCXplbmRf b2JqZWN0c19zdG9yZV9kZWxfcmVmX2J5X2hhbmRsZShaX09CSl9IQU5ETEUocC0+eikgVFNS TUxTX0NDKTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCWlmIChaX1RZUEUocC0+eikgPT0g SVNfQVJSQVkpIHsKKwkJCQkJWl9BUlJWQUwocC0+eiktPnBEZXN0cnVjdG9yID0gTlVMTDsK KwkJCQl9CisJCQkJenZhbF9kdG9yKCZwLT56KTsKKwkJCX0KKwkJCUZSRUVfWlZBTF9FWCgm cC0+eik7CisJCQlwID0gcTsKKwkJCWNvdW50Kys7CisJCX0KKwkJR0NfRyhjb2xsZWN0ZWQp ICs9IGNvdW50OworCX0KKworCXJldHVybiBjb3VudDsKK30KKworLyoKKyAqIExvY2FsIHZh cmlhYmxlczoKKyAqIHRhYi13aWR0aDogNAorICogYy1iYXNpYy1vZmZzZXQ6IDQKKyAqIGlu ZGVudC10YWJzLW1vZGU6IHQKKyAqIEVuZDoKKyAqLwpJbmRleDogWmVuZC96ZW5kX2djLmgK PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQpSQ1MgZmlsZTogWmVuZC96ZW5kX2djLmgKZGlmZiAtTiBaZW5kL3pl bmRfZ2MuaAotLS0gL2Rldi9udWxsCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIFpl bmQvemVuZF9nYy5oCTEzIERlYyAyMDA3IDE3OjM5OjAxIC0wMDAwCkBAIC0wLDAgKzEsMjQy IEBACisvKgorICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IFplbmQgRW5naW5lICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwK KyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNyBa ZW5kIFRlY2hub2xvZ2llcyBMdGQuIChodHRwOi8vd3d3LnplbmQuY29tKSB8CisgICArLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSsKKyAgIHwgVGhpcyBzb3VyY2UgZmlsZSBpcyBzdWJqZWN0IHRvIHZl cnNpb24gMi4wMCBvZiB0aGUgWmVuZCBsaWNlbnNlLCAgICAgfAorICAgfCB0aGF0IGlzIGJ1 bmRsZWQgd2l0aCB0aGlzIHBhY2thZ2UgaW4gdGhlIGZpbGUgTElDRU5TRSwgYW5kIGlzICAg ICAgICB8CisgICB8IGF2YWlsYWJsZSB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiBhdCB0 aGUgZm9sbG93aW5nIHVybDogICAgICAgICAgIHwKKyAgIHwgaHR0cDovL3d3dy56ZW5kLmNv bS9saWNlbnNlLzJfMDAudHh0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAor ICAgfCBJZiB5b3UgZGlkIG5vdCByZWNlaXZlIGEgY29weSBvZiB0aGUgWmVuZCBsaWNlbnNl IGFuZCBhcmUgdW5hYmxlIHRvICB8CisgICB8IG9idGFpbiBpdCB0aHJvdWdoIHRoZSB3b3Js ZC13aWRlLXdlYiwgcGxlYXNlIHNlbmQgYSBub3RlIHRvICAgICAgICAgIHwKKyAgIHwgbGlj ZW5zZUB6ZW5kLmNvbSBzbyB3ZSBjYW4gbWFpbCB5b3UgYSBjb3B5IGltbWVkaWF0ZWx5LiAg ICAgICAgICAgICAgfAorICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IEF1dGhvcnM6IERh dmlkIFdhbmcgPHBsYW5ldGJlaW5nQGdtYWlsLmNvbT4gICAgICAgICAgICAgICAgICAgICAg ICAgIHwKKyAgIHwgICAgICAgICAgRG1pdHJ5IFN0b2dvdiA8ZG1pdHJ5QHplbmQuY29tPiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisq LworCisvKiAkSWQ6JCAqLworCisjaWZuZGVmIFpFTkRfR0NfSAorI2RlZmluZSBaRU5EX0dD X0gKKworI2lmbmRlZiBHQ19CRU5DSAorIyBkZWZpbmUgR0NfQkVOQ0ggMAorI2VuZGlmCisK KyNpZiBHQ19CRU5DSAorIyBkZWZpbmUgR0NfQkVOQ0hfSU5DKGNvdW50ZXIpIEdDX0coY291 bnRlcikrKworIyBkZWZpbmUgR0NfQkVOQ0hfREVDKGNvdW50ZXIpIEdDX0coY291bnRlcikt LQorIyBkZWZpbmUgR0NfQkVOQ0hfUEVBSyhwZWFrLCBjb3VudGVyKSBkbyB7CQlcCisJCWlm IChHQ19HKGNvdW50ZXIpID4gR0NfRyhwZWFrKSkgewkJXAorCQkJR0NfRyhwZWFrKSA9IEdD X0coY291bnRlcik7CQkJXAorCQl9CQkJCQkJCQkJCVwKKwl9IHdoaWxlICgwKQorI2Vsc2UK KyMgZGVmaW5lIEdDX0JFTkNIX0lOQyhjb3VudGVyKQorIyBkZWZpbmUgR0NfQkVOQ0hfREVD KGNvdW50ZXIpCisjIGRlZmluZSBHQ19CRU5DSF9QRUFLKHBlYWssIGNvdW50ZXIpCisjZW5k aWYKKworI2RlZmluZSBHQ19DT0xPUiAgMHgwMworCisjZGVmaW5lIEdDX0JMQUNLICAweDAw CisjZGVmaW5lIEdDX1dISVRFICAweDAxCisjZGVmaW5lIEdDX0dSRVkgICAweDAyCisjZGVm aW5lIEdDX1BVUlBMRSAweDAzCisKKyNkZWZpbmUgR0NfQUREUkVTUyh2KSBcCisJKChnY19y b290X2J1ZmZlciopKCgoemVuZF91aW50cHRyX3QpKHYpKSAmIH5HQ19DT0xPUikpCisjZGVm aW5lIEdDX1NFVF9BRERSRVNTKHYsIGEpIFwKKwkodikgPSAoKGdjX3Jvb3RfYnVmZmVyKiko KCgoemVuZF91aW50cHRyX3QpKHYpKSAmIEdDX0NPTE9SKSB8ICgoemVuZF91aW50cHRyX3Qp KGEpKSkpCisjZGVmaW5lIEdDX0dFVF9DT0xPUih2KSBcCisJKCgoemVuZF91aW50cHRyX3Qp KHYpKSAmIEdDX0NPTE9SKQorI2RlZmluZSBHQ19TRVRfQ09MT1IodiwgYykgXAorCSh2KSA9 ICgoZ2Nfcm9vdF9idWZmZXIqKSgoKCh6ZW5kX3VpbnRwdHJfdCkodikpICYgfkdDX0NPTE9S KSB8IChjKSkpCisjZGVmaW5lIEdDX1NFVF9CTEFDSyh2KSBcCisJKHYpID0gKChnY19yb290 X2J1ZmZlciopKCgoemVuZF91aW50cHRyX3QpKHYpKSAmIH5HQ19DT0xPUikpCisjZGVmaW5l IEdDX1NFVF9QVVJQTEUodikgXAorCSh2KSA9ICgoZ2Nfcm9vdF9idWZmZXIqKSgoKHplbmRf dWludHB0cl90KSh2KSkgfCBHQ19QVVJQTEUpKQorCisjZGVmaW5lIEdDX1pWQUxfSU5JVCh6 KSBcCisJKCh6dmFsX2djX2luZm8qKSh6KSktPnUuYnVmZmVyZWQgPSBOVUxMCisjZGVmaW5l IEdDX1pWQUxfQUREUkVTUyh2KSBcCisJR0NfQUREUkVTUygoKHp2YWxfZ2NfaW5mbyopKHYp KS0+dS5idWZmZXJlZCkKKyNkZWZpbmUgR0NfWlZBTF9TRVRfQUREUkVTUyh2LCBhKSBcCisJ R0NfU0VUX0FERFJFU1MoKCh6dmFsX2djX2luZm8qKSh2KSktPnUuYnVmZmVyZWQsIChhKSkK KyNkZWZpbmUgR0NfWlZBTF9HRVRfQ09MT1IodikgXAorCUdDX0dFVF9DT0xPUigoKHp2YWxf Z2NfaW5mbyopKHYpKS0+dS5idWZmZXJlZCkKKyNkZWZpbmUgR0NfWlZBTF9TRVRfQ09MT1Io diwgYykgXAorCUdDX1NFVF9DT0xPUigoKHp2YWxfZ2NfaW5mbyopKHYpKS0+dS5idWZmZXJl ZCwgKGMpKQorI2RlZmluZSBHQ19aVkFMX1NFVF9CTEFDSyh2KSBcCisJR0NfU0VUX0JMQUNL KCgoenZhbF9nY19pbmZvKikodikpLT51LmJ1ZmZlcmVkKQorI2RlZmluZSBHQ19aVkFMX1NF VF9QVVJQTEUodikgXAorCUdDX1NFVF9QVVJQTEUoKCh6dmFsX2djX2luZm8qKSh2KSktPnUu YnVmZmVyZWQpCisKKyNkZWZpbmUgR0NfT0JKX0lOSVQoeikgXAorCSh6KS0+YnVmZmVyZWQg PSBOVUxMCisKK3R5cGVkZWYgc3RydWN0IF9nY19yb290X2J1ZmZlciB7CisJc3RydWN0IF9n Y19yb290X2J1ZmZlciAgICpwcmV2OwkJLyogZG91YmxlLWxpbmtlZCBsaXN0ICAgICAgICAg ICAgICAgKi8KKwlzdHJ1Y3QgX2djX3Jvb3RfYnVmZmVyICAgKm5leHQ7CisJemVuZF9vYmpl Y3RfaGFuZGxlICAgICAgICBoYW5kbGU7CS8qIG11c3QgYmUgMCBmb3IgenZhbCAgICAgICAg ICAgICAgICovCisJdW5pb24geworCQl6dmFsICAgICAgICAgICAgICAgICAqcHo7CisJCXpl bmRfb2JqZWN0X2hhbmRsZXJzICpoYW5kbGVyczsKKwl9IHU7Cit9IGdjX3Jvb3RfYnVmZmVy OworCit0eXBlZGVmIHN0cnVjdCBfenZhbF9nY19pbmZvIHsKKwl6dmFsIHo7CisJdW5pb24g eworCQlnY19yb290X2J1ZmZlciAgICAgICAqYnVmZmVyZWQ7CisJCXN0cnVjdCBfenZhbF9n Y19pbmZvICpuZXh0OworCX0gdTsKK30genZhbF9nY19pbmZvOworCit0eXBlZGVmIHN0cnVj dCBfemVuZF9nY19nbG9iYWxzIHsKKwl6ZW5kX2Jvb2wgICAgICAgICBnY19lbmFibGVkOwor CisJZ2Nfcm9vdF9idWZmZXIgICAqYnVmOwkJCQkvKiBwcmVhbGxvY2F0ZWQgYXJyYXlzIG9m IGJ1ZmZlcnMgICAqLworCWdjX3Jvb3RfYnVmZmVyICAgIHJvb3RzOwkJCS8qIGxpc3Qgb2Yg cG9zc2libGUgcm9vdHMgb2YgY3ljbGVzICovCisJZ2Nfcm9vdF9idWZmZXIgICAqdW51c2Vk OwkJCS8qIGxpc3Qgb2YgdW51c2VkIGJ1ZmZlcnMgICAgICAgICAgICovCisKKwl6dmFsX2dj X2luZm8gICAgICp6dmFsX3RvX2ZyZWU7CQkvKiB0ZW1wb3Jhcnl0IGxpc3Qgb2YgenZhbHMg dG8gZnJlZSAqLworCisJemVuZF91aW50IGdjX3J1bnM7CisJemVuZF91aW50IGNvbGxlY3Rl ZDsKKworI2lmIEdDX0JFTkNICisJemVuZF91aW50IHJvb3RfYnVmX2xlbmd0aDsKKwl6ZW5k X3VpbnQgcm9vdF9idWZfcGVhazsKKwl6ZW5kX3VpbnQgenZhbF9wb3NzaWJsZV9yb290Owor CXplbmRfdWludCB6b2JqX3Bvc3NpYmxlX3Jvb3Q7CisJemVuZF91aW50IHp2YWxfYnVmZmVy ZWQ7CisJemVuZF91aW50IHpvYmpfYnVmZmVyZWQ7CisJemVuZF91aW50IHp2YWxfcmVtb3Zl X2Zyb21fYnVmZmVyOworCXplbmRfdWludCB6b2JqX3JlbW92ZV9mcm9tX2J1ZmZlcjsKKwl6 ZW5kX3VpbnQgenZhbF9tYXJrZWRfZ3JleTsKKwl6ZW5kX3VpbnQgem9ial9tYXJrZWRfZ3Jl eTsKKyNlbmRpZgorCit9IHplbmRfZ2NfZ2xvYmFsczsKKworI2lmZGVmIFpUUworQkVHSU5f RVhURVJOX0MoKQorWkVORF9BUEkgZXh0ZXJuIGludCBnY19nbG9iYWxzX2lkOworRU5EX0VY VEVSTl9DKCkKKyNkZWZpbmUgR0NfRyh2KSBUU1JNRyhnY19nbG9iYWxzX2lkLCB6ZW5kX2dj X2dsb2JhbHMgKiwgdikKKyNlbHNlCisjZGVmaW5lIEdDX0codikgKGdjX2dsb2JhbHMudikK K2V4dGVybiBaRU5EX0FQSSB6ZW5kX2djX2dsb2JhbHMgZ2NfZ2xvYmFsczsKKyNlbmRpZgor CitCRUdJTl9FWFRFUk5fQygpCitaRU5EX0FQSSBpbnQgIGdjX2NvbGxlY3RfY3ljbGVzKFRT Uk1MU19EKTsKK1pFTkRfQVBJIHZvaWQgZ2NfenZhbF9wb3NzaWJsZV9yb290KHp2YWwgKnp2 IFRTUk1MU19EQyk7CitaRU5EX0FQSSB2b2lkIGdjX3pvYmpfcG9zc2libGVfcm9vdCh6dmFs ICp6diBUU1JNTFNfREMpOworWkVORF9BUEkgdm9pZCBnY19nbG9iYWxzX2N0b3IoVFNSTUxT X0QpOworWkVORF9BUEkgdm9pZCBnY19nbG9iYWxzX2R0b3IoVFNSTUxTX0QpOworWkVORF9B UEkgdm9pZCBnY19pbml0KFRTUk1MU19EKTsKK1pFTkRfQVBJIHZvaWQgZ2NfcmVzZXQoVFNS TUxTX0QpOworRU5EX0VYVEVSTl9DKCkKKworI2RlZmluZSBHQ19aVkFMX0NIRUNLX1BPU1NJ QkxFX1JPT1QoeikgXAorCWdjX3p2YWxfY2hlY2tfcG9zc2libGVfcm9vdCgoeikgVFNSTUxT X0NDKQorCisjZGVmaW5lIEdDX1JFTU9WRV9GUk9NX0JVRkZFUihjdXJyZW50KSBcCisJZ2Nf cmVtb3ZlX2Zyb21fYnVmZmVyKChjdXJyZW50KSBUU1JNTFNfQ0MpCisKKyNkZWZpbmUgR0Nf UkVNT1ZFX1pWQUxfRlJPTV9CVUZGRVIoeikgXAorCWdjX3JlbW92ZV96dmFsX2Zyb21fYnVm ZmVyKHopCisKKyNkZWZpbmUgR0NfWk9CSl9DSEVDS19QT1NTSUJMRV9ST09UKHpvYmplY3Qp CQkJCQkJCQkJXAorCWRvIHsJCQkJCQkJCQkJCQkJCQkJCQlcCisJCWlmIChFWFBFQ1RFRChF RyhvYmplY3RzX3N0b3JlKS5vYmplY3RfYnVja2V0cyAhPSBOVUxMKSAmJgkJCQlcCisJCSAg ICBFRyhvYmplY3RzX3N0b3JlKS5vYmplY3RfYnVja2V0c1taX09CSl9IQU5ETEVfUCh6b2Jq ZWN0KV0udmFsaWQpIHsJXAorCQkJZ2Nfem9ial9wb3NzaWJsZV9yb290KHpvYmplY3QgVFNS TUxTX0NDKTsJCQkJCQkJXAorCQl9CQkJCQkJCQkJCQkJCQkJCQkJXAorCX0gd2hpbGUgKDAp CisKKyNkZWZpbmUgR0NfUkVNT1ZFX1pPQkpfRlJPTV9CVUZGRVIob2JqKQkJCQkJCQkJCVwK KwlkbyB7CQkJCQkJCQkJCQkJCQkJCVwKKwkJaWYgKEdDX0FERFJFU1MoKG9iaiktPmJ1ZmZl cmVkKSkgewkJCQkJCQkJXAorCQkJR0NfQkVOQ0hfSU5DKHpvYmpfcmVtb3ZlX2Zyb21fYnVm ZmVyKTsJCQkJCQlcCisJCQlHQ19SRU1PVkVfRlJPTV9CVUZGRVIoR0NfQUREUkVTUygob2Jq KS0+YnVmZmVyZWQpKTsJCQlcCisJCQkob2JqKS0+YnVmZmVyZWQgPSBOVUxMOwkJCQkJCQkJ CQlcCisJCX0JCQkJCQkJCQkJCQkJCQkJXAorCX0gd2hpbGUgKDApCisKK3N0YXRpYyB6ZW5k X2Fsd2F5c19pbmxpbmUgdm9pZCBnY196dmFsX2NoZWNrX3Bvc3NpYmxlX3Jvb3QoenZhbCAq eiBUU1JNTFNfREMpCit7CisJaWYgKHotPnR5cGUgPT0gSVNfQVJSQVkgfHwgei0+dHlwZSA9 PSBJU19PQkpFQ1QpIHsKKwkJZ2NfenZhbF9wb3NzaWJsZV9yb290KHogVFNSTUxTX0NDKTsK Kwl9Cit9CisKK3N0YXRpYyB6ZW5kX2Fsd2F5c19pbmxpbmUgdm9pZCBnY19yZW1vdmVfZnJv bV9idWZmZXIoZ2Nfcm9vdF9idWZmZXIgKnJvb3QgVFNSTUxTX0RDKQoreworCXJvb3QtPm5l eHQtPnByZXYgPSByb290LT5wcmV2OworCXJvb3QtPnByZXYtPm5leHQgPSByb290LT5uZXh0 OworCXJvb3QtPnByZXYgPSBHQ19HKHVudXNlZCk7CisJR0NfRyh1bnVzZWQpID0gcm9vdDsK KwlHQ19CRU5DSF9ERUMocm9vdF9idWZfbGVuZ3RoKTsKK30KKworc3RhdGljIHplbmRfYWx3 YXlzX2lubGluZSB2b2lkIGdjX3JlbW92ZV96dmFsX2Zyb21fYnVmZmVyKHp2YWwqIHopCit7 CisJZ2Nfcm9vdF9idWZmZXIqIHJvb3RfYnVmZmVyOworCisJcm9vdF9idWZmZXIgPSBHQ19B RERSRVNTKCgoenZhbF9nY19pbmZvKil6KS0+dS5idWZmZXJlZCk7CisJaWYgKHJvb3RfYnVm ZmVyKSB7CisJCVRTUk1MU19GRVRDSCgpOworCisJCUdDX0JFTkNIX0lOQyh6dmFsX3JlbW92 ZV9mcm9tX2J1ZmZlcik7CisJCUdDX1JFTU9WRV9GUk9NX0JVRkZFUihyb290X2J1ZmZlcik7 CisJCSgoenZhbF9nY19pbmZvKil6KS0+dS5idWZmZXJlZCA9IE5VTEw7CisJfQorfQorCisv KiBUaGUgZm9sbG93aW5nIG1hY3Jvc2VzIG92ZXJyaWRlIG1hY3Jvc2VzIGZyb20gemVuZF9h bGxvYy5oICovCisjdW5kZWYgIEFMTE9DX1pWQUwKKyNkZWZpbmUgQUxMT0NfWlZBTCh6KSAJ CQkJCQkJCQlcCisJZG8gewkJCQkJCQkJCQkJCVwKKwkJKHopID0gKHp2YWwqKWVtYWxsb2Mo c2l6ZW9mKHp2YWxfZ2NfaW5mbykpOwkJXAorCQlHQ19aVkFMX0lOSVQoeik7CQkJCQkJCQlc CisJfSB3aGlsZSAoMCkKKworI3VuZGVmICBGUkVFX1pWQUwKKyNkZWZpbmUgRlJFRV9aVkFM KHopIAkJCQkJCQkJCVwKKwlkbyB7CQkJCQkJCQkJCQkJXAorCSAgICBHQ19SRU1PVkVfWlZB TF9GUk9NX0JVRkZFUih6KTsJCQkJCVwKKwkJZWZyZWUoeik7CQkJCQkJCQkJCVwKKwl9IHdo aWxlICgwKQorCisjdW5kZWYgIEFMTE9DX1pWQUxfUkVMCisjZGVmaW5lIEFMTE9DX1pWQUxf UkVMKHopCQkJCQkJCQlcCisJZG8gewkJCQkJCQkJCQkJCVwKKwkJKHopID0gKHp2YWwqKWVt YWxsb2NfcmVsKHNpemVvZih6dmFsX2djX2luZm8pKTsJXAorCQlHQ19aVkFMX0lOSVQoeik7 CQkJCQkJCQlcCisJfSB3aGlsZSAoMCkKKworI3VuZGVmICBGUkVFX1pWQUxfUkVMCisjZGVm aW5lIEZSRUVfWlZBTF9SRUwoeikJCQkJCQkJCVwKKwlkbyB7CQkJCQkJCQkJCQkJXAorCSAg ICBHQ19SRU1PVkVfWlZBTF9GUk9NX0JVRkZFUih6KTsJCQkJCVwKKwkJZWZyZWVfcmVsKHop OwkJCQkJCQkJCVwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIEZSRUVfWlZBTF9FWCh6KQkJ CQkJCQkJCVwKKwllZnJlZSh6KQkJCQkJCQkJCQkJXAorCisjZW5kaWYgLyogWkVORF9HQ19I ICovCisKKy8qCisgKiBMb2NhbCB2YXJpYWJsZXM6CisgKiB0YWItd2lkdGg6IDQKKyAqIGMt YmFzaWMtb2Zmc2V0OiA0CisgKiBpbmRlbnQtdGFicy1tb2RlOiB0CisgKiBFbmQ6CisgKi8K SW5kZXg6IFplbmQvemVuZF9vYmplY3RzX0FQSS5jCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6 IC9yZXBvc2l0b3J5L1plbmRFbmdpbmUyL3plbmRfb2JqZWN0c19BUEkuYyx2CnJldHJpZXZp bmcgcmV2aXNpb24gMS40Ny4yLjYuMi42LjIuMQpkaWZmIC11IC1wIC1kIC1yMS40Ny4yLjYu Mi42LjIuMSB6ZW5kX29iamVjdHNfQVBJLmMKLS0tIFplbmQvemVuZF9vYmplY3RzX0FQSS5j CTcgT2N0IDIwMDcgMDU6MjI6MDMgLTAwMDAJMS40Ny4yLjYuMi42LjIuMQorKysgWmVuZC96 ZW5kX29iamVjdHNfQVBJLmMJMTMgRGVjIDIwMDcgMTc6Mzk6MDEgLTAwMDAKQEAgLTg0LDYg Kzg0LDggQEAgWkVORF9BUEkgdm9pZCB6ZW5kX29iamVjdHNfc3RvcmVfZnJlZV9vYgogCQlp ZiAob2JqZWN0cy0+b2JqZWN0X2J1Y2tldHNbaV0udmFsaWQpIHsKIAkJCXN0cnVjdCBfc3Rv cmVfb2JqZWN0ICpvYmogPSAmb2JqZWN0cy0+b2JqZWN0X2J1Y2tldHNbaV0uYnVja2V0Lm9i ajsKIAorCQkJR0NfUkVNT1ZFX1pPQkpfRlJPTV9CVUZGRVIob2JqKTsKKwogCQkJb2JqZWN0 cy0+b2JqZWN0X2J1Y2tldHNbaV0udmFsaWQgPSAwOwogCQkJaWYgKG9iai0+ZnJlZV9zdG9y YWdlKSB7CiAJCQkJb2JqLT5mcmVlX3N0b3JhZ2Uob2JqLT5vYmplY3QgVFNSTUxTX0NDKTsK QEAgLTExNiw2ICsxMTgsNyBAQCBaRU5EX0FQSSB6ZW5kX29iamVjdF9oYW5kbGUgemVuZF9v YmplY3RzCiAJRUcob2JqZWN0c19zdG9yZSkub2JqZWN0X2J1Y2tldHNbaGFuZGxlXS52YWxp ZCA9IDE7CiAKIAlvYmotPnJlZmNvdW50ID0gMTsKKwlHQ19PQkpfSU5JVChvYmopOwogCW9i ai0+b2JqZWN0ID0gb2JqZWN0OwogCW9iai0+ZHRvciA9IGR0b3I/ZHRvcjooemVuZF9vYmpl Y3RzX3N0b3JlX2R0b3JfdCl6ZW5kX29iamVjdHNfZGVzdHJveV9vYmplY3Q7CiAJb2JqLT5m cmVlX3N0b3JhZ2UgPSBmcmVlX3N0b3JhZ2U7CkBAIC0xNjcsNiArMTcwLDggQEAgWkVORF9B UEkgdm9pZCB6ZW5kX29iamVjdHNfc3RvcmVfZGVsX3JlZgogCVpfQUREUkVGX1Aoem9iamVj dCk7CiAJemVuZF9vYmplY3RzX3N0b3JlX2RlbF9yZWZfYnlfaGFuZGxlKGhhbmRsZSBUU1JN TFNfQ0MpOwogCVpfREVMUkVGX1Aoem9iamVjdCk7CisKKwlHQ19aT0JKX0NIRUNLX1BPU1NJ QkxFX1JPT1Qoem9iamVjdCk7CiB9CiAKIC8qCkBAIC0yMDEsNiArMjA2LDcgQEAgWkVORF9B UEkgdm9pZCB6ZW5kX29iamVjdHNfc3RvcmVfZGVsX3JlZgogCQkJCX0KIAkJCX0KIAkJCWlm IChvYmotPnJlZmNvdW50ID09IDEpIHsKKwkJCQlHQ19SRU1PVkVfWk9CSl9GUk9NX0JVRkZF UihvYmopOwogCQkJCWlmIChvYmotPmZyZWVfc3RvcmFnZSkgewogCQkJCQl6ZW5kX3RyeSB7 CiAJCQkJCQlvYmotPmZyZWVfc3RvcmFnZShvYmotPm9iamVjdCBUU1JNTFNfQ0MpOwpJbmRl eDogWmVuZC96ZW5kX29iamVjdHNfQVBJLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL3Jl cG9zaXRvcnkvWmVuZEVuZ2luZTIvemVuZF9vYmplY3RzX0FQSS5oLHYKcmV0cmlldmluZyBy ZXZpc2lvbiAxLjIwLjIuMS4yLjQKZGlmZiAtdSAtcCAtZCAtcjEuMjAuMi4xLjIuNCB6ZW5k X29iamVjdHNfQVBJLmgKLS0tIFplbmQvemVuZF9vYmplY3RzX0FQSS5oCTIxIEp1bCAyMDA3 IDAwOjM1OjE0IC0wMDAwCTEuMjAuMi4xLjIuNAorKysgWmVuZC96ZW5kX29iamVjdHNfQVBJ LmgJMTMgRGVjIDIwMDcgMTc6Mzk6MDEgLTAwMDAKQEAgLTM4LDYgKzM4LDcgQEAgdHlwZWRl ZiBzdHJ1Y3QgX3plbmRfb2JqZWN0X3N0b3JlX2J1Y2tldAogCQkJemVuZF9vYmplY3RzX2Zy ZWVfb2JqZWN0X3N0b3JhZ2VfdCBmcmVlX3N0b3JhZ2U7CiAJCQl6ZW5kX29iamVjdHNfc3Rv cmVfY2xvbmVfdCBjbG9uZTsKIAkJCXplbmRfdWludCByZWZjb3VudDsKKwkJCWdjX3Jvb3Rf YnVmZmVyICpidWZmZXJlZDsKIAkJfSBvYmo7CiAJCXN0cnVjdCB7CiAJCQlpbnQgbmV4dDsK SW5kZXg6IFplbmQvemVuZF9vcGVyYXRvcnMuYwo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv cmVwb3NpdG9yeS9aZW5kRW5naW5lMi96ZW5kX29wZXJhdG9ycy5jLHYKcmV0cmlldmluZyBy ZXZpc2lvbiAxLjIwOC4yLjQuMi4yMy4yLjMKZGlmZiAtdSAtcCAtZCAtcjEuMjA4LjIuNC4y LjIzLjIuMyB6ZW5kX29wZXJhdG9ycy5jCi0tLSBaZW5kL3plbmRfb3BlcmF0b3JzLmMJMjAg Tm92IDIwMDcgMTM6MjY6MzYgLTAwMDAJMS4yMDguMi40LjIuMjMuMi4zCisrKyBaZW5kL3pl bmRfb3BlcmF0b3JzLmMJMTMgRGVjIDIwMDcgMTc6Mzk6MDEgLTAwMDAKQEAgLTEzMzMsNiAr MTMzMyw3IEBAIFpFTkRfQVBJIGludCBudW1lcmljX2NvbXBhcmVfZnVuY3Rpb24oenYKIHN0 YXRpYyBpbmxpbmUgdm9pZCB6ZW5kX2ZyZWVfb2JqX2dldF9yZXN1bHQoenZhbCAqb3ApCiB7 CiAJaWYgKFpfUkVGQ09VTlRfUChvcCkgPT0gMCkgeworCQlHQ19SRU1PVkVfWlZBTF9GUk9N X0JVRkZFUihvcCk7CiAJCXp2YWxfZHRvcihvcCk7CiAJCUZSRUVfWlZBTChvcCk7CiAJfSBl bHNlIHsKSW5kZXg6IFplbmQvemVuZF92bV9kZWYuaAo9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl OiAvcmVwb3NpdG9yeS9aZW5kRW5naW5lMi96ZW5kX3ZtX2RlZi5oLHYKcmV0cmlldmluZyBy ZXZpc2lvbiAxLjU5LjIuMjkuMi40OC4yLjI0CmRpZmYgLXUgLXAgLWQgLXIxLjU5LjIuMjku Mi40OC4yLjI0IHplbmRfdm1fZGVmLmgKLS0tIFplbmQvemVuZF92bV9kZWYuaAk3IERlYyAy MDA3IDE3OjExOjIzIC0wMDAwCTEuNTkuMi4yOS4yLjQ4LjIuMjQKKysrIFplbmQvemVuZF92 bV9kZWYuaAkxMyBEZWMgMjAwNyAxNzozOTowMSAtMDAwMApAQCAtMzQ5LDYgKzM0OSw3IEBA IFpFTkRfVk1fSEVMUEVSX0VYKHplbmRfYmluYXJ5X2Fzc2lnbl9vcF8KIAkJCQkJenZhbCAq dmFsdWUgPSBaX09CSl9IVF9QKHopLT5nZXQoeiBUU1JNTFNfQ0MpOwogCiAJCQkJCWlmICha X1JFRkNPVU5UX1AoeikgPT0gMCkgeworCQkJCQkJR0NfUkVNT1ZFX1pWQUxfRlJPTV9CVUZG RVIoeik7CiAJCQkJCQl6dmFsX2R0b3Ioeik7CiAJCQkJCQlGUkVFX1pWQUwoeik7CiAJCQkJ CX0KQEAgLTU4Nyw2ICs1ODgsNyBAQCBaRU5EX1ZNX0hFTFBFUl9FWCh6ZW5kX3ByZV9pbmNk ZWNfcHJvcGVyCiAJCQkJenZhbCAqdmFsdWUgPSBaX09CSl9IVF9QKHopLT5nZXQoeiBUU1JN TFNfQ0MpOwogCiAJCQkJaWYgKFpfUkVGQ09VTlRfUCh6KSA9PSAwKSB7CisJCQkJCUdDX1JF TU9WRV9aVkFMX0ZST01fQlVGRkVSKHopOwogCQkJCQl6dmFsX2R0b3Ioeik7CiAJCQkJCUZS RUVfWlZBTCh6KTsKIAkJCQl9CkBAIC02NzcsNiArNjc5LDcgQEAgWkVORF9WTV9IRUxQRVJf RVgoemVuZF9wb3N0X2luY2RlY19wcm9wZQogCQkJCXp2YWwgKnZhbHVlID0gWl9PQkpfSFRf UCh6KS0+Z2V0KHogVFNSTUxTX0NDKTsKIAogCQkJCWlmIChaX1JFRkNPVU5UX1AoeikgPT0g MCkgeworCQkJCQlHQ19SRU1PVkVfWlZBTF9GUk9NX0JVRkZFUih6KTsKIAkJCQkJenZhbF9k dG9yKHopOwogCQkJCQlGUkVFX1pWQUwoeik7CiAJCQkJfQpAQCAtMTIyOSw2ICsxMjMyLDcg QEAgWkVORF9WTV9IRUxQRVJfRVgoemVuZF9mZXRjaF9wcm9wZXJ0eV9hZAogCQkqcmV0dmFs ID0gWl9PQkpfSFRfUChjb250YWluZXIpLT5yZWFkX3Byb3BlcnR5KGNvbnRhaW5lciwgb2Zm c2V0LCB0eXBlIFRTUk1MU19DQyk7CiAKIAkJaWYgKFJFVFVSTl9WQUxVRV9VTlVTRUQoJm9w bGluZS0+cmVzdWx0KSAmJiAoWl9SRUZDT1VOVF9QUChyZXR2YWwpID09IDApKSB7CisJCQlH Q19SRU1PVkVfWlZBTF9GUk9NX0JVRkZFUigqcmV0dmFsKTsKIAkJCXp2YWxfZHRvcigqcmV0 dmFsKTsKIAkJCUZSRUVfWlZBTCgqcmV0dmFsKTsKIAkJfSBlbHNlIHsKSW5kZXg6IFplbmQv emVuZF92bV9leGVjdXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL3JlcG9zaXRvcnkv WmVuZEVuZ2luZTIvemVuZF92bV9leGVjdXRlLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu NjIuMi4zMC4yLjQ5LjIuMjUKZGlmZiAtdSAtcCAtZCAtcjEuNjIuMi4zMC4yLjQ5LjIuMjUg emVuZF92bV9leGVjdXRlLmgKLS0tIFplbmQvemVuZF92bV9leGVjdXRlLmgJNyBEZWMgMjAw NyAxNzoxMToyMyAtMDAwMAkxLjYyLjIuMzAuMi40OS4yLjI1CisrKyBaZW5kL3plbmRfdm1f ZXhlY3V0ZS5oCTEzIERlYyAyMDA3IDE3OjM5OjAyIC0wMDAwCkBAIC04ODQ1LDYgKzg4NDUs NyBAQCBzdGF0aWMgaW50IHplbmRfYmluYXJ5X2Fzc2lnbl9vcF9vYmpfaGVsCiAJCQkJCXp2 YWwgKnZhbHVlID0gWl9PQkpfSFRfUCh6KS0+Z2V0KHogVFNSTUxTX0NDKTsKIAogCQkJCQlp ZiAoWl9SRUZDT1VOVF9QKHopID09IDApIHsKKwkJCQkJCUdDX1JFTU9WRV9aVkFMX0ZST01f QlVGRkVSKHopOwogCQkJCQkJenZhbF9kdG9yKHopOwogCQkJCQkJRlJFRV9aVkFMKHopOwog CQkJCQl9CkBAIC05MDgyLDYgKzkwODMsNyBAQCBzdGF0aWMgaW50IHplbmRfcHJlX2luY2Rl Y19wcm9wZXJ0eV9oZWxwCiAJCQkJenZhbCAqdmFsdWUgPSBaX09CSl9IVF9QKHopLT5nZXQo eiBUU1JNTFNfQ0MpOwogCiAJCQkJaWYgKFpfUkVGQ09VTlRfUCh6KSA9PSAwKSB7CisJCQkJ CUdDX1JFTU9WRV9aVkFMX0ZST01fQlVGRkVSKHopOwogCQkJCQl6dmFsX2R0b3Ioeik7CiAJ CQkJCUZSRUVfWlZBTCh6KTsKIAkJCQl9CkBAIC05MTcyLDYgKzkxNzQsNyBAQCBzdGF0aWMg aW50IHplbmRfcG9zdF9pbmNkZWNfcHJvcGVydHlfaGVsCiAJCQkJenZhbCAqdmFsdWUgPSBa X09CSl9IVF9QKHopLT5nZXQoeiBUU1JNTFNfQ0MpOwogCiAJCQkJaWYgKFpfUkVGQ09VTlRf UCh6KSA9PSAwKSB7CisJCQkJCUdDX1JFTU9WRV9aVkFMX0ZST01fQlVGRkVSKHopOwogCQkJ CQl6dmFsX2R0b3Ioeik7CiAJCQkJCUZSRUVfWlZBTCh6KTsKIAkJCQl9CkBAIC05NDA0LDYg Kzk0MDcsNyBAQCBzdGF0aWMgaW50IHplbmRfZmV0Y2hfcHJvcGVydHlfYWRkcmVzc19yCiAJ CSpyZXR2YWwgPSBaX09CSl9IVF9QKGNvbnRhaW5lciktPnJlYWRfcHJvcGVydHkoY29udGFp bmVyLCBvZmZzZXQsIHR5cGUgVFNSTUxTX0NDKTsKIAogCQlpZiAoUkVUVVJOX1ZBTFVFX1VO VVNFRCgmb3BsaW5lLT5yZXN1bHQpICYmIChaX1JFRkNPVU5UX1BQKHJldHZhbCkgPT0gMCkp IHsKKwkJCUdDX1JFTU9WRV9aVkFMX0ZST01fQlVGRkVSKCpyZXR2YWwpOwogCQkJenZhbF9k dG9yKCpyZXR2YWwpOwogCQkJRlJFRV9aVkFMKCpyZXR2YWwpOwogCQl9IGVsc2UgewpAQCAt MTA1NDAsNiArMTA1NDQsNyBAQCBzdGF0aWMgaW50IHplbmRfYmluYXJ5X2Fzc2lnbl9vcF9v YmpfaGVsCiAJCQkJCXp2YWwgKnZhbHVlID0gWl9PQkpfSFRfUCh6KS0+Z2V0KHogVFNSTUxT X0NDKTsKIAogCQkJCQlpZiAoWl9SRUZDT1VOVF9QKHopID09IDApIHsKKwkJCQkJCUdDX1JF TU9WRV9aVkFMX0ZST01fQlVGRkVSKHopOwogCQkJCQkJenZhbF9kdG9yKHopOwogCQkJCQkJ RlJFRV9aVkFMKHopOwogCQkJCQl9CkBAIC0xMDc3OCw2ICsxMDc4Myw3IEBAIHN0YXRpYyBp bnQgemVuZF9wcmVfaW5jZGVjX3Byb3BlcnR5X2hlbHAKIAkJCQl6dmFsICp2YWx1ZSA9IFpf T0JKX0hUX1AoeiktPmdldCh6IFRTUk1MU19DQyk7CiAKIAkJCQlpZiAoWl9SRUZDT1VOVF9Q KHopID09IDApIHsKKwkJCQkJR0NfUkVNT1ZFX1pWQUxfRlJPTV9CVUZGRVIoeik7CiAJCQkJ CXp2YWxfZHRvcih6KTsKIAkJCQkJRlJFRV9aVkFMKHopOwogCQkJCX0KQEAgLTEwODY4LDYg KzEwODc0LDcgQEAgc3RhdGljIGludCB6ZW5kX3Bvc3RfaW5jZGVjX3Byb3BlcnR5X2hlbAog CQkJCXp2YWwgKnZhbHVlID0gWl9PQkpfSFRfUCh6KS0+Z2V0KHogVFNSTUxTX0NDKTsKIAog CQkJCWlmIChaX1JFRkNPVU5UX1AoeikgPT0gMCkgeworCQkJCQlHQ19SRU1PVkVfWlZBTF9G Uk9NX0JVRkZFUih6KTsKIAkJCQkJenZhbF9kdG9yKHopOwogCQkJCQlGUkVFX1pWQUwoeik7 CiAJCQkJfQpAQCAtMTExMDAsNiArMTExMDcsNyBAQCBzdGF0aWMgaW50IHplbmRfZmV0Y2hf cHJvcGVydHlfYWRkcmVzc19yCiAJCSpyZXR2YWwgPSBaX09CSl9IVF9QKGNvbnRhaW5lcikt PnJlYWRfcHJvcGVydHkoY29udGFpbmVyLCBvZmZzZXQsIHR5cGUgVFNSTUxTX0NDKTsKIAog CQlpZiAoUkVUVVJOX1ZBTFVFX1VOVVNFRCgmb3BsaW5lLT5yZXN1bHQpICYmIChaX1JFRkNP VU5UX1BQKHJldHZhbCkgPT0gMCkpIHsKKwkJCUdDX1JFTU9WRV9aVkFMX0ZST01fQlVGRkVS KCpyZXR2YWwpOwogCQkJenZhbF9kdG9yKCpyZXR2YWwpOwogCQkJRlJFRV9aVkFMKCpyZXR2 YWwpOwogCQl9IGVsc2UgewpAQCAtMTIxNjcsNiArMTIxNzUsNyBAQCBzdGF0aWMgaW50IHpl bmRfYmluYXJ5X2Fzc2lnbl9vcF9vYmpfaGVsCiAJCQkJCXp2YWwgKnZhbHVlID0gWl9PQkpf SFRfUCh6KS0+Z2V0KHogVFNSTUxTX0NDKTsKIAogCQkJCQlpZiAoWl9SRUZDT1VOVF9QKHop ID09IDApIHsKKwkJCQkJCUdDX1JFTU9WRV9aVkFMX0ZST01fQlVGRkVSKHopOwogCQkJCQkJ enZhbF9kdG9yKHopOwogCQkJCQkJRlJFRV9aVkFMKHopOwogCQkJCQl9CkBAIC0xMjQwNSw2 ICsxMjQxNCw3IEBAIHN0YXRpYyBpbnQgemVuZF9wcmVfaW5jZGVjX3Byb3BlcnR5X2hlbHAK IAkJCQl6dmFsICp2YWx1ZSA9IFpfT0JKX0hUX1AoeiktPmdldCh6IFRTUk1MU19DQyk7CiAK IAkJCQlpZiAoWl9SRUZDT1VOVF9QKHopID09IDApIHsKKwkJCQkJR0NfUkVNT1ZFX1pWQUxf RlJPTV9CVUZGRVIoeik7CiAJCQkJCXp2YWxfZHRvcih6KTsKIAkJCQkJRlJFRV9aVkFMKHop OwogCQkJCX0KQEAgLTEyNDk1LDYgKzEyNTA1LDcgQEAgc3RhdGljIGludCB6ZW5kX3Bvc3Rf aW5jZGVjX3Byb3BlcnR5X2hlbAogCQkJCXp2YWwgKnZhbHVlID0gWl9PQkpfSFRfUCh6KS0+ Z2V0KHogVFNSTUxTX0NDKTsKIAogCQkJCWlmIChaX1JFRkNPVU5UX1AoeikgPT0gMCkgewor CQkJCQlHQ19SRU1PVkVfWlZBTF9GUk9NX0JVRkZFUih6KTsKIAkJCQkJenZhbF9kdG9yKHop OwogCQkJCQlGUkVFX1pWQUwoeik7CiAJCQkJfQpAQCAtMTI3MjcsNiArMTI3MzgsNyBAQCBz dGF0aWMgaW50IHplbmRfZmV0Y2hfcHJvcGVydHlfYWRkcmVzc19yCiAJCSpyZXR2YWwgPSBa X09CSl9IVF9QKGNvbnRhaW5lciktPnJlYWRfcHJvcGVydHkoY29udGFpbmVyLCBvZmZzZXQs IHR5cGUgVFNSTUxTX0NDKTsKIAogCQlpZiAoUkVUVVJOX1ZBTFVFX1VOVVNFRCgmb3BsaW5l LT5yZXN1bHQpICYmIChaX1JFRkNPVU5UX1BQKHJldHZhbCkgPT0gMCkpIHsKKwkJCUdDX1JF TU9WRV9aVkFMX0ZST01fQlVGRkVSKCpyZXR2YWwpOwogCQkJenZhbF9kdG9yKCpyZXR2YWwp OwogCQkJRlJFRV9aVkFMKCpyZXR2YWwpOwogCQl9IGVsc2UgewpAQCAtMTM1OTgsNiArMTM2 MTAsNyBAQCBzdGF0aWMgaW50IHplbmRfYmluYXJ5X2Fzc2lnbl9vcF9vYmpfaGVsCiAJCQkJ CXp2YWwgKnZhbHVlID0gWl9PQkpfSFRfUCh6KS0+Z2V0KHogVFNSTUxTX0NDKTsKIAogCQkJ CQlpZiAoWl9SRUZDT1VOVF9QKHopID09IDApIHsKKwkJCQkJCUdDX1JFTU9WRV9aVkFMX0ZS T01fQlVGRkVSKHopOwogCQkJCQkJenZhbF9kdG9yKHopOwogCQkJCQkJRlJFRV9aVkFMKHop OwogCQkJCQl9CkBAIC0xNDM3Niw2ICsxNDM4OSw3IEBAIHN0YXRpYyBpbnQgemVuZF9iaW5h cnlfYXNzaWduX29wX29ial9oZWwKIAkJCQkJenZhbCAqdmFsdWUgPSBaX09CSl9IVF9QKHop LT5nZXQoeiBUU1JNTFNfQ0MpOwogCiAJCQkJCWlmIChaX1JFRkNPVU5UX1AoeikgPT0gMCkg eworCQkJCQkJR0NfUkVNT1ZFX1pWQUxfRlJPTV9CVUZGRVIoeik7CiAJCQkJCQl6dmFsX2R0 b3Ioeik7CiAJCQkJCQlGUkVFX1pWQUwoeik7CiAJCQkJCX0KQEAgLTE0NjEzLDYgKzE0NjI3 LDcgQEAgc3RhdGljIGludCB6ZW5kX3ByZV9pbmNkZWNfcHJvcGVydHlfaGVscAogCQkJCXp2 YWwgKnZhbHVlID0gWl9PQkpfSFRfUCh6KS0+Z2V0KHogVFNSTUxTX0NDKTsKIAogCQkJCWlm IChaX1JFRkNPVU5UX1AoeikgPT0gMCkgeworCQkJCQlHQ19SRU1PVkVfWlZBTF9GUk9NX0JV RkZFUih6KTsKIAkJCQkJenZhbF9kdG9yKHopOwogCQkJCQlGUkVFX1pWQUwoeik7CiAJCQkJ fQpAQCAtMTQ3MDMsNiArMTQ3MTgsNyBAQCBzdGF0aWMgaW50IHplbmRfcG9zdF9pbmNkZWNf cHJvcGVydHlfaGVsCiAJCQkJenZhbCAqdmFsdWUgPSBaX09CSl9IVF9QKHopLT5nZXQoeiBU U1JNTFNfQ0MpOwogCiAJCQkJaWYgKFpfUkVGQ09VTlRfUCh6KSA9PSAwKSB7CisJCQkJCUdD X1JFTU9WRV9aVkFMX0ZST01fQlVGRkVSKHopOwogCQkJCQl6dmFsX2R0b3Ioeik7CiAJCQkJ CUZSRUVfWlZBTCh6KTsKIAkJCQl9CkBAIC0xNDkzNSw2ICsxNDk1MSw3IEBAIHN0YXRpYyBp bnQgemVuZF9mZXRjaF9wcm9wZXJ0eV9hZGRyZXNzX3IKIAkJKnJldHZhbCA9IFpfT0JKX0hU X1AoY29udGFpbmVyKS0+cmVhZF9wcm9wZXJ0eShjb250YWluZXIsIG9mZnNldCwgdHlwZSBU U1JNTFNfQ0MpOwogCiAJCWlmIChSRVRVUk5fVkFMVUVfVU5VU0VEKCZvcGxpbmUtPnJlc3Vs dCkgJiYgKFpfUkVGQ09VTlRfUFAocmV0dmFsKSA9PSAwKSkgeworCQkJR0NfUkVNT1ZFX1pW QUxfRlJPTV9CVUZGRVIoKnJldHZhbCk7CiAJCQl6dmFsX2R0b3IoKnJldHZhbCk7CiAJCQlG UkVFX1pWQUwoKnJldHZhbCk7CiAJCX0gZWxzZSB7CkBAIC0xNTg4Myw2ICsxNTkwMCw3IEBA IHN0YXRpYyBpbnQgemVuZF9iaW5hcnlfYXNzaWduX29wX29ial9oZWwKIAkJCQkJenZhbCAq dmFsdWUgPSBaX09CSl9IVF9QKHopLT5nZXQoeiBUU1JNTFNfQ0MpOwogCiAJCQkJCWlmICha X1JFRkNPVU5UX1AoeikgPT0gMCkgeworCQkJCQkJR0NfUkVNT1ZFX1pWQUxfRlJPTV9CVUZG RVIoeik7CiAJCQkJCQl6dmFsX2R0b3Ioeik7CiAJCQkJCQlGUkVFX1pWQUwoeik7CiAJCQkJ CX0KQEAgLTE2MTE5LDYgKzE2MTM3LDcgQEAgc3RhdGljIGludCB6ZW5kX3ByZV9pbmNkZWNf cHJvcGVydHlfaGVscAogCQkJCXp2YWwgKnZhbHVlID0gWl9PQkpfSFRfUCh6KS0+Z2V0KHog VFNSTUxTX0NDKTsKIAogCQkJCWlmIChaX1JFRkNPVU5UX1AoeikgPT0gMCkgeworCQkJCQlH Q19SRU1PVkVfWlZBTF9GUk9NX0JVRkZFUih6KTsKIAkJCQkJenZhbF9kdG9yKHopOwogCQkJ CQlGUkVFX1pWQUwoeik7CiAJCQkJfQpAQCAtMTYyMDksNiArMTYyMjgsNyBAQCBzdGF0aWMg aW50IHplbmRfcG9zdF9pbmNkZWNfcHJvcGVydHlfaGVsCiAJCQkJenZhbCAqdmFsdWUgPSBa X09CSl9IVF9QKHopLT5nZXQoeiBUU1JNTFNfQ0MpOwogCiAJCQkJaWYgKFpfUkVGQ09VTlRf UCh6KSA9PSAwKSB7CisJCQkJCUdDX1JFTU9WRV9aVkFMX0ZST01fQlVGRkVSKHopOwogCQkJ CQl6dmFsX2R0b3Ioeik7CiAJCQkJCUZSRUVfWlZBTCh6KTsKIAkJCQl9CkBAIC0xNjI5Miw2 ICsxNjMxMiw3IEBAIHN0YXRpYyBpbnQgemVuZF9mZXRjaF9wcm9wZXJ0eV9hZGRyZXNzX3IK IAkJKnJldHZhbCA9IFpfT0JKX0hUX1AoY29udGFpbmVyKS0+cmVhZF9wcm9wZXJ0eShjb250 YWluZXIsIG9mZnNldCwgdHlwZSBUU1JNTFNfQ0MpOwogCiAJCWlmIChSRVRVUk5fVkFMVUVf VU5VU0VEKCZvcGxpbmUtPnJlc3VsdCkgJiYgKFpfUkVGQ09VTlRfUFAocmV0dmFsKSA9PSAw KSkgeworCQkJR0NfUkVNT1ZFX1pWQUxfRlJPTV9CVUZGRVIoKnJldHZhbCk7CiAJCQl6dmFs X2R0b3IoKnJldHZhbCk7CiAJCQlGUkVFX1pWQUwoKnJldHZhbCk7CiAJCX0gZWxzZSB7CkBA IC0xNjk0Miw2ICsxNjk2Myw3IEBAIHN0YXRpYyBpbnQgemVuZF9iaW5hcnlfYXNzaWduX29w X29ial9oZWwKIAkJCQkJenZhbCAqdmFsdWUgPSBaX09CSl9IVF9QKHopLT5nZXQoeiBUU1JN TFNfQ0MpOwogCiAJCQkJCWlmIChaX1JFRkNPVU5UX1AoeikgPT0gMCkgeworCQkJCQkJR0Nf UkVNT1ZFX1pWQUxfRlJPTV9CVUZGRVIoeik7CiAJCQkJCQl6dmFsX2R0b3Ioeik7CiAJCQkJ CQlGUkVFX1pWQUwoeik7CiAJCQkJCX0KQEAgLTE3MTc5LDYgKzE3MjAxLDcgQEAgc3RhdGlj IGludCB6ZW5kX3ByZV9pbmNkZWNfcHJvcGVydHlfaGVscAogCQkJCXp2YWwgKnZhbHVlID0g Wl9PQkpfSFRfUCh6KS0+Z2V0KHogVFNSTUxTX0NDKTsKIAogCQkJCWlmIChaX1JFRkNPVU5U X1AoeikgPT0gMCkgeworCQkJCQlHQ19SRU1PVkVfWlZBTF9GUk9NX0JVRkZFUih6KTsKIAkJ CQkJenZhbF9kdG9yKHopOwogCQkJCQlGUkVFX1pWQUwoeik7CiAJCQkJfQpAQCAtMTcyNjks NiArMTcyOTIsNyBAQCBzdGF0aWMgaW50IHplbmRfcG9zdF9pbmNkZWNfcHJvcGVydHlfaGVs CiAJCQkJenZhbCAqdmFsdWUgPSBaX09CSl9IVF9QKHopLT5nZXQoeiBUU1JNTFNfQ0MpOwog CiAJCQkJaWYgKFpfUkVGQ09VTlRfUCh6KSA9PSAwKSB7CisJCQkJCUdDX1JFTU9WRV9aVkFM X0ZST01fQlVGRkVSKHopOwogCQkJCQl6dmFsX2R0b3Ioeik7CiAJCQkJCUZSRUVfWlZBTCh6 KTsKIAkJCQl9CkBAIC0xNzM1Miw2ICsxNzM3Niw3IEBAIHN0YXRpYyBpbnQgemVuZF9mZXRj aF9wcm9wZXJ0eV9hZGRyZXNzX3IKIAkJKnJldHZhbCA9IFpfT0JKX0hUX1AoY29udGFpbmVy KS0+cmVhZF9wcm9wZXJ0eShjb250YWluZXIsIG9mZnNldCwgdHlwZSBUU1JNTFNfQ0MpOwog CiAJCWlmIChSRVRVUk5fVkFMVUVfVU5VU0VEKCZvcGxpbmUtPnJlc3VsdCkgJiYgKFpfUkVG Q09VTlRfUFAocmV0dmFsKSA9PSAwKSkgeworCQkJR0NfUkVNT1ZFX1pWQUxfRlJPTV9CVUZG RVIoKnJldHZhbCk7CiAJCQl6dmFsX2R0b3IoKnJldHZhbCk7CiAJCQlGUkVFX1pWQUwoKnJl dHZhbCk7CiAJCX0gZWxzZSB7CkBAIC0xNzkzMSw2ICsxNzk1Niw3IEBAIHN0YXRpYyBpbnQg emVuZF9iaW5hcnlfYXNzaWduX29wX29ial9oZWwKIAkJCQkJenZhbCAqdmFsdWUgPSBaX09C Sl9IVF9QKHopLT5nZXQoeiBUU1JNTFNfQ0MpOwogCiAJCQkJCWlmIChaX1JFRkNPVU5UX1Ao eikgPT0gMCkgeworCQkJCQkJR0NfUkVNT1ZFX1pWQUxfRlJPTV9CVUZGRVIoeik7CiAJCQkJ CQl6dmFsX2R0b3Ioeik7CiAJCQkJCQlGUkVFX1pWQUwoeik7CiAJCQkJCX0KQEAgLTE4MTY4 LDYgKzE4MTk0LDcgQEAgc3RhdGljIGludCB6ZW5kX3ByZV9pbmNkZWNfcHJvcGVydHlfaGVs cAogCQkJCXp2YWwgKnZhbHVlID0gWl9PQkpfSFRfUCh6KS0+Z2V0KHogVFNSTUxTX0NDKTsK IAogCQkJCWlmIChaX1JFRkNPVU5UX1AoeikgPT0gMCkgeworCQkJCQlHQ19SRU1PVkVfWlZB TF9GUk9NX0JVRkZFUih6KTsKIAkJCQkJenZhbF9kdG9yKHopOwogCQkJCQlGUkVFX1pWQUwo eik7CiAJCQkJfQpAQCAtMTgyNTgsNiArMTgyODUsNyBAQCBzdGF0aWMgaW50IHplbmRfcG9z dF9pbmNkZWNfcHJvcGVydHlfaGVsCiAJCQkJenZhbCAqdmFsdWUgPSBaX09CSl9IVF9QKHop LT5nZXQoeiBUU1JNTFNfQ0MpOwogCiAJCQkJaWYgKFpfUkVGQ09VTlRfUCh6KSA9PSAwKSB7 CisJCQkJCUdDX1JFTU9WRV9aVkFMX0ZST01fQlVGRkVSKHopOwogCQkJCQl6dmFsX2R0b3Io eik7CiAJCQkJCUZSRUVfWlZBTCh6KTsKIAkJCQl9CkBAIC0xODM0MSw2ICsxODM2OSw3IEBA IHN0YXRpYyBpbnQgemVuZF9mZXRjaF9wcm9wZXJ0eV9hZGRyZXNzX3IKIAkJKnJldHZhbCA9 IFpfT0JKX0hUX1AoY29udGFpbmVyKS0+cmVhZF9wcm9wZXJ0eShjb250YWluZXIsIG9mZnNl dCwgdHlwZSBUU1JNTFNfQ0MpOwogCiAJCWlmIChSRVRVUk5fVkFMVUVfVU5VU0VEKCZvcGxp bmUtPnJlc3VsdCkgJiYgKFpfUkVGQ09VTlRfUFAocmV0dmFsKSA9PSAwKSkgeworCQkJR0Nf UkVNT1ZFX1pWQUxfRlJPTV9CVUZGRVIoKnJldHZhbCk7CiAJCQl6dmFsX2R0b3IoKnJldHZh bCk7CiAJCQlGUkVFX1pWQUwoKnJldHZhbCk7CiAJCX0gZWxzZSB7CkBAIC0xODkyMCw2ICsx ODk0OSw3IEBAIHN0YXRpYyBpbnQgemVuZF9iaW5hcnlfYXNzaWduX29wX29ial9oZWwKIAkJ CQkJenZhbCAqdmFsdWUgPSBaX09CSl9IVF9QKHopLT5nZXQoeiBUU1JNTFNfQ0MpOwogCiAJ CQkJCWlmIChaX1JFRkNPVU5UX1AoeikgPT0gMCkgeworCQkJCQkJR0NfUkVNT1ZFX1pWQUxf RlJPTV9CVUZGRVIoeik7CiAJCQkJCQl6dmFsX2R0b3Ioeik7CiAJCQkJCQlGUkVFX1pWQUwo eik7CiAJCQkJCX0KQEAgLTE5MTg2LDYgKzE5MjE2LDcgQEAgc3RhdGljIGludCB6ZW5kX2Jp bmFyeV9hc3NpZ25fb3Bfb2JqX2hlbAogCQkJCQl6dmFsICp2YWx1ZSA9IFpfT0JKX0hUX1Ao eiktPmdldCh6IFRTUk1MU19DQyk7CiAKIAkJCQkJaWYgKFpfUkVGQ09VTlRfUCh6KSA9PSAw KSB7CisJCQkJCQlHQ19SRU1PVkVfWlZBTF9GUk9NX0JVRkZFUih6KTsKIAkJCQkJCXp2YWxf ZHRvcih6KTsKIAkJCQkJCUZSRUVfWlZBTCh6KTsKIAkJCQkJfQpAQCAtMTk0MjIsNiArMTk0 NTMsNyBAQCBzdGF0aWMgaW50IHplbmRfcHJlX2luY2RlY19wcm9wZXJ0eV9oZWxwCiAJCQkJ enZhbCAqdmFsdWUgPSBaX09CSl9IVF9QKHopLT5nZXQoeiBUU1JNTFNfQ0MpOwogCiAJCQkJ aWYgKFpfUkVGQ09VTlRfUCh6KSA9PSAwKSB7CisJCQkJCUdDX1JFTU9WRV9aVkFMX0ZST01f QlVGRkVSKHopOwogCQkJCQl6dmFsX2R0b3Ioeik7CiAJCQkJCUZSRUVfWlZBTCh6KTsKIAkJ CQl9CkBAIC0xOTUxMiw2ICsxOTU0NCw3IEBAIHN0YXRpYyBpbnQgemVuZF9wb3N0X2luY2Rl Y19wcm9wZXJ0eV9oZWwKIAkJCQl6dmFsICp2YWx1ZSA9IFpfT0JKX0hUX1AoeiktPmdldCh6 IFRTUk1MU19DQyk7CiAKIAkJCQlpZiAoWl9SRUZDT1VOVF9QKHopID09IDApIHsKKwkJCQkJ R0NfUkVNT1ZFX1pWQUxfRlJPTV9CVUZGRVIoeik7CiAJCQkJCXp2YWxfZHRvcih6KTsKIAkJ CQkJRlJFRV9aVkFMKHopOwogCQkJCX0KQEAgLTE5NTk1LDYgKzE5NjI4LDcgQEAgc3RhdGlj IGludCB6ZW5kX2ZldGNoX3Byb3BlcnR5X2FkZHJlc3NfcgogCQkqcmV0dmFsID0gWl9PQkpf SFRfUChjb250YWluZXIpLT5yZWFkX3Byb3BlcnR5KGNvbnRhaW5lciwgb2Zmc2V0LCB0eXBl IFRTUk1MU19DQyk7CiAKIAkJaWYgKFJFVFVSTl9WQUxVRV9VTlVTRUQoJm9wbGluZS0+cmVz dWx0KSAmJiAoWl9SRUZDT1VOVF9QUChyZXR2YWwpID09IDApKSB7CisJCQlHQ19SRU1PVkVf WlZBTF9GUk9NX0JVRkZFUigqcmV0dmFsKTsKIAkJCXp2YWxfZHRvcigqcmV0dmFsKTsKIAkJ CUZSRUVfWlZBTCgqcmV0dmFsKTsKIAkJfSBlbHNlIHsKQEAgLTIxNjU2LDYgKzIxNjkwLDcg QEAgc3RhdGljIGludCB6ZW5kX2JpbmFyeV9hc3NpZ25fb3Bfb2JqX2hlbAogCQkJCQl6dmFs ICp2YWx1ZSA9IFpfT0JKX0hUX1AoeiktPmdldCh6IFRTUk1MU19DQyk7CiAKIAkJCQkJaWYg KFpfUkVGQ09VTlRfUCh6KSA9PSAwKSB7CisJCQkJCQlHQ19SRU1PVkVfWlZBTF9GUk9NX0JV RkZFUih6KTsKIAkJCQkJCXp2YWxfZHRvcih6KTsKIAkJCQkJCUZSRUVfWlZBTCh6KTsKIAkJ CQkJfQpAQCAtMjE4OTIsNiArMjE5MjcsNyBAQCBzdGF0aWMgaW50IHplbmRfcHJlX2luY2Rl Y19wcm9wZXJ0eV9oZWxwCiAJCQkJenZhbCAqdmFsdWUgPSBaX09CSl9IVF9QKHopLT5nZXQo eiBUU1JNTFNfQ0MpOwogCiAJCQkJaWYgKFpfUkVGQ09VTlRfUCh6KSA9PSAwKSB7CisJCQkJ CUdDX1JFTU9WRV9aVkFMX0ZST01fQlVGRkVSKHopOwogCQkJCQl6dmFsX2R0b3Ioeik7CiAJ CQkJCUZSRUVfWlZBTCh6KTsKIAkJCQl9CkBAIC0yMTk4Miw2ICsyMjAxOCw3IEBAIHN0YXRp YyBpbnQgemVuZF9wb3N0X2luY2RlY19wcm9wZXJ0eV9oZWwKIAkJCQl6dmFsICp2YWx1ZSA9 IFpfT0JKX0hUX1AoeiktPmdldCh6IFRTUk1MU19DQyk7CiAKIAkJCQlpZiAoWl9SRUZDT1VO VF9QKHopID09IDApIHsKKwkJCQkJR0NfUkVNT1ZFX1pWQUxfRlJPTV9CVUZGRVIoeik7CiAJ CQkJCXp2YWxfZHRvcih6KTsKIAkJCQkJRlJFRV9aVkFMKHopOwogCQkJCX0KQEAgLTIyMjEz LDYgKzIyMjUwLDcgQEAgc3RhdGljIGludCB6ZW5kX2ZldGNoX3Byb3BlcnR5X2FkZHJlc3Nf cgogCQkqcmV0dmFsID0gWl9PQkpfSFRfUChjb250YWluZXIpLT5yZWFkX3Byb3BlcnR5KGNv bnRhaW5lciwgb2Zmc2V0LCB0eXBlIFRTUk1MU19DQyk7CiAKIAkJaWYgKFJFVFVSTl9WQUxV RV9VTlVTRUQoJm9wbGluZS0+cmVzdWx0KSAmJiAoWl9SRUZDT1VOVF9QUChyZXR2YWwpID09 IDApKSB7CisJCQlHQ19SRU1PVkVfWlZBTF9GUk9NX0JVRkZFUigqcmV0dmFsKTsKIAkJCXp2 YWxfZHRvcigqcmV0dmFsKTsKIAkJCUZSRUVfWlZBTCgqcmV0dmFsKTsKIAkJfSBlbHNlIHsK QEAgLTIzMTgwLDYgKzIzMjE4LDcgQEAgc3RhdGljIGludCB6ZW5kX2JpbmFyeV9hc3NpZ25f b3Bfb2JqX2hlbAogCQkJCQl6dmFsICp2YWx1ZSA9IFpfT0JKX0hUX1AoeiktPmdldCh6IFRT Uk1MU19DQyk7CiAKIAkJCQkJaWYgKFpfUkVGQ09VTlRfUCh6KSA9PSAwKSB7CisJCQkJCQlH Q19SRU1PVkVfWlZBTF9GUk9NX0JVRkZFUih6KTsKIAkJCQkJCXp2YWxfZHRvcih6KTsKIAkJ CQkJCUZSRUVfWlZBTCh6KTsKIAkJCQkJfQpAQCAtMjM0MTcsNiArMjM0NTYsNyBAQCBzdGF0 aWMgaW50IHplbmRfcHJlX2luY2RlY19wcm9wZXJ0eV9oZWxwCiAJCQkJenZhbCAqdmFsdWUg PSBaX09CSl9IVF9QKHopLT5nZXQoeiBUU1JNTFNfQ0MpOwogCiAJCQkJaWYgKFpfUkVGQ09V TlRfUCh6KSA9PSAwKSB7CisJCQkJCUdDX1JFTU9WRV9aVkFMX0ZST01fQlVGRkVSKHopOwog CQkJCQl6dmFsX2R0b3Ioeik7CiAJCQkJCUZSRUVfWlZBTCh6KTsKIAkJCQl9CkBAIC0yMzUw Nyw2ICsyMzU0Nyw3IEBAIHN0YXRpYyBpbnQgemVuZF9wb3N0X2luY2RlY19wcm9wZXJ0eV9o ZWwKIAkJCQl6dmFsICp2YWx1ZSA9IFpfT0JKX0hUX1AoeiktPmdldCh6IFRTUk1MU19DQyk7 CiAKIAkJCQlpZiAoWl9SRUZDT1VOVF9QKHopID09IDApIHsKKwkJCQkJR0NfUkVNT1ZFX1pW QUxfRlJPTV9CVUZGRVIoeik7CiAJCQkJCXp2YWxfZHRvcih6KTsKIAkJCQkJRlJFRV9aVkFM KHopOwogCQkJCX0KQEAgLTIzNzM4LDYgKzIzNzc5LDcgQEAgc3RhdGljIGludCB6ZW5kX2Zl dGNoX3Byb3BlcnR5X2FkZHJlc3NfcgogCQkqcmV0dmFsID0gWl9PQkpfSFRfUChjb250YWlu ZXIpLT5yZWFkX3Byb3BlcnR5KGNvbnRhaW5lciwgb2Zmc2V0LCB0eXBlIFRTUk1MU19DQyk7 CiAKIAkJaWYgKFJFVFVSTl9WQUxVRV9VTlVTRUQoJm9wbGluZS0+cmVzdWx0KSAmJiAoWl9S RUZDT1VOVF9QUChyZXR2YWwpID09IDApKSB7CisJCQlHQ19SRU1PVkVfWlZBTF9GUk9NX0JV RkZFUigqcmV0dmFsKTsKIAkJCXp2YWxfZHRvcigqcmV0dmFsKTsKIAkJCUZSRUVfWlZBTCgq cmV0dmFsKTsKIAkJfSBlbHNlIHsKQEAgLTI0NzA4LDYgKzI0NzUwLDcgQEAgc3RhdGljIGlu dCB6ZW5kX2JpbmFyeV9hc3NpZ25fb3Bfb2JqX2hlbAogCQkJCQl6dmFsICp2YWx1ZSA9IFpf T0JKX0hUX1AoeiktPmdldCh6IFRTUk1MU19DQyk7CiAKIAkJCQkJaWYgKFpfUkVGQ09VTlRf UCh6KSA9PSAwKSB7CisJCQkJCQlHQ19SRU1PVkVfWlZBTF9GUk9NX0JVRkZFUih6KTsKIAkJ CQkJCXp2YWxfZHRvcih6KTsKIAkJCQkJCUZSRUVfWlZBTCh6KTsKIAkJCQkJfQpAQCAtMjQ5 NDUsNiArMjQ5ODgsNyBAQCBzdGF0aWMgaW50IHplbmRfcHJlX2luY2RlY19wcm9wZXJ0eV9o ZWxwCiAJCQkJenZhbCAqdmFsdWUgPSBaX09CSl9IVF9QKHopLT5nZXQoeiBUU1JNTFNfQ0Mp OwogCiAJCQkJaWYgKFpfUkVGQ09VTlRfUCh6KSA9PSAwKSB7CisJCQkJCUdDX1JFTU9WRV9a VkFMX0ZST01fQlVGRkVSKHopOwogCQkJCQl6dmFsX2R0b3Ioeik7CiAJCQkJCUZSRUVfWlZB TCh6KTsKIAkJCQl9CkBAIC0yNTAzNSw2ICsyNTA3OSw3IEBAIHN0YXRpYyBpbnQgemVuZF9w b3N0X2luY2RlY19wcm9wZXJ0eV9oZWwKIAkJCQl6dmFsICp2YWx1ZSA9IFpfT0JKX0hUX1Ao eiktPmdldCh6IFRTUk1MU19DQyk7CiAKIAkJCQlpZiAoWl9SRUZDT1VOVF9QKHopID09IDAp IHsKKwkJCQkJR0NfUkVNT1ZFX1pWQUxfRlJPTV9CVUZGRVIoeik7CiAJCQkJCXp2YWxfZHRv cih6KTsKIAkJCQkJRlJFRV9aVkFMKHopOwogCQkJCX0KQEAgLTI1MjY2LDYgKzI1MzExLDcg QEAgc3RhdGljIGludCB6ZW5kX2ZldGNoX3Byb3BlcnR5X2FkZHJlc3NfcgogCQkqcmV0dmFs ID0gWl9PQkpfSFRfUChjb250YWluZXIpLT5yZWFkX3Byb3BlcnR5KGNvbnRhaW5lciwgb2Zm c2V0LCB0eXBlIFRTUk1MU19DQyk7CiAKIAkJaWYgKFJFVFVSTl9WQUxVRV9VTlVTRUQoJm9w bGluZS0+cmVzdWx0KSAmJiAoWl9SRUZDT1VOVF9QUChyZXR2YWwpID09IDApKSB7CisJCQlH Q19SRU1PVkVfWlZBTF9GUk9NX0JVRkZFUigqcmV0dmFsKTsKIAkJCXp2YWxfZHRvcigqcmV0 dmFsKTsKIAkJCUZSRUVfWlZBTCgqcmV0dmFsKTsKIAkJfSBlbHNlIHsKQEAgLTI2MDM5LDYg KzI2MDg1LDcgQEAgc3RhdGljIGludCB6ZW5kX2JpbmFyeV9hc3NpZ25fb3Bfb2JqX2hlbAog CQkJCQl6dmFsICp2YWx1ZSA9IFpfT0JKX0hUX1AoeiktPmdldCh6IFRTUk1MU19DQyk7CiAK IAkJCQkJaWYgKFpfUkVGQ09VTlRfUCh6KSA9PSAwKSB7CisJCQkJCQlHQ19SRU1PVkVfWlZB TF9GUk9NX0JVRkZFUih6KTsKIAkJCQkJCXp2YWxfZHRvcih6KTsKIAkJCQkJCUZSRUVfWlZB TCh6KTsKIAkJCQkJfQpAQCAtMjY3MjYsNiArMjY3NzMsNyBAQCBzdGF0aWMgaW50IHplbmRf YmluYXJ5X2Fzc2lnbl9vcF9vYmpfaGVsCiAJCQkJCXp2YWwgKnZhbHVlID0gWl9PQkpfSFRf UCh6KS0+Z2V0KHogVFNSTUxTX0NDKTsKIAogCQkJCQlpZiAoWl9SRUZDT1VOVF9QKHopID09 IDApIHsKKwkJCQkJCUdDX1JFTU9WRV9aVkFMX0ZST01fQlVGRkVSKHopOwogCQkJCQkJenZh bF9kdG9yKHopOwogCQkJCQkJRlJFRV9aVkFMKHopOwogCQkJCQl9CkBAIC0yNjk2Miw2ICsy NzAxMCw3IEBAIHN0YXRpYyBpbnQgemVuZF9wcmVfaW5jZGVjX3Byb3BlcnR5X2hlbHAKIAkJ CQl6dmFsICp2YWx1ZSA9IFpfT0JKX0hUX1AoeiktPmdldCh6IFRTUk1MU19DQyk7CiAKIAkJ CQlpZiAoWl9SRUZDT1VOVF9QKHopID09IDApIHsKKwkJCQkJR0NfUkVNT1ZFX1pWQUxfRlJP TV9CVUZGRVIoeik7CiAJCQkJCXp2YWxfZHRvcih6KTsKIAkJCQkJRlJFRV9aVkFMKHopOwog CQkJCX0KQEAgLTI3MDUyLDYgKzI3MTAxLDcgQEAgc3RhdGljIGludCB6ZW5kX3Bvc3RfaW5j ZGVjX3Byb3BlcnR5X2hlbAogCQkJCXp2YWwgKnZhbHVlID0gWl9PQkpfSFRfUCh6KS0+Z2V0 KHogVFNSTUxTX0NDKTsKIAogCQkJCWlmIChaX1JFRkNPVU5UX1AoeikgPT0gMCkgeworCQkJ CQlHQ19SRU1PVkVfWlZBTF9GUk9NX0JVRkZFUih6KTsKIAkJCQkJenZhbF9kdG9yKHopOwog CQkJCQlGUkVFX1pWQUwoeik7CiAJCQkJfQpAQCAtMjcyODMsNiArMjczMzMsNyBAQCBzdGF0 aWMgaW50IHplbmRfZmV0Y2hfcHJvcGVydHlfYWRkcmVzc19yCiAJCSpyZXR2YWwgPSBaX09C Sl9IVF9QKGNvbnRhaW5lciktPnJlYWRfcHJvcGVydHkoY29udGFpbmVyLCBvZmZzZXQsIHR5 cGUgVFNSTUxTX0NDKTsKIAogCQlpZiAoUkVUVVJOX1ZBTFVFX1VOVVNFRCgmb3BsaW5lLT5y ZXN1bHQpICYmIChaX1JFRkNPVU5UX1BQKHJldHZhbCkgPT0gMCkpIHsKKwkJCUdDX1JFTU9W RV9aVkFMX0ZST01fQlVGRkVSKCpyZXR2YWwpOwogCQkJenZhbF9kdG9yKCpyZXR2YWwpOwog CQkJRlJFRV9aVkFMKCpyZXR2YWwpOwogCQl9IGVsc2UgewpJbmRleDogWmVuZC90ZXN0cy9n Y18wMDEucGhwdAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiBaZW5kL3Rlc3RzL2djXzAwMS5w aHB0CmRpZmYgLU4gWmVuZC90ZXN0cy9nY18wMDEucGhwdAotLS0gL2Rldi9udWxsCTEgSmFu IDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIFplbmQvdGVzdHMvZ2NfMDAxLnBocHQJMTMgRGVj IDIwMDcgMTc6Mzk6MDIgLTAwMDAKQEAgLTAsMCArMSwxMiBAQAorLS1URVNULS0KK0dDIDAw MTogZ2NfZW5hYmxlKCkvZ2NfZGlhYmxlKCkvZ2NfZW5hYmxlZCgpCistLUZJTEUtLQorPD9w aHAKK2djX2Rpc2FibGUoKTsKK3Zhcl9kdW1wKGdjX2VuYWJsZWQoKSk7CitnY19lbmFibGUo KTsKK3Zhcl9kdW1wKGdjX2VuYWJsZWQoKSk7Cis/PgorLS1FWFBFQ1QtLQorYm9vbChmYWxz ZSkKK2Jvb2wodHJ1ZSkKSW5kZXg6IFplbmQvdGVzdHMvZ2NfMDAyLnBocHQKPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQpSQ1MgZmlsZTogWmVuZC90ZXN0cy9nY18wMDIucGhwdApkaWZmIC1OIFplbmQvdGVz dHMvZ2NfMDAyLnBocHQKLS0tIC9kZXYvbnVsbAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAw CisrKyBaZW5kL3Rlc3RzL2djXzAwMi5waHB0CTEzIERlYyAyMDA3IDE3OjM5OjAyIC0wMDAw CkBAIC0wLDAgKzEsMTYgQEAKKy0tVEVTVC0tCitHQyAwMDI6IGdjX2VuYWJsZSgpL2djX2Rp YWJsZSgpIGFuZCBpbmlfZ2V0KCkKKy0tRklMRS0tCis8P3BocAorZ2NfZGlzYWJsZSgpOwor dmFyX2R1bXAoZ2NfZW5hYmxlZCgpKTsKK2VjaG8gaW5pX2dldCgnemVuZC5lbmFibGVfZ2Mn KSAuICJcbiI7CitnY19lbmFibGUoKTsKK3Zhcl9kdW1wKGdjX2VuYWJsZWQoKSk7CitlY2hv IGluaV9nZXQoJ3plbmQuZW5hYmxlX2djJykgLiAiXG4iOworPz4KKy0tRVhQRUNULS0KK2Jv b2woZmFsc2UpCiswCitib29sKHRydWUpCisxCkluZGV4OiBaZW5kL3Rlc3RzL2djXzAwMy5w aHB0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IFplbmQvdGVzdHMvZ2NfMDAzLnBocHQKZGlm ZiAtTiBaZW5kL3Rlc3RzL2djXzAwMy5waHB0Ci0tLSAvZGV2L251bGwJMSBKYW4gMTk3MCAw MDowMDowMCAtMDAwMAorKysgWmVuZC90ZXN0cy9nY18wMDMucGhwdAkxMyBEZWMgMjAwNyAx NzozOTowMiAtMDAwMApAQCAtMCwwICsxLDE2IEBACistLVRFU1QtLQorR0MgMDAzOiBnY19l bmFibGVkKCkgYW5kIGluaV9zZXQoKQorLS1GSUxFLS0KKzw/cGhwCitpbmlfc2V0KCd6ZW5k LmVuYWJsZV9nYycsJzAnKTsKK3Zhcl9kdW1wKGdjX2VuYWJsZWQoKSk7CitlY2hvIGluaV9n ZXQoJ3plbmQuZW5hYmxlX2djJykgLiAiXG4iOworaW5pX3NldCgnemVuZC5lbmFibGVfZ2Mn LCcxJyk7Cit2YXJfZHVtcChnY19lbmFibGVkKCkpOworZWNobyBpbmlfZ2V0KCd6ZW5kLmVu YWJsZV9nYycpIC4gIlxuIjsKKz8+CistLUVYUEVDVC0tCitib29sKGZhbHNlKQorMAorYm9v bCh0cnVlKQorMQpJbmRleDogWmVuZC90ZXN0cy9nY18wMDQucGhwdAo9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 ClJDUyBmaWxlOiBaZW5kL3Rlc3RzL2djXzAwNC5waHB0CmRpZmYgLU4gWmVuZC90ZXN0cy9n Y18wMDQucGhwdAotLS0gL2Rldi9udWxsCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysr IFplbmQvdGVzdHMvZ2NfMDA0LnBocHQJMTMgRGVjIDIwMDcgMTc6Mzk6MDIgLTAwMDAKQEAg LTAsMCArMSwyNCBAQAorLS1URVNULS0KK0dDIDAwNDogU2ltcGxlIGFycmF5IGN5Y2xlCist LUZJTEUtLQorPD9waHAKKyRhID0gYXJyYXkoKTsKKyRhW10gPSYgJGE7Cit2YXJfZHVtcCgk YSk7Cit1bnNldCgkYSk7Cit2YXJfZHVtcChnY19jb2xsZWN0X2N5Y2xlcygpKTsKK2VjaG8g Im9rXG4iCis/PgorLS1FWFBFQ1QtLQorYXJyYXkoMSkgeworICBbMF09PgorICAmYXJyYXko MSkgeworICAgIFswXT0+CisgICAgJmFycmF5KDEpIHsKKyAgICAgIFswXT0+CisgICAgICAq UkVDVVJTSU9OKgorICAgIH0KKyAgfQorfQoraW50KDEpCitvawpJbmRleDogWmVuZC90ZXN0 cy9nY18wMDUucGhwdAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiBaZW5kL3Rlc3RzL2djXzAw NS5waHB0CmRpZmYgLU4gWmVuZC90ZXN0cy9nY18wMDUucGhwdAotLS0gL2Rldi9udWxsCTEg SmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIFplbmQvdGVzdHMvZ2NfMDA1LnBocHQJMTMg RGVjIDIwMDcgMTc6Mzk6MDIgLTAwMDAKQEAgLTAsMCArMSwyMSBAQAorLS1URVNULS0KK0dD IDAwNTogU2ltcGxlIG9iamVjdCBjeWNsZQorLS1GSUxFLS0KKzw/cGhwCiskYSA9IG5ldyBz dGRDbGFzcygpOworJGEtPmEgPSAkYTsKK3Zhcl9kdW1wKCRhKTsKK3Vuc2V0KCRhKTsKK3Zh cl9kdW1wKGdjX2NvbGxlY3RfY3ljbGVzKCkpOworZWNobyAib2tcbiIKKz8+CistLUVYUEVD VC0tCitvYmplY3Qoc3RkQ2xhc3MpIzEgKDEpIHsKKyAgWyJhIl09PgorICBvYmplY3Qoc3Rk Q2xhc3MpIzEgKDEpIHsKKyAgICBbImEiXT0+CisgICAgKlJFQ1VSU0lPTioKKyAgfQorfQor aW50KDEpCitvawpJbmRleDogWmVuZC90ZXN0cy9nY18wMDYucGhwdAo9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 ClJDUyBmaWxlOiBaZW5kL3Rlc3RzL2djXzAwNi5waHB0CmRpZmYgLU4gWmVuZC90ZXN0cy9n Y18wMDYucGhwdAotLS0gL2Rldi9udWxsCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysr IFplbmQvdGVzdHMvZ2NfMDA2LnBocHQJMTMgRGVjIDIwMDcgMTc6Mzk6MDIgLTAwMDAKQEAg LTAsMCArMSwyOCBAQAorLS1URVNULS0KK0dDIDAwNjogU2ltcGxlIGFycmF5LW9iamVjdCBj eWNsZQorLS1GSUxFLS0KKzw/cGhwCiskYSA9IG5ldyBzdGRDbGFzcygpOworJGEtPmEgPSBh cnJheSgpOworJGEtPmFbMF0gPSYgJGE7Cit2YXJfZHVtcCgkYSk7Cit1bnNldCgkYSk7Cit2 YXJfZHVtcChnY19jb2xsZWN0X2N5Y2xlcygpKTsKK2VjaG8gIm9rXG4iCis/PgorLS1FWFBF Q1QtLQorb2JqZWN0KHN0ZENsYXNzKSMxICgxKSB7CisgIFsiYSJdPT4KKyAgYXJyYXkoMSkg eworICAgIFswXT0+CisgICAgJm9iamVjdChzdGRDbGFzcykjMSAoMSkgeworICAgICAgWyJh Il09PgorICAgICAgYXJyYXkoMSkgeworICAgICAgICBbMF09PgorICAgICAgICAqUkVDVVJT SU9OKgorICAgICAgfQorICAgIH0KKyAgfQorfQoraW50KDIpCitvawpJbmRleDogWmVuZC90 ZXN0cy9nY18wMDcucGhwdAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiBaZW5kL3Rlc3RzL2dj XzAwNy5waHB0CmRpZmYgLU4gWmVuZC90ZXN0cy9nY18wMDcucGhwdAotLS0gL2Rldi9udWxs CTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIFplbmQvdGVzdHMvZ2NfMDA3LnBocHQJ MTMgRGVjIDIwMDcgMTc6Mzk6MDIgLTAwMDAKQEAgLTAsMCArMSwyNiBAQAorLS1URVNULS0K K0dDIDAwNzogVW5yZWZlcmVuc2VkIGFycmF5IGN5Y2xlCistLUZJTEUtLQorPD9waHAKKyRh ID0gYXJyYXkoYXJyYXkoKSk7CiskYVswXVswXSA9JiAkYVswXTsKK3Zhcl9kdW1wKCRhWzBd KTsKK3Zhcl9kdW1wKGdjX2NvbGxlY3RfY3ljbGVzKCkpOwordW5zZXQoJGEpOwordmFyX2R1 bXAoZ2NfY29sbGVjdF9jeWNsZXMoKSk7CitlY2hvICJva1xuIgorPz4KKy0tRVhQRUNULS0K K2FycmF5KDEpIHsKKyAgWzBdPT4KKyAgJmFycmF5KDEpIHsKKyAgICBbMF09PgorICAgICZh cnJheSgxKSB7CisgICAgICBbMF09PgorICAgICAgKlJFQ1VSU0lPTioKKyAgICB9CisgIH0K K30KK2ludCgwKQoraW50KDEpCitvawpJbmRleDogWmVuZC90ZXN0cy9nY18wMDgucGhwdAo9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09ClJDUyBmaWxlOiBaZW5kL3Rlc3RzL2djXzAwOC5waHB0CmRpZmYgLU4g WmVuZC90ZXN0cy9nY18wMDgucGhwdAotLS0gL2Rldi9udWxsCTEgSmFuIDE5NzAgMDA6MDA6 MDAgLTAwMDAKKysrIFplbmQvdGVzdHMvZ2NfMDA4LnBocHQJMTMgRGVjIDIwMDcgMTc6Mzk6 MDIgLTAwMDAKQEAgLTAsMCArMSwyNCBAQAorLS1URVNULS0KK0dDIDAwODogVW5yZWZlcmVu c2VkIG9iamVjdCBjeWNsZQorLS1GSUxFLS0KKzw/cGhwCiskYSA9IG5ldyBzdGRDbGFzcygp OworJGEtPmEgPSBuZXcgc3RkQ2xhc3MoKTsKKyRhLT5hLT5hID0gJGEtPmE7Cit2YXJfZHVt cCgkYS0+YSk7Cit2YXJfZHVtcChnY19jb2xsZWN0X2N5Y2xlcygpKTsKK3Vuc2V0KCRhKTsK K3Zhcl9kdW1wKGdjX2NvbGxlY3RfY3ljbGVzKCkpOworZWNobyAib2tcbiIKKz8+CistLUVY UEVDVC0tCitvYmplY3Qoc3RkQ2xhc3MpIzIgKDEpIHsKKyAgWyJhIl09PgorICBvYmplY3Qo c3RkQ2xhc3MpIzIgKDEpIHsKKyAgICBbImEiXT0+CisgICAgKlJFQ1VSU0lPTioKKyAgfQor fQoraW50KDApCitpbnQoMSkKK29rCkluZGV4OiBaZW5kL3Rlc3RzL2djXzAwOS5waHB0Cj09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KUkNTIGZpbGU6IFplbmQvdGVzdHMvZ2NfMDA5LnBocHQKZGlmZiAtTiBa ZW5kL3Rlc3RzL2djXzAwOS5waHB0Ci0tLSAvZGV2L251bGwJMSBKYW4gMTk3MCAwMDowMDow MCAtMDAwMAorKysgWmVuZC90ZXN0cy9nY18wMDkucGhwdAkxMyBEZWMgMjAwNyAxNzozOTow MiAtMDAwMApAQCAtMCwwICsxLDMxIEBACistLVRFU1QtLQorR0MgMDA5OiBVbnJlZmVyZW5z ZWQgYXJyYXktb2JqZWN0IGN5Y2xlCistLUZJTEUtLQorPD9waHAKKyRhID0gYXJyYXkoKTsK KyRhWzBdID0gbmV3IHN0ZENsYXNzKCk7CiskYVswXS0+YSA9IGFycmF5KCk7CiskYVswXS0+ YVswXSA9JiAkYVswXTsKK3Zhcl9kdW1wKCRhWzBdKTsKK3Zhcl9kdW1wKGdjX2NvbGxlY3Rf Y3ljbGVzKCkpOwordW5zZXQoJGEpOwordmFyX2R1bXAoZ2NfY29sbGVjdF9jeWNsZXMoKSk7 CitlY2hvICJva1xuIgorPz4KKy0tRVhQRUNULS0KK29iamVjdChzdGRDbGFzcykjMSAoMSkg eworICBbImEiXT0+CisgIGFycmF5KDEpIHsKKyAgICBbMF09PgorICAgICZvYmplY3Qoc3Rk Q2xhc3MpIzEgKDEpIHsKKyAgICAgIFsiYSJdPT4KKyAgICAgIGFycmF5KDEpIHsKKyAgICAg ICAgWzBdPT4KKyAgICAgICAgKlJFQ1VSU0lPTioKKyAgICAgIH0KKyAgICB9CisgIH0KK30K K2ludCgwKQoraW50KDIpCitvawpJbmRleDogWmVuZC90ZXN0cy9nY18wMTAucGhwdAo9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09ClJDUyBmaWxlOiBaZW5kL3Rlc3RzL2djXzAxMC5waHB0CmRpZmYgLU4gWmVu ZC90ZXN0cy9nY18wMTAucGhwdAotLS0gL2Rldi9udWxsCTEgSmFuIDE5NzAgMDA6MDA6MDAg LTAwMDAKKysrIFplbmQvdGVzdHMvZ2NfMDEwLnBocHQJMTMgRGVjIDIwMDcgMTc6Mzk6MDIg LTAwMDAKQEAgLTAsMCArMSwyNSBAQAorLS1URVNULS0KK0dDIDAxMDogQ3ljbGUgd2l0aCBy ZWZlcmVuY2UgdG8gJEdMT0JBTFMKKy0tRklMRS0tCis8P3BocAorJGEgPSBhcnJheSgpOwor JGFbXSA9JiAkYTsKK3Zhcl9kdW1wKCRhKTsKKyRhW10gPSYgJEdMT0JBTFM7Cit1bnNldCgk YSk7Cit2YXJfZHVtcChnY19jb2xsZWN0X2N5Y2xlcygpKTsKK2VjaG8gIm9rXG4iCis/Pgor LS1FWFBFQ1QtLQorYXJyYXkoMSkgeworICBbMF09PgorICAmYXJyYXkoMSkgeworICAgIFsw XT0+CisgICAgJmFycmF5KDEpIHsKKyAgICAgIFswXT0+CisgICAgICAqUkVDVVJTSU9OKgor ICAgIH0KKyAgfQorfQoraW50KDEpCitvawpJbmRleDogWmVuZC90ZXN0cy9nY18wMTEucGhw dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09ClJDUyBmaWxlOiBaZW5kL3Rlc3RzL2djXzAxMS5waHB0CmRpZmYg LU4gWmVuZC90ZXN0cy9nY18wMTEucGhwdAotLS0gL2Rldi9udWxsCTEgSmFuIDE5NzAgMDA6 MDA6MDAgLTAwMDAKKysrIFplbmQvdGVzdHMvZ2NfMDExLnBocHQJMTMgRGVjIDIwMDcgMTc6 Mzk6MDIgLTAwMDAKQEAgLTAsMCArMSwyOCBAQAorLS1URVNULS0KK0dDIDAxMTogR0MgYW5k IGRlc3RydWN0b3JzCistLUZJTEUtLQorPD9waHAKK2NsYXNzIEZvbyB7CisJcHVibGljICRh OworCWZ1bmN0aW9uIF9fZGVzdHJ1Y3QoKSB7CisJCWVjaG8gX19GVU5DVElPTl9fLCJcbiI7 CisJfQorfQorJGEgPSBuZXcgRm9vKCk7CiskYS0+YSA9ICRhOwordmFyX2R1bXAoJGEpOwor dW5zZXQoJGEpOwordmFyX2R1bXAoZ2NfY29sbGVjdF9jeWNsZXMoKSk7CitlY2hvICJva1xu IgorPz4KKy0tRVhQRUNULS0KK29iamVjdChGb28pIzEgKDEpIHsKKyAgWyJhIl09PgorICBv YmplY3QoRm9vKSMxICgxKSB7CisgICAgWyJhIl09PgorICAgICpSRUNVUlNJT04qCisgIH0K K30KK19fZGVzdHJ1Y3QKK2ludCgxKQorb2sKSW5kZXg6IFplbmQvdGVzdHMvZ2NfMDEyLnBo cHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogWmVuZC90ZXN0cy9nY18wMTIucGhwdApkaWZm IC1OIFplbmQvdGVzdHMvZ2NfMDEyLnBocHQKLS0tIC9kZXYvbnVsbAkxIEphbiAxOTcwIDAw OjAwOjAwIC0wMDAwCisrKyBaZW5kL3Rlc3RzL2djXzAxMi5waHB0CTEzIERlYyAyMDA3IDE3 OjM5OjAyIC0wMDAwCkBAIC0wLDAgKzEsMTcgQEAKKy0tVEVTVC0tCitHQyAwMTI6IGNvbGxl Y3Rpb24gb2YgbWFueSBsb29wcyBhdCBvbmNlCistLUZJTEUtLQorPD9waHAKKyRhPWFycmF5 KCk7Citmb3IgKCRpPTA7ICRpIDwgMTAwMDsgJGkrKykgeworCSRhWyRpXSA9IGFycmF5KGFy cmF5KCkpOworCSRhWyRpXVswXSA9ICYgJGFbJGldOworfQordmFyX2R1bXAoZ2NfY29sbGVj dF9jeWNsZXMoKSk7Cit1bnNldCgkYSk7Cit2YXJfZHVtcChnY19jb2xsZWN0X2N5Y2xlcygp KTsKK2VjaG8gIm9rXG4iOworLS1FWFBFQ1QtLQoraW50KDApCitpbnQoMTAwMCkKK29rCklu ZGV4OiBaZW5kL3Rlc3RzL2djXzAxMy5waHB0Cj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IFpl bmQvdGVzdHMvZ2NfMDEzLnBocHQKZGlmZiAtTiBaZW5kL3Rlc3RzL2djXzAxMy5waHB0Ci0t LSAvZGV2L251bGwJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysgWmVuZC90ZXN0cy9n Y18wMTMucGhwdAkxMyBEZWMgMjAwNyAxNzozOTowMiAtMDAwMApAQCAtMCwwICsxLDE2IEBA CistLVRFU1QtLQorR0MgIDAxMzogVG9vIG1hbnkgY3ljbGVzIGluIG9uZSBhcnJheQorLS1G SUxFLS0KKzw/cGhwCiskYSA9IGFycmF5KCk7Citmb3IgKCRpID0gMDsgJGkgPCAxMDAwMTsg JGkrKykgeworCSRhWyRpXSA9JiAkYTsKK30KKyRhW10gPSAieHh4IjsKK3Vuc2V0KCRhKTsK K3Zhcl9kdW1wKGdjX2NvbGxlY3RfY3ljbGVzKCkpOworZWNobyAib2tcbiI7Cis/PgorLS1F WFBFQ1QtLQoraW50KDIpCitvawpJbmRleDogWmVuZC90ZXN0cy9nY18wMTQucGhwdAo9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09ClJDUyBmaWxlOiBaZW5kL3Rlc3RzL2djXzAxNC5waHB0CmRpZmYgLU4gWmVu ZC90ZXN0cy9nY18wMTQucGhwdAotLS0gL2Rldi9udWxsCTEgSmFuIDE5NzAgMDA6MDA6MDAg LTAwMDAKKysrIFplbmQvdGVzdHMvZ2NfMDE0LnBocHQJMTMgRGVjIDIwMDcgMTc6Mzk6MDIg LTAwMDAKQEAgLTAsMCArMSwxOCBAQAorLS1URVNULS0KK0dDICAwMTQ6IFRvbyBtYW55IGN5 Y2xlcyBpbiBvbmUgb2JqZWN0CistLUZJTEUtLQorPD9waHAKKyRhID0gbmV3IHN0ZENsYXNz KCk7Citmb3IgKCRpID0gMDsgJGkgPCAxMDAwMTsgJGkrKykgeworCSRiID0mICRhOworCSRh LT57ImEiLiRpfSA9ICRhOworfQordW5zZXQoJGIpOworJGEtPmIgPSAieHh4IjsKK3Vuc2V0 KCRhKTsKK3Zhcl9kdW1wKGdjX2NvbGxlY3RfY3ljbGVzKCkpOworZWNobyAib2tcbiI7Cis/ PgorLS1FWFBFQ1QtLQoraW50KDEwMDAyKQorb2sKSW5kZXg6IFplbmQvdGVzdHMvZ2NfMDE1 LnBocHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogWmVuZC90ZXN0cy9nY18wMTUucGhwdApk aWZmIC1OIFplbmQvdGVzdHMvZ2NfMDE1LnBocHQKLS0tIC9kZXYvbnVsbAkxIEphbiAxOTcw IDAwOjAwOjAwIC0wMDAwCisrKyBaZW5kL3Rlc3RzL2djXzAxNS5waHB0CTEzIERlYyAyMDA3 IDE3OjM5OjAyIC0wMDAwCkBAIC0wLDAgKzEsMTggQEAKKy0tVEVTVC0tCitHQyAgMDE1OiBP YmplY3QgYXMgcm9vdCBvZiBjeWNsZQorLS1GSUxFLS0KKzw/cGhwCiskYSA9IG5ldyBzdGRD bGFzcygpOworJGMgPSYgJGE7CiskYiA9ICRhOworJGEtPmEgPSAkYTsKKyRhLT5iID0gInh4 eCI7Cit1bnNldCgkYyk7Cit1bnNldCgkYSk7Cit1bnNldCgkYik7Cit2YXJfZHVtcChnY19j b2xsZWN0X2N5Y2xlcygpKTsKK2VjaG8gIm9rXG4iOworPz4KKy0tRVhQRUNULS0KK2ludCgy KQorb2sKSW5kZXg6IFplbmQvdGVzdHMvZ2NfMDE2LnBocHQKPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg ZmlsZTogWmVuZC90ZXN0cy9nY18wMTYucGhwdApkaWZmIC1OIFplbmQvdGVzdHMvZ2NfMDE2 LnBocHQKLS0tIC9kZXYvbnVsbAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyBaZW5k L3Rlc3RzL2djXzAxNi5waHB0CTEzIERlYyAyMDA3IDE3OjM5OjAyIC0wMDAwCkBAIC0wLDAg KzEsMjQgQEAKKy0tVEVTVC0tCitHQyAwMTY6IG5lc3RlZCBHQyBjYWxscworLS1GSUxFLS0K Kzw/cGhwCitjbGFzcyBGb28geworCXB1YmxpYyAkYTsKKwlmdW5jdGlvbiBfX2Rlc3RydWN0 KCkgeworCQllY2hvICItPiAiOworCQkkYSA9IGFycmF5KCk7CisJCSRhW10gPSYgJGE7CisJ CXVuc2V0KCRhKTsKKwkJdmFyX2R1bXAoZ2NfY29sbGVjdF9jeWNsZXMoKSk7CisJfQorfQor JGEgPSBuZXcgRm9vKCk7CiskYS0+YSA9ICRhOwordW5zZXQoJGEpOwordmFyX2R1bXAoZ2Nf Y29sbGVjdF9jeWNsZXMoKSk7CitlY2hvICJva1xuIgorPz4KKy0tRVhQRUNULS0KKy0+IGlu dCgxKQoraW50KDEpCitvawpJbmRleDogWmVuZC90ZXN0cy9nY18wMTcucGhwdAo9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09ClJDUyBmaWxlOiBaZW5kL3Rlc3RzL2djXzAxNy5waHB0CmRpZmYgLU4gWmVuZC90 ZXN0cy9nY18wMTcucGhwdAotLS0gL2Rldi9udWxsCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAw MDAKKysrIFplbmQvdGVzdHMvZ2NfMDE3LnBocHQJMTMgRGVjIDIwMDcgMTc6Mzk6MDIgLTAw MDAKQEAgLTAsMCArMSw0MSBAQAorLS1URVNULS0KK0dDIDAxNzogR0MgYW5kIGRlc3RydWN0 b3JzIHdpdGggdW5zZXQKKy0tRklMRS0tCis8P3BocAorY2xhc3MgTm9kZSB7CisJcHVibGlj ICRuYW1lOworCXB1YmxpYyAkY2hpbGRyZW47CisJcHVibGljICRwYXJlbnQ7CisJZnVuY3Rp b24gX19jb25zdHJ1Y3QoJG5hbWUpIHsKKwkJJHRoaXMtPm5hbWUgPSAkbmFtZTsKKwkJJHRo aXMtPmNoaWxkcmVuID0gYXJyYXkoKTsKKwkJJHRoaXMtPnBhcmVudCA9IG51bGw7CisJfQor CWZ1bmN0aW9uIGluc2VydCgkbm9kZSkgeworCQkkbm9kZS0+cGFyZW50ID0gJHRoaXM7CisJ CSR0aGlzLT5jaGlsZHJlbltdID0gJG5vZGU7CisJfQorCWZ1bmN0aW9uIF9fZGVzdHJ1Y3Qo KSB7CisJCXZhcl9kdW1wKCR0aGlzLT5uYW1lKTsKKwkJdW5zZXQoJHRoaXMtPm5hbWUpOwor CQl1bnNldCgkdGhpcy0+Y2hpbGRyZW4pOworCQl1bnNldCgkdGhpcy0+cGFyZW50KTsKKwl9 Cit9CiskYSA9IG5ldyBOb2RlKCdBJyk7CiskYiA9IG5ldyBOb2RlKCdCJyk7CiskYyA9IG5l dyBOb2RlKCdDJyk7CiskYS0+aW5zZXJ0KCRiKTsKKyRhLT5pbnNlcnQoJGMpOwordW5zZXQo JGEpOwordW5zZXQoJGIpOwordW5zZXQoJGMpOwordmFyX2R1bXAoZ2NfY29sbGVjdF9jeWNs ZXMoKSk7CitlY2hvICJva1xuIgorPz4KKy0tRVhQRUNURi0tCitzdHJpbmcoMSkgIiVzIgor c3RyaW5nKDEpICIlcyIKK3N0cmluZygxKSAiJXMiCitpbnQoMTApCitvawpJbmRleDogWmVu ZC90ZXN0cy9nY18wMTgucGhwdAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiBaZW5kL3Rlc3Rz L2djXzAxOC5waHB0CmRpZmYgLU4gWmVuZC90ZXN0cy9nY18wMTgucGhwdAotLS0gL2Rldi9u dWxsCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIFplbmQvdGVzdHMvZ2NfMDE4LnBo cHQJMTMgRGVjIDIwMDcgMTc6Mzk6MDIgLTAwMDAKQEAgLTAsMCArMSwxMyBAQAorLS1URVNU LS0KK0dDIDAxODogR0MgZGV0YWNoIHdpdGggYXNzaWduCistLUZJTEUtLQorPD9waHAKKyRh ID0gYXJyYXkoYXJyYXkoKSk7CiskYVswXVswXSA9JiAkYVswXTsKKyRhID0gMTsKK3Zhcl9k dW1wKGdjX2NvbGxlY3RfY3ljbGVzKCkpOworZWNobyAib2tcbiIKKz8+CistLUVYUEVDVC0t CitpbnQoMSkKK29rCkluZGV4OiBaZW5kL3Rlc3RzL2djXzAxOS5waHB0Cj09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KUkNTIGZpbGU6IFplbmQvdGVzdHMvZ2NfMDE5LnBocHQKZGlmZiAtTiBaZW5kL3Rlc3Rz L2djXzAxOS5waHB0Ci0tLSAvZGV2L251bGwJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAor KysgWmVuZC90ZXN0cy9nY18wMTkucGhwdAkxMyBEZWMgMjAwNyAxNzozOTowMiAtMDAwMApA QCAtMCwwICsxLDE0IEBACistLVRFU1QtLQorR0MgMDE5OiBHQyBkZXRhY2ggd2l0aCBhc3Np Z24gYnkgcmVmZXJlbmNlCistLUZJTEUtLQorPD9waHAKKyRhID0gYXJyYXkoYXJyYXkoKSk7 CiskYVswXVswXSA9JiAkYVswXTsKKyRiID0gMTsKKyRhID0mICRiOwordmFyX2R1bXAoZ2Nf Y29sbGVjdF9jeWNsZXMoKSk7CitlY2hvICJva1xuIgorPz4KKy0tRVhQRUNULS0KK2ludCgx KQorb2sKSW5kZXg6IFplbmQvdGVzdHMvZ2NfMDIwLnBocHQKPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg ZmlsZTogWmVuZC90ZXN0cy9nY18wMjAucGhwdApkaWZmIC1OIFplbmQvdGVzdHMvZ2NfMDIw LnBocHQKLS0tIC9kZXYvbnVsbAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyBaZW5k L3Rlc3RzL2djXzAyMC5waHB0CTEzIERlYyAyMDA3IDE3OjM5OjAyIC0wMDAwCkBAIC0wLDAg KzEsMTUgQEAKKy0tVEVTVC0tCitHQyAwMjA6IEdDIGRldGFjaCByZWZlcmVuY2Ugd2l0aCBh c3NpZ24KKy0tRklMRS0tCis8P3BocAorJGEgPSBhcnJheSgpOworJGFbMF0gPSYgJGE7Cisk YVsxXSA9IGFycmF5KCk7CiskYVsxXVswXSA9JiAkYVsxXTsKKyRhID0gMTsKK3Zhcl9kdW1w KGdjX2NvbGxlY3RfY3ljbGVzKCkpOworZWNobyAib2tcbiIKKz8+CistLUVYUEVDVC0tCitp bnQoMSkKK29rCkluZGV4OiBaZW5kL3Rlc3RzL2djXzAyMS5waHB0Cj09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K UkNTIGZpbGU6IFplbmQvdGVzdHMvZ2NfMDIxLnBocHQKZGlmZiAtTiBaZW5kL3Rlc3RzL2dj XzAyMS5waHB0Ci0tLSAvZGV2L251bGwJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysg WmVuZC90ZXN0cy9nY18wMjEucGhwdAkxMyBEZWMgMjAwNyAxNzozOTowMiAtMDAwMApAQCAt MCwwICsxLDE2IEBACistLVRFU1QtLQorR0MgMDIxOiBHQyBkZXRhY2ggcmVmZXJlbmNlIHdp dGggYXNzaWduIGJ5IHJlZmVyZW5jZQorLS1GSUxFLS0KKzw/cGhwCiskYSA9IGFycmF5KCk7 CiskYVswXSA9JiAkYTsKKyRhWzFdID0gYXJyYXkoKTsKKyRhWzFdWzBdID0mICRhWzFdOwor JGIgPSAxOworJGEgPSYgJGI7Cit2YXJfZHVtcChnY19jb2xsZWN0X2N5Y2xlcygpKTsKK2Vj aG8gIm9rXG4iCis/PgorLS1FWFBFQ1QtLQoraW50KDIpCitvawpJbmRleDogWmVuZC90ZXN0 cy9nY18wMjIucGhwdAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiBaZW5kL3Rlc3RzL2djXzAy Mi5waHB0CmRpZmYgLU4gWmVuZC90ZXN0cy9nY18wMjIucGhwdAotLS0gL2Rldi9udWxsCTEg SmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIFplbmQvdGVzdHMvZ2NfMDIyLnBocHQJMTMg RGVjIDIwMDcgMTc6Mzk6MDIgLTAwMDAKQEAgLTAsMCArMSwxNSBAQAorLS1URVNULS0KK0dD IDAyMjogR0MgZGV0YWNoIHJlZmVyZW5jZSBpbiBleGVjdXRvcidzIFBaVkFMX1VOTE9DSygp CistLUlOSS0tCitlcnJvcl9yZXBvcnRpbmc9MAorLS1GSUxFLS0KKzw/cGhwCiskYSA9IGFy cmF5KGFycmF5KCkpOworJGFbMF1bMF0gPSYgJGFbMF07CiskcyA9IGFycmF5KDEpICsgdW5z ZXJpYWxpemUoc2VyaWFsaXplKCYkYVswXSkpOwordmFyX2R1bXAoZ2NfY29sbGVjdF9jeWNs ZXMoKSk7CitlY2hvICJva1xuIgorPz4KKy0tRVhQRUNULS0KK2ludCgxKQorb2sKSW5kZXg6 IFplbmQvdGVzdHMvZ2NfMDIzLnBocHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogWmVuZC90 ZXN0cy9nY18wMjMucGhwdApkaWZmIC1OIFplbmQvdGVzdHMvZ2NfMDIzLnBocHQKLS0tIC9k ZXYvbnVsbAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyBaZW5kL3Rlc3RzL2djXzAy My5waHB0CTEzIERlYyAyMDA3IDE3OjM5OjAyIC0wMDAwCkBAIC0wLDAgKzEsMjcgQEAKKy0t VEVTVC0tCitHQyAwMjM6IFJvb3QgYnVmZmVyIG92ZXJmbG93IChhdXRvbWF0aWMgY29sbGVj dGlvbikKKy0tRklMRS0tCis8P3BocAorJGE9YXJyYXkoKTsKK2ZvciAoJGk9MDsgJGkgPCA5 OTk5OyAkaSsrKSB7CisJJGFbJGldID0gYXJyYXkoYXJyYXkoKSk7CisJJGFbJGldWzBdID0g JiAkYVskaV07Cit9Cit2YXJfZHVtcChnY19jb2xsZWN0X2N5Y2xlcygpKTsKK3Vuc2V0KCRh KTsKK3Zhcl9kdW1wKGdjX2NvbGxlY3RfY3ljbGVzKCkpOworJGE9YXJyYXkoKTsKK2ZvciAo JGk9MDsgJGkgPCAxMDAwMTsgJGkrKykgeworCSRhWyRpXSA9IGFycmF5KGFycmF5KCkpOwor CSRhWyRpXVswXSA9ICYgJGFbJGldOworfQordmFyX2R1bXAoZ2NfY29sbGVjdF9jeWNsZXMo KSk7Cit1bnNldCgkYSk7IC8vIDEwMDAwIHp2YWxzIGNvbGxlY3RlZCBhdXRvbWF0aWMKK3Zh cl9kdW1wKGdjX2NvbGxlY3RfY3ljbGVzKCkpOworZWNobyAib2tcbiI7CistLUVYUEVDVC0t CitpbnQoMCkKK2ludCg5OTk5KQoraW50KDApCitpbnQoMSkKK29rCkluZGV4OiBaZW5kL3Rl c3RzL2djXzAyNC5waHB0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IFplbmQvdGVzdHMvZ2Nf MDI0LnBocHQKZGlmZiAtTiBaZW5kL3Rlc3RzL2djXzAyNC5waHB0Ci0tLSAvZGV2L251bGwJ MSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysgWmVuZC90ZXN0cy9nY18wMjQucGhwdAkx MyBEZWMgMjAwNyAxNzozOTowMiAtMDAwMApAQCAtMCwwICsxLDE1IEBACistLVRFU1QtLQor R0MgMDI0OiBHQyBhbmQgb2JqZWN0cyB3aXRoIG5vbi1zdGFuZGFyZCBoYW5kbGVycworLS1T S0lQSUYtLQorPD9waHAgaWYgKCFleHRlbnNpb25fbG9hZGVkKCJzcGwiKSkgcHJpbnQgInNr aXAiOyA/PgorLS1GSUxFLS0KKzw/cGhwCiskYSA9IG5ldyBBcnJheU9iamVjdCgpOworJGFb MF0gPSAkYTsKK3Vuc2V0KCRhKTsKK3Zhcl9kdW1wKGdjX2NvbGxlY3RfY3ljbGVzKCkpOwor ZWNobyAib2tcbiI7Cis/PgorLS1FWFBFQ1QtLQoraW50KDEpCitvawpJbmRleDogWmVuZC90 ZXN0cy9nY18wMjUucGhwdAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiBaZW5kL3Rlc3RzL2dj XzAyNS5waHB0CmRpZmYgLU4gWmVuZC90ZXN0cy9nY18wMjUucGhwdAotLS0gL2Rldi9udWxs CTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIFplbmQvdGVzdHMvZ2NfMDI1LnBocHQJ MTMgRGVjIDIwMDcgMTc6Mzk6MDIgLTAwMDAKQEAgLTAsMCArMSwxMSBAQAorLS1URVNULS0K K0dDIDAyNTogQXV0b21hdGljIEdDIG9uIHJlcXVlc3Qgc2h1dGRvd24KKy0tRklMRS0tCis8 P3BocAorJGEgPSBhcnJheShhcnJheSgpKTsKKyRhWzBdWzBdID0mICRhWzBdOwordW5zZXQo JGEpOworZWNobyAib2tcbiIKKz8+CistLUVYUEVDVC0tCitvawpJbmRleDogWmVuZC90ZXN0 cy9nY18wMjYucGhwdAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiBaZW5kL3Rlc3RzL2djXzAy Ni5waHB0CmRpZmYgLU4gWmVuZC90ZXN0cy9nY18wMjYucGhwdAotLS0gL2Rldi9udWxsCTEg SmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIFplbmQvdGVzdHMvZ2NfMDI2LnBocHQJMTMg RGVjIDIwMDcgMTc6Mzk6MDIgLTAwMDAKQEAgLTAsMCArMSwxNCBAQAorLS1URVNULS0KK0dD IDAyNjogQXV0b21hdGljIEdDIG9uIHJlcXVlc3Qgc2h1dGRvd24gKEdDIGVuYWJsZWQgYXQg cnVuLXRpbWUpCistLUlOSS0tCit6ZW5kLmVuYWJsZV9nYz0wCistLUZJTEUtLQorPD9waHAK K2djX2VuYWJsZSgpOworJGEgPSBhcnJheShhcnJheSgpKTsKKyRhWzBdWzBdID0mICRhWzBd OwordW5zZXQoJGEpOworZWNobyAib2tcbiIKKz8+CistLUVYUEVDVC0tCitvawpJbmRleDog bWFpbi9tYWluLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL3JlcG9zaXRvcnkvcGhwLXNy Yy9tYWluL21haW4uYyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS42NDAuMi4yMy4yLjU3LjIu NApkaWZmIC11IC1wIC1kIC1yMS42NDAuMi4yMy4yLjU3LjIuNCBtYWluLmMKLS0tIG1haW4v bWFpbi5jCTIyIE5vdiAyMDA3IDEzOjI3OjEzIC0wMDAwCTEuNjQwLjIuMjMuMi41Ny4yLjQK KysrIG1haW4vbWFpbi5jCTEzIERlYyAyMDA3IDE3OjM5OjAyIC0wMDAwCkBAIC0xNzAxLDYg KzE3MDEsOCBAQCBpbnQgcGhwX21vZHVsZV9zdGFydHVwKHNhcGlfbW9kdWxlX3N0cnVjCiAJ dHNfYWxsb2NhdGVfaWQoJnBocF93aW4zMl9jb3JlX2dsb2JhbHNfaWQsIHNpemVvZihwaHBf d2luMzJfY29yZV9nbG9iYWxzKSwgKHRzX2FsbG9jYXRlX2N0b3IpIHBocF93aW4zMl9jb3Jl X2dsb2JhbHNfY3RvciwgKHRzX2FsbG9jYXRlX2R0b3IpIHBocF93aW4zMl9jb3JlX2dsb2Jh bHNfZHRvcik7CiAjZW5kaWYKICNlbmRpZgorCWdjX2dsb2JhbHNfY3RvcihUU1JNTFNfQyk7 CisKIAlFRyhiYWlsb3V0KSA9IE5VTEw7CiAJRUcoZXJyb3JfcmVwb3J0aW5nKSA9IEVfQUxM ICYgfkVfTk9USUNFOwogCkBAIC0xOTAyLDYgKzE5MDQsNyBAQCB2b2lkIHBocF9tb2R1bGVf c2h1dGRvd24oVFNSTUxTX0QpCiAJemVuZF9pbmlfc2h1dGRvd24oVFNSTUxTX0MpOwogCXNo dXRkb3duX21lbW9yeV9tYW5hZ2VyKENHKHVuY2xlYW5fc2h1dGRvd24pLCAxIFRTUk1MU19D Qyk7CiAJY29yZV9nbG9iYWxzX2R0b3IoJmNvcmVfZ2xvYmFscyBUU1JNTFNfQ0MpOworCWdj X2dsb2JhbHNfZHRvcihUU1JNTFNfQyk7CiAjZWxzZQogCXplbmRfaW5pX2dsb2JhbF9zaHV0 ZG93bihUU1JNTFNfQyk7CiAJdHNfZnJlZV9pZChjb3JlX2dsb2JhbHNfaWQpOwo= --------------060901050603080804040903--