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 1vJVcy-009H5K-1J for pgsql-hackers@arkaria.postgresql.org; Thu, 13 Nov 2025 11:36:35 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vJVcv-000t2q-0o for pgsql-hackers@arkaria.postgresql.org; Thu, 13 Nov 2025 11:36:33 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vJVcu-000t2b-2Q for pgsql-hackers@lists.postgresql.org; Thu, 13 Nov 2025 11:36:32 +0000 Received: from mail-pl1-x62b.google.com ([2607:f8b0:4864:20::62b]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vJVcr-007Wq8-2E for pgsql-hackers@lists.postgresql.org; Thu, 13 Nov 2025 11:36:32 +0000 Received: by mail-pl1-x62b.google.com with SMTP id d9443c01a7336-29806bd4776so1042755ad.0 for ; Thu, 13 Nov 2025 03:36:29 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1763033787; x=1763638587; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=zAxNSKpVvqk1SIOZ79dMBgCIlpgmdC1LfFdi/44dYxk=; b=AKc8bb/BnfY6wmx+b1x9az+ucIb4jqc3HSwrNUbM289hLYtUw6nNCUTN8zQdT5bAl8 Q76YbEo/Y36OUVyNeTVghz3Krjk9D2p+9Sy0Uz5rzJms4qNOikKNw6wKUwFdS9Dal2Il EHk1uilssEUibWy0jpOkwUTjvZUX92cW/YRzgbejUZ+cav1EVzeNV4/VAxYsqwtItBYB QEDdjzh70ZmBGRmfJS0SFtixonE6sKH//+CbPRPd1COkXKUEhF9loGmf5ejkJerH/MXv twcaaEvWD4aW6Co2VviViTmvbFPJSv+4dN+aMgUpaz+jwQsHsiUaluTQtk/tkSsmchP1 8PBQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763033787; x=1763638587; 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=zAxNSKpVvqk1SIOZ79dMBgCIlpgmdC1LfFdi/44dYxk=; b=hWTjItbv7L0X+tmhJaGlZlJG4yvB3o7yNP9qHa4101oqLMi4WSdWHwBR/GDztJXDHF 2fF1HzsSx4fS1304fn84N7XJp/IEnwOazKQvDS/9sCBCdySKzY70m6JqTIEAUhRt5fiz oaLLqLyIfQvQfIRVY4qf5ygNT6IktyYpnQUow/2Hhxjzwyeyc0sRi45JKNJusz9+7FTv K1uc1oqwwceBJ3k/PMiXhWlGpZjDi9nAzqQgJhabCZPTKc8HrRnFiqpjT3apgDUVkf9Z oPnHFIXkprZjCuVH72ZURydGY04iqOLjxfL1h3M+iXel66KyZOMLsNMV23yHobV+rNqo +aFw== X-Gm-Message-State: AOJu0YzSyGsTFKbTyuuOAw8ejOkC/+OQAX0mJbYJfdJA7aM5rS/KB7+/ Oux8HCFG1j7xBmlklCgws8qNBXbJv5dCgNUpUwSLjy5w8YVhSCtCAfXFDqrcPh3Tt9kPgrEUJuL cMDfAKd8v3nbLBSaCyJkrtrnmh2kwFvbbBIiPQYI= X-Gm-Gg: ASbGncsN2Rn7GoKgVvxZXnQ0i3SrZtMnHpMif0jBVOTIgHydMZOPqZZvEMJzGunaHSm IyeXa9fGpztAFna3picJxFSX2G1EVzYjlHAawM20in20Ob7mYML7wgE1qiD/jCrgkVjQy6UQO9w hPZJgb17G0dF9OriIETCK93lGiw7hp58a3TQIK+FZvpVg4JFeqwNLv9/TDgD3Mpl+Nht9KJp90X 0fUlvRItR/Gemz1ARgaTCxfKuDQzGhJcILKDxIHtQiMhiE314myBsRTeBGPKIRO9SmkbK+QSie1 1JdAvo2ItmUR1vpHOAwEUWDVpZx0UCsR+6odZYHqml1LlpMC771ZdWr72p2Ed/ynlvP2XiWFcrC Ic5gH2vY7vw== X-Google-Smtp-Source: AGHT+IFYBFSgFATtsw7T995erGO7yKOb7TxAQ03SHcOcCwCCFSB+sm/Py49zdQWoFLLPFt/a2e+HthAxZePG0cjmaeI= X-Received: by 2002:a17:902:c402:b0:298:5eb6:8998 with SMTP id d9443c01a7336-2985eb68b0cmr12519705ad.3.1763033787070; Thu, 13 Nov 2025 03:36:27 -0800 (PST) MIME-Version: 1.0 References: <536409d2-c9df-4ef3-808d-1ffc3182868c@iki.fi> In-Reply-To: <536409d2-c9df-4ef3-808d-1ffc3182868c@iki.fi> From: Thomas Munro Date: Fri, 14 Nov 2025 00:35:48 +1300 X-Gm-Features: AWmQ_blPxasFYHwcqKe0rOwkSnf0wsREeS4cCjoP3Asqwk6Oyk5xA5F0mkO5P74 Message-ID: Subject: Re: Trying out To: Heikki Linnakangas Cc: PostgreSQL Hackers Content-Type: multipart/mixed; boundary="0000000000009b22960643784acd" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000009b22960643784acd Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Tue, Nov 11, 2025 at 2:57=E2=80=AFAM Heikki Linnakangas wrote: > > [PATCH v1 1/4] Add some missing #include . > > This seems like a good thing regardless of the other patches. Pushed. > The patch removes 'src/template/solaris'. Is that on purpose? Fixed. It passes with VS 2022 on CI. I had to skip some assertions about macros promising lock-free implementation, that it doesn't define in C mode yet. They are definitely lock-free though[1], and the macros are defined for C++, and the same under the covers... Perhaps feature/conformance macros won't be defined until a few remaining pieces (things we don't care about) are accessible from C? (I see that Visual Studio 2026 has also just shipped a couple of days ago, not investigated.) [1] https://devblogs.microsoft.com/cppblog/c11-atomics-in-visual-studio-202= 2-version-17-5-preview-2/ --0000000000009b22960643784acd Content-Type: application/octet-stream; name="v2-0001-ci-Use-Visual-Studio-2022-for-stdatomic.h.patch" Content-Disposition: attachment; filename="v2-0001-ci-Use-Visual-Studio-2022-for-stdatomic.h.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mhxbva3e0 RnJvbSBkZDRiZWE3ZmQ4YzFlMDljZTZkOGE2NjMyM2IzMGM4MmU0YTU2OGMxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUaG9tYXMgTXVucm8gPHRob21hcy5tdW5yb0BnbWFpbC5jb20+ CkRhdGU6IFRodSwgMTMgTm92IDIwMjUgMTc6NDg6MDkgKzEzMDAKU3ViamVjdDogW1BBVENIIHYy IDEvNV0gY2k6IFVzZSBWaXN1YWwgU3R1ZGlvIDIwMjIsIGZvciA8c3RkYXRvbWljLmg+LgoKWFhY IE5vIG9waW5pb24gb24gd2hlbiB3ZSBjb3VsZCByZXF1aXJlIHRoaXMgYXMgYSBiYXNlbGluZS4g IFdlIG9ubHkKanVzdCBwdWxsZWQgdGhlIHRyaWdnZXIgb24gVmlzdWFsIFN0dWRpbyAyMDE5IHdo aWNoIGFkZGVkIGxvdHMgb2YgQzExLApidXQgbGFja2VkIDxzdGRhdG9taWMuaD4uCgooVGhhbmtz IHRvIEJpbGFsIGZvciBnZXR0aW5nIHRoaXMgb250byB0aGUgQ0kgaW1hZ2UhKQotLS0KIC5jaXJy dXMudGFza3MueW1sIHwgMyArKy0KIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDEg ZGVsZXRpb24oLSkKCmRpZmYgLS1naXQgYS8uY2lycnVzLnRhc2tzLnltbCBiLy5jaXJydXMudGFz a3MueW1sCmluZGV4IDJmZTk2NzFmM2RjLi4yNjZjZTk5ZTdkYiAxMDA2NDQKLS0tIGEvLmNpcnJ1 cy50YXNrcy55bWwKKysrIGIvLmNpcnJ1cy50YXNrcy55bWwKQEAgLTc2NywxMSArNzY3LDEyIEBA IFdJTkRPV1NfRU5WSVJPTk1FTlRfQkFTRTogJldJTkRPV1NfRU5WSVJPTk1FTlRfQkFTRQogCiAK IHRhc2s6Ci0gIG5hbWU6IFdpbmRvd3MgLSBTZXJ2ZXIgMjAyMiwgVlMgMjAxOSAtIE1lc29uICYg bmluamEKKyAgbmFtZTogV2luZG93cyAtIFNlcnZlciAyMDIyLCBWUyAyMDIyIC0gTWVzb24gJiBu aW5qYQogICA8PCA6ICpXSU5ET1dTX0VOVklST05NRU5UX0JBU0UKIAogICBlbnY6CiAgICAgVEVT VF9KT0JTOiA4ICMgd2lsZCBndWVzcywgZGF0YSBiYXNlZCB2YWx1ZSB3ZWxjb21lCisgICAgUEFU SDogQzpcVlNfMjAyMlxWQ1xBdXhpbGlhcnlcQnVpbGQ7JHtQQVRIfQogCiAgICAgIyBDaXJydXMg ZGVmYXVsdHMgdG8gU2V0RXJyb3JNb2RlKFNFTV9OT0dQRkFVTFRFUlJPUkJPWCB8IC4uLikuIFRo YXQKICAgICAjIHByZXZlbnRzIGNyYXNoIHJlcG9ydGluZyBmcm9tIHdvcmtpbmcgdW5sZXNzIGJp bmFyaWVzIGRvIFNldEVycm9yTW9kZSgpCi0tIAoyLjUwLjEgKEFwcGxlIEdpdC0xNTUpCgo= --0000000000009b22960643784acd Content-Type: application/octet-stream; name="v2-0002-Enable-Visual-Studio-s-stdatomic.h-support.patch" Content-Disposition: attachment; filename="v2-0002-Enable-Visual-Studio-s-stdatomic.h-support.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mhxbvcjn1 RnJvbSA1OGYwODhlZTExMjM2YjNiNWIyMGYyYjZmZmQ5N2QxNzE4MWYyYWZjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUaG9tYXMgTXVucm8gPHRob21hcy5tdW5yb0BnbWFpbC5jb20+ CkRhdGU6IFRodSwgMTMgTm92IDIwMjUgMTA6NDg6MTQgKzEzMDAKU3ViamVjdDogW1BBVENIIHYy IDIvNV0gRW5hYmxlIFZpc3VhbCBTdHVkaW8ncyA8c3RkYXRvbWljLmg+IHN1cHBvcnQuCgpYWFgg SXQncyBzdGlsbCBtYXJrZWQgYXMgJ2V4cGVyaW1lbnRhbCcgYXMgb2YgdGhlIGNvbXBpbGVyIGlu IENJLgotLS0KIG1lc29uLmJ1aWxkIHwgNCArKysrCiAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRp b25zKCspCgpkaWZmIC0tZ2l0IGEvbWVzb24uYnVpbGQgYi9tZXNvbi5idWlsZAppbmRleCBjMWUx N2FhMzA0MC4uMDRjNTYzMzc4YzcgMTAwNjQ0Ci0tLSBhL21lc29uLmJ1aWxkCisrKyBiL21lc29u LmJ1aWxkCkBAIC01ODAsNiArNTgwLDEwIEBAIGlmIG5vdCBjYy5jb21waWxlcyhjMTFfdGVzdCwg bmFtZTogJ0MxMScpCiAgIGVuZGlmCiBlbmRpZgogCisjIFhYWCBTaG91bGQgdGVzdCB3aGV0aGVy IDxzdGRhdG9taWMuaD4gd29ya3Mgd2l0aG91dCB0aGlzCitpZiBjYy5nZXRfaWQoKSA9PSAnbXN2 YycKKyAgY2ZsYWdzICs9ICcvZXhwZXJpbWVudGFsOmMxMWF0b21pY3MnCitlbmRpZgogCiBwb3N0 Z3Jlc19pbmMgPSBbaW5jbHVkZV9kaXJlY3Rvcmllcyhwb3N0Z3Jlc19pbmNfZCldCiB0ZXN0X2xp Yl9kID0gcG9zdGdyZXNfbGliX2QKLS0gCjIuNTAuMSAoQXBwbGUgR2l0LTE1NSkKCg== --0000000000009b22960643784acd Content-Type: application/octet-stream; name="v2-0003-Redefine-port-atomics.h-on-top-of-stdatomic.h.patch" Content-Disposition: attachment; filename="v2-0003-Redefine-port-atomics.h-on-top-of-stdatomic.h.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mhxbvhca2 RnJvbSBmNzI3NGY3MzIwYTBiMTIzMWRkM2U2NzZlMmI0MGQyMjM1NDgxMTg5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUaG9tYXMgTXVucm8gPHRob21hcy5tdW5yb0BnbWFpbC5jb20+ CkRhdGU6IFR1ZSwgMiBKdWwgMjAyNCAyMjozMTo0MiArMTIwMApTdWJqZWN0OiBbUEFUQ0ggdjIg My81XSBSZWRlZmluZSBwb3J0L2F0b21pY3MuaCBvbiB0b3Agb2YgPHN0ZGF0b21pYy5oPi4KCiAq IFJlZGlyZWN0IHR5cGVzIGFuZCBmdW5jdGlvbnMgdG8gc3RhbmRhcmQgQy9DKysKICogVXNlIDxh dG9taWM+IGluc3RlYWQgZm9yIEMrKzExIGV4dGVuc2lvbnMgKGFzIGZvcm1hbGl6ZWQgYnkgQysr MjMpCiAqIEFkZCBwZ19hdG9taWNfdWludDgsIHBnX2F0b21pY191aW50MTYgYW5kIHBnX2F0b21p YyhUKQogKiBQcm92aWRlIGdlbmVyaWMgcGdfYXRvbWljX3JlYWQoKSwgcGdfYXRvbWljX3dyaXRl KCkKICogQXNzdW1lIHRoYXQgbW9zdCBiYXNpYyBvcGVyYXRpb25zIHdpbGwgYmUgY2FsbGVkIGJ5 CiAgIHN0YW5kYXJkaXplZCBnZW5lcmljcyBpbiBmdXR1cmUgY29kZSwgZWcgYXRvbWljX2ZldGNo X2FkZCgpCiAqIEZvcndhcmQgYWxsIHRoZSB0cmFkaXRpb25hbCBfMzIsIF82NCBmdW5jdGlvbiBu YW1lcyBmb3IKICAgZXhpc3RpbmcgY29kZQogKiBSZWltcGxlbWVudCBwZ19hdG9taWNfZmxhZyB3 aXRoIHBnX2F0b21pYyh1aW50OCkgdG8gYWxsb3cgcmVsYXhlZCBsb2FkCiAgIChpbXBvc3NpYmxl IHdpdGggc3RhbmRhcmQgYXRvbWljX2ZsYWcsIGFuZCBwZ19hdG9taWMoYm9vbCkgZG9lc24ndCBz ZWVtCiAgIHRvIGJlIHBvcnRhYmxlIGVub3VnaCkKICogTGV0IHRoZSBjb21waWxlci9ydW50aW1l IGVtdWxhdGUgNjQgYml0IGF0b21pY3Mgd2l0aCBsb2NrcyBmb3IgYXJtdjcKICogVGhlIHBlci1j b21waWxlciBoZWFkZXJzIG5vdyBqdXN0IGRlZmluZSBwZ19jb21waWxlcl9iYXJyaWVyX2ltcGwo KQogKiBUaGUgcGVyLWFyY2ggaGVhZGVycyBub3cgb3B0aW9uYWxseSBkZWZpbmUKICAgcGdfe21l bW9yeSxyZWFkLHdyaXRlfV9iYXJyaWVyX2ltcGwoKSBidXQgb25seSBpZiB0aGV5IHRoaW5rIHRo ZXkgY2FuCiAgIGRvIHNvbWV0aGluZyBiZXR0ZXIgdGhhbiBjb21waWxlcnMgKHRvIGludmVzdGln YXRlLi4uKQogKiBEcm9wIHRoZSBzZWNvbmRhcnkgY29weSBvZiB0aGUgYW5jaWVudCBzcGlubG9j ayBvcHMgZnJvbSBhdG9taWNzCiAqIERyb3AgYXJjaC17YXJtLHBwY30uaCwgZmFsbGJhY2suaCBh bmQgZ2VuZXJpYy5oCgpXSVAhCgpUT0RPOiBOZWVkIHRvIHJlc2VhcmNoIGdlbmVyYXRlZCBjb2Rl IG9uIGFsbCBhcmNoaXRlY3R1cmVzIGFuZCBzZWUgaWYKYW55dGhpbmcgaW1wb3J0YW50IGlzIGxv c3QuCi0tLQogc3JjL2luY2x1ZGUvcG9ydC9hdG9taWNzLmggICAgICAgICAgICAgIHwgNjI2ICsr KysrKystLS0tLS0tLS0tLS0tLS0tLQogc3JjL2luY2x1ZGUvcG9ydC9hdG9taWNzL2FyY2gtYXJt LmggICAgIHwgIDMyIC0tCiBzcmMvaW5jbHVkZS9wb3J0L2F0b21pY3MvYXJjaC1wcGMuaCAgICAg fCAyNTYgLS0tLS0tLS0tLQogc3JjL2luY2x1ZGUvcG9ydC9hdG9taWNzL2FyY2gteDg2LmggICAg IHwgMjA1IC0tLS0tLS0tCiBzcmMvaW5jbHVkZS9wb3J0L2F0b21pY3MvZmFsbGJhY2suaCAgICAg fCAgNDIgLS0KIHNyYy9pbmNsdWRlL3BvcnQvYXRvbWljcy9nZW5lcmljLWdjYy5oICB8IDMwNyAr LS0tLS0tLS0tLS0KIHNyYy9pbmNsdWRlL3BvcnQvYXRvbWljcy9nZW5lcmljLW1zdmMuaCB8ICA5 OCArLS0tCiBzcmMvaW5jbHVkZS9wb3J0L2F0b21pY3MvZ2VuZXJpYy5oICAgICAgfCA0MjcgLS0t LS0tLS0tLS0tLS0tLQogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgICAgICAgIHwg ICAyICsKIDkgZmlsZXMgY2hhbmdlZCwgMTcyIGluc2VydGlvbnMoKyksIDE4MjMgZGVsZXRpb25z KC0pCiBkZWxldGUgbW9kZSAxMDA2NDQgc3JjL2luY2x1ZGUvcG9ydC9hdG9taWNzL2FyY2gtYXJt LmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBzcmMvaW5jbHVkZS9wb3J0L2F0b21pY3MvYXJjaC1wcGMu aAogZGVsZXRlIG1vZGUgMTAwNjQ0IHNyYy9pbmNsdWRlL3BvcnQvYXRvbWljcy9mYWxsYmFjay5o CiBkZWxldGUgbW9kZSAxMDA2NDQgc3JjL2luY2x1ZGUvcG9ydC9hdG9taWNzL2dlbmVyaWMuaAoK ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3BvcnQvYXRvbWljcy5oIGIvc3JjL2luY2x1ZGUvcG9y dC9hdG9taWNzLmgKaW5kZXggOTZmMTg1OGRhOTcuLmM0ZDBlNWY1ODIxIDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS9wb3J0L2F0b21pY3MuaAorKysgYi9zcmMvaW5jbHVkZS9wb3J0L2F0b21pY3Mu aApAQCAtMywyNCArMywzMyBAQAogICogYXRvbWljcy5oCiAgKgkgIEF0b21pYyBvcGVyYXRpb25z LgogICoKLSAqIEhhcmR3YXJlIGFuZCBjb21waWxlciBkZXBlbmRlbnQgZnVuY3Rpb25zIGZvciBt YW5pcHVsYXRpbmcgbWVtb3J5Ci0gKiBhdG9taWNhbGx5IGFuZCBkZWFsaW5nIHdpdGggY2FjaGUg Y29oZXJlbmN5LiBVc2VkIHRvIGltcGxlbWVudCBsb2NraW5nCi0gKiBmYWNpbGl0aWVzIGFuZCBs b2NrbGVzcyBhbGdvcml0aG1zL2RhdGEgc3RydWN0dXJlcy4KKyAqIFRoZXNlIGludGVyZmFjZXMg YXJlIGZvciBtYW5pcHVsYXRpbmcgbWVtb3J5IGF0b21pY2FsbHkgYW5kIGRlYWxpbmcgd2l0aAor ICogY2FjaGUgY29oZXJlbmN5LiBUaGV5IGNhbiBiZSB1c2VkIHRvIGltcGxlbWVudCBsb2NraW5n IGZhY2lsaXRpZXMgYW5kCisgKiBsb2NrbGVzcyBhbGdvcml0aG1zL2RhdGEgc3RydWN0dXJlcy4K ICAqCi0gKiBUbyBicmluZyB1cCBwb3N0Z3JlcyBvbiBhIHBsYXRmb3JtL2NvbXBpbGVyIGF0IHRo ZSB2ZXJ5IGxlYXN0Ci0gKiBpbXBsZW1lbnRhdGlvbnMgZm9yIHRoZSBmb2xsb3dpbmcgb3BlcmF0 aW9ucyBzaG91bGQgYmUgcHJvdmlkZWQ6Ci0gKiAqIHBnX2NvbXBpbGVyX2JhcnJpZXIoKSwgcGdf d3JpdGVfYmFycmllcigpLCBwZ19yZWFkX2JhcnJpZXIoKQotICogKiBwZ19hdG9taWNfY29tcGFy ZV9leGNoYW5nZV91MzIoKSwgcGdfYXRvbWljX2ZldGNoX2FkZF91MzIoKQotICogKiBwZ19hdG9t aWNfdGVzdF9zZXRfZmxhZygpLCBwZ19hdG9taWNfaW5pdF9mbGFnKCksIHBnX2F0b21pY19jbGVh cl9mbGFnKCkKLSAqICogUEdfSEFWRV84QllURV9TSU5HTEVfQ09QWV9BVE9NSUNJVFkgc2hvdWxk IGJlIGRlZmluZWQgaWYgYXBwcm9wcmlhdGUuCisgKiBUaGlzIGlzIG1vc3RseSBhIHJlbmFtaW5n IG9mIDxzdGRhdG9taWMuaD4sIHdpdGggc29tZSBkaWZmZXJlbmNlczoKICAqCi0gKiBUaGVyZSBl eGlzdCBnZW5lcmljLCBoYXJkd2FyZSBpbmRlcGVuZGVudCwgaW1wbGVtZW50YXRpb25zIGZvciBz ZXZlcmFsCi0gKiBjb21waWxlcnMgd2hpY2ggbWlnaHQgYmUgc3VmZmljaWVudCwgYWx0aG91Z2gg cG9zc2libHkgbm90IG9wdGltYWwsIGZvciBhCi0gKiBuZXcgcGxhdGZvcm0uIElmIG5vIHN1Y2gg Z2VuZXJpYyBpbXBsZW1lbnRhdGlvbiBpcyBhdmFpbGFibGUgc3BpbmxvY2tzIHdpbGwKLSAqIGJl IHVzZWQgdG8gaW1wbGVtZW50IHRoZSA2NC1iaXQgcGFydHMgb2YgdGhlIEFQSS4KKyAqICogcmVh ZC93cml0ZSBiYXJyaWVycyAod2Vha2VyIHRoYW4gYWNxdWlyZS9yZWxlYXNlKQorICogKiB0aGV5 IGFmZmVjdCBldmVuIG5vbi1hdG9taWMgYWNjZXNzIHdpdGhvdXQgZGVwZW5kZW5jeSBvbiBhdG9t aWMgYWNjZXNzCisgKiAqIHBnX2F0b21pY19mbGFnIHNlbWFudGljcyBkb24ndCBhbGxvdyBtYXBw aW5nIHRvIGF0b21pY19mbGFnCiAgKgotICogSW1wbGVtZW50IF91NjQgYXRvbWljcyBpZiBhbmQg b25seSBpZiB5b3VyIHBsYXRmb3JtIGNhbiB1c2UgdGhlbQotICogZWZmaWNpZW50bHkgKGFuZCBv YnZpb3VzbHkgY29ycmVjdGx5KS4KKyAqIFBvc3RncmVTUUwgYXRvbWljIHR5cGUgd2lkdGggYXNz dW1wdGlvbnM6CisgKgorICogOCwgMTY6ICBSZXF1aXJlZCB0byBiZSBsb2NrLWZyZWUgKGV2ZW4g dGhvdWdoIGltcGxlbWVudGVkIHdpdGggd2lkZXIKKyAqICAgICAgICAgaW5zdHJ1Y3Rpb25zIGJ5 IHRoZSBjb21waWxlciBvbiBzb21lIFJJU0MtViBzeXN0ZW1zKS4KKyAqCisgKiAzMjogICAgIFJl cXVpcmVkIHRvIGJlIGxvY2stZnJlZS4gIE5vIGtub3duIG1vZGVybiBzeXN0ZW0gbGFja3MgdGhl bS4KKyAqCisgKiA2NDogICAgIFRoZXNlIGNhbiByZWFzb25hYmx5IGJlIGV4cGVjdGVkIHRvIGJl IGxvY2stZnJlZSBhbmQgZmFzdCBvbgorICogICAgICAgICBhbGwgbW9kZXJuLWlzaCBzeXN0ZW1z LiAgRm9yIG9uZSBrbm93biBsb3ctZW5kIHN5c3RlbSAgdGhleSBhcmUKKyAqICAgICAgICAgZW11 bGF0ZWQgYnkgdGhlIGNvbXBpbGVyL3J1bnRpbWUgd2l0aCBsb2NrcyAoYXJtdjcpLgorICoKKyAq IEluIGFsbCBjYXNlcyB2YWx1ZXMgbXVzdCBiZSB3ZWxsIGFsaWduZWQgb3IgdW5kZWZpbmVkIGJl aGF2aW9yIHJlc3VsdHMuCisgKgorICogVG8gYnJpbmcgdXAgcG9zdGdyZXMgb24gYSBjb21waWxl ciwgcHJvdmlkZToKKyAqICogcGdfY29tcGlsZXJfYmFycmllcigpCisgKiBPcHRpb25hbGx5IGFs c286CisgKiAqIHBnX21lbW9yeV9iYXJyaWVyKCksIHBnX3dyaXRlX2JhcnJpZXIoKSwgcGdfcmVh ZF9iYXJyaWVyKCkKICAqCiAgKiBVc2UgaGlnaGVyIGxldmVsIGZ1bmN0aW9uYWxpdHkgKGx3bG9j a3MsIHNwaW5sb2NrcywgaGVhdnl3ZWlnaHQgbG9ja3MpCiAgKiB3aGVuZXZlciBwb3NzaWJsZS4g V3JpdGluZyBjb3JyZWN0IGNvZGUgdXNpbmcgdGhlc2UgZmFjaWxpdGllcyBpcyBoYXJkLgpAQCAt MzgsNDggKzQ3LDY2IEBACiAjaWZuZGVmIEFUT01JQ1NfSAogI2RlZmluZSBBVE9NSUNTX0gKIAot I2lmZGVmIEZST05URU5ECi0jZXJyb3IgImF0b21pY3MuaCBtYXkgbm90IGJlIGluY2x1ZGVkIGZy b20gZnJvbnRlbmQgY29kZSIKKyNkZWZpbmUgSU5TSURFX0FUT01JQ1NfSAorCisjaWYgZGVmaW5l ZChfX2NwbHVzcGx1cykgJiYgX19jcGx1c3BsdXMgPCAyMDIzMDJMCisvKiBDKysxMSBjYW4ndCBp bmNsdWRlIEMncyA8c3RkYXRvbWljLmg+LiAgVXNlIGFwcHJvYWNoIGZyb20gQysrMjMgMzMuNS4x Mi4gKi8KK2V4dGVybiAiQysrIgoreworI2luY2x1ZGUgPGF0b21pYz4KKyNkZWZpbmUgcGdfYXRv bWljKFQpIHN0ZDo6YXRvbWljPFQ+CisJdXNpbmcJCXN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQ7 CisJdXNpbmcJCXN0ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmU7CisJdXNpbmcJCXN0ZDo6bWVtb3J5 X29yZGVyX3JlbGVhc2U7CisJdXNpbmcJCXN0ZDo6bWVtb3J5X29yZGVyX2FjcV9yZWw7CisJdXNp bmcJCXN0ZDo6bWVtb3J5X29yZGVyX3NlcV9jc3Q7Cit9CisjZWxzZQorI2luY2x1ZGUgPHN0ZGF0 b21pYy5oPgorI2RlZmluZSBwZ19hdG9taWMoVCkgX0F0b21pYyhUKQogI2VuZGlmCiAKLSNkZWZp bmUgSU5TSURFX0FUT01JQ1NfSAorLyoKKyAqIFZpc3VhbCBTdHVkaW8gMjAyMiBkb2Vzbid0IHNl ZW0gdG8gZGVmaW5lIHRoZXNlIGluIDxzdGRhdG9taWMuaD4geWV0LCBidXQKKyAqIGRvZXMgZGVm aW5lIHRoZW0gdG8gMiBpbiA8YXRvbWljPi4gIFRoZXkgbXVzdCBob2xkIGluIEMgdG9vIHRob3Vn aCwgc2luY2UKKyAqIHRoZXkgaW50ZXJvcGVyYXRlLgorICovCisjaWYgIWRlZmluZWQoX01TQ19W RVIpIHx8IGRlZmluZWQoX19jcGx1c3BsdXMpCisvKiBBc3N1bXB0aW9ucyBhYm91dCBsb2NrLWZy ZWUgYWNjZXNzLiAqLworU3RhdGljQXNzZXJ0RGVjbChBVE9NSUNfQ0hBUl9MT0NLX0ZSRUUgPj0g MiwgIm5lZWQgbG9jay1mcmVlIDgtYml0IGF0b21pY3MiKTsKK1N0YXRpY0Fzc2VydERlY2woQVRP TUlDX1NIT1JUX0xPQ0tfRlJFRSA+PSAyLCAibmVlZCBsb2NrLWZyZWUgMTYtYml0IGF0b21pY3Mi KTsKK1N0YXRpY0Fzc2VydERlY2woQVRPTUlDX0lOVF9MT0NLX0ZSRUUgPj0gMiwgIm5lZWQgbG9j ay1mcmVlIDMyLWJpdCBhdG9taWNzIik7CisjZW5kaWYKIAotI2luY2x1ZGUgPGxpbWl0cy5oPgor LyogQ2FuJ3QgdXNlIHN0YW5kYXJkIGF0b21pY19mbGFnIGR1ZSB0byBleHRlbmRlZCBzZW1hbnRp Y3MsIHNlZSBiZWxvdy4gKi8KK3R5cGVkZWYgcGdfYXRvbWljKHVpbnQ4KQorcGdfYXRvbWljX2Zs YWc7CisKKy8qIENvbW1vbiBzdXBwb3J0ZWQgYXRvbWljIGludGVnZXIgdHlwZXMuICovCit0eXBl ZGVmIHBnX2F0b21pYyh1aW50OCkKK3BnX2F0b21pY191aW50ODsKK3R5cGVkZWYgcGdfYXRvbWlj KHVpbnQxNikKK3BnX2F0b21pY191aW50MTY7Cit0eXBlZGVmIHBnX2F0b21pYyh1aW50MzIpCitw Z19hdG9taWNfdWludDMyOwordHlwZWRlZiBwZ19hdG9taWModWludDY0KQorcGdfYXRvbWljX3Vp bnQ2NDsKIAogLyoKICAqIEZpcnN0IGEgc2V0IG9mIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBmaWxl cyBpcyBpbmNsdWRlZC4KICAqCi0gKiBUaGVzZSBmaWxlcyBjYW4gcHJvdmlkZSB0aGUgZnVsbCBz ZXQgb2YgYXRvbWljcyBvciBjYW4gZG8gcHJldHR5IG11Y2gKLSAqIG5vdGhpbmcgaWYgYWxsIHRo ZSBjb21waWxlcnMgY29tbW9ubHkgdXNlZCBvbiB0aGVzZSBwbGF0Zm9ybXMgcHJvdmlkZQotICog dXNhYmxlIGdlbmVyaWNzLgotICoKLSAqIERvbid0IGFkZCBhbiBpbmxpbmUgYXNzZW1ibHkgb2Yg dGhlIGFjdHVhbCBhdG9taWMgb3BlcmF0aW9ucyBpZiBhbGwgdGhlCi0gKiBjb21tb24gaW1wbGVt ZW50YXRpb25zIG9mIHlvdXIgcGxhdGZvcm0gcHJvdmlkZSBpbnRyaW5zaWNzLiBJbnRyaW5zaWNz IGFyZQotICogbXVjaCBlYXNpZXIgdG8gdW5kZXJzdGFuZCBhbmQgcG90ZW50aWFsbHkgc3VwcG9y dCBtb3JlIGFyY2hpdGVjdHVyZXMuCi0gKgogICogSXQgd2lsbCBvZnRlbiBtYWtlIHNlbnNlIHRv IGRlZmluZSBtZW1vcnkgYmFycmllciBzZW1hbnRpY3MgaGVyZSwgc2luY2UKICAqIGUuZy4gZ2Vu ZXJpYyBjb21waWxlciBpbnRyaW5zaWNzIGZvciB4ODYgbWVtb3J5IGJhcnJpZXJzIGNhbid0IGtu b3cgdGhhdAogICogcG9zdGdyZXMgZG9lc24ndCBuZWVkIHg4NiByZWFkL3dyaXRlIGJhcnJpZXJz IGRvIGFueXRoaW5nIG1vcmUgdGhhbiBhCiAgKiBjb21waWxlciBiYXJyaWVyLgotICoKICAqLwot I2lmIGRlZmluZWQoX19hcm1fXykgfHwgZGVmaW5lZChfX2FybSkgfHwgZGVmaW5lZChfX2FhcmNo NjRfXykKLSNpbmNsdWRlICJwb3J0L2F0b21pY3MvYXJjaC1hcm0uaCIKLSNlbGlmIGRlZmluZWQo X19pMzg2X18pIHx8IGRlZmluZWQoX19pMzg2KSB8fCBkZWZpbmVkKF9feDg2XzY0X18pCisjaWYg ZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX2kzODYpIHx8IGRlZmluZWQoX194ODZfNjRf XykKICNpbmNsdWRlICJwb3J0L2F0b21pY3MvYXJjaC14ODYuaCIKLSNlbGlmIGRlZmluZWQoX19w cGNfXykgfHwgZGVmaW5lZChfX3Bvd2VycGNfXykgfHwgZGVmaW5lZChfX3BwYzY0X18pIHx8IGRl ZmluZWQoX19wb3dlcnBjNjRfXykKLSNpbmNsdWRlICJwb3J0L2F0b21pY3MvYXJjaC1wcGMuaCIK ICNlbmRpZgogCiAvKgogICogQ29tcGlsZXIgc3BlY2lmaWMsIGJ1dCBhcmNoaXRlY3R1cmUgaW5k ZXBlbmRlbnQgaW1wbGVtZW50YXRpb25zLgotICoKLSAqIFByb3ZpZGUgYXJjaGl0ZWN0dXJlIGlu ZGVwZW5kZW50IGltcGxlbWVudGF0aW9ucyBvZiB0aGUgYXRvbWljCi0gKiBmYWNpbGl0aWVzLiBB dCB0aGUgdmVyeSBsZWFzdCBjb21waWxlciBiYXJyaWVycyBzaG91bGQgYmUgcHJvdmlkZWQsIGJ1 dCBhCi0gKiBmdWxsIGltcGxlbWVudGF0aW9uIG9mCi0gKiAqIHBnX2NvbXBpbGVyX2JhcnJpZXIo KSwgcGdfd3JpdGVfYmFycmllcigpLCBwZ19yZWFkX2JhcnJpZXIoKQotICogKiBwZ19hdG9taWNf Y29tcGFyZV9leGNoYW5nZV91MzIoKSwgcGdfYXRvbWljX2ZldGNoX2FkZF91MzIoKQotICogdXNp bmcgY29tcGlsZXIgaW50cmluc2ljcyBhcmUgYSBnb29kIGlkZWEuCisgKiBUaGlzIGRlZmluZXMg Y29tcGlsZXIgYmFycmllcnMuCiAgKi8KIC8qCiAgKiBnY2Mgb3IgY29tcGF0aWJsZSwgaW5jbHVk aW5nIGNsYW5nIGFuZCBpY2MuCkBAIC05MywyOSArMTIwLDkgQEAKICNlbmRpZgogCiAvKiBGYWls IGlmIHdlIGNvdWxkbid0IGZpbmQgaW1wbGVtZW50YXRpb25zIG9mIHJlcXVpcmVkIGZhY2lsaXRp ZXMuICovCi0jaWYgIWRlZmluZWQoUEdfSEFWRV9BVE9NSUNfVTMyX1NVUFBPUlQpCi0jZXJyb3Ig ImNvdWxkIG5vdCBmaW5kIGFuIGltcGxlbWVudGF0aW9uIG9mIHBnX2F0b21pY191aW50MzIiCi0j ZW5kaWYKICNpZiAhZGVmaW5lZChwZ19jb21waWxlcl9iYXJyaWVyX2ltcGwpCiAjZXJyb3IgImNv dWxkIG5vdCBmaW5kIGFuIGltcGxlbWVudGF0aW9uIG9mIHBnX2NvbXBpbGVyX2JhcnJpZXIiCiAj ZW5kaWYKLSNpZiAhZGVmaW5lZChwZ19tZW1vcnlfYmFycmllcl9pbXBsKQotI2Vycm9yICJjb3Vs ZCBub3QgZmluZCBhbiBpbXBsZW1lbnRhdGlvbiBvZiBwZ19tZW1vcnlfYmFycmllcl9pbXBsIgot I2VuZGlmCi0KLQotLyoKLSAqIFByb3ZpZGUgYSBzcGlubG9jay1iYXNlZCBpbXBsZW1lbnRhdGlv biBvZiB0aGUgNjQgYml0IHZhcmlhbnRzLCBpZgotICogbmVjZXNzYXJ5LgotICovCi0jaW5jbHVk ZSAicG9ydC9hdG9taWNzL2ZhbGxiYWNrLmgiCi0KLS8qCi0gKiBQcm92aWRlIGFkZGl0aW9uYWwg b3BlcmF0aW9ucyB1c2luZyBzdXBwb3J0ZWQgaW5mcmFzdHJ1Y3R1cmUuIFRoZXNlIGFyZQotICog ZXhwZWN0ZWQgdG8gYmUgZWZmaWNpZW50IGlmIHRoZSB1bmRlcmx5aW5nIGF0b21pYyBvcGVyYXRp b25zIGFyZSBlZmZpY2llbnQuCi0gKi8KLSNpbmNsdWRlICJwb3J0L2F0b21pY3MvZ2VuZXJpYy5o IgotCiAKIC8qCiAgKiBwZ19jb21waWxlcl9iYXJyaWVyIC0gcHJldmVudCB0aGUgY29tcGlsZXIg ZnJvbSBtb3ZpbmcgY29kZSBhY3Jvc3MKQEAgLTEyNSw2ICsxMzIsMTAgQEAKICAqIHJlb3JkZXIg bG9hZHMgb3Igc3RvcmVzIHRvIG1haW4gbWVtb3J5IGFyb3VuZCB0aGUgYmFycmllci4gIEhvd2V2 ZXIsIHRoZQogICogQ1BVIG1heSBzdGlsbCByZW9yZGVyIGxvYWRzIG9yIHN0b3JlcyBhdCBydW50 aW1lLCBpZiB0aGUgYXJjaGl0ZWN0dXJlJ3MKICAqIG1lbW9yeSBtb2RlbCBwZXJtaXRzIHRoaXMu CisgKgorICogVW5saWtlIHN0YW5kYXJkIGF0b21pY19zaWduYWxfZmVuY2UoKSwgcGdfY29tcGls ZXJfYmFycmllcigpIHByZXZlbnRzCisgKiByZW9yZGVyaW5nIG9mIG5vbi1hdG9taWMsIG5vbi12 b2xhdGlsZSBhY2Nlc3Nlcywgc28gYSBjb21waWxlci1zcGVjaWZpYworICogZGVmaW5pdGlvbiBp cyByZXF1aXJlZC4KICAqLwogI2RlZmluZSBwZ19jb21waWxlcl9iYXJyaWVyKCkJcGdfY29tcGls ZXJfYmFycmllcl9pbXBsKCkKIApAQCAtMTM3LDggKzE0OCwyMCBAQAogICogbG9hZHMgYW5kIHN0 b3JlcyBhcmUgdG90YWxseSBvcmRlcmVkICh3aGljaCBpcyBub3QgdGhlIGNhc2Ugb24gbW9zdAog ICogYXJjaGl0ZWN0dXJlcykgdGhpcyByZXF1aXJlcyBpc3N1aW5nIHNvbWUgc29ydCBvZiBtZW1v cnkgZmVuY2luZwogICogaW5zdHJ1Y3Rpb24uCisgKgorICogVW5saWtlIHN0YW5kYXJkIGF0b21p Y190aHJlYWRfZmVuY2UoKSwgcGdfe3JlYWQsd3JpdGV9X2JhcnJpZXIoKSBhZmZlY3RzCisgKiBu b24tYXRvbWljLCBub24tdm9sYXRpbGUgYWNjZXNzZXMuCiAgKi8KLSNkZWZpbmUgcGdfbWVtb3J5 X2JhcnJpZXIoKSBwZ19tZW1vcnlfYmFycmllcl9pbXBsKCkKK3N0YXRpYyBpbmxpbmUgdm9pZAor cGdfbWVtb3J5X2JhcnJpZXIodm9pZCkKK3sKKyNpZmRlZiBwZ19tZW1vcnlfYmFycmllcl9pbXBs CisJcGdfbWVtb3J5X2JhcnJpZXJfaW1wbCgpOworI2Vsc2UKKwlwZ19jb21waWxlcl9iYXJyaWVy KCk7CisJYXRvbWljX3RocmVhZF9mZW5jZShtZW1vcnlfb3JkZXJfc2VxX2NzdCk7CisjZW5kaWYK K30KIAogLyoKICAqIHBnXyhyZWFkfHdyaXRlKV9iYXJyaWVyIC0gcHJldmVudCB0aGUgQ1BVIGZy b20gcmVvcmRlcmluZyBtZW1vcnkgYWNjZXNzCkBAIC0xNTAsNDI3ICsxNzMsMTE2IEBACiAgKiBh cmUgdGh1cyB3ZWFrZXIgdGhhbiBhIGZ1bGwgbWVtb3J5IGJhcnJpZXIsIGJ1dCBzdHJvbmdlciB0 aGFuIGEgY29tcGlsZXIKICAqIGJhcnJpZXIuICBJbiBwcmFjdGljZSwgb24gbWFjaGluZXMgd2l0 aCBzdHJvbmcgbWVtb3J5IG9yZGVyaW5nLCByZWFkIGFuZAogICogd3JpdGUgYmFycmllcnMgbWF5 IHJlcXVpcmUgbm90aGluZyBtb3JlIHRoYW4gYSBjb21waWxlciBiYXJyaWVyLgotICovCi0jZGVm aW5lIHBnX3JlYWRfYmFycmllcigpCXBnX3JlYWRfYmFycmllcl9pbXBsKCkKLSNkZWZpbmUgcGdf d3JpdGVfYmFycmllcigpCXBnX3dyaXRlX2JhcnJpZXJfaW1wbCgpCi0KLS8qCi0gKiBTcGlubG9v cCBkZWxheSAtIEFsbG93IENQVSB0byByZWxheCBpbiBidXN5IGxvb3BzCi0gKi8KLSNkZWZpbmUg cGdfc3Bpbl9kZWxheSgpIHBnX3NwaW5fZGVsYXlfaW1wbCgpCi0KLS8qCi0gKiBwZ19hdG9taWNf aW5pdF9mbGFnIC0gaW5pdGlhbGl6ZSBhdG9taWMgZmxhZy4KICAqCi0gKiBObyBiYXJyaWVyIHNl bWFudGljcy4KKyAqIFVubGlrZSBzdGFuZGFyZCBhdG9taWNfdGhyZWFkX2ZlbmNlKCksIHBnX3ty ZWFkLHdyaXRlfV9iYXJyaWVyKCkgYWZmZWN0cworICogbm9uLWF0b21pYywgbm9uLXZvbGF0aWxl IGFjY2Vzc2VzLiAgVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gdXNlcworICogYWNxdWlyZS9y ZWxlYXNlIGZlbmNlcywgYnV0IHRoZXNlIGFyZSBzdHJpY3RseSBzdHJvbmdlciB0aGFuIHJlYWQv d3JpdGUuCiAgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZAotcGdfYXRvbWljX2luaXRfZmxhZyh2b2xh dGlsZSBwZ19hdG9taWNfZmxhZyAqcHRyKQotewotCXBnX2F0b21pY19pbml0X2ZsYWdfaW1wbChw dHIpOwotfQotCi0vKgotICogcGdfYXRvbWljX3Rlc3Rfc2V0X2ZsYWcgLSBUQVMoKQotICoKLSAq IFJldHVybnMgdHJ1ZSBpZiB0aGUgZmxhZyBoYXMgc3VjY2Vzc2Z1bGx5IGJlZW4gc2V0LCBmYWxz ZSBvdGhlcndpc2UuCi0gKgotICogQWNxdWlyZSAoaW5jbHVkaW5nIHJlYWQgYmFycmllcikgc2Vt YW50aWNzLgotICovCi1zdGF0aWMgaW5saW5lIGJvb2wKLXBnX2F0b21pY190ZXN0X3NldF9mbGFn KHZvbGF0aWxlIHBnX2F0b21pY19mbGFnICpwdHIpCi17Ci0JcmV0dXJuIHBnX2F0b21pY190ZXN0 X3NldF9mbGFnX2ltcGwocHRyKTsKLX0KIAotLyoKLSAqIHBnX2F0b21pY191bmxvY2tlZF90ZXN0 X2ZsYWcgLSBDaGVjayBpZiB0aGUgbG9jayBpcyBmcmVlCi0gKgotICogUmV0dXJucyB0cnVlIGlm IHRoZSBmbGFnIGN1cnJlbnRseSBpcyBub3Qgc2V0LCBmYWxzZSBvdGhlcndpc2UuCi0gKgotICog Tm8gYmFycmllciBzZW1hbnRpY3MuCi0gKi8KLXN0YXRpYyBpbmxpbmUgYm9vbAotcGdfYXRvbWlj X3VubG9ja2VkX3Rlc3RfZmxhZyh2b2xhdGlsZSBwZ19hdG9taWNfZmxhZyAqcHRyKQotewotCXJl dHVybiBwZ19hdG9taWNfdW5sb2NrZWRfdGVzdF9mbGFnX2ltcGwocHRyKTsKLX0KLQotLyoKLSAq IHBnX2F0b21pY19jbGVhcl9mbGFnIC0gcmVsZWFzZSBsb2NrIHNldCBieSBUQVMoKQotICoKLSAq IFJlbGVhc2UgKGluY2x1ZGluZyB3cml0ZSBiYXJyaWVyKSBzZW1hbnRpY3MuCi0gKi8KLXN0YXRp YyBpbmxpbmUgdm9pZAotcGdfYXRvbWljX2NsZWFyX2ZsYWcodm9sYXRpbGUgcGdfYXRvbWljX2Zs YWcgKnB0cikKLXsKLQlwZ19hdG9taWNfY2xlYXJfZmxhZ19pbXBsKHB0cik7Ci19Ci0KLQotLyoK LSAqIHBnX2F0b21pY19pbml0X3UzMiAtIGluaXRpYWxpemUgYXRvbWljIHZhcmlhYmxlCi0gKgot ICogSGFzIHRvIGJlIGRvbmUgYmVmb3JlIGFueSBjb25jdXJyZW50IHVzYWdlLi4KLSAqCi0gKiBO byBiYXJyaWVyIHNlbWFudGljcy4KLSAqLwogc3RhdGljIGlubGluZSB2b2lkCi1wZ19hdG9taWNf aW5pdF91MzIodm9sYXRpbGUgcGdfYXRvbWljX3VpbnQzMiAqcHRyLCB1aW50MzIgdmFsKQotewot CUFzc2VydFBvaW50ZXJBbGlnbm1lbnQocHRyLCA0KTsKLQotCXBnX2F0b21pY19pbml0X3UzMl9p bXBsKHB0ciwgdmFsKTsKLX0KLQotLyoKLSAqIHBnX2F0b21pY19yZWFkX3UzMiAtIHVubG9ja2Vk IHJlYWQgZnJvbSBhdG9taWMgdmFyaWFibGUuCi0gKgotICogVGhlIHJlYWQgaXMgZ3VhcmFudGVl ZCB0byByZXR1cm4gYSB2YWx1ZSBhcyBpdCBoYXMgYmVlbiB3cml0dGVuIGJ5IHRoaXMgb3IKLSAq IGFub3RoZXIgcHJvY2VzcyBhdCBzb21lIHBvaW50IGluIHRoZSBwYXN0LiBUaGVyZSdzIGhvd2V2 ZXIgbm8gY2FjaGUKLSAqIGNvaGVyZW5jeSBpbnRlcmFjdGlvbiBndWFyYW50ZWVpbmcgdGhlIHZh bHVlIGhhc24ndCBzaW5jZSBiZWVuIHdyaXR0ZW4gdG8KLSAqIGFnYWluLgotICoKLSAqIE5vIGJh cnJpZXIgc2VtYW50aWNzLgotICovCi1zdGF0aWMgaW5saW5lIHVpbnQzMgotcGdfYXRvbWljX3Jl YWRfdTMyKHZvbGF0aWxlIHBnX2F0b21pY191aW50MzIgKnB0cikKK3BnX3JlYWRfYmFycmllcih2 b2lkKQogewotCUFzc2VydFBvaW50ZXJBbGlnbm1lbnQocHRyLCA0KTsKLQlyZXR1cm4gcGdfYXRv bWljX3JlYWRfdTMyX2ltcGwocHRyKTsKLX0KLQotLyoKLSAqIHBnX2F0b21pY19yZWFkX21lbWJh cnJpZXJfdTMyIC0gcmVhZCB3aXRoIGJhcnJpZXIgc2VtYW50aWNzLgotICoKLSAqIFRoaXMgcmVh ZCBpcyBndWFyYW50ZWVkIHRvIHJldHVybiB0aGUgY3VycmVudCB2YWx1ZSwgcHJvdmlkZWQgdGhh dCB0aGUgdmFsdWUKLSAqIGlzIG9ubHkgZXZlciB1cGRhdGVkIHZpYSBvcGVyYXRpb25zIHdpdGgg YmFycmllciBzZW1hbnRpY3MsIHN1Y2ggYXMKLSAqIHBnX2F0b21pY19jb21wYXJlX2V4Y2hhbmdl X3UzMigpIGFuZCBwZ19hdG9taWNfd3JpdGVfbWVtYmFycmllcl91MzIoKS4KLSAqIFdoaWxlIHRo aXMgbWF5IGJlIGxlc3MgcGVyZm9ybWFudCB0aGFuIHBnX2F0b21pY19yZWFkX3UzMigpLCBpdCBt YXkgYmUKLSAqIGVhc2llciB0byByZWFzb24gYWJvdXQgY29ycmVjdG5lc3Mgd2l0aCB0aGlzIGZ1 bmN0aW9uIGluIGxlc3MgcGVyZm9ybWFuY2UtCi0gKiBzZW5zaXRpdmUgY29kZS4KLSAqCi0gKiBG dWxsIGJhcnJpZXIgc2VtYW50aWNzLgotICovCi1zdGF0aWMgaW5saW5lIHVpbnQzMgotcGdfYXRv bWljX3JlYWRfbWVtYmFycmllcl91MzIodm9sYXRpbGUgcGdfYXRvbWljX3VpbnQzMiAqcHRyKQot ewotCUFzc2VydFBvaW50ZXJBbGlnbm1lbnQocHRyLCA0KTsKLQotCXJldHVybiBwZ19hdG9taWNf cmVhZF9tZW1iYXJyaWVyX3UzMl9pbXBsKHB0cik7Ci19Ci0KLS8qCi0gKiBwZ19hdG9taWNfd3Jp dGVfdTMyIC0gd3JpdGUgdG8gYXRvbWljIHZhcmlhYmxlLgotICoKLSAqIFRoZSB3cml0ZSBpcyBn dWFyYW50ZWVkIHRvIHN1Y2NlZWQgYXMgYSB3aG9sZSwgaS5lLiBpdCdzIG5vdCBwb3NzaWJsZSB0 bwotICogb2JzZXJ2ZSBhIHBhcnRpYWwgd3JpdGUgZm9yIGFueSByZWFkZXIuICBOb3RlIHRoYXQg dGhpcyBjb3JyZWN0bHkgaW50ZXJhY3RzCi0gKiB3aXRoIHBnX2F0b21pY19jb21wYXJlX2V4Y2hh bmdlX3UzMiwgaW4gY29udHJhc3QgdG8KLSAqIHBnX2F0b21pY191bmxvY2tlZF93cml0ZV91MzIo KS4KLSAqCi0gKiBObyBiYXJyaWVyIHNlbWFudGljcy4KLSAqLwotc3RhdGljIGlubGluZSB2b2lk Ci1wZ19hdG9taWNfd3JpdGVfdTMyKHZvbGF0aWxlIHBnX2F0b21pY191aW50MzIgKnB0ciwgdWlu dDMyIHZhbCkKLXsKLQlBc3NlcnRQb2ludGVyQWxpZ25tZW50KHB0ciwgNCk7Ci0KLQlwZ19hdG9t aWNfd3JpdGVfdTMyX2ltcGwocHRyLCB2YWwpOwotfQotCi0vKgotICogcGdfYXRvbWljX3VubG9j a2VkX3dyaXRlX3UzMiAtIHVubG9ja2VkIHdyaXRlIHRvIGF0b21pYyB2YXJpYWJsZS4KLSAqCi0g KiBUaGUgd3JpdGUgaXMgZ3VhcmFudGVlZCB0byBzdWNjZWVkIGFzIGEgd2hvbGUsIGkuZS4gaXQn cyBub3QgcG9zc2libGUgdG8KLSAqIG9ic2VydmUgYSBwYXJ0aWFsIHdyaXRlIGZvciBhbnkgcmVh ZGVyLiAgQnV0IG5vdGUgdGhhdCB3cml0aW5nIHRoaXMgd2F5IGlzCi0gKiBub3QgZ3VhcmFudGVl ZCB0byBjb3JyZWN0bHkgaW50ZXJhY3Qgd2l0aCByZWFkLW1vZGlmeS13cml0ZSBvcGVyYXRpb25z IGxpa2UKLSAqIHBnX2F0b21pY19jb21wYXJlX2V4Y2hhbmdlX3UzMi4gIFRoaXMgc2hvdWxkIG9u bHkgYmUgdXNlZCBpbiBjYXNlcyB3aGVyZQotICogbWlub3IgcGVyZm9ybWFuY2UgcmVncmVzc2lv bnMgZHVlIHRvIGF0b21pY3MgZW11bGF0aW9uIGFyZSB1bmFjY2VwdGFibGUuCi0gKgotICogTm8g YmFycmllciBzZW1hbnRpY3MuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZAotcGdfYXRvbWljX3Vu bG9ja2VkX3dyaXRlX3UzMih2b2xhdGlsZSBwZ19hdG9taWNfdWludDMyICpwdHIsIHVpbnQzMiB2 YWwpCi17Ci0JQXNzZXJ0UG9pbnRlckFsaWdubWVudChwdHIsIDQpOwotCi0JcGdfYXRvbWljX3Vu bG9ja2VkX3dyaXRlX3UzMl9pbXBsKHB0ciwgdmFsKTsKKyNpZmRlZiBwZ19yZWFkX2JhcnJpZXJf aW1wbAorCXBnX3JlYWRfYmFycmllcl9pbXBsKCk7CisjZWxzZQorCXBnX2NvbXBpbGVyX2JhcnJp ZXIoKTsKKwlhdG9taWNfdGhyZWFkX2ZlbmNlKG1lbW9yeV9vcmRlcl9hY3F1aXJlKTsKKyNlbmRp ZgogfQogCi0vKgotICogcGdfYXRvbWljX3dyaXRlX21lbWJhcnJpZXJfdTMyIC0gd3JpdGUgd2l0 aCBiYXJyaWVyIHNlbWFudGljcy4KLSAqCi0gKiBUaGUgd3JpdGUgaXMgZ3VhcmFudGVlZCB0byBz dWNjZWVkIGFzIGEgd2hvbGUsIGkuZS4sIGl0J3Mgbm90IHBvc3NpYmxlIHRvCi0gKiBvYnNlcnZl IGEgcGFydGlhbCB3cml0ZSBmb3IgYW55IHJlYWRlci4gIE5vdGUgdGhhdCB0aGlzIGNvcnJlY3Rs eSBpbnRlcmFjdHMKLSAqIHdpdGggYm90aCBwZ19hdG9taWNfY29tcGFyZV9leGNoYW5nZV91MzIo KSBhbmQKLSAqIHBnX2F0b21pY19yZWFkX21lbWJhcnJpZXJfdTMyKCkuICBXaGlsZSB0aGlzIG1h eSBiZSBsZXNzIHBlcmZvcm1hbnQgdGhhbgotICogcGdfYXRvbWljX3dyaXRlX3UzMigpLCBpdCBt YXkgYmUgZWFzaWVyIHRvIHJlYXNvbiBhYm91dCBjb3JyZWN0bmVzcyB3aXRoCi0gKiB0aGlzIGZ1 bmN0aW9uIGluIGxlc3MgcGVyZm9ybWFuY2Utc2Vuc2l0aXZlIGNvZGUuCi0gKgotICogRnVsbCBi YXJyaWVyIHNlbWFudGljcy4KLSAqLwogc3RhdGljIGlubGluZSB2b2lkCi1wZ19hdG9taWNfd3Jp dGVfbWVtYmFycmllcl91MzIodm9sYXRpbGUgcGdfYXRvbWljX3VpbnQzMiAqcHRyLCB1aW50MzIg dmFsKQorcGdfd3JpdGVfYmFycmllcih2b2lkKQogewotCUFzc2VydFBvaW50ZXJBbGlnbm1lbnQo cHRyLCA0KTsKLQotCXBnX2F0b21pY193cml0ZV9tZW1iYXJyaWVyX3UzMl9pbXBsKHB0ciwgdmFs KTsKLX0KLQotLyoKLSAqIHBnX2F0b21pY19leGNoYW5nZV91MzIgLSBleGNoYW5nZSBuZXd2YWwg d2l0aCBjdXJyZW50IHZhbHVlCi0gKgotICogUmV0dXJucyB0aGUgb2xkIHZhbHVlIG9mICdwdHIn IGJlZm9yZSB0aGUgc3dhcC4KLSAqCi0gKiBGdWxsIGJhcnJpZXIgc2VtYW50aWNzLgotICovCi1z dGF0aWMgaW5saW5lIHVpbnQzMgotcGdfYXRvbWljX2V4Y2hhbmdlX3UzMih2b2xhdGlsZSBwZ19h dG9taWNfdWludDMyICpwdHIsIHVpbnQzMiBuZXd2YWwpCi17Ci0JQXNzZXJ0UG9pbnRlckFsaWdu bWVudChwdHIsIDQpOwotCi0JcmV0dXJuIHBnX2F0b21pY19leGNoYW5nZV91MzJfaW1wbChwdHIs IG5ld3ZhbCk7Ci19Ci0KLS8qCi0gKiBwZ19hdG9taWNfY29tcGFyZV9leGNoYW5nZV91MzIgLSBD QVMgb3BlcmF0aW9uCi0gKgotICogQXRvbWljYWxseSBjb21wYXJlIHRoZSBjdXJyZW50IHZhbHVl IG9mIHB0ciB3aXRoICpleHBlY3RlZCBhbmQgc3RvcmUgbmV3dmFsCi0gKiBpZmYgcHRyIGFuZCAq ZXhwZWN0ZWQgaGF2ZSB0aGUgc2FtZSB2YWx1ZS4gVGhlIGN1cnJlbnQgdmFsdWUgb2YgKnB0ciB3 aWxsCi0gKiBhbHdheXMgYmUgc3RvcmVkIGluICpleHBlY3RlZC4KLSAqCi0gKiBSZXR1cm4gdHJ1 ZSBpZiB2YWx1ZXMgaGF2ZSBiZWVuIGV4Y2hhbmdlZCwgZmFsc2Ugb3RoZXJ3aXNlLgotICoKLSAq IEZ1bGwgYmFycmllciBzZW1hbnRpY3MuCi0gKi8KLXN0YXRpYyBpbmxpbmUgYm9vbAotcGdfYXRv bWljX2NvbXBhcmVfZXhjaGFuZ2VfdTMyKHZvbGF0aWxlIHBnX2F0b21pY191aW50MzIgKnB0ciwK LQkJCQkJCQkgICB1aW50MzIgKmV4cGVjdGVkLCB1aW50MzIgbmV3dmFsKQotewotCUFzc2VydFBv aW50ZXJBbGlnbm1lbnQocHRyLCA0KTsKLQlBc3NlcnRQb2ludGVyQWxpZ25tZW50KGV4cGVjdGVk LCA0KTsKLQotCXJldHVybiBwZ19hdG9taWNfY29tcGFyZV9leGNoYW5nZV91MzJfaW1wbChwdHIs IGV4cGVjdGVkLCBuZXd2YWwpOworI2lmZGVmIHBnX3dyaXRlX2JhcnJpZXJfaW1wbAorCXBnX3dy aXRlX2JhcnJpZXJfaW1wbCgpOworI2Vsc2UKKwlwZ19jb21waWxlcl9iYXJyaWVyKCk7CisJYXRv bWljX3RocmVhZF9mZW5jZShtZW1vcnlfb3JkZXJfcmVsZWFzZSk7CisjZW5kaWYKIH0KIAogLyoK LSAqIHBnX2F0b21pY19mZXRjaF9hZGRfdTMyIC0gYXRvbWljYWxseSBhZGQgdG8gdmFyaWFibGUK LSAqCi0gKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiBwdHIgYmVmb3JlIHRoZSBhcml0aG1ldGljIG9w ZXJhdGlvbi4KKyAqIE9wZXJhdGlvbnMgY29ycmVzcG9uZGluZyB0byBzdGFuZGFyZCBhdG9taWNf ZmxhZy4gIFdlIGhhdmUgdG8gdXNlIGFuIGludGVnZXIKKyAqIGluc3RlYWQgb2YgbWFwcGluZyBk aXJlY3RseSB0byB0aGUgc3RhbmRhcmQgbmFtZXMsIHRvIHN1cHBvcnQgb3VyIHJlbGF4ZWQKKyAq IGNoZWNrIGZ1bmN0aW9uLgogICoKLSAqIEZ1bGwgYmFycmllciBzZW1hbnRpY3MuCisgKiBBY3F1 aXJlIGFuZCByZWxlYXNlIGZlbmNlcywgd2hpY2ggYXJlIHJlc3BlY3RpdmVseSBzdHJvbmdlciB0 aGFuIHJlYWQgYW5kCisgKiB3cml0ZSBiYXJyaWVycy4KICAqLwotc3RhdGljIGlubGluZSB1aW50 MzIKLXBnX2F0b21pY19mZXRjaF9hZGRfdTMyKHZvbGF0aWxlIHBnX2F0b21pY191aW50MzIgKnB0 ciwgaW50MzIgYWRkXykKLXsKLQlBc3NlcnRQb2ludGVyQWxpZ25tZW50KHB0ciwgNCk7Ci0JcmV0 dXJuIHBnX2F0b21pY19mZXRjaF9hZGRfdTMyX2ltcGwocHRyLCBhZGRfKTsKLX0KKyNkZWZpbmUg cGdfYXRvbWljX2luaXRfZmxhZyhwKSBhdG9taWNfaW5pdCgocCksIDEpCisjZGVmaW5lIHBnX2F0 b21pY190ZXN0X3NldF9mbGFnKHApIFwKKwlhdG9taWNfZmV0Y2hfYW5kX2V4cGxpY2l0KChwKSwg MCwgbWVtb3J5X29yZGVyX2FjcXVpcmUpCisjZGVmaW5lIHBnX2F0b21pY19jbGVhcl9mbGFnKHAp IFwKKwlhdG9taWNfc3RvcmVfZXhwbGljaXQoKHApLCAxLCBtZW1vcnlfb3JkZXJfcmVsZWFzZSkK KyNkZWZpbmUgcGdfYXRvbWljX3VubG9ja2VkX3Rlc3RfZmxhZyhwKSBcCisJYXRvbWljX2xvYWRf ZXhwbGljaXQoKHApLCBtZW1vcnlfb3JkZXJfcmVsYXhlZCkKIAogLyoKLSAqIHBnX2F0b21pY19m ZXRjaF9zdWJfdTMyIC0gYXRvbWljYWxseSBzdWJ0cmFjdCBmcm9tIHZhcmlhYmxlCi0gKgotICog UmV0dXJucyB0aGUgdmFsdWUgb2YgcHRyIGJlZm9yZSB0aGUgYXJpdGhtZXRpYyBvcGVyYXRpb24u IE5vdGUgdGhhdCBzdWJfCi0gKiBtYXkgbm90IGJlIElOVF9NSU4gZHVlIHRvIHBsYXRmb3JtIGxp bWl0YXRpb25zLgotICoKLSAqIEZ1bGwgYmFycmllciBzZW1hbnRpY3MuCisgKiBMb2NhbCBjb252 ZW50aW9uIGZvciBsb2FkL3N0b3JlLCByZWxheGVkIEFLQSBubyBiYXJyaWVyLiAgVGhlc2UgYXJl IHRoZSBvbmx5CisgKiAiZ2VuZXJpYyIgZnVuY3Rpb25zIHByb3ZpZGVkIHdpdGggcGdfIHByZWZp eGVzLiAgSXQgc2VlbXMgcG9pbnRsZXNzIHRvCisgKiByZW5hbWUgZXZlcnl0aGluZyBpbiA8c3Rk YXRvbWljLmg+LCBidXQgdGhlc2UgdHdvIGFyZSBQb3N0Z3JlU1FMJ3MKKyAqIGVzdGFibGlzaGVk IHdheSBvZiByZXByZXNlbnRpbmcgcmVsYXhlZCBhY2Nlc3MsIGFuZCBhIGxvdCBzaG9ydGVyLgog ICovCi1zdGF0aWMgaW5saW5lIHVpbnQzMgotcGdfYXRvbWljX2ZldGNoX3N1Yl91MzIodm9sYXRp bGUgcGdfYXRvbWljX3VpbnQzMiAqcHRyLCBpbnQzMiBzdWJfKQotewotCUFzc2VydFBvaW50ZXJB bGlnbm1lbnQocHRyLCA0KTsKLQlBc3NlcnQoc3ViXyAhPSBJTlRfTUlOKTsKLQlyZXR1cm4gcGdf YXRvbWljX2ZldGNoX3N1Yl91MzJfaW1wbChwdHIsIHN1Yl8pOwotfQorI2RlZmluZSBwZ19hdG9t aWNfcmVhZChwKSBcCisJYXRvbWljX2xvYWRfZXhwbGljaXQoKHApLCBtZW1vcnlfb3JkZXJfcmVs YXhlZCkKKyNkZWZpbmUgcGdfYXRvbWljX3dyaXRlKHAsIHYpIFwKKwlhdG9taWNfc3RvcmVfZXhw bGljaXQoKHApLCAodiksIG1lbW9yeV9vcmRlcl9yZWxheGVkKQogCiAvKgotICogcGdfYXRvbWlj X2ZldGNoX2FuZF91MzIgLSBhdG9taWNhbGx5IGJpdC1hbmQgYW5kXyB3aXRoIHZhcmlhYmxlCi0g KgotICogUmV0dXJucyB0aGUgdmFsdWUgb2YgcHRyIGJlZm9yZSB0aGUgYXJpdGhtZXRpYyBvcGVy YXRpb24uCisgKiBCYWNrd2FyZC1jb21wYXRpYmxlIHR5cGUtc3BlY2lmaWMgZnVuY3Rpb24gbmFt ZXMuICBPbmx5IHRoZSBoaXN0b3JpY2FsIF91MzIKKyAqIGFuZCBfNjQgbmFtZXMgYXJlIHByb3Zp ZGVkLiAgTmV3IGNvZGUgYW5kIGNvZGUgdXNpbmcgb3RoZXIgYXRvbWljIHR5cGVzCisgKiBzaG91 bGQgdXNlIHRoZSBnZW5lcmljIGZ1bmN0aW9ucyBmcm9tIHRoZSBzdGFuZGFyZCBkaXJlY3RseSwg YW5kCisgKiBwZ19hdG9taWNfe3JlYWQsd3JpdGV9KCkgZm9yIHJlbGF4ZWQgYWNjZXNzLgogICoK LSAqIEZ1bGwgYmFycmllciBzZW1hbnRpY3MuCisgKiBBbGwgb2YgdGhlc2UgZXhjZXB0IHBnX2F0 b21pY18odW5sb2NrZWRfKXtyZWFkLHdyaXRlfV97MzIsNjR9IGhhdmUgc2VxIGNzdAorICogQUtB IGZ1bGwgYmFycmllciBzZW1hbnRpY3MuCiAgKi8KLXN0YXRpYyBpbmxpbmUgdWludDMyCi1wZ19h dG9taWNfZmV0Y2hfYW5kX3UzMih2b2xhdGlsZSBwZ19hdG9taWNfdWludDMyICpwdHIsIHVpbnQz MiBhbmRfKQotewotCUFzc2VydFBvaW50ZXJBbGlnbm1lbnQocHRyLCA0KTsKLQlyZXR1cm4gcGdf YXRvbWljX2ZldGNoX2FuZF91MzJfaW1wbChwdHIsIGFuZF8pOwotfQorI2RlZmluZSBwZ19hdG9t aWNfaW5pdF91MzIgYXRvbWljX2luaXQKKyNkZWZpbmUgcGdfYXRvbWljX2luaXRfdTY0IGF0b21p Y19pbml0CisjZGVmaW5lIHBnX2F0b21pY19yZWFkX3UzMiBwZ19hdG9taWNfcmVhZAorI2RlZmlu ZSBwZ19hdG9taWNfcmVhZF91NjQgcGdfYXRvbWljX3JlYWQKKyNkZWZpbmUgcGdfYXRvbWljX3dy aXRlX3UzMiBwZ19hdG9taWNfd3JpdGUKKyNkZWZpbmUgcGdfYXRvbWljX3dyaXRlX3U2NCBwZ19h dG9taWNfd3JpdGUKKyNkZWZpbmUgcGdfYXRvbWljX3VubG9ja2VkX3JlYWRfdTMyIHBnX2F0b21p Y19yZWFkCisjZGVmaW5lIHBnX2F0b21pY191bmxvY2tlZF9yZWFkX3U2NCBwZ19hdG9taWNfcmVh ZAorI2RlZmluZSBwZ19hdG9taWNfdW5sb2NrZWRfd3JpdGVfdTMyIHBnX2F0b21pY193cml0ZQor I2RlZmluZSBwZ19hdG9taWNfdW5sb2NrZWRfd3JpdGVfdTY0IHBnX2F0b21pY193cml0ZQorI2Rl ZmluZSBwZ19hdG9taWNfcmVhZF9tZW1iYXJyaWVyX3UzMiBhdG9taWNfbG9hZAorI2RlZmluZSBw Z19hdG9taWNfcmVhZF9tZW1iYXJyaWVyX3U2NCBhdG9taWNfbG9hZAorI2RlZmluZSBwZ19hdG9t aWNfd3JpdGVfbWVtYmFycmllcl91MzIgYXRvbWljX3N0b3JlCisjZGVmaW5lIHBnX2F0b21pY193 cml0ZV9tZW1iYXJyaWVyX3U2NCBhdG9taWNfc3RvcmUKKyNkZWZpbmUgcGdfYXRvbWljX2V4Y2hh bmdlX3UzMiBhdG9taWNfZXhjaGFuZ2UKKyNkZWZpbmUgcGdfYXRvbWljX2V4Y2hhbmdlX3U2NCBh dG9taWNfZXhjaGFuZ2UKKyNkZWZpbmUgcGdfYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2VfdTMyIGF0 b21pY19jb21wYXJlX2V4Y2hhbmdlX3N0cm9uZworI2RlZmluZSBwZ19hdG9taWNfY29tcGFyZV9l eGNoYW5nZV91NjQgYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nCisjZGVmaW5lIHBnX2F0 b21pY19mZXRjaF9hZGRfdTMyIGF0b21pY19mZXRjaF9hZGQKKyNkZWZpbmUgcGdfYXRvbWljX2Zl dGNoX2FkZF91NjQgYXRvbWljX2ZldGNoX2FkZAorI2RlZmluZSBwZ19hdG9taWNfZmV0Y2hfc3Vi X3UzMiBhdG9taWNfZmV0Y2hfc3ViCisjZGVmaW5lIHBnX2F0b21pY19mZXRjaF9zdWJfdTY0IGF0 b21pY19mZXRjaF9zdWIKKyNkZWZpbmUgcGdfYXRvbWljX2ZldGNoX2FuZF91MzIgYXRvbWljX2Zl dGNoX2FuZAorI2RlZmluZSBwZ19hdG9taWNfZmV0Y2hfYW5kX3U2NCBhdG9taWNfZmV0Y2hfYW5k CisjZGVmaW5lIHBnX2F0b21pY19mZXRjaF9vcl91MzIgYXRvbWljX2ZldGNoX29yCisjZGVmaW5l IHBnX2F0b21pY19mZXRjaF9vcl91NjQgYXRvbWljX2ZldGNoX29yCiAKIC8qCi0gKiBwZ19hdG9t aWNfZmV0Y2hfb3JfdTMyIC0gYXRvbWljYWxseSBiaXQtb3Igb3JfIHdpdGggdmFyaWFibGUKLSAq Ci0gKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiBwdHIgYmVmb3JlIHRoZSBhcml0aG1ldGljIG9wZXJh dGlvbi4KLSAqCi0gKiBGdWxsIGJhcnJpZXIgc2VtYW50aWNzLgorICogVGhlIHJlc3Qgb2YgdGhp cyBmaWxlIGRlZmluZXMgbm9uLWZ1bmRhbWVudGFsIGNvbnZlbmllbmNlIGZ1bmN0aW9ucyB3aXRo IG5vCisgKiBjb3VudGVycGFydCBpbiA8c3RkYXRvbWljLmg+LgogICovCi1zdGF0aWMgaW5saW5l IHVpbnQzMgotcGdfYXRvbWljX2ZldGNoX29yX3UzMih2b2xhdGlsZSBwZ19hdG9taWNfdWludDMy ICpwdHIsIHVpbnQzMiBvcl8pCi17Ci0JQXNzZXJ0UG9pbnRlckFsaWdubWVudChwdHIsIDQpOwot CXJldHVybiBwZ19hdG9taWNfZmV0Y2hfb3JfdTMyX2ltcGwocHRyLCBvcl8pOwotfQogCiAvKgot ICogcGdfYXRvbWljX2FkZF9mZXRjaF91MzIgLSBhdG9taWNhbGx5IGFkZCB0byB2YXJpYWJsZQot ICoKLSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHB0ciBhZnRlciB0aGUgYXJpdGhtZXRpYyBvcGVy YXRpb24uCi0gKgotICogRnVsbCBiYXJyaWVyIHNlbWFudGljcy4KKyAqIEZldGNoIGFuZCBhZGQv c3VidHJhY3Qgd3JhcHBlcnMgdGhhdCByZXR1cm4gdGhlIG5ldyB2YWx1ZSBpbnN0ZWFkIG9mIHRo ZSBvbGQKKyAqIHZhbHVlLiAgV2UgbmVlZCBmdW5jdGlvbnMgdG8gYXZvaWQgZG91YmxlIGV2YWx1 YXRpb24gb2Ygdi4KICAqLwotc3RhdGljIGlubGluZSB1aW50MzIKLXBnX2F0b21pY19hZGRfZmV0 Y2hfdTMyKHZvbGF0aWxlIHBnX2F0b21pY191aW50MzIgKnB0ciwgaW50MzIgYWRkXykKLXsKLQlB c3NlcnRQb2ludGVyQWxpZ25tZW50KHB0ciwgNCk7Ci0JcmV0dXJuIHBnX2F0b21pY19hZGRfZmV0 Y2hfdTMyX2ltcGwocHRyLCBhZGRfKTsKLX0KLQotLyoKLSAqIHBnX2F0b21pY19zdWJfZmV0Y2hf dTMyIC0gYXRvbWljYWxseSBzdWJ0cmFjdCBmcm9tIHZhcmlhYmxlCi0gKgotICogUmV0dXJucyB0 aGUgdmFsdWUgb2YgcHRyIGFmdGVyIHRoZSBhcml0aG1ldGljIG9wZXJhdGlvbi4gTm90ZSB0aGF0 IHN1Yl8gbWF5Ci0gKiBub3QgYmUgSU5UX01JTiBkdWUgdG8gcGxhdGZvcm0gbGltaXRhdGlvbnMu Ci0gKgotICogRnVsbCBiYXJyaWVyIHNlbWFudGljcy4KLSAqLwotc3RhdGljIGlubGluZSB1aW50 MzIKLXBnX2F0b21pY19zdWJfZmV0Y2hfdTMyKHZvbGF0aWxlIHBnX2F0b21pY191aW50MzIgKnB0 ciwgaW50MzIgc3ViXykKLXsKLQlBc3NlcnRQb2ludGVyQWxpZ25tZW50KHB0ciwgNCk7Ci0JQXNz ZXJ0KHN1Yl8gIT0gSU5UX01JTik7Ci0JcmV0dXJuIHBnX2F0b21pY19zdWJfZmV0Y2hfdTMyX2lt cGwocHRyLCBzdWJfKTsKLX0KLQotLyogLS0tLQotICogVGhlIDY0IGJpdCBvcGVyYXRpb25zIGhh dmUgdGhlIHNhbWUgc2VtYW50aWNzIGFzIHRoZWlyIDMyYml0IGNvdW50ZXJwYXJ0cwotICogaWYg dGhleSBhcmUgYXZhaWxhYmxlLiBDaGVjayB0aGUgY29ycmVzcG9uZGluZyAzMmJpdCBmdW5jdGlv biBmb3IKLSAqIGRvY3VtZW50YXRpb24uCi0gKiAtLS0tCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9p ZAotcGdfYXRvbWljX2luaXRfdTY0KHZvbGF0aWxlIHBnX2F0b21pY191aW50NjQgKnB0ciwgdWlu dDY0IHZhbCkKLXsKLQkvKgotCSAqIENhbid0IG5lY2Vzc2FyaWx5IGVuZm9yY2UgYWxpZ25tZW50 IC0gYW5kIGRvbid0IG5lZWQgaXQgLSB3aGVuIHVzaW5nCi0JICogdGhlIHNwaW5sb2NrIGJhc2Vk IGZhbGxiYWNrIGltcGxlbWVudGF0aW9uLiBUaGVyZWZvcmUgb25seSBhc3NlcnQgd2hlbgotCSAq IG5vdCB1c2luZyBpdC4KLQkgKi8KLSNpZm5kZWYgUEdfSEFWRV9BVE9NSUNfVTY0X1NJTVVMQVRJ T04KLQlBc3NlcnRQb2ludGVyQWxpZ25tZW50KHB0ciwgOCk7Ci0jZW5kaWYKLQlwZ19hdG9taWNf aW5pdF91NjRfaW1wbChwdHIsIHZhbCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdWludDY0Ci1wZ19h dG9taWNfcmVhZF91NjQodm9sYXRpbGUgcGdfYXRvbWljX3VpbnQ2NCAqcHRyKQotewotI2lmbmRl ZiBQR19IQVZFX0FUT01JQ19VNjRfU0lNVUxBVElPTgotCUFzc2VydFBvaW50ZXJBbGlnbm1lbnQo cHRyLCA4KTsKLSNlbmRpZgotCXJldHVybiBwZ19hdG9taWNfcmVhZF91NjRfaW1wbChwdHIpOwot fQotCi1zdGF0aWMgaW5saW5lIHVpbnQ2NAotcGdfYXRvbWljX3JlYWRfbWVtYmFycmllcl91NjQo dm9sYXRpbGUgcGdfYXRvbWljX3VpbnQ2NCAqcHRyKQotewotI2lmbmRlZiBQR19IQVZFX0FUT01J Q19VNjRfU0lNVUxBVElPTgotCUFzc2VydFBvaW50ZXJBbGlnbm1lbnQocHRyLCA4KTsKLSNlbmRp ZgotCXJldHVybiBwZ19hdG9taWNfcmVhZF9tZW1iYXJyaWVyX3U2NF9pbXBsKHB0cik7Ci19Ci0K LXN0YXRpYyBpbmxpbmUgdm9pZAotcGdfYXRvbWljX3dyaXRlX3U2NCh2b2xhdGlsZSBwZ19hdG9t aWNfdWludDY0ICpwdHIsIHVpbnQ2NCB2YWwpCi17Ci0jaWZuZGVmIFBHX0hBVkVfQVRPTUlDX1U2 NF9TSU1VTEFUSU9OCi0JQXNzZXJ0UG9pbnRlckFsaWdubWVudChwdHIsIDgpOwotI2VuZGlmCi0J cGdfYXRvbWljX3dyaXRlX3U2NF9pbXBsKHB0ciwgdmFsKTsKLX0KLQotc3RhdGljIGlubGluZSB2 b2lkCi1wZ19hdG9taWNfd3JpdGVfbWVtYmFycmllcl91NjQodm9sYXRpbGUgcGdfYXRvbWljX3Vp bnQ2NCAqcHRyLCB1aW50NjQgdmFsKQotewotI2lmbmRlZiBQR19IQVZFX0FUT01JQ19VNjRfU0lN VUxBVElPTgotCUFzc2VydFBvaW50ZXJBbGlnbm1lbnQocHRyLCA4KTsKLSNlbmRpZgotCXBnX2F0 b21pY193cml0ZV9tZW1iYXJyaWVyX3U2NF9pbXBsKHB0ciwgdmFsKTsKLX0KLQotc3RhdGljIGlu bGluZSB1aW50NjQKLXBnX2F0b21pY19leGNoYW5nZV91NjQodm9sYXRpbGUgcGdfYXRvbWljX3Vp bnQ2NCAqcHRyLCB1aW50NjQgbmV3dmFsKQotewotI2lmbmRlZiBQR19IQVZFX0FUT01JQ19VNjRf U0lNVUxBVElPTgotCUFzc2VydFBvaW50ZXJBbGlnbm1lbnQocHRyLCA4KTsKLSNlbmRpZgotCXJl dHVybiBwZ19hdG9taWNfZXhjaGFuZ2VfdTY0X2ltcGwocHRyLCBuZXd2YWwpOwotfQotCi1zdGF0 aWMgaW5saW5lIGJvb2wKLXBnX2F0b21pY19jb21wYXJlX2V4Y2hhbmdlX3U2NCh2b2xhdGlsZSBw Z19hdG9taWNfdWludDY0ICpwdHIsCi0JCQkJCQkJICAgdWludDY0ICpleHBlY3RlZCwgdWludDY0 IG5ld3ZhbCkKLXsKLSNpZm5kZWYgUEdfSEFWRV9BVE9NSUNfVTY0X1NJTVVMQVRJT04KLQlBc3Nl cnRQb2ludGVyQWxpZ25tZW50KHB0ciwgOCk7Ci0jZW5kaWYKLQlyZXR1cm4gcGdfYXRvbWljX2Nv bXBhcmVfZXhjaGFuZ2VfdTY0X2ltcGwocHRyLCBleHBlY3RlZCwgbmV3dmFsKTsKLX0KLQotc3Rh dGljIGlubGluZSB1aW50NjQKLXBnX2F0b21pY19mZXRjaF9hZGRfdTY0KHZvbGF0aWxlIHBnX2F0 b21pY191aW50NjQgKnB0ciwgaW50NjQgYWRkXykKLXsKLSNpZm5kZWYgUEdfSEFWRV9BVE9NSUNf VTY0X1NJTVVMQVRJT04KLQlBc3NlcnRQb2ludGVyQWxpZ25tZW50KHB0ciwgOCk7Ci0jZW5kaWYK LQlyZXR1cm4gcGdfYXRvbWljX2ZldGNoX2FkZF91NjRfaW1wbChwdHIsIGFkZF8pOwotfQotCi1z dGF0aWMgaW5saW5lIHVpbnQ2NAotcGdfYXRvbWljX2ZldGNoX3N1Yl91NjQodm9sYXRpbGUgcGdf YXRvbWljX3VpbnQ2NCAqcHRyLCBpbnQ2NCBzdWJfKQotewotI2lmbmRlZiBQR19IQVZFX0FUT01J Q19VNjRfU0lNVUxBVElPTgotCUFzc2VydFBvaW50ZXJBbGlnbm1lbnQocHRyLCA4KTsKLSNlbmRp ZgotCUFzc2VydChzdWJfICE9IFBHX0lOVDY0X01JTik7Ci0JcmV0dXJuIHBnX2F0b21pY19mZXRj aF9zdWJfdTY0X2ltcGwocHRyLCBzdWJfKTsKLX0KLQotc3RhdGljIGlubGluZSB1aW50NjQKLXBn X2F0b21pY19mZXRjaF9hbmRfdTY0KHZvbGF0aWxlIHBnX2F0b21pY191aW50NjQgKnB0ciwgdWlu dDY0IGFuZF8pCi17Ci0jaWZuZGVmIFBHX0hBVkVfQVRPTUlDX1U2NF9TSU1VTEFUSU9OCi0JQXNz ZXJ0UG9pbnRlckFsaWdubWVudChwdHIsIDgpOwotI2VuZGlmCi0JcmV0dXJuIHBnX2F0b21pY19m ZXRjaF9hbmRfdTY0X2ltcGwocHRyLCBhbmRfKTsKLX0KLQotc3RhdGljIGlubGluZSB1aW50NjQK LXBnX2F0b21pY19mZXRjaF9vcl91NjQodm9sYXRpbGUgcGdfYXRvbWljX3VpbnQ2NCAqcHRyLCB1 aW50NjQgb3JfKQotewotI2lmbmRlZiBQR19IQVZFX0FUT01JQ19VNjRfU0lNVUxBVElPTgotCUFz c2VydFBvaW50ZXJBbGlnbm1lbnQocHRyLCA4KTsKLSNlbmRpZgotCXJldHVybiBwZ19hdG9taWNf ZmV0Y2hfb3JfdTY0X2ltcGwocHRyLCBvcl8pOwotfQotCi1zdGF0aWMgaW5saW5lIHVpbnQ2NAot cGdfYXRvbWljX2FkZF9mZXRjaF91NjQodm9sYXRpbGUgcGdfYXRvbWljX3VpbnQ2NCAqcHRyLCBp bnQ2NCBhZGRfKQotewotI2lmbmRlZiBQR19IQVZFX0FUT01JQ19VNjRfU0lNVUxBVElPTgotCUFz c2VydFBvaW50ZXJBbGlnbm1lbnQocHRyLCA4KTsKLSNlbmRpZgotCXJldHVybiBwZ19hdG9taWNf YWRkX2ZldGNoX3U2NF9pbXBsKHB0ciwgYWRkXyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdWludDY0 Ci1wZ19hdG9taWNfc3ViX2ZldGNoX3U2NCh2b2xhdGlsZSBwZ19hdG9taWNfdWludDY0ICpwdHIs IGludDY0IHN1Yl8pCi17Ci0jaWZuZGVmIFBHX0hBVkVfQVRPTUlDX1U2NF9TSU1VTEFUSU9OCi0J QXNzZXJ0UG9pbnRlckFsaWdubWVudChwdHIsIDgpOwotI2VuZGlmCi0JQXNzZXJ0KHN1Yl8gIT0g UEdfSU5UNjRfTUlOKTsKLQlyZXR1cm4gcGdfYXRvbWljX3N1Yl9mZXRjaF91NjRfaW1wbChwdHIs IHN1Yl8pOworI2RlZmluZSBQR19BVE9NSUNfR0VOX1JFVkVSU0VfRkVUQ0goc2l6ZSwgbmFtZSwg b3ApIFwKK3N0YXRpYyBpbmxpbmUgdWludCMjc2l6ZSBcCitwZ19hdG9taWNfIyNuYW1lIyNfZmV0 Y2hfdSMjc2l6ZSh2b2xhdGlsZSBwZ19hdG9taWNfdWludCMjc2l6ZSAqcCwgdWludCMjc2l6ZSB2 KSBcCit7IFwKKwlyZXR1cm4gYXRvbWljX2ZldGNoXyMjbmFtZShwLCB2KSBvcCB2OyBcCiB9CitQ R19BVE9NSUNfR0VOX1JFVkVSU0VfRkVUQ0goMzIsIGFkZCwgKyk7CitQR19BVE9NSUNfR0VOX1JF VkVSU0VfRkVUQ0goNjQsIGFkZCwgKyk7CitQR19BVE9NSUNfR0VOX1JFVkVSU0VfRkVUQ0goMzIs IHN1YiwgLSk7CitQR19BVE9NSUNfR0VOX1JFVkVSU0VfRkVUQ0goNjQsIHN1YiwgLSk7CiAKIC8q CiAgKiBNb25vdG9uaWNhbGx5IGFkdmFuY2UgdGhlIGdpdmVuIHZhcmlhYmxlIHVzaW5nIG9ubHkg YXRvbWljIG9wZXJhdGlvbnMgdW50aWwKQEAgLTU4NCwxMSArMjk2LDcgQEAgcGdfYXRvbWljX21v bm90b25pY19hZHZhbmNlX3U2NCh2b2xhdGlsZSBwZ19hdG9taWNfdWludDY0ICpwdHIsIHVpbnQ2 NCB0YXJnZXQpCiB7CiAJdWludDY0CQljdXJydmFsOwogCi0jaWZuZGVmIFBHX0hBVkVfQVRPTUlD X1U2NF9TSU1VTEFUSU9OCi0JQXNzZXJ0UG9pbnRlckFsaWdubWVudChwdHIsIDgpOwotI2VuZGlm Ci0KLQljdXJydmFsID0gcGdfYXRvbWljX3JlYWRfdTY0X2ltcGwocHRyKTsKKwljdXJydmFsID0g cGdfYXRvbWljX3JlYWRfdTY0KHB0cik7CiAJaWYgKGN1cnJ2YWwgPj0gdGFyZ2V0KQogCXsKIAkJ cGdfbWVtb3J5X2JhcnJpZXIoKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3BvcnQvYXRvbWlj cy9hcmNoLWFybS5oIGIvc3JjL2luY2x1ZGUvcG9ydC9hdG9taWNzL2FyY2gtYXJtLmgKZGVsZXRl ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViN2UwYWM5M2JhLi4wMDAwMDAwMDAwMAotLS0gYS9z cmMvaW5jbHVkZS9wb3J0L2F0b21pY3MvYXJjaC1hcm0uaAorKysgL2Rldi9udWxsCkBAIC0xLDMy ICswLDAgQEAKLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICoKLSAqIGFyY2gtYXJtLmgKLSAqCSAgQXRv bWljIG9wZXJhdGlvbnMgY29uc2lkZXJhdGlvbnMgc3BlY2lmaWMgdG8gQVJNCi0gKgotICogUG9y dGlvbnMgQ29weXJpZ2h0IChjKSAyMDEzLTIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3Bt ZW50IEdyb3VwCi0gKgotICogTk9URVM6Ci0gKgotICogc3JjL2luY2x1ZGUvcG9ydC9hdG9taWNz L2FyY2gtYXJtLmgKLSAqCi0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqLwotCi0vKiBpbnRlbnRpb25h bGx5IG5vIGluY2x1ZGUgZ3VhcmRzLCBzaG91bGQgb25seSBiZSBpbmNsdWRlZCBieSBhdG9taWNz LmggKi8KLSNpZm5kZWYgSU5TSURFX0FUT01JQ1NfSAotI2Vycm9yICJzaG91bGQgYmUgaW5jbHVk ZWQgdmlhIGF0b21pY3MuaCIKLSNlbmRpZgotCi0vKgotICogNjQgYml0IGF0b21pY3Mgb24gQVJN MzIgYXJlIGltcGxlbWVudGVkIHVzaW5nIGtlcm5lbCBmYWxsYmFja3MgYW5kIHRodXMKLSAqIG1p Z2h0IGJlIHNsb3csIHNvIGRpc2FibGUgZW50aXJlbHkuIE9uIEFSTTY0IHRoYXQgcHJvYmxlbSBk b2Vzbid0IGV4aXN0LgotICovCi0jaWYgIWRlZmluZWQoX19hYXJjaDY0X18pCi0jZGVmaW5lIFBH X0RJU0FCTEVfNjRfQklUX0FUT01JQ1MKLSNlbHNlCi0vKgotICogQXJjaGl0ZWN0dXJlIFJlZmVy ZW5jZSBNYW51YWwgZm9yIEFSTXY4IHN0YXRlcyBhbGlnbmVkIHJlYWQvd3JpdGUgdG8vZnJvbQot ICogZ2VuZXJhbCBwdXJwb3NlIHJlZ2lzdGVyIGlzIGF0b21pYy4KLSAqLwotI2RlZmluZSBQR19I QVZFXzhCWVRFX1NJTkdMRV9DT1BZX0FUT01JQ0lUWQotI2VuZGlmICAvKiBfX2FhcmNoNjRfXyAq LwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcG9ydC9hdG9taWNzL2FyY2gtcHBjLmggYi9zcmMv aW5jbHVkZS9wb3J0L2F0b21pY3MvYXJjaC1wcGMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggYjkzZjY3NjZkMjkuLjAwMDAwMDAwMDAwCi0tLSBhL3NyYy9pbmNsdWRlL3BvcnQvYXRv bWljcy9hcmNoLXBwYy5oCisrKyAvZGV2L251bGwKQEAgLTEsMjU2ICswLDAgQEAKLS8qLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQotICoKLSAqIGFyY2gtcHBjLmgKLSAqCSAgQXRvbWljIG9wZXJhdGlvbnMgY29u c2lkZXJhdGlvbnMgc3BlY2lmaWMgdG8gUG93ZXJQQwotICoKLSAqIFBvcnRpb25zIENvcHlyaWdo dCAoYykgMTk5Ni0yMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAotICog UG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9m IENhbGlmb3JuaWEKLSAqCi0gKiBOT1RFUzoKLSAqCi0gKiBzcmMvaW5jbHVkZS9wb3J0L2F0b21p Y3MvYXJjaC1wcGMuaAotICoKLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICovCi0KLSNpZiBkZWZpbmVk KF9fR05VQ19fKQotCi0vKgotICogbHdzeW5jIG9yZGVycyBsb2FkcyB3aXRoIHJlc3BlY3QgdG8g ZWFjaCBvdGhlciwgYW5kIHNpbWlsYXJseSB3aXRoIHN0b3Jlcy4KLSAqIEJ1dCBhIGxvYWQgY2Fu IGJlIHBlcmZvcm1lZCBiZWZvcmUgYSBzdWJzZXF1ZW50IHN0b3JlLCBzbyBzeW5jIG11c3QgYmUg dXNlZAotICogZm9yIGEgZnVsbCBtZW1vcnkgYmFycmllci4KLSAqLwotI2RlZmluZSBwZ19tZW1v cnlfYmFycmllcl9pbXBsKCkJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJzeW5jIiA6IDogOiAibWVt b3J5IikKLSNkZWZpbmUgcGdfcmVhZF9iYXJyaWVyX2ltcGwoKQkJX19hc21fXyBfX3ZvbGF0aWxl X18gKCJsd3N5bmMiIDogOiA6ICJtZW1vcnkiKQotI2RlZmluZSBwZ193cml0ZV9iYXJyaWVyX2lt cGwoKQkJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJsd3N5bmMiIDogOiA6ICJtZW1vcnkiKQotI2Vu ZGlmCi0KLSNkZWZpbmUgUEdfSEFWRV9BVE9NSUNfVTMyX1NVUFBPUlQKLXR5cGVkZWYgc3RydWN0 IHBnX2F0b21pY191aW50MzIKLXsKLQl2b2xhdGlsZSB1aW50MzIgdmFsdWU7Ci19IHBnX2F0b21p Y191aW50MzI7Ci0KLS8qIDY0Yml0IGF0b21pY3MgYXJlIG9ubHkgc3VwcG9ydGVkIGluIDY0Yml0 IG1vZGUgKi8KLSNpZiBTSVpFT0ZfVk9JRF9QID49IDgKLSNkZWZpbmUgUEdfSEFWRV9BVE9NSUNf VTY0X1NVUFBPUlQKLXR5cGVkZWYgc3RydWN0IHBnX2F0b21pY191aW50NjQKLXsKLQl2b2xhdGls ZSB1aW50NjQgdmFsdWUgcGdfYXR0cmlidXRlX2FsaWduZWQoOCk7Ci19IHBnX2F0b21pY191aW50 NjQ7Ci0KLSNlbmRpZgotCi0vKgotICogVGhpcyBtaW1pY3MgZ2NjIF9fYXRvbWljX2NvbXBhcmVf ZXhjaGFuZ2VfbiguLi4sIF9fQVRPTUlDX1NFUV9DU1QpLCBidXQKLSAqIGNvZGUgZ2VuZXJhdGlv biBkaWZmZXJzIGF0IHRoZSBlbmQuICBfX2F0b21pY19jb21wYXJlX2V4Y2hhbmdlX24oKToKLSAq ICAxMDA6CWlzeW5jCi0gKiAgMTA0OgltZmNyICAgIHIzCi0gKiAgMTA4OglybHdpbm0gIHIzLHIz LDMsMzEsMzEKLSAqICAxMGM6CWJuZSAgICAgMTIwIDwuZWIrMHgxMD4KLSAqICAxMTA6CWNscmxk aSAgcjMscjMsNjMKLSAqICAxMTQ6CWFkZGkgICAgcjEscjEsMTEyCi0gKiAgMTE4OglibHIKLSAq ICAxMWM6CW5vcAotICogIDEyMDoJY2xybGRpICByMyxyMyw2MwotICogIDEyNDoJc3R3ICAgICBy OSwwKHI0KQotICogIDEyODoJYWRkaSAgICByMSxyMSwxMTIKLSAqICAxMmM6CWJscgotICoKLSAq IFRoaXM6Ci0gKiAgIGYwOglpc3luYwotICogICBmNDoJbWZjciAgICByOQotICogICBmODoJcmxk aWNsLiByMyxyOSwzNSw2MwotICogICBmYzoJYm5lICAgICAxMDQgPC5lYj4KLSAqICAxMDA6CXN0 dyAgICAgcjEwLDAocjQpCi0gKiAgMTA0OglhZGRpICAgIHIxLHIxLDExMgotICogIDEwODoJYmxy Ci0gKgotICogVGhpcyBpbXBsZW1lbnRhdGlvbiBtYXkgb3IgbWF5IG5vdCBoYXZlIG1hdGVyaWFs bHkgZGlmZmVyZW50IHBlcmZvcm1hbmNlLgotICogSXQncyBub3QgZXhwbG9pdGluZyB0aGUgZmFj dCB0aGF0IGNyMCBzdGlsbCBob2xkcyB0aGUgcmVsZXZhbnQgY29tcGFyaXNvbgotICogYml0cywg c2V0IGR1cmluZyB0aGUgX19hc21fXy4gIE9uZSBjb3VsZCBmaXggdGhhdCBieSBtb3ZpbmcgbW9y ZSBjb2RlIGludG8KLSAqIHRoZSBfX2FzbV9fLiAgKFRoYXQgd291bGQgcmVtb3ZlIHRoZSBmcmVl ZG9tIHRvIGVsaW1pbmF0ZSBkZWFkIHN0b3JlcyB3aGVuCi0gKiB0aGUgY2FsbGVyIGlnbm9yZXMg ImV4cGVjdGVkIiwgYnV0IGZldyBjYWxsZXJzIGRvLikKLSAqCi0gKiBSZWNvZ25pemluZyBjb25z dGFudCAibmV3dmFsIiB3b3VsZCBiZSBzdXBlcmZsdW91cywgYmVjYXVzZSB0aGVyZSdzIG5vCi0g KiBpbW1lZGlhdGUtb3BlcmFuZCB2ZXJzaW9uIG9mIHN0d2N4LgotICovCi0jZGVmaW5lIFBHX0hB VkVfQVRPTUlDX0NPTVBBUkVfRVhDSEFOR0VfVTMyCi1zdGF0aWMgaW5saW5lIGJvb2wKLXBnX2F0 b21pY19jb21wYXJlX2V4Y2hhbmdlX3UzMl9pbXBsKHZvbGF0aWxlIHBnX2F0b21pY191aW50MzIg KnB0ciwKLQkJCQkJCQkJCXVpbnQzMiAqZXhwZWN0ZWQsIHVpbnQzMiBuZXd2YWwpCi17Ci0JdWlu dDMyIGZvdW5kOwotCXVpbnQzMiBjb25kaXRpb25fcmVnaXN0ZXI7Ci0JYm9vbCByZXQ7Ci0KLSNp ZmRlZiBIQVZFX0lfQ09OU1RSQUlOVF9fQlVJTFRJTl9DT05TVEFOVF9QCi0JaWYgKF9fYnVpbHRp bl9jb25zdGFudF9wKCpleHBlY3RlZCkgJiYKLQkJKGludDMyKSAqZXhwZWN0ZWQgPD0gUEdfSU5U MTZfTUFYICYmCi0JCShpbnQzMikgKmV4cGVjdGVkID49IFBHX0lOVDE2X01JTikKLQkJX19hc21f XyBfX3ZvbGF0aWxlX18oCi0JCQkiCXN5bmMJCQkJXG4iCi0JCQkiCWx3YXJ4ICAgJTAsMCwlNSwx CVxuIgotCQkJIgljbXB3aSAgICUwLCUzCQlcbiIKLQkJCSIJYm5lICAgICAkKzEyCQlcbiIJCS8q IGJyYW5jaCB0byBsd3N5bmMgKi8KLQkJCSIJc3R3Y3guICAlNCwwLCU1CQlcbiIKLQkJCSIJYm5l ICAgICAkLTE2CQlcbiIJCS8qIGJyYW5jaCB0byBsd2FyeCAqLwotCQkJIglsd3N5bmMJCQkJXG4i Ci0JCQkiCW1mY3IgICAgJTEgICAgICAgICAgXG4iCi06CQkJIj0mciIoZm91bmQpLCAiPXIiKGNv bmRpdGlvbl9yZWdpc3RlciksICIrbSIocHRyLT52YWx1ZSkKLToJCQkiaSIoKmV4cGVjdGVkKSwg InIiKG5ld3ZhbCksICJyIigmcHRyLT52YWx1ZSkKLToJCQkibWVtb3J5IiwgImNjIik7Ci0JZWxz ZQotI2VuZGlmCi0JCV9fYXNtX18gX192b2xhdGlsZV9fKAotCQkJIglzeW5jCQkJCVxuIgotCQkJ Iglsd2FyeCAgICUwLDAsJTUsMQlcbiIKLQkJCSIJY21wdyAgICAlMCwlMwkJXG4iCi0JCQkiCWJu ZSAgICAgJCsxMgkJXG4iCQkvKiBicmFuY2ggdG8gbHdzeW5jICovCi0JCQkiCXN0d2N4LiAgJTQs MCwlNQkJXG4iCi0JCQkiCWJuZSAgICAgJC0xNgkJXG4iCQkvKiBicmFuY2ggdG8gbHdhcnggKi8K LQkJCSIJbHdzeW5jCQkJCVxuIgotCQkJIgltZmNyICAgICUxICAgICAgICAgIFxuIgotOgkJCSI9 JnIiKGZvdW5kKSwgIj1yIihjb25kaXRpb25fcmVnaXN0ZXIpLCAiK20iKHB0ci0+dmFsdWUpCi06 CQkJInIiKCpleHBlY3RlZCksICJyIihuZXd2YWwpLCAiciIoJnB0ci0+dmFsdWUpCi06CQkJIm1l bW9yeSIsICJjYyIpOwotCi0JcmV0ID0gKGNvbmRpdGlvbl9yZWdpc3RlciA+PiAyOSkgJiAxOwkv KiB0ZXN0IGVxIGJpdCBvZiBjcjAgKi8KLQlpZiAoIXJldCkKLQkJKmV4cGVjdGVkID0gZm91bmQ7 Ci0JcmV0dXJuIHJldDsKLX0KLQotLyoKLSAqIFRoaXMgbWlycm9ycyBnY2MgX19zeW5jX2ZldGNo X2FuZF9hZGQoKS4KLSAqCi0gKiBMaWtlIHRhcygpLCB1c2UgY29uc3RyYWludCAiPSZiIiB0byBh dm9pZCBhbGxvY2F0aW5nIHIwLgotICovCi0jZGVmaW5lIFBHX0hBVkVfQVRPTUlDX0ZFVENIX0FE RF9VMzIKLXN0YXRpYyBpbmxpbmUgdWludDMyCi1wZ19hdG9taWNfZmV0Y2hfYWRkX3UzMl9pbXBs KHZvbGF0aWxlIHBnX2F0b21pY191aW50MzIgKnB0ciwgaW50MzIgYWRkXykKLXsKLQl1aW50MzIg X3Q7Ci0JdWludDMyIHJlczsKLQotI2lmZGVmIEhBVkVfSV9DT05TVFJBSU5UX19CVUlMVElOX0NP TlNUQU5UX1AKLQlpZiAoX19idWlsdGluX2NvbnN0YW50X3AoYWRkXykgJiYKLQkJYWRkXyA8PSBQ R19JTlQxNl9NQVggJiYgYWRkXyA+PSBQR19JTlQxNl9NSU4pCi0JCV9fYXNtX18gX192b2xhdGls ZV9fKAotCQkJIglzeW5jCQkJCVxuIgotCQkJIglsd2FyeCAgICUxLDAsJTQsMQlcbiIKLQkJCSIJ YWRkaSAgICAlMCwlMSwlMwlcbiIKLQkJCSIJc3R3Y3guICAlMCwwLCU0CQlcbiIKLQkJCSIJYm5l ICAgICAkLTEyCQlcbiIJCS8qIGJyYW5jaCB0byBsd2FyeCAqLwotCQkJIglsd3N5bmMJCQkJXG4i Ci06CQkJIj0mciIoX3QpLCAiPSZiIihyZXMpLCAiK20iKHB0ci0+dmFsdWUpCi06CQkJImkiKGFk ZF8pLCAiciIoJnB0ci0+dmFsdWUpCi06CQkJIm1lbW9yeSIsICJjYyIpOwotCWVsc2UKLSNlbmRp ZgotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkJCSIJc3luYwkJCQlcbiIKLQkJCSIJbHdhcngg ICAlMSwwLCU0LDEJXG4iCi0JCQkiCWFkZCAgICAgJTAsJTEsJTMJXG4iCi0JCQkiCXN0d2N4LiAg JTAsMCwlNAkJXG4iCi0JCQkiCWJuZSAgICAgJC0xMgkJXG4iCQkvKiBicmFuY2ggdG8gbHdhcngg Ki8KLQkJCSIJbHdzeW5jCQkJCVxuIgotOgkJCSI9JnIiKF90KSwgIj0mciIocmVzKSwgIittIihw dHItPnZhbHVlKQotOgkJCSJyIihhZGRfKSwgInIiKCZwdHItPnZhbHVlKQotOgkJCSJtZW1vcnki LCAiY2MiKTsKLQotCXJldHVybiByZXM7Ci19Ci0KLSNpZmRlZiBQR19IQVZFX0FUT01JQ19VNjRf U1VQUE9SVAotCi0jZGVmaW5lIFBHX0hBVkVfQVRPTUlDX0NPTVBBUkVfRVhDSEFOR0VfVTY0Ci1z dGF0aWMgaW5saW5lIGJvb2wKLXBnX2F0b21pY19jb21wYXJlX2V4Y2hhbmdlX3U2NF9pbXBsKHZv bGF0aWxlIHBnX2F0b21pY191aW50NjQgKnB0ciwKLQkJCQkJCQkJCXVpbnQ2NCAqZXhwZWN0ZWQs IHVpbnQ2NCBuZXd2YWwpCi17Ci0JdWludDY0IGZvdW5kOwotCXVpbnQzMiBjb25kaXRpb25fcmVn aXN0ZXI7Ci0JYm9vbCByZXQ7Ci0KLQlBc3NlcnRQb2ludGVyQWxpZ25tZW50KGV4cGVjdGVkLCA4 KTsKLQotCS8qIExpa2UgdTMyLCBidXQgcy9sd2FyeC9sZGFyeC87IHMvc3R3Y3gvc3RkY3gvOyBz L2NtcHcvY21wZC8gKi8KLSNpZmRlZiBIQVZFX0lfQ09OU1RSQUlOVF9fQlVJTFRJTl9DT05TVEFO VF9QCi0JaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKCpleHBlY3RlZCkgJiYKLQkJKGludDY0KSAq ZXhwZWN0ZWQgPD0gUEdfSU5UMTZfTUFYICYmCi0JCShpbnQ2NCkgKmV4cGVjdGVkID49IFBHX0lO VDE2X01JTikKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JCQkiCXN5bmMJCQkJXG4iCi0JCQki CWxkYXJ4ICAgJTAsMCwlNSwxCVxuIgotCQkJIgljbXBkaSAgICUwLCUzCQlcbiIKLQkJCSIJYm5l ICAgICAkKzEyCQlcbiIJCS8qIGJyYW5jaCB0byBsd3N5bmMgKi8KLQkJCSIJc3RkY3guICAlNCww LCU1CQlcbiIKLQkJCSIJYm5lICAgICAkLTE2CQlcbiIJCS8qIGJyYW5jaCB0byBsZGFyeCAqLwot CQkJIglsd3N5bmMJCQkJXG4iCi0JCQkiCW1mY3IgICAgJTEgICAgICAgICAgXG4iCi06CQkJIj0m ciIoZm91bmQpLCAiPXIiKGNvbmRpdGlvbl9yZWdpc3RlciksICIrbSIocHRyLT52YWx1ZSkKLToJ CQkiaSIoKmV4cGVjdGVkKSwgInIiKG5ld3ZhbCksICJyIigmcHRyLT52YWx1ZSkKLToJCQkibWVt b3J5IiwgImNjIik7Ci0JZWxzZQotI2VuZGlmCi0JCV9fYXNtX18gX192b2xhdGlsZV9fKAotCQkJ IglzeW5jCQkJCVxuIgotCQkJIglsZGFyeCAgICUwLDAsJTUsMQlcbiIKLQkJCSIJY21wZCAgICAl MCwlMwkJXG4iCi0JCQkiCWJuZSAgICAgJCsxMgkJXG4iCQkvKiBicmFuY2ggdG8gbHdzeW5jICov Ci0JCQkiCXN0ZGN4LiAgJTQsMCwlNQkJXG4iCi0JCQkiCWJuZSAgICAgJC0xNgkJXG4iCQkvKiBi cmFuY2ggdG8gbGRhcnggKi8KLQkJCSIJbHdzeW5jCQkJCVxuIgotCQkJIgltZmNyICAgICUxICAg ICAgICAgIFxuIgotOgkJCSI9JnIiKGZvdW5kKSwgIj1yIihjb25kaXRpb25fcmVnaXN0ZXIpLCAi K20iKHB0ci0+dmFsdWUpCi06CQkJInIiKCpleHBlY3RlZCksICJyIihuZXd2YWwpLCAiciIoJnB0 ci0+dmFsdWUpCi06CQkJIm1lbW9yeSIsICJjYyIpOwotCi0JcmV0ID0gKGNvbmRpdGlvbl9yZWdp c3RlciA+PiAyOSkgJiAxOwkvKiB0ZXN0IGVxIGJpdCBvZiBjcjAgKi8KLQlpZiAoIXJldCkKLQkJ KmV4cGVjdGVkID0gZm91bmQ7Ci0JcmV0dXJuIHJldDsKLX0KLQotI2RlZmluZSBQR19IQVZFX0FU T01JQ19GRVRDSF9BRERfVTY0Ci1zdGF0aWMgaW5saW5lIHVpbnQ2NAotcGdfYXRvbWljX2ZldGNo X2FkZF91NjRfaW1wbCh2b2xhdGlsZSBwZ19hdG9taWNfdWludDY0ICpwdHIsIGludDY0IGFkZF8p Ci17Ci0JdWludDY0IF90OwotCXVpbnQ2NCByZXM7Ci0KLQkvKiBMaWtlIHUzMiwgYnV0IHMvbHdh cngvbGRhcngvOyBzL3N0d2N4L3N0ZGN4LyAqLwotI2lmZGVmIEhBVkVfSV9DT05TVFJBSU5UX19C VUlMVElOX0NPTlNUQU5UX1AKLQlpZiAoX19idWlsdGluX2NvbnN0YW50X3AoYWRkXykgJiYKLQkJ YWRkXyA8PSBQR19JTlQxNl9NQVggJiYgYWRkXyA+PSBQR19JTlQxNl9NSU4pCi0JCV9fYXNtX18g X192b2xhdGlsZV9fKAotCQkJIglzeW5jCQkJCVxuIgotCQkJIglsZGFyeCAgICUxLDAsJTQsMQlc biIKLQkJCSIJYWRkaSAgICAlMCwlMSwlMwlcbiIKLQkJCSIJc3RkY3guICAlMCwwLCU0CQlcbiIK LQkJCSIJYm5lICAgICAkLTEyCQlcbiIJCS8qIGJyYW5jaCB0byBsZGFyeCAqLwotCQkJIglsd3N5 bmMJCQkJXG4iCi06CQkJIj0mciIoX3QpLCAiPSZiIihyZXMpLCAiK20iKHB0ci0+dmFsdWUpCi06 CQkJImkiKGFkZF8pLCAiciIoJnB0ci0+dmFsdWUpCi06CQkJIm1lbW9yeSIsICJjYyIpOwotCWVs c2UKLSNlbmRpZgotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkJCSIJc3luYwkJCQlcbiIKLQkJ CSIJbGRhcnggICAlMSwwLCU0LDEJXG4iCi0JCQkiCWFkZCAgICAgJTAsJTEsJTMJXG4iCi0JCQki CXN0ZGN4LiAgJTAsMCwlNAkJXG4iCi0JCQkiCWJuZSAgICAgJC0xMgkJXG4iCQkvKiBicmFuY2gg dG8gbGRhcnggKi8KLQkJCSIJbHdzeW5jCQkJCVxuIgotOgkJCSI9JnIiKF90KSwgIj0mciIocmVz KSwgIittIihwdHItPnZhbHVlKQotOgkJCSJyIihhZGRfKSwgInIiKCZwdHItPnZhbHVlKQotOgkJ CSJtZW1vcnkiLCAiY2MiKTsKLQotCXJldHVybiByZXM7Ci19Ci0KLSNlbmRpZiAvKiBQR19IQVZF X0FUT01JQ19VNjRfU1VQUE9SVCAqLwotCi0vKiBwZXIgYXJjaGl0ZWN0dXJlIG1hbnVhbCBkb3Vi bGV3b3JkIGFjY2Vzc2VzIGhhdmUgc2luZ2xlIGNvcHkgYXRvbWljaXR5ICovCi0jZGVmaW5lIFBH X0hBVkVfOEJZVEVfU0lOR0xFX0NPUFlfQVRPTUlDSVRZCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9wb3J0L2F0b21pY3MvYXJjaC14ODYuaCBiL3NyYy9pbmNsdWRlL3BvcnQvYXRvbWljcy9hcmNo LXg4Ni5oCmluZGV4IDRiYTJjY2MwNTkxLi5hY2Q2MTIwOTlmYSAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvcG9ydC9hdG9taWNzL2FyY2gteDg2LmgKKysrIGIvc3JjL2luY2x1ZGUvcG9ydC9hdG9t aWNzL2FyY2gteDg2LmgKQEAgLTMsMTAgKzMsNiBAQAogICogYXJjaC14ODYuaAogICoJICBBdG9t aWMgb3BlcmF0aW9ucyBjb25zaWRlcmF0aW9ucyBzcGVjaWZpYyB0byBpbnRlbCB4ODYKICAqCi0g KiBOb3RlIHRoYXQgd2UgYWN0dWFsbHkgcmVxdWlyZSBhIDQ4NiB1cHdhcmRzIGJlY2F1c2UgdGhl IDM4NiBkb2Vzbid0IGhhdmUKLSAqIHN1cHBvcnQgZm9yIHhhZGQgYW5kIGNtcHhjaGcuIEdpdmVu IHRoYXQgdGhlIDM4NiBpc24ndCBzdXBwb3J0ZWQgYW55d2hlcmUKLSAqIGFueW1vcmUgdGhhdCdz IG5vdCBtdWNoIG9mIGEgcmVzdHJpY3Rpb24gbHVja2lseS4KLSAqCiAgKiBQb3J0aW9ucyBDb3B5 cmlnaHQgKGMpIDE5OTYtMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAK ICAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0 eSBvZiBDYWxpZm9ybmlhCiAgKgpAQCAtNDMsMjA0ICszOSwzIEBACiAKICNkZWZpbmUgcGdfcmVh ZF9iYXJyaWVyX2ltcGwoKQkJcGdfY29tcGlsZXJfYmFycmllcl9pbXBsKCkKICNkZWZpbmUgcGdf d3JpdGVfYmFycmllcl9pbXBsKCkJCXBnX2NvbXBpbGVyX2JhcnJpZXJfaW1wbCgpCi0KLS8qCi0g KiBQcm92aWRlIGltcGxlbWVudGF0aW9uIGZvciBhdG9taWNzIHVzaW5nIGlubGluZSBhc3NlbWJs eSBvbiB4ODYgZ2NjLiBJdCdzCi0gKiBuaWNlIHRvIHN1cHBvcnQgb2xkZXIgZ2NjJ3MgYW5kIHRo ZSBjb21wYXJlL2V4Y2hhbmdlIGltcGxlbWVudGF0aW9uIGhlcmUgaXMKLSAqIGFjdHVhbGx5IG1v cmUgZWZmaWNpZW50IHRoYW4gdGhlICogX19zeW5jIHZhcmlhbnQuCi0gKi8KLSNpZiBkZWZpbmVk KF9fR05VQ19fKSB8fCBkZWZpbmVkKF9fSU5URUxfQ09NUElMRVIpCi0KLSNkZWZpbmUgUEdfSEFW RV9BVE9NSUNfRkxBR19TVVBQT1JUCi10eXBlZGVmIHN0cnVjdCBwZ19hdG9taWNfZmxhZwotewot CXZvbGF0aWxlIGNoYXIgdmFsdWU7Ci19IHBnX2F0b21pY19mbGFnOwotCi0jZGVmaW5lIFBHX0hB VkVfQVRPTUlDX1UzMl9TVVBQT1JUCi10eXBlZGVmIHN0cnVjdCBwZ19hdG9taWNfdWludDMyCi17 Ci0Jdm9sYXRpbGUgdWludDMyIHZhbHVlOwotfSBwZ19hdG9taWNfdWludDMyOwotCi0vKgotICog SXQncyB0b28gY29tcGxpY2F0ZWQgdG8gd3JpdGUgaW5saW5lIGFzbSBmb3IgNjRiaXQgdHlwZXMg b24gMzJiaXQgYW5kIHRoZQotICogNDg2IGNhbid0IGRvIGl0IGFueXdheS4KLSAqLwotI2lmZGVm IF9feDg2XzY0X18KLSNkZWZpbmUgUEdfSEFWRV9BVE9NSUNfVTY0X1NVUFBPUlQKLXR5cGVkZWYg c3RydWN0IHBnX2F0b21pY191aW50NjQKLXsKLQkvKiBhbGlnbm1lbnQgZ3VhcmFudGVlZCBkdWUg dG8gYmVpbmcgb24gYSA2NGJpdCBwbGF0Zm9ybSAqLwotCXZvbGF0aWxlIHVpbnQ2NCB2YWx1ZTsK LX0gcGdfYXRvbWljX3VpbnQ2NDsKLSNlbmRpZgkvKiBfX3g4Nl82NF9fICovCi0KLSNlbmRpZiAv KiBkZWZpbmVkKF9fR05VQ19fKSB8fCBkZWZpbmVkKF9fSU5URUxfQ09NUElMRVIpICovCi0KLSNp ZiAhZGVmaW5lZChQR19IQVZFX1NQSU5fREVMQVkpCi0vKgotICogVGhpcyBzZXF1ZW5jZSBpcyBl cXVpdmFsZW50IHRvIHRoZSBQQVVTRSBpbnN0cnVjdGlvbiAoInJlcCIgaXMKLSAqIGlnbm9yZWQg Ynkgb2xkIElBMzIgcHJvY2Vzc29ycyBpZiB0aGUgZm9sbG93aW5nIGluc3RydWN0aW9uIGlzCi0g KiBub3QgYSBzdHJpbmcgb3BlcmF0aW9uKTsgdGhlIElBLTMyIEFyY2hpdGVjdHVyZSBTb2Z0d2Fy ZQotICogRGV2ZWxvcGVyJ3MgTWFudWFsLCBWb2wuIDMsIFNlY3Rpb24gNy43LjIgZGVzY3JpYmVz IHdoeSB1c2luZwotICogUEFVU0UgaW4gdGhlIGlubmVyIGxvb3Agb2YgYSBzcGluIGxvY2sgaXMg bmVjZXNzYXJ5IGZvciBnb29kCi0gKiBwZXJmb3JtYW5jZToKLSAqCi0gKiAgICAgVGhlIFBBVVNF IGluc3RydWN0aW9uIGltcHJvdmVzIHRoZSBwZXJmb3JtYW5jZSBvZiBJQS0zMgotICogICAgIHBy b2Nlc3NvcnMgc3VwcG9ydGluZyBIeXBlci1UaHJlYWRpbmcgVGVjaG5vbG9neSB3aGVuCi0gKiAg ICAgZXhlY3V0aW5nIHNwaW4td2FpdCBsb29wcyBhbmQgb3RoZXIgcm91dGluZXMgd2hlcmUgb25l Ci0gKiAgICAgdGhyZWFkIGlzIGFjY2Vzc2luZyBhIHNoYXJlZCBsb2NrIG9yIHNlbWFwaG9yZSBp biBhIHRpZ2h0Ci0gKiAgICAgcG9sbGluZyBsb29wLiBXaGVuIGV4ZWN1dGluZyBhIHNwaW4td2Fp dCBsb29wLCB0aGUKLSAqICAgICBwcm9jZXNzb3IgY2FuIHN1ZmZlciBhIHNldmVyZSBwZXJmb3Jt YW5jZSBwZW5hbHR5IHdoZW4KLSAqICAgICBleGl0aW5nIHRoZSBsb29wIGJlY2F1c2UgaXQgZGV0 ZWN0cyBhIHBvc3NpYmxlIG1lbW9yeSBvcmRlcgotICogICAgIHZpb2xhdGlvbiBhbmQgZmx1c2hl cyB0aGUgY29yZSBwcm9jZXNzb3IncyBwaXBlbGluZS4gVGhlCi0gKiAgICAgUEFVU0UgaW5zdHJ1 Y3Rpb24gcHJvdmlkZXMgYSBoaW50IHRvIHRoZSBwcm9jZXNzb3IgdGhhdCB0aGUKLSAqICAgICBj b2RlIHNlcXVlbmNlIGlzIGEgc3Bpbi13YWl0IGxvb3AuIFRoZSBwcm9jZXNzb3IgdXNlcyB0aGlz Ci0gKiAgICAgaGludCB0byBhdm9pZCB0aGUgbWVtb3J5IG9yZGVyIHZpb2xhdGlvbiBhbmQgcHJl dmVudCB0aGUKLSAqICAgICBwaXBlbGluZSBmbHVzaC4gSW4gYWRkaXRpb24sIHRoZSBQQVVTRSBp bnN0cnVjdGlvbgotICogICAgIGRlLXBpcGVsaW5lcyB0aGUgc3Bpbi13YWl0IGxvb3AgdG8gcHJl dmVudCBpdCBmcm9tCi0gKiAgICAgY29uc3VtaW5nIGV4ZWN1dGlvbiByZXNvdXJjZXMgZXhjZXNz aXZlbHkuCi0gKi8KLSNpZiBkZWZpbmVkKF9fR05VQ19fKSB8fCBkZWZpbmVkKF9fSU5URUxfQ09N UElMRVIpCi0jZGVmaW5lIFBHX0hBVkVfU1BJTl9ERUxBWQotc3RhdGljIF9faW5saW5lX18gdm9p ZAotcGdfc3Bpbl9kZWxheV9pbXBsKHZvaWQpCi17Ci0JX19hc21fXyBfX3ZvbGF0aWxlX18oIiBy ZXA7IG5vcAkJCVxuIik7Ci19Ci0jZWxpZiBkZWZpbmVkKF9NU0NfVkVSKSAmJiBkZWZpbmVkKF9f eDg2XzY0X18pCi0jZGVmaW5lIFBHX0hBVkVfU1BJTl9ERUxBWQotc3RhdGljIF9fZm9yY2Vpbmxp bmUgdm9pZAotcGdfc3Bpbl9kZWxheV9pbXBsKHZvaWQpCi17Ci0JX21tX3BhdXNlKCk7Ci19Ci0j ZWxpZiBkZWZpbmVkKF9NU0NfVkVSKQotI2RlZmluZSBQR19IQVZFX1NQSU5fREVMQVkKLXN0YXRp YyBfX2ZvcmNlaW5saW5lIHZvaWQKLXBnX3NwaW5fZGVsYXlfaW1wbCh2b2lkKQotewotCS8qIFNl ZSBjb21tZW50IGZvciBnY2MgY29kZS4gU2FtZSBjb2RlLCBNQVNNIHN5bnRheCAqLwotCV9fYXNt IHJlcCBub3A7Ci19Ci0jZW5kaWYKLSNlbmRpZiAvKiAhZGVmaW5lZChQR19IQVZFX1NQSU5fREVM QVkpICovCi0KLQotI2lmIGRlZmluZWQoX19HTlVDX18pIHx8IGRlZmluZWQoX19JTlRFTF9DT01Q SUxFUikKLQotI2RlZmluZSBQR19IQVZFX0FUT01JQ19URVNUX1NFVF9GTEFHCi1zdGF0aWMgaW5s aW5lIGJvb2wKLXBnX2F0b21pY190ZXN0X3NldF9mbGFnX2ltcGwodm9sYXRpbGUgcGdfYXRvbWlj X2ZsYWcgKnB0cikKLXsKLQljaGFyCQlfcmVzID0gMTsKLQotCV9fYXNtX18gX192b2xhdGlsZV9f KAotCQkiCWxvY2sJCQlcbiIKLQkJIgl4Y2hnYgklMCwlMQlcbiIKLToJCSIrcSIoX3JlcyksICIr bSIocHRyLT52YWx1ZSkKLToKLToJCSJtZW1vcnkiKTsKLQlyZXR1cm4gX3JlcyA9PSAwOwotfQot Ci0jZGVmaW5lIFBHX0hBVkVfQVRPTUlDX0NMRUFSX0ZMQUcKLXN0YXRpYyBpbmxpbmUgdm9pZAot cGdfYXRvbWljX2NsZWFyX2ZsYWdfaW1wbCh2b2xhdGlsZSBwZ19hdG9taWNfZmxhZyAqcHRyKQot ewotCS8qCi0JICogT24gYSBUU08gYXJjaGl0ZWN0dXJlIGxpa2UgeDg2IGl0J3Mgc3VmZmljaWVu dCB0byB1c2UgYSBjb21waWxlcgotCSAqIGJhcnJpZXIgdG8gYWNoaWV2ZSByZWxlYXNlIHNlbWFu dGljcy4KLQkgKi8KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygiIiA6OjogIm1lbW9yeSIpOwotCXB0 ci0+dmFsdWUgPSAwOwotfQotCi0jZGVmaW5lIFBHX0hBVkVfQVRPTUlDX0NPTVBBUkVfRVhDSEFO R0VfVTMyCi1zdGF0aWMgaW5saW5lIGJvb2wKLXBnX2F0b21pY19jb21wYXJlX2V4Y2hhbmdlX3Uz Ml9pbXBsKHZvbGF0aWxlIHBnX2F0b21pY191aW50MzIgKnB0ciwKLQkJCQkJCQkJCXVpbnQzMiAq ZXhwZWN0ZWQsIHVpbnQzMiBuZXd2YWwpCi17Ci0JY2hhcglyZXQ7Ci0KLQkvKgotCSAqIFBlcmZv cm0gY21weGNoZyBhbmQgdXNlIHRoZSB6ZXJvIGZsYWcgd2hpY2ggaXQgaW1wbGljaXRseSBzZXRz IHdoZW4KLQkgKiBlcXVhbCB0byBtZWFzdXJlIHRoZSBzdWNjZXNzLgotCSAqLwotCV9fYXNtX18g X192b2xhdGlsZV9fKAotCQkiCWxvY2sJCQkJXG4iCi0JCSIJY21weGNoZ2wJJTQsJTUJXG4iCi0J CSIgICBzZXR6CQklMgkJXG4iCi06CQkiPWEiICgqZXhwZWN0ZWQpLCAiPW0iKHB0ci0+dmFsdWUp LCAiPXEiIChyZXQpCi06CQkiYSIgKCpleHBlY3RlZCksICJyIiAobmV3dmFsKSwgIm0iKHB0ci0+ dmFsdWUpCi06CQkibWVtb3J5IiwgImNjIik7Ci0JcmV0dXJuIChib29sKSByZXQ7Ci19Ci0KLSNk ZWZpbmUgUEdfSEFWRV9BVE9NSUNfRkVUQ0hfQUREX1UzMgotc3RhdGljIGlubGluZSB1aW50MzIK LXBnX2F0b21pY19mZXRjaF9hZGRfdTMyX2ltcGwodm9sYXRpbGUgcGdfYXRvbWljX3VpbnQzMiAq cHRyLCBpbnQzMiBhZGRfKQotewotCXVpbnQzMiByZXM7Ci0JX19hc21fXyBfX3ZvbGF0aWxlX18o Ci0JCSIJbG9jawkJCQlcbiIKLQkJIgl4YWRkbAklMCwlMQkJXG4iCi06CQkiPXEiKHJlcyksICI9 bSIocHRyLT52YWx1ZSkKLToJCSIwIiAoYWRkXyksICJtIihwdHItPnZhbHVlKQotOgkJIm1lbW9y eSIsICJjYyIpOwotCXJldHVybiByZXM7Ci19Ci0KLSNpZmRlZiBfX3g4Nl82NF9fCi0KLSNkZWZp bmUgUEdfSEFWRV9BVE9NSUNfQ09NUEFSRV9FWENIQU5HRV9VNjQKLXN0YXRpYyBpbmxpbmUgYm9v bAotcGdfYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2VfdTY0X2ltcGwodm9sYXRpbGUgcGdfYXRvbWlj X3VpbnQ2NCAqcHRyLAotCQkJCQkJCQkJdWludDY0ICpleHBlY3RlZCwgdWludDY0IG5ld3ZhbCkK LXsKLQljaGFyCXJldDsKLQotCUFzc2VydFBvaW50ZXJBbGlnbm1lbnQoZXhwZWN0ZWQsIDgpOwot Ci0JLyoKLQkgKiBQZXJmb3JtIGNtcHhjaGcgYW5kIHVzZSB0aGUgemVybyBmbGFnIHdoaWNoIGl0 IGltcGxpY2l0bHkgc2V0cyB3aGVuCi0JICogZXF1YWwgdG8gbWVhc3VyZSB0aGUgc3VjY2Vzcy4K LQkgKi8KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkJIglsb2NrCQkJCVxuIgotCQkiCWNtcHhj aGdxCSU0LCU1CVxuIgotCQkiICAgc2V0egkJJTIJCVxuIgotOgkJIj1hIiAoKmV4cGVjdGVkKSwg Ij1tIihwdHItPnZhbHVlKSwgIj1xIiAocmV0KQotOgkJImEiICgqZXhwZWN0ZWQpLCAiciIgKG5l d3ZhbCksICJtIihwdHItPnZhbHVlKQotOgkJIm1lbW9yeSIsICJjYyIpOwotCXJldHVybiAoYm9v bCkgcmV0OwotfQotCi0jZGVmaW5lIFBHX0hBVkVfQVRPTUlDX0ZFVENIX0FERF9VNjQKLXN0YXRp YyBpbmxpbmUgdWludDY0Ci1wZ19hdG9taWNfZmV0Y2hfYWRkX3U2NF9pbXBsKHZvbGF0aWxlIHBn X2F0b21pY191aW50NjQgKnB0ciwgaW50NjQgYWRkXykKLXsKLQl1aW50NjQgcmVzOwotCV9fYXNt X18gX192b2xhdGlsZV9fKAotCQkiCWxvY2sJCQkJXG4iCi0JCSIJeGFkZHEJJTAsJTEJCVxuIgot OgkJIj1xIihyZXMpLCAiPW0iKHB0ci0+dmFsdWUpCi06CQkiMCIgKGFkZF8pLCAibSIocHRyLT52 YWx1ZSkKLToJCSJtZW1vcnkiLCAiY2MiKTsKLQlyZXR1cm4gcmVzOwotfQotCi0jZW5kaWYgLyog X194ODZfNjRfXyAqLwotCi0jZW5kaWYgLyogZGVmaW5lZChfX0dOVUNfXykgfHwgZGVmaW5lZChf X0lOVEVMX0NPTVBJTEVSKSAqLwotCi0vKgotICogOCBieXRlIHJlYWRzIC8gd3JpdGVzIGhhdmUg c2luZ2xlLWNvcHkgYXRvbWljaXR5IG9uIDMyIGJpdCB4ODYgcGxhdGZvcm1zCi0gKiBzaW5jZSBh dCBsZWFzdCB0aGUgNTg2LiBBcyB3ZWxsIGFzIG9uIGFsbCB4ODYtNjQgY3B1cy4KLSAqLwotI2lm IGRlZmluZWQoX19pNTY4X18pIHx8IGRlZmluZWQoX19pNjY4X18pIHx8IC8qIGdjYyBpNTg2KyAq LyAgXAotCShkZWZpbmVkKF9NX0lYODYpICYmIF9NX0lYODYgPj0gNTAwKSB8fCAvKiBtc3ZjIGk1 ODYrICovIFwKLQlkZWZpbmVkKF9feDg2XzY0X18pIHx8IGRlZmluZWQoX194ODZfNjQpIHx8IGRl ZmluZWQoX01fWDY0KSAvKiBnY2MsIG1zdmMgKi8KLSNkZWZpbmUgUEdfSEFWRV84QllURV9TSU5H TEVfQ09QWV9BVE9NSUNJVFkKLSNlbmRpZiAvKiA4IGJ5dGUgc2luZ2xlLWNvcHkgYXRvbWljaXR5 ICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9wb3J0L2F0b21pY3MvZmFsbGJhY2suaCBiL3Ny Yy9pbmNsdWRlL3BvcnQvYXRvbWljcy9mYWxsYmFjay5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCBkMmYxYjg1MTY2OC4uMDAwMDAwMDAwMDAKLS0tIGEvc3JjL2luY2x1ZGUvcG9ydC9h dG9taWNzL2ZhbGxiYWNrLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi0vKi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KLSAqCi0gKiBmYWxsYmFjay5oCi0gKiAgICBGYWxsYmFjayBmb3IgcGxhdGZv cm1zIHdpdGhvdXQgNjQgYml0IGF0b21pY3Mgc3VwcG9ydC4gU2xvd2VyCi0gKiAgICB0aGFuIG5h dGl2ZSBhdG9taWNzIHN1cHBvcnQsIGJ1dCBub3QgdW51c2FibHkgc2xvdy4KLSAqCi0gKiBQb3J0 aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1l bnQgR3JvdXAKLSAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUg VW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCi0gKgotICogc3JjL2luY2x1ZGUvcG9ydC9hdG9taWNz L2ZhbGxiYWNrLmgKLSAqCi0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqLwotCi0vKiBpbnRlbnRpb25h bGx5IG5vIGluY2x1ZGUgZ3VhcmRzLCBzaG91bGQgb25seSBiZSBpbmNsdWRlZCBieSBhdG9taWNz LmggKi8KLSNpZm5kZWYgSU5TSURFX0FUT01JQ1NfSAotIwllcnJvciAic2hvdWxkIGJlIGluY2x1 ZGVkIHZpYSBhdG9taWNzLmgiCi0jZW5kaWYKLQotCi0jaWYgIWRlZmluZWQoUEdfSEFWRV9BVE9N SUNfVTY0X1NVUFBPUlQpCi0KLSNkZWZpbmUgUEdfSEFWRV9BVE9NSUNfVTY0X1NJTVVMQVRJT04K LQotI2RlZmluZSBQR19IQVZFX0FUT01JQ19VNjRfU1VQUE9SVAotdHlwZWRlZiBzdHJ1Y3QgcGdf YXRvbWljX3VpbnQ2NAotewotCWludAkJCXNlbWE7Ci0Jdm9sYXRpbGUgdWludDY0IHZhbHVlOwot fSBwZ19hdG9taWNfdWludDY0OwotCi0jZGVmaW5lIFBHX0hBVkVfQVRPTUlDX0lOSVRfVTY0Ci1l eHRlcm4gdm9pZCBwZ19hdG9taWNfaW5pdF91NjRfaW1wbCh2b2xhdGlsZSBwZ19hdG9taWNfdWlu dDY0ICpwdHIsIHVpbnQ2NCB2YWxfKTsKLQotI2RlZmluZSBQR19IQVZFX0FUT01JQ19DT01QQVJF X0VYQ0hBTkdFX1U2NAotZXh0ZXJuIGJvb2wgcGdfYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2VfdTY0 X2ltcGwodm9sYXRpbGUgcGdfYXRvbWljX3VpbnQ2NCAqcHRyLAotCQkJCQkJCQkJCQkJdWludDY0 ICpleHBlY3RlZCwgdWludDY0IG5ld3ZhbCk7Ci0KLSNkZWZpbmUgUEdfSEFWRV9BVE9NSUNfRkVU Q0hfQUREX1U2NAotZXh0ZXJuIHVpbnQ2NCBwZ19hdG9taWNfZmV0Y2hfYWRkX3U2NF9pbXBsKHZv bGF0aWxlIHBnX2F0b21pY191aW50NjQgKnB0ciwgaW50NjQgYWRkXyk7Ci0KLSNlbmRpZiAvKiBQ R19IQVZFX0FUT01JQ19VNjRfU1VQUE9SVCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcG9y dC9hdG9taWNzL2dlbmVyaWMtZ2NjLmggYi9zcmMvaW5jbHVkZS9wb3J0L2F0b21pY3MvZ2VuZXJp Yy1nY2MuaAppbmRleCBhMDc1MWYyMjg2YS4uNzg1NTVhMjc4NjEgMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL3BvcnQvYXRvbWljcy9nZW5lcmljLWdjYy5oCisrKyBiL3NyYy9pbmNsdWRlL3BvcnQv YXRvbWljcy9nZW5lcmljLWdjYy5oCkBAIC0xLDE5ICsxLDExIEBACiAvKi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KICAqCiAgKiBnZW5lcmljLWdjYy5oCi0gKgkgIEF0b21pYyBvcGVyYXRpb25zLCBpbXBsZW1l bnRlZCB1c2luZyBnY2MgKG9yIGNvbXBhdGlibGUpIGludHJpbnNpY3MuCisgKgkgIENvbXBpbGVy IGJhcnJpZXJzIGZvciBHQ0MgKG9yIGNvbXBhdGlibGUpCiAgKgogICogUG9ydGlvbnMgQ29weXJp Z2h0IChjKSAxOTk2LTIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCiAg KiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkg b2YgQ2FsaWZvcm5pYQogICoKLSAqIE5PVEVTOgotICoKLSAqIERvY3VtZW50YXRpb246Ci0gKiAq IExlZ2FjeSBfX3N5bmMgQnVpbHQtaW4gRnVuY3Rpb25zIGZvciBBdG9taWMgTWVtb3J5IEFjY2Vz cwotICogICBodHRwczovL2djYy5nbnUub3JnL29ubGluZWRvY3MvZ2NjLTQuOC4yL2djYy9fMDA1 Zl8wMDVmc3luYy1CdWlsdGlucy5odG1sCi0gKiAqIEJ1aWx0LWluIGZ1bmN0aW9ucyBmb3IgbWVt b3J5IG1vZGVsIGF3YXJlIGF0b21pYyBvcGVyYXRpb25zCi0gKiAgIGh0dHBzOi8vZ2NjLmdudS5v cmcvb25saW5lZG9jcy9nY2MtNC44LjIvZ2NjL18wMDVmXzAwNWZhdG9taWMtQnVpbHRpbnMuaHRt bAotICoKICAqIHNyYy9pbmNsdWRlL3BvcnQvYXRvbWljcy9nZW5lcmljLWdjYy5oCiAgKgogICot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCkBAIC0yOCwzMDAgKzIwLDMgQEAKICAqIEFuIGVtcHR5IGFzbSBibG9j ayBzaG91bGQgYmUgYSBzdWZmaWNpZW50IGNvbXBpbGVyIGJhcnJpZXIuCiAgKi8KICNkZWZpbmUg cGdfY29tcGlsZXJfYmFycmllcl9pbXBsKCkJX19hc21fXyBfX3ZvbGF0aWxlX18oIiIgOjo6ICJt ZW1vcnkiKQotCi0vKgotICogSWYgd2UncmUgb24gR0NDLCB3ZSBzaG91bGQgYmUgYWJsZSB0byBn ZXQgYSBtZW1vcnkgYmFycmllcgotICogb3V0IG9mIHRoaXMgY29tcGlsZXIgYnVpbHQtaW4uICBC dXQgd2UgcHJlZmVyIHRvIHJlbHkgb24gcGxhdGZvcm0gc3BlY2lmaWMKLSAqIGRlZmluaXRpb25z IHdoZXJlIHBvc3NpYmxlLCBhbmQgdXNlIHRoaXMgb25seSBhcyBhIGZhbGxiYWNrLgotICovCi0j aWYgIWRlZmluZWQocGdfbWVtb3J5X2JhcnJpZXJfaW1wbCkKLSMJaWYgZGVmaW5lZChIQVZFX0dD Q19fQVRPTUlDX0lOVDMyX0NBUykKLSMJCWRlZmluZSBwZ19tZW1vcnlfYmFycmllcl9pbXBsKCkJ CV9fYXRvbWljX3RocmVhZF9mZW5jZShfX0FUT01JQ19TRVFfQ1NUKQotIwllbGlmIGRlZmluZWQo X19HTlVDX18pCi0jCQlkZWZpbmUgcGdfbWVtb3J5X2JhcnJpZXJfaW1wbCgpCQlfX3N5bmNfc3lu Y2hyb25pemUoKQotIwllbmRpZgotI2VuZGlmIC8qICFkZWZpbmVkKHBnX21lbW9yeV9iYXJyaWVy X2ltcGwpICovCi0KLSNpZiAhZGVmaW5lZChwZ19yZWFkX2JhcnJpZXJfaW1wbCkgJiYgZGVmaW5l ZChIQVZFX0dDQ19fQVRPTUlDX0lOVDMyX0NBUykKLS8qIGFjcXVpcmUgc2VtYW50aWNzIGluY2x1 ZGUgcmVhZCBiYXJyaWVyIHNlbWFudGljcyAqLwotIwkJZGVmaW5lIHBnX3JlYWRfYmFycmllcl9p bXBsKCkgZG8gXAoteyBcCi0JcGdfY29tcGlsZXJfYmFycmllcl9pbXBsKCk7IFwKLQlfX2F0b21p Y190aHJlYWRfZmVuY2UoX19BVE9NSUNfQUNRVUlSRSk7IFwKLX0gd2hpbGUgKDApCi0jZW5kaWYK LQotI2lmICFkZWZpbmVkKHBnX3dyaXRlX2JhcnJpZXJfaW1wbCkgJiYgZGVmaW5lZChIQVZFX0dD Q19fQVRPTUlDX0lOVDMyX0NBUykKLS8qIHJlbGVhc2Ugc2VtYW50aWNzIGluY2x1ZGUgd3JpdGUg YmFycmllciBzZW1hbnRpY3MgKi8KLSMJCWRlZmluZSBwZ193cml0ZV9iYXJyaWVyX2ltcGwoKSBk byBcCi17IFwKLQlwZ19jb21waWxlcl9iYXJyaWVyX2ltcGwoKTsgXAotCV9fYXRvbWljX3RocmVh ZF9mZW5jZShfX0FUT01JQ19SRUxFQVNFKTsgXAotfSB3aGlsZSAoMCkKLSNlbmRpZgotCi0KLS8q IGdlbmVyaWMgZ2NjIGJhc2VkIGF0b21pYyBmbGFnIGltcGxlbWVudGF0aW9uICovCi0jaWYgIWRl ZmluZWQoUEdfSEFWRV9BVE9NSUNfRkxBR19TVVBQT1JUKSBcCi0JJiYgKGRlZmluZWQoSEFWRV9H Q0NfX1NZTkNfSU5UMzJfVEFTKSB8fCBkZWZpbmVkKEhBVkVfR0NDX19TWU5DX0NIQVJfVEFTKSkK LQotI2RlZmluZSBQR19IQVZFX0FUT01JQ19GTEFHX1NVUFBPUlQKLXR5cGVkZWYgc3RydWN0IHBn X2F0b21pY19mbGFnCi17Ci0JLyoKLQkgKiBJZiB3ZSBoYXZlIGEgY2hvaWNlLCB1c2UgaW50LXdp ZHRoIFRBUywgYmVjYXVzZSB0aGF0IGlzIG1vcmUgZWZmaWNpZW50Ci0JICogYW5kL29yIG1vcmUg cmVsaWFibHkgaW1wbGVtZW50ZWQgb24gbW9zdCBub24tSW50ZWwgcGxhdGZvcm1zLiAgKE5vdGUK LQkgKiB0aGF0IHRoaXMgY29kZSBpc24ndCB1c2VkIG9uIHg4NltfNjRdOyBzZWUgYXJjaC14ODYu aCBmb3IgdGhhdC4pCi0JICovCi0jaWZkZWYgSEFWRV9HQ0NfX1NZTkNfSU5UMzJfVEFTCi0Jdm9s YXRpbGUgaW50IHZhbHVlOwotI2Vsc2UKLQl2b2xhdGlsZSBjaGFyIHZhbHVlOwotI2VuZGlmCi19 IHBnX2F0b21pY19mbGFnOwotCi0jZW5kaWYgLyogIUFUT01JQ19GTEFHX1NVUFBPUlQgJiYgU1lO Q19JTlQzMl9UQVMgKi8KLQotLyogZ2VuZXJpYyBnY2MgYmFzZWQgYXRvbWljIHVpbnQzMiBpbXBs ZW1lbnRhdGlvbiAqLwotI2lmICFkZWZpbmVkKFBHX0hBVkVfQVRPTUlDX1UzMl9TVVBQT1JUKSBc Ci0JJiYgKGRlZmluZWQoSEFWRV9HQ0NfX0FUT01JQ19JTlQzMl9DQVMpIHx8IGRlZmluZWQoSEFW RV9HQ0NfX1NZTkNfSU5UMzJfQ0FTKSkKLQotI2RlZmluZSBQR19IQVZFX0FUT01JQ19VMzJfU1VQ UE9SVAotdHlwZWRlZiBzdHJ1Y3QgcGdfYXRvbWljX3VpbnQzMgotewotCXZvbGF0aWxlIHVpbnQz MiB2YWx1ZTsKLX0gcGdfYXRvbWljX3VpbnQzMjsKLQotI2VuZGlmIC8qIGRlZmluZWQoSEFWRV9H Q0NfX0FUT01JQ19JTlQzMl9DQVMpIHx8IGRlZmluZWQoSEFWRV9HQ0NfX1NZTkNfSU5UMzJfQ0FT KSAqLwotCi0vKiBnZW5lcmljIGdjYyBiYXNlZCBhdG9taWMgdWludDY0IGltcGxlbWVudGF0aW9u ICovCi0jaWYgIWRlZmluZWQoUEdfSEFWRV9BVE9NSUNfVTY0X1NVUFBPUlQpIFwKLQkmJiAhZGVm aW5lZChQR19ESVNBQkxFXzY0X0JJVF9BVE9NSUNTKSBcCi0JJiYgKGRlZmluZWQoSEFWRV9HQ0Nf X0FUT01JQ19JTlQ2NF9DQVMpIHx8IGRlZmluZWQoSEFWRV9HQ0NfX1NZTkNfSU5UNjRfQ0FTKSkK LQotI2RlZmluZSBQR19IQVZFX0FUT01JQ19VNjRfU1VQUE9SVAotCi10eXBlZGVmIHN0cnVjdCBw Z19hdG9taWNfdWludDY0Ci17Ci0Jdm9sYXRpbGUgdWludDY0IHZhbHVlIHBnX2F0dHJpYnV0ZV9h bGlnbmVkKDgpOwotfSBwZ19hdG9taWNfdWludDY0OwotCi0jZW5kaWYgLyogZGVmaW5lZChIQVZF X0dDQ19fQVRPTUlDX0lOVDY0X0NBUykgfHwgZGVmaW5lZChIQVZFX0dDQ19fU1lOQ19JTlQ2NF9D QVMpICovCi0KLSNpZmRlZiBQR19IQVZFX0FUT01JQ19GTEFHX1NVUFBPUlQKLQotI2lmIGRlZmlu ZWQoSEFWRV9HQ0NfX1NZTkNfQ0hBUl9UQVMpIHx8IGRlZmluZWQoSEFWRV9HQ0NfX1NZTkNfSU5U MzJfVEFTKQotCi0jaWZuZGVmIFBHX0hBVkVfQVRPTUlDX1RFU1RfU0VUX0ZMQUcKLSNkZWZpbmUg UEdfSEFWRV9BVE9NSUNfVEVTVF9TRVRfRkxBRwotc3RhdGljIGlubGluZSBib29sCi1wZ19hdG9t aWNfdGVzdF9zZXRfZmxhZ19pbXBsKHZvbGF0aWxlIHBnX2F0b21pY19mbGFnICpwdHIpCi17Ci0J LyogTkI6IG9ubHkgYW4gYWNxdWlyZSBiYXJyaWVyLCBub3QgYSBmdWxsIG9uZSAqLwotCS8qIHNv bWUgcGxhdGZvcm0gb25seSBzdXBwb3J0IGEgMSBoZXJlICovCi0JcmV0dXJuIF9fc3luY19sb2Nr X3Rlc3RfYW5kX3NldCgmcHRyLT52YWx1ZSwgMSkgPT0gMDsKLX0KLSNlbmRpZgotCi0jZW5kaWYg LyogZGVmaW5lZChIQVZFX0dDQ19fU1lOQ18qX1RBUykgKi8KLQotI2lmbmRlZiBQR19IQVZFX0FU T01JQ19VTkxPQ0tFRF9URVNUX0ZMQUcKLSNkZWZpbmUgUEdfSEFWRV9BVE9NSUNfVU5MT0NLRURf VEVTVF9GTEFHCi1zdGF0aWMgaW5saW5lIGJvb2wKLXBnX2F0b21pY191bmxvY2tlZF90ZXN0X2Zs YWdfaW1wbCh2b2xhdGlsZSBwZ19hdG9taWNfZmxhZyAqcHRyKQotewotCXJldHVybiBwdHItPnZh bHVlID09IDA7Ci19Ci0jZW5kaWYKLQotI2lmbmRlZiBQR19IQVZFX0FUT01JQ19DTEVBUl9GTEFH Ci0jZGVmaW5lIFBHX0hBVkVfQVRPTUlDX0NMRUFSX0ZMQUcKLXN0YXRpYyBpbmxpbmUgdm9pZAot cGdfYXRvbWljX2NsZWFyX2ZsYWdfaW1wbCh2b2xhdGlsZSBwZ19hdG9taWNfZmxhZyAqcHRyKQot ewotCV9fc3luY19sb2NrX3JlbGVhc2UoJnB0ci0+dmFsdWUpOwotfQotI2VuZGlmCi0KLSNpZm5k ZWYgUEdfSEFWRV9BVE9NSUNfSU5JVF9GTEFHCi0jZGVmaW5lIFBHX0hBVkVfQVRPTUlDX0lOSVRf RkxBRwotc3RhdGljIGlubGluZSB2b2lkCi1wZ19hdG9taWNfaW5pdF9mbGFnX2ltcGwodm9sYXRp bGUgcGdfYXRvbWljX2ZsYWcgKnB0cikKLXsKLQlwZ19hdG9taWNfY2xlYXJfZmxhZ19pbXBsKHB0 cik7Ci19Ci0jZW5kaWYKLQotI2VuZGlmIC8qIGRlZmluZWQoUEdfSEFWRV9BVE9NSUNfRkxBR19T VVBQT1JUKSAqLwotCi0vKiBwcmVmZXIgX19hdG9taWMsIGl0IGhhcyBhIGJldHRlciBBUEkgKi8K LSNpZiAhZGVmaW5lZChQR19IQVZFX0FUT01JQ19DT01QQVJFX0VYQ0hBTkdFX1UzMikgJiYgZGVm aW5lZChIQVZFX0dDQ19fQVRPTUlDX0lOVDMyX0NBUykKLSNkZWZpbmUgUEdfSEFWRV9BVE9NSUNf Q09NUEFSRV9FWENIQU5HRV9VMzIKLXN0YXRpYyBpbmxpbmUgYm9vbAotcGdfYXRvbWljX2NvbXBh cmVfZXhjaGFuZ2VfdTMyX2ltcGwodm9sYXRpbGUgcGdfYXRvbWljX3VpbnQzMiAqcHRyLAotCQkJ CQkJCQkJdWludDMyICpleHBlY3RlZCwgdWludDMyIG5ld3ZhbCkKLXsKLQkvKiBGSVhNRTogd2Ug Y2FuIHByb2JhYmx5IHVzZSBhIGxvd2VyIGNvbnNpc3RlbmN5IG1vZGVsICovCi0JcmV0dXJuIF9f YXRvbWljX2NvbXBhcmVfZXhjaGFuZ2VfbigmcHRyLT52YWx1ZSwgZXhwZWN0ZWQsIG5ld3ZhbCwg ZmFsc2UsCi0JCQkJCQkJCQkgICBfX0FUT01JQ19TRVFfQ1NULCBfX0FUT01JQ19TRVFfQ1NUKTsK LX0KLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoUEdfSEFWRV9BVE9NSUNfQ09NUEFSRV9FWENIQU5H RV9VMzIpICYmIGRlZmluZWQoSEFWRV9HQ0NfX1NZTkNfSU5UMzJfQ0FTKQotI2RlZmluZSBQR19I QVZFX0FUT01JQ19DT01QQVJFX0VYQ0hBTkdFX1UzMgotc3RhdGljIGlubGluZSBib29sCi1wZ19h dG9taWNfY29tcGFyZV9leGNoYW5nZV91MzJfaW1wbCh2b2xhdGlsZSBwZ19hdG9taWNfdWludDMy ICpwdHIsCi0JCQkJCQkJCQl1aW50MzIgKmV4cGVjdGVkLCB1aW50MzIgbmV3dmFsKQotewotCWJv b2wJcmV0OwotCXVpbnQzMgljdXJyZW50OwotCWN1cnJlbnQgPSBfX3N5bmNfdmFsX2NvbXBhcmVf YW5kX3N3YXAoJnB0ci0+dmFsdWUsICpleHBlY3RlZCwgbmV3dmFsKTsKLQlyZXQgPSBjdXJyZW50 ID09ICpleHBlY3RlZDsKLQkqZXhwZWN0ZWQgPSBjdXJyZW50OwotCXJldHVybiByZXQ7Ci19Ci0j ZW5kaWYKLQotLyoKLSAqIF9fc3luY19sb2NrX3Rlc3RfYW5kX3NldCgpIG9ubHkgc3VwcG9ydHMg c2V0dGluZyB0aGUgdmFsdWUgdG8gMSBvbiBzb21lCi0gKiBwbGF0Zm9ybXMsIHNvIHdlIG9ubHkg cHJvdmlkZSBhbiBfX2F0b21pYyBpbXBsZW1lbnRhdGlvbiBmb3IKLSAqIHBnX2F0b21pY19leGNo YW5nZS4KLSAqCi0gKiBXZSBhc3N1bWUgdGhlIGF2YWlsYWJpbGl0eSBvZiAzMi1iaXQgX19hdG9t aWNfY29tcGFyZV9leGNoYW5nZV9uKCkgaW1wbGllcwotICogdGhlIGF2YWlsYWJpbGl0eSBvZiAz Mi1iaXQgX19hdG9taWNfZXhjaGFuZ2VfbigpLgotICovCi0jaWYgIWRlZmluZWQoUEdfSEFWRV9B VE9NSUNfRVhDSEFOR0VfVTMyKSAmJiBkZWZpbmVkKEhBVkVfR0NDX19BVE9NSUNfSU5UMzJfQ0FT KQotI2RlZmluZSBQR19IQVZFX0FUT01JQ19FWENIQU5HRV9VMzIKLXN0YXRpYyBpbmxpbmUgdWlu dDMyCi1wZ19hdG9taWNfZXhjaGFuZ2VfdTMyX2ltcGwodm9sYXRpbGUgcGdfYXRvbWljX3VpbnQz MiAqcHRyLCB1aW50MzIgbmV3dmFsKQotewotCXJldHVybiBfX2F0b21pY19leGNoYW5nZV9uKCZw dHItPnZhbHVlLCBuZXd2YWwsIF9fQVRPTUlDX1NFUV9DU1QpOwotfQotI2VuZGlmCi0KLS8qIGlm IHdlIGhhdmUgMzItYml0IF9fc3luY192YWxfY29tcGFyZV9hbmRfc3dhcCwgYXNzdW1lIHdlIGhh dmUgdGhlc2UgdG9vOiAqLwotCi0jaWYgIWRlZmluZWQoUEdfSEFWRV9BVE9NSUNfRkVUQ0hfQURE X1UzMikgJiYgZGVmaW5lZChIQVZFX0dDQ19fU1lOQ19JTlQzMl9DQVMpCi0jZGVmaW5lIFBHX0hB VkVfQVRPTUlDX0ZFVENIX0FERF9VMzIKLXN0YXRpYyBpbmxpbmUgdWludDMyCi1wZ19hdG9taWNf ZmV0Y2hfYWRkX3UzMl9pbXBsKHZvbGF0aWxlIHBnX2F0b21pY191aW50MzIgKnB0ciwgaW50MzIg YWRkXykKLXsKLQlyZXR1cm4gX19zeW5jX2ZldGNoX2FuZF9hZGQoJnB0ci0+dmFsdWUsIGFkZF8p OwotfQotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChQR19IQVZFX0FUT01JQ19GRVRDSF9TVUJfVTMy KSAmJiBkZWZpbmVkKEhBVkVfR0NDX19TWU5DX0lOVDMyX0NBUykKLSNkZWZpbmUgUEdfSEFWRV9B VE9NSUNfRkVUQ0hfU1VCX1UzMgotc3RhdGljIGlubGluZSB1aW50MzIKLXBnX2F0b21pY19mZXRj aF9zdWJfdTMyX2ltcGwodm9sYXRpbGUgcGdfYXRvbWljX3VpbnQzMiAqcHRyLCBpbnQzMiBzdWJf KQotewotCXJldHVybiBfX3N5bmNfZmV0Y2hfYW5kX3N1YigmcHRyLT52YWx1ZSwgc3ViXyk7Ci19 Ci0jZW5kaWYKLQotI2lmICFkZWZpbmVkKFBHX0hBVkVfQVRPTUlDX0ZFVENIX0FORF9VMzIpICYm IGRlZmluZWQoSEFWRV9HQ0NfX1NZTkNfSU5UMzJfQ0FTKQotI2RlZmluZSBQR19IQVZFX0FUT01J Q19GRVRDSF9BTkRfVTMyCi1zdGF0aWMgaW5saW5lIHVpbnQzMgotcGdfYXRvbWljX2ZldGNoX2Fu ZF91MzJfaW1wbCh2b2xhdGlsZSBwZ19hdG9taWNfdWludDMyICpwdHIsIHVpbnQzMiBhbmRfKQot ewotCXJldHVybiBfX3N5bmNfZmV0Y2hfYW5kX2FuZCgmcHRyLT52YWx1ZSwgYW5kXyk7Ci19Ci0j ZW5kaWYKLQotI2lmICFkZWZpbmVkKFBHX0hBVkVfQVRPTUlDX0ZFVENIX09SX1UzMikgJiYgZGVm aW5lZChIQVZFX0dDQ19fU1lOQ19JTlQzMl9DQVMpCi0jZGVmaW5lIFBHX0hBVkVfQVRPTUlDX0ZF VENIX09SX1UzMgotc3RhdGljIGlubGluZSB1aW50MzIKLXBnX2F0b21pY19mZXRjaF9vcl91MzJf aW1wbCh2b2xhdGlsZSBwZ19hdG9taWNfdWludDMyICpwdHIsIHVpbnQzMiBvcl8pCi17Ci0JcmV0 dXJuIF9fc3luY19mZXRjaF9hbmRfb3IoJnB0ci0+dmFsdWUsIG9yXyk7Ci19Ci0jZW5kaWYKLQot Ci0jaWYgIWRlZmluZWQoUEdfRElTQUJMRV82NF9CSVRfQVRPTUlDUykKLQotI2lmICFkZWZpbmVk KFBHX0hBVkVfQVRPTUlDX0NPTVBBUkVfRVhDSEFOR0VfVTY0KSAmJiBkZWZpbmVkKEhBVkVfR0ND X19BVE9NSUNfSU5UNjRfQ0FTKQotI2RlZmluZSBQR19IQVZFX0FUT01JQ19DT01QQVJFX0VYQ0hB TkdFX1U2NAotc3RhdGljIGlubGluZSBib29sCi1wZ19hdG9taWNfY29tcGFyZV9leGNoYW5nZV91 NjRfaW1wbCh2b2xhdGlsZSBwZ19hdG9taWNfdWludDY0ICpwdHIsCi0JCQkJCQkJCQl1aW50NjQg KmV4cGVjdGVkLCB1aW50NjQgbmV3dmFsKQotewotCUFzc2VydFBvaW50ZXJBbGlnbm1lbnQoZXhw ZWN0ZWQsIDgpOwotCXJldHVybiBfX2F0b21pY19jb21wYXJlX2V4Y2hhbmdlX24oJnB0ci0+dmFs dWUsIGV4cGVjdGVkLCBuZXd2YWwsIGZhbHNlLAotCQkJCQkJCQkJICAgX19BVE9NSUNfU0VRX0NT VCwgX19BVE9NSUNfU0VRX0NTVCk7Ci19Ci0jZW5kaWYKLQotI2lmICFkZWZpbmVkKFBHX0hBVkVf QVRPTUlDX0NPTVBBUkVfRVhDSEFOR0VfVTY0KSAmJiBkZWZpbmVkKEhBVkVfR0NDX19TWU5DX0lO VDY0X0NBUykKLSNkZWZpbmUgUEdfSEFWRV9BVE9NSUNfQ09NUEFSRV9FWENIQU5HRV9VNjQKLXN0 YXRpYyBpbmxpbmUgYm9vbAotcGdfYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2VfdTY0X2ltcGwodm9s YXRpbGUgcGdfYXRvbWljX3VpbnQ2NCAqcHRyLAotCQkJCQkJCQkJdWludDY0ICpleHBlY3RlZCwg dWludDY0IG5ld3ZhbCkKLXsKLQlib29sCXJldDsKLQl1aW50NjQJY3VycmVudDsKLQotCUFzc2Vy dFBvaW50ZXJBbGlnbm1lbnQoZXhwZWN0ZWQsIDgpOwotCWN1cnJlbnQgPSBfX3N5bmNfdmFsX2Nv bXBhcmVfYW5kX3N3YXAoJnB0ci0+dmFsdWUsICpleHBlY3RlZCwgbmV3dmFsKTsKLQlyZXQgPSBj dXJyZW50ID09ICpleHBlY3RlZDsKLQkqZXhwZWN0ZWQgPSBjdXJyZW50OwotCXJldHVybiByZXQ7 Ci19Ci0jZW5kaWYKLQotLyoKLSAqIF9fc3luY19sb2NrX3Rlc3RfYW5kX3NldCgpIG9ubHkgc3Vw cG9ydHMgc2V0dGluZyB0aGUgdmFsdWUgdG8gMSBvbiBzb21lCi0gKiBwbGF0Zm9ybXMsIHNvIHdl IG9ubHkgcHJvdmlkZSBhbiBfX2F0b21pYyBpbXBsZW1lbnRhdGlvbiBmb3IKLSAqIHBnX2F0b21p Y19leGNoYW5nZS4KLSAqCi0gKiBXZSBhc3N1bWUgdGhlIGF2YWlsYWJpbGl0eSBvZiA2NC1iaXQg X19hdG9taWNfY29tcGFyZV9leGNoYW5nZV9uKCkgaW1wbGllcwotICogdGhlIGF2YWlsYWJpbGl0 eSBvZiA2NC1iaXQgX19hdG9taWNfZXhjaGFuZ2VfbigpLgotICovCi0jaWYgIWRlZmluZWQoUEdf SEFWRV9BVE9NSUNfRVhDSEFOR0VfVTY0KSAmJiBkZWZpbmVkKEhBVkVfR0NDX19BVE9NSUNfSU5U NjRfQ0FTKQotI2RlZmluZSBQR19IQVZFX0FUT01JQ19FWENIQU5HRV9VNjQKLXN0YXRpYyBpbmxp bmUgdWludDY0Ci1wZ19hdG9taWNfZXhjaGFuZ2VfdTY0X2ltcGwodm9sYXRpbGUgcGdfYXRvbWlj X3VpbnQ2NCAqcHRyLCB1aW50NjQgbmV3dmFsKQotewotCXJldHVybiBfX2F0b21pY19leGNoYW5n ZV9uKCZwdHItPnZhbHVlLCBuZXd2YWwsIF9fQVRPTUlDX1NFUV9DU1QpOwotfQotI2VuZGlmCi0K LS8qIGlmIHdlIGhhdmUgNjQtYml0IF9fc3luY192YWxfY29tcGFyZV9hbmRfc3dhcCwgYXNzdW1l IHdlIGhhdmUgdGhlc2UgdG9vOiAqLwotCi0jaWYgIWRlZmluZWQoUEdfSEFWRV9BVE9NSUNfRkVU Q0hfQUREX1U2NCkgJiYgZGVmaW5lZChIQVZFX0dDQ19fU1lOQ19JTlQ2NF9DQVMpCi0jZGVmaW5l IFBHX0hBVkVfQVRPTUlDX0ZFVENIX0FERF9VNjQKLXN0YXRpYyBpbmxpbmUgdWludDY0Ci1wZ19h dG9taWNfZmV0Y2hfYWRkX3U2NF9pbXBsKHZvbGF0aWxlIHBnX2F0b21pY191aW50NjQgKnB0ciwg aW50NjQgYWRkXykKLXsKLQlyZXR1cm4gX19zeW5jX2ZldGNoX2FuZF9hZGQoJnB0ci0+dmFsdWUs IGFkZF8pOwotfQotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChQR19IQVZFX0FUT01JQ19GRVRDSF9T VUJfVTY0KSAmJiBkZWZpbmVkKEhBVkVfR0NDX19TWU5DX0lOVDY0X0NBUykKLSNkZWZpbmUgUEdf SEFWRV9BVE9NSUNfRkVUQ0hfU1VCX1U2NAotc3RhdGljIGlubGluZSB1aW50NjQKLXBnX2F0b21p Y19mZXRjaF9zdWJfdTY0X2ltcGwodm9sYXRpbGUgcGdfYXRvbWljX3VpbnQ2NCAqcHRyLCBpbnQ2 NCBzdWJfKQotewotCXJldHVybiBfX3N5bmNfZmV0Y2hfYW5kX3N1YigmcHRyLT52YWx1ZSwgc3Vi Xyk7Ci19Ci0jZW5kaWYKLQotI2lmICFkZWZpbmVkKFBHX0hBVkVfQVRPTUlDX0ZFVENIX0FORF9V NjQpICYmIGRlZmluZWQoSEFWRV9HQ0NfX1NZTkNfSU5UNjRfQ0FTKQotI2RlZmluZSBQR19IQVZF X0FUT01JQ19GRVRDSF9BTkRfVTY0Ci1zdGF0aWMgaW5saW5lIHVpbnQ2NAotcGdfYXRvbWljX2Zl dGNoX2FuZF91NjRfaW1wbCh2b2xhdGlsZSBwZ19hdG9taWNfdWludDY0ICpwdHIsIHVpbnQ2NCBh bmRfKQotewotCXJldHVybiBfX3N5bmNfZmV0Y2hfYW5kX2FuZCgmcHRyLT52YWx1ZSwgYW5kXyk7 Ci19Ci0jZW5kaWYKLQotI2lmICFkZWZpbmVkKFBHX0hBVkVfQVRPTUlDX0ZFVENIX09SX1U2NCkg JiYgZGVmaW5lZChIQVZFX0dDQ19fU1lOQ19JTlQ2NF9DQVMpCi0jZGVmaW5lIFBHX0hBVkVfQVRP TUlDX0ZFVENIX09SX1U2NAotc3RhdGljIGlubGluZSB1aW50NjQKLXBnX2F0b21pY19mZXRjaF9v cl91NjRfaW1wbCh2b2xhdGlsZSBwZ19hdG9taWNfdWludDY0ICpwdHIsIHVpbnQ2NCBvcl8pCi17 Ci0JcmV0dXJuIF9fc3luY19mZXRjaF9hbmRfb3IoJnB0ci0+dmFsdWUsIG9yXyk7Ci19Ci0jZW5k aWYKLQotI2VuZGlmIC8qICFkZWZpbmVkKFBHX0RJU0FCTEVfNjRfQklUX0FUT01JQ1MpICovCmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9wb3J0L2F0b21pY3MvZ2VuZXJpYy1tc3ZjLmggYi9zcmMv aW5jbHVkZS9wb3J0L2F0b21pY3MvZ2VuZXJpYy1tc3ZjLmgKaW5kZXggYTZlYTVmMWMyZTcuLjRj YjVlYWI1YmU2IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9wb3J0L2F0b21pY3MvZ2VuZXJpYy1t c3ZjLmgKKysrIGIvc3JjL2luY2x1ZGUvcG9ydC9hdG9taWNzL2dlbmVyaWMtbXN2Yy5oCkBAIC0x LDE3ICsxLDExIEBACiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqCiAgKiBnZW5lcmljLW1zdmMuaAot ICoJICBBdG9taWMgb3BlcmF0aW9ucyBzdXBwb3J0IHdoZW4gdXNpbmcgTVNWQworICogICBDb21w aWxlciBiYXJyaWVycyB3aGVuIHVzaW5nIE1TVkMKICAqCiAgKiBQb3J0aW9ucyBDb3B5cmlnaHQg KGMpIDE5OTYtMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKICAqIFBv cnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBD YWxpZm9ybmlhCiAgKgotICogTk9URVM6Ci0gKgotICogRG9jdW1lbnRhdGlvbjoKLSAqICogSW50 ZXJsb2NrZWQgVmFyaWFibGUgQWNjZXNzCi0gKiAgIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20v ZW4tdXMvbGlicmFyeS9tczY4NDEyMiUyOFZTLjg1JTI5LmFzcHgKLSAqCiAgKiBzcmMvaW5jbHVk ZS9wb3J0L2F0b21pY3MvZ2VuZXJpYy1tc3ZjLmgKICAqCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAg LTI0LDkyICsxOCw0IEBACiAjZW5kaWYKIAogI3ByYWdtYSBpbnRyaW5zaWMoX1JlYWRXcml0ZUJh cnJpZXIpCi0jZGVmaW5lIHBnX2NvbXBpbGVyX2JhcnJpZXJfaW1wbCgpCV9SZWFkV3JpdGVCYXJy aWVyKCkKLQotI2lmbmRlZiBwZ19tZW1vcnlfYmFycmllcl9pbXBsCi0jZGVmaW5lIHBnX21lbW9y eV9iYXJyaWVyX2ltcGwoKQlNZW1vcnlCYXJyaWVyKCkKLSNlbmRpZgotCi0jZGVmaW5lIFBHX0hB VkVfQVRPTUlDX1UzMl9TVVBQT1JUCi10eXBlZGVmIHN0cnVjdCBwZ19hdG9taWNfdWludDMyCi17 Ci0Jdm9sYXRpbGUgdWludDMyIHZhbHVlOwotfSBwZ19hdG9taWNfdWludDMyOwotCi0jZGVmaW5l IFBHX0hBVkVfQVRPTUlDX1U2NF9TVVBQT1JUCi10eXBlZGVmIHN0cnVjdCBwZ19hdHRyaWJ1dGVf YWxpZ25lZCg4KSBwZ19hdG9taWNfdWludDY0Ci17Ci0Jdm9sYXRpbGUgdWludDY0IHZhbHVlOwot fSBwZ19hdG9taWNfdWludDY0OwotCi0KLSNkZWZpbmUgUEdfSEFWRV9BVE9NSUNfQ09NUEFSRV9F WENIQU5HRV9VMzIKLXN0YXRpYyBpbmxpbmUgYm9vbAotcGdfYXRvbWljX2NvbXBhcmVfZXhjaGFu Z2VfdTMyX2ltcGwodm9sYXRpbGUgcGdfYXRvbWljX3VpbnQzMiAqcHRyLAotCQkJCQkJCQkJdWlu dDMyICpleHBlY3RlZCwgdWludDMyIG5ld3ZhbCkKLXsKLQlib29sCXJldDsKLQl1aW50MzIJY3Vy cmVudDsKLQljdXJyZW50ID0gSW50ZXJsb2NrZWRDb21wYXJlRXhjaGFuZ2UoJnB0ci0+dmFsdWUs IG5ld3ZhbCwgKmV4cGVjdGVkKTsKLQlyZXQgPSBjdXJyZW50ID09ICpleHBlY3RlZDsKLQkqZXhw ZWN0ZWQgPSBjdXJyZW50OwotCXJldHVybiByZXQ7Ci19Ci0KLSNkZWZpbmUgUEdfSEFWRV9BVE9N SUNfRVhDSEFOR0VfVTMyCi1zdGF0aWMgaW5saW5lIHVpbnQzMgotcGdfYXRvbWljX2V4Y2hhbmdl X3UzMl9pbXBsKHZvbGF0aWxlIHBnX2F0b21pY191aW50MzIgKnB0ciwgdWludDMyIG5ld3ZhbCkK LXsKLQlyZXR1cm4gSW50ZXJsb2NrZWRFeGNoYW5nZSgmcHRyLT52YWx1ZSwgbmV3dmFsKTsKLX0K LQotI2RlZmluZSBQR19IQVZFX0FUT01JQ19GRVRDSF9BRERfVTMyCi1zdGF0aWMgaW5saW5lIHVp bnQzMgotcGdfYXRvbWljX2ZldGNoX2FkZF91MzJfaW1wbCh2b2xhdGlsZSBwZ19hdG9taWNfdWlu dDMyICpwdHIsIGludDMyIGFkZF8pCi17Ci0JcmV0dXJuIEludGVybG9ja2VkRXhjaGFuZ2VBZGQo JnB0ci0+dmFsdWUsIGFkZF8pOwotfQotCi0vKgotICogVGhlIG5vbi1pbnRyaW5zaWNzIHZlcnNp b25zIGFyZSBvbmx5IGF2YWlsYWJsZSBpbiB2aXN0YSB1cHdhcmRzLCBzbyB1c2UgdGhlCi0gKiBp bnRyaW5zaWMgdmVyc2lvbi4gT25seSBzdXBwb3J0ZWQgb24gPjQ4NiwgYnV0IHdlIHJlcXVpcmUg WFAgYXMgYSBtaW5pbXVtCi0gKiBiYXNlbGluZSwgd2hpY2ggZG9lc24ndCBzdXBwb3J0IHRoZSA0 ODYsIHNvIHdlIGRvbid0IG5lZWQgdG8gYWRkIGNoZWNrcyBmb3IKLSAqIHRoYXQgY2FzZS4KLSAq LwotI3ByYWdtYSBpbnRyaW5zaWMoX0ludGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdlNjQpCi0KLSNk ZWZpbmUgUEdfSEFWRV9BVE9NSUNfQ09NUEFSRV9FWENIQU5HRV9VNjQKLXN0YXRpYyBpbmxpbmUg Ym9vbAotcGdfYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2VfdTY0X2ltcGwodm9sYXRpbGUgcGdfYXRv bWljX3VpbnQ2NCAqcHRyLAotCQkJCQkJCQkJdWludDY0ICpleHBlY3RlZCwgdWludDY0IG5ld3Zh bCkKLXsKLQlib29sCXJldDsKLQl1aW50NjQJY3VycmVudDsKLQljdXJyZW50ID0gX0ludGVybG9j a2VkQ29tcGFyZUV4Y2hhbmdlNjQoJnB0ci0+dmFsdWUsIG5ld3ZhbCwgKmV4cGVjdGVkKTsKLQly ZXQgPSBjdXJyZW50ID09ICpleHBlY3RlZDsKLQkqZXhwZWN0ZWQgPSBjdXJyZW50OwotCXJldHVy biByZXQ7Ci19Ci0KLS8qIE9ubHkgaW1wbGVtZW50ZWQgb24gNjRiaXQgYnVpbGRzICovCi0jaWZk ZWYgX1dJTjY0Ci0KLSNwcmFnbWEgaW50cmluc2ljKF9JbnRlcmxvY2tlZEV4Y2hhbmdlNjQpCi0K LSNkZWZpbmUgUEdfSEFWRV9BVE9NSUNfRVhDSEFOR0VfVTY0Ci1zdGF0aWMgaW5saW5lIHVpbnQ2 NAotcGdfYXRvbWljX2V4Y2hhbmdlX3U2NF9pbXBsKHZvbGF0aWxlIHBnX2F0b21pY191aW50NjQg KnB0ciwgdWludDY0IG5ld3ZhbCkKLXsKLQlyZXR1cm4gX0ludGVybG9ja2VkRXhjaGFuZ2U2NCgm cHRyLT52YWx1ZSwgbmV3dmFsKTsKLX0KLQotI3ByYWdtYSBpbnRyaW5zaWMoX0ludGVybG9ja2Vk RXhjaGFuZ2VBZGQ2NCkKLQotI2RlZmluZSBQR19IQVZFX0FUT01JQ19GRVRDSF9BRERfVTY0Ci1z dGF0aWMgaW5saW5lIHVpbnQ2NAotcGdfYXRvbWljX2ZldGNoX2FkZF91NjRfaW1wbCh2b2xhdGls ZSBwZ19hdG9taWNfdWludDY0ICpwdHIsIGludDY0IGFkZF8pCi17Ci0JcmV0dXJuIF9JbnRlcmxv Y2tlZEV4Y2hhbmdlQWRkNjQoJnB0ci0+dmFsdWUsIGFkZF8pOwotfQotCi0jZW5kaWYgLyogX1dJ TjY0ICovCisjZGVmaW5lIHBnX2NvbXBpbGVyX2JhcnJpZXJfaW1wbCgpIF9SZWFkV3JpdGVCYXJy aWVyKCkKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3BvcnQvYXRvbWljcy9nZW5lcmljLmggYi9z cmMvaW5jbHVkZS9wb3J0L2F0b21pY3MvZ2VuZXJpYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCA2YjYxYTdiNTQxNi4uMDAwMDAwMDAwMDAKLS0tIGEvc3JjL2luY2x1ZGUvcG9ydC9h dG9taWNzL2dlbmVyaWMuaAorKysgL2Rldi9udWxsCkBAIC0xLDQyNyArMCwwIEBACi0vKi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KLSAqCi0gKiBnZW5lcmljLmgKLSAqCSAgSW1wbGVtZW50IGhpZ2hlciBsZXZl bCBvcGVyYXRpb25zIGJhc2VkIG9uIHNvbWUgbG93ZXIgbGV2ZWwgYXRvbWljCi0gKgkgIG9wZXJh dGlvbnMuCi0gKgotICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjUsIFBvc3RncmVT UUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCi0gKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5 OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQotICoKLSAqIHNyYy9p bmNsdWRlL3BvcnQvYXRvbWljcy9nZW5lcmljLmgKLSAqCi0gKi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAq LwotCi0vKiBpbnRlbnRpb25hbGx5IG5vIGluY2x1ZGUgZ3VhcmRzLCBzaG91bGQgb25seSBiZSBp bmNsdWRlZCBieSBhdG9taWNzLmggKi8KLSNpZm5kZWYgSU5TSURFX0FUT01JQ1NfSAotIwllcnJv ciAic2hvdWxkIGJlIGluY2x1ZGVkIHZpYSBhdG9taWNzLmgiCi0jZW5kaWYKLQotLyoKLSAqIElm IHJlYWQgb3Igd3JpdGUgYmFycmllcnMgYXJlIHVuZGVmaW5lZCwgd2UgdXBncmFkZSB0aGVtIHRv IGZ1bGwgbWVtb3J5Ci0gKiBiYXJyaWVycy4KLSAqLwotI2lmICFkZWZpbmVkKHBnX3JlYWRfYmFy cmllcl9pbXBsKQotIwlkZWZpbmUgcGdfcmVhZF9iYXJyaWVyX2ltcGwgcGdfbWVtb3J5X2JhcnJp ZXJfaW1wbAotI2VuZGlmCi0jaWYgIWRlZmluZWQocGdfd3JpdGVfYmFycmllcl9pbXBsKQotIwlk ZWZpbmUgcGdfd3JpdGVfYmFycmllcl9pbXBsIHBnX21lbW9yeV9iYXJyaWVyX2ltcGwKLSNlbmRp ZgotCi0jaWZuZGVmIFBHX0hBVkVfU1BJTl9ERUxBWQotI2RlZmluZSBQR19IQVZFX1NQSU5fREVM QVkKLSNkZWZpbmUgcGdfc3Bpbl9kZWxheV9pbXBsKCkJKCh2b2lkKTApCi0jZW5kaWYKLQotCi0v KiBwcm92aWRlIGZhbGxiYWNrICovCi0jaWYgIWRlZmluZWQoUEdfSEFWRV9BVE9NSUNfRkxBR19T VVBQT1JUKSAmJiBkZWZpbmVkKFBHX0hBVkVfQVRPTUlDX1UzMl9TVVBQT1JUKQotI2RlZmluZSBQ R19IQVZFX0FUT01JQ19GTEFHX1NVUFBPUlQKLXR5cGVkZWYgcGdfYXRvbWljX3VpbnQzMiBwZ19h dG9taWNfZmxhZzsKLSNlbmRpZgotCi0jaWZuZGVmIFBHX0hBVkVfQVRPTUlDX1JFQURfVTMyCi0j ZGVmaW5lIFBHX0hBVkVfQVRPTUlDX1JFQURfVTMyCi1zdGF0aWMgaW5saW5lIHVpbnQzMgotcGdf YXRvbWljX3JlYWRfdTMyX2ltcGwodm9sYXRpbGUgcGdfYXRvbWljX3VpbnQzMiAqcHRyKQotewot CXJldHVybiBwdHItPnZhbHVlOwotfQotI2VuZGlmCi0KLSNpZm5kZWYgUEdfSEFWRV9BVE9NSUNf V1JJVEVfVTMyCi0jZGVmaW5lIFBHX0hBVkVfQVRPTUlDX1dSSVRFX1UzMgotc3RhdGljIGlubGlu ZSB2b2lkCi1wZ19hdG9taWNfd3JpdGVfdTMyX2ltcGwodm9sYXRpbGUgcGdfYXRvbWljX3VpbnQz MiAqcHRyLCB1aW50MzIgdmFsKQotewotCXB0ci0+dmFsdWUgPSB2YWw7Ci19Ci0jZW5kaWYKLQot I2lmbmRlZiBQR19IQVZFX0FUT01JQ19VTkxPQ0tFRF9XUklURV9VMzIKLSNkZWZpbmUgUEdfSEFW RV9BVE9NSUNfVU5MT0NLRURfV1JJVEVfVTMyCi1zdGF0aWMgaW5saW5lIHZvaWQKLXBnX2F0b21p Y191bmxvY2tlZF93cml0ZV91MzJfaW1wbCh2b2xhdGlsZSBwZ19hdG9taWNfdWludDMyICpwdHIs IHVpbnQzMiB2YWwpCi17Ci0JcHRyLT52YWx1ZSA9IHZhbDsKLX0KLSNlbmRpZgotCi0vKgotICog cHJvdmlkZSBmYWxsYmFjayBmb3IgdGVzdF9hbmRfc2V0IHVzaW5nIGF0b21pY19leGNoYW5nZSBp ZiBhdmFpbGFibGUKLSAqLwotI2lmICFkZWZpbmVkKFBHX0hBVkVfQVRPTUlDX1RFU1RfU0VUX0ZM QUcpICYmIGRlZmluZWQoUEdfSEFWRV9BVE9NSUNfRVhDSEFOR0VfVTMyKQotCi0jZGVmaW5lIFBH X0hBVkVfQVRPTUlDX0lOSVRfRkxBRwotc3RhdGljIGlubGluZSB2b2lkCi1wZ19hdG9taWNfaW5p dF9mbGFnX2ltcGwodm9sYXRpbGUgcGdfYXRvbWljX2ZsYWcgKnB0cikKLXsKLQlwZ19hdG9taWNf d3JpdGVfdTMyX2ltcGwocHRyLCAwKTsKLX0KLQotI2RlZmluZSBQR19IQVZFX0FUT01JQ19URVNU X1NFVF9GTEFHCi1zdGF0aWMgaW5saW5lIGJvb2wKLXBnX2F0b21pY190ZXN0X3NldF9mbGFnX2lt cGwodm9sYXRpbGUgcGdfYXRvbWljX2ZsYWcgKnB0cikKLXsKLQlyZXR1cm4gcGdfYXRvbWljX2V4 Y2hhbmdlX3UzMl9pbXBsKHB0ciwgMSkgPT0gMDsKLX0KLQotI2RlZmluZSBQR19IQVZFX0FUT01J Q19VTkxPQ0tFRF9URVNUX0ZMQUcKLXN0YXRpYyBpbmxpbmUgYm9vbAotcGdfYXRvbWljX3VubG9j a2VkX3Rlc3RfZmxhZ19pbXBsKHZvbGF0aWxlIHBnX2F0b21pY19mbGFnICpwdHIpCi17Ci0JcmV0 dXJuIHBnX2F0b21pY19yZWFkX3UzMl9pbXBsKHB0cikgPT0gMDsKLX0KLQotCi0jZGVmaW5lIFBH X0hBVkVfQVRPTUlDX0NMRUFSX0ZMQUcKLXN0YXRpYyBpbmxpbmUgdm9pZAotcGdfYXRvbWljX2Ns ZWFyX2ZsYWdfaW1wbCh2b2xhdGlsZSBwZ19hdG9taWNfZmxhZyAqcHRyKQotewotCS8qIFhYWDog cmVsZWFzZSBzZW1hbnRpY3Mgc3VmZmljZT8gKi8KLQlwZ19tZW1vcnlfYmFycmllcl9pbXBsKCk7 Ci0JcGdfYXRvbWljX3dyaXRlX3UzMl9pbXBsKHB0ciwgMCk7Ci19Ci0KLS8qCi0gKiBwcm92aWRl IGZhbGxiYWNrIGZvciB0ZXN0X2FuZF9zZXQgdXNpbmcgYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Ug aWYKLSAqIGF2YWlsYWJsZS4KLSAqLwotI2VsaWYgIWRlZmluZWQoUEdfSEFWRV9BVE9NSUNfVEVT VF9TRVRfRkxBRykgJiYgZGVmaW5lZChQR19IQVZFX0FUT01JQ19DT01QQVJFX0VYQ0hBTkdFX1Uz MikKLQotI2RlZmluZSBQR19IQVZFX0FUT01JQ19JTklUX0ZMQUcKLXN0YXRpYyBpbmxpbmUgdm9p ZAotcGdfYXRvbWljX2luaXRfZmxhZ19pbXBsKHZvbGF0aWxlIHBnX2F0b21pY19mbGFnICpwdHIp Ci17Ci0JcGdfYXRvbWljX3dyaXRlX3UzMl9pbXBsKHB0ciwgMCk7Ci19Ci0KLSNkZWZpbmUgUEdf SEFWRV9BVE9NSUNfVEVTVF9TRVRfRkxBRwotc3RhdGljIGlubGluZSBib29sCi1wZ19hdG9taWNf dGVzdF9zZXRfZmxhZ19pbXBsKHZvbGF0aWxlIHBnX2F0b21pY19mbGFnICpwdHIpCi17Ci0JdWlu dDMyIHZhbHVlID0gMDsKLQlyZXR1cm4gcGdfYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2VfdTMyX2lt cGwocHRyLCAmdmFsdWUsIDEpOwotfQotCi0jZGVmaW5lIFBHX0hBVkVfQVRPTUlDX1VOTE9DS0VE X1RFU1RfRkxBRwotc3RhdGljIGlubGluZSBib29sCi1wZ19hdG9taWNfdW5sb2NrZWRfdGVzdF9m bGFnX2ltcGwodm9sYXRpbGUgcGdfYXRvbWljX2ZsYWcgKnB0cikKLXsKLQlyZXR1cm4gcGdfYXRv bWljX3JlYWRfdTMyX2ltcGwocHRyKSA9PSAwOwotfQotCi0jZGVmaW5lIFBHX0hBVkVfQVRPTUlD X0NMRUFSX0ZMQUcKLXN0YXRpYyBpbmxpbmUgdm9pZAotcGdfYXRvbWljX2NsZWFyX2ZsYWdfaW1w bCh2b2xhdGlsZSBwZ19hdG9taWNfZmxhZyAqcHRyKQotewotCS8qIFhYWDogcmVsZWFzZSBzZW1h bnRpY3Mgc3VmZmljZT8gKi8KLQlwZ19tZW1vcnlfYmFycmllcl9pbXBsKCk7Ci0JcGdfYXRvbWlj X3dyaXRlX3UzMl9pbXBsKHB0ciwgMCk7Ci19Ci0KLSNlbGlmICFkZWZpbmVkKFBHX0hBVkVfQVRP TUlDX1RFU1RfU0VUX0ZMQUcpCi0jCWVycm9yICJObyBwZ19hdG9taWNfdGVzdF9hbmRfc2V0IHBy b3ZpZGVkIgotI2VuZGlmIC8qICFkZWZpbmVkKFBHX0hBVkVfQVRPTUlDX1RFU1RfU0VUX0ZMQUcp ICovCi0KLQotI2lmbmRlZiBQR19IQVZFX0FUT01JQ19JTklUX1UzMgotI2RlZmluZSBQR19IQVZF X0FUT01JQ19JTklUX1UzMgotc3RhdGljIGlubGluZSB2b2lkCi1wZ19hdG9taWNfaW5pdF91MzJf aW1wbCh2b2xhdGlsZSBwZ19hdG9taWNfdWludDMyICpwdHIsIHVpbnQzMiB2YWxfKQotewotCXB0 ci0+dmFsdWUgPSB2YWxfOwotfQotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChQR19IQVZFX0FUT01J Q19FWENIQU5HRV9VMzIpICYmIGRlZmluZWQoUEdfSEFWRV9BVE9NSUNfQ09NUEFSRV9FWENIQU5H RV9VMzIpCi0jZGVmaW5lIFBHX0hBVkVfQVRPTUlDX0VYQ0hBTkdFX1UzMgotc3RhdGljIGlubGlu ZSB1aW50MzIKLXBnX2F0b21pY19leGNoYW5nZV91MzJfaW1wbCh2b2xhdGlsZSBwZ19hdG9taWNf dWludDMyICpwdHIsIHVpbnQzMiB4Y2hnXykKLXsKLQl1aW50MzIgb2xkOwotCW9sZCA9IHB0ci0+ dmFsdWU7CQkJLyogb2sgaWYgcmVhZCBpcyBub3QgYXRvbWljICovCi0Jd2hpbGUgKCFwZ19hdG9t aWNfY29tcGFyZV9leGNoYW5nZV91MzJfaW1wbChwdHIsICZvbGQsIHhjaGdfKSkKLQkJLyogc2tp cCAqLzsKLQlyZXR1cm4gb2xkOwotfQotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChQR19IQVZFX0FU T01JQ19GRVRDSF9BRERfVTMyKSAmJiBkZWZpbmVkKFBHX0hBVkVfQVRPTUlDX0NPTVBBUkVfRVhD SEFOR0VfVTMyKQotI2RlZmluZSBQR19IQVZFX0FUT01JQ19GRVRDSF9BRERfVTMyCi1zdGF0aWMg aW5saW5lIHVpbnQzMgotcGdfYXRvbWljX2ZldGNoX2FkZF91MzJfaW1wbCh2b2xhdGlsZSBwZ19h dG9taWNfdWludDMyICpwdHIsIGludDMyIGFkZF8pCi17Ci0JdWludDMyIG9sZDsKLQlvbGQgPSBw dHItPnZhbHVlOwkJCS8qIG9rIGlmIHJlYWQgaXMgbm90IGF0b21pYyAqLwotCXdoaWxlICghcGdf YXRvbWljX2NvbXBhcmVfZXhjaGFuZ2VfdTMyX2ltcGwocHRyLCAmb2xkLCBvbGQgKyBhZGRfKSkK LQkJLyogc2tpcCAqLzsKLQlyZXR1cm4gb2xkOwotfQotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChQ R19IQVZFX0FUT01JQ19GRVRDSF9TVUJfVTMyKSAmJiBkZWZpbmVkKFBHX0hBVkVfQVRPTUlDX0NP TVBBUkVfRVhDSEFOR0VfVTMyKQotI2RlZmluZSBQR19IQVZFX0FUT01JQ19GRVRDSF9TVUJfVTMy Ci1zdGF0aWMgaW5saW5lIHVpbnQzMgotcGdfYXRvbWljX2ZldGNoX3N1Yl91MzJfaW1wbCh2b2xh dGlsZSBwZ19hdG9taWNfdWludDMyICpwdHIsIGludDMyIHN1Yl8pCi17Ci0JcmV0dXJuIHBnX2F0 b21pY19mZXRjaF9hZGRfdTMyX2ltcGwocHRyLCAtc3ViXyk7Ci19Ci0jZW5kaWYKLQotI2lmICFk ZWZpbmVkKFBHX0hBVkVfQVRPTUlDX0ZFVENIX0FORF9VMzIpICYmIGRlZmluZWQoUEdfSEFWRV9B VE9NSUNfQ09NUEFSRV9FWENIQU5HRV9VMzIpCi0jZGVmaW5lIFBHX0hBVkVfQVRPTUlDX0ZFVENI X0FORF9VMzIKLXN0YXRpYyBpbmxpbmUgdWludDMyCi1wZ19hdG9taWNfZmV0Y2hfYW5kX3UzMl9p bXBsKHZvbGF0aWxlIHBnX2F0b21pY191aW50MzIgKnB0ciwgdWludDMyIGFuZF8pCi17Ci0JdWlu dDMyIG9sZDsKLQlvbGQgPSBwdHItPnZhbHVlOwkJCS8qIG9rIGlmIHJlYWQgaXMgbm90IGF0b21p YyAqLwotCXdoaWxlICghcGdfYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2VfdTMyX2ltcGwocHRyLCAm b2xkLCBvbGQgJiBhbmRfKSkKLQkJLyogc2tpcCAqLzsKLQlyZXR1cm4gb2xkOwotfQotI2VuZGlm Ci0KLSNpZiAhZGVmaW5lZChQR19IQVZFX0FUT01JQ19GRVRDSF9PUl9VMzIpICYmIGRlZmluZWQo UEdfSEFWRV9BVE9NSUNfQ09NUEFSRV9FWENIQU5HRV9VMzIpCi0jZGVmaW5lIFBHX0hBVkVfQVRP TUlDX0ZFVENIX09SX1UzMgotc3RhdGljIGlubGluZSB1aW50MzIKLXBnX2F0b21pY19mZXRjaF9v cl91MzJfaW1wbCh2b2xhdGlsZSBwZ19hdG9taWNfdWludDMyICpwdHIsIHVpbnQzMiBvcl8pCi17 Ci0JdWludDMyIG9sZDsKLQlvbGQgPSBwdHItPnZhbHVlOwkJCS8qIG9rIGlmIHJlYWQgaXMgbm90 IGF0b21pYyAqLwotCXdoaWxlICghcGdfYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2VfdTMyX2ltcGwo cHRyLCAmb2xkLCBvbGQgfCBvcl8pKQotCQkvKiBza2lwICovOwotCXJldHVybiBvbGQ7Ci19Ci0j ZW5kaWYKLQotI2lmICFkZWZpbmVkKFBHX0hBVkVfQVRPTUlDX0FERF9GRVRDSF9VMzIpICYmIGRl ZmluZWQoUEdfSEFWRV9BVE9NSUNfRkVUQ0hfQUREX1UzMikKLSNkZWZpbmUgUEdfSEFWRV9BVE9N SUNfQUREX0ZFVENIX1UzMgotc3RhdGljIGlubGluZSB1aW50MzIKLXBnX2F0b21pY19hZGRfZmV0 Y2hfdTMyX2ltcGwodm9sYXRpbGUgcGdfYXRvbWljX3VpbnQzMiAqcHRyLCBpbnQzMiBhZGRfKQot ewotCXJldHVybiBwZ19hdG9taWNfZmV0Y2hfYWRkX3UzMl9pbXBsKHB0ciwgYWRkXykgKyBhZGRf OwotfQotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChQR19IQVZFX0FUT01JQ19TVUJfRkVUQ0hfVTMy KSAmJiBkZWZpbmVkKFBHX0hBVkVfQVRPTUlDX0ZFVENIX1NVQl9VMzIpCi0jZGVmaW5lIFBHX0hB VkVfQVRPTUlDX1NVQl9GRVRDSF9VMzIKLXN0YXRpYyBpbmxpbmUgdWludDMyCi1wZ19hdG9taWNf c3ViX2ZldGNoX3UzMl9pbXBsKHZvbGF0aWxlIHBnX2F0b21pY191aW50MzIgKnB0ciwgaW50MzIg c3ViXykKLXsKLQlyZXR1cm4gcGdfYXRvbWljX2ZldGNoX3N1Yl91MzJfaW1wbChwdHIsIHN1Yl8p IC0gc3ViXzsKLX0KLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoUEdfSEFWRV9BVE9NSUNfUkVBRF9N RU1CQVJSSUVSX1UzMikgJiYgZGVmaW5lZChQR19IQVZFX0FUT01JQ19GRVRDSF9BRERfVTMyKQot I2RlZmluZSBQR19IQVZFX0FUT01JQ19SRUFEX01FTUJBUlJJRVJfVTMyCi1zdGF0aWMgaW5saW5l IHVpbnQzMgotcGdfYXRvbWljX3JlYWRfbWVtYmFycmllcl91MzJfaW1wbCh2b2xhdGlsZSBwZ19h dG9taWNfdWludDMyICpwdHIpCi17Ci0JcmV0dXJuIHBnX2F0b21pY19mZXRjaF9hZGRfdTMyX2lt cGwocHRyLCAwKTsKLX0KLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoUEdfSEFWRV9BVE9NSUNfV1JJ VEVfTUVNQkFSUklFUl9VMzIpICYmIGRlZmluZWQoUEdfSEFWRV9BVE9NSUNfRVhDSEFOR0VfVTMy KQotI2RlZmluZSBQR19IQVZFX0FUT01JQ19XUklURV9NRU1CQVJSSUVSX1UzMgotc3RhdGljIGlu bGluZSB2b2lkCi1wZ19hdG9taWNfd3JpdGVfbWVtYmFycmllcl91MzJfaW1wbCh2b2xhdGlsZSBw Z19hdG9taWNfdWludDMyICpwdHIsIHVpbnQzMiB2YWwpCi17Ci0JKHZvaWQpIHBnX2F0b21pY19l eGNoYW5nZV91MzJfaW1wbChwdHIsIHZhbCk7Ci19Ci0jZW5kaWYKLQotI2lmICFkZWZpbmVkKFBH X0hBVkVfQVRPTUlDX0VYQ0hBTkdFX1U2NCkgJiYgZGVmaW5lZChQR19IQVZFX0FUT01JQ19DT01Q QVJFX0VYQ0hBTkdFX1U2NCkKLSNkZWZpbmUgUEdfSEFWRV9BVE9NSUNfRVhDSEFOR0VfVTY0Ci1z dGF0aWMgaW5saW5lIHVpbnQ2NAotcGdfYXRvbWljX2V4Y2hhbmdlX3U2NF9pbXBsKHZvbGF0aWxl IHBnX2F0b21pY191aW50NjQgKnB0ciwgdWludDY0IHhjaGdfKQotewotCXVpbnQ2NCBvbGQ7Ci0J b2xkID0gcHRyLT52YWx1ZTsJCQkvKiBvayBpZiByZWFkIGlzIG5vdCBhdG9taWMgKi8KLQl3aGls ZSAoIXBnX2F0b21pY19jb21wYXJlX2V4Y2hhbmdlX3U2NF9pbXBsKHB0ciwgJm9sZCwgeGNoZ18p KQotCQkvKiBza2lwICovOwotCXJldHVybiBvbGQ7Ci19Ci0jZW5kaWYKLQotI2lmbmRlZiBQR19I QVZFX0FUT01JQ19XUklURV9VNjQKLSNkZWZpbmUgUEdfSEFWRV9BVE9NSUNfV1JJVEVfVTY0Ci0K LSNpZiBkZWZpbmVkKFBHX0hBVkVfOEJZVEVfU0lOR0xFX0NPUFlfQVRPTUlDSVRZKSAmJiBcCi0J IWRlZmluZWQoUEdfSEFWRV9BVE9NSUNfVTY0X1NJTVVMQVRJT04pCi0KLXN0YXRpYyBpbmxpbmUg dm9pZAotcGdfYXRvbWljX3dyaXRlX3U2NF9pbXBsKHZvbGF0aWxlIHBnX2F0b21pY191aW50NjQg KnB0ciwgdWludDY0IHZhbCkKLXsKLQkvKgotCSAqIE9uIHRoaXMgcGxhdGZvcm0gYWxpZ25lZCA2 NGJpdCB3cml0ZXMgYXJlIGd1YXJhbnRlZWQgdG8gYmUgYXRvbWljLAotCSAqIGV4Y2VwdCBpZiB1 c2luZyB0aGUgZmFsbGJhY2sgaW1wbGVtZW50YXRpb24sIHdoZXJlIGNhbid0IGd1YXJhbnRlZSB0 aGUKLQkgKiByZXF1aXJlZCBhbGlnbm1lbnQuCi0JICovCi0JQXNzZXJ0UG9pbnRlckFsaWdubWVu dChwdHIsIDgpOwotCXB0ci0+dmFsdWUgPSB2YWw7Ci19Ci0KLSNlbHNlCi0KLXN0YXRpYyBpbmxp bmUgdm9pZAotcGdfYXRvbWljX3dyaXRlX3U2NF9pbXBsKHZvbGF0aWxlIHBnX2F0b21pY191aW50 NjQgKnB0ciwgdWludDY0IHZhbCkKLXsKLQkvKgotCSAqIDY0IGJpdCB3cml0ZXMgYXJlbid0IHNh ZmUgb24gYWxsIHBsYXRmb3Jtcy4gSW4gdGhlIGdlbmVyaWMKLQkgKiBpbXBsZW1lbnRhdGlvbiBp bXBsZW1lbnQgdGhlbSBhcyBhbiBhdG9taWMgZXhjaGFuZ2UuCi0JICovCi0JcGdfYXRvbWljX2V4 Y2hhbmdlX3U2NF9pbXBsKHB0ciwgdmFsKTsKLX0KLQotI2VuZGlmIC8qIFBHX0hBVkVfOEJZVEVf U0lOR0xFX0NPUFlfQVRPTUlDSVRZICYmICFQR19IQVZFX0FUT01JQ19VNjRfU0lNVUxBVElPTiAq LwotI2VuZGlmIC8qIFBHX0hBVkVfQVRPTUlDX1dSSVRFX1U2NCAqLwotCi0jaWZuZGVmIFBHX0hB VkVfQVRPTUlDX1JFQURfVTY0Ci0jZGVmaW5lIFBHX0hBVkVfQVRPTUlDX1JFQURfVTY0Ci0KLSNp ZiBkZWZpbmVkKFBHX0hBVkVfOEJZVEVfU0lOR0xFX0NPUFlfQVRPTUlDSVRZKSAmJiBcCi0JIWRl ZmluZWQoUEdfSEFWRV9BVE9NSUNfVTY0X1NJTVVMQVRJT04pCi0KLXN0YXRpYyBpbmxpbmUgdWlu dDY0Ci1wZ19hdG9taWNfcmVhZF91NjRfaW1wbCh2b2xhdGlsZSBwZ19hdG9taWNfdWludDY0ICpw dHIpCi17Ci0JLyoKLQkgKiBPbiB0aGlzIHBsYXRmb3JtIGFsaWduZWQgNjQtYml0IHJlYWRzIGFy ZSBndWFyYW50ZWVkIHRvIGJlIGF0b21pYy4KLQkgKi8KLQlBc3NlcnRQb2ludGVyQWxpZ25tZW50 KHB0ciwgOCk7Ci0JcmV0dXJuIHB0ci0+dmFsdWU7Ci19Ci0KLSNlbHNlCi0KLXN0YXRpYyBpbmxp bmUgdWludDY0Ci1wZ19hdG9taWNfcmVhZF91NjRfaW1wbCh2b2xhdGlsZSBwZ19hdG9taWNfdWlu dDY0ICpwdHIpCi17Ci0JdWludDY0IG9sZCA9IDA7Ci0KLQkvKgotCSAqIDY0LWJpdCByZWFkcyBh cmVuJ3QgYXRvbWljIG9uIGFsbCBwbGF0Zm9ybXMuIEluIHRoZSBnZW5lcmljCi0JICogaW1wbGVt ZW50YXRpb24gaW1wbGVtZW50IHRoZW0gYXMgYSBjb21wYXJlL2V4Y2hhbmdlIHdpdGggMC4gVGhh dCdsbAotCSAqIGZhaWwgb3Igc3VjY2VlZCwgYnV0IGFsd2F5cyByZXR1cm4gdGhlIG9sZCB2YWx1 ZS4gUG9zc2libHkgbWlnaHQgc3RvcmUKLQkgKiBhIDAsIGJ1dCBvbmx5IGlmIHRoZSBwcmV2aW91 cyB2YWx1ZSBhbHNvIHdhcyBhIDAgLSBpLmUuIGhhcm1sZXNzLgotCSAqLwotCXBnX2F0b21pY19j b21wYXJlX2V4Y2hhbmdlX3U2NF9pbXBsKHB0ciwgJm9sZCwgMCk7Ci0KLQlyZXR1cm4gb2xkOwot fQotI2VuZGlmIC8qIFBHX0hBVkVfOEJZVEVfU0lOR0xFX0NPUFlfQVRPTUlDSVRZICYmICFQR19I QVZFX0FUT01JQ19VNjRfU0lNVUxBVElPTiAqLwotI2VuZGlmIC8qIFBHX0hBVkVfQVRPTUlDX1JF QURfVTY0ICovCi0KLSNpZm5kZWYgUEdfSEFWRV9BVE9NSUNfSU5JVF9VNjQKLSNkZWZpbmUgUEdf SEFWRV9BVE9NSUNfSU5JVF9VNjQKLXN0YXRpYyBpbmxpbmUgdm9pZAotcGdfYXRvbWljX2luaXRf dTY0X2ltcGwodm9sYXRpbGUgcGdfYXRvbWljX3VpbnQ2NCAqcHRyLCB1aW50NjQgdmFsXykKLXsK LQlwdHItPnZhbHVlID0gdmFsXzsKLX0KLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoUEdfSEFWRV9B VE9NSUNfRkVUQ0hfQUREX1U2NCkgJiYgZGVmaW5lZChQR19IQVZFX0FUT01JQ19DT01QQVJFX0VY Q0hBTkdFX1U2NCkKLSNkZWZpbmUgUEdfSEFWRV9BVE9NSUNfRkVUQ0hfQUREX1U2NAotc3RhdGlj IGlubGluZSB1aW50NjQKLXBnX2F0b21pY19mZXRjaF9hZGRfdTY0X2ltcGwodm9sYXRpbGUgcGdf YXRvbWljX3VpbnQ2NCAqcHRyLCBpbnQ2NCBhZGRfKQotewotCXVpbnQ2NCBvbGQ7Ci0Jb2xkID0g cHRyLT52YWx1ZTsJCQkvKiBvayBpZiByZWFkIGlzIG5vdCBhdG9taWMgKi8KLQl3aGlsZSAoIXBn X2F0b21pY19jb21wYXJlX2V4Y2hhbmdlX3U2NF9pbXBsKHB0ciwgJm9sZCwgb2xkICsgYWRkXykp Ci0JCS8qIHNraXAgKi87Ci0JcmV0dXJuIG9sZDsKLX0KLSNlbmRpZgotCi0jaWYgIWRlZmluZWQo UEdfSEFWRV9BVE9NSUNfRkVUQ0hfU1VCX1U2NCkgJiYgZGVmaW5lZChQR19IQVZFX0FUT01JQ19D T01QQVJFX0VYQ0hBTkdFX1U2NCkKLSNkZWZpbmUgUEdfSEFWRV9BVE9NSUNfRkVUQ0hfU1VCX1U2 NAotc3RhdGljIGlubGluZSB1aW50NjQKLXBnX2F0b21pY19mZXRjaF9zdWJfdTY0X2ltcGwodm9s YXRpbGUgcGdfYXRvbWljX3VpbnQ2NCAqcHRyLCBpbnQ2NCBzdWJfKQotewotCXJldHVybiBwZ19h dG9taWNfZmV0Y2hfYWRkX3U2NF9pbXBsKHB0ciwgLXN1Yl8pOwotfQotI2VuZGlmCi0KLSNpZiAh ZGVmaW5lZChQR19IQVZFX0FUT01JQ19GRVRDSF9BTkRfVTY0KSAmJiBkZWZpbmVkKFBHX0hBVkVf QVRPTUlDX0NPTVBBUkVfRVhDSEFOR0VfVTY0KQotI2RlZmluZSBQR19IQVZFX0FUT01JQ19GRVRD SF9BTkRfVTY0Ci1zdGF0aWMgaW5saW5lIHVpbnQ2NAotcGdfYXRvbWljX2ZldGNoX2FuZF91NjRf aW1wbCh2b2xhdGlsZSBwZ19hdG9taWNfdWludDY0ICpwdHIsIHVpbnQ2NCBhbmRfKQotewotCXVp bnQ2NCBvbGQ7Ci0Jb2xkID0gcHRyLT52YWx1ZTsJCQkvKiBvayBpZiByZWFkIGlzIG5vdCBhdG9t aWMgKi8KLQl3aGlsZSAoIXBnX2F0b21pY19jb21wYXJlX2V4Y2hhbmdlX3U2NF9pbXBsKHB0ciwg Jm9sZCwgb2xkICYgYW5kXykpCi0JCS8qIHNraXAgKi87Ci0JcmV0dXJuIG9sZDsKLX0KLSNlbmRp ZgotCi0jaWYgIWRlZmluZWQoUEdfSEFWRV9BVE9NSUNfRkVUQ0hfT1JfVTY0KSAmJiBkZWZpbmVk KFBHX0hBVkVfQVRPTUlDX0NPTVBBUkVfRVhDSEFOR0VfVTY0KQotI2RlZmluZSBQR19IQVZFX0FU T01JQ19GRVRDSF9PUl9VNjQKLXN0YXRpYyBpbmxpbmUgdWludDY0Ci1wZ19hdG9taWNfZmV0Y2hf b3JfdTY0X2ltcGwodm9sYXRpbGUgcGdfYXRvbWljX3VpbnQ2NCAqcHRyLCB1aW50NjQgb3JfKQot ewotCXVpbnQ2NCBvbGQ7Ci0Jb2xkID0gcHRyLT52YWx1ZTsJCQkvKiBvayBpZiByZWFkIGlzIG5v dCBhdG9taWMgKi8KLQl3aGlsZSAoIXBnX2F0b21pY19jb21wYXJlX2V4Y2hhbmdlX3U2NF9pbXBs KHB0ciwgJm9sZCwgb2xkIHwgb3JfKSkKLQkJLyogc2tpcCAqLzsKLQlyZXR1cm4gb2xkOwotfQot I2VuZGlmCi0KLSNpZiAhZGVmaW5lZChQR19IQVZFX0FUT01JQ19BRERfRkVUQ0hfVTY0KSAmJiBk ZWZpbmVkKFBHX0hBVkVfQVRPTUlDX0ZFVENIX0FERF9VNjQpCi0jZGVmaW5lIFBHX0hBVkVfQVRP TUlDX0FERF9GRVRDSF9VNjQKLXN0YXRpYyBpbmxpbmUgdWludDY0Ci1wZ19hdG9taWNfYWRkX2Zl dGNoX3U2NF9pbXBsKHZvbGF0aWxlIHBnX2F0b21pY191aW50NjQgKnB0ciwgaW50NjQgYWRkXykK LXsKLQlyZXR1cm4gcGdfYXRvbWljX2ZldGNoX2FkZF91NjRfaW1wbChwdHIsIGFkZF8pICsgYWRk XzsKLX0KLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoUEdfSEFWRV9BVE9NSUNfU1VCX0ZFVENIX1U2 NCkgJiYgZGVmaW5lZChQR19IQVZFX0FUT01JQ19GRVRDSF9TVUJfVTY0KQotI2RlZmluZSBQR19I QVZFX0FUT01JQ19TVUJfRkVUQ0hfVTY0Ci1zdGF0aWMgaW5saW5lIHVpbnQ2NAotcGdfYXRvbWlj X3N1Yl9mZXRjaF91NjRfaW1wbCh2b2xhdGlsZSBwZ19hdG9taWNfdWludDY0ICpwdHIsIGludDY0 IHN1Yl8pCi17Ci0JcmV0dXJuIHBnX2F0b21pY19mZXRjaF9zdWJfdTY0X2ltcGwocHRyLCBzdWJf KSAtIHN1Yl87Ci19Ci0jZW5kaWYKLQotI2lmICFkZWZpbmVkKFBHX0hBVkVfQVRPTUlDX1JFQURf TUVNQkFSUklFUl9VNjQpICYmIGRlZmluZWQoUEdfSEFWRV9BVE9NSUNfRkVUQ0hfQUREX1U2NCkK LSNkZWZpbmUgUEdfSEFWRV9BVE9NSUNfUkVBRF9NRU1CQVJSSUVSX1U2NAotc3RhdGljIGlubGlu ZSB1aW50NjQKLXBnX2F0b21pY19yZWFkX21lbWJhcnJpZXJfdTY0X2ltcGwodm9sYXRpbGUgcGdf YXRvbWljX3VpbnQ2NCAqcHRyKQotewotCXJldHVybiBwZ19hdG9taWNfZmV0Y2hfYWRkX3U2NF9p bXBsKHB0ciwgMCk7Ci19Ci0jZW5kaWYKLQotI2lmICFkZWZpbmVkKFBHX0hBVkVfQVRPTUlDX1dS SVRFX01FTUJBUlJJRVJfVTY0KSAmJiBkZWZpbmVkKFBHX0hBVkVfQVRPTUlDX0VYQ0hBTkdFX1U2 NCkKLSNkZWZpbmUgUEdfSEFWRV9BVE9NSUNfV1JJVEVfTUVNQkFSUklFUl9VNjQKLXN0YXRpYyBp bmxpbmUgdm9pZAotcGdfYXRvbWljX3dyaXRlX21lbWJhcnJpZXJfdTY0X2ltcGwodm9sYXRpbGUg cGdfYXRvbWljX3VpbnQ2NCAqcHRyLCB1aW50NjQgdmFsKQotewotCSh2b2lkKSBwZ19hdG9taWNf ZXhjaGFuZ2VfdTY0X2ltcGwocHRyLCB2YWwpOwotfQotI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMv dG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVm cy5saXN0CmluZGV4IDIzYmNlNzJhZTY0Li4zYjJjMTA5ZTY3YiAxMDA2NDQKLS0tIGEvc3JjL3Rv b2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVk ZWZzLmxpc3QKQEAgLTM4NjIsNiArMzg2Miw4IEBAIHBlbmRpbmdfbGFiZWwKIHBnUGFyYW1ldGVy U3RhdHVzCiBwZ29mZl90CiBwZ19hdG9taWNfZmxhZworcGdfYXRvbWljX3VpbnQ4CitwZ19hdG9t aWNfdWludDE2CiBwZ19hdG9taWNfdWludDMyCiBwZ19hdG9taWNfdWludDY0CiBwZ19iZV9zYXNs X21lY2gKLS0gCjIuNTAuMSAoQXBwbGUgR2l0LTE1NSkKCg== --0000000000009b22960643784acd Content-Type: application/octet-stream; name="v2-0004-Use-atomics-API-to-implement-spinlocks.patch" Content-Disposition: attachment; filename="v2-0004-Use-atomics-API-to-implement-spinlocks.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mhxbvkih3 RnJvbSA0NzI3OTk5Yzc5OTMyZTcyODU4MmNjYmZlMTNlOWM1YWUwNjIwZmZlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUaG9tYXMgTXVucm8gPHRob21hcy5tdW5yb0BnbWFpbC5jb20+ CkRhdGU6IFdlZCwgMzEgSnVsIDIwMjQgMTM6MTE6MzUgKzEyMDAKU3ViamVjdDogW1BBVENIIHYy IDQvNV0gVXNlIGF0b21pY3MgQVBJIHRvIGltcGxlbWVudCBzcGlubG9ja3MuCgpTaW5jZSBvdXIg c3BpbmxvY2sgQVBJIHByZS1kYXRlcyBvdXIgQzExLWluc3BpcmVkIGF0b21pY3MgQVBJIGJ5CmRl Y2FkZXMsIGl0IGhhZCBpdHMgb3duIGhhbmQtY3JhZnRlZCBvcGVyYXRpb25zIHdyaXR0ZW4gaW4g YXNzZW1ibGVyLgoKVXNlIHRoZSBtb2Rlcm4gYXRvbWljcyBBUEkgaW5zdGVhZCwgdG8gc2ltcGxp ZnkgYW5kIGRlLWR1cGxpY2F0ZS4gIFdlCmNvdWxkbid0IGhhdmUgZG9uZSB0aGlzIHVudGlsIGZh aXJseSByZWNlbnRseSwgYmVjYXVzZSB0aGF0IHdvdWxkIGhhdmUKYmVlbiBiZSBjaXJjdWxhcjog YXRvbWljcyB3ZXJlIHNpbXVsYXRlZCB3aXRoIHNwaW5sb2NrcyBpbgotLWRpc2FibGUtYXRvbWlj cyBidWlsZHMuICBDb21taXQgODEzODUyNjEgcmVtb3ZlZCB0aGF0IG9wdGlvbiwgc28gbm93Cndl IGNhbiBkZWxldGUgbW9zdCBvZiB0aGUgc3lzdGVtLXNwZWNpZmljIHNwaW5sb2NrIGNvZGUgYW5k IHVzZQpwZ19hdG9taWNfZmxhZy4KClRoZSByZW1haW5pbmcgYXJjaGl0ZWN0dXJlLXNwZWNpZmlj IGtub3dsZWRnZSBpcyBtb3ZlZCBpbnRvCnNyYy9pbmNsdWRlL3BvcnQvc3Bpbl9kZWxheS5oOgoK KiBpbXBsZW1lbnRhdGlvbiBvZiBwZ19zcGluX2RlbGF5KCkKKiB3aGV0aGVyIGl0IGlzIGJlbGll dmVkIHRvIGJlIGEgZ29vZCBpZGVhIHRvIHBlcmZvcm0gYSByZWxheGVkIGxvYWQKICBiZWZvcmUg YXR0ZW1wdGluZyB0ZXN0LWFuZC1zZXQgd2hpbGUgc3Bpbm5pbmcgKGNhcnJpZWQgZm9yd2FyZCBm cm9tCiAgdGhlIG9sZCBoYW5kLWNyYWZ0ZWQgY29kZSkKCldJUCEKLS0tCiBzcmMvYmFja2VuZC9w b3J0L21lc29uLmJ1aWxkICAgICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL3BvcnQvdGFzL2R1bW15 LnMgICAgICB8ICAgMAogc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3NfbG9jay5jIHwgMTI4ICst LS0tLQogc3JjL2luY2x1ZGUvcG9ydC9zcGluX2RlbGF5LmggICAgIHwgIDkxICsrKysKIHNyYy9p bmNsdWRlL3N0b3JhZ2Uvc19sb2NrLmggICAgICB8IDczNyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KIHNyYy9pbmNsdWRlL3N0b3JhZ2Uvc3Bpbi5oICAgICAgICB8ICA3MCArKy0KIHNy Yy90ZXN0L3JlZ3Jlc3MvcmVncmVzcy5jICAgICAgICB8ICAyNSArLQogNyBmaWxlcyBjaGFuZ2Vk LCAxNzYgaW5zZXJ0aW9ucygrKSwgODc3IGRlbGV0aW9ucygtKQogZGVsZXRlIG1vZGUgMTAwNjQ0 IHNyYy9iYWNrZW5kL3BvcnQvdGFzL2R1bW15LnMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvaW5j bHVkZS9wb3J0L3NwaW5fZGVsYXkuaAogZGVsZXRlIG1vZGUgMTAwNjQ0IHNyYy9pbmNsdWRlL3N0 b3JhZ2Uvc19sb2NrLmgKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wb3J0L21lc29uLmJ1aWxk IGIvc3JjL2JhY2tlbmQvcG9ydC9tZXNvbi5idWlsZAppbmRleCAwOWQ1NGUwMWQxMy4uNDU0Mzhm Y2VjMTcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3BvcnQvbWVzb24uYnVpbGQKKysrIGIvc3Jj L2JhY2tlbmQvcG9ydC9tZXNvbi5idWlsZApAQCAtMzAsNCArMzAsNCBAQCBpZiBob3N0X3N5c3Rl bSA9PSAnd2luZG93cycKIGVuZGlmCiAKICMgYXV0b2NvbmYgZ2VuZXJhdGVzIHRoZSBmaWxlIHRo ZXJlLCBlbnN1cmUgd2UgZ2V0IGEgY29uZmxpY3QKLWdlbmVyYXRlZF9zb3VyY2VzX2FjICs9IHsn c3JjL2JhY2tlbmQvcG9ydCc6IFsncGdfc2VtYS5jJywgJ3BnX3NobWVtLmMnLCAndGFzLnMnXX0K K2dlbmVyYXRlZF9zb3VyY2VzX2FjICs9IHsnc3JjL2JhY2tlbmQvcG9ydCc6IFsncGdfc2VtYS5j JywgJ3BnX3NobWVtLmMnXX0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3BvcnQvdGFzL2R1bW15 LnMgYi9zcmMvYmFja2VuZC9wb3J0L3Rhcy9kdW1teS5zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCBlNjlkZTI5YmIyZC4uMDAwMDAwMDAwMDAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L3N0b3JhZ2UvbG1nci9zX2xvY2suYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9zX2xvY2su YwppbmRleCBkMjZlMTkyZjRiYy4uYTJmYzEyOWM2ODggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L3N0b3JhZ2UvbG1nci9zX2xvY2suYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3Ivc19s b2NrLmMKQEAgLTUxLDcgKzUxLDkgQEAKICNpbmNsdWRlIDx1bmlzdGQuaD4KIAogI2luY2x1ZGUg ImNvbW1vbi9wZ19wcm5nLmgiCi0jaW5jbHVkZSAic3RvcmFnZS9zX2xvY2suaCIKKyNpbmNsdWRl ICJwb3J0L2F0b21pY3MuaCIKKyNpbmNsdWRlICJwb3J0L3NwaW5fZGVsYXkuaCIKKyNpbmNsdWRl ICJzdG9yYWdlL3NwaW4uaCIKICNpbmNsdWRlICJ1dGlscy93YWl0X2V2ZW50LmgiCiAKICNkZWZp bmUgTUlOX1NQSU5TX1BFUl9ERUxBWSAxMApAQCAtOTIsNyArOTQsNyBAQCBzX2xvY2tfc3R1Y2so Y29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKmZ1bmMpCiB9CiAKIC8qCi0g KiBzX2xvY2sobG9jaykgLSBwbGF0Zm9ybS1pbmRlcGVuZGVudCBwb3J0aW9uIG9mIHdhaXRpbmcg Zm9yIGEgc3BpbmxvY2suCisgKiBzX2xvY2sobG9jaykgLSBvdXQtb2YtbGluZSBwb3J0aW9uIG9m IHdhaXRpbmcgZm9yIGEgc3BpbmxvY2suCiAgKi8KIGludAogc19sb2NrKHZvbGF0aWxlIHNsb2Nr X3QgKmxvY2ssIGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyICpmdW5jKQpA QCAtMTAxLDggKzEwMywyNSBAQCBzX2xvY2sodm9sYXRpbGUgc2xvY2tfdCAqbG9jaywgY29uc3Qg Y2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKmZ1bmMpCiAKIAlpbml0X3NwaW5fZGVs YXkoJmRlbGF5U3RhdHVzLCBmaWxlLCBsaW5lLCBmdW5jKTsKIAotCXdoaWxlIChUQVNfU1BJTihs b2NrKSkKKwlmb3IgKDs7KQogCXsKKwkJYm9vbAkJdHJ5X3RvX3NldDsKKworI2lmZGVmIFBHX1NQ SU5fVFJZX1JFTEFYRUQKKworCQkvKgorCQkgKiBJdCBpcyBrbm93biB0byBiZSBtb3JlIGVmZmlj aWVudCB0byB0ZXN0IHRoZSBsb2NrIHdpdGggYSByZWxheGVkCisJCSAqIGxvYWQgZmlyc3QsIHdo aWxlIHNwaW5uaW5nLCBvbiB0aGlzIHBsYXRmb3JtLgorCQkgKi8KKwkJdHJ5X3RvX3NldCA9IHBn X2F0b21pY191bmxvY2tlZF90ZXN0X2ZsYWcobG9jayk7CisjZWxzZQorCQl0cnlfdG9fc2V0ID0g dHJ1ZTsKKyNlbmRpZgorCisJCS8qIFRyeSB0byBnZXQgdGhlIGxvY2suICovCisJCWlmICh0cnlf dG9fc2V0ICYmIHBnX2F0b21pY190ZXN0X3NldF9mbGFnKGxvY2spKQorCQkJYnJlYWs7CisKIAkJ cGVyZm9ybV9zcGluX2RlbGF5KCZkZWxheVN0YXR1cyk7CiAJfQogCkBAIC0xMTEsMTQgKzEzMCw2 IEBAIHNfbG9jayh2b2xhdGlsZSBzbG9ja190ICpsb2NrLCBjb25zdCBjaGFyICpmaWxlLCBpbnQg bGluZSwgY29uc3QgY2hhciAqZnVuYykKIAlyZXR1cm4gZGVsYXlTdGF0dXMuZGVsYXlzOwogfQog Ci0jaWZkZWYgVVNFX0RFRkFVTFRfU19VTkxPQ0sKLXZvaWQKLXNfdW5sb2NrKHZvbGF0aWxlIHNs b2NrX3QgKmxvY2spCi17Ci0JKmxvY2sgPSAwOwotfQotI2VuZGlmCi0KIC8qCiAgKiBXYWl0IHdo aWxlIHNwaW5uaW5nIG9uIGEgY29udGVuZGVkIHNwaW5sb2NrLgogICovCkBAIC0xMjYsNyArMTM3 LDcgQEAgdm9pZAogcGVyZm9ybV9zcGluX2RlbGF5KFNwaW5EZWxheVN0YXR1cyAqc3RhdHVzKQog ewogCS8qIENQVS1zcGVjaWZpYyBkZWxheSBlYWNoIHRpbWUgdGhyb3VnaCB0aGUgbG9vcCAqLwot CVNQSU5fREVMQVkoKTsKKwlwZ19zcGluX2RlbGF5KCk7CiAKIAkvKiBCbG9jayB0aGUgcHJvY2Vz cyBldmVyeSBzcGluc19wZXJfZGVsYXkgdHJpZXMgKi8KIAlpZiAoKysoc3RhdHVzLT5zcGlucykg Pj0gc3BpbnNfcGVyX2RlbGF5KQpAQCAtMjI5LDk2ICsyNDAsMyBAQCB1cGRhdGVfc3BpbnNfcGVy X2RlbGF5KGludCBzaGFyZWRfc3BpbnNfcGVyX2RlbGF5KQogCSAqLwogCXJldHVybiAoc2hhcmVk X3NwaW5zX3Blcl9kZWxheSAqIDE1ICsgc3BpbnNfcGVyX2RlbGF5KSAvIDE2OwogfQotCi0KLS8q KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKi8KLSNpZiBkZWZpbmVkKFNfTE9DS19URVNUKQotCi0vKgotICog dGVzdCBwcm9ncmFtIGZvciB2ZXJpZnlpbmcgYSBwb3J0J3Mgc3BpbmxvY2sgc3VwcG9ydC4KLSAq LwotCi1zdHJ1Y3QgdGVzdF9sb2NrX3N0cnVjdAotewotCWNoYXIJCXBhZDE7Ci0Jc2xvY2tfdAkJ bG9jazsKLQljaGFyCQlwYWQyOwotfTsKLQotdm9sYXRpbGUgc3RydWN0IHRlc3RfbG9ja19zdHJ1 Y3QgdGVzdF9sb2NrOwotCi1pbnQKLW1haW4oKQotewotCXBnX3Bybmdfc2VlZCgmcGdfZ2xvYmFs X3Bybmdfc3RhdGUsICh1aW50NjQpIHRpbWUoTlVMTCkpOwotCi0JdGVzdF9sb2NrLnBhZDEgPSB0 ZXN0X2xvY2sucGFkMiA9IDB4NDQ7Ci0KLQlTX0lOSVRfTE9DSygmdGVzdF9sb2NrLmxvY2spOwot Ci0JaWYgKHRlc3RfbG9jay5wYWQxICE9IDB4NDQgfHwgdGVzdF9sb2NrLnBhZDIgIT0gMHg0NCkK LQl7Ci0JCXByaW50ZigiU19MT0NLX1RFU1Q6IGZhaWxlZCwgZGVjbGFyZWQgZGF0YXR5cGUgaXMg d3Jvbmcgc2l6ZVxuIik7Ci0JCXJldHVybiAxOwotCX0KLQotCWlmICghU19MT0NLX0ZSRUUoJnRl c3RfbG9jay5sb2NrKSkKLQl7Ci0JCXByaW50ZigiU19MT0NLX1RFU1Q6IGZhaWxlZCwgbG9jayBu b3QgaW5pdGlhbGl6ZWRcbiIpOwotCQlyZXR1cm4gMTsKLQl9Ci0KLQlTX0xPQ0soJnRlc3RfbG9j ay5sb2NrKTsKLQotCWlmICh0ZXN0X2xvY2sucGFkMSAhPSAweDQ0IHx8IHRlc3RfbG9jay5wYWQy ICE9IDB4NDQpCi0JewotCQlwcmludGYoIlNfTE9DS19URVNUOiBmYWlsZWQsIGRlY2xhcmVkIGRh dGF0eXBlIGlzIHdyb25nIHNpemVcbiIpOwotCQlyZXR1cm4gMTsKLQl9Ci0KLQlpZiAoU19MT0NL X0ZSRUUoJnRlc3RfbG9jay5sb2NrKSkKLQl7Ci0JCXByaW50ZigiU19MT0NLX1RFU1Q6IGZhaWxl ZCwgbG9jayBub3QgbG9ja2VkXG4iKTsKLQkJcmV0dXJuIDE7Ci0JfQotCi0JU19VTkxPQ0soJnRl c3RfbG9jay5sb2NrKTsKLQotCWlmICh0ZXN0X2xvY2sucGFkMSAhPSAweDQ0IHx8IHRlc3RfbG9j ay5wYWQyICE9IDB4NDQpCi0JewotCQlwcmludGYoIlNfTE9DS19URVNUOiBmYWlsZWQsIGRlY2xh cmVkIGRhdGF0eXBlIGlzIHdyb25nIHNpemVcbiIpOwotCQlyZXR1cm4gMTsKLQl9Ci0KLQlpZiAo IVNfTE9DS19GUkVFKCZ0ZXN0X2xvY2subG9jaykpCi0JewotCQlwcmludGYoIlNfTE9DS19URVNU OiBmYWlsZWQsIGxvY2sgbm90IHVubG9ja2VkXG4iKTsKLQkJcmV0dXJuIDE7Ci0JfQotCi0JU19M T0NLKCZ0ZXN0X2xvY2subG9jayk7Ci0KLQlpZiAodGVzdF9sb2NrLnBhZDEgIT0gMHg0NCB8fCB0 ZXN0X2xvY2sucGFkMiAhPSAweDQ0KQotCXsKLQkJcHJpbnRmKCJTX0xPQ0tfVEVTVDogZmFpbGVk LCBkZWNsYXJlZCBkYXRhdHlwZSBpcyB3cm9uZyBzaXplXG4iKTsKLQkJcmV0dXJuIDE7Ci0JfQot Ci0JaWYgKFNfTE9DS19GUkVFKCZ0ZXN0X2xvY2subG9jaykpCi0JewotCQlwcmludGYoIlNfTE9D S19URVNUOiBmYWlsZWQsIGxvY2sgbm90IHJlLWxvY2tlZFxuIik7Ci0JCXJldHVybiAxOwotCX0K LQotCXByaW50ZigiU19MT0NLX1RFU1Q6IHRoaXMgd2lsbCBwcmludCAlZCBzdGFycyBhbmQgdGhl blxuIiwgTlVNX0RFTEFZUyk7Ci0JcHJpbnRmKCIgICAgICAgICAgICAgZXhpdCB3aXRoIGEgJ3N0 dWNrIHNwaW5sb2NrJyBtZXNzYWdlXG4iKTsKLQlwcmludGYoIiAgICAgICAgICAgICBpZiBTX0xP Q0soKSBhbmQgVEFTKCkgYXJlIHdvcmtpbmcuXG4iKTsKLQlmZmx1c2goc3Rkb3V0KTsKLQotCXNf bG9jaygmdGVzdF9sb2NrLmxvY2ssIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOwotCi0J cHJpbnRmKCJTX0xPQ0tfVEVTVDogZmFpbGVkLCBsb2NrIG5vdCBsb2NrZWRcbiIpOwotCXJldHVy biAxOwotfQotCi0jZW5kaWYJCQkJCQkJLyogU19MT0NLX1RFU1QgKi8KZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL3BvcnQvc3Bpbl9kZWxheS5oIGIvc3JjL2luY2x1ZGUvcG9ydC9zcGluX2RlbGF5 LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmM1ODM2OThhZjhlCi0t LSAvZGV2L251bGwKKysrIGIvc3JjL2luY2x1ZGUvcG9ydC9zcGluX2RlbGF5LmgKQEAgLTAsMCAr MSw5MSBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogc3Bpbl9kZWxheS5oCisgKgkgICBJ bXBsZW1lbnRhdGlvbiBvZiBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgc3BpbmxvY2sgZGVsYXkuCisg KgorICogTm90ZSB0byBpbXBsZW1lbnRvcnM6IHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGRv ZXMgbm90aGluZy4KKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyNSwgUG9z dGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRpb25zIENvcHlyaWdodCAo YykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCisgKgorICoJ ICBzcmMvaW5jbHVkZS9wb3J0L3NwaW5fZGVsYXkuaAorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor ICovCisjaWZuZGVmIFNQSU5fREVMQVlfSAorI2RlZmluZSBTUElOX0RFTEFZX0gKKworc3RhdGlj IHBnX2F0dHJpYnV0ZV9hbHdheXNfaW5saW5lIHZvaWQKK3BnX3NwaW5fZGVsYXkodm9pZCkKK3sK KyNpZiBkZWZpbmVkKF9fR05VQ19fKSB8fCBkZWZpbmVkKF9fSU5URUxfQ09NUElMRVIpCisjaWZk ZWYgX19pMzg2X18JCQkJCS8qIDMyLWJpdCBpMzg2ICovCisJLyoKKwkgKiBUaGlzIHNlcXVlbmNl IGlzIGVxdWl2YWxlbnQgdG8gdGhlIFBBVVNFIGluc3RydWN0aW9uICgicmVwIiBpcyBpZ25vcmVk CisJICogYnkgb2xkIElBMzIgcHJvY2Vzc29ycyBpZiB0aGUgZm9sbG93aW5nIGluc3RydWN0aW9u IGlzIG5vdCBhIHN0cmluZworCSAqIG9wZXJhdGlvbik7IHRoZSBJQS0zMiBBcmNoaXRlY3R1cmUg U29mdHdhcmUgRGV2ZWxvcGVyJ3MgTWFudWFsLCBWb2wuIDMsCisJICogU2VjdGlvbiA3LjcuMiBk ZXNjcmliZXMgd2h5IHVzaW5nIFBBVVNFIGluIHRoZSBpbm5lciBsb29wIG9mIGEgc3BpbgorCSAq IGxvY2sgaXMgbmVjZXNzYXJ5IGZvciBnb29kIHBlcmZvcm1hbmNlOgorCSAqCisJICogVGhlIFBB VVNFIGluc3RydWN0aW9uIGltcHJvdmVzIHRoZSBwZXJmb3JtYW5jZSBvZiBJQS0zMiBwcm9jZXNz b3JzCisJICogc3VwcG9ydGluZyBIeXBlci1UaHJlYWRpbmcgVGVjaG5vbG9neSB3aGVuIGV4ZWN1 dGluZyBzcGluLXdhaXQgbG9vcHMKKwkgKiBhbmQgb3RoZXIgcm91dGluZXMgd2hlcmUgb25lIHRo cmVhZCBpcyBhY2Nlc3NpbmcgYSBzaGFyZWQgbG9jayBvcgorCSAqIHNlbWFwaG9yZSBpbiBhIHRp Z2h0IHBvbGxpbmcgbG9vcC4gV2hlbiBleGVjdXRpbmcgYSBzcGluLXdhaXQgbG9vcCwgdGhlCisJ ICogcHJvY2Vzc29yIGNhbiBzdWZmZXIgYSBzZXZlcmUgcGVyZm9ybWFuY2UgcGVuYWx0eSB3aGVu IGV4aXRpbmcgdGhlIGxvb3AKKwkgKiBiZWNhdXNlIGl0IGRldGVjdHMgYSBwb3NzaWJsZSBtZW1v cnkgb3JkZXIgdmlvbGF0aW9uIGFuZCBmbHVzaGVzIHRoZQorCSAqIGNvcmUgcHJvY2Vzc29yJ3Mg cGlwZWxpbmUuIFRoZSBQQVVTRSBpbnN0cnVjdGlvbiBwcm92aWRlcyBhIGhpbnQgdG8gdGhlCisJ ICogcHJvY2Vzc29yIHRoYXQgdGhlIGNvZGUgc2VxdWVuY2UgaXMgYSBzcGluLXdhaXQgbG9vcC4g VGhlIHByb2Nlc3NvcgorCSAqIHVzZXMgdGhpcyBoaW50IHRvIGF2b2lkIHRoZSBtZW1vcnkgb3Jk ZXIgdmlvbGF0aW9uIGFuZCBwcmV2ZW50IHRoZQorCSAqIHBpcGVsaW5lIGZsdXNoLiBJbiBhZGRp dGlvbiwgdGhlIFBBVVNFIGluc3RydWN0aW9uIGRlLXBpcGVsaW5lcyB0aGUKKwkgKiBzcGluLXdh aXQgbG9vcCB0byBwcmV2ZW50IGl0IGZyb20gY29uc3VtaW5nIGV4ZWN1dGlvbiByZXNvdXJjZXMK KwkgKiBleGNlc3NpdmVseS4KKwkgKi8KKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJCQkJCSAi IHJlcDsgbm9wCQkJXG4iKTsKKyNlbmRpZgkJCQkJCQkvKiBfX2kzODZfXyAqLworI2lmZGVmIF9f eDg2XzY0X18JCQkJLyogQU1EIE9wdGVyb24sIEludGVsIEVNNjRUICovCisKKwkvKgorCSAqIEFk ZGluZyBhIFBBVVNFIGluIHRoZSBzcGluIGRlbGF5IGxvb3AgaXMgZGVtb25zdHJhYmx5IGEgbm8t b3Agb24KKwkgKiBPcHRlcm9uLCBidXQgaXQgbWF5IGJlIG9mIHNvbWUgdXNlIG9uIEVNNjRULCBz byB3ZSBrZWVwIGl0LgorCSAqLworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQkJCQkJICIgcmVw OyBub3AJCQlcbiIpOworI2VuZGlmCQkJCQkJCS8qIF9feDg2XzY0X18gKi8KKyNpZiBkZWZpbmVk KF9fYWFyY2g2NF9fKQorCisJLyoKKwkgKiBVc2luZyBhbiBJU0IgaW5zdHJ1Y3Rpb24gdG8gZGVs YXkgaW4gc3BpbmxvY2sgbG9vcHMgYXBwZWFycyBiZW5lZmljaWFsCisJICogb24gaGlnaC1jb3Jl LWNvdW50IEFSTTY0IHByb2Nlc3NvcnMuICBJdCBzZWVtcyBtb3N0bHkgYSB3YXNoIGZvcgorCSAq IHNtYWxsZXIgZ2VhciwgYW5kIElTQiBkb2Vzbid0IGV4aXN0IGF0IGFsbCBvbiBwcmUtdjcgQVJN IGNoaXBzLgorCSAqLworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQkJCQkJICIgaXNiOwkJCQlc biIpOworI2VuZGlmCQkJCQkJCS8qIF9fYWFyY2g2NF9fICovCisjZW5kaWYJCQkJCQkJLyogZGVm aW5lZChfX0dOVUNfXykgfHwKKwkJCQkJCQkJICogZGVmaW5lZChfX0lOVEVMX0NPTVBJTEVSKSAq LworCisjaWZkZWYgX01TQ19WRVIKKworCS8qCisJICogSWYgdXNpbmcgVmlzdWFsIEMrKyBvbiBX aW42NCwgaW5saW5lIGFzc2VtYmx5IGlzIHVuYXZhaWxhYmxlLiAgVXNlIGEKKwkgKiBfbW1fcGF1 c2UgaW50cmluc2ljIGluc3RlYWQgb2YgcmVwIG5vcC4KKwkgKi8KKyNpZiBkZWZpbmVkKF9XSU42 NCkKKwlfbW1fcGF1c2UoKTsKKyNlbHNlCisJLyogU2VlIGNvbW1lbnQgZm9yIGdjYyBjb2RlLiBT YW1lIGNvZGUsIE1BU00gc3ludGF4ICovCisJX19hc20JCXJlcCBub3A7CisjZW5kaWYKKyNlbmRp ZgkJCQkJCQkvKiBfTVNDX1ZFUiAqLworfQorCisvKiBBcmNoaXRlY3R1cmVzIG9uIHdoaWNoIGEg cmVsYXhlZCBsb2FkIGlzIHJlY29tbWVuZGVkIHdoaWxlIHNwaW5uaW5nLiAqLworI2lmIGRlZmlu ZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykgfHwgXAorCWRlZmluZWQoX01fSVg4 NikgfHwgZGVmaW5lZChfTV9BTUQ2NCkgfHwgXAorCWRlZmluZWQoX19wcGNfXykgfHwgZGVmaW5l ZChfX3Bvd2VycGNfXykgfHwgXAorCWRlZmluZWQoX19wcGM2NF9fKSB8fCBkZWZpbmVkKF9fcG93 ZXJwYzY0X18pCisjZGVmaW5lIFBHX1NQSU5fVFJZX1JFTEFYRUQKKyNlbmRpZgorCisjZW5kaWYJ CQkJCQkJLyogU1BJTl9ERUxBWV9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdl L3NfbG9jay5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9zX2xvY2suaApkZWxldGVkIGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggN2Y4ZjU2NmJkNDAuLjAwMDAwMDAwMDAwCi0tLSBhL3NyYy9pbmNsdWRl L3N0b3JhZ2Uvc19sb2NrLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3MzcgKzAsMCBAQAotLyotLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCi0gKgotICogc19sb2NrLmgKLSAqCSAgIEltcGxlbWVudGF0aW9uIG9mIHNw aW5sb2Nrcy4KLSAqCi0gKglOT1RFOiBub25lIG9mIHRoZSBtYWNyb3MgaW4gdGhpcyBmaWxlIGFy ZSBpbnRlbmRlZCB0byBiZSBjYWxsZWQgZGlyZWN0bHkuCi0gKglDYWxsIHRoZW0gdGhyb3VnaCB0 aGUgbWFjcm9zIGluIHNwaW4uaC4KLSAqCi0gKglUaGUgZm9sbG93aW5nIGhhcmR3YXJlLWRlcGVu ZGVudCBtYWNyb3MgbXVzdCBiZSBwcm92aWRlZCBmb3IgZWFjaAotICoJc3VwcG9ydGVkIHBsYXRm b3JtOgotICoKLSAqCXZvaWQgU19JTklUX0xPQ0soc2xvY2tfdCAqbG9jaykKLSAqCQlJbml0aWFs aXplIGEgc3BpbmxvY2sgKHRvIHRoZSB1bmxvY2tlZCBzdGF0ZSkuCi0gKgotICoJaW50IFNfTE9D SyhzbG9ja190ICpsb2NrKQotICoJCUFjcXVpcmUgYSBzcGlubG9jaywgd2FpdGluZyBpZiBuZWNl c3NhcnkuCi0gKgkJVGltZSBvdXQgYW5kIGFib3J0KCkgaWYgdW5hYmxlIHRvIGFjcXVpcmUgdGhl IGxvY2sgaW4gYQotICoJCSJyZWFzb25hYmxlIiBhbW91bnQgb2YgdGltZSAtLS0gdHlwaWNhbGx5 IH4gMSBtaW51dGUuCi0gKgkJU2hvdWxkIHJldHVybiBudW1iZXIgb2YgImRlbGF5cyI7IHNlZSBz X2xvY2suYwotICoKLSAqCXZvaWQgU19VTkxPQ0soc2xvY2tfdCAqbG9jaykKLSAqCQlVbmxvY2sg YSBwcmV2aW91c2x5IGFjcXVpcmVkIGxvY2suCi0gKgotICoJYm9vbCBTX0xPQ0tfRlJFRShzbG9j a190ICpsb2NrKQotICoJCVRlc3RzIGlmIHRoZSBsb2NrIGlzIGZyZWUuIFJldHVybnMgdHJ1ZSBp ZiBmcmVlLCBmYWxzZSBpZiBsb2NrZWQuCi0gKgkJVGhpcyBkb2VzICpub3QqIGNoYW5nZSB0aGUg c3RhdGUgb2YgdGhlIGxvY2suCi0gKgotICoJdm9pZCBTUElOX0RFTEFZKHZvaWQpCi0gKgkJRGVs YXkgb3BlcmF0aW9uIHRvIG9jY3VyIGluc2lkZSBzcGlubG9jayB3YWl0IGxvb3AuCi0gKgotICoJ Tm90ZSB0byBpbXBsZW1lbnRvcnM6IHRoZXJlIGFyZSBkZWZhdWx0IGltcGxlbWVudGF0aW9ucyBm b3IgYWxsIHRoZXNlCi0gKgltYWNyb3MgYXQgdGhlIGJvdHRvbSBvZiB0aGUgZmlsZS4gIENoZWNr IGlmIHlvdXIgcGxhdGZvcm0gY2FuIHVzZQotICoJdGhlc2Ugb3IgbmVlZHMgdG8gb3ZlcnJpZGUg dGhlbS4KLSAqCi0gKiAgVXN1YWxseSwgU19MT0NLKCkgaXMgaW1wbGVtZW50ZWQgaW4gdGVybXMg b2YgZXZlbiBsb3dlci1sZXZlbCBtYWNyb3MKLSAqCVRBUygpIGFuZCBUQVNfU1BJTigpOgotICoK LSAqCWludCBUQVMoc2xvY2tfdCAqbG9jaykKLSAqCQlBdG9taWMgdGVzdC1hbmQtc2V0IGluc3Ry dWN0aW9uLiAgQXR0ZW1wdCB0byBhY3F1aXJlIHRoZSBsb2NrLAotICoJCWJ1dCBkbyAqbm90KiB3 YWl0LglSZXR1cm5zIDAgaWYgc3VjY2Vzc2Z1bCwgbm9uemVybyBpZiB1bmFibGUKLSAqCQl0byBh Y3F1aXJlIHRoZSBsb2NrLgotICoKLSAqCWludCBUQVNfU1BJTihzbG9ja190ICpsb2NrKQotICoJ CUxpa2UgVEFTKCksIGJ1dCB0aGlzIHZlcnNpb24gaXMgdXNlZCB3aGVuIHdhaXRpbmcgZm9yIGEg bG9jawotICoJCXByZXZpb3VzbHkgZm91bmQgdG8gYmUgY29udGVuZGVkLiAgQnkgZGVmYXVsdCwg dGhpcyBpcyB0aGUKLSAqCQlzYW1lIGFzIFRBUygpLCBidXQgb24gc29tZSBhcmNoaXRlY3R1cmVz IGl0J3MgYmV0dGVyIHRvIHBvbGwgYQotICoJCWNvbnRlbmRlZCBsb2NrIHVzaW5nIGFuIHVubG9j a2VkIGluc3RydWN0aW9uIGFuZCByZXRyeSB0aGUKLSAqCQlhdG9taWMgdGVzdC1hbmQtc2V0IG9u bHkgd2hlbiBpdCBhcHBlYXJzIGZyZWUuCi0gKgotICoJVEFTKCkgYW5kIFRBU19TUElOKCkgYXJl IE5PVCBwYXJ0IG9mIHRoZSBBUEksIGFuZCBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkCi0gKglkaXJl Y3RseS4KLSAqCi0gKglDQVVUSU9OOiBvbiBzb21lIHBsYXRmb3JtcyBUQVMoKSBhbmQvb3IgVEFT X1NQSU4oKSBtYXkgc29tZXRpbWVzIHJlcG9ydAotICoJZmFpbHVyZSB0byBhY3F1aXJlIGEgbG9j ayBldmVuIHdoZW4gdGhlIGxvY2sgaXMgbm90IGxvY2tlZC4gIEZvciBleGFtcGxlLAotICoJb24g QWxwaGEgVEFTKCkgd2lsbCAiZmFpbCIgaWYgaW50ZXJydXB0ZWQuICBUaGVyZWZvcmUgYSByZXRy eSBsb29wIG11c3QKLSAqCWFsd2F5cyBiZSB1c2VkLCBldmVuIGlmIHlvdSBhcmUgY2VydGFpbiB0 aGUgbG9jayBpcyBmcmVlLgotICoKLSAqCUl0IGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGVz ZSBtYWNyb3MgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGNvbXBpbGVyCi0gKglkb2VzIG5vdCByZS1v cmRlciBhY2Nlc3NlcyB0byBzaGFyZWQgbWVtb3J5IHRvIHByZWNlZGUgdGhlIGFjdHVhbCBsb2Nr Ci0gKglhY3F1aXNpdGlvbiwgb3IgZm9sbG93IHRoZSBsb2NrIHJlbGVhc2UuICBQcmlvciB0byBQ b3N0Z3JlU1FMIDkuNSwgdGhpcwotICoJd2FzIHRoZSBjYWxsZXIncyByZXNwb25zaWJpbGl0eSwg d2hpY2ggbWVhbnQgdGhhdCBjYWxsZXJzIGhhZCB0byB1c2UKLSAqCXZvbGF0aWxlLXF1YWxpZmll ZCBwb2ludGVycyB0byByZWZlciB0byBib3RoIHRoZSBzcGlubG9jayBpdHNlbGYgYW5kIHRoZQot ICoJc2hhcmVkIGRhdGEgYmVpbmcgYWNjZXNzZWQgd2l0aGluIHRoZSBzcGlubG9ja2VkIGNyaXRp Y2FsIHNlY3Rpb24uICBUaGlzCi0gKgl3YXMgbm90YXRpb25hbGx5IGF3a3dhcmQsIGVhc3kgdG8g Zm9yZ2V0IChhbmQgdGh1cyBlcnJvci1wcm9uZSksIGFuZAotICoJcHJldmVudGVkIHNvbWUgdXNl ZnVsIGNvbXBpbGVyIG9wdGltaXphdGlvbnMuICBGb3IgdGhlc2UgcmVhc29ucywgd2UKLSAqCW5v dyByZXF1aXJlIHRoYXQgdGhlIG1hY3JvcyB0aGVtc2VsdmVzIHByZXZlbnQgY29tcGlsZXIgcmUt b3JkZXJpbmcsCi0gKglzbyB0aGF0IHRoZSBjYWxsZXIgZG9lc24ndCBuZWVkIHRvIHRha2Ugc3Bl Y2lhbCBwcmVjYXV0aW9ucy4KLSAqCi0gKglPbiBwbGF0Zm9ybXMgd2l0aCB3ZWFrIG1lbW9yeSBv cmRlcmluZywgdGhlIFRBUygpLCBUQVNfU1BJTigpLCBhbmQKLSAqCVNfVU5MT0NLKCkgbWFjcm9z IG11c3QgZnVydGhlciBpbmNsdWRlIGhhcmR3YXJlLWxldmVsIG1lbW9yeSBmZW5jZQotICoJaW5z dHJ1Y3Rpb25zIHRvIHByZXZlbnQgc2ltaWxhciByZS1vcmRlcmluZyBhdCB0aGUgaGFyZHdhcmUg bGV2ZWwuCi0gKglUQVMoKSBhbmQgVEFTX1NQSU4oKSBtdXN0IGd1YXJhbnRlZSB0aGF0IGxvYWRz IGFuZCBzdG9yZXMgaXNzdWVkIGFmdGVyCi0gKgl0aGUgbWFjcm8gYXJlIG5vdCBleGVjdXRlZCB1 bnRpbCB0aGUgbG9jayBoYXMgYmVlbiBvYnRhaW5lZC4gIENvbnZlcnNlbHksCi0gKglTX1VOTE9D SygpIG11c3QgZ3VhcmFudGVlIHRoYXQgbG9hZHMgYW5kIHN0b3JlcyBpc3N1ZWQgYmVmb3JlIHRo ZSBtYWNybwotICoJaGF2ZSBiZWVuIGV4ZWN1dGVkIGJlZm9yZSB0aGUgbG9jayBpcyByZWxlYXNl ZC4KLSAqCi0gKglPbiBtb3N0IHN1cHBvcnRlZCBwbGF0Zm9ybXMsIFRBUygpIHVzZXMgYSB0YXMo KSBmdW5jdGlvbiB3cml0dGVuCi0gKglpbiBhc3NlbWJseSBsYW5ndWFnZSB0byBleGVjdXRlIGEg aGFyZHdhcmUgYXRvbWljLXRlc3QtYW5kLXNldAotICoJaW5zdHJ1Y3Rpb24uICBFcXVpdmFsZW50 IE9TLXN1cHBsaWVkIG11dGV4IHJvdXRpbmVzIGNvdWxkIGJlIHVzZWQgdG9vLgotICoKLSAqCi0g KiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2 ZWxvcG1lbnQgR3JvdXAKLSAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBv ZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCi0gKgotICoJICBzcmMvaW5jbHVkZS9zdG9y YWdlL3NfbG9jay5oCi0gKgotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKi8KLSNpZm5kZWYgU19MT0NL X0gKLSNkZWZpbmUgU19MT0NLX0gKLQotI2lmZGVmIEZST05URU5ECi0jZXJyb3IgInNfbG9jay5o IG1heSBub3QgYmUgaW5jbHVkZWQgZnJvbSBmcm9udGVuZCBjb2RlIgotI2VuZGlmCi0KLSNpZiBk ZWZpbmVkKF9fR05VQ19fKSB8fCBkZWZpbmVkKF9fSU5URUxfQ09NUElMRVIpCi0vKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKgotICogQWxsIHRoZSBnY2MgaW5saW5lcwotICogR2NjIGNvbnNpc3RlbnRseSBkZWZp bmVzIHRoZSBDUFUgYXMgX19jcHVfXy4KLSAqIE90aGVyIGNvbXBpbGVycyB1c2UgX19jcHUgb3Ig X19jcHVfXyBzbyB3ZSB0ZXN0IGZvciBib3RoIGluIHRob3NlIGNhc2VzLgotICovCi0KLS8qLS0t LS0tLS0tLQotICogU3RhbmRhcmQgZ2NjIGFzbSBmb3JtYXQgKGFzc3VtaW5nICJ2b2xhdGlsZSBz bG9ja190ICpsb2NrIik6Ci0KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkJIglpbnN0cnVjdGlv bglcbiIKLQkJIglpbnN0cnVjdGlvbglcbiIKLQkJIglpbnN0cnVjdGlvbglcbiIKLToJCSI9ciIo X3JlcyksICIrbSIoKmxvY2spCQkvLyByZXR1cm4gcmVnaXN0ZXIsIGluL291dCBsb2NrIHZhbHVl Ci06CQkiciIobG9jaykJCQkJCS8vIGxvY2sgcG9pbnRlciwgaW4gaW5wdXQgcmVnaXN0ZXIKLToJ CSJtZW1vcnkiLCAiY2MiKTsJCQkvLyBzaG93IGNsb2JiZXJlZCByZWdpc3RlcnMgaGVyZQotCi0g KiBUaGUgb3V0cHV0LW9wZXJhbmRzIGxpc3QgKGFmdGVyIGZpcnN0IGNvbG9uKSBzaG91bGQgYWx3 YXlzIGluY2x1ZGUKLSAqICIrbSIoKmxvY2spLCB3aGV0aGVyIG9yIG5vdCB0aGUgYXNtIGNvZGUg YWN0dWFsbHkgcmVmZXJzIHRvIHRoaXMKLSAqIG9wZXJhbmQgZGlyZWN0bHkuICBUaGlzIGVuc3Vy ZXMgdGhhdCBnY2MgYmVsaWV2ZXMgdGhlIHZhbHVlIGluIHRoZQotICogbG9jayB2YXJpYWJsZSBp cyB1c2VkIGFuZCBzZXQgYnkgdGhlIGFzbSBjb2RlLiAgQWxzbywgdGhlIGNsb2JiZXJzCi0gKiBs aXN0IChhZnRlciB0aGlyZCBjb2xvbikgc2hvdWxkIGFsd2F5cyBpbmNsdWRlICJtZW1vcnkiOyB0 aGlzIHByZXZlbnRzCi0gKiBnY2MgZnJvbSB0aGlua2luZyBpdCBjYW4gY2FjaGUgdGhlIHZhbHVl cyBvZiBzaGFyZWQtbWVtb3J5IGZpZWxkcwotICogYWNyb3NzIHRoZSBhc20gY29kZS4gIEFkZCAi Y2MiIGlmIHlvdXIgYXNtIGNvZGUgY2hhbmdlcyB0aGUgY29uZGl0aW9uCi0gKiBjb2RlIHJlZ2lz dGVyLCBhbmQgYWxzbyBsaXN0IGFueSB0ZW1wIHJlZ2lzdGVycyB0aGUgY29kZSB1c2VzLgotICot LS0tLS0tLS0tCi0gKi8KLQotCi0jaWZkZWYgX19pMzg2X18JCS8qIDMyLWJpdCBpMzg2ICovCi0j ZGVmaW5lIEhBU19URVNUX0FORF9TRVQKLQotdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHNsb2NrX3Q7 Ci0KLSNkZWZpbmUgVEFTKGxvY2spIHRhcyhsb2NrKQotCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQK LXRhcyh2b2xhdGlsZSBzbG9ja190ICpsb2NrKQotewotCXNsb2NrX3QJCV9yZXMgPSAxOwotCi0J LyoKLQkgKiBVc2UgYSBub24tbG9ja2luZyB0ZXN0IGJlZm9yZSBhc3NlcnRpbmcgdGhlIGJ1cyBs b2NrLiAgTm90ZSB0aGF0IHRoZQotCSAqIGV4dHJhIHRlc3QgYXBwZWFycyB0byBiZSBhIHNtYWxs IGxvc3Mgb24gc29tZSB4ODYgcGxhdGZvcm1zIGFuZCBhIHNtYWxsCi0JICogd2luIG9uIG90aGVy czsgaXQncyBieSBubyBtZWFucyBjbGVhciB0aGF0IHdlIHNob3VsZCBrZWVwIGl0LgotCSAqCi0J ICogV2hlbiB0aGlzIHdhcyBsYXN0IHRlc3RlZCwgd2UgZGlkbid0IGhhdmUgc2VwYXJhdGUgVEFT KCkgYW5kIFRBU19TUElOKCkKLQkgKiBtYWNyb3MuICBOb3dhZGF5cyBpdCBwcm9iYWJseSB3b3Vs ZCBiZSBiZXR0ZXIgdG8gZG8gYSBub24tbG9ja2luZyB0ZXN0Ci0JICogaW4gVEFTX1NQSU4oKSBi dXQgbm90IGluIFRBUygpLCBsaWtlIG9uIHg4Nl82NCwgYnV0IG5vLW9uZSdzIGRvbmUgdGhlCi0J ICogdGVzdGluZyB0byB2ZXJpZnkgdGhhdC4gIFdpdGhvdXQgc29tZSBlbXBpcmljYWwgZXZpZGVu Y2UsIGJldHRlciB0bwotCSAqIGxlYXZlIGl0IGFsb25lLgotCSAqLwotCV9fYXNtX18gX192b2xh dGlsZV9fKAotCQkiCWNtcGIJJDAsJTEJXG4iCi0JCSIJam5lCQkxZgkJXG4iCi0JCSIJbG9jawkJ CVxuIgotCQkiCXhjaGdiCSUwLCUxCVxuIgotCQkiMTogXG4iCi06CQkiK3EiKF9yZXMpLCAiK20i KCpsb2NrKQotOgkJLyogbm8gaW5wdXRzICovCi06CQkibWVtb3J5IiwgImNjIik7Ci0JcmV0dXJu IChpbnQpIF9yZXM7Ci19Ci0KLSNkZWZpbmUgU1BJTl9ERUxBWSgpIHNwaW5fZGVsYXkoKQotCi1z dGF0aWMgX19pbmxpbmVfXyB2b2lkCi1zcGluX2RlbGF5KHZvaWQpCi17Ci0JLyoKLQkgKiBUaGlz IHNlcXVlbmNlIGlzIGVxdWl2YWxlbnQgdG8gdGhlIFBBVVNFIGluc3RydWN0aW9uICgicmVwIiBp cwotCSAqIGlnbm9yZWQgYnkgb2xkIElBMzIgcHJvY2Vzc29ycyBpZiB0aGUgZm9sbG93aW5nIGlu c3RydWN0aW9uIGlzCi0JICogbm90IGEgc3RyaW5nIG9wZXJhdGlvbik7IHRoZSBJQS0zMiBBcmNo aXRlY3R1cmUgU29mdHdhcmUKLQkgKiBEZXZlbG9wZXIncyBNYW51YWwsIFZvbC4gMywgU2VjdGlv biA3LjcuMiBkZXNjcmliZXMgd2h5IHVzaW5nCi0JICogUEFVU0UgaW4gdGhlIGlubmVyIGxvb3Ag b2YgYSBzcGluIGxvY2sgaXMgbmVjZXNzYXJ5IGZvciBnb29kCi0JICogcGVyZm9ybWFuY2U6Ci0J ICoKLQkgKiAgICAgVGhlIFBBVVNFIGluc3RydWN0aW9uIGltcHJvdmVzIHRoZSBwZXJmb3JtYW5j ZSBvZiBJQS0zMgotCSAqICAgICBwcm9jZXNzb3JzIHN1cHBvcnRpbmcgSHlwZXItVGhyZWFkaW5n IFRlY2hub2xvZ3kgd2hlbgotCSAqICAgICBleGVjdXRpbmcgc3Bpbi13YWl0IGxvb3BzIGFuZCBv dGhlciByb3V0aW5lcyB3aGVyZSBvbmUKLQkgKiAgICAgdGhyZWFkIGlzIGFjY2Vzc2luZyBhIHNo YXJlZCBsb2NrIG9yIHNlbWFwaG9yZSBpbiBhIHRpZ2h0Ci0JICogICAgIHBvbGxpbmcgbG9vcC4g V2hlbiBleGVjdXRpbmcgYSBzcGluLXdhaXQgbG9vcCwgdGhlCi0JICogICAgIHByb2Nlc3NvciBj YW4gc3VmZmVyIGEgc2V2ZXJlIHBlcmZvcm1hbmNlIHBlbmFsdHkgd2hlbgotCSAqICAgICBleGl0 aW5nIHRoZSBsb29wIGJlY2F1c2UgaXQgZGV0ZWN0cyBhIHBvc3NpYmxlIG1lbW9yeSBvcmRlcgot CSAqICAgICB2aW9sYXRpb24gYW5kIGZsdXNoZXMgdGhlIGNvcmUgcHJvY2Vzc29yJ3MgcGlwZWxp bmUuIFRoZQotCSAqICAgICBQQVVTRSBpbnN0cnVjdGlvbiBwcm92aWRlcyBhIGhpbnQgdG8gdGhl IHByb2Nlc3NvciB0aGF0IHRoZQotCSAqICAgICBjb2RlIHNlcXVlbmNlIGlzIGEgc3Bpbi13YWl0 IGxvb3AuIFRoZSBwcm9jZXNzb3IgdXNlcyB0aGlzCi0JICogICAgIGhpbnQgdG8gYXZvaWQgdGhl IG1lbW9yeSBvcmRlciB2aW9sYXRpb24gYW5kIHByZXZlbnQgdGhlCi0JICogICAgIHBpcGVsaW5l IGZsdXNoLiBJbiBhZGRpdGlvbiwgdGhlIFBBVVNFIGluc3RydWN0aW9uCi0JICogICAgIGRlLXBp cGVsaW5lcyB0aGUgc3Bpbi13YWl0IGxvb3AgdG8gcHJldmVudCBpdCBmcm9tCi0JICogICAgIGNv bnN1bWluZyBleGVjdXRpb24gcmVzb3VyY2VzIGV4Y2Vzc2l2ZWx5LgotCSAqLwotCV9fYXNtX18g X192b2xhdGlsZV9fKAotCQkiIHJlcDsgbm9wCQkJXG4iKTsKLX0KLQotI2VuZGlmCSAvKiBfX2kz ODZfXyAqLwotCi0KLSNpZmRlZiBfX3g4Nl82NF9fCQkvKiBBTUQgT3B0ZXJvbiwgSW50ZWwgRU02 NFQgKi8KLSNkZWZpbmUgSEFTX1RFU1RfQU5EX1NFVAotCi10eXBlZGVmIHVuc2lnbmVkIGNoYXIg c2xvY2tfdDsKLQotI2RlZmluZSBUQVMobG9jaykgdGFzKGxvY2spCi0KLS8qCi0gKiBPbiBJbnRl bCBFTTY0VCwgaXQncyBhIHdpbiB0byB1c2UgYSBub24tbG9ja2luZyB0ZXN0IGJlZm9yZSB0aGUg eGNoZyBwcm9wZXIsCi0gKiBidXQgb25seSB3aGVuIHNwaW5uaW5nLgotICoKLSAqIFNlZSBhbHNv IEltcGxlbWVudGluZyBTY2FsYWJsZSBBdG9taWMgTG9ja3MgZm9yIE11bHRpLUNvcmUgSW50ZWwo dG0pIEVNNjRUCi0gKiBhbmQgSUEzMiwgYnkgTWljaGFlbCBDaHlub3dldGggYW5kIE1hcnkgUi4g TGVlLiBBcyBvZiB0aGlzIHdyaXRpbmcsIGl0IGlzCi0gKiBhdmFpbGFibGUgYXQ6Ci0gKiBodHRw Oi8vc29mdHdhcmUuaW50ZWwuY29tL2VuLXVzL2FydGljbGVzL2ltcGxlbWVudGluZy1zY2FsYWJs ZS1hdG9taWMtbG9ja3MtZm9yLW11bHRpLWNvcmUtaW50ZWwtZW02NHQtYW5kLWlhMzItYXJjaGl0 ZWN0dXJlcwotICovCi0jZGVmaW5lIFRBU19TUElOKGxvY2spICAgICgqKGxvY2spID8gMSA6IFRB Uyhsb2NrKSkKLQotc3RhdGljIF9faW5saW5lX18gaW50Ci10YXModm9sYXRpbGUgc2xvY2tfdCAq bG9jaykKLXsKLQlzbG9ja190CQlfcmVzID0gMTsKLQotCV9fYXNtX18gX192b2xhdGlsZV9fKAot CQkiCWxvY2sJCQlcbiIKLQkJIgl4Y2hnYgklMCwlMQlcbiIKLToJCSIrcSIoX3JlcyksICIrbSIo KmxvY2spCi06CQkvKiBubyBpbnB1dHMgKi8KLToJCSJtZW1vcnkiLCAiY2MiKTsKLQlyZXR1cm4g KGludCkgX3JlczsKLX0KLQotI2RlZmluZSBTUElOX0RFTEFZKCkgc3Bpbl9kZWxheSgpCi0KLXN0 YXRpYyBfX2lubGluZV9fIHZvaWQKLXNwaW5fZGVsYXkodm9pZCkKLXsKLQkvKgotCSAqIEFkZGlu ZyBhIFBBVVNFIGluIHRoZSBzcGluIGRlbGF5IGxvb3AgaXMgZGVtb25zdHJhYmx5IGEgbm8tb3Ag b24KLQkgKiBPcHRlcm9uLCBidXQgaXQgbWF5IGJlIG9mIHNvbWUgdXNlIG9uIEVNNjRULCBzbyB3 ZSBrZWVwIGl0LgotCSAqLwotCV9fYXNtX18gX192b2xhdGlsZV9fKAotCQkiIHJlcDsgbm9wCQkJ XG4iKTsKLX0KLQotI2VuZGlmCSAvKiBfX3g4Nl82NF9fICovCi0KLQotLyoKLSAqIE9uIEFSTSBh bmQgQVJNNjQsIHdlIHVzZSBfX3N5bmNfbG9ja190ZXN0X2FuZF9zZXQoaW50ICosIGludCkgaWYg YXZhaWxhYmxlLgotICoKLSAqIFdlIHVzZSB0aGUgaW50LXdpZHRoIHZhcmlhbnQgb2YgdGhlIGJ1 aWx0aW4gYmVjYXVzZSBpdCB3b3JrcyBvbiBtb3JlIGNoaXBzCi0gKiB0aGFuIG90aGVyIHdpZHRo cy4KLSAqLwotI2lmIGRlZmluZWQoX19hcm1fXykgfHwgZGVmaW5lZChfX2FybSkgfHwgZGVmaW5l ZChfX2FhcmNoNjRfXykKLSNpZmRlZiBIQVZFX0dDQ19fU1lOQ19JTlQzMl9UQVMKLSNkZWZpbmUg SEFTX1RFU1RfQU5EX1NFVAotCi0jZGVmaW5lIFRBUyhsb2NrKSB0YXMobG9jaykKLQotdHlwZWRl ZiBpbnQgc2xvY2tfdDsKLQotc3RhdGljIF9faW5saW5lX18gaW50Ci10YXModm9sYXRpbGUgc2xv Y2tfdCAqbG9jaykKLXsKLQlyZXR1cm4gX19zeW5jX2xvY2tfdGVzdF9hbmRfc2V0KGxvY2ssIDEp OwotfQotCi0jZGVmaW5lIFNfVU5MT0NLKGxvY2spIF9fc3luY19sb2NrX3JlbGVhc2UobG9jaykK LQotI2lmIGRlZmluZWQoX19hYXJjaDY0X18pCi0KLS8qCi0gKiBPbiBBUk02NCwgaXQncyBhIHdp biB0byB1c2UgYSBub24tbG9ja2luZyB0ZXN0IGJlZm9yZSB0aGUgVEFTIHByb3Blci4gIEl0Ci0g KiBtYXkgYmUgYSB3aW4gb24gMzItYml0IEFSTSwgdG9vLCBidXQgbm9ib2R5J3MgdGVzdGVkIGl0 IHlldC4KLSAqLwotI2RlZmluZSBUQVNfU1BJTihsb2NrKQkoKihsb2NrKSA/IDEgOiBUQVMobG9j aykpCi0KLSNkZWZpbmUgU1BJTl9ERUxBWSgpIHNwaW5fZGVsYXkoKQotCi1zdGF0aWMgX19pbmxp bmVfXyB2b2lkCi1zcGluX2RlbGF5KHZvaWQpCi17Ci0JLyoKLQkgKiBVc2luZyBhbiBJU0IgaW5z dHJ1Y3Rpb24gdG8gZGVsYXkgaW4gc3BpbmxvY2sgbG9vcHMgYXBwZWFycyBiZW5lZmljaWFsCi0J ICogb24gaGlnaC1jb3JlLWNvdW50IEFSTTY0IHByb2Nlc3NvcnMuICBJdCBzZWVtcyBtb3N0bHkg YSB3YXNoIGZvciBzbWFsbGVyCi0JICogZ2VhciwgYW5kIElTQiBkb2Vzbid0IGV4aXN0IGF0IGFs bCBvbiBwcmUtdjcgQVJNIGNoaXBzLgotCSAqLwotCV9fYXNtX18gX192b2xhdGlsZV9fKAotCQki IGlzYjsJCQkJXG4iKTsKLX0KLQotI2VuZGlmCSAvKiBfX2FhcmNoNjRfXyAqLwotI2VuZGlmCSAv KiBIQVZFX0dDQ19fU1lOQ19JTlQzMl9UQVMgKi8KLSNlbmRpZgkgLyogX19hcm1fXyB8fCBfX2Fy bSB8fCBfX2FhcmNoNjRfXyAqLwotCi0KLS8qIFMvMzkwIGFuZCBTLzM5MHggTGludXggKDMyLSBh bmQgNjQtYml0IHpTZXJpZXMpICovCi0jaWYgZGVmaW5lZChfX3MzOTBfXykgfHwgZGVmaW5lZChf X3MzOTB4X18pCi0jZGVmaW5lIEhBU19URVNUX0FORF9TRVQKLQotdHlwZWRlZiB1bnNpZ25lZCBp bnQgc2xvY2tfdDsKLQotI2RlZmluZSBUQVMobG9jaykJICAgdGFzKGxvY2spCi0KLXN0YXRpYyBf X2lubGluZV9fIGludAotdGFzKHZvbGF0aWxlIHNsb2NrX3QgKmxvY2spCi17Ci0JaW50CQkJX3Jl cyA9IDA7Ci0KLQlfX2FzbV9fCV9fdm9sYXRpbGVfXygKLQkJIgljcyAJJTAsJTMsMCglMikJCVxu IgotOgkJIitkIihfcmVzKSwgIittIigqbG9jaykKLToJCSJhIihsb2NrKSwgImQiKDEpCi06CQki bWVtb3J5IiwgImNjIik7Ci0JcmV0dXJuIF9yZXM7Ci19Ci0KLSNlbmRpZgkgLyogX19zMzkwX18g fHwgX19zMzkweF9fICovCi0KLQotI2lmIGRlZmluZWQoX19zcGFyY19fKQkJLyogU3BhcmMgKi8K LS8qCi0gKiBTb2xhcmlzIGhhcyBhbHdheXMgcnVuIHNwYXJjIHByb2Nlc3NvcnMgaW4gVFNPICh0 b3RhbCBzdG9yZSkgbW9kZSwgYnV0Ci0gKiBsaW51eCBkaWRuJ3QgdXNlIHRvIGFuZCB0aGUgKkJT RHMgc3RpbGwgZG9uJ3QuIFNvLCBiZSBjYXJlZnVsIGFib3V0Ci0gKiBhY3F1aXJlL3JlbGVhc2Ug c2VtYW50aWNzLiBUaGUgQ1BVIHdpbGwgdHJlYXQgc3VwZXJmbHVvdXMgbWVtYmVycyBhcwotICog Tk9Qcywgc28gaXQncyBqdXN0IGNvZGUgc3BhY2UuCi0gKi8KLSNkZWZpbmUgSEFTX1RFU1RfQU5E X1NFVAotCi10eXBlZGVmIHVuc2lnbmVkIGNoYXIgc2xvY2tfdDsKLQotI2RlZmluZSBUQVMobG9j aykgdGFzKGxvY2spCi0KLXN0YXRpYyBfX2lubGluZV9fIGludAotdGFzKHZvbGF0aWxlIHNsb2Nr X3QgKmxvY2spCi17Ci0Jc2xvY2tfdAkJX3JlczsKLQotCS8qCi0JICogImNhcyIgd291bGQgYmUg YmV0dGVyIHRoYW4gImxkc3R1YiIsIGJ1dCBpdCBpcyBvbmx5IHByZXNlbnQgb24KLQkgKiBzcGFy Y3Y4cGx1cyBhbmQgbGF0ZXIsIHdoaWxlIHNvbWUgcGxhdGZvcm1zIHN0aWxsIHN1cHBvcnQgc3Bh cmN2NyBvcgotCSAqIHNwYXJjdjguICBBbHNvLCAiY2FzIiByZXF1aXJlcyB0aGF0IHRoZSBzeXN0 ZW0gYmUgcnVubmluZyBpbiBUU08gbW9kZS4KLQkgKi8KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygK LQkJIglsZHN0dWIJWyUyXSwgJTAJXG4iCi06CQkiPXIiKF9yZXMpLCAiK20iKCpsb2NrKQotOgkJ InIiKGxvY2spCi06CQkibWVtb3J5Iik7Ci0jaWYgZGVmaW5lZChfX3NwYXJjdjcpIHx8IGRlZmlu ZWQoX19zcGFyY192N19fKQotCS8qCi0JICogTm8gc3RiYXIgb3IgbWVtYmFyIGF2YWlsYWJsZSwg bHVja2lseSBubyBhY3R1YWxseSBwcm9kdWNlZCBoYXJkd2FyZQotCSAqIHJlcXVpcmVzIGEgYmFy cmllci4KLQkgKi8KLSNlbGlmIGRlZmluZWQoX19zcGFyY3Y4KSB8fCBkZWZpbmVkKF9fc3BhcmNf djhfXykKLQkvKiBzdGJhciBpcyBhdmFpbGFibGUgKGFuZCByZXF1aXJlZCBmb3IgYm90aCBQU08s IFJNTyksIG1lbWJhciBpc24ndCAqLwotCV9fYXNtX18gX192b2xhdGlsZV9fICgic3RiYXIJIFxu Ijo6OiJtZW1vcnkiKTsKLSNlbHNlCi0JLyoKLQkgKiAjTG9hZFN0b3JlIChSTU8pIHwgI0xvYWRM b2FkIChSTU8pIHRvZ2V0aGVyIGFyZSB0aGUgYXBwcm9wcmlhdGUgYWNxdWlyZQotCSAqIGJhcnJp ZXIgZm9yIHNwYXJjdjgrIHVwd2FyZHMuCi0JICovCi0JX19hc21fXyBfX3ZvbGF0aWxlX18gKCJt ZW1iYXIgI0xvYWRTdG9yZSB8ICNMb2FkTG9hZCBcbiI6OjoibWVtb3J5Iik7Ci0jZW5kaWYKLQly ZXR1cm4gKGludCkgX3JlczsKLX0KLQotI2lmIGRlZmluZWQoX19zcGFyY3Y3KSB8fCBkZWZpbmVk KF9fc3BhcmNfdjdfXykKLS8qCi0gKiBObyBzdGJhciBvciBtZW1iYXIgYXZhaWxhYmxlLCBsdWNr aWx5IG5vIGFjdHVhbGx5IHByb2R1Y2VkIGhhcmR3YXJlCi0gKiByZXF1aXJlcyBhIGJhcnJpZXIu ICBXZSBmYWxsIHRocm91Z2ggdG8gdGhlIGRlZmF1bHQgZ2NjIGRlZmluaXRpb24gb2YKLSAqIFNf VU5MT0NLIGluIHRoaXMgY2FzZS4KLSAqLwotI2VsaWYgZGVmaW5lZChfX3NwYXJjdjgpIHx8IGRl ZmluZWQoX19zcGFyY192OF9fKQotLyogc3RiYXIgaXMgYXZhaWxhYmxlIChhbmQgcmVxdWlyZWQg Zm9yIGJvdGggUFNPLCBSTU8pLCBtZW1iYXIgaXNuJ3QgKi8KLSNkZWZpbmUgU19VTkxPQ0sobG9j aykJXAotZG8gXAoteyBcCi0JX19hc21fXyBfX3ZvbGF0aWxlX18gKCJzdGJhcgkgXG4iOjo6Im1l bW9yeSIpOyBcCi0JKigodm9sYXRpbGUgc2xvY2tfdCAqKSAobG9jaykpID0gMDsgXAotfSB3aGls ZSAoMCkKLSNlbHNlCi0vKgotICogI0xvYWRTdG9yZSAoUk1PKSB8ICNTdG9yZVN0b3JlIChSTU8s IFBTTykgdG9nZXRoZXIgYXJlIHRoZSBhcHByb3ByaWF0ZQotICogcmVsZWFzZSBiYXJyaWVyIGZv ciBzcGFyY3Y4KyB1cHdhcmRzLgotICovCi0jZGVmaW5lIFNfVU5MT0NLKGxvY2spCVwKLWRvIFwK LXsgXAotCV9fYXNtX18gX192b2xhdGlsZV9fICgibWVtYmFyICNMb2FkU3RvcmUgfCAjU3RvcmVT dG9yZSBcbiI6OjoibWVtb3J5Iik7IFwKLQkqKCh2b2xhdGlsZSBzbG9ja190ICopIChsb2NrKSkg PSAwOyBcCi19IHdoaWxlICgwKQotI2VuZGlmCi0KLSNlbmRpZgkgLyogX19zcGFyY19fICovCi0K LQotLyogUG93ZXJQQyAqLwotI2lmIGRlZmluZWQoX19wcGNfXykgfHwgZGVmaW5lZChfX3Bvd2Vy cGNfXykgfHwgZGVmaW5lZChfX3BwYzY0X18pIHx8IGRlZmluZWQoX19wb3dlcnBjNjRfXykKLSNk ZWZpbmUgSEFTX1RFU1RfQU5EX1NFVAotCi10eXBlZGVmIHVuc2lnbmVkIGludCBzbG9ja190Owot Ci0jZGVmaW5lIFRBUyhsb2NrKSB0YXMobG9jaykKLQotLyogT24gUFBDLCBpdCdzIGEgd2luIHRv IHVzZSBhIG5vbi1sb2NraW5nIHRlc3QgYmVmb3JlIHRoZSBsd2FyeCAqLwotI2RlZmluZSBUQVNf U1BJTihsb2NrKQkoKihsb2NrKSA/IDEgOiBUQVMobG9jaykpCi0KLS8qCi0gKiBUaGUgc2Vjb25k IG9wZXJhbmQgb2YgYWRkaSBjYW4gaG9sZCBhIGNvbnN0YW50IHplcm8gb3IgYSByZWdpc3RlciBu dW1iZXIsCi0gKiBoZW5jZSBjb25zdHJhaW50ICI9JmIiIHRvIGF2b2lkIGFsbG9jYXRpbmcgcjAu ICAiYiIgc3RhbmRzIGZvciAiYWRkcmVzcwotICogYmFzZSByZWdpc3RlciI7IG1vc3Qgb3BlcmFu ZHMgaGF2aW5nIHRoaXMgcmVnaXN0ZXItb3ItemVybyBwcm9wZXJ0eSBhcmUKLSAqIGFkZHJlc3Mg YmFzZXMsIGUuZy4gdGhlIHNlY29uZCBvcGVyYW5kIG9mIGx3YXguCi0gKgotICogTk9URTogcGVy IHRoZSBFbmhhbmNlZCBQb3dlclBDIEFyY2hpdGVjdHVyZSBtYW51YWwsIHYxLjAgZGF0ZWQgNy1N YXktMjAwMiwKLSAqIGFuIGlzeW5jIGlzIGEgc3VmZmljaWVudCBzeW5jaHJvbml6YXRpb24gYmFy cmllciBhZnRlciBhIGx3YXJ4L3N0d2N4IGxvb3AuCi0gKiBCdXQgaWYgdGhlIHNwaW5sb2NrIGlz IGluIG9yZGluYXJ5IG1lbW9yeSwgd2UgY2FuIHVzZSBsd3N5bmMgaW5zdGVhZCBmb3IKLSAqIGJl dHRlciBwZXJmb3JtYW5jZS4KLSAqLwotc3RhdGljIF9faW5saW5lX18gaW50Ci10YXModm9sYXRp bGUgc2xvY2tfdCAqbG9jaykKLXsKLQlzbG9ja190IF90OwotCWludCBfcmVzOwotCi0JX19hc21f XyBfX3ZvbGF0aWxlX18oCi0iCWx3YXJ4ICAgJTAsMCwlMywxCVxuIgotIgljbXB3aSAgICUwLDAJ CVxuIgotIglibmUgICAgIDFmCQkJXG4iCi0iCWFkZGkgICAgJTAsJTAsMQkJXG4iCi0iCXN0d2N4 LiAgJTAsMCwlMwkJXG4iCi0iCWJlcSAgICAgMmYJCQlcbiIKLSIxOiBcbiIKLSIJbGkgICAgICAl MSwxCQlcbiIKLSIJYiAgICAgICAzZgkJCVxuIgotIjI6IFxuIgotIglsd3N5bmMJCQkJXG4iCi0i CWxpICAgICAgJTEsMAkJXG4iCi0iMzogXG4iCi06CSI9JmIiKF90KSwgIj1yIihfcmVzKSwgIitt IigqbG9jaykKLToJInIiKGxvY2spCi06CSJtZW1vcnkiLCAiY2MiKTsKLQlyZXR1cm4gX3JlczsK LX0KLQotLyoKLSAqIFBvd2VyUEMgU19VTkxPQ0sgaXMgYWxtb3N0IHN0YW5kYXJkIGJ1dCByZXF1 aXJlcyBhICJzeW5jIiBpbnN0cnVjdGlvbi4KLSAqIEJ1dCB3ZSBjYW4gdXNlIGx3c3luYyBpbnN0 ZWFkIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2UuCi0gKi8KLSNkZWZpbmUgU19VTkxPQ0sobG9jaykJ XAotZG8gXAoteyBcCi0JX19hc21fXyBfX3ZvbGF0aWxlX18gKCIJbHdzeW5jIFxuIiA6OjogIm1l bW9yeSIpOyBcCi0JKigodm9sYXRpbGUgc2xvY2tfdCAqKSAobG9jaykpID0gMDsgXAotfSB3aGls ZSAoMCkKLQotI2VuZGlmIC8qIHBvd2VycGMgKi8KLQotCi0jaWYgZGVmaW5lZChfX21pcHNfXykg JiYgIWRlZmluZWQoX19zZ2kpCS8qIG5vbi1TR0kgTUlQUyAqLwotI2RlZmluZSBIQVNfVEVTVF9B TkRfU0VUCi0KLXR5cGVkZWYgdW5zaWduZWQgaW50IHNsb2NrX3Q7Ci0KLSNkZWZpbmUgVEFTKGxv Y2spIHRhcyhsb2NrKQotCi0vKgotICogT3JpZ2luYWwgTUlQUy1JIHByb2Nlc3NvcnMgbGFja2Vk IHRoZSBMTC9TQyBpbnN0cnVjdGlvbnMsIGJ1dCBpZiB3ZSBhcmUKLSAqIHNvIHVuZm9ydHVuYXRl IGFzIHRvIGJlIHJ1bm5pbmcgb24gb25lIG9mIHRob3NlLCB3ZSBleHBlY3QgdGhhdCB0aGUga2Vy bmVsCi0gKiB3aWxsIGhhbmRsZSB0aGUgaWxsZWdhbC1pbnN0cnVjdGlvbiB0cmFwcyBhbmQgZW11 bGF0ZSB0aGVtIGZvciB1cy4gIE9uCi0gKiBhbnl0aGluZyBuZXdlciAoYW5kIHJlYWxseSwgTUlQ Uy1JIGlzIGV4dGluY3QpIExML1NDIGlzIHRoZSBvbmx5IHNhbmUKLSAqIGNob2ljZSBiZWNhdXNl IGFueSBvdGhlciBzeW5jaHJvbml6YXRpb24gbWV0aG9kIG11c3QgaW52b2x2ZSBhIGtlcm5lbAot ICogY2FsbC4gIFVuZm9ydHVuYXRlbHksIG1hbnkgdG9vbGNoYWlucyBzdGlsbCBkZWZhdWx0IHRv IE1JUFMtSSBhcyB0aGUKLSAqIGNvZGVnZW4gdGFyZ2V0OyBpZiB0aGUgc3ltYm9sIF9fbWlwcyBz aG93cyB0aGF0IHRoYXQncyB0aGUgY2FzZSwgd2UKLSAqIGhhdmUgdG8gZm9yY2UgdGhlIGFzc2Vt YmxlciB0byBhY2NlcHQgTEwvU0MuCi0gKgotICogUjEwMDAwIGFuZCB1cCBwcm9jZXNzb3JzIHJl cXVpcmUgYSBzZXBhcmF0ZSBTWU5DLCB3aGljaCBoYXMgdGhlIHNhbWUKLSAqIGlzc3VlcyBhcyBM TC9TQy4KLSAqLwotI2lmIF9fbWlwcyA8IDIKLSNkZWZpbmUgTUlQU19TRVRfTUlQUzIJIiAgICAg ICAuc2V0IG1pcHMyICAgICAgICAgIFxuIgotI2Vsc2UKLSNkZWZpbmUgTUlQU19TRVRfTUlQUzIK LSNlbmRpZgotCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQKLXRhcyh2b2xhdGlsZSBzbG9ja190ICps b2NrKQotewotCXZvbGF0aWxlIHNsb2NrX3QgKl9sID0gbG9jazsKLQlpbnQJCQlfcmVzOwotCWlu dAkJCV90bXA7Ci0KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkJIiAgICAgICAuc2V0IHB1c2gg ICAgICAgICAgIFxuIgotCQlNSVBTX1NFVF9NSVBTMgotCQkiICAgICAgIC5zZXQgbm9yZW9yZGVy ICAgICAgXG4iCi0JCSIgICAgICAgLnNldCBub21hY3JvICAgICAgICBcbiIKLQkJIiAgICAgICBs bCAgICAgICUwLCAlMiAgICAgIFxuIgotCQkiICAgICAgIG9yICAgICAgJTEsICUwLCAxICAgXG4i Ci0JCSIgICAgICAgc2MgICAgICAlMSwgJTIgICAgICBcbiIKLQkJIiAgICAgICB4b3JpICAgICUx LCAxICAgICAgIFxuIgotCQkiICAgICAgIG9yICAgICAgJTAsICUwLCAlMSAgXG4iCi0JCSIgICAg ICAgc3luYyAgICAgICAgICAgICAgICBcbiIKLQkJIiAgICAgICAuc2V0IHBvcCAgICAgICAgICAg ICAgIgotOgkJIj0mciIgKF9yZXMpLCAiPSZyIiAoX3RtcCksICIrUiIgKCpfbCkKLToJCS8qIG5v IGlucHV0cyAqLwotOgkJIm1lbW9yeSIpOwotCXJldHVybiBfcmVzOwotfQotCi0vKiBNSVBTIFNf VU5MT0NLIGlzIGFsbW9zdCBzdGFuZGFyZCBidXQgcmVxdWlyZXMgYSAic3luYyIgaW5zdHJ1Y3Rp b24gKi8KLSNkZWZpbmUgU19VTkxPQ0sobG9jaykJXAotZG8gXAoteyBcCi0JX19hc21fXyBfX3Zv bGF0aWxlX18oIFwKLQkJIiAgICAgICAuc2V0IHB1c2ggICAgICAgICAgIFxuIiBcCi0JCU1JUFNf U0VUX01JUFMyIFwKLQkJIiAgICAgICAuc2V0IG5vcmVvcmRlciAgICAgIFxuIiBcCi0JCSIgICAg ICAgLnNldCBub21hY3JvICAgICAgICBcbiIgXAotCQkiICAgICAgIHN5bmMgICAgICAgICAgICAg ICAgXG4iIFwKLQkJIiAgICAgICAuc2V0IHBvcCAgICAgICAgICAgICAgIiBcCi06CQkvKiBubyBv dXRwdXRzICovIFwKLToJCS8qIG5vIGlucHV0cyAqLwlcCi06CQkibWVtb3J5Iik7IFwKLQkqKCh2 b2xhdGlsZSBzbG9ja190ICopIChsb2NrKSkgPSAwOyBcCi19IHdoaWxlICgwKQotCi0jZW5kaWYg LyogX19taXBzX18gJiYgIV9fc2dpICovCi0KLQotCi0vKgotICogSWYgd2UgaGF2ZSBubyBwbGF0 Zm9ybS1zcGVjaWZpYyBrbm93bGVkZ2UsIGJ1dCB3ZSBmb3VuZCB0aGF0IHRoZSBjb21waWxlcgot ICogcHJvdmlkZXMgX19zeW5jX2xvY2tfdGVzdF9hbmRfc2V0KCksIHVzZSB0aGF0LiAgUHJlZmVy IHRoZSBpbnQtd2lkdGgKLSAqIHZlcnNpb24gb3ZlciB0aGUgY2hhci13aWR0aCB2ZXJzaW9uIGlm IHdlIGhhdmUgYm90aCwgb24gdGhlIHJhdGhlciBkdWJpb3VzCi0gKiBncm91bmRzIHRoYXQgdGhh dCdzIGtub3duIHRvIGJlIG1vcmUgbGlrZWx5IHRvIHdvcmsgaW4gdGhlIEFSTSBlY29zeXN0ZW0u Ci0gKiAoQnV0IHdlIGRlYWx0IHdpdGggQVJNIGFib3ZlLikKLSAqLwotI2lmICFkZWZpbmVkKEhB U19URVNUX0FORF9TRVQpCi0KLSNpZiBkZWZpbmVkKEhBVkVfR0NDX19TWU5DX0lOVDMyX1RBUykK LSNkZWZpbmUgSEFTX1RFU1RfQU5EX1NFVAotCi0jZGVmaW5lIFRBUyhsb2NrKSB0YXMobG9jaykK LQotdHlwZWRlZiBpbnQgc2xvY2tfdDsKLQotc3RhdGljIF9faW5saW5lX18gaW50Ci10YXModm9s YXRpbGUgc2xvY2tfdCAqbG9jaykKLXsKLQlyZXR1cm4gX19zeW5jX2xvY2tfdGVzdF9hbmRfc2V0 KGxvY2ssIDEpOwotfQotCi0jZGVmaW5lIFNfVU5MT0NLKGxvY2spIF9fc3luY19sb2NrX3JlbGVh c2UobG9jaykKLQotI2VsaWYgZGVmaW5lZChIQVZFX0dDQ19fU1lOQ19DSEFSX1RBUykKLSNkZWZp bmUgSEFTX1RFU1RfQU5EX1NFVAotCi0jZGVmaW5lIFRBUyhsb2NrKSB0YXMobG9jaykKLQotdHlw ZWRlZiBjaGFyIHNsb2NrX3Q7Ci0KLXN0YXRpYyBfX2lubGluZV9fIGludAotdGFzKHZvbGF0aWxl IHNsb2NrX3QgKmxvY2spCi17Ci0JcmV0dXJuIF9fc3luY19sb2NrX3Rlc3RfYW5kX3NldChsb2Nr LCAxKTsKLX0KLQotI2RlZmluZSBTX1VOTE9DSyhsb2NrKSBfX3N5bmNfbG9ja19yZWxlYXNlKGxv Y2spCi0KLSNlbmRpZgkgLyogSEFWRV9HQ0NfX1NZTkNfSU5UMzJfVEFTICovCi0KLSNlbmRpZgkv KiAhZGVmaW5lZChIQVNfVEVTVF9BTkRfU0VUKSAqLwotCi0KLS8qCi0gKiBEZWZhdWx0IGltcGxl bWVudGF0aW9uIG9mIFNfVU5MT0NLKCkgZm9yIGdjYy9pY2MuCi0gKgotICogTm90ZSB0aGF0IHRo aXMgaW1wbGVtZW50YXRpb24gaXMgdW5zYWZlIGZvciBhbnkgcGxhdGZvcm0gdGhhdCBjYW4gcmVv cmRlcgotICogYSBtZW1vcnkgYWNjZXNzIChlaXRoZXIgbG9hZCBvciBzdG9yZSkgYWZ0ZXIgYSBm b2xsb3dpbmcgc3RvcmUuICBUaGF0Ci0gKiBoYXBwZW5zIG5vdCB0byBiZSBwb3NzaWJsZSBvbiB4 ODYgYW5kIG1vc3QgbGVnYWN5IGFyY2hpdGVjdHVyZXMgKHNvbWUgYXJlCi0gKiBzaW5nbGUtcHJv Y2Vzc29yISksIGJ1dCBtYW55IG1vZGVybiBzeXN0ZW1zIGhhdmUgd2Vha2VyIG1lbW9yeSBvcmRl cmluZy4KLSAqIFRob3NlIHRoYXQgZG8gbXVzdCBkZWZpbmUgdGhlaXIgb3duIHZlcnNpb24gb2Yg U19VTkxPQ0soKSByYXRoZXIgdGhhbgotICogcmVseWluZyBvbiB0aGlzIG9uZS4KLSAqLwotI2lm ICFkZWZpbmVkKFNfVU5MT0NLKQotI2RlZmluZSBTX1VOTE9DSyhsb2NrKQlcCi0JZG8geyBfX2Fz bV9fIF9fdm9sYXRpbGVfXygiIiA6IDogOiAibWVtb3J5Iik7ICAqKGxvY2spID0gMDsgfSB3aGls ZSAoMCkKLSNlbmRpZgotCi0jZW5kaWYJLyogZGVmaW5lZChfX0dOVUNfXykgfHwgZGVmaW5lZChf X0lOVEVMX0NPTVBJTEVSKSAqLwotCi0KLS8qCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFBsYXRmb3Jt cyB0aGF0IHVzZSBub24tZ2NjIGlubGluZSBhc3NlbWJseToKLSAqIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICov Ci0KLSNpZiAhZGVmaW5lZChIQVNfVEVTVF9BTkRfU0VUKQkvKiBXZSBkaWRuJ3QgdHJpZ2dlciBh Ym92ZSwgbGV0J3MgdHJ5IGhlcmUgKi8KLQotI2lmZGVmIF9NU0NfVkVSCi10eXBlZGVmIExPTkcg c2xvY2tfdDsKLQotI2RlZmluZSBIQVNfVEVTVF9BTkRfU0VUCi0jZGVmaW5lIFRBUyhsb2NrKSAo SW50ZXJsb2NrZWRDb21wYXJlRXhjaGFuZ2UobG9jaywgMSwgMCkpCi0KLSNkZWZpbmUgU1BJTl9E RUxBWSgpIHNwaW5fZGVsYXkoKQotCi0vKiBJZiB1c2luZyBWaXN1YWwgQysrIG9uIFdpbjY0LCBp bmxpbmUgYXNzZW1ibHkgaXMgdW5hdmFpbGFibGUuCi0gKiBVc2UgYSBfbW1fcGF1c2UgaW50cmlu c2ljIGluc3RlYWQgb2YgcmVwIG5vcC4KLSAqLwotI2lmIGRlZmluZWQoX1dJTjY0KQotc3RhdGlj IF9fZm9yY2VpbmxpbmUgdm9pZAotc3Bpbl9kZWxheSh2b2lkKQotewotCV9tbV9wYXVzZSgpOwot fQotI2Vsc2UKLXN0YXRpYyBfX2ZvcmNlaW5saW5lIHZvaWQKLXNwaW5fZGVsYXkodm9pZCkKLXsK LQkvKiBTZWUgY29tbWVudCBmb3IgZ2NjIGNvZGUuIFNhbWUgY29kZSwgTUFTTSBzeW50YXggKi8K LQlfX2FzbSByZXAgbm9wOwotfQotI2VuZGlmCi0KLSNpbmNsdWRlIDxpbnRyaW4uaD4KLSNwcmFn bWEgaW50cmluc2ljKF9SZWFkV3JpdGVCYXJyaWVyKQotCi0jZGVmaW5lIFNfVU5MT0NLKGxvY2sp CVwKLQlkbyB7IF9SZWFkV3JpdGVCYXJyaWVyKCk7ICgqKGxvY2spKSA9IDA7IH0gd2hpbGUgKDAp Ci0KLSNlbmRpZgotCi0KLSNlbmRpZgkvKiAhZGVmaW5lZChIQVNfVEVTVF9BTkRfU0VUKSAqLwot Ci0KLS8qIEJsb3cgdXAgaWYgd2UgZGlkbid0IGhhdmUgYW55IHdheSB0byBkbyBzcGlubG9ja3Mg Ki8KLSNpZm5kZWYgSEFTX1RFU1RfQU5EX1NFVAotI2Vycm9yIFBvc3RncmVTUUwgZG9lcyBub3Qg aGF2ZSBzcGlubG9jayBzdXBwb3J0IG9uIHRoaXMgcGxhdGZvcm0uICBQbGVhc2UgcmVwb3J0IHRo aXMgdG8gcGdzcWwtYnVnc0BsaXN0cy5wb3N0Z3Jlc3FsLm9yZy4KLSNlbmRpZgotCi0KLS8qCi0g KiBEZWZhdWx0IERlZmluaXRpb25zIC0gb3ZlcnJpZGUgdGhlc2UgYWJvdmUgYXMgbmVlZGVkLgot ICovCi0KLSNpZiAhZGVmaW5lZChTX0xPQ0spCi0jZGVmaW5lIFNfTE9DSyhsb2NrKSBcCi0JKFRB Uyhsb2NrKSA/IHNfbG9jaygobG9jayksIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pIDog MCkKLSNlbmRpZgkgLyogU19MT0NLICovCi0KLSNpZiAhZGVmaW5lZChTX0xPQ0tfRlJFRSkKLSNk ZWZpbmUgU19MT0NLX0ZSRUUobG9jaykJKCoobG9jaykgPT0gMCkKLSNlbmRpZgkgLyogU19MT0NL X0ZSRUUgKi8KLQotI2lmICFkZWZpbmVkKFNfVU5MT0NLKQotLyoKLSAqIE91ciBkZWZhdWx0IGlt cGxlbWVudGF0aW9uIG9mIFNfVU5MT0NLIGlzIGVzc2VudGlhbGx5ICoobG9jaykgPSAwLiAgVGhp cwotICogaXMgdW5zYWZlIGlmIHRoZSBwbGF0Zm9ybSBjYW4gcmVvcmRlciBhIG1lbW9yeSBhY2Nl c3MgKGVpdGhlciBsb2FkIG9yCi0gKiBzdG9yZSkgYWZ0ZXIgYSBmb2xsb3dpbmcgc3RvcmU7IHBs YXRmb3JtcyB3aGVyZSB0aGlzIGlzIHBvc3NpYmxlIG11c3QKLSAqIGRlZmluZSB0aGVpciBvd24g U19VTkxPQ0suICBCdXQgQ1BVIHJlb3JkZXJpbmcgaXMgbm90IHRoZSBvbmx5IGNvbmNlcm46Ci0g KiBpZiB3ZSBzaW1wbHkgZGVmaW5lZCBTX1VOTE9DSygpIGFzIGFuIGlubGluZSBtYWNybywgdGhl IGNvbXBpbGVyIG1pZ2h0Ci0gKiByZW9yZGVyIGluc3RydWN0aW9ucyBmcm9tIGluc2lkZSB0aGUg Y3JpdGljYWwgc2VjdGlvbiB0byBvY2N1ciBhZnRlciB0aGUKLSAqIGxvY2sgcmVsZWFzZS4gIFNp bmNlIHRoZSBjb21waWxlciBwcm9iYWJseSBjYW4ndCBrbm93IHdoYXQgdGhlIGV4dGVybmFsCi0g KiBmdW5jdGlvbiBzX3VubG9jayBpcyBkb2luZywgcHV0dGluZyB0aGUgc2FtZSBsb2dpYyB0aGVy ZSBzaG91bGQgYmUgYWRlcXVhdGUuCi0gKiBBIHN1ZmZpY2llbnRseS1zbWFydCBnbG9iYWxseSBv cHRpbWl6aW5nIGNvbXBpbGVyIGNvdWxkIGJyZWFrIHRoYXQKLSAqIGFzc3VtcHRpb24sIHRob3Vn aCwgYW5kIHRoZSBjb3N0IG9mIGEgZnVuY3Rpb24gY2FsbCBmb3IgZXZlcnkgc3BpbmxvY2sKLSAq IHJlbGVhc2UgbWF5IGh1cnQgcGVyZm9ybWFuY2Ugc2lnbmlmaWNhbnRseSwgc28gd2UgdXNlIHRo aXMgaW1wbGVtZW50YXRpb24KLSAqIG9ubHkgZm9yIHBsYXRmb3JtcyB3aGVyZSB3ZSBkb24ndCBr bm93IG9mIGEgc3VpdGFibGUgaW50cmluc2ljLiAgRm9yIHRoZQotICogbW9zdCBwYXJ0LCB0aG9z ZSBhcmUgcmVsYXRpdmVseSBvYnNjdXJlIHBsYXRmb3JtL2NvbXBpbGVyIGNvbWJpbmF0aW9ucyB0 bwotICogd2hpY2ggdGhlIFBvc3RncmVTUUwgcHJvamVjdCBkb2VzIG5vdCBoYXZlIGFjY2Vzcy4K LSAqLwotI2RlZmluZSBVU0VfREVGQVVMVF9TX1VOTE9DSwotZXh0ZXJuIHZvaWQgc191bmxvY2so dm9sYXRpbGUgc2xvY2tfdCAqbG9jayk7Ci0jZGVmaW5lIFNfVU5MT0NLKGxvY2spCQlzX3VubG9j ayhsb2NrKQotI2VuZGlmCSAvKiBTX1VOTE9DSyAqLwotCi0jaWYgIWRlZmluZWQoU19JTklUX0xP Q0spCi0jZGVmaW5lIFNfSU5JVF9MT0NLKGxvY2spCVNfVU5MT0NLKGxvY2spCi0jZW5kaWYJIC8q IFNfSU5JVF9MT0NLICovCi0KLSNpZiAhZGVmaW5lZChTUElOX0RFTEFZKQotI2RlZmluZSBTUElO X0RFTEFZKCkJKCh2b2lkKSAwKQotI2VuZGlmCSAvKiBTUElOX0RFTEFZICovCi0KLSNpZiAhZGVm aW5lZChUQVMpCi1leHRlcm4gaW50CXRhcyh2b2xhdGlsZSBzbG9ja190ICpsb2NrKTsJCS8qIGlu IHBvcnQvLi4uL3Rhcy5zLCBvcgotCQkJCQkJCQkJCQkJICogc19sb2NrLmMgKi8KLQotI2RlZmlu ZSBUQVMobG9jaykJCXRhcyhsb2NrKQotI2VuZGlmCSAvKiBUQVMgKi8KLQotI2lmICFkZWZpbmVk KFRBU19TUElOKQotI2RlZmluZSBUQVNfU1BJTihsb2NrKQlUQVMobG9jaykKLSNlbmRpZgkgLyog VEFTX1NQSU4gKi8KLQotCi0vKgotICogUGxhdGZvcm0taW5kZXBlbmRlbnQgb3V0LW9mLWxpbmUg c3VwcG9ydCByb3V0aW5lcwotICovCi1leHRlcm4gaW50IHNfbG9jayh2b2xhdGlsZSBzbG9ja190 ICpsb2NrLCBjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqZnVuYyk7Ci0K LS8qIFN1cHBvcnQgZm9yIGR5bmFtaWMgYWRqdXN0bWVudCBvZiBzcGluc19wZXJfZGVsYXkgKi8K LSNkZWZpbmUgREVGQVVMVF9TUElOU19QRVJfREVMQVkgIDEwMAotCi1leHRlcm4gdm9pZCBzZXRf c3BpbnNfcGVyX2RlbGF5KGludCBzaGFyZWRfc3BpbnNfcGVyX2RlbGF5KTsKLWV4dGVybiBpbnQJ dXBkYXRlX3NwaW5zX3Blcl9kZWxheShpbnQgc2hhcmVkX3NwaW5zX3Blcl9kZWxheSk7Ci0KLS8q Ci0gKiBTdXBwb3J0IGZvciBzcGluIGRlbGF5IHdoaWNoIGlzIHVzZWZ1bCBpbiB2YXJpb3VzIHBs YWNlcyB3aGVyZQotICogc3BpbmxvY2stbGlrZSBwcm9jZWR1cmVzIHRha2UgcGxhY2UuCi0gKi8K LXR5cGVkZWYgc3RydWN0Ci17Ci0JaW50CQkJc3BpbnM7Ci0JaW50CQkJZGVsYXlzOwotCWludAkJ CWN1cl9kZWxheTsKLQljb25zdCBjaGFyICpmaWxlOwotCWludAkJCWxpbmU7Ci0JY29uc3QgY2hh ciAqZnVuYzsKLX0gU3BpbkRlbGF5U3RhdHVzOwotCi1zdGF0aWMgaW5saW5lIHZvaWQKLWluaXRf c3Bpbl9kZWxheShTcGluRGVsYXlTdGF0dXMgKnN0YXR1cywKLQkJCQljb25zdCBjaGFyICpmaWxl LCBpbnQgbGluZSwgY29uc3QgY2hhciAqZnVuYykKLXsKLQlzdGF0dXMtPnNwaW5zID0gMDsKLQlz dGF0dXMtPmRlbGF5cyA9IDA7Ci0Jc3RhdHVzLT5jdXJfZGVsYXkgPSAwOwotCXN0YXR1cy0+Zmls ZSA9IGZpbGU7Ci0Jc3RhdHVzLT5saW5lID0gbGluZTsKLQlzdGF0dXMtPmZ1bmMgPSBmdW5jOwot fQotCi0jZGVmaW5lIGluaXRfbG9jYWxfc3Bpbl9kZWxheShzdGF0dXMpIGluaXRfc3Bpbl9kZWxh eShzdGF0dXMsIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pCi1leHRlcm4gdm9pZCBwZXJm b3JtX3NwaW5fZGVsYXkoU3BpbkRlbGF5U3RhdHVzICpzdGF0dXMpOwotZXh0ZXJuIHZvaWQgZmlu aXNoX3NwaW5fZGVsYXkoU3BpbkRlbGF5U3RhdHVzICpzdGF0dXMpOwotCi0jZW5kaWYJIC8qIFNf TE9DS19IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL3NwaW4uaCBiL3NyYy9p bmNsdWRlL3N0b3JhZ2Uvc3Bpbi5oCmluZGV4IDMzZTJhYjg3NTcyLi5lZWNlNzAyNmQzYiAxMDA2 NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9zcGluLmgKKysrIGIvc3JjL2luY2x1ZGUvc3Rv cmFnZS9zcGluLmgKQEAgLTE0LDkgKzE0LDExIEBACiAgKgkJQWNxdWlyZSBhIHNwaW5sb2NrLCB3 YWl0aW5nIGlmIG5lY2Vzc2FyeS4KICAqCQlUaW1lIG91dCBhbmQgYWJvcnQoKSBpZiB1bmFibGUg dG8gYWNxdWlyZSB0aGUgbG9jayBpbiBhCiAgKgkJInJlYXNvbmFibGUiIGFtb3VudCBvZiB0aW1l IC0tLSB0eXBpY2FsbHkgfiAxIG1pbnV0ZS4KKyAqCQlBY3F1aXJlIChpbmNsdWRpbmcgcmVhZCBi YXJyaWVyKSBzZW1hbnRpY3MuCiAgKgogICoJdm9pZCBTcGluTG9ja1JlbGVhc2Uodm9sYXRpbGUg c2xvY2tfdCAqbG9jaykKICAqCQlVbmxvY2sgYSBwcmV2aW91c2x5IGFjcXVpcmVkIGxvY2suCisg KgkJUmVsZWFzZSAoaW5jbHVkaW5nIHdyaXRlIGJhcnJpZXIpIHNlbWFudGljcy4KICAqCiAgKgli b29sIFNwaW5Mb2NrRnJlZShzbG9ja190ICpsb2NrKQogICoJCVRlc3RzIGlmIHRoZSBsb2NrIGlz IGZyZWUuIFJldHVybnMgdHJ1ZSBpZiBmcmVlLCBmYWxzZSBpZiBsb2NrZWQuCkBAIC0zNSwxMSAr MzcsNiBAQAogICoJZm9yIGEgQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKSB0byBvY2N1ciB3aGlsZSBo b2xkaW5nIGEgc3BpbmxvY2ssIGFuZCBzbwogICoJaXQgaXMgbm90IG5lY2Vzc2FyeSB0byBkbyBI T0xEL1JFU1VNRV9JTlRFUlJVUFRTKCkgaW4gdGhlc2UgbWFjcm9zLgogICoKLSAqCVRoZXNlIG1h Y3JvcyBhcmUgaW1wbGVtZW50ZWQgaW4gdGVybXMgb2YgaGFyZHdhcmUtZGVwZW5kZW50IG1hY3Jv cwotICoJc3VwcGxpZWQgYnkgc19sb2NrLmguICBUaGVyZSBpcyBub3QgY3VycmVudGx5IGFueSBl eHRyYSBmdW5jdGlvbmFsaXR5Ci0gKglhZGRlZCBieSB0aGlzIGhlYWRlciwgYnV0IHRoZXJlIGhh cyBiZWVuIGluIHRoZSBwYXN0IGFuZCBtYXkgc29tZWRheQotICoJYmUgYWdhaW4uCi0gKgogICoK ICAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBE ZXZlbG9wbWVudCBHcm91cAogICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRz IG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKQEAgLTUxLDE1ICs0OCw2OCBAQAogI2lm bmRlZiBTUElOX0gKICNkZWZpbmUgU1BJTl9ICiAKLSNpbmNsdWRlICJzdG9yYWdlL3NfbG9jay5o IgorI2lmZGVmIEZST05URU5ECisjZXJyb3IgInNwaW4uaCBtYXkgbm90IGJlIGluY2x1ZGVkIGZy b20gZnJvbnRlbmQgY29kZSIKKyNlbmRpZgorCisjaW5jbHVkZSAicG9ydC9hdG9taWNzLmgiCisK Ky8qIFN1cHBvcnQgZm9yIGR5bmFtaWMgYWRqdXN0bWVudCBvZiBzcGluc19wZXJfZGVsYXkgKi8K KyNkZWZpbmUgREVGQVVMVF9TUElOU19QRVJfREVMQVkgIDEwMAorCit0eXBlZGVmIHBnX2F0b21p Y19mbGFnIHNsb2NrX3Q7CisKKy8qCisgKiBTdXBwb3J0IGZvciBzcGluIGRlbGF5IHdoaWNoIGlz IHVzZWZ1bCBpbiB2YXJpb3VzIHBsYWNlcyB3aGVyZQorICogc3BpbmxvY2stbGlrZSBwcm9jZWR1 cmVzIHRha2UgcGxhY2UuCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisJaW50CQkJc3BpbnM7CisJ aW50CQkJZGVsYXlzOworCWludAkJCWN1cl9kZWxheTsKKwljb25zdCBjaGFyICpmaWxlOworCWlu dAkJCWxpbmU7CisJY29uc3QgY2hhciAqZnVuYzsKK30gU3BpbkRlbGF5U3RhdHVzOworCitzdGF0 aWMgaW5saW5lIHZvaWQKK2luaXRfc3Bpbl9kZWxheShTcGluRGVsYXlTdGF0dXMgKnN0YXR1cywK KwkJCQljb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqZnVuYykKK3sKKwlz dGF0dXMtPnNwaW5zID0gMDsKKwlzdGF0dXMtPmRlbGF5cyA9IDA7CisJc3RhdHVzLT5jdXJfZGVs YXkgPSAwOworCXN0YXR1cy0+ZmlsZSA9IGZpbGU7CisJc3RhdHVzLT5saW5lID0gbGluZTsKKwlz dGF0dXMtPmZ1bmMgPSBmdW5jOworfQogCisjZGVmaW5lIGluaXRfbG9jYWxfc3Bpbl9kZWxheShz dGF0dXMpIGluaXRfc3Bpbl9kZWxheShzdGF0dXMsIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5j X18pCitleHRlcm4gdm9pZCBwZXJmb3JtX3NwaW5fZGVsYXkoU3BpbkRlbGF5U3RhdHVzICpzdGF0 dXMpOworZXh0ZXJuIHZvaWQgZmluaXNoX3NwaW5fZGVsYXkoU3BpbkRlbGF5U3RhdHVzICpzdGF0 dXMpOworZXh0ZXJuIHZvaWQgc2V0X3NwaW5zX3Blcl9kZWxheShpbnQgc2hhcmVkX3NwaW5zX3Bl cl9kZWxheSk7CitleHRlcm4gaW50CXVwZGF0ZV9zcGluc19wZXJfZGVsYXkoaW50IHNoYXJlZF9z cGluc19wZXJfZGVsYXkpOwogCi0jZGVmaW5lIFNwaW5Mb2NrSW5pdChsb2NrKQlTX0lOSVRfTE9D Syhsb2NrKQorLyogT3V0LW9mLWxpbmUgcGFydCBvZiBzcGlubG9jayBhY3F1aXNpdGlvbi4gKi8K K2V4dGVybiBpbnQJc19sb2NrKHZvbGF0aWxlIHNsb2NrX3QgKmxvY2ssCisJCQkJICAgY29uc3Qg Y2hhciAqZmlsZSwgaW50IGxpbmUsCisJCQkJICAgY29uc3QgY2hhciAqZnVuYyk7CiAKLSNkZWZp bmUgU3BpbkxvY2tBY3F1aXJlKGxvY2spIFNfTE9DSyhsb2NrKQorc3RhdGljIGlubGluZSB2b2lk CitTcGluTG9ja0luaXQodm9sYXRpbGUgc2xvY2tfdCAqbG9jaykKK3sKKwlwZ19hdG9taWNfaW5p dF9mbGFnKGxvY2spOworfQogCi0jZGVmaW5lIFNwaW5Mb2NrUmVsZWFzZShsb2NrKSBTX1VOTE9D Syhsb2NrKQorI2RlZmluZSBTcGluTG9ja0FjcXVpcmUobG9jaykJCQkJCQlcCisJKHBnX2F0b21p Y190ZXN0X3NldF9mbGFnKGxvY2spID8gMCA6CQkJXAorCSBzX2xvY2soKGxvY2spLCBfX0ZJTEVf XywgX19MSU5FX18sIF9fZnVuY19fKSkKIAotI2RlZmluZSBTcGluTG9ja0ZyZWUobG9jaykJU19M T0NLX0ZSRUUobG9jaykKK3N0YXRpYyBpbmxpbmUgdm9pZAorU3BpbkxvY2tSZWxlYXNlKHZvbGF0 aWxlIHNsb2NrX3QgKmxvY2spCit7CisJcGdfYXRvbWljX2NsZWFyX2ZsYWcobG9jayk7Cit9CiAK ICNlbmRpZgkJCQkJCQkvKiBTUElOX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mv cmVncmVzcy5jIGIvc3JjL3Rlc3QvcmVncmVzcy9yZWdyZXNzLmMKaW5kZXggYTJkYjYwODA4NzYu LmRkNDAzNGU4ZWRhIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3JlZ3Jlc3MuYworKysg Yi9zcmMvdGVzdC9yZWdyZXNzL3JlZ3Jlc3MuYwpAQCAtNjU4LDMyICs2NTgsOSBAQCB0ZXN0X3Nw aW5sb2NrKHZvaWQpCiAJCVNwaW5Mb2NrQWNxdWlyZSgmc3RydWN0X3dfbG9jay5sb2NrKTsKIAkJ U3BpbkxvY2tSZWxlYXNlKCZzdHJ1Y3Rfd19sb2NrLmxvY2spOwogCi0JCS8qIHRlc3QgYmFzaWMg b3BlcmF0aW9ucyB2aWEgdW5kZXJseWluZyBTXyogQVBJICovCi0JCVNfSU5JVF9MT0NLKCZzdHJ1 Y3Rfd19sb2NrLmxvY2spOwotCQlTX0xPQ0soJnN0cnVjdF93X2xvY2subG9jayk7Ci0JCVNfVU5M T0NLKCZzdHJ1Y3Rfd19sb2NrLmxvY2spOwotCiAJCS8qIGFuZCB0aGF0ICJjb250ZW5kZWQiIGFj cXVpc2l0aW9uIHdvcmtzICovCiAJCXNfbG9jaygmc3RydWN0X3dfbG9jay5sb2NrLCAidGVzdGZp bGUiLCAxNywgInRlc3RmdW5jIik7Ci0JCVNfVU5MT0NLKCZzdHJ1Y3Rfd19sb2NrLmxvY2spOwot Ci0JCS8qCi0JCSAqIENoZWNrLCB1c2luZyBUQVMgZGlyZWN0bHksIHRoYXQgYSBzaW5nbGUgc3Bp biBjeWNsZSBkb2Vzbid0IGJsb2NrCi0JCSAqIHdoZW4gYWNxdWlyaW5nIGFuIGFscmVhZHkgYWNx dWlyZWQgbG9jay4KLQkJICovCi0jaWZkZWYgVEFTCi0JCVNfTE9DSygmc3RydWN0X3dfbG9jay5s b2NrKTsKLQotCQlpZiAoIVRBUygmc3RydWN0X3dfbG9jay5sb2NrKSkKLQkJCWVsb2coRVJST1Is ICJhY3F1aXJlZCBhbHJlYWR5IGhlbGQgc3BpbmxvY2siKTsKLQotI2lmZGVmIFRBU19TUElOCi0J CWlmICghVEFTX1NQSU4oJnN0cnVjdF93X2xvY2subG9jaykpCi0JCQllbG9nKEVSUk9SLCAiYWNx dWlyZWQgYWxyZWFkeSBoZWxkIHNwaW5sb2NrIik7Ci0jZW5kaWYJCQkJCQkJLyogZGVmaW5lZChU QVNfU1BJTikgKi8KLQotCQlTX1VOTE9DSygmc3RydWN0X3dfbG9jay5sb2NrKTsKLSNlbmRpZgkJ CQkJCQkvKiBkZWZpbmVkKFRBUykgKi8KKwkJU3BpbkxvY2tSZWxlYXNlKCZzdHJ1Y3Rfd19sb2Nr LmxvY2spOwogCiAJCS8qCiAJCSAqIFZlcmlmeSB0aGF0IGFmdGVyIGFsbCBvZiB0aGlzIHRoZSBu b24tbG9jayBjb250ZW50cyBhcmUgc3RpbGwKLS0gCjIuNTAuMSAoQXBwbGUgR2l0LTE1NSkKCg== --0000000000009b22960643784acd Content-Type: application/octet-stream; name="v2-0005-Remove-configure-meson-checks-for-atomics.patch" Content-Disposition: attachment; filename="v2-0005-Remove-configure-meson-checks-for-atomics.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mhxbvo5h4 RnJvbSA3YTU1ZGVkMzUzMjUwYmViN2I3N2Q5MDI4MTM3ODg1MDViNzlkYmRhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUaG9tYXMgTXVucm8gPHRob21hcy5tdW5yb0BnbWFpbC5jb20+ CkRhdGU6IE1vbiwgMTAgTm92IDIwMjUgMjM6MDM6MDAgKzEzMDAKU3ViamVjdDogW1BBVENIIHYy IDUvNV0gUmVtb3ZlIGNvbmZpZ3VyZS9tZXNvbiBjaGVja3MgZm9yIGF0b21pY3MuCgpUaGVzZSBh cmUgbm93IHVucmVmZXJlbmNlZCwgYnV0IHRoaXMgd2FzIGtlcHQgc2VwYXJhdGUgZnJvbSB0aGUg dHdvCnBhdGNoZXMgdGhhdCBkaWQgdGhhdCB0byBkaXNlbnRhbmdsZSB0aGVtLgotLS0KIGNvbmZp Zy9jLWNvbXBpbGVyLm00ICAgICAgICB8ICA5OSAtLS0tLS0tLS0tLS0tLS0tLS0KIGNvbmZpZ3Vy ZSAgICAgICAgICAgICAgICAgICB8IDIwMCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KIGNvbmZpZ3VyZS5hYyAgICAgICAgICAgICAgICB8ICAxMCAtLQogbWVzb24uYnVpbGQg ICAgICAgICAgICAgICAgIHwgIDYzIC0tLS0tLS0tLS0tLQogc3JjL2JhY2tlbmQvTWFrZWZpbGUg ICAgICAgIHwgICAyICstCiBzcmMvYmFja2VuZC9wb3J0Ly5naXRpZ25vcmUgfCAgIDEgLQogc3Jj L2luY2x1ZGUvcGdfY29uZmlnLmguaW4gIHwgIDIwIC0tLS0KIDcgZmlsZXMgY2hhbmdlZCwgMSBp bnNlcnRpb24oKyksIDM5NCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9jb25maWcvYy1jb21w aWxlci5tNCBiL2NvbmZpZy9jLWNvbXBpbGVyLm00CmluZGV4IDIzNmE1OWU4NTM2Li5lMDU1NzAy NTViMyAxMDA2NDQKLS0tIGEvY29uZmlnL2MtY29tcGlsZXIubTQKKysrIGIvY29uZmlnL2MtY29t cGlsZXIubTQKQEAgLTQ0NiwxMDUgKzQ0Niw2IEBAIEFDX0RFRlVOKFtQR0FDX1BST0dfQ0NfTERG TEFHU19PUFRdLAogW1BHQUNfUFJPR19DQ19MRF9WQVJGTEFHU19PUFQoTERGTEFHUywgWyQxXSwg WyQyXSkKIF0pIyBQR0FDX1BST0dfQ0NfTERGTEFHU19PUFQKIAotCi0jIFBHQUNfSEFWRV9HQ0Nf X1NZTkNfQ0hBUl9UQVMKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBDaGVjayBp ZiB0aGUgQyBjb21waWxlciB1bmRlcnN0YW5kcyBfX3N5bmNfbG9ja190ZXN0X2FuZF9zZXQoY2hh ciksCi0jIGFuZCBkZWZpbmUgSEFWRV9HQ0NfX1NZTkNfQ0hBUl9UQVMKLSMKLSMgTkI6IFRoZXJl IGFyZSBwbGF0Zm9ybXMgd2hlcmUgdGVzdF9hbmRfc2V0IGlzIGF2YWlsYWJsZSBidXQgY29tcGFy ZV9hbmRfc3dhcAotIyBpcyBub3QsIHNvIHRlc3QgdGhpcyBzZXBhcmF0ZWx5LgotIyBOQjogU29t ZSBwbGF0Zm9ybXMgb25seSBkbyAzMmJpdCB0YXMsIG90aGVycyBvbmx5IGRvIDhiaXQgdGFzLiBU ZXN0IGJvdGguCi1BQ19ERUZVTihbUEdBQ19IQVZFX0dDQ19fU1lOQ19DSEFSX1RBU10sCi1bQUNf Q0FDSEVfQ0hFQ0soZm9yIGJ1aWx0aW4gX19zeW5jIGNoYXIgbG9ja2luZyBmdW5jdGlvbnMsIHBn YWNfY3ZfZ2NjX3N5bmNfY2hhcl90YXMsCi1bQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JB TShbXSwKLSAgW2NoYXIgbG9jayA9IDA7Ci0gICBfX3N5bmNfbG9ja190ZXN0X2FuZF9zZXQoJmxv Y2ssIDEpOwotICAgX19zeW5jX2xvY2tfcmVsZWFzZSgmbG9jayk7XSldLAotICBbcGdhY19jdl9n Y2Nfc3luY19jaGFyX3Rhcz0ieWVzIl0sCi0gIFtwZ2FjX2N2X2djY19zeW5jX2NoYXJfdGFzPSJu byJdKV0pCi1pZiB0ZXN0IHgiJHBnYWNfY3ZfZ2NjX3N5bmNfY2hhcl90YXMiID0geCJ5ZXMiOyB0 aGVuCi0gIEFDX0RFRklORShIQVZFX0dDQ19fU1lOQ19DSEFSX1RBUywgMSwgW0RlZmluZSB0byAx IGlmIHlvdSBoYXZlIF9fc3luY19sb2NrX3Rlc3RfYW5kX3NldChjaGFyICopIGFuZCBmcmllbmRz Ll0pCi1maV0pIyBQR0FDX0hBVkVfR0NDX19TWU5DX0NIQVJfVEFTCi0KLSMgUEdBQ19IQVZFX0dD Q19fU1lOQ19JTlQzMl9UQVMKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgQ2hl Y2sgaWYgdGhlIEMgY29tcGlsZXIgdW5kZXJzdGFuZHMgX19zeW5jX2xvY2tfdGVzdF9hbmRfc2V0 KCksCi0jIGFuZCBkZWZpbmUgSEFWRV9HQ0NfX1NZTkNfSU5UMzJfVEFTCi1BQ19ERUZVTihbUEdB Q19IQVZFX0dDQ19fU1lOQ19JTlQzMl9UQVNdLAotW0FDX0NBQ0hFX0NIRUNLKGZvciBidWlsdGlu IF9fc3luYyBpbnQzMiBsb2NraW5nIGZ1bmN0aW9ucywgcGdhY19jdl9nY2Nfc3luY19pbnQzMl90 YXMsCi1bQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbXSwKLSAgW2ludCBsb2NrID0g MDsKLSAgIF9fc3luY19sb2NrX3Rlc3RfYW5kX3NldCgmbG9jaywgMSk7Ci0gICBfX3N5bmNfbG9j a19yZWxlYXNlKCZsb2NrKTtdKV0sCi0gIFtwZ2FjX2N2X2djY19zeW5jX2ludDMyX3Rhcz0ieWVz Il0sCi0gIFtwZ2FjX2N2X2djY19zeW5jX2ludDMyX3Rhcz0ibm8iXSldKQotaWYgdGVzdCB4IiRw Z2FjX2N2X2djY19zeW5jX2ludDMyX3RhcyIgPSB4InllcyI7IHRoZW4KLSAgQUNfREVGSU5FKEhB VkVfR0NDX19TWU5DX0lOVDMyX1RBUywgMSwgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIF9fc3lu Y19sb2NrX3Rlc3RfYW5kX3NldChpbnQgKikgYW5kIGZyaWVuZHMuXSkKLWZpXSkjIFBHQUNfSEFW RV9HQ0NfX1NZTkNfSU5UMzJfVEFTCi0KLSMgUEdBQ19IQVZFX0dDQ19fU1lOQ19JTlQzMl9DQVMK LSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgQ2hlY2sgaWYgdGhlIEMgY29tcGls ZXIgdW5kZXJzdGFuZHMgX19zeW5jX2NvbXBhcmVfYW5kX3N3YXAoKSBmb3IgMzJiaXQKLSMgdHlw ZXMsIGFuZCBkZWZpbmUgSEFWRV9HQ0NfX1NZTkNfSU5UMzJfQ0FTIGlmIHNvLgotQUNfREVGVU4o W1BHQUNfSEFWRV9HQ0NfX1NZTkNfSU5UMzJfQ0FTXSwKLVtBQ19DQUNIRV9DSEVDSyhmb3IgYnVp bHRpbiBfX3N5bmMgaW50MzIgYXRvbWljIG9wZXJhdGlvbnMsIHBnYWNfY3ZfZ2NjX3N5bmNfaW50 MzJfY2FzLAotW0FDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW10sCi0gIFtpbnQgdmFs ID0gMDsKLSAgIF9fc3luY192YWxfY29tcGFyZV9hbmRfc3dhcCgmdmFsLCAwLCAzNyk7XSldLAot ICBbcGdhY19jdl9nY2Nfc3luY19pbnQzMl9jYXM9InllcyJdLAotICBbcGdhY19jdl9nY2Nfc3lu Y19pbnQzMl9jYXM9Im5vIl0pXSkKLWlmIHRlc3QgeCIkcGdhY19jdl9nY2Nfc3luY19pbnQzMl9j YXMiID0geCJ5ZXMiOyB0aGVuCi0gIEFDX0RFRklORShIQVZFX0dDQ19fU1lOQ19JTlQzMl9DQVMs IDEsIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSBfX3N5bmNfdmFsX2NvbXBhcmVfYW5kX3N3YXAo aW50ICosIGludCwgaW50KS5dKQotZmldKSMgUEdBQ19IQVZFX0dDQ19fU1lOQ19JTlQzMl9DQVMK LQotIyBQR0FDX0hBVkVfR0NDX19TWU5DX0lOVDY0X0NBUwotIyAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQotIyBDaGVjayBpZiB0aGUgQyBjb21waWxlciB1bmRlcnN0YW5kcyBfX3N5bmNf Y29tcGFyZV9hbmRfc3dhcCgpIGZvciA2NGJpdAotIyB0eXBlcywgYW5kIGRlZmluZSBIQVZFX0dD Q19fU1lOQ19JTlQ2NF9DQVMgaWYgc28uCi1BQ19ERUZVTihbUEdBQ19IQVZFX0dDQ19fU1lOQ19J TlQ2NF9DQVNdLAotW0FDX0NBQ0hFX0NIRUNLKGZvciBidWlsdGluIF9fc3luYyBpbnQ2NCBhdG9t aWMgb3BlcmF0aW9ucywgcGdhY19jdl9nY2Nfc3luY19pbnQ2NF9jYXMsCi1bQUNfTElOS19JRkVM U0UoW0FDX0xBTkdfUFJPR1JBTShbI2luY2x1ZGUgPHN0ZGludC5oPl0sCi0gIFtpbnQ2NF90IGxv Y2sgPSAwOwotICAgX19zeW5jX3ZhbF9jb21wYXJlX2FuZF9zd2FwKCZsb2NrLCAwLCAoaW50NjRf dCkgMzcpO10pXSwKLSAgW3BnYWNfY3ZfZ2NjX3N5bmNfaW50NjRfY2FzPSJ5ZXMiXSwKLSAgW3Bn YWNfY3ZfZ2NjX3N5bmNfaW50NjRfY2FzPSJubyJdKV0pCi1pZiB0ZXN0IHgiJHBnYWNfY3ZfZ2Nj X3N5bmNfaW50NjRfY2FzIiA9IHgieWVzIjsgdGhlbgotICBBQ19ERUZJTkUoSEFWRV9HQ0NfX1NZ TkNfSU5UNjRfQ0FTLCAxLCBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgX19zeW5jX3ZhbF9jb21w YXJlX2FuZF9zd2FwKGludDY0X3QgKiwgaW50NjRfdCwgaW50NjRfdCkuXSkKLWZpXSkjIFBHQUNf SEFWRV9HQ0NfX1NZTkNfSU5UNjRfQ0FTCi0KLSMgUEdBQ19IQVZFX0dDQ19fQVRPTUlDX0lOVDMy X0NBUwotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIENoZWNrIGlmIHRoZSBD IGNvbXBpbGVyIHVuZGVyc3RhbmRzIF9fYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2VfbigpIGZvciAz MmJpdAotIyB0eXBlcywgYW5kIGRlZmluZSBIQVZFX0dDQ19fQVRPTUlDX0lOVDMyX0NBUyBpZiBz by4KLUFDX0RFRlVOKFtQR0FDX0hBVkVfR0NDX19BVE9NSUNfSU5UMzJfQ0FTXSwKLVtBQ19DQUNI RV9DSEVDSyhmb3IgYnVpbHRpbiBfX2F0b21pYyBpbnQzMiBhdG9taWMgb3BlcmF0aW9ucywgcGdh Y19jdl9nY2NfYXRvbWljX2ludDMyX2NhcywKLVtBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9H UkFNKFtdLAotICBbaW50IHZhbCA9IDA7Ci0gICBpbnQgZXhwZWN0ID0gMDsKLSAgIF9fYXRvbWlj X2NvbXBhcmVfZXhjaGFuZ2VfbigmdmFsLCAmZXhwZWN0LCAzNywgMCwgX19BVE9NSUNfU0VRX0NT VCwgX19BVE9NSUNfUkVMQVhFRCk7XSldLAotICBbcGdhY19jdl9nY2NfYXRvbWljX2ludDMyX2Nh cz0ieWVzIl0sCi0gIFtwZ2FjX2N2X2djY19hdG9taWNfaW50MzJfY2FzPSJubyJdKV0pCi1pZiB0 ZXN0IHgiJHBnYWNfY3ZfZ2NjX2F0b21pY19pbnQzMl9jYXMiID0geCJ5ZXMiOyB0aGVuCi0gIEFD X0RFRklORShIQVZFX0dDQ19fQVRPTUlDX0lOVDMyX0NBUywgMSwgW0RlZmluZSB0byAxIGlmIHlv dSBoYXZlIF9fYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2VfbihpbnQgKiwgaW50ICosIGludCkuXSkK LWZpXSkjIFBHQUNfSEFWRV9HQ0NfX0FUT01JQ19JTlQzMl9DQVMKLQotIyBQR0FDX0hBVkVfR0ND X19BVE9NSUNfSU5UNjRfQ0FTCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMg Q2hlY2sgaWYgdGhlIEMgY29tcGlsZXIgdW5kZXJzdGFuZHMgX19hdG9taWNfY29tcGFyZV9leGNo YW5nZV9uKCkgZm9yIDY0Yml0Ci0jIHR5cGVzLCBhbmQgZGVmaW5lIEhBVkVfR0NDX19BVE9NSUNf SU5UNjRfQ0FTIGlmIHNvLgotQUNfREVGVU4oW1BHQUNfSEFWRV9HQ0NfX0FUT01JQ19JTlQ2NF9D QVNdLAotW0FDX0NBQ0hFX0NIRUNLKGZvciBidWlsdGluIF9fYXRvbWljIGludDY0IGF0b21pYyBv cGVyYXRpb25zLCBwZ2FjX2N2X2djY19hdG9taWNfaW50NjRfY2FzLAotW0FDX0xJTktfSUZFTFNF KFtBQ19MQU5HX1BST0dSQU0oWyNpbmNsdWRlIDxzdGRpbnQuaD5dLAotICBbaW50NjRfdCB2YWwg PSAwOwotICAgaW50NjRfdCBleHBlY3QgPSAwOwotICAgX19hdG9taWNfY29tcGFyZV9leGNoYW5n ZV9uKCZ2YWwsICZleHBlY3QsIDM3LCAwLCBfX0FUT01JQ19TRVFfQ1NULCBfX0FUT01JQ19SRUxB WEVEKTtdKV0sCi0gIFtwZ2FjX2N2X2djY19hdG9taWNfaW50NjRfY2FzPSJ5ZXMiXSwKLSAgW3Bn YWNfY3ZfZ2NjX2F0b21pY19pbnQ2NF9jYXM9Im5vIl0pXSkKLWlmIHRlc3QgeCIkcGdhY19jdl9n Y2NfYXRvbWljX2ludDY0X2NhcyIgPSB4InllcyI7IHRoZW4KLSAgQUNfREVGSU5FKEhBVkVfR0ND X19BVE9NSUNfSU5UNjRfQ0FTLCAxLCBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgX19hdG9taWNf Y29tcGFyZV9leGNoYW5nZV9uKGludDY0ICosIGludDY0ICosIGludDY0KS5dKQotZmldKSMgUEdB Q19IQVZFX0dDQ19fQVRPTUlDX0lOVDY0X0NBUwotCiAjIFBHQUNfU1NFNDJfQ1JDMzJfSU5UUklO U0lDUwogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgQ2hlY2sgaWYgdGhlIGNvbXBp bGVyIHN1cHBvcnRzIHRoZSB4ODYgQ1JDIGluc3RydWN0aW9ucyBhZGRlZCBpbiBTU0UgNC4yLApk aWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCmluZGV4IDNhMGVkMTFmYThlLi5iZDdk ZWUzZmRmMyAxMDA3NTUKLS0tIGEvY29uZmlndXJlCisrKyBiL2NvbmZpZ3VyZQpAQCAtMTcxNjcs MjA2ICsxNzE2Nyw2IEBAIF9BQ0VPRgogICBmaQogZmkKIAotIyBDaGVjayBmb3IgdmFyaW91cyBh dG9taWMgb3BlcmF0aW9ucyBub3cgdGhhdCB3ZSBoYXZlIGNoZWNrZWQgaG93IHRvIGRlY2xhcmUK LSMgNjRiaXQgaW50ZWdlcnMuCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVO T306IGNoZWNraW5nIGZvciBidWlsdGluIF9fc3luYyBjaGFyIGxvY2tpbmcgZnVuY3Rpb25zIiA+ JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciBidWlsdGluIF9fc3luYyBjaGFyIGxvY2tpbmcg ZnVuY3Rpb25zLi4uICIgPiY2OyB9Ci1pZiAke3BnYWNfY3ZfZ2NjX3N5bmNfY2hhcl90YXMrOn0g ZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBjYXQg Y29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMu aC4gICovCi0KLWludAotbWFpbiAoKQotewotY2hhciBsb2NrID0gMDsKLSAgIF9fc3luY19sb2Nr X3Rlc3RfYW5kX3NldCgmbG9jaywgMSk7Ci0gICBfX3N5bmNfbG9ja19yZWxlYXNlKCZsb2NrKTsK LSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVO TyI7IHRoZW4gOgotICBwZ2FjX2N2X2djY19zeW5jX2NoYXJfdGFzPSJ5ZXMiCi1lbHNlCi0gIHBn YWNfY3ZfZ2NjX3N5bmNfY2hhcl90YXM9Im5vIgotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJy IGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4k YWNfZXh0Ci1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1 bHQ6ICRwZ2FjX2N2X2djY19zeW5jX2NoYXJfdGFzIiA+JjUKLSRhc19lY2hvICIkcGdhY19jdl9n Y2Nfc3luY19jaGFyX3RhcyIgPiY2OyB9Ci1pZiB0ZXN0IHgiJHBnYWNfY3ZfZ2NjX3N5bmNfY2hh cl90YXMiID0geCJ5ZXMiOyB0aGVuCi0KLSRhc19lY2hvICIjZGVmaW5lIEhBVkVfR0NDX19TWU5D X0NIQVJfVEFTIDEiID4+Y29uZmRlZnMuaAotCi1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNf bGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgYnVpbHRpbiBfX3N5bmMgaW50MzIgbG9ja2lu ZyBmdW5jdGlvbnMiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGJ1aWx0aW4gX19zeW5j IGludDMyIGxvY2tpbmcgZnVuY3Rpb25zLi4uICIgPiY2OyB9Ci1pZiAke3BnYWNfY3ZfZ2NjX3N5 bmNfaW50MzJfdGFzKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+ JjYKLWVsc2UKLSAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAot LyogZW5kIGNvbmZkZWZzLmguICAqLwotCi1pbnQKLW1haW4gKCkKLXsKLWludCBsb2NrID0gMDsK LSAgIF9fc3luY19sb2NrX3Rlc3RfYW5kX3NldCgmbG9jaywgMSk7Ci0gICBfX3N5bmNfbG9ja19y ZWxlYXNlKCZsb2NrKTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190 cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgotICBwZ2FjX2N2X2djY19zeW5jX2ludDMyX3Rhcz0i eWVzIgotZWxzZQotICBwZ2FjX2N2X2djY19zeW5jX2ludDMyX3Rhcz0ibm8iCi1maQotcm0gLWYg Y29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgY29uZnRlc3QkYWNf ZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5l bm8tJExJTkVOT306IHJlc3VsdDogJHBnYWNfY3ZfZ2NjX3N5bmNfaW50MzJfdGFzIiA+JjUKLSRh c19lY2hvICIkcGdhY19jdl9nY2Nfc3luY19pbnQzMl90YXMiID4mNjsgfQotaWYgdGVzdCB4IiRw Z2FjX2N2X2djY19zeW5jX2ludDMyX3RhcyIgPSB4InllcyI7IHRoZW4KLQotJGFzX2VjaG8gIiNk ZWZpbmUgSEFWRV9HQ0NfX1NZTkNfSU5UMzJfVEFTIDEiID4+Y29uZmRlZnMuaAotCi1maQoteyAk YXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgYnVpbHRp biBfX3N5bmMgaW50MzIgYXRvbWljIG9wZXJhdGlvbnMiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tp bmcgZm9yIGJ1aWx0aW4gX19zeW5jIGludDMyIGF0b21pYyBvcGVyYXRpb25zLi4uICIgPiY2OyB9 Ci1pZiAke3BnYWNfY3ZfZ2NjX3N5bmNfaW50MzJfY2FzKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFz X2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VP RiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi1pbnQKLW1haW4g KCkKLXsKLWludCB2YWwgPSAwOwotICAgX19zeW5jX3ZhbF9jb21wYXJlX2FuZF9zd2FwKCZ2YWws IDAsIDM3KTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfbGlu ayAiJExJTkVOTyI7IHRoZW4gOgotICBwZ2FjX2N2X2djY19zeW5jX2ludDMyX2Nhcz0ieWVzIgot ZWxzZQotICBwZ2FjX2N2X2djY19zeW5jX2ludDMyX2Nhcz0ibm8iCi1maQotcm0gLWYgY29yZSBj b25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgY29uZnRlc3QkYWNfZXhlZXh0 IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJ TkVOT306IHJlc3VsdDogJHBnYWNfY3ZfZ2NjX3N5bmNfaW50MzJfY2FzIiA+JjUKLSRhc19lY2hv ICIkcGdhY19jdl9nY2Nfc3luY19pbnQzMl9jYXMiID4mNjsgfQotaWYgdGVzdCB4IiRwZ2FjX2N2 X2djY19zeW5jX2ludDMyX2NhcyIgPSB4InllcyI7IHRoZW4KLQotJGFzX2VjaG8gIiNkZWZpbmUg SEFWRV9HQ0NfX1NZTkNfSU5UMzJfQ0FTIDEiID4+Y29uZmRlZnMuaAotCi1maQoteyAkYXNfZWNo byAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgYnVpbHRpbiBfX3N5 bmMgaW50NjQgYXRvbWljIG9wZXJhdGlvbnMiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9y IGJ1aWx0aW4gX19zeW5jIGludDY0IGF0b21pYyBvcGVyYXRpb25zLi4uICIgPiY2OyB9Ci1pZiAk e3BnYWNfY3ZfZ2NjX3N5bmNfaW50NjRfY2FzKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9f biAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29u ZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPHN0ZGludC5o PgotaW50Ci1tYWluICgpCi17Ci1pbnQ2NF90IGxvY2sgPSAwOwotICAgX19zeW5jX3ZhbF9jb21w YXJlX2FuZF9zd2FwKCZsb2NrLCAwLCAoaW50NjRfdCkgMzcpOwotICA7Ci0gIHJldHVybiAwOwot fQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6Ci0gIHBnYWNf Y3ZfZ2NjX3N5bmNfaW50NjRfY2FzPSJ5ZXMiCi1lbHNlCi0gIHBnYWNfY3ZfZ2NjX3N5bmNfaW50 NjRfY2FzPSJubyIKLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2Jq ZXh0IFwKLSAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLXsgJGFz X2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkcGdhY19jdl9nY2Nf c3luY19pbnQ2NF9jYXMiID4mNQotJGFzX2VjaG8gIiRwZ2FjX2N2X2djY19zeW5jX2ludDY0X2Nh cyIgPiY2OyB9Ci1pZiB0ZXN0IHgiJHBnYWNfY3ZfZ2NjX3N5bmNfaW50NjRfY2FzIiA9IHgieWVz IjsgdGhlbgotCi0kYXNfZWNobyAiI2RlZmluZSBIQVZFX0dDQ19fU1lOQ19JTlQ2NF9DQVMgMSIg Pj5jb25mZGVmcy5oCi0KLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVO T306IGNoZWNraW5nIGZvciBidWlsdGluIF9fYXRvbWljIGludDMyIGF0b21pYyBvcGVyYXRpb25z IiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciBidWlsdGluIF9fYXRvbWljIGludDMyIGF0 b21pYyBvcGVyYXRpb25zLi4uICIgPiY2OyB9Ci1pZiAke3BnYWNfY3ZfZ2NjX2F0b21pY19pbnQz Ml9jYXMrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxz ZQotICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQg Y29uZmRlZnMuaC4gICovCi0KLWludAotbWFpbiAoKQotewotaW50IHZhbCA9IDA7Ci0gICBpbnQg ZXhwZWN0ID0gMDsKLSAgIF9fYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2VfbigmdmFsLCAmZXhwZWN0 LCAzNywgMCwgX19BVE9NSUNfU0VRX0NTVCwgX19BVE9NSUNfUkVMQVhFRCk7Ci0gIDsKLSAgcmV0 dXJuIDA7Ci19Ci1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoK LSAgcGdhY19jdl9nY2NfYXRvbWljX2ludDMyX2Nhcz0ieWVzIgotZWxzZQotICBwZ2FjX2N2X2dj Y19hdG9taWNfaW50MzJfY2FzPSJubyIKLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25m dGVzdC4kYWNfb2JqZXh0IFwKLSAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4 dAotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAk cGdhY19jdl9nY2NfYXRvbWljX2ludDMyX2NhcyIgPiY1Ci0kYXNfZWNobyAiJHBnYWNfY3ZfZ2Nj X2F0b21pY19pbnQzMl9jYXMiID4mNjsgfQotaWYgdGVzdCB4IiRwZ2FjX2N2X2djY19hdG9taWNf aW50MzJfY2FzIiA9IHgieWVzIjsgdGhlbgotCi0kYXNfZWNobyAiI2RlZmluZSBIQVZFX0dDQ19f QVRPTUlDX0lOVDMyX0NBUyAxIiA+PmNvbmZkZWZzLmgKLQotZmkKLXsgJGFzX2VjaG8gIiRhc19t ZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGJ1aWx0aW4gX19hdG9taWMgaW50 NjQgYXRvbWljIG9wZXJhdGlvbnMiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGJ1aWx0 aW4gX19hdG9taWMgaW50NjQgYXRvbWljIG9wZXJhdGlvbnMuLi4gIiA+JjY7IH0KLWlmICR7cGdh Y19jdl9nY2NfYXRvbWljX2ludDY0X2Nhcys6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24g IihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0 ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDxzdGRpbnQuaD4K LWludAotbWFpbiAoKQotewotaW50NjRfdCB2YWwgPSAwOwotICAgaW50NjRfdCBleHBlY3QgPSAw OwotICAgX19hdG9taWNfY29tcGFyZV9leGNoYW5nZV9uKCZ2YWwsICZleHBlY3QsIDM3LCAwLCBf X0FUT01JQ19TRVFfQ1NULCBfX0FUT01JQ19SRUxBWEVEKTsKLSAgOwotICByZXR1cm4gMDsKLX0K LV9BQ0VPRgotaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgotICBwZ2FjX2N2 X2djY19hdG9taWNfaW50NjRfY2FzPSJ5ZXMiCi1lbHNlCi0gIHBnYWNfY3ZfZ2NjX2F0b21pY19p bnQ2NF9jYXM9Im5vIgotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19v YmpleHQgXAotICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQoteyAk YXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRwZ2FjX2N2X2dj Y19hdG9taWNfaW50NjRfY2FzIiA+JjUKLSRhc19lY2hvICIkcGdhY19jdl9nY2NfYXRvbWljX2lu dDY0X2NhcyIgPiY2OyB9Ci1pZiB0ZXN0IHgiJHBnYWNfY3ZfZ2NjX2F0b21pY19pbnQ2NF9jYXMi ID0geCJ5ZXMiOyB0aGVuCi0KLSRhc19lY2hvICIjZGVmaW5lIEhBVkVfR0NDX19BVE9NSUNfSU5U NjRfQ0FTIDEiID4+Y29uZmRlZnMuaAotCi1maQotCi0KICMgQ2hlY2sgZm9yIF9fZ2V0X2NwdWlk KCkgYW5kIF9fY3B1aWQoKQogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99 OiBjaGVja2luZyBmb3IgX19nZXRfY3B1aWQiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9y IF9fZ2V0X2NwdWlkLi4uICIgPiY2OyB9CmRpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25m aWd1cmUuYWMKaW5kZXggYzI0MTM3MjBhMTguLmUzYjc1NjAxZGY3IDEwMDY0NAotLS0gYS9jb25m aWd1cmUuYWMKKysrIGIvY29uZmlndXJlLmFjCkBAIC0yMDE5LDE2ICsyMDE5LDYgQEAgQUNfREVG SU5FX1VOUVVPVEVEKE1BWElNVU1fQUxJR05PRiwgJE1BWF9BTElHTk9GLCBbRGVmaW5lIGFzIHRo ZSBtYXhpbXVtIGFsaWdubWUKICMgU29tZSBjb21waWxlcnMgb2ZmZXIgYSAxMjgtYml0IGludGVn ZXIgc2NhbGFyIHR5cGUuCiBQR0FDX1RZUEVfMTI4QklUX0lOVAogCi0jIENoZWNrIGZvciB2YXJp b3VzIGF0b21pYyBvcGVyYXRpb25zIG5vdyB0aGF0IHdlIGhhdmUgY2hlY2tlZCBob3cgdG8gZGVj bGFyZQotIyA2NGJpdCBpbnRlZ2Vycy4KLVBHQUNfSEFWRV9HQ0NfX1NZTkNfQ0hBUl9UQVMKLVBH QUNfSEFWRV9HQ0NfX1NZTkNfSU5UMzJfVEFTCi1QR0FDX0hBVkVfR0NDX19TWU5DX0lOVDMyX0NB UwotUEdBQ19IQVZFX0dDQ19fU1lOQ19JTlQ2NF9DQVMKLVBHQUNfSEFWRV9HQ0NfX0FUT01JQ19J TlQzMl9DQVMKLVBHQUNfSEFWRV9HQ0NfX0FUT01JQ19JTlQ2NF9DQVMKLQotCiAjIENoZWNrIGZv ciBfX2dldF9jcHVpZCgpIGFuZCBfX2NwdWlkKCkKIEFDX0NBQ0hFX0NIRUNLKFtmb3IgX19nZXRf Y3B1aWRdLCBbcGdhY19jdl9fZ2V0X2NwdWlkXSwKIFtBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19Q Uk9HUkFNKFsjaW5jbHVkZSA8Y3B1aWQuaD5dLApkaWZmIC0tZ2l0IGEvbWVzb24uYnVpbGQgYi9t ZXNvbi5idWlsZAppbmRleCAwNGM1NjMzNzhjNy4uMGZiNzgzZmNiNjQgMTAwNjQ0Ci0tLSBhL21l c29uLmJ1aWxkCisrKyBiL21lc29uLmJ1aWxkCkBAIC0yMjI0LDY5ICsyMjI0LDYgQEAgaWYgbGx2 bS5mb3VuZCgpCiBlbmRpZgogCiAKLQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIEF0b21pY3MKLSMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi1hdG9t aWNfY2hlY2tzID0gWwotICB7J25hbWUnOiAnSEFWRV9HQ0NfX1NZTkNfQ0hBUl9UQVMnLAotICAg J2Rlc2MnOiAnX19zeW5jX2xvY2tfdGVzdF9hbmRfc2V0KGNoYXIpJywKLSAgICd0ZXN0JzogJycn Ci1jaGFyIGxvY2sgPSAwOwotX19zeW5jX2xvY2tfdGVzdF9hbmRfc2V0KCZsb2NrLCAxKTsKLV9f c3luY19sb2NrX3JlbGVhc2UoJmxvY2spOycnJ30sCi0KLSAgeyduYW1lJzogJ0hBVkVfR0NDX19T WU5DX0lOVDMyX1RBUycsCi0gICAnZGVzYyc6ICdfX3N5bmNfbG9ja190ZXN0X2FuZF9zZXQoaW50 MzIpJywKLSAgICd0ZXN0JzogJycnCi1pbnQgbG9jayA9IDA7Ci1fX3N5bmNfbG9ja190ZXN0X2Fu ZF9zZXQoJmxvY2ssIDEpOwotX19zeW5jX2xvY2tfcmVsZWFzZSgmbG9jayk7JycnfSwKLQotICB7 J25hbWUnOiAnSEFWRV9HQ0NfX1NZTkNfSU5UMzJfQ0FTJywKLSAgICdkZXNjJzogJ19fc3luY192 YWxfY29tcGFyZV9hbmRfc3dhcChpbnQzMiknLAotICAgJ3Rlc3QnOiAnJycKLWludCB2YWwgPSAw OwotX19zeW5jX3ZhbF9jb21wYXJlX2FuZF9zd2FwKCZ2YWwsIDAsIDM3KTsnJyd9LAotCi0gIHsn bmFtZSc6ICdIQVZFX0dDQ19fU1lOQ19JTlQ2NF9DQVMnLAotICAgJ2Rlc2MnOiAnX19zeW5jX3Zh bF9jb21wYXJlX2FuZF9zd2FwKGludDY0KScsCi0gICAndGVzdCc6ICcnJwotaW50NjRfdCB2YWwg PSAwOwotX19zeW5jX3ZhbF9jb21wYXJlX2FuZF9zd2FwKCZ2YWwsIDAsIDM3KTsnJyd9LAotCi0g IHsnbmFtZSc6ICdIQVZFX0dDQ19fQVRPTUlDX0lOVDMyX0NBUycsCi0gICAnZGVzYyc6ICcgX19h dG9taWNfY29tcGFyZV9leGNoYW5nZV9uKGludDMyKScsCi0gICAndGVzdCc6ICcnJwotaW50IHZh bCA9IDA7Ci1pbnQgZXhwZWN0ID0gMDsKLV9fYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2VfbigmdmFs LCAmZXhwZWN0LCAzNywgMCwgX19BVE9NSUNfU0VRX0NTVCwgX19BVE9NSUNfUkVMQVhFRCk7Jycn fSwKLQotICB7J25hbWUnOiAnSEFWRV9HQ0NfX0FUT01JQ19JTlQ2NF9DQVMnLAotICAgJ2Rlc2Mn OiAnIF9fYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2VfbihpbnQ2NCknLAotICAgJ3Rlc3QnOiAnJycK LWludDY0X3QgdmFsID0gMDsKLWludDY0X3QgZXhwZWN0ID0gMDsKLV9fYXRvbWljX2NvbXBhcmVf ZXhjaGFuZ2VfbigmdmFsLCAmZXhwZWN0LCAzNywgMCwgX19BVE9NSUNfU0VRX0NTVCwgX19BVE9N SUNfUkVMQVhFRCk7JycnfSwKLV0KLQotZm9yZWFjaCBjaGVjayA6IGF0b21pY19jaGVja3MKLSAg dGVzdCA9ICcnJwotI2luY2x1ZGUgPHN0ZGludC5oPgotaW50IG1haW4odm9pZCkKLXsKLUAwQAot fScnJy5mb3JtYXQoY2hlY2tbJ3Rlc3QnXSkKLQotICBjZGF0YS5zZXQoY2hlY2tbJ25hbWUnXSwK LSAgICBjYy5saW5rcyh0ZXN0LAotICAgICAgbmFtZTogY2hlY2tbJ2Rlc2MnXSwKLSAgICAgIGFy Z3M6IHRlc3RfY19hcmdzKSA/IDEgOiBmYWxzZQotICApCi1lbmRmb3JlYWNoCi0KLQogIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj CiAjIENoZWNrIGZvciB0aGUgYXZhaWxhYmlsaXR5IG9mIFhTQVZFIGludHJpbnNpY3MuCiAjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL01ha2VmaWxlIGIvc3JjL2JhY2tlbmQvTWFrZWZp bGUKaW5kZXggNzM0NGM4YzdmNWMuLmIwZDk3ZGMyZmEyIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9NYWtlZmlsZQorKysgYi9zcmMvYmFja2VuZC9NYWtlZmlsZQpAQCAtMjY1LDcgKzI2NSw3IEBA IGVuZGlmCiAKIGRpc3RjbGVhbjogY2xlYW4KICMgZ2VuZXJhdGVkIGJ5IGNvbmZpZ3VyZQotCXJt IC1mIHBvcnQvdGFzLnMgcG9ydC9wZ19zZW1hLmMgcG9ydC9wZ19zaG1lbS5jCisJcm0gLWYgcG9y dC9wZ19zZW1hLmMgcG9ydC9wZ19zaG1lbS5jCiAKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL3BvcnQvLmdpdGlnbm9yZSBiL3NyYy9iYWNrZW5kL3BvcnQvLmdp dGlnbm9yZQppbmRleCA0ZWYzNmI4MmM3Ny4uNmM1MDY3YTRhOWYgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3BvcnQvLmdpdGlnbm9yZQorKysgYi9zcmMvYmFja2VuZC9wb3J0Ly5naXRpZ25vcmUK QEAgLTEsMyArMSwyIEBACiAvcGdfc2VtYS5jCiAvcGdfc2htZW0uYwotL3Rhcy5zCmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS9wZ19jb25maWcuaC5pbiBiL3NyYy9pbmNsdWRlL3BnX2NvbmZpZy5o LmluCmluZGV4IGIwYjBjZmRhZjc5Li5hZDU2NjNhODkxNSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvcGdfY29uZmlnLmguaW4KKysrIGIvc3JjL2luY2x1ZGUvcGdfY29uZmlnLmguaW4KQEAgLTE0 OSwyNiArMTQ5LDYgQEAKIC8qIERlZmluZSB0byAxIGlmIGZzZWVrbyAoYW5kIHByZXN1bWFibHkg ZnRlbGxvKSBleGlzdHMgYW5kIGlzIGRlY2xhcmVkLiAqLwogI3VuZGVmIEhBVkVfRlNFRUtPCiAK LS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIF9fYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfbihp bnQgKiwgaW50ICosIGludCkuICovCi0jdW5kZWYgSEFWRV9HQ0NfX0FUT01JQ19JTlQzMl9DQVMK LQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgX19hdG9taWNfY29tcGFyZV9leGNoYW5nZV9u KGludDY0ICosIGludDY0ICosCi0gICBpbnQ2NCkuICovCi0jdW5kZWYgSEFWRV9HQ0NfX0FUT01J Q19JTlQ2NF9DQVMKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgX19zeW5jX2xvY2tfdGVz dF9hbmRfc2V0KGNoYXIgKikgYW5kIGZyaWVuZHMuICovCi0jdW5kZWYgSEFWRV9HQ0NfX1NZTkNf Q0hBUl9UQVMKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgX19zeW5jX3ZhbF9jb21wYXJl X2FuZF9zd2FwKGludCAqLCBpbnQsIGludCkuICovCi0jdW5kZWYgSEFWRV9HQ0NfX1NZTkNfSU5U MzJfQ0FTCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIF9fc3luY19sb2NrX3Rlc3RfYW5k X3NldChpbnQgKikgYW5kIGZyaWVuZHMuICovCi0jdW5kZWYgSEFWRV9HQ0NfX1NZTkNfSU5UMzJf VEFTCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIF9fc3luY192YWxfY29tcGFyZV9hbmRf c3dhcChpbnQ2NF90ICosIGludDY0X3QsCi0gICBpbnQ2NF90KS4gKi8KLSN1bmRlZiBIQVZFX0dD Q19fU1lOQ19JTlQ2NF9DQVMKLQogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnZXRh dXh2YWwnIGZ1bmN0aW9uLiAqLwogI3VuZGVmIEhBVkVfR0VUQVVYVkFMCiAKLS0gCjIuNTAuMSAo QXBwbGUgR2l0LTE1NSkKCg== --0000000000009b22960643784acd--