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.96) (envelope-from ) id 1vTSsr-002LcX-0w for pgsql-hackers@arkaria.postgresql.org; Wed, 10 Dec 2025 22:42:10 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vTSsq-001MRP-0x for pgsql-hackers@arkaria.postgresql.org; Wed, 10 Dec 2025 22:42:09 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vTSsp-001MRH-2B for pgsql-hackers@lists.postgresql.org; Wed, 10 Dec 2025 22:42:08 +0000 Received: from mail-wr1-x42b.google.com ([2a00:1450:4864:20::42b]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vTSsn-0003V6-1M for pgsql-hackers@lists.postgresql.org; Wed, 10 Dec 2025 22:42:08 +0000 Received: by mail-wr1-x42b.google.com with SMTP id ffacd0b85a97d-42b3b0d76fcso179408f8f.3 for ; Wed, 10 Dec 2025 14:42:05 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bowt-ie.20230601.gappssmtp.com; s=20230601; t=1765406524; x=1766011324; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=yo4LM7bXDqsfqkLDMhSKNHgpa2jpolfSydgX4FVhBwE=; b=mPr1oLbegFX9XgSKUVZZZy8+nQaKgW+7qq315eWLMIiOs6EdLweuXdjGYT0418olqw 34XqKnl0te+P159FBX+OqZ2Y2fAbZgm2igDxdRy6SyLNV/qJVSmVfoCG9nAx8YzdmQKV wmcMpc2oS1t6vg2aBvzxIiUFUtsh5VxZmwbtKPues8FWWP82L1OQiITxJBUtgoKRMNVo JN686T+ujRK4GpHk8MAExOfcutK10EiAn9+VpJHXsklk5z/zFTMEbFjbW3ehGhrS0Sh4 mrHX+PJD0npAWd44e+T6k57QM4Q2OeA1nP6l3QA7UAtIW+UBK6ABpShpWNQnrHsiVTnj VyMQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765406524; x=1766011324; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=yo4LM7bXDqsfqkLDMhSKNHgpa2jpolfSydgX4FVhBwE=; b=TBhtr7DtN44m8qzK9V6zZ1INObv53PN3fB+rWgYJZfEJUUSpx7v5ZcZolk/SD+Ow5T JjSpLqSiLPWJe+rmcKSxmDgB7ULprbcvhwCjru6fLhm0CyUxxjcW+rxo13x6oPdgWycm LSnN6L2KgPxzVKYwdFKAZlBvkqe28+FWyhhFmGIVXTy8Kpbw9toccOLwVLy8J/58SE+4 I5ixO6UsO+KybM9pmMH3AL/9pSlgGReAvlJ645bPS6FW/qIW6K/3MwlEBebx399TIG/I hvKVYHwthJJI7g08LzWetyikhv4HOLiQSCSjYkQil4iM02EOXUL476xi1ow4lZFReR3t 07jw== X-Forwarded-Encrypted: i=1; AJvYcCUOEm2dR+6aQnADV/lYXfo/2YP2dTfidfLzUEizCWN9f19mQWMea1jcIQi8zVxrn6Z4IZekjpn7Ptk+vgF9@lists.postgresql.org X-Gm-Message-State: AOJu0YyEpOYzbiGHiWwLnesm07ZMHZREcPB/IXufBp0bw0KfWFBD84tx 2NwmY30KXM0urByiQyjyhLkmM5+7Q6EpG/vshqoNKX7VSYOlEmcIbV/Gz+Qo6+pjW4Dsp7GtQ3n R8xw5R5Y2x/bO90yB6ZgfzG6VL4+8ZEinX6L00iBjnQ== X-Gm-Gg: AY/fxX5803rjxH3cL6eKlzTCbGthy0DrdaUv4SjyHl6KXfW6TQtcmUX+/Xw0n2V8CNJ 5OXH8zLNMR5Zlki1ciX+ip4+OhPyCKN8/w54GP5q+I9xreOPuEci5wfF3HLHnpKyhF3sGSzx3Pe 3lF+hqaKqw1ePJjIredQtqBhlv1ELdx06cPPRr6hSFsLjboyNaJwm1BH5CX/BHMWYHQrfZcI5lU UicCH6pOZhri5iwuitCyQYQmdMEo1dCyIJ6lyG5eD0wrZE5Hb8drrqrhv5hcrSNIV1Ecyw= X-Google-Smtp-Source: AGHT+IG10cacaRiaDWCEmdcIVEPZrcv0OcVsll6qj7USOCS88LW3hYQmovpu67vmPqmXW0z4SUXPqHUOCaDEy5kH1a8= X-Received: by 2002:a05:6000:2087:b0:42b:5628:f4a3 with SMTP id ffacd0b85a97d-42fa39ce63bmr3837631f8f.1.1765406524179; Wed, 10 Dec 2025 14:42:04 -0800 (PST) MIME-Version: 1.0 References: <6d59c277-c440-4d1f-a46e-157958c06a5f@vondra.me> <5pltwb73d7cynsxo2yb54ygjk7haviatkrx43mnzihc6kkield@ahnstpgof46i> <931afce3-8c86-4c96-9861-0ffa17c6560f@vondra.me> <4zeu5yb73byiquvf3eefsunnrydyqfxy3eup66jrliutrtd4xl@5iifjey4n5m5> In-Reply-To: From: Peter Geoghegan Date: Wed, 10 Dec 2025 17:41:37 -0500 X-Gm-Features: AQt7F2pNOZhpwoMSywGpvsJiM8INJQ6g2JcEi9F6UdG37JfJYwmS6qvnSs8wJGo Message-ID: Subject: Re: index prefetching To: Tomas Vondra Cc: Andres Freund , Thomas Munro , Nazir Bilal Yavuz , Robert Haas , Melanie Plageman , PostgreSQL Hackers , Georgios , Konstantin Knizhnik , Dilip Kumar Content-Type: multipart/mixed; boundary="000000000000c23a9a0645a0bc0c" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000c23a9a0645a0bc0c Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Mon, Dec 8, 2025 at 3:50=E2=80=AFPM Peter Geoghegan wrote: > Attached is v2, just to keep the patch set cleanly applying against > HEAD following recent changes in nbtree. No real changes here. Attached is v3. This is another revision whose sole purpose is to keep the patch applying cleanly. No real changes compared to v1 to report here, either. --=20 Peter Geoghegan --000000000000c23a9a0645a0bc0c Content-Type: application/octet-stream; name="v3-0003-bufmgr-aio-Prototype-for-not-waiting-for-already-.patch" Content-Disposition: attachment; filename="v3-0003-bufmgr-aio-Prototype-for-not-waiting-for-already-.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mj0ldwbf2 RnJvbSBhZTVlNWQ4ZDNhMWQ0ZjNhOGE2MmE0Y2RlZmY1ZWQ4NzVhMjIwNjFjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IEZyaSwgMTUgQXVnIDIwMjUgMTE6MDE6NTIgLTA0MDAKU3ViamVjdDogW1BBVENIIHYzIDMv NF0gYnVmbWdyOiBhaW86IFByb3RvdHlwZSBmb3Igbm90IHdhaXRpbmcgZm9yCiBhbHJlYWR5LWlu LXByb2dyZXNzIElPCgpBdXRob3I6ClJldmlld2VkLWJ5OgpEaXNjdXNzaW9uOiBodHRwczovL3Bv c3Rnci5lcy9tL3psamVyZ3dlcXRpN3g2N2xnNWlqZTJyemp1c2llMzduc2xzbmtqa2tieTRsYXFx YmZ3QDNwM3p1NTIyeXlrdgpCYWNrcGF0Y2g6Ci0tLQogc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZt Z3IuaCAgICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMg fCAxNTAgKysrKysrKysrKysrKysrKysrKysrKysrKystLQogMiBmaWxlcyBjaGFuZ2VkLCAxNDIg aW5zZXJ0aW9ucygrKSwgOSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9z dG9yYWdlL2J1Zm1nci5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZtZ3IuaAppbmRleCA5N2Mx MTI0YzEuLjFlZjNlYmM4ZiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZtZ3Iu aAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zm1nci5oCkBAIC0xNDcsNiArMTQ3LDcgQEAg c3RydWN0IFJlYWRCdWZmZXJzT3BlcmF0aW9uCiAJaW50CQkJZmxhZ3M7CiAJaW50MTYJCW5ibG9j a3M7CiAJaW50MTYJCW5ibG9ja3NfZG9uZTsKKwlib29sCQlmb3JlaWduX2lvOwogCVBnQWlvV2Fp dFJlZiBpb193cmVmOwogCVBnQWlvUmV0dXJuIGlvX3JldHVybjsKIH07CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv YnVmZmVyL2J1Zm1nci5jCmluZGV4IGNlNTJkNmNhOC4uYjRmODExMmJlIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYworKysgYi9zcmMvYmFja2VuZC9zdG9y YWdlL2J1ZmZlci9idWZtZ3IuYwpAQCAtMTUzOCw2ICsxNTM4LDQ2IEBAIFJlYWRCdWZmZXJzQ2Fu U3RhcnRJT09uY2UoQnVmZmVyIGJ1ZmZlciwgYm9vbCBub3dhaXQpCiAJCXJldHVybiBTdGFydEJ1 ZmZlcklPKEdldEJ1ZmZlckRlc2NyaXB0b3IoYnVmZmVyIC0gMSksIHRydWUsIG5vd2FpdCk7CiB9 CiAKKy8qCisgKiBDaGVjayBpZiB0aGUgYnVmZmVyIGlzIGFscmVhZHkgdW5kZXJnb2luZyByZWFk IEFJTy4gSWYgaXQgaXMsIGFzc2lnbiB0aGUKKyAqIElPJ3Mgd2FpdCByZWZlcmVuY2UgdG8gb3Bl cmF0aW9uLT5pb193cmVmLCB0aGVyZWJ5IGFsbG93aW5nIHRoZSBjYWxsZXIgdG8KKyAqIHdhaXQg Zm9yIHRoYXQgSU8uCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbAorUmVhZEJ1ZmZlcnNJT0FscmVh ZHlJblByb2dyZXNzKFJlYWRCdWZmZXJzT3BlcmF0aW9uICpvcGVyYXRpb24sIEJ1ZmZlciBidWZm ZXIpCit7CisJQnVmZmVyRGVzYyAqZGVzYzsKKwl1aW50MzIJCWJ1Zl9zdGF0ZTsKKwlQZ0Fpb1dh aXRSZWYgaW93OworCisJcGdhaW9fd3JlZl9jbGVhcigmaW93KTsKKworCWlmIChCdWZmZXJJc0xv Y2FsKGJ1ZmZlcikpCisJeworCQlkZXNjID0gR2V0TG9jYWxCdWZmZXJEZXNjcmlwdG9yKC1idWZm ZXIgLSAxKTsKKwkJYnVmX3N0YXRlID0gcGdfYXRvbWljX3JlYWRfdTMyKCZkZXNjLT5zdGF0ZSk7 CisJCWlmICgoYnVmX3N0YXRlICYgQk1fSU9fSU5fUFJPR1JFU1MpICYmICEoYnVmX3N0YXRlICYg Qk1fVkFMSUQpKQorCQkJaW93ID0gZGVzYy0+aW9fd3JlZjsKKwl9CisJZWxzZQorCXsKKwkJZGVz YyA9IEdldEJ1ZmZlckRlc2NyaXB0b3IoYnVmZmVyIC0gMSk7CisJCWJ1Zl9zdGF0ZSA9IExvY2tC dWZIZHIoZGVzYyk7CisKKwkJaWYgKChidWZfc3RhdGUgJiBCTV9JT19JTl9QUk9HUkVTUykgJiYg IShidWZfc3RhdGUgJiBCTV9WQUxJRCkpCisJCQlpb3cgPSBkZXNjLT5pb193cmVmOworCQlVbmxv Y2tCdWZIZHIoZGVzYyk7CisJfQorCisJaWYgKHBnYWlvX3dyZWZfdmFsaWQoJmlvdykpCisJewor CQlvcGVyYXRpb24tPmlvX3dyZWYgPSBpb3c7CisJCXJldHVybiB0cnVlOworCX0KKworCXJldHVy biBmYWxzZTsKK30KKwogLyoKICAqIEhlbHBlciBmb3IgQXN5bmNSZWFkQnVmZmVycyB0aGF0IHRy aWVzIHRvIGdldCB0aGUgYnVmZmVyIHJlYWR5IGZvciBJTy4KICAqLwpAQCAtMTY3MCw3ICsxNzEw LDcgQEAgV2FpdFJlYWRCdWZmZXJzKFJlYWRCdWZmZXJzT3BlcmF0aW9uICpvcGVyYXRpb24pCiAJ CQkgKgogCQkJICogd2UgZmlyc3QgY2hlY2sgaWYgd2UgYWxyZWFkeSBrbm93IHRoZSBJTyBpcyBj b21wbGV0ZS4KIAkJCSAqLwotCQkJaWYgKGFpb19yZXQtPnJlc3VsdC5zdGF0dXMgPT0gUEdBSU9f UlNfVU5LTk9XTiAmJgorCQkJaWYgKChvcGVyYXRpb24tPmZvcmVpZ25faW8gfHwgYWlvX3JldC0+ cmVzdWx0LnN0YXR1cyA9PSBQR0FJT19SU19VTktOT1dOKSAmJgogCQkJCSFwZ2Fpb193cmVmX2No ZWNrX2RvbmUoJm9wZXJhdGlvbi0+aW9fd3JlZikpCiAJCQl7CiAJCQkJaW5zdHJfdGltZQlpb19z dGFydCA9IHBnc3RhdF9wcmVwYXJlX2lvX3RpbWUodHJhY2tfaW9fdGltaW5nKTsKQEAgLTE2ODks MTEgKzE3MjksNjYgQEAgV2FpdFJlYWRCdWZmZXJzKFJlYWRCdWZmZXJzT3BlcmF0aW9uICpvcGVy YXRpb24pCiAJCQkJQXNzZXJ0KHBnYWlvX3dyZWZfY2hlY2tfZG9uZSgmb3BlcmF0aW9uLT5pb193 cmVmKSk7CiAJCQl9CiAKLQkJCS8qCi0JCQkgKiBXZSBub3cgYXJlIHN1cmUgdGhlIElPIGNvbXBs ZXRlZC4gQ2hlY2sgdGhlIHJlc3VsdHMuIFRoaXMKLQkJCSAqIGluY2x1ZGVzIHJlcG9ydGluZyBv biBlcnJvcnMgaWYgdGhlcmUgd2VyZSBhbnkuCi0JCQkgKi8KLQkJCVByb2Nlc3NSZWFkQnVmZmVy c1Jlc3VsdChvcGVyYXRpb24pOworCQkJaWYgKHVubGlrZWx5KG9wZXJhdGlvbi0+Zm9yZWlnbl9p bykpCisJCQl7CisJCQkJQnVmZmVyCQlidWZmZXIgPSBvcGVyYXRpb24tPmJ1ZmZlcnNbb3BlcmF0 aW9uLT5uYmxvY2tzX2RvbmVdOworCQkJCUJ1ZmZlckRlc2MgKmRlc2M7CisJCQkJdWludDMyCQli dWZfc3RhdGU7CisKKwkJCQlpZiAoQnVmZmVySXNMb2NhbChidWZmZXIpKQorCQkJCXsKKwkJCQkJ ZGVzYyA9IEdldExvY2FsQnVmZmVyRGVzY3JpcHRvcigtYnVmZmVyIC0gMSk7CisJCQkJCWJ1Zl9z dGF0ZSA9IHBnX2F0b21pY19yZWFkX3UzMigmZGVzYy0+c3RhdGUpOworCQkJCX0KKwkJCQllbHNl CisJCQkJeworCQkJCQlkZXNjID0gR2V0QnVmZmVyRGVzY3JpcHRvcihidWZmZXIgLSAxKTsKKwkJ CQkJYnVmX3N0YXRlID0gTG9ja0J1ZkhkcihkZXNjKTsKKwkJCQkJVW5sb2NrQnVmSGRyKGRlc2Mp OworCQkJCX0KKworCQkJCWlmIChidWZfc3RhdGUgJiBCTV9WQUxJRCkKKwkJCQl7CisJCQkJCW9w ZXJhdGlvbi0+bmJsb2Nrc19kb25lICs9IDE7CisJCQkJCUFzc2VydChvcGVyYXRpb24tPm5ibG9j a3NfZG9uZSA8PSBvcGVyYXRpb24tPm5ibG9ja3MpOworCisJCQkJCS8qCisJCQkJCSAqIFJlcG9y dCBhbmQgdHJhY2sgdGhpcyBhcyBhICdoaXQnIGZvciB0aGlzIGJhY2tlbmQsIGV2ZW4KKwkJCQkJ ICogdGhvdWdoIGl0IG11c3QgaGF2ZSBzdGFydGVkIG91dCBhcyBhIG1pc3MgaW4KKwkJCQkJICog UGluQnVmZmVyRm9yQmxvY2soKS4gVGhlIG90aGVyIGJhY2tlbmQgKG9yIG91cnNlbHZlcywKKwkJ CQkJICogYXMgcGFydCBvZiBhIHJlYWQgc3RhcnRlZCBlYXJsaWVyKSB3aWxsIHRyYWNrIHRoaXMg YXMgYQorCQkJCQkgKiAncmVhZCcuCisJCQkJCSAqLworCQkJCQlUUkFDRV9QT1NUR1JFU1FMX0JV RkZFUl9SRUFEX0RPTkUob3BlcmF0aW9uLT5mb3JrbnVtLAorCQkJCQkJCQkJCQkJCSAgb3BlcmF0 aW9uLT5ibG9ja251bSArIG9wZXJhdGlvbi0+bmJsb2Nrc19kb25lLAorCQkJCQkJCQkJCQkJCSAg b3BlcmF0aW9uLT5zbWdyLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3Iuc3BjT2lkLAorCQkJCQkJCQkJ CQkJCSAgb3BlcmF0aW9uLT5zbWdyLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3IuZGJPaWQsCisJCQkJ CQkJCQkJCQkJICBvcGVyYXRpb24tPnNtZ3ItPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5yZWxOdW1i ZXIsCisJCQkJCQkJCQkJCQkJICBvcGVyYXRpb24tPnNtZ3ItPnNtZ3JfcmxvY2F0b3IuYmFja2Vu ZCwKKwkJCQkJCQkJCQkJCQkgIHRydWUpOworCisJCQkJCWlmIChCdWZmZXJJc0xvY2FsKGJ1ZmZl cikpCisJCQkJCQlwZ0J1ZmZlclVzYWdlLmxvY2FsX2Jsa3NfaGl0ICs9IDE7CisJCQkJCWVsc2UK KwkJCQkJCXBnQnVmZmVyVXNhZ2Uuc2hhcmVkX2Jsa3NfaGl0ICs9IDE7CisKKwkJCQkJaWYgKG9w ZXJhdGlvbi0+cmVsKQorCQkJCQkJcGdzdGF0X2NvdW50X2J1ZmZlcl9oaXQob3BlcmF0aW9uLT5y ZWwpOworCisJCQkJCXBnc3RhdF9jb3VudF9pb19vcChpb19vYmplY3QsIGlvX2NvbnRleHQsIElP T1BfSElULCAxLCAwKTsKKworCQkJCQlpZiAoVmFjdXVtQ29zdEFjdGl2ZSkKKwkJCQkJCVZhY3V1 bUNvc3RCYWxhbmNlICs9IFZhY3V1bUNvc3RQYWdlSGl0OworCQkJCX0KKwkJCX0KKwkJCWVsc2UK KwkJCXsKKwkJCQkvKgorCQkJCSAqIFdlIG5vdyBhcmUgc3VyZSB0aGUgSU8gY29tcGxldGVkLiBD aGVjayB0aGUgcmVzdWx0cy4gVGhpcworCQkJCSAqIGluY2x1ZGVzIHJlcG9ydGluZyBvbiBlcnJv cnMgaWYgdGhlcmUgd2VyZSBhbnkuCisJCQkJICovCisJCQkJUHJvY2Vzc1JlYWRCdWZmZXJzUmVz dWx0KG9wZXJhdGlvbik7CisJCQl9CiAJCX0KIAogCQkvKgpAQCAtMTc3OSw2ICsxODc0LDQzIEBA IEFzeW5jUmVhZEJ1ZmZlcnMoUmVhZEJ1ZmZlcnNPcGVyYXRpb24gKm9wZXJhdGlvbiwgaW50ICpu YmxvY2tzX3Byb2dyZXNzKQogCQlpb19vYmplY3QgPSBJT09CSkVDVF9SRUxBVElPTjsKIAl9CiAK KwkvKgorCSAqIElmIEFJTyBpcyBpbiBwcm9ncmVzcywgYmUgaXQgaW4gdGhpcyBiYWNrZW5kIG9y IGFub3RoZXIgYmFja2VuZCwgd2UKKwkgKiBqdXN0IGFzc29jaWF0ZSB0aGUgd2FpdCByZWZlcmVu Y2Ugd2l0aCB0aGUgb3BlcmF0aW9uIGFuZCB3YWl0IGluCisJICogV2FpdFJlYWRCdWZmZXJzKCku IFRoaXMgdHVybnMgb3V0IHRvIGJlIGltcG9ydGFudCBmb3IgcGVyZm9ybWFuY2UgaW4KKwkgKiB0 d28gd29ya2xvYWRzOgorCSAqCisJICogMSkgQSByZWFkIHN0cmVhbSB0aGF0IGhhcyB0byByZWFk IHRoZSBzYW1lIGJsb2NrIG11bHRpcGxlIHRpbWVzIHdpdGhpbgorCSAqIHRoZSByZWFkYWhlYWQg ZGlzdGFuY2UuIFRoaXMgY2FuIGhhcHBlbiBlLmcuIGZvciB0aGUgdGFibGUgYWNjZXNzZXMgb2YK KwkgKiBhbiBpbmRleCBzY2FuLgorCSAqCisJICogMikgQ29uY3VycmVudCBzY2FucyBieSBtdWx0 aXBsZSBiYWNrZW5kcyBvbiB0aGUgc2FtZSByZWxhdGlvbi4KKwkgKgorCSAqIElmIHdlIHdlcmUg dG8gc3luY2hyb25vdXNseSB3YWl0IGZvciB0aGUgaW4tcHJvZ3Jlc3MgSU8sIHdlJ2Qgbm90IGJl CisJICogYWJsZSB0byBrZWVwIGVub3VnaCBJL08gaW4gZmxpZ2h0LgorCSAqCisJICogSWYgd2Ug ZG8gZmluZCB0aGVyZSBpcyBvbmdvaW5nIEkvTyBmb3IgdGhlIGJ1ZmZlciwgd2Ugc2V0IHVwIGEg MS1ibG9jaworCSAqIFJlYWRCdWZmZXJzT3BlcmF0aW9uIHRoYXQgV2FpdFJlYWRCdWZmZXJzIHRo ZW4gY2FuIHdhaXQgb24uCisJICoKKwkgKiBJdCdzIHBvc3NpYmxlIHRoYXQgYW5vdGhlciBiYWNr ZW5kIHN0YXJ0cyBJTyBvbiB0aGUgYnVmZmVyIGJldHdlZW4gdGhpcworCSAqIGNoZWNrIGFuZCB0 aGUgUmVhZEJ1ZmZlcnNDYW5TdGFydElPKG5vd2FpdCA9IGZhbHNlKSBiZWxvdy4gSW4gdGhhdCBj YXNlCisJICogd2Ugd2lsbCBzeW5jaHJvbm91c2x5IHdhaXQgZm9yIHRoZSBJTyBiZWxvdywgYnV0 IHRoZSB3aW5kb3cgZm9yIHRoYXQgaXMKKwkgKiBzbWFsbCBlbm91Z2ggdGhhdCBpdCB3b24ndCBo YXBwZW4gb2Z0ZW4gZW5vdWdoIHRvIGhhdmUgYSBzaWduaWZpY2FudAorCSAqIHBlcmZvcm1hbmNl IGltcGFjdC4KKwkgKi8KKwlpZiAoUmVhZEJ1ZmZlcnNJT0FscmVhZHlJblByb2dyZXNzKG9wZXJh dGlvbiwgYnVmZmVyc1tuYmxvY2tzX2RvbmVdKSkKKwl7CisJCSpuYmxvY2tzX3Byb2dyZXNzID0g MTsKKwkJb3BlcmF0aW9uLT5mb3JlaWduX2lvID0gdHJ1ZTsKKworCQlDaGVja1JlYWRCdWZmZXJz T3BlcmF0aW9uKG9wZXJhdGlvbiwgZmFsc2UpOworCisKKwkJcmV0dXJuIHRydWU7CisJfQorCisJ b3BlcmF0aW9uLT5mb3JlaWduX2lvID0gZmFsc2U7CisKIAkvKgogCSAqIElmIHplcm9fZGFtYWdl ZF9wYWdlcyBpcyBlbmFibGVkLCBhZGQgdGhlIFJFQURfQlVGRkVSU19aRVJPX09OX0VSUk9SCiAJ ICogZmxhZy4gVGhlIHJlYXNvbiBmb3IgdGhhdCBpcyB0aGF0LCBob3BlZnVsbHksIHplcm9fZGFt YWdlZF9wYWdlcyBpc24ndApAQCAtMTgzNiw5ICsxOTY4LDkgQEAgQXN5bmNSZWFkQnVmZmVycyhS ZWFkQnVmZmVyc09wZXJhdGlvbiAqb3BlcmF0aW9uLCBpbnQgKm5ibG9ja3NfcHJvZ3Jlc3MpCiAJ LyoKIAkgKiBDaGVjayBpZiB3ZSBjYW4gc3RhcnQgSU8gb24gdGhlIGZpcnN0IHRvLWJlLXJlYWQg YnVmZmVyLgogCSAqCi0JICogSWYgYW4gSS9PIGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3MgaW4gYW5v dGhlciBiYWNrZW5kLCB3ZSB3YW50IHRvIHdhaXQKLQkgKiBmb3IgdGhlIG91dGNvbWU6IGVpdGhl ciBkb25lLCBvciBzb21ldGhpbmcgd2VudCB3cm9uZyBhbmQgd2Ugd2lsbAotCSAqIHJldHJ5Lgor CSAqIElmIGEgc3luY2hyb25vdXMgSS9PIGlzIGluIHByb2dyZXNzIGluIGFub3RoZXIgYmFja2Vu ZCAoaXQgY2FuJ3QgYmUKKwkgKiB0aGlzIGJhY2tlbmQpLCB3ZSB3YW50IHRvIHdhaXQgZm9yIHRo ZSBvdXRjb21lOiBlaXRoZXIgZG9uZSwgb3IKKwkgKiBzb21ldGhpbmcgd2VudCB3cm9uZyBhbmQg d2Ugd2lsbCByZXRyeS4KIAkgKi8KIAlpZiAoIVJlYWRCdWZmZXJzQ2FuU3RhcnRJTyhidWZmZXJz W25ibG9ja3NfZG9uZV0sIGZhbHNlKSkKIAl7Ci0tIAoyLjUxLjAKCg== --000000000000c23a9a0645a0bc0c Content-Type: application/octet-stream; name="v3-0002-Add-prefetching-to-index-scans-using-batch-interf.patch" Content-Disposition: attachment; filename="v3-0002-Add-prefetching-to-index-scans-using-batch-interf.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mj0ldwbh3 RnJvbSA5OWYxODgzMGIwZTYxYTAyMTU1Y2NhY2MyOWRiYmY5ZTlmNmIyNTAxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFNh dCwgMTUgTm92IDIwMjUgMTQ6MDM6NTggLTA1MDAKU3ViamVjdDogW1BBVENIIHYzIDIvNF0gQWRk IHByZWZldGNoaW5nIHRvIGluZGV4IHNjYW5zIHVzaW5nIGJhdGNoIGludGVyZmFjZXMuCgpUaGlz IGNvbW1pdCBpbXBsZW1lbnRzIEkvTyBwcmVmZXRjaGluZyBmb3IgaW5kZXggc2NhbnMsIG1hZGUg cG9zc2libGUgYnkKdGhlIHJlY2VudCBhZGRpdGlvbiBvZiBiYXRjaGluZyBpbnRlcmZhY2VzIHRv IGJvdGggdGhlIHRhYmxlIEFNIGFuZAppbmRleCBBTSBBUElzLgoKVGhlIGFtZ2V0YmF0Y2ggaW5k ZXggQU0gaW50ZXJmYWNlIHByb3ZpZGVzIGJhdGNoZXMgb2YgVElEcyAocmF0aGVyIHRoYW4Kb25l IGF0IGEgdGltZSkgZnJvbSBhIHNpbmdsZSBpbmRleCBsZWFmIHBhZ2UsIGFuZCBhbGxvd3MgbXVs dGlwbGUKYmF0Y2hlcyB0byBiZSBoZWxkIGluIG1lbW9yeS9waW5uZWQgc2ltdWx0YW5lb3VzbHku ICBUaGlzIGdpdmVzIHRoZQp0YWJsZSBBTSB0aGUgZnJlZWRvbSB0byByZWFkYWhlYWQgd2l0aGlu IGFuIGluZGV4IHNjYW4sIHdoaWNoIGlzIGNydWNpYWwKZm9yIEkvTyBwcmVmZXRjaGluZyB3aXRo IGNlcnRhaW4gd29ya2xvYWRzICh3b3JrbG9hZHMgdGhhdCB3b3VsZApvdGhlcndpc2UgYmUgdW5h YmxlIHRvIGtlZXAgYSBzdWZmaWNpZW50bHkgaGlnaCBwcmVmZXRjaCBkaXN0YW5jZSBmb3IKaGVh cCBibG9jayBJL08pLiAgUHJlZmV0Y2hpbmcgaXMgaW1wbGVtZW50ZWQgdXNpbmcgYSByZWFkIHN0 cmVhbSB1bmRlcgp0aGUgY29udHJvbCBvZiB0aGUgdGFibGUgQU0uCgpYWFggV2hlbiB0aGUgYmF0 Y2ggcXVldWUgcmVhY2hlcyBjYXBhY2l0eSwgdGhlIHN0cmVhbSBwYXVzZXMgdW50aWwKdGhlIHNj YW4gY2F0Y2hlcyB1cCBhbmQgZnJlZXMgc29tZSBiYXRjaGVzLiAgV2UgbmVlZCBhIG1vcmUgcHJp bmNpcGxlZAphcHByb2FjaCBoZXJlLiAgRXNzZW50aWFsbHksIHdlIG5lZWQgaW5mcmFzdHJ1Y3R1 cmUgdGhhdCBhbGxvd3MgYSByZWFkCnN0cmVhbSBjYWxsIGJhY2sgdG8gdGVsbCB0aGUgcmVhZCBz dHJlYW0gdG8gImJhY2sgb2ZmIiB3aXRob3V0IGl0IGZ1bGx5CmVuZGluZy9yZXNldHRpbmcgdGhl IHJlYWQgc3RyZWFtLgoKTm90ZTogRm9yIG5vdyBwcmVmZXRjaGluZyBpcyB0ZW1wb3JhcmlseSBk aXNhYmxlZCBkdXJpbmcgaW5kZXgtb25seQpzY2FucywgcGVuZGluZyB0aGUgcmVpbnRyb2R1Y3Rp b24gb2YgdmlzaWJpbGl0eSBtYXAgY2FjaGluZyBpbiBiYXRjaGVzLgpQcmV2aW91cyB2ZXJzaW9u cyBvZiB0aGUgcGF0Y2ggc2VyaWVzIGhhZCB0aGF0LCBidXQgaXQgd2FzIHJlbW92ZWQgd2hlbgp3 ZSBtb3ZlZCBvdmVyIHRvIHRoZSBuZXcgdGFibGUgQU0gaW50ZXJmYWNlLgoKQXV0aG9yOiBUb21h cyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4KQXV0aG9yOiBQZXRlciBHZW9naGVnYW4gPHBnQGJv d3QuaWU+ClJldmlld2VkLUJ5OiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+ClJl dmlld2VkLUJ5OiBUaG9tYXMgTXVucm8gPHRob21hcy5tdW5yb0BnbWFpbC5jb20+CkRpc2N1c3Np b246IGh0dHBzOi8vcG9zdGdyLmVzL20vY2Y4NWY0NmYtYjAyZi0wNWIyLTUyNDgtNTAwMGI4OTRl YmFiQGVudGVycHJpc2VkYi5jb20KLS0tCiBzcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmggICAg ICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaCAgICAg ICAgICAgICAgICAgIHwgIDMyICstCiBzcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oICAgICAg ICAgICAgICAgICAgfCAgMTUgKwogc3JjL2luY2x1ZGUvb3B0aW1pemVyL2Nvc3QuaCAgICAgICAg ICAgICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVy LmMgICAgICB8IDMyNSArKysrKysrKysrKysrKysrKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9pbmRl eC9pbmRleGFtLmMgICAgICAgICAgICB8ICAxMCArLQogc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4 L2luZGV4YmF0Y2guYyAgICAgICAgIHwgIDQ2ICsrLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3Bh dGgvY29zdHNpemUuYyAgICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL3Jl YWRfc3RyZWFtLmMgICAgICAgICB8ICAxNCArLQogc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNf cGFyYW1ldGVycy5kYXQgICAgIHwgICA3ICsKIHNyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdy ZXNxbC5jb25mLnNhbXBsZSB8ICAgMSArCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N5c3Zp ZXdzLm91dCAgICAgICAgfCAgIDMgKy0KIDEyIGZpbGVzIGNoYW5nZWQsIDQzNSBpbnNlcnRpb25z KCspLCAyMSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVh cGFtLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgKaW5kZXggZThkMzQ3ZTQ3Li4yY2M4 MTczNjAgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaAorKysgYi9zcmMv aW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgKQEAgLTExNyw2ICsxMTcsNyBAQCB0eXBlZGVmIHN0cnVj dCBJbmRleEZldGNoSGVhcERhdGEKIAlJbmRleEZldGNoVGFibGVEYXRhIHhzX2Jhc2U7CS8qIEFN IGluZGVwZW5kZW50IHBhcnQgb2YgdGhlIGRlc2NyaXB0b3IgKi8KIAogCUJ1ZmZlcgkJeHNfY2J1 ZjsJCS8qIGN1cnJlbnQgaGVhcCBidWZmZXIgaW4gc2NhbiwgaWYgYW55ICovCisJQmxvY2tOdW1i ZXIgeHNfYmxrOwkJCS8qIHhzX2NidWYncyBibG9jayBudW1iZXIsIGlmIGFueSAqLwogCS8qIE5C OiBpZiB4c19jYnVmIGlzIG5vdCBJbnZhbGlkQnVmZmVyLCB3ZSBob2xkIGEgcGluIG9uIHRoYXQg YnVmZmVyICovCiAKIAlCdWZmZXIJCXZtYnVmOwkJCS8qIHZpc2liaWxpdHkgbWFwIGJ1ZmZlciAq LwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaCBiL3NyYy9pbmNsdWRl L2FjY2Vzcy9yZWxzY2FuLmgKaW5kZXggM2E0MTZlNzZiLi5kZmVmMmZmZmIgMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3Jl bHNjYW4uaApAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgIm5vZGVzL3RpZGJpdG1hcC5oIgog I2luY2x1ZGUgInBvcnQvYXRvbWljcy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvYnVmLmgiCisjaW5j bHVkZSAic3RvcmFnZS9yZWFkX3N0cmVhbS5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcmVsZmlsZWxv Y2F0b3IuaCIKICNpbmNsdWRlICJzdG9yYWdlL3NwaW4uaCIKICNpbmNsdWRlICJ1dGlscy9yZWxj YWNoZS5oIgpAQCAtMTI0LDYgKzEyNSw3IEBAIHR5cGVkZWYgc3RydWN0IFBhcmFsbGVsQmxvY2tU YWJsZVNjYW5Xb3JrZXJEYXRhICpQYXJhbGxlbEJsb2NrVGFibGVTY2FuV29ya2VyOwogdHlwZWRl ZiBzdHJ1Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YQogewogCVJlbGF0aW9uCXJlbDsKKwlSZWFkU3Ry ZWFtICpyczsKIAogCWludAkJCW5oZWFwYWNjZXNzZXM7CS8qIG51bWJlciBvZiBoZWFwIGFjY2Vz c2VzLCBmb3IKIAkJCQkJCQkJICogaW5zdHJ1bWVudGF0aW9uL21ldHJpY3MgKi8KQEAgLTIyNCw4 ICsyMjYsMTQgQEAgdHlwZWRlZiBzdHJ1Y3QgQmF0Y2hJbmRleFNjYW5EYXRhICpCYXRjaEluZGV4 U2NhbjsKICAqIE1heGltdW0gbnVtYmVyIG9mIGJhdGNoZXMgKGxlYWYgcGFnZXMpIHdlIGNhbiBr ZWVwIGluIG1lbW9yeS4gIFdlIG5lZWQgYQogICogbWluaW11bSBvZiB0d28sIHNpbmNlIHdlJ2xs IG9ubHkgY29uc2lkZXIgcmVsZWFzaW5nIG9uZSBiYXRjaCB3aGVuIGFub3RoZXIKICAqIGlzIHJl YWQuCisgKgorICogVGhlIGNob2ljZSBvZiA2NCBiYXRjaGVzIGlzIGFyYml0cmFyeS4gIEl0J3Mg YWJvdXQgMU1CIG9mIGRhdGEgd2l0aCA4S0IKKyAqIHBhZ2VzICg1MTJrQiBmb3IgcGFnZXMsIGFu ZCB0aGVuIGEgYml0IG9mIG92ZXJoZWFkKS4gV2Ugc2hvdWxkIG5vdCByZWFsbHkKKyAqIG5lZWQg dGhpcyBtYW55IGJhdGNoZXMgaW4gbW9zdCBjYXNlcywgdGhvdWdoLiBUaGUgcmVhZCBzdHJlYW0g bG9va3MgYWhlYWQKKyAqIGp1c3QgZW5vdWdoIHRvIHF1ZXVlIGVub3VnaCBJT3MsIGFkanVzdGlu ZyB0aGUgZGlzdGFuY2UgKFRJRHMsIGJ1dAorICogdWx0aW1hdGVseSB0aGUgbnVtYmVyIG9mIGZ1 dHVyZSBiYXRjaGVzKSB0byBtZWV0IHRoYXQuCiAgKi8KLSNkZWZpbmUgSU5ERVhfU0NBTl9NQVhf QkFUQ0hFUwkJMgorI2RlZmluZSBJTkRFWF9TQ0FOX01BWF9CQVRDSEVTCQk2NAogI2RlZmluZSBJ TkRFWF9TQ0FOX0NBQ0hFX0JBVENIRVMJMgogI2RlZmluZSBJTkRFWF9TQ0FOX0JBVENIX0NPVU5U KHNjYW4pIFwKIAkoKHNjYW4pLT5iYXRjaHF1ZXVlLT5uZXh0QmF0Y2ggLSAoc2NhbiktPmJhdGNo cXVldWUtPmhlYWRCYXRjaCkKQEAgLTI4Myw2ICsyOTEsMjcgQEAgdHlwZWRlZiBzdHJ1Y3QgQmF0 Y2hRdWV1ZQogCSAqIGl0J3Mgb3Zlci4KIAkgKi8KIAlib29sCQlmaW5pc2hlZDsKKwlib29sCQly ZXNldDsKKworCS8qCisJICogRGlkIHdlIGRpc2FibGUgcHJlZmV0Y2hpbmcvdXNlIG9mIGEgcmVh ZCBzdHJlYW0gYmVjYXVzZSBpdCBkaWRuJ3QgcGF5CisJICogZm9yIGl0c2VsZj8KKwkgKi8KKwli b29sCQlwcmVmZXRjaGluZ0xvY2tlZEluOworCWJvb2wJCWRpc2FibGVkOworCisJLyoKKwkgKiBE dXJpbmcgcHJlZmV0Y2hpbmcsIGN1cnJlbnRQcmVmZXRjaEJsb2NrIGlzIHRoZSB0YWJsZSBBTSBi bG9jayBudW1iZXIKKwkgKiB0aGF0IHdhcyByZXR1cm5lZCBieSBvdXIgcmVhZCBzdHJlYW0gY2Fs bGJhY2sgbW9zdCByZWNlbnRseS4gIFVzZWQgdG8KKwkgKiBzdXBwcmVzcyBkdXBsaWNhdGUgc3Vj Y2Vzc2l2ZSByZWFkIHN0cmVhbSBibG9jayByZXF1ZXN0cy4KKwkgKgorCSAqIFByZWZldGNoaW5n IGNhbiBzdGlsbCBwZXJmb3JtIG5vbi1zdWNjZXNzaXZlIHJlcXVlc3RzIGZvciB0aGUgc2FtZQor CSAqIGJsb2NrIG51bWJlciAoaW4gZ2VuZXJhbCB3ZSdyZSBwcmVmZXRjaGluZyBpbiBleGFjdGx5 IHRoZSBzYW1lIG9yZGVyCisJICogdGhhdCB0aGUgc2NhbiB3aWxsIHJldHVybiB0YWJsZSBBTSBU SURzIGluKS4gIFdlIG5lZWQgdG8gYXZvaWQKKwkgKiBkdXBsaWNhdGUgc3VjY2Vzc2l2ZSByZXF1 ZXN0cyBiZWNhdXNlIHRhYmxlIEFNcyBleHBlY3QgdG8gYmUgYWJsZSB0bworCSAqIGhhbmcgb24g dG8gYnVmZmVyIHBpbnMgYWNyb3NzIHRhYmxlX2luZGV4X2ZldGNoX3R1cGxlIGNhbGxzLgorCSAq LworCUJsb2NrTnVtYmVyIGN1cnJlbnRQcmVmZXRjaEJsb2NrOwogCiAJLyogQ3VycmVudCBzY2Fu IGRpcmVjdGlvbiwgZm9yIHRoZSBjdXJyZW50bHkgbG9hZGVkIGJhdGNoZXMgKi8KIAlTY2FuRGly ZWN0aW9uIGRpcmVjdGlvbjsKQEAgLTI5MCw2ICszMTksNyBAQCB0eXBlZGVmIHN0cnVjdCBCYXRj aFF1ZXVlCiAJLyogY3VycmVudCBwb3NpdGlvbnMgaW4gYmF0Y2hlc1tdIGZvciBzY2FuICovCiAJ QmF0Y2hRdWV1ZUl0ZW1Qb3MgcmVhZFBvczsJLyogcmVhZCBwb3NpdGlvbiAqLwogCUJhdGNoUXVl dWVJdGVtUG9zIG1hcmtQb3M7CS8qIG1hcmsvcmVzdG9yZSBwb3NpdGlvbiAqLworCUJhdGNoUXVl dWVJdGVtUG9zIHN0cmVhbVBvczsJLyogc3RyZWFtIHBvc2l0aW9uIChmb3IgcHJlZmV0Y2hpbmcp ICovCiAKIAlCYXRjaEluZGV4U2NhbiBtYXJrQmF0Y2g7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL2FjY2Vzcy90YWJsZWFtLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oCmluZGV4 IDNlOThkODUzNy4uYzNlNTgwMTJmIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFi bGVhbS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmgKQEAgLTQ1NCw2ICs0NTQs MjEgQEAgdHlwZWRlZiBzdHJ1Y3QgVGFibGVBbVJvdXRpbmUKIAkJCQkJCQkJCSAgIFNjYW5EaXJl Y3Rpb24gZGlyZWN0aW9uLAogCQkJCQkJCQkJICAgVHVwbGVUYWJsZVNsb3QgKnNsb3QpOwogCisJ LyoKKwkgKiBSZWFkIHN0cmVhbSBjYWxsYmFjaywgdXNlZCB0byBwZXJmb3JtIEkvTyBwcmVmZXRj aGluZyBvZiB0YWJsZSBBTSBwYWdlcworCSAqIGR1cmluZyBgaW5kZXhfZ2V0bmV4dF9zbG90YCBp bmRleCBzY2Fucy4KKwkgKgorCSAqIFRoaXMgY2FsbGJhY2sgaXMgZGlyZWN0bHkgcGFzc2VkIHRv IHJlYWRfc3RyZWFtX2JlZ2luX3JlbGF0aW9uLCBmcm9tCisJICogYmF0Y2hfZ2V0bmV4dCByb3V0 aW5lLiAgSXQgd2lsbCBvbmx5IGJlIHVzZWQgZHVyaW5nIHNjYW5zIHdob3NlIGluZGV4CisJICog QU0gdXNlcyB0aGUgYW1nZXRiYXRjaCBpbnRlcmZhY2UuICAoU2NhbnMgd2l0aCBhbWdldHR1cGxl LWJhc2VkIGluZGV4CisJICogQU1zIGNhbm5vdCByZWFzb25hYmx5IGJlIHVzZWQgZm9yIEkvTyBw cmVmZXRjaGluZywgc2luY2UgaXRzIG9wYXF1ZQorCSAqIHR1cGxlLWF0LWEtdGltZSBpbnRlcmZh Y2UgbWFrZXMgaXQgaW1wb3NzaWJsZSB0byBzY2hlZHVsZSBpbmRleCBzY2FuCisJICogd29yayBz ZW5zaWJseS4pCisJICovCisJQmxvY2tOdW1iZXIgKCppbmRleF9nZXRuZXh0X3N0cmVhbSkgKFJl YWRTdHJlYW0gKnN0cmVhbSwKKwkJCQkJCQkJCQkgdm9pZCAqY2FsbGJhY2tfcHJpdmF0ZV9kYXRh LAorCQkJCQkJCQkJCSB2b2lkICpwZXJfYnVmZmVyX2RhdGEpOworCiAJLyoKIAkgKiBGZXRjaCB0 dXBsZSBhdCBgdGlkYCBpbnRvIGBzbG90YCwgYWZ0ZXIgZG9pbmcgYSB2aXNpYmlsaXR5IHRlc3QK IAkgKiBhY2NvcmRpbmcgdG8gYHNuYXBzaG90YC4gSWYgYSB0dXBsZSB3YXMgZm91bmQgYW5kIHBh c3NlZCB0aGUgdmlzaWJpbGl0eQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL2Nv c3QuaCBiL3NyYy9pbmNsdWRlL29wdGltaXplci9jb3N0LmgKaW5kZXggYjUyM2JjZGE4Li4wMGY0 YzNkMDAgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL29wdGltaXplci9jb3N0LmgKKysrIGIvc3Jj L2luY2x1ZGUvb3B0aW1pemVyL2Nvc3QuaApAQCAtNTEsNiArNTEsNyBAQCBleHRlcm4gUEdETExJ TVBPUlQgQ29zdCBkaXNhYmxlX2Nvc3Q7CiBleHRlcm4gUEdETExJTVBPUlQgaW50IG1heF9wYXJh bGxlbF93b3JrZXJzX3Blcl9nYXRoZXI7CiBleHRlcm4gUEdETExJTVBPUlQgYm9vbCBlbmFibGVf c2Vxc2NhbjsKIGV4dGVybiBQR0RMTElNUE9SVCBib29sIGVuYWJsZV9pbmRleHNjYW47CitleHRl cm4gUEdETExJTVBPUlQgYm9vbCBlbmFibGVfaW5kZXhzY2FuX3ByZWZldGNoOwogZXh0ZXJuIFBH RExMSU1QT1JUIGJvb2wgZW5hYmxlX2luZGV4b25seXNjYW47CiBleHRlcm4gUEdETExJTVBPUlQg Ym9vbCBlbmFibGVfYml0bWFwc2NhbjsKIGV4dGVybiBQR0RMTElNUE9SVCBib29sIGVuYWJsZV90 aWRzY2FuOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRs ZXIuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKaW5kZXggYzEy ZGI0OGE2Li5jZGNmNjhhNmUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hl YXBhbV9oYW5kbGVyLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRs ZXIuYwpAQCAtNTksNiArNTksOSBAQCBzdGF0aWMgQmxvY2tOdW1iZXIgaGVhcGFtX3NjYW5fZ2V0 X2Jsb2Nrc19kb25lKEhlYXBTY2FuRGVzYyBoc2Nhbik7CiBzdGF0aWMgYm9vbCBCaXRtYXBIZWFw U2Nhbk5leHRCbG9jayhUYWJsZVNjYW5EZXNjIHNjYW4sCiAJCQkJCQkJCQlib29sICpyZWNoZWNr LAogCQkJCQkJCQkJdWludDY0ICpsb3NzeV9wYWdlcywgdWludDY0ICpleGFjdF9wYWdlcyk7Citz dGF0aWMgQmxvY2tOdW1iZXIgaGVhcGFtX2dldG5leHRfc3RyZWFtKFJlYWRTdHJlYW0gKnN0cmVh bSwKKwkJCQkJCQkJCQkgdm9pZCAqY2FsbGJhY2tfcHJpdmF0ZV9kYXRhLAorCQkJCQkJCQkJCSB2 b2lkICpwZXJfYnVmZmVyX2RhdGEpOwogCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTExLDEw ICsxMTQsMTIgQEAgaGVhcGFtX2luZGV4X2ZldGNoX2JlZ2luKFJlbGF0aW9uIHJlbCwgVHVwbGVU YWJsZVNsb3QgKmlvc190YWJsZXNsb3QpCiAJSW5kZXhGZXRjaEhlYXBEYXRhICpoc2NhbiA9IHBh bGxvY19vYmplY3QoSW5kZXhGZXRjaEhlYXBEYXRhKTsKIAogCWhzY2FuLT54c19iYXNlLnJlbCA9 IHJlbDsKKwloc2Nhbi0+eHNfYmFzZS5ycyA9IE5VTEw7CiAJaHNjYW4tPnhzX2Jhc2UubmhlYXBh Y2Nlc3NlcyA9IDA7CiAKIAkvKiBoZWFwYW0gc3BlY2lmaWMgZmllbGRzICovCiAJaHNjYW4tPnhz X2NidWYgPSBJbnZhbGlkQnVmZmVyOworCWhzY2FuLT54c19ibGsgPSBJbnZhbGlkQmxvY2tOdW1i ZXI7CiAJaHNjYW4tPnZtYnVmID0gSW52YWxpZEJ1ZmZlcjsKIAloc2Nhbi0+aW9zX3RhYmxlc2xv dCA9IGlvc190YWJsZXNsb3Q7CiAKQEAgLTEyNiwxMSArMTMxLDE1IEBAIGhlYXBhbV9pbmRleF9m ZXRjaF9yZXNldChJbmRleEZldGNoVGFibGVEYXRhICpzY2FuKQogewogCUluZGV4RmV0Y2hIZWFw RGF0YSAqaHNjYW4gPSAoSW5kZXhGZXRjaEhlYXBEYXRhICopIHNjYW47CiAKKwlpZiAoc2Nhbi0+ cnMpCisJCXJlYWRfc3RyZWFtX3Jlc2V0KHNjYW4tPnJzKTsKKwogCS8qIGRlbGliZXJhdGVseSBk b24ndCBkcm9wIFZNIGJ1ZmZlciBwaW4gaGVyZSAqLwogCWlmIChCdWZmZXJJc1ZhbGlkKGhzY2Fu LT54c19jYnVmKSkKIAl7CiAJCVJlbGVhc2VCdWZmZXIoaHNjYW4tPnhzX2NidWYpOwogCQloc2Nh bi0+eHNfY2J1ZiA9IEludmFsaWRCdWZmZXI7CisJCWhzY2FuLT54c19ibGsgPSBJbnZhbGlkQmxv Y2tOdW1iZXI7CiAJfQogfQogCkBAIC0xNDEsNiArMTUwLDkgQEAgaGVhcGFtX2luZGV4X2ZldGNo X2VuZChJbmRleEZldGNoVGFibGVEYXRhICpzY2FuKQogCiAJaGVhcGFtX2luZGV4X2ZldGNoX3Jl c2V0KHNjYW4pOwogCisJaWYgKHNjYW4tPnJzKQorCQlyZWFkX3N0cmVhbV9lbmQoc2Nhbi0+cnMp OworCiAJaWYgKGhzY2FuLT52bWJ1ZiAhPSBJbnZhbGlkQnVmZmVyKQogCXsKIAkJUmVsZWFzZUJ1 ZmZlcihoc2Nhbi0+dm1idWYpOwpAQCAtMTYzLDIzICsxNzUsMzcgQEAgaGVhcGFtX2luZGV4X2Zl dGNoX3R1cGxlKHN0cnVjdCBJbmRleEZldGNoVGFibGVEYXRhICpzY2FuLAogCiAJQXNzZXJ0KFRU U19JU19CVUZGRVJUVVBMRShzbG90KSk7CiAKLQkvKiBXZSBjYW4gc2tpcCB0aGUgYnVmZmVyLXN3 aXRjaGluZyBsb2dpYyBpZiB3ZSdyZSBpbiBtaWQtSE9UIGNoYWluLiAqLwotCWlmICghKmNhbGxf YWdhaW4pCisJLyoKKwkgKiBTd2l0Y2ggdG8gY29ycmVjdCBidWZmZXIgaWYgd2UgZG9uJ3QgaGF2 ZSBpdCBhbHJlYWR5ICh3ZSBjYW4gc2tpcCB0aGlzCisJICogaWYgd2UncmUgaW4gbWlkLUhPVCBj aGFpbikKKwkgKi8KKwlpZiAoISpjYWxsX2FnYWluICYmIGhzY2FuLT54c19ibGsgIT0gSXRlbVBv aW50ZXJHZXRCbG9ja051bWJlcih0aWQpKQogCXsKLQkJLyogU3dpdGNoIHRvIGNvcnJlY3QgYnVm ZmVyIGlmIHdlIGRvbid0IGhhdmUgaXQgYWxyZWFkeSAqLwotCQlCdWZmZXIJCXByZXZfYnVmID0g aHNjYW4tPnhzX2NidWY7CisJCS8qIFJlbWVtYmVyIHRoaXMgYnVmZmVyJ3MgYmxvY2sgbnVtYmVy IGZvciBuZXh0IHRpbWUgKi8KKwkJaHNjYW4tPnhzX2JsayA9IEl0ZW1Qb2ludGVyR2V0QmxvY2tO dW1iZXIodGlkKTsKIAotCQloc2Nhbi0+eHNfY2J1ZiA9IFJlbGVhc2VBbmRSZWFkQnVmZmVyKGhz Y2FuLT54c19jYnVmLAotCQkJCQkJCQkJCQkgIGhzY2FuLT54c19iYXNlLnJlbCwKLQkJCQkJCQkJ CQkJICBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKHRpZCkpOworCQlpZiAoQnVmZmVySXNWYWxp ZChoc2Nhbi0+eHNfY2J1ZikpCisJCQlSZWxlYXNlQnVmZmVyKGhzY2FuLT54c19jYnVmKTsKIAog CQkvKgotCQkgKiBQcnVuZSBwYWdlLCBidXQgb25seSBpZiB3ZSB3ZXJlbid0IGFscmVhZHkgb24g dGhpcyBwYWdlCisJCSAqIFdoZW4gdXNpbmcgYSByZWFkIHN0cmVhbSwgdGhlIHN0cmVhbSB3aWxs IGFscmVhZHkga25vdyB3aGljaCBibG9jaworCQkgKiBudW1iZXIgY29tZXMgbmV4dCAodGhvdWdo IGFuIGFzc2VydGlvbiB3aWxsIHZlcmlmeSBhIG1hdGNoIGJlbG93KQogCQkgKi8KLQkJaWYgKHBy ZXZfYnVmICE9IGhzY2FuLT54c19jYnVmKQotCQkJaGVhcF9wYWdlX3BydW5lX29wdChoc2Nhbi0+ eHNfYmFzZS5yZWwsIGhzY2FuLT54c19jYnVmKTsKKwkJaWYgKHNjYW4tPnJzKQorCQkJaHNjYW4t PnhzX2NidWYgPSByZWFkX3N0cmVhbV9uZXh0X2J1ZmZlcihzY2FuLT5ycywgTlVMTCk7CisJCWVs c2UKKwkJCWhzY2FuLT54c19jYnVmID0gUmVhZEJ1ZmZlcihoc2Nhbi0+eHNfYmFzZS5yZWwsIGhz Y2FuLT54c19ibGspOworCisJCS8qCisJCSAqIFBydW5lIHBhZ2Ugd2hlbiBpdCBpcyBwaW5uZWQg Zm9yIHRoZSBmaXJzdCB0aW1lCisJCSAqLworCQloZWFwX3BhZ2VfcHJ1bmVfb3B0KGhzY2FuLT54 c19iYXNlLnJlbCwgaHNjYW4tPnhzX2NidWYpOwogCX0KIAorCS8qIEFzc2VydCB0aGF0IHRoZSBU SUQncyBibG9jayBudW1iZXIncyBidWZmZXIgaXMgbm93IHBpbm5lZCAqLworCUFzc2VydChCdWZm ZXJJc1ZhbGlkKGhzY2FuLT54c19jYnVmKSk7CisJQXNzZXJ0KEJ1ZmZlckdldEJsb2NrTnVtYmVy KGhzY2FuLT54c19jYnVmKSA9PSBoc2Nhbi0+eHNfYmxrKTsKKwogCS8qIE9idGFpbiBzaGFyZS1s b2NrIG9uIHRoZSBidWZmZXIgc28gd2UgY2FuIGV4YW1pbmUgdmlzaWJpbGl0eSAqLwogCUxvY2tC dWZmZXIoaHNjYW4tPnhzX2NidWYsIEJVRkZFUl9MT0NLX1NIQVJFKTsKIAlnb3RfaGVhcF90dXBs ZSA9IGhlYXBfaG90X3NlYXJjaF9idWZmZXIodGlkLApAQCAtMzYzLDEzICszODksMjQgQEAgaGVh cGFtX2JhdGNoX2dldG5leHRfdGlkKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBk aXJlY3Rpb24pCiAJLyogSW5pdGlhbGl6ZSBkaXJlY3Rpb24gb24gZmlyc3QgY2FsbCAqLwogCWlm IChiYXRjaHF1ZXVlLT5kaXJlY3Rpb24gPT0gTm9Nb3ZlbWVudFNjYW5EaXJlY3Rpb24pCiAJCWJh dGNocXVldWUtPmRpcmVjdGlvbiA9IGRpcmVjdGlvbjsKKwllbHNlIGlmICh1bmxpa2VseShiYXRj aHF1ZXVlLT5kaXNhYmxlZCAmJiBzY2FuLT54c19oZWFwZmV0Y2gtPnJzKSkKKwl7CisJCS8qCisJ CSAqIEhhbmRsZSBjYW5jZWxsaW5nIHRoZSB1c2Ugb2YgdGhlIHJlYWQgc3RyZWFtIGZvciBwcmVm ZXRjaGluZworCQkgKi8KKwkJYmF0Y2hfcmVzZXRfcG9zKCZiYXRjaHF1ZXVlLT5zdHJlYW1Qb3Mp OworCisJCXJlYWRfc3RyZWFtX3Jlc2V0KHNjYW4tPnhzX2hlYXBmZXRjaC0+cnMpOworCQlzY2Fu LT54c19oZWFwZmV0Y2gtPnJzID0gTlVMTDsKKwl9CiAJZWxzZSBpZiAodW5saWtlbHkoYmF0Y2hx dWV1ZS0+ZGlyZWN0aW9uICE9IGRpcmVjdGlvbikpCiAJewogCQkvKgogCQkgKiBIYW5kbGUgYSBj aGFuZ2UgaW4gdGhlIHNjYW4ncyBkaXJlY3Rpb24uCiAJCSAqCiAJCSAqIFJlbGVhc2UgZnV0dXJl IGJhdGNoZXMgcHJvcGVybHksIHRvIG1ha2UgaXQgbG9vayBsaWtlIHRoZSBjdXJyZW50Ci0JCSAq IGJhdGNoIGlzIHRoZSBvbmx5IG9uZSB3ZSBsb2FkZWQuCisJCSAqIGJhdGNoIGlzIHRoZSBvbmx5 IG9uZSB3ZSBsb2FkZWQuIEFsc28gcmVzZXQgdGhlIHN0cmVhbSBwb3NpdGlvbiwgYXMKKwkJICog aWYgd2UgYXJlIGp1c3Qgc3RhcnRpbmcgdGhlIHNjYW4uCiAJCSAqLwogCQl3aGlsZSAoYmF0Y2hx dWV1ZS0+bmV4dEJhdGNoID4gYmF0Y2hxdWV1ZS0+aGVhZEJhdGNoICsgMSkKIAkJewpAQCAtMzg0 LDEwICs0MjEsMTYgQEAgaGVhcGFtX2JhdGNoX2dldG5leHRfdGlkKEluZGV4U2NhbkRlc2Mgc2Nh biwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24pCiAJCS8qCiAJCSAqIFJlbWVtYmVyIHRoZSBuZXcg ZGlyZWN0aW9uLCBhbmQgbWFrZSBzdXJlIHRoZSBzY2FuIGlzIG5vdCBtYXJrZWQgYXMKIAkJICog ImZpbmlzaGVkIiAod2UgbWlnaHQgaGF2ZSBhbHJlYWR5IHJlYWQgdGhlIGxhc3QgYmF0Y2gsIGJ1 dCBub3cgd2UKLQkJICogbmVlZCB0byBzdGFydCBvdmVyKS4KKwkJICogbmVlZCB0byBzdGFydCBv dmVyKS4gRG8gdGhpcyBiZWZvcmUgcmVzZXR0aW5nIHRoZSBzdHJlYW0gLSBpdAorCQkgKiBzaG91 bGQgbm90IGludm9rZSB0aGUgY2FsbGJhY2sgdW50aWwgdGhlIGZpcnN0IHJlYWQsIGJ1dCBpdCBt YXkKKwkJICogc2VlbSBhIGJpdCBjb25mdXNpbmcgb3RoZXJ3aXNlLgogCQkgKi8KIAkJYmF0Y2hx dWV1ZS0+ZGlyZWN0aW9uID0gZGlyZWN0aW9uOwogCQliYXRjaHF1ZXVlLT5maW5pc2hlZCA9IGZh bHNlOworCQliYXRjaF9yZXNldF9wb3MoJmJhdGNocXVldWUtPnN0cmVhbVBvcyk7CisKKwkJaWYg KHNjYW4tPnhzX2hlYXBmZXRjaC0+cnMpCisJCQlyZWFkX3N0cmVhbV9yZXNldChzY2FuLT54c19o ZWFwZmV0Y2gtPnJzKTsKIAl9CiAKIAkvKiBzaG9ydGN1dCBmb3IgdGhlIHJlYWQgcG9zaXRpb24s IGZvciBjb252ZW5pZW5jZSAqLwpAQCAtNDI5LDYgKzQ3MiwzNyBAQCBoZWFwYW1fYmF0Y2hfZ2V0 bmV4dF90aWQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbikKIAkJ CQlCYXRjaEluZGV4U2NhbiBoZWFkQmF0Y2ggPSBJTkRFWF9TQ0FOX0JBVENIKHNjYW4sCiAJCQkJ CQkJCQkJCQkJCQliYXRjaHF1ZXVlLT5oZWFkQmF0Y2gpOwogCisJCQkJLyoKKwkJCQkgKiBYWFgg V2hlbiBhZHZhbmNpbmcgcmVhZFBvcywgdGhlIHN0cmVhbVBvcyBtYXkgZ2V0IGJlaGluZCBhcwor CQkJCSAqIHdlJ3JlIG9ubHkgYWR2YW5jaW5nIGl0IHdoZW4gYWN0dWFsbHkgcmVxdWVzdGluZyBo ZWFwCisJCQkJICogYmxvY2tzLiBCdXQgd2UgbWF5IG5vdCBkbyB0aGF0IG9mdGVuIGVub3VnaCAt IGUuZy4gSU9TIG1heQorCQkJCSAqIG5vdCBuZWVkIHRvIGFjY2VzcyBhbGwtdmlzaWJsZSBoZWFw IGJsb2Nrcywgc28gdGhlCisJCQkJICogcmVhZF9uZXh0IGNhbGxiYWNrIGRvZXMgbm90IGdldCBp bnZva2VkIGZvciBhIGxvbmcgdGltZS4KKwkJCQkgKiBJdCdzIHBvc3NpYmxlIHRoZSBzdHJlYW0g Z2V0cyBzbyBmYXIgYmVoaW5kIHRoZSBwb3NpdGlvbgorCQkJCSAqIHRoYXQgaXMgYmVjb21lcyBp bnZhbGlkLCBhcyB3ZSBhbHJlYWR5IHJlbW92ZWQgdGhlIGJhdGNoLgorCQkJCSAqIEJ1dCB0aGF0 IG1lYW5zIHdlIGRvbid0IG5lZWQgYW55IGhlYXAgYmxvY2tzIHVudGlsIHRoZQorCQkJCSAqIGN1 cnJlbnQgcmVhZCBwb3NpdGlvbiAtLSBpZiB3ZSBkaWQsIHdlIHdvdWxkIG5vdCBiZSBpbiB0aGlz CisJCQkJICogc2l0dWF0aW9uIChvciBpdCdzIGEgc2lnbiBvZiBhIGJ1ZywgYXMgdGhvc2UgdHdv IHBsYWNlcyBhcmUKKwkJCQkgKiBleHBlY3RlZCB0byBiZSBpbiBzeW5jKS4gU28gaWYgdGhlIHN0 cmVhbVBvcyBzdGlsbCBwb2ludHMKKwkJCQkgKiBhdCB0aGUgYmF0Y2ggd2UncmUgYWJvdXQgdG8g ZnJlZSwgcmVzZXQgdGhlIHBvc2l0aW9uIC0tCisJCQkJICogd2UnbGwgc2V0IGl0IHRvIHJlYWRQ b3MgaW4gdGhlIHJlYWRfbmV4dCBjYWxsYmFjayBsYXRlciBvbi4KKwkJCQkgKgorCQkJCSAqIFhY WCBUaGlzIGNhbiBoYXBwZW4gYWZ0ZXIgdGhlIHF1ZXVlIGdldHMgZnVsbCwgd2UgInBhdXNlIgor CQkJCSAqIHRoZSBzdHJlYW0sIGFuZCB0aGVuIHJlc2V0IGl0IHRvIGNvbnRpbnVlLiBCdXQgSSB0 aGluayB0aGF0CisJCQkJICoganVzdCBpbmNyZWFzZXMgdGhlIHByb2JhYmlsaXR5IG9mIGhpdHRp bmcgdGhlIGlzc3VlLCBpdCdzCisJCQkJICoganVzdCBtb3JlIGNoYW5jZSB0byB0byBub3QgYWR2 YW5jZSB0aGUgc3RyZWFtUG9zLCB3aGljaAorCQkJCSAqIGRlcGVuZHMgb24gd2hlbiB3ZSB0cnkg dG8gZmV0Y2ggdGhlIGZpcnN0IGhlYXAgYmxvY2sgYWZ0ZXIKKwkJCQkgKiBjYWxsaW5nIHJlYWRf c3RyZWFtX3Jlc2V0KCkuCisJCQkJICoKKwkJCQkgKiBGSVhNRSBTaW1wbGlmeS9jbGFyaWZ5L3No b3J0ZW4gdGhpcyBjb21tZW50LiBDYW4gaXQKKwkJCQkgKiBhY3R1YWxseSBoYXBwZW4sIGlmIHdl IG5ldmVyIHB1bGwgZnJvbSB0aGUgc3RyZWFtIGluIElPUz8KKwkJCQkgKiBXZSBwcm9iYWJseSBk b24ndCBsb29rIGFoZWFkIGZvciB0aGUgZmlyc3QgY2FsbC4KKwkJCQkgKi8KKwkJCQlpZiAodW5s aWtlbHkoYmF0Y2hxdWV1ZS0+c3RyZWFtUG9zLmJhdGNoID09IGJhdGNocXVldWUtPmhlYWRCYXRj aCkpCisJCQkJeworCQkJCQliYXRjaF9yZXNldF9wb3MoJmJhdGNocXVldWUtPnN0cmVhbVBvcyk7 CisJCQkJfQorCiAJCQkJLyogRnJlZSB0aGUgaGVhZCBiYXRjaCAoZXhjZXB0IHdoZW4gaXQncyBt YXJrQmF0Y2gpICovCiAJCQkJYmF0Y2hfZnJlZShzY2FuLCBoZWFkQmF0Y2gpOwogCkBAIC00NDcs OCArNTIxLDM4IEBAIGhlYXBhbV9iYXRjaF9nZXRuZXh0X3RpZChJbmRleFNjYW5EZXNjIHNjYW4s IFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uKQogCQl9CiAKIAkJLyoKLQkJICogRmFpbGVkIHRvIGFk dmFuY2UgdGhlIHJlYWQgcG9zaXRpb24uICBIYXZlIGluZGV4YmF0Y2guYyB1dGlsaXR5Ci0JCSAq IHJvdXRpbmUgbG9hZCBhbm90aGVyIGJhdGNoIGludG8gb3VyIHF1ZXVlIChuZXh0IGluIHRoaXMg ZGlyZWN0aW9uKS4KKwkJICogV2UgZmFpbGVkIHRvIGFkdmFuY2UsIGkuZS4gd2UgcmFuIG91dCBv ZiBjdXJyZW50bHkgbG9hZGVkIGJhdGNoZXMuCisJCSAqIFNvIGlmIHdlIGZpbGxlZCB0aGUgcXVl dWUsIHRoaXMgaXMgYSBnb29kIHRpbWUgdG8gcmVzZXQgdGhlIHN0cmVhbQorCQkgKiAoYmVmb3Jl IHdlIHRyeSBsb2FkaW5nIHRoZSBuZXh0IGJhdGNoKS4KKwkJICovCisJCWlmICh1bmxpa2VseShi YXRjaHF1ZXVlLT5yZXNldCkpCisJCXsKKwkJCWJhdGNocXVldWUtPnJlc2V0ID0gZmFsc2U7CisJ CQliYXRjaHF1ZXVlLT5jdXJyZW50UHJlZmV0Y2hCbG9jayA9IEludmFsaWRCbG9ja051bWJlcjsK KworCQkJLyoKKwkJCSAqIE5lZWQgdG8gcmVzZXQgdGhlIHN0cmVhbSBwb3NpdGlvbiwgaXQgbWln aHQgYmUgdG9vIGZhciBiZWhpbmQuCisJCQkgKiBVbHRpbWF0ZWx5IHdlIHdhbnQgdG8gc2V0IGl0 IHRvIHJlYWRQb3MsIGJ1dCB3ZSBjYW4ndCBkbyB0aGF0CisJCQkgKiB5ZXQgLSByZWFkUG9zIHN0 aWxsIHBvaW50IHNhdCB0aGUgb2xkIGJhdGNoLCBzbyBqdXN0IHJlc2V0IGl0CisJCQkgKiBhbmQg d2UnbGwgaW5pdCBpdCB0byByZWFkUG9zIGxhdGVyIGluIHRoZSBjYWxsYmFjay4KKwkJCSAqLwor CQkJYmF0Y2hfcmVzZXRfcG9zKCZiYXRjaHF1ZXVlLT5zdHJlYW1Qb3MpOworCisJCQlpZiAoc2Nh bi0+eHNfaGVhcGZldGNoLT5ycykKKwkJCQlyZWFkX3N0cmVhbV9yZXNldChzY2FuLT54c19oZWFw ZmV0Y2gtPnJzKTsKKwkJfQorCisJCS8qCisJCSAqIEZhaWxlZCB0byBhZHZhbmNlIHRoZSByZWFk IHBvc2l0aW9uLCBzbyB0cnkgcmVhZGluZyB0aGUgbmV4dCBiYXRjaC4KKwkJICogSWYgdGhpcyBm YWlscywgd2UncmUgZG9uZSAtIHRoZXJlJ3Mgbm90aGluZyBtb3JlIHRvIGxvYWQuCisJCSAqCisJ CSAqIE1vc3Qgb2YgdGhlIGJhdGNoZXMgc2hvdWxkIGJlIGxvYWRlZCBmcm9tIHJlYWRfc3RyZWFt X25leHRfYnVmZmVyLAorCQkgKiBidXQgd2UgbmVlZCB0byBjYWxsIGJhdGNoX2dldG5leHQgaGVy ZSB0b28sIGZvciB0d28gcmVhc29ucy4gRmlyc3QsCisJCSAqIHRoZSByZWFkX3N0cmVhbSBvbmx5 IGdldHMgd29ya2luZyBhZnRlciB3ZSB0cnkgZmV0Y2hpbmcgdGhlIGZpcnN0CisJCSAqIGhlYXAg dHVwbGUsIHNvIHdlIG5lZWQgdG8gbG9hZCB0aGUgaW5pdGlhbCBiYXRjaCAodGhlIGhlYWQpLgor CQkgKiBTZWNvbmQsIHdoaWxlIG1vc3QgYmF0Y2hlcyB3aWxsIGJlIHByZWxvYWRlZCBieSB0aGUg c3RyZWFtIHRoYW5rcworCQkgKiB0byBwcmVmZXRjaGluZywgaXQncyBwb3NzaWJsZSB0byBzZXQg ZWZmZWN0aXZlX2lvX2NvbmN1cnJlbmN5PTAsCisJCSAqIGFuZCBpbiB0aGF0IGNhc2UgYWxsIHRo ZSBiYXRjaGVzIGdldCBsb2FkZWQgZnJvbSBoZXJlLgogCQkgKi8KIAkJaWYgKCFiYXRjaF9nZXRu ZXh0KHNjYW4sIGRpcmVjdGlvbikpCiAJCXsKQEAgLTQ2OCw2ICs1NzIsMTk4IEBAIGhlYXBhbV9i YXRjaF9nZXRuZXh0X3RpZChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0 aW9uKQogCXJldHVybiBOVUxMOwogfQogCisvKgorICogQ29udHJvbHMgd2hlbiB3ZSBjYW5jZWwg dXNlIG9mIGEgcmVhZCBzdHJlYW0gdG8gZG8gcHJlZmV0Y2hpbmcKKyAqLworI2RlZmluZSBJTkRF WF9TQ0FOX01JTl9ESVNUQU5DRV9OQkFUQ0hFUwkyMAorI2RlZmluZSBJTkRFWF9TQ0FOX01JTl9U VVBMRV9ESVNUQU5DRQkJNworCisvKgorICogaGVhcGFtX2dldG5leHRfc3RyZWFtCisgKgkJcmV0 dXJuIHRoZSBuZXh0IGJsb2NrIHRvIHBhc3MgdG8gdGhlIHJlYWQgc3RyZWFtCisgKgorICogVGhp cyBhc3N1bWVzIHRoZSAiY3VycmVudCIgc2NhbiBkaXJlY3Rpb24sIHJlcXVlc3RlZCBieSB0aGUg Y2FsbGVyLgorICoKKyAqIElmIHRoZSBkaXJlY3Rpb24gY2hhbmdlcyBiZWZvcmUgY29uc3VtaW5n IGFsbCBibG9ja3MsIHdlJ2xsIHJlc2V0IHRoZSBzdHJlYW0KKyAqIGFuZCBzdGFydCBmcm9tIHNj cmF0Y2guIFRoZSBzY2FuIGRpcmVjdGlvbiBjaGFuZ2UgaXMgaGFuZGxlZCBlbHNld2hlcmUuCisg KiBIZXJlIHdlIHJlbHkgb24gaGF2aW5nIHRoZSBjb3JyZWN0IHZhbHVlIGluIGJhdGNocXVldWUt PmRpcmVjdGlvbi4KKyAqCisgKiBUaGUgcG9zaXRpb24gb2YgdGhlIHJlYWRfc3RyZWFtIGlzIHN0 b3JlZCBpbiBzdHJlYW1Qb3MsIHdoaWNoIG1heSBiZSBhaGVhZCBvZgorICogdGhlIGN1cnJlbnQg cmVhZFBvcyAod2hpY2ggaXMgd2hhdCBnb3QgY29uc3VtZWQgYnkgdGhlIHNjYW4pLgorICoKKyAq IFRoZSBzdHJlYW1Qb3MgY2FuIGhvd2V2ZXIgYWxzbyBnZXQgYmVoaW5kIHJlYWRQb3MgdG9vLCB3 aGVuIHNvbWUgYmxvY2tzIGFyZQorICogc2tpcHBlZCBhbmQgbm90IHJldHVybmVkIHRvIHRoZSBy ZWFkX3N0cmVhbS4gQW4gZXhhbXBsZSBpcyBhbiBpbmRleCBzY2FuIG9uCisgKiBhIGNvcnJlbGF0 ZWQgaW5kZXgsIHdpdGggbWFueSBkdXBsaWNhdGUgYmxvY2tzIGFyZSBza2lwcGVkLCBvciBhbiBJ T1Mgd2hlcmUKKyAqIGFsbC12aXNpYmxlIGJsb2NrcyBhcmUgc2tpcHBlZC4KKyAqCisgKiBUaGUg aW5pdGlhbCBiYXRjaCBpcyBhbHdheXMgbG9hZGVkIGZyb20gYmF0Y2hfZ2V0bmV4dF90aWQoKS4g V2UgZG9uJ3QKKyAqIGdldCBoZXJlIHVudGlsIHRoZSBmaXJzdCByZWFkX3N0cmVhbV9uZXh0X2J1 ZmZlcigpIGNhbGwsIHdoZW4gcHVsbGluZyB0aGUKKyAqIGZpcnN0IGhlYXAgdHVwbGUgZnJvbSB0 aGUgc3RyZWFtLiBBZnRlciB0aGF0LCBtb3N0IGJhdGNoZXMgc2hvdWxkIGJlIGxvYWRlZAorICog YnkgdGhpcyBjYWxsYmFjaywgZHJpdmVuIGJ5IHRoZSByZWFkX3N0cmVhbSBsb29rLWFoZWFkIGRp c3RhbmNlLiBIb3dldmVyLAorICogd2l0aCBkaXNhYmxlZCBwcmVmZXRjaGluZyAodGhhdCBpcywg d2l0aCBlZmZlY3RpdmVfaW9fY29uY3VycmVuY3k9MCksIGFsbAorICogYmF0Y2hlcyB3aWxsIGJl IGxvYWRlZCBpbiBiYXRjaF9nZXRuZXh0X3RpZC4KKyAqCisgKiBJdCdzIHBvc3NpYmxlIHdlIGdv dCBoZXJlIG9ubHkgZmFpcmx5IGxhdGUgaW4gdGhlIHNjYW4sIGUuZy4gaWYgbWFueSB0dXBsZXMK KyAqIGdvdCBza2lwcGVkIGluIHRoZSBpbmRleC1vbmx5IHNjYW4sIGV0Yy4gSW4gdGhpcyBjYXNl IGp1c3QgdXNlIHRoZSByZWFkCisgKiBwb3NpdGlvbiBhcyBhIHN0cmVhbVBvcyBzdGFydGluZyBw b2ludC4KKyAqLworc3RhdGljIEJsb2NrTnVtYmVyCitoZWFwYW1fZ2V0bmV4dF9zdHJlYW0oUmVh ZFN0cmVhbSAqc3RyZWFtLCB2b2lkICpjYWxsYmFja19wcml2YXRlX2RhdGEsCisJCQkJCSAgdm9p ZCAqcGVyX2J1ZmZlcl9kYXRhKQoreworCUluZGV4U2NhbkRlc2Mgc2NhbiA9IChJbmRleFNjYW5E ZXNjKSBjYWxsYmFja19wcml2YXRlX2RhdGE7CisJQmF0Y2hRdWV1ZSAqYmF0Y2hxdWV1ZSA9IHNj YW4tPmJhdGNocXVldWU7CisJQmF0Y2hRdWV1ZUl0ZW1Qb3MgKnN0cmVhbVBvcyA9ICZiYXRjaHF1 ZXVlLT5zdHJlYW1Qb3M7CisJU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24gPSBiYXRjaHF1ZXVlLT5k aXJlY3Rpb247CisKKwkvKiBCeSBub3cgd2Ugc2hvdWxkIGtub3cgdGhlIGRpcmVjdGlvbiBvZiB0 aGUgc2Nhbi4gKi8KKwlBc3NlcnQoZGlyZWN0aW9uICE9IE5vTW92ZW1lbnRTY2FuRGlyZWN0aW9u KTsKKworCS8qCisJICogVGhlIHJlYWQgcG9zaXRpb24gKHJlYWRQb3MpIGhhcyB0byBiZSB2YWxp ZC4KKwkgKgorCSAqIFdlIGluaXRpYWxpemUvYWR2YW5jZSBpdCBiZWZvcmUgZXZlbiBhdHRlbXB0 aW5nIHRvIHJlYWQgdGhlIGhlYXAgdHVwbGUsCisJICogYW5kIGl0IGdldHMgaW52YWxpZGF0ZWQg d2hlbiB3ZSByZWFjaCB0aGUgZW5kIG9mIHRoZSBzY2FuIChidXQgdGhlbiB3ZQorCSAqIGRvbid0 IGludm9rZSB0aGUgY2FsbGJhY2sgYWdhaW4pLgorCSAqCisJICogWFhYIFRoaXMgYXBwbGllcyB0 byB0aGUgcmVhZFBvcy4gV2UnbGwgdXNlIHN0cmVhbVBvcyB0byBkZXRlcm1pbmUgd2hpY2gKKwkg KiBibG9ja3MgdG8gcGFzcyB0byB0aGUgc3RyZWFtLCBhbmQgcmVhZFBvcyBtYXkgYmUgdXNlZCB0 byBpbml0aWFsaXplIGl0LgorCSAqLworCWJhdGNoX2Fzc2VydF9wb3NfdmFsaWQoc2NhbiwgJmJh dGNocXVldWUtPnJlYWRQb3MpOworCisJLyoKKwkgKiBUcnkgdG8gYWR2YW5jZSB0aGUgc3RyZWFt UG9zIHRvIHRoZSBuZXh0IGl0ZW0sIGFuZCBpZiB0aGF0IGRvZXNuJ3QKKwkgKiBzdWNjZWVkIChp ZiB0aGVyZSBhcmUgbm8gbW9yZSBpdGVtcyBpbiBsb2FkZWQgYmF0Y2hlcyksIHRyeSBsb2FkaW5n IHRoZQorCSAqIG5leHQgb25lLgorCSAqCisJICogRklYTUUgVW5saWtlIGJhdGNoX2dldG5leHRf dGlkLCB0aGlzIGNhbiBsb29wIG1vcmUgdGhhbiB0d2ljZS4gSWYgbWFueQorCSAqIGJsb2NrcyBn ZXQgc2tpcHBlZCBkdWUgdG8gY3VycmVudFByZWZldGNoQmxvY2sgb3IgYWxsLXZpc2liaWxpdHkg KHBlcgorCSAqIHRoZSAicHJlZmV0Y2giIGNhbGxiYWNrKSwgd2UgZ2V0IHRvIGxvYWQgYWRkaXRp b25hbCBiYXRjaGVzLiBJbiB0aGUKKwkgKiB3b3JzdCBjYXNlIHdlIGhpdCB0aGUgSU5ERVhfU0NB Tl9NQVhfQkFUQ0hFUyBsaW1pdCBhbmQgaGF2ZSB0byAicGF1c2UiCisJICogdGhlIHN0cmVhbS4K KwkgKi8KKwl3aGlsZSAodHJ1ZSkKKwl7CisJCWJvb2wJCWFkdmFuY2VkID0gZmFsc2U7CisKKwkJ LyoKKwkJICogSWYgdGhlIHN0cmVhbSBwb3NpdGlvbiBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQg eWV0LCBzZXQgaXQgdG8gdGhlCisJCSAqIGN1cnJlbnQgcmVhZCBwb3NpdGlvbi4gVGhpcyBpcyB0 aGUgaXRlbSB0aGUgY2FsbGVyIGlzIHRyeWluZyB0bworCQkgKiByZWFkLCBzbyBpdCdzIHdoYXQg d2Ugc2hvdWxkIHJldHVybiB0byB0aGUgc3RyZWFtLgorCQkgKi8KKwkJaWYgKElOREVYX1NDQU5f UE9TX0lOVkFMSUQoc3RyZWFtUG9zKSkKKwkJeworCQkJKnN0cmVhbVBvcyA9IGJhdGNocXVldWUt PnJlYWRQb3M7CisJCQlhZHZhbmNlZCA9IHRydWU7CisJCX0KKwkJZWxzZSBpZiAoaGVhcF9iYXRj aF9hZHZhbmNlX3BvcyhzY2FuLCBzdHJlYW1Qb3MsIGRpcmVjdGlvbikpCisJCXsKKwkJCWFkdmFu Y2VkID0gdHJ1ZTsKKwkJfQorCisJCS8qCisJCSAqIEZJWE1FIE1heWJlIGNoZWNrIHRoZSBzdHJl YW1Qb3MgaXMgbm90IGJlaGluZCByZWFkUG9zPworCQkgKgorCQkgKiBGSVhNRSBBY3R1YWxseSwg Y291bGQgc3RyZWFtUG9zIGdldCBzdGFsZS9sYWdnaW5nIGJlaGluZCByZWFkUG9zLAorCQkgKiBh bmQgaWYgeWVzIGhvdyBtdWNoLiBDb3VsZCBpdCBnZXQgc28gZmFyIGJlaGluZCB0byBub3QgYmUg dmFsaWQsCisJCSAqIHBvaW50aW5nIGF0IGEgZnJlZWQgYmF0Y2g/IEluIHRoYXQgY2FzZSB3ZSBj YW4ndCBldmVuIGFkdmFuY2UgaXQsCisJCSAqIGFuZCB3ZSBzaG91bGQganVzdCBpbml0aWFsaXpl IGl0IHRvIHJlYWRQb3MuIFdlIG1pZ2h0IGRvIHRoYXQKKwkJICogYW55d2F5LCBJIGd1ZXNzLCBq dXN0IHRvIHNhdmUgb24gInBvaW50bGVzcyIgYWR2YW5jZXMgKGl0IG11c3QKKwkJICogYWdyZWUg d2l0aCByZWFkUG9zLCB3ZSBjYW4ndCBhbGxvdyAicmV0cm9hY3RpdmVseSIgY2hhbmdpbmcgdGhl CisJCSAqIGJsb2NrIHNlcXVlbmNlKS4KKwkJICovCisKKwkJLyoKKwkJICogSWYgd2UgYWR2YW5j ZWQgdGhlIHBvc2l0aW9uLCBlaXRoZXIgcmV0dXJuIHRoZSBibG9jayBmb3IgdGhlIFRJRCwKKwkJ ICogb3Igc2tpcCBpdCAoYW5kIHRoZW4gdHJ5IGFkdmFuY2luZyBhZ2FpbikuCisJCSAqCisJCSAq IFRoZSBibG9jayBtYXkgYmUgInNraXBwZWQiIGZvciB0d28gcmVhc29ucy4gRmlyc3QsIHRoZSBj YWxsZXIgbWF5CisJCSAqIGRlZmluZSBhICJwcmVmZXRjaCIgY2FsbGJhY2sgdGhhdCB0ZWxscyB1 cyB0byBza2lwIGl0ZW1zIChJT1MgZG9lcworCQkgKiB0aGlzIHRvIHNraXAgYWxsLXZpc2libGUg cGFnZXMpLiBTZWNvbmQsIGN1cnJlbnRQcmVmZXRjaEJsb2NrIGlzCisJCSAqIHVzZWQgdG8gc2tp cCBkdXBsaWNhdGUgYmxvY2sgbnVtYmVycyAoYSBzZXF1ZW5jZSBvZiBUSURTIGZvciB0aGUKKwkJ ICogc2FtZSBibG9jaykuCisJCSAqLworCQlpZiAoYWR2YW5jZWQpCisJCXsKKwkJCUJhdGNoSW5k ZXhTY2FuIHN0cmVhbUJhdGNoID0gSU5ERVhfU0NBTl9CQVRDSChzY2FuLCBzdHJlYW1Qb3MtPmJh dGNoKTsKKwkJCUl0ZW1Qb2ludGVyIHRpZCA9ICZzdHJlYW1CYXRjaC0+aXRlbXNbc3RyZWFtUG9z LT5pdGVtXS5oZWFwVGlkOworCisJCQlERUJVR19MT0coImhlYXBhbV9nZXRuZXh0X3N0cmVhbTog aXRlbSAlZCwgVElEICgldSwldSkiLAorCQkJCQkgIHN0cmVhbVBvcy0+aXRlbSwKKwkJCQkJICBJ dGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKHRpZCksCisJCQkJCSAgSXRlbVBvaW50ZXJHZXRPZmZz ZXROdW1iZXIodGlkKSk7CisKKwkJCS8qIHNhbWUgYmxvY2sgYXMgYmVmb3JlLCBkb24ndCBuZWVk IHRvIHJlYWQgaXQgKi8KKwkJCWlmIChiYXRjaHF1ZXVlLT5jdXJyZW50UHJlZmV0Y2hCbG9jayA9 PSBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKHRpZCkpCisJCQl7CisJCQkJREVCVUdfTE9HKCJo ZWFwYW1fZ2V0bmV4dF9zdHJlYW06IHNraXAgYmxvY2sgKGN1cnJlbnRQcmVmZXRjaEJsb2NrKSIp OworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQliYXRjaHF1ZXVlLT5jdXJyZW50UHJlZmV0Y2hC bG9jayA9IEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIodGlkKTsKKworCQkJcmV0dXJuIGJhdGNo cXVldWUtPmN1cnJlbnRQcmVmZXRjaEJsb2NrOworCQl9CisKKwkJLyoKKwkJICogQ291bGRuJ3Qg YWR2YW5jZSB0aGUgcG9zaXRpb24sIG5vIG1vcmUgaXRlbXMgaW4gdGhlIGxvYWRlZCBiYXRjaGVz LgorCQkgKiBUcnkgbG9hZGluZyB0aGUgbmV4dCBiYXRjaCAtIGlmIHRoYXQgc3VjY2VlZHMsIHRy eSBhZHZhbmNpbmcgYWdhaW4KKwkJICogKHRoaXMgdGltZSB0aGUgYWR2YW5jZSBzaG91bGQgd29y aywgYnV0IHdlIG1heSBza2lwIGFsbCB0aGUgaXRlbXMpLgorCQkgKgorCQkgKiBJZiB3ZSBmYWls IHRvIGxvYWQgdGhlIG5leHQgYmF0Y2gsIHdlJ3JlIGRvbmUuCisJCSAqLworCQlpZiAoIWJhdGNo X2dldG5leHQoc2NhbiwgZGlyZWN0aW9uKSkKKwkJCWJyZWFrOworCisJCS8qCisJCSAqIENvbnNp ZGVyIGRpc2FibGluZyBwcmVmZXRjaGluZyB3aGVuIHdlIGNhbid0IGtlZXAgYSBzdWZmaWNpZW50 bHkKKwkJICogbGFyZ2UgImluZGV4IHR1cGxlIGRpc3RhbmNlIiBiZXR3ZWVuIHJlYWRQb3MgYW5k IHN0cmVhbVBvcy4KKwkJICoKKwkJICogT25seSBjb25zaWRlciBkb2luZyB0aGlzIHdoZW4gd2Un cmUgbm90IG9uIHRoZSBzY2FuJ3MgaW5pdGlhbAorCQkgKiBiYXRjaCwgd2hlbiByZWFkUG9zIGFu ZCBzdHJlYW1Qb3Mgc2hhcmUgdGhlIHNhbWUgYmF0Y2guCisJCSAqLworCQlpZiAoIWJhdGNocXVl dWUtPmZpbmlzaGVkICYmICFiYXRjaHF1ZXVlLT5wcmVmZXRjaGluZ0xvY2tlZEluKQorCQl7CisJ CQlpbnQJCQlpdGVtZGlmZjsKKworCQkJaWYgKHN0cmVhbVBvcy0+YmF0Y2ggPD0gSU5ERVhfU0NB Tl9NSU5fRElTVEFOQ0VfTkJBVENIRVMpCisJCQl7CisJCQkJLyogVG9vIGVhcmx5IHRvIGNoZWNr IGlmIHByZWZldGNoaW5nIHNob3VsZCBiZSBkaXNhYmxlZCAqLworCQkJfQorCQkJZWxzZSBpZiAo YmF0Y2hxdWV1ZS0+cmVhZFBvcy5iYXRjaCA9PSBzdHJlYW1Qb3MtPmJhdGNoKQorCQkJeworCQkJ CUJhdGNoUXVldWVJdGVtUG9zICpyZWFkUG9zID0gJmJhdGNocXVldWUtPnJlYWRQb3M7CisKKwkJ CQlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXJlY3Rpb24pKQorCQkJCQlpdGVtZGlmZiA9 IHN0cmVhbVBvcy0+aXRlbSAtIHJlYWRQb3MtPml0ZW07CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJ QmF0Y2hJbmRleFNjYW4gcmVhZEJhdGNoID0KKwkJCQkJCUlOREVYX1NDQU5fQkFUQ0goc2Nhbiwg cmVhZFBvcy0+YmF0Y2gpOworCisJCQkJCWl0ZW1kaWZmID0gKHJlYWRQb3MtPml0ZW0gLSByZWFk QmF0Y2gtPmZpcnN0SXRlbSkgLQorCQkJCQkJKHN0cmVhbVBvcy0+aXRlbSAtIHJlYWRCYXRjaC0+ Zmlyc3RJdGVtKTsKKwkJCQl9CisKKwkJCQlpZiAoaXRlbWRpZmYgPCBJTkRFWF9TQ0FOX01JTl9U VVBMRV9ESVNUQU5DRSkKKwkJCQl7CisJCQkJCWJhdGNocXVldWUtPmRpc2FibGVkID0gdHJ1ZTsK KwkJCQkJcmV0dXJuIEludmFsaWRCbG9ja051bWJlcjsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsK KwkJCQkJYmF0Y2hxdWV1ZS0+cHJlZmV0Y2hpbmdMb2NrZWRJbiA9IHRydWU7CisJCQkJfQorCQkJ fQorCQkJZWxzZQorCQkJCWJhdGNocXVldWUtPnByZWZldGNoaW5nTG9ja2VkSW4gPSB0cnVlOwor CQl9CisJfQorCisJLyogbm8gbW9yZSBpdGVtcyBpbiB0aGlzIHNjYW4gKi8KKwlyZXR1cm4gSW52 YWxpZEJsb2NrTnVtYmVyOworfQorCiAvKiAtLS0tLS0tLS0tLS0tLS0tCiAgKgkJaW5kZXhfZmV0 Y2hfaGVhcCAtIGdldCB0aGUgc2NhbidzIG5leHQgaGVhcCB0dXBsZQogICoKQEAgLTMxMzcsNiAr MzQzMyw3IEBAIHN0YXRpYyBjb25zdCBUYWJsZUFtUm91dGluZSBoZWFwYW1fbWV0aG9kcyA9IHsK IAkuaW5kZXhfZmV0Y2hfcmVzZXQgPSBoZWFwYW1faW5kZXhfZmV0Y2hfcmVzZXQsCiAJLmluZGV4 X2ZldGNoX2VuZCA9IGhlYXBhbV9pbmRleF9mZXRjaF9lbmQsCiAJLmluZGV4X2dldG5leHRfc2xv dCA9IGhlYXBhbV9pbmRleF9nZXRuZXh0X3Nsb3QsCisJLmluZGV4X2dldG5leHRfc3RyZWFtID0g aGVhcGFtX2dldG5leHRfc3RyZWFtLAogCS5pbmRleF9mZXRjaF90dXBsZSA9IGhlYXBhbV9pbmRl eF9mZXRjaF90dXBsZSwKIAogCS50dXBsZV9pbnNlcnQgPSBoZWFwYW1fdHVwbGVfaW5zZXJ0LApk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YW0uYyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy9pbmRleC9pbmRleGFtLmMKaW5kZXggOWU0ZWQ1YjU1Li4xOTM2YTM0YzggMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGFtLmMKKysrIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YW0uYwpAQCAtNDU5LDcgKzQ1OSwxNSBAQCBpbmRleF9y ZXN0cnBvcyhJbmRleFNjYW5EZXNjIHNjYW4pCiAJQ0hFQ0tfU0NBTl9QUk9DRURVUkUoYW1nZXRi YXRjaCk7CiAJQ0hFQ0tfU0NBTl9QUk9DRURVUkUoYW1wb3NyZXNldCk7CiAKLQkvKiByZWxlYXNl IHJlc291cmNlcyAobGlrZSBidWZmZXIgcGlucykgZnJvbSB0YWJsZSBhY2Nlc3NlcyAqLworCS8q CisJICogcmVsZWFzZSByZXNvdXJjZXMgKGxpa2UgYnVmZmVyIHBpbnMpIGZyb20gdGFibGUgYWNj ZXNzZXMKKwkgKgorCSAqIFhYWDogQ3VycmVudGx5LCB0aGUgZGlzdGFuY2UgaXMgYWx3YXlzIHJl bWVtYmVyZWQgYWNyb3NzIGFueQorCSAqIHJlYWRfc3RyZWFtX3Jlc2V0IGNhbGxzICh0byB3b3Jr IGFyb3VuZCB0aGUgc2Nhbi0+YmF0Y2hxdWV1ZS0+cmVzZXQKKwkgKiBiZWhhdmlvciBvZiByZXNl dHRpbmcgdGhlIHN0cmVhbSB0byBkZWFsIHdpdGggcnVubmluZyBvdXQgb2YgYmF0Y2hlcykuCisJ ICogV2UgcHJvYmFibHkgX3Nob3VsZF8gYmUgZm9yZ2V0dGluZyB0aGUgZGlzdGFuY2Ugd2hlbiB3 ZSByZXNldCB0aGUKKwkgKiBzdHJlYW0gaGVyZSAodGhyb3VnaCBvdXIgdGFibGVfaW5kZXhfZmV0 Y2hfcmVzZXQgY2FsbCksIHRob3VnaC4KKwkgKi8KIAlpZiAoc2Nhbi0+eHNfaGVhcGZldGNoKQog CQl0YWJsZV9pbmRleF9mZXRjaF9yZXNldChzY2FuLT54c19oZWFwZmV0Y2gpOwogCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhiYXRjaC5jIGIvc3JjL2JhY2tlbmQv YWNjZXNzL2luZGV4L2luZGV4YmF0Y2guYwppbmRleCBlMzBjYzE3OWMuLjM0Zjk2ZTU0NCAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YmF0Y2guYworKysgYi9zcmMv YmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhiYXRjaC5jCkBAIC03NSwxMSArNzUsMTYgQEAgaW5k ZXhfYmF0Y2hfaW5pdChJbmRleFNjYW5EZXNjIHNjYW4pCiAJCSghc2Nhbi0+eHNfd2FudF9pdHVw ICYmIElzTVZDQ1NuYXBzaG90KHNjYW4tPnhzX3NuYXBzaG90KSAmJgogCQkgUmVsYXRpb25OZWVk c1dBTChzY2FuLT5pbmRleFJlbGF0aW9uKSk7CiAJc2Nhbi0+YmF0Y2hxdWV1ZS0+ZmluaXNoZWQg PSBmYWxzZTsKKwlzY2FuLT5iYXRjaHF1ZXVlLT5yZXNldCA9IGZhbHNlOworCXNjYW4tPmJhdGNo cXVldWUtPnByZWZldGNoaW5nTG9ja2VkSW4gPSBmYWxzZTsKKwlzY2FuLT5iYXRjaHF1ZXVlLT5k aXNhYmxlZCA9IGZhbHNlOworCXNjYW4tPmJhdGNocXVldWUtPmN1cnJlbnRQcmVmZXRjaEJsb2Nr ID0gSW52YWxpZEJsb2NrTnVtYmVyOwogCXNjYW4tPmJhdGNocXVldWUtPmRpcmVjdGlvbiA9IE5v TW92ZW1lbnRTY2FuRGlyZWN0aW9uOwogCiAJLyogcG9zaXRpb25zIGluIHRoZSBxdWV1ZSBvZiBi YXRjaGVzICovCiAJYmF0Y2hfcmVzZXRfcG9zKCZzY2FuLT5iYXRjaHF1ZXVlLT5yZWFkUG9zKTsK IAliYXRjaF9yZXNldF9wb3MoJnNjYW4tPmJhdGNocXVldWUtPm1hcmtQb3MpOworCWJhdGNoX3Jl c2V0X3Bvcygmc2Nhbi0+YmF0Y2hxdWV1ZS0+c3RyZWFtUG9zKTsKIAogCXNjYW4tPmJhdGNocXVl dWUtPm1hcmtCYXRjaCA9IE5VTEw7CiAJc2Nhbi0+YmF0Y2hxdWV1ZS0+aGVhZEJhdGNoID0gMDsJ LyogaW5pdGlhbCBoZWFkIGJhdGNoICovCkBAIC0xMjMsNyArMTI4LDIzIEBAIGJhdGNoX2dldG5l eHQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbikKIAlpZiAoYmF0 Y2hxdWV1ZS0+ZmluaXNoZWQpCiAJCXJldHVybiBmYWxzZTsKIAotCUFzc2VydCghSU5ERVhfU0NB Tl9CQVRDSF9GVUxMKHNjYW4pKTsKKwkvKgorCSAqIElmIHdlIGFscmVhZHkgdXNlZCB0aGUgbWF4 aW11bSBudW1iZXIgb2YgYmF0Y2ggc2xvdHMgYXZhaWxhYmxlLCBpdCdzCisJICogcG9pbnRsZXNz IHRvIHRyeSBsb2FkaW5nIGFub3RoZXIgb25lLiBUaGlzIGNhbiBoYXBwZW4gZm9yIHZhcmlvdXMK KwkgKiByZWFzb25zLCBlLmcuIGZvciBpbmRleC1vbmx5IHNjYW5zIG9uIGFsbC12aXNpYmxlIHRh YmxlLCBvciBza2lwcGluZworCSAqIGR1cGxpY2F0ZSBibG9ja3Mgb24gcGVyZmVjdGx5IGNvcnJl bGF0ZWQgaW5kZXhlcywgZXRjLgorCSAqCisJICogV2UgY291bGQgZW5sYXJnZSB0aGUgYXJyYXkg dG8gYWxsb3cgbW9yZSBiYXRjaGVzLCBidXQgdGhhdCdzIGZ1dGlsZSwgd2UKKwkgKiBjYW4gYWx3 YXlzIGNvbnN0cnVjdCBhIGNhc2UgdXNpbmcgbW9yZSBtZW1vcnkuIE5vdCBvbmx5IGl0IHdvdWxk IHJpc2sKKwkgKiBPT00sIGl0J2QgYWxzbyBiZSBpbmVmZmljaWVudCBiZWNhdXNlIHRoaXMgaGFw cGVucyBlYXJseSBpbiB0aGUgc2NhbgorCSAqIChzbyBpdCdkIGludGVyZmVyZSB3aXRoIExJTUlU IHF1ZXJpZXMpLgorCSAqLworCWlmIChJTkRFWF9TQ0FOX0JBVENIX0ZVTEwoc2NhbikpCisJewor CQlERUJVR19MT0coImJhdGNoX2dldG5leHQ6IHJhbiBvdXQgb2Ygc3BhY2UgZm9yIGJhdGNoZXMi KTsKKwkJc2Nhbi0+YmF0Y2hxdWV1ZS0+cmVzZXQgPSB0cnVlOworCQlyZXR1cm4gZmFsc2U7CisJ fQogCiAJYmF0Y2hfZGVidWdfcHJpbnRfYmF0Y2hlcygiYmF0Y2hfZ2V0bmV4dCAvIHN0YXJ0Iiwg c2Nhbik7CiAKQEAgLTE0OCw2ICsxNjksMTcgQEAgYmF0Y2hfZ2V0bmV4dChJbmRleFNjYW5EZXNj IHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uKQogCiAJCURFQlVHX0xPRygiYmF0Y2hfZ2V0 bmV4dCBoZWFkQmF0Y2ggJWQgbmV4dEJhdGNoICVkIGJhdGNoICVwIiwKIAkJCQkgIGJhdGNocXVl dWUtPmhlYWRCYXRjaCwgYmF0Y2hxdWV1ZS0+bmV4dEJhdGNoLCBiYXRjaCk7CisKKwkJLyogRGVs YXkgaW5pdGlhbGl6aW5nIHN0cmVhbSB1bnRpbCByZWFkaW5nIGZyb20gc2NhbidzIHNlY29uZCBi YXRjaCAqLworCQlpZiAocHJpb3JiYXRjaCAmJiAhc2Nhbi0+eHNfaGVhcGZldGNoLT5ycyAmJiAh YmF0Y2hxdWV1ZS0+ZGlzYWJsZWQgJiYKKwkJCSFzY2FuLT54c193YW50X2l0dXAgJiYJLyogWFhY IHByZWZldGNoaW5nIGRpc2FibGVkIGZvciBJb1MsIGZvcgorCQkJCQkJCQkJICogbm93ICovCisJ CQllbmFibGVfaW5kZXhzY2FuX3ByZWZldGNoKQorCQkJc2Nhbi0+eHNfaGVhcGZldGNoLT5ycyA9 CisJCQkJcmVhZF9zdHJlYW1fYmVnaW5fcmVsYXRpb24oUkVBRF9TVFJFQU1fREVGQVVMVCwgTlVM TCwKKwkJCQkJCQkJCQkgICBzY2FuLT5oZWFwUmVsYXRpb24sIE1BSU5fRk9SS05VTSwKKwkJCQkJ CQkJCQkgICBzY2FuLT5oZWFwUmVsYXRpb24tPnJkX3RhYmxlYW0tPmluZGV4X2dldG5leHRfc3Ry ZWFtLAorCQkJCQkJCQkJCSAgIHNjYW4sIDApOwogCX0KIAllbHNlCiAJCWJhdGNocXVldWUtPmZp bmlzaGVkID0gdHJ1ZTsKQEAgLTE4MCw5ICsyMTIsMTIgQEAgaW5kZXhfYmF0Y2hfcmVzZXQoSW5k ZXhTY2FuRGVzYyBzY2FuLCBib29sIGNvbXBsZXRlKQogCWJhdGNoX2Fzc2VydF9iYXRjaGVzX3Zh bGlkKHNjYW4pOwogCWJhdGNoX2RlYnVnX3ByaW50X2JhdGNoZXMoImluZGV4X2JhdGNoX3Jlc2V0 Iiwgc2Nhbik7CiAJQXNzZXJ0KHNjYW4tPnhzX2hlYXBmZXRjaCk7CisJaWYgKHNjYW4tPnhzX2hl YXBmZXRjaC0+cnMpCisJCXJlYWRfc3RyZWFtX3Jlc2V0KHNjYW4tPnhzX2hlYXBmZXRjaC0+cnMp OwogCiAJLyogcmVzZXQgdGhlIHBvc2l0aW9ucyAqLwogCWJhdGNoX3Jlc2V0X3BvcygmYmF0Y2hx dWV1ZS0+cmVhZFBvcyk7CisJYmF0Y2hfcmVzZXRfcG9zKCZiYXRjaHF1ZXVlLT5zdHJlYW1Qb3Mp OwogCiAJLyoKIAkgKiBXaXRoICJjb21wbGV0ZSIgcmVzZXQsIG1ha2Ugc3VyZSB0byBhbHNvIGZy ZWUgdGhlIG1hcmtlZCBiYXRjaCwgZWl0aGVyCkBAIC0yMjgsNiArMjYzLDggQEAgaW5kZXhfYmF0 Y2hfcmVzZXQoSW5kZXhTY2FuRGVzYyBzY2FuLCBib29sIGNvbXBsZXRlKQogCWJhdGNocXVldWUt Pm5leHRCYXRjaCA9IDA7CS8qIGluaXRpYWwgYmF0Y2ggaXMgZW1wdHkgKi8KIAogCWJhdGNocXVl dWUtPmZpbmlzaGVkID0gZmFsc2U7CisJYmF0Y2hxdWV1ZS0+cmVzZXQgPSBmYWxzZTsKKwliYXRj aHF1ZXVlLT5jdXJyZW50UHJlZmV0Y2hCbG9jayA9IEludmFsaWRCbG9ja051bWJlcjsKIAogCWJh dGNoX2Fzc2VydF9iYXRjaGVzX3ZhbGlkKHNjYW4pOwogfQpAQCAtMjkxLDkgKzMyOCwxMyBAQCBp bmRleF9iYXRjaF9yZXN0b3JlX3BvcyhJbmRleFNjYW5EZXNjIHNjYW4pCiB7CiAJQmF0Y2hRdWV1 ZSAqYmF0Y2hxdWV1ZSA9IHNjYW4tPmJhdGNocXVldWU7CiAJQmF0Y2hRdWV1ZUl0ZW1Qb3MgKm1h cmtQb3MgPSAmYmF0Y2hxdWV1ZS0+bWFya1BvczsKLQlCYXRjaFF1ZXVlSXRlbVBvcyAqcmVhZFBv cyA9ICZiYXRjaHF1ZXVlLT5yZWFkUG9zOwogCUJhdGNoSW5kZXhTY2FuIG1hcmtCYXRjaCA9IGJh dGNocXVldWUtPm1hcmtCYXRjaDsKIAorCS8qCisJICogWFhYIERpc2FibGUgdGhpcyBvcHRpbWl6 YXRpb24gd2hlbiBJL08gcHJlZmV0Y2hpbmcgaXMgaW4gdXNlLCBhdCBsZWFzdAorCSAqIHVudGls IHRoZSBwb3NzaWJsZSBpbnRlcmFjdGlvbnMgd2l0aCBzdHJlYW1Qb3MgYXJlIGZ1bGx5IHVuZGVy c3Rvb2QuCisJICovCisjaWYgMAogCWlmIChyZWFkUG9zLT5iYXRjaCA9PSBtYXJrUG9zLT5iYXRj aCAmJgogCQlyZWFkUG9zLT5iYXRjaCA9PSBiYXRjaHF1ZXVlLT5oZWFkQmF0Y2gpCiAJewpAQCAt MzA0LDYgKzM0NSw3IEBAIGluZGV4X2JhdGNoX3Jlc3RvcmVfcG9zKEluZGV4U2NhbkRlc2Mgc2Nh bikKIAkJcmVhZFBvcy0+aXRlbSA9IG1hcmtQb3MtPml0ZW07CiAJCXJldHVybjsKIAl9CisjZW5k aWYKIAogCS8qCiAJICogQ2FsbCBhbXBvc3Jlc2V0IHRvIGxldCBpbmRleCBBTSBrbm93IHRvIGlu dmFsaWRhdGUgYW55IHByaXZhdGUgc3RhdGUKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGlt aXplci9wYXRoL2Nvc3RzaXplLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0c2l6 ZS5jCmluZGV4IGEzOWNjNzkzYi4uMzdhMGU2YTNmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9v cHRpbWl6ZXIvcGF0aC9jb3N0c2l6ZS5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRo L2Nvc3RzaXplLmMKQEAgLTE0NCw2ICsxNDQsNyBAQCBpbnQJCQltYXhfcGFyYWxsZWxfd29ya2Vy c19wZXJfZ2F0aGVyID0gMjsKIAogYm9vbAkJZW5hYmxlX3NlcXNjYW4gPSB0cnVlOwogYm9vbAkJ ZW5hYmxlX2luZGV4c2NhbiA9IHRydWU7Citib29sCQllbmFibGVfaW5kZXhzY2FuX3ByZWZldGNo ID0gdHJ1ZTsKIGJvb2wJCWVuYWJsZV9pbmRleG9ubHlzY2FuID0gdHJ1ZTsKIGJvb2wJCWVuYWJs ZV9iaXRtYXBzY2FuID0gdHJ1ZTsKIGJvb2wJCWVuYWJsZV90aWRzY2FuID0gdHJ1ZTsKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL3JlYWRfc3RyZWFtLmMgYi9zcmMvYmFja2Vu ZC9zdG9yYWdlL2Fpby9yZWFkX3N0cmVhbS5jCmluZGV4IGYxYjg4ZDA1OC4uMmEwNjI3OWY1IDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9yZWFkX3N0cmVhbS5jCisrKyBiL3Ny Yy9iYWNrZW5kL3N0b3JhZ2UvYWlvL3JlYWRfc3RyZWFtLmMKQEAgLTk5LDYgKzk5LDcgQEAgc3Ry dWN0IFJlYWRTdHJlYW0KIAlpbnQxNgkJZm9yd2FyZGVkX2J1ZmZlcnM7CiAJaW50MTYJCXBpbm5l ZF9idWZmZXJzOwogCWludDE2CQlkaXN0YW5jZTsKKwlpbnQxNgkJZGlzdGFuY2Vfb2xkOwogCWlu dDE2CQlpbml0aWFsaXplZF9idWZmZXJzOwogCWludAkJCXJlYWRfYnVmZmVyc19mbGFnczsKIAli b29sCQlzeW5jX21vZGU7CQkvKiB1c2luZyBpb19tZXRob2Q9c3luYyAqLwpAQCAtNDY0LDYgKzQ2 NSw3IEBAIHJlYWRfc3RyZWFtX2xvb2tfYWhlYWQoUmVhZFN0cmVhbSAqc3RyZWFtKQogCQlpZiAo YmxvY2tudW0gPT0gSW52YWxpZEJsb2NrTnVtYmVyKQogCQl7CiAJCQkvKiBFbmQgb2Ygc3RyZWFt LiAqLworCQkJc3RyZWFtLT5kaXN0YW5jZV9vbGQgPSBzdHJlYW0tPmRpc3RhbmNlOwogCQkJc3Ry ZWFtLT5kaXN0YW5jZSA9IDA7CiAJCQlicmVhazsKIAkJfQpAQCAtODYyLDYgKzg2NCw3IEBAIHJl YWRfc3RyZWFtX25leHRfYnVmZmVyKFJlYWRTdHJlYW0gKnN0cmVhbSwgdm9pZCAqKnBlcl9idWZm ZXJfZGF0YSkKIAkJZWxzZQogCQl7CiAJCQkvKiBObyBtb3JlIGJsb2NrcywgZW5kIG9mIHN0cmVh bS4gKi8KKwkJCXN0cmVhbS0+ZGlzdGFuY2Vfb2xkID0gc3RyZWFtLT5kaXN0YW5jZTsKIAkJCXN0 cmVhbS0+ZGlzdGFuY2UgPSAwOwogCQkJc3RyZWFtLT5vbGRlc3RfYnVmZmVyX2luZGV4ID0gc3Ry ZWFtLT5uZXh0X2J1ZmZlcl9pbmRleDsKIAkJCXN0cmVhbS0+cGlubmVkX2J1ZmZlcnMgPSAwOwpA QCAtMTA0Niw2ICsxMDQ5LDkgQEAgcmVhZF9zdHJlYW1fcmVzZXQoUmVhZFN0cmVhbSAqc3RyZWFt KQogCWludDE2CQlpbmRleDsKIAlCdWZmZXIJCWJ1ZmZlcjsKIAorCS8qIHJlbWVtYmVyIHRoZSBv bGQgZGlzdGFuY2UgKGlmIHdlIHJlc2V0IGJlZm9yZSBlbmQgb2YgdGhlIHN0cmVhbSkgKi8KKwlz dHJlYW0tPmRpc3RhbmNlX29sZCA9IE1heChzdHJlYW0tPmRpc3RhbmNlLCBzdHJlYW0tPmRpc3Rh bmNlX29sZCk7CisKIAkvKiBTdG9wIGxvb2tpbmcgYWhlYWQuICovCiAJc3RyZWFtLT5kaXN0YW5j ZSA9IDA7CiAKQEAgLTEwNzgsOCArMTA4NCwxMiBAQCByZWFkX3N0cmVhbV9yZXNldChSZWFkU3Ry ZWFtICpzdHJlYW0pCiAJQXNzZXJ0KHN0cmVhbS0+cGlubmVkX2J1ZmZlcnMgPT0gMCk7CiAJQXNz ZXJ0KHN0cmVhbS0+aW9zX2luX3Byb2dyZXNzID09IDApOwogCi0JLyogU3RhcnQgb2ZmIGFzc3Vt aW5nIGRhdGEgaXMgY2FjaGVkLiAqLwotCXN0cmVhbS0+ZGlzdGFuY2UgPSAxOworCS8qCisJICog UmVzdG9yZSB0aGUgb2xkIGRpc3RhbmNlLCBpZiB3ZSBoYXZlIG9uZS4gT3RoZXJ3aXNlIHN0YXJ0 IGFzc3VtaW5nIGRhdGEKKwkgKiBpcyBjYWNoZWQuCisJICovCisJc3RyZWFtLT5kaXN0YW5jZSA9 IE1heCgxLCBzdHJlYW0tPmRpc3RhbmNlX29sZCk7CisJc3RyZWFtLT5kaXN0YW5jZV9vbGQgPSAw OwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfcGFyYW1l dGVycy5kYXQgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRhdAppbmRl eCAzYjlkODM0OTAuLjNmMjY0ZjFjZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlz Yy9ndWNfcGFyYW1ldGVycy5kYXQKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfcGFy YW1ldGVycy5kYXQKQEAgLTg4Miw2ICs4ODIsMTMgQEAKICAgYm9vdF92YWwgPT4gJ3RydWUnLAog fSwKIAoreyBuYW1lID0+ICdlbmFibGVfaW5kZXhzY2FuX3ByZWZldGNoJywgdHlwZSA9PiAnYm9v bCcsIGNvbnRleHQgPT4gJ1BHQ19VU0VSU0VUJywgZ3JvdXAgPT4gJ1FVRVJZX1RVTklOR19NRVRI T0QnLAorICBzaG9ydF9kZXNjID0+ICdFbmFibGVzIHByZWZldGNoaW5nIGZvciBpbmRleCBzY2Fu cyBhbmQgaW5kZXgtb25seS1zY2Fucy4nLAorICBmbGFncyA9PiAnR1VDX0VYUExBSU4nLAorICB2 YXJpYWJsZSA9PiAnZW5hYmxlX2luZGV4c2Nhbl9wcmVmZXRjaCcsCisgIGJvb3RfdmFsID0+ICd0 cnVlJywKK30sCisKIHsgbmFtZSA9PiAnZW5hYmxlX21hdGVyaWFsJywgdHlwZSA9PiAnYm9vbCcs IGNvbnRleHQgPT4gJ1BHQ19VU0VSU0VUJywgZ3JvdXAgPT4gJ1FVRVJZX1RVTklOR19NRVRIT0Qn LAogICBzaG9ydF9kZXNjID0+ICdFbmFibGVzIHRoZSBwbGFubmVyXCdzIHVzZSBvZiBtYXRlcmlh bGl6YXRpb24uJywKICAgZmxhZ3MgPT4gJ0dVQ19FWFBMQUlOJywKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZSBiL3NyYy9iYWNrZW5kL3V0 aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZQppbmRleCBkYzllMjI1NWYuLmRhNTBhZTE1 ZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2Ft cGxlCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZQpA QCAtNDEyLDYgKzQxMiw3IEBACiAjZW5hYmxlX2luY3JlbWVudGFsX3NvcnQgPSBvbgogI2VuYWJs ZV9pbmRleHNjYW4gPSBvbgogI2VuYWJsZV9pbmRleG9ubHlzY2FuID0gb24KKyNlbmFibGVfaW5k ZXhzY2FuX3ByZWZldGNoID0gb24KICNlbmFibGVfbWF0ZXJpYWwgPSBvbgogI2VuYWJsZV9tZW1v aXplID0gb24KICNlbmFibGVfbWVyZ2Vqb2luID0gb24KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvc3lzdmlld3Mub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9z eXN2aWV3cy5vdXQKaW5kZXggMDQxMWRiODMyLi5hMmE4YzNhZmEgMTAwNjQ0Ci0tLSBhL3NyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3lzdmlld3Mub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mv ZXhwZWN0ZWQvc3lzdmlld3Mub3V0CkBAIC0xNTksNiArMTU5LDcgQEAgc2VsZWN0IG5hbWUsIHNl dHRpbmcgZnJvbSBwZ19zZXR0aW5ncyB3aGVyZSBuYW1lIGxpa2UgJ2VuYWJsZSUnOwogIGVuYWJs ZV9pbmNyZW1lbnRhbF9zb3J0ICAgICAgICB8IG9uCiAgZW5hYmxlX2luZGV4b25seXNjYW4gICAg ICAgICAgIHwgb24KICBlbmFibGVfaW5kZXhzY2FuICAgICAgICAgICAgICAgfCBvbgorIGVuYWJs ZV9pbmRleHNjYW5fcHJlZmV0Y2ggICAgICB8IG9uCiAgZW5hYmxlX21hdGVyaWFsICAgICAgICAg ICAgICAgIHwgb24KICBlbmFibGVfbWVtb2l6ZSAgICAgICAgICAgICAgICAgfCBvbgogIGVuYWJs ZV9tZXJnZWpvaW4gICAgICAgICAgICAgICB8IG9uCkBAIC0xNzMsNyArMTc0LDcgQEAgc2VsZWN0 IG5hbWUsIHNldHRpbmcgZnJvbSBwZ19zZXR0aW5ncyB3aGVyZSBuYW1lIGxpa2UgJ2VuYWJsZSUn OwogIGVuYWJsZV9zZXFzY2FuICAgICAgICAgICAgICAgICB8IG9uCiAgZW5hYmxlX3NvcnQgICAg ICAgICAgICAgICAgICAgIHwgb24KICBlbmFibGVfdGlkc2NhbiAgICAgICAgICAgICAgICAgfCBv bgotKDI1IHJvd3MpCisoMjYgcm93cykKIAogLS0gVGhlcmUgYXJlIGFsd2F5cyB3YWl0IGV2ZW50 IGRlc2NyaXB0aW9ucyBmb3IgdmFyaW91cyB0eXBlcy4gIEluamVjdGlvblBvaW50CiAtLSBtYXkg YmUgcHJlc2VudCBvciBhYnNlbnQsIGRlcGVuZGluZyBvbiBoaXN0b3J5IHNpbmNlIGxhc3QgcG9z dG1hc3RlciBzdGFydC4KLS0gCjIuNTEuMAoK --000000000000c23a9a0645a0bc0c Content-Type: application/octet-stream; name="v3-0001-Add-batching-interfaces-used-by-heapam-and-nbtree.patch" Content-Disposition: attachment; filename="v3-0001-Add-batching-interfaces-used-by-heapam-and-nbtree.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mj0ldwb70 RnJvbSA5ZjUzZjFhZDIzZjAwYmNlZTY3YmRkZjY5ZjU4MGUwNDdlYzNkZTk5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFR1 ZSwgOSBTZXAgMjAyNSAxOTo1MDowMyAtMDQwMApTdWJqZWN0OiBbUEFUQ0ggdjMgMS80XSBBZGQg YmF0Y2hpbmcgaW50ZXJmYWNlcyB1c2VkIGJ5IGhlYXBhbSBhbmQgbmJ0cmVlLgoKQWRkIGEgbmV3 IGFtZ2V0YmF0Y2ggaW5kZXggQU0gaW50ZXJmYWNlIHRoYXQgYWxsb3dzIGluZGV4IGFjY2VzcyBt ZXRob2RzCnRvIGltcGxlbWVudCBwbGFpbi9vcmRlcmVkIGluZGV4IHNjYW5zIHRoYXQgcmV0dXJu IGluZGV4IGVudHJpZXMgaW4KcGVyLWxlYWYtcGFnZSBiYXRjaGVzLCByYXRoZXIgdGhhbiBvbmUg YXQgYSB0aW1lLiAgVGhpcyBlbmFibGVzIGEKdmFyaWV0eSBvZiBvcHRpbWl6YXRpb25zIG9uIHRo ZSB0YWJsZSBBTSBzaWRlLCBtb3N0IG5vdGFibHkgSS9PCnByZWZldGNoaW5nIG9mIGhlYXAgdHVw bGVzIGR1cmluZyBvcmRlcmVkIGluZGV4IHNjYW5zLiAgSXQgd2lsbCBhbHNvCmVuYWJsZSBhbiBv cHRpbWl6YXRpb24gdGhhdCBoYXMgaGVhcGFtIGF2b2lkIHJlcGVhdGVkbHkgbG9ja2luZyBhbmQK dW5sb2NraW5nIHRoZSBzYW1lIGhlYXAgcGFnZSdzIGJ1ZmZlci4KCkluZGV4IGFjY2VzcyBtZXRo b2RzIHRoYXQgc3VwcG9ydCBwbGFpbiBpbmRleCBzY2FucyBtdXN0IG5vdyBpbXBsZW1lbnQKZWl0 aGVyIHRoZSBhbWdldGJhdGNoIGludGVyZmFjZSBPUiB0aGUgYW1nZXR0dXBsZSBpbnRlcmZhY2Uu ICBUaGUKYW1nZXR0dXBsZSBpbnRlcmZhY2Ugd2lsbCBzdGlsbCBiZSB1c2VkIGJ5IGluZGV4IEFN cyB0aGF0IHJlcXVpcmUgZGlyZWN0CmNvbnRyb2wgb3ZlciB0aGUgcHJvZ3Jlc3Mgb2YgaW5kZXgg c2NhbnMgKGUuZy4sIEdpU1Qgd2l0aCBLTk4gb3JkZXJlZApzY2FucykuCgpUaGlzIGNvbW1pdCBh bHNvIGFkZHMgYSBuZXcgdGFibGUgQU0gaW50ZXJmYWNlIGNhbGxiYWNrLCBjYWxsZWQgYnkgdGhl CmNvcmUgZXhlY3V0b3IgdGhyb3VnaCB0aGUgbmV3IHRhYmxlX2luZGV4X2dldG5leHRfc2xvdCBz aGltIGZ1bmN0aW9uLgpUaGlzIGFsbG93cyB0aGUgdGFibGUgQU0gdG8gZGlyZWN0bHkgbWFuYWdl IHRoZSBwcm9ncmVzcyBvZiBpbmRleCBzY2FucwpyYXRoZXIgdGhhbiBoYXZpbmcgaW5kaXZpZHVh bCBUSURzIHBhc3NlZCBpbiBieSB0aGUgY2FsbGVyLiBUaGUKYW1nZXRiYXRjaCBpbnRlcmZhY2Ug aXMgdGlnaHRseSBjb3VwbGVkIHdpdGggdGhlIG5ldyBhcHByb2FjaCB0byBvcmRlcmVkCmluZGV4 IHNjYW5zIGFkZGVkIHRvIHRoZSB0YWJsZSBBTS4gIFRoZSB0YWJsZSBBTSBjYW4gYXBwbHkga25v d2xlZGdlIG9mCndoaWNoIFRJRHMgd2lsbCBiZSByZXR1cm5lZCB0byBzY2FuIGluIHRoZSBuZWFy IGZ1dHVyZSB0byBvcHRpbWl6ZSBhbmQKYmF0Y2ggdGFibGUgQU0gYmxvY2sgYWNjZXNzZXMsIGFu ZCB0byBwZXJmb3JtIEkvTyBwcmVmZXRjaGluZy4gIFRoZXNlCm9wdGltaXphdGlvbnMgYXJlIGxl ZnQgYXMgd29yayBmb3IgbGF0ZXIgY29tbWl0cy4KCkJhdGNoZXMgcmV0dXJuZWQgZnJvbSBhbWdl dGJhdGNoIGFyZSBndWFyYW50ZWVkIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCBhbgppbmRleCBwYWdl IGNvbnRhaW5pbmcgYXQgbGVhc3Qgb25lIG1hdGNoaW5nIHR1cGxlLiAgVGhlIGFtZ2V0YmF0Y2gK aW50ZXJmYWNlIG1heSBob2xkIGJ1ZmZlciBwaW5zIGFzIGludGVybG9ja3MgYWdhaW5zdCBjb25j dXJyZW50IFRJRApyZWN5Y2xpbmcgYnkgVkFDVVVNLiAgVGhpcyBleHRlbmRzL2dlbmVyYWxpemVz IHRoZSBtZWNoYW5pc20gYWRkZWQgdG8KbmJ0cmVlIGJ5IGNvbW1pdCAyZWQ1Yjg3ZiB0byBhbGwg aW5kZXggQU1zIHRoYXQgYWRkIHN1cHBvcnQgZm9yIHRoZSBuZXcKYW1nZXRiYXRjaCBpbnRlcmZh Y2UuCgpBdXRob3I6IFRvbWFzIFZvbmRyYSA8dG9tYXNAdm9uZHJhLm1lPgpBdXRob3I6IFBldGVy IEdlb2doZWdhbiA8cGdAYm93dC5pZT4KUmV2aWV3ZWQtQnk6IEFuZHJlcyBGcmV1bmQgPGFuZHJl c0BhbmFyYXplbC5kZT4KUmV2aWV3ZWQtQnk6IFRob21hcyBNdW5ybyA8dGhvbWFzLm11bnJvQGdt YWlsLmNvbT4KRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9jZjg1ZjQ2Zi1iMDJmLTA1 YjItNTI0OC01MDAwYjg5NGViYWJAZW50ZXJwcmlzZWRiLmNvbQpEaXNjdXNzaW9uOiBodHRwczov L3Bvc3Rnci5lcy9tL2VmYWMzMjM4LTZmMzQtNDFlYS1hMzkzLTI2Y2MwNDQxYjUwNiU0MHZvbmRy YS5tZQpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tL0NBSDItV3prOSUzRHglM0RhMlRi Y3FZY1glMkJYWG1ESFFyNSUzRDF2OW00Wl92OGEtS3dGMVpvejBBJTQwbWFpbC5nbWFpbC5jb20K LS0tCiBzcmMvaW5jbHVkZS9hY2Nlc3MvYW1hcGkuaCAgICAgICAgICAgICAgICAgICAgfCAgMjIg Ky0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9nZW5hbS5oICAgICAgICAgICAgICAgICAgICB8ICAyNyAr LQogc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oICAgICAgICAgICAgICAgICAgIHwgICA1ICsK IHNyYy9pbmNsdWRlL2FjY2Vzcy9uYnRyZWUuaCAgICAgICAgICAgICAgICAgICB8IDE3NiArLS0t LQogc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaCAgICAgICAgICAgICAgICAgIHwgMjQ0ICsr KysrKysKIHNyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmggICAgICAgICAgICAgICAgICB8ICA1 NyArLQogc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmggICAgICAgICAgICAgICAgIHwgICAy IC0KIHNyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oICAgICAgICAgICAgICAgICB8ICAgMiAr LQogc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbi5jICAgICAgICAgICAgICAgIHwgICA1ICst CiBzcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbmdldC5jICAgICAgICAgICAgICAgfCAgIDYgKy0K IHNyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2ludXRpbC5jICAgICAgICAgICAgICB8ICAgNSArLQog c3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdC5jICAgICAgICAgICAgICAgIHwgICA1ICstCiBz cmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMgICAgICAgICAgICAgICAgfCAgIDUgKy0KIHNy Yy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMgICAgICB8IDUxMiArKysrKysr KysrKysrLQogc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L01ha2VmaWxlICAgICAgICAgICAgIHwg ICAzICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvZ2VuYW0uYyAgICAgICAgICAgICAgfCAg MTAgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGFtLmMgICAgICAgICAgICB8IDEz MCArLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhiYXRjaC5jICAgICAgICAgfCA2 NDAgKysrKysrKysrKysrKysrKysrCiBzcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvbWVzb24uYnVp bGQgICAgICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRwYWdlLmMg ICAgICAgICAgIHwgICAzICsKIHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVhZHBhZ2Uu YyAgICAgICB8IDE5NiArKystLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVlLmMg ICAgICAgICAgICB8IDMwNiArKy0tLS0tLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0 c2VhcmNoLmMgICAgICAgICB8IDUxMSArKysrKy0tLS0tLS0tLQogc3JjL2JhY2tlbmQvYWNjZXNz L25idHJlZS9uYnR1dGlscy5jICAgICAgICAgIHwgIDYwICstCiBzcmMvYmFja2VuZC9hY2Nlc3Mv c3BnaXN0L3NwZ3V0aWxzLmMgICAgICAgICAgfCAgIDUgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90 YWJsZS90YWJsZWFtLmMgICAgICAgICAgICB8ICAgMiArLQogc3JjL2JhY2tlbmQvY29tbWFuZHMv Y29uc3RyYWludC5jICAgICAgICAgICAgIHwgICAzICstCiBzcmMvYmFja2VuZC9jb21tYW5kcy9p bmRleGNtZHMuYyAgICAgICAgICAgICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4 ZWNBbWkuYyAgICAgICAgICAgICAgICB8ICAgMiArLQogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhl Y0luZGV4aW5nLmMgICAgICAgICAgIHwgICA2ICstCiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVj UmVwbGljYXRpb24uYyAgICAgICAgfCAgIDggKy0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJ bmRleG9ubHlzY2FuLmMgICAgICB8IDEwMCArLS0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJ bmRleHNjYW4uYyAgICAgICAgICB8ICAxMiArLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgv aW5keHBhdGguYyAgICAgICAgIHwgICAyICstCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9w bGFuY2F0LmMgICAgICAgICAgfCAgIDYgKy0KIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2lj YWwvcmVsYXRpb24uYyAgICB8ICAgMyArLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2FtdXRpbHMu YyAgICAgICAgICAgICAgIHwgICA0ICstCiBzcmMvYmFja2VuZC91dGlscy9hZHQvc2VsZnVuY3Mu YyAgICAgICAgICAgICAgfCAgNTcgKy0KIGNvbnRyaWIvYmxvb20vYmx1dGlscy5jICAgICAgICAg ICAgICAgICAgICAgICB8ICAgMyArLQogZG9jL3NyYy9zZ21sL2luZGV4YW0uc2dtbCAgICAgICAg ICAgICAgICAgICAgIHwgMzEwICsrKysrKystLQogZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfdGFi bGUuc2dtbCAgICAgICAgICAgIHwgIDEzICstCiAuLi4vbW9kdWxlcy9kdW1teV9pbmRleF9hbS9k dW1teV9pbmRleF9hbS5jICAgfCAgIDQgKy0KIHNyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5s aXN0ICAgICAgICAgICAgICB8ICAgNCAtCiA0MyBmaWxlcyBjaGFuZ2VkLCAyMjkwIGluc2VydGlv bnMoKyksIDExODkgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tlbmQv YWNjZXNzL2luZGV4L2luZGV4YmF0Y2guYwoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vz cy9hbWFwaS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2FtYXBpLmgKaW5kZXggNjNkZDQxYzFmLi5h N2ViMzNjZTkgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9hbWFwaS5oCisrKyBiL3Ny Yy9pbmNsdWRlL2FjY2Vzcy9hbWFwaS5oCkBAIC0xOTgsNiArMTk4LDE1IEBAIHR5cGVkZWYgdm9p ZCAoKmFtcmVzY2FuX2Z1bmN0aW9uKSAoSW5kZXhTY2FuRGVzYyBzY2FuLAogdHlwZWRlZiBib29s ICgqYW1nZXR0dXBsZV9mdW5jdGlvbikgKEluZGV4U2NhbkRlc2Mgc2NhbiwKIAkJCQkJCQkJCSBT Y2FuRGlyZWN0aW9uIGRpcmVjdGlvbik7CiAKKy8qIG5leHQgYmF0Y2ggb2YgdmFsaWQgdHVwbGVz ICovCit0eXBlZGVmIEJhdGNoSW5kZXhTY2FuICgqYW1nZXRiYXRjaF9mdW5jdGlvbikgKEluZGV4 U2NhbkRlc2Mgc2NhbiwKKwkJCQkJCQkJCQkJICAgQmF0Y2hJbmRleFNjYW4gcHJpb3JiYXRjaCwK KwkJCQkJCQkJCQkJICAgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24pOworCisvKiByZWxlYXNlIGJh dGNoIG9mIHZhbGlkIHR1cGxlcyAqLwordHlwZWRlZiB2b2lkICgqYW1mcmVlYmF0Y2hfZnVuY3Rp b24pIChJbmRleFNjYW5EZXNjIHNjYW4sCisJCQkJCQkJCQkgIEJhdGNoSW5kZXhTY2FuIGJhdGNo KTsKKwogLyogZmV0Y2ggYWxsIHZhbGlkIHR1cGxlcyAqLwogdHlwZWRlZiBpbnQ2NCAoKmFtZ2V0 Yml0bWFwX2Z1bmN0aW9uKSAoSW5kZXhTY2FuRGVzYyBzY2FuLAogCQkJCQkJCQkJICAgVElEQml0 bWFwICp0Ym0pOwpAQCAtMjA1LDExICsyMTQsOSBAQCB0eXBlZGVmIGludDY0ICgqYW1nZXRiaXRt YXBfZnVuY3Rpb24pIChJbmRleFNjYW5EZXNjIHNjYW4sCiAvKiBlbmQgaW5kZXggc2NhbiAqLwog dHlwZWRlZiB2b2lkICgqYW1lbmRzY2FuX2Z1bmN0aW9uKSAoSW5kZXhTY2FuRGVzYyBzY2FuKTsK IAotLyogbWFyayBjdXJyZW50IHNjYW4gcG9zaXRpb24gKi8KLXR5cGVkZWYgdm9pZCAoKmFtbWFy a3Bvc19mdW5jdGlvbikgKEluZGV4U2NhbkRlc2Mgc2Nhbik7Ci0KLS8qIHJlc3RvcmUgbWFya2Vk IHNjYW4gcG9zaXRpb24gKi8KLXR5cGVkZWYgdm9pZCAoKmFtcmVzdHJwb3NfZnVuY3Rpb24pIChJ bmRleFNjYW5EZXNjIHNjYW4pOworLyogaW52YWxpZGF0ZSBpbmRleCBBTSBzdGF0ZSB0aGF0IGlu ZGVwZW5kZW50bHkgdHJhY2tzIHNjYW4ncyBwb3NpdGlvbiAqLwordHlwZWRlZiB2b2lkICgqYW1w b3NyZXNldF9mdW5jdGlvbikgKEluZGV4U2NhbkRlc2Mgc2NhbiwKKwkJCQkJCQkJCSBCYXRjaElu ZGV4U2NhbiBiYXRjaCk7CiAKIC8qCiAgKiBDYWxsYmFjayBmdW5jdGlvbiBzaWduYXR1cmVzIC0g Zm9yIHBhcmFsbGVsIGluZGV4IHNjYW5zLgpAQCAtMzA5LDEwICszMTYsMTEgQEAgdHlwZWRlZiBz dHJ1Y3QgSW5kZXhBbVJvdXRpbmUKIAlhbWJlZ2luc2Nhbl9mdW5jdGlvbiBhbWJlZ2luc2NhbjsK IAlhbXJlc2Nhbl9mdW5jdGlvbiBhbXJlc2NhbjsKIAlhbWdldHR1cGxlX2Z1bmN0aW9uIGFtZ2V0 dHVwbGU7IC8qIGNhbiBiZSBOVUxMICovCisJYW1nZXRiYXRjaF9mdW5jdGlvbiBhbWdldGJhdGNo OyAvKiBjYW4gYmUgTlVMTCAqLworCWFtZnJlZWJhdGNoX2Z1bmN0aW9uIGFtZnJlZWJhdGNoOwkv KiBjYW4gYmUgTlVMTCAqLwogCWFtZ2V0Yml0bWFwX2Z1bmN0aW9uIGFtZ2V0Yml0bWFwOwkvKiBj YW4gYmUgTlVMTCAqLwogCWFtZW5kc2Nhbl9mdW5jdGlvbiBhbWVuZHNjYW47Ci0JYW1tYXJrcG9z X2Z1bmN0aW9uIGFtbWFya3BvczsJLyogY2FuIGJlIE5VTEwgKi8KLQlhbXJlc3RycG9zX2Z1bmN0 aW9uIGFtcmVzdHJwb3M7IC8qIGNhbiBiZSBOVUxMICovCisJYW1wb3NyZXNldF9mdW5jdGlvbiBh bXBvc3Jlc2V0OyAvKiBjYW4gYmUgTlVMTCAqLwogCiAJLyogaW50ZXJmYWNlIGZ1bmN0aW9ucyB0 byBzdXBwb3J0IHBhcmFsbGVsIGluZGV4IHNjYW5zICovCiAJYW1lc3RpbWF0ZXBhcmFsbGVsc2Nh bl9mdW5jdGlvbiBhbWVzdGltYXRlcGFyYWxsZWxzY2FuOyAvKiBjYW4gYmUgTlVMTCAqLwpkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2dlbmFtLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3Mv Z2VuYW0uaAppbmRleCA5MjAwYTIyYmQuLmYxOTg0ZTcwMCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvYWNjZXNzL2dlbmFtLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2dlbmFtLmgKQEAgLTEx NSw2ICsxMTUsNyBAQCB0eXBlZGVmIGJvb2wgKCpJbmRleEJ1bGtEZWxldGVDYWxsYmFjaykgKEl0 ZW1Qb2ludGVyIGl0ZW1wdHIsIHZvaWQgKnN0YXRlKTsKIAogLyogc3RydWN0IGRlZmluaXRpb25z IGFwcGVhciBpbiByZWxzY2FuLmggKi8KIHR5cGVkZWYgc3RydWN0IEluZGV4U2NhbkRlc2NEYXRh ICpJbmRleFNjYW5EZXNjOwordHlwZWRlZiBzdHJ1Y3QgQmF0Y2hJbmRleFNjYW5EYXRhICpCYXRj aEluZGV4U2NhbjsKIHR5cGVkZWYgc3RydWN0IFN5c1NjYW5EZXNjRGF0YSAqU3lzU2NhbkRlc2M7 CiAKIHR5cGVkZWYgc3RydWN0IFBhcmFsbGVsSW5kZXhTY2FuRGVzY0RhdGEgKlBhcmFsbGVsSW5k ZXhTY2FuRGVzYzsKQEAgLTE3NSw2ICsxNzYsNyBAQCBleHRlcm4gdm9pZCBpbmRleF9pbnNlcnRf Y2xlYW51cChSZWxhdGlvbiBpbmRleFJlbGF0aW9uLAogCiBleHRlcm4gSW5kZXhTY2FuRGVzYyBp bmRleF9iZWdpbnNjYW4oUmVsYXRpb24gaGVhcFJlbGF0aW9uLAogCQkJCQkJCQkJIFJlbGF0aW9u IGluZGV4UmVsYXRpb24sCisJCQkJCQkJCQkgVHVwbGVUYWJsZVNsb3QgKmlvc190YWJsZXNsb3Qs CiAJCQkJCQkJCQkgU25hcHNob3Qgc25hcHNob3QsCiAJCQkJCQkJCQkgSW5kZXhTY2FuSW5zdHJ1 bWVudGF0aW9uICppbnN0cnVtZW50LAogCQkJCQkJCQkJIGludCBua2V5cywgaW50IG5vcmRlcmJ5 cyk7CkBAIC0yMDEsMTQgKzIwMywxMiBAQCBleHRlcm4gdm9pZCBpbmRleF9wYXJhbGxlbHNjYW5f aW5pdGlhbGl6ZShSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiBleHRlcm4gdm9pZCBpbmRleF9wYXJh bGxlbHJlc2NhbihJbmRleFNjYW5EZXNjIHNjYW4pOwogZXh0ZXJuIEluZGV4U2NhbkRlc2MgaW5k ZXhfYmVnaW5zY2FuX3BhcmFsbGVsKFJlbGF0aW9uIGhlYXByZWwsCiAJCQkJCQkJCQkJCSAgUmVs YXRpb24gaW5kZXhyZWwsCisJCQkJCQkJCQkJCSAgVHVwbGVUYWJsZVNsb3QgKmlvc190YWJsZXNs b3QsCiAJCQkJCQkJCQkJCSAgSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uICppbnN0cnVtZW50LAog CQkJCQkJCQkJCQkgIGludCBua2V5cywgaW50IG5vcmRlcmJ5cywKIAkJCQkJCQkJCQkJICBQYXJh bGxlbEluZGV4U2NhbkRlc2MgcHNjYW4pOwogZXh0ZXJuIEl0ZW1Qb2ludGVyIGluZGV4X2dldG5l eHRfdGlkKEluZGV4U2NhbkRlc2Mgc2NhbiwKIAkJCQkJCQkJCSBTY2FuRGlyZWN0aW9uIGRpcmVj dGlvbik7Ci1leHRlcm4gYm9vbCBpbmRleF9mZXRjaF9oZWFwKEluZGV4U2NhbkRlc2Mgc2Nhbiwg VHVwbGVUYWJsZVNsb3QgKnNsb3QpOwotZXh0ZXJuIGJvb2wgaW5kZXhfZ2V0bmV4dF9zbG90KElu ZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCi0JCQkJCQkJICAgVHVw bGVUYWJsZVNsb3QgKnNsb3QpOwogZXh0ZXJuIGludDY0IGluZGV4X2dldGJpdG1hcChJbmRleFNj YW5EZXNjIHNjYW4sIFRJREJpdG1hcCAqYml0bWFwKTsKIAogZXh0ZXJuIEluZGV4QnVsa0RlbGV0 ZVJlc3VsdCAqaW5kZXhfYnVsa19kZWxldGUoSW5kZXhWYWN1dW1JbmZvICppbmZvLApAQCAtMjcy LDQgKzI3MiwyNSBAQCBleHRlcm4gdm9pZCBzeXN0YWJsZV9pbnBsYWNlX3VwZGF0ZV9iZWdpbihS ZWxhdGlvbiByZWxhdGlvbiwKIGV4dGVybiB2b2lkIHN5c3RhYmxlX2lucGxhY2VfdXBkYXRlX2Zp bmlzaCh2b2lkICpzdGF0ZSwgSGVhcFR1cGxlIHR1cGxlKTsKIGV4dGVybiB2b2lkIHN5c3RhYmxl X2lucGxhY2VfdXBkYXRlX2NhbmNlbCh2b2lkICpzdGF0ZSk7CiAKKy8qCisgKiBhbWdldGJhdGNo IHV0aWxpdGllcyBjYWxsZWQgYnkgaW5kZXhhbS5jIChpbiBpbmRleGJhdGNoLmMpCisgKi8KK3N0 cnVjdCBCYXRjaFF1ZXVlSXRlbVBvczsKK2V4dGVybiB2b2lkIGluZGV4X2JhdGNoX2luaXQoSW5k ZXhTY2FuRGVzYyBzY2FuKTsKK2V4dGVybiBib29sIGJhdGNoX2dldG5leHQoSW5kZXhTY2FuRGVz YyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbik7CitleHRlcm4gdm9pZCBiYXRjaF9mcmVl KEluZGV4U2NhbkRlc2Mgc2NhbiwgQmF0Y2hJbmRleFNjYW4gYmF0Y2gpOworZXh0ZXJuIHZvaWQg aW5kZXhfYmF0Y2hfcmVzZXQoSW5kZXhTY2FuRGVzYyBzY2FuLCBib29sIGNvbXBsZXRlKTsKK2V4 dGVybiB2b2lkIGluZGV4X2JhdGNoX21hcmtfcG9zKEluZGV4U2NhbkRlc2Mgc2Nhbik7CitleHRl cm4gdm9pZCBpbmRleF9iYXRjaF9yZXN0b3JlX3BvcyhJbmRleFNjYW5EZXNjIHNjYW4pOworZXh0 ZXJuIHZvaWQgaW5kZXhfYmF0Y2hfa2lsbF9pdGVtKEluZGV4U2NhbkRlc2Mgc2Nhbik7CitleHRl cm4gdm9pZCBpbmRleF9iYXRjaF9lbmQoSW5kZXhTY2FuRGVzYyBzY2FuKTsKKworLyoKKyAqIGFt Z2V0YmF0Y2ggdXRpbGl0aWVzIGNhbGxlZCBieSBpbmRleCBBTXMgKGluIGluZGV4YmF0Y2guYykK KyAqLworZXh0ZXJuIHZvaWQgaW5kZXhhbV91dGlsX2JhdGNoX3VubG9jayhJbmRleFNjYW5EZXNj IHNjYW4sIEJhdGNoSW5kZXhTY2FuIGJhdGNoKTsKK2V4dGVybiBCYXRjaEluZGV4U2NhbiBpbmRl eGFtX3V0aWxfYmF0Y2hfYWxsb2MoSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJCQkJCQkgICBp bnQgbWF4aXRlbXMsIGJvb2wgd2FudF9pdHVwKTsKK2V4dGVybiB2b2lkIGluZGV4YW1fdXRpbF9i YXRjaF9yZWxlYXNlKEluZGV4U2NhbkRlc2Mgc2NhbiwgQmF0Y2hJbmRleFNjYW4gYmF0Y2gpOwor CiAjZW5kaWYJCQkJCQkJLyogR0VOQU1fSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNj ZXNzL2hlYXBhbS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oCmluZGV4IDYzMmM0MzMy YS4uZThkMzQ3ZTQ3IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgKKysr IGIvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oCkBAIC0xMTgsNiArMTE4LDExIEBAIHR5cGVk ZWYgc3RydWN0IEluZGV4RmV0Y2hIZWFwRGF0YQogCiAJQnVmZmVyCQl4c19jYnVmOwkJLyogY3Vy cmVudCBoZWFwIGJ1ZmZlciBpbiBzY2FuLCBpZiBhbnkgKi8KIAkvKiBOQjogaWYgeHNfY2J1ZiBp cyBub3QgSW52YWxpZEJ1ZmZlciwgd2UgaG9sZCBhIHBpbiBvbiB0aGF0IGJ1ZmZlciAqLworCisJ QnVmZmVyCQl2bWJ1ZjsJCQkvKiB2aXNpYmlsaXR5IG1hcCBidWZmZXIgKi8KKwlUdXBsZVRhYmxl U2xvdCAqaW9zX3RhYmxlc2xvdDsJLyogdHJhbnNpZW50IHNsb3QgZm9yIGZldGNoaW5nIHR1cGxl cyB0bworCQkJCQkJCQkJICogY2hlY2sgdmlzaWJpbGl0eSBkdXJpbmcgaW5kZXgtb25seQorCQkJ CQkJCQkJICogc2NhbnMgKi8KIH0gSW5kZXhGZXRjaEhlYXBEYXRhOwogCiAvKiBSZXN1bHQgY29k ZXMgZm9yIEhlYXBUdXBsZVNhdGlzZmllc1ZhY3V1bSAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvYWNjZXNzL25idHJlZS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL25idHJlZS5oCmluZGV4IDdh M2VmZDIwOS4uNjU4YzQ2YTFmIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0cmVl LmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL25idHJlZS5oCkBAIC05MjQsMTEyICs5MjQsNiBA QCB0eXBlZGVmIHN0cnVjdCBCVFZhY3V1bVBvc3RpbmdEYXRhCiAKIHR5cGVkZWYgQlRWYWN1dW1Q b3N0aW5nRGF0YSAqQlRWYWN1dW1Qb3N0aW5nOwogCi0vKgotICogQlRTY2FuT3BhcXVlRGF0YSBp cyB0aGUgYnRyZWUtcHJpdmF0ZSBzdGF0ZSBuZWVkZWQgZm9yIGFuIGluZGV4c2Nhbi4KLSAqIFRo aXMgY29uc2lzdHMgb2YgcHJlcHJvY2Vzc2VkIHNjYW4ga2V5cyAoc2VlIF9idF9wcmVwcm9jZXNz X2tleXMoKSBmb3IKLSAqIGRldGFpbHMgb2YgdGhlIHByZXByb2Nlc3NpbmcpLCBpbmZvcm1hdGlv biBhYm91dCB0aGUgY3VycmVudCBsb2NhdGlvbgotICogb2YgdGhlIHNjYW4sIGFuZCBpbmZvcm1h dGlvbiBhYm91dCB0aGUgbWFya2VkIGxvY2F0aW9uLCBpZiBhbnkuICAoV2UgdXNlCi0gKiBCVFNj YW5Qb3NEYXRhIHRvIHJlcHJlc2VudCB0aGUgZGF0YSBuZWVkZWQgZm9yIGVhY2ggb2YgY3VycmVu dCBhbmQgbWFya2VkCi0gKiBsb2NhdGlvbnMuKQlJbiBhZGRpdGlvbiB3ZSBjYW4gcmVtZW1iZXIg c29tZSBrbm93bi1raWxsZWQgaW5kZXggZW50cmllcwotICogdGhhdCBtdXN0IGJlIG1hcmtlZCBi ZWZvcmUgd2UgY2FuIG1vdmUgb2ZmIHRoZSBjdXJyZW50IHBhZ2UuCi0gKgotICogSW5kZXggc2Nh bnMgd29yayBhIHBhZ2UgYXQgYSB0aW1lOiB3ZSBwaW4gYW5kIHJlYWQtbG9jayB0aGUgcGFnZSwg aWRlbnRpZnkKLSAqIGFsbCB0aGUgbWF0Y2hpbmcgaXRlbXMgb24gdGhlIHBhZ2UgYW5kIHNhdmUg dGhlbSBpbiBCVFNjYW5Qb3NEYXRhLCB0aGVuCi0gKiByZWxlYXNlIHRoZSByZWFkLWxvY2sgd2hp bGUgcmV0dXJuaW5nIHRoZSBpdGVtcyB0byB0aGUgY2FsbGVyIGZvcgotICogcHJvY2Vzc2luZy4g IFRoaXMgYXBwcm9hY2ggbWluaW1pemVzIGxvY2svdW5sb2NrIHRyYWZmaWMuICBXZSBtdXN0IGFs d2F5cwotICogZHJvcCB0aGUgbG9jayB0byBtYWtlIGl0IG9rYXkgZm9yIGNhbGxlciB0byBwcm9j ZXNzIHRoZSByZXR1cm5lZCBpdGVtcy4KLSAqIFdoZXRoZXIgb3Igbm90IHdlIGNhbiBhbHNvIHJl bGVhc2UgdGhlIHBpbiBkdXJpbmcgdGhpcyB3aW5kb3cgd2lsbCB2YXJ5LgotICogV2UgZHJvcCB0 aGUgcGluICh3aGVuIHNvLT5kcm9wUGluKSB0byBhdm9pZCBibG9ja2luZyBwcm9ncmVzcyBieSBW QUNVVU0KLSAqIChzZWUgbmJ0cmVlL1JFQURNRSBzZWN0aW9uIGFib3V0IG1ha2luZyBjb25jdXJy ZW50IFRJRCByZWN5Y2xpbmcgc2FmZSkuCi0gKiBXZSdsbCBhbHdheXMgcmVsZWFzZSBib3RoIHRo ZSBsb2NrIGFuZCB0aGUgcGluIG9uIHRoZSBjdXJyZW50IHBhZ2UgYmVmb3JlCi0gKiBtb3Zpbmcg b24gdG8gaXRzIHNpYmxpbmcgcGFnZS4KLSAqCi0gKiBJZiB3ZSBhcmUgZG9pbmcgYW4gaW5kZXgt b25seSBzY2FuLCB3ZSBzYXZlIHRoZSBlbnRpcmUgSW5kZXhUdXBsZSBmb3IgZWFjaAotICogbWF0 Y2hlZCBpdGVtLCBvdGhlcndpc2Ugb25seSBpdHMgaGVhcCBUSUQgYW5kIG9mZnNldC4gIFRoZSBJ bmRleFR1cGxlcyBnbwotICogaW50byBhIHNlcGFyYXRlIHdvcmtzcGFjZSBhcnJheTsgZWFjaCBC VFNjYW5Qb3NJdGVtIHN0b3JlcyBpdHMgdHVwbGUncwotICogb2Zmc2V0IHdpdGhpbiB0aGF0IGFy cmF5LiAgUG9zdGluZyBsaXN0IHR1cGxlcyBzdG9yZSBhICJiYXNlIiB0dXBsZSBvbmNlLAotICog YWxsb3dpbmcgdGhlIHNhbWUga2V5IHRvIGJlIHJldHVybmVkIGZvciBlYWNoIFRJRCBpbiB0aGUg cG9zdGluZyBsaXN0Ci0gKiB0dXBsZS4KLSAqLwotCi10eXBlZGVmIHN0cnVjdCBCVFNjYW5Qb3NJ dGVtCS8qIHdoYXQgd2UgcmVtZW1iZXIgYWJvdXQgZWFjaCBtYXRjaCAqLwotewotCUl0ZW1Qb2lu dGVyRGF0YSBoZWFwVGlkOwkvKiBUSUQgb2YgcmVmZXJlbmNlZCBoZWFwIGl0ZW0gKi8KLQlPZmZz ZXROdW1iZXIgaW5kZXhPZmZzZXQ7CS8qIGluZGV4IGl0ZW0ncyBsb2NhdGlvbiB3aXRoaW4gcGFn ZSAqLwotCUxvY2F0aW9uSW5kZXggdHVwbGVPZmZzZXQ7CS8qIEluZGV4VHVwbGUncyBvZmZzZXQg aW4gd29ya3NwYWNlLCBpZiBhbnkgKi8KLX0gQlRTY2FuUG9zSXRlbTsKLQotdHlwZWRlZiBzdHJ1 Y3QgQlRTY2FuUG9zRGF0YQotewotCUJ1ZmZlcgkJYnVmOwkJCS8qIGN1cnJQYWdlIGJ1ZiAoaW52 YWxpZCBtZWFucyB1bnBpbm5lZCkgKi8KLQotCS8qIHBhZ2UgZGV0YWlscyBhcyBvZiB0aGUgc2F2 ZWQgcG9zaXRpb24ncyBjYWxsIHRvIF9idF9yZWFkcGFnZSAqLwotCUJsb2NrTnVtYmVyIGN1cnJQ YWdlOwkJLyogcGFnZSByZWZlcmVuY2VkIGJ5IGl0ZW1zIGFycmF5ICovCi0JQmxvY2tOdW1iZXIg cHJldlBhZ2U7CQkvKiBjdXJyUGFnZSdzIGxlZnQgbGluayAqLwotCUJsb2NrTnVtYmVyIG5leHRQ YWdlOwkJLyogY3VyclBhZ2UncyByaWdodCBsaW5rICovCi0JWExvZ1JlY1B0cglsc247CQkJLyog Y3VyclBhZ2UncyBMU04gKHdoZW4gc28tPmRyb3BQaW4pICovCi0KLQkvKiBzY2FuIGRpcmVjdGlv biBmb3IgdGhlIHNhdmVkIHBvc2l0aW9uJ3MgY2FsbCB0byBfYnRfcmVhZHBhZ2UgKi8KLQlTY2Fu RGlyZWN0aW9uIGRpcjsKLQotCS8qCi0JICogSWYgd2UgYXJlIGRvaW5nIGFuIGluZGV4LW9ubHkg c2NhbiwgbmV4dFR1cGxlT2Zmc2V0IGlzIHRoZSBmaXJzdCBmcmVlCi0JICogbG9jYXRpb24gaW4g dGhlIGFzc29jaWF0ZWQgdHVwbGUgc3RvcmFnZSB3b3Jrc3BhY2UuCi0JICovCi0JaW50CQkJbmV4 dFR1cGxlT2Zmc2V0OwotCi0JLyoKLQkgKiBtb3JlTGVmdCBhbmQgbW9yZVJpZ2h0IHRyYWNrIHdo ZXRoZXIgd2UgdGhpbmsgdGhlcmUgbWF5IGJlIG1hdGNoaW5nCi0JICogaW5kZXggZW50cmllcyB0 byB0aGUgbGVmdCBhbmQgcmlnaHQgb2YgdGhlIGN1cnJlbnQgcGFnZSwgcmVzcGVjdGl2ZWx5Lgot CSAqLwotCWJvb2wJCW1vcmVMZWZ0OwotCWJvb2wJCW1vcmVSaWdodDsKLQotCS8qCi0JICogVGhl IGl0ZW1zIGFycmF5IGlzIGFsd2F5cyBvcmRlcmVkIGluIGluZGV4IG9yZGVyIChpZSwgaW5jcmVh c2luZwotCSAqIGluZGV4b2Zmc2V0KS4gIFdoZW4gc2Nhbm5pbmcgYmFja3dhcmRzIGl0IGlzIGNv bnZlbmllbnQgdG8gZmlsbCB0aGUKLQkgKiBhcnJheSBiYWNrLXRvLWZyb250LCBzbyB3ZSBzdGFy dCBhdCB0aGUgbGFzdCBzbG90IGFuZCBmaWxsIGRvd253YXJkcy4KLQkgKiBIZW5jZSB3ZSBuZWVk IGJvdGggYSBmaXJzdC12YWxpZC1lbnRyeSBhbmQgYSBsYXN0LXZhbGlkLWVudHJ5IGNvdW50ZXIu Ci0JICogaXRlbUluZGV4IGlzIGEgY3Vyc29yIHNob3dpbmcgd2hpY2ggZW50cnkgd2FzIGxhc3Qg cmV0dXJuZWQgdG8gY2FsbGVyLgotCSAqLwotCWludAkJCWZpcnN0SXRlbTsJCS8qIGZpcnN0IHZh bGlkIGluZGV4IGluIGl0ZW1zW10gKi8KLQlpbnQJCQlsYXN0SXRlbTsJCS8qIGxhc3QgdmFsaWQg aW5kZXggaW4gaXRlbXNbXSAqLwotCWludAkJCWl0ZW1JbmRleDsJCS8qIGN1cnJlbnQgaW5kZXgg aW4gaXRlbXNbXSAqLwotCi0JQlRTY2FuUG9zSXRlbSBpdGVtc1tNYXhUSURzUGVyQlRyZWVQYWdl XTsJLyogTVVTVCBCRSBMQVNUICovCi19IEJUU2NhblBvc0RhdGE7Ci0KLXR5cGVkZWYgQlRTY2Fu UG9zRGF0YSAqQlRTY2FuUG9zOwotCi0jZGVmaW5lIEJUU2NhblBvc0lzUGlubmVkKHNjYW5wb3Mp IFwKLSggXAotCUFzc2VydE1hY3JvKEJsb2NrTnVtYmVySXNWYWxpZCgoc2NhbnBvcykuY3VyclBh Z2UpIHx8IFwKLQkJCQkhQnVmZmVySXNWYWxpZCgoc2NhbnBvcykuYnVmKSksIFwKLQlCdWZmZXJJ c1ZhbGlkKChzY2FucG9zKS5idWYpIFwKLSkKLSNkZWZpbmUgQlRTY2FuUG9zVW5waW4oc2NhbnBv cykgXAotCWRvIHsgXAotCQlSZWxlYXNlQnVmZmVyKChzY2FucG9zKS5idWYpOyBcCi0JCShzY2Fu cG9zKS5idWYgPSBJbnZhbGlkQnVmZmVyOyBcCi0JfSB3aGlsZSAoMCkKLSNkZWZpbmUgQlRTY2Fu UG9zVW5waW5JZlBpbm5lZChzY2FucG9zKSBcCi0JZG8geyBcCi0JCWlmIChCVFNjYW5Qb3NJc1Bp bm5lZChzY2FucG9zKSkgXAotCQkJQlRTY2FuUG9zVW5waW4oc2NhbnBvcyk7IFwKLQl9IHdoaWxl ICgwKQotCi0jZGVmaW5lIEJUU2NhblBvc0lzVmFsaWQoc2NhbnBvcykgXAotKCBcCi0JQXNzZXJ0 TWFjcm8oQmxvY2tOdW1iZXJJc1ZhbGlkKChzY2FucG9zKS5jdXJyUGFnZSkgfHwgXAotCQkJCSFC dWZmZXJJc1ZhbGlkKChzY2FucG9zKS5idWYpKSwgXAotCUJsb2NrTnVtYmVySXNWYWxpZCgoc2Nh bnBvcykuY3VyclBhZ2UpIFwKLSkKLSNkZWZpbmUgQlRTY2FuUG9zSW52YWxpZGF0ZShzY2FucG9z KSBcCi0JZG8geyBcCi0JCShzY2FucG9zKS5idWYgPSBJbnZhbGlkQnVmZmVyOyBcCi0JCShzY2Fu cG9zKS5jdXJyUGFnZSA9IEludmFsaWRCbG9ja051bWJlcjsgXAotCX0gd2hpbGUgKDApCi0KIC8q IFdlIG5lZWQgb25lIG9mIHRoZXNlIGZvciBlYWNoIGVxdWFsaXR5LXR5cGUgU0tfU0VBUkNIQVJS QVkgc2NhbiBrZXkgKi8KIHR5cGVkZWYgc3RydWN0IEJUQXJyYXlLZXlJbmZvCiB7CkBAIC0xMDUw LDYgKzk0NCwzMCBAQCB0eXBlZGVmIHN0cnVjdCBCVEFycmF5S2V5SW5mbwogCVNjYW5LZXkJCWhp Z2hfY29tcGFyZTsJLyogYXJyYXkncyA8IG9yIDw9IHVwcGVyIGJvdW5kICovCiB9IEJUQXJyYXlL ZXlJbmZvOwogCisvKgorICogQlRTY2FuT3BhcXVlRGF0YSBpcyB0aGUgYnRyZWUtcHJpdmF0ZSBz dGF0ZSBuZWVkZWQgZm9yIGFuIGluZGV4c2Nhbi4KKyAqIFRoaXMgY29uc2lzdHMgb2YgcHJlcHJv Y2Vzc2VkIHNjYW4ga2V5cyAoc2VlIF9idF9wcmVwcm9jZXNzX2tleXMoKSBmb3IKKyAqIGRldGFp bHMgb2YgdGhlIHByZXByb2Nlc3NpbmcpLCBhbmQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGN1cnJl bnQgYXJyYXkKKyAqIGtleXMuICBUaGVyZSBhcmUgYXNzdW1wdGlvbnMgYWJvdXQgaG93IHRoZSBj dXJyZW50IGFycmF5IGtleXMgdHJhY2sgdGhlCisgKiBwcm9ncmVzcyBvZiB0aGUgaW5kZXggc2Nh biB0aHJvdWdoIHRoZSBpbmRleCdzIGtleSBzcGFjZSAoc2VlIF9idF9yZWFkcGFnZQorICogYW5k IF9idF9hZHZhbmNlX2FycmF5X2tleXMpLCBidXQgd2UgZG9uJ3QgYWN0dWFsbHkgdHJhY2sgYW55 dGhpbmcgYWJvdXQgdGhlCisgKiBjdXJyZW50IHNjYW4gcG9zaXRpb24gaW4gdGhpcyBvcGFxdWUg c3RydWN0LiAgVGhhdCBpcyB0cmFja2VkIGV4dGVybmFsbHksCisgKiBieSBpbXBsZW1lbnRpbmcg YSBxdWV1ZSBvZiAiYmF0Y2hlcyIsIHdoZXJlIGVhY2ggYmF0Y2ggcmVwcmVzZW50cyB0aGUgaXRl bXMKKyAqIHJldHVybmVkIGJ5IGJ0Z2V0YmF0Y2ggd2l0aGluIGEgc2luZ2xlIGxlYWYgcGFnZS4K KyAqCisgKiBJbmRleCBzY2FucyB3b3JrIGEgcGFnZSBhdCBhIHRpbWUsIGFzIHJlcXVpcmVkIGJ5 IHRoZSBhbWdldGJhdGNoIGNvbnRyYWN0OgorICogd2UgcGluIGFuZCByZWFkLWxvY2sgdGhlIHBh Z2UsIGlkZW50aWZ5IGFsbCB0aGUgbWF0Y2hpbmcgaXRlbXMgb24gdGhlIHBhZ2UKKyAqIGFuZCBy ZXR1cm4gdGhlbSBpbiBhIG5ld2x5IGFsbG9jYXRlZCBiYXRjaC4gIFdlIHRoZW4gcmVsZWFzZSB0 aGUgcmVhZC1sb2NrCisgKiB1c2luZyBhbWdldGJhdGNoIHV0aWxpdHkgcm91dGluZXMuICBUaGlz IGFwcHJvYWNoIG1pbmltaXplcyBsb2NrL3VubG9jaworICogdHJhZmZpYy4gX2J0X25leHQgaXMg cGFzc2VkIHByaW9yYmF0Y2gsIHdoaWNoIGNvbnRhaW5zIGRldGFpbHMgb2Ygd2hpY2gKKyAqIHBh Z2UgaXMgbmV4dCBpbiBsaW5lIHRvIGJlIHJlYWQgKHByaW9yYmF0Y2ggaXMgcHJvdmlkZWQgYXMg YW4gYXJndW1lbnQgdG8KKyAqIGJ0Z2V0YmF0Y2ggYnkgY29yZSBjb2RlKS4KKyAqCisgKiBJZiB3 ZSBhcmUgZG9pbmcgYW4gaW5kZXgtb25seSBzY2FuLCB3ZSBzYXZlIHRoZSBlbnRpcmUgSW5kZXhU dXBsZSBmb3IgZWFjaAorICogbWF0Y2hlZCBpdGVtLCBvdGhlcndpc2Ugb25seSBpdHMgaGVhcCBU SUQgYW5kIG9mZnNldC4gIFRoaXMgaXMgYWxzbyBwZXIgdGhlCisgKiBhbWdldGJhdGNoIGNvbnRy YWN0LiAgUG9zdGluZyBsaXN0IHR1cGxlcyBzdG9yZSBhICJiYXNlIiB0dXBsZSBvbmNlLAorICog YWxsb3dpbmcgdGhlIHNhbWUga2V5IHRvIGJlIHJldHVybmVkIGZvciBlYWNoIFRJRCBpbiB0aGUg cG9zdGluZyBsaXN0LgorICovCiB0eXBlZGVmIHN0cnVjdCBCVFNjYW5PcGFxdWVEYXRhCiB7CiAJ LyogdGhlc2UgZmllbGRzIGFyZSBzZXQgYnkgX2J0X3ByZXByb2Nlc3Nfa2V5cygpOiAqLwpAQCAt MTA2NiwzMiArOTg0LDYgQEAgdHlwZWRlZiBzdHJ1Y3QgQlRTY2FuT3BhcXVlRGF0YQogCUJUQXJy YXlLZXlJbmZvICphcnJheUtleXM7CS8qIGluZm8gYWJvdXQgZWFjaCBlcXVhbGl0eS10eXBlIGFy cmF5IGtleSAqLwogCUZtZ3JJbmZvICAgKm9yZGVyUHJvY3M7CQkvKiBPUkRFUiBwcm9jcyBmb3Ig cmVxdWlyZWQgZXF1YWxpdHkga2V5cyAqLwogCU1lbW9yeUNvbnRleHQgYXJyYXlDb250ZXh0OyAv KiBzY2FuLWxpZmVzcGFuIGNvbnRleHQgZm9yIGFycmF5IGRhdGEgKi8KLQotCS8qIGluZm8gYWJv dXQga2lsbGVkIGl0ZW1zIGlmIGFueSAoa2lsbGVkSXRlbXMgaXMgTlVMTCBpZiBuZXZlciB1c2Vk KSAqLwotCWludAkJICAgKmtpbGxlZEl0ZW1zOwkvKiBjdXJyUG9zLml0ZW1zIGluZGV4ZXMgb2Yg a2lsbGVkIGl0ZW1zICovCi0JaW50CQkJbnVtS2lsbGVkOwkJLyogbnVtYmVyIG9mIGN1cnJlbnRs eSBzdG9yZWQgaXRlbXMgKi8KLQlib29sCQlkcm9wUGluOwkJLyogZHJvcCBsZWFmIHBpbiBiZWZv cmUgYnRnZXR0dXBsZSByZXR1cm5zPyAqLwotCi0JLyoKLQkgKiBJZiB3ZSBhcmUgZG9pbmcgYW4g aW5kZXgtb25seSBzY2FuLCB0aGVzZSBhcmUgdGhlIHR1cGxlIHN0b3JhZ2UKLQkgKiB3b3Jrc3Bh Y2VzIGZvciB0aGUgY3VyclBvcyBhbmQgbWFya1BvcyByZXNwZWN0aXZlbHkuICBFYWNoIGlzIG9m IHNpemUKLQkgKiBCTENLU1osIHNvIGl0IGNhbiBob2xkIGFzIG11Y2ggYXMgYSBmdWxsIHBhZ2Un cyB3b3J0aCBvZiB0dXBsZXMuCi0JICovCi0JY2hhcgkgICAqY3VyclR1cGxlczsJCS8qIHR1cGxl IHN0b3JhZ2UgZm9yIGN1cnJQb3MgKi8KLQljaGFyCSAgICptYXJrVHVwbGVzOwkJLyogdHVwbGUg c3RvcmFnZSBmb3IgbWFya1BvcyAqLwotCi0JLyoKLQkgKiBJZiB0aGUgbWFya2VkIHBvc2l0aW9u IGlzIG9uIHRoZSBzYW1lIHBhZ2UgYXMgY3VycmVudCBwb3NpdGlvbiwgd2UKLQkgKiBkb24ndCB1 c2UgbWFya1BvcywgYnV0IGp1c3Qga2VlcCB0aGUgbWFya2VkIGl0ZW1JbmRleCBpbiBtYXJrSXRl bUluZGV4Ci0JICogKGFsbCB0aGUgcmVzdCBvZiBjdXJyUG9zIGlzIHZhbGlkIGZvciB0aGUgbWFy ayBwb3NpdGlvbikuIEhlbmNlLCB0bwotCSAqIGRldGVybWluZSBpZiB0aGVyZSBpcyBhIG1hcmss IGZpcnN0IGxvb2sgYXQgbWFya0l0ZW1JbmRleCwgdGhlbiBhdAotCSAqIG1hcmtQb3MuCi0JICov Ci0JaW50CQkJbWFya0l0ZW1JbmRleDsJLyogaXRlbUluZGV4LCBvciAtMSBpZiBub3QgdmFsaWQg Ki8KLQotCS8qIGtlZXAgdGhlc2UgbGFzdCBpbiBzdHJ1Y3QgZm9yIGVmZmljaWVuY3kgKi8KLQlC VFNjYW5Qb3NEYXRhIGN1cnJQb3M7CQkvKiBjdXJyZW50IHBvc2l0aW9uIGRhdGEgKi8KLQlCVFNj YW5Qb3NEYXRhIG1hcmtQb3M7CQkvKiBtYXJrZWQgcG9zaXRpb24sIGlmIGFueSAqLwogfSBCVFNj YW5PcGFxdWVEYXRhOwogCiB0eXBlZGVmIEJUU2Nhbk9wYXF1ZURhdGEgKkJUU2Nhbk9wYXF1ZTsK QEAgLTExNjAsMTQgKzEwNTIsMTYgQEAgZXh0ZXJuIGJvb2wgYnRpbnNlcnQoUmVsYXRpb24gcmVs LCBEYXR1bSAqdmFsdWVzLCBib29sICppc251bGwsCiBleHRlcm4gSW5kZXhTY2FuRGVzYyBidGJl Z2luc2NhbihSZWxhdGlvbiByZWwsIGludCBua2V5cywgaW50IG5vcmRlcmJ5cyk7CiBleHRlcm4g U2l6ZSBidGVzdGltYXRlcGFyYWxsZWxzY2FuKFJlbGF0aW9uIHJlbCwgaW50IG5rZXlzLCBpbnQg bm9yZGVyYnlzKTsKIGV4dGVybiB2b2lkIGJ0aW5pdHBhcmFsbGVsc2Nhbih2b2lkICp0YXJnZXQp OwotZXh0ZXJuIGJvb2wgYnRnZXR0dXBsZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rp b24gZGlyKTsKK2V4dGVybiBCYXRjaEluZGV4U2NhbiBidGdldGJhdGNoKEluZGV4U2NhbkRlc2Mg c2NhbiwKKwkJCQkJCQkJIEJhdGNoSW5kZXhTY2FuIHByaW9yYmF0Y2gsCisJCQkJCQkJCSBTY2Fu RGlyZWN0aW9uIGRpcik7CiBleHRlcm4gaW50NjQgYnRnZXRiaXRtYXAoSW5kZXhTY2FuRGVzYyBz Y2FuLCBUSURCaXRtYXAgKnRibSk7CiBleHRlcm4gdm9pZCBidHJlc2NhbihJbmRleFNjYW5EZXNj IHNjYW4sIFNjYW5LZXkgc2NhbmtleSwgaW50IG5zY2Fua2V5cywKIAkJCQkJIFNjYW5LZXkgb3Jk ZXJieXMsIGludCBub3JkZXJieXMpOworZXh0ZXJuIHZvaWQgYnRmcmVlYmF0Y2goSW5kZXhTY2Fu RGVzYyBzY2FuLCBCYXRjaEluZGV4U2NhbiBiYXRjaCk7CiBleHRlcm4gdm9pZCBidHBhcmFsbGVs cmVzY2FuKEluZGV4U2NhbkRlc2Mgc2Nhbik7CiBleHRlcm4gdm9pZCBidGVuZHNjYW4oSW5kZXhT Y2FuRGVzYyBzY2FuKTsKLWV4dGVybiB2b2lkIGJ0bWFya3BvcyhJbmRleFNjYW5EZXNjIHNjYW4p OwotZXh0ZXJuIHZvaWQgYnRyZXN0cnBvcyhJbmRleFNjYW5EZXNjIHNjYW4pOworZXh0ZXJuIHZv aWQgYnRwb3NyZXNldChJbmRleFNjYW5EZXNjIHNjYW4sIEJhdGNoSW5kZXhTY2FuIG1hcmtiYXRj aCk7CiBleHRlcm4gSW5kZXhCdWxrRGVsZXRlUmVzdWx0ICpidGJ1bGtkZWxldGUoSW5kZXhWYWN1 dW1JbmZvICppbmZvLAogCQkJCQkJCQkJCSAgIEluZGV4QnVsa0RlbGV0ZVJlc3VsdCAqc3RhdHMs CiAJCQkJCQkJCQkJICAgSW5kZXhCdWxrRGVsZXRlQ2FsbGJhY2sgY2FsbGJhY2ssCkBAIC0xMjcx LDggKzExNjUsOSBAQCBleHRlcm4gdm9pZCBfYnRfcHJlcHJvY2Vzc19rZXlzKEluZGV4U2NhbkRl c2Mgc2Nhbik7CiAvKgogICogcHJvdG90eXBlcyBmb3IgZnVuY3Rpb25zIGluIG5idHJlYWRwYWdl LmMKICAqLwotZXh0ZXJuIGJvb2wgX2J0X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2Nh bkRpcmVjdGlvbiBkaXIsCi0JCQkJCQkgT2Zmc2V0TnVtYmVyIG9mZm51bSwgYm9vbCBmaXJzdHBh Z2UpOworZXh0ZXJuIGJvb2wgX2J0X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgQmF0Y2hJ bmRleFNjYW4gbmV3YmF0Y2gsCisJCQkJCQkgU2NhbkRpcmVjdGlvbiBkaXIsIE9mZnNldE51bWJl ciBvZmZudW0sCisJCQkJCQkgYm9vbCBmaXJzdHBhZ2UpOwogZXh0ZXJuIHZvaWQgX2J0X3N0YXJ0 X2FycmF5X2tleXMoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcik7CiBleHRl cm4gaW50CV9idF9iaW5zcmNoX2FycmF5X3NrZXkoRm1nckluZm8gKm9yZGVycHJvYywKIAkJCQkJ CQkJICAgYm9vbCBjdXJfZWxlbV90cmlnLCBTY2FuRGlyZWN0aW9uIGRpciwKQEAgLTEyODcsOCAr MTE4Miw5IEBAIGV4dGVybiBCVFN0YWNrIF9idF9zZWFyY2goUmVsYXRpb24gcmVsLCBSZWxhdGlv biBoZWFwcmVsLCBCVFNjYW5JbnNlcnQga2V5LAogCQkJCQkJICBCdWZmZXIgKmJ1ZlAsIGludCBh Y2Nlc3MpOwogZXh0ZXJuIE9mZnNldE51bWJlciBfYnRfYmluc3JjaF9pbnNlcnQoUmVsYXRpb24g cmVsLCBCVEluc2VydFN0YXRlIGluc2VydHN0YXRlKTsKIGV4dGVybiBpbnQzMiBfYnRfY29tcGFy ZShSZWxhdGlvbiByZWwsIEJUU2Nhbkluc2VydCBrZXksIFBhZ2UgcGFnZSwgT2Zmc2V0TnVtYmVy IG9mZm51bSk7Ci1leHRlcm4gYm9vbCBfYnRfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2Fu RGlyZWN0aW9uIGRpcik7Ci1leHRlcm4gYm9vbCBfYnRfbmV4dChJbmRleFNjYW5EZXNjIHNjYW4s IFNjYW5EaXJlY3Rpb24gZGlyKTsKK2V4dGVybiBCYXRjaEluZGV4U2NhbiBfYnRfZmlyc3QoSW5k ZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcik7CitleHRlcm4gQmF0Y2hJbmRleFNj YW4gX2J0X25leHQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwKKwkJCQkJ CQkgICBCYXRjaEluZGV4U2NhbiBwcmlvcmJhdGNoKTsKIGV4dGVybiBCdWZmZXIgX2J0X2dldF9l bmRwb2ludChSZWxhdGlvbiByZWwsIHVpbnQzMiBsZXZlbCwgYm9vbCByaWdodG1vc3QpOwogCiAv KgpAQCAtMTI5Niw3ICsxMTkyLDcgQEAgZXh0ZXJuIEJ1ZmZlciBfYnRfZ2V0X2VuZHBvaW50KFJl bGF0aW9uIHJlbCwgdWludDMyIGxldmVsLCBib29sIHJpZ2h0bW9zdCk7CiAgKi8KIGV4dGVybiBC VFNjYW5JbnNlcnQgX2J0X21rc2NhbmtleShSZWxhdGlvbiByZWwsIEluZGV4VHVwbGUgaXR1cCk7 CiBleHRlcm4gdm9pZCBfYnRfZnJlZXN0YWNrKEJUU3RhY2sgc3RhY2spOwotZXh0ZXJuIHZvaWQg X2J0X2tpbGxpdGVtcyhJbmRleFNjYW5EZXNjIHNjYW4pOworZXh0ZXJuIHZvaWQgX2J0X2tpbGxp dGVtcyhJbmRleFNjYW5EZXNjIHNjYW4sIEJhdGNoSW5kZXhTY2FuIGJhdGNoKTsKIGV4dGVybiBC VEN5Y2xlSWQgX2J0X3ZhY3V1bV9jeWNsZWlkKFJlbGF0aW9uIHJlbCk7CiBleHRlcm4gQlRDeWNs ZUlkIF9idF9zdGFydF92YWN1dW0oUmVsYXRpb24gcmVsKTsKIGV4dGVybiB2b2lkIF9idF9lbmRf dmFjdXVtKFJlbGF0aW9uIHJlbCk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvcmVs c2Nhbi5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaAppbmRleCA4N2E4YmUxMDQuLjNh NDE2ZTc2YiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaAorKysgYi9z cmMvaW5jbHVkZS9hY2Nlc3MvcmVsc2Nhbi5oCkBAIC0xNiw2ICsxNiw3IEBACiAKICNpbmNsdWRl ICJhY2Nlc3MvaHR1cF9kZXRhaWxzLmgiCiAjaW5jbHVkZSAiYWNjZXNzL2l0dXAuaCIKKyNpbmNs dWRlICJhY2Nlc3Mvc2Rpci5oIgogI2luY2x1ZGUgIm5vZGVzL3RpZGJpdG1hcC5oIgogI2luY2x1 ZGUgInBvcnQvYXRvbWljcy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvYnVmLmgiCkBAIC0xMjMsOCAr MTI0LDE5MiBAQCB0eXBlZGVmIHN0cnVjdCBQYXJhbGxlbEJsb2NrVGFibGVTY2FuV29ya2VyRGF0 YSAqUGFyYWxsZWxCbG9ja1RhYmxlU2NhbldvcmtlcjsKIHR5cGVkZWYgc3RydWN0IEluZGV4RmV0 Y2hUYWJsZURhdGEKIHsKIAlSZWxhdGlvbglyZWw7CisKKwlpbnQJCQluaGVhcGFjY2Vzc2VzOwkv KiBudW1iZXIgb2YgaGVhcCBhY2Nlc3NlcywgZm9yCisJCQkJCQkJCSAqIGluc3RydW1lbnRhdGlv bi9tZXRyaWNzICovCiB9IEluZGV4RmV0Y2hUYWJsZURhdGE7CiAKKy8qCisgKiBRdWV1ZS13aXNl IGxvY2F0aW9uIG9mIGEgQmF0Y2hNYXRjaGluZ0l0ZW0gdGhhdCBhcHBlYXJzIGluIGEgQmF0Y2hJ bmRleFNjYW4KKyAqIHJldHVybmVkIGJ5IChhbmQgc3Vic2VxdWVudGx5IHBhc3NlZCB0bykgYW4g YW1nZXRiYXRjaCByb3V0aW5lCisgKi8KK3R5cGVkZWYgc3RydWN0IEJhdGNoUXVldWVJdGVtUG9z Cit7CisJLyogQmF0Y2hRdWV1ZS5iYXRjaGVzW10td2lzZSBpbmRleCB0byByZWxldmFudCBCYXRj aEluZGV4U2NhbiAqLworCWludAkJCWJhdGNoOworCisJLyogQmF0Y2hJbmRleFNjYW4uaXRlbXNb XS13aXNlIGluZGV4IHRvIHJlbGV2YW50IEJhdGNoTWF0Y2hpbmdJdGVtICovCisJaW50CQkJaXRl bTsKK30gQmF0Y2hRdWV1ZUl0ZW1Qb3M7CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorYmF0Y2hfcmVz ZXRfcG9zKEJhdGNoUXVldWVJdGVtUG9zICpwb3MpCit7CisJcG9zLT5iYXRjaCA9IC0xOworCXBv cy0+aXRlbSA9IC0xOworfQorCisvKgorICogTWF0Y2hpbmcgaXRlbSByZXR1cm5lZCBieSBhbWdl dGJhdGNoIChpbiByZXR1cm5lZCBCYXRjaEluZGV4U2NhbikgZHVyaW5nIGFuCisgKiBpbmRleCBz Y2FuLiAgVXNlZCBieSB0YWJsZSBBTSB0byBsb2NhdGUgcmVsZXZhbnQgbWF0Y2hpbmcgdGFibGUg dHVwbGUuCisgKi8KK3R5cGVkZWYgc3RydWN0IEJhdGNoTWF0Y2hpbmdJdGVtCit7CisJSXRlbVBv aW50ZXJEYXRhIGhlYXBUaWQ7CS8qIFRJRCBvZiByZWZlcmVuY2VkIGhlYXAgaXRlbSAqLworCU9m ZnNldE51bWJlciBpbmRleE9mZnNldDsJLyogaW5kZXggaXRlbSdzIGxvY2F0aW9uIHdpdGhpbiBw YWdlICovCisJTG9jYXRpb25JbmRleCB0dXBsZU9mZnNldDsJLyogSW5kZXhUdXBsZSdzIG9mZnNl dCBpbiB3b3Jrc3BhY2UsIGlmIGFueSAqLworfSBCYXRjaE1hdGNoaW5nSXRlbTsKKworLyoKKyAq IERhdGEgYWJvdXQgb25lIGJhdGNoIG9mIGl0ZW1zIHJldHVybmVkIGJ5IChhbmQgcGFzc2VkIHRv KSBhbWdldGJhdGNoIGR1cmluZworICogaW5kZXggc2NhbnMKKyAqLwordHlwZWRlZiBzdHJ1Y3Qg QmF0Y2hJbmRleFNjYW5EYXRhCit7CisJLyoKKwkgKiBJbmZvcm1hdGlvbiBvdXRwdXQgYnkgYW1n ZXRiYXRjaCBpbmRleCBBTXMgdXBvbiByZXR1cm5pbmcgYSBiYXRjaCB3aXRoCisJICogb25lIG9y IG1vcmUgbWF0Y2hpbmcgaXRlbXMsIGRlc2NyaWJpbmcgZGV0YWlscyBvZiB0aGUgaW5kZXggcGFn ZSB3aGVyZQorCSAqIG1hdGNoZXMgd2VyZSBsb2NhdGVkLgorCSAqCisJICogVXNlZCBpbiB0aGUg bmV4dCBhbWdldGJhdGNoIGNhbGwgdG8gZGV0ZXJtaW5lIHdoaWNoIGluZGV4IHBhZ2UgdG8gcmVh ZAorCSAqIG5leHQgKG9yIHRvIGRldGVybWluZSBpZiB0aGVyZSdzIG5vIGZ1cnRoZXIgbWF0Y2hl cyBpbiBjdXJyZW50IHNjYW4KKwkgKiBkaXJlY3Rpb24pLgorCSAqLworCUJsb2NrTnVtYmVyIGN1 cnJQYWdlOwkJLyogSW5kZXggcGFnZSB3aXRoIG1hdGNoaW5nIGl0ZW1zICovCisJQmxvY2tOdW1i ZXIgcHJldlBhZ2U7CQkvKiBjdXJyUGFnZSdzIGxlZnQgbGluayAqLworCUJsb2NrTnVtYmVyIG5l eHRQYWdlOwkJLyogY3VyclBhZ2UncyByaWdodCBsaW5rICovCisKKwlCdWZmZXIJCWJ1ZjsJCQkv KiBjdXJyUGFnZSBidWYgKGludmFsaWQgbWVhbnMgdW5waW5uZWQpICovCisJWExvZ1JlY1B0cgls c247CQkJLyogY3VyclBhZ2UncyBMU04gKHdoZW4gZHJvcFBpbikgKi8KKworCS8qIHNjYW4gZGly ZWN0aW9uIHdoZW4gdGhlIGluZGV4IHBhZ2Ugd2FzIHJlYWQgKi8KKwlTY2FuRGlyZWN0aW9uIGRp cjsKKworCS8qCisJICogbW9yZUxlZnQgYW5kIG1vcmVSaWdodCB0cmFjayB3aGV0aGVyIHdlIHRo aW5rIHRoZXJlIG1heSBiZSBtYXRjaGluZworCSAqIGluZGV4IGVudHJpZXMgdG8gdGhlIGxlZnQg YW5kIHJpZ2h0IG9mIHRoZSBjdXJyZW50IHBhZ2UsIHJlc3BlY3RpdmVseQorCSAqLworCWJvb2wJ CW1vcmVMZWZ0OworCWJvb2wJCW1vcmVSaWdodDsKKworCS8qCisJICogVGhlIGl0ZW1zIGFycmF5 IGlzIGFsd2F5cyBvcmRlcmVkIGluIGluZGV4IG9yZGVyIChpZSwgaW5jcmVhc2luZworCSAqIGlu ZGV4b2Zmc2V0KS4gIFdoZW4gc2Nhbm5pbmcgYmFja3dhcmRzIGl0IGlzIGNvbnZlbmllbnQgdG8g ZmlsbCB0aGUKKwkgKiBhcnJheSBiYWNrLXRvLWZyb250LCBzbyB3ZSBzdGFydCBhdCB0aGUgbGFz dCBzbG90IGFuZCBmaWxsIGRvd253YXJkcy4KKwkgKiBIZW5jZSB3ZSBuZWVkIGJvdGggYSBmaXJz dC12YWxpZC1lbnRyeSBhbmQgYSBsYXN0LXZhbGlkLWVudHJ5IGNvdW50ZXIuCisJICovCisJaW50 CQkJZmlyc3RJdGVtOwkJLyogZmlyc3QgdmFsaWQgaW5kZXggaW4gaXRlbXNbXSAqLworCWludAkJ CWxhc3RJdGVtOwkJLyogbGFzdCB2YWxpZCBpbmRleCBpbiBpdGVtc1tdICovCisKKwkvKiBpbmZv IGFib3V0IGtpbGxlZCBpdGVtcyBpZiBhbnkgKGtpbGxlZEl0ZW1zIGlzIE5VTEwgaWYgbmV2ZXIg dXNlZCkgKi8KKwlpbnQJCSAgICpraWxsZWRJdGVtczsJLyogaW5kZXhlcyBvZiBraWxsZWQgaXRl bXMgKi8KKwlpbnQJCQludW1LaWxsZWQ7CQkvKiBudW1iZXIgb2YgY3VycmVudGx5IHN0b3JlZCBp dGVtcyAqLworCisJLyoKKwkgKiBNYXRjaGluZyBpdGVtcyBzdGF0ZSBmb3IgdGhpcyBiYXRjaC4K KwkgKgorCSAqIElmIHdlIGFyZSBkb2luZyBhbiBpbmRleC1vbmx5IHNjYW4sIHRoZXNlIGFyZSB0 aGUgdHVwbGUgc3RvcmFnZQorCSAqIHdvcmtzcGFjZXMgZm9yIHRoZSBtYXRjaGluZyB0dXBsZXMg KHR1cGxlcyByZWZlcmVuY2VkIGJ5IGl0ZW1zW10pLiBFYWNoCisJICogaXMgb2Ygc2l6ZSBCTENL U1osIHNvIGl0IGNhbiBob2xkIGFzIG11Y2ggYXMgYSBmdWxsIHBhZ2UncyB3b3J0aCBvZgorCSAq IHR1cGxlcy4KKwkgKi8KKwljaGFyCSAgICpjdXJyVHVwbGVzOwkJLyogdHVwbGUgc3RvcmFnZSBm b3IgaXRlbXNbXSAqLworCWludAkJCW1heGl0ZW1zOwkJLyogYWxsb2NhdGVkIHNpemUgb2YgaXRl bXNbXSAqLworCUJhdGNoTWF0Y2hpbmdJdGVtIGl0ZW1zW0ZMRVhJQkxFX0FSUkFZX01FTUJFUl07 Cit9IEJhdGNoSW5kZXhTY2FuRGF0YTsKKwordHlwZWRlZiBzdHJ1Y3QgQmF0Y2hJbmRleFNjYW5E YXRhICpCYXRjaEluZGV4U2NhbjsKKworLyoKKyAqIE1heGltdW0gbnVtYmVyIG9mIGJhdGNoZXMg KGxlYWYgcGFnZXMpIHdlIGNhbiBrZWVwIGluIG1lbW9yeS4gIFdlIG5lZWQgYQorICogbWluaW11 bSBvZiB0d28sIHNpbmNlIHdlJ2xsIG9ubHkgY29uc2lkZXIgcmVsZWFzaW5nIG9uZSBiYXRjaCB3 aGVuIGFub3RoZXIKKyAqIGlzIHJlYWQuCisgKi8KKyNkZWZpbmUgSU5ERVhfU0NBTl9NQVhfQkFU Q0hFUwkJMgorI2RlZmluZSBJTkRFWF9TQ0FOX0NBQ0hFX0JBVENIRVMJMgorI2RlZmluZSBJTkRF WF9TQ0FOX0JBVENIX0NPVU5UKHNjYW4pIFwKKwkoKHNjYW4pLT5iYXRjaHF1ZXVlLT5uZXh0QmF0 Y2ggLSAoc2NhbiktPmJhdGNocXVldWUtPmhlYWRCYXRjaCkKKworLyogRGlkIHdlIGFscmVhZHkg bG9hZCBiYXRjaCB3aXRoIHRoZSByZXF1ZXN0ZWQgaW5kZXg/ICovCisjZGVmaW5lIElOREVYX1ND QU5fQkFUQ0hfTE9BREVEKHNjYW4sIGlkeCkgXAorCSgoaWR4KSA8IChzY2FuKS0+YmF0Y2hxdWV1 ZS0+bmV4dEJhdGNoKQorCisvKiBIYXZlIHdlIGxvYWRlZCB0aGUgbWF4aW11bSBudW1iZXIgb2Yg YmF0Y2hlcz8gKi8KKyNkZWZpbmUgSU5ERVhfU0NBTl9CQVRDSF9GVUxMKHNjYW4pIFwKKwkoSU5E RVhfU0NBTl9CQVRDSF9DT1VOVChzY2FuKSA9PSBJTkRFWF9TQ0FOX01BWF9CQVRDSEVTKQorCisv KiBSZXR1cm4gYmF0Y2ggZm9yIHRoZSBwcm92aWRlZCBpbmRleC4gKi8KKyNkZWZpbmUgSU5ERVhf U0NBTl9CQVRDSChzY2FuLCBpZHgpCVwKKwkJKChzY2FuKS0+YmF0Y2hxdWV1ZS0+YmF0Y2hlc1so aWR4KSAlIElOREVYX1NDQU5fTUFYX0JBVENIRVNdKQorCisvKiBJcyB0aGUgcG9zaXRpb24gaW52 YWxpZC91bmRlZmluZWQ/ICovCisjZGVmaW5lIElOREVYX1NDQU5fUE9TX0lOVkFMSUQocG9zKSBc CisJCSgoKHBvcyktPmJhdGNoID09IC0xKSAmJiAoKHBvcyktPml0ZW0gPT0gLTEpKQorCisjaWZk ZWYgSU5ERVhBTV9ERUJVRworI2RlZmluZSBERUJVR19MT0coLi4uKSBlbG9nKEFtUmVndWxhckJh Y2tlbmRQcm9jZXNzKCkgPyBOT1RJQ0UgOiBERUJVRzIsIF9fVkFfQVJHU19fKQorI2Vsc2UKKyNk ZWZpbmUgREVCVUdfTE9HKC4uLikKKyNlbmRpZgorCisvKgorICogU3RhdGUgdXNlZCBieSB0YWJs ZSBBTXMgdG8gbWFuYWdlIGFuIGluZGV4IHNjYW4gdGhhdCB1c2VzIHRoZSBhbWdldGJhdGNoCisg KiBpbnRlcmZhY2UuICBTY2FucyB3b3JrIHdpdGggYSBxdWV1ZSBvZiBiYXRjaGVzIHJldHVybmVk IGJ5IGFtZ2V0YmF0Y2guCisgKgorICogQmF0Y2hlcyBhcmUga2VwdCBpbiB0aGUgb3JkZXIgdGhh dCB0aGV5IHdlcmUgcmV0dXJuZWQgaW4gYnkgYW1nZXRiYXRjaCwKKyAqIHNpbmNlIHRoYXQgaXMg dGhlIHNhbWUgb3JkZXIgdGhhdCB0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3Qgd2lsbCByZXR1cm4K KyAqIG1hdGNoZXMgaW4uICBIb3dldmVyLCB0YWJsZSBBTXMgYXJlIGZyZWUgdG8gZmV0Y2ggdGFi bGUgdHVwbGVzIGluIHdoYXRldmVyCisgKiBvcmRlciBpcyBtb3N0IGNvbnZlbmllbnQvZWZmaWNp ZW50IC0tIHByb3ZpZGVkIHRoYXQgc3VjaCByZW9yZGVyaW5nIGNhbm5vdAorICogYWZmZWN0IHRo ZSBvcmRlciB0aGF0IHRhYmxlX2luZGV4X2dldG5leHRfc2xvdCBsYXRlciByZXR1cm5zIHR1cGxl cyBpbi4KKyAqCisgKiBUaGlzIGRhdGEgc3RydWN0dXJlIGFsc28gcHJvdmlkZXMgdGFibGUgQU1z IHdpdGggYSB3YXkgdG8gcmVhZCBhaGVhZCBvZiB0aGUKKyAqIGN1cnJlbnQgcmVhZCBwb3NpdGlv biBieSBfbXVsdGlwbGVfIGJhdGNoZXMvaW5kZXggcGFnZXMuICBUaGUgZnVydGhlciBvdXQKKyAq IHRoZSB0YWJsZSBBTSByZWFkcyBhaGVhZCBsaWtlIHRoaXMsIHRoZSBmdXJ0aGVyIGl0IGNhbiBz ZWUgaW50byB0aGUgZnV0dXJlLgorICogVGhhdCB3YXkgdGhlIHRhYmxlIEFNIGlzIGFibGUgdG8g cmVvcmRlciB3b3JrIGFzIGFnZ3Jlc3NpdmVseSBhcyBkZXNpcmVkLgorICogRm9yIGV4YW1wbGUs IGluZGV4IHNjYW5zIHNvbWV0aW1lcyBuZWVkIHRvIHJlYWRhaGVhZCBieSBhcyBtYW55IGFzIGEg ZmV3CisgKiBkb3plbiBhbWdldGJhdGNoIGJhdGNoZXMgaW4gb3JkZXIgdG8gbWFpbnRhaW4gYW4g b3B0aW1hbCBJL08gcHJlZmV0Y2gKKyAqIGRpc3RhbmNlIChkaXN0YW5jZSBmb3IgcmVhZGluZyB0 YWJsZSBibG9ja3MvZmV0Y2hpbmcgdGFibGUgdHVwbGVzKS4KKyAqLwordHlwZWRlZiBzdHJ1Y3Qg QmF0Y2hRdWV1ZQoreworCS8qIGFtZ2V0YmF0Y2ggY2FuIHNhZmVseSBkcm9wIHBpbnMgb24gcmV0 dXJuZWQgYmF0Y2gncyBpbmRleCBwYWdlPyAqLworCWJvb2wJCWRyb3BQaW47CisKKwkvKgorCSAq IERpZCB3ZSByZWFkIHRoZSBmaW5hbCBiYXRjaCBpbiB0aGlzIHNjYW4gZGlyZWN0aW9uPyBUaGUg YmF0Y2hlcyBtYXkgYmUKKwkgKiBsb2FkZWQgZnJvbSBtdWx0aXBsZSBwbGFjZXMsIGFuZCB3ZSBu ZWVkIHRvIHJlbWVtYmVyIHdoZW4gd2UgZmFpbCB0bworCSAqIGxvYWQgdGhlIG5leHQgYmF0Y2gg aW4gYSBnaXZlbiBzY2FuICh3aGljaCBtZWFucyAibm8gbW9yZSBiYXRjaGVzIikuCisJICogYW1n ZXRiYXRjaCBtYXkgcmVzdGFydCB0aGUgc2NhbiBvbiB0aGUgZ2V0IGNhbGwsIHNvIHdlIG5lZWQg dG8gcmVtZW1iZXIKKwkgKiBpdCdzIG92ZXIuCisJICovCisJYm9vbAkJZmluaXNoZWQ7CisKKwkv KiBDdXJyZW50IHNjYW4gZGlyZWN0aW9uLCBmb3IgdGhlIGN1cnJlbnRseSBsb2FkZWQgYmF0Y2hl cyAqLworCVNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uOworCisJLyogY3VycmVudCBwb3NpdGlvbnMg aW4gYmF0Y2hlc1tdIGZvciBzY2FuICovCisJQmF0Y2hRdWV1ZUl0ZW1Qb3MgcmVhZFBvczsJLyog cmVhZCBwb3NpdGlvbiAqLworCUJhdGNoUXVldWVJdGVtUG9zIG1hcmtQb3M7CS8qIG1hcmsvcmVz dG9yZSBwb3NpdGlvbiAqLworCisJQmF0Y2hJbmRleFNjYW4gbWFya0JhdGNoOworCisJLyoKKwkg KiBBcnJheSBvZiBiYXRjaGVzIHJldHVybmVkIGJ5IHRoZSBBTS4gVGhlIGFycmF5IGhhcyBhIGNh cGFjaXR5IChidXQgY2FuCisJICogYmUgcmVzaXplZCBpZiBuZWVkZWQpLiBUaGUgaGVhZEJhdGNo IGlzIGFuIGluZGV4IG9mIHRoZSBiYXRjaCB3ZSdyZQorCSAqIGN1cnJlbnRseSByZWFkaW5nIGZy b20gKHRoaXMgbmVlZHMgdG8gYmUgdHJhbnNsYXRlZCBieSBtb2R1bG8KKwkgKiBJTkRFWF9TQ0FO X01BWF9CQVRDSEVTIGludG8gaW5kZXggaW4gdGhlIGJhdGNoZXMgYXJyYXkpLgorCSAqLworCWlu dAkJCWhlYWRCYXRjaDsJCS8qIGhlYWQgYmF0Y2ggc2xvdCAqLworCWludAkJCW5leHRCYXRjaDsJ CS8qIG5leHQgZW1wdHkgYmF0Y2ggc2xvdCAqLworCisJLyogQXJyYXkgb2YgcG9pbnRlcnMgdG8g Y2FjaGVkIHJlY3ljbGFibGUgYmF0Y2hlcyAqLworCUJhdGNoSW5kZXhTY2FuIGNhY2hlW0lOREVY X1NDQU5fQ0FDSEVfQkFUQ0hFU107CisKKwkvKiBBcnJheSBvZiBwb2ludGVycyB0byBxdWV1ZWQg YmF0Y2hlcyAqLworCUJhdGNoSW5kZXhTY2FuIGJhdGNoZXNbSU5ERVhfU0NBTl9NQVhfQkFUQ0hF U107CisKK30gQmF0Y2hRdWV1ZTsKKwogc3RydWN0IEluZGV4U2Nhbkluc3RydW1lbnRhdGlvbjsK IAogLyoKQEAgLTE0MCw2ICszMjUsOCBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleFNjYW5EZXNjRGF0 YQogCXN0cnVjdCBTbmFwc2hvdERhdGEgKnhzX3NuYXBzaG90OwkvKiBzbmFwc2hvdCB0byBzZWUg Ki8KIAlpbnQJCQludW1iZXJPZktleXM7CS8qIG51bWJlciBvZiBpbmRleCBxdWFsaWZpZXIgY29u ZGl0aW9ucyAqLwogCWludAkJCW51bWJlck9mT3JkZXJCeXM7CS8qIG51bWJlciBvZiBvcmRlcmlu ZyBvcGVyYXRvcnMgKi8KKwlCYXRjaFF1ZXVlICpiYXRjaHF1ZXVlOwkJLyogYW1nZXRiYXRjaCBy ZWxhdGVkIHN0YXRlICovCisKIAlzdHJ1Y3QgU2NhbktleURhdGEgKmtleURhdGE7CS8qIGFycmF5 IG9mIGluZGV4IHF1YWxpZmllciBkZXNjcmlwdG9ycyAqLwogCXN0cnVjdCBTY2FuS2V5RGF0YSAq b3JkZXJCeURhdGE7CS8qIGFycmF5IG9mIG9yZGVyaW5nIG9wIGRlc2NyaXB0b3JzICovCiAJYm9v bAkJeHNfd2FudF9pdHVwOwkvKiBjYWxsZXIgcmVxdWVzdHMgaW5kZXggdHVwbGVzICovCkBAIC0y MTYsNCArNDAzLDYxIEBAIHR5cGVkZWYgc3RydWN0IFN5c1NjYW5EZXNjRGF0YQogCXN0cnVjdCBU dXBsZVRhYmxlU2xvdCAqc2xvdDsKIH0JCQlTeXNTY2FuRGVzY0RhdGE7CiAKKy8qCisgKiBDaGVj ayB0aGF0IGEgcG9zaXRpb24gKGJhdGNoLGl0ZW0pIGlzIHZhbGlkIHdpdGggcmVzcGVjdCB0byB0 aGUgYmF0Y2hlcyB3ZQorICogaGF2ZSBjdXJyZW50bHkgbG9hZGVkLgorICovCitzdGF0aWMgaW5s aW5lIHZvaWQKK2JhdGNoX2Fzc2VydF9wb3NfdmFsaWQoSW5kZXhTY2FuRGVzY0RhdGEgKnNjYW4s IEJhdGNoUXVldWVJdGVtUG9zICpwb3MpCit7CisjaWZkZWYgVVNFX0FTU0VSVF9DSEVDS0lORwor CUJhdGNoUXVldWUgKmJhdGNocXVldWUgPSBzY2FuLT5iYXRjaHF1ZXVlOworCisJLyogbWFrZSBz dXJlIHRoZSBwb3NpdGlvbiBpcyB2YWxpZCBmb3IgY3VycmVudGx5IGxvYWRlZCBiYXRjaGVzICov CisJQXNzZXJ0KHBvcy0+YmF0Y2ggPj0gYmF0Y2hxdWV1ZS0+aGVhZEJhdGNoKTsKKwlBc3NlcnQo cG9zLT5iYXRjaCA8IGJhdGNocXVldWUtPm5leHRCYXRjaCk7CisjZW5kaWYKK30KKworLyoKKyAq IENoZWNrIGEgc2luZ2xlIGJhdGNoIGlzIHZhbGlkLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQK K2JhdGNoX2Fzc2VydF9iYXRjaF92YWxpZChJbmRleFNjYW5EZXNjRGF0YSAqc2NhbiwgQmF0Y2hJ bmRleFNjYW4gYmF0Y2gpCit7CisJLyogYmF0Y2ggbXVzdCBoYXZlIG9uZSBvciBtb3JlIG1hdGNo aW5nIGl0ZW1zIHJldHVybmVkIGJ5IGluZGV4IEFNICovCisJQXNzZXJ0KGJhdGNoLT5maXJzdEl0 ZW0gPj0gMCAmJiBiYXRjaC0+Zmlyc3RJdGVtIDw9IGJhdGNoLT5sYXN0SXRlbSk7CisJQXNzZXJ0 KGJhdGNoLT5pdGVtcyAhPSBOVUxMKTsKKworCS8qCisJICogVGhlIG51bWJlciBvZiBraWxsZWQg aXRlbXMgbXVzdCBiZSB2YWxpZCwgYW5kIHRoZXJlIG11c3QgYmUgYW4gYXJyYXkgb2YKKwkgKiBp bmRleGVzIGlmIHRoZXJlIGFyZSBpdGVtcy4KKwkgKi8KKwlBc3NlcnQoYmF0Y2gtPm51bUtpbGxl ZCA+PSAwKTsKKwlBc3NlcnQoIShiYXRjaC0+bnVtS2lsbGVkID4gMCAmJiBiYXRjaC0+a2lsbGVk SXRlbXMgPT0gTlVMTCkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2JhdGNoX2Fzc2VydF9i YXRjaGVzX3ZhbGlkKEluZGV4U2NhbkRlc2NEYXRhICAqc2NhbikKK3sKKyNpZmRlZiBVU0VfQVNT RVJUX0NIRUNLSU5HCisJQmF0Y2hRdWV1ZSAqYmF0Y2hxdWV1ZSA9IHNjYW4tPmJhdGNocXVldWU7 CisKKwkvKiB3ZSBzaG91bGQgaGF2ZSBiYXRjaGVzIGluaXRpYWxpemVkICovCisJQXNzZXJ0KGJh dGNocXVldWUgIT0gTlVMTCk7CisKKwkvKiBUaGUgaGVhZC9uZXh0IGluZGV4ZXMgc2hvdWxkIGRl ZmluZSBhIHZhbGlkIHJhbmdlICovCisJQXNzZXJ0KGJhdGNocXVldWUtPmhlYWRCYXRjaCA+PSAw ICYmCisJCSAgIGJhdGNocXVldWUtPmhlYWRCYXRjaCA8PSBiYXRjaHF1ZXVlLT5uZXh0QmF0Y2gp OworCisJLyogQ2hlY2sgYWxsIGN1cnJlbnQgYmF0Y2hlcyAqLworCWZvciAoaW50IGkgPSBiYXRj aHF1ZXVlLT5oZWFkQmF0Y2g7IGkgPCBiYXRjaHF1ZXVlLT5uZXh0QmF0Y2g7IGkrKykKKwl7CisJ CUJhdGNoSW5kZXhTY2FuIGJhdGNoID0gSU5ERVhfU0NBTl9CQVRDSChzY2FuLCBpKTsKKworCQli YXRjaF9hc3NlcnRfYmF0Y2hfdmFsaWQoc2NhbiwgYmF0Y2gpOworCX0KKyNlbmRpZgorfQorCiAj ZW5kaWYJCQkJCQkJLyogUkVMU0NBTl9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nl c3MvdGFibGVhbS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaAppbmRleCAyZmE3OTBi NmIuLjNlOThkODUzNyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaAor KysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oCkBAIC00MjAsNyArNDIwLDggQEAgdHlw ZWRlZiBzdHJ1Y3QgVGFibGVBbVJvdXRpbmUKIAkgKgogCSAqIFR1cGxlcyBmb3IgYW4gaW5kZXgg c2NhbiBjYW4gdGhlbiBiZSBmZXRjaGVkIHZpYSBpbmRleF9mZXRjaF90dXBsZS4KIAkgKi8KLQlz dHJ1Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YSAqKCppbmRleF9mZXRjaF9iZWdpbikgKFJlbGF0aW9u IHJlbCk7CisJc3RydWN0IEluZGV4RmV0Y2hUYWJsZURhdGEgKigqaW5kZXhfZmV0Y2hfYmVnaW4p IChSZWxhdGlvbiByZWwsCisJCQkJCQkJCQkJCQkJICBUdXBsZVRhYmxlU2xvdCAqaW9zX3RhYmxl c2xvdCk7CiAKIAkvKgogCSAqIFJlc2V0IGluZGV4IGZldGNoLiBUeXBpY2FsbHkgdGhpcyB3aWxs IHJlbGVhc2UgY3Jvc3MgaW5kZXggZmV0Y2gKQEAgLTQzMywxMSArNDM0LDM0IEBAIHR5cGVkZWYg c3RydWN0IFRhYmxlQW1Sb3V0aW5lCiAJICovCiAJdm9pZAkJKCppbmRleF9mZXRjaF9lbmQpIChz dHJ1Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YSAqZGF0YSk7CiAKKwkvKgorCSAqIEZldGNoIHRoZSBu ZXh0IHR1cGxlIGZyb20gYW4gaW5kZXggc2NhbiBpbnRvIHNsb3QsIHNjYW5uaW5nIGluIHRoZQor CSAqIHNwZWNpZmllZCBkaXJlY3Rpb24sIGFuZCByZXR1cm4gdHJ1ZSBpZiBhIHR1cGxlIHdhcyBm b3VuZCwgZmFsc2UKKwkgKiBvdGhlcndpc2UuCisJICoKKwkgKiBUaGlzIGNhbGxiYWNrIGFsbG93 cyB0aGUgdGFibGUgQU0gdG8gZGlyZWN0bHkgbWFuYWdlIHRoZSBzY2FuIHByb2Nlc3MsCisJICog aW5jbHVkaW5nIGludGVyZmFjaW5nIHdpdGggdGhlIGluZGV4IEFNLiBUaGUgY2FsbGVyIHNpbXBs eSBzcGVjaWZpZXMKKwkgKiB0aGUgZGlyZWN0aW9uIG9mIHRoZSBzY2FuOyB0aGUgdGFibGUgQU0g dGFrZXMgY2FyZSBvZiByZXRyaWV2aW5nIFRJRHMKKwkgKiBmcm9tIHRoZSBpbmRleCwgcGVyZm9y bWluZyB2aXNpYmlsaXR5IGNoZWNrcywgYW5kIHJldHVybmluZyB0dXBsZXMgaW4KKwkgKiB0aGUg c2xvdC4gVGhpcyBlbmFibGVzIGltcG9ydGFudCBvcHRpbWl6YXRpb25zIChzdWNoIGFzIHRhYmxl IGJsb2NrIEkvTworCSAqIHByZWZldGNoaW5nKSB0aGF0IHJlcXVpcmUgdGhhdCB0aGUgdGFibGUg QU0gZGlyZWN0bHkgbWFuYWdlcyB0aGUKKwkgKiBwcm9ncmVzcyBvZiB0aGUgaW5kZXggc2Nhbi4K KwkgKgorCSAqIFRhYmxlIEFNcyB0aGF0IGltcGxlbWVudCB0aGlzIGFyZSBleHBlY3RlZCB0byB1 c2UgYmF0Y2hfZ2V0bmV4dCAoYW5kCisJICogb3RoZXIgYmF0Y2ggdXRpbGl0eSByb3V0aW5lcykg dG8gcGVyZm9ybSBhbWdldGJhdGNoIGluZGV4IHNjYW5zLgorCSAqLworCWJvb2wJCSgqaW5kZXhf Z2V0bmV4dF9zbG90KSAoSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJCQkJICAgU2NhbkRpcmVj dGlvbiBkaXJlY3Rpb24sCisJCQkJCQkJCQkgICBUdXBsZVRhYmxlU2xvdCAqc2xvdCk7CisKIAkv KgogCSAqIEZldGNoIHR1cGxlIGF0IGB0aWRgIGludG8gYHNsb3RgLCBhZnRlciBkb2luZyBhIHZp c2liaWxpdHkgdGVzdAogCSAqIGFjY29yZGluZyB0byBgc25hcHNob3RgLiBJZiBhIHR1cGxlIHdh cyBmb3VuZCBhbmQgcGFzc2VkIHRoZSB2aXNpYmlsaXR5CiAJICogdGVzdCwgcmV0dXJuIHRydWUs IGZhbHNlIG90aGVyd2lzZS4KIAkgKgorCSAqIFRoaXMgaXMgYSBsb3dlci1sZXZlbCBjYWxsYmFj ayB0aGF0IHRha2VzIGEgVElEIGZyb20gdGhlIGNhbGxlci4KKwkgKiBDYWxsZXJzIHNob3VsZCBm YXZvciB0aGUgaW5kZXhfZ2V0bmV4dF9zbG90IGNhbGxiYWNrIHdoZW5ldmVyIHBvc3NpYmxlLgor CSAqCiAJICogTm90ZSB0aGF0IEFNcyB0aGF0IGRvIG5vdCBuZWNlc3NhcmlseSB1cGRhdGUgaW5k ZXhlcyB3aGVuIGluZGV4ZWQKIAkgKiBjb2x1bW5zIGRvIG5vdCBjaGFuZ2UsIG5lZWQgdG8gcmV0 dXJuIHRoZSBjdXJyZW50L2NvcnJlY3QgdmVyc2lvbiBvZgogCSAqIHRoZSB0dXBsZSB0aGF0IGlz IHZpc2libGUgdG8gdGhlIHNuYXBzaG90LCBldmVuIGlmIHRoZSB0aWQgcG9pbnRzIHRvIGFuCkBA IC00NTksNyArNDgzLDYgQEAgdHlwZWRlZiBzdHJ1Y3QgVGFibGVBbVJvdXRpbmUKIAkJCQkJCQkJ CSAgVHVwbGVUYWJsZVNsb3QgKnNsb3QsCiAJCQkJCQkJCQkgIGJvb2wgKmNhbGxfYWdhaW4sIGJv b2wgKmFsbF9kZWFkKTsKIAotCiAJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAJICogQ2FsbGJhY2tzIGZv ciBub24tbW9kaWZ5aW5nIG9wZXJhdGlvbnMgb24gaW5kaXZpZHVhbCB0dXBsZXMKIAkgKiAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KQEAgLTExNTksMTQgKzExODIsMTUgQEAgdGFibGVfcGFyYWxsZWxzY2FuX3Jl aW5pdGlhbGl6ZShSZWxhdGlvbiByZWwsIFBhcmFsbGVsVGFibGVTY2FuRGVzYyBwc2NhbikKIAog LyoKICAqIFByZXBhcmUgdG8gZmV0Y2ggdHVwbGVzIGZyb20gdGhlIHJlbGF0aW9uLCBhcyBuZWVk ZWQgd2hlbiBmZXRjaGluZyB0dXBsZXMKLSAqIGZvciBhbiBpbmRleCBzY2FuLgorICogZm9yIGFu IGluZGV4IHNjYW4uICBJbmRleC1vbmx5IHNjYW4gY2FsbGVycyBtdXN0IHByb3ZpZGUgaW9zX3Rh Ymxlc2xvdCwKKyAqIHdoaWNoIGlzIGEgc2xvdCBmb3IgaG9sZGluZyB0dXBsZXMgZmV0Y2hlZCBm cm9tIHRoZSB0YWJsZS4KICAqCiAgKiBUdXBsZXMgZm9yIGFuIGluZGV4IHNjYW4gY2FuIHRoZW4g YmUgZmV0Y2hlZCB2aWEgdGFibGVfaW5kZXhfZmV0Y2hfdHVwbGUoKS4KICAqLwogc3RhdGljIGlu bGluZSBJbmRleEZldGNoVGFibGVEYXRhICoKLXRhYmxlX2luZGV4X2ZldGNoX2JlZ2luKFJlbGF0 aW9uIHJlbCkKK3RhYmxlX2luZGV4X2ZldGNoX2JlZ2luKFJlbGF0aW9uIHJlbCwgVHVwbGVUYWJs ZVNsb3QgKmlvc190YWJsZXNsb3QpCiB7Ci0JcmV0dXJuIHJlbC0+cmRfdGFibGVhbS0+aW5kZXhf ZmV0Y2hfYmVnaW4ocmVsKTsKKwlyZXR1cm4gcmVsLT5yZF90YWJsZWFtLT5pbmRleF9mZXRjaF9i ZWdpbihyZWwsIGlvc190YWJsZXNsb3QpOwogfQogCiAvKgpAQCAtMTE4OCw2ICsxMjEyLDI2IEBA IHRhYmxlX2luZGV4X2ZldGNoX2VuZChzdHJ1Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YSAqc2NhbikK IAlzY2FuLT5yZWwtPnJkX3RhYmxlYW0tPmluZGV4X2ZldGNoX2VuZChzY2FuKTsKIH0KIAorLyoK KyAqIEZldGNoIHRoZSBuZXh0IHR1cGxlIGZyb20gYW4gaW5kZXggc2NhbiBpbnRvIGBzbG90YCwg c2Nhbm5pbmcgaW4gdGhlCisgKiBzcGVjaWZpZWQgZGlyZWN0aW9uLiBSZXR1cm5zIHRydWUgaWYg YSB0dXBsZSB3YXMgZm91bmQsIGZhbHNlIG90aGVyd2lzZS4KKyAqCisgKiBUaGUgaW5kZXggc2Nh biBzaG91bGQgaGF2ZSBiZWVuIHN0YXJ0ZWQgdmlhIHRhYmxlX2luZGV4X2ZldGNoX2JlZ2luKCku CisgKiBDYWxsZXJzIG11c3QgY2hlY2sgc2Nhbi0+eHNfcmVjaGVjayBhbmQgcmVjaGVjayBzY2Fu IGtleXMgaWYgcmVxdWlyZWQuCisgKgorICogSW5kZXgtb25seSBzY2FuIGNhbGxlcnMgbXVzdCBw YXNzIGFuIGluZGV4IHNjYW4gZGVzY3JpcHRvciB0aGF0IHdhcyBjcmVhdGVkCisgKiBieSBwYXNz aW5nIGEgdmFsaWQgaW9zX3RhYmxlc2xvdCB0byBpbmRleF9iZWdpbnNjYW4uICBUaGlzIGlvc190 YWJsZXNsb3QKKyAqIHdpbGwgYmUgcGFzc2VkIGRvd24gdG8gdGFibGVfaW5kZXhfZmV0Y2hfYmVn aW4gYnkgaW5kZXhfYmVnaW5zY2FuLgorICovCitzdGF0aWMgaW5saW5lIGJvb2wKK3RhYmxlX2lu ZGV4X2dldG5leHRfc2xvdChJbmRleFNjYW5EZXNjIGlkeHNjYW4sIFNjYW5EaXJlY3Rpb24gZGly ZWN0aW9uLAorCQkJCQkJIFR1cGxlVGFibGVTbG90ICpzbG90KQoreworCXN0cnVjdCBJbmRleEZl dGNoVGFibGVEYXRhICpzY2FuID0gaWR4c2Nhbi0+eHNfaGVhcGZldGNoOworCisJcmV0dXJuIHNj YW4tPnJlbC0+cmRfdGFibGVhbS0+aW5kZXhfZ2V0bmV4dF9zbG90KGlkeHNjYW4sIGRpcmVjdGlv biwgc2xvdCk7Cit9CisKIC8qCiAgKiBGZXRjaGVzLCBhcyBwYXJ0IG9mIGFuIGluZGV4IHNjYW4s IHR1cGxlIGF0IGB0aWRgIGludG8gYHNsb3RgLCBhZnRlciBkb2luZwogICogYSB2aXNpYmlsaXR5 IHRlc3QgYWNjb3JkaW5nIHRvIGBzbmFwc2hvdGAuIElmIGEgdHVwbGUgd2FzIGZvdW5kIGFuZCBw YXNzZWQKQEAgLTEyMTEsNiArMTI1NSw5IEBAIHRhYmxlX2luZGV4X2ZldGNoX2VuZChzdHJ1Y3Qg SW5kZXhGZXRjaFRhYmxlRGF0YSAqc2NhbikKICAqIGVudHJ5IChsaWtlIGhlYXAncyBIT1QpLiBX aGVyZWFzIHRhYmxlX3R1cGxlX2ZldGNoX3Jvd192ZXJzaW9uKCkgb25seQogICogZXZhbHVhdGVz IHRoZSB0dXBsZSBleGFjdGx5IGF0IGB0aWRgLiBPdXRzaWRlIG9mIGluZGV4IGVudHJ5IC0+dGFi bGUgdHVwbGUKICAqIGxvb2t1cHMsIHRhYmxlX3R1cGxlX2ZldGNoX3Jvd192ZXJzaW9uKCkgaXMg d2hhdCdzIHVzdWFsbHkgbmVlZGVkLgorICoKKyAqIFRoaXMgaXMgYSBsb3dlci1sZXZlbCBpbnRl cmZhY2UgdGhhdCB0YWtlcyBhIFRJRCBmcm9tIHRoZSBjYWxsZXIuICBDYWxsZXJzCisgKiBzaG91 bGQgZmF2b3IgdGhlIHRhYmxlX2luZGV4X2dldG5leHRfc2xvdCBpbnRlcmZhY2Ugd2hlbmV2ZXIg cG9zc2libGUuCiAgKi8KIHN0YXRpYyBpbmxpbmUgYm9vbAogdGFibGVfaW5kZXhfZmV0Y2hfdHVw bGUoc3RydWN0IEluZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4sCmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9ub2Rlcy9leGVjbm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCmlu ZGV4IDY0ZmY2OTk2NC4uYjYwNjRiYjNkIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9l eGVjbm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaApAQCAtMTc1MSw3 ICsxNzUxLDYgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuU3RhdGUKICAqCQlJbnN0cnVtZW50 CQkgICBsb2NhbCBpbmRleCBzY2FuIGluc3RydW1lbnRhdGlvbgogICoJCVNoYXJlZEluZm8JCSAg IHBhcmFsbGVsIHdvcmtlciBpbnN0cnVtZW50YXRpb24gKG5vIGxlYWRlciBlbnRyeSkKICAqCQlU YWJsZVNsb3QJCSAgIHNsb3QgZm9yIGhvbGRpbmcgdHVwbGVzIGZldGNoZWQgZnJvbSB0aGUgdGFi bGUKLSAqCQlWTUJ1ZmZlcgkJICAgYnVmZmVyIGluIHVzZSBmb3IgdmlzaWJpbGl0eSBtYXAgdGVz dGluZywgaWYgYW55CiAgKgkJUHNjYW5MZW4JCSAgIHNpemUgb2YgcGFyYWxsZWwgaW5kZXgtb25s eSBzY2FuIGRlc2NyaXB0b3IKICAqCQlOYW1lQ1N0cmluZ0F0dE51bXMgYXR0bnVtcyBvZiBuYW1l IHR5cGVkIGNvbHVtbnMgdG8gcGFkIHRvIE5BTUVEQVRBTEVOCiAgKgkJTmFtZUNTdHJpbmdDb3Vu dCAgIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgTmFtZUNTdHJpbmdBdHROdW1zIGFycmF5CkBA IC0xNzc0LDcgKzE3NzMsNiBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleE9ubHlTY2FuU3RhdGUKIAlJ bmRleFNjYW5JbnN0cnVtZW50YXRpb24gaW9zc19JbnN0cnVtZW50OwogCVNoYXJlZEluZGV4U2Nh bkluc3RydW1lbnRhdGlvbiAqaW9zc19TaGFyZWRJbmZvOwogCVR1cGxlVGFibGVTbG90ICppb3Nz X1RhYmxlU2xvdDsKLQlCdWZmZXIJCWlvc3NfVk1CdWZmZXI7CiAJU2l6ZQkJaW9zc19Qc2Nhbkxl bjsKIAlBdHRyTnVtYmVyICppb3NzX05hbWVDU3RyaW5nQXR0TnVtczsKIAlpbnQJCQlpb3NzX05h bWVDU3RyaW5nQ291bnQ7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMu aCBiL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCmluZGV4IDQ2YTg2NTU2Mi4uMTE4MDVi ZmY5IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaAorKysgYi9zcmMv aW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaApAQCAtMTM0NCw3ICsxMzQ0LDcgQEAgdHlwZWRlZiBz dHJ1Y3QgSW5kZXhPcHRJbmZvCiAJLyogZG9lcyBBTSBoYXZlIGFtZ2V0Yml0bWFwIGludGVyZmFj ZT8gKi8KIAlib29sCQlhbWhhc2dldGJpdG1hcDsKIAlib29sCQlhbWNhbnBhcmFsbGVsOwotCS8q IGRvZXMgQU0gaGF2ZSBhbW1hcmtwb3MgaW50ZXJmYWNlPyAqLworCS8qIGlzIEFNIHByZXBhcmVk IGZvciB1cyB0byByZXN0b3JlIGEgbWFyaz8gKi8KIAlib29sCQlhbWNhbm1hcmtwb3M7CiAJLyog QU0ncyBjb3N0IGVzdGltYXRvciAqLwogCS8qIFJhdGhlciB0aGFuIGluY2x1ZGUgYW1hcGkuaCBo ZXJlLCB3ZSBkZWNsYXJlIGFtY29zdGVzdGltYXRlIGxpa2UgdGhpcyAqLwpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbi5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4v YnJpbi5jCmluZGV4IDI2Y2I3NTA1OC4uODgwOTIxOTYxIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9hY2Nlc3MvYnJpbi9icmluLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbi5j CkBAIC0yOTQsMTAgKzI5NCwxMSBAQCBicmluaGFuZGxlcihQR19GVU5DVElPTl9BUkdTKQogCWFt cm91dGluZS0+YW1iZWdpbnNjYW4gPSBicmluYmVnaW5zY2FuOwogCWFtcm91dGluZS0+YW1yZXNj YW4gPSBicmlucmVzY2FuOwogCWFtcm91dGluZS0+YW1nZXR0dXBsZSA9IE5VTEw7CisJYW1yb3V0 aW5lLT5hbWdldGJhdGNoID0gTlVMTDsKKwlhbXJvdXRpbmUtPmFtZnJlZWJhdGNoID0gTlVMTDsK IAlhbXJvdXRpbmUtPmFtZ2V0Yml0bWFwID0gYnJpbmdldGJpdG1hcDsKIAlhbXJvdXRpbmUtPmFt ZW5kc2NhbiA9IGJyaW5lbmRzY2FuOwotCWFtcm91dGluZS0+YW1tYXJrcG9zID0gTlVMTDsKLQlh bXJvdXRpbmUtPmFtcmVzdHJwb3MgPSBOVUxMOworCWFtcm91dGluZS0+YW1wb3NyZXNldCA9IE5V TEw7CiAJYW1yb3V0aW5lLT5hbWVzdGltYXRlcGFyYWxsZWxzY2FuID0gTlVMTDsKIAlhbXJvdXRp bmUtPmFtaW5pdHBhcmFsbGVsc2NhbiA9IE5VTEw7CiAJYW1yb3V0aW5lLT5hbXBhcmFsbGVscmVz Y2FuID0gTlVMTDsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2luZ2V0LmMg Yi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbmdldC5jCmluZGV4IGIzZTJlOWQ1Zi4uYjhmODMx YTMxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbmdldC5jCisrKyBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2luZ2V0LmMKQEAgLTE5NTMsOSArMTk1Myw5IEBAIGdpbmdl dGJpdG1hcChJbmRleFNjYW5EZXNjIHNjYW4sIFRJREJpdG1hcCAqdGJtKQogCSAqIGludG8gdGhl IG1haW4gaW5kZXgsIGFuZCBzbyB3ZSBtaWdodCB2aXNpdCBpdCBhIHNlY29uZCB0aW1lIGR1cmlu ZyB0aGUKIAkgKiBtYWluIHNjYW4uICBUaGlzIGlzIG9rYXkgYmVjYXVzZSB3ZSdsbCBqdXN0IHJl LXNldCB0aGUgc2FtZSBiaXQgaW4gdGhlCiAJICogYml0bWFwLiAgKFRoZSBwb3NzaWJpbGl0eSBv ZiBkdXBsaWNhdGUgdmlzaXRzIGlzIGEgbWFqb3IgcmVhc29uIHdoeSBHSU4KLQkgKiBjYW4ndCBz dXBwb3J0IHRoZSBhbWdldHR1cGxlIEFQSSwgaG93ZXZlci4pIE5vdGUgdGhhdCBpdCB3b3VsZCBu b3QgZG8KLQkgKiB0byBzY2FuIHRoZSBtYWluIGluZGV4IGJlZm9yZSB0aGUgcGVuZGluZyBsaXN0 LCBzaW5jZSBjb25jdXJyZW50Ci0JICogY2xlYW51cCBjb3VsZCB0aGVuIG1ha2UgdXMgbWlzcyBl bnRyaWVzIGVudGlyZWx5LgorCSAqIGNhbid0IHN1cHBvcnQgZWl0aGVyIHRoZSBhbWdldHR1cGxl IG9yIGFtZ2V0YmF0Y2ggQVBJLikgTm90ZSB0aGF0IGl0CisJICogd291bGQgbm90IGRvIHRvIHNj YW4gdGhlIG1haW4gaW5kZXggYmVmb3JlIHRoZSBwZW5kaW5nIGxpc3QsIHNpbmNlCisJICogY29u Y3VycmVudCBjbGVhbnVwIGNvdWxkIHRoZW4gbWFrZSB1cyBtaXNzIGVudHJpZXMgZW50aXJlbHku CiAJICovCiAJc2NhblBlbmRpbmdJbnNlcnQoc2NhbiwgdGJtLCAmbnRpZHMpOwogCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbnV0aWwuYyBiL3NyYy9iYWNrZW5kL2FjY2Vz cy9naW4vZ2ludXRpbC5jCmluZGV4IDYwNWY4MGFhZC4uMWQyMzMwODdlIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbnV0aWwuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3Mv Z2luL2dpbnV0aWwuYwpAQCAtODIsMTAgKzgyLDExIEBAIGdpbmhhbmRsZXIoUEdfRlVOQ1RJT05f QVJHUykKIAlhbXJvdXRpbmUtPmFtYmVnaW5zY2FuID0gZ2luYmVnaW5zY2FuOwogCWFtcm91dGlu ZS0+YW1yZXNjYW4gPSBnaW5yZXNjYW47CiAJYW1yb3V0aW5lLT5hbWdldHR1cGxlID0gTlVMTDsK KwlhbXJvdXRpbmUtPmFtZ2V0YmF0Y2ggPSBOVUxMOworCWFtcm91dGluZS0+YW1mcmVlYmF0Y2gg PSBOVUxMOwogCWFtcm91dGluZS0+YW1nZXRiaXRtYXAgPSBnaW5nZXRiaXRtYXA7CiAJYW1yb3V0 aW5lLT5hbWVuZHNjYW4gPSBnaW5lbmRzY2FuOwotCWFtcm91dGluZS0+YW1tYXJrcG9zID0gTlVM TDsKLQlhbXJvdXRpbmUtPmFtcmVzdHJwb3MgPSBOVUxMOworCWFtcm91dGluZS0+YW1wb3NyZXNl dCA9IE5VTEw7CiAJYW1yb3V0aW5lLT5hbWVzdGltYXRlcGFyYWxsZWxzY2FuID0gTlVMTDsKIAlh bXJvdXRpbmUtPmFtaW5pdHBhcmFsbGVsc2NhbiA9IE5VTEw7CiAJYW1yb3V0aW5lLT5hbXBhcmFs bGVscmVzY2FuID0gTlVMTDsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dp c3QuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3QuYwppbmRleCBjMjZkODUzOGYuLjBk MjgyYzY5YSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdC5jCisrKyBi L3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3QuYwpAQCAtMTAzLDEwICsxMDMsMTEgQEAgZ2lz dGhhbmRsZXIoUEdfRlVOQ1RJT05fQVJHUykKIAlhbXJvdXRpbmUtPmFtYmVnaW5zY2FuID0gZ2lz dGJlZ2luc2NhbjsKIAlhbXJvdXRpbmUtPmFtcmVzY2FuID0gZ2lzdHJlc2NhbjsKIAlhbXJvdXRp bmUtPmFtZ2V0dHVwbGUgPSBnaXN0Z2V0dHVwbGU7CisJYW1yb3V0aW5lLT5hbWdldGJhdGNoID0g TlVMTDsKKwlhbXJvdXRpbmUtPmFtZnJlZWJhdGNoID0gTlVMTDsKIAlhbXJvdXRpbmUtPmFtZ2V0 Yml0bWFwID0gZ2lzdGdldGJpdG1hcDsKIAlhbXJvdXRpbmUtPmFtZW5kc2NhbiA9IGdpc3RlbmRz Y2FuOwotCWFtcm91dGluZS0+YW1tYXJrcG9zID0gTlVMTDsKLQlhbXJvdXRpbmUtPmFtcmVzdHJw b3MgPSBOVUxMOworCWFtcm91dGluZS0+YW1wb3NyZXNldCA9IE5VTEw7CiAJYW1yb3V0aW5lLT5h bWVzdGltYXRlcGFyYWxsZWxzY2FuID0gTlVMTDsKIAlhbXJvdXRpbmUtPmFtaW5pdHBhcmFsbGVs c2NhbiA9IE5VTEw7CiAJYW1yb3V0aW5lLT5hbXBhcmFsbGVscmVzY2FuID0gTlVMTDsKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2guYyBiL3NyYy9iYWNrZW5kL2FjY2Vz cy9oYXNoL2hhc2guYwppbmRleCBlMzg4MjUyYWYuLjcyODlkZjU3NCAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNo L2hhc2guYwpAQCAtMTAyLDEwICsxMDIsMTEgQEAgaGFzaGhhbmRsZXIoUEdfRlVOQ1RJT05fQVJH UykKIAlhbXJvdXRpbmUtPmFtYmVnaW5zY2FuID0gaGFzaGJlZ2luc2NhbjsKIAlhbXJvdXRpbmUt PmFtcmVzY2FuID0gaGFzaHJlc2NhbjsKIAlhbXJvdXRpbmUtPmFtZ2V0dHVwbGUgPSBoYXNoZ2V0 dHVwbGU7CisJYW1yb3V0aW5lLT5hbWdldGJhdGNoID0gTlVMTDsKKwlhbXJvdXRpbmUtPmFtZnJl ZWJhdGNoID0gTlVMTDsKIAlhbXJvdXRpbmUtPmFtZ2V0Yml0bWFwID0gaGFzaGdldGJpdG1hcDsK IAlhbXJvdXRpbmUtPmFtZW5kc2NhbiA9IGhhc2hlbmRzY2FuOwotCWFtcm91dGluZS0+YW1tYXJr cG9zID0gTlVMTDsKLQlhbXJvdXRpbmUtPmFtcmVzdHJwb3MgPSBOVUxMOworCWFtcm91dGluZS0+ YW1wb3NyZXNldCA9IE5VTEw7CiAJYW1yb3V0aW5lLT5hbWVzdGltYXRlcGFyYWxsZWxzY2FuID0g TlVMTDsKIAlhbXJvdXRpbmUtPmFtaW5pdHBhcmFsbGVsc2NhbiA9IE5VTEw7CiAJYW1yb3V0aW5l LT5hbXBhcmFsbGVscmVzY2FuID0gTlVMTDsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vz cy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1f aGFuZGxlci5jCmluZGV4IGRkNGZlNmJmNi4uYzEyZGI0OGE2IDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vz cy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKQEAgLTcyLDYgKzcyLDMzIEBAIGhlYXBhbV9zbG90X2Nh bGxiYWNrcyhSZWxhdGlvbiByZWxhdGlvbikKIAlyZXR1cm4gJlRUU09wc0J1ZmZlckhlYXBUdXBs ZTsKIH0KIAorc3RhdGljIHZvaWQKK1N0b3JlSW5kZXhUdXBsZShUdXBsZVRhYmxlU2xvdCAqc2xv dCwKKwkJCQlJbmRleFR1cGxlIGl0dXAsIFR1cGxlRGVzYyBpdHVwZGVzYykKK3sKKwkvKgorCSAq IE5vdGU6IHdlIG11c3QgdXNlIHRoZSB0dXBkZXNjIHN1cHBsaWVkIGJ5IHRoZSBBTSBpbiBpbmRl eF9kZWZvcm1fdHVwbGUsCisJICogbm90IHRoZSBzbG90J3MgdHVwZGVzYywgaW4gY2FzZSB0aGUg bGF0dGVyIGhhcyBkaWZmZXJlbnQgZGF0YXR5cGVzCisJICogKHRoaXMgaGFwcGVucyBmb3IgYnRy ZWUgbmFtZV9vcHMgaW4gcGFydGljdWxhcikuICBUaGV5J2QgYmV0dGVyIGhhdmUKKwkgKiB0aGUg c2FtZSBudW1iZXIgb2YgY29sdW1ucyB0aG91Z2gsIGFzIHdlbGwgYXMgYmVpbmcgZGF0YXR5cGUt Y29tcGF0aWJsZQorCSAqIHdoaWNoIGlzIHNvbWV0aGluZyB3ZSBjYW4ndCBzbyBlYXNpbHkgY2hl Y2suCisJICovCisJQXNzZXJ0KHNsb3QtPnR0c190dXBsZURlc2NyaXB0b3ItPm5hdHRzID09IGl0 dXBkZXNjLT5uYXR0cyk7CisKKwlFeGVjQ2xlYXJUdXBsZShzbG90KTsKKwlpbmRleF9kZWZvcm1f dHVwbGUoaXR1cCwgaXR1cGRlc2MsIHNsb3QtPnR0c192YWx1ZXMsIHNsb3QtPnR0c19pc251bGwp OworCisJLyoKKwkgKiBDb3B5IGFsbCBuYW1lIGNvbHVtbnMgc3RvcmVkIGFzIGNzdHJpbmdzIGJh Y2sgaW50byBhIE5BTUVEQVRBTEVOIGJ5dGUKKwkgKiBzaXplZCBhbGxvY2F0aW9uLiAgV2UgbWFy ayB0aGlzIGJyYW5jaCBhcyB1bmxpa2VseSBhcyBnZW5lcmFsbHkgIm5hbWUiCisJICogaXMgdXNl ZCBvbmx5IGZvciB0aGUgc3lzdGVtIGNhdGFsb2dzIGFuZCB0aGlzIHdvdWxkIGhhdmUgdG8gYmUg YSB1c2VyCisJICogcXVlcnkgcnVubmluZyBvbiB0aG9zZSBvciBzb21lIG90aGVyIHVzZXIgdGFi bGUgd2l0aCBhbiBpbmRleCBvbiBhIG5hbWUKKwkgKiBjb2x1bW4uCisJICovCisKKwlFeGVjU3Rv cmVWaXJ0dWFsVHVwbGUoc2xvdCk7Cit9CisKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBJbmRl eCBTY2FuIENhbGxiYWNrcyBmb3IgaGVhcCBBTQpAQCAtNzksMTIgKzEwNiwxNyBAQCBoZWFwYW1f c2xvdF9jYWxsYmFja3MoUmVsYXRpb24gcmVsYXRpb24pCiAgKi8KIAogc3RhdGljIEluZGV4RmV0 Y2hUYWJsZURhdGEgKgotaGVhcGFtX2luZGV4X2ZldGNoX2JlZ2luKFJlbGF0aW9uIHJlbCkKK2hl YXBhbV9pbmRleF9mZXRjaF9iZWdpbihSZWxhdGlvbiByZWwsIFR1cGxlVGFibGVTbG90ICppb3Nf dGFibGVzbG90KQogewotCUluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4gPSBwYWxsb2MwX29iamVj dChJbmRleEZldGNoSGVhcERhdGEpOworCUluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4gPSBwYWxs b2Nfb2JqZWN0KEluZGV4RmV0Y2hIZWFwRGF0YSk7CiAKIAloc2Nhbi0+eHNfYmFzZS5yZWwgPSBy ZWw7CisJaHNjYW4tPnhzX2Jhc2UubmhlYXBhY2Nlc3NlcyA9IDA7CisKKwkvKiBoZWFwYW0gc3Bl Y2lmaWMgZmllbGRzICovCiAJaHNjYW4tPnhzX2NidWYgPSBJbnZhbGlkQnVmZmVyOworCWhzY2Fu LT52bWJ1ZiA9IEludmFsaWRCdWZmZXI7CisJaHNjYW4tPmlvc190YWJsZXNsb3QgPSBpb3NfdGFi bGVzbG90OwogCiAJcmV0dXJuICZoc2Nhbi0+eHNfYmFzZTsKIH0KQEAgLTk0LDYgKzEyNiw3IEBA IGhlYXBhbV9pbmRleF9mZXRjaF9yZXNldChJbmRleEZldGNoVGFibGVEYXRhICpzY2FuKQogewog CUluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4gPSAoSW5kZXhGZXRjaEhlYXBEYXRhICopIHNjYW47 CiAKKwkvKiBkZWxpYmVyYXRlbHkgZG9uJ3QgZHJvcCBWTSBidWZmZXIgcGluIGhlcmUgKi8KIAlp ZiAoQnVmZmVySXNWYWxpZChoc2Nhbi0+eHNfY2J1ZikpCiAJewogCQlSZWxlYXNlQnVmZmVyKGhz Y2FuLT54c19jYnVmKTsKQEAgLTEwOCw2ICsxNDEsMTIgQEAgaGVhcGFtX2luZGV4X2ZldGNoX2Vu ZChJbmRleEZldGNoVGFibGVEYXRhICpzY2FuKQogCiAJaGVhcGFtX2luZGV4X2ZldGNoX3Jlc2V0 KHNjYW4pOwogCisJaWYgKGhzY2FuLT52bWJ1ZiAhPSBJbnZhbGlkQnVmZmVyKQorCXsKKwkJUmVs ZWFzZUJ1ZmZlcihoc2Nhbi0+dm1idWYpOworCQloc2Nhbi0+dm1idWYgPSBJbnZhbGlkQnVmZmVy OworCX0KKwogCXBmcmVlKGhzY2FuKTsKIH0KIApAQCAtMTczLDYgKzIxMiw0NjggQEAgaGVhcGFt X2luZGV4X2ZldGNoX3R1cGxlKHN0cnVjdCBJbmRleEZldGNoVGFibGVEYXRhICpzY2FuLAogCXJl dHVybiBnb3RfaGVhcF90dXBsZTsKIH0KIAorLyoKKyAqIGhlYXBfYmF0Y2hfYWR2YW5jZV9wb3MK KyAqCQlBZHZhbmNlIHRoZSBwb3NpdGlvbiB0byB0aGUgbmV4dCBpdGVtLCBkZXBlbmRpbmcgb24g c2NhbiBkaXJlY3Rpb24uCisgKgorICogTW92ZSB0byB0aGUgbmV4dCBpdGVtIHdpdGhpbiB0aGUg YmF0Y2ggcG9pbnRlZCB0byBieSBjYWxsZXIncyBwb3MuICBUaGlzIGlzCisgKiB1c3VhbGx5IHJl YWRQb3MuICBBZHZhbmNlcyB0aGUgcG9zaXRpb24gdG8gdGhlIG5leHQgaXRlbSwgZWl0aGVyIGlu IHRoZQorICogc2FtZSBiYXRjaCBvciB0aGUgZm9sbG93aW5nIG9uZSAoaWYgYWxyZWFkeSBhdmFp bGFibGUpLgorICoKKyAqIFdlIGNhbiBhZHZhbmNlIG9ubHkgaWYgd2UgYWxyZWFkeSBoYXZlIHNv bWUgYmF0Y2hlcyBsb2FkZWQsIGFuZCB0aGVyZSdzCisgKiBlaXRoZXIgZW5vdWdoIGl0ZW1zIGlu IHRoZSBjdXJyZW50IGJhdGNoLCBvciBzb21lIG1vcmUgaXRlbXMgaW4gdGhlCisgKiBzdWJzZXF1 ZW50IGJhdGNoZXMuCisgKgorICogSWYgdGhpcyBpcyB0aGUgZmlyc3QgYWR2YW5jZSAocmlnaHQg YWZ0ZXIgbG9hZGluZyB0aGUgaW5pdGlhbC9oZWFkIGJhdGNoKSwKKyAqIHBvc2l0aW9uIGlzIHN0 aWxsIHVuZGVmaW5lZC4gIE90aGVyd2lzZSB3ZSBleHBlY3QgdGhlIHBvc2l0aW9uIHRvIGJlIHZh bGlkLgorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcG9zaXRpb24gd2FzIGFkdmFuY2VkLCBm YWxzZSBvdGhlcndpc2UuICBUaGUgcG9zaXRpb24KKyAqIGlzIGd1YXJhbnRlZWQgdG8gYmUgdmFs aWQgb25seSBhZnRlciBhIHN1Y2Nlc3NmdWwgYWR2YW5jZS4KKyAqLworc3RhdGljIGJvb2wKK2hl YXBfYmF0Y2hfYWR2YW5jZV9wb3MoSW5kZXhTY2FuRGVzYyBzY2FuLCBzdHJ1Y3QgQmF0Y2hRdWV1 ZUl0ZW1Qb3MgKnBvcywKKwkJCQkJICAgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisJQmF0 Y2hJbmRleFNjYW4gYmF0Y2g7CisKKwkvKiBtYWtlIHN1cmUgd2UgaGF2ZSBiYXRjaGluZyBpbml0 aWFsaXplZCBhbmQgY29uc2lzdGVudCAqLworCWJhdGNoX2Fzc2VydF9iYXRjaGVzX3ZhbGlkKHNj YW4pOworCisJLyogc2hvdWxkIGtub3cgZGlyZWN0aW9uIGJ5IG5vdyAqLworCUFzc2VydChkaXJl Y3Rpb24gPT0gc2Nhbi0+YmF0Y2hxdWV1ZS0+ZGlyZWN0aW9uKTsKKwlBc3NlcnQoZGlyZWN0aW9u ICE9IE5vTW92ZW1lbnRTY2FuRGlyZWN0aW9uKTsKKworCS8qIFdlIGNhbid0IGFkdmFuY2UgaWYg dGhlcmUgYXJlIG5vIGJhdGNoZXMgYXZhaWxhYmxlLiAqLworCWlmIChJTkRFWF9TQ0FOX0JBVENI X0NPVU5UKHNjYW4pID09IDApCisJCXJldHVybiBmYWxzZTsKKworCS8qCisJICogSWYgdGhlIHBv c2l0aW9uIGhhcyBub3QgYmVlbiBhZHZhbmNlZCB5ZXQsIGl0IGhhcyB0byBiZSByaWdodCBhZnRl ciB3ZQorCSAqIGxvYWRlZCB0aGUgaW5pdGlhbCBiYXRjaCAobXVzdCBiZSB0aGUgaGVhZCBiYXRj aCkuIEluIHRoYXQgY2FzZSBqdXN0CisJICogaW5pdGlhbGl6ZSBpdCB0byB0aGUgYmF0Y2gncyBm aXJzdCBpdGVtIChvciBpdHMgbGFzdCBpdGVtLCB3aGVuCisJICogc2Nhbm5pbmcgYmFja3dhcmRz KS4KKwkgKi8KKwlpZiAoSU5ERVhfU0NBTl9QT1NfSU5WQUxJRChwb3MpKQorCXsKKwkJLyoKKwkJ ICogV2Ugc2hvdWxkIGhhdmUgbG9hZGVkIHRoZSBzY2FuJ3MgaW5pdGlhbCBiYXRjaCwgb3IgbWF5 YmUgd2UgaGF2ZQorCQkgKiBjaGFuZ2VkIHRoZSBkaXJlY3Rpb24gb2YgdGhlIHNjYW4gYWZ0ZXIg c2Nhbm5pbmcgYWxsIHRoZSB3YXkgdG8gdGhlCisJCSAqIGVuZCAoaW4gd2hpY2ggY2FzZSB0aGUg cG9zaXRpb24gaXMgaW52YWxpZCwgYW5kIHdlIG1ha2UgaXQgbG9vaworCQkgKiBsaWtlIHRoZXJl IGlzIGp1c3Qgb25lIGJhdGNoKS4gV2Ugc2hvdWxkIGhhdmUganVzdCBvbmUgYmF0Y2gsCisJCSAq IHRob3VnaC4KKwkJICovCisJCUFzc2VydChJTkRFWF9TQ0FOX0JBVENIX0NPVU5UKHNjYW4pID09 IDEpOworCisJCS8qCisJCSAqIEdldCB0aGUgaW5pdGlhbCBiYXRjaCAod2hpY2ggbXVzdCBiZSB0 aGUgaGVhZCksIGFuZCBpbml0aWFsaXplIHRoZQorCQkgKiBwb3NpdGlvbiB0byB0aGUgYXBwcm9w cmlhdGUgaXRlbSBmb3IgdGhlIGN1cnJlbnQgc2NhbiBkaXJlY3Rpb24KKwkJICovCisJCWJhdGNo ID0gSU5ERVhfU0NBTl9CQVRDSChzY2FuLCBzY2FuLT5iYXRjaHF1ZXVlLT5oZWFkQmF0Y2gpOwor CisJCXBvcy0+YmF0Y2ggPSBzY2FuLT5iYXRjaHF1ZXVlLT5oZWFkQmF0Y2g7CisKKwkJaWYgKFNj YW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyZWN0aW9uKSkKKwkJCXBvcy0+aXRlbSA9IGJhdGNoLT5m aXJzdEl0ZW07CisJCWVsc2UKKwkJCXBvcy0+aXRlbSA9IGJhdGNoLT5sYXN0SXRlbTsKKworCQli YXRjaF9hc3NlcnRfcG9zX3ZhbGlkKHNjYW4sIHBvcyk7CisKKwkJcmV0dXJuIHRydWU7CisJfQor CisJLyoKKwkgKiBUaGUgcG9zaXRpb24gaXMgYWxyZWFkeSBkZWZpbmVkLCBzbyB3ZSBzaG91bGQg aGF2ZSBzb21lIGJhdGNoZXMgbG9hZGVkCisJICogYW5kIHRoZSBwb3NpdGlvbiBoYXMgdG8gYmUg dmFsaWQgd2l0aCByZXNwZWN0IHRvIHRob3NlLgorCSAqLworCWJhdGNoX2Fzc2VydF9wb3NfdmFs aWQoc2NhbiwgcG9zKTsKKworCS8qCisJICogQWR2YW5jZSB0byB0aGUgbmV4dCBpdGVtIGluIHRo ZSBzYW1lIGJhdGNoLCBpZiB0aGVyZSBhcmUgbW9yZSBpdGVtcy4gSWYKKwkgKiB3ZSdyZSBhdCB0 aGUgbGFzdCBpdGVtLCB3ZSdsbCB0cnkgYWR2YW5jaW5nIHRvIHRoZSBuZXh0IGJhdGNoIGxhdGVy LgorCSAqLworCWJhdGNoID0gSU5ERVhfU0NBTl9CQVRDSChzY2FuLCBwb3MtPmJhdGNoKTsKKwor CWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcmVjdGlvbikpCisJeworCQlpZiAoKytwb3Mt Pml0ZW0gPD0gYmF0Y2gtPmxhc3RJdGVtKQorCQl7CisJCQliYXRjaF9hc3NlcnRfcG9zX3ZhbGlk KHNjYW4sIHBvcyk7CisKKwkJCXJldHVybiB0cnVlOworCQl9CisJfQorCWVsc2UJCQkJCQkvKiBT Y2FuRGlyZWN0aW9uSXNCYWNrd2FyZCAqLworCXsKKwkJaWYgKC0tcG9zLT5pdGVtID49IGJhdGNo LT5maXJzdEl0ZW0pCisJCXsKKwkJCWJhdGNoX2Fzc2VydF9wb3NfdmFsaWQoc2NhbiwgcG9zKTsK KworCQkJcmV0dXJuIHRydWU7CisJCX0KKwl9CisKKwkvKgorCSAqIFdlIGNvdWxkbid0IGFkdmFu Y2Ugd2l0aGluIHRoZSBzYW1lIGJhdGNoLCB0cnkgYWR2YW5jaW5nIHRvIHRoZSBuZXh0CisJICog YmF0Y2gsIGlmIGl0J3MgYWxyZWFkeSBsb2FkZWQuCisJICovCisJaWYgKElOREVYX1NDQU5fQkFU Q0hfTE9BREVEKHNjYW4sIHBvcy0+YmF0Y2ggKyAxKSkKKwl7CisJCS8qIGFkdmFuY2UgdG8gdGhl IG5leHQgYmF0Y2ggKi8KKwkJcG9zLT5iYXRjaCsrOworCisJCWJhdGNoID0gSU5ERVhfU0NBTl9C QVRDSChzY2FuLCBwb3MtPmJhdGNoKTsKKwkJQXNzZXJ0KGJhdGNoICE9IE5VTEwpOworCisJCWlm IChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcmVjdGlvbikpCisJCQlwb3MtPml0ZW0gPSBiYXRj aC0+Zmlyc3RJdGVtOworCQllbHNlCisJCQlwb3MtPml0ZW0gPSBiYXRjaC0+bGFzdEl0ZW07CisK KwkJYmF0Y2hfYXNzZXJ0X3Bvc192YWxpZChzY2FuLCBwb3MpOworCisJCXJldHVybiB0cnVlOwor CX0KKworCS8qIGNhbid0IGFkdmFuY2UgKi8KKwlyZXR1cm4gZmFsc2U7Cit9CisKKy8qIC0tLS0t LS0tLS0tLS0tLS0KKyAqCQloZWFwYW1fYmF0Y2hfZ2V0bmV4dF90aWQgLSBnZXQgbmV4dCBUSUQg ZnJvbSBpbmRleCBzY2FuIGJhdGNoIHF1ZXVlCisgKgorICogVGhpcyBmdW5jdGlvbiBpbXBsZW1l bnRzIGhlYXBhbSdzIHZlcnNpb24gb2YgZ2V0dGluZyB0aGUgbmV4dCBUSUQgZnJvbSBhbgorICog aW5kZXggc2NhbiB0aGF0IHVzZXMgdGhlIGFtZ2V0YmF0Y2ggaW50ZXJmYWNlLiAgSXQgaXMgaW1w bGVtZW50ZWQgdXNpbmcKKyAqIHZhcmlvdXMgaW5kZXhiYXRjaC5jIHV0aWxpdHkgcm91dGluZXMu CisgKgorICogVGhlIHJvdXRpbmVzIGZyb20gaW5kZXhiYXRjaC5jIGFyZSBzdGF0ZWxlc3MgLS0g dGhleSBqdXN0IGltcGxlbWVudCBiYXRjaAorICogcXVldWUgbWVjaGFuaWNzLiAgaGVhcGFtX2Jh dGNoX2dldG5leHRfdGlkIGltcGxlbWVudHMgdGhlIGhlYXBhbSBwb2xpY3k7IGl0CisgKiBkZWNp ZGVzIHdoZW4gdG8gbG9hZC9mcmVlIGJhdGNoZXMsIGFuZCBjb250cm9scyBzY2FuIGRpcmVjdGlv biBjaGFuZ2VzLgorICogLS0tLS0tLS0tLS0tLS0tLQorICovCitzdGF0aWMgSXRlbVBvaW50ZXIK K2hlYXBhbV9iYXRjaF9nZXRuZXh0X3RpZChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rp b24gZGlyZWN0aW9uKQoreworCUJhdGNoUXVldWUgKmJhdGNocXVldWUgPSBzY2FuLT5iYXRjaHF1 ZXVlOworCUJhdGNoUXVldWVJdGVtUG9zICpyZWFkUG9zOworCisJLyogc2hvdWxkbid0IGdldCBo ZXJlIHdpdGhvdXQgYmF0Y2hpbmcgKi8KKwliYXRjaF9hc3NlcnRfYmF0Y2hlc192YWxpZChzY2Fu KTsKKworCS8qIEluaXRpYWxpemUgZGlyZWN0aW9uIG9uIGZpcnN0IGNhbGwgKi8KKwlpZiAoYmF0 Y2hxdWV1ZS0+ZGlyZWN0aW9uID09IE5vTW92ZW1lbnRTY2FuRGlyZWN0aW9uKQorCQliYXRjaHF1 ZXVlLT5kaXJlY3Rpb24gPSBkaXJlY3Rpb247CisJZWxzZSBpZiAodW5saWtlbHkoYmF0Y2hxdWV1 ZS0+ZGlyZWN0aW9uICE9IGRpcmVjdGlvbikpCisJeworCQkvKgorCQkgKiBIYW5kbGUgYSBjaGFu Z2UgaW4gdGhlIHNjYW4ncyBkaXJlY3Rpb24uCisJCSAqCisJCSAqIFJlbGVhc2UgZnV0dXJlIGJh dGNoZXMgcHJvcGVybHksIHRvIG1ha2UgaXQgbG9vayBsaWtlIHRoZSBjdXJyZW50CisJCSAqIGJh dGNoIGlzIHRoZSBvbmx5IG9uZSB3ZSBsb2FkZWQuCisJCSAqLworCQl3aGlsZSAoYmF0Y2hxdWV1 ZS0+bmV4dEJhdGNoID4gYmF0Y2hxdWV1ZS0+aGVhZEJhdGNoICsgMSkKKwkJeworCQkJLyogcmVs ZWFzZSAibGF0ZXIiIGJhdGNoZXMgaW4gcmV2ZXJzZSBvcmRlciAqLworCQkJQmF0Y2hJbmRleFNj YW4gZmJhdGNoOworCisJCQliYXRjaHF1ZXVlLT5uZXh0QmF0Y2gtLTsKKwkJCWZiYXRjaCA9IElO REVYX1NDQU5fQkFUQ0goc2NhbiwgYmF0Y2hxdWV1ZS0+bmV4dEJhdGNoKTsKKwkJCWJhdGNoX2Zy ZWUoc2NhbiwgZmJhdGNoKTsKKwkJfQorCisJCS8qCisJCSAqIFJlbWVtYmVyIHRoZSBuZXcgZGly ZWN0aW9uLCBhbmQgbWFrZSBzdXJlIHRoZSBzY2FuIGlzIG5vdCBtYXJrZWQgYXMKKwkJICogImZp bmlzaGVkIiAod2UgbWlnaHQgaGF2ZSBhbHJlYWR5IHJlYWQgdGhlIGxhc3QgYmF0Y2gsIGJ1dCBu b3cgd2UKKwkJICogbmVlZCB0byBzdGFydCBvdmVyKS4KKwkJICovCisJCWJhdGNocXVldWUtPmRp cmVjdGlvbiA9IGRpcmVjdGlvbjsKKwkJYmF0Y2hxdWV1ZS0+ZmluaXNoZWQgPSBmYWxzZTsKKwl9 CisKKwkvKiBzaG9ydGN1dCBmb3IgdGhlIHJlYWQgcG9zaXRpb24sIGZvciBjb252ZW5pZW5jZSAq LworCXJlYWRQb3MgPSAmYmF0Y2hxdWV1ZS0+cmVhZFBvczsKKworCS8qCisJICogVHJ5IGFkdmFu Y2luZyB0aGUgYmF0Y2ggcG9zaXRpb24uIElmIHRoYXQgZG9lc24ndCBzdWNjZWVkLCBpdCBtZWFu cyB3ZQorCSAqIGRvbid0IGhhdmUgbW9yZSBpdGVtcyBpbiB0aGUgY3VycmVudCBiYXRjaCwgYW5k IHRoZXJlJ3Mgbm8gZnV0dXJlIGJhdGNoCisJICogbG9hZGVkLiBTbyB0cnkgbG9hZGluZyBhbm90 aGVyIGJhdGNoLCBhbmQgcmV0cnkgaWYgbmVlZGVkLgorCSAqLworCXdoaWxlICh0cnVlKQorCXsK KwkJLyoKKwkJICogSWYgd2UgbWFuYWdlIHRvIGFkdmFuY2UgdG8gdGhlIG5leHQgaXRlbXMsIHJl dHVybiBpdCBhbmQgd2UncmUKKwkJICogZG9uZS4gT3RoZXJ3aXNlIHRyeSBsb2FkaW5nIGFub3Ro ZXIgYmF0Y2guCisJCSAqLworCQlpZiAoaGVhcF9iYXRjaF9hZHZhbmNlX3BvcyhzY2FuLCByZWFk UG9zLCBkaXJlY3Rpb24pKQorCQl7CisJCQlCYXRjaEluZGV4U2NhbiByZWFkQmF0Y2ggPSBJTkRF WF9TQ0FOX0JBVENIKHNjYW4sIHJlYWRQb3MtPmJhdGNoKTsKKworCQkJLyogc2V0IHRoZSBUSUQg LyBpdHVwIGZvciB0aGUgc2NhbiAqLworCQkJc2Nhbi0+eHNfaGVhcHRpZCA9IHJlYWRCYXRjaC0+ aXRlbXNbcmVhZFBvcy0+aXRlbV0uaGVhcFRpZDsKKworCQkJLyogeHNfaGl0dXAgaXMgbm90IHN1 cHBvcnRlZCBieSBhbWdldGJhdGNoIHNjYW5zICovCisJCQlBc3NlcnQoIXNjYW4tPnhzX2hpdHVw KTsKKworCQkJaWYgKHNjYW4tPnhzX3dhbnRfaXR1cCkKKwkJCQlzY2FuLT54c19pdHVwID0KKwkJ CQkJKEluZGV4VHVwbGUpIChyZWFkQmF0Y2gtPmN1cnJUdXBsZXMgKworCQkJCQkJCQkgIHJlYWRC YXRjaC0+aXRlbXNbcmVhZFBvcy0+aXRlbV0udHVwbGVPZmZzZXQpOworCisJCQkvKgorCQkJICog SWYgd2UgYWR2YW5jZWQgdG8gdGhlIG5leHQgYmF0Y2gsIHJlbGVhc2UgdGhlIGJhdGNoIHdlIG5v CisJCQkgKiBsb25nZXIgbmVlZC4gVGhlIHBvc2l0aW9ucyBpcyB0aGUgInJlYWQiIHBvc2l0aW9u LCBhbmQgd2UgY2FuCisJCQkgKiBjb21wYXJlIGl0IHRvIGhlYWRCYXRjaC4KKwkJCSAqLworCQkJ aWYgKHVubGlrZWx5KHJlYWRQb3MtPmJhdGNoICE9IGJhdGNocXVldWUtPmhlYWRCYXRjaCkpCisJ CQl7CisJCQkJQmF0Y2hJbmRleFNjYW4gaGVhZEJhdGNoID0gSU5ERVhfU0NBTl9CQVRDSChzY2Fu LAorCQkJCQkJCQkJCQkJCQkJYmF0Y2hxdWV1ZS0+aGVhZEJhdGNoKTsKKworCQkJCS8qIEZyZWUg dGhlIGhlYWQgYmF0Y2ggKGV4Y2VwdCB3aGVuIGl0J3MgbWFya0JhdGNoKSAqLworCQkJCWJhdGNo X2ZyZWUoc2NhbiwgaGVhZEJhdGNoKTsKKworCQkJCS8qCisJCQkJICogSW4gYW55IGNhc2UsIHJl bW92ZSB0aGUgYmF0Y2ggZnJvbSB0aGUgcmVndWxhciBxdWV1ZSwgZXZlbgorCQkJCSAqIGlmIHdl IGtlcHQgaXQgZm9yIG1hcmsvcmVzdG9yZS4KKwkJCQkgKi8KKwkJCQliYXRjaHF1ZXVlLT5oZWFk QmF0Y2grKzsKKworCQkJCS8qIHdlIGNhbid0IHNraXAgYW55IGJhdGNoZXMgKi8KKwkJCQlBc3Nl cnQoYmF0Y2hxdWV1ZS0+aGVhZEJhdGNoID09IHJlYWRQb3MtPmJhdGNoKTsKKwkJCX0KKworCQkJ cGdzdGF0X2NvdW50X2luZGV4X3R1cGxlcyhzY2FuLT5pbmRleFJlbGF0aW9uLCAxKTsKKwkJCXJl dHVybiAmc2Nhbi0+eHNfaGVhcHRpZDsKKwkJfQorCisJCS8qCisJCSAqIEZhaWxlZCB0byBhZHZh bmNlIHRoZSByZWFkIHBvc2l0aW9uLiAgSGF2ZSBpbmRleGJhdGNoLmMgdXRpbGl0eQorCQkgKiBy b3V0aW5lIGxvYWQgYW5vdGhlciBiYXRjaCBpbnRvIG91ciBxdWV1ZSAobmV4dCBpbiB0aGlzIGRp cmVjdGlvbikuCisJCSAqLworCQlpZiAoIWJhdGNoX2dldG5leHQoc2NhbiwgZGlyZWN0aW9uKSkK KwkJeworCQkJLyogd2UncmUgZG9uZSAtLSB0aGVyZSdzIG5vIG1vcmUgYmF0Y2hlcyBpbiB0aGlz IHNjYW4gZGlyZWN0aW9uICovCisJCQlicmVhazsKKwkJfQorCX0KKworCS8qCisJICogSWYgd2Ug Z2V0IGhlcmUsIHdlIGZhaWxlZCB0byBhZHZhbmNlIHRoZSBwb3NpdGlvbiBhbmQgdGhlcmUgYXJl IG5vIG1vcmUKKwkgKiBiYXRjaGVzIHRvIGJlIGxvYWRlZCBpbiB0aGUgY3VycmVudCBzY2FuIGRp cmVjdGlvbi4gIERlZmVuc2l2ZWx5IHJlc2V0CisJICogdGhlIHJlYWQgcG9zaXRpb24uCisJICov CisJYmF0Y2hfcmVzZXRfcG9zKHJlYWRQb3MpOworCUFzc2VydChzY2FuLT5iYXRjaHF1ZXVlLT5m aW5pc2hlZCk7CisKKwlyZXR1cm4gTlVMTDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLQorICoJ CWluZGV4X2ZldGNoX2hlYXAgLSBnZXQgdGhlIHNjYW4ncyBuZXh0IGhlYXAgdHVwbGUKKyAqCisg KiBUaGUgcmVzdWx0IGlzIGEgdmlzaWJsZSBoZWFwIHR1cGxlIGFzc29jaWF0ZWQgd2l0aCB0aGUg aW5kZXggVElEIG1vc3QKKyAqIHJlY2VudGx5IGZldGNoZWQgYnkgb3VyIGNhbGxlciBpbiBzY2Fu LT54c19oZWFwdGlkLCBvciBOVUxMIGlmIG5vIG1vcmUKKyAqIG1hdGNoaW5nIHR1cGxlcyBleGlz dC4gIChUaGVyZSBjYW4gYmUgbW9yZSB0aGFuIG9uZSBtYXRjaGluZyB0dXBsZSBiZWNhdXNlCisg KiBvZiBIT1QgY2hhaW5zLCBhbHRob3VnaCB3aGVuIHVzaW5nIGFuIE1WQ0Mgc25hcHNob3QgaXQg c2hvdWxkIGJlIGltcG9zc2libGUKKyAqIGZvciBtb3JlIHRoYW4gb25lIHN1Y2ggdHVwbGUgdG8g ZXhpc3QuKQorICoKKyAqIE9uIHN1Y2Nlc3MsIHRoZSBidWZmZXIgY29udGFpbmluZyB0aGUgaGVh cCB0dXAgaXMgcGlubmVkLiAgVGhlIHBpbiBtdXN0IGJlCisgKiBkcm9wcGVkIGVsc2V3aGVyZS4K KyAqIC0tLS0tLS0tLS0tLS0tLS0KKyAqLworc3RhdGljIGJvb2wKK2luZGV4X2ZldGNoX2hlYXAo SW5kZXhTY2FuRGVzYyBzY2FuLCBUdXBsZVRhYmxlU2xvdCAqc2xvdCkKK3sKKwlib29sCQlhbGxf ZGVhZCA9IGZhbHNlOworCWJvb2wJCWZvdW5kOworCisJZm91bmQgPSBoZWFwYW1faW5kZXhfZmV0 Y2hfdHVwbGUoc2Nhbi0+eHNfaGVhcGZldGNoLCAmc2Nhbi0+eHNfaGVhcHRpZCwKKwkJCQkJCQkJ CSBzY2FuLT54c19zbmFwc2hvdCwgc2xvdCwKKwkJCQkJCQkJCSAmc2Nhbi0+eHNfaGVhcF9jb250 aW51ZSwgJmFsbF9kZWFkKTsKKworCWlmIChmb3VuZCkKKwkJcGdzdGF0X2NvdW50X2hlYXBfZmV0 Y2goc2Nhbi0+aW5kZXhSZWxhdGlvbik7CisKKwkvKgorCSAqIElmIHdlIHNjYW5uZWQgYSB3aG9s ZSBIT1QgY2hhaW4gYW5kIGZvdW5kIG9ubHkgZGVhZCB0dXBsZXMsIHRlbGwgaW5kZXgKKwkgKiBB TSB0byBraWxsIGl0cyBlbnRyeSBmb3IgdGhhdCBUSUQgKHRoaXMgd2lsbCB0YWtlIGVmZmVjdCBp biB0aGUgbmV4dAorCSAqIGFtZ2V0dHVwbGUgY2FsbCwgaW4gaW5kZXhfZ2V0bmV4dF90aWQpLiAg V2UgZG8gbm90IGRvIHRoaXMgd2hlbiBpbgorCSAqIHJlY292ZXJ5IGJlY2F1c2UgaXQgbWF5IHZp b2xhdGUgTVZDQyB0byBkbyBzby4gIFNlZSBjb21tZW50cyBpbgorCSAqIFJlbGF0aW9uR2V0SW5k ZXhTY2FuKCkuCisJICoKKwkgKiBYWFggRm9yIHNjYW5zIHVzaW5nIGJhdGNoaW5nLCByZWNvcmQg dGhlIGZsYWcgaW4gdGhlIGJhdGNoICh3ZSB3aWxsCisJICogcGFzcyBpdCB0byB0aGUgQU0gbGF0 ZXIsIHdoZW4gZnJlZWluZyBpdCkuIE90aGVyd2lzZSBqdXN0IHBhc3MgaXQgdG8KKwkgKiB0aGUg QU0gdXNpbmcgdGhlIGtpbGxfcHJpb3JfdHVwbGUgZmllbGQuCisJICovCisJaWYgKCFzY2FuLT54 YWN0U3RhcnRlZEluUmVjb3ZlcnkpCisJeworCQlpZiAoc2Nhbi0+YmF0Y2hxdWV1ZSA9PSBOVUxM KQorCQkJc2Nhbi0+a2lsbF9wcmlvcl90dXBsZSA9IGFsbF9kZWFkOworCQllbHNlIGlmIChhbGxf ZGVhZCkKKwkJCWluZGV4X2JhdGNoX2tpbGxfaXRlbShzY2FuKTsKKwl9CisKKwlyZXR1cm4gZm91 bmQ7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0KKyAqCQloZWFwYW1faW5kZXhfZ2V0bmV4dF9z bG90IC0gZ2V0IHRoZSBuZXh0IHR1cGxlIGZyb20gYSBzY2FuCisgKgorICogVGhlIHJlc3VsdCBp cyB0cnVlIGlmIGEgdHVwbGUgc2F0aXNmeWluZyB0aGUgc2NhbiBrZXlzIGFuZCB0aGUgc25hcHNo b3Qgd2FzCisgKiBmb3VuZCwgZmFsc2Ugb3RoZXJ3aXNlLiAgVGhlIHR1cGxlIGlzIHN0b3JlZCBp biB0aGUgc3BlY2lmaWVkIHNsb3QuCisgKgorICogT24gc3VjY2VzcywgcmVzb3VyY2VzIChsaWtl IGJ1ZmZlciBwaW5zKSBhcmUgbGlrZWx5IHRvIGJlIGhlbGQsIGFuZCB3aWxsIGJlCisgKiBkcm9w cGVkIGJ5IGEgZnV0dXJlIGNhbGwgaGVyZSAob3IgYnkgYSBsYXRlciBjYWxsIHRvIGluZGV4X2Vu ZHNjYW4pLgorICoKKyAqIE5vdGU6IGNhbGxlciBtdXN0IGNoZWNrIHNjYW4tPnhzX3JlY2hlY2ss IGFuZCBwZXJmb3JtIHJlY2hlY2tpbmcgb2YgdGhlCisgKiBzY2FuIGtleXMgaWYgcmVxdWlyZWQu ICBXZSBkbyBub3QgZG8gdGhhdCBoZXJlIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZQorICogZW5vdWdo IGluZm9ybWF0aW9uIHRvIGRvIGl0IGVmZmljaWVudGx5IGluIHRoZSBnZW5lcmFsIGNhc2UuCisg KiAtLS0tLS0tLS0tLS0tLS0tCisgKi8KK3N0YXRpYyBib29sCitoZWFwYW1faW5kZXhfZ2V0bmV4 dF9zbG90KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCisJCQkJ CQkgIFR1cGxlVGFibGVTbG90ICpzbG90KQoreworCUluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4g PSAoSW5kZXhGZXRjaEhlYXBEYXRhICopIHNjYW4tPnhzX2hlYXBmZXRjaDsKKwlJdGVtUG9pbnRl ciB0aWQgPSBOVUxMOworCisJZm9yICg7OykKKwl7CisJCWlmICghc2Nhbi0+eHNfaGVhcF9jb250 aW51ZSkKKwkJeworCQkJLyoKKwkJCSAqIFNjYW5zIHRoYXQgdXNlIGFuIGFtZ2V0YmF0Y2ggaW5k ZXggQU0gYXJlIG1hbmFnZWQgYnkgaGVhcGFtJ3MKKwkJCSAqIGluZGV4IHNjYW4gbWFuYWdlci4g IFRoaXMgZ2l2ZXMgaGVhcGFtIHRoZSBhYmlsaXR5IHRvIHJlYWQgaGVhcAorCQkJICogdHVwbGVz IGluIGEgZmxleGlibGUgb3JkZXIgdGhhdCBpcyBhdHR1bmVkIHRvIGJvdGggY29zdHMgYW5kCisJ CQkgKiBiZW5lZml0cyBvbiB0aGUgaGVhcGFtIGFuZCB0YWJsZSBBTSBzaWRlLgorCQkJICoKKwkJ CSAqIFNjYW5zIHRoYXQgdXNlIGFuIGFtZ2V0dHVwbGUgaW5kZXggQU0gc2ltcGx5IGNhbGwgdGhy b3VnaCB0bworCQkJICogaW5kZXhfZ2V0bmV4dF90aWQgdG8gZ2V0IHRoZSBuZXh0IFRJRCByZXR1 cm5lZCBieSBpbmRleCBBTS4gVGhlCisJCQkgKiBwcm9ncmVzcyBvZiB0aGUgc2NhbiB3aWxsIGJl IHVuZGVyIHRoZSBjb250cm9sIG9mIGluZGV4IEFNICh3ZQorCQkJICoganVzdCBwYXNzIGl0IHRo cm91Z2ggYSBkaXJlY3Rpb24gdG8gZ2V0IHRoZSBuZXh0IHR1cGxlIGluKSwgc28KKwkJCSAqIHdl IGNhbm5vdCByZW9yZGVyIGFueSB3b3JrLgorCQkJICovCisJCQlpZiAoc2Nhbi0+YmF0Y2hxdWV1 ZSAhPSBOVUxMKQorCQkJCXRpZCA9IGhlYXBhbV9iYXRjaF9nZXRuZXh0X3RpZChzY2FuLCBkaXJl Y3Rpb24pOworCQkJZWxzZQorCQkJCXRpZCA9IGluZGV4X2dldG5leHRfdGlkKHNjYW4sIGRpcmVj dGlvbik7CisKKwkJCS8qIElmIHdlJ3JlIG91dCBvZiBpbmRleCBlbnRyaWVzLCB3ZSdyZSBkb25l ICovCisJCQlpZiAodGlkID09IE5VTEwpCisJCQkJYnJlYWs7CisJCX0KKworCQkvKgorCQkgKiBG ZXRjaCB0aGUgbmV4dCAob3Igb25seSkgdmlzaWJsZSBoZWFwIHR1cGxlIGZvciB0aGlzIGluZGV4 IGVudHJ5LgorCQkgKiBJZiB3ZSBkb24ndCBmaW5kIGFueXRoaW5nLCBsb29wIGFyb3VuZCBhbmQg Z3JhYiB0aGUgbmV4dCBUSUQgZnJvbQorCQkgKiB0aGUgaW5kZXguCisJCSAqLworCQlBc3NlcnQo SXRlbVBvaW50ZXJJc1ZhbGlkKCZzY2FuLT54c19oZWFwdGlkKSk7CisJCWlmICghc2Nhbi0+eHNf d2FudF9pdHVwKQorCQl7CisJCQkvKiBQbGFpbiBpbmRleCBzY2FuICovCisJCQlpZiAoaW5kZXhf ZmV0Y2hfaGVhcChzY2FuLCBzbG90KSkKKwkJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCQllbHNlCisJ CXsKKwkJCS8qCisJCQkgKiBJbmRleC1vbmx5IHNjYW4uCisJCQkgKgorCQkJICogV2UgY2FuIHNr aXAgdGhlIGhlYXAgZmV0Y2ggaWYgdGhlIFRJRCByZWZlcmVuY2VzIGEgaGVhcCBwYWdlIG9uCisJ CQkgKiB3aGljaCBhbGwgdHVwbGVzIGFyZSBrbm93biB2aXNpYmxlIHRvIGV2ZXJ5Ym9keS4gIElu IGFueSBjYXNlLAorCQkJICogd2UnbGwgdXNlIHRoZSBpbmRleCB0dXBsZSBub3QgdGhlIGhlYXAg dHVwbGUgYXMgdGhlIGRhdGEKKwkJCSAqIHNvdXJjZS4KKwkJCSAqCisJCQkgKiBOb3RlIG9uIE1l bW9yeSBPcmRlcmluZyBFZmZlY3RzOiB2aXNpYmlsaXR5bWFwX2dldF9zdGF0dXMgZG9lcworCQkJ ICogbm90IGxvY2sgdGhlIHZpc2liaWxpdHkgbWFwIGJ1ZmZlciwgYW5kIHRoZXJlZm9yZSB0aGUg cmVzdWx0IHdlCisJCQkgKiByZWFkIGhlcmUgY291bGQgYmUgc2xpZ2h0bHkgc3RhbGUuICBIb3dl dmVyLCBpdCBjYW4ndCBiZSBzdGFsZQorCQkJICogZW5vdWdoIHRvIG1hdHRlci4KKwkJCSAqCisJ CQkgKiBXZSBuZWVkIHRvIGRldGVjdCBjbGVhcmluZyBhIFZNIGJpdCBkdWUgdG8gYW4gaW5zZXJ0 IHJpZ2h0CisJCQkgKiBhd2F5LCBiZWNhdXNlIHRoZSB0dXBsZSBpcyBwcmVzZW50IGluIHRoZSBp bmRleCBwYWdlIGJ1dCBub3QKKwkJCSAqIHZpc2libGUuIFRoZSByZWFkaW5nIG9mIHRoZSBUSUQg YnkgdGhpcyBzY2FuICh1c2luZyBhIHNoYXJlZAorCQkJICogbG9jayBvbiB0aGUgaW5kZXggYnVm ZmVyKSBpcyBzZXJpYWxpemVkIHdpdGggdGhlIGluc2VydCBvZiB0aGUKKwkJCSAqIFRJRCBpbnRv IHRoZSBpbmRleCAodXNpbmcgYW4gZXhjbHVzaXZlIGxvY2sgb24gdGhlIGluZGV4CisJCQkgKiBi dWZmZXIpLiBCZWNhdXNlIHRoZSBWTSBiaXQgaXMgY2xlYXJlZCBiZWZvcmUgdXBkYXRpbmcgdGhl CisJCQkgKiBpbmRleCwgYW5kIGxvY2tpbmcvdW5sb2NraW5nIG9mIHRoZSBpbmRleCBwYWdlIGFj dHMgYXMgYSBmdWxsCisJCQkgKiBtZW1vcnkgYmFycmllciwgd2UgYXJlIHN1cmUgdG8gc2VlIHRo ZSBjbGVhcmVkIGJpdCBpZiB3ZSBzZWUgYQorCQkJICogcmVjZW50bHktaW5zZXJ0ZWQgVElELgor CQkJICoKKwkJCSAqIERlbGV0ZXMgZG8gbm90IHVwZGF0ZSB0aGUgaW5kZXggcGFnZSAob25seSBW QUNVVU0gd2lsbCBjbGVhcgorCQkJICogb3V0IHRoZSBUSUQpLCBzbyB0aGUgY2xlYXJpbmcgb2Yg dGhlIFZNIGJpdCBieSBhIGRlbGV0ZSBpcyBub3QKKwkJCSAqIHNlcmlhbGl6ZWQgd2l0aCB0aGlz IHRlc3QgYmVsb3csIGFuZCB3ZSBtYXkgc2VlIGEgdmFsdWUgdGhhdCBpcworCQkJICogc2lnbmlm aWNhbnRseSBzdGFsZS4gSG93ZXZlciwgd2UgZG9uJ3QgY2FyZSBhYm91dCB0aGUgZGVsZXRlCisJ CQkgKiByaWdodCBhd2F5LCBiZWNhdXNlIHRoZSB0dXBsZSBpcyBzdGlsbCB2aXNpYmxlIHVudGls IHRoZQorCQkJICogZGVsZXRpbmcgdHJhbnNhY3Rpb24gY29tbWl0cyBvciB0aGUgc3RhdGVtZW50 IGVuZHMgKGlmIGl0J3Mgb3VyCisJCQkgKiB0cmFuc2FjdGlvbikuIEluIGVpdGhlciBjYXNlLCB0 aGUgbG9jayBvbiB0aGUgVk0gYnVmZmVyIHdpbGwKKwkJCSAqIGhhdmUgYmVlbiByZWxlYXNlZCAo YWN0aW5nIGFzIGEgd3JpdGUgYmFycmllcikgYWZ0ZXIgY2xlYXJpbmcKKwkJCSAqIHRoZSBiaXQu IEFuZCBmb3IgdXMgdG8gaGF2ZSBhIHNuYXBzaG90IHRoYXQgaW5jbHVkZXMgdGhlCisJCQkgKiBk ZWxldGluZyB0cmFuc2FjdGlvbiAobWFraW5nIHRoZSB0dXBsZSBpbnZpc2libGUpLCB3ZSBtdXN0 IGhhdmUKKwkJCSAqIGFjcXVpcmVkIFByb2NBcnJheUxvY2sgYWZ0ZXIgdGhhdCB0aW1lLCBhY3Rp bmcgYXMgYSByZWFkCisJCQkgKiBiYXJyaWVyLgorCQkJICoKKwkJCSAqIEl0J3Mgd29ydGggZ29p bmcgdGhyb3VnaCB0aGlzIGNvbXBsZXhpdHkgdG8gYXZvaWQgbmVlZGluZyB0bworCQkJICogbG9j ayB0aGUgVk0gYnVmZmVyLCB3aGljaCBjb3VsZCBjYXVzZSBzaWduaWZpY2FudCBjb250ZW50aW9u LgorCQkJICovCisJCQlpZiAoIVZNX0FMTF9WSVNJQkxFKGhzY2FuLT54c19iYXNlLnJlbCwKKwkJ CQkJCQkJSXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcih0aWQpLAorCQkJCQkJCQkmaHNjYW4tPnZt YnVmKSkKKwkJCXsKKwkJCQkvKgorCQkJCSAqIFJhdHMsIHdlIGhhdmUgdG8gdmlzaXQgdGhlIGhl YXAgdG8gY2hlY2sgdmlzaWJpbGl0eS4KKwkJCQkgKi8KKwkJCQloc2Nhbi0+eHNfYmFzZS5uaGVh cGFjY2Vzc2VzKys7CisJCQkJaWYgKCFpbmRleF9mZXRjaF9oZWFwKHNjYW4sIGhzY2FuLT5pb3Nf dGFibGVzbG90KSkKKwkJCQkJY29udGludWU7CS8qIG5vIHZpc2libGUgdHVwbGUsIHRyeSBuZXh0 IGluZGV4IGVudHJ5ICovCisKKwkJCQkvKgorCQkJCSAqIHNlbGZ1bmNzLmMgY2FsbGVyIHVzZXMg U25hcHNob3ROb25WYWN1dW1hYmxlLiAgSnVzdCBhc3N1bWUKKwkJCQkgKiB0aGF0IGl0J3MgZ29v ZCBlbm91Z2ggdGhhdCBhbnkgb25lIHR1cGxlIGZyb20gSE9UIGNoYWluIGlzCisJCQkJICogdmlz aWJsZSBmb3Igc3VjaCBhIGNhbGxlcgorCQkJCSAqLworCQkJCWlmICh1bmxpa2VseSghSXNNVkND U25hcHNob3Qoc2Nhbi0+eHNfc25hcHNob3QpKSkKKwkJCQkJcmV0dXJuIHRydWU7CisKKwkJCQlF eGVjQ2xlYXJUdXBsZShoc2Nhbi0+aW9zX3RhYmxlc2xvdCk7CisKKwkJCQkvKgorCQkJCSAqIE9u bHkgTVZDQyBzbmFwc2hvdHMgYXJlIHN1cHBvcnRlZCBoZXJlLCBzbyB0aGVyZSBzaG91bGQgYmUK KwkJCQkgKiBubyBuZWVkIHRvIGtlZXAgZm9sbG93aW5nIHRoZSBIT1QgY2hhaW4gb25jZSBhIHZp c2libGUKKwkJCQkgKiBlbnRyeSBoYXMgYmVlbiBmb3VuZC4KKwkJCQkgKi8KKwkJCQlpZiAoc2Nh bi0+eHNfaGVhcF9jb250aW51ZSkKKwkJCQkJZWxvZyhFUlJPUiwgIm5vbi1NVkNDIHNuYXBzaG90 cyBhcmUgbm90IHN1cHBvcnRlZCBpbiBpbmRleC1vbmx5IHNjYW5zIik7CisKKwkJCQkvKgorCQkJ CSAqIE5vdGU6IGF0IHRoaXMgcG9pbnQgd2UgYXJlIGhvbGRpbmcgYSBwaW4gb24gdGhlIGhlYXAg cGFnZSwKKwkJCQkgKiBhcyByZWNvcmRlZCBpbiBJbmRleEZldGNoSGVhcERhdGEueHNfY2J1Zi4g IFdlIGNvdWxkCisJCQkJICogcmVsZWFzZSB0aGF0IHBpbiBub3csIGJ1dCB3ZSBwcmVmZXIgdG8g aG9sZCBvbiB0byBWTSBwaW5zLgorCQkJCSAqIGl0J3MgcXVpdGUgcG9zc2libGUgdGhhdCB0aGUg aW5kZXggZW50cnkgd2lsbCByZXF1aXJlIGEKKwkJCQkgKiB2aXNpdCB0byB0aGUgc2FtZSBoZWFw IHBhZ2UuICBJdCdzIGV2ZW4gbW9yZSBsaWtlbHkgdGhhdAorCQkJCSAqIHRoZSBpbmRleCBlbnRy eSB3aWxsIGZvcmNlIHVzIHRvIHBlcmZvcm0gYSBsb29rdXAgdGhhdCB1c2VzCisJCQkJICogdGhl IHNhbWUgYWxyZWFkeS1waW5uZWQgVk0gcGFnZS4KKwkJCQkgKi8KKwkJCQlpZiAoc2Nhbi0+eHNf aXR1cCkKKwkJCQkJU3RvcmVJbmRleFR1cGxlKHNsb3QsIHNjYW4tPnhzX2l0dXAsIHNjYW4tPnhz X2l0dXBkZXNjKTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQkvKgorCQkJCSAqIFdlIGRpZG4n dCBhY2Nlc3MgdGhlIGhlYXAsIHNvIHdlJ2xsIG5lZWQgdG8gdGFrZSBhCisJCQkJICogcHJlZGlj YXRlIGxvY2sgZXhwbGljaXRseSwgYXMgaWYgd2UgaGFkLiAgRm9yIG5vdyB3ZSBkbworCQkJCSAq IHRoYXQgYXQgcGFnZSBsZXZlbC4KKwkJCQkgKi8KKwkJCQlQcmVkaWNhdGVMb2NrUGFnZShoc2Nh bi0+eHNfYmFzZS5yZWwsCisJCQkJCQkJCSAgSXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcih0aWQp LAorCQkJCQkJCQkgIHNjYW4tPnhzX3NuYXBzaG90KTsKKwkJCX0KKwkJCXJldHVybiB0cnVlOwor CQl9CisJfQorCisJcmV0dXJuIGZhbHNlOworfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIENh bGxiYWNrcyBmb3Igbm9uLW1vZGlmeWluZyBvcGVyYXRpb25zIG9uIGluZGl2aWR1YWwgdHVwbGVz IGZvciBoZWFwIEFNCkBAIC03NTMsNyArMTI1NCw4IEBAIGhlYXBhbV9yZWxhdGlvbl9jb3B5X2Zv cl9jbHVzdGVyKFJlbGF0aW9uIE9sZEhlYXAsIFJlbGF0aW9uIE5ld0hlYXAsCiAKIAkJdGFibGVT Y2FuID0gTlVMTDsKIAkJaGVhcFNjYW4gPSBOVUxMOwotCQlpbmRleFNjYW4gPSBpbmRleF9iZWdp bnNjYW4oT2xkSGVhcCwgT2xkSW5kZXgsIFNuYXBzaG90QW55LCBOVUxMLCAwLCAwKTsKKwkJaW5k ZXhTY2FuID0gaW5kZXhfYmVnaW5zY2FuKE9sZEhlYXAsIE9sZEluZGV4LCBOVUxMLCBTbmFwc2hv dEFueSwKKwkJCQkJCQkJCU5VTEwsIDAsIDApOwogCQlpbmRleF9yZXNjYW4oaW5kZXhTY2FuLCBO VUxMLCAwLCBOVUxMLCAwKTsKIAl9CiAJZWxzZQpAQCAtNzkwLDcgKzEyOTIsOCBAQCBoZWFwYW1f cmVsYXRpb25fY29weV9mb3JfY2x1c3RlcihSZWxhdGlvbiBPbGRIZWFwLCBSZWxhdGlvbiBOZXdI ZWFwLAogCiAJCWlmIChpbmRleFNjYW4gIT0gTlVMTCkKIAkJewotCQkJaWYgKCFpbmRleF9nZXRu ZXh0X3Nsb3QoaW5kZXhTY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwgc2xvdCkpCisJCQlpZiAo IWhlYXBhbV9pbmRleF9nZXRuZXh0X3Nsb3QoaW5kZXhTY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlv biwKKwkJCQkJCQkJCQkgICBzbG90KSkKIAkJCQlicmVhazsKIAogCQkJLyogU2luY2Ugd2UgdXNl ZCBubyBzY2FuIGtleXMsIHNob3VsZCBuZXZlciBuZWVkIHRvIHJlY2hlY2sgKi8KQEAgLTI2MzMs NiArMzEzNiw3IEBAIHN0YXRpYyBjb25zdCBUYWJsZUFtUm91dGluZSBoZWFwYW1fbWV0aG9kcyA9 IHsKIAkuaW5kZXhfZmV0Y2hfYmVnaW4gPSBoZWFwYW1faW5kZXhfZmV0Y2hfYmVnaW4sCiAJLmlu ZGV4X2ZldGNoX3Jlc2V0ID0gaGVhcGFtX2luZGV4X2ZldGNoX3Jlc2V0LAogCS5pbmRleF9mZXRj aF9lbmQgPSBoZWFwYW1faW5kZXhfZmV0Y2hfZW5kLAorCS5pbmRleF9nZXRuZXh0X3Nsb3QgPSBo ZWFwYW1faW5kZXhfZ2V0bmV4dF9zbG90LAogCS5pbmRleF9mZXRjaF90dXBsZSA9IGhlYXBhbV9p bmRleF9mZXRjaF90dXBsZSwKIAogCS50dXBsZV9pbnNlcnQgPSBoZWFwYW1fdHVwbGVfaW5zZXJ0 LApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L01ha2VmaWxlIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL2luZGV4L01ha2VmaWxlCmluZGV4IDZmMmUzMDYxYS4uZTZkNjgxYjQwIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvTWFrZWZpbGUKKysrIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL2luZGV4L01ha2VmaWxlCkBAIC0xNiw2ICsxNiw3IEBAIE9CSlMgPSBcCiAJ YW1hcGkubyBcCiAJYW12YWxpZGF0ZS5vIFwKIAlnZW5hbS5vIFwKLQlpbmRleGFtLm8KKwlpbmRl eGFtLm8gXAorCWluZGV4YmF0Y2gubwogCiBpbmNsdWRlICQodG9wX3NyY2Rpcikvc3JjL2JhY2tl bmQvY29tbW9uLm1rCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvZ2VuYW0u YyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9nZW5hbS5jCmluZGV4IDcwN2MyNTI4OS4uOWVh ZGMzYWZjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvZ2VuYW0uYworKysg Yi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvZ2VuYW0uYwpAQCAtODksNiArODksNyBAQCBSZWxh dGlvbkdldEluZGV4U2NhbihSZWxhdGlvbiBpbmRleFJlbGF0aW9uLCBpbnQgbmtleXMsIGludCBu b3JkZXJieXMpCiAJc2Nhbi0+eHNfc25hcHNob3QgPSBJbnZhbGlkU25hcHNob3Q7CS8qIGNhbGxl ciBtdXN0IGluaXRpYWxpemUgdGhpcyAqLwogCXNjYW4tPm51bWJlck9mS2V5cyA9IG5rZXlzOwog CXNjYW4tPm51bWJlck9mT3JkZXJCeXMgPSBub3JkZXJieXM7CisJc2Nhbi0+YmF0Y2hxdWV1ZSA9 IE5VTEw7CS8qIHVzZWQgYnkgYW1nZXRiYXRjaCBpbmRleCBBTXMgKi8KIAogCS8qCiAJICogV2Ug YWxsb2NhdGUga2V5IHdvcmtzcGFjZSBoZXJlLCBidXQgaXQgd29uJ3QgZ2V0IGZpbGxlZCB1bnRp bCBhbXJlc2Nhbi4KQEAgLTQ0Niw3ICs0NDcsNyBAQCBzeXN0YWJsZV9iZWdpbnNjYW4oUmVsYXRp b24gaGVhcFJlbGF0aW9uLAogCQkJCWVsb2coRVJST1IsICJjb2x1bW4gaXMgbm90IGluIGluZGV4 Iik7CiAJCX0KIAotCQlzeXNzY2FuLT5pc2NhbiA9IGluZGV4X2JlZ2luc2NhbihoZWFwUmVsYXRp b24sIGlyZWwsCisJCXN5c3NjYW4tPmlzY2FuID0gaW5kZXhfYmVnaW5zY2FuKGhlYXBSZWxhdGlv biwgaXJlbCwgTlVMTCwKIAkJCQkJCQkJCQkgc25hcHNob3QsIE5VTEwsIG5rZXlzLCAwKTsKIAkJ aW5kZXhfcmVzY2FuKHN5c3NjYW4tPmlzY2FuLCBpZHhrZXksIG5rZXlzLCBOVUxMLCAwKTsKIAkJ c3lzc2Nhbi0+c2NhbiA9IE5VTEw7CkBAIC01MTcsNyArNTE4LDggQEAgc3lzdGFibGVfZ2V0bmV4 dChTeXNTY2FuRGVzYyBzeXNzY2FuKQogCiAJaWYgKHN5c3NjYW4tPmlyZWwpCiAJewotCQlpZiAo aW5kZXhfZ2V0bmV4dF9zbG90KHN5c3NjYW4tPmlzY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwg c3lzc2Nhbi0+c2xvdCkpCisJCWlmICh0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3Qoc3lzc2Nhbi0+ aXNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uLAorCQkJCQkJCQkJIHN5c3NjYW4tPnNsb3QpKQog CQl7CiAJCQlib29sCQlzaG91bGRGcmVlOwogCkBAIC03MDcsNyArNzA5LDcgQEAgc3lzdGFibGVf YmVnaW5zY2FuX29yZGVyZWQoUmVsYXRpb24gaGVhcFJlbGF0aW9uLAogCQkJZWxvZyhFUlJPUiwg ImNvbHVtbiBpcyBub3QgaW4gaW5kZXgiKTsKIAl9CiAKLQlzeXNzY2FuLT5pc2NhbiA9IGluZGV4 X2JlZ2luc2NhbihoZWFwUmVsYXRpb24sIGluZGV4UmVsYXRpb24sCisJc3lzc2Nhbi0+aXNjYW4g PSBpbmRleF9iZWdpbnNjYW4oaGVhcFJlbGF0aW9uLCBpbmRleFJlbGF0aW9uLCBOVUxMLAogCQkJ CQkJCQkJIHNuYXBzaG90LCBOVUxMLCBua2V5cywgMCk7CiAJaW5kZXhfcmVzY2FuKHN5c3NjYW4t PmlzY2FuLCBpZHhrZXksIG5rZXlzLCBOVUxMLCAwKTsKIAlzeXNzY2FuLT5zY2FuID0gTlVMTDsK QEAgLTczNCw3ICs3MzYsNyBAQCBzeXN0YWJsZV9nZXRuZXh0X29yZGVyZWQoU3lzU2NhbkRlc2Mg c3lzc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24pCiAJSGVhcFR1cGxlCWh0dXAgPSBOVUxM OwogCiAJQXNzZXJ0KHN5c3NjYW4tPmlyZWwpOwotCWlmIChpbmRleF9nZXRuZXh0X3Nsb3Qoc3lz c2Nhbi0+aXNjYW4sIGRpcmVjdGlvbiwgc3lzc2Nhbi0+c2xvdCkpCisJaWYgKHRhYmxlX2luZGV4 X2dldG5leHRfc2xvdChzeXNzY2FuLT5pc2NhbiwgZGlyZWN0aW9uLCBzeXNzY2FuLT5zbG90KSkK IAkJaHR1cCA9IEV4ZWNGZXRjaFNsb3RIZWFwVHVwbGUoc3lzc2Nhbi0+c2xvdCwgZmFsc2UsIE5V TEwpOwogCiAJLyogU2VlIG5vdGVzIGluIHN5c3RhYmxlX2dldG5leHQgKi8KZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGFtLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3Mv aW5kZXgvaW5kZXhhbS5jCmluZGV4IDA0OTJkOTJkMi4uOWU0ZWQ1YjU1IDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhhbS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vz cy9pbmRleC9pbmRleGFtLmMKQEAgLTI0LDkgKzI0LDcgQEAKICAqCQlpbmRleF9wYXJhbGxlbHNj YW5faW5pdGlhbGl6ZSAtIGluaXRpYWxpemUgcGFyYWxsZWwgc2NhbgogICoJCWluZGV4X3BhcmFs bGVscmVzY2FuICAtIChyZSlzdGFydCBhIHBhcmFsbGVsIHNjYW4gb2YgYW4gaW5kZXgKICAqCQlp bmRleF9iZWdpbnNjYW5fcGFyYWxsZWwgLSBqb2luIHBhcmFsbGVsIGluZGV4IHNjYW4KLSAqCQlp bmRleF9nZXRuZXh0X3RpZAktIGdldCB0aGUgbmV4dCBUSUQgZnJvbSBhIHNjYW4KLSAqCQlpbmRl eF9mZXRjaF9oZWFwCQktIGdldCB0aGUgc2NhbidzIG5leHQgaGVhcCB0dXBsZQotICoJCWluZGV4 X2dldG5leHRfc2xvdAktIGdldCB0aGUgbmV4dCB0dXBsZSBmcm9tIGEgc2NhbgorICoJCWluZGV4 X2dldG5leHRfdGlkCS0gYW1nZXR0dXBsZSB0YWJsZSBBTSBoZWxwZXIgcm91dGluZQogICoJCWlu ZGV4X2dldGJpdG1hcCAtIGdldCBhbGwgdHVwbGVzIGZyb20gYSBzY2FuCiAgKgkJaW5kZXhfYnVs a19kZWxldGUJLSBidWxrIGRlbGV0aW9uIG9mIGluZGV4IHR1cGxlcwogICoJCWluZGV4X3ZhY3V1 bV9jbGVhbnVwCS0gcG9zdC1kZWxldGlvbiBjbGVhbnVwIG9mIGFuIGluZGV4CkBAIC0yNTUsNiAr MjUzLDcgQEAgaW5kZXhfaW5zZXJ0X2NsZWFudXAoUmVsYXRpb24gaW5kZXhSZWxhdGlvbiwKIElu ZGV4U2NhbkRlc2MKIGluZGV4X2JlZ2luc2NhbihSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAJCQkJ UmVsYXRpb24gaW5kZXhSZWxhdGlvbiwKKwkJCQlUdXBsZVRhYmxlU2xvdCAqaW9zX3RhYmxlc2xv dCwKIAkJCQlTbmFwc2hvdCBzbmFwc2hvdCwKIAkJCQlJbmRleFNjYW5JbnN0cnVtZW50YXRpb24g Kmluc3RydW1lbnQsCiAJCQkJaW50IG5rZXlzLCBpbnQgbm9yZGVyYnlzKQpAQCAtMjgzLDggKzI4 MiwxMSBAQCBpbmRleF9iZWdpbnNjYW4oUmVsYXRpb24gaGVhcFJlbGF0aW9uLAogCXNjYW4tPnhz X3NuYXBzaG90ID0gc25hcHNob3Q7CiAJc2Nhbi0+aW5zdHJ1bWVudCA9IGluc3RydW1lbnQ7CiAK KwlpZiAoaW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtZ2V0YmF0Y2ggIT0gTlVMTCkKKwkJaW5k ZXhfYmF0Y2hfaW5pdChzY2FuKTsKKwogCS8qIHByZXBhcmUgdG8gZmV0Y2ggaW5kZXggbWF0Y2hl cyBmcm9tIHRhYmxlICovCi0Jc2Nhbi0+eHNfaGVhcGZldGNoID0gdGFibGVfaW5kZXhfZmV0Y2hf YmVnaW4oaGVhcFJlbGF0aW9uKTsKKwlzY2FuLT54c19oZWFwZmV0Y2ggPSB0YWJsZV9pbmRleF9m ZXRjaF9iZWdpbihoZWFwUmVsYXRpb24sIGlvc190YWJsZXNsb3QpOwogCiAJcmV0dXJuIHNjYW47 CiB9CkBAIC0zODAsNiArMzgyLDggQEAgaW5kZXhfcmVzY2FuKEluZGV4U2NhbkRlc2Mgc2NhbiwK IAlzY2FuLT5raWxsX3ByaW9yX3R1cGxlID0gZmFsc2U7IC8qIGZvciBzYWZldHkgKi8KIAlzY2Fu LT54c19oZWFwX2NvbnRpbnVlID0gZmFsc2U7CiAKKwlpbmRleF9iYXRjaF9yZXNldChzY2FuLCB0 cnVlKTsKKwogCXNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbXJlc2NhbihzY2FuLCBr ZXlzLCBua2V5cywKIAkJCQkJCQkJCQkJb3JkZXJieXMsIG5vcmRlcmJ5cyk7CiB9CkBAIC0zOTQs NiArMzk4LDkgQEAgaW5kZXhfZW5kc2NhbihJbmRleFNjYW5EZXNjIHNjYW4pCiAJU0NBTl9DSEVD S1M7CiAJQ0hFQ0tfU0NBTl9QUk9DRURVUkUoYW1lbmRzY2FuKTsKIAorCS8qIENsZWFudXAgYmF0 Y2hpbmcsIHNvIHRoYXQgdGhlIEFNIGNhbiByZWxlYXNlIHBpbnMgYW5kIHNvIG9uLiAqLworCWlu ZGV4X2JhdGNoX2VuZChzY2FuKTsKKwogCS8qIFJlbGVhc2UgcmVzb3VyY2VzIChsaWtlIGJ1ZmZl ciBwaW5zKSBmcm9tIHRhYmxlIGFjY2Vzc2VzICovCiAJaWYgKHNjYW4tPnhzX2hlYXBmZXRjaCkK IAl7CkBAIC00MjIsOSArNDI5LDEwIEBAIHZvaWQKIGluZGV4X21hcmtwb3MoSW5kZXhTY2FuRGVz YyBzY2FuKQogewogCVNDQU5fQ0hFQ0tTOwotCUNIRUNLX1NDQU5fUFJPQ0VEVVJFKGFtbWFya3Bv cyk7CisJQ0hFQ0tfU0NBTl9QUk9DRURVUkUoYW1wb3NyZXNldCk7CiAKLQlzY2FuLT5pbmRleFJl bGF0aW9uLT5yZF9pbmRhbS0+YW1tYXJrcG9zKHNjYW4pOworCS8qIE9ubHkgYW1nZXRiYXRjaCBp bmRleCBBTXMgc3VwcG9ydCBtYXJrIGFuZCByZXN0b3JlICovCisJcmV0dXJuIGluZGV4X2JhdGNo X21hcmtfcG9zKHNjYW4pOwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tCkBAIC00NDgsNyArNDU2 LDggQEAgaW5kZXhfcmVzdHJwb3MoSW5kZXhTY2FuRGVzYyBzY2FuKQogCUFzc2VydChJc01WQ0NT bmFwc2hvdChzY2FuLT54c19zbmFwc2hvdCkpOwogCiAJU0NBTl9DSEVDS1M7Ci0JQ0hFQ0tfU0NB Tl9QUk9DRURVUkUoYW1yZXN0cnBvcyk7CisJQ0hFQ0tfU0NBTl9QUk9DRURVUkUoYW1nZXRiYXRj aCk7CisJQ0hFQ0tfU0NBTl9QUk9DRURVUkUoYW1wb3NyZXNldCk7CiAKIAkvKiByZWxlYXNlIHJl c291cmNlcyAobGlrZSBidWZmZXIgcGlucykgZnJvbSB0YWJsZSBhY2Nlc3NlcyAqLwogCWlmIChz Y2FuLT54c19oZWFwZmV0Y2gpCkBAIC00NTcsNyArNDY2LDcgQEAgaW5kZXhfcmVzdHJwb3MoSW5k ZXhTY2FuRGVzYyBzY2FuKQogCXNjYW4tPmtpbGxfcHJpb3JfdHVwbGUgPSBmYWxzZTsgLyogZm9y IHNhZmV0eSAqLwogCXNjYW4tPnhzX2hlYXBfY29udGludWUgPSBmYWxzZTsKIAotCXNjYW4tPmlu ZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbXJlc3RycG9zKHNjYW4pOworCWluZGV4X2JhdGNoX3Jl c3RvcmVfcG9zKHNjYW4pOwogfQogCiAvKgpAQCAtNTc5LDYgKzU4OCw4IEBAIGluZGV4X3BhcmFs bGVscmVzY2FuKEluZGV4U2NhbkRlc2Mgc2NhbikKIAlpZiAoc2Nhbi0+eHNfaGVhcGZldGNoKQog CQl0YWJsZV9pbmRleF9mZXRjaF9yZXNldChzY2FuLT54c19oZWFwZmV0Y2gpOwogCisJaW5kZXhf YmF0Y2hfcmVzZXQoc2NhbiwgdHJ1ZSk7CisKIAkvKiBhbXBhcmFsbGVscmVzY2FuIGlzIG9wdGlv bmFsOyBhc3N1bWUgbm8tb3AgaWYgbm90IHByb3ZpZGVkIGJ5IEFNICovCiAJaWYgKHNjYW4tPmlu ZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbXBhcmFsbGVscmVzY2FuICE9IE5VTEwpCiAJCXNjYW4t PmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbXBhcmFsbGVscmVzY2FuKHNjYW4pOwpAQCAtNTkx LDYgKzYwMiw3IEBAIGluZGV4X3BhcmFsbGVscmVzY2FuKEluZGV4U2NhbkRlc2Mgc2NhbikKICAq LwogSW5kZXhTY2FuRGVzYwogaW5kZXhfYmVnaW5zY2FuX3BhcmFsbGVsKFJlbGF0aW9uIGhlYXBy ZWwsIFJlbGF0aW9uIGluZGV4cmVsLAorCQkJCQkJIFR1cGxlVGFibGVTbG90ICppb3NfdGFibGVz bG90LAogCQkJCQkJIEluZGV4U2Nhbkluc3RydW1lbnRhdGlvbiAqaW5zdHJ1bWVudCwKIAkJCQkJ CSBpbnQgbmtleXMsIGludCBub3JkZXJieXMsCiAJCQkJCQkgUGFyYWxsZWxJbmRleFNjYW5EZXNj IHBzY2FuKQpAQCAtNjE0LDE3ICs2MjYsMjQgQEAgaW5kZXhfYmVnaW5zY2FuX3BhcmFsbGVsKFJl bGF0aW9uIGhlYXByZWwsIFJlbGF0aW9uIGluZGV4cmVsLAogCXNjYW4tPnhzX3NuYXBzaG90ID0g c25hcHNob3Q7CiAJc2Nhbi0+aW5zdHJ1bWVudCA9IGluc3RydW1lbnQ7CiAKKwlpZiAoaW5kZXhy ZWwtPnJkX2luZGFtLT5hbWdldGJhdGNoICE9IE5VTEwpCisJCWluZGV4X2JhdGNoX2luaXQoc2Nh bik7CisKIAkvKiBwcmVwYXJlIHRvIGZldGNoIGluZGV4IG1hdGNoZXMgZnJvbSB0YWJsZSAqLwot CXNjYW4tPnhzX2hlYXBmZXRjaCA9IHRhYmxlX2luZGV4X2ZldGNoX2JlZ2luKGhlYXByZWwpOwor CXNjYW4tPnhzX2hlYXBmZXRjaCA9IHRhYmxlX2luZGV4X2ZldGNoX2JlZ2luKGhlYXByZWwsIGlv c190YWJsZXNsb3QpOwogCiAJcmV0dXJuIHNjYW47CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0K LSAqIGluZGV4X2dldG5leHRfdGlkIC0gZ2V0IHRoZSBuZXh0IFRJRCBmcm9tIGEgc2NhbgorICog aW5kZXhfZ2V0bmV4dF90aWQgLSBhbWdldHR1cGxlIGludGVyZmFjZQogICoKICAqIFRoZSByZXN1 bHQgaXMgdGhlIG5leHQgVElEIHNhdGlzZnlpbmcgdGhlIHNjYW4ga2V5cywKICAqIG9yIE5VTEwg aWYgbm8gbW9yZSBtYXRjaGluZyB0dXBsZXMgZXhpc3QuCisgKgorICogVGhpcyBzaG91bGQgb25s eSBiZSBjYWxsZWQgYnkgdGFibGUgQU0ncyBpbmRleF9nZXRuZXh0X3Nsb3QgaW1wbGVtZW50YXRp b24sCisgKiBhbmQgb25seSBnaXZlbiBhbiBpbmRleCBBTSB0aGF0IHN1cHBvcnRzIHRoZSBzaW5n bGUtdHVwbGUgYW1nZXR0dXBsZQorICogaW50ZXJmYWNlLgogICogLS0tLS0tLS0tLS0tLS0tLQog ICovCiBJdGVtUG9pbnRlcgpAQCAtNjY3LDk3ICs2ODYsNiBAQCBpbmRleF9nZXRuZXh0X3RpZChJ bmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uKQogCXJldHVybiAmc2Nh bi0+eHNfaGVhcHRpZDsKIH0KIAotLyogLS0tLS0tLS0tLS0tLS0tLQotICoJCWluZGV4X2ZldGNo X2hlYXAgLSBnZXQgdGhlIHNjYW4ncyBuZXh0IGhlYXAgdHVwbGUKLSAqCi0gKiBUaGUgcmVzdWx0 IGlzIGEgdmlzaWJsZSBoZWFwIHR1cGxlIGFzc29jaWF0ZWQgd2l0aCB0aGUgaW5kZXggVElEIG1v c3QKLSAqIHJlY2VudGx5IGZldGNoZWQgYnkgaW5kZXhfZ2V0bmV4dF90aWQsIG9yIE5VTEwgaWYg bm8gbW9yZSBtYXRjaGluZyB0dXBsZXMKLSAqIGV4aXN0LiAgKFRoZXJlIGNhbiBiZSBtb3JlIHRo YW4gb25lIG1hdGNoaW5nIHR1cGxlIGJlY2F1c2Ugb2YgSE9UIGNoYWlucywKLSAqIGFsdGhvdWdo IHdoZW4gdXNpbmcgYW4gTVZDQyBzbmFwc2hvdCBpdCBzaG91bGQgYmUgaW1wb3NzaWJsZSBmb3Ig bW9yZSB0aGFuCi0gKiBvbmUgc3VjaCB0dXBsZSB0byBleGlzdC4pCi0gKgotICogT24gc3VjY2Vz cywgdGhlIGJ1ZmZlciBjb250YWluaW5nIHRoZSBoZWFwIHR1cCBpcyBwaW5uZWQgKHRoZSBwaW4g d2lsbCBiZQotICogZHJvcHBlZCBpbiBhIGZ1dHVyZSBpbmRleF9nZXRuZXh0X3RpZCwgaW5kZXhf ZmV0Y2hfaGVhcCBvciBpbmRleF9lbmRzY2FuCi0gKiBjYWxsKS4KLSAqCi0gKiBOb3RlOiBjYWxs ZXIgbXVzdCBjaGVjayBzY2FuLT54c19yZWNoZWNrLCBhbmQgcGVyZm9ybSByZWNoZWNraW5nIG9m IHRoZQotICogc2NhbiBrZXlzIGlmIHJlcXVpcmVkLiAgV2UgZG8gbm90IGRvIHRoYXQgaGVyZSBi ZWNhdXNlIHdlIGRvbid0IGhhdmUKLSAqIGVub3VnaCBpbmZvcm1hdGlvbiB0byBkbyBpdCBlZmZp Y2llbnRseSBpbiB0aGUgZ2VuZXJhbCBjYXNlLgotICogLS0tLS0tLS0tLS0tLS0tLQotICovCi1i b29sCi1pbmRleF9mZXRjaF9oZWFwKEluZGV4U2NhbkRlc2Mgc2NhbiwgVHVwbGVUYWJsZVNsb3Qg KnNsb3QpCi17Ci0JYm9vbAkJYWxsX2RlYWQgPSBmYWxzZTsKLQlib29sCQlmb3VuZDsKLQotCWZv dW5kID0gdGFibGVfaW5kZXhfZmV0Y2hfdHVwbGUoc2Nhbi0+eHNfaGVhcGZldGNoLCAmc2Nhbi0+ eHNfaGVhcHRpZCwKLQkJCQkJCQkJCXNjYW4tPnhzX3NuYXBzaG90LCBzbG90LAotCQkJCQkJCQkJ JnNjYW4tPnhzX2hlYXBfY29udGludWUsICZhbGxfZGVhZCk7Ci0KLQlpZiAoZm91bmQpCi0JCXBn c3RhdF9jb3VudF9oZWFwX2ZldGNoKHNjYW4tPmluZGV4UmVsYXRpb24pOwotCi0JLyoKLQkgKiBJ ZiB3ZSBzY2FubmVkIGEgd2hvbGUgSE9UIGNoYWluIGFuZCBmb3VuZCBvbmx5IGRlYWQgdHVwbGVz LCB0ZWxsIGluZGV4Ci0JICogQU0gdG8ga2lsbCBpdHMgZW50cnkgZm9yIHRoYXQgVElEICh0aGlz IHdpbGwgdGFrZSBlZmZlY3QgaW4gdGhlIG5leHQKLQkgKiBhbWdldHR1cGxlIGNhbGwsIGluIGlu ZGV4X2dldG5leHRfdGlkKS4gIFdlIGRvIG5vdCBkbyB0aGlzIHdoZW4gaW4KLQkgKiByZWNvdmVy eSBiZWNhdXNlIGl0IG1heSB2aW9sYXRlIE1WQ0MgdG8gZG8gc28uICBTZWUgY29tbWVudHMgaW4K LQkgKiBSZWxhdGlvbkdldEluZGV4U2NhbigpLgotCSAqLwotCWlmICghc2Nhbi0+eGFjdFN0YXJ0 ZWRJblJlY292ZXJ5KQotCQlzY2FuLT5raWxsX3ByaW9yX3R1cGxlID0gYWxsX2RlYWQ7Ci0KLQly ZXR1cm4gZm91bmQ7Ci19Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0KLSAqCQlpbmRleF9nZXRuZXh0 X3Nsb3QgLSBnZXQgdGhlIG5leHQgdHVwbGUgZnJvbSBhIHNjYW4KLSAqCi0gKiBUaGUgcmVzdWx0 IGlzIHRydWUgaWYgYSB0dXBsZSBzYXRpc2Z5aW5nIHRoZSBzY2FuIGtleXMgYW5kIHRoZSBzbmFw c2hvdCB3YXMKLSAqIGZvdW5kLCBmYWxzZSBvdGhlcndpc2UuICBUaGUgdHVwbGUgaXMgc3RvcmVk IGluIHRoZSBzcGVjaWZpZWQgc2xvdC4KLSAqCi0gKiBPbiBzdWNjZXNzLCByZXNvdXJjZXMgKGxp a2UgYnVmZmVyIHBpbnMpIGFyZSBsaWtlbHkgdG8gYmUgaGVsZCwgYW5kIHdpbGwgYmUKLSAqIGRy b3BwZWQgYnkgYSBmdXR1cmUgaW5kZXhfZ2V0bmV4dF90aWQsIGluZGV4X2ZldGNoX2hlYXAgb3Ig aW5kZXhfZW5kc2NhbgotICogY2FsbCkuCi0gKgotICogTm90ZTogY2FsbGVyIG11c3QgY2hlY2sg c2Nhbi0+eHNfcmVjaGVjaywgYW5kIHBlcmZvcm0gcmVjaGVja2luZyBvZiB0aGUKLSAqIHNjYW4g a2V5cyBpZiByZXF1aXJlZC4gIFdlIGRvIG5vdCBkbyB0aGF0IGhlcmUgYmVjYXVzZSB3ZSBkb24n dCBoYXZlCi0gKiBlbm91Z2ggaW5mb3JtYXRpb24gdG8gZG8gaXQgZWZmaWNpZW50bHkgaW4gdGhl IGdlbmVyYWwgY2FzZS4KLSAqIC0tLS0tLS0tLS0tLS0tLS0KLSAqLwotYm9vbAotaW5kZXhfZ2V0 bmV4dF9zbG90KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sIFR1 cGxlVGFibGVTbG90ICpzbG90KQotewotCWZvciAoOzspCi0JewotCQlpZiAoIXNjYW4tPnhzX2hl YXBfY29udGludWUpCi0JCXsKLQkJCUl0ZW1Qb2ludGVyIHRpZDsKLQotCQkJLyogVGltZSB0byBm ZXRjaCB0aGUgbmV4dCBUSUQgZnJvbSB0aGUgaW5kZXggKi8KLQkJCXRpZCA9IGluZGV4X2dldG5l eHRfdGlkKHNjYW4sIGRpcmVjdGlvbik7Ci0KLQkJCS8qIElmIHdlJ3JlIG91dCBvZiBpbmRleCBl bnRyaWVzLCB3ZSdyZSBkb25lICovCi0JCQlpZiAodGlkID09IE5VTEwpCi0JCQkJYnJlYWs7Ci0K LQkJCUFzc2VydChJdGVtUG9pbnRlckVxdWFscyh0aWQsICZzY2FuLT54c19oZWFwdGlkKSk7Ci0J CX0KLQotCQkvKgotCQkgKiBGZXRjaCB0aGUgbmV4dCAob3Igb25seSkgdmlzaWJsZSBoZWFwIHR1 cGxlIGZvciB0aGlzIGluZGV4IGVudHJ5LgotCQkgKiBJZiB3ZSBkb24ndCBmaW5kIGFueXRoaW5n LCBsb29wIGFyb3VuZCBhbmQgZ3JhYiB0aGUgbmV4dCBUSUQgZnJvbQotCQkgKiB0aGUgaW5kZXgu Ci0JCSAqLwotCQlBc3NlcnQoSXRlbVBvaW50ZXJJc1ZhbGlkKCZzY2FuLT54c19oZWFwdGlkKSk7 Ci0JCWlmIChpbmRleF9mZXRjaF9oZWFwKHNjYW4sIHNsb3QpKQotCQkJcmV0dXJuIHRydWU7Ci0J fQotCi0JcmV0dXJuIGZhbHNlOwotfQotCiAvKiAtLS0tLS0tLS0tLS0tLS0tCiAgKgkJaW5kZXhf Z2V0Yml0bWFwIC0gZ2V0IGFsbCB0dXBsZXMgYXQgb25jZSBmcm9tIGFuIGluZGV4IHNjYW4KICAq CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhiYXRjaC5jIGIvc3Jj L2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YmF0Y2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAuLmUzMGNjMTc5YwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iYWNrZW5k L2FjY2Vzcy9pbmRleC9pbmRleGJhdGNoLmMKQEAgLTAsMCArMSw2NDAgQEAKKy8qLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorICoKKyAqIGluZGV4YmF0Y2guYworICoJICBhbWdldGJhdGNoIGltcGxlbWVudGF0 aW9uIHJvdXRpbmVzCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjUsIFBv c3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQg KGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQorICoKKyAq CisgKiBJREVOVElGSUNBVElPTgorICoJICBzcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhi YXRjaC5jCisgKgorICogSU5URVJGQUNFIFJPVVRJTkVTCisgKgkJaW5kZXhfYmF0Y2hfaW5pdCAt IEluaXRpYWxpemUgZmllbGRzIG5lZWRlZCBieSBiYXRjaGluZworICoJCWluZGV4X2JhdGNoX3Jl c2V0IC0gcmVzZXQgYSBiYXRjaAorICoJCWluZGV4X2JhdGNoX21hcmtfcG9zIC0gc2V0IGEgbWFy ayBmcm9tIGN1cnJlbnQgYmF0Y2ggcG9zaXRpb24KKyAqCQlpbmRleF9iYXRjaF9yZXN0b3JlX3Bv cyAtIHJlc3RvcmUgbWFyayB0byBjdXJyZW50IGJhdGNoIHBvc2l0aW9uCisgKgkJaW5kZXhfYmF0 Y2hfa2lsbF9pdGVtIC0gcmVjb3JkIGRlYWQgaW5kZXggdHVwbGUKKyAqCQlpbmRleF9iYXRjaF9l bmQgLSBlbmQgYmF0Y2gKKyAqCisgKgkJaW5kZXhhbV91dGlsX2JhdGNoX3VubG9jayAtIHVubG9j ayBiYXRjaCdzIGJ1ZmZlciBsb2NrCisgKgkJaW5kZXhhbV91dGlsX2JhdGNoX2FsbG9jIC0gYWxs b2NhdGUgYW5vdGhlciBiYXRjaAorICoJCWluZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlIC0gcmVs ZWFzZSBhbGxvY2F0ZWQgYmF0Y2gKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisjaW5j bHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgImFjY2Vzcy9hbWFwaS5oIgorI2luY2x1ZGUg ImFjY2Vzcy90YWJsZWFtLmgiCisjaW5jbHVkZSAib3B0aW1pemVyL2Nvc3QuaCIKKyNpbmNsdWRl ICJwZ3N0YXQuaCIKKyNpbmNsdWRlICJ1dGlscy9tZW1kZWJ1Zy5oIgorCitzdGF0aWMgdm9pZCBi YXRjaF9kZWJ1Z19wcmludF9iYXRjaGVzKGNvbnN0IGNoYXIgKmxhYmVsLCBJbmRleFNjYW5EZXNj IHNjYW4pOworCisvKgorICogaW5kZXhfYmF0Y2hfaW5pdAorICoJCUluaXRpYWxpemUgdmFyaW91 cyBmaWVsZHMgYW5kIGFycmF5cyBuZWVkZWQgYnkgYmF0Y2hpbmcuCisgKgorICogU2V0cyB1cCB0 aGUgYmF0Y2ggcXVldWUgc3RydWN0dXJlIGFuZCBpdHMgaW5pdGlhbCByZWFkIHBvc2l0aW9uLiAg QWxzbworICogZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBzY2FuIHdpbGwgZWFnZXJseSBkcm9wIGlu ZGV4IHBhZ2UgcGlucy4gIEl0IGlzbid0CisgKiBzYWZlIHRvIGRyb3AgaW5kZXggcGFnZSBwaW5z IGVhZ2VybHkgd2hlbiBkb2luZyBzbyByaXNrcyBicmVha2luZyBhbgorICogYXNzdW1wdGlvbiAo YWJvdXQgdGFibGUgVElEIHJlY3ljbGluZykgdGhhdCBhbWZyZWViYXRjaCByb3V0aW5lcyBtYWtl IHdoZW4KKyAqIHNldHRpbmcgTFBfREVBRCBiaXRzIGZvciBrbm93bi1kZWFkIGluZGV4IHR1cGxl cy4gIFNwZWNpZmljYWxseSwgYnVmZmVyCisgKiBwaW5zIG9uIGluZGV4IHBhZ2VzIHNlcnZlIGFz IGludGVybG9ja3MgcHJldmVudGluZyBWQUNVVU0gZnJvbSByZWN5Y2xpbmcKKyAqIFRJRHMgb24g dGhvc2UgcGFnZXMsIHByb3RlY3RpbmcgdGhlIHRhYmxlIEFNIGZyb20gY29uZnVzaW5nIGEgcmVj eWNsZWQgVElECisgKiB3aXRoIHRoZSBvcmlnaW5hbCByb3cgaXQgbWVhbnQgdG8gcmVmZXJlbmNl LgorICovCit2b2lkCitpbmRleF9iYXRjaF9pbml0KEluZGV4U2NhbkRlc2Mgc2NhbikKK3sKKwkv KiBCb3RoIGFtZ2V0YmF0Y2ggYW5kIGFtZnJlZWJhdGNoIG11c3QgYmUgcHJlc2VudCB0b2dldGhl ciAqLworCUFzc2VydChzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1nZXRiYXRjaCAh PSBOVUxMKTsKKwlBc3NlcnQoc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtZnJlZWJh dGNoICE9IE5VTEwpOworCisJc2Nhbi0+YmF0Y2hxdWV1ZSA9IHBhbGxvYyhzaXplb2YoQmF0Y2hR dWV1ZSkpOworCisJLyoKKwkgKiBXZSBwcmVmZXIgdG8gZWFnZXJseSBkcm9wIGxlYWYgcGFnZSBw aW5zIGJlZm9yZSBhbWdldGJhdGNoIHJldHVybnMuCisJICogVGhpcyBhdm9pZHMgbWFraW5nIFZB Q1VVTSB3YWl0IHRvIGFjcXVpcmUgYSBjbGVhbnVwIGxvY2sgb24gdGhlIHBhZ2UuCisJICoKKwkg KiBXZSBjYW5ub3Qgc2FmZWx5IGRyb3AgbGVhZiBwYWdlIHBpbnMgZHVyaW5nIGluZGV4LW9ubHkg c2NhbnMgZHVlIHRvIGEKKwkgKiByYWNlIGNvbmRpdGlvbiBpbnZvbHZpbmcgVkFDVVVNIHNldHRp bmcgcGFnZXMgYWxsLXZpc2libGUgaW4gdGhlIFZNLgorCSAqIEl0J3MgYWxzbyB1bnNhZmUgZm9y IHBsYWluIGluZGV4IHNjYW5zIHRoYXQgdXNlIGEgbm9uLU1WQ0Mgc25hcHNob3QuCisJICoKKwkg KiBXaGVuIHdlIGRyb3AgcGlucyBlYWdlcmx5LCB0aGUgbWVjaGFuaXNtIHRoYXQgbWFya3MgaW5k ZXggdHVwbGVzIGFzCisJICogTFBfREVBRCBoYXMgdG8gZGVhbCB3aXRoIGNvbmN1cnJlbnQgVElE IHJlY3ljbGluZyByYWNlcy4gIFRoZSBzY2hlbWUKKwkgKiB1c2VkIHRvIGRldGVjdCB1bnNhZmUg VElEIHJlY3ljbGluZyB3b24ndCB3b3JrIHdoZW4gc2Nhbm5pbmcgdW5sb2dnZWQKKwkgKiByZWxh dGlvbnMgKHNpbmNlIGl0IGludm9sdmVzIHNhdmluZyBhbiBhZmZlY3RlZCBwYWdlJ3MgTFNOKS4g IE9wdCBvdXQKKwkgKiBvZiBlYWdlciBwaW4gZHJvcHBpbmcgZHVyaW5nIHVubG9nZ2VkIHJlbGF0 aW9uIHNjYW5zIGZvciBub3cuCisJICovCisJc2Nhbi0+YmF0Y2hxdWV1ZS0+ZHJvcFBpbiA9CisJ CSghc2Nhbi0+eHNfd2FudF9pdHVwICYmIElzTVZDQ1NuYXBzaG90KHNjYW4tPnhzX3NuYXBzaG90 KSAmJgorCQkgUmVsYXRpb25OZWVkc1dBTChzY2FuLT5pbmRleFJlbGF0aW9uKSk7CisJc2Nhbi0+ YmF0Y2hxdWV1ZS0+ZmluaXNoZWQgPSBmYWxzZTsKKwlzY2FuLT5iYXRjaHF1ZXVlLT5kaXJlY3Rp b24gPSBOb01vdmVtZW50U2NhbkRpcmVjdGlvbjsKKworCS8qIHBvc2l0aW9ucyBpbiB0aGUgcXVl dWUgb2YgYmF0Y2hlcyAqLworCWJhdGNoX3Jlc2V0X3Bvcygmc2Nhbi0+YmF0Y2hxdWV1ZS0+cmVh ZFBvcyk7CisJYmF0Y2hfcmVzZXRfcG9zKCZzY2FuLT5iYXRjaHF1ZXVlLT5tYXJrUG9zKTsKKwor CXNjYW4tPmJhdGNocXVldWUtPm1hcmtCYXRjaCA9IE5VTEw7CisJc2Nhbi0+YmF0Y2hxdWV1ZS0+ aGVhZEJhdGNoID0gMDsJLyogaW5pdGlhbCBoZWFkIGJhdGNoICovCisJc2Nhbi0+YmF0Y2hxdWV1 ZS0+bmV4dEJhdGNoID0gMDsJLyogaW5pdGlhbCBiYXRjaCBzdGFydHMgZW1wdHkgKi8KKwltZW1z ZXQoJnNjYW4tPmJhdGNocXVldWUtPmNhY2hlLCAwLCBzaXplb2Yoc2Nhbi0+YmF0Y2hxdWV1ZS0+ Y2FjaGUpKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLQorICoJCWJhdGNoX2dldG5leHQgLSBn ZXQgdGhlIG5leHQgYmF0Y2ggb2YgVElEcyBmcm9tIGEgc2NhbgorICoKKyAqIENhbGxlZCBieSB0 YWJsZSBBTSdzIG9yZGVyZWQgaW5kZXggc2NhbiBpbXBsZW1lbnRhdGlvbiB3aGVuIGl0IG5lZWRz IHRvCisgKiBsb2FkIHRoZSBuZXh0IGJhdGNoIG9mIGluZGV4IGVudHJpZXMgdG8gcHJvY2VzcyBp biB0aGUgZ2l2ZW4gZGlyZWN0aW9uLgorICoKKyAqIFRoZSB0YWJsZSBBTSBjb250cm9scyB0aGUg b3ZlcmFsbCBwcm9ncmVzcyBvZiB0aGUgc2NhbiwgZGVjaWRpbmcgd2hlbiB0bworICogcmVxdWVz dCBuZXcgYmF0Y2hlcy4gIFRoaXMgZGl2aXNpb24gb2YgbGFib3IgZ2l2ZXMgdGhlIHRhYmxlIEFN IHRoZSBhYmlsaXR5CisgKiB0byByZW9yZGVyIGZldGNoZXMgb2YgbmVhcmJ5IHRhYmxlIHR1cGxl cyAoZnJvbSB0aGUgc2FtZSBiYXRjaCwgb3IgZnJvbQorICogYWRqYWNlbnQgYmF0Y2hlcykgYmFz ZWQgb24gaXRzIG93biBjb25zaWRlcmF0aW9ucy4gIEltcG9ydGFudGx5LCB0YWJsZSBBTXMKKyAq IGFyZSBfbm90XyByZXF1aXJlZCB0byBmcmVlIGEgYmF0Y2ggYmVmb3JlIGxvYWRpbmcgdGhlIG5l eHQgYmF0Y2ggZHVyaW5nIGFuCisgKiBpbmRleCBzY2FuIG9mIGFuIGluZGV4IHRoYXQgdXNlcyB0 aGUgYW1nZXRiYXRjaC9hbWZyZWViYXRjaCBpbnRlcmZhY2UuCisgKiAoVGhpcyBpc24ndCBwb3Nz aWJsZSB3aXRoIHRoZSBzaW5nbGUtdHVwbGUgYW1nZXR0dXBsZSBpbnRlcmZhY2UsIHdoaWNoIGdp dmVzCisgKiB0aGUgaW5kZXggQU0gZGlyZWN0IGNvbnRyb2wgb3ZlciB0aGUgcHJvZ3Jlc3Mgb2Yg dGhlIGluZGV4IHNjYW4uICBhbWdldHR1cGxlCisgKiBpbmRleCBzY2FucyBwZXJmb3JtIHRoZSB3 b3JrIHRoYXQgd2UgcGVyZm9ybSBpbiBiYXRjaF9mcmVlIGFzIHRoZSBzY2FuCisgKiBwcm9ncmVz c2VzLCBhbmQgd2l0aG91dCBub3RpZnlpbmcgdGhlIHRhYmxlIEFNLCB3aGljaCBtYWtlcyBpdCBp bXBvc3NpYmxlCisgKiB0byBzYWZlbHkgcmVvcmRlciB3b3JrIGluIHRoZSB3YXkgdGhhdCBvdXIg Y2FsbGVycyBjYW4uKQorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiB3ZSBtYW5hZ2VkIHRvIHJlYWQg YSBiYXRjaCBvZiBUSURzLCBvciBmYWxzZSBpZiB0aGVyZSBhcmUKKyAqIG5vIG1vcmUgYmF0Y2hl cyBpbiB0aGUgZ2l2ZW4gc2NhbiBkaXJlY3Rpb24uCisgKiAtLS0tLS0tLS0tLS0tLS0tCisgKi8K K2Jvb2wKK2JhdGNoX2dldG5leHQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRp cmVjdGlvbikKK3sKKwlCYXRjaFF1ZXVlICpiYXRjaHF1ZXVlID0gc2Nhbi0+YmF0Y2hxdWV1ZTsK KwlCYXRjaEluZGV4U2NhbiBwcmlvcmJhdGNoID0gTlVMTCwKKwkJCQliYXRjaCA9IE5VTEw7CisK KwkvKiBYWFg6IHdlIHNob3VsZCBhc3NlcnQgdGhhdCBhIHNuYXBzaG90IGlzIHB1c2hlZCBvciBy ZWdpc3RlcmVkICovCisJQXNzZXJ0KFRyYW5zYWN0aW9uSWRJc1ZhbGlkKFJlY2VudFhtaW4pKTsK KworCS8qIERpZCB3ZSBhbHJlYWR5IHJlYWQgdGhlIGxhc3QgYmF0Y2ggZm9yIHRoaXMgc2Nhbj8g Ki8KKwlpZiAoYmF0Y2hxdWV1ZS0+ZmluaXNoZWQpCisJCXJldHVybiBmYWxzZTsKKworCUFzc2Vy dCghSU5ERVhfU0NBTl9CQVRDSF9GVUxMKHNjYW4pKTsKKworCWJhdGNoX2RlYnVnX3ByaW50X2Jh dGNoZXMoImJhdGNoX2dldG5leHQgLyBzdGFydCIsIHNjYW4pOworCisJLyoKKwkgKiBHZXQgdGhl IHByZXZpb3VzbHkgcmV0dXJuZWQgYmF0Y2ggdG8gcGFzcyB0byBhbWdldGJhdGNoLiAgVGhlIGlu ZGV4IEFNCisJICogdXNlcyB0aGlzIHRvIGRldGVybWluZSB3aGljaCBpbmRleCBwYWdlIHRvIHJl YWQgbmV4dCwgdHlwaWNhbGx5IGJ5CisJICogZm9sbG93aW5nIHBhZ2UgbGlua3MgZm9yd2FyZCBv ciBiYWNrd2FyZC4KKwkgKi8KKwlpZiAoYmF0Y2hxdWV1ZS0+aGVhZEJhdGNoIDwgYmF0Y2hxdWV1 ZS0+bmV4dEJhdGNoKQorCQlwcmlvcmJhdGNoID0gSU5ERVhfU0NBTl9CQVRDSChzY2FuLCBiYXRj aHF1ZXVlLT5uZXh0QmF0Y2ggLSAxKTsKKworCWJhdGNoID0gc2Nhbi0+aW5kZXhSZWxhdGlvbi0+ cmRfaW5kYW0tPmFtZ2V0YmF0Y2goc2NhbiwgcHJpb3JiYXRjaCwKKwkJCQkJCQkJCQkJCQkgIGRp cmVjdGlvbik7CisJaWYgKGJhdGNoICE9IE5VTEwpCisJeworCQkvKiBXZSBnb3QgdGhlIGJhdGNo IGZyb20gdGhlIEFNIC0tIGFkZCBpdCB0byBvdXIgcXVldWUgKi8KKwkJaW50CQkJYmF0Y2hJbmRl eCA9IGJhdGNocXVldWUtPm5leHRCYXRjaDsKKworCQlJTkRFWF9TQ0FOX0JBVENIKHNjYW4sIGJh dGNoSW5kZXgpID0gYmF0Y2g7CisKKwkJYmF0Y2hxdWV1ZS0+bmV4dEJhdGNoKys7CisKKwkJREVC VUdfTE9HKCJiYXRjaF9nZXRuZXh0IGhlYWRCYXRjaCAlZCBuZXh0QmF0Y2ggJWQgYmF0Y2ggJXAi LAorCQkJCSAgYmF0Y2hxdWV1ZS0+aGVhZEJhdGNoLCBiYXRjaHF1ZXVlLT5uZXh0QmF0Y2gsIGJh dGNoKTsKKwl9CisJZWxzZQorCQliYXRjaHF1ZXVlLT5maW5pc2hlZCA9IHRydWU7CisKKwliYXRj aF9hc3NlcnRfYmF0Y2hlc192YWxpZChzY2FuKTsKKworCWJhdGNoX2RlYnVnX3ByaW50X2JhdGNo ZXMoImJhdGNoX2dldG5leHQgLyBlbmQiLCBzY2FuKTsKKworCXJldHVybiAoYmF0Y2ggIT0gTlVM TCk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0KKyAqCQlpbmRleF9iYXRjaF9yZXNldCAtIHJl c2V0IGJhdGNoIHF1ZXVlIGFuZCByZWFkIHBvc2l0aW9uCisgKgorICogUmVzZXRzIGFsbCBsb2Fk ZWQgYmF0Y2hlcyBpbiB0aGUgcXVldWUsIGFuZCByZXNldHMgdGhlIHJlYWQgcG9zaXRpb24gdG8g dGhlCisgKiBpbml0aWFsIHN0YXRlIChvciBqdXN0IGluaXRpYWxpemUgcXVldWUgc3RhdGUpLiAg V2hlbiAnY29tcGxldGUnIGlzIHRydWUsCisgKiBhbHNvIGZyZWVzIHRoZSBzY2FuJ3MgbWFya2Vk IGJhdGNoIChpZiBhbnkpLCB3aGljaCBpcyB1c2VmdWwgd2hlbiBlbmRpbmcgYW4KKyAqIGFtZ2V0 YmF0Y2gtYmFzZWQgaW5kZXggc2Nhbi4KKyAqIC0tLS0tLS0tLS0tLS0tLS0KKyAqLwordm9pZAor aW5kZXhfYmF0Y2hfcmVzZXQoSW5kZXhTY2FuRGVzYyBzY2FuLCBib29sIGNvbXBsZXRlKQorewor CUJhdGNoUXVldWUgKmJhdGNocXVldWUgPSBzY2FuLT5iYXRjaHF1ZXVlOworCisJLyogYmFpbCBv dXQgaWYgYmF0Y2hpbmcgbm90IGVuYWJsZWQgKi8KKwlpZiAoIWJhdGNocXVldWUpCisJCXJldHVy bjsKKworCWJhdGNoX2Fzc2VydF9iYXRjaGVzX3ZhbGlkKHNjYW4pOworCWJhdGNoX2RlYnVnX3By aW50X2JhdGNoZXMoImluZGV4X2JhdGNoX3Jlc2V0Iiwgc2Nhbik7CisJQXNzZXJ0KHNjYW4tPnhz X2hlYXBmZXRjaCk7CisKKwkvKiByZXNldCB0aGUgcG9zaXRpb25zICovCisJYmF0Y2hfcmVzZXRf cG9zKCZiYXRjaHF1ZXVlLT5yZWFkUG9zKTsKKworCS8qCisJICogV2l0aCAiY29tcGxldGUiIHJl c2V0LCBtYWtlIHN1cmUgdG8gYWxzbyBmcmVlIHRoZSBtYXJrZWQgYmF0Y2gsIGVpdGhlcgorCSAq IGJ5IGp1c3QgZm9yZ2V0dGluZyBpdCAoaWYgaXQncyBzdGlsbCBpbiB0aGUgcXVldWUpLCBvciBi eSBleHBsaWNpdGx5CisJICogZnJlZWluZyBpdC4KKwkgKi8KKwlpZiAoY29tcGxldGUgJiYgdW5s aWtlbHkoYmF0Y2hxdWV1ZS0+bWFya0JhdGNoICE9IE5VTEwpKQorCXsKKwkJQmF0Y2hRdWV1ZUl0 ZW1Qb3MgKm1hcmtQb3MgPSAmYmF0Y2hxdWV1ZS0+bWFya1BvczsKKwkJQmF0Y2hJbmRleFNjYW4g bWFya0JhdGNoID0gYmF0Y2hxdWV1ZS0+bWFya0JhdGNoOworCisJCS8qIGFsd2F5cyByZXNldCB0 aGUgcG9zaXRpb24sIGZvcmdldCB0aGUgbWFya2VkIGJhdGNoICovCisJCWJhdGNocXVldWUtPm1h cmtCYXRjaCA9IE5VTEw7CisKKwkJLyoKKwkJICogSWYgd2UndmUgYWxyZWFkeSBtb3ZlZCBwYXN0 IHRoZSBtYXJrZWQgYmF0Y2ggKGl0J3Mgbm90IGluIHRoZQorCQkgKiBjdXJyZW50IHF1ZXVlKSwg ZnJlZSBpdCBleHBsaWNpdGx5LiBPdGhlcndpc2UgaXQnbGwgYmUgaW4gdGhlIGZyZWVkCisJCSAq IGxhdGVyLgorCQkgKi8KKwkJaWYgKG1hcmtQb3MtPmJhdGNoIDwgYmF0Y2hxdWV1ZS0+aGVhZEJh dGNoIHx8CisJCQltYXJrUG9zLT5iYXRjaCA+PSBiYXRjaHF1ZXVlLT5uZXh0QmF0Y2gpCisJCQli YXRjaF9mcmVlKHNjYW4sIG1hcmtCYXRjaCk7CisKKwkJLyogcmVzZXQgcG9zaXRpb24gb25seSBh ZnRlciB0aGUgcXVldWUgcmFuZ2UgY2hlY2sgKi8KKwkJYmF0Y2hfcmVzZXRfcG9zKCZiYXRjaHF1 ZXVlLT5tYXJrUG9zKTsKKwl9CisKKwkvKiBub3cgcmVsZWFzZSBhbGwgb3RoZXIgY3VycmVudGx5 IGxvYWRlZCBiYXRjaGVzICovCisJd2hpbGUgKGJhdGNocXVldWUtPmhlYWRCYXRjaCA8IGJhdGNo cXVldWUtPm5leHRCYXRjaCkKKwl7CisJCUJhdGNoSW5kZXhTY2FuIGJhdGNoID0gSU5ERVhfU0NB Tl9CQVRDSChzY2FuLCBiYXRjaHF1ZXVlLT5oZWFkQmF0Y2gpOworCisJCURFQlVHX0xPRygiZnJl ZWluZyBiYXRjaCAlZCAlcCIsIGJhdGNocXVldWUtPmhlYWRCYXRjaCwgYmF0Y2gpOworCisJCWJh dGNoX2ZyZWUoc2NhbiwgYmF0Y2gpOworCisJCS8qIHVwZGF0ZSB0aGUgdmFsaWQgcmFuZ2UsIHNv IHRoYXQgYXNzZXJ0cyAvIGRlYnVnZ2luZyB3b3JrcyAqLworCQliYXRjaHF1ZXVlLT5oZWFkQmF0 Y2grKzsKKwl9CisKKwkvKiByZXNldCByZWxldmFudCBiYXRjaCBzdGF0ZSBmaWVsZHMgKi8KKwli YXRjaHF1ZXVlLT5oZWFkQmF0Y2ggPSAwOwkvKiBpbml0aWFsIGJhdGNoICovCisJYmF0Y2hxdWV1 ZS0+bmV4dEJhdGNoID0gMDsJLyogaW5pdGlhbCBiYXRjaCBpcyBlbXB0eSAqLworCisJYmF0Y2hx dWV1ZS0+ZmluaXNoZWQgPSBmYWxzZTsKKworCWJhdGNoX2Fzc2VydF9iYXRjaGVzX3ZhbGlkKHNj YW4pOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tCisgKgkJaW5kZXhfYmF0Y2hfbWFya19wb3Mg LSBtYXJrIGN1cnJlbnQgcG9zaXRpb24gaW4gc2NhbiBmb3IgcmVzdG9yYXRpb24KKyAqCisgKiBT YXZlcyB0aGUgY3VycmVudCByZWFkIHBvc2l0aW9uIGFuZCBhc3NvY2lhdGVkIGJhdGNoIHNvIHRo YXQgdGhlIHNjYW4gY2FuCisgKiBiZSByZXN0b3JlZCB0byB0aGlzIHBvaW50IGxhdGVyLCB2aWEg YSBjYWxsIHRvIGluZGV4X2JhdGNoX3Jlc3RvcmVfcG9zLgorICogVGhlIG1hcmtlZCBiYXRjaCBp cyByZXRhaW5lZCBhbmQgbm90IGZyZWVkIHVudGlsIGEgbmV3IG1hcmsgaXMgc2V0IG9yIHRoZQor ICogc2NhbiBlbmRzIChvciB1bnRpbCB0aGUgbWFyayBpcyByZXN0b3JlZCkuCisgKiAtLS0tLS0t LS0tLS0tLS0tCisgKi8KK3ZvaWQKK2luZGV4X2JhdGNoX21hcmtfcG9zKEluZGV4U2NhbkRlc2Mg c2NhbikKK3sKKwlCYXRjaFF1ZXVlICpiYXRjaHF1ZXVlID0gc2Nhbi0+YmF0Y2hxdWV1ZTsKKwlC YXRjaFF1ZXVlSXRlbVBvcyAqbWFya1BvcyA9ICZiYXRjaHF1ZXVlLT5tYXJrUG9zOworCUJhdGNo SW5kZXhTY2FuIG1hcmtCYXRjaCA9IGJhdGNocXVldWUtPm1hcmtCYXRjaDsKKworCS8qCisJICog RnJlZSB0aGUgcHJldmlvdXMgbWFyayBiYXRjaCAoaWYgYW55KSwgYnV0IG9ubHkgaWYgdGhlIGJh dGNoIGlzIG5vCisJICogbG9uZ2VyIHZhbGlkIChpbiB0aGUgY3VycmVudCBoZWFkL25leHQgcmFu Z2UpLiAgTm90ZSB0aGF0IHdlIGRvbid0IGhhdmUKKwkgKiB0byBkbyB0aGlzIGluIHRoZSBjb21t b24gY2FzZSB3aGVyZSB3ZSBtYXJrIGEgcG9zaXRpb24gdGhhdCBjb21lcyBmcm9tCisJICogb3Vy IGN1cnJlbnQgcmVhZEJhdGNoLgorCSAqLworCWlmIChtYXJrQmF0Y2ggIT0gTlVMTCAmJiAobWFy a1Bvcy0+YmF0Y2ggPCBiYXRjaHF1ZXVlLT5oZWFkQmF0Y2ggfHwKKwkJCQkJCQkgIG1hcmtQb3Mt PmJhdGNoID49IGJhdGNocXVldWUtPm5leHRCYXRjaCkpCisJeworCQliYXRjaHF1ZXVlLT5tYXJr QmF0Y2ggPSBOVUxMOworCQliYXRjaF9mcmVlKHNjYW4sIG1hcmtCYXRjaCk7CisJfQorCisJLyog Y29weSB0aGUgcmVhZCBwb3NpdGlvbiAqLworCWJhdGNocXVldWUtPm1hcmtQb3MgPSBiYXRjaHF1 ZXVlLT5yZWFkUG9zOworCWJhdGNocXVldWUtPm1hcmtCYXRjaCA9IElOREVYX1NDQU5fQkFUQ0go c2NhbiwgYmF0Y2hxdWV1ZS0+bWFya1Bvcy5iYXRjaCk7CisKKwkvKiByZWFkUG9zL21hcmtQb3Mg bXVzdCBiZSB2YWxpZCAqLworCWJhdGNoX2Fzc2VydF9wb3NfdmFsaWQoc2NhbiwgJmJhdGNocXVl dWUtPm1hcmtQb3MpOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tCisgKgkJaW5kZXhfYmF0Y2hf cmVzdG9yZV9wb3MgLSByZXN0b3JlIHNjYW4gdG8gYSBwcmV2aW91c2x5IG1hcmtlZCBwb3NpdGlv bgorICoKKyAqIFJlc3RvcmVzIHRoZSBzY2FuIHRvIGEgcG9zaXRpb24gcHJldmlvdXNseSBzYXZl ZCBieSBpbmRleF9iYXRjaF9tYXJrX3Bvcy4KKyAqIFRoZSBtYXJrZWQgYmF0Y2ggaXMgcmVzdG9y ZWQgYXMgdGhlIGN1cnJlbnQgYmF0Y2gsIGFsbG93aW5nIHRoZSBzY2FuIHRvCisgKiByZXN1bWUg ZnJvbSB0aGUgbWFya2VkIHBvc2l0aW9uLiAgQWxzbyBub3RpZmllcyB0aGUgaW5kZXggQU0gdmlh IGEgY2FsbCB0bworICogaXRzIGFtcG9zcmVzZXQgcm91dGluZSwgd2hpY2ggYWxsb3dzIGl0IHRv IGludmFsaWRhdGUgYW55IHByaXZhdGUgc3RhdGUKKyAqIHRoYXQgaW5kZXBlbmRlbnRseSB0cmFj a3Mgc2NhbiBwcm9ncmVzcyAoc3VjaCBhcyBhcnJheSBrZXkgc3RhdGUpCisgKgorICogRnVuY3Rp b24gY3VycmVudGx5IGp1c3QgZGlzY2FyZHMgbW9zdCBiYXRjaCBxdWV1ZSBzdGF0ZS4gIEl0IG1p Z2h0IG1ha2UKKyAqIHNlbnNlIHRvIHRlYWNoIGl0IHRvIGhvbGQgb24gdG8gb3RoZXIgbmVhcmJ5 IGJhdGNoZXMgKHN0aWxsLWhlbGQgYmF0Y2hlcworICogdGhhdCBhcmUgbGlrZWx5IHRvIGJlIG5l ZWRlZCBvbmNlIHRoZSBzY2FuIGZpbmlzaGVzIHJldHVybmluZyBtYXRjaGluZworICogaXRlbXMg ZnJvbSB0aGUgcmVzdG9yZWQgYmF0Y2gpIGFzIGFuIG9wdGltaXphdGlvbi4gIFN1Y2ggYSBzY2hl bWUgd291bGQKKyAqIGhhdmUgdGhlIGJlbmVmaXQgb2YgYXZvaWRpbmcgcmVwZWF0IGNhbGxzIHRv IGFtZ2V0YmF0Y2gvcmVwZWF0ZWRseSByZWFkaW5nCisgKiB0aGUgc2FtZSBpbmRleCBwYWdlcy4K KyAqIC0tLS0tLS0tLS0tLS0tLS0KKyAqLwordm9pZAoraW5kZXhfYmF0Y2hfcmVzdG9yZV9wb3Mo SW5kZXhTY2FuRGVzYyBzY2FuKQoreworCUJhdGNoUXVldWUgKmJhdGNocXVldWUgPSBzY2FuLT5i YXRjaHF1ZXVlOworCUJhdGNoUXVldWVJdGVtUG9zICptYXJrUG9zID0gJmJhdGNocXVldWUtPm1h cmtQb3M7CisJQmF0Y2hRdWV1ZUl0ZW1Qb3MgKnJlYWRQb3MgPSAmYmF0Y2hxdWV1ZS0+cmVhZFBv czsKKwlCYXRjaEluZGV4U2NhbiBtYXJrQmF0Y2ggPSBiYXRjaHF1ZXVlLT5tYXJrQmF0Y2g7CisK KwlpZiAocmVhZFBvcy0+YmF0Y2ggPT0gbWFya1Bvcy0+YmF0Y2ggJiYKKwkJcmVhZFBvcy0+YmF0 Y2ggPT0gYmF0Y2hxdWV1ZS0+aGVhZEJhdGNoKQorCXsKKwkJLyoKKwkJICogV2UgZG9uJ3QgaGF2 ZSB0byBkaXNjYXJkIHRoZSBzY2FuJ3Mgc3RhdGUgYWZ0ZXIgYWxsLCBzaW5jZSB0aGUKKwkJICog Y3VycmVudCBoZWFkQmF0Y2ggaXMgYWxzbyB0aGUgYmF0Y2ggdGhhdCB3ZSdyZSByZXN0b3Jpbmcg dG8KKwkJICovCisJCXJlYWRQb3MtPml0ZW0gPSBtYXJrUG9zLT5pdGVtOworCQlyZXR1cm47CisJ fQorCisJLyoKKwkgKiBDYWxsIGFtcG9zcmVzZXQgdG8gbGV0IGluZGV4IEFNIGtub3cgdG8gaW52 YWxpZGF0ZSBhbnkgcHJpdmF0ZSBzdGF0ZQorCSAqIHRoYXQgaW5kZXBlbmRlbnRseSB0cmFja3Mg dGhlIHNjYW4ncyBwcm9ncmVzcworCSAqLworCXNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFt LT5hbXBvc3Jlc2V0KHNjYW4sIG1hcmtCYXRjaCk7CisKKwkvKgorCSAqIFJlc2V0IHRoZSBiYXRj aGluZyBzdGF0ZSwgZXhjZXB0IGZvciB0aGUgbWFya2VkIGJhdGNoLCBhbmQgbWFrZSBpdCBsb29r CisJICogbGlrZSB3ZSBoYXZlIGEgc2luZ2xlIGJhdGNoIC0tIHRoZSBtYXJrZWQgb25lLgorCSAq LworCWluZGV4X2JhdGNoX3Jlc2V0KHNjYW4sIGZhbHNlKTsKKworCWJhdGNocXVldWUtPnJlYWRQ b3MgPSAqbWFya1BvczsKKwliYXRjaHF1ZXVlLT5oZWFkQmF0Y2ggPSBtYXJrUG9zLT5iYXRjaDsK KwliYXRjaHF1ZXVlLT5uZXh0QmF0Y2ggPSBtYXJrUG9zLT5iYXRjaCArIDE7CisKKwlJTkRFWF9T Q0FOX0JBVENIKHNjYW4sIGJhdGNocXVldWUtPm1hcmtQb3MuYmF0Y2gpID0gbWFya0JhdGNoOwor CWJhdGNocXVldWUtPm1hcmtCYXRjaCA9IG1hcmtCYXRjaDsKK30KKworLyoKKyAqIGJhdGNoX2Zy ZWUKKyAqCQlSZWxlYXNlIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggYSBiYXRjaCByZXR1cm5l ZCBieSB0aGUgaW5kZXggQU0uCisgKgorICogQ2FsbGVkIGJ5IHRhYmxlIEFNJ3Mgb3JkZXJlZCBp bmRleCBzY2FuIGltcGxlbWVudGF0aW9uIHdoZW4gaXQgaXMgZmluaXNoZWQKKyAqIHdpdGggYSBi YXRjaCBhbmQgd2lzaGVzIHRvIHJlbGVhc2UgaXRzIHJlc291cmNlcy4KKyAqCisgKiBUaGlzIGNh bGxzIHRoZSBpbmRleCBBTSdzIGFtZnJlZWJhdGNoIGNhbGxiYWNrIHRvIHJlbGVhc2UgQU0tc3Bl Y2lmaWMKKyAqIHJlc291cmNlcywgYW5kIHRvIHNldCBMUF9ERUFEIGJpdHMgb24gdGhlIGJhdGNo J3MgaW5kZXggcGFnZS4gIEl0IGlzbid0CisgKiBzYWZlIGZvciB0YWJsZSBBTXMgdG8gZmV0Y2gg dGFibGUgdHVwbGVzIHVzaW5nIFRJRHMgc2F2ZWQgZnJvbSBhIGJhdGNoIHRoYXQKKyAqIHdhcyBh bHJlYWR5IGZyZWVkOiAnZHJvcFBpbicgc2NhbnMgbmVlZCB0aGUgaW5kZXggQU0gdG8gcmV0YWlu IGEgcGluIG9uIHRoZQorICogVElEJ3MgaW5kZXggcGFnZSwgYXMgYW4gaW50ZXJsb2NrIGFnYWlu c3QgY29uY3VycmVudCBUSUQgcmVjeWNsaW5nLgorICovCit2b2lkCitiYXRjaF9mcmVlKEluZGV4 U2NhbkRlc2Mgc2NhbiwgQmF0Y2hJbmRleFNjYW4gYmF0Y2gpCit7CisJYmF0Y2hfYXNzZXJ0X2Jh dGNoX3ZhbGlkKHNjYW4sIGJhdGNoKTsKKworCS8qIGRvbid0IGZyZWUgdGhlIGJhdGNoIHRoYXQg aXMgbWFya2VkICovCisJaWYgKGJhdGNoID09IHNjYW4tPmJhdGNocXVldWUtPm1hcmtCYXRjaCkK KwkJcmV0dXJuOworCisJc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtZnJlZWJhdGNo KHNjYW4sIGJhdGNoKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLQorICoJCWluZGV4X2JhdGNo X2tpbGxfaXRlbSAtIHJlY29yZCBpdGVtIGZvciBkZWZlcnJlZCBMUF9ERUFEIG1hcmtpbmcKKyAq CisgKiBSZWNvcmRzIHRoZSBpdGVtIGluZGV4IG9mIHRoZSBjdXJyZW50bHktcmVhZCB0dXBsZSBp biByZWFkQmF0Y2gncworICoga2lsbGVkSXRlbXMgYXJyYXkuIFRoZSBpdGVtcycgaW5kZXggdHVw bGVzIHdpbGwgbGF0ZXIgYmUgbWFya2VkIExQX0RFQUQKKyAqIHdoZW4gY3VycmVudCByZWFkQmF0 Y2ggaXMgZnJlZWQgYnkgYW1mcmVlYmF0Y2ggcm91dGluZSAoc2VlIGJhdGNoX2ZyZWUpLgorICog LS0tLS0tLS0tLS0tLS0tLQorICovCit2b2lkCitpbmRleF9iYXRjaF9raWxsX2l0ZW0oSW5kZXhT Y2FuRGVzYyBzY2FuKQoreworCUJhdGNoUXVldWVJdGVtUG9zICpyZWFkUG9zID0gJnNjYW4tPmJh dGNocXVldWUtPnJlYWRQb3M7CisJQmF0Y2hJbmRleFNjYW4gcmVhZEJhdGNoID0gSU5ERVhfU0NB Tl9CQVRDSChzY2FuLCByZWFkUG9zLT5iYXRjaCk7CisKKwliYXRjaF9hc3NlcnRfcG9zX3ZhbGlk KHNjYW4sIHJlYWRQb3MpOworCisJaWYgKHJlYWRCYXRjaC0+a2lsbGVkSXRlbXMgPT0gTlVMTCkK KwkJcmVhZEJhdGNoLT5raWxsZWRJdGVtcyA9IChpbnQgKikKKwkJCXBhbGxvYyhyZWFkQmF0Y2gt Pm1heGl0ZW1zICogc2l6ZW9mKGludCkpOworCWlmIChyZWFkQmF0Y2gtPm51bUtpbGxlZCA8IHJl YWRCYXRjaC0+bWF4aXRlbXMpCisJCXJlYWRCYXRjaC0+a2lsbGVkSXRlbXNbcmVhZEJhdGNoLT5u dW1LaWxsZWQrK10gPSByZWFkUG9zLT5pdGVtOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tCisg KgkJaW5kZXhfYmF0Y2hfZW5kIC0gZW5kIGEgYmF0Y2ggc2NhbiBhbmQgZnJlZSBhbGwgcmVzb3Vy Y2VzCisgKgorICogQ2FsbGVkIHdoZW4gYW4gaW5kZXggc2NhbiBpcyBiZWluZyBlbmRlZCwgcmln aHQgYmVmb3JlIHRoZSBvd25pbmcgc2NhbgorICogZGVzY3JpcHRvciBnb2VzIGF3YXkuICBDbGVh bnMgdXAgYWxsIGJhdGNoIHJlbGF0ZWQgcmVzb3VyY2VzLgorICogLS0tLS0tLS0tLS0tLS0tLQor ICovCit2b2lkCitpbmRleF9iYXRjaF9lbmQoSW5kZXhTY2FuRGVzYyBzY2FuKQoreworCWluZGV4 X2JhdGNoX3Jlc2V0KHNjYW4sIHRydWUpOworCisJLyogYmFpbCBvdXQgd2l0aG91dCBiYXRjaGlu ZyAqLworCWlmICghc2Nhbi0+YmF0Y2hxdWV1ZSkKKwkJcmV0dXJuOworCisJZm9yIChpbnQgaSA9 IDA7IGkgPCBJTkRFWF9TQ0FOX0NBQ0hFX0JBVENIRVM7IGkrKykKKwl7CisJCWlmIChzY2FuLT5i YXRjaHF1ZXVlLT5jYWNoZVtpXSA9PSBOVUxMKQorCQkJY29udGludWU7CisKKwkJcGZyZWUoc2Nh bi0+YmF0Y2hxdWV1ZS0+Y2FjaGVbaV0pOworCX0KKworCXBmcmVlKHNjYW4tPmJhdGNocXVldWUp OworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgKgkJCXV0aWxpdHkgZnVuY3Rpb25zIGNhbGxlZCBieSBhbWdl dGJhdGNoIGluZGV4IEFNcworICoKKyAqIFRoZXNlIGZ1bmN0aW9ucyBtYW5hZ2UgYmF0Y2ggYWxs b2NhdGlvbiwgdW5sb2NrL3BpbiBtYW5hZ2VtZW50LCBhbmQgYmF0Y2gKKyAqIHJlc291cmNlIHJl Y3ljbGluZy4gIEluZGV4IEFNcyBpbXBsZW1lbnRpbmcgYW1nZXRiYXRjaCBzaG91bGQgdXNlIHRo ZXNlCisgKiByYXRoZXIgdGhhbiBtYW5hZ2luZyBidWZmZXJzIGRpcmVjdGx5LgorICogLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorICovCisKKy8qCisgKiBpbmRleGFtX3V0aWxfYmF0Y2hfdW5sb2NrIC0gRHJvcCBsb2NrIGFu ZCBjb25kaXRpb25hbGx5IGRyb3AgcGluIG9uIGJhdGNoIHBhZ2UKKyAqCisgKiBVbmxvY2tzIGNh bGxlcidzIGJhdGNoLT5idWYgaW4gcHJlcGFyYXRpb24gZm9yIGFtZ2V0YmF0Y2ggcmV0dXJuaW5n IGl0ZW1zCisgKiBzYXZlZCBpbiB0aGF0IGJhdGNoLiAgTWFuYWdlcyB0aGUgZGV0YWlscyBvZiBk cm9wcGluZyB0aGUgbG9jayBhbmQgcG9zc2libHkKKyAqIHRoZSBwaW4gZm9yIGluZGV4IEFNIGNh bGxlciAoZHJvcHBpbmcgdGhlIHBpbiBwcmV2ZW50cyBWQUNVVU0gZnJvbSBibG9ja2luZworICog b24gYWNxdWlyaW5nIGEgY2xlYW51cCBsb2NrLCBidXQgaXNuJ3QgYWx3YXlzIHNhZmUpLgorICoK KyAqIE9ubHkgY2FsbCBoZXJlIHdoZW4gYSBiYXRjaCBoYXMgb25lIG9yIG1vcmUgbWF0Y2hpbmcg aXRlbXMgdG8gcmV0dXJuIHVzaW5nCisgKiBhbWdldGJhdGNoIChvciBmb3IgYW1nZXRiaXRtYXAg dG8gbG9hZCBpbnRvIGl0cyBiaXRtYXAgb2YgbWF0Y2hpbmcgVElEcykuCisgKiBXaGVuIGFuIGlu ZGV4IHBhZ2UgaGFzIG5vIG1hdGNoZXMsIGl0J3MgYWx3YXlzIHNhZmUgZm9yIGluZGV4IEFNcyB0 byBkcm9wCisgKiBib3RoIHRoZSBsb2NrIGFuZCB0aGUgcGluIGZvciB0aGVtc2VsdmVzLgorICoK KyAqIE5vdGU6IEl0IGlzIGNvbnZlbmllbnQgZm9yIGluZGV4IEFNcyB0aGF0IGltcGxlbWVudCBi b3RoIGFtZ2V0Yml0bWFwIGFuZAorICogYW1nZXRiaXRtYXAgdG8gY29uc2lzdGVudGx5IHVzZSB0 aGUgc2FtZSBiYXRjaCBtYW5hZ2VtZW50IGFwcHJvYWNoLCBzaW5jZQorICogdGhhdCBhdm9pZHMg aW50cm9kdWNpbmcgc3BlY2lhbCBjYXNlcyB0byBsb3dlci1sZXZlbCBjb2RlLiAgV2UgYWx3YXlz IGRyb3AKKyAqIGJvdGggdGhlIGxvY2sgYW5kIHRoZSBwaW4gb24gYmF0Y2gncyBwYWdlIG9uIGJl aGFsZiBvZiBhbWdldGJpdG1hcCBjYWxsZXJzLgorICogU3VjaCBhbWdldGJpdG1hcCBjYWxsZXJz IG11c3QgYmUgY2FyZWZ1bCB0byBmcmVlIGFsbCBiYXRjaGVzIHdpdGggbWF0Y2hpbmcKKyAqIGl0 ZW1zIG9uY2UgdGhleSdyZSBkb25lIHNhdmluZyB0aGUgbWF0Y2hpbmcgVElEcyAodGhlcmUgd2ls bCBuZXZlciBiZSBhbnkKKyAqIGNhbGxzIHRvIGFtZnJlZWJhdGNoLCBzbyBhbWdldGJpdG1hcCBt dXN0IGNhbGwgaW5kZXhhbV91dGlsX2JhdGNoX3JlbGVhc2UKKyAqIGRpcmVjdGx5LCBpbiBsaWV1 IG9mIGEgZGVmZXJyZWQgY2FsbCB0byBhbWZyZWViYXRjaCBmcm9tIGNvcmUgY29kZSkuCisgKi8K K3ZvaWQKK2luZGV4YW1fdXRpbF9iYXRjaF91bmxvY2soSW5kZXhTY2FuRGVzYyBzY2FuLCBCYXRj aEluZGV4U2NhbiBiYXRjaCkKK3sKKwlSZWxhdGlvbglyZWwgPSBzY2FuLT5pbmRleFJlbGF0aW9u OworCWJvb2wJCWRyb3BQaW4gPSAhc2Nhbi0+YmF0Y2hxdWV1ZSB8fCBzY2FuLT5iYXRjaHF1ZXVl LT5kcm9wUGluOworCisJLyogYmF0Y2ggbXVzdCBoYXZlIG9uZSBvciBtb3JlIG1hdGNoaW5nIGl0 ZW1zIHJldHVybmVkIGJ5IGluZGV4IEFNICovCisJQXNzZXJ0KGJhdGNoLT5maXJzdEl0ZW0gPj0g MCAmJiBiYXRjaC0+Zmlyc3RJdGVtIDw9IGJhdGNoLT5sYXN0SXRlbSk7CisKKwlpZiAoIWRyb3BQ aW4pCisJeworCQlpZiAoIVJlbGF0aW9uVXNlc0xvY2FsQnVmZmVycyhyZWwpKQorCQkJVkFMR1JJ TkRfTUFLRV9NRU1fTk9BQ0NFU1MoQnVmZmVyR2V0UGFnZShiYXRjaC0+YnVmKSwgQkxDS1NaKTsK KworCQkvKiBKdXN0IGRyb3AgdGhlIGxvY2sgKG5vdCB0aGUgcGluKSAqLworCQlMb2NrQnVmZmVy KGJhdGNoLT5idWYsIEJVRkZFUl9MT0NLX1VOTE9DSyk7CisJCXJldHVybjsKKwl9CisKKwlpZiAo c2Nhbi0+YmF0Y2hxdWV1ZSkKKwl7CisJCS8qIGFtZ2V0YmF0Y2ggKG5vdCBhbWdldGJpdG1hcCkg Y2FsbGVyICovCisJCUFzc2VydChzY2FuLT5oZWFwUmVsYXRpb24gIT0gTlVMTCk7CisKKwkJLyoK KwkJICogSGF2ZSB0byBzZXQgYmF0Y2gtPmxzbiBzbyB0aGF0IGFtZnJlZWJhdGNoIGhhcyBhIHdh eSB0byBkZXRlY3Qgd2hlbgorCQkgKiBjb25jdXJyZW50IGhlYXAgVElEIHJlY3ljbGluZyBieSBW QUNVVU0gbWlnaHQgaGF2ZSB0YWtlbiBwbGFjZS4KKwkJICogSXQnbGwgb25seSBiZSBzYWZlIHRv IHNldCBhbnkgaW5kZXggdHVwbGUgTFBfREVBRCBiaXRzIHdoZW4gdGhlCisJCSAqIHBhZ2UgTFNO IGhhc24ndCBhZHZhbmNlZC4KKwkJICovCisJCUFzc2VydChSZWxhdGlvbk5lZWRzV0FMKHJlbCkp OworCQliYXRjaC0+bHNuID0gQnVmZmVyR2V0TFNOQXRvbWljKGJhdGNoLT5idWYpOworCX0KKwor CS8qIERyb3AgYm90aCB0aGUgbG9jayBhbmQgdGhlIHBpbiAqLworCUxvY2tCdWZmZXIoYmF0Y2gt PmJ1ZiwgQlVGRkVSX0xPQ0tfVU5MT0NLKTsKKwlpZiAoIVJlbGF0aW9uVXNlc0xvY2FsQnVmZmVy cyhyZWwpKQorCQlWQUxHUklORF9NQUtFX01FTV9OT0FDQ0VTUyhCdWZmZXJHZXRQYWdlKGJhdGNo LT5idWYpLCBCTENLU1opOworCVJlbGVhc2VCdWZmZXIoYmF0Y2gtPmJ1Zik7CisJYmF0Y2gtPmJ1 ZiA9IEludmFsaWRCdWZmZXI7IC8qIGRlZmVuc2l2ZSAqLworfQorCisvKgorICogaW5kZXhhbV91 dGlsX2JhdGNoX2FsbG9jCisgKgkJQWxsb2NhdGUgYSBiYXRjaCB0aGF0IGNhbiBmaXQgbWF4aXRl bXMtbWFueSBCYXRjaE1hdGNoaW5nSXRlbXMuCisgKgorICogUmV0dXJucyBhIEJhdGNoSW5kZXhT Y2FuIHNpemVkIHRvIGNhbGxlcidzIHJlcXVpcmVkIG1heGl0ZW1zIGNhcGFjaXR5LgorICogVGhp cyB3aWxsIGVpdGhlciBiZSBhIG5ld2x5IGFsbG9jYXRlZCBiYXRjaCwgb3IgYSBiYXRjaCByZXVz ZWQgZnJvbSBhIGNhY2hlCisgKiBvZiBiYXRjaGVzIGFscmVhZHkgZnJlZWQgYnkgY2FsbGluZyBp bmRleGFtX3V0aWxfYmF0Y2hfcmVsZWFzZS4gIFNlZQorICogY29tbWVudHMgYWJvdmUgaW5kZXhh bV91dGlsX2JhdGNoX3JlbGVhc2UuCisgKgorICogV2UgYXNzdW1lIHRoYXQgYWxsIGNhbGxzIGhl cmUgZHVyaW5nIHRoZSBzYW1lIGluZGV4IHNjYW4gd2lsbCBhbHdheXMgdXNlCisgKiB0aGUgc2Ft ZSBtYXhpdGVtcyBhbmQgd2FudF9pdHVwIGFyZ3VtZW50cy4gIEluZGV4IEFNcyB0aGF0IHVzZSBi YXRjaGVzCisgKiBzaG91bGQgY2FsbCB0aGlzIGZyb20gZWl0aGVyIHRoZWlyIGFtZ2V0YmF0Y2gg b3IgYW1nZXRiaXRtYXAgcm91dGluZXMuCisgKiBUaGV5IG11c3Qgbm90IGNhbGwgaGVyZSBmcm9t IG90aGVyIHJvdXRpbmVzIChwYXJ0aWN1bGFybHkgbm90IGFtZnJlZWJhdGNoKS4KKyAqLworQmF0 Y2hJbmRleFNjYW4KK2luZGV4YW1fdXRpbF9iYXRjaF9hbGxvYyhJbmRleFNjYW5EZXNjIHNjYW4s IGludCBtYXhpdGVtcywgYm9vbCB3YW50X2l0dXApCit7CisJQmF0Y2hJbmRleFNjYW4gYmF0Y2gg PSBOVUxMOworCisJLyogRmlyc3QgbG9vayBmb3IgYW4gZXhpc3RpbmcgYmF0Y2ggZnJvbSBxdWV1 ZSdzIGNhY2hlIG9mIGJhdGNoZXMgKi8KKwlpZiAoc2Nhbi0+YmF0Y2hxdWV1ZSAhPSBOVUxMKQor CXsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBJTkRFWF9TQ0FOX0NBQ0hFX0JBVENIRVM7IGkrKykK KwkJeworCQkJaWYgKHNjYW4tPmJhdGNocXVldWUtPmNhY2hlW2ldICE9IE5VTEwpCisJCQl7CisJ CQkJLyogUmV0dXJuIGNhY2hlZCB1bnJlZmVyZW5jZWQgYmF0Y2ggKi8KKwkJCQliYXRjaCA9IHNj YW4tPmJhdGNocXVldWUtPmNhY2hlW2ldOworCQkJCXNjYW4tPmJhdGNocXVldWUtPmNhY2hlW2ld ID0gTlVMTDsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKworCWlmICghYmF0Y2gpCisJewor CQliYXRjaCA9IHBhbGxvYyhvZmZzZXRvZihCYXRjaEluZGV4U2NhbkRhdGEsIGl0ZW1zKSArCisJ CQkJCSAgIHNpemVvZihCYXRjaE1hdGNoaW5nSXRlbSkgKiBtYXhpdGVtcyk7CisKKwkJYmF0Y2gt Pm1heGl0ZW1zID0gbWF4aXRlbXM7CisKKwkJLyoKKwkJICogSWYgd2UgYXJlIGRvaW5nIGFuIGlu ZGV4LW9ubHkgc2Nhbiwgd2UgbmVlZCBhIHR1cGxlIHN0b3JhZ2UKKwkJICogd29ya3NwYWNlLiBX ZSBhbGxvY2F0ZSBCTENLU1ogZm9yIHRoaXMsIHdoaWNoIHNob3VsZCBhbHdheXMgZ2l2ZQorCQkg KiB0aGUgaW5kZXggQU0gZW5vdWdoIHNwYWNlIHRvIGZpdCBhIGZ1bGwgcGFnZSdzIHdvcnRoIG9m IHR1cGxlcy4KKwkJICovCisJCWJhdGNoLT5jdXJyVHVwbGVzID0gTlVMTDsKKwkJaWYgKHdhbnRf aXR1cCkKKwkJCWJhdGNoLT5jdXJyVHVwbGVzID0gcGFsbG9jKEJMQ0tTWik7CisKKwkJLyoKKwkJ ICogQmF0Y2hlcyBhbGxvY2F0ZSBraWxsZWRJdGVtcyBsYXppbHkgKHRob3VnaCBub3RlIHRoYXQg Y2FjaGVkCisJCSAqIGJhdGNoZXMga2VlcCB0aGVpciBraWxsZWRJdGVtcyBhbGxvY2F0aW9uIHdo ZW4gcmVjeWNsZWQpCisJCSAqLworCQliYXRjaC0+a2lsbGVkSXRlbXMgPSBOVUxMOworCX0KKwor CS8qIHdhbnRfaXR1cCBjYWxsZXJzIG11c3QgZ2V0IGEgY3VyclR1cGxlcyBzcGFjZSAqLworCUFz c2VydChiYXRjaC0+bWF4aXRlbXMgPT0gbWF4aXRlbXMpOworCUFzc2VydCghKHdhbnRfaXR1cCAm JiAoYmF0Y2gtPmN1cnJUdXBsZXMgPT0gTlVMTCkpKTsKKworCS8qIHNoYXJlZCBpbml0aWFsaXph dGlvbiAqLworCWJhdGNoLT5idWYgPSBJbnZhbGlkQnVmZmVyOworCWJhdGNoLT5maXJzdEl0ZW0g PSAtMTsKKwliYXRjaC0+bGFzdEl0ZW0gPSAtMTsKKwliYXRjaC0+bnVtS2lsbGVkID0gMDsKKwor CXJldHVybiBiYXRjaDsKK30KKworLyoKKyAqIGluZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlCisg KgkJRWl0aGVyIHN0YXNoIHRoZSBiYXRjaCBpbiBhIHNtYWxsIGNhY2hlIGZvciByZXVzZSwgb3Ig ZnJlZSBpdC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSBpbmRleCBBTXMgdG8g cmVsZWFzZSBhIGJhdGNoIGFsbG9jYXRlZCBieQorICogaW5kZXhhbV91dGlsX2JhdGNoX2FsbG9j LiAgQmF0Y2hlcyBhcmUgY2FjaGVkIGhlcmUgZm9yIHJldXNlICh3aGVuIHNjYW4KKyAqIGhhc24n dCBhbHJlYWR5IGZpbmlzaGVkKSB0byByZWR1Y2UgcGFsbG9jL3BmcmVlIG92ZXJoZWFkLgorICoK KyAqIEl0J3Mgc2FmZSB0byByZWxlYXNlIGEgYmF0Y2ggaW1tZWRpYXRlbHkgd2hlbiBpdCB3YXMg dXNlZCB0byByZWFkIGEgcGFnZQorICogdGhhdCByZXR1cm5lZCBubyBtYXRjaGVzIHRvIHRoZSBz Y2FuLiAgQmF0Y2hlcyBhY3R1YWxseSByZXR1cm5lZCBieSBpbmRleAorICogQU0ncyBhbWdldGJh dGNoIHJvdXRpbmUgKGkuZS4gYmF0Y2hlcyBmb3IgcGFnZXMgd2l0aCBvbmUgb3IgbW9yZSBtYXRj aGVzKQorICogbXVzdCBiZSByZWxlYXNlZCBieSBjYWxsaW5nIGhlcmUgYXQgdGhlIGVuZCBvZiB0 aGVpciBhbWZyZWViYXRjaCByb3V0aW5lLgorICogSW5kZXggQU1zIHRoYXQgdXNlcyBiYXRjaGVz IHNob3VsZCBjYWxsIGhlcmUgdG8gcmVsZWFzZSBhIGJhdGNoIGZyb20gYW55IG9mCisgKiB0aGVp ciBhbWdldGJhdGNoLCBhbWdldGJpdG1hcCwgYW5kIGFtZnJlZWJhdGNoIHJvdXRpbmVzLgorICov Cit2b2lkCitpbmRleGFtX3V0aWxfYmF0Y2hfcmVsZWFzZShJbmRleFNjYW5EZXNjIHNjYW4sIEJh dGNoSW5kZXhTY2FuIGJhdGNoKQoreworCUFzc2VydChiYXRjaC0+YnVmID09IEludmFsaWRCdWZm ZXIpOworCisJaWYgKHNjYW4tPmJhdGNocXVldWUpCisJeworCQkvKiBhbWdldGJhdGNoIHNjYW4g Y2FsbGVyICovCisJCUFzc2VydChzY2FuLT5oZWFwUmVsYXRpb24gIT0gTlVMTCk7CisKKwkJaWYg KHNjYW4tPmJhdGNocXVldWUtPmZpbmlzaGVkKQorCQl7CisJCQkvKiBEb24ndCBib3RoZXIgdXNp bmcgY2FjaGUgd2hlbiBzY2FuIGlzIGVuZGluZyAqLworCQkJcGZyZWUoYmF0Y2gpOworCQkJcmV0 dXJuOworCQl9CisKKwkJLyoKKwkJICogVXNlIGNhY2hlLiAgVGhpcyBpcyBnZW5lcmFsbHkgb25s eSBiZW5lZmljaWFsIHdoZW4gdGhlcmUgYXJlIG1hbnkKKwkJICogc21hbGwgcmVzY2FucyBvZiBh biBpbmRleC4KKwkJICovCisJCWZvciAoaW50IGkgPSAwOyBpIDwgSU5ERVhfU0NBTl9DQUNIRV9C QVRDSEVTOyBpKyspCisJCXsKKwkJCWlmIChzY2FuLT5iYXRjaHF1ZXVlLT5jYWNoZVtpXSA9PSBO VUxMKQorCQkJeworCQkJCS8qIGZvdW5kIGVtcHR5IHNsb3QsIHdlJ3JlIGRvbmUgKi8KKwkJCQlz Y2FuLT5iYXRjaHF1ZXVlLT5jYWNoZVtpXSA9IGJhdGNoOworCQkJCXJldHVybjsKKwkJCX0KKwkJ fQorCisJCS8qCisJCSAqIEZhaWxlZCB0byBmaW5kIGEgZnJlZSBzbG90IGZvciB0aGlzIGJhdGNo LiAgV2UnbGwganVzdCBmcmVlIGl0CisJCSAqIG91cnNlbHZlcy4gIFRoaXMgaXNuJ3QgcmVhbGx5 IGV4cGVjdGVkOyBpdCdzIGp1c3QgZGVmZW5zaXZlLgorCQkgKi8KKwkJaWYgKGJhdGNoLT5raWxs ZWRJdGVtcykKKwkJCXBmcmVlKGJhdGNoLT5raWxsZWRJdGVtcyk7CisJCWlmIChiYXRjaC0+Y3Vy clR1cGxlcykKKwkJCXBmcmVlKGJhdGNoLT5jdXJyVHVwbGVzKTsKKwl9CisJZWxzZQorCXsKKwkJ LyogYW1nZXRiaXRtYXAgc2NhbiBjYWxsZXIgKi8KKwkJQXNzZXJ0KHNjYW4tPmhlYXBSZWxhdGlv biA9PSBOVUxMKTsKKwkJQXNzZXJ0KGJhdGNoLT5raWxsZWRJdGVtcyA9PSBOVUxMKTsKKwkJQXNz ZXJ0KGJhdGNoLT5jdXJyVHVwbGVzID09IE5VTEwpOworCX0KKworCS8qIG5vIGZyZWUgc2xvdCB0 byBzYXZlIHRoaXMgYmF0Y2ggKGV4cGVjdGVkIHdpdGggYW1nZXRiaXRtYXAgY2FsbGVycykgKi8K KwlwZnJlZShiYXRjaCk7Cit9CisKK3N0YXRpYyB2b2lkCitiYXRjaF9kZWJ1Z19wcmludF9iYXRj aGVzKGNvbnN0IGNoYXIgKmxhYmVsLCBJbmRleFNjYW5EZXNjIHNjYW4pCit7CisjaWZkZWYgSU5E RVhBTV9ERUJVRworCUJhdGNoUXVldWUgKmJhdGNocXVldWUgPSBzY2FuLT5iYXRjaHF1ZXVlOwor CisJaWYgKCFzY2FuLT5iYXRjaHF1ZXVlKQorCQlyZXR1cm47CisKKwlpZiAoIUFtUmVndWxhckJh Y2tlbmRQcm9jZXNzKCkpCisJCXJldHVybjsKKwlpZiAoSXNDYXRhbG9nUmVsYXRpb24oc2Nhbi0+ aW5kZXhSZWxhdGlvbikpCisJCXJldHVybjsKKworCURFQlVHX0xPRygiJXM6IGJhdGNoZXMgaGVh ZEJhdGNoICVkIG5leHRCYXRjaCAlZCIsCisJCQkgIGxhYmVsLAorCQkJICBiYXRjaHF1ZXVlLT5o ZWFkQmF0Y2gsIGJhdGNocXVldWUtPm5leHRCYXRjaCk7CisKKwlmb3IgKGludCBpID0gYmF0Y2hx dWV1ZS0+aGVhZEJhdGNoOyBpIDwgYmF0Y2hxdWV1ZS0+bmV4dEJhdGNoOyBpKyspCisJeworCQlC YXRjaEluZGV4U2NhbiBiYXRjaCA9IElOREVYX1NDQU5fQkFUQ0goc2NhbiwgaSk7CisKKwkJREVC VUdfTE9HKCIgICAgYmF0Y2ggJWQgY3VyclBhZ2UgJXUgJXAgZmlyc3RJdGVtICVkIGxhc3RJdGVt ICVkIGtpbGxlZCAlZCIsCisJCQkJICBpLCBiYXRjaC0+Y3VyclBhZ2UsIGJhdGNoLCBiYXRjaC0+ Zmlyc3RJdGVtLAorCQkJCSAgYmF0Y2gtPmxhc3RJdGVtLCBiYXRjaC0+bnVtS2lsbGVkKTsKKwl9 CisjZW5kaWYKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9tZXNvbi5i dWlsZCBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9tZXNvbi5idWlsZAppbmRleCBlMjljMDMw ODkuLmMwMWZmZjcwOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L21lc29u LmJ1aWxkCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9tZXNvbi5idWlsZApAQCAtNSw0 ICs1LDUgQEAgYmFja2VuZF9zb3VyY2VzICs9IGZpbGVzKAogICAnYW12YWxpZGF0ZS5jJywKICAg J2dlbmFtLmMnLAogICAnaW5kZXhhbS5jJywKKyAgJ2luZGV4YmF0Y2guYycsCiApCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHBhZ2UuYyBiL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9uYnRyZWUvbmJ0cGFnZS5jCmluZGV4IGNmYjA3YjJiYy4uMTViNzg4ZTNhIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHBhZ2UuYworKysgYi9zcmMvYmFja2Vu ZC9hY2Nlc3MvbmJ0cmVlL25idHBhZ2UuYwpAQCAtMTAzMyw2ICsxMDMzLDkgQEAgX2J0X3JlbGJ1 ZihSZWxhdGlvbiByZWwsIEJ1ZmZlciBidWYpCiAgKiBMb2NrIGlzIGFjcXVpcmVkIHdpdGhvdXQg YWNxdWlyaW5nIGFub3RoZXIgcGluLiAgVGhpcyBpcyBsaWtlIGEgcmF3CiAgKiBMb2NrQnVmZmVy KCkgY2FsbCwgYnV0IHBlcmZvcm1zIGV4dHJhIHN0ZXBzIG5lZWRlZCBieSBWYWxncmluZC4KICAq CisgKiBOb3RlOiBpbmRleGFtX3V0aWxfYmF0Y2hfdW5sb2NrIGhhcyBzaW1pbGFyIFZhbGdyaW5k IGJ1ZmZlciBsb2NrCisgKiBpbnN0cnVtZW50YXRpb24sIHdoaWNoIHdlIHJlbHkgb24gaGVyZS4K KyAqCiAgKiBOb3RlOiBDYWxsZXIgbWF5IG5lZWQgdG8gY2FsbCBfYnRfY2hlY2twYWdlKCkgd2l0 aCBidWYgd2hlbiBwaW4gb24gYnVmCiAgKiB3YXNuJ3Qgb3JpZ2luYWxseSBhY3F1aXJlZCBpbiBf YnRfZ2V0YnVmKCkgb3IgX2J0X3JlbGFuZGdldGJ1ZigpLgogICovCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlYWRwYWdlLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3Mv bmJ0cmVlL25idHJlYWRwYWdlLmMKaW5kZXggYjNiOGI1NTM0Li5jMGQyMmVlNTEgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVhZHBhZ2UuYworKysgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlYWRwYWdlLmMKQEAgLTMyLDYgKzMyLDcgQEAgdHlwZWRl ZiBzdHJ1Y3QgQlRSZWFkUGFnZVN0YXRlCiB7CiAJLyogSW5wdXQgcGFyYW1ldGVycywgc2V0IGJ5 IF9idF9yZWFkcGFnZSBmb3IgX2J0X2NoZWNra2V5cyAqLwogCVNjYW5EaXJlY3Rpb24gZGlyOwkJ CS8qIGN1cnJlbnQgc2NhbiBkaXJlY3Rpb24gKi8KKwlCbG9ja051bWJlciBjdXJycGFnZTsJCS8q IGN1cnJlbnQgcGFnZSBiZWluZyByZWFkICovCiAJT2Zmc2V0TnVtYmVyIG1pbm9mZjsJCS8qIExv d2VzdCBub24tcGl2b3QgdHVwbGUncyBvZmZzZXQgKi8KIAlPZmZzZXROdW1iZXIgbWF4b2ZmOwkJ LyogSGlnaGVzdCBub24tcGl2b3QgdHVwbGUncyBvZmZzZXQgKi8KIAlJbmRleFR1cGxlCWZpbmFs dHVwOwkJLyogTmVlZGVkIGJ5IHNjYW5zIHdpdGggYXJyYXkga2V5cyAqLwpAQCAtNjMsMTQgKzY0 LDEzIEBAIHN0YXRpYyBib29sIF9idF9zY2FuYmVoaW5kX2NoZWNra2V5cyhJbmRleFNjYW5EZXNj IHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLAogCQkJCQkJCQkJIEluZGV4VHVwbGUgZmluYWx0dXAp Owogc3RhdGljIGJvb2wgX2J0X29wcG9kaXJfY2hlY2trZXlzKEluZGV4U2NhbkRlc2Mgc2Nhbiwg U2NhbkRpcmVjdGlvbiBkaXIsCiAJCQkJCQkJCSAgSW5kZXhUdXBsZSBmaW5hbHR1cCk7Ci1zdGF0 aWMgdm9pZCBfYnRfc2F2ZWl0ZW0oQlRTY2FuT3BhcXVlIHNvLCBpbnQgaXRlbUluZGV4LAotCQkJ CQkJIE9mZnNldE51bWJlciBvZmZudW0sIEluZGV4VHVwbGUgaXR1cCk7Ci1zdGF0aWMgaW50CV9i dF9zZXR1cHBvc3RpbmdpdGVtcyhCVFNjYW5PcGFxdWUgc28sIGludCBpdGVtSW5kZXgsCi0JCQkJ CQkJCSAgT2Zmc2V0TnVtYmVyIG9mZm51bSwgY29uc3QgSXRlbVBvaW50ZXJEYXRhICpoZWFwVGlk LAotCQkJCQkJCQkgIEluZGV4VHVwbGUgaXR1cCk7Ci1zdGF0aWMgaW5saW5lIHZvaWQgX2J0X3Nh dmVwb3N0aW5naXRlbShCVFNjYW5PcGFxdWUgc28sIGludCBpdGVtSW5kZXgsCi0JCQkJCQkJCQkg ICBPZmZzZXROdW1iZXIgb2ZmbnVtLAotCQkJCQkJCQkJICAgSXRlbVBvaW50ZXIgaGVhcFRpZCwg aW50IHR1cGxlT2Zmc2V0KTsKK3N0YXRpYyB2b2lkIF9idF9zYXZlaXRlbShCYXRjaEluZGV4U2Nh biBuZXdiYXRjaCwgaW50IGl0ZW1JbmRleCwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICBJbmRleFR1cGxlIGl0dXAsIGludCAqdHVwbGVPZmZzZXQpOworc3Rh dGljIGludAlfYnRfc2V0dXBwb3N0aW5naXRlbXMoQmF0Y2hJbmRleFNjYW4gbmV3YmF0Y2gsIGlu dCBpdGVtSW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPZmZzZXROdW1i ZXIgb2ZmbnVtLCBjb25zdCBJdGVtUG9pbnRlckRhdGEgKmhlYXBUaWQsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBJbmRleFR1cGxlIGl0dXAsIGludCAqdHVwbGVPZmZzZXQpOwor c3RhdGljIGlubGluZSB2b2lkIF9idF9zYXZlcG9zdGluZ2l0ZW0oQmF0Y2hJbmRleFNjYW4gbmV3 YmF0Y2gsIGludCBpdGVtSW5kZXgsIE9mZnNldE51bWJlciBvZmZudW0sCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBJdGVtUG9pbnRlciBoZWFwVGlkLCBpbnQgYmFzZU9m ZnNldCk7CiBzdGF0aWMgYm9vbCBfYnRfY2hlY2trZXlzKEluZGV4U2NhbkRlc2Mgc2NhbiwgQlRS ZWFkUGFnZVN0YXRlICpwc3RhdGUsIGJvb2wgYXJyYXlLZXlzLAogCQkJCQkJICBJbmRleFR1cGxl IHR1cGxlLCBpbnQgdHVwbmF0dHMpOwogc3RhdGljIGJvb2wgX2J0X2NoZWNrX2NvbXBhcmUoSW5k ZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwKQEAgLTExMSwxNSArMTExLDE1IEBA IHN0YXRpYyBib29sIF9idF92ZXJpZnlfa2V5c193aXRoX2FycmF5a2V5cyhJbmRleFNjYW5EZXNj IHNjYW4pOwogCiAKIC8qCi0gKglfYnRfcmVhZHBhZ2UoKSAtLSBMb2FkIGRhdGEgZnJvbSBjdXJy ZW50IGluZGV4IHBhZ2UgaW50byBzby0+Y3VyclBvcworICoJX2J0X3JlYWRwYWdlKCkgLS0gTG9h ZCBkYXRhIGZyb20gY3VycmVudCBpbmRleCBwYWdlIGludG8gbmV3YmF0Y2guCiAgKgotICogQ2Fs bGVyIG11c3QgaGF2ZSBwaW5uZWQgYW5kIHJlYWQtbG9ja2VkIHNvLT5jdXJyUG9zLmJ1ZjsgdGhl IGJ1ZmZlcidzIHN0YXRlCi0gKiBpcyBub3QgY2hhbmdlZCBoZXJlLiAgQWxzbywgY3VyclBvcy5t b3JlTGVmdCBhbmQgbW9yZVJpZ2h0IG11c3QgYmUgdmFsaWQ7Ci0gKiB0aGV5IGFyZSB1cGRhdGVk IGFzIGFwcHJvcHJpYXRlLiAgQWxsIG90aGVyIGZpZWxkcyBvZiBzby0+Y3VyclBvcyBhcmUKLSAq IGluaXRpYWxpemVkIGZyb20gc2NyYXRjaCBoZXJlLgorICogQ2FsbGVyIG11c3QgaGF2ZSBwaW5u ZWQgYW5kIHJlYWQtbG9ja2VkIG5ld2JhdGNoLmJ1ZjsgdGhlIGJ1ZmZlcidzIHN0YXRlIGlzCisg KiBub3QgY2hhbmdlZCBoZXJlLiAgQWxzbywgcG9zLm1vcmVMZWZ0IGFuZCBtb3JlUmlnaHQgbXVz dCBiZSB2YWxpZDsgdGhleSBhcmUKKyAqIHVwZGF0ZWQgYXMgYXBwcm9wcmlhdGUuICBBbGwgb3Ro ZXIgZmllbGRzIG9mIG5ld2JhdGNoIGFyZSBpbml0aWFsaXplZCBmcm9tCisgKiBzY3JhdGNoIGhl cmUuCiAgKgogICogV2Ugc2NhbiB0aGUgY3VycmVudCBwYWdlIHN0YXJ0aW5nIGF0IG9mZm51bSBh bmQgbW92aW5nIGluIHRoZSBpbmRpY2F0ZWQKLSAqIGRpcmVjdGlvbi4gIEFsbCBpdGVtcyBtYXRj aGluZyB0aGUgc2NhbiBrZXlzIGFyZSBsb2FkZWQgaW50byBjdXJyUG9zLml0ZW1zLgorICogZGly ZWN0aW9uLiAgQWxsIGl0ZW1zIG1hdGNoaW5nIHRoZSBzY2FuIGtleXMgYXJlIHNhdmVkIGluIG5l d2JhdGNoLml0ZW1zLgogICogbW9yZUxlZnQgb3IgbW9yZVJpZ2h0IChhcyBhcHByb3ByaWF0ZSkg aXMgY2xlYXJlZCBpZiBfYnRfY2hlY2trZXlzIHJlcG9ydHMKICAqIHRoYXQgdGhlcmUgY2FuIGJl IG5vIG1vcmUgbWF0Y2hpbmcgdHVwbGVzIGluIHRoZSBjdXJyZW50IHNjYW4gZGlyZWN0aW9uCiAg KiAoY291bGQganVzdCBiZSBmb3IgdGhlIGN1cnJlbnQgcHJpbWl0aXZlIGluZGV4IHNjYW4gd2hl biBzY2FuIGhhcyBhcnJheXMpLgpAQCAtMTMxLDggKzEzMSw4IEBAIHN0YXRpYyBib29sIF9idF92 ZXJpZnlfa2V5c193aXRoX2FycmF5a2V5cyhJbmRleFNjYW5EZXNjIHNjYW4pOwogICogUmV0dXJu cyB0cnVlIGlmIGFueSBtYXRjaGluZyBpdGVtcyBmb3VuZCBvbiB0aGUgcGFnZSwgZmFsc2UgaWYg bm9uZS4KICAqLwogYm9vbAotX2J0X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRp cmVjdGlvbiBkaXIsIE9mZnNldE51bWJlciBvZmZudW0sCi0JCQkgYm9vbCBmaXJzdHBhZ2UpCitf YnRfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBCYXRjaEluZGV4U2NhbiBuZXdiYXRjaCwg U2NhbkRpcmVjdGlvbiBkaXIsCisJCQkgT2Zmc2V0TnVtYmVyIG9mZm51bSwgYm9vbCBmaXJzdHBh Z2UpCiB7CiAJUmVsYXRpb24JcmVsID0gc2Nhbi0+aW5kZXhSZWxhdGlvbjsKIAlCVFNjYW5PcGFx dWUgc28gPSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7CkBAIC0xNDQsMjMgKzE0NCwyMCBA QCBfYnRfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgT2Zm c2V0TnVtYmVyIG9mZm51bSwKIAlib29sCQlhcnJheUtleXMsCiAJCQkJaWdub3JlX2tpbGxlZF90 dXBsZXMgPSBzY2FuLT5pZ25vcmVfa2lsbGVkX3R1cGxlczsKIAlpbnQJCQlpdGVtSW5kZXgsCisJ CQkJdHVwbGVPZmZzZXQgPSAwLAogCQkJCWluZG5hdHRzOwogCiAJLyogc2F2ZSB0aGUgcGFnZS9i dWZmZXIgYmxvY2sgbnVtYmVyLCBhbG9uZyB3aXRoIGl0cyBzaWJsaW5nIGxpbmtzICovCi0JcGFn ZSA9IEJ1ZmZlckdldFBhZ2Uoc28tPmN1cnJQb3MuYnVmKTsKKwlwYWdlID0gQnVmZmVyR2V0UGFn ZShuZXdiYXRjaC0+YnVmKTsKIAlvcGFxdWUgPSBCVFBhZ2VHZXRPcGFxdWUocGFnZSk7Ci0Jc28t PmN1cnJQb3MuY3VyclBhZ2UgPSBCdWZmZXJHZXRCbG9ja051bWJlcihzby0+Y3VyclBvcy5idWYp OwotCXNvLT5jdXJyUG9zLnByZXZQYWdlID0gb3BhcXVlLT5idHBvX3ByZXY7Ci0Jc28tPmN1cnJQ b3MubmV4dFBhZ2UgPSBvcGFxdWUtPmJ0cG9fbmV4dDsKLQkvKiBkZWxheSBzZXR0aW5nIHNvLT5j dXJyUG9zLmxzbiB1bnRpbCBfYnRfZHJvcF9sb2NrX2FuZF9tYXliZV9waW4gKi8KLQlwc3RhdGUu ZGlyID0gc28tPmN1cnJQb3MuZGlyID0gZGlyOwotCXNvLT5jdXJyUG9zLm5leHRUdXBsZU9mZnNl dCA9IDA7CisJcHN0YXRlLmN1cnJwYWdlID0gbmV3YmF0Y2gtPmN1cnJQYWdlID0gQnVmZmVyR2V0 QmxvY2tOdW1iZXIobmV3YmF0Y2gtPmJ1Zik7CisJbmV3YmF0Y2gtPnByZXZQYWdlID0gb3BhcXVl LT5idHBvX3ByZXY7CisJbmV3YmF0Y2gtPm5leHRQYWdlID0gb3BhcXVlLT5idHBvX25leHQ7CisJ cHN0YXRlLmRpciA9IG5ld2JhdGNoLT5kaXIgPSBkaXI7CiAKIAkvKiBlaXRoZXIgbW9yZVJpZ2h0 IG9yIG1vcmVMZWZ0IHNob3VsZCBiZSBzZXQgbm93IChtYXkgYmUgdW5zZXQgbGF0ZXIpICovCi0J QXNzZXJ0KFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSA/IHNvLT5jdXJyUG9zLm1vcmVSaWdo dCA6Ci0JCSAgIHNvLT5jdXJyUG9zLm1vcmVMZWZ0KTsKKwlBc3NlcnQoU2NhbkRpcmVjdGlvbklz Rm9yd2FyZChkaXIpID8gbmV3YmF0Y2gtPm1vcmVSaWdodCA6IG5ld2JhdGNoLT5tb3JlTGVmdCk7 CiAJQXNzZXJ0KCFQX0lHTk9SRShvcGFxdWUpKTsKLQlBc3NlcnQoQlRTY2FuUG9zSXNQaW5uZWQo c28tPmN1cnJQb3MpKTsKIAlBc3NlcnQoIXNvLT5uZWVkUHJpbVNjYW4pOwogCiAJLyogaW5pdGlh bGl6ZSBsb2NhbCB2YXJpYWJsZXMgKi8KQEAgLTE4OCwxNCArMTg1LDEyIEBAIF9idF9yZWFkcGFn ZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBPZmZzZXROdW1iZXIgb2Zm bnVtLAogCXsKIAkJLyogYWxsb3cgbmV4dC9wcmV2IHBhZ2UgdG8gYmUgcmVhZCBieSBvdGhlciB3 b3JrZXIgd2l0aG91dCBkZWxheSAqLwogCQlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIp KQotCQkJX2J0X3BhcmFsbGVsX3JlbGVhc2Uoc2Nhbiwgc28tPmN1cnJQb3MubmV4dFBhZ2UsCi0J CQkJCQkJCSBzby0+Y3VyclBvcy5jdXJyUGFnZSk7CisJCQlfYnRfcGFyYWxsZWxfcmVsZWFzZShz Y2FuLCBuZXdiYXRjaC0+bmV4dFBhZ2UsIG5ld2JhdGNoLT5jdXJyUGFnZSk7CiAJCWVsc2UKLQkJ CV9idF9wYXJhbGxlbF9yZWxlYXNlKHNjYW4sIHNvLT5jdXJyUG9zLnByZXZQYWdlLAotCQkJCQkJ CQkgc28tPmN1cnJQb3MuY3VyclBhZ2UpOworCQkJX2J0X3BhcmFsbGVsX3JlbGVhc2Uoc2Nhbiwg bmV3YmF0Y2gtPnByZXZQYWdlLCBuZXdiYXRjaC0+Y3VyclBhZ2UpOwogCX0KIAotCVByZWRpY2F0 ZUxvY2tQYWdlKHJlbCwgc28tPmN1cnJQb3MuY3VyclBhZ2UsIHNjYW4tPnhzX3NuYXBzaG90KTsK KwlQcmVkaWNhdGVMb2NrUGFnZShyZWwsIG5ld2JhdGNoLT5jdXJyUGFnZSwgc2Nhbi0+eHNfc25h cHNob3QpOwogCiAJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkKIAl7CkBAIC0yMTIs MTEgKzIwNywxMCBAQCBfYnRfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0 aW9uIGRpciwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKIAkJCQkJIV9idF9zY2FuYmVoaW5kX2NoZWNr a2V5cyhzY2FuLCBkaXIsIHBzdGF0ZS5maW5hbHR1cCkpCiAJCQkJewogCQkJCQkvKiBTY2hlZHVs ZSBhbm90aGVyIHByaW1pdGl2ZSBpbmRleCBzY2FuIGFmdGVyIGFsbCAqLwotCQkJCQlzby0+Y3Vy clBvcy5tb3JlUmlnaHQgPSBmYWxzZTsKKwkJCQkJbmV3YmF0Y2gtPm1vcmVSaWdodCA9IGZhbHNl OwogCQkJCQlzby0+bmVlZFByaW1TY2FuID0gdHJ1ZTsKIAkJCQkJaWYgKHNjYW4tPnBhcmFsbGVs X3NjYW4pCi0JCQkJCQlfYnRfcGFyYWxsZWxfcHJpbXNjYW5fc2NoZWR1bGUoc2NhbiwKLQkJCQkJ CQkJCQkJCQkgICBzby0+Y3VyclBvcy5jdXJyUGFnZSk7CisJCQkJCQlfYnRfcGFyYWxsZWxfcHJp bXNjYW5fc2NoZWR1bGUoc2NhbiwgbmV3YmF0Y2gtPmN1cnJQYWdlKTsKIAkJCQkJcmV0dXJuIGZh bHNlOwogCQkJCX0KIAkJCX0KQEAgLTI4MCwyNiArMjc0LDI2IEBAIF9idF9yZWFkcGFnZShJbmRl eFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBPZmZzZXROdW1iZXIgb2ZmbnVtLAog CQkJCWlmICghQlRyZWVUdXBsZUlzUG9zdGluZyhpdHVwKSkKIAkJCQl7CiAJCQkJCS8qIFJlbWVt YmVyIGl0ICovCi0JCQkJCV9idF9zYXZlaXRlbShzbywgaXRlbUluZGV4LCBvZmZudW0sIGl0dXAp OworCQkJCQlfYnRfc2F2ZWl0ZW0obmV3YmF0Y2gsIGl0ZW1JbmRleCwgb2ZmbnVtLCBpdHVwLCAm dHVwbGVPZmZzZXQpOwogCQkJCQlpdGVtSW5kZXgrKzsKIAkJCQl9CiAJCQkJZWxzZQogCQkJCXsK LQkJCQkJaW50CQkJdHVwbGVPZmZzZXQ7CisJCQkJCWludAkJCWJhc2VPZmZzZXQ7CiAKIAkJCQkJ LyogU2V0IHVwIHBvc3RpbmcgbGlzdCBzdGF0ZSAoYW5kIHJlbWVtYmVyIGZpcnN0IFRJRCkgKi8K LQkJCQkJdHVwbGVPZmZzZXQgPQotCQkJCQkJX2J0X3NldHVwcG9zdGluZ2l0ZW1zKHNvLCBpdGVt SW5kZXgsIG9mZm51bSwKKwkJCQkJYmFzZU9mZnNldCA9CisJCQkJCQlfYnRfc2V0dXBwb3N0aW5n aXRlbXMobmV3YmF0Y2gsIGl0ZW1JbmRleCwgb2ZmbnVtLAogCQkJCQkJCQkJCQkgIEJUcmVlVHVw bGVHZXRQb3N0aW5nTihpdHVwLCAwKSwKLQkJCQkJCQkJCQkJICBpdHVwKTsKKwkJCQkJCQkJCQkJ ICBpdHVwLCAmdHVwbGVPZmZzZXQpOwogCQkJCQlpdGVtSW5kZXgrKzsKIAogCQkJCQkvKiBSZW1l bWJlciBhbGwgbGF0ZXIgVElEcyAobXVzdCBiZSBhdCBsZWFzdCBvbmUpICovCiAJCQkJCWZvciAo aW50IGkgPSAxOyBpIDwgQlRyZWVUdXBsZUdldE5Qb3N0aW5nKGl0dXApOyBpKyspCiAJCQkJCXsK LQkJCQkJCV9idF9zYXZlcG9zdGluZ2l0ZW0oc28sIGl0ZW1JbmRleCwgb2ZmbnVtLAorCQkJCQkJ X2J0X3NhdmVwb3N0aW5naXRlbShuZXdiYXRjaCwgaXRlbUluZGV4LCBvZmZudW0sCiAJCQkJCQkJ CQkJCUJUcmVlVHVwbGVHZXRQb3N0aW5nTihpdHVwLCBpKSwKLQkJCQkJCQkJCQkJdHVwbGVPZmZz ZXQpOworCQkJCQkJCQkJCQliYXNlT2Zmc2V0KTsKIAkJCQkJCWl0ZW1JbmRleCsrOwogCQkJCQl9 CiAJCQkJfQpAQCAtMzM5LDEyICszMzMsMTEgQEAgX2J0X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mg c2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsIE9mZnNldE51bWJlciBvZmZudW0sCiAJCX0KIAogCQlp ZiAoIXBzdGF0ZS5jb250aW51ZXNjYW4pCi0JCQlzby0+Y3VyclBvcy5tb3JlUmlnaHQgPSBmYWxz ZTsKKwkJCW5ld2JhdGNoLT5tb3JlUmlnaHQgPSBmYWxzZTsKIAogCQlBc3NlcnQoaXRlbUluZGV4 IDw9IE1heFRJRHNQZXJCVHJlZVBhZ2UpOwotCQlzby0+Y3VyclBvcy5maXJzdEl0ZW0gPSAwOwot CQlzby0+Y3VyclBvcy5sYXN0SXRlbSA9IGl0ZW1JbmRleCAtIDE7Ci0JCXNvLT5jdXJyUG9zLml0 ZW1JbmRleCA9IDA7CisJCW5ld2JhdGNoLT5maXJzdEl0ZW0gPSAwOworCQluZXdiYXRjaC0+bGFz dEl0ZW0gPSBpdGVtSW5kZXggLSAxOwogCX0KIAllbHNlCiAJewpAQCAtMzYxLDExICszNTQsMTAg QEAgX2J0X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsIE9m ZnNldE51bWJlciBvZmZudW0sCiAJCQkJCSFfYnRfc2NhbmJlaGluZF9jaGVja2tleXMoc2Nhbiwg ZGlyLCBwc3RhdGUuZmluYWx0dXApKQogCQkJCXsKIAkJCQkJLyogU2NoZWR1bGUgYW5vdGhlciBw cmltaXRpdmUgaW5kZXggc2NhbiBhZnRlciBhbGwgKi8KLQkJCQkJc28tPmN1cnJQb3MubW9yZUxl ZnQgPSBmYWxzZTsKKwkJCQkJbmV3YmF0Y2gtPm1vcmVMZWZ0ID0gZmFsc2U7CiAJCQkJCXNvLT5u ZWVkUHJpbVNjYW4gPSB0cnVlOwogCQkJCQlpZiAoc2Nhbi0+cGFyYWxsZWxfc2NhbikKLQkJCQkJ CV9idF9wYXJhbGxlbF9wcmltc2Nhbl9zY2hlZHVsZShzY2FuLAotCQkJCQkJCQkJCQkJCSAgIHNv LT5jdXJyUG9zLmN1cnJQYWdlKTsKKwkJCQkJCV9idF9wYXJhbGxlbF9wcmltc2Nhbl9zY2hlZHVs ZShzY2FuLCBuZXdiYXRjaC0+Y3VyclBhZ2UpOwogCQkJCQlyZXR1cm4gZmFsc2U7CiAJCQkJfQog CQkJfQpAQCAtNDY2LDI3ICs0NTgsMjcgQEAgX2J0X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2Nh biwgU2NhbkRpcmVjdGlvbiBkaXIsIE9mZnNldE51bWJlciBvZmZudW0sCiAJCQkJewogCQkJCQkv KiBSZW1lbWJlciBpdCAqLwogCQkJCQlpdGVtSW5kZXgtLTsKLQkJCQkJX2J0X3NhdmVpdGVtKHNv LCBpdGVtSW5kZXgsIG9mZm51bSwgaXR1cCk7CisJCQkJCV9idF9zYXZlaXRlbShuZXdiYXRjaCwg aXRlbUluZGV4LCBvZmZudW0sIGl0dXAsICZ0dXBsZU9mZnNldCk7CiAJCQkJfQogCQkJCWVsc2UK IAkJCQl7CiAJCQkJCXVpbnQxNgkJbml0ZW1zID0gQlRyZWVUdXBsZUdldE5Qb3N0aW5nKGl0dXAp OwotCQkJCQlpbnQJCQl0dXBsZU9mZnNldDsKKwkJCQkJaW50CQkJYmFzZU9mZnNldDsKIAogCQkJ CQkvKiBTZXQgdXAgcG9zdGluZyBsaXN0IHN0YXRlIChhbmQgcmVtZW1iZXIgbGFzdCBUSUQpICov CiAJCQkJCWl0ZW1JbmRleC0tOwotCQkJCQl0dXBsZU9mZnNldCA9Ci0JCQkJCQlfYnRfc2V0dXBw b3N0aW5naXRlbXMoc28sIGl0ZW1JbmRleCwgb2ZmbnVtLAorCQkJCQliYXNlT2Zmc2V0ID0KKwkJ CQkJCV9idF9zZXR1cHBvc3RpbmdpdGVtcyhuZXdiYXRjaCwgaXRlbUluZGV4LCBvZmZudW0sCiAJ CQkJCQkJCQkJCSAgQlRyZWVUdXBsZUdldFBvc3RpbmdOKGl0dXAsIG5pdGVtcyAtIDEpLAotCQkJ CQkJCQkJCQkgIGl0dXApOworCQkJCQkJCQkJCQkgIGl0dXAsICZ0dXBsZU9mZnNldCk7CiAKIAkJ CQkJLyogUmVtZW1iZXIgYWxsIHByaW9yIFRJRHMgKG11c3QgYmUgYXQgbGVhc3Qgb25lKSAqLwog CQkJCQlmb3IgKGludCBpID0gbml0ZW1zIC0gMjsgaSA+PSAwOyBpLS0pCiAJCQkJCXsKIAkJCQkJ CWl0ZW1JbmRleC0tOwotCQkJCQkJX2J0X3NhdmVwb3N0aW5naXRlbShzbywgaXRlbUluZGV4LCBv ZmZudW0sCisJCQkJCQlfYnRfc2F2ZXBvc3RpbmdpdGVtKG5ld2JhdGNoLCBpdGVtSW5kZXgsIG9m Zm51bSwKIAkJCQkJCQkJCQkJQlRyZWVUdXBsZUdldFBvc3RpbmdOKGl0dXAsIGkpLAotCQkJCQkJ CQkJCQl0dXBsZU9mZnNldCk7CisJCQkJCQkJCQkJCWJhc2VPZmZzZXQpOwogCQkJCQl9CiAJCQkJ fQogCQkJfQpAQCAtNTAyLDEyICs0OTQsMTEgQEAgX2J0X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mg c2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsIE9mZnNldE51bWJlciBvZmZudW0sCiAJCSAqIGJlIGZv dW5kIHRoZXJlCiAJCSAqLwogCQlpZiAoIXBzdGF0ZS5jb250aW51ZXNjYW4pCi0JCQlzby0+Y3Vy clBvcy5tb3JlTGVmdCA9IGZhbHNlOworCQkJbmV3YmF0Y2gtPm1vcmVMZWZ0ID0gZmFsc2U7CiAK IAkJQXNzZXJ0KGl0ZW1JbmRleCA+PSAwKTsKLQkJc28tPmN1cnJQb3MuZmlyc3RJdGVtID0gaXRl bUluZGV4OwotCQlzby0+Y3VyclBvcy5sYXN0SXRlbSA9IE1heFRJRHNQZXJCVHJlZVBhZ2UgLSAx OwotCQlzby0+Y3VyclBvcy5pdGVtSW5kZXggPSBNYXhUSURzUGVyQlRyZWVQYWdlIC0gMTsKKwkJ bmV3YmF0Y2gtPmZpcnN0SXRlbSA9IGl0ZW1JbmRleDsKKwkJbmV3YmF0Y2gtPmxhc3RJdGVtID0g TWF4VElEc1BlckJUcmVlUGFnZSAtIDE7CiAJfQogCiAJLyoKQEAgLTUyNCw3ICs1MTUsNyBAQCBf YnRfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgT2Zmc2V0 TnVtYmVyIG9mZm51bSwKIAkgKi8KIAlBc3NlcnQoIXBzdGF0ZS5mb3JjZW5vbnJlcXVpcmVkKTsK IAotCXJldHVybiAoc28tPmN1cnJQb3MuZmlyc3RJdGVtIDw9IHNvLT5jdXJyUG9zLmxhc3RJdGVt KTsKKwlyZXR1cm4gKG5ld2JhdGNoLT5maXJzdEl0ZW0gPD0gbmV3YmF0Y2gtPmxhc3RJdGVtKTsK IH0KIAogLyoKQEAgLTEwMjcsOTAgKzEwMTgsOTMgQEAgX2J0X29wcG9kaXJfY2hlY2trZXlzKElu ZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsCiAJcmV0dXJuIHRydWU7CiB9CiAK LS8qIFNhdmUgYW4gaW5kZXggaXRlbSBpbnRvIHNvLT5jdXJyUG9zLml0ZW1zW2l0ZW1JbmRleF0g Ki8KKy8qIFNhdmUgYW4gaW5kZXggaXRlbSBpbnRvIG5ld2JhdGNoLml0ZW1zW2l0ZW1JbmRleF0g Ki8KIHN0YXRpYyB2b2lkCi1fYnRfc2F2ZWl0ZW0oQlRTY2FuT3BhcXVlIHNvLCBpbnQgaXRlbUlu ZGV4LAotCQkJIE9mZnNldE51bWJlciBvZmZudW0sIEluZGV4VHVwbGUgaXR1cCkKK19idF9zYXZl aXRlbShCYXRjaEluZGV4U2NhbiBuZXdiYXRjaCwgaW50IGl0ZW1JbmRleCwgT2Zmc2V0TnVtYmVy IG9mZm51bSwKKwkJCSBJbmRleFR1cGxlIGl0dXAsIGludCAqdHVwbGVPZmZzZXQpCiB7Ci0JQlRT Y2FuUG9zSXRlbSAqY3Vyckl0ZW0gPSAmc28tPmN1cnJQb3MuaXRlbXNbaXRlbUluZGV4XTsKLQog CUFzc2VydCghQlRyZWVUdXBsZUlzUGl2b3QoaXR1cCkgJiYgIUJUcmVlVHVwbGVJc1Bvc3Rpbmco aXR1cCkpOwogCi0JY3Vyckl0ZW0tPmhlYXBUaWQgPSBpdHVwLT50X3RpZDsKLQljdXJySXRlbS0+ aW5kZXhPZmZzZXQgPSBvZmZudW07Ci0JaWYgKHNvLT5jdXJyVHVwbGVzKQorCS8qIGNvcHkgdGhl IHBvcHVsYXRlZCBwYXJ0IG9mIHRoZSBpdGVtcyBhcnJheSAqLworCW5ld2JhdGNoLT5pdGVtc1tp dGVtSW5kZXhdLmhlYXBUaWQgPSBpdHVwLT50X3RpZDsKKwluZXdiYXRjaC0+aXRlbXNbaXRlbUlu ZGV4XS5pbmRleE9mZnNldCA9IG9mZm51bTsKKworCWlmIChuZXdiYXRjaC0+Y3VyclR1cGxlcykK IAl7CiAJCVNpemUJCWl0dXBzeiA9IEluZGV4VHVwbGVTaXplKGl0dXApOwogCi0JCWN1cnJJdGVt LT50dXBsZU9mZnNldCA9IHNvLT5jdXJyUG9zLm5leHRUdXBsZU9mZnNldDsKLQkJbWVtY3B5KHNv LT5jdXJyVHVwbGVzICsgc28tPmN1cnJQb3MubmV4dFR1cGxlT2Zmc2V0LCBpdHVwLCBpdHVwc3op OwotCQlzby0+Y3VyclBvcy5uZXh0VHVwbGVPZmZzZXQgKz0gTUFYQUxJR04oaXR1cHN6KTsKKwkJ bmV3YmF0Y2gtPml0ZW1zW2l0ZW1JbmRleF0udHVwbGVPZmZzZXQgPSAqdHVwbGVPZmZzZXQ7CisJ CW1lbWNweShuZXdiYXRjaC0+Y3VyclR1cGxlcyArICp0dXBsZU9mZnNldCwgaXR1cCwgaXR1cHN6 KTsKKwkJKnR1cGxlT2Zmc2V0ICs9IE1BWEFMSUdOKGl0dXBzeik7CiAJfQogfQogCiAvKgogICog U2V0dXAgc3RhdGUgdG8gc2F2ZSBUSURzL2l0ZW1zIGZyb20gYSBzaW5nbGUgcG9zdGluZyBsaXN0 IHR1cGxlLgogICoKLSAqIFNhdmVzIGFuIGluZGV4IGl0ZW0gaW50byBzby0+Y3VyclBvcy5pdGVt c1tpdGVtSW5kZXhdIGZvciBUSUQgdGhhdCBpcwotICogcmV0dXJuZWQgdG8gc2NhbiBmaXJzdC4g IFNlY29uZCBvciBzdWJzZXF1ZW50IFRJRHMgZm9yIHBvc3RpbmcgbGlzdCBzaG91bGQKLSAqIGJl IHNhdmVkIGJ5IGNhbGxpbmcgX2J0X3NhdmVwb3N0aW5naXRlbSgpLgorICogU2F2ZXMgYW4gaW5k ZXggaXRlbSBpbnRvIG5ld2JhdGNoLml0ZW1zW2l0ZW1JbmRleF0gZm9yIFRJRCB0aGF0IGlzIHJl dHVybmVkCisgKiB0byBzY2FuIGZpcnN0LiAgU2Vjb25kIG9yIHN1YnNlcXVlbnQgVElEcyBmb3Ig cG9zdGluZyBsaXN0IHNob3VsZCBiZSBzYXZlZAorICogYnkgY2FsbGluZyBfYnRfc2F2ZXBvc3Rp bmdpdGVtKCkuCiAgKgotICogUmV0dXJucyBhbiBvZmZzZXQgaW50byB0dXBsZSBzdG9yYWdlIHNw YWNlIHRoYXQgbWFpbiB0dXBsZSBpcyBzdG9yZWQgYXQgaWYKLSAqIG5lZWRlZC4KKyAqIFJldHVy bnMgYmFzZU9mZnNldCwgYW4gb2Zmc2V0IGludG8gdHVwbGUgc3RvcmFnZSBzcGFjZSB0aGF0IG1h aW4gdHVwbGUgaXMKKyAqIHN0b3JlZCBhdCBpZiBuZWVkZWQuCiAgKi8KIHN0YXRpYyBpbnQKLV9i dF9zZXR1cHBvc3RpbmdpdGVtcyhCVFNjYW5PcGFxdWUgc28sIGludCBpdGVtSW5kZXgsIE9mZnNl dE51bWJlciBvZmZudW0sCi0JCQkJCSAgY29uc3QgSXRlbVBvaW50ZXJEYXRhICpoZWFwVGlkLCBJ bmRleFR1cGxlIGl0dXApCitfYnRfc2V0dXBwb3N0aW5naXRlbXMoQmF0Y2hJbmRleFNjYW4gbmV3 YmF0Y2gsIGludCBpdGVtSW5kZXgsCisJCQkJCSAgT2Zmc2V0TnVtYmVyIG9mZm51bSwgY29uc3Qg SXRlbVBvaW50ZXJEYXRhICpoZWFwVGlkLAorCQkJCQkgIEluZGV4VHVwbGUgaXR1cCwgaW50ICp0 dXBsZU9mZnNldCkKIHsKLQlCVFNjYW5Qb3NJdGVtICpjdXJySXRlbSA9ICZzby0+Y3VyclBvcy5p dGVtc1tpdGVtSW5kZXhdOworCUJhdGNoTWF0Y2hpbmdJdGVtICppdGVtID0gJm5ld2JhdGNoLT5p dGVtc1tpdGVtSW5kZXhdOwogCiAJQXNzZXJ0KEJUcmVlVHVwbGVJc1Bvc3RpbmcoaXR1cCkpOwog Ci0JY3Vyckl0ZW0tPmhlYXBUaWQgPSAqaGVhcFRpZDsKLQljdXJySXRlbS0+aW5kZXhPZmZzZXQg PSBvZmZudW07Ci0JaWYgKHNvLT5jdXJyVHVwbGVzKQorCS8qIGNvcHkgdGhlIHBvcHVsYXRlZCBw YXJ0IG9mIHRoZSBpdGVtcyBhcnJheSAqLworCWl0ZW0tPmhlYXBUaWQgPSAqaGVhcFRpZDsKKwlp dGVtLT5pbmRleE9mZnNldCA9IG9mZm51bTsKKworCWlmIChuZXdiYXRjaC0+Y3VyclR1cGxlcykK IAl7CiAJCS8qIFNhdmUgYmFzZSBJbmRleFR1cGxlICh0cnVuY2F0ZSBwb3N0aW5nIGxpc3QpICov CiAJCUluZGV4VHVwbGUJYmFzZTsKIAkJU2l6ZQkJaXR1cHN6ID0gQlRyZWVUdXBsZUdldFBvc3Rp bmdPZmZzZXQoaXR1cCk7CiAKIAkJaXR1cHN6ID0gTUFYQUxJR04oaXR1cHN6KTsKLQkJY3Vyckl0 ZW0tPnR1cGxlT2Zmc2V0ID0gc28tPmN1cnJQb3MubmV4dFR1cGxlT2Zmc2V0OwotCQliYXNlID0g KEluZGV4VHVwbGUpIChzby0+Y3VyclR1cGxlcyArIHNvLT5jdXJyUG9zLm5leHRUdXBsZU9mZnNl dCk7CisJCWl0ZW0tPnR1cGxlT2Zmc2V0ID0gKnR1cGxlT2Zmc2V0OworCQliYXNlID0gKEluZGV4 VHVwbGUpIChuZXdiYXRjaC0+Y3VyclR1cGxlcyArICp0dXBsZU9mZnNldCk7CiAJCW1lbWNweShi YXNlLCBpdHVwLCBpdHVwc3opOwogCQkvKiBEZWZlbnNpdmVseSByZWR1Y2Ugd29yayBhcmVhIGlu ZGV4IHR1cGxlIGhlYWRlciBzaXplICovCiAJCWJhc2UtPnRfaW5mbyAmPSB+SU5ERVhfU0laRV9N QVNLOwogCQliYXNlLT50X2luZm8gfD0gaXR1cHN6OwotCQlzby0+Y3VyclBvcy5uZXh0VHVwbGVP ZmZzZXQgKz0gaXR1cHN6OworCQkqdHVwbGVPZmZzZXQgKz0gaXR1cHN6OwogCi0JCXJldHVybiBj dXJySXRlbS0+dHVwbGVPZmZzZXQ7CisJCXJldHVybiBpdGVtLT50dXBsZU9mZnNldDsKIAl9CiAK IAlyZXR1cm4gMDsKIH0KIAogLyoKLSAqIFNhdmUgYW4gaW5kZXggaXRlbSBpbnRvIHNvLT5jdXJy UG9zLml0ZW1zW2l0ZW1JbmRleF0gZm9yIGN1cnJlbnQgcG9zdGluZworICogU2F2ZSBhbiBpbmRl eCBpdGVtIGludG8gbmV3YmF0Y2guaXRlbXNbaXRlbUluZGV4XSBmb3IgY3VycmVudCBwb3N0aW5n CiAgKiB0dXBsZS4KICAqCiAgKiBBc3N1bWVzIHRoYXQgX2J0X3NldHVwcG9zdGluZ2l0ZW1zKCkg aGFzIGFscmVhZHkgYmVlbiBjYWxsZWQgZm9yIGN1cnJlbnQKLSAqIHBvc3RpbmcgbGlzdCB0dXBs ZS4gIENhbGxlciBwYXNzZXMgaXRzIHJldHVybiB2YWx1ZSBhcyB0dXBsZU9mZnNldC4KKyAqIHBv c3RpbmcgbGlzdCB0dXBsZS4gIENhbGxlciBwYXNzZXMgaXRzIHJldHVybiB2YWx1ZSBhcyBiYXNl T2Zmc2V0LgogICovCiBzdGF0aWMgaW5saW5lIHZvaWQKLV9idF9zYXZlcG9zdGluZ2l0ZW0oQlRT Y2FuT3BhcXVlIHNvLCBpbnQgaXRlbUluZGV4LCBPZmZzZXROdW1iZXIgb2ZmbnVtLAotCQkJCQlJ dGVtUG9pbnRlciBoZWFwVGlkLCBpbnQgdHVwbGVPZmZzZXQpCitfYnRfc2F2ZXBvc3RpbmdpdGVt KEJhdGNoSW5kZXhTY2FuIG5ld2JhdGNoLCBpbnQgaXRlbUluZGV4LCBPZmZzZXROdW1iZXIgb2Zm bnVtLAorCQkJCQlJdGVtUG9pbnRlciBoZWFwVGlkLCBpbnQgYmFzZU9mZnNldCkKIHsKLQlCVFNj YW5Qb3NJdGVtICpjdXJySXRlbSA9ICZzby0+Y3VyclBvcy5pdGVtc1tpdGVtSW5kZXhdOworCUJh dGNoTWF0Y2hpbmdJdGVtICppdGVtID0gJm5ld2JhdGNoLT5pdGVtc1tpdGVtSW5kZXhdOwogCi0J Y3Vyckl0ZW0tPmhlYXBUaWQgPSAqaGVhcFRpZDsKLQljdXJySXRlbS0+aW5kZXhPZmZzZXQgPSBv ZmZudW07CisJaXRlbS0+aGVhcFRpZCA9ICpoZWFwVGlkOworCWl0ZW0tPmluZGV4T2Zmc2V0ID0g b2ZmbnVtOwogCiAJLyoKIAkgKiBIYXZlIGluZGV4LW9ubHkgc2NhbnMgcmV0dXJuIHRoZSBzYW1l IGJhc2UgSW5kZXhUdXBsZSBmb3IgZXZlcnkgVElECiAJICogdGhhdCBvcmlnaW5hdGVzIGZyb20g dGhlIHNhbWUgcG9zdGluZyBsaXN0CiAJICovCi0JaWYgKHNvLT5jdXJyVHVwbGVzKQotCQljdXJy SXRlbS0+dHVwbGVPZmZzZXQgPSB0dXBsZU9mZnNldDsKKwlpZiAobmV3YmF0Y2gtPmN1cnJUdXBs ZXMpCisJCWl0ZW0tPnR1cGxlT2Zmc2V0ID0gYmFzZU9mZnNldDsKIH0KIAogI2RlZmluZSBMT09L X0FIRUFEX1JFUVVJUkVEX1JFQ0hFQ0tTIAkzCkBAIC0yODIyLDEzICsyODE2LDEzIEBAIG5ld19w cmltX3NjYW46CiAJICogTm90ZTogV2UgbWFrZSBhIHNvZnQgYXNzdW1wdGlvbiB0aGF0IHRoZSBj dXJyZW50IHNjYW4gZGlyZWN0aW9uIHdpbGwKIAkgKiBhbHNvIGJlIHVzZWQgd2l0aGluIF9idF9u ZXh0LCB3aGVuIGl0IGlzIGFza2VkIHRvIHN0ZXAgb2ZmIHRoaXMgcGFnZS4KIAkgKiBJdCBpcyB1 cCB0byBfYnRfbmV4dCB0byBjYW5jZWwgdGhpcyBzY2hlZHVsZWQgcHJpbWl0aXZlIGluZGV4IHNj YW4KLQkgKiB3aGVuZXZlciBpdCBzdGVwcyB0byBhIHBhZ2UgaW4gdGhlIGRpcmVjdGlvbiBvcHBv c2l0ZSBjdXJyUG9zLmRpci4KKwkgKiB3aGVuZXZlciBpdCBzdGVwcyB0byBhIHBhZ2UgaW4gdGhl IGRpcmVjdGlvbiBvcHBvc2l0ZSBwc3RhdGUtPmRpci4KIAkgKi8KIAlwc3RhdGUtPmNvbnRpbnVl c2NhbiA9IGZhbHNlOwkvKiBUZWxsIF9idF9yZWFkcGFnZSB3ZSdyZSBkb25lLi4uICovCiAJc28t Pm5lZWRQcmltU2NhbiA9IHRydWU7CS8qIC4uLmJ1dCBjYWxsIF9idF9maXJzdCBhZ2FpbiAqLwog CiAJaWYgKHNjYW4tPnBhcmFsbGVsX3NjYW4pCi0JCV9idF9wYXJhbGxlbF9wcmltc2Nhbl9zY2hl ZHVsZShzY2FuLCBzby0+Y3VyclBvcy5jdXJyUGFnZSk7CisJCV9idF9wYXJhbGxlbF9wcmltc2Nh bl9zY2hlZHVsZShzY2FuLCBwc3RhdGUtPmN1cnJwYWdlKTsKIAogCS8qIENhbGxlcidzIHR1cGxl IGRvZXNuJ3QgbWF0Y2ggdGhlIG5ldyBxdWFsICovCiAJcmV0dXJuIGZhbHNlOwpAQCAtMjkxMywx NCArMjkwNyw2IEBAIF9idF9hZHZhbmNlX2FycmF5X2tleXNfaW5jcmVtZW50KEluZGV4U2NhbkRl c2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsCiAJICogUmVzdG9yZSB0aGUgYXJyYXkga2V5cyB0 byB0aGUgc3RhdGUgdGhleSB3ZXJlIGluIGltbWVkaWF0ZWx5IGJlZm9yZSB3ZQogCSAqIHdlcmUg Y2FsbGVkLiAgVGhpcyBlbnN1cmVzIHRoYXQgdGhlIGFycmF5cyBvbmx5IGV2ZXIgcmF0Y2hldCBp biB0aGUKIAkgKiBjdXJyZW50IHNjYW4gZGlyZWN0aW9uLgotCSAqCi0JICogV2l0aG91dCB0aGlz LCBzY2FucyBjb3VsZCBvdmVybG9vayBtYXRjaGluZyB0dXBsZXMgd2hlbiB0aGUgc2NhbgotCSAq IGRpcmVjdGlvbiBnZXRzIHJldmVyc2VkIGp1c3QgYmVmb3JlIGJ0Z2V0dHVwbGUgcnVucyBvdXQg b2YgaXRlbXMgdG8KLQkgKiByZXR1cm4sIGJ1dCBqdXN0IGFmdGVyIF9idF9yZWFkcGFnZSBwcmVw YXJlcyBhbGwgdGhlIGl0ZW1zIGZyb20gdGhlCi0JICogc2NhbidzIGZpbmFsIHBhZ2UgaW4gc28t PmN1cnJQb3MuICBXaGVuIHdlJ3JlIG9uIHRoZSBmaW5hbCBwYWdlIGl0IGlzCi0JICogdHlwaWNh bCBmb3Igc28tPmN1cnJQb3MgdG8gZ2V0IGludmFsaWRhdGVkIG9uY2UgYnRnZXR0dXBsZSBmaW5h bGx5Ci0JICogcmV0dXJucyBmYWxzZSwgd2hpY2gnbGwgZWZmZWN0aXZlbHkgaW52YWxpZGF0ZSB0 aGUgc2NhbidzIGFycmF5IGtleXMuCi0JICogVGhhdCBoYXNuJ3QgaGFwcGVuZWQgeWV0LCB0aG91 Z2ggLS0gYW5kIGluIGdlbmVyYWwgaXQgbWF5IG5ldmVyIGhhcHBlbi4KIAkgKi8KIAlfYnRfc3Rh cnRfYXJyYXlfa2V5cyhzY2FuLCAtZGlyKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNj ZXNzL25idHJlZS9uYnRyZWUuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVlLmMK aW5kZXggNjE5N2I3MjVmLi4xZGNlYmQ4YWUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vz cy9uYnRyZWUvbmJ0cmVlLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRyZWUu YwpAQCAtMTU5LDExICsxNTksMTIgQEAgYnRoYW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJYW1y b3V0aW5lLT5hbWFkanVzdG1lbWJlcnMgPSBidGFkanVzdG1lbWJlcnM7CiAJYW1yb3V0aW5lLT5h bWJlZ2luc2NhbiA9IGJ0YmVnaW5zY2FuOwogCWFtcm91dGluZS0+YW1yZXNjYW4gPSBidHJlc2Nh bjsKLQlhbXJvdXRpbmUtPmFtZ2V0dHVwbGUgPSBidGdldHR1cGxlOworCWFtcm91dGluZS0+YW1n ZXR0dXBsZSA9IE5VTEw7CisJYW1yb3V0aW5lLT5hbWdldGJhdGNoID0gYnRnZXRiYXRjaDsKKwlh bXJvdXRpbmUtPmFtZnJlZWJhdGNoID0gYnRmcmVlYmF0Y2g7CiAJYW1yb3V0aW5lLT5hbWdldGJp dG1hcCA9IGJ0Z2V0Yml0bWFwOwogCWFtcm91dGluZS0+YW1lbmRzY2FuID0gYnRlbmRzY2FuOwot CWFtcm91dGluZS0+YW1tYXJrcG9zID0gYnRtYXJrcG9zOwotCWFtcm91dGluZS0+YW1yZXN0cnBv cyA9IGJ0cmVzdHJwb3M7CisJYW1yb3V0aW5lLT5hbXBvc3Jlc2V0ID0gYnRwb3NyZXNldDsKIAlh bXJvdXRpbmUtPmFtZXN0aW1hdGVwYXJhbGxlbHNjYW4gPSBidGVzdGltYXRlcGFyYWxsZWxzY2Fu OwogCWFtcm91dGluZS0+YW1pbml0cGFyYWxsZWxzY2FuID0gYnRpbml0cGFyYWxsZWxzY2FuOwog CWFtcm91dGluZS0+YW1wYXJhbGxlbHJlc2NhbiA9IGJ0cGFyYWxsZWxyZXNjYW47CkBAIC0yMjEs MTMgKzIyMiwxMyBAQCBidGluc2VydChSZWxhdGlvbiByZWwsIERhdHVtICp2YWx1ZXMsIGJvb2wg KmlzbnVsbCwKIH0KIAogLyoKLSAqCWJ0Z2V0dHVwbGUoKSAtLSBHZXQgdGhlIG5leHQgdHVwbGUg aW4gdGhlIHNjYW4uCisgKglidGdldGJhdGNoKCkgLS0gR2V0IHRoZSBmaXJzdCBvciBuZXh0IGJh dGNoIG9mIHR1cGxlcyBpbiB0aGUgc2NhbgogICovCi1ib29sCi1idGdldHR1cGxlKEluZGV4U2Nh bkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCitCYXRjaEluZGV4U2NhbgorYnRnZXRiYXRj aChJbmRleFNjYW5EZXNjIHNjYW4sIEJhdGNoSW5kZXhTY2FuIHByaW9yYmF0Y2gsIFNjYW5EaXJl Y3Rpb24gZGlyKQogewogCUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9w YXF1ZTsKLQlib29sCQlyZXM7CisJQmF0Y2hJbmRleFNjYW4gYmF0Y2ggPSBwcmlvcmJhdGNoOwog CiAJQXNzZXJ0KHNjYW4tPmhlYXBSZWxhdGlvbiAhPSBOVUxMKTsKIApAQCAtMjQyLDQzICsyNDMs MTggQEAgYnRnZXR0dXBsZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQog CQkgKiB0aGUgYXBwcm9wcmlhdGUgZGlyZWN0aW9uLiAgSWYgd2UgaGF2ZW4ndCBkb25lIHNvIHll dCwgd2UgY2FsbAogCQkgKiBfYnRfZmlyc3QoKSB0byBnZXQgdGhlIGZpcnN0IGl0ZW0gaW4gdGhl IHNjYW4uCiAJCSAqLwotCQlpZiAoIUJUU2NhblBvc0lzVmFsaWQoc28tPmN1cnJQb3MpKQotCQkJ cmVzID0gX2J0X2ZpcnN0KHNjYW4sIGRpcik7CisJCWlmIChiYXRjaCA9PSBOVUxMKQorCQkJYmF0 Y2ggPSBfYnRfZmlyc3Qoc2NhbiwgZGlyKTsKIAkJZWxzZQotCQl7Ci0JCQkvKgotCQkJICogQ2hl Y2sgdG8gc2VlIGlmIHdlIHNob3VsZCBraWxsIHRoZSBwcmV2aW91c2x5LWZldGNoZWQgdHVwbGUu Ci0JCQkgKi8KLQkJCWlmIChzY2FuLT5raWxsX3ByaW9yX3R1cGxlKQotCQkJewotCQkJCS8qCi0J CQkJICogWWVzLCByZW1lbWJlciBpdCBmb3IgbGF0ZXIuIChXZSdsbCBkZWFsIHdpdGggYWxsIHN1 Y2gKLQkJCQkgKiB0dXBsZXMgYXQgb25jZSByaWdodCBiZWZvcmUgbGVhdmluZyB0aGUgaW5kZXgg cGFnZS4pICBUaGUKLQkJCQkgKiB0ZXN0IGZvciBudW1LaWxsZWQgb3ZlcnJ1biBpcyBub3QganVz dCBwYXJhbm9pYTogaWYgdGhlCi0JCQkJICogY2FsbGVyIHJldmVyc2VzIGRpcmVjdGlvbiBpbiB0 aGUgaW5kZXhzY2FuIHRoZW4gdGhlIHNhbWUKLQkJCQkgKiBpdGVtIG1pZ2h0IGdldCBlbnRlcmVk IG11bHRpcGxlIHRpbWVzLiBJdCdzIG5vdCB3b3J0aAotCQkJCSAqIHRyeWluZyB0byBvcHRpbWl6 ZSB0aGF0LCBzbyB3ZSBkb24ndCBkZXRlY3QgaXQsIGJ1dCBpbnN0ZWFkCi0JCQkJICoganVzdCBm b3JnZXQgYW55IGV4Y2VzcyBlbnRyaWVzLgotCQkJCSAqLwotCQkJCWlmIChzby0+a2lsbGVkSXRl bXMgPT0gTlVMTCkKLQkJCQkJc28tPmtpbGxlZEl0ZW1zID0gcGFsbG9jX2FycmF5KGludCwgTWF4 VElEc1BlckJUcmVlUGFnZSk7Ci0JCQkJaWYgKHNvLT5udW1LaWxsZWQgPCBNYXhUSURzUGVyQlRy ZWVQYWdlKQotCQkJCQlzby0+a2lsbGVkSXRlbXNbc28tPm51bUtpbGxlZCsrXSA9IHNvLT5jdXJy UG9zLml0ZW1JbmRleDsKLQkJCX0KKwkJCWJhdGNoID0gX2J0X25leHQoc2NhbiwgZGlyLCBiYXRj aCk7CiAKLQkJCS8qCi0JCQkgKiBOb3cgY29udGludWUgdGhlIHNjYW4uCi0JCQkgKi8KLQkJCXJl cyA9IF9idF9uZXh0KHNjYW4sIGRpcik7Ci0JCX0KLQotCQkvKiBJZiB3ZSBoYXZlIGEgdHVwbGUs IHJldHVybiBpdCAuLi4gKi8KLQkJaWYgKHJlcykKKwkJLyogSWYgd2UgaGF2ZSBhIGJhdGNoLCBy ZXR1cm4gaXQgLi4uICovCisJCWlmIChiYXRjaCkKIAkJCWJyZWFrOwogCQkvKiAuLi4gb3RoZXJ3 aXNlIHNlZSBpZiB3ZSBuZWVkIGFub3RoZXIgcHJpbWl0aXZlIGluZGV4IHNjYW4gKi8KIAl9IHdo aWxlIChzby0+bnVtQXJyYXlLZXlzICYmIF9idF9zdGFydF9wcmltX3NjYW4oc2NhbikpOwogCi0J cmV0dXJuIHJlczsKKwlyZXR1cm4gYmF0Y2g7CiB9CiAKIC8qCkBAIC0yODgsNiArMjY0LDcgQEAg aW50NjQKIGJ0Z2V0Yml0bWFwKEluZGV4U2NhbkRlc2Mgc2NhbiwgVElEQml0bWFwICp0Ym0pCiB7 CiAJQlRTY2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOworCUJhdGNo SW5kZXhTY2FuIGJhdGNoOwogCWludDY0CQludGlkcyA9IDA7CiAJSXRlbVBvaW50ZXIgaGVhcFRp ZDsKIApAQCAtMjk2LDI5ICsyNzMsMjkgQEAgYnRnZXRiaXRtYXAoSW5kZXhTY2FuRGVzYyBzY2Fu LCBUSURCaXRtYXAgKnRibSkKIAkvKiBFYWNoIGxvb3AgaXRlcmF0aW9uIHBlcmZvcm1zIGFub3Ro ZXIgcHJpbWl0aXZlIGluZGV4IHNjYW4gKi8KIAlkbwogCXsKLQkJLyogRmV0Y2ggdGhlIGZpcnN0 IHBhZ2UgJiB0dXBsZSAqLwotCQlpZiAoX2J0X2ZpcnN0KHNjYW4sIEZvcndhcmRTY2FuRGlyZWN0 aW9uKSkKKwkJLyogRmV0Y2ggdGhlIGZpcnN0IGJhdGNoICovCisJCWlmICgoYmF0Y2ggPSBfYnRf Zmlyc3Qoc2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24pKSkKIAkJewotCQkJLyogU2F2ZSB0dXBs ZSBJRCwgYW5kIGNvbnRpbnVlIHNjYW5uaW5nICovCi0JCQloZWFwVGlkID0gJnNjYW4tPnhzX2hl YXB0aWQ7CisJCQlpbnQJCQlpdGVtSW5kZXggPSAwOworCisJCQkvKiBTYXZlIGZpcnN0IHR1cGxl J3MgVElEICovCisJCQloZWFwVGlkID0gJmJhdGNoLT5pdGVtc1tpdGVtSW5kZXhdLmhlYXBUaWQ7 CiAJCQl0Ym1fYWRkX3R1cGxlcyh0Ym0sIGhlYXBUaWQsIDEsIGZhbHNlKTsKIAkJCW50aWRzKys7 CiAKIAkJCWZvciAoOzspCiAJCQl7Ci0JCQkJLyoKLQkJCQkgKiBBZHZhbmNlIHRvIG5leHQgdHVw bGUgd2l0aGluIHBhZ2UuICBUaGlzIGlzIHRoZSBzYW1lIGFzIHRoZQotCQkJCSAqIGVhc3kgY2Fz ZSBpbiBfYnRfbmV4dCgpLgotCQkJCSAqLwotCQkJCWlmICgrK3NvLT5jdXJyUG9zLml0ZW1JbmRl eCA+IHNvLT5jdXJyUG9zLmxhc3RJdGVtKQorCQkJCS8qIEFkdmFuY2UgdG8gbmV4dCBUSUQgd2l0 aGluIHBhZ2Utc2l6ZWQgYmF0Y2ggKi8KKwkJCQlpZiAoKytpdGVtSW5kZXggPiBiYXRjaC0+bGFz dEl0ZW0pCiAJCQkJewogCQkJCQkvKiBsZXQgX2J0X25leHQgZG8gdGhlIGhlYXZ5IGxpZnRpbmcg Ki8KLQkJCQkJaWYgKCFfYnRfbmV4dChzY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbikpCisJCQkJ CWl0ZW1JbmRleCA9IDA7CisJCQkJCWJhdGNoID0gX2J0X25leHQoc2NhbiwgRm9yd2FyZFNjYW5E aXJlY3Rpb24sIGJhdGNoKTsKKwkJCQkJaWYgKCFiYXRjaCkKIAkJCQkJCWJyZWFrOwogCQkJCX0K IAotCQkJCS8qIFNhdmUgdHVwbGUgSUQsIGFuZCBjb250aW51ZSBzY2FubmluZyAqLwotCQkJCWhl YXBUaWQgPSAmc28tPmN1cnJQb3MuaXRlbXNbc28tPmN1cnJQb3MuaXRlbUluZGV4XS5oZWFwVGlk OworCQkJCWhlYXBUaWQgPSAmYmF0Y2gtPml0ZW1zW2l0ZW1JbmRleF0uaGVhcFRpZDsKIAkJCQl0 Ym1fYWRkX3R1cGxlcyh0Ym0sIGhlYXBUaWQsIDEsIGZhbHNlKTsKIAkJCQludGlkcysrOwogCQkJ fQpAQCAtMzQ2LDggKzMyMyw2IEBAIGJ0YmVnaW5zY2FuKFJlbGF0aW9uIHJlbCwgaW50IG5rZXlz LCBpbnQgbm9yZGVyYnlzKQogCiAJLyogYWxsb2NhdGUgcHJpdmF0ZSB3b3Jrc3BhY2UgKi8KIAlz byA9IHBhbGxvY19vYmplY3QoQlRTY2FuT3BhcXVlRGF0YSk7Ci0JQlRTY2FuUG9zSW52YWxpZGF0 ZShzby0+Y3VyclBvcyk7Ci0JQlRTY2FuUG9zSW52YWxpZGF0ZShzby0+bWFya1Bvcyk7CiAJaWYg KHNjYW4tPm51bWJlck9mS2V5cyA+IDApCiAJCXNvLT5rZXlEYXRhID0gKFNjYW5LZXkpIHBhbGxv YyhzY2FuLT5udW1iZXJPZktleXMgKiBzaXplb2YoU2NhbktleURhdGEpKTsKIAllbHNlCkBAIC0z NjEsMTkgKzMzNiw4IEBAIGJ0YmVnaW5zY2FuKFJlbGF0aW9uIHJlbCwgaW50IG5rZXlzLCBpbnQg bm9yZGVyYnlzKQogCXNvLT5vcmRlclByb2NzID0gTlVMTDsKIAlzby0+YXJyYXlDb250ZXh0ID0g TlVMTDsKIAotCXNvLT5raWxsZWRJdGVtcyA9IE5VTEw7CQkvKiB1bnRpbCBuZWVkZWQgKi8KLQlz by0+bnVtS2lsbGVkID0gMDsKLQotCS8qCi0JICogV2UgZG9uJ3Qga25vdyB5ZXQgd2hldGhlciB0 aGUgc2NhbiB3aWxsIGJlIGluZGV4LW9ubHksIHNvIHdlIGRvIG5vdAotCSAqIGFsbG9jYXRlIHRo ZSB0dXBsZSB3b3Jrc3BhY2UgYXJyYXlzIHVudGlsIGJ0cmVzY2FuLiAgSG93ZXZlciwgd2Ugc2V0 IHVwCi0JICogc2Nhbi0+eHNfaXR1cGRlc2Mgd2hldGhlciB3ZSdsbCBuZWVkIGl0IG9yIG5vdCwg c2luY2UgdGhhdCdzIHNvIGNoZWFwLgotCSAqLwotCXNvLT5jdXJyVHVwbGVzID0gc28tPm1hcmtU dXBsZXMgPSBOVUxMOwotCi0Jc2Nhbi0+eHNfaXR1cGRlc2MgPSBSZWxhdGlvbkdldERlc2NyKHJl bCk7Ci0KIAlzY2FuLT5vcGFxdWUgPSBzbzsKKwlzY2FuLT54c19pdHVwZGVzYyA9IFJlbGF0aW9u R2V0RGVzY3IocmVsKTsKIAogCXJldHVybiBzY2FuOwogfQpAQCAtMzg3LDgyICszNTEsMzcgQEAg YnRyZXNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuS2V5IHNjYW5rZXksIGludCBuc2Nhbmtl eXMsCiB7CiAJQlRTY2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwog Ci0JLyogd2UgYXJlbid0IGhvbGRpbmcgYW55IHJlYWQgbG9ja3MsIGJ1dCBnb3R0YSBkcm9wIHRo ZSBwaW5zICovCi0JaWYgKEJUU2NhblBvc0lzVmFsaWQoc28tPmN1cnJQb3MpKQotCXsKLQkJLyog QmVmb3JlIGxlYXZpbmcgY3VycmVudCBwYWdlLCBkZWFsIHdpdGggYW55IGtpbGxlZCBpdGVtcyAq LwotCQlpZiAoc28tPm51bUtpbGxlZCA+IDApCi0JCQlfYnRfa2lsbGl0ZW1zKHNjYW4pOwotCQlC VFNjYW5Qb3NVbnBpbklmUGlubmVkKHNvLT5jdXJyUG9zKTsKLQkJQlRTY2FuUG9zSW52YWxpZGF0 ZShzby0+Y3VyclBvcyk7Ci0JfQotCi0JLyoKLQkgKiBXZSBwcmVmZXIgdG8gZWFnZXJseSBkcm9w IGxlYWYgcGFnZSBwaW5zIGJlZm9yZSBidGdldHR1cGxlIHJldHVybnMuCi0JICogVGhpcyBhdm9p ZHMgbWFraW5nIFZBQ1VVTSB3YWl0IHRvIGFjcXVpcmUgYSBjbGVhbnVwIGxvY2sgb24gdGhlIHBh Z2UuCi0JICoKLQkgKiBXZSBjYW5ub3Qgc2FmZWx5IGRyb3AgbGVhZiBwYWdlIHBpbnMgZHVyaW5n IGluZGV4LW9ubHkgc2NhbnMgZHVlIHRvIGEKLQkgKiByYWNlIGNvbmRpdGlvbiBpbnZvbHZpbmcg VkFDVVVNIHNldHRpbmcgcGFnZXMgYWxsLXZpc2libGUgaW4gdGhlIFZNLgotCSAqIEl0J3MgYWxz byB1bnNhZmUgZm9yIHBsYWluIGluZGV4IHNjYW5zIHRoYXQgdXNlIGEgbm9uLU1WQ0Mgc25hcHNo b3QuCi0JICoKLQkgKiBXaGVuIHdlIGRyb3AgcGlucyBlYWdlcmx5LCB0aGUgbWVjaGFuaXNtIHRo YXQgbWFya3Mgc28tPmtpbGxlZEl0ZW1zW10KLQkgKiBpbmRleCB0dXBsZXMgTFBfREVBRCBoYXMg dG8gZGVhbCB3aXRoIGNvbmN1cnJlbnQgVElEIHJlY3ljbGluZyByYWNlcy4KLQkgKiBUaGUgc2No ZW1lIHVzZWQgdG8gZGV0ZWN0IHVuc2FmZSBUSUQgcmVjeWNsaW5nIHdvbid0IHdvcmsgd2hlbiBz Y2FubmluZwotCSAqIHVubG9nZ2VkIHJlbGF0aW9ucyAoc2luY2UgaXQgaW52b2x2ZXMgc2F2aW5n IGFuIGFmZmVjdGVkIHBhZ2UncyBMU04pLgotCSAqIE9wdCBvdXQgb2YgZWFnZXIgcGluIGRyb3Bw aW5nIGR1cmluZyB1bmxvZ2dlZCByZWxhdGlvbiBzY2FucyBmb3Igbm93Ci0JICogKHRoaXMgaXMg cHJlZmVyYWJsZSB0byBvcHRpbmcgb3V0IG9mIGtpbGxfcHJpb3JfdHVwbGUgTFBfREVBRCBzZXR0 aW5nKS4KLQkgKgotCSAqIEFsc28gb3B0IG91dCBvZiBkcm9wcGluZyBsZWFmIHBhZ2UgcGlucyBl YWdlcmx5IGR1cmluZyBiaXRtYXAgc2NhbnMuCi0JICogUGlucyBjYW5ub3QgYmUgaGVsZCBmb3Ig bW9yZSB0aGFuIGFuIGluc3RhbnQgZHVyaW5nIGJpdG1hcCBzY2FucyBlaXRoZXIKLQkgKiB3YXks IHNvIHdlIG1pZ2h0IGFzIHdlbGwgYXZvaWQgd2FzdGluZyBjeWNsZXMgb24gYWNxdWlyaW5nIHBh Z2UgTFNOcy4KLQkgKgotCSAqIFNlZSBuYnRyZWUvUkVBRE1FIHNlY3Rpb24gb24gbWFraW5nIGNv bmN1cnJlbnQgVElEIHJlY3ljbGluZyBzYWZlLgotCSAqCi0JICogTm90ZTogc28tPmRyb3BQaW4g c2hvdWxkIG5ldmVyIGNoYW5nZSBhY3Jvc3MgcmVzY2Fucy4KLQkgKi8KLQlzby0+ZHJvcFBpbiA9 ICghc2Nhbi0+eHNfd2FudF9pdHVwICYmCi0JCQkJICAgSXNNVkNDU25hcHNob3Qoc2Nhbi0+eHNf c25hcHNob3QpICYmCi0JCQkJICAgUmVsYXRpb25OZWVkc1dBTChzY2FuLT5pbmRleFJlbGF0aW9u KSAmJgotCQkJCSAgIHNjYW4tPmhlYXBSZWxhdGlvbiAhPSBOVUxMKTsKLQotCXNvLT5tYXJrSXRl bUluZGV4ID0gLTE7Ci0Jc28tPm5lZWRQcmltU2NhbiA9IGZhbHNlOwotCXNvLT5zY2FuQmVoaW5k ID0gZmFsc2U7Ci0Jc28tPm9wcG9zaXRlRGlyQ2hlY2sgPSBmYWxzZTsKLQlCVFNjYW5Qb3NVbnBp bklmUGlubmVkKHNvLT5tYXJrUG9zKTsKLQlCVFNjYW5Qb3NJbnZhbGlkYXRlKHNvLT5tYXJrUG9z KTsKLQotCS8qCi0JICogQWxsb2NhdGUgdHVwbGUgd29ya3NwYWNlIGFycmF5cywgaWYgbmVlZGVk IGZvciBhbiBpbmRleC1vbmx5IHNjYW4gYW5kCi0JICogbm90IGFscmVhZHkgZG9uZSBpbiBhIHBy ZXZpb3VzIHJlc2NhbiBjYWxsLiAgVG8gc2F2ZSBvbiBwYWxsb2MKLQkgKiBvdmVyaGVhZCwgYm90 aCB3b3Jrc3BhY2VzIGFyZSBhbGxvY2F0ZWQgYXMgb25lIHBhbGxvYyBibG9jazsgb25seSB0aGlz Ci0JICogZnVuY3Rpb24gYW5kIGJ0ZW5kc2NhbiBrbm93IHRoYXQuCi0JICoKLQkgKiBOT1RFOiB0 aGlzIGRhdGEgc3RydWN0dXJlIGFsc28gbWFrZXMgaXQgc2FmZSB0byByZXR1cm4gZGF0YSBmcm9t IGEKLQkgKiAibmFtZSIgY29sdW1uLCBldmVuIHRob3VnaCBidHJlZSBuYW1lX29wcyB1c2VzIGFu IHVuZGVybHlpbmcgc3RvcmFnZQotCSAqIGRhdGF0eXBlIG9mIGNzdHJpbmcuICBUaGUgcmlzayB0 aGVyZSBpcyB0aGF0ICJuYW1lIiBpcyBzdXBwb3NlZCB0byBiZQotCSAqIHBhZGRlZCB0byBOQU1F REFUQUxFTiwgYnV0IHRoZSBhY3R1YWwgaW5kZXggdHVwbGUgaXMgcHJvYmFibHkgc2hvcnRlci4K LQkgKiBIb3dldmVyLCBzaW5jZSB3ZSBvbmx5IHJldHVybiBkYXRhIG91dCBvZiB0dXBsZXMgc2l0 dGluZyBpbiB0aGUKLQkgKiBjdXJyVHVwbGVzIGFycmF5LCBhIGZldGNoIG9mIE5BTUVEQVRBTEVO IGJ5dGVzIGNhbiBhdCB3b3JzdCBwdWxsIHNvbWUKLQkgKiBkYXRhIG91dCBvZiB0aGUgbWFya1R1 cGxlcyBhcnJheSAtLS0gcnVubmluZyBvZmYgdGhlIGVuZCBvZiBtZW1vcnkgZm9yCi0JICogYSBT SUdTRUdWIGlzIG5vdCBwb3NzaWJsZS4gIFllYWgsIHRoaXMgaXMgdWdseSBhcyBzaW4sIGJ1dCBp dCBiZWF0cwotCSAqIGFkZGluZyBzcGVjaWFsLWNhc2UgdHJlYXRtZW50IGZvciBuYW1lX29wcyBl bHNld2hlcmUuCi0JICovCi0JaWYgKHNjYW4tPnhzX3dhbnRfaXR1cCAmJiBzby0+Y3VyclR1cGxl cyA9PSBOVUxMKQotCXsKLQkJc28tPmN1cnJUdXBsZXMgPSAoY2hhciAqKSBwYWxsb2MoQkxDS1Na ICogMik7Ci0JCXNvLT5tYXJrVHVwbGVzID0gc28tPmN1cnJUdXBsZXMgKyBCTENLU1o7Ci0JfQot CiAJLyoKIAkgKiBSZXNldCB0aGUgc2NhbiBrZXlzCiAJICovCiAJaWYgKHNjYW5rZXkgJiYgc2Nh bi0+bnVtYmVyT2ZLZXlzID4gMCkKIAkJbWVtY3B5KHNjYW4tPmtleURhdGEsIHNjYW5rZXksIHNj YW4tPm51bWJlck9mS2V5cyAqIHNpemVvZihTY2FuS2V5RGF0YSkpOworCXNvLT5uZWVkUHJpbVNj YW4gPSBmYWxzZTsKKwlzby0+c2NhbkJlaGluZCA9IGZhbHNlOworCXNvLT5vcHBvc2l0ZURpckNo ZWNrID0gZmFsc2U7CiAJc28tPm51bWJlck9mS2V5cyA9IDA7CQkvKiB1bnRpbCBfYnRfcHJlcHJv Y2Vzc19rZXlzIHNldHMgaXQgKi8KIAlzby0+bnVtQXJyYXlLZXlzID0gMDsJCS8qIGRpdHRvICov CiB9CiAKKy8qCisgKglidGZyZWViYXRjaCgpIC0tIEZyZWUgYmF0Y2ggcmVzb3VyY2VzLCBpbmNs dWRpbmcgaXRzIGJ1ZmZlciBwaW4KKyAqLwordm9pZAorYnRmcmVlYmF0Y2goSW5kZXhTY2FuRGVz YyBzY2FuLCBCYXRjaEluZGV4U2NhbiBiYXRjaCkKK3sKKwlpZiAoYmF0Y2gtPm51bUtpbGxlZCA+ IDApCisJCV9idF9raWxsaXRlbXMoc2NhbiwgYmF0Y2gpOworCisJaWYgKCFzY2FuLT5iYXRjaHF1 ZXVlLT5kcm9wUGluKQorCXsKKwkJLyogaW5kZXhhbV91dGlsX2JhdGNoX3VubG9jayBkaWRuJ3Qg dW5waW4gcGFnZSBlYXJsaWVyLCBkbyBpdCBub3cgKi8KKwkJUmVsZWFzZUJ1ZmZlcihiYXRjaC0+ YnVmKTsKKwkJYmF0Y2gtPmJ1ZiA9IEludmFsaWRCdWZmZXI7CisJfQorCisJaW5kZXhhbV91dGls X2JhdGNoX3JlbGVhc2Uoc2NhbiwgYmF0Y2gpOworfQorCiAvKgogICoJYnRlbmRzY2FuKCkgLS0g Y2xvc2UgZG93biBhIHNjYW4KICAqLwpAQCAtNDcxLDExNiArMzkwLDQ4IEBAIGJ0ZW5kc2NhbihJ bmRleFNjYW5EZXNjIHNjYW4pCiB7CiAJQlRTY2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkg c2Nhbi0+b3BhcXVlOwogCi0JLyogd2UgYXJlbid0IGhvbGRpbmcgYW55IHJlYWQgbG9ja3MsIGJ1 dCBnb3R0YSBkcm9wIHRoZSBwaW5zICovCi0JaWYgKEJUU2NhblBvc0lzVmFsaWQoc28tPmN1cnJQ b3MpKQotCXsKLQkJLyogQmVmb3JlIGxlYXZpbmcgY3VycmVudCBwYWdlLCBkZWFsIHdpdGggYW55 IGtpbGxlZCBpdGVtcyAqLwotCQlpZiAoc28tPm51bUtpbGxlZCA+IDApCi0JCQlfYnRfa2lsbGl0 ZW1zKHNjYW4pOwotCQlCVFNjYW5Qb3NVbnBpbklmUGlubmVkKHNvLT5jdXJyUG9zKTsKLQl9Ci0K LQlzby0+bWFya0l0ZW1JbmRleCA9IC0xOwotCUJUU2NhblBvc1VucGluSWZQaW5uZWQoc28tPm1h cmtQb3MpOwotCi0JLyogTm8gbmVlZCB0byBpbnZhbGlkYXRlIHBvc2l0aW9ucywgdGhlIFJBTSBp cyBhYm91dCB0byBiZSBmcmVlZC4gKi8KLQogCS8qIFJlbGVhc2Ugc3RvcmFnZSAqLwogCWlmIChz by0+a2V5RGF0YSAhPSBOVUxMKQogCQlwZnJlZShzby0+a2V5RGF0YSk7CiAJLyogc28tPmFycmF5 S2V5cyBhbmQgc28tPm9yZGVyUHJvY3MgYXJlIGluIGFycmF5Q29udGV4dCAqLwogCWlmIChzby0+ YXJyYXlDb250ZXh0ICE9IE5VTEwpCiAJCU1lbW9yeUNvbnRleHREZWxldGUoc28tPmFycmF5Q29u dGV4dCk7Ci0JaWYgKHNvLT5raWxsZWRJdGVtcyAhPSBOVUxMKQotCQlwZnJlZShzby0+a2lsbGVk SXRlbXMpOwotCWlmIChzby0+Y3VyclR1cGxlcyAhPSBOVUxMKQotCQlwZnJlZShzby0+Y3VyclR1 cGxlcyk7Ci0JLyogc28tPm1hcmtUdXBsZXMgc2hvdWxkIG5vdCBiZSBwZnJlZSdkLCBzZWUgYnRy ZXNjYW4gKi8KIAlwZnJlZShzbyk7CiB9CiAKIC8qCi0gKglidG1hcmtwb3MoKSAtLSBzYXZlIGN1 cnJlbnQgc2NhbiBwb3NpdGlvbgorICoJYnRwb3NyZXNldCgpIC0tIGludmFsaWRhdGUgc2Nhbidz IGFycmF5IGtleXMKICAqLwogdm9pZAotYnRtYXJrcG9zKEluZGV4U2NhbkRlc2Mgc2NhbikKK2J0 cG9zcmVzZXQoSW5kZXhTY2FuRGVzYyBzY2FuLCBCYXRjaEluZGV4U2NhbiBtYXJrYmF0Y2gpCiB7 CiAJQlRTY2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwogCi0JLyog VGhlcmUgbWF5IGJlIGFuIG9sZCBtYXJrIHdpdGggYSBwaW4gKGJ1dCBubyBsb2NrKS4gKi8KLQlC VFNjYW5Qb3NVbnBpbklmUGlubmVkKHNvLT5tYXJrUG9zKTsKKwlpZiAoIXNvLT5udW1BcnJheUtl eXMpCisJCXJldHVybjsKIAogCS8qCi0JICogSnVzdCByZWNvcmQgdGhlIGN1cnJlbnQgaXRlbUlu ZGV4LiAgSWYgd2UgbGF0ZXIgc3RlcCB0byBuZXh0IHBhZ2UKLQkgKiBiZWZvcmUgcmVsZWFzaW5n IHRoZSBtYXJrZWQgcG9zaXRpb24sIF9idF9zdGVwcGFnZSBtYWtlcyBhIGZ1bGwgY29weSBvZgot CSAqIHRoZSBjdXJyUG9zIHN0cnVjdCBpbiBtYXJrUG9zLiAgSWYgKGFzIG9mdGVuIGhhcHBlbnMp IHRoZSBtYXJrIGlzIG1vdmVkCi0JICogYmVmb3JlIHdlIGxlYXZlIHRoZSBwYWdlLCB3ZSBkb24n dCBoYXZlIHRvIGRvIHRoYXQgd29yay4KKwkgKiBDb3JlIHN5c3RlbSBpcyBhYm91dCB0byByZXN0 b3JlIGEgbWFyayBhc3NvY2lhdGVkIHdpdGggYSBwcmV2aW91c2x5CisJICogcmV0dXJuZWQgYmF0 Y2guICBSZXNldCB0aGUgc2NhbidzIGFycmF5cyB0byBtYWtlIGFsbCB0aGlzIHNhZmUuCiAJICov Ci0JaWYgKEJUU2NhblBvc0lzVmFsaWQoc28tPmN1cnJQb3MpKQotCQlzby0+bWFya0l0ZW1JbmRl eCA9IHNvLT5jdXJyUG9zLml0ZW1JbmRleDsKKwlfYnRfc3RhcnRfYXJyYXlfa2V5cyhzY2FuLCBt YXJrYmF0Y2gtPmRpcik7CisKKwkvKgorCSAqIENvcmUgc3lzdGVtIHdpbGwgaW52YWxpZGF0ZSBh bGwgb3RoZXIgYmF0Y2hlcy4KKwkgKgorCSAqIERlYWwgd2l0aCB0aGlzIGJ5IHVuc2V0dGluZyBu ZWVkUHJpbVNjYW4gYXMgd2VsbCBhcyBtb3JlUmlnaHQgKG9yIGFzCisJICogd2VsbCBhcyBtb3Jl TGVmdCwgd2hlbiBzY2FubmluZyBiYWNrd2FyZHMpLiAgVGhhdCB3YXksIHRoZSBuZXh0IHRpbWUK KwkgKiBfYnRfbmV4dCBpcyBjYWxsZWQgaXQgd2lsbCBzdGVwIHRvIHRoZSByaWdodCAob3IgdG8g dGhlIGxlZnQpLiAgQXQgdGhhdAorCSAqIHBvaW50IF9idF9yZWFkcGFnZSB3aWxsIHJlc3RvcmUg dGhlIHNjYW4ncyBhcnJheXMgdG8gZWxlbWVudHMgdGhhdAorCSAqIGNvcnJlY3RseSB0cmFjayB0 aGUgbmV4dCBwYWdlJ3MgcG9zaXRpb24gaW4gdGhlIGluZGV4J3Mga2V5IHNwYWNlLgorCSAqLwor CWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKG1hcmtiYXRjaC0+ZGlyKSkKKwkJbWFya2JhdGNo LT5tb3JlUmlnaHQgPSB0cnVlOwogCWVsc2UKLQl7Ci0JCUJUU2NhblBvc0ludmFsaWRhdGUoc28t Pm1hcmtQb3MpOwotCQlzby0+bWFya0l0ZW1JbmRleCA9IC0xOwotCX0KLX0KLQotLyoKLSAqCWJ0 cmVzdHJwb3MoKSAtLSByZXN0b3JlIHNjYW4gdG8gbGFzdCBzYXZlZCBwb3NpdGlvbgotICovCi12 b2lkCi1idHJlc3RycG9zKEluZGV4U2NhbkRlc2Mgc2NhbikKLXsKLQlCVFNjYW5PcGFxdWUgc28g PSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7Ci0KLQlpZiAoc28tPm1hcmtJdGVtSW5kZXgg Pj0gMCkKLQl7Ci0JCS8qCi0JCSAqIFRoZSBzY2FuIGhhcyBuZXZlciBtb3ZlZCB0byBhIG5ldyBw YWdlIHNpbmNlIHRoZSBsYXN0IG1hcmsuICBKdXN0Ci0JCSAqIHJlc3RvcmUgdGhlIGl0ZW1JbmRl eC4KLQkJICoKLQkJICogTkI6IEluIHRoaXMgY2FzZSB3ZSBjYW4ndCBjb3VudCBvbiBhbnl0aGlu ZyBpbiBzby0+bWFya1BvcyB0byBiZQotCQkgKiBhY2N1cmF0ZS4KLQkJICovCi0JCXNvLT5jdXJy UG9zLml0ZW1JbmRleCA9IHNvLT5tYXJrSXRlbUluZGV4OwotCX0KLQllbHNlCi0JewotCQkvKgot CQkgKiBUaGUgc2NhbiBtb3ZlZCB0byBhIG5ldyBwYWdlIGFmdGVyIGxhc3QgbWFyayBvciByZXN0 b3JlLCBhbmQgd2UgYXJlCi0JCSAqIG5vdyByZXN0b3JpbmcgdG8gdGhlIG1hcmtlZCBwYWdlLiAg V2UgYXJlbid0IGhvbGRpbmcgYW55IHJlYWQKLQkJICogbG9ja3MsIGJ1dCBpZiB3ZSdyZSBzdGls bCBob2xkaW5nIHRoZSBwaW4gZm9yIHRoZSBjdXJyZW50IHBvc2l0aW9uLAotCQkgKiB3ZSBtdXN0 IGRyb3AgaXQuCi0JCSAqLwotCQlpZiAoQlRTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykpCi0J CXsKLQkJCS8qIEJlZm9yZSBsZWF2aW5nIGN1cnJlbnQgcGFnZSwgZGVhbCB3aXRoIGFueSBraWxs ZWQgaXRlbXMgKi8KLQkJCWlmIChzby0+bnVtS2lsbGVkID4gMCkKLQkJCQlfYnRfa2lsbGl0ZW1z KHNjYW4pOwotCQkJQlRTY2FuUG9zVW5waW5JZlBpbm5lZChzby0+Y3VyclBvcyk7Ci0JCX0KLQot CQlpZiAoQlRTY2FuUG9zSXNWYWxpZChzby0+bWFya1BvcykpCi0JCXsKLQkJCS8qIGJ1bXAgcGlu IG9uIG1hcmsgYnVmZmVyIGZvciBhc3NpZ25tZW50IHRvIGN1cnJlbnQgYnVmZmVyICovCi0JCQlp ZiAoQlRTY2FuUG9zSXNQaW5uZWQoc28tPm1hcmtQb3MpKQotCQkJCUluY3JCdWZmZXJSZWZDb3Vu dChzby0+bWFya1Bvcy5idWYpOwotCQkJbWVtY3B5KCZzby0+Y3VyclBvcywgJnNvLT5tYXJrUG9z LAotCQkJCSAgIG9mZnNldG9mKEJUU2NhblBvc0RhdGEsIGl0ZW1zWzFdKSArCi0JCQkJICAgc28t Pm1hcmtQb3MubGFzdEl0ZW0gKiBzaXplb2YoQlRTY2FuUG9zSXRlbSkpOwotCQkJaWYgKHNvLT5j dXJyVHVwbGVzKQotCQkJCW1lbWNweShzby0+Y3VyclR1cGxlcywgc28tPm1hcmtUdXBsZXMsCi0J CQkJCSAgIHNvLT5tYXJrUG9zLm5leHRUdXBsZU9mZnNldCk7Ci0JCQkvKiBSZXNldCB0aGUgc2Nh bidzIGFycmF5IGtleXMgKHNlZSBfYnRfc3RlcHBhZ2UgZm9yIHdoeSkgKi8KLQkJCWlmIChzby0+ bnVtQXJyYXlLZXlzKQotCQkJewotCQkJCV9idF9zdGFydF9hcnJheV9rZXlzKHNjYW4sIHNvLT5j dXJyUG9zLmRpcik7Ci0JCQkJc28tPm5lZWRQcmltU2NhbiA9IGZhbHNlOwotCQkJfQotCQl9Ci0J CWVsc2UKLQkJCUJUU2NhblBvc0ludmFsaWRhdGUoc28tPmN1cnJQb3MpOwotCX0KKwkJbWFya2Jh dGNoLT5tb3JlTGVmdCA9IHRydWU7CisJc28tPm5lZWRQcmltU2NhbiA9IGZhbHNlOworCXNvLT5z Y2FuQmVoaW5kID0gZmFsc2U7CisJc28tPm9wcG9zaXRlRGlyQ2hlY2sgPSBmYWxzZTsKIH0KIAog LyoKQEAgLTg5NiwxNSArNzQ3LDYgQEAgX2J0X3BhcmFsbGVsX3NlaXplKEluZGV4U2NhbkRlc2Mg c2NhbiwgQmxvY2tOdW1iZXIgKm5leHRfc2Nhbl9wYWdlLAogCSpuZXh0X3NjYW5fcGFnZSA9IElu dmFsaWRCbG9ja051bWJlcjsKIAkqbGFzdF9jdXJyX3BhZ2UgPSBJbnZhbGlkQmxvY2tOdW1iZXI7 CiAKLQkvKgotCSAqIFJlc2V0IHNvLT5jdXJyUG9zLCBhbmQgaW5pdGlhbGl6ZSBtb3JlTGVmdC9t b3JlUmlnaHQgc3VjaCB0aGF0IHRoZSBuZXh0Ci0JICogY2FsbCB0byBfYnRfcmVhZG5leHRwYWdl IHRyZWF0cyB0aGlzIGJhY2tlbmQgc2ltaWxhcmx5IHRvIGEgc2VyaWFsCi0JICogYmFja2VuZCB0 aGF0IHN0ZXBzIGZyb20gKmxhc3RfY3Vycl9wYWdlIHRvICpuZXh0X3NjYW5fcGFnZSAodW5sZXNz IHRoaXMKLQkgKiBiYWNrZW5kJ3Mgc28tPmN1cnJQb3MgaXMgaW5pdGlhbGl6ZWQgYnkgX2J0X3Jl YWRmaXJzdHBhZ2UgYmVmb3JlIHRoZW4pLgotCSAqLwotCUJUU2NhblBvc0ludmFsaWRhdGUoc28t PmN1cnJQb3MpOwotCXNvLT5jdXJyUG9zLm1vcmVMZWZ0ID0gc28tPmN1cnJQb3MubW9yZVJpZ2h0 ID0gdHJ1ZTsKLQogCWlmIChmaXJzdCkKIAl7CiAJCS8qCkBAIC0xMDU0LDggKzg5Niw2IEBAIF9i dF9wYXJhbGxlbF9kb25lKEluZGV4U2NhbkRlc2Mgc2NhbikKIAlCVFBhcmFsbGVsU2NhbkRlc2Mg YnRzY2FuOwogCWJvb2wJCXN0YXR1c19jaGFuZ2VkID0gZmFsc2U7CiAKLQlBc3NlcnQoIUJUU2Nh blBvc0lzVmFsaWQoc28tPmN1cnJQb3MpKTsKLQogCS8qIERvIG5vdGhpbmcsIGZvciBub24tcGFy YWxsZWwgc2NhbnMgKi8KIAlpZiAocGFyYWxsZWxfc2NhbiA9PSBOVUxMKQogCQlyZXR1cm47CmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNlYXJjaC5jIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL25idHJlZS9uYnRzZWFyY2guYwppbmRleCBhZWM3MTA5MzYuLjRmYTU5M2Yy YyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRzZWFyY2guYworKysg Yi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNlYXJjaC5jCkBAIC0yNSw1MiArMjUsMjEg QEAKICNpbmNsdWRlICJ1dGlscy9yZWwuaCIKIAogCi1zdGF0aWMgaW5saW5lIHZvaWQgX2J0X2Ry b3BfbG9ja19hbmRfbWF5YmVfcGluKFJlbGF0aW9uIHJlbCwgQlRTY2FuT3BhcXVlIHNvKTsKIHN0 YXRpYyBCdWZmZXIgX2J0X21vdmVyaWdodChSZWxhdGlvbiByZWwsIFJlbGF0aW9uIGhlYXByZWws IEJUU2Nhbkluc2VydCBrZXksCiAJCQkJCQkJQnVmZmVyIGJ1ZiwgYm9vbCBmb3J1cGRhdGUsIEJU U3RhY2sgc3RhY2ssCiAJCQkJCQkJaW50IGFjY2Vzcyk7CiBzdGF0aWMgT2Zmc2V0TnVtYmVyIF9i dF9iaW5zcmNoKFJlbGF0aW9uIHJlbCwgQlRTY2FuSW5zZXJ0IGtleSwgQnVmZmVyIGJ1Zik7CiBz dGF0aWMgaW50CV9idF9iaW5zcmNoX3Bvc3RpbmcoQlRTY2FuSW5zZXJ0IGtleSwgUGFnZSBwYWdl LAogCQkJCQkJCQlPZmZzZXROdW1iZXIgb2ZmbnVtKTsKLXN0YXRpYyBpbmxpbmUgdm9pZCBfYnRf cmV0dXJuaXRlbShJbmRleFNjYW5EZXNjIHNjYW4sIEJUU2Nhbk9wYXF1ZSBzbyk7Ci1zdGF0aWMg Ym9vbCBfYnRfc3RlcHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcik7 Ci1zdGF0aWMgYm9vbCBfYnRfcmVhZGZpcnN0cGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIE9mZnNl dE51bWJlciBvZmZudW0sCi0JCQkJCQkJICBTY2FuRGlyZWN0aW9uIGRpcik7Ci1zdGF0aWMgYm9v bCBfYnRfcmVhZG5leHRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgQmxvY2tOdW1iZXIgYmxrbm8s Ci0JCQkJCQkJIEJsb2NrTnVtYmVyIGxhc3RjdXJyYmxrbm8sIFNjYW5EaXJlY3Rpb24gZGlyLAot CQkJCQkJCSBib29sIHNlaXplZCk7CitzdGF0aWMgQmF0Y2hJbmRleFNjYW4gX2J0X3JlYWRmaXJz dHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBCYXRjaEluZGV4U2NhbiBmaXJzdGJhdGNoLAorCQkJ CQkJCQkJCU9mZnNldE51bWJlciBvZmZudW0sIFNjYW5EaXJlY3Rpb24gZGlyKTsKK3N0YXRpYyBC YXRjaEluZGV4U2NhbiBfYnRfcmVhZG5leHRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgQmxvY2tO dW1iZXIgYmxrbm8sCisJCQkJCQkJCQkgICBCbG9ja051bWJlciBsYXN0Y3VycmJsa25vLAorCQkJ CQkJCQkJICAgU2NhbkRpcmVjdGlvbiBkaXIsIGJvb2wgZmlyc3RwYWdlKTsKIHN0YXRpYyBCdWZm ZXIgX2J0X2xvY2tfYW5kX3ZhbGlkYXRlX2xlZnQoUmVsYXRpb24gcmVsLCBCbG9ja051bWJlciAq Ymxrbm8sCiAJCQkJCQkJCQkJIEJsb2NrTnVtYmVyIGxhc3RjdXJyYmxrbm8pOwotc3RhdGljIGJv b2wgX2J0X2VuZHBvaW50KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpOwot Ci0KLS8qCi0gKglfYnRfZHJvcF9sb2NrX2FuZF9tYXliZV9waW4oKQotICoKLSAqIFVubG9jayBz by0+Y3VyclBvcy5idWYuICBJZiBzY2FuIGlzIHNvLT5kcm9wUGluLCBkcm9wIHRoZSBwaW4sIHRv by4KLSAqIERyb3BwaW5nIHRoZSBwaW4gcHJldmVudHMgVkFDVVVNIGZyb20gYmxvY2tpbmcgb24g YWNxdWlyaW5nIGEgY2xlYW51cCBsb2NrLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQKLV9idF9k cm9wX2xvY2tfYW5kX21heWJlX3BpbihSZWxhdGlvbiByZWwsIEJUU2Nhbk9wYXF1ZSBzbykKLXsK LQlpZiAoIXNvLT5kcm9wUGluKQotCXsKLQkJLyogSnVzdCBkcm9wIHRoZSBsb2NrIChub3QgdGhl IHBpbikgKi8KLQkJX2J0X3VubG9ja2J1ZihyZWwsIHNvLT5jdXJyUG9zLmJ1Zik7Ci0JCXJldHVy bjsKLQl9Ci0KLQkvKgotCSAqIERyb3AgYm90aCB0aGUgbG9jayBhbmQgdGhlIHBpbi4KLQkgKgot CSAqIEhhdmUgdG8gc2V0IHNvLT5jdXJyUG9zLmxzbiBzbyB0aGF0IF9idF9raWxsaXRlbXMgaGFz IGEgd2F5IHRvIGRldGVjdAotCSAqIHdoZW4gY29uY3VycmVudCBoZWFwIFRJRCByZWN5Y2xpbmcg YnkgVkFDVVVNIG1pZ2h0IGhhdmUgdGFrZW4gcGxhY2UuCi0JICovCi0JQXNzZXJ0KFJlbGF0aW9u TmVlZHNXQUwocmVsKSk7Ci0Jc28tPmN1cnJQb3MubHNuID0gQnVmZmVyR2V0TFNOQXRvbWljKHNv LT5jdXJyUG9zLmJ1Zik7Ci0JX2J0X3JlbGJ1ZihyZWwsIHNvLT5jdXJyUG9zLmJ1Zik7Ci0Jc28t PmN1cnJQb3MuYnVmID0gSW52YWxpZEJ1ZmZlcjsKLX0KK3N0YXRpYyBCYXRjaEluZGV4U2NhbiBf YnRfZW5kcG9pbnQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwKKwkJCQkJ CQkJICAgQmF0Y2hJbmRleFNjYW4gZmlyc3RiYXRjaCk7CiAKIC8qCiAgKglfYnRfc2VhcmNoKCkg LS0gU2VhcmNoIHRoZSB0cmVlIGZvciBhIHBhcnRpY3VsYXIgc2NhbmtleSwKQEAgLTg2MCwyMCAr ODI5LDE2IEBAIF9idF9jb21wYXJlKFJlbGF0aW9uIHJlbCwKICAqCQljb25kaXRpb25zLCBhbmQg dGhlIHRyZWUgb3JkZXJpbmcuICBXZSBmaW5kIHRoZSBmaXJzdCBpdGVtIChvciwKICAqCQlpZiBi YWNrd2FyZHMgc2NhbiwgdGhlIGxhc3QgaXRlbSkgaW4gdGhlIHRyZWUgdGhhdCBzYXRpc2ZpZXMg dGhlCiAgKgkJcXVhbGlmaWNhdGlvbnMgaW4gdGhlIHNjYW4ga2V5LiAgT24gc3VjY2VzcyBleGl0 LCBkYXRhIGFib3V0IHRoZQotICoJCW1hdGNoaW5nIHR1cGxlKHMpIG9uIHRoZSBwYWdlIGhhcyBi ZWVuIGxvYWRlZCBpbnRvIHNvLT5jdXJyUG9zLiAgV2UnbGwKLSAqCQlkcm9wIGFsbCBsb2NrcyBh bmQgaG9sZCBvbnRvIGEgcGluIG9uIHBhZ2UncyBidWZmZXIsIGV4Y2VwdCBkdXJpbmcKLSAqCQlz by0+ZHJvcFBpbiBzY2Fucywgd2hlbiB3ZSBkcm9wIGJvdGggdGhlIGxvY2sgYW5kIHRoZSBwaW4u Ci0gKgkJX2J0X3JldHVybml0ZW0gc2V0cyB0aGUgbmV4dCBpdGVtIHRvIHJldHVybiB0byBzY2Fu IG9uIHN1Y2Nlc3MgZXhpdC4KKyAqCQltYXRjaGluZyB0dXBsZShzKSBvbiB0aGUgcGFnZSBoYXMg YmVlbiBsb2FkZWQgaW50byB0aGUgcmV0dXJuZWQgYmF0Y2guCiAgKgotICogSWYgdGhlcmUgYXJl IG5vIG1hdGNoaW5nIGl0ZW1zIGluIHRoZSBpbmRleCwgd2UgcmV0dXJuIGZhbHNlLCB3aXRoIG5v Ci0gKiBwaW5zIG9yIGxvY2tzIGhlbGQuICBzby0+Y3VyclBvcyB3aWxsIHJlbWFpbiBpbnZhbGlk LgorICogSWYgdGhlcmUgYXJlIG5vIG1hdGNoaW5nIGl0ZW1zIGluIHRoZSBpbmRleCwgd2UganVz dCByZXR1cm4gTlVMTC4KICAqCiAgKiBOb3RlIHRoYXQgc2Nhbi0+a2V5RGF0YVtdLCBhbmQgdGhl IHNvLT5rZXlEYXRhW10gc2NhbmtleSBidWlsdCBmcm9tIGl0LAogICogYXJlIGJvdGggc2VhcmNo LXR5cGUgc2NhbmtleXMgKHNlZSBuYnRyZWUvUkVBRE1FIGZvciBtb3JlIGFib3V0IHRoaXMpLgog ICogV2l0aGluIHRoaXMgcm91dGluZSwgd2UgYnVpbGQgYSB0ZW1wb3JhcnkgaW5zZXJ0aW9uLXR5 cGUgc2NhbmtleSB0byB1c2UKICAqIGluIGxvY2F0aW5nIHRoZSBzY2FuIHN0YXJ0IHBvc2l0aW9u LgogICovCi1ib29sCitCYXRjaEluZGV4U2NhbgogX2J0X2ZpcnN0KEluZGV4U2NhbkRlc2Mgc2Nh biwgU2NhbkRpcmVjdGlvbiBkaXIpCiB7CiAJUmVsYXRpb24JcmVsID0gc2Nhbi0+aW5kZXhSZWxh dGlvbjsKQEAgLTg4Nyw4ICs4NTIsNyBAQCBfYnRfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBT Y2FuRGlyZWN0aW9uIGRpcikKIAlTdHJhdGVneU51bWJlciBzdHJhdF90b3RhbCA9IEludmFsaWRT dHJhdGVneTsKIAlCbG9ja051bWJlciBibGtubyA9IEludmFsaWRCbG9ja051bWJlciwKIAkJCQls YXN0Y3VycmJsa25vOwotCi0JQXNzZXJ0KCFCVFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSk7 CisJQmF0Y2hJbmRleFNjYW4gZmlyc3RiYXRjaDsKIAogCS8qCiAJICogRXhhbWluZSB0aGUgc2Nh biBrZXlzIGFuZCBlbGltaW5hdGUgYW55IHJlZHVuZGFudCBrZXlzOyBhbHNvIG1hcmsgdGhlCkBA IC05MTMsNyArODc3LDcgQEAgX2J0X2ZpcnN0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVj dGlvbiBkaXIpCiAJICovCiAJaWYgKHNjYW4tPnBhcmFsbGVsX3NjYW4gIT0gTlVMTCAmJgogCQkh X2J0X3BhcmFsbGVsX3NlaXplKHNjYW4sICZibGtubywgJmxhc3RjdXJyYmxrbm8sIHRydWUpKQot CQlyZXR1cm4gZmFsc2U7CisJCXJldHVybiBmYWxzZTsJCQkvKiBkZWZpbml0ZWx5IGRvbmUgKHNv LT5uZWVkUHJpbVNjYW4gaXMgdW5zZXQpICovCiAKIAkvKgogCSAqIEluaXRpYWxpemUgdGhlIHNj YW4ncyBhcnJheXMgKGlmIGFueSkgZm9yIHRoZSBjdXJyZW50IHNjYW4gZGlyZWN0aW9uCkBAIC05 MzAsMTQgKzg5NCw4IEBAIF9idF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rp b24gZGlyKQogCQkgKiBfYnRfcmVhZG5leHRwYWdlIHJlbGVhc2VzIHRoZSBzY2FuIGZvciB1cyAo bm90IF9idF9yZWFkZmlyc3RwYWdlKS4KIAkJICovCiAJCUFzc2VydChzY2FuLT5wYXJhbGxlbF9z Y2FuICE9IE5VTEwpOwotCQlBc3NlcnQoIXNvLT5uZWVkUHJpbVNjYW4pOwotCQlBc3NlcnQoYmxr bm8gIT0gUF9OT05FKTsKIAotCQlpZiAoIV9idF9yZWFkbmV4dHBhZ2Uoc2NhbiwgYmxrbm8sIGxh c3RjdXJyYmxrbm8sIGRpciwgdHJ1ZSkpCi0JCQlyZXR1cm4gZmFsc2U7Ci0KLQkJX2J0X3JldHVy bml0ZW0oc2Nhbiwgc28pOwotCQlyZXR1cm4gdHJ1ZTsKKwkJcmV0dXJuIF9idF9yZWFkbmV4dHBh Z2Uoc2NhbiwgYmxrbm8sIGxhc3RjdXJyYmxrbm8sIGRpciwgdHJ1ZSk7CiAJfQogCiAJLyoKQEAg LTEyMjksNiArMTE4NywxMCBAQCBfYnRfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGly ZWN0aW9uIGRpcikKIAkJfQogCX0KIAorCS8qIEFsbG9jYXRlIHNwYWNlIGZvciBmaXJzdCBiYXRj aCAqLworCWZpcnN0YmF0Y2ggPSBpbmRleGFtX3V0aWxfYmF0Y2hfYWxsb2Moc2NhbiwgTWF4VElE c1BlckJUcmVlUGFnZSwKKwkJCQkJCQkJCQkgIHNjYW4tPnhzX3dhbnRfaXR1cCk7CisKIAkvKgog CSAqIElmIHdlIGZvdW5kIG5vIHVzYWJsZSBib3VuZGFyeSBrZXlzLCB3ZSBoYXZlIHRvIHN0YXJ0 IGZyb20gb25lIGVuZCBvZgogCSAqIHRoZSB0cmVlLiAgV2FsayBkb3duIHRoYXQgZWRnZSB0byB0 aGUgZmlyc3Qgb3IgbGFzdCBrZXksIGFuZCBzY2FuIGZyb20KQEAgLTEyMzcsNyArMTE5OSw3IEBA IF9idF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogCSAqIE5v dGU6IGNhbGxzIF9idF9yZWFkZmlyc3RwYWdlIGZvciB1cywgd2hpY2ggcmVsZWFzZXMgdGhlIHBh cmFsbGVsIHNjYW4uCiAJICovCiAJaWYgKGtleXN6ID09IDApCi0JCXJldHVybiBfYnRfZW5kcG9p bnQoc2NhbiwgZGlyKTsKKwkJcmV0dXJuIF9idF9lbmRwb2ludChzY2FuLCBkaXIsIGZpcnN0YmF0 Y2gpOwogCiAJLyoKIAkgKiBXZSB3YW50IHRvIHN0YXJ0IHRoZSBzY2FuIHNvbWV3aGVyZSB3aXRo aW4gdGhlIGluZGV4LiAgU2V0IHVwIGFuCkBAIC0xNTA1LDEyICsxNDY3LDEyIEBAIF9idF9maXJz dChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogCSAqIHBvc2l0aW9uIG91 cnNlbHZlcyBvbiB0aGUgdGFyZ2V0IGxlYWYgcGFnZS4KIAkgKi8KIAlBc3NlcnQoU2NhbkRpcmVj dGlvbklzQmFja3dhcmQoZGlyKSA9PSBpbnNrZXkuYmFja3dhcmQpOwotCXN0YWNrID0gX2J0X3Nl YXJjaChyZWwsIE5VTEwsICZpbnNrZXksICZzby0+Y3VyclBvcy5idWYsIEJUX1JFQUQpOworCXN0 YWNrID0gX2J0X3NlYXJjaChyZWwsIE5VTEwsICZpbnNrZXksICZmaXJzdGJhdGNoLT5idWYsIEJU X1JFQUQpOwogCiAJLyogZG9uJ3QgbmVlZCB0byBrZWVwIHRoZSBzdGFjayBhcm91bmQuLi4gKi8K IAlfYnRfZnJlZXN0YWNrKHN0YWNrKTsKIAotCWlmICghQnVmZmVySXNWYWxpZChzby0+Y3VyclBv cy5idWYpKQorCWlmICghQnVmZmVySXNWYWxpZChmaXJzdGJhdGNoLT5idWYpKQogCXsKIAkJQXNz ZXJ0KCFzby0+bmVlZFByaW1TY2FuKTsKIApAQCAtMTUyNiwxMSArMTQ4OCwxMSBAQCBfYnRfZmly c3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIAkJaWYgKElzb2xhdGlv bklzU2VyaWFsaXphYmxlKCkpCiAJCXsKIAkJCVByZWRpY2F0ZUxvY2tSZWxhdGlvbihyZWwsIHNj YW4tPnhzX3NuYXBzaG90KTsKLQkJCXN0YWNrID0gX2J0X3NlYXJjaChyZWwsIE5VTEwsICZpbnNr ZXksICZzby0+Y3VyclBvcy5idWYsIEJUX1JFQUQpOworCQkJc3RhY2sgPSBfYnRfc2VhcmNoKHJl bCwgTlVMTCwgJmluc2tleSwgJmZpcnN0YmF0Y2gtPmJ1ZiwgQlRfUkVBRCk7CiAJCQlfYnRfZnJl ZXN0YWNrKHN0YWNrKTsKIAkJfQogCi0JCWlmICghQnVmZmVySXNWYWxpZChzby0+Y3VyclBvcy5i dWYpKQorCQlpZiAoIUJ1ZmZlcklzVmFsaWQoZmlyc3RiYXRjaC0+YnVmKSkKIAkJewogCQkJX2J0 X3BhcmFsbGVsX2RvbmUoc2Nhbik7CiAJCQlyZXR1cm4gZmFsc2U7CkBAIC0xNTM4LDExICsxNTAw LDExIEBAIF9idF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQog CX0KIAogCS8qIHBvc2l0aW9uIHRvIHRoZSBwcmVjaXNlIGl0ZW0gb24gdGhlIHBhZ2UgKi8KLQlv ZmZudW0gPSBfYnRfYmluc3JjaChyZWwsICZpbnNrZXksIHNvLT5jdXJyUG9zLmJ1Zik7CisJb2Zm bnVtID0gX2J0X2JpbnNyY2gocmVsLCAmaW5za2V5LCBmaXJzdGJhdGNoLT5idWYpOwogCiAJLyoK IAkgKiBOb3cgbG9hZCBkYXRhIGZyb20gdGhlIGZpcnN0IHBhZ2Ugb2YgdGhlIHNjYW4gKHVzdWFs bHkgdGhlIHBhZ2UKLQkgKiBjdXJyZW50bHkgaW4gc28tPmN1cnJQb3MuYnVmKS4KKwkgKiBjdXJy ZW50bHkgaW4gZmlyc3RiYXRjaC5idWYpLgogCSAqCiAJICogSWYgaW5za2V5Lm5leHRrZXkgPSBm YWxzZSBhbmQgaW5za2V5LmJhY2t3YXJkID0gZmFsc2UsIG9mZm51bSBpcwogCSAqIHBvc2l0aW9u ZWQgYXQgdGhlIGZpcnN0IG5vbi1waXZvdCB0dXBsZSA+PSBpbnNrZXkuc2NhbmtleXMuCkBAIC0x NTYwLDE2OCArMTUyMiw2OSBAQCBfYnRfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGly ZWN0aW9uIGRpcikKIAkgKiBmb3IgdGhlIHBhZ2UuICBGb3IgZXhhbXBsZSwgd2hlbiBpbnNrZXkg aXMgYm90aCA8IHRoZSBsZWFmIHBhZ2UncyBoaWdoCiAJICoga2V5IGFuZCA+IGFsbCBvZiBpdHMg bm9uLXBpdm90IHR1cGxlcywgb2ZmbnVtIHdpbGwgYmUgIm1heG9mZiArIDEiLgogCSAqLwotCWlm ICghX2J0X3JlYWRmaXJzdHBhZ2Uoc2Nhbiwgb2ZmbnVtLCBkaXIpKQotCQlyZXR1cm4gZmFsc2U7 Ci0KLQlfYnRfcmV0dXJuaXRlbShzY2FuLCBzbyk7Ci0JcmV0dXJuIHRydWU7CisJcmV0dXJuIF9i dF9yZWFkZmlyc3RwYWdlKHNjYW4sIGZpcnN0YmF0Y2gsIG9mZm51bSwgZGlyKTsKIH0KIAogLyoK ICAqCV9idF9uZXh0KCkgLS0gR2V0IHRoZSBuZXh0IGl0ZW0gaW4gYSBzY2FuLgogICoKLSAqCQlP biBlbnRyeSwgc28tPmN1cnJQb3MgZGVzY3JpYmVzIHRoZSBjdXJyZW50IHBhZ2UsIHdoaWNoIG1h eSBiZSBwaW5uZWQKLSAqCQlidXQgaXMgbm90IGxvY2tlZCwgYW5kIHNvLT5jdXJyUG9zLml0ZW1J bmRleCBpZGVudGlmaWVzIHdoaWNoIGl0ZW0gd2FzCi0gKgkJcHJldmlvdXNseSByZXR1cm5lZC4K KyAqCQlPbiBlbnRyeSwgcHJpb3JiYXRjaCBkZXNjcmliZXMgdGhlIGJhdGNoIHRoYXQgd2FzIGxh c3QgcmV0dXJuZWQgYnkKKyAqCQlidGdldGJhdGNoLiAgV2UnbGwgdXNlIHRoZSBwcmlvciBiYXRj aCdzIHBvc2l0aW9uaW5nIGluZm9ybWF0aW9uIHRvCisgKgkJZGVjaWRlIHdoaWNoIHBhZ2UgdG8g cmVhZCBuZXh0LgogICoKLSAqCQlPbiBzdWNjZXNzIGV4aXQsIHNvLT5jdXJyUG9zIGlzIHVwZGF0 ZWQgYXMgbmVlZGVkLCBhbmQgX2J0X3JldHVybml0ZW0KLSAqCQlzZXRzIHRoZSBuZXh0IGl0ZW0g dG8gcmV0dXJuIHRvIHRoZSBzY2FuLiAgc28tPmN1cnJQb3MgcmVtYWlucyB2YWxpZC4KKyAqCQlP biBzdWNjZXNzIGV4aXQsIHJldHVybnMgdGhlIG5leHQgYmF0Y2guICBUaGVyZSBtdXN0IGJlIGF0 IGxlYXN0IG9uZQorICoJCW1hdGNoaW5nIHR1cGxlIG9uIGFueSByZXR1cm5lZCBiYXRjaCAoZWxz ZSB3ZSdkIGp1c3QgcmV0dXJuIE5VTEwpLgogICoKLSAqCQlPbiBmYWlsdXJlIGV4aXQgKG5vIG1v cmUgdHVwbGVzKSwgd2UgaW52YWxpZGF0ZSBzby0+Y3VyclBvcy4gIEl0J2xsCi0gKgkJc3RpbGwg YmUgcG9zc2libGUgZm9yIHRoZSBzY2FuIHRvIHJldHVybiB0dXBsZXMgYnkgY2hhbmdpbmcgZGly ZWN0aW9uLAotICoJCXRob3VnaCB3ZSdsbCBuZWVkIHRvIGNhbGwgX2J0X2ZpcnN0IGFuZXcgaW4g dGhhdCBvdGhlciBkaXJlY3Rpb24uCisgKgkJT24gZmFpbHVyZSBleGl0IChubyBtb3JlIHR1cGxl cyksIHdlIHJldHVybiBOVUxMLiAgSXQnbGwgc3RpbGwgYmUKKyAqCQlwb3NzaWJsZSBmb3IgdGhl IHNjYW4gdG8gcmV0dXJuIHR1cGxlcyBieSBjaGFuZ2luZyBkaXJlY3Rpb24sIHRob3VnaAorICoJ CXdlJ2xsIG5lZWQgdG8gY2FsbCBfYnRfZmlyc3QgYW5ldyBpbiB0aGF0IG90aGVyIGRpcmVjdGlv bi4KICAqLwotYm9vbAotX2J0X25leHQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9u IGRpcikKLXsKLQlCVFNjYW5PcGFxdWUgc28gPSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7 Ci0KLQlBc3NlcnQoQlRTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykpOwotCi0JLyoKLQkgKiBB ZHZhbmNlIHRvIG5leHQgdHVwbGUgb24gY3VycmVudCBwYWdlOyBvciBpZiB0aGVyZSdzIG5vIG1v cmUsIHRyeSB0bwotCSAqIHN0ZXAgdG8gdGhlIG5leHQgcGFnZSB3aXRoIGRhdGEuCi0JICovCi0J aWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkKLQl7Ci0JCWlmICgrK3NvLT5jdXJyUG9z Lml0ZW1JbmRleCA+IHNvLT5jdXJyUG9zLmxhc3RJdGVtKQotCQl7Ci0JCQlpZiAoIV9idF9zdGVw cGFnZShzY2FuLCBkaXIpKQotCQkJCXJldHVybiBmYWxzZTsKLQkJfQotCX0KLQllbHNlCi0Jewot CQlpZiAoLS1zby0+Y3VyclBvcy5pdGVtSW5kZXggPCBzby0+Y3VyclBvcy5maXJzdEl0ZW0pCi0J CXsKLQkJCWlmICghX2J0X3N0ZXBwYWdlKHNjYW4sIGRpcikpCi0JCQkJcmV0dXJuIGZhbHNlOwot CQl9Ci0JfQotCi0JX2J0X3JldHVybml0ZW0oc2Nhbiwgc28pOwotCXJldHVybiB0cnVlOwotfQot Ci0vKgotICogUmV0dXJuIHRoZSBpbmRleCBpdGVtIGZyb20gc28tPmN1cnJQb3MuaXRlbXNbc28t PmN1cnJQb3MuaXRlbUluZGV4XSB0byB0aGUKLSAqIGluZGV4IHNjYW4gYnkgc2V0dGluZyB0aGUg cmVsZXZhbnQgZmllbGRzIGluIGNhbGxlcidzIGluZGV4IHNjYW4gZGVzY3JpcHRvcgotICovCi1z dGF0aWMgaW5saW5lIHZvaWQKLV9idF9yZXR1cm5pdGVtKEluZGV4U2NhbkRlc2Mgc2NhbiwgQlRT Y2FuT3BhcXVlIHNvKQotewotCUJUU2NhblBvc0l0ZW0gKmN1cnJJdGVtID0gJnNvLT5jdXJyUG9z Lml0ZW1zW3NvLT5jdXJyUG9zLml0ZW1JbmRleF07Ci0KLQkvKiBNb3N0IHJlY2VudCBfYnRfcmVh ZHBhZ2UgbXVzdCBoYXZlIHN1Y2NlZWRlZCAqLwotCUFzc2VydChCVFNjYW5Qb3NJc1ZhbGlkKHNv LT5jdXJyUG9zKSk7Ci0JQXNzZXJ0KHNvLT5jdXJyUG9zLml0ZW1JbmRleCA+PSBzby0+Y3VyclBv cy5maXJzdEl0ZW0pOwotCUFzc2VydChzby0+Y3VyclBvcy5pdGVtSW5kZXggPD0gc28tPmN1cnJQ b3MubGFzdEl0ZW0pOwotCi0JLyogUmV0dXJuIG5leHQgaXRlbSwgcGVyIGFtZ2V0dHVwbGUgY29u dHJhY3QgKi8KLQlzY2FuLT54c19oZWFwdGlkID0gY3Vyckl0ZW0tPmhlYXBUaWQ7Ci0JaWYgKHNv LT5jdXJyVHVwbGVzKQotCQlzY2FuLT54c19pdHVwID0gKEluZGV4VHVwbGUpIChzby0+Y3VyclR1 cGxlcyArIGN1cnJJdGVtLT50dXBsZU9mZnNldCk7Ci19Ci0KLS8qCi0gKglfYnRfc3RlcHBhZ2Uo KSAtLSBTdGVwIHRvIG5leHQgcGFnZSBjb250YWluaW5nIHZhbGlkIGRhdGEgZm9yIHNjYW4KLSAq Ci0gKiBXcmFwcGVyIG9uIF9idF9yZWFkbmV4dHBhZ2UgdGhhdCBwZXJmb3JtcyBmaW5hbCBzdGVw cyBmb3IgdGhlIGN1cnJlbnQgcGFnZS4KLSAqCi0gKiBPbiBlbnRyeSwgc28tPmN1cnJQb3MgbXVz dCBiZSB2YWxpZC4gIEl0cyBidWZmZXIgd2lsbCBiZSBwaW5uZWQsIHRob3VnaAotICogbmV2ZXIg bG9ja2VkLiAoQWN0dWFsbHksIHdoZW4gc28tPmRyb3BQaW4gdGhlcmUgd29uJ3QgZXZlbiBiZSBh IHBpbiBoZWxkLAotICogdGhvdWdoIHNvLT5jdXJyUG9zLmN1cnJQYWdlIG11c3Qgc3RpbGwgYmUg c2V0IHRvIGEgdmFsaWQgYmxvY2sgbnVtYmVyLikKLSAqLwotc3RhdGljIGJvb2wKLV9idF9zdGVw cGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQorQmF0Y2hJbmRleFNj YW4KK19idF9uZXh0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsIEJhdGNo SW5kZXhTY2FuIHByaW9yYmF0Y2gpCiB7CiAJQlRTY2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1 ZSkgc2Nhbi0+b3BhcXVlOwogCUJsb2NrTnVtYmVyIGJsa25vLAogCQkJCWxhc3RjdXJyYmxrbm87 CiAKLQlBc3NlcnQoQlRTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykpOwotCi0JLyogQmVmb3Jl IGxlYXZpbmcgY3VycmVudCBwYWdlLCBkZWFsIHdpdGggYW55IGtpbGxlZCBpdGVtcyAqLwotCWlm IChzby0+bnVtS2lsbGVkID4gMCkKLQkJX2J0X2tpbGxpdGVtcyhzY2FuKTsKLQotCS8qCi0JICog QmVmb3JlIHdlIG1vZGlmeSBjdXJyUG9zLCBtYWtlIGEgY29weSBvZiB0aGUgcGFnZSBkYXRhIGlm IHRoZXJlIHdhcyBhCi0JICogbWFyayBwb3NpdGlvbiB0aGF0IG5lZWRzIGl0LgotCSAqLwotCWlm IChzby0+bWFya0l0ZW1JbmRleCA+PSAwKQotCXsKLQkJLyogYnVtcCBwaW4gb24gY3VycmVudCBi dWZmZXIgZm9yIGFzc2lnbm1lbnQgdG8gbWFyayBidWZmZXIgKi8KLQkJaWYgKEJUU2NhblBvc0lz UGlubmVkKHNvLT5jdXJyUG9zKSkKLQkJCUluY3JCdWZmZXJSZWZDb3VudChzby0+Y3VyclBvcy5i dWYpOwotCQltZW1jcHkoJnNvLT5tYXJrUG9zLCAmc28tPmN1cnJQb3MsCi0JCQkgICBvZmZzZXRv ZihCVFNjYW5Qb3NEYXRhLCBpdGVtc1sxXSkgKwotCQkJICAgc28tPmN1cnJQb3MubGFzdEl0ZW0g KiBzaXplb2YoQlRTY2FuUG9zSXRlbSkpOwotCQlpZiAoc28tPm1hcmtUdXBsZXMpCi0JCQltZW1j cHkoc28tPm1hcmtUdXBsZXMsIHNvLT5jdXJyVHVwbGVzLAotCQkJCSAgIHNvLT5jdXJyUG9zLm5l eHRUdXBsZU9mZnNldCk7Ci0JCXNvLT5tYXJrUG9zLml0ZW1JbmRleCA9IHNvLT5tYXJrSXRlbUlu ZGV4OwotCQlzby0+bWFya0l0ZW1JbmRleCA9IC0xOwotCi0JCS8qCi0JCSAqIElmIHdlJ3JlIGp1 c3QgYWJvdXQgdG8gc3RhcnQgdGhlIG5leHQgcHJpbWl0aXZlIGluZGV4IHNjYW4KLQkJICogKHBv c3NpYmxlIHdpdGggYSBzY2FuIHRoYXQgaGFzIGFycmF5cyBrZXlzLCBhbmQgbmVlZHMgdG8gc2tp cCB0bwotCQkgKiBjb250aW51ZSBpbiB0aGUgY3VycmVudCBzY2FuIGRpcmVjdGlvbiksIG1vcmVM ZWZ0L21vcmVSaWdodCBvbmx5Ci0JCSAqIGluZGljYXRlIHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQg cHJpbWl0aXZlIGluZGV4IHNjYW4uICBUaGV5IG11c3QKLQkJICogbmV2ZXIgYmUgdGFrZW4gdG8g aW5kaWNhdGUgdGhhdCB0aGUgdG9wLWxldmVsIGluZGV4IHNjYW4gaGFzIGVuZGVkCi0JCSAqICh0 aGF0IHdvdWxkIGJlIHdyb25nKS4KLQkJICoKLQkJICogV2UgY291bGQgaGFuZGxlIHRoaXMgY2Fz ZSBieSB0cmVhdGluZyB0aGUgY3VycmVudCBhcnJheSBrZXlzIGFzCi0JCSAqIG1hcmtQb3Mgc3Rh dGUuICBCdXQgZGVwZW5kaW5nIG9uIHRoZSBjdXJyZW50IGFycmF5IHN0YXRlIGxpa2UgdGhpcwot CQkgKiB3b3VsZCBhZGQgY29tcGxleGl0eS4gIEluc3RlYWQsIHdlIGp1c3QgdW5zZXQgbWFya1Bv cydzIGNvcHkgb2YKLQkJICogbW9yZVJpZ2h0IG9yIG1vcmVMZWZ0ICh3aGljaGV2ZXIgbWlnaHQg YmUgYWZmZWN0ZWQpLCB3aGlsZSBtYWtpbmcKLQkJICogYnRyZXN0cnBvcyByZXNldCB0aGUgc2Nh bidzIGFycmF5cyB0byB0aGVpciBpbml0aWFsIHNjYW4gcG9zaXRpb25zLgotCQkgKiBJbiBlZmZl Y3QsIGJ0cmVzdHJwb3MgbGVhdmVzIGFkdmFuY2luZyB0aGUgYXJyYXlzIHVwIHRvIHRoZSBmaXJz dAotCQkgKiBfYnRfcmVhZHBhZ2UgY2FsbCAodGhhdCB0YWtlcyBwbGFjZSBhZnRlciBpdCBoYXMg cmVzdG9yZWQgbWFya1BvcykuCi0JCSAqLwotCQlpZiAoc28tPm5lZWRQcmltU2NhbikKLQkJewot CQkJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoc28tPmN1cnJQb3MuZGlyKSkKLQkJCQlzby0+ bWFya1Bvcy5tb3JlUmlnaHQgPSB0cnVlOwotCQkJZWxzZQotCQkJCXNvLT5tYXJrUG9zLm1vcmVM ZWZ0ID0gdHJ1ZTsKLQkJfQotCi0JCS8qIG1hcmsvcmVzdG9yZSBub3Qgc3VwcG9ydGVkIGJ5IHBh cmFsbGVsIHNjYW5zICovCi0JCUFzc2VydCghc2Nhbi0+cGFyYWxsZWxfc2Nhbik7Ci0JfQotCi0J QlRTY2FuUG9zVW5waW5JZlBpbm5lZChzby0+Y3VyclBvcyk7CisJQXNzZXJ0KEJsb2NrTnVtYmVy SXNWYWxpZChwcmlvcmJhdGNoLT5jdXJyUGFnZSkpOwogCiAJLyogV2FsayB0byB0aGUgbmV4dCBw YWdlIHdpdGggZGF0YSAqLwogCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikpCi0JCWJs a25vID0gc28tPmN1cnJQb3MubmV4dFBhZ2U7CisJCWJsa25vID0gcHJpb3JiYXRjaC0+bmV4dFBh Z2U7CiAJZWxzZQotCQlibGtubyA9IHNvLT5jdXJyUG9zLnByZXZQYWdlOwotCWxhc3RjdXJyYmxr bm8gPSBzby0+Y3VyclBvcy5jdXJyUGFnZTsKKwkJYmxrbm8gPSBwcmlvcmJhdGNoLT5wcmV2UGFn ZTsKKwlsYXN0Y3VycmJsa25vID0gcHJpb3JiYXRjaC0+Y3VyclBhZ2U7CiAKIAkvKgogCSAqIENh bmNlbCBwcmltaXRpdmUgaW5kZXggc2NhbnMgdGhhdCB3ZXJlIHNjaGVkdWxlZCB3aGVuIHRoZSBj YWxsIHRvCi0JICogX2J0X3JlYWRwYWdlIGZvciBjdXJyUG9zIGhhcHBlbmVkIHRvIHVzZSB0aGUg b3Bwb3NpdGUgZGlyZWN0aW9uIHRvIHRoZQotCSAqIG9uZSB0aGF0IHdlJ3JlIHN0ZXBwaW5nIGlu IG5vdy4gIChJdCdzIG9rYXkgdG8gbGVhdmUgdGhlIHNjYW4ncyBhcnJheQotCSAqIGtleXMgYXMt aXMsIHNpbmNlIHRoZSBuZXh0IF9idF9yZWFkcGFnZSB3aWxsIGFkdmFuY2UgdGhlbS4pCisJICog X2J0X3JlYWRwYWdlIGZvciBwb3MgaGFwcGVuZWQgdG8gdXNlIHRoZSBvcHBvc2l0ZSBkaXJlY3Rp b24gdG8gdGhlIG9uZQorCSAqIHRoYXQgd2UncmUgc3RlcHBpbmcgaW4gbm93LiAgKEl0J3Mgb2th eSB0byBsZWF2ZSB0aGUgc2NhbidzIGFycmF5IGtleXMKKwkgKiBhcy1pcywgc2luY2UgdGhlIG5l eHQgX2J0X3JlYWRwYWdlIHdpbGwgYWR2YW5jZSB0aGVtLikKIAkgKi8KLQlpZiAoc28tPmN1cnJQ b3MuZGlyICE9IGRpcikKKwlpZiAocHJpb3JiYXRjaC0+ZGlyICE9IGRpcikKIAkJc28tPm5lZWRQ cmltU2NhbiA9IGZhbHNlOwogCisJaWYgKGJsa25vID09IFBfTk9ORSB8fAorCQkoU2NhbkRpcmVj dGlvbklzRm9yd2FyZChkaXIpID8KKwkJICFwcmlvcmJhdGNoLT5tb3JlUmlnaHQgOiAhcHJpb3Ji YXRjaC0+bW9yZUxlZnQpKQorCXsKKwkJLyoKKwkJICogcHJpb3JiYXRjaCBfYnRfcmVhZHBhZ2Ug Y2FsbCBlbmRlZCBzY2FuIGluIHRoaXMgZGlyZWN0aW9uICh0aG91Z2gKKwkJICogaWYgc28tPm5l ZWRQcmltU2NhbiB3YXMgc2V0IHRoZSBzY2FuIHdpbGwgY29udGludWUgaW4gX2J0X2ZpcnN0KQor CQkgKi8KKwkJX2J0X3BhcmFsbGVsX2RvbmUoc2Nhbik7CisJCXJldHVybiBOVUxMOworCX0KKwor CS8qIHBhcmFsbGVsIHNjYW4gbXVzdCBzZWl6ZSB0aGUgc2NhbiB0byBnZXQgbmV4dCBibGtubyAq LworCWlmIChzY2FuLT5wYXJhbGxlbF9zY2FuICE9IE5VTEwgJiYKKwkJIV9idF9wYXJhbGxlbF9z ZWl6ZShzY2FuLCAmYmxrbm8sICZsYXN0Y3VycmJsa25vLCBmYWxzZSkpCisJCXJldHVybiBOVUxM OwkJCS8qIGRvbmUgaWZmIHNvLT5uZWVkUHJpbVNjYW4gd2Fzbid0IHNldCAqLworCiAJcmV0dXJu IF9idF9yZWFkbmV4dHBhZ2Uoc2NhbiwgYmxrbm8sIGxhc3RjdXJyYmxrbm8sIGRpciwgZmFsc2Up OwogfQogCisKIC8qCiAgKglfYnRfcmVhZGZpcnN0cGFnZSgpIC0tIFJlYWQgZmlyc3QgcGFnZSBj b250YWluaW5nIHZhbGlkIGRhdGEgZm9yIF9idF9maXJzdAogICoKQEAgLTE3MzEsNzMgKzE1OTQs OTAgQEAgX2J0X3N0ZXBwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIp CiAgKiB0byBzdG9wIHRoZSBzY2FuIG9uIHRoaXMgcGFnZSBieSBjYWxsaW5nIF9idF9jaGVja2tl eXMgYWdhaW5zdCB0aGUgaGlnaAogICoga2V5LiAgU2VlIF9idF9yZWFkcGFnZSBmb3IgZnVsbCBk ZXRhaWxzLgogICoKLSAqIE9uIGVudHJ5LCBzby0+Y3VyclBvcyBtdXN0IGJlIHBpbm5lZCBhbmQg bG9ja2VkIChzbyBvZmZudW0gc3RheXMgdmFsaWQpLgorICogT24gZW50cnksIGZpcnN0YmF0Y2gg bXVzdCBiZSBwaW5uZWQgYW5kIGxvY2tlZCAoc28gb2ZmbnVtIHN0YXlzIHZhbGlkKS4KICAqIFBh cmFsbGVsIHNjYW4gY2FsbGVycyBtdXN0IGhhdmUgc2VpemVkIHRoZSBzY2FuIGJlZm9yZSBjYWxs aW5nIGhlcmUuCiAgKgotICogT24gZXhpdCwgd2UnbGwgaGF2ZSB1cGRhdGVkIHNvLT5jdXJyUG9z IGFuZCByZXRhaW5lZCBsb2NrcyBhbmQgcGlucworICogT24gZXhpdCwgd2UnbGwgaGF2ZSB1cGRh dGVkIGZpcnN0YmF0Y2ggYW5kIHJldGFpbmVkIGxvY2tzIGFuZCBwaW5zCiAgKiBhY2NvcmRpbmcg dG8gdGhlIHNhbWUgcnVsZXMgYXMgdGhvc2UgbGFpZCBvdXQgZm9yIF9idF9yZWFkbmV4dHBhZ2Ug ZXhpdC4KLSAqIExpa2UgX2J0X3JlYWRuZXh0cGFnZSwgb3VyIHJldHVybiB2YWx1ZSBpbmRpY2F0 ZXMgaWYgdGhlcmUgYXJlIGFueSBtYXRjaGluZwotICogcmVjb3JkcyBpbiB0aGUgZ2l2ZW4gZGly ZWN0aW9uLgogICoKICAqIFdlIGFsd2F5cyByZWxlYXNlIHRoZSBzY2FuIGZvciBhIHBhcmFsbGVs IHNjYW4gY2FsbGVyLCByZWdhcmRsZXNzIG9mCiAgKiBzdWNjZXNzIG9yIGZhaWx1cmU7IHdlJ2xs IGNhbGwgX2J0X3BhcmFsbGVsX3JlbGVhc2UgYXMgc29vbiBhcyBwb3NzaWJsZS4KICAqLwotc3Rh dGljIGJvb2wKLV9idF9yZWFkZmlyc3RwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgT2Zmc2V0TnVt YmVyIG9mZm51bSwgU2NhbkRpcmVjdGlvbiBkaXIpCitzdGF0aWMgQmF0Y2hJbmRleFNjYW4KK19i dF9yZWFkZmlyc3RwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgQmF0Y2hJbmRleFNjYW4gZmlyc3Ri YXRjaCwKKwkJCQkgIE9mZnNldE51bWJlciBvZmZudW0sIFNjYW5EaXJlY3Rpb24gZGlyKQogewog CUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKKwlCbG9ja051 bWJlciBibGtubywKKwkJCQlsYXN0Y3VycmJsa25vOwogCi0Jc28tPm51bUtpbGxlZCA9IDA7CQkJ LyoganVzdCBwYXJhbm9pYSAqLwotCXNvLT5tYXJrSXRlbUluZGV4ID0gLTE7CQkvKiBkaXR0byAq LwotCi0JLyogSW5pdGlhbGl6ZSBzby0+Y3VyclBvcyBmb3IgdGhlIGZpcnN0IHBhZ2UgKHBhZ2Ug aW4gc28tPmN1cnJQb3MuYnVmKSAqLworCS8qIEluaXRpYWxpemUgZmlyc3RiYXRjaCdzIHBvc2l0 aW9uIGZvciB0aGUgZmlyc3QgcGFnZSAqLwogCWlmIChzby0+bmVlZFByaW1TY2FuKQogCXsKIAkJ QXNzZXJ0KHNvLT5udW1BcnJheUtleXMpOwogCi0JCXNvLT5jdXJyUG9zLm1vcmVMZWZ0ID0gdHJ1 ZTsKLQkJc28tPmN1cnJQb3MubW9yZVJpZ2h0ID0gdHJ1ZTsKKwkJZmlyc3RiYXRjaC0+bW9yZUxl ZnQgPSB0cnVlOworCQlmaXJzdGJhdGNoLT5tb3JlUmlnaHQgPSB0cnVlOwogCQlzby0+bmVlZFBy aW1TY2FuID0gZmFsc2U7CiAJfQogCWVsc2UgaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGly KSkKIAl7Ci0JCXNvLT5jdXJyUG9zLm1vcmVMZWZ0ID0gZmFsc2U7Ci0JCXNvLT5jdXJyUG9zLm1v cmVSaWdodCA9IHRydWU7CisJCWZpcnN0YmF0Y2gtPm1vcmVMZWZ0ID0gZmFsc2U7CisJCWZpcnN0 YmF0Y2gtPm1vcmVSaWdodCA9IHRydWU7CiAJfQogCWVsc2UKIAl7Ci0JCXNvLT5jdXJyUG9zLm1v cmVMZWZ0ID0gdHJ1ZTsKLQkJc28tPmN1cnJQb3MubW9yZVJpZ2h0ID0gZmFsc2U7CisJCWZpcnN0 YmF0Y2gtPm1vcmVMZWZ0ID0gdHJ1ZTsKKwkJZmlyc3RiYXRjaC0+bW9yZVJpZ2h0ID0gZmFsc2U7 CiAJfQogCiAJLyoKIAkgKiBBdHRlbXB0IHRvIGxvYWQgbWF0Y2hpbmcgdHVwbGVzIGZyb20gdGhl IGZpcnN0IHBhZ2UuCiAJICoKLQkgKiBOb3RlIHRoYXQgX2J0X3JlYWRwYWdlIHdpbGwgZmluaXNo IGluaXRpYWxpemluZyB0aGUgc28tPmN1cnJQb3MgZmllbGRzLgorCSAqIE5vdGUgdGhhdCBfYnRf cmVhZHBhZ2Ugd2lsbCBmaW5pc2ggaW5pdGlhbGl6aW5nIHRoZSBmaXJzdGJhdGNoIGZpZWxkcy4K IAkgKiBfYnRfcmVhZHBhZ2UgYWxzbyByZWxlYXNlcyBwYXJhbGxlbCBzY2FuIChldmVuIHdoZW4g aXQgcmV0dXJucyBmYWxzZSkuCiAJICovCi0JaWYgKF9idF9yZWFkcGFnZShzY2FuLCBkaXIsIG9m Zm51bSwgdHJ1ZSkpCisJaWYgKF9idF9yZWFkcGFnZShzY2FuLCBmaXJzdGJhdGNoLCBkaXIsIG9m Zm51bSwgdHJ1ZSkpCiAJewotCQlSZWxhdGlvbglyZWwgPSBzY2FuLT5pbmRleFJlbGF0aW9uOwot Ci0JCS8qCi0JCSAqIF9idF9yZWFkcGFnZSBzdWNjZWVkZWQuICBEcm9wIHRoZSBsb2NrIChhbmQg bWF5YmUgdGhlIHBpbikgb24KLQkJICogc28tPmN1cnJQb3MuYnVmIGluIHByZXBhcmF0aW9uIGZv ciBidGdldHR1cGxlIHJldHVybmluZyB0dXBsZXMuCi0JCSAqLwotCQlBc3NlcnQoQlRTY2FuUG9z SXNQaW5uZWQoc28tPmN1cnJQb3MpKTsKLQkJX2J0X2Ryb3BfbG9ja19hbmRfbWF5YmVfcGluKHJl bCwgc28pOwotCQlyZXR1cm4gdHJ1ZTsKKwkJLyogX2J0X3JlYWRwYWdlIHNhdmVkIG9uZSBvciBt b3JlIG1hdGNoZXMgaW4gZmlyc3RiYXRjaC5pdGVtc1tdICovCisJCWluZGV4YW1fdXRpbF9iYXRj aF91bmxvY2soc2NhbiwgZmlyc3RiYXRjaCk7CisJCXJldHVybiBmaXJzdGJhdGNoOwogCX0KIAot CS8qIFRoZXJlJ3Mgbm8gYWN0dWFsbHktbWF0Y2hpbmcgZGF0YSBvbiB0aGUgcGFnZSBpbiBzby0+ Y3VyclBvcy5idWYgKi8KLQlfYnRfdW5sb2NrYnVmKHNjYW4tPmluZGV4UmVsYXRpb24sIHNvLT5j dXJyUG9zLmJ1Zik7CisJLyogVGhlcmUncyBubyBhY3R1YWxseS1tYXRjaGluZyBkYXRhIG9uIHRo ZSBwYWdlICovCisJX2J0X3JlbGJ1ZihzY2FuLT5pbmRleFJlbGF0aW9uLCBmaXJzdGJhdGNoLT5i dWYpOworCWZpcnN0YmF0Y2gtPmJ1ZiA9IEludmFsaWRCdWZmZXI7CiAKLQkvKiBDYWxsIF9idF9y ZWFkbmV4dHBhZ2UgdXNpbmcgaXRzIF9idF9zdGVwcGFnZSB3cmFwcGVyIGZ1bmN0aW9uICovCi0J aWYgKCFfYnRfc3RlcHBhZ2Uoc2NhbiwgZGlyKSkKLQkJcmV0dXJuIGZhbHNlOworCS8qIFdhbGsg dG8gdGhlIG5leHQgcGFnZSB3aXRoIGRhdGEgKi8KKwlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2Fy ZChkaXIpKQorCQlibGtubyA9IGZpcnN0YmF0Y2gtPm5leHRQYWdlOworCWVsc2UKKwkJYmxrbm8g PSBmaXJzdGJhdGNoLT5wcmV2UGFnZTsKKwlsYXN0Y3VycmJsa25vID0gZmlyc3RiYXRjaC0+Y3Vy clBhZ2U7CiAKLQkvKiBfYnRfcmVhZHBhZ2UgZm9yIGEgbGF0ZXIgcGFnZSAobm93IGluIHNvLT5j dXJyUG9zKSBzdWNjZWVkZWQgKi8KLQlyZXR1cm4gdHJ1ZTsKKwlBc3NlcnQoZmlyc3RiYXRjaC0+ ZGlyID09IGRpcik7CisKKwlpZiAoYmxrbm8gPT0gUF9OT05FIHx8CisJCShTY2FuRGlyZWN0aW9u SXNGb3J3YXJkKGRpcikgPworCQkgIWZpcnN0YmF0Y2gtPm1vcmVSaWdodCA6ICFmaXJzdGJhdGNo LT5tb3JlTGVmdCkpCisJeworCQkvKgorCQkgKiBmaXJzdGJhdGNoIF9idF9yZWFkcGFnZSBjYWxs IGVuZGVkIHNjYW4gaW4gdGhpcyBkaXJlY3Rpb24gKHRob3VnaAorCQkgKiBpZiBzby0+bmVlZFBy aW1TY2FuIHdhcyBzZXQgdGhlIHNjYW4gd2lsbCBjb250aW51ZSBpbiBfYnRfZmlyc3QpCisJCSAq LworCQlpbmRleGFtX3V0aWxfYmF0Y2hfcmVsZWFzZShzY2FuLCBmaXJzdGJhdGNoKTsKKwkJX2J0 X3BhcmFsbGVsX2RvbmUoc2Nhbik7CisJCXJldHVybiBOVUxMOworCX0KKworCWluZGV4YW1fdXRp bF9iYXRjaF9yZWxlYXNlKHNjYW4sIGZpcnN0YmF0Y2gpOworCisJLyogcGFyYWxsZWwgc2NhbiBt dXN0IHNlaXplIHRoZSBzY2FuIHRvIGdldCBuZXh0IGJsa25vICovCisJaWYgKHNjYW4tPnBhcmFs bGVsX3NjYW4gIT0gTlVMTCAmJgorCQkhX2J0X3BhcmFsbGVsX3NlaXplKHNjYW4sICZibGtubywg Jmxhc3RjdXJyYmxrbm8sIGZhbHNlKSkKKwkJcmV0dXJuIE5VTEw7CQkJLyogZG9uZSBpZmYgc28t Pm5lZWRQcmltU2NhbiB3YXNuJ3Qgc2V0ICovCisKKwlyZXR1cm4gX2J0X3JlYWRuZXh0cGFnZShz Y2FuLCBibGtubywgbGFzdGN1cnJibGtubywgZGlyLCBmYWxzZSk7CiB9CiAKIC8qCkBAIC0xODA3 LDEwMiArMTY4Nyw2OSBAQCBfYnRfcmVhZGZpcnN0cGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIE9m ZnNldE51bWJlciBvZmZudW0sIFNjYW5EaXJlY3Rpb24gZGlyKQogICogcHJldmlvdXNseS1zYXZl ZCByaWdodCBsaW5rIG9yIGxlZnQgbGluay4gIGxhc3RjdXJyYmxrbm8gaXMgdGhlIHBhZ2UgdGhh dAogICogd2FzIGN1cnJlbnQgYXQgdGhlIHBvaW50IHdoZXJlIHRoZSBibGtubyBsaW5rIHdhcyBz YXZlZCwgd2hpY2ggd2UgdXNlIHRvCiAgKiByZWFzb24gYWJvdXQgY29uY3VycmVudCBwYWdlIHNw bGl0cy9wYWdlIGRlbGV0aW9ucyBkdXJpbmcgYmFja3dhcmRzIHNjYW5zLgotICogSW4gdGhlIGNv bW1vbiBjYXNlIHdoZXJlIHNlaXplZD1mYWxzZSwgYmxrbm8gaXMgZWl0aGVyIHNvLT5jdXJyUG9z Lm5leHRQYWdlCi0gKiBvciBzby0+Y3VyclBvcy5wcmV2UGFnZSwgYW5kIGxhc3RjdXJyYmxrbm8g aXMgc28tPmN1cnJQb3MuY3VyclBhZ2UuCisgKiBibGtubyBpcyB0aGUgcHJpb3Igc2NhbiBwb3Np dGlvbidzIG5leHRQYWdlIG9yIHByZXZQYWdlIChkZXBlbmRpbmcgb24gc2NhbgorICogZGlyZWN0 aW9uKSwgYW5kIGxhc3RjdXJyYmxrbm8gaXMgdGhlIHByaW9yIHBvc2l0aW9uJ3MgY3VyclBhZ2Uu CiAgKgotICogT24gZW50cnksIHNvLT5jdXJyUG9zIHNob3VsZG4ndCBiZSBsb2NrZWQgYnkgY2Fs bGVyLiAgc28tPmN1cnJQb3MuYnVmIG11c3QKLSAqIGJlIEludmFsaWRCdWZmZXIvdW5waW5uZWQg YXMgbmVlZGVkIGJ5IGNhbGxlciAobm90ZSB0aGF0IGxhc3RjdXJyYmxrbm8KLSAqIHdvbid0IG5l ZWQgdG8gYmUgcmVhZCBhZ2FpbiBpbiBhbG1vc3QgYWxsIGNhc2VzKS4gIFBhcmFsbGVsIHNjYW4g Y2FsbGVycwotICogdGhhdCBzZWl6ZWQgdGhlIHNjYW4gYmVmb3JlIGNhbGxpbmcgaGVyZSBzaG91 bGQgcGFzcyBzZWl6ZWQ9dHJ1ZTsgc3VjaCBhCi0gKiBjYWxsZXIncyBibGtubyBhbmQgbGFzdGN1 cnJibGtubyBhcmd1bWVudHMgY29tZSBmcm9tIHRoZSBzZWl6ZWQgc2Nhbi4KLSAqIHNlaXplZD1m YWxzZSBjYWxsZXJzIGp1c3QgcGFzcyB1cyB0aGUgYmxrbm8vbGFzdGN1cnJibGtubyB0YWtlbiBm cm9tIHRoZWlyCi0gKiBzby0+Y3VyclBvcywgd2hpY2ggKGFsb25nIHdpdGggc28tPmN1cnJQb3Mg aXRzZWxmKSBjYW4gYmUgdXNlZCB0byBlbmQgdGhlCi0gKiBzY2FuLiAgQSBzZWl6ZWQ9ZmFsc2Ug Y2FsbGVyJ3MgYmxrbm8gY2FuIG5ldmVyIGJlIGFzc3VtZWQgdG8gYmUgdGhlIHBhZ2UKLSAqIHRo YXQgbXVzdCBiZSByZWFkIG5leHQgZHVyaW5nIGEgcGFyYWxsZWwgc2NhbiwgdGhvdWdoLiAgV2Ug bXVzdCBmaWd1cmUgdGhhdAotICogcGFydCBvdXQgZm9yIG91cnNlbHZlcyBieSBzZWl6aW5nIHRo ZSBzY2FuICh0aGUgY29ycmVjdCBwYWdlIHRvIHJlYWQgbWlnaHQKLSAqIGFscmVhZHkgYmUgYmV5 b25kIHRoZSBzZWl6ZWQ9ZmFsc2UgY2FsbGVyJ3MgYmxrbm8gZHVyaW5nIGEgcGFyYWxsZWwgc2Nh biwKLSAqIHVubGVzcyBibGtuby9zby0+Y3VyclBvcy5uZXh0UGFnZS9zby0+Y3VyclBvcy5wcmV2 UGFnZSBpcyBhbHJlYWR5IFBfTk9ORSwKLSAqIG9yIHVubGVzcyBzby0+Y3VyclBvcy5tb3JlUmln aHQvc28tPmN1cnJQb3MubW9yZUxlZnQgaXMgYWxyZWFkeSB1bnNldCkuCisgKiBPbiBlbnRyeSwg bm8gcGFnZSBzaG91bGQgYmUgbG9ja2VkIGJ5IGNhbGxlci4KICAqCi0gKiBPbiBzdWNjZXNzIGV4 aXQsIHNvLT5jdXJyUG9zIGlzIHVwZGF0ZWQgdG8gY29udGFpbiBkYXRhIGZyb20gdGhlIG5leHQK LSAqIGludGVyZXN0aW5nIHBhZ2UsIGFuZCB3ZSByZXR1cm4gdHJ1ZS4gIFdlIGhvbGQgYSBwaW4g b24gdGhlIGJ1ZmZlciBvbgotICogc3VjY2VzcyBleGl0IChleGNlcHQgZHVyaW5nIHNvLT5kcm9w UGluIGluZGV4IHNjYW5zLCB3aGVuIHdlIGRyb3AgdGhlIHBpbgotICogZWFnZXJseSB0byBhdm9p ZCBibG9ja2luZyBWQUNVVU0pLgorICogT24gc3VjY2VzcyBleGl0LCByZXR1cm5zIHNjYW4gYmF0 Y2ggY29udGFpbmluZyBkYXRhIGZyb20gdGhlIG5leHQKKyAqIGludGVyZXN0aW5nIHBhZ2UuICBX ZSBob2xkIGEgcGluIG9uIHRoZSBidWZmZXIgb24gc3VjY2VzcyBleGl0IChleGNlcHQKKyAqIGR1 cmluZyBkcm9wUGluIHBsYWluIGluZGV4IHNjYW5zLCB3aGVuIHdlIGRyb3AgdGhlIHBpbiBlYWdl cmx5IHRvIGF2b2lkCisgKiBibG9ja2luZyBWQUNVVU0pLiAgSWYgdGhlcmUgYXJlIG5vIG1vcmUg bWF0Y2hpbmcgcmVjb3JkcyBpbiB0aGUgZ2l2ZW4KKyAqIGRpcmVjdGlvbiwgd2UganVzdCByZXR1 cm4gTlVMTC4KICAqCi0gKiBJZiB0aGVyZSBhcmUgbm8gbW9yZSBtYXRjaGluZyByZWNvcmRzIGlu IHRoZSBnaXZlbiBkaXJlY3Rpb24sIHdlIGludmFsaWRhdGUKLSAqIHNvLT5jdXJyUG9zICh3aGls ZSBlbnN1cmluZyBpdCByZXRhaW5zIG5vIGxvY2tzIG9yIHBpbnMpLCBhbmQgcmV0dXJuIGZhbHNl LgotICoKLSAqIFdlIGFsd2F5cyByZWxlYXNlIHRoZSBzY2FuIGZvciBhIHBhcmFsbGVsIHNjYW4g Y2FsbGVyLCByZWdhcmRsZXNzIG9mCi0gKiBzdWNjZXNzIG9yIGZhaWx1cmU7IHdlJ2xsIGNhbGwg X2J0X3BhcmFsbGVsX3JlbGVhc2UgYXMgc29vbiBhcyBwb3NzaWJsZS4KKyAqIFBhcmFsbGVsIHNj YW4gY2FsbGVycyBtdXN0IHNlaXplIHRoZSBzY2FuIGJlZm9yZSBjYWxsaW5nIGhlcmUuICBibGtu byBhbmQKKyAqIGxhc3RjdXJyYmxrbm8gc2hvdWxkIGNvbWUgZnJvbSB0aGUgc2VpemVkIHNjYW4u ICBXZSdsbCByZWxlYXNlIHRoZSBzY2FuIGFzCisgKiBzb29uIGFzIHBvc3NpYmxlLgogICovCi1z dGF0aWMgYm9vbAorc3RhdGljIEJhdGNoSW5kZXhTY2FuCiBfYnRfcmVhZG5leHRwYWdlKEluZGV4 U2NhbkRlc2Mgc2NhbiwgQmxvY2tOdW1iZXIgYmxrbm8sCi0JCQkJIEJsb2NrTnVtYmVyIGxhc3Rj dXJyYmxrbm8sIFNjYW5EaXJlY3Rpb24gZGlyLCBib29sIHNlaXplZCkKKwkJCQkgQmxvY2tOdW1i ZXIgbGFzdGN1cnJibGtubywgU2NhbkRpcmVjdGlvbiBkaXIsIGJvb2wgZmlyc3RwYWdlKQogewog CVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247Ci0JQlRTY2FuT3BhcXVlIHNvID0g KEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOworCUJhdGNoSW5kZXhTY2FuIG5ld2JhdGNoOwog Ci0JQXNzZXJ0KHNvLT5jdXJyUG9zLmN1cnJQYWdlID09IGxhc3RjdXJyYmxrbm8gfHwgc2VpemVk KTsKLQlBc3NlcnQoIShibGtubyA9PSBQX05PTkUgJiYgc2VpemVkKSk7Ci0JQXNzZXJ0KCFCVFNj YW5Qb3NJc1Bpbm5lZChzby0+Y3VyclBvcykpOworCS8qIEFsbG9jYXRlIHNwYWNlIGZvciBuZXh0 IGJhdGNoICovCisJbmV3YmF0Y2ggPSBpbmRleGFtX3V0aWxfYmF0Y2hfYWxsb2Moc2NhbiwgTWF4 VElEc1BlckJUcmVlUGFnZSwKKwkJCQkJCQkJCQlzY2FuLT54c193YW50X2l0dXApOwogCiAJLyoK LQkgKiBSZW1lbWJlciB0aGF0IHRoZSBzY2FuIGFscmVhZHkgcmVhZCBsYXN0Y3VycmJsa25vLCBh IHBhZ2UgdG8gdGhlIGxlZnQKLQkgKiBvZiBibGtubyAob3IgcmVtZW1iZXIgcmVhZGluZyBhIHBh Z2UgdG8gdGhlIHJpZ2h0LCBmb3IgYmFja3dhcmRzIHNjYW5zKQorCSAqIHBvcyBpcyB0aGUgZmly c3QgdmFsaWQgcGFnZSB0byB0aGUgcmlnaHQgKG9yIHRvIHRoZSBsZWZ0KSBvZgorCSAqIGxhc3Rj dXJyYmxrbm8uICBBbHNvIHByb3Zpc2lvbmFsbHkgYXNzdW1lIHRoYXQgdGhlcmUnbGwgYmUgYW5v dGhlciBwYWdlCisJICogd2UnbGwgbmVlZCB0byB0aGUgcmlnaHQgKG9yIHRvIHRoZSBsZWZ0KSBh aGVhZCBvZiBfYnRfcmVhZHBhZ2UgY2FsbC4KIAkgKi8KLQlpZiAoU2NhbkRpcmVjdGlvbklzRm9y d2FyZChkaXIpKQotCQlzby0+Y3VyclBvcy5tb3JlTGVmdCA9IHRydWU7Ci0JZWxzZQotCQlzby0+ Y3VyclBvcy5tb3JlUmlnaHQgPSB0cnVlOworCW5ld2JhdGNoLT5tb3JlTGVmdCA9IHRydWU7CisJ bmV3YmF0Y2gtPm1vcmVSaWdodCA9IHRydWU7CiAKIAlmb3IgKDs7KQogCXsKIAkJUGFnZQkJcGFn ZTsKIAkJQlRQYWdlT3BhcXVlIG9wYXF1ZTsKIAotCQlpZiAoYmxrbm8gPT0gUF9OT05FIHx8Ci0J CQkoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIpID8KLQkJCSAhc28tPmN1cnJQb3MubW9yZVJp Z2h0IDogIXNvLT5jdXJyUG9zLm1vcmVMZWZ0KSkKLQkJewotCQkJLyogbW9zdCByZWNlbnQgX2J0 X3JlYWRwYWdlIGNhbGwgKGZvciBsYXN0Y3VycmJsa25vKSBlbmRlZCBzY2FuICovCi0JCQlBc3Nl cnQoc28tPmN1cnJQb3MuY3VyclBhZ2UgPT0gbGFzdGN1cnJibGtubyAmJiAhc2VpemVkKTsKLQkJ CUJUU2NhblBvc0ludmFsaWRhdGUoc28tPmN1cnJQb3MpOwotCQkJX2J0X3BhcmFsbGVsX2RvbmUo c2Nhbik7CS8qIGlmZiAhc28tPm5lZWRQcmltU2NhbiAqLwotCQkJcmV0dXJuIGZhbHNlOwotCQl9 Ci0KLQkJQXNzZXJ0KCFzby0+bmVlZFByaW1TY2FuKTsKLQotCQkvKiBwYXJhbGxlbCBzY2FuIG11 c3QgbmV2ZXIgYWN0dWFsbHkgdmlzaXQgc28tPmN1cnJQb3MgYmxrbm8gKi8KLQkJaWYgKCFzZWl6 ZWQgJiYgc2Nhbi0+cGFyYWxsZWxfc2NhbiAhPSBOVUxMICYmCi0JCQkhX2J0X3BhcmFsbGVsX3Nl aXplKHNjYW4sICZibGtubywgJmxhc3RjdXJyYmxrbm8sIGZhbHNlKSkKLQkJewotCQkJLyogd2hv bGUgc2NhbiBpcyBub3cgZG9uZSAob3IgYW5vdGhlciBwcmltaXRpdmUgc2NhbiByZXF1aXJlZCkg Ki8KLQkJCUJUU2NhblBvc0ludmFsaWRhdGUoc28tPmN1cnJQb3MpOwotCQkJcmV0dXJuIGZhbHNl OwotCQl9CisJCUFzc2VydCghKChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZSktPm5lZWRQcmlt U2Nhbik7CisJCUFzc2VydChibGtubyAhPSBQX05PTkUgJiYgbGFzdGN1cnJibGtubyAhPSBQX05P TkUpOwogCiAJCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikpCiAJCXsKIAkJCS8qIHJl YWQgYmxrbm8sIGJ1dCBjaGVjayBmb3IgaW50ZXJydXB0cyBmaXJzdCAqLwogCQkJQ0hFQ0tfRk9S X0lOVEVSUlVQVFMoKTsKLQkJCXNvLT5jdXJyUG9zLmJ1ZiA9IF9idF9nZXRidWYocmVsLCBibGtu bywgQlRfUkVBRCk7CisJCQluZXdiYXRjaC0+YnVmID0gX2J0X2dldGJ1ZihyZWwsIGJsa25vLCBC VF9SRUFEKTsKIAkJfQogCQllbHNlCiAJCXsKIAkJCS8qIHJlYWQgYmxrbm8sIGF2b2lkaW5nIHJh Y2UgKGFsc28gY2hlY2tzIGZvciBpbnRlcnJ1cHRzKSAqLwotCQkJc28tPmN1cnJQb3MuYnVmID0g X2J0X2xvY2tfYW5kX3ZhbGlkYXRlX2xlZnQocmVsLCAmYmxrbm8sCi0JCQkJCQkJCQkJCQkJCSBs YXN0Y3VycmJsa25vKTsKLQkJCWlmIChzby0+Y3VyclBvcy5idWYgPT0gSW52YWxpZEJ1ZmZlcikK KwkJCW5ld2JhdGNoLT5idWYgPSBfYnRfbG9ja19hbmRfdmFsaWRhdGVfbGVmdChyZWwsICZibGtu bywKKwkJCQkJCQkJCQkJCQkgICBsYXN0Y3VycmJsa25vKTsKKwkJCWlmIChuZXdiYXRjaC0+YnVm ID09IEludmFsaWRCdWZmZXIpCiAJCQl7CiAJCQkJLyogbXVzdCBoYXZlIGJlZW4gYSBjb25jdXJy ZW50IGRlbGV0aW9uIG9mIGxlZnRtb3N0IHBhZ2UgKi8KLQkJCQlCVFNjYW5Qb3NJbnZhbGlkYXRl KHNvLT5jdXJyUG9zKTsKIAkJCQlfYnRfcGFyYWxsZWxfZG9uZShzY2FuKTsKLQkJCQlyZXR1cm4g ZmFsc2U7CisJCQkJaW5kZXhhbV91dGlsX2JhdGNoX3JlbGVhc2Uoc2NhbiwgbmV3YmF0Y2gpOwor CQkJCXJldHVybiBOVUxMOwogCQkJfQogCQl9CiAKLQkJcGFnZSA9IEJ1ZmZlckdldFBhZ2Uoc28t PmN1cnJQb3MuYnVmKTsKKwkJcGFnZSA9IEJ1ZmZlckdldFBhZ2UobmV3YmF0Y2gtPmJ1Zik7CiAJ CW9wYXF1ZSA9IEJUUGFnZUdldE9wYXF1ZShwYWdlKTsKIAkJbGFzdGN1cnJibGtubyA9IGJsa25v OwogCQlpZiAobGlrZWx5KCFQX0lHTk9SRShvcGFxdWUpKSkKQEAgLTE5MTAsMTcgKzE3NTcsMTcg QEAgX2J0X3JlYWRuZXh0cGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIEJsb2NrTnVtYmVyIGJsa25v LAogCQkJLyogc2VlIGlmIHRoZXJlIGFyZSBhbnkgbWF0Y2hlcyBvbiB0aGlzIHBhZ2UgKi8KIAkJ CWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikpCiAJCQl7Ci0JCQkJLyogbm90ZSB0aGF0 IHRoaXMgd2lsbCBjbGVhciBtb3JlUmlnaHQgaWYgd2UgY2FuIHN0b3AgKi8KLQkJCQlpZiAoX2J0 X3JlYWRwYWdlKHNjYW4sIGRpciwgUF9GSVJTVERBVEFLRVkob3BhcXVlKSwgc2VpemVkKSkKKwkJ CQlpZiAoX2J0X3JlYWRwYWdlKHNjYW4sIG5ld2JhdGNoLCBkaXIsCisJCQkJCQkJCSBQX0ZJUlNU REFUQUtFWShvcGFxdWUpLCBmaXJzdHBhZ2UpKQogCQkJCQlicmVhazsKLQkJCQlibGtubyA9IHNv LT5jdXJyUG9zLm5leHRQYWdlOworCQkJCWJsa25vID0gbmV3YmF0Y2gtPm5leHRQYWdlOwogCQkJ fQogCQkJZWxzZQogCQkJewotCQkJCS8qIG5vdGUgdGhhdCB0aGlzIHdpbGwgY2xlYXIgbW9yZUxl ZnQgaWYgd2UgY2FuIHN0b3AgKi8KLQkJCQlpZiAoX2J0X3JlYWRwYWdlKHNjYW4sIGRpciwgUGFn ZUdldE1heE9mZnNldE51bWJlcihwYWdlKSwgc2VpemVkKSkKKwkJCQlpZiAoX2J0X3JlYWRwYWdl KHNjYW4sIG5ld2JhdGNoLCBkaXIsCisJCQkJCQkJCSBQYWdlR2V0TWF4T2Zmc2V0TnVtYmVyKHBh Z2UpLCBmaXJzdHBhZ2UpKQogCQkJCQlicmVhazsKLQkJCQlibGtubyA9IHNvLT5jdXJyUG9zLnBy ZXZQYWdlOworCQkJCWJsa25vID0gbmV3YmF0Y2gtPnByZXZQYWdlOwogCQkJfQogCQl9CiAJCWVs c2UKQEAgLTE5MzUsMTkgKzE3ODIsMzkgQEAgX2J0X3JlYWRuZXh0cGFnZShJbmRleFNjYW5EZXNj IHNjYW4sIEJsb2NrTnVtYmVyIGJsa25vLAogCQl9CiAKIAkJLyogbm8gbWF0Y2hpbmcgdHVwbGVz IG9uIHRoaXMgcGFnZSAqLwotCQlfYnRfcmVsYnVmKHJlbCwgc28tPmN1cnJQb3MuYnVmKTsKLQkJ c2VpemVkID0gZmFsc2U7CQkJLyogcmVsZWFzZWQgYnkgX2J0X3JlYWRwYWdlIChvciBieSB1cykg Ki8KKwkJX2J0X3JlbGJ1ZihyZWwsIG5ld2JhdGNoLT5idWYpOworCQluZXdiYXRjaC0+YnVmID0g SW52YWxpZEJ1ZmZlcjsKKworCQkvKiBDb250aW51ZSB0aGUgc2NhbiBpbiB0aGlzIGRpcmVjdGlv bj8gKi8KKwkJaWYgKGJsa25vID09IFBfTk9ORSB8fAorCQkJKFNjYW5EaXJlY3Rpb25Jc0Zvcndh cmQoZGlyKSA/CisJCQkgIW5ld2JhdGNoLT5tb3JlUmlnaHQgOiAhbmV3YmF0Y2gtPm1vcmVMZWZ0 KSkKKwkJeworCQkJLyoKKwkJCSAqIGJsa25vIF9idF9yZWFkcGFnZSBjYWxsIGVuZGVkIHNjYW4g aW4gdGhpcyBkaXJlY3Rpb24gKHRob3VnaCBpZgorCQkJICogc28tPm5lZWRQcmltU2NhbiB3YXMg c2V0IHRoZSBzY2FuIHdpbGwgY29udGludWUgaW4gX2J0X2ZpcnN0KQorCQkJICovCisJCQlfYnRf cGFyYWxsZWxfZG9uZShzY2FuKTsKKwkJCWluZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlKHNjYW4s IG5ld2JhdGNoKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisKKwkJLyogcGFyYWxsZWwgc2NhbiBt dXN0IHNlaXplIHRoZSBzY2FuIHRvIGdldCBuZXh0IGJsa25vICovCisJCWlmIChzY2FuLT5wYXJh bGxlbF9zY2FuICE9IE5VTEwgJiYKKwkJCSFfYnRfcGFyYWxsZWxfc2VpemUoc2NhbiwgJmJsa25v LCAmbGFzdGN1cnJibGtubywgZmFsc2UpKQorCQl7CisJCQlpbmRleGFtX3V0aWxfYmF0Y2hfcmVs ZWFzZShzY2FuLCBuZXdiYXRjaCk7CisJCQlyZXR1cm4gTlVMTDsJCS8qIGRvbmUgaWZmIHNvLT5u ZWVkUHJpbVNjYW4gd2Fzbid0IHNldCAqLworCQl9CisKKwkJZmlyc3RwYWdlID0gZmFsc2U7CQkv KiBuZXh0IHBhZ2UgY2Fubm90IGJlIGZpcnN0ICovCiAJfQogCi0JLyoKLQkgKiBfYnRfcmVhZHBh Z2Ugc3VjY2VlZGVkLiAgRHJvcCB0aGUgbG9jayAoYW5kIG1heWJlIHRoZSBwaW4pIG9uCi0JICog c28tPmN1cnJQb3MuYnVmIGluIHByZXBhcmF0aW9uIGZvciBidGdldHR1cGxlIHJldHVybmluZyB0 dXBsZXMuCi0JICovCi0JQXNzZXJ0KHNvLT5jdXJyUG9zLmN1cnJQYWdlID09IGJsa25vKTsKLQlB c3NlcnQoQlRTY2FuUG9zSXNQaW5uZWQoc28tPmN1cnJQb3MpKTsKLQlfYnRfZHJvcF9sb2NrX2Fu ZF9tYXliZV9waW4ocmVsLCBzbyk7CisJLyogX2J0X3JlYWRwYWdlIHNhdmVkIG9uZSBvciBtb3Jl IG1hdGNoZXMgaW4gbmV3YmF0Y2guaXRlbXNbXSAqLworCUFzc2VydChuZXdiYXRjaC0+Y3VyclBh Z2UgPT0gYmxrbm8pOworCWluZGV4YW1fdXRpbF9iYXRjaF91bmxvY2soc2NhbiwgbmV3YmF0Y2gp OwogCi0JcmV0dXJuIHRydWU7CisJcmV0dXJuIG5ld2JhdGNoOwogfQogCiAvKgpAQCAtMjE3MCwy NSArMjAzNywyMyBAQCBfYnRfZ2V0X2VuZHBvaW50KFJlbGF0aW9uIHJlbCwgdWludDMyIGxldmVs LCBib29sIHJpZ2h0bW9zdCkKICAqIFBhcmFsbGVsIHNjYW4gY2FsbGVycyBtdXN0IGhhdmUgc2Vp emVkIHRoZSBzY2FuIGJlZm9yZSBjYWxsaW5nIGhlcmUuCiAgKiBFeGl0IGNvbmRpdGlvbnMgYXJl IHRoZSBzYW1lIGFzIGZvciBfYnRfZmlyc3QoKS4KICAqLwotc3RhdGljIGJvb2wKLV9idF9lbmRw b2ludChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQorc3RhdGljIEJhdGNo SW5kZXhTY2FuCitfYnRfZW5kcG9pbnQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9u IGRpciwgQmF0Y2hJbmRleFNjYW4gZmlyc3RiYXRjaCkKIHsKIAlSZWxhdGlvbglyZWwgPSBzY2Fu LT5pbmRleFJlbGF0aW9uOwotCUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNjYW4t Pm9wYXF1ZTsKIAlQYWdlCQlwYWdlOwogCUJUUGFnZU9wYXF1ZSBvcGFxdWU7CiAJT2Zmc2V0TnVt YmVyIHN0YXJ0OwogCi0JQXNzZXJ0KCFCVFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSk7Ci0J QXNzZXJ0KCFzby0+bmVlZFByaW1TY2FuKTsKKwlBc3NlcnQoISgoQlRTY2FuT3BhcXVlKSBzY2Fu LT5vcGFxdWUpLT5uZWVkUHJpbVNjYW4pOwogCiAJLyoKIAkgKiBTY2FuIGRvd24gdG8gdGhlIGxl ZnRtb3N0IG9yIHJpZ2h0bW9zdCBsZWFmIHBhZ2UuICBUaGlzIGlzIGEgc2ltcGxpZmllZAogCSAq IHZlcnNpb24gb2YgX2J0X3NlYXJjaCgpLgogCSAqLwotCXNvLT5jdXJyUG9zLmJ1ZiA9IF9idF9n ZXRfZW5kcG9pbnQocmVsLCAwLCBTY2FuRGlyZWN0aW9uSXNCYWNrd2FyZChkaXIpKTsKKwlmaXJz dGJhdGNoLT5idWYgPSBfYnRfZ2V0X2VuZHBvaW50KHJlbCwgMCwgU2NhbkRpcmVjdGlvbklzQmFj a3dhcmQoZGlyKSk7CiAKLQlpZiAoIUJ1ZmZlcklzVmFsaWQoc28tPmN1cnJQb3MuYnVmKSkKKwlp ZiAoIUJ1ZmZlcklzVmFsaWQoZmlyc3RiYXRjaC0+YnVmKSkKIAl7CiAJCS8qCiAJCSAqIEVtcHR5 IGluZGV4LiBMb2NrIHRoZSB3aG9sZSByZWxhdGlvbiwgYXMgbm90aGluZyBmaW5lciB0byBsb2Nr CkBAIC0yMTk5LDcgKzIwNjQsNyBAQCBfYnRfZW5kcG9pbnQoSW5kZXhTY2FuRGVzYyBzY2FuLCBT Y2FuRGlyZWN0aW9uIGRpcikKIAkJcmV0dXJuIGZhbHNlOwogCX0KIAotCXBhZ2UgPSBCdWZmZXJH ZXRQYWdlKHNvLT5jdXJyUG9zLmJ1Zik7CisJcGFnZSA9IEJ1ZmZlckdldFBhZ2UoZmlyc3RiYXRj aC0+YnVmKTsKIAlvcGFxdWUgPSBCVFBhZ2VHZXRPcGFxdWUocGFnZSk7CiAJQXNzZXJ0KFBfSVNM RUFGKG9wYXF1ZSkpOwogCkBAIC0yMjI1LDkgKzIwOTAsNSBAQCBfYnRfZW5kcG9pbnQoSW5kZXhT Y2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIAkvKgogCSAqIE5vdyBsb2FkIGRhdGEg ZnJvbSB0aGUgZmlyc3QgcGFnZSBvZiB0aGUgc2Nhbi4KIAkgKi8KLQlpZiAoIV9idF9yZWFkZmly c3RwYWdlKHNjYW4sIHN0YXJ0LCBkaXIpKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQlfYnRfcmV0dXJu aXRlbShzY2FuLCBzbyk7Ci0JcmV0dXJuIHRydWU7CisJcmV0dXJuIF9idF9yZWFkZmlyc3RwYWdl KHNjYW4sIGZpcnN0YmF0Y2gsIHN0YXJ0LCBkaXIpOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvYWNjZXNzL25idHJlZS9uYnR1dGlscy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9u YnR1dGlscy5jCmluZGV4IDE2ZTIzYTUxNy4uMGRjM2VjNWZmIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9hY2Nlc3MvbmJ0cmVlL25idHV0aWxzLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25i dHJlZS9uYnR1dGlscy5jCkBAIC0xNzYsNTAgKzE3Niw0OCBAQCBfYnRfY29tcGFyZV9pbnQoY29u c3Qgdm9pZCAqdmEsIGNvbnN0IHZvaWQgKnZiKQogICogX2J0X2tpbGxpdGVtcyAtIHNldCBMUF9E RUFEIHN0YXRlIGZvciBpdGVtcyBhbiBpbmRleHNjYW4gY2FsbGVyIGhhcwogICogdG9sZCB1cyB3 ZXJlIGtpbGxlZAogICoKLSAqIHNjYW4tPm9wYXF1ZSwgcmVmZXJlbmNlZCBsb2NhbGx5IHRocm91 Z2ggc28sIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHRoZQotICogY3VycmVudCBwYWdlIGFu ZCBraWxsZWQgdHVwbGVzIHRoZXJlb24gKGdlbmVyYWxseSwgdGhpcyBzaG91bGQgb25seSBiZQot ICogY2FsbGVkIGlmIHNvLT5udW1LaWxsZWQgPiAwKS4KKyAqIFRoZSBiYXRjaCBwYXJhbWV0ZXIg Y29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGN1cnJlbnQgcGFnZSBhbmQga2lsbGVkCisg KiB0dXBsZXMgdGhlcmVvbiAodGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgaWYgYmF0Y2gtPm51 bUtpbGxlZCA+IDApLgogICoKLSAqIENhbGxlciBzaG91bGQgbm90IGhhdmUgYSBsb2NrIG9uIHRo ZSBzby0+Y3VyclBvcyBwYWdlLCBidXQgbXVzdCBob2xkIGEKLSAqIGJ1ZmZlciBwaW4gd2hlbiAh c28tPmRyb3BQaW4uICBXaGVuIHdlIHJldHVybiwgaXQgc3RpbGwgd29uJ3QgYmUgbG9ja2VkLgot ICogSXQnbGwgY29udGludWUgdG8gaG9sZCB3aGF0ZXZlciBwaW5zIHdlcmUgaGVsZCBiZWZvcmUg Y2FsbGluZyBoZXJlLgorICogQ2FsbGVyIHNob3VsZCBub3QgaGF2ZSBhIGxvY2sgb24gdGhlIGJh dGNoIHBvc2l0aW9uJ3MgcGFnZSwgYnV0IG11c3QgaG9sZCBhCisgKiBidWZmZXIgcGluIHdoZW4g IWRyb3BQaW4uICBXaGVuIHdlIHJldHVybiwgaXQgc3RpbGwgd29uJ3QgYmUgbG9ja2VkLiAgSXQn bGwKKyAqIGNvbnRpbnVlIHRvIGhvbGQgd2hhdGV2ZXIgcGlucyB3ZXJlIGhlbGQgYmVmb3JlIGNh bGxpbmcgaGVyZS4KICAqCiAgKiBXZSBtYXRjaCBpdGVtcyBieSBoZWFwIFRJRCBiZWZvcmUgYXNz dW1pbmcgdGhleSBhcmUgdGhlIHJpZ2h0IG9uZXMgdG8gc2V0CiAgKiBMUF9ERUFELiAgSWYgdGhl IHNjYW4gaXMgb25lIHRoYXQgaG9sZHMgYSBidWZmZXIgcGluIG9uIHRoZSB0YXJnZXQgcGFnZQog ICogY29udGludW91c2x5IGZyb20gaW5pdGlhbGx5IHJlYWRpbmcgdGhlIGl0ZW1zIHVudGlsIGFw cGx5aW5nIHRoaXMgZnVuY3Rpb24KLSAqIChpZiBpdCBpcyBhICFzby0+ZHJvcFBpbiBzY2FuKSwg VkFDVVVNIGNhbm5vdCBoYXZlIGRlbGV0ZWQgYW55IGl0ZW1zIG9uIHRoZQorICogKGlmIGl0IGlz IGEgIWRyb3BQaW4gc2NhbiksIFZBQ1VVTSBjYW5ub3QgaGF2ZSBkZWxldGVkIGFueSBpdGVtcyBv biB0aGUKICAqIHBhZ2UsIHNvIHRoZSBwYWdlJ3MgVElEcyBjYW4ndCBoYXZlIGJlZW4gcmVjeWNs ZWQgYnkgbm93LiAgVGhlcmUncyBubyByaXNrCiAgKiB0aGF0IHdlJ2xsIGNvbmZ1c2UgYSBuZXcg aW5kZXggdHVwbGUgdGhhdCBoYXBwZW5zIHRvIHVzZSBhIHJlY3ljbGVkIFRJRAogICogd2l0aCBh IG5vdy1yZW1vdmVkIHR1cGxlIHdpdGggdGhlIHNhbWUgVElEICh0aGF0IHVzZWQgdG8gYmUgb24g dGhpcyBzYW1lCiAgKiBwYWdlKS4gIFdlIGNhbid0IHJlbHkgb24gdGhhdCBkdXJpbmcgc2NhbnMg dGhhdCBkcm9wIGJ1ZmZlciBwaW5zIGVhZ2VybHkKLSAqIChzby0+ZHJvcFBpbiBzY2FucyksIHRo b3VnaCwgc28gd2UgbXVzdCBjb25kaXRpb24gc2V0dGluZyBMUF9ERUFEIGJpdHMgb24KKyAqIChp LmUuIGRyb3BQaW4gc2NhbnMpLCB0aG91Z2gsIHNvIHdlIG11c3QgY29uZGl0aW9uIHNldHRpbmcg TFBfREVBRCBiaXRzIG9uCiAgKiB0aGUgcGFnZSBMU04gaGF2aW5nIG5vdCBjaGFuZ2VkIHNpbmNl IGJhY2sgd2hlbiBfYnRfcmVhZHBhZ2Ugc2F3IHRoZSBwYWdlLgogICogV2UgdG90YWxseSBnaXZl IHVwIG9uIHNldHRpbmcgTFBfREVBRCBiaXRzIHdoZW4gdGhlIHBhZ2UgTFNOIGNoYW5nZWQuCiAg KgotICogV2UgZ2l2ZSB1cCBtdWNoIGxlc3Mgb2Z0ZW4gZHVyaW5nICFzby0+ZHJvcFBpbiBzY2Fu cywgYnV0IGl0IHN0aWxsIGhhcHBlbnMuCisgKiBXZSB0ZW5kIHRvIGdpdmUgdXAgbGVzcyBvZnRl biBkdXJpbmcgIWRyb3BQaW4gc2NhbnMsIGJ1dCBpdCBzdGlsbCBoYXBwZW5zLgogICogV2UgY29w ZSB3aXRoIGNhc2VzIHdoZXJlIGl0ZW1zIGhhdmUgbW92ZWQgcmlnaHQgZHVlIHRvIGluc2VydGlv bnMuICBJZiBhbgogICogaXRlbSBoYXMgbW92ZWQgb2ZmIHRoZSBjdXJyZW50IHBhZ2UgZHVlIHRv IGEgc3BsaXQsIHdlJ2xsIGZhaWwgdG8gZmluZCBpdAogICogYW5kIGp1c3QgZ2l2ZSB1cCBvbiBp dC4KICAqLwogdm9pZAotX2J0X2tpbGxpdGVtcyhJbmRleFNjYW5EZXNjIHNjYW4pCitfYnRfa2ls bGl0ZW1zKEluZGV4U2NhbkRlc2Mgc2NhbiwgQmF0Y2hJbmRleFNjYW4gYmF0Y2gpCiB7CiAJUmVs YXRpb24JcmVsID0gc2Nhbi0+aW5kZXhSZWxhdGlvbjsKLQlCVFNjYW5PcGFxdWUgc28gPSAoQlRT Y2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7CiAJUGFnZQkJcGFnZTsKIAlCVFBhZ2VPcGFxdWUgb3Bh cXVlOwogCU9mZnNldE51bWJlciBtaW5vZmY7CiAJT2Zmc2V0TnVtYmVyIG1heG9mZjsKLQlpbnQJ CQludW1LaWxsZWQgPSBzby0+bnVtS2lsbGVkOworCWludAkJCW51bUtpbGxlZCA9IGJhdGNoLT5u dW1LaWxsZWQ7CiAJYm9vbAkJa2lsbGVkc29tZXRoaW5nID0gZmFsc2U7CiAJQnVmZmVyCQlidWY7 CiAKIAlBc3NlcnQobnVtS2lsbGVkID4gMCk7Ci0JQXNzZXJ0KEJUU2NhblBvc0lzVmFsaWQoc28t PmN1cnJQb3MpKTsKKwlBc3NlcnQoQmxvY2tOdW1iZXJJc1ZhbGlkKGJhdGNoLT5jdXJyUGFnZSkp OwogCUFzc2VydChzY2FuLT5oZWFwUmVsYXRpb24gIT0gTlVMTCk7IC8qIGNhbid0IGJlIGEgYml0 bWFwIGluZGV4IHNjYW4gKi8KIAotCS8qIEFsd2F5cyBpbnZhbGlkYXRlIHNvLT5raWxsZWRJdGVt c1tdIGJlZm9yZSBsZWF2aW5nIHNvLT5jdXJyUG9zICovCi0Jc28tPm51bUtpbGxlZCA9IDA7CisJ LyogQWx3YXlzIGludmFsaWRhdGUgYmF0Y2gtPmtpbGxlZEl0ZW1zW10gYmVmb3JlIGZyZWVpbmcg YmF0Y2ggKi8KKwliYXRjaC0+bnVtS2lsbGVkID0gMDsKIAogCS8qCiAJICogc28tPmtpbGxlZEl0 ZW1zW10gaXMgaW4gd2hhdGV2ZXIgb3JkZXIgdGhlIHNjYW4gcmV0dXJuZWQgaXRlbXMgaW4uCkBA IC0yMzAsMzMgKzIyOCwzMSBAQCBfYnRfa2lsbGl0ZW1zKEluZGV4U2NhbkRlc2Mgc2NhbikKIAkg Ki8KIAlpZiAobnVtS2lsbGVkID4gMSkKIAl7Ci0JCXFzb3J0KHNvLT5raWxsZWRJdGVtcywgbnVt S2lsbGVkLCBzaXplb2YoaW50KSwgX2J0X2NvbXBhcmVfaW50KTsKLQkJbnVtS2lsbGVkID0gcXVu aXF1ZShzby0+a2lsbGVkSXRlbXMsIG51bUtpbGxlZCwgc2l6ZW9mKGludCksCisJCXFzb3J0KGJh dGNoLT5raWxsZWRJdGVtcywgbnVtS2lsbGVkLCBzaXplb2YoaW50KSwgX2J0X2NvbXBhcmVfaW50 KTsKKwkJbnVtS2lsbGVkID0gcXVuaXF1ZShiYXRjaC0+a2lsbGVkSXRlbXMsIG51bUtpbGxlZCwg c2l6ZW9mKGludCksCiAJCQkJCQkJX2J0X2NvbXBhcmVfaW50KTsKIAl9CiAKLQlpZiAoIXNvLT5k cm9wUGluKQorCWlmICghc2Nhbi0+YmF0Y2hxdWV1ZS0+ZHJvcFBpbikKIAl7CiAJCS8qCiAJCSAq IFdlIGhhdmUgaGVsZCB0aGUgcGluIG9uIHRoaXMgcGFnZSBzaW5jZSB3ZSByZWFkIHRoZSBpbmRl eCB0dXBsZXMsCiAJCSAqIHNvIGFsbCB3ZSBuZWVkIHRvIGRvIGlzIGxvY2sgaXQuICBUaGUgcGlu IHdpbGwgaGF2ZSBwcmV2ZW50ZWQKIAkJICogY29uY3VycmVudCBWQUNVVU1zIGZyb20gcmVjeWNs aW5nIGFueSBvZiB0aGUgVElEcyBvbiB0aGUgcGFnZS4KIAkJICovCi0JCUFzc2VydChCVFNjYW5Q b3NJc1Bpbm5lZChzby0+Y3VyclBvcykpOwotCQlidWYgPSBzby0+Y3VyclBvcy5idWY7CisJCWJ1 ZiA9IGJhdGNoLT5idWY7CiAJCV9idF9sb2NrYnVmKHJlbCwgYnVmLCBCVF9SRUFEKTsKIAl9CiAJ ZWxzZQogCXsKIAkJWExvZ1JlY1B0cglsYXRlc3Rsc247CiAKLQkJQXNzZXJ0KCFCVFNjYW5Qb3NJ c1Bpbm5lZChzby0+Y3VyclBvcykpOwogCQlBc3NlcnQoUmVsYXRpb25OZWVkc1dBTChyZWwpKTsK LQkJYnVmID0gX2J0X2dldGJ1ZihyZWwsIHNvLT5jdXJyUG9zLmN1cnJQYWdlLCBCVF9SRUFEKTsK KwkJYnVmID0gX2J0X2dldGJ1ZihyZWwsIGJhdGNoLT5jdXJyUGFnZSwgQlRfUkVBRCk7CiAKIAkJ bGF0ZXN0bHNuID0gQnVmZmVyR2V0TFNOQXRvbWljKGJ1Zik7Ci0JCUFzc2VydChzby0+Y3VyclBv cy5sc24gPD0gbGF0ZXN0bHNuKTsKLQkJaWYgKHNvLT5jdXJyUG9zLmxzbiAhPSBsYXRlc3Rsc24p CisJCUFzc2VydChiYXRjaC0+bHNuIDw9IGxhdGVzdGxzbik7CisJCWlmIChiYXRjaC0+bHNuICE9 IGxhdGVzdGxzbikKIAkJewogCQkJLyogTW9kaWZpZWQsIGdpdmUgdXAgb24gaGludGluZyAqLwog CQkJX2J0X3JlbGJ1ZihyZWwsIGJ1Zik7CkBAIC0yNzMsMTIgKzI2OSwxMSBAQCBfYnRfa2lsbGl0 ZW1zKEluZGV4U2NhbkRlc2Mgc2NhbikKIAogCWZvciAoaW50IGkgPSAwOyBpIDwgbnVtS2lsbGVk OyBpKyspCiAJewotCQlpbnQJCQlpdGVtSW5kZXggPSBzby0+a2lsbGVkSXRlbXNbaV07Ci0JCUJU U2NhblBvc0l0ZW0gKmtpdGVtID0gJnNvLT5jdXJyUG9zLml0ZW1zW2l0ZW1JbmRleF07CisJCWlu dAkJCWl0ZW1JbmRleCA9IGJhdGNoLT5raWxsZWRJdGVtc1tpXTsKKwkJQmF0Y2hNYXRjaGluZ0l0 ZW0gKmtpdGVtID0gJmJhdGNoLT5pdGVtc1tpdGVtSW5kZXhdOwogCQlPZmZzZXROdW1iZXIgb2Zm bnVtID0ga2l0ZW0tPmluZGV4T2Zmc2V0OwogCi0JCUFzc2VydChpdGVtSW5kZXggPj0gc28tPmN1 cnJQb3MuZmlyc3RJdGVtICYmCi0JCQkgICBpdGVtSW5kZXggPD0gc28tPmN1cnJQb3MubGFzdEl0 ZW0pOworCQlBc3NlcnQoaXRlbUluZGV4ID49IGJhdGNoLT5maXJzdEl0ZW0gJiYgaXRlbUluZGV4 IDw9IGJhdGNoLT5sYXN0SXRlbSk7CiAJCWlmIChvZmZudW0gPCBtaW5vZmYpCiAJCQljb250aW51 ZTsJCQkvKiBwdXJlIHBhcmFub2lhICovCiAJCXdoaWxlIChvZmZudW0gPD0gbWF4b2ZmKQpAQCAt Mjk1LDcgKzI5MCw3IEBAIF9idF9raWxsaXRlbXMoSW5kZXhTY2FuRGVzYyBzY2FuKQogCiAJCQkJ LyoKIAkJCQkgKiBOb3RlIHRoYXQgdGhlIHBhZ2UgbWF5IGhhdmUgYmVlbiBtb2RpZmllZCBpbiBh bG1vc3QgYW55IHdheQotCQkJCSAqIHNpbmNlIHdlIGZpcnN0IHJlYWQgaXQgKGluIHRoZSAhc28t PmRyb3BQaW4gY2FzZSksIHNvIGl0J3MKKwkJCQkgKiBzaW5jZSB3ZSBmaXJzdCByZWFkIGl0IChp biB0aGUgIWRyb3BQaW4gY2FzZSksIHNvIGl0J3MKIAkJCQkgKiBwb3NzaWJsZSB0aGF0IHRoaXMg cG9zdGluZyBsaXN0IHR1cGxlIHdhc24ndCBhIHBvc3RpbmcgbGlzdAogCQkJCSAqIHR1cGxlIHdo ZW4gd2UgZmlyc3QgZW5jb3VudGVyZWQgaXRzIGhlYXAgVElEcy4KIAkJCQkgKi8KQEAgLTMxMSw3 ICszMDYsOCBAQCBfYnRfa2lsbGl0ZW1zKEluZGV4U2NhbkRlc2Mgc2NhbikKIAkJCQkJICogdGhv dWdoIG9ubHkgaW4gdGhlIGNvbW1vbiBjYXNlIHdoZXJlIHRoZSBwYWdlIGNhbid0CiAJCQkJCSAq IGhhdmUgYmVlbiBjb25jdXJyZW50bHkgbW9kaWZpZWQKIAkJCQkJICovCi0JCQkJCUFzc2VydChr aXRlbS0+aW5kZXhPZmZzZXQgPT0gb2ZmbnVtIHx8ICFzby0+ZHJvcFBpbik7CisJCQkJCUFzc2Vy dChraXRlbS0+aW5kZXhPZmZzZXQgPT0gb2ZmbnVtIHx8CisJCQkJCQkgICAhc2Nhbi0+YmF0Y2hx dWV1ZS0+ZHJvcFBpbik7CiAKIAkJCQkJLyoKIAkJCQkJICogUmVhZC1haGVhZCB0byBsYXRlciBr aXRlbXMgaGVyZS4KQEAgLTMyOCw3ICszMjQsNyBAQCBfYnRfa2lsbGl0ZW1zKEluZGV4U2NhbkRl c2Mgc2NhbikKIAkJCQkJICogY29ycmVjdGx5IC0tIHBvc3RpbmcgdHVwbGUgc3RpbGwgZ2V0cyBr aWxsZWQpLgogCQkJCQkgKi8KIAkJCQkJaWYgKHBpIDwgbnVtS2lsbGVkKQotCQkJCQkJa2l0ZW0g PSAmc28tPmN1cnJQb3MuaXRlbXNbc28tPmtpbGxlZEl0ZW1zW3BpKytdXTsKKwkJCQkJCWtpdGVt ID0gJmJhdGNoLT5pdGVtc1tiYXRjaC0+a2lsbGVkSXRlbXNbcGkrK11dOwogCQkJCX0KIAogCQkJ CS8qCkBAIC0zNzgsNyArMzc0LDcgQEAgX2J0X2tpbGxpdGVtcyhJbmRleFNjYW5EZXNjIHNjYW4p CiAJCU1hcmtCdWZmZXJEaXJ0eUhpbnQoYnVmLCB0cnVlKTsKIAl9CiAKLQlpZiAoIXNvLT5kcm9w UGluKQorCWlmICghc2Nhbi0+YmF0Y2hxdWV1ZS0+ZHJvcFBpbikKIAkJX2J0X3VubG9ja2J1Zihy ZWwsIGJ1Zik7CiAJZWxzZQogCQlfYnRfcmVsYnVmKHJlbCwgYnVmKTsKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3BndXRpbHMuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9z cGdpc3Qvc3BndXRpbHMuYwppbmRleCBhNjBlYzg1ZTguLmIwYTZlMDk3NCAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGd1dGlscy5jCisrKyBiL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9zcGdpc3Qvc3BndXRpbHMuYwpAQCAtODgsMTAgKzg4LDExIEBAIHNwZ2hhbmRsZXIoUEdf RlVOQ1RJT05fQVJHUykKIAlhbXJvdXRpbmUtPmFtYmVnaW5zY2FuID0gc3BnYmVnaW5zY2FuOwog CWFtcm91dGluZS0+YW1yZXNjYW4gPSBzcGdyZXNjYW47CiAJYW1yb3V0aW5lLT5hbWdldHR1cGxl ID0gc3BnZ2V0dHVwbGU7CisJYW1yb3V0aW5lLT5hbWdldGJhdGNoID0gTlVMTDsKKwlhbXJvdXRp bmUtPmFtZnJlZWJhdGNoID0gTlVMTDsKIAlhbXJvdXRpbmUtPmFtZ2V0Yml0bWFwID0gc3BnZ2V0 Yml0bWFwOwogCWFtcm91dGluZS0+YW1lbmRzY2FuID0gc3BnZW5kc2NhbjsKLQlhbXJvdXRpbmUt PmFtbWFya3BvcyA9IE5VTEw7Ci0JYW1yb3V0aW5lLT5hbXJlc3RycG9zID0gTlVMTDsKKwlhbXJv dXRpbmUtPmFtcG9zcmVzZXQgPSBOVUxMOwogCWFtcm91dGluZS0+YW1lc3RpbWF0ZXBhcmFsbGVs c2NhbiA9IE5VTEw7CiAJYW1yb3V0aW5lLT5hbWluaXRwYXJhbGxlbHNjYW4gPSBOVUxMOwogCWFt cm91dGluZS0+YW1wYXJhbGxlbHJlc2NhbiA9IE5VTEw7CmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9hY2Nlc3MvdGFibGUvdGFibGVhbS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxlL3RhYmxl YW0uYwppbmRleCAxZTA5OWZlYmQuLmE3MzQxYmNhZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv YWNjZXNzL3RhYmxlL3RhYmxlYW0uYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdGFi bGVhbS5jCkBAIC0yNDgsNyArMjQ4LDcgQEAgdGFibGVfaW5kZXhfZmV0Y2hfdHVwbGVfY2hlY2so UmVsYXRpb24gcmVsLAogCWJvb2wJCWZvdW5kOwogCiAJc2xvdCA9IHRhYmxlX3Nsb3RfY3JlYXRl KHJlbCwgTlVMTCk7Ci0Jc2NhbiA9IHRhYmxlX2luZGV4X2ZldGNoX2JlZ2luKHJlbCk7CisJc2Nh biA9IHRhYmxlX2luZGV4X2ZldGNoX2JlZ2luKHJlbCwgTlVMTCk7CiAJZm91bmQgPSB0YWJsZV9p bmRleF9mZXRjaF90dXBsZShzY2FuLCB0aWQsIHNuYXBzaG90LCBzbG90LCAmY2FsbF9hZ2FpbiwK IAkJCQkJCQkJCWFsbF9kZWFkKTsKIAl0YWJsZV9pbmRleF9mZXRjaF9lbmQoc2Nhbik7CmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9jb25zdHJhaW50LmMgYi9zcmMvYmFja2VuZC9j b21tYW5kcy9jb25zdHJhaW50LmMKaW5kZXggMzQ5N2E4MjIxLi44YTVkNzlhMjcgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvbnN0cmFpbnQuYworKysgYi9zcmMvYmFja2VuZC9j b21tYW5kcy9jb25zdHJhaW50LmMKQEAgLTEwNiw3ICsxMDYsOCBAQCB1bmlxdWVfa2V5X3JlY2hl Y2soUEdfRlVOQ1RJT05fQVJHUykKIAkgKi8KIAl0bXB0aWQgPSBjaGVja3RpZDsKIAl7Ci0JCUlu ZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4gPSB0YWJsZV9pbmRleF9mZXRjaF9iZWdpbih0cmlnZGF0 YS0+dGdfcmVsYXRpb24pOworCQlJbmRleEZldGNoVGFibGVEYXRhICpzY2FuID0gdGFibGVfaW5k ZXhfZmV0Y2hfYmVnaW4odHJpZ2RhdGEtPnRnX3JlbGF0aW9uLAorCQkJCQkJCQkJCQkJCQkJTlVM TCk7CiAJCWJvb2wJCWNhbGxfYWdhaW4gPSBmYWxzZTsKIAogCQlpZiAoIXRhYmxlX2luZGV4X2Zl dGNoX3R1cGxlKHNjYW4sICZ0bXB0aWQsIFNuYXBzaG90U2VsZiwgc2xvdCwKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2NvbW1hbmRzL2luZGV4Y21kcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMv aW5kZXhjbWRzLmMKaW5kZXggZDljY2NiNmFjLi4zYWM5MWYxMmUgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2NvbW1hbmRzL2luZGV4Y21kcy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2lu ZGV4Y21kcy5jCkBAIC04ODAsNyArODgwLDcgQEAgRGVmaW5lSW5kZXgoT2lkIHRhYmxlSWQsCiAJ CQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAogCQkJCSBlcnJtc2co ImFjY2VzcyBtZXRob2QgXCIlc1wiIGRvZXMgbm90IHN1cHBvcnQgbXVsdGljb2x1bW4gaW5kZXhl cyIsCiAJCQkJCQlhY2Nlc3NNZXRob2ROYW1lKSkpOwotCWlmIChleGNsdXNpb24gJiYgYW1Sb3V0 aW5lLT5hbWdldHR1cGxlID09IE5VTEwpCisJaWYgKGV4Y2x1c2lvbiAmJiBhbVJvdXRpbmUtPmFt Z2V0dHVwbGUgPT0gTlVMTCAmJiBhbVJvdXRpbmUtPmFtZ2V0YmF0Y2ggPT0gTlVMTCkKIAkJZXJl cG9ydChFUlJPUiwKIAkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCks CiAJCQkJIGVycm1zZygiYWNjZXNzIG1ldGhvZCBcIiVzXCIgZG9lcyBub3Qgc3VwcG9ydCBleGNs dXNpb24gY29uc3RyYWludHMiLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhl Y0FtaS5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0FtaS5jCmluZGV4IDFkMGU4YWQ1Ny4u YWMzMzdkOTAwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjQW1pLmMKKysr IGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0FtaS5jCkBAIC00MjgsNyArNDI4LDcgQEAgRXhl Y1N1cHBvcnRzTWFya1Jlc3RvcmUoUGF0aCAqcGF0aG5vZGUpCiAJCWNhc2UgVF9JbmRleE9ubHlT Y2FuOgogCiAJCQkvKgotCQkJICogTm90IGFsbCBpbmRleCB0eXBlcyBzdXBwb3J0IG1hcmsvcmVz dG9yZS4KKwkJCSAqIE5vdCBhbGwgaW5kZXggdHlwZXMgc3VwcG9ydCByZXN0b3JpbmcgYSBtYXJr CiAJCQkgKi8KIAkJCXJldHVybiBjYXN0Tm9kZShJbmRleFBhdGgsIHBhdGhub2RlKS0+aW5kZXhp bmZvLT5hbWNhbm1hcmtwb3M7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4 ZWNJbmRleGluZy5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0luZGV4aW5nLmMKaW5kZXgg MGIzYTMxZjE3Li44OTFhNWIyYzkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4 ZWNJbmRleGluZy5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNJbmRleGluZy5jCkBA IC04MTYsMTAgKzgxNiwxMiBAQCBjaGVja19leGNsdXNpb25fb3JfdW5pcXVlX2NvbnN0cmFpbnQo UmVsYXRpb24gaGVhcCwgUmVsYXRpb24gaW5kZXgsCiByZXRyeToKIAljb25mbGljdCA9IGZhbHNl OwogCWZvdW5kX3NlbGYgPSBmYWxzZTsKLQlpbmRleF9zY2FuID0gaW5kZXhfYmVnaW5zY2FuKGhl YXAsIGluZGV4LCAmRGlydHlTbmFwc2hvdCwgTlVMTCwgaW5kbmtleWF0dHMsIDApOworCWluZGV4 X3NjYW4gPSBpbmRleF9iZWdpbnNjYW4oaGVhcCwgaW5kZXgsIE5VTEwsICZEaXJ0eVNuYXBzaG90 LCBOVUxMLAorCQkJCQkJCQkgaW5kbmtleWF0dHMsIDApOwogCWluZGV4X3Jlc2NhbihpbmRleF9z Y2FuLCBzY2Fua2V5cywgaW5kbmtleWF0dHMsIE5VTEwsIDApOwogCi0Jd2hpbGUgKGluZGV4X2dl dG5leHRfc2xvdChpbmRleF9zY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwgZXhpc3Rpbmdfc2xv dCkpCisJd2hpbGUgKHRhYmxlX2luZGV4X2dldG5leHRfc2xvdChpbmRleF9zY2FuLCBGb3J3YXJk U2NhbkRpcmVjdGlvbiwKKwkJCQkJCQkJCWV4aXN0aW5nX3Nsb3QpKQogCXsKIAkJVHJhbnNhY3Rp b25JZCB4d2FpdDsKIAkJWExUV19PcGVyCXJlYXNvbl93YWl0OwpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvZXhlY3V0b3IvZXhlY1JlcGxpY2F0aW9uLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9l eGVjUmVwbGljYXRpb24uYwppbmRleCA4NjBmNzlmOWMuLjkyMzZkYTliMiAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1JlcGxpY2F0aW9uLmMKKysrIGIvc3JjL2JhY2tlbmQv ZXhlY3V0b3IvZXhlY1JlcGxpY2F0aW9uLmMKQEAgLTIwNCw3ICsyMDQsNyBAQCBSZWxhdGlvbkZp bmRSZXBsVHVwbGVCeUluZGV4KFJlbGF0aW9uIHJlbCwgT2lkIGlkeG9pZCwKIAlza2V5X2F0dG9m ZiA9IGJ1aWxkX3JlcGxpbmRleF9zY2FuX2tleShza2V5LCByZWwsIGlkeHJlbCwgc2VhcmNoc2xv dCk7CiAKIAkvKiBTdGFydCBhbiBpbmRleCBzY2FuLiAqLwotCXNjYW4gPSBpbmRleF9iZWdpbnNj YW4ocmVsLCBpZHhyZWwsICZzbmFwLCBOVUxMLCBza2V5X2F0dG9mZiwgMCk7CisJc2NhbiA9IGlu ZGV4X2JlZ2luc2NhbihyZWwsIGlkeHJlbCwgTlVMTCwgJnNuYXAsIE5VTEwsIHNrZXlfYXR0b2Zm LCAwKTsKIAogcmV0cnk6CiAJZm91bmQgPSBmYWxzZTsKQEAgLTIxMiw3ICsyMTIsNyBAQCByZXRy eToKIAlpbmRleF9yZXNjYW4oc2Nhbiwgc2tleSwgc2tleV9hdHRvZmYsIE5VTEwsIDApOwogCiAJ LyogVHJ5IHRvIGZpbmQgdGhlIHR1cGxlICovCi0Jd2hpbGUgKGluZGV4X2dldG5leHRfc2xvdChz Y2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwgb3V0c2xvdCkpCisJd2hpbGUgKHRhYmxlX2luZGV4 X2dldG5leHRfc2xvdChzY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwgb3V0c2xvdCkpCiAJewog CQkvKgogCQkgKiBBdm9pZCBleHBlbnNpdmUgZXF1YWxpdHkgY2hlY2sgaWYgdGhlIGluZGV4IGlz IHByaW1hcnkga2V5IG9yCkBAIC02NjUsMTIgKzY2NSwxMiBAQCBSZWxhdGlvbkZpbmREZWxldGVk VHVwbGVJbmZvQnlJbmRleChSZWxhdGlvbiByZWwsIE9pZCBpZHhvaWQsCiAJICogbm90IHlldCBj b21taXR0ZWQgb3IgdGhvc2UganVzdCBjb21taXR0ZWQgcHJpb3IgdG8gdGhlIHNjYW4gYXJlCiAJ ICogZXhjbHVkZWQgaW4gdXBkYXRlX21vc3RfcmVjZW50X2RlbGV0aW9uX2luZm8oKS4KIAkgKi8K LQlzY2FuID0gaW5kZXhfYmVnaW5zY2FuKHJlbCwgaWR4cmVsLCBTbmFwc2hvdEFueSwgTlVMTCwg c2tleV9hdHRvZmYsIDApOworCXNjYW4gPSBpbmRleF9iZWdpbnNjYW4ocmVsLCBpZHhyZWwsIE5V TEwsIFNuYXBzaG90QW55LCBOVUxMLCBza2V5X2F0dG9mZiwgMCk7CiAKIAlpbmRleF9yZXNjYW4o c2Nhbiwgc2tleSwgc2tleV9hdHRvZmYsIE5VTEwsIDApOwogCiAJLyogVHJ5IHRvIGZpbmQgdGhl IHR1cGxlICovCi0Jd2hpbGUgKGluZGV4X2dldG5leHRfc2xvdChzY2FuLCBGb3J3YXJkU2NhbkRp cmVjdGlvbiwgc2NhbnNsb3QpKQorCXdoaWxlICh0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3Qoc2Nh biwgRm9yd2FyZFNjYW5EaXJlY3Rpb24sIHNjYW5zbG90KSkKIAl7CiAJCS8qCiAJCSAqIEF2b2lk IGV4cGVuc2l2ZSBlcXVhbGl0eSBjaGVjayBpZiB0aGUgaW5kZXggaXMgcHJpbWFyeSBrZXkgb3IK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleG9ubHlzY2FuLmMgYi9z cmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhvbmx5c2Nhbi5jCmluZGV4IDZiZWE0MmYxMi4u OTY3NzhhYmUzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhvbmx5 c2Nhbi5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleG9ubHlzY2FuLmMKQEAg LTM0LDE0ICszNCwxMiBAQAogI2luY2x1ZGUgImFjY2Vzcy9yZWxzY2FuLmgiCiAjaW5jbHVkZSAi YWNjZXNzL3RhYmxlYW0uaCIKICNpbmNsdWRlICJhY2Nlc3MvdHVwZGVzYy5oIgotI2luY2x1ZGUg ImFjY2Vzcy92aXNpYmlsaXR5bWFwLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ190eXBlLmgiCiAj aW5jbHVkZSAiZXhlY3V0b3IvZXhlY3V0b3IuaCIKICNpbmNsdWRlICJleGVjdXRvci9ub2RlSW5k ZXhvbmx5c2Nhbi5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL25vZGVJbmRleHNjYW4uaCIKICNpbmNs dWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJzdG9yYWdlL2J1Zm1nci5oIgotI2luY2x1ZGUg InN0b3JhZ2UvcHJlZGljYXRlLmgiCiAjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKICNpbmNs dWRlICJ1dGlscy9yZWwuaCIKIApAQCAtNjUsNyArNjMsNiBAQCBJbmRleE9ubHlOZXh0KEluZGV4 T25seVNjYW5TdGF0ZSAqbm9kZSkKIAlTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbjsKIAlJbmRleFNj YW5EZXNjIHNjYW5kZXNjOwogCVR1cGxlVGFibGVTbG90ICpzbG90OwotCUl0ZW1Qb2ludGVyIHRp ZDsKIAogCS8qCiAJICogZXh0cmFjdCBuZWNlc3NhcnkgaW5mb3JtYXRpb24gZnJvbSBpbmRleCBz Y2FuIG5vZGUKQEAgLTkxLDYgKzg4LDcgQEAgSW5kZXhPbmx5TmV4dChJbmRleE9ubHlTY2FuU3Rh dGUgKm5vZGUpCiAJCSAqLwogCQlzY2FuZGVzYyA9IGluZGV4X2JlZ2luc2Nhbihub2RlLT5zcy5z c19jdXJyZW50UmVsYXRpb24sCiAJCQkJCQkJCSAgIG5vZGUtPmlvc3NfUmVsYXRpb25EZXNjLAor CQkJCQkJCQkgICBub2RlLT5pb3NzX1RhYmxlU2xvdCwKIAkJCQkJCQkJICAgZXN0YXRlLT5lc19z bmFwc2hvdCwKIAkJCQkJCQkJICAgJm5vZGUtPmlvc3NfSW5zdHJ1bWVudCwKIAkJCQkJCQkJICAg bm9kZS0+aW9zc19OdW1TY2FuS2V5cywKQEAgLTEwMSw3ICs5OSw2IEBAIEluZGV4T25seU5leHQo SW5kZXhPbmx5U2NhblN0YXRlICpub2RlKQogCiAJCS8qIFNldCBpdCB1cCBmb3IgaW5kZXgtb25s eSBzY2FuICovCiAJCW5vZGUtPmlvc3NfU2NhbkRlc2MtPnhzX3dhbnRfaXR1cCA9IHRydWU7Ci0J CW5vZGUtPmlvc3NfVk1CdWZmZXIgPSBJbnZhbGlkQnVmZmVyOwogCiAJCS8qCiAJCSAqIElmIG5v IHJ1bi10aW1lIGtleXMgdG8gY2FsY3VsYXRlIG9yIHRoZXkgYXJlIHJlYWR5LCBnbyBhaGVhZCBh bmQKQEAgLTExOCw3NyArMTE1LDEyIEBAIEluZGV4T25seU5leHQoSW5kZXhPbmx5U2NhblN0YXRl ICpub2RlKQogCS8qCiAJICogT0ssIG5vdyB0aGF0IHdlIGhhdmUgd2hhdCB3ZSBuZWVkLCBmZXRj aCB0aGUgbmV4dCB0dXBsZS4KIAkgKi8KLQl3aGlsZSAoKHRpZCA9IGluZGV4X2dldG5leHRfdGlk KHNjYW5kZXNjLCBkaXJlY3Rpb24pKSAhPSBOVUxMKQorCXdoaWxlICh0YWJsZV9pbmRleF9nZXRu ZXh0X3Nsb3Qoc2NhbmRlc2MsIGRpcmVjdGlvbiwgc2xvdCkpCiAJewotCQlib29sCQl0dXBsZV9m cm9tX2hlYXAgPSBmYWxzZTsKLQogCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOwogCi0JCS8qCi0J CSAqIFdlIGNhbiBza2lwIHRoZSBoZWFwIGZldGNoIGlmIHRoZSBUSUQgcmVmZXJlbmNlcyBhIGhl YXAgcGFnZSBvbgotCQkgKiB3aGljaCBhbGwgdHVwbGVzIGFyZSBrbm93biB2aXNpYmxlIHRvIGV2 ZXJ5Ym9keS4gIEluIGFueSBjYXNlLAotCQkgKiB3ZSdsbCB1c2UgdGhlIGluZGV4IHR1cGxlIG5v dCB0aGUgaGVhcCB0dXBsZSBhcyB0aGUgZGF0YSBzb3VyY2UuCi0JCSAqCi0JCSAqIE5vdGUgb24g TWVtb3J5IE9yZGVyaW5nIEVmZmVjdHM6IHZpc2liaWxpdHltYXBfZ2V0X3N0YXR1cyBkb2VzIG5v dAotCQkgKiBsb2NrIHRoZSB2aXNpYmlsaXR5IG1hcCBidWZmZXIsIGFuZCB0aGVyZWZvcmUgdGhl IHJlc3VsdCB3ZSByZWFkCi0JCSAqIGhlcmUgY291bGQgYmUgc2xpZ2h0bHkgc3RhbGUuICBIb3dl dmVyLCBpdCBjYW4ndCBiZSBzdGFsZSBlbm91Z2ggdG8KLQkJICogbWF0dGVyLgotCQkgKgotCQkg KiBXZSBuZWVkIHRvIGRldGVjdCBjbGVhcmluZyBhIFZNIGJpdCBkdWUgdG8gYW4gaW5zZXJ0IHJp Z2h0IGF3YXksCi0JCSAqIGJlY2F1c2UgdGhlIHR1cGxlIGlzIHByZXNlbnQgaW4gdGhlIGluZGV4 IHBhZ2UgYnV0IG5vdCB2aXNpYmxlLiBUaGUKLQkJICogcmVhZGluZyBvZiB0aGUgVElEIGJ5IHRo aXMgc2NhbiAodXNpbmcgYSBzaGFyZWQgbG9jayBvbiB0aGUgaW5kZXgKLQkJICogYnVmZmVyKSBp cyBzZXJpYWxpemVkIHdpdGggdGhlIGluc2VydCBvZiB0aGUgVElEIGludG8gdGhlIGluZGV4Ci0J CSAqICh1c2luZyBhbiBleGNsdXNpdmUgbG9jayBvbiB0aGUgaW5kZXggYnVmZmVyKS4gQmVjYXVz ZSB0aGUgVk0gYml0Ci0JCSAqIGlzIGNsZWFyZWQgYmVmb3JlIHVwZGF0aW5nIHRoZSBpbmRleCwg YW5kIGxvY2tpbmcvdW5sb2NraW5nIG9mIHRoZQotCQkgKiBpbmRleCBwYWdlIGFjdHMgYXMgYSBm dWxsIG1lbW9yeSBiYXJyaWVyLCB3ZSBhcmUgc3VyZSB0byBzZWUgdGhlCi0JCSAqIGNsZWFyZWQg Yml0IGlmIHdlIHNlZSBhIHJlY2VudGx5LWluc2VydGVkIFRJRC4KLQkJICoKLQkJICogRGVsZXRl cyBkbyBub3QgdXBkYXRlIHRoZSBpbmRleCBwYWdlIChvbmx5IFZBQ1VVTSB3aWxsIGNsZWFyIG91 dAotCQkgKiB0aGUgVElEKSwgc28gdGhlIGNsZWFyaW5nIG9mIHRoZSBWTSBiaXQgYnkgYSBkZWxl dGUgaXMgbm90Ci0JCSAqIHNlcmlhbGl6ZWQgd2l0aCB0aGlzIHRlc3QgYmVsb3csIGFuZCB3ZSBt YXkgc2VlIGEgdmFsdWUgdGhhdCBpcwotCQkgKiBzaWduaWZpY2FudGx5IHN0YWxlLiBIb3dldmVy LCB3ZSBkb24ndCBjYXJlIGFib3V0IHRoZSBkZWxldGUgcmlnaHQKLQkJICogYXdheSwgYmVjYXVz ZSB0aGUgdHVwbGUgaXMgc3RpbGwgdmlzaWJsZSB1bnRpbCB0aGUgZGVsZXRpbmcKLQkJICogdHJh bnNhY3Rpb24gY29tbWl0cyBvciB0aGUgc3RhdGVtZW50IGVuZHMgKGlmIGl0J3Mgb3VyCi0JCSAq IHRyYW5zYWN0aW9uKS4gSW4gZWl0aGVyIGNhc2UsIHRoZSBsb2NrIG9uIHRoZSBWTSBidWZmZXIg d2lsbCBoYXZlCi0JCSAqIGJlZW4gcmVsZWFzZWQgKGFjdGluZyBhcyBhIHdyaXRlIGJhcnJpZXIp IGFmdGVyIGNsZWFyaW5nIHRoZSBiaXQuCi0JCSAqIEFuZCBmb3IgdXMgdG8gaGF2ZSBhIHNuYXBz aG90IHRoYXQgaW5jbHVkZXMgdGhlIGRlbGV0aW5nCi0JCSAqIHRyYW5zYWN0aW9uIChtYWtpbmcg dGhlIHR1cGxlIGludmlzaWJsZSksIHdlIG11c3QgaGF2ZSBhY3F1aXJlZAotCQkgKiBQcm9jQXJy YXlMb2NrIGFmdGVyIHRoYXQgdGltZSwgYWN0aW5nIGFzIGEgcmVhZCBiYXJyaWVyLgotCQkgKgot CQkgKiBJdCdzIHdvcnRoIGdvaW5nIHRocm91Z2ggdGhpcyBjb21wbGV4aXR5IHRvIGF2b2lkIG5l ZWRpbmcgdG8gbG9jawotCQkgKiB0aGUgVk0gYnVmZmVyLCB3aGljaCBjb3VsZCBjYXVzZSBzaWdu aWZpY2FudCBjb250ZW50aW9uLgotCQkgKi8KLQkJaWYgKCFWTV9BTExfVklTSUJMRShzY2FuZGVz Yy0+aGVhcFJlbGF0aW9uLAotCQkJCQkJCUl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIodGlkKSwK LQkJCQkJCQkmbm9kZS0+aW9zc19WTUJ1ZmZlcikpCi0JCXsKLQkJCS8qCi0JCQkgKiBSYXRzLCB3 ZSBoYXZlIHRvIHZpc2l0IHRoZSBoZWFwIHRvIGNoZWNrIHZpc2liaWxpdHkuCi0JCQkgKi8KLQkJ CUluc3RyQ291bnRUdXBsZXMyKG5vZGUsIDEpOwotCQkJaWYgKCFpbmRleF9mZXRjaF9oZWFwKHNj YW5kZXNjLCBub2RlLT5pb3NzX1RhYmxlU2xvdCkpCi0JCQkJY29udGludWU7CQkvKiBubyB2aXNp YmxlIHR1cGxlLCB0cnkgbmV4dCBpbmRleCBlbnRyeSAqLwotCi0JCQlFeGVjQ2xlYXJUdXBsZShu b2RlLT5pb3NzX1RhYmxlU2xvdCk7Ci0KLQkJCS8qCi0JCQkgKiBPbmx5IE1WQ0Mgc25hcHNob3Rz IGFyZSBzdXBwb3J0ZWQgaGVyZSwgc28gdGhlcmUgc2hvdWxkIGJlIG5vCi0JCQkgKiBuZWVkIHRv IGtlZXAgZm9sbG93aW5nIHRoZSBIT1QgY2hhaW4gb25jZSBhIHZpc2libGUgZW50cnkgaGFzCi0J CQkgKiBiZWVuIGZvdW5kLiAgSWYgd2UgZGlkIHdhbnQgdG8gYWxsb3cgdGhhdCwgd2UnZCBuZWVk IHRvIGtlZXAKLQkJCSAqIG1vcmUgc3RhdGUgdG8gcmVtZW1iZXIgbm90IHRvIGNhbGwgaW5kZXhf Z2V0bmV4dF90aWQgbmV4dCB0aW1lLgotCQkJICovCi0JCQlpZiAoc2NhbmRlc2MtPnhzX2hlYXBf Y29udGludWUpCi0JCQkJZWxvZyhFUlJPUiwgIm5vbi1NVkNDIHNuYXBzaG90cyBhcmUgbm90IHN1 cHBvcnRlZCBpbiBpbmRleC1vbmx5IHNjYW5zIik7Ci0KLQkJCS8qCi0JCQkgKiBOb3RlOiBhdCB0 aGlzIHBvaW50IHdlIGFyZSBob2xkaW5nIGEgcGluIG9uIHRoZSBoZWFwIHBhZ2UsIGFzCi0JCQkg KiByZWNvcmRlZCBpbiBzY2FuZGVzYy0+eHNfY2J1Zi4gIFdlIGNvdWxkIHJlbGVhc2UgdGhhdCBw aW4gbm93LAotCQkJICogYnV0IGl0J3Mgbm90IGNsZWFyIHdoZXRoZXIgaXQncyBhIHdpbiB0byBk byBzby4gIFRoZSBuZXh0IGluZGV4Ci0JCQkgKiBlbnRyeSBtaWdodCByZXF1aXJlIGEgdmlzaXQg dG8gdGhlIHNhbWUgaGVhcCBwYWdlLgotCQkJICovCi0KLQkJCXR1cGxlX2Zyb21faGVhcCA9IHRy dWU7Ci0JCX0KKwkJSW5zdHJDb3VudFR1cGxlczIobm9kZSwgc2NhbmRlc2MtPnhzX2hlYXBmZXRj aC0+bmhlYXBhY2Nlc3Nlcyk7CisJCXNjYW5kZXNjLT54c19oZWFwZmV0Y2gtPm5oZWFwYWNjZXNz ZXMgPSAwOwogCiAJCS8qCiAJCSAqIEZpbGwgdGhlIHNjYW4gdHVwbGUgc2xvdCB3aXRoIGRhdGEg ZnJvbSB0aGUgaW5kZXguICBUaGlzIG1pZ2h0IGJlCkBAIC0yMzgsMTkgKzE3MCwxMyBAQCBJbmRl eE9ubHlOZXh0KEluZGV4T25seVNjYW5TdGF0ZSAqbm9kZSkKIAkJCWVyZXBvcnQoRVJST1IsCiAJ CQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKIAkJCQkJIGVycm1z ZygibG9zc3kgZGlzdGFuY2UgZnVuY3Rpb25zIGFyZSBub3Qgc3VwcG9ydGVkIGluIGluZGV4LW9u bHkgc2NhbnMiKSkpOwotCi0JCS8qCi0JCSAqIElmIHdlIGRpZG4ndCBhY2Nlc3MgdGhlIGhlYXAs IHRoZW4gd2UnbGwgbmVlZCB0byB0YWtlIGEgcHJlZGljYXRlCi0JCSAqIGxvY2sgZXhwbGljaXRs eSwgYXMgaWYgd2UgaGFkLiAgRm9yIG5vdyB3ZSBkbyB0aGF0IGF0IHBhZ2UgbGV2ZWwuCi0JCSAq LwotCQlpZiAoIXR1cGxlX2Zyb21faGVhcCkKLQkJCVByZWRpY2F0ZUxvY2tQYWdlKHNjYW5kZXNj LT5oZWFwUmVsYXRpb24sCi0JCQkJCQkJICBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKHRpZCks Ci0JCQkJCQkJICBlc3RhdGUtPmVzX3NuYXBzaG90KTsKLQogCQlyZXR1cm4gc2xvdDsKIAl9CiAK KwkvKiBYWFggVGhpcyBpcyB1Z2x5LCBidXQgbm90IGNsZWFyIGhvdyB0byBkbyBiZXR0ZXIgKi8K KwlJbnN0ckNvdW50VHVwbGVzMihub2RlLCBzY2FuZGVzYy0+eHNfaGVhcGZldGNoLT5uaGVhcGFj Y2Vzc2VzKTsKKwlzY2FuZGVzYy0+eHNfaGVhcGZldGNoLT5uaGVhcGFjY2Vzc2VzID0gMDsKKwog CS8qCiAJICogaWYgd2UgZ2V0IGhlcmUgaXQgbWVhbnMgdGhlIGluZGV4IHNjYW4gZmFpbGVkIHNv IHdlIGFyZSBhdCB0aGUgZW5kIG9mCiAJICogdGhlIHNjYW4uLgpAQCAtNDA3LDEzICszMzMsNiBA QCBFeGVjRW5kSW5kZXhPbmx5U2NhbihJbmRleE9ubHlTY2FuU3RhdGUgKm5vZGUpCiAJaW5kZXhS ZWxhdGlvbkRlc2MgPSBub2RlLT5pb3NzX1JlbGF0aW9uRGVzYzsKIAlpbmRleFNjYW5EZXNjID0g bm9kZS0+aW9zc19TY2FuRGVzYzsKIAotCS8qIFJlbGVhc2UgVk0gYnVmZmVyIHBpbiwgaWYgYW55 LiAqLwotCWlmIChub2RlLT5pb3NzX1ZNQnVmZmVyICE9IEludmFsaWRCdWZmZXIpCi0JewotCQlS ZWxlYXNlQnVmZmVyKG5vZGUtPmlvc3NfVk1CdWZmZXIpOwotCQlub2RlLT5pb3NzX1ZNQnVmZmVy ID0gSW52YWxpZEJ1ZmZlcjsKLQl9Ci0KIAkvKgogCSAqIFdoZW4gZW5kaW5nIGEgcGFyYWxsZWwg d29ya2VyLCBjb3B5IHRoZSBzdGF0aXN0aWNzIGdhdGhlcmVkIGJ5IHRoZQogCSAqIHdvcmtlciBi YWNrIGludG8gc2hhcmVkIG1lbW9yeSBzbyB0aGF0IGl0IGNhbiBiZSBwaWNrZWQgdXAgYnkgdGhl IG1haW4KQEAgLTc4NSwxMiArNzA0LDEyIEBAIEV4ZWNJbmRleE9ubHlTY2FuSW5pdGlhbGl6ZURT TShJbmRleE9ubHlTY2FuU3RhdGUgKm5vZGUsCiAJbm9kZS0+aW9zc19TY2FuRGVzYyA9CiAJCWlu ZGV4X2JlZ2luc2Nhbl9wYXJhbGxlbChub2RlLT5zcy5zc19jdXJyZW50UmVsYXRpb24sCiAJCQkJ CQkJCSBub2RlLT5pb3NzX1JlbGF0aW9uRGVzYywKKwkJCQkJCQkJIG5vZGUtPmlvc3NfVGFibGVT bG90LAogCQkJCQkJCQkgJm5vZGUtPmlvc3NfSW5zdHJ1bWVudCwKIAkJCQkJCQkJIG5vZGUtPmlv c3NfTnVtU2NhbktleXMsCiAJCQkJCQkJCSBub2RlLT5pb3NzX051bU9yZGVyQnlLZXlzLAogCQkJ CQkJCQkgcGlzY2FuKTsKIAlub2RlLT5pb3NzX1NjYW5EZXNjLT54c193YW50X2l0dXAgPSB0cnVl OwotCW5vZGUtPmlvc3NfVk1CdWZmZXIgPSBJbnZhbGlkQnVmZmVyOwogCiAJLyoKIAkgKiBJZiBu byBydW4tdGltZSBrZXlzIHRvIGNhbGN1bGF0ZSBvciB0aGV5IGFyZSByZWFkeSwgZ28gYWhlYWQg YW5kIHBhc3MKQEAgLTg1MSw2ICs3NzAsNyBAQCBFeGVjSW5kZXhPbmx5U2NhbkluaXRpYWxpemVX b3JrZXIoSW5kZXhPbmx5U2NhblN0YXRlICpub2RlLAogCW5vZGUtPmlvc3NfU2NhbkRlc2MgPQog CQlpbmRleF9iZWdpbnNjYW5fcGFyYWxsZWwobm9kZS0+c3Muc3NfY3VycmVudFJlbGF0aW9uLAog CQkJCQkJCQkgbm9kZS0+aW9zc19SZWxhdGlvbkRlc2MsCisJCQkJCQkJCSBub2RlLT5pb3NzX1Rh YmxlU2xvdCwKIAkJCQkJCQkJICZub2RlLT5pb3NzX0luc3RydW1lbnQsCiAJCQkJCQkJCSBub2Rl LT5pb3NzX051bVNjYW5LZXlzLAogCQkJCQkJCQkgbm9kZS0+aW9zc19OdW1PcmRlckJ5S2V5cywK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleHNjYW4uYyBiL3NyYy9i YWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleHNjYW4uYwppbmRleCA3MmIxMzVlNWQuLmZkZjhiY2Jj MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4c2Nhbi5jCisrKyBi L3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleHNjYW4uYwpAQCAtMTA3LDcgKzEwNyw3IEBA IEluZGV4TmV4dChJbmRleFNjYW5TdGF0ZSAqbm9kZSkKIAkJICogc2VyaWFsbHkgZXhlY3V0aW5n IGFuIGluZGV4IHNjYW4gdGhhdCB3YXMgcGxhbm5lZCB0byBiZSBwYXJhbGxlbC4KIAkJICovCiAJ CXNjYW5kZXNjID0gaW5kZXhfYmVnaW5zY2FuKG5vZGUtPnNzLnNzX2N1cnJlbnRSZWxhdGlvbiwK LQkJCQkJCQkJICAgbm9kZS0+aXNzX1JlbGF0aW9uRGVzYywKKwkJCQkJCQkJICAgbm9kZS0+aXNz X1JlbGF0aW9uRGVzYywgTlVMTCwKIAkJCQkJCQkJICAgZXN0YXRlLT5lc19zbmFwc2hvdCwKIAkJ CQkJCQkJICAgJm5vZGUtPmlzc19JbnN0cnVtZW50LAogCQkJCQkJCQkgICBub2RlLT5pc3NfTnVt U2NhbktleXMsCkBAIC0xMjgsNyArMTI4LDcgQEAgSW5kZXhOZXh0KEluZGV4U2NhblN0YXRlICpu b2RlKQogCS8qCiAJICogb2ssIG5vdyB0aGF0IHdlIGhhdmUgd2hhdCB3ZSBuZWVkLCBmZXRjaCB0 aGUgbmV4dCB0dXBsZS4KIAkgKi8KLQl3aGlsZSAoaW5kZXhfZ2V0bmV4dF9zbG90KHNjYW5kZXNj LCBkaXJlY3Rpb24sIHNsb3QpKQorCXdoaWxlICh0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3Qoc2Nh bmRlc2MsIGRpcmVjdGlvbiwgc2xvdCkpCiAJewogCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOwog CkBAIC0yMDMsNyArMjAzLDcgQEAgSW5kZXhOZXh0V2l0aFJlb3JkZXIoSW5kZXhTY2FuU3RhdGUg Km5vZGUpCiAJCSAqIHNlcmlhbGx5IGV4ZWN1dGluZyBhbiBpbmRleCBzY2FuIHRoYXQgd2FzIHBs YW5uZWQgdG8gYmUgcGFyYWxsZWwuCiAJCSAqLwogCQlzY2FuZGVzYyA9IGluZGV4X2JlZ2luc2Nh bihub2RlLT5zcy5zc19jdXJyZW50UmVsYXRpb24sCi0JCQkJCQkJCSAgIG5vZGUtPmlzc19SZWxh dGlvbkRlc2MsCisJCQkJCQkJCSAgIG5vZGUtPmlzc19SZWxhdGlvbkRlc2MsIE5VTEwsCiAJCQkJ CQkJCSAgIGVzdGF0ZS0+ZXNfc25hcHNob3QsCiAJCQkJCQkJCSAgICZub2RlLT5pc3NfSW5zdHJ1 bWVudCwKIAkJCQkJCQkJICAgbm9kZS0+aXNzX051bVNjYW5LZXlzLApAQCAtMjYwLDcgKzI2MCw3 IEBAIEluZGV4TmV4dFdpdGhSZW9yZGVyKEluZGV4U2NhblN0YXRlICpub2RlKQogCQkgKiBGZXRj aCBuZXh0IHR1cGxlIGZyb20gdGhlIGluZGV4LgogCQkgKi8KIG5leHRfaW5kZXh0dXBsZToKLQkJ aWYgKCFpbmRleF9nZXRuZXh0X3Nsb3Qoc2NhbmRlc2MsIEZvcndhcmRTY2FuRGlyZWN0aW9uLCBz bG90KSkKKwkJaWYgKCF0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3Qoc2NhbmRlc2MsIEZvcndhcmRT Y2FuRGlyZWN0aW9uLCBzbG90KSkKIAkJewogCQkJLyoKIAkJCSAqIE5vIG1vcmUgdHVwbGVzIGZy b20gdGhlIGluZGV4LiAgQnV0IHdlIHN0aWxsIG5lZWQgdG8gZHJhaW4gYW55CkBAIC0xNzE5LDcg KzE3MTksNyBAQCBFeGVjSW5kZXhTY2FuSW5pdGlhbGl6ZURTTShJbmRleFNjYW5TdGF0ZSAqbm9k ZSwKIAogCW5vZGUtPmlzc19TY2FuRGVzYyA9CiAJCWluZGV4X2JlZ2luc2Nhbl9wYXJhbGxlbChu b2RlLT5zcy5zc19jdXJyZW50UmVsYXRpb24sCi0JCQkJCQkJCSBub2RlLT5pc3NfUmVsYXRpb25E ZXNjLAorCQkJCQkJCQkgbm9kZS0+aXNzX1JlbGF0aW9uRGVzYywgTlVMTCwKIAkJCQkJCQkJICZu b2RlLT5pc3NfSW5zdHJ1bWVudCwKIAkJCQkJCQkJIG5vZGUtPmlzc19OdW1TY2FuS2V5cywKIAkJ CQkJCQkJIG5vZGUtPmlzc19OdW1PcmRlckJ5S2V5cywKQEAgLTE3ODMsNyArMTc4Myw3IEBAIEV4 ZWNJbmRleFNjYW5Jbml0aWFsaXplV29ya2VyKEluZGV4U2NhblN0YXRlICpub2RlLAogCiAJbm9k ZS0+aXNzX1NjYW5EZXNjID0KIAkJaW5kZXhfYmVnaW5zY2FuX3BhcmFsbGVsKG5vZGUtPnNzLnNz X2N1cnJlbnRSZWxhdGlvbiwKLQkJCQkJCQkJIG5vZGUtPmlzc19SZWxhdGlvbkRlc2MsCisJCQkJ CQkJCSBub2RlLT5pc3NfUmVsYXRpb25EZXNjLCBOVUxMLAogCQkJCQkJCQkgJm5vZGUtPmlzc19J bnN0cnVtZW50LAogCQkJCQkJCQkgbm9kZS0+aXNzX051bVNjYW5LZXlzLAogCQkJCQkJCQkgbm9k ZS0+aXNzX051bU9yZGVyQnlLZXlzLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVy L3BhdGgvaW5keHBhdGguYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2luZHhwYXRoLmMK aW5kZXggNWQ0ZjgxZWU3Li44MzY4MWE2ZjMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGlt aXplci9wYXRoL2luZHhwYXRoLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvaW5k eHBhdGguYwpAQCAtNDUsNyArNDUsNyBAQAogLyogV2hldGhlciB3ZSBhcmUgbG9va2luZyBmb3Ig cGxhaW4gaW5kZXhzY2FuLCBiaXRtYXAgc2Nhbiwgb3IgZWl0aGVyICovCiB0eXBlZGVmIGVudW0K IHsKLQlTVF9JTkRFWFNDQU4sCQkJCS8qIG11c3Qgc3VwcG9ydCBhbWdldHR1cGxlICovCisJU1Rf SU5ERVhTQ0FOLAkJCQkvKiBtdXN0IHN1cHBvcnQgYW1nZXR0dXBsZSBvciBhbWdldGJhdGNoICov CiAJU1RfQklUTUFQU0NBTiwJCQkJLyogbXVzdCBzdXBwb3J0IGFtZ2V0Yml0bWFwICovCiAJU1Rf QU5ZU0NBTiwJCQkJCS8qIGVpdGhlciBpcyBva2F5ICovCiB9IFNjYW5UeXBlQ29udHJvbDsKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BsYW5jYXQuYyBiL3NyYy9iYWNr ZW5kL29wdGltaXplci91dGlsL3BsYW5jYXQuYwppbmRleCBlNTUzYWZiN2YuLmFjODljNWVlMyAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGxhbmNhdC5jCisrKyBiL3Ny Yy9iYWNrZW5kL29wdGltaXplci91dGlsL3BsYW5jYXQuYwpAQCAtMzEzLDExICszMTMsMTEgQEAg Z2V0X3JlbGF0aW9uX2luZm8oUGxhbm5lckluZm8gKnJvb3QsIE9pZCByZWxhdGlvbk9iamVjdElk LCBib29sIGluaHBhcmVudCwKIAkJCQlpbmZvLT5hbXNlYXJjaGFycmF5ID0gYW1yb3V0aW5lLT5h bXNlYXJjaGFycmF5OwogCQkJCWluZm8tPmFtc2VhcmNobnVsbHMgPSBhbXJvdXRpbmUtPmFtc2Vh cmNobnVsbHM7CiAJCQkJaW5mby0+YW1jYW5wYXJhbGxlbCA9IGFtcm91dGluZS0+YW1jYW5wYXJh bGxlbDsKLQkJCQlpbmZvLT5hbWhhc2dldHR1cGxlID0gKGFtcm91dGluZS0+YW1nZXR0dXBsZSAh PSBOVUxMKTsKKwkJCQlpbmZvLT5hbWhhc2dldHR1cGxlID0gKGFtcm91dGluZS0+YW1nZXR0dXBs ZSAhPSBOVUxMIHx8CisJCQkJCQkJCQkgICBhbXJvdXRpbmUtPmFtZ2V0YmF0Y2ggIT0gTlVMTCk7 CiAJCQkJaW5mby0+YW1oYXNnZXRiaXRtYXAgPSBhbXJvdXRpbmUtPmFtZ2V0Yml0bWFwICE9IE5V TEwgJiYKIAkJCQkJcmVsYXRpb24tPnJkX3RhYmxlYW0tPnNjYW5fYml0bWFwX25leHRfdHVwbGUg IT0gTlVMTDsKLQkJCQlpbmZvLT5hbWNhbm1hcmtwb3MgPSAoYW1yb3V0aW5lLT5hbW1hcmtwb3Mg IT0gTlVMTCAmJgotCQkJCQkJCQkJICBhbXJvdXRpbmUtPmFtcmVzdHJwb3MgIT0gTlVMTCk7CisJ CQkJaW5mby0+YW1jYW5tYXJrcG9zID0gYW1yb3V0aW5lLT5hbXBvc3Jlc2V0ICE9IE5VTEw7CiAJ CQkJaW5mby0+YW1jb3N0ZXN0aW1hdGUgPSBhbXJvdXRpbmUtPmFtY29zdGVzdGltYXRlOwogCQkJ CUFzc2VydChpbmZvLT5hbWNvc3Rlc3RpbWF0ZSAhPSBOVUxMKTsKIApkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9yZWxhdGlvbi5jIGIvc3JjL2JhY2tlbmQvcmVw bGljYXRpb24vbG9naWNhbC9yZWxhdGlvbi5jCmluZGV4IDJjODQ4NWI4OC4uNGE3NGI2OWRmIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3JlbGF0aW9uLmMKKysr IGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9yZWxhdGlvbi5jCkBAIC04ODksNyAr ODg5LDggQEAgSXNJbmRleFVzYWJsZUZvclJlcGxpY2FJZGVudGl0eUZ1bGwoUmVsYXRpb24gaWR4 cmVsLCBBdHRyTWFwICphdHRybWFwKQogCSAqIFRoZSBnaXZlbiBpbmRleCBhY2Nlc3MgbWV0aG9k IG11c3QgaW1wbGVtZW50ICJhbWdldHR1cGxlIiwgd2hpY2ggd2lsbAogCSAqIGJlIHVzZWQgbGF0 ZXIgdG8gZmV0Y2ggdGhlIHR1cGxlcy4gIFNlZSBSZWxhdGlvbkZpbmRSZXBsVHVwbGVCeUluZGV4 KCkuCiAJICovCi0JaWYgKEdldEluZGV4QW1Sb3V0aW5lQnlBbUlkKGlkeHJlbC0+cmRfcmVsLT5y ZWxhbSwgZmFsc2UpLT5hbWdldHR1cGxlID09IE5VTEwpCisJaWYgKEdldEluZGV4QW1Sb3V0aW5l QnlBbUlkKGlkeHJlbC0+cmRfcmVsLT5yZWxhbSwgZmFsc2UpLT5hbWdldHR1cGxlID09IE5VTEwg JiYKKwkJR2V0SW5kZXhBbVJvdXRpbmVCeUFtSWQoaWR4cmVsLT5yZF9yZWwtPnJlbGFtLCBmYWxz ZSktPmFtZ2V0YmF0Y2ggPT0gTlVMTCkKIAkJcmV0dXJuIGZhbHNlOwogCiAJcmV0dXJuIHRydWU7 CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvYW11dGlscy5jIGIvc3JjL2JhY2tl bmQvdXRpbHMvYWR0L2FtdXRpbHMuYwppbmRleCAwYWYyNmQ2YWMuLjFlYmUwYTc2YSAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2FtdXRpbHMuYworKysgYi9zcmMvYmFja2VuZC91 dGlscy9hZHQvYW11dGlscy5jCkBAIC0zNjMsNyArMzYzLDcgQEAgaW5kZXhhbV9wcm9wZXJ0eShG dW5jdGlvbkNhbGxJbmZvIGZjaW5mbywKIAkJCQlQR19SRVRVUk5fQk9PTChyb3V0aW5lLT5hbWNs dXN0ZXJhYmxlKTsKIAogCQkJY2FzZSBBTVBST1BfSU5ERVhfU0NBTjoKLQkJCQlQR19SRVRVUk5f Qk9PTChyb3V0aW5lLT5hbWdldHR1cGxlID8gdHJ1ZSA6IGZhbHNlKTsKKwkJCQlQR19SRVRVUk5f Qk9PTChyb3V0aW5lLT5hbWdldHR1cGxlIHx8IHJvdXRpbmUtPmFtZ2V0YmF0Y2ggPyB0cnVlIDog ZmFsc2UpOwogCiAJCQljYXNlIEFNUFJPUF9CSVRNQVBfU0NBTjoKIAkJCQlQR19SRVRVUk5fQk9P TChyb3V0aW5lLT5hbWdldGJpdG1hcCA/IHRydWUgOiBmYWxzZSk7CkBAIC0zOTIsNyArMzkyLDcg QEAgaW5kZXhhbV9wcm9wZXJ0eShGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbywKIAkJCVBHX1JFVFVS Tl9CT09MKHJvdXRpbmUtPmFtY2FubXVsdGljb2wpOwogCiAJCWNhc2UgQU1QUk9QX0NBTl9FWENM VURFOgotCQkJUEdfUkVUVVJOX0JPT0wocm91dGluZS0+YW1nZXR0dXBsZSA/IHRydWUgOiBmYWxz ZSk7CisJCQlQR19SRVRVUk5fQk9PTChyb3V0aW5lLT5hbWdldHR1cGxlIHx8IHJvdXRpbmUtPmFt Z2V0YmF0Y2ggPyB0cnVlIDogZmFsc2UpOwogCiAJCWNhc2UgQU1QUk9QX0NBTl9JTkNMVURFOgog CQkJUEdfUkVUVVJOX0JPT0wocm91dGluZS0+YW1jYW5pbmNsdWRlKTsKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL3V0aWxzL2FkdC9zZWxmdW5jcy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3Nl bGZ1bmNzLmMKaW5kZXggYzc2MGIxOWRiLi43YmJhMjIzYzAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL3V0aWxzL2FkdC9zZWxmdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9zZWxm dW5jcy5jCkBAIC0xMDIsNyArMTAyLDYgQEAKICNpbmNsdWRlICJhY2Nlc3MvZ2luLmgiCiAjaW5j bHVkZSAiYWNjZXNzL3RhYmxlLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3RhYmxlYW0uaCIKLSNpbmNs dWRlICJhY2Nlc3MvdmlzaWJpbGl0eW1hcC5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfY29sbGF0 aW9uLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19vcGVyYXRvci5oIgogI2luY2x1ZGUgImNhdGFs b2cvcGdfc3RhdGlzdGljLmgiCkBAIC03MDQzLDEwICs3MDQyLDYgQEAgZ2V0X2FjdHVhbF92YXJp YWJsZV9lbmRwb2ludChSZWxhdGlvbiBoZWFwUmVsLAogCWJvb2wJCWhhdmVfZGF0YSA9IGZhbHNl OwogCVNuYXBzaG90RGF0YSBTbmFwc2hvdE5vblZhY3V1bWFibGU7CiAJSW5kZXhTY2FuRGVzYyBp bmRleF9zY2FuOwotCUJ1ZmZlcgkJdm1idWZmZXIgPSBJbnZhbGlkQnVmZmVyOwotCUJsb2NrTnVt YmVyIGxhc3RfaGVhcF9ibG9jayA9IEludmFsaWRCbG9ja051bWJlcjsKLQlpbnQJCQluX3Zpc2l0 ZWRfaGVhcF9wYWdlcyA9IDA7Ci0JSXRlbVBvaW50ZXIgdGlkOwogCURhdHVtCQl2YWx1ZXNbSU5E RVhfTUFYX0tFWVNdOwogCWJvb2wJCWlzbnVsbFtJTkRFWF9NQVhfS0VZU107CiAJTWVtb3J5Q29u dGV4dCBvbGRjb250ZXh0OwpAQCAtNzA5OCw3ICs3MDkzLDcgQEAgZ2V0X2FjdHVhbF92YXJpYWJs ZV9lbmRwb2ludChSZWxhdGlvbiBoZWFwUmVsLAogCUluaXROb25WYWN1dW1hYmxlU25hcHNob3Qo U25hcHNob3ROb25WYWN1dW1hYmxlLAogCQkJCQkJCSAgR2xvYmFsVmlzVGVzdEZvcihoZWFwUmVs KSk7CiAKLQlpbmRleF9zY2FuID0gaW5kZXhfYmVnaW5zY2FuKGhlYXBSZWwsIGluZGV4UmVsLAor CWluZGV4X3NjYW4gPSBpbmRleF9iZWdpbnNjYW4oaGVhcFJlbCwgaW5kZXhSZWwsIHRhYmxlc2xv dCwKIAkJCQkJCQkJICZTbmFwc2hvdE5vblZhY3V1bWFibGUsIE5VTEwsCiAJCQkJCQkJCSAxLCAw KTsKIAkvKiBTZXQgaXQgdXAgZm9yIGluZGV4LW9ubHkgc2NhbiAqLwpAQCAtNzEwNiw0OCArNzEw MSwyMCBAQCBnZXRfYWN0dWFsX3ZhcmlhYmxlX2VuZHBvaW50KFJlbGF0aW9uIGhlYXBSZWwsCiAJ aW5kZXhfcmVzY2FuKGluZGV4X3NjYW4sIHNjYW5rZXlzLCAxLCBOVUxMLCAwKTsKIAogCS8qIEZl dGNoIGZpcnN0L25leHQgdHVwbGUgaW4gc3BlY2lmaWVkIGRpcmVjdGlvbiAqLwotCXdoaWxlICgo dGlkID0gaW5kZXhfZ2V0bmV4dF90aWQoaW5kZXhfc2NhbiwgaW5kZXhzY2FuZGlyKSkgIT0gTlVM TCkKKwl3aGlsZSAodGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90KGluZGV4X3NjYW4sIGluZGV4c2Nh bmRpciwgdGFibGVzbG90KSkKIAl7Ci0JCUJsb2NrTnVtYmVyIGJsb2NrID0gSXRlbVBvaW50ZXJH ZXRCbG9ja051bWJlcih0aWQpOworCQkvKiBXZSBkb24ndCBhY3R1YWxseSBuZWVkIHRoZSBoZWFw IHR1cGxlIGZvciBhbnl0aGluZyAqLworCQlFeGVjQ2xlYXJUdXBsZSh0YWJsZXNsb3QpOwogCi0J CWlmICghVk1fQUxMX1ZJU0lCTEUoaGVhcFJlbCwKLQkJCQkJCQlibG9jaywKLQkJCQkJCQkmdm1i dWZmZXIpKQotCQl7Ci0JCQkvKiBSYXRzLCB3ZSBoYXZlIHRvIHZpc2l0IHRoZSBoZWFwIHRvIGNo ZWNrIHZpc2liaWxpdHkgKi8KLQkJCWlmICghaW5kZXhfZmV0Y2hfaGVhcChpbmRleF9zY2FuLCB0 YWJsZXNsb3QpKQotCQkJewotCQkJCS8qCi0JCQkJICogTm8gdmlzaWJsZSB0dXBsZSBmb3IgdGhp cyBpbmRleCBlbnRyeSwgc28gd2UgbmVlZCB0bwotCQkJCSAqIGFkdmFuY2UgdG8gdGhlIG5leHQg ZW50cnkuICBCZWZvcmUgZG9pbmcgc28sIGNvdW50IGhlYXAKLQkJCQkgKiBwYWdlIGZldGNoZXMg YW5kIGdpdmUgdXAgaWYgd2UndmUgZG9uZSB0b28gbWFueS4KLQkJCQkgKgotCQkJCSAqIFdlIGRv bid0IGNoYXJnZSBhIHBhZ2UgZmV0Y2ggaWYgdGhpcyBpcyB0aGUgc2FtZSBoZWFwIHBhZ2UKLQkJ CQkgKiBhcyB0aGUgcHJldmlvdXMgdHVwbGUuICBUaGlzIGlzIG9uIHRoZSBjb25zZXJ2YXRpdmUg c2lkZSwKLQkJCQkgKiBzaW5jZSBvdGhlciByZWNlbnRseS1hY2Nlc3NlZCBwYWdlcyBhcmUgcHJv YmFibHkgc3RpbGwgaW4KLQkJCQkgKiBidWZmZXJzIHRvbzsgYnV0IGl0J3MgZ29vZCBlbm91Z2gg Zm9yIHRoaXMgaGV1cmlzdGljLgotCQkJCSAqLworCQkvKgorCQkgKiBObyB2aXNpYmxlIHR1cGxl IGZvciB0aGlzIGluZGV4IGVudHJ5LCBzbyB3ZSBuZWVkIHRvIGFkdmFuY2UgdG8gdGhlCisJCSAq IG5leHQgZW50cnkuICBCZWZvcmUgZG9pbmcgc28sIGNvdW50IGhlYXAgcGFnZSBmZXRjaGVzIGFu ZCBnaXZlIHVwCisJCSAqIGlmIHdlJ3ZlIGRvbmUgdG9vIG1hbnkuCisJCSAqLwogI2RlZmluZSBW SVNJVEVEX1BBR0VTX0xJTUlUIDEwMAogCi0JCQkJaWYgKGJsb2NrICE9IGxhc3RfaGVhcF9ibG9j aykKLQkJCQl7Ci0JCQkJCWxhc3RfaGVhcF9ibG9jayA9IGJsb2NrOwotCQkJCQluX3Zpc2l0ZWRf aGVhcF9wYWdlcysrOwotCQkJCQlpZiAobl92aXNpdGVkX2hlYXBfcGFnZXMgPiBWSVNJVEVEX1BB R0VTX0xJTUlUKQotCQkJCQkJYnJlYWs7Ci0JCQkJfQotCi0JCQkJY29udGludWU7CQkvKiBubyB2 aXNpYmxlIHR1cGxlLCB0cnkgbmV4dCBpbmRleCBlbnRyeSAqLwotCQkJfQotCi0JCQkvKiBXZSBk b24ndCBhY3R1YWxseSBuZWVkIHRoZSBoZWFwIHR1cGxlIGZvciBhbnl0aGluZyAqLwotCQkJRXhl Y0NsZWFyVHVwbGUodGFibGVzbG90KTsKLQotCQkJLyoKLQkJCSAqIFdlIGRvbid0IGNhcmUgd2hl dGhlciB0aGVyZSdzIG1vcmUgdGhhbiBvbmUgdmlzaWJsZSB0dXBsZSBpbgotCQkJICogdGhlIEhP VCBjaGFpbjsgaWYgYW55IGFyZSB2aXNpYmxlLCB0aGF0J3MgZ29vZCBlbm91Z2guCi0JCQkgKi8K LQkJfQorCQlpZiAoaW5kZXhfc2Nhbi0+eHNfaGVhcGZldGNoLT5uaGVhcGFjY2Vzc2VzID4gVklT SVRFRF9QQUdFU19MSU1JVCkKKwkJCWJyZWFrOwogCiAJCS8qCiAJCSAqIFdlIGV4cGVjdCB0aGF0 IHRoZSBpbmRleCB3aWxsIHJldHVybiBkYXRhIGluIEluZGV4VHVwbGUgbm90CkBAIC03MTgwLDgg KzcxNDcsNiBAQCBnZXRfYWN0dWFsX3ZhcmlhYmxlX2VuZHBvaW50KFJlbGF0aW9uIGhlYXBSZWws CiAJCWJyZWFrOwogCX0KIAotCWlmICh2bWJ1ZmZlciAhPSBJbnZhbGlkQnVmZmVyKQotCQlSZWxl YXNlQnVmZmVyKHZtYnVmZmVyKTsKIAlpbmRleF9lbmRzY2FuKGluZGV4X3NjYW4pOwogCiAJcmV0 dXJuIGhhdmVfZGF0YTsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvYmxvb20vYmx1dGlscy5jIGIvY29u dHJpYi9ibG9vbS9ibHV0aWxzLmMKaW5kZXggN2E0NjhiNGExLi4wYzNiYTY4NGEgMTAwNjQ0Ci0t LSBhL2NvbnRyaWIvYmxvb20vYmx1dGlscy5jCisrKyBiL2NvbnRyaWIvYmxvb20vYmx1dGlscy5j CkBAIC0xNDgsOCArMTQ4LDcgQEAgYmxoYW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJYW1yb3V0 aW5lLT5hbWdldHR1cGxlID0gTlVMTDsKIAlhbXJvdXRpbmUtPmFtZ2V0Yml0bWFwID0gYmxnZXRi aXRtYXA7CiAJYW1yb3V0aW5lLT5hbWVuZHNjYW4gPSBibGVuZHNjYW47Ci0JYW1yb3V0aW5lLT5h bW1hcmtwb3MgPSBOVUxMOwotCWFtcm91dGluZS0+YW1yZXN0cnBvcyA9IE5VTEw7CisJYW1yb3V0 aW5lLT5hbXBvc3Jlc2V0ID0gTlVMTDsKIAlhbXJvdXRpbmUtPmFtZXN0aW1hdGVwYXJhbGxlbHNj YW4gPSBOVUxMOwogCWFtcm91dGluZS0+YW1pbml0cGFyYWxsZWxzY2FuID0gTlVMTDsKIAlhbXJv dXRpbmUtPmFtcGFyYWxsZWxyZXNjYW4gPSBOVUxMOwpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21s L2luZGV4YW0uc2dtbCBiL2RvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwKaW5kZXggNjNkN2UzNzZm Li5jZGM5YzY1YTYgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwKKysrIGIv ZG9jL3NyYy9zZ21sL2luZGV4YW0uc2dtbApAQCAtMTYxLDEwICsxNjEsMTEgQEAgdHlwZWRlZiBz dHJ1Y3QgSW5kZXhBbVJvdXRpbmUKICAgICBhbWJlZ2luc2Nhbl9mdW5jdGlvbiBhbWJlZ2luc2Nh bjsKICAgICBhbXJlc2Nhbl9mdW5jdGlvbiBhbXJlc2NhbjsKICAgICBhbWdldHR1cGxlX2Z1bmN0 aW9uIGFtZ2V0dHVwbGU7ICAgICAvKiBjYW4gYmUgTlVMTCAqLworICAgIGFtZ2V0YmF0Y2hfZnVu Y3Rpb24gYW1nZXRiYXRjaDsgLyogY2FuIGJlIE5VTEwgKi8KKyAgICBhbWZyZWViYXRjaF9mdW5j dGlvbiBhbWZyZWViYXRjaDsJLyogY2FuIGJlIE5VTEwgKi8KICAgICBhbWdldGJpdG1hcF9mdW5j dGlvbiBhbWdldGJpdG1hcDsgICAvKiBjYW4gYmUgTlVMTCAqLwogICAgIGFtZW5kc2Nhbl9mdW5j dGlvbiBhbWVuZHNjYW47Ci0gICAgYW1tYXJrcG9zX2Z1bmN0aW9uIGFtbWFya3BvczsgICAgICAg LyogY2FuIGJlIE5VTEwgKi8KLSAgICBhbXJlc3RycG9zX2Z1bmN0aW9uIGFtcmVzdHJwb3M7ICAg ICAvKiBjYW4gYmUgTlVMTCAqLworICAgIGFtcG9zcmVzZXRfZnVuY3Rpb24gYW1wb3NyZXNldDsg LyogY2FuIGJlIE5VTEwgKi8KIAogICAgIC8qIGludGVyZmFjZSBmdW5jdGlvbnMgdG8gc3VwcG9y dCBwYXJhbGxlbCBpbmRleCBzY2FucyAqLwogICAgIGFtZXN0aW1hdGVwYXJhbGxlbHNjYW5fZnVu Y3Rpb24gYW1lc3RpbWF0ZXBhcmFsbGVsc2NhbjsgICAgLyogY2FuIGJlIE5VTEwgKi8KQEAgLTc0 Myw2ICs3NDQsMTM3IEBAIGFtZ2V0dHVwbGUgKEluZGV4U2NhbkRlc2Mgc2NhbiwKICAgIDxzdHJ1 Y3RmaWVsZD5hbWdldHR1cGxlPC9zdHJ1Y3RmaWVsZD4gZmllbGQgaW4gaXRzIDxzdHJ1Y3RuYW1l PkluZGV4QW1Sb3V0aW5lPC9zdHJ1Y3RuYW1lPgogICAgc3RydWN0IG11c3QgYmUgc2V0IHRvIE5V TEwuCiAgIDwvcGFyYT4KKyAgPG5vdGU+CisgICA8cGFyYT4KKyAgICBBcyBvZiA8cHJvZHVjdG5h bWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+IHZlcnNpb24gMTksIHBvc2l0aW9uIG1hcmtpbmcK KyAgICBhbmQgcmVzdG9yYXRpb24gb2Ygc2NhbnMgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCBmb3Ig dGhlCisgICAgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiBpbnRlcmZhY2U7IG9ubHkg dGhlCisgICAgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBpbnRlcmZhY2Ugc3VwcG9y dHMgdGhpcyBmZWF0dXJlIHRocm91Z2gKKyAgICB0aGUgPGZ1bmN0aW9uPmFtcG9zcmVzZXQ8L2Z1 bmN0aW9uPiBjYWxsYmFjay4KKyAgIDwvcGFyYT4KKyAgPC9ub3RlPgorCisgIDxwYXJhPgorPHBy b2dyYW1saXN0aW5nPgorQmF0Y2hJbmRleFNjYW4KK2FtZ2V0YmF0Y2ggKEluZGV4U2NhbkRlc2Mg c2NhbiwKKyAgICAgICAgICAgIEJhdGNoSW5kZXhTY2FuIHByaW9yYmF0Y2gsCisgICAgICAgICAg ICBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbik7Cis8L3Byb2dyYW1saXN0aW5nPgorICAgUmV0dXJu IHRoZSBuZXh0IGJhdGNoIG9mIGluZGV4IHR1cGxlcyBpbiB0aGUgZ2l2ZW4gc2NhbiwgbW92aW5n IGluIHRoZQorICAgZ2l2ZW4gZGlyZWN0aW9uIChmb3J3YXJkIG9yIGJhY2t3YXJkIGluIHRoZSBp bmRleCkuICBSZXR1cm5zIGFuIGluc3RhbmNlIG9mCisgICA8dHlwZT5CYXRjaEluZGV4U2Nhbjwv dHlwZT4gd2l0aCBpbmRleCB0dXBsZXMgbG9hZGVkLCBvcgorICAgPGxpdGVyYWw+TlVMTDwvbGl0 ZXJhbD4gaWYgdGhlcmUgYXJlIG5vIG1vcmUgaW5kZXggdHVwbGVzLgorICA8L3BhcmE+CisKKyAg PHBhcmE+CisgICBUaGUgPGxpdGVyYWw+cHJpb3JiYXRjaDwvbGl0ZXJhbD4gcGFyYW1ldGVyIHBh c3NlcyB0aGUgYmF0Y2ggcHJldmlvdXNseQorICAgcmV0dXJuZWQgYnkgYW4gZWFybGllciA8ZnVu Y3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGNhbGwgKG9yCisgICA8bGl0ZXJhbD5OVUxMPC9s aXRlcmFsPiBvbiB0aGUgZmlyc3QgY2FsbCkuICBUaGUgaW5kZXggQU0gdXNlcworICAgPGxpdGVy YWw+cHJpb3JiYXRjaDwvbGl0ZXJhbD4gdG8gZGV0ZXJtaW5lIHdoaWNoIGluZGV4IHBhZ2UgdG8g cmVhZCBuZXh0LAorICAgdHlwaWNhbGx5IGJ5IGZvbGxvd2luZyBwYWdlIGxpbmtzIGZvdW5kIGlu IDxsaXRlcmFsPnByaW9yYmF0Y2g8L2xpdGVyYWw+LgorICAgVGhlIHJldHVybmVkIGJhdGNoIGNv bnRhaW5zIG1hdGNoaW5nIGl0ZW1zIGltbWVkaWF0ZWx5IGFkamFjZW50IHRvIHRob3NlCisgICBm cm9tIDxsaXRlcmFsPnByaW9yYmF0Y2g8L2xpdGVyYWw+IGluIHRoZSBjb21tb24gY2FzZSB3aGVy ZQorICAgPGxpdGVyYWw+cHJpb3JiYXRjaDwvbGl0ZXJhbD4gaXMgdGhlIGJhdGNoIHRoYXQgd2Fz IHJldHVybmVkIGJ5IHRoZSBtb3N0CisgICByZWNlbnQgY2FsbCB0byA8ZnVuY3Rpb24+YW1nZXRi YXRjaDwvZnVuY3Rpb24+IGNhbGwgKHRob3VnaCBub3Qgd2hlbiB0aGUKKyAgIG1vc3QgcmVjZW50 IGNhbGwgdXNlZCB0aGUgb3Bwb3NpdGUgc2NhbiBkaXJlY3Rpb24gdG8gdGhpcyBjYWxsLCBhbmQg bm90CisgICB3aGVuIGEgbWFyayBoYXMgYmVlbiByZXN0b3JlZCkuCisgIDwvcGFyYT4KKworICA8 cGFyYT4KKyAgIEEgYmF0Y2ggcmV0dXJuZWQgYnkgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0 aW9uPiBpcyBndWFyYW50ZWVkIHRvIGJlCisgICBhc3NvY2lhdGVkIHdpdGggYW4gaW5kZXggcGFn ZSBjb250YWluaW5nIGF0IGxlYXN0IG9uZSBtYXRjaGluZyB0dXBsZS4KKyAgIFRoZSBpbmRleCBw YWdlIGFzc29jaWF0ZWQgd2l0aCB0aGUgYmF0Y2ggbWF5IGJlIHJldGFpbmVkIGluIGEgYnVmZmVy IHdpdGgKKyAgIGl0cyBwaW4gaGVsZCBhcyBhbiBpbnRlcmxvY2sgYWdhaW5zdCBjb25jdXJyZW50 IFRJRCByZWN5Y2xpbmcgYnkKKyAgIDxjb21tYW5kPlZBQ1VVTTwvY29tbWFuZD4uICBTZWUgPHhy ZWYgbGlua2VuZD0iaW5kZXgtbG9ja2luZyIvPiBmb3IgZGV0YWlscworICAgb24gYnVmZmVyIHBp biBtYW5hZ2VtZW50IGR1cmluZyA8cXVvdGU+cGxhaW48L3F1b3RlPiBpbmRleCBzY2Fucy4KKyAg PC9wYXJhPgorCisgIDxwYXJhPgorICAgVGhlIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlv bj4gaW50ZXJmYWNlIGRvZXMgbm90IHN1cHBvcnQgaW5kZXgtb25seQorICAgc2NhbnMgdGhhdCBy ZXR1cm4gZGF0YSB2aWEgdGhlIDxsaXRlcmFsPnhzX2hpdHVwPC9saXRlcmFsPiBtZWNoYW5pc20u CisgICBJbmRleC1vbmx5IHNjYW5zIGFyZSBzdXBwb3J0ZWQgdGhyb3VnaCB0aGUgPGxpdGVyYWw+ eHNfaXR1cDwvbGl0ZXJhbD4KKyAgIG1lY2hhbmlzbSBvbmx5LgorICA8L3BhcmE+CisKKyAgPHBh cmE+CisgICBUaGUgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBmdW5jdGlvbiBuZWVk IG9ubHkgYmUgcHJvdmlkZWQgaWYgdGhlCisgICBhY2Nlc3MgbWV0aG9kIHN1cHBvcnRzIDxxdW90 ZT5wbGFpbjwvcXVvdGU+IGluZGV4IHNjYW5zLiAgSWYgaXQgZG9lc24ndCwKKyAgIHRoZSA8ZnVu Y3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGZpZWxkIGluIGl0cworICAgPHN0cnVjdG5hbWU+ SW5kZXhBbVJvdXRpbmU8L3N0cnVjdG5hbWU+IHN0cnVjdCBtdXN0IGJlIHNldCB0byBOVUxMLgor ICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBBIDx0eXBlPkJhdGNoSW5kZXhTY2FuPC90eXBlPiB0 aGF0IGlzIHJldHVybmVkIGJ5CisgICA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGlz IG5vIGxvbmdlciBtYW5hZ2VkIGJ5IHRoZSBhY2Nlc3MgbWV0aG9kLgorICAgSXQgaXMgdXAgdG8g dGhlIHRhYmxlIEFNIGNhbGxlciB0byBkZWNpZGUgd2hlbiBpdCBzaG91bGQgYmUgZnJlZWQgYnkK KyAgIHBhc3NpbmcgaXQgdG8gPGZ1bmN0aW9uPmFtZnJlZWJhdGNoPC9mdW5jdGlvbj4uICBOb3Rl IGFsc28gdGhhdAorICAgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBmdW5jdGlvbnMg bXVzdCBuZXZlciBtb2RpZnkgdGhlCisgICA8c3RydWN0ZmllbGQ+cHJpb3JiYXRjaDwvc3RydWN0 ZmllbGQ+IHBhcmFtZXRlci4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgVGhlIGFjY2VzcyBt ZXRob2QgbWF5IHByb3ZpZGUgb25seSBvbmUgb2YgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0 aW9uPgorICAgYW5kIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gY2FsbGJhY2tzLCBu b3QgYm90aCAoWFhYIHVuY2VydGFpbikuCisgICBXaGVuIHRoZSBhY2Nlc3MgbWV0aG9kIHByb3Zp ZGVzIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4sIGl0IG11c3QKKyAgIGFsc28gcHJv dmlkZSA8ZnVuY3Rpb24+YW1mcmVlYmF0Y2g8L2Z1bmN0aW9uPi4KKyAgPC9wYXJhPgorCisgIDxw YXJhPgorICAgVGhlIHNhbWUgY2F2ZWF0cyBkZXNjcmliZWQgZm9yIDxmdW5jdGlvbj5hbWdldHR1 cGxlPC9mdW5jdGlvbj4gYXBwbHkgaGVyZQorICAgdG9vOiBhbiBlbnRyeSBpbiB0aGUgcmV0dXJu ZWQgYmF0Y2ggbWVhbnMgb25seSB0aGF0IHRoZSBpbmRleCBjb250YWlucworICAgYW4gZW50cnkg dGhhdCBtYXRjaGVzIHRoZSBzY2FuIGtleXMsIG5vdCB0aGF0IHRoZSB0dXBsZSBuZWNlc3Nhcmls eSBzdGlsbAorICAgZXhpc3RzIGluIHRoZSBoZWFwIG9yIHdpbGwgcGFzcyB0aGUgY2FsbGVyJ3Mg c25hcHNob3QgdGVzdC4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorPHByb2dyYW1saXN0aW5nPgor dm9pZAorYW1mcmVlYmF0Y2ggKEluZGV4U2NhbkRlc2Mgc2NhbiwKKyAgICAgICAgICAgICBCYXRj aEluZGV4U2NhbiBiYXRjaCk7Cis8L3Byb2dyYW1saXN0aW5nPgorICAgUmVsZWFzZXMgYSBiYXRj aCByZXR1cm5lZCBieSB0aGUgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBjYWxsYmFj ay4KKyAgIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGV4Y2x1c2l2ZWx5IGJ5IHRhYmxlIGFjY2Vz cyBtZXRob2RzIHRvIGluZGljYXRlCisgICB0aGF0IHByb2Nlc3Npbmcgb2YgdGhlIGJhdGNoIGlz IGNvbXBsZXRlOyBpdCBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkIHdpdGhpbgorICAgdGhlIGluZGV4 IGFjY2VzcyBtZXRob2QgaXRzZWxmLgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICA8ZnVuY3Rp b24+YW1mcmVlYmF0Y2g8L2Z1bmN0aW9uPiBmcmVlcyBidWZmZXIgcGlucyBoZWxkIG9uIHRoZSBi YXRjaCdzCisgICBhc3NvY2lhdGVkIGluZGV4IHBhZ2UgYW5kIHJlbGVhc2VzIHJlbGF0ZWQgbWVt b3J5IGFuZCByZXNvdXJjZXMuICBUaGVzZQorICAgYnVmZmVyIHBpbnMgc2VydmUgYXMgYW4gaW50 ZXJsb2NrIGFnYWluc3QgY29uY3VycmVudCBUSUQgcmVjeWNsaW5nIGJ5CisgICA8Y29tbWFuZD5W QUNVVU08L2NvbW1hbmQ+LCBwcm90ZWN0aW5nIHRoZSB0YWJsZSBhY2Nlc3MgbWV0aG9kIGZyb20g Y29uZnVzaW9uCisgICBhYm91dCB3aGljaCBUSUQgY29ycmVzcG9uZHMgdG8gd2hpY2ggbG9naWNh bCByb3cuICBTZWUgPHhyZWYKKyAgIGxpbmtlbmQ9ImluZGV4LWxvY2tpbmciLz4gZm9yIGRldGFp bGVkIGRpc2N1c3Npb24gb2YgYnVmZmVyIHBpbiBtYW5hZ2VtZW50LgorICA8L3BhcmE+CisKKyAg PHBhcmE+CisgICBUaGUgaW5kZXggQU0gbWF5IGNob29zZSB0byByZXRhaW4gaXRzIG93biBidWZm ZXIgcGlucyBhY3Jvc3MgbXVsdGlwbGUKKyAgIDxmdW5jdGlvbj5hbWZyZWViYXRjaDwvZnVuY3Rp b24+IGNhbGxzIHdoZW4gdGhpcyBzZXJ2ZXMgYW4gaW50ZXJuYWwgcHVycG9zZQorICAgKGZvciBl eGFtcGxlLCBtYWludGFpbmluZyBhIGRlc2NlbnQgc3RhY2sgb2YgcGlubmVkIGluZGV4IHBhZ2Vz IGZvciByZXVzZQorICAgYWNyb3NzIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gY2Fs bHMpLiAgSG93ZXZlciwgYW55IHNjaGVtZSB0aGF0CisgICByZXRhaW5zIGJ1ZmZlciBwaW5zIG11 c3Qga2VlcCB0aGUgbnVtYmVyIG9mIHJldGFpbmVkIHBpbnMgZml4ZWQgYW5kIHNtYWxsLAorICAg dG8gYXZvaWQgZXhoYXVzdGluZyB0aGUgYmFja2VuZCdzIGJ1ZmZlciBwaW4gbGltaXQuCisgIDwv cGFyYT4KKworICA8cGFyYT4KKyAgIFRoZSBpbmRleCBBTSBoYXMgdGhlIG9wdGlvbiBvZiBzZXR0 aW5nIDxsaXRlcmFsPkxQX0RFQUQ8L2xpdGVyYWw+IGJpdHMgaW4KKyAgIHRoZSBpbmRleCBwYWdl IHRvIG1hcmsgZGVhZCB0dXBsZXMgYmVmb3JlIHJlbGVhc2luZyB0aGUgYnVmZmVyIHBpbi4gIFdo ZW4KKyAgIDxsaXRlcmFsPkJhdGNoUXVldWUuZHJvcFBpbjwvbGl0ZXJhbD4gaXMgdHJ1ZSBhbmQg dGhlIGJ1ZmZlciBwaW4gaXMgYmVpbmcKKyAgIGRyb3BwZWQgZWFnZXJseSwgdGhlIGluZGV4IEFN IG11c3QgY2hlY2sgPGxpdGVyYWw+QmF0Y2hJbmRleFNjYW4ubHNuPC9saXRlcmFsPgorICAgdG8g dmVyaWZ5IHRoYXQgdGhlIHBhZ2UgTFNOIGhhcyBub3QgYWR2YW5jZWQgc2luY2UgdGhlIGJhdGNo IHdhcyBvcmlnaW5hbGx5CisgICByZWFkIGJlZm9yZSBzZXR0aW5nIDxsaXRlcmFsPkxQX0RFQUQ8 L2xpdGVyYWw+IGJpdHMsIHRvIGF2b2lkIGNvbmN1cnJlbnQKKyAgIFRJRCByZWN5Y2xpbmcgaGF6 YXJkcy4gIFdoZW4gPGxpdGVyYWw+c2Nhbi0+YmF0Y2hxdWV1ZS0+ZHJvcFBpbjwvbGl0ZXJhbD4K KyAgIGlzIGZhbHNlIChyZXF1aXJpbmcgdGhhdCBhIGJ1ZmZlciBwaW4gYmUgaGVsZCB0aHJvdWdo b3V0IGZpcnN0IHJlYWRpbmcgdGhlCisgICBpbmRleCBsZWFmIHBhZ2UgYW5kIGNhbGxpbmcgPGZ1 bmN0aW9uPmFtZnJlZWJhdGNoPC9mdW5jdGlvbj4pLAorICAgPGxpdGVyYWw+TFBfREVBRDwvbGl0 ZXJhbD4gYml0cyBjYW4gYWx3YXlzIGJlIHNldCBzYWZlbHkgd2l0aG91dCBhbiBMU04gY2hlY2su CisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIFRoZSA8ZnVuY3Rpb24+YW1mcmVlYmF0Y2g8L2Z1 bmN0aW9uPiBmdW5jdGlvbiBuZWVkIG9ubHkgYmUgcHJvdmlkZWQgaWYgdGhlCisgICBhY2Nlc3Mg bWV0aG9kIHByb3ZpZGVzIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4uIE90aGVyd2lz ZSBpdCBoYXMgdG8KKyAgIHJlbWFpbiBzZXQgdG8gPGxpdGVyYWw+TlVMTDwvbGl0ZXJhbD4uCisg IDwvcGFyYT4KIAogICA8cGFyYT4KIDxwcm9ncmFtbGlzdGluZz4KQEAgLTc2Miw4ICs4OTQsOCBA QCBhbWdldGJpdG1hcCAoSW5kZXhTY2FuRGVzYyBzY2FuLAogICAgaXRzZWxmLCBhbmQgdGhlcmVm b3JlIGNhbGxlcnMgcmVjaGVjayBib3RoIHRoZSBzY2FuIGNvbmRpdGlvbnMgYW5kIHRoZQogICAg cGFydGlhbCBpbmRleCBwcmVkaWNhdGUgKGlmIGFueSkgZm9yIHJlY2hlY2thYmxlIHR1cGxlcy4g IFRoYXQgbWlnaHQgbm90CiAgICBhbHdheXMgYmUgdHJ1ZSwgaG93ZXZlci4KLSAgIDxmdW5jdGlv bj5hbWdldGJpdG1hcDwvZnVuY3Rpb24+IGFuZAotICAgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1 bmN0aW9uPiBjYW5ub3QgYmUgdXNlZCBpbiB0aGUgc2FtZSBpbmRleCBzY2FuOyB0aGVyZQorICAg T25seSBvbmUgb2YgPGZ1bmN0aW9uPmFtZ2V0Yml0bWFwPC9mdW5jdGlvbj4sIDxmdW5jdGlvbj5h bWdldHR1cGxlPC9mdW5jdGlvbj4sCisgICBvciA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rp b24+IGNhbiBiZSB1c2VkIGluIGFueSBnaXZlbiBpbmRleCBzY2FuOyB0aGVyZQogICAgYXJlIG90 aGVyIHJlc3RyaWN0aW9ucyB0b28gd2hlbiB1c2luZyA8ZnVuY3Rpb24+YW1nZXRiaXRtYXA8L2Z1 bmN0aW9uPiwgYXMgZXhwbGFpbmVkCiAgICBpbiA8eHJlZiBsaW5rZW5kPSJpbmRleC1zY2Fubmlu ZyIvPi4KICAgPC9wYXJhPgpAQCAtNzg5LDMyICs5MjEsMjUgQEAgYW1lbmRzY2FuIChJbmRleFNj YW5EZXNjIHNjYW4pOwogICA8cGFyYT4KIDxwcm9ncmFtbGlzdGluZz4KIHZvaWQKLWFtbWFya3Bv cyAoSW5kZXhTY2FuRGVzYyBzY2FuKTsKK2FtcG9zcmVzZXQgKEluZGV4U2NhbkRlc2Mgc2Nhbik7 CiA8L3Byb2dyYW1saXN0aW5nPgotICAgTWFyayBjdXJyZW50IHNjYW4gcG9zaXRpb24uICBUaGUg YWNjZXNzIG1ldGhvZCBuZWVkIG9ubHkgc3VwcG9ydCBvbmUKLSAgIHJlbWVtYmVyZWQgc2NhbiBw b3NpdGlvbiBwZXIgc2Nhbi4KKyAgIE5vdGlmeSBpbmRleCBBTSB0aGF0IGNvcmUgY29kZSB3aWxs IGNoYW5nZSB0aGUgc2NhbidzIHBvc2l0aW9uIHRvIGFuIGl0ZW0KKyAgIHJldHVybmVkIGFzIHBh cnQgb2YgYW4gZWFybGllciBiYXRjaC4gIFRoZSBpbmRleCBBTSBtdXN0IHRoZXJlZm9yZQorICAg aW52YWxpZGF0ZSBhbnkgc3RhdGUgdGhhdCBpbmRlcGVuZGVudGx5IHRyYWNrcyB0aGUgc2Nhbidz IHByb2dyZXNzCisgICAoZS5nLiwgYXJyYXkga2V5cyB1c2VkIHdpdGggYSBTY2FsYXJBcnJheU9w RXhwciBxdWFsKS4gIENhbGxlZCBieSB0aGUgY29yZQorICAgc3lzdGVtIHdoZW4gaXQgaXMgYWJv dXQgdG8gcmVzdG9yZSBhIG1hcmsuCiAgIDwvcGFyYT4KIAogICA8cGFyYT4KLSAgIFRoZSA8ZnVu Y3Rpb24+YW1tYXJrcG9zPC9mdW5jdGlvbj4gZnVuY3Rpb24gbmVlZCBvbmx5IGJlIHByb3ZpZGVk IGlmIHRoZSBhY2Nlc3MKLSAgIG1ldGhvZCBzdXBwb3J0cyBvcmRlcmVkIHNjYW5zLiAgSWYgaXQg ZG9lc24ndCwKLSAgIHRoZSA8c3RydWN0ZmllbGQ+YW1tYXJrcG9zPC9zdHJ1Y3RmaWVsZD4gZmll bGQgaW4gaXRzIDxzdHJ1Y3RuYW1lPkluZGV4QW1Sb3V0aW5lPC9zdHJ1Y3RuYW1lPgotICAgc3Ry dWN0IG1heSBiZSBzZXQgdG8gTlVMTC4KLSAgPC9wYXJhPgotCi0gIDxwYXJhPgotPHByb2dyYW1s aXN0aW5nPgotdm9pZAotYW1yZXN0cnBvcyAoSW5kZXhTY2FuRGVzYyBzY2FuKTsKLTwvcHJvZ3Jh bWxpc3Rpbmc+Ci0gICBSZXN0b3JlIHRoZSBzY2FuIHRvIHRoZSBtb3N0IHJlY2VudGx5IG1hcmtl ZCBwb3NpdGlvbi4KLSAgPC9wYXJhPgotCi0gIDxwYXJhPgotICAgVGhlIDxmdW5jdGlvbj5hbXJl c3RycG9zPC9mdW5jdGlvbj4gZnVuY3Rpb24gbmVlZCBvbmx5IGJlIHByb3ZpZGVkIGlmIHRoZSBh Y2Nlc3MKLSAgIG1ldGhvZCBzdXBwb3J0cyBvcmRlcmVkIHNjYW5zLiAgSWYgaXQgZG9lc24ndCwK LSAgIHRoZSA8c3RydWN0ZmllbGQ+YW1yZXN0cnBvczwvc3RydWN0ZmllbGQ+IGZpZWxkIGluIGl0 cyA8c3RydWN0bmFtZT5JbmRleEFtUm91dGluZTwvc3RydWN0bmFtZT4KLSAgIHN0cnVjdCBtYXkg YmUgc2V0IHRvIE5VTEwuCisgICBUaGUgPGZ1bmN0aW9uPmFtcG9zcmVzZXQ8L2Z1bmN0aW9uPiBm dW5jdGlvbiBjYW4gb25seSBiZSBwcm92aWRlZCBpZiB0aGUKKyAgIGFjY2VzcyBtZXRob2Qgc3Vw cG9ydHMgb3JkZXJlZCBzY2FucyB0aHJvdWdoIHRoZSA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVu Y3Rpb24+CisgICBpbnRlcmZhY2UuICBJZiBpdCBkb2Vzbid0LCB0aGUgPHN0cnVjdGZpZWxkPmFt cG9zcmVzZXQ8L3N0cnVjdGZpZWxkPiBmaWVsZAorICAgaW4gaXRzIDxzdHJ1Y3RuYW1lPkluZGV4 QW1Sb3V0aW5lPC9zdHJ1Y3RuYW1lPiBzdHJ1Y3Qgc2hvdWxkIGJlIHNldCB0bworICAgTlVMTC4g IEluZGV4IEFNcyB0aGF0IGRvbid0IGhhdmUgYW55IHByaXZhdGUgc3RhdGUgdGhhdCBtaWdodCBu ZWVkIHRvIGJlCisgICBpbnZhbGlkYXRlZCBtaWdodCBzdGlsbCBmaW5kIGl0IHVzZWZ1bCB0byBw cm92aWRlIGFuIGVtcHR5CisgICA8c3RydWN0ZmllbGQ+YW1wb3NyZXNldDwvc3RydWN0ZmllbGQ+ IGZ1bmN0aW9uOyBpZiA8ZnVuY3Rpb24+YW1wb3NyZXNldDwvZnVuY3Rpb24+CisgICBpcyBzZXQg dG8gTlVMTCwgdGhlIGNvcmUgc3lzdGVtIHdpbGwgYXNzdW1lIHRoYXQgaXQgaXMgdW5zYWZlIHRv IHJlc3RvcmUgYQorICAgbWFya2VkIHBvc2l0aW9uLgogICA8L3BhcmE+CiAKICAgPHBhcmE+CkBA IC05ODgsMzAgKzExMTMsNDcgQEAgYW10cmFuc2xhdGVjbXB0eXBlIChDb21wYXJlVHlwZSBjbXB0 eXBlLCBPaWQgb3BmYW1pbHksIE9pZCBvcGNpbnR5cGUpOwogICA8L3BhcmE+CiAKICAgPHBhcmE+ Ci0gICBUaGUgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiBmdW5jdGlvbiBoYXMgYSA8 bGl0ZXJhbD5kaXJlY3Rpb248L2xpdGVyYWw+IGFyZ3VtZW50LAorICAgVGhlIDxmdW5jdGlvbj5h bWdldHR1cGxlPC9mdW5jdGlvbj4gYW5kIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4K KyAgIGZ1bmN0aW9ucyBoYXZlIGEgPGxpdGVyYWw+ZGlyZWN0aW9uPC9saXRlcmFsPiBhcmd1bWVu dCwKICAgIHdoaWNoIGNhbiBiZSBlaXRoZXIgPGxpdGVyYWw+Rm9yd2FyZFNjYW5EaXJlY3Rpb248 L2xpdGVyYWw+ICh0aGUgbm9ybWFsIGNhc2UpCiAgICBvciAgPGxpdGVyYWw+QmFja3dhcmRTY2Fu RGlyZWN0aW9uPC9saXRlcmFsPi4gIElmIHRoZSBmaXJzdCBjYWxsIGFmdGVyCiAgICA8ZnVuY3Rp b24+YW1yZXNjYW48L2Z1bmN0aW9uPiBzcGVjaWZpZXMgPGxpdGVyYWw+QmFja3dhcmRTY2FuRGly ZWN0aW9uPC9saXRlcmFsPiwgdGhlbiB0aGUKICAgIHNldCBvZiBtYXRjaGluZyBpbmRleCBlbnRy aWVzIGlzIHRvIGJlIHNjYW5uZWQgYmFjay10by1mcm9udCByYXRoZXIgdGhhbiBpbgotICAgdGhl IG5vcm1hbCBmcm9udC10by1iYWNrIGRpcmVjdGlvbiwgc28gPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8 L2Z1bmN0aW9uPiBtdXN0IHJldHVybgotICAgdGhlIGxhc3QgbWF0Y2hpbmcgdHVwbGUgaW4gdGhl IGluZGV4LCByYXRoZXIgdGhhbiB0aGUgZmlyc3Qgb25lIGFzIGl0Ci0gICBub3JtYWxseSB3b3Vs ZC4gIChUaGlzIHdpbGwgb25seSBvY2N1ciBmb3IgYWNjZXNzCi0gICBtZXRob2RzIHRoYXQgc2V0 IDxzdHJ1Y3RmaWVsZD5hbWNhbm9yZGVyPC9zdHJ1Y3RmaWVsZD4gdG8gdHJ1ZS4pICBBZnRlciB0 aGUKLSAgIGZpcnN0IGNhbGwsIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4gbXVzdCBi ZSBwcmVwYXJlZCB0byBhZHZhbmNlIHRoZSBzY2FuIGluCisgICB0aGUgbm9ybWFsIGZyb250LXRv LWJhY2sgZGlyZWN0aW9uLiAgSW4gdGhpcyBjYXNlLAorICAgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8 L2Z1bmN0aW9uPiBtdXN0IHJldHVybiB0aGUgbGFzdCBtYXRjaGluZyB0dXBsZSBpbiB0aGUKKyAg IGluZGV4LCByYXRoZXIgdGhhbiB0aGUgZmlyc3Qgb25lIGFzIGl0IG5vcm1hbGx5IHdvdWxkLiAg U2ltaWxhcmx5LAorICAgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBtdXN0IHJldHVy biB0aGUgbGFzdCBtYXRjaGluZyBiYXRjaCBvZiBpdGVtcworICAgd2hlbiBlaXRoZXIgdGhlIGZp cnN0IGNhbGwgYWZ0ZXIgPGZ1bmN0aW9uPmFtcmVzY2FuPC9mdW5jdGlvbj4gc3BlY2lmaWVzCisg ICA8bGl0ZXJhbD5CYWNrd2FyZFNjYW5EaXJlY3Rpb248L2xpdGVyYWw+LCBvciBhIHN1YnNlcXVl bnQgY2FsbCBoYXMKKyAgIDxsaXRlcmFsPk5VTEw8L2xpdGVyYWw+IGFzIGl0cyA8c3RydWN0Zmll bGQ+cHJpb3JiYXRjaDwvc3RydWN0ZmllbGQ+IGFyZ3VtZW50CisgICAoaW5kaWNhdGluZyBhIGJh Y2t3YXJkIHNjYW4gcmVzdGFydCkuICAoVGhpcyBiYWNrd2FyZC1zY2FuIGJlaGF2aW9yIHdpbGwK KyAgIG9ubHkgb2NjdXIgZm9yIGFjY2VzcyBtZXRob2RzIHRoYXQgc2V0IDxzdHJ1Y3RmaWVsZD5h bWNhbm9yZGVyPC9zdHJ1Y3RmaWVsZD4KKyAgIHRvIHRydWUuKSAgQWZ0ZXIgdGhlIGZpcnN0IGNh bGwsIGJvdGggPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiBhbmQKKyAgIDxmdW5jdGlv bj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gbXVzdCBiZSBwcmVwYXJlZCB0byBhZHZhbmNlIHRoZSBz Y2FuIGluCiAgICBlaXRoZXIgZGlyZWN0aW9uIGZyb20gdGhlIG1vc3QgcmVjZW50bHkgcmV0dXJu ZWQgZW50cnkuICAoQnV0IGlmCiAgICA8c3RydWN0ZmllbGQ+YW1jYW5iYWNrd2FyZDwvc3RydWN0 ZmllbGQ+IGlzIGZhbHNlLCBhbGwgc3Vic2VxdWVudAogICAgY2FsbHMgd2lsbCBoYXZlIHRoZSBz YW1lIGRpcmVjdGlvbiBhcyB0aGUgZmlyc3Qgb25lLikKICAgPC9wYXJhPgogCiAgIDxwYXJhPgot ICAgQWNjZXNzIG1ldGhvZHMgdGhhdCBzdXBwb3J0IG9yZGVyZWQgc2NhbnMgbXVzdCBzdXBwb3J0 IDxxdW90ZT5tYXJraW5nPC9xdW90ZT4gYQotICAgcG9zaXRpb24gaW4gYSBzY2FuIGFuZCBsYXRl ciByZXR1cm5pbmcgdG8gdGhlIG1hcmtlZCBwb3NpdGlvbi4gIFRoZSBzYW1lCi0gICBwb3NpdGlv biBtaWdodCBiZSByZXN0b3JlZCBtdWx0aXBsZSB0aW1lcy4gIEhvd2V2ZXIsIG9ubHkgb25lIHBv c2l0aW9uIG5lZWQKLSAgIGJlIHJlbWVtYmVyZWQgcGVyIHNjYW47IGEgbmV3IDxmdW5jdGlvbj5h bW1hcmtwb3M8L2Z1bmN0aW9uPiBjYWxsIG92ZXJyaWRlcyB0aGUKLSAgIHByZXZpb3VzbHkgbWFy a2VkIHBvc2l0aW9uLiAgQW4gYWNjZXNzIG1ldGhvZCB0aGF0IGRvZXMgbm90IHN1cHBvcnQgb3Jk ZXJlZAotICAgc2NhbnMgbmVlZCBub3QgcHJvdmlkZSA8ZnVuY3Rpb24+YW1tYXJrcG9zPC9mdW5j dGlvbj4gYW5kIDxmdW5jdGlvbj5hbXJlc3RycG9zPC9mdW5jdGlvbj4KLSAgIGZ1bmN0aW9ucyBp biA8c3RydWN0bmFtZT5JbmRleEFtUm91dGluZTwvc3RydWN0bmFtZT47IHNldCB0aG9zZSBwb2lu dGVycyB0byBOVUxMCi0gICBpbnN0ZWFkLgorICAgQWNjZXNzIG1ldGhvZHMgdXNpbmcgdGhlIDxm dW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gaW50ZXJmYWNlIG1heQorICAgc3VwcG9ydCA8 cXVvdGU+bWFya2luZzwvcXVvdGU+IGEgcG9zaXRpb24gaW4gYSBzY2FuIGFuZCBsYXRlciByZXR1 cm5pbmcgdG8KKyAgIHRoZSBtYXJrZWQgcG9zaXRpb24sIHRob3VnaCB0aGlzIGlzIG9wdGlvbmFs LiAgSWYgdGhlIHNhbWUgbWFya2VkIHBvc2l0aW9uCisgICBtaWdodCBiZSByZXN0b3JlZCBtdWx0 aXBsZSB0aW1lcywgdGhlIGNvcmUgc3lzdGVtIG1hbmFnZXMgbWFya2luZyBhbmQKKyAgIHJlc3Rv cmF0aW9uIHRocm91Z2ggdGhlIDxmdW5jdGlvbj5pbmRleF9iYXRjaF9tYXJrX3BvczwvZnVuY3Rp b24+IGFuZAorICAgPGZ1bmN0aW9uPmluZGV4X2JhdGNoX3Jlc3RvcmVfcG9zPC9mdW5jdGlvbj4g aW50ZXJuYWwgZnVuY3Rpb25zLiAgV2hlbiBhCisgICBtYXJrZWQgcG9zaXRpb24gaXMgcmVzdG9y ZWQsIHRoZSBpbmRleCBBTSBpcyBub3RpZmllZCB2aWEgdGhlCisgICA8ZnVuY3Rpb24+YW1wb3Ny ZXNldDwvZnVuY3Rpb24+IGNhbGxiYWNrIHNvIGl0IGNhbiBpbnZhbGlkYXRlIGFueSBwcml2YXRl CisgICBzdGF0ZSB0aGF0IGluZGVwZW5kZW50bHkgdHJhY2tzIHRoZSBzY2FuJ3MgcHJvZ3Jlc3Mg KHN1Y2ggYXMgYXJyYXkga2V5CisgICBzdGF0ZSkuCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAg IFRoZSA8ZnVuY3Rpb24+YW1wb3NyZXNldDwvZnVuY3Rpb24+IGZ1bmN0aW9uIGluIDxzdHJ1Y3Ru YW1lPkluZGV4QW1Sb3V0aW5lPC9zdHJ1Y3RuYW1lPgorICAgc2hvdWxkIGJlIHNldCB0byBOVUxM IGZvciBhY2Nlc3MgbWV0aG9kcyB0aGF0IGRvIG5vdCBzdXBwb3J0IG1hcmsvcmVzdG9yZS4KKyAg IEZvciBhY2Nlc3MgbWV0aG9kcyB0aGF0IGRvIHN1cHBvcnQgdGhpcyBmZWF0dXJlLCA8ZnVuY3Rp b24+YW1wb3NyZXNldDwvZnVuY3Rpb24+CisgICBtdXN0IGJlIHByb3ZpZGVkICh0aG91Z2ggaXQg Y2FuIGJlIGEgbm8tb3AgZnVuY3Rpb24gaWYgdGhlIEFNIGhhcyBubyBwcml2YXRlCisgICBzdGF0 ZSB0byBpbnZhbGlkYXRlKS4KICAgPC9wYXJhPgogCiAgIDxwYXJhPgpAQCAtMTE4MCw2ICsxMzIy LDk0IEBAIGFtdHJhbnNsYXRlY21wdHlwZSAoQ29tcGFyZVR5cGUgY21wdHlwZSwgT2lkIG9wZmFt aWx5LCBPaWQgb3BjaW50eXBlKTsKICAgIHJlZHVjZSB0aGUgZnJlcXVlbmN5IG9mIHN1Y2ggdHJh bnNhY3Rpb24gY2FuY2VsbGF0aW9ucy4KICAgPC9wYXJhPgogCisgIDxzZWN0MiBpZD0iaW5kZXgt bG9ja2luZy1iYXRjaGVzIj4KKyAgIDx0aXRsZT5CYXRjaCBTY2FubmluZyBhbmQgQnVmZmVyIFBp biBNYW5hZ2VtZW50PC90aXRsZT4KKworICAgPHBhcmE+CisgICAgSW5kZXggYWNjZXNzIG1ldGhv ZHMgdGhhdCBpbXBsZW1lbnQgdGhlIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4KKyAg ICBpbnRlcmZhY2UgbXVzdCBjb29wZXJhdGUgd2l0aCB0aGUgY29yZSBzeXN0ZW0gdG8gbWFuYWdl IGJ1ZmZlciBwaW5zIGluIGEKKyAgICB3YXkgdGhhdCBwcmV2ZW50cyBjb25jdXJyZW50IDxjb21t YW5kPlZBQ1VVTTwvY29tbWFuZD4gZnJvbSBjcmVhdGluZworICAgIFRJRCByZWN5Y2xpbmcgaGF6 YXJkcy4gIFVubGlrZSA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+IHNjYW5zLAorICAg IHdoaWNoIGtlZXAgdGhlIGluZGV4IGFjY2VzcyBtZXRob2QgaW4gY29udHJvbCBvZiBzY2FuIHBy b2dyZXNzaW9uLAorICAgIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gc2NhbnMgZ2l2 ZSBjb250cm9sIHRvIHRoZSB0YWJsZSBhY2Nlc3MKKyAgICBtZXRob2QsIHdoaWNoIG1heSBmZXRj aCB0YWJsZSB0dXBsZXMgaW4gYSBkaWZmZXJlbnQgb3JkZXIgdGhhbiB0aGUgaW5kZXgKKyAgICBl bnRyaWVzIHdlcmUgcmV0dXJuZWQuICBUaGlzIGNyZWF0ZXMgdGhlIG5lZWQgZm9yIGV4cGxpY2l0 IGJ1ZmZlciBwaW4KKyAgICBtYW5hZ2VtZW50IHRvIGVuc3VyZSB0aGUgdGFibGUgYWNjZXNzIG1l dGhvZCBkb2VzIG5vdCBjb25mdXNlIGEgcmVjeWNsZWQKKyAgICBUSUQgd2l0aCB0aGUgb3JpZ2lu YWwgcm93IGl0IG1lYW50IHRvIHJlZmVyZW5jZS4KKyAgIDwvcGFyYT4KKworICAgPHBhcmE+Cisg ICAgV2hlbiA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IHJldHVybnMgYSBiYXRjaCwg dGhlIGJhdGNoJ3MKKyAgICBhc3NvY2lhdGVkIGluZGV4IHBhZ2UgbWF5IGJlIHJldGFpbmVkIGlu IGEgYnVmZmVyIHdpdGggYSBwaW4gaGVsZCBvbiBpdC4KKyAgICBUaGlzIHBpbiBzZXJ2ZXMgYXMg YW4gaW50ZXJsb2NrOiA8Y29tbWFuZD5WQUNVVU08L2NvbW1hbmQ+IGNhbm5vdCByZWN5Y2xlCisg ICAgVElEcyBvbiBhIHBpbm5lZCBwYWdlLiAgVGhlIGJ1ZmZlciBwaW4gcHJvdGVjdHMgb25seSB0 aGUgdGFibGUgYWNjZXNzCisgICAgbWV0aG9kJ3MgYWJpbGl0eSB0byBtYXAgVElEcyB0byByb3dz IGNvcnJlY3RseTsgaXQgZG9lcyBub3QgcHJvdGVjdCB0aGUKKyAgICBpbmRleCBzdHJ1Y3R1cmUg aXRzZWxmLiAgSW5kZXggYWNjZXNzIG1ldGhvZHMgbWF5IHVzZSBwaW5zIGZvciBvdGhlcgorICAg IHB1cnBvc2VzIChmb3IgZXhhbXBsZSwgbWFpbnRhaW5pbmcgYSBkZXNjZW50IHN0YWNrIG9mIHBp bm5lZCBwYWdlcyksIGJ1dAorICAgIHRob3NlIHVzZXMgYXJlIGludGVybmFsIHRvIHRoZSBhY2Nl c3MgbWV0aG9kIGFuZCBpbmRlcGVuZGVudCBvZiB0aGUKKyAgICB0YWJsZS1BTSBzeW5jaHJvbml6 YXRpb24gZGVzY3JpYmVkIGhlcmUuCisgICA8L3BhcmE+CisKKyAgIDxwYXJhPgorICAgIFdoZXRo ZXIgYSBwaW4gc2hvdWxkIGJlIGhlbGQgd2hlbiByZXR1cm5pbmcgYSBiYXRjaCBpcyBjb250cm9s bGVkIGJ5IHRoZQorICAgIDxzdHJ1Y3RmaWVsZD5kcm9wUGluPC9zdHJ1Y3RmaWVsZD4gZmxhZyBp biB0aGUgPHR5cGU+QmF0Y2hRdWV1ZTwvdHlwZT4KKyAgICBzdHJ1Y3R1cmUuIFdoZW4gPGxpdGVy YWw+ZHJvcFBpbjwvbGl0ZXJhbD4gaXMgdHJ1ZSwgdGhlIGluZGV4IGFjY2VzcyBtZXRob2QKKyAg ICBkcm9wcyB0aGUgcGluIGJlZm9yZSByZXR1cm5pbmcgdGhlIGJhdGNoLCB3aGljaCBhdm9pZHMg YmxvY2tpbmcKKyAgICA8Y29tbWFuZD5WQUNVVU08L2NvbW1hbmQ+LiBXaGVuIDxsaXRlcmFsPmRy b3BQaW48L2xpdGVyYWw+IGlzIGZhbHNlLCB0aGUKKyAgICBpbmRleCBhY2Nlc3MgbWV0aG9kIG11 c3QgaG9sZCB0aGUgcGluIHVudGlsIHRoZSBiYXRjaCBpcyBmcmVlZCB2aWEKKyAgICA8ZnVuY3Rp b24+YW1mcmVlYmF0Y2g8L2Z1bmN0aW9uPi4gIFRoZSBjb3JlIHN5c3RlbSBzZXRzIHRoZQorICAg IDxsaXRlcmFsPmRyb3BQaW48L2xpdGVyYWw+IGZsYWcgYmFzZWQgb24gc2NhbiB0eXBlOiBpdCBp cyB0cnVlIGZvcgorICAgIE1WQ0MtY29tcGxpYW50IHNuYXBzaG90cyBvbiBsb2dnZWQgcmVsYXRp b25zICh1bmxlc3MgaW5kZXgtb25seSBzY2FucyBhcmUKKyAgICBpbiB1c2UpLCBhbmQgZmFsc2Ug b3RoZXJ3aXNlLgorICAgPC9wYXJhPgorCisgICA8cGFyYT4KKyAgICBXaGVuIDxsaXRlcmFsPmRy b3BQaW48L2xpdGVyYWw+IGlzIHRydWUgYW5kIHRoZSBpbmRleCBhY2Nlc3MgbWV0aG9kIGlzCisg ICAgZWFnZXIgYWJvdXQgZHJvcHBpbmcgcGlucywgaXQgbXVzdCBzYXZlIHRoZSBwYWdlJ3MgTFNO IGluIHRoZSBiYXRjaCBiZWZvcmUKKyAgICByZXR1cm5pbmcuIExhdGVyLCB3aGVuIDxmdW5jdGlv bj5hbWZyZWViYXRjaDwvZnVuY3Rpb24+IGlzIGNhbGxlZCBhbmQgdGhlCisgICAgYWNjZXNzIG1l dGhvZCB3aXNoZXMgdG8gc2V0IDxsaXRlcmFsPkxQX0RFQUQ8L2xpdGVyYWw+IGJpdHMgdG8gbWFy ayBkZWFkCisgICAgdHVwbGVzLCBpdCBtdXN0IHZlcmlmeSB0aGF0IHRoZSBwYWdlJ3MgTFNOIGhh cyBub3QgY2hhbmdlZCBzaW5jZSB0aGUgYmF0Y2gKKyAgICB3YXMgcmVhZC4gSWYgdGhlIExTTiBo YXMgY2hhbmdlZCwgdGhlIHBhZ2UgbWF5IGhhdmUgYmVlbiBtb2RpZmllZCBieQorICAgIGNvbmN1 cnJlbnQgYWN0aXZpdHkgYW5kIGl0IGlzIHVuc2FmZSB0byBzZXQgPGxpdGVyYWw+TFBfREVBRDwv bGl0ZXJhbD4gYml0cy4KKyAgICBUaGlzIExTTi1iYXNlZCB2YWxpZGF0aW9uIHNjaGVtZSBwcm90 ZWN0cyBhZ2FpbnN0IFRJRCByZWN5Y2xpbmcgcmFjZXMgd2hlbgorICAgIHBpbnMgaGF2ZSBiZWVu IGRyb3BwZWQuICBXaGVuIDxsaXRlcmFsPmRyb3BQaW48L2xpdGVyYWw+IGlzIGZhbHNlLCB0aGUg cGluCisgICAgcHJldmVudHMgdW5zYWZlIGNvbmN1cnJlbnQgcmVtb3ZhbCBvZiB0YWJsZSBUSUQg cmVmZXJlbmNlcyBieQorICAgIDxjb21tYW5kPlZBQ1VVTTwvY29tbWFuZD4sIHNvIG5vIExTTiBj aGVjayBpcyBuZWNlc3NhcnkuCisgICA8L3BhcmE+CisKKyAgIDxwYXJhPgorICAgIFRoZSBjb3Jl IHN5c3RlbSBwcm92aWRlcyB0aHJlZSB1dGlsaXR5IGZ1bmN0aW9ucyBmb3IgbWFuYWdpbmcgYmF0 Y2gKKyAgICByZXNvdXJjZXM6CisgICAgPGZ1bmN0aW9uPmluZGV4YW1fdXRpbF9iYXRjaF9hbGxv YzwvZnVuY3Rpb24+IGFsbG9jYXRlcyBhIG5ldyBiYXRjaCBvcgorICAgIHJldXNlcyBhIGNhY2hl ZCBvbmUsCisgICAgPGZ1bmN0aW9uPmluZGV4YW1fdXRpbF9iYXRjaF91bmxvY2s8L2Z1bmN0aW9u PiBkcm9wcyB0aGUgbG9jayBhbmQKKyAgICBjb25kaXRpb25hbGx5IGRyb3BzIHRoZSBwaW4gb24g YSBiYXRjaCdzIGluZGV4IHBhZ2UgKGJhc2VkIG9uIHRoZQorICAgIDxsaXRlcmFsPmRyb3BQaW48 L2xpdGVyYWw+IHNldHRpbmcpLCBhbmQKKyAgICA8ZnVuY3Rpb24+aW5kZXhhbV91dGlsX2JhdGNo X3JlbGVhc2U8L2Z1bmN0aW9uPiBmcmVlcyBvciBjYWNoZXMgYSBiYXRjaC4KKyAgICBJbmRleCBh Y2Nlc3MgbWV0aG9kcyBzaG91bGQgdXNlIHRoZXNlIHV0aWxpdGllcyByYXRoZXIgdGhhbiBtYW5h Z2luZworICAgIGJ1ZmZlcnMgZGlyZWN0bHkuICBUaGUgPGZpbGVuYW1lPnNyYy9iYWNrZW5kL2Fj Y2Vzcy9uYnRyZWUvPC9maWxlbmFtZT4KKyAgICBpbXBsZW1lbnRhdGlvbiBwcm92aWRlcyBhIHJl ZmVyZW5jZSBleGFtcGxlIG9mIGNvcnJlY3QgdXNhZ2UuCisgICA8L3BhcmE+CisKKyAgIDxwYXJh PgorICAgIE5vdGUgdGhhdCA8ZnVuY3Rpb24+YW1mcmVlYmF0Y2g8L2Z1bmN0aW9uPiBpcyBjYWxs ZWQgb25seSBieSB0aGUgY29yZSBjb2RlCisgICAgYW5kIHRhYmxlIGFjY2VzcyBtZXRob2QsIG5l dmVyIGJ5IHRoZSBpbmRleCBhY2Nlc3MgbWV0aG9kIGl0c2VsZi4gVGhlCisgICAgaW5kZXggQU0g bXVzdCBub3QgYXNzdW1lIHRoYXQgYSBjYWxsIHRvIDxmdW5jdGlvbj5hbWZyZWViYXRjaDwvZnVu Y3Rpb24+CisgICAgd2lsbCB0YWtlIHBsYWNlIGJlZm9yZSBhbm90aGVyIGNhbGwgdG8gPGZ1bmN0 aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPgorICAgIChmb3IgdGhlIHNhbWUgaW5kZXggc2Nhbikg dGFrZXMgcGxhY2UuCisgICA8L3BhcmE+CisKKyAgIDxwYXJhPgorICAgIFRoZSBpbmRleCBBTSBt dXN0IGFsc28gYXZvaWQgcmVseWluZyBvbiB0aGUgY29yZSBjb2RlIGNhbGxpbmcKKyAgICA8ZnVu Y3Rpb24+YW1mcmVlYmF0Y2g8L2Z1bmN0aW9uPiB3aXRoIGJhdGNoZXMgdGhhdCBhcmUgaW4gYW55 IHBhcnRpY3VsYXIKKyAgICBvcmRlci4gIEZvciBleGFtcGxlLCBpdCBpcyBub3Qgb2theSBmb3Ig YW4gaW5kZXggQU0gdG8gYXNzdW1lIHRoYXQgY2FsbHMKKyAgICB0byA8ZnVuY3Rpb24+YW1mcmVl YmF0Y2g8L2Z1bmN0aW9uPiB3aWxsIHRha2UgcGxhY2UgaW4gdGhlIHNhbWUgb3JkZXIgYXMKKyAg ICB0aGUgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBjYWxscyB0aGF0IGluaXRpYWxs eQorICAgIGFsbG9jYXRlZC9wb3B1bGF0ZWQvcmV0dXJuZWQgZWFjaCBiYXRjaC4KKyAgIDwvcGFy YT4KKworICA8L3NlY3QyPgorCiAgPC9zZWN0MT4KIAogIDxzZWN0MSBpZD0iaW5kZXgtdW5pcXVl LWNoZWNrcyI+CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV90YWJsZS5zZ21s IGIvZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfdGFibGUuc2dtbAppbmRleCA3N2M1YTc2M2QuLjU1 YjcyMjJlOSAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfdGFibGUuc2dtbAor KysgYi9kb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV90YWJsZS5zZ21sCkBAIC0xMTUyLDEyICsxMTUy LDEzIEBAIFdJVEggKCBNT0RVTFVTIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5udW1l cmljX2xpdGVyYWw8L3JlcGxhY2VhYmxlPiwgUkVNCiAgICAgIDwvcGFyYT4KIAogICAgICA8cGFy YT4KLSAgICAgIFRoZSBhY2Nlc3MgbWV0aG9kIG11c3Qgc3VwcG9ydCA8bGl0ZXJhbD5hbWdldHR1 cGxlPC9saXRlcmFsPiAoc2VlIDx4cmVmCi0gICAgICBsaW5rZW5kPSJpbmRleGFtIi8+KTsgYXQg cHJlc2VudCB0aGlzIG1lYW5zIDxhY3JvbnltPkdJTjwvYWNyb255bT4KLSAgICAgIGNhbm5vdCBi ZSB1c2VkLiAgQWx0aG91Z2ggaXQncyBhbGxvd2VkLCB0aGVyZSBpcyBsaXR0bGUgcG9pbnQgaW4g dXNpbmcKLSAgICAgIEItdHJlZSBvciBoYXNoIGluZGV4ZXMgd2l0aCBhbiBleGNsdXNpb24gY29u c3RyYWludCwgYmVjYXVzZSB0aGlzCi0gICAgICBkb2VzIG5vdGhpbmcgdGhhdCBhbiBvcmRpbmFy eSB1bmlxdWUgY29uc3RyYWludCBkb2Vzbid0IGRvIGJldHRlci4KLSAgICAgIFNvIGluIHByYWN0 aWNlIHRoZSBhY2Nlc3MgbWV0aG9kIHdpbGwgYWx3YXlzIGJlIDxhY3JvbnltPkdpU1Q8L2Fjcm9u eW0+IG9yCisgICAgICBUaGUgYWNjZXNzIG1ldGhvZCBtdXN0IHN1cHBvcnQgZWl0aGVyIDxsaXRl cmFsPmFtZ2V0dHVwbGU8L2xpdGVyYWw+CisgICAgICBvciA8bGl0ZXJhbD5hbWdldGJhdGNoPC9s aXRlcmFsPiAoc2VlIDx4cmVmIGxpbmtlbmQ9ImluZGV4YW0iLz4pOyBhdAorICAgICAgcHJlc2Vu dCB0aGlzIG1lYW5zIDxhY3JvbnltPkdJTjwvYWNyb255bT4gY2Fubm90IGJlIHVzZWQuICBBbHRo b3VnaAorICAgICAgaXQncyBhbGxvd2VkLCB0aGVyZSBpcyBsaXR0bGUgcG9pbnQgaW4gdXNpbmcg Qi10cmVlIG9yIGhhc2ggaW5kZXhlcworICAgICAgd2l0aCBhbiBleGNsdXNpb24gY29uc3RyYWlu dCwgYmVjYXVzZSB0aGlzIGRvZXMgbm90aGluZyB0aGF0IGFuCisgICAgICBvcmRpbmFyeSB1bmlx dWUgY29uc3RyYWludCBkb2Vzbid0IGRvIGJldHRlci4gIFNvIGluIHByYWN0aWNlIHRoZQorICAg ICAgYWNjZXNzIG1ldGhvZCB3aWxsIGFsd2F5cyBiZSA8YWNyb255bT5HaVNUPC9hY3JvbnltPiBv cgogICAgICAgPGFjcm9ueW0+U1AtR2lTVDwvYWNyb255bT4uCiAgICAgIDwvcGFyYT4KIApkaWZm IC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy9kdW1teV9pbmRleF9hbS9kdW1teV9pbmRleF9hbS5j IGIvc3JjL3Rlc3QvbW9kdWxlcy9kdW1teV9pbmRleF9hbS9kdW1teV9pbmRleF9hbS5jCmluZGV4 IGEzNDM4MmE1Zi4uNTUyNjc3MWI1IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL2R1bW15 X2luZGV4X2FtL2R1bW15X2luZGV4X2FtLmMKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy9kdW1teV9p bmRleF9hbS9kdW1teV9pbmRleF9hbS5jCkBAIC0zMTcsMTAgKzMxNywxMCBAQCBkaWhhbmRsZXIo UEdfRlVOQ1RJT05fQVJHUykKIAlhbXJvdXRpbmUtPmFtYmVnaW5zY2FuID0gZGliZWdpbnNjYW47 CiAJYW1yb3V0aW5lLT5hbXJlc2NhbiA9IGRpcmVzY2FuOwogCWFtcm91dGluZS0+YW1nZXR0dXBs ZSA9IE5VTEw7CisJYW1yb3V0aW5lLT5hbWdldGJhdGNoID0gTlVMTDsKIAlhbXJvdXRpbmUtPmFt Z2V0Yml0bWFwID0gTlVMTDsKIAlhbXJvdXRpbmUtPmFtZW5kc2NhbiA9IGRpZW5kc2NhbjsKLQlh bXJvdXRpbmUtPmFtbWFya3BvcyA9IE5VTEw7Ci0JYW1yb3V0aW5lLT5hbXJlc3RycG9zID0gTlVM TDsKKwlhbXJvdXRpbmUtPmFtcG9zcmVzZXQgPSBOVUxMOwogCWFtcm91dGluZS0+YW1lc3RpbWF0 ZXBhcmFsbGVsc2NhbiA9IE5VTEw7CiAJYW1yb3V0aW5lLT5hbWluaXRwYXJhbGxlbHNjYW4gPSBO VUxMOwogCWFtcm91dGluZS0+YW1wYXJhbGxlbHJlc2NhbiA9IE5VTEw7CmRpZmYgLS1naXQgYS9z cmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90eXBl ZGVmcy5saXN0CmluZGV4IDlkZDY1YjEwMi4uNjgxMmQyZmQ3IDEwMDY0NAotLS0gYS9zcmMvdG9v bHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRl ZnMubGlzdApAQCAtMjIwLDggKzIyMCw2IEBAIEJUU2Nhbkluc2VydERhdGEKIEJUU2NhbktleVBy ZXByb2MKIEJUU2Nhbk9wYXF1ZQogQlRTY2FuT3BhcXVlRGF0YQotQlRTY2FuUG9zRGF0YQotQlRT Y2FuUG9zSXRlbQogQlRTaGFyZWQKIEJUU29ydEFycmF5Q29udGV4dAogQlRTcG9vbApAQCAtMzQ1 MCwxMiArMzQ0OCwxMCBAQCBhbWdldHR1cGxlX2Z1bmN0aW9uCiBhbWluaXRwYXJhbGxlbHNjYW5f ZnVuY3Rpb24KIGFtaW5zZXJ0X2Z1bmN0aW9uCiBhbWluc2VydGNsZWFudXBfZnVuY3Rpb24KLWFt bWFya3Bvc19mdW5jdGlvbgogYW1vcHRpb25zX2Z1bmN0aW9uCiBhbXBhcmFsbGVscmVzY2FuX2Z1 bmN0aW9uCiBhbXByb3BlcnR5X2Z1bmN0aW9uCiBhbXJlc2Nhbl9mdW5jdGlvbgotYW1yZXN0cnBv c19mdW5jdGlvbgogYW10cmFuc2xhdGVfY21wdHlwZV9mdW5jdGlvbgogYW10cmFuc2xhdGVfc3Ry YXRlZ3lfZnVuY3Rpb24KIGFtdmFjdXVtY2xlYW51cF9mdW5jdGlvbgotLSAKMi41MS4wCgo= --000000000000c23a9a0645a0bc0c Content-Type: application/octet-stream; name="v3-0004-Add-amgetbatch-support-to-hash-index-AM.patch" Content-Disposition: attachment; filename="v3-0004-Add-amgetbatch-support-to-hash-index-AM.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mj0ldwbd1 RnJvbSBkMGY1MTM4YTQ1OGVhMzgzMTNjODljYTg0M2I1OWEyYmVlZTBiMzM2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFR1 ZSwgMjUgTm92IDIwMjUgMTg6MDM6MTUgLTA1MDAKU3ViamVjdDogW1BBVENIIHYzIDQvNF0gQWRk IGFtZ2V0YmF0Y2ggc3VwcG9ydCB0byBoYXNoIGluZGV4IEFNLgoKVGhpcyBwYXRjaCBzaG91bGQg YmUgY29uc2lkZXJlZCBhIHdvcmsgaW4gcHJvZ3Jlc3MuICBJdCBoYXMgb25seSBiZWVuCmxpZ2h0 bHkgdGVzdGVkLCBhbmQgaXQncyBub3QgY2xlYXIgaWYgSSd2ZSBhY2NvdW50ZWQgZm9yIGFsbCBv ZiB0aGUKaW50cmljYWNpZXMgd2l0aCBidWNrZXQgc3BsaXRzIChhbmQgd2l0aCBwaW5zIHRoYXQg YXJlIGhlbGQgYnkgdGhlCnNjYW4ncyBvcGFxdWUgc3RhdGUgbW9yZSBnZW5lcmFsbHkpLgoKVGhp cyBhdXRvbWF0aWNhbGx5IHN3aXRjaGVkIGhhc2ggaW5kZXhlcyBvdmVyIHRvIHVzaW5nIHRoZSBk cm9wUGluCm9wdGltaXphdGlvbiwgc2luY2UgdGhhdCBpcyBzdGFuZGFyZCB3aGVuIHVzaW5nIHRo ZSBuZXcgYW1nZXRiYXRjaAppbnRlcmZhY2UuICBUaGlzIHdvbid0IGJyaW5nIHNpbWlsYXIgYmVu ZWZpdHMgdG8gaGFzaCBpbmRleCBzY2FucyB0aGF0Cm5idHJlZSBpbmRleCBzY2FucyBnYWluZWQg d2hlbiBjb21taXQgMmVkNWI4N2Ygd2VudCBpbi4gIEhhc2ggaW5kZXgKdmFjdXVtaW5nIGFjcXVp cmVzIGEgY2xlYW51cCBsb2NrIG9uIGJ1Y2tldCBwYWdlcywgYnV0IGNvbmZsaWN0aW5nIHBpbnMK b24gYnVja2V0IHBhZ2VzIGFyZSBzdGlsbCBoZWxkIGZvciB0aGUgZnVsbCBkdXJhdGlvbiBvZiBl YWNoIGluZGV4IHNjYW4uCgpIb3dldmVyLCB0aGVyZSBpcyBzdGlsbCBpbmRlcGVuZGVudCB2YWx1 ZSBpbiBhdm9pZGluZyBob2xkaW5nIG9uIHRvCmJ1ZmZlciBwaW5zIGR1cmluZyBpbmRleCBzY2Fu czogaW5kZXggcHJlZmV0Y2hpbmcgdGVuZHMgdG8gaG9sZCBvcGVuCmFzIG1hbnkgYXMgc2V2ZXJh bCBkb3plbiBiYXRjaGVzIHdpdGggY2VydGFpbiB3b3JrbG9hZHMgKHdvcmtsb2FkcyB3aGVyZQp0 aGUgc3RyZWFtIHBvc2l0aW9uIGhhcyB0byBnZXQgcXVpdGUgZmFyIGFoZWFkIG9mIHRoZSByZWFk IHBvc2l0aW9uIGluCm9yZGVyIHRvIG1haW50YWluIHRoZSBhcHByb3ByaWF0ZSBwcmVmZXRjaCBk aXN0YW5jZSBvbiB0aGUgaGVhcGFtIHNpZGUpLgpHdWFyYW50ZWVpbmcgdGhhdCBvcGVuIGJhdGNo ZXMgd29uJ3QgaG9sZCBidWZmZXIgcGlucyBvbiBpbmRleCBwYWdlcyAoYXQKbGVhc3QgZHVyaW5n IHBsYWluIGluZGV4IHNjYW5zIHRoYXQgdXNlIGFuIE1WQ0Mgc25hcHNob3QsIHBlciB0aGUgcnVs ZXMKZXN0YWJsaXNoZWQgYnkgY29tbWl0IDJlZDViODdmKSBpcyBsaWtlbHkgdG8gbWFrZSBsaWZl IGVhc2llciB3aGVuIHRoZQpyZXNvdXJjZSBtYW5hZ2VtZW50IHJ1bGVzIGZvciBJL08gcHJlZmV0 Y2hpbmcgYXJlIGZ1bGx5IGlyb25lZC1vdXQuCgpOb3RlIHRoYXQgdGhlIGNvZGUgcGF0aCBpbiBf aGFzaF9raWxsX2l0ZW1zIHRoYXQgY2FsbHMgX2hhc2hfZ2V0YnVmCih0aG91Z2ggb25seSB3aXRo IHRoZSBMSF9PVkVSRkxPV19QQUdFIGZsYWcvb3ZlcmZsb3cgcGFnZXMpIGlzIGRlYWQKY29kZS92 ZXN0aWdpYWwgb24gbWFzdGVyIFsxXS4gIEhvd2V2ZXIsIGl0J3Mgbm93IHVzZWZ1bCBhZ2Fpbiwg c2luY2UKX2hhc2hfa2lsbF9pdGVtcyBtaWdodCBub3cgbmVlZCB0byByZWxvY2sgYW5kIHJlcGlu IGFuIG92ZXJmbG93IHBhZ2UKKG5vdCBqdXN0IHJlbG9jayBpdCkgZHVyaW5nIGRyb3BQaW4gc2Nh bnMuCgpbMV0gaHR0cHM6Ly9wb3N0Z3IuZXMvbS9DQUgyLVd6PThtZWZ5OFFVY3NuS0xUZVB1eTR0 RThwZE8rZ1NSUTl5UXdVSG9hZUZURndAbWFpbC5nbWFpbC5jb20KCkF1dGhvcjogUGV0ZXIgR2Vv Z2hlZ2FuIDxwZ0Bib3d0LmllPgotLS0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9oYXNoLmggICAgICAg ICAgICB8ICA3MyArLS0tLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMgICAgICAg fCAxMjIgKysrKy0tLS0tLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNocGFnZS5jICAg fCAgMTkgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hzZWFyY2guYyB8IDI4NyArKysr KysrKysrKystLS0tLS0tLS0tLS0tLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2h1dGls LmMgICB8ICA5OCArKysrLS0tLS0KIHNyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0ICAg ICB8ICAgMiAtCiA2IGZpbGVzIGNoYW5nZWQsIDIzOSBpbnNlcnRpb25zKCspLCAzNjIgZGVsZXRp b25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2hhc2guaCBiL3NyYy9pbmNs dWRlL2FjY2Vzcy9oYXNoLmgKaW5kZXggODM5YzM0MzEyLi4wM2Y4YmM5YjMgMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL2FjY2Vzcy9oYXNoLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2hhc2gu aApAQCAtMTAwLDU4ICsxMDAsNiBAQCB0eXBlZGVmIEhhc2hQYWdlT3BhcXVlRGF0YSAqSGFzaFBh Z2VPcGFxdWU7CiAgKi8KICNkZWZpbmUgSEFTSE9fUEFHRV9JRAkJMHhGRjgwCiAKLXR5cGVkZWYg c3RydWN0IEhhc2hTY2FuUG9zSXRlbQkvKiB3aGF0IHdlIHJlbWVtYmVyIGFib3V0IGVhY2ggbWF0 Y2ggKi8KLXsKLQlJdGVtUG9pbnRlckRhdGEgaGVhcFRpZDsJLyogVElEIG9mIHJlZmVyZW5jZWQg aGVhcCBpdGVtICovCi0JT2Zmc2V0TnVtYmVyIGluZGV4T2Zmc2V0OwkvKiBpbmRleCBpdGVtJ3Mg bG9jYXRpb24gd2l0aGluIHBhZ2UgKi8KLX0gSGFzaFNjYW5Qb3NJdGVtOwotCi10eXBlZGVmIHN0 cnVjdCBIYXNoU2NhblBvc0RhdGEKLXsKLQlCdWZmZXIJCWJ1ZjsJCQkvKiBpZiB2YWxpZCwgdGhl IGJ1ZmZlciBpcyBwaW5uZWQgKi8KLQlCbG9ja051bWJlciBjdXJyUGFnZTsJCS8qIGN1cnJlbnQg aGFzaCBpbmRleCBwYWdlICovCi0JQmxvY2tOdW1iZXIgbmV4dFBhZ2U7CQkvKiBuZXh0IG92ZXJm bG93IHBhZ2UgKi8KLQlCbG9ja051bWJlciBwcmV2UGFnZTsJCS8qIHByZXYgb3ZlcmZsb3cgb3Ig YnVja2V0IHBhZ2UgKi8KLQotCS8qCi0JICogVGhlIGl0ZW1zIGFycmF5IGlzIGFsd2F5cyBvcmRl cmVkIGluIGluZGV4IG9yZGVyIChpZSwgaW5jcmVhc2luZwotCSAqIGluZGV4b2Zmc2V0KS4gIFdo ZW4gc2Nhbm5pbmcgYmFja3dhcmRzIGl0IGlzIGNvbnZlbmllbnQgdG8gZmlsbCB0aGUKLQkgKiBh cnJheSBiYWNrLXRvLWZyb250LCBzbyB3ZSBzdGFydCBhdCB0aGUgbGFzdCBzbG90IGFuZCBmaWxs IGRvd253YXJkcy4KLQkgKiBIZW5jZSB3ZSBuZWVkIGJvdGggYSBmaXJzdC12YWxpZC1lbnRyeSBh bmQgYSBsYXN0LXZhbGlkLWVudHJ5IGNvdW50ZXIuCi0JICogaXRlbUluZGV4IGlzIGEgY3Vyc29y IHNob3dpbmcgd2hpY2ggZW50cnkgd2FzIGxhc3QgcmV0dXJuZWQgdG8gY2FsbGVyLgotCSAqLwot CWludAkJCWZpcnN0SXRlbTsJCS8qIGZpcnN0IHZhbGlkIGluZGV4IGluIGl0ZW1zW10gKi8KLQlp bnQJCQlsYXN0SXRlbTsJCS8qIGxhc3QgdmFsaWQgaW5kZXggaW4gaXRlbXNbXSAqLwotCWludAkJ CWl0ZW1JbmRleDsJCS8qIGN1cnJlbnQgaW5kZXggaW4gaXRlbXNbXSAqLwotCi0JSGFzaFNjYW5Q b3NJdGVtIGl0ZW1zW01heEluZGV4VHVwbGVzUGVyUGFnZV07CS8qIE1VU1QgQkUgTEFTVCAqLwot fSBIYXNoU2NhblBvc0RhdGE7Ci0KLSNkZWZpbmUgSGFzaFNjYW5Qb3NJc1Bpbm5lZChzY2FucG9z KSBcCi0oIFwKLQlBc3NlcnRNYWNybyhCbG9ja051bWJlcklzVmFsaWQoKHNjYW5wb3MpLmN1cnJQ YWdlKSB8fCBcCi0JCQkJIUJ1ZmZlcklzVmFsaWQoKHNjYW5wb3MpLmJ1ZikpLCBcCi0JQnVmZmVy SXNWYWxpZCgoc2NhbnBvcykuYnVmKSBcCi0pCi0KLSNkZWZpbmUgSGFzaFNjYW5Qb3NJc1ZhbGlk KHNjYW5wb3MpIFwKLSggXAotCUFzc2VydE1hY3JvKEJsb2NrTnVtYmVySXNWYWxpZCgoc2NhbnBv cykuY3VyclBhZ2UpIHx8IFwKLQkJCQkhQnVmZmVySXNWYWxpZCgoc2NhbnBvcykuYnVmKSksIFwK LQlCbG9ja051bWJlcklzVmFsaWQoKHNjYW5wb3MpLmN1cnJQYWdlKSBcCi0pCi0KLSNkZWZpbmUg SGFzaFNjYW5Qb3NJbnZhbGlkYXRlKHNjYW5wb3MpIFwKLQlkbyB7IFwKLQkJKHNjYW5wb3MpLmJ1 ZiA9IEludmFsaWRCdWZmZXI7IFwKLQkJKHNjYW5wb3MpLmN1cnJQYWdlID0gSW52YWxpZEJsb2Nr TnVtYmVyOyBcCi0JCShzY2FucG9zKS5uZXh0UGFnZSA9IEludmFsaWRCbG9ja051bWJlcjsgXAot CQkoc2NhbnBvcykucHJldlBhZ2UgPSBJbnZhbGlkQmxvY2tOdW1iZXI7IFwKLQkJKHNjYW5wb3Mp LmZpcnN0SXRlbSA9IDA7IFwKLQkJKHNjYW5wb3MpLmxhc3RJdGVtID0gMDsgXAotCQkoc2NhbnBv cykuaXRlbUluZGV4ID0gMDsgXAotCX0gd2hpbGUgKDApCi0KIC8qCiAgKglIYXNoU2Nhbk9wYXF1 ZURhdGEgaXMgcHJpdmF0ZSBzdGF0ZSBmb3IgYSBoYXNoIGluZGV4IHNjYW4uCiAgKi8KQEAgLTE3 OCwxNSArMTI2LDYgQEAgdHlwZWRlZiBzdHJ1Y3QgSGFzaFNjYW5PcGFxdWVEYXRhCiAJICogcmVm ZXJyZWQgb25seSB3aGVuIGhhc2hzb19idWNfcG9wdWxhdGVkIGlzIHRydWUuCiAJICovCiAJYm9v bAkJaGFzaHNvX2J1Y19zcGxpdDsKLQkvKiBpbmZvIGFib3V0IGtpbGxlZCBpdGVtcyBpZiBhbnkg KGtpbGxlZEl0ZW1zIGlzIE5VTEwgaWYgbmV2ZXIgdXNlZCkgKi8KLQlpbnQJCSAgICpraWxsZWRJ dGVtczsJLyogY3VyclBvcy5pdGVtcyBpbmRleGVzIG9mIGtpbGxlZCBpdGVtcyAqLwotCWludAkJ CW51bUtpbGxlZDsJCS8qIG51bWJlciBvZiBjdXJyZW50bHkgc3RvcmVkIGl0ZW1zICovCi0KLQkv KgotCSAqIElkZW50aWZ5IGFsbCB0aGUgbWF0Y2hpbmcgaXRlbXMgb24gYSBwYWdlIGFuZCBzYXZl IHRoZW0gaW4KLQkgKiBIYXNoU2NhblBvc0RhdGEKLQkgKi8KLQlIYXNoU2NhblBvc0RhdGEgY3Vy clBvczsJLyogY3VycmVudCBwb3NpdGlvbiBkYXRhICovCiB9IEhhc2hTY2FuT3BhcXVlRGF0YTsK IAogdHlwZWRlZiBIYXNoU2Nhbk9wYXF1ZURhdGEgKkhhc2hTY2FuT3BhcXVlOwpAQCAtMzY4LDEx ICszMDcsMTQgQEAgZXh0ZXJuIGJvb2wgaGFzaGluc2VydChSZWxhdGlvbiByZWwsIERhdHVtICp2 YWx1ZXMsIGJvb2wgKmlzbnVsbCwKIAkJCQkJICAgSW5kZXhVbmlxdWVDaGVjayBjaGVja1VuaXF1 ZSwKIAkJCQkJICAgYm9vbCBpbmRleFVuY2hhbmdlZCwKIAkJCQkJICAgc3RydWN0IEluZGV4SW5m byAqaW5kZXhJbmZvKTsKLWV4dGVybiBib29sIGhhc2hnZXR0dXBsZShJbmRleFNjYW5EZXNjIHNj YW4sIFNjYW5EaXJlY3Rpb24gZGlyKTsKK2V4dGVybiBCYXRjaEluZGV4U2NhbiBoYXNoZ2V0YmF0 Y2goSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJCQkgICBCYXRjaEluZGV4U2NhbiBwcmlvcmJh dGNoLAorCQkJCQkJCQkgICBTY2FuRGlyZWN0aW9uIGRpcik7CiBleHRlcm4gaW50NjQgaGFzaGdl dGJpdG1hcChJbmRleFNjYW5EZXNjIHNjYW4sIFRJREJpdG1hcCAqdGJtKTsKIGV4dGVybiBJbmRl eFNjYW5EZXNjIGhhc2hiZWdpbnNjYW4oUmVsYXRpb24gcmVsLCBpbnQgbmtleXMsIGludCBub3Jk ZXJieXMpOwogZXh0ZXJuIHZvaWQgaGFzaHJlc2NhbihJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5L ZXkgc2NhbmtleSwgaW50IG5zY2Fua2V5cywKIAkJCQkJICAgU2NhbktleSBvcmRlcmJ5cywgaW50 IG5vcmRlcmJ5cyk7CitleHRlcm4gdm9pZCBoYXNoZnJlZWJhdGNoKEluZGV4U2NhbkRlc2Mgc2Nh biwgQmF0Y2hJbmRleFNjYW4gYmF0Y2gpOwogZXh0ZXJuIHZvaWQgaGFzaGVuZHNjYW4oSW5kZXhT Y2FuRGVzYyBzY2FuKTsKIGV4dGVybiBJbmRleEJ1bGtEZWxldGVSZXN1bHQgKmhhc2hidWxrZGVs ZXRlKEluZGV4VmFjdXVtSW5mbyAqaW5mbywKIAkJCQkJCQkJCQkJIEluZGV4QnVsa0RlbGV0ZVJl c3VsdCAqc3RhdHMsCkBAIC00NDUsOCArMzg3LDkgQEAgZXh0ZXJuIHZvaWQgX2hhc2hfZmluaXNo X3NwbGl0KFJlbGF0aW9uIHJlbCwgQnVmZmVyIG1ldGFidWYsIEJ1ZmZlciBvYnVmLAogCQkJCQkJ CSAgIHVpbnQzMiBsb3dtYXNrKTsKIAogLyogaGFzaHNlYXJjaC5jICovCi1leHRlcm4gYm9vbCBf aGFzaF9uZXh0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpOwotZXh0ZXJu IGJvb2wgX2hhc2hfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcik7 CitleHRlcm4gQmF0Y2hJbmRleFNjYW4gX2hhc2hfbmV4dChJbmRleFNjYW5EZXNjIHNjYW4sIFNj YW5EaXJlY3Rpb24gZGlyLAorCQkJCQkJCQkgQmF0Y2hJbmRleFNjYW4gcHJpb3JiYXRjaCk7Citl eHRlcm4gQmF0Y2hJbmRleFNjYW4gX2hhc2hfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2Fu RGlyZWN0aW9uIGRpcik7CiAKIC8qIGhhc2hzb3J0LmMgKi8KIHR5cGVkZWYgc3RydWN0IEhTcG9v bCBIU3Bvb2w7CS8qIG9wYXF1ZSBzdHJ1Y3QgaW4gaGFzaHNvcnQuYyAqLwpAQCAtNDc2LDcgKzQx OSw3IEBAIGV4dGVybiBCbG9ja051bWJlciBfaGFzaF9nZXRfb2xkYmxvY2tfZnJvbV9uZXdidWNr ZXQoUmVsYXRpb24gcmVsLCBCdWNrZXQgbmV3X2J1CiBleHRlcm4gQmxvY2tOdW1iZXIgX2hhc2hf Z2V0X25ld2Jsb2NrX2Zyb21fb2xkYnVja2V0KFJlbGF0aW9uIHJlbCwgQnVja2V0IG9sZF9idWNr ZXQpOwogZXh0ZXJuIEJ1Y2tldCBfaGFzaF9nZXRfbmV3YnVja2V0X2Zyb21fb2xkYnVja2V0KFJl bGF0aW9uIHJlbCwgQnVja2V0IG9sZF9idWNrZXQsCiAJCQkJCQkJCQkJCQkgdWludDMyIGxvd21h c2ssIHVpbnQzMiBtYXhidWNrZXQpOwotZXh0ZXJuIHZvaWQgX2hhc2hfa2lsbF9pdGVtcyhJbmRl eFNjYW5EZXNjIHNjYW4pOworZXh0ZXJuIHZvaWQgX2hhc2hfa2lsbF9pdGVtcyhJbmRleFNjYW5E ZXNjIHNjYW4sIEJhdGNoSW5kZXhTY2FuIGJhdGNoKTsKIAogLyogaGFzaC5jICovCiBleHRlcm4g dm9pZCBoYXNoYnVja2V0Y2xlYW51cChSZWxhdGlvbiByZWwsIEJ1Y2tldCBjdXJfYnVja2V0LApk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5jIGIvc3JjL2JhY2tlbmQv YWNjZXNzL2hhc2gvaGFzaC5jCmluZGV4IDcyODlkZjU3NC4uM2YyYjc3OTk2IDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNz L2hhc2gvaGFzaC5jCkBAIC0xMDEsOSArMTAxLDkgQEAgaGFzaGhhbmRsZXIoUEdfRlVOQ1RJT05f QVJHUykKIAlhbXJvdXRpbmUtPmFtYWRqdXN0bWVtYmVycyA9IGhhc2hhZGp1c3RtZW1iZXJzOwog CWFtcm91dGluZS0+YW1iZWdpbnNjYW4gPSBoYXNoYmVnaW5zY2FuOwogCWFtcm91dGluZS0+YW1y ZXNjYW4gPSBoYXNocmVzY2FuOwotCWFtcm91dGluZS0+YW1nZXR0dXBsZSA9IGhhc2hnZXR0dXBs ZTsKLQlhbXJvdXRpbmUtPmFtZ2V0YmF0Y2ggPSBOVUxMOwotCWFtcm91dGluZS0+YW1mcmVlYmF0 Y2ggPSBOVUxMOworCWFtcm91dGluZS0+YW1nZXR0dXBsZSA9IE5VTEw7CisJYW1yb3V0aW5lLT5h bWdldGJhdGNoID0gaGFzaGdldGJhdGNoOworCWFtcm91dGluZS0+YW1mcmVlYmF0Y2ggPSBoYXNo ZnJlZWJhdGNoOwogCWFtcm91dGluZS0+YW1nZXRiaXRtYXAgPSBoYXNoZ2V0Yml0bWFwOwogCWFt cm91dGluZS0+YW1lbmRzY2FuID0gaGFzaGVuZHNjYW47CiAJYW1yb3V0aW5lLT5hbXBvc3Jlc2V0 ID0gTlVMTDsKQEAgLTI4NSw1MyArMjg1LDIyIEBAIGhhc2hpbnNlcnQoUmVsYXRpb24gcmVsLCBE YXR1bSAqdmFsdWVzLCBib29sICppc251bGwsCiAKIAogLyoKLSAqCWhhc2hnZXR0dXBsZSgpIC0t IEdldCB0aGUgbmV4dCB0dXBsZSBpbiB0aGUgc2Nhbi4KKyAqCWhhc2hnZXRiYXRjaCgpIC0tIEdl dCB0aGUgZmlyc3Qgb3IgbmV4dCBiYXRjaCBvZiB0dXBsZXMgaW4gdGhlIHNjYW4KICAqLwotYm9v bAotaGFzaGdldHR1cGxlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCitC YXRjaEluZGV4U2NhbgoraGFzaGdldGJhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgQmF0Y2hJbmRl eFNjYW4gcHJpb3JiYXRjaCwgU2NhbkRpcmVjdGlvbiBkaXIpCiB7Ci0JSGFzaFNjYW5PcGFxdWUg c28gPSAoSGFzaFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKLQlib29sCQlyZXM7Ci0KIAkvKiBI YXNoIGluZGV4ZXMgYXJlIGFsd2F5cyBsb3NzeSBzaW5jZSB3ZSBzdG9yZSBvbmx5IHRoZSBoYXNo IGNvZGUgKi8KIAlzY2FuLT54c19yZWNoZWNrID0gdHJ1ZTsKIAotCS8qCi0JICogSWYgd2UndmUg YWxyZWFkeSBpbml0aWFsaXplZCB0aGlzIHNjYW4sIHdlIGNhbiBqdXN0IGFkdmFuY2UgaXQgaW4g dGhlCi0JICogYXBwcm9wcmlhdGUgZGlyZWN0aW9uLiAgSWYgd2UgaGF2ZW4ndCBkb25lIHNvIHll dCwgd2UgY2FsbCBhIHJvdXRpbmUgdG8KLQkgKiBnZXQgdGhlIGZpcnN0IGl0ZW0gaW4gdGhlIHNj YW4uCi0JICovCi0JaWYgKCFIYXNoU2NhblBvc0lzVmFsaWQoc28tPmN1cnJQb3MpKQotCQlyZXMg PSBfaGFzaF9maXJzdChzY2FuLCBkaXIpOwotCWVsc2UKKwlpZiAocHJpb3JiYXRjaCA9PSBOVUxM KQogCXsKLQkJLyoKLQkJICogQ2hlY2sgdG8gc2VlIGlmIHdlIHNob3VsZCBraWxsIHRoZSBwcmV2 aW91c2x5LWZldGNoZWQgdHVwbGUuCi0JCSAqLwotCQlpZiAoc2Nhbi0+a2lsbF9wcmlvcl90dXBs ZSkKLQkJewotCQkJLyoKLQkJCSAqIFllcywgc28gcmVtZW1iZXIgaXQgZm9yIGxhdGVyLiAoV2Un bGwgZGVhbCB3aXRoIGFsbCBzdWNoIHR1cGxlcwotCQkJICogYXQgb25jZSByaWdodCBhZnRlciBs ZWF2aW5nIHRoZSBpbmRleCBwYWdlIG9yIGF0IGVuZCBvZiBzY2FuLikKLQkJCSAqIEluIGNhc2Ug aWYgY2FsbGVyIHJldmVyc2VzIHRoZSBpbmRleHNjYW4gZGlyZWN0aW9uIGl0IGlzIHF1aXRlCi0J CQkgKiBwb3NzaWJsZSB0aGF0IHRoZSBzYW1lIGl0ZW0gbWlnaHQgZ2V0IGVudGVyZWQgbXVsdGlw bGUgdGltZXMuCi0JCQkgKiBCdXQsIHdlIGRvbid0IGRldGVjdCB0aGF0OyBpbnN0ZWFkLCB3ZSBq dXN0IGZvcmdldCBhbnkgZXhjZXNzCi0JCQkgKiBlbnRyaWVzLgotCQkJICovCi0JCQlpZiAoc28t PmtpbGxlZEl0ZW1zID09IE5VTEwpCi0JCQkJc28tPmtpbGxlZEl0ZW1zID0gcGFsbG9jX2FycmF5 KGludCwgTWF4SW5kZXhUdXBsZXNQZXJQYWdlKTsKLQotCQkJaWYgKHNvLT5udW1LaWxsZWQgPCBN YXhJbmRleFR1cGxlc1BlclBhZ2UpCi0JCQkJc28tPmtpbGxlZEl0ZW1zW3NvLT5udW1LaWxsZWQr K10gPSBzby0+Y3VyclBvcy5pdGVtSW5kZXg7Ci0JCX0KLQotCQkvKgotCQkgKiBOb3cgY29udGlu dWUgdGhlIHNjYW4uCi0JCSAqLwotCQlyZXMgPSBfaGFzaF9uZXh0KHNjYW4sIGRpcik7CisJCS8q IEluaXRpYWxpemUgdGhlIHNjYW4sIGFuZCByZXR1cm4gZmlyc3QgYmF0Y2ggb2YgbWF0Y2hpbmcg aXRlbXMgKi8KKwkJcmV0dXJuIF9oYXNoX2ZpcnN0KHNjYW4sIGRpcik7CiAJfQogCi0JcmV0dXJu IHJlczsKKwkvKiBSZXR1cm4gYmF0Y2ggcG9zaXRpb25lZCBhZnRlciBjYWxsZXIncyBiYXRjaCAo aW4gZGlyZWN0aW9uICdkaXInKSAqLworCXJldHVybiBfaGFzaF9uZXh0KHNjYW4sIGRpciwgcHJp b3JiYXRjaCk7CiB9CiAKIApAQCAtMzQxLDI2ICszMTAsMjMgQEAgaGFzaGdldHR1cGxlKEluZGV4 U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiBpbnQ2NAogaGFzaGdldGJpdG1hcChJ bmRleFNjYW5EZXNjIHNjYW4sIFRJREJpdG1hcCAqdGJtKQogewotCUhhc2hTY2FuT3BhcXVlIHNv ID0gKEhhc2hTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7Ci0JYm9vbAkJcmVzOworCUJhdGNoSW5k ZXhTY2FuIGJhdGNoOwogCWludDY0CQludGlkcyA9IDA7Ci0JSGFzaFNjYW5Qb3NJdGVtICpjdXJy SXRlbTsKKwlpbnQJCQlpdGVtSW5kZXg7CiAKLQlyZXMgPSBfaGFzaF9maXJzdChzY2FuLCBGb3J3 YXJkU2NhbkRpcmVjdGlvbik7CisJYmF0Y2ggPSBfaGFzaF9maXJzdChzY2FuLCBGb3J3YXJkU2Nh bkRpcmVjdGlvbik7CiAKLQl3aGlsZSAocmVzKQorCXdoaWxlIChiYXRjaCAhPSBOVUxMKQogCXsK LQkJY3Vyckl0ZW0gPSAmc28tPmN1cnJQb3MuaXRlbXNbc28tPmN1cnJQb3MuaXRlbUluZGV4XTsK KwkJZm9yIChpdGVtSW5kZXggPSBiYXRjaC0+Zmlyc3RJdGVtOworCQkJIGl0ZW1JbmRleCA8PSBi YXRjaC0+bGFzdEl0ZW07CisJCQkgaXRlbUluZGV4KyspCisJCXsKKwkJCXRibV9hZGRfdHVwbGVz KHRibSwgJmJhdGNoLT5pdGVtc1tpdGVtSW5kZXhdLmhlYXBUaWQsIDEsIHRydWUpOworCQkJbnRp ZHMrKzsKKwkJfQogCi0JCS8qCi0JCSAqIF9oYXNoX2ZpcnN0IGFuZCBfaGFzaF9uZXh0IGhhbmRs ZSBlbGltaW5hdGUgZGVhZCBpbmRleCBlbnRyaWVzCi0JCSAqIHdoZW5ldmVyIHNjYW4tPmlnbm9y ZV9raWxsZWRfdHVwbGVzIGlzIHRydWUuICBUaGVyZWZvcmUsIHRoZXJlJ3MKLQkJICogbm90aGlu ZyB0byBkbyBoZXJlIGV4Y2VwdCBhZGQgdGhlIHJlc3VsdHMgdG8gdGhlIFRJREJpdG1hcC4KLQkJ ICovCi0JCXRibV9hZGRfdHVwbGVzKHRibSwgJihjdXJySXRlbS0+aGVhcFRpZCksIDEsIHRydWUp OwotCQludGlkcysrOwotCi0JCXJlcyA9IF9oYXNoX25leHQoc2NhbiwgRm9yd2FyZFNjYW5EaXJl Y3Rpb24pOworCQliYXRjaCA9IF9oYXNoX25leHQoc2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24s IGJhdGNoKTsKIAl9CiAKIAlyZXR1cm4gbnRpZHM7CkBAIC0zODIsMTYgKzM0OCwxMiBAQCBoYXNo YmVnaW5zY2FuKFJlbGF0aW9uIHJlbCwgaW50IG5rZXlzLCBpbnQgbm9yZGVyYnlzKQogCXNjYW4g PSBSZWxhdGlvbkdldEluZGV4U2NhbihyZWwsIG5rZXlzLCBub3JkZXJieXMpOwogCiAJc28gPSAo SGFzaFNjYW5PcGFxdWUpIHBhbGxvY19vYmplY3QoSGFzaFNjYW5PcGFxdWVEYXRhKTsKLQlIYXNo U2NhblBvc0ludmFsaWRhdGUoc28tPmN1cnJQb3MpOwogCXNvLT5oYXNoc29fYnVja2V0X2J1ZiA9 IEludmFsaWRCdWZmZXI7CiAJc28tPmhhc2hzb19zcGxpdF9idWNrZXRfYnVmID0gSW52YWxpZEJ1 ZmZlcjsKIAogCXNvLT5oYXNoc29fYnVjX3BvcHVsYXRlZCA9IGZhbHNlOwogCXNvLT5oYXNoc29f YnVjX3NwbGl0ID0gZmFsc2U7CiAKLQlzby0+a2lsbGVkSXRlbXMgPSBOVUxMOwotCXNvLT5udW1L aWxsZWQgPSAwOwotCiAJc2Nhbi0+b3BhcXVlID0gc287CiAKIAlyZXR1cm4gc2NhbjsKQEAgLTQw NywxOCArMzY5LDggQEAgaGFzaHJlc2NhbihJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5LZXkgc2Nh bmtleSwgaW50IG5zY2Fua2V5cywKIAlIYXNoU2Nhbk9wYXF1ZSBzbyA9IChIYXNoU2Nhbk9wYXF1 ZSkgc2Nhbi0+b3BhcXVlOwogCVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247CiAK LQlpZiAoSGFzaFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSkKLQl7Ci0JCS8qIEJlZm9yZSBs ZWF2aW5nIGN1cnJlbnQgcGFnZSwgZGVhbCB3aXRoIGFueSBraWxsZWQgaXRlbXMgKi8KLQkJaWYg KHNvLT5udW1LaWxsZWQgPiAwKQotCQkJX2hhc2hfa2lsbF9pdGVtcyhzY2FuKTsKLQl9Ci0KIAlf aGFzaF9kcm9wc2NhbmJ1ZihyZWwsIHNvKTsKIAotCS8qIHNldCBwb3NpdGlvbiBpbnZhbGlkICh0 aGlzIHdpbGwgY2F1c2UgX2hhc2hfZmlyc3QgY2FsbCkgKi8KLQlIYXNoU2NhblBvc0ludmFsaWRh dGUoc28tPmN1cnJQb3MpOwotCiAJLyogVXBkYXRlIHNjYW4ga2V5LCBpZiBhIG5ldyBvbmUgaXMg Z2l2ZW4gKi8KIAlpZiAoc2NhbmtleSAmJiBzY2FuLT5udW1iZXJPZktleXMgPiAwKQogCQltZW1j cHkoc2Nhbi0+a2V5RGF0YSwgc2NhbmtleSwgc2Nhbi0+bnVtYmVyT2ZLZXlzICogc2l6ZW9mKFNj YW5LZXlEYXRhKSk7CkBAIC00MjcsNiArMzc5LDI1IEBAIGhhc2hyZXNjYW4oSW5kZXhTY2FuRGVz YyBzY2FuLCBTY2FuS2V5IHNjYW5rZXksIGludCBuc2NhbmtleXMsCiAJc28tPmhhc2hzb19idWNf c3BsaXQgPSBmYWxzZTsKIH0KIAorLyoKKyAqCWhhc2hmcmVlYmF0Y2goKSAtLSBGcmVlIGJhdGNo IHJlc291cmNlcywgaW5jbHVkaW5nIGl0cyBidWZmZXIgcGluCisgKi8KK3ZvaWQKK2hhc2hmcmVl YmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBCYXRjaEluZGV4U2NhbiBiYXRjaCkKK3sKKwlpZiAo YmF0Y2gtPm51bUtpbGxlZCA+IDApCisJCV9oYXNoX2tpbGxfaXRlbXMoc2NhbiwgYmF0Y2gpOwor CisJaWYgKCFzY2FuLT5iYXRjaHF1ZXVlLT5kcm9wUGluKQorCXsKKwkJLyogaW5kZXhhbV91dGls X2JhdGNoX3VubG9jayBkaWRuJ3QgdW5waW4gcGFnZSBlYXJsaWVyLCBkbyBpdCBub3cgKi8KKwkJ UmVsZWFzZUJ1ZmZlcihiYXRjaC0+YnVmKTsKKwkJYmF0Y2gtPmJ1ZiA9IEludmFsaWRCdWZmZXI7 CisJfQorCisJaW5kZXhhbV91dGlsX2JhdGNoX3JlbGVhc2Uoc2NhbiwgYmF0Y2gpOworfQorCiAv KgogICoJaGFzaGVuZHNjYW4oKSAtLSBjbG9zZSBkb3duIGEgc2NhbgogICovCkBAIC00MzYsMTcg KzQwNyw4IEBAIGhhc2hlbmRzY2FuKEluZGV4U2NhbkRlc2Mgc2NhbikKIAlIYXNoU2Nhbk9wYXF1 ZSBzbyA9IChIYXNoU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwogCVJlbGF0aW9uCXJlbCA9IHNj YW4tPmluZGV4UmVsYXRpb247CiAKLQlpZiAoSGFzaFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9z KSkKLQl7Ci0JCS8qIEJlZm9yZSBsZWF2aW5nIGN1cnJlbnQgcGFnZSwgZGVhbCB3aXRoIGFueSBr aWxsZWQgaXRlbXMgKi8KLQkJaWYgKHNvLT5udW1LaWxsZWQgPiAwKQotCQkJX2hhc2hfa2lsbF9p dGVtcyhzY2FuKTsKLQl9Ci0KIAlfaGFzaF9kcm9wc2NhbmJ1ZihyZWwsIHNvKTsKIAotCWlmIChz by0+a2lsbGVkSXRlbXMgIT0gTlVMTCkKLQkJcGZyZWUoc28tPmtpbGxlZEl0ZW1zKTsKIAlwZnJl ZShzbyk7CiAJc2Nhbi0+b3BhcXVlID0gTlVMTDsKIH0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2FjY2Vzcy9oYXNoL2hhc2hwYWdlLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNocGFn ZS5jCmluZGV4IGI4ZTViZDAwNS4uYjBiMGM1MzBjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9h Y2Nlc3MvaGFzaC9oYXNocGFnZS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hw YWdlLmMKQEAgLTI4MCwzMSArMjgwLDI0IEBAIF9oYXNoX2Ryb3BidWYoUmVsYXRpb24gcmVsLCBC dWZmZXIgYnVmKQogfQogCiAvKgotICoJX2hhc2hfZHJvcHNjYW5idWYoKSAtLSByZWxlYXNlIGJ1 ZmZlcnMgdXNlZCBpbiBzY2FuLgorICoJX2hhc2hfZHJvcHNjYW5idWYoKSAtLSByZWxlYXNlIGJ1 ZmZlcnMgb3duZWQgYnkgc2Nhbi4KICAqCi0gKiBUaGlzIHJvdXRpbmUgdW5waW5zIHRoZSBidWZm ZXJzIHVzZWQgZHVyaW5nIHNjYW4gb24gd2hpY2ggd2UKLSAqIGhvbGQgbm8gbG9jay4KKyAqIFRo aXMgcm91dGluZSB1bnBpbnMgdGhlIGJ1ZmZlcnMgZm9yIHRoZSBwcmltYXJ5IGJ1Y2tldCBwYWdl IGFuZCBmb3IgdGhlCisgKiBidWNrZXQgcGFnZSBvZiBhIGJ1Y2tldCBiZWluZyBzcGxpdCBhcyBu ZWVkZWQuCiAgKi8KIHZvaWQKIF9oYXNoX2Ryb3BzY2FuYnVmKFJlbGF0aW9uIHJlbCwgSGFzaFNj YW5PcGFxdWUgc28pCiB7CiAJLyogcmVsZWFzZSBwaW4gd2UgaG9sZCBvbiBwcmltYXJ5IGJ1Y2tl dCBwYWdlICovCi0JaWYgKEJ1ZmZlcklzVmFsaWQoc28tPmhhc2hzb19idWNrZXRfYnVmKSAmJgot CQlzby0+aGFzaHNvX2J1Y2tldF9idWYgIT0gc28tPmN1cnJQb3MuYnVmKQorCWlmIChCdWZmZXJJ c1ZhbGlkKHNvLT5oYXNoc29fYnVja2V0X2J1ZikpCiAJCV9oYXNoX2Ryb3BidWYocmVsLCBzby0+ aGFzaHNvX2J1Y2tldF9idWYpOwogCXNvLT5oYXNoc29fYnVja2V0X2J1ZiA9IEludmFsaWRCdWZm ZXI7CiAKLQkvKiByZWxlYXNlIHBpbiB3ZSBob2xkIG9uIHByaW1hcnkgYnVja2V0IHBhZ2UgIG9m IGJ1Y2tldCBiZWluZyBzcGxpdCAqLwotCWlmIChCdWZmZXJJc1ZhbGlkKHNvLT5oYXNoc29fc3Bs aXRfYnVja2V0X2J1ZikgJiYKLQkJc28tPmhhc2hzb19zcGxpdF9idWNrZXRfYnVmICE9IHNvLT5j dXJyUG9zLmJ1ZikKKwkvKiByZWxlYXNlIHBpbiBoZWxkIG9uIHByaW1hcnkgYnVja2V0IHBhZ2Ug b2YgYnVja2V0IGJlaW5nIHNwbGl0ICovCisJaWYgKEJ1ZmZlcklzVmFsaWQoc28tPmhhc2hzb19z cGxpdF9idWNrZXRfYnVmKSkKIAkJX2hhc2hfZHJvcGJ1ZihyZWwsIHNvLT5oYXNoc29fc3BsaXRf YnVja2V0X2J1Zik7CiAJc28tPmhhc2hzb19zcGxpdF9idWNrZXRfYnVmID0gSW52YWxpZEJ1ZmZl cjsKIAotCS8qIHJlbGVhc2UgYW55IHBpbiB3ZSBzdGlsbCBob2xkICovCi0JaWYgKEJ1ZmZlcklz VmFsaWQoc28tPmN1cnJQb3MuYnVmKSkKLQkJX2hhc2hfZHJvcGJ1ZihyZWwsIHNvLT5jdXJyUG9z LmJ1Zik7Ci0Jc28tPmN1cnJQb3MuYnVmID0gSW52YWxpZEJ1ZmZlcjsKLQogCS8qIHJlc2V0IHNw bGl0IHNjYW4gKi8KIAlzby0+aGFzaHNvX2J1Y19wb3B1bGF0ZWQgPSBmYWxzZTsKIAlzby0+aGFz aHNvX2J1Y19zcGxpdCA9IGZhbHNlOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hh c2gvaGFzaHNlYXJjaC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHNlYXJjaC5jCmlu ZGV4IDkyYzE1YTY1Yi4uN2I5YjMxZWVlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3Mv aGFzaC9oYXNoc2VhcmNoLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHNlYXJj aC5jCkBAIC0yMiwxMDQgKzIyLDc0IEBACiAjaW5jbHVkZSAidXRpbHMvcmVsLmgiCiAKIHN0YXRp YyBib29sIF9oYXNoX3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgQnVmZmVyICpidWZQLAot CQkJCQkJICAgU2NhbkRpcmVjdGlvbiBkaXIpOworCQkJCQkJICAgU2NhbkRpcmVjdGlvbiBkaXIs IEJhdGNoSW5kZXhTY2FuIGJhdGNoKTsKIHN0YXRpYyBpbnQJX2hhc2hfbG9hZF9xdWFsaWZpZWRf aXRlbXMoSW5kZXhTY2FuRGVzYyBzY2FuLCBQYWdlIHBhZ2UsCi0JCQkJCQkJCQkgICBPZmZzZXRO dW1iZXIgb2ZmbnVtLCBTY2FuRGlyZWN0aW9uIGRpcik7Ci1zdGF0aWMgaW5saW5lIHZvaWQgX2hh c2hfc2F2ZWl0ZW0oSGFzaFNjYW5PcGFxdWUgc28sIGludCBpdGVtSW5kZXgsCisJCQkJCQkJCQkg ICBPZmZzZXROdW1iZXIgb2ZmbnVtLCBTY2FuRGlyZWN0aW9uIGRpciwKKwkJCQkJCQkJCSAgIEJh dGNoSW5kZXhTY2FuIGJhdGNoKTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBfaGFzaF9zYXZlaXRlbShC YXRjaEluZGV4U2NhbiBiYXRjaCwgaW50IGl0ZW1JbmRleCwKIAkJCQkJCQkJICBPZmZzZXROdW1i ZXIgb2ZmbnVtLCBJbmRleFR1cGxlIGl0dXApOwogc3RhdGljIHZvaWQgX2hhc2hfcmVhZG5leHQo SW5kZXhTY2FuRGVzYyBzY2FuLCBCdWZmZXIgKmJ1ZnAsCiAJCQkJCQkgICBQYWdlICpwYWdlcCwg SGFzaFBhZ2VPcGFxdWUgKm9wYXF1ZXApOwogCiAvKgotICoJX2hhc2hfbmV4dCgpIC0tIEdldCB0 aGUgbmV4dCBpdGVtIGluIGEgc2Nhbi4KKyAqCV9oYXNoX25leHQoKSAtLSBHZXQgdGhlIG5leHQg YmF0Y2ggb2YgaXRlbXMgaW4gYSBzY2FuLgogICoKLSAqCQlPbiBlbnRyeSwgc28tPmN1cnJQb3Mg ZGVzY3JpYmVzIHRoZSBjdXJyZW50IHBhZ2UsIHdoaWNoIG1heQotICoJCWJlIHBpbm5lZCBidXQg bm90IGxvY2tlZCwgYW5kIHNvLT5jdXJyUG9zLml0ZW1JbmRleCBpZGVudGlmaWVzCi0gKgkJd2hp Y2ggaXRlbSB3YXMgcHJldmlvdXNseSByZXR1cm5lZC4KKyAqCQlPbiBlbnRyeSwgcHJpb3JiYXRj aCBkZXNjcmliZXMgdGhlIGN1cnJlbnQgcGFnZSBiYXRjaCB3aXRoIGl0ZW1zCisgKgkJYWxyZWFk eSByZXR1cm5lZC4KICAqCi0gKgkJT24gc3VjY2Vzc2Z1bCBleGl0LCBzY2FuLT54c19oZWFwdGlk IGlzIHNldCB0byB0aGUgVElEIG9mIHRoZSBuZXh0Ci0gKgkJaGVhcCB0dXBsZS4gIHNvLT5jdXJy UG9zIGlzIHVwZGF0ZWQgYXMgbmVlZGVkLgorICoJCU9uIHN1Y2Nlc3NmdWwgZXhpdCwgcmV0dXJu cyBhIGJhdGNoIGNvbnRhaW5pbmcgbWF0Y2hpbmcgaXRlbXMgZnJvbQorICoJCW5leHQgcGFnZS4g IE90aGVyd2lzZSByZXR1cm5zIE5VTEwsIGluZGljYXRpbmcgdGhhdCB0aGVyZSBhcmUgbm8KKyAq CQlmdXJ0aGVyIG1hdGNoZXMuICBObyBsb2NrcyBhcmUgZXZlciBoZWxkIHdoZW4gd2UgcmV0dXJu LgogICoKLSAqCQlPbiBmYWlsdXJlIGV4aXQgKG5vIG1vcmUgdHVwbGVzKSwgd2UgcmV0dXJuIGZh bHNlIHdpdGggcGluCi0gKgkJaGVsZCBvbiBidWNrZXQgcGFnZSBidXQgbm8gcGlucyBvciBsb2Nr cyBoZWxkIG9uIG92ZXJmbG93Ci0gKgkJcGFnZS4KKyAqCQlSZXRhaW5zIHBpbnMgYWNjb3JkaW5n IHRvIHRoZSBzYW1lIHJ1bGVzIGFzIF9oYXNoX2ZpcnN0LgogICovCi1ib29sCi1faGFzaF9uZXh0 KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCitCYXRjaEluZGV4U2Nhbgor X2hhc2hfbmV4dChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBCYXRjaElu ZGV4U2NhbiBwcmlvcmJhdGNoKQogewogCVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRp b247CiAJSGFzaFNjYW5PcGFxdWUgc28gPSAoSGFzaFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsK LQlIYXNoU2NhblBvc0l0ZW0gKmN1cnJJdGVtOwogCUJsb2NrTnVtYmVyIGJsa25vOwogCUJ1ZmZl cgkJYnVmOwotCWJvb2wJCWVuZF9vZl9zY2FuID0gZmFsc2U7CisJQmF0Y2hJbmRleFNjYW4gYmF0 Y2g7CiAKIAkvKgotCSAqIEFkdmFuY2UgdG8gdGhlIG5leHQgdHVwbGUgb24gdGhlIGN1cnJlbnQg cGFnZTsgb3IgaWYgZG9uZSwgdHJ5IHRvIHJlYWQKLQkgKiBkYXRhIGZyb20gdGhlIG5leHQgb3Ig cHJldmlvdXMgcGFnZSBiYXNlZCBvbiB0aGUgc2NhbiBkaXJlY3Rpb24uIEJlZm9yZQotCSAqIG1v dmluZyB0byB0aGUgbmV4dCBvciBwcmV2aW91cyBwYWdlIG1ha2Ugc3VyZSB0aGF0IHdlIGRlYWwg d2l0aCBhbGwgdGhlCi0JICoga2lsbGVkIGl0ZW1zLgorCSAqIERldGVybWluZSB3aGljaCBwYWdl IHRvIHJlYWQgbmV4dCBiYXNlZCBvbiBzY2FuIGRpcmVjdGlvbiBhbmQgZGV0YWlscworCSAqIHRh a2VuIGZyb20gdGhlIHByaW9yIGJhdGNoCiAJICovCiAJaWYgKFNjYW5EaXJlY3Rpb25Jc0Zvcndh cmQoZGlyKSkKIAl7Ci0JCWlmICgrK3NvLT5jdXJyUG9zLml0ZW1JbmRleCA+IHNvLT5jdXJyUG9z Lmxhc3RJdGVtKQorCQlibGtubyA9IHByaW9yYmF0Y2gtPm5leHRQYWdlOworCQlpZiAoIUJsb2Nr TnVtYmVySXNWYWxpZChibGtubykgfHwgIXByaW9yYmF0Y2gtPm1vcmVSaWdodCkKIAkJewotCQkJ aWYgKHNvLT5udW1LaWxsZWQgPiAwKQotCQkJCV9oYXNoX2tpbGxfaXRlbXMoc2Nhbik7Ci0KLQkJ CWJsa25vID0gc28tPmN1cnJQb3MubmV4dFBhZ2U7Ci0JCQlpZiAoQmxvY2tOdW1iZXJJc1ZhbGlk KGJsa25vKSkKLQkJCXsKLQkJCQlidWYgPSBfaGFzaF9nZXRidWYocmVsLCBibGtubywgSEFTSF9S RUFELCBMSF9PVkVSRkxPV19QQUdFKTsKLQkJCQlpZiAoIV9oYXNoX3JlYWRwYWdlKHNjYW4sICZi dWYsIGRpcikpCi0JCQkJCWVuZF9vZl9zY2FuID0gdHJ1ZTsKLQkJCX0KLQkJCWVsc2UKLQkJCQll bmRfb2Zfc2NhbiA9IHRydWU7CisJCQlfaGFzaF9kcm9wc2NhbmJ1ZihyZWwsIHNvKTsKKwkJCXJl dHVybiBOVUxMOwogCQl9CiAJfQogCWVsc2UKIAl7Ci0JCWlmICgtLXNvLT5jdXJyUG9zLml0ZW1J bmRleCA8IHNvLT5jdXJyUG9zLmZpcnN0SXRlbSkKKwkJYmxrbm8gPSBwcmlvcmJhdGNoLT5wcmV2 UGFnZTsKKwkJaWYgKCFCbG9ja051bWJlcklzVmFsaWQoYmxrbm8pIHx8ICFwcmlvcmJhdGNoLT5t b3JlTGVmdCkKIAkJewotCQkJaWYgKHNvLT5udW1LaWxsZWQgPiAwKQotCQkJCV9oYXNoX2tpbGxf aXRlbXMoc2Nhbik7Ci0KLQkJCWJsa25vID0gc28tPmN1cnJQb3MucHJldlBhZ2U7Ci0JCQlpZiAo QmxvY2tOdW1iZXJJc1ZhbGlkKGJsa25vKSkKLQkJCXsKLQkJCQlidWYgPSBfaGFzaF9nZXRidWYo cmVsLCBibGtubywgSEFTSF9SRUFELAotCQkJCQkJCQkgICBMSF9CVUNLRVRfUEFHRSB8IExIX09W RVJGTE9XX1BBR0UpOwotCi0JCQkJLyoKLQkJCQkgKiBXZSBhbHdheXMgbWFpbnRhaW4gdGhlIHBp biBvbiBidWNrZXQgcGFnZSBmb3Igd2hvbGUgc2NhbgotCQkJCSAqIG9wZXJhdGlvbiwgc28gcmVs ZWFzaW5nIHRoZSBhZGRpdGlvbmFsIHBpbiB3ZSBoYXZlIGFjcXVpcmVkCi0JCQkJICogaGVyZS4K LQkJCQkgKi8KLQkJCQlpZiAoYnVmID09IHNvLT5oYXNoc29fYnVja2V0X2J1ZiB8fAotCQkJCQli dWYgPT0gc28tPmhhc2hzb19zcGxpdF9idWNrZXRfYnVmKQotCQkJCQlfaGFzaF9kcm9wYnVmKHJl bCwgYnVmKTsKLQotCQkJCWlmICghX2hhc2hfcmVhZHBhZ2Uoc2NhbiwgJmJ1ZiwgZGlyKSkKLQkJ CQkJZW5kX29mX3NjYW4gPSB0cnVlOwotCQkJfQotCQkJZWxzZQotCQkJCWVuZF9vZl9zY2FuID0g dHJ1ZTsKKwkJCV9oYXNoX2Ryb3BzY2FuYnVmKHJlbCwgc28pOworCQkJcmV0dXJuIE5VTEw7CiAJ CX0KIAl9CiAKLQlpZiAoZW5kX29mX3NjYW4pCisJLyogQWxsb2NhdGUgc3BhY2UgZm9yIG5leHQg YmF0Y2ggKi8KKwliYXRjaCA9IGluZGV4YW1fdXRpbF9iYXRjaF9hbGxvYyhzY2FuLCBNYXhJbmRl eFR1cGxlc1BlclBhZ2UsIGZhbHNlKTsKKworCS8qIEdldCB0aGUgYnVmZmVyIGZvciBuZXh0IGJh dGNoICovCisJYnVmID0gX2hhc2hfZ2V0YnVmKHJlbCwgYmxrbm8sIEhBU0hfUkVBRCwgTEhfT1ZF UkZMT1dfUEFHRSk7CisKKwkvKiBSZWFkIHRoZSBuZXh0IHBhZ2UgYW5kIGxvYWQgaXRlbXMgaW50 byBhbGxvY2F0ZWQgYmF0Y2ggKi8KKwlpZiAoIV9oYXNoX3JlYWRwYWdlKHNjYW4sICZidWYsIGRp ciwgYmF0Y2gpKQogCXsKLQkJX2hhc2hfZHJvcHNjYW5idWYocmVsLCBzbyk7Ci0JCUhhc2hTY2Fu UG9zSW52YWxpZGF0ZShzby0+Y3VyclBvcyk7Ci0JCXJldHVybiBmYWxzZTsKKwkJaW5kZXhhbV91 dGlsX2JhdGNoX3JlbGVhc2Uoc2NhbiwgYmF0Y2gpOworCQlyZXR1cm4gTlVMTDsKIAl9CiAKLQkv KiBPSywgaXRlbUluZGV4IHNheXMgd2hhdCB0byByZXR1cm4gKi8KLQljdXJySXRlbSA9ICZzby0+ Y3VyclBvcy5pdGVtc1tzby0+Y3VyclBvcy5pdGVtSW5kZXhdOwotCXNjYW4tPnhzX2hlYXB0aWQg PSBjdXJySXRlbS0+aGVhcFRpZDsKLQotCXJldHVybiB0cnVlOworCS8qIFJldHVybiB0aGUgYmF0 Y2ggY29udGFpbmluZyBtYXRjaGVkIGl0ZW1zIGZyb20gbmV4dCBwYWdlICovCisJcmV0dXJuIGJh dGNoOwogfQogCiAvKgpAQCAtMjY5LDIyICsyMzksMjEgQEAgX2hhc2hfcmVhZHByZXYoSW5kZXhT Y2FuRGVzYyBzY2FuLAogfQogCiAvKgotICoJX2hhc2hfZmlyc3QoKSAtLSBGaW5kIHRoZSBmaXJz dCBpdGVtIGluIGEgc2Nhbi4KKyAqCV9oYXNoX2ZpcnN0KCkgLS0gRmluZCB0aGUgZmlyc3QgYmF0 Y2ggb2YgaXRlbXMgaW4gYSBzY2FuLgogICoKLSAqCQlXZSBmaW5kIHRoZSBmaXJzdCBpdGVtIChv ciwgaWYgYmFja3dhcmQgc2NhbiwgdGhlIGxhc3QgaXRlbSkgaW4gdGhlCi0gKgkJaW5kZXggdGhh dCBzYXRpc2ZpZXMgdGhlIHF1YWxpZmljYXRpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBzY2FuCi0g KgkJZGVzY3JpcHRvci4KKyAqCQlXZSBmaW5kIHRoZSBmaXJzdCBiYXRjaCBvZiBpdGVtcyAob3Is IGlmIGJhY2t3YXJkIHNjYW4sIHRoZSBsYXN0CisgKgkJYmF0Y2gpIGluIHRoZSBpbmRleCB0aGF0 IHNhdGlzZmllcyB0aGUgcXVhbGlmaWNhdGlvbiBhc3NvY2lhdGVkIHdpdGgKKyAqCQl0aGUgc2Nh biBkZXNjcmlwdG9yLgogICoKLSAqCQlPbiBzdWNjZXNzZnVsIGV4aXQsIGlmIHRoZSBwYWdlIGNv bnRhaW5pbmcgY3VycmVudCBpbmRleCB0dXBsZSBpcyBhbgotICoJCW92ZXJmbG93IHBhZ2UsIGJv dGggcGluIGFuZCBsb2NrIGFyZSByZWxlYXNlZCB3aGVyZWFzIGlmIGl0IGlzIGEgYnVja2V0Ci0g KgkJcGFnZSB0aGVuIGl0IGlzIHBpbm5lZCBidXQgbm90IGxvY2tlZCBhbmQgZGF0YSBhYm91dCB0 aGUgbWF0Y2hpbmcKLSAqCQl0dXBsZShzKSBvbiB0aGUgcGFnZSBoYXMgYmVlbiBsb2FkZWQgaW50 byBzby0+Y3VyclBvcywKLSAqCQlzY2FuLT54c19oZWFwdGlkIGlzIHNldCB0byB0aGUgaGVhcCBU SUQgb2YgdGhlIGN1cnJlbnQgdHVwbGUuCisgKgkJT24gc3VjY2Vzc2Z1bCBleGl0LCByZXR1cm5z IGEgYmF0Y2ggY29udGFpbmluZyBtYXRjaGluZyBpdGVtcy4KKyAqCQlPdGhlcndpc2UgcmV0dXJu cyBOVUxMLCBpbmRpY2F0aW5nIHRoYXQgdGhlcmUgYXJlIG5vIGZ1cnRoZXIgbWF0Y2hlcy4KKyAq CQlObyBsb2NrcyBhcmUgZXZlciBoZWxkIHdoZW4gd2UgcmV0dXJuLgogICoKLSAqCQlPbiBmYWls dXJlIGV4aXQgKG5vIG1vcmUgdHVwbGVzKSwgd2UgcmV0dXJuIGZhbHNlLCB3aXRoIHBpbiBoZWxk IG9uCi0gKgkJYnVja2V0IHBhZ2UgYnV0IG5vIHBpbnMgb3IgbG9ja3MgaGVsZCBvbiBvdmVyZmxv dyBwYWdlLgorICoJCVdlIGFsd2F5cyByZXRhaW4gb3VyIG93biBwaW4gb24gdGhlIGJ1Y2tldCBw YWdlLiAgV2hlbiB3ZSByZXR1cm4gYQorICoJCWJhdGNoIHdpdGggYSBidWNrZXQgcGFnZSwgaXQg d2lsbCByZXRhaW4gaXRzIG93biByZWZlcmVuY2UgcGluIGlmZgorICoJCWluZGV4YW1fdXRpbF9i YXRjaF9yZWxlYXNlIGRldGVybWluZWQgdGhhdCB0YWJsZSBBTSByZXF1aXJlcyBvbmUuCiAgKi8K LWJvb2wKK0JhdGNoSW5kZXhTY2FuCiBfaGFzaF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNj YW5EaXJlY3Rpb24gZGlyKQogewogCVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247 CkBAIC0yOTUsNyArMjY0LDcgQEAgX2hhc2hfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2Fu RGlyZWN0aW9uIGRpcikKIAlCdWZmZXIJCWJ1ZjsKIAlQYWdlCQlwYWdlOwogCUhhc2hQYWdlT3Bh cXVlIG9wYXF1ZTsKLQlIYXNoU2NhblBvc0l0ZW0gKmN1cnJJdGVtOworCUJhdGNoSW5kZXhTY2Fu IGJhdGNoOwogCiAJcGdzdGF0X2NvdW50X2luZGV4X3NjYW4ocmVsKTsKIAlpZiAoc2Nhbi0+aW5z dHJ1bWVudCkKQEAgLTMyNSw3ICsyOTQsNyBAQCBfaGFzaF9maXJzdChJbmRleFNjYW5EZXNjIHNj YW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogCSAqIGl0ZW1zIGluIHRoZSBpbmRleC4KIAkgKi8KIAlp ZiAoY3VyLT5za19mbGFncyAmIFNLX0lTTlVMTCkKLQkJcmV0dXJuIGZhbHNlOworCQlyZXR1cm4g TlVMTDsKIAogCS8qCiAJICogT2theSB0byBjb21wdXRlIHRoZSBoYXNoIGtleS4gIFdlIHdhbnQg dG8gZG8gdGhpcyBiZWZvcmUgYWNxdWlyaW5nIGFueQpAQCAtNDE4LDM0ICszODcsMzMgQEAgX2hh c2hfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIAkJCV9oYXNo X3JlYWRuZXh0KHNjYW4sICZidWYsICZwYWdlLCAmb3BhcXVlKTsKIAl9CiAKLQkvKiByZW1lbWJl ciB3aGljaCBidWZmZXIgd2UgaGF2ZSBwaW5uZWQsIGlmIGFueSAqLwotCUFzc2VydChCdWZmZXJJ c0ludmFsaWQoc28tPmN1cnJQb3MuYnVmKSk7Ci0Jc28tPmN1cnJQb3MuYnVmID0gYnVmOworCS8q IEFsbG9jYXRlIHNwYWNlIGZvciBmaXJzdCBiYXRjaCAqLworCWJhdGNoID0gaW5kZXhhbV91dGls X2JhdGNoX2FsbG9jKHNjYW4sIE1heEluZGV4VHVwbGVzUGVyUGFnZSwgZmFsc2UpOwogCi0JLyog Tm93IGZpbmQgYWxsIHRoZSB0dXBsZXMgc2F0aXNmeWluZyB0aGUgcXVhbGlmaWNhdGlvbiBmcm9t IGEgcGFnZSAqLwotCWlmICghX2hhc2hfcmVhZHBhZ2Uoc2NhbiwgJmJ1ZiwgZGlyKSkKLQkJcmV0 dXJuIGZhbHNlOworCS8qIFJlYWQgdGhlIGZpcnN0IHBhZ2UgYW5kIGxvYWQgaXRlbXMgaW50byBh bGxvY2F0ZWQgYmF0Y2ggKi8KKwlpZiAoIV9oYXNoX3JlYWRwYWdlKHNjYW4sICZidWYsIGRpciwg YmF0Y2gpKQorCXsKKwkJaW5kZXhhbV91dGlsX2JhdGNoX3JlbGVhc2Uoc2NhbiwgYmF0Y2gpOwor CQlyZXR1cm4gTlVMTDsKKwl9CiAKLQkvKiBPSywgaXRlbUluZGV4IHNheXMgd2hhdCB0byByZXR1 cm4gKi8KLQljdXJySXRlbSA9ICZzby0+Y3VyclBvcy5pdGVtc1tzby0+Y3VyclBvcy5pdGVtSW5k ZXhdOwotCXNjYW4tPnhzX2hlYXB0aWQgPSBjdXJySXRlbS0+aGVhcFRpZDsKLQotCS8qIGlmIHdl J3JlIGhlcmUsIF9oYXNoX3JlYWRwYWdlIGZvdW5kIGEgdmFsaWQgdHVwbGVzICovCi0JcmV0dXJu IHRydWU7CisJLyogUmV0dXJuIHRoZSBiYXRjaCBjb250YWluaW5nIG1hdGNoZWQgaXRlbXMgKi8K KwlyZXR1cm4gYmF0Y2g7CiB9CiAKIC8qCi0gKglfaGFzaF9yZWFkcGFnZSgpIC0tIExvYWQgZGF0 YSBmcm9tIGN1cnJlbnQgaW5kZXggcGFnZSBpbnRvIHNvLT5jdXJyUG9zCisgKglfaGFzaF9yZWFk cGFnZSgpIC0tIExvYWQgZGF0YSBmcm9tIGN1cnJlbnQgaW5kZXggcGFnZSBpbnRvIGJhdGNoCiAg KgogICoJV2Ugc2NhbiBhbGwgdGhlIGl0ZW1zIGluIHRoZSBjdXJyZW50IGluZGV4IHBhZ2UgYW5k IHNhdmUgdGhlbSBpbnRvCi0gKglzby0+Y3VyclBvcyBpZiBpdCBzYXRpc2ZpZXMgdGhlIHF1YWxp ZmljYXRpb24uIElmIG5vIG1hdGNoaW5nIGl0ZW1zCisgKgl0aGUgYmF0Y2ggaWYgdGhleSBzYXRp c2Z5IHRoZSBxdWFsaWZpY2F0aW9uLiBJZiBubyBtYXRjaGluZyBpdGVtcwogICoJYXJlIGZvdW5k IGluIHRoZSBjdXJyZW50IHBhZ2UsIHdlIG1vdmUgdG8gdGhlIG5leHQgb3IgcHJldmlvdXMgcGFn ZQogICoJaW4gYSBidWNrZXQgY2hhaW4gYXMgaW5kaWNhdGVkIGJ5IHRoZSBkaXJlY3Rpb24uCiAg KgogICoJUmV0dXJuIHRydWUgaWYgYW55IG1hdGNoaW5nIGl0ZW1zIGFyZSBmb3VuZCBlbHNlIHJl dHVybiBmYWxzZS4KICAqLwogc3RhdGljIGJvb2wKLV9oYXNoX3JlYWRwYWdlKEluZGV4U2NhbkRl c2Mgc2NhbiwgQnVmZmVyICpidWZQLCBTY2FuRGlyZWN0aW9uIGRpcikKK19oYXNoX3JlYWRwYWdl KEluZGV4U2NhbkRlc2Mgc2NhbiwgQnVmZmVyICpidWZQLCBTY2FuRGlyZWN0aW9uIGRpciwKKwkJ CSAgIEJhdGNoSW5kZXhTY2FuIGJhdGNoKQogewogCVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4 UmVsYXRpb247CiAJSGFzaFNjYW5PcGFxdWUgc28gPSAoSGFzaFNjYW5PcGFxdWUpIHNjYW4tPm9w YXF1ZTsKQEAgLTQ2MSw4ICs0MjksOCBAQCBfaGFzaF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNj YW4sIEJ1ZmZlciAqYnVmUCwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJcGFnZSA9IEJ1ZmZlckdldFBh Z2UoYnVmKTsKIAlvcGFxdWUgPSBIYXNoUGFnZUdldE9wYXF1ZShwYWdlKTsKIAotCXNvLT5jdXJy UG9zLmJ1ZiA9IGJ1ZjsKLQlzby0+Y3VyclBvcy5jdXJyUGFnZSA9IEJ1ZmZlckdldEJsb2NrTnVt YmVyKGJ1Zik7CisJYmF0Y2gtPmJ1ZiA9IGJ1ZjsKKwliYXRjaC0+Y3VyclBhZ2UgPSBCdWZmZXJH ZXRCbG9ja051bWJlcihidWYpOwogCiAJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkK IAl7CkBAIC00NzMsMjUgKzQ0MSwyMSBAQCBfaGFzaF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNj YW4sIEJ1ZmZlciAqYnVmUCwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJCQkvKiBuZXcgcGFnZSwgbG9j YXRlIHN0YXJ0aW5nIHBvc2l0aW9uIGJ5IGJpbmFyeSBzZWFyY2ggKi8KIAkJCW9mZm51bSA9IF9o YXNoX2JpbnNlYXJjaChwYWdlLCBzby0+aGFzaHNvX3NrX2hhc2gpOwogCi0JCQlpdGVtSW5kZXgg PSBfaGFzaF9sb2FkX3F1YWxpZmllZF9pdGVtcyhzY2FuLCBwYWdlLCBvZmZudW0sIGRpcik7CisJ CQlpdGVtSW5kZXggPSBfaGFzaF9sb2FkX3F1YWxpZmllZF9pdGVtcyhzY2FuLCBwYWdlLCBvZmZu dW0sIGRpciwKKwkJCQkJCQkJCQkJCSAgIGJhdGNoKTsKIAogCQkJaWYgKGl0ZW1JbmRleCAhPSAw KQogCQkJCWJyZWFrOwogCiAJCQkvKgogCQkJICogQ291bGQgbm90IGZpbmQgYW55IG1hdGNoaW5n IHR1cGxlcyBpbiB0aGUgY3VycmVudCBwYWdlLCBtb3ZlIHRvCi0JCQkgKiB0aGUgbmV4dCBwYWdl LiBCZWZvcmUgbGVhdmluZyB0aGUgY3VycmVudCBwYWdlLCBkZWFsIHdpdGggYW55Ci0JCQkgKiBr aWxsZWQgaXRlbXMuCi0JCQkgKi8KLQkJCWlmIChzby0+bnVtS2lsbGVkID4gMCkKLQkJCQlfaGFz aF9raWxsX2l0ZW1zKHNjYW4pOwotCi0JCQkvKgorCQkJICogdGhlIG5leHQgcGFnZS4KKwkJCSAq CiAJCQkgKiBJZiB0aGlzIGlzIGEgcHJpbWFyeSBidWNrZXQgcGFnZSwgaGFzaG9fcHJldmJsa25v IGlzIG5vdCBhIHJlYWwKIAkJCSAqIGJsb2NrIG51bWJlci4KIAkJCSAqLwotCQkJaWYgKHNvLT5j dXJyUG9zLmJ1ZiA9PSBzby0+aGFzaHNvX2J1Y2tldF9idWYgfHwKLQkJCQlzby0+Y3VyclBvcy5i dWYgPT0gc28tPmhhc2hzb19zcGxpdF9idWNrZXRfYnVmKQorCQkJaWYgKGJhdGNoLT5idWYgPT0g c28tPmhhc2hzb19idWNrZXRfYnVmIHx8CisJCQkJYmF0Y2gtPmJ1ZiA9PSBzby0+aGFzaHNvX3Nw bGl0X2J1Y2tldF9idWYpCiAJCQkJcHJldl9ibGtubyA9IEludmFsaWRCbG9ja051bWJlcjsKIAkJ CWVsc2UKIAkJCQlwcmV2X2Jsa25vID0gb3BhcXVlLT5oYXNob19wcmV2Ymxrbm87CkBAIC00OTks MjkgKzQ2MywyNSBAQCBfaGFzaF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIEJ1ZmZlciAq YnVmUCwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJCQlfaGFzaF9yZWFkbmV4dChzY2FuLCAmYnVmLCAm cGFnZSwgJm9wYXF1ZSk7CiAJCQlpZiAoQnVmZmVySXNWYWxpZChidWYpKQogCQkJewotCQkJCXNv LT5jdXJyUG9zLmJ1ZiA9IGJ1ZjsKLQkJCQlzby0+Y3VyclBvcy5jdXJyUGFnZSA9IEJ1ZmZlckdl dEJsb2NrTnVtYmVyKGJ1Zik7CisJCQkJYmF0Y2gtPmJ1ZiA9IGJ1ZjsKKwkJCQliYXRjaC0+Y3Vy clBhZ2UgPSBCdWZmZXJHZXRCbG9ja051bWJlcihidWYpOwogCQkJfQogCQkJZWxzZQogCQkJewog CQkJCS8qCiAJCQkJICogUmVtZW1iZXIgbmV4dCBhbmQgcHJldmlvdXMgYmxvY2sgbnVtYmVycyBm b3Igc2Nyb2xsYWJsZQogCQkJCSAqIGN1cnNvcnMgdG8ga25vdyB0aGUgc3RhcnQgcG9zaXRpb24g YW5kIHJldHVybiBmYWxzZQotCQkJCSAqIGluZGljYXRpbmcgdGhhdCBubyBtb3JlIG1hdGNoaW5n IHR1cGxlcyB3ZXJlIGZvdW5kLiBBbHNvLAotCQkJCSAqIGRvbid0IHJlc2V0IGN1cnJQYWdlIG9y IGxzbiwgYmVjYXVzZSB3ZSBleHBlY3QKLQkJCQkgKiBfaGFzaF9raWxsX2l0ZW1zIHRvIGJlIGNh bGxlZCBmb3IgdGhlIG9sZCBwYWdlIGFmdGVyIHRoaXMKLQkJCQkgKiBmdW5jdGlvbiByZXR1cm5z LgorCQkJCSAqIGluZGljYXRpbmcgdGhhdCBubyBtb3JlIG1hdGNoaW5nIHR1cGxlcyB3ZXJlIGZv dW5kCiAJCQkJICovCi0JCQkJc28tPmN1cnJQb3MucHJldlBhZ2UgPSBwcmV2X2Jsa25vOwotCQkJ CXNvLT5jdXJyUG9zLm5leHRQYWdlID0gSW52YWxpZEJsb2NrTnVtYmVyOwotCQkJCXNvLT5jdXJy UG9zLmJ1ZiA9IGJ1ZjsKKwkJCQliYXRjaC0+cHJldlBhZ2UgPSBwcmV2X2Jsa25vOworCQkJCWJh dGNoLT5uZXh0UGFnZSA9IEludmFsaWRCbG9ja051bWJlcjsKKwkJCQliYXRjaC0+YnVmID0gSW52 YWxpZEJ1ZmZlcjsKIAkJCQlyZXR1cm4gZmFsc2U7CiAJCQl9CiAJCX0KIAotCQlzby0+Y3VyclBv cy5maXJzdEl0ZW0gPSAwOwotCQlzby0+Y3VyclBvcy5sYXN0SXRlbSA9IGl0ZW1JbmRleCAtIDE7 Ci0JCXNvLT5jdXJyUG9zLml0ZW1JbmRleCA9IDA7CisJCWJhdGNoLT5maXJzdEl0ZW0gPSAwOwor CQliYXRjaC0+bGFzdEl0ZW0gPSBpdGVtSW5kZXggLSAxOwogCX0KIAllbHNlCiAJewpAQCAtNTMy LDc3ICs0OTIsOTEgQEAgX2hhc2hfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBCdWZmZXIg KmJ1ZlAsIFNjYW5EaXJlY3Rpb24gZGlyKQogCQkJLyogbmV3IHBhZ2UsIGxvY2F0ZSBzdGFydGlu ZyBwb3NpdGlvbiBieSBiaW5hcnkgc2VhcmNoICovCiAJCQlvZmZudW0gPSBfaGFzaF9iaW5zZWFy Y2hfbGFzdChwYWdlLCBzby0+aGFzaHNvX3NrX2hhc2gpOwogCi0JCQlpdGVtSW5kZXggPSBfaGFz aF9sb2FkX3F1YWxpZmllZF9pdGVtcyhzY2FuLCBwYWdlLCBvZmZudW0sIGRpcik7CisJCQlpdGVt SW5kZXggPSBfaGFzaF9sb2FkX3F1YWxpZmllZF9pdGVtcyhzY2FuLCBwYWdlLCBvZmZudW0sIGRp ciwKKwkJCQkJCQkJCQkJCSAgIGJhdGNoKTsKIAogCQkJaWYgKGl0ZW1JbmRleCAhPSBNYXhJbmRl eFR1cGxlc1BlclBhZ2UpCiAJCQkJYnJlYWs7CiAKIAkJCS8qCiAJCQkgKiBDb3VsZCBub3QgZmlu ZCBhbnkgbWF0Y2hpbmcgdHVwbGVzIGluIHRoZSBjdXJyZW50IHBhZ2UsIG1vdmUgdG8KLQkJCSAq IHRoZSBwcmV2aW91cyBwYWdlLiBCZWZvcmUgbGVhdmluZyB0aGUgY3VycmVudCBwYWdlLCBkZWFs IHdpdGgKLQkJCSAqIGFueSBraWxsZWQgaXRlbXMuCisJCQkgKiB0aGUgcHJldmlvdXMgcGFnZQog CQkJICovCi0JCQlpZiAoc28tPm51bUtpbGxlZCA+IDApCi0JCQkJX2hhc2hfa2lsbF9pdGVtcyhz Y2FuKTsKLQotCQkJaWYgKHNvLT5jdXJyUG9zLmJ1ZiA9PSBzby0+aGFzaHNvX2J1Y2tldF9idWYg fHwKLQkJCQlzby0+Y3VyclBvcy5idWYgPT0gc28tPmhhc2hzb19zcGxpdF9idWNrZXRfYnVmKQor CQkJaWYgKGJhdGNoLT5idWYgPT0gc28tPmhhc2hzb19idWNrZXRfYnVmIHx8CisJCQkJYmF0Y2gt PmJ1ZiA9PSBzby0+aGFzaHNvX3NwbGl0X2J1Y2tldF9idWYpCiAJCQkJbmV4dF9ibGtubyA9IG9w YXF1ZS0+aGFzaG9fbmV4dGJsa25vOwogCiAJCQlfaGFzaF9yZWFkcHJldihzY2FuLCAmYnVmLCAm cGFnZSwgJm9wYXF1ZSk7CiAJCQlpZiAoQnVmZmVySXNWYWxpZChidWYpKQogCQkJewotCQkJCXNv LT5jdXJyUG9zLmJ1ZiA9IGJ1ZjsKLQkJCQlzby0+Y3VyclBvcy5jdXJyUGFnZSA9IEJ1ZmZlckdl dEJsb2NrTnVtYmVyKGJ1Zik7CisJCQkJYmF0Y2gtPmJ1ZiA9IGJ1ZjsKKwkJCQliYXRjaC0+Y3Vy clBhZ2UgPSBCdWZmZXJHZXRCbG9ja051bWJlcihidWYpOwogCQkJfQogCQkJZWxzZQogCQkJewog CQkJCS8qCiAJCQkJICogUmVtZW1iZXIgbmV4dCBhbmQgcHJldmlvdXMgYmxvY2sgbnVtYmVycyBm b3Igc2Nyb2xsYWJsZQogCQkJCSAqIGN1cnNvcnMgdG8ga25vdyB0aGUgc3RhcnQgcG9zaXRpb24g YW5kIHJldHVybiBmYWxzZQotCQkJCSAqIGluZGljYXRpbmcgdGhhdCBubyBtb3JlIG1hdGNoaW5n IHR1cGxlcyB3ZXJlIGZvdW5kLiBBbHNvLAotCQkJCSAqIGRvbid0IHJlc2V0IGN1cnJQYWdlIG9y IGxzbiwgYmVjYXVzZSB3ZSBleHBlY3QKLQkJCQkgKiBfaGFzaF9raWxsX2l0ZW1zIHRvIGJlIGNh bGxlZCBmb3IgdGhlIG9sZCBwYWdlIGFmdGVyIHRoaXMKLQkJCQkgKiBmdW5jdGlvbiByZXR1cm5z LgorCQkJCSAqIGluZGljYXRpbmcgdGhhdCBubyBtb3JlIG1hdGNoaW5nIHR1cGxlcyB3ZXJlIGZv dW5kCiAJCQkJICovCi0JCQkJc28tPmN1cnJQb3MucHJldlBhZ2UgPSBJbnZhbGlkQmxvY2tOdW1i ZXI7Ci0JCQkJc28tPmN1cnJQb3MubmV4dFBhZ2UgPSBuZXh0X2Jsa25vOwotCQkJCXNvLT5jdXJy UG9zLmJ1ZiA9IGJ1ZjsKKwkJCQliYXRjaC0+cHJldlBhZ2UgPSBJbnZhbGlkQmxvY2tOdW1iZXI7 CisJCQkJYmF0Y2gtPm5leHRQYWdlID0gbmV4dF9ibGtubzsKKwkJCQliYXRjaC0+YnVmID0gSW52 YWxpZEJ1ZmZlcjsKIAkJCQlyZXR1cm4gZmFsc2U7CiAJCQl9CiAJCX0KIAotCQlzby0+Y3VyclBv cy5maXJzdEl0ZW0gPSBpdGVtSW5kZXg7Ci0JCXNvLT5jdXJyUG9zLmxhc3RJdGVtID0gTWF4SW5k ZXhUdXBsZXNQZXJQYWdlIC0gMTsKLQkJc28tPmN1cnJQb3MuaXRlbUluZGV4ID0gTWF4SW5kZXhU dXBsZXNQZXJQYWdlIC0gMTsKKwkJYmF0Y2gtPmZpcnN0SXRlbSA9IGl0ZW1JbmRleDsKKwkJYmF0 Y2gtPmxhc3RJdGVtID0gTWF4SW5kZXhUdXBsZXNQZXJQYWdlIC0gMTsKIAl9CiAKLQlpZiAoc28t PmN1cnJQb3MuYnVmID09IHNvLT5oYXNoc29fYnVja2V0X2J1ZiB8fAotCQlzby0+Y3VyclBvcy5i dWYgPT0gc28tPmhhc2hzb19zcGxpdF9idWNrZXRfYnVmKQorCS8qIFNhdmVkIGF0IGxlYXN0IG9u ZSBtYXRjaCBpbiBiYXRjaC5pdGVtc1tdLCBzbyBwcmVwYXJlIHRvIHJldHVybiBpdCAqLworCWlm IChiYXRjaC0+YnVmID09IHNvLT5oYXNoc29fYnVja2V0X2J1ZiB8fAorCQliYXRjaC0+YnVmID09 IHNvLT5oYXNoc29fc3BsaXRfYnVja2V0X2J1ZikKIAl7Ci0JCXNvLT5jdXJyUG9zLnByZXZQYWdl ID0gSW52YWxpZEJsb2NrTnVtYmVyOwotCQlzby0+Y3VyclBvcy5uZXh0UGFnZSA9IG9wYXF1ZS0+ aGFzaG9fbmV4dGJsa25vOwotCQlMb2NrQnVmZmVyKHNvLT5jdXJyUG9zLmJ1ZiwgQlVGRkVSX0xP Q0tfVU5MT0NLKTsKKwkJLyoKKwkJICogQmF0Y2gncyBidWZmZXIgaXMgZWl0aGVyIHRoZSBwcmlt YXJ5IGJ1Y2tldCwgb3IgYSBidWNrZXQgYmVpbmcKKwkJICogcG9wdWxhdGVkIGR1ZSB0byBhIHNw bGl0CisJCSAqLworCQliYXRjaC0+cHJldlBhZ2UgPSBJbnZhbGlkQmxvY2tOdW1iZXI7CisJCWJh dGNoLT5uZXh0UGFnZSA9IG9wYXF1ZS0+aGFzaG9fbmV4dGJsa25vOworCQliYXRjaC0+bW9yZUxl ZnQgPSAoU2NhbkRpcmVjdGlvbklzQmFja3dhcmQoZGlyKSAmJgorCQkJCQkJICAgQmxvY2tOdW1i ZXJJc1ZhbGlkKGJhdGNoLT5wcmV2UGFnZSkpOworCQliYXRjaC0+bW9yZVJpZ2h0ID0gKFNjYW5E aXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSAmJgorCQkJCQkJCUJsb2NrTnVtYmVySXNWYWxpZChiYXRj aC0+bmV4dFBhZ2UpKTsKKworCQkvKgorCQkgKiBJbmNyZW1lbnQgbG9jYWwgcmVmZXJlbmNlIGNv dW50IHNvIHRoYXQgYmF0Y2ggZ2V0cyBhbiBpbmRlcGVuZGVudAorCQkgKiBidWZmZXIgcmVmZXJl bmNlIHRoYXQgY2FuIGJlIHJlbGVhc2VkIChieSBoYXNoZnJlZWJhdGNoKSBiZWZvcmUgdGhlCisJ CSAqIGhhc2hzb19idWNrZXRfYnVmL2hhc2hzb19zcGxpdF9idWNrZXRfYnVmIHJlZmVyZW5jZXMg YXJlIHJlbGVhc2VkCisJCSAqLworCQlJbmNyQnVmZmVyUmVmQ291bnQoYmF0Y2gtPmJ1Zik7CiAJ fQogCWVsc2UKIAl7Ci0JCXNvLT5jdXJyUG9zLnByZXZQYWdlID0gb3BhcXVlLT5oYXNob19wcmV2 Ymxrbm87Ci0JCXNvLT5jdXJyUG9zLm5leHRQYWdlID0gb3BhcXVlLT5oYXNob19uZXh0Ymxrbm87 Ci0JCV9oYXNoX3JlbGJ1ZihyZWwsIHNvLT5jdXJyUG9zLmJ1Zik7Ci0JCXNvLT5jdXJyUG9zLmJ1 ZiA9IEludmFsaWRCdWZmZXI7CisJCWJhdGNoLT5wcmV2UGFnZSA9IG9wYXF1ZS0+aGFzaG9fcHJl dmJsa25vOworCQliYXRjaC0+bmV4dFBhZ2UgPSBvcGFxdWUtPmhhc2hvX25leHRibGtubzsKKwkJ YmF0Y2gtPm1vcmVMZWZ0ID0gKFNjYW5EaXJlY3Rpb25Jc0JhY2t3YXJkKGRpcikgJiYKKwkJCQkJ CSAgIEJsb2NrTnVtYmVySXNWYWxpZChiYXRjaC0+cHJldlBhZ2UpKTsKKwkJYmF0Y2gtPm1vcmVS aWdodCA9IChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikgJiYKKwkJCQkJCQlCbG9ja051bWJl cklzVmFsaWQoYmF0Y2gtPm5leHRQYWdlKSk7CiAJfQogCi0JQXNzZXJ0KHNvLT5jdXJyUG9zLmZp cnN0SXRlbSA8PSBzby0+Y3VyclBvcy5sYXN0SXRlbSk7CisJLyogVW5sb2NrIChhbmQgbGlrZWx5 IHVucGluKSBidWZmZXIsIHBlciBhbWdldGJhdGNoIGNvbnRyYWN0ICovCisJaW5kZXhhbV91dGls X2JhdGNoX3VubG9jayhzY2FuLCBiYXRjaCk7CisKKwlBc3NlcnQoYmF0Y2gtPmZpcnN0SXRlbSA8 PSBiYXRjaC0+bGFzdEl0ZW0pOwogCXJldHVybiB0cnVlOwogfQogCiAvKgogICogTG9hZCBhbGwg dGhlIHF1YWxpZmllZCBpdGVtcyBmcm9tIGEgY3VycmVudCBpbmRleCBwYWdlCi0gKiBpbnRvIHNv LT5jdXJyUG9zLiBIZWxwZXIgZnVuY3Rpb24gZm9yIF9oYXNoX3JlYWRwYWdlLgorICogaW50byBi YXRjaC4gSGVscGVyIGZ1bmN0aW9uIGZvciBfaGFzaF9yZWFkcGFnZS4KICAqLwogc3RhdGljIGlu dAogX2hhc2hfbG9hZF9xdWFsaWZpZWRfaXRlbXMoSW5kZXhTY2FuRGVzYyBzY2FuLCBQYWdlIHBh Z2UsCi0JCQkJCQkgICBPZmZzZXROdW1iZXIgb2ZmbnVtLCBTY2FuRGlyZWN0aW9uIGRpcikKKwkJ CQkJCSAgIE9mZnNldE51bWJlciBvZmZudW0sIFNjYW5EaXJlY3Rpb24gZGlyLAorCQkJCQkJICAg QmF0Y2hJbmRleFNjYW4gYmF0Y2gpCiB7CiAJSGFzaFNjYW5PcGFxdWUgc28gPSAoSGFzaFNjYW5P cGFxdWUpIHNjYW4tPm9wYXF1ZTsKIAlJbmRleFR1cGxlCWl0dXA7CkBAIC02MzksNyArNjEzLDcg QEAgX2hhc2hfbG9hZF9xdWFsaWZpZWRfaXRlbXMoSW5kZXhTY2FuRGVzYyBzY2FuLCBQYWdlIHBh Z2UsCiAJCQkJX2hhc2hfY2hlY2txdWFsKHNjYW4sIGl0dXApKQogCQkJewogCQkJCS8qIHR1cGxl IGlzIHF1YWxpZmllZCwgc28gcmVtZW1iZXIgaXQgKi8KLQkJCQlfaGFzaF9zYXZlaXRlbShzbywg aXRlbUluZGV4LCBvZmZudW0sIGl0dXApOworCQkJCV9oYXNoX3NhdmVpdGVtKGJhdGNoLCBpdGVt SW5kZXgsIG9mZm51bSwgaXR1cCk7CiAJCQkJaXRlbUluZGV4Kys7CiAJCQl9CiAJCQllbHNlCkBA IC02ODYsNyArNjYwLDcgQEAgX2hhc2hfbG9hZF9xdWFsaWZpZWRfaXRlbXMoSW5kZXhTY2FuRGVz YyBzY2FuLCBQYWdlIHBhZ2UsCiAJCQl7CiAJCQkJaXRlbUluZGV4LS07CiAJCQkJLyogdHVwbGUg aXMgcXVhbGlmaWVkLCBzbyByZW1lbWJlciBpdCAqLwotCQkJCV9oYXNoX3NhdmVpdGVtKHNvLCBp dGVtSW5kZXgsIG9mZm51bSwgaXR1cCk7CisJCQkJX2hhc2hfc2F2ZWl0ZW0oYmF0Y2gsIGl0ZW1J bmRleCwgb2ZmbnVtLCBpdHVwKTsKIAkJCX0KIAkJCWVsc2UKIAkJCXsKQEAgLTcwNSwxMyArNjc5 LDE0IEBAIF9oYXNoX2xvYWRfcXVhbGlmaWVkX2l0ZW1zKEluZGV4U2NhbkRlc2Mgc2NhbiwgUGFn ZSBwYWdlLAogCX0KIH0KIAotLyogU2F2ZSBhbiBpbmRleCBpdGVtIGludG8gc28tPmN1cnJQb3Mu aXRlbXNbaXRlbUluZGV4XSAqLworLyogU2F2ZSBhbiBpbmRleCBpdGVtIGludG8gYmF0Y2gtPml0 ZW1zW2l0ZW1JbmRleF0gKi8KIHN0YXRpYyBpbmxpbmUgdm9pZAotX2hhc2hfc2F2ZWl0ZW0oSGFz aFNjYW5PcGFxdWUgc28sIGludCBpdGVtSW5kZXgsCitfaGFzaF9zYXZlaXRlbShCYXRjaEluZGV4 U2NhbiBiYXRjaCwgaW50IGl0ZW1JbmRleCwKIAkJCSAgIE9mZnNldE51bWJlciBvZmZudW0sIElu ZGV4VHVwbGUgaXR1cCkKIHsKLQlIYXNoU2NhblBvc0l0ZW0gKmN1cnJJdGVtID0gJnNvLT5jdXJy UG9zLml0ZW1zW2l0ZW1JbmRleF07CisJQmF0Y2hNYXRjaGluZ0l0ZW0gKmN1cnJJdGVtID0gJmJh dGNoLT5pdGVtc1tpdGVtSW5kZXhdOwogCiAJY3Vyckl0ZW0tPmhlYXBUaWQgPSBpdHVwLT50X3Rp ZDsKIAljdXJySXRlbS0+aW5kZXhPZmZzZXQgPSBvZmZudW07CisJY3Vyckl0ZW0tPnR1cGxlT2Zm c2V0ID0gMDsJLyogSGFzaCBkb2Vzbid0IHN1cHBvcnQgaW5kZXgtb25seSBzY2FucyAqLwogfQpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHV0aWwuYyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy9oYXNoL2hhc2h1dGlsLmMKaW5kZXggZjQxMjMzZmNkLi5kMDFkM2I3ZDIgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2h1dGlsLmMKKysrIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL2hhc2gvaGFzaHV0aWwuYwpAQCAtNTEwLDY3ICs1MTAsNzQgQEAgX2hhc2hf Z2V0X25ld2J1Y2tldF9mcm9tX29sZGJ1Y2tldChSZWxhdGlvbiByZWwsIEJ1Y2tldCBvbGRfYnVj a2V0LAogICogX2hhc2hfa2lsbF9pdGVtcyAtIHNldCBMUF9ERUFEIHN0YXRlIGZvciBpdGVtcyBh biBpbmRleHNjYW4gY2FsbGVyIGhhcwogICogdG9sZCB1cyB3ZXJlIGtpbGxlZC4KICAqCi0gKiBz Y2FuLT5vcGFxdWUsIHJlZmVyZW5jZWQgbG9jYWxseSB0aHJvdWdoIHNvLCBjb250YWlucyBpbmZv cm1hdGlvbiBhYm91dCB0aGUKLSAqIGN1cnJlbnQgcGFnZSBhbmQga2lsbGVkIHR1cGxlcyB0aGVy ZW9uIChnZW5lcmFsbHksIHRoaXMgc2hvdWxkIG9ubHkgYmUKLSAqIGNhbGxlZCBpZiBzby0+bnVt S2lsbGVkID4gMCkuCisgKiBUaGUgYmF0Y2ggcGFyYW1ldGVyIGNvbnRhaW5zIGluZm9ybWF0aW9u IGFib3V0IHRoZSBjdXJyZW50IHBhZ2UgYW5kIGtpbGxlZAorICogdHVwbGVzIHRoZXJlb24gKHRo aXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGlmIGJhdGNoLT5udW1LaWxsZWQgPiAwKS4KICAqCi0g KiBUaGUgY2FsbGVyIGRvZXMgbm90IGhhdmUgYSBsb2NrIG9uIHRoZSBwYWdlIGFuZCBtYXkgb3Ig bWF5IG5vdCBoYXZlIHRoZQotICogcGFnZSBwaW5uZWQgaW4gYSBidWZmZXIuICBOb3RlIHRoYXQg cmVhZC1sb2NrIGlzIHN1ZmZpY2llbnQgZm9yIHNldHRpbmcKLSAqIExQX0RFQUQgc3RhdHVzICh3 aGljaCBpcyBvbmx5IGEgaGludCkuCisgKiBDYWxsZXIgc2hvdWxkIG5vdCBoYXZlIGEgbG9jayBv biB0aGUgYmF0Y2ggcG9zaXRpb24ncyBwYWdlLCBidXQgbXVzdCBob2xkIGEKKyAqIGJ1ZmZlciBw aW4gd2hlbiAhZHJvcFBpbi4gIFdoZW4gd2UgcmV0dXJuLCBpdCBzdGlsbCB3b24ndCBiZSBsb2Nr ZWQuICBJdCdsbAorICogY29udGludWUgdG8gaG9sZCB3aGF0ZXZlciBwaW5zIHdlcmUgaGVsZCBi ZWZvcmUgY2FsbGluZyBoZXJlLgogICoKLSAqIFRoZSBjYWxsZXIgbXVzdCBoYXZlIHBpbiBvbiBi dWNrZXQgYnVmZmVyLCBidXQgbWF5IG9yIG1heSBub3QgaGF2ZSBwaW4KLSAqIG9uIG92ZXJmbG93 IGJ1ZmZlciwgYXMgaW5kaWNhdGVkIGJ5IEhhc2hTY2FuUG9zSXNQaW5uZWQoc28tPmN1cnJQb3Mp LgotICoKLSAqIFdlIG1hdGNoIGl0ZW1zIGJ5IGhlYXAgVElEIGJlZm9yZSBhc3N1bWluZyB0aGV5 IGFyZSB0aGUgcmlnaHQgb25lcyB0bwotICogZGVsZXRlLgotICoKLSAqIFRoZXJlIGFyZSBuZXZl ciBhbnkgc2NhbnMgYWN0aXZlIGluIGEgYnVja2V0IGF0IHRoZSB0aW1lIFZBQ1VVTSBiZWdpbnMs Ci0gKiBiZWNhdXNlIFZBQ1VVTSB0YWtlcyBhIGNsZWFudXAgbG9jayBvbiB0aGUgcHJpbWFyeSBi dWNrZXQgcGFnZSBhbmQgc2NhbnMKLSAqIGhvbGQgYSBwaW4uICBBIHNjYW4gY2FuIGJlZ2luIGFm dGVyIFZBQ1VVTSBsZWF2ZXMgdGhlIHByaW1hcnkgYnVja2V0IHBhZ2UKLSAqIGJ1dCBiZWZvcmUg aXQgZmluaXNoZXMgdGhlIGVudGlyZSBidWNrZXQsIGJ1dCBpdCBjYW4gbmV2ZXIgcGFzcyBWQUNV VU0sCi0gKiBiZWNhdXNlIFZBQ1VVTSBhbHdheXMgbG9ja3MgdGhlIG5leHQgcGFnZSBiZWZvcmUg cmVsZWFzaW5nIHRoZSBsb2NrIG9uCi0gKiB0aGUgcHJldmlvdXMgb25lLiAgVGhlcmVmb3JlLCB3 ZSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IGFjY2lkZW50YWxseQotICoga2lsbGluZyBhIFRJ RCB0aGF0IGhhcyBiZWVuIHJldXNlZCBmb3IgYW4gdW5yZWxhdGVkIHR1cGxlLgorICogV2UgbWF0 Y2ggaXRlbXMgYnkgaGVhcCBUSUQgYmVmb3JlIGFzc3VtaW5nIHRoZXkgYXJlIHRoZSByaWdodCBv bmVzIHRvIHNldAorICogTFBfREVBRC4gIElmIHRoZSBzY2FuIGlzIG9uZSB0aGF0IGhvbGRzIGEg YnVmZmVyIHBpbiBvbiB0aGUgdGFyZ2V0IHBhZ2UKKyAqIGNvbnRpbnVvdXNseSBmcm9tIGluaXRp YWxseSByZWFkaW5nIHRoZSBpdGVtcyB1bnRpbCBhcHBseWluZyB0aGlzIGZ1bmN0aW9uCisgKiAo aWYgaXQgaXMgYSAhZHJvcFBpbiBzY2FuKSwgVkFDVVVNIGNhbm5vdCBoYXZlIGRlbGV0ZWQgYW55 IGl0ZW1zIG9uIHRoZQorICogcGFnZSwgc28gdGhlIHBhZ2UncyBUSURzIGNhbid0IGhhdmUgYmVl biByZWN5Y2xlZCBieSBub3cuICBUaGVyZSdzIG5vIHJpc2sKKyAqIHRoYXQgd2UnbGwgY29uZnVz ZSBhIG5ldyBpbmRleCB0dXBsZSB0aGF0IGhhcHBlbnMgdG8gdXNlIGEgcmVjeWNsZWQgVElECisg KiB3aXRoIGEgbm93LXJlbW92ZWQgdHVwbGUgd2l0aCB0aGUgc2FtZSBUSUQgKHRoYXQgdXNlZCB0 byBiZSBvbiB0aGlzIHNhbWUKKyAqIHBhZ2UpLiAgV2UgY2FuJ3QgcmVseSBvbiB0aGF0IGR1cmlu ZyBzY2FucyB0aGF0IGRyb3AgYnVmZmVyIHBpbnMgZWFnZXJseQorICogKGkuZS4gZHJvcFBpbiBz Y2FucyksIHRob3VnaCwgc28gd2UgbXVzdCBjb25kaXRpb24gc2V0dGluZyBMUF9ERUFEIGJpdHMg b24KKyAqIHRoZSBwYWdlIExTTiBoYXZpbmcgbm90IGNoYW5nZWQgc2luY2UgYmFjayB3aGVuIF9o YXNoX3JlYWRwYWdlIHNhdyB0aGUgcGFnZS4KKyAqIFdlIHRvdGFsbHkgZ2l2ZSB1cCBvbiBzZXR0 aW5nIExQX0RFQUQgYml0cyB3aGVuIHRoZSBwYWdlIExTTiBjaGFuZ2VkLgogICovCiB2b2lkCi1f aGFzaF9raWxsX2l0ZW1zKEluZGV4U2NhbkRlc2Mgc2NhbikKK19oYXNoX2tpbGxfaXRlbXMoSW5k ZXhTY2FuRGVzYyBzY2FuLCBCYXRjaEluZGV4U2NhbiBiYXRjaCkKIHsKLQlIYXNoU2Nhbk9wYXF1 ZSBzbyA9IChIYXNoU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwogCVJlbGF0aW9uCXJlbCA9IHNj YW4tPmluZGV4UmVsYXRpb247Ci0JQmxvY2tOdW1iZXIgYmxrbm87CiAJQnVmZmVyCQlidWY7CiAJ UGFnZQkJcGFnZTsKIAlIYXNoUGFnZU9wYXF1ZSBvcGFxdWU7CiAJT2Zmc2V0TnVtYmVyIG9mZm51 bSwKIAkJCQltYXhvZmY7Ci0JaW50CQkJbnVtS2lsbGVkID0gc28tPm51bUtpbGxlZDsKKwlpbnQJ CQludW1LaWxsZWQgPSBiYXRjaC0+bnVtS2lsbGVkOwogCWludAkJCWk7CiAJYm9vbAkJa2lsbGVk c29tZXRoaW5nID0gZmFsc2U7Ci0JYm9vbAkJaGF2ZVBpbiA9IGZhbHNlOwogCi0JQXNzZXJ0KHNv LT5udW1LaWxsZWQgPiAwKTsKLQlBc3NlcnQoc28tPmtpbGxlZEl0ZW1zICE9IE5VTEwpOwotCUFz c2VydChIYXNoU2NhblBvc0lzVmFsaWQoc28tPmN1cnJQb3MpKTsKKwlBc3NlcnQobnVtS2lsbGVk ID4gMCk7CisJQXNzZXJ0KGJhdGNoLT5raWxsZWRJdGVtcyAhPSBOVUxMKTsKKwlBc3NlcnQoQmxv Y2tOdW1iZXJJc1ZhbGlkKGJhdGNoLT5jdXJyUGFnZSkpOwogCi0JLyoKLQkgKiBBbHdheXMgcmVz ZXQgdGhlIHNjYW4gc3RhdGUsIHNvIHdlIGRvbid0IGxvb2sgZm9yIHNhbWUgaXRlbXMgb24gb3Ro ZXIKLQkgKiBwYWdlcy4KLQkgKi8KLQlzby0+bnVtS2lsbGVkID0gMDsKKwkvKiBBbHdheXMgaW52 YWxpZGF0ZSBiYXRjaC0+a2lsbGVkSXRlbXNbXSBiZWZvcmUgZnJlZWluZyBiYXRjaCAqLworCWJh dGNoLT5udW1LaWxsZWQgPSAwOwogCi0JYmxrbm8gPSBzby0+Y3VyclBvcy5jdXJyUGFnZTsKLQlp ZiAoSGFzaFNjYW5Qb3NJc1Bpbm5lZChzby0+Y3VyclBvcykpCisJaWYgKCFzY2FuLT5iYXRjaHF1 ZXVlLT5kcm9wUGluKQogCXsKIAkJLyoKLQkJICogV2UgYWxyZWFkeSBoYXZlIHBpbiBvbiB0aGlz IGJ1ZmZlciwgc28sIGFsbCB3ZSBuZWVkIHRvIGRvIGlzCi0JCSAqIGFjcXVpcmUgbG9jayBvbiBp dC4KKwkJICogV2UgaGF2ZSBoZWxkIHRoZSBwaW4gb24gdGhpcyBwYWdlIHNpbmNlIHdlIHJlYWQg dGhlIGluZGV4IHR1cGxlcywKKwkJICogc28gYWxsIHdlIG5lZWQgdG8gZG8gaXMgbG9jayBpdC4g IFRoZSBwaW4gd2lsbCBoYXZlIHByZXZlbnRlZAorCQkgKiBjb25jdXJyZW50IFZBQ1VVTXMgZnJv bSByZWN5Y2xpbmcgYW55IG9mIHRoZSBUSURzIG9uIHRoZSBwYWdlLgogCQkgKi8KLQkJaGF2ZVBp biA9IHRydWU7Ci0JCWJ1ZiA9IHNvLT5jdXJyUG9zLmJ1ZjsKKwkJYnVmID0gYmF0Y2gtPmJ1ZjsK IAkJTG9ja0J1ZmZlcihidWYsIEJVRkZFUl9MT0NLX1NIQVJFKTsKIAl9CiAJZWxzZQotCQlidWYg PSBfaGFzaF9nZXRidWYocmVsLCBibGtubywgSEFTSF9SRUFELCBMSF9PVkVSRkxPV19QQUdFKTsK Kwl7CisJCVhMb2dSZWNQdHIJbGF0ZXN0bHNuOworCisJCUFzc2VydChSZWxhdGlvbk5lZWRzV0FM KHJlbCkpOworCQlidWYgPSBfaGFzaF9nZXRidWYocmVsLCBiYXRjaC0+Y3VyclBhZ2UsIEhBU0hf UkVBRCwKKwkJCQkJCSAgIExIX0JVQ0tFVF9QQUdFIHwgTEhfT1ZFUkZMT1dfUEFHRSk7CisKKwkJ bGF0ZXN0bHNuID0gQnVmZmVyR2V0TFNOQXRvbWljKGJ1Zik7CisJCUFzc2VydChiYXRjaC0+bHNu IDw9IGxhdGVzdGxzbik7CisJCWlmIChiYXRjaC0+bHNuICE9IGxhdGVzdGxzbikKKwkJeworCQkJ LyogTW9kaWZpZWQsIGdpdmUgdXAgb24gaGludGluZyAqLworCQkJX2hhc2hfcmVsYnVmKHJlbCwg YnVmKTsKKwkJCXJldHVybjsKKwkJfQorCisJCS8qIFVubW9kaWZpZWQsIGhpbnRpbmcgaXMgc2Fm ZSAqLworCX0KIAogCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKGJ1Zik7CiAJb3BhcXVlID0gSGFzaFBh Z2VHZXRPcGFxdWUocGFnZSk7CkBAIC01NzgsMTMgKzU4NSwxMyBAQCBfaGFzaF9raWxsX2l0ZW1z KEluZGV4U2NhbkRlc2Mgc2NhbikKIAogCWZvciAoaSA9IDA7IGkgPCBudW1LaWxsZWQ7IGkrKykK IAl7Ci0JCWludAkJCWl0ZW1JbmRleCA9IHNvLT5raWxsZWRJdGVtc1tpXTsKLQkJSGFzaFNjYW5Q b3NJdGVtICpjdXJySXRlbSA9ICZzby0+Y3VyclBvcy5pdGVtc1tpdGVtSW5kZXhdOworCQlpbnQJ CQlpdGVtSW5kZXggPSBiYXRjaC0+a2lsbGVkSXRlbXNbaV07CisJCUJhdGNoTWF0Y2hpbmdJdGVt ICpjdXJySXRlbSA9ICZiYXRjaC0+aXRlbXNbaXRlbUluZGV4XTsKIAogCQlvZmZudW0gPSBjdXJy SXRlbS0+aW5kZXhPZmZzZXQ7CiAKLQkJQXNzZXJ0KGl0ZW1JbmRleCA+PSBzby0+Y3VyclBvcy5m aXJzdEl0ZW0gJiYKLQkJCSAgIGl0ZW1JbmRleCA8PSBzby0+Y3VyclBvcy5sYXN0SXRlbSk7CisJ CUFzc2VydChpdGVtSW5kZXggPj0gYmF0Y2gtPmZpcnN0SXRlbSAmJgorCQkJICAgaXRlbUluZGV4 IDw9IGJhdGNoLT5sYXN0SXRlbSk7CiAKIAkJd2hpbGUgKG9mZm51bSA8PSBtYXhvZmYpCiAJCXsK QEAgLTYxMyw5ICs2MjAsOCBAQCBfaGFzaF9raWxsX2l0ZW1zKEluZGV4U2NhbkRlc2Mgc2NhbikK IAkJTWFya0J1ZmZlckRpcnR5SGludChidWYsIHRydWUpOwogCX0KIAotCWlmIChzby0+aGFzaHNv X2J1Y2tldF9idWYgPT0gc28tPmN1cnJQb3MuYnVmIHx8Ci0JCWhhdmVQaW4pCi0JCUxvY2tCdWZm ZXIoc28tPmN1cnJQb3MuYnVmLCBCVUZGRVJfTE9DS19VTkxPQ0spOworCWlmICghc2Nhbi0+YmF0 Y2hxdWV1ZS0+ZHJvcFBpbikKKwkJTG9ja0J1ZmZlcihidWYsIEJVRkZFUl9MT0NLX1VOTE9DSyk7 CiAJZWxzZQogCQlfaGFzaF9yZWxidWYocmVsLCBidWYpOwogfQpkaWZmIC0tZ2l0IGEvc3JjL3Rv b2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMu bGlzdAppbmRleCA2ODEyZDJmZDcuLmUyM2E5YTk4ZCAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3Bn aW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxp c3QKQEAgLTExODQsOCArMTE4NCw2IEBAIEhhc2hQYWdlU3RhdAogSGFzaFBhdGgKIEhhc2hTY2Fu T3BhcXVlCiBIYXNoU2Nhbk9wYXF1ZURhdGEKLUhhc2hTY2FuUG9zRGF0YQotSGFzaFNjYW5Qb3NJ dGVtCiBIYXNoU2tld0J1Y2tldAogSGFzaFN0YXRlCiBIYXNoVmFsdWVGdW5jCi0tIAoyLjUxLjAK Cg== --000000000000c23a9a0645a0bc0c--