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 1w4nSm-002Z4V-2y for pgsql-hackers@arkaria.postgresql.org; Mon, 23 Mar 2026 22:09:33 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w4nSk-002iHN-1H for pgsql-hackers@arkaria.postgresql.org; Mon, 23 Mar 2026 22:09:30 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w4nSj-002iHF-1G for pgsql-hackers@lists.postgresql.org; Mon, 23 Mar 2026 22:09:30 +0000 Received: from mail-lf1-x12d.google.com ([2a00:1450:4864:20::12d]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w4nSg-00000000gwQ-3PTO for pgsql-hackers@postgresql.org; Mon, 23 Mar 2026 22:09:28 +0000 Received: by mail-lf1-x12d.google.com with SMTP id 2adb3069b0e04-5a283c44478so3393537e87.3 for ; Mon, 23 Mar 2026 15:09:26 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1774303765; cv=none; d=google.com; s=arc-20240605; b=BY05Whi7z+6NiM0kFr4Yn/gmqtrxN7elUtOLSi6GmwkvKe15+eJ1qNh2loi8WXfflA mFwROZfPmak2tCvGtRRGGp7UWbHHVJyTAJNzifnO/fYMKu615DfVhFzwZxUKGF+zM6Uq h7AQ070T6yIO3HETX3aWanXSodqh8vp62iWuMgbvOFefj5n8M3eXqxYg1feH6WAk+MD9 MciGZfoWjQKLCkwq70+S+gBqX9vB/NUV9zeisszM85M6Nx5W/QGbZ2mnTGaXMtDvGA6v dKGBw/UCfIJAH1aGkANm0KSnlTdw8esqS8EQ4g8ckcqJRFRRLfsWDCi1oRlyoxhB4EOl Q2hw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=qngHenkBehpFGtI/qGrReQdxmp7KlkWfeNvKAZ6JgGY=; fh=BcRxtJIE/cjPJpeD6FIb28tVGFSbqDkxr2O2mM1a2AA=; b=HLt+0OQu3SEnXh7F0RxyrY8eelXuccw6EbieZYuK3teKtPojhV30eF7z+LhQgOTJDl YL6ocGXWnj45PPMs+GFr8s/deLMNOAC3gHEJcF0UVpNQtUi/5qg0SSy/QR6XNVeV8dsu vaOjhBdElHPFgijXgxWIknW5q/3jSso/3Nd4Wj5ugMG4HFZ9CrhZnVhADQzEgL3EAjWz aWaaoYCykGOa4G+CKQKCnHspLf+6j8Nq2M6yBFlCkh4v9XVvEEkvhbGif5uqerWkxiQO 8l38GeVccg5Fhg6758Pd0tRXpAFvkeFy+eOqNbyxSfmVp08d20lQr81XxYdoBHiEY/bF OTKA==; darn=postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1774303765; x=1774908565; darn=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=qngHenkBehpFGtI/qGrReQdxmp7KlkWfeNvKAZ6JgGY=; b=qshLzq0jcenCTOP2g5934QGEW1CzYbaojslJ9oM3Rlny6JCDZV4DdeT2jvPcBohCIi ifU+Ljlcgtfm/QFpvfw2lz1+GiZll/eNKnz9P6i2s3ysYP/+nx5UV9MtL4k/GW7nLpA8 V/1FQCeCLrdPofuc0x0k0xIVWcADnsbVfLe6yd/H94LULtXgmxtAhReSMjp7/MY7Getg LYpUxYeq1YB7gRQLxOgqsQxq747t42BMSvb9rCUXP4i6z9oDblep+7P+Jlme2h651OYB B8E0bC7CNXBWD3mIiTOva8JRYEo8yGckzLmdK1CR8BQuFqo7iWulQShJa1BH1CuMCKQA gD/Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774303765; x=1774908565; 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=qngHenkBehpFGtI/qGrReQdxmp7KlkWfeNvKAZ6JgGY=; b=LIprLA5GJNb4spaWhI3BjXF9933QIWJ11EDP+kFfgoFfkT1IriaDaNX414NjUC68b5 e+BACFq6jdDuEWlmyWZQnW3UlN/1OqJQcthzIqt6iqsHaEAOdykoNiYBeRI2Y78lhkHf q2l55Zqy5jTmI7e0cuAa/HoEl0OAyCpFaXL8KtjMPMDGdO6IFynpT8f+pcPKMLy0zUE5 UG+XO+Z+SB3gOcDKDJYueE/PVmEmYoJ2dkj+s3WNRJlHC6CJmnQk1vd6Msqq/Lp2DvRY aOu2q9CrYX1U4Ht4RXA/UvE3D3BuX1d/K868u1rekClaJEVF1yKv85ok/YtPdtAaQ1qn giEQ== X-Forwarded-Encrypted: i=1; AJvYcCVWt/0/vccuFtV/OTU7qQOoAoeQ7NpSIbqKaNXCw5ptuvAgHbM/viOyrcLlTRYrHf4/x7AcrbF/Ftlt8KlY@postgresql.org X-Gm-Message-State: AOJu0YygjlJSAVPOIqV39KBOpH8hUOapUbbCd7RjAy7Ei7Y8+fGTb+Pb lJv25qAdgHtEg0sRFbCigKaKW/2ZyjEYI8sYhSYb5+/ajiQCSfXo/bXNjIvgmP1c9h6wxJyWOmV 9Zuz3Rb3JOEPqk4q6duiziVb+RHXz9zY= X-Gm-Gg: ATEYQzwJu+pC/VEjIrwlFp0f5i5RwZfcl5yxtOfnt0Yv3LM2rRAD0OiUavujumK/21V Mf9sdCU+fc+FsJQlhCXs5kC7v7xZ2YOM5zsX77SSp1M4VrIyapAsf8+2tgf8UzckIfegrWsCnuv wjwRPRAiebWMgWjT7qtpYUPJOiRIZnM+YOPk3kmqyB9NBHRY5ZJwohY5Ltzn3xmimWzbWTABP+I KUztaWlHsKKGO0f2ao+vWrb8aCQStmtaj+DbXBK6WKd5o+MYvU5rPffImEUH3tO2B1x860Wge9v LEIhWE7QDfq+0oeGWvEQMx/wj5AxP7Kge1U4mUL1tBBAHbHYCqDkU+tXx8j47yDtnXQn X-Received: by 2002:a05:6512:1388:b0:5a0:eeb8:efbe with SMTP id 2adb3069b0e04-5a285b04694mr4198123e87.11.1774303764638; Mon, 23 Mar 2026 15:09:24 -0700 (PDT) MIME-Version: 1.0 References: <202505181556.3n6oiowvntyr@alvherre.pgsql> <8010.1764584989@localhost> <5778.1764660480@localhost> In-Reply-To: From: Mihail Nikalayeu Date: Mon, 23 Mar 2026 23:08:00 +0100 X-Gm-Features: AaiRm52F14T4-oBJEvwBGvtBi8TakR2S7KeH_pNlz28k8_6eUbBdAN0ifGj4NHc Message-ID: Subject: Re: Revisiting {CREATE INDEX, REINDEX} CONCURRENTLY improvements To: Matthias van de Meent Cc: Antonin Houska , Hannu Krosing , Sergey Sargsyan , =?UTF-8?Q?=C3=81lvaro_Herrera?= , Andres Freund , Michael Paquier , PostgreSQL Hackers , Andrey Borodin , Melanie Plageman Content-Type: multipart/mixed; boundary="0000000000009da2ac064db84911" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000009da2ac064db84911 Content-Type: text/plain; charset="UTF-8" Hello! Fixed compilation, updates stress test, fixed few potential issues with tuplestore, some style fixes around. Best regards, Mikhail. --0000000000009da2ac064db84911 Content-Type: application/octet-stream; name="v31-0003-Add-Datum-storage-support-to-tuplestore-Extend-t.patch" Content-Disposition: attachment; filename="v31-0003-Add-Datum-storage-support-to-tuplestore-Extend-t.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mn3ofxp42 RnJvbSBiZDE5MTlkM2EyOTlhYzkyNzMyMmQyYzNkNWVlZTFiMjczYmE0M2E1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNaWtoYWlsIE5pa2FsYXlldSA8bWloYWlsbmlrYWxheWV1QGdt YWlsLmNvbT4KRGF0ZTogTW9uLCAxMiBKYW4gMjAyNiAwMDo1Nzo1NiArMDMwMApTdWJqZWN0OiBb UEFUQ0ggdjMxIDMvN10gQWRkIERhdHVtIHN0b3JhZ2Ugc3VwcG9ydCB0byB0dXBsZXN0b3JlIEV4 dGVuZAogdHVwbGVzdG9yZSB0byBzdG9yZSBpbmRpdmlkdWFsIERhdHVtIHZhbHVlczogLSBmaXhl ZC1sZW5ndGggZGF0YXR5cGVzIGFuZAogdmFyaWFibGUtbGVuZ3RoIGRhdGF0eXBlczogaW5jbHVk ZSBhIGxlbmd0aCBoZWFkZXIgLSBieS12YWx1ZSB0eXBlczogc3RvcmUKIGlubGluZSB3aXRoIG9u ZSBleHRyYSBieXRlIChidXQgd2l0aG91dCBzdXBwb3J0IG9mIHJhbmRvbSBhY2Nlc3MpCgpUaGlz IHN1cHBvcnQgZW5hYmxlcyB1c2FnZXMgb2YgdHVwbGVzdG9yZSBmb3Igbm9uLXR1cGxlIGRhdGEg KFRJRHMpIGluIHRoZSBuZXh0IGNvbW1pdC4KLS0tCiBzcmMvYmFja2VuZC91dGlscy9zb3J0L3R1 cGxlc3RvcmUuYyB8IDM2MSArKysrKysrKysrKysrKysrKysrKysrKy0tLS0tCiBzcmMvaW5jbHVk ZS91dGlscy90dXBsZXN0b3JlLmggICAgICB8ICAzMyArLS0KIDIgZmlsZXMgY2hhbmdlZCwgMzIx IGluc2VydGlvbnMoKyksIDczIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L3V0aWxzL3NvcnQvdHVwbGVzdG9yZS5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvc29ydC90dXBsZXN0 b3JlLmMKaW5kZXggMjczYTRjOWIwMmYuLjNmYzU0ZGViMGZkIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC91dGlscy9zb3J0L3R1cGxlc3RvcmUuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9zb3J0 L3R1cGxlc3RvcmUuYwpAQCAtMSwxNiArMSwxOSBAQAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKgog ICogdHVwbGVzdG9yZS5jCi0gKgkgIEdlbmVyYWxpemVkIHJvdXRpbmVzIGZvciB0ZW1wb3Jhcnkg dHVwbGUgc3RvcmFnZS4KKyAqCSAgR2VuZXJhbGl6ZWQgcm91dGluZXMgZm9yIHRlbXBvcmFyeSBz dG9yYWdlIG9mIHR1cGxlcyBhbmQgRGF0dW1zLgorICoKKyAqIFRoaXMgbW9kdWxlIGhhbmRsZXMg dGVtcG9yYXJ5IHN0b3JhZ2Ugb2YgZWl0aGVyIHR1cGxlcyBvciBzaW5nbGUKKyAqIERhdHVtIHZh bHVlcyBmb3IgcHVycG9zZXMgc3VjaCBhcyBNYXRlcmlhbGl6ZSBub2RlcywgaGFzaGpvaW4gYmF0 Y2gKKyAqIGZpbGVzLCBldGMuIEl0IGlzIGVzc2VudGlhbGx5IGEgZHVtYmVkLWRvd24gdmVyc2lv biBvZiB0dXBsZXNvcnQuYzsKKyAqIGl0IGRvZXMgbm8gc29ydGluZyBvZiB0dXBsZXMgYnV0IGNh biBvbmx5IHN0b3JlIGFuZCByZWd1cmdpdGF0ZSBhIHNlcXVlbmNlCisgKiBvZiB0dXBsZXMuICBI b3dldmVyLCBiZWNhdXNlIG5vIHNvcnQgaXMgcmVxdWlyZWQsIGl0IGlzIGFsbG93ZWQgdG8gc3Rh cnQKKyAqIHJlYWRpbmcgdGhlIHNlcXVlbmNlIGJlZm9yZSBpdCBoYXMgYWxsIGJlZW4gd3JpdHRl bi4KKyAqCisgKiBUaGlzIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgZm9yIGN1cnNvcnMsIGJlY2F1 c2UgaXQgYWxsb3dzIHJhbmRvbSBhY2Nlc3MKKyAqIHdpdGhpbiB0aGUgYWxyZWFkeS1zY2FubmVk IHBvcnRpb24gb2YgYSBxdWVyeSB3aXRob3V0IGhhdmluZyB0byBwcm9jZXNzCisgKiB0aGUgdW5k ZXJseWluZyBzY2FuIHRvIGNvbXBsZXRpb24uCiAgKgotICogVGhpcyBtb2R1bGUgaGFuZGxlcyB0 ZW1wb3Jhcnkgc3RvcmFnZSBvZiB0dXBsZXMgZm9yIHB1cnBvc2VzIHN1Y2gKLSAqIGFzIE1hdGVy aWFsaXplIG5vZGVzLCBoYXNoam9pbiBiYXRjaCBmaWxlcywgZXRjLiAgSXQgaXMgZXNzZW50aWFs bHkKLSAqIGEgZHVtYmVkLWRvd24gdmVyc2lvbiBvZiB0dXBsZXNvcnQuYzsgaXQgZG9lcyBubyBz b3J0aW5nIG9mIHR1cGxlcwotICogYnV0IGNhbiBvbmx5IHN0b3JlIGFuZCByZWd1cmdpdGF0ZSBh IHNlcXVlbmNlIG9mIHR1cGxlcy4gIEhvd2V2ZXIsCi0gKiBiZWNhdXNlIG5vIHNvcnQgaXMgcmVx dWlyZWQsIGl0IGlzIGFsbG93ZWQgdG8gc3RhcnQgcmVhZGluZyB0aGUgc2VxdWVuY2UKLSAqIGJl Zm9yZSBpdCBoYXMgYWxsIGJlZW4gd3JpdHRlbi4gIFRoaXMgaXMgcGFydGljdWxhcmx5IHVzZWZ1 bCBmb3IgY3Vyc29ycywKLSAqIGJlY2F1c2UgaXQgYWxsb3dzIHJhbmRvbSBhY2Nlc3Mgd2l0aGlu IHRoZSBhbHJlYWR5LXNjYW5uZWQgcG9ydGlvbiBvZgotICogYSBxdWVyeSB3aXRob3V0IGhhdmlu ZyB0byBwcm9jZXNzIHRoZSB1bmRlcmx5aW5nIHNjYW4gdG8gY29tcGxldGlvbi4KICAqIEFsc28s IGl0IGlzIHBvc3NpYmxlIHRvIHN1cHBvcnQgbXVsdGlwbGUgaW5kZXBlbmRlbnQgcmVhZCBwb2lu dGVycy4KICAqCiAgKiBBIHRlbXBvcmFyeSBmaWxlIGlzIHVzZWQgdG8gaGFuZGxlIHRoZSBkYXRh IGlmIGl0IGV4Y2VlZHMgdGhlCkBAIC02MSw2ICs2NCw4IEBACiAjaW5jbHVkZSAiZXhlY3V0b3Iv ZXhlY3V0b3IuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJzdG9yYWdlL2J1 ZmZpbGUuaCIKKyNpbmNsdWRlICJ1dGlscy9kYXR1bS5oIgorI2luY2x1ZGUgInV0aWxzL2xzeXNj YWNoZS5oIgogI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCiAjaW5jbHVkZSAidXRpbHMvcmVz b3duZXIuaCIKICNpbmNsdWRlICJ1dGlscy90dXBsZXN0b3JlLmgiCkBAIC0xMTYsMTYgKzEyMSwx NSBAQCBzdHJ1Y3QgVHVwbGVzdG9yZXN0YXRlCiAJQnVmRmlsZSAgICAqbXlmaWxlOwkJCS8qIHVu ZGVybHlpbmcgZmlsZSwgb3IgTlVMTCBpZiBub25lICovCiAJTWVtb3J5Q29udGV4dCBjb250ZXh0 OwkJLyogbWVtb3J5IGNvbnRleHQgZm9yIGhvbGRpbmcgdHVwbGVzICovCiAJUmVzb3VyY2VPd25l ciByZXNvd25lcjsJCS8qIHJlc293bmVyIGZvciBob2xkaW5nIHRlbXAgZmlsZXMgKi8KKwlPaWQJ CQlkYXR1bVR5cGU7CQkvKiBJbnZhbGlkT2lkIG9yIG9pZCBvZiBEYXR1bSdzIHRvIGJlIHN0b3Jl ZCAqLworCWludDE2CQlkYXR1bVR5cGVMZW47CS8qIHR5cGVsZW4gb2YgdGhhdCBEYXR1bSAqLwor CWJvb2wJCWRhdHVtVHlwZUJ5VmFsOyAvKiBieS12YWx1ZSBvZiB0aGF0IERhdHVtICovCiAKIAkv KgogCSAqIFRoZXNlIGZ1bmN0aW9uIHBvaW50ZXJzIGRlY291cGxlIHRoZSByb3V0aW5lcyB0aGF0 IG11c3Qga25vdyB3aGF0IGtpbmQKIAkgKiBvZiB0dXBsZSB3ZSBhcmUgaGFuZGxpbmcgZnJvbSB0 aGUgcm91dGluZXMgdGhhdCBkb24ndCBuZWVkIHRvIGtub3cgaXQuCiAJICogVGhleSBhcmUgc2V0 IHVwIGJ5IHRoZSB0dXBsZXN0b3JlX2JlZ2luX3h4eCByb3V0aW5lcy4KIAkgKgotCSAqIChBbHRo b3VnaCB0dXBsZXN0b3JlLmMgY3VycmVudGx5IG9ubHkgc3VwcG9ydHMgaGVhcCB0dXBsZXMsIEkn dmUgY29waWVkCi0JICogdGhpcyBwYXJ0IG9mIHR1cGxlc29ydC5jIHNvIHRoYXQgZXh0ZW5zaW9u IHRvIG90aGVyIGtpbmRzIG9mIG9iamVjdHMKLQkgKiB3aWxsIGJlIGVhc3kgaWYgaXQncyBldmVy IG5lZWRlZC4pCi0JICoKIAkgKiBGdW5jdGlvbiB0byBjb3B5IGEgc3VwcGxpZWQgaW5wdXQgdHVw bGUgaW50byBwYWxsb2MnZCBzcGFjZS4gKE5COiB3ZQogCSAqIGFzc3VtZSB0aGF0IGEgc2luZ2xl IHBmcmVlKCkgaXMgZW5vdWdoIHRvIHJlbGVhc2UgdGhlIHR1cGxlIGxhdGVyLCBzbwogCSAqIHRo ZSByZXByZXNlbnRhdGlvbiBtdXN0IGJlICJmbGF0IiBpbiBvbmUgcGFsbG9jIGNodW5rLikgc3Rh dGUtPmF2YWlsTWVtCkBAIC0xNTAsNiArMTU0LDEyIEBAIHN0cnVjdCBUdXBsZXN0b3Jlc3RhdGUK IAkgKi8KIAl2b2lkCSAgICooKnJlYWR0dXApIChUdXBsZXN0b3Jlc3RhdGUgKnN0YXRlLCB1bnNp Z25lZCBpbnQgbGVuKTsKIAorCS8qCisJICogRnVuY3Rpb24gdG8gZ2V0IGxlbmd0aCBvZiB0dXBs ZSBmcm9tIHRhcGUuIFVzZWQgdG8gcHJvdmlkZSAnbGVuJyBhcmd1bWVudAorCSAqIGZvciByZWFk dHVwIChzZWUgYWJvdmUpLgorCSAqLworCXVuc2lnbmVkIGludCgqbGVudHVwKSAoVHVwbGVzdG9y ZXN0YXRlICpzdGF0ZSwgYm9vbCBlb2ZPSyk7CisKIAkvKgogCSAqIFRoaXMgYXJyYXkgaG9sZHMg cG9pbnRlcnMgdG8gdHVwbGVzIGluIG1lbW9yeSBpZiB3ZSBhcmUgaW4gc3RhdGUgSU5NRU0uCiAJ ICogSW4gc3RhdGVzIFdSSVRFRklMRSBhbmQgUkVBREZJTEUgaXQncyBub3QgdXNlZC4KQEAgLTE4 Niw2ICsxOTYsNyBAQCBzdHJ1Y3QgVHVwbGVzdG9yZXN0YXRlCiAjZGVmaW5lIENPUFlUVVAoc3Rh dGUsdHVwKQkoKCooc3RhdGUpLT5jb3B5dHVwKSAoc3RhdGUsIHR1cCkpCiAjZGVmaW5lIFdSSVRF VFVQKHN0YXRlLHR1cCkgKCgqKHN0YXRlKS0+d3JpdGV0dXApIChzdGF0ZSwgdHVwKSkKICNkZWZp bmUgUkVBRFRVUChzdGF0ZSxsZW4pCSgoKihzdGF0ZSktPnJlYWR0dXApIChzdGF0ZSwgbGVuKSkK KyNkZWZpbmUgTEVOVFVQKHN0YXRlLGVvZk9LKQkoKCooc3RhdGUpLT5sZW50dXApIChzdGF0ZSwg ZW9mT0spKQogI2RlZmluZSBMQUNLTUVNKHN0YXRlKQkJKChzdGF0ZSktPmF2YWlsTWVtIDwgMCkK ICNkZWZpbmUgVVNFTUVNKHN0YXRlLGFtdCkJKChzdGF0ZSktPmF2YWlsTWVtIC09IChhbXQpKQog I2RlZmluZSBGUkVFTUVNKHN0YXRlLGFtdCkJKChzdGF0ZSktPmF2YWlsTWVtICs9IChhbXQpKQpA QCAtMTk0LDkgKzIwNSw5IEBAIHN0cnVjdCBUdXBsZXN0b3Jlc3RhdGUKICAqCiAgKiBOT1RFUyBh Ym91dCBvbi10YXBlIHJlcHJlc2VudGF0aW9uIG9mIHR1cGxlczoKICAqCi0gKiBXZSByZXF1aXJl IHRoZSBmaXJzdCAidW5zaWduZWQgaW50IiBvZiBhIHN0b3JlZCB0dXBsZSB0byBiZSB0aGUgdG90 YWwgc2l6ZQotICogb24tdGFwZSBvZiB0aGUgdHVwbGUsIGluY2x1ZGluZyBpdHNlbGYgKHNvIGl0 IGlzIG5ldmVyIHplcm8pLgotICogVGhlIHJlbWFpbmRlciBvZiB0aGUgc3RvcmVkIHR1cGxlCisg KiBJbiBjYXNlIG9mIHR1cGxlcyB3ZSB1c2UgZmlyc3QgInVuc2lnbmVkIGludCIgb2YgYSBzdG9y ZWQgdHVwbGUKKyAqIHRvIGJlIHRoZSB0b3RhbCBzaXplIG9uLXRhcGUgb2YgdGhlIHR1cGxlLCBp bmNsdWRpbmcgaXRzZWxmCisgKiAoc28gaXQgaXMgbmV2ZXIgemVybykuIFRoZSByZW1haW5kZXIg b2YgdGhlIHN0b3JlZCB0dXBsZQogICogbWF5IG9yIG1heSBub3QgbWF0Y2ggdGhlIGluLW1lbW9y eSByZXByZXNlbnRhdGlvbiBvZiB0aGUgdHVwbGUgLS0tCiAgKiBhbnkgY29udmVyc2lvbiBuZWVk ZWQgaXMgdGhlIGpvYiBvZiB0aGUgd3JpdGV0dXAgYW5kIHJlYWR0dXAgcm91dGluZXMuCiAgKgpA QCAtMjA3LDEwICsyMTgsMTMgQEAgc3RydWN0IFR1cGxlc3RvcmVzdGF0ZQogICogc3RhdGUtPmJh Y2t3YXJkIGlzIG5vdCBzZXQsIHRoZSB3cml0ZS9yZWFkIHJvdXRpbmVzIG1heSBvbWl0IHRoZSBl eHRyYQogICogbGVuZ3RoIHdvcmQuCiAgKgotICogd3JpdGV0dXAgaXMgZXhwZWN0ZWQgdG8gd3Jp dGUgYm90aCBsZW5ndGggd29yZHMgYXMgd2VsbCBhcyB0aGUgdHVwbGUKKyAqIEluIHRoZSBjYXNl IG9mIERhdHVtIHdpdGggY29uc3RhbnQgbGVuZ3RoLCBib3RoICJ1bnNpZ25lZCBpbnQiIGFyZSBv bWl0dGVkLgorICoKKyAqIHdyaXRldHVwIGlzIGV4cGVjdGVkIHRvIHdyaXRlIGJvdGggbGVuZ3Ro IHdvcmRzIGFuZCB0aGUgdHVwbGUKICAqIGRhdGEuICBXaGVuIHJlYWR0dXAgaXMgY2FsbGVkLCB0 aGUgdGFwZSBpcyBwb3NpdGlvbmVkIGp1c3QgYWZ0ZXIgdGhlCi0gKiBmcm9udCBsZW5ndGggd29y ZDsgcmVhZHR1cCBtdXN0IHJlYWQgdGhlIHR1cGxlIGRhdGEgYW5kIGFkdmFuY2UgcGFzdAotICog dGhlIGJhY2sgbGVuZ3RoIHdvcmQgKGlmIHByZXNlbnQpLgorICogZnJvbnQgbGVuZ3RoIHdvcmQg KGlmIGl0IGlzIG5vdCBvbWl0dGVkIGxpa2UgaW4gY2FzZSBvZiBjb250ZW50LXNpemUgRGF0dW0p OworICogcmVhZHR1cCBtdXN0IHJlYWQgdGhlIHR1cGxlIGRhdGEgYW5kIGFkdmFuY2UgcGFzdCB0 aGUgYmFjayBsZW5ndGggd29yZAorICogKGlmIHByZXNlbnQpLgogICoKICAqIFRoZSB3cml0ZS9y ZWFkIHJvdXRpbmVzIGNhbiBtYWtlIHVzZSBvZiB0aGUgdHVwbGUgZGVzY3JpcHRpb24gZGF0YQog ICogc3RvcmVkIGluIHRoZSBUdXBsZXN0b3Jlc3RhdGUgcmVjb3JkLCBpZiBuZWVkZWQuIFRoZXkg YXJlIGFsc28gZXhwZWN0ZWQKQEAgLTI0MiwxMSArMjU2LDE2IEBAIHN0YXRpYyBUdXBsZXN0b3Jl c3RhdGUgKnR1cGxlc3RvcmVfYmVnaW5fY29tbW9uKGludCBlZmxhZ3MsCiBzdGF0aWMgdm9pZCB0 dXBsZXN0b3JlX3B1dHR1cGxlX2NvbW1vbihUdXBsZXN0b3Jlc3RhdGUgKnN0YXRlLCB2b2lkICp0 dXBsZSk7CiBzdGF0aWMgdm9pZCBkdW1wdHVwbGVzKFR1cGxlc3RvcmVzdGF0ZSAqc3RhdGUpOwog c3RhdGljIHZvaWQgdHVwbGVzdG9yZV91cGRhdGVtYXgoVHVwbGVzdG9yZXN0YXRlICpzdGF0ZSk7 Ci1zdGF0aWMgdW5zaWduZWQgaW50IGdldGxlbihUdXBsZXN0b3Jlc3RhdGUgKnN0YXRlLCBib29s IGVvZk9LKTsKKworc3RhdGljIHVuc2lnbmVkIGludCBsZW50dXBfaGVhcChUdXBsZXN0b3Jlc3Rh dGUgKnN0YXRlLCBib29sIGVvZk9LKTsKIHN0YXRpYyB2b2lkICpjb3B5dHVwX2hlYXAoVHVwbGVz dG9yZXN0YXRlICpzdGF0ZSwgdm9pZCAqdHVwKTsKIHN0YXRpYyB2b2lkIHdyaXRldHVwX2hlYXAo VHVwbGVzdG9yZXN0YXRlICpzdGF0ZSwgdm9pZCAqdHVwKTsKIHN0YXRpYyB2b2lkICpyZWFkdHVw X2hlYXAoVHVwbGVzdG9yZXN0YXRlICpzdGF0ZSwgdW5zaWduZWQgaW50IGxlbik7CiAKK3N0YXRp YyB1bnNpZ25lZCBpbnQgbGVudHVwX2RhdHVtKFR1cGxlc3RvcmVzdGF0ZSAqc3RhdGUsIGJvb2wg ZW9mT0spOworc3RhdGljIHZvaWQgKmNvcHl0dXBfZGF0dW0oVHVwbGVzdG9yZXN0YXRlICpzdGF0 ZSwgdm9pZCAqZGF0dW0pOworc3RhdGljIHZvaWQgd3JpdGV0dXBfZGF0dW0oVHVwbGVzdG9yZXN0 YXRlICpzdGF0ZSwgdm9pZCAqZGF0dW0pOworc3RhdGljIHZvaWQgKnJlYWR0dXBfZGF0dW0oVHVw bGVzdG9yZXN0YXRlICpzdGF0ZSwgdW5zaWduZWQgaW50IGxlbik7CiAKIC8qCiAgKgkJdHVwbGVz dG9yZV9iZWdpbl94eHgKQEAgLTI2OSw2ICsyODgsMTIgQEAgdHVwbGVzdG9yZV9iZWdpbl9jb21t b24oaW50IGVmbGFncywgYm9vbCBpbnRlclhhY3QsIGludCBtYXhLQnl0ZXMpCiAJc3RhdGUtPmFs bG93ZWRNZW0gPSBtYXhLQnl0ZXMgKiAoaW50NjQpIDEwMjQ7CiAJc3RhdGUtPmF2YWlsTWVtID0g c3RhdGUtPmFsbG93ZWRNZW07CiAJc3RhdGUtPm15ZmlsZSA9IE5VTEw7CisJLyoKKwkgKiBTZXQg RGF0dW0gcmVsYXRlZCBkYXRhIHRvIGludmFsaWQgYnkgZGVmYXVsdC4KKwkgKi8KKwlzdGF0ZS0+ ZGF0dW1UeXBlID0gSW52YWxpZE9pZDsKKwlzdGF0ZS0+ZGF0dW1UeXBlTGVuID0gMDsKKwlzdGF0 ZS0+ZGF0dW1UeXBlQnlWYWwgPSBmYWxzZTsKIAogCS8qCiAJICogVGhlIHBhbGxvYy9wZnJlZSBw YXR0ZXJuIGZvciB0dXBsZSBtZW1vcnkgaXMgaW4gYSBGSUZPIHBhdHRlcm4uICBBCkBAIC0zNDYs NiArMzcxLDM3IEBAIHR1cGxlc3RvcmVfYmVnaW5faGVhcChib29sIHJhbmRvbUFjY2VzcywgYm9v bCBpbnRlclhhY3QsIGludCBtYXhLQnl0ZXMpCiAJc3RhdGUtPmNvcHl0dXAgPSBjb3B5dHVwX2hl YXA7CiAJc3RhdGUtPndyaXRldHVwID0gd3JpdGV0dXBfaGVhcDsKIAlzdGF0ZS0+cmVhZHR1cCA9 IHJlYWR0dXBfaGVhcDsKKwlzdGF0ZS0+bGVudHVwID0gbGVudHVwX2hlYXA7CisKKwlyZXR1cm4g c3RhdGU7Cit9CisKKy8qCisgKiBUaGUgc2FtZSBhcyB0dXBsZXN0b3JlX2JlZ2luX2hlYXAgYnV0 IGNyZWF0ZSBzdG9yZSBmb3IgRGF0dW0gdmFsdWVzLgorICovCitUdXBsZXN0b3Jlc3RhdGUgKgor dHVwbGVzdG9yZV9iZWdpbl9kYXR1bShPaWQgZGF0dW1UeXBlLCBib29sIHJhbmRvbUFjY2Vzcywg Ym9vbCBpbnRlclhhY3QsIGludCBtYXhLQnl0ZXMpCit7CisJVHVwbGVzdG9yZXN0YXRlICpzdGF0 ZTsKKwlpbnQJCQllZmxhZ3M7CisKKwkvKgorCSAqIFRoaXMgaW50ZXJwcmV0YXRpb24gb2YgdGhl IG1lYW5pbmcgb2YgcmFuZG9tQWNjZXNzIGlzIGNvbXBhdGlibGUgd2l0aAorCSAqIHRoZSBwcmUt OC4zIGJlaGF2aW9yIG9mIHR1cGxlc3RvcmVzLgorCSAqLworCWVmbGFncyA9IHJhbmRvbUFjY2Vz cyA/CisJCShFWEVDX0ZMQUdfQkFDS1dBUkQgfCBFWEVDX0ZMQUdfUkVXSU5EKSA6CisJCShFWEVD X0ZMQUdfUkVXSU5EKTsKKworCXN0YXRlID0gdHVwbGVzdG9yZV9iZWdpbl9jb21tb24oZWZsYWdz LCBpbnRlclhhY3QsIG1heEtCeXRlcyk7CisJc3RhdGUtPmRhdHVtVHlwZSA9IGRhdHVtVHlwZTsK KwlnZXRfdHlwbGVuYnl2YWwoc3RhdGUtPmRhdHVtVHlwZSwgJnN0YXRlLT5kYXR1bVR5cGVMZW4s ICZzdGF0ZS0+ZGF0dW1UeXBlQnlWYWwpOworCUFzc2VydCghKHN0YXRlLT5kYXR1bVR5cGVCeVZh bCAmJiByYW5kb21BY2Nlc3MpKTsKKworCXN0YXRlLT5jb3B5dHVwID0gY29weXR1cF9kYXR1bTsK KwlzdGF0ZS0+d3JpdGV0dXAgPSB3cml0ZXR1cF9kYXR1bTsKKwlzdGF0ZS0+cmVhZHR1cCA9IHJl YWR0dXBfZGF0dW07CisJc3RhdGUtPmxlbnR1cCA9IGxlbnR1cF9kYXR1bTsKIAogCXJldHVybiBz dGF0ZTsKIH0KQEAgLTQ0NCwxNiArNTAwLDE5IEBAIHR1cGxlc3RvcmVfY2xlYXIoVHVwbGVzdG9y ZXN0YXRlICpzdGF0ZSkKIAl7CiAJCWludDY0CQlhdmFpbE1lbSA9IHN0YXRlLT5hdmFpbE1lbTsK IAotCQkvKgotCQkgKiBCZWxvdywgd2UgcmVzZXQgdGhlIG1lbW9yeSBjb250ZXh0IGZvciBzdG9y aW5nIHR1cGxlcy4gIFRvIHNhdmUKLQkJICogZnJvbSBoYXZpbmcgdG8gYWx3YXlzIGNhbGwgR2V0 TWVtb3J5Q2h1bmtTcGFjZSgpIG9uIGFsbCBzdG9yZWQKLQkJICogdHVwbGVzLCB3ZSBhZGp1c3Qg dGhlIGF2YWlsTWVtIHRvIGZvcmdldCBhbGwgdGhlIHR1cGxlcyBhbmQganVzdAotCQkgKiByZWNh bGwgVVNFTUVNIGZvciB0aGUgc3BhY2UgdXNlZCBieSB0aGUgbWVtdHVwbGVzIGFycmF5LiAgSGVy ZSB3ZQotCQkgKiBqdXN0IEFzc2VydCB0aGF0J3MgY29ycmVjdCBhbmQgdGhlIG1lbW9yeSB0cmFj a2luZyBoYXNuJ3QgZ29uZQotCQkgKiB3cm9uZyBhbnl3aGVyZS4KLQkJICovCi0JCWZvciAoaSA9 IHN0YXRlLT5tZW10dXBkZWxldGVkOyBpIDwgc3RhdGUtPm1lbXR1cGNvdW50OyBpKyspCi0JCQlh dmFpbE1lbSArPSBHZXRNZW1vcnlDaHVua1NwYWNlKHN0YXRlLT5tZW10dXBsZXNbaV0pOworCQlp ZiAoIXN0YXRlLT5kYXR1bVR5cGVCeVZhbCkKKwkJeworCQkJLyoKKwkJCSAqIEJlbG93LCB3ZSBy ZXNldCB0aGUgbWVtb3J5IGNvbnRleHQgZm9yIHN0b3JpbmcgdHVwbGVzLiAgVG8gc2F2ZQorCQkJ ICogZnJvbSBoYXZpbmcgdG8gYWx3YXlzIGNhbGwgR2V0TWVtb3J5Q2h1bmtTcGFjZSgpIG9uIGFs bCBzdG9yZWQKKwkJCSAqIHR1cGxlcywgd2UgYWRqdXN0IHRoZSBhdmFpbE1lbSB0byBmb3JnZXQg YWxsIHRoZSB0dXBsZXMgYW5kIGp1c3QKKwkJCSAqIHJlY2FsbCBVU0VNRU0gZm9yIHRoZSBzcGFj ZSB1c2VkIGJ5IHRoZSBtZW10dXBsZXMgYXJyYXkuICBIZXJlIHdlCisJCQkgKiBqdXN0IEFzc2Vy dCB0aGF0J3MgY29ycmVjdCBhbmQgdGhlIG1lbW9yeSB0cmFja2luZyBoYXNuJ3QgZ29uZQorCQkJ ICogd3JvbmcgYW55d2hlcmUuCisJCQkgKi8KKwkJCWZvciAoaSA9IHN0YXRlLT5tZW10dXBkZWxl dGVkOyBpIDwgc3RhdGUtPm1lbXR1cGNvdW50OyBpKyspCisJCQkJYXZhaWxNZW0gKz0gR2V0TWVt b3J5Q2h1bmtTcGFjZShzdGF0ZS0+bWVtdHVwbGVzW2ldKTsKKwkJfQogCiAJCWF2YWlsTWVtICs9 IEdldE1lbW9yeUNodW5rU3BhY2Uoc3RhdGUtPm1lbXR1cGxlcyk7CiAKQEAgLTc3Nyw2ICs4MzYs MjUgQEAgdHVwbGVzdG9yZV9wdXR0dXBsZShUdXBsZXN0b3Jlc3RhdGUgKnN0YXRlLCBIZWFwVHVw bGUgdHVwbGUpCiAJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGN4dCk7CiB9CiAKKy8qCisgKiBM aWtlIHR1cGxlc3RvcmVfcHV0dHVwbGVzbG90IGJ1dCBmb3Igc2luZ2xlIERhdHVtLgorICovCit2 b2lkCit0dXBsZXN0b3JlX3B1dGRhdHVtKFR1cGxlc3RvcmVzdGF0ZSAqc3RhdGUsIERhdHVtIGRh dHVtKQoreworCU1lbW9yeUNvbnRleHQgb2xkY3h0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKHN0 YXRlLT5jb250ZXh0KTsKKworCS8qCisJICogQ29weSB0aGUgRGF0dW0uICAoTXVzdCBkbyB0aGlz IGV2ZW4gaW4gV1JJVEVGSUxFIGNhc2UuICBOb3RlIHRoYXQKKwkgKiBDT1BZVFVQIGluY2x1ZGVz IFVTRU1FTSwgc28gd2UgbmVlZG4ndCBkbyB0aGF0IGhlcmUuKQorCSAqLworCWRhdHVtID0gUG9p bnRlckdldERhdHVtKENPUFlUVVAoc3RhdGUsIERhdHVtR2V0UG9pbnRlcihkYXR1bSkpKTsKKwor CXR1cGxlc3RvcmVfcHV0dHVwbGVfY29tbW9uKHN0YXRlLCBEYXR1bUdldFBvaW50ZXIoZGF0dW0p KTsKKworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjeHQpOworfQorCiAvKgogICogU2ltaWxh ciB0byB0dXBsZXN0b3JlX3B1dHR1cGxlKCksIGJ1dCB3b3JrIGZyb20gdmFsdWVzICsgbnVsbHMg YXJyYXlzLgogICogVGhpcyBhdm9pZHMgYW4gZXh0cmEgdHVwbGUtY29uc3RydWN0aW9uIG9wZXJh dGlvbi4KQEAgLTEwMjgsMTAgKzExMDYsMTAgQEAgdHVwbGVzdG9yZV9nZXR0dXBsZShUdXBsZXN0 b3Jlc3RhdGUgKnN0YXRlLCBib29sIGZvcndhcmQsCiAJCQlwZ19mYWxsdGhyb3VnaDsKIAogCQlj YXNlIFRTU19SRUFERklMRToKLQkJCSpzaG91bGRfZnJlZSA9IHRydWU7CisJCQkqc2hvdWxkX2Zy ZWUgPSAhc3RhdGUtPmRhdHVtVHlwZUJ5VmFsOwogCQkJaWYgKGZvcndhcmQpCiAJCQl7Ci0JCQkJ aWYgKCh0dXBsZW4gPSBnZXRsZW4oc3RhdGUsIHRydWUpKSAhPSAwKQorCQkJCWlmICgodHVwbGVu ID0gTEVOVFVQKHN0YXRlLCB0cnVlKSkgIT0gMCkKIAkJCQl7CiAJCQkJCXR1cCA9IFJFQURUVVAo c3RhdGUsIHR1cGxlbik7CiAJCQkJCXJldHVybiB0dXA7CkBAIC0xMDQzLDYgKzExMjEsNyBAQCB0 dXBsZXN0b3JlX2dldHR1cGxlKFR1cGxlc3RvcmVzdGF0ZSAqc3RhdGUsIGJvb2wgZm9yd2FyZCwK IAkJCQl9CiAJCQl9CiAKKwkJCUFzc2VydCghc3RhdGUtPmRhdHVtVHlwZUJ5VmFsKTsKIAkJCS8q CiAJCQkgKiBCYWNrd2FyZC4KIAkJCSAqCkBAIC0xMDYwLDcgKzExMzksNyBAQCB0dXBsZXN0b3Jl X2dldHR1cGxlKFR1cGxlc3RvcmVzdGF0ZSAqc3RhdGUsIGJvb2wgZm9yd2FyZCwKIAkJCQlBc3Nl cnQoIXN0YXRlLT50cnVuY2F0ZWQpOwogCQkJCXJldHVybiBOVUxMOwogCQkJfQotCQkJdHVwbGVu ID0gZ2V0bGVuKHN0YXRlLCBmYWxzZSk7CisJCQl0dXBsZW4gPSBMRU5UVVAoc3RhdGUsIGZhbHNl KTsKIAogCQkJaWYgKHJlYWRwdHItPmVvZl9yZWFjaGVkKQogCQkJewpAQCAtMTA5MSw3ICsxMTcw LDcgQEAgdHVwbGVzdG9yZV9nZXR0dXBsZShUdXBsZXN0b3Jlc3RhdGUgKnN0YXRlLCBib29sIGZv cndhcmQsCiAJCQkJCUFzc2VydCghc3RhdGUtPnRydW5jYXRlZCk7CiAJCQkJCXJldHVybiBOVUxM OwogCQkJCX0KLQkJCQl0dXBsZW4gPSBnZXRsZW4oc3RhdGUsIGZhbHNlKTsKKwkJCQl0dXBsZW4g PSBMRU5UVVAoc3RhdGUsIGZhbHNlKTsKIAkJCX0KIAogCQkJLyoKQEAgLTExNTMsNiArMTIzMiw0 MSBAQCB0dXBsZXN0b3JlX2dldHR1cGxlc2xvdChUdXBsZXN0b3Jlc3RhdGUgKnN0YXRlLCBib29s IGZvcndhcmQsCiAJfQogfQogCitib29sCit0dXBsZXN0b3JlX2dldGRhdHVtKFR1cGxlc3RvcmVz dGF0ZSAqc3RhdGUsIGJvb2wgZm9yd2FyZCwKKwkJCQkJYm9vbCAqc2hvdWxkX2ZyZWUsIERhdHVt ICpyZXN1bHQpCit7CisJRGF0dW0gZGF0dW07CisJKnNob3VsZF9mcmVlID0gZmFsc2U7CisKKwlk YXR1bSA9IChEYXR1bSkgdHVwbGVzdG9yZV9nZXR0dXBsZShzdGF0ZSwgZm9yd2FyZCwgc2hvdWxk X2ZyZWUpOworCisJLyogRm9yIGJ5LXZhbHVlIGRhdHVtIHdlIG1heSByZWNlaXZlIHplcm8gYXMg dmFsaWQgdmFsdWUuICovCisJaWYgKHN0YXRlLT5kYXR1bVR5cGVCeVZhbCkKKwl7CisJCS8qIFJl dHVybiBmYWxzZSBvbmx5IG9uIEVPRiAqLworCQlpZiAoc3RhdGUtPnJlYWRwdHJzW3N0YXRlLT5h Y3RpdmVwdHJdLmVvZl9yZWFjaGVkKQorCQl7CisJCQkqcmVzdWx0ID0gUG9pbnRlckdldERhdHVt KE5VTEwpOworCQkJcmV0dXJuIGZhbHNlOworCQl9CisKKwkJKnJlc3VsdCA9IGRhdHVtOworCQly ZXR1cm4gdHJ1ZTsKKwl9CisKKwlpZiAoZGF0dW0pCisJeworCQkqcmVzdWx0ID0gZGF0dW07CisJ CXJldHVybiB0cnVlOworCX0KKwllbHNlCisJeworCQkqcmVzdWx0ID0gUG9pbnRlckdldERhdHVt KE5VTEwpOworCQlyZXR1cm4gZmFsc2U7CisJfQorfQorCiAvKgogICogdHVwbGVzdG9yZV9hZHZh bmNlIC0gZXhwb3J0ZWQgZnVuY3Rpb24gdG8gYWRqdXN0IHBvc2l0aW9uIHdpdGhvdXQgZmV0Y2hp bmcKICAqCkBAIC0xMTczLDEwICsxMjg3LDIwIEBAIHR1cGxlc3RvcmVfYWR2YW5jZShUdXBsZXN0 b3Jlc3RhdGUgKnN0YXRlLCBib29sIGZvcndhcmQpCiAJCQlwZnJlZSh0dXBsZSk7CiAJCXJldHVy biB0cnVlOwogCX0KLQllbHNlCisKKwkvKgorCSAqIEEgTlVMTCByZXR1cm4gbm9ybWFsbHkgbWVh bnMgZW5kLW9mLWRhdGEsIGJ1dCBmb3IgYnktdmFsdWUgZGF0dW0KKwkgKiBzdG9yZXMgYSB2YWxp ZCB6ZXJvLXZhbHVlZCBkYXR1bSAoZS5nLiwgZmFsc2UsIDApIGlzIGluZGlzdGluZ3Vpc2hhYmxl CisJICogZnJvbSBOVUxMIHZpYSBwb2ludGVyIGNoZWNrLiAgVXNlIGVvZl9yZWFjaGVkIHRvIGRp c3Rpbmd1aXNoLgorCSAqLworCWlmIChzdGF0ZS0+ZGF0dW1UeXBlQnlWYWwpCiAJewotCQlyZXR1 cm4gZmFsc2U7CisJCVRTUmVhZFBvaW50ZXIgKnJlYWRwdHIgPSAmc3RhdGUtPnJlYWRwdHJzW3N0 YXRlLT5hY3RpdmVwdHJdOworCisJCXJldHVybiAhcmVhZHB0ci0+ZW9mX3JlYWNoZWQ7CiAJfQor CisJcmV0dXJuIGZhbHNlOwogfQogCiAvKgpAQCAtMTIzOSw3ICsxMzYzLDEyIEBAIHR1cGxlc3Rv cmVfc2tpcHR1cGxlcyhUdXBsZXN0b3Jlc3RhdGUgKnN0YXRlLCBpbnQ2NCBudHVwbGVzLCBib29s IGZvcndhcmQpCiAJCQkJdHVwbGUgPSB0dXBsZXN0b3JlX2dldHR1cGxlKHN0YXRlLCBmb3J3YXJk LCAmc2hvdWxkX2ZyZWUpOwogCiAJCQkJaWYgKHR1cGxlID09IE5VTEwpCi0JCQkJCXJldHVybiBm YWxzZTsKKwkJCQl7CisJCQkJCS8qIFNlZSB0dXBsZXN0b3JlX2FkdmFuY2UgZm9yIHdoeSBwb2lu dGVyIGNoZWNrIGlzIGluc3VmZmljaWVudCAqLworCQkJCQlpZiAoIXN0YXRlLT5kYXR1bVR5cGVC eVZhbCB8fAorCQkJCQkJc3RhdGUtPnJlYWRwdHJzW3N0YXRlLT5hY3RpdmVwdHJdLmVvZl9yZWFj aGVkKQorCQkJCQkJcmV0dXJuIGZhbHNlOworCQkJCX0KIAkJCQlpZiAoc2hvdWxkX2ZyZWUpCiAJ CQkJCXBmcmVlKHR1cGxlKTsKIAkJCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOwpAQCAtMTQ2MSw4 ICsxNTkwLDExIEBAIHR1cGxlc3RvcmVfdHJpbShUdXBsZXN0b3Jlc3RhdGUgKnN0YXRlKQogCS8q IFJlbGVhc2Ugbm8tbG9uZ2VyLW5lZWRlZCB0dXBsZXMgKi8KIAlmb3IgKGkgPSBzdGF0ZS0+bWVt dHVwZGVsZXRlZDsgaSA8IG5yZW1vdmU7IGkrKykKIAl7Ci0JCUZSRUVNRU0oc3RhdGUsIEdldE1l bW9yeUNodW5rU3BhY2Uoc3RhdGUtPm1lbXR1cGxlc1tpXSkpOwotCQlwZnJlZShzdGF0ZS0+bWVt dHVwbGVzW2ldKTsKKwkJaWYgKCFzdGF0ZS0+ZGF0dW1UeXBlQnlWYWwpCisJCXsKKwkJCUZSRUVN RU0oc3RhdGUsIEdldE1lbW9yeUNodW5rU3BhY2Uoc3RhdGUtPm1lbXR1cGxlc1tpXSkpOworCQkJ cGZyZWUoc3RhdGUtPm1lbXR1cGxlc1tpXSk7CisJCX0KIAkJc3RhdGUtPm1lbXR1cGxlc1tpXSA9 IE5VTEw7CiAJfQogCXN0YXRlLT5tZW10dXBkZWxldGVkID0gbnJlbW92ZTsKQEAgLTE1NTcsMjUg KzE2ODksNiBAQCB0dXBsZXN0b3JlX2luX21lbW9yeShUdXBsZXN0b3Jlc3RhdGUgKnN0YXRlKQog CXJldHVybiAoc3RhdGUtPnN0YXR1cyA9PSBUU1NfSU5NRU0pOwogfQogCi0KLS8qCi0gKiBUYXBl IGludGVyZmFjZSByb3V0aW5lcwotICovCi0KLXN0YXRpYyB1bnNpZ25lZCBpbnQKLWdldGxlbihU dXBsZXN0b3Jlc3RhdGUgKnN0YXRlLCBib29sIGVvZk9LKQotewotCXVuc2lnbmVkIGludCBsZW47 Ci0Jc2l6ZV90CQluYnl0ZXM7Ci0KLQluYnl0ZXMgPSBCdWZGaWxlUmVhZE1heWJlRU9GKHN0YXRl LT5teWZpbGUsICZsZW4sIHNpemVvZihsZW4pLCBlb2ZPSyk7Ci0JaWYgKG5ieXRlcyA9PSAwKQot CQlyZXR1cm4gMDsKLQllbHNlCi0JCXJldHVybiBsZW47Ci19Ci0KLQogLyoKICAqIFJvdXRpbmVz IHNwZWNpYWxpemVkIGZvciBIZWFwVHVwbGUgY2FzZQogICoKQEAgLTE1ODYsNiArMTY5OSwxOSBA QCBnZXRsZW4oVHVwbGVzdG9yZXN0YXRlICpzdGF0ZSwgYm9vbCBlb2ZPSykKICAqIHRvIHdyaXRl IHRoYXQgc2VwYXJhdGVseS4KICAqLwogCitzdGF0aWMgdW5zaWduZWQgaW50CitsZW50dXBfaGVh cChUdXBsZXN0b3Jlc3RhdGUgKnN0YXRlLCBib29sIGVvZk9LKQoreworCXVuc2lnbmVkIGludCBs ZW47CisJc2l6ZV90CQluYnl0ZXM7CisKKwluYnl0ZXMgPSBCdWZGaWxlUmVhZE1heWJlRU9GKHN0 YXRlLT5teWZpbGUsICZsZW4sIHNpemVvZihsZW4pLCBlb2ZPSyk7CisJaWYgKG5ieXRlcyA9PSAw KQorCQlyZXR1cm4gMDsKKwllbHNlCisJCXJldHVybiBsZW47Cit9CisKIHN0YXRpYyB2b2lkICoK IGNvcHl0dXBfaGVhcChUdXBsZXN0b3Jlc3RhdGUgKnN0YXRlLCB2b2lkICp0dXApCiB7CkBAIC0x NjMyLDMgKzE3NTgsMTIyIEBAIHJlYWR0dXBfaGVhcChUdXBsZXN0b3Jlc3RhdGUgKnN0YXRlLCB1 bnNpZ25lZCBpbnQgbGVuKQogCQlCdWZGaWxlUmVhZEV4YWN0KHN0YXRlLT5teWZpbGUsICZ0dXBs ZW4sIHNpemVvZih0dXBsZW4pKTsKIAlyZXR1cm4gdHVwbGU7CiB9CisKKy8qCisgKiBSb3V0aW5l cyBzcGVjaWFsaXplZCBmb3IgRGF0dW0gY2FzZS4KKyAqCisgKiBIYW5kbGVzIGJvdGggZml4ZWQg YW5kIHZhcmlhYmxlLWxlbmd0aCBEYXR1bXMgZWZmaWNpZW50bHk6CisgKiAtIEZpeGVkLWxlbmd0 aCBhbmQgVmFyaWFibGUtbGVuZ3RoIGluY2x1ZGVzIGxlbmd0aCBwcmVmaXggKGFuZCBzdWZmaXgg aWYgYmFja3dhcmQgc2NhbikKKyAqIC0gQnktdmFsdWUgdHlwZXMgaGFuZGxlZCBpbmxpbmUgd2l0 aG91dCBleHRyYSBjb3B5aW5nLCBzdG9yaW5nIHNpbmdsZSBleHRyYSBieXRlCisgKiAgIFhYWDog Y29uc2lkZXIgcmVmYWN0b3JpbmcgdG8gYXZvaWQgaXQsIGN1cnJlbnRseSBuZWVkIGl0IGZvciBj b3JyZWN0IHJld2luZCBsb2dpYworICovCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK2xlbnR1cF9k YXR1bShUdXBsZXN0b3Jlc3RhdGUgKnN0YXRlLCBib29sIGVvZk9LKQoreworCXVuc2lnbmVkIGlu dCBsZW47CisJc2l6ZV90CQluYnl0ZXM7CisKKwlBc3NlcnQoc3RhdGUtPmRhdHVtVHlwZSAhPSBJ bnZhbGlkT2lkKTsKKworCWlmIChzdGF0ZS0+ZGF0dW1UeXBlQnlWYWwpCisJeworCQl1aW50OF90 CWp1bms7CisJCW5ieXRlcyA9IEJ1ZkZpbGVSZWFkTWF5YmVFT0Yoc3RhdGUtPm15ZmlsZSwgJmp1 bmssIHNpemVvZih1aW50OF90KSwgZW9mT0spOworCQlpZiAobmJ5dGVzID09IDApCisJCQlyZXR1 cm4gMDsKKwkJQXNzZXJ0KGp1bmsgPT0gKHVpbnQ4X3QpIHN0YXRlLT5kYXR1bVR5cGVMZW4pOwor CQlyZXR1cm4gc3RhdGUtPmRhdHVtVHlwZUxlbjsKKwl9CisKKwluYnl0ZXMgPSBCdWZGaWxlUmVh ZE1heWJlRU9GKHN0YXRlLT5teWZpbGUsICZsZW4sIHNpemVvZihsZW4pLCBlb2ZPSyk7CisJaWYg KG5ieXRlcyA9PSAwKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgdm9p ZCAqCitjb3B5dHVwX2RhdHVtKFR1cGxlc3RvcmVzdGF0ZSAqc3RhdGUsIHZvaWQgKmRhdHVtKQor eworCURhdHVtIGQ7CisJQXNzZXJ0KHN0YXRlLT5kYXR1bVR5cGUgIT0gSW52YWxpZE9pZCk7CisJ aWYgKHN0YXRlLT5kYXR1bVR5cGVCeVZhbCkKKwkJcmV0dXJuIERhdHVtR2V0UG9pbnRlcihQb2lu dGVyR2V0RGF0dW0oZGF0dW0pKTsKKworCWQgPSBkYXR1bUNvcHkoUG9pbnRlckdldERhdHVtKGRh dHVtKSwgc3RhdGUtPmRhdHVtVHlwZUJ5VmFsLCBzdGF0ZS0+ZGF0dW1UeXBlTGVuKTsKKwlVU0VN RU0oc3RhdGUsIEdldE1lbW9yeUNodW5rU3BhY2UoRGF0dW1HZXRQb2ludGVyKGQpKSk7CisJcmV0 dXJuIERhdHVtR2V0UG9pbnRlcihkKTsKK30KKworc3RhdGljIHZvaWQKK3dyaXRldHVwX2RhdHVt KFR1cGxlc3RvcmVzdGF0ZSAqc3RhdGUsIHZvaWQgKmRhdHVtKQoreworCUFzc2VydChzdGF0ZS0+ ZGF0dW1UeXBlICE9IEludmFsaWRPaWQpOworCWlmIChzdGF0ZS0+ZGF0dW1UeXBlQnlWYWwpCisJ eworCQl1aW50OF90IGp1bmsgPSBzdGF0ZS0+ZGF0dW1UeXBlTGVuOyAvKiBvdmVyZmxvdyBpcyBv ayAqLworCQlEYXR1bSB2OworCQlBc3NlcnQoc3RhdGUtPmRhdHVtVHlwZUxlbiA+IDApOworCisJ CS8qIGp1c3QgbWFya2VyIGJ5dGUgdXNlZCB0byB0cmFjayB0aGUgZW5kIG9mIGRhdGEgZm9yIHJl d2luZCBsb2dpYyAqLworCQlCdWZGaWxlV3JpdGUoc3RhdGUtPm15ZmlsZSwgJmp1bmssIHNpemVv ZihqdW5rKSk7CisJCXN0b3JlX2F0dF9ieXZhbCgmdiwgUG9pbnRlckdldERhdHVtKGRhdHVtKSwg c3RhdGUtPmRhdHVtVHlwZUxlbik7CisJCUJ1ZkZpbGVXcml0ZShzdGF0ZS0+bXlmaWxlLCAmdiwg c3RhdGUtPmRhdHVtVHlwZUxlbik7CisJCUFzc2VydCghc3RhdGUtPmJhY2t3YXJkKTsKKwl9CisJ ZWxzZQorCXsKKwkJdW5zaWduZWQgaW50IHNpemUgPSBzdGF0ZS0+ZGF0dW1UeXBlTGVuOworCQl1 bnNpZ25lZCBpbnQgdHVwbGVuOworCisJCWlmIChzdGF0ZS0+ZGF0dW1UeXBlTGVuIDwgMCkKKwkJ CXNpemUgPSBkYXR1bUdldFNpemUoUG9pbnRlckdldERhdHVtKGRhdHVtKSwgc3RhdGUtPmRhdHVt VHlwZUJ5VmFsLCBzdGF0ZS0+ZGF0dW1UeXBlTGVuKTsKKworCQkvKgorCQkgKiBJbmNsdWRlIHNp emVvZih1bnNpZ25lZCBpbnQpIGluIHRoZSBzdG9yZWQgbGVuZ3RoLCBtYXRjaGluZyB0aGUKKwkJ ICogY29udmVudGlvbiB1c2VkIGJ5IHdyaXRldHVwX2hlYXAuICBUaGUgYmFja3dhcmQtc2NhbiBz ZWVrCisJCSAqIGFyaXRobWV0aWMgaW4gdHVwbGVzdG9yZV9nZXR0dXBsZSBhc3N1bWVzIHRoaXMu CisJCSAqLworCQl0dXBsZW4gPSBzaXplICsgc2l6ZW9mKHVuc2lnbmVkIGludCk7CisJCUJ1ZkZp bGVXcml0ZShzdGF0ZS0+bXlmaWxlLCAmdHVwbGVuLCBzaXplb2YodHVwbGVuKSk7CisKKwkJQnVm RmlsZVdyaXRlKHN0YXRlLT5teWZpbGUsIGRhdHVtLCBzaXplKTsKKworCQkvKiBuZWVkIHRyYWls aW5nIGxlbmd0aCB3b3JkPyAqLworCQlpZiAoc3RhdGUtPmJhY2t3YXJkKQorCQkJQnVmRmlsZVdy aXRlKHN0YXRlLT5teWZpbGUsICZ0dXBsZW4sIHNpemVvZih0dXBsZW4pKTsKKworCQlGUkVFTUVN KHN0YXRlLCBHZXRNZW1vcnlDaHVua1NwYWNlKGRhdHVtKSk7CisJCXBmcmVlKGRhdHVtKTsKKwl9 Cit9CisKK3N0YXRpYyB2b2lkICoKK3JlYWR0dXBfZGF0dW0oVHVwbGVzdG9yZXN0YXRlICpzdGF0 ZSwgdW5zaWduZWQgaW50IGxlbikKK3sKKwlBc3NlcnQoc3RhdGUtPmRhdHVtVHlwZSAhPSBJbnZh bGlkT2lkKTsKKwlpZiAoc3RhdGUtPmRhdHVtVHlwZUJ5VmFsKQorCXsKKwkJRGF0dW0gZGF0dW07 CisKKwkJQXNzZXJ0KHN0YXRlLT5kYXR1bVR5cGVMZW4gPiAwKTsKKwkJQXNzZXJ0KGxlbiA9PSBz dGF0ZS0+ZGF0dW1UeXBlTGVuKTsKKwkJQnVmRmlsZVJlYWRFeGFjdChzdGF0ZS0+bXlmaWxlLCAm ZGF0dW0sIHN0YXRlLT5kYXR1bVR5cGVMZW4pOworCisJCUFzc2VydCghc3RhdGUtPmJhY2t3YXJk KTsKKwkJcmV0dXJuIERhdHVtR2V0UG9pbnRlcihmZXRjaF9hdHQoJmRhdHVtLCB0cnVlLCBzdGF0 ZS0+ZGF0dW1UeXBlTGVuKSk7CisJfQorCWVsc2UKKwl7CisJCXVuc2lnbmVkIGludCBkYXRhbGVu ID0gbGVuIC0gc2l6ZW9mKHVuc2lnbmVkIGludCk7CisJCURhdHVtICpkYXRhID0gcGFsbG9jKGRh dGFsZW4pOworCisJCUJ1ZkZpbGVSZWFkRXhhY3Qoc3RhdGUtPm15ZmlsZSwgZGF0YSwgZGF0YWxl bik7CisKKwkJLyogbmVlZCB0cmFpbGluZyBsZW5ndGggd29yZD8gKi8KKwkJaWYgKHN0YXRlLT5i YWNrd2FyZCkKKwkJCUJ1ZkZpbGVSZWFkRXhhY3Qoc3RhdGUtPm15ZmlsZSwgJmxlbiwgc2l6ZW9m KGxlbikpOworCisJCXJldHVybiBkYXRhOworCX0KK30KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L3V0aWxzL3R1cGxlc3RvcmUuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL3R1cGxlc3RvcmUuaAppbmRl eCAxYzA4ZTIxOWU4OS4uNjY1ZDZkNTc2MzUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxz L3R1cGxlc3RvcmUuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy90dXBsZXN0b3JlLmgKQEAgLTEs MTcgKzEsMTggQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICoKICAqIHR1cGxlc3RvcmUuaAotICoJ ICBHZW5lcmFsaXplZCByb3V0aW5lcyBmb3IgdGVtcG9yYXJ5IHR1cGxlIHN0b3JhZ2UuCisgKgkg IEdlbmVyYWxpemVkIHJvdXRpbmVzIGZvciB0ZW1wb3Jhcnkgc3RvcmFnZSBvZiB0dXBsZXMgYW5k IERhdHVtcy4KICAqCi0gKiBUaGlzIG1vZHVsZSBoYW5kbGVzIHRlbXBvcmFyeSBzdG9yYWdlIG9m IHR1cGxlcyBmb3IgcHVycG9zZXMgc3VjaAotICogYXMgTWF0ZXJpYWxpemUgbm9kZXMsIGhhc2hq b2luIGJhdGNoIGZpbGVzLCBldGMuICBJdCBpcyBlc3NlbnRpYWxseQotICogYSBkdW1iZWQtZG93 biB2ZXJzaW9uIG9mIHR1cGxlc29ydC5jOyBpdCBkb2VzIG5vIHNvcnRpbmcgb2YgdHVwbGVzCi0g KiBidXQgY2FuIG9ubHkgc3RvcmUgYW5kIHJlZ3VyZ2l0YXRlIGEgc2VxdWVuY2Ugb2YgdHVwbGVz LiAgSG93ZXZlciwKLSAqIGJlY2F1c2Ugbm8gc29ydCBpcyByZXF1aXJlZCwgaXQgaXMgYWxsb3dl ZCB0byBzdGFydCByZWFkaW5nIHRoZSBzZXF1ZW5jZQotICogYmVmb3JlIGl0IGhhcyBhbGwgYmVl biB3cml0dGVuLiAgVGhpcyBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIGZvciBjdXJzb3JzLAotICog YmVjYXVzZSBpdCBhbGxvd3MgcmFuZG9tIGFjY2VzcyB3aXRoaW4gdGhlIGFscmVhZHktc2Nhbm5l ZCBwb3J0aW9uIG9mCi0gKiBhIHF1ZXJ5IHdpdGhvdXQgaGF2aW5nIHRvIHByb2Nlc3MgdGhlIHVu ZGVybHlpbmcgc2NhbiB0byBjb21wbGV0aW9uLgotICogQWxzbywgaXQgaXMgcG9zc2libGUgdG8g c3VwcG9ydCBtdWx0aXBsZSBpbmRlcGVuZGVudCByZWFkIHBvaW50ZXJzLgorICogVGhpcyBtb2R1 bGUgaGFuZGxlcyB0ZW1wb3Jhcnkgc3RvcmFnZSBvZiBlaXRoZXIgdHVwbGVzIG9yIHNpbmdsZQor ICogRGF0dW0gdmFsdWVzIGZvciBwdXJwb3NlcyBzdWNoIGFzIE1hdGVyaWFsaXplIG5vZGVzLCBo YXNoam9pbiBiYXRjaAorICogZmlsZXMsIGV0Yy4gSXQgaXMgZXNzZW50aWFsbHkgYSBkdW1iZWQt ZG93biB2ZXJzaW9uIG9mIHR1cGxlc29ydC5jOworICogaXQgZG9lcyBubyBzb3J0aW5nIG9mIHR1 cGxlcyBidXQgY2FuIG9ubHkgc3RvcmUgYW5kIHJlZ3VyZ2l0YXRlIGEgc2VxdWVuY2UKKyAqIG9m IHR1cGxlcy4gIEhvd2V2ZXIsIGJlY2F1c2Ugbm8gc29ydCBpcyByZXF1aXJlZCwgaXQgaXMgYWxs b3dlZCB0byBzdGFydAorICogcmVhZGluZyB0aGUgc2VxdWVuY2UgYmVmb3JlIGl0IGhhcyBhbGwg YmVlbiB3cml0dGVuLgorICoKKyAqIFRoaXMgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCBmb3IgY3Vy c29ycywgYmVjYXVzZSBpdCBhbGxvd3MgcmFuZG9tIGFjY2VzcworICogd2l0aGluIHRoZSBhbHJl YWR5LXNjYW5uZWQgcG9ydGlvbiBvZiBhIHF1ZXJ5IHdpdGhvdXQgaGF2aW5nIHRvIHByb2Nlc3MK KyAqIHRoZSB1bmRlcmx5aW5nIHNjYW4gdG8gY29tcGxldGlvbi4KICAqCiAgKiBBIHRlbXBvcmFy eSBmaWxlIGlzIHVzZWQgdG8gaGFuZGxlIHRoZSBkYXRhIGlmIGl0IGV4Y2VlZHMgdGhlCiAgKiBz cGFjZSBsaW1pdCBzcGVjaWZpZWQgYnkgdGhlIGNhbGxlci4KQEAgLTM5LDE0ICs0MCwxMyBAQAog ICovCiB0eXBlZGVmIHN0cnVjdCBUdXBsZXN0b3Jlc3RhdGUgVHVwbGVzdG9yZXN0YXRlOwogCi0v KgotICogQ3VycmVudGx5IHdlIG9ubHkgbmVlZCB0byBzdG9yZSBNaW5pbWFsVHVwbGVzLCBidXQg aXQgd291bGQgYmUgZWFzeQotICogdG8gc3VwcG9ydCB0aGUgc2FtZSBiZWhhdmlvciBmb3IgSW5k ZXhUdXBsZXMgYW5kL29yIGJhcmUgRGF0dW1zLgotICovCi0KIGV4dGVybiBUdXBsZXN0b3Jlc3Rh dGUgKnR1cGxlc3RvcmVfYmVnaW5faGVhcChib29sIHJhbmRvbUFjY2VzcywKIAkJCQkJCQkJCQkJ ICBib29sIGludGVyWGFjdCwKIAkJCQkJCQkJCQkJICBpbnQgbWF4S0J5dGVzKTsKK2V4dGVybiBU dXBsZXN0b3Jlc3RhdGUgKnR1cGxlc3RvcmVfYmVnaW5fZGF0dW0oT2lkIGRhdHVtVHlwZSwKKwkJ CQkJCQkJCQkJICAgYm9vbCByYW5kb21BY2Nlc3MsCisJCQkJCQkJCQkJCSAgIGJvb2wgaW50ZXJY YWN0LAorCQkJCQkJCQkJCQkgICBpbnQgbWF4S0J5dGVzKTsKIAogZXh0ZXJuIHZvaWQgdHVwbGVz dG9yZV9zZXRfZWZsYWdzKFR1cGxlc3RvcmVzdGF0ZSAqc3RhdGUsIGludCBlZmxhZ3MpOwogCkBA IC01NSw2ICs1NSw3IEBAIGV4dGVybiB2b2lkIHR1cGxlc3RvcmVfcHV0dHVwbGVzbG90KFR1cGxl c3RvcmVzdGF0ZSAqc3RhdGUsCiBleHRlcm4gdm9pZCB0dXBsZXN0b3JlX3B1dHR1cGxlKFR1cGxl c3RvcmVzdGF0ZSAqc3RhdGUsIEhlYXBUdXBsZSB0dXBsZSk7CiBleHRlcm4gdm9pZCB0dXBsZXN0 b3JlX3B1dHZhbHVlcyhUdXBsZXN0b3Jlc3RhdGUgKnN0YXRlLCBUdXBsZURlc2MgdGRlc2MsCiAJ CQkJCQkJCSBjb25zdCBEYXR1bSAqdmFsdWVzLCBjb25zdCBib29sICppc251bGwpOworZXh0ZXJu IHZvaWQgdHVwbGVzdG9yZV9wdXRkYXR1bShUdXBsZXN0b3Jlc3RhdGUgKnN0YXRlLCBEYXR1bSBk YXR1bSk7CiAKIGV4dGVybiBpbnQJdHVwbGVzdG9yZV9hbGxvY19yZWFkX3BvaW50ZXIoVHVwbGVz dG9yZXN0YXRlICpzdGF0ZSwgaW50IGVmbGFncyk7CiAKQEAgLTcyLDYgKzczLDggQEAgZXh0ZXJu IGJvb2wgdHVwbGVzdG9yZV9pbl9tZW1vcnkoVHVwbGVzdG9yZXN0YXRlICpzdGF0ZSk7CiAKIGV4 dGVybiBib29sIHR1cGxlc3RvcmVfZ2V0dHVwbGVzbG90KFR1cGxlc3RvcmVzdGF0ZSAqc3RhdGUs IGJvb2wgZm9yd2FyZCwKIAkJCQkJCQkJCWJvb2wgY29weSwgVHVwbGVUYWJsZVNsb3QgKnNsb3Qp OworZXh0ZXJuIGJvb2wgdHVwbGVzdG9yZV9nZXRkYXR1bShUdXBsZXN0b3Jlc3RhdGUgKnN0YXRl LCBib29sIGZvcndhcmQsCisJCQkJCQkJCWJvb2wgKnNob3VsZF9mcmVlLCBEYXR1bSAqcmVzdWx0 KTsKIAogZXh0ZXJuIGJvb2wgdHVwbGVzdG9yZV9hZHZhbmNlKFR1cGxlc3RvcmVzdGF0ZSAqc3Rh dGUsIGJvb2wgZm9yd2FyZCk7CiAKLS0gCjIuNDMuMAoK --0000000000009da2ac064db84911 Content-Type: application/octet-stream; name="v31-0002-Add-STIR-access-method-and-flags-related-to-auxi.patch" Content-Disposition: attachment; filename="v31-0002-Add-STIR-access-method-and-flags-related-to-auxi.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mn3ofxp31 RnJvbSAyYjFhNDIzMTc1Y2E2ODkzYjU2YmRhNjllMTgyN2U1OTVmMjJkZjVlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNaWtoYWlsIE5pa2FsYXlldSA8bWloYWlsbmlrYWxheWV1QGdt YWlsLmNvbT4KRGF0ZTogU3VuLCAxMSBKYW4gMjAyNiAxOToyNzo1MiArMDMwMApTdWJqZWN0OiBb UEFUQ0ggdjMxIDIvN10gQWRkIFNUSVIgYWNjZXNzIG1ldGhvZCBhbmQgZmxhZ3MgcmVsYXRlZCB0 byBhdXhpbGlhcnkKIGluZGV4ZXMKClRoaXMgcGF0Y2ggcHJvdmlkZXMgaW5mcmFzdHJ1Y3R1cmUg Zm9yIGZvbGxvd2luZyBlbmhhbmNlbWVudHMgdG8gY29uY3VycmVudCBpbmRleCBidWlsZHMgYnk6 Ci0gaWlfQXV4aWxpYXJ5IGluIEluZGV4SW5mbzogaW5kaWNhdGVzIHRoYXQgYW4gaW5kZXggaXMg YW4gYXV4aWxpYXJ5IGluZGV4IHVzZWQgZHVyaW5nIGNvbmN1cnJlbnQgaW5kZXggYnVpbGQKLSB2 YWxpZGF0ZV9pbmRleCBpbiBJbmRleFZhY3V1bUluZm86IHNldCBpZiBpbmRleF9idWxrX2RlbGV0 ZSBjYWxsZWQgZHVyaW5nIHRoZSB2YWxpZGF0aW9uIHBoYXNlIG9mIGNvbmN1cnJlbnQgaW5kZXgg YnVpbGQKLSBTVElSIChTaG9ydC1UZXJtIEluZGV4IFJlcGxhY2VtZW50KSBhY2Nlc3MgbWV0aG9k IGlzIGludHJvZHVjZWQsIGludGVuZGVkIHNvbGVseSBmb3Igc2hvcnQtbGl2ZWQsIGF1eGlsaWFy eSB1c2FnZQoKU1RJUiBmdW5jdGlvbnMgYXJlIGRlc2lnbmVkIGFzIGFuIGVwaGVtZXJhbCBoZWxw ZXIgZHVyaW5nIGNvbmN1cnJlbnQgaW5kZXggYnVpbGRzLCB0ZW1wb3JhcmlseSBzdG9yaW5nIFRJ RHMgd2l0aG91dCBwcm92aWRpbmcgdGhlIGZ1bGwgZmVhdHVyZXMgb2YgYSB0eXBpY2FsIGFjY2Vz cyBtZXRob2QuIEFzIHN1Y2gsIGl0IHJhaXNlcyB3YXJuaW5ncyBvciBlcnJvcnMgd2hlbiBhY2Nl c3NlZCBvdXRzaWRlIGl0cyBzcGVjaWFsaXplZCB1c2FnZSBwYXRoLgoKUGxhbm5lZCB0byBiZSB1 c2VkIGluIGZvbGxvd2luZyBjb21taXRzLgotLS0KIGNvbnRyaWIvcGdzdGF0dHVwbGUvcGdzdGF0 dHVwbGUuYyAgICAgICAgfCAgIDMgKwogc3JjL2JhY2tlbmQvYWNjZXNzL01ha2VmaWxlICAgICAg ICAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC92YWN1dW1sYXp5LmMgICAg IHwgICAyICsKIHNyYy9iYWNrZW5kL2FjY2Vzcy9tZXNvbi5idWlsZCAgICAgICAgICAgfCAgIDEg Kwogc3JjL2JhY2tlbmQvYWNjZXNzL3N0aXIvTWFrZWZpbGUgICAgICAgICB8ICAxOCArCiBzcmMv YmFja2VuZC9hY2Nlc3Mvc3Rpci9tZXNvbi5idWlsZCAgICAgIHwgICA1ICsKIHNyYy9iYWNrZW5k L2FjY2Vzcy9zdGlyL3N0aXIuYyAgICAgICAgICAgfCA1NjUgKysrKysrKysrKysrKysrKysrKysr KysKIHNyYy9iYWNrZW5kL2NhdGFsb2cvaW5kZXguYyAgICAgICAgICAgICAgfCAgIDEgKwogc3Jj L2JhY2tlbmQvY2F0YWxvZy90b2FzdGluZy5jICAgICAgICAgICB8ICAgMSArCiBzcmMvYmFja2Vu ZC9jb21tYW5kcy9hbmFseXplLmMgICAgICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL2NvbW1h bmRzL3ZhY3V1bXBhcmFsbGVsLmMgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvbm9kZXMvbWFrZWZ1 bmNzLmMgICAgICAgICAgICB8ICAgMSArCiBzcmMvaW5jbHVkZS9hY2Nlc3MvZ2VuYW0uaCAgICAg ICAgICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL2FjY2Vzcy9yZWxvcHRpb25zLmggICAgICAg ICAgfCAgIDMgKy0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9zdGlyLmggICAgICAgICAgICAgICAgfCAx MTMgKysrKysKIHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdfYW0uZGF0ICAgICAgICAgICAgfCAgIDMg Kwogc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19vcGNsYXNzLmRhdCAgICAgICB8ICAgNCArCiBzcmMv aW5jbHVkZS9jYXRhbG9nL3BnX29wZmFtaWx5LmRhdCAgICAgIHwgICAyICsKIHNyYy9pbmNsdWRl L2NhdGFsb2cvcGdfcHJvYy5kYXQgICAgICAgICAgfCAgIDQgKwogc3JjL2luY2x1ZGUvbm9kZXMv ZXhlY25vZGVzLmggICAgICAgICAgICB8ICAgNyArLQogc3JjL2luY2x1ZGUvdXRpbHMvaW5kZXhf c2VsZnVuY3MuaCAgICAgICB8ICAgOCArCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2FtdXRp bHMub3V0ICAgIHwgICA4ICstCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL29wcl9zYW5pdHku b3V0IHwgICA3ICstCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BzcWwub3V0ICAgICAgIHwg IDI0ICstCiAyNCBmaWxlcyBjaGFuZ2VkLCA3NjYgaW5zZXJ0aW9ucygrKSwgMTggZGVsZXRpb25z KC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tlbmQvYWNjZXNzL3N0aXIvTWFrZWZpbGUK IGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmFja2VuZC9hY2Nlc3Mvc3Rpci9tZXNvbi5idWlsZAog Y3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iYWNrZW5kL2FjY2Vzcy9zdGlyL3N0aXIuYwogY3JlYXRl IG1vZGUgMTAwNjQ0IHNyYy9pbmNsdWRlL2FjY2Vzcy9zdGlyLmgKCmRpZmYgLS1naXQgYS9jb250 cmliL3Bnc3RhdHR1cGxlL3Bnc3RhdHR1cGxlLmMgYi9jb250cmliL3Bnc3RhdHR1cGxlL3Bnc3Rh dHR1cGxlLmMKaW5kZXggNmE3ZjhjYjRhN2MuLjViNTk4NGUzYWEyIDEwMDY0NAotLS0gYS9jb250 cmliL3Bnc3RhdHR1cGxlL3Bnc3RhdHR1cGxlLmMKKysrIGIvY29udHJpYi9wZ3N0YXR0dXBsZS9w Z3N0YXR0dXBsZS5jCkBAIC0yODUsNiArMjg1LDkgQEAgcGdzdGF0X3JlbGF0aW9uKFJlbGF0aW9u IHJlbCwgRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8pCiAJCQljYXNlIFNQR0lTVF9BTV9PSUQ6CiAJ CQkJZXJyID0gInNwZ2lzdCBpbmRleCI7CiAJCQkJYnJlYWs7CisJCQljYXNlIFNUSVJfQU1fT0lE OgorCQkJCWVyciA9ICJzdGlyIGluZGV4IjsKKwkJCQlicmVhazsKIAkJCWNhc2UgQlJJTl9BTV9P SUQ6CiAJCQkJZXJyID0gImJyaW4gaW5kZXgiOwogCQkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvYWNjZXNzL01ha2VmaWxlIGIvc3JjL2JhY2tlbmQvYWNjZXNzL01ha2VmaWxlCmlu ZGV4IGU4OGQ3MmVhMDM5Li5lYmJjZmE5MDcxNSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNj ZXNzL01ha2VmaWxlCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9NYWtlZmlsZQpAQCAtMTksNiAr MTksNyBAQCBTVUJESVJTCSAgICA9IFwKIAluYnRyZWUgXAogCXJtZ3JkZXNjIFwKIAlzcGdpc3Qg XAorCXN0aXIgXAogCXNlcXVlbmNlIFwKIAl0YWJsZSBcCiAJdGFibGVzYW1wbGUgXApkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvdmFjdXVtbGF6eS5jIGIvc3JjL2JhY2tlbmQv YWNjZXNzL2hlYXAvdmFjdXVtbGF6eS5jCmluZGV4IDgyYzViMjhlMGFkLi5mMTc4NWI5YTQ1NiAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvdmFjdXVtbGF6eS5jCisrKyBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9oZWFwL3ZhY3V1bWxhenkuYwpAQCAtMzEzOCw2ICszMTM4LDcgQEAg bGF6eV92YWN1dW1fb25lX2luZGV4KFJlbGF0aW9uIGluZHJlbCwgSW5kZXhCdWxrRGVsZXRlUmVz dWx0ICppc3RhdCwKIAlpdmluZm8ubWVzc2FnZV9sZXZlbCA9IERFQlVHMjsKIAlpdmluZm8ubnVt X2hlYXBfdHVwbGVzID0gcmVsdHVwbGVzOwogCWl2aW5mby5zdHJhdGVneSA9IHZhY3JlbC0+YnN0 cmF0ZWd5OworCWl2aW5mby52YWxpZGF0ZV9pbmRleCA9IGZhbHNlOwogCiAJLyoKIAkgKiBVcGRh dGUgZXJyb3IgdHJhY2ViYWNrIGluZm9ybWF0aW9uLgpAQCAtMzE4OSw2ICszMTkwLDcgQEAgbGF6 eV9jbGVhbnVwX29uZV9pbmRleChSZWxhdGlvbiBpbmRyZWwsIEluZGV4QnVsa0RlbGV0ZVJlc3Vs dCAqaXN0YXQsCiAKIAlpdmluZm8ubnVtX2hlYXBfdHVwbGVzID0gcmVsdHVwbGVzOwogCWl2aW5m by5zdHJhdGVneSA9IHZhY3JlbC0+YnN0cmF0ZWd5OworCWl2aW5mby52YWxpZGF0ZV9pbmRleCA9 IGZhbHNlOwogCiAJLyoKIAkgKiBVcGRhdGUgZXJyb3IgdHJhY2ViYWNrIGluZm9ybWF0aW9uLgpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL21lc29uLmJ1aWxkIGIvc3JjL2JhY2tlbmQv YWNjZXNzL21lc29uLmJ1aWxkCmluZGV4IDVmZDE4ZGU3NGY5Li43MjE5YzY1ZjM2NSAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL21lc29uLmJ1aWxkCisrKyBiL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9tZXNvbi5idWlsZApAQCAtMTEsNiArMTEsNyBAQCBzdWJkaXIoJ25idHJlZScpCiBzdWJk aXIoJ3JtZ3JkZXNjJykKIHN1YmRpcignc2VxdWVuY2UnKQogc3ViZGlyKCdzcGdpc3QnKQorc3Vi ZGlyKCdzdGlyJykKIHN1YmRpcigndGFibGUnKQogc3ViZGlyKCd0YWJsZXNhbXBsZScpCiBzdWJk aXIoJ3RyYW5zYW0nKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3N0aXIvTWFrZWZp bGUgYi9zcmMvYmFja2VuZC9hY2Nlc3Mvc3Rpci9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMC4uODc4NWRhYjM3YmQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMv YmFja2VuZC9hY2Nlc3Mvc3Rpci9NYWtlZmlsZQpAQCAtMCwwICsxLDE4IEBACisjLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIworIyBNYWtlZmlsZS0tCisjICAgIE1ha2VmaWxlIGZvciBhY2Nlc3Mvc3Rpcgor IworIyBJREVOVElGSUNBVElPTgorIyAgICBzcmMvYmFja2VuZC9hY2Nlc3Mvc3Rpci9NYWtlZmls ZQorIworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworc3ViZGlyID0gc3JjL2JhY2tlbmQvYWNjZXNzL3N0 aXIKK3RvcF9idWlsZGRpciA9IC4uLy4uLy4uLy4uCitpbmNsdWRlICQodG9wX2J1aWxkZGlyKS9z cmMvTWFrZWZpbGUuZ2xvYmFsCisKK09CSlMgPSBcCisJc3Rpci5vCisKK2luY2x1ZGUgJCh0b3Bf c3JjZGlyKS9zcmMvYmFja2VuZC9jb21tb24ubWsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9zdGlyL21lc29uLmJ1aWxkIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3N0aXIvbWVzb24uYnVp bGQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjRiN2FkMTUzNDZjCi0t LSAvZGV2L251bGwKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3N0aXIvbWVzb24uYnVpbGQKQEAg LTAsMCArMSw1IEBACisjIENvcHlyaWdodCAoYykgMjAyNiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2 ZWxvcG1lbnQgR3JvdXAKKworYmFja2VuZF9zb3VyY2VzICs9IGZpbGVzKAorCSdzdGlyLmMnLAor KQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3N0aXIvc3Rpci5jIGIvc3JjL2JhY2tl bmQvYWNjZXNzL3N0aXIvc3Rpci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAwLi5mMjFiMjI5ZGU0MgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9z dGlyL3N0aXIuYwpAQCAtMCwwICsxLDU2NSBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICog c3Rpci5jCisgKgkgIEltcGxlbWVudGF0aW9uIG9mIFNob3J0LVRlcm0gSW5kZXggUmVwbGFjZW1l bnQuCisgKgorICogU1RJUiBpcyBhIHNwZWNpYWxpemVkIGFjY2VzcyBtZXRob2QgdHlwZSBkZXNp Z25lZCBmb3IgdGVtcG9yYXJ5IHN0b3JhZ2UKKyAqIG9mIFRJRCB2YWx1ZXMgZHVyaW5nIGNvbmN1 cnJlbnQgaW5kZXggYnVpbGQgb3BlcmF0aW9ucy4KKyAqCisgKiBUaGUgdHlwaWNhbCBsaWZlY3lj bGUgb2YgYSBTVElSIGluZGV4IGlzOgorICogMS4gY3JlYXRlZCBhcyBhbiBhdXhpbGlhcnkgaW5k ZXggZm9yIENJQy9SSUMKKyAqIDIuIGFjY2VwdHMgaW5zZXJ0cyBmb3IgYSBwZXJpb2QKKyAqIDMu IHN0aXJidWxrZGVsZXRlIGNhbGxlZCBkdXJpbmcgaW5kZXggdmFsaWRhdGlvbiBwaGFzZQorICog NC4gZ2V0cyBkcm9wcGVkCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDI2LCBQb3N0 Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqIElERU5USUZJQ0FUSU9OCisg KgkgIHNyYy9iYWNrZW5kL2FjY2Vzcy9zdGlyL3N0aXIuYworICoKKyAqLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorICovCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgImFjY2Vzcy9hbXZhbGlk YXRlLmgiCisjaW5jbHVkZSAiYWNjZXNzL2h0dXBfZGV0YWlscy5oIgorI2luY2x1ZGUgImFjY2Vz cy9zdGlyLmgiCisjaW5jbHVkZSAiYWNjZXNzL3RhYmxlYW0uaCIKKyNpbmNsdWRlICJjYXRhbG9n L2luZGV4LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19hbW9wLmgiCisjaW5jbHVkZSAiY2F0YWxv Zy9wZ19vcGNsYXNzLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19vcGZhbWlseS5oIgorI2luY2x1 ZGUgImNvbW1hbmRzL3ZhY3V1bS5oIgorI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgorI2luY2x1ZGUg InN0b3JhZ2UvYnVmbWdyLmgiCisjaW5jbHVkZSAidXRpbHMvY2F0Y2FjaGUuaCIKKyNpbmNsdWRl ICJ1dGlscy9mbWdycHJvdG9zLmgiCisjaW5jbHVkZSAidXRpbHMvaW5kZXhfc2VsZnVuY3MuaCIK KyNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgorI2luY2x1ZGUgInV0aWxzL3JlZ3Byb2MuaCIK KyNpbmNsdWRlICJ1dGlscy9zeXNjYWNoZS5oIgorCisvKgorICogU3RpciBoYW5kbGVyIGZ1bmN0 aW9uOiByZXR1cm4gSW5kZXhBbVJvdXRpbmUgd2l0aCBhY2Nlc3MgbWV0aG9kIHBhcmFtZXRlcnMK KyAqIGFuZCBjYWxsYmFja3MuCisgKi8KK0RhdHVtCitzdGlyaGFuZGxlcihQR19GVU5DVElPTl9B UkdTKQoreworCUluZGV4QW1Sb3V0aW5lICphbXJvdXRpbmUgPSBtYWtlTm9kZShJbmRleEFtUm91 dGluZSk7CisKKwkvKiBTZXQgU1RJUi1zcGVjaWZpYyBzdHJhdGVneSBhbmQgcHJvY2VkdXJlIG51 bWJlcnMgKi8KKwlhbXJvdXRpbmUtPmFtc3RyYXRlZ2llcyA9IFNUSVJfTlNUUkFURUdJRVM7CisJ YW1yb3V0aW5lLT5hbXN1cHBvcnQgPSBTVElSX05QUk9DOworCWFtcm91dGluZS0+YW1vcHRzcHJv Y251bSA9IFNUSVJfT1BUSU9OU19QUk9DOworCisJLyogU1RJUiBkb2Vzbid0IHN1cHBvcnQgbW9z dCBpbmRleCBvcGVyYXRpb25zICovCisJYW1yb3V0aW5lLT5hbWNhbm9yZGVyID0gZmFsc2U7CisJ YW1yb3V0aW5lLT5hbWNhbm9yZGVyYnlvcCA9IGZhbHNlOworCWFtcm91dGluZS0+YW1jYW5iYWNr d2FyZCA9IGZhbHNlOworCWFtcm91dGluZS0+YW1jYW51bmlxdWUgPSBmYWxzZTsKKwlhbXJvdXRp bmUtPmFtY2FubXVsdGljb2wgPSB0cnVlOworCWFtcm91dGluZS0+YW1vcHRpb25hbGtleSA9IHRy dWU7CisJYW1yb3V0aW5lLT5hbXNlYXJjaGFycmF5ID0gZmFsc2U7CisJYW1yb3V0aW5lLT5hbXNl YXJjaG51bGxzID0gZmFsc2U7CisJYW1yb3V0aW5lLT5hbXN0b3JhZ2UgPSBmYWxzZTsKKwlhbXJv dXRpbmUtPmFtY2x1c3RlcmFibGUgPSBmYWxzZTsKKwlhbXJvdXRpbmUtPmFtcHJlZGxvY2tzID0g ZmFsc2U7CisJYW1yb3V0aW5lLT5hbWNhbnBhcmFsbGVsID0gZmFsc2U7CisJYW1yb3V0aW5lLT5h bWNhbmJ1aWxkcGFyYWxsZWwgPSBmYWxzZTsKKwlhbXJvdXRpbmUtPmFtY2FuaW5jbHVkZSA9IHRy dWU7CisJYW1yb3V0aW5lLT5hbXVzZW1haW50ZW5hbmNld29ya21lbSA9IGZhbHNlOworCWFtcm91 dGluZS0+YW1wYXJhbGxlbHZhY3V1bW9wdGlvbnMgPSBWQUNVVU1fT1BUSU9OX05PX1BBUkFMTEVM OworCWFtcm91dGluZS0+YW1rZXl0eXBlID0gSW52YWxpZE9pZDsKKworCS8qIFNldCB1cCBmdW5j dGlvbiBjYWxsYmFja3MgKi8KKwlhbXJvdXRpbmUtPmFtYnVpbGQgPSBzdGlyYnVpbGQ7CisJYW1y b3V0aW5lLT5hbWJ1aWxkZW1wdHkgPSBzdGlyYnVpbGRlbXB0eTsKKwlhbXJvdXRpbmUtPmFtaW5z ZXJ0ID0gc3Rpcmluc2VydDsKKwlhbXJvdXRpbmUtPmFtaW5zZXJ0Y2xlYW51cCA9IE5VTEw7CisJ YW1yb3V0aW5lLT5hbWJ1bGtkZWxldGUgPSBzdGlyYnVsa2RlbGV0ZTsKKwlhbXJvdXRpbmUtPmFt dmFjdXVtY2xlYW51cCA9IHN0aXJ2YWN1dW1jbGVhbnVwOworCWFtcm91dGluZS0+YW1jYW5yZXR1 cm4gPSBOVUxMOworCWFtcm91dGluZS0+YW1jb3N0ZXN0aW1hdGUgPSBzdGlyY29zdGVzdGltYXRl OworCWFtcm91dGluZS0+YW1vcHRpb25zID0gc3Rpcm9wdGlvbnM7CisJYW1yb3V0aW5lLT5hbXBy b3BlcnR5ID0gTlVMTDsKKwlhbXJvdXRpbmUtPmFtYnVpbGRwaGFzZW5hbWUgPSBOVUxMOworCWFt cm91dGluZS0+YW12YWxpZGF0ZSA9IHN0aXJ2YWxpZGF0ZTsKKwlhbXJvdXRpbmUtPmFtYWRqdXN0 bWVtYmVycyA9IE5VTEw7CisJYW1yb3V0aW5lLT5hbWJlZ2luc2NhbiA9IHN0aXJiZWdpbnNjYW47 CisJYW1yb3V0aW5lLT5hbXJlc2NhbiA9IHN0aXJyZXNjYW47CisJYW1yb3V0aW5lLT5hbWdldHR1 cGxlID0gTlVMTDsKKwlhbXJvdXRpbmUtPmFtZ2V0Yml0bWFwID0gTlVMTDsKKwlhbXJvdXRpbmUt PmFtZW5kc2NhbiA9IHN0aXJlbmRzY2FuOworCWFtcm91dGluZS0+YW1tYXJrcG9zID0gTlVMTDsK KwlhbXJvdXRpbmUtPmFtcmVzdHJwb3MgPSBOVUxMOworCWFtcm91dGluZS0+YW1lc3RpbWF0ZXBh cmFsbGVsc2NhbiA9IE5VTEw7CisJYW1yb3V0aW5lLT5hbWluaXRwYXJhbGxlbHNjYW4gPSBOVUxM OworCWFtcm91dGluZS0+YW1wYXJhbGxlbHJlc2NhbiA9IE5VTEw7CisKKwlQR19SRVRVUk5fUE9J TlRFUihhbXJvdXRpbmUpOworfQorCisvKgorICogVmFsaWRhdGVzIG9wZXJhdG9yIGNsYXNzIGZv ciBTVElSIGluZGV4LgorICoKKyAqIFNUSVIgaXMgbm90IGEgcmVhbCBpbmRleCwgc28gdmFsaWRh dGUgbWF5IGJlIHNraXBwZWQuCisgKiBCdXQgd2UgZG8gaXQganVzdCBmb3IgY29uc2lzdGVuY3ku CisgKi8KK2Jvb2wKK3N0aXJ2YWxpZGF0ZShPaWQgb3BjbGFzc29pZCkKK3sKKwlib29sIHJlc3Vs dCA9IHRydWU7CisJSGVhcFR1cGxlIGNsYXNzdHVwOworCUZvcm1fcGdfb3BjbGFzcyBjbGFzc2Zv cm07CisJT2lkIG9wZmFtaWx5b2lkOworCUhlYXBUdXBsZSBmYW1pbHl0dXA7CisJRm9ybV9wZ19v cGZhbWlseSBmYW1pbHlmb3JtOworCWNoYXIgKm9wZmFtaWx5bmFtZTsKKwlDYXRDTGlzdCAqb3By bGlzdDsKKwlpbnQgaTsKKworCS8qIEZldGNoIG9wY2xhc3MgaW5mb3JtYXRpb24gKi8KKwljbGFz c3R1cCA9IFNlYXJjaFN5c0NhY2hlMShDTEFPSUQsIE9iamVjdElkR2V0RGF0dW0ob3BjbGFzc29p ZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChjbGFzc3R1cCkpCisJCWVsb2coRVJST1IsICJj YWNoZSBsb29rdXAgZmFpbGVkIGZvciBvcGVyYXRvciBjbGFzcyAldSIsIG9wY2xhc3NvaWQpOwor CWNsYXNzZm9ybSA9IChGb3JtX3BnX29wY2xhc3MpIEdFVFNUUlVDVChjbGFzc3R1cCk7CisKKwlv cGZhbWlseW9pZCA9IGNsYXNzZm9ybS0+b3BjZmFtaWx5OworCisJLyogRmV0Y2ggb3BmYW1pbHkg aW5mb3JtYXRpb24gKi8KKwlmYW1pbHl0dXAgPSBTZWFyY2hTeXNDYWNoZTEoT1BGQU1JTFlPSUQs IE9iamVjdElkR2V0RGF0dW0ob3BmYW1pbHlvaWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQo ZmFtaWx5dHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIG9wZXJh dG9yIGZhbWlseSAldSIsIG9wZmFtaWx5b2lkKTsKKwlmYW1pbHlmb3JtID0gKEZvcm1fcGdfb3Bm YW1pbHkpIEdFVFNUUlVDVChmYW1pbHl0dXApOworCisJb3BmYW1pbHluYW1lID0gTmFtZVN0cihm YW1pbHlmb3JtLT5vcGZuYW1lKTsKKworCS8qIEZldGNoIGFsbCBvcGVyYXRvcnMgYW5kIHN1cHBv cnQgZnVuY3Rpb25zIG9mIHRoZSBvcGZhbWlseSAqLworCW9wcmxpc3QgPSBTZWFyY2hTeXNDYWNo ZUxpc3QxKEFNT1BTVFJBVEVHWSwgT2JqZWN0SWRHZXREYXR1bShvcGZhbWlseW9pZCkpOworCisJ LyogQ2hlY2sgaW5kaXZpZHVhbCBvcGVyYXRvcnMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgb3BybGlz dC0+bl9tZW1iZXJzOyBpKyspCisJeworCQlIZWFwVHVwbGUgb3BydHVwID0gJm9wcmxpc3QtPm1l bWJlcnNbaV0tPnR1cGxlOworCQlGb3JtX3BnX2Ftb3Agb3ByZm9ybSA9IChGb3JtX3BnX2Ftb3Ap IEdFVFNUUlVDVChvcHJ0dXApOworCisJCS8qIENoZWNrIGl0J3MgYWxsb3dlZCBzdHJhdGVneSBm b3Igc3RpciAqLworCQlpZiAob3ByZm9ybS0+YW1vcHN0cmF0ZWd5IDwgMSB8fAorCQkJb3ByZm9y bS0+YW1vcHN0cmF0ZWd5ID4gU1RJUl9OU1RSQVRFR0lFUykKKwkJeworCQkJZXJlcG9ydChJTkZP LAorCQkJICAgICAgICAoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfT0JKRUNUX0RFRklOSVRJT04p LAorCQkJCSAgICAgICAgZXJybXNnKCJzdGlyIG9wZmFtaWx5ICVzIGNvbnRhaW5zIG9wZXJhdG9y ICVzIHdpdGggaW52YWxpZCBzdHJhdGVneSBudW1iZXIgJWQiLAorCQkJCQkgICAgICAgIG9wZmFt aWx5bmFtZSwKKwkJCQkJICAgICAgICBmb3JtYXRfb3BlcmF0b3Iob3ByZm9ybS0+YW1vcG9wciks CisJCQkJCSAgICAgICAgb3ByZm9ybS0+YW1vcHN0cmF0ZWd5KSkpOworCQkJcmVzdWx0ID0gZmFs c2U7CisJCX0KKworCQkvKiBzdGlyIGRvZXNuJ3Qgc3VwcG9ydCBPUkRFUiBCWSBvcGVyYXRvcnMg Ki8KKwkJaWYgKG9wcmZvcm0tPmFtb3BwdXJwb3NlICE9IEFNT1BfU0VBUkNIIHx8CisJCQlPaWRJ c1ZhbGlkKG9wcmZvcm0tPmFtb3Bzb3J0ZmFtaWx5KSkKKwkJeworCQkJZXJlcG9ydChJTkZPLAor CQkJICAgICAgICAoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfT0JKRUNUX0RFRklOSVRJT04pLAor CQkJCSAgICAgICAgZXJybXNnKCJzdGlyIG9wZmFtaWx5ICVzIGNvbnRhaW5zIGludmFsaWQgT1JE RVIgQlkgc3BlY2lmaWNhdGlvbiBmb3Igb3BlcmF0b3IgJXMiLAorCQkJCQkgICAgICAgIG9wZmFt aWx5bmFtZSwKKwkJCQkJICAgICAgICBmb3JtYXRfb3BlcmF0b3Iob3ByZm9ybS0+YW1vcG9wcikp KSk7CisJCQlyZXN1bHQgPSBmYWxzZTsKKwkJfQorCisJCS8qIENoZWNrIG9wZXJhdG9yIHNpZ25h dHVyZSAtLS0gc2FtZSBmb3IgYWxsIHN0aXIgc3RyYXRlZ2llcyAqLworCQlpZiAoIWNoZWNrX2Ft b3Bfc2lnbmF0dXJlKG9wcmZvcm0tPmFtb3BvcHIsIEJPT0xPSUQsCisJCSAgICAgICAgICAgICAg ICAgICAgICAgICAgb3ByZm9ybS0+YW1vcGxlZnR0eXBlLAorCQkgICAgICAgICAgICAgICAgICAg ICAgICAgIG9wcmZvcm0tPmFtb3ByaWdodHR5cGUpKQorCQl7CisJCQllcmVwb3J0KElORk8sCisJ CQkgICAgICAgIChlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9PQkpFQ1RfREVGSU5JVElPTiksCisJ CQkJICAgICAgICBlcnJtc2coInN0aXIgb3BmYW1pbHkgJXMgY29udGFpbnMgb3BlcmF0b3IgJXMg d2l0aCB3cm9uZyBzaWduYXR1cmUiLAorCQkJCQkgICAgICAgIG9wZmFtaWx5bmFtZSwKKwkJCQkJ ICAgICAgICBmb3JtYXRfb3BlcmF0b3Iob3ByZm9ybS0+YW1vcG9wcikpKSk7CisJCQlyZXN1bHQg PSBmYWxzZTsKKwkJfQorCX0KKworCVJlbGVhc2VDYXRDYWNoZUxpc3Qob3BybGlzdCk7CisJUmVs ZWFzZVN5c0NhY2hlKGZhbWlseXR1cCk7CisJUmVsZWFzZVN5c0NhY2hlKGNsYXNzdHVwKTsKKwor CXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBJbml0aWFsaXplIG1ldGEtcGFnZSBvZiBhIFNU SVIgaW5kZXguCisgKiBUaGUgc2tpcEluc2VydHMgZmxhZyBkZXRlcm1pbmVzIGlmIG5ldyBpbnNl cnRzIHdpbGwgYmUgYWNjZXB0ZWQgb3Igc2tpcHBlZC4KKyAqLwordm9pZAorU3RpckZpbGxNZXRh cGFnZShSZWxhdGlvbiBpbmRleCwgUGFnZSBtZXRhUGFnZSwgYm9vbCBza2lwSW5zZXJ0cykKK3sK KwlTdGlyTWV0YVBhZ2VEYXRhICptZXRhZGF0YTsKKworCVN0aXJJbml0UGFnZShtZXRhUGFnZSwg U1RJUl9NRVRBKTsKKwltZXRhZGF0YSA9IFN0aXJQYWdlR2V0TWV0YShtZXRhUGFnZSk7CisJbWVt c2V0KG1ldGFkYXRhLCAwLCBzaXplb2YoU3Rpck1ldGFQYWdlRGF0YSkpOworCW1ldGFkYXRhLT5t YWdpY051bWJlciA9IFNUSVJfTUFHSUNfTlVNQkVSOworCW1ldGFkYXRhLT5za2lwSW5zZXJ0cyA9 IHNraXBJbnNlcnRzOworCSgoUGFnZUhlYWRlcikgbWV0YVBhZ2UpLT5wZF9sb3dlciA9ICgoY2hh ciAqKSBtZXRhZGF0YSArIHNpemVvZihTdGlyTWV0YVBhZ2VEYXRhKSkgLSAoY2hhciAqKSBtZXRh UGFnZTsKK30KKworLyoKKyAqIENyZWF0ZSBhbmQgaW5pdGlhbGl6ZSB0aGUgbWV0YXBhZ2UgZm9y IGEgU1RJUiBpbmRleC4KKyAqIFRoaXMgaXMgY2FsbGVkIGR1cmluZyBpbmRleCBjcmVhdGlvbi4K KyAqLwordm9pZAorU3RpckluaXRNZXRhcGFnZShSZWxhdGlvbiBpbmRleCwgRm9ya051bWJlciBm b3JrbnVtKQoreworCUJ1ZmZlciBtZXRhQnVmZmVyOworCVBhZ2UgbWV0YVBhZ2U7CisKKwlBc3Nl cnQoIVJlbGF0aW9uTmVlZHNXQUwoaW5kZXgpKTsKKwkvKgorCSAqIE1ha2UgYSBuZXcgcGFnZTsg c2luY2UgaXQgaXMgdGhlIGZpcnN0IHBhZ2UgaXQgc2hvdWxkIGJlIGFzc29jaWF0ZWQgd2l0aAor CSAqIGJsb2NrIG51bWJlciAwIChTVElSX01FVEFQQUdFX0JMS05PKS4gIE5vIG5lZWQgdG8gaG9s ZCB0aGUgZXh0ZW5zaW9uCisJICogbG9jayBiZWNhdXNlIHRoZXJlIGNhbm5vdCBiZSBjb25jdXJy ZW50IGluc2VydGVycyB5ZXQuCisJICovCisJbWV0YUJ1ZmZlciA9IFJlYWRCdWZmZXJFeHRlbmRl ZChpbmRleCwgZm9ya251bSwgUF9ORVcsIFJCTV9OT1JNQUwsIE5VTEwpOworCUxvY2tCdWZmZXIo bWV0YUJ1ZmZlciwgQlVGRkVSX0xPQ0tfRVhDTFVTSVZFKTsKKwlTVEFSVF9DUklUX1NFQ1RJT04o KTsKKwlBc3NlcnQoQnVmZmVyR2V0QmxvY2tOdW1iZXIobWV0YUJ1ZmZlcikgPT0gU1RJUl9NRVRB UEFHRV9CTEtOTyk7CisKKwltZXRhUGFnZSA9IEJ1ZmZlckdldFBhZ2UobWV0YUJ1ZmZlcik7CisJ U3RpckZpbGxNZXRhcGFnZShpbmRleCwgbWV0YVBhZ2UsIGZvcmtudW0gPT0gSU5JVF9GT1JLTlVN KTsKKworCU1hcmtCdWZmZXJEaXJ0eShtZXRhQnVmZmVyKTsKKwlFTkRfQ1JJVF9TRUNUSU9OKCk7 CisJVW5sb2NrUmVsZWFzZUJ1ZmZlcihtZXRhQnVmZmVyKTsKK30KKworLyoKKyAqIEluaXRpYWxp emUgYW55IHBhZ2Ugb2YgYSBzdGlyIGluZGV4LgorICovCit2b2lkCitTdGlySW5pdFBhZ2UoUGFn ZSBwYWdlLCB1aW50MTYgZmxhZ3MpCit7CisJU3RpclBhZ2VPcGFxdWUgb3BhcXVlOworCisJUGFn ZUluaXQocGFnZSwgQkxDS1NaLCBzaXplb2YoU3RpclBhZ2VPcGFxdWVEYXRhKSk7CisKKwlvcGFx dWUgPSBTdGlyUGFnZUdldE9wYXF1ZShwYWdlKTsKKwlvcGFxdWUtPmZsYWdzID0gZmxhZ3M7CisJ b3BhcXVlLT5zdGlyX3BhZ2VfaWQgPSBTVElSX1BBR0VfSUQ7Cit9CisKKy8qCisgKiBBZGQgYSB0 dXBsZSB0byBhIFNUSVIgcGFnZS4gUmV0dXJucyBmYWxzZSBpZiB0aGUgdHVwbGUgZG9lc24ndCBm aXQuCisgKiBUaGUgdHVwbGUgaXMgYWRkZWQgdG8gdGhlIGVuZCBvZiB0aGUgcGFnZS4KKyAqLwor c3RhdGljIGJvb2wKK1N0aXJQYWdlQWRkSXRlbShQYWdlIHBhZ2UsIFN0aXJUdXBsZSAqdHVwbGUp Cit7CisJU3RpclR1cGxlICppdHVwOworCVN0aXJQYWdlT3BhcXVlIG9wYXF1ZTsKKwljaGFyICpw dHI7CisKKwkvKiBXZSBzaG91bGRuJ3QgYmUgcG9pbnRlZCB0byBhbiBpbnZhbGlkIHBhZ2UgKi8K KwlBc3NlcnQoIVBhZ2VJc05ldyhwYWdlKSk7CisKKwkvKiBEb2VzIHRoZSBuZXcgdHVwbGUgZml0 IG9uIHRoZSBwYWdlPyAqLworCWlmIChTdGlyUGFnZUdldEZyZWVTcGFjZShwYWdlKSA8IHNpemVv ZihTdGlyVHVwbGUpKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKiBDb3B5IGEgbmV3IHR1cGxlIHRv IHRoZSBlbmQgb2YgdGhlIHBhZ2UgKi8KKwlvcGFxdWUgPSBTdGlyUGFnZUdldE9wYXF1ZShwYWdl KTsKKwlpdHVwID0gU3RpclBhZ2VHZXRUdXBsZShwYWdlLCBvcGFxdWUtPm1heG9mZiArIDEpOwor CW1lbWNweShpdHVwLCB0dXBsZSwgc2l6ZW9mKFN0aXJUdXBsZSkpOworCisJLyogQWRqdXN0IG1h eG9mZiBhbmQgcGRfbG93ZXIgKi8KKwlvcGFxdWUtPm1heG9mZisrOworCXB0ciA9IChjaGFyICop IFN0aXJQYWdlR2V0VHVwbGUocGFnZSwgb3BhcXVlLT5tYXhvZmYgKyAxKTsKKwkoKFBhZ2VIZWFk ZXIpIHBhZ2UpLT5wZF9sb3dlciA9IHB0ciAtIHBhZ2U7CisKKwkvKiBBc3NlcnQgd2UgZGlkbid0 IG92ZXJydW4gYXZhaWxhYmxlIHNwYWNlICovCisJQXNzZXJ0KCgoUGFnZUhlYWRlcikgcGFnZSkt PnBkX2xvd2VyIDw9ICgoUGFnZUhlYWRlcikgcGFnZSktPnBkX3VwcGVyKTsKKwlyZXR1cm4gdHJ1 ZTsKK30KKworLyoKKyAqIEluc2VydCBhIG5ldyB0dXBsZSBpbnRvIGEgU1RJUiBpbmRleC4KKyAq LworYm9vbAorc3Rpcmluc2VydChSZWxhdGlvbiBpbmRleCwgRGF0dW0gKnZhbHVlcywgYm9vbCAq aXNudWxsLAorCQkgIEl0ZW1Qb2ludGVyIGh0X2N0aWQsIFJlbGF0aW9uIGhlYXBSZWwsCisJCSAg SW5kZXhVbmlxdWVDaGVjayBjaGVja1VuaXF1ZSwKKwkJICBib29sIGluZGV4VW5jaGFuZ2VkLAor CQkgIHN0cnVjdCBJbmRleEluZm8gKmluZGV4SW5mbykKK3sKKwlTdGlyVHVwbGUgaXR1cDsKKwlT dGlyTWV0YVBhZ2VEYXRhICptZXRhRGF0YTsKKwlCdWZmZXIgYnVmZmVyLAorCQkJbWV0YUJ1ZmZl cjsKKwlQYWdlIHBhZ2U7CisJQmxvY2tOdW1iZXIgYmxrTm87CisKKwlpdHVwLmhlYXBQdHIgPSAq aHRfY3RpZDsKKworCUFzc2VydCghUmVsYXRpb25OZWVkc1dBTChpbmRleCkpOworCW1ldGFCdWZm ZXIgPSBSZWFkQnVmZmVyKGluZGV4LCBTVElSX01FVEFQQUdFX0JMS05PKTsKKworCWZvciAoOzsp CisJeworCQlMb2NrQnVmZmVyKG1ldGFCdWZmZXIsIEJVRkZFUl9MT0NLX1NIQVJFKTsKKwkJbWV0 YURhdGEgPSBTdGlyUGFnZUdldE1ldGEoQnVmZmVyR2V0UGFnZShtZXRhQnVmZmVyKSk7CisJCS8q IENoZWNrIGlmIGluc2VydHMgYXJlIGFsbG93ZWQgKi8KKwkJaWYgKG1ldGFEYXRhLT5za2lwSW5z ZXJ0cykKKwkJeworCQkJVW5sb2NrUmVsZWFzZUJ1ZmZlcihtZXRhQnVmZmVyKTsKKwkJCXJldHVy biBmYWxzZTsKKwkJfQorCQlibGtObyA9IG1ldGFEYXRhLT5sYXN0QmxrTm87CisJCS8qIERvbid0 IGhvbGQgbWV0YWJ1ZmZlciBsb2NrIHdoaWxlIGRvaW5nIGluc2VydCAqLworCQlMb2NrQnVmZmVy KG1ldGFCdWZmZXIsIEJVRkZFUl9MT0NLX1VOTE9DSyk7CisKKwkJaWYgKGJsa05vID4gMCkKKwkJ eworCQkJYnVmZmVyID0gUmVhZEJ1ZmZlcihpbmRleCwgYmxrTm8pOworCQkJTG9ja0J1ZmZlcihi dWZmZXIsIEJVRkZFUl9MT0NLX0VYQ0xVU0lWRSk7CisJCQlTVEFSVF9DUklUX1NFQ1RJT04oKTsK KworCQkJcGFnZSA9IEJ1ZmZlckdldFBhZ2UoYnVmZmVyKTsKKworCQkJQXNzZXJ0KCFQYWdlSXNO ZXcocGFnZSkpOworCisJCQkvKiBUcnkgdG8gYWRkIHR1cGxlIHRvIHRoZSBleGlzdGluZyBwYWdl ICovCisJCQlpZiAoU3RpclBhZ2VBZGRJdGVtKHBhZ2UsICZpdHVwKSkKKwkJCXsKKwkJCQkvKiBT dWNjZXNzISAgQXBwbHkgdGhlIGNoYW5nZSwgY2xlYW4gdXAsIGFuZCBleGl0ICovCisJCQkJTWFy a0J1ZmZlckRpcnR5KGJ1ZmZlcik7CisJCQkJRU5EX0NSSVRfU0VDVElPTigpOworCisJCQkJVW5s b2NrUmVsZWFzZUJ1ZmZlcihidWZmZXIpOworCQkJCVJlbGVhc2VCdWZmZXIobWV0YUJ1ZmZlcik7 CisJCQkJcmV0dXJuIGZhbHNlOworCQkJfQorCisJCQlFTkRfQ1JJVF9TRUNUSU9OKCk7CisJCQlV bmxvY2tSZWxlYXNlQnVmZmVyKGJ1ZmZlcik7CisJCX0KKworCQkvKiBOZWVkIHRvIGFkZCBhIG5l dyBwYWdlIC0gZ2V0IGV4Y2x1c2l2ZSBsb2NrIG9uIG1ldGEtcGFnZSAqLworCQlMb2NrQnVmZmVy KG1ldGFCdWZmZXIsIEJVRkZFUl9MT0NLX0VYQ0xVU0lWRSk7CisKKwkJbWV0YURhdGEgPSBTdGly UGFnZUdldE1ldGEoQnVmZmVyR2V0UGFnZShtZXRhQnVmZmVyKSk7CisKKwkJLyogUmUtY2hlY2sg YWZ0ZXIgYWNxdWlyaW5nIGV4Y2x1c2l2ZSBsb2NrICovCisJCWlmIChtZXRhRGF0YS0+c2tpcElu c2VydHMpCisJCXsKKwkJCVVubG9ja1JlbGVhc2VCdWZmZXIobWV0YUJ1ZmZlcik7CisJCQlyZXR1 cm4gZmFsc2U7CisJCX0KKworCQkvKiBDaGVjayBpZiBhbm90aGVyIGJhY2tlbmQgYWxyZWFkeSBl eHRlbmRlZCB0aGUgaW5kZXggKi8KKwkJaWYgKGJsa05vICE9IG1ldGFEYXRhLT5sYXN0QmxrTm8p CisJCXsKKwkJCUFzc2VydChibGtObyA8IG1ldGFEYXRhLT5sYXN0QmxrTm8pOworCQkJLyogU29t ZW9uZSBlbHNlIGluc2VydGVkIHRoZSBuZXcgcGFnZSBpbnRvIHRoZSBpbmRleCwgbGV0J3MgdHJ5 IGFnYWluICovCisJCQlMb2NrQnVmZmVyKG1ldGFCdWZmZXIsIEJVRkZFUl9MT0NLX1VOTE9DSyk7 CisJCQljb250aW51ZTsKKwkJfQorCQllbHNlCisJCXsKKwkJCS8qIE11c3QgZXh0ZW5kIHRoZSBm aWxlICovCisJCQlidWZmZXIgPSBFeHRlbmRCdWZmZXJlZFJlbChCTVJfUkVMKGluZGV4KSwgTUFJ Tl9GT1JLTlVNLCBOVUxMLAorCQkJCQkJCQkJICAgRUJfTE9DS19GSVJTVCk7CisJCQlwYWdlID0g QnVmZmVyR2V0UGFnZShidWZmZXIpOworCQkJU1RBUlRfQ1JJVF9TRUNUSU9OKCk7CisKKwkJCVN0 aXJJbml0UGFnZShwYWdlLCAwKTsKKworCQkJaWYgKCFTdGlyUGFnZUFkZEl0ZW0ocGFnZSwgJml0 dXApKQorCQkJeworCQkJCS8qIFdlIHNob3VsZG4ndCBiZSBoZXJlIHNpbmNlIHdlJ3JlIGluc2Vy dGluZyB0byBhbiBlbXB0eSBwYWdlICovCisJCQkJZWxvZyhFUlJPUiwgImNvdWxkIG5vdCBhZGQg bmV3IHN0aXIgdHVwbGUgdG8gZW1wdHkgcGFnZSIpOworCQkJfQorCisJCQkvKiBVcGRhdGUgbWV0 YS1wYWdlIHdpdGggbmV3IGxhc3QgYmxvY2sgbnVtYmVyICovCisJCQltZXRhRGF0YS0+bGFzdEJs a05vID0gQnVmZmVyR2V0QmxvY2tOdW1iZXIoYnVmZmVyKTsKKworCQkJTWFya0J1ZmZlckRpcnR5 KG1ldGFCdWZmZXIpOworCQkJTWFya0J1ZmZlckRpcnR5KGJ1ZmZlcik7CisKKwkJCUVORF9DUklU X1NFQ1RJT04oKTsKKworCQkJVW5sb2NrUmVsZWFzZUJ1ZmZlcihidWZmZXIpOworCQkJVW5sb2Nr UmVsZWFzZUJ1ZmZlcihtZXRhQnVmZmVyKTsKKworCQkJcmV0dXJuIGZhbHNlOworCQl9CisJfQor fQorCisvKgorICogU1RJUiBkb2Vzbid0IHN1cHBvcnQgc2NhbnMgLSB0aGVzZSBmdW5jdGlvbnMg YWxsIGVycm9yIG91dAorICovCitJbmRleFNjYW5EZXNjCitzdGlyYmVnaW5zY2FuKFJlbGF0aW9u IHIsIGludCBua2V5cywgaW50IG5vcmRlcmJ5cykKK3sKKwllcmVwb3J0KEVSUk9SLCAoZXJyY29k ZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksIGVycm1zZygiXCIlc1wiIGlzIG5vdCBp bXBsZW1lbnRlZCIsIF9fZnVuY19fKSkpOworfQorCit2b2lkCitzdGlycmVzY2FuKEluZGV4U2Nh bkRlc2Mgc2NhbiwgU2NhbktleSBzY2Fua2V5LCBpbnQgbnNjYW5rZXlzLAorCQkgIFNjYW5LZXkg b3JkZXJieXMsIGludCBub3JkZXJieXMpCit7CisJZXJlcG9ydChFUlJPUiwgKGVycmNvZGUoRVJS Q09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLCBlcnJtc2coIlwiJXNcIiBpcyBub3QgaW1wbGVt ZW50ZWQiLCBfX2Z1bmNfXykpKTsKK30KKwordm9pZCBzdGlyZW5kc2NhbihJbmRleFNjYW5EZXNj IHNjYW4pCit7CisJZXJlcG9ydChFUlJPUiwgKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9T VVBQT1JURUQpLCBlcnJtc2coIlwiJXNcIiBpcyBub3QgaW1wbGVtZW50ZWQiLCBfX2Z1bmNfXykp KTsKK30KKworLyoKKyAqIEJ1aWxkIGEgU1RJUiBpbmRleCAtIG9ubHkgYWxsb3dlZCBmb3IgYXV4 aWxpYXJ5IGluZGV4ZXMuCisgKiBKdXN0IGluaXRpYWxpemVzIHRoZSBtZXRhLXBhZ2Ugd2l0aG91 dCBhbnkgaGVhcCBzY2Fucy4KKyAqLworSW5kZXhCdWlsZFJlc3VsdCAqCitzdGlyYnVpbGQoUmVs YXRpb24gaGVhcCwgUmVsYXRpb24gaW5kZXgsCisJCQkJCQkgICBzdHJ1Y3QgSW5kZXhJbmZvICpp bmRleEluZm8pCit7CisJSW5kZXhCdWlsZFJlc3VsdCAqcmVzdWx0OworCisJaWYgKCFpbmRleElu Zm8tPmlpX0F1eGlsaWFyeSkKKwkJZXJlcG9ydChFUlJPUiwgKGVycmNvZGUoRVJSQ09ERV9GRUFU VVJFX05PVF9TVVBQT1JURUQpLCBlcnJtc2coIkJ1aWxkaW5nIFNUSVIgaW5kZXhlcyBpcyBub3Qg c3VwcG9ydGVkIikpKTsKKworCVN0aXJJbml0TWV0YXBhZ2UoaW5kZXgsIE1BSU5fRk9SS05VTSk7 CisKKwlyZXN1bHQgPSAoSW5kZXhCdWlsZFJlc3VsdCAqKSBwYWxsb2Moc2l6ZW9mKEluZGV4QnVp bGRSZXN1bHQpKTsKKwlyZXN1bHQtPmhlYXBfdHVwbGVzID0gMDsKKwlyZXN1bHQtPmluZGV4X3R1 cGxlcyA9IDA7CisJcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBzdGlyYnVpbGRlbXB0eShSZWxh dGlvbiBpbmRleCkKK3sKKwlTdGlySW5pdE1ldGFwYWdlKGluZGV4LCBJTklUX0ZPUktOVU0pOwor fQorCitJbmRleEJ1bGtEZWxldGVSZXN1bHQgKgorc3RpcmJ1bGtkZWxldGUoSW5kZXhWYWN1dW1J bmZvICppbmZvLAorCQkJCQkJCQkJIEluZGV4QnVsa0RlbGV0ZVJlc3VsdCAqc3RhdHMsCisJCQkJ CQkJCQkgSW5kZXhCdWxrRGVsZXRlQ2FsbGJhY2sgY2FsbGJhY2ssCisJCQkJCQkJCQkgdm9pZCAq Y2FsbGJhY2tfc3RhdGUpCit7CisJUmVsYXRpb24gaW5kZXggPSBpbmZvLT5pbmRleDsKKwlCbG9j a051bWJlciBibGtubywgbnBhZ2VzOworCUJ1ZmZlciBidWZmZXI7CisJUGFnZSBwYWdlOworCisJ LyogRm9yIG5vcm1hbCBWQUNVVU0sIG1hcmsgdG8gc2tpcCBpbnNlcnRzIGFuZCB3YXJuIGFib3V0 IGFuIGluZGV4IGRyb3AgbmVlZGVkICovCisJaWYgKCFpbmZvLT52YWxpZGF0ZV9pbmRleCkKKwl7 CisJCVN0aXJNYXJrQXNTa2lwSW5zZXJ0cyhpbmRleCk7CisKKwkJZXJlcG9ydChXQVJOSU5HLCAo ZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCisJCQkJZXJybXNnKCJcIiVz XCIgaXMgbm90IGltcGxlbWVudGVkLCBzZWVtcyBsaWtlIHRoaXMgaW5kZXggbmVlZHMgdG8gYmUg ZHJvcHBlZCIsIF9fZnVuY19fKSkpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlpZiAoc3RhdHMg PT0gTlVMTCkKKwkJc3RhdHMgPSAoSW5kZXhCdWxrRGVsZXRlUmVzdWx0ICopIHBhbGxvYzAoc2l6 ZW9mKEluZGV4QnVsa0RlbGV0ZVJlc3VsdCkpOworCisJLyoKKwkgKiBJdGVyYXRlIG92ZXIgdGhl IHBhZ2VzLiBXZSBkb24ndCBjYXJlIGFib3V0IGNvbmN1cnJlbnRseSBhZGRlZCBwYWdlcywKKwkg KiBiZWNhdXNlIHRoZSBpbmRleCBpcyBtYXJrZWQgYXMgbm90LXJlYWR5IGZvciB0aGF0IG1vbWVu dCBhbmQgdGhlIGluZGV4IGlzIG5vdAorCSAqIHVzZWQgZm9yIGluc2VydC4KKwkgKi8KKwlucGFn ZXMgPSBSZWxhdGlvbkdldE51bWJlck9mQmxvY2tzKGluZGV4KTsKKwlmb3IgKGJsa25vID0gU1RJ Ul9IRUFEX0JMS05POyBibGtubyA8IG5wYWdlczsgYmxrbm8rKykKKwl7CisJCVN0aXJUdXBsZSAq aXR1cCwgKml0dXBFbmQ7CisKKwkJdmFjdXVtX2RlbGF5X3BvaW50KGZhbHNlKTsKKworCQlidWZm ZXIgPSBSZWFkQnVmZmVyRXh0ZW5kZWQoaW5kZXgsIE1BSU5fRk9SS05VTSwgYmxrbm8sCisJCQkJ CQkJCQlSQk1fTk9STUFMLCBpbmZvLT5zdHJhdGVneSk7CisKKwkJTG9ja0J1ZmZlcihidWZmZXIs IEJVRkZFUl9MT0NLX1NIQVJFKTsKKwkJcGFnZSA9IEJ1ZmZlckdldFBhZ2UoYnVmZmVyKTsKKwor CQlpZiAoUGFnZUlzTmV3KHBhZ2UpKQorCQl7CisJCQlVbmxvY2tSZWxlYXNlQnVmZmVyKGJ1ZmZl cik7CisJCQljb250aW51ZTsKKwkJfQorCisJCWl0dXAgPSBTdGlyUGFnZUdldFR1cGxlKHBhZ2Us IEZpcnN0T2Zmc2V0TnVtYmVyKTsKKwkJaXR1cEVuZCA9IFN0aXJQYWdlR2V0VHVwbGUocGFnZSwg T2Zmc2V0TnVtYmVyTmV4dChTdGlyUGFnZUdldE1heE9mZnNldChwYWdlKSkpOworCQl3aGlsZSAo aXR1cCA8IGl0dXBFbmQpCisJCXsKKwkJCS8qIERvIHdlIGhhdmUgdG8gZGVsZXRlIHRoaXMgdHVw bGU/ICovCisJCQlpZiAoY2FsbGJhY2soJml0dXAtPmhlYXBQdHIsIGNhbGxiYWNrX3N0YXRlKSkK KwkJCXsKKwkJCQllcmVwb3J0KEVSUk9SLCAoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NV UFBPUlRFRCksIGVycm1zZygid2UgbmV2ZXIgZGVsZXRlIGluIHN0aXIiKSkpOworCQkJfQorCisJ CQlpdHVwID0gU3RpclBhZ2VHZXROZXh0VHVwbGUoaXR1cCk7CisJCX0KKworCQlVbmxvY2tSZWxl YXNlQnVmZmVyKGJ1ZmZlcik7CisJfQorCisJcmV0dXJuIHN0YXRzOworfQorCisvKgorICogTWFy ayBhIFNUSVIgaW5kZXggdG8gc2tpcCBmdXR1cmUgaW5zZXJ0cworICovCit2b2lkCitTdGlyTWFy a0FzU2tpcEluc2VydHMoUmVsYXRpb24gaW5kZXgpCit7CisJU3Rpck1ldGFQYWdlRGF0YSAqbWV0 YURhdGE7CisJQnVmZmVyIG1ldGFCdWZmZXI7CisJUGFnZSBtZXRhUGFnZTsKKworCUFzc2VydCgh UmVsYXRpb25OZWVkc1dBTChpbmRleCkpOworCW1ldGFCdWZmZXIgPSBSZWFkQnVmZmVyKGluZGV4 LCBTVElSX01FVEFQQUdFX0JMS05PKTsKKwlMb2NrQnVmZmVyKG1ldGFCdWZmZXIsIEJVRkZFUl9M T0NLX0VYQ0xVU0lWRSk7CisJU1RBUlRfQ1JJVF9TRUNUSU9OKCk7CisKKwltZXRhUGFnZSA9IEJ1 ZmZlckdldFBhZ2UobWV0YUJ1ZmZlcik7CisJbWV0YURhdGEgPSBTdGlyUGFnZUdldE1ldGEobWV0 YVBhZ2UpOworCisJaWYgKCFtZXRhRGF0YS0+c2tpcEluc2VydHMpCisJeworCQltZXRhRGF0YS0+ c2tpcEluc2VydHMgPSB0cnVlOworCQlNYXJrQnVmZmVyRGlydHkobWV0YUJ1ZmZlcik7CisJfQor CUVORF9DUklUX1NFQ1RJT04oKTsKKwlVbmxvY2tSZWxlYXNlQnVmZmVyKG1ldGFCdWZmZXIpOwor fQorCitJbmRleEJ1bGtEZWxldGVSZXN1bHQgKgorc3RpcnZhY3V1bWNsZWFudXAoSW5kZXhWYWN1 dW1JbmZvICppbmZvLAorCQkJCSAgSW5kZXhCdWxrRGVsZXRlUmVzdWx0ICpzdGF0cykKK3sKKwlT dGlyTWFya0FzU2tpcEluc2VydHMoaW5mby0+aW5kZXgpOworCWVyZXBvcnQoV0FSTklORywgKGVy cmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAorCQkJZXJybXNnKCJcIiVzXCIg aXMgbm90IGltcGxlbWVudGVkLCBzZWVtcyBsaWtlIHRoaXMgaW5kZXggbmVlZHMgdG8gYmUgZHJv cHBlZCIsIF9fZnVuY19fKSkpOworCXJldHVybiBOVUxMOworfQorCitieXRlYSAqCitzdGlyb3B0 aW9ucyhEYXR1bSByZWxvcHRpb25zLCBib29sIHZhbGlkYXRlKQoreworCXJldHVybiBOVUxMOwor fQorCit2b2lkCitzdGlyY29zdGVzdGltYXRlKFBsYW5uZXJJbmZvICpyb290LCBJbmRleFBhdGgg KnBhdGgsCisJCQkJCSBkb3VibGUgbG9vcF9jb3VudCwgQ29zdCAqaW5kZXhTdGFydHVwQ29zdCwK KwkJCQkJIENvc3QgKmluZGV4VG90YWxDb3N0LCBTZWxlY3Rpdml0eSAqaW5kZXhTZWxlY3Rpdml0 eSwKKwkJCQkJIGRvdWJsZSAqaW5kZXhDb3JyZWxhdGlvbiwgZG91YmxlICppbmRleFBhZ2VzKQor eworCWVyZXBvcnQoRVJST1IsIChlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVE KSwgZXJybXNnKCJcIiVzXCIgaXMgbm90IGltcGxlbWVudGVkIiwgX19mdW5jX18pKSk7Cit9CmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jYXRhbG9nL2luZGV4LmMgYi9zcmMvYmFja2VuZC9jYXRh bG9nL2luZGV4LmMKaW5kZXggOGIzYzYwZDkxZjkuLmY1NDg0YzU5ZDE4IDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9jYXRhbG9nL2luZGV4LmMKKysrIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9pbmRl eC5jCkBAIC0zNDEyLDYgKzM0MTIsNyBAQCB2YWxpZGF0ZV9pbmRleChPaWQgaGVhcElkLCBPaWQg aW5kZXhJZCwgU25hcHNob3Qgc25hcHNob3QpCiAJaXZpbmZvLm1lc3NhZ2VfbGV2ZWwgPSBERUJV RzI7CiAJaXZpbmZvLm51bV9oZWFwX3R1cGxlcyA9IGhlYXBSZWxhdGlvbi0+cmRfcmVsLT5yZWx0 dXBsZXM7CiAJaXZpbmZvLnN0cmF0ZWd5ID0gTlVMTDsKKwlpdmluZm8udmFsaWRhdGVfaW5kZXgg PSB0cnVlOwogCiAJLyoKIAkgKiBFbmNvZGUgVElEcyBhcyBpbnQ4IHZhbHVlcyBmb3IgdGhlIHNv cnQsIHJhdGhlciB0aGFuIGRpcmVjdGx5IHNvcnRpbmcKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2NhdGFsb2cvdG9hc3RpbmcuYyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvdG9hc3RpbmcuYwppbmRl eCAwNzhhMWNmNTEyNy4uYzMzZTQzZGYxZWMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NhdGFs b2cvdG9hc3RpbmcuYworKysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3RvYXN0aW5nLmMKQEAgLTMx Myw2ICszMTMsNyBAQCBjcmVhdGVfdG9hc3RfdGFibGUoUmVsYXRpb24gcmVsLCBPaWQgdG9hc3RP aWQsIE9pZCB0b2FzdEluZGV4T2lkLAogCWluZGV4SW5mby0+aWlfUGFyYWxsZWxXb3JrZXJzID0g MDsKIAlpbmRleEluZm8tPmlpX0FtID0gQlRSRUVfQU1fT0lEOwogCWluZGV4SW5mby0+aWlfQW1D YWNoZSA9IE5VTEw7CisJaW5kZXhJbmZvLT5paV9BdXhpbGlhcnkgPSBmYWxzZTsKIAlpbmRleElu Zm8tPmlpX0NvbnRleHQgPSBDdXJyZW50TWVtb3J5Q29udGV4dDsKIAogCWNvbGxhdGlvbklkc1sw XSA9IEludmFsaWRPaWQ7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9hbmFseXpl LmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9hbmFseXplLmMKaW5kZXggZWVlZDkxYmUyNjYuLjFm YmU3MGQxODdjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9hbmFseXplLmMKKysr IGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvYW5hbHl6ZS5jCkBAIC03MjYsNiArNzI2LDcgQEAgZG9f YW5hbHl6ZV9yZWwoUmVsYXRpb24gb25lcmVsLCBjb25zdCBWYWN1dW1QYXJhbXMgcGFyYW1zLAog CQkJaXZpbmZvLm1lc3NhZ2VfbGV2ZWwgPSBlbGV2ZWw7CiAJCQlpdmluZm8ubnVtX2hlYXBfdHVw bGVzID0gb25lcmVsLT5yZF9yZWwtPnJlbHR1cGxlczsKIAkJCWl2aW5mby5zdHJhdGVneSA9IHZh Y19zdHJhdGVneTsKKwkJCWl2aW5mby52YWxpZGF0ZV9pbmRleCA9IGZhbHNlOwogCiAJCQlzdGF0 cyA9IGluZGV4X3ZhY3V1bV9jbGVhbnVwKCZpdmluZm8sIE5VTEwpOwogCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9jb21tYW5kcy92YWN1dW1wYXJhbGxlbC5jIGIvc3JjL2JhY2tlbmQvY29tbWFu ZHMvdmFjdXVtcGFyYWxsZWwuYwppbmRleCAyNzkxMDhjYTg5Zi4uZGZkY2NmYWY5OTEgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3ZhY3V1bXBhcmFsbGVsLmMKKysrIGIvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvdmFjdXVtcGFyYWxsZWwuYwpAQCAtODg1LDYgKzg4NSw3IEBAIHBhcmFs bGVsX3ZhY3V1bV9wcm9jZXNzX29uZV9pbmRleChQYXJhbGxlbFZhY3V1bVN0YXRlICpwdnMsIFJl bGF0aW9uIGluZHJlbCwKIAlpdmluZm8uZXN0aW1hdGVkX2NvdW50ID0gcHZzLT5zaGFyZWQtPmVz dGltYXRlZF9jb3VudDsKIAlpdmluZm8ubnVtX2hlYXBfdHVwbGVzID0gcHZzLT5zaGFyZWQtPnJl bHR1cGxlczsKIAlpdmluZm8uc3RyYXRlZ3kgPSBwdnMtPmJzdHJhdGVneTsKKwlpdmluZm8udmFs aWRhdGVfaW5kZXggPSBmYWxzZTsKIAogCS8qIFVwZGF0ZSBlcnJvciB0cmFjZWJhY2sgaW5mb3Jt YXRpb24gKi8KIAlwdnMtPmluZG5hbWUgPSBwc3RyZHVwKFJlbGF0aW9uR2V0UmVsYXRpb25OYW1l KGluZHJlbCkpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvbm9kZXMvbWFrZWZ1bmNzLmMgYi9z cmMvYmFja2VuZC9ub2Rlcy9tYWtlZnVuY3MuYwppbmRleCAzY2QzNWM1YzQ1Ny4uNTM1OWRhYjEx NzYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL25vZGVzL21ha2VmdW5jcy5jCisrKyBiL3NyYy9i YWNrZW5kL25vZGVzL21ha2VmdW5jcy5jCkBAIC04NzUsNiArODc1LDcgQEAgbWFrZUluZGV4SW5m byhpbnQgbnVtYXR0cnMsIGludCBudW1rZXlhdHRycywgT2lkIGFtb2lkLCBMaXN0ICpleHByZXNz aW9ucywKIAkvKiBpbml0aWFsaXplIGluZGV4LWJ1aWxkIHN0YXRlIHRvIGRlZmF1bHQgKi8KIAlu LT5paV9Ccm9rZW5Ib3RDaGFpbiA9IGZhbHNlOwogCW4tPmlpX1BhcmFsbGVsV29ya2VycyA9IDA7 CisJbi0+aWlfQXV4aWxpYXJ5ID0gZmFsc2U7CiAKIAkvKiBzZXQgdXAgZm9yIHBvc3NpYmxlIHVz ZSBieSBpbmRleCBBTSAqLwogCW4tPmlpX0FtID0gYW1vaWQ7CmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9hY2Nlc3MvZ2VuYW0uaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9nZW5hbS5oCmluZGV4IDFh MjdiZjA2MGIzLi4wMzU2OTAxZWUxMCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL2dl bmFtLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2dlbmFtLmgKQEAgLTU4LDYgKzU4LDcgQEAg dHlwZWRlZiBzdHJ1Y3QgSW5kZXhWYWN1dW1JbmZvCiAJYm9vbAkJZXN0aW1hdGVkX2NvdW50Owkv KiBudW1faGVhcF90dXBsZXMgaXMgYW4gZXN0aW1hdGUgKi8KIAlpbnQJCQltZXNzYWdlX2xldmVs OwkvKiBlcmVwb3J0IGxldmVsIGZvciBwcm9ncmVzcyBtZXNzYWdlcyAqLwogCWRvdWJsZQkJbnVt X2hlYXBfdHVwbGVzOwkvKiB0dXBsZXMgcmVtYWluaW5nIGluIGhlYXAgKi8KKwlib29sCQl2YWxp ZGF0ZV9pbmRleDsgLyogdmFsaWRhdGluZyBjb25jdXJyZW50bHkgYnVpbHQgaW5kZXg/ICovCiAJ QnVmZmVyQWNjZXNzU3RyYXRlZ3kgc3RyYXRlZ3k7CS8qIGFjY2VzcyBzdHJhdGVneSBmb3IgcmVh ZHMgKi8KIH0gSW5kZXhWYWN1dW1JbmZvOwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nl c3MvcmVsb3B0aW9ucy5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbG9wdGlvbnMuaAppbmRleCAw YmQxN2IzMGNhNy4uZTI5NjYxNjVlNmYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9y ZWxvcHRpb25zLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbG9wdGlvbnMuaApAQCAtNTIs OCArNTIsOSBAQCB0eXBlZGVmIGVudW0gcmVsb3B0X2tpbmQKIAlSRUxPUFRfS0lORF9WSUVXID0g KDEgPDwgOSksCiAJUkVMT1BUX0tJTkRfQlJJTiA9ICgxIDw8IDEwKSwKIAlSRUxPUFRfS0lORF9Q QVJUSVRJT05FRCA9ICgxIDw8IDExKSwKKwlSRUxPUFRfS0lORF9TVElSID0gKDEgPDwgMTIpLAog CS8qIGlmIHlvdSBhZGQgYSBuZXcga2luZCwgbWFrZSBzdXJlIHlvdSB1cGRhdGUgImxhc3RfZGVm YXVsdCIgdG9vICovCi0JUkVMT1BUX0tJTkRfTEFTVF9ERUZBVUxUID0gUkVMT1BUX0tJTkRfUEFS VElUSU9ORUQsCisJUkVMT1BUX0tJTkRfTEFTVF9ERUZBVUxUID0gUkVMT1BUX0tJTkRfU1RJUiwK IAkvKiBzb21lIGNvbXBpbGVycyB0cmVhdCBlbnVtcyBhcyBzaWduZWQgaW50cywgc28gd2UgY2Fu J3QgdXNlIDEgPDwgMzEgKi8KIAlSRUxPUFRfS0lORF9NQVggPSAoMSA8PCAzMCkKIH0gcmVsb3B0 X2tpbmQ7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3Mvc3Rpci5oIGIvc3JjL2luY2x1 ZGUvYWNjZXNzL3N0aXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u MThlZTM2NTA2ZmQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3Mvc3Rpci5o CkBAIC0wLDAgKzEsMTEzIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBzdGlyLmgKKyAq CSAgaGVhZGVyIGZpbGUgZm9yIHBvc3RncmVzIHN0aXIgYWNjZXNzIG1ldGhvZCBpbXBsZW1lbnRh dGlvbi4KKyAqCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDI2LCBQb3N0Z3JlU1FM IEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqIHNyYy9pbmNsdWRlL2FjY2Vzcy9zdGly LmgKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lmbmRlZiBTVElSX0gKKyNkZWZpbmUg U1RJUl9ICisKKyNpbmNsdWRlICJhY2Nlc3MvYW1hcGkuaCIKKyNpbmNsdWRlICJhY2Nlc3MveGxv Zy5oIgorI2luY2x1ZGUgImFjY2Vzcy9nZW5lcmljX3hsb2cuaCIKKyNpbmNsdWRlICJhY2Nlc3Mv aXR1cC5oIgorI2luY2x1ZGUgIm5vZGVzL3BhdGhub2Rlcy5oIgorCisvKiBTdXBwb3J0IHByb2Nl ZHVyZXMgbnVtYmVycyAqLworI2RlZmluZSBTVElSX05QUk9DCQkJCTAKKworLyogU2NhbiBzdHJh dGVnaWVzICovCisjZGVmaW5lIFNUSVJfTlNUUkFURUdJRVMJCTEKKworI2RlZmluZSBTVElSX09Q VElPTlNfUFJPQwkJCQkwCisKKy8qIE1hY3JvcyBmb3IgYWNjZXNzaW5nIHN0aXIgcGFnZSBzdHJ1 Y3R1cmVzICovCisjZGVmaW5lIFN0aXJQYWdlR2V0T3BhcXVlKHBhZ2UpICgoU3RpclBhZ2VPcGFx dWUpIFBhZ2VHZXRTcGVjaWFsUG9pbnRlcihwYWdlKSkKKyNkZWZpbmUgU3RpclBhZ2VHZXRNYXhP ZmZzZXQocGFnZSkgKFN0aXJQYWdlR2V0T3BhcXVlKHBhZ2UpLT5tYXhvZmYpCisjZGVmaW5lIFN0 aXJQYWdlSXNNZXRhKHBhZ2UpIFwKKwkoKFN0aXJQYWdlR2V0T3BhcXVlKHBhZ2UpLT5mbGFncyAm IFNUSVJfTUVUQSkgIT0gMCkKKyNkZWZpbmUgU3RpclBhZ2VHZXREYXRhKHBhZ2UpCQkoKFN0aXJU dXBsZSAqKVBhZ2VHZXRDb250ZW50cyhwYWdlKSkKKyNkZWZpbmUgU3RpclBhZ2VHZXRUdXBsZShw YWdlLCBvZmZzZXQpIFwKKwkoKFN0aXJUdXBsZSAqKShQYWdlR2V0Q29udGVudHMocGFnZSkgXAor CQkrIHNpemVvZihTdGlyVHVwbGUpICogKChvZmZzZXQpIC0gMSkpKQorI2RlZmluZSBTdGlyUGFn ZUdldE5leHRUdXBsZSh0dXBsZSkgXAorCSgoU3RpclR1cGxlICopKChjaGFyICopKHR1cGxlKSAr IHNpemVvZihTdGlyVHVwbGUpKSkKKworCisKKy8qIFByZXNlcnZlZCBwYWdlIG51bWJlcnMgKi8K KyNkZWZpbmUgU1RJUl9NRVRBUEFHRV9CTEtOTwkoMCkKKyNkZWZpbmUgU1RJUl9IRUFEX0JMS05P CQkoMSkgLyogZmlyc3QgZGF0YSBwYWdlICovCisKKworLyogT3BhcXVlIGZvciBzdGlyIHBhZ2Vz ICovCit0eXBlZGVmIHN0cnVjdCBTdGlyUGFnZU9wYXF1ZURhdGEKK3sKKwlPZmZzZXROdW1iZXIg bWF4b2ZmOwkJLyogbnVtYmVyIG9mIGluZGV4IHR1cGxlcyBvbiB0aGUgcGFnZSAqLworCXVpbnQx NgkJZmxhZ3M7CQkJLyogc2VlIGJpdCBkZWZpbml0aW9ucyBiZWxvdyAqLworCXVpbnQxNgkJc3Rp cl9wYWdlX2lkOwkvKiBmb3IgaWRlbnRpZmljYXRpb24gb2YgU1RJUiBpbmRleGVzICovCit9IFN0 aXJQYWdlT3BhcXVlRGF0YTsKKworLyogU3RpciBwYWdlIGZsYWdzICovCisjZGVmaW5lIFNUSVJf TUVUQQkJKDE8PDApCisKK3R5cGVkZWYgU3RpclBhZ2VPcGFxdWVEYXRhICpTdGlyUGFnZU9wYXF1 ZTsKKworI2RlZmluZSBTVElSX1BBR0VfSUQJCTB4RkY4NAorCisvKiBNZXRhZGF0YSBvZiBzdGly IGluZGV4ICovCit0eXBlZGVmIHN0cnVjdCBTdGlyTWV0YVBhZ2VEYXRhCit7CisJdWludDMyCQlt YWdpY051bWJlcjsKKwlCbG9ja051bWJlcglsYXN0QmxrTm87CisJYm9vbAkJc2tpcEluc2VydHM7 CS8qIHNob3VsZCB3ZSBqdXN0IGV4aXQgd2l0aG91dCBhbnkgaW5zZXJ0cz8gKi8KK30gU3Rpck1l dGFQYWdlRGF0YTsKKworLyogTWFnaWMgbnVtYmVyIHRvIGRpc3Rpbmd1aXNoIHN0aXIgcGFnZXMg ZnJvbSBvdGhlcnMgKi8KKyNkZWZpbmUgU1RJUl9NQUdJQ19OVU1CRVIgKDB4REJBQzBERUYpCisK KyNkZWZpbmUgU3RpclBhZ2VHZXRNZXRhKHBhZ2UpCSgoU3Rpck1ldGFQYWdlRGF0YSAqKSBQYWdl R2V0Q29udGVudHMocGFnZSkpCisKK3R5cGVkZWYgc3RydWN0IFN0aXJUdXBsZQoreworCUl0ZW1Q b2ludGVyRGF0YSBoZWFwUHRyOworfSBTdGlyVHVwbGU7CisKKyNkZWZpbmUgU3RpclBhZ2VHZXRG cmVlU3BhY2UocGFnZSkgXAorCShCTENLU1ogLSBNQVhBTElHTihTaXplT2ZQYWdlSGVhZGVyRGF0 YSkgXAorCQktIFN0aXJQYWdlR2V0TWF4T2Zmc2V0KHBhZ2UpICogKHNpemVvZihTdGlyVHVwbGUp KSBcCisJCS0gTUFYQUxJR04oc2l6ZW9mKFN0aXJQYWdlT3BhcXVlRGF0YSkpKQorCitleHRlcm4g dm9pZCBTdGlyRmlsbE1ldGFwYWdlKFJlbGF0aW9uIGluZGV4LCBQYWdlIG1ldGFQYWdlLCBib29s IHNraXBJbnNlcnRzKTsKK2V4dGVybiB2b2lkIFN0aXJJbml0TWV0YXBhZ2UoUmVsYXRpb24gaW5k ZXgsIEZvcmtOdW1iZXIgZm9ya251bSk7CitleHRlcm4gdm9pZCBTdGlySW5pdFBhZ2UoUGFnZSBw YWdlLCB1aW50MTYgZmxhZ3MpOworZXh0ZXJuIHZvaWQgU3Rpck1hcmtBc1NraXBJbnNlcnRzKFJl bGF0aW9uIGluZGV4KTsKKworLyogaW5kZXggYWNjZXNzIG1ldGhvZCBpbnRlcmZhY2UgZnVuY3Rp b25zICovCitleHRlcm4gYm9vbCBzdGlydmFsaWRhdGUoT2lkIG9wY2xhc3NvaWQpOworZXh0ZXJu IGJvb2wgc3Rpcmluc2VydChSZWxhdGlvbiBpbmRleCwgRGF0dW0gKnZhbHVlcywgYm9vbCAqaXNu dWxsLAorCQkJCQkgSXRlbVBvaW50ZXIgaHRfY3RpZCwgUmVsYXRpb24gaGVhcFJlbCwKKwkJCQkJ IEluZGV4VW5pcXVlQ2hlY2sgY2hlY2tVbmlxdWUsCisJCQkJCSBib29sIGluZGV4VW5jaGFuZ2Vk LAorCQkJCQkgc3RydWN0IEluZGV4SW5mbyAqaW5kZXhJbmZvKTsKK2V4dGVybiBJbmRleFNjYW5E ZXNjIHN0aXJiZWdpbnNjYW4oUmVsYXRpb24gciwgaW50IG5rZXlzLCBpbnQgbm9yZGVyYnlzKTsK K2V4dGVybiB2b2lkIHN0aXJyZXNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuS2V5IHNjYW5r ZXksIGludCBuc2NhbmtleXMsCisJCQkJCSBTY2FuS2V5IG9yZGVyYnlzLCBpbnQgbm9yZGVyYnlz KTsKK2V4dGVybiB2b2lkIHN0aXJlbmRzY2FuKEluZGV4U2NhbkRlc2Mgc2Nhbik7CitleHRlcm4g SW5kZXhCdWlsZFJlc3VsdCAqc3RpcmJ1aWxkKFJlbGF0aW9uIGhlYXAsIFJlbGF0aW9uIGluZGV4 LAorCQkJCQkJCQkgc3RydWN0IEluZGV4SW5mbyAqaW5kZXhJbmZvKTsKK2V4dGVybiB2b2lkIHN0 aXJidWlsZGVtcHR5KFJlbGF0aW9uIGluZGV4KTsKK2V4dGVybiBJbmRleEJ1bGtEZWxldGVSZXN1 bHQgKnN0aXJidWxrZGVsZXRlKEluZGV4VmFjdXVtSW5mbyAqaW5mbywKKwkJCQkJCQkJCQkgICBJ bmRleEJ1bGtEZWxldGVSZXN1bHQgKnN0YXRzLCBJbmRleEJ1bGtEZWxldGVDYWxsYmFjayBjYWxs YmFjaywKKwkJCQkJCQkJCQkgICB2b2lkICpjYWxsYmFja19zdGF0ZSk7CitleHRlcm4gSW5kZXhC dWxrRGVsZXRlUmVzdWx0ICpzdGlydmFjdXVtY2xlYW51cChJbmRleFZhY3V1bUluZm8gKmluZm8s CisJCQkJCQkJCQkJCSAgSW5kZXhCdWxrRGVsZXRlUmVzdWx0ICpzdGF0cyk7CitleHRlcm4gYnl0 ZWEgKnN0aXJvcHRpb25zKERhdHVtIHJlbG9wdGlvbnMsIGJvb2wgdmFsaWRhdGUpOworCisjZW5k aWYJCQkvKiBTVElSX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfYW0u ZGF0IGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19hbS5kYXQKaW5kZXggNDZkMzYxMDQ3ZmUuLjhi ZDJjMmI0NmJhIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX2FtLmRhdAorKysg Yi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX2FtLmRhdApAQCAtMzMsNSArMzMsOCBAQAogeyBvaWQg PT4gJzM1ODAnLCBvaWRfc3ltYm9sID0+ICdCUklOX0FNX09JRCcsCiAgIGRlc2NyID0+ICdibG9j ayByYW5nZSBpbmRleCAoQlJJTikgYWNjZXNzIG1ldGhvZCcsCiAgIGFtbmFtZSA9PiAnYnJpbics IGFtaGFuZGxlciA9PiAnYnJpbmhhbmRsZXInLCBhbXR5cGUgPT4gJ2knIH0sCit7IG9pZCA9PiAn NTU1NScsIG9pZF9zeW1ib2wgPT4gJ1NUSVJfQU1fT0lEJywKKyAgZGVzY3IgPT4gJ3Nob3J0IHRl cm0gaW5kZXggcmVwbGFjZW1lbnQgYWNjZXNzIG1ldGhvZCcsCisgIGFtbmFtZSA9PiAnc3Rpcics IGFtaGFuZGxlciA9PiAnc3RpcmhhbmRsZXInLCBhbXR5cGUgPT4gJ2knIH0sCiAKIF0KZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfb3BjbGFzcy5kYXQgYi9zcmMvaW5jbHVkZS9j YXRhbG9nL3BnX29wY2xhc3MuZGF0CmluZGV4IGRmMTcwYjgwODQwLi5hMzQ1N2U3NDlkYiAxMDA2 NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19vcGNsYXNzLmRhdAorKysgYi9zcmMvaW5j bHVkZS9jYXRhbG9nL3BnX29wY2xhc3MuZGF0CkBAIC00OTIsNCArNDkyLDggQEAKIAogIyBubyBi cmluIG9wY2xhc3MgZm9yIHRoZSBnZW9tZXRyaWMgdHlwZXMgZXhjZXB0IGJveAogCisjIGFsbG93 IGFueSB0eXBlcyBmb3IgU1RJUgoreyBvcGNtZXRob2QgPT4gJ3N0aXInLCBvaWRfc3ltYm9sID0+ ICdBTllfU1RJUl9PUFNfT0lEJywgb3BjbmFtZSA9PiAnc3Rpcl9vcHMnLAorICBvcGNmYW1pbHkg PT4gJ3N0aXIvYW55X29wcycsIG9wY2ludHlwZSA9PiAnYW55J30sCisKIF0KZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfb3BmYW1pbHkuZGF0IGIvc3JjL2luY2x1ZGUvY2F0YWxv Zy9wZ19vcGZhbWlseS5kYXQKaW5kZXggN2EwMjdjNDgxMGUuLjZmZmMyMGEwNjFjIDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX29wZmFtaWx5LmRhdAorKysgYi9zcmMvaW5jbHVk ZS9jYXRhbG9nL3BnX29wZmFtaWx5LmRhdApAQCAtMzA4LDUgKzMwOCw3IEBACiAgIG9wZm1ldGhv ZCA9PiAnaGFzaCcsIG9wZm5hbWUgPT4gJ211bHRpcmFuZ2Vfb3BzJyB9LAogeyBvaWQgPT4gJzYx NTgnLAogICBvcGZtZXRob2QgPT4gJ2dpc3QnLCBvcGZuYW1lID0+ICdtdWx0aXJhbmdlX29wcycg fSwKK3sgb2lkID0+ICc1NTU4JywKKyAgb3BmbWV0aG9kID0+ICdzdGlyJywgb3BmbmFtZSA9PiAn YW55X29wcycgfSwKIAogXQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9j LmRhdCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKaW5kZXggZmM4ZDgyNjY1Yjgu LmJhYzlhMTQ4NzAwIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0 CisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKQEAgLTkzNSw2ICs5MzUsMTAg QEAKICAgcHJvbmFtZSA9PiAnYnJpbmhhbmRsZXInLCBwcm92b2xhdGlsZSA9PiAndicsCiAgIHBy b3JldHR5cGUgPT4gJ2luZGV4X2FtX2hhbmRsZXInLCBwcm9hcmd0eXBlcyA9PiAnaW50ZXJuYWwn LAogICBwcm9zcmMgPT4gJ2JyaW5oYW5kbGVyJyB9LAoreyBvaWQgPT4gJzU1NTYnLCBkZXNjciA9 PiAnc2hvcnQgdGVybSBpbmRleCByZXBsYWNlbWVudCBhY2Nlc3MgbWV0aG9kIGhhbmRsZXInLAor ICBwcm9uYW1lID0+ICdzdGlyaGFuZGxlcicsIHByb3ZvbGF0aWxlID0+ICd2JywKKyAgcHJvcmV0 dHlwZSA9PiAnaW5kZXhfYW1faGFuZGxlcicsIHByb2FyZ3R5cGVzID0+ICdpbnRlcm5hbCcsCisg IHByb3NyYyA9PiAnc3RpcmhhbmRsZXInIH0sCiB7IG9pZCA9PiAnMzk1MicsIGRlc2NyID0+ICdi cmluOiBzdGFuZGFsb25lIHNjYW4gbmV3IHRhYmxlIHBhZ2VzJywKICAgcHJvbmFtZSA9PiAnYnJp bl9zdW1tYXJpemVfbmV3X3ZhbHVlcycsIHByb3ZvbGF0aWxlID0+ICd2JywKICAgcHJvcGFyYWxs ZWwgPT4gJ3UnLCBwcm9yZXR0eXBlID0+ICdpbnQ0JywgcHJvYXJndHlwZXMgPT4gJ3JlZ2NsYXNz JywKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oIGIvc3JjL2luY2x1 ZGUvbm9kZXMvZXhlY25vZGVzLmgKaW5kZXggMDcxNmM1YTlhZWQuLjBmODM0ODg5OTEyIDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9u b2Rlcy9leGVjbm9kZXMuaApAQCAtMTY2LDggKzE2Niw4IEBAIHR5cGVkZWYgc3RydWN0IEV4cHJT dGF0ZQogICoJCWVudHJpZXMgZm9yIGEgcGFydGljdWxhciBpbmRleC4gIFVzZWQgZm9yIGJvdGgg aW5kZXhfYnVpbGQgYW5kCiAgKgkJcmV0YWlsIGNyZWF0aW9uIG9mIGluZGV4IGVudHJpZXMuCiAg KgotICogaWlfQ29uY3VycmVudCwgaWlfQnJva2VuSG90Q2hhaW4sIGFuZCBpaV9QYXJhbGxlbFdv cmtlcnMgYXJlIHVzZWQgb25seQotICogZHVyaW5nIGluZGV4IGJ1aWxkOyB0aGV5J3JlIGNvbnZl bnRpb25hbGx5IHplcm9lZCBvdGhlcndpc2UuCisgKiBpaV9Db25jdXJyZW50LCBpaV9Ccm9rZW5I b3RDaGFpbiwgaWlfQXV4aWxpYXJ5IGFuZCBpaV9QYXJhbGxlbFdvcmtlcnMKKyAqIGFyZSB1c2Vk IG9ubHkgZHVyaW5nIGluZGV4IGJ1aWxkOyB0aGV5J3JlIGNvbnZlbnRpb25hbGx5IHplcm9lZCBv dGhlcndpc2UuCiAgKiAtLS0tLS0tLS0tLS0tLS0tCiAgKi8KIHR5cGVkZWYgc3RydWN0IEluZGV4 SW5mbwpAQCAtMjI3LDcgKzIyNyw4IEBAIHR5cGVkZWYgc3RydWN0IEluZGV4SW5mbwogCWJvb2wJ CWlpX1dpdGhvdXRPdmVybGFwczsKIAkvKiAjIG9mIHdvcmtlcnMgcmVxdWVzdGVkIChleGNsdWRl cyBsZWFkZXIpICovCiAJaW50CQkJaWlfUGFyYWxsZWxXb3JrZXJzOwotCisJLyogaXMgYXV4aWxp YXJ5IGZvciBjb25jdXJyZW50IGluZGV4IGJ1aWxkPyAqLworCWJvb2wJCWlpX0F1eGlsaWFyeTsK IAkvKiBPaWQgb2YgaW5kZXggQU0gKi8KIAlPaWQJCQlpaV9BbTsKIAkvKiBwcml2YXRlIGNhY2hl IGFyZWEgZm9yIGluZGV4IEFNICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9pbmRl eF9zZWxmdW5jcy5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvaW5kZXhfc2VsZnVuY3MuaAppbmRleCA3 NDc5M2ExYTE5ZC4uYmYwZTMwZGFiZTkgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL2lu ZGV4X3NlbGZ1bmNzLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvaW5kZXhfc2VsZnVuY3MuaApA QCAtNjIsNiArNjIsMTQgQEAgZXh0ZXJuIHZvaWQgc3BnY29zdGVzdGltYXRlKHN0cnVjdCBQbGFu bmVySW5mbyAqcm9vdCwKIAkJCQkJCQlTZWxlY3Rpdml0eSAqaW5kZXhTZWxlY3Rpdml0eSwKIAkJ CQkJCQlkb3VibGUgKmluZGV4Q29ycmVsYXRpb24sCiAJCQkJCQkJZG91YmxlICppbmRleFBhZ2Vz KTsKK2V4dGVybiB2b2lkIHN0aXJjb3N0ZXN0aW1hdGUoc3RydWN0IFBsYW5uZXJJbmZvICpyb290 LAorCQkJCQkJCXN0cnVjdCBJbmRleFBhdGggKnBhdGgsCisJCQkJCQkJZG91YmxlIGxvb3BfY291 bnQsCisJCQkJCQkJQ29zdCAqaW5kZXhTdGFydHVwQ29zdCwKKwkJCQkJCQlDb3N0ICppbmRleFRv dGFsQ29zdCwKKwkJCQkJCQlTZWxlY3Rpdml0eSAqaW5kZXhTZWxlY3Rpdml0eSwKKwkJCQkJCQlk b3VibGUgKmluZGV4Q29ycmVsYXRpb24sCisJCQkJCQkJZG91YmxlICppbmRleFBhZ2VzKTsKIGV4 dGVybiB2b2lkIGdpbmNvc3Rlc3RpbWF0ZShzdHJ1Y3QgUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJ CQkJc3RydWN0IEluZGV4UGF0aCAqcGF0aCwKIAkJCQkJCQlkb3VibGUgbG9vcF9jb3VudCwKZGlm ZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvYW11dGlscy5vdXQgYi9zcmMvdGVz dC9yZWdyZXNzL2V4cGVjdGVkL2FtdXRpbHMub3V0CmluZGV4IDdhYjYxMTNjNjE5Li45MmMwMzNh MjAxMCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9hbXV0aWxzLm91dAor KysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2FtdXRpbHMub3V0CkBAIC0xNzMsNyArMTcz LDEzIEBAIHNlbGVjdCBhbW5hbWUsIHByb3AsIHBnX2luZGV4YW1faGFzX3Byb3BlcnR5KGEub2lk LCBwcm9wKSBhcyBwCiAgc3BnaXN0IHwgY2FuX2V4Y2x1ZGUgICB8IHQKICBzcGdpc3QgfCBjYW5f aW5jbHVkZSAgIHwgdAogIHNwZ2lzdCB8IGJvZ3VzICAgICAgICAgfCAKLSgzNiByb3dzKQorIHN0 aXIgICB8IGNhbl9vcmRlciAgICAgfCBmCisgc3RpciAgIHwgY2FuX3VuaXF1ZSAgICB8IGYKKyBz dGlyICAgfCBjYW5fbXVsdGlfY29sIHwgdAorIHN0aXIgICB8IGNhbl9leGNsdWRlICAgfCBmCisg c3RpciAgIHwgY2FuX2luY2x1ZGUgICB8IHQKKyBzdGlyICAgfCBib2d1cyAgICAgICAgIHwgCiso NDIgcm93cykKIAogLS0KIC0tIGFkZGl0aW9uYWwgY2hlY2tzIGZvciBwZ19pbmRleF9jb2x1bW5f aGFzX3Byb3BlcnR5CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL29wcl9z YW5pdHkub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9vcHJfc2FuaXR5Lm91dAppbmRl eCA2ZmY0ZDdlZTkwMS4uOTI1OTY3OWVlYTIgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mv ZXhwZWN0ZWQvb3ByX3Nhbml0eS5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9v cHJfc2FuaXR5Lm91dApAQCAtMjEyOSw5ICsyMTI5LDEwIEBAIEZST00gcGdfb3BjbGFzcyBBUyBj MQogV0hFUkUgTk9UIEVYSVNUUyhTRUxFQ1QgMSBGUk9NIHBnX2Ftb3AgQVMgYTEKICAgICAgICAg ICAgICAgICAgV0hFUkUgYTEuYW1vcGZhbWlseSA9IGMxLm9wY2ZhbWlseQogICAgICAgICAgICAg ICAgICAgIEFORCBiaW5hcnlfY29lcmNpYmxlKGMxLm9wY2ludHlwZSwgYTEuYW1vcGxlZnR0eXBl KSk7Ci0gb3BjbmFtZSB8IG9wY2ZhbWlseSAKLS0tLS0tLS0tLSstLS0tLS0tLS0tLQotKDAgcm93 cykKKyBvcGNuYW1lICB8IG9wY2ZhbWlseSAKKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0KKyBzdGly X29wcyB8ICAgICAgNTU1OAorKDEgcm93KQogCiAtLSBDaGVjayB0aGF0IGVhY2ggb3BlcmF0b3Ig bGlzdGVkIGluIHBnX2Ftb3AgaGFzIGFuIGFzc29jaWF0ZWQgb3BjbGFzcywKIC0tIHRoYXQgaXMg b25lIHdob3NlIG9wY2ludHlwZSBtYXRjaGVzIG9wcmxlZnQgKHBvc3NpYmx5IGJ5IGNvZXJjaW9u KS4KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHNxbC5vdXQgYi9zcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BzcWwub3V0CmluZGV4IGM4ZjM5MzJlZGYwLi5lY2MyYzJh NjA0OSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wc3FsLm91dAorKysg Yi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BzcWwub3V0CkBAIC01MTcxLDcgKzUxNzEsOCBA QCBMaXN0IG9mIGFjY2VzcyBtZXRob2RzCiAgaGVhcCAgIHwgVGFibGUKICBoZWFwMiAgfCBUYWJs ZQogIHNwZ2lzdCB8IEluZGV4Ci0oOCByb3dzKQorIHN0aXIgICB8IEluZGV4CisoOSByb3dzKQog CiBcZEEgKgogTGlzdCBvZiBhY2Nlc3MgbWV0aG9kcwpAQCAtNTE4NSw3ICs1MTg2LDggQEAgTGlz dCBvZiBhY2Nlc3MgbWV0aG9kcwogIGhlYXAgICB8IFRhYmxlCiAgaGVhcDIgIHwgVGFibGUKICBz cGdpc3QgfCBJbmRleAotKDggcm93cykKKyBzdGlyICAgfCBJbmRleAorKDkgcm93cykKIAogXGRB IGgqCiBMaXN0IG9mIGFjY2VzcyBtZXRob2RzCkBAIC01MjEwLDkgKzUyMTIsOSBAQCBMaXN0IG9m IGFjY2VzcyBtZXRob2RzCiAKIFxkQTogZXh0cmEgYXJndW1lbnQgImJhciIgaWdub3JlZAogXGRB KwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIGFjY2VzcyBtZXRob2RzCi0g IE5hbWUgIHwgVHlwZSAgfCAgICAgICBIYW5kbGVyICAgICAgICB8ICAgICAgICAgICAgICBEZXNj cmlwdGlvbiAgICAgICAgICAgICAgIAotLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIGFjY2VzcyBtZXRob2RzCisgIE5hbWUgIHwg VHlwZSAgfCAgICAgICBIYW5kbGVyICAgICAgICB8ICAgICAgICAgICAgICAgIERlc2NyaXB0aW9u ICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIGJyaW4gICB8 IEluZGV4IHwgYnJpbmhhbmRsZXIgICAgICAgICAgfCBibG9jayByYW5nZSBpbmRleCAoQlJJTikg YWNjZXNzIG1ldGhvZAogIGJ0cmVlICB8IEluZGV4IHwgYnRoYW5kbGVyICAgICAgICAgICAgfCBi LXRyZWUgaW5kZXggYWNjZXNzIG1ldGhvZAogIGdpbiAgICB8IEluZGV4IHwgZ2luaGFuZGxlciAg ICAgICAgICAgfCBHSU4gaW5kZXggYWNjZXNzIG1ldGhvZApAQCAtNTIyMSwxMiArNTIyMywxMyBA QCBMaXN0IG9mIGFjY2VzcyBtZXRob2RzCiAgaGVhcCAgIHwgVGFibGUgfCBoZWFwX3RhYmxlYW1f aGFuZGxlciB8IGhlYXAgdGFibGUgYWNjZXNzIG1ldGhvZAogIGhlYXAyICB8IFRhYmxlIHwgaGVh cF90YWJsZWFtX2hhbmRsZXIgfCAKICBzcGdpc3QgfCBJbmRleCB8IHNwZ2hhbmRsZXIgICAgICAg ICAgIHwgU1AtR2lTVCBpbmRleCBhY2Nlc3MgbWV0aG9kCi0oOCByb3dzKQorIHN0aXIgICB8IElu ZGV4IHwgc3RpcmhhbmRsZXIgICAgICAgICAgfCBzaG9ydCB0ZXJtIGluZGV4IHJlcGxhY2VtZW50 IGFjY2VzcyBtZXRob2QKKyg5IHJvd3MpCiAKIFxkQSsgKgotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBMaXN0IG9mIGFjY2VzcyBtZXRob2RzCi0gIE5hbWUgIHwgVHlwZSAgfCAgICAgICBI YW5kbGVyICAgICAgICB8ICAgICAgICAgICAgICBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgIAot LS0tLS0tLS0rLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBM aXN0IG9mIGFjY2VzcyBtZXRob2RzCisgIE5hbWUgIHwgVHlwZSAgfCAgICAgICBIYW5kbGVyICAg ICAgICB8ICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tKy0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIGJyaW4gICB8IEluZGV4IHwgYnJpbmhhbmRsZXIgICAg ICAgICAgfCBibG9jayByYW5nZSBpbmRleCAoQlJJTikgYWNjZXNzIG1ldGhvZAogIGJ0cmVlICB8 IEluZGV4IHwgYnRoYW5kbGVyICAgICAgICAgICAgfCBiLXRyZWUgaW5kZXggYWNjZXNzIG1ldGhv ZAogIGdpbiAgICB8IEluZGV4IHwgZ2luaGFuZGxlciAgICAgICAgICAgfCBHSU4gaW5kZXggYWNj ZXNzIG1ldGhvZApAQCAtNTIzNSw3ICs1MjM4LDggQEAgTGlzdCBvZiBhY2Nlc3MgbWV0aG9kcwog IGhlYXAgICB8IFRhYmxlIHwgaGVhcF90YWJsZWFtX2hhbmRsZXIgfCBoZWFwIHRhYmxlIGFjY2Vz cyBtZXRob2QKICBoZWFwMiAgfCBUYWJsZSB8IGhlYXBfdGFibGVhbV9oYW5kbGVyIHwgCiAgc3Bn aXN0IHwgSW5kZXggfCBzcGdoYW5kbGVyICAgICAgICAgICB8IFNQLUdpU1QgaW5kZXggYWNjZXNz IG1ldGhvZAotKDggcm93cykKKyBzdGlyICAgfCBJbmRleCB8IHN0aXJoYW5kbGVyICAgICAgICAg IHwgc2hvcnQgdGVybSBpbmRleCByZXBsYWNlbWVudCBhY2Nlc3MgbWV0aG9kCisoOSByb3dzKQog CiBcZEErIGgqCiAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIGFjY2VzcyBtZXRob2RzCi0t IAoyLjQzLjAKCg== --0000000000009da2ac064db84911 Content-Type: application/octet-stream; name="v31-0004-Use-auxiliary-indexes-for-concurrent-index-opera.patch" Content-Disposition: attachment; filename="v31-0004-Use-auxiliary-indexes-for-concurrent-index-opera.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mn3ofxp63 RnJvbSBhMWI0ZmI1Y2VkMGUyNWFiODZkZmJiNjI4Yjk0Y2UwYjY5YzIzMDE5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNaWtoYWlsIE5pa2FsYXlldSA8bWloYWlsbmlrYWxheWV1QGdt YWlsLmNvbT4KRGF0ZTogVHVlLCAzMSBEZWMgMjAyNCAxNTowMzoxMCArMDEwMApTdWJqZWN0OiBb UEFUQ0ggdjMxIDQvN10gVXNlIGF1eGlsaWFyeSBpbmRleGVzIGZvciBjb25jdXJyZW50IGluZGV4 IG9wZXJhdGlvbnMKClJlcGxhY2UgdGhlIHNlY29uZCB0YWJsZSBmdWxsIHNjYW4gaW4gY29uY3Vy cmVudCBpbmRleCBidWlsZHMgd2l0aCBhbiBhdXhpbGlhcnkgaW5kZXggYXBwcm9hY2g6Ci0gY3Jl YXRlIGEgU1RJUiBhdXhpbGlhcnkgaW5kZXggd2l0aCB0aGUgc2FtZSBwcmVkaWNhdGUgKGlmIGV4 aXN0cykgYXMgaW4gbWFpbiBpbmRleAotIHVzZSBpdCB0byB0cmFjayB0dXBsZXMgaW5zZXJ0ZWQg ZHVyaW5nIHRoZSBmaXJzdCBwaGFzZQotIG1lcmdlIGF1eGlsaWFyeSBpbmRleCB3aXRoIG1haW4g aW5kZXggZHVyaW5nIHZhbGlkYXRpb24gdG8gY2F0Y2ggdXAgbmV3IGluZGV4IHdpdGggYW55IHR1 cGxlcyBtaXNzZWQgZHVyaW5nIHRoZSBmaXJzdCBwaGFzZQotIGF1dG9tYXRpY2FsbHkgZHJvcCBh dXhpbGlhcnkgd2hlbiBtYWluIGluZGV4IGlzIHJlYWR5CgpUbyBtZXJnZSBtYWluIGFuZCBhdXhp bGlhcnkgaW5kZXhlczoKLSBpbmRleF9idWxrX2RlbGV0ZSBjYWxsZWQgZm9yIGJvdGgsIFRJRHMg cHV0IGludG8gdHVwbGVzb3J0Ci0gYm90aCB0dXBsZXNvcnQgYXJlIGJlaW5nIHNvcnRlZAotIGJv dGggdHVwbGVzb3J0IHNjYW5uZWQgd2l0aCB0d28gcG9pbnRlcnMgbG9va2luZyBmb3IgdGhlIFRJ RHMgcHJlc2VudCBpbiBhdXhpbGlhcnkgaW5kZXgsIGJ1dCBhYnNlbnQgaW4gbWFpbiBvbmUKLSBh bGwgc3VjaCBUSURzIGFyZSBwdXQgaW50byB0dXBsZXN0b3JlCi0gYWxsIFRJRHMgaW4gdHVwbGVz dG9yZSBhcmUgZmV0Y2hlZCB1c2luZyB0aGUgc3RyZWFtLCB0dXBsZXN0b3JlIHVzZWQgaW4gaGVh cGFtX2luZGV4X3ZhbGlkYXRlX3NjYW5fcmVhZF9zdHJlYW1fbmV4dCB0byBwcm92aWRlIHRoZSBu ZXh0IHBhZ2UgdG8gcHJlZmV0Y2gKLSBpZiBmZXRjaGVkIHR1cGxlIGlzIGFsaXZlIC0gaXQgaXMg aW5zZXJ0ZWQgaW50byB0aGUgbWFpbiBpbmRleAoKVGhpcyBlbGltaW5hdGVzIHRoZSBuZWVkIGZv ciBhIHNlY29uZCBmdWxsIHRhYmxlIHNjYW4gZHVyaW5nIHZhbGlkYXRpb24sIGltcHJvdmluZyBw ZXJmb3JtYW5jZSwgZXNwZWNpYWxseSBmb3IgbGFyZ2UgdGFibGVzLiBBZmZlY3RzIGJvdGggQ1JF QVRFIElOREVYIENPTkNVUlJFTlRMWSBhbmQgUkVJTkRFWCBJTkRFWCBDT05DVVJSRU5UTFkgb3Bl cmF0aW9ucy4KLS0tCiBkb2Mvc3JjL3NnbWwvbW9uaXRvcmluZy5zZ21sICAgICAgICAgICAgICAg fCAgMjYgKy0KIGRvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX2luZGV4LnNnbWwgICAgICAgICB8ICAz NCArLQogZG9jL3NyYy9zZ21sL3JlZi9yZWluZGV4LnNnbWwgICAgICAgICAgICAgIHwgIDQwICst CiBzcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9SRUFETUUuSE9UICAgICAgICAgfCAgMTMgKy0KIHNy Yy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMgICB8IDU1MyArKysrKysrKysr KysrKy0tLS0tLS0KIHNyYy9iYWNrZW5kL2NhdGFsb2cvaW5kZXguYyAgICAgICAgICAgICAgICB8 IDMwOCArKysrKysrKysrLS0KIHNyYy9iYWNrZW5kL2NhdGFsb2cvc3lzdGVtX3ZpZXdzLnNxbCAg ICAgICB8ICAxNyArLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvaW5kZXhjbWRzLmMgICAgICAgICAg IHwgMzQ0ICsrKysrKysrKysrLS0KIHNyYy9iYWNrZW5kL25vZGVzL21ha2VmdW5jcy5jICAgICAg ICAgICAgICB8ICAgNCArLQogc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaCAgICAgICAgICAg ICAgIHwgIDEyICstCiBzcmMvaW5jbHVkZS9jYXRhbG9nL2luZGV4LmggICAgICAgICAgICAgICAg fCAgIDkgKy0KIHNyYy9pbmNsdWRlL2NvbW1hbmRzL3Byb2dyZXNzLmggICAgICAgICAgICB8ICAx MyArLQogc3JjL2luY2x1ZGUvbm9kZXMvbWFrZWZ1bmNzLmggICAgICAgICAgICAgIHwgICAzICst CiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NyZWF0ZV9pbmRleC5vdXQgfCAgNDIgKysKIHNy Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvaW5kZXhpbmcub3V0ICAgICB8ICAgMyArLQogc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC9ydWxlcy5vdXQgICAgICAgIHwgIDE3ICstCiBzcmMvdGVzdC9y ZWdyZXNzL3NxbC9jcmVhdGVfaW5kZXguc3FsICAgICAgfCAgMjEgKwogMTcgZmlsZXMgY2hhbmdl ZCwgMTEyMyBpbnNlcnRpb25zKCspLCAzMzYgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZG9j L3NyYy9zZ21sL21vbml0b3Jpbmcuc2dtbCBiL2RvYy9zcmMvc2dtbC9tb25pdG9yaW5nLnNnbWwK aW5kZXggNDYyMDE5YTk3MmMuLmI4MDMxYTNjYjM5IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwv bW9uaXRvcmluZy5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9tb25pdG9yaW5nLnNnbWwKQEAgLTY2 NzcsNiArNjY3NywxOCBAQCBGUk9NIHBnX3N0YXRfZ2V0X2JhY2tlbmRfaWRzZXQoKSBBUyBiYWNr ZW5kaWQ7CiAgICAgICAgaW5mb3JtYXRpb24gZm9yIHRoaXMgcGhhc2UuCiAgICAgICA8L2VudHJ5 PgogICAgICA8L3Jvdz4KKyAgICAgPHJvdz4KKyAgICAgIDxlbnRyeT48bGl0ZXJhbD53YWl0aW5n IGZvciB3cml0ZXJzIHRvIHVzZSBhdXhpbGlhcnkgaW5kZXg8L2xpdGVyYWw+PC9lbnRyeT4KKyAg ICAgIDxlbnRyeT4KKyAgICAgICA8Y29tbWFuZD5DUkVBVEUgSU5ERVggQ09OQ1VSUkVOVExZPC9j b21tYW5kPiBvciA8Y29tbWFuZD5SRUlOREVYIENPTkNVUlJFTlRMWTwvY29tbWFuZD4gaXMgd2Fp dGluZyBmb3IgdHJhbnNhY3Rpb25zCisgICAgICAgd2l0aCB3cml0ZSBsb2NrcyB0aGF0IGNhbiBw b3RlbnRpYWxseSBzZWUgdGhlIHRhYmxlIHRvIGZpbmlzaCwgdG8gZW5zdXJlIHVzZSBvZiBhdXhp bGlhcnkgaW5kZXggZm9yIG5ldyB0dXBsZXMgaW4KKyAgICAgICBmdXR1cmUgdHJhbnNhY3Rpb25z LgorICAgICAgIFRoaXMgcGhhc2UgaXMgc2tpcHBlZCB3aGVuIG5vdCBpbiBjb25jdXJyZW50IG1v ZGUuCisgICAgICAgQ29sdW1ucyA8c3RydWN0bmFtZT5sb2NrZXJzX3RvdGFsPC9zdHJ1Y3RuYW1l PiwgPHN0cnVjdG5hbWU+bG9ja2Vyc19kb25lPC9zdHJ1Y3RuYW1lPgorICAgICAgIGFuZCA8c3Ry dWN0bmFtZT5jdXJyZW50X2xvY2tlcl9waWQ8L3N0cnVjdG5hbWU+IGNvbnRhaW4gdGhlIHByb2dy ZXNzCisgICAgICAgaW5mb3JtYXRpb24gZm9yIHRoaXMgcGhhc2UuCisgICAgICA8L2VudHJ5Pgor ICAgICA8L3Jvdz4KICAgICAgPHJvdz4KICAgICAgIDxlbnRyeT48bGl0ZXJhbD5idWlsZGluZyBp bmRleDwvbGl0ZXJhbD48L2VudHJ5PgogICAgICAgPGVudHJ5PgpAQCAtNjcxNywxMyArNjcyOSwx MiBAQCBGUk9NIHBnX3N0YXRfZ2V0X2JhY2tlbmRfaWRzZXQoKSBBUyBiYWNrZW5kaWQ7CiAgICAg ICA8L2VudHJ5PgogICAgICA8L3Jvdz4KICAgICAgPHJvdz4KLSAgICAgIDxlbnRyeT48bGl0ZXJh bD5pbmRleCB2YWxpZGF0aW9uOiBzY2FubmluZyB0YWJsZTwvbGl0ZXJhbD48L2VudHJ5PgorICAg ICAgPGVudHJ5PjxsaXRlcmFsPmluZGV4IHZhbGlkYXRpb246IG1lcmdpbmcgaW5kZXhlczwvbGl0 ZXJhbD48L2VudHJ5PgogICAgICAgPGVudHJ5PgotICAgICAgIDxjb21tYW5kPkNSRUFURSBJTkRF WCBDT05DVVJSRU5UTFk8L2NvbW1hbmQ+IGlzIHNjYW5uaW5nIHRoZSB0YWJsZQotICAgICAgIHRv IHZhbGlkYXRlIHRoZSBpbmRleCB0dXBsZXMgY29sbGVjdGVkIGluIHRoZSBwcmV2aW91cyB0d28g cGhhc2VzLgorICAgICAgIDxjb21tYW5kPkNSRUFURSBJTkRFWCBDT05DVVJSRU5UTFk8L2NvbW1h bmQ+IGlzIG1lcmdpbmcgY29udGVudCBvZiBhdXhpbGlhcnkgaW5kZXggd2l0aCB0aGUgdGFyZ2V0 IGluZGV4LgogICAgICAgIFRoaXMgcGhhc2UgaXMgc2tpcHBlZCB3aGVuIG5vdCBpbiBjb25jdXJy ZW50IG1vZGUuCi0gICAgICAgQ29sdW1ucyA8c3RydWN0bmFtZT5ibG9ja3NfdG90YWw8L3N0cnVj dG5hbWU+IChzZXQgdG8gdGhlIHRvdGFsIHNpemUgb2YgdGhlIHRhYmxlKQotICAgICAgIGFuZCA8 c3RydWN0bmFtZT5ibG9ja3NfZG9uZTwvc3RydWN0bmFtZT4gY29udGFpbiB0aGUgcHJvZ3Jlc3Mg aW5mb3JtYXRpb24gZm9yIHRoaXMgcGhhc2UuCisgICAgICAgQ29sdW1ucyA8c3RydWN0bmFtZT50 dXBsZXNfdG90YWw8L3N0cnVjdG5hbWU+IChzZXQgdG8gdGhlIG51bWJlciBvZiB0dXBsZXMgdG8g YmUgbWVyZ2VkKQorICAgICAgIGFuZCA8c3RydWN0bmFtZT50dXBsZXNfZG9uZTwvc3RydWN0bmFt ZT4gY29udGFpbiB0aGUgcHJvZ3Jlc3MgaW5mb3JtYXRpb24gZm9yIHRoaXMgcGhhc2UuCiAgICAg ICA8L2VudHJ5PgogICAgICA8L3Jvdz4KICAgICAgPHJvdz4KQEAgLTY3NDAsOCArNjc1MSw5IEBA IEZST00gcGdfc3RhdF9nZXRfYmFja2VuZF9pZHNldCgpIEFTIGJhY2tlbmRpZDsKICAgICAgPHJv dz4KICAgICAgIDxlbnRyeT48bGl0ZXJhbD53YWl0aW5nIGZvciByZWFkZXJzIGJlZm9yZSBtYXJr aW5nIGRlYWQ8L2xpdGVyYWw+PC9lbnRyeT4KICAgICAgIDxlbnRyeT4KLSAgICAgICA8Y29tbWFu ZD5SRUlOREVYIENPTkNVUlJFTlRMWTwvY29tbWFuZD4gaXMgd2FpdGluZyBmb3IgdHJhbnNhY3Rp b25zCi0gICAgICAgd2l0aCByZWFkIGxvY2tzIG9uIHRoZSB0YWJsZSB0byBmaW5pc2gsIGJlZm9y ZSBtYXJraW5nIHRoZSBvbGQgaW5kZXggZGVhZC4KKyAgICAgICA8Y29tbWFuZD5DUkVBVEUgSU5E RVggQ09OQ1VSUkVOVExZPC9jb21tYW5kPiBpcyB3YWl0aW5nIGZvciB0cmFuc2FjdGlvbnMKKyAg ICAgICAgd2l0aCByZWFkIGxvY2tzIG9uIHRoZSB0YWJsZSB0byBmaW5pc2gsIGJlZm9yZSBtYXJr aW5nIHRoZSBhdXhpbGlhcnkgaW5kZXggYXMgZGVhZC4KKyAgICAgICA8Y29tbWFuZD5SRUlOREVY IENPTkNVUlJFTlRMWTwvY29tbWFuZD4gaXMgYWxzbyB3YWl0aW5nIGJlZm9yZSBtYXJraW5nIHRo ZSBvbGQgaW5kZXggYXMgZGVhZC4KICAgICAgICBUaGlzIHBoYXNlIGlzIHNraXBwZWQgd2hlbiBu b3QgaW4gY29uY3VycmVudCBtb2RlLgogICAgICAgIENvbHVtbnMgPHN0cnVjdG5hbWU+bG9ja2Vy c190b3RhbDwvc3RydWN0bmFtZT4sIDxzdHJ1Y3RuYW1lPmxvY2tlcnNfZG9uZTwvc3RydWN0bmFt ZT4KICAgICAgICBhbmQgPHN0cnVjdG5hbWU+Y3VycmVudF9sb2NrZXJfcGlkPC9zdHJ1Y3RuYW1l PiBjb250YWluIHRoZSBwcm9ncmVzcwpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3JlZi9jcmVh dGVfaW5kZXguc2dtbCBiL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX2luZGV4LnNnbWwKaW5kZXgg YmI3NTA1ZDE3MWIuLjEyYzg4NTg3YTc5IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL2Ny ZWF0ZV9pbmRleC5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX2luZGV4LnNnbWwK QEAgLTYyMCwxMCArNjIwLDEwIEBAIENSRUFURSBbIFVOSVFVRSBdIElOREVYIFsgQ09OQ1VSUkVO VExZIF0gWyBbIElGIE5PVCBFWElTVFMgXSA8cmVwbGFjZWFibGUgY2xhc3M9CiAgICAgb3V0IHdy aXRlcy4gIFRoaXMgbWV0aG9kIGlzIGludm9rZWQgYnkgc3BlY2lmeWluZyB0aGUKICAgICA8bGl0 ZXJhbD5DT05DVVJSRU5UTFk8L2xpdGVyYWw+IG9wdGlvbiBvZiA8Y29tbWFuZD5DUkVBVEUgSU5E RVg8L2NvbW1hbmQ+LgogICAgIFdoZW4gdGhpcyBvcHRpb24gaXMgdXNlZCwKLSAgICA8cHJvZHVj dG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+IG11c3QgcGVyZm9ybSB0d28gc2NhbnMgb2Yg dGhlIHRhYmxlLCBhbmQgaW4KLSAgICBhZGRpdGlvbiBpdCBtdXN0IHdhaXQgZm9yIGFsbCBleGlz dGluZyB0cmFuc2FjdGlvbnMgdGhhdCBjb3VsZCBwb3RlbnRpYWxseQotICAgIG1vZGlmeSBvciB1 c2UgdGhlIGluZGV4IHRvIHRlcm1pbmF0ZS4gIFRodXMKLSAgICB0aGlzIG1ldGhvZCByZXF1aXJl cyBtb3JlIHRvdGFsIHdvcmsgdGhhbiBhIHN0YW5kYXJkIGluZGV4IGJ1aWxkIGFuZCB0YWtlcwor ICAgIDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4gbXVzdCBwZXJmb3JtIHRh YmxlIHNjYW4gZm9sbG93ZWQgYnkKKyAgICB2YWxpZGF0aW9uIHBoYXNlLCBhbmQgaW4gYWRkaXRp b24gaXQgbXVzdCB3YWl0IGZvciBhbGwgZXhpc3RpbmcgdHJhbnNhY3Rpb25zCisgICAgdGhhdCBj b3VsZCBwb3RlbnRpYWxseSBtb2RpZnkgb3IgdXNlIHRoZSBpbmRleCB0byB0ZXJtaW5hdGUuICBU aHVzCisgICAgdGhpcyBtZXRob2QgcmVxdWlyZXMgbW9yZSB0b3RhbCB3b3JrIHRoYW4gYSBzdGFu ZGFyZCBpbmRleCBidWlsZCBhbmQgbWF5IHRha2UKICAgICBzaWduaWZpY2FudGx5IGxvbmdlciB0 byBjb21wbGV0ZS4gIEhvd2V2ZXIsIHNpbmNlIGl0IGFsbG93cyBub3JtYWwKICAgICBvcGVyYXRp b25zIHRvIGNvbnRpbnVlIHdoaWxlIHRoZSBpbmRleCBpcyBidWlsdCwgdGhpcyBtZXRob2QgaXMg dXNlZnVsIGZvcgogICAgIGFkZGluZyBuZXcgaW5kZXhlcyBpbiBhIHByb2R1Y3Rpb24gZW52aXJv bm1lbnQuICBPZiBjb3Vyc2UsIHRoZSBleHRyYSBDUFUKQEAgLTYzMSwxNCArNjMxLDE0IEBAIENS RUFURSBbIFVOSVFVRSBdIElOREVYIFsgQ09OQ1VSUkVOVExZIF0gWyBbIElGIE5PVCBFWElTVFMg XSA8cmVwbGFjZWFibGUgY2xhc3M9CiAgICA8L3BhcmE+CiAKICAgIDxwYXJhPgotICAgIEluIGEg Y29uY3VycmVudCBpbmRleCBidWlsZCwgdGhlIGluZGV4IGlzIGFjdHVhbGx5IGVudGVyZWQgYXMg YW4KLSAgICA8cXVvdGU+aW52YWxpZDwvcXVvdGU+IGluZGV4IGludG8KLSAgICB0aGUgc3lzdGVt IGNhdGFsb2dzIGluIG9uZSB0cmFuc2FjdGlvbiwgdGhlbiB0d28gdGFibGUgc2NhbnMgb2NjdXIg aW4KLSAgICB0d28gbW9yZSB0cmFuc2FjdGlvbnMuICBCZWZvcmUgZWFjaCB0YWJsZSBzY2FuLCB0 aGUgaW5kZXggYnVpbGQgbXVzdAorICAgIEluIGEgY29uY3VycmVudCBpbmRleCBidWlsZCwgdGhl IG1haW4gYW5kIGF1eGlsaWFyeSBpbmRleGVzIGFyZSBhY3R1YWxseQorICAgIGVudGVyZWQgYXMg YW4gPHF1b3RlPmludmFsaWQ8L3F1b3RlPiBpbmRleCBpbnRvCisgICAgdGhlIHN5c3RlbSBjYXRh bG9ncyBpbiBvbmUgdHJhbnNhY3Rpb24sIHRoZW4gdHdvIHBoYXNlcyBvY2N1ciBpbgorICAgIG11 bHRpcGxlIHRyYW5zYWN0aW9ucy4gIEJlZm9yZSBlYWNoIHBoYXNlLCB0aGUgaW5kZXggYnVpbGQg bXVzdAogICAgIHdhaXQgZm9yIGV4aXN0aW5nIHRyYW5zYWN0aW9ucyB0aGF0IGhhdmUgbW9kaWZp ZWQgdGhlIHRhYmxlIHRvIHRlcm1pbmF0ZS4KLSAgICBBZnRlciB0aGUgc2Vjb25kIHNjYW4sIHRo ZSBpbmRleCBidWlsZCBtdXN0IHdhaXQgZm9yIGFueSB0cmFuc2FjdGlvbnMKKyAgICBBZnRlciB0 aGUgc2Vjb25kIHBoYXNlLCB0aGUgaW5kZXggYnVpbGQgbXVzdCB3YWl0IGZvciBhbnkgdHJhbnNh Y3Rpb25zCiAgICAgdGhhdCBoYXZlIGEgc25hcHNob3QgKHNlZSA8eHJlZiBsaW5rZW5kPSJtdmNj Ii8+KSBwcmVkYXRpbmcgdGhlIHNlY29uZAotICAgIHNjYW4gdG8gdGVybWluYXRlLCBpbmNsdWRp bmcgdHJhbnNhY3Rpb25zIHVzZWQgYnkgYW55IHBoYXNlIG9mIGNvbmN1cnJlbnQKKyAgICBwaGFz ZSB0byB0ZXJtaW5hdGUsIGluY2x1ZGluZyB0cmFuc2FjdGlvbnMgdXNlZCBieSBhbnkgcGhhc2Ug b2YgY29uY3VycmVudAogICAgIGluZGV4IGJ1aWxkcyBvbiBvdGhlciB0YWJsZXMsIGlmIHRoZSBp bmRleGVzIGludm9sdmVkIGFyZSBwYXJ0aWFsIG9yIGhhdmUKICAgICBjb2x1bW5zIHRoYXQgYXJl IG5vdCBzaW1wbGUgY29sdW1uIHJlZmVyZW5jZXMuCiAgICAgVGhlbiBmaW5hbGx5IHRoZSBpbmRl eCBjYW4gYmUgbWFya2VkIDxxdW90ZT52YWxpZDwvcXVvdGU+IGFuZCByZWFkeSBmb3IgdXNlLApA QCAtNjUxLDEwICs2NTEsMTEgQEAgQ1JFQVRFIFsgVU5JUVVFIF0gSU5ERVggWyBDT05DVVJSRU5U TFkgXSBbIFsgSUYgTk9UIEVYSVNUUyBdIDxyZXBsYWNlYWJsZSBjbGFzcz0KICAgIDxwYXJhPgog ICAgIElmIGEgcHJvYmxlbSBhcmlzZXMgd2hpbGUgc2Nhbm5pbmcgdGhlIHRhYmxlLCBzdWNoIGFz IGEgZGVhZGxvY2sgb3IgYQogICAgIHVuaXF1ZW5lc3MgdmlvbGF0aW9uIGluIGEgdW5pcXVlIGlu ZGV4LCB0aGUgPGNvbW1hbmQ+Q1JFQVRFIElOREVYPC9jb21tYW5kPgotICAgIGNvbW1hbmQgd2ls bCBmYWlsIGJ1dCBsZWF2ZSBiZWhpbmQgYW4gPHF1b3RlPmludmFsaWQ8L3F1b3RlPiBpbmRleC4g VGhpcyBpbmRleAotICAgIHdpbGwgYmUgaWdub3JlZCBmb3IgcXVlcnlpbmcgcHVycG9zZXMgYmVj YXVzZSBpdCBtaWdodCBiZSBpbmNvbXBsZXRlOwotICAgIGhvd2V2ZXIgaXQgd2lsbCBzdGlsbCBj b25zdW1lIHVwZGF0ZSBvdmVyaGVhZC4gVGhlIDxhcHBsaWNhdGlvbj5wc3FsPC9hcHBsaWNhdGlv bj4KLSAgICA8Y29tbWFuZD5cZDwvY29tbWFuZD4gY29tbWFuZCB3aWxsIHJlcG9ydCBzdWNoIGFu IGluZGV4IGFzIDxsaXRlcmFsPklOVkFMSUQ8L2xpdGVyYWw+OgorICAgIGNvbW1hbmQgd2lsbCBm YWlsIGJ1dCBsZWF2ZSBiZWhpbmQgYW4gPHF1b3RlPmludmFsaWQ8L3F1b3RlPiBpbmRleCBhbmQg aXRzCisgICAgYXNzb2NpYXRlZCBhdXhpbGlhcnkgaW5kZXguIFRoZXNlIGluZGV4ZXMKKyAgICB3 aWxsIGJlIGlnbm9yZWQgZm9yIHF1ZXJ5aW5nIHB1cnBvc2VzIGJlY2F1c2UgdGhleSBtaWdodCBi ZSBpbmNvbXBsZXRlOworICAgIGhvd2V2ZXIgdGhleSB3aWxsIHN0aWxsIGNvbnN1bWUgdXBkYXRl IG92ZXJoZWFkLiBUaGUgPGFwcGxpY2F0aW9uPnBzcWw8L2FwcGxpY2F0aW9uPgorICAgIDxjb21t YW5kPlxkPC9jb21tYW5kPiBjb21tYW5kIHdpbGwgcmVwb3J0IHN1Y2ggaW5kZXhlcyBhcyA8bGl0 ZXJhbD5JTlZBTElEPC9saXRlcmFsPjoKIAogPHByb2dyYW1saXN0aW5nPgogcG9zdGdyZXM9IyBc ZCB0YWIKQEAgLTY2NCwxMSArNjY1LDEyIEBAIHBvc3RncmVzPSMgXGQgdGFiCiAgY29sICAgIHwg aW50ZWdlciB8ICAgICAgICAgICB8ICAgICAgICAgIHwKIEluZGV4ZXM6CiAgICAgImlkeCIgYnRy ZWUgKGNvbCkgSU5WQUxJRAorICAgICJpZHhfY2NhdXgiIHN0aXIgKGNvbCkgSU5WQUxJRAogPC9w cm9ncmFtbGlzdGluZz4KIAogICAgIFRoZSByZWNvbW1lbmRlZCByZWNvdmVyeQotICAgIG1ldGhv ZCBpbiBzdWNoIGNhc2VzIGlzIHRvIGRyb3AgdGhlIGluZGV4IGFuZCB0cnkgYWdhaW4gdG8gcGVy Zm9ybQotICAgIDxjb21tYW5kPkNSRUFURSBJTkRFWCBDT05DVVJSRU5UTFk8L2NvbW1hbmQ+LiAg KEFub3RoZXIgcG9zc2liaWxpdHkgaXMKKyAgICBtZXRob2QgaW4gc3VjaCBjYXNlcyBpcyB0byBk cm9wIHRoZXNlIGluZGV4ZXMgYW5kIHRyeSBhZ2FpbiB0byBwZXJmb3JtCisgICAgPGNvbW1hbmQ+ Q1JFQVRFIElOREVYIENPTkNVUlJFTlRMWTwvY29tbWFuZD4uIChBbm90aGVyIHBvc3NpYmlsaXR5 IGlzCiAgICAgdG8gcmVidWlsZCB0aGUgaW5kZXggd2l0aCA8Y29tbWFuZD5SRUlOREVYIElOREVY IENPTkNVUlJFTlRMWTwvY29tbWFuZD4pLgogICAgPC9wYXJhPgogCmRpZmYgLS1naXQgYS9kb2Mv c3JjL3NnbWwvcmVmL3JlaW5kZXguc2dtbCBiL2RvYy9zcmMvc2dtbC9yZWYvcmVpbmRleC5zZ21s CmluZGV4IDE4NWNkNzVjYTMwLi45ZTAyNDgyNjFhZSAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21s L3JlZi9yZWluZGV4LnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9yZWluZGV4LnNnbWwKQEAg LTM2OCw5ICszNjgsOCBAQCBSRUlOREVYIFsgKCA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRl ciI+b3B0aW9uPC9yZXBsYWNlYWJsZT4gWywgLi4uXSApIF0geyBEQQogICAgIDxwcm9kdWN0bmFt ZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4gc3VwcG9ydHMgcmVidWlsZGluZyBpbmRleGVzIHdp dGggbWluaW11bSBsb2NraW5nCiAgICAgb2Ygd3JpdGVzLiAgVGhpcyBtZXRob2QgaXMgaW52b2tl ZCBieSBzcGVjaWZ5aW5nIHRoZQogICAgIDxsaXRlcmFsPkNPTkNVUlJFTlRMWTwvbGl0ZXJhbD4g b3B0aW9uIG9mIDxjb21tYW5kPlJFSU5ERVg8L2NvbW1hbmQ+LiBXaGVuIHRoaXMgb3B0aW9uCi0g ICAgaXMgdXNlZCwgPHByb2R1Y3RuYW1lPlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1lPiBtdXN0IHBl cmZvcm0gdHdvIHNjYW5zIG9mIHRoZSB0YWJsZQotICAgIGZvciBlYWNoIGluZGV4IHRoYXQgbmVl ZHMgdG8gYmUgcmVidWlsdCBhbmQgd2FpdCBmb3IgdGVybWluYXRpb24gb2YKLSAgICBhbGwgZXhp c3RpbmcgdHJhbnNhY3Rpb25zIHRoYXQgY291bGQgcG90ZW50aWFsbHkgdXNlIHRoZSBpbmRleC4K KyAgICBpcyB1c2VkLCA8cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+IG11c3Qg cGVyZm9ybSBzZXZlcmFsIHN0ZXBzIHRvIGVuc3VyZSBkYXRhCisgICAgY29uc2lzdGVuY3kgd2hp bGUgYWxsb3dpbmcgbm9ybWFsIG9wZXJhdGlvbnMgdG8gY29udGludWUuCiAgICAgVGhpcyBtZXRo b2QgcmVxdWlyZXMgbW9yZSB0b3RhbCB3b3JrIHRoYW4gYSBzdGFuZGFyZCBpbmRleAogICAgIHJl YnVpbGQgYW5kIHRha2VzIHNpZ25pZmljYW50bHkgbG9uZ2VyIHRvIGNvbXBsZXRlIGFzIGl0IG5l ZWRzIHRvIHdhaXQKICAgICBmb3IgdW5maW5pc2hlZCB0cmFuc2FjdGlvbnMgdGhhdCBtaWdodCBt b2RpZnkgdGhlIGluZGV4LiBIb3dldmVyLCBzaW5jZQpAQCAtMzg4LDcgKzM4Nyw3IEBAIFJFSU5E RVggWyAoIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5vcHRpb248L3JlcGxhY2VhYmxl PiBbLCAuLi5dICkgXSB7IERBCiAgICAgPG9yZGVyZWRsaXN0PgogICAgICA8bGlzdGl0ZW0+CiAg ICAgICA8cGFyYT4KLSAgICAgICBBIG5ldyB0cmFuc2llbnQgaW5kZXggZGVmaW5pdGlvbiBpcyBh ZGRlZCB0byB0aGUgY2F0YWxvZworICAgICAgIEEgbmV3IHRyYW5zaWVudCBpbmRleCBkZWZpbml0 aW9uIGFuZCBhbiBhdXhpbGlhcnkgaW5kZXggYXJlIGFkZGVkIHRvIHRoZSBjYXRhbG9nCiAgICAg ICAgPGxpdGVyYWw+cGdfaW5kZXg8L2xpdGVyYWw+LiAgVGhpcyBkZWZpbml0aW9uIHdpbGwgYmUg dXNlZCB0byByZXBsYWNlCiAgICAgICAgdGhlIG9sZCBpbmRleC4gIEEgPGxpdGVyYWw+U0hBUkUg VVBEQVRFIEVYQ0xVU0lWRTwvbGl0ZXJhbD4gbG9jayBhdAogICAgICAgIHNlc3Npb24gbGV2ZWwg aXMgdGFrZW4gb24gdGhlIGluZGV4ZXMgYmVpbmcgcmVpbmRleGVkIGFzIHdlbGwgYXMgdGhlaXIK QEAgLTM5OCw3ICszOTcsMTUgQEAgUkVJTkRFWCBbICggPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJh bWV0ZXIiPm9wdGlvbjwvcmVwbGFjZWFibGU+IFssIC4uLl0gKSBdIHsgREEKIAogICAgICA8bGlz dGl0ZW0+CiAgICAgICA8cGFyYT4KLSAgICAgICBBIGZpcnN0IHBhc3MgdG8gYnVpbGQgdGhlIGlu ZGV4IGlzIGRvbmUgZm9yIGVhY2ggbmV3IGluZGV4LiAgT25jZSB0aGUKKyAgICAgICBUaGUgYXV4 aWxpYXJ5IGluZGV4IGlzIG1hcmtlZCBhcyAicmVhZHkgZm9yIGluc2VydHMiLCBtYWtpbmcKKyAg ICAgICBpdCB2aXNpYmxlIHRvIG90aGVyIHNlc3Npb25zLiBUaGlzIGluZGV4IGVmZmljaWVudGx5 IHRyYWNrcyBhbGwgbmV3CisgICAgICAgdHVwbGVzIGR1cmluZyB0aGUgcmVpbmRleCBwcm9jZXNz LgorICAgICAgPC9wYXJhPgorICAgICA8L2xpc3RpdGVtPgorCisgICAgIDxsaXN0aXRlbT4KKyAg ICAgIDxwYXJhPgorICAgICAgIFRoZSBuZXcgbWFpbiBpbmRleCBpcyBidWlsdCBieSBzY2Fubmlu ZyB0aGUgdGFibGUuICBPbmNlIHRoZQogICAgICAgIGluZGV4IGlzIGJ1aWx0LCBpdHMgZmxhZyA8 bGl0ZXJhbD5wZ19pbmRleC5pbmRpc3JlYWR5PC9saXRlcmFsPiBpcwogICAgICAgIHN3aXRjaGVk IHRvIDxxdW90ZT50cnVlPC9xdW90ZT4gdG8gbWFrZSBpdCByZWFkeSBmb3IgaW5zZXJ0cywgbWFr aW5nIGl0CiAgICAgICAgdmlzaWJsZSB0byBvdGhlciBzZXNzaW9ucyBvbmNlIHRoZSB0cmFuc2Fj dGlvbiB0aGF0IHBlcmZvcm1lZCB0aGUgYnVpbGQKQEAgLTQwOSw5ICs0MTYsOSBAQCBSRUlOREVY IFsgKCA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+b3B0aW9uPC9yZXBsYWNlYWJsZT4g WywgLi4uXSApIF0geyBEQQogCiAgICAgIDxsaXN0aXRlbT4KICAgICAgIDxwYXJhPgotICAgICAg IFRoZW4gYSBzZWNvbmQgcGFzcyBpcyBwZXJmb3JtZWQgdG8gYWRkIHR1cGxlcyB0aGF0IHdlcmUg YWRkZWQgd2hpbGUgdGhlCi0gICAgICAgZmlyc3QgcGFzcyB3YXMgcnVubmluZy4gIFRoaXMgc3Rl cCBpcyBhbHNvIGRvbmUgaW4gYSBzZXBhcmF0ZQotICAgICAgIHRyYW5zYWN0aW9uIGZvciBlYWNo IGluZGV4LgorICAgICAgIEEgdmFsaWRhdGlvbiBwaGFzZSBtZXJnZXMgYW55IG1pc3NpbmcgZW50 cmllcyBmcm9tIHRoZSBhdXhpbGlhcnkgaW5kZXgKKyAgICAgICBpbnRvIHRoZSBtYWluIGluZGV4 LCBlbnN1cmluZyBhbGwgY29uY3VycmVudCBjaGFuZ2VzIGFyZSBjYXB0dXJlZC4KKyAgICAgICBU aGlzIHN0ZXAgaXMgYWxzbyBkb25lIGluIGEgc2VwYXJhdGUgdHJhbnNhY3Rpb24gZm9yIGVhY2gg aW5kZXguCiAgICAgICA8L3BhcmE+CiAgICAgIDwvbGlzdGl0ZW0+CiAKQEAgLTQyOCw3ICs0MzUs NyBAQCBSRUlOREVYIFsgKCA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+b3B0aW9uPC9y ZXBsYWNlYWJsZT4gWywgLi4uXSApIF0geyBEQQogCiAgICAgIDxsaXN0aXRlbT4KICAgICAgIDxw YXJhPgotICAgICAgIFRoZSBvbGQgaW5kZXhlcyBoYXZlIDxsaXRlcmFsPnBnX2luZGV4LmluZGlz cmVhZHk8L2xpdGVyYWw+IHN3aXRjaGVkIHRvCisgICAgICAgVGhlIG9sZCBhbmQgYXV4aWxpYXJ5 IGluZGV4ZXMgaGF2ZSA8bGl0ZXJhbD5wZ19pbmRleC5pbmRpc3JlYWR5PC9saXRlcmFsPiBzd2l0 Y2hlZCB0bwogICAgICAgIDxxdW90ZT5mYWxzZTwvcXVvdGU+IHRvIHByZXZlbnQgYW55IG5ldyB0 dXBsZSBpbnNlcnRpb25zLCBhZnRlciB3YWl0aW5nCiAgICAgICAgZm9yIHJ1bm5pbmcgcXVlcmll cyB0aGF0IG1pZ2h0IHJlZmVyZW5jZSB0aGUgb2xkIGluZGV4IHRvIGNvbXBsZXRlLgogICAgICAg PC9wYXJhPgpAQCAtNDM2LDcgKzQ0Myw3IEBAIFJFSU5ERVggWyAoIDxyZXBsYWNlYWJsZSBjbGFz cz0icGFyYW1ldGVyIj5vcHRpb248L3JlcGxhY2VhYmxlPiBbLCAuLi5dICkgXSB7IERBCiAKICAg ICAgPGxpc3RpdGVtPgogICAgICAgPHBhcmE+Ci0gICAgICAgVGhlIG9sZCBpbmRleGVzIGFyZSBk cm9wcGVkLiAgVGhlIDxsaXRlcmFsPlNIQVJFIFVQREFURQorICAgICAgIFRoZSBvbGQgYW5kIGF1 eGlsaWFyeSBpbmRleGVzIGFyZSBkcm9wcGVkLiAgVGhlIDxsaXRlcmFsPlNIQVJFIFVQREFURQog ICAgICAgIEVYQ0xVU0lWRTwvbGl0ZXJhbD4gc2Vzc2lvbiBsb2NrcyBmb3IgdGhlIGluZGV4ZXMg YW5kIHRoZSB0YWJsZSBhcmUKICAgICAgICByZWxlYXNlZC4KICAgICAgIDwvcGFyYT4KQEAgLTQ0 NywxMSArNDU0LDExIEBAIFJFSU5ERVggWyAoIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVy Ij5vcHRpb248L3JlcGxhY2VhYmxlPiBbLCAuLi5dICkgXSB7IERBCiAgICA8cGFyYT4KICAgICBJ ZiBhIHByb2JsZW0gYXJpc2VzIHdoaWxlIHJlYnVpbGRpbmcgdGhlIGluZGV4ZXMsIHN1Y2ggYXMg YQogICAgIHVuaXF1ZW5lc3MgdmlvbGF0aW9uIGluIGEgdW5pcXVlIGluZGV4LCB0aGUgPGNvbW1h bmQ+UkVJTkRFWDwvY29tbWFuZD4KLSAgICBjb21tYW5kIHdpbGwgZmFpbCBidXQgbGVhdmUgYmVo aW5kIGFuIDxxdW90ZT5pbnZhbGlkPC9xdW90ZT4gbmV3IGluZGV4IGluIGFkZGl0aW9uIHRvCi0g ICAgdGhlIHByZS1leGlzdGluZyBvbmUuIFRoaXMgaW5kZXggd2lsbCBiZSBpZ25vcmVkIGZvciBx dWVyeWluZyBwdXJwb3NlcwotICAgIGJlY2F1c2UgaXQgbWlnaHQgYmUgaW5jb21wbGV0ZTsgaG93 ZXZlciBpdCB3aWxsIHN0aWxsIGNvbnN1bWUgdXBkYXRlCisgICAgY29tbWFuZCB3aWxsIGZhaWwg YnV0IGxlYXZlIGJlaGluZCBhbiA8cXVvdGU+aW52YWxpZDwvcXVvdGU+IG5ldyBpbmRleCBhbmQg aXRzIGF1eGlsaWFyeSBpbmRleCBpbiBhZGRpdGlvbiB0bworICAgIHRoZSBwcmUtZXhpc3Rpbmcg b25lLiBUaGVzZSBpbmRleGVzIHdpbGwgYmUgaWdub3JlZCBmb3IgcXVlcnlpbmcgcHVycG9zZXMK KyAgICBiZWNhdXNlIHRoZXkgbWlnaHQgYmUgaW5jb21wbGV0ZTsgaG93ZXZlciB0aGV5IHdpbGwg c3RpbGwgY29uc3VtZSB1cGRhdGUKICAgICBvdmVyaGVhZC4gVGhlIDxhcHBsaWNhdGlvbj5wc3Fs PC9hcHBsaWNhdGlvbj4gPGNvbW1hbmQ+XGQ8L2NvbW1hbmQ+IGNvbW1hbmQgd2lsbCByZXBvcnQK LSAgICBzdWNoIGFuIGluZGV4IGFzIDxsaXRlcmFsPklOVkFMSUQ8L2xpdGVyYWw+OgorICAgIHN1 Y2ggaW5kZXhlcyBhcyA8bGl0ZXJhbD5JTlZBTElEPC9saXRlcmFsPjoKIAogPHByb2dyYW1saXN0 aW5nPgogcG9zdGdyZXM9IyBcZCB0YWIKQEAgLTQ2MiwxMiArNDY5LDEzIEBAIHBvc3RncmVzPSMg XGQgdGFiCiBJbmRleGVzOgogICAgICJpZHgiIGJ0cmVlIChjb2wpCiAgICAgImlkeF9jY25ldyIg YnRyZWUgKGNvbCkgSU5WQUxJRAorICAgICJpZHhfY2NhdXgiIHN0aXIgKGNvbCkgSU5WQUxJRAog PC9wcm9ncmFtbGlzdGluZz4KIAogICAgIElmIHRoZSBpbmRleCBtYXJrZWQgPGxpdGVyYWw+SU5W QUxJRDwvbGl0ZXJhbD4gaXMgc3VmZml4ZWQKLSAgICA8bGl0ZXJhbD5fY2NuZXc8L2xpdGVyYWw+ LCB0aGVuIGl0IGNvcnJlc3BvbmRzIHRvIHRoZSB0cmFuc2llbnQKKyAgICA8bGl0ZXJhbD5fY2Nu ZXc8L2xpdGVyYWw+IG9yIDxsaXRlcmFsPl9jY2F1eDwvbGl0ZXJhbD4sIHRoZW4gaXQgY29ycmVz cG9uZHMgdG8gdGhlIHRyYW5zaWVudCBvciBhdXhpbGlhcnkKICAgICBpbmRleCBjcmVhdGVkIGR1 cmluZyB0aGUgY29uY3VycmVudCBvcGVyYXRpb24sIGFuZCB0aGUgcmVjb21tZW5kZWQKLSAgICBy ZWNvdmVyeSBtZXRob2QgaXMgdG8gZHJvcCBpdCB1c2luZyA8bGl0ZXJhbD5EUk9QIElOREVYPC9s aXRlcmFsPiwKKyAgICByZWNvdmVyeSBtZXRob2QgaXMgdG8gZHJvcCB0aGVzZSBpbmRleGVzIHVz aW5nIDxsaXRlcmFsPkRST1AgSU5ERVg8L2xpdGVyYWw+LAogICAgIHRoZW4gYXR0ZW1wdCA8Y29t bWFuZD5SRUlOREVYIENPTkNVUlJFTlRMWTwvY29tbWFuZD4gYWdhaW4uCiAgICAgSWYgdGhlIGlu dmFsaWQgaW5kZXggaXMgaW5zdGVhZCBzdWZmaXhlZCA8bGl0ZXJhbD5fY2NvbGQ8L2xpdGVyYWw+ LAogICAgIGl0IGNvcnJlc3BvbmRzIHRvIHRoZSBvcmlnaW5hbCBpbmRleCB3aGljaCBjb3VsZCBu b3QgYmUgZHJvcHBlZDsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL1JFQURN RS5IT1QgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9SRUFETUUuSE9UCmluZGV4IDc0ZTQwN2Yz NzVhLi5iMWM3OTc1MTdlZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvUkVB RE1FLkhPVAorKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9SRUFETUUuSE9UCkBAIC0zNzUs NiArMzc1LDExIEBAIGNvbnN0cmFpbnQgb24gd2hpY2ggdXBkYXRlcyBjYW4gYmUgSE9ULiAgT3Ro ZXIgdHJhbnNhY3Rpb25zIG11c3QgaW5jbHVkZQogc3VjaCBhbiBpbmRleCB3aGVuIGRldGVybWlu aW5nIEhPVC1zYWZldHkgb2YgdXBkYXRlcywgZXZlbiB0aG91Z2ggdGhleQogbXVzdCBpZ25vcmUg aXQgZm9yIGJvdGggaW5zZXJ0aW9uIGFuZCBzZWFyY2hpbmcgcHVycG9zZXMuCiAKK0Fsc28sIHNw ZWNpYWwgYXV4aWxpYXJ5IGluZGV4IGlzIGNyZWF0ZWQgdGhlIHNhbWUgd2F5LiBJdCBpcyBtYXJr ZWQgYXMKKyJyZWFkeSBmb3IgaW5zZXJ0cyIgd2l0aG91dCBhbnkgYWN0dWFsIHRhYmxlIHNjYW4u IEl0cyBwdXJwb3NlIGlzIHRvIGNvbGxlY3QKK25ldyB0dXBsZXMgaW5zZXJ0ZWQgaW50byB0YWJs ZSB3aGlsZSBvdXIgdGFyZ2V0IGluZGV4IGlzIHN0aWxsICJub3QgcmVhZHkKK2ZvciBpbnNlcnRz Ii4KKwogV2UgbXVzdCBkbyB0aGlzIHRvIGF2b2lkIG1ha2luZyBpbmNvcnJlY3QgaW5kZXggZW50 cmllcy4gIEZvciBleGFtcGxlLAogc3VwcG9zZSB3ZSBhcmUgYnVpbGRpbmcgYW4gaW5kZXggb24g Y29sdW1uIFggYW5kIHdlIG1ha2UgYW4gaW5kZXggZW50cnkgZm9yCiBhIG5vbi1IT1QgdHVwbGUg d2l0aCBYPTEuICBUaGVuIHNvbWUgb3RoZXIgYmFja2VuZCwgdW5hd2FyZSB0aGF0IFggaXMgYW4K QEAgLTM5NCwxMCArMzk5LDEwIEBAIGVudHJ5IGF0IHRoZSByb290IG9mIHRoZSBIT1QtdXBkYXRl IGNoYWluIGJ1dCB3ZSB1c2UgdGhlIGtleSB2YWx1ZSBmcm9tIHRoZQogbGl2ZSB0dXBsZS4KIAog V2UgbWFyayB0aGUgaW5kZXggb3BlbiBmb3IgaW5zZXJ0cyAoYnV0IHN0aWxsIG5vdCByZWFkeSBm b3IgcmVhZHMpIHRoZW4KLXdlIGFnYWluIHdhaXQgZm9yIHRyYW5zYWN0aW9ucyB3aGljaCBoYXZl IHRoZSB0YWJsZSBvcGVuLiAgVGhlbiB3ZSB0YWtlCi1hIHNlY29uZCByZWZlcmVuY2Ugc25hcHNo b3QgYW5kIHZhbGlkYXRlIHRoZSBpbmRleC4gIFRoaXMgc2VhcmNoZXMgZm9yCi10dXBsZXMgbWlz c2luZyBmcm9tIHRoZSBpbmRleCwgYW5kIGluc2VydHMgYW55IG1pc3Npbmcgb25lcy4gIEFnYWlu LAotdGhlIGluZGV4IGVudHJpZXMgaGF2ZSB0byBoYXZlIFRJRHMgZXF1YWwgdG8gSE9ULWNoYWlu IHJvb3QgVElEcywgYnV0Cit3ZSBhZ2FpbiB3YWl0IGZvciB0cmFuc2FjdGlvbnMgd2hpY2ggaGF2 ZSB0aGUgdGFibGUgb3Blbi4gIFRoZW4gdmFsaWRhdGUKK3RoZSBpbmRleC4gIFRoaXMgc2VhcmNo ZXMgZm9yIHR1cGxlcyBtaXNzaW5nIGZyb20gdGhlIGluZGV4IGluIGF1eGlsaWFyeQoraW5kZXgs IGFuZCBpbnNlcnRzIGFueSBtaXNzaW5nIG9uZXMgaWYgdGhleSBhcmUgdmlzaWJsZSB0byByZWZl cmVuY2Ugc25hcHNob3QuCitBZ2FpbiwgdGhlIGluZGV4IGVudHJpZXMgaGF2ZSB0byBoYXZlIFRJ RHMgZXF1YWwgdG8gSE9ULWNoYWluIHJvb3QgVElEcywgYnV0CiB0aGUgdmFsdWUgdG8gYmUgaW5z ZXJ0ZWQgaXMgdGhlIG9uZSBmcm9tIHRoZSBsaXZlIHR1cGxlLgogCiBUaGVuIHdlIHdhaXQgdW50 aWwgZXZlcnkgdHJhbnNhY3Rpb24gdGhhdCBjb3VsZCBoYXZlIGEgc25hcHNob3Qgb2xkZXIgdGhh bgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYyBi L3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKaW5kZXggMjUzYTczNWI2 YzEuLmY5MDMxMGExYWI4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFw YW1faGFuZGxlci5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVy LmMKQEAgLTQxLDE1ICs0MSwxNyBAQAogI2luY2x1ZGUgInN0b3JhZ2UvYnVmcGFnZS5oIgogI2lu Y2x1ZGUgInN0b3JhZ2UvbG1nci5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcHJlZGljYXRlLmgiCisj aW5jbHVkZSAic3RvcmFnZS9wcm9jLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcm9jYXJyYXkuaCIK ICNpbmNsdWRlICJzdG9yYWdlL3NtZ3IuaCIKICNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgog I2luY2x1ZGUgInV0aWxzL3JlbC5oIgogI2luY2x1ZGUgInV0aWxzL3R1cGxlc29ydC5oIgorI2lu Y2x1ZGUgInV0aWxzL3R1cGxlc3RvcmUuaCIKIAogc3RhdGljIHZvaWQgcmVmb3JtX2FuZF9yZXdy aXRlX3R1cGxlKEhlYXBUdXBsZSB0dXBsZSwKLQkJCQkJCQkJCSBSZWxhdGlvbiBPbGRIZWFwLCBS ZWxhdGlvbiBOZXdIZWFwLAotCQkJCQkJCQkJIERhdHVtICp2YWx1ZXMsIGJvb2wgKmlzbnVsbCwg UmV3cml0ZVN0YXRlIHJ3c3RhdGUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFJlbGF0aW9uIE9sZEhlYXAsIFJlbGF0aW9uIE5ld0hlYXAsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgRGF0dW0gKnZhbHVlcywgYm9vbCAqaXNudWxsLCBSZXdyaXRl U3RhdGUgcndzdGF0ZSk7CiAKIHN0YXRpYyBib29sIFNhbXBsZUhlYXBUdXBsZVZpc2libGUoVGFi bGVTY2FuRGVzYyBzY2FuLCBCdWZmZXIgYnVmZmVyLAogCQkJCQkJCQkgICBIZWFwVHVwbGUgdHVw bGUsCkBAIC0xNzY4LDI0MiArMTc3MCw0MDkgQEAgaGVhcGFtX2luZGV4X2J1aWxkX3JhbmdlX3Nj YW4oUmVsYXRpb24gaGVhcFJlbGF0aW9uLAogCXJldHVybiByZWx0dXBsZXM7CiB9CiAKKy8qCisg KiBDYWxjdWxhdGUgc2V0IGRpZmZlcmVuY2UgKHJlbGF0aXZlIGNvbXBsZW1lbnQpIG9mIG1haW4g YW5kIGF1eAorICogc2V0cy4KKyAqCisgKiBBbGwgcmVjb3JkcyB3aGljaCBhcmUgcHJlc2VudCBp biBhdXhpbGlhcnkgdHVwbGVzb3J0IGJ1dCBub3QgaW4KKyAqIG1haW4gYXJlIGFkZGVkIHRvIHRo ZSBzdG9yZS4KKyAqCisgKiBJbiBzZXQgdGhlb3J5IG5vdGF0aW9uIHN0b3JlID0gYXV4IC0gbWFp biBvciBzdG9yZSA9IGF1eCAvIG1haW4uCisgKgorICogcmV0dXJucyBudW1iZXIgb2YgaXRlbXMg YWRkZWQgdG8gc3RvcmUKKyAqLworc3RhdGljIGludDY0CitoZWFwYW1faW5kZXhfdmFsaWRhdGVf dHVwbGVzb3J0X2RpZmZlcmVuY2UoVHVwbGVzb3J0c3RhdGUgKm1haW4sCisJCQkJCQkJCQkJICAg VHVwbGVzb3J0c3RhdGUgKmF1eCwKKwkJCQkJCQkJCQkgICBUdXBsZXN0b3Jlc3RhdGUgKnN0b3Jl KQoreworCWludDY0CQludW0gPSAwOworCS8qIHN0YXRlIHZhcmlhYmxlcyBmb3IgdGhlIG1lcmdl ICovCisJSXRlbVBvaW50ZXIJaW5kZXhjdXJzb3IgPSBOVUxMLAorCQkJCQlhdXhpbmRleGN1cnNv ciA9IE5VTEw7CisJSXRlbVBvaW50ZXJEYXRhIGRlY29kZWQsCisJCQkJCWF1eGRlY29kZWQ7CisJ Ym9vbAkJCXR1cGxlc29ydF9lbXB0eSA9IGZhbHNlLAorCQkJCQlhdXh0dXBsZXNvcnRfZW1wdHkg PSBmYWxzZTsKKworCS8qIEluaXRpYWxpemUgcG9pbnRlcnMuICovCisJSXRlbVBvaW50ZXJTZXRJ bnZhbGlkKCZkZWNvZGVkKTsKKwlJdGVtUG9pbnRlclNldEludmFsaWQoJmF1eGRlY29kZWQpOwor CisJLyoKKwkgKiBNYWluIGxvb3A6IHdlIHN0ZXAgdGhyb3VnaCB0aGUgYXV4aWxpYXJ5IHNvcnQg KGF1eFN0YXRlLT50dXBsZXNvcnQpLAorCSAqIHdoaWNoIGhvbGRzIFRJRHMgdGhhdCBtdXN0IGNv bXBhcmVkIHRvIHRob3NlIGZyb20gdGhlICJtYWluIiBzb3J0CisJICogKHN0YXRlLT50dXBsZXNv cnQpLgorCSAqLworCXdoaWxlICghYXV4dHVwbGVzb3J0X2VtcHR5KQorCXsKKwkJRGF0dW0JCXRz X3ZhbDsKKwkJYm9vbAkJdHNfaXNudWxsOworCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOworCisJ CS8qCisJCSAqIEF0dGVtcHQgdG8gZmV0Y2ggdGhlIG5leHQgVElEIGZyb20gdGhlIGF1eGlsaWFy eSBzb3J0LiBJZiBpdCdzCisJCSAqIGVtcHR5LCB3ZSBzZXQgYXV4aW5kZXhjdXJzb3IgdG8gTlVM TC4KKwkJICovCisJCWF1eHR1cGxlc29ydF9lbXB0eSA9ICF0dXBsZXNvcnRfZ2V0ZGF0dW0oYXV4 LCB0cnVlLAorCQkJCQkJCQkJCQkJIGZhbHNlLCAmdHNfdmFsLCAmdHNfaXNudWxsLAorCQkJCQkJ CQkJCQkJIE5VTEwpOworCQlBc3NlcnQoYXV4dHVwbGVzb3J0X2VtcHR5IHx8ICF0c19pc251bGwp OworCQlpZiAoIWF1eHR1cGxlc29ydF9lbXB0eSkKKwkJeworCQkJaXRlbXB0cl9kZWNvZGUoJmF1 eGRlY29kZWQsIERhdHVtR2V0SW50NjQodHNfdmFsKSk7CisJCQlhdXhpbmRleGN1cnNvciA9ICZh dXhkZWNvZGVkOworCQl9CisJCWVsc2UKKwkJeworCQkJYXV4aW5kZXhjdXJzb3IgPSBOVUxMOwor CQl9CisKKwkJLyoKKwkJICogSWYgdGhlIGF1eGlsaWFyeSBzb3J0IGlzIG5vdCB5ZXQgZW1wdHks IHdlIG5vdyB0cnkgdG8gc3luY2hyb25pemUKKwkJICogdGhlICJtYWluIiBzb3J0IGN1cnNvciAo aW5kZXhjdXJzb3IpIHdpdGggYXV4aW5kZXhjdXJzb3IuIFdlIGFkdmFuY2UKKwkJICogdGhlIG1h aW4gc29ydCBjdXJzb3IgdW50aWwgd2UndmUgcmVhY2hlZCBvciBwYXNzZWQgdGhlIGF1eGlsaWFy eSBUSUQuCisJCSAqLworCQlpZiAoIWF1eHR1cGxlc29ydF9lbXB0eSkKKwkJeworCQkJLyoKKwkJ CSAqIE1vdmUgdGhlIG1haW4gc29ydCBmb3J3YXJkIHdoaWxlOgorCQkJICogICAoMSkgSXQncyBu b3QgZXhoYXVzdGVkICh0dXBsZXNvcnRfZW1wdHkgPT0gZmFsc2UpLCBhbmQKKwkJCSAqICAgKDIp IEVpdGhlciBpbmRleGN1cnNvciBpcyBOVUxMIChmaXJzdCBpdGVyYXRpb24pIG9yCisJCQkgKiAg ICAgICBpbmRleGN1cnNvciA8IGF1eGluZGV4Y3Vyc29yIGluIFRJRCBvcmRlci4KKwkJCSAqLwor CQkJd2hpbGUgKCF0dXBsZXNvcnRfZW1wdHkgJiYgKGluZGV4Y3Vyc29yID09IE5VTEwgfHwgLyog bnVsbCBvbiBmaXJzdCB0aW1lIGhlcmUgKi8KKwkJCQkJCUl0ZW1Qb2ludGVyQ29tcGFyZShpbmRl eGN1cnNvciwgYXV4aW5kZXhjdXJzb3IpIDwgMCkpCisJCQl7CisJCQkJLyoKKwkJCQkgKiBHZXQg dGhlIG5leHQgVElEIGZyb20gdGhlIG1haW4gc29ydC4gSWYgaXQncyBlbXB0eSwKKwkJCQkgKiB3 ZSBzZXQgaW5kZXhjdXJzb3IgdG8gTlVMTC4KKwkJCQkgKi8KKwkJCQl0dXBsZXNvcnRfZW1wdHkg PSAhdHVwbGVzb3J0X2dldGRhdHVtKG1haW4sIHRydWUsCisJCQkJCQkJCQkJCQkJICBmYWxzZSwg JnRzX3ZhbCwgJnRzX2lzbnVsbCwKKwkJCQkJCQkJCQkJCQkgIE5VTEwpOworCQkJCUFzc2VydCh0 dXBsZXNvcnRfZW1wdHkgfHwgIXRzX2lzbnVsbCk7CisKKwkJCQlpZiAoIXR1cGxlc29ydF9lbXB0 eSkKKwkJCQl7CisJCQkJCWl0ZW1wdHJfZGVjb2RlKCZkZWNvZGVkLCBEYXR1bUdldEludDY0KHRz X3ZhbCkpOworCQkJCQlpbmRleGN1cnNvciA9ICZkZWNvZGVkOworCQkJCX0KKwkJCQllbHNlCisJ CQkJeworCQkJCQlpbmRleGN1cnNvciA9IE5VTEw7CisJCQkJfQorCisJCQkJQ0hFQ0tfRk9SX0lO VEVSUlVQVFMoKTsKKwkJCX0KKworCQkJLyoKKwkJCSAqIE5vdywgaWYgZWl0aGVyOgorCQkJICog IC0gdGhlIG1haW4gc29ydCBpcyBlbXB0eSwgb3IKKwkJCSAqICAtIGluZGV4Y3Vyc29yID4gYXV4 aW5kZXhjdXJzb3IsCisJCQkgKgorCQkJICogdGhlbiBhdXhpbmRleGN1cnNvciBpZGVudGlmaWVz IGEgVElEIHRoYXQgZG9lc24ndCBhcHBlYXIgaW4KKwkJCSAqIHRoZSBtYWluIHNvcnQuIFdlIGxp a2VseSBuZWVkIHRvIGluc2VydCBpdAorCQkJICogaW50byB0aGUgdGFyZ2V0IGluZGV4IGlmIGl0 4oCZcyB2aXNpYmxlIGluIHRoZSBoZWFwLgorCQkJICovCisJCQlpZiAodHVwbGVzb3J0X2VtcHR5 IHx8IEl0ZW1Qb2ludGVyQ29tcGFyZShpbmRleGN1cnNvciwgYXV4aW5kZXhjdXJzb3IpID4gMCkK KwkJCXsKKwkJCQl0dXBsZXN0b3JlX3B1dGRhdHVtKHN0b3JlLCBJbnQ2NEdldERhdHVtKGl0ZW1w dHJfZW5jb2RlKGF1eGluZGV4Y3Vyc29yKSkpOworCQkJCW51bSsrOworCQkJfQorCQl9CisJfQor CisJcmV0dXJuIG51bTsKK30KKwordHlwZWRlZiBzdHJ1Y3QgVmFsaWRhdGVJbmRleFNjYW5TdGF0 ZQoreworCVR1cGxlc3RvcmVzdGF0ZQkJKnN0b3JlOworCUJsb2NrTnVtYmVyCQkJcHJldl9ibG9j a19udW1iZXI7CisJT2Zmc2V0TnVtYmVyCQlwcmV2X29mZnNldF9udW1iZXI7Cit9IFZhbGlkYXRl SW5kZXhTY2FuU3RhdGU7CisKKy8qCisgKiBUaGlzIGlzIFJlYWRTdHJlYW1CbG9ja051bWJlckNC IGltcGxlbWVudGF0aW9uIHdoaWNoIHdvcmtzIGFzIGZvbGxvd3M6CisgKgorICogMSkgSXQgaXRl cmF0ZXMgb3ZlciBhIHNvcnRlZCB0dXBsZXN0b3JlLCB3aGVyZSBlYWNoIGVsZW1lbnQgaXMgYW4g ZW5jb2RlZAorICogICAgSXRlbVBvaW50ZXIKKyAqCisgKiAyKSBJdCByZXR1cm5zIHRoZSBjdXJy ZW50IEJsb2NrTnVtYmVyIGFuZCBjb2xsZWN0cyBhbGwgT2Zmc2V0TnVtYmVycworICogICAgZm9y IHRoYXQgYmxvY2sgaW4gcGVyX2J1ZmZlcl9kYXRhLgorICoKKyAqIDMpIE9uY2UgdGhlIGNvZGUg ZW5jb3VudGVycyBhIG5ldyBCbG9ja051bWJlciwgaXQgc3RvcHMgcmVhZGluZyBtb3JlCisgKiAg ICBvZmZzZXRzIGFuZCBzYXZlcyB0aGUgT2Zmc2V0TnVtYmVyIG9mIHRoZSBuZXcgYmxvY2sgZm9y IHRoZSBuZXh0IGNhbGwuCisgKgorICogNCkgVGhlIGxpc3Qgb2Ygb2Zmc2V0cyBmb3IgYSBibG9j ayBpcyBhbHdheXMgdGVybWluYXRlZCB3aXRoIEludmFsaWRPZmZzZXROdW1iZXIuCisgKgorICog VGhpcyBmdW5jdGlvbiBpcyBpbnRlbmRlZCB0byBiZSByZXBlYXRlZGx5IGNhbGxlZCwgZWFjaCB0 aW1lIHJldHVybmluZworICogdGhlIG5leHQgYmxvY2sgYW5kIGl0cyBjb3JyZXNwb25kaW5nIHNl dCBvZiBvZmZzZXRzLgorICovCitzdGF0aWMgQmxvY2tOdW1iZXIKK2hlYXBhbV9pbmRleF92YWxp ZGF0ZV9zY2FuX3JlYWRfc3RyZWFtX25leHQoCisJCQkJCQkJCSAgUmVhZFN0cmVhbSAqc3RyZWFt LAorCQkJCQkJCQkgIHZvaWQgKnZvaWRfY2FsbGJhY2tfcHJpdmF0ZV9kYXRhLAorCQkJCQkJCQkg IHZvaWQgKnZvaWRfcGVyX2J1ZmZlcl9kYXRhCisJCQkJCQkJCSAgKQoreworCWJvb2wgc2hvdWxk X2ZyZWU7CisJRGF0dW0gZGF0dW07CisJQmxvY2tOdW1iZXIgcmVzdWx0ID0gSW52YWxpZEJsb2Nr TnVtYmVyOworCWludCBpID0gMDsKKworCS8qCisJICogUmV0cmlldmUgdGhlIHNwZWNpYWxpemVk IGNhbGxiYWNrIHN0YXRlIGFuZCB0aGUgb3V0cHV0IGJ1ZmZlci4KKwkgKiBjYWxsYmFja19wcml2 YXRlX2RhdGEga2VlcHMgdHJhY2sgb2YgdGhlIHByZXZpb3VzIGJsb2NrIGFuZCBvZmZzZXQKKwkg KiBmcm9tIGEgcHJpb3IgaW52b2NhdGlvbiwgaWYgYW55LgorCSAqLworCVZhbGlkYXRlSW5kZXhT Y2FuU3RhdGUgKmNhbGxiYWNrX3ByaXZhdGVfZGF0YSA9IHZvaWRfY2FsbGJhY2tfcHJpdmF0ZV9k YXRhOworCU9mZnNldE51bWJlciAqcGVyX2J1ZmZlcl9kYXRhID0gdm9pZF9wZXJfYnVmZmVyX2Rh dGE7CisKKwkvKgorCSAqIElmIHRoZXJlIGlzIGEgImxlZnRvdmVyIiBvZmZzZXQgbnVtYmVyIGZy b20gdGhlIHByZXZpb3VzIGludm9jYXRpb24sCisJICogaXQgbWVhbnMgd2UgaGFkIHN3aXRjaGVk IHRvIGEgbmV3IGJsb2NrIGluIHRoZSBtaWRkbGUgb2YgdGhlIGxhc3QgY2FsbC4KKwkgKiBXZSBw bGFjZSB0aGF0IGxlZnRvdmVyIG9mZnNldCBudW1iZXIgaW50byB0aGUgYnVmZmVyIGZpcnN0Lgor CSAqLworCWlmIChjYWxsYmFja19wcml2YXRlX2RhdGEtPnByZXZfb2Zmc2V0X251bWJlciAhPSBJ bnZhbGlkT2Zmc2V0TnVtYmVyKQorCXsKKwkJQXNzZXJ0KGNhbGxiYWNrX3ByaXZhdGVfZGF0YS0+ cHJldl9ibG9ja19udW1iZXIgIT0gSW52YWxpZEJsb2NrTnVtYmVyKTsKKwkJLyoKKwkJICogJ3Jl c3VsdCcgaXMgdGhlIGJsb2NrIG51bWJlciB0byByZXR1cm4uIFdlIHNldCBpdCB0byB0aGUgYmxv Y2sKKwkJICogZnJvbSB0aGUgcHJldmlvdXMgbGVmdG92ZXIgb2Zmc2V0LgorCQkgKi8KKwkJcmVz dWx0ID0gY2FsbGJhY2tfcHJpdmF0ZV9kYXRhLT5wcmV2X2Jsb2NrX251bWJlcjsKKwkJLyogUGxh Y2UgbGVmdG92ZXIgb2Zmc2V0IG51bWJlciBpbiB0aGUgb3V0cHV0IGJ1ZmZlci4gKi8KKwkJcGVy X2J1ZmZlcl9kYXRhW2krK10gPSBjYWxsYmFja19wcml2YXRlX2RhdGEtPnByZXZfb2Zmc2V0X251 bWJlcjsKKwkJLyoKKwkJICogQ2xlYXIgdGhlIGxlZnRvdmVyIG9mZnNldCBudW1iZXIgc28gaXQg d29uJ3QgYmUgcmV1c2VkIHVubGVzcworCQkgKiB3ZSBlbmNvdW50ZXIgYW5vdGhlciBibG9jayBj aGFuZ2UuCisJCSAqLworCQljYWxsYmFja19wcml2YXRlX2RhdGEtPnByZXZfb2Zmc2V0X251bWJl ciA9IEludmFsaWRPZmZzZXROdW1iZXI7CisJfQorCisJLyoKKwkgKiBSZWFkIGZyb20gdGhlIHR1 cGxlc3RvcmUgdW50aWwgd2UgZWl0aGVyIHJ1biBvdXQgb2YgdHVwbGVzIG9yIHdlCisJICogZW5j b3VudGVyIGEgYmxvY2sgY2hhbmdlLiBGb3IgZWFjaCB0dXBsZToKKwkgKgorCSAqICAgMSkgRGVj b2RlIGl0cyBibG9jay9vZmZzZXQgZnJvbSB0aGUgRGF0dW0uCisJICogICAyKSBJZiBpdCdzIHRo ZSBmaXJzdCB0aW1lIGluIHRoaXMgY2FsbCAocHJldl9ibG9ja19udW1iZXIgPT0gSW52YWxpZEJs b2NrTnVtYmVyKSwKKwkgKiAgICAgIGluaXRpYWxpemUgcHJldl9ibG9ja19udW1iZXIuCisJICog ICAzKSBJZiB0aGUgYmxvY2sgbnVtYmVyIG1hdGNoZXMgdGhlIGN1cnJlbnQgYmxvY2ssIGNvbGxl Y3QgdGhlIG9mZnNldC4KKwkgKiAgIDQpIElmIHRoZSBibG9jayBudW1iZXIgZGlmZmVycywgc2F2 ZSB0aGF0IG9mZnNldCBhcyBsZWZ0b3ZlciBhbmQgYnJlYWsKKwkgKiAgICAgIHNvIHRoYXQgdGhl IG5leHQgY2FsbCBjYW4gaGFuZGxlIHRoZSBuZXcgYmxvY2suCisJICovCisJd2hpbGUgKHR1cGxl c3RvcmVfZ2V0ZGF0dW0oY2FsbGJhY2tfcHJpdmF0ZV9kYXRhLT5zdG9yZSwgdHJ1ZSwgJnNob3Vs ZF9mcmVlLCAmZGF0dW0pKQorCXsKKwkJQmxvY2tOdW1iZXIgbmV4dF9ibG9ja19udW1iZXI7CisJ CUl0ZW1Qb2ludGVyRGF0YSBuZXh0X2RhdGE7CisKKwkJLyogRGVjb2RlIHRoZSBkYXR1bSBpbnRv IGFuIEl0ZW1Qb2ludGVyIChibG9jayArIG9mZnNldCkuICovCisJCWl0ZW1wdHJfZGVjb2RlKCZu ZXh0X2RhdGEsIERhdHVtR2V0SW50NjQoZGF0dW0pKTsKKwkJbmV4dF9ibG9ja19udW1iZXIgPSBJ dGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKCZuZXh0X2RhdGEpOworCisJCS8qCisJCSAqIElmIHdl IGhhdmVuJ3Qgc2V0IGEgYmxvY2sgbnVtYmVyIHlldCB0aGlzIHJvdW5kLCBpbml0aWFsaXplIGl0 CisJCSAqIHVzaW5nIHRoZSBmaXJzdCB0dXBsZSB3ZSByZWFkLgorCQkgKi8KKwkJaWYgKGNhbGxi YWNrX3ByaXZhdGVfZGF0YS0+cHJldl9ibG9ja19udW1iZXIgPT0gSW52YWxpZEJsb2NrTnVtYmVy KQorCQkJY2FsbGJhY2tfcHJpdmF0ZV9kYXRhLT5wcmV2X2Jsb2NrX251bWJlciA9IG5leHRfYmxv Y2tfbnVtYmVyOworCisJCS8qCisJCSAqIEFsd2F5cyBzZXQgdGhlIHJlc3VsdCB0byBiZSB0aGUg ImN1cnJlbnQiIGJsb2NrIG51bWJlcgorCQkgKiB3ZSBhcmUgZmlsbGluZyBvZmZzZXRzIGZvci4K KwkJICovCisJCXJlc3VsdCA9IGNhbGxiYWNrX3ByaXZhdGVfZGF0YS0+cHJldl9ibG9ja19udW1i ZXI7CisKKwkJLyoKKwkJICogSWYgdGhpcyB0dXBsZSBpcyBmcm9tIHRoZSBzYW1lIGJsb2NrLCBq dXN0IHN0b3JlIGl0cyBvZmZzZXQKKwkJICogaW4gb3VyIHBlcl9idWZmZXJfZGF0YSBhcnJheS4K KwkJICovCisJCWlmIChuZXh0X2Jsb2NrX251bWJlciA9PSBjYWxsYmFja19wcml2YXRlX2RhdGEt PnByZXZfYmxvY2tfbnVtYmVyKQorCQl7CisJCQlwZXJfYnVmZmVyX2RhdGFbaSsrXSA9IEl0ZW1Q b2ludGVyR2V0T2Zmc2V0TnVtYmVyKCZuZXh0X2RhdGEpOworCisJCQkvKiBGcmVlIHRoZSBkYXR1 bSBpZiBuZWVkZWQuICovCisJCQlpZiAoc2hvdWxkX2ZyZWUpCisJCQkJcGZyZWUoRGF0dW1HZXRQ b2ludGVyKGRhdHVtKSk7CisJCX0KKwkJZWxzZQorCQl7CisJCQkvKgorCQkJICogSWYgdGhlIGJs b2NrIGp1c3QgY2hhbmdlZCwgc3RvcmUgdGhlIG9mZnNldCBvZiB0aGUgbmV3IGJsb2NrCisJCQkg KiBhcyBsZWZ0b3ZlciBmb3IgdGhlIG5leHQgaW52b2NhdGlvbiBhbmQgYnJlYWsgb3V0LgorCQkJ ICovCisJCQljYWxsYmFja19wcml2YXRlX2RhdGEtPnByZXZfYmxvY2tfbnVtYmVyID0gbmV4dF9i bG9ja19udW1iZXI7CisJCQljYWxsYmFja19wcml2YXRlX2RhdGEtPnByZXZfb2Zmc2V0X251bWJl ciA9IEl0ZW1Qb2ludGVyR2V0T2Zmc2V0TnVtYmVyKCZuZXh0X2RhdGEpOworCisJCQkvKiBGcmVl IHRoZSBkYXR1bSBpZiBuZWVkZWQuICovCisJCQlpZiAoc2hvdWxkX2ZyZWUpCisJCQkJcGZyZWUo RGF0dW1HZXRQb2ludGVyKGRhdHVtKSk7CisKKwkJCS8qIEJyZWFrIHRvIGxldCB0aGUgbmV4dCBj YWxsIGhhbmRsZSB0aGUgbmV3IGJsb2NrLiAqLworCQkJYnJlYWs7CisJCX0KKwl9CisKKwkvKgor CSAqIFRlcm1pbmF0ZSB0aGUgbGlzdCBvZiBvZmZzZXRzIGZvciB0aGlzIGJsb2NrIHdpdGggYW4g SW52YWxpZE9mZnNldE51bWJlci4KKwkgKi8KKwlwZXJfYnVmZmVyX2RhdGFbaV0gPSBJbnZhbGlk T2Zmc2V0TnVtYmVyOworCXJldHVybiByZXN1bHQ7Cit9CisKIHN0YXRpYyB2b2lkCiBoZWFwYW1f aW5kZXhfdmFsaWRhdGVfc2NhbihSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAJCQkJCQkgICBSZWxh dGlvbiBpbmRleFJlbGF0aW9uLAogCQkJCQkJICAgSW5kZXhJbmZvICppbmRleEluZm8sCiAJCQkJ CQkgICBTbmFwc2hvdCBzbmFwc2hvdCwKLQkJCQkJCSAgIFZhbGlkYXRlSW5kZXhTdGF0ZSAqc3Rh dGUpCisJCQkJCQkgICBWYWxpZGF0ZUluZGV4U3RhdGUgKnN0YXRlLAorCQkJCQkJICAgVmFsaWRh dGVJbmRleFN0YXRlICphdXhTdGF0ZSkKIHsKLQlUYWJsZVNjYW5EZXNjIHNjYW47Ci0JSGVhcFNj YW5EZXNjIGhzY2FuOwotCUhlYXBUdXBsZQloZWFwVHVwbGU7CiAJRGF0dW0JCXZhbHVlc1tJTkRF WF9NQVhfS0VZU107CiAJYm9vbAkJaXNudWxsW0lOREVYX01BWF9LRVlTXTsKLQlFeHByU3RhdGUg ICpwcmVkaWNhdGU7Ci0JVHVwbGVUYWJsZVNsb3QgKnNsb3Q7Ci0JRVN0YXRlCSAgICplc3RhdGU7 Ci0JRXhwckNvbnRleHQgKmVjb250ZXh0OwotCUJsb2NrTnVtYmVyIHJvb3RfYmxrbm8gPSBJbnZh bGlkQmxvY2tOdW1iZXI7Ci0JT2Zmc2V0TnVtYmVyIHJvb3Rfb2Zmc2V0c1tNYXhIZWFwVHVwbGVz UGVyUGFnZV07Ci0JYm9vbAkJaW5faW5kZXhbTWF4SGVhcFR1cGxlc1BlclBhZ2VdOwotCUJsb2Nr TnVtYmVyIHByZXZpb3VzX2Jsa25vID0gSW52YWxpZEJsb2NrTnVtYmVyOwotCi0JLyogc3RhdGUg dmFyaWFibGVzIGZvciB0aGUgbWVyZ2UgKi8KLQlJdGVtUG9pbnRlciBpbmRleGN1cnNvciA9IE5V TEw7Ci0JSXRlbVBvaW50ZXJEYXRhIGRlY29kZWQ7Ci0JYm9vbAkJdHVwbGVzb3J0X2VtcHR5ID0g ZmFsc2U7CisKKwlUdXBsZVRhYmxlU2xvdCAgKnNsb3Q7CisJRVN0YXRlCQkJKmVzdGF0ZTsKKwlF eHByQ29udGV4dAkJKmVjb250ZXh0OworCUJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IGJzdHJhdGVneSA9 IEdldEFjY2Vzc1N0cmF0ZWd5KEJBU19CVUxLUkVBRCk7CisKKwlpbnQ2NAkJCW51bV90b19jaGVj azsKKwlUdXBsZXN0b3Jlc3RhdGUgKnR1cGxlc19mb3JfY2hlY2s7CisJVmFsaWRhdGVJbmRleFNj YW5TdGF0ZSBjYWxsYmFja19wcml2YXRlX2RhdGE7CisKKwlCdWZmZXIgYnVmOworCU9mZnNldE51 bWJlciogdHVwbGVzOworCVJlYWRTdHJlYW0gKnJlYWRfc3RyZWFtOworCisJLyogVXNlIDEwJSBv ZiBtZW1vcnkgZm9yIHR1cGxlIHN0b3JlLiAqLworCWludAkJc3RvcmVfd29ya19tZW1fcGFydCA9 IG1haW50ZW5hbmNlX3dvcmtfbWVtIC8gMTA7CisKKwkvKgorCSAqIEVuY29kZSBUSURzIGFzIGlu dDggdmFsdWVzIGZvciB0aGUgc29ydCwgcmF0aGVyIHRoYW4gZGlyZWN0bHkgc29ydGluZworCSAq IGl0ZW0gcG9pbnRlcnMuICBUaGlzIGNhbiBiZSBzaWduaWZpY2FudGx5IGZhc3RlciwgcHJpbWFy aWx5IGJlY2F1c2UgVElECisJICogaXMgYSBwYXNzLWJ5LXJlZmVyZW5jZSB0eXBlIG9uIGFsbCBw bGF0Zm9ybXMsIHdoZXJlYXMgaW50OCBpcworCSAqIHBhc3MtYnktdmFsdWUgb24gbW9zdCBwbGF0 Zm9ybXMuCisJICovCisJdHVwbGVzX2Zvcl9jaGVjayA9IHR1cGxlc3RvcmVfYmVnaW5fZGF0dW0o SU5UOE9JRCwgZmFsc2UsIGZhbHNlLCBzdG9yZV93b3JrX21lbV9wYXJ0KTsKIAogCS8qCiAJICog c2FuaXR5IGNoZWNrcwogCSAqLwogCUFzc2VydChPaWRJc1ZhbGlkKGluZGV4UmVsYXRpb24tPnJk X3JlbC0+cmVsYW0pKTsKIAotCS8qCi0JICogTmVlZCBhbiBFU3RhdGUgZm9yIGV2YWx1YXRpb24g b2YgaW5kZXggZXhwcmVzc2lvbnMgYW5kIHBhcnRpYWwtaW5kZXgKLQkgKiBwcmVkaWNhdGVzLiAg QWxzbyBhIHNsb3QgdG8gaG9sZCB0aGUgY3VycmVudCB0dXBsZS4KLQkgKi8KKwludW1fdG9fY2hl Y2sgPSBoZWFwYW1faW5kZXhfdmFsaWRhdGVfdHVwbGVzb3J0X2RpZmZlcmVuY2Uoc3RhdGUtPnR1 cGxlc29ydCwKKwkJCQkJCQkJCQkJCQkJIGF1eFN0YXRlLT50dXBsZXNvcnQsCisJCQkJCQkJCQkJ CQkJCSB0dXBsZXNfZm9yX2NoZWNrKTsKKworCS8qIEl0IGlzIG91ciByZXNwb25zaWJpbGl0eSB0 byBjbG9zZSB0dXBsZSBzb3J0IGFzIGZhc3QgYXMgd2UgY2FuICovCisJdHVwbGVzb3J0X2VuZChz dGF0ZS0+dHVwbGVzb3J0KTsKKwl0dXBsZXNvcnRfZW5kKGF1eFN0YXRlLT50dXBsZXNvcnQpOwor CisJc3RhdGUtPnR1cGxlc29ydCA9IGF1eFN0YXRlLT50dXBsZXNvcnQgPSBOVUxMOworCiAJZXN0 YXRlID0gQ3JlYXRlRXhlY3V0b3JTdGF0ZSgpOwogCWVjb250ZXh0ID0gR2V0UGVyVHVwbGVFeHBy Q29udGV4dChlc3RhdGUpOwogCXNsb3QgPSBNYWtlU2luZ2xlVHVwbGVUYWJsZVNsb3QoUmVsYXRp b25HZXREZXNjcihoZWFwUmVsYXRpb24pLAotCQkJCQkJCQkJJlRUU09wc0hlYXBUdXBsZSk7CisJ CQkJCQkJCQkmVFRTT3BzQnVmZmVySGVhcFR1cGxlKTsKIAogCS8qIEFycmFuZ2UgZm9yIGVjb250 ZXh0J3Mgc2NhbiB0dXBsZSB0byBiZSB0aGUgdHVwbGUgdW5kZXIgdGVzdCAqLwogCWVjb250ZXh0 LT5lY3h0X3NjYW50dXBsZSA9IHNsb3Q7CiAKLQkvKiBTZXQgdXAgZXhlY3V0aW9uIHN0YXRlIGZv ciBwcmVkaWNhdGUsIGlmIGFueS4gKi8KLQlwcmVkaWNhdGUgPSBFeGVjUHJlcGFyZVF1YWwoaW5k ZXhJbmZvLT5paV9QcmVkaWNhdGUsIGVzdGF0ZSk7CisJY2FsbGJhY2tfcHJpdmF0ZV9kYXRhLnBy ZXZfYmxvY2tfbnVtYmVyID0gSW52YWxpZEJsb2NrTnVtYmVyOworCWNhbGxiYWNrX3ByaXZhdGVf ZGF0YS5zdG9yZSA9IHR1cGxlc19mb3JfY2hlY2s7CisJY2FsbGJhY2tfcHJpdmF0ZV9kYXRhLnBy ZXZfb2Zmc2V0X251bWJlciA9IEludmFsaWRPZmZzZXROdW1iZXI7CiAKLQkvKgotCSAqIFByZXBh cmUgZm9yIHNjYW4gb2YgdGhlIGJhc2UgcmVsYXRpb24uICBXZSBuZWVkIGp1c3QgdGhvc2UgdHVw bGVzCi0JICogc2F0aXNmeWluZyB0aGUgcGFzc2VkLWluIHJlZmVyZW5jZSBzbmFwc2hvdC4gIFdl IG11c3QgZGlzYWJsZSBzeW5jc2NhbgotCSAqIGhlcmUsIGJlY2F1c2UgaXQncyBjcml0aWNhbCB0 aGF0IHdlIHJlYWQgZnJvbSBibG9jayB6ZXJvIGZvcndhcmQgdG8KLQkgKiBtYXRjaCB0aGUgc29y dGVkIFRJRHMuCi0JICovCi0Jc2NhbiA9IHRhYmxlX2JlZ2luc2Nhbl9zdHJhdChoZWFwUmVsYXRp b24sCS8qIHJlbGF0aW9uICovCi0JCQkJCQkJCSBzbmFwc2hvdCwJLyogc25hcHNob3QgKi8KLQkJ CQkJCQkJIDAsIC8qIG51bWJlciBvZiBrZXlzICovCi0JCQkJCQkJCSBOVUxMLAkvKiBzY2FuIGtl eSAqLwotCQkJCQkJCQkgdHJ1ZSwJLyogYnVmZmVyIGFjY2VzcyBzdHJhdGVneSBPSyAqLwotCQkJ CQkJCQkgZmFsc2UpOwkvKiBzeW5jc2NhbiBub3QgT0sgKi8KLQloc2NhbiA9IChIZWFwU2NhbkRl c2MpIHNjYW47CisJcmVhZF9zdHJlYW0gPSByZWFkX3N0cmVhbV9iZWdpbl9yZWxhdGlvbihSRUFE X1NUUkVBTV9NQUlOVEVOQU5DRSB8IFJFQURfU1RSRUFNX1VTRV9CQVRDSElORywKKwkJCQkJCQkJ CQkJCQkJIGJzdHJhdGVneSwKKwkJCQkJCQkJCQkJCQkJIGhlYXBSZWxhdGlvbiwgTUFJTl9GT1JL TlVNLAorCQkJCQkJCQkJCQkJCQkgaGVhcGFtX2luZGV4X3ZhbGlkYXRlX3NjYW5fcmVhZF9zdHJl YW1fbmV4dCwKKwkJCQkJCQkJCQkJCQkJICZjYWxsYmFja19wcml2YXRlX2RhdGEsCisJCQkJCQkJ CQkJCQkJCSAoTWF4SGVhcFR1cGxlc1BlclBhZ2UgKyAxKSAqIHNpemVvZihPZmZzZXROdW1iZXIp KTsKIAotCXBnc3RhdF9wcm9ncmVzc191cGRhdGVfcGFyYW0oUFJPR1JFU1NfU0NBTl9CTE9DS1Nf VE9UQUwsCi0JCQkJCQkJCSBoc2Nhbi0+cnNfbmJsb2Nrcyk7CisJcGdzdGF0X3Byb2dyZXNzX3Vw ZGF0ZV9wYXJhbShQUk9HUkVTU19DUkVBVEVJRFhfVFVQTEVTX1RPVEFMLCBudW1fdG9fY2hlY2sp OworCXBnc3RhdF9wcm9ncmVzc191cGRhdGVfcGFyYW0oUFJPR1JFU1NfQ1JFQVRFSURYX1RVUExF U19ET05FLCAwKTsKIAotCS8qCi0JICogU2NhbiBhbGwgdHVwbGVzIG1hdGNoaW5nIHRoZSBzbmFw c2hvdC4KLQkgKi8KLQl3aGlsZSAoKGhlYXBUdXBsZSA9IGhlYXBfZ2V0bmV4dChzY2FuLCBGb3J3 YXJkU2NhbkRpcmVjdGlvbikpICE9IE5VTEwpCisJd2hpbGUgKChidWYgPSByZWFkX3N0cmVhbV9u ZXh0X2J1ZmZlcihyZWFkX3N0cmVhbSwgKHZvaWQqKSAmdHVwbGVzKSkgIT0gSW52YWxpZEJ1ZmZl cikKIAl7Ci0JCUl0ZW1Qb2ludGVyIGhlYXBjdXJzb3IgPSAmaGVhcFR1cGxlLT50X3NlbGY7Ci0J CUl0ZW1Qb2ludGVyRGF0YSByb290VHVwbGU7Ci0JCU9mZnNldE51bWJlciByb290X29mZm51bTsK KwkJSGVhcFR1cGxlRGF0YQloZWFwX3R1cGxlX2RhdGFbTWF4SGVhcFR1cGxlc1BlclBhZ2VdOwor CQlpbnQgaTsKKwkJT2Zmc2V0TnVtYmVyIG9mZjsKKwkJQmxvY2tOdW1iZXIgYmxvY2tfbnVtYmVy OwogCiAJCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CiAKLQkJc3RhdGUtPmh0dXBzICs9IDE7CisJ CUxvY2tCdWZmZXIoYnVmLCBCVUZGRVJfTE9DS19TSEFSRSk7CisJCWJsb2NrX251bWJlciA9IEJ1 ZmZlckdldEJsb2NrTnVtYmVyKGJ1Zik7CiAKLQkJaWYgKChwcmV2aW91c19ibGtubyA9PSBJbnZh bGlkQmxvY2tOdW1iZXIpIHx8Ci0JCQkoaHNjYW4tPnJzX2NibG9jayAhPSBwcmV2aW91c19ibGtu bykpCisJCWkgPSAwOworCQl3aGlsZSAoKG9mZiA9IHR1cGxlc1tpXSkgIT0gSW52YWxpZE9mZnNl dE51bWJlcikKIAkJewotCQkJcGdzdGF0X3Byb2dyZXNzX3VwZGF0ZV9wYXJhbShQUk9HUkVTU19T Q0FOX0JMT0NLU19ET05FLAotCQkJCQkJCQkJCSBoc2Nhbi0+cnNfY2Jsb2NrKTsKLQkJCXByZXZp b3VzX2Jsa25vID0gaHNjYW4tPnJzX2NibG9jazsKKwkJCUl0ZW1Qb2ludGVyRGF0YSB0aWQ7CisJ CQlib29sCQlhbGxfZGVhZCwgZm91bmQ7CisJCQlJdGVtUG9pbnRlclNldCgmdGlkLCBibG9ja19u dW1iZXIsIG9mZik7CisKKwkJCWZvdW5kID0gaGVhcF9ob3Rfc2VhcmNoX2J1ZmZlcigmdGlkLCBo ZWFwUmVsYXRpb24sIGJ1Ziwgc25hcHNob3QsCisJCQkJCQkJCQkJICAgJmhlYXBfdHVwbGVfZGF0 YVtpXSwgJmFsbF9kZWFkLCB0cnVlKTsKKwkJCWlmICghZm91bmQpCisJCQkJSXRlbVBvaW50ZXJT ZXRJbnZhbGlkKCZoZWFwX3R1cGxlX2RhdGFbaV0udF9zZWxmKTsKKwkJCWkrKzsKKwkJCXN0YXRl LT5odHVwcyArPSAxOwogCQl9CisJCUxvY2tCdWZmZXIoYnVmLCBCVUZGRVJfTE9DS19VTkxPQ0sp OwogCi0JCS8qCi0JCSAqIEFzIGNvbW1lbnRlZCBpbiB0YWJsZV9pbmRleF9idWlsZF9zY2FuLCB3 ZSBzaG91bGQgaW5kZXggaGVhcC1vbmx5Ci0JCSAqIHR1cGxlcyB1bmRlciB0aGUgVElEcyBvZiB0 aGVpciByb290IHR1cGxlczsgc28gd2hlbiB3ZSBhZHZhbmNlIG9udG8KLQkJICogYSBuZXcgaGVh cCBwYWdlLCBidWlsZCBhIG1hcCBvZiByb290IGl0ZW0gb2Zmc2V0cyBvbiB0aGUgcGFnZS4KLQkJ ICoKLQkJICogVGhpcyBjb21wbGljYXRlcyBtZXJnaW5nIGFnYWluc3QgdGhlIHR1cGxlc29ydCBv dXRwdXQ6IHdlIHdpbGwKLQkJICogdmlzaXQgdGhlIGxpdmUgdHVwbGVzIGluIG9yZGVyIGJ5IHRo ZWlyIG9mZnNldHMsIGJ1dCB0aGUgcm9vdAotCQkgKiBvZmZzZXRzIHRoYXQgd2UgbmVlZCB0byBj b21wYXJlIGFnYWluc3QgdGhlIGluZGV4IGNvbnRlbnRzIG1pZ2h0IGJlCi0JCSAqIG9yZGVyZWQg ZGlmZmVyZW50bHkuICBTbyB3ZSBtaWdodCBoYXZlIHRvICJsb29rIGJhY2siIHdpdGhpbiB0aGUK LQkJICogdHVwbGVzb3J0IG91dHB1dCwgYnV0IG9ubHkgd2l0aGluIHRoZSBjdXJyZW50IHBhZ2Uu ICBXZSBoYW5kbGUgdGhhdAotCQkgKiBieSBrZWVwaW5nIGEgYm9vbCBhcnJheSBpbl9pbmRleFtd IHNob3dpbmcgYWxsIHRoZQotCQkgKiBhbHJlYWR5LXBhc3NlZC1vdmVyIHR1cGxlc29ydCBvdXRw dXQgVElEcyBvZiB0aGUgY3VycmVudCBwYWdlLiBXZQotCQkgKiBjbGVhciB0aGF0IGFycmF5IGhl cmUsIHdoZW4gYWR2YW5jaW5nIG9udG8gYSBuZXcgaGVhcCBwYWdlLgotCQkgKi8KLQkJaWYgKGhz Y2FuLT5yc19jYmxvY2sgIT0gcm9vdF9ibGtubykKKwkJaSA9IDA7CisJCXdoaWxlICgob2ZmID0g dHVwbGVzW2ldKSAhPSBJbnZhbGlkT2Zmc2V0TnVtYmVyKQogCQl7Ci0JCQlQYWdlCQlwYWdlID0g QnVmZmVyR2V0UGFnZShoc2Nhbi0+cnNfY2J1Zik7Ci0KLQkJCUxvY2tCdWZmZXIoaHNjYW4tPnJz X2NidWYsIEJVRkZFUl9MT0NLX1NIQVJFKTsKLQkJCWhlYXBfZ2V0X3Jvb3RfdHVwbGVzKHBhZ2Us IHJvb3Rfb2Zmc2V0cyk7Ci0JCQlMb2NrQnVmZmVyKGhzY2FuLT5yc19jYnVmLCBCVUZGRVJfTE9D S19VTkxPQ0spOwotCi0JCQltZW1zZXQoaW5faW5kZXgsIDAsIHNpemVvZihpbl9pbmRleCkpOwot Ci0JCQlyb290X2Jsa25vID0gaHNjYW4tPnJzX2NibG9jazsKLQkJfQotCi0JCS8qIENvbnZlcnQg YWN0dWFsIHR1cGxlIFRJRCB0byByb290IFRJRCAqLwotCQlyb290VHVwbGUgPSAqaGVhcGN1cnNv cjsKLQkJcm9vdF9vZmZudW0gPSBJdGVtUG9pbnRlckdldE9mZnNldE51bWJlcihoZWFwY3Vyc29y KTsKLQotCQlpZiAoSGVhcFR1cGxlSXNIZWFwT25seShoZWFwVHVwbGUpKQotCQl7Ci0JCQlyb290 X29mZm51bSA9IHJvb3Rfb2Zmc2V0c1tyb290X29mZm51bSAtIDFdOwotCQkJaWYgKCFPZmZzZXRO dW1iZXJJc1ZhbGlkKHJvb3Rfb2ZmbnVtKSkKLQkJCQllcmVwb3J0KEVSUk9SLAotCQkJCQkJKGVy cmNvZGUoRVJSQ09ERV9EQVRBX0NPUlJVUFRFRCksCi0JCQkJCQkgZXJybXNnX2ludGVybmFsKCJm YWlsZWQgdG8gZmluZCBwYXJlbnQgdHVwbGUgZm9yIGhlYXAtb25seSB0dXBsZSBhdCAoJXUsJXUp IGluIHRhYmxlIFwiJXNcIiIsCi0JCQkJCQkJCQkJIEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIo aGVhcGN1cnNvciksCi0JCQkJCQkJCQkJIEl0ZW1Qb2ludGVyR2V0T2Zmc2V0TnVtYmVyKGhlYXBj dXJzb3IpLAotCQkJCQkJCQkJCSBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShoZWFwUmVsYXRpb24p KSkpOwotCQkJSXRlbVBvaW50ZXJTZXRPZmZzZXROdW1iZXIoJnJvb3RUdXBsZSwgcm9vdF9vZmZu dW0pOwotCQl9Ci0KLQkJLyoKLQkJICogIm1lcmdlIiBieSBza2lwcGluZyB0aHJvdWdoIHRoZSBp bmRleCB0dXBsZXMgdW50aWwgd2UgZmluZCBvciBwYXNzCi0JCSAqIHRoZSBjdXJyZW50IHJvb3Qg dHVwbGUuCi0JCSAqLwotCQl3aGlsZSAoIXR1cGxlc29ydF9lbXB0eSAmJgotCQkJICAgKCFpbmRl eGN1cnNvciB8fAotCQkJCUl0ZW1Qb2ludGVyQ29tcGFyZShpbmRleGN1cnNvciwgJnJvb3RUdXBs ZSkgPCAwKSkKLQkJewotCQkJRGF0dW0JCXRzX3ZhbDsKLQkJCWJvb2wJCXRzX2lzbnVsbDsKLQot CQkJaWYgKGluZGV4Y3Vyc29yKQorCQkJaWYgKEl0ZW1Qb2ludGVySXNWYWxpZCgmaGVhcF90dXBs ZV9kYXRhW2ldLnRfc2VsZikpCiAJCQl7CisJCQkJSXRlbVBvaW50ZXJEYXRhIHJvb3RfdGlkOwor CQkJCUl0ZW1Qb2ludGVyU2V0KCZyb290X3RpZCwgYmxvY2tfbnVtYmVyLCBvZmYpOworCisJCQkJ LyogUmVzZXQgdGhlIHBlci10dXBsZSBtZW1vcnkgY29udGV4dCBmb3IgdGhlIG5leHQgZmV0Y2gu ICovCisJCQkJTWVtb3J5Q29udGV4dFJlc2V0KGVjb250ZXh0LT5lY3h0X3Blcl90dXBsZV9tZW1v cnkpOworCQkJCUV4ZWNTdG9yZUJ1ZmZlckhlYXBUdXBsZSgmaGVhcF90dXBsZV9kYXRhW2ldLCBz bG90LCBidWYpOworCisJCQkJLyogQ29tcHV0ZSB0aGUga2V5IHZhbHVlcyBhbmQgbnVsbCBmbGFn cyBmb3IgdGhpcyB0dXBsZS4gKi8KKwkJCQlGb3JtSW5kZXhEYXR1bShpbmRleEluZm8sCisJCQkJ CQkJICAgc2xvdCwKKwkJCQkJCQkgICBlc3RhdGUsCisJCQkJCQkJICAgdmFsdWVzLAorCQkJCQkJ CSAgIGlzbnVsbCk7CisKIAkJCQkvKgotCQkJCSAqIFJlbWVtYmVyIGluZGV4IGl0ZW1zIHNlZW4g ZWFybGllciBvbiB0aGUgY3VycmVudCBoZWFwIHBhZ2UKKwkJCQkgKiBJbnNlcnQgdGhlIHR1cGxl IGludG8gdGhlIHRhcmdldCBpbmRleC4KIAkJCQkgKi8KLQkJCQlpZiAoSXRlbVBvaW50ZXJHZXRC bG9ja051bWJlcihpbmRleGN1cnNvcikgPT0gcm9vdF9ibGtubykKLQkJCQkJaW5faW5kZXhbSXRl bVBvaW50ZXJHZXRPZmZzZXROdW1iZXIoaW5kZXhjdXJzb3IpIC0gMV0gPSB0cnVlOworCQkJCWlu ZGV4X2luc2VydChpbmRleFJlbGF0aW9uLAorCQkJCQkJCSB2YWx1ZXMsCisJCQkJCQkJIGlzbnVs bCwKKwkJCQkJCQkgJnJvb3RfdGlkLCAvKiBpbnNlcnQgcm9vdCB0dXBsZSAqLworCQkJCQkJCSBo ZWFwUmVsYXRpb24sCisJCQkJCQkJIGluZGV4SW5mby0+aWlfVW5pcXVlID8KKwkJCQkJCQkgVU5J UVVFX0NIRUNLX1lFUyA6IFVOSVFVRV9DSEVDS19OTywKKwkJCQkJCQkgZmFsc2UsCisJCQkJCQkJ IGluZGV4SW5mbyk7CisKKwkJCQlzdGF0ZS0+dHVwc19pbnNlcnRlZCArPSAxOwogCQkJfQogCi0J CQl0dXBsZXNvcnRfZW1wdHkgPSAhdHVwbGVzb3J0X2dldGRhdHVtKHN0YXRlLT50dXBsZXNvcnQs IHRydWUsCi0JCQkJCQkJCQkJCQkgIGZhbHNlLCAmdHNfdmFsLCAmdHNfaXNudWxsLAotCQkJCQkJ CQkJCQkJICBOVUxMKTsKLQkJCUFzc2VydCh0dXBsZXNvcnRfZW1wdHkgfHwgIXRzX2lzbnVsbCk7 Ci0JCQlpZiAoIXR1cGxlc29ydF9lbXB0eSkKLQkJCXsKLQkJCQlpdGVtcHRyX2RlY29kZSgmZGVj b2RlZCwgRGF0dW1HZXRJbnQ2NCh0c192YWwpKTsKLQkJCQlpbmRleGN1cnNvciA9ICZkZWNvZGVk OwotCQkJfQotCQkJZWxzZQotCQkJewotCQkJCS8qIEJlIHRpZHkgKi8KLQkJCQlpbmRleGN1cnNv ciA9IE5VTEw7Ci0JCQl9CisJCQlwZ3N0YXRfcHJvZ3Jlc3NfaW5jcl9wYXJhbShQUk9HUkVTU19D UkVBVEVJRFhfVFVQTEVTX0RPTkUsIDEpOworCQkJaSsrOwogCQl9CiAKLQkJLyoKLQkJICogSWYg dGhlIHR1cGxlc29ydCBoYXMgb3ZlcnNob3QgKmFuZCogd2UgZGlkbid0IHNlZSBhIG1hdGNoIGVh cmxpZXIsCi0JCSAqIHRoZW4gdGhpcyB0dXBsZSBpcyBtaXNzaW5nIGZyb20gdGhlIGluZGV4LCBz byBpbnNlcnQgaXQuCi0JCSAqLwotCQlpZiAoKHR1cGxlc29ydF9lbXB0eSB8fAotCQkJIEl0ZW1Q b2ludGVyQ29tcGFyZShpbmRleGN1cnNvciwgJnJvb3RUdXBsZSkgPiAwKSAmJgotCQkJIWluX2lu ZGV4W3Jvb3Rfb2ZmbnVtIC0gMV0pCi0JCXsKLQkJCU1lbW9yeUNvbnRleHRSZXNldChlY29udGV4 dC0+ZWN4dF9wZXJfdHVwbGVfbWVtb3J5KTsKLQotCQkJLyogU2V0IHVwIGZvciBwcmVkaWNhdGUg b3IgZXhwcmVzc2lvbiBldmFsdWF0aW9uICovCi0JCQlFeGVjU3RvcmVIZWFwVHVwbGUoaGVhcFR1 cGxlLCBzbG90LCBmYWxzZSk7Ci0KLQkJCS8qCi0JCQkgKiBJbiBhIHBhcnRpYWwgaW5kZXgsIGRp c2NhcmQgdHVwbGVzIHRoYXQgZG9uJ3Qgc2F0aXNmeSB0aGUKLQkJCSAqIHByZWRpY2F0ZS4KLQkJ CSAqLwotCQkJaWYgKHByZWRpY2F0ZSAhPSBOVUxMKQotCQkJewotCQkJCWlmICghRXhlY1F1YWwo cHJlZGljYXRlLCBlY29udGV4dCkpCi0JCQkJCWNvbnRpbnVlOwotCQkJfQotCi0JCQkvKgotCQkJ ICogRm9yIHRoZSBjdXJyZW50IGhlYXAgdHVwbGUsIGV4dHJhY3QgYWxsIHRoZSBhdHRyaWJ1dGVz IHdlIHVzZQotCQkJICogaW4gdGhpcyBpbmRleCwgYW5kIG5vdGUgd2hpY2ggYXJlIG51bGwuICBU aGlzIGFsc28gcGVyZm9ybXMKLQkJCSAqIGV2YWx1YXRpb24gb2YgYW55IGV4cHJlc3Npb25zIG5l ZWRlZC4KLQkJCSAqLwotCQkJRm9ybUluZGV4RGF0dW0oaW5kZXhJbmZvLAotCQkJCQkJICAgc2xv dCwKLQkJCQkJCSAgIGVzdGF0ZSwKLQkJCQkJCSAgIHZhbHVlcywKLQkJCQkJCSAgIGlzbnVsbCk7 Ci0KLQkJCS8qCi0JCQkgKiBZb3UnZCB0aGluayB3ZSBzaG91bGQgZ28gYWhlYWQgYW5kIGJ1aWxk IHRoZSBpbmRleCB0dXBsZSBoZXJlLAotCQkJICogYnV0IHNvbWUgaW5kZXggQU1zIHdhbnQgdG8g ZG8gZnVydGhlciBwcm9jZXNzaW5nIG9uIHRoZSBkYXRhCi0JCQkgKiBmaXJzdC4gU28gcGFzcyB0 aGUgdmFsdWVzW10gYW5kIGlzbnVsbFtdIGFycmF5cywgaW5zdGVhZC4KLQkJCSAqLwotCi0JCQkv KgotCQkJICogSWYgdGhlIHR1cGxlIGlzIGFscmVhZHkgY29tbWl0dGVkIGRlYWQsIHlvdSBtaWdo dCB0aGluayB3ZQotCQkJICogY291bGQgc3VwcHJlc3MgdW5pcXVlbmVzcyBjaGVja2luZywgYnV0 IHRoaXMgaXMgbm8gbG9uZ2VyIHRydWUKLQkJCSAqIGluIHRoZSBwcmVzZW5jZSBvZiBIT1QsIGJl Y2F1c2UgdGhlIGluc2VydCBpcyBhY3R1YWxseSBhIHByb3h5Ci0JCQkgKiBmb3IgYSB1bmlxdWVu ZXNzIGNoZWNrIG9uIHRoZSB3aG9sZSBIT1QtY2hhaW4uICBUaGF0IGlzLCB0aGUKLQkJCSAqIHR1 cGxlIHdlIGhhdmUgaGVyZSBjb3VsZCBiZSBkZWFkIGJlY2F1c2UgaXQgd2FzIGFscmVhZHkKLQkJ CSAqIEhPVC11cGRhdGVkLCBhbmQgaWYgc28gdGhlIHVwZGF0aW5nIHRyYW5zYWN0aW9uIHdpbGwg bm90IGhhdmUKLQkJCSAqIHRob3VnaHQgaXQgc2hvdWxkIGluc2VydCBpbmRleCBlbnRyaWVzLiAg VGhlIGluZGV4IEFNIHdpbGwKLQkJCSAqIGNoZWNrIHRoZSB3aG9sZSBIT1QtY2hhaW4gYW5kIGNv cnJlY3RseSBkZXRlY3QgYSBjb25mbGljdCBpZgotCQkJICogdGhlcmUgaXMgb25lLgotCQkJICov Ci0KLQkJCWluZGV4X2luc2VydChpbmRleFJlbGF0aW9uLAotCQkJCQkJIHZhbHVlcywKLQkJCQkJ CSBpc251bGwsCi0JCQkJCQkgJnJvb3RUdXBsZSwKLQkJCQkJCSBoZWFwUmVsYXRpb24sCi0JCQkJ CQkgaW5kZXhJbmZvLT5paV9VbmlxdWUgPwotCQkJCQkJIFVOSVFVRV9DSEVDS19ZRVMgOiBVTklR VUVfQ0hFQ0tfTk8sCi0JCQkJCQkgZmFsc2UsCi0JCQkJCQkgaW5kZXhJbmZvKTsKLQotCQkJc3Rh dGUtPnR1cHNfaW5zZXJ0ZWQgKz0gMTsKLQkJfQorCQlSZWxlYXNlQnVmZmVyKGJ1Zik7CiAJfQog Ci0JdGFibGVfZW5kc2NhbihzY2FuKTsKLQogCUV4ZWNEcm9wU2luZ2xlVHVwbGVUYWJsZVNsb3Qo c2xvdCk7CiAKIAlGcmVlRXhlY3V0b3JTdGF0ZShlc3RhdGUpOwogCisJcmVhZF9zdHJlYW1fZW5k KHJlYWRfc3RyZWFtKTsKKwl0dXBsZXN0b3JlX2VuZCh0dXBsZXNfZm9yX2NoZWNrKTsKKworCUZy ZWVBY2Nlc3NTdHJhdGVneShic3RyYXRlZ3kpOworCiAJLyogVGhlc2UgbWF5IGhhdmUgYmVlbiBw b2ludGluZyB0byB0aGUgbm93LWdvbmUgZXN0YXRlICovCiAJaW5kZXhJbmZvLT5paV9FeHByZXNz aW9uc1N0YXRlID0gTklMOwogCWluZGV4SW5mby0+aWlfUHJlZGljYXRlU3RhdGUgPSBOVUxMOwpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9pbmRleC5jIGIvc3JjL2JhY2tlbmQvY2F0 YWxvZy9pbmRleC5jCmluZGV4IGY1NDg0YzU5ZDE4Li4zMWY5MmI5NzU4MCAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvY2F0YWxvZy9pbmRleC5jCisrKyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvaW5k ZXguYwpAQCAtNzE1LDExICs3MTUsMTYgQEAgVXBkYXRlSW5kZXhSZWxhdGlvbihPaWQgaW5kZXhv aWQsCiAgKgkJCWFscmVhZHkgZXhpc3RzLgogICoJCUlOREVYX0NSRUFURV9QQVJUSVRJT05FRDoK ICAqCQkJY3JlYXRlIGEgcGFydGl0aW9uZWQgaW5kZXggKHRhYmxlIG11c3QgYmUgcGFydGl0aW9u ZWQpCisgKgkJSU5ERVhfQ1JFQVRFX0FVWElMSUFSWToKKyAqCQkJbWFyayBpbmRleCBhcyBhdXhp bGlhcnkgaW5kZXgKICAqIGNvbnN0cl9mbGFnczogZmxhZ3MgcGFzc2VkIHRvIGluZGV4X2NvbnN0 cmFpbnRfY3JlYXRlCiAgKgkJKG9ubHkgaWYgSU5ERVhfQ1JFQVRFX0FERF9DT05TVFJBSU5UIGlz IHNldCkKICAqIGFsbG93X3N5c3RlbV90YWJsZV9tb2RzOiBhbGxvdyB0YWJsZSB0byBiZSBhIHN5 c3RlbSBjYXRhbG9nCiAgKiBpc19pbnRlcm5hbDogaWYgdHJ1ZSwgcG9zdCBjcmVhdGlvbiBob29r IGZvciBuZXcgaW5kZXgKICAqIGNvbnN0cmFpbnRJZDogaWYgbm90IE5VTEwsIHJlY2VpdmVzIE9J RCBvZiBjcmVhdGVkIGNvbnN0cmFpbnQKKyAqIHJlbHBlcnNpc3RlbmNlOiBwZXJzaXN0ZW5jZSBs ZXZlbCB0byB1c2UgZm9yIGluZGV4LiBJbiBtb3N0IG9mIHRoZQorICoJCWNhc2VzIGl0IHNob3Vs ZCBiZSBlcXVhbCB0byB0aGUgcGVyc2lzdGVuY2UgbGV2ZWwgb2YgdGhlIHRhYmxlLAorICoJCWF1 eGlsaWFyeSBpbmRleGVzIGFyZSBvbmx5IGV4Y2VwdGlvbiBoZXJlLgogICoKICAqIFJldHVybnMg dGhlIE9JRCBvZiB0aGUgY3JlYXRlZCBpbmRleC4KICAqLwpAQCAtNzYwLDYgKzc2NSw3IEBAIGlu ZGV4X2NyZWF0ZShSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAJYm9vbAkJaW52YWxpZCA9IChmbGFn cyAmIElOREVYX0NSRUFURV9JTlZBTElEKSAhPSAwOwogCWJvb2wJCWNvbmN1cnJlbnQgPSAoZmxh Z3MgJiBJTkRFWF9DUkVBVEVfQ09OQ1VSUkVOVCkgIT0gMDsKIAlib29sCQlwYXJ0aXRpb25lZCA9 IChmbGFncyAmIElOREVYX0NSRUFURV9QQVJUSVRJT05FRCkgIT0gMDsKKwlib29sCQlhdXhpbGlh cnkgPSAoZmxhZ3MgJiBJTkRFWF9DUkVBVEVfQVVYSUxJQVJZKSAhPSAwOwogCWNoYXIJCXJlbGtp bmQ7CiAJVHJhbnNhY3Rpb25JZCByZWxmcm96ZW54aWQ7CiAJTXVsdGlYYWN0SWQgcmVsbWlubXhp ZDsKQEAgLTc4NSw3ICs3OTEsMTAgQEAgaW5kZXhfY3JlYXRlKFJlbGF0aW9uIGhlYXBSZWxhdGlv biwKIAluYW1lc3BhY2VJZCA9IFJlbGF0aW9uR2V0TmFtZXNwYWNlKGhlYXBSZWxhdGlvbik7CiAJ c2hhcmVkX3JlbGF0aW9uID0gaGVhcFJlbGF0aW9uLT5yZF9yZWwtPnJlbGlzc2hhcmVkOwogCW1h cHBlZF9yZWxhdGlvbiA9IFJlbGF0aW9uSXNNYXBwZWQoaGVhcFJlbGF0aW9uKTsKLQlyZWxwZXJz aXN0ZW5jZSA9IGhlYXBSZWxhdGlvbi0+cmRfcmVsLT5yZWxwZXJzaXN0ZW5jZTsKKwlpZiAoYXV4 aWxpYXJ5KQorCQlyZWxwZXJzaXN0ZW5jZSA9IFJFTFBFUlNJU1RFTkNFX1VOTE9HR0VEOyAvKiBh dXggaW5kZXhlcyBhcmUgYWx3YXlzIHVubG9nZ2VkICovCisJZWxzZQorCQlyZWxwZXJzaXN0ZW5j ZSA9IGhlYXBSZWxhdGlvbi0+cmRfcmVsLT5yZWxwZXJzaXN0ZW5jZTsKIAogCS8qCiAJICogY2hl Y2sgcGFyYW1ldGVycwpAQCAtNzkzLDYgKzgwMiwxMSBAQCBpbmRleF9jcmVhdGUoUmVsYXRpb24g aGVhcFJlbGF0aW9uLAogCWlmIChpbmRleEluZm8tPmlpX051bUluZGV4QXR0cnMgPCAxKQogCQll bG9nKEVSUk9SLCAibXVzdCBpbmRleCBhdCBsZWFzdCBvbmUgY29sdW1uIik7CiAKKwlpZiAoaW5k ZXhJbmZvLT5paV9BbSA9PSBTVElSX0FNX09JRCAmJiAhYXV4aWxpYXJ5KQorCQllcmVwb3J0KEVS Uk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKKwkJCQkg ZXJybXNnKCJ1c2VyLWRlZmluZWQgaW5kZXhlcyB3aXRoIFNUSVIgYWNjZXNzIG1ldGhvZCBhcmUg bm90IHN1cHBvcnRlZCIpKSk7CisKIAlpZiAoIWFsbG93X3N5c3RlbV90YWJsZV9tb2RzICYmCiAJ CUlzU3lzdGVtUmVsYXRpb24oaGVhcFJlbGF0aW9uKSAmJgogCQlJc05vcm1hbFByb2Nlc3NpbmdN b2RlKCkpCkBAIC0xMzk4LDcgKzE0MTIsOCBAQCBpbmRleF9jb25jdXJyZW50bHlfY3JlYXRlX2Nv cHkoUmVsYXRpb24gaGVhcFJlbGF0aW9uLCBPaWQgb2xkSW5kZXhJZCwKIAkJCQkJCQlmYWxzZSwJ Lyogbm90IHJlYWR5IGZvciBpbnNlcnRzICovCiAJCQkJCQkJdHJ1ZSwKIAkJCQkJCQlpbmRleFJl bGF0aW9uLT5yZF9pbmRhbS0+YW1zdW1tYXJpemluZywKLQkJCQkJCQlvbGRJbmZvLT5paV9XaXRo b3V0T3ZlcmxhcHMpOworCQkJCQkJCW9sZEluZm8tPmlpX1dpdGhvdXRPdmVybGFwcywKKwkJCQkJ CQlmYWxzZSk7CiAKIAkvKgogCSAqIEV4dHJhY3QgdGhlIGxpc3Qgb2YgY29sdW1uIG5hbWVzIGFu ZCB0aGUgY29sdW1uIG51bWJlcnMgZm9yIHRoZSBuZXcKQEAgLTE0NzMsNiArMTQ4OCwxNTQgQEAg aW5kZXhfY29uY3VycmVudGx5X2NyZWF0ZV9jb3B5KFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwgT2lk IG9sZEluZGV4SWQsCiAJcmV0dXJuIG5ld0luZGV4SWQ7CiB9CiAKKy8qCisgKiBpbmRleF9jb25j dXJyZW50bHlfY3JlYXRlX2F1eAorICoKKyAqIENyZWF0ZSBjb25jdXJyZW50bHkgYW4gYXV4aWxp YXJ5IGluZGV4IGJhc2VkIG9uIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBvbmUKKyAqIHByb3ZpZGVk IGJ5IGNhbGxlci4gIFRoZSBpbmRleCBpcyBpbnNlcnRlZCBpbnRvIGNhdGFsb2dzIGFuZCBuZWVk cyB0byBiZQorICogYnVpbHQgbGF0ZXIgb24uIFRoaXMgaXMgY2FsbGVkIGR1cmluZyBjb25jdXJy ZW50IHJlaW5kZXggcHJvY2Vzc2luZy4KKyAqCisgKiAidGFibGVzcGFjZU9pZCIgaXMgdGhlIHRh Ymxlc3BhY2UgdG8gdXNlIGZvciB0aGlzIGluZGV4LgorICovCitPaWQKK2luZGV4X2NvbmN1cnJl bnRseV9jcmVhdGVfYXV4KFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwgT2lkIG1haW5JbmRleElkLAor CQkJCQkJCSAgIE9pZCB0YWJsZXNwYWNlT2lkLCBjb25zdCBjaGFyICpuZXdOYW1lKQoreworCVJl bGF0aW9uCWluZGV4UmVsYXRpb247CisJSW5kZXhJbmZvICAqb2xkSW5mbywKKwkJCSpuZXdJbmZv OworCU9pZAkJCW5ld0luZGV4SWQgPSBJbnZhbGlkT2lkOworCUhlYXBUdXBsZQlpbmRleFR1cGxl OworCisJTGlzdAkgICAqaW5kZXhDb2xOYW1lcyA9IE5JTDsKKwlMaXN0CSAgICppbmRleEV4cHJz ID0gTklMOworCUxpc3QJICAgKmluZGV4UHJlZHMgPSBOSUw7CisKKwlPaWQgKmF1eE9wY2xhc3NJ ZHM7CisJaW50MTYgKmF1eENvbG9wdGlvbnM7CisKKwlpbmRleFJlbGF0aW9uID0gaW5kZXhfb3Bl bihtYWluSW5kZXhJZCwgUm93RXhjbHVzaXZlTG9jayk7CisKKwkvKiBUaGUgbmV3IGluZGV4IG5l ZWRzIHNvbWUgaW5mb3JtYXRpb24gZnJvbSB0aGUgb2xkIGluZGV4ICovCisJb2xkSW5mbyA9IEJ1 aWxkSW5kZXhJbmZvKGluZGV4UmVsYXRpb24pOworCisJLyoKKwkgKiBCdWlsZCBvZiBhbiBhdXhp bGlhcnkgaW5kZXggd2l0aCBleGNsdXNpb24gY29uc3RyYWludHMgaXMgbm90CisJICogc3VwcG9y dGVkLgorCSAqLworCWlmIChvbGRJbmZvLT5paV9FeGNsdXNpb25PcHMgIT0gTlVMTCkKKwkJZXJl cG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCks CisJCQkJCQllcnJtc2coImF1eGlsaWFyeSBpbmRleCBjcmVhdGlvbiBmb3IgZXhjbHVzaW9uIGNv bnN0cmFpbnRzIGlzIG5vdCBzdXBwb3J0ZWQiKSkpOworCisJLyogR2V0IHRoZSBhcnJheSBvZiBj bGFzcyBhbmQgY29sdW1uIG9wdGlvbnMgSURzIGZyb20gaW5kZXggaW5mbyAqLworCWluZGV4VHVw bGUgPSBTZWFyY2hTeXNDYWNoZTEoSU5ERVhSRUxJRCwgT2JqZWN0SWRHZXREYXR1bShtYWluSW5k ZXhJZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChpbmRleFR1cGxlKSkKKwkJZWxvZyhFUlJP UiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGluZGV4ICV1IiwgbWFpbkluZGV4SWQpOworCisK KwkvKgorCSAqIEZldGNoIHRoZSBsaXN0IG9mIGV4cHJlc3Npb25zIGFuZCBwcmVkaWNhdGVzIGRp cmVjdGx5IGZyb20gdGhlCisJICogY2F0YWxvZ3MuICBUaGlzIGNhbm5vdCByZWx5IG9uIHRoZSBp bmZvcm1hdGlvbiBmcm9tIEluZGV4SW5mbyBvZiB0aGUKKwkgKiBvbGQgaW5kZXggYXMgdGhlc2Ug aGF2ZSBiZWVuIGZsYXR0ZW5lZCBmb3IgdGhlIHBsYW5uZXIuCisJICovCisJaWYgKG9sZEluZm8t PmlpX0V4cHJlc3Npb25zICE9IE5JTCkKKwl7CisJCURhdHVtCQlleHByRGF0dW07CisJCWNoYXIJ ICAgKmV4cHJTdHJpbmc7CisKKwkJZXhwckRhdHVtID0gU3lzQ2FjaGVHZXRBdHRyTm90TnVsbChJ TkRFWFJFTElELCBpbmRleFR1cGxlLAorCQkJCQkJCQkJCSAgIEFudW1fcGdfaW5kZXhfaW5kZXhw cnMpOworCQlleHByU3RyaW5nID0gVGV4dERhdHVtR2V0Q1N0cmluZyhleHByRGF0dW0pOworCQlp bmRleEV4cHJzID0gKExpc3QgKikgc3RyaW5nVG9Ob2RlKGV4cHJTdHJpbmcpOworCQlwZnJlZShl eHByU3RyaW5nKTsKKwl9CisJaWYgKG9sZEluZm8tPmlpX1ByZWRpY2F0ZSAhPSBOSUwpCisJewor CQlEYXR1bQkJcHJlZERhdHVtOworCQljaGFyCSAgICpwcmVkU3RyaW5nOworCisJCXByZWREYXR1 bSA9IFN5c0NhY2hlR2V0QXR0ck5vdE51bGwoSU5ERVhSRUxJRCwgaW5kZXhUdXBsZSwKKwkJCQkJ CQkJCQkgICBBbnVtX3BnX2luZGV4X2luZHByZWQpOworCQlwcmVkU3RyaW5nID0gVGV4dERhdHVt R2V0Q1N0cmluZyhwcmVkRGF0dW0pOworCQlpbmRleFByZWRzID0gKExpc3QgKikgc3RyaW5nVG9O b2RlKHByZWRTdHJpbmcpOworCisJCS8qIEFsc28gY29udmVydCB0byBpbXBsaWNpdC1BTkQgZm9y bWF0ICovCisJCWluZGV4UHJlZHMgPSBtYWtlX2FuZHNfaW1wbGljaXQoKEV4cHIgKikgaW5kZXhQ cmVkcyk7CisJCXBmcmVlKHByZWRTdHJpbmcpOworCX0KKworCS8qCisJICogQnVpbGQgdGhlIGlu ZGV4IGluZm9ybWF0aW9uIGZvciB0aGUgbmV3IGluZGV4LiAgTm90ZSB0aGF0IHJlYnVpbGQgb2YK KwkgKiBpbmRleGVzIHdpdGggZXhjbHVzaW9uIGNvbnN0cmFpbnRzIGlzIG5vdCBzdXBwb3J0ZWQs IGhlbmNlIHRoZXJlIGlzIG5vCisJICogbmVlZCB0byBmaWxsIGFsbCB0aGUgaWlfRXhjbHVzaW9u KiBmaWVsZHMuCisJICovCisJbmV3SW5mbyA9IG1ha2VJbmRleEluZm8ob2xkSW5mby0+aWlfTnVt SW5kZXhBdHRycywKKwkJCQkJCQlvbGRJbmZvLT5paV9OdW1JbmRleEtleUF0dHJzLAorCQkJCQkJ CVNUSVJfQU1fT0lELCAvKiBzcGVjaWFsIEFNIGZvciBhdXggaW5kZXhlcyAqLworCQkJCQkJCWlu ZGV4RXhwcnMsCisJCQkJCQkJaW5kZXhQcmVkcywKKwkJCQkJCQlmYWxzZSwJLyogYXV4IGluZGV4 IGFyZSBub3QgdW5pcXVlICovCisJCQkJCQkJb2xkSW5mby0+aWlfTnVsbHNOb3REaXN0aW5jdCwK KwkJCQkJCQlmYWxzZSwJLyogbm90IHJlYWR5IGZvciBpbnNlcnRzICovCisJCQkJCQkJdHJ1ZSwK KwkJCQkJCQlmYWxzZSwJLyogYXV4IGFyZSBub3Qgc3VtbWFyaXppbmcgKi8KKwkJCQkJCQlmYWxz ZSwJLyogYXV4IGFyZSBub3Qgd2l0aG91dCBvdmVybGFwcyAqLworCQkJCQkJCXRydWUJLyogYXV4 aWxpYXJ5ICovKTsKKworCS8qCisJICogRXh0cmFjdCB0aGUgbGlzdCBvZiBjb2x1bW4gbmFtZXMg YW5kIHRoZSBjb2x1bW4gbnVtYmVycyBmb3IgdGhlIG5ldworCSAqIGluZGV4IGluZm9ybWF0aW9u LiAgQWxsIHRoaXMgaW5mb3JtYXRpb24gd2lsbCBiZSB1c2VkIGZvciB0aGUgaW5kZXgKKwkgKiBj cmVhdGlvbi4KKwkgKi8KKwlmb3IgKGludCBpID0gMDsgaSA8IG9sZEluZm8tPmlpX051bUluZGV4 QXR0cnM7IGkrKykKKwl7CisJCVR1cGxlRGVzYwlpbmRleFR1cERlc2MgPSBSZWxhdGlvbkdldERl c2NyKGluZGV4UmVsYXRpb24pOworCQlGb3JtX3BnX2F0dHJpYnV0ZSBhdHQgPSBUdXBsZURlc2NB dHRyKGluZGV4VHVwRGVzYywgaSk7CisKKwkJaW5kZXhDb2xOYW1lcyA9IGxhcHBlbmQoaW5kZXhD b2xOYW1lcywgTmFtZVN0cihhdHQtPmF0dG5hbWUpKTsKKwkJbmV3SW5mby0+aWlfSW5kZXhBdHRy TnVtYmVyc1tpXSA9IG9sZEluZm8tPmlpX0luZGV4QXR0ck51bWJlcnNbaV07CisJfQorCisJYXV4 T3BjbGFzc0lkcyA9IHBhbGxvYzAoc2l6ZW9mKE9pZCkgKiBuZXdJbmZvLT5paV9OdW1JbmRleEF0 dHJzKTsKKwlhdXhDb2xvcHRpb25zID0gcGFsbG9jMChzaXplb2YoaW50MTYpICogbmV3SW5mby0+ aWlfTnVtSW5kZXhBdHRycyk7CisKKwkvKiBGaWxsIHdpdGggImFueSBvcHMiICovCisJZm9yIChp bnQgaSA9IDA7IGkgPCBuZXdJbmZvLT5paV9OdW1JbmRleEF0dHJzOyBpKyspCisJeworCQlhdXhP cGNsYXNzSWRzW2ldID0gQU5ZX1NUSVJfT1BTX09JRDsKKwkJYXV4Q29sb3B0aW9uc1tpXSA9IDA7 CisJfQorCisJbmV3SW5kZXhJZCA9IGluZGV4X2NyZWF0ZShoZWFwUmVsYXRpb24sCisJCQkJCQkJ ICBuZXdOYW1lLAorCQkJCQkJCSAgSW52YWxpZE9pZCwgICAgLyogaW5kZXhSZWxhdGlvbklkICov CisJCQkJCQkJICBJbnZhbGlkT2lkLCAgICAvKiBwYXJlbnRJbmRleFJlbGlkICovCisJCQkJCQkJ ICBJbnZhbGlkT2lkLCAgICAvKiBwYXJlbnRDb25zdHJhaW50SWQgKi8KKwkJCQkJCQkgIEludmFs aWRSZWxGaWxlTnVtYmVyLCAvKiByZWxGaWxlTnVtYmVyICovCisJCQkJCQkJICBuZXdJbmZvLAor CQkJCQkJCSAgaW5kZXhDb2xOYW1lcywKKwkJCQkJCQkgIFNUSVJfQU1fT0lELAorCQkJCQkJCSAg dGFibGVzcGFjZU9pZCwKKwkJCQkJCQkgIGluZGV4UmVsYXRpb24tPnJkX2luZGNvbGxhdGlvbiwK KwkJCQkJCQkgIGF1eE9wY2xhc3NJZHMsCisJCQkJCQkJICBOVUxMLAorCQkJCQkJCSAgYXV4Q29s b3B0aW9ucywKKwkJCQkJCQkgIE5VTEwsCisJCQkJCQkJICAoRGF0dW0pIDAsCisJCQkJCQkJICBJ TkRFWF9DUkVBVEVfU0tJUF9CVUlMRCB8IElOREVYX0NSRUFURV9DT05DVVJSRU5UIHwgSU5ERVhf Q1JFQVRFX0FVWElMSUFSWSwKKwkJCQkJCQkgIDAsCisJCQkJCQkJICB0cnVlLCAvKiBhbGxvdyB0 YWJsZSB0byBiZSBhIHN5c3RlbSBjYXRhbG9nPyAqLworCQkJCQkJCSAgZmFsc2UsICAgIC8qIGlz X2ludGVybmFsPyAqLworCQkJCQkJCSAgTlVMTCk7CisKKwkvKiBDbG9zZSB0aGUgcmVsYXRpb25z IHVzZWQgYW5kIGNsZWFuIHVwICovCisJaW5kZXhfY2xvc2UoaW5kZXhSZWxhdGlvbiwgTm9Mb2Nr KTsKKwlSZWxlYXNlU3lzQ2FjaGUoaW5kZXhUdXBsZSk7CisKKwlyZXR1cm4gbmV3SW5kZXhJZDsK K30KKwogLyoKICAqIGluZGV4X2NvbmN1cnJlbnRseV9idWlsZAogICoKQEAgLTI0NTMsNyArMjYx Niw4IEBAIEJ1aWxkSW5kZXhJbmZvKFJlbGF0aW9uIGluZGV4KQogCQkJCQkgICBpbmRleFN0cnVj dC0+aW5kaXNyZWFkeSwKIAkJCQkJICAgZmFsc2UsCiAJCQkJCSAgIGluZGV4LT5yZF9pbmRhbS0+ YW1zdW1tYXJpemluZywKLQkJCQkJICAgaW5kZXhTdHJ1Y3QtPmluZGlzZXhjbHVzaW9uICYmIGlu ZGV4U3RydWN0LT5pbmRpc3VuaXF1ZSk7CisJCQkJCSAgIGluZGV4U3RydWN0LT5pbmRpc2V4Y2x1 c2lvbiAmJiBpbmRleFN0cnVjdC0+aW5kaXN1bmlxdWUsCisJCQkJCSAgIGluZGV4LT5yZF9yZWwt PnJlbGFtID09IFNUSVJfQU1fT0lEIC8qIGF1eGlsaWFyeSBpZmYgU1RJUiAqLyk7CiAKIAkvKiBm aWxsIGluIGF0dHJpYnV0ZSBudW1iZXJzICovCiAJZm9yIChpID0gMDsgaSA8IG51bUF0dHM7IGkr KykKQEAgLTI1MTMsNyArMjY3Nyw4IEBAIEJ1aWxkRHVtbXlJbmRleEluZm8oUmVsYXRpb24gaW5k ZXgpCiAJCQkJCSAgIGluZGV4U3RydWN0LT5pbmRpc3JlYWR5LAogCQkJCQkgICBmYWxzZSwKIAkJ CQkJICAgaW5kZXgtPnJkX2luZGFtLT5hbXN1bW1hcml6aW5nLAotCQkJCQkgICBpbmRleFN0cnVj dC0+aW5kaXNleGNsdXNpb24gJiYgaW5kZXhTdHJ1Y3QtPmluZGlzdW5pcXVlKTsKKwkJCQkJICAg aW5kZXhTdHJ1Y3QtPmluZGlzZXhjbHVzaW9uICYmIGluZGV4U3RydWN0LT5pbmRpc3VuaXF1ZSwK KwkJCQkJICAgaW5kZXgtPnJkX3JlbC0+cmVsYW0gPT0gU1RJUl9BTV9PSUQgLyogYXV4aWxpYXJ5 IGlmZiBTVElSICovKTsKIAogCS8qIGZpbGwgaW4gYXR0cmlidXRlIG51bWJlcnMgKi8KIAlmb3Ig KGkgPSAwOyBpIDwgbnVtQXR0czsgaSsrKQpAQCAtMzI4OSwxMiArMzQ1NCwyMSBAQCBJbmRleENo ZWNrRXhjbHVzaW9uKFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwKICAqCiAgKiBXZSBkbyBhIGNvbmN1 cnJlbnQgaW5kZXggYnVpbGQgYnkgZmlyc3QgaW5zZXJ0aW5nIHRoZSBjYXRhbG9nIGVudHJ5IGZv ciB0aGUKICAqIGluZGV4IHZpYSBpbmRleF9jcmVhdGUoKSwgbWFya2luZyBpdCBub3QgaW5kaXNy ZWFkeSBhbmQgbm90IGluZGlzdmFsaWQuCisgKiBUaGVuIHdlIGNyZWF0ZSBzcGVjaWFsIGF1eGls aWFyeSBpbmRleCB0aGUgc2FtZSB3YXkuIEl0IGJhc2VkIG9uIFNUSVIgQU0uCiAgKiBUaGVuIHdl IGNvbW1pdCBvdXIgdHJhbnNhY3Rpb24gYW5kIHN0YXJ0IGEgbmV3IG9uZSwgdGhlbiB3ZSB3YWl0 IGZvciBhbGwKICAqIHRyYW5zYWN0aW9ucyB0aGF0IGNvdWxkIGhhdmUgYmVlbiBtb2RpZnlpbmcg dGhlIHRhYmxlIHRvIHRlcm1pbmF0ZS4gIE5vdwotICogd2Uga25vdyB0aGF0IGFueSBzdWJzZXF1 ZW50bHktc3RhcnRlZCB0cmFuc2FjdGlvbnMgd2lsbCBzZWUgdGhlIGluZGV4IGFuZAorICogd2Ug a25vdyB0aGF0IGFueSBzdWJzZXF1ZW50bHktc3RhcnRlZCB0cmFuc2FjdGlvbnMgd2lsbCBzZWUg aW5kZXhlcyBhbmQKICAqIGhvbm9yIGl0cyBjb25zdHJhaW50cyBvbiBIT1QgdXBkYXRlczsgc28g d2hpbGUgZXhpc3RpbmcgSE9ULWNoYWlucyBtaWdodAogICogYmUgYnJva2VuIHdpdGggcmVzcGVj dCB0byB0aGUgaW5kZXgsIG5vIGN1cnJlbnRseSBsaXZlIHR1cGxlIHdpbGwgaGF2ZSBhbgotICog aW5jb21wYXRpYmxlIEhPVCB1cGRhdGUgZG9uZSB0byBpdC4gIFdlIG5vdyBidWlsZCB0aGUgaW5k ZXggbm9ybWFsbHkgdmlhCisgKiBpbmNvbXBhdGlibGUgSE9UIHVwZGF0ZSBkb25lIHRvIGl0Lgor ICoKKyAqIEFmdGVyIHRoYXQsIHdlIGJ1aWxkIHRoZSBhdXhpbGlhcnkgaW5kZXguIEl0IGlzIGZh c3Qgb3BlcmF0aW9uIHdpdGhvdXQgYW55IGFjdHVhbAorICogdGFibGUgc2Nhbi4gQXMgcmVzdWx0 LCB3ZSBoYXZlIGVtcHR5IFNUSVIgaW5kZXguIFdlIGNvbW1pdCB0cmFuc2FjdGlvbiBhbmQKKyAq IGFnYWluIHdhaXQgZm9yIGFsbCB0cmFuc2FjdGlvbnMgdGhhdCBjb3VsZCBoYXZlIGJlZW4gbW9k aWZ5aW5nIHRoZSB0YWJsZQorICogdG8gdGVybWluYXRlLiBBdCB0aGF0IG1vbWVudCBhbGwgbmV3 IHR1cGxlcyBhcmUgZ29pbmcgdG8gYmUgaW5zZXJ0ZWQgaW50bworICogYXV4aWxpYXJ5IGluZGV4 LgorICoKKyAqIFdlIG5vdyBidWlsZCB0aGUgaW5kZXggbm9ybWFsbHkgdmlhCiAgKiBpbmRleF9i dWlsZCgpLCB3aGlsZSBob2xkaW5nIGEgd2VhayBsb2NrIHRoYXQgYWxsb3dzIGNvbmN1cnJlbnQK ICAqIGluc2VydC91cGRhdGUvZGVsZXRlLiAgQWxzbywgd2UgaW5kZXggb25seSB0dXBsZXMgdGhh dCBhcmUgdmFsaWQKICAqIGFzIG9mIHRoZSBzdGFydCBvZiB0aGUgc2NhbiAoc2VlIHRhYmxlX2lu ZGV4X2J1aWxkX3NjYW4pLCB3aGVyZWFzIGEgbm9ybWFsCkBAIC0zMzA0LDE0ICszNDc4LDE3IEBA IEluZGV4Q2hlY2tFeGNsdXNpb24oUmVsYXRpb24gaGVhcFJlbGF0aW9uLAogICogYm9ndXMgdW5p cXVlLWluZGV4IGZhaWx1cmVzIGR1ZSB0byBjb25jdXJyZW50IFVQREFURXMgKHdlIG1pZ2h0IHNl ZQogICogZGlmZmVyZW50IHZlcnNpb25zIG9mIHRoZSBzYW1lIHJvdyBhcyBiZWluZyB2YWxpZCB3 aGVuIHdlIHBhc3Mgb3ZlciB0aGVtLAogICogaWYgd2UgdXNlZCBIZWFwVHVwbGVTYXRpc2ZpZXNW YWN1dW0pLiAgVGhpcyBsZWF2ZXMgdXMgd2l0aCBhbiBpbmRleCB0aGF0Ci0gKiBkb2VzIG5vdCBj b250YWluIGFueSB0dXBsZXMgYWRkZWQgdG8gdGhlIHRhYmxlIHdoaWxlIHdlIGJ1aWx0IHRoZSBp bmRleC4KKyAqIGRvZXMgbm90IGNvbnRhaW4gYW55IHR1cGxlcyBhZGRlZCB0byB0aGUgdGFibGUg d2hpbGUgd2UgYnVpbHQgdGhlIGluZGV4CisgKiAoYnV0IHRoZXNlIHR1cGxlcyBjb250YWluZWQg aW4gYXV4aWxpYXJ5IGluZGV4KS4KICAqCiAgKiBOZXh0LCB3ZSBtYXJrIHRoZSBpbmRleCAiaW5k aXNyZWFkeSIgKGJ1dCBzdGlsbCBub3QgImluZGlzdmFsaWQiKSBhbmQKLSAqIGNvbW1pdCB0aGUg c2Vjb25kIHRyYW5zYWN0aW9uIGFuZCBzdGFydCBhIHRoaXJkLiAgQWdhaW4gd2Ugd2FpdCBmb3Ig YWxsCisgKiBjb21taXQgdGhlIHRoaXJkIHRyYW5zYWN0aW9uIGFuZCBzdGFydCBhIGZvdXJ0aC4g IEFnYWluIHdlIHdhaXQgZm9yIGFsbAogICogdHJhbnNhY3Rpb25zIHRoYXQgY291bGQgaGF2ZSBi ZWVuIG1vZGlmeWluZyB0aGUgdGFibGUgdG8gdGVybWluYXRlLiAgTm93CiAgKiB3ZSBrbm93IHRo YXQgYW55IHN1YnNlcXVlbnRseS1zdGFydGVkIHRyYW5zYWN0aW9ucyB3aWxsIHNlZSB0aGUgaW5k ZXggYW5kCi0gKiBpbnNlcnQgdGhlaXIgbmV3IHR1cGxlcyBpbnRvIGl0LiAgV2UgdGhlbiB0YWtl IGEgbmV3IHJlZmVyZW5jZSBzbmFwc2hvdAotICogd2hpY2ggaXMgcGFzc2VkIHRvIHZhbGlkYXRl X2luZGV4KCkuICBBbnkgdHVwbGVzIHRoYXQgYXJlIHZhbGlkIGFjY29yZGluZworICogaW5zZXJ0 IHRoZWlyIG5ldyB0dXBsZXMgaW50byBpdC4gQXQgdGhlIHNhbWUgbW9tZW50IHdlIGNsZWFyICJp bmRpc3JlYWR5IiBmb3IKKyAqIGF1eGlsaWFyeSBpbmRleCwgc2luY2UgaXQgaXMgbm8gbW9yZSBy ZXF1aXJlZCB0byBiZSB1cGRhdGVkLgorICoKKyAqIFdlIHRoZW4gdGFrZSBhIG5ldyByZWZlcmVu Y2Ugc25hcHNob3QsIGFueSB0dXBsZXMgdGhhdCBhcmUgdmFsaWQgYWNjb3JkaW5nCiAgKiB0byB0 aGlzIHNuYXAsIGJ1dCBhcmUgbm90IGluIHRoZSBpbmRleCwgbXVzdCBiZSBhZGRlZCB0byB0aGUg aW5kZXguCiAgKiAoQW55IHR1cGxlcyBjb21taXR0ZWQgbGl2ZSBhZnRlciB0aGUgc25hcCB3aWxs IGJlIGluc2VydGVkIGludG8gdGhlCiAgKiBpbmRleCBieSB0aGVpciBvcmlnaW5hdGluZyB0cmFu c2FjdGlvbi4gIEFueSB0dXBsZXMgY29tbWl0dGVkIGRlYWQgYmVmb3JlCkBAIC0zMzE5LDEyICsz NDk2LDE0IEBAIEluZGV4Q2hlY2tFeGNsdXNpb24oUmVsYXRpb24gaGVhcFJlbGF0aW9uLAogICog dGhhdCBtaWdodCBjYXJlIGFib3V0IHRoZW0gYmVmb3JlIHdlIG1hcmsgdGhlIGluZGV4IHZhbGlk LikKICAqCiAgKiB2YWxpZGF0ZV9pbmRleCgpIHdvcmtzIGJ5IGZpcnN0IGdhdGhlcmluZyBhbGwg dGhlIFRJRHMgY3VycmVudGx5IGluIHRoZQotICogaW5kZXgsIHVzaW5nIGEgYnVsa2RlbGV0ZSBj YWxsYmFjayB0aGF0IGp1c3Qgc3RvcmVzIHRoZSBUSURzIGFuZCBkb2Vzbid0CisgKiBpbmRleGVz LCB1c2luZyBhIGJ1bGtkZWxldGUgY2FsbGJhY2sgdGhhdCBqdXN0IHN0b3JlcyB0aGUgVElEcyBh bmQgZG9lc24ndAogICogZXZlciBzYXkgImRlbGV0ZSBpdCIuICAoVGhpcyBzaG91bGQgYmUgZmFz dGVyIHRoYW4gYSBwbGFpbiBpbmRleHNjYW47CiAgKiBhbHNvLCBub3QgYWxsIGluZGV4IEFNcyBz dXBwb3J0IGZ1bGwtaW5kZXggaW5kZXhzY2FuLikgIFRoZW4gd2Ugc29ydCB0aGUKLSAqIFRJRHMs IGFuZCBmaW5hbGx5IHNjYW4gdGhlIHRhYmxlIGRvaW5nIGEgIm1lcmdlIGpvaW4iIGFnYWluc3Qg dGhlIFRJRCBsaXN0Ci0gKiB0byBzZWUgd2hpY2ggdHVwbGVzIGFyZSBtaXNzaW5nIGZyb20gdGhl IGluZGV4LiAgVGh1cyB3ZSB3aWxsIGVuc3VyZSB0aGF0Ci0gKiBhbGwgdHVwbGVzIHZhbGlkIGFj Y29yZGluZyB0byB0aGUgcmVmZXJlbmNlIHNuYXBzaG90IGFyZSBpbiB0aGUgaW5kZXguCisgKiBU SURzIG9mIGJvdGggYXV4aWxpYXJ5IGFuZCB0YXJnZXQgaW5kZXhlcywgYW5kIGRvaW5nIGEgIm1l cmdlIGpvaW4iIGFnYWluc3QKKyAqIHRoZSBUSUQgbGlzdHMgdG8gc2VlIHdoaWNoIHR1cGxlcyBm cm9tIGF1eGlsaWFyeSBpbmRleCBhcmUgbWlzc2luZyBmcm9tIHRoZQorICogdGFyZ2V0IGluZGV4 LiAgVGh1cyB3ZSB3aWxsIGVuc3VyZSB0aGF0IGFsbCB0dXBsZXMgdmFsaWQgYWNjb3JkaW5nIHRv IHRoZQorICogcmVmZXJlbmNlIHNuYXBzaG90IGFyZSBpbiB0aGUgaW5kZXguIE5vdGljZSB3ZSBu ZWVkIHRvIGRvIGJ1bGtkZWxldGUgaW4gdGhlCisgKiBwYXJ0aWN1bGFyIG9yZGVyOiBhdXhpbGlh cnkgZmlyc3QsIHRhcmdldCBsYXN0LgogICoKICAqIEJ1aWxkaW5nIGEgdW5pcXVlIGluZGV4IHRo aXMgd2F5IGlzIHRyaWNreTogd2UgbWlnaHQgdHJ5IHRvIGluc2VydCBhCiAgKiB0dXBsZSB0aGF0 IGlzIGFscmVhZHkgZGVhZCBvciBpcyBpbiBwcm9jZXNzIG9mIGJlaW5nIGRlbGV0ZWQsIGFuZCB3 ZQpAQCAtMzM0MiwyMiArMzUyMSwyNiBAQCBJbmRleENoZWNrRXhjbHVzaW9uKFJlbGF0aW9uIGhl YXBSZWxhdGlvbiwKICAqIG5vdCBpbmRleCkuICBUaGVuIHdlIG1hcmsgdGhlIGluZGV4ICJpbmRp c3ZhbGlkIiBhbmQgY29tbWl0LiAgU3Vic2VxdWVudAogICogdHJhbnNhY3Rpb25zIHdpbGwgYmUg YWJsZSB0byB1c2UgaXQgZm9yIHF1ZXJpZXMuCiAgKgotICogRG9pbmcgdHdvIGZ1bGwgdGFibGUg c2NhbnMgaXMgYSBicnV0ZS1mb3JjZSBzdHJhdGVneS4gIFdlIGNvdWxkIHRyeSB0byBiZQotICog Y2xldmVyZXIsIGVnIHN0b3JpbmcgbmV3IHR1cGxlcyBpbiBhIHNwZWNpYWwgYXJlYSBvZiB0aGUg dGFibGUgKHBlcmhhcHMKLSAqIG1ha2luZyB0aGUgdGFibGUgYXBwZW5kLW9ubHkgYnkgc2V0dGlu ZyB1c2VfZnNtKS4gIEhvd2V2ZXIgdGhhdCB3b3VsZAotICogYWRkIHlldCBtb3JlIGxvY2tpbmcg aXNzdWVzLgorICogQWxzbywgc29tZSBhY3Rpb25zIHRvIGNvbmN1cnJlbnQgZHJvcCB0aGUgYXV4 aWxpYXJ5IGluZGV4IGFyZSBwZXJmb3JtZWQuCiAgKi8KIHZvaWQKLXZhbGlkYXRlX2luZGV4KE9p ZCBoZWFwSWQsIE9pZCBpbmRleElkLCBTbmFwc2hvdCBzbmFwc2hvdCkKK3ZhbGlkYXRlX2luZGV4 KE9pZCBoZWFwSWQsIE9pZCBpbmRleElkLCBPaWQgYXV4SW5kZXhJZCwgU25hcHNob3Qgc25hcHNo b3QpCiB7CiAJUmVsYXRpb24JaGVhcFJlbGF0aW9uLAotCQkJCWluZGV4UmVsYXRpb247CisJCQkJ aW5kZXhSZWxhdGlvbiwKKwkJCQlhdXhJbmRleFJlbGF0aW9uOwogCUluZGV4SW5mbyAgKmluZGV4 SW5mbzsKLQlJbmRleFZhY3V1bUluZm8gaXZpbmZvOwotCVZhbGlkYXRlSW5kZXhTdGF0ZSBzdGF0 ZTsKKwlJbmRleFZhY3V1bUluZm8gaXZpbmZvLCBhdXhpdmluZm87CisJVmFsaWRhdGVJbmRleFN0 YXRlIHN0YXRlLCBhdXhTdGF0ZTsKIAlPaWQJCQlzYXZlX3VzZXJpZDsKIAlpbnQJCQlzYXZlX3Nl Y19jb250ZXh0OwogCWludAkJCXNhdmVfbmVzdGxldmVsOworCS8qIFVzZSA4MCUgb2YgbWFpbnRl bmFuY2Vfd29ya19tZW0gdG8gdGFyZ2V0IGluZGV4IHNvcnRpbmcgYW5kCisJICogMTAlIHJlc3Qg Zm9yIGF1eGlsaWFyeS4KKwkgKgorCSAqIFJlc3QgMTAlIHdpbGwgYmUgdXNlZCBmb3IgdHVwbGVz dG9yZSBsYXRlci4gKi8KKwlpbnQJCQltYWluX3dvcmtfbWVtX3BhcnQgPSAoaW50KSgoaW50NjQp IG1haW50ZW5hbmNlX3dvcmtfbWVtICogOCAvIDEwKTsKKwlpbnQJCQlhdXhfd29ya19tZW1fcGFy dCA9IG1haW50ZW5hbmNlX3dvcmtfbWVtIC8gMTA7CiAKIAl7CiAJCWNvbnN0IGludAlwcm9ncmVz c19pbmRleFtdID0gewpAQCAtMzM5MCw2ICszNTczLDcgQEAgdmFsaWRhdGVfaW5kZXgoT2lkIGhl YXBJZCwgT2lkIGluZGV4SWQsIFNuYXBzaG90IHNuYXBzaG90KQogCVJlc3RyaWN0U2VhcmNoUGF0 aCgpOwogCiAJaW5kZXhSZWxhdGlvbiA9IGluZGV4X29wZW4oaW5kZXhJZCwgUm93RXhjbHVzaXZl TG9jayk7CisJYXV4SW5kZXhSZWxhdGlvbiA9IGluZGV4X29wZW4oYXV4SW5kZXhJZCwgUm93RXhj bHVzaXZlTG9jayk7CiAKIAkvKgogCSAqIEZldGNoIGluZm8gbmVlZGVkIGZvciBpbmRleF9pbnNl cnQuICAoWW91IG1pZ2h0IHRoaW5rIHRoaXMgc2hvdWxkIGJlCkBAIC0zNDE0LDE1ICszNTk4LDQ5 IEBAIHZhbGlkYXRlX2luZGV4KE9pZCBoZWFwSWQsIE9pZCBpbmRleElkLCBTbmFwc2hvdCBzbmFw c2hvdCkKIAlpdmluZm8uc3RyYXRlZ3kgPSBOVUxMOwogCWl2aW5mby52YWxpZGF0ZV9pbmRleCA9 IHRydWU7CiAKKwkvKgorCSAqIENvcHkgYWxsIGluZm8gdG8gYXV4aWxpYXJ5IGluZm8sIGNoYW5n aW5nIG9ubHkgcmVsYXRpb24uCisJICovCisJYXV4aXZpbmZvID0gaXZpbmZvOworCWF1eGl2aW5m by5pbmRleCA9IGF1eEluZGV4UmVsYXRpb247CisKIAkvKgogCSAqIEVuY29kZSBUSURzIGFzIGlu dDggdmFsdWVzIGZvciB0aGUgc29ydCwgcmF0aGVyIHRoYW4gZGlyZWN0bHkgc29ydGluZwogCSAq IGl0ZW0gcG9pbnRlcnMuICBUaGlzIGNhbiBiZSBzaWduaWZpY2FudGx5IGZhc3RlciwgcHJpbWFy aWx5IGJlY2F1c2UgVElECiAJICogaXMgYSBwYXNzLWJ5LXJlZmVyZW5jZSB0eXBlIG9uIGFsbCBw bGF0Zm9ybXMsIHdoZXJlYXMgaW50OCBpcwogCSAqIHBhc3MtYnktdmFsdWUgb24gbW9zdCBwbGF0 Zm9ybXMuCiAJICovCisJYXV4U3RhdGUudHVwbGVzb3J0ID0gdHVwbGVzb3J0X2JlZ2luX2RhdHVt KElOVDhPSUQsIEludDhMZXNzT3BlcmF0b3IsCisJCQkJCQkJCQkJICAgSW52YWxpZE9pZCwgZmFs c2UsCisJCQkJCQkJCQkJICAgYXV4X3dvcmtfbWVtX3BhcnQsCisJCQkJCQkJCQkJICAgTlVMTCwg VFVQTEVTT1JUX05PTkUpOworCWF1eFN0YXRlLmh0dXBzID0gYXV4U3RhdGUuaXR1cHMgPSBhdXhT dGF0ZS50dXBzX2luc2VydGVkID0gMDsKKworCSh2b2lkKSBpbmRleF9idWxrX2RlbGV0ZSgmYXV4 aXZpbmZvLCBOVUxMLAorCQkJCQkJCSB2YWxpZGF0ZV9pbmRleF9jYWxsYmFjaywgJmF1eFN0YXRl KTsKKwkvKiBJZiBhdXggaW5kZXggaXMgZW1wdHksIG1lcmdlIG1heSBiZSBza2lwcGVkICovCisJ aWYgKGF1eFN0YXRlLml0dXBzID09IDApCisJeworCQl0dXBsZXNvcnRfZW5kKGF1eFN0YXRlLnR1 cGxlc29ydCk7CisJCWF1eFN0YXRlLnR1cGxlc29ydCA9IE5VTEw7CisKKwkJLyogUm9sbCBiYWNr IGFueSBHVUMgY2hhbmdlcyBleGVjdXRlZCBieSBpbmRleCBmdW5jdGlvbnMgKi8KKwkJQXRFT1hh Y3RfR1VDKGZhbHNlLCBzYXZlX25lc3RsZXZlbCk7CisKKwkJLyogUmVzdG9yZSB1c2VyaWQgYW5k IHNlY3VyaXR5IGNvbnRleHQgKi8KKwkJU2V0VXNlcklkQW5kU2VjQ29udGV4dChzYXZlX3VzZXJp ZCwgc2F2ZV9zZWNfY29udGV4dCk7CisKKwkJLyogQ2xvc2UgcmVscywgYnV0IGtlZXAgbG9ja3Mg Ki8KKwkJaW5kZXhfY2xvc2UoYXV4SW5kZXhSZWxhdGlvbiwgTm9Mb2NrKTsKKwkJaW5kZXhfY2xv c2UoaW5kZXhSZWxhdGlvbiwgTm9Mb2NrKTsKKwkJdGFibGVfY2xvc2UoaGVhcFJlbGF0aW9uLCBO b0xvY2spOworCisJCXJldHVybjsKKwl9CisKIAlzdGF0ZS50dXBsZXNvcnQgPSB0dXBsZXNvcnRf YmVnaW5fZGF0dW0oSU5UOE9JRCwgSW50OExlc3NPcGVyYXRvciwKIAkJCQkJCQkJCQkJSW52YWxp ZE9pZCwgZmFsc2UsCi0JCQkJCQkJCQkJCW1haW50ZW5hbmNlX3dvcmtfbWVtLAorCQkJCQkJCQkJ CQkoaW50KSBtYWluX3dvcmtfbWVtX3BhcnQsCiAJCQkJCQkJCQkJCU5VTEwsIFRVUExFU09SVF9O T05FKTsKIAlzdGF0ZS5odHVwcyA9IHN0YXRlLml0dXBzID0gc3RhdGUudHVwc19pbnNlcnRlZCA9 IDA7CiAKQEAgLTM0NDUsMjcgKzM2NjMsMzAgQEAgdmFsaWRhdGVfaW5kZXgoT2lkIGhlYXBJZCwg T2lkIGluZGV4SWQsIFNuYXBzaG90IHNuYXBzaG90KQogCQlwZ3N0YXRfcHJvZ3Jlc3NfdXBkYXRl X211bHRpX3BhcmFtKDMsIHByb2dyZXNzX2luZGV4LCBwcm9ncmVzc192YWxzKTsKIAl9CiAJdHVw bGVzb3J0X3BlcmZvcm1zb3J0KHN0YXRlLnR1cGxlc29ydCk7CisJdHVwbGVzb3J0X3BlcmZvcm1z b3J0KGF1eFN0YXRlLnR1cGxlc29ydCk7CiAKIAkvKgotCSAqIE5vdyBzY2FuIHRoZSBoZWFwIGFu ZCAibWVyZ2UiIGl0IHdpdGggdGhlIGluZGV4CisJICogTm93IG1lcmdlIGJvdGggaW5kZXhlcwog CSAqLwogCXBnc3RhdF9wcm9ncmVzc191cGRhdGVfcGFyYW0oUFJPR1JFU1NfQ1JFQVRFSURYX1BI QVNFLAotCQkJCQkJCQkgUFJPR1JFU1NfQ1JFQVRFSURYX1BIQVNFX1ZBTElEQVRFX1RBQkxFU0NB Tik7CisJCQkJCQkJCSBQUk9HUkVTU19DUkVBVEVJRFhfUEhBU0VfVkFMSURBVEVfSURYTUVSR0Up OwogCXRhYmxlX2luZGV4X3ZhbGlkYXRlX3NjYW4oaGVhcFJlbGF0aW9uLAogCQkJCQkJCSAgaW5k ZXhSZWxhdGlvbiwKIAkJCQkJCQkgIGluZGV4SW5mbywKIAkJCQkJCQkgIHNuYXBzaG90LAotCQkJ CQkJCSAgJnN0YXRlKTsKKwkJCQkJCQkgICZzdGF0ZSwKKwkJCQkJCQkgICZhdXhTdGF0ZSk7CiAK LQkvKiBEb25lIHdpdGggdHVwbGVzb3J0IG9iamVjdCAqLwotCXR1cGxlc29ydF9lbmQoc3RhdGUu dHVwbGVzb3J0KTsKKwkvKiBUdXBsZSBzb3J0IGNsb3NlZCBieSB0YWJsZV9pbmRleF92YWxpZGF0 ZV9zY2FuICovCisJQXNzZXJ0KHN0YXRlLnR1cGxlc29ydCA9PSBOVUxMICYmIGF1eFN0YXRlLnR1 cGxlc29ydCA9PSBOVUxMKTsKIAogCS8qIE1ha2Ugc3VyZSB0byByZWxlYXNlIHJlc291cmNlcyBj YWNoZWQgaW4gaW5kZXhJbmZvIChpZiBuZWVkZWQpLiAqLwogCWluZGV4X2luc2VydF9jbGVhbnVw KGluZGV4UmVsYXRpb24sIGluZGV4SW5mbyk7CiAKIAllbG9nKERFQlVHMiwKLQkJICJ2YWxpZGF0 ZV9pbmRleCBmb3VuZCAlLjBmIGhlYXAgdHVwbGVzLCAlLjBmIGluZGV4IHR1cGxlczsgaW5zZXJ0 ZWQgJS4wZiBtaXNzaW5nIHR1cGxlcyIsCi0JCSBzdGF0ZS5odHVwcywgc3RhdGUuaXR1cHMsIHN0 YXRlLnR1cHNfaW5zZXJ0ZWQpOworCQkgInZhbGlkYXRlX2luZGV4IGZldGNoZWQgJS4wZiBoZWFw IHR1cGxlcywgJS4wZiBpbmRleCB0dXBsZXM7IgorCQkJCQkJIiAlLjBmIGF1eCBpbmRleCB0dXBs ZXM7IGluc2VydGVkICUuMGYgbWlzc2luZyB0dXBsZXMiLAorCQkgc3RhdGUuaHR1cHMsIHN0YXRl Lml0dXBzLCBhdXhTdGF0ZS5pdHVwcywgc3RhdGUudHVwc19pbnNlcnRlZCk7CiAKIAkvKiBSb2xs IGJhY2sgYW55IEdVQyBjaGFuZ2VzIGV4ZWN1dGVkIGJ5IGluZGV4IGZ1bmN0aW9ucyAqLwogCUF0 RU9YYWN0X0dVQyhmYWxzZSwgc2F2ZV9uZXN0bGV2ZWwpOwpAQCAtMzQ3NCw2ICszNjk1LDcgQEAg dmFsaWRhdGVfaW5kZXgoT2lkIGhlYXBJZCwgT2lkIGluZGV4SWQsIFNuYXBzaG90IHNuYXBzaG90 KQogCVNldFVzZXJJZEFuZFNlY0NvbnRleHQoc2F2ZV91c2VyaWQsIHNhdmVfc2VjX2NvbnRleHQp OwogCiAJLyogQ2xvc2UgcmVscywgYnV0IGtlZXAgbG9ja3MgKi8KKwlpbmRleF9jbG9zZShhdXhJ bmRleFJlbGF0aW9uLCBOb0xvY2spOwogCWluZGV4X2Nsb3NlKGluZGV4UmVsYXRpb24sIE5vTG9j ayk7CiAJdGFibGVfY2xvc2UoaGVhcFJlbGF0aW9uLCBOb0xvY2spOwogfQpAQCAtMzUzNCw2ICsz NzU2LDEyIEBAIGluZGV4X3NldF9zdGF0ZV9mbGFncyhPaWQgaW5kZXhJZCwgSW5kZXhTdGF0ZUZs YWdzQWN0aW9uIGFjdGlvbikKIAkJCUFzc2VydCghaW5kZXhGb3JtLT5pbmRpc3ZhbGlkKTsKIAkJ CWluZGV4Rm9ybS0+aW5kaXN2YWxpZCA9IHRydWU7CiAJCQlicmVhazsKKwkJY2FzZSBJTkRFWF9E Uk9QX0NMRUFSX1JFQURZOgorCQkJLyogQ2xlYXIgaW5kaXNyZWFkeSBkdXJpbmcgYSBDUkVBVEUg SU5ERVggQ09OQ1VSUkVOVExZIHNlcXVlbmNlICovCisJCQlBc3NlcnQoaW5kZXhGb3JtLT5pbmRp c3JlYWR5KTsKKwkJCUFzc2VydCghaW5kZXhGb3JtLT5pbmRpc3ZhbGlkKTsKKwkJCWluZGV4Rm9y bS0+aW5kaXNyZWFkeSA9IGZhbHNlOworCQkJYnJlYWs7CiAJCWNhc2UgSU5ERVhfRFJPUF9DTEVB Ul9WQUxJRDoKIAogCQkJLyoKQEAgLTM4MDUsNiArNDAzMywxMyBAQCByZWluZGV4X2luZGV4KGNv bnN0IFJlaW5kZXhTdG10ICpzdG10LCBPaWQgaW5kZXhJZCwKIAkJaW5kZXhJbmZvLT5paV9FeGNs dXNpb25TdHJhdHMgPSBOVUxMOwogCX0KIAorCS8qIEF1eGlsaWFyeSBpbmRleGVzIGFyZSBub3Qg YWxsb3dlZCB0byBiZSByZWJ1aWx0ICovCisJaWYgKGluZGV4SW5mby0+aWlfQXV4aWxpYXJ5KQor CQllcmVwb3J0KEVSUk9SLAorCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JU RUQpLAorCQkJIGVycm1zZygicmVpbmRleCBvZiBhdXhpbGlhcnkgaW5kZXggXCIlc1wiIG5vdCBz dXBwb3J0ZWQiLAorCQkJCQlSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShpUmVsKSkpKTsKKwogCS8q IFN1cHByZXNzIHVzZSBvZiB0aGUgdGFyZ2V0IGluZGV4IHdoaWxlIHJlYnVpbGRpbmcgaXQgKi8K IAlTZXRSZWluZGV4UHJvY2Vzc2luZyhoZWFwSWQsIGluZGV4SWQpOwogCkBAIC00MDQ3LDYgKzQy ODIsNyBAQCByZWluZGV4X3JlbGF0aW9uKGNvbnN0IFJlaW5kZXhTdG10ICpzdG10LCBPaWQgcmVs aWQsIGludCBmbGFncywKIAl7CiAJCU9pZAkJCWluZGV4T2lkID0gbGZpcnN0X29pZChpbmRleElk KTsKIAkJT2lkCQkJaW5kZXhOYW1lc3BhY2VJZCA9IGdldF9yZWxfbmFtZXNwYWNlKGluZGV4T2lk KTsKKwkJT2lkCQkJaW5kZXhBbSA9IGdldF9yZWxfcmVsYW0oaW5kZXhPaWQpOwogCiAJCS8qCiAJ CSAqIFNraXAgYW55IGludmFsaWQgaW5kZXhlcyBvbiBhIFRPQVNUIHRhYmxlLiAgVGhlc2UgY2Fu IG9ubHkgYmUKQEAgLTQwNzIsNiArNDMwOCwxOCBAQCByZWluZGV4X3JlbGF0aW9uKGNvbnN0IFJl aW5kZXhTdG10ICpzdG10LCBPaWQgcmVsaWQsIGludCBmbGFncywKIAkJCWNvbnRpbnVlOwogCQl9 CiAKKwkJaWYgKGluZGV4QW0gPT0gU1RJUl9BTV9PSUQpCisJCXsKKwkJCWVyZXBvcnQoV0FSTklO RywKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAorCQkJCQkg ZXJybXNnKCJza2lwcGluZyByZWluZGV4IG9mIGF1eGlsaWFyeSBpbmRleCBcIiVzLiVzXCIiLAor CQkJCQkJCWdldF9uYW1lc3BhY2VfbmFtZShpbmRleE5hbWVzcGFjZUlkKSwKKwkJCQkJCQlnZXRf cmVsX25hbWUoaW5kZXhPaWQpKSkpOworCQkJaWYgKGZsYWdzICYgUkVJTkRFWF9SRUxfU1VQUFJF U1NfSU5ERVhfVVNFKQorCQkJCVJlbW92ZVJlaW5kZXhQZW5kaW5nKGluZGV4T2lkKTsKKwkJCWNv bnRpbnVlOworCQl9CisKIAkJcmVpbmRleF9pbmRleChzdG10LCBpbmRleE9pZCwgIShmbGFncyAm IFJFSU5ERVhfUkVMX0NIRUNLX0NPTlNUUkFJTlRTKSwKIAkJCQkJICBwZXJzaXN0ZW5jZSwgcGFy YW1zKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fdmlld3Muc3Fs IGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fdmlld3Muc3FsCmluZGV4IGYxZWQ3YjU4ZjEz Li4wZGZhNDZhOWI3NCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fdmll d3Muc3FsCisrKyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvc3lzdGVtX3ZpZXdzLnNxbApAQCAtMTM3 OSwxNiArMTM3OSwxNyBAQCBDUkVBVEUgVklFVyBwZ19zdGF0X3Byb2dyZXNzX2NyZWF0ZV9pbmRl eCBBUwogICAgICAgICAgICAgICAgICAgICAgIEVORCBBUyBjb21tYW5kLAogICAgICAgICBDQVNF IFMucGFyYW0xMCBXSEVOIDAgVEhFTiAnaW5pdGlhbGl6aW5nJwogICAgICAgICAgICAgICAgICAg ICAgICBXSEVOIDEgVEhFTiAnd2FpdGluZyBmb3Igd3JpdGVycyBiZWZvcmUgYnVpbGQnCi0gICAg ICAgICAgICAgICAgICAgICAgIFdIRU4gMiBUSEVOICdidWlsZGluZyBpbmRleCcgfHwKKyAgICAg ICAgICAgICAgICAgICAgICAgV0hFTiAyIFRIRU4gJ3dhaXRpbmcgZm9yIHdyaXRlcnMgdG8gdXNl IGF1eGlsaWFyeSBpbmRleCcKKyAgICAgICAgICAgICAgICAgICAgICAgV0hFTiAzIFRIRU4gJ2J1 aWxkaW5nIGluZGV4JyB8fAogICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09BTEVTQ0UoKCc6 ICcgfHwgcGdfaW5kZXhhbV9wcm9ncmVzc19waGFzZW5hbWUoUy5wYXJhbTk6Om9pZCwgUy5wYXJh bTExKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJykKLSAgICAgICAg ICAgICAgICAgICAgICAgV0hFTiAzIFRIRU4gJ3dhaXRpbmcgZm9yIHdyaXRlcnMgYmVmb3JlIHZh bGlkYXRpb24nCi0gICAgICAgICAgICAgICAgICAgICAgIFdIRU4gNCBUSEVOICdpbmRleCB2YWxp ZGF0aW9uOiBzY2FubmluZyBpbmRleCcKLSAgICAgICAgICAgICAgICAgICAgICAgV0hFTiA1IFRI RU4gJ2luZGV4IHZhbGlkYXRpb246IHNvcnRpbmcgdHVwbGVzJwotICAgICAgICAgICAgICAgICAg ICAgICBXSEVOIDYgVEhFTiAnaW5kZXggdmFsaWRhdGlvbjogc2Nhbm5pbmcgdGFibGUnCi0gICAg ICAgICAgICAgICAgICAgICAgIFdIRU4gNyBUSEVOICd3YWl0aW5nIGZvciBvbGQgc25hcHNob3Rz JwotICAgICAgICAgICAgICAgICAgICAgICBXSEVOIDggVEhFTiAnd2FpdGluZyBmb3IgcmVhZGVy cyBiZWZvcmUgbWFya2luZyBkZWFkJwotICAgICAgICAgICAgICAgICAgICAgICBXSEVOIDkgVEhF TiAnd2FpdGluZyBmb3IgcmVhZGVycyBiZWZvcmUgZHJvcHBpbmcnCisgICAgICAgICAgICAgICAg ICAgICAgIFdIRU4gNCBUSEVOICd3YWl0aW5nIGZvciB3cml0ZXJzIGJlZm9yZSB2YWxpZGF0aW9u JworICAgICAgICAgICAgICAgICAgICAgICBXSEVOIDUgVEhFTiAnaW5kZXggdmFsaWRhdGlvbjog c2Nhbm5pbmcgaW5kZXgnCisgICAgICAgICAgICAgICAgICAgICAgIFdIRU4gNiBUSEVOICdpbmRl eCB2YWxpZGF0aW9uOiBzb3J0aW5nIHR1cGxlcycKKyAgICAgICAgICAgICAgICAgICAgICAgV0hF TiA3IFRIRU4gJ2luZGV4IHZhbGlkYXRpb246IG1lcmdpbmcgaW5kZXhlcycKKyAgICAgICAgICAg ICAgICAgICAgICAgV0hFTiA4IFRIRU4gJ3dhaXRpbmcgZm9yIG9sZCBzbmFwc2hvdHMnCisgICAg ICAgICAgICAgICAgICAgICAgIFdIRU4gOSBUSEVOICd3YWl0aW5nIGZvciByZWFkZXJzIGJlZm9y ZSBtYXJraW5nIGRlYWQnCisgICAgICAgICAgICAgICAgICAgICAgIFdIRU4gMTAgVEhFTiAnd2Fp dGluZyBmb3IgcmVhZGVycyBiZWZvcmUgZHJvcHBpbmcnCiAgICAgICAgICAgICAgICAgICAgICAg IEVORCBhcyBwaGFzZSwKICAgICAgICAgUy5wYXJhbTQgQVMgbG9ja2Vyc190b3RhbCwKICAgICAg ICAgUy5wYXJhbTUgQVMgbG9ja2Vyc19kb25lLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29t bWFuZHMvaW5kZXhjbWRzLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9pbmRleGNtZHMuYwppbmRl eCBjYmQ3NjA2NmY3NC4uZGM0YWYwNDA5ZGYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1h bmRzL2luZGV4Y21kcy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2luZGV4Y21kcy5jCkBA IC0xODMsNiArMTgzLDcgQEAgQ2hlY2tJbmRleENvbXBhdGlibGUoT2lkIG9sZElkLAogCQkJCQkg Ym9vbCBpc1dpdGhvdXRPdmVybGFwcykKIHsKIAlib29sCQlpc2NvbnN0cmFpbnQ7CisJYm9vbAkJ aXNhdXhpbGlhcnk7CiAJT2lkCQkgICAqdHlwZUlkczsKIAlPaWQJCSAgICpjb2xsYXRpb25JZHM7 CiAJT2lkCQkgICAqb3BjbGFzc0lkczsKQEAgLTIzMyw2ICsyMzQsNyBAQCBDaGVja0luZGV4Q29t cGF0aWJsZShPaWQgb2xkSWQsCiAKIAlhbWNhbm9yZGVyID0gYW1Sb3V0aW5lLT5hbWNhbm9yZGVy OwogCWFtc3VtbWFyaXppbmcgPSBhbVJvdXRpbmUtPmFtc3VtbWFyaXppbmc7CisJaXNhdXhpbGlh cnkgPSBhY2Nlc3NNZXRob2RJZCA9PSBTVElSX0FNX09JRDsKIAogCS8qCiAJICogQ29tcHV0ZSB0 aGUgb3BlcmF0b3IgY2xhc3NlcywgY29sbGF0aW9ucywgYW5kIGV4Y2x1c2lvbiBvcGVyYXRvcnMg Zm9yCkBAIC0yNDQsNyArMjQ2LDggQEAgQ2hlY2tJbmRleENvbXBhdGlibGUoT2lkIG9sZElkLAog CSAqLwogCWluZGV4SW5mbyA9IG1ha2VJbmRleEluZm8obnVtYmVyT2ZBdHRyaWJ1dGVzLCBudW1i ZXJPZkF0dHJpYnV0ZXMsCiAJCQkJCQkJICBhY2Nlc3NNZXRob2RJZCwgTklMLCBOSUwsIGZhbHNl LCBmYWxzZSwKLQkJCQkJCQkgIGZhbHNlLCBmYWxzZSwgYW1zdW1tYXJpemluZywgaXNXaXRob3V0 T3ZlcmxhcHMpOworCQkJCQkJCSAgZmFsc2UsIGZhbHNlLCBhbXN1bW1hcml6aW5nLAorCQkJCQkJ CSAgaXNXaXRob3V0T3ZlcmxhcHMsIGlzYXV4aWxpYXJ5KTsKIAl0eXBlSWRzID0gcGFsbG9jX2Fy cmF5KE9pZCwgbnVtYmVyT2ZBdHRyaWJ1dGVzKTsKIAljb2xsYXRpb25JZHMgPSBwYWxsb2NfYXJy YXkoT2lkLCBudW1iZXJPZkF0dHJpYnV0ZXMpOwogCW9wY2xhc3NJZHMgPSBwYWxsb2NfYXJyYXko T2lkLCBudW1iZXJPZkF0dHJpYnV0ZXMpOwpAQCAtNTU3LDYgKzU2MCw3IEBAIERlZmluZUluZGV4 KFBhcnNlU3RhdGUgKnBzdGF0ZSwKIHsKIAlib29sCQljb25jdXJyZW50OwogCWNoYXIJICAgKmlu ZGV4UmVsYXRpb25OYW1lOworCWNoYXIJICAgKmF1eEluZGV4UmVsYXRpb25OYW1lID0gTlVMTDsK IAljaGFyCSAgICphY2Nlc3NNZXRob2ROYW1lOwogCU9pZAkJICAgKnR5cGVJZHM7CiAJT2lkCQkg ICAqY29sbGF0aW9uSWRzOwpAQCAtNTY2LDYgKzU3MCw3IEBAIERlZmluZUluZGV4KFBhcnNlU3Rh dGUgKnBzdGF0ZSwKIAlPaWQJCQluYW1lc3BhY2VJZDsKIAlPaWQJCQl0YWJsZXNwYWNlSWQ7CiAJ T2lkCQkJY3JlYXRlZENvbnN0cmFpbnRJZCA9IEludmFsaWRPaWQ7CisJT2lkCQkJYXV4SW5kZXhS ZWxhdGlvbklkID0gSW52YWxpZE9pZDsKIAlMaXN0CSAgICppbmRleENvbE5hbWVzOwogCUxpc3QJ ICAgKmFsbEluZGV4UGFyYW1zOwogCVJlbGF0aW9uCXJlbDsKQEAgLTU4Nyw2ICs1OTIsNyBAQCBE ZWZpbmVJbmRleChQYXJzZVN0YXRlICpwc3RhdGUsCiAJaW50CQkJbnVtYmVyT2ZLZXlBdHRyaWJ1 dGVzOwogCVRyYW5zYWN0aW9uSWQgbGltaXRYbWluOwogCU9iamVjdEFkZHJlc3MgYWRkcmVzczsK KwlPYmplY3RBZGRyZXNzIGF1eEFkZHJlc3M7CiAJTG9ja1JlbElkCWhlYXByZWxpZDsKIAlMT0NL VEFHCQloZWFwbG9ja3RhZzsKIAlMT0NLTU9ERQlsb2NrbW9kZTsKQEAgLTgzNyw2ICs4NDMsMTUg QEAgRGVmaW5lSW5kZXgoUGFyc2VTdGF0ZSAqcHN0YXRlLAogCQkJCQkJCQkJCQlzdG10LT5leGNs dWRlT3BOYW1lcywKIAkJCQkJCQkJCQkJc3RtdC0+cHJpbWFyeSwKIAkJCQkJCQkJCQkJc3RtdC0+ aXNjb25zdHJhaW50KTsKKwkvKgorCSAqIFNlbGVjdCBuYW1lIGZvciBhdXhpbGlhcnkgaW5kZXgK KwkgKi8KKwlpZiAoY29uY3VycmVudCkKKwkJYXV4SW5kZXhSZWxhdGlvbk5hbWUgPSBDaG9vc2VS ZWxhdGlvbk5hbWUoaW5kZXhSZWxhdGlvbk5hbWUsCisJCQkJCQkJCQkJCQkgIE5VTEwsCisJCQkJ CQkJCQkJCQkgICJjY2F1eCIsCisJCQkJCQkJCQkJCQkgIG5hbWVzcGFjZUlkLAorCQkJCQkJCQkJ CQkJICBmYWxzZSk7CiAKIAkvKgogCSAqIGxvb2sgdXAgdGhlIGFjY2VzcyBtZXRob2QsIHZlcmlm eSBpdCBjYW4gaGFuZGxlIHRoZSByZXF1ZXN0ZWQgZmVhdHVyZXMKQEAgLTkzMSw3ICs5NDYsOCBA QCBEZWZpbmVJbmRleChQYXJzZVN0YXRlICpwc3RhdGUsCiAJCQkJCQkJICAhY29uY3VycmVudCwK IAkJCQkJCQkgIGNvbmN1cnJlbnQsCiAJCQkJCQkJICBhbWlzc3VtbWFyaXppbmcsCi0JCQkJCQkJ ICBzdG10LT5pc3dpdGhvdXRvdmVybGFwcyk7CisJCQkJCQkJICBzdG10LT5pc3dpdGhvdXRvdmVy bGFwcywKKwkJCQkJCQkgIGZhbHNlKTsKIAogCXR5cGVJZHMgPSBwYWxsb2NfYXJyYXkoT2lkLCBu dW1iZXJPZkF0dHJpYnV0ZXMpOwogCWNvbGxhdGlvbklkcyA9IHBhbGxvY19hcnJheShPaWQsIG51 bWJlck9mQXR0cmlidXRlcyk7CkBAIC0xNjAxLDYgKzE2MTcsMTYgQEAgRGVmaW5lSW5kZXgoUGFy c2VTdGF0ZSAqcHN0YXRlLAogCQlyZXR1cm4gYWRkcmVzczsKIAl9CiAKKwkvKgorCSAqIEluIGNh c2Ugb2YgY29uY3VycmVudCBidWlsZCAtIGNyZWF0ZSBhdXhpbGlhcnkgaW5kZXggcmVjb3JkLgor CSAqLworCWlmIChjb25jdXJyZW50KQorCXsKKwkJYXV4SW5kZXhSZWxhdGlvbklkID0gaW5kZXhf Y29uY3VycmVudGx5X2NyZWF0ZV9hdXgocmVsLCBpbmRleFJlbGF0aW9uSWQsCisJCQkJCQkJCQkJ CXRhYmxlc3BhY2VJZCwgYXV4SW5kZXhSZWxhdGlvbk5hbWUpOworCQlPYmplY3RBZGRyZXNzU2V0 KGF1eEFkZHJlc3MsIFJlbGF0aW9uUmVsYXRpb25JZCwgYXV4SW5kZXhSZWxhdGlvbklkKTsKKwl9 CisKIAlBdEVPWGFjdF9HVUMoZmFsc2UsIHJvb3Rfc2F2ZV9uZXN0bGV2ZWwpOwogCVNldFVzZXJJ ZEFuZFNlY0NvbnRleHQocm9vdF9zYXZlX3VzZXJpZCwgcm9vdF9zYXZlX3NlY19jb250ZXh0KTsK IApAQCAtMTYyOSwxMSArMTY1NSwxMSBAQCBEZWZpbmVJbmRleChQYXJzZVN0YXRlICpwc3RhdGUs CiAJLyoKIAkgKiBGb3IgYSBjb25jdXJyZW50IGJ1aWxkLCBpdCdzIGltcG9ydGFudCB0byBtYWtl IHRoZSBjYXRhbG9nIGVudHJpZXMKIAkgKiB2aXNpYmxlIHRvIG90aGVyIHRyYW5zYWN0aW9ucyBi ZWZvcmUgd2Ugc3RhcnQgdG8gYnVpbGQgdGhlIGluZGV4LiBUaGF0Ci0JICogd2lsbCBwcmV2ZW50 IHRoZW0gZnJvbSBtYWtpbmcgaW5jb21wYXRpYmxlIEhPVCB1cGRhdGVzLiAgVGhlIG5ldyBpbmRl eAotCSAqIHdpbGwgYmUgbWFya2VkIG5vdCBpbmRpc3JlYWR5IGFuZCBub3QgaW5kaXN2YWxpZCwg c28gdGhhdCBubyBvbmUgZWxzZQotCSAqIHRyaWVzIHRvIGVpdGhlciBpbnNlcnQgaW50byBpdCBv ciB1c2UgaXQgZm9yIHF1ZXJpZXMuCisJICogd2lsbCBwcmV2ZW50IHRoZW0gZnJvbSBtYWtpbmcg aW5jb21wYXRpYmxlIEhPVCB1cGRhdGVzLiBOZXcgaW5kZXhlcworCSAqIChtYWluIGFuZCBhdXhp bGlhcnkpIHdpbGwgYmUgbWFya2VkIG5vdCBpbmRpc3JlYWR5IGFuZCBub3QgaW5kaXN2YWxpZCwK KwkgKiBzbyB0aGF0IG5vIG9uZSBlbHNlIHRyaWVzIHRvIGVpdGhlciBpbnNlcnQgaW50byBpdCBv ciB1c2UgaXQgZm9yIHF1ZXJpZXMuCiAJICoKLQkgKiBXZSBtdXN0IGNvbW1pdCBvdXIgY3VycmVu dCB0cmFuc2FjdGlvbiBzbyB0aGF0IHRoZSBpbmRleCBiZWNvbWVzCisJICogV2UgbXVzdCBjb21t aXQgb3VyIGN1cnJlbnQgdHJhbnNhY3Rpb24gc28gdGhhdCB0aGUgaW5kZXhlcyBiZWNvbWVzCiAJ ICogdmlzaWJsZTsgdGhlbiBzdGFydCBhbm90aGVyLiAgTm90ZSB0aGF0IGFsbCB0aGUgZGF0YSBz dHJ1Y3R1cmVzIHdlIGp1c3QKIAkgKiBidWlsdCBhcmUgbG9zdCBpbiB0aGUgY29tbWl0LiAgVGhl IG9ubHkgZGF0YSB3ZSBrZWVwIHBhc3QgaGVyZSBhcmUgdGhlCiAJICogcmVsYXRpb24gSURzLgpA QCAtMTY0Myw3ICsxNjY5LDcgQEAgRGVmaW5lSW5kZXgoUGFyc2VTdGF0ZSAqcHN0YXRlLAogCSAq IGNhbm5vdCBibG9jaywgZXZlbiBpZiBzb21lb25lIGVsc2UgaXMgd2FpdGluZyBmb3IgYWNjZXNz LCBiZWNhdXNlIHdlCiAJICogYWxyZWFkeSBoYXZlIHRoZSBzYW1lIGxvY2sgd2l0aGluIG91ciB0 cmFuc2FjdGlvbi4KIAkgKgotCSAqIE5vdGU6IHdlIGRvbid0IGN1cnJlbnRseSBib3RoZXIgd2l0 aCBhIHNlc3Npb24gbG9jayBvbiB0aGUgaW5kZXgsCisJICogTm90ZTogd2UgZG9uJ3QgY3VycmVu dGx5IGJvdGhlciB3aXRoIGEgc2Vzc2lvbiBsb2NrIG9uIHRoZSBpbmRleGVzLAogCSAqIGJlY2F1 c2UgdGhlcmUgYXJlIG5vIG9wZXJhdGlvbnMgdGhhdCBjb3VsZCBjaGFuZ2UgaXRzIHN0YXRlIHdo aWxlIHdlCiAJICogaG9sZCBsb2NrIG9uIHRoZSBwYXJlbnQgdGFibGUuICBUaGlzIG1pZ2h0IG5l ZWQgdG8gY2hhbmdlIGxhdGVyLgogCSAqLwpAQCAtMTY4Miw3ICsxNzA4LDcgQEAgRGVmaW5lSW5k ZXgoUGFyc2VTdGF0ZSAqcHN0YXRlLAogCSAqIHdpdGggdGhlIG9sZCBsaXN0IG9mIGluZGV4ZXMu ICBVc2UgU2hhcmVMb2NrIHRvIGNvbnNpZGVyIHJ1bm5pbmcKIAkgKiB0cmFuc2FjdGlvbnMgdGhh dCBob2xkIGxvY2tzIHRoYXQgcGVybWl0IHdyaXRpbmcgdG8gdGhlIHRhYmxlLiAgTm90ZSB3ZQog CSAqIGRvIG5vdCBuZWVkIHRvIHdvcnJ5IGFib3V0IHhhY3RzIHRoYXQgb3BlbiB0aGUgdGFibGUg Zm9yIHdyaXRpbmcgYWZ0ZXIKLQkgKiB0aGlzIHBvaW50OyB0aGV5IHdpbGwgc2VlIHRoZSBuZXcg aW5kZXggd2hlbiB0aGV5IG9wZW4gaXQuCisJICogdGhpcyBwb2ludDsgdGhleSB3aWxsIHNlZSB0 aGUgbmV3IGluZGV4ZXMgd2hlbiB0aGV5IG9wZW4gaXQuCiAJICoKIAkgKiBOb3RlOiB0aGUgcmVh c29uIHdlIHVzZSBhY3R1YWwgbG9jayBhY3F1aXNpdGlvbiBoZXJlLCByYXRoZXIgdGhhbiBqdXN0 CiAJICogY2hlY2tpbmcgdGhlIFByb2NBcnJheSBhbmQgc2xlZXBpbmcsIGlzIHRoYXQgZGVhZGxv Y2sgaXMgcG9zc2libGUgaWYKQEAgLTE2OTQsMTQgKzE3MjAsNDQgQEAgRGVmaW5lSW5kZXgoUGFy c2VTdGF0ZSAqcHN0YXRlLAogCiAJLyoKIAkgKiBBdCB0aGlzIG1vbWVudCB3ZSBhcmUgc3VyZSB0 aGF0IHRoZXJlIGFyZSBubyB0cmFuc2FjdGlvbnMgd2l0aCB0aGUKLQkgKiB0YWJsZSBvcGVuIGZv ciB3cml0ZSB0aGF0IGRvbid0IGhhdmUgdGhpcyBuZXcgaW5kZXggaW4gdGhlaXIgbGlzdCBvZgor CSAqIHRhYmxlIG9wZW4gZm9yIHdyaXRlIHRoYXQgZG9uJ3QgaGF2ZSB0aGlzIG5ldyBpbmRleGVz IGluIHRoZWlyIGxpc3Qgb2YKIAkgKiBpbmRleGVzLiAgV2UgaGF2ZSB3YWl0ZWQgb3V0IGFsbCB0 aGUgZXhpc3RpbmcgdHJhbnNhY3Rpb25zIGFuZCBhbnkgbmV3Ci0JICogdHJhbnNhY3Rpb24gd2ls bCBoYXZlIHRoZSBuZXcgaW5kZXggaW4gaXRzIGxpc3QsIGJ1dCB0aGUgaW5kZXggaXMgc3RpbGwK LQkgKiBtYXJrZWQgYXMgIm5vdC1yZWFkeS1mb3ItaW5zZXJ0cyIuICBUaGUgaW5kZXggaXMgY29u c3VsdGVkIHdoaWxlCisJICogdHJhbnNhY3Rpb24gd2lsbCBoYXZlIGJvdGggbmV3IGluZGV4ZXMg aW4gaXRzIGxpc3QsIGJ1dCBpbmRleGVzIGFyZSBzdGlsbAorCSAqIG1hcmtlZCBhcyAibm90LXJl YWR5LWZvci1pbnNlcnRzIi4gVGhlIGluZGV4ZXMgYXJlIGNvbnN1bHRlZCB3aGlsZQogCSAqIGRl Y2lkaW5nIEhPVC1zYWZldHkgdGhvdWdoLiAgVGhpcyBhcnJhbmdlbWVudCBlbnN1cmVzIHRoYXQg bm8gbmV3IEhPVAogCSAqIGNoYWlucyBjYW4gYmUgY3JlYXRlZCB3aGVyZSB0aGUgbmV3IHR1cGxl IGFuZCB0aGUgb2xkIHR1cGxlIGluIHRoZQogCSAqIGNoYWluIGhhdmUgZGlmZmVyZW50IGluZGV4 IGtleXMuCiAJICoKKwkgKiBOb3cgY2FsbCBidWlsZCBvbiBhdXhpbGlhcnkgaW5kZXguIEluZGV4 IHdpbGwgYmUgY3JlYXRlZCBlbXB0eSB3aXRob3V0CisJICogYW55IGFjdHVhbCBoZWFwIHNjYW4s IGJ1dCBtYXJrZWQgYXMgInJlYWR5LWZvci1pbnNlcnRzIi4gVGhlIGdvYWwgb2YKKwkgKiB0aGF0 IGluZGV4IGlzIGFjY3VtdWxhdGUgbmV3IHR1cGxlcyB3aGlsZSBtYWluIGluZGV4IGlzIGFjdHVh bGx5IGJ1aWx0LgorCSAqLworCisJLyogU2V0IEFjdGl2ZVNuYXBzaG90IHNpbmNlIGZ1bmN0aW9u cyBpbiB0aGUgaW5kZXhlcyBtYXkgbmVlZCBpdCAqLworCVB1c2hBY3RpdmVTbmFwc2hvdChHZXRU cmFuc2FjdGlvblNuYXBzaG90KCkpOworCisJaW5kZXhfY29uY3VycmVudGx5X2J1aWxkKHRhYmxl SWQsIGF1eEluZGV4UmVsYXRpb25JZCk7CisJLyogd2UgY2FuIGRvIGF3YXkgd2l0aCBvdXIgc25h cHNob3QgKi8KKwlQb3BBY3RpdmVTbmFwc2hvdCgpOworCisJQ29tbWl0VHJhbnNhY3Rpb25Db21t YW5kKCk7CisJU3RhcnRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKKworCS8qIFRlbGwgY29uY3VycmVu dCBpbmRleCBidWlsZHMgdG8gaWdub3JlIHVzLCBpZiBpbmRleCBxdWFsaWZpZXMgKi8KKwlpZiAo c2FmZV9pbmRleCkKKwkJc2V0X2luZGV4c2FmZV9wcm9jZmxhZ3MoKTsKKwlwZ3N0YXRfcHJvZ3Jl c3NfdXBkYXRlX3BhcmFtKFBST0dSRVNTX0NSRUFURUlEWF9QSEFTRSwKKwkJCQkJCQkgUFJPR1JF U1NfQ1JFQVRFSURYX1BIQVNFX1dBSVRfMik7CisJLyoKKwkgKiBOb3cgd2UgbmVlZCB0byBlbnN1 cmUgYXJlIG5vIHRyYW5zYWN0aW9ucyB3aXRoIHRoZSB3aXRoIGF1eGlsaWFyeSBpbmRleAorCSAq IG1hcmtlZCBhcyAibm90LXJlYWR5LWZvci1pbnNlcnRzIi4KKwkgKi8KKwlXYWl0Rm9yTG9ja2Vy cyhoZWFwbG9ja3RhZywgU2hhcmVMb2NrLCB0cnVlKTsKKworCS8qCisJICogQXQgdGhpcyBtb21l bnQgd2UgYXJlIHN1cmUgdGhhdCBhbGwgbmV3IHR1cGxlcyBpbiB0YWJsZSBhcmUgaW5zZXJ0ZWQg aW50bworCSAqIHRoZSBhdXhpbGlhcnkgaW5kZXguIE5vdyBpdCBpcyB0aW1lIHRvIGJ1aWxkIHRo ZSB0YXJnZXQgaW5kZXggaXRzZWxmLgorCSAqCiAJICogV2Ugbm93IHRha2UgYSBuZXcgc25hcHNo b3QsIGFuZCBidWlsZCB0aGUgaW5kZXggdXNpbmcgYWxsIHR1cGxlcyB0aGF0CiAJICogYXJlIHZp c2libGUgaW4gdGhpcyBzbmFwc2hvdC4gIFdlIGNhbiBiZSBzdXJlIHRoYXQgYW55IEhPVCB1cGRh dGVzIHRvCiAJICogdGhlc2UgdHVwbGVzIHdpbGwgYmUgY29tcGF0aWJsZSB3aXRoIHRoZSBpbmRl eCwgc2luY2UgYW55IHVwZGF0ZXMgbWFkZQpAQCAtMTczNiw5ICsxNzkyLDI4IEBAIERlZmluZUlu ZGV4KFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAkgKiB0aGUgaW5kZXggbWFya2VkIGFzIHJlYWQtb25s eSBmb3IgdXBkYXRlcy4KIAkgKi8KIAlwZ3N0YXRfcHJvZ3Jlc3NfdXBkYXRlX3BhcmFtKFBST0dS RVNTX0NSRUFURUlEWF9QSEFTRSwKLQkJCQkJCQkJIFBST0dSRVNTX0NSRUFURUlEWF9QSEFTRV9X QUlUXzIpOworCQkJCQkJCQkgUFJPR1JFU1NfQ1JFQVRFSURYX1BIQVNFX1dBSVRfMyk7CiAJV2Fp dEZvckxvY2tlcnMoaGVhcGxvY2t0YWcsIFNoYXJlTG9jaywgdHJ1ZSk7CiAKKwkvKgorCSAqIFVw ZGF0aW5nIHBnX2luZGV4IG1pZ2h0IGludm9sdmUgVE9BU1QgdGFibGUgYWNjZXNzLCBzbyBlbnN1 cmUgd2UKKwkgKiBoYXZlIGEgdmFsaWQgc25hcHNob3QuCisJICovCisJUHVzaEFjdGl2ZVNuYXBz aG90KEdldFRyYW5zYWN0aW9uU25hcHNob3QoKSk7CisJLyoKKwkgKiBOb3cgdGFyZ2V0IGluZGV4 IGlzIG1hcmtlZCBhcyAicmVhZHkiIGZvciBhbGwgdHJhbnNhY3Rpb25zLiBTbywgYXV4aWxpYXJ5 CisJICogaW5kZXggaXMgbm8gbG9uZ2VyIG5lZWRlZC4gU28sIHN0YXJ0IHJlbW92aW5nIHByb2Nl c3MgYnkgcmV2ZXJ0aW5nICJyZWFkeSIKKwkgKiBmbGFnLgorCSAqLworCWluZGV4X3NldF9zdGF0 ZV9mbGFncyhhdXhJbmRleFJlbGF0aW9uSWQsIElOREVYX0RST1BfQ0xFQVJfUkVBRFkpOworCVBv cEFjdGl2ZVNuYXBzaG90KCk7CisKKwlDb21taXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKKwlTdGFy dFRyYW5zYWN0aW9uQ29tbWFuZCgpOworCS8qIFRlbGwgY29uY3VycmVudCBpbmRleCBidWlsZHMg dG8gaWdub3JlIHVzLCBpZiBpbmRleCBxdWFsaWZpZXMgKi8KKwlpZiAoc2FmZV9pbmRleCkKKwkJ c2V0X2luZGV4c2FmZV9wcm9jZmxhZ3MoKTsKKwogCS8qCiAJICogTm93IHRha2UgdGhlICJyZWZl cmVuY2Ugc25hcHNob3QiIHRoYXQgd2lsbCBiZSB1c2VkIGJ5IHZhbGlkYXRlX2luZGV4KCkKIAkg KiB0byBmaWx0ZXIgY2FuZGlkYXRlIHR1cGxlcy4gIEJld2FyZSEgIFRoZXJlIG1pZ2h0IHN0aWxs IGJlIHNuYXBzaG90cyBpbgpAQCAtMTc1NiwyNCArMTgzMSwxNCBAQCBEZWZpbmVJbmRleChQYXJz ZVN0YXRlICpwc3RhdGUsCiAJICovCiAJc25hcHNob3QgPSBSZWdpc3RlclNuYXBzaG90KEdldFRy YW5zYWN0aW9uU25hcHNob3QoKSk7CiAJUHVzaEFjdGl2ZVNuYXBzaG90KHNuYXBzaG90KTsKLQog CS8qCi0JICogU2NhbiB0aGUgaW5kZXggYW5kIHRoZSBoZWFwLCBpbnNlcnQgYW55IG1pc3Npbmcg aW5kZXggZW50cmllcy4KLQkgKi8KLQl2YWxpZGF0ZV9pbmRleCh0YWJsZUlkLCBpbmRleFJlbGF0 aW9uSWQsIHNuYXBzaG90KTsKLQotCS8qCi0JICogRHJvcCB0aGUgcmVmZXJlbmNlIHNuYXBzaG90 LiAgV2UgbXVzdCBkbyB0aGlzIGJlZm9yZSB3YWl0aW5nIG91dCBvdGhlcgotCSAqIHNuYXBzaG90 IGhvbGRlcnMsIGVsc2Ugd2Ugd2lsbCBkZWFkbG9jayBhZ2FpbnN0IG90aGVyIHByb2Nlc3NlcyBh bHNvCi0JICogZG9pbmcgQ1JFQVRFIElOREVYIENPTkNVUlJFTlRMWSwgd2hpY2ggd291bGQgc2Vl IG91ciBzbmFwc2hvdCBhcyBvbmUKLQkgKiB0aGV5IG11c3Qgd2FpdCBmb3IuICBCdXQgZmlyc3Qs IHNhdmUgdGhlIHNuYXBzaG90J3MgeG1pbiB0byB1c2UgYXMKLQkgKiBsaW1pdFhtaW4gZm9yIEdl dEN1cnJlbnRWaXJ0dWFsWElEcygpLgorCSAqIE1lcmdlIGNvbnRlbnQgb2YgYXV4aWxpYXJ5IGFu ZCB0YXJnZXQgaW5kZXhlcyAtIGluc2VydCBhbnkgbWlzc2luZyBpbmRleCBlbnRyaWVzLgogCSAq LworCXZhbGlkYXRlX2luZGV4KHRhYmxlSWQsIGluZGV4UmVsYXRpb25JZCwgYXV4SW5kZXhSZWxh dGlvbklkLCBzbmFwc2hvdCk7CiAJbGltaXRYbWluID0gc25hcHNob3QtPnhtaW47CiAKIAlQb3BB Y3RpdmVTbmFwc2hvdCgpOwogCVVucmVnaXN0ZXJTbmFwc2hvdChzbmFwc2hvdCk7Ci0KIAkvKgog CSAqIFRoZSBzbmFwc2hvdCBzdWJzeXN0ZW0gY291bGQgc3RpbGwgY29udGFpbiByZWdpc3RlcmVk IHNuYXBzaG90cyB0aGF0CiAJICogYXJlIGhvbGRpbmcgYmFjayBvdXIgcHJvY2VzcydzIGFkdmVy dGlzZWQgeG1pbjsgaW4gcGFydGljdWxhciwgaWYKQEAgLTE4MDAsNyArMTg2NSw3IEBAIERlZmlu ZUluZGV4KFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAkgKi8KIAlJTkpFQ1RJT05fUE9JTlQoImRlZmlu ZS1pbmRleC1iZWZvcmUtc2V0LXZhbGlkIiwgTlVMTCk7CiAJcGdzdGF0X3Byb2dyZXNzX3VwZGF0 ZV9wYXJhbShQUk9HUkVTU19DUkVBVEVJRFhfUEhBU0UsCi0JCQkJCQkJCSBQUk9HUkVTU19DUkVB VEVJRFhfUEhBU0VfV0FJVF8zKTsKKwkJCQkJCQkJIFBST0dSRVNTX0NSRUFURUlEWF9QSEFTRV9X QUlUXzQpOwogCVdhaXRGb3JPbGRlclNuYXBzaG90cyhsaW1pdFhtaW4sIHRydWUpOwogCiAJLyoK QEAgLTE4MjUsNiArMTg5MCw1MyBAQCBEZWZpbmVJbmRleChQYXJzZVN0YXRlICpwc3RhdGUsCiAJ ICogdG8gcmVwbGFuOyBzbyByZWxjYWNoZSBmbHVzaCBvbiB0aGUgaW5kZXggaXRzZWxmIHdhcyBz dWZmaWNpZW50LikKIAkgKi8KIAlDYWNoZUludmFsaWRhdGVSZWxjYWNoZUJ5UmVsaWQoaGVhcHJl bGlkLnJlbElkKTsKKwlDb21taXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKKwlTdGFydFRyYW5zYWN0 aW9uQ29tbWFuZCgpOworCisJLyogVGVsbCBjb25jdXJyZW50IGluZGV4IGJ1aWxkcyB0byBpZ25v cmUgdXMsIGlmIGluZGV4IHF1YWxpZmllcyAqLworCWlmIChzYWZlX2luZGV4KQorCQlzZXRfaW5k ZXhzYWZlX3Byb2NmbGFncygpOworCisJcGdzdGF0X3Byb2dyZXNzX3VwZGF0ZV9wYXJhbShQUk9H UkVTU19DUkVBVEVJRFhfUEhBU0UsCisJCQkJCQkJIFBST0dSRVNTX0NSRUFURUlEWF9QSEFTRV9X QUlUXzUpOworCS8qIE5vdyB3YWl0IGZvciBhbGwgdHJhbnNhY3Rpb24gdG8gc2VlIGF1eGlsaWFy eSBhcyAibm9uLXJlYWR5IGZvciBpbnNlcnRzIiAqLworCVdhaXRGb3JMb2NrZXJzKGhlYXBsb2Nr dGFnLCBBY2Nlc3NFeGNsdXNpdmVMb2NrLCB0cnVlKTsKKworCUNvbW1pdFRyYW5zYWN0aW9uQ29t bWFuZCgpOworCVN0YXJ0VHJhbnNhY3Rpb25Db21tYW5kKCk7CisKKwkvKgorCSAqIFVwZGF0aW5n IHBnX2luZGV4IG1pZ2h0IGludm9sdmUgVE9BU1QgdGFibGUgYWNjZXNzLCBzbyBlbnN1cmUgd2UK KwkgKiBoYXZlIGEgdmFsaWQgc25hcHNob3QuCisJICovCisJUHVzaEFjdGl2ZVNuYXBzaG90KEdl dFRyYW5zYWN0aW9uU25hcHNob3QoKSk7CisJLyogTm93IGl0IGlzIHRpbWUgdG8gbWFyayBhdXhp bGlhcnkgaW5kZXggYXMgZGVhZCAqLworCWluZGV4X2NvbmN1cnJlbnRseV9zZXRfZGVhZCh0YWJs ZUlkLCBhdXhJbmRleFJlbGF0aW9uSWQpOworCVBvcEFjdGl2ZVNuYXBzaG90KCk7CisKKwlDb21t aXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKKwlTdGFydFRyYW5zYWN0aW9uQ29tbWFuZCgpOworCisJ LyogVGVsbCBjb25jdXJyZW50IGluZGV4IGJ1aWxkcyB0byBpZ25vcmUgdXMsIGlmIGluZGV4IHF1 YWxpZmllcyAqLworCWlmIChzYWZlX2luZGV4KQorCQlzZXRfaW5kZXhzYWZlX3Byb2NmbGFncygp OworCisJcGdzdGF0X3Byb2dyZXNzX3VwZGF0ZV9wYXJhbShQUk9HUkVTU19DUkVBVEVJRFhfUEhB U0UsCisJCQkJCQkJIFBST0dSRVNTX0NSRUFURUlEWF9QSEFTRV9XQUlUXzYpOworCS8qIE5vdyB3 YWl0IGZvciBhbGwgdHJhbnNhY3Rpb24gdG8gaWdub3JlIGF1eGlsaWFyeSBiZWNhdXNlIGl0IGlz IGRlYWQgKi8KKwlXYWl0Rm9yTG9ja2VycyhoZWFwbG9ja3RhZywgQWNjZXNzRXhjbHVzaXZlTG9j aywgdHJ1ZSk7CisKKwlDb21taXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKKwlTdGFydFRyYW5zYWN0 aW9uQ29tbWFuZCgpOworCisJLyoKKwkgKiBEcm9wIGF1eGlsaWFyeSBpbmRleC4KKwkgKgorCSAq IFVzZSBQRVJGT1JNX0RFTEVUSU9OX0NPTkNVUlJFTlRfTE9DSyBzbyB0aGF0IGluZGV4X2Ryb3Ao KSB1c2VzIHRoZQorCSAqIHJpZ2h0IGxvY2sgbGV2ZWwuCisJICovCisJcGVyZm9ybURlbGV0aW9u KCZhdXhBZGRyZXNzLCBEUk9QX1JFU1RSSUNULAorCQkJCQkJCSBQRVJGT1JNX0RFTEVUSU9OX0NP TkNVUlJFTlRfTE9DSyB8IFBFUkZPUk1fREVMRVRJT05fSU5URVJOQUwpOwogCiAJLyoKIAkgKiBM YXN0IHRoaW5nIHRvIGRvIGlzIHJlbGVhc2UgdGhlIHNlc3Npb24tbGV2ZWwgbG9jayBvbiB0aGUg cGFyZW50IHRhYmxlLgpAQCAtMzU5Niw2ICszNzA4LDcgQEAgUmVpbmRleFJlbGF0aW9uQ29uY3Vy cmVudGx5KGNvbnN0IFJlaW5kZXhTdG10ICpzdG10LCBPaWQgcmVsYXRpb25PaWQsIGNvbnN0IFJl aW4KIAl0eXBlZGVmIHN0cnVjdCBSZWluZGV4SW5kZXhJbmZvCiAJewogCQlPaWQJCQlpbmRleElk OworCQlPaWQJCQlhdXhJbmRleElkOwogCQlPaWQJCQl0YWJsZUlkOwogCQlPaWQJCQlhbUlkOwog CQlib29sCQlzYWZlOwkJLyogZm9yIHNldF9pbmRleHNhZmVfcHJvY2ZsYWdzICovCkBAIC0zNzAx LDggKzM4MTQsMTUgQEAgUmVpbmRleFJlbGF0aW9uQ29uY3VycmVudGx5KGNvbnN0IFJlaW5kZXhT dG10ICpzdG10LCBPaWQgcmVsYXRpb25PaWQsIGNvbnN0IFJlaW4KIAkJCQkJT2lkCQkJY2VsbE9p ZCA9IGxmaXJzdF9vaWQobGMpOwogCQkJCQlSZWxhdGlvbglpbmRleFJlbGF0aW9uID0gaW5kZXhf b3BlbihjZWxsT2lkLAogCQkJCQkJCQkJCQkJCQkgICBTaGFyZVVwZGF0ZUV4Y2x1c2l2ZUxvY2sp OworCQkJCQlJbmRleEluZm8qCWluZGV4SW5mbyA9IEJ1aWxkRHVtbXlJbmRleEluZm8oaW5kZXhS ZWxhdGlvbik7CiAKLQkJCQkJaWYgKCFpbmRleFJlbGF0aW9uLT5yZF9pbmRleC0+aW5kaXN2YWxp ZCkKKworCQkJCQlpZiAoaW5kZXhJbmZvLT5paV9BdXhpbGlhcnkpCisJCQkJCQllcmVwb3J0KFdB Uk5JTkcsKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAorCQkJCQkJCSBl cnJtc2coInNraXBwaW5nIHJlaW5kZXggb2YgYXV4aWxpYXJ5IGluZGV4IFwiJXMuJXNcIiIsCisJ CQkJCQkJCQlnZXRfbmFtZXNwYWNlX25hbWUoZ2V0X3JlbF9uYW1lc3BhY2UoY2VsbE9pZCkpLAor CQkJCQkJCQkJZ2V0X3JlbF9uYW1lKGNlbGxPaWQpKSkpOworCQkJCQllbHNlIGlmICghaW5kZXhS ZWxhdGlvbi0+cmRfaW5kZXgtPmluZGlzdmFsaWQpCiAJCQkJCQllcmVwb3J0KFdBUk5JTkcsCiAJ CQkJCQkJCShlcnJjb2RlKEVSUkNPREVfT0JKRUNUX05PVF9JTl9QUkVSRVFVSVNJVEVfU1RBVEUp LAogCQkJCQkJCQkgZXJybXNnKCJza2lwcGluZyByZWluZGV4IG9mIGludmFsaWQgaW5kZXggXCIl cy4lc1wiIiwKQEAgLTM3NTQsOCArMzg3NCwxNSBAQCBSZWluZGV4UmVsYXRpb25Db25jdXJyZW50 bHkoY29uc3QgUmVpbmRleFN0bXQgKnN0bXQsIE9pZCByZWxhdGlvbk9pZCwgY29uc3QgUmVpbgog CQkJCQkJT2lkCQkJY2VsbE9pZCA9IGxmaXJzdF9vaWQobGMyKTsKIAkJCQkJCVJlbGF0aW9uCWlu ZGV4UmVsYXRpb24gPSBpbmRleF9vcGVuKGNlbGxPaWQsCiAJCQkJCQkJCQkJCQkJCQkgICBTaGFy ZVVwZGF0ZUV4Y2x1c2l2ZUxvY2spOworCQkJCQkJSW5kZXhJbmZvKglpbmRleEluZm8gPSBCdWls ZER1bW15SW5kZXhJbmZvKGluZGV4UmVsYXRpb24pOwogCi0JCQkJCQlpZiAoIWluZGV4UmVsYXRp b24tPnJkX2luZGV4LT5pbmRpc3ZhbGlkKQorCQkJCQkJaWYgKGluZGV4SW5mby0+aWlfQXV4aWxp YXJ5KQorCQkJCQkJCWVyZXBvcnQoV0FSTklORywKKwkJCQkJCQkJCShlcnJjb2RlKEVSUkNPREVf RkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKKwkJCQkJCQkJCSBlcnJtc2coInNraXBwaW5nIHJlaW5k ZXggb2YgYXV4aWxpYXJ5IGluZGV4IFwiJXMuJXNcIiIsCisJCQkJCQkJCQkJCWdldF9uYW1lc3Bh Y2VfbmFtZShnZXRfcmVsX25hbWVzcGFjZShjZWxsT2lkKSksCisJCQkJCQkJCQkJCWdldF9yZWxf bmFtZShjZWxsT2lkKSkpKTsKKwkJCQkJCWVsc2UgaWYgKCFpbmRleFJlbGF0aW9uLT5yZF9pbmRl eC0+aW5kaXN2YWxpZCkKIAkJCQkJCQllcmVwb3J0KFdBUk5JTkcsCiAJCQkJCQkJCQkoZXJyY29k ZShFUlJDT0RFX09CSkVDVF9OT1RfSU5fUFJFUkVRVUlTSVRFX1NUQVRFKSwKIAkJCQkJCQkJCSBl cnJtc2coInNraXBwaW5nIHJlaW5kZXggb2YgaW52YWxpZCBpbmRleCBcIiVzLiVzXCIiLApAQCAt MzgxNiw2ICszOTQzLDEzIEBAIFJlaW5kZXhSZWxhdGlvbkNvbmN1cnJlbnRseShjb25zdCBSZWlu ZGV4U3RtdCAqc3RtdCwgT2lkIHJlbGF0aW9uT2lkLCBjb25zdCBSZWluCiAJCQkJCQkJKGVycmNv ZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAogCQkJCQkJCSBlcnJtc2coImNhbm5v dCByZWluZGV4IGludmFsaWQgaW5kZXggb24gVE9BU1QgdGFibGUiKSkpOwogCisJCQkJLyogQXV4 aWxpYXJ5IGluZGV4ZXMgYXJlIG5vdCBhbGxvd2VkIHRvIGJlIHJlYnVpbHQgKi8KKwkJCQlpZiAo Z2V0X3JlbF9yZWxhbShyZWxhdGlvbk9pZCkgPT0gU1RJUl9BTV9PSUQpCisJCQkJCWVyZXBvcnQo RVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCisJ CQkJCQkgZXJybXNnKCJyZWluZGV4IG9mIGF1eGlsaWFyeSBpbmRleCBcIiVzXCIgbm90IHN1cHBv cnRlZCIsCisJCQkJCQkJCWdldF9yZWxfbmFtZShyZWxhdGlvbk9pZCkpKSk7CisKIAkJCQkvKgog CQkJCSAqIENoZWNrIGlmIHBhcmVudCByZWxhdGlvbiBjYW4gYmUgbG9ja2VkIGFuZCBpZiBpdCBl eGlzdHMsCiAJCQkJICogdGhpcyBuZWVkcyB0byBiZSBkb25lIGF0IHRoaXMgc3RhZ2UgYXMgdGhl IGxpc3Qgb2YgaW5kZXhlcwpAQCAtMzkxOSwxNSArNDA1MywxOCBAQCBSZWluZGV4UmVsYXRpb25D b25jdXJyZW50bHkoY29uc3QgUmVpbmRleFN0bXQgKnN0bXQsIE9pZCByZWxhdGlvbk9pZCwgY29u c3QgUmVpbgogCWZvcmVhY2gobGMsIGluZGV4SWRzKQogCXsKIAkJY2hhcgkgICAqY29uY3VycmVu dE5hbWU7CisJCWNoYXIJICAgKmF1eENvbmN1cnJlbnROYW1lOwogCQlSZWluZGV4SW5kZXhJbmZv ICppZHggPSBsZmlyc3QobGMpOwogCQlSZWluZGV4SW5kZXhJbmZvICpuZXdpZHg7CiAJCU9pZAkJ CW5ld0luZGV4SWQ7CisJCU9pZAkJCWF1eEluZGV4SWQ7CiAJCVJlbGF0aW9uCWluZGV4UmVsOwog CQlSZWxhdGlvbgloZWFwUmVsOwogCQlPaWQJCQlzYXZlX3VzZXJpZDsKIAkJaW50CQkJc2F2ZV9z ZWNfY29udGV4dDsKIAkJaW50CQkJc2F2ZV9uZXN0bGV2ZWw7CiAJCVJlbGF0aW9uCW5ld0luZGV4 UmVsOworCQlSZWxhdGlvbglhdXhJbmRleFJlbDsKIAkJTG9ja1JlbElkICAqbG9ja3JlbGlkOwog CQlPaWQJCQl0YWJsZXNwYWNlaWQ7CiAKQEAgLTM5NzgsNiArNDExNSwxMSBAQCBSZWluZGV4UmVs YXRpb25Db25jdXJyZW50bHkoY29uc3QgUmVpbmRleFN0bXQgKnN0bXQsIE9pZCByZWxhdGlvbk9p ZCwgY29uc3QgUmVpbgogCQkJCQkJCQkJCQkiY2NuZXciLAogCQkJCQkJCQkJCQlnZXRfcmVsX25h bWVzcGFjZShpbmRleFJlbC0+cmRfaW5kZXgtPmluZHJlbGlkKSwKIAkJCQkJCQkJCQkJZmFsc2Up OworCQlhdXhDb25jdXJyZW50TmFtZSA9IENob29zZVJlbGF0aW9uTmFtZShnZXRfcmVsX25hbWUo aWR4LT5pbmRleElkKSwKKwkJCQkJCQkJCQkJTlVMTCwKKwkJCQkJCQkJCQkJImNjYXV4IiwKKwkJ CQkJCQkJCQkJZ2V0X3JlbF9uYW1lc3BhY2UoaW5kZXhSZWwtPnJkX2luZGV4LT5pbmRyZWxpZCks CisJCQkJCQkJCQkJCWZhbHNlKTsKIAogCQkvKiBDaG9vc2UgdGhlIG5ldyB0YWJsZXNwYWNlLCBp bmRleGVzIG9mIHRvYXN0IHRhYmxlcyBhcmUgbm90IG1vdmVkICovCiAJCWlmIChPaWRJc1ZhbGlk KHBhcmFtcy0+dGFibGVzcGFjZU9pZCkgJiYKQEAgLTM5OTEsMTIgKzQxMzMsMTcgQEAgUmVpbmRl eFJlbGF0aW9uQ29uY3VycmVudGx5KGNvbnN0IFJlaW5kZXhTdG10ICpzdG10LCBPaWQgcmVsYXRp b25PaWQsIGNvbnN0IFJlaW4KIAkJCQkJCQkJCQkJCQlpZHgtPmluZGV4SWQsCiAJCQkJCQkJCQkJ CQkJdGFibGVzcGFjZWlkLAogCQkJCQkJCQkJCQkJCWNvbmN1cnJlbnROYW1lKTsKKwkJYXV4SW5k ZXhJZCA9IGluZGV4X2NvbmN1cnJlbnRseV9jcmVhdGVfYXV4KGhlYXBSZWwsCisJCQkJCQkJCQkJ CQkgICBuZXdJbmRleElkLAorCQkJCQkJCQkJCQkJICAgdGFibGVzcGFjZWlkLAorCQkJCQkJCQkJ CQkJICAgYXV4Q29uY3VycmVudE5hbWUpOwogCiAJCS8qCiAJCSAqIE5vdyBvcGVuIHRoZSByZWxh dGlvbiBvZiB0aGUgbmV3IGluZGV4LCBhIHNlc3Npb24tbGV2ZWwgbG9jayBpcwogCQkgKiBhbHNv IG5lZWRlZCBvbiBpdC4KIAkJICovCiAJCW5ld0luZGV4UmVsID0gaW5kZXhfb3BlbihuZXdJbmRl eElkLCBTaGFyZVVwZGF0ZUV4Y2x1c2l2ZUxvY2spOworCQlhdXhJbmRleFJlbCA9IGluZGV4X29w ZW4oYXV4SW5kZXhJZCwgU2hhcmVVcGRhdGVFeGNsdXNpdmVMb2NrKTsKIAogCQkvKgogCQkgKiBT YXZlIHRoZSBsaXN0IG9mIE9JRHMgYW5kIGxvY2tzIGluIHByaXZhdGUgY29udGV4dApAQCAtNDAw NSw2ICs0MTUyLDcgQEAgUmVpbmRleFJlbGF0aW9uQ29uY3VycmVudGx5KGNvbnN0IFJlaW5kZXhT dG10ICpzdG10LCBPaWQgcmVsYXRpb25PaWQsIGNvbnN0IFJlaW4KIAogCQluZXdpZHggPSBwYWxs b2Nfb2JqZWN0KFJlaW5kZXhJbmRleEluZm8pOwogCQluZXdpZHgtPmluZGV4SWQgPSBuZXdJbmRl eElkOworCQluZXdpZHgtPmF1eEluZGV4SWQgPSBhdXhJbmRleElkOwogCQluZXdpZHgtPnNhZmUg PSBpZHgtPnNhZmU7CiAJCW5ld2lkeC0+dGFibGVJZCA9IGlkeC0+dGFibGVJZDsKIAkJbmV3aWR4 LT5hbUlkID0gaWR4LT5hbUlkOwpAQCAtNDAyMywxMCArNDE3MSwxNCBAQCBSZWluZGV4UmVsYXRp b25Db25jdXJyZW50bHkoY29uc3QgUmVpbmRleFN0bXQgKnN0bXQsIE9pZCByZWxhdGlvbk9pZCwg Y29uc3QgUmVpbgogCQlsb2NrcmVsaWQgPSBwYWxsb2Nfb2JqZWN0KExvY2tSZWxJZCk7CiAJCSps b2NrcmVsaWQgPSBuZXdJbmRleFJlbC0+cmRfbG9ja0luZm8ubG9ja1JlbElkOwogCQlyZWxhdGlv bkxvY2tzID0gbGFwcGVuZChyZWxhdGlvbkxvY2tzLCBsb2NrcmVsaWQpOworCQlsb2NrcmVsaWQg PSBwYWxsb2Nfb2JqZWN0KExvY2tSZWxJZCk7CisJCSpsb2NrcmVsaWQgPSBhdXhJbmRleFJlbC0+ cmRfbG9ja0luZm8ubG9ja1JlbElkOworCQlyZWxhdGlvbkxvY2tzID0gbGFwcGVuZChyZWxhdGlv bkxvY2tzLCBsb2NrcmVsaWQpOwogCiAJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0 KTsKIAogCQlpbmRleF9jbG9zZShpbmRleFJlbCwgTm9Mb2NrKTsKKwkJaW5kZXhfY2xvc2UoYXV4 SW5kZXhSZWwsIE5vTG9jayk7CiAJCWluZGV4X2Nsb3NlKG5ld0luZGV4UmVsLCBOb0xvY2spOwog CiAJCS8qIFJvbGwgYmFjayBhbnkgR1VDIGNoYW5nZXMgZXhlY3V0ZWQgYnkgaW5kZXggZnVuY3Rp b25zICovCkBAIC00MTA3LDEzICs0MjU5LDYwIEBAIFJlaW5kZXhSZWxhdGlvbkNvbmN1cnJlbnRs eShjb25zdCBSZWluZGV4U3RtdCAqc3RtdCwgT2lkIHJlbGF0aW9uT2lkLCBjb25zdCBSZWluCiAJ ICogZG9pbmcgdGhhdCwgd2FpdCB1bnRpbCBubyBydW5uaW5nIHRyYW5zYWN0aW9ucyBjb3VsZCBo YXZlIHRoZSB0YWJsZSBvZgogCSAqIHRoZSBpbmRleCBvcGVuIHdpdGggdGhlIG9sZCBsaXN0IG9m IGluZGV4ZXMuICBTZWUgInBoYXNlIDIiIGluCiAJICogRGVmaW5lSW5kZXgoKSBmb3IgbW9yZSBk ZXRhaWxzLgorCSovCisKKwlwZ3N0YXRfcHJvZ3Jlc3NfdXBkYXRlX3BhcmFtKFBST0dSRVNTX0NS RUFURUlEWF9QSEFTRSwKKwkJCQkJCQkgUFJPR1JFU1NfQ1JFQVRFSURYX1BIQVNFX1dBSVRfMSk7 CisJV2FpdEZvckxvY2tlcnNNdWx0aXBsZShsb2NrVGFncywgU2hhcmVMb2NrLCB0cnVlKTsKKwlD b21taXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKKworCS8qCisJICogTm93IGJ1aWxkIGFsbCBhdXhp bGlhcnkgaW5kZXhlcyBhbmQgbWFyayB0aGVtIGFzICJyZWFkeS1mb3ItaW5zZXJ0cyIuCisJICov CisJZm9yZWFjaChsYywgbmV3SW5kZXhJZHMpCisJeworCQlSZWluZGV4SW5kZXhJbmZvICpuZXdp ZHggPSBsZmlyc3QobGMpOworCisJCVN0YXJ0VHJhbnNhY3Rpb25Db21tYW5kKCk7CisKKwkJLyoK KwkJICogQ2hlY2sgZm9yIHVzZXItcmVxdWVzdGVkIGFib3J0LiAgVGhpcyBpcyBpbnNpZGUgYSB0 cmFuc2FjdGlvbiBzbyBhcworCQkgKiB4YWN0LmMgZG9lcyBub3QgaXNzdWUgYSB1c2VsZXNzIFdB Uk5JTkcsIGFuZCBlbnN1cmVzIHRoYXQKKwkJICogc2Vzc2lvbi1sZXZlbCBsb2NrcyBhcmUgY2xl YW5lZCB1cCBvbiBhYm9ydC4KKwkJICovCisJCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CisKKwkJ LyogVGVsbCBjb25jdXJyZW50IGluZGV4aW5nIHRvIGlnbm9yZSB1cywgaWYgaW5kZXggcXVhbGlm aWVzICovCisJCWlmIChuZXdpZHgtPnNhZmUpCisJCQlzZXRfaW5kZXhzYWZlX3Byb2NmbGFncygp OworCisJCS8qIFNldCBBY3RpdmVTbmFwc2hvdCBzaW5jZSBmdW5jdGlvbnMgaW4gdGhlIGluZGV4 ZXMgbWF5IG5lZWQgaXQgKi8KKwkJUHVzaEFjdGl2ZVNuYXBzaG90KEdldFRyYW5zYWN0aW9uU25h cHNob3QoKSk7CisKKwkJLyogQnVpbGQgYXV4aWxpYXJ5IGluZGV4LCBpdCBpcyBmYXN0IC0gd2l0 aG91dCBhbnkgYWN0dWFsIGhlYXAgc2NhbiwganVzdCBhbiBlbXB0eSBpbmRleC4gKi8KKwkJaW5k ZXhfY29uY3VycmVudGx5X2J1aWxkKG5ld2lkeC0+dGFibGVJZCwgbmV3aWR4LT5hdXhJbmRleElk KTsKKworCQlQb3BBY3RpdmVTbmFwc2hvdCgpOworCQlDb21taXRUcmFuc2FjdGlvbkNvbW1hbmQo KTsKKwl9CisKKwlTdGFydFRyYW5zYWN0aW9uQ29tbWFuZCgpOworCisJLyoKKwkgKiBCZWNhdXNl IHdlIGRvbid0IHRha2UgYSBzbmFwc2hvdCBpbiB0aGlzIHRyYW5zYWN0aW9uLCB0aGVyZSdzIG5v IG5lZWQKKwkgKiB0byBzZXQgdGhlIFBST0NfSU5fU0FGRV9JQyBmbGFnIGhlcmUuCiAJICovCiAK IAlwZ3N0YXRfcHJvZ3Jlc3NfdXBkYXRlX3BhcmFtKFBST0dSRVNTX0NSRUFURUlEWF9QSEFTRSwK LQkJCQkJCQkJIFBST0dSRVNTX0NSRUFURUlEWF9QSEFTRV9XQUlUXzEpOworCQkJCQkJCQkgUFJP R1JFU1NfQ1JFQVRFSURYX1BIQVNFX1dBSVRfMik7CisJLyoKKwkgKiBXYWl0IHVudGlsIGFsbCBh dXhpbGlhcnkgaW5kZXhlcyBhcmUgdGFrZW4gaW50byBhY2NvdW50IGJ5IGFsbAorCSAqIHRyYW5z YWN0aW9ucy4KKwkgKi8KIAlXYWl0Rm9yTG9ja2Vyc011bHRpcGxlKGxvY2tUYWdzLCBTaGFyZUxv Y2ssIHRydWUpOwogCUNvbW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgpOwogCisJLyogTm93IGl0IGlz IHRpbWUgdG8gcGVyZm9ybSB0YXJnZXQgaW5kZXggYnVpbGQuICovCiAJZm9yZWFjaChsYywgbmV3 SW5kZXhJZHMpCiAJewogCQlSZWluZGV4SW5kZXhJbmZvICpuZXdpZHggPSBsZmlyc3QobGMpOwpA QCAtNDE2MCw2ICs0MzU5LDQxIEBAIFJlaW5kZXhSZWxhdGlvbkNvbmN1cnJlbnRseShjb25zdCBS ZWluZGV4U3RtdCAqc3RtdCwgT2lkIHJlbGF0aW9uT2lkLCBjb25zdCBSZWluCiAJICogbmVlZCB0 byBzZXQgdGhlIFBST0NfSU5fU0FGRV9JQyBmbGFnIGhlcmUuCiAJICovCiAKKwlwZ3N0YXRfcHJv Z3Jlc3NfdXBkYXRlX3BhcmFtKFBST0dSRVNTX0NSRUFURUlEWF9QSEFTRSwKKwkJCQkJCQkJIFBS T0dSRVNTX0NSRUFURUlEWF9QSEFTRV9XQUlUXzMpOworCVdhaXRGb3JMb2NrZXJzTXVsdGlwbGUo bG9ja1RhZ3MsIFNoYXJlTG9jaywgdHJ1ZSk7CisJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7 CisKKwkvKgorCSAqIEF0IHRoaXMgbW9tZW50IGFsbCB0YXJnZXQgaW5kZXhlcyBhcmUgbWFya2Vk IGFzICJyZWFkeS10by1pbnNlcnQiLiBTbywKKwkgKiB3ZSBhcmUgZnJlZSB0byBzdGFydCBwcm9j ZXNzIG9mIGRyb3BwaW5nIGF1eGlsaWFyeSBpbmRleGVzLgorCSAqLworCWZvcmVhY2gobGMsIG5l d0luZGV4SWRzKQorCXsKKwkJUmVpbmRleEluZGV4SW5mbyAqbmV3aWR4ID0gbGZpcnN0KGxjKTsK KwkJU3RhcnRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKKwkJLyoKKwkJICogQ2hlY2sgZm9yIHVzZXIt cmVxdWVzdGVkIGFib3J0LiAgVGhpcyBpcyBpbnNpZGUgYSB0cmFuc2FjdGlvbiBzbyBhcworCQkg KiB4YWN0LmMgZG9lcyBub3QgaXNzdWUgYSB1c2VsZXNzIFdBUk5JTkcsIGFuZCBlbnN1cmVzIHRo YXQKKwkJICogc2Vzc2lvbi1sZXZlbCBsb2NrcyBhcmUgY2xlYW5lZCB1cCBvbiBhYm9ydC4KKwkJ ICovCisJCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CisKKwkJLyogVGVsbCBjb25jdXJyZW50IGlu ZGV4aW5nIHRvIGlnbm9yZSB1cywgaWYgaW5kZXggcXVhbGlmaWVzICovCisJCWlmIChuZXdpZHgt PnNhZmUpCisJCQlzZXRfaW5kZXhzYWZlX3Byb2NmbGFncygpOworCisJCS8qCisJCSAqIFVwZGF0 aW5nIHBnX2luZGV4IG1pZ2h0IGludm9sdmUgVE9BU1QgdGFibGUgYWNjZXNzLCBzbyBlbnN1cmUg d2UKKwkJICogaGF2ZSBhIHZhbGlkIHNuYXBzaG90LgorCQkgKi8KKwkJUHVzaEFjdGl2ZVNuYXBz aG90KEdldFRyYW5zYWN0aW9uU25hcHNob3QoKSk7CisJCWluZGV4X3NldF9zdGF0ZV9mbGFncyhu ZXdpZHgtPmF1eEluZGV4SWQsIElOREVYX0RST1BfQ0xFQVJfUkVBRFkpOworCQlQb3BBY3RpdmVT bmFwc2hvdCgpOworCisJCUNvbW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgpOworCX0KKwogCS8qCiAJ ICogUGhhc2UgMyBvZiBSRUlOREVYIENPTkNVUlJFTlRMWQogCSAqCkBAIC00MTY3LDEyICs0NDAx LDYgQEAgUmVpbmRleFJlbGF0aW9uQ29uY3VycmVudGx5KGNvbnN0IFJlaW5kZXhTdG10ICpzdG10 LCBPaWQgcmVsYXRpb25PaWQsIGNvbnN0IFJlaW4KIAkgKiB3ZXJlIGNyZWF0ZWQgZHVyaW5nIHRo ZSBwcmV2aW91cyBwaGFzZS4gIFNlZSAicGhhc2UgMyIgaW4gRGVmaW5lSW5kZXgoKQogCSAqIGZv ciBtb3JlIGRldGFpbHMuCiAJICovCi0KLQlwZ3N0YXRfcHJvZ3Jlc3NfdXBkYXRlX3BhcmFtKFBS T0dSRVNTX0NSRUFURUlEWF9QSEFTRSwKLQkJCQkJCQkJIFBST0dSRVNTX0NSRUFURUlEWF9QSEFT RV9XQUlUXzIpOwotCVdhaXRGb3JMb2NrZXJzTXVsdGlwbGUobG9ja1RhZ3MsIFNoYXJlTG9jaywg dHJ1ZSk7Ci0JQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7Ci0KIAlmb3JlYWNoKGxjLCBuZXdJ bmRleElkcykKIAl7CiAJCVJlaW5kZXhJbmRleEluZm8gKm5ld2lkeCA9IGxmaXJzdChsYyk7CkBA IC00MjEwLDcgKzQ0MzgsNyBAQCBSZWluZGV4UmVsYXRpb25Db25jdXJyZW50bHkoY29uc3QgUmVp bmRleFN0bXQgKnN0bXQsIE9pZCByZWxhdGlvbk9pZCwgY29uc3QgUmVpbgogCQlwcm9ncmVzc192 YWxzWzNdID0gbmV3aWR4LT5hbUlkOwogCQlwZ3N0YXRfcHJvZ3Jlc3NfdXBkYXRlX211bHRpX3Bh cmFtKDQsIHByb2dyZXNzX2luZGV4LCBwcm9ncmVzc192YWxzKTsKIAotCQl2YWxpZGF0ZV9pbmRl eChuZXdpZHgtPnRhYmxlSWQsIG5ld2lkeC0+aW5kZXhJZCwgc25hcHNob3QpOworCQl2YWxpZGF0 ZV9pbmRleChuZXdpZHgtPnRhYmxlSWQsIG5ld2lkeC0+aW5kZXhJZCwgbmV3aWR4LT5hdXhJbmRl eElkLCBzbmFwc2hvdCk7CiAKIAkJLyoKIAkJICogV2UgY2FuIG5vdyBkbyBhd2F5IHdpdGggb3Vy IGFjdGl2ZSBzbmFwc2hvdCwgd2Ugc3RpbGwgbmVlZCB0byBzYXZlCkBAIC00MjM5LDcgKzQ0Njcs NyBAQCBSZWluZGV4UmVsYXRpb25Db25jdXJyZW50bHkoY29uc3QgUmVpbmRleFN0bXQgKnN0bXQs IE9pZCByZWxhdGlvbk9pZCwgY29uc3QgUmVpbgogCQkgKiB0aGVyZSdzIG5vIG5lZWQgdG8gc2V0 IHRoZSBQUk9DX0lOX1NBRkVfSUMgZmxhZyBoZXJlLgogCQkgKi8KIAkJcGdzdGF0X3Byb2dyZXNz X3VwZGF0ZV9wYXJhbShQUk9HUkVTU19DUkVBVEVJRFhfUEhBU0UsCi0JCQkJCQkJCQkgUFJPR1JF U1NfQ1JFQVRFSURYX1BIQVNFX1dBSVRfMyk7CisJCQkJCQkJCQkgUFJPR1JFU1NfQ1JFQVRFSURY X1BIQVNFX1dBSVRfNCk7CiAJCVdhaXRGb3JPbGRlclNuYXBzaG90cyhsaW1pdFhtaW4sIHRydWUp OwogCiAJCUNvbW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgpOwpAQCAtNDMzMCwxNCArNDU1OCwxNCBA QCBSZWluZGV4UmVsYXRpb25Db25jdXJyZW50bHkoY29uc3QgUmVpbmRleFN0bXQgKnN0bXQsIE9p ZCByZWxhdGlvbk9pZCwgY29uc3QgUmVpbgogCS8qCiAJICogUGhhc2UgNSBvZiBSRUlOREVYIENP TkNVUlJFTlRMWQogCSAqCi0JICogTWFyayB0aGUgb2xkIGluZGV4ZXMgYXMgZGVhZC4gIEZpcnN0 IHdlIG11c3Qgd2FpdCB1bnRpbCBubyBydW5uaW5nCi0JICogdHJhbnNhY3Rpb24gY291bGQgYmUg dXNpbmcgdGhlIGluZGV4IGZvciBhIHF1ZXJ5LiAgU2VlIGFsc28KKwkgKiBNYXJrIHRoZSBvbGQg YW5kIGF1eGlsaWFyeSBpbmRleGVzIGFzIGRlYWQuIEZpcnN0IHdlIG11c3Qgd2FpdCB1bnRpbCBu bworCSAqIHJ1bm5pbmcgdHJhbnNhY3Rpb24gY291bGQgYmUgdXNpbmcgdGhlIGluZGV4IGZvciBh IHF1ZXJ5LiAgU2VlIGFsc28KIAkgKiBpbmRleF9kcm9wKCkgZm9yIG1vcmUgZGV0YWlscy4KIAkg Ki8KIAogCUlOSkVDVElPTl9QT0lOVCgicmVpbmRleC1yZWxhdGlvbi1jb25jdXJyZW50bHktYmVm b3JlLXNldC1kZWFkIiwgTlVMTCk7CiAJcGdzdGF0X3Byb2dyZXNzX3VwZGF0ZV9wYXJhbShQUk9H UkVTU19DUkVBVEVJRFhfUEhBU0UsCi0JCQkJCQkJCSBQUk9HUkVTU19DUkVBVEVJRFhfUEhBU0Vf V0FJVF80KTsKKwkJCQkJCQkJIFBST0dSRVNTX0NSRUFURUlEWF9QSEFTRV9XQUlUXzUpOwogCVdh aXRGb3JMb2NrZXJzTXVsdGlwbGUobG9ja1RhZ3MsIEFjY2Vzc0V4Y2x1c2l2ZUxvY2ssIHRydWUp OwogCiAJZm9yZWFjaChsYywgaW5kZXhJZHMpCkBAIC00MzYyLDYgKzQ1OTAsMjggQEAgUmVpbmRl eFJlbGF0aW9uQ29uY3VycmVudGx5KGNvbnN0IFJlaW5kZXhTdG10ICpzdG10LCBPaWQgcmVsYXRp b25PaWQsIGNvbnN0IFJlaW4KIAkJUG9wQWN0aXZlU25hcHNob3QoKTsKIAl9CiAKKwlmb3JlYWNo KGxjLCBuZXdJbmRleElkcykKKwl7CisJCVJlaW5kZXhJbmRleEluZm8gKm5ld2lkeCA9IGxmaXJz dChsYyk7CisKKwkJLyoKKwkJICogQ2hlY2sgZm9yIHVzZXItcmVxdWVzdGVkIGFib3J0LiAgVGhp cyBpcyBpbnNpZGUgYSB0cmFuc2FjdGlvbiBzbyBhcworCQkgKiB4YWN0LmMgZG9lcyBub3QgaXNz dWUgYSB1c2VsZXNzIFdBUk5JTkcsIGFuZCBlbnN1cmVzIHRoYXQKKwkJICogc2Vzc2lvbi1sZXZl bCBsb2NrcyBhcmUgY2xlYW5lZCB1cCBvbiBhYm9ydC4KKwkJICovCisJCUNIRUNLX0ZPUl9JTlRF UlJVUFRTKCk7CisKKwkJLyoKKwkJICogVXBkYXRpbmcgcGdfaW5kZXggbWlnaHQgaW52b2x2ZSBU T0FTVCB0YWJsZSBhY2Nlc3MsIHNvIGVuc3VyZSB3ZQorCQkgKiBoYXZlIGEgdmFsaWQgc25hcHNo b3QuCisJCSAqLworCQlQdXNoQWN0aXZlU25hcHNob3QoR2V0VHJhbnNhY3Rpb25TbmFwc2hvdCgp KTsKKworCQlpbmRleF9jb25jdXJyZW50bHlfc2V0X2RlYWQobmV3aWR4LT50YWJsZUlkLCBuZXdp ZHgtPmF1eEluZGV4SWQpOworCisJCVBvcEFjdGl2ZVNuYXBzaG90KCk7CisJfQorCiAJLyogQ29t bWl0IHRoaXMgdHJhbnNhY3Rpb24gdG8gbWFrZSB0aGUgdXBkYXRlcyB2aXNpYmxlLiAqLwogCUNv bW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgpOwogCVN0YXJ0VHJhbnNhY3Rpb25Db21tYW5kKCk7CkBA IC00Mzc1LDExICs0NjI1LDExIEBAIFJlaW5kZXhSZWxhdGlvbkNvbmN1cnJlbnRseShjb25zdCBS ZWluZGV4U3RtdCAqc3RtdCwgT2lkIHJlbGF0aW9uT2lkLCBjb25zdCBSZWluCiAJLyoKIAkgKiBQ aGFzZSA2IG9mIFJFSU5ERVggQ09OQ1VSUkVOVExZCiAJICoKLQkgKiBEcm9wIHRoZSBvbGQgaW5k ZXhlcy4KKwkgKiBEcm9wIHRoZSBvbGQgYW5kIGF1eGlsaWFyeSBpbmRleGVzLgogCSAqLwogCiAJ cGdzdGF0X3Byb2dyZXNzX3VwZGF0ZV9wYXJhbShQUk9HUkVTU19DUkVBVEVJRFhfUEhBU0UsCi0J CQkJCQkJCSBQUk9HUkVTU19DUkVBVEVJRFhfUEhBU0VfV0FJVF81KTsKKwkJCQkJCQkJIFBST0dS RVNTX0NSRUFURUlEWF9QSEFTRV9XQUlUXzYpOwogCVdhaXRGb3JMb2NrZXJzTXVsdGlwbGUobG9j a1RhZ3MsIEFjY2Vzc0V4Y2x1c2l2ZUxvY2ssIHRydWUpOwogCiAJUHVzaEFjdGl2ZVNuYXBzaG90 KEdldFRyYW5zYWN0aW9uU25hcHNob3QoKSk7CkBAIC00Mzk5LDYgKzQ2NDksMTggQEAgUmVpbmRl eFJlbGF0aW9uQ29uY3VycmVudGx5KGNvbnN0IFJlaW5kZXhTdG10ICpzdG10LCBPaWQgcmVsYXRp b25PaWQsIGNvbnN0IFJlaW4KIAkJCWFkZF9leGFjdF9vYmplY3RfYWRkcmVzcygmb2JqZWN0LCBv YmplY3RzKTsKIAkJfQogCisJCWZvcmVhY2gobGMsIG5ld0luZGV4SWRzKQorCQl7CisJCQlSZWlu ZGV4SW5kZXhJbmZvICppZHggPSBsZmlyc3QobGMpOworCQkJT2JqZWN0QWRkcmVzcyBvYmplY3Q7 CisKKwkJCW9iamVjdC5jbGFzc0lkID0gUmVsYXRpb25SZWxhdGlvbklkOworCQkJb2JqZWN0Lm9i amVjdElkID0gaWR4LT5hdXhJbmRleElkOworCQkJb2JqZWN0Lm9iamVjdFN1YklkID0gMDsKKwor CQkJYWRkX2V4YWN0X29iamVjdF9hZGRyZXNzKCZvYmplY3QsIG9iamVjdHMpOworCQl9CisKIAkJ LyoKIAkJICogVXNlIFBFUkZPUk1fREVMRVRJT05fQ09OQ1VSUkVOVF9MT0NLIHNvIHRoYXQgaW5k ZXhfZHJvcCgpIHVzZXMgdGhlCiAJCSAqIHJpZ2h0IGxvY2sgbGV2ZWwuCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9ub2Rlcy9tYWtlZnVuY3MuYyBiL3NyYy9iYWNrZW5kL25vZGVzL21ha2VmdW5j cy5jCmluZGV4IDUzNTlkYWIxMTc2Li44NGY3Y2Y5ODI0ZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvbm9kZXMvbWFrZWZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvbm9kZXMvbWFrZWZ1bmNzLmMK QEAgLTgzNCw3ICs4MzQsNyBAQCBJbmRleEluZm8gKgogbWFrZUluZGV4SW5mbyhpbnQgbnVtYXR0 cnMsIGludCBudW1rZXlhdHRycywgT2lkIGFtb2lkLCBMaXN0ICpleHByZXNzaW9ucywKIAkJCSAg TGlzdCAqcHJlZGljYXRlcywgYm9vbCB1bmlxdWUsIGJvb2wgbnVsbHNfbm90X2Rpc3RpbmN0LAog CQkJICBib29sIGlzcmVhZHksIGJvb2wgY29uY3VycmVudCwgYm9vbCBzdW1tYXJpemluZywKLQkJ CSAgYm9vbCB3aXRob3V0b3ZlcmxhcHMpCisJCQkgIGJvb2wgd2l0aG91dG92ZXJsYXBzLCBib29s IGF1eGlsaWFyeSkKIHsKIAlJbmRleEluZm8gICpuID0gbWFrZU5vZGUoSW5kZXhJbmZvKTsKIApA QCAtODUwLDYgKzg1MCw3IEBAIG1ha2VJbmRleEluZm8oaW50IG51bWF0dHJzLCBpbnQgbnVta2V5 YXR0cnMsIE9pZCBhbW9pZCwgTGlzdCAqZXhwcmVzc2lvbnMsCiAJbi0+aWlfQ29uY3VycmVudCA9 IGNvbmN1cnJlbnQ7CiAJbi0+aWlfU3VtbWFyaXppbmcgPSBzdW1tYXJpemluZzsKIAluLT5paV9X aXRob3V0T3ZlcmxhcHMgPSB3aXRob3V0b3ZlcmxhcHM7CisJbi0+aWlfQXV4aWxpYXJ5ID0gYXV4 aWxpYXJ5OwogCiAJLyogc3VtbWFyaXppbmcgaW5kZXhlcyBjYW5ub3QgY29udGFpbiBub24ta2V5 IGF0dHJpYnV0ZXMgKi8KIAlBc3NlcnQoIXN1bW1hcml6aW5nIHx8IChudW1rZXlhdHRycyA9PSBu dW1hdHRycykpOwpAQCAtODc1LDcgKzg3Niw2IEBAIG1ha2VJbmRleEluZm8oaW50IG51bWF0dHJz LCBpbnQgbnVta2V5YXR0cnMsIE9pZCBhbW9pZCwgTGlzdCAqZXhwcmVzc2lvbnMsCiAJLyogaW5p dGlhbGl6ZSBpbmRleC1idWlsZCBzdGF0ZSB0byBkZWZhdWx0ICovCiAJbi0+aWlfQnJva2VuSG90 Q2hhaW4gPSBmYWxzZTsKIAluLT5paV9QYXJhbGxlbFdvcmtlcnMgPSAwOwotCW4tPmlpX0F1eGls aWFyeSA9IGZhbHNlOwogCiAJLyogc2V0IHVwIGZvciBwb3NzaWJsZSB1c2UgYnkgaW5kZXggQU0g Ki8KIAluLT5paV9BbSA9IGFtb2lkOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3Rh YmxlYW0uaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmgKaW5kZXggMDYwODQ3NTIyNDUu LjFhOTk3NTM3ODAwIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oCisr KyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmgKQEAgLTcwNSw3ICs3MDUsOCBAQCB0eXBl ZGVmIHN0cnVjdCBUYWJsZUFtUm91dGluZQogCQkJCQkJCQkJCVJlbGF0aW9uIGluZGV4X3JlbCwK IAkJCQkJCQkJCQlJbmRleEluZm8gKmluZGV4X2luZm8sCiAJCQkJCQkJCQkJU25hcHNob3Qgc25h cHNob3QsCi0JCQkJCQkJCQkJVmFsaWRhdGVJbmRleFN0YXRlICpzdGF0ZSk7CisJCQkJCQkJCQkJ VmFsaWRhdGVJbmRleFN0YXRlICpzdGF0ZSwKKwkJCQkJCQkJCQlWYWxpZGF0ZUluZGV4U3RhdGUg KmF1eF9zdGF0ZSk7CiAKIAogCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTgyNCwxOSArMTgyNSwy NCBAQCB0YWJsZV9pbmRleF9idWlsZF9yYW5nZV9zY2FuKFJlbGF0aW9uIHRhYmxlX3JlbCwKICAq IHRhYmxlX2luZGV4X3ZhbGlkYXRlX3NjYW4gLSBzZWNvbmQgdGFibGUgc2NhbiBmb3IgY29uY3Vy cmVudCBpbmRleCBidWlsZAogICoKICAqIFNlZSB2YWxpZGF0ZV9pbmRleCgpIGZvciBhbiBleHBs YW5hdGlvbi4KKyAqCisgKiBOb3RlOiBpdCBpcyByZXNwb25zaWJpbGl0eSBvZiB0aGF0IGZ1bmN0 aW9uIHRvIGNsb3NlIHNvcnRzdGF0ZXMgaW4KKyAqIGJvdGggYHN0YXRlYCBhbmQgYGF1eHN0YXRl YC4KICAqLwogc3RhdGljIGlubGluZSB2b2lkCiB0YWJsZV9pbmRleF92YWxpZGF0ZV9zY2FuKFJl bGF0aW9uIHRhYmxlX3JlbCwKIAkJCQkJCSAgUmVsYXRpb24gaW5kZXhfcmVsLAogCQkJCQkJICBJ bmRleEluZm8gKmluZGV4X2luZm8sCiAJCQkJCQkgIFNuYXBzaG90IHNuYXBzaG90LAotCQkJCQkJ ICBWYWxpZGF0ZUluZGV4U3RhdGUgKnN0YXRlKQorCQkJCQkJICBWYWxpZGF0ZUluZGV4U3RhdGUg KnN0YXRlLAorCQkJCQkJICBWYWxpZGF0ZUluZGV4U3RhdGUgKmF1eHN0YXRlKQogewogCXRhYmxl X3JlbC0+cmRfdGFibGVhbS0+aW5kZXhfdmFsaWRhdGVfc2Nhbih0YWJsZV9yZWwsCiAJCQkJCQkJ CQkJCSAgIGluZGV4X3JlbCwKIAkJCQkJCQkJCQkJICAgaW5kZXhfaW5mbywKIAkJCQkJCQkJCQkJ ICAgc25hcHNob3QsCi0JCQkJCQkJCQkJCSAgIHN0YXRlKTsKKwkJCQkJCQkJCQkJICAgc3RhdGUs CisJCQkJCQkJCQkJCSAgIGF1eHN0YXRlKTsKIH0KIAogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9jYXRhbG9nL2luZGV4LmggYi9zcmMvaW5jbHVkZS9jYXRhbG9nL2luZGV4LmgKaW5kZXggMzZi NzA2ODkyNTQuLjcyNzk5M2QxYTVhIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL2lu ZGV4LmgKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9pbmRleC5oCkBAIC0zMSw2ICszMSw3IEBA IHR5cGVkZWYgZW51bQogewogCUlOREVYX0NSRUFURV9TRVRfUkVBRFksCiAJSU5ERVhfQ1JFQVRF X1NFVF9WQUxJRCwKKwlJTkRFWF9EUk9QX0NMRUFSX1JFQURZLAogCUlOREVYX0RST1BfQ0xFQVJf VkFMSUQsCiAJSU5ERVhfRFJPUF9TRVRfREVBRCwKIH0gSW5kZXhTdGF0ZUZsYWdzQWN0aW9uOwpA QCAtNzEsNiArNzIsNyBAQCBleHRlcm4gdm9pZCBpbmRleF9jaGVja19wcmltYXJ5X2tleShSZWxh dGlvbiBoZWFwUmVsLAogI2RlZmluZQlJTkRFWF9DUkVBVEVfSUZfTk9UX0VYSVNUUwkJCSgxIDw8 IDQpCiAjZGVmaW5lCUlOREVYX0NSRUFURV9QQVJUSVRJT05FRAkJCSgxIDw8IDUpCiAjZGVmaW5l IElOREVYX0NSRUFURV9JTlZBTElECQkJCSgxIDw8IDYpCisjZGVmaW5lIElOREVYX0NSRUFURV9B VVhJTElBUlkJCQkJKDEgPDwgNykKIAogZXh0ZXJuIE9pZAlpbmRleF9jcmVhdGUoUmVsYXRpb24g aGVhcFJlbGF0aW9uLAogCQkJCQkJIGNvbnN0IGNoYXIgKmluZGV4UmVsYXRpb25OYW1lLApAQCAt MTA2LDYgKzEwOCwxMSBAQCBleHRlcm4gT2lkCWluZGV4X2NvbmN1cnJlbnRseV9jcmVhdGVfY29w eShSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAJCQkJCQkJCQkJICAgT2lkIHRhYmxlc3BhY2VPaWQs CiAJCQkJCQkJCQkJICAgY29uc3QgY2hhciAqbmV3TmFtZSk7CiAKK2V4dGVybiBPaWQJaW5kZXhf Y29uY3VycmVudGx5X2NyZWF0ZV9hdXgoUmVsYXRpb24gaGVhcFJlbGF0aW9uLAorCQkJCQkJCQkJ CSAgT2lkIG1haW5JbmRleElkLAorCQkJCQkJCQkJCSAgT2lkIHRhYmxlc3BhY2VPaWQsCisJCQkJ CQkJCQkJICBjb25zdCBjaGFyICpuZXdOYW1lKTsKKwogZXh0ZXJuIHZvaWQgaW5kZXhfY29uY3Vy cmVudGx5X2J1aWxkKE9pZCBoZWFwUmVsYXRpb25JZCwKIAkJCQkJCQkJCSBPaWQgaW5kZXhSZWxh dGlvbklkKTsKIApAQCAtMTUxLDcgKzE1OCw3IEBAIGV4dGVybiB2b2lkIGluZGV4X2J1aWxkKFJl bGF0aW9uIGhlYXBSZWxhdGlvbiwKIAkJCQkJCWJvb2wgaXNyZWluZGV4LAogCQkJCQkJYm9vbCBw YXJhbGxlbCk7CiAKLWV4dGVybiB2b2lkIHZhbGlkYXRlX2luZGV4KE9pZCBoZWFwSWQsIE9pZCBp bmRleElkLCBTbmFwc2hvdCBzbmFwc2hvdCk7CitleHRlcm4gdm9pZCB2YWxpZGF0ZV9pbmRleChP aWQgaGVhcElkLCBPaWQgaW5kZXhJZCwgT2lkIGF1eEluZGV4SWQsIFNuYXBzaG90IHNuYXBzaG90 KTsKIAogZXh0ZXJuIHZvaWQgaW5kZXhfc2V0X3N0YXRlX2ZsYWdzKE9pZCBpbmRleElkLCBJbmRl eFN0YXRlRmxhZ3NBY3Rpb24gYWN0aW9uKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY29t bWFuZHMvcHJvZ3Jlc3MuaCBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3Byb2dyZXNzLmgKaW5kZXgg OWM0MDc3MjcwNmMuLjhlNWY5OGM2ZmFkIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jb21tYW5k cy9wcm9ncmVzcy5oCisrKyBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3Byb2dyZXNzLmgKQEAgLTEx NywxNCArMTE3LDE1IEBACiAKIC8qIFBoYXNlcyBvZiBDUkVBVEUgSU5ERVggKGFzIGFkdmVydGlz ZWQgdmlhIFBST0dSRVNTX0NSRUFURUlEWF9QSEFTRSkgKi8KICNkZWZpbmUgUFJPR1JFU1NfQ1JF QVRFSURYX1BIQVNFX1dBSVRfMQkJCTEKLSNkZWZpbmUgUFJPR1JFU1NfQ1JFQVRFSURYX1BIQVNF X0JVSUxECQkJMgotI2RlZmluZSBQUk9HUkVTU19DUkVBVEVJRFhfUEhBU0VfV0FJVF8yCQkJMwot I2RlZmluZSBQUk9HUkVTU19DUkVBVEVJRFhfUEhBU0VfVkFMSURBVEVfSURYU0NBTgk0Ci0jZGVm aW5lIFBST0dSRVNTX0NSRUFURUlEWF9QSEFTRV9WQUxJREFURV9TT1JUCQk1Ci0jZGVmaW5lIFBS T0dSRVNTX0NSRUFURUlEWF9QSEFTRV9WQUxJREFURV9UQUJMRVNDQU4JNgotI2RlZmluZSBQUk9H UkVTU19DUkVBVEVJRFhfUEhBU0VfV0FJVF8zCQkJNworI2RlZmluZSBQUk9HUkVTU19DUkVBVEVJ RFhfUEhBU0VfV0FJVF8yCQkJMgorI2RlZmluZSBQUk9HUkVTU19DUkVBVEVJRFhfUEhBU0VfQlVJ TEQJCQkzCisjZGVmaW5lIFBST0dSRVNTX0NSRUFURUlEWF9QSEFTRV9XQUlUXzMJCQk0CisjZGVm aW5lIFBST0dSRVNTX0NSRUFURUlEWF9QSEFTRV9WQUxJREFURV9JRFhTQ0FOCTUKKyNkZWZpbmUg UFJPR1JFU1NfQ1JFQVRFSURYX1BIQVNFX1ZBTElEQVRFX1NPUlQJCTYKKyNkZWZpbmUgUFJPR1JF U1NfQ1JFQVRFSURYX1BIQVNFX1ZBTElEQVRFX0lEWE1FUkdFCTcKICNkZWZpbmUgUFJPR1JFU1Nf Q1JFQVRFSURYX1BIQVNFX1dBSVRfNAkJCTgKICNkZWZpbmUgUFJPR1JFU1NfQ1JFQVRFSURYX1BI QVNFX1dBSVRfNQkJCTkKKyNkZWZpbmUgUFJPR1JFU1NfQ1JFQVRFSURYX1BIQVNFX1dBSVRfNgkJ CTEwCiAKIC8qCiAgKiBTdWJwaGFzZXMgb2YgQ1JFQVRFIElOREVYLCBmb3IgaW5kZXhfYnVpbGQu CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9tYWtlZnVuY3MuaCBiL3NyYy9pbmNsdWRl L25vZGVzL21ha2VmdW5jcy5oCmluZGV4IGJmNTRkMzlmZWIwLi5jZDdmMWViMDU5MiAxMDA2NDQK LS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvbWFrZWZ1bmNzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9k ZXMvbWFrZWZ1bmNzLmgKQEAgLTk5LDcgKzk5LDggQEAgZXh0ZXJuIEluZGV4SW5mbyAqbWFrZUlu ZGV4SW5mbyhpbnQgbnVtYXR0cnMsIGludCBudW1rZXlhdHRycywgT2lkIGFtb2lkLAogCQkJCQkJ CQlMaXN0ICpleHByZXNzaW9ucywgTGlzdCAqcHJlZGljYXRlcywKIAkJCQkJCQkJYm9vbCB1bmlx dWUsIGJvb2wgbnVsbHNfbm90X2Rpc3RpbmN0LAogCQkJCQkJCQlib29sIGlzcmVhZHksIGJvb2wg Y29uY3VycmVudCwKLQkJCQkJCQkJYm9vbCBzdW1tYXJpemluZywgYm9vbCB3aXRob3V0b3Zlcmxh cHMpOworCQkJCQkJCQlib29sIHN1bW1hcml6aW5nLCBib29sIHdpdGhvdXRvdmVybGFwcywKKwkJ CQkJCQkJYm9vbCBhdXhpbGlhcnkpOwogCiBleHRlcm4gTm9kZSAqbWFrZVN0cmluZ0NvbnN0KGNo YXIgKnN0ciwgaW50IGxvY2F0aW9uKTsKIGV4dGVybiBEZWZFbGVtICptYWtlRGVmRWxlbShjaGFy ICpuYW1lLCBOb2RlICphcmcsIGludCBsb2NhdGlvbik7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9y ZWdyZXNzL2V4cGVjdGVkL2NyZWF0ZV9pbmRleC5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVj dGVkL2NyZWF0ZV9pbmRleC5vdXQKaW5kZXggNTU1MzhjNGM0MWUuLmQxNzIzZjQ3ZTg5IDEwMDY0 NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NyZWF0ZV9pbmRleC5vdXQKKysrIGIv c3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9jcmVhdGVfaW5kZXgub3V0CkBAIC0xNDM3LDYgKzE0 MzcsNyBAQCBERVRBSUw6ICBLZXkgKGYxKT0oYikgYWxyZWFkeSBleGlzdHMuCiBDUkVBVEUgVU5J UVVFIElOREVYIENPTkNVUlJFTlRMWSBjb25jdXJfaW5kZXgzIE9OIGNvbmN1cl9oZWFwKGYyKTsK IEVSUk9SOiAgY291bGQgbm90IGNyZWF0ZSB1bmlxdWUgaW5kZXggImNvbmN1cl9pbmRleDMiCiBE RVRBSUw6ICBLZXkgKGYyKT0oYikgaXMgZHVwbGljYXRlZC4KK0RST1AgSU5ERVggY29uY3VyX2lu ZGV4M19jY2F1eDsKIC0tIHRlc3QgdGhhdCBleHByZXNzaW9uIGluZGV4ZXMgYW5kIHBhcnRpYWwg aW5kZXhlcyB3b3JrIGNvbmN1cnJlbnRseQogQ1JFQVRFIElOREVYIENPTkNVUlJFTlRMWSBjb25j dXJfaW5kZXg0IG9uIGNvbmN1cl9oZWFwKGYyKSBXSEVSRSBmMT0nYSc7CiBDUkVBVEUgSU5ERVgg Q09OQ1VSUkVOVExZIGNvbmN1cl9pbmRleDUgb24gY29uY3VyX2hlYXAoZjIpIFdIRVJFIGYxPSd4 JzsKQEAgLTMyMTEsNiArMzIxMiw3IEBAIElOU0VSVCBJTlRPIGNvbmN1cl9yZWluZGV4X3RhYjQg VkFMVUVTICgxKSwgKDEpLCAoMik7CiBDUkVBVEUgVU5JUVVFIElOREVYIENPTkNVUlJFTlRMWSBj b25jdXJfcmVpbmRleF9pbmQ1IE9OIGNvbmN1cl9yZWluZGV4X3RhYjQgKGMxKTsKIEVSUk9SOiAg Y291bGQgbm90IGNyZWF0ZSB1bmlxdWUgaW5kZXggImNvbmN1cl9yZWluZGV4X2luZDUiCiBERVRB SUw6ICBLZXkgKGMxKT0oMSkgaXMgZHVwbGljYXRlZC4KK0RST1AgSU5ERVggY29uY3VyX3JlaW5k ZXhfaW5kNV9jY2F1eDsKIC0tIFJlaW5kZXhpbmcgY29uY3VycmVudGx5IHRoaXMgaW5kZXggZmFp bHMgd2l0aCB0aGUgc2FtZSBmYWlsdXJlLgogLS0gVGhlIGV4dHJhIGluZGV4IGNyZWF0ZWQgaXMg aXRzZWxmIGludmFsaWQsIGFuZCBjYW4gYmUgZHJvcHBlZC4KIFJFSU5ERVggSU5ERVggQ09OQ1VS UkVOVExZIGNvbmN1cl9yZWluZGV4X2luZDU7CkBAIC0zMjIzLDggKzMyMjUsMTAgQEAgREVUQUlM OiAgS2V5IChjMSk9KDEpIGlzIGR1cGxpY2F0ZWQuCiAgYzEgICAgIHwgaW50ZWdlciB8ICAgICAg ICAgICB8ICAgICAgICAgIHwgCiBJbmRleGVzOgogICAgICJjb25jdXJfcmVpbmRleF9pbmQ1IiBV TklRVUUsIGJ0cmVlIChjMSkgSU5WQUxJRAorICAgICJjb25jdXJfcmVpbmRleF9pbmQ1X2NjYXV4 IiBzdGlyIChjMSkgSU5WQUxJRAogICAgICJjb25jdXJfcmVpbmRleF9pbmQ1X2NjbmV3IiBVTklR VUUsIGJ0cmVlIChjMSkgSU5WQUxJRAogCitEUk9QIElOREVYIGNvbmN1cl9yZWluZGV4X2luZDVf Y2NhdXg7CiBEUk9QIElOREVYIGNvbmN1cl9yZWluZGV4X2luZDVfY2NuZXc7CiAtLSBUaGlzIG1h a2VzIHRoZSBwcmV2aW91cyBmYWlsdXJlIGdvIGF3YXksIHNvIHRoZSBpbmRleCBjYW4gYmVjb21l IHZhbGlkLgogREVMRVRFIEZST00gY29uY3VyX3JlaW5kZXhfdGFiNCBXSEVSRSBjMSA9IDE7CkBA IC0zMjUyLDYgKzMyNTYsNDQgQEAgSW5kZXhlczoKICAgICAiY29uY3VyX3JlaW5kZXhfaW5kNSIg VU5JUVVFLCBidHJlZSAoYzEpCiAKIERST1AgVEFCTEUgY29uY3VyX3JlaW5kZXhfdGFiNDsKKy0t IENoZWNrIGhhbmRsaW5nIG9mIGF1eGlsaWFyeSBpbmRleGVzCitDUkVBVEUgVEFCTEUgYXV4X2lu ZGV4X3RhYjUgKGMxIGludCk7CitJTlNFUlQgSU5UTyBhdXhfaW5kZXhfdGFiNSBWQUxVRVMgKDEp LCAoMSksICgyKTsKKy0tIFRoaXMgdHJpY2sgY3JlYXRlcyBhbiBpbnZhbGlkIGluZGV4IGFuZCBh dXhpbGlhcnkgaW5kZXggZm9yIGl0CitDUkVBVEUgVU5JUVVFIElOREVYIENPTkNVUlJFTlRMWSBh dXhfaW5kZXhfaW5kNiBPTiBhdXhfaW5kZXhfdGFiNSAoYzEpOworRVJST1I6ICBjb3VsZCBub3Qg Y3JlYXRlIHVuaXF1ZSBpbmRleCAiYXV4X2luZGV4X2luZDYiCitERVRBSUw6ICBLZXkgKGMxKT0o MSkgaXMgZHVwbGljYXRlZC4KK1xkIGF1eF9pbmRleF90YWI1CisgICAgICAgICAgIFRhYmxlICJw dWJsaWMuYXV4X2luZGV4X3RhYjUiCisgQ29sdW1uIHwgIFR5cGUgICB8IENvbGxhdGlvbiB8IE51 bGxhYmxlIHwgRGVmYXVsdCAKKy0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0t LS0tKy0tLS0tLS0tLQorIGMxICAgICB8IGludGVnZXIgfCAgICAgICAgICAgfCAgICAgICAgICB8 IAorSW5kZXhlczoKKyAgICAiYXV4X2luZGV4X2luZDYiIFVOSVFVRSwgYnRyZWUgKGMxKSBJTlZB TElECisgICAgImF1eF9pbmRleF9pbmQ2X2NjYXV4IiBzdGlyIChjMSkgSU5WQUxJRAorCistLSBO b3QgYWxsb3dlZCB0byByZWluZGV4IGF1eGlsaWFyeSBpbmRleAorUkVJTkRFWCBJTkRFWCBhdXhf aW5kZXhfaW5kNl9jY2F1eDsKK0VSUk9SOiAgcmVpbmRleCBvZiBhdXhpbGlhcnkgaW5kZXggImF1 eF9pbmRleF9pbmQ2X2NjYXV4IiBub3Qgc3VwcG9ydGVkCistLSBDb25jdXJyZW50bHkgYWxzbwor UkVJTkRFWCBJTkRFWCBDT05DVVJSRU5UTFkgYXV4X2luZGV4X2luZDZfY2NhdXg7CitFUlJPUjog IHJlaW5kZXggb2YgYXV4aWxpYXJ5IGluZGV4ICJhdXhfaW5kZXhfaW5kNl9jY2F1eCIgbm90IHN1 cHBvcnRlZAorLS0gVGhpcyBtYWtlcyB0aGUgcHJldmlvdXMgZmFpbHVyZSBnbyBhd2F5LCBzbyB0 aGUgaW5kZXggY2FuIGJlY29tZSB2YWxpZC4KK0RFTEVURSBGUk9NIGNvbmN1cl9yZWluZGV4X3Rh YjQgV0hFUkUgYzEgPSAxOworRVJST1I6ICByZWxhdGlvbiAiY29uY3VyX3JlaW5kZXhfdGFiNCIg ZG9lcyBub3QgZXhpc3QKK0xJTkUgMTogREVMRVRFIEZST00gY29uY3VyX3JlaW5kZXhfdGFiNCBX SEVSRSBjMSA9IDE7CisgICAgICAgICAgICAgICAgICAgIF4KKy0tIFNob3VsZCBiZSBza2lwcGVk IGR1cmluZyByZWluZGV4CitSRUlOREVYIFRBQkxFIGF1eF9pbmRleF90YWI1OworRVJST1I6ICBj b3VsZCBub3QgY3JlYXRlIHVuaXF1ZSBpbmRleCAiYXV4X2luZGV4X2luZDYiCitERVRBSUw6ICBL ZXkgKGMxKT0oMSkgaXMgZHVwbGljYXRlZC4KKy0tIFNob3VsZCBiZSBza2lwcGVkIGR1cmluZyBj b25jdXJyZW50IHJlaW5kZXgKK1JFSU5ERVggVEFCTEUgQ09OQ1VSUkVOVExZIGF1eF9pbmRleF90 YWI1OworV0FSTklORzogIHNraXBwaW5nIHJlaW5kZXggb2YgaW52YWxpZCBpbmRleCAicHVibGlj LmF1eF9pbmRleF9pbmQ2IgorSElOVDogIFVzZSBEUk9QIElOREVYIG9yIFJFSU5ERVggSU5ERVgu CitXQVJOSU5HOiAgc2tpcHBpbmcgcmVpbmRleCBvZiBhdXhpbGlhcnkgaW5kZXggInB1YmxpYy5h dXhfaW5kZXhfaW5kNl9jY2F1eCIKK05PVElDRTogIHRhYmxlICJhdXhfaW5kZXhfdGFiNSIgaGFz IG5vIGluZGV4ZXMgdGhhdCBjYW4gYmUgcmVpbmRleGVkIGNvbmN1cnJlbnRseQorRFJPUCBUQUJM RSBhdXhfaW5kZXhfdGFiNTsKIC0tIENoZWNrIGhhbmRsaW5nIG9mIGluZGV4ZXMgd2l0aCBleHBy ZXNzaW9ucyBhbmQgcHJlZGljYXRlcy4gIFRoZQogLS0gZGVmaW5pdGlvbnMgb2YgdGhlIHJlYnVp bHQgaW5kZXhlcyBzaG91bGQgbWF0Y2ggdGhlIG9yaWdpbmFsCiAtLSBkZWZpbml0aW9ucy4KZGlm ZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvaW5kZXhpbmcub3V0IGIvc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC9pbmRleGluZy5vdXQKaW5kZXggZGM2Mjk5MjhjOGYuLjliMDZk ZGM4N2EyIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2luZGV4aW5nLm91 dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2luZGV4aW5nLm91dApAQCAtMTU4NSwx MCArMTU4NSwxMSBAQCBzZWxlY3QgaW5kZXhyZWxpZDo6cmVnY2xhc3MsIGluZGlzdmFsaWQsCiAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIHBhcnRlZF9pc3Zh bGlkX2lkeCAgICAgICAgICAgICB8IGYgICAgICAgICAgfCBwYXJ0ZWRfaXN2YWxpZF90YWIgICAg fCAKICBwYXJ0ZWRfaXN2YWxpZF9pZHhfMTEgICAgICAgICAgfCBmICAgICAgICAgIHwgcGFydGVk X2lzdmFsaWRfdGFiXzExIHwgcGFydGVkX2lzdmFsaWRfdGFiXzFfZXhwcl9pZHgKKyBwYXJ0ZWRf aXN2YWxpZF9pZHhfMTFfY2NhdXggICAgfCBmICAgICAgICAgIHwgcGFydGVkX2lzdmFsaWRfdGFi XzExIHwgCiAgcGFydGVkX2lzdmFsaWRfdGFiXzEyX2V4cHJfaWR4IHwgdCAgICAgICAgICB8IHBh cnRlZF9pc3ZhbGlkX3RhYl8xMiB8IHBhcnRlZF9pc3ZhbGlkX3RhYl8xX2V4cHJfaWR4CiAgcGFy dGVkX2lzdmFsaWRfdGFiXzFfZXhwcl9pZHggIHwgZiAgICAgICAgICB8IHBhcnRlZF9pc3ZhbGlk X3RhYl8xICB8IHBhcnRlZF9pc3ZhbGlkX2lkeAogIHBhcnRlZF9pc3ZhbGlkX3RhYl8yX2V4cHJf aWR4ICB8IHQgICAgICAgICAgfCBwYXJ0ZWRfaXN2YWxpZF90YWJfMiAgfCBwYXJ0ZWRfaXN2YWxp ZF9pZHgKLSg1IHJvd3MpCisoNiByb3dzKQogCiBkcm9wIHRhYmxlIHBhcnRlZF9pc3ZhbGlkX3Rh YjsKIC0tIENoZWNrIHN0YXRlIG9mIHJlcGxpY2EgaW5kZXhlcyB3aGVuIGF0dGFjaGluZyBhIHBh cnRpdGlvbi4KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcnVsZXMub3V0 IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9ydWxlcy5vdXQKaW5kZXggMzJiZWE1OGRiMmMu LmI4MGQ1YzJlZDY1IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3J1bGVz Lm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3J1bGVzLm91dApAQCAtMjA1OCwx NCArMjA1OCwxNSBAQCBwZ19zdGF0X3Byb2dyZXNzX2NyZWF0ZV9pbmRleHwgU0VMRUNUIHMucGlk LAogICAgICAgICBDQVNFIHMucGFyYW0xMAogICAgICAgICAgICAgV0hFTiAwIFRIRU4gJ2luaXRp YWxpemluZyc6OnRleHQKICAgICAgICAgICAgIFdIRU4gMSBUSEVOICd3YWl0aW5nIGZvciB3cml0 ZXJzIGJlZm9yZSBidWlsZCc6OnRleHQKLSAgICAgICAgICAgIFdIRU4gMiBUSEVOICgnYnVpbGRp bmcgaW5kZXgnOjp0ZXh0IHx8IENPQUxFU0NFKCgnOiAnOjp0ZXh0IHx8IHBnX2luZGV4YW1fcHJv Z3Jlc3NfcGhhc2VuYW1lKChzLnBhcmFtOSk6Om9pZCwgcy5wYXJhbTExKSksICcnOjp0ZXh0KSkK LSAgICAgICAgICAgIFdIRU4gMyBUSEVOICd3YWl0aW5nIGZvciB3cml0ZXJzIGJlZm9yZSB2YWxp ZGF0aW9uJzo6dGV4dAotICAgICAgICAgICAgV0hFTiA0IFRIRU4gJ2luZGV4IHZhbGlkYXRpb246 IHNjYW5uaW5nIGluZGV4Jzo6dGV4dAotICAgICAgICAgICAgV0hFTiA1IFRIRU4gJ2luZGV4IHZh bGlkYXRpb246IHNvcnRpbmcgdHVwbGVzJzo6dGV4dAotICAgICAgICAgICAgV0hFTiA2IFRIRU4g J2luZGV4IHZhbGlkYXRpb246IHNjYW5uaW5nIHRhYmxlJzo6dGV4dAotICAgICAgICAgICAgV0hF TiA3IFRIRU4gJ3dhaXRpbmcgZm9yIG9sZCBzbmFwc2hvdHMnOjp0ZXh0Ci0gICAgICAgICAgICBX SEVOIDggVEhFTiAnd2FpdGluZyBmb3IgcmVhZGVycyBiZWZvcmUgbWFya2luZyBkZWFkJzo6dGV4 dAotICAgICAgICAgICAgV0hFTiA5IFRIRU4gJ3dhaXRpbmcgZm9yIHJlYWRlcnMgYmVmb3JlIGRy b3BwaW5nJzo6dGV4dAorICAgICAgICAgICAgV0hFTiAyIFRIRU4gJ3dhaXRpbmcgZm9yIHdyaXRl cnMgdG8gdXNlIGF1eGlsaWFyeSBpbmRleCc6OnRleHQKKyAgICAgICAgICAgIFdIRU4gMyBUSEVO ICgnYnVpbGRpbmcgaW5kZXgnOjp0ZXh0IHx8IENPQUxFU0NFKCgnOiAnOjp0ZXh0IHx8IHBnX2lu ZGV4YW1fcHJvZ3Jlc3NfcGhhc2VuYW1lKChzLnBhcmFtOSk6Om9pZCwgcy5wYXJhbTExKSksICcn Ojp0ZXh0KSkKKyAgICAgICAgICAgIFdIRU4gNCBUSEVOICd3YWl0aW5nIGZvciB3cml0ZXJzIGJl Zm9yZSB2YWxpZGF0aW9uJzo6dGV4dAorICAgICAgICAgICAgV0hFTiA1IFRIRU4gJ2luZGV4IHZh bGlkYXRpb246IHNjYW5uaW5nIGluZGV4Jzo6dGV4dAorICAgICAgICAgICAgV0hFTiA2IFRIRU4g J2luZGV4IHZhbGlkYXRpb246IHNvcnRpbmcgdHVwbGVzJzo6dGV4dAorICAgICAgICAgICAgV0hF TiA3IFRIRU4gJ2luZGV4IHZhbGlkYXRpb246IG1lcmdpbmcgaW5kZXhlcyc6OnRleHQKKyAgICAg ICAgICAgIFdIRU4gOCBUSEVOICd3YWl0aW5nIGZvciBvbGQgc25hcHNob3RzJzo6dGV4dAorICAg ICAgICAgICAgV0hFTiA5IFRIRU4gJ3dhaXRpbmcgZm9yIHJlYWRlcnMgYmVmb3JlIG1hcmtpbmcg ZGVhZCc6OnRleHQKKyAgICAgICAgICAgIFdIRU4gMTAgVEhFTiAnd2FpdGluZyBmb3IgcmVhZGVy cyBiZWZvcmUgZHJvcHBpbmcnOjp0ZXh0CiAgICAgICAgICAgICBFTFNFIE5VTEw6OnRleHQKICAg ICAgICAgRU5EIEFTIHBoYXNlLAogICAgIHMucGFyYW00IEFTIGxvY2tlcnNfdG90YWwsCmRpZmYg LS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9jcmVhdGVfaW5kZXguc3FsIGIvc3JjL3Rlc3Qv cmVncmVzcy9zcWwvY3JlYXRlX2luZGV4LnNxbAppbmRleCA4MmU0MDYyYTIxNS4uYzJjMWIwMzE1 MjcgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2NyZWF0ZV9pbmRleC5zcWwKKysr IGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvY3JlYXRlX2luZGV4LnNxbApAQCAtNTAzLDYgKzUwMyw3 IEBAIENSRUFURSBVTklRVUUgSU5ERVggQ09OQ1VSUkVOVExZIElGIE5PVCBFWElTVFMgY29uY3Vy X2luZGV4MiBPTiBjb25jdXJfaGVhcChmMSk7CiBJTlNFUlQgSU5UTyBjb25jdXJfaGVhcCBWQUxV RVMgKCdiJywneCcpOwogLS0gY2hlY2sgaWYgY29uc3RyYWludCBpcyBlbmZvcmNlZCBwcm9wZXJs eSBhdCBidWlsZCB0aW1lCiBDUkVBVEUgVU5JUVVFIElOREVYIENPTkNVUlJFTlRMWSBjb25jdXJf aW5kZXgzIE9OIGNvbmN1cl9oZWFwKGYyKTsKK0RST1AgSU5ERVggY29uY3VyX2luZGV4M19jY2F1 eDsKIC0tIHRlc3QgdGhhdCBleHByZXNzaW9uIGluZGV4ZXMgYW5kIHBhcnRpYWwgaW5kZXhlcyB3 b3JrIGNvbmN1cnJlbnRseQogQ1JFQVRFIElOREVYIENPTkNVUlJFTlRMWSBjb25jdXJfaW5kZXg0 IG9uIGNvbmN1cl9oZWFwKGYyKSBXSEVSRSBmMT0nYSc7CiBDUkVBVEUgSU5ERVggQ09OQ1VSUkVO VExZIGNvbmN1cl9pbmRleDUgb24gY29uY3VyX2hlYXAoZjIpIFdIRVJFIGYxPSd4JzsKQEAgLTEz MTUsMTAgKzEzMTYsMTIgQEAgQ1JFQVRFIFRBQkxFIGNvbmN1cl9yZWluZGV4X3RhYjQgKGMxIGlu dCk7CiBJTlNFUlQgSU5UTyBjb25jdXJfcmVpbmRleF90YWI0IFZBTFVFUyAoMSksICgxKSwgKDIp OwogLS0gVGhpcyB0cmljayBjcmVhdGVzIGFuIGludmFsaWQgaW5kZXguCiBDUkVBVEUgVU5JUVVF IElOREVYIENPTkNVUlJFTlRMWSBjb25jdXJfcmVpbmRleF9pbmQ1IE9OIGNvbmN1cl9yZWluZGV4 X3RhYjQgKGMxKTsKK0RST1AgSU5ERVggY29uY3VyX3JlaW5kZXhfaW5kNV9jY2F1eDsKIC0tIFJl aW5kZXhpbmcgY29uY3VycmVudGx5IHRoaXMgaW5kZXggZmFpbHMgd2l0aCB0aGUgc2FtZSBmYWls dXJlLgogLS0gVGhlIGV4dHJhIGluZGV4IGNyZWF0ZWQgaXMgaXRzZWxmIGludmFsaWQsIGFuZCBj YW4gYmUgZHJvcHBlZC4KIFJFSU5ERVggSU5ERVggQ09OQ1VSUkVOVExZIGNvbmN1cl9yZWluZGV4 X2luZDU7CiBcZCBjb25jdXJfcmVpbmRleF90YWI0CitEUk9QIElOREVYIGNvbmN1cl9yZWluZGV4 X2luZDVfY2NhdXg7CiBEUk9QIElOREVYIGNvbmN1cl9yZWluZGV4X2luZDVfY2NuZXc7CiAtLSBU aGlzIG1ha2VzIHRoZSBwcmV2aW91cyBmYWlsdXJlIGdvIGF3YXksIHNvIHRoZSBpbmRleCBjYW4g YmVjb21lIHZhbGlkLgogREVMRVRFIEZST00gY29uY3VyX3JlaW5kZXhfdGFiNCBXSEVSRSBjMSA9 IDE7CkBAIC0xMzMwLDYgKzEzMzMsMjQgQEAgUkVJTkRFWCBJTkRFWCBDT05DVVJSRU5UTFkgY29u Y3VyX3JlaW5kZXhfaW5kNTsKIFxkIGNvbmN1cl9yZWluZGV4X3RhYjQKIERST1AgVEFCTEUgY29u Y3VyX3JlaW5kZXhfdGFiNDsKIAorLS0gQ2hlY2sgaGFuZGxpbmcgb2YgYXV4aWxpYXJ5IGluZGV4 ZXMKK0NSRUFURSBUQUJMRSBhdXhfaW5kZXhfdGFiNSAoYzEgaW50KTsKK0lOU0VSVCBJTlRPIGF1 eF9pbmRleF90YWI1IFZBTFVFUyAoMSksICgxKSwgKDIpOworLS0gVGhpcyB0cmljayBjcmVhdGVz IGFuIGludmFsaWQgaW5kZXggYW5kIGF1eGlsaWFyeSBpbmRleCBmb3IgaXQKK0NSRUFURSBVTklR VUUgSU5ERVggQ09OQ1VSUkVOVExZIGF1eF9pbmRleF9pbmQ2IE9OIGF1eF9pbmRleF90YWI1IChj MSk7CitcZCBhdXhfaW5kZXhfdGFiNQorLS0gTm90IGFsbG93ZWQgdG8gcmVpbmRleCBhdXhpbGlh cnkgaW5kZXgKK1JFSU5ERVggSU5ERVggYXV4X2luZGV4X2luZDZfY2NhdXg7CistLSBDb25jdXJy ZW50bHkgYWxzbworUkVJTkRFWCBJTkRFWCBDT05DVVJSRU5UTFkgYXV4X2luZGV4X2luZDZfY2Nh dXg7CistLSBUaGlzIG1ha2VzIHRoZSBwcmV2aW91cyBmYWlsdXJlIGdvIGF3YXksIHNvIHRoZSBp bmRleCBjYW4gYmVjb21lIHZhbGlkLgorREVMRVRFIEZST00gY29uY3VyX3JlaW5kZXhfdGFiNCBX SEVSRSBjMSA9IDE7CistLSBTaG91bGQgYmUgc2tpcHBlZCBkdXJpbmcgcmVpbmRleAorUkVJTkRF WCBUQUJMRSBhdXhfaW5kZXhfdGFiNTsKKy0tIFNob3VsZCBiZSBza2lwcGVkIGR1cmluZyBjb25j dXJyZW50IHJlaW5kZXgKK1JFSU5ERVggVEFCTEUgQ09OQ1VSUkVOVExZIGF1eF9pbmRleF90YWI1 OworRFJPUCBUQUJMRSBhdXhfaW5kZXhfdGFiNTsKKwogLS0gQ2hlY2sgaGFuZGxpbmcgb2YgaW5k ZXhlcyB3aXRoIGV4cHJlc3Npb25zIGFuZCBwcmVkaWNhdGVzLiAgVGhlCiAtLSBkZWZpbml0aW9u cyBvZiB0aGUgcmVidWlsdCBpbmRleGVzIHNob3VsZCBtYXRjaCB0aGUgb3JpZ2luYWwKIC0tIGRl ZmluaXRpb25zLgotLSAKMi40My4wCgo= --0000000000009da2ac064db84911 Content-Type: application/octet-stream; name="v31-0005-Track-and-drop-auxiliary-indexes-in-DROP-REINDEX.patch" Content-Disposition: attachment; filename="v31-0005-Track-and-drop-auxiliary-indexes-in-DROP-REINDEX.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mn3ofxp84 RnJvbSA0MGM2ZDM3ODE1YzI1YzYzZDNlYzFlMGI0ZTExOWUxOTM3OTVmYTAyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNaWtoYWlsIE5pa2FsYXlldSA8bWloYWlsbmlrYWxheWV1QGdt YWlsLmNvbT4KRGF0ZTogVHVlLCAzMSBEZWMgMjAyNCAxNDozNjozMSArMDEwMApTdWJqZWN0OiBb UEFUQ0ggdjMxIDUvN10gVHJhY2sgYW5kIGRyb3AgYXV4aWxpYXJ5IGluZGV4ZXMgaW4gRFJPUC9S RUlOREVYCgpEdXJpbmcgY29uY3VycmVudCBpbmRleCBvcGVyYXRpb25zLCBhdXhpbGlhcnkgaW5k ZXhlcyBtYXkgYmUgbGVmdCBhcyBvcnBoYW5lZCBvYmplY3RzIHdoZW4gZXJyb3JzIG9jY3VyIChq dW5rIGF1eGlsaWFyeSBpbmRleGVzKS4KClRoaXMgcGF0Y2ggaW1wcm92ZXMgdGhlIGhhbmRsaW5n IG9mIHN1Y2ggYXV4aWxpYXJ5IGluZGV4ZXM6Ci0gYWRkIGF1eGlsaWFyeUZvckluZGV4SWQgcGFy YW1ldGVyIHRvIGluZGV4X2NyZWF0ZSgpIHRvIHRyYWNrIGRlcGVuZGVuY2llcyBiZXR3ZWVuIG1h aW4gYW5kIGF1eGlsaWFyeSBpbmRleGVzCi0gYXV0b21hdGljYWxseSBkcm9wIGF1eGlsaWFyeSBp bmRleGVzIHdoZW4gdGhlIG1haW4gaW5kZXggaXMgZHJvcHBlZAotIGRlbGV0ZSBqdW5rIGF1eGls aWFyeSBpbmRleGVzIHByb3Blcmx5IGR1cmluZyBSRUlOREVYIG9wZXJhdGlvbnMKLS0tCiBkb2Mv c3JjL3NnbWwvcmVmL2NyZWF0ZV9pbmRleC5zZ21sICAgICAgICAgfCAgMTQgKystCiBkb2Mvc3Jj L3NnbWwvcmVmL3JlaW5kZXguc2dtbCAgICAgICAgICAgICAgfCAgIDggKy0KIHNyYy9iYWNrZW5k L2NhdGFsb2cvZGVwZW5kZW5jeS5jICAgICAgICAgICB8ICAgMiArLQogc3JjL2JhY2tlbmQvY2F0 YWxvZy9pbmRleC5jICAgICAgICAgICAgICAgIHwgIDcxICsrKysrKysrKystLS0tCiBzcmMvYmFj a2VuZC9jYXRhbG9nL3BnX2RlcGVuZC5jICAgICAgICAgICAgfCAgNTggKysrKysrKysrKysrCiBz cmMvYmFja2VuZC9jYXRhbG9nL3RvYXN0aW5nLmMgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2Jh Y2tlbmQvY29tbWFuZHMvaW5kZXhjbWRzLmMgICAgICAgICAgIHwgIDM3ICsrKysrKystCiBzcmMv YmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYyAgICAgICAgICAgfCAgNTIgKysrKysrKysrLQog c3JjL2JhY2tlbmQvbm9kZXMvbWFrZWZ1bmNzLmMgICAgICAgICAgICAgIHwgICAzICstCiBzcmMv aW5jbHVkZS9jYXRhbG9nL2RlcGVuZGVuY3kuaCAgICAgICAgICAgfCAgIDEgKwogc3JjL2luY2x1 ZGUvbm9kZXMvZXhlY25vZGVzLmggICAgICAgICAgICAgIHwgICAyICsKIHNyYy9pbmNsdWRlL25v ZGVzL21ha2VmdW5jcy5oICAgICAgICAgICAgICB8ICAgMiArLQogc3JjL3Rlc3QvcmVncmVzcy9l eHBlY3RlZC9jcmVhdGVfaW5kZXgub3V0IHwgMTA1ICsrKysrKysrKysrKysrKysrKystLQogc3Jj L3Rlc3QvcmVncmVzcy9zcWwvY3JlYXRlX2luZGV4LnNxbCAgICAgIHwgIDU3ICsrKysrKysrKyst CiAxNCBmaWxlcyBjaGFuZ2VkLCAzNzEgaW5zZXJ0aW9ucygrKSwgNDIgZGVsZXRpb25zKC0pCgpk aWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfaW5kZXguc2dtbCBiL2RvYy9zcmMv c2dtbC9yZWYvY3JlYXRlX2luZGV4LnNnbWwKaW5kZXggMTJjODg1ODdhNzkuLjdmNzUxNDUzMzE3 IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV9pbmRleC5zZ21sCisrKyBiL2Rv Yy9zcmMvc2dtbC9yZWYvY3JlYXRlX2luZGV4LnNnbWwKQEAgLTY2OCwxMCArNjY4LDE2IEBAIElu ZGV4ZXM6CiAgICAgImlkeF9jY2F1eCIgc3RpciAoY29sKSBJTlZBTElECiA8L3Byb2dyYW1saXN0 aW5nPgogCi0gICAgVGhlIHJlY29tbWVuZGVkIHJlY292ZXJ5Ci0gICAgbWV0aG9kIGluIHN1Y2gg Y2FzZXMgaXMgdG8gZHJvcCB0aGVzZSBpbmRleGVzIGFuZCB0cnkgYWdhaW4gdG8gcGVyZm9ybQot ICAgIDxjb21tYW5kPkNSRUFURSBJTkRFWCBDT05DVVJSRU5UTFk8L2NvbW1hbmQ+LiAoQW5vdGhl ciBwb3NzaWJpbGl0eSBpcwotICAgIHRvIHJlYnVpbGQgdGhlIGluZGV4IHdpdGggPGNvbW1hbmQ+ UkVJTkRFWCBJTkRFWCBDT05DVVJSRU5UTFk8L2NvbW1hbmQ+KS4KKyAgICBUaGUgcmVjb21tZW5k ZWQgcmVjb3ZlcnkgbWV0aG9kIGluIHN1Y2ggY2FzZXMgaXMgdG8gZHJvcCB0aGUgaW5kZXggd2l0 aAorICAgIDxjb21tYW5kPkRST1AgSU5ERVg8L2NvbW1hbmQ+LiBUaGUgYXV4aWxpYXJ5IGluZGV4 IChzdWZmaXhlZCB3aXRoCisgICAgPGxpdGVyYWw+X2NjYXV4PC9saXRlcmFsPikgd2lsbCBiZSBh dXRvbWF0aWNhbGx5IGRyb3BwZWQgd2hlbiB0aGUgbWFpbgorICAgIGluZGV4IGlzIGRyb3BwZWQu IEFmdGVyIGRyb3BwaW5nIHRoZSBpbmRleGVzLCB5b3UgY2FuIHRyeSBhZ2FpbiB0byBwZXJmb3Jt CisgICAgPGNvbW1hbmQ+Q1JFQVRFIElOREVYIENPTkNVUlJFTlRMWTwvY29tbWFuZD4uIChBbm90 aGVyIHBvc3NpYmlsaXR5IGlzIHRvCisgICAgcmVidWlsZCB0aGUgaW5kZXggd2l0aCA8Y29tbWFu ZD5SRUlOREVYIElOREVYIENPTkNVUlJFTlRMWTwvY29tbWFuZD4sCisgICAgd2hpY2ggd2lsbCBh bHNvIGhhbmRsZSBjbGVhbnVwIG9mIGFueSBpbnZhbGlkIGF1eGlsaWFyeSBpbmRleGVzLikKKyAg ICBJZiB0aGUgb25seSBpbnZhbGlkIGluZGV4IGlzIG9uZSBzdWZmaXhlZCA8bGl0ZXJhbD5fY2Nh dXg8L2xpdGVyYWw+LAorICAgIHJlY29tbWVuZGVkIHJlY292ZXJ5IG1ldGhvZCBpcyBqdXN0IDxs aXRlcmFsPkRST1AgSU5ERVg8L2xpdGVyYWw+CisgICAgZm9yIHRoYXQgaW5kZXguCiAgICA8L3Bh cmE+CiAKICAgIDxwYXJhPgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3JlZi9yZWluZGV4LnNn bWwgYi9kb2Mvc3JjL3NnbWwvcmVmL3JlaW5kZXguc2dtbAppbmRleCA5ZTAyNDgyNjFhZS4uNTRm N2IzNmVmYTIgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWYvcmVpbmRleC5zZ21sCisrKyBi L2RvYy9zcmMvc2dtbC9yZWYvcmVpbmRleC5zZ21sCkBAIC00NzYsMTEgKzQ3NiwxNSBAQCBJbmRl eGVzOgogICAgIDxsaXRlcmFsPl9jY25ldzwvbGl0ZXJhbD4gb3IgPGxpdGVyYWw+X2NjYXV4PC9s aXRlcmFsPiwgdGhlbiBpdCBjb3JyZXNwb25kcyB0byB0aGUgdHJhbnNpZW50IG9yIGF1eGlsaWFy eQogICAgIGluZGV4IGNyZWF0ZWQgZHVyaW5nIHRoZSBjb25jdXJyZW50IG9wZXJhdGlvbiwgYW5k IHRoZSByZWNvbW1lbmRlZAogICAgIHJlY292ZXJ5IG1ldGhvZCBpcyB0byBkcm9wIHRoZXNlIGlu ZGV4ZXMgdXNpbmcgPGxpdGVyYWw+RFJPUCBJTkRFWDwvbGl0ZXJhbD4sCi0gICAgdGhlbiBhdHRl bXB0IDxjb21tYW5kPlJFSU5ERVggQ09OQ1VSUkVOVExZPC9jb21tYW5kPiBhZ2Fpbi4KKyAgICB0 aGVuIGF0dGVtcHQgPGNvbW1hbmQ+UkVJTkRFWCBDT05DVVJSRU5UTFk8L2NvbW1hbmQ+IGFnYWlu LiBUaGUgYXV4aWxpYXJ5IGluZGV4CisgICAgKHN1ZmZpeGVkIHdpdGggPGxpdGVyYWw+X2NjYXV4 PC9saXRlcmFsPikgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGRyb3BwZWQKKyAgICBhbG9uZyB3aXRo IGl0cyBtYWluIGluZGV4LgogICAgIElmIHRoZSBpbnZhbGlkIGluZGV4IGlzIGluc3RlYWQgc3Vm Zml4ZWQgPGxpdGVyYWw+X2Njb2xkPC9saXRlcmFsPiwKICAgICBpdCBjb3JyZXNwb25kcyB0byB0 aGUgb3JpZ2luYWwgaW5kZXggd2hpY2ggY291bGQgbm90IGJlIGRyb3BwZWQ7CiAgICAgdGhlIHJl Y29tbWVuZGVkIHJlY292ZXJ5IG1ldGhvZCBpcyB0byBqdXN0IGRyb3Agc2FpZCBpbmRleCwgc2lu Y2UgdGhlCi0gICAgcmVidWlsZCBwcm9wZXIgaGFzIGJlZW4gc3VjY2Vzc2Z1bC4KKyAgICByZWJ1 aWxkIHByb3BlciBoYXMgYmVlbiBzdWNjZXNzZnVsLiBJZiB0aGUgb25seQorICAgIGludmFsaWQg aW5kZXggaXMgb25lIHN1ZmZpeGVkIDxsaXRlcmFsPl9jY2F1eDwvbGl0ZXJhbD4sIHJlY29tbWVu ZGVkCisgICAgcmVjb3ZlcnkgbWV0aG9kIGlzIGp1c3QgPGxpdGVyYWw+RFJPUCBJTkRFWDwvbGl0 ZXJhbD4gZm9yIHRoYXQgaW5kZXguCiAgICAgQSBub256ZXJvIG51bWJlciBtYXkgYmUgYXBwZW5k ZWQgdG8gdGhlIHN1ZmZpeCBvZiB0aGUgaW52YWxpZCBpbmRleAogICAgIG5hbWVzIHRvIGtlZXAg dGhlbSB1bmlxdWUsIGxpa2UgPGxpdGVyYWw+X2NjbmV3MTwvbGl0ZXJhbD4sCiAgICAgPGxpdGVy YWw+X2Njb2xkMjwvbGl0ZXJhbD4sIGV0Yy4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NhdGFs b2cvZGVwZW5kZW5jeS5jIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9kZXBlbmRlbmN5LmMKaW5kZXgg ZmRiOGU2N2UxZjUuLmM2OTQxZmIxOWQxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9n L2RlcGVuZGVuY3kuYworKysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL2RlcGVuZGVuY3kuYwpAQCAt MjkyLDcgKzI5Miw3IEBAIHBlcmZvcm1EZWxldGlvbihjb25zdCBPYmplY3RBZGRyZXNzICpvYmpl Y3QsCiAJICogQWNxdWlyZSBkZWxldGlvbiBsb2NrIG9uIHRoZSB0YXJnZXQgb2JqZWN0LiAgKElk ZWFsbHkgdGhlIGNhbGxlciBoYXMKIAkgKiBkb25lIHRoaXMgYWxyZWFkeSwgYnV0IG1hbnkgcGxh Y2VzIGFyZSBzbG9wcHkgYWJvdXQgaXQuKQogCSAqLwotCUFjcXVpcmVEZWxldGlvbkxvY2sob2Jq ZWN0LCAwKTsKKwlBY3F1aXJlRGVsZXRpb25Mb2NrKG9iamVjdCwgZmxhZ3MpOwogCiAJLyoKIAkg KiBDb25zdHJ1Y3QgYSBsaXN0IG9mIG9iamVjdHMgdG8gZGVsZXRlIChpZSwgdGhlIGdpdmVuIG9i amVjdCBwbHVzCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jYXRhbG9nL2luZGV4LmMgYi9zcmMv YmFja2VuZC9jYXRhbG9nL2luZGV4LmMKaW5kZXggMzFmOTJiOTc1ODAuLjRiNmEwZjc2YzgxIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL2luZGV4LmMKKysrIGIvc3JjL2JhY2tlbmQv Y2F0YWxvZy9pbmRleC5jCkBAIC03NzYsNiArNzc2LDggQEAgaW5kZXhfY3JlYXRlKFJlbGF0aW9u IGhlYXBSZWxhdGlvbiwKIAkJICAgKChmbGFncyAmIElOREVYX0NSRUFURV9BRERfQ09OU1RSQUlO VCkgIT0gMCkpOwogCS8qIHBhcnRpdGlvbmVkIGluZGV4ZXMgbXVzdCBuZXZlciBiZSAiYnVpbHQi IGJ5IHRoZW1zZWx2ZXMgKi8KIAlBc3NlcnQoIXBhcnRpdGlvbmVkIHx8IChmbGFncyAmIElOREVY X0NSRUFURV9TS0lQX0JVSUxEKSk7CisJLyogaWlfQXV4aWxpYXJ5Rm9ySW5kZXhJZCBhbmQgSU5E RVhfQ1JFQVRFX0FVWElMSUFSWSBhcmUgcmVxdWlyZWQgYm90aCBvciBuZWl0aGVyICovCisJQXNz ZXJ0KE9pZElzVmFsaWQoaW5kZXhJbmZvLT5paV9BdXhpbGlhcnlGb3JJbmRleElkKSA9PSBhdXhp bGlhcnkpOwogCiAJcmVsa2luZCA9IHBhcnRpdGlvbmVkID8gUkVMS0lORF9QQVJUSVRJT05FRF9J TkRFWCA6IFJFTEtJTkRfSU5ERVg7CiAJaXNfZXhjbHVzaW9uID0gKGluZGV4SW5mby0+aWlfRXhj bHVzaW9uT3BzICE9IE5VTEwpOwpAQCAtMTE4MSw2ICsxMTgzLDE1IEBAIGluZGV4X2NyZWF0ZShS ZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAJCQlyZWNvcmREZXBlbmRlbmN5T24oJm15c2VsZiwgJnJl ZmVyZW5jZWQsIERFUEVOREVOQ1lfUEFSVElUSU9OX1NFQyk7CiAJCX0KIAorCQkvKgorCQkgKiBS ZWNvcmQgZGVwZW5kZW5jeSBvbiB0aGUgbWFpbiBpbmRleCBpbiBjYXNlIG9mIGF1eGlsaWFyeSBp bmRleC4KKwkJICovCisJCWlmIChPaWRJc1ZhbGlkKGluZGV4SW5mby0+aWlfQXV4aWxpYXJ5Rm9y SW5kZXhJZCkpCisJCXsKKwkJCU9iamVjdEFkZHJlc3NTZXQocmVmZXJlbmNlZCwgUmVsYXRpb25S ZWxhdGlvbklkLCBpbmRleEluZm8tPmlpX0F1eGlsaWFyeUZvckluZGV4SWQpOworCQkJcmVjb3Jk RGVwZW5kZW5jeU9uKCZteXNlbGYsICZyZWZlcmVuY2VkLCBERVBFTkRFTkNZX0FVVE8pOworCQl9 CisKIAkJLyogcGxhY2Vob2xkZXIgZm9yIG5vcm1hbCBkZXBlbmRlbmNpZXMgKi8KIAkJYWRkcnMg PSBuZXdfb2JqZWN0X2FkZHJlc3NlcygpOwogCkBAIC0xNDEzLDcgKzE0MjQsOCBAQCBpbmRleF9j b25jdXJyZW50bHlfY3JlYXRlX2NvcHkoUmVsYXRpb24gaGVhcFJlbGF0aW9uLCBPaWQgb2xkSW5k ZXhJZCwKIAkJCQkJCQl0cnVlLAogCQkJCQkJCWluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbXN1 bW1hcml6aW5nLAogCQkJCQkJCW9sZEluZm8tPmlpX1dpdGhvdXRPdmVybGFwcywKLQkJCQkJCQlm YWxzZSk7CisJCQkJCQkJZmFsc2UsCisJCQkJCQkJSW52YWxpZE9pZCk7CiAKIAkvKgogCSAqIEV4 dHJhY3QgdGhlIGxpc3Qgb2YgY29sdW1uIG5hbWVzIGFuZCB0aGUgY29sdW1uIG51bWJlcnMgZm9y IHRoZSBuZXcKQEAgLTE1ODEsNyArMTU5Myw4IEBAIGluZGV4X2NvbmN1cnJlbnRseV9jcmVhdGVf YXV4KFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwgT2lkIG1haW5JbmRleElkLAogCQkJCQkJCXRydWUs CiAJCQkJCQkJZmFsc2UsCS8qIGF1eCBhcmUgbm90IHN1bW1hcml6aW5nICovCiAJCQkJCQkJZmFs c2UsCS8qIGF1eCBhcmUgbm90IHdpdGhvdXQgb3ZlcmxhcHMgKi8KLQkJCQkJCQl0cnVlCS8qIGF1 eGlsaWFyeSAqLyk7CisJCQkJCQkJdHJ1ZQkvKiBhdXhpbGlhcnkgKi8sCisJCQkJCQkJbWFpbklu ZGV4SWQgLyogYXV4aWxpYXJ5Rm9ySW5kZXhJZCAqLyk7CiAKIAkvKgogCSAqIEV4dHJhY3QgdGhl IGxpc3Qgb2YgY29sdW1uIG5hbWVzIGFuZCB0aGUgY29sdW1uIG51bWJlcnMgZm9yIHRoZSBuZXcK QEAgLTI2MTcsNyArMjYzMCw4IEBAIEJ1aWxkSW5kZXhJbmZvKFJlbGF0aW9uIGluZGV4KQogCQkJ CQkgICBmYWxzZSwKIAkJCQkJICAgaW5kZXgtPnJkX2luZGFtLT5hbXN1bW1hcml6aW5nLAogCQkJ CQkgICBpbmRleFN0cnVjdC0+aW5kaXNleGNsdXNpb24gJiYgaW5kZXhTdHJ1Y3QtPmluZGlzdW5p cXVlLAotCQkJCQkgICBpbmRleC0+cmRfcmVsLT5yZWxhbSA9PSBTVElSX0FNX09JRCAvKiBhdXhp bGlhcnkgaWZmIFNUSVIgKi8pOworCQkJCQkgICBpbmRleC0+cmRfcmVsLT5yZWxhbSA9PSBTVElS X0FNX09JRCAvKiBhdXhpbGlhcnkgaWZmIFNUSVIgKi8sCisJCQkJCSAgIEludmFsaWRPaWQgLyog YXV4aWxpYXJ5X2Zvcl9pbmRleF9pZCBpcyBzZXQgb25seSBkdXJpbmcgYnVpbGQgKi8pOwogCiAJ LyogZmlsbCBpbiBhdHRyaWJ1dGUgbnVtYmVycyAqLwogCWZvciAoaSA9IDA7IGkgPCBudW1BdHRz OyBpKyspCkBAIC0yNjc4LDcgKzI2OTIsOCBAQCBCdWlsZER1bW15SW5kZXhJbmZvKFJlbGF0aW9u IGluZGV4KQogCQkJCQkgICBmYWxzZSwKIAkJCQkJICAgaW5kZXgtPnJkX2luZGFtLT5hbXN1bW1h cml6aW5nLAogCQkJCQkgICBpbmRleFN0cnVjdC0+aW5kaXNleGNsdXNpb24gJiYgaW5kZXhTdHJ1 Y3QtPmluZGlzdW5pcXVlLAotCQkJCQkgICBpbmRleC0+cmRfcmVsLT5yZWxhbSA9PSBTVElSX0FN X09JRCAvKiBhdXhpbGlhcnkgaWZmIFNUSVIgKi8pOworCQkJCQkgICBpbmRleC0+cmRfcmVsLT5y ZWxhbSA9PSBTVElSX0FNX09JRCAvKiBhdXhpbGlhcnkgaWZmIFNUSVIgKi8sCisJCQkJCSAgIElu dmFsaWRPaWQpOwogCiAJLyogZmlsbCBpbiBhdHRyaWJ1dGUgbnVtYmVycyAqLwogCWZvciAoaSA9 IDA7IGkgPCBudW1BdHRzOyBpKyspCkBAIC0zODQzLDYgKzM4NTgsNyBAQCByZWluZGV4X2luZGV4 KGNvbnN0IFJlaW5kZXhTdG10ICpzdG10LCBPaWQgaW5kZXhJZCwKIAkJCQloZWFwUmVsYXRpb247 CiAJT2lkCQkJaGVhcElkOwogCU9pZAkJCXNhdmVfdXNlcmlkOworCU9pZAkJCWp1bmtBdXhJbmRl eElkOwogCWludAkJCXNhdmVfc2VjX2NvbnRleHQ7CiAJaW50CQkJc2F2ZV9uZXN0bGV2ZWw7CiAJ SW5kZXhJbmZvICAqaW5kZXhJbmZvOwpAQCAtMzg5OSw2ICszOTE1LDE5IEBAIHJlaW5kZXhfaW5k ZXgoY29uc3QgUmVpbmRleFN0bXQgKnN0bXQsIE9pZCBpbmRleElkLAogCQlwZ3N0YXRfcHJvZ3Jl c3NfdXBkYXRlX211bHRpX3BhcmFtKDIsIHByb2dyZXNzX2NvbHMsIHByb2dyZXNzX3ZhbHMpOwog CX0KIAorCS8qIENoZWNrIGZvciB0aGUgYXV4aWxpYXJ5IGluZGV4IGZvciB0aGF0IGluZGV4LCBp dCBuZWVkcyB0byBiZSBkcm9wcGVkICovCisJanVua0F1eEluZGV4SWQgPSBnZXRfYXV4aWxpYXJ5 X2luZGV4KGluZGV4SWQpOworCWlmIChPaWRJc1ZhbGlkKGp1bmtBdXhJbmRleElkKSkKKwl7CisJ CU9iamVjdEFkZHJlc3Mgb2JqZWN0OworCQlvYmplY3QuY2xhc3NJZCA9IFJlbGF0aW9uUmVsYXRp b25JZDsKKwkJb2JqZWN0Lm9iamVjdElkID0ganVua0F1eEluZGV4SWQ7CisJCW9iamVjdC5vYmpl Y3RTdWJJZCA9IDA7CisJCXBlcmZvcm1EZWxldGlvbigmb2JqZWN0LCBEUk9QX1JFU1RSSUNULAor CQkJCQkJCQkgUEVSRk9STV9ERUxFVElPTl9JTlRFUk5BTCB8CisJCQkJCQkJCSBQRVJGT1JNX0RF TEVUSU9OX1FVSUVUTFkpOworCX0KKwogCS8qCiAJICogT3BlbiB0aGUgdGFyZ2V0IGluZGV4IHJl bGF0aW9uIGFuZCBnZXQgYW4gZXhjbHVzaXZlIGxvY2sgb24gaXQsIHRvCiAJICogZW5zdXJlIHRo YXQgbm8gb25lIGVsc2UgaXMgdG91Y2hpbmcgdGhpcyBwYXJ0aWN1bGFyIGluZGV4LgpAQCAtNDE4 Nyw3ICs0MjE2LDggQEAgcmVpbmRleF9yZWxhdGlvbihjb25zdCBSZWluZGV4U3RtdCAqc3RtdCwg T2lkIHJlbGlkLCBpbnQgZmxhZ3MsCiB7CiAJUmVsYXRpb24JcmVsOwogCU9pZAkJCXRvYXN0X3Jl bGlkOwotCUxpc3QJICAgKmluZGV4SWRzOworCUxpc3QJICAgKmluZGV4SWRzLAorCQkJICAgKmF1 eEluZGV4SWRzID0gTklMOwogCWNoYXIJCXBlcnNpc3RlbmNlOwogCWJvb2wJCXJlc3VsdCA9IGZh bHNlOwogCUxpc3RDZWxsICAgKmluZGV4SWQ7CkBAIC00Mjc2LDEzICs0MzA2LDMwIEBAIHJlaW5k ZXhfcmVsYXRpb24oY29uc3QgUmVpbmRleFN0bXQgKnN0bXQsIE9pZCByZWxpZCwgaW50IGZsYWdz LAogCWVsc2UKIAkJcGVyc2lzdGVuY2UgPSByZWwtPnJkX3JlbC0+cmVscGVyc2lzdGVuY2U7CiAK Kwlmb3JlYWNoKGluZGV4SWQsIGluZGV4SWRzKQorCXsKKwkJT2lkCQkJaW5kZXhPaWQgPSBsZmly c3Rfb2lkKGluZGV4SWQpOworCQlPaWQJCQlpbmRleEFtID0gZ2V0X3JlbF9yZWxhbShpbmRleE9p ZCk7CisKKwkJLyogQWxsIFNUSVIgaW5kZXhlcyBhcmUgYXV4aWxpYXJ5IGluZGV4ZXMgKi8KKwkJ aWYgKGluZGV4QW0gPT0gU1RJUl9BTV9PSUQpCisJCXsKKwkJCWlmIChmbGFncyAmIFJFSU5ERVhf UkVMX1NVUFBSRVNTX0lOREVYX1VTRSkKKwkJCQlSZW1vdmVSZWluZGV4UGVuZGluZyhpbmRleE9p ZCk7CisJCQlhdXhJbmRleElkcyA9IGxhcHBlbmRfb2lkKGF1eEluZGV4SWRzLCBpbmRleE9pZCk7 CisJCX0KKwl9CisKIAkvKiBSZWluZGV4IGFsbCB0aGUgaW5kZXhlcy4gKi8KIAlpID0gMTsKIAlm b3JlYWNoKGluZGV4SWQsIGluZGV4SWRzKQogCXsKIAkJT2lkCQkJaW5kZXhPaWQgPSBsZmlyc3Rf b2lkKGluZGV4SWQpOwogCQlPaWQJCQlpbmRleE5hbWVzcGFjZUlkID0gZ2V0X3JlbF9uYW1lc3Bh Y2UoaW5kZXhPaWQpOwotCQlPaWQJCQlpbmRleEFtID0gZ2V0X3JlbF9yZWxhbShpbmRleE9pZCk7 CisKKwkJLyogQXV4aWxpYXJ5IGluZGV4ZXMgYXJlIGdvaW5nIHRvIGJlIGRyb3BwZWQgZHVyaW5n IG1haW4gaW5kZXggcmVidWlsZCAqLworCQlpZiAobGlzdF9tZW1iZXJfb2lkKGF1eEluZGV4SWRz LCBpbmRleE9pZCkpCisJCQljb250aW51ZTsKIAogCQkvKgogCQkgKiBTa2lwIGFueSBpbnZhbGlk IGluZGV4ZXMgb24gYSBUT0FTVCB0YWJsZS4gIFRoZXNlIGNhbiBvbmx5IGJlCkBAIC00MzA4LDE4 ICs0MzU1LDYgQEAgcmVpbmRleF9yZWxhdGlvbihjb25zdCBSZWluZGV4U3RtdCAqc3RtdCwgT2lk IHJlbGlkLCBpbnQgZmxhZ3MsCiAJCQljb250aW51ZTsKIAkJfQogCi0JCWlmIChpbmRleEFtID09 IFNUSVJfQU1fT0lEKQotCQl7Ci0JCQllcmVwb3J0KFdBUk5JTkcsCi0JCQkJCShlcnJjb2RlKEVS UkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKLQkJCQkJIGVycm1zZygic2tpcHBpbmcgcmVp bmRleCBvZiBhdXhpbGlhcnkgaW5kZXggXCIlcy4lc1wiIiwKLQkJCQkJCQlnZXRfbmFtZXNwYWNl X25hbWUoaW5kZXhOYW1lc3BhY2VJZCksCi0JCQkJCQkJZ2V0X3JlbF9uYW1lKGluZGV4T2lkKSkp KTsKLQkJCWlmIChmbGFncyAmIFJFSU5ERVhfUkVMX1NVUFBSRVNTX0lOREVYX1VTRSkKLQkJCQlS ZW1vdmVSZWluZGV4UGVuZGluZyhpbmRleE9pZCk7Ci0JCQljb250aW51ZTsKLQkJfQotCiAJCXJl aW5kZXhfaW5kZXgoc3RtdCwgaW5kZXhPaWQsICEoZmxhZ3MgJiBSRUlOREVYX1JFTF9DSEVDS19D T05TVFJBSU5UUyksCiAJCQkJCSAgcGVyc2lzdGVuY2UsIHBhcmFtcyk7CiAKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdfZGVwZW5kLmMgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3Bn X2RlcGVuZC5jCmluZGV4IDA3YzJkNDFjMTg5Li43ZTBlMjliZGI1YiAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvY2F0YWxvZy9wZ19kZXBlbmQuYworKysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3Bn X2RlcGVuZC5jCkBAIC0yMCw2ICsyMCw3IEBACiAjaW5jbHVkZSAiY2F0YWxvZy9jYXRhbG9nLmgi CiAjaW5jbHVkZSAiY2F0YWxvZy9kZXBlbmRlbmN5LmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9pbmRl eGluZy5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfYW1fZC5oIgogI2luY2x1ZGUgImNhdGFsb2cv cGdfY29uc3RyYWludC5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfZGVwZW5kLmgiCiAjaW5jbHVk ZSAiY2F0YWxvZy9wZ19leHRlbnNpb24uaCIKQEAgLTExMDgsNiArMTEwOSw2MyBAQCBnZXRfaW5k ZXhfY29uc3RyYWludChPaWQgaW5kZXhJZCkKIAlyZXR1cm4gY29uc3RyYWludElkOwogfQogCisv KgorICogZ2V0X2F1eGlsaWFyeV9pbmRleAorICoJCUdpdmVuIHRoZSBPSUQgb2YgYW4gaW5kZXgs IHJldHVybiB0aGUgT0lEIG9mIGl0cyBhdXhpbGlhcnkKKyAqCQlpbmRleCwgb3IgSW52YWxpZE9p ZCBpZiB0aGVyZSBpcyBubyBhdXhpbGlhcnkgaW5kZXguCisgKi8KK09pZAorZ2V0X2F1eGlsaWFy eV9pbmRleChPaWQgaW5kZXhJZCkKK3sKKwlPaWQJCQlhdXhpbGlhcnlJbmRleE9pZCA9IEludmFs aWRPaWQ7CisJUmVsYXRpb24JZGVwUmVsOworCVNjYW5LZXlEYXRhIGtleVszXTsKKwlTeXNTY2Fu RGVzYyBzY2FuOworCUhlYXBUdXBsZQl0dXA7CisKKwkvKiBTZWFyY2ggdGhlIGRlcGVuZGVuY3kg dGFibGUgZm9yIHRoZSBpbmRleCAqLworCWRlcFJlbCA9IHRhYmxlX29wZW4oRGVwZW5kUmVsYXRp b25JZCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCVNjYW5LZXlJbml0KCZrZXlbMF0sCisJCQkJQW51 bV9wZ19kZXBlbmRfcmVmY2xhc3NpZCwKKwkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZfT0lE RVEsCisJCQkJT2JqZWN0SWRHZXREYXR1bShSZWxhdGlvblJlbGF0aW9uSWQpKTsKKwlTY2FuS2V5 SW5pdCgma2V5WzFdLAorCQkJCUFudW1fcGdfZGVwZW5kX3JlZm9iamlkLAorCQkJCUJURXF1YWxT dHJhdGVneU51bWJlciwgRl9PSURFUSwKKwkJCQlPYmplY3RJZEdldERhdHVtKGluZGV4SWQpKTsK KwlTY2FuS2V5SW5pdCgma2V5WzJdLAorCQkJCUFudW1fcGdfZGVwZW5kX3JlZm9ianN1YmlkLAor CQkJCUJURXF1YWxTdHJhdGVneU51bWJlciwgRl9JTlQ0RVEsCisJCQkJSW50MzJHZXREYXR1bSgw KSk7CisKKwlzY2FuID0gc3lzdGFibGVfYmVnaW5zY2FuKGRlcFJlbCwgRGVwZW5kUmVmZXJlbmNl SW5kZXhJZCwgdHJ1ZSwKKwkJCQkJCQkgIE5VTEwsIDMsIGtleSk7CisKKwl3aGlsZSAoSGVhcFR1 cGxlSXNWYWxpZCh0dXAgPSBzeXN0YWJsZV9nZXRuZXh0KHNjYW4pKSkKKwl7CisJCUZvcm1fcGdf ZGVwZW5kIGRlcHJlYyA9IChGb3JtX3BnX2RlcGVuZCkgR0VUU1RSVUNUKHR1cCk7CisKKwkJLyoK KwkJICogV2UgYXNzdW1lIEFVVE8gZGVwZW5kZW5jeSBvbiBpbmRleCB3aXRoIHJlbF9raW5kCisJ CSAqIG9mIFJFTEtJTkRfSU5ERVggYW5kIEFNIGVxIFNUSVIgaXMgdGhhdCB3ZSBhcmUgbG9va2lu ZyBmb3IuCisJCSAqLworCQlpZiAoZGVwcmVjLT5jbGFzc2lkID09IFJlbGF0aW9uUmVsYXRpb25J ZCAmJgorCQkJKGRlcHJlYy0+ZGVwdHlwZSA9PSBERVBFTkRFTkNZX0FVVE8pICYmCisJCQlnZXRf cmVsX3JlbGtpbmQoZGVwcmVjLT5vYmppZCkgPT0gUkVMS0lORF9JTkRFWCAmJgorCQkJZ2V0X3Jl bF9yZWxhbShkZXByZWMtPm9iamlkKSA9PSBTVElSX0FNX09JRCkKKwkJeworCQkJYXV4aWxpYXJ5 SW5kZXhPaWQgPSBkZXByZWMtPm9iamlkOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlzeXN0YWJs ZV9lbmRzY2FuKHNjYW4pOworCXRhYmxlX2Nsb3NlKGRlcFJlbCwgQWNjZXNzU2hhcmVMb2NrKTsK KworCXJldHVybiBhdXhpbGlhcnlJbmRleE9pZDsKK30KKwogLyoKICAqIGdldF9pbmRleF9yZWZf Y29uc3RyYWludHMKICAqCQlHaXZlbiB0aGUgT0lEIG9mIGFuIGluZGV4LCByZXR1cm4gdGhlIE9J RCBvZiBhbGwgZm9yZWlnbiBrZXkKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvdG9h c3RpbmcuYyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvdG9hc3RpbmcuYwppbmRleCBjMzNlNDNkZjFl Yy4uYjE2ZWFjMDM1N2YgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvdG9hc3Rpbmcu YworKysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3RvYXN0aW5nLmMKQEAgLTMxNCw2ICszMTQsNyBA QCBjcmVhdGVfdG9hc3RfdGFibGUoUmVsYXRpb24gcmVsLCBPaWQgdG9hc3RPaWQsIE9pZCB0b2Fz dEluZGV4T2lkLAogCWluZGV4SW5mby0+aWlfQW0gPSBCVFJFRV9BTV9PSUQ7CiAJaW5kZXhJbmZv LT5paV9BbUNhY2hlID0gTlVMTDsKIAlpbmRleEluZm8tPmlpX0F1eGlsaWFyeSA9IGZhbHNlOwor CWluZGV4SW5mby0+aWlfQXV4aWxpYXJ5Rm9ySW5kZXhJZCA9IEludmFsaWRPaWQ7CiAJaW5kZXhJ bmZvLT5paV9Db250ZXh0ID0gQ3VycmVudE1lbW9yeUNvbnRleHQ7CiAKIAljb2xsYXRpb25JZHNb MF0gPSBJbnZhbGlkT2lkOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvaW5kZXhj bWRzLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9pbmRleGNtZHMuYwppbmRleCBkYzRhZjA0MDlk Zi4uYjQzMGQ0YTViMzQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2luZGV4Y21k cy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2luZGV4Y21kcy5jCkBAIC0yNDcsNyArMjQ3 LDcgQEAgQ2hlY2tJbmRleENvbXBhdGlibGUoT2lkIG9sZElkLAogCWluZGV4SW5mbyA9IG1ha2VJ bmRleEluZm8obnVtYmVyT2ZBdHRyaWJ1dGVzLCBudW1iZXJPZkF0dHJpYnV0ZXMsCiAJCQkJCQkJ ICBhY2Nlc3NNZXRob2RJZCwgTklMLCBOSUwsIGZhbHNlLCBmYWxzZSwKIAkJCQkJCQkgIGZhbHNl LCBmYWxzZSwgYW1zdW1tYXJpemluZywKLQkJCQkJCQkgIGlzV2l0aG91dE92ZXJsYXBzLCBpc2F1 eGlsaWFyeSk7CisJCQkJCQkJICBpc1dpdGhvdXRPdmVybGFwcywgaXNhdXhpbGlhcnksIEludmFs aWRPaWQpOwogCXR5cGVJZHMgPSBwYWxsb2NfYXJyYXkoT2lkLCBudW1iZXJPZkF0dHJpYnV0ZXMp OwogCWNvbGxhdGlvbklkcyA9IHBhbGxvY19hcnJheShPaWQsIG51bWJlck9mQXR0cmlidXRlcyk7 CiAJb3BjbGFzc0lkcyA9IHBhbGxvY19hcnJheShPaWQsIG51bWJlck9mQXR0cmlidXRlcyk7CkBA IC05NDcsNyArOTQ3LDggQEAgRGVmaW5lSW5kZXgoUGFyc2VTdGF0ZSAqcHN0YXRlLAogCQkJCQkJ CSAgY29uY3VycmVudCwKIAkJCQkJCQkgIGFtaXNzdW1tYXJpemluZywKIAkJCQkJCQkgIHN0bXQt Pmlzd2l0aG91dG92ZXJsYXBzLAotCQkJCQkJCSAgZmFsc2UpOworCQkJCQkJCSAgZmFsc2UsCisJ CQkJCQkJICBJbnZhbGlkT2lkKTsKIAogCXR5cGVJZHMgPSBwYWxsb2NfYXJyYXkoT2lkLCBudW1i ZXJPZkF0dHJpYnV0ZXMpOwogCWNvbGxhdGlvbklkcyA9IHBhbGxvY19hcnJheShPaWQsIG51bWJl ck9mQXR0cmlidXRlcyk7CkBAIC0zNzA5LDYgKzM3MTAsNyBAQCBSZWluZGV4UmVsYXRpb25Db25j dXJyZW50bHkoY29uc3QgUmVpbmRleFN0bXQgKnN0bXQsIE9pZCByZWxhdGlvbk9pZCwgY29uc3Qg UmVpbgogCXsKIAkJT2lkCQkJaW5kZXhJZDsKIAkJT2lkCQkJYXV4SW5kZXhJZDsKKwkJT2lkCQkJ anVua0F1eEluZGV4SWQ7CiAJCU9pZAkJCXRhYmxlSWQ7CiAJCU9pZAkJCWFtSWQ7CiAJCWJvb2wJ CXNhZmU7CQkvKiBmb3Igc2V0X2luZGV4c2FmZV9wcm9jZmxhZ3MgKi8KQEAgLTQwNTgsNiArNDA2 MCw3IEBAIFJlaW5kZXhSZWxhdGlvbkNvbmN1cnJlbnRseShjb25zdCBSZWluZGV4U3RtdCAqc3Rt dCwgT2lkIHJlbGF0aW9uT2lkLCBjb25zdCBSZWluCiAJCVJlaW5kZXhJbmRleEluZm8gKm5ld2lk eDsKIAkJT2lkCQkJbmV3SW5kZXhJZDsKIAkJT2lkCQkJYXV4SW5kZXhJZDsKKwkJT2lkCQkJanVu a0F1eEluZGV4SWQ7CiAJCVJlbGF0aW9uCWluZGV4UmVsOwogCQlSZWxhdGlvbgloZWFwUmVsOwog CQlPaWQJCQlzYXZlX3VzZXJpZDsKQEAgLTQwNjUsNiArNDA2OCw3IEBAIFJlaW5kZXhSZWxhdGlv bkNvbmN1cnJlbnRseShjb25zdCBSZWluZGV4U3RtdCAqc3RtdCwgT2lkIHJlbGF0aW9uT2lkLCBj b25zdCBSZWluCiAJCWludAkJCXNhdmVfbmVzdGxldmVsOwogCQlSZWxhdGlvbgluZXdJbmRleFJl bDsKIAkJUmVsYXRpb24JYXV4SW5kZXhSZWw7CisJCVJlbGF0aW9uCWp1bmtBdXhJbmRleFJlbDsK IAkJTG9ja1JlbElkICAqbG9ja3JlbGlkOwogCQlPaWQJCQl0YWJsZXNwYWNlaWQ7CiAKQEAgLTQx MzgsMTIgKzQxNDIsMTcgQEAgUmVpbmRleFJlbGF0aW9uQ29uY3VycmVudGx5KGNvbnN0IFJlaW5k ZXhTdG10ICpzdG10LCBPaWQgcmVsYXRpb25PaWQsIGNvbnN0IFJlaW4KIAkJCQkJCQkJCQkJCSAg IHRhYmxlc3BhY2VpZCwKIAkJCQkJCQkJCQkJCSAgIGF1eENvbmN1cnJlbnROYW1lKTsKIAorCQkv KiBTZWFyY2ggZm9yIGF1eGlsaWFyeSBpbmRleCBmb3IgcmVpbmRleGVkIGluZGV4LCB0byBkcm9w IGl0ICovCisJCWp1bmtBdXhJbmRleElkID0gZ2V0X2F1eGlsaWFyeV9pbmRleChpZHgtPmluZGV4 SWQpOworCiAJCS8qCiAJCSAqIE5vdyBvcGVuIHRoZSByZWxhdGlvbiBvZiB0aGUgbmV3IGluZGV4 LCBhIHNlc3Npb24tbGV2ZWwgbG9jayBpcwogCQkgKiBhbHNvIG5lZWRlZCBvbiBpdC4KIAkJICov CiAJCW5ld0luZGV4UmVsID0gaW5kZXhfb3BlbihuZXdJbmRleElkLCBTaGFyZVVwZGF0ZUV4Y2x1 c2l2ZUxvY2spOwogCQlhdXhJbmRleFJlbCA9IGluZGV4X29wZW4oYXV4SW5kZXhJZCwgU2hhcmVV cGRhdGVFeGNsdXNpdmVMb2NrKTsKKwkJaWYgKE9pZElzVmFsaWQoanVua0F1eEluZGV4SWQpKQor CQkJanVua0F1eEluZGV4UmVsID0gaW5kZXhfb3BlbihqdW5rQXV4SW5kZXhJZCwgU2hhcmVVcGRh dGVFeGNsdXNpdmVMb2NrKTsKIAogCQkvKgogCQkgKiBTYXZlIHRoZSBsaXN0IG9mIE9JRHMgYW5k IGxvY2tzIGluIHByaXZhdGUgY29udGV4dApAQCAtNDE1Myw2ICs0MTYyLDcgQEAgUmVpbmRleFJl bGF0aW9uQ29uY3VycmVudGx5KGNvbnN0IFJlaW5kZXhTdG10ICpzdG10LCBPaWQgcmVsYXRpb25P aWQsIGNvbnN0IFJlaW4KIAkJbmV3aWR4ID0gcGFsbG9jX29iamVjdChSZWluZGV4SW5kZXhJbmZv KTsKIAkJbmV3aWR4LT5pbmRleElkID0gbmV3SW5kZXhJZDsKIAkJbmV3aWR4LT5hdXhJbmRleElk ID0gYXV4SW5kZXhJZDsKKwkJbmV3aWR4LT5qdW5rQXV4SW5kZXhJZCA9IGp1bmtBdXhJbmRleElk OwogCQluZXdpZHgtPnNhZmUgPSBpZHgtPnNhZmU7CiAJCW5ld2lkeC0+dGFibGVJZCA9IGlkeC0+ dGFibGVJZDsKIAkJbmV3aWR4LT5hbUlkID0gaWR4LT5hbUlkOwpAQCAtNDE3NCwxMCArNDE4NCwx OCBAQCBSZWluZGV4UmVsYXRpb25Db25jdXJyZW50bHkoY29uc3QgUmVpbmRleFN0bXQgKnN0bXQs IE9pZCByZWxhdGlvbk9pZCwgY29uc3QgUmVpbgogCQlsb2NrcmVsaWQgPSBwYWxsb2Nfb2JqZWN0 KExvY2tSZWxJZCk7CiAJCSpsb2NrcmVsaWQgPSBhdXhJbmRleFJlbC0+cmRfbG9ja0luZm8ubG9j a1JlbElkOwogCQlyZWxhdGlvbkxvY2tzID0gbGFwcGVuZChyZWxhdGlvbkxvY2tzLCBsb2NrcmVs aWQpOworCQlpZiAoT2lkSXNWYWxpZChqdW5rQXV4SW5kZXhJZCkpCisJCXsKKwkJCWxvY2tyZWxp ZCA9IHBhbGxvY19vYmplY3QoTG9ja1JlbElkKTsKKwkJCSpsb2NrcmVsaWQgPSBqdW5rQXV4SW5k ZXhSZWwtPnJkX2xvY2tJbmZvLmxvY2tSZWxJZDsKKwkJCXJlbGF0aW9uTG9ja3MgPSBsYXBwZW5k KHJlbGF0aW9uTG9ja3MsIGxvY2tyZWxpZCk7CisJCX0KIAogCQlNZW1vcnlDb250ZXh0U3dpdGNo VG8ob2xkY29udGV4dCk7CiAKIAkJaW5kZXhfY2xvc2UoaW5kZXhSZWwsIE5vTG9jayk7CisJCWlm IChPaWRJc1ZhbGlkKGp1bmtBdXhJbmRleElkKSkKKwkJCWluZGV4X2Nsb3NlKGp1bmtBdXhJbmRl eFJlbCwgTm9Mb2NrKTsKIAkJaW5kZXhfY2xvc2UoYXV4SW5kZXhSZWwsIE5vTG9jayk7CiAJCWlu ZGV4X2Nsb3NlKG5ld0luZGV4UmVsLCBOb0xvY2spOwogCkBAIC00MzY2LDcgKzQzODQsOCBAQCBS ZWluZGV4UmVsYXRpb25Db25jdXJyZW50bHkoY29uc3QgUmVpbmRleFN0bXQgKnN0bXQsIE9pZCBy ZWxhdGlvbk9pZCwgY29uc3QgUmVpbgogCiAJLyoKIAkgKiBBdCB0aGlzIG1vbWVudCBhbGwgdGFy Z2V0IGluZGV4ZXMgYXJlIG1hcmtlZCBhcyAicmVhZHktdG8taW5zZXJ0Ii4gU28sCi0JICogd2Ug YXJlIGZyZWUgdG8gc3RhcnQgcHJvY2VzcyBvZiBkcm9wcGluZyBhdXhpbGlhcnkgaW5kZXhlcy4K KwkgKiB3ZSBhcmUgZnJlZSB0byBzdGFydCBwcm9jZXNzIG9mIGRyb3BwaW5nIGF1eGlsaWFyeSBp bmRleGVzIC0gaW5jbHVkaW5nCisJICoganVuayBpbmRleGVzIGRldGVjdGVkIGVhcmxpZXIuCiAJ ICovCiAJZm9yZWFjaChsYywgbmV3SW5kZXhJZHMpCiAJewpAQCAtNDM4OSw2ICs0NDA4LDkgQEAg UmVpbmRleFJlbGF0aW9uQ29uY3VycmVudGx5KGNvbnN0IFJlaW5kZXhTdG10ICpzdG10LCBPaWQg cmVsYXRpb25PaWQsIGNvbnN0IFJlaW4KIAkJICovCiAJCVB1c2hBY3RpdmVTbmFwc2hvdChHZXRU cmFuc2FjdGlvblNuYXBzaG90KCkpOwogCQlpbmRleF9zZXRfc3RhdGVfZmxhZ3MobmV3aWR4LT5h dXhJbmRleElkLCBJTkRFWF9EUk9QX0NMRUFSX1JFQURZKTsKKwkJLyogRW5zdXJlIHRoZSBqdW5r IGluZGV4IGlzIG1hcmtlZCBhcyBub24tcmVhZHkgKi8KKwkJaWYgKE9pZElzVmFsaWQobmV3aWR4 LT5qdW5rQXV4SW5kZXhJZCkpCisJCQlpbmRleF9zZXRfc3RhdGVfZmxhZ3MobmV3aWR4LT5qdW5r QXV4SW5kZXhJZCwgSU5ERVhfRFJPUF9DTEVBUl9SRUFEWSk7CiAJCVBvcEFjdGl2ZVNuYXBzaG90 KCk7CiAKIAkJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7CkBAIC00NjA4LDYgKzQ2MzAsOCBA QCBSZWluZGV4UmVsYXRpb25Db25jdXJyZW50bHkoY29uc3QgUmVpbmRleFN0bXQgKnN0bXQsIE9p ZCByZWxhdGlvbk9pZCwgY29uc3QgUmVpbgogCQlQdXNoQWN0aXZlU25hcHNob3QoR2V0VHJhbnNh Y3Rpb25TbmFwc2hvdCgpKTsKIAogCQlpbmRleF9jb25jdXJyZW50bHlfc2V0X2RlYWQobmV3aWR4 LT50YWJsZUlkLCBuZXdpZHgtPmF1eEluZGV4SWQpOworCQlpZiAoT2lkSXNWYWxpZChuZXdpZHgt Pmp1bmtBdXhJbmRleElkKSkKKwkJCWluZGV4X2NvbmN1cnJlbnRseV9zZXRfZGVhZChuZXdpZHgt PnRhYmxlSWQsIG5ld2lkeC0+anVua0F1eEluZGV4SWQpOwogCiAJCVBvcEFjdGl2ZVNuYXBzaG90 KCk7CiAJfQpAQCAtNDY1OSw2ICs0NjgzLDEzIEBAIFJlaW5kZXhSZWxhdGlvbkNvbmN1cnJlbnRs eShjb25zdCBSZWluZGV4U3RtdCAqc3RtdCwgT2lkIHJlbGF0aW9uT2lkLCBjb25zdCBSZWluCiAJ CQlvYmplY3Qub2JqZWN0U3ViSWQgPSAwOwogCiAJCQlhZGRfZXhhY3Rfb2JqZWN0X2FkZHJlc3Mo Jm9iamVjdCwgb2JqZWN0cyk7CisKKwkJCWlmIChPaWRJc1ZhbGlkKGlkeC0+anVua0F1eEluZGV4 SWQpKQorCQkJeworCQkJCW9iamVjdC5vYmplY3RJZCA9IGlkeC0+anVua0F1eEluZGV4SWQ7CisJ CQkJb2JqZWN0Lm9iamVjdFN1YklkID0gMDsKKwkJCQlhZGRfZXhhY3Rfb2JqZWN0X2FkZHJlc3Mo Jm9iamVjdCwgb2JqZWN0cyk7CisJCQl9CiAJCX0KIAogCQkvKgpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNt ZHMuYwppbmRleCA2N2U0MmU1ZGYyOS4uODdhYmEyNDViODUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxl Y21kcy5jCkBAIC0xNTY3LDYgKzE1NjcsOCBAQCBSZW1vdmVSZWxhdGlvbnMoRHJvcFN0bXQgKmRy b3ApCiAJTGlzdENlbGwgICAqY2VsbDsKIAlpbnQJCQlmbGFncyA9IDA7CiAJTE9DS01PREUJbG9j a21vZGUgPSBBY2Nlc3NFeGNsdXNpdmVMb2NrOworCU1lbW9yeUNvbnRleHQgcHJpdmF0ZV9jb250 ZXh0LAorCQkJCSAgb2xkY29udGV4dDsKIAogCS8qIERST1AgQ09OQ1VSUkVOVExZIHVzZXMgYSB3 ZWFrZXIgbG9jaywgYW5kIGhhcyBzb21lIHJlc3RyaWN0aW9ucyAqLwogCWlmIChkcm9wLT5jb25j dXJyZW50KQpAQCAtMTYzMSw5ICsxNjMzLDIwIEBAIFJlbW92ZVJlbGF0aW9ucyhEcm9wU3RtdCAq ZHJvcCkKIAkJCXJlbGtpbmQgPSAwOwkJLyoga2VlcCBjb21waWxlciBxdWlldCAqLwogCQkJYnJl YWs7CiAJfQorCS8qCisJICogQ3JlYXRlIGEgbWVtb3J5IGNvbnRleHQgdGhhdCB3aWxsIHN1cnZp dmUgZm9yY2VkIHRyYW5zYWN0aW9uIGNvbW1pdHMgd2UKKwkgKiBtYXkgbmVlZCB0byBkbyBiZWxv dyAoaW4gY2FzZSBvZiBjb25jdXJyZW50IGluZGV4IGRyb3ApLgorCSAqIFNpbmNlIGl0IGlzIGEg Y2hpbGQgb2YgUG9ydGFsQ29udGV4dCwgaXQgd2lsbCBnbyBhd2F5IGV2ZW50dWFsbHkgZXZlbiBp ZgorCSAqIHdlIHN1ZmZlciBhbiBlcnJvcjsgdGhlcmUncyBubyBuZWVkIGZvciBzcGVjaWFsIGFi b3J0IGNsZWFudXAgbG9naWMuCisJICovCisJcHJpdmF0ZV9jb250ZXh0ID0gQWxsb2NTZXRDb250 ZXh0Q3JlYXRlKFBvcnRhbENvbnRleHQsCisJCQkJCQkJCQkJCSJSZW1vdmVSZWxhdGlvbnMiLAor CQkJCQkJCQkJCQlBTExPQ1NFVF9TTUFMTF9TSVpFUyk7CiAKKwlvbGRjb250ZXh0ID0gTWVtb3J5 Q29udGV4dFN3aXRjaFRvKHByaXZhdGVfY29udGV4dCk7CiAJLyogTG9jayBhbmQgdmFsaWRhdGUg ZWFjaCByZWxhdGlvbjsgYnVpbGQgYSBsaXN0IG9mIG9iamVjdCBhZGRyZXNzZXMgKi8KIAlvYmpl Y3RzID0gbmV3X29iamVjdF9hZGRyZXNzZXMoKTsKKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xk Y29udGV4dCk7CiAKIAlmb3JlYWNoKGNlbGwsIGRyb3AtPm9iamVjdHMpCiAJewpAQCAtMTY4NSw2 ICsxNjk4LDM4IEBAIFJlbW92ZVJlbGF0aW9ucyhEcm9wU3RtdCAqZHJvcCkKIAkJCWZsYWdzIHw9 IFBFUkZPUk1fREVMRVRJT05fQ09OQ1VSUkVOVExZOwogCQl9CiAKKwkJLyoKKwkJICogQ29uY3Vy cmVudCBpbmRleCBkcm9wIHJlcXVpcmVzIGl0IHRvIGJlIHRoZSBmaXJzdCB0cmFuc2FjdGlvbi4g QnV0IGluCisJCSAqIGNhc2Ugd2UgaGF2ZSBqdW5rIGF1eGlsaWFyeSBpbmRleCAtIHdlIHdhbnQg dG8gZHJvcCBpdCB0b28gKGFuZCBhbHNvCisJCSAqIGluIGEgY29uY3VycmVudCB3YXkpLiBJbiB0 aGlzIGNhc2UgcGVyZm9ybSBzaWxlbnQgaW50ZXJuYWwgZGVsZXRpb24KKwkJICogb2YgYXV4aWxp YXJ5IGluZGV4LCBhbmQgcmVzdG9yZSB0cmFuc2FjdGlvbiBzdGF0ZS4gSXQgaXMgZmluZSB0byBk byBpdAorCQkgKiBpbiB0aGUgbG9vcCBiZWNhdXNlIHRoZXJlIGlzIG9ubHkgc2luZ2xlIGVsZW1l bnQgaW4gZHJvcC0+b2JqZWN0cy4KKwkJICovCisJCWlmICgoZmxhZ3MgJiBQRVJGT1JNX0RFTEVU SU9OX0NPTkNVUlJFTlRMWSkgIT0gMCAmJgorCQkJc3RhdGUuYWN0dWFsX3JlbGtpbmQgPT0gUkVM S0lORF9JTkRFWCkKKwkJeworCQkJT2lkIGp1bmtBdXhJbmRleE9pZCA9IGdldF9hdXhpbGlhcnlf aW5kZXgocmVsT2lkKTsKKwkJCWlmIChPaWRJc1ZhbGlkKGp1bmtBdXhJbmRleE9pZCkpCisJCQl7 CisJCQkJT2JqZWN0QWRkcmVzcyBvYmplY3Q7CisJCQkJb2JqZWN0LmNsYXNzSWQgPSBSZWxhdGlv blJlbGF0aW9uSWQ7CisJCQkJb2JqZWN0Lm9iamVjdElkID0ganVua0F1eEluZGV4T2lkOworCQkJ CW9iamVjdC5vYmplY3RTdWJJZCA9IDA7CisJCQkJcGVyZm9ybURlbGV0aW9uKCZvYmplY3QsIERS T1BfUkVTVFJJQ1QsCisJCQkJCQkJCQkJIFBFUkZPUk1fREVMRVRJT05fQ09OQ1VSUkVOVExZIHwK KwkJCQkJCQkJCQkgUEVSRk9STV9ERUxFVElPTl9JTlRFUk5BTCB8CisJCQkJCQkJCQkJIFBFUkZP Uk1fREVMRVRJT05fUVVJRVRMWSk7CisJCQkJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7CisJ CQkJTWVtb3J5Q29udGV4dERlbGV0ZShwcml2YXRlX2NvbnRleHQpOworCisJCQkJLyogQW5kIHN0 YXJ0IGFnYWluIC0gbm93IHdpdGhvdXQgYXV4aWxpYXJ5IGluZGV4LiAqLworCQkJCVN0YXJ0VHJh bnNhY3Rpb25Db21tYW5kKCk7CisJCQkJUHVzaEFjdGl2ZVNuYXBzaG90KEdldFRyYW5zYWN0aW9u U25hcHNob3QoKSk7CisJCQkJUmVtb3ZlUmVsYXRpb25zKGRyb3ApOworCQkJCXJldHVybjsKKwkJ CX0KKwkJfQorCiAJCS8qCiAJCSAqIENvbmN1cnJlbnQgaW5kZXggZHJvcCBjYW5ub3QgYmUgdXNl ZCB3aXRoIHBhcnRpdGlvbmVkIGluZGV4ZXMsCiAJCSAqIGVpdGhlci4KQEAgLTE3MTMsMTIgKzE3 NTgsMTcgQEAgUmVtb3ZlUmVsYXRpb25zKERyb3BTdG10ICpkcm9wKQogCQlvYmoub2JqZWN0SWQg PSByZWxPaWQ7CiAJCW9iai5vYmplY3RTdWJJZCA9IDA7CiAKKwkJb2xkY29udGV4dCA9IE1lbW9y eUNvbnRleHRTd2l0Y2hUbyhwcml2YXRlX2NvbnRleHQpOwogCQlhZGRfZXhhY3Rfb2JqZWN0X2Fk ZHJlc3MoJm9iaiwgb2JqZWN0cyk7CisJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0 KTsKIAl9CiAKKwkvKiBEZWxldGlvbiBtYXkgaW52b2x2ZSBtdWx0aXBsZSBjb21taXRzLCBzbywg c3dpdGNoIHRvIG1lbW9yeSBjb250ZXh0ICovCisJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRT d2l0Y2hUbyhwcml2YXRlX2NvbnRleHQpOwogCXBlcmZvcm1NdWx0aXBsZURlbGV0aW9ucyhvYmpl Y3RzLCBkcm9wLT5iZWhhdmlvciwgZmxhZ3MpOworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRj b250ZXh0KTsKIAotCWZyZWVfb2JqZWN0X2FkZHJlc3NlcyhvYmplY3RzKTsKKwlNZW1vcnlDb250 ZXh0RGVsZXRlKHByaXZhdGVfY29udGV4dCk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9ub2Rlcy9tYWtlZnVuY3MuYyBiL3NyYy9iYWNrZW5kL25vZGVzL21ha2VmdW5jcy5jCmlu ZGV4IDg0ZjdjZjk4MjRlLi5jNTQ3NDhmZjY0NCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvbm9k ZXMvbWFrZWZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvbm9kZXMvbWFrZWZ1bmNzLmMKQEAgLTgz NCw3ICs4MzQsNyBAQCBJbmRleEluZm8gKgogbWFrZUluZGV4SW5mbyhpbnQgbnVtYXR0cnMsIGlu dCBudW1rZXlhdHRycywgT2lkIGFtb2lkLCBMaXN0ICpleHByZXNzaW9ucywKIAkJCSAgTGlzdCAq cHJlZGljYXRlcywgYm9vbCB1bmlxdWUsIGJvb2wgbnVsbHNfbm90X2Rpc3RpbmN0LAogCQkJICBi b29sIGlzcmVhZHksIGJvb2wgY29uY3VycmVudCwgYm9vbCBzdW1tYXJpemluZywKLQkJCSAgYm9v bCB3aXRob3V0b3ZlcmxhcHMsIGJvb2wgYXV4aWxpYXJ5KQorCQkJICBib29sIHdpdGhvdXRvdmVy bGFwcywgYm9vbCBhdXhpbGlhcnksIE9pZCBhdXhpbGlhcnlfZm9yX2luZGV4X2lkKQogewogCUlu ZGV4SW5mbyAgKm4gPSBtYWtlTm9kZShJbmRleEluZm8pOwogCkBAIC04NTEsNiArODUxLDcgQEAg bWFrZUluZGV4SW5mbyhpbnQgbnVtYXR0cnMsIGludCBudW1rZXlhdHRycywgT2lkIGFtb2lkLCBM aXN0ICpleHByZXNzaW9ucywKIAluLT5paV9TdW1tYXJpemluZyA9IHN1bW1hcml6aW5nOwogCW4t PmlpX1dpdGhvdXRPdmVybGFwcyA9IHdpdGhvdXRvdmVybGFwczsKIAluLT5paV9BdXhpbGlhcnkg PSBhdXhpbGlhcnk7CisJbi0+aWlfQXV4aWxpYXJ5Rm9ySW5kZXhJZCA9IGF1eGlsaWFyeV9mb3Jf aW5kZXhfaWQ7CiAKIAkvKiBzdW1tYXJpemluZyBpbmRleGVzIGNhbm5vdCBjb250YWluIG5vbi1r ZXkgYXR0cmlidXRlcyAqLwogCUFzc2VydCghc3VtbWFyaXppbmcgfHwgKG51bWtleWF0dHJzID09 IG51bWF0dHJzKSk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL2RlcGVuZGVuY3ku aCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvZGVwZW5kZW5jeS5oCmluZGV4IDJmM2MxZWFlM2M3Li42 YWUyMTBjNTg0ZSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9kZXBlbmRlbmN5LmgK KysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9kZXBlbmRlbmN5LmgKQEAgLTE5Myw2ICsxOTMsNyBA QCBleHRlcm4gTGlzdCAqZ2V0T3duZWRTZXF1ZW5jZXMoT2lkIHJlbGlkKTsKIGV4dGVybiBPaWQJ Z2V0SWRlbnRpdHlTZXF1ZW5jZShSZWxhdGlvbiByZWwsIEF0dHJOdW1iZXIgYXR0bnVtLCBib29s IG1pc3Npbmdfb2spOwogCiBleHRlcm4gT2lkCWdldF9pbmRleF9jb25zdHJhaW50KE9pZCBpbmRl eElkKTsKK2V4dGVybiBPaWQJZ2V0X2F1eGlsaWFyeV9pbmRleChPaWQgaW5kZXhJZCk7CiAKIGV4 dGVybiBMaXN0ICpnZXRfaW5kZXhfcmVmX2NvbnN0cmFpbnRzKE9pZCBpbmRleElkKTsKIApkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rl cy9leGVjbm9kZXMuaAppbmRleCAwZjgzNDg4OTkxMi4uZjk3ZmNiNzg3MmMgMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL2V4 ZWNub2Rlcy5oCkBAIC0yMjksNiArMjI5LDggQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhJbmZvCiAJ aW50CQkJaWlfUGFyYWxsZWxXb3JrZXJzOwogCS8qIGlzIGF1eGlsaWFyeSBmb3IgY29uY3VycmVu dCBpbmRleCBidWlsZD8gKi8KIAlib29sCQlpaV9BdXhpbGlhcnk7CisJLyogaWYgY3JlYXRpbmcg YW4gYXV4aWxpYXJ5IGluZGV4LCB0aGUgT0lEIG9mIHRoZSBtYWluIGluZGV4OyBvdGhlcndpc2Ug SW52YWxpZE9pZC4gKi8KKwlPaWQJCQlpaV9BdXhpbGlhcnlGb3JJbmRleElkOwogCS8qIE9pZCBv ZiBpbmRleCBBTSAqLwogCU9pZAkJCWlpX0FtOwogCS8qIHByaXZhdGUgY2FjaGUgYXJlYSBmb3Ig aW5kZXggQU0gKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL21ha2VmdW5jcy5oIGIv c3JjL2luY2x1ZGUvbm9kZXMvbWFrZWZ1bmNzLmgKaW5kZXggY2Q3ZjFlYjA1OTIuLjNhNzA0Nzgx YzhiIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9tYWtlZnVuY3MuaAorKysgYi9zcmMv aW5jbHVkZS9ub2Rlcy9tYWtlZnVuY3MuaApAQCAtMTAwLDcgKzEwMCw3IEBAIGV4dGVybiBJbmRl eEluZm8gKm1ha2VJbmRleEluZm8oaW50IG51bWF0dHJzLCBpbnQgbnVta2V5YXR0cnMsIE9pZCBh bW9pZCwKIAkJCQkJCQkJYm9vbCB1bmlxdWUsIGJvb2wgbnVsbHNfbm90X2Rpc3RpbmN0LAogCQkJ CQkJCQlib29sIGlzcmVhZHksIGJvb2wgY29uY3VycmVudCwKIAkJCQkJCQkJYm9vbCBzdW1tYXJp emluZywgYm9vbCB3aXRob3V0b3ZlcmxhcHMsCi0JCQkJCQkJCWJvb2wgYXV4aWxpYXJ5KTsKKwkJ CQkJCQkJYm9vbCBhdXhpbGlhcnksIE9pZCBhdXhpbGlhcnlfZm9yX2luZGV4X2lkKTsKIAogZXh0 ZXJuIE5vZGUgKm1ha2VTdHJpbmdDb25zdChjaGFyICpzdHIsIGludCBsb2NhdGlvbik7CiBleHRl cm4gRGVmRWxlbSAqbWFrZURlZkVsZW0oY2hhciAqbmFtZSwgTm9kZSAqYXJnLCBpbnQgbG9jYXRp b24pOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9jcmVhdGVfaW5kZXgu b3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9jcmVhdGVfaW5kZXgub3V0CmluZGV4IGQx NzIzZjQ3ZTg5Li4yZDZhYmIxNWE4OSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC9jcmVhdGVfaW5kZXgub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY3Jl YXRlX2luZGV4Lm91dApAQCAtMzI3OSwyMCArMzI3OSwxMDkgQEAgRVJST1I6ICByZWluZGV4IG9m IGF1eGlsaWFyeSBpbmRleCAiYXV4X2luZGV4X2luZDZfY2NhdXgiIG5vdCBzdXBwb3J0ZWQKIFJF SU5ERVggSU5ERVggQ09OQ1VSUkVOVExZIGF1eF9pbmRleF9pbmQ2X2NjYXV4OwogRVJST1I6ICBy ZWluZGV4IG9mIGF1eGlsaWFyeSBpbmRleCAiYXV4X2luZGV4X2luZDZfY2NhdXgiIG5vdCBzdXBw b3J0ZWQKIC0tIFRoaXMgbWFrZXMgdGhlIHByZXZpb3VzIGZhaWx1cmUgZ28gYXdheSwgc28gdGhl IGluZGV4IGNhbiBiZWNvbWUgdmFsaWQuCi1ERUxFVEUgRlJPTSBjb25jdXJfcmVpbmRleF90YWI0 IFdIRVJFIGMxID0gMTsKLUVSUk9SOiAgcmVsYXRpb24gImNvbmN1cl9yZWluZGV4X3RhYjQiIGRv ZXMgbm90IGV4aXN0Ci1MSU5FIDE6IERFTEVURSBGUk9NIGNvbmN1cl9yZWluZGV4X3RhYjQgV0hF UkUgYzEgPSAxOwotICAgICAgICAgICAgICAgICAgICBeCitERUxFVEUgRlJPTSBhdXhfaW5kZXhf dGFiNSBXSEVSRSBjMSA9IDE7CistLSBTaG91bGQgYmUgc2tpcHBlZCBkdXJpbmcgcmVpbmRleCBh bmQgZHJvcHBlZAorUkVJTkRFWCBJTkRFWCBhdXhfaW5kZXhfaW5kNjsKKy0tIE1ha2Ugc3VyZSBh dXggaW5kZXggaXMgZHJvcHBlZAorXGQgYXV4X2luZGV4X3RhYjUKKyAgICAgICAgICAgVGFibGUg InB1YmxpYy5hdXhfaW5kZXhfdGFiNSIKKyBDb2x1bW4gfCAgVHlwZSAgIHwgQ29sbGF0aW9uIHwg TnVsbGFibGUgfCBEZWZhdWx0IAorLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0t LS0tLS0rLS0tLS0tLS0tCisgYzEgICAgIHwgaW50ZWdlciB8ICAgICAgICAgICB8ICAgICAgICAg IHwgCitJbmRleGVzOgorICAgICJhdXhfaW5kZXhfaW5kNiIgVU5JUVVFLCBidHJlZSAoYzEpCisK K0RST1AgSU5ERVggYXV4X2luZGV4X2luZDY7CistLSBJbnNlcnQgZHVwbGljYXRlcyBhZ2Fpbgor SU5TRVJUIElOVE8gYXV4X2luZGV4X3RhYjUgVkFMVUVTICgxKSwgKDEpOworLS0gQ3JlYXRlIGlu dmFsaWQgaW5kZXggYWdhaW4KK0NSRUFURSBVTklRVUUgSU5ERVggQ09OQ1VSUkVOVExZIGF1eF9p bmRleF9pbmQ2IE9OIGF1eF9pbmRleF90YWI1IChjMSk7CitFUlJPUjogIGNvdWxkIG5vdCBjcmVh dGUgdW5pcXVlIGluZGV4ICJhdXhfaW5kZXhfaW5kNiIKK0RFVEFJTDogIEtleSAoYzEpPSgxKSBp cyBkdXBsaWNhdGVkLgorLS0gVGhpcyBtYWtlcyB0aGUgcHJldmlvdXMgZmFpbHVyZSBnbyBhd2F5 LCBzbyB0aGUgaW5kZXggY2FuIGJlY29tZSB2YWxpZC4KK0RFTEVURSBGUk9NIGF1eF9pbmRleF90 YWI1IFdIRVJFIGMxID0gMTsKIC0tIFNob3VsZCBiZSBza2lwcGVkIGR1cmluZyByZWluZGV4Ci1S RUlOREVYIFRBQkxFIGF1eF9pbmRleF90YWI1OwotRVJST1I6ICBjb3VsZCBub3QgY3JlYXRlIHVu aXF1ZSBpbmRleCAiYXV4X2luZGV4X2luZDYiCi1ERVRBSUw6ICBLZXkgKGMxKT0oMSkgaXMgZHVw bGljYXRlZC4KLS0tIFNob3VsZCBiZSBza2lwcGVkIGR1cmluZyBjb25jdXJyZW50IHJlaW5kZXgK IFJFSU5ERVggVEFCTEUgQ09OQ1VSUkVOVExZIGF1eF9pbmRleF90YWI1OwogV0FSTklORzogIHNr aXBwaW5nIHJlaW5kZXggb2YgaW52YWxpZCBpbmRleCAicHVibGljLmF1eF9pbmRleF9pbmQ2Igog SElOVDogIFVzZSBEUk9QIElOREVYIG9yIFJFSU5ERVggSU5ERVguCiBXQVJOSU5HOiAgc2tpcHBp bmcgcmVpbmRleCBvZiBhdXhpbGlhcnkgaW5kZXggInB1YmxpYy5hdXhfaW5kZXhfaW5kNl9jY2F1 eCIKIE5PVElDRTogIHRhYmxlICJhdXhfaW5kZXhfdGFiNSIgaGFzIG5vIGluZGV4ZXMgdGhhdCBj YW4gYmUgcmVpbmRleGVkIGNvbmN1cnJlbnRseQorLS0gTWFrZSBzdXJlIGl0IGlzIHN0aWxsIGV4 aXN0cworXGQgYXV4X2luZGV4X3RhYjUKKyAgICAgICAgICAgVGFibGUgInB1YmxpYy5hdXhfaW5k ZXhfdGFiNSIKKyBDb2x1bW4gfCAgVHlwZSAgIHwgQ29sbGF0aW9uIHwgTnVsbGFibGUgfCBEZWZh dWx0IAorLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0t CisgYzEgICAgIHwgaW50ZWdlciB8ICAgICAgICAgICB8ICAgICAgICAgIHwgCitJbmRleGVzOgor ICAgICJhdXhfaW5kZXhfaW5kNiIgVU5JUVVFLCBidHJlZSAoYzEpIElOVkFMSUQKKyAgICAiYXV4 X2luZGV4X2luZDZfY2NhdXgiIHN0aXIgKGMxKSBJTlZBTElECisKKy0tIFNob3VsZCBiZSBza2lw cGVkIGR1cmluZyByZWluZGV4IGFuZCBkcm9wcGVkCitSRUlOREVYIFRBQkxFIGF1eF9pbmRleF90 YWI1OworLS0gTWFrZSBzdXJlIGF1eCBpbmRleCBpcyBkcm9wcGVkCitcZCBhdXhfaW5kZXhfdGFi NQorICAgICAgICAgICBUYWJsZSAicHVibGljLmF1eF9pbmRleF90YWI1IgorIENvbHVtbiB8ICBU eXBlICAgfCBDb2xsYXRpb24gfCBOdWxsYWJsZSB8IERlZmF1bHQgCistLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0KKyBjMSAgICAgfCBpbnRlZ2VyIHwg ICAgICAgICAgIHwgICAgICAgICAgfCAKK0luZGV4ZXM6CisgICAgImF1eF9pbmRleF9pbmQ2IiBV TklRVUUsIGJ0cmVlIChjMSkKKworRFJPUCBJTkRFWCBhdXhfaW5kZXhfaW5kNjsKKy0tIEluc2Vy dCBkdXBsaWNhdGVzIGFnYWluCitJTlNFUlQgSU5UTyBhdXhfaW5kZXhfdGFiNSBWQUxVRVMgKDEp LCAoMSk7CistLSBDcmVhdGUgaW52YWxpZCBpbmRleCBhZ2FpbgorQ1JFQVRFIFVOSVFVRSBJTkRF WCBDT05DVVJSRU5UTFkgYXV4X2luZGV4X2luZDYgT04gYXV4X2luZGV4X3RhYjUgKGMxKTsKK0VS Uk9SOiAgY291bGQgbm90IGNyZWF0ZSB1bmlxdWUgaW5kZXggImF1eF9pbmRleF9pbmQ2IgorREVU QUlMOiAgS2V5IChjMSk9KDEpIGlzIGR1cGxpY2F0ZWQuCistLSBUaGlzIG1ha2VzIHRoZSBwcmV2 aW91cyBmYWlsdXJlIGdvIGF3YXksIHNvIHRoZSBpbmRleCBjYW4gYmVjb21lIHZhbGlkLgorREVM RVRFIEZST00gYXV4X2luZGV4X3RhYjUgV0hFUkUgYzEgPSAxOworLS0gU2hvdWxkIGJlIHNraXBw ZWQgZHVyaW5nIHJlaW5kZXggYW5kIGRyb3BwZWQKK1JFSU5ERVggSU5ERVggQ09OQ1VSUkVOVExZ IGF1eF9pbmRleF9pbmQ2OworLS0gTWFrZSBzdXJlIGF1eCBpbmRleCBpcyBkcm9wcGVkCitcZCBh dXhfaW5kZXhfdGFiNQorICAgICAgICAgICBUYWJsZSAicHVibGljLmF1eF9pbmRleF90YWI1Igor IENvbHVtbiB8ICBUeXBlICAgfCBDb2xsYXRpb24gfCBOdWxsYWJsZSB8IERlZmF1bHQgCistLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0KKyBjMSAgICAg fCBpbnRlZ2VyIHwgICAgICAgICAgIHwgICAgICAgICAgfCAKK0luZGV4ZXM6CisgICAgImF1eF9p bmRleF9pbmQ2IiBVTklRVUUsIGJ0cmVlIChjMSkKKworRFJPUCBJTkRFWCBhdXhfaW5kZXhfaW5k NjsKKy0tIEluc2VydCBkdXBsaWNhdGVzIGFnYWluCitJTlNFUlQgSU5UTyBhdXhfaW5kZXhfdGFi NSBWQUxVRVMgKDEpLCAoMSk7CistLSBDcmVhdGUgaW52YWxpZCBpbmRleCBhZ2FpbgorQ1JFQVRF IFVOSVFVRSBJTkRFWCBDT05DVVJSRU5UTFkgYXV4X2luZGV4X2luZDYgT04gYXV4X2luZGV4X3Rh YjUgKGMxKTsKK0VSUk9SOiAgY291bGQgbm90IGNyZWF0ZSB1bmlxdWUgaW5kZXggImF1eF9pbmRl eF9pbmQ2IgorREVUQUlMOiAgS2V5IChjMSk9KDEpIGlzIGR1cGxpY2F0ZWQuCistLSBUaGlzIG1h a2VzIHRoZSBwcmV2aW91cyBmYWlsdXJlIGdvIGF3YXksIHNvIHRoZSBpbmRleCBjYW4gYmVjb21l IHZhbGlkLgorREVMRVRFIEZST00gYXV4X2luZGV4X3RhYjUgV0hFUkUgYzEgPSAxOworLS0gRHJv cCBtYWluIGluZGV4IENPTkNVUlJFTlRMWQorRFJPUCBJTkRFWCBDT05DVVJSRU5UTFkgYXV4X2lu ZGV4X2luZDY7CistLSBNYWtlIHN1cmUgYXV4aWxpYXJ5IGluZGV4IGRyb3BwZWQgdG9vCitcZCBh dXhfaW5kZXhfdGFiNQorICAgICAgICAgICBUYWJsZSAicHVibGljLmF1eF9pbmRleF90YWI1Igor IENvbHVtbiB8ICBUeXBlICAgfCBDb2xsYXRpb24gfCBOdWxsYWJsZSB8IERlZmF1bHQgCistLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0KKyBjMSAgICAg fCBpbnRlZ2VyIHwgICAgICAgICAgIHwgICAgICAgICAgfCAKKworRFJPUCBJTkRFWCBhdXhfaW5k ZXhfaW5kNjsKK0VSUk9SOiAgaW5kZXggImF1eF9pbmRleF9pbmQ2IiBkb2VzIG5vdCBleGlzdAor LS0gSW5zZXJ0IGR1cGxpY2F0ZXMgYWdhaW4KK0lOU0VSVCBJTlRPIGF1eF9pbmRleF90YWI1IFZB TFVFUyAoMSksICgxKTsKKy0tIENyZWF0ZSBpbnZhbGlkIGluZGV4IGFnYWluCitDUkVBVEUgVU5J UVVFIElOREVYIENPTkNVUlJFTlRMWSBhdXhfaW5kZXhfaW5kNiBPTiBhdXhfaW5kZXhfdGFiNSAo YzEpOworRVJST1I6ICBjb3VsZCBub3QgY3JlYXRlIHVuaXF1ZSBpbmRleCAiYXV4X2luZGV4X2lu ZDYiCitERVRBSUw6ICBLZXkgKGMxKT0oMSkgaXMgZHVwbGljYXRlZC4KKy0tIERyb3AgbWFpbiBp bmRleAorRFJPUCBJTkRFWCBhdXhfaW5kZXhfaW5kNjsKKy0tIE1ha2Ugc3VyZSBhdXhpbGlhcnkg aW5kZXggZHJvcHBlZCB0b28KK1xkIGF1eF9pbmRleF90YWI1CisgICAgICAgICAgIFRhYmxlICJw dWJsaWMuYXV4X2luZGV4X3RhYjUiCisgQ29sdW1uIHwgIFR5cGUgICB8IENvbGxhdGlvbiB8IE51 bGxhYmxlIHwgRGVmYXVsdCAKKy0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0t LS0tKy0tLS0tLS0tLQorIGMxICAgICB8IGludGVnZXIgfCAgICAgICAgICAgfCAgICAgICAgICB8 IAorCiBEUk9QIFRBQkxFIGF1eF9pbmRleF90YWI1OwogLS0gQ2hlY2sgaGFuZGxpbmcgb2YgaW5k ZXhlcyB3aXRoIGV4cHJlc3Npb25zIGFuZCBwcmVkaWNhdGVzLiAgVGhlCiAtLSBkZWZpbml0aW9u cyBvZiB0aGUgcmVidWlsdCBpbmRleGVzIHNob3VsZCBtYXRjaCB0aGUgb3JpZ2luYWwKZGlmZiAt LWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2NyZWF0ZV9pbmRleC5zcWwgYi9zcmMvdGVzdC9y ZWdyZXNzL3NxbC9jcmVhdGVfaW5kZXguc3FsCmluZGV4IGMyYzFiMDMxNTI3Li5mZDk2ZDgwYWJi YyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvY3JlYXRlX2luZGV4LnNxbAorKysg Yi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9jcmVhdGVfaW5kZXguc3FsCkBAIC0xMzQ0LDExICsxMzQ0 LDYyIEBAIFJFSU5ERVggSU5ERVggYXV4X2luZGV4X2luZDZfY2NhdXg7CiAtLSBDb25jdXJyZW50 bHkgYWxzbwogUkVJTkRFWCBJTkRFWCBDT05DVVJSRU5UTFkgYXV4X2luZGV4X2luZDZfY2NhdXg7 CiAtLSBUaGlzIG1ha2VzIHRoZSBwcmV2aW91cyBmYWlsdXJlIGdvIGF3YXksIHNvIHRoZSBpbmRl eCBjYW4gYmVjb21lIHZhbGlkLgotREVMRVRFIEZST00gY29uY3VyX3JlaW5kZXhfdGFiNCBXSEVS RSBjMSA9IDE7CitERUxFVEUgRlJPTSBhdXhfaW5kZXhfdGFiNSBXSEVSRSBjMSA9IDE7CistLSBT aG91bGQgYmUgc2tpcHBlZCBkdXJpbmcgcmVpbmRleCBhbmQgZHJvcHBlZAorUkVJTkRFWCBJTkRF WCBhdXhfaW5kZXhfaW5kNjsKKy0tIE1ha2Ugc3VyZSBhdXggaW5kZXggaXMgZHJvcHBlZAorXGQg YXV4X2luZGV4X3RhYjUKK0RST1AgSU5ERVggYXV4X2luZGV4X2luZDY7CisKKy0tIEluc2VydCBk dXBsaWNhdGVzIGFnYWluCitJTlNFUlQgSU5UTyBhdXhfaW5kZXhfdGFiNSBWQUxVRVMgKDEpLCAo MSk7CistLSBDcmVhdGUgaW52YWxpZCBpbmRleCBhZ2FpbgorQ1JFQVRFIFVOSVFVRSBJTkRFWCBD T05DVVJSRU5UTFkgYXV4X2luZGV4X2luZDYgT04gYXV4X2luZGV4X3RhYjUgKGMxKTsKKy0tIFRo aXMgbWFrZXMgdGhlIHByZXZpb3VzIGZhaWx1cmUgZ28gYXdheSwgc28gdGhlIGluZGV4IGNhbiBi ZWNvbWUgdmFsaWQuCitERUxFVEUgRlJPTSBhdXhfaW5kZXhfdGFiNSBXSEVSRSBjMSA9IDE7CiAt LSBTaG91bGQgYmUgc2tpcHBlZCBkdXJpbmcgcmVpbmRleAotUkVJTkRFWCBUQUJMRSBhdXhfaW5k ZXhfdGFiNTsKLS0tIFNob3VsZCBiZSBza2lwcGVkIGR1cmluZyBjb25jdXJyZW50IHJlaW5kZXgK IFJFSU5ERVggVEFCTEUgQ09OQ1VSUkVOVExZIGF1eF9pbmRleF90YWI1OworLS0gTWFrZSBzdXJl IGl0IGlzIHN0aWxsIGV4aXN0cworXGQgYXV4X2luZGV4X3RhYjUKKy0tIFNob3VsZCBiZSBza2lw cGVkIGR1cmluZyByZWluZGV4IGFuZCBkcm9wcGVkCitSRUlOREVYIFRBQkxFIGF1eF9pbmRleF90 YWI1OworLS0gTWFrZSBzdXJlIGF1eCBpbmRleCBpcyBkcm9wcGVkCitcZCBhdXhfaW5kZXhfdGFi NQorRFJPUCBJTkRFWCBhdXhfaW5kZXhfaW5kNjsKKworLS0gSW5zZXJ0IGR1cGxpY2F0ZXMgYWdh aW4KK0lOU0VSVCBJTlRPIGF1eF9pbmRleF90YWI1IFZBTFVFUyAoMSksICgxKTsKKy0tIENyZWF0 ZSBpbnZhbGlkIGluZGV4IGFnYWluCitDUkVBVEUgVU5JUVVFIElOREVYIENPTkNVUlJFTlRMWSBh dXhfaW5kZXhfaW5kNiBPTiBhdXhfaW5kZXhfdGFiNSAoYzEpOworLS0gVGhpcyBtYWtlcyB0aGUg cHJldmlvdXMgZmFpbHVyZSBnbyBhd2F5LCBzbyB0aGUgaW5kZXggY2FuIGJlY29tZSB2YWxpZC4K K0RFTEVURSBGUk9NIGF1eF9pbmRleF90YWI1IFdIRVJFIGMxID0gMTsKKy0tIFNob3VsZCBiZSBz a2lwcGVkIGR1cmluZyByZWluZGV4IGFuZCBkcm9wcGVkCitSRUlOREVYIElOREVYIENPTkNVUlJF TlRMWSBhdXhfaW5kZXhfaW5kNjsKKy0tIE1ha2Ugc3VyZSBhdXggaW5kZXggaXMgZHJvcHBlZAor XGQgYXV4X2luZGV4X3RhYjUKK0RST1AgSU5ERVggYXV4X2luZGV4X2luZDY7CisKKy0tIEluc2Vy dCBkdXBsaWNhdGVzIGFnYWluCitJTlNFUlQgSU5UTyBhdXhfaW5kZXhfdGFiNSBWQUxVRVMgKDEp LCAoMSk7CistLSBDcmVhdGUgaW52YWxpZCBpbmRleCBhZ2FpbgorQ1JFQVRFIFVOSVFVRSBJTkRF WCBDT05DVVJSRU5UTFkgYXV4X2luZGV4X2luZDYgT04gYXV4X2luZGV4X3RhYjUgKGMxKTsKKy0t IFRoaXMgbWFrZXMgdGhlIHByZXZpb3VzIGZhaWx1cmUgZ28gYXdheSwgc28gdGhlIGluZGV4IGNh biBiZWNvbWUgdmFsaWQuCitERUxFVEUgRlJPTSBhdXhfaW5kZXhfdGFiNSBXSEVSRSBjMSA9IDE7 CistLSBEcm9wIG1haW4gaW5kZXggQ09OQ1VSUkVOVExZCitEUk9QIElOREVYIENPTkNVUlJFTlRM WSBhdXhfaW5kZXhfaW5kNjsKKy0tIE1ha2Ugc3VyZSBhdXhpbGlhcnkgaW5kZXggZHJvcHBlZCB0 b28KK1xkIGF1eF9pbmRleF90YWI1CitEUk9QIElOREVYIGF1eF9pbmRleF9pbmQ2OworCistLSBJ bnNlcnQgZHVwbGljYXRlcyBhZ2FpbgorSU5TRVJUIElOVE8gYXV4X2luZGV4X3RhYjUgVkFMVUVT ICgxKSwgKDEpOworLS0gQ3JlYXRlIGludmFsaWQgaW5kZXggYWdhaW4KK0NSRUFURSBVTklRVUUg SU5ERVggQ09OQ1VSUkVOVExZIGF1eF9pbmRleF9pbmQ2IE9OIGF1eF9pbmRleF90YWI1IChjMSk7 CistLSBEcm9wIG1haW4gaW5kZXgKK0RST1AgSU5ERVggYXV4X2luZGV4X2luZDY7CistLSBNYWtl IHN1cmUgYXV4aWxpYXJ5IGluZGV4IGRyb3BwZWQgdG9vCitcZCBhdXhfaW5kZXhfdGFiNQorCiBE Uk9QIFRBQkxFIGF1eF9pbmRleF90YWI1OwogCiAtLSBDaGVjayBoYW5kbGluZyBvZiBpbmRleGVz IHdpdGggZXhwcmVzc2lvbnMgYW5kIHByZWRpY2F0ZXMuICBUaGUKLS0gCjIuNDMuMAoK --0000000000009da2ac064db84911 Content-Type: application/octet-stream; name="v31-0001-Add-stress-tests-for-concurrent-index-builds.patch" Content-Disposition: attachment; filename="v31-0001-Add-stress-tests-for-concurrent-index-builds.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mn3ofxoy0 RnJvbSBiNmEzNmUwNDUxOTI5MDZmNzJjYjgwNWYzM2Y0Y2NjYWZkNzgwZjg5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNaWtoYWlsIE5pa2FsYXlldSA8bWloYWlsbmlrYWxheWV1QGdt YWlsLmNvbT4KRGF0ZTogU2F0LCAzMCBOb3YgMjAyNCAxNjoyNDoyMCArMDEwMApTdWJqZWN0OiBb UEFUQ0ggdjMxIDEvN10gQWRkIHN0cmVzcyB0ZXN0cyBmb3IgY29uY3VycmVudCBpbmRleCBidWls ZHMKCkludHJvZHVjZSBzdHJlc3MgdGVzdHMgZm9yIGNvbmN1cnJlbnQgaW5kZXggb3BlcmF0aW9u czoKLSB0ZXN0IGNvbmN1cnJlbnQgaW5zZXJ0cy91cGRhdGVzIGR1cmluZyBDUkVBVEUvUkVJTkRF WCBJTkRFWCBDT05DVVJSRU5UTFkKLSBjb3ZlciB2YXJpb3VzIGluZGV4IHR5cGVzIChidHJlZSwg Z2luLCBnaXN0LCBicmluLCBoYXNoLCBzcGdpc3QpCi0gdGVzdCB1bmlxdWUgYW5kIG5vbi11bmlx dWUgaW5kZXhlcwotIHRlc3Qgd2l0aCBleHByZXNzaW9ucyBhbmQgcHJlZGljYXRlcwotIHRlc3Qg Ym90aCBwYXJhbGxlbCBhbmQgbm9uLXBhcmFsbGVsIG9wZXJhdGlvbnMKClRoZXNlIHRlc3RzIHZl cmlmeSB0aGUgYmVoYXZpb3Igb2YgdGhlIGZvbGxvd2luZyBjb21taXRzLgotLS0KIHNyYy9iaW4v cGdfYW1jaGVjay9tZXNvbi5idWlsZCAgfCAgIDEgKwogc3JjL2Jpbi9wZ19hbWNoZWNrL3QvMDA2 X2NpYy5wbCB8IDI3MyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogMiBmaWxlcyBj aGFuZ2VkLCAyNzQgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iaW4vcGdf YW1jaGVjay90LzAwNl9jaWMucGwKCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2FtY2hlY2svbWVz b24uYnVpbGQgYi9zcmMvYmluL3BnX2FtY2hlY2svbWVzb24uYnVpbGQKaW5kZXggNTkyY2VmNzRl Y2IuLjUxYTYyZGNjYjdiIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2FtY2hlY2svbWVzb24uYnVp bGQKKysrIGIvc3JjL2Jpbi9wZ19hbWNoZWNrL21lc29uLmJ1aWxkCkBAIC0yOCw2ICsyOCw3IEBA IHRlc3RzICs9IHsKICAgICAgICd0LzAwM19jaGVjay5wbCcsCiAgICAgICAndC8wMDRfdmVyaWZ5 X2hlYXBhbS5wbCcsCiAgICAgICAndC8wMDVfb3BjbGFzc19kYW1hZ2UucGwnLAorICAgICAgJ3Qv MDA2X2NpYy5wbCcsCiAgICAgXSwKICAgfSwKIH0KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfYW1j aGVjay90LzAwNl9jaWMucGwgYi9zcmMvYmluL3BnX2FtY2hlY2svdC8wMDZfY2ljLnBsCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4wNDk1YWMxMDI2MwotLS0gL2Rldi9u dWxsCisrKyBiL3NyYy9iaW4vcGdfYW1jaGVjay90LzAwNl9jaWMucGwKQEAgLTAsMCArMSwyNzMg QEAKKyMgQ29weXJpZ2h0IChjKSAyMDI2LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBH cm91cAorCisjIFRlc3QgUkVJTkRFWCBDT05DVVJSRU5UTFkgd2l0aCBjb25jdXJyZW50IG1vZGlm aWNhdGlvbnMgYW5kIEhPVCB1cGRhdGVzCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzIEZBVEFM ID0+ICdhbGwnOworCit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsKK3VzZSBQb3N0Z3Jl U1FMOjpUZXN0OjpVdGlsczsKK3VzZSBUZXN0OjpNb3JlOworCit1c2UgY29uc3RhbnQgU1RSRVNT X1BHQkVOQ0hfQ0xJRU5UUyA9PiAzMDsKK3VzZSBjb25zdGFudCBTVFJFU1NfUEdCRU5DSF9KT0JT ID0+IDg7Cit1c2UgY29uc3RhbnQgU1RSRVNTX1BHQkVOQ0hfVFJBTlNBQ1RJT05TID0+IDEwMDAw OwordXNlIGNvbnN0YW50IFNUUkVTU19NQVhfU0xFRVBfTVMgPT4gMTA7CisKK3VzZSBjb25zdGFu dCBERUZBVUxUX1BHQkVOQ0hfQ0xJRU5UUyA9PiAxNTsKK3VzZSBjb25zdGFudCBERUZBVUxUX1BH QkVOQ0hfSk9CUyA9PiA0OwordXNlIGNvbnN0YW50IERFRkFVTFRfUEdCRU5DSF9UUkFOU0FDVElP TlMgPT4gNTAwOwordXNlIGNvbnN0YW50IERFRkFVTFRfTUFYX1NMRUVQX01TID0+IDE7CisKK1Rl c3Q6Ok1vcmUtPmJ1aWxkZXItPnRvZG9fc3RhcnQoJ2ZpbGVzeXN0ZW0gYnVnJykKKyAgaWYgUG9z dGdyZVNRTDo6VGVzdDo6VXRpbHM6Omhhc193YWxfcmVhZF9idWc7CisKK215ICgkbm9kZSwgJHJl c3VsdCk7CitteSAkcGdfdGVzdF9leHRyYSA9ICRFTlZ7UEdfVEVTVF9FWFRSQX0gLy8gJyc7Citt eSAkaXNfc3RyZXNzID0gJHBnX3Rlc3RfZXh0cmEgPX4gL1xic3RyZXNzXGIvID8gMSA6IDA7Citt eSAkcGdiZW5jaF9jbGllbnRzID0KKyAgJGlzX3N0cmVzcyA/IFNUUkVTU19QR0JFTkNIX0NMSUVO VFMgOiBERUZBVUxUX1BHQkVOQ0hfQ0xJRU5UUzsKK215ICRwZ2JlbmNoX2pvYnMgPSAkaXNfc3Ry ZXNzID8gU1RSRVNTX1BHQkVOQ0hfSk9CUyA6IERFRkFVTFRfUEdCRU5DSF9KT0JTOworbXkgJHBn YmVuY2hfdHJhbnNhY3Rpb25zID0KKyAgJGlzX3N0cmVzcyA/IFNUUkVTU19QR0JFTkNIX1RSQU5T QUNUSU9OUyA6IERFRkFVTFRfUEdCRU5DSF9UUkFOU0FDVElPTlM7CitteSAkbWF4X3NsZWVwX21z ID0gJGlzX3N0cmVzcyA/IFNUUkVTU19NQVhfU0xFRVBfTVMgOiBERUZBVUxUX01BWF9TTEVFUF9N UzsKK215ICRwZ2JlbmNoX29wdGlvbnMgPSBzcHJpbnRmKAorCSctLW5vLXZhY3V1bSAtLWNsaWVu dD0lZCAtLWpvYnM9JWQgLS1leGl0LW9uLWFib3J0IC0tdHJhbnNhY3Rpb25zPSVkJywKKwkkcGdi ZW5jaF9jbGllbnRzLAorCSRwZ2JlbmNoX2pvYnMsCisJJHBnYmVuY2hfdHJhbnNhY3Rpb25zKTsK K215ICRub19ob3QgPSAkaXNfc3RyZXNzID8gaW50KHJhbmQoMikpIDogMDsKKworcHJpbnQoCisJ CXNwcmludGYoCisJCSdzZXR0aW5nczogUEdfVEVTVF9FWFRSQT0lcyBzdHJlc3M9JWQgY2xpZW50 cz0lZCBqb2JzPSVkIHRyYW5zYWN0aW9ucz0lZCBtYXhfc2xlZXBfbXM9JWQgbm9faG90PSVkJywK KwkJZGVmaW5lZCgkRU5We1BHX1RFU1RfRVhUUkF9KQorCQk/ICgkcGdfdGVzdF9leHRyYSBlcSAn JyA/ICcoZW1wdHkpJyA6ICRwZ190ZXN0X2V4dHJhKQorCQk6ICcodW5kZWYpJywKKwkJJGlzX3N0 cmVzcywKKwkJJHBnYmVuY2hfY2xpZW50cywKKwkJJHBnYmVuY2hfam9icywKKwkJJHBnYmVuY2hf dHJhbnNhY3Rpb25zLAorCQkkbWF4X3NsZWVwX21zLAorCQkkbm9faG90KSk7CitwcmludCAiXG4i OworCisjCisjIFRlc3Qgc2V0LXVwCisjCiskbm9kZSA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0 ZXItPm5ldygnUkNfdGVzdCcpOworJG5vZGUtPmluaXQ7Ciskbm9kZS0+YXBwZW5kX2NvbmYoJ3Bv c3RncmVzcWwuY29uZicsCisJJ2xvY2tfdGltZW91dCA9ICcgLiAoMTAwMCAqICRQb3N0Z3JlU1FM OjpUZXN0OjpVdGlsczo6dGltZW91dF9kZWZhdWx0KSk7Ciskbm9kZS0+YXBwZW5kX2NvbmYoJ3Bv c3RncmVzcWwuY29uZicsICdmc3luYyA9IG9mZicpOworJG5vZGUtPmFwcGVuZF9jb25mKCdwb3N0 Z3Jlc3FsLmNvbmYnLCAnbWFpbnRlbmFuY2Vfd29ya19tZW0gPSAzMk1CJyk7ICMgdG8gYXZvaWQg T09NCiskbm9kZS0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsICdzaGFyZWRfYnVmZmVy cyA9IDMyTUInKTsgIyB0byBhdm9pZCBPT00KKyRub2RlLT5zdGFydDsKKyRub2RlLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgcShDUkVBVEUgRVhURU5TSU9OIGFtY2hlY2spKTsKKyRub2RlLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgcShDUkVBVEUgVU5MT0dHRUQgVEFCTEUgdGJsKGkgaW50IHByaW1h cnkga2V5LAorCQkJCQkJCQljMSBtb25leSBkZWZhdWx0IDAsIGMyIG1vbmV5IGRlZmF1bHQgMCwK KwkJCQkJCQkJYzMgbW9uZXkgZGVmYXVsdCAwLCB1cGRhdGVkX2F0IHRpbWVzdGFtcCwKKwkJCQkJ CQkJaWEgaW50NFtdLCBwIHBvaW50KSkpOworCitpZiAoJG5vX2hvdCkgeyAkbm9kZS0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsIHEoQ1JFQVRFIElOREVYIENPTkNVUlJFTlRMWSBpZHggT04gdGJsKGks IHVwZGF0ZWRfYXQpOykpOyB9CisKKyMgY3JlYXRlIHNlcXVlbmNlCiskbm9kZS0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsIHEoQ1JFQVRFIFVOTE9HR0VEIFNFUVVFTkNFIGluX3Jvd19yZWJ1aWxkIFNU QVJUIDEgSU5DUkVNRU5UIDE7KSk7Ciskbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHEoU0VM RUNUIG5leHR2YWwoJ2luX3Jvd19yZWJ1aWxkJyk7KSk7CisKKyMgQ3JlYXRlIGhlbHBlciBmdW5j dGlvbnMgZm9yIHByZWRpY2F0ZSB0ZXN0cworJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBx KAorCUNSRUFURSBGVU5DVElPTiBwcmVkaWNhdGVfc3RhYmxlKCkgUkVUVVJOUyBib29sIElNTVVU QUJMRQorCUxBTkdVQUdFIHBscGdzcWwgQVMgJCQKKwlCRUdJTgorCQlFWEVDVVRFICdTRUxFQ1Qg dHhpZF9jdXJyZW50KCknOworCQlSRVRVUk4gdHJ1ZTsKKwlFTkQ7ICQkOworKSk7CisKKyRub2Rl LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcSgKKwlDUkVBVEUgRlVOQ1RJT04gcHJlZGljYXRlX2Nv bnN0KGludGVnZXIpIFJFVFVSTlMgYm9vbCBJTU1VVEFCTEUKKwlMQU5HVUFHRSBwbHBnc3FsIEFT ICQkCisJQkVHSU4KKwkJUkVUVVJOIE1PRCgkMSwgMikgPSAwOworCUVORDsgJCQ7CispKTsKKwor IyBSdW4gQ0lDL1JJQyBpbiBkaWZmZXJlbnQgb3B0aW9ucyBjb25jdXJyZW50bHkgd2l0aCB1cHNl cnRzCiskbm9kZS0+cGdiZW5jaCgKKwkkcGdiZW5jaF9vcHRpb25zLAorCTAsCisJW3Fye2FjdHVh bGx5IHByb2Nlc3NlZH1dLAorCVtxcnteJH1dLAorCSdjb25jdXJyZW50IG9wZXJhdGlvbnMgd2l0 aCBSRUlOREVYL0NSRUFURSBJTkRFWCBDT05DVVJSRU5UTFknLAorCXsKKwkJJ2NvbmN1cnJlbnRf b3BzJyA9PiBzcHJpbnRmKHEoCisJCQlTRVQgZGVidWdfcGFyYWxsZWxfcXVlcnkgPSBvZmY7IC0t IHRoaXMgaXMgYmVjYXVzZSBwcmVkaWNhdGVfc3RhYmxlIGltcGxlbWVudGF0aW9uCisJCQlTRUxF Q1QgcGdfdHJ5X2Fkdmlzb3J5X2xvY2soNDIpOjppbnRlZ2VyIEFTIGdvdGxvY2sgXGdzZXQKKwkJ CVxpZiA6Z290bG9jaworCQkJCVNFTEVDVCBuZXh0dmFsKCdpbl9yb3dfcmVidWlsZCcpIEFTIGxh c3RfdmFsdWUgXGdzZXQKKwkJCQlcc2V0IHZhcmlhbnQgcmFuZG9tKDAsIDUpCisJCQkJXHNldCBw YXJhbGxlbHMgcmFuZG9tKDAsIDQpCisJCQkJXGlmIDpsYXN0X3ZhbHVlIDwgMworCQkJCQlBTFRF UiBUQUJMRSB0YmwgU0VUIChwYXJhbGxlbF93b3JrZXJzPTpwYXJhbGxlbHMpOworCQkJCQlcaWYg OnZhcmlhbnQgPSAwCisJCQkJCQlDUkVBVEUgSU5ERVggQ09OQ1VSUkVOVExZIG5ld19pZHggT04g dGJsKGksIHVwZGF0ZWRfYXQpOworCQkJCQlcZWxpZiA6dmFyaWFudCA9IDEKKwkJCQkJCUNSRUFU RSBJTkRFWCBDT05DVVJSRU5UTFkgbmV3X2lkeCBPTiB0YmwoaSwgdXBkYXRlZF9hdCkgV0hFUkUg cHJlZGljYXRlX3N0YWJsZSgpOworCQkJCQlcZWxpZiA6dmFyaWFudCA9IDIKKwkJCQkJCUNSRUFU RSBJTkRFWCBDT05DVVJSRU5UTFkgbmV3X2lkeCBPTiB0YmwoaSwgdXBkYXRlZF9hdCkgV0hFUkUg TU9EKGksIDIpID0gMDsKKwkJCQkJXGVsaWYgOnZhcmlhbnQgPSAzCisJCQkJCQlDUkVBVEUgSU5E RVggQ09OQ1VSUkVOVExZIG5ld19pZHggT04gdGJsKGksIHVwZGF0ZWRfYXQpIFdIRVJFIHByZWRp Y2F0ZV9jb25zdChpKTsKKwkJCQkJXGVsaWYgOnZhcmlhbnQgPSA0CisJCQkJCQlDUkVBVEUgSU5E RVggQ09OQ1VSUkVOVExZIG5ld19pZHggT04gdGJsKHByZWRpY2F0ZV9jb25zdChpKSk7CisJCQkJ CVxlbGlmIDp2YXJpYW50ID0gNQorCQkJCQkJQ1JFQVRFIElOREVYIENPTkNVUlJFTlRMWSBuZXdf aWR4IE9OIHRibChpLCBwcmVkaWNhdGVfY29uc3QoaSksIHVwZGF0ZWRfYXQpIFdIRVJFIHByZWRp Y2F0ZV9jb25zdChpKTsKKwkJCQkJXGVuZGlmCisJCQkJCVxzZXQgc2xlZXBfbXMgcmFuZG9tKDAs ICVkKQorCQkJCQlcc2xlZXAgOnNsZWVwX21zIG1zCisJCQkJCVNFTEVDVCBidF9pbmRleF9jaGVj aygnbmV3X2lkeCcsIGhlYXBhbGxpbmRleGVkID0+IHRydWUsIGNoZWNrdW5pcXVlID0+IHRydWUp OworCQkJCQlSRUlOREVYIElOREVYIENPTkNVUlJFTlRMWSBuZXdfaWR4OworCQkJCQlcc2V0IHNs ZWVwX21zIHJhbmRvbSgwLCAlZCkKKwkJCQkJXHNsZWVwIDpzbGVlcF9tcyBtcworCQkJCQlTRUxF Q1QgYnRfaW5kZXhfY2hlY2soJ25ld19pZHgnLCBoZWFwYWxsaW5kZXhlZCA9PiB0cnVlLCBjaGVj a3VuaXF1ZSA9PiB0cnVlKTsKKwkJCQkJRFJPUCBJTkRFWCBDT05DVVJSRU5UTFkgbmV3X2lkeDsK KwkJCQlcZW5kaWYKKwkJCQlTRUxFQ1QgcGdfYWR2aXNvcnlfdW5sb2NrKDQyKTsKKwkJCVxlbHNl CisJCQkJXHNldCBudW0gcmFuZG9tKDEwMDAsIDEwMDAwMCkKKwkJCQlCRUdJTjsKKwkJCQlJTlNF UlQgSU5UTyB0YmwgVkFMVUVTKGZsb29yKHJhbmRvbSgpKjpudW0pLDAsMCwwLG5vdygpLEFSUkFZ W2Zsb29yKHJhbmRvbSgpKjEwMCk6OmludF0scG9pbnQocmFuZG9tKCkscmFuZG9tKCkpKQorCQkJ CQlPTiBDT05GTElDVChpKSBETyBVUERBVEUgU0VUIHVwZGF0ZWRfYXQgPSBub3coKSwgaWEgPSBB UlJBWVtmbG9vcihyYW5kb20oKSoxMDApOjppbnRdLCBwID0gcG9pbnQocmFuZG9tKCkscmFuZG9t KCkpOworCQkJCUlOU0VSVCBJTlRPIHRibCBWQUxVRVMoZmxvb3IocmFuZG9tKCkqOm51bSksMCww LDAsbm93KCksQVJSQVlbZmxvb3IocmFuZG9tKCkqMTAwKTo6aW50XSxwb2ludChyYW5kb20oKSxy YW5kb20oKSkpCisJCQkJCU9OIENPTkZMSUNUKGkpIERPIFVQREFURSBTRVQgdXBkYXRlZF9hdCA9 IG5vdygpLCBpYSA9IEFSUkFZW2Zsb29yKHJhbmRvbSgpKjEwMCk6OmludF0sIHAgPSBwb2ludChy YW5kb20oKSxyYW5kb20oKSk7CisJCQkJSU5TRVJUIElOVE8gdGJsIFZBTFVFUyhmbG9vcihyYW5k b20oKSo6bnVtKSwwLDAsMCxub3coKSxBUlJBWVtmbG9vcihyYW5kb20oKSoxMDApOjppbnRdLHBv aW50KHJhbmRvbSgpLHJhbmRvbSgpKSkKKwkJCQkJT04gQ09ORkxJQ1QoaSkgRE8gVVBEQVRFIFNF VCB1cGRhdGVkX2F0ID0gbm93KCksIGlhID0gQVJSQVlbZmxvb3IocmFuZG9tKCkqMTAwKTo6aW50 XSwgcCA9IHBvaW50KHJhbmRvbSgpLHJhbmRvbSgpKTsKKwkJCQlJTlNFUlQgSU5UTyB0YmwgVkFM VUVTKGZsb29yKHJhbmRvbSgpKjpudW0pLDAsMCwwLG5vdygpLEFSUkFZW2Zsb29yKHJhbmRvbSgp KjEwMCk6OmludF0scG9pbnQocmFuZG9tKCkscmFuZG9tKCkpKQorCQkJCQlPTiBDT05GTElDVChp KSBETyBVUERBVEUgU0VUIHVwZGF0ZWRfYXQgPSBub3coKSwgaWEgPSBBUlJBWVtmbG9vcihyYW5k b20oKSoxMDApOjppbnRdLCBwID0gcG9pbnQocmFuZG9tKCkscmFuZG9tKCkpOworCQkJCUlOU0VS VCBJTlRPIHRibCBWQUxVRVMoZmxvb3IocmFuZG9tKCkqOm51bSksMCwwLDAsbm93KCksQVJSQVlb Zmxvb3IocmFuZG9tKCkqMTAwKTo6aW50XSxwb2ludChyYW5kb20oKSxyYW5kb20oKSkpCisJCQkJ CU9OIENPTkZMSUNUKGkpIERPIFVQREFURSBTRVQgdXBkYXRlZF9hdCA9IG5vdygpLCBpYSA9IEFS UkFZW2Zsb29yKHJhbmRvbSgpKjEwMCk6OmludF0sIHAgPSBwb2ludChyYW5kb20oKSxyYW5kb20o KSk7CisJCQkJU0VMRUNUIHNldHZhbCgnaW5fcm93X3JlYnVpbGQnLCAxKTsKKwkJCQlDT01NSVQ7 CisJCQlcZW5kaWYKKwkJCSksICRtYXhfc2xlZXBfbXMsICRtYXhfc2xlZXBfbXMpCisJfSk7CisK KyRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcShUUlVOQ0FURSBUQUJMRSB0Ymw7KSk7CisK KyMgUnVuIENJQy9SSUMgZm9yIHVuaXF1ZSBpbmRleCBjb25jdXJyZW50bHkgd2l0aCB1cHNlcnRz Ciskbm9kZS0+cGdiZW5jaCgKKwkkcGdiZW5jaF9vcHRpb25zLAorCTAsCisJW3Fye2FjdHVhbGx5 IHByb2Nlc3NlZH1dLAorCVtxcnteJH1dLAorCSdjb25jdXJyZW50IG9wZXJhdGlvbnMgd2l0aCBS RUlOREVYL0NSRUFURSBJTkRFWCBDT05DVVJSRU5UTFkgZm9yIHVuaXF1ZSBCVFJFRScsCisJewor CQknY29uY3VycmVudF9vcHNfdW5pcXVlX2lkeCcgPT4gc3ByaW50ZihxKAorCQkJU0VMRUNUIHBn X3RyeV9hZHZpc29yeV9sb2NrKDQyKTo6aW50ZWdlciBBUyBnb3Rsb2NrIFxnc2V0CisJCQlcaWYg OmdvdGxvY2sKKwkJCQlTRUxFQ1QgbmV4dHZhbCgnaW5fcm93X3JlYnVpbGQnKSBBUyBsYXN0X3Zh bHVlIFxnc2V0CisJCQkJXHNldCBwYXJhbGxlbHMgcmFuZG9tKDAsIDQpCisJCQkJXGlmIDpsYXN0 X3ZhbHVlIDwgMworCQkJCQlBTFRFUiBUQUJMRSB0YmwgU0VUIChwYXJhbGxlbF93b3JrZXJzPTpw YXJhbGxlbHMpOworCQkJCQlDUkVBVEUgVU5JUVVFIElOREVYIENPTkNVUlJFTlRMWSBuZXdfaWR4 IE9OIHRibChpKTsKKwkJCQkJXHNldCBzbGVlcF9tcyByYW5kb20oMCwgJWQpCisJCQkJCVxzbGVl cCA6c2xlZXBfbXMgbXMKKwkJCQkJU0VMRUNUIGJ0X2luZGV4X2NoZWNrKCduZXdfaWR4JywgaGVh cGFsbGluZGV4ZWQgPT4gdHJ1ZSwgY2hlY2t1bmlxdWUgPT4gdHJ1ZSk7CisJCQkJCVJFSU5ERVgg SU5ERVggQ09OQ1VSUkVOVExZIG5ld19pZHg7CisJCQkJCVxzZXQgc2xlZXBfbXMgcmFuZG9tKDAs ICVkKQorCQkJCQlcc2xlZXAgOnNsZWVwX21zIG1zCisJCQkJCVNFTEVDVCBidF9pbmRleF9jaGVj aygnbmV3X2lkeCcsIGhlYXBhbGxpbmRleGVkID0+IHRydWUsIGNoZWNrdW5pcXVlID0+IHRydWUp OworCQkJCQlEUk9QIElOREVYIENPTkNVUlJFTlRMWSBuZXdfaWR4OworCQkJCVxlbmRpZgorCQkJ CVNFTEVDVCBwZ19hZHZpc29yeV91bmxvY2soNDIpOworCQkJXGVsc2UKKwkJCQlcc2V0IG51bSBy YW5kb20oMSwgcG93ZXIoMTAsIHJhbmRvbSgxLCA1KSkpCisJCQkJSU5TRVJUIElOVE8gdGJsIFZB TFVFUyhmbG9vcihyYW5kb20oKSo6bnVtKSwwLDAsMCxub3coKSxBUlJBWVtmbG9vcihyYW5kb20o KSoxMDApOjppbnRdLHBvaW50KHJhbmRvbSgpLHJhbmRvbSgpKSkKKwkJCQkJT04gQ09ORkxJQ1Qo aSkgRE8gVVBEQVRFIFNFVCB1cGRhdGVkX2F0ID0gbm93KCksIGlhID0gQVJSQVlbZmxvb3IocmFu ZG9tKCkqMTAwKTo6aW50XSwgcCA9IHBvaW50KHJhbmRvbSgpLHJhbmRvbSgpKTsKKwkJCQlTRUxF Q1Qgc2V0dmFsKCdpbl9yb3dfcmVidWlsZCcsIDEpOworCQkJXGVuZGlmCisJCQkpLCAkbWF4X3Ns ZWVwX21zLCAkbWF4X3NsZWVwX21zKQorCX0pOworCiskbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsIHEoVFJVTkNBVEUgVEFCTEUgdGJsOykpOworCisjIFJ1biBDSUMvUklDIGZvciBHSU4gd2l0 aCB1cHNlcnRzCiskbm9kZS0+cGdiZW5jaCgKKwkkcGdiZW5jaF9vcHRpb25zLAorCTAsCisJW3Fy e2FjdHVhbGx5IHByb2Nlc3NlZH1dLAorCVtxcnteJH1dLAorCSdjb25jdXJyZW50IG9wZXJhdGlv bnMgd2l0aCBSRUlOREVYL0NSRUFURSBJTkRFWCBDT05DVVJSRU5UTFkgZm9yIEdJTi9HSVNUL0JS SU4vSEFTSC9TUEdJU1QnLAorCXsKKwkJJ2NvbmN1cnJlbnRfb3BzX2dpbl9pZHgnID0+IHNwcmlu dGYocSgKKwkJCVNFTEVDVCBwZ190cnlfYWR2aXNvcnlfbG9jayg0Mik6OmludGVnZXIgQVMgZ290 bG9jayBcZ3NldAorCQkJXGlmIDpnb3Rsb2NrCisJCQkJU0VMRUNUIG5leHR2YWwoJ2luX3Jvd19y ZWJ1aWxkJykgQVMgbGFzdF92YWx1ZSBcZ3NldAorCQkJCVxzZXQgcGFyYWxsZWxzIHJhbmRvbSgw LCA0KQorCQkJCVxpZiA6bGFzdF92YWx1ZSA8IDMKKwkJCQkJQUxURVIgVEFCTEUgdGJsIFNFVCAo cGFyYWxsZWxfd29ya2Vycz06cGFyYWxsZWxzKTsKKwkJCQkJQ1JFQVRFIElOREVYIENPTkNVUlJF TlRMWSBuZXdfaWR4IE9OIHRibCBVU0lORyBHSU4gKGlhKTsKKwkJCQkJXHNldCBzbGVlcF9tcyBy YW5kb20oMCwgJWQpCisJCQkJCVxzbGVlcCA6c2xlZXBfbXMgbXMKKwkJCQkJU0VMRUNUIGdpbl9p bmRleF9jaGVjaygnbmV3X2lkeCcpOworCQkJCQlSRUlOREVYIElOREVYIENPTkNVUlJFTlRMWSBu ZXdfaWR4OworCQkJCQlcc2V0IHNsZWVwX21zIHJhbmRvbSgwLCAlZCkKKwkJCQkJXHNsZWVwIDpz bGVlcF9tcyBtcworCQkJCQlTRUxFQ1QgZ2luX2luZGV4X2NoZWNrKCduZXdfaWR4Jyk7CisJCQkJ CURST1AgSU5ERVggQ09OQ1VSUkVOVExZIG5ld19pZHg7CisJCQkJXGVuZGlmCisJCQkJU0VMRUNU IHBnX2Fkdmlzb3J5X3VubG9jayg0Mik7CisJCQlcZWxzZQorCQkJCVxzZXQgbnVtIHJhbmRvbSgx LCBwb3dlcigxMCwgcmFuZG9tKDEsIDUpKSkKKwkJCQlJTlNFUlQgSU5UTyB0YmwgVkFMVUVTKGZs b29yKHJhbmRvbSgpKjpudW0pLDAsMCwwLG5vdygpLEFSUkFZW2Zsb29yKHJhbmRvbSgpKjEwMCk6 OmludF0scG9pbnQocmFuZG9tKCkscmFuZG9tKCkpKQorCQkJCQlPTiBDT05GTElDVChpKSBETyBV UERBVEUgU0VUIHVwZGF0ZWRfYXQgPSBub3coKSwgaWEgPSBBUlJBWVtmbG9vcihyYW5kb20oKSox MDApOjppbnRdLCBwID0gcG9pbnQocmFuZG9tKCkscmFuZG9tKCkpOworCQkJCVNFTEVDVCBzZXR2 YWwoJ2luX3Jvd19yZWJ1aWxkJywgMSk7CisJCQlcZW5kaWYKKwkJCSksICRtYXhfc2xlZXBfbXMs ICRtYXhfc2xlZXBfbXMpCisJfSk7CisKKyRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcShU UlVOQ0FURSBUQUJMRSB0Ymw7KSk7CisKKyMgUnVuIENJQy9SSUMgZm9yIEdJU1QvQlJJTi9IQVNI L1NQR0lTVCBpbmRleCBjb25jdXJyZW50bHkgd2l0aCB1cHNlcnRzCiskbm9kZS0+cGdiZW5jaCgK KwkkcGdiZW5jaF9vcHRpb25zLAorCTAsCisJW3Fye2FjdHVhbGx5IHByb2Nlc3NlZH1dLAorCVtx cnteJH1dLAorCSdjb25jdXJyZW50IG9wZXJhdGlvbnMgd2l0aCBSRUlOREVYL0NSRUFURSBJTkRF WCBDT05DVVJSRU5UTFkgZm9yIEdJU1QvQlJJTi9IQVNIL1NQR0lTVCcsCisJeworCQknY29uY3Vy cmVudF9vcHNfb3RoZXJfaWR4JyA9PiBzcHJpbnRmKHEoCisJCQlTRUxFQ1QgcGdfdHJ5X2Fkdmlz b3J5X2xvY2soNDIpOjppbnRlZ2VyIEFTIGdvdGxvY2sgXGdzZXQKKwkJCVxpZiA6Z290bG9jawor CQkJCVNFTEVDVCBuZXh0dmFsKCdpbl9yb3dfcmVidWlsZCcpIEFTIGxhc3RfdmFsdWUgXGdzZXQK KwkJCQlcc2V0IHBhcmFsbGVscyByYW5kb20oMCwgNCkKKwkJCQlcaWYgOmxhc3RfdmFsdWUgPCAz CisJCQkJCUFMVEVSIFRBQkxFIHRibCBTRVQgKHBhcmFsbGVsX3dvcmtlcnM9OnBhcmFsbGVscyk7 CisJCQkJCVxzZXQgdmFyaWFudCByYW5kb20oMCwgMykKKwkJCQkJXGlmIDp2YXJpYW50ID0gMAor CQkJCQkJQ1JFQVRFIElOREVYIENPTkNVUlJFTlRMWSBuZXdfaWR4IE9OIHRibCBVU0lORyBHSVNU IChwKTsKKwkJCQkJXGVsaWYgOnZhcmlhbnQgPSAxCisJCQkJCQlDUkVBVEUgSU5ERVggQ09OQ1VS UkVOVExZIG5ld19pZHggT04gdGJsIFVTSU5HIEJSSU4gKHVwZGF0ZWRfYXQpOworCQkJCQlcZWxp ZiA6dmFyaWFudCA9IDIKKwkJCQkJCUNSRUFURSBJTkRFWCBDT05DVVJSRU5UTFkgbmV3X2lkeCBP TiB0YmwgVVNJTkcgSEFTSCAodXBkYXRlZF9hdCk7CisJCQkJCVxlbGlmIDp2YXJpYW50ID0gMwor CQkJCQkJQ1JFQVRFIElOREVYIENPTkNVUlJFTlRMWSBuZXdfaWR4IE9OIHRibCBVU0lORyBTUEdJ U1QgKHApOworCQkJCQlcZW5kaWYKKwkJCQkJXHNldCBzbGVlcF9tcyByYW5kb20oMCwgJWQpCisJ CQkJCVxzbGVlcCA6c2xlZXBfbXMgbXMKKwkJCQkJUkVJTkRFWCBJTkRFWCBDT05DVVJSRU5UTFkg bmV3X2lkeDsKKwkJCQkJXHNldCBzbGVlcF9tcyByYW5kb20oMCwgJWQpCisJCQkJCVxzbGVlcCA6 c2xlZXBfbXMgbXMKKwkJCQkJRFJPUCBJTkRFWCBDT05DVVJSRU5UTFkgbmV3X2lkeDsKKwkJCQlc ZW5kaWYKKwkJCQlTRUxFQ1QgcGdfYWR2aXNvcnlfdW5sb2NrKDQyKTsKKwkJCVxlbHNlCisJCQkJ XHNldCBudW0gcmFuZG9tKDEsIHBvd2VyKDEwLCByYW5kb20oMSwgNSkpKQorCQkJCUlOU0VSVCBJ TlRPIHRibCBWQUxVRVMoZmxvb3IocmFuZG9tKCkqOm51bSksMCwwLDAsbm93KCksQVJSQVlbZmxv b3IocmFuZG9tKCkqMTAwKTo6aW50XSxwb2ludChyYW5kb20oKSxyYW5kb20oKSkpCisJCQkJCU9O IENPTkZMSUNUKGkpIERPIFVQREFURSBTRVQgdXBkYXRlZF9hdCA9IG5vdygpLCBpYSA9IEFSUkFZ W2Zsb29yKHJhbmRvbSgpKjEwMCk6OmludF0sIHAgPSBwb2ludChyYW5kb20oKSxyYW5kb20oKSk7 CisJCQkJU0VMRUNUIHNldHZhbCgnaW5fcm93X3JlYnVpbGQnLCAxKTsKKwkJCVxlbmRpZgorCQkJ KSwgJG1heF9zbGVlcF9tcywgJG1heF9zbGVlcF9tcykKKwkJfSk7CisKKyRub2RlLT5zdG9wOwor ZG9uZV90ZXN0aW5nKCk7Ci0tIAoyLjQzLjAKCg== --0000000000009da2ac064db84911 Content-Type: application/octet-stream; name="v31-0006-Optimize-auxiliary-index-handling.patch" Content-Disposition: attachment; filename="v31-0006-Optimize-auxiliary-index-handling.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mn3ofxp95 RnJvbSBiYjU2ZjkxZGY1YTQ0Yzc4NjVlNmY1OTk3MzhjZGVjNDc2NDk3MDIxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNaWtoYWlsIE5pa2FsYXlldSA8bWloYWlsbmlrYWxheWV1QGdt YWlsLmNvbT4KRGF0ZTogTW9uLCAzMCBEZWMgMjAyNCAxNjozNzoxMiArMDEwMApTdWJqZWN0OiBb UEFUQ0ggdjMxIDYvN10gT3B0aW1pemUgYXV4aWxpYXJ5IGluZGV4IGhhbmRsaW5nCgpTa2lwIHVu bmVjZXNzYXJ5IGNvbXB1dGF0aW9ucyBmb3IgYXV4aWxpYXJ5IGluZGljZXMgYnk6Ci0gaW4gdGhl IGluZGV4LWluc2VydCBwYXRoLCBkZXRlY3QgYXV4aWxpYXJ5IGluZGV4ZXMgYW5kIGJ5cGFzcyBE YXR1bSB2YWx1ZSBjb21wdXRhdGlvbgotIHNldCBpbmRleFVuY2hhbmdlZD1mYWxzZSBmb3IgYXV4 aWxpYXJ5IGluZGljZXMgdG8gYXZvaWQgcmVkdW5kYW50IGNoZWNrcwoKVGhlc2Ugb3B0aW1pemF0 aW9ucyByZWR1Y2Ugb3ZlcmhlYWQgZHVyaW5nIGNvbmN1cnJlbnQgaW5kZXggb3BlcmF0aW9ucy4K LS0tCiBzcmMvYmFja2VuZC9jYXRhbG9nL2luZGV4LmMgICAgICAgICB8IDExICsrKysrKysrKysr CiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjSW5kZXhpbmcuYyB8ICA1ICsrKystCiAyIGZpbGVz IGNoYW5nZWQsIDE1IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9jYXRhbG9nL2luZGV4LmMgYi9zcmMvYmFja2VuZC9jYXRhbG9nL2luZGV4LmMK aW5kZXggNGI2YTBmNzZjODEuLjJkN2QyNWYxOTg2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9j YXRhbG9nL2luZGV4LmMKKysrIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9pbmRleC5jCkBAIC0yOTE3 LDYgKzI5MTcsMTcgQEAgRm9ybUluZGV4RGF0dW0oSW5kZXhJbmZvICppbmRleEluZm8sCiAJTGlz dENlbGwgICAqaW5kZXhwcl9pdGVtOwogCWludAkJCWk7CiAKKwkvKiBBdXhpbGlhcnkgaW5kZXgg ZG9lcyBub3QgbmVlZCBhbnkgdmFsdWVzIHRvIGJlIGNvbXB1dGVkICovCisJaWYgKHVubGlrZWx5 KGluZGV4SW5mby0+aWlfQXV4aWxpYXJ5KSkKKwl7CisJCWZvciAoaSA9IDA7IGkgPCBpbmRleElu Zm8tPmlpX051bUluZGV4QXR0cnM7IGkrKykKKwkJeworCQkJdmFsdWVzW2ldID0gUG9pbnRlckdl dERhdHVtKE5VTEwpOworCQkJaXNudWxsW2ldID0gdHJ1ZTsKKwkJfQorCQlyZXR1cm47CisJfQor CiAJaWYgKGluZGV4SW5mby0+aWlfRXhwcmVzc2lvbnMgIT0gTklMICYmCiAJCWluZGV4SW5mby0+ aWlfRXhwcmVzc2lvbnNTdGF0ZSA9PSBOSUwpCiAJewpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv ZXhlY3V0b3IvZXhlY0luZGV4aW5nLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjSW5kZXhp bmcuYwppbmRleCA5ZDA3MWU0OTVjNi4uY2U3NmEyMTM1NTYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2V4ZWN1dG9yL2V4ZWNJbmRleGluZy5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4 ZWNJbmRleGluZy5jCkBAIC00MzgsOCArNDM4LDExIEBAIEV4ZWNJbnNlcnRJbmRleFR1cGxlcyhS ZXN1bHRSZWxJbmZvICpyZXN1bHRSZWxJbmZvLAogCQkgKiBUaGVyZSdzIGRlZmluaXRlbHkgZ29p bmcgdG8gYmUgYW4gaW5kZXhfaW5zZXJ0KCkgY2FsbCBmb3IgdGhpcwogCQkgKiBpbmRleC4gIElm IHdlJ3JlIGJlaW5nIGNhbGxlZCBhcyBwYXJ0IG9mIGFuIFVQREFURSBzdGF0ZW1lbnQsCiAJCSAq IGNvbnNpZGVyIGlmIHRoZSAnaW5kZXhVbmNoYW5nZWQnID0gdHJ1ZSBoaW50IHNob3VsZCBiZSBw YXNzZWQuCisJCSAqCisJCSAqIEZvciBhdXhpbGlhcnkgaW5kZXhlcywgYWx3YXlzIHBhc3MgZmFs c2UgdG8gc2tpcCB2YWx1ZSBjb21wYXJpc29uIGNoZWNrcywKKwkJICogc2luY2UgYXV4aWxpYXJ5 IGluZGV4ZXMgb25seSBzdG9yZSBUSURzIGFuZCBkb24ndCB0cmFjayB2YWx1ZSBjaGFuZ2VzLgog CQkgKi8KLQkJaW5kZXhVbmNoYW5nZWQgPSAoKGZsYWdzICYgRUlJVF9JU19VUERBVEUpICYmCisJ CWluZGV4VW5jaGFuZ2VkID0gKChmbGFncyAmIEVJSVRfSVNfVVBEQVRFKSAmJiBsaWtlbHkoIWlu ZGV4SW5mby0+aWlfQXV4aWxpYXJ5KSAmJgogCQkJCQkJICBpbmRleF91bmNoYW5nZWRfYnlfdXBk YXRlKHJlc3VsdFJlbEluZm8sCiAJCQkJCQkJCQkJCQkJZXN0YXRlLAogCQkJCQkJCQkJCQkJCWlu ZGV4SW5mbywKLS0gCjIuNDMuMAoK --0000000000009da2ac064db84911 Content-Type: application/octet-stream; name="v31-0007-Refresh-snapshot-periodically-during-index-valid.patch" Content-Disposition: attachment; filename="v31-0007-Refresh-snapshot-periodically-during-index-valid.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mn3ofxpb6 RnJvbSA3NmMxNWFhNTYyNGE5ZGQ4NjE4NjJiZDQyOTU2Y2ViZjA0MjQ1OWJjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNaWtoYWlsIE5pa2FsYXlldSA8bWloYWlsbmlrYWxheWV1QGdt YWlsLmNvbT4KRGF0ZTogTW9uLCAyMSBBcHIgMjAyNSAxNDoxMTo1MyArMDIwMApTdWJqZWN0OiBb UEFUQ0ggdjMxIDcvN10gUmVmcmVzaCBzbmFwc2hvdCBwZXJpb2RpY2FsbHkgZHVyaW5nIGluZGV4 IHZhbGlkYXRpb24KCkVuaGFuY2VzIHZhbGlkYXRpb24gcGhhc2Ugb2YgY29uY3VycmVudGx5IGJ1 aWx0IGluZGV4ZXMgYnkgcGVyaW9kaWNhbGx5IHJlZnJlc2hpbmcgc25hcHNob3RzIHJhdGhlciB0 aGFuIHVzaW5nIGEgc2luZ2xlIHJlZmVyZW5jZSBzbmFwc2hvdC4gVGhpcyBhZGRyZXNzZXMgaXNz dWVzIHdpdGggeG1pbiBwcm9wYWdhdGlvbiBkdXJpbmcgbG9uZy1ydW5uaW5nIHZhbGlkYXRpb25z LgoKVGhlIHZhbGlkYXRpb24gbm93IHRha2VzIGEgZnJlc2ggc25hcHNob3QgZXZlcnkgZmV3IHBh Z2VzLCBhbGxvd2luZyB0aGUgeG1pbiBob3Jpem9uIHRvIGFkdmFuY2UuIFRoaXMgcmVzdG9yZXMg ZmVhdHVyZSBvZiBjb21taXQgZDlkMDc2MjIyZjViLCB3aGljaCB3YXMgcmV2ZXJ0ZWQgaW4gY29t bWl0IGUyOGJiODg1MTk2OS4gTmV3IFNUSVItYmFzZWQgYXBwcm9hY2ggZG9lcyBub3QgZGVwZW5k IG9uIHNpbmdsZSByZWZlcmVuY2Ugc25hcHNob3QgYW55bW9yZS4KLS0tCiBzcmMvYmFja2VuZC9h Y2Nlc3MvaGVhcC9SRUFETUUuSE9UICAgICAgIHwgIDQgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9o ZWFwL2hlYXBhbV9oYW5kbGVyLmMgfCA2NSArKysrKysrKysrKysrKysrKysrKysrKy0KIHNyYy9i YWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3BndmFjdXVtLmMgICAgfCAxMiArKystLQogc3JjL2JhY2tl bmQvY2F0YWxvZy9pbmRleC5jICAgICAgICAgICAgICB8IDYzICsrKysrKysrKysrKysrKystLS0t LS0tCiBzcmMvYmFja2VuZC9jb21tYW5kcy9pbmRleGNtZHMuYyAgICAgICAgIHwgNTAgKysrLS0t LS0tLS0tLS0tLS0tCiBzcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oICAgICAgICAgICAgIHwg MjUgKysrKy0tLS0tCiBzcmMvaW5jbHVkZS9hY2Nlc3MvdHJhbnNhbS5oICAgICAgICAgICAgIHwg MTUgKysrKysrCiBzcmMvaW5jbHVkZS9jYXRhbG9nL2luZGV4LmggICAgICAgICAgICAgIHwgIDIg Ky0KIDggZmlsZXMgY2hhbmdlZCwgMTUzIGluc2VydGlvbnMoKyksIDgzIGRlbGV0aW9ucygtKQoK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL1JFQURNRS5IT1QgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvaGVhcC9SRUFETUUuSE9UCmluZGV4IGIxYzc5NzUxN2VlLi4zODJmZTE3MjNh NSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvUkVBRE1FLkhPVAorKysgYi9z cmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9SRUFETUUuSE9UCkBAIC00MDEsMTIgKzQwMSwxMiBAQCBs aXZlIHR1cGxlLgogV2UgbWFyayB0aGUgaW5kZXggb3BlbiBmb3IgaW5zZXJ0cyAoYnV0IHN0aWxs IG5vdCByZWFkeSBmb3IgcmVhZHMpIHRoZW4KIHdlIGFnYWluIHdhaXQgZm9yIHRyYW5zYWN0aW9u cyB3aGljaCBoYXZlIHRoZSB0YWJsZSBvcGVuLiAgVGhlbiB2YWxpZGF0ZQogdGhlIGluZGV4LiAg VGhpcyBzZWFyY2hlcyBmb3IgdHVwbGVzIG1pc3NpbmcgZnJvbSB0aGUgaW5kZXggaW4gYXV4aWxp YXJ5Ci1pbmRleCwgYW5kIGluc2VydHMgYW55IG1pc3Npbmcgb25lcyBpZiB0aGV5IGFyZSB2aXNp YmxlIHRvIHJlZmVyZW5jZSBzbmFwc2hvdC4KK2luZGV4LCBhbmQgaW5zZXJ0cyBhbnkgbWlzc2lu ZyBvbmVzIGlmIHRoZXkgYXJlIHZpc2libGUgdG8gYSBmcmVzaCBzbmFwc2hvdC4KIEFnYWluLCB0 aGUgaW5kZXggZW50cmllcyBoYXZlIHRvIGhhdmUgVElEcyBlcXVhbCB0byBIT1QtY2hhaW4gcm9v dCBUSURzLCBidXQKIHRoZSB2YWx1ZSB0byBiZSBpbnNlcnRlZCBpcyB0aGUgb25lIGZyb20gdGhl IGxpdmUgdHVwbGUuCiAKIFRoZW4gd2Ugd2FpdCB1bnRpbCBldmVyeSB0cmFuc2FjdGlvbiB0aGF0 IGNvdWxkIGhhdmUgYSBzbmFwc2hvdCBvbGRlciB0aGFuCi10aGUgc2Vjb25kIHJlZmVyZW5jZSBz bmFwc2hvdCBpcyBmaW5pc2hlZC4gIFRoaXMgZW5zdXJlcyB0aGF0IG5vYm9keSBpcwordGhlIGxh dGVzdCB1c2VkIHNuYXBzaG90IGlzIGZpbmlzaGVkLiAgVGhpcyBlbnN1cmVzIHRoYXQgbm9ib2R5 IGlzCiBhbGl2ZSBhbnkgbG9uZ2VyIHdobyBjb3VsZCBuZWVkIHRvIHNlZSBhbnkgdHVwbGVzIHRo YXQgbWlnaHQgYmUgbWlzc2luZwogZnJvbSB0aGUgaW5kZXgsIGFzIHdlbGwgYXMgZW5zdXJpbmcg dGhhdCBubyBvbmUgY2FuIHNlZSBhbnkgaW5jb25zaXN0ZW50CiByb3dzIGluIGEgYnJva2VuIEhP VCBjaGFpbiAodGhlIGZpcnN0IGNvbmRpdGlvbiBpcyBzdHJvbmdlciB0aGFuIHRoZQpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKaW5kZXggZjkwMzEwYTFhYjguLjc4YmMx YmZmNzBlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxl ci5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKQEAgLTIw MjIsMjMgKzIwMjIsMjYgQEAgaGVhcGFtX2luZGV4X3ZhbGlkYXRlX3NjYW5fcmVhZF9zdHJlYW1f bmV4dCgKIAlyZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgdm9pZAorc3RhdGljIFRyYW5zYWN0 aW9uSWQKIGhlYXBhbV9pbmRleF92YWxpZGF0ZV9zY2FuKFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwK IAkJCQkJCSAgIFJlbGF0aW9uIGluZGV4UmVsYXRpb24sCiAJCQkJCQkgICBJbmRleEluZm8gKmlu ZGV4SW5mbywKLQkJCQkJCSAgIFNuYXBzaG90IHNuYXBzaG90LAogCQkJCQkJICAgVmFsaWRhdGVJ bmRleFN0YXRlICpzdGF0ZSwKIAkJCQkJCSAgIFZhbGlkYXRlSW5kZXhTdGF0ZSAqYXV4U3RhdGUp CiB7CisJVHJhbnNhY3Rpb25JZCBsaW1pdFhtaW47CisKIAlEYXR1bQkJdmFsdWVzW0lOREVYX01B WF9LRVlTXTsKIAlib29sCQlpc251bGxbSU5ERVhfTUFYX0tFWVNdOwogCisJU25hcHNob3QJCXNu YXBzaG90OwogCVR1cGxlVGFibGVTbG90ICAqc2xvdDsKIAlFU3RhdGUJCQkqZXN0YXRlOwogCUV4 cHJDb250ZXh0CQkqZWNvbnRleHQ7CiAJQnVmZmVyQWNjZXNzU3RyYXRlZ3kgYnN0cmF0ZWd5ID0g R2V0QWNjZXNzU3RyYXRlZ3koQkFTX0JVTEtSRUFEKTsKIAogCWludDY0CQkJbnVtX3RvX2NoZWNr OworCUJsb2NrTnVtYmVyCQlwYWdlX3JlYWRfY291bnRlciA9IDE7IC8qIHNldCB0byAxIHRvIHNr aXAgc25hcHNob3QgcmVzZXQgYXQgc3RhcnQgKi8KIAlUdXBsZXN0b3Jlc3RhdGUgKnR1cGxlc19m b3JfY2hlY2s7CiAJVmFsaWRhdGVJbmRleFNjYW5TdGF0ZSBjYWxsYmFja19wcml2YXRlX2RhdGE7 CiAKQEAgLTIwNDksNiArMjA1Miw4IEBAIGhlYXBhbV9pbmRleF92YWxpZGF0ZV9zY2FuKFJlbGF0 aW9uIGhlYXBSZWxhdGlvbiwKIAkvKiBVc2UgMTAlIG9mIG1lbW9yeSBmb3IgdHVwbGUgc3RvcmUu ICovCiAJaW50CQlzdG9yZV93b3JrX21lbV9wYXJ0ID0gbWFpbnRlbmFuY2Vfd29ya19tZW0gLyAx MDsKIAorCVB1c2hBY3RpdmVTbmFwc2hvdChHZXRUcmFuc2FjdGlvblNuYXBzaG90KCkpOworCiAJ LyoKIAkgKiBFbmNvZGUgVElEcyBhcyBpbnQ4IHZhbHVlcyBmb3IgdGhlIHNvcnQsIHJhdGhlciB0 aGFuIGRpcmVjdGx5IHNvcnRpbmcKIAkgKiBpdGVtIHBvaW50ZXJzLiAgVGhpcyBjYW4gYmUgc2ln bmlmaWNhbnRseSBmYXN0ZXIsIHByaW1hcmlseSBiZWNhdXNlIFRJRApAQCAtMjA1Nyw2ICsyMDYy LDEyIEBAIGhlYXBhbV9pbmRleF92YWxpZGF0ZV9zY2FuKFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwK IAkgKi8KIAl0dXBsZXNfZm9yX2NoZWNrID0gdHVwbGVzdG9yZV9iZWdpbl9kYXR1bShJTlQ4T0lE LCBmYWxzZSwgZmFsc2UsIHN0b3JlX3dvcmtfbWVtX3BhcnQpOwogCisJUG9wQWN0aXZlU25hcHNo b3QoKTsKKwlJbnZhbGlkYXRlQ2F0YWxvZ1NuYXBzaG90KCk7CisKKwlBc3NlcnQoIUhhdmVSZWdp c3RlcmVkT3JBY3RpdmVTbmFwc2hvdCgpKTsKKwlBc3NlcnQoIVRyYW5zYWN0aW9uSWRJc1ZhbGlk KE15UHJvYy0+eG1pbikpOworCiAJLyoKIAkgKiBzYW5pdHkgY2hlY2tzCiAJICovCkBAIC0yMDcy LDYgKzIwODMsMjkgQEAgaGVhcGFtX2luZGV4X3ZhbGlkYXRlX3NjYW4oUmVsYXRpb24gaGVhcFJl bGF0aW9uLAogCiAJc3RhdGUtPnR1cGxlc29ydCA9IGF1eFN0YXRlLT50dXBsZXNvcnQgPSBOVUxM OwogCisJLyoKKwkgKiBOb3cgdGFrZSB0aGUgZmlyc3Qgc25hcHNob3QgdGhhdCB3aWxsIGJlIHVz ZWQgdG8gZmlsdGVyIGNhbmRpZGF0ZQorCSAqIHR1cGxlcy4gV2UgYXJlIGdvaW5nIHRvIHJlcGxh Y2UgaXQgYnkgbmV3ZXIgc25hcHNob3QgZXZlcnkgc28gb2Z0ZW4KKwkgKiB0byBwcm9wYWdhdGUg aG9yaXpvbi4KKwkgKgorCSAqIEJld2FyZSEgIFRoZXJlIG1pZ2h0IHN0aWxsIGJlIHNuYXBzaG90 cyBpbiB1c2UgdGhhdCB0cmVhdCBzb21lIHRyYW5zYWN0aW9uCisJICogYXMgaW4tcHJvZ3Jlc3Mg dGhhdCBvdXIgdGVtcG9yYXJ5IHNuYXBzaG90IHRyZWF0cyBhcyBjb21taXR0ZWQuCisJICoKKwkg KiBJZiBzdWNoIGEgcmVjZW50bHktY29tbWl0dGVkIHRyYW5zYWN0aW9uIGRlbGV0ZWQgdHVwbGVz IGluIHRoZSB0YWJsZSwKKwkgKiB3ZSB3aWxsIG5vdCBpbmNsdWRlIHRoZW0gaW4gdGhlIGluZGV4 OyB5ZXQgdGhvc2UgdHJhbnNhY3Rpb25zIHdoaWNoCisJICogc2VlIHRoZSBkZWxldGluZyBvbmUg YXMgc3RpbGwtaW4tcHJvZ3Jlc3Mgd2lsbCBleHBlY3Qgc3VjaCB0dXBsZXMgdG8KKwkgKiBiZSB0 aGVyZSBvbmNlIHdlIG1hcmsgdGhlIGluZGV4IGFzIHZhbGlkLgorCSAqCisJICogV2Ugc29sdmUg dGhpcyBieSB3YWl0aW5nIGZvciBhbGwgZW5kYW5nZXJlZCB0cmFuc2FjdGlvbnMgdG8gZXhpdCBi ZWZvcmUKKwkgKiB3ZSBtYXJrIHRoZSBpbmRleCBhcyB2YWxpZCwgZm9yIHRoYXQgcmVhc29uIGxp bWl0WG1pbiBpcyBzdXBwb3J0ZWQuCisJICoKKwkgKiBXZSBhbHNvIHNldCBBY3RpdmVTbmFwc2hv dCB0byB0aGlzIHNuYXAsIHNpbmNlIGZ1bmN0aW9ucyBpbiBpbmRleGVzIG1heQorCSAqIG5lZWQg YSBzbmFwc2hvdC4KKwkgKi8KKwlzbmFwc2hvdCA9IFJlZ2lzdGVyU25hcHNob3QoR2V0TGF0ZXN0 U25hcHNob3QoKSk7CisJUHVzaEFjdGl2ZVNuYXBzaG90KHNuYXBzaG90KTsKKwlsaW1pdFhtaW4g PSBzbmFwc2hvdC0+eG1pbjsKKwogCWVzdGF0ZSA9IENyZWF0ZUV4ZWN1dG9yU3RhdGUoKTsKIAll Y29udGV4dCA9IEdldFBlclR1cGxlRXhwckNvbnRleHQoZXN0YXRlKTsKIAlzbG90ID0gTWFrZVNp bmdsZVR1cGxlVGFibGVTbG90KFJlbGF0aW9uR2V0RGVzY3IoaGVhcFJlbGF0aW9uKSwKQEAgLTIx MDUsNiArMjEzOSw3IEBAIGhlYXBhbV9pbmRleF92YWxpZGF0ZV9zY2FuKFJlbGF0aW9uIGhlYXBS ZWxhdGlvbiwKIAogCQlMb2NrQnVmZmVyKGJ1ZiwgQlVGRkVSX0xPQ0tfU0hBUkUpOwogCQlibG9j a19udW1iZXIgPSBCdWZmZXJHZXRCbG9ja051bWJlcihidWYpOworCQlwYWdlX3JlYWRfY291bnRl cisrOwogCiAJCWkgPSAwOwogCQl3aGlsZSAoKG9mZiA9IHR1cGxlc1tpXSkgIT0gSW52YWxpZE9m ZnNldE51bWJlcikKQEAgLTIxNjIsNiArMjE5NywyMCBAQCBoZWFwYW1faW5kZXhfdmFsaWRhdGVf c2NhbihSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAJCX0KIAogCQlSZWxlYXNlQnVmZmVyKGJ1Zik7 CisjZGVmaW5lIFZBTElEQVRFX0lOREVYX1JFU0VUX1NOQVBTSE9UX0VBQ0hfTl9QQUdFIDQwOTYK KwkJaWYgKHBhZ2VfcmVhZF9jb3VudGVyICUgVkFMSURBVEVfSU5ERVhfUkVTRVRfU05BUFNIT1Rf RUFDSF9OX1BBR0UgPT0gMCkKKwkJeworCQkJUG9wQWN0aXZlU25hcHNob3QoKTsKKwkJCVVucmVn aXN0ZXJTbmFwc2hvdChzbmFwc2hvdCk7CisJCQkvKiB0byBtYWtlIHN1cmUgd2UgcHJvcGFnYXRl IHhtaW4gKi8KKwkJCUludmFsaWRhdGVDYXRhbG9nU25hcHNob3QoKTsKKwkJCUFzc2VydCghVHJh bnNhY3Rpb25JZElzVmFsaWQoTXlQcm9jLT54bWluKSk7CisKKwkJCXNuYXBzaG90ID0gUmVnaXN0 ZXJTbmFwc2hvdChHZXRMYXRlc3RTbmFwc2hvdCgpKTsKKwkJCVB1c2hBY3RpdmVTbmFwc2hvdChz bmFwc2hvdCk7CisJCQkvKiB4bWluIHNob3VsZCBub3QgZ28gYmFja3dhcmRzLCBidXQganVzdCBp biBjYXNlICovCisJCQlsaW1pdFhtaW4gPSBUcmFuc2FjdGlvbklkTmV3ZXIobGltaXRYbWluLCBz bmFwc2hvdC0+eG1pbik7CisJCX0KIAl9CiAKIAlFeGVjRHJvcFNpbmdsZVR1cGxlVGFibGVTbG90 KHNsb3QpOwpAQCAtMjE3MSwxMSArMjIyMCwyMyBAQCBoZWFwYW1faW5kZXhfdmFsaWRhdGVfc2Nh bihSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAJcmVhZF9zdHJlYW1fZW5kKHJlYWRfc3RyZWFtKTsK IAl0dXBsZXN0b3JlX2VuZCh0dXBsZXNfZm9yX2NoZWNrKTsKIAorCS8qCisJICogRHJvcCB0aGUg bGF0ZXN0IHNuYXBzaG90LiAgV2UgbXVzdCBkbyB0aGlzIGJlZm9yZSB3YWl0aW5nIG91dCBvdGhl cgorCSAqIHNuYXBzaG90IGhvbGRlcnMsIGVsc2Ugd2Ugd2lsbCBkZWFkbG9jayBhZ2FpbnN0IG90 aGVyIHByb2Nlc3NlcyBhbHNvCisJICogZG9pbmcgQ1JFQVRFIElOREVYIENPTkNVUlJFTlRMWSwg d2hpY2ggd291bGQgc2VlIG91ciBzbmFwc2hvdCBhcyBvbmUKKwkgKiB0aGV5IG11c3Qgd2FpdCBm b3IuCisJICovCisJUG9wQWN0aXZlU25hcHNob3QoKTsKKwlVbnJlZ2lzdGVyU25hcHNob3Qoc25h cHNob3QpOworCUludmFsaWRhdGVDYXRhbG9nU25hcHNob3QoKTsKKwlBc3NlcnQoTXlQcm9jLT54 bWluID09IEludmFsaWRUcmFuc2FjdGlvbklkKTsKIAlGcmVlQWNjZXNzU3RyYXRlZ3koYnN0cmF0 ZWd5KTsKIAogCS8qIFRoZXNlIG1heSBoYXZlIGJlZW4gcG9pbnRpbmcgdG8gdGhlIG5vdy1nb25l IGVzdGF0ZSAqLwogCWluZGV4SW5mby0+aWlfRXhwcmVzc2lvbnNTdGF0ZSA9IE5JTDsKIAlpbmRl eEluZm8tPmlpX1ByZWRpY2F0ZVN0YXRlID0gTlVMTDsKKworCXJldHVybiBsaW1pdFhtaW47CiB9 CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ3ZhY3V1bS5j IGIvc3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGd2YWN1dW0uYwppbmRleCA2YjcxMTdiNTZi Mi4uN2VhNjBjMThlNmYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3Bn dmFjdXVtLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGd2YWN1dW0uYwpAQCAt MTkxLDE0ICsxOTEsMTYgQEAgdmFjdXVtTGVhZlBhZ2Uoc3BnQnVsa0RlbGV0ZVN0YXRlICpiZHMs IFJlbGF0aW9uIGluZGV4LCBCdWZmZXIgYnVmZmVyLAogCQkJICogQWRkIHRhcmdldCBUSUQgdG8g cGVuZGluZyBsaXN0IGlmIHRoZSByZWRpcmVjdGlvbiBjb3VsZCBoYXZlCiAJCQkgKiBoYXBwZW5l ZCBzaW5jZSBWQUNVVU0gc3RhcnRlZC4gIChJZiB4aWQgaXMgaW52YWxpZCwgYXNzdW1lIGl0CiAJ CQkgKiBtdXN0IGhhdmUgaGFwcGVuZWQgYmVmb3JlIFZBQ1VVTSBzdGFydGVkLCBzaW5jZSBSRUlO REVYCi0JCQkgKiBDT05DVVJSRU5UTFkgbG9ja3Mgb3V0IFZBQ1VVTS4pCisJCQkgKiBDT05DVVJS RU5UTFkgbG9ja3Mgb3V0IFZBQ1VVTSwgaWYgbXlYbWluIGlzIGludmFsaWQgaXQgaXMKKwkJCSAq IHZhbGlkYXRpb24gc2Nhbi4pCiAJCQkgKgogCQkJICogTm90ZTogd2UgY291bGQgbWFrZSBhIHRp Z2h0ZXIgdGVzdCBieSBzZWVpbmcgaWYgdGhlIHhpZCBpcwogCQkJICogInJ1bm5pbmciIGFjY29y ZGluZyB0byB0aGUgYWN0aXZlIHNuYXBzaG90OyBidXQgc25hcG1nci5jCiAJCQkgKiBkb2Vzbid0 IGN1cnJlbnRseSBleHBvcnQgYSBzdWl0YWJsZSBBUEksIGFuZCBpdCdzIG5vdCBlbnRpcmVseQog CQkJICogY2xlYXIgdGhhdCBhIHRpZ2h0ZXIgdGVzdCBpcyB3b3J0aCB0aGUgY3ljbGVzIGFueXdh eS4KIAkJCSAqLwotCQkJaWYgKFRyYW5zYWN0aW9uSWRGb2xsb3dzT3JFcXVhbHMoZHQtPnhpZCwg YmRzLT5teVhtaW4pKQorCQkJaWYgKCFUcmFuc2FjdGlvbklkSXNWYWxpZChiZHMtPm15WG1pbikg fHwKKwkJCQkJVHJhbnNhY3Rpb25JZEZvbGxvd3NPckVxdWFscyhkdC0+eGlkLCBiZHMtPm15WG1p bikpCiAJCQkJc3BnQWRkUGVuZGluZ1RJRChiZHMsICZkdC0+cG9pbnRlcik7CiAJCX0KIAkJZWxz ZQpAQCAtODA4LDcgKzgxMCw2IEBAIHNwZ3ZhY3V1bXNjYW4oc3BnQnVsa0RlbGV0ZVN0YXRlICpi ZHMpCiAJLyogRmluaXNoIHNldHRpbmcgdXAgc3BnQnVsa0RlbGV0ZVN0YXRlICovCiAJaW5pdFNw R2lzdFN0YXRlKCZiZHMtPnNwZ3N0YXRlLCBpbmRleCk7CiAJYmRzLT5wZW5kaW5nTGlzdCA9IE5V TEw7Ci0JYmRzLT5teVhtaW4gPSBHZXRBY3RpdmVTbmFwc2hvdCgpLT54bWluOwogCWJkcy0+bGFz dEZpbGxlZEJsb2NrID0gU1BHSVNUX0xBU1RfRklYRURfQkxLTk87CiAKIAkvKgpAQCAtOTU5LDYg Kzk2MCwxMCBAQCBzcGdidWxrZGVsZXRlKEluZGV4VmFjdXVtSW5mbyAqaW5mbywgSW5kZXhCdWxr RGVsZXRlUmVzdWx0ICpzdGF0cywKIAliZHMuc3RhdHMgPSBzdGF0czsKIAliZHMuY2FsbGJhY2sg PSBjYWxsYmFjazsKIAliZHMuY2FsbGJhY2tfc3RhdGUgPSBjYWxsYmFja19zdGF0ZTsKKwlpZiAo aW5mby0+dmFsaWRhdGVfaW5kZXgpCisJCWJkcy5teVhtaW4gPSBJbnZhbGlkVHJhbnNhY3Rpb25J ZDsKKwllbHNlCisJCWJkcy5teVhtaW4gPSBHZXRBY3RpdmVTbmFwc2hvdCgpLT54bWluOwogCiAJ c3BndmFjdXVtc2NhbigmYmRzKTsKIApAQCAtOTk5LDYgKzEwMDQsNyBAQCBzcGd2YWN1dW1jbGVh bnVwKEluZGV4VmFjdXVtSW5mbyAqaW5mbywgSW5kZXhCdWxrRGVsZXRlUmVzdWx0ICpzdGF0cykK IAkJYmRzLnN0YXRzID0gc3RhdHM7CiAJCWJkcy5jYWxsYmFjayA9IGR1bW15X2NhbGxiYWNrOwog CQliZHMuY2FsbGJhY2tfc3RhdGUgPSBOVUxMOworCQliZHMubXlYbWluID0gR2V0QWN0aXZlU25h cHNob3QoKS0+eG1pbjsKIAogCQlzcGd2YWN1dW1zY2FuKCZiZHMpOwogCX0KZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2NhdGFsb2cvaW5kZXguYyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvaW5kZXgu YwppbmRleCAyZDdkMjVmMTk4Ni4uYzM3YTc4NmRhZmQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L2NhdGFsb2cvaW5kZXguYworKysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL2luZGV4LmMKQEAgLTY5 LDYgKzY5LDcgQEAKICNpbmNsdWRlICJzdG9yYWdlL2J1Zm1nci5oIgogI2luY2x1ZGUgInN0b3Jh Z2UvbG1nci5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcHJlZGljYXRlLmgiCisjaW5jbHVkZSAic3Rv cmFnZS9wcm9jLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9zbWdyLmgiCiAjaW5jbHVkZSAidXRpbHMv YnVpbHRpbnMuaCIKICNpbmNsdWRlICJ1dGlscy9mbWdyb2lkcy5oIgpAQCAtMzUxNCw4ICszNTE1 LDkgQEAgSW5kZXhDaGVja0V4Y2x1c2lvbihSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAgKiBpbnNl cnQgdGhlaXIgbmV3IHR1cGxlcyBpbnRvIGl0LiBBdCB0aGUgc2FtZSBtb21lbnQgd2UgY2xlYXIg ImluZGlzcmVhZHkiIGZvcgogICogYXV4aWxpYXJ5IGluZGV4LCBzaW5jZSBpdCBpcyBubyBtb3Jl IHJlcXVpcmVkIHRvIGJlIHVwZGF0ZWQuCiAgKgotICogV2UgdGhlbiB0YWtlIGEgbmV3IHJlZmVy ZW5jZSBzbmFwc2hvdCwgYW55IHR1cGxlcyB0aGF0IGFyZSB2YWxpZCBhY2NvcmRpbmcKLSAqIHRv IHRoaXMgc25hcCwgYnV0IGFyZSBub3QgaW4gdGhlIGluZGV4LCBtdXN0IGJlIGFkZGVkIHRvIHRo ZSBpbmRleC4KKyAqIFdlIHRoZW4gdGFrZSBhIG5ldyBzbmFwc2hvdCwgYW55IHR1cGxlcyB0aGF0 IGFyZSB2YWxpZCBhY2NvcmRpbmcKKyAqIHRvIHRoaXMgc25hcCwgYnV0IGFyZSBub3QgaW4gdGhl IGluZGV4LCBtdXN0IGJlIGFkZGVkIHRvIHRoZSBpbmRleC4gSW4KKyAqIG9yZGVyIHRvIHByb3Bh Z2F0ZSB4bWluIHdlIHJlc2V0IHRoYXQgc25hcHNob3QgZXZlcnkgc28gb2Z0ZW4uCiAgKiAoQW55 IHR1cGxlcyBjb21taXR0ZWQgbGl2ZSBhZnRlciB0aGUgc25hcCB3aWxsIGJlIGluc2VydGVkIGlu dG8gdGhlCiAgKiBpbmRleCBieSB0aGVpciBvcmlnaW5hdGluZyB0cmFuc2FjdGlvbi4gIEFueSB0 dXBsZXMgY29tbWl0dGVkIGRlYWQgYmVmb3JlCiAgKiB0aGUgc25hcCBuZWVkIG5vdCBiZSBpbmRl eGVkLCBiZWNhdXNlIHdlIHdpbGwgd2FpdCBvdXQgYWxsIHRyYW5zYWN0aW9ucwpAQCAtMzUyOCw3 ICszNTMwLDcgQEAgSW5kZXhDaGVja0V4Y2x1c2lvbihSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAg KiBUSURzIG9mIGJvdGggYXV4aWxpYXJ5IGFuZCB0YXJnZXQgaW5kZXhlcywgYW5kIGRvaW5nIGEg Im1lcmdlIGpvaW4iIGFnYWluc3QKICAqIHRoZSBUSUQgbGlzdHMgdG8gc2VlIHdoaWNoIHR1cGxl cyBmcm9tIGF1eGlsaWFyeSBpbmRleCBhcmUgbWlzc2luZyBmcm9tIHRoZQogICogdGFyZ2V0IGlu ZGV4LiAgVGh1cyB3ZSB3aWxsIGVuc3VyZSB0aGF0IGFsbCB0dXBsZXMgdmFsaWQgYWNjb3JkaW5n IHRvIHRoZQotICogcmVmZXJlbmNlIHNuYXBzaG90IGFyZSBpbiB0aGUgaW5kZXguIE5vdGljZSB3 ZSBuZWVkIHRvIGRvIGJ1bGtkZWxldGUgaW4gdGhlCisgKiBsYXRlc3Qgc25hcHNob3QgYXJlIGlu IHRoZSBpbmRleC4gTm90aWNlIHdlIG5lZWQgdG8gZG8gYnVsa2RlbGV0ZSBpbiB0aGUKICAqIHBh cnRpY3VsYXIgb3JkZXI6IGF1eGlsaWFyeSBmaXJzdCwgdGFyZ2V0IGxhc3QuCiAgKgogICogQnVp bGRpbmcgYSB1bmlxdWUgaW5kZXggdGhpcyB3YXkgaXMgdHJpY2t5OiB3ZSBtaWdodCB0cnkgdG8g aW5zZXJ0IGEKQEAgLTM1NDEsMjEgKzM1NDMsMjQgQEAgSW5kZXhDaGVja0V4Y2x1c2lvbihSZWxh dGlvbiBoZWFwUmVsYXRpb24sCiAgKiBiZWZvcmUgaXQgZGVjbGFyZXMgYSB1bmlxdWVuZXNzIGVy cm9yLgogICoKICAqIEFmdGVyIGNvbXBsZXRpbmcgdmFsaWRhdGVfaW5kZXgoKSwgd2Ugd2FpdCB1 bnRpbCBhbGwgdHJhbnNhY3Rpb25zIHRoYXQKLSAqIHdlcmUgYWxpdmUgYXQgdGhlIHRpbWUgb2Yg dGhlIHJlZmVyZW5jZSBzbmFwc2hvdCBhcmUgZ29uZTsgdGhpcyBpcwotICogbmVjZXNzYXJ5IHRv IGJlIHN1cmUgdGhlcmUgYXJlIG5vbmUgbGVmdCB3aXRoIGEgdHJhbnNhY3Rpb24gc25hcHNob3QK LSAqIG9sZGVyIHRoYW4gdGhlIHJlZmVyZW5jZSAoYW5kIGhlbmNlIHBvc3NpYmx5IGFibGUgdG8g c2VlIHR1cGxlcyB3ZSBkaWQKLSAqIG5vdCBpbmRleCkuICBUaGVuIHdlIG1hcmsgdGhlIGluZGV4 ICJpbmRpc3ZhbGlkIiBhbmQgY29tbWl0LiAgU3Vic2VxdWVudAotICogdHJhbnNhY3Rpb25zIHdp bGwgYmUgYWJsZSB0byB1c2UgaXQgZm9yIHF1ZXJpZXMuCisgKiB3ZXJlIGFsaXZlIGF0IHRoZSB0 aW1lIG9mIHRoZSBsYXRlc3Qgc25hcHNob3QgdXNlZCBkdXJpbmcgdmFsaWRhdGlvbiBhcmUKKyAq IGdvbmU7IHRoaXMgaXMgbmVjZXNzYXJ5IHRvIGJlIHN1cmUgdGhlcmUgYXJlIG5vbmUgbGVmdCB3 aXRoIGEgdHJhbnNhY3Rpb24KKyAqIHNuYXBzaG90IG9sZGVyIHRoYW4gdGhhdCAoYW5kIGhlbmNl IHBvc3NpYmx5IGFibGUgdG8gc2VlIHR1cGxlcyB3ZSBkaWQKKyAqIG5vdCBpbmRleCkuICBUaGUg c25hcHNob3QgaXMgcGVyaW9kaWNhbGx5IHJlZnJlc2hlZCBkdXJpbmcgdGhlIGhlYXAgc2Nhbgor ICogdG8gcHJvcGFnYXRlIHRoZSB4bWluIGhvcml6b24sIHNvIGxpbWl0WG1pbiB0cmFja3MgdGhl IG1vc3QgcmVjZW50IG9uZS4KKyAqIFRoZW4gd2UgbWFyayB0aGUgaW5kZXggImluZGlzdmFsaWQi IGFuZCBjb21taXQuICBTdWJzZXF1ZW50IHRyYW5zYWN0aW9ucworICogd2lsbCBiZSBhYmxlIHRv IHVzZSBpdCBmb3IgcXVlcmllcy4KICAqCiAgKiBBbHNvLCBzb21lIGFjdGlvbnMgdG8gY29uY3Vy cmVudCBkcm9wIHRoZSBhdXhpbGlhcnkgaW5kZXggYXJlIHBlcmZvcm1lZC4KICAqLwotdm9pZAot dmFsaWRhdGVfaW5kZXgoT2lkIGhlYXBJZCwgT2lkIGluZGV4SWQsIE9pZCBhdXhJbmRleElkLCBT bmFwc2hvdCBzbmFwc2hvdCkKK1RyYW5zYWN0aW9uSWQKK3ZhbGlkYXRlX2luZGV4KE9pZCBoZWFw SWQsIE9pZCBpbmRleElkLCBPaWQgYXV4SW5kZXhJZCkKIHsKIAlSZWxhdGlvbgloZWFwUmVsYXRp b24sCiAJCQkJaW5kZXhSZWxhdGlvbiwKIAkJCQlhdXhJbmRleFJlbGF0aW9uOwogCUluZGV4SW5m byAgKmluZGV4SW5mbzsKKwlUcmFuc2FjdGlvbklkIGxpbWl0WG1pbjsKIAlJbmRleFZhY3V1bUlu Zm8gaXZpbmZvLCBhdXhpdmluZm87CiAJVmFsaWRhdGVJbmRleFN0YXRlIHN0YXRlLCBhdXhTdGF0 ZTsKIAlPaWQJCQlzYXZlX3VzZXJpZDsKQEAgLTM2MDUsOCArMzYxMCwxMiBAQCB2YWxpZGF0ZV9p bmRleChPaWQgaGVhcElkLCBPaWQgaW5kZXhJZCwgT2lkIGF1eEluZGV4SWQsIFNuYXBzaG90IHNu YXBzaG90KQogCSAqIEZldGNoIGluZm8gbmVlZGVkIGZvciBpbmRleF9pbnNlcnQuICAoWW91IG1p Z2h0IHRoaW5rIHRoaXMgc2hvdWxkIGJlCiAJICogcGFzc2VkIGluIGZyb20gRGVmaW5lSW5kZXgs IGJ1dCBpdHMgY29weSBpcyBsb25nIGdvbmUgZHVlIHRvIGhhdmluZwogCSAqIGJlZW4gYnVpbHQg aW4gYSBwcmV2aW91cyB0cmFuc2FjdGlvbi4pCisJICoKKwkgKiBXZSBtaWdodCBuZWVkIHNuYXBz aG90IGZvciBpbmRleCBleHByZXNzaW9ucyBvciBwcmVkaWNhdGVzLgogCSAqLworCVB1c2hBY3Rp dmVTbmFwc2hvdChHZXRUcmFuc2FjdGlvblNuYXBzaG90KCkpOwogCWluZGV4SW5mbyA9IEJ1aWxk SW5kZXhJbmZvKGluZGV4UmVsYXRpb24pOworCVBvcEFjdGl2ZVNuYXBzaG90KCk7CiAKIAkvKiBt YXJrIGJ1aWxkIGlzIGNvbmN1cnJlbnQganVzdCBmb3IgY29uc2lzdGVuY3kgKi8KIAlpbmRleElu Zm8tPmlpX0NvbmN1cnJlbnQgPSB0cnVlOwpAQCAtMzY0Miw2ICszNjUxLDkgQEAgdmFsaWRhdGVf aW5kZXgoT2lkIGhlYXBJZCwgT2lkIGluZGV4SWQsIE9pZCBhdXhJbmRleElkLCBTbmFwc2hvdCBz bmFwc2hvdCkKIAkJCQkJCQkJCQkgICBOVUxMLCBUVVBMRVNPUlRfTk9ORSk7CiAJYXV4U3RhdGUu aHR1cHMgPSBhdXhTdGF0ZS5pdHVwcyA9IGF1eFN0YXRlLnR1cHNfaW5zZXJ0ZWQgPSAwOwogCisJ LyogdHVwbGVzb3J0X2JlZ2luX2RhdHVtIG1heSByZXF1aXJlIGNhdGFsb2cgc25hcHNob3QgKi8K KwlJbnZhbGlkYXRlQ2F0YWxvZ1NuYXBzaG90KCk7CisKIAkodm9pZCkgaW5kZXhfYnVsa19kZWxl dGUoJmF1eGl2aW5mbywgTlVMTCwKIAkJCQkJCQkgdmFsaWRhdGVfaW5kZXhfY2FsbGJhY2ssICZh dXhTdGF0ZSk7CiAJLyogSWYgYXV4IGluZGV4IGlzIGVtcHR5LCBtZXJnZSBtYXkgYmUgc2tpcHBl ZCAqLwpAQCAtMzY2MSw3ICszNjczLDEzIEBAIHZhbGlkYXRlX2luZGV4KE9pZCBoZWFwSWQsIE9p ZCBpbmRleElkLCBPaWQgYXV4SW5kZXhJZCwgU25hcHNob3Qgc25hcHNob3QpCiAJCWluZGV4X2Ns b3NlKGluZGV4UmVsYXRpb24sIE5vTG9jayk7CiAJCXRhYmxlX2Nsb3NlKGhlYXBSZWxhdGlvbiwg Tm9Mb2NrKTsKIAotCQlyZXR1cm47CisJCVB1c2hBY3RpdmVTbmFwc2hvdChHZXRUcmFuc2FjdGlv blNuYXBzaG90KCkpOworCQlsaW1pdFhtaW4gPSBHZXRBY3RpdmVTbmFwc2hvdCgpLT54bWluOwor CQlQb3BBY3RpdmVTbmFwc2hvdCgpOworCQlJbnZhbGlkYXRlQ2F0YWxvZ1NuYXBzaG90KCk7CisK KwkJQXNzZXJ0KCFUcmFuc2FjdGlvbklkSXNWYWxpZChNeVByb2MtPnhtaW4pKTsKKwkJcmV0dXJu IGxpbWl0WG1pbjsKIAl9CiAKIAlzdGF0ZS50dXBsZXNvcnQgPSB0dXBsZXNvcnRfYmVnaW5fZGF0 dW0oSU5UOE9JRCwgSW50OExlc3NPcGVyYXRvciwKQEAgLTM2NzAsNiArMzY4OCw5IEBAIHZhbGlk YXRlX2luZGV4KE9pZCBoZWFwSWQsIE9pZCBpbmRleElkLCBPaWQgYXV4SW5kZXhJZCwgU25hcHNo b3Qgc25hcHNob3QpCiAJCQkJCQkJCQkJCU5VTEwsIFRVUExFU09SVF9OT05FKTsKIAlzdGF0ZS5o dHVwcyA9IHN0YXRlLml0dXBzID0gc3RhdGUudHVwc19pbnNlcnRlZCA9IDA7CiAKKwkvKiB0dXBs ZXNvcnRfYmVnaW5fZGF0dW0gbWF5IHJlcXVpcmUgY2F0YWxvZyBzbmFwc2hvdCAqLworCUludmFs aWRhdGVDYXRhbG9nU25hcHNob3QoKTsKKwogCS8qIGFtYnVsa2RlbGV0ZSB1cGRhdGVzIHByb2dy ZXNzIG1ldHJpY3MgKi8KIAkodm9pZCkgaW5kZXhfYnVsa19kZWxldGUoJml2aW5mbywgTlVMTCwK IAkJCQkJCQkgdmFsaWRhdGVfaW5kZXhfY2FsbGJhY2ssICZzdGF0ZSk7CkBAIC0zNjg5LDE5ICsz NzEwLDI0IEBAIHZhbGlkYXRlX2luZGV4KE9pZCBoZWFwSWQsIE9pZCBpbmRleElkLCBPaWQgYXV4 SW5kZXhJZCwgU25hcHNob3Qgc25hcHNob3QpCiAJCXBnc3RhdF9wcm9ncmVzc191cGRhdGVfbXVs dGlfcGFyYW0oMywgcHJvZ3Jlc3NfaW5kZXgsIHByb2dyZXNzX3ZhbHMpOwogCX0KIAl0dXBsZXNv cnRfcGVyZm9ybXNvcnQoc3RhdGUudHVwbGVzb3J0KTsKKwkvKiB0dXBsZXNvcnRfcGVyZm9ybXNv cnQgbWF5IHJlcXVpcmUgY2F0YWxvZyBzbmFwc2hvdCAqLworCUludmFsaWRhdGVDYXRhbG9nU25h cHNob3QoKTsKKwogCXR1cGxlc29ydF9wZXJmb3Jtc29ydChhdXhTdGF0ZS50dXBsZXNvcnQpOwor CS8qIHR1cGxlc29ydF9wZXJmb3Jtc29ydCBtYXkgcmVxdWlyZSBjYXRhbG9nIHNuYXBzaG90ICov CisJSW52YWxpZGF0ZUNhdGFsb2dTbmFwc2hvdCgpOworCUFzc2VydCghVHJhbnNhY3Rpb25JZElz VmFsaWQoTXlQcm9jLT54bWluKSk7CiAKIAkvKgogCSAqIE5vdyBtZXJnZSBib3RoIGluZGV4ZXMK IAkgKi8KIAlwZ3N0YXRfcHJvZ3Jlc3NfdXBkYXRlX3BhcmFtKFBST0dSRVNTX0NSRUFURUlEWF9Q SEFTRSwKIAkJCQkJCQkJIFBST0dSRVNTX0NSRUFURUlEWF9QSEFTRV9WQUxJREFURV9JRFhNRVJH RSk7Ci0JdGFibGVfaW5kZXhfdmFsaWRhdGVfc2NhbihoZWFwUmVsYXRpb24sCi0JCQkJCQkJICBp bmRleFJlbGF0aW9uLAotCQkJCQkJCSAgaW5kZXhJbmZvLAotCQkJCQkJCSAgc25hcHNob3QsCi0J CQkJCQkJICAmc3RhdGUsCi0JCQkJCQkJICAmYXV4U3RhdGUpOworCWxpbWl0WG1pbiA9IHRhYmxl X2luZGV4X3ZhbGlkYXRlX3NjYW4oaGVhcFJlbGF0aW9uLAorCQkJCQkJCQkJCSAgaW5kZXhSZWxh dGlvbiwKKwkJCQkJCQkJCQkgIGluZGV4SW5mbywKKwkJCQkJCQkJCQkgICZzdGF0ZSwKKwkJCQkJ CQkJCQkgICZhdXhTdGF0ZSk7CiAKIAkvKiBUdXBsZSBzb3J0IGNsb3NlZCBieSB0YWJsZV9pbmRl eF92YWxpZGF0ZV9zY2FuICovCiAJQXNzZXJ0KHN0YXRlLnR1cGxlc29ydCA9PSBOVUxMICYmIGF1 eFN0YXRlLnR1cGxlc29ydCA9PSBOVUxMKTsKQEAgLTM3MjQsNiArMzc1MCw5IEBAIHZhbGlkYXRl X2luZGV4KE9pZCBoZWFwSWQsIE9pZCBpbmRleElkLCBPaWQgYXV4SW5kZXhJZCwgU25hcHNob3Qg c25hcHNob3QpCiAJaW5kZXhfY2xvc2UoYXV4SW5kZXhSZWxhdGlvbiwgTm9Mb2NrKTsKIAlpbmRl eF9jbG9zZShpbmRleFJlbGF0aW9uLCBOb0xvY2spOwogCXRhYmxlX2Nsb3NlKGhlYXBSZWxhdGlv biwgTm9Mb2NrKTsKKworCUFzc2VydCghVHJhbnNhY3Rpb25JZElzVmFsaWQoTXlQcm9jLT54bWlu KSk7CisJcmV0dXJuIGxpbWl0WG1pbjsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2NvbW1hbmRzL2luZGV4Y21kcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvaW5kZXhjbWRzLmMK aW5kZXggYjQzMGQ0YTViMzQuLjBlN2I5NjFiMTcwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9j b21tYW5kcy9pbmRleGNtZHMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9pbmRleGNtZHMu YwpAQCAtNTk2LDcgKzU5Niw2IEBAIERlZmluZUluZGV4KFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAlM b2NrUmVsSWQJaGVhcHJlbGlkOwogCUxPQ0tUQUcJCWhlYXBsb2NrdGFnOwogCUxPQ0tNT0RFCWxv Y2ttb2RlOwotCVNuYXBzaG90CXNuYXBzaG90OwogCU9pZAkJCXJvb3Rfc2F2ZV91c2VyaWQ7CiAJ aW50CQkJcm9vdF9zYXZlX3NlY19jb250ZXh0OwogCWludAkJCXJvb3Rfc2F2ZV9uZXN0bGV2ZWw7 CkBAIC0xODE0LDMyICsxODEzLDExIEBAIERlZmluZUluZGV4KFBhcnNlU3RhdGUgKnBzdGF0ZSwK IAkvKiBUZWxsIGNvbmN1cnJlbnQgaW5kZXggYnVpbGRzIHRvIGlnbm9yZSB1cywgaWYgaW5kZXgg cXVhbGlmaWVzICovCiAJaWYgKHNhZmVfaW5kZXgpCiAJCXNldF9pbmRleHNhZmVfcHJvY2ZsYWdz KCk7Ci0KLQkvKgotCSAqIE5vdyB0YWtlIHRoZSAicmVmZXJlbmNlIHNuYXBzaG90IiB0aGF0IHdp bGwgYmUgdXNlZCBieSB2YWxpZGF0ZV9pbmRleCgpCi0JICogdG8gZmlsdGVyIGNhbmRpZGF0ZSB0 dXBsZXMuICBCZXdhcmUhICBUaGVyZSBtaWdodCBzdGlsbCBiZSBzbmFwc2hvdHMgaW4KLQkgKiB1 c2UgdGhhdCB0cmVhdCBzb21lIHRyYW5zYWN0aW9uIGFzIGluLXByb2dyZXNzIHRoYXQgb3VyIHJl ZmVyZW5jZQotCSAqIHNuYXBzaG90IHRyZWF0cyBhcyBjb21taXR0ZWQuICBJZiBzdWNoIGEgcmVj ZW50bHktY29tbWl0dGVkIHRyYW5zYWN0aW9uCi0JICogZGVsZXRlZCB0dXBsZXMgaW4gdGhlIHRh YmxlLCB3ZSB3aWxsIG5vdCBpbmNsdWRlIHRoZW0gaW4gdGhlIGluZGV4OyB5ZXQKLQkgKiB0aG9z ZSB0cmFuc2FjdGlvbnMgd2hpY2ggc2VlIHRoZSBkZWxldGluZyBvbmUgYXMgc3RpbGwtaW4tcHJv Z3Jlc3Mgd2lsbAotCSAqIGV4cGVjdCBzdWNoIHR1cGxlcyB0byBiZSB0aGVyZSBvbmNlIHdlIG1h cmsgdGhlIGluZGV4IGFzIHZhbGlkLgotCSAqCi0JICogV2Ugc29sdmUgdGhpcyBieSB3YWl0aW5n IGZvciBhbGwgZW5kYW5nZXJlZCB0cmFuc2FjdGlvbnMgdG8gZXhpdCBiZWZvcmUKLQkgKiB3ZSBt YXJrIHRoZSBpbmRleCBhcyB2YWxpZC4KLQkgKgotCSAqIFdlIGFsc28gc2V0IEFjdGl2ZVNuYXBz aG90IHRvIHRoaXMgc25hcCwgc2luY2UgZnVuY3Rpb25zIGluIGluZGV4ZXMgbWF5Ci0JICogbmVl ZCBhIHNuYXBzaG90LgotCSAqLwotCXNuYXBzaG90ID0gUmVnaXN0ZXJTbmFwc2hvdChHZXRUcmFu c2FjdGlvblNuYXBzaG90KCkpOwotCVB1c2hBY3RpdmVTbmFwc2hvdChzbmFwc2hvdCk7CiAJLyoK IAkgKiBNZXJnZSBjb250ZW50IG9mIGF1eGlsaWFyeSBhbmQgdGFyZ2V0IGluZGV4ZXMgLSBpbnNl cnQgYW55IG1pc3NpbmcgaW5kZXggZW50cmllcy4KIAkgKi8KLQl2YWxpZGF0ZV9pbmRleCh0YWJs ZUlkLCBpbmRleFJlbGF0aW9uSWQsIGF1eEluZGV4UmVsYXRpb25JZCwgc25hcHNob3QpOwotCWxp bWl0WG1pbiA9IHNuYXBzaG90LT54bWluOworCWxpbWl0WG1pbiA9IHZhbGlkYXRlX2luZGV4KHRh YmxlSWQsIGluZGV4UmVsYXRpb25JZCwgYXV4SW5kZXhSZWxhdGlvbklkKTsKIAotCVBvcEFjdGl2 ZVNuYXBzaG90KCk7Ci0JVW5yZWdpc3RlclNuYXBzaG90KHNuYXBzaG90KTsKIAkvKgogCSAqIFRo ZSBzbmFwc2hvdCBzdWJzeXN0ZW0gY291bGQgc3RpbGwgY29udGFpbiByZWdpc3RlcmVkIHNuYXBz aG90cyB0aGF0CiAJICogYXJlIGhvbGRpbmcgYmFjayBvdXIgcHJvY2VzcydzIGFkdmVydGlzZWQg eG1pbjsgaW4gcGFydGljdWxhciwgaWYKQEAgLTE4NjEsOCArMTgzOSw4IEBAIERlZmluZUluZGV4 KFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAkvKgogCSAqIFRoZSBpbmRleCBpcyBub3cgdmFsaWQgaW4g dGhlIHNlbnNlIHRoYXQgaXQgY29udGFpbnMgYWxsIGN1cnJlbnRseQogCSAqIGludGVyZXN0aW5n IHR1cGxlcy4gIEJ1dCBzaW5jZSBpdCBtaWdodCBub3QgY29udGFpbiB0dXBsZXMgZGVsZXRlZCBq dXN0Ci0JICogYmVmb3JlIHRoZSByZWZlcmVuY2Ugc25hcCB3YXMgdGFrZW4sIHdlIGhhdmUgdG8g d2FpdCBvdXQgYW55Ci0JICogdHJhbnNhY3Rpb25zIHRoYXQgbWlnaHQgaGF2ZSBvbGRlciBzbmFw c2hvdHMuCisJICogYmVmb3JlIHRoZSBsYXN0IHNuYXBzaG90IGR1cmluZyB2YWxpZGF0aW5nIHdh cyB0YWtlbiwgd2UgaGF2ZSB0byB3YWl0CisJICogb3V0IGFueSB0cmFuc2FjdGlvbnMgdGhhdCBt aWdodCBoYXZlIG9sZGVyIHNuYXBzaG90cy4KIAkgKi8KIAlJTkpFQ1RJT05fUE9JTlQoImRlZmlu ZS1pbmRleC1iZWZvcmUtc2V0LXZhbGlkIiwgTlVMTCk7CiAJcGdzdGF0X3Byb2dyZXNzX3VwZGF0 ZV9wYXJhbShQUk9HUkVTU19DUkVBVEVJRFhfUEhBU0UsCkBAIC00NDI3LDcgKzQ0MDUsNiBAQCBS ZWluZGV4UmVsYXRpb25Db25jdXJyZW50bHkoY29uc3QgUmVpbmRleFN0bXQgKnN0bXQsIE9pZCBy ZWxhdGlvbk9pZCwgY29uc3QgUmVpbgogCXsKIAkJUmVpbmRleEluZGV4SW5mbyAqbmV3aWR4ID0g bGZpcnN0KGxjKTsKIAkJVHJhbnNhY3Rpb25JZCBsaW1pdFhtaW47Ci0JCVNuYXBzaG90CXNuYXBz aG90OwogCiAJCVN0YXJ0VHJhbnNhY3Rpb25Db21tYW5kKCk7CiAKQEAgLTQ0NDIsMTMgKzQ0MTks NiBAQCBSZWluZGV4UmVsYXRpb25Db25jdXJyZW50bHkoY29uc3QgUmVpbmRleFN0bXQgKnN0bXQs IE9pZCByZWxhdGlvbk9pZCwgY29uc3QgUmVpbgogCQlpZiAobmV3aWR4LT5zYWZlKQogCQkJc2V0 X2luZGV4c2FmZV9wcm9jZmxhZ3MoKTsKIAotCQkvKgotCQkgKiBUYWtlIHRoZSAicmVmZXJlbmNl IHNuYXBzaG90IiB0aGF0IHdpbGwgYmUgdXNlZCBieSB2YWxpZGF0ZV9pbmRleCgpCi0JCSAqIHRv IGZpbHRlciBjYW5kaWRhdGUgdHVwbGVzLgotCQkgKi8KLQkJc25hcHNob3QgPSBSZWdpc3RlclNu YXBzaG90KEdldFRyYW5zYWN0aW9uU25hcHNob3QoKSk7Ci0JCVB1c2hBY3RpdmVTbmFwc2hvdChz bmFwc2hvdCk7Ci0KIAkJLyoKIAkJICogVXBkYXRlIHByb2dyZXNzIGZvciB0aGUgaW5kZXggdG8g YnVpbGQsIHdpdGggdGhlIGNvcnJlY3QgcGFyZW50CiAJCSAqIHRhYmxlIGludm9sdmVkLgpAQCAt NDQ2MCwxNiArNDQzMCw4IEBAIFJlaW5kZXhSZWxhdGlvbkNvbmN1cnJlbnRseShjb25zdCBSZWlu ZGV4U3RtdCAqc3RtdCwgT2lkIHJlbGF0aW9uT2lkLCBjb25zdCBSZWluCiAJCXByb2dyZXNzX3Zh bHNbM10gPSBuZXdpZHgtPmFtSWQ7CiAJCXBnc3RhdF9wcm9ncmVzc191cGRhdGVfbXVsdGlfcGFy YW0oNCwgcHJvZ3Jlc3NfaW5kZXgsIHByb2dyZXNzX3ZhbHMpOwogCi0JCXZhbGlkYXRlX2luZGV4 KG5ld2lkeC0+dGFibGVJZCwgbmV3aWR4LT5pbmRleElkLCBuZXdpZHgtPmF1eEluZGV4SWQsIHNu YXBzaG90KTsKLQotCQkvKgotCQkgKiBXZSBjYW4gbm93IGRvIGF3YXkgd2l0aCBvdXIgYWN0aXZl IHNuYXBzaG90LCB3ZSBzdGlsbCBuZWVkIHRvIHNhdmUKLQkJICogdGhlIHhtaW4gbGltaXQgdG8g d2FpdCBmb3Igb2xkZXIgc25hcHNob3RzLgotCQkgKi8KLQkJbGltaXRYbWluID0gc25hcHNob3Qt PnhtaW47Ci0KLQkJUG9wQWN0aXZlU25hcHNob3QoKTsKLQkJVW5yZWdpc3RlclNuYXBzaG90KHNu YXBzaG90KTsKKwkJbGltaXRYbWluID0gdmFsaWRhdGVfaW5kZXgobmV3aWR4LT50YWJsZUlkLCBu ZXdpZHgtPmluZGV4SWQsIG5ld2lkeC0+YXV4SW5kZXhJZCk7CisJCUFzc2VydCghVHJhbnNhY3Rp b25JZElzVmFsaWQoTXlQcm9jLT54bWluKSk7CiAKIAkJLyoKIAkJICogVG8gZW5zdXJlIG5vIGRl YWRsb2Nrcywgd2UgbXVzdCBjb21taXQgYW5kIHN0YXJ0IHlldCBhbm90aGVyCkBAIC00NDgyLDcg KzQ0NDQsNyBAQCBSZWluZGV4UmVsYXRpb25Db25jdXJyZW50bHkoY29uc3QgUmVpbmRleFN0bXQg KnN0bXQsIE9pZCByZWxhdGlvbk9pZCwgY29uc3QgUmVpbgogCQkvKgogCQkgKiBUaGUgaW5kZXgg aXMgbm93IHZhbGlkIGluIHRoZSBzZW5zZSB0aGF0IGl0IGNvbnRhaW5zIGFsbCBjdXJyZW50bHkK IAkJICogaW50ZXJlc3RpbmcgdHVwbGVzLiAgQnV0IHNpbmNlIGl0IG1pZ2h0IG5vdCBjb250YWlu IHR1cGxlcyBkZWxldGVkCi0JCSAqIGp1c3QgYmVmb3JlIHRoZSByZWZlcmVuY2Ugc25hcCB3YXMg dGFrZW4sIHdlIGhhdmUgdG8gd2FpdCBvdXQgYW55CisJCSAqIGp1c3QgYmVmb3JlIHRoZSBsYXRl c3Qgc25hcCB3YXMgdGFrZW4sIHdlIGhhdmUgdG8gd2FpdCBvdXQgYW55CiAJCSAqIHRyYW5zYWN0 aW9ucyB0aGF0IG1pZ2h0IGhhdmUgb2xkZXIgc25hcHNob3RzLgogCQkgKgogCQkgKiBCZWNhdXNl IHdlIGRvbid0IHRha2UgYSBzbmFwc2hvdCBvciBYaWQgaW4gdGhpcyB0cmFuc2FjdGlvbiwKZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmggYi9zcmMvaW5jbHVkZS9hY2Nl c3MvdGFibGVhbS5oCmluZGV4IDFhOTk3NTM3ODAwLi4yMzgwYTU5M2Q3MSAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFi bGVhbS5oCkBAIC03MDEsMTIgKzcwMSwxMSBAQCB0eXBlZGVmIHN0cnVjdCBUYWJsZUFtUm91dGlu ZQogCQkJCQkJCQkJCSAgIFRhYmxlU2NhbkRlc2Mgc2Nhbik7CiAKIAkvKiBzZWUgdGFibGVfaW5k ZXhfdmFsaWRhdGVfc2NhbiBmb3IgcmVmZXJlbmNlIGFib3V0IHBhcmFtZXRlcnMgKi8KLQl2b2lk CQkoKmluZGV4X3ZhbGlkYXRlX3NjYW4pIChSZWxhdGlvbiB0YWJsZV9yZWwsCi0JCQkJCQkJCQkJ UmVsYXRpb24gaW5kZXhfcmVsLAotCQkJCQkJCQkJCUluZGV4SW5mbyAqaW5kZXhfaW5mbywKLQkJ CQkJCQkJCQlTbmFwc2hvdCBzbmFwc2hvdCwKLQkJCQkJCQkJCQlWYWxpZGF0ZUluZGV4U3RhdGUg KnN0YXRlLAotCQkJCQkJCQkJCVZhbGlkYXRlSW5kZXhTdGF0ZSAqYXV4X3N0YXRlKTsKKwlUcmFu c2FjdGlvbklkCQkoKmluZGV4X3ZhbGlkYXRlX3NjYW4pIChSZWxhdGlvbiB0YWJsZV9yZWwsCisJ CQkJCQkJCQkJCQlSZWxhdGlvbiBpbmRleF9yZWwsCisJCQkJCQkJCQkJCQlJbmRleEluZm8gKmlu ZGV4X2luZm8sCisJCQkJCQkJCQkJCQlWYWxpZGF0ZUluZGV4U3RhdGUgKnN0YXRlLAorCQkJCQkJ CQkJCQkJVmFsaWRhdGVJbmRleFN0YXRlICphdXhfc3RhdGUpOwogCiAKIAkvKiAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KQEAgLTE4MjksMjAgKzE4MjgsMTggQEAgdGFibGVfaW5kZXhfYnVpbGRfcmFuZ2Vfc2Nh bihSZWxhdGlvbiB0YWJsZV9yZWwsCiAgKiBOb3RlOiBpdCBpcyByZXNwb25zaWJpbGl0eSBvZiB0 aGF0IGZ1bmN0aW9uIHRvIGNsb3NlIHNvcnRzdGF0ZXMgaW4KICAqIGJvdGggYHN0YXRlYCBhbmQg YGF1eHN0YXRlYC4KICAqLwotc3RhdGljIGlubGluZSB2b2lkCitzdGF0aWMgaW5saW5lIFRyYW5z YWN0aW9uSWQKIHRhYmxlX2luZGV4X3ZhbGlkYXRlX3NjYW4oUmVsYXRpb24gdGFibGVfcmVsLAog CQkJCQkJICBSZWxhdGlvbiBpbmRleF9yZWwsCiAJCQkJCQkgIEluZGV4SW5mbyAqaW5kZXhfaW5m bywKLQkJCQkJCSAgU25hcHNob3Qgc25hcHNob3QsCiAJCQkJCQkgIFZhbGlkYXRlSW5kZXhTdGF0 ZSAqc3RhdGUsCiAJCQkJCQkgIFZhbGlkYXRlSW5kZXhTdGF0ZSAqYXV4c3RhdGUpCiB7Ci0JdGFi bGVfcmVsLT5yZF90YWJsZWFtLT5pbmRleF92YWxpZGF0ZV9zY2FuKHRhYmxlX3JlbCwKLQkJCQkJ CQkJCQkJICAgaW5kZXhfcmVsLAotCQkJCQkJCQkJCQkgICBpbmRleF9pbmZvLAotCQkJCQkJCQkJ CQkgICBzbmFwc2hvdCwKLQkJCQkJCQkJCQkJICAgc3RhdGUsCi0JCQkJCQkJCQkJCSAgIGF1eHN0 YXRlKTsKKwlyZXR1cm4gdGFibGVfcmVsLT5yZF90YWJsZWFtLT5pbmRleF92YWxpZGF0ZV9zY2Fu KHRhYmxlX3JlbCwKKwkJCQkJCQkJCQkJCQkgIGluZGV4X3JlbCwKKwkJCQkJCQkJCQkJCQkgIGlu ZGV4X2luZm8sCisJCQkJCQkJCQkJCQkJICBzdGF0ZSwKKwkJCQkJCQkJCQkJCQkgIGF1eHN0YXRl KTsKIH0KIAogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvdHJhbnNhbS5oIGIvc3Jj L2luY2x1ZGUvYWNjZXNzL3RyYW5zYW0uaAppbmRleCA2ZmE5MWJmY2RjMC4uYjMzMDg0Y2I5MWEg MTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy90cmFuc2FtLmgKKysrIGIvc3JjL2luY2x1 ZGUvYWNjZXNzL3RyYW5zYW0uaApAQCAtNDE3LDYgKzQxNywyMSBAQCBOb3JtYWxUcmFuc2FjdGlv bklkT2xkZXIoVHJhbnNhY3Rpb25JZCBhLCBUcmFuc2FjdGlvbklkIGIpCiAJcmV0dXJuIGI7CiB9 CiAKKy8qIHJldHVybiB0aGUgbmV3ZXIgb2YgdGhlIHR3byBJRHMgKi8KK3N0YXRpYyBpbmxpbmUg VHJhbnNhY3Rpb25JZAorVHJhbnNhY3Rpb25JZE5ld2VyKFRyYW5zYWN0aW9uSWQgYSwgVHJhbnNh Y3Rpb25JZCBiKQoreworCWlmICghVHJhbnNhY3Rpb25JZElzVmFsaWQoYSkpCisJCXJldHVybiBi OworCisJaWYgKCFUcmFuc2FjdGlvbklkSXNWYWxpZChiKSkKKwkJcmV0dXJuIGE7CisKKwlpZiAo VHJhbnNhY3Rpb25JZEZvbGxvd3MoYSwgYikpCisJCXJldHVybiBhOworCXJldHVybiBiOworfQor CiAvKiByZXR1cm4gdGhlIG5ld2VyIG9mIHRoZSB0d28gSURzICovCiBzdGF0aWMgaW5saW5lIEZ1 bGxUcmFuc2FjdGlvbklkCiBGdWxsVHJhbnNhY3Rpb25JZE5ld2VyKEZ1bGxUcmFuc2FjdGlvbklk IGEsIEZ1bGxUcmFuc2FjdGlvbklkIGIpCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9n L2luZGV4LmggYi9zcmMvaW5jbHVkZS9jYXRhbG9nL2luZGV4LmgKaW5kZXggNzI3OTkzZDFhNWEu LjkxNjY2NjYzODM0IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL2luZGV4LmgKKysr IGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9pbmRleC5oCkBAIC0xNTgsNyArMTU4LDcgQEAgZXh0ZXJu IHZvaWQgaW5kZXhfYnVpbGQoUmVsYXRpb24gaGVhcFJlbGF0aW9uLAogCQkJCQkJYm9vbCBpc3Jl aW5kZXgsCiAJCQkJCQlib29sIHBhcmFsbGVsKTsKIAotZXh0ZXJuIHZvaWQgdmFsaWRhdGVfaW5k ZXgoT2lkIGhlYXBJZCwgT2lkIGluZGV4SWQsIE9pZCBhdXhJbmRleElkLCBTbmFwc2hvdCBzbmFw c2hvdCk7CitleHRlcm4gVHJhbnNhY3Rpb25JZCB2YWxpZGF0ZV9pbmRleChPaWQgaGVhcElkLCBP aWQgaW5kZXhJZCwgT2lkIGF1eEluZGV4SWQpOwogCiBleHRlcm4gdm9pZCBpbmRleF9zZXRfc3Rh dGVfZmxhZ3MoT2lkIGluZGV4SWQsIEluZGV4U3RhdGVGbGFnc0FjdGlvbiBhY3Rpb24pOwogCi0t IAoyLjQzLjAKCg== --0000000000009da2ac064db84911--