Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1to0d0-004lHM-My for pgsql-hackers@arkaria.postgresql.org; Fri, 28 Feb 2025 13:42:12 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1to0d1-006aQu-8g for pgsql-hackers@arkaria.postgresql.org; Fri, 28 Feb 2025 13:42:09 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1to0d0-006aPn-8S for pgsql-hackers@lists.postgresql.org; Fri, 28 Feb 2025 13:42:09 +0000 Received: from mail.postgrespro.ru ([93.174.131.139]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1to0cs-000AfP-0a for pgsql-hackers@lists.postgresql.org; Fri, 28 Feb 2025 13:42:07 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mx2023; t=1740750118; bh=DbJOGG+fPGagqwcAjm4gA8Xcjo9MgAbCbp0xvkHl3LE=; h=Date:From:To:Cc:Subject:In-Reply-To:References:Message-ID:From; b=gjO/Hpacc8BayQdyZQ6yPAGqQ66F9Ol4JVj5VzBRLzd7s0lqAX3uGae1icGzAMqxI xRL9N7I2Q10eEIlEpQ1wp4OzaqkJNQd+g+KtsOTUt+fnfO/JH7h8tQfS5tTh1Ir+5g TXQNGV6yZZjT35kBVcN1i8a5cSAzhP31DNxrsxhwyPJOL/qpd59cLcRXcsSCBt02X8 gJ4bUI4+EhusEuS/V0m5o/TNtTFjW3EsuOy7C2QuNEYPTYEWWPNDWq0SrtuxxSadQx FVd6TRAUM4vUQno1xfF98+ALiQXDXgdmA91O3pXmgGDzGjAZYG2H9kpN/8CDb9++gh Ry4o0OBzPoKbw== Received: from mail.postgrespro.ru (webmail-slave-mstn.l.postgrespro.ru [192.168.2.28]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (Client did not present a certificate) (Authenticated sender: m.litsarev@postgrespro.ru) by mail.postgrespro.ru (Postfix/587) with ESMTPSA id 4F45E601DF; Fri, 28 Feb 2025 16:41:58 +0300 (MSK) MIME-Version: 1.0 Date: Fri, 28 Feb 2025 16:41:58 +0300 From: m.litsarev@postgrespro.ru To: Michael Paquier Cc: pgsql-hackers@lists.postgresql.org Subject: Re: SQL function which allows to distinguish a server being in point in time recovery mode and an ordinary replica In-Reply-To: <1a0ceb98059fcb0994c47ba44cd6f2a1@postgrespro.ru> References: <06c02ef916d85e77778e5cdfdf67a3df@postgrespro.ru> <4ba66566b84df983c881b996eb8831f1@postgrespro.ru> <1a0ceb98059fcb0994c47ba44cd6f2a1@postgrespro.ru> Message-ID: X-Sender: m.litsarev@postgrespro.ru Content-Type: multipart/mixed; boundary="=_327a17268506bc2f1282d5d09ad2ed13" X-KSMG-AntiPhishing: NotDetected, bases: 2025/02/28 06:59:00 X-KSMG-AntiSpam-Interceptor-Info: not scanned X-KSMG-AntiSpam-Status: not scanned, disabled by settings X-KSMG-AntiVirus: Kaspersky Secure Mail Gateway, version 2.1.0.7854, bases: 2025/02/28 06:44:00 #27492638 X-KSMG-AntiVirus-Status: NotDetected, skipped X-KSMG-LinksScanning: not scanned, disabled by settings X-KSMG-Message-Action: skipped X-KSMG-Rule-ID: 1 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --=_327a17268506bc2f1282d5d09ad2ed13 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII; format=flowed Hi! Rebased the patch. Respectfully, Mikhail Litsarev, Postgres Professional: https://postgrespro.com --=_327a17268506bc2f1282d5d09ad2ed13 Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=v5-0001-Replace-recovery-boolean-flags-with-a-bits32-set.patch Content-Disposition: attachment; filename=v5-0001-Replace-recovery-boolean-flags-with-a-bits32-set.patch; size=32493 RnJvbSA2N2IxOTBjZTE1ZjhiYTc0ODBiYTE2OTFiODA0YjI3Zjk2ZmQ1NTQwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNaWtoYWlsIExpdHNhcmV2IDxtLmxpdHNhcmV2QHBvc3RncmVz cHJvLnJ1PgpEYXRlOiBGcmksIDEwIEphbiAyMDI1IDIxOjIzOjAyICswMzAwClN1YmplY3Q6IFtQ QVRDSCB2NSAxLzJdIFJlcGxhY2UgcmVjb3ZlcnkgYm9vbGVhbiBmbGFncyB3aXRoIGEgYml0czMy IHNldC4KCk1vdmUgbG9jYWwgYm9vbGVhbnMgQXJjaGl2ZVJlY292ZXJ5UmVxdWVzdGVkLCBJbkFy Y2hpdmVSZWNvdmVyeSwKU3RhbmRieU1vZGVSZXF1ZXN0ZWQsIFN0YW5kYnlNb2RlLCBMb2NhbEhv dFN0YW5kYnlBY3RpdmUsCkxvY2FsUHJvbW90ZUlzVHJpZ2dlcmVkIGludG8gbG9jYWxSZWNvdmVy eUZsYWdzIGJpdHNldC4KCk1vdmUgU2hhcmVkSG90U3RhbmRieUFjdGl2ZSwgU2hhcmVkUHJvbW90 ZUlzVHJpZ2dlcmVkIG1lbWJlcnMgb2YKWExvZ1JlY292ZXJ5Q3RsRGF0YSBpbnRvIHNoYXJlZFJl Y292ZXJ5RmxhZ3MgYml0c2V0LgoKUmVmYWN0b3IgdGhlIGNvZGUgYWNjb3JkaW5nIHRvIHRoZSBj aGFuZ2VzLgotLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3RpbWVsaW5lLmMgICAgICB8 ICAgNiArLQogc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jICAgICAgICAgIHwgIDI2 ICstLQogc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ2FyY2hpdmUuYyAgIHwgICA0ICst CiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9ncmVjb3ZlcnkuYyAgfCAyMjEgKysrKysr KysrKy0tLS0tLS0tLS0tCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Nsb3RzeW5j LmMgfCAgIDIgKy0KIHNyYy9pbmNsdWRlL2FjY2Vzcy94bG9nX2ludGVybmFsLmggICAgICAgICB8 ICAgNyArLQogc3JjL2luY2x1ZGUvYWNjZXNzL3hsb2dyZWNvdmVyeS5oICAgICAgICAgIHwgIDM0 ICsrKy0KIDcgZmlsZXMgY2hhbmdlZCwgMTYxIGluc2VydGlvbnMoKyksIDEzOSBkZWxldGlvbnMo LSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS90aW1lbGluZS5jIGIv c3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vdGltZWxpbmUuYwppbmRleCBhMjdmMjdjYzAzNy4u YzlmNTNjNGI2NjcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3RpbWVs aW5lLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vdGltZWxpbmUuYwpAQCAtOTMs NyArOTMsNyBAQCByZWFkVGltZUxpbmVIaXN0b3J5KFRpbWVMaW5lSUQgdGFyZ2V0VExJKQogCQly ZXR1cm4gbGlzdF9tYWtlMShlbnRyeSk7CiAJfQogCi0JaWYgKEFyY2hpdmVSZWNvdmVyeVJlcXVl c3RlZCkKKwlpZiAoQXJjaGl2ZVJlY292ZXJ5UmVxdWVzdGVkKCkpCiAJewogCQlUTEhpc3RvcnlG aWxlTmFtZShoaXN0Zm5hbWUsIHRhcmdldFRMSSk7CiAJCWZyb21BcmNoaXZlID0KQEAgLTIyOSw3 ICsyMjksNyBAQCBleGlzdHNUaW1lTGluZUhpc3RvcnkoVGltZUxpbmVJRCBwcm9iZVRMSSkKIAlp ZiAocHJvYmVUTEkgPT0gMSkKIAkJcmV0dXJuIGZhbHNlOwogCi0JaWYgKEFyY2hpdmVSZWNvdmVy eVJlcXVlc3RlZCkKKwlpZiAoQXJjaGl2ZVJlY292ZXJ5UmVxdWVzdGVkKCkpCiAJewogCQlUTEhp c3RvcnlGaWxlTmFtZShoaXN0Zm5hbWUsIHByb2JlVExJKTsKIAkJUmVzdG9yZUFyY2hpdmVkRmls ZShwYXRoLCBoaXN0Zm5hbWUsICJSRUNPVkVSWUhJU1RPUlkiLCAwLCBmYWxzZSk7CkBAIC0zMzEs NyArMzMxLDcgQEAgd3JpdGVUaW1lTGluZUhpc3RvcnkoVGltZUxpbmVJRCBuZXdUTEksIFRpbWVM aW5lSUQgcGFyZW50VExJLAogCS8qCiAJICogSWYgYSBoaXN0b3J5IGZpbGUgZXhpc3RzIGZvciB0 aGUgcGFyZW50LCBjb3B5IGl0IHZlcmJhdGltCiAJICovCi0JaWYgKEFyY2hpdmVSZWNvdmVyeVJl cXVlc3RlZCkKKwlpZiAoQXJjaGl2ZVJlY292ZXJ5UmVxdWVzdGVkKCkpCiAJewogCQlUTEhpc3Rv cnlGaWxlTmFtZShoaXN0Zm5hbWUsIHBhcmVudFRMSSk7CiAJCVJlc3RvcmVBcmNoaXZlZEZpbGUo cGF0aCwgaGlzdGZuYW1lLCAiUkVDT1ZFUllISVNUT1JZIiwgMCwgZmFsc2UpOwpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNz L3RyYW5zYW0veGxvZy5jCmluZGV4IDc5OWZjNzM5ZTE4Li5mM2FmNzMyYjIyOSAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jCisrKyBiL3NyYy9iYWNrZW5kL2Fj Y2Vzcy90cmFuc2FtL3hsb2cuYwpAQCAtNTQzNCw3ICs1NDM0LDcgQEAgQ2hlY2tSZXF1aXJlZFBh cmFtZXRlclZhbHVlcyh2b2lkKQogCSAqIEZvciBhcmNoaXZlIHJlY292ZXJ5LCB0aGUgV0FMIG11 c3QgYmUgZ2VuZXJhdGVkIHdpdGggYXQgbGVhc3QgJ3JlcGxpY2EnCiAJICogd2FsX2xldmVsLgog CSAqLwotCWlmIChBcmNoaXZlUmVjb3ZlcnlSZXF1ZXN0ZWQgJiYgQ29udHJvbEZpbGUtPndhbF9s ZXZlbCA9PSBXQUxfTEVWRUxfTUlOSU1BTCkKKwlpZiAoQXJjaGl2ZVJlY292ZXJ5UmVxdWVzdGVk KCkgJiYgQ29udHJvbEZpbGUtPndhbF9sZXZlbCA9PSBXQUxfTEVWRUxfTUlOSU1BTCkKIAl7CiAJ CWVyZXBvcnQoRkFUQUwsCiAJCQkJKGVycmNvZGUoRVJSQ09ERV9PQkpFQ1RfTk9UX0lOX1BSRVJF UVVJU0lURV9TVEFURSksCkBAIC01NDQ3LDcgKzU0NDcsNyBAQCBDaGVja1JlcXVpcmVkUGFyYW1l dGVyVmFsdWVzKHZvaWQpCiAJICogRm9yIEhvdCBTdGFuZGJ5LCB0aGUgV0FMIG11c3QgYmUgZ2Vu ZXJhdGVkIHdpdGggJ3JlcGxpY2EnIG1vZGUsIGFuZCB3ZQogCSAqIG11c3QgaGF2ZSBhdCBsZWFz dCBhcyBtYW55IGJhY2tlbmQgc2xvdHMgYXMgdGhlIHByaW1hcnkuCiAJICovCi0JaWYgKEFyY2hp dmVSZWNvdmVyeVJlcXVlc3RlZCAmJiBFbmFibGVIb3RTdGFuZGJ5KQorCWlmIChBcmNoaXZlUmVj b3ZlcnlSZXF1ZXN0ZWQoKSAmJiBFbmFibGVIb3RTdGFuZGJ5KQogCXsKIAkJLyogV2UgaWdub3Jl IGF1dG92YWN1dW1fd29ya2VyX3Nsb3RzIHdoZW4gd2UgbWFrZSB0aGlzIHRlc3QuICovCiAJCVJl Y292ZXJ5UmVxdWlyZXNJbnRQYXJhbWV0ZXIoIm1heF9jb25uZWN0aW9ucyIsCkBAIC01NjA3LDgg KzU2MDcsOCBAQCBTdGFydHVwWExPRyh2b2lkKQogCSAqCiAJICogSW5pdFdhbFJlY292ZXJ5IGFu YWx5emVzIHRoZSBjb250cm9sIGZpbGUgYW5kIHRoZSBiYWNrdXAgbGFiZWwgZmlsZSwgaWYKIAkg KiBhbnkuICBJdCB1cGRhdGVzIHRoZSBpbi1tZW1vcnkgQ29udHJvbEZpbGUgYnVmZmVyIGFjY29y ZGluZyB0byB0aGUKLQkgKiBzdGFydGluZyBjaGVja3BvaW50LCBhbmQgc2V0cyBJblJlY292ZXJ5 IGFuZCBBcmNoaXZlUmVjb3ZlcnlSZXF1ZXN0ZWQuCi0JICogSXQgYWxzbyBhcHBsaWVzIHRoZSB0 YWJsZXNwYWNlIG1hcCBmaWxlLCBpZiBhbnkuCisJICogc3RhcnRpbmcgY2hlY2twb2ludCwgYW5k IHNldHMgU1hfQVJDSElWRV9SRUNPVkVSWV9SRVFVRVNURUQgYW5kCisJICogSW5SZWNvdmVyeS4g SXQgYWxzbyBhcHBsaWVzIHRoZSB0YWJsZXNwYWNlIG1hcCBmaWxlLCBpZiBhbnkuCiAJICovCiAJ SW5pdFdhbFJlY292ZXJ5KENvbnRyb2xGaWxlLCAmd2FzU2h1dGRvd24sCiAJCQkJCSZoYXZlQmFj a3VwTGFiZWwsICZoYXZlVGJsc3BjTWFwKTsKQEAgLTU3NDAsNyArNTc0MCw3IEBAIFN0YXJ0dXBY TE9HKHZvaWQpCiAJewogCQkvKiBJbml0aWFsaXplIHN0YXRlIGZvciBSZWNvdmVyeUluUHJvZ3Jl c3MoKSAqLwogCQlTcGluTG9ja0FjcXVpcmUoJlhMb2dDdGwtPmluZm9fbGNrKTsKLQkJaWYgKElu QXJjaGl2ZVJlY292ZXJ5KQorCQlpZiAoSW5BcmNoaXZlUmVjb3ZlcnkoKSkKIAkJCVhMb2dDdGwt PlNoYXJlZFJlY292ZXJ5U3RhdGUgPSBSRUNPVkVSWV9TVEFURV9BUkNISVZFOwogCQllbHNlCiAJ CQlYTG9nQ3RsLT5TaGFyZWRSZWNvdmVyeVN0YXRlID0gUkVDT1ZFUllfU1RBVEVfQ1JBU0g7CkBA IC01NzkzLDcgKzU3OTMsNyBAQCBTdGFydHVwWExPRyh2b2lkKQogCQkgKiBzdGFydHVwIHByb2Nl c3MgdG8gdGhpbmsgdGhhdCB0aGVyZSBhcmUgc3RpbGwgaW52YWxpZCBwYWdlCiAJCSAqIHJlZmVy ZW5jZXMgd2hlbiBjaGVja2luZyBmb3IgZGF0YSBjb25zaXN0ZW5jeS4KIAkJICovCi0JCWlmIChJ bkFyY2hpdmVSZWNvdmVyeSkKKwkJaWYgKEluQXJjaGl2ZVJlY292ZXJ5KCkpCiAJCXsKIAkJCUxv Y2FsTWluUmVjb3ZlcnlQb2ludCA9IENvbnRyb2xGaWxlLT5taW5SZWNvdmVyeVBvaW50OwogCQkJ TG9jYWxNaW5SZWNvdmVyeVBvaW50VExJID0gQ29udHJvbEZpbGUtPm1pblJlY292ZXJ5UG9pbnRU TEk7CkBAIC01ODI3LDcgKzU4MjcsNyBAQCBTdGFydHVwWExPRyh2b2lkKQogCQkgKiBjb250cm9s IGZpbGUgYW5kIHdlJ3ZlIGVzdGFibGlzaGVkIGEgcmVjb3Zlcnkgc25hcHNob3QgZnJvbSBhCiAJ CSAqIHJ1bm5pbmcteGFjdHMgV0FMIHJlY29yZC4KIAkJICovCi0JCWlmIChBcmNoaXZlUmVjb3Zl cnlSZXF1ZXN0ZWQgJiYgRW5hYmxlSG90U3RhbmRieSkKKwkJaWYgKEFyY2hpdmVSZWNvdmVyeVJl cXVlc3RlZCgpICYmIEVuYWJsZUhvdFN0YW5kYnkpCiAJCXsKIAkJCVRyYW5zYWN0aW9uSWQgKnhp ZHM7CiAJCQlpbnQJCQlueGlkczsKQEAgLTU5NDAsNyArNTk0MCw3IEBAIFN0YXJ0dXBYTE9HKHZv aWQpCiAJCSAqIHJlY292ZXIgZnJvbSBhbiBvbmxpbmUgYmFja3VwIGJ1dCBuZXZlciBjYWxsZWQg cGdfYmFja3VwX3N0b3AoKSwgb3IKIAkJICogeW91IGRpZG4ndCBhcmNoaXZlIGFsbCB0aGUgV0FM IG5lZWRlZC4KIAkJICovCi0JCWlmIChBcmNoaXZlUmVjb3ZlcnlSZXF1ZXN0ZWQgfHwgQ29udHJv bEZpbGUtPmJhY2t1cEVuZFJlcXVpcmVkKQorCQlpZiAoQXJjaGl2ZVJlY292ZXJ5UmVxdWVzdGVk KCkgfHwgQ29udHJvbEZpbGUtPmJhY2t1cEVuZFJlcXVpcmVkKQogCQl7CiAJCQlpZiAoIVhMb2dS ZWNQdHJJc0ludmFsaWQoQ29udHJvbEZpbGUtPmJhY2t1cFN0YXJ0UG9pbnQpIHx8IENvbnRyb2xG aWxlLT5iYWNrdXBFbmRSZXF1aXJlZCkKIAkJCQllcmVwb3J0KEZBVEFMLApAQCAtNTk5Miw3ICs1 OTkyLDcgQEAgU3RhcnR1cFhMT0codm9pZCkKIAkgKiBJbiBhIG5vcm1hbCBjcmFzaCByZWNvdmVy eSwgd2UgY2FuIGp1c3QgZXh0ZW5kIHRoZSB0aW1lbGluZSB3ZSB3ZXJlIGluLgogCSAqLwogCW5l d1RMSSA9IGVuZE9mUmVjb3ZlcnlJbmZvLT5sYXN0UmVjVExJOwotCWlmIChBcmNoaXZlUmVjb3Zl cnlSZXF1ZXN0ZWQpCisJaWYgKEFyY2hpdmVSZWNvdmVyeVJlcXVlc3RlZCgpKQogCXsKIAkJbmV3 VExJID0gZmluZE5ld2VzdFRpbWVMaW5lKHJlY292ZXJ5VGFyZ2V0VExJKSArIDE7CiAJCWVyZXBv cnQoTE9HLApAQCAtNjE4NSw3ICs2MTg1LDcgQEAgU3RhcnR1cFhMT0codm9pZCkKIAlYTG9nUmVw b3J0UGFyYW1ldGVycygpOwogCiAJLyogSWYgdGhpcyBpcyBhcmNoaXZlIHJlY292ZXJ5LCBwZXJm b3JtIHBvc3QtcmVjb3ZlcnkgY2xlYW51cCBhY3Rpb25zLiAqLwotCWlmIChBcmNoaXZlUmVjb3Zl cnlSZXF1ZXN0ZWQpCisJaWYgKEFyY2hpdmVSZWNvdmVyeVJlcXVlc3RlZCgpKQogCQlDbGVhbnVw QWZ0ZXJBcmNoaXZlUmVjb3ZlcnkoRW5kT2ZMb2dUTEksIEVuZE9mTG9nLCBuZXdUTEkpOwogCiAJ LyoKQEAgLTYzNDQsNyArNjM0NCw3IEBAIFBlcmZvcm1SZWNvdmVyeVhMb2dBY3Rpb24odm9pZCkK IAkgKiBvZiBhIGZ1bGwgY2hlY2twb2ludC4gQSBjaGVja3BvaW50IGlzIHJlcXVlc3RlZCBsYXRl ciwgYWZ0ZXIgd2UncmUKIAkgKiBmdWxseSBvdXQgb2YgcmVjb3ZlcnkgbW9kZSBhbmQgYWxyZWFk eSBhY2NlcHRpbmcgcXVlcmllcy4KIAkgKi8KLQlpZiAoQXJjaGl2ZVJlY292ZXJ5UmVxdWVzdGVk ICYmIElzVW5kZXJQb3N0bWFzdGVyICYmCisJaWYgKEFyY2hpdmVSZWNvdmVyeVJlcXVlc3RlZCgp ICYmIElzVW5kZXJQb3N0bWFzdGVyICYmCiAJCVByb21vdGVJc1RyaWdnZXJlZCgpKQogCXsKIAkJ cHJvbW90ZWQgPSB0cnVlOwpAQCAtODMzOCw3ICs4MzM4LDcgQEAgeGxvZ19yZWRvKFhMb2dSZWFk ZXJTdGF0ZSAqcmVjb3JkKQogCQkgKiByZWNvcmQsIHRoZSBiYWNrdXAgd2FzIGNhbmNlbGVkIGFu ZCB0aGUgZW5kLW9mLWJhY2t1cCByZWNvcmQgd2lsbAogCQkgKiBuZXZlciBhcnJpdmUuCiAJCSAq LwotCQlpZiAoQXJjaGl2ZVJlY292ZXJ5UmVxdWVzdGVkICYmCisJCWlmIChBcmNoaXZlUmVjb3Zl cnlSZXF1ZXN0ZWQoKSAmJgogCQkJIVhMb2dSZWNQdHJJc0ludmFsaWQoQ29udHJvbEZpbGUtPmJh Y2t1cFN0YXJ0UG9pbnQpICYmCiAJCQlYTG9nUmVjUHRySXNJbnZhbGlkKENvbnRyb2xGaWxlLT5i YWNrdXBFbmRQb2ludCkpCiAJCQllcmVwb3J0KFBBTklDLApAQCAtODU3OSw3ICs4NTc5LDcgQEAg eGxvZ19yZWRvKFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKQogCQkgKiBsb2NhbCBjb3BpZXMgY2Fu bm90IGJlIHVwZGF0ZWQgYXMgbG9uZyBhcyBjcmFzaCByZWNvdmVyeSBpcwogCQkgKiBoYXBwZW5p bmcgYW5kIHdlIGV4cGVjdCBhbGwgdGhlIFdBTCB0byBiZSByZXBsYXllZC4KIAkJICovCi0JCWlm IChJbkFyY2hpdmVSZWNvdmVyeSkKKwkJaWYgKEluQXJjaGl2ZVJlY292ZXJ5KCkpCiAJCXsKIAkJ CUxvY2FsTWluUmVjb3ZlcnlQb2ludCA9IENvbnRyb2xGaWxlLT5taW5SZWNvdmVyeVBvaW50Owog CQkJTG9jYWxNaW5SZWNvdmVyeVBvaW50VExJID0gQ29udHJvbEZpbGUtPm1pblJlY292ZXJ5UG9p bnRUTEk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nYXJjaGl2 ZS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ2FyY2hpdmUuYwppbmRleCAxZWYx NzEzYzkxYS4uYWQzNzlhY2MzMGEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFu c2FtL3hsb2dhcmNoaXZlLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ2Fy Y2hpdmUuYwpAQCAtNjgsNyArNjgsNyBAQCBSZXN0b3JlQXJjaGl2ZWRGaWxlKGNoYXIgKnBhdGgs IGNvbnN0IGNoYXIgKnhsb2dmbmFtZSwKIAkgKiBJZ25vcmUgcmVzdG9yZV9jb21tYW5kIHdoZW4g bm90IGluIGFyY2hpdmUgcmVjb3ZlcnkgKG1lYW5pbmcgd2UgYXJlIGluCiAJICogY3Jhc2ggcmVj b3ZlcnkpLgogCSAqLwotCWlmICghQXJjaGl2ZVJlY292ZXJ5UmVxdWVzdGVkKQorCWlmICghQXJj aGl2ZVJlY292ZXJ5UmVxdWVzdGVkKCkpCiAJCWdvdG8gbm90X2F2YWlsYWJsZTsKIAogCS8qIElu IHN0YW5kYnkgbW9kZSwgcmVzdG9yZV9jb21tYW5kIG1pZ2h0IG5vdCBiZSBzdXBwbGllZCAqLwpA QCAtMjA1LDcgKzIwNSw3IEBAIFJlc3RvcmVBcmNoaXZlZEZpbGUoY2hhciAqcGF0aCwgY29uc3Qg Y2hhciAqeGxvZ2ZuYW1lLAogCQkJCSAqIGluY29ycmVjdGx5IGNvbmNsdWRlIHdlJ3ZlIHJlYWNo ZWQgdGhlIGVuZCBvZiBXQUwgYW5kIHdlJ3JlCiAJCQkJICogZG9uZSByZWNvdmVyaW5nIC4uLgog CQkJCSAqLwotCQkJCWlmIChTdGFuZGJ5TW9kZSAmJiBzdGF0X2J1Zi5zdF9zaXplIDwgZXhwZWN0 ZWRTaXplKQorCQkJCWlmIChJblN0YW5kYnlNb2RlKCkgJiYgc3RhdF9idWYuc3Rfc2l6ZSA8IGV4 cGVjdGVkU2l6ZSkKIAkJCQkJZWxldmVsID0gREVCVUcxOwogCQkJCWVsc2UKIAkJCQkJZWxldmVs ID0gRkFUQUw7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9ncmVj b3ZlcnkuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dyZWNvdmVyeS5jCmluZGV4 IDUyZjUzZmExMmUwLi4zZDFmZTk2NWE0NSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNz L3RyYW5zYW0veGxvZ3JlY292ZXJ5LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0v eGxvZ3JlY292ZXJ5LmMKQEAgLTEyNCwzMCArMTI0LDcgQEAgVGltZUxpbmVJRAlyZWNvdmVyeVRh cmdldFRMSSA9IDA7CiBzdGF0aWMgTGlzdCAqZXhwZWN0ZWRUTEVzOwogc3RhdGljIFRpbWVMaW5l SUQgY3VyRmlsZVRMSTsKIAotLyoKLSAqIFdoZW4gQXJjaGl2ZVJlY292ZXJ5UmVxdWVzdGVkIGlz IHNldCwgYXJjaGl2ZSByZWNvdmVyeSB3YXMgcmVxdWVzdGVkLAotICogaWUuIHNpZ25hbCBmaWxl cyB3ZXJlIHByZXNlbnQuICBXaGVuIEluQXJjaGl2ZVJlY292ZXJ5IGlzIHNldCwgd2UgYXJlCi0g KiBjdXJyZW50bHkgcmVjb3ZlcmluZyB1c2luZyBvZmZsaW5lIFhMT0cgYXJjaGl2ZXMuICBUaGVz ZSB2YXJpYWJsZXMgYXJlIG9ubHkKLSAqIHZhbGlkIGluIHRoZSBzdGFydHVwIHByb2Nlc3MuCi0g KgotICogV2hlbiBBcmNoaXZlUmVjb3ZlcnlSZXF1ZXN0ZWQgaXMgdHJ1ZSwgYnV0IEluQXJjaGl2 ZVJlY292ZXJ5IGlzIGZhbHNlLCB3ZSdyZQotICogY3VycmVudGx5IHBlcmZvcm1pbmcgY3Jhc2gg cmVjb3ZlcnkgdXNpbmcgb25seSBYTE9HIGZpbGVzIGluIHBnX3dhbCwgYnV0Ci0gKiB3aWxsIHN3 aXRjaCB0byB1c2luZyBvZmZsaW5lIFhMT0cgYXJjaGl2ZXMgYXMgc29vbiBhcyB3ZSByZWFjaCB0 aGUgZW5kIG9mCi0gKiBXQUwgaW4gcGdfd2FsLgotICovCi1ib29sCQlBcmNoaXZlUmVjb3ZlcnlS ZXF1ZXN0ZWQgPSBmYWxzZTsKLWJvb2wJCUluQXJjaGl2ZVJlY292ZXJ5ID0gZmFsc2U7Ci0KLS8q Ci0gKiBXaGVuIFN0YW5kYnlNb2RlUmVxdWVzdGVkIGlzIHNldCwgc3RhbmRieSBtb2RlIHdhcyBy ZXF1ZXN0ZWQsIGkuZS4KLSAqIHN0YW5kYnkuc2lnbmFsIGZpbGUgd2FzIHByZXNlbnQuICBXaGVu IFN0YW5kYnlNb2RlIGlzIHNldCwgd2UgYXJlIGN1cnJlbnRseQotICogaW4gc3RhbmRieSBtb2Rl LiAgVGhlc2UgdmFyaWFibGVzIGFyZSBvbmx5IHZhbGlkIGluIHRoZSBzdGFydHVwIHByb2Nlc3Mu Ci0gKiBUaGV5IHdvcmsgc2ltaWxhcmx5IHRvIEFyY2hpdmVSZWNvdmVyeVJlcXVlc3RlZCBhbmQg SW5BcmNoaXZlUmVjb3ZlcnkuCi0gKi8KLXN0YXRpYyBib29sIFN0YW5kYnlNb2RlUmVxdWVzdGVk ID0gZmFsc2U7Ci1ib29sCQlTdGFuZGJ5TW9kZSA9IGZhbHNlOwotCi0vKiB3YXMgYSBzaWduYWwg ZmlsZSBwcmVzZW50IGF0IHN0YXJ0dXA/ICovCisvKiBXYXMgYSBzaWduYWwgZmlsZSBwcmVzZW50 IGF0IHN0YXJ0dXA/ICovCiBzdGF0aWMgYm9vbCBzdGFuZGJ5X3NpZ25hbF9maWxlX2ZvdW5kID0g ZmFsc2U7CiBzdGF0aWMgYm9vbCByZWNvdmVyeV9zaWduYWxfZmlsZV9mb3VuZCA9IGZhbHNlOwog CkBAIC0xNzEsMTYgKzE0OCwxOSBAQCBzdGF0aWMgWExvZ1JlY1B0ciBSZWRvU3RhcnRMU04gPSBJ bnZhbGlkWExvZ1JlY1B0cjsKIHN0YXRpYyBUaW1lTGluZUlEIFJlZG9TdGFydFRMSSA9IDA7CiAK IC8qCi0gKiBMb2NhbCBjb3B5IG9mIFNoYXJlZEhvdFN0YW5kYnlBY3RpdmUgdmFyaWFibGUuIEZh bHNlIGFjdHVhbGx5IG1lYW5zICJub3QKLSAqIGtub3duLCBuZWVkIHRvIGNoZWNrIHRoZSBzaGFy ZWQgc3RhdGUiLgotICovCi1zdGF0aWMgYm9vbCBMb2NhbEhvdFN0YW5kYnlBY3RpdmUgPSBmYWxz ZTsKLQotLyoKLSAqIExvY2FsIGNvcHkgb2YgU2hhcmVkUHJvbW90ZUlzVHJpZ2dlcmVkIHZhcmlh YmxlLiBGYWxzZSBhY3R1YWxseSBtZWFucyAibm90Ci0gKiBrbm93biwgbmVlZCB0byBjaGVjayB0 aGUgc2hhcmVkIHN0YXRlIi4KKyAqIExvY2FsIGZsYWdzOgorICogU1hfQVJDSElWRV9SRUNPVkVS WV9SRVFVRVNURUQKKyAqIFNYX0lOX0FSQ0hJVkVfUkVDT1ZFUlkKKyAqIFNYX1NUQU5EQllfTU9E RV9SRVFVRVNURUQKKyAqIFNYX0lOX1NUQU5EQllfTU9ERQorICoKKyAqIGFuZCBsb2NhbCBjb3Bp ZXMgb2Ygc2hhcmVkUmVjb3ZlcnlGbGFnczoKKyAqIFNYX0hPVF9TVEFOREJZX0FDVElWRSwKKyAq IFNYX1BST01PVEVfSVNfVFJJR0dFUkVELgorICogSWYgc29tZSBmbGFnIGlzIG5vdCBzZXQsIHRo YXQgYWN0dWFsbHkgbWVhbnMgIm5vdCBrbm93biwgbmVlZCB0byBjaGVjaworICogdGhlIHNoYXJl ZCBzdGF0ZSIuCiAgKi8KLXN0YXRpYyBib29sIExvY2FsUHJvbW90ZUlzVHJpZ2dlcmVkID0gZmFs c2U7CitzdGF0aWMgYml0czMyIGxvY2FsUmVjb3ZlcnlGbGFncyA9IDA7CiAKIC8qIEhhcyB0aGUg cmVjb3ZlcnkgY29kZSByZXF1ZXN0ZWQgYSB3YWxyZWNlaXZlciB3YWtldXA/ICovCiBzdGF0aWMg Ym9vbCBkb1JlcXVlc3RXYWxSZWNlaXZlclJlcGx5OwpAQCAtMjk4LDIzICsyNzgsMTYgQEAgYm9v bAkJcmVhY2hlZENvbnNpc3RlbmN5ID0gZmFsc2U7CiBzdGF0aWMgY2hhciAqcmVwbGF5X2ltYWdl X21hc2tlZCA9IE5VTEw7CiBzdGF0aWMgY2hhciAqcHJpbWFyeV9pbWFnZV9tYXNrZWQgPSBOVUxM OwogCi0KIC8qCiAgKiBTaGFyZWQtbWVtb3J5IHN0YXRlIGZvciBXQUwgcmVjb3ZlcnkuCiAgKi8K IHR5cGVkZWYgc3RydWN0IFhMb2dSZWNvdmVyeUN0bERhdGEKIHsKIAkvKgotCSAqIFNoYXJlZEhv dFN0YW5kYnlBY3RpdmUgaW5kaWNhdGVzIGlmIHdlIGFsbG93IGhvdCBzdGFuZGJ5IHF1ZXJpZXMg dG8gYmUKLQkgKiBydW4uICBQcm90ZWN0ZWQgYnkgaW5mb19sY2suCisJICogVGhlIGJpdCBhcnJh eSBzdG9yZXMgdGhlIGZvbGxvd2luZyBzdGF0ZXMKKwkgKiBTWF9IT1RfU1RBTkRCWV9BQ1RJVkUs IFNYX1BST01PVEVfSVNfVFJJR0dFUkVELiBQcm90ZWN0ZWQgYnkgaW5mb19sY2suCiAJICovCi0J Ym9vbAkJU2hhcmVkSG90U3RhbmRieUFjdGl2ZTsKLQotCS8qCi0JICogU2hhcmVkUHJvbW90ZUlz VHJpZ2dlcmVkIGluZGljYXRlcyBpZiBhIHN0YW5kYnkgcHJvbW90aW9uIGhhcyBiZWVuCi0JICog dHJpZ2dlcmVkLiAgUHJvdGVjdGVkIGJ5IGluZm9fbGNrLgotCSAqLwotCWJvb2wJCVNoYXJlZFBy b21vdGVJc1RyaWdnZXJlZDsKKwliaXRzMzIJCXNoYXJlZFJlY292ZXJ5RmxhZ3M7CiAKIAkvKgog CSAqIHJlY292ZXJ5V2FrZXVwTGF0Y2ggaXMgdXNlZCB0byB3YWtlIHVwIHRoZSBzdGFydHVwIHBy b2Nlc3MgdG8gY29udGludWUKQEAgLTQ0MSw2ICs0MTQsNyBAQCBzdGF0aWMgYm9vbCBIb3RTdGFu ZGJ5QWN0aXZlSW5SZXBsYXkodm9pZCk7CiBzdGF0aWMgdm9pZCBTZXRDdXJyZW50Q2h1bmtTdGFy dFRpbWUoVGltZXN0YW1wVHogeHRpbWUpOwogc3RhdGljIHZvaWQgU2V0TGF0ZXN0WFRpbWUoVGlt ZXN0YW1wVHogeHRpbWUpOwogCitzdGF0aWMgYm9vbCBTdGFuZGJ5TW9kZVJlcXVlc3RlZCh2b2lk KTsKIC8qCiAgKiBJbml0aWFsaXphdGlvbiBvZiBzaGFyZWQgbWVtb3J5IGZvciBXQUwgcmVjb3Zl cnkKICAqLwpAQCAtNDc4LDcgKzQ1Miw3IEBAIFhMb2dSZWNvdmVyeVNobWVtSW5pdCh2b2lkKQog c3RhdGljIHZvaWQKIEVuYWJsZVN0YW5kYnlNb2RlKHZvaWQpCiB7Ci0JU3RhbmRieU1vZGUgPSB0 cnVlOworCWxvY2FsUmVjb3ZlcnlGbGFncyB8PSBTWF9JTl9TVEFOREJZX01PREU7CiAKIAkvKgog CSAqIFRvIGF2b2lkIHNlcnZlciBsb2cgYmxvYXQsIHdlIGRvbid0IHJlcG9ydCByZWNvdmVyeSBw cm9ncmVzcyBpbiBhCkBAIC01MDYsOCArNDgwLDggQEAgRW5hYmxlU3RhbmRieU1vZGUodm9pZCkK ICAqIGRpc2sgZG9lcyBhZnRlciBpbml0aWFsaXppbmcgb3RoZXIgc3Vic3lzdGVtcywgYnV0IGJl Zm9yZSBjYWxsaW5nCiAgKiBQZXJmb3JtV2FsUmVjb3ZlcnkoKS4KICAqCi0gKiBUaGlzIGluaXRp YWxpemVzIHNvbWUgZ2xvYmFsIHZhcmlhYmxlcyBsaWtlIEFyY2hpdmVSZWNvdmVyeVJlcXVlc3Rl ZCwgYW5kCi0gKiBTdGFuZGJ5TW9kZVJlcXVlc3RlZCBhbmQgSW5SZWNvdmVyeS4KKyAqIFRoaXMg aW5pdGlhbGl6ZXMgc29tZSBmbGFncyBsaWtlIFNYX0FSQ0hJVkVfUkVDT1ZFUllfUkVRVUVTVEVE IGFuZAorICogU1hfU1RBQkRCWV9NT0RFX1JFUVVFU1RFRCBhbmQgZ2xvYmFsIHZhcmlhYmxlIElu UmVjb3ZlcnkuCiAgKi8KIHZvaWQKIEluaXRXYWxSZWNvdmVyeShDb250cm9sRmlsZURhdGEgKkNv bnRyb2xGaWxlLCBib29sICp3YXNTaHV0ZG93bl9wdHIsCkBAIC01NDUsNyArNTE5LDcgQEAgSW5p dFdhbFJlY292ZXJ5KENvbnRyb2xGaWxlRGF0YSAqQ29udHJvbEZpbGUsIGJvb2wgKndhc1NodXRk b3duX3B0ciwKIAkgKiBUYWtlIG93bmVyc2hpcCBvZiB0aGUgd2FrZXVwIGxhdGNoIGlmIHdlJ3Jl IGdvaW5nIHRvIHNsZWVwIGR1cmluZwogCSAqIHJlY292ZXJ5LCBpZiByZXF1aXJlZC4KIAkgKi8K LQlpZiAoQXJjaGl2ZVJlY292ZXJ5UmVxdWVzdGVkKQorCWlmIChBcmNoaXZlUmVjb3ZlcnlSZXF1 ZXN0ZWQoKSkKIAkJT3duTGF0Y2goJlhMb2dSZWNvdmVyeUN0bC0+cmVjb3ZlcnlXYWtldXBMYXRj aCk7CiAKIAkvKgpAQCAtNjAwLDggKzU3NCw4IEBAIEluaXRXYWxSZWNvdmVyeShDb250cm9sRmls ZURhdGEgKkNvbnRyb2xGaWxlLCBib29sICp3YXNTaHV0ZG93bl9wdHIsCiAJCSAqIGZpbGUsIHdl IGtub3cgaG93IGZhciB3ZSBuZWVkIHRvIHJlcGxheSB0byByZWFjaCBjb25zaXN0ZW5jeS4gRW50 ZXIKIAkJICogYXJjaGl2ZSByZWNvdmVyeSBkaXJlY3RseS4KIAkJICovCi0JCUluQXJjaGl2ZVJl Y292ZXJ5ID0gdHJ1ZTsKLQkJaWYgKFN0YW5kYnlNb2RlUmVxdWVzdGVkKQorCQlsb2NhbFJlY292 ZXJ5RmxhZ3MgfD0gU1hfSU5fQVJDSElWRV9SRUNPVkVSWTsKKwkJaWYgKFN0YW5kYnlNb2RlUmVx dWVzdGVkKCkpCiAJCQlFbmFibGVTdGFuZGJ5TW9kZSgpOwogCiAJCS8qCkBAIC03NTAsMTQgKzcy NCwxNCBAQCBJbml0V2FsUmVjb3ZlcnkoQ29udHJvbEZpbGVEYXRhICpDb250cm9sRmlsZSwgYm9v bCAqd2FzU2h1dGRvd25fcHRyLAogCQkgKiB0byBtaW5SZWNvdmVyeVBvaW50LCB1cCB0byBiYWNr dXBFbmRQb2ludCwgb3IgdW50aWwgd2Ugc2VlIGFuCiAJCSAqIGVuZC1vZi1iYWNrdXAgcmVjb3Jk KSwgYW5kIHdlIGNhbiBlbnRlciBhcmNoaXZlIHJlY292ZXJ5IGRpcmVjdGx5LgogCQkgKi8KLQkJ aWYgKEFyY2hpdmVSZWNvdmVyeVJlcXVlc3RlZCAmJgorCQlpZiAoQXJjaGl2ZVJlY292ZXJ5UmVx dWVzdGVkKCkgJiYKIAkJCShDb250cm9sRmlsZS0+bWluUmVjb3ZlcnlQb2ludCAhPSBJbnZhbGlk WExvZ1JlY1B0ciB8fAogCQkJIENvbnRyb2xGaWxlLT5iYWNrdXBFbmRSZXF1aXJlZCB8fAogCQkJ IENvbnRyb2xGaWxlLT5iYWNrdXBFbmRQb2ludCAhPSBJbnZhbGlkWExvZ1JlY1B0ciB8fAogCQkJ IENvbnRyb2xGaWxlLT5zdGF0ZSA9PSBEQl9TSFVURE9XTkVEKSkKIAkJewotCQkJSW5BcmNoaXZl UmVjb3ZlcnkgPSB0cnVlOwotCQkJaWYgKFN0YW5kYnlNb2RlUmVxdWVzdGVkKQorCQkJbG9jYWxS ZWNvdmVyeUZsYWdzIHw9IFNYX0lOX0FSQ0hJVkVfUkVDT1ZFUlk7CisJCQlpZiAoU3RhbmRieU1v ZGVSZXF1ZXN0ZWQoKSkKIAkJCQlFbmFibGVTdGFuZGJ5TW9kZSgpOwogCQl9CiAKQEAgLTgwMCw5 ICs3NzQsOSBAQCBJbml0V2FsUmVjb3ZlcnkoQ29udHJvbEZpbGVEYXRhICpDb250cm9sRmlsZSwg Ym9vbCAqd2FzU2h1dGRvd25fcHRyLAogCQl3YXNTaHV0ZG93biA9ICgocmVjb3JkLT54bF9pbmZv ICYgflhMUl9JTkZPX01BU0spID09IFhMT0dfQ0hFQ0tQT0lOVF9TSFVURE9XTik7CiAJfQogCi0J aWYgKEFyY2hpdmVSZWNvdmVyeVJlcXVlc3RlZCkKKwlpZiAoQXJjaGl2ZVJlY292ZXJ5UmVxdWVz dGVkKCkpCiAJewotCQlpZiAoU3RhbmRieU1vZGVSZXF1ZXN0ZWQpCisJCWlmIChTdGFuZGJ5TW9k ZVJlcXVlc3RlZCgpKQogCQkJZXJlcG9ydChMT0csCiAJCQkJCShlcnJtc2coImVudGVyaW5nIHN0 YW5kYnkgbW9kZSIpKSk7CiAJCWVsc2UgaWYgKHJlY292ZXJ5VGFyZ2V0ID09IFJFQ09WRVJZX1RB UkdFVF9YSUQpCkBAIC05MTQsNyArODg4LDcgQEAgSW5pdFdhbFJlY292ZXJ5KENvbnRyb2xGaWxl RGF0YSAqQ29udHJvbEZpbGUsIGJvb2wgKndhc1NodXRkb3duX3B0ciwKIAl9CiAJZWxzZSBpZiAo Q29udHJvbEZpbGUtPnN0YXRlICE9IERCX1NIVVRET1dORUQpCiAJCUluUmVjb3ZlcnkgPSB0cnVl OwotCWVsc2UgaWYgKEFyY2hpdmVSZWNvdmVyeVJlcXVlc3RlZCkKKwllbHNlIGlmIChBcmNoaXZl UmVjb3ZlcnlSZXF1ZXN0ZWQoKSkKIAl7CiAJCS8qIGZvcmNlIHJlY292ZXJ5IGR1ZSB0byBwcmVz ZW5jZSBvZiByZWNvdmVyeSBzaWduYWwgZmlsZSAqLwogCQlJblJlY292ZXJ5ID0gdHJ1ZTsKQEAg LTkzMSw3ICs5MDUsNyBAQCBJbml0V2FsUmVjb3ZlcnkoQ29udHJvbEZpbGVEYXRhICpDb250cm9s RmlsZSwgYm9vbCAqd2FzU2h1dGRvd25fcHRyLAogCSAqLwogCWlmIChJblJlY292ZXJ5KQogCXsK LQkJaWYgKEluQXJjaGl2ZVJlY292ZXJ5KQorCQlpZiAoSW5BcmNoaXZlUmVjb3ZlcnkoKSkKIAkJ ewogCQkJQ29udHJvbEZpbGUtPnN0YXRlID0gREJfSU5fQVJDSElWRV9SRUNPVkVSWTsKIAkJfQpA QCAtOTUwLDcgKzkyNCw3IEBAIEluaXRXYWxSZWNvdmVyeShDb250cm9sRmlsZURhdGEgKkNvbnRy b2xGaWxlLCBib29sICp3YXNTaHV0ZG93bl9wdHIsCiAJCX0KIAkJQ29udHJvbEZpbGUtPmNoZWNr UG9pbnQgPSBDaGVja1BvaW50TG9jOwogCQlDb250cm9sRmlsZS0+Y2hlY2tQb2ludENvcHkgPSBj aGVja1BvaW50OwotCQlpZiAoSW5BcmNoaXZlUmVjb3ZlcnkpCisJCWlmIChJbkFyY2hpdmVSZWNv dmVyeSgpKQogCQl7CiAJCQkvKiBpbml0aWFsaXplIG1pblJlY292ZXJ5UG9pbnQgaWYgbm90IHNl dCB5ZXQgKi8KIAkJCWlmIChDb250cm9sRmlsZS0+bWluUmVjb3ZlcnlQb2ludCA8IGNoZWNrUG9p bnQucmVkbykKQEAgLTk5Nyw3ICs5NzEsNyBAQCBJbml0V2FsUmVjb3ZlcnkoQ29udHJvbEZpbGVE YXRhICpDb250cm9sRmlsZSwgYm9vbCAqd2FzU2h1dGRvd25fcHRyLAogCWJhY2t1cFN0YXJ0UG9p bnQgPSBDb250cm9sRmlsZS0+YmFja3VwU3RhcnRQb2ludDsKIAliYWNrdXBFbmRSZXF1aXJlZCA9 IENvbnRyb2xGaWxlLT5iYWNrdXBFbmRSZXF1aXJlZDsKIAliYWNrdXBFbmRQb2ludCA9IENvbnRy b2xGaWxlLT5iYWNrdXBFbmRQb2ludDsKLQlpZiAoSW5BcmNoaXZlUmVjb3ZlcnkpCisJaWYgKElu QXJjaGl2ZVJlY292ZXJ5KCkpCiAJewogCQltaW5SZWNvdmVyeVBvaW50ID0gQ29udHJvbEZpbGUt Pm1pblJlY292ZXJ5UG9pbnQ7CiAJCW1pblJlY292ZXJ5UG9pbnRUTEkgPSBDb250cm9sRmlsZS0+ bWluUmVjb3ZlcnlQb2ludFRMSTsKQEAgLTEwODMsMTcgKzEwNTcsMTYgQEAgcmVhZFJlY292ZXJ5 U2lnbmFsRmlsZSh2b2lkKQogCQlyZWNvdmVyeV9zaWduYWxfZmlsZV9mb3VuZCA9IHRydWU7CiAJ fQogCi0JU3RhbmRieU1vZGVSZXF1ZXN0ZWQgPSBmYWxzZTsKLQlBcmNoaXZlUmVjb3ZlcnlSZXF1 ZXN0ZWQgPSBmYWxzZTsKKwlsb2NhbFJlY292ZXJ5RmxhZ3MgJj0gflNYX1NUQU5EQllfTU9ERV9S RVFVRVNURUQ7CisJbG9jYWxSZWNvdmVyeUZsYWdzICY9IH5TWF9BUkNISVZFX1JFQ09WRVJZX1JF UVVFU1RFRDsKIAlpZiAoc3RhbmRieV9zaWduYWxfZmlsZV9mb3VuZCkKIAl7Ci0JCVN0YW5kYnlN b2RlUmVxdWVzdGVkID0gdHJ1ZTsKLQkJQXJjaGl2ZVJlY292ZXJ5UmVxdWVzdGVkID0gdHJ1ZTsK KwkJbG9jYWxSZWNvdmVyeUZsYWdzIHw9IFNYX1NUQU5EQllfTU9ERV9SRVFVRVNURUQ7CisJCWxv Y2FsUmVjb3ZlcnlGbGFncyB8PSBTWF9BUkNISVZFX1JFQ09WRVJZX1JFUVVFU1RFRDsKIAl9CiAJ ZWxzZSBpZiAocmVjb3Zlcnlfc2lnbmFsX2ZpbGVfZm91bmQpCiAJewotCQlTdGFuZGJ5TW9kZVJl cXVlc3RlZCA9IGZhbHNlOwotCQlBcmNoaXZlUmVjb3ZlcnlSZXF1ZXN0ZWQgPSB0cnVlOworCQls b2NhbFJlY292ZXJ5RmxhZ3MgfD0gU1hfQVJDSElWRV9SRUNPVkVSWV9SRVFVRVNURUQ7CiAJfQog CWVsc2UKIAkJcmV0dXJuOwpAQCAtMTEwMiw3ICsxMDc1LDcgQEAgcmVhZFJlY292ZXJ5U2lnbmFs RmlsZSh2b2lkKQogCSAqIFdlIGRvbid0IHN1cHBvcnQgc3RhbmRieSBtb2RlIGluIHN0YW5kYWxv bmUgYmFja2VuZHM7IHRoYXQgcmVxdWlyZXMKIAkgKiBvdGhlciBwcm9jZXNzZXMgc3VjaCBhcyB0 aGUgV0FMIHJlY2VpdmVyIHRvIGJlIGFsaXZlLgogCSAqLwotCWlmIChTdGFuZGJ5TW9kZVJlcXVl c3RlZCAmJiAhSXNVbmRlclBvc3RtYXN0ZXIpCisJaWYgKFN0YW5kYnlNb2RlUmVxdWVzdGVkKCkg JiYgIUlzVW5kZXJQb3N0bWFzdGVyKQogCQllcmVwb3J0KEZBVEFMLAogCQkJCShlcnJjb2RlKEVS UkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKIAkJCQkgZXJybXNnKCJzdGFuZGJ5IG1vZGUg aXMgbm90IHN1cHBvcnRlZCBieSBzaW5nbGUtdXNlciBzZXJ2ZXJzIikpKTsKQEAgLTExMTEsMTMg KzEwODQsMTMgQEAgcmVhZFJlY292ZXJ5U2lnbmFsRmlsZSh2b2lkKQogc3RhdGljIHZvaWQKIHZh bGlkYXRlUmVjb3ZlcnlQYXJhbWV0ZXJzKHZvaWQpCiB7Ci0JaWYgKCFBcmNoaXZlUmVjb3ZlcnlS ZXF1ZXN0ZWQpCisJaWYgKCFBcmNoaXZlUmVjb3ZlcnlSZXF1ZXN0ZWQoKSkKIAkJcmV0dXJuOwog CiAJLyoKIAkgKiBDaGVjayBmb3IgY29tcHVsc29yeSBwYXJhbWV0ZXJzCiAJICovCi0JaWYgKFN0 YW5kYnlNb2RlUmVxdWVzdGVkKQorCWlmIChTdGFuZGJ5TW9kZVJlcXVlc3RlZCgpKQogCXsKIAkJ aWYgKChQcmltYXJ5Q29ubkluZm8gPT0gTlVMTCB8fCBzdHJjbXAoUHJpbWFyeUNvbm5JbmZvLCAi IikgPT0gMCkgJiYKIAkJCShyZWNvdmVyeVJlc3RvcmVDb21tYW5kID09IE5VTEwgfHwgc3RyY21w KHJlY292ZXJ5UmVzdG9yZUNvbW1hbmQsICIiKSA9PSAwKSkKQEAgLTExNTgsOCArMTEzMSw4IEBA IHZhbGlkYXRlUmVjb3ZlcnlQYXJhbWV0ZXJzKHZvaWQpCiAJLyoKIAkgKiBJZiB1c2VyIHNwZWNp ZmllZCByZWNvdmVyeV90YXJnZXRfdGltZWxpbmUsIHZhbGlkYXRlIGl0IG9yIGNvbXB1dGUgdGhl CiAJICogImxhdGVzdCIgdmFsdWUuICBXZSBjYW4ndCBkbyB0aGlzIHVudGlsIGFmdGVyIHdlJ3Zl IGdvdHRlbiB0aGUgcmVzdG9yZQotCSAqIGNvbW1hbmQgYW5kIHNldCBJbkFyY2hpdmVSZWNvdmVy eSwgYmVjYXVzZSB3ZSBuZWVkIHRvIGZldGNoIHRpbWVsaW5lCi0JICogaGlzdG9yeSBmaWxlcyBm cm9tIHRoZSBhcmNoaXZlLgorCSAqIGNvbW1hbmQgYW5kIHNldCBTWF9JTl9BUkNISVZFX1JFQ09W RVJZLCBiZWNhdXNlIHdlIG5lZWQgdG8gZmV0Y2gKKwkgKiB0aW1lbGluZSBoaXN0b3J5IGZpbGVz IGZyb20gdGhlIGFyY2hpdmUuCiAJICovCiAJaWYgKHJlY292ZXJ5VGFyZ2V0VGltZUxpbmVHb2Fs ID09IFJFQ09WRVJZX1RBUkdFVF9USU1FTElORV9OVU1FUklDKQogCXsKQEAgLTE0OTcsNyArMTQ3 MCw3IEBAIEZpbmlzaFdhbFJlY292ZXJ5KHZvaWQpCiAJICogaS5lLiwgY2FsbGluZyBYTG9nU2h1 dGRvd25XYWxSY3YoKS4KIAkgKi8KIAlBc3NlcnQoIVdhbFJjdlN0cmVhbWluZygpKTsKLQlTdGFu ZGJ5TW9kZSA9IGZhbHNlOworCWxvY2FsUmVjb3ZlcnlGbGFncyAmPSB+U1hfSU5fU1RBTkRCWV9N T0RFOwogCiAJLyoKIAkgKiBEZXRlcm1pbmUgd2hlcmUgdG8gc3RhcnQgd3JpdGluZyBXQUwgbmV4 dC4KQEAgLTE1MzUsNyArMTUwOCw3IEBAIEZpbmlzaFdhbFJlY292ZXJ5KHZvaWQpCiAJICovCiAJ cmVzdWx0LT5lbmRPZkxvZ1RMSSA9IHhsb2dyZWFkZXItPnNlZy53c190bGk7CiAKLQlpZiAoQXJj aGl2ZVJlY292ZXJ5UmVxdWVzdGVkKQorCWlmIChBcmNoaXZlUmVjb3ZlcnlSZXF1ZXN0ZWQoKSkK IAl7CiAJCS8qCiAJCSAqIFdlIGFyZSBubyBsb25nZXIgaW4gYXJjaGl2ZSByZWNvdmVyeSBzdGF0 ZS4KQEAgLTE1NDMsOCArMTUxNiw4IEBAIEZpbmlzaFdhbFJlY292ZXJ5KHZvaWQpCiAJCSAqIFdl IGFyZSBub3cgZG9uZSByZWFkaW5nIHRoZSBvbGQgV0FMLiAgVHVybiBvZmYgYXJjaGl2ZSBmZXRj aGluZyBpZgogCQkgKiBpdCB3YXMgYWN0aXZlLgogCQkgKi8KLQkJQXNzZXJ0KEluQXJjaGl2ZVJl Y292ZXJ5KTsKLQkJSW5BcmNoaXZlUmVjb3ZlcnkgPSBmYWxzZTsKKwkJQXNzZXJ0KEluQXJjaGl2 ZVJlY292ZXJ5KCkpOworCQlsb2NhbFJlY292ZXJ5RmxhZ3MgJj0gflNYX0lOX0FSQ0hJVkVfUkVD T1ZFUlk7CiAKIAkJLyoKIAkJICogSWYgdGhlIGVuZGluZyBsb2cgc2VnbWVudCBpcyBzdGlsbCBv cGVuLCBjbG9zZSBpdCAodG8gYXZvaWQKQEAgLTE2MjQsNyArMTU5Nyw3IEBAIFNodXRkb3duV2Fs UmVjb3Zlcnkodm9pZCkKIAlYTG9nUmVhZGVyRnJlZSh4bG9ncmVhZGVyKTsKIAlYTG9nUHJlZmV0 Y2hlckZyZWUoeGxvZ3ByZWZldGNoZXIpOwogCi0JaWYgKEFyY2hpdmVSZWNvdmVyeVJlcXVlc3Rl ZCkKKwlpZiAoQXJjaGl2ZVJlY292ZXJ5UmVxdWVzdGVkKCkpCiAJewogCQkvKgogCQkgKiBTaW5j ZSB0aGVyZSBtaWdodCBiZSBhIHBhcnRpYWwgV0FMIHNlZ21lbnQgbmFtZWQgUkVDT1ZFUllYTE9H LCBnZXQKQEAgLTE2NDIsNyArMTYxNSw3IEBAIFNodXRkb3duV2FsUmVjb3Zlcnkodm9pZCkKIAkg KiBXZSBkb24ndCBuZWVkIHRoZSBsYXRjaCBhbnltb3JlLiBJdCdzIG5vdCBzdHJpY3RseSBuZWNl c3NhcnkgdG8gZGlzb3duCiAJICogaXQsIGJ1dCBsZXQncyBkbyBpdCBmb3IgdGhlIHNha2Ugb2Yg dGlkaW5lc3MuCiAJICovCi0JaWYgKEFyY2hpdmVSZWNvdmVyeVJlcXVlc3RlZCkKKwlpZiAoQXJj aGl2ZVJlY292ZXJ5UmVxdWVzdGVkKCkpCiAJCURpc293bkxhdGNoKCZYTG9nUmVjb3ZlcnlDdGwt PnJlY292ZXJ5V2FrZXVwTGF0Y2gpOwogfQogCkBAIC0xNzQ0LDcgKzE3MTcsNyBAQCBQZXJmb3Jt V2FsUmVjb3Zlcnkodm9pZCkKIAkJCQkJCUxTTl9GT1JNQVRfQVJHUyh4bG9ncmVhZGVyLT5SZWFk UmVjUHRyKSkpKTsKIAogCQkvKiBQcmVwYXJlIHRvIHJlcG9ydCBwcm9ncmVzcyBvZiB0aGUgcmVk byBwaGFzZS4gKi8KLQkJaWYgKCFTdGFuZGJ5TW9kZSkKKwkJaWYgKCFJblN0YW5kYnlNb2RlKCkp CiAJCQliZWdpbl9zdGFydHVwX3Byb2dyZXNzX3BoYXNlKCk7CiAKIAkJLyoKQEAgLTE3NTIsNyAr MTcyNSw3IEBAIFBlcmZvcm1XYWxSZWNvdmVyeSh2b2lkKQogCQkgKi8KIAkJZG8KIAkJewotCQkJ aWYgKCFTdGFuZGJ5TW9kZSkKKwkJCWlmICghSW5TdGFuZGJ5TW9kZSgpKQogCQkJCWVyZXBvcnRf c3RhcnR1cF9wcm9ncmVzcygicmVkbyBpbiBwcm9ncmVzcywgZWxhcHNlZCB0aW1lOiAlbGQuJTAy ZCBzLCBjdXJyZW50IExTTjogJVgvJVgiLAogCQkJCQkJCQkJCSBMU05fRk9STUFUX0FSR1MoeGxv Z3JlYWRlci0+UmVhZFJlY1B0cikpOwogCkBAIC0xODk3LDcgKzE4NzAsNyBAQCBQZXJmb3JtV2Fs UmVjb3Zlcnkodm9pZCkKIAkgKiBUaGlzIGNoZWNrIGlzIGludGVudGlvbmFsbHkgYWZ0ZXIgdGhl IGFib3ZlIGxvZyBtZXNzYWdlcyB0aGF0IGluZGljYXRlCiAJICogaG93IGZhciByZWNvdmVyeSB3 ZW50LgogCSAqLwotCWlmIChBcmNoaXZlUmVjb3ZlcnlSZXF1ZXN0ZWQgJiYKKwlpZiAoQXJjaGl2 ZVJlY292ZXJ5UmVxdWVzdGVkKCkgJiYKIAkJcmVjb3ZlcnlUYXJnZXQgIT0gUkVDT1ZFUllfVEFS R0VUX1VOU0VUICYmCiAJCSFyZWFjaGVkUmVjb3ZlcnlUYXJnZXQpCiAJCWVyZXBvcnQoRkFUQUws CkBAIC0yMTg5LDcgKzIxNjIsNyBAQCBDaGVja1JlY292ZXJ5Q29uc2lzdGVuY3kodm9pZCkKIAlp ZiAoWExvZ1JlY1B0cklzSW52YWxpZChtaW5SZWNvdmVyeVBvaW50KSkKIAkJcmV0dXJuOwogCi0J QXNzZXJ0KEluQXJjaGl2ZVJlY292ZXJ5KTsKKwlBc3NlcnQoSW5BcmNoaXZlUmVjb3ZlcnkoKSk7 CiAKIAkvKgogCSAqIGFzc3VtZSB0aGF0IHdlIGFyZSBjYWxsZWQgaW4gdGhlIHN0YXJ0dXAgcHJv Y2VzcywgYW5kIGhlbmNlIGRvbid0IG5lZWQKQEAgLTIyNTksMTUgKzIyMzIsMTUgQEAgQ2hlY2tS ZWNvdmVyeUNvbnNpc3RlbmN5KHZvaWQpCiAJICogZW5hYmxpbmcgY29ubmVjdGlvbnMuCiAJICov CiAJaWYgKHN0YW5kYnlTdGF0ZSA9PSBTVEFOREJZX1NOQVBTSE9UX1JFQURZICYmCi0JCSFMb2Nh bEhvdFN0YW5kYnlBY3RpdmUgJiYKKwkJIShsb2NhbFJlY292ZXJ5RmxhZ3MgJiBTWF9IT1RfU1RB TkRCWV9BQ1RJVkUpICYmCiAJCXJlYWNoZWRDb25zaXN0ZW5jeSAmJgogCQlJc1VuZGVyUG9zdG1h c3RlcikKIAl7CiAJCVNwaW5Mb2NrQWNxdWlyZSgmWExvZ1JlY292ZXJ5Q3RsLT5pbmZvX2xjayk7 Ci0JCVhMb2dSZWNvdmVyeUN0bC0+U2hhcmVkSG90U3RhbmRieUFjdGl2ZSA9IHRydWU7CisJCVhM b2dSZWNvdmVyeUN0bC0+c2hhcmVkUmVjb3ZlcnlGbGFncyB8PSBTWF9IT1RfU1RBTkRCWV9BQ1RJ VkU7CiAJCVNwaW5Mb2NrUmVsZWFzZSgmWExvZ1JlY292ZXJ5Q3RsLT5pbmZvX2xjayk7CiAKLQkJ TG9jYWxIb3RTdGFuZGJ5QWN0aXZlID0gdHJ1ZTsKKwkJbG9jYWxSZWNvdmVyeUZsYWdzIHw9IFNY X0hPVF9TVEFOREJZX0FDVElWRTsKIAogCQlTZW5kUG9zdG1hc3RlclNpZ25hbChQTVNJR05BTF9C RUdJTl9IT1RfU1RBTkRCWSk7CiAJfQpAQCAtMjU4Nyw3ICsyNTYwLDcgQEAgcmVjb3ZlcnlTdG9w c0JlZm9yZShYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCkKIAkgKiBJZ25vcmUgcmVjb3ZlcnkgdGFy Z2V0IHNldHRpbmdzIHdoZW4gbm90IGluIGFyY2hpdmUgcmVjb3ZlcnkgKG1lYW5pbmcKIAkgKiB3 ZSBhcmUgaW4gY3Jhc2ggcmVjb3ZlcnkpLgogCSAqLwotCWlmICghQXJjaGl2ZVJlY292ZXJ5UmVx dWVzdGVkKQorCWlmICghQXJjaGl2ZVJlY292ZXJ5UmVxdWVzdGVkKCkpCiAJCXJldHVybiBmYWxz ZTsKIAogCS8qIENoZWNrIGlmIHdlIHNob3VsZCBzdG9wIGFzIHNvb24gYXMgcmVhY2hpbmcgY29u c2lzdGVuY3kgKi8KQEAgLTI3MzksNyArMjcxMiw3IEBAIHJlY292ZXJ5U3RvcHNBZnRlcihYTG9n UmVhZGVyU3RhdGUgKnJlY29yZCkKIAkgKiBJZ25vcmUgcmVjb3ZlcnkgdGFyZ2V0IHNldHRpbmdz IHdoZW4gbm90IGluIGFyY2hpdmUgcmVjb3ZlcnkgKG1lYW5pbmcKIAkgKiB3ZSBhcmUgaW4gY3Jh c2ggcmVjb3ZlcnkpLgogCSAqLwotCWlmICghQXJjaGl2ZVJlY292ZXJ5UmVxdWVzdGVkKQorCWlm ICghQXJjaGl2ZVJlY292ZXJ5UmVxdWVzdGVkKCkpCiAJCXJldHVybiBmYWxzZTsKIAogCWluZm8g PSBYTG9nUmVjR2V0SW5mbyhyZWNvcmQpICYgflhMUl9JTkZPX01BU0s7CkBAIC0yOTMwLDExICsy OTAzLDExIEBAIHN0YXRpYyB2b2lkCiByZWNvdmVyeVBhdXNlc0hlcmUoYm9vbCBlbmRPZlJlY292 ZXJ5KQogewogCS8qIERvbid0IHBhdXNlIHVubGVzcyB1c2VycyBjYW4gY29ubmVjdCEgKi8KLQlp ZiAoIUxvY2FsSG90U3RhbmRieUFjdGl2ZSkKKwlpZiAoIShsb2NhbFJlY292ZXJ5RmxhZ3MgJiBT WF9IT1RfU1RBTkRCWV9BQ1RJVkUpKQogCQlyZXR1cm47CiAKIAkvKiBEb24ndCBwYXVzZSBhZnRl ciBzdGFuZGJ5IHByb21vdGlvbiBoYXMgYmVlbiB0cmlnZ2VyZWQgKi8KLQlpZiAoTG9jYWxQcm9t b3RlSXNUcmlnZ2VyZWQpCisJaWYgKGxvY2FsUmVjb3ZlcnlGbGFncyAmIFNYX1BST01PVEVfSVNf VFJJR0dFUkVEKQogCQlyZXR1cm47CiAKIAlpZiAoZW5kT2ZSZWNvdmVyeSkKQEAgLTMwMDAsNyAr Mjk3Myw3IEBAIHJlY292ZXJ5QXBwbHlEZWxheShYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCkKIAkJ cmV0dXJuIGZhbHNlOwogCiAJLyogbm90aGluZyB0byBkbyBpZiBjcmFzaCByZWNvdmVyeSBpcyBy ZXF1ZXN0ZWQgKi8KLQlpZiAoIUFyY2hpdmVSZWNvdmVyeVJlcXVlc3RlZCkKKwlpZiAoIUFyY2hp dmVSZWNvdmVyeVJlcXVlc3RlZCgpKQogCQlyZXR1cm4gZmFsc2U7CiAKIAkvKgpAQCAtMzE2Miwx MyArMzEzNSwxMyBAQCBSZWFkUmVjb3JkKFhMb2dQcmVmZXRjaGVyICp4bG9ncHJlZmV0Y2hlciwg aW50IGVtb2RlLAogCQkJICogdG8gaW5kaWNhdGUgdG8gZG93bnN0cmVhbSBXQUwgcmVhZGVycyB0 aGF0IHRoYXQgcG9ydGlvbiBpcyB0bwogCQkJICogYmUgaWdub3JlZC4KIAkJCSAqCi0JCQkgKiBI b3dldmVyLCB3aGVuIEFyY2hpdmVSZWNvdmVyeVJlcXVlc3RlZCA9IHRydWUsIHdlJ3JlIGdvaW5n IHRvCisJCQkgKiBIb3dldmVyLCB3aGVuIEFyY2hpdmVSZWNvdmVyeVJlcXVlc3RlZCgpID0gdHJ1 ZSwgd2UncmUgZ29pbmcgdG8KIAkJCSAqIHN3aXRjaCB0byBhIG5ldyB0aW1lbGluZSBhdCB0aGUg ZW5kIG9mIHJlY292ZXJ5LiBXZSB3aWxsIG9ubHkKIAkJCSAqIGNvcHkgV0FMIG92ZXIgdG8gdGhl IG5ldyB0aW1lbGluZSB1cCB0byB0aGUgZW5kIG9mIHRoZSBsYXN0CiAJCQkgKiBjb21wbGV0ZSBy ZWNvcmQsIHNvIGlmIHdlIGRpZCB0aGlzLCB3ZSB3b3VsZCBsYXRlciBjcmVhdGUgYW4KIAkJCSAq IG92ZXJ3cml0ZSBjb250cmVjb3JkIGluIHRoZSB3cm9uZyBwbGFjZSwgYnJlYWtpbmcgZXZlcnl0 aGluZy4KIAkJCSAqLwotCQkJaWYgKCFBcmNoaXZlUmVjb3ZlcnlSZXF1ZXN0ZWQgJiYKKwkJCWlm ICghQXJjaGl2ZVJlY292ZXJ5UmVxdWVzdGVkKCkgJiYKIAkJCQkhWExvZ1JlY1B0cklzSW52YWxp ZCh4bG9ncmVhZGVyLT5hYm9ydGVkUmVjUHRyKSkKIAkJCXsKIAkJCQlhYm9ydGVkUmVjUHRyID0g eGxvZ3JlYWRlci0+YWJvcnRlZFJlY1B0cjsKQEAgLTMyMzcsMTMgKzMyMTAsMTMgQEAgUmVhZFJl Y29yZChYTG9nUHJlZmV0Y2hlciAqeGxvZ3ByZWZldGNoZXIsIGludCBlbW9kZSwKIAkJCSAqIHdl J2QgaGF2ZSBubyBpZGVhIGhvdyBmYXIgd2UnZCBoYXZlIHRvIHJlcGxheSB0byByZWFjaAogCQkJ ICogY29uc2lzdGVuY3kuICBTbyBlcnIgb24gdGhlIHNhZmUgc2lkZSBhbmQgZ2l2ZSB1cC4KIAkJ CSAqLwotCQkJaWYgKCFJbkFyY2hpdmVSZWNvdmVyeSAmJiBBcmNoaXZlUmVjb3ZlcnlSZXF1ZXN0 ZWQgJiYKKwkJCWlmICghSW5BcmNoaXZlUmVjb3ZlcnkoKSAmJiBBcmNoaXZlUmVjb3ZlcnlSZXF1 ZXN0ZWQoKSAmJgogCQkJCSFmZXRjaGluZ19ja3B0KQogCQkJewogCQkJCWVyZXBvcnQoREVCVUcx LAogCQkJCQkJKGVycm1zZ19pbnRlcm5hbCgicmVhY2hlZCBlbmQgb2YgV0FMIGluIHBnX3dhbCwg ZW50ZXJpbmcgYXJjaGl2ZSByZWNvdmVyeSIpKSk7Ci0JCQkJSW5BcmNoaXZlUmVjb3ZlcnkgPSB0 cnVlOwotCQkJCWlmIChTdGFuZGJ5TW9kZVJlcXVlc3RlZCkKKwkJCQlsb2NhbFJlY292ZXJ5Rmxh Z3MgfD0gU1hfSU5fQVJDSElWRV9SRUNPVkVSWTsKKwkJCQlpZiAoU3RhbmRieU1vZGVSZXF1ZXN0 ZWQoKSkKIAkJCQkJRW5hYmxlU3RhbmRieU1vZGUoKTsKIAogCQkJCVN3aXRjaEludG9BcmNoaXZl UmVjb3ZlcnkoeGxvZ3JlYWRlci0+RW5kUmVjUHRyLCByZXBsYXlUTEkpOwpAQCAtMzI2Myw3ICsz MjM2LDcgQEAgUmVhZFJlY29yZChYTG9nUHJlZmV0Y2hlciAqeGxvZ3ByZWZldGNoZXIsIGludCBl bW9kZSwKIAkJCX0KIAogCQkJLyogSW4gc3RhbmRieSBtb2RlLCBsb29wIGJhY2sgdG8gcmV0cnku IE90aGVyd2lzZSwgZ2l2ZSB1cC4gKi8KLQkJCWlmIChTdGFuZGJ5TW9kZSAmJiAhQ2hlY2tGb3JT dGFuZGJ5VHJpZ2dlcigpKQorCQkJaWYgKEluU3RhbmRieU1vZGUoKSAmJiAhQ2hlY2tGb3JTdGFu ZGJ5VHJpZ2dlcigpKQogCQkJCWNvbnRpbnVlOwogCQkJZWxzZQogCQkJCXJldHVybiBOVUxMOwpA QCAtMzMyNSw3ICszMjk4LDcgQEAgWExvZ1BhZ2VSZWFkKFhMb2dSZWFkZXJTdGF0ZSAqeGxvZ3Jl YWRlciwgWExvZ1JlY1B0ciB0YXJnZXRQYWdlUHRyLCBpbnQgcmVxTGVuLAogCQkgKiBSZXF1ZXN0 IGEgcmVzdGFydHBvaW50IGlmIHdlJ3ZlIHJlcGxheWVkIHRvbyBtdWNoIHhsb2cgc2luY2UgdGhl CiAJCSAqIGxhc3Qgb25lLgogCQkgKi8KLQkJaWYgKEFyY2hpdmVSZWNvdmVyeVJlcXVlc3RlZCAm JiBJc1VuZGVyUG9zdG1hc3RlcikKKwkJaWYgKEFyY2hpdmVSZWNvdmVyeVJlcXVlc3RlZCgpICYm IElzVW5kZXJQb3N0bWFzdGVyKQogCQl7CiAJCQlpZiAoWExvZ0NoZWNrcG9pbnROZWVkZWQocmVh ZFNlZ05vKSkKIAkJCXsKQEAgLTM0NzgsNyArMzQ1MSw3IEBAIHJldHJ5OgogCSAqIHBhZ2UgaGVh ZGVyIGhlcmUgZm9yIHRoZSByZXRyeS4gSW5zdGVhZCwgUmVhZFBhZ2VJbnRlcm5hbCgpIGlzCiAJ ICogcmVzcG9uc2libGUgZm9yIHRoZSB2YWxpZGF0aW9uLgogCSAqLwotCWlmIChTdGFuZGJ5TW9k ZSAmJgorCWlmIChJblN0YW5kYnlNb2RlKCkgJiYKIAkJKHRhcmdldFBhZ2VQdHIgJSB3YWxfc2Vn bWVudF9zaXplKSA9PSAwICYmCiAJCSFYTG9nUmVhZGVyVmFsaWRhdGVQYWdlSGVhZGVyKHhsb2dy ZWFkZXIsIHRhcmdldFBhZ2VQdHIsIHJlYWRCdWYpKQogCXsKQEAgLTM1MTUsNyArMzQ4OCw3IEBA IG5leHRfcmVjb3JkX2lzX2ludmFsaWQ6CiAJcmVhZFNvdXJjZSA9IFhMT0dfRlJPTV9BTlk7CiAK IAkvKiBJbiBzdGFuZGJ5LW1vZGUsIGtlZXAgdHJ5aW5nICovCi0JaWYgKFN0YW5kYnlNb2RlKQor CWlmIChJblN0YW5kYnlNb2RlKCkpCiAJCWdvdG8gcmV0cnk7CiAJZWxzZQogCQlyZXR1cm4gWExS RUFEX0ZBSUw7CkBAIC0zNTkwLDEwICszNTYzLDEwIEBAIFdhaXRGb3JXQUxUb0JlY29tZUF2YWls YWJsZShYTG9nUmVjUHRyIFJlY1B0ciwgYm9vbCByYW5kQWNjZXNzLAogCSAqIHRoZSBlbmQgb2Yg cmVjb3ZlcnkuCiAJICotLS0tLS0tCiAJICovCi0JaWYgKCFJbkFyY2hpdmVSZWNvdmVyeSkKKwlp ZiAoIUluQXJjaGl2ZVJlY292ZXJ5KCkpCiAJCWN1cnJlbnRTb3VyY2UgPSBYTE9HX0ZST01fUEdf V0FMOwogCWVsc2UgaWYgKGN1cnJlbnRTb3VyY2UgPT0gWExPR19GUk9NX0FOWSB8fAotCQkJICgh U3RhbmRieU1vZGUgJiYgY3VycmVudFNvdXJjZSA9PSBYTE9HX0ZST01fU1RSRUFNKSkKKwkJCSAo IUluU3RhbmRieU1vZGUoKSAmJiBjdXJyZW50U291cmNlID09IFhMT0dfRlJPTV9TVFJFQU0pKQog CXsKIAkJbGFzdFNvdXJjZUZhaWxlZCA9IGZhbHNlOwogCQljdXJyZW50U291cmNlID0gWExPR19G Uk9NX0FSQ0hJVkU7CkBAIC0zNjMxLDcgKzM2MDQsNyBAQCBXYWl0Rm9yV0FMVG9CZWNvbWVBdmFp bGFibGUoWExvZ1JlY1B0ciBSZWNQdHIsIGJvb2wgcmFuZEFjY2VzcywKIAkJCQkJICogZmluaXNo IHJlcGxheWluZyBhcyBtdWNoIGFzIHdlIGNhbiBmcm9tIGFyY2hpdmUgYW5kCiAJCQkJCSAqIHBn X3dhbCBiZWZvcmUgZmFpbG92ZXIuCiAJCQkJCSAqLwotCQkJCQlpZiAoU3RhbmRieU1vZGUgJiYg Q2hlY2tGb3JTdGFuZGJ5VHJpZ2dlcigpKQorCQkJCQlpZiAoSW5TdGFuZGJ5TW9kZSgpICYmIENo ZWNrRm9yU3RhbmRieVRyaWdnZXIoKSkKIAkJCQkJewogCQkJCQkJWExvZ1NodXRkb3duV2FsUmN2 KCk7CiAJCQkJCQlyZXR1cm4gWExSRUFEX0ZBSUw7CkBAIC0zNjQxLDcgKzM2MTQsNyBAQCBXYWl0 Rm9yV0FMVG9CZWNvbWVBdmFpbGFibGUoWExvZ1JlY1B0ciBSZWNQdHIsIGJvb2wgcmFuZEFjY2Vz cywKIAkJCQkJICogTm90IGluIHN0YW5kYnkgbW9kZSwgYW5kIHdlJ3ZlIG5vdyB0cmllZCB0aGUg YXJjaGl2ZQogCQkJCQkgKiBhbmQgcGdfd2FsLgogCQkJCQkgKi8KLQkJCQkJaWYgKCFTdGFuZGJ5 TW9kZSkKKwkJCQkJaWYgKCFJblN0YW5kYnlNb2RlKCkpCiAJCQkJCQlyZXR1cm4gWExSRUFEX0ZB SUw7CiAKIAkJCQkJLyoKQEAgLTM2NzMsNyArMzY0Niw3IEBAIFdhaXRGb3JXQUxUb0JlY29tZUF2 YWlsYWJsZShYTG9nUmVjUHRyIFJlY1B0ciwgYm9vbCByYW5kQWNjZXNzLAogCQkJCQkgKiBXZSBz aG91bGQgYmUgYWJsZSB0byBtb3ZlIHRvIFhMT0dfRlJPTV9TVFJFQU0gb25seSBpbgogCQkJCQkg KiBzdGFuZGJ5IG1vZGUuCiAJCQkJCSAqLwotCQkJCQlBc3NlcnQoU3RhbmRieU1vZGUpOworCQkJ CQlBc3NlcnQoSW5TdGFuZGJ5TW9kZSgpKTsKIAogCQkJCQkvKgogCQkJCQkgKiBCZWZvcmUgd2Ug bGVhdmUgWExPR19GUk9NX1NUUkVBTSBzdGF0ZSwgbWFrZSBzdXJlIHRoYXQKQEAgLTM3NDQsNyAr MzcxNyw3IEBAIFdhaXRGb3JXQUxUb0JlY29tZUF2YWlsYWJsZShYTG9nUmVjUHRyIFJlY1B0ciwg Ym9vbCByYW5kQWNjZXNzLAogCQkJICogdGhlIGFyY2hpdmUgb3ZlciBvbmVzIGluIHBnX3dhbCwg c28gdHJ5IHRoZSBuZXh0IGZpbGUgYWdhaW4KIAkJCSAqIGZyb20gdGhlIGFyY2hpdmUgZmlyc3Qu CiAJCQkgKi8KLQkJCWlmIChJbkFyY2hpdmVSZWNvdmVyeSkKKwkJCWlmIChJbkFyY2hpdmVSZWNv dmVyeSgpKQogCQkJCWN1cnJlbnRTb3VyY2UgPSBYTE9HX0ZST01fQVJDSElWRTsKIAkJfQogCkBA IC0zODA0LDcgKzM3NzcsNyBAQCBXYWl0Rm9yV0FMVG9CZWNvbWVBdmFpbGFibGUoWExvZ1JlY1B0 ciBSZWNQdHIsIGJvb2wgcmFuZEFjY2VzcywKIAkJCQkJICogV2Ugc2hvdWxkIGJlIGFibGUgdG8g bW92ZSB0byBYTE9HX0ZST01fU1RSRUFNIG9ubHkgaW4KIAkJCQkJICogc3RhbmRieSBtb2RlLgog CQkJCQkgKi8KLQkJCQkJQXNzZXJ0KFN0YW5kYnlNb2RlKTsKKwkJCQkJQXNzZXJ0KEluU3RhbmRi eU1vZGUoKSk7CiAKIAkJCQkJLyoKIAkJCQkJICogRmlyc3QsIHNodXRkb3duIHdhbHJlY2VpdmVy IGlmIGl0cyByZXN0YXJ0IGhhcyBiZWVuCkBAIC00NDEyLDIxICs0Mzg1LDIyIEBAIFByb21vdGVJ c1RyaWdnZXJlZCh2b2lkKQogCSAqIHRyaWdnZXJlZC4gV2UgY2FuJ3QgdHJpZ2dlciBhIHByb21v dGlvbiBhZ2Fpbiwgc28gdGhlcmUncyBubyBuZWVkIHRvCiAJICoga2VlcCBjaGVja2luZyBhZnRl ciB0aGUgc2hhcmVkIHZhcmlhYmxlIGhhcyBvbmNlIGJlZW4gc2VlbiB0cnVlLgogCSAqLwotCWlm IChMb2NhbFByb21vdGVJc1RyaWdnZXJlZCkKKwlpZiAobG9jYWxSZWNvdmVyeUZsYWdzICYgU1hf UFJPTU9URV9JU19UUklHR0VSRUQpCiAJCXJldHVybiB0cnVlOwogCiAJU3BpbkxvY2tBY3F1aXJl KCZYTG9nUmVjb3ZlcnlDdGwtPmluZm9fbGNrKTsKLQlMb2NhbFByb21vdGVJc1RyaWdnZXJlZCA9 IFhMb2dSZWNvdmVyeUN0bC0+U2hhcmVkUHJvbW90ZUlzVHJpZ2dlcmVkOworCWxvY2FsUmVjb3Zl cnlGbGFncyB8PQorCQkoWExvZ1JlY292ZXJ5Q3RsLT5zaGFyZWRSZWNvdmVyeUZsYWdzICYgU1hf UFJPTU9URV9JU19UUklHR0VSRUQpOwogCVNwaW5Mb2NrUmVsZWFzZSgmWExvZ1JlY292ZXJ5Q3Rs LT5pbmZvX2xjayk7CiAKLQlyZXR1cm4gTG9jYWxQcm9tb3RlSXNUcmlnZ2VyZWQ7CisJcmV0dXJu IGxvY2FsUmVjb3ZlcnlGbGFncyAmIFNYX1BST01PVEVfSVNfVFJJR0dFUkVEOwogfQogCiBzdGF0 aWMgdm9pZAogU2V0UHJvbW90ZUlzVHJpZ2dlcmVkKHZvaWQpCiB7CiAJU3BpbkxvY2tBY3F1aXJl KCZYTG9nUmVjb3ZlcnlDdGwtPmluZm9fbGNrKTsKLQlYTG9nUmVjb3ZlcnlDdGwtPlNoYXJlZFBy b21vdGVJc1RyaWdnZXJlZCA9IHRydWU7CisJWExvZ1JlY292ZXJ5Q3RsLT5zaGFyZWRSZWNvdmVy eUZsYWdzIHw9IFNYX1BST01PVEVfSVNfVFJJR0dFUkVEOwogCVNwaW5Mb2NrUmVsZWFzZSgmWExv Z1JlY292ZXJ5Q3RsLT5pbmZvX2xjayk7CiAKIAkvKgpAQCAtNDQzNyw3ICs0NDExLDcgQEAgU2V0 UHJvbW90ZUlzVHJpZ2dlcmVkKHZvaWQpCiAJICovCiAJU2V0UmVjb3ZlcnlQYXVzZShmYWxzZSk7 CiAKLQlMb2NhbFByb21vdGVJc1RyaWdnZXJlZCA9IHRydWU7CisJbG9jYWxSZWNvdmVyeUZsYWdz IHw9IFNYX1BST01PVEVfSVNfVFJJR0dFUkVEOwogfQogCiAvKgpAQCAtNDQ0Niw3ICs0NDIwLDcg QEAgU2V0UHJvbW90ZUlzVHJpZ2dlcmVkKHZvaWQpCiBzdGF0aWMgYm9vbAogQ2hlY2tGb3JTdGFu ZGJ5VHJpZ2dlcih2b2lkKQogewotCWlmIChMb2NhbFByb21vdGVJc1RyaWdnZXJlZCkKKwlpZiAo bG9jYWxSZWNvdmVyeUZsYWdzICYgU1hfUFJPTU9URV9JU19UUklHR0VSRUQpCiAJCXJldHVybiB0 cnVlOwogCiAJaWYgKElzUHJvbW90ZVNpZ25hbGVkKCkgJiYgQ2hlY2tQcm9tb3RlU2lnbmFsKCkp CkBAIC00NTIwLDE2ICs0NDk0LDE3IEBAIEhvdFN0YW5kYnlBY3RpdmUodm9pZCkKIAkgKiBjYW4n dCBkZS1hY3RpdmF0ZSBIb3QgU3RhbmRieSwgc28gdGhlcmUncyBubyBuZWVkIHRvIGtlZXAgY2hl Y2tpbmcKIAkgKiBhZnRlciB0aGUgc2hhcmVkIHZhcmlhYmxlIGhhcyBvbmNlIGJlZW4gc2VlbiB0 cnVlLgogCSAqLwotCWlmIChMb2NhbEhvdFN0YW5kYnlBY3RpdmUpCisJaWYgKGxvY2FsUmVjb3Zl cnlGbGFncyAmIFNYX0hPVF9TVEFOREJZX0FDVElWRSkKIAkJcmV0dXJuIHRydWU7CiAJZWxzZQog CXsKIAkJLyogc3BpbmxvY2sgaXMgZXNzZW50aWFsIG9uIG1hY2hpbmVzIHdpdGggd2VhayBtZW1v cnkgb3JkZXJpbmchICovCiAJCVNwaW5Mb2NrQWNxdWlyZSgmWExvZ1JlY292ZXJ5Q3RsLT5pbmZv X2xjayk7Ci0JCUxvY2FsSG90U3RhbmRieUFjdGl2ZSA9IFhMb2dSZWNvdmVyeUN0bC0+U2hhcmVk SG90U3RhbmRieUFjdGl2ZTsKKwkJbG9jYWxSZWNvdmVyeUZsYWdzIHw9CisJCQkoWExvZ1JlY292 ZXJ5Q3RsLT5zaGFyZWRSZWNvdmVyeUZsYWdzICYgU1hfSE9UX1NUQU5EQllfQUNUSVZFKTsKIAkJ U3BpbkxvY2tSZWxlYXNlKCZYTG9nUmVjb3ZlcnlDdGwtPmluZm9fbGNrKTsKIAotCQlyZXR1cm4g TG9jYWxIb3RTdGFuZGJ5QWN0aXZlOworCQlyZXR1cm4gbG9jYWxSZWNvdmVyeUZsYWdzICYgU1hf SE9UX1NUQU5EQllfQUNUSVZFOwogCX0KIH0KIApAQCAtNDU0MSw3ICs0NTE2LDcgQEAgc3RhdGlj IGJvb2wKIEhvdFN0YW5kYnlBY3RpdmVJblJlcGxheSh2b2lkKQogewogCUFzc2VydChBbVN0YXJ0 dXBQcm9jZXNzKCkgfHwgIUlzUG9zdG1hc3RlckVudmlyb25tZW50KTsKLQlyZXR1cm4gTG9jYWxI b3RTdGFuZGJ5QWN0aXZlOworCXJldHVybiBsb2NhbFJlY292ZXJ5RmxhZ3MgJiBTWF9IT1RfU1RB TkRCWV9BQ1RJVkU7CiB9CiAKIC8qCkBAIC01MDU5LDMgKzUwMzQsMjMgQEAgYXNzaWduX3JlY292 ZXJ5X3RhcmdldF94aWQoY29uc3QgY2hhciAqbmV3dmFsLCB2b2lkICpleHRyYSkKIAllbHNlCiAJ CXJlY292ZXJ5VGFyZ2V0ID0gUkVDT1ZFUllfVEFSR0VUX1VOU0VUOwogfQorCitib29sIFN0YW5k YnlNb2RlUmVxdWVzdGVkKHZvaWQpCit7CisJcmV0dXJuIGxvY2FsUmVjb3ZlcnlGbGFncyAmIFNY X1NUQU5EQllfTU9ERV9SRVFVRVNURUQ7Cit9CisKK2Jvb2wgQXJjaGl2ZVJlY292ZXJ5UmVxdWVz dGVkKHZvaWQpCit7CisJcmV0dXJuIGxvY2FsUmVjb3ZlcnlGbGFncyAmIFNYX0FSQ0hJVkVfUkVD T1ZFUllfUkVRVUVTVEVEOworfQorCitib29sIEluQXJjaGl2ZVJlY292ZXJ5KHZvaWQpCit7CisJ cmV0dXJuIGxvY2FsUmVjb3ZlcnlGbGFncyAmIFNYX0lOX0FSQ0hJVkVfUkVDT1ZFUlk7Cit9CisK K2Jvb2wgSW5TdGFuZGJ5TW9kZSh2b2lkKQoreworCXJldHVybiBsb2NhbFJlY292ZXJ5RmxhZ3Mg JiBTWF9JTl9TVEFOREJZX01PREU7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNh dGlvbi9sb2dpY2FsL3Nsb3RzeW5jLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2Fs L3Nsb3RzeW5jLmMKaW5kZXggMmMwYTc0MzliZTQuLjkyMDA0MGYzYmNkIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Nsb3RzeW5jLmMKKysrIGIvc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vbG9naWNhbC9zbG90c3luYy5jCkBAIC0xNTE3LDcgKzE1MTcsNyBAQCB1 cGRhdGVfc3luY2VkX3Nsb3RzX2luYWN0aXZlX3NpbmNlKHZvaWQpCiAJICogbG9uZyB0aW1lIGFm dGVyIHByb21vdGlvbiBpZiB0aGV5IGhhdmVuJ3QgYmVlbiBzeW5jaHJvbml6ZWQgcmVjZW50bHku CiAJICogV2hvZXZlciBhY3F1aXJlcyB0aGUgc2xvdCwgaS5lLiwgbWFrZXMgdGhlIHNsb3QgYWN0 aXZlLCB3aWxsIHJlc2V0IGl0LgogCSAqLwotCWlmICghU3RhbmRieU1vZGUpCisJaWYgKCFJblN0 YW5kYnlNb2RlKCkpCiAJCXJldHVybjsKIAogCS8qIFRoZSBzbG90IHN5bmMgd29ya2VyIG9yIFNR TCBmdW5jdGlvbiBtdXN0bid0IGJlIHJ1bm5pbmcgYnkgbm93ICovCmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9hY2Nlc3MveGxvZ19pbnRlcm5hbC5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3hsb2df aW50ZXJuYWwuaAppbmRleCAyY2Y4ZDU1ZDcwNi4uNDhjOGNiODUyNzEgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbmNsdWRlL2FjY2Vzcy94bG9nX2ludGVybmFsLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNz L3hsb2dfaW50ZXJuYWwuaApAQCAtMzkyLDE0ICszOTIsMTMgQEAgZXh0ZXJuIHZvaWQgR2V0T2xk ZXN0UmVzdGFydFBvaW50KFhMb2dSZWNQdHIgKm9sZHJlY3B0ciwgVGltZUxpbmVJRCAqb2xkdGxp KTsKIGV4dGVybiB2b2lkIFhMb2dSZWNHZXRCbG9ja1JlZkluZm8oWExvZ1JlYWRlclN0YXRlICpy ZWNvcmQsIGJvb2wgcHJldHR5LAogCQkJCQkJCQkgICBib29sIGRldGFpbGVkX2Zvcm1hdCwgU3Ry aW5nSW5mbyBidWYsCiAJCQkJCQkJCSAgIHVpbnQzMiAqZnBpX2xlbik7Ci0KIC8qCiAgKiBFeHBv cnRlZCBmb3IgdGhlIGZ1bmN0aW9ucyBpbiB0aW1lbGluZS5jIGFuZCB4bG9nYXJjaGl2ZS5jLiAg T25seSB2YWxpZAogICogaW4gdGhlIHN0YXJ0dXAgcHJvY2Vzcy4KICAqLwotZXh0ZXJuIFBHRExM SU1QT1JUIGJvb2wgQXJjaGl2ZVJlY292ZXJ5UmVxdWVzdGVkOwotZXh0ZXJuIFBHRExMSU1QT1JU IGJvb2wgSW5BcmNoaXZlUmVjb3Zlcnk7Ci1leHRlcm4gUEdETExJTVBPUlQgYm9vbCBTdGFuZGJ5 TW9kZTsKK2V4dGVybiBQR0RMTElNUE9SVCBib29sIEFyY2hpdmVSZWNvdmVyeVJlcXVlc3RlZCh2 b2lkKTsKK2V4dGVybiBQR0RMTElNUE9SVCBib29sIEluQXJjaGl2ZVJlY292ZXJ5KHZvaWQpOwor ZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgSW5TdGFuZGJ5TW9kZSh2b2lkKTsKIGV4dGVybiBQR0RM TElNUE9SVCBjaGFyICpyZWNvdmVyeVJlc3RvcmVDb21tYW5kOwogCiAjZW5kaWYJCQkJCQkJLyog WExPR19JTlRFUk5BTF9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MveGxvZ3Jl Y292ZXJ5LmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MveGxvZ3JlY292ZXJ5LmgKaW5kZXggOTE0NDYz MDMwMjQuLjJkNDQ5MDVlYTM2IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MveGxvZ3Jl Y292ZXJ5LmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3hsb2dyZWNvdmVyeS5oCkBAIC0xNiw2 ICsxNiwzNyBAQAogI2luY2x1ZGUgImxpYi9zdHJpbmdpbmZvLmgiCiAjaW5jbHVkZSAidXRpbHMv dGltZXN0YW1wLmgiCiAKKy8qCisgKiBUaGUgZmxhZyBpbmRpY2F0ZXMgaWYgd2UgYWxsb3cgaG90 IHN0YW5kYnkgcXVlcmllcyB0byBiZSBydW4uCisgKi8KKyNkZWZpbmUgU1hfSE9UX1NUQU5EQllf QUNUSVZFCQkJMHgwMQkvKiBTWDogU3RhcnR1cCBYbG9nICovCisvKgorICogVGhlIGZsYWcgaW5k aWNhdGVzIGlmIGEgc3RhbmRieSBwcm9tb3Rpb24gaGFzIGJlZW4gdHJpZ2dlcmVkLgorICovCisj ZGVmaW5lIFNYX1BST01PVEVfSVNfVFJJR0dFUkVECQkJMHgwMgorLyoKKyAqIFdoZW4gU1hfQVJD SElWRV9SRUNPVkVSWV9SRVFVRVNURUQgaXMgc2V0LCBhcmNoaXZlIHJlY292ZXJ5IHdhcyByZXF1 ZXN0ZWQsCisgKiBpLmUuIHNpZ25hbCBmaWxlcyB3ZXJlIHByZXNlbnQuICBXaGVuIFNYX0lOX0FS Q0hJVkVfUkVDT1ZFUlkgaXMgc2V0LCB3ZSBhcmUKKyAqIGN1cnJlbnRseSByZWNvdmVyaW5nIHVz aW5nIG9mZmxpbmUgWExPRyBhcmNoaXZlcy4gIFRoZXNlIHZhcmlhYmxlcyBhcmUgb25seQorICog dmFsaWQgaW4gdGhlIHN0YXJ0dXAgcHJvY2Vzcy4KKyAqCisgKiBXaGVuIFNYX0FSQ0hJVkVfUkVD T1ZFUllfUkVRVUVTVEVEIGlzIHNldCwgYnV0IFNYX0lOX0FSQ0hJVkVfUkVDT1ZFUlkgaXMKKyAq IG5vdCwgd2UncmUgY3VycmVudGx5IHBlcmZvcm1pbmcgY3Jhc2ggcmVjb3ZlcnkgdXNpbmcgb25s eSBYTE9HIGZpbGVzIGluCisgKiBwZ193YWwsIGJ1dCB3aWxsIHN3aXRjaCB0byB1c2luZyBvZmZs aW5lIFhMT0cgYXJjaGl2ZXMgYXMgc29vbiBhcyB3ZSByZWFjaAorICogdGhlIGVuZCBvZiBXQUwg aW4gcGdfd2FsLgorICovCisjZGVmaW5lIFNYX0FSQ0hJVkVfUkVDT1ZFUllfUkVRVUVTVEVECTB4 MDQKKyNkZWZpbmUgU1hfSU5fQVJDSElWRV9SRUNPVkVSWQkJCTB4MDgKKy8qCisgKiBXaGVuIFNY X1NUQU5EQllfTU9ERV9SRVFVRVNURUQgaXMgc2V0LCBzdGFuZGJ5IG1vZGUgd2FzIHJlcXVlc3Rl ZCwgaS5lLgorICogc3RhbmRieS5zaWduYWwgZmlsZSB3YXMgcHJlc2VudC4gIFdoZW4gU1hfSU5f U1RBTkRCWV9NT0RFIGlzIHNldCwgd2UgYXJlCisgKiBjdXJyZW50bHkgaW4gc3RhbmRieSBtb2Rl LiAgVGhlc2UgdmFyaWFibGVzIGFyZSBvbmx5IHZhbGlkIGluIHRoZSBzdGFydHVwCisgKiBwcm9j ZXNzLiBUaGV5IHdvcmsgc2ltaWxhcmx5IHRvIFNYX0FSQ0hJVkVfUkVDT1ZFUllfUkVRVUVTVEVE IGFuZAorICogU1hfSU5fQVJDSElWRV9SRUNPVkVSWS4KKyAqLworI2RlZmluZSBTWF9TVEFOREJZ X01PREVfUkVRVUVTVEVECQkweDEwCisjZGVmaW5lIFNYX0lOX1NUQU5EQllfTU9ERQkJCQkweDIw CisKIC8qCiAgKiBSZWNvdmVyeSB0YXJnZXQgdHlwZS4KICAqIE9ubHkgc2V0IGR1cmluZyBhIFBv aW50IGluIFRpbWUgcmVjb3ZlcnksIG5vdCB3aGVuIGluIHN0YW5kYnkgbW9kZS4KQEAgLTczLDkg KzEwNCw2IEBAIGV4dGVybiBQR0RMTElNUE9SVCBUaW1lTGluZUlEIHJlY292ZXJ5VGFyZ2V0VExJ OwogLyogSGF2ZSB3ZSBhbHJlYWR5IHJlYWNoZWQgYSBjb25zaXN0ZW50IGRhdGFiYXNlIHN0YXRl PyAqLwogZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgcmVhY2hlZENvbnNpc3RlbmN5OwogCi0vKiBB cmUgd2UgY3VycmVudGx5IGluIHN0YW5kYnkgbW9kZT8gKi8KLWV4dGVybiBQR0RMTElNUE9SVCBi b29sIFN0YW5kYnlNb2RlOwotCiBleHRlcm4gU2l6ZSBYTG9nUmVjb3ZlcnlTaG1lbVNpemUodm9p ZCk7CiBleHRlcm4gdm9pZCBYTG9nUmVjb3ZlcnlTaG1lbUluaXQodm9pZCk7CiAKLS0gCjIuMzQu MQoK --=_327a17268506bc2f1282d5d09ad2ed13 Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=v5-0002-Wrapper-function-to-extract-whole-text-array-from.patch Content-Disposition: attachment; filename=v5-0002-Wrapper-function-to-extract-whole-text-array-from.patch; size=4039 RnJvbSAzM2RiYWE2Y2RlNjg3Yzk3MzczOTU5Njk1Yzg0YzVlZWU3MjE5MmE3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNaWtoYWlsIExpdHNhcmV2IDxtLmxpdHNhcmV2QHBvc3RncmVz cHJvLnJ1PgpEYXRlOiBGcmksIDEwIEphbiAyMDI1IDIyOjMxOjM0ICswMzAwClN1YmplY3Q6IFtQ QVRDSCB2NSAyLzJdIFdyYXBwZXIgZnVuY3Rpb24gdG8gZXh0cmFjdCB3aG9sZSB0ZXh0IGFycmF5 IGZyb20KIHJlY292ZXJ5IGZsYWdzIGJpdHNldC4KCkl0IHJldHVybnMgU1hfUFJPTU9URV9JU19U UklHR0VSRUQsIFNYX1NUQU5EQllfTU9ERV9SRVFVRVNURUQgIGZsYWdzIGZvcgpyZWNvdmVyeSBz dGF0ZXMuCi0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ2Z1bmNzLmMgICAgfCAz MSArKysrKysrKysrKysrKysrKysrKysrKwogc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxv Z3JlY292ZXJ5LmMgfCAxNiArKysrKysrKysrKysKIHNyYy9pbmNsdWRlL2FjY2Vzcy94bG9ncmVj b3ZlcnkuaCAgICAgICAgIHwgIDEgKwogc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCAg ICAgICAgICAgfCAgNSArKysrCiA0IGZpbGVzIGNoYW5nZWQsIDUzIGluc2VydGlvbnMoKykKCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nZnVuY3MuYyBiL3NyYy9i YWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dmdW5jcy5jCmluZGV4IDhjMzA5MDE2NWYwLi45Yjcx ZmY3NTgzYyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ2Z1bmNz LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ2Z1bmNzLmMKQEAgLTMwLDYg KzMwLDcgQEAKICNpbmNsdWRlICJzdG9yYWdlL2ZkLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9sYXRj aC5oIgogI2luY2x1ZGUgInN0b3JhZ2Uvc3RhbmRieS5oIgorI2luY2x1ZGUgInV0aWxzL2FycmF5 LmgiCiAjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKICNpbmNsdWRlICJ1dGlscy9tZW11dGls cy5oIgogI2luY2x1ZGUgInV0aWxzL3BnX2xzbi5oIgpAQCAtNzQ4LDMgKzc0OSwzMyBAQCBwZ19w cm9tb3RlKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCQkJCQkgICB3YWl0X3NlY29uZHMpKSk7CiAJUEdf UkVUVVJOX0JPT0woZmFsc2UpOwogfQorCitEYXR1bQorcGdfZ2V0X3JlY292ZXJ5X2ZsYWdzKFBH X0ZVTkNUSU9OX0FSR1MpCit7CisvKgorICogQ3VycmVudGx5IHN1cHBvcnRlZCBudW1iZXIgb2Yg cmVjb3ZlcnkgZmxhZ3MgaXMgZXF1YWwgdG8gdHdvOgorICoge1NYX1BST01PVEVfSVNfVFJJR0dF UkVELCBTWF9TVEFOREJZX01PREVfUkVRVUVTVEVEfS4KKyAqIFRoZSBTWF9TVEFOREJZX01PREVf UkVRVUVTVEVEIGlzIHZhbGlkIG9ubHkgaW4gdGhlIHN0YXJ0dXAgcHJvY2Vzcy4KKyAqLworI2Rl ZmluZSBNQVhfUkVDT1ZFUllfRkxBR1MgMgorCisJYml0czMyCQkJcmVjb3ZlcnlfZmxhZ3M7CisJ aW50CQkJCWNudCA9IDA7CisJRGF0dW0JCQlmbGFnc1tNQVhfUkVDT1ZFUllfRkxBR1NdOworCUFy cmF5VHlwZQkgICAqdHh0X2FycjsKKworCXJlY292ZXJ5X2ZsYWdzID0gR2V0WExvZ1JlY292ZXJ5 RmxhZ3MoKTsKKworCWlmIChyZWNvdmVyeV9mbGFncyAmIFNYX1BST01PVEVfSVNfVFJJR0dFUkVE KQorCQlmbGFnc1tjbnQrK10gPSBDU3RyaW5nR2V0VGV4dERhdHVtKCJQUk9NT1RFX0lTX1RSSUdH RVJFRCIpOworCisJaWYgKHJlY292ZXJ5X2ZsYWdzICYgU1hfU1RBTkRCWV9NT0RFX1JFUVVFU1RF RCkKKwkJZmxhZ3NbY250KytdID0gQ1N0cmluZ0dldFRleHREYXR1bSgiU1RBTkRCWV9NT0RFX1JF UVVFU1RFRCIpOworCisJQXNzZXJ0KGNudCA8PSBNQVhfUkVDT1ZFUllfRkxBR1MpOworCisJLyog UmV0dXJucyBiaXQgYXJyYXkgYXMgRGF0dW0gKi8KKwl0eHRfYXJyID0gY29uc3RydWN0X2FycmF5 X2J1aWx0aW4oZmxhZ3MsIGNudCwgVEVYVE9JRCk7CisJUEdfUkVUVVJOX0FSUkFZVFlQRV9QKHR4 dF9hcnIpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ3Jl Y292ZXJ5LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9ncmVjb3ZlcnkuYwppbmRl eCAzZDFmZTk2NWE0NS4uZmIyYzMxNjE2YWEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vz cy90cmFuc2FtL3hsb2dyZWNvdmVyeS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2Ft L3hsb2dyZWNvdmVyeS5jCkBAIC00MzcwLDYgKzQzNzAsMjIgQEAgU3RhcnR1cFJlcXVlc3RXYWxS ZWNlaXZlclJlc3RhcnQodm9pZCkKIAl9CiB9CiAKKy8qCisgKiBSZXR1cm4gU1hfUFJPTU9URV9J U19UUklHR0VSRUQsIFNYX1NUQU5EQllfTU9ERV9SRVFVRVNURUQgZmxhZ3MgZm9yCisgKiByZWNv dmVyeSBzdGF0ZXMuCisgKi8KK2JpdHMzMiBHZXRYTG9nUmVjb3ZlcnlGbGFncyh2b2lkKQorewor CWJpdHMzMgkJZmxhZ3MgPSAwOworCisJU3BpbkxvY2tBY3F1aXJlKCZYTG9nUmVjb3ZlcnlDdGwt PmluZm9fbGNrKTsKKwlmbGFncyA9IFhMb2dSZWNvdmVyeUN0bC0+c2hhcmVkUmVjb3ZlcnlGbGFn czsKKwlTcGluTG9ja1JlbGVhc2UoJlhMb2dSZWNvdmVyeUN0bC0+aW5mb19sY2spOworCisJZmxh Z3MgfD0gKGxvY2FsUmVjb3ZlcnlGbGFncyAmIFNYX1NUQU5EQllfTU9ERV9SRVFVRVNURUQpOwor CisJcmV0dXJuIGZsYWdzOworfQogCiAvKgogICogSGFzIGEgc3RhbmRieSBwcm9tb3Rpb24gYWxy ZWFkeSBiZWVuIHRyaWdnZXJlZD8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy94bG9n cmVjb3ZlcnkuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy94bG9ncmVjb3ZlcnkuaAppbmRleCAyZDQ0 OTA1ZWEzNi4uZmFhNmM2NjZlZGUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy94bG9n cmVjb3ZlcnkuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MveGxvZ3JlY292ZXJ5LmgKQEAgLTE3 Miw2ICsxNzIsNyBAQCBleHRlcm4gVGltZXN0YW1wVHogR2V0TGF0ZXN0WFRpbWUodm9pZCk7CiBl eHRlcm4gVGltZXN0YW1wVHogR2V0Q3VycmVudENodW5rUmVwbGF5U3RhcnRUaW1lKHZvaWQpOwog ZXh0ZXJuIFhMb2dSZWNQdHIgR2V0Q3VycmVudFJlcGxheVJlY1B0cihUaW1lTGluZUlEICpyZXBs YXlFbmRUTEkpOwogCitleHRlcm4gYml0czMyIEdldFhMb2dSZWNvdmVyeUZsYWdzKHZvaWQpOwog ZXh0ZXJuIGJvb2wgUHJvbW90ZUlzVHJpZ2dlcmVkKHZvaWQpOwogZXh0ZXJuIGJvb2wgQ2hlY2tQ cm9tb3RlU2lnbmFsKHZvaWQpOwogZXh0ZXJuIHZvaWQgV2FrZXVwUmVjb3Zlcnkodm9pZCk7CmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0IGIvc3JjL2luY2x1ZGUv Y2F0YWxvZy9wZ19wcm9jLmRhdAppbmRleCBjZDk0MjJkMGJhYy4uZDhjNWVjOWQ5OGEgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKKysrIGIvc3JjL2luY2x1ZGUv Y2F0YWxvZy9wZ19wcm9jLmRhdApAQCAtNjY4NSw2ICs2Njg1LDExIEBACiAgIHByb25hbWUgPT4g J3BnX2lzX2luX3JlY292ZXJ5JywgcHJvdm9sYXRpbGUgPT4gJ3YnLCBwcm9yZXR0eXBlID0+ICdi b29sJywKICAgcHJvYXJndHlwZXMgPT4gJycsIHByb3NyYyA9PiAncGdfaXNfaW5fcmVjb3Zlcnkn IH0sCiAKK3sgb2lkID0+ICc4NDM5JywKKyAgZGVzY3IgPT4gJ3JldHVybiBmbGFncyBmb3IgcmVj b3Zlcnkgc3RhdGVzJywKKyAgcHJvbmFtZSA9PiAncGdfZ2V0X3JlY292ZXJ5X2ZsYWdzJywgcHJv dm9sYXRpbGUgPT4gJ3YnLCBwcm9yZXR0eXBlID0+ICdfdGV4dCcsCisgIHByb2FyZ3R5cGVzID0+ ICcnLCBwcm9zcmMgPT4gJ3BnX2dldF9yZWNvdmVyeV9mbGFncycgfSwKKwogeyBvaWQgPT4gJzM4 MjAnLCBkZXNjciA9PiAnY3VycmVudCB3YWwgZmx1c2ggbG9jYXRpb24nLAogICBwcm9uYW1lID0+ ICdwZ19sYXN0X3dhbF9yZWNlaXZlX2xzbicsIHByb3ZvbGF0aWxlID0+ICd2JywKICAgcHJvcmV0 dHlwZSA9PiAncGdfbHNuJywgcHJvYXJndHlwZXMgPT4gJycsCi0tIAoyLjM0LjEKCg== --=_327a17268506bc2f1282d5d09ad2ed13--