Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1mzXyO-0006Uc-0i for pgsql-performance@arkaria.postgresql.org; Tue, 21 Dec 2021 05:46:04 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1mzXyM-0000hM-85 for pgsql-performance@arkaria.postgresql.org; Tue, 21 Dec 2021 05:46:02 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1mzXyL-0000hD-F4 for pgsql-performance@lists.postgresql.org; Tue, 21 Dec 2021 05:46:01 +0000 Received: from mail.postgrespro.ru ([93.174.131.139]) by makus.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1mzXyF-0001qO-UE for pgsql-performance@lists.postgresql.org; Tue, 21 Dec 2021 05:46:00 +0000 Received: from falcon-note (cyclops.postgrespro.ru [93.174.131.138]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mail.postgrespro.ru (Postfix) with ESMTPSA id 1A0BB21C2EA7; Tue, 21 Dec 2021 08:45:53 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mail; t=1640065553; bh=qi1mHas07BPJElih35+5ioaocd51aGp9t0HhDBmUb9E=; h=Subject:From:To:Cc:Date:In-Reply-To:References; b=UCoEmvKDu9219hi+l/R9vUn0X12NUZybl2DcPzmM1WpZz7rM7RUG9X7PnfFe/TX4M lC9lxUKLUd0O7SQejlBr5Kg0YR+rTkMhcUdptDnA9biAkdiz7oN1yCv/Yxokp0iWO7 q/OA+ygaICZ7UyU9ho4ippksXZpH/e6RwT/o62Jw= Message-ID: Subject: Re: Lock contention high From: Yura Sokolov To: Ashkil Dighin , Andres Freund Cc: "pgsql-performance@lists.postgresql.org" Date: Tue, 21 Dec 2021 08:45:52 +0300 In-Reply-To: References: <20211025233546.byihrwehpi4feqv2@alap3.anarazel.de> Organization: PostgresPro Content-Type: multipart/mixed; boundary="=-O0z5lIRpAhdiJg4dRWca" User-Agent: Evolution 3.36.5-0ubuntu1 MIME-Version: 1.0 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --=-O0z5lIRpAhdiJg4dRWca Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 8bit В Чт, 28/10/2021 в 03:14 +0530, Ashkil Dighin пишет: > Hi, > Yes, lock contention reduced with postgresqlv14. > Lock acquire reduced 18% to 10% > 10.49 %postgres postgres [.] LWLockAcquire > 5.09% postgres postgres [.] _bt_compare > > Is lock contention can be reduced to 0-3%? > On pg-stat-activity shown LwLock as “BufferCounter” and “WalInsert” > > > On Tuesday, October 26, 2021, Andres Freund wrote: > > Hi, > > > > On 2021-10-12 13:05:12 +0530, Ashkil Dighin wrote: > > > PostgreSQL version: 13.3 > > > > You could try postgres 14 - that did improve scalability in some areas. > > > > > > > > > Perf data for 24vu(TPC-C) > > > -------------------------------- > > > > > > 18.99% postgres postgres [.] LWLockAcquire > > > 7.09% postgres postgres [.] _bt_compare > > > 8.66% postgres postgres [.] LWLockRelease > > > 2.28% postgres postgres [.] GetSnapshotData > > > 2.25% postgres postgres [.] hash_search_with_hash_value > > > 2.11% postgres postgres [.] XLogInsertRecord > > > 1.98% postgres postgres [.] PinBuffer > > > > To be more useful you'd need to create a profile with 'caller' information > > using 'perf record --call-graph dwarf', and then check what the important > > callers are. > > > > > > > Postgres.conf used in Baremetal > > > ======================== > > > shared_buffers = 128GB(1/4 th RAM size) > > > effective_cachesize=392 GB(1/3 or 75% of RAM size) > > > > If your hot data set is actually larger than s_b, I'd recommend trying a > > larger s_b. It's plausible that a good chunk of lock contention is from that. > > Could you try attached patch? It reduces lock contention in buffer manager by not acquiring two locks simultaneously on buffer eviction. v1-0001-* - it is file for postgresql 14 and master branch vpg13v1-0001-* - this file for postgresql 13 Corresponding (not so loud) discussion: https://postgr.es/m/flat/1edbb61981fe1d99c3f20e3d56d6c88999f4227c.camel%40postgrespro.ru -------- regards, Yura Sokolov y.sokolov@postgrespro.ru funny.falcon@gmail.com --=-O0z5lIRpAhdiJg4dRWca Content-Disposition: attachment; filename="vpg13v1-0001-bufmgr-do-not-acquire-two-partition-locks.patch" Content-Type: text/x-patch; name="vpg13v1-0001-bufmgr-do-not-acquire-two-partition-locks.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbSBlZmExZDM2ZjBlNmE4M2Y0MzI5ZDI1OWYzMTBiOGRhMjViMDRiYzI0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBZdXJhIFNva29sb3YgPHkuc29rb2xvdkBwb3N0Z3Jlc3Byby5y dT4KRGF0ZTogV2VkLCAyMiBTZXAgMjAyMSAxMzoxMDozNyArMDMwMApTdWJqZWN0OiBbUEFUQ0gg dnBnMTN2MV0gYnVmbWdyOiBkbyBub3QgYWNxdWlyZSB0d28gcGFydGl0aW9uIGxvY2tzLgoKQWNx dWlyaW5nIHR3byBwYXJ0aXRpb24gbG9ja3MgbGVhZHMgdG8gY29tcGxleCBkZXBlbmRlbmN5IGNo YWluIHRoYXQgaHVydHMKYXQgaGlnaCBjb25jdXJyZW5jeSBsZXZlbC4KClRoZXJlIGlzIG5vIG5l ZWQgdG8gaG9sZCBib3RoIGxvY2sgc2ltdWx0YW5lb3VzbHkuIEJ1ZmZlciBpcyBwaW5uZWQgc28K b3RoZXIgcHJvY2Vzc2VzIGNvdWxkIG5vdCBzZWxlY3QgaXQgZm9yIGV2aWN0aW9uLiBJZiB0YWcg aXMgY2xlYXJlZCBhbmQKYnVmZmVyIHJlbW92ZWQgZnJvbSBvbGQgcGFydGl0aW9uIG90aGVyIHBy b2Nlc3NlcyB3aWxsIG5vdCBmaW5kIGl0LgpUaGVyZWZvcmUgaXQgaXMgc2FmZSB0byByZWxlYXNl IG9sZCBwYXJ0aXRpb24gbG9jayBiZWZvcmUgYWNxdWlyaW5nCm5ldyBwYXJ0aXRpb24gbG9jay4K ClRoaXMgY2hhbmdlIHJlcXVpcmVzIHRvIG1hbnVhbGx5IHJldHVybiBCdWZmZXJEZXNjIHRvIGZy ZWUgbGlzdC4KCkFsc28gaW5zZXJ0aW9uIGFuZCBkZWxldGlvbiB0byBkeW5haGFzaCBpcyBvcHRp bWl6ZWQgYnkgYXZvaWRpbmcKdW5uZWNlc3NhcnkgZnJlZSBsaXN0IG1hbmlwdWxhdGlvbnMgaW4g Y29tbW9uIGNhc2UgKHdoZW4gYnVmZmVyIGlzCnJldXNlZCkKCkFsc28gc21hbGwgYW5kIG5ldmVy IHRyaWdnZXJlZCBidWcgaW4gaGFzaF91cGRhdGVfaGFzaF9rZXkgaXMgZml4ZWQuCi0tLQogc3Jj L2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmX3RhYmxlLmMgfCAgNTQgKysrLS0KIHNyYy9iYWNr ZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5jICAgIHwgMTkwICsrKysrKysrLS0tLS0tLS0KIHNy Yy9iYWNrZW5kL3V0aWxzL2hhc2gvZHluYWhhc2guYyAgICAgIHwgMjg5ICsrKysrKysrKysrKysr KysrKysrKysrLS0KIHNyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmX2ludGVybmFscy5oICAgIHwgICA2 ICstCiBzcmMvaW5jbHVkZS91dGlscy9oc2VhcmNoLmggICAgICAgICAgICB8ICAxNyArKwogNSBm aWxlcyBjaGFuZ2VkLCA0MTAgaW5zZXJ0aW9ucygrKSwgMTQ2IGRlbGV0aW9ucygtKQoKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zl90YWJsZS5jIGIvc3JjL2JhY2tl bmQvc3RvcmFnZS9idWZmZXIvYnVmX3RhYmxlLmMKaW5kZXggNDk1M2FlOWY4MjQuLmZlYWI3ZjYy ZjViIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZfdGFibGUuYwor KysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZfdGFibGUuYwpAQCAtMTA3LDM2ICsx MDcsMjkgQEAgQnVmVGFibGVMb29rdXAoQnVmZmVyVGFnICp0YWdQdHIsIHVpbnQzMiBoYXNoY29k ZSkKIAogLyoKICAqIEJ1ZlRhYmxlSW5zZXJ0Ci0gKgkJSW5zZXJ0IGEgaGFzaHRhYmxlIGVudHJ5 IGZvciBnaXZlbiB0YWcgYW5kIGJ1ZmZlciBJRCwKLSAqCQl1bmxlc3MgYW4gZW50cnkgYWxyZWFk eSBleGlzdHMgZm9yIHRoYXQgdGFnCi0gKgotICogUmV0dXJucyAtMSBvbiBzdWNjZXNzZnVsIGlu c2VydGlvbi4gIElmIGEgY29uZmxpY3RpbmcgZW50cnkgZXhpc3RzCi0gKiBhbHJlYWR5LCByZXR1 cm5zIHRoZSBidWZmZXIgSUQgaW4gdGhhdCBlbnRyeS4KKyAqCQlJbnNlcnQgYSBoYXNodGFibGUg ZW50cnkgZm9yIGdpdmVuIHRhZyBhbmQgYnVmZmVyIElELgorICoJCUNhbGxlciBzaG91bGQgYmUg c3VyZSB0aGVyZSBpcyBubyBjb25mbGljdGluZyBlbnRyeS4KICAqCiAgKiBDYWxsZXIgbXVzdCBo b2xkIGV4Y2x1c2l2ZSBsb2NrIG9uIEJ1Zk1hcHBpbmdMb2NrIGZvciB0YWcncyBwYXJ0aXRpb24K KyAqIGFuZCBjYWxsIEJ1ZlRhYmxlTG9va3VwIHRvIGNoZWNrIGZvciBjb25mbGljdGluZyBlbnRy eS4KKyAqCisgKiBJZiBvbGRlbGVtIGlzIHBhc3NlZCBpdCBpcyByZXVzZWQuCiAgKi8KLWludAot QnVmVGFibGVJbnNlcnQoQnVmZmVyVGFnICp0YWdQdHIsIHVpbnQzMiBoYXNoY29kZSwgaW50IGJ1 Zl9pZCkKK3ZvaWQKK0J1ZlRhYmxlSW5zZXJ0KEJ1ZmZlclRhZyAqdGFnUHRyLCB1aW50MzIgaGFz aGNvZGUsIGludCBidWZfaWQsIHZvaWQgKm9sZGVsZW0pCiB7CiAJQnVmZmVyTG9va3VwRW50ICpy ZXN1bHQ7Ci0JYm9vbAkJZm91bmQ7CiAKIAlBc3NlcnQoYnVmX2lkID49IDApOwkJLyogLTEgaXMg cmVzZXJ2ZWQgZm9yIG5vdC1pbi10YWJsZSAqLwogCUFzc2VydCh0YWdQdHItPmJsb2NrTnVtICE9 IFBfTkVXKTsJLyogaW52YWxpZCB0YWcgKi8KIAogCXJlc3VsdCA9IChCdWZmZXJMb29rdXBFbnQg KikKLQkJaGFzaF9zZWFyY2hfd2l0aF9oYXNoX3ZhbHVlKFNoYXJlZEJ1Zkhhc2gsCi0JCQkJCQkJ CQkodm9pZCAqKSB0YWdQdHIsCi0JCQkJCQkJCQloYXNoY29kZSwKLQkJCQkJCQkJCUhBU0hfRU5U RVIsCi0JCQkJCQkJCQkmZm91bmQpOwotCi0JaWYgKGZvdW5kKQkJCQkJLyogZm91bmQgc29tZXRo aW5nIGFscmVhZHkgaW4gdGhlIHRhYmxlICovCi0JCXJldHVybiByZXN1bHQtPmlkOworCQloYXNo X2luc2VydF93aXRoX2hhc2hfbm9jaGVjayhTaGFyZWRCdWZIYXNoLAorCQkJCQkJCQkJICAodm9p ZCAqKSB0YWdQdHIsCisJCQkJCQkJCQkgIGhhc2hjb2RlLAorCQkJCQkJCQkJICBvbGRlbGVtKTsK IAogCXJlc3VsdC0+aWQgPSBidWZfaWQ7Ci0KLQlyZXR1cm4gLTE7CiB9CiAKIC8qCkBAIC0xNDQs MTkgKzEzNywzMiBAQCBCdWZUYWJsZUluc2VydChCdWZmZXJUYWcgKnRhZ1B0ciwgdWludDMyIGhh c2hjb2RlLCBpbnQgYnVmX2lkKQogICoJCURlbGV0ZSB0aGUgaGFzaHRhYmxlIGVudHJ5IGZvciBn aXZlbiB0YWcgKHdoaWNoIG11c3QgZXhpc3QpCiAgKgogICogQ2FsbGVyIG11c3QgaG9sZCBleGNs dXNpdmUgbG9jayBvbiBCdWZNYXBwaW5nTG9jayBmb3IgdGFnJ3MgcGFydGl0aW9uCisgKgorICog UmV0dXJucyBwb2ludGVyIHRvIGludGVybmFsIGhhc2h0YWJsZSBlbnRyeSB0aGF0IHNob3VsZCBi ZSBwYXNzZWQgZWl0aGVyCisgKiB0byBCdWZUYWJsZUluc2VydCBvciBCdWZUYWJsZUZyZWVEZWxl dGVkLgogICovCi12b2lkCit2b2lkICoKIEJ1ZlRhYmxlRGVsZXRlKEJ1ZmZlclRhZyAqdGFnUHRy LCB1aW50MzIgaGFzaGNvZGUpCiB7CiAJQnVmZmVyTG9va3VwRW50ICpyZXN1bHQ7CiAKIAlyZXN1 bHQgPSAoQnVmZmVyTG9va3VwRW50ICopCi0JCWhhc2hfc2VhcmNoX3dpdGhfaGFzaF92YWx1ZShT aGFyZWRCdWZIYXNoLAotCQkJCQkJCQkJKHZvaWQgKikgdGFnUHRyLAotCQkJCQkJCQkJaGFzaGNv ZGUsCi0JCQkJCQkJCQlIQVNIX1JFTU9WRSwKLQkJCQkJCQkJCU5VTEwpOworCQloYXNoX2RlbGV0 ZV9za2lwX2ZyZWVsaXN0KFNoYXJlZEJ1Zkhhc2gsCisJCQkJCQkJCSAgKHZvaWQgKikgdGFnUHRy LAorCQkJCQkJCQkgIGhhc2hjb2RlKTsKIAogCWlmICghcmVzdWx0KQkJCQkvKiBzaG91bGRuJ3Qg aGFwcGVuICovCiAJCWVsb2coRVJST1IsICJzaGFyZWQgYnVmZmVyIGhhc2ggdGFibGUgY29ycnVw dGVkIik7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICogQnVmVGFibGVGcmVlRGVsZXRl ZAorICoJCVJldHVybnMgZGVsZXRlZCBoYXNodGFibGUgZW50cnkgdG8gZnJlZWxpc3QuCisgKi8K K3ZvaWQKK0J1ZlRhYmxlRnJlZURlbGV0ZWQodm9pZCAqb2xkZWxlbSwgdWludDMyIGhhc2hjb2Rl KQoreworCWhhc2hfcmV0dXJuX3RvX2ZyZWVsaXN0KFNoYXJlZEJ1Zkhhc2gsIG9sZGVsZW0sIGhh c2hjb2RlKTsKIH0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1n ci5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMKaW5kZXggOTM4MWY5OTgx ZDMuLjcwNTkxOTIyNmU1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9i dWZtZ3IuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYwpAQCAtMTAy MCw2ICsxMDIwLDcgQEAgQnVmZmVyQWxsb2MoU01nclJlbGF0aW9uIHNtZ3IsIGNoYXIgcmVscGVy c2lzdGVuY2UsIEZvcmtOdW1iZXIgZm9ya051bSwKIAlCdWZmZXJEZXNjICpidWY7CiAJYm9vbAkJ dmFsaWQ7CiAJdWludDMyCQlidWZfc3RhdGU7CisJdm9pZAkgICAqb2xkRWxlbSA9IE5VTEw7CiAK IAkvKiBjcmVhdGUgYSB0YWcgc28gd2UgY2FuIGxvb2t1cCB0aGUgYnVmZmVyICovCiAJSU5JVF9C VUZGRVJUQUcobmV3VGFnLCBzbWdyLT5zbWdyX3Jub2RlLm5vZGUsIGZvcmtOdW0sIGJsb2NrTnVt KTsKQEAgLTExOTQsOTMgKzExOTUsMTYgQEAgQnVmZmVyQWxsb2MoU01nclJlbGF0aW9uIHNtZ3Is IGNoYXIgcmVscGVyc2lzdGVuY2UsIEZvcmtOdW1iZXIgZm9ya051bSwKIAkJCW9sZEhhc2ggPSBC dWZUYWJsZUhhc2hDb2RlKCZvbGRUYWcpOwogCQkJb2xkUGFydGl0aW9uTG9jayA9IEJ1Zk1hcHBp bmdQYXJ0aXRpb25Mb2NrKG9sZEhhc2gpOwogCi0JCQkvKgotCQkJICogTXVzdCBsb2NrIHRoZSBs b3dlci1udW1iZXJlZCBwYXJ0aXRpb24gZmlyc3QgdG8gYXZvaWQKLQkJCSAqIGRlYWRsb2Nrcy4K LQkJCSAqLwotCQkJaWYgKG9sZFBhcnRpdGlvbkxvY2sgPCBuZXdQYXJ0aXRpb25Mb2NrKQotCQkJ ewotCQkJCUxXTG9ja0FjcXVpcmUob2xkUGFydGl0aW9uTG9jaywgTFdfRVhDTFVTSVZFKTsKLQkJ CQlMV0xvY2tBY3F1aXJlKG5ld1BhcnRpdGlvbkxvY2ssIExXX0VYQ0xVU0lWRSk7Ci0JCQl9Ci0J CQllbHNlIGlmIChvbGRQYXJ0aXRpb25Mb2NrID4gbmV3UGFydGl0aW9uTG9jaykKLQkJCXsKLQkJ CQlMV0xvY2tBY3F1aXJlKG5ld1BhcnRpdGlvbkxvY2ssIExXX0VYQ0xVU0lWRSk7Ci0JCQkJTFdM b2NrQWNxdWlyZShvbGRQYXJ0aXRpb25Mb2NrLCBMV19FWENMVVNJVkUpOwotCQkJfQotCQkJZWxz ZQotCQkJewotCQkJCS8qIG9ubHkgb25lIHBhcnRpdGlvbiwgb25seSBvbmUgbG9jayAqLwotCQkJ CUxXTG9ja0FjcXVpcmUobmV3UGFydGl0aW9uTG9jaywgTFdfRVhDTFVTSVZFKTsKLQkJCX0KKwkJ CUxXTG9ja0FjcXVpcmUob2xkUGFydGl0aW9uTG9jaywgTFdfRVhDTFVTSVZFKTsKIAkJfQogCQll bHNlCiAJCXsKLQkJCS8qIGlmIGl0IHdhc24ndCB2YWxpZCwgd2UgbmVlZCBvbmx5IHRoZSBuZXcg cGFydGl0aW9uICovCi0JCQlMV0xvY2tBY3F1aXJlKG5ld1BhcnRpdGlvbkxvY2ssIExXX0VYQ0xV U0lWRSk7CiAJCQkvKiByZW1lbWJlciB3ZSBoYXZlIG5vIG9sZC1wYXJ0aXRpb24gbG9jayBvciB0 YWcgKi8KIAkJCW9sZFBhcnRpdGlvbkxvY2sgPSBOVUxMOwogCQkJLyoga2VlcCB0aGUgY29tcGls ZXIgcXVpZXQgYWJvdXQgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgKi8KIAkJCW9sZEhhc2ggPSAw OwogCQl9CiAKLQkJLyoKLQkJICogVHJ5IHRvIG1ha2UgYSBoYXNodGFibGUgZW50cnkgZm9yIHRo ZSBidWZmZXIgdW5kZXIgaXRzIG5ldyB0YWcuCi0JCSAqIFRoaXMgY291bGQgZmFpbCBiZWNhdXNl IHdoaWxlIHdlIHdlcmUgd3JpdGluZyBzb21lb25lIGVsc2UKLQkJICogYWxsb2NhdGVkIGFub3Ro ZXIgYnVmZmVyIGZvciB0aGUgc2FtZSBibG9jayB3ZSB3YW50IHRvIHJlYWQgaW4uCi0JCSAqIE5v dGUgdGhhdCB3ZSBoYXZlIG5vdCB5ZXQgcmVtb3ZlZCB0aGUgaGFzaHRhYmxlIGVudHJ5IGZvciB0 aGUgb2xkCi0JCSAqIHRhZy4KLQkJICovCi0JCWJ1Zl9pZCA9IEJ1ZlRhYmxlSW5zZXJ0KCZuZXdU YWcsIG5ld0hhc2gsIGJ1Zi0+YnVmX2lkKTsKLQotCQlpZiAoYnVmX2lkID49IDApCi0JCXsKLQkJ CS8qCi0JCQkgKiBHb3QgYSBjb2xsaXNpb24uIFNvbWVvbmUgaGFzIGFscmVhZHkgZG9uZSB3aGF0 IHdlIHdlcmUgYWJvdXQgdG8KLQkJCSAqIGRvLiBXZSdsbCBqdXN0IGhhbmRsZSB0aGlzIGFzIGlm IGl0IHdlcmUgZm91bmQgaW4gdGhlIGJ1ZmZlcgotCQkJICogcG9vbCBpbiB0aGUgZmlyc3QgcGxh Y2UuICBGaXJzdCwgZ2l2ZSB1cCB0aGUgYnVmZmVyIHdlIHdlcmUKLQkJCSAqIHBsYW5uaW5nIHRv IHVzZS4KLQkJCSAqLwotCQkJVW5waW5CdWZmZXIoYnVmLCB0cnVlKTsKLQotCQkJLyogQ2FuIGdp dmUgdXAgdGhhdCBidWZmZXIncyBtYXBwaW5nIHBhcnRpdGlvbiBsb2NrIG5vdyAqLwotCQkJaWYg KG9sZFBhcnRpdGlvbkxvY2sgIT0gTlVMTCAmJgotCQkJCW9sZFBhcnRpdGlvbkxvY2sgIT0gbmV3 UGFydGl0aW9uTG9jaykKLQkJCQlMV0xvY2tSZWxlYXNlKG9sZFBhcnRpdGlvbkxvY2spOwotCi0J CQkvKiByZW1haW5pbmcgY29kZSBzaG91bGQgbWF0Y2ggY29kZSBhdCB0b3Agb2Ygcm91dGluZSAq LwotCi0JCQlidWYgPSBHZXRCdWZmZXJEZXNjcmlwdG9yKGJ1Zl9pZCk7Ci0KLQkJCXZhbGlkID0g UGluQnVmZmVyKGJ1Ziwgc3RyYXRlZ3kpOwotCi0JCQkvKiBDYW4gcmVsZWFzZSB0aGUgbWFwcGlu ZyBsb2NrIGFzIHNvb24gYXMgd2UndmUgcGlubmVkIGl0ICovCi0JCQlMV0xvY2tSZWxlYXNlKG5l d1BhcnRpdGlvbkxvY2spOwotCi0JCQkqZm91bmRQdHIgPSB0cnVlOwotCi0JCQlpZiAoIXZhbGlk KQotCQkJewotCQkJCS8qCi0JCQkJICogV2UgY2FuIG9ubHkgZ2V0IGhlcmUgaWYgKGEpIHNvbWVv bmUgZWxzZSBpcyBzdGlsbCByZWFkaW5nCi0JCQkJICogaW4gdGhlIHBhZ2UsIG9yIChiKSBhIHBy ZXZpb3VzIHJlYWQgYXR0ZW1wdCBmYWlsZWQuICBXZQotCQkJCSAqIGhhdmUgdG8gd2FpdCBmb3Ig YW55IGFjdGl2ZSByZWFkIGF0dGVtcHQgdG8gZmluaXNoLCBhbmQKLQkJCQkgKiB0aGVuIHNldCB1 cCBvdXIgb3duIHJlYWQgYXR0ZW1wdCBpZiB0aGUgcGFnZSBpcyBzdGlsbCBub3QKLQkJCQkgKiBC TV9WQUxJRC4gIFN0YXJ0QnVmZmVySU8gZG9lcyBpdCBhbGwuCi0JCQkJICovCi0JCQkJaWYgKFN0 YXJ0QnVmZmVySU8oYnVmLCB0cnVlKSkKLQkJCQl7Ci0JCQkJCS8qCi0JCQkJCSAqIElmIHdlIGdl dCBoZXJlLCBwcmV2aW91cyBhdHRlbXB0cyB0byByZWFkIHRoZSBidWZmZXIKLQkJCQkJICogbXVz dCBoYXZlIGZhaWxlZCAuLi4gYnV0IHdlIHNoYWxsIGJyYXZlbHkgdHJ5IGFnYWluLgotCQkJCQkg Ki8KLQkJCQkJKmZvdW5kUHRyID0gZmFsc2U7Ci0JCQkJfQotCQkJfQotCi0JCQlyZXR1cm4gYnVm OwotCQl9Ci0KIAkJLyoKIAkJICogTmVlZCB0byBsb2NrIHRoZSBidWZmZXIgaGVhZGVyIHRvbyBp biBvcmRlciB0byBjaGFuZ2UgaXRzIHRhZy4KIAkJICovCkBAIC0xMjk3LDMxICsxMjIxLDEwMiBA QCBCdWZmZXJBbGxvYyhTTWdyUmVsYXRpb24gc21nciwgY2hhciByZWxwZXJzaXN0ZW5jZSwgRm9y a051bWJlciBmb3JrTnVtLAogCQkJYnJlYWs7CiAKIAkJVW5sb2NrQnVmSGRyKGJ1ZiwgYnVmX3N0 YXRlKTsKLQkJQnVmVGFibGVEZWxldGUoJm5ld1RhZywgbmV3SGFzaCk7Ci0JCWlmIChvbGRQYXJ0 aXRpb25Mb2NrICE9IE5VTEwgJiYKLQkJCW9sZFBhcnRpdGlvbkxvY2sgIT0gbmV3UGFydGl0aW9u TG9jaykKKwkJaWYgKG9sZFBhcnRpdGlvbkxvY2sgIT0gTlVMTCkKIAkJCUxXTG9ja1JlbGVhc2Uo b2xkUGFydGl0aW9uTG9jayk7Ci0JCUxXTG9ja1JlbGVhc2UobmV3UGFydGl0aW9uTG9jayk7CiAJ CVVucGluQnVmZmVyKGJ1ZiwgdHJ1ZSk7CiAJfQogCiAJLyoKLQkgKiBPa2F5LCBpdCdzIGZpbmFs bHkgc2FmZSB0byByZW5hbWUgdGhlIGJ1ZmZlci4KKwkgKiBDbGVhciBvdXQgdGhlIGJ1ZmZlcidz IHRhZyBhbmQgZmxhZ3MuICBXZSBtdXN0IGRvIHRoaXMgdG8gZW5zdXJlIHRoYXQKKwkgKiBsaW5l YXIgc2NhbnMgb2YgdGhlIGJ1ZmZlciBhcnJheSBkb24ndCB0aGluayB0aGUgYnVmZmVyIGlzIHZh bGlkLiBXZQorCSAqIGFsc28gcmVzZXQgdGhlIHVzYWdlX2NvdW50IHNpbmNlIGFueSByZWNlbmN5 IG9mIHVzZSBvZiB0aGUgb2xkIGNvbnRlbnQKKwkgKiBpcyBubyBsb25nZXIgcmVsZXZhbnQuCiAJ ICoKLQkgKiBDbGVhcmluZyBCTV9WQUxJRCBoZXJlIGlzIG5lY2Vzc2FyeSwgY2xlYXJpbmcgdGhl IGRpcnR5Yml0cyBpcyBqdXN0Ci0JICogcGFyYW5vaWEuICBXZSBhbHNvIHJlc2V0IHRoZSB1c2Fn ZV9jb3VudCBzaW5jZSBhbnkgcmVjZW5jeSBvZiB1c2Ugb2YKLQkgKiB0aGUgb2xkIGNvbnRlbnQg aXMgbm8gbG9uZ2VyIHJlbGV2YW50LiAgKFRoZSB1c2FnZV9jb3VudCBzdGFydHMgb3V0IGF0Ci0J ICogMSBzbyB0aGF0IHRoZSBidWZmZXIgY2FuIHN1cnZpdmUgb25lIGNsb2NrLXN3ZWVwIHBhc3Mu KQorCSAqIFNpbmNlIHdlIGFyZSBzaW5nbGUgcGlubmVyLCB0aGVyZSBzaG91bGQgbm8gYmUgUElO X0NPVU5UX1dBSVRFUiBvcgorCSAqIElPX0lOX1BST0dSRVNTIChmbGFncyB0aGF0IHdlcmUgbm90 IGNsZWFyZWQgaW4gcHJldmlvdXMgY29kZSkuCisJICovCisJQXNzZXJ0KChvbGRGbGFncyAmIChC TV9QSU5fQ09VTlRfV0FJVEVSIHwgQk1fSU9fSU5fUFJPR1JFU1MpKSA9PSAwKTsKKwlDTEVBUl9C VUZGRVJUQUcoYnVmLT50YWcpOworCWJ1Zl9zdGF0ZSAmPSB+KEJVRl9GTEFHX01BU0sgfCBCVUZf VVNBR0VDT1VOVF9NQVNLKTsKKwlVbmxvY2tCdWZIZHIoYnVmLCBidWZfc3RhdGUpOworCisJaWYg KG9sZEZsYWdzICYgQk1fVEFHX1ZBTElEKQorCQlvbGRFbGVtID0gQnVmVGFibGVEZWxldGUoJm9s ZFRhZywgb2xkSGFzaCk7CisKKwlpZiAob2xkUGFydGl0aW9uTG9jayAhPSBuZXdQYXJ0aXRpb25M b2NrKQorCXsKKwkJaWYgKG9sZFBhcnRpdGlvbkxvY2sgIT0gTlVMTCkKKwkJCUxXTG9ja1JlbGVh c2Uob2xkUGFydGl0aW9uTG9jayk7CisJCUxXTG9ja0FjcXVpcmUobmV3UGFydGl0aW9uTG9jaywg TFdfRVhDTFVTSVZFKTsKKwl9CisKKwkvKgorCSAqIFRyeSB0byBtYWtlIGEgaGFzaHRhYmxlIGVu dHJ5IGZvciB0aGUgYnVmZmVyIHVuZGVyIGl0cyBuZXcgdGFnLiBUaGlzCisJICogY291bGQgZmFp bCBiZWNhdXNlIHdoaWxlIHdlIHdlcmUgd3JpdGluZyBzb21lb25lIGVsc2UgYWxsb2NhdGVkIGFu b3RoZXIKKwkgKiBidWZmZXIgZm9yIHRoZSBzYW1lIGJsb2NrIHdlIHdhbnQgdG8gcmVhZCBpbi4g Tm90ZSB0aGF0IHdlIGhhdmUgbm90IHlldAorCSAqIHJlbW92ZWQgdGhlIGhhc2h0YWJsZSBlbnRy eSBmb3IgdGhlIG9sZCB0YWcuCisJICovCisJYnVmX2lkID0gQnVmVGFibGVMb29rdXAoJm5ld1Rh ZywgbmV3SGFzaCk7CisKKwlpZiAoYnVmX2lkID49IDApCisJeworCQkvKgorCQkgKiBHb3QgYSBj b2xsaXNpb24uIFNvbWVvbmUgaGFzIGFscmVhZHkgZG9uZSB3aGF0IHdlIHdlcmUgYWJvdXQgdG8g ZG8uCisJCSAqIFdlJ2xsIGp1c3QgaGFuZGxlIHRoaXMgYXMgaWYgaXQgd2VyZSBmb3VuZCBpbiB0 aGUgYnVmZmVyIHBvb2wgaW4KKwkJICogdGhlIGZpcnN0IHBsYWNlLiAgRmlyc3QsIGdpdmUgdXAg dGhlIGJ1ZmZlciB3ZSB3ZXJlIHBsYW5uaW5nIHRvIHVzZQorCQkgKiBhbmQgcHV0IGl0IHRvIGZy ZWUgbGlzdHMuCisJCSAqLworCQlVbnBpbkJ1ZmZlcihidWYsIHRydWUpOworCQlTdHJhdGVneUZy ZWVCdWZmZXIoYnVmKTsKKwkJaWYgKG9sZEVsZW0gIT0gTlVMTCkKKwkJCUJ1ZlRhYmxlRnJlZURl bGV0ZWQob2xkRWxlbSwgb2xkSGFzaCk7CisKKwkJLyogcmVtYWluaW5nIGNvZGUgc2hvdWxkIG1h dGNoIGNvZGUgYXQgdG9wIG9mIHJvdXRpbmUgKi8KKworCQlidWYgPSBHZXRCdWZmZXJEZXNjcmlw dG9yKGJ1Zl9pZCk7CisKKwkJdmFsaWQgPSBQaW5CdWZmZXIoYnVmLCBzdHJhdGVneSk7CisKKwkJ LyogQ2FuIHJlbGVhc2UgdGhlIG1hcHBpbmcgbG9jayBhcyBzb29uIGFzIHdlJ3ZlIHBpbm5lZCBp dCAqLworCQlMV0xvY2tSZWxlYXNlKG5ld1BhcnRpdGlvbkxvY2spOworCisJCSpmb3VuZFB0ciA9 IHRydWU7CisKKwkJaWYgKCF2YWxpZCkKKwkJeworCQkJLyoKKwkJCSAqIFdlIGNhbiBvbmx5IGdl dCBoZXJlIGlmIChhKSBzb21lb25lIGVsc2UgaXMgc3RpbGwgcmVhZGluZyBpbgorCQkJICogdGhl IHBhZ2UsIG9yIChiKSBhIHByZXZpb3VzIHJlYWQgYXR0ZW1wdCBmYWlsZWQuICBXZSBoYXZlIHRv CisJCQkgKiB3YWl0IGZvciBhbnkgYWN0aXZlIHJlYWQgYXR0ZW1wdCB0byBmaW5pc2gsIGFuZCB0 aGVuIHNldCB1cCBvdXIKKwkJCSAqIG93biByZWFkIGF0dGVtcHQgaWYgdGhlIHBhZ2UgaXMgc3Rp bGwgbm90IEJNX1ZBTElELgorCQkJICogU3RhcnRCdWZmZXJJTyBkb2VzIGl0IGFsbC4KKwkJCSAq LworCQkJaWYgKFN0YXJ0QnVmZmVySU8oYnVmLCB0cnVlKSkKKwkJCXsKKwkJCQkvKgorCQkJCSAq IElmIHdlIGdldCBoZXJlLCBwcmV2aW91cyBhdHRlbXB0cyB0byByZWFkIHRoZSBidWZmZXIgbXVz dAorCQkJCSAqIGhhdmUgZmFpbGVkIC4uLiBidXQgd2Ugc2hhbGwgYnJhdmVseSB0cnkgYWdhaW4u CisJCQkJICovCisJCQkJKmZvdW5kUHRyID0gZmFsc2U7CisJCQl9CisJCX0KKworCQlyZXR1cm4g YnVmOworCX0KKworCS8qCisJICogT2theSwgaXQncyBmaW5hbGx5IHNhZmUgdG8gcmVuYW1lIHRo ZSBidWZmZXIuCiAJICoKIAkgKiBNYWtlIHN1cmUgQk1fUEVSTUFORU5UIGlzIHNldCBmb3IgYnVm ZmVycyB0aGF0IG11c3QgYmUgd3JpdHRlbiBhdCBldmVyeQogCSAqIGNoZWNrcG9pbnQuICBVbmxv Z2dlZCBidWZmZXJzIG9ubHkgbmVlZCB0byBiZSB3cml0dGVuIGF0IHNodXRkb3duCiAJICogY2hl Y2twb2ludHMsIGV4Y2VwdCBmb3IgdGhlaXIgImluaXQiIGZvcmtzLCB3aGljaCBuZWVkIHRvIGJl IHRyZWF0ZWQKIAkgKiBqdXN0IGxpa2UgcGVybWFuZW50IHJlbGF0aW9ucy4KKwkgKgorCSAqIFRo ZSB1c2FnZV9jb3VudCBzdGFydHMgb3V0IGF0IDEgc28gdGhhdCB0aGUgYnVmZmVyIGNhbiBzdXJ2 aXZlIG9uZQorCSAqIGNsb2NrLXN3ZWVwIHBhc3MuCiAJICovCisJYnVmX3N0YXRlID0gTG9ja0J1 ZkhkcihidWYpOwogCWJ1Zi0+dGFnID0gbmV3VGFnOwotCWJ1Zl9zdGF0ZSAmPSB+KEJNX1ZBTElE IHwgQk1fRElSVFkgfCBCTV9KVVNUX0RJUlRJRUQgfAotCQkJCSAgIEJNX0NIRUNLUE9JTlRfTkVF REVEIHwgQk1fSU9fRVJST1IgfCBCTV9QRVJNQU5FTlQgfAotCQkJCSAgIEJVRl9VU0FHRUNPVU5U X01BU0spOwogCWlmIChyZWxwZXJzaXN0ZW5jZSA9PSBSRUxQRVJTSVNURU5DRV9QRVJNQU5FTlQg fHwgZm9ya051bSA9PSBJTklUX0ZPUktOVU0pCiAJCWJ1Zl9zdGF0ZSB8PSBCTV9UQUdfVkFMSUQg fCBCTV9QRVJNQU5FTlQgfCBCVUZfVVNBR0VDT1VOVF9PTkU7CiAJZWxzZQpAQCAtMTMyOSwxMyAr MTMyNCw3IEBAIEJ1ZmZlckFsbG9jKFNNZ3JSZWxhdGlvbiBzbWdyLCBjaGFyIHJlbHBlcnNpc3Rl bmNlLCBGb3JrTnVtYmVyIGZvcmtOdW0sCiAKIAlVbmxvY2tCdWZIZHIoYnVmLCBidWZfc3RhdGUp OwogCi0JaWYgKG9sZFBhcnRpdGlvbkxvY2sgIT0gTlVMTCkKLQl7Ci0JCUJ1ZlRhYmxlRGVsZXRl KCZvbGRUYWcsIG9sZEhhc2gpOwotCQlpZiAob2xkUGFydGl0aW9uTG9jayAhPSBuZXdQYXJ0aXRp b25Mb2NrKQotCQkJTFdMb2NrUmVsZWFzZShvbGRQYXJ0aXRpb25Mb2NrKTsKLQl9Ci0KKwlCdWZU YWJsZUluc2VydCgmbmV3VGFnLCBuZXdIYXNoLCBidWYtPmJ1Zl9pZCwgb2xkRWxlbSk7CiAJTFdM b2NrUmVsZWFzZShuZXdQYXJ0aXRpb25Mb2NrKTsKIAogCS8qCkBAIC0xNDQ0LDcgKzE0MzMsMTIg QEAgcmV0cnk6CiAJICogUmVtb3ZlIHRoZSBidWZmZXIgZnJvbSB0aGUgbG9va3VwIGhhc2h0YWJs ZSwgaWYgaXQgd2FzIGluIHRoZXJlLgogCSAqLwogCWlmIChvbGRGbGFncyAmIEJNX1RBR19WQUxJ RCkKLQkJQnVmVGFibGVEZWxldGUoJm9sZFRhZywgb2xkSGFzaCk7CisJeworCQl2b2lkCSAgICpv bGRFbGVtOworCisJCW9sZEVsZW0gPSBCdWZUYWJsZURlbGV0ZSgmb2xkVGFnLCBvbGRIYXNoKTsK KwkJQnVmVGFibGVGcmVlRGVsZXRlZChvbGRFbGVtLCBvbGRIYXNoKTsKKwl9CiAKIAkvKgogCSAq IERvbmUgd2l0aCBtYXBwaW5nIGxvY2suCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9o YXNoL2R5bmFoYXNoLmMgYi9zcmMvYmFja2VuZC91dGlscy9oYXNoL2R5bmFoYXNoLmMKaW5kZXgg MjY4OGUyNzcyNjcuLjM2NjZjNTUwNzE1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9o YXNoL2R5bmFoYXNoLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvaGFzaC9keW5haGFzaC5jCkBA IC04OCw2ICs4OCw3IEBACiAjaW5jbHVkZSAiYWNjZXNzL3hhY3QuaCIKICNpbmNsdWRlICJjb21t b24vaGFzaGZuLmgiCiAjaW5jbHVkZSAicG9ydC9wZ19iaXR1dGlscy5oIgorI2luY2x1ZGUgInBv cnQvYXRvbWljcy5oIgogI2luY2x1ZGUgInN0b3JhZ2Uvc2htZW0uaCIKICNpbmNsdWRlICJzdG9y YWdlL3NwaW4uaCIKICNpbmNsdWRlICJ1dGlscy9keW5haGFzaC5oIgpAQCAtMTIzLDYgKzEyNCwx OCBAQCB0eXBlZGVmIEhBU0hFTEVNRU5UICpIQVNIQlVDS0VUOwogLyogQSBoYXNoIHNlZ21lbnQg aXMgYW4gYXJyYXkgb2YgYnVja2V0IGhlYWRlcnMgKi8KIHR5cGVkZWYgSEFTSEJVQ0tFVCAqSEFT SFNFR01FTlQ7CiAKKyNpZiBTSVpFT0ZfTE9ORyA9PSA4Cit0eXBlZGVmIHBnX2F0b21pY191aW50 NjQgQ291bnQ7CisjZGVmaW5lIGNvdW50X2F0b21pY19pbmMoeCkJcGdfYXRvbWljX2ZldGNoX2Fk ZF91NjQoKHgpLCAxKQorI2RlZmluZSBjb3VudF9hdG9taWNfZGVjKHgpCXBnX2F0b21pY19mZXRj aF9zdWJfdTY0KCh4KSwgMSkKKyNkZWZpbmUgTUFYX05FTlRSSUVTCSgodWludDY0KVBHX0lOVDY0 X01BWCkKKyNlbHNlCit0eXBlZGVmIHBnX2F0b21pY191aW50MzIgQ291bnQ7CisjZGVmaW5lIGNv dW50X2F0b21pY19pbmMoeCkJcGdfYXRvbWljX2ZldGNoX2FkZF91MzIoKHgpLCAxKQorI2RlZmlu ZSBjb3VudF9hdG9taWNfZGVjKHgpCXBnX2F0b21pY19mZXRjaF9zdWJfdTMyKCh4KSwgMSkKKyNk ZWZpbmUgTUFYX05FTlRSSUVTCSgodWludDMyKVBHX0lOVDMyX01BWCkKKyNlbmRpZgorCiAvKgog ICogUGVyLWZyZWVsaXN0IGRhdGEuCiAgKgpAQCAtMTQzLDcgKzE1Niw3IEBAIHR5cGVkZWYgSEFT SEJVQ0tFVCAqSEFTSFNFR01FTlQ7CiB0eXBlZGVmIHN0cnVjdAogewogCXNsb2NrX3QJCW11dGV4 OwkJCS8qIHNwaW5sb2NrIGZvciB0aGlzIGZyZWVsaXN0ICovCi0JbG9uZwkJbmVudHJpZXM7CQkv KiBudW1iZXIgb2YgZW50cmllcyBpbiBhc3NvY2lhdGVkIGJ1Y2tldHMgKi8KKwlDb3VudAkJbmVu dHJpZXM7CQkvKiBudW1iZXIgb2YgZW50cmllcyBpbiBhc3NvY2lhdGVkIGJ1Y2tldHMgKi8KIAlI QVNIRUxFTUVOVCAqZnJlZUxpc3Q7CQkvKiBjaGFpbiBvZiBmcmVlIGVsZW1lbnRzICovCiB9IEZy ZWVMaXN0RGF0YTsKIApAQCAtMjk3LDYgKzMxMCw1NCBAQCBzdHJpbmdfY29tcGFyZShjb25zdCBj aGFyICprZXkxLCBjb25zdCBjaGFyICprZXkyLCBTaXplIGtleXNpemUpCiAJcmV0dXJuIHN0cm5j bXAoa2V5MSwga2V5Miwga2V5c2l6ZSAtIDEpOwogfQogCisvKgorICogRnJlZSBsaXN0IHJvdXRp bmVzCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorZnJlZV9saXN0X2xpbmtfZW50cnkoSEFTSEhE UiAqaGN0bCwgSEFTSEJVQ0tFVCBjdXJyQnVja2V0LCBpbnQgZnJlZWxpc3RfaWR4KQoreworCUZy ZWVMaXN0RGF0YSAqbGlzdCA9ICZoY3RsLT5mcmVlTGlzdFtmcmVlbGlzdF9pZHhdOworCisJaWYg KElTX1BBUlRJVElPTkVEKGhjdGwpKQorCXsKKwkJU3BpbkxvY2tBY3F1aXJlKCZsaXN0LT5tdXRl eCk7CisJCWN1cnJCdWNrZXQtPmxpbmsgPSBsaXN0LT5mcmVlTGlzdDsKKwkJbGlzdC0+ZnJlZUxp c3QgPSBjdXJyQnVja2V0OworCQlTcGluTG9ja1JlbGVhc2UoJmxpc3QtPm11dGV4KTsKKwl9CisJ ZWxzZQorCXsKKwkJY3VyckJ1Y2tldC0+bGluayA9IGxpc3QtPmZyZWVMaXN0OworCQlsaXN0LT5m cmVlTGlzdCA9IGN1cnJCdWNrZXQ7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2ZyZWVf bGlzdF9pbmNyZW1lbnRfbmVudHJpZXMoSEFTSEhEUiAqaGN0bCwgaW50IGZyZWVsaXN0X2lkeCkK K3sKKwlGcmVlTGlzdERhdGEgKmxpc3QgPSAmaGN0bC0+ZnJlZUxpc3RbZnJlZWxpc3RfaWR4XTsK KworCS8qIENoZWNrIGZvciBvdmVyZmxvdyAqLworCUFzc2VydChoY3RsLT5mcmVlTGlzdFtmcmVl bGlzdF9pZHhdLm5lbnRyaWVzLnZhbHVlIDwgTUFYX05FTlRSSUVTKTsKKworCWlmIChJU19QQVJU SVRJT05FRChoY3RsKSkKKwkJY291bnRfYXRvbWljX2luYygmbGlzdC0+bmVudHJpZXMpOworCWVs c2UKKwkJbGlzdC0+bmVudHJpZXMudmFsdWUrKzsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitm cmVlX2xpc3RfZGVjcmVtZW50X25lbnRyaWVzKEhBU0hIRFIgKmhjdGwsIGludCBmcmVlbGlzdF9p ZHgpCit7CisJRnJlZUxpc3REYXRhICpsaXN0ID0gJmhjdGwtPmZyZWVMaXN0W2ZyZWVsaXN0X2lk eF07CisKKwlpZiAoSVNfUEFSVElUSU9ORUQoaGN0bCkpCisJCWNvdW50X2F0b21pY19kZWMoJmxp c3QtPm5lbnRyaWVzKTsKKwllbHNlCisJCWxpc3QtPm5lbnRyaWVzLnZhbHVlLS07CisJLyogQ2hl Y2sgZm9yIG92ZXJmbG93ICovCisJQXNzZXJ0KGhjdGwtPmZyZWVMaXN0W2ZyZWVsaXN0X2lkeF0u bmVudHJpZXMudmFsdWUgPCBNQVhfTkVOVFJJRVMpOworfQogCiAvKioqKioqKioqKioqKioqKioq KioqKioqKiogQ1JFQVRFIFJPVVRJTkVTICoqKioqKioqKioqKioqKioqKioqKiovCiAKQEAgLTk1 Niw3ICsxMDE3LDcgQEAgaGFzaF9zZWFyY2hfd2l0aF9oYXNoX3ZhbHVlKEhUQUIgKmhhc2hwLAog CQkgKiBvcmRlciBvZiB0aGVzZSB0ZXN0cyBpcyB0byB0cnkgdG8gY2hlY2sgY2hlYXBlciBjb25k aXRpb25zIGZpcnN0LgogCQkgKi8KIAkJaWYgKCFJU19QQVJUSVRJT05FRChoY3RsKSAmJiAhaGFz aHAtPmZyb3plbiAmJgotCQkJaGN0bC0+ZnJlZUxpc3RbMF0ubmVudHJpZXMgLyAobG9uZykgKGhj dGwtPm1heF9idWNrZXQgKyAxKSA+PSBoY3RsLT5mZmFjdG9yICYmCisJCQloY3RsLT5mcmVlTGlz dFswXS5uZW50cmllcy52YWx1ZSAvIChsb25nKSAoaGN0bC0+bWF4X2J1Y2tldCArIDEpID49IGhj dGwtPmZmYWN0b3IgJiYKIAkJCSFoYXNfc2VxX3NjYW5zKGhhc2hwKSkKIAkJCSh2b2lkKSBleHBh bmRfdGFibGUoaGFzaHApOwogCX0KQEAgLTEwMTIsMjMgKzEwNzMsMTQgQEAgaGFzaF9zZWFyY2hf d2l0aF9oYXNoX3ZhbHVlKEhUQUIgKmhhc2hwLAogCQljYXNlIEhBU0hfUkVNT1ZFOgogCQkJaWYg KGN1cnJCdWNrZXQgIT0gTlVMTCkKIAkJCXsKLQkJCQkvKiBpZiBwYXJ0aXRpb25lZCwgbXVzdCBs b2NrIHRvIHRvdWNoIG5lbnRyaWVzIGFuZCBmcmVlTGlzdCAqLwotCQkJCWlmIChJU19QQVJUSVRJ T05FRChoY3RsKSkKLQkJCQkJU3BpbkxvY2tBY3F1aXJlKCYoaGN0bC0+ZnJlZUxpc3RbZnJlZWxp c3RfaWR4XS5tdXRleCkpOwotCiAJCQkJLyogZGVsZXRlIHRoZSByZWNvcmQgZnJvbSB0aGUgYXBw cm9wcmlhdGUgbmVudHJpZXMgY291bnRlci4gKi8KLQkJCQlBc3NlcnQoaGN0bC0+ZnJlZUxpc3Rb ZnJlZWxpc3RfaWR4XS5uZW50cmllcyA+IDApOwotCQkJCWhjdGwtPmZyZWVMaXN0W2ZyZWVsaXN0 X2lkeF0ubmVudHJpZXMtLTsKKwkJCQlmcmVlX2xpc3RfZGVjcmVtZW50X25lbnRyaWVzKGhjdGws IGZyZWVsaXN0X2lkeCk7CiAKIAkJCQkvKiByZW1vdmUgcmVjb3JkIGZyb20gaGFzaCBidWNrZXQn cyBjaGFpbi4gKi8KIAkJCQkqcHJldkJ1Y2tldFB0ciA9IGN1cnJCdWNrZXQtPmxpbms7CiAKIAkJ CQkvKiBhZGQgdGhlIHJlY29yZCB0byB0aGUgYXBwcm9wcmlhdGUgZnJlZWxpc3QuICovCi0JCQkJ Y3VyckJ1Y2tldC0+bGluayA9IGhjdGwtPmZyZWVMaXN0W2ZyZWVsaXN0X2lkeF0uZnJlZUxpc3Q7 Ci0JCQkJaGN0bC0+ZnJlZUxpc3RbZnJlZWxpc3RfaWR4XS5mcmVlTGlzdCA9IGN1cnJCdWNrZXQ7 Ci0KLQkJCQlpZiAoSVNfUEFSVElUSU9ORUQoaGN0bCkpCi0JCQkJCVNwaW5Mb2NrUmVsZWFzZSgm aGN0bC0+ZnJlZUxpc3RbZnJlZWxpc3RfaWR4XS5tdXRleCk7CisJCQkJZnJlZV9saXN0X2xpbmtf ZW50cnkoaGN0bCwgY3VyckJ1Y2tldCwgZnJlZWxpc3RfaWR4KTsKIAogCQkJCS8qCiAJCQkJICog YmV0dGVyIGhvcGUgdGhlIGNhbGxlciBpcyBzeW5jaHJvbml6aW5nIGFjY2VzcyB0byB0aGlzCkBA IC0xMDcwLDYgKzExMjIsNyBAQCBoYXNoX3NlYXJjaF93aXRoX2hhc2hfdmFsdWUoSFRBQiAqaGFz aHAsCiAJCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9PVVRfT0ZfTUVNT1JZKSwKIAkJCQkJCQkgZXJy bXNnKCJvdXQgb2YgbWVtb3J5IikpKTsKIAkJCX0KKwkJCWZyZWVfbGlzdF9pbmNyZW1lbnRfbmVu dHJpZXMoaGN0bCwgZnJlZWxpc3RfaWR4KTsKIAogCQkJLyogbGluayBpbnRvIGhhc2hidWNrZXQg Y2hhaW4gKi8KIAkJCSpwcmV2QnVja2V0UHRyID0gY3VyckJ1Y2tldDsKQEAgLTExMjAsNiArMTE3 Myw3IEBAIGhhc2hfdXBkYXRlX2hhc2hfa2V5KEhUQUIgKmhhc2hwLAogewogCUhBU0hFTEVNRU5U ICpleGlzdGluZ0VsZW1lbnQgPSBFTEVNRU5UX0ZST01fS0VZKGV4aXN0aW5nRW50cnkpOwogCUhB U0hIRFIgICAgKmhjdGwgPSBoYXNocC0+aGN0bDsKKwl1aW50MzIJCW9sZGhhc2h2YWx1ZTsKIAl1 aW50MzIJCW5ld2hhc2h2YWx1ZTsKIAlTaXplCQlrZXlzaXplOwogCXVpbnQzMgkJYnVja2V0OwpA QCAtMTE3Myw2ICsxMjI3LDcgQEAgaGFzaF91cGRhdGVfaGFzaF9rZXkoSFRBQiAqaGFzaHAsCiAJ CQkgaGFzaHAtPnRhYm5hbWUpOwogCiAJb2xkUHJldlB0ciA9IHByZXZCdWNrZXRQdHI7CisJb2xk aGFzaHZhbHVlID0gZXhpc3RpbmdFbGVtZW50LT5oYXNodmFsdWU7CiAKIAkvKgogCSAqIE5vdyBw ZXJmb3JtIHRoZSBlcXVpdmFsZW50IG9mIGEgSEFTSF9FTlRFUiBvcGVyYXRpb24gdG8gbG9jYXRl IHRoZSBoYXNoCkBAIC0xMjI2LDEyICsxMjgxLDIxIEBAIGhhc2hfdXBkYXRlX2hhc2hfa2V5KEhU QUIgKmhhc2hwLAogCSAqLwogCWlmIChidWNrZXQgIT0gbmV3YnVja2V0KQogCXsKKwkJaW50CQkJ b2xkX2ZyZWVsaXN0X2lkeCA9IEZSRUVMSVNUX0lEWChoY3RsLCBvbGRoYXNodmFsdWUpOworCQlp bnQJCQluZXdfZnJlZWxpc3RfaWR4ID0gRlJFRUxJU1RfSURYKGhjdGwsIG5ld2hhc2h2YWx1ZSk7 CisKIAkJLyogT0sgdG8gcmVtb3ZlIHJlY29yZCBmcm9tIG9sZCBoYXNoIGJ1Y2tldCdzIGNoYWlu LiAqLwogCQkqb2xkUHJldlB0ciA9IGN1cnJCdWNrZXQtPmxpbms7CiAKIAkJLyogbGluayBpbnRv IG5ldyBoYXNoYnVja2V0IGNoYWluICovCiAJCSpwcmV2QnVja2V0UHRyID0gY3VyckJ1Y2tldDsK IAkJY3VyckJ1Y2tldC0+bGluayA9IE5VTEw7CisKKwkJaWYgKG9sZF9mcmVlbGlzdF9pZHggIT0g bmV3X2ZyZWVsaXN0X2lkeCkKKwkJeworCQkJZnJlZV9saXN0X2RlY3JlbWVudF9uZW50cmllcyho Y3RsLCBvbGRfZnJlZWxpc3RfaWR4KTsKKwkJCWZyZWVfbGlzdF9pbmNyZW1lbnRfbmVudHJpZXMo aGN0bCwgbmV3X2ZyZWVsaXN0X2lkeCk7CisJCX0KIAl9CiAKIAkvKiBjb3B5IG5ldyBrZXkgaW50 byByZWNvcmQgKi8KQEAgLTEyNDMsNiArMTMwNywxOTMgQEAgaGFzaF91cGRhdGVfaGFzaF9rZXko SFRBQiAqaGFzaHAsCiAJcmV0dXJuIHRydWU7CiB9CiAKKy8qCisgKiBoYXNoX2luc2VydF93aXRo X2hhc2hfbm9jaGVjayAtIGluc2VydHMgbmV3IGVudHJ5IGludG8gYnVja2V0IHdpdGhvdXQKKyAq IGNoZWNraW5nIGZvciBkdXBsaWNhdGVzLgorICoKKyAqIENhbGxlciBzaG91bGQgYmUgc3VyZSB0 aGVyZSBpcyBubyBjb25mbGljdGluZyBlbnRyeS4KKyAqCisgKiBDYWxsZXIgbWF5IHBhc3MgcG9p bnRlciB0byBvbGQgZW50cnkgYWNxdWlyZWQgd2l0aCBoYXNoX2RlbGV0ZV9za2lwX2ZyZWVsaXN0 LgorICogSW4gdGhpcyBjYXNlIGVudHJ5IHdpbGwgYmUgcmV1c2VkIGFuZCByZXR1cm5lZCBhcyBh IG5ldy4KKyAqLwordm9pZCAqCitoYXNoX2luc2VydF93aXRoX2hhc2hfbm9jaGVjayhIVEFCICpo YXNocCwKKwkJCQkJCQkgIGNvbnN0IHZvaWQgKmtleVB0ciwKKwkJCQkJCQkgIHVpbnQzMiBoYXNo dmFsdWUsCisJCQkJCQkJICB2b2lkICpvbGRlbnRyeSkKK3sKKwlIQVNISERSICAgICpoY3RsID0g aGFzaHAtPmhjdGw7CisJaW50CQkJZnJlZWxpc3RfaWR4ID0gRlJFRUxJU1RfSURYKGhjdGwsIGhh c2h2YWx1ZSk7CisJdWludDMyCQlidWNrZXQ7CisJbG9uZwkJc2VnbWVudF9udW07CisJbG9uZwkJ c2VnbWVudF9uZHg7CisJSEFTSFNFR01FTlQgc2VncDsKKwlIQVNIQlVDS0VUCWN1cnJCdWNrZXQ7 CisJSEFTSEJVQ0tFVCAqcHJldkJ1Y2tldFB0cjsKKworI2lmIEhBU0hfU1RBVElTVElDUworCWhh c2hfYWNjZXNzZXMrKzsKKwloY3RsLT5hY2Nlc3NlcysrOworI2VuZGlmCisKKwkvKiBkaXNhbGxv dyB1cGRhdGVzIGlmIGZyb3plbiAqLworCWlmIChoYXNocC0+ZnJvemVuKQorCQllbG9nKEVSUk9S LCAiY2Fubm90IHVwZGF0ZSBpbiBmcm96ZW4gaGFzaHRhYmxlIFwiJXNcIiIsCisJCQkgaGFzaHAt PnRhYm5hbWUpOworCisJaWYgKCFJU19QQVJUSVRJT05FRChoY3RsKSAmJgorCQloY3RsLT5mcmVl TGlzdFswXS5uZW50cmllcy52YWx1ZSA+IChsb25nKSBoY3RsLT5tYXhfYnVja2V0ICYmCisJCSFo YXNfc2VxX3NjYW5zKGhhc2hwKSkKKwkJKHZvaWQpIGV4cGFuZF90YWJsZShoYXNocCk7CisKKwkv KgorCSAqIExvb2t1cCB0aGUgZXhpc3RpbmcgZWxlbWVudCB1c2luZyBpdHMgc2F2ZWQgaGFzaCB2 YWx1ZS4gIFdlIG5lZWQgdG8gZG8KKwkgKiB0aGlzIHRvIGJlIGFibGUgdG8gdW5saW5rIGl0IGZy b20gaXRzIGhhc2ggY2hhaW4sIGJ1dCBhcyBhIHNpZGUgYmVuZWZpdAorCSAqIHdlIGNhbiB2ZXJp ZnkgdGhlIHZhbGlkaXR5IG9mIHRoZSBwYXNzZWQgZXhpc3RpbmdFbnRyeSBwb2ludGVyLgorCSAq LworCWJ1Y2tldCA9IGNhbGNfYnVja2V0KGhjdGwsIGhhc2h2YWx1ZSk7CisKKwlzZWdtZW50X251 bSA9IGJ1Y2tldCA+PiBoYXNocC0+c3NoaWZ0OworCXNlZ21lbnRfbmR4ID0gTU9EKGJ1Y2tldCwg aGFzaHAtPnNzaXplKTsKKworCXNlZ3AgPSBoYXNocC0+ZGlyW3NlZ21lbnRfbnVtXTsKKworCWlm IChzZWdwID09IE5VTEwpCisJCWhhc2hfY29ycnVwdGVkKGhhc2hwKTsKKworCXByZXZCdWNrZXRQ dHIgPSAmc2VncFtzZWdtZW50X25keF07CisKKwlpZiAob2xkZW50cnkgIT0gTlVMTCkKKwkJY3Vy ckJ1Y2tldCA9IEVMRU1FTlRfRlJPTV9LRVkob2xkZW50cnkpOworCWVsc2UKKwkJY3VyckJ1Y2tl dCA9IGdldF9oYXNoX2VudHJ5KGhhc2hwLCBmcmVlbGlzdF9pZHgpOworCWZyZWVfbGlzdF9pbmNy ZW1lbnRfbmVudHJpZXMoaGN0bCwgZnJlZWxpc3RfaWR4KTsKKworCWlmIChjdXJyQnVja2V0ID09 IE5VTEwpCisJeworCQkvKiByZXBvcnQgYSBnZW5lcmljIG1lc3NhZ2UgKi8KKwkJaWYgKGhhc2hw LT5pc3NoYXJlZCkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfT1VU X09GX01FTU9SWSksCisJCQkJCSBlcnJtc2coIm91dCBvZiBzaGFyZWQgbWVtb3J5IikpKTsKKwkJ ZWxzZQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9PVVRfT0ZfTUVN T1JZKSwKKwkJCQkJIGVycm1zZygib3V0IG9mIG1lbW9yeSIpKSk7CisJfQorCisJLyogY29weSBr ZXkgaW50byByZWNvcmQgKi8KKwljdXJyQnVja2V0LT5oYXNodmFsdWUgPSBoYXNodmFsdWU7CisJ Y3VyckJ1Y2tldC0+bGluayA9ICpwcmV2QnVja2V0UHRyOworCWhhc2hwLT5rZXljb3B5KEVMRU1F TlRLRVkoY3VyckJ1Y2tldCksIGtleVB0ciwgaGFzaHAtPmtleXNpemUpOworCisJKnByZXZCdWNr ZXRQdHIgPSBjdXJyQnVja2V0OworCisJcmV0dXJuICh2b2lkICopIEVMRU1FTlRLRVkoY3VyckJ1 Y2tldCk7Cit9CisKKy8qCisgKiBoYXNoX2RlbGV0ZV9za2lwX2ZyZWVsaXN0IC0gZmluZCBhbmQg ZGVsZXRlIGVudHJ5LCBidXQgZG9uJ3QgcHV0IGl0CisgKiB0byBmcmVlIGxpc3QuCisgKgorICog VXNlZCBpbiBCdWZmZXIgTWFuYWdlciB0byByZXVzZSBlbnRyeSBmb3IgZXZpY3RlZCBidWZmZXIu CisgKgorICogUmV0dXJuZWQgZW50cnkgc2hvdWxkIGJlIGVpdGhlciByZXVzZWQgd2l0aCBoYXNo X2luc2VydF93aXRoX2hhc2hfbm9jaGVjaworICogb3IgcmV0dXJuZWQgdG8gZnJlZSBsaXN0IHdp dGggaGFzaF9yZXR1cm5fdG9fZnJlZWxpc3QuCisgKi8KK3ZvaWQgKgoraGFzaF9kZWxldGVfc2tp cF9mcmVlbGlzdChIVEFCICpoYXNocCwKKwkJCQkJCSAgY29uc3Qgdm9pZCAqa2V5UHRyLAorCQkJ CQkJICB1aW50MzIgaGFzaHZhbHVlKQoreworCUhBU0hIRFIgICAgKmhjdGwgPSBoYXNocC0+aGN0 bDsKKwlpbnQJCQlmcmVlbGlzdF9pZHggPSBGUkVFTElTVF9JRFgoaGN0bCwgaGFzaHZhbHVlKTsK KwlTaXplCQlrZXlzaXplOworCXVpbnQzMgkJYnVja2V0OworCWxvbmcJCXNlZ21lbnRfbnVtOwor CWxvbmcJCXNlZ21lbnRfbmR4OworCUhBU0hTRUdNRU5UIHNlZ3A7CisJSEFTSEJVQ0tFVAljdXJy QnVja2V0OworCUhBU0hCVUNLRVQgKnByZXZCdWNrZXRQdHI7CisJSGFzaENvbXBhcmVGdW5jIG1h dGNoOworCisjaWYgSEFTSF9TVEFUSVNUSUNTCisJaGFzaF9hY2Nlc3NlcysrOworCWhjdGwtPmFj Y2Vzc2VzKys7CisjZW5kaWYKKworCS8qCisJICogRG8gdGhlIGluaXRpYWwgbG9va3VwCisJICov CisJYnVja2V0ID0gY2FsY19idWNrZXQoaGN0bCwgaGFzaHZhbHVlKTsKKworCXNlZ21lbnRfbnVt ID0gYnVja2V0ID4+IGhhc2hwLT5zc2hpZnQ7CisJc2VnbWVudF9uZHggPSBNT0QoYnVja2V0LCBo YXNocC0+c3NpemUpOworCisJc2VncCA9IGhhc2hwLT5kaXJbc2VnbWVudF9udW1dOworCisJaWYg KHNlZ3AgPT0gTlVMTCkKKwkJaGFzaF9jb3JydXB0ZWQoaGFzaHApOworCisJcHJldkJ1Y2tldFB0 ciA9ICZzZWdwW3NlZ21lbnRfbmR4XTsKKwljdXJyQnVja2V0ID0gKnByZXZCdWNrZXRQdHI7CisK KwkvKgorCSAqIEZvbGxvdyBjb2xsaXNpb24gY2hhaW4gbG9va2luZyBmb3IgbWF0Y2hpbmcga2V5 CisJICovCisJbWF0Y2ggPSBoYXNocC0+bWF0Y2g7CQkvKiBzYXZlIG9uZSBmZXRjaCBpbiBpbm5l ciBsb29wICovCisJa2V5c2l6ZSA9IGhhc2hwLT5rZXlzaXplOwkvKiBkaXR0byAqLworCisJd2hp bGUgKGN1cnJCdWNrZXQgIT0gTlVMTCkKKwl7CisJCWlmIChjdXJyQnVja2V0LT5oYXNodmFsdWUg PT0gaGFzaHZhbHVlICYmCisJCQltYXRjaChFTEVNRU5US0VZKGN1cnJCdWNrZXQpLCBrZXlQdHIs IGtleXNpemUpID09IDApCisJCQlicmVhazsKKwkJcHJldkJ1Y2tldFB0ciA9ICYoY3VyckJ1Y2tl dC0+bGluayk7CisJCWN1cnJCdWNrZXQgPSAqcHJldkJ1Y2tldFB0cjsKKyNpZiBIQVNIX1NUQVRJ U1RJQ1MKKwkJaGFzaF9jb2xsaXNpb25zKys7CisJCWhjdGwtPmNvbGxpc2lvbnMrKzsKKyNlbmRp ZgorCX0KKworCWlmIChjdXJyQnVja2V0ID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCisJLyog ZGVsZXRlIHRoZSByZWNvcmQgZnJvbSB0aGUgYXBwcm9wcmlhdGUgbmVudHJpZXMgY291bnRlci4g Ki8KKwlmcmVlX2xpc3RfZGVjcmVtZW50X25lbnRyaWVzKGhjdGwsIGZyZWVsaXN0X2lkeCk7CisK KwkvKiByZW1vdmUgcmVjb3JkIGZyb20gaGFzaCBidWNrZXQncyBjaGFpbi4gKi8KKwkqcHJldkJ1 Y2tldFB0ciA9IGN1cnJCdWNrZXQtPmxpbms7CisKKwlyZXR1cm4gKHZvaWQgKikgRUxFTUVOVEtF WShjdXJyQnVja2V0KTsKK30KKworLyoKKyAqIGhhc2hfcmV0dXJuX3RvX2ZyZWVsaXN0IC0gcmV0 dXJuIGVudHJ5IGRlbGV0ZWQgd2l0aAorICogaGFzaF9kZWxldGVfc2tpcF9mcmVlbGlzdCB0byBm cmVlIGxpc3QuCisgKgorICogVXNlZCBpbiBCdWZmZXIgTWFuYWdlciBpbiBjYXNlIG5ldyBjb25m bGljdGluZyBlbnRyeSB3ZXJlIGluc2VydGVkIGJ5CisgKiBjb25jdXJyZW50IHByb2Nlc3MuCisg Ki8KK3ZvaWQKK2hhc2hfcmV0dXJuX3RvX2ZyZWVsaXN0KEhUQUIgKmhhc2hwLAorCQkJCQkJY29u c3Qgdm9pZCAqZW50cnksCisJCQkJCQl1aW50MzIgaGFzaHZhbHVlKQoreworCUhBU0hIRFIgICAg KmhjdGwgPSBoYXNocC0+aGN0bDsKKwlpbnQJCQlmcmVlbGlzdF9pZHggPSBGUkVFTElTVF9JRFgo aGN0bCwgaGFzaHZhbHVlKTsKKwlIQVNIQlVDS0VUCWN1cnJCdWNrZXQ7CisKKwlpZiAoZW50cnkg PT0gTlVMTCkKKwkJcmV0dXJuOworCisJY3VyckJ1Y2tldCA9IEVMRU1FTlRfRlJPTV9LRVkoZW50 cnkpOworCisJLyogYWRkIHRoZSByZWNvcmQgdG8gdGhlIGFwcHJvcHJpYXRlIGZyZWVsaXN0LiAq LworCWZyZWVfbGlzdF9saW5rX2VudHJ5KGhjdGwsIGN1cnJCdWNrZXQsIGZyZWVsaXN0X2lkeCk7 Cit9CisKIC8qCiAgKiBBbGxvY2F0ZSBhIG5ldyBoYXNodGFibGUgZW50cnkgaWYgcG9zc2libGU7 IHJldHVybiBOVUxMIGlmIG91dCBvZiBtZW1vcnkuCiAgKiAoT3IsIGlmIHRoZSB1bmRlcmx5aW5n IHNwYWNlIGFsbG9jYXRvciB0aHJvd3MgZXJyb3IgZm9yIG91dC1vZi1tZW1vcnksCkBAIC0xMzA0 LDExICsxNTU1LDYgQEAgZ2V0X2hhc2hfZW50cnkoSFRBQiAqaGFzaHAsIGludCBmcmVlbGlzdF9p ZHgpCiAJCQkJCWhjdGwtPmZyZWVMaXN0W2JvcnJvd19mcm9tX2lkeF0uZnJlZUxpc3QgPSBuZXdF bGVtZW50LT5saW5rOwogCQkJCQlTcGluTG9ja1JlbGVhc2UoJihoY3RsLT5mcmVlTGlzdFtib3Jy b3dfZnJvbV9pZHhdLm11dGV4KSk7CiAKLQkJCQkJLyogY2FyZWZ1bDogY291bnQgdGhlIG5ldyBl bGVtZW50IGluIGl0cyBwcm9wZXIgZnJlZWxpc3QgKi8KLQkJCQkJU3BpbkxvY2tBY3F1aXJlKCZo Y3RsLT5mcmVlTGlzdFtmcmVlbGlzdF9pZHhdLm11dGV4KTsKLQkJCQkJaGN0bC0+ZnJlZUxpc3Rb ZnJlZWxpc3RfaWR4XS5uZW50cmllcysrOwotCQkJCQlTcGluTG9ja1JlbGVhc2UoJmhjdGwtPmZy ZWVMaXN0W2ZyZWVsaXN0X2lkeF0ubXV0ZXgpOwotCiAJCQkJCXJldHVybiBuZXdFbGVtZW50Owog CQkJCX0KIApAQCAtMTMyMCw5ICsxNTY2LDggQEAgZ2V0X2hhc2hfZW50cnkoSFRBQiAqaGFzaHAs IGludCBmcmVlbGlzdF9pZHgpCiAJCX0KIAl9CiAKLQkvKiByZW1vdmUgZW50cnkgZnJvbSBmcmVl bGlzdCwgYnVtcCBuZW50cmllcyAqLworCS8qIHJlbW92ZSBlbnRyeSBmcm9tIGZyZWVsaXN0ICov CiAJaGN0bC0+ZnJlZUxpc3RbZnJlZWxpc3RfaWR4XS5mcmVlTGlzdCA9IG5ld0VsZW1lbnQtPmxp bms7Ci0JaGN0bC0+ZnJlZUxpc3RbZnJlZWxpc3RfaWR4XS5uZW50cmllcysrOwogCiAJaWYgKElT X1BBUlRJVElPTkVEKGhjdGwpKQogCQlTcGluTG9ja1JlbGVhc2UoJmhjdGwtPmZyZWVMaXN0W2Zy ZWVsaXN0X2lkeF0ubXV0ZXgpOwpAQCAtMTMzNyw3ICsxNTgyLDcgQEAgbG9uZwogaGFzaF9nZXRf bnVtX2VudHJpZXMoSFRBQiAqaGFzaHApCiB7CiAJaW50CQkJaTsKLQlsb25nCQlzdW0gPSBoYXNo cC0+aGN0bC0+ZnJlZUxpc3RbMF0ubmVudHJpZXM7CisJbG9uZwkJc3VtID0gaGFzaHAtPmhjdGwt PmZyZWVMaXN0WzBdLm5lbnRyaWVzLnZhbHVlOwogCiAJLyoKIAkgKiBXZSBjdXJyZW50bHkgZG9u J3QgYm90aGVyIHdpdGggYWNxdWlyaW5nIHRoZSBtdXRleGVzOyBpdCdzIG9ubHkKQEAgLTEzNDcs NyArMTU5Miw3IEBAIGhhc2hfZ2V0X251bV9lbnRyaWVzKEhUQUIgKmhhc2hwKQogCWlmIChJU19Q QVJUSVRJT05FRChoYXNocC0+aGN0bCkpCiAJewogCQlmb3IgKGkgPSAxOyBpIDwgTlVNX0ZSRUVM SVNUUzsgaSsrKQotCQkJc3VtICs9IGhhc2hwLT5oY3RsLT5mcmVlTGlzdFtpXS5uZW50cmllczsK KwkJCXN1bSArPSBoYXNocC0+aGN0bC0+ZnJlZUxpc3RbaV0ubmVudHJpZXMudmFsdWU7CiAJfQog CiAJcmV0dXJuIHN1bTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmX2ludGVy bmFscy5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZfaW50ZXJuYWxzLmgKaW5kZXggMzM3N2Zh NTY3NjguLjUxYzY5OWU1ZThmIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zl9p bnRlcm5hbHMuaAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zl9pbnRlcm5hbHMuaApAQCAt MzIzLDggKzMyMywxMCBAQCBleHRlcm4gU2l6ZSBCdWZUYWJsZVNobWVtU2l6ZShpbnQgc2l6ZSk7 CiBleHRlcm4gdm9pZCBJbml0QnVmVGFibGUoaW50IHNpemUpOwogZXh0ZXJuIHVpbnQzMiBCdWZU YWJsZUhhc2hDb2RlKEJ1ZmZlclRhZyAqdGFnUHRyKTsKIGV4dGVybiBpbnQJQnVmVGFibGVMb29r dXAoQnVmZmVyVGFnICp0YWdQdHIsIHVpbnQzMiBoYXNoY29kZSk7Ci1leHRlcm4gaW50CUJ1ZlRh YmxlSW5zZXJ0KEJ1ZmZlclRhZyAqdGFnUHRyLCB1aW50MzIgaGFzaGNvZGUsIGludCBidWZfaWQp OwotZXh0ZXJuIHZvaWQgQnVmVGFibGVEZWxldGUoQnVmZmVyVGFnICp0YWdQdHIsIHVpbnQzMiBo YXNoY29kZSk7CitleHRlcm4gdm9pZCBCdWZUYWJsZUluc2VydChCdWZmZXJUYWcgKnRhZ1B0ciwg dWludDMyIGhhc2hjb2RlLCBpbnQgYnVmX2lkLAorCQkJCQkJICAgdm9pZCAqb2xkZWxlbSk7Citl eHRlcm4gdm9pZCAqQnVmVGFibGVEZWxldGUoQnVmZmVyVGFnICp0YWdQdHIsIHVpbnQzMiBoYXNo Y29kZSk7CitleHRlcm4gdm9pZCBCdWZUYWJsZUZyZWVEZWxldGVkKHZvaWQgKm9sZGVsZW0sIHVp bnQzMiBoYXNoY29kZSk7CiAKIC8qIGxvY2FsYnVmLmMgKi8KIGV4dGVybiBQcmVmZXRjaEJ1ZmZl clJlc3VsdCBQcmVmZXRjaExvY2FsQnVmZmVyKFNNZ3JSZWxhdGlvbiBzbWdyLApkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvdXRpbHMvaHNlYXJjaC5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvaHNlYXJj aC5oCmluZGV4IGYxZGViOWJlYWIwLi42NzQ5MjllYzExYiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvdXRpbHMvaHNlYXJjaC5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL2hzZWFyY2guaApAQCAt MTQ2LDQgKzE0NiwyMSBAQCBleHRlcm4gU2l6ZSBoYXNoX2dldF9zaGFyZWRfc2l6ZShIQVNIQ1RM ICppbmZvLCBpbnQgZmxhZ3MpOwogZXh0ZXJuIHZvaWQgQXRFT1hhY3RfSGFzaFRhYmxlcyhib29s IGlzQ29tbWl0KTsKIGV4dGVybiB2b2lkIEF0RU9TdWJYYWN0X0hhc2hUYWJsZXMoYm9vbCBpc0Nv bW1pdCwgaW50IG5lc3REZXB0aCk7CiAKKy8qCisgKiBCdWZmZXIgTWFuYWdlciBvcHRpbWl6YXRp b24gdXRpbGl0aWVzLgorICogVGhleSBtYWRlIHRvIGF2b2lkIHRha2luZyB0d28gcGFydGl0aW9u IGxvY2tzIHNpbXVsdGFuZW91c2x5IGFuZAorICogc2tpcCBpbnRlcnJhY3Rpb24gd2l0aCBkeW5h aGFzaCdzIGZyZWVsaXN0LgorICogVXNlIHRoZW0gY2FyZWZ1bGx5IGFuZCBvbmx5IGlmIHRoZXkg Z2l2ZXMgbWVhbmluZ2Z1bCBpbXByb3ZlbWVudC4KKyAqLworZXh0ZXJuIHZvaWQgKmhhc2hfaW5z ZXJ0X3dpdGhfaGFzaF9ub2NoZWNrKEhUQUIgKmhhc2hwLAorCQkJCQkJCQkJCSAgIGNvbnN0IHZv aWQgKmtleVB0ciwKKwkJCQkJCQkJCQkgICB1aW50MzIgaGFzaHZhbHVlLAorCQkJCQkJCQkJCSAg IHZvaWQgKm9sZGVudHJ5KTsKK2V4dGVybiB2b2lkICpoYXNoX2RlbGV0ZV9za2lwX2ZyZWVsaXN0 KEhUQUIgKmhhc2hwLAorCQkJCQkJCQkJICAgY29uc3Qgdm9pZCAqa2V5UHRyLAorCQkJCQkJCQkJ ICAgdWludDMyIGhhc2h2YWx1ZSk7CitleHRlcm4gdm9pZCBoYXNoX3JldHVybl90b19mcmVlbGlz dChIVEFCICpoYXNocCwKKwkJCQkJCQkJCWNvbnN0IHZvaWQgKmVudHJ5LAorCQkJCQkJCQkJdWlu dDMyIGhhc2h2YWx1ZSk7CisKICNlbmRpZgkJCQkJCQkvKiBIU0VBUkNIX0ggKi8KLS0gCjIuMzQu MQoK --=-O0z5lIRpAhdiJg4dRWca Content-Disposition: attachment; filename="v1-0001-bufmgr-do-not-acquire-two-partition-lo.patch" Content-Type: text/x-patch; name="v1-0001-bufmgr-do-not-acquire-two-partition-lo.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbSBjMzM4ODcwNDQzMjg1M2Q5YzRjZGY2ZTc3YjQ0MzYwYjU3MmM2ODc4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBZdXJhIFNva29sb3YgPHkuc29rb2xvdkBwb3N0Z3Jlc3Byby5y dT4KRGF0ZTogV2VkLCAyMiBTZXAgMjAyMSAxMzoxMDozNyArMDMwMApTdWJqZWN0OiBbUEFUQ0gg djFdIGJ1Zm1ncjogZG8gbm90IGFjcXVpcmUgdHdvIHBhcnRpdGlvbiBsb2Nrcy4KCkFjcXVpcmlu ZyB0d28gcGFydGl0aW9uIGxvY2tzIGxlYWRzIHRvIGNvbXBsZXggZGVwZW5kZW5jeSBjaGFpbiB0 aGF0IGh1cnRzCmF0IGhpZ2ggY29uY3VycmVuY3kgbGV2ZWwuCgpUaGVyZSBpcyBubyBuZWVkIHRv IGhvbGQgYm90aCBsb2NrIHNpbXVsdGFuZW91c2x5LiBCdWZmZXIgaXMgcGlubmVkIHNvCm90aGVy IHByb2Nlc3NlcyBjb3VsZCBub3Qgc2VsZWN0IGl0IGZvciBldmljdGlvbi4gSWYgdGFnIGlzIGNs ZWFyZWQgYW5kCmJ1ZmZlciByZW1vdmVkIGZyb20gb2xkIHBhcnRpdGlvbiBvdGhlciBwcm9jZXNz ZXMgd2lsbCBub3QgZmluZCBpdC4KVGhlcmVmb3JlIGl0IGlzIHNhZmUgdG8gcmVsZWFzZSBvbGQg cGFydGl0aW9uIGxvY2sgYmVmb3JlIGFjcXVpcmluZwpuZXcgcGFydGl0aW9uIGxvY2suCgpUaGlz IGNoYW5nZSByZXF1aXJlcyB0byBtYW51YWxseSByZXR1cm4gQnVmZmVyRGVzYyB0byBmcmVlIGxp c3QuCgpBbHNvIGluc2VydGlvbiBhbmQgZGVsZXRpb24gdG8gZHluYWhhc2ggaXMgb3B0aW1pemVk IGJ5IGF2b2lkaW5nCnVubmVjZXNzYXJ5IGZyZWUgbGlzdCBtYW5pcHVsYXRpb25zIGluIGNvbW1v biBjYXNlICh3aGVuIGJ1ZmZlciBpcwpyZXVzZWQpCgpBbHNvIHNtYWxsIGFuZCBuZXZlciB0cmln Z2VyZWQgYnVnIGluIGhhc2hfdXBkYXRlX2hhc2hfa2V5IGlzIGZpeGVkLgotLS0KIHNyYy9iYWNr ZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zl90YWJsZS5jIHwgIDU0ICsrKy0tCiBzcmMvYmFja2VuZC9z dG9yYWdlL2J1ZmZlci9idWZtZ3IuYyAgICB8IDE5MCArKysrKysrKy0tLS0tLS0tCiBzcmMvYmFj a2VuZC91dGlscy9oYXNoL2R5bmFoYXNoLmMgICAgICB8IDI4OSArKysrKysrKysrKysrKysrKysr KysrKy0tCiBzcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zl9pbnRlcm5hbHMuaCAgICB8ICAgNiArLQog c3JjL2luY2x1ZGUvdXRpbHMvaHNlYXJjaC5oICAgICAgICAgICAgfCAgMTcgKysKIDUgZmlsZXMg Y2hhbmdlZCwgNDEwIGluc2VydGlvbnMoKyksIDE0NiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZfdGFibGUuYyBiL3NyYy9iYWNrZW5kL3N0 b3JhZ2UvYnVmZmVyL2J1Zl90YWJsZS5jCmluZGV4IGNhYTAzYWUxMjMzLi4wNWUxZGM5ZGQyOSAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmX3RhYmxlLmMKKysrIGIv c3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmX3RhYmxlLmMKQEAgLTEwNywzNiArMTA3LDI5 IEBAIEJ1ZlRhYmxlTG9va3VwKEJ1ZmZlclRhZyAqdGFnUHRyLCB1aW50MzIgaGFzaGNvZGUpCiAK IC8qCiAgKiBCdWZUYWJsZUluc2VydAotICoJCUluc2VydCBhIGhhc2h0YWJsZSBlbnRyeSBmb3Ig Z2l2ZW4gdGFnIGFuZCBidWZmZXIgSUQsCi0gKgkJdW5sZXNzIGFuIGVudHJ5IGFscmVhZHkgZXhp c3RzIGZvciB0aGF0IHRhZwotICoKLSAqIFJldHVybnMgLTEgb24gc3VjY2Vzc2Z1bCBpbnNlcnRp b24uICBJZiBhIGNvbmZsaWN0aW5nIGVudHJ5IGV4aXN0cwotICogYWxyZWFkeSwgcmV0dXJucyB0 aGUgYnVmZmVyIElEIGluIHRoYXQgZW50cnkuCisgKgkJSW5zZXJ0IGEgaGFzaHRhYmxlIGVudHJ5 IGZvciBnaXZlbiB0YWcgYW5kIGJ1ZmZlciBJRC4KKyAqCQlDYWxsZXIgc2hvdWxkIGJlIHN1cmUg dGhlcmUgaXMgbm8gY29uZmxpY3RpbmcgZW50cnkuCiAgKgogICogQ2FsbGVyIG11c3QgaG9sZCBl eGNsdXNpdmUgbG9jayBvbiBCdWZNYXBwaW5nTG9jayBmb3IgdGFnJ3MgcGFydGl0aW9uCisgKiBh bmQgY2FsbCBCdWZUYWJsZUxvb2t1cCB0byBjaGVjayBmb3IgY29uZmxpY3RpbmcgZW50cnkuCisg KgorICogSWYgb2xkZWxlbSBpcyBwYXNzZWQgaXQgaXMgcmV1c2VkLgogICovCi1pbnQKLUJ1ZlRh YmxlSW5zZXJ0KEJ1ZmZlclRhZyAqdGFnUHRyLCB1aW50MzIgaGFzaGNvZGUsIGludCBidWZfaWQp Cit2b2lkCitCdWZUYWJsZUluc2VydChCdWZmZXJUYWcgKnRhZ1B0ciwgdWludDMyIGhhc2hjb2Rl LCBpbnQgYnVmX2lkLCB2b2lkICpvbGRlbGVtKQogewogCUJ1ZmZlckxvb2t1cEVudCAqcmVzdWx0 OwotCWJvb2wJCWZvdW5kOwogCiAJQXNzZXJ0KGJ1Zl9pZCA+PSAwKTsJCS8qIC0xIGlzIHJlc2Vy dmVkIGZvciBub3QtaW4tdGFibGUgKi8KIAlBc3NlcnQodGFnUHRyLT5ibG9ja051bSAhPSBQX05F Vyk7CS8qIGludmFsaWQgdGFnICovCiAKIAlyZXN1bHQgPSAoQnVmZmVyTG9va3VwRW50ICopCi0J CWhhc2hfc2VhcmNoX3dpdGhfaGFzaF92YWx1ZShTaGFyZWRCdWZIYXNoLAotCQkJCQkJCQkJKHZv aWQgKikgdGFnUHRyLAotCQkJCQkJCQkJaGFzaGNvZGUsCi0JCQkJCQkJCQlIQVNIX0VOVEVSLAot CQkJCQkJCQkJJmZvdW5kKTsKLQotCWlmIChmb3VuZCkJCQkJCS8qIGZvdW5kIHNvbWV0aGluZyBh bHJlYWR5IGluIHRoZSB0YWJsZSAqLwotCQlyZXR1cm4gcmVzdWx0LT5pZDsKKwkJaGFzaF9pbnNl cnRfd2l0aF9oYXNoX25vY2hlY2soU2hhcmVkQnVmSGFzaCwKKwkJCQkJCQkJCSAgKHZvaWQgKikg dGFnUHRyLAorCQkJCQkJCQkJICBoYXNoY29kZSwKKwkJCQkJCQkJCSAgb2xkZWxlbSk7CiAKIAly ZXN1bHQtPmlkID0gYnVmX2lkOwotCi0JcmV0dXJuIC0xOwogfQogCiAvKgpAQCAtMTQ0LDE5ICsx MzcsMzIgQEAgQnVmVGFibGVJbnNlcnQoQnVmZmVyVGFnICp0YWdQdHIsIHVpbnQzMiBoYXNoY29k ZSwgaW50IGJ1Zl9pZCkKICAqCQlEZWxldGUgdGhlIGhhc2h0YWJsZSBlbnRyeSBmb3IgZ2l2ZW4g dGFnICh3aGljaCBtdXN0IGV4aXN0KQogICoKICAqIENhbGxlciBtdXN0IGhvbGQgZXhjbHVzaXZl IGxvY2sgb24gQnVmTWFwcGluZ0xvY2sgZm9yIHRhZydzIHBhcnRpdGlvbgorICoKKyAqIFJldHVy bnMgcG9pbnRlciB0byBpbnRlcm5hbCBoYXNodGFibGUgZW50cnkgdGhhdCBzaG91bGQgYmUgcGFz c2VkIGVpdGhlcgorICogdG8gQnVmVGFibGVJbnNlcnQgb3IgQnVmVGFibGVGcmVlRGVsZXRlZC4K ICAqLwotdm9pZAordm9pZCAqCiBCdWZUYWJsZURlbGV0ZShCdWZmZXJUYWcgKnRhZ1B0ciwgdWlu dDMyIGhhc2hjb2RlKQogewogCUJ1ZmZlckxvb2t1cEVudCAqcmVzdWx0OwogCiAJcmVzdWx0ID0g KEJ1ZmZlckxvb2t1cEVudCAqKQotCQloYXNoX3NlYXJjaF93aXRoX2hhc2hfdmFsdWUoU2hhcmVk QnVmSGFzaCwKLQkJCQkJCQkJCSh2b2lkICopIHRhZ1B0ciwKLQkJCQkJCQkJCWhhc2hjb2RlLAot CQkJCQkJCQkJSEFTSF9SRU1PVkUsCi0JCQkJCQkJCQlOVUxMKTsKKwkJaGFzaF9kZWxldGVfc2tp cF9mcmVlbGlzdChTaGFyZWRCdWZIYXNoLAorCQkJCQkJCQkgICh2b2lkICopIHRhZ1B0ciwKKwkJ CQkJCQkJICBoYXNoY29kZSk7CiAKIAlpZiAoIXJlc3VsdCkJCQkJLyogc2hvdWxkbid0IGhhcHBl biAqLwogCQllbG9nKEVSUk9SLCAic2hhcmVkIGJ1ZmZlciBoYXNoIHRhYmxlIGNvcnJ1cHRlZCIp OworCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIEJ1ZlRhYmxlRnJlZURlbGV0ZWQKKyAq CQlSZXR1cm5zIGRlbGV0ZWQgaGFzaHRhYmxlIGVudHJ5IHRvIGZyZWVsaXN0LgorICovCit2b2lk CitCdWZUYWJsZUZyZWVEZWxldGVkKHZvaWQgKm9sZGVsZW0sIHVpbnQzMiBoYXNoY29kZSkKK3sK KwloYXNoX3JldHVybl90b19mcmVlbGlzdChTaGFyZWRCdWZIYXNoLCBvbGRlbGVtLCBoYXNoY29k ZSk7CiB9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYyBi L3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5jCmluZGV4IGU4OGU0ZTkxOGIwLi42 MDUzYTg3MGU2MSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdy LmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMKQEAgLTExMTQsNiAr MTExNCw3IEBAIEJ1ZmZlckFsbG9jKFNNZ3JSZWxhdGlvbiBzbWdyLCBjaGFyIHJlbHBlcnNpc3Rl bmNlLCBGb3JrTnVtYmVyIGZvcmtOdW0sCiAJQnVmZmVyRGVzYyAqYnVmOwogCWJvb2wJCXZhbGlk OwogCXVpbnQzMgkJYnVmX3N0YXRlOworCXZvaWQJICAgKm9sZEVsZW0gPSBOVUxMOwogCiAJLyog Y3JlYXRlIGEgdGFnIHNvIHdlIGNhbiBsb29rdXAgdGhlIGJ1ZmZlciAqLwogCUlOSVRfQlVGRkVS VEFHKG5ld1RhZywgc21nci0+c21ncl9ybm9kZS5ub2RlLCBmb3JrTnVtLCBibG9ja051bSk7CkBA IC0xMjg4LDkzICsxMjg5LDE2IEBAIEJ1ZmZlckFsbG9jKFNNZ3JSZWxhdGlvbiBzbWdyLCBjaGFy IHJlbHBlcnNpc3RlbmNlLCBGb3JrTnVtYmVyIGZvcmtOdW0sCiAJCQlvbGRIYXNoID0gQnVmVGFi bGVIYXNoQ29kZSgmb2xkVGFnKTsKIAkJCW9sZFBhcnRpdGlvbkxvY2sgPSBCdWZNYXBwaW5nUGFy dGl0aW9uTG9jayhvbGRIYXNoKTsKIAotCQkJLyoKLQkJCSAqIE11c3QgbG9jayB0aGUgbG93ZXIt bnVtYmVyZWQgcGFydGl0aW9uIGZpcnN0IHRvIGF2b2lkCi0JCQkgKiBkZWFkbG9ja3MuCi0JCQkg Ki8KLQkJCWlmIChvbGRQYXJ0aXRpb25Mb2NrIDwgbmV3UGFydGl0aW9uTG9jaykKLQkJCXsKLQkJ CQlMV0xvY2tBY3F1aXJlKG9sZFBhcnRpdGlvbkxvY2ssIExXX0VYQ0xVU0lWRSk7Ci0JCQkJTFdM b2NrQWNxdWlyZShuZXdQYXJ0aXRpb25Mb2NrLCBMV19FWENMVVNJVkUpOwotCQkJfQotCQkJZWxz ZSBpZiAob2xkUGFydGl0aW9uTG9jayA+IG5ld1BhcnRpdGlvbkxvY2spCi0JCQl7Ci0JCQkJTFdM b2NrQWNxdWlyZShuZXdQYXJ0aXRpb25Mb2NrLCBMV19FWENMVVNJVkUpOwotCQkJCUxXTG9ja0Fj cXVpcmUob2xkUGFydGl0aW9uTG9jaywgTFdfRVhDTFVTSVZFKTsKLQkJCX0KLQkJCWVsc2UKLQkJ CXsKLQkJCQkvKiBvbmx5IG9uZSBwYXJ0aXRpb24sIG9ubHkgb25lIGxvY2sgKi8KLQkJCQlMV0xv Y2tBY3F1aXJlKG5ld1BhcnRpdGlvbkxvY2ssIExXX0VYQ0xVU0lWRSk7Ci0JCQl9CisJCQlMV0xv Y2tBY3F1aXJlKG9sZFBhcnRpdGlvbkxvY2ssIExXX0VYQ0xVU0lWRSk7CiAJCX0KIAkJZWxzZQog CQl7Ci0JCQkvKiBpZiBpdCB3YXNuJ3QgdmFsaWQsIHdlIG5lZWQgb25seSB0aGUgbmV3IHBhcnRp dGlvbiAqLwotCQkJTFdMb2NrQWNxdWlyZShuZXdQYXJ0aXRpb25Mb2NrLCBMV19FWENMVVNJVkUp OwogCQkJLyogcmVtZW1iZXIgd2UgaGF2ZSBubyBvbGQtcGFydGl0aW9uIGxvY2sgb3IgdGFnICov CiAJCQlvbGRQYXJ0aXRpb25Mb2NrID0gTlVMTDsKIAkJCS8qIGtlZXAgdGhlIGNvbXBpbGVyIHF1 aWV0IGFib3V0IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzICovCiAJCQlvbGRIYXNoID0gMDsKIAkJ fQogCi0JCS8qCi0JCSAqIFRyeSB0byBtYWtlIGEgaGFzaHRhYmxlIGVudHJ5IGZvciB0aGUgYnVm ZmVyIHVuZGVyIGl0cyBuZXcgdGFnLgotCQkgKiBUaGlzIGNvdWxkIGZhaWwgYmVjYXVzZSB3aGls ZSB3ZSB3ZXJlIHdyaXRpbmcgc29tZW9uZSBlbHNlCi0JCSAqIGFsbG9jYXRlZCBhbm90aGVyIGJ1 ZmZlciBmb3IgdGhlIHNhbWUgYmxvY2sgd2Ugd2FudCB0byByZWFkIGluLgotCQkgKiBOb3RlIHRo YXQgd2UgaGF2ZSBub3QgeWV0IHJlbW92ZWQgdGhlIGhhc2h0YWJsZSBlbnRyeSBmb3IgdGhlIG9s ZAotCQkgKiB0YWcuCi0JCSAqLwotCQlidWZfaWQgPSBCdWZUYWJsZUluc2VydCgmbmV3VGFnLCBu ZXdIYXNoLCBidWYtPmJ1Zl9pZCk7Ci0KLQkJaWYgKGJ1Zl9pZCA+PSAwKQotCQl7Ci0JCQkvKgot CQkJICogR290IGEgY29sbGlzaW9uLiBTb21lb25lIGhhcyBhbHJlYWR5IGRvbmUgd2hhdCB3ZSB3 ZXJlIGFib3V0IHRvCi0JCQkgKiBkby4gV2UnbGwganVzdCBoYW5kbGUgdGhpcyBhcyBpZiBpdCB3 ZXJlIGZvdW5kIGluIHRoZSBidWZmZXIKLQkJCSAqIHBvb2wgaW4gdGhlIGZpcnN0IHBsYWNlLiAg Rmlyc3QsIGdpdmUgdXAgdGhlIGJ1ZmZlciB3ZSB3ZXJlCi0JCQkgKiBwbGFubmluZyB0byB1c2Uu Ci0JCQkgKi8KLQkJCVVucGluQnVmZmVyKGJ1ZiwgdHJ1ZSk7Ci0KLQkJCS8qIENhbiBnaXZlIHVw IHRoYXQgYnVmZmVyJ3MgbWFwcGluZyBwYXJ0aXRpb24gbG9jayBub3cgKi8KLQkJCWlmIChvbGRQ YXJ0aXRpb25Mb2NrICE9IE5VTEwgJiYKLQkJCQlvbGRQYXJ0aXRpb25Mb2NrICE9IG5ld1BhcnRp dGlvbkxvY2spCi0JCQkJTFdMb2NrUmVsZWFzZShvbGRQYXJ0aXRpb25Mb2NrKTsKLQotCQkJLyog cmVtYWluaW5nIGNvZGUgc2hvdWxkIG1hdGNoIGNvZGUgYXQgdG9wIG9mIHJvdXRpbmUgKi8KLQot CQkJYnVmID0gR2V0QnVmZmVyRGVzY3JpcHRvcihidWZfaWQpOwotCi0JCQl2YWxpZCA9IFBpbkJ1 ZmZlcihidWYsIHN0cmF0ZWd5KTsKLQotCQkJLyogQ2FuIHJlbGVhc2UgdGhlIG1hcHBpbmcgbG9j ayBhcyBzb29uIGFzIHdlJ3ZlIHBpbm5lZCBpdCAqLwotCQkJTFdMb2NrUmVsZWFzZShuZXdQYXJ0 aXRpb25Mb2NrKTsKLQotCQkJKmZvdW5kUHRyID0gdHJ1ZTsKLQotCQkJaWYgKCF2YWxpZCkKLQkJ CXsKLQkJCQkvKgotCQkJCSAqIFdlIGNhbiBvbmx5IGdldCBoZXJlIGlmIChhKSBzb21lb25lIGVs c2UgaXMgc3RpbGwgcmVhZGluZwotCQkJCSAqIGluIHRoZSBwYWdlLCBvciAoYikgYSBwcmV2aW91 cyByZWFkIGF0dGVtcHQgZmFpbGVkLiAgV2UKLQkJCQkgKiBoYXZlIHRvIHdhaXQgZm9yIGFueSBh Y3RpdmUgcmVhZCBhdHRlbXB0IHRvIGZpbmlzaCwgYW5kCi0JCQkJICogdGhlbiBzZXQgdXAgb3Vy IG93biByZWFkIGF0dGVtcHQgaWYgdGhlIHBhZ2UgaXMgc3RpbGwgbm90Ci0JCQkJICogQk1fVkFM SUQuICBTdGFydEJ1ZmZlcklPIGRvZXMgaXQgYWxsLgotCQkJCSAqLwotCQkJCWlmIChTdGFydEJ1 ZmZlcklPKGJ1ZiwgdHJ1ZSkpCi0JCQkJewotCQkJCQkvKgotCQkJCQkgKiBJZiB3ZSBnZXQgaGVy ZSwgcHJldmlvdXMgYXR0ZW1wdHMgdG8gcmVhZCB0aGUgYnVmZmVyCi0JCQkJCSAqIG11c3QgaGF2 ZSBmYWlsZWQgLi4uIGJ1dCB3ZSBzaGFsbCBicmF2ZWx5IHRyeSBhZ2Fpbi4KLQkJCQkJICovCi0J CQkJCSpmb3VuZFB0ciA9IGZhbHNlOwotCQkJCX0KLQkJCX0KLQotCQkJcmV0dXJuIGJ1ZjsKLQkJ fQotCiAJCS8qCiAJCSAqIE5lZWQgdG8gbG9jayB0aGUgYnVmZmVyIGhlYWRlciB0b28gaW4gb3Jk ZXIgdG8gY2hhbmdlIGl0cyB0YWcuCiAJCSAqLwpAQCAtMTM5MSwzMSArMTMxNSwxMDIgQEAgQnVm ZmVyQWxsb2MoU01nclJlbGF0aW9uIHNtZ3IsIGNoYXIgcmVscGVyc2lzdGVuY2UsIEZvcmtOdW1i ZXIgZm9ya051bSwKIAkJCWJyZWFrOwogCiAJCVVubG9ja0J1ZkhkcihidWYsIGJ1Zl9zdGF0ZSk7 Ci0JCUJ1ZlRhYmxlRGVsZXRlKCZuZXdUYWcsIG5ld0hhc2gpOwotCQlpZiAob2xkUGFydGl0aW9u TG9jayAhPSBOVUxMICYmCi0JCQlvbGRQYXJ0aXRpb25Mb2NrICE9IG5ld1BhcnRpdGlvbkxvY2sp CisJCWlmIChvbGRQYXJ0aXRpb25Mb2NrICE9IE5VTEwpCiAJCQlMV0xvY2tSZWxlYXNlKG9sZFBh cnRpdGlvbkxvY2spOwotCQlMV0xvY2tSZWxlYXNlKG5ld1BhcnRpdGlvbkxvY2spOwogCQlVbnBp bkJ1ZmZlcihidWYsIHRydWUpOwogCX0KIAogCS8qCi0JICogT2theSwgaXQncyBmaW5hbGx5IHNh ZmUgdG8gcmVuYW1lIHRoZSBidWZmZXIuCisJICogQ2xlYXIgb3V0IHRoZSBidWZmZXIncyB0YWcg YW5kIGZsYWdzLiAgV2UgbXVzdCBkbyB0aGlzIHRvIGVuc3VyZSB0aGF0CisJICogbGluZWFyIHNj YW5zIG9mIHRoZSBidWZmZXIgYXJyYXkgZG9uJ3QgdGhpbmsgdGhlIGJ1ZmZlciBpcyB2YWxpZC4g V2UKKwkgKiBhbHNvIHJlc2V0IHRoZSB1c2FnZV9jb3VudCBzaW5jZSBhbnkgcmVjZW5jeSBvZiB1 c2Ugb2YgdGhlIG9sZCBjb250ZW50CisJICogaXMgbm8gbG9uZ2VyIHJlbGV2YW50LgogCSAqCi0J ICogQ2xlYXJpbmcgQk1fVkFMSUQgaGVyZSBpcyBuZWNlc3NhcnksIGNsZWFyaW5nIHRoZSBkaXJ0 eWJpdHMgaXMganVzdAotCSAqIHBhcmFub2lhLiAgV2UgYWxzbyByZXNldCB0aGUgdXNhZ2VfY291 bnQgc2luY2UgYW55IHJlY2VuY3kgb2YgdXNlIG9mCi0JICogdGhlIG9sZCBjb250ZW50IGlzIG5v IGxvbmdlciByZWxldmFudC4gIChUaGUgdXNhZ2VfY291bnQgc3RhcnRzIG91dCBhdAotCSAqIDEg c28gdGhhdCB0aGUgYnVmZmVyIGNhbiBzdXJ2aXZlIG9uZSBjbG9jay1zd2VlcCBwYXNzLikKKwkg KiBTaW5jZSB3ZSBhcmUgc2luZ2xlIHBpbm5lciwgdGhlcmUgc2hvdWxkIG5vIGJlIFBJTl9DT1VO VF9XQUlURVIgb3IKKwkgKiBJT19JTl9QUk9HUkVTUyAoZmxhZ3MgdGhhdCB3ZXJlIG5vdCBjbGVh cmVkIGluIHByZXZpb3VzIGNvZGUpLgorCSAqLworCUFzc2VydCgob2xkRmxhZ3MgJiAoQk1fUElO X0NPVU5UX1dBSVRFUiB8IEJNX0lPX0lOX1BST0dSRVNTKSkgPT0gMCk7CisJQ0xFQVJfQlVGRkVS VEFHKGJ1Zi0+dGFnKTsKKwlidWZfc3RhdGUgJj0gfihCVUZfRkxBR19NQVNLIHwgQlVGX1VTQUdF Q09VTlRfTUFTSyk7CisJVW5sb2NrQnVmSGRyKGJ1ZiwgYnVmX3N0YXRlKTsKKworCWlmIChvbGRG bGFncyAmIEJNX1RBR19WQUxJRCkKKwkJb2xkRWxlbSA9IEJ1ZlRhYmxlRGVsZXRlKCZvbGRUYWcs IG9sZEhhc2gpOworCisJaWYgKG9sZFBhcnRpdGlvbkxvY2sgIT0gbmV3UGFydGl0aW9uTG9jaykK Kwl7CisJCWlmIChvbGRQYXJ0aXRpb25Mb2NrICE9IE5VTEwpCisJCQlMV0xvY2tSZWxlYXNlKG9s ZFBhcnRpdGlvbkxvY2spOworCQlMV0xvY2tBY3F1aXJlKG5ld1BhcnRpdGlvbkxvY2ssIExXX0VY Q0xVU0lWRSk7CisJfQorCisJLyoKKwkgKiBUcnkgdG8gbWFrZSBhIGhhc2h0YWJsZSBlbnRyeSBm b3IgdGhlIGJ1ZmZlciB1bmRlciBpdHMgbmV3IHRhZy4gVGhpcworCSAqIGNvdWxkIGZhaWwgYmVj YXVzZSB3aGlsZSB3ZSB3ZXJlIHdyaXRpbmcgc29tZW9uZSBlbHNlIGFsbG9jYXRlZCBhbm90aGVy CisJICogYnVmZmVyIGZvciB0aGUgc2FtZSBibG9jayB3ZSB3YW50IHRvIHJlYWQgaW4uIE5vdGUg dGhhdCB3ZSBoYXZlIG5vdCB5ZXQKKwkgKiByZW1vdmVkIHRoZSBoYXNodGFibGUgZW50cnkgZm9y IHRoZSBvbGQgdGFnLgorCSAqLworCWJ1Zl9pZCA9IEJ1ZlRhYmxlTG9va3VwKCZuZXdUYWcsIG5l d0hhc2gpOworCisJaWYgKGJ1Zl9pZCA+PSAwKQorCXsKKwkJLyoKKwkJICogR290IGEgY29sbGlz aW9uLiBTb21lb25lIGhhcyBhbHJlYWR5IGRvbmUgd2hhdCB3ZSB3ZXJlIGFib3V0IHRvIGRvLgor CQkgKiBXZSdsbCBqdXN0IGhhbmRsZSB0aGlzIGFzIGlmIGl0IHdlcmUgZm91bmQgaW4gdGhlIGJ1 ZmZlciBwb29sIGluCisJCSAqIHRoZSBmaXJzdCBwbGFjZS4gIEZpcnN0LCBnaXZlIHVwIHRoZSBi dWZmZXIgd2Ugd2VyZSBwbGFubmluZyB0byB1c2UKKwkJICogYW5kIHB1dCBpdCB0byBmcmVlIGxp c3RzLgorCQkgKi8KKwkJVW5waW5CdWZmZXIoYnVmLCB0cnVlKTsKKwkJU3RyYXRlZ3lGcmVlQnVm ZmVyKGJ1Zik7CisJCWlmIChvbGRFbGVtICE9IE5VTEwpCisJCQlCdWZUYWJsZUZyZWVEZWxldGVk KG9sZEVsZW0sIG9sZEhhc2gpOworCisJCS8qIHJlbWFpbmluZyBjb2RlIHNob3VsZCBtYXRjaCBj b2RlIGF0IHRvcCBvZiByb3V0aW5lICovCisKKwkJYnVmID0gR2V0QnVmZmVyRGVzY3JpcHRvcihi dWZfaWQpOworCisJCXZhbGlkID0gUGluQnVmZmVyKGJ1Ziwgc3RyYXRlZ3kpOworCisJCS8qIENh biByZWxlYXNlIHRoZSBtYXBwaW5nIGxvY2sgYXMgc29vbiBhcyB3ZSd2ZSBwaW5uZWQgaXQgKi8K KwkJTFdMb2NrUmVsZWFzZShuZXdQYXJ0aXRpb25Mb2NrKTsKKworCQkqZm91bmRQdHIgPSB0cnVl OworCisJCWlmICghdmFsaWQpCisJCXsKKwkJCS8qCisJCQkgKiBXZSBjYW4gb25seSBnZXQgaGVy ZSBpZiAoYSkgc29tZW9uZSBlbHNlIGlzIHN0aWxsIHJlYWRpbmcgaW4KKwkJCSAqIHRoZSBwYWdl LCBvciAoYikgYSBwcmV2aW91cyByZWFkIGF0dGVtcHQgZmFpbGVkLiAgV2UgaGF2ZSB0bworCQkJ ICogd2FpdCBmb3IgYW55IGFjdGl2ZSByZWFkIGF0dGVtcHQgdG8gZmluaXNoLCBhbmQgdGhlbiBz ZXQgdXAgb3VyCisJCQkgKiBvd24gcmVhZCBhdHRlbXB0IGlmIHRoZSBwYWdlIGlzIHN0aWxsIG5v dCBCTV9WQUxJRC4KKwkJCSAqIFN0YXJ0QnVmZmVySU8gZG9lcyBpdCBhbGwuCisJCQkgKi8KKwkJ CWlmIChTdGFydEJ1ZmZlcklPKGJ1ZiwgdHJ1ZSkpCisJCQl7CisJCQkJLyoKKwkJCQkgKiBJZiB3 ZSBnZXQgaGVyZSwgcHJldmlvdXMgYXR0ZW1wdHMgdG8gcmVhZCB0aGUgYnVmZmVyIG11c3QKKwkJ CQkgKiBoYXZlIGZhaWxlZCAuLi4gYnV0IHdlIHNoYWxsIGJyYXZlbHkgdHJ5IGFnYWluLgorCQkJ CSAqLworCQkJCSpmb3VuZFB0ciA9IGZhbHNlOworCQkJfQorCQl9CisKKwkJcmV0dXJuIGJ1ZjsK Kwl9CisKKwkvKgorCSAqIE9rYXksIGl0J3MgZmluYWxseSBzYWZlIHRvIHJlbmFtZSB0aGUgYnVm ZmVyLgogCSAqCiAJICogTWFrZSBzdXJlIEJNX1BFUk1BTkVOVCBpcyBzZXQgZm9yIGJ1ZmZlcnMg dGhhdCBtdXN0IGJlIHdyaXR0ZW4gYXQgZXZlcnkKIAkgKiBjaGVja3BvaW50LiAgVW5sb2dnZWQg YnVmZmVycyBvbmx5IG5lZWQgdG8gYmUgd3JpdHRlbiBhdCBzaHV0ZG93bgogCSAqIGNoZWNrcG9p bnRzLCBleGNlcHQgZm9yIHRoZWlyICJpbml0IiBmb3Jrcywgd2hpY2ggbmVlZCB0byBiZSB0cmVh dGVkCiAJICoganVzdCBsaWtlIHBlcm1hbmVudCByZWxhdGlvbnMuCisJICoKKwkgKiBUaGUgdXNh Z2VfY291bnQgc3RhcnRzIG91dCBhdCAxIHNvIHRoYXQgdGhlIGJ1ZmZlciBjYW4gc3Vydml2ZSBv bmUKKwkgKiBjbG9jay1zd2VlcCBwYXNzLgogCSAqLworCWJ1Zl9zdGF0ZSA9IExvY2tCdWZIZHIo YnVmKTsKIAlidWYtPnRhZyA9IG5ld1RhZzsKLQlidWZfc3RhdGUgJj0gfihCTV9WQUxJRCB8IEJN X0RJUlRZIHwgQk1fSlVTVF9ESVJUSUVEIHwKLQkJCQkgICBCTV9DSEVDS1BPSU5UX05FRURFRCB8 IEJNX0lPX0VSUk9SIHwgQk1fUEVSTUFORU5UIHwKLQkJCQkgICBCVUZfVVNBR0VDT1VOVF9NQVNL KTsKIAlpZiAocmVscGVyc2lzdGVuY2UgPT0gUkVMUEVSU0lTVEVOQ0VfUEVSTUFORU5UIHx8IGZv cmtOdW0gPT0gSU5JVF9GT1JLTlVNKQogCQlidWZfc3RhdGUgfD0gQk1fVEFHX1ZBTElEIHwgQk1f UEVSTUFORU5UIHwgQlVGX1VTQUdFQ09VTlRfT05FOwogCWVsc2UKQEAgLTE0MjMsMTMgKzE0MTgs NyBAQCBCdWZmZXJBbGxvYyhTTWdyUmVsYXRpb24gc21nciwgY2hhciByZWxwZXJzaXN0ZW5jZSwg Rm9ya051bWJlciBmb3JrTnVtLAogCiAJVW5sb2NrQnVmSGRyKGJ1ZiwgYnVmX3N0YXRlKTsKIAot CWlmIChvbGRQYXJ0aXRpb25Mb2NrICE9IE5VTEwpCi0JewotCQlCdWZUYWJsZURlbGV0ZSgmb2xk VGFnLCBvbGRIYXNoKTsKLQkJaWYgKG9sZFBhcnRpdGlvbkxvY2sgIT0gbmV3UGFydGl0aW9uTG9j aykKLQkJCUxXTG9ja1JlbGVhc2Uob2xkUGFydGl0aW9uTG9jayk7Ci0JfQotCisJQnVmVGFibGVJ bnNlcnQoJm5ld1RhZywgbmV3SGFzaCwgYnVmLT5idWZfaWQsIG9sZEVsZW0pOwogCUxXTG9ja1Jl bGVhc2UobmV3UGFydGl0aW9uTG9jayk7CiAKIAkvKgpAQCAtMTUzOSw3ICsxNTI4LDEyIEBAIHJl dHJ5OgogCSAqIFJlbW92ZSB0aGUgYnVmZmVyIGZyb20gdGhlIGxvb2t1cCBoYXNodGFibGUsIGlm IGl0IHdhcyBpbiB0aGVyZS4KIAkgKi8KIAlpZiAob2xkRmxhZ3MgJiBCTV9UQUdfVkFMSUQpCi0J CUJ1ZlRhYmxlRGVsZXRlKCZvbGRUYWcsIG9sZEhhc2gpOworCXsKKwkJdm9pZCAgICpvbGRFbGVt OworCisJCW9sZEVsZW0gPSBCdWZUYWJsZURlbGV0ZSgmb2xkVGFnLCBvbGRIYXNoKTsKKwkJQnVm VGFibGVGcmVlRGVsZXRlZChvbGRFbGVtLCBvbGRIYXNoKTsKKwl9CiAKIAkvKgogCSAqIERvbmUg d2l0aCBtYXBwaW5nIGxvY2suCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9oYXNoL2R5 bmFoYXNoLmMgYi9zcmMvYmFja2VuZC91dGlscy9oYXNoL2R5bmFoYXNoLmMKaW5kZXggNjU0NmUz YzdjNzkuLmNlNWJiYThlOTc1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9oYXNoL2R5 bmFoYXNoLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvaGFzaC9keW5haGFzaC5jCkBAIC05OSw2 ICs5OSw3IEBACiAjaW5jbHVkZSAiYWNjZXNzL3hhY3QuaCIKICNpbmNsdWRlICJjb21tb24vaGFz aGZuLmgiCiAjaW5jbHVkZSAicG9ydC9wZ19iaXR1dGlscy5oIgorI2luY2x1ZGUgInBvcnQvYXRv bWljcy5oIgogI2luY2x1ZGUgInN0b3JhZ2Uvc2htZW0uaCIKICNpbmNsdWRlICJzdG9yYWdlL3Nw aW4uaCIKICNpbmNsdWRlICJ1dGlscy9keW5haGFzaC5oIgpAQCAtMTMzLDYgKzEzNCwxOCBAQCB0 eXBlZGVmIEhBU0hFTEVNRU5UICpIQVNIQlVDS0VUOwogLyogQSBoYXNoIHNlZ21lbnQgaXMgYW4g YXJyYXkgb2YgYnVja2V0IGhlYWRlcnMgKi8KIHR5cGVkZWYgSEFTSEJVQ0tFVCAqSEFTSFNFR01F TlQ7CiAKKyNpZiBTSVpFT0ZfTE9ORyA9PSA4Cit0eXBlZGVmIHBnX2F0b21pY191aW50NjQgQ291 bnQ7CisjZGVmaW5lIGNvdW50X2F0b21pY19pbmMoeCkJcGdfYXRvbWljX2ZldGNoX2FkZF91NjQo KHgpLCAxKQorI2RlZmluZSBjb3VudF9hdG9taWNfZGVjKHgpCXBnX2F0b21pY19mZXRjaF9zdWJf dTY0KCh4KSwgMSkKKyNkZWZpbmUgTUFYX05FTlRSSUVTCSgodWludDY0KVBHX0lOVDY0X01BWCkK KyNlbHNlCit0eXBlZGVmIHBnX2F0b21pY191aW50MzIgQ291bnQ7CisjZGVmaW5lIGNvdW50X2F0 b21pY19pbmMoeCkJcGdfYXRvbWljX2ZldGNoX2FkZF91MzIoKHgpLCAxKQorI2RlZmluZSBjb3Vu dF9hdG9taWNfZGVjKHgpCXBnX2F0b21pY19mZXRjaF9zdWJfdTMyKCh4KSwgMSkKKyNkZWZpbmUg TUFYX05FTlRSSUVTCSgodWludDMyKVBHX0lOVDMyX01BWCkKKyNlbmRpZgorCiAvKgogICogUGVy LWZyZWVsaXN0IGRhdGEuCiAgKgpAQCAtMTUzLDcgKzE2Niw3IEBAIHR5cGVkZWYgSEFTSEJVQ0tF VCAqSEFTSFNFR01FTlQ7CiB0eXBlZGVmIHN0cnVjdAogewogCXNsb2NrX3QJCW11dGV4OwkJCS8q IHNwaW5sb2NrIGZvciB0aGlzIGZyZWVsaXN0ICovCi0JbG9uZwkJbmVudHJpZXM7CQkvKiBudW1i ZXIgb2YgZW50cmllcyBpbiBhc3NvY2lhdGVkIGJ1Y2tldHMgKi8KKwlDb3VudAkJbmVudHJpZXM7 CQkvKiBudW1iZXIgb2YgZW50cmllcyBpbiBhc3NvY2lhdGVkIGJ1Y2tldHMgKi8KIAlIQVNIRUxF TUVOVCAqZnJlZUxpc3Q7CQkvKiBjaGFpbiBvZiBmcmVlIGVsZW1lbnRzICovCiB9IEZyZWVMaXN0 RGF0YTsKIApAQCAtMzA2LDYgKzMxOSw1NCBAQCBzdHJpbmdfY29tcGFyZShjb25zdCBjaGFyICpr ZXkxLCBjb25zdCBjaGFyICprZXkyLCBTaXplIGtleXNpemUpCiAJcmV0dXJuIHN0cm5jbXAoa2V5 MSwga2V5Miwga2V5c2l6ZSAtIDEpOwogfQogCisvKgorICogRnJlZSBsaXN0IHJvdXRpbmVzCisg Ki8KK3N0YXRpYyBpbmxpbmUgdm9pZAorZnJlZV9saXN0X2xpbmtfZW50cnkoSEFTSEhEUiAqaGN0 bCwgSEFTSEJVQ0tFVCBjdXJyQnVja2V0LCBpbnQgZnJlZWxpc3RfaWR4KQoreworCUZyZWVMaXN0 RGF0YSAqbGlzdCA9ICZoY3RsLT5mcmVlTGlzdFtmcmVlbGlzdF9pZHhdOworCisJaWYgKElTX1BB UlRJVElPTkVEKGhjdGwpKQorCXsKKwkJU3BpbkxvY2tBY3F1aXJlKCZsaXN0LT5tdXRleCk7CisJ CWN1cnJCdWNrZXQtPmxpbmsgPSBsaXN0LT5mcmVlTGlzdDsKKwkJbGlzdC0+ZnJlZUxpc3QgPSBj dXJyQnVja2V0OworCQlTcGluTG9ja1JlbGVhc2UoJmxpc3QtPm11dGV4KTsKKwl9CisJZWxzZQor CXsKKwkJY3VyckJ1Y2tldC0+bGluayA9IGxpc3QtPmZyZWVMaXN0OworCQlsaXN0LT5mcmVlTGlz dCA9IGN1cnJCdWNrZXQ7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2ZyZWVfbGlzdF9p bmNyZW1lbnRfbmVudHJpZXMoSEFTSEhEUiAqaGN0bCwgaW50IGZyZWVsaXN0X2lkeCkKK3sKKwlG cmVlTGlzdERhdGEgKmxpc3QgPSAmaGN0bC0+ZnJlZUxpc3RbZnJlZWxpc3RfaWR4XTsKKworCS8q IENoZWNrIGZvciBvdmVyZmxvdyAqLworCUFzc2VydChoY3RsLT5mcmVlTGlzdFtmcmVlbGlzdF9p ZHhdLm5lbnRyaWVzLnZhbHVlIDwgTUFYX05FTlRSSUVTKTsKKworCWlmIChJU19QQVJUSVRJT05F RChoY3RsKSkKKwkJY291bnRfYXRvbWljX2luYygmbGlzdC0+bmVudHJpZXMpOworCWVsc2UKKwkJ bGlzdC0+bmVudHJpZXMudmFsdWUrKzsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitmcmVlX2xp c3RfZGVjcmVtZW50X25lbnRyaWVzKEhBU0hIRFIgKmhjdGwsIGludCBmcmVlbGlzdF9pZHgpCit7 CisJRnJlZUxpc3REYXRhICpsaXN0ID0gJmhjdGwtPmZyZWVMaXN0W2ZyZWVsaXN0X2lkeF07CisK KwlpZiAoSVNfUEFSVElUSU9ORUQoaGN0bCkpCisJCWNvdW50X2F0b21pY19kZWMoJmxpc3QtPm5l bnRyaWVzKTsKKwllbHNlCisJCWxpc3QtPm5lbnRyaWVzLnZhbHVlLS07CisJLyogQ2hlY2sgZm9y IG92ZXJmbG93ICovCisJQXNzZXJ0KGhjdGwtPmZyZWVMaXN0W2ZyZWVsaXN0X2lkeF0ubmVudHJp ZXMudmFsdWUgPCBNQVhfTkVOVFJJRVMpOworfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioq KiogQ1JFQVRFIFJPVVRJTkVTICoqKioqKioqKioqKioqKioqKioqKiovCiAKQEAgLTEwMDAsNyAr MTA2MSw3IEBAIGhhc2hfc2VhcmNoX3dpdGhfaGFzaF92YWx1ZShIVEFCICpoYXNocCwKIAkJICog Q2FuJ3Qgc3BsaXQgaWYgcnVubmluZyBpbiBwYXJ0aXRpb25lZCBtb2RlLCBub3IgaWYgZnJvemVu LCBub3IgaWYKIAkJICogdGFibGUgaXMgdGhlIHN1YmplY3Qgb2YgYW55IGFjdGl2ZSBoYXNoX3Nl cV9zZWFyY2ggc2NhbnMuCiAJCSAqLwotCQlpZiAoaGN0bC0+ZnJlZUxpc3RbMF0ubmVudHJpZXMg PiAobG9uZykgaGN0bC0+bWF4X2J1Y2tldCAmJgorCQlpZiAoaGN0bC0+ZnJlZUxpc3RbMF0ubmVu dHJpZXMudmFsdWUgPiAobG9uZykgaGN0bC0+bWF4X2J1Y2tldCAmJgogCQkJIUlTX1BBUlRJVElP TkVEKGhjdGwpICYmICFoYXNocC0+ZnJvemVuICYmCiAJCQkhaGFzX3NlcV9zY2FucyhoYXNocCkp CiAJCQkodm9pZCkgZXhwYW5kX3RhYmxlKGhhc2hwKTsKQEAgLTEwNTcsMjMgKzExMTgsMTQgQEAg aGFzaF9zZWFyY2hfd2l0aF9oYXNoX3ZhbHVlKEhUQUIgKmhhc2hwLAogCQljYXNlIEhBU0hfUkVN T1ZFOgogCQkJaWYgKGN1cnJCdWNrZXQgIT0gTlVMTCkKIAkJCXsKLQkJCQkvKiBpZiBwYXJ0aXRp b25lZCwgbXVzdCBsb2NrIHRvIHRvdWNoIG5lbnRyaWVzIGFuZCBmcmVlTGlzdCAqLwotCQkJCWlm IChJU19QQVJUSVRJT05FRChoY3RsKSkKLQkJCQkJU3BpbkxvY2tBY3F1aXJlKCYoaGN0bC0+ZnJl ZUxpc3RbZnJlZWxpc3RfaWR4XS5tdXRleCkpOwotCiAJCQkJLyogZGVsZXRlIHRoZSByZWNvcmQg ZnJvbSB0aGUgYXBwcm9wcmlhdGUgbmVudHJpZXMgY291bnRlci4gKi8KLQkJCQlBc3NlcnQoaGN0 bC0+ZnJlZUxpc3RbZnJlZWxpc3RfaWR4XS5uZW50cmllcyA+IDApOwotCQkJCWhjdGwtPmZyZWVM aXN0W2ZyZWVsaXN0X2lkeF0ubmVudHJpZXMtLTsKKwkJCQlmcmVlX2xpc3RfZGVjcmVtZW50X25l bnRyaWVzKGhjdGwsIGZyZWVsaXN0X2lkeCk7CiAKIAkJCQkvKiByZW1vdmUgcmVjb3JkIGZyb20g aGFzaCBidWNrZXQncyBjaGFpbi4gKi8KIAkJCQkqcHJldkJ1Y2tldFB0ciA9IGN1cnJCdWNrZXQt Pmxpbms7CiAKIAkJCQkvKiBhZGQgdGhlIHJlY29yZCB0byB0aGUgYXBwcm9wcmlhdGUgZnJlZWxp c3QuICovCi0JCQkJY3VyckJ1Y2tldC0+bGluayA9IGhjdGwtPmZyZWVMaXN0W2ZyZWVsaXN0X2lk eF0uZnJlZUxpc3Q7Ci0JCQkJaGN0bC0+ZnJlZUxpc3RbZnJlZWxpc3RfaWR4XS5mcmVlTGlzdCA9 IGN1cnJCdWNrZXQ7Ci0KLQkJCQlpZiAoSVNfUEFSVElUSU9ORUQoaGN0bCkpCi0JCQkJCVNwaW5M b2NrUmVsZWFzZSgmaGN0bC0+ZnJlZUxpc3RbZnJlZWxpc3RfaWR4XS5tdXRleCk7CisJCQkJZnJl ZV9saXN0X2xpbmtfZW50cnkoaGN0bCwgY3VyckJ1Y2tldCwgZnJlZWxpc3RfaWR4KTsKIAogCQkJ CS8qCiAJCQkJICogYmV0dGVyIGhvcGUgdGhlIGNhbGxlciBpcyBzeW5jaHJvbml6aW5nIGFjY2Vz cyB0byB0aGlzCkBAIC0xMTE1LDYgKzExNjcsNyBAQCBoYXNoX3NlYXJjaF93aXRoX2hhc2hfdmFs dWUoSFRBQiAqaGFzaHAsCiAJCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9PVVRfT0ZfTUVNT1JZKSwK IAkJCQkJCQkgZXJybXNnKCJvdXQgb2YgbWVtb3J5IikpKTsKIAkJCX0KKwkJCWZyZWVfbGlzdF9p bmNyZW1lbnRfbmVudHJpZXMoaGN0bCwgZnJlZWxpc3RfaWR4KTsKIAogCQkJLyogbGluayBpbnRv IGhhc2hidWNrZXQgY2hhaW4gKi8KIAkJCSpwcmV2QnVja2V0UHRyID0gY3VyckJ1Y2tldDsKQEAg LTExNjUsNiArMTIxOCw3IEBAIGhhc2hfdXBkYXRlX2hhc2hfa2V5KEhUQUIgKmhhc2hwLAogewog CUhBU0hFTEVNRU5UICpleGlzdGluZ0VsZW1lbnQgPSBFTEVNRU5UX0ZST01fS0VZKGV4aXN0aW5n RW50cnkpOwogCUhBU0hIRFIgICAgKmhjdGwgPSBoYXNocC0+aGN0bDsKKwl1aW50MzIJCW9sZGhh c2h2YWx1ZTsKIAl1aW50MzIJCW5ld2hhc2h2YWx1ZTsKIAlTaXplCQlrZXlzaXplOwogCXVpbnQz MgkJYnVja2V0OwpAQCAtMTIxOCw2ICsxMjcyLDcgQEAgaGFzaF91cGRhdGVfaGFzaF9rZXkoSFRB QiAqaGFzaHAsCiAJCQkgaGFzaHAtPnRhYm5hbWUpOwogCiAJb2xkUHJldlB0ciA9IHByZXZCdWNr ZXRQdHI7CisJb2xkaGFzaHZhbHVlID0gZXhpc3RpbmdFbGVtZW50LT5oYXNodmFsdWU7CiAKIAkv KgogCSAqIE5vdyBwZXJmb3JtIHRoZSBlcXVpdmFsZW50IG9mIGEgSEFTSF9FTlRFUiBvcGVyYXRp b24gdG8gbG9jYXRlIHRoZSBoYXNoCkBAIC0xMjcxLDEyICsxMzI2LDIxIEBAIGhhc2hfdXBkYXRl X2hhc2hfa2V5KEhUQUIgKmhhc2hwLAogCSAqLwogCWlmIChidWNrZXQgIT0gbmV3YnVja2V0KQog CXsKKwkJaW50CQkJb2xkX2ZyZWVsaXN0X2lkeCA9IEZSRUVMSVNUX0lEWChoY3RsLCBvbGRoYXNo dmFsdWUpOworCQlpbnQJCQluZXdfZnJlZWxpc3RfaWR4ID0gRlJFRUxJU1RfSURYKGhjdGwsIG5l d2hhc2h2YWx1ZSk7CisKIAkJLyogT0sgdG8gcmVtb3ZlIHJlY29yZCBmcm9tIG9sZCBoYXNoIGJ1 Y2tldCdzIGNoYWluLiAqLwogCQkqb2xkUHJldlB0ciA9IGN1cnJCdWNrZXQtPmxpbms7CiAKIAkJ LyogbGluayBpbnRvIG5ldyBoYXNoYnVja2V0IGNoYWluICovCiAJCSpwcmV2QnVja2V0UHRyID0g Y3VyckJ1Y2tldDsKIAkJY3VyckJ1Y2tldC0+bGluayA9IE5VTEw7CisKKwkJaWYgKG9sZF9mcmVl bGlzdF9pZHggIT0gbmV3X2ZyZWVsaXN0X2lkeCkKKwkJeworCQkJZnJlZV9saXN0X2RlY3JlbWVu dF9uZW50cmllcyhoY3RsLCBvbGRfZnJlZWxpc3RfaWR4KTsKKwkJCWZyZWVfbGlzdF9pbmNyZW1l bnRfbmVudHJpZXMoaGN0bCwgbmV3X2ZyZWVsaXN0X2lkeCk7CisJCX0KIAl9CiAKIAkvKiBjb3B5 IG5ldyBrZXkgaW50byByZWNvcmQgKi8KQEAgLTEyODgsNiArMTM1MiwxOTMgQEAgaGFzaF91cGRh dGVfaGFzaF9rZXkoSFRBQiAqaGFzaHAsCiAJcmV0dXJuIHRydWU7CiB9CiAKKy8qCisgKiBoYXNo X2luc2VydF93aXRoX2hhc2hfbm9jaGVjayAtIGluc2VydHMgbmV3IGVudHJ5IGludG8gYnVja2V0 IHdpdGhvdXQKKyAqIGNoZWNraW5nIGZvciBkdXBsaWNhdGVzLgorICoKKyAqIENhbGxlciBzaG91 bGQgYmUgc3VyZSB0aGVyZSBpcyBubyBjb25mbGljdGluZyBlbnRyeS4KKyAqCisgKiBDYWxsZXIg bWF5IHBhc3MgcG9pbnRlciB0byBvbGQgZW50cnkgYWNxdWlyZWQgd2l0aCBoYXNoX2RlbGV0ZV9z a2lwX2ZyZWVsaXN0LgorICogSW4gdGhpcyBjYXNlIGVudHJ5IHdpbGwgYmUgcmV1c2VkIGFuZCBy ZXR1cm5lZCBhcyBhIG5ldy4KKyAqLwordm9pZCAqCitoYXNoX2luc2VydF93aXRoX2hhc2hfbm9j aGVjayhIVEFCICpoYXNocCwKKwkJCQkJCQkgIGNvbnN0IHZvaWQgKmtleVB0ciwKKwkJCQkJCQkg IHVpbnQzMiBoYXNodmFsdWUsCisJCQkJCQkJICB2b2lkICpvbGRlbnRyeSkKK3sKKwlIQVNISERS ICAgICpoY3RsID0gaGFzaHAtPmhjdGw7CisJaW50CQkJZnJlZWxpc3RfaWR4ID0gRlJFRUxJU1Rf SURYKGhjdGwsIGhhc2h2YWx1ZSk7CisJdWludDMyCQlidWNrZXQ7CisJbG9uZwkJc2VnbWVudF9u dW07CisJbG9uZwkJc2VnbWVudF9uZHg7CisJSEFTSFNFR01FTlQgc2VncDsKKwlIQVNIQlVDS0VU CWN1cnJCdWNrZXQ7CisJSEFTSEJVQ0tFVCAqcHJldkJ1Y2tldFB0cjsKKworI2lmIEhBU0hfU1RB VElTVElDUworCWhhc2hfYWNjZXNzZXMrKzsKKwloY3RsLT5hY2Nlc3NlcysrOworI2VuZGlmCisK KwkvKiBkaXNhbGxvdyB1cGRhdGVzIGlmIGZyb3plbiAqLworCWlmIChoYXNocC0+ZnJvemVuKQor CQllbG9nKEVSUk9SLCAiY2Fubm90IHVwZGF0ZSBpbiBmcm96ZW4gaGFzaHRhYmxlIFwiJXNcIiIs CisJCQkgaGFzaHAtPnRhYm5hbWUpOworCisJaWYgKCFJU19QQVJUSVRJT05FRChoY3RsKSAmJgor CQloY3RsLT5mcmVlTGlzdFswXS5uZW50cmllcy52YWx1ZSA+IChsb25nKSBoY3RsLT5tYXhfYnVj a2V0ICYmCisJCSFoYXNfc2VxX3NjYW5zKGhhc2hwKSkKKwkJKHZvaWQpIGV4cGFuZF90YWJsZSho YXNocCk7CisKKwkvKgorCSAqIExvb2t1cCB0aGUgZXhpc3RpbmcgZWxlbWVudCB1c2luZyBpdHMg c2F2ZWQgaGFzaCB2YWx1ZS4gIFdlIG5lZWQgdG8gZG8KKwkgKiB0aGlzIHRvIGJlIGFibGUgdG8g dW5saW5rIGl0IGZyb20gaXRzIGhhc2ggY2hhaW4sIGJ1dCBhcyBhIHNpZGUgYmVuZWZpdAorCSAq IHdlIGNhbiB2ZXJpZnkgdGhlIHZhbGlkaXR5IG9mIHRoZSBwYXNzZWQgZXhpc3RpbmdFbnRyeSBw b2ludGVyLgorCSAqLworCWJ1Y2tldCA9IGNhbGNfYnVja2V0KGhjdGwsIGhhc2h2YWx1ZSk7CisK KwlzZWdtZW50X251bSA9IGJ1Y2tldCA+PiBoYXNocC0+c3NoaWZ0OworCXNlZ21lbnRfbmR4ID0g TU9EKGJ1Y2tldCwgaGFzaHAtPnNzaXplKTsKKworCXNlZ3AgPSBoYXNocC0+ZGlyW3NlZ21lbnRf bnVtXTsKKworCWlmIChzZWdwID09IE5VTEwpCisJCWhhc2hfY29ycnVwdGVkKGhhc2hwKTsKKwor CXByZXZCdWNrZXRQdHIgPSAmc2VncFtzZWdtZW50X25keF07CisKKwlpZiAob2xkZW50cnkgIT0g TlVMTCkKKwkJY3VyckJ1Y2tldCA9IEVMRU1FTlRfRlJPTV9LRVkob2xkZW50cnkpOworCWVsc2UK KwkJY3VyckJ1Y2tldCA9IGdldF9oYXNoX2VudHJ5KGhhc2hwLCBmcmVlbGlzdF9pZHgpOworCWZy ZWVfbGlzdF9pbmNyZW1lbnRfbmVudHJpZXMoaGN0bCwgZnJlZWxpc3RfaWR4KTsKKworCWlmIChj dXJyQnVja2V0ID09IE5VTEwpCisJeworCQkvKiByZXBvcnQgYSBnZW5lcmljIG1lc3NhZ2UgKi8K KwkJaWYgKGhhc2hwLT5pc3NoYXJlZCkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2Rl KEVSUkNPREVfT1VUX09GX01FTU9SWSksCisJCQkJCSBlcnJtc2coIm91dCBvZiBzaGFyZWQgbWVt b3J5IikpKTsKKwkJZWxzZQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09E RV9PVVRfT0ZfTUVNT1JZKSwKKwkJCQkJIGVycm1zZygib3V0IG9mIG1lbW9yeSIpKSk7CisJfQor CisJLyogY29weSBrZXkgaW50byByZWNvcmQgKi8KKwljdXJyQnVja2V0LT5oYXNodmFsdWUgPSBo YXNodmFsdWU7CisJY3VyckJ1Y2tldC0+bGluayA9ICpwcmV2QnVja2V0UHRyOworCWhhc2hwLT5r ZXljb3B5KEVMRU1FTlRLRVkoY3VyckJ1Y2tldCksIGtleVB0ciwgaGFzaHAtPmtleXNpemUpOwor CisJKnByZXZCdWNrZXRQdHIgPSBjdXJyQnVja2V0OworCisJcmV0dXJuICh2b2lkICopIEVMRU1F TlRLRVkoY3VyckJ1Y2tldCk7Cit9CisKKy8qCisgKiBoYXNoX2RlbGV0ZV9za2lwX2ZyZWVsaXN0 IC0gZmluZCBhbmQgZGVsZXRlIGVudHJ5LCBidXQgZG9uJ3QgcHV0IGl0CisgKiB0byBmcmVlIGxp c3QuCisgKgorICogVXNlZCBpbiBCdWZmZXIgTWFuYWdlciB0byByZXVzZSBlbnRyeSBmb3IgZXZp Y3RlZCBidWZmZXIuCisgKgorICogUmV0dXJuZWQgZW50cnkgc2hvdWxkIGJlIGVpdGhlciByZXVz ZWQgd2l0aCBoYXNoX2luc2VydF93aXRoX2hhc2hfbm9jaGVjaworICogb3IgcmV0dXJuZWQgdG8g ZnJlZSBsaXN0IHdpdGggaGFzaF9yZXR1cm5fdG9fZnJlZWxpc3QuCisgKi8KK3ZvaWQgKgoraGFz aF9kZWxldGVfc2tpcF9mcmVlbGlzdChIVEFCICpoYXNocCwKKwkJCQkJCSAgY29uc3Qgdm9pZCAq a2V5UHRyLAorCQkJCQkJICB1aW50MzIgaGFzaHZhbHVlKQoreworCUhBU0hIRFIgICAgKmhjdGwg PSBoYXNocC0+aGN0bDsKKwlpbnQJCQlmcmVlbGlzdF9pZHggPSBGUkVFTElTVF9JRFgoaGN0bCwg aGFzaHZhbHVlKTsKKwlTaXplCQlrZXlzaXplOworCXVpbnQzMgkJYnVja2V0OworCWxvbmcJCXNl Z21lbnRfbnVtOworCWxvbmcJCXNlZ21lbnRfbmR4OworCUhBU0hTRUdNRU5UIHNlZ3A7CisJSEFT SEJVQ0tFVAljdXJyQnVja2V0OworCUhBU0hCVUNLRVQgKnByZXZCdWNrZXRQdHI7CisJSGFzaENv bXBhcmVGdW5jIG1hdGNoOworCisjaWYgSEFTSF9TVEFUSVNUSUNTCisJaGFzaF9hY2Nlc3Nlcysr OworCWhjdGwtPmFjY2Vzc2VzKys7CisjZW5kaWYKKworCS8qCisJICogRG8gdGhlIGluaXRpYWwg bG9va3VwCisJICovCisJYnVja2V0ID0gY2FsY19idWNrZXQoaGN0bCwgaGFzaHZhbHVlKTsKKwor CXNlZ21lbnRfbnVtID0gYnVja2V0ID4+IGhhc2hwLT5zc2hpZnQ7CisJc2VnbWVudF9uZHggPSBN T0QoYnVja2V0LCBoYXNocC0+c3NpemUpOworCisJc2VncCA9IGhhc2hwLT5kaXJbc2VnbWVudF9u dW1dOworCisJaWYgKHNlZ3AgPT0gTlVMTCkKKwkJaGFzaF9jb3JydXB0ZWQoaGFzaHApOworCisJ cHJldkJ1Y2tldFB0ciA9ICZzZWdwW3NlZ21lbnRfbmR4XTsKKwljdXJyQnVja2V0ID0gKnByZXZC dWNrZXRQdHI7CisKKwkvKgorCSAqIEZvbGxvdyBjb2xsaXNpb24gY2hhaW4gbG9va2luZyBmb3Ig bWF0Y2hpbmcga2V5CisJICovCisJbWF0Y2ggPSBoYXNocC0+bWF0Y2g7CQkvKiBzYXZlIG9uZSBm ZXRjaCBpbiBpbm5lciBsb29wICovCisJa2V5c2l6ZSA9IGhhc2hwLT5rZXlzaXplOwkvKiBkaXR0 byAqLworCisJd2hpbGUgKGN1cnJCdWNrZXQgIT0gTlVMTCkKKwl7CisJCWlmIChjdXJyQnVja2V0 LT5oYXNodmFsdWUgPT0gaGFzaHZhbHVlICYmCisJCQltYXRjaChFTEVNRU5US0VZKGN1cnJCdWNr ZXQpLCBrZXlQdHIsIGtleXNpemUpID09IDApCisJCQlicmVhazsKKwkJcHJldkJ1Y2tldFB0ciA9 ICYoY3VyckJ1Y2tldC0+bGluayk7CisJCWN1cnJCdWNrZXQgPSAqcHJldkJ1Y2tldFB0cjsKKyNp ZiBIQVNIX1NUQVRJU1RJQ1MKKwkJaGFzaF9jb2xsaXNpb25zKys7CisJCWhjdGwtPmNvbGxpc2lv bnMrKzsKKyNlbmRpZgorCX0KKworCWlmIChjdXJyQnVja2V0ID09IE5VTEwpCisJCXJldHVybiBO VUxMOworCisJLyogZGVsZXRlIHRoZSByZWNvcmQgZnJvbSB0aGUgYXBwcm9wcmlhdGUgbmVudHJp ZXMgY291bnRlci4gKi8KKwlmcmVlX2xpc3RfZGVjcmVtZW50X25lbnRyaWVzKGhjdGwsIGZyZWVs aXN0X2lkeCk7CisKKwkvKiByZW1vdmUgcmVjb3JkIGZyb20gaGFzaCBidWNrZXQncyBjaGFpbi4g Ki8KKwkqcHJldkJ1Y2tldFB0ciA9IGN1cnJCdWNrZXQtPmxpbms7CisKKwlyZXR1cm4gKHZvaWQg KikgRUxFTUVOVEtFWShjdXJyQnVja2V0KTsKK30KKworLyoKKyAqIGhhc2hfcmV0dXJuX3RvX2Zy ZWVsaXN0IC0gcmV0dXJuIGVudHJ5IGRlbGV0ZWQgd2l0aAorICogaGFzaF9kZWxldGVfc2tpcF9m cmVlbGlzdCB0byBmcmVlIGxpc3QuCisgKgorICogVXNlZCBpbiBCdWZmZXIgTWFuYWdlciBpbiBj YXNlIG5ldyBjb25mbGljdGluZyBlbnRyeSB3ZXJlIGluc2VydGVkIGJ5CisgKiBjb25jdXJyZW50 IHByb2Nlc3MuCisgKi8KK3ZvaWQKK2hhc2hfcmV0dXJuX3RvX2ZyZWVsaXN0KEhUQUIgKmhhc2hw LAorCQkJCQkJY29uc3Qgdm9pZCAqZW50cnksCisJCQkJCQl1aW50MzIgaGFzaHZhbHVlKQorewor CUhBU0hIRFIgICAgKmhjdGwgPSBoYXNocC0+aGN0bDsKKwlpbnQJCQlmcmVlbGlzdF9pZHggPSBG UkVFTElTVF9JRFgoaGN0bCwgaGFzaHZhbHVlKTsKKwlIQVNIQlVDS0VUCWN1cnJCdWNrZXQ7CisK KwlpZiAoZW50cnkgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJY3VyckJ1Y2tldCA9IEVMRU1FTlRf RlJPTV9LRVkoZW50cnkpOworCisJLyogYWRkIHRoZSByZWNvcmQgdG8gdGhlIGFwcHJvcHJpYXRl IGZyZWVsaXN0LiAqLworCWZyZWVfbGlzdF9saW5rX2VudHJ5KGhjdGwsIGN1cnJCdWNrZXQsIGZy ZWVsaXN0X2lkeCk7Cit9CisKIC8qCiAgKiBBbGxvY2F0ZSBhIG5ldyBoYXNodGFibGUgZW50cnkg aWYgcG9zc2libGU7IHJldHVybiBOVUxMIGlmIG91dCBvZiBtZW1vcnkuCiAgKiAoT3IsIGlmIHRo ZSB1bmRlcmx5aW5nIHNwYWNlIGFsbG9jYXRvciB0aHJvd3MgZXJyb3IgZm9yIG91dC1vZi1tZW1v cnksCkBAIC0xMzQ5LDExICsxNjAwLDYgQEAgZ2V0X2hhc2hfZW50cnkoSFRBQiAqaGFzaHAsIGlu dCBmcmVlbGlzdF9pZHgpCiAJCQkJCWhjdGwtPmZyZWVMaXN0W2JvcnJvd19mcm9tX2lkeF0uZnJl ZUxpc3QgPSBuZXdFbGVtZW50LT5saW5rOwogCQkJCQlTcGluTG9ja1JlbGVhc2UoJihoY3RsLT5m cmVlTGlzdFtib3Jyb3dfZnJvbV9pZHhdLm11dGV4KSk7CiAKLQkJCQkJLyogY2FyZWZ1bDogY291 bnQgdGhlIG5ldyBlbGVtZW50IGluIGl0cyBwcm9wZXIgZnJlZWxpc3QgKi8KLQkJCQkJU3Bpbkxv Y2tBY3F1aXJlKCZoY3RsLT5mcmVlTGlzdFtmcmVlbGlzdF9pZHhdLm11dGV4KTsKLQkJCQkJaGN0 bC0+ZnJlZUxpc3RbZnJlZWxpc3RfaWR4XS5uZW50cmllcysrOwotCQkJCQlTcGluTG9ja1JlbGVh c2UoJmhjdGwtPmZyZWVMaXN0W2ZyZWVsaXN0X2lkeF0ubXV0ZXgpOwotCiAJCQkJCXJldHVybiBu ZXdFbGVtZW50OwogCQkJCX0KIApAQCAtMTM2NSw5ICsxNjExLDggQEAgZ2V0X2hhc2hfZW50cnko SFRBQiAqaGFzaHAsIGludCBmcmVlbGlzdF9pZHgpCiAJCX0KIAl9CiAKLQkvKiByZW1vdmUgZW50 cnkgZnJvbSBmcmVlbGlzdCwgYnVtcCBuZW50cmllcyAqLworCS8qIHJlbW92ZSBlbnRyeSBmcm9t IGZyZWVsaXN0ICovCiAJaGN0bC0+ZnJlZUxpc3RbZnJlZWxpc3RfaWR4XS5mcmVlTGlzdCA9IG5l d0VsZW1lbnQtPmxpbms7Ci0JaGN0bC0+ZnJlZUxpc3RbZnJlZWxpc3RfaWR4XS5uZW50cmllcysr OwogCiAJaWYgKElTX1BBUlRJVElPTkVEKGhjdGwpKQogCQlTcGluTG9ja1JlbGVhc2UoJmhjdGwt PmZyZWVMaXN0W2ZyZWVsaXN0X2lkeF0ubXV0ZXgpOwpAQCAtMTM4Miw3ICsxNjI3LDcgQEAgbG9u ZwogaGFzaF9nZXRfbnVtX2VudHJpZXMoSFRBQiAqaGFzaHApCiB7CiAJaW50CQkJaTsKLQlsb25n CQlzdW0gPSBoYXNocC0+aGN0bC0+ZnJlZUxpc3RbMF0ubmVudHJpZXM7CisJbG9uZwkJc3VtID0g aGFzaHAtPmhjdGwtPmZyZWVMaXN0WzBdLm5lbnRyaWVzLnZhbHVlOwogCiAJLyoKIAkgKiBXZSBj dXJyZW50bHkgZG9uJ3QgYm90aGVyIHdpdGggYWNxdWlyaW5nIHRoZSBtdXRleGVzOyBpdCdzIG9u bHkKQEAgLTEzOTIsNyArMTYzNyw3IEBAIGhhc2hfZ2V0X251bV9lbnRyaWVzKEhUQUIgKmhhc2hw KQogCWlmIChJU19QQVJUSVRJT05FRChoYXNocC0+aGN0bCkpCiAJewogCQlmb3IgKGkgPSAxOyBp IDwgTlVNX0ZSRUVMSVNUUzsgaSsrKQotCQkJc3VtICs9IGhhc2hwLT5oY3RsLT5mcmVlTGlzdFtp XS5uZW50cmllczsKKwkJCXN1bSArPSBoYXNocC0+aGN0bC0+ZnJlZUxpc3RbaV0ubmVudHJpZXMu dmFsdWU7CiAJfQogCiAJcmV0dXJuIHN1bTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3Jh Z2UvYnVmX2ludGVybmFscy5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZfaW50ZXJuYWxzLmgK aW5kZXggMzNmY2FmNWM5YTguLjRhMWQ2YjM3ODIxIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9z dG9yYWdlL2J1Zl9pbnRlcm5hbHMuaAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zl9pbnRl cm5hbHMuaApAQCAtMzI3LDggKzMyNywxMCBAQCBleHRlcm4gU2l6ZSBCdWZUYWJsZVNobWVtU2l6 ZShpbnQgc2l6ZSk7CiBleHRlcm4gdm9pZCBJbml0QnVmVGFibGUoaW50IHNpemUpOwogZXh0ZXJu IHVpbnQzMiBCdWZUYWJsZUhhc2hDb2RlKEJ1ZmZlclRhZyAqdGFnUHRyKTsKIGV4dGVybiBpbnQJ QnVmVGFibGVMb29rdXAoQnVmZmVyVGFnICp0YWdQdHIsIHVpbnQzMiBoYXNoY29kZSk7Ci1leHRl cm4gaW50CUJ1ZlRhYmxlSW5zZXJ0KEJ1ZmZlclRhZyAqdGFnUHRyLCB1aW50MzIgaGFzaGNvZGUs IGludCBidWZfaWQpOwotZXh0ZXJuIHZvaWQgQnVmVGFibGVEZWxldGUoQnVmZmVyVGFnICp0YWdQ dHIsIHVpbnQzMiBoYXNoY29kZSk7CitleHRlcm4gdm9pZCBCdWZUYWJsZUluc2VydChCdWZmZXJU YWcgKnRhZ1B0ciwgdWludDMyIGhhc2hjb2RlLCBpbnQgYnVmX2lkLAorCQkJCQkJICAgdm9pZCAq b2xkZWxlbSk7CitleHRlcm4gdm9pZCAqQnVmVGFibGVEZWxldGUoQnVmZmVyVGFnICp0YWdQdHIs IHVpbnQzMiBoYXNoY29kZSk7CitleHRlcm4gdm9pZCBCdWZUYWJsZUZyZWVEZWxldGVkKHZvaWQg Km9sZGVsZW0sIHVpbnQzMiBoYXNoY29kZSk7CiAKIC8qIGxvY2FsYnVmLmMgKi8KIGV4dGVybiBQ cmVmZXRjaEJ1ZmZlclJlc3VsdCBQcmVmZXRjaExvY2FsQnVmZmVyKFNNZ3JSZWxhdGlvbiBzbWdy LApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvaHNlYXJjaC5oIGIvc3JjL2luY2x1ZGUv dXRpbHMvaHNlYXJjaC5oCmluZGV4IGQ3YWYwMjM5YzhjLi4xZDU4NmVmMTE2OSAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvdXRpbHMvaHNlYXJjaC5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL2hz ZWFyY2guaApAQCAtMTUwLDQgKzE1MCwyMSBAQCBleHRlcm4gU2l6ZSBoYXNoX2dldF9zaGFyZWRf c2l6ZShIQVNIQ1RMICppbmZvLCBpbnQgZmxhZ3MpOwogZXh0ZXJuIHZvaWQgQXRFT1hhY3RfSGFz aFRhYmxlcyhib29sIGlzQ29tbWl0KTsKIGV4dGVybiB2b2lkIEF0RU9TdWJYYWN0X0hhc2hUYWJs ZXMoYm9vbCBpc0NvbW1pdCwgaW50IG5lc3REZXB0aCk7CiAKKy8qCisgKiBCdWZmZXIgTWFuYWdl ciBvcHRpbWl6YXRpb24gdXRpbGl0aWVzLgorICogVGhleSBtYWRlIHRvIGF2b2lkIHRha2luZyB0 d28gcGFydGl0aW9uIGxvY2tzIHNpbXVsdGFuZW91c2x5IGFuZAorICogc2tpcCBpbnRlcnJhY3Rp b24gd2l0aCBkeW5haGFzaCdzIGZyZWVsaXN0LgorICogVXNlIHRoZW0gY2FyZWZ1bGx5IGFuZCBv bmx5IGlmIHRoZXkgZ2l2ZXMgbWVhbmluZ2Z1bCBpbXByb3ZlbWVudC4KKyAqLworZXh0ZXJuIHZv aWQgKmhhc2hfaW5zZXJ0X3dpdGhfaGFzaF9ub2NoZWNrKEhUQUIgKmhhc2hwLAorCQkJCQkJCQkJ CSAgIGNvbnN0IHZvaWQgKmtleVB0ciwKKwkJCQkJCQkJCQkgICB1aW50MzIgaGFzaHZhbHVlLAor CQkJCQkJCQkJCSAgIHZvaWQgKm9sZGVudHJ5KTsKK2V4dGVybiB2b2lkICpoYXNoX2RlbGV0ZV9z a2lwX2ZyZWVsaXN0KEhUQUIgKmhhc2hwLAorCQkJCQkJCQkJICAgY29uc3Qgdm9pZCAqa2V5UHRy LAorCQkJCQkJCQkJICAgdWludDMyIGhhc2h2YWx1ZSk7CitleHRlcm4gdm9pZCBoYXNoX3JldHVy bl90b19mcmVlbGlzdChIVEFCICpoYXNocCwKKwkJCQkJCQkJCWNvbnN0IHZvaWQgKmVudHJ5LAor CQkJCQkJCQkJdWludDMyIGhhc2h2YWx1ZSk7CisKICNlbmRpZgkJCQkJCQkvKiBIU0VBUkNIX0gg Ki8KLS0gCjIuMzQuMQoK --=-O0z5lIRpAhdiJg4dRWca--