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 1vIRnk-001Lrj-0p for pgsql-hackers@arkaria.postgresql.org; Mon, 10 Nov 2025 13:19:19 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vIRmi-000WgN-0V for pgsql-hackers@arkaria.postgresql.org; Mon, 10 Nov 2025 13:18:16 +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 1vIRmh-000WgF-27 for pgsql-hackers@lists.postgresql.org; Mon, 10 Nov 2025 13:18:15 +0000 Received: from mail-pg1-x534.google.com ([2607:f8b0:4864:20::534]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vIRme-006zDu-1Z for pgsql-hackers@lists.postgresql.org; Mon, 10 Nov 2025 13:18:15 +0000 Received: by mail-pg1-x534.google.com with SMTP id 41be03b00d2f7-b8b33cdf470so184323a12.0 for ; Mon, 10 Nov 2025 05:18:11 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1762780690; x=1763385490; darn=lists.postgresql.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=cYlnF0QuwuvGBSNZ+vGND7f752Y4mfHfPoaofUA4xRw=; b=N8uDy6udagNMbwSmgmYhFFccGCthCGL67ItDsITPUnbIX3gv8+QWChSh4Z/kODk5dJ ytnwroyvFOcHraar2sAoBIB9pQReiFG7vbSuSSyQCl/7pbiVhacVOtTqgks3WAlZj0DQ 066v2mgLEn/W9S87b1xsQa/NDR22O09/sdddLOMPL2hm2Hu6/dVxw43QUSlGuWnMwcnv Ur7E/5MZDffKFQBMsXO2Z2Bgtm0x3IyTd96vJW6kKPOx4dOAMduGyyWdMQ2IDc5/Kuwx tlpekDMM/OfcTIY0bBMq16jXt9HehZhSrpIysc/eo9zNW+IO6xO5ZMC4bVRP3+27gm5X bcfQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1762780690; x=1763385490; h=to:subject:message-id:date:from:mime-version:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=cYlnF0QuwuvGBSNZ+vGND7f752Y4mfHfPoaofUA4xRw=; b=uyW1yWaBnC+tVzxdwk48wQ1l0TgOWiXs2s/dqbGAOe1ta1PvAOMqpdgeRyO8C4vv6e C2vXIKqxQIJSsmynmn0qFMS4XQ/OAivwjKskny7sLjtq7S5h8WK4AZh9ciS3PcM06oHt Ru7hJfBu8aoRoiPDA/evK+pzlSgMr5gt0+5uwnlGoLoJJ8aLcWWMiqQqT+ht6PyYrOpA MIllefuA2hRwt0lQ+LCmPfh4/N9bnbE12dNin2o+0iHBAGEGOGk5eXbJ/57EYmEq5Rf6 VJq9UkNwh7enD0MyeIpX7RB10wiuSjPPxLXEtC0jdhM6Up2OMGtUh/LOLFlZvA99Lbvs kNvQ== X-Gm-Message-State: AOJu0YyaHXMbG/8sdaM+t0vUJdoklUTDyjh+K7Ig6j6w9+AyxA1iBxnV rY8u5gR/IbPOwsasqPhpjchC7Qfasb0jazFjg1XK4R8RMHNaBHZaAAscjBwvQEHR+b76cBnCLAI 4JZIYzYDXRYQzzLfturophIvYsubzh65ZzcsyRZM= X-Gm-Gg: ASbGncu0ezheb3/ZUu7SCcA0azMmcpsPyR/g0/ye1jXDn8yDd3hMyWvoA2w2Ox/8c35 AKp61U5mOjvWMjI9SDqGj5TlP3AN+j6U9FpWW0NVtHvfWPAmg9CAabMV10DkBO77TBamo9R1VqC Bfn5vnCN+9fVooES2oO1VwjEMij3o/rNLk0z1OVC2EZT14pxInNU69prwR0bde6wMe5zWp/apaS I682HvTVSqzU9hDcl4dVsenaZ+ySIYSJHtjkyfm5goN9OpbFrkTPnOO82lqF/xd2TvNtGFn+Vme NsLl/N90O9JwuwX9pc+Qikdtu1kUq/Btm+58jbEAJ1INnYccC4Htc3978qmpcUB2lDE8Q6y6GLb 2XeBaUYJ/yw== X-Google-Smtp-Source: AGHT+IHCSnJM4QcDPz7487VKR0mVCwvmccfBiQsVova1FyxLO4LBDw79KO6ySAwnySiETPe71yVAfBWfgY+fH2zZHhU= X-Received: by 2002:a17:902:e847:b0:296:549c:a1e with SMTP id d9443c01a7336-297e5649f22mr54390585ad.3.1762780689278; Mon, 10 Nov 2025 05:18:09 -0800 (PST) MIME-Version: 1.0 From: Thomas Munro Date: Tue, 11 Nov 2025 02:17:31 +1300 X-Gm-Features: AWmQ_bn061ELqtPj9Dzld0jPaPbrtF2c_TUmpDPDcOzftqgV6aHbgSd7pBAAHAA Message-ID: Subject: Trying out To: PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000cd4aa006433d5c9a" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000cd4aa006433d5c9a Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi, Here is an experimental patch to try out standard C (and C++) atomics to implement port/atomics.h, and also add more types and operations. It's mostly just redirecting our names to the standard ones, except for our barriers and slightly extended pg_atomic_flag, so there isn't much left of the code. Here also is a semi-independent patch to implement storage/spin.h with pg_atomic_flag. It keeps a small amount of the architecture-specific magic, but moves it out to src/port/spin_delay.h. I'm not saying they're correct, performant or portable yet, that'll require studying codegen and performance on a bunch of weird and wonderful systems, but they at least passes basic testing on the usual suspects and CI systems, except for Windows which needs a newer toolchain so I haven't tried yet. It should hopefully just work=E2=84=A2 o= n VS 2022 (same version that provides , about which more soon). All that being the case, it's not far enough along to be a serious proposal, but I imagine others will be looking into things like this since we pulled the trigger on C11 and I figured I might as well share a basic working patch set to avoid duplicated effort... Hopefully it works well enough to kick the tyres and try to find the difficult problems, test it out on weird systems, etc etc. --000000000000cd4aa006433d5c9a Content-Type: application/octet-stream; name="v1-0001-Add-some-missing-include-limits.h.patch" Content-Disposition: attachment; filename="v1-0001-Add-some-missing-include-limits.h.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mht4kyih0 RnJvbSAwMDBkZDQxNDEyZmEzOWZjMDA0N2E3ZGRjOWNhNzZiMWFjYjdiNDM3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUaG9tYXMgTXVucm8gPHRob21hcy5tdW5yb0BnbWFpbC5jb20+ CkRhdGU6IE1vbiwgMTAgTm92IDIwMjUgMTU6MDQ6MzggKzEzMDAKU3ViamVjdDogW1BBVENIIHYx IDEvNF0gQWRkIHNvbWUgbWlzc2luZyAjaW5jbHVkZSA8bGltaXRzLmg+LgoKVGhlc2UgZmlsZXMg cmVsaWVkIG9uIHRyYW5zaXRpdmUgaW5jbHVzaW9uIHZpYSBwb3J0L2F0b21pY3MuaCBmb3IKY29u c3RhbnRzIENIQVJfQklUIGFuZCBJTlRfTUFYLgotLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9icmlu L2JyaW5fYmxvb20uYyAgICAgICAgICB8IDEgKwogc3JjL2JhY2tlbmQvbGliL2RzaGFzaC5jICAg ICAgICAgICAgICAgICAgICAgIHwgMiArKwogc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL2NvbmRp dGlvbl92YXJpYWJsZS5jIHwgMiArKwogMyBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKykK CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvYnJpbi9icmluX2Jsb29tLmMgYi9zcmMv YmFja2VuZC9hY2Nlc3MvYnJpbi9icmluX2Jsb29tLmMKaW5kZXggZDZkYTNhYmM4ZGUuLjY0ZGJi N2I4NTMyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvYnJpbi9icmluX2Jsb29tLmMK KysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbl9ibG9vbS5jCkBAIC0xMTQsNiArMTE0 LDcgQEAKICAqLwogI2luY2x1ZGUgInBvc3RncmVzLmgiCiAKKyNpbmNsdWRlIDxsaW1pdHMuaD4K ICNpbmNsdWRlIDxtYXRoLmg+CiAKICNpbmNsdWRlICJhY2Nlc3MvYnJpbi5oIgpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvbGliL2RzaGFzaC5jIGIvc3JjL2JhY2tlbmQvbGliL2RzaGFzaC5jCmlu ZGV4IGI4ZDAzMWYyMDE1Li4yZmZiNGMxMDZiZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvbGli L2RzaGFzaC5jCisrKyBiL3NyYy9iYWNrZW5kL2xpYi9kc2hhc2guYwpAQCAtMzYsNiArMzYsOCBA QAogI2luY2x1ZGUgInN0b3JhZ2UvbHdsb2NrLmgiCiAjaW5jbHVkZSAidXRpbHMvZHNhLmgiCiAK KyNpbmNsdWRlIDxsaW1pdHMuaD4KKwogLyoKICAqIEFuIGl0ZW0gaW4gdGhlIGhhc2ggdGFibGUu ICBUaGlzIHdyYXBzIHRoZSB1c2VyJ3MgZW50cnkgb2JqZWN0IGluIGFuCiAgKiBlbnZlbG9wIHRo YXQgaG9sZHMgYSBwb2ludGVyIGJhY2sgdG8gdGhlIGJ1Y2tldCBhbmQgYSBwb2ludGVyIHRvIHRo ZSBuZXh0CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvY29uZGl0aW9uX3Zh cmlhYmxlLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvY29uZGl0aW9uX3ZhcmlhYmxlLmMK aW5kZXggMjI4MzAzZTc3ZjcuLmJlZTk1MjViNTQwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9z dG9yYWdlL2xtZ3IvY29uZGl0aW9uX3ZhcmlhYmxlLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFn ZS9sbWdyL2NvbmRpdGlvbl92YXJpYWJsZS5jCkBAIC0yNSw2ICsyNSw4IEBACiAjaW5jbHVkZSAi c3RvcmFnZS9wcm9jbGlzdC5oIgogI2luY2x1ZGUgInN0b3JhZ2Uvc3Bpbi5oIgogCisjaW5jbHVk ZSA8bGltaXRzLmg+CisKIC8qIEluaXRpYWxseSwgd2UgYXJlIG5vdCBwcmVwYXJlZCB0byBzbGVl cCBvbiBhbnkgY29uZGl0aW9uIHZhcmlhYmxlLiAqLwogc3RhdGljIENvbmRpdGlvblZhcmlhYmxl ICpjdl9zbGVlcF90YXJnZXQgPSBOVUxMOwogCi0tIAoyLjUwLjEgKEFwcGxlIEdpdC0xNTUpCgo= --000000000000cd4aa006433d5c9a Content-Type: application/octet-stream; name="v1-0002-Redefine-port-atomics.h-on-top-of-stdatomic.h.patch" Content-Disposition: attachment; filename="v1-0002-Redefine-port-atomics.h-on-top-of-stdatomic.h.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mht4l1nf1 RnJvbSA3ZWFjNGFlY2IwZTYwODE4MDY4NWE3MjE1ZmRhN2MwNmYyMDBjMWExIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUaG9tYXMgTXVucm8gPHRob21hcy5tdW5yb0BnbWFpbC5jb20+ CkRhdGU6IFR1ZSwgMiBKdWwgMjAyNCAyMjozMTo0MiArMTIwMApTdWJqZWN0OiBbUEFUQ0ggdjEg Mi80XSBSZWRlZmluZSBwb3J0L2F0b21pY3MuaCBvbiB0b3Agb2YgPHN0ZGF0b21pYy5oPi4KCiAq IFJlZGlyZWN0IHR5cGVzIGFuZCBmdW5jdGlvbnMgdG8gc3RhbmRhcmQgQy9DKysKICogVXNlIDxh dG9taWM+IGluc3RlYWQgZm9yIEMrKzExIGV4dGVuc2lvbnMgKGFzIGZvcm1hbGl6ZWQgYnkgQysr MjMpCiAqIEFkZCBwZ19hdG9taWNfdWludDgsIHBnX2F0b21pY191aW50MTYgYW5kIHBnX2F0b21p YyhUKQogKiBQcm92aWRlIGdlbmVyaWMgcGdfYXRvbWljX3JlYWQoKSwgcGdfYXRvbWljX3dyaXRl KCkKICogQXNzdW1lIHRoYXQgbW9zdCBiYXNpYyBvcGVyYXRpb25zIHdpbGwgYmUgY2FsbGVkIGJ5 CiAgIHN0YW5kYXJkaXplZCBnZW5lcmljcyBpbiBmdXR1cmUgY29kZSwgZWcgYXRvbWljX2ZldGNo X2FkZCgpCiAqIEZvcndhcmQgYWxsIHRoZSB0cmFkaXRpb25hbCBfMzIsIF82NCBmdW5jdGlvbiBu YW1lcyBmb3IKICAgZXhpc3RpbmcgY29kZQogKiBSZWltcGxlbWVudCBwZ19hdG9taWNfZmxhZyB3 aXRoIHBnX2F0b21pYyh1aW50OCkgdG8gYWxsb3cgcmVsYXhlZCBsb2FkCiAgIChpbXBvc3NpYmxl IHdpdGggc3RhbmRhcmQgYXRvbWljX2ZsYWcsIGFuZCBwZ19hdG9taWMoYm9vbCkgZG9lc24ndCBz ZWVtCiAgIHRvIGJlIHBvcnRhYmxlIGVub3VnaCkKICogTGV0IHRoZSBjb21waWxlci9ydW50aW1l IGVtdWxhdGUgNjQgYml0IGF0b21pY3Mgd2l0aCBsb2NrcyBmb3IgYXJtdjcKICogVGhlIHBlci1j b21waWxlciBoZWFkZXJzIG5vdyBqdXN0IGRlZmluZSBwZ19jb21waWxlcl9iYXJyaWVyX2ltcGwo KQogKiBUaGUgcGVyLWFyY2ggaGVhZGVycyBub3cgb3B0aW9uYWxseSBkZWZpbmUKICAgcGdfe21l bW9yeSxyZWFkLHdyaXRlfV9iYXJyaWVyX2ltcGwoKSBidXQgb25seSBpZiB0aGV5IHRoaW5rIHRo ZXkgY2FuCiAgIGRvIHNvbWV0aGluZyBiZXR0ZXIgdGhhbiBjb21waWxlcnMgKHRvIGludmVzdGln YXRlLi4uKQogKiBEcm9wIHRoZSBzZWNvbmRhcnkgY29weSBvZiB0aGUgYW5jaWVudCBzcGlubG9j ayBvcHMgZnJvbSBhdG9taWNzCiAqIERyb3AgYXJjaC17YXJtLHBwY30uaCwgZmFsbGJhY2suaCBh bmQgZ2VuZXJpYy5oCgpXSVAhCgpOZWVkIHRvIHJlc2VhcmNoIGdlbmVyYXRlZCBjb2RlIG9uIGFs bCBhcmNoaXRlY3R1cmVzIGFuZCBzZWUgaWYgYW55dGhpbmcKaW1wb3J0YW50IGlzIGxvc3QuICBO ZWVkIHRvIHRoaW5rIGFib3V0IHdoZXRoZXIgYWxpZ25tZW50CmFzc2VydGlvbnMgYXJlIHdvcnRo IHNhdmluZy4gIE5lZWQgdG8gdGVzdCBvbiBWaXN1YWwgU3R1ZGlvIDIwMjIgd2l0aAovZXhwZXJp bWVudGFsOmMxMWF0b21pY3MgKD8pLgotLS0KIHNyYy9pbmNsdWRlL3BvcnQvYXRvbWljcy5oICAg ICAgICAgICAgICB8IDYyMSArKysrKystLS0tLS0tLS0tLS0tLS0tLS0KIHNyYy9pbmNsdWRlL3Bv cnQvYXRvbWljcy9hcmNoLWFybS5oICAgICB8ICAzMiAtLQogc3JjL2luY2x1ZGUvcG9ydC9hdG9t aWNzL2FyY2gtcHBjLmggICAgIHwgMjU2IC0tLS0tLS0tLS0KIHNyYy9pbmNsdWRlL3BvcnQvYXRv bWljcy9hcmNoLXg4Ni5oICAgICB8IDIwNSAtLS0tLS0tLQogc3JjL2luY2x1ZGUvcG9ydC9hdG9t aWNzL2ZhbGxiYWNrLmggICAgIHwgIDQyIC0tCiBzcmMvaW5jbHVkZS9wb3J0L2F0b21pY3MvZ2Vu ZXJpYy1nY2MuaCAgfCAzMDcgKy0tLS0tLS0tLS0tCiBzcmMvaW5jbHVkZS9wb3J0L2F0b21pY3Mv Z2VuZXJpYy1tc3ZjLmggfCAgOTggKy0tLQogc3JjL2luY2x1ZGUvcG9ydC9hdG9taWNzL2dlbmVy aWMuaCAgICAgIHwgNDI3IC0tLS0tLS0tLS0tLS0tLS0KIHNyYy90b29scy9wZ2luZGVudC90eXBl ZGVmcy5saXN0ICAgICAgICB8ICAgMiArCiA5IGZpbGVzIGNoYW5nZWQsIDE2NiBpbnNlcnRpb25z KCspLCAxODI0IGRlbGV0aW9ucygtKQogZGVsZXRlIG1vZGUgMTAwNjQ0IHNyYy9pbmNsdWRlL3Bv cnQvYXRvbWljcy9hcmNoLWFybS5oCiBkZWxldGUgbW9kZSAxMDA2NDQgc3JjL2luY2x1ZGUvcG9y dC9hdG9taWNzL2FyY2gtcHBjLmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBzcmMvaW5jbHVkZS9wb3J0 L2F0b21pY3MvZmFsbGJhY2suaAogZGVsZXRlIG1vZGUgMTAwNjQ0IHNyYy9pbmNsdWRlL3BvcnQv YXRvbWljcy9nZW5lcmljLmgKCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9wb3J0L2F0b21pY3Mu aCBiL3NyYy9pbmNsdWRlL3BvcnQvYXRvbWljcy5oCmluZGV4IDk2ZjE4NThkYTk3Li42MWE2YjQz MjJmZCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcG9ydC9hdG9taWNzLmgKKysrIGIvc3JjL2lu Y2x1ZGUvcG9ydC9hdG9taWNzLmgKQEAgLTMsMjQgKzMsMzMgQEAKICAqIGF0b21pY3MuaAogICoJ ICBBdG9taWMgb3BlcmF0aW9ucy4KICAqCi0gKiBIYXJkd2FyZSBhbmQgY29tcGlsZXIgZGVwZW5k ZW50IGZ1bmN0aW9ucyBmb3IgbWFuaXB1bGF0aW5nIG1lbW9yeQotICogYXRvbWljYWxseSBhbmQg ZGVhbGluZyB3aXRoIGNhY2hlIGNvaGVyZW5jeS4gVXNlZCB0byBpbXBsZW1lbnQgbG9ja2luZwot ICogZmFjaWxpdGllcyBhbmQgbG9ja2xlc3MgYWxnb3JpdGhtcy9kYXRhIHN0cnVjdHVyZXMuCisg KiBUaGVzZSBpbnRlcmZhY2VzIGFyZSBmb3IgbWFuaXB1bGF0aW5nIG1lbW9yeSBhdG9taWNhbGx5 IGFuZCBkZWFsaW5nIHdpdGgKKyAqIGNhY2hlIGNvaGVyZW5jeS4gVGhleSBjYW4gYmUgdXNlZCB0 byBpbXBsZW1lbnQgbG9ja2luZyBmYWNpbGl0aWVzIGFuZAorICogbG9ja2xlc3MgYWxnb3JpdGht cy9kYXRhIHN0cnVjdHVyZXMuCiAgKgotICogVG8gYnJpbmcgdXAgcG9zdGdyZXMgb24gYSBwbGF0 Zm9ybS9jb21waWxlciBhdCB0aGUgdmVyeSBsZWFzdAotICogaW1wbGVtZW50YXRpb25zIGZvciB0 aGUgZm9sbG93aW5nIG9wZXJhdGlvbnMgc2hvdWxkIGJlIHByb3ZpZGVkOgotICogKiBwZ19jb21w aWxlcl9iYXJyaWVyKCksIHBnX3dyaXRlX2JhcnJpZXIoKSwgcGdfcmVhZF9iYXJyaWVyKCkKLSAq ICogcGdfYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2VfdTMyKCksIHBnX2F0b21pY19mZXRjaF9hZGRf dTMyKCkKLSAqICogcGdfYXRvbWljX3Rlc3Rfc2V0X2ZsYWcoKSwgcGdfYXRvbWljX2luaXRfZmxh ZygpLCBwZ19hdG9taWNfY2xlYXJfZmxhZygpCi0gKiAqIFBHX0hBVkVfOEJZVEVfU0lOR0xFX0NP UFlfQVRPTUlDSVRZIHNob3VsZCBiZSBkZWZpbmVkIGlmIGFwcHJvcHJpYXRlLgorICogVGhpcyBp cyBtb3N0bHkgYSByZW5hbWluZyBvZiA8c3RkYXRvbWljLmg+LCB3aXRoIHNvbWUgZGlmZmVyZW5j ZXM6CiAgKgotICogVGhlcmUgZXhpc3QgZ2VuZXJpYywgaGFyZHdhcmUgaW5kZXBlbmRlbnQsIGlt cGxlbWVudGF0aW9ucyBmb3Igc2V2ZXJhbAotICogY29tcGlsZXJzIHdoaWNoIG1pZ2h0IGJlIHN1 ZmZpY2llbnQsIGFsdGhvdWdoIHBvc3NpYmx5IG5vdCBvcHRpbWFsLCBmb3IgYQotICogbmV3IHBs YXRmb3JtLiBJZiBubyBzdWNoIGdlbmVyaWMgaW1wbGVtZW50YXRpb24gaXMgYXZhaWxhYmxlIHNw aW5sb2NrcyB3aWxsCi0gKiBiZSB1c2VkIHRvIGltcGxlbWVudCB0aGUgNjQtYml0IHBhcnRzIG9m IHRoZSBBUEkuCisgKiAqIHJlYWQvd3JpdGUgYmFycmllcnMgKHdlYWtlciB0aGFuIGFjcXVpcmUv cmVsZWFzZSkKKyAqICogdGhleSBhZmZlY3QgZXZlbiBub24tYXRvbWljIGFjY2VzcyB3aXRob3V0 IGRlcGVuZGVuY3kgb24gYXRvbWljIGFjY2VzcworICogKiBwZ19hdG9taWNfZmxhZyBzZW1hbnRp Y3MgZG9uJ3QgYWxsb3cgbWFwcGluZyB0byBhdG9taWNfZmxhZwogICoKLSAqIEltcGxlbWVudCBf dTY0IGF0b21pY3MgaWYgYW5kIG9ubHkgaWYgeW91ciBwbGF0Zm9ybSBjYW4gdXNlIHRoZW0KLSAq IGVmZmljaWVudGx5IChhbmQgb2J2aW91c2x5IGNvcnJlY3RseSkuCisgKiBQb3N0Z3JlU1FMIGF0 b21pYyB0eXBlIHdpZHRoIGFzc3VtcHRpb25zOgorICoKKyAqIDgsIDE2OiAgUmVxdWlyZWQgdG8g YmUgbG9jay1mcmVlIChldmVuIHRob3VnaCBpbXBsZW1lbnRlZCB3aXRoIHdpZGVyCisgKiAgICAg ICAgIGluc3RydWN0aW9ucyBieSB0aGUgY29tcGlsZXIgb24gc29tZSBSSVNDLVYgc3lzdGVtcyku CisgKgorICogMzI6ICAgICBSZXF1aXJlZCB0byBiZSBsb2NrLWZyZWUuICBObyBrbm93biBtb2Rl cm4gc3lzdGVtIGxhY2tzIHRoZW0uCisgKgorICogNjQ6ICAgICBUaGVzZSBjYW4gcmVhc29uYWJs eSBiZSBleHBlY3RlZCB0byBiZSBsb2NrLWZyZWUgYW5kIGZhc3Qgb24KKyAqICAgICAgICAgYWxs IG1vZGVybi1pc2ggc3lzdGVtcy4gIEZvciBvbmUga25vd24gbG93LWVuZCBzeXN0ZW0gIHRoZXkg YXJlCisgKiAgICAgICAgIGVtdWxhdGVkIGJ5IHRoZSBjb21waWxlci9ydW50aW1lIHdpdGggbG9j a3MgKGFybXY3KS4KKyAqCisgKiBJbiBhbGwgY2FzZXMgdmFsdWVzIG11c3QgYmUgd2VsbCBhbGln bmVkIG9yIHVuZGVmaW5lZCBiZWhhdmlvciByZXN1bHRzLgorICoKKyAqIFRvIGJyaW5nIHVwIHBv c3RncmVzIG9uIGEgY29tcGlsZXIsIHByb3ZpZGU6CisgKiAqIHBnX2NvbXBpbGVyX2JhcnJpZXIo KQorICogT3B0aW9uYWxseSBhbHNvOgorICogKiBwZ19tZW1vcnlfYmFycmllcigpLCBwZ193cml0 ZV9iYXJyaWVyKCksIHBnX3JlYWRfYmFycmllcigpCiAgKgogICogVXNlIGhpZ2hlciBsZXZlbCBm dW5jdGlvbmFsaXR5IChsd2xvY2tzLCBzcGlubG9ja3MsIGhlYXZ5d2VpZ2h0IGxvY2tzKQogICog d2hlbmV2ZXIgcG9zc2libGUuIFdyaXRpbmcgY29ycmVjdCBjb2RlIHVzaW5nIHRoZXNlIGZhY2ls aXRpZXMgaXMgaGFyZC4KQEAgLTM4LDQ4ICs0Nyw1OSBAQAogI2lmbmRlZiBBVE9NSUNTX0gKICNk ZWZpbmUgQVRPTUlDU19ICiAKLSNpZmRlZiBGUk9OVEVORAotI2Vycm9yICJhdG9taWNzLmggbWF5 IG5vdCBiZSBpbmNsdWRlZCBmcm9tIGZyb250ZW5kIGNvZGUiCi0jZW5kaWYKLQogI2RlZmluZSBJ TlNJREVfQVRPTUlDU19ICiAKLSNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpZiBkZWZpbmVkKF9fY3Bs dXNwbHVzKSAmJiBfX2NwbHVzcGx1cyA8IDIwMjMwMkwKKy8qIEMrKzExIGNvdWxkbid0IGhhbmRs ZSA8c3RkYXRvbWljLmg+LiAgVXNlIGFwcHJvYWNoIGZyb20gQysrMjMgMzMuNS4xMi4gKi8KK2V4 dGVybiAiQysrIgoreworI2luY2x1ZGUgPGF0b21pYz4KKyNkZWZpbmUgcGdfYXRvbWljKFQpIHN0 ZDo6YXRvbWljPFQ+CisJdXNpbmcJCXN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQ7CisJdXNpbmcJ CXN0ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmU7CisJdXNpbmcJCXN0ZDo6bWVtb3J5X29yZGVyX3Jl bGVhc2U7CisJdXNpbmcJCXN0ZDo6bWVtb3J5X29yZGVyX2FjcV9yZWw7CisJdXNpbmcJCXN0ZDo6 bWVtb3J5X29yZGVyX3NlcV9jc3Q7Cit9CisjZWxzZQorI2luY2x1ZGUgPHN0ZGF0b21pYy5oPgor I2RlZmluZSBwZ19hdG9taWMoVCkgX0F0b21pYyhUKQorI2VuZGlmCisKKy8qIEFzc3VtcHRpb25z IGFib3V0IGxvY2stZnJlZSBhY2Nlc3MuICovCitTdGF0aWNBc3NlcnREZWNsKEFUT01JQ19DSEFS X0xPQ0tfRlJFRSA+PSAyLCAibmVlZCBsb2NrLWZyZWUgOC1iaXQgYXRvbWljcyIpOworU3RhdGlj QXNzZXJ0RGVjbChBVE9NSUNfU0hPUlRfTE9DS19GUkVFID49IDIsICJuZWVkIGxvY2stZnJlZSAx Ni1iaXQgYXRvbWljcyIpOworU3RhdGljQXNzZXJ0RGVjbChBVE9NSUNfSU5UX0xPQ0tfRlJFRSA+ PSAyLCAibmVlZCBsb2NrLWZyZWUgMzItYml0IGF0b21pY3MiKTsKKworLyogQ2FuJ3QgdXNlIHN0 YW5kYXJkIGF0b21pY19mbGFnIGR1ZSB0byBleHRlbmRlZCBzZW1hbnRpY3MsIHNlZSBiZWxvdy4g Ki8KK3R5cGVkZWYgcGdfYXRvbWljKHVpbnQ4KQorcGdfYXRvbWljX2ZsYWc7CisKKy8qIENvbW1v biBzdXBwb3J0ZWQgYXRvbWljIGludGVnZXIgdHlwZXMuICovCit0eXBlZGVmIHBnX2F0b21pYyh1 aW50OCkKK3BnX2F0b21pY191aW50ODsKK3R5cGVkZWYgcGdfYXRvbWljKHVpbnQxNikKK3BnX2F0 b21pY191aW50MTY7Cit0eXBlZGVmIHBnX2F0b21pYyh1aW50MzIpCitwZ19hdG9taWNfdWludDMy OwordHlwZWRlZiBwZ19hdG9taWModWludDY0KQorcGdfYXRvbWljX3VpbnQ2NDsKIAogLyoKICAq IEZpcnN0IGEgc2V0IG9mIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBmaWxlcyBpcyBpbmNsdWRlZC4K ICAqCi0gKiBUaGVzZSBmaWxlcyBjYW4gcHJvdmlkZSB0aGUgZnVsbCBzZXQgb2YgYXRvbWljcyBv ciBjYW4gZG8gcHJldHR5IG11Y2gKLSAqIG5vdGhpbmcgaWYgYWxsIHRoZSBjb21waWxlcnMgY29t bW9ubHkgdXNlZCBvbiB0aGVzZSBwbGF0Zm9ybXMgcHJvdmlkZQotICogdXNhYmxlIGdlbmVyaWNz LgotICoKLSAqIERvbid0IGFkZCBhbiBpbmxpbmUgYXNzZW1ibHkgb2YgdGhlIGFjdHVhbCBhdG9t aWMgb3BlcmF0aW9ucyBpZiBhbGwgdGhlCi0gKiBjb21tb24gaW1wbGVtZW50YXRpb25zIG9mIHlv dXIgcGxhdGZvcm0gcHJvdmlkZSBpbnRyaW5zaWNzLiBJbnRyaW5zaWNzIGFyZQotICogbXVjaCBl YXNpZXIgdG8gdW5kZXJzdGFuZCBhbmQgcG90ZW50aWFsbHkgc3VwcG9ydCBtb3JlIGFyY2hpdGVj dHVyZXMuCi0gKgogICogSXQgd2lsbCBvZnRlbiBtYWtlIHNlbnNlIHRvIGRlZmluZSBtZW1vcnkg YmFycmllciBzZW1hbnRpY3MgaGVyZSwgc2luY2UKICAqIGUuZy4gZ2VuZXJpYyBjb21waWxlciBp bnRyaW5zaWNzIGZvciB4ODYgbWVtb3J5IGJhcnJpZXJzIGNhbid0IGtub3cgdGhhdAogICogcG9z dGdyZXMgZG9lc24ndCBuZWVkIHg4NiByZWFkL3dyaXRlIGJhcnJpZXJzIGRvIGFueXRoaW5nIG1v cmUgdGhhbiBhCiAgKiBjb21waWxlciBiYXJyaWVyLgotICoKICAqLwotI2lmIGRlZmluZWQoX19h cm1fXykgfHwgZGVmaW5lZChfX2FybSkgfHwgZGVmaW5lZChfX2FhcmNoNjRfXykKLSNpbmNsdWRl ICJwb3J0L2F0b21pY3MvYXJjaC1hcm0uaCIKLSNlbGlmIGRlZmluZWQoX19pMzg2X18pIHx8IGRl ZmluZWQoX19pMzg2KSB8fCBkZWZpbmVkKF9feDg2XzY0X18pCisjaWYgZGVmaW5lZChfX2kzODZf XykgfHwgZGVmaW5lZChfX2kzODYpIHx8IGRlZmluZWQoX194ODZfNjRfXykKICNpbmNsdWRlICJw b3J0L2F0b21pY3MvYXJjaC14ODYuaCIKLSNlbGlmIGRlZmluZWQoX19wcGNfXykgfHwgZGVmaW5l ZChfX3Bvd2VycGNfXykgfHwgZGVmaW5lZChfX3BwYzY0X18pIHx8IGRlZmluZWQoX19wb3dlcnBj NjRfXykKLSNpbmNsdWRlICJwb3J0L2F0b21pY3MvYXJjaC1wcGMuaCIKICNlbmRpZgogCiAvKgog ICogQ29tcGlsZXIgc3BlY2lmaWMsIGJ1dCBhcmNoaXRlY3R1cmUgaW5kZXBlbmRlbnQgaW1wbGVt ZW50YXRpb25zLgotICoKLSAqIFByb3ZpZGUgYXJjaGl0ZWN0dXJlIGluZGVwZW5kZW50IGltcGxl bWVudGF0aW9ucyBvZiB0aGUgYXRvbWljCi0gKiBmYWNpbGl0aWVzLiBBdCB0aGUgdmVyeSBsZWFz dCBjb21waWxlciBiYXJyaWVycyBzaG91bGQgYmUgcHJvdmlkZWQsIGJ1dCBhCi0gKiBmdWxsIGlt cGxlbWVudGF0aW9uIG9mCi0gKiAqIHBnX2NvbXBpbGVyX2JhcnJpZXIoKSwgcGdfd3JpdGVfYmFy cmllcigpLCBwZ19yZWFkX2JhcnJpZXIoKQotICogKiBwZ19hdG9taWNfY29tcGFyZV9leGNoYW5n ZV91MzIoKSwgcGdfYXRvbWljX2ZldGNoX2FkZF91MzIoKQotICogdXNpbmcgY29tcGlsZXIgaW50 cmluc2ljcyBhcmUgYSBnb29kIGlkZWEuCisgKiBUaGlzIGRlZmluZXMgY29tcGlsZXIgYmFycmll cnMuCiAgKi8KIC8qCiAgKiBnY2Mgb3IgY29tcGF0aWJsZSwgaW5jbHVkaW5nIGNsYW5nIGFuZCBp Y2MuCkBAIC05MywyOSArMTEzLDkgQEAKICNlbmRpZgogCiAvKiBGYWlsIGlmIHdlIGNvdWxkbid0 IGZpbmQgaW1wbGVtZW50YXRpb25zIG9mIHJlcXVpcmVkIGZhY2lsaXRpZXMuICovCi0jaWYgIWRl ZmluZWQoUEdfSEFWRV9BVE9NSUNfVTMyX1NVUFBPUlQpCi0jZXJyb3IgImNvdWxkIG5vdCBmaW5k IGFuIGltcGxlbWVudGF0aW9uIG9mIHBnX2F0b21pY191aW50MzIiCi0jZW5kaWYKICNpZiAhZGVm aW5lZChwZ19jb21waWxlcl9iYXJyaWVyX2ltcGwpCiAjZXJyb3IgImNvdWxkIG5vdCBmaW5kIGFu IGltcGxlbWVudGF0aW9uIG9mIHBnX2NvbXBpbGVyX2JhcnJpZXIiCiAjZW5kaWYKLSNpZiAhZGVm aW5lZChwZ19tZW1vcnlfYmFycmllcl9pbXBsKQotI2Vycm9yICJjb3VsZCBub3QgZmluZCBhbiBp bXBsZW1lbnRhdGlvbiBvZiBwZ19tZW1vcnlfYmFycmllcl9pbXBsIgotI2VuZGlmCi0KLQotLyoK LSAqIFByb3ZpZGUgYSBzcGlubG9jay1iYXNlZCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgNjQgYml0 IHZhcmlhbnRzLCBpZgotICogbmVjZXNzYXJ5LgotICovCi0jaW5jbHVkZSAicG9ydC9hdG9taWNz L2ZhbGxiYWNrLmgiCi0KLS8qCi0gKiBQcm92aWRlIGFkZGl0aW9uYWwgb3BlcmF0aW9ucyB1c2lu ZyBzdXBwb3J0ZWQgaW5mcmFzdHJ1Y3R1cmUuIFRoZXNlIGFyZQotICogZXhwZWN0ZWQgdG8gYmUg ZWZmaWNpZW50IGlmIHRoZSB1bmRlcmx5aW5nIGF0b21pYyBvcGVyYXRpb25zIGFyZSBlZmZpY2ll bnQuCi0gKi8KLSNpbmNsdWRlICJwb3J0L2F0b21pY3MvZ2VuZXJpYy5oIgotCiAKIC8qCiAgKiBw Z19jb21waWxlcl9iYXJyaWVyIC0gcHJldmVudCB0aGUgY29tcGlsZXIgZnJvbSBtb3ZpbmcgY29k ZSBhY3Jvc3MKQEAgLTEyNSw2ICsxMjUsMTAgQEAKICAqIHJlb3JkZXIgbG9hZHMgb3Igc3RvcmVz IHRvIG1haW4gbWVtb3J5IGFyb3VuZCB0aGUgYmFycmllci4gIEhvd2V2ZXIsIHRoZQogICogQ1BV IG1heSBzdGlsbCByZW9yZGVyIGxvYWRzIG9yIHN0b3JlcyBhdCBydW50aW1lLCBpZiB0aGUgYXJj aGl0ZWN0dXJlJ3MKICAqIG1lbW9yeSBtb2RlbCBwZXJtaXRzIHRoaXMuCisgKgorICogVW5saWtl IHN0YW5kYXJkIGF0b21pY19zaWduYWxfZmVuY2UoKSwgcGdfY29tcGlsZXJfYmFycmllcigpIHBy ZXZlbnRzCisgKiByZW9yZGVyaW5nIG9mIG5vbi1hdG9taWMsIG5vbi12b2xhdGlsZSBhY2Nlc3Nl cywgc28gYSBjb21waWxlci1zcGVjaWZpYworICogZGVmaW5pdGlvbiBpcyByZXF1aXJlZC4KICAq LwogI2RlZmluZSBwZ19jb21waWxlcl9iYXJyaWVyKCkJcGdfY29tcGlsZXJfYmFycmllcl9pbXBs KCkKIApAQCAtMTM3LDggKzE0MSwyMCBAQAogICogbG9hZHMgYW5kIHN0b3JlcyBhcmUgdG90YWxs eSBvcmRlcmVkICh3aGljaCBpcyBub3QgdGhlIGNhc2Ugb24gbW9zdAogICogYXJjaGl0ZWN0dXJl cykgdGhpcyByZXF1aXJlcyBpc3N1aW5nIHNvbWUgc29ydCBvZiBtZW1vcnkgZmVuY2luZwogICog aW5zdHJ1Y3Rpb24uCisgKgorICogVW5saWtlIHN0YW5kYXJkIGF0b21pY190aHJlYWRfZmVuY2Uo KSwgcGdfe3JlYWQsd3JpdGV9X2JhcnJpZXIoKSBhZmZlY3RzCisgKiBub24tYXRvbWljLCBub24t dm9sYXRpbGUgYWNjZXNzZXMuCiAgKi8KLSNkZWZpbmUgcGdfbWVtb3J5X2JhcnJpZXIoKSBwZ19t ZW1vcnlfYmFycmllcl9pbXBsKCkKK3N0YXRpYyBpbmxpbmUgdm9pZAorcGdfbWVtb3J5X2JhcnJp ZXIodm9pZCkKK3sKKyNpZmRlZiBwZ19tZW1vcnlfYmFycmllcl9pbXBsCisJcGdfbWVtb3J5X2Jh cnJpZXJfaW1wbCgpOworI2Vsc2UKKwlwZ19jb21waWxlcl9iYXJyaWVyKCk7CisJYXRvbWljX3Ro cmVhZF9mZW5jZShtZW1vcnlfb3JkZXJfc2VxX2NzdCk7CisjZW5kaWYKK30KIAogLyoKICAqIHBn XyhyZWFkfHdyaXRlKV9iYXJyaWVyIC0gcHJldmVudCB0aGUgQ1BVIGZyb20gcmVvcmRlcmluZyBt ZW1vcnkgYWNjZXNzCkBAIC0xNTAsNDI3ICsxNjYsMTE2IEBACiAgKiBhcmUgdGh1cyB3ZWFrZXIg dGhhbiBhIGZ1bGwgbWVtb3J5IGJhcnJpZXIsIGJ1dCBzdHJvbmdlciB0aGFuIGEgY29tcGlsZXIK ICAqIGJhcnJpZXIuICBJbiBwcmFjdGljZSwgb24gbWFjaGluZXMgd2l0aCBzdHJvbmcgbWVtb3J5 IG9yZGVyaW5nLCByZWFkIGFuZAogICogd3JpdGUgYmFycmllcnMgbWF5IHJlcXVpcmUgbm90aGlu ZyBtb3JlIHRoYW4gYSBjb21waWxlciBiYXJyaWVyLgotICovCi0jZGVmaW5lIHBnX3JlYWRfYmFy cmllcigpCXBnX3JlYWRfYmFycmllcl9pbXBsKCkKLSNkZWZpbmUgcGdfd3JpdGVfYmFycmllcigp CXBnX3dyaXRlX2JhcnJpZXJfaW1wbCgpCi0KLS8qCi0gKiBTcGlubG9vcCBkZWxheSAtIEFsbG93 IENQVSB0byByZWxheCBpbiBidXN5IGxvb3BzCi0gKi8KLSNkZWZpbmUgcGdfc3Bpbl9kZWxheSgp IHBnX3NwaW5fZGVsYXlfaW1wbCgpCi0KLS8qCi0gKiBwZ19hdG9taWNfaW5pdF9mbGFnIC0gaW5p dGlhbGl6ZSBhdG9taWMgZmxhZy4KLSAqCi0gKiBObyBiYXJyaWVyIHNlbWFudGljcy4KLSAqLwot c3RhdGljIGlubGluZSB2b2lkCi1wZ19hdG9taWNfaW5pdF9mbGFnKHZvbGF0aWxlIHBnX2F0b21p Y19mbGFnICpwdHIpCi17Ci0JcGdfYXRvbWljX2luaXRfZmxhZ19pbXBsKHB0cik7Ci19Ci0KLS8q Ci0gKiBwZ19hdG9taWNfdGVzdF9zZXRfZmxhZyAtIFRBUygpCi0gKgotICogUmV0dXJucyB0cnVl IGlmIHRoZSBmbGFnIGhhcyBzdWNjZXNzZnVsbHkgYmVlbiBzZXQsIGZhbHNlIG90aGVyd2lzZS4K LSAqCi0gKiBBY3F1aXJlIChpbmNsdWRpbmcgcmVhZCBiYXJyaWVyKSBzZW1hbnRpY3MuCi0gKi8K LXN0YXRpYyBpbmxpbmUgYm9vbAotcGdfYXRvbWljX3Rlc3Rfc2V0X2ZsYWcodm9sYXRpbGUgcGdf YXRvbWljX2ZsYWcgKnB0cikKLXsKLQlyZXR1cm4gcGdfYXRvbWljX3Rlc3Rfc2V0X2ZsYWdfaW1w bChwdHIpOwotfQotCi0vKgotICogcGdfYXRvbWljX3VubG9ja2VkX3Rlc3RfZmxhZyAtIENoZWNr IGlmIHRoZSBsb2NrIGlzIGZyZWUKLSAqCi0gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGZsYWcgY3Vy cmVudGx5IGlzIG5vdCBzZXQsIGZhbHNlIG90aGVyd2lzZS4KLSAqCi0gKiBObyBiYXJyaWVyIHNl bWFudGljcy4KLSAqLwotc3RhdGljIGlubGluZSBib29sCi1wZ19hdG9taWNfdW5sb2NrZWRfdGVz dF9mbGFnKHZvbGF0aWxlIHBnX2F0b21pY19mbGFnICpwdHIpCi17Ci0JcmV0dXJuIHBnX2F0b21p Y191bmxvY2tlZF90ZXN0X2ZsYWdfaW1wbChwdHIpOwotfQotCi0vKgotICogcGdfYXRvbWljX2Ns ZWFyX2ZsYWcgLSByZWxlYXNlIGxvY2sgc2V0IGJ5IFRBUygpCiAgKgotICogUmVsZWFzZSAoaW5j bHVkaW5nIHdyaXRlIGJhcnJpZXIpIHNlbWFudGljcy4KKyAqIFVubGlrZSBzdGFuZGFyZCBhdG9t aWNfdGhyZWFkX2ZlbmNlKCksIHBnX3tyZWFkLHdyaXRlfV9iYXJyaWVyKCkgYWZmZWN0cworICog bm9uLWF0b21pYywgbm9uLXZvbGF0aWxlIGFjY2Vzc2VzLiAgVGhlIGRlZmF1bHQgaW1wbGVtZW50 YXRpb24gdXNlcworICogYWNxdWlyZS9yZWxlYXNlIGZlbmNlcywgYnV0IHRoZXNlIGFyZSBzdHJp Y3RseSBzdHJvbmdlciB0aGFuIHJlYWQvd3JpdGUuCiAgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZAot cGdfYXRvbWljX2NsZWFyX2ZsYWcodm9sYXRpbGUgcGdfYXRvbWljX2ZsYWcgKnB0cikKLXsKLQlw Z19hdG9taWNfY2xlYXJfZmxhZ19pbXBsKHB0cik7Ci19Ci0KIAotLyoKLSAqIHBnX2F0b21pY19p bml0X3UzMiAtIGluaXRpYWxpemUgYXRvbWljIHZhcmlhYmxlCi0gKgotICogSGFzIHRvIGJlIGRv bmUgYmVmb3JlIGFueSBjb25jdXJyZW50IHVzYWdlLi4KLSAqCi0gKiBObyBiYXJyaWVyIHNlbWFu dGljcy4KLSAqLwogc3RhdGljIGlubGluZSB2b2lkCi1wZ19hdG9taWNfaW5pdF91MzIodm9sYXRp bGUgcGdfYXRvbWljX3VpbnQzMiAqcHRyLCB1aW50MzIgdmFsKQotewotCUFzc2VydFBvaW50ZXJB bGlnbm1lbnQocHRyLCA0KTsKLQotCXBnX2F0b21pY19pbml0X3UzMl9pbXBsKHB0ciwgdmFsKTsK LX0KLQotLyoKLSAqIHBnX2F0b21pY19yZWFkX3UzMiAtIHVubG9ja2VkIHJlYWQgZnJvbSBhdG9t aWMgdmFyaWFibGUuCi0gKgotICogVGhlIHJlYWQgaXMgZ3VhcmFudGVlZCB0byByZXR1cm4gYSB2 YWx1ZSBhcyBpdCBoYXMgYmVlbiB3cml0dGVuIGJ5IHRoaXMgb3IKLSAqIGFub3RoZXIgcHJvY2Vz cyBhdCBzb21lIHBvaW50IGluIHRoZSBwYXN0LiBUaGVyZSdzIGhvd2V2ZXIgbm8gY2FjaGUKLSAq IGNvaGVyZW5jeSBpbnRlcmFjdGlvbiBndWFyYW50ZWVpbmcgdGhlIHZhbHVlIGhhc24ndCBzaW5j ZSBiZWVuIHdyaXR0ZW4gdG8KLSAqIGFnYWluLgotICoKLSAqIE5vIGJhcnJpZXIgc2VtYW50aWNz LgotICovCi1zdGF0aWMgaW5saW5lIHVpbnQzMgotcGdfYXRvbWljX3JlYWRfdTMyKHZvbGF0aWxl IHBnX2F0b21pY191aW50MzIgKnB0cikKLXsKLQlBc3NlcnRQb2ludGVyQWxpZ25tZW50KHB0ciwg NCk7Ci0JcmV0dXJuIHBnX2F0b21pY19yZWFkX3UzMl9pbXBsKHB0cik7Ci19Ci0KLS8qCi0gKiBw Z19hdG9taWNfcmVhZF9tZW1iYXJyaWVyX3UzMiAtIHJlYWQgd2l0aCBiYXJyaWVyIHNlbWFudGlj cy4KLSAqCi0gKiBUaGlzIHJlYWQgaXMgZ3VhcmFudGVlZCB0byByZXR1cm4gdGhlIGN1cnJlbnQg dmFsdWUsIHByb3ZpZGVkIHRoYXQgdGhlIHZhbHVlCi0gKiBpcyBvbmx5IGV2ZXIgdXBkYXRlZCB2 aWEgb3BlcmF0aW9ucyB3aXRoIGJhcnJpZXIgc2VtYW50aWNzLCBzdWNoIGFzCi0gKiBwZ19hdG9t aWNfY29tcGFyZV9leGNoYW5nZV91MzIoKSBhbmQgcGdfYXRvbWljX3dyaXRlX21lbWJhcnJpZXJf dTMyKCkuCi0gKiBXaGlsZSB0aGlzIG1heSBiZSBsZXNzIHBlcmZvcm1hbnQgdGhhbiBwZ19hdG9t aWNfcmVhZF91MzIoKSwgaXQgbWF5IGJlCi0gKiBlYXNpZXIgdG8gcmVhc29uIGFib3V0IGNvcnJl Y3RuZXNzIHdpdGggdGhpcyBmdW5jdGlvbiBpbiBsZXNzIHBlcmZvcm1hbmNlLQotICogc2Vuc2l0 aXZlIGNvZGUuCi0gKgotICogRnVsbCBiYXJyaWVyIHNlbWFudGljcy4KLSAqLwotc3RhdGljIGlu bGluZSB1aW50MzIKLXBnX2F0b21pY19yZWFkX21lbWJhcnJpZXJfdTMyKHZvbGF0aWxlIHBnX2F0 b21pY191aW50MzIgKnB0cikKK3BnX3JlYWRfYmFycmllcih2b2lkKQogewotCUFzc2VydFBvaW50 ZXJBbGlnbm1lbnQocHRyLCA0KTsKLQotCXJldHVybiBwZ19hdG9taWNfcmVhZF9tZW1iYXJyaWVy X3UzMl9pbXBsKHB0cik7Ci19Ci0KLS8qCi0gKiBwZ19hdG9taWNfd3JpdGVfdTMyIC0gd3JpdGUg dG8gYXRvbWljIHZhcmlhYmxlLgotICoKLSAqIFRoZSB3cml0ZSBpcyBndWFyYW50ZWVkIHRvIHN1 Y2NlZWQgYXMgYSB3aG9sZSwgaS5lLiBpdCdzIG5vdCBwb3NzaWJsZSB0bwotICogb2JzZXJ2ZSBh IHBhcnRpYWwgd3JpdGUgZm9yIGFueSByZWFkZXIuICBOb3RlIHRoYXQgdGhpcyBjb3JyZWN0bHkg aW50ZXJhY3RzCi0gKiB3aXRoIHBnX2F0b21pY19jb21wYXJlX2V4Y2hhbmdlX3UzMiwgaW4gY29u dHJhc3QgdG8KLSAqIHBnX2F0b21pY191bmxvY2tlZF93cml0ZV91MzIoKS4KLSAqCi0gKiBObyBi YXJyaWVyIHNlbWFudGljcy4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkCi1wZ19hdG9taWNfd3Jp dGVfdTMyKHZvbGF0aWxlIHBnX2F0b21pY191aW50MzIgKnB0ciwgdWludDMyIHZhbCkKLXsKLQlB c3NlcnRQb2ludGVyQWxpZ25tZW50KHB0ciwgNCk7Ci0KLQlwZ19hdG9taWNfd3JpdGVfdTMyX2lt cGwocHRyLCB2YWwpOwotfQotCi0vKgotICogcGdfYXRvbWljX3VubG9ja2VkX3dyaXRlX3UzMiAt IHVubG9ja2VkIHdyaXRlIHRvIGF0b21pYyB2YXJpYWJsZS4KLSAqCi0gKiBUaGUgd3JpdGUgaXMg Z3VhcmFudGVlZCB0byBzdWNjZWVkIGFzIGEgd2hvbGUsIGkuZS4gaXQncyBub3QgcG9zc2libGUg dG8KLSAqIG9ic2VydmUgYSBwYXJ0aWFsIHdyaXRlIGZvciBhbnkgcmVhZGVyLiAgQnV0IG5vdGUg dGhhdCB3cml0aW5nIHRoaXMgd2F5IGlzCi0gKiBub3QgZ3VhcmFudGVlZCB0byBjb3JyZWN0bHkg aW50ZXJhY3Qgd2l0aCByZWFkLW1vZGlmeS13cml0ZSBvcGVyYXRpb25zIGxpa2UKLSAqIHBnX2F0 b21pY19jb21wYXJlX2V4Y2hhbmdlX3UzMi4gIFRoaXMgc2hvdWxkIG9ubHkgYmUgdXNlZCBpbiBj YXNlcyB3aGVyZQotICogbWlub3IgcGVyZm9ybWFuY2UgcmVncmVzc2lvbnMgZHVlIHRvIGF0b21p Y3MgZW11bGF0aW9uIGFyZSB1bmFjY2VwdGFibGUuCi0gKgotICogTm8gYmFycmllciBzZW1hbnRp Y3MuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZAotcGdfYXRvbWljX3VubG9ja2VkX3dyaXRlX3Uz Mih2b2xhdGlsZSBwZ19hdG9taWNfdWludDMyICpwdHIsIHVpbnQzMiB2YWwpCi17Ci0JQXNzZXJ0 UG9pbnRlckFsaWdubWVudChwdHIsIDQpOwotCi0JcGdfYXRvbWljX3VubG9ja2VkX3dyaXRlX3Uz Ml9pbXBsKHB0ciwgdmFsKTsKKyNpZmRlZiBwZ19yZWFkX2JhcnJpZXJfaW1wbAorCXBnX3JlYWRf YmFycmllcl9pbXBsKCk7CisjZWxzZQorCXBnX2NvbXBpbGVyX2JhcnJpZXIoKTsKKwlhdG9taWNf dGhyZWFkX2ZlbmNlKG1lbW9yeV9vcmRlcl9hY3F1aXJlKTsKKyNlbmRpZgogfQogCi0vKgotICog cGdfYXRvbWljX3dyaXRlX21lbWJhcnJpZXJfdTMyIC0gd3JpdGUgd2l0aCBiYXJyaWVyIHNlbWFu dGljcy4KLSAqCi0gKiBUaGUgd3JpdGUgaXMgZ3VhcmFudGVlZCB0byBzdWNjZWVkIGFzIGEgd2hv bGUsIGkuZS4sIGl0J3Mgbm90IHBvc3NpYmxlIHRvCi0gKiBvYnNlcnZlIGEgcGFydGlhbCB3cml0 ZSBmb3IgYW55IHJlYWRlci4gIE5vdGUgdGhhdCB0aGlzIGNvcnJlY3RseSBpbnRlcmFjdHMKLSAq IHdpdGggYm90aCBwZ19hdG9taWNfY29tcGFyZV9leGNoYW5nZV91MzIoKSBhbmQKLSAqIHBnX2F0 b21pY19yZWFkX21lbWJhcnJpZXJfdTMyKCkuICBXaGlsZSB0aGlzIG1heSBiZSBsZXNzIHBlcmZv cm1hbnQgdGhhbgotICogcGdfYXRvbWljX3dyaXRlX3UzMigpLCBpdCBtYXkgYmUgZWFzaWVyIHRv IHJlYXNvbiBhYm91dCBjb3JyZWN0bmVzcyB3aXRoCi0gKiB0aGlzIGZ1bmN0aW9uIGluIGxlc3Mg cGVyZm9ybWFuY2Utc2Vuc2l0aXZlIGNvZGUuCi0gKgotICogRnVsbCBiYXJyaWVyIHNlbWFudGlj cy4KLSAqLwogc3RhdGljIGlubGluZSB2b2lkCi1wZ19hdG9taWNfd3JpdGVfbWVtYmFycmllcl91 MzIodm9sYXRpbGUgcGdfYXRvbWljX3VpbnQzMiAqcHRyLCB1aW50MzIgdmFsKQorcGdfd3JpdGVf YmFycmllcih2b2lkKQogewotCUFzc2VydFBvaW50ZXJBbGlnbm1lbnQocHRyLCA0KTsKLQotCXBn X2F0b21pY193cml0ZV9tZW1iYXJyaWVyX3UzMl9pbXBsKHB0ciwgdmFsKTsKLX0KLQotLyoKLSAq IHBnX2F0b21pY19leGNoYW5nZV91MzIgLSBleGNoYW5nZSBuZXd2YWwgd2l0aCBjdXJyZW50IHZh bHVlCi0gKgotICogUmV0dXJucyB0aGUgb2xkIHZhbHVlIG9mICdwdHInIGJlZm9yZSB0aGUgc3dh cC4KLSAqCi0gKiBGdWxsIGJhcnJpZXIgc2VtYW50aWNzLgotICovCi1zdGF0aWMgaW5saW5lIHVp bnQzMgotcGdfYXRvbWljX2V4Y2hhbmdlX3UzMih2b2xhdGlsZSBwZ19hdG9taWNfdWludDMyICpw dHIsIHVpbnQzMiBuZXd2YWwpCi17Ci0JQXNzZXJ0UG9pbnRlckFsaWdubWVudChwdHIsIDQpOwot Ci0JcmV0dXJuIHBnX2F0b21pY19leGNoYW5nZV91MzJfaW1wbChwdHIsIG5ld3ZhbCk7CisjaWZk ZWYgcGdfd3JpdGVfYmFycmllcl9pbXBsCisJcGdfd3JpdGVfYmFycmllcl9pbXBsKCk7CisjZWxz ZQorCXBnX2NvbXBpbGVyX2JhcnJpZXIoKTsKKwlhdG9taWNfdGhyZWFkX2ZlbmNlKG1lbW9yeV9v cmRlcl9yZWxlYXNlKTsKKyNlbmRpZgogfQogCiAvKgotICogcGdfYXRvbWljX2NvbXBhcmVfZXhj aGFuZ2VfdTMyIC0gQ0FTIG9wZXJhdGlvbgotICoKLSAqIEF0b21pY2FsbHkgY29tcGFyZSB0aGUg Y3VycmVudCB2YWx1ZSBvZiBwdHIgd2l0aCAqZXhwZWN0ZWQgYW5kIHN0b3JlIG5ld3ZhbAotICog aWZmIHB0ciBhbmQgKmV4cGVjdGVkIGhhdmUgdGhlIHNhbWUgdmFsdWUuIFRoZSBjdXJyZW50IHZh bHVlIG9mICpwdHIgd2lsbAotICogYWx3YXlzIGJlIHN0b3JlZCBpbiAqZXhwZWN0ZWQuCi0gKgot ICogUmV0dXJuIHRydWUgaWYgdmFsdWVzIGhhdmUgYmVlbiBleGNoYW5nZWQsIGZhbHNlIG90aGVy d2lzZS4KKyAqIE9wZXJhdGlvbnMgY29ycmVzcG9uZGluZyB0byBzdGFuZGFyZCBhdG9taWNfZmxh Zy4gIFdlIGhhdmUgdG8gdXNlIGFuIGludGVnZXIKKyAqIGluc3RlYWQgb2YgbWFwcGluZyBkaXJl Y3RseSB0byB0aGUgc3RhbmRhcmQgbmFtZXMsIHRvIHN1cHBvcnQgb3VyIHJlbGF4ZWQKKyAqIGNo ZWNrIGZ1bmN0aW9uLgogICoKLSAqIEZ1bGwgYmFycmllciBzZW1hbnRpY3MuCisgKiBBY3F1aXJl IGFuZCByZWxlYXNlIGZlbmNlcywgd2hpY2ggYXJlIHJlc3BlY3RpdmVseSBzdHJvbmdlciB0aGFu IHJlYWQgYW5kCisgKiB3cml0ZSBiYXJyaWVycy4KICAqLwotc3RhdGljIGlubGluZSBib29sCi1w Z19hdG9taWNfY29tcGFyZV9leGNoYW5nZV91MzIodm9sYXRpbGUgcGdfYXRvbWljX3VpbnQzMiAq cHRyLAotCQkJCQkJCSAgIHVpbnQzMiAqZXhwZWN0ZWQsIHVpbnQzMiBuZXd2YWwpCi17Ci0JQXNz ZXJ0UG9pbnRlckFsaWdubWVudChwdHIsIDQpOwotCUFzc2VydFBvaW50ZXJBbGlnbm1lbnQoZXhw ZWN0ZWQsIDQpOwotCi0JcmV0dXJuIHBnX2F0b21pY19jb21wYXJlX2V4Y2hhbmdlX3UzMl9pbXBs KHB0ciwgZXhwZWN0ZWQsIG5ld3ZhbCk7Ci19CisjZGVmaW5lIHBnX2F0b21pY19pbml0X2ZsYWco cCkgYXRvbWljX2luaXQoKHApLCAxKQorI2RlZmluZSBwZ19hdG9taWNfdGVzdF9zZXRfZmxhZyhw KSBcCisJYXRvbWljX2ZldGNoX2FuZF9leHBsaWNpdCgocCksIDAsIG1lbW9yeV9vcmRlcl9hY3F1 aXJlKQorI2RlZmluZSBwZ19hdG9taWNfY2xlYXJfZmxhZyhwKSBcCisJYXRvbWljX3N0b3JlX2V4 cGxpY2l0KChwKSwgMSwgbWVtb3J5X29yZGVyX3JlbGVhc2UpCisjZGVmaW5lIHBnX2F0b21pY191 bmxvY2tlZF90ZXN0X2ZsYWcocCkgXAorCWF0b21pY19sb2FkX2V4cGxpY2l0KChwKSwgbWVtb3J5 X29yZGVyX3JlbGF4ZWQpCiAKIC8qCi0gKiBwZ19hdG9taWNfZmV0Y2hfYWRkX3UzMiAtIGF0b21p Y2FsbHkgYWRkIHRvIHZhcmlhYmxlCi0gKgotICogUmV0dXJucyB0aGUgdmFsdWUgb2YgcHRyIGJl Zm9yZSB0aGUgYXJpdGhtZXRpYyBvcGVyYXRpb24uCi0gKgotICogRnVsbCBiYXJyaWVyIHNlbWFu dGljcy4KKyAqIExvY2FsIGNvbnZlbnRpb24gZm9yIGxvYWQvc3RvcmUsIHJlbGF4ZWQgQUtBIG5v IGJhcnJpZXIuICBUaGVzZSBhcmUgdGhlIG9ubHkKKyAqICJnZW5lcmljIiBmdW5jdGlvbnMgcHJv dmlkZWQgd2l0aCBwZ18gcHJlZml4ZXMuICBJdCBzZWVtcyBwb2ludGxlc3MgdG8KKyAqIHJlbmFt ZSBldmVyeXRoaW5nIGluIDxzdGRhdG9taWMuaD4sIGJ1dCB0aGVzZSB0d28gYXJlIFBvc3RncmVT UUwncworICogZXN0YWJsaXNoZWQgd2F5IG9mIHJlcHJlc2VudGluZyByZWxheGVkIGFjY2Vzcywg YW5kIGEgbG90IHNob3J0ZXIuCiAgKi8KLXN0YXRpYyBpbmxpbmUgdWludDMyCi1wZ19hdG9taWNf ZmV0Y2hfYWRkX3UzMih2b2xhdGlsZSBwZ19hdG9taWNfdWludDMyICpwdHIsIGludDMyIGFkZF8p Ci17Ci0JQXNzZXJ0UG9pbnRlckFsaWdubWVudChwdHIsIDQpOwotCXJldHVybiBwZ19hdG9taWNf ZmV0Y2hfYWRkX3UzMl9pbXBsKHB0ciwgYWRkXyk7Ci19CisjZGVmaW5lIHBnX2F0b21pY19yZWFk KHApIFwKKwlhdG9taWNfbG9hZF9leHBsaWNpdCgocCksIG1lbW9yeV9vcmRlcl9yZWxheGVkKQor I2RlZmluZSBwZ19hdG9taWNfd3JpdGUocCwgdikgXAorCWF0b21pY19zdG9yZV9leHBsaWNpdCgo cCksICh2KSwgbWVtb3J5X29yZGVyX3JlbGF4ZWQpCiAKIC8qCi0gKiBwZ19hdG9taWNfZmV0Y2hf c3ViX3UzMiAtIGF0b21pY2FsbHkgc3VidHJhY3QgZnJvbSB2YXJpYWJsZQorICogQmFja3dhcmQt Y29tcGF0aWJsZSB0eXBlLXNwZWNpZmljIGZ1bmN0aW9uIG5hbWVzLiAgT25seSB0aGUgaGlzdG9y aWNhbCBfdTMyCisgKiBhbmQgXzY0IG5hbWVzIGFyZSBwcm92aWRlZC4gIE5ldyBjb2RlIGFuZCBj b2RlIHVzaW5nIG90aGVyIGF0b21pYyB0eXBlcworICogc2hvdWxkIHVzZSB0aGUgZ2VuZXJpYyBm dW5jdGlvbnMgZnJvbSB0aGUgc3RhbmRhcmQgZGlyZWN0bHksIGFuZAorICogcGdfYXRvbWljX3ty ZWFkLHdyaXRlfSgpIGZvciByZWxheGVkIGFjY2Vzcy4KICAqCi0gKiBSZXR1cm5zIHRoZSB2YWx1 ZSBvZiBwdHIgYmVmb3JlIHRoZSBhcml0aG1ldGljIG9wZXJhdGlvbi4gTm90ZSB0aGF0IHN1Yl8K LSAqIG1heSBub3QgYmUgSU5UX01JTiBkdWUgdG8gcGxhdGZvcm0gbGltaXRhdGlvbnMuCi0gKgot ICogRnVsbCBiYXJyaWVyIHNlbWFudGljcy4KKyAqIEFsbCBvZiB0aGVzZSBleGNlcHQgcGdfYXRv bWljXyh1bmxvY2tlZF8pe3JlYWQsd3JpdGV9X3szMiw2NH0gaGF2ZSBzZXEgY3N0CisgKiBBS0Eg ZnVsbCBiYXJyaWVyIHNlbWFudGljcy4KICAqLwotc3RhdGljIGlubGluZSB1aW50MzIKLXBnX2F0 b21pY19mZXRjaF9zdWJfdTMyKHZvbGF0aWxlIHBnX2F0b21pY191aW50MzIgKnB0ciwgaW50MzIg c3ViXykKLXsKLQlBc3NlcnRQb2ludGVyQWxpZ25tZW50KHB0ciwgNCk7Ci0JQXNzZXJ0KHN1Yl8g IT0gSU5UX01JTik7Ci0JcmV0dXJuIHBnX2F0b21pY19mZXRjaF9zdWJfdTMyX2ltcGwocHRyLCBz dWJfKTsKLX0KKyNkZWZpbmUgcGdfYXRvbWljX2luaXRfdTMyIGF0b21pY19pbml0CisjZGVmaW5l IHBnX2F0b21pY19pbml0X3U2NCBhdG9taWNfaW5pdAorI2RlZmluZSBwZ19hdG9taWNfcmVhZF91 MzIgcGdfYXRvbWljX3JlYWQKKyNkZWZpbmUgcGdfYXRvbWljX3JlYWRfdTY0IHBnX2F0b21pY19y ZWFkCisjZGVmaW5lIHBnX2F0b21pY193cml0ZV91MzIgcGdfYXRvbWljX3dyaXRlCisjZGVmaW5l IHBnX2F0b21pY193cml0ZV91NjQgcGdfYXRvbWljX3dyaXRlCisjZGVmaW5lIHBnX2F0b21pY191 bmxvY2tlZF9yZWFkX3UzMiBwZ19hdG9taWNfcmVhZAorI2RlZmluZSBwZ19hdG9taWNfdW5sb2Nr ZWRfcmVhZF91NjQgcGdfYXRvbWljX3JlYWQKKyNkZWZpbmUgcGdfYXRvbWljX3VubG9ja2VkX3dy aXRlX3UzMiBwZ19hdG9taWNfd3JpdGUKKyNkZWZpbmUgcGdfYXRvbWljX3VubG9ja2VkX3dyaXRl X3U2NCBwZ19hdG9taWNfd3JpdGUKKyNkZWZpbmUgcGdfYXRvbWljX3JlYWRfbWVtYmFycmllcl91 MzIgYXRvbWljX2xvYWQKKyNkZWZpbmUgcGdfYXRvbWljX3JlYWRfbWVtYmFycmllcl91NjQgYXRv bWljX2xvYWQKKyNkZWZpbmUgcGdfYXRvbWljX3dyaXRlX21lbWJhcnJpZXJfdTMyIGF0b21pY19z dG9yZQorI2RlZmluZSBwZ19hdG9taWNfd3JpdGVfbWVtYmFycmllcl91NjQgYXRvbWljX3N0b3Jl CisjZGVmaW5lIHBnX2F0b21pY19leGNoYW5nZV91MzIgYXRvbWljX2V4Y2hhbmdlCisjZGVmaW5l IHBnX2F0b21pY19leGNoYW5nZV91NjQgYXRvbWljX2V4Y2hhbmdlCisjZGVmaW5lIHBnX2F0b21p Y19jb21wYXJlX2V4Y2hhbmdlX3UzMiBhdG9taWNfY29tcGFyZV9leGNoYW5nZV9zdHJvbmcKKyNk ZWZpbmUgcGdfYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2VfdTY0IGF0b21pY19jb21wYXJlX2V4Y2hh bmdlX3N0cm9uZworI2RlZmluZSBwZ19hdG9taWNfZmV0Y2hfYWRkX3UzMiBhdG9taWNfZmV0Y2hf YWRkCisjZGVmaW5lIHBnX2F0b21pY19mZXRjaF9hZGRfdTY0IGF0b21pY19mZXRjaF9hZGQKKyNk ZWZpbmUgcGdfYXRvbWljX2ZldGNoX3N1Yl91MzIgYXRvbWljX2ZldGNoX3N1YgorI2RlZmluZSBw Z19hdG9taWNfZmV0Y2hfc3ViX3U2NCBhdG9taWNfZmV0Y2hfc3ViCisjZGVmaW5lIHBnX2F0b21p Y19mZXRjaF9hbmRfdTMyIGF0b21pY19mZXRjaF9hbmQKKyNkZWZpbmUgcGdfYXRvbWljX2ZldGNo X2FuZF91NjQgYXRvbWljX2ZldGNoX2FuZAorI2RlZmluZSBwZ19hdG9taWNfZmV0Y2hfb3JfdTMy IGF0b21pY19mZXRjaF9vcgorI2RlZmluZSBwZ19hdG9taWNfZmV0Y2hfb3JfdTY0IGF0b21pY19m ZXRjaF9vcgogCiAvKgotICogcGdfYXRvbWljX2ZldGNoX2FuZF91MzIgLSBhdG9taWNhbGx5IGJp dC1hbmQgYW5kXyB3aXRoIHZhcmlhYmxlCi0gKgotICogUmV0dXJucyB0aGUgdmFsdWUgb2YgcHRy IGJlZm9yZSB0aGUgYXJpdGhtZXRpYyBvcGVyYXRpb24uCi0gKgotICogRnVsbCBiYXJyaWVyIHNl bWFudGljcy4KKyAqIFRoZSByZXN0IG9mIHRoaXMgZmlsZSBkZWZpbmVzIG5vbi1mdW5kYW1lbnRh bCBjb252ZW5pZW5jZSBmdW5jdGlvbnMgd2l0aCBubworICogY291bnRlcnBhcnQgaW4gPHN0ZGF0 b21pYy5oPi4KICAqLwotc3RhdGljIGlubGluZSB1aW50MzIKLXBnX2F0b21pY19mZXRjaF9hbmRf dTMyKHZvbGF0aWxlIHBnX2F0b21pY191aW50MzIgKnB0ciwgdWludDMyIGFuZF8pCi17Ci0JQXNz ZXJ0UG9pbnRlckFsaWdubWVudChwdHIsIDQpOwotCXJldHVybiBwZ19hdG9taWNfZmV0Y2hfYW5k X3UzMl9pbXBsKHB0ciwgYW5kXyk7Ci19CiAKIC8qCi0gKiBwZ19hdG9taWNfZmV0Y2hfb3JfdTMy IC0gYXRvbWljYWxseSBiaXQtb3Igb3JfIHdpdGggdmFyaWFibGUKLSAqCi0gKiBSZXR1cm5zIHRo ZSB2YWx1ZSBvZiBwdHIgYmVmb3JlIHRoZSBhcml0aG1ldGljIG9wZXJhdGlvbi4KLSAqCi0gKiBG dWxsIGJhcnJpZXIgc2VtYW50aWNzLgorICogRmV0Y2ggYW5kIGFkZC9zdWJ0cmFjdCB3cmFwcGVy cyB0aGF0IHJldHVybiB0aGUgbmV3IHZhbHVlIGluc3RlYWQgb2YgdGhlIG9sZAorICogdmFsdWUu ICBXZSBuZWVkIGZ1bmN0aW9ucyB0byBhdm9pZCBkb3VibGUgZXZhbHVhdGlvbiBvZiB2LgogICov Ci1zdGF0aWMgaW5saW5lIHVpbnQzMgotcGdfYXRvbWljX2ZldGNoX29yX3UzMih2b2xhdGlsZSBw Z19hdG9taWNfdWludDMyICpwdHIsIHVpbnQzMiBvcl8pCi17Ci0JQXNzZXJ0UG9pbnRlckFsaWdu bWVudChwdHIsIDQpOwotCXJldHVybiBwZ19hdG9taWNfZmV0Y2hfb3JfdTMyX2ltcGwocHRyLCBv cl8pOwotfQotCi0vKgotICogcGdfYXRvbWljX2FkZF9mZXRjaF91MzIgLSBhdG9taWNhbGx5IGFk ZCB0byB2YXJpYWJsZQotICoKLSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHB0ciBhZnRlciB0aGUg YXJpdGhtZXRpYyBvcGVyYXRpb24uCi0gKgotICogRnVsbCBiYXJyaWVyIHNlbWFudGljcy4KLSAq Lwotc3RhdGljIGlubGluZSB1aW50MzIKLXBnX2F0b21pY19hZGRfZmV0Y2hfdTMyKHZvbGF0aWxl IHBnX2F0b21pY191aW50MzIgKnB0ciwgaW50MzIgYWRkXykKLXsKLQlBc3NlcnRQb2ludGVyQWxp Z25tZW50KHB0ciwgNCk7Ci0JcmV0dXJuIHBnX2F0b21pY19hZGRfZmV0Y2hfdTMyX2ltcGwocHRy LCBhZGRfKTsKLX0KLQotLyoKLSAqIHBnX2F0b21pY19zdWJfZmV0Y2hfdTMyIC0gYXRvbWljYWxs eSBzdWJ0cmFjdCBmcm9tIHZhcmlhYmxlCi0gKgotICogUmV0dXJucyB0aGUgdmFsdWUgb2YgcHRy IGFmdGVyIHRoZSBhcml0aG1ldGljIG9wZXJhdGlvbi4gTm90ZSB0aGF0IHN1Yl8gbWF5Ci0gKiBu b3QgYmUgSU5UX01JTiBkdWUgdG8gcGxhdGZvcm0gbGltaXRhdGlvbnMuCi0gKgotICogRnVsbCBi YXJyaWVyIHNlbWFudGljcy4KLSAqLwotc3RhdGljIGlubGluZSB1aW50MzIKLXBnX2F0b21pY19z dWJfZmV0Y2hfdTMyKHZvbGF0aWxlIHBnX2F0b21pY191aW50MzIgKnB0ciwgaW50MzIgc3ViXykK LXsKLQlBc3NlcnRQb2ludGVyQWxpZ25tZW50KHB0ciwgNCk7Ci0JQXNzZXJ0KHN1Yl8gIT0gSU5U X01JTik7Ci0JcmV0dXJuIHBnX2F0b21pY19zdWJfZmV0Y2hfdTMyX2ltcGwocHRyLCBzdWJfKTsK LX0KLQotLyogLS0tLQotICogVGhlIDY0IGJpdCBvcGVyYXRpb25zIGhhdmUgdGhlIHNhbWUgc2Vt YW50aWNzIGFzIHRoZWlyIDMyYml0IGNvdW50ZXJwYXJ0cwotICogaWYgdGhleSBhcmUgYXZhaWxh YmxlLiBDaGVjayB0aGUgY29ycmVzcG9uZGluZyAzMmJpdCBmdW5jdGlvbiBmb3IKLSAqIGRvY3Vt ZW50YXRpb24uCi0gKiAtLS0tCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZAotcGdfYXRvbWljX2lu aXRfdTY0KHZvbGF0aWxlIHBnX2F0b21pY191aW50NjQgKnB0ciwgdWludDY0IHZhbCkKLXsKLQkv KgotCSAqIENhbid0IG5lY2Vzc2FyaWx5IGVuZm9yY2UgYWxpZ25tZW50IC0gYW5kIGRvbid0IG5l ZWQgaXQgLSB3aGVuIHVzaW5nCi0JICogdGhlIHNwaW5sb2NrIGJhc2VkIGZhbGxiYWNrIGltcGxl bWVudGF0aW9uLiBUaGVyZWZvcmUgb25seSBhc3NlcnQgd2hlbgotCSAqIG5vdCB1c2luZyBpdC4K LQkgKi8KLSNpZm5kZWYgUEdfSEFWRV9BVE9NSUNfVTY0X1NJTVVMQVRJT04KLQlBc3NlcnRQb2lu dGVyQWxpZ25tZW50KHB0ciwgOCk7Ci0jZW5kaWYKLQlwZ19hdG9taWNfaW5pdF91NjRfaW1wbChw dHIsIHZhbCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdWludDY0Ci1wZ19hdG9taWNfcmVhZF91NjQo dm9sYXRpbGUgcGdfYXRvbWljX3VpbnQ2NCAqcHRyKQotewotI2lmbmRlZiBQR19IQVZFX0FUT01J Q19VNjRfU0lNVUxBVElPTgotCUFzc2VydFBvaW50ZXJBbGlnbm1lbnQocHRyLCA4KTsKLSNlbmRp ZgotCXJldHVybiBwZ19hdG9taWNfcmVhZF91NjRfaW1wbChwdHIpOwotfQotCi1zdGF0aWMgaW5s aW5lIHVpbnQ2NAotcGdfYXRvbWljX3JlYWRfbWVtYmFycmllcl91NjQodm9sYXRpbGUgcGdfYXRv bWljX3VpbnQ2NCAqcHRyKQotewotI2lmbmRlZiBQR19IQVZFX0FUT01JQ19VNjRfU0lNVUxBVElP TgotCUFzc2VydFBvaW50ZXJBbGlnbm1lbnQocHRyLCA4KTsKLSNlbmRpZgotCXJldHVybiBwZ19h dG9taWNfcmVhZF9tZW1iYXJyaWVyX3U2NF9pbXBsKHB0cik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUg dm9pZAotcGdfYXRvbWljX3dyaXRlX3U2NCh2b2xhdGlsZSBwZ19hdG9taWNfdWludDY0ICpwdHIs IHVpbnQ2NCB2YWwpCi17Ci0jaWZuZGVmIFBHX0hBVkVfQVRPTUlDX1U2NF9TSU1VTEFUSU9OCi0J QXNzZXJ0UG9pbnRlckFsaWdubWVudChwdHIsIDgpOwotI2VuZGlmCi0JcGdfYXRvbWljX3dyaXRl X3U2NF9pbXBsKHB0ciwgdmFsKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1wZ19hdG9taWNf d3JpdGVfbWVtYmFycmllcl91NjQodm9sYXRpbGUgcGdfYXRvbWljX3VpbnQ2NCAqcHRyLCB1aW50 NjQgdmFsKQotewotI2lmbmRlZiBQR19IQVZFX0FUT01JQ19VNjRfU0lNVUxBVElPTgotCUFzc2Vy dFBvaW50ZXJBbGlnbm1lbnQocHRyLCA4KTsKLSNlbmRpZgotCXBnX2F0b21pY193cml0ZV9tZW1i YXJyaWVyX3U2NF9pbXBsKHB0ciwgdmFsKTsKLX0KLQotc3RhdGljIGlubGluZSB1aW50NjQKLXBn X2F0b21pY19leGNoYW5nZV91NjQodm9sYXRpbGUgcGdfYXRvbWljX3VpbnQ2NCAqcHRyLCB1aW50 NjQgbmV3dmFsKQotewotI2lmbmRlZiBQR19IQVZFX0FUT01JQ19VNjRfU0lNVUxBVElPTgotCUFz c2VydFBvaW50ZXJBbGlnbm1lbnQocHRyLCA4KTsKLSNlbmRpZgotCXJldHVybiBwZ19hdG9taWNf ZXhjaGFuZ2VfdTY0X2ltcGwocHRyLCBuZXd2YWwpOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wK LXBnX2F0b21pY19jb21wYXJlX2V4Y2hhbmdlX3U2NCh2b2xhdGlsZSBwZ19hdG9taWNfdWludDY0 ICpwdHIsCi0JCQkJCQkJICAgdWludDY0ICpleHBlY3RlZCwgdWludDY0IG5ld3ZhbCkKLXsKLSNp Zm5kZWYgUEdfSEFWRV9BVE9NSUNfVTY0X1NJTVVMQVRJT04KLQlBc3NlcnRQb2ludGVyQWxpZ25t ZW50KHB0ciwgOCk7Ci0jZW5kaWYKLQlyZXR1cm4gcGdfYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vf dTY0X2ltcGwocHRyLCBleHBlY3RlZCwgbmV3dmFsKTsKLX0KLQotc3RhdGljIGlubGluZSB1aW50 NjQKLXBnX2F0b21pY19mZXRjaF9hZGRfdTY0KHZvbGF0aWxlIHBnX2F0b21pY191aW50NjQgKnB0 ciwgaW50NjQgYWRkXykKLXsKLSNpZm5kZWYgUEdfSEFWRV9BVE9NSUNfVTY0X1NJTVVMQVRJT04K LQlBc3NlcnRQb2ludGVyQWxpZ25tZW50KHB0ciwgOCk7Ci0jZW5kaWYKLQlyZXR1cm4gcGdfYXRv bWljX2ZldGNoX2FkZF91NjRfaW1wbChwdHIsIGFkZF8pOwotfQotCi1zdGF0aWMgaW5saW5lIHVp bnQ2NAotcGdfYXRvbWljX2ZldGNoX3N1Yl91NjQodm9sYXRpbGUgcGdfYXRvbWljX3VpbnQ2NCAq cHRyLCBpbnQ2NCBzdWJfKQotewotI2lmbmRlZiBQR19IQVZFX0FUT01JQ19VNjRfU0lNVUxBVElP TgotCUFzc2VydFBvaW50ZXJBbGlnbm1lbnQocHRyLCA4KTsKLSNlbmRpZgotCUFzc2VydChzdWJf ICE9IFBHX0lOVDY0X01JTik7Ci0JcmV0dXJuIHBnX2F0b21pY19mZXRjaF9zdWJfdTY0X2ltcGwo cHRyLCBzdWJfKTsKLX0KLQotc3RhdGljIGlubGluZSB1aW50NjQKLXBnX2F0b21pY19mZXRjaF9h bmRfdTY0KHZvbGF0aWxlIHBnX2F0b21pY191aW50NjQgKnB0ciwgdWludDY0IGFuZF8pCi17Ci0j aWZuZGVmIFBHX0hBVkVfQVRPTUlDX1U2NF9TSU1VTEFUSU9OCi0JQXNzZXJ0UG9pbnRlckFsaWdu bWVudChwdHIsIDgpOwotI2VuZGlmCi0JcmV0dXJuIHBnX2F0b21pY19mZXRjaF9hbmRfdTY0X2lt cGwocHRyLCBhbmRfKTsKLX0KLQotc3RhdGljIGlubGluZSB1aW50NjQKLXBnX2F0b21pY19mZXRj aF9vcl91NjQodm9sYXRpbGUgcGdfYXRvbWljX3VpbnQ2NCAqcHRyLCB1aW50NjQgb3JfKQotewot I2lmbmRlZiBQR19IQVZFX0FUT01JQ19VNjRfU0lNVUxBVElPTgotCUFzc2VydFBvaW50ZXJBbGln bm1lbnQocHRyLCA4KTsKLSNlbmRpZgotCXJldHVybiBwZ19hdG9taWNfZmV0Y2hfb3JfdTY0X2lt cGwocHRyLCBvcl8pOwotfQotCi1zdGF0aWMgaW5saW5lIHVpbnQ2NAotcGdfYXRvbWljX2FkZF9m ZXRjaF91NjQodm9sYXRpbGUgcGdfYXRvbWljX3VpbnQ2NCAqcHRyLCBpbnQ2NCBhZGRfKQotewot I2lmbmRlZiBQR19IQVZFX0FUT01JQ19VNjRfU0lNVUxBVElPTgotCUFzc2VydFBvaW50ZXJBbGln bm1lbnQocHRyLCA4KTsKLSNlbmRpZgotCXJldHVybiBwZ19hdG9taWNfYWRkX2ZldGNoX3U2NF9p bXBsKHB0ciwgYWRkXyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdWludDY0Ci1wZ19hdG9taWNfc3Vi X2ZldGNoX3U2NCh2b2xhdGlsZSBwZ19hdG9taWNfdWludDY0ICpwdHIsIGludDY0IHN1Yl8pCi17 Ci0jaWZuZGVmIFBHX0hBVkVfQVRPTUlDX1U2NF9TSU1VTEFUSU9OCi0JQXNzZXJ0UG9pbnRlckFs aWdubWVudChwdHIsIDgpOwotI2VuZGlmCi0JQXNzZXJ0KHN1Yl8gIT0gUEdfSU5UNjRfTUlOKTsK LQlyZXR1cm4gcGdfYXRvbWljX3N1Yl9mZXRjaF91NjRfaW1wbChwdHIsIHN1Yl8pOworI2RlZmlu ZSBQR19BVE9NSUNfR0VOX1JFVkVSU0VfRkVUQ0goc2l6ZSwgbmFtZSwgb3ApIFwKK3N0YXRpYyBp bmxpbmUgdWludCMjc2l6ZSBcCitwZ19hdG9taWNfIyNuYW1lIyNfZmV0Y2hfdSMjc2l6ZSh2b2xh dGlsZSBwZ19hdG9taWNfdWludCMjc2l6ZSAqcCwgdWludCMjc2l6ZSB2KSBcCit7IFwKKwlyZXR1 cm4gYXRvbWljX2ZldGNoXyMjbmFtZShwLCB2KSBvcCB2OyBcCiB9CitQR19BVE9NSUNfR0VOX1JF VkVSU0VfRkVUQ0goMzIsIGFkZCwgKyk7CitQR19BVE9NSUNfR0VOX1JFVkVSU0VfRkVUQ0goNjQs IGFkZCwgKyk7CitQR19BVE9NSUNfR0VOX1JFVkVSU0VfRkVUQ0goMzIsIHN1YiwgLSk7CitQR19B VE9NSUNfR0VOX1JFVkVSU0VfRkVUQ0goNjQsIHN1YiwgLSk7CiAKIC8qCiAgKiBNb25vdG9uaWNh bGx5IGFkdmFuY2UgdGhlIGdpdmVuIHZhcmlhYmxlIHVzaW5nIG9ubHkgYXRvbWljIG9wZXJhdGlv bnMgdW50aWwKQEAgLTU4NCwxMSArMjg5LDcgQEAgcGdfYXRvbWljX21vbm90b25pY19hZHZhbmNl X3U2NCh2b2xhdGlsZSBwZ19hdG9taWNfdWludDY0ICpwdHIsIHVpbnQ2NCB0YXJnZXQpCiB7CiAJ dWludDY0CQljdXJydmFsOwogCi0jaWZuZGVmIFBHX0hBVkVfQVRPTUlDX1U2NF9TSU1VTEFUSU9O Ci0JQXNzZXJ0UG9pbnRlckFsaWdubWVudChwdHIsIDgpOwotI2VuZGlmCi0KLQljdXJydmFsID0g cGdfYXRvbWljX3JlYWRfdTY0X2ltcGwocHRyKTsKKwljdXJydmFsID0gcGdfYXRvbWljX3JlYWRf dTY0KHB0cik7CiAJaWYgKGN1cnJ2YWwgPj0gdGFyZ2V0KQogCXsKIAkJcGdfbWVtb3J5X2JhcnJp ZXIoKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3BvcnQvYXRvbWljcy9hcmNoLWFybS5oIGIv c3JjL2luY2x1ZGUvcG9ydC9hdG9taWNzL2FyY2gtYXJtLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IGViN2UwYWM5M2JhLi4wMDAwMDAwMDAwMAotLS0gYS9zcmMvaW5jbHVkZS9wb3J0 L2F0b21pY3MvYXJjaC1hcm0uaAorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQotICoKLSAqIGFyY2gtYXJtLmgKLSAqCSAgQXRvbWljIG9wZXJhdGlvbnMg Y29uc2lkZXJhdGlvbnMgc3BlY2lmaWMgdG8gQVJNCi0gKgotICogUG9ydGlvbnMgQ29weXJpZ2h0 IChjKSAyMDEzLTIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCi0gKgot ICogTk9URVM6Ci0gKgotICogc3JjL2luY2x1ZGUvcG9ydC9hdG9taWNzL2FyY2gtYXJtLmgKLSAq Ci0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqLwotCi0vKiBpbnRlbnRpb25hbGx5IG5vIGluY2x1ZGUg Z3VhcmRzLCBzaG91bGQgb25seSBiZSBpbmNsdWRlZCBieSBhdG9taWNzLmggKi8KLSNpZm5kZWYg SU5TSURFX0FUT01JQ1NfSAotI2Vycm9yICJzaG91bGQgYmUgaW5jbHVkZWQgdmlhIGF0b21pY3Mu aCIKLSNlbmRpZgotCi0vKgotICogNjQgYml0IGF0b21pY3Mgb24gQVJNMzIgYXJlIGltcGxlbWVu dGVkIHVzaW5nIGtlcm5lbCBmYWxsYmFja3MgYW5kIHRodXMKLSAqIG1pZ2h0IGJlIHNsb3csIHNv IGRpc2FibGUgZW50aXJlbHkuIE9uIEFSTTY0IHRoYXQgcHJvYmxlbSBkb2Vzbid0IGV4aXN0Lgot ICovCi0jaWYgIWRlZmluZWQoX19hYXJjaDY0X18pCi0jZGVmaW5lIFBHX0RJU0FCTEVfNjRfQklU X0FUT01JQ1MKLSNlbHNlCi0vKgotICogQXJjaGl0ZWN0dXJlIFJlZmVyZW5jZSBNYW51YWwgZm9y IEFSTXY4IHN0YXRlcyBhbGlnbmVkIHJlYWQvd3JpdGUgdG8vZnJvbQotICogZ2VuZXJhbCBwdXJw b3NlIHJlZ2lzdGVyIGlzIGF0b21pYy4KLSAqLwotI2RlZmluZSBQR19IQVZFXzhCWVRFX1NJTkdM RV9DT1BZX0FUT01JQ0lUWQotI2VuZGlmICAvKiBfX2FhcmNoNjRfXyAqLwpkaWZmIC0tZ2l0IGEv c3JjL2luY2x1ZGUvcG9ydC9hdG9taWNzL2FyY2gtcHBjLmggYi9zcmMvaW5jbHVkZS9wb3J0L2F0 b21pY3MvYXJjaC1wcGMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjkzZjY3NjZk MjkuLjAwMDAwMDAwMDAwCi0tLSBhL3NyYy9pbmNsdWRlL3BvcnQvYXRvbWljcy9hcmNoLXBwYy5o CisrKyAvZGV2L251bGwKQEAgLTEsMjU2ICswLDAgQEAKLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICoK LSAqIGFyY2gtcHBjLmgKLSAqCSAgQXRvbWljIG9wZXJhdGlvbnMgY29uc2lkZXJhdGlvbnMgc3Bl Y2lmaWMgdG8gUG93ZXJQQwotICoKLSAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDI1 LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAotICogUG9ydGlvbnMgQ29weXJp Z2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKLSAq Ci0gKiBOT1RFUzoKLSAqCi0gKiBzcmMvaW5jbHVkZS9wb3J0L2F0b21pY3MvYXJjaC1wcGMuaAot ICoKLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICovCi0KLSNpZiBkZWZpbmVkKF9fR05VQ19fKQotCi0v KgotICogbHdzeW5jIG9yZGVycyBsb2FkcyB3aXRoIHJlc3BlY3QgdG8gZWFjaCBvdGhlciwgYW5k IHNpbWlsYXJseSB3aXRoIHN0b3Jlcy4KLSAqIEJ1dCBhIGxvYWQgY2FuIGJlIHBlcmZvcm1lZCBi ZWZvcmUgYSBzdWJzZXF1ZW50IHN0b3JlLCBzbyBzeW5jIG11c3QgYmUgdXNlZAotICogZm9yIGEg ZnVsbCBtZW1vcnkgYmFycmllci4KLSAqLwotI2RlZmluZSBwZ19tZW1vcnlfYmFycmllcl9pbXBs KCkJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJzeW5jIiA6IDogOiAibWVtb3J5IikKLSNkZWZpbmUg cGdfcmVhZF9iYXJyaWVyX2ltcGwoKQkJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJsd3N5bmMiIDog OiA6ICJtZW1vcnkiKQotI2RlZmluZSBwZ193cml0ZV9iYXJyaWVyX2ltcGwoKQkJX19hc21fXyBf X3ZvbGF0aWxlX18gKCJsd3N5bmMiIDogOiA6ICJtZW1vcnkiKQotI2VuZGlmCi0KLSNkZWZpbmUg UEdfSEFWRV9BVE9NSUNfVTMyX1NVUFBPUlQKLXR5cGVkZWYgc3RydWN0IHBnX2F0b21pY191aW50 MzIKLXsKLQl2b2xhdGlsZSB1aW50MzIgdmFsdWU7Ci19IHBnX2F0b21pY191aW50MzI7Ci0KLS8q IDY0Yml0IGF0b21pY3MgYXJlIG9ubHkgc3VwcG9ydGVkIGluIDY0Yml0IG1vZGUgKi8KLSNpZiBT SVpFT0ZfVk9JRF9QID49IDgKLSNkZWZpbmUgUEdfSEFWRV9BVE9NSUNfVTY0X1NVUFBPUlQKLXR5 cGVkZWYgc3RydWN0IHBnX2F0b21pY191aW50NjQKLXsKLQl2b2xhdGlsZSB1aW50NjQgdmFsdWUg cGdfYXR0cmlidXRlX2FsaWduZWQoOCk7Ci19IHBnX2F0b21pY191aW50NjQ7Ci0KLSNlbmRpZgot Ci0vKgotICogVGhpcyBtaW1pY3MgZ2NjIF9fYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2VfbiguLi4s IF9fQVRPTUlDX1NFUV9DU1QpLCBidXQKLSAqIGNvZGUgZ2VuZXJhdGlvbiBkaWZmZXJzIGF0IHRo ZSBlbmQuICBfX2F0b21pY19jb21wYXJlX2V4Y2hhbmdlX24oKToKLSAqICAxMDA6CWlzeW5jCi0g KiAgMTA0OgltZmNyICAgIHIzCi0gKiAgMTA4OglybHdpbm0gIHIzLHIzLDMsMzEsMzEKLSAqICAx MGM6CWJuZSAgICAgMTIwIDwuZWIrMHgxMD4KLSAqICAxMTA6CWNscmxkaSAgcjMscjMsNjMKLSAq ICAxMTQ6CWFkZGkgICAgcjEscjEsMTEyCi0gKiAgMTE4OglibHIKLSAqICAxMWM6CW5vcAotICog IDEyMDoJY2xybGRpICByMyxyMyw2MwotICogIDEyNDoJc3R3ICAgICByOSwwKHI0KQotICogIDEy ODoJYWRkaSAgICByMSxyMSwxMTIKLSAqICAxMmM6CWJscgotICoKLSAqIFRoaXM6Ci0gKiAgIGYw Oglpc3luYwotICogICBmNDoJbWZjciAgICByOQotICogICBmODoJcmxkaWNsLiByMyxyOSwzNSw2 MwotICogICBmYzoJYm5lICAgICAxMDQgPC5lYj4KLSAqICAxMDA6CXN0dyAgICAgcjEwLDAocjQp Ci0gKiAgMTA0OglhZGRpICAgIHIxLHIxLDExMgotICogIDEwODoJYmxyCi0gKgotICogVGhpcyBp bXBsZW1lbnRhdGlvbiBtYXkgb3IgbWF5IG5vdCBoYXZlIG1hdGVyaWFsbHkgZGlmZmVyZW50IHBl cmZvcm1hbmNlLgotICogSXQncyBub3QgZXhwbG9pdGluZyB0aGUgZmFjdCB0aGF0IGNyMCBzdGls bCBob2xkcyB0aGUgcmVsZXZhbnQgY29tcGFyaXNvbgotICogYml0cywgc2V0IGR1cmluZyB0aGUg X19hc21fXy4gIE9uZSBjb3VsZCBmaXggdGhhdCBieSBtb3ZpbmcgbW9yZSBjb2RlIGludG8KLSAq IHRoZSBfX2FzbV9fLiAgKFRoYXQgd291bGQgcmVtb3ZlIHRoZSBmcmVlZG9tIHRvIGVsaW1pbmF0 ZSBkZWFkIHN0b3JlcyB3aGVuCi0gKiB0aGUgY2FsbGVyIGlnbm9yZXMgImV4cGVjdGVkIiwgYnV0 IGZldyBjYWxsZXJzIGRvLikKLSAqCi0gKiBSZWNvZ25pemluZyBjb25zdGFudCAibmV3dmFsIiB3 b3VsZCBiZSBzdXBlcmZsdW91cywgYmVjYXVzZSB0aGVyZSdzIG5vCi0gKiBpbW1lZGlhdGUtb3Bl cmFuZCB2ZXJzaW9uIG9mIHN0d2N4LgotICovCi0jZGVmaW5lIFBHX0hBVkVfQVRPTUlDX0NPTVBB UkVfRVhDSEFOR0VfVTMyCi1zdGF0aWMgaW5saW5lIGJvb2wKLXBnX2F0b21pY19jb21wYXJlX2V4 Y2hhbmdlX3UzMl9pbXBsKHZvbGF0aWxlIHBnX2F0b21pY191aW50MzIgKnB0ciwKLQkJCQkJCQkJ CXVpbnQzMiAqZXhwZWN0ZWQsIHVpbnQzMiBuZXd2YWwpCi17Ci0JdWludDMyIGZvdW5kOwotCXVp bnQzMiBjb25kaXRpb25fcmVnaXN0ZXI7Ci0JYm9vbCByZXQ7Ci0KLSNpZmRlZiBIQVZFX0lfQ09O U1RSQUlOVF9fQlVJTFRJTl9DT05TVEFOVF9QCi0JaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKCpl eHBlY3RlZCkgJiYKLQkJKGludDMyKSAqZXhwZWN0ZWQgPD0gUEdfSU5UMTZfTUFYICYmCi0JCShp bnQzMikgKmV4cGVjdGVkID49IFBHX0lOVDE2X01JTikKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18o Ci0JCQkiCXN5bmMJCQkJXG4iCi0JCQkiCWx3YXJ4ICAgJTAsMCwlNSwxCVxuIgotCQkJIgljbXB3 aSAgICUwLCUzCQlcbiIKLQkJCSIJYm5lICAgICAkKzEyCQlcbiIJCS8qIGJyYW5jaCB0byBsd3N5 bmMgKi8KLQkJCSIJc3R3Y3guICAlNCwwLCU1CQlcbiIKLQkJCSIJYm5lICAgICAkLTE2CQlcbiIJ CS8qIGJyYW5jaCB0byBsd2FyeCAqLwotCQkJIglsd3N5bmMJCQkJXG4iCi0JCQkiCW1mY3IgICAg JTEgICAgICAgICAgXG4iCi06CQkJIj0mciIoZm91bmQpLCAiPXIiKGNvbmRpdGlvbl9yZWdpc3Rl ciksICIrbSIocHRyLT52YWx1ZSkKLToJCQkiaSIoKmV4cGVjdGVkKSwgInIiKG5ld3ZhbCksICJy IigmcHRyLT52YWx1ZSkKLToJCQkibWVtb3J5IiwgImNjIik7Ci0JZWxzZQotI2VuZGlmCi0JCV9f YXNtX18gX192b2xhdGlsZV9fKAotCQkJIglzeW5jCQkJCVxuIgotCQkJIglsd2FyeCAgICUwLDAs JTUsMQlcbiIKLQkJCSIJY21wdyAgICAlMCwlMwkJXG4iCi0JCQkiCWJuZSAgICAgJCsxMgkJXG4i CQkvKiBicmFuY2ggdG8gbHdzeW5jICovCi0JCQkiCXN0d2N4LiAgJTQsMCwlNQkJXG4iCi0JCQki CWJuZSAgICAgJC0xNgkJXG4iCQkvKiBicmFuY2ggdG8gbHdhcnggKi8KLQkJCSIJbHdzeW5jCQkJ CVxuIgotCQkJIgltZmNyICAgICUxICAgICAgICAgIFxuIgotOgkJCSI9JnIiKGZvdW5kKSwgIj1y Iihjb25kaXRpb25fcmVnaXN0ZXIpLCAiK20iKHB0ci0+dmFsdWUpCi06CQkJInIiKCpleHBlY3Rl ZCksICJyIihuZXd2YWwpLCAiciIoJnB0ci0+dmFsdWUpCi06CQkJIm1lbW9yeSIsICJjYyIpOwot Ci0JcmV0ID0gKGNvbmRpdGlvbl9yZWdpc3RlciA+PiAyOSkgJiAxOwkvKiB0ZXN0IGVxIGJpdCBv ZiBjcjAgKi8KLQlpZiAoIXJldCkKLQkJKmV4cGVjdGVkID0gZm91bmQ7Ci0JcmV0dXJuIHJldDsK LX0KLQotLyoKLSAqIFRoaXMgbWlycm9ycyBnY2MgX19zeW5jX2ZldGNoX2FuZF9hZGQoKS4KLSAq Ci0gKiBMaWtlIHRhcygpLCB1c2UgY29uc3RyYWludCAiPSZiIiB0byBhdm9pZCBhbGxvY2F0aW5n IHIwLgotICovCi0jZGVmaW5lIFBHX0hBVkVfQVRPTUlDX0ZFVENIX0FERF9VMzIKLXN0YXRpYyBp bmxpbmUgdWludDMyCi1wZ19hdG9taWNfZmV0Y2hfYWRkX3UzMl9pbXBsKHZvbGF0aWxlIHBnX2F0 b21pY191aW50MzIgKnB0ciwgaW50MzIgYWRkXykKLXsKLQl1aW50MzIgX3Q7Ci0JdWludDMyIHJl czsKLQotI2lmZGVmIEhBVkVfSV9DT05TVFJBSU5UX19CVUlMVElOX0NPTlNUQU5UX1AKLQlpZiAo X19idWlsdGluX2NvbnN0YW50X3AoYWRkXykgJiYKLQkJYWRkXyA8PSBQR19JTlQxNl9NQVggJiYg YWRkXyA+PSBQR19JTlQxNl9NSU4pCi0JCV9fYXNtX18gX192b2xhdGlsZV9fKAotCQkJIglzeW5j CQkJCVxuIgotCQkJIglsd2FyeCAgICUxLDAsJTQsMQlcbiIKLQkJCSIJYWRkaSAgICAlMCwlMSwl MwlcbiIKLQkJCSIJc3R3Y3guICAlMCwwLCU0CQlcbiIKLQkJCSIJYm5lICAgICAkLTEyCQlcbiIJ CS8qIGJyYW5jaCB0byBsd2FyeCAqLwotCQkJIglsd3N5bmMJCQkJXG4iCi06CQkJIj0mciIoX3Qp LCAiPSZiIihyZXMpLCAiK20iKHB0ci0+dmFsdWUpCi06CQkJImkiKGFkZF8pLCAiciIoJnB0ci0+ dmFsdWUpCi06CQkJIm1lbW9yeSIsICJjYyIpOwotCWVsc2UKLSNlbmRpZgotCQlfX2FzbV9fIF9f dm9sYXRpbGVfXygKLQkJCSIJc3luYwkJCQlcbiIKLQkJCSIJbHdhcnggICAlMSwwLCU0LDEJXG4i Ci0JCQkiCWFkZCAgICAgJTAsJTEsJTMJXG4iCi0JCQkiCXN0d2N4LiAgJTAsMCwlNAkJXG4iCi0J CQkiCWJuZSAgICAgJC0xMgkJXG4iCQkvKiBicmFuY2ggdG8gbHdhcnggKi8KLQkJCSIJbHdzeW5j CQkJCVxuIgotOgkJCSI9JnIiKF90KSwgIj0mciIocmVzKSwgIittIihwdHItPnZhbHVlKQotOgkJ CSJyIihhZGRfKSwgInIiKCZwdHItPnZhbHVlKQotOgkJCSJtZW1vcnkiLCAiY2MiKTsKLQotCXJl dHVybiByZXM7Ci19Ci0KLSNpZmRlZiBQR19IQVZFX0FUT01JQ19VNjRfU1VQUE9SVAotCi0jZGVm aW5lIFBHX0hBVkVfQVRPTUlDX0NPTVBBUkVfRVhDSEFOR0VfVTY0Ci1zdGF0aWMgaW5saW5lIGJv b2wKLXBnX2F0b21pY19jb21wYXJlX2V4Y2hhbmdlX3U2NF9pbXBsKHZvbGF0aWxlIHBnX2F0b21p Y191aW50NjQgKnB0ciwKLQkJCQkJCQkJCXVpbnQ2NCAqZXhwZWN0ZWQsIHVpbnQ2NCBuZXd2YWwp Ci17Ci0JdWludDY0IGZvdW5kOwotCXVpbnQzMiBjb25kaXRpb25fcmVnaXN0ZXI7Ci0JYm9vbCBy ZXQ7Ci0KLQlBc3NlcnRQb2ludGVyQWxpZ25tZW50KGV4cGVjdGVkLCA4KTsKLQotCS8qIExpa2Ug dTMyLCBidXQgcy9sd2FyeC9sZGFyeC87IHMvc3R3Y3gvc3RkY3gvOyBzL2NtcHcvY21wZC8gKi8K LSNpZmRlZiBIQVZFX0lfQ09OU1RSQUlOVF9fQlVJTFRJTl9DT05TVEFOVF9QCi0JaWYgKF9fYnVp bHRpbl9jb25zdGFudF9wKCpleHBlY3RlZCkgJiYKLQkJKGludDY0KSAqZXhwZWN0ZWQgPD0gUEdf SU5UMTZfTUFYICYmCi0JCShpbnQ2NCkgKmV4cGVjdGVkID49IFBHX0lOVDE2X01JTikKLQkJX19h c21fXyBfX3ZvbGF0aWxlX18oCi0JCQkiCXN5bmMJCQkJXG4iCi0JCQkiCWxkYXJ4ICAgJTAsMCwl NSwxCVxuIgotCQkJIgljbXBkaSAgICUwLCUzCQlcbiIKLQkJCSIJYm5lICAgICAkKzEyCQlcbiIJ CS8qIGJyYW5jaCB0byBsd3N5bmMgKi8KLQkJCSIJc3RkY3guICAlNCwwLCU1CQlcbiIKLQkJCSIJ Ym5lICAgICAkLTE2CQlcbiIJCS8qIGJyYW5jaCB0byBsZGFyeCAqLwotCQkJIglsd3N5bmMJCQkJ XG4iCi0JCQkiCW1mY3IgICAgJTEgICAgICAgICAgXG4iCi06CQkJIj0mciIoZm91bmQpLCAiPXIi KGNvbmRpdGlvbl9yZWdpc3RlciksICIrbSIocHRyLT52YWx1ZSkKLToJCQkiaSIoKmV4cGVjdGVk KSwgInIiKG5ld3ZhbCksICJyIigmcHRyLT52YWx1ZSkKLToJCQkibWVtb3J5IiwgImNjIik7Ci0J ZWxzZQotI2VuZGlmCi0JCV9fYXNtX18gX192b2xhdGlsZV9fKAotCQkJIglzeW5jCQkJCVxuIgot CQkJIglsZGFyeCAgICUwLDAsJTUsMQlcbiIKLQkJCSIJY21wZCAgICAlMCwlMwkJXG4iCi0JCQki CWJuZSAgICAgJCsxMgkJXG4iCQkvKiBicmFuY2ggdG8gbHdzeW5jICovCi0JCQkiCXN0ZGN4LiAg JTQsMCwlNQkJXG4iCi0JCQkiCWJuZSAgICAgJC0xNgkJXG4iCQkvKiBicmFuY2ggdG8gbGRhcngg Ki8KLQkJCSIJbHdzeW5jCQkJCVxuIgotCQkJIgltZmNyICAgICUxICAgICAgICAgIFxuIgotOgkJ CSI9JnIiKGZvdW5kKSwgIj1yIihjb25kaXRpb25fcmVnaXN0ZXIpLCAiK20iKHB0ci0+dmFsdWUp Ci06CQkJInIiKCpleHBlY3RlZCksICJyIihuZXd2YWwpLCAiciIoJnB0ci0+dmFsdWUpCi06CQkJ Im1lbW9yeSIsICJjYyIpOwotCi0JcmV0ID0gKGNvbmRpdGlvbl9yZWdpc3RlciA+PiAyOSkgJiAx OwkvKiB0ZXN0IGVxIGJpdCBvZiBjcjAgKi8KLQlpZiAoIXJldCkKLQkJKmV4cGVjdGVkID0gZm91 bmQ7Ci0JcmV0dXJuIHJldDsKLX0KLQotI2RlZmluZSBQR19IQVZFX0FUT01JQ19GRVRDSF9BRERf VTY0Ci1zdGF0aWMgaW5saW5lIHVpbnQ2NAotcGdfYXRvbWljX2ZldGNoX2FkZF91NjRfaW1wbCh2 b2xhdGlsZSBwZ19hdG9taWNfdWludDY0ICpwdHIsIGludDY0IGFkZF8pCi17Ci0JdWludDY0IF90 OwotCXVpbnQ2NCByZXM7Ci0KLQkvKiBMaWtlIHUzMiwgYnV0IHMvbHdhcngvbGRhcngvOyBzL3N0 d2N4L3N0ZGN4LyAqLwotI2lmZGVmIEhBVkVfSV9DT05TVFJBSU5UX19CVUlMVElOX0NPTlNUQU5U X1AKLQlpZiAoX19idWlsdGluX2NvbnN0YW50X3AoYWRkXykgJiYKLQkJYWRkXyA8PSBQR19JTlQx Nl9NQVggJiYgYWRkXyA+PSBQR19JTlQxNl9NSU4pCi0JCV9fYXNtX18gX192b2xhdGlsZV9fKAot CQkJIglzeW5jCQkJCVxuIgotCQkJIglsZGFyeCAgICUxLDAsJTQsMQlcbiIKLQkJCSIJYWRkaSAg ICAlMCwlMSwlMwlcbiIKLQkJCSIJc3RkY3guICAlMCwwLCU0CQlcbiIKLQkJCSIJYm5lICAgICAk LTEyCQlcbiIJCS8qIGJyYW5jaCB0byBsZGFyeCAqLwotCQkJIglsd3N5bmMJCQkJXG4iCi06CQkJ Ij0mciIoX3QpLCAiPSZiIihyZXMpLCAiK20iKHB0ci0+dmFsdWUpCi06CQkJImkiKGFkZF8pLCAi ciIoJnB0ci0+dmFsdWUpCi06CQkJIm1lbW9yeSIsICJjYyIpOwotCWVsc2UKLSNlbmRpZgotCQlf X2FzbV9fIF9fdm9sYXRpbGVfXygKLQkJCSIJc3luYwkJCQlcbiIKLQkJCSIJbGRhcnggICAlMSww LCU0LDEJXG4iCi0JCQkiCWFkZCAgICAgJTAsJTEsJTMJXG4iCi0JCQkiCXN0ZGN4LiAgJTAsMCwl NAkJXG4iCi0JCQkiCWJuZSAgICAgJC0xMgkJXG4iCQkvKiBicmFuY2ggdG8gbGRhcnggKi8KLQkJ CSIJbHdzeW5jCQkJCVxuIgotOgkJCSI9JnIiKF90KSwgIj0mciIocmVzKSwgIittIihwdHItPnZh bHVlKQotOgkJCSJyIihhZGRfKSwgInIiKCZwdHItPnZhbHVlKQotOgkJCSJtZW1vcnkiLCAiY2Mi KTsKLQotCXJldHVybiByZXM7Ci19Ci0KLSNlbmRpZiAvKiBQR19IQVZFX0FUT01JQ19VNjRfU1VQ UE9SVCAqLwotCi0vKiBwZXIgYXJjaGl0ZWN0dXJlIG1hbnVhbCBkb3VibGV3b3JkIGFjY2Vzc2Vz IGhhdmUgc2luZ2xlIGNvcHkgYXRvbWljaXR5ICovCi0jZGVmaW5lIFBHX0hBVkVfOEJZVEVfU0lO R0xFX0NPUFlfQVRPTUlDSVRZCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9wb3J0L2F0b21pY3Mv YXJjaC14ODYuaCBiL3NyYy9pbmNsdWRlL3BvcnQvYXRvbWljcy9hcmNoLXg4Ni5oCmluZGV4IDRi YTJjY2MwNTkxLi5hY2Q2MTIwOTlmYSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcG9ydC9hdG9t aWNzL2FyY2gteDg2LmgKKysrIGIvc3JjL2luY2x1ZGUvcG9ydC9hdG9taWNzL2FyY2gteDg2LmgK QEAgLTMsMTAgKzMsNiBAQAogICogYXJjaC14ODYuaAogICoJICBBdG9taWMgb3BlcmF0aW9ucyBj b25zaWRlcmF0aW9ucyBzcGVjaWZpYyB0byBpbnRlbCB4ODYKICAqCi0gKiBOb3RlIHRoYXQgd2Ug YWN0dWFsbHkgcmVxdWlyZSBhIDQ4NiB1cHdhcmRzIGJlY2F1c2UgdGhlIDM4NiBkb2Vzbid0IGhh dmUKLSAqIHN1cHBvcnQgZm9yIHhhZGQgYW5kIGNtcHhjaGcuIEdpdmVuIHRoYXQgdGhlIDM4NiBp c24ndCBzdXBwb3J0ZWQgYW55d2hlcmUKLSAqIGFueW1vcmUgdGhhdCdzIG5vdCBtdWNoIG9mIGEg cmVzdHJpY3Rpb24gbHVja2lseS4KLSAqCiAgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYt MjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKICAqIFBvcnRpb25zIENv cHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlh CiAgKgpAQCAtNDMsMjA0ICszOSwzIEBACiAKICNkZWZpbmUgcGdfcmVhZF9iYXJyaWVyX2ltcGwo KQkJcGdfY29tcGlsZXJfYmFycmllcl9pbXBsKCkKICNkZWZpbmUgcGdfd3JpdGVfYmFycmllcl9p bXBsKCkJCXBnX2NvbXBpbGVyX2JhcnJpZXJfaW1wbCgpCi0KLS8qCi0gKiBQcm92aWRlIGltcGxl bWVudGF0aW9uIGZvciBhdG9taWNzIHVzaW5nIGlubGluZSBhc3NlbWJseSBvbiB4ODYgZ2NjLiBJ dCdzCi0gKiBuaWNlIHRvIHN1cHBvcnQgb2xkZXIgZ2NjJ3MgYW5kIHRoZSBjb21wYXJlL2V4Y2hh bmdlIGltcGxlbWVudGF0aW9uIGhlcmUgaXMKLSAqIGFjdHVhbGx5IG1vcmUgZWZmaWNpZW50IHRo YW4gdGhlICogX19zeW5jIHZhcmlhbnQuCi0gKi8KLSNpZiBkZWZpbmVkKF9fR05VQ19fKSB8fCBk ZWZpbmVkKF9fSU5URUxfQ09NUElMRVIpCi0KLSNkZWZpbmUgUEdfSEFWRV9BVE9NSUNfRkxBR19T VVBQT1JUCi10eXBlZGVmIHN0cnVjdCBwZ19hdG9taWNfZmxhZwotewotCXZvbGF0aWxlIGNoYXIg dmFsdWU7Ci19IHBnX2F0b21pY19mbGFnOwotCi0jZGVmaW5lIFBHX0hBVkVfQVRPTUlDX1UzMl9T VVBQT1JUCi10eXBlZGVmIHN0cnVjdCBwZ19hdG9taWNfdWludDMyCi17Ci0Jdm9sYXRpbGUgdWlu dDMyIHZhbHVlOwotfSBwZ19hdG9taWNfdWludDMyOwotCi0vKgotICogSXQncyB0b28gY29tcGxp Y2F0ZWQgdG8gd3JpdGUgaW5saW5lIGFzbSBmb3IgNjRiaXQgdHlwZXMgb24gMzJiaXQgYW5kIHRo ZQotICogNDg2IGNhbid0IGRvIGl0IGFueXdheS4KLSAqLwotI2lmZGVmIF9feDg2XzY0X18KLSNk ZWZpbmUgUEdfSEFWRV9BVE9NSUNfVTY0X1NVUFBPUlQKLXR5cGVkZWYgc3RydWN0IHBnX2F0b21p Y191aW50NjQKLXsKLQkvKiBhbGlnbm1lbnQgZ3VhcmFudGVlZCBkdWUgdG8gYmVpbmcgb24gYSA2 NGJpdCBwbGF0Zm9ybSAqLwotCXZvbGF0aWxlIHVpbnQ2NCB2YWx1ZTsKLX0gcGdfYXRvbWljX3Vp bnQ2NDsKLSNlbmRpZgkvKiBfX3g4Nl82NF9fICovCi0KLSNlbmRpZiAvKiBkZWZpbmVkKF9fR05V Q19fKSB8fCBkZWZpbmVkKF9fSU5URUxfQ09NUElMRVIpICovCi0KLSNpZiAhZGVmaW5lZChQR19I QVZFX1NQSU5fREVMQVkpCi0vKgotICogVGhpcyBzZXF1ZW5jZSBpcyBlcXVpdmFsZW50IHRvIHRo ZSBQQVVTRSBpbnN0cnVjdGlvbiAoInJlcCIgaXMKLSAqIGlnbm9yZWQgYnkgb2xkIElBMzIgcHJv Y2Vzc29ycyBpZiB0aGUgZm9sbG93aW5nIGluc3RydWN0aW9uIGlzCi0gKiBub3QgYSBzdHJpbmcg b3BlcmF0aW9uKTsgdGhlIElBLTMyIEFyY2hpdGVjdHVyZSBTb2Z0d2FyZQotICogRGV2ZWxvcGVy J3MgTWFudWFsLCBWb2wuIDMsIFNlY3Rpb24gNy43LjIgZGVzY3JpYmVzIHdoeSB1c2luZwotICog UEFVU0UgaW4gdGhlIGlubmVyIGxvb3Agb2YgYSBzcGluIGxvY2sgaXMgbmVjZXNzYXJ5IGZvciBn b29kCi0gKiBwZXJmb3JtYW5jZToKLSAqCi0gKiAgICAgVGhlIFBBVVNFIGluc3RydWN0aW9uIGlt cHJvdmVzIHRoZSBwZXJmb3JtYW5jZSBvZiBJQS0zMgotICogICAgIHByb2Nlc3NvcnMgc3VwcG9y dGluZyBIeXBlci1UaHJlYWRpbmcgVGVjaG5vbG9neSB3aGVuCi0gKiAgICAgZXhlY3V0aW5nIHNw aW4td2FpdCBsb29wcyBhbmQgb3RoZXIgcm91dGluZXMgd2hlcmUgb25lCi0gKiAgICAgdGhyZWFk IGlzIGFjY2Vzc2luZyBhIHNoYXJlZCBsb2NrIG9yIHNlbWFwaG9yZSBpbiBhIHRpZ2h0Ci0gKiAg ICAgcG9sbGluZyBsb29wLiBXaGVuIGV4ZWN1dGluZyBhIHNwaW4td2FpdCBsb29wLCB0aGUKLSAq ICAgICBwcm9jZXNzb3IgY2FuIHN1ZmZlciBhIHNldmVyZSBwZXJmb3JtYW5jZSBwZW5hbHR5IHdo ZW4KLSAqICAgICBleGl0aW5nIHRoZSBsb29wIGJlY2F1c2UgaXQgZGV0ZWN0cyBhIHBvc3NpYmxl IG1lbW9yeSBvcmRlcgotICogICAgIHZpb2xhdGlvbiBhbmQgZmx1c2hlcyB0aGUgY29yZSBwcm9j ZXNzb3IncyBwaXBlbGluZS4gVGhlCi0gKiAgICAgUEFVU0UgaW5zdHJ1Y3Rpb24gcHJvdmlkZXMg YSBoaW50IHRvIHRoZSBwcm9jZXNzb3IgdGhhdCB0aGUKLSAqICAgICBjb2RlIHNlcXVlbmNlIGlz IGEgc3Bpbi13YWl0IGxvb3AuIFRoZSBwcm9jZXNzb3IgdXNlcyB0aGlzCi0gKiAgICAgaGludCB0 byBhdm9pZCB0aGUgbWVtb3J5IG9yZGVyIHZpb2xhdGlvbiBhbmQgcHJldmVudCB0aGUKLSAqICAg ICBwaXBlbGluZSBmbHVzaC4gSW4gYWRkaXRpb24sIHRoZSBQQVVTRSBpbnN0cnVjdGlvbgotICog ICAgIGRlLXBpcGVsaW5lcyB0aGUgc3Bpbi13YWl0IGxvb3AgdG8gcHJldmVudCBpdCBmcm9tCi0g KiAgICAgY29uc3VtaW5nIGV4ZWN1dGlvbiByZXNvdXJjZXMgZXhjZXNzaXZlbHkuCi0gKi8KLSNp ZiBkZWZpbmVkKF9fR05VQ19fKSB8fCBkZWZpbmVkKF9fSU5URUxfQ09NUElMRVIpCi0jZGVmaW5l IFBHX0hBVkVfU1BJTl9ERUxBWQotc3RhdGljIF9faW5saW5lX18gdm9pZAotcGdfc3Bpbl9kZWxh eV9pbXBsKHZvaWQpCi17Ci0JX19hc21fXyBfX3ZvbGF0aWxlX18oIiByZXA7IG5vcAkJCVxuIik7 Ci19Ci0jZWxpZiBkZWZpbmVkKF9NU0NfVkVSKSAmJiBkZWZpbmVkKF9feDg2XzY0X18pCi0jZGVm aW5lIFBHX0hBVkVfU1BJTl9ERUxBWQotc3RhdGljIF9fZm9yY2VpbmxpbmUgdm9pZAotcGdfc3Bp bl9kZWxheV9pbXBsKHZvaWQpCi17Ci0JX21tX3BhdXNlKCk7Ci19Ci0jZWxpZiBkZWZpbmVkKF9N U0NfVkVSKQotI2RlZmluZSBQR19IQVZFX1NQSU5fREVMQVkKLXN0YXRpYyBfX2ZvcmNlaW5saW5l IHZvaWQKLXBnX3NwaW5fZGVsYXlfaW1wbCh2b2lkKQotewotCS8qIFNlZSBjb21tZW50IGZvciBn Y2MgY29kZS4gU2FtZSBjb2RlLCBNQVNNIHN5bnRheCAqLwotCV9fYXNtIHJlcCBub3A7Ci19Ci0j ZW5kaWYKLSNlbmRpZiAvKiAhZGVmaW5lZChQR19IQVZFX1NQSU5fREVMQVkpICovCi0KLQotI2lm IGRlZmluZWQoX19HTlVDX18pIHx8IGRlZmluZWQoX19JTlRFTF9DT01QSUxFUikKLQotI2RlZmlu ZSBQR19IQVZFX0FUT01JQ19URVNUX1NFVF9GTEFHCi1zdGF0aWMgaW5saW5lIGJvb2wKLXBnX2F0 b21pY190ZXN0X3NldF9mbGFnX2ltcGwodm9sYXRpbGUgcGdfYXRvbWljX2ZsYWcgKnB0cikKLXsK LQljaGFyCQlfcmVzID0gMTsKLQotCV9fYXNtX18gX192b2xhdGlsZV9fKAotCQkiCWxvY2sJCQlc biIKLQkJIgl4Y2hnYgklMCwlMQlcbiIKLToJCSIrcSIoX3JlcyksICIrbSIocHRyLT52YWx1ZSkK LToKLToJCSJtZW1vcnkiKTsKLQlyZXR1cm4gX3JlcyA9PSAwOwotfQotCi0jZGVmaW5lIFBHX0hB VkVfQVRPTUlDX0NMRUFSX0ZMQUcKLXN0YXRpYyBpbmxpbmUgdm9pZAotcGdfYXRvbWljX2NsZWFy X2ZsYWdfaW1wbCh2b2xhdGlsZSBwZ19hdG9taWNfZmxhZyAqcHRyKQotewotCS8qCi0JICogT24g YSBUU08gYXJjaGl0ZWN0dXJlIGxpa2UgeDg2IGl0J3Mgc3VmZmljaWVudCB0byB1c2UgYSBjb21w aWxlcgotCSAqIGJhcnJpZXIgdG8gYWNoaWV2ZSByZWxlYXNlIHNlbWFudGljcy4KLQkgKi8KLQlf X2FzbV9fIF9fdm9sYXRpbGVfXygiIiA6OjogIm1lbW9yeSIpOwotCXB0ci0+dmFsdWUgPSAwOwot fQotCi0jZGVmaW5lIFBHX0hBVkVfQVRPTUlDX0NPTVBBUkVfRVhDSEFOR0VfVTMyCi1zdGF0aWMg aW5saW5lIGJvb2wKLXBnX2F0b21pY19jb21wYXJlX2V4Y2hhbmdlX3UzMl9pbXBsKHZvbGF0aWxl IHBnX2F0b21pY191aW50MzIgKnB0ciwKLQkJCQkJCQkJCXVpbnQzMiAqZXhwZWN0ZWQsIHVpbnQz MiBuZXd2YWwpCi17Ci0JY2hhcglyZXQ7Ci0KLQkvKgotCSAqIFBlcmZvcm0gY21weGNoZyBhbmQg dXNlIHRoZSB6ZXJvIGZsYWcgd2hpY2ggaXQgaW1wbGljaXRseSBzZXRzIHdoZW4KLQkgKiBlcXVh bCB0byBtZWFzdXJlIHRoZSBzdWNjZXNzLgotCSAqLwotCV9fYXNtX18gX192b2xhdGlsZV9fKAot CQkiCWxvY2sJCQkJXG4iCi0JCSIJY21weGNoZ2wJJTQsJTUJXG4iCi0JCSIgICBzZXR6CQklMgkJ XG4iCi06CQkiPWEiICgqZXhwZWN0ZWQpLCAiPW0iKHB0ci0+dmFsdWUpLCAiPXEiIChyZXQpCi06 CQkiYSIgKCpleHBlY3RlZCksICJyIiAobmV3dmFsKSwgIm0iKHB0ci0+dmFsdWUpCi06CQkibWVt b3J5IiwgImNjIik7Ci0JcmV0dXJuIChib29sKSByZXQ7Ci19Ci0KLSNkZWZpbmUgUEdfSEFWRV9B VE9NSUNfRkVUQ0hfQUREX1UzMgotc3RhdGljIGlubGluZSB1aW50MzIKLXBnX2F0b21pY19mZXRj aF9hZGRfdTMyX2ltcGwodm9sYXRpbGUgcGdfYXRvbWljX3VpbnQzMiAqcHRyLCBpbnQzMiBhZGRf KQotewotCXVpbnQzMiByZXM7Ci0JX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JCSIJbG9jawkJCQlc biIKLQkJIgl4YWRkbAklMCwlMQkJXG4iCi06CQkiPXEiKHJlcyksICI9bSIocHRyLT52YWx1ZSkK LToJCSIwIiAoYWRkXyksICJtIihwdHItPnZhbHVlKQotOgkJIm1lbW9yeSIsICJjYyIpOwotCXJl dHVybiByZXM7Ci19Ci0KLSNpZmRlZiBfX3g4Nl82NF9fCi0KLSNkZWZpbmUgUEdfSEFWRV9BVE9N SUNfQ09NUEFSRV9FWENIQU5HRV9VNjQKLXN0YXRpYyBpbmxpbmUgYm9vbAotcGdfYXRvbWljX2Nv bXBhcmVfZXhjaGFuZ2VfdTY0X2ltcGwodm9sYXRpbGUgcGdfYXRvbWljX3VpbnQ2NCAqcHRyLAot CQkJCQkJCQkJdWludDY0ICpleHBlY3RlZCwgdWludDY0IG5ld3ZhbCkKLXsKLQljaGFyCXJldDsK LQotCUFzc2VydFBvaW50ZXJBbGlnbm1lbnQoZXhwZWN0ZWQsIDgpOwotCi0JLyoKLQkgKiBQZXJm b3JtIGNtcHhjaGcgYW5kIHVzZSB0aGUgemVybyBmbGFnIHdoaWNoIGl0IGltcGxpY2l0bHkgc2V0 cyB3aGVuCi0JICogZXF1YWwgdG8gbWVhc3VyZSB0aGUgc3VjY2Vzcy4KLQkgKi8KLQlfX2FzbV9f IF9fdm9sYXRpbGVfXygKLQkJIglsb2NrCQkJCVxuIgotCQkiCWNtcHhjaGdxCSU0LCU1CVxuIgot CQkiICAgc2V0egkJJTIJCVxuIgotOgkJIj1hIiAoKmV4cGVjdGVkKSwgIj1tIihwdHItPnZhbHVl KSwgIj1xIiAocmV0KQotOgkJImEiICgqZXhwZWN0ZWQpLCAiciIgKG5ld3ZhbCksICJtIihwdHIt PnZhbHVlKQotOgkJIm1lbW9yeSIsICJjYyIpOwotCXJldHVybiAoYm9vbCkgcmV0OwotfQotCi0j ZGVmaW5lIFBHX0hBVkVfQVRPTUlDX0ZFVENIX0FERF9VNjQKLXN0YXRpYyBpbmxpbmUgdWludDY0 Ci1wZ19hdG9taWNfZmV0Y2hfYWRkX3U2NF9pbXBsKHZvbGF0aWxlIHBnX2F0b21pY191aW50NjQg KnB0ciwgaW50NjQgYWRkXykKLXsKLQl1aW50NjQgcmVzOwotCV9fYXNtX18gX192b2xhdGlsZV9f KAotCQkiCWxvY2sJCQkJXG4iCi0JCSIJeGFkZHEJJTAsJTEJCVxuIgotOgkJIj1xIihyZXMpLCAi PW0iKHB0ci0+dmFsdWUpCi06CQkiMCIgKGFkZF8pLCAibSIocHRyLT52YWx1ZSkKLToJCSJtZW1v cnkiLCAiY2MiKTsKLQlyZXR1cm4gcmVzOwotfQotCi0jZW5kaWYgLyogX194ODZfNjRfXyAqLwot Ci0jZW5kaWYgLyogZGVmaW5lZChfX0dOVUNfXykgfHwgZGVmaW5lZChfX0lOVEVMX0NPTVBJTEVS KSAqLwotCi0vKgotICogOCBieXRlIHJlYWRzIC8gd3JpdGVzIGhhdmUgc2luZ2xlLWNvcHkgYXRv bWljaXR5IG9uIDMyIGJpdCB4ODYgcGxhdGZvcm1zCi0gKiBzaW5jZSBhdCBsZWFzdCB0aGUgNTg2 LiBBcyB3ZWxsIGFzIG9uIGFsbCB4ODYtNjQgY3B1cy4KLSAqLwotI2lmIGRlZmluZWQoX19pNTY4 X18pIHx8IGRlZmluZWQoX19pNjY4X18pIHx8IC8qIGdjYyBpNTg2KyAqLyAgXAotCShkZWZpbmVk KF9NX0lYODYpICYmIF9NX0lYODYgPj0gNTAwKSB8fCAvKiBtc3ZjIGk1ODYrICovIFwKLQlkZWZp bmVkKF9feDg2XzY0X18pIHx8IGRlZmluZWQoX194ODZfNjQpIHx8IGRlZmluZWQoX01fWDY0KSAv KiBnY2MsIG1zdmMgKi8KLSNkZWZpbmUgUEdfSEFWRV84QllURV9TSU5HTEVfQ09QWV9BVE9NSUNJ VFkKLSNlbmRpZiAvKiA4IGJ5dGUgc2luZ2xlLWNvcHkgYXRvbWljaXR5ICovCmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS9wb3J0L2F0b21pY3MvZmFsbGJhY2suaCBiL3NyYy9pbmNsdWRlL3BvcnQv YXRvbWljcy9mYWxsYmFjay5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMmYxYjg1 MTY2OC4uMDAwMDAwMDAwMDAKLS0tIGEvc3JjL2luY2x1ZGUvcG9ydC9hdG9taWNzL2ZhbGxiYWNr LmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAq Ci0gKiBmYWxsYmFjay5oCi0gKiAgICBGYWxsYmFjayBmb3IgcGxhdGZvcm1zIHdpdGhvdXQgNjQg Yml0IGF0b21pY3Mgc3VwcG9ydC4gU2xvd2VyCi0gKiAgICB0aGFuIG5hdGl2ZSBhdG9taWNzIHN1 cHBvcnQsIGJ1dCBub3QgdW51c2FibHkgc2xvdy4KLSAqCi0gKiBQb3J0aW9ucyBDb3B5cmlnaHQg KGMpIDE5OTYtMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKLSAqIFBv cnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBD YWxpZm9ybmlhCi0gKgotICogc3JjL2luY2x1ZGUvcG9ydC9hdG9taWNzL2ZhbGxiYWNrLmgKLSAq Ci0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqLwotCi0vKiBpbnRlbnRpb25hbGx5IG5vIGluY2x1ZGUg Z3VhcmRzLCBzaG91bGQgb25seSBiZSBpbmNsdWRlZCBieSBhdG9taWNzLmggKi8KLSNpZm5kZWYg SU5TSURFX0FUT01JQ1NfSAotIwllcnJvciAic2hvdWxkIGJlIGluY2x1ZGVkIHZpYSBhdG9taWNz LmgiCi0jZW5kaWYKLQotCi0jaWYgIWRlZmluZWQoUEdfSEFWRV9BVE9NSUNfVTY0X1NVUFBPUlQp Ci0KLSNkZWZpbmUgUEdfSEFWRV9BVE9NSUNfVTY0X1NJTVVMQVRJT04KLQotI2RlZmluZSBQR19I QVZFX0FUT01JQ19VNjRfU1VQUE9SVAotdHlwZWRlZiBzdHJ1Y3QgcGdfYXRvbWljX3VpbnQ2NAot ewotCWludAkJCXNlbWE7Ci0Jdm9sYXRpbGUgdWludDY0IHZhbHVlOwotfSBwZ19hdG9taWNfdWlu dDY0OwotCi0jZGVmaW5lIFBHX0hBVkVfQVRPTUlDX0lOSVRfVTY0Ci1leHRlcm4gdm9pZCBwZ19h dG9taWNfaW5pdF91NjRfaW1wbCh2b2xhdGlsZSBwZ19hdG9taWNfdWludDY0ICpwdHIsIHVpbnQ2 NCB2YWxfKTsKLQotI2RlZmluZSBQR19IQVZFX0FUT01JQ19DT01QQVJFX0VYQ0hBTkdFX1U2NAot ZXh0ZXJuIGJvb2wgcGdfYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2VfdTY0X2ltcGwodm9sYXRpbGUg cGdfYXRvbWljX3VpbnQ2NCAqcHRyLAotCQkJCQkJCQkJCQkJdWludDY0ICpleHBlY3RlZCwgdWlu dDY0IG5ld3ZhbCk7Ci0KLSNkZWZpbmUgUEdfSEFWRV9BVE9NSUNfRkVUQ0hfQUREX1U2NAotZXh0 ZXJuIHVpbnQ2NCBwZ19hdG9taWNfZmV0Y2hfYWRkX3U2NF9pbXBsKHZvbGF0aWxlIHBnX2F0b21p Y191aW50NjQgKnB0ciwgaW50NjQgYWRkXyk7Ci0KLSNlbmRpZiAvKiBQR19IQVZFX0FUT01JQ19V NjRfU1VQUE9SVCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcG9ydC9hdG9taWNzL2dlbmVy aWMtZ2NjLmggYi9zcmMvaW5jbHVkZS9wb3J0L2F0b21pY3MvZ2VuZXJpYy1nY2MuaAppbmRleCBh MDc1MWYyMjg2YS4uNzg1NTVhMjc4NjEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3BvcnQvYXRv bWljcy9nZW5lcmljLWdjYy5oCisrKyBiL3NyYy9pbmNsdWRlL3BvcnQvYXRvbWljcy9nZW5lcmlj LWdjYy5oCkBAIC0xLDE5ICsxLDExIEBACiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqCiAgKiBnZW5l cmljLWdjYy5oCi0gKgkgIEF0b21pYyBvcGVyYXRpb25zLCBpbXBsZW1lbnRlZCB1c2luZyBnY2Mg KG9yIGNvbXBhdGlibGUpIGludHJpbnNpY3MuCisgKgkgIENvbXBpbGVyIGJhcnJpZXJzIGZvciBH Q0MgKG9yIGNvbXBhdGlibGUpCiAgKgogICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIw MjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCiAgKiBQb3J0aW9ucyBDb3B5 cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQog ICoKLSAqIE5PVEVTOgotICoKLSAqIERvY3VtZW50YXRpb246Ci0gKiAqIExlZ2FjeSBfX3N5bmMg QnVpbHQtaW4gRnVuY3Rpb25zIGZvciBBdG9taWMgTWVtb3J5IEFjY2VzcwotICogICBodHRwczov L2djYy5nbnUub3JnL29ubGluZWRvY3MvZ2NjLTQuOC4yL2djYy9fMDA1Zl8wMDVmc3luYy1CdWls dGlucy5odG1sCi0gKiAqIEJ1aWx0LWluIGZ1bmN0aW9ucyBmb3IgbWVtb3J5IG1vZGVsIGF3YXJl IGF0b21pYyBvcGVyYXRpb25zCi0gKiAgIGh0dHBzOi8vZ2NjLmdudS5vcmcvb25saW5lZG9jcy9n Y2MtNC44LjIvZ2NjL18wMDVmXzAwNWZhdG9taWMtQnVpbHRpbnMuaHRtbAotICoKICAqIHNyYy9p bmNsdWRlL3BvcnQvYXRvbWljcy9nZW5lcmljLWdjYy5oCiAgKgogICotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CkBAIC0yOCwzMDAgKzIwLDMgQEAKICAqIEFuIGVtcHR5IGFzbSBibG9jayBzaG91bGQgYmUgYSBz dWZmaWNpZW50IGNvbXBpbGVyIGJhcnJpZXIuCiAgKi8KICNkZWZpbmUgcGdfY29tcGlsZXJfYmFy cmllcl9pbXBsKCkJX19hc21fXyBfX3ZvbGF0aWxlX18oIiIgOjo6ICJtZW1vcnkiKQotCi0vKgot ICogSWYgd2UncmUgb24gR0NDLCB3ZSBzaG91bGQgYmUgYWJsZSB0byBnZXQgYSBtZW1vcnkgYmFy cmllcgotICogb3V0IG9mIHRoaXMgY29tcGlsZXIgYnVpbHQtaW4uICBCdXQgd2UgcHJlZmVyIHRv IHJlbHkgb24gcGxhdGZvcm0gc3BlY2lmaWMKLSAqIGRlZmluaXRpb25zIHdoZXJlIHBvc3NpYmxl LCBhbmQgdXNlIHRoaXMgb25seSBhcyBhIGZhbGxiYWNrLgotICovCi0jaWYgIWRlZmluZWQocGdf bWVtb3J5X2JhcnJpZXJfaW1wbCkKLSMJaWYgZGVmaW5lZChIQVZFX0dDQ19fQVRPTUlDX0lOVDMy X0NBUykKLSMJCWRlZmluZSBwZ19tZW1vcnlfYmFycmllcl9pbXBsKCkJCV9fYXRvbWljX3RocmVh ZF9mZW5jZShfX0FUT01JQ19TRVFfQ1NUKQotIwllbGlmIGRlZmluZWQoX19HTlVDX18pCi0jCQlk ZWZpbmUgcGdfbWVtb3J5X2JhcnJpZXJfaW1wbCgpCQlfX3N5bmNfc3luY2hyb25pemUoKQotIwll bmRpZgotI2VuZGlmIC8qICFkZWZpbmVkKHBnX21lbW9yeV9iYXJyaWVyX2ltcGwpICovCi0KLSNp ZiAhZGVmaW5lZChwZ19yZWFkX2JhcnJpZXJfaW1wbCkgJiYgZGVmaW5lZChIQVZFX0dDQ19fQVRP TUlDX0lOVDMyX0NBUykKLS8qIGFjcXVpcmUgc2VtYW50aWNzIGluY2x1ZGUgcmVhZCBiYXJyaWVy IHNlbWFudGljcyAqLwotIwkJZGVmaW5lIHBnX3JlYWRfYmFycmllcl9pbXBsKCkgZG8gXAoteyBc Ci0JcGdfY29tcGlsZXJfYmFycmllcl9pbXBsKCk7IFwKLQlfX2F0b21pY190aHJlYWRfZmVuY2Uo X19BVE9NSUNfQUNRVUlSRSk7IFwKLX0gd2hpbGUgKDApCi0jZW5kaWYKLQotI2lmICFkZWZpbmVk KHBnX3dyaXRlX2JhcnJpZXJfaW1wbCkgJiYgZGVmaW5lZChIQVZFX0dDQ19fQVRPTUlDX0lOVDMy X0NBUykKLS8qIHJlbGVhc2Ugc2VtYW50aWNzIGluY2x1ZGUgd3JpdGUgYmFycmllciBzZW1hbnRp Y3MgKi8KLSMJCWRlZmluZSBwZ193cml0ZV9iYXJyaWVyX2ltcGwoKSBkbyBcCi17IFwKLQlwZ19j b21waWxlcl9iYXJyaWVyX2ltcGwoKTsgXAotCV9fYXRvbWljX3RocmVhZF9mZW5jZShfX0FUT01J Q19SRUxFQVNFKTsgXAotfSB3aGlsZSAoMCkKLSNlbmRpZgotCi0KLS8qIGdlbmVyaWMgZ2NjIGJh c2VkIGF0b21pYyBmbGFnIGltcGxlbWVudGF0aW9uICovCi0jaWYgIWRlZmluZWQoUEdfSEFWRV9B VE9NSUNfRkxBR19TVVBQT1JUKSBcCi0JJiYgKGRlZmluZWQoSEFWRV9HQ0NfX1NZTkNfSU5UMzJf VEFTKSB8fCBkZWZpbmVkKEhBVkVfR0NDX19TWU5DX0NIQVJfVEFTKSkKLQotI2RlZmluZSBQR19I QVZFX0FUT01JQ19GTEFHX1NVUFBPUlQKLXR5cGVkZWYgc3RydWN0IHBnX2F0b21pY19mbGFnCi17 Ci0JLyoKLQkgKiBJZiB3ZSBoYXZlIGEgY2hvaWNlLCB1c2UgaW50LXdpZHRoIFRBUywgYmVjYXVz ZSB0aGF0IGlzIG1vcmUgZWZmaWNpZW50Ci0JICogYW5kL29yIG1vcmUgcmVsaWFibHkgaW1wbGVt ZW50ZWQgb24gbW9zdCBub24tSW50ZWwgcGxhdGZvcm1zLiAgKE5vdGUKLQkgKiB0aGF0IHRoaXMg Y29kZSBpc24ndCB1c2VkIG9uIHg4NltfNjRdOyBzZWUgYXJjaC14ODYuaCBmb3IgdGhhdC4pCi0J ICovCi0jaWZkZWYgSEFWRV9HQ0NfX1NZTkNfSU5UMzJfVEFTCi0Jdm9sYXRpbGUgaW50IHZhbHVl OwotI2Vsc2UKLQl2b2xhdGlsZSBjaGFyIHZhbHVlOwotI2VuZGlmCi19IHBnX2F0b21pY19mbGFn OwotCi0jZW5kaWYgLyogIUFUT01JQ19GTEFHX1NVUFBPUlQgJiYgU1lOQ19JTlQzMl9UQVMgKi8K LQotLyogZ2VuZXJpYyBnY2MgYmFzZWQgYXRvbWljIHVpbnQzMiBpbXBsZW1lbnRhdGlvbiAqLwot I2lmICFkZWZpbmVkKFBHX0hBVkVfQVRPTUlDX1UzMl9TVVBQT1JUKSBcCi0JJiYgKGRlZmluZWQo SEFWRV9HQ0NfX0FUT01JQ19JTlQzMl9DQVMpIHx8IGRlZmluZWQoSEFWRV9HQ0NfX1NZTkNfSU5U MzJfQ0FTKSkKLQotI2RlZmluZSBQR19IQVZFX0FUT01JQ19VMzJfU1VQUE9SVAotdHlwZWRlZiBz dHJ1Y3QgcGdfYXRvbWljX3VpbnQzMgotewotCXZvbGF0aWxlIHVpbnQzMiB2YWx1ZTsKLX0gcGdf YXRvbWljX3VpbnQzMjsKLQotI2VuZGlmIC8qIGRlZmluZWQoSEFWRV9HQ0NfX0FUT01JQ19JTlQz Ml9DQVMpIHx8IGRlZmluZWQoSEFWRV9HQ0NfX1NZTkNfSU5UMzJfQ0FTKSAqLwotCi0vKiBnZW5l cmljIGdjYyBiYXNlZCBhdG9taWMgdWludDY0IGltcGxlbWVudGF0aW9uICovCi0jaWYgIWRlZmlu ZWQoUEdfSEFWRV9BVE9NSUNfVTY0X1NVUFBPUlQpIFwKLQkmJiAhZGVmaW5lZChQR19ESVNBQkxF XzY0X0JJVF9BVE9NSUNTKSBcCi0JJiYgKGRlZmluZWQoSEFWRV9HQ0NfX0FUT01JQ19JTlQ2NF9D QVMpIHx8IGRlZmluZWQoSEFWRV9HQ0NfX1NZTkNfSU5UNjRfQ0FTKSkKLQotI2RlZmluZSBQR19I QVZFX0FUT01JQ19VNjRfU1VQUE9SVAotCi10eXBlZGVmIHN0cnVjdCBwZ19hdG9taWNfdWludDY0 Ci17Ci0Jdm9sYXRpbGUgdWludDY0IHZhbHVlIHBnX2F0dHJpYnV0ZV9hbGlnbmVkKDgpOwotfSBw Z19hdG9taWNfdWludDY0OwotCi0jZW5kaWYgLyogZGVmaW5lZChIQVZFX0dDQ19fQVRPTUlDX0lO VDY0X0NBUykgfHwgZGVmaW5lZChIQVZFX0dDQ19fU1lOQ19JTlQ2NF9DQVMpICovCi0KLSNpZmRl ZiBQR19IQVZFX0FUT01JQ19GTEFHX1NVUFBPUlQKLQotI2lmIGRlZmluZWQoSEFWRV9HQ0NfX1NZ TkNfQ0hBUl9UQVMpIHx8IGRlZmluZWQoSEFWRV9HQ0NfX1NZTkNfSU5UMzJfVEFTKQotCi0jaWZu ZGVmIFBHX0hBVkVfQVRPTUlDX1RFU1RfU0VUX0ZMQUcKLSNkZWZpbmUgUEdfSEFWRV9BVE9NSUNf VEVTVF9TRVRfRkxBRwotc3RhdGljIGlubGluZSBib29sCi1wZ19hdG9taWNfdGVzdF9zZXRfZmxh Z19pbXBsKHZvbGF0aWxlIHBnX2F0b21pY19mbGFnICpwdHIpCi17Ci0JLyogTkI6IG9ubHkgYW4g YWNxdWlyZSBiYXJyaWVyLCBub3QgYSBmdWxsIG9uZSAqLwotCS8qIHNvbWUgcGxhdGZvcm0gb25s eSBzdXBwb3J0IGEgMSBoZXJlICovCi0JcmV0dXJuIF9fc3luY19sb2NrX3Rlc3RfYW5kX3NldCgm cHRyLT52YWx1ZSwgMSkgPT0gMDsKLX0KLSNlbmRpZgotCi0jZW5kaWYgLyogZGVmaW5lZChIQVZF X0dDQ19fU1lOQ18qX1RBUykgKi8KLQotI2lmbmRlZiBQR19IQVZFX0FUT01JQ19VTkxPQ0tFRF9U RVNUX0ZMQUcKLSNkZWZpbmUgUEdfSEFWRV9BVE9NSUNfVU5MT0NLRURfVEVTVF9GTEFHCi1zdGF0 aWMgaW5saW5lIGJvb2wKLXBnX2F0b21pY191bmxvY2tlZF90ZXN0X2ZsYWdfaW1wbCh2b2xhdGls ZSBwZ19hdG9taWNfZmxhZyAqcHRyKQotewotCXJldHVybiBwdHItPnZhbHVlID09IDA7Ci19Ci0j ZW5kaWYKLQotI2lmbmRlZiBQR19IQVZFX0FUT01JQ19DTEVBUl9GTEFHCi0jZGVmaW5lIFBHX0hB VkVfQVRPTUlDX0NMRUFSX0ZMQUcKLXN0YXRpYyBpbmxpbmUgdm9pZAotcGdfYXRvbWljX2NsZWFy X2ZsYWdfaW1wbCh2b2xhdGlsZSBwZ19hdG9taWNfZmxhZyAqcHRyKQotewotCV9fc3luY19sb2Nr X3JlbGVhc2UoJnB0ci0+dmFsdWUpOwotfQotI2VuZGlmCi0KLSNpZm5kZWYgUEdfSEFWRV9BVE9N SUNfSU5JVF9GTEFHCi0jZGVmaW5lIFBHX0hBVkVfQVRPTUlDX0lOSVRfRkxBRwotc3RhdGljIGlu bGluZSB2b2lkCi1wZ19hdG9taWNfaW5pdF9mbGFnX2ltcGwodm9sYXRpbGUgcGdfYXRvbWljX2Zs YWcgKnB0cikKLXsKLQlwZ19hdG9taWNfY2xlYXJfZmxhZ19pbXBsKHB0cik7Ci19Ci0jZW5kaWYK LQotI2VuZGlmIC8qIGRlZmluZWQoUEdfSEFWRV9BVE9NSUNfRkxBR19TVVBQT1JUKSAqLwotCi0v KiBwcmVmZXIgX19hdG9taWMsIGl0IGhhcyBhIGJldHRlciBBUEkgKi8KLSNpZiAhZGVmaW5lZChQ R19IQVZFX0FUT01JQ19DT01QQVJFX0VYQ0hBTkdFX1UzMikgJiYgZGVmaW5lZChIQVZFX0dDQ19f QVRPTUlDX0lOVDMyX0NBUykKLSNkZWZpbmUgUEdfSEFWRV9BVE9NSUNfQ09NUEFSRV9FWENIQU5H RV9VMzIKLXN0YXRpYyBpbmxpbmUgYm9vbAotcGdfYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2VfdTMy X2ltcGwodm9sYXRpbGUgcGdfYXRvbWljX3VpbnQzMiAqcHRyLAotCQkJCQkJCQkJdWludDMyICpl eHBlY3RlZCwgdWludDMyIG5ld3ZhbCkKLXsKLQkvKiBGSVhNRTogd2UgY2FuIHByb2JhYmx5IHVz ZSBhIGxvd2VyIGNvbnNpc3RlbmN5IG1vZGVsICovCi0JcmV0dXJuIF9fYXRvbWljX2NvbXBhcmVf ZXhjaGFuZ2VfbigmcHRyLT52YWx1ZSwgZXhwZWN0ZWQsIG5ld3ZhbCwgZmFsc2UsCi0JCQkJCQkJ CQkgICBfX0FUT01JQ19TRVFfQ1NULCBfX0FUT01JQ19TRVFfQ1NUKTsKLX0KLSNlbmRpZgotCi0j aWYgIWRlZmluZWQoUEdfSEFWRV9BVE9NSUNfQ09NUEFSRV9FWENIQU5HRV9VMzIpICYmIGRlZmlu ZWQoSEFWRV9HQ0NfX1NZTkNfSU5UMzJfQ0FTKQotI2RlZmluZSBQR19IQVZFX0FUT01JQ19DT01Q QVJFX0VYQ0hBTkdFX1UzMgotc3RhdGljIGlubGluZSBib29sCi1wZ19hdG9taWNfY29tcGFyZV9l eGNoYW5nZV91MzJfaW1wbCh2b2xhdGlsZSBwZ19hdG9taWNfdWludDMyICpwdHIsCi0JCQkJCQkJ CQl1aW50MzIgKmV4cGVjdGVkLCB1aW50MzIgbmV3dmFsKQotewotCWJvb2wJcmV0OwotCXVpbnQz MgljdXJyZW50OwotCWN1cnJlbnQgPSBfX3N5bmNfdmFsX2NvbXBhcmVfYW5kX3N3YXAoJnB0ci0+ dmFsdWUsICpleHBlY3RlZCwgbmV3dmFsKTsKLQlyZXQgPSBjdXJyZW50ID09ICpleHBlY3RlZDsK LQkqZXhwZWN0ZWQgPSBjdXJyZW50OwotCXJldHVybiByZXQ7Ci19Ci0jZW5kaWYKLQotLyoKLSAq IF9fc3luY19sb2NrX3Rlc3RfYW5kX3NldCgpIG9ubHkgc3VwcG9ydHMgc2V0dGluZyB0aGUgdmFs dWUgdG8gMSBvbiBzb21lCi0gKiBwbGF0Zm9ybXMsIHNvIHdlIG9ubHkgcHJvdmlkZSBhbiBfX2F0 b21pYyBpbXBsZW1lbnRhdGlvbiBmb3IKLSAqIHBnX2F0b21pY19leGNoYW5nZS4KLSAqCi0gKiBX ZSBhc3N1bWUgdGhlIGF2YWlsYWJpbGl0eSBvZiAzMi1iaXQgX19hdG9taWNfY29tcGFyZV9leGNo YW5nZV9uKCkgaW1wbGllcwotICogdGhlIGF2YWlsYWJpbGl0eSBvZiAzMi1iaXQgX19hdG9taWNf ZXhjaGFuZ2VfbigpLgotICovCi0jaWYgIWRlZmluZWQoUEdfSEFWRV9BVE9NSUNfRVhDSEFOR0Vf VTMyKSAmJiBkZWZpbmVkKEhBVkVfR0NDX19BVE9NSUNfSU5UMzJfQ0FTKQotI2RlZmluZSBQR19I QVZFX0FUT01JQ19FWENIQU5HRV9VMzIKLXN0YXRpYyBpbmxpbmUgdWludDMyCi1wZ19hdG9taWNf ZXhjaGFuZ2VfdTMyX2ltcGwodm9sYXRpbGUgcGdfYXRvbWljX3VpbnQzMiAqcHRyLCB1aW50MzIg bmV3dmFsKQotewotCXJldHVybiBfX2F0b21pY19leGNoYW5nZV9uKCZwdHItPnZhbHVlLCBuZXd2 YWwsIF9fQVRPTUlDX1NFUV9DU1QpOwotfQotI2VuZGlmCi0KLS8qIGlmIHdlIGhhdmUgMzItYml0 IF9fc3luY192YWxfY29tcGFyZV9hbmRfc3dhcCwgYXNzdW1lIHdlIGhhdmUgdGhlc2UgdG9vOiAq LwotCi0jaWYgIWRlZmluZWQoUEdfSEFWRV9BVE9NSUNfRkVUQ0hfQUREX1UzMikgJiYgZGVmaW5l ZChIQVZFX0dDQ19fU1lOQ19JTlQzMl9DQVMpCi0jZGVmaW5lIFBHX0hBVkVfQVRPTUlDX0ZFVENI X0FERF9VMzIKLXN0YXRpYyBpbmxpbmUgdWludDMyCi1wZ19hdG9taWNfZmV0Y2hfYWRkX3UzMl9p bXBsKHZvbGF0aWxlIHBnX2F0b21pY191aW50MzIgKnB0ciwgaW50MzIgYWRkXykKLXsKLQlyZXR1 cm4gX19zeW5jX2ZldGNoX2FuZF9hZGQoJnB0ci0+dmFsdWUsIGFkZF8pOwotfQotI2VuZGlmCi0K LSNpZiAhZGVmaW5lZChQR19IQVZFX0FUT01JQ19GRVRDSF9TVUJfVTMyKSAmJiBkZWZpbmVkKEhB VkVfR0NDX19TWU5DX0lOVDMyX0NBUykKLSNkZWZpbmUgUEdfSEFWRV9BVE9NSUNfRkVUQ0hfU1VC X1UzMgotc3RhdGljIGlubGluZSB1aW50MzIKLXBnX2F0b21pY19mZXRjaF9zdWJfdTMyX2ltcGwo dm9sYXRpbGUgcGdfYXRvbWljX3VpbnQzMiAqcHRyLCBpbnQzMiBzdWJfKQotewotCXJldHVybiBf X3N5bmNfZmV0Y2hfYW5kX3N1YigmcHRyLT52YWx1ZSwgc3ViXyk7Ci19Ci0jZW5kaWYKLQotI2lm ICFkZWZpbmVkKFBHX0hBVkVfQVRPTUlDX0ZFVENIX0FORF9VMzIpICYmIGRlZmluZWQoSEFWRV9H Q0NfX1NZTkNfSU5UMzJfQ0FTKQotI2RlZmluZSBQR19IQVZFX0FUT01JQ19GRVRDSF9BTkRfVTMy Ci1zdGF0aWMgaW5saW5lIHVpbnQzMgotcGdfYXRvbWljX2ZldGNoX2FuZF91MzJfaW1wbCh2b2xh dGlsZSBwZ19hdG9taWNfdWludDMyICpwdHIsIHVpbnQzMiBhbmRfKQotewotCXJldHVybiBfX3N5 bmNfZmV0Y2hfYW5kX2FuZCgmcHRyLT52YWx1ZSwgYW5kXyk7Ci19Ci0jZW5kaWYKLQotI2lmICFk ZWZpbmVkKFBHX0hBVkVfQVRPTUlDX0ZFVENIX09SX1UzMikgJiYgZGVmaW5lZChIQVZFX0dDQ19f U1lOQ19JTlQzMl9DQVMpCi0jZGVmaW5lIFBHX0hBVkVfQVRPTUlDX0ZFVENIX09SX1UzMgotc3Rh dGljIGlubGluZSB1aW50MzIKLXBnX2F0b21pY19mZXRjaF9vcl91MzJfaW1wbCh2b2xhdGlsZSBw Z19hdG9taWNfdWludDMyICpwdHIsIHVpbnQzMiBvcl8pCi17Ci0JcmV0dXJuIF9fc3luY19mZXRj aF9hbmRfb3IoJnB0ci0+dmFsdWUsIG9yXyk7Ci19Ci0jZW5kaWYKLQotCi0jaWYgIWRlZmluZWQo UEdfRElTQUJMRV82NF9CSVRfQVRPTUlDUykKLQotI2lmICFkZWZpbmVkKFBHX0hBVkVfQVRPTUlD X0NPTVBBUkVfRVhDSEFOR0VfVTY0KSAmJiBkZWZpbmVkKEhBVkVfR0NDX19BVE9NSUNfSU5UNjRf Q0FTKQotI2RlZmluZSBQR19IQVZFX0FUT01JQ19DT01QQVJFX0VYQ0hBTkdFX1U2NAotc3RhdGlj IGlubGluZSBib29sCi1wZ19hdG9taWNfY29tcGFyZV9leGNoYW5nZV91NjRfaW1wbCh2b2xhdGls ZSBwZ19hdG9taWNfdWludDY0ICpwdHIsCi0JCQkJCQkJCQl1aW50NjQgKmV4cGVjdGVkLCB1aW50 NjQgbmV3dmFsKQotewotCUFzc2VydFBvaW50ZXJBbGlnbm1lbnQoZXhwZWN0ZWQsIDgpOwotCXJl dHVybiBfX2F0b21pY19jb21wYXJlX2V4Y2hhbmdlX24oJnB0ci0+dmFsdWUsIGV4cGVjdGVkLCBu ZXd2YWwsIGZhbHNlLAotCQkJCQkJCQkJICAgX19BVE9NSUNfU0VRX0NTVCwgX19BVE9NSUNfU0VR X0NTVCk7Ci19Ci0jZW5kaWYKLQotI2lmICFkZWZpbmVkKFBHX0hBVkVfQVRPTUlDX0NPTVBBUkVf RVhDSEFOR0VfVTY0KSAmJiBkZWZpbmVkKEhBVkVfR0NDX19TWU5DX0lOVDY0X0NBUykKLSNkZWZp bmUgUEdfSEFWRV9BVE9NSUNfQ09NUEFSRV9FWENIQU5HRV9VNjQKLXN0YXRpYyBpbmxpbmUgYm9v bAotcGdfYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2VfdTY0X2ltcGwodm9sYXRpbGUgcGdfYXRvbWlj X3VpbnQ2NCAqcHRyLAotCQkJCQkJCQkJdWludDY0ICpleHBlY3RlZCwgdWludDY0IG5ld3ZhbCkK LXsKLQlib29sCXJldDsKLQl1aW50NjQJY3VycmVudDsKLQotCUFzc2VydFBvaW50ZXJBbGlnbm1l bnQoZXhwZWN0ZWQsIDgpOwotCWN1cnJlbnQgPSBfX3N5bmNfdmFsX2NvbXBhcmVfYW5kX3N3YXAo JnB0ci0+dmFsdWUsICpleHBlY3RlZCwgbmV3dmFsKTsKLQlyZXQgPSBjdXJyZW50ID09ICpleHBl Y3RlZDsKLQkqZXhwZWN0ZWQgPSBjdXJyZW50OwotCXJldHVybiByZXQ7Ci19Ci0jZW5kaWYKLQot LyoKLSAqIF9fc3luY19sb2NrX3Rlc3RfYW5kX3NldCgpIG9ubHkgc3VwcG9ydHMgc2V0dGluZyB0 aGUgdmFsdWUgdG8gMSBvbiBzb21lCi0gKiBwbGF0Zm9ybXMsIHNvIHdlIG9ubHkgcHJvdmlkZSBh biBfX2F0b21pYyBpbXBsZW1lbnRhdGlvbiBmb3IKLSAqIHBnX2F0b21pY19leGNoYW5nZS4KLSAq Ci0gKiBXZSBhc3N1bWUgdGhlIGF2YWlsYWJpbGl0eSBvZiA2NC1iaXQgX19hdG9taWNfY29tcGFy ZV9leGNoYW5nZV9uKCkgaW1wbGllcwotICogdGhlIGF2YWlsYWJpbGl0eSBvZiA2NC1iaXQgX19h dG9taWNfZXhjaGFuZ2VfbigpLgotICovCi0jaWYgIWRlZmluZWQoUEdfSEFWRV9BVE9NSUNfRVhD SEFOR0VfVTY0KSAmJiBkZWZpbmVkKEhBVkVfR0NDX19BVE9NSUNfSU5UNjRfQ0FTKQotI2RlZmlu ZSBQR19IQVZFX0FUT01JQ19FWENIQU5HRV9VNjQKLXN0YXRpYyBpbmxpbmUgdWludDY0Ci1wZ19h dG9taWNfZXhjaGFuZ2VfdTY0X2ltcGwodm9sYXRpbGUgcGdfYXRvbWljX3VpbnQ2NCAqcHRyLCB1 aW50NjQgbmV3dmFsKQotewotCXJldHVybiBfX2F0b21pY19leGNoYW5nZV9uKCZwdHItPnZhbHVl LCBuZXd2YWwsIF9fQVRPTUlDX1NFUV9DU1QpOwotfQotI2VuZGlmCi0KLS8qIGlmIHdlIGhhdmUg NjQtYml0IF9fc3luY192YWxfY29tcGFyZV9hbmRfc3dhcCwgYXNzdW1lIHdlIGhhdmUgdGhlc2Ug dG9vOiAqLwotCi0jaWYgIWRlZmluZWQoUEdfSEFWRV9BVE9NSUNfRkVUQ0hfQUREX1U2NCkgJiYg ZGVmaW5lZChIQVZFX0dDQ19fU1lOQ19JTlQ2NF9DQVMpCi0jZGVmaW5lIFBHX0hBVkVfQVRPTUlD X0ZFVENIX0FERF9VNjQKLXN0YXRpYyBpbmxpbmUgdWludDY0Ci1wZ19hdG9taWNfZmV0Y2hfYWRk X3U2NF9pbXBsKHZvbGF0aWxlIHBnX2F0b21pY191aW50NjQgKnB0ciwgaW50NjQgYWRkXykKLXsK LQlyZXR1cm4gX19zeW5jX2ZldGNoX2FuZF9hZGQoJnB0ci0+dmFsdWUsIGFkZF8pOwotfQotI2Vu ZGlmCi0KLSNpZiAhZGVmaW5lZChQR19IQVZFX0FUT01JQ19GRVRDSF9TVUJfVTY0KSAmJiBkZWZp bmVkKEhBVkVfR0NDX19TWU5DX0lOVDY0X0NBUykKLSNkZWZpbmUgUEdfSEFWRV9BVE9NSUNfRkVU Q0hfU1VCX1U2NAotc3RhdGljIGlubGluZSB1aW50NjQKLXBnX2F0b21pY19mZXRjaF9zdWJfdTY0 X2ltcGwodm9sYXRpbGUgcGdfYXRvbWljX3VpbnQ2NCAqcHRyLCBpbnQ2NCBzdWJfKQotewotCXJl dHVybiBfX3N5bmNfZmV0Y2hfYW5kX3N1YigmcHRyLT52YWx1ZSwgc3ViXyk7Ci19Ci0jZW5kaWYK LQotI2lmICFkZWZpbmVkKFBHX0hBVkVfQVRPTUlDX0ZFVENIX0FORF9VNjQpICYmIGRlZmluZWQo SEFWRV9HQ0NfX1NZTkNfSU5UNjRfQ0FTKQotI2RlZmluZSBQR19IQVZFX0FUT01JQ19GRVRDSF9B TkRfVTY0Ci1zdGF0aWMgaW5saW5lIHVpbnQ2NAotcGdfYXRvbWljX2ZldGNoX2FuZF91NjRfaW1w bCh2b2xhdGlsZSBwZ19hdG9taWNfdWludDY0ICpwdHIsIHVpbnQ2NCBhbmRfKQotewotCXJldHVy biBfX3N5bmNfZmV0Y2hfYW5kX2FuZCgmcHRyLT52YWx1ZSwgYW5kXyk7Ci19Ci0jZW5kaWYKLQot I2lmICFkZWZpbmVkKFBHX0hBVkVfQVRPTUlDX0ZFVENIX09SX1U2NCkgJiYgZGVmaW5lZChIQVZF X0dDQ19fU1lOQ19JTlQ2NF9DQVMpCi0jZGVmaW5lIFBHX0hBVkVfQVRPTUlDX0ZFVENIX09SX1U2 NAotc3RhdGljIGlubGluZSB1aW50NjQKLXBnX2F0b21pY19mZXRjaF9vcl91NjRfaW1wbCh2b2xh dGlsZSBwZ19hdG9taWNfdWludDY0ICpwdHIsIHVpbnQ2NCBvcl8pCi17Ci0JcmV0dXJuIF9fc3lu Y19mZXRjaF9hbmRfb3IoJnB0ci0+dmFsdWUsIG9yXyk7Ci19Ci0jZW5kaWYKLQotI2VuZGlmIC8q ICFkZWZpbmVkKFBHX0RJU0FCTEVfNjRfQklUX0FUT01JQ1MpICovCmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9wb3J0L2F0b21pY3MvZ2VuZXJpYy1tc3ZjLmggYi9zcmMvaW5jbHVkZS9wb3J0L2F0 b21pY3MvZ2VuZXJpYy1tc3ZjLmgKaW5kZXggYTZlYTVmMWMyZTcuLjRjYjVlYWI1YmU2IDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS9wb3J0L2F0b21pY3MvZ2VuZXJpYy1tc3ZjLmgKKysrIGIvc3Jj L2luY2x1ZGUvcG9ydC9hdG9taWNzL2dlbmVyaWMtbXN2Yy5oCkBAIC0xLDE3ICsxLDExIEBACiAv Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KICAqCiAgKiBnZW5lcmljLW1zdmMuaAotICoJICBBdG9taWMgb3Bl cmF0aW9ucyBzdXBwb3J0IHdoZW4gdXNpbmcgTVNWQworICogICBDb21waWxlciBiYXJyaWVycyB3 aGVuIHVzaW5nIE1TVkMKICAqCiAgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyNSwg UG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKICAqIFBvcnRpb25zIENvcHlyaWdo dCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCiAgKgot ICogTk9URVM6Ci0gKgotICogRG9jdW1lbnRhdGlvbjoKLSAqICogSW50ZXJsb2NrZWQgVmFyaWFi bGUgQWNjZXNzCi0gKiAgIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9t czY4NDEyMiUyOFZTLjg1JTI5LmFzcHgKLSAqCiAgKiBzcmMvaW5jbHVkZS9wb3J0L2F0b21pY3Mv Z2VuZXJpYy1tc3ZjLmgKICAqCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTI0LDkyICsxOCw0IEBA CiAjZW5kaWYKIAogI3ByYWdtYSBpbnRyaW5zaWMoX1JlYWRXcml0ZUJhcnJpZXIpCi0jZGVmaW5l IHBnX2NvbXBpbGVyX2JhcnJpZXJfaW1wbCgpCV9SZWFkV3JpdGVCYXJyaWVyKCkKLQotI2lmbmRl ZiBwZ19tZW1vcnlfYmFycmllcl9pbXBsCi0jZGVmaW5lIHBnX21lbW9yeV9iYXJyaWVyX2ltcGwo KQlNZW1vcnlCYXJyaWVyKCkKLSNlbmRpZgotCi0jZGVmaW5lIFBHX0hBVkVfQVRPTUlDX1UzMl9T VVBQT1JUCi10eXBlZGVmIHN0cnVjdCBwZ19hdG9taWNfdWludDMyCi17Ci0Jdm9sYXRpbGUgdWlu dDMyIHZhbHVlOwotfSBwZ19hdG9taWNfdWludDMyOwotCi0jZGVmaW5lIFBHX0hBVkVfQVRPTUlD X1U2NF9TVVBQT1JUCi10eXBlZGVmIHN0cnVjdCBwZ19hdHRyaWJ1dGVfYWxpZ25lZCg4KSBwZ19h dG9taWNfdWludDY0Ci17Ci0Jdm9sYXRpbGUgdWludDY0IHZhbHVlOwotfSBwZ19hdG9taWNfdWlu dDY0OwotCi0KLSNkZWZpbmUgUEdfSEFWRV9BVE9NSUNfQ09NUEFSRV9FWENIQU5HRV9VMzIKLXN0 YXRpYyBpbmxpbmUgYm9vbAotcGdfYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2VfdTMyX2ltcGwodm9s YXRpbGUgcGdfYXRvbWljX3VpbnQzMiAqcHRyLAotCQkJCQkJCQkJdWludDMyICpleHBlY3RlZCwg dWludDMyIG5ld3ZhbCkKLXsKLQlib29sCXJldDsKLQl1aW50MzIJY3VycmVudDsKLQljdXJyZW50 ID0gSW50ZXJsb2NrZWRDb21wYXJlRXhjaGFuZ2UoJnB0ci0+dmFsdWUsIG5ld3ZhbCwgKmV4cGVj dGVkKTsKLQlyZXQgPSBjdXJyZW50ID09ICpleHBlY3RlZDsKLQkqZXhwZWN0ZWQgPSBjdXJyZW50 OwotCXJldHVybiByZXQ7Ci19Ci0KLSNkZWZpbmUgUEdfSEFWRV9BVE9NSUNfRVhDSEFOR0VfVTMy Ci1zdGF0aWMgaW5saW5lIHVpbnQzMgotcGdfYXRvbWljX2V4Y2hhbmdlX3UzMl9pbXBsKHZvbGF0 aWxlIHBnX2F0b21pY191aW50MzIgKnB0ciwgdWludDMyIG5ld3ZhbCkKLXsKLQlyZXR1cm4gSW50 ZXJsb2NrZWRFeGNoYW5nZSgmcHRyLT52YWx1ZSwgbmV3dmFsKTsKLX0KLQotI2RlZmluZSBQR19I QVZFX0FUT01JQ19GRVRDSF9BRERfVTMyCi1zdGF0aWMgaW5saW5lIHVpbnQzMgotcGdfYXRvbWlj X2ZldGNoX2FkZF91MzJfaW1wbCh2b2xhdGlsZSBwZ19hdG9taWNfdWludDMyICpwdHIsIGludDMy IGFkZF8pCi17Ci0JcmV0dXJuIEludGVybG9ja2VkRXhjaGFuZ2VBZGQoJnB0ci0+dmFsdWUsIGFk ZF8pOwotfQotCi0vKgotICogVGhlIG5vbi1pbnRyaW5zaWNzIHZlcnNpb25zIGFyZSBvbmx5IGF2 YWlsYWJsZSBpbiB2aXN0YSB1cHdhcmRzLCBzbyB1c2UgdGhlCi0gKiBpbnRyaW5zaWMgdmVyc2lv bi4gT25seSBzdXBwb3J0ZWQgb24gPjQ4NiwgYnV0IHdlIHJlcXVpcmUgWFAgYXMgYSBtaW5pbXVt Ci0gKiBiYXNlbGluZSwgd2hpY2ggZG9lc24ndCBzdXBwb3J0IHRoZSA0ODYsIHNvIHdlIGRvbid0 IG5lZWQgdG8gYWRkIGNoZWNrcyBmb3IKLSAqIHRoYXQgY2FzZS4KLSAqLwotI3ByYWdtYSBpbnRy aW5zaWMoX0ludGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdlNjQpCi0KLSNkZWZpbmUgUEdfSEFWRV9B VE9NSUNfQ09NUEFSRV9FWENIQU5HRV9VNjQKLXN0YXRpYyBpbmxpbmUgYm9vbAotcGdfYXRvbWlj X2NvbXBhcmVfZXhjaGFuZ2VfdTY0X2ltcGwodm9sYXRpbGUgcGdfYXRvbWljX3VpbnQ2NCAqcHRy LAotCQkJCQkJCQkJdWludDY0ICpleHBlY3RlZCwgdWludDY0IG5ld3ZhbCkKLXsKLQlib29sCXJl dDsKLQl1aW50NjQJY3VycmVudDsKLQljdXJyZW50ID0gX0ludGVybG9ja2VkQ29tcGFyZUV4Y2hh bmdlNjQoJnB0ci0+dmFsdWUsIG5ld3ZhbCwgKmV4cGVjdGVkKTsKLQlyZXQgPSBjdXJyZW50ID09 ICpleHBlY3RlZDsKLQkqZXhwZWN0ZWQgPSBjdXJyZW50OwotCXJldHVybiByZXQ7Ci19Ci0KLS8q IE9ubHkgaW1wbGVtZW50ZWQgb24gNjRiaXQgYnVpbGRzICovCi0jaWZkZWYgX1dJTjY0Ci0KLSNw cmFnbWEgaW50cmluc2ljKF9JbnRlcmxvY2tlZEV4Y2hhbmdlNjQpCi0KLSNkZWZpbmUgUEdfSEFW RV9BVE9NSUNfRVhDSEFOR0VfVTY0Ci1zdGF0aWMgaW5saW5lIHVpbnQ2NAotcGdfYXRvbWljX2V4 Y2hhbmdlX3U2NF9pbXBsKHZvbGF0aWxlIHBnX2F0b21pY191aW50NjQgKnB0ciwgdWludDY0IG5l d3ZhbCkKLXsKLQlyZXR1cm4gX0ludGVybG9ja2VkRXhjaGFuZ2U2NCgmcHRyLT52YWx1ZSwgbmV3 dmFsKTsKLX0KLQotI3ByYWdtYSBpbnRyaW5zaWMoX0ludGVybG9ja2VkRXhjaGFuZ2VBZGQ2NCkK LQotI2RlZmluZSBQR19IQVZFX0FUT01JQ19GRVRDSF9BRERfVTY0Ci1zdGF0aWMgaW5saW5lIHVp bnQ2NAotcGdfYXRvbWljX2ZldGNoX2FkZF91NjRfaW1wbCh2b2xhdGlsZSBwZ19hdG9taWNfdWlu dDY0ICpwdHIsIGludDY0IGFkZF8pCi17Ci0JcmV0dXJuIF9JbnRlcmxvY2tlZEV4Y2hhbmdlQWRk NjQoJnB0ci0+dmFsdWUsIGFkZF8pOwotfQotCi0jZW5kaWYgLyogX1dJTjY0ICovCisjZGVmaW5l IHBnX2NvbXBpbGVyX2JhcnJpZXJfaW1wbCgpIF9SZWFkV3JpdGVCYXJyaWVyKCkKZGlmZiAtLWdp dCBhL3NyYy9pbmNsdWRlL3BvcnQvYXRvbWljcy9nZW5lcmljLmggYi9zcmMvaW5jbHVkZS9wb3J0 L2F0b21pY3MvZ2VuZXJpYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YjYxYTdi NTQxNi4uMDAwMDAwMDAwMDAKLS0tIGEvc3JjL2luY2x1ZGUvcG9ydC9hdG9taWNzL2dlbmVyaWMu aAorKysgL2Rldi9udWxsCkBAIC0xLDQyNyArMCwwIEBACi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAq Ci0gKiBnZW5lcmljLmgKLSAqCSAgSW1wbGVtZW50IGhpZ2hlciBsZXZlbCBvcGVyYXRpb25zIGJh c2VkIG9uIHNvbWUgbG93ZXIgbGV2ZWwgYXRvbWljCi0gKgkgIG9wZXJhdGlvbnMuCi0gKgotICog UG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVs b3BtZW50IEdyb3VwCi0gKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2Yg dGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQotICoKLSAqIHNyYy9pbmNsdWRlL3BvcnQvYXRv bWljcy9nZW5lcmljLmgKLSAqCi0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqLwotCi0vKiBpbnRlbnRp b25hbGx5IG5vIGluY2x1ZGUgZ3VhcmRzLCBzaG91bGQgb25seSBiZSBpbmNsdWRlZCBieSBhdG9t aWNzLmggKi8KLSNpZm5kZWYgSU5TSURFX0FUT01JQ1NfSAotIwllcnJvciAic2hvdWxkIGJlIGlu Y2x1ZGVkIHZpYSBhdG9taWNzLmgiCi0jZW5kaWYKLQotLyoKLSAqIElmIHJlYWQgb3Igd3JpdGUg YmFycmllcnMgYXJlIHVuZGVmaW5lZCwgd2UgdXBncmFkZSB0aGVtIHRvIGZ1bGwgbWVtb3J5Ci0g KiBiYXJyaWVycy4KLSAqLwotI2lmICFkZWZpbmVkKHBnX3JlYWRfYmFycmllcl9pbXBsKQotIwlk ZWZpbmUgcGdfcmVhZF9iYXJyaWVyX2ltcGwgcGdfbWVtb3J5X2JhcnJpZXJfaW1wbAotI2VuZGlm Ci0jaWYgIWRlZmluZWQocGdfd3JpdGVfYmFycmllcl9pbXBsKQotIwlkZWZpbmUgcGdfd3JpdGVf YmFycmllcl9pbXBsIHBnX21lbW9yeV9iYXJyaWVyX2ltcGwKLSNlbmRpZgotCi0jaWZuZGVmIFBH X0hBVkVfU1BJTl9ERUxBWQotI2RlZmluZSBQR19IQVZFX1NQSU5fREVMQVkKLSNkZWZpbmUgcGdf c3Bpbl9kZWxheV9pbXBsKCkJKCh2b2lkKTApCi0jZW5kaWYKLQotCi0vKiBwcm92aWRlIGZhbGxi YWNrICovCi0jaWYgIWRlZmluZWQoUEdfSEFWRV9BVE9NSUNfRkxBR19TVVBQT1JUKSAmJiBkZWZp bmVkKFBHX0hBVkVfQVRPTUlDX1UzMl9TVVBQT1JUKQotI2RlZmluZSBQR19IQVZFX0FUT01JQ19G TEFHX1NVUFBPUlQKLXR5cGVkZWYgcGdfYXRvbWljX3VpbnQzMiBwZ19hdG9taWNfZmxhZzsKLSNl bmRpZgotCi0jaWZuZGVmIFBHX0hBVkVfQVRPTUlDX1JFQURfVTMyCi0jZGVmaW5lIFBHX0hBVkVf QVRPTUlDX1JFQURfVTMyCi1zdGF0aWMgaW5saW5lIHVpbnQzMgotcGdfYXRvbWljX3JlYWRfdTMy X2ltcGwodm9sYXRpbGUgcGdfYXRvbWljX3VpbnQzMiAqcHRyKQotewotCXJldHVybiBwdHItPnZh bHVlOwotfQotI2VuZGlmCi0KLSNpZm5kZWYgUEdfSEFWRV9BVE9NSUNfV1JJVEVfVTMyCi0jZGVm aW5lIFBHX0hBVkVfQVRPTUlDX1dSSVRFX1UzMgotc3RhdGljIGlubGluZSB2b2lkCi1wZ19hdG9t aWNfd3JpdGVfdTMyX2ltcGwodm9sYXRpbGUgcGdfYXRvbWljX3VpbnQzMiAqcHRyLCB1aW50MzIg dmFsKQotewotCXB0ci0+dmFsdWUgPSB2YWw7Ci19Ci0jZW5kaWYKLQotI2lmbmRlZiBQR19IQVZF X0FUT01JQ19VTkxPQ0tFRF9XUklURV9VMzIKLSNkZWZpbmUgUEdfSEFWRV9BVE9NSUNfVU5MT0NL RURfV1JJVEVfVTMyCi1zdGF0aWMgaW5saW5lIHZvaWQKLXBnX2F0b21pY191bmxvY2tlZF93cml0 ZV91MzJfaW1wbCh2b2xhdGlsZSBwZ19hdG9taWNfdWludDMyICpwdHIsIHVpbnQzMiB2YWwpCi17 Ci0JcHRyLT52YWx1ZSA9IHZhbDsKLX0KLSNlbmRpZgotCi0vKgotICogcHJvdmlkZSBmYWxsYmFj ayBmb3IgdGVzdF9hbmRfc2V0IHVzaW5nIGF0b21pY19leGNoYW5nZSBpZiBhdmFpbGFibGUKLSAq LwotI2lmICFkZWZpbmVkKFBHX0hBVkVfQVRPTUlDX1RFU1RfU0VUX0ZMQUcpICYmIGRlZmluZWQo UEdfSEFWRV9BVE9NSUNfRVhDSEFOR0VfVTMyKQotCi0jZGVmaW5lIFBHX0hBVkVfQVRPTUlDX0lO SVRfRkxBRwotc3RhdGljIGlubGluZSB2b2lkCi1wZ19hdG9taWNfaW5pdF9mbGFnX2ltcGwodm9s YXRpbGUgcGdfYXRvbWljX2ZsYWcgKnB0cikKLXsKLQlwZ19hdG9taWNfd3JpdGVfdTMyX2ltcGwo cHRyLCAwKTsKLX0KLQotI2RlZmluZSBQR19IQVZFX0FUT01JQ19URVNUX1NFVF9GTEFHCi1zdGF0 aWMgaW5saW5lIGJvb2wKLXBnX2F0b21pY190ZXN0X3NldF9mbGFnX2ltcGwodm9sYXRpbGUgcGdf YXRvbWljX2ZsYWcgKnB0cikKLXsKLQlyZXR1cm4gcGdfYXRvbWljX2V4Y2hhbmdlX3UzMl9pbXBs KHB0ciwgMSkgPT0gMDsKLX0KLQotI2RlZmluZSBQR19IQVZFX0FUT01JQ19VTkxPQ0tFRF9URVNU X0ZMQUcKLXN0YXRpYyBpbmxpbmUgYm9vbAotcGdfYXRvbWljX3VubG9ja2VkX3Rlc3RfZmxhZ19p bXBsKHZvbGF0aWxlIHBnX2F0b21pY19mbGFnICpwdHIpCi17Ci0JcmV0dXJuIHBnX2F0b21pY19y ZWFkX3UzMl9pbXBsKHB0cikgPT0gMDsKLX0KLQotCi0jZGVmaW5lIFBHX0hBVkVfQVRPTUlDX0NM RUFSX0ZMQUcKLXN0YXRpYyBpbmxpbmUgdm9pZAotcGdfYXRvbWljX2NsZWFyX2ZsYWdfaW1wbCh2 b2xhdGlsZSBwZ19hdG9taWNfZmxhZyAqcHRyKQotewotCS8qIFhYWDogcmVsZWFzZSBzZW1hbnRp Y3Mgc3VmZmljZT8gKi8KLQlwZ19tZW1vcnlfYmFycmllcl9pbXBsKCk7Ci0JcGdfYXRvbWljX3dy aXRlX3UzMl9pbXBsKHB0ciwgMCk7Ci19Ci0KLS8qCi0gKiBwcm92aWRlIGZhbGxiYWNrIGZvciB0 ZXN0X2FuZF9zZXQgdXNpbmcgYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2UgaWYKLSAqIGF2YWlsYWJs ZS4KLSAqLwotI2VsaWYgIWRlZmluZWQoUEdfSEFWRV9BVE9NSUNfVEVTVF9TRVRfRkxBRykgJiYg ZGVmaW5lZChQR19IQVZFX0FUT01JQ19DT01QQVJFX0VYQ0hBTkdFX1UzMikKLQotI2RlZmluZSBQ R19IQVZFX0FUT01JQ19JTklUX0ZMQUcKLXN0YXRpYyBpbmxpbmUgdm9pZAotcGdfYXRvbWljX2lu aXRfZmxhZ19pbXBsKHZvbGF0aWxlIHBnX2F0b21pY19mbGFnICpwdHIpCi17Ci0JcGdfYXRvbWlj X3dyaXRlX3UzMl9pbXBsKHB0ciwgMCk7Ci19Ci0KLSNkZWZpbmUgUEdfSEFWRV9BVE9NSUNfVEVT VF9TRVRfRkxBRwotc3RhdGljIGlubGluZSBib29sCi1wZ19hdG9taWNfdGVzdF9zZXRfZmxhZ19p bXBsKHZvbGF0aWxlIHBnX2F0b21pY19mbGFnICpwdHIpCi17Ci0JdWludDMyIHZhbHVlID0gMDsK LQlyZXR1cm4gcGdfYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2VfdTMyX2ltcGwocHRyLCAmdmFsdWUs IDEpOwotfQotCi0jZGVmaW5lIFBHX0hBVkVfQVRPTUlDX1VOTE9DS0VEX1RFU1RfRkxBRwotc3Rh dGljIGlubGluZSBib29sCi1wZ19hdG9taWNfdW5sb2NrZWRfdGVzdF9mbGFnX2ltcGwodm9sYXRp bGUgcGdfYXRvbWljX2ZsYWcgKnB0cikKLXsKLQlyZXR1cm4gcGdfYXRvbWljX3JlYWRfdTMyX2lt cGwocHRyKSA9PSAwOwotfQotCi0jZGVmaW5lIFBHX0hBVkVfQVRPTUlDX0NMRUFSX0ZMQUcKLXN0 YXRpYyBpbmxpbmUgdm9pZAotcGdfYXRvbWljX2NsZWFyX2ZsYWdfaW1wbCh2b2xhdGlsZSBwZ19h dG9taWNfZmxhZyAqcHRyKQotewotCS8qIFhYWDogcmVsZWFzZSBzZW1hbnRpY3Mgc3VmZmljZT8g Ki8KLQlwZ19tZW1vcnlfYmFycmllcl9pbXBsKCk7Ci0JcGdfYXRvbWljX3dyaXRlX3UzMl9pbXBs KHB0ciwgMCk7Ci19Ci0KLSNlbGlmICFkZWZpbmVkKFBHX0hBVkVfQVRPTUlDX1RFU1RfU0VUX0ZM QUcpCi0jCWVycm9yICJObyBwZ19hdG9taWNfdGVzdF9hbmRfc2V0IHByb3ZpZGVkIgotI2VuZGlm IC8qICFkZWZpbmVkKFBHX0hBVkVfQVRPTUlDX1RFU1RfU0VUX0ZMQUcpICovCi0KLQotI2lmbmRl ZiBQR19IQVZFX0FUT01JQ19JTklUX1UzMgotI2RlZmluZSBQR19IQVZFX0FUT01JQ19JTklUX1Uz Mgotc3RhdGljIGlubGluZSB2b2lkCi1wZ19hdG9taWNfaW5pdF91MzJfaW1wbCh2b2xhdGlsZSBw Z19hdG9taWNfdWludDMyICpwdHIsIHVpbnQzMiB2YWxfKQotewotCXB0ci0+dmFsdWUgPSB2YWxf OwotfQotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChQR19IQVZFX0FUT01JQ19FWENIQU5HRV9VMzIp ICYmIGRlZmluZWQoUEdfSEFWRV9BVE9NSUNfQ09NUEFSRV9FWENIQU5HRV9VMzIpCi0jZGVmaW5l IFBHX0hBVkVfQVRPTUlDX0VYQ0hBTkdFX1UzMgotc3RhdGljIGlubGluZSB1aW50MzIKLXBnX2F0 b21pY19leGNoYW5nZV91MzJfaW1wbCh2b2xhdGlsZSBwZ19hdG9taWNfdWludDMyICpwdHIsIHVp bnQzMiB4Y2hnXykKLXsKLQl1aW50MzIgb2xkOwotCW9sZCA9IHB0ci0+dmFsdWU7CQkJLyogb2sg aWYgcmVhZCBpcyBub3QgYXRvbWljICovCi0Jd2hpbGUgKCFwZ19hdG9taWNfY29tcGFyZV9leGNo YW5nZV91MzJfaW1wbChwdHIsICZvbGQsIHhjaGdfKSkKLQkJLyogc2tpcCAqLzsKLQlyZXR1cm4g b2xkOwotfQotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChQR19IQVZFX0FUT01JQ19GRVRDSF9BRERf VTMyKSAmJiBkZWZpbmVkKFBHX0hBVkVfQVRPTUlDX0NPTVBBUkVfRVhDSEFOR0VfVTMyKQotI2Rl ZmluZSBQR19IQVZFX0FUT01JQ19GRVRDSF9BRERfVTMyCi1zdGF0aWMgaW5saW5lIHVpbnQzMgot cGdfYXRvbWljX2ZldGNoX2FkZF91MzJfaW1wbCh2b2xhdGlsZSBwZ19hdG9taWNfdWludDMyICpw dHIsIGludDMyIGFkZF8pCi17Ci0JdWludDMyIG9sZDsKLQlvbGQgPSBwdHItPnZhbHVlOwkJCS8q IG9rIGlmIHJlYWQgaXMgbm90IGF0b21pYyAqLwotCXdoaWxlICghcGdfYXRvbWljX2NvbXBhcmVf ZXhjaGFuZ2VfdTMyX2ltcGwocHRyLCAmb2xkLCBvbGQgKyBhZGRfKSkKLQkJLyogc2tpcCAqLzsK LQlyZXR1cm4gb2xkOwotfQotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChQR19IQVZFX0FUT01JQ19G RVRDSF9TVUJfVTMyKSAmJiBkZWZpbmVkKFBHX0hBVkVfQVRPTUlDX0NPTVBBUkVfRVhDSEFOR0Vf VTMyKQotI2RlZmluZSBQR19IQVZFX0FUT01JQ19GRVRDSF9TVUJfVTMyCi1zdGF0aWMgaW5saW5l IHVpbnQzMgotcGdfYXRvbWljX2ZldGNoX3N1Yl91MzJfaW1wbCh2b2xhdGlsZSBwZ19hdG9taWNf dWludDMyICpwdHIsIGludDMyIHN1Yl8pCi17Ci0JcmV0dXJuIHBnX2F0b21pY19mZXRjaF9hZGRf dTMyX2ltcGwocHRyLCAtc3ViXyk7Ci19Ci0jZW5kaWYKLQotI2lmICFkZWZpbmVkKFBHX0hBVkVf QVRPTUlDX0ZFVENIX0FORF9VMzIpICYmIGRlZmluZWQoUEdfSEFWRV9BVE9NSUNfQ09NUEFSRV9F WENIQU5HRV9VMzIpCi0jZGVmaW5lIFBHX0hBVkVfQVRPTUlDX0ZFVENIX0FORF9VMzIKLXN0YXRp YyBpbmxpbmUgdWludDMyCi1wZ19hdG9taWNfZmV0Y2hfYW5kX3UzMl9pbXBsKHZvbGF0aWxlIHBn X2F0b21pY191aW50MzIgKnB0ciwgdWludDMyIGFuZF8pCi17Ci0JdWludDMyIG9sZDsKLQlvbGQg PSBwdHItPnZhbHVlOwkJCS8qIG9rIGlmIHJlYWQgaXMgbm90IGF0b21pYyAqLwotCXdoaWxlICgh cGdfYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2VfdTMyX2ltcGwocHRyLCAmb2xkLCBvbGQgJiBhbmRf KSkKLQkJLyogc2tpcCAqLzsKLQlyZXR1cm4gb2xkOwotfQotI2VuZGlmCi0KLSNpZiAhZGVmaW5l ZChQR19IQVZFX0FUT01JQ19GRVRDSF9PUl9VMzIpICYmIGRlZmluZWQoUEdfSEFWRV9BVE9NSUNf Q09NUEFSRV9FWENIQU5HRV9VMzIpCi0jZGVmaW5lIFBHX0hBVkVfQVRPTUlDX0ZFVENIX09SX1Uz Mgotc3RhdGljIGlubGluZSB1aW50MzIKLXBnX2F0b21pY19mZXRjaF9vcl91MzJfaW1wbCh2b2xh dGlsZSBwZ19hdG9taWNfdWludDMyICpwdHIsIHVpbnQzMiBvcl8pCi17Ci0JdWludDMyIG9sZDsK LQlvbGQgPSBwdHItPnZhbHVlOwkJCS8qIG9rIGlmIHJlYWQgaXMgbm90IGF0b21pYyAqLwotCXdo aWxlICghcGdfYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2VfdTMyX2ltcGwocHRyLCAmb2xkLCBvbGQg fCBvcl8pKQotCQkvKiBza2lwICovOwotCXJldHVybiBvbGQ7Ci19Ci0jZW5kaWYKLQotI2lmICFk ZWZpbmVkKFBHX0hBVkVfQVRPTUlDX0FERF9GRVRDSF9VMzIpICYmIGRlZmluZWQoUEdfSEFWRV9B VE9NSUNfRkVUQ0hfQUREX1UzMikKLSNkZWZpbmUgUEdfSEFWRV9BVE9NSUNfQUREX0ZFVENIX1Uz Mgotc3RhdGljIGlubGluZSB1aW50MzIKLXBnX2F0b21pY19hZGRfZmV0Y2hfdTMyX2ltcGwodm9s YXRpbGUgcGdfYXRvbWljX3VpbnQzMiAqcHRyLCBpbnQzMiBhZGRfKQotewotCXJldHVybiBwZ19h dG9taWNfZmV0Y2hfYWRkX3UzMl9pbXBsKHB0ciwgYWRkXykgKyBhZGRfOwotfQotI2VuZGlmCi0K LSNpZiAhZGVmaW5lZChQR19IQVZFX0FUT01JQ19TVUJfRkVUQ0hfVTMyKSAmJiBkZWZpbmVkKFBH X0hBVkVfQVRPTUlDX0ZFVENIX1NVQl9VMzIpCi0jZGVmaW5lIFBHX0hBVkVfQVRPTUlDX1NVQl9G RVRDSF9VMzIKLXN0YXRpYyBpbmxpbmUgdWludDMyCi1wZ19hdG9taWNfc3ViX2ZldGNoX3UzMl9p bXBsKHZvbGF0aWxlIHBnX2F0b21pY191aW50MzIgKnB0ciwgaW50MzIgc3ViXykKLXsKLQlyZXR1 cm4gcGdfYXRvbWljX2ZldGNoX3N1Yl91MzJfaW1wbChwdHIsIHN1Yl8pIC0gc3ViXzsKLX0KLSNl bmRpZgotCi0jaWYgIWRlZmluZWQoUEdfSEFWRV9BVE9NSUNfUkVBRF9NRU1CQVJSSUVSX1UzMikg JiYgZGVmaW5lZChQR19IQVZFX0FUT01JQ19GRVRDSF9BRERfVTMyKQotI2RlZmluZSBQR19IQVZF X0FUT01JQ19SRUFEX01FTUJBUlJJRVJfVTMyCi1zdGF0aWMgaW5saW5lIHVpbnQzMgotcGdfYXRv bWljX3JlYWRfbWVtYmFycmllcl91MzJfaW1wbCh2b2xhdGlsZSBwZ19hdG9taWNfdWludDMyICpw dHIpCi17Ci0JcmV0dXJuIHBnX2F0b21pY19mZXRjaF9hZGRfdTMyX2ltcGwocHRyLCAwKTsKLX0K LSNlbmRpZgotCi0jaWYgIWRlZmluZWQoUEdfSEFWRV9BVE9NSUNfV1JJVEVfTUVNQkFSUklFUl9V MzIpICYmIGRlZmluZWQoUEdfSEFWRV9BVE9NSUNfRVhDSEFOR0VfVTMyKQotI2RlZmluZSBQR19I QVZFX0FUT01JQ19XUklURV9NRU1CQVJSSUVSX1UzMgotc3RhdGljIGlubGluZSB2b2lkCi1wZ19h dG9taWNfd3JpdGVfbWVtYmFycmllcl91MzJfaW1wbCh2b2xhdGlsZSBwZ19hdG9taWNfdWludDMy ICpwdHIsIHVpbnQzMiB2YWwpCi17Ci0JKHZvaWQpIHBnX2F0b21pY19leGNoYW5nZV91MzJfaW1w bChwdHIsIHZhbCk7Ci19Ci0jZW5kaWYKLQotI2lmICFkZWZpbmVkKFBHX0hBVkVfQVRPTUlDX0VY Q0hBTkdFX1U2NCkgJiYgZGVmaW5lZChQR19IQVZFX0FUT01JQ19DT01QQVJFX0VYQ0hBTkdFX1U2 NCkKLSNkZWZpbmUgUEdfSEFWRV9BVE9NSUNfRVhDSEFOR0VfVTY0Ci1zdGF0aWMgaW5saW5lIHVp bnQ2NAotcGdfYXRvbWljX2V4Y2hhbmdlX3U2NF9pbXBsKHZvbGF0aWxlIHBnX2F0b21pY191aW50 NjQgKnB0ciwgdWludDY0IHhjaGdfKQotewotCXVpbnQ2NCBvbGQ7Ci0Jb2xkID0gcHRyLT52YWx1 ZTsJCQkvKiBvayBpZiByZWFkIGlzIG5vdCBhdG9taWMgKi8KLQl3aGlsZSAoIXBnX2F0b21pY19j b21wYXJlX2V4Y2hhbmdlX3U2NF9pbXBsKHB0ciwgJm9sZCwgeGNoZ18pKQotCQkvKiBza2lwICov OwotCXJldHVybiBvbGQ7Ci19Ci0jZW5kaWYKLQotI2lmbmRlZiBQR19IQVZFX0FUT01JQ19XUklU RV9VNjQKLSNkZWZpbmUgUEdfSEFWRV9BVE9NSUNfV1JJVEVfVTY0Ci0KLSNpZiBkZWZpbmVkKFBH X0hBVkVfOEJZVEVfU0lOR0xFX0NPUFlfQVRPTUlDSVRZKSAmJiBcCi0JIWRlZmluZWQoUEdfSEFW RV9BVE9NSUNfVTY0X1NJTVVMQVRJT04pCi0KLXN0YXRpYyBpbmxpbmUgdm9pZAotcGdfYXRvbWlj X3dyaXRlX3U2NF9pbXBsKHZvbGF0aWxlIHBnX2F0b21pY191aW50NjQgKnB0ciwgdWludDY0IHZh bCkKLXsKLQkvKgotCSAqIE9uIHRoaXMgcGxhdGZvcm0gYWxpZ25lZCA2NGJpdCB3cml0ZXMgYXJl IGd1YXJhbnRlZWQgdG8gYmUgYXRvbWljLAotCSAqIGV4Y2VwdCBpZiB1c2luZyB0aGUgZmFsbGJh Y2sgaW1wbGVtZW50YXRpb24sIHdoZXJlIGNhbid0IGd1YXJhbnRlZSB0aGUKLQkgKiByZXF1aXJl ZCBhbGlnbm1lbnQuCi0JICovCi0JQXNzZXJ0UG9pbnRlckFsaWdubWVudChwdHIsIDgpOwotCXB0 ci0+dmFsdWUgPSB2YWw7Ci19Ci0KLSNlbHNlCi0KLXN0YXRpYyBpbmxpbmUgdm9pZAotcGdfYXRv bWljX3dyaXRlX3U2NF9pbXBsKHZvbGF0aWxlIHBnX2F0b21pY191aW50NjQgKnB0ciwgdWludDY0 IHZhbCkKLXsKLQkvKgotCSAqIDY0IGJpdCB3cml0ZXMgYXJlbid0IHNhZmUgb24gYWxsIHBsYXRm b3Jtcy4gSW4gdGhlIGdlbmVyaWMKLQkgKiBpbXBsZW1lbnRhdGlvbiBpbXBsZW1lbnQgdGhlbSBh cyBhbiBhdG9taWMgZXhjaGFuZ2UuCi0JICovCi0JcGdfYXRvbWljX2V4Y2hhbmdlX3U2NF9pbXBs KHB0ciwgdmFsKTsKLX0KLQotI2VuZGlmIC8qIFBHX0hBVkVfOEJZVEVfU0lOR0xFX0NPUFlfQVRP TUlDSVRZICYmICFQR19IQVZFX0FUT01JQ19VNjRfU0lNVUxBVElPTiAqLwotI2VuZGlmIC8qIFBH X0hBVkVfQVRPTUlDX1dSSVRFX1U2NCAqLwotCi0jaWZuZGVmIFBHX0hBVkVfQVRPTUlDX1JFQURf VTY0Ci0jZGVmaW5lIFBHX0hBVkVfQVRPTUlDX1JFQURfVTY0Ci0KLSNpZiBkZWZpbmVkKFBHX0hB VkVfOEJZVEVfU0lOR0xFX0NPUFlfQVRPTUlDSVRZKSAmJiBcCi0JIWRlZmluZWQoUEdfSEFWRV9B VE9NSUNfVTY0X1NJTVVMQVRJT04pCi0KLXN0YXRpYyBpbmxpbmUgdWludDY0Ci1wZ19hdG9taWNf cmVhZF91NjRfaW1wbCh2b2xhdGlsZSBwZ19hdG9taWNfdWludDY0ICpwdHIpCi17Ci0JLyoKLQkg KiBPbiB0aGlzIHBsYXRmb3JtIGFsaWduZWQgNjQtYml0IHJlYWRzIGFyZSBndWFyYW50ZWVkIHRv IGJlIGF0b21pYy4KLQkgKi8KLQlBc3NlcnRQb2ludGVyQWxpZ25tZW50KHB0ciwgOCk7Ci0JcmV0 dXJuIHB0ci0+dmFsdWU7Ci19Ci0KLSNlbHNlCi0KLXN0YXRpYyBpbmxpbmUgdWludDY0Ci1wZ19h dG9taWNfcmVhZF91NjRfaW1wbCh2b2xhdGlsZSBwZ19hdG9taWNfdWludDY0ICpwdHIpCi17Ci0J dWludDY0IG9sZCA9IDA7Ci0KLQkvKgotCSAqIDY0LWJpdCByZWFkcyBhcmVuJ3QgYXRvbWljIG9u IGFsbCBwbGF0Zm9ybXMuIEluIHRoZSBnZW5lcmljCi0JICogaW1wbGVtZW50YXRpb24gaW1wbGVt ZW50IHRoZW0gYXMgYSBjb21wYXJlL2V4Y2hhbmdlIHdpdGggMC4gVGhhdCdsbAotCSAqIGZhaWwg b3Igc3VjY2VlZCwgYnV0IGFsd2F5cyByZXR1cm4gdGhlIG9sZCB2YWx1ZS4gUG9zc2libHkgbWln aHQgc3RvcmUKLQkgKiBhIDAsIGJ1dCBvbmx5IGlmIHRoZSBwcmV2aW91cyB2YWx1ZSBhbHNvIHdh cyBhIDAgLSBpLmUuIGhhcm1sZXNzLgotCSAqLwotCXBnX2F0b21pY19jb21wYXJlX2V4Y2hhbmdl X3U2NF9pbXBsKHB0ciwgJm9sZCwgMCk7Ci0KLQlyZXR1cm4gb2xkOwotfQotI2VuZGlmIC8qIFBH X0hBVkVfOEJZVEVfU0lOR0xFX0NPUFlfQVRPTUlDSVRZICYmICFQR19IQVZFX0FUT01JQ19VNjRf U0lNVUxBVElPTiAqLwotI2VuZGlmIC8qIFBHX0hBVkVfQVRPTUlDX1JFQURfVTY0ICovCi0KLSNp Zm5kZWYgUEdfSEFWRV9BVE9NSUNfSU5JVF9VNjQKLSNkZWZpbmUgUEdfSEFWRV9BVE9NSUNfSU5J VF9VNjQKLXN0YXRpYyBpbmxpbmUgdm9pZAotcGdfYXRvbWljX2luaXRfdTY0X2ltcGwodm9sYXRp bGUgcGdfYXRvbWljX3VpbnQ2NCAqcHRyLCB1aW50NjQgdmFsXykKLXsKLQlwdHItPnZhbHVlID0g dmFsXzsKLX0KLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoUEdfSEFWRV9BVE9NSUNfRkVUQ0hfQURE X1U2NCkgJiYgZGVmaW5lZChQR19IQVZFX0FUT01JQ19DT01QQVJFX0VYQ0hBTkdFX1U2NCkKLSNk ZWZpbmUgUEdfSEFWRV9BVE9NSUNfRkVUQ0hfQUREX1U2NAotc3RhdGljIGlubGluZSB1aW50NjQK LXBnX2F0b21pY19mZXRjaF9hZGRfdTY0X2ltcGwodm9sYXRpbGUgcGdfYXRvbWljX3VpbnQ2NCAq cHRyLCBpbnQ2NCBhZGRfKQotewotCXVpbnQ2NCBvbGQ7Ci0Jb2xkID0gcHRyLT52YWx1ZTsJCQkv KiBvayBpZiByZWFkIGlzIG5vdCBhdG9taWMgKi8KLQl3aGlsZSAoIXBnX2F0b21pY19jb21wYXJl X2V4Y2hhbmdlX3U2NF9pbXBsKHB0ciwgJm9sZCwgb2xkICsgYWRkXykpCi0JCS8qIHNraXAgKi87 Ci0JcmV0dXJuIG9sZDsKLX0KLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoUEdfSEFWRV9BVE9NSUNf RkVUQ0hfU1VCX1U2NCkgJiYgZGVmaW5lZChQR19IQVZFX0FUT01JQ19DT01QQVJFX0VYQ0hBTkdF X1U2NCkKLSNkZWZpbmUgUEdfSEFWRV9BVE9NSUNfRkVUQ0hfU1VCX1U2NAotc3RhdGljIGlubGlu ZSB1aW50NjQKLXBnX2F0b21pY19mZXRjaF9zdWJfdTY0X2ltcGwodm9sYXRpbGUgcGdfYXRvbWlj X3VpbnQ2NCAqcHRyLCBpbnQ2NCBzdWJfKQotewotCXJldHVybiBwZ19hdG9taWNfZmV0Y2hfYWRk X3U2NF9pbXBsKHB0ciwgLXN1Yl8pOwotfQotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChQR19IQVZF X0FUT01JQ19GRVRDSF9BTkRfVTY0KSAmJiBkZWZpbmVkKFBHX0hBVkVfQVRPTUlDX0NPTVBBUkVf RVhDSEFOR0VfVTY0KQotI2RlZmluZSBQR19IQVZFX0FUT01JQ19GRVRDSF9BTkRfVTY0Ci1zdGF0 aWMgaW5saW5lIHVpbnQ2NAotcGdfYXRvbWljX2ZldGNoX2FuZF91NjRfaW1wbCh2b2xhdGlsZSBw Z19hdG9taWNfdWludDY0ICpwdHIsIHVpbnQ2NCBhbmRfKQotewotCXVpbnQ2NCBvbGQ7Ci0Jb2xk ID0gcHRyLT52YWx1ZTsJCQkvKiBvayBpZiByZWFkIGlzIG5vdCBhdG9taWMgKi8KLQl3aGlsZSAo IXBnX2F0b21pY19jb21wYXJlX2V4Y2hhbmdlX3U2NF9pbXBsKHB0ciwgJm9sZCwgb2xkICYgYW5k XykpCi0JCS8qIHNraXAgKi87Ci0JcmV0dXJuIG9sZDsKLX0KLSNlbmRpZgotCi0jaWYgIWRlZmlu ZWQoUEdfSEFWRV9BVE9NSUNfRkVUQ0hfT1JfVTY0KSAmJiBkZWZpbmVkKFBHX0hBVkVfQVRPTUlD X0NPTVBBUkVfRVhDSEFOR0VfVTY0KQotI2RlZmluZSBQR19IQVZFX0FUT01JQ19GRVRDSF9PUl9V NjQKLXN0YXRpYyBpbmxpbmUgdWludDY0Ci1wZ19hdG9taWNfZmV0Y2hfb3JfdTY0X2ltcGwodm9s YXRpbGUgcGdfYXRvbWljX3VpbnQ2NCAqcHRyLCB1aW50NjQgb3JfKQotewotCXVpbnQ2NCBvbGQ7 Ci0Jb2xkID0gcHRyLT52YWx1ZTsJCQkvKiBvayBpZiByZWFkIGlzIG5vdCBhdG9taWMgKi8KLQl3 aGlsZSAoIXBnX2F0b21pY19jb21wYXJlX2V4Y2hhbmdlX3U2NF9pbXBsKHB0ciwgJm9sZCwgb2xk IHwgb3JfKSkKLQkJLyogc2tpcCAqLzsKLQlyZXR1cm4gb2xkOwotfQotI2VuZGlmCi0KLSNpZiAh ZGVmaW5lZChQR19IQVZFX0FUT01JQ19BRERfRkVUQ0hfVTY0KSAmJiBkZWZpbmVkKFBHX0hBVkVf QVRPTUlDX0ZFVENIX0FERF9VNjQpCi0jZGVmaW5lIFBHX0hBVkVfQVRPTUlDX0FERF9GRVRDSF9V NjQKLXN0YXRpYyBpbmxpbmUgdWludDY0Ci1wZ19hdG9taWNfYWRkX2ZldGNoX3U2NF9pbXBsKHZv bGF0aWxlIHBnX2F0b21pY191aW50NjQgKnB0ciwgaW50NjQgYWRkXykKLXsKLQlyZXR1cm4gcGdf YXRvbWljX2ZldGNoX2FkZF91NjRfaW1wbChwdHIsIGFkZF8pICsgYWRkXzsKLX0KLSNlbmRpZgot Ci0jaWYgIWRlZmluZWQoUEdfSEFWRV9BVE9NSUNfU1VCX0ZFVENIX1U2NCkgJiYgZGVmaW5lZChQ R19IQVZFX0FUT01JQ19GRVRDSF9TVUJfVTY0KQotI2RlZmluZSBQR19IQVZFX0FUT01JQ19TVUJf RkVUQ0hfVTY0Ci1zdGF0aWMgaW5saW5lIHVpbnQ2NAotcGdfYXRvbWljX3N1Yl9mZXRjaF91NjRf aW1wbCh2b2xhdGlsZSBwZ19hdG9taWNfdWludDY0ICpwdHIsIGludDY0IHN1Yl8pCi17Ci0JcmV0 dXJuIHBnX2F0b21pY19mZXRjaF9zdWJfdTY0X2ltcGwocHRyLCBzdWJfKSAtIHN1Yl87Ci19Ci0j ZW5kaWYKLQotI2lmICFkZWZpbmVkKFBHX0hBVkVfQVRPTUlDX1JFQURfTUVNQkFSUklFUl9VNjQp ICYmIGRlZmluZWQoUEdfSEFWRV9BVE9NSUNfRkVUQ0hfQUREX1U2NCkKLSNkZWZpbmUgUEdfSEFW RV9BVE9NSUNfUkVBRF9NRU1CQVJSSUVSX1U2NAotc3RhdGljIGlubGluZSB1aW50NjQKLXBnX2F0 b21pY19yZWFkX21lbWJhcnJpZXJfdTY0X2ltcGwodm9sYXRpbGUgcGdfYXRvbWljX3VpbnQ2NCAq cHRyKQotewotCXJldHVybiBwZ19hdG9taWNfZmV0Y2hfYWRkX3U2NF9pbXBsKHB0ciwgMCk7Ci19 Ci0jZW5kaWYKLQotI2lmICFkZWZpbmVkKFBHX0hBVkVfQVRPTUlDX1dSSVRFX01FTUJBUlJJRVJf VTY0KSAmJiBkZWZpbmVkKFBHX0hBVkVfQVRPTUlDX0VYQ0hBTkdFX1U2NCkKLSNkZWZpbmUgUEdf SEFWRV9BVE9NSUNfV1JJVEVfTUVNQkFSUklFUl9VNjQKLXN0YXRpYyBpbmxpbmUgdm9pZAotcGdf YXRvbWljX3dyaXRlX21lbWJhcnJpZXJfdTY0X2ltcGwodm9sYXRpbGUgcGdfYXRvbWljX3VpbnQ2 NCAqcHRyLCB1aW50NjQgdmFsKQotewotCSh2b2lkKSBwZ19hdG9taWNfZXhjaGFuZ2VfdTY0X2lt cGwocHRyLCB2YWwpOwotfQotI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQv dHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4IDQz MjUwOTI3N2M5Li4zMTUwMTRjOTZhZCAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5 cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTM4 NjEsNiArMzg2MSw4IEBAIHBlbmRpbmdQb3NpdGlvbgogcGVuZGluZ19sYWJlbAogcGdQYXJhbWV0 ZXJTdGF0dXMKIHBnX2F0b21pY19mbGFnCitwZ19hdG9taWNfdWludDgKK3BnX2F0b21pY191aW50 MTYKIHBnX2F0b21pY191aW50MzIKIHBnX2F0b21pY191aW50NjQKIHBnX2JlX3Nhc2xfbWVjaAot LSAKMi41MC4xIChBcHBsZSBHaXQtMTU1KQoK --000000000000cd4aa006433d5c9a Content-Type: application/octet-stream; name="v1-0003-Use-atomics-API-to-implement-spinlocks.patch" Content-Disposition: attachment; filename="v1-0003-Use-atomics-API-to-implement-spinlocks.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mht4l5bx2 RnJvbSBhMDgzNjgxNWE4Y2YxNzcwMjViZmEwZDIyMGZiMTUwY2M1NWEzYjlmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUaG9tYXMgTXVucm8gPHRob21hcy5tdW5yb0BnbWFpbC5jb20+ CkRhdGU6IFdlZCwgMzEgSnVsIDIwMjQgMTM6MTE6MzUgKzEyMDAKU3ViamVjdDogW1BBVENIIHYx IDMvNF0gVXNlIGF0b21pY3MgQVBJIHRvIGltcGxlbWVudCBzcGlubG9ja3MuCgpTaW5jZSBvdXIg c3BpbmxvY2sgQVBJIHByZS1kYXRlcyBvdXIgQzExLWluc3BpcmVkIGF0b21pY3MgQVBJIGJ5CmRl Y2FkZXMsIGl0IGhhZCBpdHMgb3duIGhhbmQtY3JhZnRlZCBvcGVyYXRpb25zIHdyaXR0ZW4gaW4g YXNzZW1ibGVyLgoKVXNlIHRoZSBtb2Rlcm4gYXRvbWljcyBBUEkgaW5zdGVhZCwgdG8gc2ltcGxp ZnkgYW5kIGRlLWR1cGxpY2F0ZS4gIFdlCmNvdWxkbid0IGhhdmUgZG9uZSB0aGlzIHVudGlsIGZh aXJseSByZWNlbnRseSwgYmVjYXVzZSB0aGF0IHdvdWxkIGhhdmUKYmVlbiBiZSBjaXJjdWxhcjog YXRvbWljcyB3ZXJlIHNpbXVsYXRlZCB3aXRoIHNwaW5sb2NrcyBpbgotLWRpc2FibGUtYXRvbWlj cyBidWlsZHMuICBDb21taXQgODEzODUyNjEgcmVtb3ZlZCB0aGF0IG9wdGlvbiwgc28gbm93Cndl IGNhbiBkZWxldGUgbW9zdCBvZiB0aGUgc3lzdGVtLXNwZWNpZmljIHNwaW5sb2NrIGNvZGUgYW5k IHVzZQpwZ19hdG9taWNfZmxhZy4KClRoZSByZW1haW5pbmcgYXJjaGl0ZWN0dXJlLXNwZWNpZmlj IGtub3dsZWRnZSBpcyBtb3ZlZCBpbnRvCnNyYy9pbmNsdWRlL3BvcnQvc3Bpbl9kZWxheS5oOgoK KiBpbXBsZW1lbnRhdGlvbiBvZiBwZ19zcGluX2RlbGF5KCkKKiB3aGV0aGVyIGl0IGlzIGJlbGll dmVkIHRvIGJlIGEgZ29vZCBpZGVhIHRvIHBlcmZvcm0gYSByZWxheGVkIGxvYWQKICBiZWZvcmUg YXR0ZW1wdGluZyB0ZXN0LWFuZC1zZXQgd2hpbGUgc3Bpbm5pbmcgKGNhcnJpZWQgZm9yd2FyZCBm cm9tCiAgdGhlIG9sZCBoYW5kLWNyYWZ0ZWQgY29kZSkKCldJUCEKLS0tCiBzcmMvYmFja2VuZC9w b3J0L21lc29uLmJ1aWxkICAgICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL3BvcnQvdGFzL2R1bW15 LnMgICAgICB8ICAgMAogc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3NfbG9jay5jIHwgMTI4ICst LS0tLQogc3JjL2luY2x1ZGUvcG9ydC9zcGluX2RlbGF5LmggICAgIHwgIDkxICsrKysKIHNyYy9p bmNsdWRlL3N0b3JhZ2Uvc19sb2NrLmggICAgICB8IDczNyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KIHNyYy9pbmNsdWRlL3N0b3JhZ2Uvc3Bpbi5oICAgICAgICB8ICA3MCArKy0KIHNy Yy90ZW1wbGF0ZS9zb2xhcmlzICAgICAgICAgICAgICB8ICAgNCAtCiBzcmMvdGVzdC9yZWdyZXNz L3JlZ3Jlc3MuYyAgICAgICAgfCAgMjUgKy0KIDggZmlsZXMgY2hhbmdlZCwgMTc2IGluc2VydGlv bnMoKyksIDg4MSBkZWxldGlvbnMoLSkKIGRlbGV0ZSBtb2RlIDEwMDY0NCBzcmMvYmFja2VuZC9w b3J0L3Rhcy9kdW1teS5zCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2luY2x1ZGUvcG9ydC9zcGlu X2RlbGF5LmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBzcmMvaW5jbHVkZS9zdG9yYWdlL3NfbG9jay5o CiBkZWxldGUgbW9kZSAxMDA2NDQgc3JjL3RlbXBsYXRlL3NvbGFyaXMKCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9wb3J0L21lc29uLmJ1aWxkIGIvc3JjL2JhY2tlbmQvcG9ydC9tZXNvbi5idWls ZAppbmRleCAwOWQ1NGUwMWQxMy4uNDU0MzhmY2VjMTcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L3BvcnQvbWVzb24uYnVpbGQKKysrIGIvc3JjL2JhY2tlbmQvcG9ydC9tZXNvbi5idWlsZApAQCAt MzAsNCArMzAsNCBAQCBpZiBob3N0X3N5c3RlbSA9PSAnd2luZG93cycKIGVuZGlmCiAKICMgYXV0 b2NvbmYgZ2VuZXJhdGVzIHRoZSBmaWxlIHRoZXJlLCBlbnN1cmUgd2UgZ2V0IGEgY29uZmxpY3QK LWdlbmVyYXRlZF9zb3VyY2VzX2FjICs9IHsnc3JjL2JhY2tlbmQvcG9ydCc6IFsncGdfc2VtYS5j JywgJ3BnX3NobWVtLmMnLCAndGFzLnMnXX0KK2dlbmVyYXRlZF9zb3VyY2VzX2FjICs9IHsnc3Jj L2JhY2tlbmQvcG9ydCc6IFsncGdfc2VtYS5jJywgJ3BnX3NobWVtLmMnXX0KZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL3BvcnQvdGFzL2R1bW15LnMgYi9zcmMvYmFja2VuZC9wb3J0L3Rhcy9kdW1t eS5zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5YmIyZC4uMDAwMDAwMDAw MDAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9zX2xvY2suYyBiL3NyYy9i YWNrZW5kL3N0b3JhZ2UvbG1nci9zX2xvY2suYwppbmRleCBkMjZlMTkyZjRiYy4uYTJmYzEyOWM2 ODggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9zX2xvY2suYworKysgYi9z cmMvYmFja2VuZC9zdG9yYWdlL2xtZ3Ivc19sb2NrLmMKQEAgLTUxLDcgKzUxLDkgQEAKICNpbmNs dWRlIDx1bmlzdGQuaD4KIAogI2luY2x1ZGUgImNvbW1vbi9wZ19wcm5nLmgiCi0jaW5jbHVkZSAi c3RvcmFnZS9zX2xvY2suaCIKKyNpbmNsdWRlICJwb3J0L2F0b21pY3MuaCIKKyNpbmNsdWRlICJw b3J0L3NwaW5fZGVsYXkuaCIKKyNpbmNsdWRlICJzdG9yYWdlL3NwaW4uaCIKICNpbmNsdWRlICJ1 dGlscy93YWl0X2V2ZW50LmgiCiAKICNkZWZpbmUgTUlOX1NQSU5TX1BFUl9ERUxBWSAxMApAQCAt OTIsNyArOTQsNyBAQCBzX2xvY2tfc3R1Y2soY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNv bnN0IGNoYXIgKmZ1bmMpCiB9CiAKIC8qCi0gKiBzX2xvY2sobG9jaykgLSBwbGF0Zm9ybS1pbmRl cGVuZGVudCBwb3J0aW9uIG9mIHdhaXRpbmcgZm9yIGEgc3BpbmxvY2suCisgKiBzX2xvY2sobG9j aykgLSBvdXQtb2YtbGluZSBwb3J0aW9uIG9mIHdhaXRpbmcgZm9yIGEgc3BpbmxvY2suCiAgKi8K IGludAogc19sb2NrKHZvbGF0aWxlIHNsb2NrX3QgKmxvY2ssIGNvbnN0IGNoYXIgKmZpbGUsIGlu dCBsaW5lLCBjb25zdCBjaGFyICpmdW5jKQpAQCAtMTAxLDggKzEwMywyNSBAQCBzX2xvY2sodm9s YXRpbGUgc2xvY2tfdCAqbG9jaywgY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNo YXIgKmZ1bmMpCiAKIAlpbml0X3NwaW5fZGVsYXkoJmRlbGF5U3RhdHVzLCBmaWxlLCBsaW5lLCBm dW5jKTsKIAotCXdoaWxlIChUQVNfU1BJTihsb2NrKSkKKwlmb3IgKDs7KQogCXsKKwkJYm9vbAkJ dHJ5X3RvX3NldDsKKworI2lmZGVmIFBHX1NQSU5fVFJZX1JFTEFYRUQKKworCQkvKgorCQkgKiBJ dCBpcyBrbm93biB0byBiZSBtb3JlIGVmZmljaWVudCB0byB0ZXN0IHRoZSBsb2NrIHdpdGggYSBy ZWxheGVkCisJCSAqIGxvYWQgZmlyc3QsIHdoaWxlIHNwaW5uaW5nLCBvbiB0aGlzIHBsYXRmb3Jt LgorCQkgKi8KKwkJdHJ5X3RvX3NldCA9IHBnX2F0b21pY191bmxvY2tlZF90ZXN0X2ZsYWcobG9j ayk7CisjZWxzZQorCQl0cnlfdG9fc2V0ID0gdHJ1ZTsKKyNlbmRpZgorCisJCS8qIFRyeSB0byBn ZXQgdGhlIGxvY2suICovCisJCWlmICh0cnlfdG9fc2V0ICYmIHBnX2F0b21pY190ZXN0X3NldF9m bGFnKGxvY2spKQorCQkJYnJlYWs7CisKIAkJcGVyZm9ybV9zcGluX2RlbGF5KCZkZWxheVN0YXR1 cyk7CiAJfQogCkBAIC0xMTEsMTQgKzEzMCw2IEBAIHNfbG9jayh2b2xhdGlsZSBzbG9ja190ICps b2NrLCBjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqZnVuYykKIAlyZXR1 cm4gZGVsYXlTdGF0dXMuZGVsYXlzOwogfQogCi0jaWZkZWYgVVNFX0RFRkFVTFRfU19VTkxPQ0sK LXZvaWQKLXNfdW5sb2NrKHZvbGF0aWxlIHNsb2NrX3QgKmxvY2spCi17Ci0JKmxvY2sgPSAwOwot fQotI2VuZGlmCi0KIC8qCiAgKiBXYWl0IHdoaWxlIHNwaW5uaW5nIG9uIGEgY29udGVuZGVkIHNw aW5sb2NrLgogICovCkBAIC0xMjYsNyArMTM3LDcgQEAgdm9pZAogcGVyZm9ybV9zcGluX2RlbGF5 KFNwaW5EZWxheVN0YXR1cyAqc3RhdHVzKQogewogCS8qIENQVS1zcGVjaWZpYyBkZWxheSBlYWNo IHRpbWUgdGhyb3VnaCB0aGUgbG9vcCAqLwotCVNQSU5fREVMQVkoKTsKKwlwZ19zcGluX2RlbGF5 KCk7CiAKIAkvKiBCbG9jayB0aGUgcHJvY2VzcyBldmVyeSBzcGluc19wZXJfZGVsYXkgdHJpZXMg Ki8KIAlpZiAoKysoc3RhdHVzLT5zcGlucykgPj0gc3BpbnNfcGVyX2RlbGF5KQpAQCAtMjI5LDk2 ICsyNDAsMyBAQCB1cGRhdGVfc3BpbnNfcGVyX2RlbGF5KGludCBzaGFyZWRfc3BpbnNfcGVyX2Rl bGF5KQogCSAqLwogCXJldHVybiAoc2hhcmVkX3NwaW5zX3Blcl9kZWxheSAqIDE1ICsgc3BpbnNf cGVyX2RlbGF5KSAvIDE2OwogfQotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNpZiBkZWZp bmVkKFNfTE9DS19URVNUKQotCi0vKgotICogdGVzdCBwcm9ncmFtIGZvciB2ZXJpZnlpbmcgYSBw b3J0J3Mgc3BpbmxvY2sgc3VwcG9ydC4KLSAqLwotCi1zdHJ1Y3QgdGVzdF9sb2NrX3N0cnVjdAot ewotCWNoYXIJCXBhZDE7Ci0Jc2xvY2tfdAkJbG9jazsKLQljaGFyCQlwYWQyOwotfTsKLQotdm9s YXRpbGUgc3RydWN0IHRlc3RfbG9ja19zdHJ1Y3QgdGVzdF9sb2NrOwotCi1pbnQKLW1haW4oKQot ewotCXBnX3Bybmdfc2VlZCgmcGdfZ2xvYmFsX3Bybmdfc3RhdGUsICh1aW50NjQpIHRpbWUoTlVM TCkpOwotCi0JdGVzdF9sb2NrLnBhZDEgPSB0ZXN0X2xvY2sucGFkMiA9IDB4NDQ7Ci0KLQlTX0lO SVRfTE9DSygmdGVzdF9sb2NrLmxvY2spOwotCi0JaWYgKHRlc3RfbG9jay5wYWQxICE9IDB4NDQg fHwgdGVzdF9sb2NrLnBhZDIgIT0gMHg0NCkKLQl7Ci0JCXByaW50ZigiU19MT0NLX1RFU1Q6IGZh aWxlZCwgZGVjbGFyZWQgZGF0YXR5cGUgaXMgd3Jvbmcgc2l6ZVxuIik7Ci0JCXJldHVybiAxOwot CX0KLQotCWlmICghU19MT0NLX0ZSRUUoJnRlc3RfbG9jay5sb2NrKSkKLQl7Ci0JCXByaW50Zigi U19MT0NLX1RFU1Q6IGZhaWxlZCwgbG9jayBub3QgaW5pdGlhbGl6ZWRcbiIpOwotCQlyZXR1cm4g MTsKLQl9Ci0KLQlTX0xPQ0soJnRlc3RfbG9jay5sb2NrKTsKLQotCWlmICh0ZXN0X2xvY2sucGFk MSAhPSAweDQ0IHx8IHRlc3RfbG9jay5wYWQyICE9IDB4NDQpCi0JewotCQlwcmludGYoIlNfTE9D S19URVNUOiBmYWlsZWQsIGRlY2xhcmVkIGRhdGF0eXBlIGlzIHdyb25nIHNpemVcbiIpOwotCQly ZXR1cm4gMTsKLQl9Ci0KLQlpZiAoU19MT0NLX0ZSRUUoJnRlc3RfbG9jay5sb2NrKSkKLQl7Ci0J CXByaW50ZigiU19MT0NLX1RFU1Q6IGZhaWxlZCwgbG9jayBub3QgbG9ja2VkXG4iKTsKLQkJcmV0 dXJuIDE7Ci0JfQotCi0JU19VTkxPQ0soJnRlc3RfbG9jay5sb2NrKTsKLQotCWlmICh0ZXN0X2xv Y2sucGFkMSAhPSAweDQ0IHx8IHRlc3RfbG9jay5wYWQyICE9IDB4NDQpCi0JewotCQlwcmludGYo IlNfTE9DS19URVNUOiBmYWlsZWQsIGRlY2xhcmVkIGRhdGF0eXBlIGlzIHdyb25nIHNpemVcbiIp OwotCQlyZXR1cm4gMTsKLQl9Ci0KLQlpZiAoIVNfTE9DS19GUkVFKCZ0ZXN0X2xvY2subG9jaykp Ci0JewotCQlwcmludGYoIlNfTE9DS19URVNUOiBmYWlsZWQsIGxvY2sgbm90IHVubG9ja2VkXG4i KTsKLQkJcmV0dXJuIDE7Ci0JfQotCi0JU19MT0NLKCZ0ZXN0X2xvY2subG9jayk7Ci0KLQlpZiAo dGVzdF9sb2NrLnBhZDEgIT0gMHg0NCB8fCB0ZXN0X2xvY2sucGFkMiAhPSAweDQ0KQotCXsKLQkJ cHJpbnRmKCJTX0xPQ0tfVEVTVDogZmFpbGVkLCBkZWNsYXJlZCBkYXRhdHlwZSBpcyB3cm9uZyBz aXplXG4iKTsKLQkJcmV0dXJuIDE7Ci0JfQotCi0JaWYgKFNfTE9DS19GUkVFKCZ0ZXN0X2xvY2su bG9jaykpCi0JewotCQlwcmludGYoIlNfTE9DS19URVNUOiBmYWlsZWQsIGxvY2sgbm90IHJlLWxv Y2tlZFxuIik7Ci0JCXJldHVybiAxOwotCX0KLQotCXByaW50ZigiU19MT0NLX1RFU1Q6IHRoaXMg d2lsbCBwcmludCAlZCBzdGFycyBhbmQgdGhlblxuIiwgTlVNX0RFTEFZUyk7Ci0JcHJpbnRmKCIg ICAgICAgICAgICAgZXhpdCB3aXRoIGEgJ3N0dWNrIHNwaW5sb2NrJyBtZXNzYWdlXG4iKTsKLQlw cmludGYoIiAgICAgICAgICAgICBpZiBTX0xPQ0soKSBhbmQgVEFTKCkgYXJlIHdvcmtpbmcuXG4i KTsKLQlmZmx1c2goc3Rkb3V0KTsKLQotCXNfbG9jaygmdGVzdF9sb2NrLmxvY2ssIF9fRklMRV9f LCBfX0xJTkVfXywgX19mdW5jX18pOwotCi0JcHJpbnRmKCJTX0xPQ0tfVEVTVDogZmFpbGVkLCBs b2NrIG5vdCBsb2NrZWRcbiIpOwotCXJldHVybiAxOwotfQotCi0jZW5kaWYJCQkJCQkJLyogU19M T0NLX1RFU1QgKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3BvcnQvc3Bpbl9kZWxheS5oIGIv c3JjL2luY2x1ZGUvcG9ydC9zcGluX2RlbGF5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMDAuLmM1ODM2OThhZjhlCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2luY2x1ZGUv cG9ydC9zcGluX2RlbGF5LmgKQEAgLTAsMCArMSw5MSBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg KgorICogc3Bpbl9kZWxheS5oCisgKgkgICBJbXBsZW1lbnRhdGlvbiBvZiBhcmNoaXRlY3R1cmUt c3BlY2lmaWMgc3BpbmxvY2sgZGVsYXkuCisgKgorICogTm90ZSB0byBpbXBsZW1lbnRvcnM6IHRo ZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGRvZXMgbm90aGluZy4KKyAqCisgKiBQb3J0aW9ucyBD b3B5cmlnaHQgKGMpIDE5OTYtMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3Jv dXAKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVy c2l0eSBvZiBDYWxpZm9ybmlhCisgKgorICoJICBzcmMvaW5jbHVkZS9wb3J0L3NwaW5fZGVsYXku aAorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaWZuZGVmIFNQSU5fREVMQVlfSAorI2Rl ZmluZSBTUElOX0RFTEFZX0gKKworc3RhdGljIHBnX2F0dHJpYnV0ZV9hbHdheXNfaW5saW5lIHZv aWQKK3BnX3NwaW5fZGVsYXkodm9pZCkKK3sKKyNpZiBkZWZpbmVkKF9fR05VQ19fKSB8fCBkZWZp bmVkKF9fSU5URUxfQ09NUElMRVIpCisjaWZkZWYgX19pMzg2X18JCQkJCS8qIDMyLWJpdCBpMzg2 ICovCisJLyoKKwkgKiBUaGlzIHNlcXVlbmNlIGlzIGVxdWl2YWxlbnQgdG8gdGhlIFBBVVNFIGlu c3RydWN0aW9uICgicmVwIiBpcyBpZ25vcmVkCisJICogYnkgb2xkIElBMzIgcHJvY2Vzc29ycyBp ZiB0aGUgZm9sbG93aW5nIGluc3RydWN0aW9uIGlzIG5vdCBhIHN0cmluZworCSAqIG9wZXJhdGlv bik7IHRoZSBJQS0zMiBBcmNoaXRlY3R1cmUgU29mdHdhcmUgRGV2ZWxvcGVyJ3MgTWFudWFsLCBW b2wuIDMsCisJICogU2VjdGlvbiA3LjcuMiBkZXNjcmliZXMgd2h5IHVzaW5nIFBBVVNFIGluIHRo ZSBpbm5lciBsb29wIG9mIGEgc3BpbgorCSAqIGxvY2sgaXMgbmVjZXNzYXJ5IGZvciBnb29kIHBl cmZvcm1hbmNlOgorCSAqCisJICogVGhlIFBBVVNFIGluc3RydWN0aW9uIGltcHJvdmVzIHRoZSBw ZXJmb3JtYW5jZSBvZiBJQS0zMiBwcm9jZXNzb3JzCisJICogc3VwcG9ydGluZyBIeXBlci1UaHJl YWRpbmcgVGVjaG5vbG9neSB3aGVuIGV4ZWN1dGluZyBzcGluLXdhaXQgbG9vcHMKKwkgKiBhbmQg b3RoZXIgcm91dGluZXMgd2hlcmUgb25lIHRocmVhZCBpcyBhY2Nlc3NpbmcgYSBzaGFyZWQgbG9j ayBvcgorCSAqIHNlbWFwaG9yZSBpbiBhIHRpZ2h0IHBvbGxpbmcgbG9vcC4gV2hlbiBleGVjdXRp bmcgYSBzcGluLXdhaXQgbG9vcCwgdGhlCisJICogcHJvY2Vzc29yIGNhbiBzdWZmZXIgYSBzZXZl cmUgcGVyZm9ybWFuY2UgcGVuYWx0eSB3aGVuIGV4aXRpbmcgdGhlIGxvb3AKKwkgKiBiZWNhdXNl IGl0IGRldGVjdHMgYSBwb3NzaWJsZSBtZW1vcnkgb3JkZXIgdmlvbGF0aW9uIGFuZCBmbHVzaGVz IHRoZQorCSAqIGNvcmUgcHJvY2Vzc29yJ3MgcGlwZWxpbmUuIFRoZSBQQVVTRSBpbnN0cnVjdGlv biBwcm92aWRlcyBhIGhpbnQgdG8gdGhlCisJICogcHJvY2Vzc29yIHRoYXQgdGhlIGNvZGUgc2Vx dWVuY2UgaXMgYSBzcGluLXdhaXQgbG9vcC4gVGhlIHByb2Nlc3NvcgorCSAqIHVzZXMgdGhpcyBo aW50IHRvIGF2b2lkIHRoZSBtZW1vcnkgb3JkZXIgdmlvbGF0aW9uIGFuZCBwcmV2ZW50IHRoZQor CSAqIHBpcGVsaW5lIGZsdXNoLiBJbiBhZGRpdGlvbiwgdGhlIFBBVVNFIGluc3RydWN0aW9uIGRl LXBpcGVsaW5lcyB0aGUKKwkgKiBzcGluLXdhaXQgbG9vcCB0byBwcmV2ZW50IGl0IGZyb20gY29u c3VtaW5nIGV4ZWN1dGlvbiByZXNvdXJjZXMKKwkgKiBleGNlc3NpdmVseS4KKwkgKi8KKwlfX2Fz bV9fIF9fdm9sYXRpbGVfXygKKwkJCQkJCSAiIHJlcDsgbm9wCQkJXG4iKTsKKyNlbmRpZgkJCQkJ CQkvKiBfX2kzODZfXyAqLworI2lmZGVmIF9feDg2XzY0X18JCQkJLyogQU1EIE9wdGVyb24sIElu dGVsIEVNNjRUICovCisKKwkvKgorCSAqIEFkZGluZyBhIFBBVVNFIGluIHRoZSBzcGluIGRlbGF5 IGxvb3AgaXMgZGVtb25zdHJhYmx5IGEgbm8tb3Agb24KKwkgKiBPcHRlcm9uLCBidXQgaXQgbWF5 IGJlIG9mIHNvbWUgdXNlIG9uIEVNNjRULCBzbyB3ZSBrZWVwIGl0LgorCSAqLworCV9fYXNtX18g X192b2xhdGlsZV9fKAorCQkJCQkJICIgcmVwOyBub3AJCQlcbiIpOworI2VuZGlmCQkJCQkJCS8q IF9feDg2XzY0X18gKi8KKyNpZiBkZWZpbmVkKF9fYWFyY2g2NF9fKQorCisJLyoKKwkgKiBVc2lu ZyBhbiBJU0IgaW5zdHJ1Y3Rpb24gdG8gZGVsYXkgaW4gc3BpbmxvY2sgbG9vcHMgYXBwZWFycyBi ZW5lZmljaWFsCisJICogb24gaGlnaC1jb3JlLWNvdW50IEFSTTY0IHByb2Nlc3NvcnMuICBJdCBz ZWVtcyBtb3N0bHkgYSB3YXNoIGZvcgorCSAqIHNtYWxsZXIgZ2VhciwgYW5kIElTQiBkb2Vzbid0 IGV4aXN0IGF0IGFsbCBvbiBwcmUtdjcgQVJNIGNoaXBzLgorCSAqLworCV9fYXNtX18gX192b2xh dGlsZV9fKAorCQkJCQkJICIgaXNiOwkJCQlcbiIpOworI2VuZGlmCQkJCQkJCS8qIF9fYWFyY2g2 NF9fICovCisjZW5kaWYJCQkJCQkJLyogZGVmaW5lZChfX0dOVUNfXykgfHwKKwkJCQkJCQkJICog ZGVmaW5lZChfX0lOVEVMX0NPTVBJTEVSKSAqLworCisjaWZkZWYgX01TQ19WRVIKKworCS8qCisJ ICogSWYgdXNpbmcgVmlzdWFsIEMrKyBvbiBXaW42NCwgaW5saW5lIGFzc2VtYmx5IGlzIHVuYXZh aWxhYmxlLiAgVXNlIGEKKwkgKiBfbW1fcGF1c2UgaW50cmluc2ljIGluc3RlYWQgb2YgcmVwIG5v cC4KKwkgKi8KKyNpZiBkZWZpbmVkKF9XSU42NCkKKwlfbW1fcGF1c2UoKTsKKyNlbHNlCisJLyog U2VlIGNvbW1lbnQgZm9yIGdjYyBjb2RlLiBTYW1lIGNvZGUsIE1BU00gc3ludGF4ICovCisJX19h c20JCXJlcCBub3A7CisjZW5kaWYKKyNlbmRpZgkJCQkJCQkvKiBfTVNDX1ZFUiAqLworfQorCisv KiBBcmNoaXRlY3R1cmVzIG9uIHdoaWNoIGEgcmVsYXhlZCBsb2FkIGlzIHJlY29tbWVuZGVkIHdo aWxlIHNwaW5uaW5nLiAqLworI2lmIGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZf NjRfXykgfHwgXAorCWRlZmluZWQoX01fSVg4NikgfHwgZGVmaW5lZChfTV9BTUQ2NCkgfHwgXAor CWRlZmluZWQoX19wcGNfXykgfHwgZGVmaW5lZChfX3Bvd2VycGNfXykgfHwgXAorCWRlZmluZWQo X19wcGM2NF9fKSB8fCBkZWZpbmVkKF9fcG93ZXJwYzY0X18pCisjZGVmaW5lIFBHX1NQSU5fVFJZ X1JFTEFYRUQKKyNlbmRpZgorCisjZW5kaWYJCQkJCQkJLyogU1BJTl9ERUxBWV9IICovCmRpZmYg LS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL3NfbG9jay5oIGIvc3JjL2luY2x1ZGUvc3RvcmFn ZS9zX2xvY2suaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2Y4ZjU2NmJkNDAuLjAw MDAwMDAwMDAwCi0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2Uvc19sb2NrLmgKKysrIC9kZXYvbnVs bApAQCAtMSw3MzcgKzAsMCBAQAotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKgotICogc19sb2NrLmgK LSAqCSAgIEltcGxlbWVudGF0aW9uIG9mIHNwaW5sb2Nrcy4KLSAqCi0gKglOT1RFOiBub25lIG9m IHRoZSBtYWNyb3MgaW4gdGhpcyBmaWxlIGFyZSBpbnRlbmRlZCB0byBiZSBjYWxsZWQgZGlyZWN0 bHkuCi0gKglDYWxsIHRoZW0gdGhyb3VnaCB0aGUgbWFjcm9zIGluIHNwaW4uaC4KLSAqCi0gKglU aGUgZm9sbG93aW5nIGhhcmR3YXJlLWRlcGVuZGVudCBtYWNyb3MgbXVzdCBiZSBwcm92aWRlZCBm b3IgZWFjaAotICoJc3VwcG9ydGVkIHBsYXRmb3JtOgotICoKLSAqCXZvaWQgU19JTklUX0xPQ0so c2xvY2tfdCAqbG9jaykKLSAqCQlJbml0aWFsaXplIGEgc3BpbmxvY2sgKHRvIHRoZSB1bmxvY2tl ZCBzdGF0ZSkuCi0gKgotICoJaW50IFNfTE9DSyhzbG9ja190ICpsb2NrKQotICoJCUFjcXVpcmUg YSBzcGlubG9jaywgd2FpdGluZyBpZiBuZWNlc3NhcnkuCi0gKgkJVGltZSBvdXQgYW5kIGFib3J0 KCkgaWYgdW5hYmxlIHRvIGFjcXVpcmUgdGhlIGxvY2sgaW4gYQotICoJCSJyZWFzb25hYmxlIiBh bW91bnQgb2YgdGltZSAtLS0gdHlwaWNhbGx5IH4gMSBtaW51dGUuCi0gKgkJU2hvdWxkIHJldHVy biBudW1iZXIgb2YgImRlbGF5cyI7IHNlZSBzX2xvY2suYwotICoKLSAqCXZvaWQgU19VTkxPQ0so c2xvY2tfdCAqbG9jaykKLSAqCQlVbmxvY2sgYSBwcmV2aW91c2x5IGFjcXVpcmVkIGxvY2suCi0g KgotICoJYm9vbCBTX0xPQ0tfRlJFRShzbG9ja190ICpsb2NrKQotICoJCVRlc3RzIGlmIHRoZSBs b2NrIGlzIGZyZWUuIFJldHVybnMgdHJ1ZSBpZiBmcmVlLCBmYWxzZSBpZiBsb2NrZWQuCi0gKgkJ VGhpcyBkb2VzICpub3QqIGNoYW5nZSB0aGUgc3RhdGUgb2YgdGhlIGxvY2suCi0gKgotICoJdm9p ZCBTUElOX0RFTEFZKHZvaWQpCi0gKgkJRGVsYXkgb3BlcmF0aW9uIHRvIG9jY3VyIGluc2lkZSBz cGlubG9jayB3YWl0IGxvb3AuCi0gKgotICoJTm90ZSB0byBpbXBsZW1lbnRvcnM6IHRoZXJlIGFy ZSBkZWZhdWx0IGltcGxlbWVudGF0aW9ucyBmb3IgYWxsIHRoZXNlCi0gKgltYWNyb3MgYXQgdGhl IGJvdHRvbSBvZiB0aGUgZmlsZS4gIENoZWNrIGlmIHlvdXIgcGxhdGZvcm0gY2FuIHVzZQotICoJ dGhlc2Ugb3IgbmVlZHMgdG8gb3ZlcnJpZGUgdGhlbS4KLSAqCi0gKiAgVXN1YWxseSwgU19MT0NL KCkgaXMgaW1wbGVtZW50ZWQgaW4gdGVybXMgb2YgZXZlbiBsb3dlci1sZXZlbCBtYWNyb3MKLSAq CVRBUygpIGFuZCBUQVNfU1BJTigpOgotICoKLSAqCWludCBUQVMoc2xvY2tfdCAqbG9jaykKLSAq CQlBdG9taWMgdGVzdC1hbmQtc2V0IGluc3RydWN0aW9uLiAgQXR0ZW1wdCB0byBhY3F1aXJlIHRo ZSBsb2NrLAotICoJCWJ1dCBkbyAqbm90KiB3YWl0LglSZXR1cm5zIDAgaWYgc3VjY2Vzc2Z1bCwg bm9uemVybyBpZiB1bmFibGUKLSAqCQl0byBhY3F1aXJlIHRoZSBsb2NrLgotICoKLSAqCWludCBU QVNfU1BJTihzbG9ja190ICpsb2NrKQotICoJCUxpa2UgVEFTKCksIGJ1dCB0aGlzIHZlcnNpb24g aXMgdXNlZCB3aGVuIHdhaXRpbmcgZm9yIGEgbG9jawotICoJCXByZXZpb3VzbHkgZm91bmQgdG8g YmUgY29udGVuZGVkLiAgQnkgZGVmYXVsdCwgdGhpcyBpcyB0aGUKLSAqCQlzYW1lIGFzIFRBUygp LCBidXQgb24gc29tZSBhcmNoaXRlY3R1cmVzIGl0J3MgYmV0dGVyIHRvIHBvbGwgYQotICoJCWNv bnRlbmRlZCBsb2NrIHVzaW5nIGFuIHVubG9ja2VkIGluc3RydWN0aW9uIGFuZCByZXRyeSB0aGUK LSAqCQlhdG9taWMgdGVzdC1hbmQtc2V0IG9ubHkgd2hlbiBpdCBhcHBlYXJzIGZyZWUuCi0gKgot ICoJVEFTKCkgYW5kIFRBU19TUElOKCkgYXJlIE5PVCBwYXJ0IG9mIHRoZSBBUEksIGFuZCBzaG91 bGQgbmV2ZXIgYmUgY2FsbGVkCi0gKglkaXJlY3RseS4KLSAqCi0gKglDQVVUSU9OOiBvbiBzb21l IHBsYXRmb3JtcyBUQVMoKSBhbmQvb3IgVEFTX1NQSU4oKSBtYXkgc29tZXRpbWVzIHJlcG9ydAot ICoJZmFpbHVyZSB0byBhY3F1aXJlIGEgbG9jayBldmVuIHdoZW4gdGhlIGxvY2sgaXMgbm90IGxv Y2tlZC4gIEZvciBleGFtcGxlLAotICoJb24gQWxwaGEgVEFTKCkgd2lsbCAiZmFpbCIgaWYgaW50 ZXJydXB0ZWQuICBUaGVyZWZvcmUgYSByZXRyeSBsb29wIG11c3QKLSAqCWFsd2F5cyBiZSB1c2Vk LCBldmVuIGlmIHlvdSBhcmUgY2VydGFpbiB0aGUgbG9jayBpcyBmcmVlLgotICoKLSAqCUl0IGlz IHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGVzZSBtYWNyb3MgdG8gbWFrZSBzdXJlIHRoYXQgdGhl IGNvbXBpbGVyCi0gKglkb2VzIG5vdCByZS1vcmRlciBhY2Nlc3NlcyB0byBzaGFyZWQgbWVtb3J5 IHRvIHByZWNlZGUgdGhlIGFjdHVhbCBsb2NrCi0gKglhY3F1aXNpdGlvbiwgb3IgZm9sbG93IHRo ZSBsb2NrIHJlbGVhc2UuICBQcmlvciB0byBQb3N0Z3JlU1FMIDkuNSwgdGhpcwotICoJd2FzIHRo ZSBjYWxsZXIncyByZXNwb25zaWJpbGl0eSwgd2hpY2ggbWVhbnQgdGhhdCBjYWxsZXJzIGhhZCB0 byB1c2UKLSAqCXZvbGF0aWxlLXF1YWxpZmllZCBwb2ludGVycyB0byByZWZlciB0byBib3RoIHRo ZSBzcGlubG9jayBpdHNlbGYgYW5kIHRoZQotICoJc2hhcmVkIGRhdGEgYmVpbmcgYWNjZXNzZWQg d2l0aGluIHRoZSBzcGlubG9ja2VkIGNyaXRpY2FsIHNlY3Rpb24uICBUaGlzCi0gKgl3YXMgbm90 YXRpb25hbGx5IGF3a3dhcmQsIGVhc3kgdG8gZm9yZ2V0IChhbmQgdGh1cyBlcnJvci1wcm9uZSks IGFuZAotICoJcHJldmVudGVkIHNvbWUgdXNlZnVsIGNvbXBpbGVyIG9wdGltaXphdGlvbnMuICBG b3IgdGhlc2UgcmVhc29ucywgd2UKLSAqCW5vdyByZXF1aXJlIHRoYXQgdGhlIG1hY3JvcyB0aGVt c2VsdmVzIHByZXZlbnQgY29tcGlsZXIgcmUtb3JkZXJpbmcsCi0gKglzbyB0aGF0IHRoZSBjYWxs ZXIgZG9lc24ndCBuZWVkIHRvIHRha2Ugc3BlY2lhbCBwcmVjYXV0aW9ucy4KLSAqCi0gKglPbiBw bGF0Zm9ybXMgd2l0aCB3ZWFrIG1lbW9yeSBvcmRlcmluZywgdGhlIFRBUygpLCBUQVNfU1BJTigp LCBhbmQKLSAqCVNfVU5MT0NLKCkgbWFjcm9zIG11c3QgZnVydGhlciBpbmNsdWRlIGhhcmR3YXJl LWxldmVsIG1lbW9yeSBmZW5jZQotICoJaW5zdHJ1Y3Rpb25zIHRvIHByZXZlbnQgc2ltaWxhciBy ZS1vcmRlcmluZyBhdCB0aGUgaGFyZHdhcmUgbGV2ZWwuCi0gKglUQVMoKSBhbmQgVEFTX1NQSU4o KSBtdXN0IGd1YXJhbnRlZSB0aGF0IGxvYWRzIGFuZCBzdG9yZXMgaXNzdWVkIGFmdGVyCi0gKgl0 aGUgbWFjcm8gYXJlIG5vdCBleGVjdXRlZCB1bnRpbCB0aGUgbG9jayBoYXMgYmVlbiBvYnRhaW5l ZC4gIENvbnZlcnNlbHksCi0gKglTX1VOTE9DSygpIG11c3QgZ3VhcmFudGVlIHRoYXQgbG9hZHMg YW5kIHN0b3JlcyBpc3N1ZWQgYmVmb3JlIHRoZSBtYWNybwotICoJaGF2ZSBiZWVuIGV4ZWN1dGVk IGJlZm9yZSB0aGUgbG9jayBpcyByZWxlYXNlZC4KLSAqCi0gKglPbiBtb3N0IHN1cHBvcnRlZCBw bGF0Zm9ybXMsIFRBUygpIHVzZXMgYSB0YXMoKSBmdW5jdGlvbiB3cml0dGVuCi0gKglpbiBhc3Nl bWJseSBsYW5ndWFnZSB0byBleGVjdXRlIGEgaGFyZHdhcmUgYXRvbWljLXRlc3QtYW5kLXNldAot ICoJaW5zdHJ1Y3Rpb24uICBFcXVpdmFsZW50IE9TLXN1cHBsaWVkIG11dGV4IHJvdXRpbmVzIGNv dWxkIGJlIHVzZWQgdG9vLgotICoKLSAqCi0gKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYt MjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKLSAqIFBvcnRpb25zIENv cHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlh Ci0gKgotICoJICBzcmMvaW5jbHVkZS9zdG9yYWdlL3NfbG9jay5oCi0gKgotICotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCi0gKi8KLSNpZm5kZWYgU19MT0NLX0gKLSNkZWZpbmUgU19MT0NLX0gKLQotI2lmZGVm IEZST05URU5ECi0jZXJyb3IgInNfbG9jay5oIG1heSBub3QgYmUgaW5jbHVkZWQgZnJvbSBmcm9u dGVuZCBjb2RlIgotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKF9fR05VQ19fKSB8fCBkZWZpbmVkKF9f SU5URUxfQ09NUElMRVIpCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQWxsIHRoZSBnY2MgaW5saW5l cwotICogR2NjIGNvbnNpc3RlbnRseSBkZWZpbmVzIHRoZSBDUFUgYXMgX19jcHVfXy4KLSAqIE90 aGVyIGNvbXBpbGVycyB1c2UgX19jcHUgb3IgX19jcHVfXyBzbyB3ZSB0ZXN0IGZvciBib3RoIGlu IHRob3NlIGNhc2VzLgotICovCi0KLS8qLS0tLS0tLS0tLQotICogU3RhbmRhcmQgZ2NjIGFzbSBm b3JtYXQgKGFzc3VtaW5nICJ2b2xhdGlsZSBzbG9ja190ICpsb2NrIik6Ci0KLQlfX2FzbV9fIF9f dm9sYXRpbGVfXygKLQkJIglpbnN0cnVjdGlvbglcbiIKLQkJIglpbnN0cnVjdGlvbglcbiIKLQkJ IglpbnN0cnVjdGlvbglcbiIKLToJCSI9ciIoX3JlcyksICIrbSIoKmxvY2spCQkvLyByZXR1cm4g cmVnaXN0ZXIsIGluL291dCBsb2NrIHZhbHVlCi06CQkiciIobG9jaykJCQkJCS8vIGxvY2sgcG9p bnRlciwgaW4gaW5wdXQgcmVnaXN0ZXIKLToJCSJtZW1vcnkiLCAiY2MiKTsJCQkvLyBzaG93IGNs b2JiZXJlZCByZWdpc3RlcnMgaGVyZQotCi0gKiBUaGUgb3V0cHV0LW9wZXJhbmRzIGxpc3QgKGFm dGVyIGZpcnN0IGNvbG9uKSBzaG91bGQgYWx3YXlzIGluY2x1ZGUKLSAqICIrbSIoKmxvY2spLCB3 aGV0aGVyIG9yIG5vdCB0aGUgYXNtIGNvZGUgYWN0dWFsbHkgcmVmZXJzIHRvIHRoaXMKLSAqIG9w ZXJhbmQgZGlyZWN0bHkuICBUaGlzIGVuc3VyZXMgdGhhdCBnY2MgYmVsaWV2ZXMgdGhlIHZhbHVl IGluIHRoZQotICogbG9jayB2YXJpYWJsZSBpcyB1c2VkIGFuZCBzZXQgYnkgdGhlIGFzbSBjb2Rl LiAgQWxzbywgdGhlIGNsb2JiZXJzCi0gKiBsaXN0IChhZnRlciB0aGlyZCBjb2xvbikgc2hvdWxk IGFsd2F5cyBpbmNsdWRlICJtZW1vcnkiOyB0aGlzIHByZXZlbnRzCi0gKiBnY2MgZnJvbSB0aGlu a2luZyBpdCBjYW4gY2FjaGUgdGhlIHZhbHVlcyBvZiBzaGFyZWQtbWVtb3J5IGZpZWxkcwotICog YWNyb3NzIHRoZSBhc20gY29kZS4gIEFkZCAiY2MiIGlmIHlvdXIgYXNtIGNvZGUgY2hhbmdlcyB0 aGUgY29uZGl0aW9uCi0gKiBjb2RlIHJlZ2lzdGVyLCBhbmQgYWxzbyBsaXN0IGFueSB0ZW1wIHJl Z2lzdGVycyB0aGUgY29kZSB1c2VzLgotICotLS0tLS0tLS0tCi0gKi8KLQotCi0jaWZkZWYgX19p Mzg2X18JCS8qIDMyLWJpdCBpMzg2ICovCi0jZGVmaW5lIEhBU19URVNUX0FORF9TRVQKLQotdHlw ZWRlZiB1bnNpZ25lZCBjaGFyIHNsb2NrX3Q7Ci0KLSNkZWZpbmUgVEFTKGxvY2spIHRhcyhsb2Nr KQotCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQKLXRhcyh2b2xhdGlsZSBzbG9ja190ICpsb2NrKQot ewotCXNsb2NrX3QJCV9yZXMgPSAxOwotCi0JLyoKLQkgKiBVc2UgYSBub24tbG9ja2luZyB0ZXN0 IGJlZm9yZSBhc3NlcnRpbmcgdGhlIGJ1cyBsb2NrLiAgTm90ZSB0aGF0IHRoZQotCSAqIGV4dHJh IHRlc3QgYXBwZWFycyB0byBiZSBhIHNtYWxsIGxvc3Mgb24gc29tZSB4ODYgcGxhdGZvcm1zIGFu ZCBhIHNtYWxsCi0JICogd2luIG9uIG90aGVyczsgaXQncyBieSBubyBtZWFucyBjbGVhciB0aGF0 IHdlIHNob3VsZCBrZWVwIGl0LgotCSAqCi0JICogV2hlbiB0aGlzIHdhcyBsYXN0IHRlc3RlZCwg d2UgZGlkbid0IGhhdmUgc2VwYXJhdGUgVEFTKCkgYW5kIFRBU19TUElOKCkKLQkgKiBtYWNyb3Mu ICBOb3dhZGF5cyBpdCBwcm9iYWJseSB3b3VsZCBiZSBiZXR0ZXIgdG8gZG8gYSBub24tbG9ja2lu ZyB0ZXN0Ci0JICogaW4gVEFTX1NQSU4oKSBidXQgbm90IGluIFRBUygpLCBsaWtlIG9uIHg4Nl82 NCwgYnV0IG5vLW9uZSdzIGRvbmUgdGhlCi0JICogdGVzdGluZyB0byB2ZXJpZnkgdGhhdC4gIFdp dGhvdXQgc29tZSBlbXBpcmljYWwgZXZpZGVuY2UsIGJldHRlciB0bwotCSAqIGxlYXZlIGl0IGFs b25lLgotCSAqLwotCV9fYXNtX18gX192b2xhdGlsZV9fKAotCQkiCWNtcGIJJDAsJTEJXG4iCi0J CSIJam5lCQkxZgkJXG4iCi0JCSIJbG9jawkJCVxuIgotCQkiCXhjaGdiCSUwLCUxCVxuIgotCQki MTogXG4iCi06CQkiK3EiKF9yZXMpLCAiK20iKCpsb2NrKQotOgkJLyogbm8gaW5wdXRzICovCi06 CQkibWVtb3J5IiwgImNjIik7Ci0JcmV0dXJuIChpbnQpIF9yZXM7Ci19Ci0KLSNkZWZpbmUgU1BJ Tl9ERUxBWSgpIHNwaW5fZGVsYXkoKQotCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkCi1zcGluX2Rl bGF5KHZvaWQpCi17Ci0JLyoKLQkgKiBUaGlzIHNlcXVlbmNlIGlzIGVxdWl2YWxlbnQgdG8gdGhl IFBBVVNFIGluc3RydWN0aW9uICgicmVwIiBpcwotCSAqIGlnbm9yZWQgYnkgb2xkIElBMzIgcHJv Y2Vzc29ycyBpZiB0aGUgZm9sbG93aW5nIGluc3RydWN0aW9uIGlzCi0JICogbm90IGEgc3RyaW5n IG9wZXJhdGlvbik7IHRoZSBJQS0zMiBBcmNoaXRlY3R1cmUgU29mdHdhcmUKLQkgKiBEZXZlbG9w ZXIncyBNYW51YWwsIFZvbC4gMywgU2VjdGlvbiA3LjcuMiBkZXNjcmliZXMgd2h5IHVzaW5nCi0J ICogUEFVU0UgaW4gdGhlIGlubmVyIGxvb3Agb2YgYSBzcGluIGxvY2sgaXMgbmVjZXNzYXJ5IGZv ciBnb29kCi0JICogcGVyZm9ybWFuY2U6Ci0JICoKLQkgKiAgICAgVGhlIFBBVVNFIGluc3RydWN0 aW9uIGltcHJvdmVzIHRoZSBwZXJmb3JtYW5jZSBvZiBJQS0zMgotCSAqICAgICBwcm9jZXNzb3Jz IHN1cHBvcnRpbmcgSHlwZXItVGhyZWFkaW5nIFRlY2hub2xvZ3kgd2hlbgotCSAqICAgICBleGVj dXRpbmcgc3Bpbi13YWl0IGxvb3BzIGFuZCBvdGhlciByb3V0aW5lcyB3aGVyZSBvbmUKLQkgKiAg ICAgdGhyZWFkIGlzIGFjY2Vzc2luZyBhIHNoYXJlZCBsb2NrIG9yIHNlbWFwaG9yZSBpbiBhIHRp Z2h0Ci0JICogICAgIHBvbGxpbmcgbG9vcC4gV2hlbiBleGVjdXRpbmcgYSBzcGluLXdhaXQgbG9v cCwgdGhlCi0JICogICAgIHByb2Nlc3NvciBjYW4gc3VmZmVyIGEgc2V2ZXJlIHBlcmZvcm1hbmNl IHBlbmFsdHkgd2hlbgotCSAqICAgICBleGl0aW5nIHRoZSBsb29wIGJlY2F1c2UgaXQgZGV0ZWN0 cyBhIHBvc3NpYmxlIG1lbW9yeSBvcmRlcgotCSAqICAgICB2aW9sYXRpb24gYW5kIGZsdXNoZXMg dGhlIGNvcmUgcHJvY2Vzc29yJ3MgcGlwZWxpbmUuIFRoZQotCSAqICAgICBQQVVTRSBpbnN0cnVj dGlvbiBwcm92aWRlcyBhIGhpbnQgdG8gdGhlIHByb2Nlc3NvciB0aGF0IHRoZQotCSAqICAgICBj b2RlIHNlcXVlbmNlIGlzIGEgc3Bpbi13YWl0IGxvb3AuIFRoZSBwcm9jZXNzb3IgdXNlcyB0aGlz Ci0JICogICAgIGhpbnQgdG8gYXZvaWQgdGhlIG1lbW9yeSBvcmRlciB2aW9sYXRpb24gYW5kIHBy ZXZlbnQgdGhlCi0JICogICAgIHBpcGVsaW5lIGZsdXNoLiBJbiBhZGRpdGlvbiwgdGhlIFBBVVNF IGluc3RydWN0aW9uCi0JICogICAgIGRlLXBpcGVsaW5lcyB0aGUgc3Bpbi13YWl0IGxvb3AgdG8g cHJldmVudCBpdCBmcm9tCi0JICogICAgIGNvbnN1bWluZyBleGVjdXRpb24gcmVzb3VyY2VzIGV4 Y2Vzc2l2ZWx5LgotCSAqLwotCV9fYXNtX18gX192b2xhdGlsZV9fKAotCQkiIHJlcDsgbm9wCQkJ XG4iKTsKLX0KLQotI2VuZGlmCSAvKiBfX2kzODZfXyAqLwotCi0KLSNpZmRlZiBfX3g4Nl82NF9f CQkvKiBBTUQgT3B0ZXJvbiwgSW50ZWwgRU02NFQgKi8KLSNkZWZpbmUgSEFTX1RFU1RfQU5EX1NF VAotCi10eXBlZGVmIHVuc2lnbmVkIGNoYXIgc2xvY2tfdDsKLQotI2RlZmluZSBUQVMobG9jaykg dGFzKGxvY2spCi0KLS8qCi0gKiBPbiBJbnRlbCBFTTY0VCwgaXQncyBhIHdpbiB0byB1c2UgYSBu b24tbG9ja2luZyB0ZXN0IGJlZm9yZSB0aGUgeGNoZyBwcm9wZXIsCi0gKiBidXQgb25seSB3aGVu IHNwaW5uaW5nLgotICoKLSAqIFNlZSBhbHNvIEltcGxlbWVudGluZyBTY2FsYWJsZSBBdG9taWMg TG9ja3MgZm9yIE11bHRpLUNvcmUgSW50ZWwodG0pIEVNNjRUCi0gKiBhbmQgSUEzMiwgYnkgTWlj aGFlbCBDaHlub3dldGggYW5kIE1hcnkgUi4gTGVlLiBBcyBvZiB0aGlzIHdyaXRpbmcsIGl0IGlz Ci0gKiBhdmFpbGFibGUgYXQ6Ci0gKiBodHRwOi8vc29mdHdhcmUuaW50ZWwuY29tL2VuLXVzL2Fy dGljbGVzL2ltcGxlbWVudGluZy1zY2FsYWJsZS1hdG9taWMtbG9ja3MtZm9yLW11bHRpLWNvcmUt aW50ZWwtZW02NHQtYW5kLWlhMzItYXJjaGl0ZWN0dXJlcwotICovCi0jZGVmaW5lIFRBU19TUElO KGxvY2spICAgICgqKGxvY2spID8gMSA6IFRBUyhsb2NrKSkKLQotc3RhdGljIF9faW5saW5lX18g aW50Ci10YXModm9sYXRpbGUgc2xvY2tfdCAqbG9jaykKLXsKLQlzbG9ja190CQlfcmVzID0gMTsK LQotCV9fYXNtX18gX192b2xhdGlsZV9fKAotCQkiCWxvY2sJCQlcbiIKLQkJIgl4Y2hnYgklMCwl MQlcbiIKLToJCSIrcSIoX3JlcyksICIrbSIoKmxvY2spCi06CQkvKiBubyBpbnB1dHMgKi8KLToJ CSJtZW1vcnkiLCAiY2MiKTsKLQlyZXR1cm4gKGludCkgX3JlczsKLX0KLQotI2RlZmluZSBTUElO X0RFTEFZKCkgc3Bpbl9kZWxheSgpCi0KLXN0YXRpYyBfX2lubGluZV9fIHZvaWQKLXNwaW5fZGVs YXkodm9pZCkKLXsKLQkvKgotCSAqIEFkZGluZyBhIFBBVVNFIGluIHRoZSBzcGluIGRlbGF5IGxv b3AgaXMgZGVtb25zdHJhYmx5IGEgbm8tb3Agb24KLQkgKiBPcHRlcm9uLCBidXQgaXQgbWF5IGJl IG9mIHNvbWUgdXNlIG9uIEVNNjRULCBzbyB3ZSBrZWVwIGl0LgotCSAqLwotCV9fYXNtX18gX192 b2xhdGlsZV9fKAotCQkiIHJlcDsgbm9wCQkJXG4iKTsKLX0KLQotI2VuZGlmCSAvKiBfX3g4Nl82 NF9fICovCi0KLQotLyoKLSAqIE9uIEFSTSBhbmQgQVJNNjQsIHdlIHVzZSBfX3N5bmNfbG9ja190 ZXN0X2FuZF9zZXQoaW50ICosIGludCkgaWYgYXZhaWxhYmxlLgotICoKLSAqIFdlIHVzZSB0aGUg aW50LXdpZHRoIHZhcmlhbnQgb2YgdGhlIGJ1aWx0aW4gYmVjYXVzZSBpdCB3b3JrcyBvbiBtb3Jl IGNoaXBzCi0gKiB0aGFuIG90aGVyIHdpZHRocy4KLSAqLwotI2lmIGRlZmluZWQoX19hcm1fXykg fHwgZGVmaW5lZChfX2FybSkgfHwgZGVmaW5lZChfX2FhcmNoNjRfXykKLSNpZmRlZiBIQVZFX0dD Q19fU1lOQ19JTlQzMl9UQVMKLSNkZWZpbmUgSEFTX1RFU1RfQU5EX1NFVAotCi0jZGVmaW5lIFRB Uyhsb2NrKSB0YXMobG9jaykKLQotdHlwZWRlZiBpbnQgc2xvY2tfdDsKLQotc3RhdGljIF9faW5s aW5lX18gaW50Ci10YXModm9sYXRpbGUgc2xvY2tfdCAqbG9jaykKLXsKLQlyZXR1cm4gX19zeW5j X2xvY2tfdGVzdF9hbmRfc2V0KGxvY2ssIDEpOwotfQotCi0jZGVmaW5lIFNfVU5MT0NLKGxvY2sp IF9fc3luY19sb2NrX3JlbGVhc2UobG9jaykKLQotI2lmIGRlZmluZWQoX19hYXJjaDY0X18pCi0K LS8qCi0gKiBPbiBBUk02NCwgaXQncyBhIHdpbiB0byB1c2UgYSBub24tbG9ja2luZyB0ZXN0IGJl Zm9yZSB0aGUgVEFTIHByb3Blci4gIEl0Ci0gKiBtYXkgYmUgYSB3aW4gb24gMzItYml0IEFSTSwg dG9vLCBidXQgbm9ib2R5J3MgdGVzdGVkIGl0IHlldC4KLSAqLwotI2RlZmluZSBUQVNfU1BJTihs b2NrKQkoKihsb2NrKSA/IDEgOiBUQVMobG9jaykpCi0KLSNkZWZpbmUgU1BJTl9ERUxBWSgpIHNw aW5fZGVsYXkoKQotCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkCi1zcGluX2RlbGF5KHZvaWQpCi17 Ci0JLyoKLQkgKiBVc2luZyBhbiBJU0IgaW5zdHJ1Y3Rpb24gdG8gZGVsYXkgaW4gc3BpbmxvY2sg bG9vcHMgYXBwZWFycyBiZW5lZmljaWFsCi0JICogb24gaGlnaC1jb3JlLWNvdW50IEFSTTY0IHBy b2Nlc3NvcnMuICBJdCBzZWVtcyBtb3N0bHkgYSB3YXNoIGZvciBzbWFsbGVyCi0JICogZ2Vhciwg YW5kIElTQiBkb2Vzbid0IGV4aXN0IGF0IGFsbCBvbiBwcmUtdjcgQVJNIGNoaXBzLgotCSAqLwot CV9fYXNtX18gX192b2xhdGlsZV9fKAotCQkiIGlzYjsJCQkJXG4iKTsKLX0KLQotI2VuZGlmCSAv KiBfX2FhcmNoNjRfXyAqLwotI2VuZGlmCSAvKiBIQVZFX0dDQ19fU1lOQ19JTlQzMl9UQVMgKi8K LSNlbmRpZgkgLyogX19hcm1fXyB8fCBfX2FybSB8fCBfX2FhcmNoNjRfXyAqLwotCi0KLS8qIFMv MzkwIGFuZCBTLzM5MHggTGludXggKDMyLSBhbmQgNjQtYml0IHpTZXJpZXMpICovCi0jaWYgZGVm aW5lZChfX3MzOTBfXykgfHwgZGVmaW5lZChfX3MzOTB4X18pCi0jZGVmaW5lIEhBU19URVNUX0FO RF9TRVQKLQotdHlwZWRlZiB1bnNpZ25lZCBpbnQgc2xvY2tfdDsKLQotI2RlZmluZSBUQVMobG9j aykJICAgdGFzKGxvY2spCi0KLXN0YXRpYyBfX2lubGluZV9fIGludAotdGFzKHZvbGF0aWxlIHNs b2NrX3QgKmxvY2spCi17Ci0JaW50CQkJX3JlcyA9IDA7Ci0KLQlfX2FzbV9fCV9fdm9sYXRpbGVf XygKLQkJIgljcyAJJTAsJTMsMCglMikJCVxuIgotOgkJIitkIihfcmVzKSwgIittIigqbG9jaykK LToJCSJhIihsb2NrKSwgImQiKDEpCi06CQkibWVtb3J5IiwgImNjIik7Ci0JcmV0dXJuIF9yZXM7 Ci19Ci0KLSNlbmRpZgkgLyogX19zMzkwX18gfHwgX19zMzkweF9fICovCi0KLQotI2lmIGRlZmlu ZWQoX19zcGFyY19fKQkJLyogU3BhcmMgKi8KLS8qCi0gKiBTb2xhcmlzIGhhcyBhbHdheXMgcnVu IHNwYXJjIHByb2Nlc3NvcnMgaW4gVFNPICh0b3RhbCBzdG9yZSkgbW9kZSwgYnV0Ci0gKiBsaW51 eCBkaWRuJ3QgdXNlIHRvIGFuZCB0aGUgKkJTRHMgc3RpbGwgZG9uJ3QuIFNvLCBiZSBjYXJlZnVs IGFib3V0Ci0gKiBhY3F1aXJlL3JlbGVhc2Ugc2VtYW50aWNzLiBUaGUgQ1BVIHdpbGwgdHJlYXQg c3VwZXJmbHVvdXMgbWVtYmVycyBhcwotICogTk9Qcywgc28gaXQncyBqdXN0IGNvZGUgc3BhY2Uu Ci0gKi8KLSNkZWZpbmUgSEFTX1RFU1RfQU5EX1NFVAotCi10eXBlZGVmIHVuc2lnbmVkIGNoYXIg c2xvY2tfdDsKLQotI2RlZmluZSBUQVMobG9jaykgdGFzKGxvY2spCi0KLXN0YXRpYyBfX2lubGlu ZV9fIGludAotdGFzKHZvbGF0aWxlIHNsb2NrX3QgKmxvY2spCi17Ci0Jc2xvY2tfdAkJX3JlczsK LQotCS8qCi0JICogImNhcyIgd291bGQgYmUgYmV0dGVyIHRoYW4gImxkc3R1YiIsIGJ1dCBpdCBp cyBvbmx5IHByZXNlbnQgb24KLQkgKiBzcGFyY3Y4cGx1cyBhbmQgbGF0ZXIsIHdoaWxlIHNvbWUg cGxhdGZvcm1zIHN0aWxsIHN1cHBvcnQgc3BhcmN2NyBvcgotCSAqIHNwYXJjdjguICBBbHNvLCAi Y2FzIiByZXF1aXJlcyB0aGF0IHRoZSBzeXN0ZW0gYmUgcnVubmluZyBpbiBUU08gbW9kZS4KLQkg Ki8KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkJIglsZHN0dWIJWyUyXSwgJTAJXG4iCi06CQki PXIiKF9yZXMpLCAiK20iKCpsb2NrKQotOgkJInIiKGxvY2spCi06CQkibWVtb3J5Iik7Ci0jaWYg ZGVmaW5lZChfX3NwYXJjdjcpIHx8IGRlZmluZWQoX19zcGFyY192N19fKQotCS8qCi0JICogTm8g c3RiYXIgb3IgbWVtYmFyIGF2YWlsYWJsZSwgbHVja2lseSBubyBhY3R1YWxseSBwcm9kdWNlZCBo YXJkd2FyZQotCSAqIHJlcXVpcmVzIGEgYmFycmllci4KLQkgKi8KLSNlbGlmIGRlZmluZWQoX19z cGFyY3Y4KSB8fCBkZWZpbmVkKF9fc3BhcmNfdjhfXykKLQkvKiBzdGJhciBpcyBhdmFpbGFibGUg KGFuZCByZXF1aXJlZCBmb3IgYm90aCBQU08sIFJNTyksIG1lbWJhciBpc24ndCAqLwotCV9fYXNt X18gX192b2xhdGlsZV9fICgic3RiYXIJIFxuIjo6OiJtZW1vcnkiKTsKLSNlbHNlCi0JLyoKLQkg KiAjTG9hZFN0b3JlIChSTU8pIHwgI0xvYWRMb2FkIChSTU8pIHRvZ2V0aGVyIGFyZSB0aGUgYXBw cm9wcmlhdGUgYWNxdWlyZQotCSAqIGJhcnJpZXIgZm9yIHNwYXJjdjgrIHVwd2FyZHMuCi0JICov Ci0JX19hc21fXyBfX3ZvbGF0aWxlX18gKCJtZW1iYXIgI0xvYWRTdG9yZSB8ICNMb2FkTG9hZCBc biI6OjoibWVtb3J5Iik7Ci0jZW5kaWYKLQlyZXR1cm4gKGludCkgX3JlczsKLX0KLQotI2lmIGRl ZmluZWQoX19zcGFyY3Y3KSB8fCBkZWZpbmVkKF9fc3BhcmNfdjdfXykKLS8qCi0gKiBObyBzdGJh ciBvciBtZW1iYXIgYXZhaWxhYmxlLCBsdWNraWx5IG5vIGFjdHVhbGx5IHByb2R1Y2VkIGhhcmR3 YXJlCi0gKiByZXF1aXJlcyBhIGJhcnJpZXIuICBXZSBmYWxsIHRocm91Z2ggdG8gdGhlIGRlZmF1 bHQgZ2NjIGRlZmluaXRpb24gb2YKLSAqIFNfVU5MT0NLIGluIHRoaXMgY2FzZS4KLSAqLwotI2Vs aWYgZGVmaW5lZChfX3NwYXJjdjgpIHx8IGRlZmluZWQoX19zcGFyY192OF9fKQotLyogc3RiYXIg aXMgYXZhaWxhYmxlIChhbmQgcmVxdWlyZWQgZm9yIGJvdGggUFNPLCBSTU8pLCBtZW1iYXIgaXNu J3QgKi8KLSNkZWZpbmUgU19VTkxPQ0sobG9jaykJXAotZG8gXAoteyBcCi0JX19hc21fXyBfX3Zv bGF0aWxlX18gKCJzdGJhcgkgXG4iOjo6Im1lbW9yeSIpOyBcCi0JKigodm9sYXRpbGUgc2xvY2tf dCAqKSAobG9jaykpID0gMDsgXAotfSB3aGlsZSAoMCkKLSNlbHNlCi0vKgotICogI0xvYWRTdG9y ZSAoUk1PKSB8ICNTdG9yZVN0b3JlIChSTU8sIFBTTykgdG9nZXRoZXIgYXJlIHRoZSBhcHByb3By aWF0ZQotICogcmVsZWFzZSBiYXJyaWVyIGZvciBzcGFyY3Y4KyB1cHdhcmRzLgotICovCi0jZGVm aW5lIFNfVU5MT0NLKGxvY2spCVwKLWRvIFwKLXsgXAotCV9fYXNtX18gX192b2xhdGlsZV9fICgi bWVtYmFyICNMb2FkU3RvcmUgfCAjU3RvcmVTdG9yZSBcbiI6OjoibWVtb3J5Iik7IFwKLQkqKCh2 b2xhdGlsZSBzbG9ja190ICopIChsb2NrKSkgPSAwOyBcCi19IHdoaWxlICgwKQotI2VuZGlmCi0K LSNlbmRpZgkgLyogX19zcGFyY19fICovCi0KLQotLyogUG93ZXJQQyAqLwotI2lmIGRlZmluZWQo X19wcGNfXykgfHwgZGVmaW5lZChfX3Bvd2VycGNfXykgfHwgZGVmaW5lZChfX3BwYzY0X18pIHx8 IGRlZmluZWQoX19wb3dlcnBjNjRfXykKLSNkZWZpbmUgSEFTX1RFU1RfQU5EX1NFVAotCi10eXBl ZGVmIHVuc2lnbmVkIGludCBzbG9ja190OwotCi0jZGVmaW5lIFRBUyhsb2NrKSB0YXMobG9jaykK LQotLyogT24gUFBDLCBpdCdzIGEgd2luIHRvIHVzZSBhIG5vbi1sb2NraW5nIHRlc3QgYmVmb3Jl IHRoZSBsd2FyeCAqLwotI2RlZmluZSBUQVNfU1BJTihsb2NrKQkoKihsb2NrKSA/IDEgOiBUQVMo bG9jaykpCi0KLS8qCi0gKiBUaGUgc2Vjb25kIG9wZXJhbmQgb2YgYWRkaSBjYW4gaG9sZCBhIGNv bnN0YW50IHplcm8gb3IgYSByZWdpc3RlciBudW1iZXIsCi0gKiBoZW5jZSBjb25zdHJhaW50ICI9 JmIiIHRvIGF2b2lkIGFsbG9jYXRpbmcgcjAuICAiYiIgc3RhbmRzIGZvciAiYWRkcmVzcwotICog YmFzZSByZWdpc3RlciI7IG1vc3Qgb3BlcmFuZHMgaGF2aW5nIHRoaXMgcmVnaXN0ZXItb3ItemVy byBwcm9wZXJ0eSBhcmUKLSAqIGFkZHJlc3MgYmFzZXMsIGUuZy4gdGhlIHNlY29uZCBvcGVyYW5k IG9mIGx3YXguCi0gKgotICogTk9URTogcGVyIHRoZSBFbmhhbmNlZCBQb3dlclBDIEFyY2hpdGVj dHVyZSBtYW51YWwsIHYxLjAgZGF0ZWQgNy1NYXktMjAwMiwKLSAqIGFuIGlzeW5jIGlzIGEgc3Vm ZmljaWVudCBzeW5jaHJvbml6YXRpb24gYmFycmllciBhZnRlciBhIGx3YXJ4L3N0d2N4IGxvb3Au Ci0gKiBCdXQgaWYgdGhlIHNwaW5sb2NrIGlzIGluIG9yZGluYXJ5IG1lbW9yeSwgd2UgY2FuIHVz ZSBsd3N5bmMgaW5zdGVhZCBmb3IKLSAqIGJldHRlciBwZXJmb3JtYW5jZS4KLSAqLwotc3RhdGlj IF9faW5saW5lX18gaW50Ci10YXModm9sYXRpbGUgc2xvY2tfdCAqbG9jaykKLXsKLQlzbG9ja190 IF90OwotCWludCBfcmVzOwotCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oCi0iCWx3YXJ4ICAgJTAs MCwlMywxCVxuIgotIgljbXB3aSAgICUwLDAJCVxuIgotIglibmUgICAgIDFmCQkJXG4iCi0iCWFk ZGkgICAgJTAsJTAsMQkJXG4iCi0iCXN0d2N4LiAgJTAsMCwlMwkJXG4iCi0iCWJlcSAgICAgMmYJ CQlcbiIKLSIxOiBcbiIKLSIJbGkgICAgICAlMSwxCQlcbiIKLSIJYiAgICAgICAzZgkJCVxuIgot IjI6IFxuIgotIglsd3N5bmMJCQkJXG4iCi0iCWxpICAgICAgJTEsMAkJXG4iCi0iMzogXG4iCi06 CSI9JmIiKF90KSwgIj1yIihfcmVzKSwgIittIigqbG9jaykKLToJInIiKGxvY2spCi06CSJtZW1v cnkiLCAiY2MiKTsKLQlyZXR1cm4gX3JlczsKLX0KLQotLyoKLSAqIFBvd2VyUEMgU19VTkxPQ0sg aXMgYWxtb3N0IHN0YW5kYXJkIGJ1dCByZXF1aXJlcyBhICJzeW5jIiBpbnN0cnVjdGlvbi4KLSAq IEJ1dCB3ZSBjYW4gdXNlIGx3c3luYyBpbnN0ZWFkIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2UuCi0g Ki8KLSNkZWZpbmUgU19VTkxPQ0sobG9jaykJXAotZG8gXAoteyBcCi0JX19hc21fXyBfX3ZvbGF0 aWxlX18gKCIJbHdzeW5jIFxuIiA6OjogIm1lbW9yeSIpOyBcCi0JKigodm9sYXRpbGUgc2xvY2tf dCAqKSAobG9jaykpID0gMDsgXAotfSB3aGlsZSAoMCkKLQotI2VuZGlmIC8qIHBvd2VycGMgKi8K LQotCi0jaWYgZGVmaW5lZChfX21pcHNfXykgJiYgIWRlZmluZWQoX19zZ2kpCS8qIG5vbi1TR0kg TUlQUyAqLwotI2RlZmluZSBIQVNfVEVTVF9BTkRfU0VUCi0KLXR5cGVkZWYgdW5zaWduZWQgaW50 IHNsb2NrX3Q7Ci0KLSNkZWZpbmUgVEFTKGxvY2spIHRhcyhsb2NrKQotCi0vKgotICogT3JpZ2lu YWwgTUlQUy1JIHByb2Nlc3NvcnMgbGFja2VkIHRoZSBMTC9TQyBpbnN0cnVjdGlvbnMsIGJ1dCBp ZiB3ZSBhcmUKLSAqIHNvIHVuZm9ydHVuYXRlIGFzIHRvIGJlIHJ1bm5pbmcgb24gb25lIG9mIHRo b3NlLCB3ZSBleHBlY3QgdGhhdCB0aGUga2VybmVsCi0gKiB3aWxsIGhhbmRsZSB0aGUgaWxsZWdh bC1pbnN0cnVjdGlvbiB0cmFwcyBhbmQgZW11bGF0ZSB0aGVtIGZvciB1cy4gIE9uCi0gKiBhbnl0 aGluZyBuZXdlciAoYW5kIHJlYWxseSwgTUlQUy1JIGlzIGV4dGluY3QpIExML1NDIGlzIHRoZSBv bmx5IHNhbmUKLSAqIGNob2ljZSBiZWNhdXNlIGFueSBvdGhlciBzeW5jaHJvbml6YXRpb24gbWV0 aG9kIG11c3QgaW52b2x2ZSBhIGtlcm5lbAotICogY2FsbC4gIFVuZm9ydHVuYXRlbHksIG1hbnkg dG9vbGNoYWlucyBzdGlsbCBkZWZhdWx0IHRvIE1JUFMtSSBhcyB0aGUKLSAqIGNvZGVnZW4gdGFy Z2V0OyBpZiB0aGUgc3ltYm9sIF9fbWlwcyBzaG93cyB0aGF0IHRoYXQncyB0aGUgY2FzZSwgd2UK LSAqIGhhdmUgdG8gZm9yY2UgdGhlIGFzc2VtYmxlciB0byBhY2NlcHQgTEwvU0MuCi0gKgotICog UjEwMDAwIGFuZCB1cCBwcm9jZXNzb3JzIHJlcXVpcmUgYSBzZXBhcmF0ZSBTWU5DLCB3aGljaCBo YXMgdGhlIHNhbWUKLSAqIGlzc3VlcyBhcyBMTC9TQy4KLSAqLwotI2lmIF9fbWlwcyA8IDIKLSNk ZWZpbmUgTUlQU19TRVRfTUlQUzIJIiAgICAgICAuc2V0IG1pcHMyICAgICAgICAgIFxuIgotI2Vs c2UKLSNkZWZpbmUgTUlQU19TRVRfTUlQUzIKLSNlbmRpZgotCi1zdGF0aWMgX19pbmxpbmVfXyBp bnQKLXRhcyh2b2xhdGlsZSBzbG9ja190ICpsb2NrKQotewotCXZvbGF0aWxlIHNsb2NrX3QgKl9s ID0gbG9jazsKLQlpbnQJCQlfcmVzOwotCWludAkJCV90bXA7Ci0KLQlfX2FzbV9fIF9fdm9sYXRp bGVfXygKLQkJIiAgICAgICAuc2V0IHB1c2ggICAgICAgICAgIFxuIgotCQlNSVBTX1NFVF9NSVBT MgotCQkiICAgICAgIC5zZXQgbm9yZW9yZGVyICAgICAgXG4iCi0JCSIgICAgICAgLnNldCBub21h Y3JvICAgICAgICBcbiIKLQkJIiAgICAgICBsbCAgICAgICUwLCAlMiAgICAgIFxuIgotCQkiICAg ICAgIG9yICAgICAgJTEsICUwLCAxICAgXG4iCi0JCSIgICAgICAgc2MgICAgICAlMSwgJTIgICAg ICBcbiIKLQkJIiAgICAgICB4b3JpICAgICUxLCAxICAgICAgIFxuIgotCQkiICAgICAgIG9yICAg ICAgJTAsICUwLCAlMSAgXG4iCi0JCSIgICAgICAgc3luYyAgICAgICAgICAgICAgICBcbiIKLQkJ IiAgICAgICAuc2V0IHBvcCAgICAgICAgICAgICAgIgotOgkJIj0mciIgKF9yZXMpLCAiPSZyIiAo X3RtcCksICIrUiIgKCpfbCkKLToJCS8qIG5vIGlucHV0cyAqLwotOgkJIm1lbW9yeSIpOwotCXJl dHVybiBfcmVzOwotfQotCi0vKiBNSVBTIFNfVU5MT0NLIGlzIGFsbW9zdCBzdGFuZGFyZCBidXQg cmVxdWlyZXMgYSAic3luYyIgaW5zdHJ1Y3Rpb24gKi8KLSNkZWZpbmUgU19VTkxPQ0sobG9jaykJ XAotZG8gXAoteyBcCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oIFwKLQkJIiAgICAgICAuc2V0IHB1 c2ggICAgICAgICAgIFxuIiBcCi0JCU1JUFNfU0VUX01JUFMyIFwKLQkJIiAgICAgICAuc2V0IG5v cmVvcmRlciAgICAgIFxuIiBcCi0JCSIgICAgICAgLnNldCBub21hY3JvICAgICAgICBcbiIgXAot CQkiICAgICAgIHN5bmMgICAgICAgICAgICAgICAgXG4iIFwKLQkJIiAgICAgICAuc2V0IHBvcCAg ICAgICAgICAgICAgIiBcCi06CQkvKiBubyBvdXRwdXRzICovIFwKLToJCS8qIG5vIGlucHV0cyAq LwlcCi06CQkibWVtb3J5Iik7IFwKLQkqKCh2b2xhdGlsZSBzbG9ja190ICopIChsb2NrKSkgPSAw OyBcCi19IHdoaWxlICgwKQotCi0jZW5kaWYgLyogX19taXBzX18gJiYgIV9fc2dpICovCi0KLQot Ci0vKgotICogSWYgd2UgaGF2ZSBubyBwbGF0Zm9ybS1zcGVjaWZpYyBrbm93bGVkZ2UsIGJ1dCB3 ZSBmb3VuZCB0aGF0IHRoZSBjb21waWxlcgotICogcHJvdmlkZXMgX19zeW5jX2xvY2tfdGVzdF9h bmRfc2V0KCksIHVzZSB0aGF0LiAgUHJlZmVyIHRoZSBpbnQtd2lkdGgKLSAqIHZlcnNpb24gb3Zl ciB0aGUgY2hhci13aWR0aCB2ZXJzaW9uIGlmIHdlIGhhdmUgYm90aCwgb24gdGhlIHJhdGhlciBk dWJpb3VzCi0gKiBncm91bmRzIHRoYXQgdGhhdCdzIGtub3duIHRvIGJlIG1vcmUgbGlrZWx5IHRv IHdvcmsgaW4gdGhlIEFSTSBlY29zeXN0ZW0uCi0gKiAoQnV0IHdlIGRlYWx0IHdpdGggQVJNIGFi b3ZlLikKLSAqLwotI2lmICFkZWZpbmVkKEhBU19URVNUX0FORF9TRVQpCi0KLSNpZiBkZWZpbmVk KEhBVkVfR0NDX19TWU5DX0lOVDMyX1RBUykKLSNkZWZpbmUgSEFTX1RFU1RfQU5EX1NFVAotCi0j ZGVmaW5lIFRBUyhsb2NrKSB0YXMobG9jaykKLQotdHlwZWRlZiBpbnQgc2xvY2tfdDsKLQotc3Rh dGljIF9faW5saW5lX18gaW50Ci10YXModm9sYXRpbGUgc2xvY2tfdCAqbG9jaykKLXsKLQlyZXR1 cm4gX19zeW5jX2xvY2tfdGVzdF9hbmRfc2V0KGxvY2ssIDEpOwotfQotCi0jZGVmaW5lIFNfVU5M T0NLKGxvY2spIF9fc3luY19sb2NrX3JlbGVhc2UobG9jaykKLQotI2VsaWYgZGVmaW5lZChIQVZF X0dDQ19fU1lOQ19DSEFSX1RBUykKLSNkZWZpbmUgSEFTX1RFU1RfQU5EX1NFVAotCi0jZGVmaW5l IFRBUyhsb2NrKSB0YXMobG9jaykKLQotdHlwZWRlZiBjaGFyIHNsb2NrX3Q7Ci0KLXN0YXRpYyBf X2lubGluZV9fIGludAotdGFzKHZvbGF0aWxlIHNsb2NrX3QgKmxvY2spCi17Ci0JcmV0dXJuIF9f c3luY19sb2NrX3Rlc3RfYW5kX3NldChsb2NrLCAxKTsKLX0KLQotI2RlZmluZSBTX1VOTE9DSyhs b2NrKSBfX3N5bmNfbG9ja19yZWxlYXNlKGxvY2spCi0KLSNlbmRpZgkgLyogSEFWRV9HQ0NfX1NZ TkNfSU5UMzJfVEFTICovCi0KLSNlbmRpZgkvKiAhZGVmaW5lZChIQVNfVEVTVF9BTkRfU0VUKSAq LwotCi0KLS8qCi0gKiBEZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIFNfVU5MT0NLKCkgZm9yIGdj Yy9pY2MuCi0gKgotICogTm90ZSB0aGF0IHRoaXMgaW1wbGVtZW50YXRpb24gaXMgdW5zYWZlIGZv ciBhbnkgcGxhdGZvcm0gdGhhdCBjYW4gcmVvcmRlcgotICogYSBtZW1vcnkgYWNjZXNzIChlaXRo ZXIgbG9hZCBvciBzdG9yZSkgYWZ0ZXIgYSBmb2xsb3dpbmcgc3RvcmUuICBUaGF0Ci0gKiBoYXBw ZW5zIG5vdCB0byBiZSBwb3NzaWJsZSBvbiB4ODYgYW5kIG1vc3QgbGVnYWN5IGFyY2hpdGVjdHVy ZXMgKHNvbWUgYXJlCi0gKiBzaW5nbGUtcHJvY2Vzc29yISksIGJ1dCBtYW55IG1vZGVybiBzeXN0 ZW1zIGhhdmUgd2Vha2VyIG1lbW9yeSBvcmRlcmluZy4KLSAqIFRob3NlIHRoYXQgZG8gbXVzdCBk ZWZpbmUgdGhlaXIgb3duIHZlcnNpb24gb2YgU19VTkxPQ0soKSByYXRoZXIgdGhhbgotICogcmVs eWluZyBvbiB0aGlzIG9uZS4KLSAqLwotI2lmICFkZWZpbmVkKFNfVU5MT0NLKQotI2RlZmluZSBT X1VOTE9DSyhsb2NrKQlcCi0JZG8geyBfX2FzbV9fIF9fdm9sYXRpbGVfXygiIiA6IDogOiAibWVt b3J5Iik7ICAqKGxvY2spID0gMDsgfSB3aGlsZSAoMCkKLSNlbmRpZgotCi0jZW5kaWYJLyogZGVm aW5lZChfX0dOVUNfXykgfHwgZGVmaW5lZChfX0lOVEVMX0NPTVBJTEVSKSAqLwotCi0KLS8qCi0g KiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KLSAqIFBsYXRmb3JtcyB0aGF0IHVzZSBub24tZ2NjIGlubGluZSBhc3Nl bWJseToKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICovCi0KLSNpZiAhZGVmaW5lZChIQVNfVEVTVF9BTkRf U0VUKQkvKiBXZSBkaWRuJ3QgdHJpZ2dlciBhYm92ZSwgbGV0J3MgdHJ5IGhlcmUgKi8KLQotI2lm ZGVmIF9NU0NfVkVSCi10eXBlZGVmIExPTkcgc2xvY2tfdDsKLQotI2RlZmluZSBIQVNfVEVTVF9B TkRfU0VUCi0jZGVmaW5lIFRBUyhsb2NrKSAoSW50ZXJsb2NrZWRDb21wYXJlRXhjaGFuZ2UobG9j aywgMSwgMCkpCi0KLSNkZWZpbmUgU1BJTl9ERUxBWSgpIHNwaW5fZGVsYXkoKQotCi0vKiBJZiB1 c2luZyBWaXN1YWwgQysrIG9uIFdpbjY0LCBpbmxpbmUgYXNzZW1ibHkgaXMgdW5hdmFpbGFibGUu Ci0gKiBVc2UgYSBfbW1fcGF1c2UgaW50cmluc2ljIGluc3RlYWQgb2YgcmVwIG5vcC4KLSAqLwot I2lmIGRlZmluZWQoX1dJTjY0KQotc3RhdGljIF9fZm9yY2VpbmxpbmUgdm9pZAotc3Bpbl9kZWxh eSh2b2lkKQotewotCV9tbV9wYXVzZSgpOwotfQotI2Vsc2UKLXN0YXRpYyBfX2ZvcmNlaW5saW5l IHZvaWQKLXNwaW5fZGVsYXkodm9pZCkKLXsKLQkvKiBTZWUgY29tbWVudCBmb3IgZ2NjIGNvZGUu IFNhbWUgY29kZSwgTUFTTSBzeW50YXggKi8KLQlfX2FzbSByZXAgbm9wOwotfQotI2VuZGlmCi0K LSNpbmNsdWRlIDxpbnRyaW4uaD4KLSNwcmFnbWEgaW50cmluc2ljKF9SZWFkV3JpdGVCYXJyaWVy KQotCi0jZGVmaW5lIFNfVU5MT0NLKGxvY2spCVwKLQlkbyB7IF9SZWFkV3JpdGVCYXJyaWVyKCk7 ICgqKGxvY2spKSA9IDA7IH0gd2hpbGUgKDApCi0KLSNlbmRpZgotCi0KLSNlbmRpZgkvKiAhZGVm aW5lZChIQVNfVEVTVF9BTkRfU0VUKSAqLwotCi0KLS8qIEJsb3cgdXAgaWYgd2UgZGlkbid0IGhh dmUgYW55IHdheSB0byBkbyBzcGlubG9ja3MgKi8KLSNpZm5kZWYgSEFTX1RFU1RfQU5EX1NFVAot I2Vycm9yIFBvc3RncmVTUUwgZG9lcyBub3QgaGF2ZSBzcGlubG9jayBzdXBwb3J0IG9uIHRoaXMg cGxhdGZvcm0uICBQbGVhc2UgcmVwb3J0IHRoaXMgdG8gcGdzcWwtYnVnc0BsaXN0cy5wb3N0Z3Jl c3FsLm9yZy4KLSNlbmRpZgotCi0KLS8qCi0gKiBEZWZhdWx0IERlZmluaXRpb25zIC0gb3ZlcnJp ZGUgdGhlc2UgYWJvdmUgYXMgbmVlZGVkLgotICovCi0KLSNpZiAhZGVmaW5lZChTX0xPQ0spCi0j ZGVmaW5lIFNfTE9DSyhsb2NrKSBcCi0JKFRBUyhsb2NrKSA/IHNfbG9jaygobG9jayksIF9fRklM RV9fLCBfX0xJTkVfXywgX19mdW5jX18pIDogMCkKLSNlbmRpZgkgLyogU19MT0NLICovCi0KLSNp ZiAhZGVmaW5lZChTX0xPQ0tfRlJFRSkKLSNkZWZpbmUgU19MT0NLX0ZSRUUobG9jaykJKCoobG9j aykgPT0gMCkKLSNlbmRpZgkgLyogU19MT0NLX0ZSRUUgKi8KLQotI2lmICFkZWZpbmVkKFNfVU5M T0NLKQotLyoKLSAqIE91ciBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIFNfVU5MT0NLIGlzIGVz c2VudGlhbGx5ICoobG9jaykgPSAwLiAgVGhpcwotICogaXMgdW5zYWZlIGlmIHRoZSBwbGF0Zm9y bSBjYW4gcmVvcmRlciBhIG1lbW9yeSBhY2Nlc3MgKGVpdGhlciBsb2FkIG9yCi0gKiBzdG9yZSkg YWZ0ZXIgYSBmb2xsb3dpbmcgc3RvcmU7IHBsYXRmb3JtcyB3aGVyZSB0aGlzIGlzIHBvc3NpYmxl IG11c3QKLSAqIGRlZmluZSB0aGVpciBvd24gU19VTkxPQ0suICBCdXQgQ1BVIHJlb3JkZXJpbmcg aXMgbm90IHRoZSBvbmx5IGNvbmNlcm46Ci0gKiBpZiB3ZSBzaW1wbHkgZGVmaW5lZCBTX1VOTE9D SygpIGFzIGFuIGlubGluZSBtYWNybywgdGhlIGNvbXBpbGVyIG1pZ2h0Ci0gKiByZW9yZGVyIGlu c3RydWN0aW9ucyBmcm9tIGluc2lkZSB0aGUgY3JpdGljYWwgc2VjdGlvbiB0byBvY2N1ciBhZnRl ciB0aGUKLSAqIGxvY2sgcmVsZWFzZS4gIFNpbmNlIHRoZSBjb21waWxlciBwcm9iYWJseSBjYW4n dCBrbm93IHdoYXQgdGhlIGV4dGVybmFsCi0gKiBmdW5jdGlvbiBzX3VubG9jayBpcyBkb2luZywg cHV0dGluZyB0aGUgc2FtZSBsb2dpYyB0aGVyZSBzaG91bGQgYmUgYWRlcXVhdGUuCi0gKiBBIHN1 ZmZpY2llbnRseS1zbWFydCBnbG9iYWxseSBvcHRpbWl6aW5nIGNvbXBpbGVyIGNvdWxkIGJyZWFr IHRoYXQKLSAqIGFzc3VtcHRpb24sIHRob3VnaCwgYW5kIHRoZSBjb3N0IG9mIGEgZnVuY3Rpb24g Y2FsbCBmb3IgZXZlcnkgc3BpbmxvY2sKLSAqIHJlbGVhc2UgbWF5IGh1cnQgcGVyZm9ybWFuY2Ug c2lnbmlmaWNhbnRseSwgc28gd2UgdXNlIHRoaXMgaW1wbGVtZW50YXRpb24KLSAqIG9ubHkgZm9y IHBsYXRmb3JtcyB3aGVyZSB3ZSBkb24ndCBrbm93IG9mIGEgc3VpdGFibGUgaW50cmluc2ljLiAg Rm9yIHRoZQotICogbW9zdCBwYXJ0LCB0aG9zZSBhcmUgcmVsYXRpdmVseSBvYnNjdXJlIHBsYXRm b3JtL2NvbXBpbGVyIGNvbWJpbmF0aW9ucyB0bwotICogd2hpY2ggdGhlIFBvc3RncmVTUUwgcHJv amVjdCBkb2VzIG5vdCBoYXZlIGFjY2Vzcy4KLSAqLwotI2RlZmluZSBVU0VfREVGQVVMVF9TX1VO TE9DSwotZXh0ZXJuIHZvaWQgc191bmxvY2sodm9sYXRpbGUgc2xvY2tfdCAqbG9jayk7Ci0jZGVm aW5lIFNfVU5MT0NLKGxvY2spCQlzX3VubG9jayhsb2NrKQotI2VuZGlmCSAvKiBTX1VOTE9DSyAq LwotCi0jaWYgIWRlZmluZWQoU19JTklUX0xPQ0spCi0jZGVmaW5lIFNfSU5JVF9MT0NLKGxvY2sp CVNfVU5MT0NLKGxvY2spCi0jZW5kaWYJIC8qIFNfSU5JVF9MT0NLICovCi0KLSNpZiAhZGVmaW5l ZChTUElOX0RFTEFZKQotI2RlZmluZSBTUElOX0RFTEFZKCkJKCh2b2lkKSAwKQotI2VuZGlmCSAv KiBTUElOX0RFTEFZICovCi0KLSNpZiAhZGVmaW5lZChUQVMpCi1leHRlcm4gaW50CXRhcyh2b2xh dGlsZSBzbG9ja190ICpsb2NrKTsJCS8qIGluIHBvcnQvLi4uL3Rhcy5zLCBvcgotCQkJCQkJCQkJ CQkJICogc19sb2NrLmMgKi8KLQotI2RlZmluZSBUQVMobG9jaykJCXRhcyhsb2NrKQotI2VuZGlm CSAvKiBUQVMgKi8KLQotI2lmICFkZWZpbmVkKFRBU19TUElOKQotI2RlZmluZSBUQVNfU1BJTihs b2NrKQlUQVMobG9jaykKLSNlbmRpZgkgLyogVEFTX1NQSU4gKi8KLQotCi0vKgotICogUGxhdGZv cm0taW5kZXBlbmRlbnQgb3V0LW9mLWxpbmUgc3VwcG9ydCByb3V0aW5lcwotICovCi1leHRlcm4g aW50IHNfbG9jayh2b2xhdGlsZSBzbG9ja190ICpsb2NrLCBjb25zdCBjaGFyICpmaWxlLCBpbnQg bGluZSwgY29uc3QgY2hhciAqZnVuYyk7Ci0KLS8qIFN1cHBvcnQgZm9yIGR5bmFtaWMgYWRqdXN0 bWVudCBvZiBzcGluc19wZXJfZGVsYXkgKi8KLSNkZWZpbmUgREVGQVVMVF9TUElOU19QRVJfREVM QVkgIDEwMAotCi1leHRlcm4gdm9pZCBzZXRfc3BpbnNfcGVyX2RlbGF5KGludCBzaGFyZWRfc3Bp bnNfcGVyX2RlbGF5KTsKLWV4dGVybiBpbnQJdXBkYXRlX3NwaW5zX3Blcl9kZWxheShpbnQgc2hh cmVkX3NwaW5zX3Blcl9kZWxheSk7Ci0KLS8qCi0gKiBTdXBwb3J0IGZvciBzcGluIGRlbGF5IHdo aWNoIGlzIHVzZWZ1bCBpbiB2YXJpb3VzIHBsYWNlcyB3aGVyZQotICogc3BpbmxvY2stbGlrZSBw cm9jZWR1cmVzIHRha2UgcGxhY2UuCi0gKi8KLXR5cGVkZWYgc3RydWN0Ci17Ci0JaW50CQkJc3Bp bnM7Ci0JaW50CQkJZGVsYXlzOwotCWludAkJCWN1cl9kZWxheTsKLQljb25zdCBjaGFyICpmaWxl OwotCWludAkJCWxpbmU7Ci0JY29uc3QgY2hhciAqZnVuYzsKLX0gU3BpbkRlbGF5U3RhdHVzOwot Ci1zdGF0aWMgaW5saW5lIHZvaWQKLWluaXRfc3Bpbl9kZWxheShTcGluRGVsYXlTdGF0dXMgKnN0 YXR1cywKLQkJCQljb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqZnVuYykK LXsKLQlzdGF0dXMtPnNwaW5zID0gMDsKLQlzdGF0dXMtPmRlbGF5cyA9IDA7Ci0Jc3RhdHVzLT5j dXJfZGVsYXkgPSAwOwotCXN0YXR1cy0+ZmlsZSA9IGZpbGU7Ci0Jc3RhdHVzLT5saW5lID0gbGlu ZTsKLQlzdGF0dXMtPmZ1bmMgPSBmdW5jOwotfQotCi0jZGVmaW5lIGluaXRfbG9jYWxfc3Bpbl9k ZWxheShzdGF0dXMpIGluaXRfc3Bpbl9kZWxheShzdGF0dXMsIF9fRklMRV9fLCBfX0xJTkVfXywg X19mdW5jX18pCi1leHRlcm4gdm9pZCBwZXJmb3JtX3NwaW5fZGVsYXkoU3BpbkRlbGF5U3RhdHVz ICpzdGF0dXMpOwotZXh0ZXJuIHZvaWQgZmluaXNoX3NwaW5fZGVsYXkoU3BpbkRlbGF5U3RhdHVz ICpzdGF0dXMpOwotCi0jZW5kaWYJIC8qIFNfTE9DS19IICovCmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9zdG9yYWdlL3NwaW4uaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2Uvc3Bpbi5oCmluZGV4IDMz ZTJhYjg3NTcyLi5lZWNlNzAyNmQzYiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9z cGluLmgKKysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9zcGluLmgKQEAgLTE0LDkgKzE0LDExIEBA CiAgKgkJQWNxdWlyZSBhIHNwaW5sb2NrLCB3YWl0aW5nIGlmIG5lY2Vzc2FyeS4KICAqCQlUaW1l IG91dCBhbmQgYWJvcnQoKSBpZiB1bmFibGUgdG8gYWNxdWlyZSB0aGUgbG9jayBpbiBhCiAgKgkJ InJlYXNvbmFibGUiIGFtb3VudCBvZiB0aW1lIC0tLSB0eXBpY2FsbHkgfiAxIG1pbnV0ZS4KKyAq CQlBY3F1aXJlIChpbmNsdWRpbmcgcmVhZCBiYXJyaWVyKSBzZW1hbnRpY3MuCiAgKgogICoJdm9p ZCBTcGluTG9ja1JlbGVhc2Uodm9sYXRpbGUgc2xvY2tfdCAqbG9jaykKICAqCQlVbmxvY2sgYSBw cmV2aW91c2x5IGFjcXVpcmVkIGxvY2suCisgKgkJUmVsZWFzZSAoaW5jbHVkaW5nIHdyaXRlIGJh cnJpZXIpIHNlbWFudGljcy4KICAqCiAgKglib29sIFNwaW5Mb2NrRnJlZShzbG9ja190ICpsb2Nr KQogICoJCVRlc3RzIGlmIHRoZSBsb2NrIGlzIGZyZWUuIFJldHVybnMgdHJ1ZSBpZiBmcmVlLCBm YWxzZSBpZiBsb2NrZWQuCkBAIC0zNSwxMSArMzcsNiBAQAogICoJZm9yIGEgQ0hFQ0tfRk9SX0lO VEVSUlVQVFMoKSB0byBvY2N1ciB3aGlsZSBob2xkaW5nIGEgc3BpbmxvY2ssIGFuZCBzbwogICoJ aXQgaXMgbm90IG5lY2Vzc2FyeSB0byBkbyBIT0xEL1JFU1VNRV9JTlRFUlJVUFRTKCkgaW4gdGhl c2UgbWFjcm9zLgogICoKLSAqCVRoZXNlIG1hY3JvcyBhcmUgaW1wbGVtZW50ZWQgaW4gdGVybXMg b2YgaGFyZHdhcmUtZGVwZW5kZW50IG1hY3JvcwotICoJc3VwcGxpZWQgYnkgc19sb2NrLmguICBU aGVyZSBpcyBub3QgY3VycmVudGx5IGFueSBleHRyYSBmdW5jdGlvbmFsaXR5Ci0gKglhZGRlZCBi eSB0aGlzIGhlYWRlciwgYnV0IHRoZXJlIGhhcyBiZWVuIGluIHRoZSBwYXN0IGFuZCBtYXkgc29t ZWRheQotICoJYmUgYWdhaW4uCi0gKgogICoKICAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5 Ni0yMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAogICogUG9ydGlvbnMg Q29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3Ju aWEKQEAgLTUxLDE1ICs0OCw2OCBAQAogI2lmbmRlZiBTUElOX0gKICNkZWZpbmUgU1BJTl9ICiAK LSNpbmNsdWRlICJzdG9yYWdlL3NfbG9jay5oIgorI2lmZGVmIEZST05URU5ECisjZXJyb3IgInNw aW4uaCBtYXkgbm90IGJlIGluY2x1ZGVkIGZyb20gZnJvbnRlbmQgY29kZSIKKyNlbmRpZgorCisj aW5jbHVkZSAicG9ydC9hdG9taWNzLmgiCisKKy8qIFN1cHBvcnQgZm9yIGR5bmFtaWMgYWRqdXN0 bWVudCBvZiBzcGluc19wZXJfZGVsYXkgKi8KKyNkZWZpbmUgREVGQVVMVF9TUElOU19QRVJfREVM QVkgIDEwMAorCit0eXBlZGVmIHBnX2F0b21pY19mbGFnIHNsb2NrX3Q7CisKKy8qCisgKiBTdXBw b3J0IGZvciBzcGluIGRlbGF5IHdoaWNoIGlzIHVzZWZ1bCBpbiB2YXJpb3VzIHBsYWNlcyB3aGVy ZQorICogc3BpbmxvY2stbGlrZSBwcm9jZWR1cmVzIHRha2UgcGxhY2UuCisgKi8KK3R5cGVkZWYg c3RydWN0Cit7CisJaW50CQkJc3BpbnM7CisJaW50CQkJZGVsYXlzOworCWludAkJCWN1cl9kZWxh eTsKKwljb25zdCBjaGFyICpmaWxlOworCWludAkJCWxpbmU7CisJY29uc3QgY2hhciAqZnVuYzsK K30gU3BpbkRlbGF5U3RhdHVzOworCitzdGF0aWMgaW5saW5lIHZvaWQKK2luaXRfc3Bpbl9kZWxh eShTcGluRGVsYXlTdGF0dXMgKnN0YXR1cywKKwkJCQljb25zdCBjaGFyICpmaWxlLCBpbnQgbGlu ZSwgY29uc3QgY2hhciAqZnVuYykKK3sKKwlzdGF0dXMtPnNwaW5zID0gMDsKKwlzdGF0dXMtPmRl bGF5cyA9IDA7CisJc3RhdHVzLT5jdXJfZGVsYXkgPSAwOworCXN0YXR1cy0+ZmlsZSA9IGZpbGU7 CisJc3RhdHVzLT5saW5lID0gbGluZTsKKwlzdGF0dXMtPmZ1bmMgPSBmdW5jOworfQogCisjZGVm aW5lIGluaXRfbG9jYWxfc3Bpbl9kZWxheShzdGF0dXMpIGluaXRfc3Bpbl9kZWxheShzdGF0dXMs IF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pCitleHRlcm4gdm9pZCBwZXJmb3JtX3NwaW5f ZGVsYXkoU3BpbkRlbGF5U3RhdHVzICpzdGF0dXMpOworZXh0ZXJuIHZvaWQgZmluaXNoX3NwaW5f ZGVsYXkoU3BpbkRlbGF5U3RhdHVzICpzdGF0dXMpOworZXh0ZXJuIHZvaWQgc2V0X3NwaW5zX3Bl cl9kZWxheShpbnQgc2hhcmVkX3NwaW5zX3Blcl9kZWxheSk7CitleHRlcm4gaW50CXVwZGF0ZV9z cGluc19wZXJfZGVsYXkoaW50IHNoYXJlZF9zcGluc19wZXJfZGVsYXkpOwogCi0jZGVmaW5lIFNw aW5Mb2NrSW5pdChsb2NrKQlTX0lOSVRfTE9DSyhsb2NrKQorLyogT3V0LW9mLWxpbmUgcGFydCBv ZiBzcGlubG9jayBhY3F1aXNpdGlvbi4gKi8KK2V4dGVybiBpbnQJc19sb2NrKHZvbGF0aWxlIHNs b2NrX3QgKmxvY2ssCisJCQkJICAgY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsCisJCQkJICAg Y29uc3QgY2hhciAqZnVuYyk7CiAKLSNkZWZpbmUgU3BpbkxvY2tBY3F1aXJlKGxvY2spIFNfTE9D Syhsb2NrKQorc3RhdGljIGlubGluZSB2b2lkCitTcGluTG9ja0luaXQodm9sYXRpbGUgc2xvY2tf dCAqbG9jaykKK3sKKwlwZ19hdG9taWNfaW5pdF9mbGFnKGxvY2spOworfQogCi0jZGVmaW5lIFNw aW5Mb2NrUmVsZWFzZShsb2NrKSBTX1VOTE9DSyhsb2NrKQorI2RlZmluZSBTcGluTG9ja0FjcXVp cmUobG9jaykJCQkJCQlcCisJKHBnX2F0b21pY190ZXN0X3NldF9mbGFnKGxvY2spID8gMCA6CQkJ XAorCSBzX2xvY2soKGxvY2spLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKSkKIAotI2Rl ZmluZSBTcGluTG9ja0ZyZWUobG9jaykJU19MT0NLX0ZSRUUobG9jaykKK3N0YXRpYyBpbmxpbmUg dm9pZAorU3BpbkxvY2tSZWxlYXNlKHZvbGF0aWxlIHNsb2NrX3QgKmxvY2spCit7CisJcGdfYXRv bWljX2NsZWFyX2ZsYWcobG9jayk7Cit9CiAKICNlbmRpZgkJCQkJCQkvKiBTUElOX0ggKi8KZGlm ZiAtLWdpdCBhL3NyYy90ZW1wbGF0ZS9zb2xhcmlzIGIvc3JjL3RlbXBsYXRlL3NvbGFyaXMKZGVs ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0ZDhkMzhhOGY4Li4wMDAwMDAwMDAwMAotLS0g YS9zcmMvdGVtcGxhdGUvc29sYXJpcworKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotIyBz cmMvdGVtcGxhdGUvc29sYXJpcwotCi0jIEV4dHJhIENGTEFHUyBmb3IgY29kZSB0aGF0IHdpbGwg Z28gaW50byBhIHNoYXJlZCBsaWJyYXJ5Ci1DRkxBR1NfU0w9Ii1mUElDIgpkaWZmIC0tZ2l0IGEv c3JjL3Rlc3QvcmVncmVzcy9yZWdyZXNzLmMgYi9zcmMvdGVzdC9yZWdyZXNzL3JlZ3Jlc3MuYwpp bmRleCBhMmRiNjA4MDg3Ni4uZGQ0MDM0ZThlZGEgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jl c3MvcmVncmVzcy5jCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvcmVncmVzcy5jCkBAIC02NTgsMzIg KzY1OCw5IEBAIHRlc3Rfc3BpbmxvY2sodm9pZCkKIAkJU3BpbkxvY2tBY3F1aXJlKCZzdHJ1Y3Rf d19sb2NrLmxvY2spOwogCQlTcGluTG9ja1JlbGVhc2UoJnN0cnVjdF93X2xvY2subG9jayk7CiAK LQkJLyogdGVzdCBiYXNpYyBvcGVyYXRpb25zIHZpYSB1bmRlcmx5aW5nIFNfKiBBUEkgKi8KLQkJ U19JTklUX0xPQ0soJnN0cnVjdF93X2xvY2subG9jayk7Ci0JCVNfTE9DSygmc3RydWN0X3dfbG9j ay5sb2NrKTsKLQkJU19VTkxPQ0soJnN0cnVjdF93X2xvY2subG9jayk7Ci0KIAkJLyogYW5kIHRo YXQgImNvbnRlbmRlZCIgYWNxdWlzaXRpb24gd29ya3MgKi8KIAkJc19sb2NrKCZzdHJ1Y3Rfd19s b2NrLmxvY2ssICJ0ZXN0ZmlsZSIsIDE3LCAidGVzdGZ1bmMiKTsKLQkJU19VTkxPQ0soJnN0cnVj dF93X2xvY2subG9jayk7Ci0KLQkJLyoKLQkJICogQ2hlY2ssIHVzaW5nIFRBUyBkaXJlY3RseSwg dGhhdCBhIHNpbmdsZSBzcGluIGN5Y2xlIGRvZXNuJ3QgYmxvY2sKLQkJICogd2hlbiBhY3F1aXJp bmcgYW4gYWxyZWFkeSBhY3F1aXJlZCBsb2NrLgotCQkgKi8KLSNpZmRlZiBUQVMKLQkJU19MT0NL KCZzdHJ1Y3Rfd19sb2NrLmxvY2spOwotCi0JCWlmICghVEFTKCZzdHJ1Y3Rfd19sb2NrLmxvY2sp KQotCQkJZWxvZyhFUlJPUiwgImFjcXVpcmVkIGFscmVhZHkgaGVsZCBzcGlubG9jayIpOwotCi0j aWZkZWYgVEFTX1NQSU4KLQkJaWYgKCFUQVNfU1BJTigmc3RydWN0X3dfbG9jay5sb2NrKSkKLQkJ CWVsb2coRVJST1IsICJhY3F1aXJlZCBhbHJlYWR5IGhlbGQgc3BpbmxvY2siKTsKLSNlbmRpZgkJ CQkJCQkvKiBkZWZpbmVkKFRBU19TUElOKSAqLwotCi0JCVNfVU5MT0NLKCZzdHJ1Y3Rfd19sb2Nr LmxvY2spOwotI2VuZGlmCQkJCQkJCS8qIGRlZmluZWQoVEFTKSAqLworCQlTcGluTG9ja1JlbGVh c2UoJnN0cnVjdF93X2xvY2subG9jayk7CiAKIAkJLyoKIAkJICogVmVyaWZ5IHRoYXQgYWZ0ZXIg YWxsIG9mIHRoaXMgdGhlIG5vbi1sb2NrIGNvbnRlbnRzIGFyZSBzdGlsbAotLSAKMi41MC4xIChB cHBsZSBHaXQtMTU1KQoK --000000000000cd4aa006433d5c9a Content-Type: application/octet-stream; name="v1-0004-Remove-configure-meson-checks-for-atomics.patch" Content-Disposition: attachment; filename="v1-0004-Remove-configure-meson-checks-for-atomics.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mht4l9203 RnJvbSA2MGQyMWMxOTUwZjkyZWQwYjBhMTBiMmNlYzI5YjI0MmExN2ZhMjc2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUaG9tYXMgTXVucm8gPHRob21hcy5tdW5yb0BnbWFpbC5jb20+ CkRhdGU6IE1vbiwgMTAgTm92IDIwMjUgMjM6MDM6MDAgKzEzMDAKU3ViamVjdDogW1BBVENIIHYx IDQvNF0gUmVtb3ZlIGNvbmZpZ3VyZS9tZXNvbiBjaGVja3MgZm9yIGF0b21pY3MuCgpUaGVzZSBh 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 ZXNvbi5idWlsZAppbmRleCAyNGFlZmZlOTI5Zi4uM2I4OGY2M2IwZGYgMTAwNjQ0Ci0tLSBhL21l c29uLmJ1aWxkCisrKyBiL21lc29uLmJ1aWxkCkBAIC0yMjEyLDY5ICsyMjEyLDYgQEAgaWYgbGx2 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== --000000000000cd4aa006433d5c9a--